mbkbucket 1.1.2 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,1413 @@
1
+ /* Modern Card Styles matching home.handlebars */
2
+ .dashboard-card {
3
+ background: white;
4
+ border-radius: var(--border-radius-lg-ml);
5
+ box-shadow: var(--shadow-md-ml);
6
+ border: 1px solid var(--gray-light-color-ml);
7
+ overflow: hidden;
8
+ transition: var(--transition-base-ml);
9
+ }
10
+
11
+ .dashboard-card:hover {
12
+ box-shadow: var(--shadow-lg-ml);
13
+ }
14
+
15
+ .card-header {
16
+ background: linear-gradient(135deg, var(--primary-color-ml) 0%, var(--primary-dark-color-ml) 100%);
17
+ color: white;
18
+ padding: 1rem;
19
+ border-bottom: 1px solid var(--gray-light-color-ml);
20
+ }
21
+
22
+ .card-title {
23
+ font-size: 1.25rem;
24
+ font-weight: 700;
25
+ margin: 0;
26
+ display: flex;
27
+ align-items: center;
28
+ gap: 0.75rem;
29
+ }
30
+
31
+ .card-icon {
32
+ width: 40px;
33
+ height: 40px;
34
+ background: rgba(255, 255, 255, 0.2);
35
+ border-radius: 50%;
36
+ display: flex;
37
+ align-items: center;
38
+ justify-content: center;
39
+ font-size: 1.1rem;
40
+ }
41
+
42
+ .card-body {
43
+ padding: 1rem;
44
+ }
45
+
46
+ /* File Stats Card - Welcome Style */
47
+ .file-stats {
48
+ background: linear-gradient(135deg, var(--primary-color-ml) 0%, var(--primary-dark-color-ml) 100%);
49
+ color: white;
50
+ border: none;
51
+ margin-bottom: 2rem;
52
+ }
53
+
54
+ .stats-content {
55
+ display: flex;
56
+ align-items: center;
57
+ gap: 1rem;
58
+ }
59
+
60
+ .stats-icon {
61
+ width: 60px;
62
+ height: 60px;
63
+ background: rgba(255, 255, 255, 0.2);
64
+ border-radius: 50%;
65
+ display: flex;
66
+ align-items: center;
67
+ justify-content: center;
68
+ font-size: 1.5rem;
69
+ flex-shrink: 0;
70
+ }
71
+
72
+ .stats-text h2 {
73
+ margin: 0;
74
+ font-size: 1.5rem;
75
+ font-weight: 700;
76
+ }
77
+
78
+ .stats-text p {
79
+ margin: 0.5rem 0 0;
80
+ opacity: 0.9;
81
+ font-size: 0.9rem;
82
+ }
83
+
84
+ /* Form styling - Modern approach */
85
+ .form-control {
86
+ border: 1px solid var(--gray-light-color-ml);
87
+ border-radius: var(--border-radius-r-ml);
88
+ padding: 0.75rem 1rem;
89
+ font-size: 0.9rem;
90
+ transition: var(--transition-fast-ml);
91
+ font-family: var(--font-family);
92
+ background: white;
93
+ }
94
+
95
+ .form-control:focus {
96
+ border-color: var(--primary-color-ml);
97
+ box-shadow: 0 0 0 3px rgba(13, 148, 136, 0.1);
98
+ outline: none;
99
+ }
100
+
101
+ .form-control-lg {
102
+ padding: 1rem 1.25rem;
103
+ font-size: 1rem;
104
+ border-radius: var(--border-radius-lg-ml);
105
+ }
106
+
107
+ .form-label {
108
+ font-weight: 600;
109
+ color: var(--dark-color-ml);
110
+ margin-bottom: 0.5rem;
111
+ font-size: 0.9rem;
112
+ display: block;
113
+ }
114
+
115
+ .form-text {
116
+ color: var(--gray-color-ml);
117
+ font-size: 0.8rem;
118
+ margin-top: 0.25rem;
119
+ display: flex;
120
+ align-items: center;
121
+ gap: 0.5rem;
122
+ }
123
+
124
+ /* Button styling - Modern hover effects */
125
+ .btn {
126
+ background: var(--primary-color-ml);
127
+ color: white;
128
+ border: none;
129
+ padding: 0.75rem 1.5rem;
130
+ border-radius: var(--border-radius-r-ml);
131
+ font-weight: 600;
132
+ cursor: pointer;
133
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
134
+ text-decoration: none;
135
+ display: inline-flex;
136
+ align-items: center;
137
+ justify-content: center;
138
+ gap: 0.5rem;
139
+ font-size: 0.9rem;
140
+ font-family: var(--font-family);
141
+ position: relative;
142
+ overflow: hidden;
143
+ }
144
+
145
+ .btn::before {
146
+ content: '';
147
+ position: absolute;
148
+ top: 50%;
149
+ left: 50%;
150
+ width: 0;
151
+ height: 0;
152
+ border-radius: 50%;
153
+ background: rgba(255, 255, 255, 0.2);
154
+ transform: translate(-50%, -50%);
155
+ transition: width 0.6s, height 0.6s;
156
+ }
157
+
158
+ .btn:hover::before {
159
+ width: 300px;
160
+ height: 300px;
161
+ }
162
+
163
+ .btn:hover {
164
+ background: var(--primary-dark-color-ml);
165
+ box-shadow: 0 4px 12px rgba(13, 148, 136, 0.3);
166
+ }
167
+
168
+ .btn:active {
169
+ transform: translateY(0);
170
+ }
171
+
172
+ .btn>* {
173
+ position: relative;
174
+ z-index: 1;
175
+ }
176
+
177
+ /* View toggle buttons */
178
+ .view-toggle-btn {
179
+ min-width: 110px;
180
+ font-weight: 700;
181
+ letter-spacing: 0.01em;
182
+ transition: all 0.2s ease;
183
+ }
184
+
185
+ .view-toggle-btn.active {
186
+ background: white;
187
+ color: var(--primary-color-ml);
188
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.12);
189
+ border-color: rgba(255, 255, 255, 0.4);
190
+ transform: translateY(-1px);
191
+ }
192
+
193
+ .view-toggle-btn:not(.active):hover {
194
+ opacity: 0.9;
195
+ transform: translateY(-1px);
196
+ }
197
+
198
+ .btn-lg {
199
+ padding: 1rem 2rem;
200
+ font-size: 1rem;
201
+ border-radius: var(--border-radius-lg-ml);
202
+ }
203
+
204
+ .btn-sm {
205
+ padding: 0.5rem 1rem;
206
+ font-size: 0.8rem;
207
+ }
208
+
209
+ .btn-secondary {
210
+ background: var(--gray-color-ml);
211
+ }
212
+
213
+ .btn-secondary:hover {
214
+ background: var(--dark-color-ml);
215
+ box-shadow: 0 4px 12px rgba(113, 128, 150, 0.3);
216
+ }
217
+
218
+ .btn-primary {
219
+ background: var(--primary-color-ml);
220
+ }
221
+
222
+ .btn-primary:hover {
223
+ background: var(--primary-dark-color-ml);
224
+ }
225
+
226
+ .btn-outline-secondary {
227
+ background: transparent;
228
+ color: black;
229
+ border: 2px solid black;
230
+ }
231
+
232
+ .btn-outline-secondary:hover {
233
+ background: var(--gray-color-ml);
234
+ color: white;
235
+ border-color: var(--gray-color-ml);
236
+ }
237
+
238
+ .btn-success {
239
+ background: var(--success-color-ml);
240
+ }
241
+
242
+ .btn-success:hover {
243
+ background: #059669;
244
+ box-shadow: 0 4px 12px rgba(22, 163, 74, 0.3);
245
+ }
246
+
247
+ .btn-danger {
248
+ background: var(--danger-color-ml);
249
+ }
250
+
251
+ .btn-danger:hover {
252
+ background: #b91c1c;
253
+ box-shadow: 0 4px 12px rgba(220, 38, 38, 0.3);
254
+ }
255
+
256
+ .w-100 {
257
+ width: 100%;
258
+ }
259
+
260
+ /* Alert styling - Modern gradients */
261
+ .alert {
262
+ padding: 1rem 1.5rem;
263
+ border-radius: var(--border-radius-lg-ml);
264
+ border: none;
265
+ margin-bottom: 1.5rem;
266
+ display: flex;
267
+ align-items: center;
268
+ gap: 0.75rem;
269
+ font-size: 0.9rem;
270
+ box-shadow: var(--shadow-md-ml);
271
+ animation: slideInDown 0.3s ease;
272
+ }
273
+
274
+ @keyframes slideInDown {
275
+ from {
276
+ opacity: 0;
277
+ transform: translateY(-20px);
278
+ }
279
+
280
+ to {
281
+ opacity: 1;
282
+ transform: translateY(0);
283
+ }
284
+ }
285
+
286
+ .alert-success {
287
+ background: linear-gradient(135deg, #d1fae5 0%, #a7f3d0 100%);
288
+ color: #065f46;
289
+ border-left: 4px solid var(--success-color-ml);
290
+ }
291
+
292
+ .alert-danger {
293
+ background: linear-gradient(135deg, #fee2e2 0%, #fecaca 100%);
294
+ color: #991b1b;
295
+ border-left: 4px solid var(--danger-color-ml);
296
+ }
297
+
298
+ .alert i {
299
+ font-size: 1.25rem;
300
+ }
301
+
302
+ .btn-close {
303
+ background: none;
304
+ border: none;
305
+ font-size: 1.2rem;
306
+ cursor: pointer;
307
+ margin-left: auto;
308
+ opacity: 0.7;
309
+ transition: var(--transition-fast-ml);
310
+ }
311
+
312
+ .btn-close:hover {
313
+ opacity: 1;
314
+ }
315
+
316
+ /* Grid layout - Consistent spacing */
317
+ .row {
318
+ display: flex;
319
+ margin: -0.75rem;
320
+ flex-wrap: wrap;
321
+ }
322
+
323
+ .col-lg-6 {
324
+ flex: 0 0 50%;
325
+ max-width: 50%;
326
+ padding: 0.75rem;
327
+ }
328
+
329
+ .g-4 {
330
+ margin: -1.25rem;
331
+ }
332
+
333
+ .g-4>* {
334
+ padding: 1.25rem;
335
+ }
336
+
337
+ .mb-4 {
338
+ margin-bottom: 1rem;
339
+ }
340
+
341
+ .h-100 {
342
+ height: 100%;
343
+ display: flex;
344
+ flex-direction: column;
345
+ }
346
+
347
+ /* Table styling - Modern clean design */
348
+ .table-responsive {
349
+ overflow-x: auto;
350
+ box-shadow: inset 0 0 0 1px var(--gray-light-color-ml);
351
+ }
352
+
353
+ .table {
354
+ width: 100%;
355
+ margin-bottom: 0;
356
+ background: white;
357
+ border-collapse: collapse;
358
+ }
359
+
360
+ .table thead {
361
+ background: linear-gradient(135deg, var(--dark-color-ml) 0%, #2d3748 100%);
362
+ color: white;
363
+ }
364
+
365
+ .table th,
366
+ .table td {
367
+ padding: 0.5rem 0.75rem;
368
+ vertical-align: middle;
369
+ border-bottom: 1px solid var(--gray-light-color-ml);
370
+ font-size: 0.9rem;
371
+ }
372
+
373
+ .table th {
374
+ font-weight: 600;
375
+ text-transform: uppercase;
376
+ font-size: 0.75rem;
377
+ letter-spacing: 0.05em;
378
+ }
379
+
380
+ .table tbody tr {
381
+ transition: all 0.2s ease;
382
+ position: relative;
383
+ }
384
+
385
+ .table tbody tr:hover {
386
+ background: linear-gradient(90deg, rgba(13, 148, 136, 0.03) 0%, transparent 100%);
387
+ }
388
+
389
+ .file-row {
390
+ border-left: 3px solid transparent;
391
+ transition: all 0.2s ease;
392
+ }
393
+
394
+ .file-row:hover {
395
+ border-left-color: var(--primary-color-ml);
396
+ background: linear-gradient(90deg, rgba(13, 148, 136, 0.05) 0%, transparent 100%);
397
+ }
398
+
399
+ .folder-row {
400
+ border-left: 3px solid transparent;
401
+ transition: all 0.2s ease;
402
+ cursor: pointer;
403
+ }
404
+
405
+ .folder-row:hover {
406
+ border-left-color: #f59e0b;
407
+ background: linear-gradient(90deg, rgba(245, 158, 11, 0.05) 0%, transparent 100%);
408
+ }
409
+
410
+ .folder-row .file-icon {
411
+ background: linear-gradient(135deg, #f59e0b 0%, #fbbf24 50%, rgba(245, 158, 11, 0.15) 100%);
412
+ color: #f59e0b;
413
+ box-shadow: 0 2px 8px rgba(245, 158, 11, 0.15);
414
+ }
415
+
416
+ .folder-row:hover .file-icon {
417
+ transform: scale(1.1);
418
+ box-shadow: 0 4px 12px rgba(245, 158, 11, 0.3);
419
+ }
420
+
421
+ .breadcrumb-nav {
422
+ padding: 1rem 1.5rem;
423
+ background: linear-gradient(135deg, var(--light-color-ml) 0%, #f9fafb 100%);
424
+ border-bottom: 1px solid var(--gray-light-color-ml);
425
+ display: flex;
426
+ align-items: center;
427
+ gap: 0.5rem;
428
+ flex-wrap: wrap;
429
+ }
430
+
431
+ .breadcrumb-item {
432
+ display: flex;
433
+ align-items: center;
434
+ gap: 0.5rem;
435
+ font-size: 0.9rem;
436
+ }
437
+
438
+ .breadcrumb-link {
439
+ color: var(--primary-color-ml);
440
+ cursor: pointer;
441
+ transition: all 0.2s ease;
442
+ text-decoration: none;
443
+ font-weight: 600;
444
+ }
445
+
446
+ .breadcrumb-link:hover {
447
+ color: var(--primary-dark-color-ml);
448
+ text-decoration: underline;
449
+ }
450
+
451
+ .breadcrumb-separator {
452
+ color: var(--gray-color-ml);
453
+ margin: 0 0.25rem;
454
+ }
455
+
456
+ .breadcrumb-current {
457
+ color: var(--dark-color-ml);
458
+ font-weight: 600;
459
+ }
460
+
461
+ .file-icon {
462
+ width: 52px;
463
+ height: 52px;
464
+ background: linear-gradient(135deg, var(--primary-light-color-ml) 0%, rgba(13, 148, 136, 0.08) 100%);
465
+ border-radius: 10px;
466
+ display: flex;
467
+ align-items: center;
468
+ justify-content: center;
469
+ margin-right: 0.9rem;
470
+ color: var(--primary-color-ml);
471
+ font-size: 1.25rem;
472
+ flex-shrink: 0;
473
+ transition: transform 0.25s ease, box-shadow 0.25s ease;
474
+ }
475
+
476
+ .file-row:hover .file-icon {
477
+ transform: scale(1.1);
478
+ box-shadow: 0 2px 8px rgba(13, 148, 136, 0.2);
479
+ }
480
+
481
+ .file-info {
482
+ flex: 1;
483
+ min-width: 0;
484
+ }
485
+
486
+ .file-name {
487
+ font-weight: 600;
488
+ color: var(--dark-color-ml);
489
+ margin-bottom: 0;
490
+ font-size: 0.9rem;
491
+ white-space: nowrap;
492
+ overflow: hidden;
493
+ text-overflow: ellipsis;
494
+ cursor: help;
495
+ overflow-wrap: anywhere;
496
+ word-break: break-word;
497
+ }
498
+
499
+ .folder-path {
500
+ color: var(--gray-color-ml);
501
+ font-size: 0.85rem;
502
+ font-weight: 500;
503
+ white-space: nowrap;
504
+ overflow: hidden;
505
+ text-overflow: ellipsis;
506
+ display: block;
507
+ max-width: 300px;
508
+ cursor: help;
509
+ overflow-wrap: anywhere;
510
+ word-break: break-word;
511
+ }
512
+
513
+ .folder-path.clickable {
514
+ color: var(--primary-color-ml);
515
+ cursor: pointer;
516
+ transition: all 0.2s ease;
517
+ text-decoration: none;
518
+ }
519
+
520
+ .folder-path.clickable:hover {
521
+ color: var(--primary-dark-color-ml);
522
+ text-decoration: underline;
523
+ }
524
+
525
+ .file-size {
526
+ background: linear-gradient(135deg, var(--light-color-ml) 0%, #f9fafb 100%);
527
+ color: var(--dark-color-ml);
528
+ padding: 0.35rem 0.85rem;
529
+ border-radius: var(--border-radius-r-ml);
530
+ font-size: 0.8rem;
531
+ font-weight: 600;
532
+ border: 1px solid var(--gray-light-color-ml);
533
+ white-space: nowrap;
534
+ }
535
+
536
+ .btn-group {
537
+ display: flex;
538
+ gap: 0.35rem;
539
+ }
540
+
541
+ .btn-group .btn {
542
+ min-width: 42px;
543
+ display: flex;
544
+ align-items: center;
545
+ justify-content: center;
546
+ padding: 0.65rem 0.85rem;
547
+ }
548
+
549
+ .btn-group .btn i {
550
+ font-size: 0.95rem;
551
+ }
552
+
553
+ /* File type specific styling - Enhanced gradients */
554
+ .file-icon.image-file {
555
+ background: linear-gradient(135deg, #f59e0b 0%, #fbbf24 50%, rgba(245, 158, 11, 0.15) 100%);
556
+ color: #f59e0b;
557
+ box-shadow: 0 2px 8px rgba(245, 158, 11, 0.15);
558
+ }
559
+
560
+ .file-icon.video-file {
561
+ background: linear-gradient(135deg, #ef4444 0%, #f87171 50%, rgba(239, 68, 68, 0.15) 100%);
562
+ color: #ef4444;
563
+ box-shadow: 0 2px 8px rgba(239, 68, 68, 0.15);
564
+ }
565
+
566
+ .file-icon.audio-file {
567
+ background: linear-gradient(135deg, #8b5cf6 0%, #a78bfa 50%, rgba(139, 92, 246, 0.15) 100%);
568
+ color: #8b5cf6;
569
+ box-shadow: 0 2px 8px rgba(139, 92, 246, 0.15);
570
+ }
571
+
572
+ .file-icon.document-file {
573
+ background: linear-gradient(135deg, #06b6d4 0%, #22d3ee 50%, rgba(6, 182, 212, 0.15) 100%);
574
+ color: #06b6d4;
575
+ box-shadow: 0 2px 8px rgba(6, 182, 212, 0.15);
576
+ }
577
+
578
+ .file-icon.code-file {
579
+ background: linear-gradient(135deg, #10b981 0%, #34d399 50%, rgba(16, 185, 129, 0.15) 100%);
580
+ color: #10b981;
581
+ box-shadow: 0 2px 8px rgba(16, 185, 129, 0.15);
582
+ }
583
+
584
+ .file-row:hover .file-icon.image-file {
585
+ box-shadow: 0 4px 12px rgba(245, 158, 11, 0.3);
586
+ }
587
+
588
+ .file-row:hover .file-icon.video-file {
589
+ box-shadow: 0 4px 12px rgba(239, 68, 68, 0.3);
590
+ }
591
+
592
+ .file-row:hover .file-icon.audio-file {
593
+ box-shadow: 0 4px 12px rgba(139, 92, 246, 0.3);
594
+ }
595
+
596
+ .file-row:hover .file-icon.document-file {
597
+ box-shadow: 0 4px 12px rgba(6, 182, 212, 0.3);
598
+ }
599
+
600
+ .file-row:hover .file-icon.code-file {
601
+ box-shadow: 0 4px 12px rgba(16, 185, 129, 0.3);
602
+ }
603
+
604
+ /* Empty state - Modern design */
605
+ .empty-state {
606
+ text-align: center;
607
+ padding: 4rem 2rem;
608
+ color: var(--gray-color-ml);
609
+ }
610
+
611
+ .empty-state i {
612
+ font-size: 5rem;
613
+ margin-bottom: 1.5rem;
614
+ opacity: 0.3;
615
+ background: linear-gradient(135deg, var(--primary-color-ml), var(--primary-dark-color-ml));
616
+ -webkit-background-clip: text;
617
+ -webkit-text-fill-color: transparent;
618
+ background-clip: text;
619
+ }
620
+
621
+ .empty-state h4 {
622
+ color: var(--dark-color-ml);
623
+ margin-bottom: 0.75rem;
624
+ font-weight: 700;
625
+ font-size: 1.5rem;
626
+ }
627
+
628
+ .empty-state p {
629
+ margin-bottom: 2rem;
630
+ max-width: 400px;
631
+ margin-left: auto;
632
+ margin-right: auto;
633
+ line-height: 1.6;
634
+ color: var(--gray-color-ml);
635
+ }
636
+
637
+ /* Modal styling - Modern design */
638
+ .modal {
639
+ position: fixed;
640
+ top: 0;
641
+ left: 0;
642
+ width: 100%;
643
+ height: 100%;
644
+ background: rgba(0, 0, 0, 0.6);
645
+ backdrop-filter: blur(4px);
646
+ display: none;
647
+ align-items: center;
648
+ justify-content: center;
649
+ z-index: 1000;
650
+ animation: fadeIn 0.2s ease;
651
+ }
652
+
653
+ @keyframes fadeIn {
654
+ from {
655
+ opacity: 0;
656
+ }
657
+
658
+ to {
659
+ opacity: 1;
660
+ }
661
+ }
662
+
663
+ .modal.show {
664
+ display: flex;
665
+ }
666
+
667
+ .modal-dialog {
668
+ max-width: 500px;
669
+ width: 90%;
670
+ animation: slideUp 0.3s ease;
671
+ }
672
+
673
+ /* Preview modal sizing variants */
674
+ .modal-dialog.preview-compact {
675
+ max-width: 700px;
676
+ }
677
+
678
+ .modal-dialog.preview-large {
679
+ max-width: 1100px;
680
+ }
681
+
682
+ @keyframes slideUp {
683
+ from {
684
+ opacity: 0;
685
+ transform: translateY(20px);
686
+ }
687
+
688
+ to {
689
+ opacity: 1;
690
+ transform: translateY(0);
691
+ }
692
+ }
693
+
694
+ .modal-content {
695
+ background: white;
696
+ border-radius: var(--border-radius-lg-ml);
697
+ box-shadow: 0 8px 16px rgba(0, 0, 0, 0.08), 0 4px 8px rgba(0, 0, 0, 0.05);
698
+ overflow: hidden;
699
+ }
700
+
701
+ /* Preview-specific styles */
702
+ .preview-header-controls {
703
+ display: flex;
704
+ gap: 0.5rem;
705
+ align-items: center;
706
+ }
707
+
708
+ #previewModal .preview-content {
709
+ width: 100%;
710
+ display: flex;
711
+ align-items: center;
712
+ justify-content: center;
713
+ min-height: 120px;
714
+ }
715
+
716
+ #previewModal img.preview-img {
717
+ max-width: 100%;
718
+ max-height: 75vh;
719
+ display: block;
720
+ }
721
+
722
+ #previewModal video.preview-video,
723
+ #previewModal audio.preview-audio {
724
+ width: 100%;
725
+ max-height: 75vh;
726
+ display: block;
727
+ }
728
+
729
+ #previewModal iframe.preview-iframe {
730
+ width: 100%;
731
+ height: 75vh;
732
+ border: none;
733
+ }
734
+
735
+ #previewModal pre {
736
+ text-align: left;
737
+ max-height: 70vh;
738
+ overflow: auto;
739
+ white-space: pre-wrap;
740
+ padding: 1rem;
741
+ border-radius: 6px;
742
+ background: #f8fafc;
743
+ color: var(--dark-color-ml);
744
+ }
745
+
746
+ .preview-footer {
747
+ display: flex;
748
+ gap: 0.5rem;
749
+ align-items: center;
750
+ justify-content: flex-end;
751
+ }
752
+
753
+ .preview-actions {
754
+ display: flex;
755
+ gap: 0.5rem;
756
+ align-items: center;
757
+ }
758
+
759
+ /* Fullscreen state (native fullscreen) */
760
+ :fullscreen .modal-dialog,
761
+ :-webkit-full-screen .modal-dialog {
762
+ width: 100vw;
763
+ height: 100vh;
764
+ }
765
+
766
+ :fullscreen .preview-content,
767
+ :-webkit-full-screen .preview-content {
768
+ height: 100vh;
769
+ }
770
+
771
+ .btn-close[aria-label] {
772
+ font-weight: 700;
773
+ }
774
+
775
+
776
+ .modal-header {
777
+ background: linear-gradient(135deg, var(--danger-color-ml) 0%, #b91c1c 100%);
778
+ color: white;
779
+ padding: 0.5rem;
780
+ display: flex;
781
+ align-items: center;
782
+ justify-content: space-between;
783
+ }
784
+
785
+ .modal-title {
786
+ margin: 0;
787
+ font-size: 1.25rem;
788
+ font-weight: 700;
789
+ display: flex;
790
+ align-items: center;
791
+ gap: 0.75rem;
792
+ }
793
+
794
+ /* Allow preview filename to wrap and break long words */
795
+ #previewModal .modal-title #previewFileName {
796
+ display: inline-block;
797
+ max-width: calc(100% - 120px);
798
+ overflow-wrap: anywhere;
799
+ word-break: break-word;
800
+ white-space: normal;
801
+ }
802
+
803
+ .modal-body {
804
+ padding: 0.5rem;
805
+ text-align: center;
806
+ }
807
+
808
+ .modal-body i {
809
+ color: var(--danger-color-ml);
810
+ margin-bottom: 1.25rem;
811
+ }
812
+
813
+ .modal-body h6 {
814
+ color: var(--dark-color-ml);
815
+ margin-bottom: 1rem;
816
+ font-weight: 700;
817
+ font-size: 1.1rem;
818
+ }
819
+
820
+ .modal-body p {
821
+ margin-bottom: 0;
822
+ }
823
+
824
+ .modal-footer {
825
+ padding: 0.5rem;
826
+ display: flex;
827
+ gap: 1rem;
828
+ justify-content: center;
829
+ border-top: 1px solid var(--gray-light-color-ml);
830
+ background: var(--light-color-ml);
831
+ }
832
+
833
+ /* Pagination - Modern quick-link style */
834
+ .pagination {
835
+ display: flex;
836
+ justify-content: center;
837
+ gap: 0.5rem;
838
+ margin: 0;
839
+ padding: 0;
840
+ }
841
+
842
+ .page-item {
843
+ list-style: none;
844
+ }
845
+
846
+ .page-link {
847
+ display: flex;
848
+ align-items: center;
849
+ justify-content: center;
850
+ min-width: 42px;
851
+ height: 42px;
852
+ padding: 0.5rem 1rem;
853
+ color: var(--dark-color-ml);
854
+ background: white;
855
+ border: 1px solid var(--gray-light-color-ml);
856
+ border-radius: var(--border-radius-md-ml);
857
+ text-decoration: none;
858
+ transition: all var(--transition-base-ml);
859
+ font-size: 0.95rem;
860
+ font-weight: 600;
861
+ position: relative;
862
+ overflow: hidden;
863
+ }
864
+
865
+ .page-link::before {
866
+ content: '';
867
+ position: absolute;
868
+ top: 0;
869
+ left: -100%;
870
+ width: 100%;
871
+ height: 100%;
872
+ background: linear-gradient(90deg, transparent, rgba(13, 148, 136, 0.1), transparent);
873
+ transition: left 0.5s;
874
+ }
875
+
876
+ .page-link:hover::before {
877
+ left: 100%;
878
+ }
879
+
880
+ .page-link:hover {
881
+ background: var(--primary-color-ml);
882
+ color: white;
883
+ border-color: var(--primary-color-ml);
884
+ transform: translateY(-2px);
885
+ box-shadow: 0 4px 12px rgba(13, 148, 136, 0.3);
886
+ }
887
+
888
+ .page-item.active .page-link {
889
+ background: linear-gradient(135deg, var(--primary-color-ml), var(--primary-dark-color-ml));
890
+ color: white;
891
+ border-color: var(--primary-color-ml);
892
+ box-shadow: 0 4px 12px rgba(13, 148, 136, 0.3);
893
+ }
894
+
895
+ .page-item.disabled .page-link {
896
+ color: var(--text-muted-color-ml);
897
+ background: var(--light-color-ml);
898
+ border-color: var(--gray-light-color-ml);
899
+ cursor: not-allowed;
900
+ opacity: 0.6;
901
+ }
902
+
903
+ .page-item.disabled .page-link:hover {
904
+ transform: none;
905
+ box-shadow: none;
906
+ }
907
+
908
+ /* Upload Progress Styling - Enhanced shimmer effect */
909
+ .progress-container {
910
+ width: 100%;
911
+ height: 10px;
912
+ background: var(--gray-light-color-ml);
913
+ border-radius: var(--border-radius-r-ml);
914
+ overflow: hidden;
915
+ position: relative;
916
+ box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1);
917
+ }
918
+
919
+ .progress-bar {
920
+ height: 100%;
921
+ background: linear-gradient(135deg, var(--primary-color-ml) 0%, var(--success-color-ml) 100%);
922
+ border-radius: var(--border-radius-r-ml);
923
+ transition: width 0.5s cubic-bezier(0.4, 0, 0.2, 1);
924
+ position: relative;
925
+ overflow: hidden;
926
+ box-shadow: 0 2px 4px rgba(13, 148, 136, 0.3);
927
+ }
928
+
929
+ .progress-bar::before {
930
+ content: '';
931
+ position: absolute;
932
+ top: 0;
933
+ left: 0;
934
+ bottom: 0;
935
+ right: 0;
936
+ background: linear-gradient(90deg,
937
+ transparent,
938
+ rgba(255, 255, 255, 0.2),
939
+ transparent);
940
+ animation: shimmer 2s infinite;
941
+ }
942
+
943
+ @keyframes shimmer {
944
+ 0% {
945
+ transform: translateX(-100%);
946
+ }
947
+
948
+ 100% {
949
+ transform: translateX(100%);
950
+ }
951
+ }
952
+
953
+ .upload-label {
954
+ font-weight: 600;
955
+ color: var(--dark-color-ml);
956
+ font-size: 0.9rem;
957
+ }
958
+
959
+ .upload-percent {
960
+ font-weight: 700;
961
+ color: var(--primary-color-ml);
962
+ font-size: 0.9rem;
963
+ }
964
+
965
+ .upload-details {
966
+ display: flex;
967
+ justify-content: space-between;
968
+ align-items: center;
969
+ }
970
+
971
+ /* Drag & Drop and upload queue styles */
972
+ .upload-dropzone {
973
+ border: 2px dashed var(--gray-light-color-ml);
974
+ border-radius: var(--border-radius-r-ml);
975
+ padding: 1rem;
976
+ background: var(--light-color-ml);
977
+ transition: background 0.15s ease, border-color 0.15s ease;
978
+ }
979
+
980
+ .upload-dropzone.dragover {
981
+ background: linear-gradient(90deg, rgba(13, 148, 136, 0.04), transparent);
982
+ border-color: var(--primary-color-ml);
983
+ }
984
+
985
+ .upload-queue .upload-item {
986
+ display: flex;
987
+ align-items: center;
988
+ justify-content: space-between;
989
+ gap: 1rem;
990
+ padding: 0.5rem 0.75rem;
991
+ border-bottom: 1px dashed var(--gray-light-color-ml);
992
+ }
993
+
994
+ .upload-queue .upload-item .meta {
995
+ display: flex;
996
+ gap: 0.75rem;
997
+ align-items: center;
998
+ min-width: 0;
999
+ }
1000
+
1001
+ .upload-queue .upload-item .meta .name {
1002
+ font-weight: 600;
1003
+ white-space: nowrap;
1004
+ overflow: hidden;
1005
+ text-overflow: ellipsis;
1006
+ max-width: 240px;
1007
+ }
1008
+
1009
+ .upload-queue .upload-item .controls {
1010
+ display: flex;
1011
+ gap: 0.5rem;
1012
+ align-items: center;
1013
+ }
1014
+
1015
+ /* Skeleton loaders */
1016
+ .skeleton-row {
1017
+ display: flex;
1018
+ gap: 1rem;
1019
+ padding: 1rem;
1020
+ }
1021
+
1022
+ .skeleton-box {
1023
+ background: linear-gradient(90deg, #f5f7fa, #eef2f6);
1024
+ border-radius: 6px;
1025
+ }
1026
+
1027
+ .skeleton-box.s-80 {
1028
+ width: 80px;
1029
+ height: 16px;
1030
+ }
1031
+
1032
+ .skeleton-box.s-200 {
1033
+ width: 200px;
1034
+ height: 16px;
1035
+ }
1036
+
1037
+ .skeleton-box.s-40 {
1038
+ width: 40px;
1039
+ height: 16px;
1040
+ }
1041
+
1042
+ .skeleton-row .file-icon {
1043
+ width: 44px;
1044
+ height: 44px;
1045
+ border-radius: 8px;
1046
+ }
1047
+
1048
+ .btn:disabled {
1049
+ opacity: 0.5;
1050
+ cursor: not-allowed;
1051
+ transform: none !important;
1052
+ pointer-events: none;
1053
+ box-shadow: none !important;
1054
+ background: var(--gray-light-color-ml) !important;
1055
+ color: var(--text-muted-color-ml) !important;
1056
+ border-color: var(--gray-light-color-ml) !important;
1057
+ }
1058
+
1059
+ .btn.uploading {
1060
+ background: linear-gradient(135deg, var(--warning-color-ml), #d97706) !important;
1061
+ pointer-events: none;
1062
+ position: relative;
1063
+ overflow: hidden;
1064
+ }
1065
+
1066
+ .btn.uploading::after {
1067
+ content: '';
1068
+ position: absolute;
1069
+ top: 0;
1070
+ left: -100%;
1071
+ width: 100%;
1072
+ height: 100%;
1073
+ background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.3), transparent);
1074
+ animation: slideRight 1.5s infinite;
1075
+ }
1076
+
1077
+ @keyframes slideRight {
1078
+ 0% {
1079
+ left: -100%;
1080
+ }
1081
+
1082
+ 100% {
1083
+ left: 200%;
1084
+ }
1085
+ }
1086
+
1087
+ .btn.uploading:hover {
1088
+ background: linear-gradient(135deg, var(--warning-color-ml), #d97706) !important;
1089
+ transform: none;
1090
+ }
1091
+
1092
+ .upload-success {
1093
+ color: var(--success-color-ml);
1094
+ font-weight: 600;
1095
+ }
1096
+
1097
+ .upload-error {
1098
+ color: var(--danger-color-ml);
1099
+ font-weight: 600;
1100
+ }
1101
+
1102
+ .badge {
1103
+ display: inline-block;
1104
+ padding: 0.2rem 0.5rem;
1105
+ border-radius: 0.35rem;
1106
+ font-size: 0.8rem;
1107
+ font-weight: 700;
1108
+ vertical-align: middle;
1109
+ }
1110
+
1111
+ .bg-info {
1112
+ background: var(--info-color-ml);
1113
+ color: white;
1114
+ }
1115
+
1116
+ /* Responsive design */
1117
+ /* Responsive Design - Enhanced breakpoints */
1118
+ @media (max-width: 992px) {
1119
+ .col-lg-6 {
1120
+ flex: 0 0 100%;
1121
+ max-width: 100%;
1122
+ }
1123
+
1124
+ .stats-content {
1125
+ flex-direction: column;
1126
+ text-align: center;
1127
+ }
1128
+
1129
+ .stats-icon {
1130
+ margin: 0 auto;
1131
+ }
1132
+
1133
+ .filter-form {
1134
+ flex-direction: column;
1135
+ }
1136
+
1137
+ .filter-form .form-control {
1138
+ width: 100%;
1139
+ }
1140
+ }
1141
+
1142
+ @media (max-width: 768px) {
1143
+ .card-body {
1144
+ padding: 1rem;
1145
+ }
1146
+
1147
+ .stats-text h2 {
1148
+ font-size: 1.35rem;
1149
+ }
1150
+
1151
+ .btn-group {
1152
+ flex-direction: row;
1153
+ width: 100%;
1154
+ gap: 0.35rem;
1155
+ justify-content: flex-start;
1156
+ }
1157
+
1158
+ .btn-group .btn {
1159
+ border-radius: var(--border-radius-r-ml) !important;
1160
+ width: auto;
1161
+ min-width: 40px;
1162
+ padding: 0.5rem 0.65rem;
1163
+ }
1164
+
1165
+ /* Mobile table improvements */
1166
+ .table thead {
1167
+ display: none;
1168
+ }
1169
+
1170
+ .table tbody tr {
1171
+ display: block;
1172
+ border: 1px solid var(--gray-light-color-ml);
1173
+ background: white;
1174
+ }
1175
+
1176
+ .table tbody tr td {
1177
+ display: block;
1178
+ padding: 0;
1179
+ border: none;
1180
+ }
1181
+
1182
+ /* File row mobile layout — improved card-like layout for touch */
1183
+ /* Hide the leading checkbox column to reduce clutter on small screens */
1184
+ .file-row td:first-child {
1185
+ display: none !important;
1186
+ }
1187
+
1188
+ /* Main row: file icon + name + actions */
1189
+ .file-row td:nth-child(2) {
1190
+ padding: 0.5rem !important;
1191
+ display: flex;
1192
+ align-items: center;
1193
+ gap: 1rem;
1194
+ background: transparent;
1195
+ }
1196
+
1197
+ .file-row td:nth-child(2) .file-icon {
1198
+ width: 56px;
1199
+ height: 56px;
1200
+ font-size: 1.25rem;
1201
+ border-radius: 10px;
1202
+ }
1203
+
1204
+ .file-row td:nth-child(2) .file-info {
1205
+ display: block;
1206
+ min-width: 0;
1207
+ }
1208
+
1209
+ .file-row td:nth-child(2) .file-name {
1210
+ font-weight: 700;
1211
+ font-size: 1rem;
1212
+ color: var(--dark-color-ml);
1213
+ white-space: normal;
1214
+ overflow: hidden;
1215
+ text-overflow: ellipsis;
1216
+ max-width: calc(100% - 120px);
1217
+ }
1218
+
1219
+ /* Actions column — ensure buttons are touch friendly */
1220
+ .file-row td:nth-child(6),
1221
+ .file-row td:nth-child(5) {
1222
+ padding: 0.75rem 1rem !important;
1223
+ display: flex;
1224
+ align-items: center;
1225
+ justify-content: flex-end;
1226
+ gap: 0.5rem;
1227
+ }
1228
+
1229
+ .file-row .btn-group {
1230
+ justify-content: flex-end;
1231
+ }
1232
+
1233
+ .file-row .btn-group .btn {
1234
+ min-width: 44px;
1235
+ height: 44px;
1236
+ padding: 0.4rem;
1237
+ border-radius: 8px;
1238
+ display: inline-flex;
1239
+ align-items: center;
1240
+ justify-content: center;
1241
+ }
1242
+
1243
+ /* Metadata row: folder / size / modified shown as compact badges */
1244
+ .file-row td:nth-child(3),
1245
+ .file-row td:nth-child(4) {
1246
+ padding: 0rem 1rem !important;
1247
+ display: flex;
1248
+ align-items: center;
1249
+ color: var(--gray-color-ml);
1250
+ font-size: 0.85rem;
1251
+ flex-wrap: wrap;
1252
+ }
1253
+
1254
+ .file-row td:nth-child(3)::before {
1255
+ content: "Size:";
1256
+ font-weight: 600;
1257
+ color: var(--dark-color-ml);
1258
+ margin-right: 0.35rem;
1259
+ }
1260
+
1261
+ .file-row td:nth-child(4)::before {
1262
+ content: "Modified:";
1263
+ font-weight: 600;
1264
+ color: var(--dark-color-ml);
1265
+ margin-right: 0.35rem;
1266
+ }
1267
+
1268
+ /* Ensure clickable feel but keep action buttons interactive */
1269
+ .file-row {
1270
+ cursor: pointer;
1271
+ }
1272
+
1273
+ .file-row .btn {
1274
+ cursor: auto;
1275
+ }
1276
+
1277
+ /* Folder row mobile layout — show folder name, hide checkbox and extra columns */
1278
+ /* Hide the leading checkbox column and surface the folder name (which is in td:nth-child(2)) */
1279
+ .folder-row td:first-child {
1280
+ display: none !important;
1281
+ /* hide empty checkbox column */
1282
+ }
1283
+
1284
+ .folder-row td:nth-child(2) {
1285
+ display: block !important;
1286
+ padding: 1rem !important;
1287
+ border-bottom: 1px solid var(--gray-light-color-ml);
1288
+ background: var(--light-color-ml);
1289
+ border-radius: var(--border-radius-md-ml);
1290
+ }
1291
+
1292
+ /* Hide the remaining metadata columns on mobile for folder rows */
1293
+ .folder-row td:nth-child(3),
1294
+ .folder-row td:nth-child(4),
1295
+ .folder-row td:nth-child(5) {
1296
+ display: none !important;
1297
+ }
1298
+
1299
+ /* Make folder icon and name more prominent on mobile */
1300
+ .folder-row .file-icon {
1301
+ width: 48px;
1302
+ height: 48px;
1303
+ font-size: 1.2rem;
1304
+ margin-right: 0.75rem;
1305
+ }
1306
+
1307
+ .folder-row .file-name {
1308
+ font-weight: 700;
1309
+ font-size: 1rem;
1310
+ }
1311
+
1312
+ /* Show file extension on mobile */
1313
+ .file-name {
1314
+ max-width: 100% !important;
1315
+ white-space: normal !important;
1316
+ word-break: break-word;
1317
+ font-size: 0.9rem;
1318
+ }
1319
+
1320
+ .file-info {
1321
+ flex: 1;
1322
+ min-width: 0;
1323
+ overflow: visible;
1324
+ }
1325
+
1326
+ .file-icon {
1327
+ width: 48px;
1328
+ height: 48px;
1329
+ font-size: 1.2rem;
1330
+ margin-right: 0.85rem;
1331
+ }
1332
+
1333
+ .folder-path {
1334
+ max-width: 100%;
1335
+ white-space: nowrap;
1336
+ overflow: hidden;
1337
+ text-overflow: ellipsis;
1338
+ }
1339
+
1340
+ .action-btn {
1341
+ padding: 0.45rem 0.85rem;
1342
+ font-size: 0.85rem;
1343
+ }
1344
+
1345
+ .pagination {
1346
+ flex-wrap: wrap;
1347
+ gap: 0.35rem;
1348
+ }
1349
+
1350
+ .page-link {
1351
+ min-width: 38px;
1352
+ height: 38px;
1353
+ padding: 0.4rem 0.8rem;
1354
+ font-size: 0.85rem;
1355
+ }
1356
+
1357
+ .breadcrumb-nav {
1358
+ padding: 0.85rem 1rem;
1359
+ font-size: 0.85rem;
1360
+ }
1361
+
1362
+ .file-size {
1363
+ font-size: 0.75rem;
1364
+ padding: 0.3rem 0.7rem;
1365
+ }
1366
+ }
1367
+
1368
+ @media (max-width: 576px) {
1369
+ .card-header {
1370
+ padding: 1rem;
1371
+ }
1372
+
1373
+ .card-title {
1374
+ font-size: 1.15rem;
1375
+ }
1376
+
1377
+ .empty-state {
1378
+ padding: 2.5rem 1.25rem;
1379
+ }
1380
+
1381
+ .empty-state i {
1382
+ font-size: 4rem;
1383
+ }
1384
+
1385
+ .modal-dialog {
1386
+ width: 95%;
1387
+ }
1388
+
1389
+ .modal-body {
1390
+ padding: 0.5rem;
1391
+ }
1392
+
1393
+ .table-responsive {
1394
+ font-size: 0.8rem;
1395
+ }
1396
+
1397
+ .file-name {
1398
+ max-width: 120px;
1399
+ }
1400
+
1401
+ .btn {
1402
+ padding: 0.6rem 1rem;
1403
+ font-size: 0.85rem;
1404
+ }
1405
+
1406
+ .file-stats .stats-text h2 {
1407
+ font-size: 1.25rem;
1408
+ }
1409
+
1410
+ .file-stats .stats-text p {
1411
+ font-size: 0.85rem;
1412
+ }
1413
+ }