appclean 2.0.2 → 2.0.3

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,5 +1,622 @@
1
- /* Layout - Grid, Flexbox, Container Utilities */
1
+ /* ============================================================================
2
+ Layout - Header, Sidebar, Main Content & Grid
3
+ ============================================================================ */
2
4
 
5
+ /* ============================================================================
6
+ App Root & Structure
7
+ ============================================================================ */
8
+
9
+ .app-root {
10
+ display: flex;
11
+ flex-direction: column;
12
+ min-height: 100vh;
13
+ background-color: var(--bg-primary);
14
+ }
15
+
16
+ .app-layout {
17
+ display: flex;
18
+ flex: 1;
19
+ min-height: calc(100vh - var(--header-height));
20
+ }
21
+
22
+ /* ============================================================================
23
+ Header / App Bar
24
+ ============================================================================ */
25
+
26
+ .app-header {
27
+ position: sticky;
28
+ top: 0;
29
+ z-index: var(--z-fixed);
30
+ background-color: var(--bg-primary);
31
+ border-bottom: 1px solid var(--border-color);
32
+ height: var(--header-height);
33
+ box-shadow: var(--shadow-sm);
34
+ transition: all var(--transition-normal);
35
+ }
36
+
37
+ .header-container {
38
+ max-width: 100%;
39
+ height: 100%;
40
+ padding: 0 var(--space-4);
41
+ display: flex;
42
+ align-items: center;
43
+ justify-content: space-between;
44
+ gap: var(--space-4);
45
+ }
46
+
47
+ /* Header Brand */
48
+ .header-brand {
49
+ display: flex;
50
+ align-items: center;
51
+ gap: var(--space-3);
52
+ flex-shrink: 0;
53
+ }
54
+
55
+ .sidebar-toggle {
56
+ display: none;
57
+ width: 2.5rem;
58
+ height: 2.5rem;
59
+ padding: var(--space-2);
60
+ border: none;
61
+ background: none;
62
+ cursor: pointer;
63
+ color: var(--text-primary);
64
+ border-radius: var(--radius-lg);
65
+ transition: background-color var(--transition-fast);
66
+ }
67
+
68
+ .sidebar-toggle:hover {
69
+ background-color: var(--bg-hover);
70
+ }
71
+
72
+ .menu-icon {
73
+ width: 1.5rem;
74
+ height: 1.5rem;
75
+ }
76
+
77
+ .logo-link {
78
+ display: flex;
79
+ align-items: center;
80
+ gap: var(--space-2);
81
+ text-decoration: none;
82
+ color: var(--text-primary);
83
+ font-size: var(--font-xl);
84
+ font-weight: var(--fw-bold);
85
+ transition: opacity var(--transition-fast);
86
+ }
87
+
88
+ .logo-link:hover {
89
+ opacity: 0.8;
90
+ }
91
+
92
+ .logo-image {
93
+ width: 2.5rem;
94
+ height: 2.5rem;
95
+ border-radius: var(--radius-lg);
96
+ }
97
+
98
+ .logo-text {
99
+ font-size: var(--font-lg);
100
+ font-weight: var(--fw-bold);
101
+ letter-spacing: -0.01em;
102
+ }
103
+
104
+ /* Header Actions */
105
+ .header-actions {
106
+ display: flex;
107
+ align-items: center;
108
+ gap: var(--space-3);
109
+ flex-shrink: 0;
110
+ }
111
+
112
+ .btn-icon {
113
+ display: flex;
114
+ align-items: center;
115
+ justify-content: center;
116
+ width: 2.5rem;
117
+ height: 2.5rem;
118
+ padding: 0;
119
+ border: 1px solid var(--border-color);
120
+ border-radius: var(--radius-lg);
121
+ background-color: var(--bg-secondary);
122
+ color: var(--text-primary);
123
+ cursor: pointer;
124
+ transition: all var(--transition-fast);
125
+ }
126
+
127
+ .btn-icon:hover {
128
+ background-color: var(--bg-hover);
129
+ border-color: var(--border-color-hover);
130
+ }
131
+
132
+ .btn-icon svg {
133
+ width: 1.25rem;
134
+ height: 1.25rem;
135
+ }
136
+
137
+ .theme-toggle {
138
+ position: relative;
139
+ overflow: hidden;
140
+ }
141
+
142
+ .icon-sun,
143
+ .icon-moon {
144
+ position: absolute;
145
+ transition: opacity var(--transition-normal), transform var(--transition-normal);
146
+ }
147
+
148
+ .icon-sun {
149
+ opacity: 1;
150
+ transform: rotate(0deg);
151
+ }
152
+
153
+ .icon-moon {
154
+ opacity: 0;
155
+ transform: rotate(-90deg);
156
+ }
157
+
158
+ body.dark-mode .icon-sun {
159
+ opacity: 0;
160
+ transform: rotate(90deg);
161
+ }
162
+
163
+ body.dark-mode .icon-moon {
164
+ opacity: 1;
165
+ transform: rotate(0deg);
166
+ }
167
+
168
+ /* Version Badge */
169
+ .version-badge {
170
+ padding: var(--space-2) var(--space-3);
171
+ background-color: var(--color-primary-50);
172
+ color: var(--color-primary-700);
173
+ font-size: var(--font-xs);
174
+ font-weight: var(--fw-semibold);
175
+ border-radius: var(--radius-full);
176
+ letter-spacing: 0.5px;
177
+ }
178
+
179
+ body.dark-mode .version-badge {
180
+ background-color: var(--color-primary-900);
181
+ color: var(--color-primary-300);
182
+ }
183
+
184
+ /* ============================================================================
185
+ Sidebar Navigation
186
+ ============================================================================ */
187
+
188
+ .sidebar {
189
+ position: fixed;
190
+ left: 0;
191
+ top: var(--header-height);
192
+ width: var(--sidebar-width);
193
+ height: calc(100vh - var(--header-height));
194
+ background-color: var(--bg-secondary);
195
+ border-right: 1px solid var(--border-color);
196
+ overflow-y: auto;
197
+ transition: transform var(--transition-normal), width var(--transition-normal);
198
+ display: flex;
199
+ flex-direction: column;
200
+ z-index: var(--z-sticky);
201
+ }
202
+
203
+ .sidebar-nav {
204
+ flex: 1;
205
+ padding: var(--space-4) var(--space-2);
206
+ }
207
+
208
+ .nav-items {
209
+ display: flex;
210
+ flex-direction: column;
211
+ gap: var(--space-2);
212
+ }
213
+
214
+ /* Navigation Item */
215
+ .nav-item {
216
+ display: flex;
217
+ align-items: center;
218
+ gap: var(--space-3);
219
+ padding: var(--space-3) var(--space-4);
220
+ color: var(--text-secondary);
221
+ text-decoration: none;
222
+ border-radius: var(--radius-lg);
223
+ transition: all var(--transition-fast);
224
+ position: relative;
225
+ }
226
+
227
+ .nav-item:hover {
228
+ background-color: var(--bg-hover);
229
+ color: var(--text-primary);
230
+ }
231
+
232
+ .nav-item.active {
233
+ background-color: var(--color-primary-50);
234
+ color: var(--color-primary);
235
+ font-weight: var(--fw-semibold);
236
+ }
237
+
238
+ body.dark-mode .nav-item.active {
239
+ background-color: var(--color-primary-900);
240
+ color: var(--color-primary-300);
241
+ }
242
+
243
+ .nav-item.active::before {
244
+ content: '';
245
+ position: absolute;
246
+ left: 0;
247
+ top: 0;
248
+ bottom: 0;
249
+ width: 4px;
250
+ background-color: var(--color-primary);
251
+ border-radius: 0 var(--radius-lg) var(--radius-lg) 0;
252
+ }
253
+
254
+ .nav-icon {
255
+ display: flex;
256
+ align-items: center;
257
+ justify-content: center;
258
+ flex-shrink: 0;
259
+ width: 1.5rem;
260
+ height: 1.5rem;
261
+ }
262
+
263
+ .nav-icon svg {
264
+ width: 100%;
265
+ height: 100%;
266
+ stroke-width: 2;
267
+ }
268
+
269
+ .nav-label {
270
+ font-size: var(--font-base);
271
+ font-weight: var(--fw-medium);
272
+ }
273
+
274
+ /* Sidebar Footer */
275
+ .sidebar-footer {
276
+ padding: var(--space-4) var(--space-2);
277
+ border-top: 1px solid var(--border-color);
278
+ }
279
+
280
+ .sidebar-link {
281
+ display: flex;
282
+ align-items: center;
283
+ gap: var(--space-3);
284
+ padding: var(--space-3) var(--space-4);
285
+ color: var(--text-secondary);
286
+ text-decoration: none;
287
+ border-radius: var(--radius-lg);
288
+ transition: all var(--transition-fast);
289
+ }
290
+
291
+ .sidebar-link:hover {
292
+ background-color: var(--bg-hover);
293
+ color: var(--text-primary);
294
+ }
295
+
296
+ /* Sidebar Overlay (Mobile) */
297
+ .sidebar-overlay {
298
+ display: none;
299
+ position: fixed;
300
+ top: var(--header-height);
301
+ left: 0;
302
+ right: 0;
303
+ bottom: 0;
304
+ background-color: rgba(0, 0, 0, 0.5);
305
+ z-index: calc(var(--z-sticky) - 1);
306
+ }
307
+
308
+ /* ============================================================================
309
+ Main Content Area
310
+ ============================================================================ */
311
+
312
+ .main-content {
313
+ flex: 1;
314
+ margin-left: var(--sidebar-width);
315
+ background-color: var(--bg-primary);
316
+ overflow-y: auto;
317
+ transition: margin-left var(--transition-normal);
318
+ }
319
+
320
+ .content-wrapper {
321
+ min-height: 100%;
322
+ padding: var(--space-8) var(--space-6);
323
+ }
324
+
325
+ .page-container {
326
+ max-width: var(--max-width-2xl);
327
+ margin: 0 auto;
328
+ }
329
+
330
+ /* ============================================================================
331
+ Loading State
332
+ ============================================================================ */
333
+
334
+ .loading-state {
335
+ display: flex;
336
+ flex-direction: column;
337
+ align-items: center;
338
+ justify-content: center;
339
+ min-height: 400px;
340
+ padding: var(--space-8);
341
+ }
342
+
343
+ .spinner {
344
+ width: 2rem;
345
+ height: 2rem;
346
+ border: 3px solid var(--border-color);
347
+ border-top-color: var(--color-primary);
348
+ border-radius: 50%;
349
+ animation: spin 0.8s linear infinite;
350
+ }
351
+
352
+ .spinner-lg {
353
+ width: 3rem;
354
+ height: 3rem;
355
+ }
356
+
357
+ @keyframes spin {
358
+ to {
359
+ transform: rotate(360deg);
360
+ }
361
+ }
362
+
363
+ .loading-text {
364
+ margin-top: var(--space-4);
365
+ color: var(--text-muted);
366
+ font-size: var(--font-sm);
367
+ }
368
+
369
+ /* ============================================================================
370
+ Modal Dialog
371
+ ============================================================================ */
372
+
373
+ .modal-overlay {
374
+ display: none;
375
+ position: fixed;
376
+ top: 0;
377
+ left: 0;
378
+ right: 0;
379
+ bottom: 0;
380
+ background-color: rgba(0, 0, 0, 0.5);
381
+ z-index: var(--z-modal-overlay);
382
+ align-items: center;
383
+ justify-content: center;
384
+ animation: fadeIn var(--transition-normal);
385
+ }
386
+
387
+ .modal-overlay.active {
388
+ display: flex;
389
+ }
390
+
391
+ .modal-dialog {
392
+ background-color: var(--bg-primary);
393
+ border-radius: var(--radius-2xl);
394
+ box-shadow: var(--shadow-xl);
395
+ max-width: 600px;
396
+ width: 90%;
397
+ max-height: 90vh;
398
+ overflow-y: auto;
399
+ animation: slideUp var(--transition-normal);
400
+ }
401
+
402
+ .modal-header {
403
+ padding: var(--space-6);
404
+ border-bottom: 1px solid var(--border-color);
405
+ display: flex;
406
+ align-items: center;
407
+ justify-content: space-between;
408
+ }
409
+
410
+ .modal-title {
411
+ font-size: var(--font-2xl);
412
+ font-weight: var(--fw-bold);
413
+ }
414
+
415
+ .modal-close {
416
+ width: 2rem;
417
+ height: 2rem;
418
+ padding: 0;
419
+ border: none;
420
+ background: none;
421
+ color: var(--text-muted);
422
+ cursor: pointer;
423
+ border-radius: var(--radius-lg);
424
+ transition: all var(--transition-fast);
425
+ display: flex;
426
+ align-items: center;
427
+ justify-content: center;
428
+ }
429
+
430
+ .modal-close:hover {
431
+ background-color: var(--bg-hover);
432
+ color: var(--text-primary);
433
+ }
434
+
435
+ .modal-close svg {
436
+ width: 1.5rem;
437
+ height: 1.5rem;
438
+ }
439
+
440
+ .modal-body {
441
+ padding: var(--space-6);
442
+ }
443
+
444
+ .modal-footer {
445
+ padding: var(--space-6);
446
+ border-top: 1px solid var(--border-color);
447
+ display: flex;
448
+ gap: var(--space-3);
449
+ justify-content: flex-end;
450
+ }
451
+
452
+ /* ============================================================================
453
+ Notifications / Toasts
454
+ ============================================================================ */
455
+
456
+ .notifications-container {
457
+ position: fixed;
458
+ top: calc(var(--header-height) + var(--space-4));
459
+ right: var(--space-4);
460
+ z-index: var(--z-notification);
461
+ display: flex;
462
+ flex-direction: column;
463
+ gap: var(--space-3);
464
+ pointer-events: none;
465
+ }
466
+
467
+ .notification {
468
+ display: flex;
469
+ align-items: flex-start;
470
+ gap: var(--space-3);
471
+ padding: var(--space-4);
472
+ border-radius: var(--radius-xl);
473
+ background-color: var(--bg-secondary);
474
+ border: 1px solid var(--border-color);
475
+ box-shadow: var(--shadow-md);
476
+ animation: slideInRight var(--transition-normal);
477
+ pointer-events: auto;
478
+ }
479
+
480
+ .notification.success {
481
+ background-color: var(--color-success-light);
482
+ border-color: var(--color-success);
483
+ }
484
+
485
+ .notification.error {
486
+ background-color: var(--color-danger-light);
487
+ border-color: var(--color-danger);
488
+ }
489
+
490
+ .notification.warning {
491
+ background-color: var(--color-warning-light);
492
+ border-color: var(--color-warning);
493
+ }
494
+
495
+ .notification.info {
496
+ background-color: var(--color-info-light);
497
+ border-color: var(--color-info);
498
+ }
499
+
500
+ /* ============================================================================
501
+ Flexbox & Grid Utilities
502
+ ============================================================================ */
503
+
504
+ .flex {
505
+ display: flex;
506
+ }
507
+
508
+ .flex-col {
509
+ flex-direction: column;
510
+ }
511
+
512
+ .flex-row {
513
+ flex-direction: row;
514
+ }
515
+
516
+ .flex-wrap {
517
+ flex-wrap: wrap;
518
+ }
519
+
520
+ .flex-center {
521
+ align-items: center;
522
+ justify-content: center;
523
+ }
524
+
525
+ .items-center {
526
+ align-items: center;
527
+ }
528
+
529
+ .items-start {
530
+ align-items: flex-start;
531
+ }
532
+
533
+ .items-end {
534
+ align-items: flex-end;
535
+ }
536
+
537
+ .justify-center {
538
+ justify-content: center;
539
+ }
540
+
541
+ .justify-between {
542
+ justify-content: space-between;
543
+ }
544
+
545
+ .justify-start {
546
+ justify-content: flex-start;
547
+ }
548
+
549
+ .justify-end {
550
+ justify-content: flex-end;
551
+ }
552
+
553
+ .justify-around {
554
+ justify-content: space-around;
555
+ }
556
+
557
+ .gap-1 { gap: var(--space-1); }
558
+ .gap-2 { gap: var(--space-2); }
559
+ .gap-3 { gap: var(--space-3); }
560
+ .gap-4 { gap: var(--space-4); }
561
+ .gap-6 { gap: var(--space-6); }
562
+ .gap-8 { gap: var(--space-8); }
563
+
564
+ .grid {
565
+ display: grid;
566
+ }
567
+
568
+ .grid-cols-1 {
569
+ grid-template-columns: repeat(1, minmax(0, 1fr));
570
+ }
571
+
572
+ .grid-cols-2 {
573
+ grid-template-columns: repeat(2, minmax(0, 1fr));
574
+ }
575
+
576
+ .grid-cols-3 {
577
+ grid-template-columns: repeat(3, minmax(0, 1fr));
578
+ }
579
+
580
+ .grid-cols-4 {
581
+ grid-template-columns: repeat(4, minmax(0, 1fr));
582
+ }
583
+
584
+ /* ============================================================================
585
+ Animations
586
+ ============================================================================ */
587
+
588
+ @keyframes fadeIn {
589
+ from {
590
+ opacity: 0;
591
+ }
592
+ to {
593
+ opacity: 1;
594
+ }
595
+ }
596
+
597
+ @keyframes slideUp {
598
+ from {
599
+ transform: translateY(1rem);
600
+ opacity: 0;
601
+ }
602
+ to {
603
+ transform: translateY(0);
604
+ opacity: 1;
605
+ }
606
+ }
607
+
608
+ @keyframes slideInRight {
609
+ from {
610
+ transform: translateX(1.5rem);
611
+ opacity: 0;
612
+ }
613
+ to {
614
+ transform: translateX(0);
615
+ opacity: 1;
616
+ }
617
+ }
618
+
619
+ /* Container Utilities */
3
620
  .container {
4
621
  width: 100%;
5
622
  max-width: var(--max-width-lg);