mbkbucket 1.1.2 → 1.2.1

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