@nice2dev/ui-erp 1.0.10

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.
package/dist/style.css ADDED
@@ -0,0 +1,1404 @@
1
+ /**
2
+ * ERP Components Styles
3
+ * @package @nice2dev/ui-erp
4
+ */
5
+
6
+ /* =============================================================================
7
+ COMMON ERP STYLES
8
+ ============================================================================= */
9
+
10
+ :root {
11
+ --erp-primary: #6366f1;
12
+ --erp-primary-dark: #4f46e5;
13
+ --erp-primary-light: #818cf8;
14
+ --erp-success: #22c55e;
15
+ --erp-warning: #f59e0b;
16
+ --erp-error: #ef4444;
17
+ --erp-info: #3b82f6;
18
+ --erp-bg: #0f172a;
19
+ --erp-surface: #1e293b;
20
+ --erp-surface-alt: #334155;
21
+ --erp-border: #475569;
22
+ --erp-text: #f1f5f9;
23
+ --erp-text-muted: #94a3b8;
24
+ --erp-radius: 8px;
25
+ --erp-radius-sm: 4px;
26
+ --erp-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.3);
27
+ --erp-transition: 150ms ease;
28
+ }
29
+
30
+ /* =============================================================================
31
+ GANTT CHART
32
+ ============================================================================= */
33
+
34
+ .nice-gantt-chart {
35
+ display: flex;
36
+ flex-direction: column;
37
+ height: 100%;
38
+ min-height: 500px;
39
+ background: var(--erp-bg);
40
+ color: var(--erp-text);
41
+ font-family: system-ui, -apple-system, sans-serif;
42
+ }
43
+
44
+ .gantt__toolbar {
45
+ display: flex;
46
+ justify-content: space-between;
47
+ align-items: center;
48
+ padding: 12px 20px;
49
+ background: var(--erp-surface);
50
+ border-bottom: 1px solid var(--erp-border);
51
+ }
52
+
53
+ .gantt__toolbar h2 {
54
+ margin: 0;
55
+ font-size: 1.125rem;
56
+ font-weight: 600;
57
+ }
58
+
59
+ .time-unit-selector,
60
+ .view-selector {
61
+ display: flex;
62
+ gap: 4px;
63
+ }
64
+
65
+ .unit-button,
66
+ .view-button {
67
+ padding: 6px 12px;
68
+ border: 1px solid var(--erp-border);
69
+ background: transparent;
70
+ color: var(--erp-text);
71
+ border-radius: var(--erp-radius-sm);
72
+ cursor: pointer;
73
+ transition: all var(--erp-transition);
74
+ }
75
+
76
+ .unit-button:hover,
77
+ .view-button:hover {
78
+ background: var(--erp-surface-alt);
79
+ }
80
+
81
+ .unit-button--active,
82
+ .view-button--active {
83
+ background: var(--erp-primary);
84
+ border-color: var(--erp-primary);
85
+ color: white;
86
+ }
87
+
88
+ .add-task-button,
89
+ .add-button {
90
+ padding: 8px 16px;
91
+ border: none;
92
+ background: var(--erp-primary);
93
+ color: white;
94
+ border-radius: var(--erp-radius);
95
+ font-size: 0.875rem;
96
+ font-weight: 500;
97
+ cursor: pointer;
98
+ transition: all var(--erp-transition);
99
+ }
100
+
101
+ .add-task-button:hover,
102
+ .add-button:hover {
103
+ background: var(--erp-primary-dark);
104
+ }
105
+
106
+ .gantt__container {
107
+ display: flex;
108
+ flex: 1;
109
+ overflow: hidden;
110
+ }
111
+
112
+ /* Task List */
113
+ .gantt__task-list {
114
+ width: 350px;
115
+ flex-shrink: 0;
116
+ display: flex;
117
+ flex-direction: column;
118
+ border-right: 1px solid var(--erp-border);
119
+ background: var(--erp-surface);
120
+ }
121
+
122
+ .task-list__header {
123
+ display: flex;
124
+ align-items: center;
125
+ padding: 12px;
126
+ background: var(--erp-surface-alt);
127
+ border-bottom: 1px solid var(--erp-border);
128
+ font-size: 0.75rem;
129
+ font-weight: 600;
130
+ color: var(--erp-text-muted);
131
+ }
132
+
133
+ .col-name { flex: 1; }
134
+ .col-dates { width: 100px; text-align: center; }
135
+ .col-progress { width: 60px; text-align: right; }
136
+
137
+ .task-list__body {
138
+ flex: 1;
139
+ overflow-y: auto;
140
+ }
141
+
142
+ .task-row {
143
+ display: flex;
144
+ align-items: center;
145
+ gap: 8px;
146
+ padding: 8px 12px;
147
+ border-bottom: 1px solid var(--erp-border);
148
+ cursor: pointer;
149
+ transition: background var(--erp-transition);
150
+ }
151
+
152
+ .task-row:hover {
153
+ background: var(--erp-surface-alt);
154
+ }
155
+
156
+ .task-row--selected {
157
+ background: rgba(99, 102, 241, 0.1);
158
+ }
159
+
160
+ .collapse-button {
161
+ width: 20px;
162
+ height: 20px;
163
+ border: none;
164
+ background: transparent;
165
+ color: var(--erp-text-muted);
166
+ cursor: pointer;
167
+ font-size: 0.75rem;
168
+ }
169
+
170
+ .task-icon {
171
+ width: 10px;
172
+ height: 10px;
173
+ border-radius: 50%;
174
+ flex-shrink: 0;
175
+ }
176
+
177
+ .milestone-icon {
178
+ color: var(--erp-warning);
179
+ font-size: 0.75rem;
180
+ }
181
+
182
+ .task-name {
183
+ flex: 1;
184
+ font-size: 0.875rem;
185
+ white-space: nowrap;
186
+ overflow: hidden;
187
+ text-overflow: ellipsis;
188
+ }
189
+
190
+ .task-dates {
191
+ width: 100px;
192
+ font-size: 0.75rem;
193
+ color: var(--erp-text-muted);
194
+ text-align: center;
195
+ }
196
+
197
+ .task-progress {
198
+ width: 60px;
199
+ font-size: 0.75rem;
200
+ color: var(--erp-text-muted);
201
+ text-align: right;
202
+ }
203
+
204
+ /* Timeline */
205
+ .gantt__timeline {
206
+ flex: 1;
207
+ display: flex;
208
+ flex-direction: column;
209
+ overflow: auto;
210
+ }
211
+
212
+ .timeline__header {
213
+ display: flex;
214
+ position: sticky;
215
+ top: 0;
216
+ z-index: 10;
217
+ background: var(--erp-surface-alt);
218
+ border-bottom: 1px solid var(--erp-border);
219
+ }
220
+
221
+ .time-column {
222
+ flex-shrink: 0;
223
+ padding: 12px 4px;
224
+ text-align: center;
225
+ font-size: 0.75rem;
226
+ color: var(--erp-text-muted);
227
+ border-right: 1px solid var(--erp-border);
228
+ }
229
+
230
+ .timeline__body {
231
+ position: relative;
232
+ flex: 1;
233
+ }
234
+
235
+ .grid-lines {
236
+ position: absolute;
237
+ top: 0;
238
+ left: 0;
239
+ right: 0;
240
+ bottom: 0;
241
+ pointer-events: none;
242
+ }
243
+
244
+ .grid-line {
245
+ position: absolute;
246
+ top: 0;
247
+ bottom: 0;
248
+ width: 1px;
249
+ background: var(--erp-border);
250
+ opacity: 0.3;
251
+ }
252
+
253
+ .today-marker {
254
+ position: absolute;
255
+ top: 0;
256
+ bottom: 0;
257
+ width: 2px;
258
+ background: var(--erp-error);
259
+ z-index: 5;
260
+ }
261
+
262
+ .today-label {
263
+ position: absolute;
264
+ top: -24px;
265
+ left: 50%;
266
+ transform: translateX(-50%);
267
+ padding: 2px 6px;
268
+ background: var(--erp-error);
269
+ color: white;
270
+ font-size: 0.625rem;
271
+ border-radius: 2px;
272
+ white-space: nowrap;
273
+ }
274
+
275
+ .task-bar-row {
276
+ position: absolute;
277
+ left: 0;
278
+ right: 0;
279
+ }
280
+
281
+ .task-bar {
282
+ position: absolute;
283
+ height: 24px;
284
+ top: 50%;
285
+ transform: translateY(-50%);
286
+ border-radius: var(--erp-radius-sm);
287
+ cursor: grab;
288
+ transition: box-shadow var(--erp-transition);
289
+ overflow: hidden;
290
+ }
291
+
292
+ .task-bar:hover {
293
+ box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.3);
294
+ }
295
+
296
+ .task-bar--dragging {
297
+ cursor: grabbing;
298
+ opacity: 0.8;
299
+ }
300
+
301
+ .task-bar--milestone {
302
+ display: flex;
303
+ align-items: center;
304
+ justify-content: center;
305
+ background: transparent !important;
306
+ }
307
+
308
+ .milestone-diamond {
309
+ width: 16px;
310
+ height: 16px;
311
+ transform: rotate(45deg);
312
+ border-radius: 2px;
313
+ }
314
+
315
+ .progress-fill {
316
+ position: absolute;
317
+ top: 0;
318
+ left: 0;
319
+ height: 100%;
320
+ background: rgba(0, 0, 0, 0.3);
321
+ pointer-events: none;
322
+ }
323
+
324
+ .resize-handle {
325
+ position: absolute;
326
+ top: 0;
327
+ bottom: 0;
328
+ width: 8px;
329
+ cursor: ew-resize;
330
+ }
331
+
332
+ .resize-handle--start { left: 0; }
333
+ .resize-handle--end { right: 0; }
334
+
335
+ .task-bar-label {
336
+ position: absolute;
337
+ left: 8px;
338
+ top: 50%;
339
+ transform: translateY(-50%);
340
+ font-size: 0.75rem;
341
+ color: white;
342
+ white-space: nowrap;
343
+ text-shadow: 0 1px 2px rgba(0, 0, 0, 0.5);
344
+ }
345
+
346
+ .task-tooltip {
347
+ position: absolute;
348
+ bottom: 100%;
349
+ left: 50%;
350
+ transform: translateX(-50%);
351
+ padding: 8px 12px;
352
+ background: var(--erp-surface);
353
+ border: 1px solid var(--erp-border);
354
+ border-radius: var(--erp-radius);
355
+ box-shadow: var(--erp-shadow);
356
+ z-index: 100;
357
+ white-space: nowrap;
358
+ pointer-events: none;
359
+ }
360
+
361
+ .tooltip-dates,
362
+ .tooltip-progress,
363
+ .tooltip-assignees {
364
+ font-size: 0.75rem;
365
+ color: var(--erp-text-muted);
366
+ margin-top: 4px;
367
+ }
368
+
369
+ .dependencies-layer {
370
+ position: absolute;
371
+ top: 0;
372
+ left: 0;
373
+ width: 100%;
374
+ height: 100%;
375
+ pointer-events: none;
376
+ }
377
+
378
+ /* =============================================================================
379
+ RESOURCE ALLOCATION
380
+ ============================================================================= */
381
+
382
+ .nice-resource-allocation {
383
+ display: flex;
384
+ flex-direction: column;
385
+ height: 100%;
386
+ min-height: 500px;
387
+ background: var(--erp-bg);
388
+ color: var(--erp-text);
389
+ font-family: system-ui, -apple-system, sans-serif;
390
+ }
391
+
392
+ .allocation__toolbar {
393
+ display: flex;
394
+ justify-content: space-between;
395
+ align-items: center;
396
+ padding: 12px 20px;
397
+ background: var(--erp-surface);
398
+ border-bottom: 1px solid var(--erp-border);
399
+ }
400
+
401
+ .allocation__toolbar h2 {
402
+ margin: 0;
403
+ font-size: 1.125rem;
404
+ font-weight: 600;
405
+ }
406
+
407
+ .date-range {
408
+ margin-left: 16px;
409
+ font-size: 0.875rem;
410
+ color: var(--erp-text-muted);
411
+ }
412
+
413
+ .conflicts-badge {
414
+ display: flex;
415
+ align-items: center;
416
+ gap: 6px;
417
+ padding: 6px 12px;
418
+ background: rgba(239, 68, 68, 0.1);
419
+ border: 1px solid var(--erp-error);
420
+ border-radius: var(--erp-radius);
421
+ color: var(--erp-error);
422
+ font-size: 0.875rem;
423
+ }
424
+
425
+ .allocation__legend {
426
+ display: flex;
427
+ gap: 20px;
428
+ padding: 8px 20px;
429
+ background: var(--erp-surface-alt);
430
+ border-bottom: 1px solid var(--erp-border);
431
+ font-size: 0.75rem;
432
+ color: var(--erp-text-muted);
433
+ }
434
+
435
+ .legend-item {
436
+ display: flex;
437
+ align-items: center;
438
+ gap: 6px;
439
+ }
440
+
441
+ .legend-color {
442
+ width: 16px;
443
+ height: 16px;
444
+ border-radius: 2px;
445
+ }
446
+
447
+ .allocation__grid {
448
+ flex: 1;
449
+ display: flex;
450
+ flex-direction: column;
451
+ overflow: auto;
452
+ }
453
+
454
+ .grid__header {
455
+ display: flex;
456
+ position: sticky;
457
+ top: 0;
458
+ z-index: 10;
459
+ background: var(--erp-surface-alt);
460
+ border-bottom: 1px solid var(--erp-border);
461
+ }
462
+
463
+ .resource-header {
464
+ width: 280px;
465
+ flex-shrink: 0;
466
+ padding: 12px 16px;
467
+ font-size: 0.75rem;
468
+ font-weight: 600;
469
+ color: var(--erp-text-muted);
470
+ text-transform: uppercase;
471
+ border-right: 1px solid var(--erp-border);
472
+ }
473
+
474
+ .time-headers {
475
+ display: flex;
476
+ flex: 1;
477
+ }
478
+
479
+ .time-header {
480
+ min-width: 80px;
481
+ padding: 12px 8px;
482
+ text-align: center;
483
+ font-size: 0.75rem;
484
+ color: var(--erp-text-muted);
485
+ border-right: 1px solid var(--erp-border);
486
+ }
487
+
488
+ .grid__body {
489
+ flex: 1;
490
+ }
491
+
492
+ .resource-row {
493
+ display: flex;
494
+ flex-wrap: wrap;
495
+ border-bottom: 1px solid var(--erp-border);
496
+ }
497
+
498
+ .resource-cell {
499
+ width: 280px;
500
+ flex-shrink: 0;
501
+ display: flex;
502
+ align-items: center;
503
+ gap: 8px;
504
+ padding: 12px 16px;
505
+ background: var(--erp-surface);
506
+ border-right: 1px solid var(--erp-border);
507
+ cursor: pointer;
508
+ }
509
+
510
+ .resource-cell:hover {
511
+ background: var(--erp-surface-alt);
512
+ }
513
+
514
+ .expand-button {
515
+ width: 20px;
516
+ height: 20px;
517
+ border: none;
518
+ background: transparent;
519
+ color: var(--erp-text-muted);
520
+ cursor: pointer;
521
+ }
522
+
523
+ .resource-icon {
524
+ font-size: 1.25rem;
525
+ }
526
+
527
+ .resource-info {
528
+ flex: 1;
529
+ display: flex;
530
+ flex-direction: column;
531
+ min-width: 0;
532
+ }
533
+
534
+ .resource-name {
535
+ font-size: 0.875rem;
536
+ font-weight: 500;
537
+ white-space: nowrap;
538
+ overflow: hidden;
539
+ text-overflow: ellipsis;
540
+ }
541
+
542
+ .resource-dept {
543
+ font-size: 0.75rem;
544
+ color: var(--erp-text-muted);
545
+ }
546
+
547
+ .resource-capacity {
548
+ font-size: 0.75rem;
549
+ color: var(--erp-text-muted);
550
+ }
551
+
552
+ .time-cells {
553
+ display: flex;
554
+ flex: 1;
555
+ }
556
+
557
+ .time-cell {
558
+ min-width: 80px;
559
+ padding: 8px;
560
+ border-right: 1px solid var(--erp-border);
561
+ cursor: pointer;
562
+ transition: all var(--erp-transition);
563
+ position: relative;
564
+ display: flex;
565
+ flex-direction: column;
566
+ align-items: center;
567
+ justify-content: center;
568
+ gap: 4px;
569
+ }
570
+
571
+ .time-cell:hover {
572
+ background-color: rgba(99, 102, 241, 0.1) !important;
573
+ }
574
+
575
+ .allocation-indicators {
576
+ display: flex;
577
+ gap: 2px;
578
+ }
579
+
580
+ .allocation-dot {
581
+ width: 8px;
582
+ height: 8px;
583
+ border-radius: 50%;
584
+ background: var(--erp-primary);
585
+ cursor: pointer;
586
+ }
587
+
588
+ .allocation-dot.tentative {
589
+ background: var(--erp-warning);
590
+ }
591
+
592
+ .allocation-dot.confirmed {
593
+ background: var(--erp-success);
594
+ }
595
+
596
+ .utilization-label {
597
+ font-size: 0.625rem;
598
+ color: var(--erp-text-muted);
599
+ }
600
+
601
+ .more-indicator {
602
+ font-size: 0.625rem;
603
+ color: var(--erp-text-muted);
604
+ }
605
+
606
+ .expanded-allocations {
607
+ width: 100%;
608
+ padding: 8px 8px 8px 288px;
609
+ position: relative;
610
+ height: 40px;
611
+ background: var(--erp-surface);
612
+ }
613
+
614
+ .allocation-bar {
615
+ position: absolute;
616
+ height: 24px;
617
+ top: 8px;
618
+ border-radius: var(--erp-radius-sm);
619
+ background: var(--erp-primary);
620
+ display: flex;
621
+ align-items: center;
622
+ padding: 0 8px;
623
+ cursor: pointer;
624
+ transition: all var(--erp-transition);
625
+ }
626
+
627
+ .allocation-bar.tentative {
628
+ background: var(--erp-warning);
629
+ }
630
+
631
+ .allocation-bar.confirmed {
632
+ background: var(--erp-success);
633
+ }
634
+
635
+ .allocation-bar.selected {
636
+ box-shadow: 0 0 0 2px white;
637
+ }
638
+
639
+ .allocation-label {
640
+ font-size: 0.75rem;
641
+ color: white;
642
+ white-space: nowrap;
643
+ }
644
+
645
+ .delete-allocation {
646
+ margin-left: auto;
647
+ padding: 0 4px;
648
+ border: none;
649
+ background: transparent;
650
+ color: rgba(255, 255, 255, 0.7);
651
+ cursor: pointer;
652
+ }
653
+
654
+ .delete-allocation:hover {
655
+ color: white;
656
+ }
657
+
658
+ /* =============================================================================
659
+ INVENTORY MANAGER
660
+ ============================================================================= */
661
+
662
+ .nice-inventory-manager {
663
+ display: flex;
664
+ flex-direction: column;
665
+ height: 100%;
666
+ min-height: 500px;
667
+ background: var(--erp-bg);
668
+ color: var(--erp-text);
669
+ font-family: system-ui, -apple-system, sans-serif;
670
+ }
671
+
672
+ .inventory__toolbar {
673
+ display: flex;
674
+ justify-content: space-between;
675
+ align-items: center;
676
+ gap: 16px;
677
+ padding: 12px 20px;
678
+ background: var(--erp-surface);
679
+ border-bottom: 1px solid var(--erp-border);
680
+ flex-wrap: wrap;
681
+ }
682
+
683
+ .toolbar__left {
684
+ display: flex;
685
+ align-items: center;
686
+ gap: 12px;
687
+ flex-wrap: wrap;
688
+ }
689
+
690
+ .toolbar__right {
691
+ display: flex;
692
+ align-items: center;
693
+ gap: 12px;
694
+ }
695
+
696
+ .search-box {
697
+ position: relative;
698
+ }
699
+
700
+ .search-box input {
701
+ width: 240px;
702
+ padding: 8px 12px 8px 36px;
703
+ border: 1px solid var(--erp-border);
704
+ border-radius: var(--erp-radius);
705
+ background: var(--erp-surface-alt);
706
+ color: var(--erp-text);
707
+ font-size: 0.875rem;
708
+ }
709
+
710
+ .search-box input:focus {
711
+ outline: none;
712
+ border-color: var(--erp-primary);
713
+ }
714
+
715
+ .search-icon {
716
+ position: absolute;
717
+ left: 10px;
718
+ top: 50%;
719
+ transform: translateY(-50%);
720
+ }
721
+
722
+ .toolbar__left select {
723
+ padding: 8px 12px;
724
+ border: 1px solid var(--erp-border);
725
+ border-radius: var(--erp-radius);
726
+ background: var(--erp-surface-alt);
727
+ color: var(--erp-text);
728
+ font-size: 0.875rem;
729
+ }
730
+
731
+ .filter-checkbox {
732
+ display: flex;
733
+ align-items: center;
734
+ gap: 6px;
735
+ font-size: 0.875rem;
736
+ color: var(--erp-text-muted);
737
+ cursor: pointer;
738
+ }
739
+
740
+ .inventory__tabs {
741
+ display: flex;
742
+ gap: 0;
743
+ background: var(--erp-surface);
744
+ border-bottom: 1px solid var(--erp-border);
745
+ padding: 0 20px;
746
+ }
747
+
748
+ .tab {
749
+ padding: 12px 20px;
750
+ border: none;
751
+ background: transparent;
752
+ color: var(--erp-text-muted);
753
+ font-size: 0.875rem;
754
+ cursor: pointer;
755
+ position: relative;
756
+ transition: all var(--erp-transition);
757
+ }
758
+
759
+ .tab:hover {
760
+ color: var(--erp-text);
761
+ }
762
+
763
+ .tab--active {
764
+ color: var(--erp-primary);
765
+ }
766
+
767
+ .tab--active::after {
768
+ content: '';
769
+ position: absolute;
770
+ bottom: 0;
771
+ left: 0;
772
+ right: 0;
773
+ height: 2px;
774
+ background: var(--erp-primary);
775
+ }
776
+
777
+ .alert-badge {
778
+ display: inline-flex;
779
+ align-items: center;
780
+ justify-content: center;
781
+ min-width: 18px;
782
+ height: 18px;
783
+ margin-left: 6px;
784
+ padding: 0 6px;
785
+ background: var(--erp-error);
786
+ color: white;
787
+ font-size: 0.625rem;
788
+ font-weight: 600;
789
+ border-radius: 99px;
790
+ }
791
+
792
+ .inventory__content {
793
+ flex: 1;
794
+ padding: 20px;
795
+ overflow: auto;
796
+ }
797
+
798
+ /* Grid View */
799
+ .items-grid {
800
+ display: grid;
801
+ grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
802
+ gap: 16px;
803
+ }
804
+
805
+ .item-card {
806
+ background: var(--erp-surface);
807
+ border-radius: var(--erp-radius);
808
+ overflow: hidden;
809
+ cursor: pointer;
810
+ transition: all var(--erp-transition);
811
+ position: relative;
812
+ }
813
+
814
+ .item-card:hover {
815
+ transform: translateY(-2px);
816
+ box-shadow: var(--erp-shadow);
817
+ }
818
+
819
+ .item-card--selected {
820
+ ring: 2px solid var(--erp-primary);
821
+ }
822
+
823
+ .item-checkbox {
824
+ position: absolute;
825
+ top: 12px;
826
+ left: 12px;
827
+ z-index: 10;
828
+ }
829
+
830
+ .item-image {
831
+ height: 120px;
832
+ display: flex;
833
+ align-items: center;
834
+ justify-content: center;
835
+ background: var(--erp-surface-alt);
836
+ }
837
+
838
+ .item-image img {
839
+ width: 100%;
840
+ height: 100%;
841
+ object-fit: cover;
842
+ }
843
+
844
+ .placeholder-image {
845
+ font-size: 2rem;
846
+ }
847
+
848
+ .item-info {
849
+ padding: 12px;
850
+ }
851
+
852
+ .item-sku {
853
+ font-size: 0.75rem;
854
+ color: var(--erp-text-muted);
855
+ }
856
+
857
+ .item-name {
858
+ margin: 4px 0;
859
+ font-size: 0.875rem;
860
+ font-weight: 500;
861
+ }
862
+
863
+ .item-category {
864
+ font-size: 0.75rem;
865
+ color: var(--erp-text-muted);
866
+ }
867
+
868
+ .item-stock {
869
+ display: flex;
870
+ align-items: center;
871
+ gap: 8px;
872
+ padding: 8px 12px;
873
+ border-top: 1px solid var(--erp-border);
874
+ }
875
+
876
+ .status-badge {
877
+ padding: 2px 8px;
878
+ border-radius: var(--erp-radius-sm);
879
+ font-size: 0.625rem;
880
+ font-weight: 500;
881
+ color: white;
882
+ text-transform: capitalize;
883
+ }
884
+
885
+ .quantity {
886
+ font-size: 0.875rem;
887
+ font-weight: 500;
888
+ }
889
+
890
+ .reorder-alert {
891
+ font-size: 0.75rem;
892
+ color: var(--erp-warning);
893
+ }
894
+
895
+ .item-value {
896
+ padding: 8px 12px;
897
+ border-top: 1px solid var(--erp-border);
898
+ font-size: 0.875rem;
899
+ font-weight: 600;
900
+ color: var(--erp-primary-light);
901
+ }
902
+
903
+ /* List View */
904
+ .items-table {
905
+ background: var(--erp-surface);
906
+ border-radius: var(--erp-radius);
907
+ overflow: hidden;
908
+ }
909
+
910
+ .items-table table {
911
+ width: 100%;
912
+ border-collapse: collapse;
913
+ }
914
+
915
+ .items-table th {
916
+ padding: 12px;
917
+ text-align: left;
918
+ font-size: 0.75rem;
919
+ font-weight: 600;
920
+ color: var(--erp-text-muted);
921
+ text-transform: uppercase;
922
+ background: var(--erp-surface-alt);
923
+ cursor: pointer;
924
+ }
925
+
926
+ .items-table th:hover {
927
+ color: var(--erp-text);
928
+ }
929
+
930
+ .items-table td {
931
+ padding: 12px;
932
+ font-size: 0.875rem;
933
+ border-bottom: 1px solid var(--erp-border);
934
+ }
935
+
936
+ .items-table tr:hover {
937
+ background: var(--erp-surface-alt);
938
+ }
939
+
940
+ .row--selected {
941
+ background: rgba(99, 102, 241, 0.1);
942
+ }
943
+
944
+ .sku-cell {
945
+ font-family: monospace;
946
+ color: var(--erp-text-muted);
947
+ }
948
+
949
+ .low-stock {
950
+ color: var(--erp-warning);
951
+ }
952
+
953
+ .actions-cell {
954
+ display: flex;
955
+ gap: 4px;
956
+ }
957
+
958
+ .action-btn {
959
+ padding: 4px 8px;
960
+ border: none;
961
+ background: transparent;
962
+ cursor: pointer;
963
+ border-radius: var(--erp-radius-sm);
964
+ transition: background var(--erp-transition);
965
+ }
966
+
967
+ .action-btn:hover {
968
+ background: var(--erp-surface-alt);
969
+ }
970
+
971
+ .action-btn--danger:hover {
972
+ background: rgba(239, 68, 68, 0.2);
973
+ }
974
+
975
+ /* Kanban View */
976
+ .items-kanban {
977
+ display: flex;
978
+ gap: 16px;
979
+ overflow-x: auto;
980
+ padding-bottom: 16px;
981
+ }
982
+
983
+ .kanban-column {
984
+ min-width: 260px;
985
+ max-width: 300px;
986
+ flex-shrink: 0;
987
+ background: var(--erp-surface);
988
+ border-radius: var(--erp-radius);
989
+ overflow: hidden;
990
+ }
991
+
992
+ .column-header {
993
+ display: flex;
994
+ align-items: center;
995
+ gap: 8px;
996
+ padding: 12px;
997
+ border-bottom: 2px solid;
998
+ }
999
+
1000
+ .status-dot {
1001
+ width: 10px;
1002
+ height: 10px;
1003
+ border-radius: 50%;
1004
+ }
1005
+
1006
+ .column-title {
1007
+ flex: 1;
1008
+ font-size: 0.875rem;
1009
+ font-weight: 600;
1010
+ text-transform: capitalize;
1011
+ }
1012
+
1013
+ .column-count {
1014
+ padding: 2px 8px;
1015
+ background: var(--erp-surface-alt);
1016
+ border-radius: 99px;
1017
+ font-size: 0.75rem;
1018
+ color: var(--erp-text-muted);
1019
+ }
1020
+
1021
+ .column-items {
1022
+ padding: 8px;
1023
+ max-height: 500px;
1024
+ overflow-y: auto;
1025
+ }
1026
+
1027
+ .kanban-card {
1028
+ padding: 12px;
1029
+ background: var(--erp-surface-alt);
1030
+ border-radius: var(--erp-radius-sm);
1031
+ margin-bottom: 8px;
1032
+ cursor: pointer;
1033
+ transition: all var(--erp-transition);
1034
+ }
1035
+
1036
+ .kanban-card:hover {
1037
+ transform: translateY(-1px);
1038
+ box-shadow: var(--erp-shadow);
1039
+ }
1040
+
1041
+ .card-sku {
1042
+ font-size: 0.625rem;
1043
+ color: var(--erp-text-muted);
1044
+ font-family: monospace;
1045
+ }
1046
+
1047
+ .card-name {
1048
+ display: block;
1049
+ margin: 4px 0;
1050
+ font-size: 0.875rem;
1051
+ font-weight: 500;
1052
+ }
1053
+
1054
+ .card-qty {
1055
+ font-size: 0.75rem;
1056
+ color: var(--erp-text-muted);
1057
+ }
1058
+
1059
+ /* Transactions Tab */
1060
+ .transactions-tab {
1061
+ display: flex;
1062
+ flex-direction: column;
1063
+ gap: 16px;
1064
+ }
1065
+
1066
+ .add-transaction-button {
1067
+ align-self: flex-start;
1068
+ padding: 8px 16px;
1069
+ border: none;
1070
+ background: var(--erp-primary);
1071
+ color: white;
1072
+ border-radius: var(--erp-radius);
1073
+ cursor: pointer;
1074
+ }
1075
+
1076
+ .transactions-list {
1077
+ background: var(--erp-surface);
1078
+ border-radius: var(--erp-radius);
1079
+ overflow: hidden;
1080
+ }
1081
+
1082
+ .transaction-item {
1083
+ display: flex;
1084
+ align-items: center;
1085
+ gap: 12px;
1086
+ padding: 12px 16px;
1087
+ border-bottom: 1px solid var(--erp-border);
1088
+ }
1089
+
1090
+ .tx-icon {
1091
+ font-size: 1.25rem;
1092
+ }
1093
+
1094
+ .tx-info {
1095
+ flex: 1;
1096
+ display: flex;
1097
+ flex-direction: column;
1098
+ }
1099
+
1100
+ .tx-type {
1101
+ font-size: 0.75rem;
1102
+ color: var(--erp-text-muted);
1103
+ text-transform: capitalize;
1104
+ }
1105
+
1106
+ .tx-item {
1107
+ font-size: 0.875rem;
1108
+ font-weight: 500;
1109
+ }
1110
+
1111
+ .tx-qty {
1112
+ font-size: 0.875rem;
1113
+ font-weight: 600;
1114
+ }
1115
+
1116
+ .tx-qty.positive {
1117
+ color: var(--erp-success);
1118
+ }
1119
+
1120
+ .tx-qty.negative {
1121
+ color: var(--erp-error);
1122
+ }
1123
+
1124
+ .tx-date {
1125
+ font-size: 0.75rem;
1126
+ color: var(--erp-text-muted);
1127
+ }
1128
+
1129
+ .tx-ref {
1130
+ font-size: 0.75rem;
1131
+ color: var(--erp-text-muted);
1132
+ }
1133
+
1134
+ /* Reorder Tab */
1135
+ .reorder-tab {
1136
+ display: flex;
1137
+ flex-direction: column;
1138
+ }
1139
+
1140
+ .reorder-list {
1141
+ display: flex;
1142
+ flex-direction: column;
1143
+ gap: 8px;
1144
+ }
1145
+
1146
+ .reorder-item {
1147
+ display: flex;
1148
+ align-items: center;
1149
+ gap: 16px;
1150
+ padding: 16px;
1151
+ background: var(--erp-surface);
1152
+ border-radius: var(--erp-radius);
1153
+ border-left: 4px solid var(--erp-warning);
1154
+ }
1155
+
1156
+ .reorder-info {
1157
+ flex: 1;
1158
+ }
1159
+
1160
+ .reorder-sku {
1161
+ font-size: 0.75rem;
1162
+ color: var(--erp-text-muted);
1163
+ font-family: monospace;
1164
+ }
1165
+
1166
+ .reorder-name {
1167
+ display: block;
1168
+ font-size: 0.875rem;
1169
+ font-weight: 500;
1170
+ }
1171
+
1172
+ .reorder-stock {
1173
+ display: flex;
1174
+ gap: 16px;
1175
+ font-size: 0.75rem;
1176
+ color: var(--erp-text-muted);
1177
+ }
1178
+
1179
+ .supplier-name {
1180
+ font-size: 0.875rem;
1181
+ color: var(--erp-text-muted);
1182
+ }
1183
+
1184
+ .create-po-button {
1185
+ padding: 8px 16px;
1186
+ border: 1px solid var(--erp-primary);
1187
+ background: transparent;
1188
+ color: var(--erp-primary);
1189
+ border-radius: var(--erp-radius);
1190
+ font-size: 0.875rem;
1191
+ cursor: pointer;
1192
+ transition: all var(--erp-transition);
1193
+ }
1194
+
1195
+ .create-po-button:hover {
1196
+ background: var(--erp-primary);
1197
+ color: white;
1198
+ }
1199
+
1200
+ /* Pagination */
1201
+ .pagination {
1202
+ display: flex;
1203
+ align-items: center;
1204
+ justify-content: center;
1205
+ gap: 16px;
1206
+ margin-top: 24px;
1207
+ }
1208
+
1209
+ .pagination button {
1210
+ padding: 8px 16px;
1211
+ border: 1px solid var(--erp-border);
1212
+ background: var(--erp-surface);
1213
+ color: var(--erp-text);
1214
+ border-radius: var(--erp-radius);
1215
+ cursor: pointer;
1216
+ }
1217
+
1218
+ .pagination button:disabled {
1219
+ opacity: 0.5;
1220
+ cursor: not-allowed;
1221
+ }
1222
+
1223
+ .pagination span {
1224
+ font-size: 0.875rem;
1225
+ color: var(--erp-text-muted);
1226
+ }
1227
+
1228
+ /* Empty State */
1229
+ .empty-state {
1230
+ display: flex;
1231
+ flex-direction: column;
1232
+ align-items: center;
1233
+ justify-content: center;
1234
+ padding: 60px;
1235
+ text-align: center;
1236
+ color: var(--erp-text-muted);
1237
+ }
1238
+
1239
+ .empty-icon {
1240
+ font-size: 3rem;
1241
+ margin-bottom: 16px;
1242
+ }
1243
+
1244
+ /* =============================================================================
1245
+ MODALS
1246
+ ============================================================================= */
1247
+
1248
+ .modal-overlay {
1249
+ position: fixed;
1250
+ inset: 0;
1251
+ background: rgba(0, 0, 0, 0.7);
1252
+ display: flex;
1253
+ align-items: center;
1254
+ justify-content: center;
1255
+ z-index: 1000;
1256
+ }
1257
+
1258
+ .item-modal,
1259
+ .transaction-modal,
1260
+ .allocation-modal {
1261
+ width: 90%;
1262
+ max-width: 500px;
1263
+ max-height: 90vh;
1264
+ background: var(--erp-surface);
1265
+ border-radius: var(--erp-radius);
1266
+ padding: 24px;
1267
+ overflow-y: auto;
1268
+ }
1269
+
1270
+ .item-modal h3,
1271
+ .transaction-modal h3,
1272
+ .allocation-modal h3 {
1273
+ margin: 0 0 20px;
1274
+ font-size: 1.125rem;
1275
+ font-weight: 600;
1276
+ }
1277
+
1278
+ .modal-form {
1279
+ display: flex;
1280
+ flex-direction: column;
1281
+ gap: 16px;
1282
+ }
1283
+
1284
+ .modal-form label {
1285
+ display: flex;
1286
+ flex-direction: column;
1287
+ gap: 6px;
1288
+ font-size: 0.875rem;
1289
+ color: var(--erp-text-muted);
1290
+ }
1291
+
1292
+ .modal-form input,
1293
+ .modal-form select,
1294
+ .modal-form textarea {
1295
+ padding: 10px 12px;
1296
+ border: 1px solid var(--erp-border);
1297
+ border-radius: var(--erp-radius-sm);
1298
+ background: var(--erp-surface-alt);
1299
+ color: var(--erp-text);
1300
+ font-size: 0.875rem;
1301
+ }
1302
+
1303
+ .modal-form input:focus,
1304
+ .modal-form select:focus,
1305
+ .modal-form textarea:focus {
1306
+ outline: none;
1307
+ border-color: var(--erp-primary);
1308
+ }
1309
+
1310
+ .modal-form textarea {
1311
+ min-height: 80px;
1312
+ resize: vertical;
1313
+ }
1314
+
1315
+ .form-row {
1316
+ display: grid;
1317
+ grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
1318
+ gap: 16px;
1319
+ }
1320
+
1321
+ .modal-actions {
1322
+ display: flex;
1323
+ justify-content: flex-end;
1324
+ gap: 12px;
1325
+ margin-top: 24px;
1326
+ }
1327
+
1328
+ .cancel-button {
1329
+ padding: 10px 20px;
1330
+ border: 1px solid var(--erp-border);
1331
+ background: transparent;
1332
+ color: var(--erp-text);
1333
+ border-radius: var(--erp-radius);
1334
+ cursor: pointer;
1335
+ }
1336
+
1337
+ .save-button,
1338
+ .create-button {
1339
+ padding: 10px 20px;
1340
+ border: none;
1341
+ background: var(--erp-primary);
1342
+ color: white;
1343
+ border-radius: var(--erp-radius);
1344
+ cursor: pointer;
1345
+ }
1346
+
1347
+ .save-button:hover,
1348
+ .create-button:hover {
1349
+ background: var(--erp-primary-dark);
1350
+ }
1351
+
1352
+ /* =============================================================================
1353
+ RESPONSIVE
1354
+ ============================================================================= */
1355
+
1356
+ @media (max-width: 1024px) {
1357
+ .gantt__task-list {
1358
+ width: 280px;
1359
+ }
1360
+
1361
+ .resource-cell {
1362
+ width: 220px;
1363
+ }
1364
+
1365
+ .expanded-allocations {
1366
+ padding-left: 228px;
1367
+ }
1368
+ }
1369
+
1370
+ @media (max-width: 768px) {
1371
+ .gantt__container {
1372
+ flex-direction: column;
1373
+ }
1374
+
1375
+ .gantt__task-list {
1376
+ width: 100%;
1377
+ max-height: 200px;
1378
+ border-right: none;
1379
+ border-bottom: 1px solid var(--erp-border);
1380
+ }
1381
+
1382
+ .resource-row {
1383
+ flex-direction: column;
1384
+ }
1385
+
1386
+ .resource-cell {
1387
+ width: 100%;
1388
+ }
1389
+
1390
+ .time-cells {
1391
+ width: 100%;
1392
+ overflow-x: auto;
1393
+ }
1394
+
1395
+ .items-grid {
1396
+ grid-template-columns: 1fr;
1397
+ }
1398
+
1399
+ .toolbar__left,
1400
+ .toolbar__right {
1401
+ width: 100%;
1402
+ justify-content: center;
1403
+ }
1404
+ }