mbkbucket 3.0.1 → 3.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.
@@ -1,2298 +1,1420 @@
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
- /* Collapsible Upload Section */
47
- .upload-card-header {
48
- display: flex;
49
- justify-content: space-between;
50
- align-items: center;
51
- cursor: pointer;
52
- transition: background 0.25s ease, box-shadow 0.25s ease;
53
- }
54
-
55
- .upload-card-header:hover {
56
- background: linear-gradient(122deg, #064c47 0%, #0b6b64 52%, #0f7e75 100%);
57
- }
58
-
59
- .collapse-btn {
60
- background: none;
61
- border: none;
62
- color: white;
63
- padding: 0.5rem;
64
- border-radius: 4px;
65
- transition: all 0.3s ease;
66
- cursor: pointer;
67
- }
68
-
69
- .collapse-btn:hover {
70
- background: rgba(255, 255, 255, 0.1);
71
- }
72
-
73
- .collapse-btn i {
74
- transition: transform 0.3s ease;
75
- }
76
-
77
- .collapse-btn.expanded i {
78
- transform: rotate(180deg);
79
- }
80
-
81
- .collapsible-content {
82
- padding: 0 !important;
83
- max-height: 0;
84
- overflow: hidden;
85
- opacity: 0;
86
- transform: translateY(-10px);
87
- border-top: 1px solid transparent;
88
- background: linear-gradient(180deg, rgba(247, 255, 252, 0.45) 0%, rgba(238, 250, 246, 0.72) 100%);
89
- transition:
90
- max-height 0.34s ease,
91
- opacity 0.25s ease,
92
- transform 0.3s ease,
93
- padding 0.24s ease,
94
- border-color 0.24s ease;
95
- }
96
-
97
- .collapsible-content.expanded {
98
- padding: 1.15rem !important;
99
- max-height: 2000px;
100
- opacity: 1;
101
- transform: translateY(0);
102
- border-top-color: rgba(11, 107, 100, 0.22);
103
- }
104
-
105
- .dashboard-card.upload-panel-open {
106
- box-shadow: 0 22px 42px rgba(7, 54, 51, 0.22);
107
- border-color: rgba(11, 107, 100, 0.3);
108
- }
109
-
110
- .dashboard-card.upload-panel-open .upload-card-header {
111
- box-shadow: inset 0 -1px 0 rgba(255, 255, 255, 0.14);
112
- }
113
-
114
- .dashboard-card.upload-panel-open .card-title {
115
- letter-spacing: 0.015em;
116
- }
117
-
118
- .dashboard-card.upload-panel-open .card-icon {
119
- background: rgba(255, 255, 255, 0.34);
120
- border: 1px solid rgba(255, 255, 255, 0.4);
121
- }
122
-
123
- .dashboard-card.upload-panel-open .form-label {
124
- color: #12413d;
125
- }
126
-
127
- .dashboard-card.upload-panel-open .form-text {
128
- color: #245651;
129
- }
130
-
131
- /* File Stats Card - Welcome Style */
132
- .file-stats {
133
- background: linear-gradient(135deg, var(--primary-color-ml) 0%, var(--primary-dark-color-ml) 100%);
134
- color: white;
135
- border: none;
136
- margin-bottom: 1rem;
137
- }
138
-
139
- .stats-content {
140
- display: flex;
141
- align-items: center;
142
- gap: 1rem;
143
- }
144
-
145
- .stats-icon {
146
- width: 60px;
147
- height: 60px;
148
- background: rgba(255, 255, 255, 0.2);
149
- border-radius: 50%;
150
- display: flex;
151
- align-items: center;
152
- justify-content: center;
153
- font-size: 1.5rem;
154
- flex-shrink: 0;
155
- }
156
-
157
- .stats-text h2 {
158
- margin: 0;
159
- font-size: 1.5rem;
160
- font-weight: 700;
161
- }
162
-
163
- .stats-text p {
164
- margin: 0.5rem 0 0;
165
- opacity: 0.9;
166
- font-size: 0.9rem;
167
- }
168
-
169
- .stats-bucket-badge {
170
- background: rgba(255, 255, 255, 0.2);
171
- padding: 0.35rem 0.75rem;
172
- border-radius: 0.5rem;
173
- font-size: 0.85rem;
174
- font-weight: 600;
175
- color: white;
176
- letter-spacing: 0.02em;
177
- }
178
-
179
- .bucket-switcher-wrap {
180
- margin-left: auto;
181
- }
182
-
183
- .bucket-switcher {
184
- display: flex;
185
- flex-direction: column;
186
- gap: 0.35rem;
187
- min-width: 230px;
188
- }
189
-
190
- .bucket-switcher-label {
191
- color: rgba(255, 255, 255, 0.9);
192
- font-size: 0.76rem;
193
- font-weight: 700;
194
- letter-spacing: 0.06em;
195
- text-transform: uppercase;
196
- }
197
-
198
- .bucket-switcher-control {
199
- position: relative;
200
- display: flex;
201
- align-items: center;
202
- background: rgba(255, 255, 255, 0.18);
203
- border: 1px solid rgba(255, 255, 255, 0.3);
204
- border-radius: 0.65rem;
205
- padding-left: 0.6rem;
206
- transition: var(--transition-fast-ml);
207
- }
208
-
209
- .bucket-switcher-control:focus-within {
210
- background: rgba(255, 255, 255, 0.26);
211
- border-color: rgba(255, 255, 255, 0.9);
212
- box-shadow: 0 0 0 3px rgba(255, 255, 255, 0.2);
213
- }
214
-
215
- .bucket-switcher-icon {
216
- color: rgba(255, 255, 255, 0.9);
217
- margin-right: 0.5rem;
218
- }
219
-
220
- .bucket-switcher-select {
221
- appearance: none;
222
- -webkit-appearance: none;
223
- -moz-appearance: none;
224
- background: transparent;
225
- border: none;
226
- color: #ffffff;
227
- font-weight: 600;
228
- padding: 0.5rem 2rem 0.5rem 0;
229
- min-width: 180px;
230
- box-shadow: none;
231
- }
232
-
233
- .bucket-switcher-select:focus {
234
- box-shadow: none;
235
- outline: none;
236
- }
237
-
238
- .bucket-switcher-select option {
239
- color: var(--dark-color-ml);
240
- }
241
-
242
- .bucket-switcher-caret {
243
- position: absolute;
244
- right: 0.65rem;
245
- color: rgba(255, 255, 255, 0.9);
246
- font-size: 0.8rem;
247
- pointer-events: none;
248
- }
249
-
250
- .bucket-switcher-select:disabled {
251
- opacity: 0.75;
252
- cursor: not-allowed;
253
- }
254
-
255
- .bucket-switcher-status {
256
- color: rgba(255, 255, 255, 0.9);
257
- font-size: 0.72rem;
258
- letter-spacing: 0.02em;
259
- }
260
-
261
- .quick-filter-group {
262
- display: inline-flex;
263
- align-items: center;
264
- gap: 0.45rem;
265
- flex-wrap: wrap;
266
- }
267
-
268
- .quick-filter-btn {
269
- background: rgba(255, 255, 255, 0.08);
270
- color: #ffffff;
271
- border: 1px solid rgba(255, 255, 255, 0.3);
272
- border-radius: 999px;
273
- padding: 0.36rem 0.72rem;
274
- font-size: 0.78rem;
275
- line-height: 1;
276
- min-height: 30px;
277
- }
278
-
279
- .quick-filter-btn:hover {
280
- background: rgba(255, 255, 255, 0.16);
281
- color: #ffffff;
282
- border-color: rgba(255, 255, 255, 0.5);
283
- box-shadow: none;
284
- }
285
-
286
- .quick-filter-btn.active {
287
- background: #ffffff;
288
- color: var(--primary-color-ml);
289
- border-color: #ffffff;
290
- font-weight: 700;
291
- }
292
-
293
- /* Form styling - Modern approach */
294
- .form-control {
295
- border: 1px solid var(--gray-light-color-ml);
296
- border-radius: var(--border-radius-r-ml);
297
- padding: 0.75rem 1rem;
298
- font-size: 0.9rem;
299
- transition: var(--transition-fast-ml);
300
- font-family: var(--font-family);
301
- background: white;
302
- }
303
-
304
- @media (max-width: 768px) {
305
- .stats-content {
306
- align-items: flex-start;
307
- flex-wrap: wrap;
308
- }
309
-
310
- .bucket-switcher-wrap {
311
- width: 100%;
312
- margin-left: 0;
313
- }
314
-
315
- .bucket-switcher {
316
- width: 100%;
317
- max-width: 100%;
318
- }
319
-
320
- .bucket-switcher-select {
321
- width: 100%;
322
- min-width: 0;
323
- }
324
-
325
- .quick-filter-group {
326
- width: 100%;
327
- justify-content: flex-start;
328
- margin-top: 0.35rem;
329
- }
330
- }
331
-
332
- .form-control:focus {
333
- border-color: var(--primary-color-ml);
334
- box-shadow: 0 0 0 3px rgba(13, 148, 136, 0.1);
335
- outline: none;
336
- }
337
-
338
- .form-control-lg {
339
- padding: 1rem 1.25rem;
340
- font-size: 1rem;
341
- border-radius: var(--border-radius-lg-ml);
342
- }
343
-
344
- .form-label {
345
- font-weight: 600;
346
- color: var(--dark-color-ml);
347
- margin-bottom: 0.5rem;
348
- font-size: 0.9rem;
349
- display: block;
350
- }
1
+ /* ==========================================================================
2
+ MBKBucket File Manager - Original Theme Palette + Gentelella v4 Layout
3
+ ========================================================================== */
351
4
 
352
- .form-text {
353
- color: var(--gray-color-ml);
354
- font-size: 0.8rem;
355
- margin-top: 0.25rem;
356
- display: flex;
357
- align-items: center;
358
- gap: 0.5rem;
359
- }
360
-
361
- /* Upload Drop Zone */
362
- .upload-drop-zone {
363
- border: 2px dashed var(--gray-color-ml);
364
- border-radius: var(--border-radius-lg-ml);
365
- background-color: #f8fafc;
366
- min-height: 160px;
367
- display: flex;
368
- align-items: center;
369
- justify-content: center;
370
- cursor: pointer;
371
- text-align: center;
372
- transition: all 0.2s ease;
373
- position: relative;
374
- overflow: hidden;
375
- }
376
-
377
- .upload-drop-zone:hover,
378
- .upload-drop-zone.dragover {
379
- border-color: var(--primary-color-ml);
380
- background-color: #f0fdfa;
381
- }
382
-
383
- .drop-zone-content {
384
- pointer-events: none;
385
- padding: 2rem;
386
- }
387
-
388
- .drop-zone-content i {
389
- font-size: 3rem;
390
- color: var(--primary-color-ml);
391
- margin-bottom: 1rem;
392
- opacity: 0.8;
393
- transition: transform 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275);
394
- }
395
-
396
- .upload-drop-zone:hover .drop-zone-content i {
397
- opacity: 1;
398
- }
399
-
400
- .drop-text {
401
- font-weight: 600;
402
- font-size: 1.1rem;
403
- color: var(--dark-color-ml);
404
- margin-bottom: 0.5rem;
405
- }
406
-
407
- .drop-hint {
408
- font-size: 0.85rem;
409
- color: var(--gray-color-ml);
410
- }
411
-
412
- /* Button styling - Modern hover effects */
5
+ :root {
6
+ --primary-color-ml: #0f766e;
7
+ --primary-light-color-ml: #d7f4ee;
8
+ --primary-dark-color-ml: #0b4f4a;
9
+ --secondary-color-ml: #1f8f84;
10
+ --dark-color-ml: #1f2a2a;
11
+ --light-color-ml: #f4f7f3;
12
+ --gray-color-ml: #667c79;
13
+ --gray-light-color-ml: #dce8e3;
14
+ --danger-color-ml: #dc2626;
15
+ --warning-color-ml: #d97706;
16
+ --success-color-ml: #16a34a;
17
+ --info-color-ml: #3b82f6;
18
+
19
+ --primary: var(--primary-color-ml);
20
+ --primary-lt: var(--primary-light-color-ml);
21
+ --primary-dk: var(--primary-dark-color-ml);
22
+ --primary-hover: #0d635c;
23
+
24
+ --body-bg: var(--light-color-ml);
25
+ --bg-surface: rgba(255, 255, 255, 0.82);
26
+ --bg-surface-secondary: rgba(244, 247, 243, 0.85);
27
+ --bg-surface-tertiary: #e2ede8;
28
+
29
+ --border-color: rgba(15, 118, 110, 0.16);
30
+ --border-color-light: rgba(15, 118, 110, 0.08);
31
+
32
+ --text: var(--dark-color-ml);
33
+ --text-secondary: #425855;
34
+ --text-muted: var(--gray-color-ml);
35
+ --text-disabled: #a0b2af;
36
+
37
+ --blue: #066fd1;
38
+ --azure: #1f8f84;
39
+ --green: #16a34a;
40
+ --yellow: #d97706;
41
+ --orange: #ea580c;
42
+ --red: #dc2626;
43
+ --purple: #7c3aed;
44
+ --cyan: #0f766e;
45
+
46
+ --green-lt: rgba(22, 163, 74, 0.12);
47
+ --red-lt: rgba(220, 38, 38, 0.1);
48
+ --yellow-lt: rgba(217, 119, 6, 0.12);
49
+ --blue-lt: rgba(6, 111, 209, 0.1);
50
+ --azure-lt: rgba(31, 143, 132, 0.12);
51
+ --purple-lt: rgba(124, 58, 237, 0.1);
52
+ --cyan-lt: rgba(15, 118, 110, 0.12);
53
+
54
+ --radius-sm: 6px;
55
+ --radius: 8px;
56
+ --radius-lg: 14px;
57
+ --radius-xl: 18px;
58
+
59
+ --shadow-sm: 0 2px 4px rgba(0, 0, 0, 0.04);
60
+ --shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05), 0 2px 4px -1px rgba(0, 0, 0, 0.03);
61
+ --shadow-md: 0 10px 15px -3px rgba(15, 118, 110, 0.08), 0 4px 6px -2px rgba(0, 0, 0, 0.04);
62
+ --shadow-lg: 0 20px 25px -5px rgba(15, 118, 110, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
63
+ --shadow-dropdown: 0 12px 30px rgba(15, 42, 42, 0.14), 0 4px 10px rgba(0, 0, 0, 0.05);
64
+
65
+ --font: "IBM Plex Sans", "Segoe UI", sans-serif;
66
+ --font-headings: "Sora", "Segoe UI", sans-serif;
67
+ --font-mono: 'JetBrains Mono', 'SF Mono', Consolas, monospace;
68
+ }
69
+
70
+ /* Base Layout & Page Header */
71
+ .page-wrapper {
72
+ max-width: 1600px;
73
+ margin: 0 auto;
74
+ width: 100%;
75
+ }
76
+
77
+ .page-header {
78
+ display: flex;
79
+ align-items: center;
80
+ justify-content: space-between;
81
+ margin-bottom: 1.2rem;
82
+ padding: 0.9rem 1.3rem;
83
+ border: 1px solid rgba(255, 255, 255, 0.9);
84
+ border-radius: 1rem;
85
+ background: rgba(255, 255, 255, 0.74);
86
+ backdrop-filter: blur(10px);
87
+ box-shadow: 0 12px 34px rgba(15, 23, 42, 0.05);
88
+ }
89
+
90
+ .page-header-row {
91
+ display: flex;
92
+ align-items: center;
93
+ justify-content: space-between;
94
+ width: 100%;
95
+ gap: 1rem;
96
+ }
97
+
98
+ .page-pretitle {
99
+ font-size: 11px;
100
+ font-weight: 700;
101
+ text-transform: uppercase;
102
+ letter-spacing: 0.6px;
103
+ color: var(--primary-color-ml);
104
+ margin-bottom: 2px;
105
+ }
106
+
107
+ .page-title {
108
+ font-family: var(--font-headings);
109
+ font-size: 1.45rem;
110
+ font-weight: 700;
111
+ color: var(--dark-color-ml);
112
+ margin: 0;
113
+ line-height: 1.2;
114
+ }
115
+
116
+ .page-actions {
117
+ display: flex;
118
+ align-items: center;
119
+ gap: 0.65rem;
120
+ }
121
+
122
+ /* Button System */
413
123
  .btn {
414
- background: var(--primary-color-ml);
415
- color: white;
416
- border: none;
417
- padding: 0.75rem 1.5rem;
418
- border-radius: var(--border-radius-r-ml);
419
- font-weight: 600;
420
- cursor: pointer;
421
- transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
422
- text-decoration: none;
423
- display: inline-flex;
424
- align-items: center;
425
- justify-content: center;
426
- gap: 0.5rem;
427
- font-size: 0.9rem;
428
- font-family: var(--font-family);
429
- position: relative;
430
- overflow: hidden;
431
- }
432
-
433
- .btn::before {
434
- content: '';
435
- position: absolute;
436
- top: 50%;
437
- left: 50%;
438
- width: 0;
439
- height: 0;
440
- border-radius: 50%;
441
- background: rgba(255, 255, 255, 0.2);
442
- transform: translate(-50%, -50%);
443
- transition: width 0.6s, height 0.6s;
444
- }
445
-
446
- .btn:hover::before {
447
- width: 300px;
448
- height: 300px;
449
- }
450
-
451
- .btn:hover {
452
- background: var(--primary-dark-color-ml);
453
- box-shadow: 0 4px 12px rgba(13, 148, 136, 0.3);
454
- }
455
-
456
- .btn:active {
457
- transform: translateY(0);
458
- }
459
-
460
- .btn>* {
461
- position: relative;
462
- z-index: 1;
463
- }
464
-
465
- /* View toggle buttons */
466
- .view-toggle-btn {
467
- min-width: 110px;
468
- font-weight: 700;
469
- letter-spacing: 0.01em;
470
- transition: all 0.2s ease;
471
- }
472
-
473
- .view-toggle-btn.active {
474
- background: white;
475
- color: var(--primary-color-ml);
476
- box-shadow: 0 4px 12px rgba(0, 0, 0, 0.12);
477
- border-color: rgba(255, 255, 255, 0.4);
478
- transform: translateY(-1px);
479
- }
480
-
481
- .view-toggle-btn:not(.active):hover {
482
- opacity: 0.9;
483
- transform: translateY(-1px);
484
- }
485
-
486
- .btn-lg {
487
- padding: 1rem 2rem;
488
- font-size: 1rem;
489
- border-radius: var(--border-radius-lg-ml);
490
- }
491
-
492
- .btn-sm {
493
- padding: 0.5rem 1rem;
494
- font-size: 0.8rem;
495
- }
496
-
497
- .btn-secondary {
498
- background: var(--gray-color-ml);
499
- }
500
-
501
- .btn-secondary:hover {
502
- background: var(--dark-color-ml);
503
- box-shadow: 0 4px 12px rgba(113, 128, 150, 0.3);
124
+ display: inline-flex;
125
+ align-items: center;
126
+ justify-content: center;
127
+ gap: 0.45rem;
128
+ font-family: var(--font);
129
+ font-size: 13px;
130
+ font-weight: 600;
131
+ line-height: 1.4;
132
+ padding: 7px 15px;
133
+ border-radius: var(--radius);
134
+ border: 1px solid transparent;
135
+ cursor: pointer;
136
+ transition: all 0.15s ease-in-out;
137
+ text-decoration: none;
138
+ white-space: nowrap;
139
+ }
140
+
141
+ .btn svg {
142
+ flex-shrink: 0;
504
143
  }
505
144
 
506
145
  .btn-primary {
507
- background: var(--primary-color-ml);
146
+ background: var(--primary-color-ml);
147
+ color: #ffffff;
148
+ border-color: var(--primary-color-ml);
149
+ box-shadow: 0 2px 4px rgba(15, 118, 110, 0.2);
508
150
  }
509
151
 
510
152
  .btn-primary:hover {
511
- background: var(--primary-dark-color-ml);
512
- }
513
-
514
- .btn-outline-secondary {
515
- background: transparent;
516
- color: black;
517
- border: 2px solid black;
153
+ background: var(--primary-dark-color-ml);
154
+ border-color: var(--primary-dark-color-ml);
155
+ color: #ffffff;
156
+ transform: translateY(-1px);
518
157
  }
519
158
 
520
- .btn-outline-secondary:hover {
521
- background: var(--gray-color-ml);
522
- color: white;
523
- border-color: var(--gray-color-ml);
159
+ .btn-outline {
160
+ background: rgba(255, 255, 255, 0.9);
161
+ color: var(--dark-color-ml);
162
+ border-color: var(--border-color);
524
163
  }
525
164
 
526
- .btn-success {
527
- background: var(--success-color-ml);
528
- }
529
-
530
- .btn-success:hover {
531
- background: #059669;
532
- box-shadow: 0 4px 12px rgba(22, 163, 74, 0.3);
165
+ .btn-outline:hover {
166
+ background: var(--primary-light-color-ml);
167
+ color: var(--primary-dark-color-ml);
168
+ border-color: var(--primary-color-ml);
533
169
  }
534
170
 
535
171
  .btn-danger {
536
- background: var(--danger-color-ml);
172
+ background: var(--danger-color-ml);
173
+ color: #ffffff;
174
+ border-color: var(--danger-color-ml);
537
175
  }
538
176
 
539
177
  .btn-danger:hover {
540
- background: #b91c1c;
541
- box-shadow: 0 4px 12px rgba(220, 38, 38, 0.3);
542
- }
543
-
544
- .w-100 {
545
- width: 100%;
178
+ background: #b91c1c;
179
+ border-color: #b91c1c;
180
+ color: #ffffff;
546
181
  }
547
182
 
548
- /* Alert styling - Modern gradients */
549
- .alert {
550
- padding: 1rem 1.5rem;
551
- border-radius: var(--border-radius-lg-ml);
552
- border: none;
553
- margin-bottom: 1.5rem;
554
- display: flex;
555
- align-items: center;
556
- gap: 0.75rem;
557
- font-size: 0.9rem;
558
- box-shadow: var(--shadow-md-ml);
559
- animation: slideInDown 0.3s ease;
183
+ .btn-sm {
184
+ padding: 5px 11px;
185
+ font-size: 12px;
560
186
  }
561
187
 
562
- @keyframes slideInDown {
563
- from {
564
- opacity: 0;
565
- transform: translateY(-20px);
566
- }
567
-
568
- to {
569
- opacity: 1;
570
- transform: translateY(0);
571
- }
188
+ .btn-icon {
189
+ width: 32px;
190
+ height: 32px;
191
+ padding: 0;
192
+ display: inline-flex;
193
+ align-items: center;
194
+ justify-content: center;
572
195
  }
573
196
 
574
- .alert-success {
575
- background: linear-gradient(135deg, #d1fae5 0%, #a7f3d0 100%);
576
- color: #065f46;
577
- border-left: 4px solid var(--success-color-ml);
197
+ /* File Manager Card Layout */
198
+ .card.file-manager {
199
+ background: rgba(255, 255, 255, 0.85);
200
+ backdrop-filter: blur(14px);
201
+ border: 1px solid rgba(255, 255, 255, 0.9);
202
+ border-radius: var(--radius-lg);
203
+ box-shadow: 0 14px 38px rgba(15, 23, 42, 0.06);
204
+ overflow: hidden;
578
205
  }
579
206
 
580
- .alert-danger {
581
- background: linear-gradient(135deg, #fee2e2 0%, #fecaca 100%);
582
- color: #991b1b;
583
- border-left: 4px solid var(--danger-color-ml);
207
+ .fm-layout {
208
+ display: grid;
209
+ grid-template-columns: 260px minmax(0, 1fr);
210
+ height: calc(100vh - 180px);
211
+ min-height: 580px;
212
+ max-height: 900px;
584
213
  }
585
214
 
586
- .alert i {
587
- font-size: 1.25rem;
215
+ /* Left Sidebar Tree */
216
+ .fm-tree-wrap {
217
+ border-right: 1px solid var(--border-color);
218
+ background: rgba(244, 247, 243, 0.65);
219
+ display: flex;
220
+ flex-direction: column;
221
+ padding: 12px 10px;
222
+ min-height: 0;
588
223
  }
589
224
 
590
- .btn-close {
591
- background: none;
592
- border: none;
593
- font-size: 1.2rem;
594
- cursor: pointer;
595
- margin-left: auto;
596
- opacity: 0.7;
597
- transition: var(--transition-fast-ml);
225
+ .fm-tree-header {
226
+ padding: 4px 10px 8px;
227
+ display: flex;
228
+ align-items: center;
229
+ justify-content: space-between;
598
230
  }
599
231
 
600
- .btn-close:hover {
601
- opacity: 1;
232
+ .fm-tree-title {
233
+ font-family: var(--font-headings);
234
+ font-size: 11px;
235
+ font-weight: 700;
236
+ text-transform: uppercase;
237
+ letter-spacing: 0.6px;
238
+ color: var(--primary-dark-color-ml);
602
239
  }
603
240
 
604
- /* Grid layout - Consistent spacing */
605
- .row {
606
- display: flex;
607
- margin: -0.75rem;
608
- flex-wrap: wrap;
241
+ .fm-tree {
242
+ flex: 1 1 auto;
243
+ overflow-y: auto;
244
+ padding-right: 4px;
609
245
  }
610
246
 
611
- .col-lg-6 {
612
- flex: 0 0 50%;
613
- max-width: 50%;
614
- padding: 0.75rem;
247
+ .fm-tree::-webkit-scrollbar {
248
+ width: 5px;
615
249
  }
616
-
617
- .g-4 {
618
- margin: -1.25rem;
250
+ .fm-tree::-webkit-scrollbar-thumb {
251
+ background: var(--gray-light-color-ml);
252
+ border-radius: 3px;
619
253
  }
620
254
 
621
- .g-4>* {
622
- padding: 1.25rem;
255
+ .tree-group {
256
+ margin-bottom: 3px;
623
257
  }
624
258
 
625
- .mb-4 {
626
- margin-bottom: 1rem;
259
+ .tree-link {
260
+ display: flex;
261
+ align-items: center;
262
+ gap: 8px;
263
+ width: 100%;
264
+ padding: 7px 11px;
265
+ background: transparent;
266
+ border: none;
267
+ border-radius: var(--radius-sm);
268
+ font-family: var(--font);
269
+ font-size: 13px;
270
+ color: var(--text-secondary);
271
+ text-align: left;
272
+ cursor: pointer;
273
+ transition: all 0.12s ease;
274
+ user-select: none;
275
+ font-weight: 500;
627
276
  }
628
277
 
629
- .h-100 {
630
- height: 100%;
631
- display: flex;
632
- flex-direction: column;
278
+ .tree-link:hover {
279
+ background: rgba(255, 255, 255, 0.8);
280
+ color: var(--primary-dark-color-ml);
633
281
  }
634
282
 
635
- /* Table styling - Modern clean design */
636
- .table-responsive {
637
- overflow-x: auto;
638
- border-radius: var(--border-radius-lg-ml);
639
- box-shadow: none;
283
+ .tree-link.active {
284
+ background: var(--primary-light-color-ml);
285
+ color: var(--primary-dark-color-ml);
286
+ font-weight: 600;
640
287
  }
641
288
 
642
- .table {
643
- width: 100%;
644
- margin-bottom: 0;
645
- background: white;
646
- border-collapse: separate;
647
- border-spacing: 0;
289
+ .tree-link svg {
290
+ color: var(--gray-color-ml);
291
+ flex-shrink: 0;
648
292
  }
649
293
 
650
- .table thead {
651
- background: var(--light-color-ml);
652
- color: var(--dark-color-ml);
653
- position: sticky;
654
- top: 0;
655
- z-index: 10;
294
+ .tree-link.active svg {
295
+ color: var(--primary-color-ml);
656
296
  }
657
297
 
658
- .table th,
659
- .table td {
660
- padding: 0.5rem 1.25rem;
661
- vertical-align: middle;
662
- border-bottom: 1px solid var(--gray-light-color-ml);
663
- font-size: 0.95rem;
298
+ .tree-link span {
299
+ flex: 1 1 auto;
300
+ min-width: 0;
301
+ overflow: hidden;
302
+ text-overflow: ellipsis;
303
+ white-space: nowrap;
304
+ color: inherit;
305
+ font-size: 13px;
664
306
  }
665
307
 
666
- .table th {
667
- font-weight: 700;
668
- text-transform: none;
669
- font-size: 0.85rem;
670
- letter-spacing: 0.02em;
671
- color: var(--text-muted-color-ml);
672
- border-bottom: 2px solid var(--gray-light-color-ml);
308
+ .tree-subs {
309
+ display: flex;
310
+ flex-direction: column;
311
+ margin-left: 12px;
312
+ padding-left: 6px;
313
+ border-left: 1px solid var(--border-color);
673
314
  }
674
315
 
675
- .table tbody tr {
676
- transition: background-color 0.2s ease, transform 0.2s cubic-bezier(0.2, 0.8, 0.2, 1);
677
- position: relative;
678
- background-color: white;
316
+ .tree-sub {
317
+ padding-left: 12px;
679
318
  }
680
319
 
681
- .table tbody tr:hover {
682
- background-color: var(--light-color-ml);
320
+ .tree-badge {
321
+ font-size: 10.5px;
322
+ padding: 1px 7px;
323
+ border-radius: 99px;
324
+ background: var(--primary-light-color-ml);
325
+ color: var(--primary-dark-color-ml);
326
+ font-weight: 600;
683
327
  }
684
328
 
685
- .file-row {
686
- border-left: 3px solid transparent;
329
+ /* Sidebar Storage & Bucket Section */
330
+ .fm-storage {
331
+ margin-top: auto;
332
+ padding: 12px;
333
+ border-top: 1px solid var(--border-color);
334
+ background: rgba(255, 255, 255, 0.85);
335
+ border-radius: var(--radius);
336
+ box-shadow: 0 2px 8px rgba(15, 118, 110, 0.05);
687
337
  }
688
338
 
689
- .file-row:hover {
690
- border-left-color: var(--primary-color-ml);
691
- background-color: #f0fdfa;
692
- /* Very light teal */
693
- z-index: 1;
339
+ .fm-storage-label {
340
+ font-size: 10.5px;
341
+ font-weight: 700;
342
+ text-transform: uppercase;
343
+ letter-spacing: 0.5px;
344
+ color: var(--primary-dark-color-ml);
345
+ margin-bottom: 6px;
694
346
  }
695
347
 
696
- .folder-row {
697
- border-left: 3px solid transparent;
698
- cursor: pointer;
348
+ .bucket-switcher-wrap {
349
+ position: relative;
699
350
  }
700
351
 
701
- .folder-row:hover {
702
- border-left-color: #f59e0b;
703
- background-color: #fffbeb;
704
- /* Very light amber */
705
- z-index: 1;
352
+ .bucket-switcher-control {
353
+ position: relative;
354
+ display: flex;
355
+ align-items: center;
706
356
  }
707
357
 
708
- .folder-row .file-icon {
709
- background: linear-gradient(160deg, #fff5db 0%, #ffe7b2 100%);
710
- color: #b45309;
711
- border: 1px solid rgba(180, 83, 9, 0.2);
712
- box-shadow: 0 3px 10px rgba(180, 83, 9, 0.14);
358
+ .bucket-switcher-icon {
359
+ position: absolute;
360
+ left: 10px;
361
+ color: var(--primary-color-ml);
362
+ pointer-events: none;
713
363
  }
714
364
 
715
- .folder-row:hover .file-icon {
716
- box-shadow: 0 8px 18px rgba(180, 83, 9, 0.24);
365
+ .bucket-switcher-select {
366
+ width: 100%;
367
+ padding: 6px 10px 6px 30px;
368
+ font-family: var(--font);
369
+ font-size: 12.5px;
370
+ font-weight: 600;
371
+ color: var(--dark-color-ml);
372
+ background: var(--light-color-ml);
373
+ border: 1px solid var(--border-color);
374
+ border-radius: var(--radius-sm);
375
+ outline: none;
376
+ cursor: pointer;
377
+ appearance: auto;
378
+ transition: border-color 0.15s ease;
717
379
  }
718
380
 
719
- .breadcrumb-nav {
720
- padding: 0.5rem 1.5rem;
721
- background: linear-gradient(135deg, var(--light-color-ml) 0%, #f9fafb 100%);
722
- border-bottom: 1px solid var(--gray-light-color-ml);
723
- display: flex;
724
- align-items: center;
725
- gap: 0.5rem;
726
- flex-wrap: wrap;
381
+ .bucket-switcher-select:focus {
382
+ border-color: var(--primary-color-ml);
727
383
  }
728
384
 
729
- .breadcrumb-item {
730
- display: flex;
731
- align-items: center;
732
- gap: 0.5rem;
733
- font-size: 0.9rem;
734
- min-width: 0;
385
+ .bucket-switcher-status {
386
+ font-size: 11px;
387
+ color: var(--primary-color-ml);
388
+ margin-top: 4px;
389
+ display: block;
735
390
  }
736
391
 
737
- .breadcrumb-nav .breadcrumb-item::before {
738
- display: none !important;
739
- content: none !important;
392
+ .storage-bar {
393
+ height: 5px;
394
+ background: var(--gray-light-color-ml);
395
+ border-radius: 3px;
396
+ overflow: hidden;
397
+ margin: 8px 0 6px;
740
398
  }
741
399
 
742
- .breadcrumb-link {
743
- background: transparent;
744
- border: 0;
745
- padding: 0;
746
- color: var(--primary-color-ml);
747
- cursor: pointer;
748
- transition: all 0.2s ease;
749
- text-decoration: none;
750
- font-weight: 600;
400
+ .fm-storage-meta {
401
+ font-size: 11.5px;
402
+ color: var(--gray-color-ml);
403
+ font-weight: 600;
751
404
  }
752
405
 
753
- .breadcrumb-link:hover {
754
- color: var(--primary-dark-color-ml);
755
- text-decoration: underline;
406
+ .fm-storage-subinfo {
407
+ font-size: 10.5px;
408
+ color: var(--gray-color-ml);
409
+ margin-top: 2px;
410
+ white-space: nowrap;
411
+ overflow: hidden;
412
+ text-overflow: ellipsis;
756
413
  }
757
414
 
758
- .breadcrumb-separator {
759
- color: var(--gray-color-ml);
760
- margin: 0 0.25rem;
415
+ /* Main Content Area */
416
+ .fm-main {
417
+ display: flex;
418
+ flex-direction: column;
419
+ min-height: 0;
420
+ background: rgba(255, 255, 255, 0.9);
761
421
  }
762
422
 
763
- .breadcrumb-current {
764
- color: var(--dark-color-ml);
765
- font-weight: 600;
766
- min-width: 0;
767
- overflow-wrap: anywhere;
423
+ /* Toolbar */
424
+ .fm-toolbar {
425
+ display: flex;
426
+ align-items: center;
427
+ justify-content: space-between;
428
+ gap: 12px;
429
+ padding: 10px 16px;
430
+ border-bottom: 1px solid var(--border-color);
431
+ flex-shrink: 0;
432
+ background: rgba(255, 255, 255, 0.7);
433
+ flex-wrap: wrap;
768
434
  }
769
435
 
770
- .file-icon {
771
- width: 42px;
772
- height: 42px;
773
- background: linear-gradient(160deg, #ecfdf8 0%, #d9f7ef 100%);
774
- border: 1px solid rgba(13, 148, 136, 0.18);
775
- border-radius: 12px;
776
- display: flex;
777
- align-items: center;
778
- justify-content: center;
779
- margin-right: 0.9rem;
780
- color: #0f766e;
781
- font-size: 1.15rem;
782
- flex-shrink: 0;
783
- box-shadow: 0 3px 10px rgba(13, 148, 136, 0.12);
784
- transition: transform 0.22s ease, box-shadow 0.22s ease, border-color 0.22s ease;
436
+ .fm-breadcrumb {
437
+ display: flex;
438
+ align-items: center;
439
+ gap: 5px;
440
+ flex-wrap: wrap;
441
+ min-height: 32px;
785
442
  }
786
443
 
787
- .file-icon i {
788
- transition: transform 0.22s ease;
444
+ .bc-link {
445
+ background: transparent;
446
+ border: none;
447
+ font-family: var(--font);
448
+ font-size: 13px;
449
+ color: var(--gray-color-ml);
450
+ cursor: pointer;
451
+ padding: 3px 8px;
452
+ border-radius: var(--radius-sm);
453
+ transition: all 0.12s ease;
454
+ display: inline-flex;
455
+ align-items: center;
456
+ gap: 4px;
457
+ font-weight: 500;
789
458
  }
790
459
 
791
- .file-row:hover .file-icon {
792
- box-shadow: 0 8px 18px rgba(13, 148, 136, 0.2);
460
+ .bc-link:hover {
461
+ background: var(--primary-light-color-ml);
462
+ color: var(--primary-dark-color-ml);
793
463
  }
794
464
 
795
- .file-info {
796
- flex: 1;
797
- min-width: 0;
465
+ .bc-link.current {
466
+ color: var(--dark-color-ml);
467
+ font-weight: 700;
468
+ cursor: default;
798
469
  }
799
470
 
800
- .file-name {
801
- font-weight: 600;
802
- color: var(--dark-color-ml);
803
- margin-bottom: 0;
804
- font-size: 0.9rem;
805
- white-space: nowrap;
806
- overflow: hidden;
807
- text-overflow: ellipsis;
808
- cursor: help;
809
- overflow-wrap: anywhere;
810
- word-break: break-word;
471
+ .bc-link.current:hover {
472
+ background: transparent;
811
473
  }
812
474
 
813
- .folder-path {
814
- color: var(--gray-color-ml);
815
- font-size: 0.85rem;
816
- font-weight: 500;
817
- white-space: nowrap;
818
- overflow: hidden;
819
- text-overflow: ellipsis;
820
- display: block;
821
- max-width: 300px;
822
- cursor: help;
823
- overflow-wrap: anywhere;
824
- word-break: break-word;
475
+ .fm-breadcrumb .sep {
476
+ color: var(--gray-color-ml);
477
+ font-size: 13px;
478
+ user-select: none;
825
479
  }
826
480
 
827
- .folder-path.clickable {
828
- color: var(--primary-color-ml);
829
- cursor: pointer;
830
- transition: all 0.2s ease;
831
- text-decoration: none;
481
+ .fm-toolbar-actions {
482
+ display: flex;
483
+ align-items: center;
484
+ gap: 10px;
485
+ margin-left: auto;
832
486
  }
833
487
 
834
- .folder-path.clickable:hover {
835
- color: var(--primary-dark-color-ml);
836
- text-decoration: underline;
488
+ /* Quick Filters */
489
+ .quick-filter-group {
490
+ display: inline-flex;
491
+ background: rgba(15, 118, 110, 0.06);
492
+ border: 1px solid var(--border-color);
493
+ border-radius: var(--radius);
494
+ padding: 2px;
837
495
  }
838
496
 
839
- .file-size {
840
- background: linear-gradient(135deg, var(--light-color-ml) 0%, #f9fafb 100%);
841
- color: var(--dark-color-ml);
842
- padding: 0.35rem 0.85rem;
843
- border-radius: var(--border-radius-r-ml);
844
- font-size: 0.8rem;
845
- font-weight: 600;
846
- border: 1px solid var(--gray-light-color-ml);
847
- white-space: nowrap;
497
+ .quick-filter-btn {
498
+ background: transparent;
499
+ border: none;
500
+ font-family: var(--font);
501
+ font-size: 12px;
502
+ font-weight: 600;
503
+ color: var(--text-secondary);
504
+ padding: 4px 11px;
505
+ border-radius: var(--radius-sm);
506
+ cursor: pointer;
507
+ transition: all 0.12s ease;
848
508
  }
849
509
 
850
- .btn-group {
851
- display: flex;
852
- gap: 0.35rem;
510
+ .quick-filter-btn:hover {
511
+ color: var(--primary-dark-color-ml);
853
512
  }
854
513
 
855
- .btn-group .btn {
856
- min-width: 42px;
857
- display: flex;
858
- align-items: center;
859
- justify-content: center;
860
- padding: 0.65rem 0.85rem;
514
+ .quick-filter-btn.active {
515
+ background: #ffffff;
516
+ color: var(--primary-color-ml);
517
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);
518
+ }
519
+
520
+ /* Search Box */
521
+ .search-box {
522
+ position: relative;
523
+ width: 210px;
524
+ display: flex;
525
+ align-items: center;
526
+ }
527
+
528
+ .search-box .s-icon {
529
+ position: absolute;
530
+ left: 9px;
531
+ width: 14px;
532
+ height: 14px;
533
+ color: var(--gray-color-ml);
534
+ pointer-events: none;
535
+ }
536
+
537
+ .search-box input {
538
+ width: 100%;
539
+ padding: 6px 26px 6px 28px;
540
+ font-family: var(--font);
541
+ font-size: 12.5px;
542
+ border: 1px solid var(--border-color);
543
+ border-radius: var(--radius);
544
+ background: rgba(255, 255, 255, 0.85);
545
+ color: var(--dark-color-ml);
546
+ outline: none;
547
+ transition: all 0.15s ease;
861
548
  }
862
549
 
863
- .btn-group .btn i {
864
- font-size: 0.95rem;
550
+ .search-box input:focus {
551
+ border-color: var(--primary-color-ml);
552
+ background: #ffffff;
553
+ box-shadow: 0 0 0 3px var(--primary-light-color-ml);
554
+ }
555
+
556
+ .search-clear-btn {
557
+ position: absolute;
558
+ right: 6px;
559
+ background: transparent;
560
+ border: none;
561
+ color: var(--gray-color-ml);
562
+ cursor: pointer;
563
+ font-size: 16px;
564
+ line-height: 1;
565
+ padding: 2px 4px;
566
+ }
567
+
568
+ /* View Switcher */
569
+ .fm-view-toggle {
570
+ display: inline-flex;
571
+ border: 1px solid var(--border-color);
572
+ border-radius: var(--radius);
573
+ overflow: hidden;
574
+ background: #ffffff;
575
+ }
576
+
577
+ .view-btn {
578
+ width: 32px;
579
+ height: 30px;
580
+ border: none;
581
+ background: transparent;
582
+ cursor: pointer;
583
+ color: var(--gray-color-ml);
584
+ display: flex;
585
+ align-items: center;
586
+ justify-content: center;
587
+ transition: all 0.12s ease;
865
588
  }
866
589
 
867
- /* File type specific styling - Enhanced gradients */
868
- .file-icon.image-file {
869
- background: linear-gradient(160deg, #fff6e3 0%, #ffe7bf 100%);
870
- color: #b45309;
871
- border-color: rgba(180, 83, 9, 0.22);
872
- box-shadow: 0 3px 10px rgba(180, 83, 9, 0.16);
590
+ .view-btn:hover {
591
+ background: var(--light-color-ml);
592
+ color: var(--dark-color-ml);
873
593
  }
874
594
 
875
- .file-icon.video-file {
876
- background: linear-gradient(160deg, #ffe9e7 0%, #ffd1cc 100%);
877
- color: #b91c1c;
878
- border-color: rgba(185, 28, 28, 0.22);
879
- box-shadow: 0 3px 10px rgba(185, 28, 28, 0.16);
595
+ .view-btn.active {
596
+ background: var(--primary-light-color-ml);
597
+ color: var(--primary-dark-color-ml);
598
+ }
599
+
600
+ /* File Grid Wrap & Items */
601
+ .fm-grid-wrap {
602
+ flex: 1 1 auto;
603
+ overflow-y: auto;
604
+ padding: 16px;
605
+ position: relative;
606
+ }
607
+
608
+ .fm-grid-wrap::-webkit-scrollbar {
609
+ width: 6px;
610
+ }
611
+ .fm-grid-wrap::-webkit-scrollbar-thumb {
612
+ background: var(--gray-light-color-ml);
613
+ border-radius: 3px;
614
+ }
615
+
616
+ /* Grid View */
617
+ .fm-grid.view-grid {
618
+ display: grid;
619
+ grid-template-columns: repeat(auto-fill, minmax(170px, 1fr));
620
+ grid-auto-rows: max-content;
621
+ align-content: start;
622
+ gap: 14px;
623
+ }
624
+
625
+ .fm-item {
626
+ position: relative;
627
+ background: rgba(255, 255, 255, 0.95);
628
+ border: 1px solid rgba(15, 118, 110, 0.15);
629
+ border-radius: var(--radius-lg);
630
+ cursor: pointer;
631
+ font-family: var(--font);
632
+ text-align: left;
633
+ transition: border-color 0.15s ease, transform 0.15s ease, box-shadow 0.15s ease;
634
+ user-select: none;
635
+ }
636
+
637
+ .fm-item:hover {
638
+ border-color: var(--primary-color-ml);
639
+ transform: translateY(-2px);
640
+ box-shadow: 0 8px 20px rgba(15, 118, 110, 0.1);
641
+ }
642
+
643
+ .fm-item.is-selected {
644
+ border-color: var(--primary-color-ml);
645
+ background: var(--primary-light-color-ml);
880
646
  }
881
647
 
882
- .file-icon.audio-file {
883
- background: linear-gradient(160deg, #e6efff 0%, #d6e5ff 100%);
884
- color: #1d4ed8;
885
- border-color: rgba(29, 78, 216, 0.22);
886
- box-shadow: 0 3px 10px rgba(29, 78, 216, 0.16);
648
+ /* Item styling in Grid View */
649
+ .fm-grid.view-grid .fm-item {
650
+ padding: 12px;
651
+ display: flex;
652
+ flex-direction: column;
653
+ align-items: flex-start;
654
+ gap: 8px;
655
+ }
656
+
657
+ .fm-grid.view-grid .fm-item-icon {
658
+ width: 100%;
659
+ aspect-ratio: 16 / 10;
660
+ border-radius: var(--radius);
661
+ display: flex;
662
+ align-items: center;
663
+ justify-content: center;
664
+ flex-shrink: 0;
665
+ background: var(--light-color-ml);
666
+ overflow: hidden;
667
+ position: relative;
668
+ }
669
+
670
+ .fm-item-thumb {
671
+ width: 100%;
672
+ height: 100%;
673
+ object-fit: cover;
674
+ }
675
+
676
+ .fm-item-icon .ext {
677
+ font-size: 13px;
678
+ font-weight: 700;
679
+ letter-spacing: 0.6px;
680
+ text-transform: uppercase;
681
+ }
682
+
683
+ .fm-item-icon .folder-svg {
684
+ width: 42px;
685
+ height: 42px;
887
686
  }
888
687
 
889
- .file-icon.document-file {
890
- background: linear-gradient(160deg, #e6faf9 0%, #c8f0ed 100%);
891
- color: #0f766e;
892
- border-color: rgba(15, 118, 110, 0.22);
893
- box-shadow: 0 3px 10px rgba(15, 118, 110, 0.16);
894
- }
688
+ .fm-grid.view-grid .fm-item-details {
689
+ width: 100%;
690
+ min-width: 0;
691
+ }
895
692
 
896
- .file-icon.code-file {
897
- background: linear-gradient(160deg, #e9fbe9 0%, #d5f4d5 100%);
898
- color: #166534;
899
- border-color: rgba(22, 101, 52, 0.22);
900
- box-shadow: 0 3px 10px rgba(22, 101, 52, 0.16);
693
+ .fm-item-name {
694
+ font-size: 13px;
695
+ font-weight: 600;
696
+ color: var(--dark-color-ml);
697
+ overflow: hidden;
698
+ text-overflow: ellipsis;
699
+ white-space: nowrap;
700
+ min-width: 0;
701
+ }
702
+
703
+ .fm-item-meta {
704
+ font-size: 11.5px;
705
+ color: var(--gray-color-ml);
706
+ margin-top: 2px;
707
+ white-space: nowrap;
708
+ overflow: hidden;
709
+ text-overflow: ellipsis;
710
+ }
711
+
712
+ /* Star & Context Menu Buttons */
713
+ .fm-star {
714
+ position: absolute;
715
+ top: 8px;
716
+ left: 8px;
717
+ width: 24px;
718
+ height: 24px;
719
+ display: flex;
720
+ align-items: center;
721
+ justify-content: center;
722
+ cursor: pointer;
723
+ border-radius: 50%;
724
+ color: var(--text-disabled);
725
+ opacity: 0;
726
+ background: rgba(255, 255, 255, 0.9);
727
+ backdrop-filter: blur(4px);
728
+ transition: opacity 0.12s ease, color 0.12s ease;
729
+ z-index: 2;
730
+ border: none;
901
731
  }
902
732
 
903
- .file-row:hover .file-icon.image-file {
904
- box-shadow: 0 8px 18px rgba(180, 83, 9, 0.24);
733
+ .fm-item:hover .fm-star,
734
+ .fm-item.starred .fm-star {
735
+ opacity: 1;
736
+ }
737
+
738
+ .fm-star.on {
739
+ color: var(--yellow);
740
+ opacity: 1;
905
741
  }
906
-
907
- .file-row:hover .file-icon.video-file {
908
- box-shadow: 0 8px 18px rgba(185, 28, 28, 0.24);
742
+
743
+ .fm-star:hover {
744
+ color: var(--yellow);
745
+ transform: scale(1.1);
746
+ }
747
+
748
+ .fm-item-menu {
749
+ position: absolute;
750
+ top: 8px;
751
+ right: 8px;
752
+ width: 24px;
753
+ height: 24px;
754
+ border: none;
755
+ background: rgba(255, 255, 255, 0.9);
756
+ backdrop-filter: blur(4px);
757
+ border-radius: 50%;
758
+ display: flex;
759
+ align-items: center;
760
+ justify-content: center;
761
+ cursor: pointer;
762
+ color: var(--gray-color-ml);
763
+ opacity: 0;
764
+ transition: opacity 0.12s ease, background 0.12s ease, color 0.12s ease;
765
+ z-index: 2;
909
766
  }
910
767
 
911
- .file-row:hover .file-icon.audio-file {
912
- box-shadow: 0 8px 18px rgba(29, 78, 216, 0.24);
768
+ .fm-item:hover .fm-item-menu {
769
+ opacity: 1;
913
770
  }
914
771
 
915
- .file-row:hover .file-icon.document-file {
916
- box-shadow: 0 8px 18px rgba(15, 118, 110, 0.24);
772
+ .fm-item-menu:hover {
773
+ background: #ffffff;
774
+ color: var(--primary-dark-color-ml);
775
+ box-shadow: var(--shadow-sm);
917
776
  }
918
777
 
919
- .file-row:hover .file-icon.code-file {
920
- box-shadow: 0 8px 18px rgba(22, 101, 52, 0.24);
778
+ /* List View */
779
+ .fm-grid.view-list {
780
+ display: flex;
781
+ flex-direction: column;
782
+ gap: 4px;
921
783
  }
922
784
 
923
- /* Empty state - Modern design */
924
- .empty-state {
925
- text-align: center;
926
- padding: 4rem 2rem;
927
- color: var(--gray-color-ml);
785
+ .fm-grid.view-list .fm-item {
786
+ padding: 8px 14px;
787
+ display: grid;
788
+ grid-template-columns: 20px 32px 1fr 110px 140px 32px 32px;
789
+ gap: 12px;
790
+ align-items: center;
791
+ border-radius: var(--radius);
792
+ }
793
+
794
+ .fm-grid.view-list .fm-item-icon {
795
+ width: 32px;
796
+ height: 32px;
797
+ border-radius: var(--radius-sm);
798
+ display: flex;
799
+ align-items: center;
800
+ justify-content: center;
801
+ background: var(--light-color-ml);
802
+ }
803
+
804
+ .fm-grid.view-list .fm-item-icon .ext {
805
+ font-size: 10.5px;
806
+ font-weight: 700;
807
+ }
808
+
809
+ .fm-grid.view-list .fm-item-icon .folder-svg {
810
+ width: 22px;
811
+ height: 22px;
812
+ }
813
+
814
+ .fm-grid.view-list .fm-star,
815
+ .fm-grid.view-list .fm-item-menu {
816
+ position: static;
817
+ opacity: 1;
818
+ background: transparent;
928
819
  }
929
820
 
930
- .empty-state i {
931
- font-size: 1.5rem;
932
- margin-bottom: 1.5rem;
933
- opacity: 0.3;
934
- background: linear-gradient(135deg, var(--primary-color-ml), var(--primary-dark-color-ml));
935
- -webkit-background-clip: text;
936
- -webkit-text-fill-color: transparent;
937
- background-clip: text;
821
+ .fm-grid.view-list .fm-item-meta {
822
+ font-size: 12px;
823
+ margin-top: 0;
938
824
  }
939
825
 
940
- .fa-add:before,
941
- .fa-plus:before {
942
- color: #fff !important;
943
- align-items: center;
826
+ /* Header row for list view */
827
+ .fm-list-header {
828
+ display: grid;
829
+ grid-template-columns: 20px 32px 1fr 110px 140px 32px 32px;
830
+ gap: 12px;
831
+ align-items: center;
832
+ padding: 6px 14px;
833
+ font-size: 11px;
834
+ font-weight: 700;
835
+ text-transform: uppercase;
836
+ letter-spacing: 0.5px;
837
+ color: var(--primary-dark-color-ml);
838
+ border-bottom: 1px solid var(--border-color);
839
+ margin-bottom: 4px;
944
840
  }
945
841
 
946
- .empty-state h4 {
947
- color: var(--dark-color-ml);
948
- margin-bottom: 0.75rem;
949
- font-weight: 700;
950
- font-size: 1.5rem;
842
+ /* Empty State */
843
+ .fm-empty {
844
+ padding: 80px 20px;
845
+ text-align: center;
846
+ color: var(--gray-color-ml);
847
+ display: flex;
848
+ flex-direction: column;
849
+ align-items: center;
850
+ justify-content: center;
851
+ }
852
+
853
+ .fm-empty[hidden],
854
+ [hidden] {
855
+ display: none !important;
856
+ }
857
+
858
+ .fm-empty svg {
859
+ color: var(--text-disabled);
860
+ margin-bottom: 12px;
951
861
  }
952
862
 
953
- .empty-state p {
954
- margin-bottom: 2rem;
955
- max-width: 400px;
956
- margin-left: auto;
957
- margin-right: auto;
958
- line-height: 1.6;
959
- color: var(--gray-color-ml);
863
+ .fm-empty .empty-title {
864
+ font-family: var(--font-headings);
865
+ font-size: 15px;
866
+ font-weight: 700;
867
+ color: var(--dark-color-ml);
868
+ margin-bottom: 4px;
960
869
  }
961
870
 
962
- .empty-state-illustration {
963
- margin-bottom: 1.5rem;
964
- position: relative;
965
- display: inline-block;
871
+ .fm-empty .empty-desc {
872
+ font-size: 13px;
873
+ max-width: 360px;
966
874
  }
967
875
 
968
- .empty-state-search-icon {
969
- font-size: 2rem;
970
- color: var(--primary-color-ml);
971
- position: absolute;
972
- bottom: -5px;
973
- right: -10px;
974
- background: white;
975
- border-radius: 50%;
976
- padding: 5px;
876
+ /* Skeletons */
877
+ .fm-skeleton-grid {
878
+ display: grid;
879
+ grid-template-columns: repeat(auto-fill, minmax(170px, 1fr));
880
+ gap: 14px;
881
+ width: 100%;
977
882
  }
978
883
 
979
- .empty-state-description {
980
- max-width: 400px;
981
- margin: 0 auto 1.5rem;
982
- color: var(--text-muted-color-ml);
884
+ .fm-skeleton-card {
885
+ background: rgba(255, 255, 255, 0.8);
886
+ border: 1px solid var(--border-color-light);
887
+ border-radius: var(--radius-lg);
888
+ padding: 12px;
889
+ display: flex;
890
+ flex-direction: column;
891
+ gap: 8px;
983
892
  }
984
893
 
985
- .empty-state-actions {
986
- display: flex;
987
- gap: 0.75rem;
988
- justify-content: center;
989
- flex-wrap: wrap;
894
+ .fm-skeleton-icon {
895
+ width: 100%;
896
+ aspect-ratio: 16 / 10;
897
+ border-radius: var(--radius);
898
+ background: linear-gradient(90deg, #eaf2ee 25%, #dce8e3 50%, #eaf2ee 75%);
899
+ background-size: 200% 100%;
900
+ animation: fm-shimmer 1.5s infinite;
990
901
  }
991
902
 
992
- .file-path-display {
993
- font-size: 0.75rem;
994
- color: var(--gray-color-ml);
995
- margin-bottom: 2px;
903
+ .fm-skeleton-line {
904
+ height: 12px;
905
+ border-radius: 4px;
906
+ background: linear-gradient(90deg, #eaf2ee 25%, #dce8e3 50%, #eaf2ee 75%);
907
+ background-size: 200% 100%;
908
+ animation: fm-shimmer 1.5s infinite;
996
909
  }
997
910
 
998
- .sort-icon {
999
- margin-left: 0.5rem;
1000
- }
911
+ .fm-skeleton-line.w-75 { width: 75%; }
912
+ .fm-skeleton-line.w-50 { width: 50%; }
1001
913
 
1002
- .sort-icon-inactive {
1003
- color: var(--gray-color-ml);
1004
- opacity: 0.3;
1005
- font-size: 0.8rem;
914
+ @keyframes fm-shimmer {
915
+ 0% { background-position: 200% 0; }
916
+ 100% { background-position: -200% 0; }
1006
917
  }
1007
918
 
1008
- .sort-icon-active {
1009
- color: var(--primary-color-ml);
1010
- font-size: 0.9rem;
919
+ /* Context Menu */
920
+ .fm-context-menu {
921
+ position: fixed;
922
+ z-index: 1000;
923
+ background: rgba(255, 255, 255, 0.95);
924
+ backdrop-filter: blur(12px);
925
+ border: 1px solid var(--border-color);
926
+ border-radius: var(--radius-lg);
927
+ box-shadow: var(--shadow-dropdown);
928
+ padding: 6px;
929
+ min-width: 175px;
930
+ animation: fm-menu-pop 0.12s cubic-bezier(0.16, 1, 0.3, 1);
1011
931
  }
1012
932
 
1013
- .bulk-actions-bar {
1014
- display: none;
1015
- padding: 0.5rem;
1016
- border-bottom: 1px solid var(--gray-light-color-ml);
1017
- background: var(--light-color-ml);
933
+ @keyframes fm-menu-pop {
934
+ from { opacity: 0; transform: scale(0.95); }
935
+ to { opacity: 1; transform: scale(1); }
1018
936
  }
1019
937
 
1020
- .virtualized-info {
1021
- display: flex;
1022
- justify-content: space-between;
1023
- align-items: center;
1024
- gap: 1rem;
1025
- padding: 0.75rem 1rem;
1026
- background: #f8fafc;
1027
- border-top: 1px solid var(--gray-light-color-ml);
1028
- color: var(--gray-color-ml);
1029
- font-size: 0.85rem;
938
+ .fm-context-item {
939
+ display: flex;
940
+ align-items: center;
941
+ gap: 8px;
942
+ width: 100%;
943
+ padding: 7px 11px;
944
+ border: none;
945
+ background: transparent;
946
+ font-family: var(--font);
947
+ font-size: 12.5px;
948
+ font-weight: 500;
949
+ color: var(--dark-color-ml);
950
+ border-radius: var(--radius-sm);
951
+ cursor: pointer;
952
+ text-align: left;
953
+ transition: background 0.1s ease, color 0.1s ease;
1030
954
  }
1031
955
 
1032
- .virtualized-actions {
1033
- display: inline-flex;
1034
- gap: 0.5rem;
1035
- align-items: center;
956
+ .fm-context-item:hover {
957
+ background: var(--primary-light-color-ml);
958
+ color: var(--primary-dark-color-ml);
1036
959
  }
1037
960
 
1038
- .toast-close-btn {
1039
- background: none;
1040
- border: none;
1041
- color: white;
1042
- cursor: pointer;
1043
- opacity: 0.8;
1044
- font-size: 1.2rem;
1045
- }
1046
-
1047
- .upload-item-meta-row {
1048
- display: flex;
1049
- align-items: center;
1050
- gap: 0.75rem;
1051
- min-width: 0;
1052
- width: 100%;
1053
- margin-bottom: 5px;
961
+ .fm-context-item.danger:hover {
962
+ background: var(--red-lt);
963
+ color: var(--danger-color-ml);
1054
964
  }
1055
965
 
1056
- .upload-item-size-label {
1057
- white-space: nowrap;
1058
- color: var(--text-muted-color-ml);
1059
- font-size: 0.875rem;
1060
- margin-left: auto;
966
+ .fm-context-divider {
967
+ height: 1px;
968
+ background: var(--border-color-light);
969
+ margin: 4px 0;
1061
970
  }
1062
971
 
1063
- .upload-item-status-row {
1064
- display: flex;
1065
- justify-content: space-between;
1066
- align-items: center;
1067
- gap: 0.5rem;
1068
- }
1069
-
1070
- /* Modal styling - Modern design */
972
+ /* Modals */
1071
973
  .modal {
1072
- position: fixed;
1073
- top: 0;
1074
- left: 0;
1075
- width: 100%;
1076
- height: 100%;
1077
- background: rgba(0, 0, 0, 0.6);
1078
- backdrop-filter: blur(4px);
1079
- display: none;
1080
- align-items: center;
1081
- justify-content: center;
1082
- z-index: 1000;
1083
- animation: fadeIn 0.2s ease;
1084
- }
1085
-
1086
- @keyframes fadeIn {
1087
- from {
1088
- opacity: 0;
1089
- }
1090
-
1091
- to {
1092
- opacity: 1;
1093
- }
974
+ display: none;
975
+ position: fixed;
976
+ inset: 0;
977
+ z-index: 1050;
978
+ overflow-x: hidden;
979
+ overflow-y: auto;
980
+ background: rgba(15, 42, 42, 0.45);
981
+ backdrop-filter: blur(6px);
982
+ align-items: center;
983
+ justify-content: center;
984
+ padding: 1rem;
1094
985
  }
1095
986
 
1096
987
  .modal.show {
1097
- display: flex;
988
+ display: flex;
1098
989
  }
1099
990
 
1100
991
  .modal-dialog {
1101
- max-width: 500px;
1102
- width: 90%;
1103
- animation: slideUp 0.3s ease;
1104
- }
1105
-
1106
- /* Preview modal sizing variants */
1107
- .modal-dialog.preview-compact {
1108
- max-width: 700px;
1109
- }
1110
-
1111
- .modal-dialog.preview-large {
1112
- max-width: 1100px;
1113
- }
1114
-
1115
- @keyframes slideUp {
1116
- from {
1117
- opacity: 0;
1118
- transform: translateY(20px);
1119
- }
1120
-
1121
- to {
1122
- opacity: 1;
1123
- transform: translateY(0);
1124
- }
1125
- }
1126
-
1127
- .modal-content {
1128
- background: white;
1129
- border-radius: var(--border-radius-lg-ml);
1130
- box-shadow: 0 8px 16px rgba(0, 0, 0, 0.08), 0 4px 8px rgba(0, 0, 0, 0.05);
1131
- overflow: hidden;
1132
- }
1133
-
1134
- /* Preview-specific styles */
1135
- .preview-header-controls {
1136
- display: flex;
1137
- gap: 0.5rem;
1138
- align-items: center;
1139
- }
1140
-
1141
- #previewModal .preview-content {
1142
- width: 100%;
1143
- display: flex;
1144
- align-items: center;
1145
- justify-content: center;
1146
- min-height: 120px;
1147
- }
1148
-
1149
- #previewModal img.preview-img {
1150
- max-width: 100%;
1151
- max-height: 75vh;
1152
- display: block;
992
+ position: relative;
993
+ width: 100%;
994
+ max-width: 480px;
995
+ margin: auto;
996
+ animation: modal-enter 0.2s cubic-bezier(0.16, 1, 0.3, 1);
1153
997
  }
1154
998
 
1155
- #previewModal video.preview-video,
1156
- #previewModal audio.preview-audio {
1157
- width: 100%;
1158
- max-height: 75vh;
1159
- display: block;
999
+ .modal-dialog.modal-lg {
1000
+ max-width: 680px;
1160
1001
  }
1161
1002
 
1162
- #previewModal iframe.preview-iframe {
1163
- width: 100%;
1164
- height: 75vh;
1165
- border: none;
1003
+ .modal-dialog.preview-modal-dialog {
1004
+ max-width: 900px;
1166
1005
  }
1167
1006
 
1168
- #previewModal pre {
1169
- text-align: left;
1170
- max-height: 70vh;
1171
- overflow: auto;
1172
- white-space: pre-wrap;
1173
- padding: 1rem;
1174
- border-radius: 6px;
1175
- background: #f8fafc;
1176
- color: var(--dark-color-ml);
1007
+ .preview-modal-dialog.is-fullscreen {
1008
+ max-width: 98vw;
1009
+ height: 96vh;
1177
1010
  }
1178
1011
 
1179
- .preview-footer {
1180
- display: flex;
1181
- gap: 0.5rem;
1182
- align-items: center;
1183
- justify-content: flex-end;
1012
+ .preview-modal-dialog.is-fullscreen .modal-content {
1013
+ height: 100%;
1184
1014
  }
1185
1015
 
1186
- .preview-actions {
1187
- display: flex;
1188
- gap: 0.5rem;
1189
- align-items: center;
1016
+ .preview-modal-dialog.is-fullscreen .preview-content {
1017
+ max-height: calc(96vh - 120px);
1190
1018
  }
1191
1019
 
1192
- /* Fullscreen state (native fullscreen) */
1193
- :fullscreen .modal-dialog,
1194
- :-webkit-full-screen .modal-dialog {
1195
- width: 100vw;
1196
- height: 100vh;
1020
+ @keyframes modal-enter {
1021
+ from { opacity: 0; transform: translateY(-12px) scale(0.98); }
1022
+ to { opacity: 1; transform: translateY(0) scale(1); }
1197
1023
  }
1198
1024
 
1199
- :fullscreen .preview-content,
1200
- :-webkit-full-screen .preview-content {
1201
- height: 100vh;
1202
- }
1203
-
1204
- .btn-close[aria-label] {
1205
- font-weight: 700;
1025
+ .modal-content {
1026
+ position: relative;
1027
+ display: flex;
1028
+ flex-direction: column;
1029
+ width: 100%;
1030
+ background: #ffffff;
1031
+ border: 1px solid var(--border-color);
1032
+ border-radius: var(--radius-xl);
1033
+ box-shadow: 0 20px 40px rgba(15, 42, 42, 0.16);
1034
+ outline: 0;
1206
1035
  }
1207
1036
 
1208
-
1209
1037
  .modal-header {
1210
- background: linear-gradient(135deg, var(--danger-color-ml) 0%, #b91c1c 100%);
1211
- color: white;
1212
- padding: 0.5rem;
1213
- display: flex;
1214
- align-items: flex-start;
1215
- justify-content: space-between;
1216
- gap: 0.75rem;
1038
+ display: flex;
1039
+ align-items: center;
1040
+ justify-content: space-between;
1041
+ padding: 14px 18px;
1042
+ border-bottom: 1px solid var(--border-color);
1217
1043
  }
1218
1044
 
1219
1045
  .modal-title {
1220
- margin: 0;
1221
- font-size: 1.25rem;
1222
- font-weight: 700;
1223
- display: flex;
1224
- align-items: center;
1225
- gap: 0.75rem;
1226
- flex: 1;
1227
- min-width: 0;
1228
- line-height: 1.2;
1229
- }
1230
-
1231
- #previewModal .modal-title i {
1232
- flex-shrink: 0;
1233
- }
1234
-
1235
- /* Allow preview filename to wrap and break long words */
1236
- #previewModal .modal-title #previewFileName {
1237
- display: inline-block;
1238
- max-width: 100%;
1239
- min-width: 0;
1240
- overflow: hidden;
1241
- text-overflow: ellipsis;
1242
- white-space: nowrap;
1046
+ font-family: var(--font-headings);
1047
+ display: flex;
1048
+ align-items: center;
1049
+ gap: 8px;
1050
+ font-size: 15px;
1051
+ font-weight: 700;
1052
+ color: var(--primary-dark-color-ml);
1053
+ margin: 0;
1243
1054
  }
1244
1055
 
1245
- #previewModal .preview-header-controls {
1246
- flex-shrink: 0;
1056
+ .modal-title-icon {
1057
+ color: var(--primary-color-ml);
1247
1058
  }
1248
1059
 
1249
- .upload-item-meta-row {
1250
- min-width: 0;
1251
- }
1252
-
1253
- .upload-file-icon {
1254
- width: 36px;
1255
- height: 36px;
1256
- margin-right: 0.6rem;
1257
- border-radius: 10px;
1258
- font-size: 1rem;
1259
- flex-shrink: 0;
1260
- }
1261
-
1262
- .upload-item-name {
1263
- min-width: 0;
1264
- max-width: 100%;
1265
- overflow: hidden;
1266
- text-overflow: ellipsis;
1267
- white-space: nowrap;
1268
- font-weight: 600;
1060
+ .btn-close {
1061
+ background: transparent;
1062
+ border: none;
1063
+ font-size: 20px;
1064
+ line-height: 1;
1065
+ color: var(--gray-color-ml);
1066
+ cursor: pointer;
1067
+ padding: 4px;
1068
+ border-radius: var(--radius-sm);
1069
+ transition: all 0.12s ease;
1269
1070
  }
1270
1071
 
1271
- @media (max-width: 768px) {
1272
- #previewModal .modal-title {
1273
- font-size: 1.05rem;
1274
- }
1072
+ .btn-close:hover {
1073
+ color: var(--dark-color-ml);
1074
+ background: var(--light-color-ml);
1275
1075
  }
1276
1076
 
1277
1077
  .modal-body {
1278
- padding: 0.5rem;
1279
- text-align: center;
1280
- }
1281
-
1282
- .modal-body i {
1283
- color: var(--danger-color-ml);
1284
- margin-bottom: 1.25rem;
1285
- }
1286
-
1287
- .modal-body h6 {
1288
- color: var(--dark-color-ml);
1289
- margin-bottom: 1rem;
1290
- font-weight: 700;
1291
- font-size: 1.1rem;
1292
- }
1293
-
1294
- .modal-body p {
1295
- margin-bottom: 0;
1078
+ position: relative;
1079
+ flex: 1 1 auto;
1080
+ padding: 18px;
1296
1081
  }
1297
1082
 
1298
1083
  .modal-footer {
1299
- padding: 0.5rem;
1300
- display: flex;
1301
- gap: 1rem;
1302
- justify-content: center;
1303
- border-top: 1px solid var(--gray-light-color-ml);
1304
- background: var(--light-color-ml);
1305
- }
1306
-
1307
- /* Pagination - Modern quick-link style */
1308
- .pagination {
1309
- display: flex;
1310
- justify-content: center;
1311
- gap: 0.5rem;
1312
- margin: 0;
1313
- padding: 0;
1314
- }
1315
-
1316
- .page-item {
1317
- list-style: none;
1318
- }
1319
-
1320
- .page-link {
1321
- display: flex;
1322
- align-items: center;
1323
- justify-content: center;
1324
- min-width: 42px;
1325
- height: 42px;
1326
- padding: 0.5rem 1rem;
1327
- color: var(--dark-color-ml);
1328
- background: white;
1329
- border: 1px solid var(--gray-light-color-ml);
1330
- border-radius: var(--border-radius-md-ml);
1331
- text-decoration: none;
1332
- transition: all var(--transition-base-ml);
1333
- font-size: 0.95rem;
1334
- font-weight: 600;
1335
- position: relative;
1336
- overflow: hidden;
1337
- }
1338
-
1339
- .page-link::before {
1340
- content: '';
1341
- position: absolute;
1342
- top: 0;
1343
- left: -100%;
1344
- width: 100%;
1345
- height: 100%;
1346
- background: linear-gradient(90deg, transparent, rgba(13, 148, 136, 0.1), transparent);
1347
- transition: left 0.5s;
1348
- }
1349
-
1350
- .page-link:hover::before {
1351
- left: 100%;
1352
- }
1353
-
1354
- .page-link:hover {
1355
- background: var(--primary-color-ml);
1356
- color: white;
1357
- border-color: var(--primary-color-ml);
1358
- transform: translateY(-2px);
1359
- box-shadow: 0 4px 12px rgba(13, 148, 136, 0.3);
1360
- }
1361
-
1362
- .page-item.active .page-link {
1363
- background: linear-gradient(135deg, var(--primary-color-ml), var(--primary-dark-color-ml));
1364
- color: white;
1365
- border-color: var(--primary-color-ml);
1366
- box-shadow: 0 4px 12px rgba(13, 148, 136, 0.3);
1367
- }
1368
-
1369
- .page-item.disabled .page-link {
1370
- color: var(--text-muted-color-ml);
1371
- background: var(--light-color-ml);
1372
- border-color: var(--gray-light-color-ml);
1373
- cursor: not-allowed;
1374
- opacity: 0.6;
1375
- }
1376
-
1377
- .page-item.disabled .page-link:hover {
1378
- transform: none;
1379
- box-shadow: none;
1380
- }
1381
-
1382
- /* Upload Progress Styling - Enhanced shimmer effect */
1383
- .progress-container {
1384
- width: 100%;
1385
- height: 10px;
1386
- background: var(--gray-light-color-ml);
1387
- border-radius: var(--border-radius-r-ml);
1388
- overflow: hidden;
1389
- position: relative;
1390
- box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1);
1391
- }
1392
-
1393
- @media (max-width: 768px) {
1394
- .virtualized-info {
1395
- flex-direction: column;
1396
- align-items: flex-start;
1397
- }
1398
- }
1399
-
1400
- .progress-bar {
1401
- height: 100%;
1402
- background: linear-gradient(135deg, var(--primary-color-ml) 0%, var(--success-color-ml) 100%);
1403
- border-radius: var(--border-radius-r-ml);
1404
- transition: width 0.5s cubic-bezier(0.4, 0, 0.2, 1);
1405
- position: relative;
1406
- overflow: hidden;
1407
- box-shadow: 0 2px 4px rgba(13, 148, 136, 0.3);
1408
- }
1409
-
1410
- .progress-bar::before {
1411
- content: '';
1412
- position: absolute;
1413
- top: 0;
1414
- left: 0;
1415
- bottom: 0;
1416
- right: 0;
1417
- background: linear-gradient(90deg,
1418
- transparent,
1419
- rgba(255, 255, 255, 0.2),
1420
- transparent);
1421
- animation: shimmer 2s infinite;
1422
- }
1423
-
1424
- @keyframes shimmer {
1425
- 0% {
1426
- transform: translateX(-100%);
1427
- }
1428
-
1429
- 100% {
1430
- transform: translateX(100%);
1431
- }
1432
- }
1433
-
1434
- .upload-label {
1435
- font-weight: 600;
1436
- color: var(--dark-color-ml);
1437
- font-size: 0.9rem;
1438
- }
1439
-
1440
- .upload-percent {
1441
- font-weight: 700;
1442
- color: var(--primary-color-ml);
1443
- font-size: 0.9rem;
1444
- }
1445
-
1446
- .upload-details {
1447
- display: flex;
1448
- justify-content: space-between;
1449
- align-items: center;
1450
- }
1451
-
1452
- /* Drag & Drop and upload queue styles */
1453
- .upload-dropzone {
1454
- border: 2px dashed var(--gray-light-color-ml);
1455
- border-radius: var(--border-radius-r-ml);
1456
- padding: 1rem;
1457
- background: var(--light-color-ml);
1458
- transition: background 0.15s ease, border-color 0.15s ease;
1459
- }
1460
-
1461
- .upload-dropzone.dragover {
1462
- background: linear-gradient(90deg, rgba(13, 148, 136, 0.04), transparent);
1463
- border-color: var(--primary-color-ml);
1464
- }
1465
-
1466
- .upload-queue .upload-item {
1467
- display: flex;
1468
- align-items: center;
1469
- justify-content: space-between;
1470
- gap: 1rem;
1471
- padding: 0.5rem 0.75rem;
1472
- border-bottom: 1px dashed var(--gray-light-color-ml);
1473
- }
1474
-
1475
- .upload-queue .upload-item .meta {
1476
- display: flex;
1477
- gap: 0.75rem;
1478
- align-items: center;
1479
- min-width: 0;
1480
- }
1481
-
1482
- .upload-queue .upload-item .meta .name {
1483
- font-weight: 600;
1484
- white-space: nowrap;
1485
- overflow: hidden;
1486
- text-overflow: ellipsis;
1487
- max-width: 240px;
1488
- }
1489
-
1490
- .upload-queue .upload-item .controls {
1491
- display: flex;
1492
- gap: 0.5rem;
1493
- align-items: center;
1494
- }
1495
-
1496
- /* Skeleton loaders - tuned grid to equalize column spacing visually */
1497
- .skeleton-row {
1498
- display: grid;
1499
- grid-template-columns: 48px minmax(120px, 1fr) minmax(120px, 1fr) minmax(120px, 240px);
1500
- /* icon + 3 columns with balanced min widths */
1501
- gap: 1rem;
1502
- padding: 1rem;
1503
- align-items: center;
1504
- justify-items: stretch;
1505
- /* make cells span their tracks evenly */
1506
- }
1507
-
1508
- /* make skeleton boxes flexible and responsive */
1509
- .skeleton-box {
1510
- background: linear-gradient(90deg, #f5f7fa, #eef2f6);
1511
- border-radius: 6px;
1512
- height: 16px;
1513
- width: 100%;
1514
- min-width: 0;
1515
- justify-self: stretch;
1516
- }
1517
-
1518
- /* semantic size hints (max widths) and alignment to ensure visual balance */
1519
- .skeleton-box.s-40 {
1520
- max-width: 48px;
1521
- justify-self: start;
1522
- }
1523
-
1524
- .skeleton-box.s-80 {
1525
- max-width: 160px;
1526
- justify-self: center;
1527
- }
1528
-
1529
- .skeleton-box.s-200 {
1530
- max-width: 220px;
1531
- justify-self: end;
1532
- }
1533
-
1534
- .skeleton-row .file-icon {
1535
- width: 40px;
1536
- height: 40px;
1537
- border-radius: 8px;
1538
- }
1539
-
1540
- /* Responsive adjustments */
1541
- @media (max-width: 992px) {
1542
- .skeleton-row {
1543
- grid-template-columns: 40px minmax(100px, 1fr) minmax(100px, 1fr) minmax(100px, 200px);
1544
- gap: 0.9rem;
1545
- }
1546
-
1547
- .skeleton-box.s-200 {
1548
- max-width: 180px;
1549
- }
1550
- }
1551
-
1552
- @media (max-width: 768px) {
1553
- .skeleton-row {
1554
- grid-template-columns: 40px 1fr 1fr 1fr;
1555
- gap: 0.75rem;
1556
- }
1557
-
1558
- .skeleton-box.s-80 {
1559
- justify-self: start;
1560
- }
1561
-
1562
- .skeleton-box.s-200 {
1563
- max-width: 140px;
1564
- justify-self: end;
1565
- }
1566
- }
1567
-
1568
-
1569
-
1570
- .btn:disabled {
1571
- opacity: 0.5;
1572
- cursor: not-allowed;
1573
- transform: none !important;
1574
- pointer-events: none;
1575
- box-shadow: none !important;
1576
- background: var(--gray-light-color-ml) !important;
1577
- color: var(--text-muted-color-ml) !important;
1578
- border-color: var(--gray-light-color-ml) !important;
1579
- }
1580
-
1581
- .btn.uploading {
1582
- background: linear-gradient(135deg, var(--warning-color-ml), #d97706) !important;
1583
- pointer-events: none;
1584
- position: relative;
1585
- overflow: hidden;
1586
- }
1587
-
1588
- .btn.uploading::after {
1589
- content: '';
1590
- position: absolute;
1591
- top: 0;
1592
- left: -100%;
1593
- width: 100%;
1594
- height: 100%;
1595
- background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.3), transparent);
1596
- animation: slideRight 1.5s infinite;
1597
- }
1598
-
1599
- @keyframes slideRight {
1600
- 0% {
1601
- left: -100%;
1602
- }
1603
-
1604
- 100% {
1605
- left: 200%;
1606
- }
1607
- }
1608
-
1609
- .btn.uploading:hover {
1610
- background: linear-gradient(135deg, var(--warning-color-ml), #d97706) !important;
1611
- transform: none;
1612
- }
1613
-
1614
- /* v2 Visual System */
1615
- :root {
1616
- --v2-accent: #0b6b64;
1617
- --v2-accent-strong: #084f4a;
1618
- --v2-highlight: #0ea5a0;
1619
- --v2-surface: #f4fcf9;
1620
- --v2-border: rgba(11, 107, 100, 0.28);
1621
- }
1622
-
1623
- .content-area {
1624
- animation: v2FadeIn 0.45s ease;
1625
- }
1626
-
1627
- .dashboard-card {
1628
- background: linear-gradient(180deg, #f7fffc 0%, #eefaf6 100%);
1629
- border: 1px solid rgba(11, 107, 100, 0.2);
1630
- box-shadow: 0 16px 30px rgba(7, 54, 51, 0.12);
1631
- }
1632
-
1633
- .dashboard-card:hover {
1634
- transform: translateY(-1px);
1635
- box-shadow: 0 18px 36px rgba(7, 54, 51, 0.2);
1636
- }
1637
-
1638
- .card-header {
1639
- background: linear-gradient(122deg, #07544e 0%, #0b6b64 52%, #0f7e75 100%);
1640
- }
1641
-
1642
- .card-title {
1643
- letter-spacing: 0.01em;
1644
- }
1645
-
1646
- .card-icon {
1647
- background: rgba(255, 255, 255, 0.23);
1648
- border: 1px solid rgba(255, 255, 255, 0.35);
1649
- }
1650
-
1651
- .file-stats {
1652
- background:
1653
- linear-gradient(132deg, #064640 0%, #0a5b54 46%, #0d6b63 100%);
1654
- }
1655
-
1656
- .bucket-switcher-control {
1657
- background: rgba(255, 255, 255, 0.24);
1658
- }
1659
-
1660
- .bucket-switcher-select {
1661
- font-size: 0.85rem;
1662
- }
1663
-
1084
+ display: flex;
1085
+ align-items: center;
1086
+ justify-content: flex-end;
1087
+ gap: 8px;
1088
+ padding: 12px 18px;
1089
+ border-top: 1px solid var(--border-color);
1090
+ background: var(--light-color-ml);
1091
+ border-bottom-left-radius: var(--radius-xl);
1092
+ border-bottom-right-radius: var(--radius-xl);
1093
+ }
1094
+
1095
+ /* Upload Dropzone & Queue */
1664
1096
  .upload-drop-zone {
1665
- background:
1666
- linear-gradient(145deg, rgba(219, 247, 241, 0.9), rgba(226, 244, 241, 0.82));
1667
- border-color: rgba(11, 107, 100, 0.55);
1097
+ border: 2px dashed var(--primary-color-ml);
1098
+ border-radius: var(--radius-lg);
1099
+ padding: 32px 20px;
1100
+ text-align: center;
1101
+ background: var(--primary-light-color-ml);
1102
+ cursor: pointer;
1103
+ transition: all 0.15s ease;
1668
1104
  }
1669
1105
 
1670
1106
  .upload-drop-zone:hover,
1671
1107
  .upload-drop-zone.dragover {
1672
- border-color: var(--v2-highlight);
1673
- background:
1674
- linear-gradient(145deg, rgba(201, 244, 236, 0.95), rgba(224, 249, 242, 0.86));
1675
- }
1676
-
1677
- .btn {
1678
- border-radius: 0.65rem;
1679
- }
1680
-
1681
- .btn-primary {
1682
- background: linear-gradient(135deg, var(--v2-accent), var(--v2-accent-strong));
1683
- }
1684
-
1685
- .btn-primary:hover {
1686
- background: linear-gradient(135deg, #064640, #073a36);
1687
- }
1688
-
1689
- .btn-outline-secondary {
1690
- border-color: #9ca3af;
1691
- color: #1f2937;
1692
- }
1693
-
1694
- .table thead {
1695
- background: linear-gradient(180deg, rgba(225, 242, 238, 0.95), rgba(210, 236, 230, 0.9));
1696
- }
1697
-
1698
- .table th {
1699
- color: #23403d;
1700
- }
1701
-
1702
- .file-row:hover {
1703
- background-color: #ddf2ed;
1704
- }
1705
-
1706
- .folder-row:hover {
1707
- background-color: #d7efe9;
1708
- }
1709
-
1710
- .search-inline .form-control {
1711
- border-color: rgba(15, 118, 110, 0.3);
1712
- }
1713
-
1714
- .quick-filter-btn.active {
1715
- color: #ffffff;
1716
- background: linear-gradient(135deg, var(--v2-accent), var(--v2-accent-strong));
1717
- border-color: var(--v2-accent-strong);
1718
- }
1719
-
1720
- .reveal-item {
1721
- opacity: 0;
1722
- transform: translateY(14px) scale(0.99);
1723
- animation: v2Rise 0.48s cubic-bezier(0.2, 0.8, 0.2, 1) forwards;
1108
+ border-color: var(--primary-dark-color-ml);
1109
+ background: #c5efe7;
1724
1110
  }
1725
1111
 
1726
- .reveal-delay-1 {
1727
- animation-delay: 0.05s;
1112
+ .drop-icon {
1113
+ color: var(--primary-color-ml);
1114
+ margin-bottom: 10px;
1728
1115
  }
1729
1116
 
1730
- .reveal-delay-2 {
1731
- animation-delay: 0.12s;
1117
+ .drop-text {
1118
+ font-size: 14px;
1119
+ font-weight: 600;
1120
+ color: var(--dark-color-ml);
1732
1121
  }
1733
1122
 
1734
- .reveal-delay-3 {
1735
- animation-delay: 0.2s;
1123
+ .drop-browse-link {
1124
+ color: var(--primary-color-ml);
1125
+ text-decoration: underline;
1126
+ cursor: pointer;
1736
1127
  }
1737
1128
 
1738
- .reveal-delay-4 {
1739
- animation-delay: 0.28s;
1129
+ .drop-hint {
1130
+ font-size: 12px;
1131
+ color: var(--gray-color-ml);
1132
+ margin-top: 4px;
1740
1133
  }
1741
1134
 
1742
- @keyframes v2FadeIn {
1743
- from {
1744
- opacity: 0.4;
1745
- }
1746
-
1747
- to {
1748
- opacity: 1;
1749
- }
1135
+ .upload-queue {
1136
+ max-height: 200px;
1137
+ overflow-y: auto;
1138
+ display: flex;
1139
+ flex-direction: column;
1140
+ gap: 6px;
1750
1141
  }
1751
1142
 
1752
- @keyframes v2Rise {
1753
- from {
1754
- opacity: 0;
1755
- transform: translateY(14px) scale(0.99);
1756
- }
1757
-
1758
- to {
1759
- opacity: 1;
1760
- transform: translateY(0) scale(1);
1761
- }
1143
+ .upload-queue-item {
1144
+ display: flex;
1145
+ align-items: center;
1146
+ justify-content: space-between;
1147
+ padding: 8px 12px;
1148
+ background: var(--light-color-ml);
1149
+ border: 1px solid var(--border-color);
1150
+ border-radius: var(--radius);
1151
+ font-size: 12.5px;
1762
1152
  }
1763
1153
 
1764
- @media (max-width: 768px) {
1765
- .card-header {
1766
- padding: 0.8rem;
1767
- }
1154
+ .upload-queue-meta {
1155
+ color: var(--gray-color-ml);
1156
+ font-size: 11.5px;
1768
1157
  }
1769
1158
 
1770
- .upload-success {
1771
- color: var(--success-color-ml);
1772
- font-weight: 600;
1159
+ .progress-bar-wrap {
1160
+ height: 6px;
1161
+ background: var(--gray-light-color-ml);
1162
+ border-radius: 3px;
1163
+ overflow: hidden;
1773
1164
  }
1774
1165
 
1775
- .upload-error {
1776
- color: var(--danger-color-ml);
1777
- font-weight: 600;
1166
+ .progress-bar-inner {
1167
+ height: 100%;
1168
+ background: var(--primary-color-ml);
1169
+ transition: width 0.2s ease;
1778
1170
  }
1779
1171
 
1780
- .badge {
1781
- display: inline-block;
1782
- padding: 0.2rem 0.5rem;
1783
- border-radius: 0.35rem;
1784
- font-size: 0.8rem;
1785
- font-weight: 700;
1786
- vertical-align: middle;
1172
+ .upload-percent {
1173
+ font-size: 12px;
1174
+ font-weight: 700;
1175
+ color: var(--primary-color-ml);
1787
1176
  }
1788
1177
 
1789
- .bg-info {
1790
- background: var(--info-color-ml);
1791
- color: white;
1178
+ /* Modal Form Inputs */
1179
+ .form-label {
1180
+ font-size: 12.5px;
1181
+ font-weight: 600;
1182
+ color: var(--dark-color-ml);
1183
+ margin-bottom: 6px;
1184
+ display: block;
1792
1185
  }
1793
1186
 
1794
- /* Responsive design */
1795
- /* Responsive Design - Enhanced breakpoints */
1796
- @media (max-width: 992px) {
1797
- .col-lg-6 {
1798
- flex: 0 0 100%;
1799
- max-width: 100%;
1800
- }
1801
-
1802
- .stats-content {
1803
- gap: 0.75rem;
1804
- }
1805
-
1806
- .stats-icon {
1807
- width: 50px;
1808
- height: 50px;
1809
- font-size: 1.3rem;
1810
- }
1811
-
1812
- .stats-text h2 {
1813
- font-size: 1.3rem;
1814
- }
1815
-
1816
- .stats-text p {
1817
- font-size: 0.85rem;
1818
- }
1819
-
1820
- .filter-form {
1821
- flex-direction: column;
1822
- }
1823
-
1824
- .filter-form .form-control {
1825
- width: 100%;
1826
- }
1827
- }
1828
-
1829
- @media (max-width: 768px) {
1830
- .card-body {
1831
- padding: 1rem;
1832
- }
1833
-
1834
- .stats-content {
1835
- gap: 0.5rem;
1836
- }
1837
-
1838
- .stats-icon {
1839
- width: 40px;
1840
- height: 40px;
1841
- font-size: 1.2rem;
1842
- }
1843
-
1844
- .stats-text h2 {
1845
- font-size: 1.2rem;
1846
- }
1847
-
1848
- .stats-text p {
1849
- font-size: 0.8rem;
1850
- margin: 0.25rem 0 0;
1851
- }
1852
-
1853
- .btn-group {
1854
- flex-direction: row;
1855
- width: 100%;
1856
- gap: 0.35rem;
1857
- justify-content: flex-start;
1858
- }
1859
-
1860
- .btn-group .btn {
1861
- border-radius: var(--border-radius-r-ml) !important;
1862
- width: auto;
1863
- min-width: 40px;
1864
- padding: 0.5rem 0.65rem;
1865
- }
1866
-
1867
- /* Mobile table improvements */
1868
- .table thead {
1869
- display: none;
1870
- }
1871
-
1872
- .table tbody tr {
1873
- display: block;
1874
- border: 1px solid var(--gray-light-color-ml);
1875
- background: white;
1876
- }
1877
-
1878
- .table tbody tr td {
1879
- display: block;
1880
- padding: 0;
1881
- border: none;
1882
- }
1883
-
1884
- /* File row mobile layout — improved card-like layout for touch */
1885
- /* Hide the leading checkbox column to reduce clutter on small screens */
1886
- .file-row td:first-child {
1887
- display: none !important;
1888
- }
1889
-
1890
- /* Main row: file icon + name + actions */
1891
- .file-row td:nth-child(2) {
1892
- padding: 0.5rem !important;
1893
- display: flex;
1894
- align-items: center;
1895
- gap: 1rem;
1896
- background: transparent;
1897
- }
1898
-
1899
- .file-row td:nth-child(2) .file-icon {
1900
- width: 40px;
1901
- height: 40px;
1902
- font-size: 1.25rem;
1903
- border-radius: 10px;
1904
- }
1905
-
1906
- .file-row td:nth-child(2) .file-info {
1907
- display: block;
1908
- min-width: 0;
1909
- }
1910
-
1911
- .file-row td:nth-child(2) .file-name {
1912
- font-weight: 700;
1913
- font-size: 1rem;
1914
- color: var(--dark-color-ml);
1915
- white-space: normal;
1916
- overflow: hidden;
1917
- text-overflow: ellipsis;
1918
- max-width: calc(100% - 120px);
1919
- }
1920
-
1921
- /* Actions column — ensure buttons are touch friendly */
1922
- .file-row td:nth-child(6),
1923
- .file-row td:nth-child(5) {
1924
- padding: 0.75rem 1rem !important;
1925
- display: flex;
1926
- align-items: center;
1927
- justify-content: flex-end;
1928
- gap: 0.5rem;
1929
- }
1930
-
1931
- .file-row .btn-group {
1932
- justify-content: flex-end;
1933
- }
1934
-
1935
- .file-row .btn-group .btn {
1936
- min-width: 44px;
1937
- height: 44px;
1938
- padding: 0.4rem;
1939
- border-radius: 8px;
1940
- display: inline-flex;
1941
- align-items: center;
1942
- justify-content: center;
1943
- }
1944
-
1945
- /* Metadata row: folder / size / modified shown as compact badges */
1946
- .file-row td:nth-child(3),
1947
- .file-row td:nth-child(4) {
1948
- padding: 0rem 1rem !important;
1949
- display: flex;
1950
- align-items: center;
1951
- color: var(--gray-color-ml);
1952
- font-size: 0.85rem;
1953
- flex-wrap: wrap;
1954
- }
1955
-
1956
- .file-row td:nth-child(3)::before {
1957
- content: "Size:";
1958
- font-weight: 600;
1959
- color: var(--dark-color-ml);
1960
- margin-right: 0.35rem;
1961
- }
1962
-
1963
- .file-row td:nth-child(4)::before {
1964
- content: "Modified:";
1965
- font-weight: 600;
1966
- color: var(--dark-color-ml);
1967
- margin-right: 0.35rem;
1968
- }
1969
-
1970
- /* Ensure clickable feel but keep action buttons interactive */
1971
- .file-row {
1972
- cursor: pointer;
1973
- }
1974
-
1975
- .file-row .btn {
1976
- cursor: auto;
1977
- }
1978
-
1979
- /* Folder row mobile layout — show folder name, hide checkbox and extra columns */
1980
- /* Hide the leading checkbox column and surface the folder name (which is in td:nth-child(2)) */
1981
- .folder-row td:first-child {
1982
- display: none !important;
1983
- /* hide empty checkbox column */
1984
- }
1985
-
1986
- .folder-row td:nth-child(2) {
1987
- display: block !important;
1988
- padding: 1rem !important;
1989
- border-bottom: 1px solid var(--gray-light-color-ml);
1990
- background: var(--light-color-ml);
1991
- border-radius: var(--border-radius-md-ml);
1992
- }
1993
-
1994
- /* Hide the remaining metadata columns on mobile for folder rows */
1995
- .folder-row td:nth-child(3),
1996
- .folder-row td:nth-child(4),
1997
- .folder-row td:nth-child(5) {
1998
- display: none !important;
1999
- }
2000
-
2001
- /* Make folder icon and name more prominent on mobile */
2002
- .folder-row .file-icon {
2003
- width: 40px;
2004
- height: 40px;
2005
- font-size: 1.2rem;
2006
- margin-right: 0.75rem;
2007
- }
2008
-
2009
- .folder-row .file-name {
2010
- font-weight: 700;
2011
- font-size: 1rem;
2012
- }
2013
-
2014
- /* Show file extension on mobile */
2015
- .file-name {
2016
- max-width: 100% !important;
2017
- white-space: normal !important;
2018
- word-break: break-word;
2019
- font-size: 0.9rem;
2020
- }
2021
-
2022
- .file-info {
2023
- flex: 1;
2024
- min-width: 0;
2025
- overflow: visible;
2026
- }
2027
-
2028
- .file-icon {
2029
- width: 40px;
2030
- height: 40px;
2031
- font-size: 1.2rem;
2032
- margin-right: 0.85rem;
2033
- }
2034
-
2035
- .folder-path {
2036
- max-width: 100%;
2037
- white-space: nowrap;
2038
- overflow: hidden;
2039
- text-overflow: ellipsis;
2040
- }
2041
-
2042
- .action-btn {
2043
- padding: 0.45rem 0.85rem;
2044
- font-size: 0.85rem;
2045
- }
2046
-
2047
- .pagination {
2048
- flex-wrap: wrap;
2049
- gap: 0.35rem;
2050
- }
2051
-
2052
- .page-link {
2053
- min-width: 38px;
2054
- height: 38px;
2055
- padding: 0.4rem 0.8rem;
2056
- font-size: 0.85rem;
2057
- }
2058
-
2059
- .breadcrumb-nav {
2060
- padding: 0.5rem 1rem;
2061
- font-size: 0.85rem;
2062
- gap: 0.35rem;
2063
- overflow: visible;
2064
- }
2065
-
2066
- .breadcrumb-item {
2067
- max-width: 100%;
2068
- }
2069
-
2070
- .breadcrumb-current,
2071
- .breadcrumb-link {
2072
- max-width: calc(100vw - 4rem);
2073
- white-space: normal;
2074
- overflow-wrap: anywhere;
2075
- }
2076
-
2077
- .file-size {
2078
- font-size: 0.75rem;
2079
- padding: 0.3rem 0.7rem;
2080
- }
2081
- }
2082
-
2083
- @media (max-width: 576px) {
2084
- .card-header {
2085
- padding: 1rem;
2086
- }
2087
-
2088
- .card-title {
2089
- font-size: 1.15rem;
2090
- }
2091
-
2092
- .empty-state {
2093
- padding: 2.5rem 1.25rem;
2094
- }
2095
-
2096
- .empty-state i {
2097
- font-size: 1.5rem;
2098
- }
2099
-
2100
- .modal-dialog {
2101
- width: 95%;
2102
- }
2103
-
2104
- .modal-body {
2105
- padding: 0.5rem;
2106
- }
2107
-
2108
- .table-responsive {
2109
- font-size: 0.8rem;
2110
- }
2111
-
2112
- .file-name {
2113
- max-width: 120px;
2114
- }
2115
-
2116
- .btn {
2117
- padding: 0.6rem 1rem;
2118
- font-size: 0.85rem;
2119
- }
2120
-
2121
- .file-stats .stats-text h2 {
2122
- font-size: 1.25rem;
2123
- }
2124
-
2125
- .file-stats .stats-text p {
2126
- font-size: 0.85rem;
2127
- }
2128
- }
2129
-
2130
- .dtm {
2131
- display: none;
1187
+ .form-control {
1188
+ width: 100%;
1189
+ padding: 8px 12px;
1190
+ font-family: var(--font);
1191
+ font-size: 13px;
1192
+ color: var(--dark-color-ml);
1193
+ background: #ffffff;
1194
+ border: 1px solid var(--border-color);
1195
+ border-radius: var(--radius);
1196
+ outline: none;
1197
+ transition: border-color 0.15s ease, box-shadow 0.15s ease;
2132
1198
  }
2133
1199
 
2134
- /* Additional utility classes for removing inline styles */
2135
- .file-list-header {
2136
- display: flex;
2137
- justify-content: space-between;
2138
- align-items: center;
2139
- flex-wrap: wrap;
2140
- gap: 1rem;
1200
+ .form-control:focus {
1201
+ border-color: var(--primary-color-ml);
1202
+ box-shadow: 0 0 0 3px var(--primary-light-color-ml);
2141
1203
  }
2142
1204
 
2143
- .search-inline {
2144
- flex: 1;
2145
- max-width: 640px;
2146
- display: flex;
2147
- gap: 0.5rem;
2148
- align-items: center;
2149
- justify-content: center;
1205
+ .form-text {
1206
+ font-size: 11.5px;
1207
+ color: var(--gray-color-ml);
1208
+ margin-top: 4px;
2150
1209
  }
2151
1210
 
2152
- .view-btn-left {
2153
- border-top-right-radius: 0;
2154
- border-bottom-right-radius: 0;
1211
+ /* Preview Modal Content */
1212
+ .preview-content {
1213
+ max-height: 70vh;
1214
+ overflow: auto;
1215
+ display: flex;
1216
+ align-items: center;
1217
+ justify-content: center;
1218
+ background: #152222;
1219
+ min-height: 280px;
2155
1220
  }
2156
1221
 
2157
- .view-btn-right {
2158
- border-top-left-radius: 0;
2159
- border-bottom-left-radius: 0;
1222
+ .preview-content img {
1223
+ max-width: 100%;
1224
+ max-height: 70vh;
1225
+ object-fit: contain;
2160
1226
  }
2161
1227
 
2162
- .pagination-container {
2163
- display: none;
2164
- padding: 1rem;
2165
- border-top: 1px solid var(--gray-light-color-ml);
2166
- background: var(--light-color-ml);
1228
+ .preview-content video,
1229
+ .preview-content audio {
1230
+ max-width: 100%;
1231
+ max-height: 70vh;
2167
1232
  }
2168
1233
 
2169
- .modal-body-text-style {
2170
- color: var(--gray-color-ml);
2171
- margin-bottom: 0;
1234
+ .preview-code-block {
1235
+ width: 100%;
1236
+ height: 100%;
1237
+ max-height: 70vh;
1238
+ margin: 0;
1239
+ padding: 16px;
1240
+ background: #1a2828;
1241
+ color: #f4f7f3;
1242
+ font-family: var(--font-mono);
1243
+ font-size: 12.5px;
1244
+ overflow: auto;
1245
+ line-height: 1.5;
2172
1246
  }
2173
1247
 
2174
- .modal-body-text-top {
2175
- color: var(--gray-color-ml);
2176
- margin-top: 0.5rem;
2177
- margin-bottom: 0;
1248
+ .preview-iframe {
1249
+ width: 100%;
1250
+ height: 70vh;
1251
+ border: none;
2178
1252
  }
2179
1253
 
2180
- .modal-header-spacing {
2181
- margin-top: 0.5rem;
2182
- color: var(--gray-color-ml);
1254
+ .preview-actions {
1255
+ display: flex;
1256
+ align-items: center;
1257
+ gap: 8px;
2183
1258
  }
2184
1259
 
1260
+ /* Toast Container & Notifications */
2185
1261
  .toast-container {
2186
- position: fixed;
2187
- bottom: 20px;
2188
- right: 20px;
2189
- z-index: 1050;
2190
- display: flex;
2191
- flex-direction: column;
2192
- gap: 10px;
1262
+ position: fixed;
1263
+ bottom: 20px;
1264
+ right: 20px;
1265
+ z-index: 1100;
1266
+ display: flex;
1267
+ flex-direction: column;
1268
+ gap: 8px;
1269
+ pointer-events: none;
2193
1270
  }
2194
1271
 
2195
- @media (max-width: 768px) {
2196
- .dtm {
2197
- display: block;
2198
- }
1272
+ .toast-notification {
1273
+ pointer-events: auto;
1274
+ display: flex;
1275
+ align-items: center;
1276
+ gap: 10px;
1277
+ padding: 10px 16px;
1278
+ border-radius: var(--radius);
1279
+ background: var(--dark-color-ml);
1280
+ color: #ffffff;
1281
+ font-family: var(--font);
1282
+ font-size: 13px;
1283
+ font-weight: 500;
1284
+ box-shadow: var(--shadow-lg);
1285
+ min-width: 260px;
1286
+ max-width: 400px;
1287
+ transition: transform 0.25s cubic-bezier(0.16, 1, 0.3, 1), opacity 0.25s ease;
2199
1288
  }
2200
1289
 
2201
- .table-cell-center {
2202
- text-align: center;
1290
+ .toast-notification.success {
1291
+ background: linear-gradient(135deg, #10b981, #059669);
2203
1292
  }
2204
1293
 
2205
- .table-select-col {
2206
- width: 48px;
2207
- text-align: center;
1294
+ .toast-notification.error {
1295
+ background: linear-gradient(135deg, #ef4444, #dc2626);
2208
1296
  }
2209
1297
 
2210
- .file-name-cell,
2211
- .file-name-heading {
2212
- padding-left: 1.5rem;
1298
+ .toast-notification.warning {
1299
+ background: linear-gradient(135deg, #f59e0b, #d97706);
2213
1300
  }
2214
1301
 
2215
- .file-row-main {
2216
- display: flex;
2217
- align-items: center;
2218
- }
2219
-
2220
- .folder-name {
2221
- font-weight: 700;
2222
- }
2223
-
2224
- .folder-leading-icon {
2225
- margin-right: 0.5rem;
2226
- color: #f59e0b;
2227
- }
2228
-
2229
- .muted-cell-value {
2230
- color: var(--gray-color-ml);
2231
- }
2232
-
2233
- .path-display-icon {
2234
- margin-right: 4px;
2235
- opacity: 0.5;
1302
+ .toast-close-btn {
1303
+ margin-left: auto;
1304
+ background: transparent;
1305
+ border: none;
1306
+ color: rgba(255, 255, 255, 0.85);
1307
+ cursor: pointer;
1308
+ font-size: 16px;
1309
+ line-height: 1;
2236
1310
  }
2237
1311
 
2238
- .copy-btn {
2239
- color: #fff;
1312
+ /* Pagination */
1313
+ .pagination-container {
1314
+ padding: 12px 16px;
1315
+ border-top: 1px solid var(--border-color);
1316
+ display: flex;
1317
+ align-items: center;
1318
+ justify-content: flex-end;
2240
1319
  }
2241
1320
 
2242
- .view-btn.is-disabled {
2243
- opacity: 0.5;
1321
+ .pagination {
1322
+ display: flex;
1323
+ align-items: center;
1324
+ gap: 4px;
1325
+ list-style: none;
1326
+ margin: 0;
1327
+ padding: 0;
1328
+ }
1329
+
1330
+ .page-item .page-link {
1331
+ display: flex;
1332
+ align-items: center;
1333
+ justify-content: center;
1334
+ min-width: 28px;
1335
+ height: 28px;
1336
+ padding: 0 6px;
1337
+ border-radius: var(--radius-sm);
1338
+ border: 1px solid var(--border-color);
1339
+ background: #ffffff;
1340
+ color: var(--text-secondary);
1341
+ font-size: 12px;
1342
+ font-weight: 600;
1343
+ text-decoration: none;
1344
+ cursor: pointer;
1345
+ transition: all 0.12s ease;
1346
+ }
1347
+
1348
+ .page-item .page-link:hover {
1349
+ background: var(--primary-light-color-ml);
1350
+ color: var(--primary-dark-color-ml);
2244
1351
  }
2245
1352
 
2246
- .sortable-heading {
2247
- cursor: pointer;
1353
+ .page-item.active .page-link {
1354
+ background: var(--primary-color-ml);
1355
+ border-color: var(--primary-color-ml);
1356
+ color: #ffffff;
2248
1357
  }
2249
1358
 
2250
- .bulk-actions-controls {
2251
- float: right;
1359
+ .page-item.disabled .page-link {
1360
+ opacity: 0.4;
1361
+ cursor: not-allowed;
2252
1362
  }
2253
1363
 
2254
- .toast-icon {
2255
- font-size: 1.25rem;
2256
- }
1364
+ /* Mobile & Tablet Responsiveness */
1365
+ @media (max-width: 900px) {
1366
+ .fm-layout {
1367
+ grid-template-columns: 1fr;
1368
+ height: auto;
1369
+ max-height: none;
1370
+ }
2257
1371
 
2258
- .toast-message {
2259
- flex: 1;
2260
- }
1372
+ .fm-tree-wrap {
1373
+ display: none;
1374
+ }
2261
1375
 
2262
- .empty-state-error-icon {
2263
- color: var(--danger-color-ml);
1376
+ .fm-grid-wrap {
1377
+ min-height: 400px;
1378
+ }
2264
1379
  }
2265
1380
 
2266
- .empty-state-folder-icon {
2267
- font-size: 4rem;
2268
- color: #cbd5e0;
2269
- }
1381
+ @media (max-width: 640px) {
1382
+ .page-header-row {
1383
+ flex-direction: column;
1384
+ align-items: flex-start;
1385
+ }
2270
1386
 
2271
- .upload-progress-cell {
2272
- min-width: 220px;
2273
- }
1387
+ .page-actions {
1388
+ width: 100%;
1389
+ justify-content: flex-start;
1390
+ }
2274
1391
 
2275
- .upload-progress-track {
2276
- height: 8px;
2277
- margin-bottom: 6px;
2278
- }
1392
+ .fm-toolbar {
1393
+ flex-direction: column;
1394
+ align-items: stretch;
1395
+ }
2279
1396
 
2280
- .upload-progress-bar {
2281
- height: 8px;
2282
- }
1397
+ .fm-toolbar-actions {
1398
+ width: 100%;
1399
+ justify-content: space-between;
1400
+ flex-wrap: wrap;
1401
+ }
2283
1402
 
2284
- .progress-bar-empty {
2285
- width: 0%;
2286
- }
1403
+ .search-box {
1404
+ width: 100%;
1405
+ }
2287
1406
 
2288
- .is-hidden {
2289
- display: none !important;
2290
- }
1407
+ .fm-grid.view-list .fm-item {
1408
+ grid-template-columns: 32px 1fr 32px;
1409
+ }
2291
1410
 
2292
- .bucket-switcher-status:not(.is-hidden) {
2293
- display: inline;
2294
- }
1411
+ .fm-grid.view-list .fm-item-size,
1412
+ .fm-grid.view-list .fm-item-date,
1413
+ .fm-grid.view-list .fm-item-checkbox {
1414
+ display: none;
1415
+ }
2295
1416
 
2296
- .file-list-card-body {
2297
- padding: 0;
1417
+ .fm-list-header {
1418
+ display: none;
1419
+ }
2298
1420
  }