nexabase-report 0.1.0 → 0.1.2

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 CHANGED
@@ -96,6 +96,50 @@ html, body, #app {
96
96
  min-height: 36px !important;
97
97
  }
98
98
 
99
+ /* Cleaner preview shell in designer: keep only a close button on top */
100
+ .p-dialog.nd-stimulsoft-dialog.nd-preview-dialog {
101
+ width: min(1500px, 94vw) !important;
102
+ max-width: 94vw !important;
103
+ }
104
+
105
+ .p-dialog.nd-stimulsoft-dialog.nd-preview-dialog .p-dialog-header {
106
+ background: transparent !important;
107
+ border: none !important;
108
+ min-height: 0 !important;
109
+ padding: 8px 8px 0 8px !important;
110
+ }
111
+
112
+ .p-dialog.nd-stimulsoft-dialog.nd-preview-dialog .p-dialog-content {
113
+ min-height: calc(94vh - 16px) !important;
114
+ }
115
+
116
+ .p-dialog.nd-stimulsoft-dialog.nd-preview-dialog .p-dialog-footer {
117
+ display: none !important;
118
+ min-height: 0 !important;
119
+ padding: 0 !important;
120
+ border: none !important;
121
+ }
122
+
123
+ .nd-preview-closebar {
124
+ width: 100%;
125
+ display: flex;
126
+ justify-content: flex-end;
127
+ }
128
+
129
+ .nd-preview-close-btn.p-button {
130
+ width: 30px !important;
131
+ height: 30px !important;
132
+ border: 1px solid #cbd5e1 !important;
133
+ color: #64748b !important;
134
+ background: #ffffff !important;
135
+ }
136
+
137
+ .nd-preview-close-btn.p-button:hover {
138
+ color: #111827 !important;
139
+ border-color: #94a3b8 !important;
140
+ background: #f8fafc !important;
141
+ }
142
+
99
143
  .nd-st-toolbar {
100
144
  width: 100%;
101
145
  display: flex !important;
@@ -297,11 +341,169 @@ html, body, #app {
297
341
  align-items: flex-end;
298
342
  }
299
343
 
344
+ .nd-brand {
345
+ display: flex;
346
+ align-items: center;
347
+ gap: 8px;
348
+ padding-bottom: 2px;
349
+ margin-right: 8px;
350
+ cursor: pointer;
351
+ user-select: none;
352
+ }
353
+
354
+ .nd-brand-logo-ribbon {
355
+ height: 20px;
356
+ width: auto;
357
+ flex-shrink: 0;
358
+ filter: drop-shadow(0 1px 1px rgba(0,0,0,0.05));
359
+ }
360
+
361
+ .nd-qat {
362
+ display: flex;
363
+ align-items: center;
364
+ gap: 2px;
365
+ padding-bottom: 2px;
366
+ margin-right: 6px;
367
+ }
368
+
369
+ .nd-qat-btn {
370
+ width: 26px;
371
+ height: 24px;
372
+ border-radius: var(--radius-sm);
373
+ border: 1px solid transparent;
374
+ background: transparent;
375
+ color: var(--nd-text-secondary);
376
+ cursor: pointer;
377
+ display: inline-flex;
378
+ align-items: center;
379
+ justify-content: center;
380
+ transition: all var(--transition);
381
+ }
382
+
383
+ .nd-qat-btn:hover:not(:disabled) {
384
+ background: rgba(255, 255, 255, 0.6);
385
+ border-color: var(--nd-border);
386
+ color: var(--nd-text);
387
+ }
388
+
389
+ .nd-qat-btn:disabled {
390
+ opacity: 0.45;
391
+ cursor: not-allowed;
392
+ }
393
+
394
+ .nd-qat-sep {
395
+ width: 1px;
396
+ height: 18px;
397
+ background: var(--nd-border);
398
+ margin: 0 4px;
399
+ }
400
+
401
+ .nd-doc-type-toggle {
402
+ display: flex;
403
+ align-items: center;
404
+ background: rgba(0, 0, 0, 0.05);
405
+ padding: 3px;
406
+ border-radius: 10px;
407
+ margin: 0 16px;
408
+ border: 1px solid rgba(0,0,0,0.05);
409
+ margin-bottom: 2px;
410
+ }
411
+
412
+ .nd-type-btn {
413
+ padding: 4px 14px;
414
+ font-size: 11px;
415
+ font-weight: 700;
416
+ color: #64748b;
417
+ background: transparent;
418
+ border: none;
419
+ border-radius: 7px;
420
+ cursor: pointer;
421
+ transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
422
+ display: flex;
423
+ align-items: center;
424
+ gap: 6px;
425
+ height: 24px;
426
+ }
427
+
428
+ .nd-type-btn i {
429
+ font-size: 13px;
430
+ opacity: 0.7;
431
+ }
432
+
433
+ .nd-type-btn:hover:not(.active) {
434
+ background: rgba(255, 255, 255, 0.4);
435
+ color: var(--nd-text);
436
+ }
437
+
438
+ .nd-type-btn.active {
439
+ background: white;
440
+ color: var(--nd-primary);
441
+ box-shadow: 0 4px 10px rgba(0, 0, 0, 0.08);
442
+ }
443
+
444
+ .nd-type-btn.active i {
445
+ opacity: 1;
446
+ }
447
+
300
448
  .nd-tab-report-name {
301
449
  margin-left: auto;
302
450
  padding-bottom: 2px;
303
451
  }
304
452
 
453
+ .nd-top-right {
454
+ display: flex;
455
+ align-items: center;
456
+ gap: 8px;
457
+ }
458
+
459
+ .nd-ribbon-toggle {
460
+ width: 28px;
461
+ height: 26px;
462
+ border-radius: var(--radius-sm);
463
+ border: 1px solid var(--nd-border);
464
+ background: var(--nd-surface);
465
+ color: var(--nd-text-secondary);
466
+ cursor: pointer;
467
+ display: inline-flex;
468
+ align-items: center;
469
+ justify-content: center;
470
+ transition: all var(--transition);
471
+ }
472
+
473
+ .nd-ribbon-toggle:hover {
474
+ background: rgba(255, 255, 255, 0.6);
475
+ color: var(--nd-text);
476
+ }
477
+
478
+ .nd-conn {
479
+ display: inline-flex;
480
+ align-items: center;
481
+ gap: 6px;
482
+ padding: 0 8px;
483
+ height: 26px;
484
+ border-radius: 999px;
485
+ border: 1px solid var(--nd-border);
486
+ background: var(--nd-surface);
487
+ color: var(--nd-text-secondary);
488
+ font-size: 11px;
489
+ font-weight: 500;
490
+ }
491
+
492
+ .nd-conn-dot {
493
+ width: 8px;
494
+ height: 8px;
495
+ border-radius: 999px;
496
+ background: #ef4444;
497
+ box-shadow: 0 0 0 2px rgba(239, 68, 68, 0.15);
498
+ }
499
+
500
+ .nd-conn.active .nd-conn-dot {
501
+ background: #22c55e;
502
+ box-shadow: 0 0 0 2px rgba(34, 197, 94, 0.15);
503
+ }
504
+
505
+ .nd-conn-text { line-height: 1; }
506
+
305
507
  .nd-report-name-input {
306
508
  height: 26px;
307
509
  padding: 3px 10px;
@@ -497,74 +699,538 @@ html, body, #app {
497
699
  transition: all var(--transition);
498
700
  }
499
701
 
500
- .nd-btn-sm:hover {
501
- background: var(--nd-primary-ghost);
702
+ .nd-btn-sm:hover {
703
+ background: var(--nd-primary-ghost);
704
+ border-color: var(--nd-primary-light);
705
+ }
706
+
707
+ .nd-btn-sm i { font-size: 13px !important; color: var(--nd-primary); }
708
+ .nd-btn-sm span { font-size: 11px; color: var(--nd-text-secondary); }
709
+
710
+ .nd-tbar-btn {
711
+ display: flex;
712
+ align-items: center;
713
+ justify-content: center;
714
+ width: 28px;
715
+ height: 26px;
716
+ border-radius: var(--radius-sm);
717
+ cursor: pointer;
718
+ transition: all var(--transition);
719
+ color: var(--nd-text-secondary);
720
+ border: 1px solid transparent;
721
+ background: transparent;
722
+ }
723
+
724
+ .nd-tbar-btn:hover {
725
+ background: var(--nd-primary-ghost);
726
+ color: var(--nd-primary);
727
+ }
728
+
729
+ .nd-tbar-btn.active { background: var(--nd-primary); color: #fff; }
730
+ .nd-tbar-btn i { font-size: 13px !important; }
731
+
732
+ /* Botones de formato de texto (B, I) */
733
+ .nd-format-btn {
734
+ font-family: Georgia, 'Times New Roman', serif;
735
+ }
736
+
737
+ .nd-format-text-bold {
738
+ font-weight: 900;
739
+ font-size: 15px;
740
+ line-height: 1;
741
+ color: var(--nd-text-secondary);
742
+ }
743
+
744
+ .nd-format-text-italic {
745
+ font-style: italic;
746
+ font-weight: 700;
747
+ font-size: 15px;
748
+ line-height: 1;
749
+ color: var(--nd-text-secondary);
750
+ }
751
+
752
+ .nd-tbar-btn.active .nd-format-text-bold,
753
+ .nd-tbar-btn.active .nd-format-text-italic {
754
+ color: #fff;
755
+ }
756
+
757
+ /* Botón de color de texto */
758
+ .nd-color-btn {
759
+ position: relative;
760
+ }
761
+
762
+ .nd-color-btn:hover {
763
+ background: var(--nd-primary-ghost);
764
+ }
765
+
766
+ .nd-font-block { display: flex; flex-direction: column; gap: 4px; }
767
+ .nd-font-block .nd-row { display: flex; gap: 4px; align-items: center; }
768
+
769
+ .nd-body { flex: 1; display: flex; overflow: hidden; position: relative; }
770
+
771
+ .nd-backstage {
772
+ flex: 1;
773
+ display: flex;
774
+ overflow: hidden;
775
+ background: var(--nd-background);
776
+ min-height: 0;
777
+ }
778
+
779
+ .nd-backstage-left {
780
+ width: 260px;
781
+ flex-shrink: 0;
782
+ background: #0f172a;
783
+ color: #e2e8f0;
784
+ display: flex;
785
+ flex-direction: column;
786
+ padding: 10px;
787
+ gap: 6px;
788
+ }
789
+
790
+ .nd-backstage-back {
791
+ height: 34px;
792
+ border-radius: 10px;
793
+ border: 1px solid rgba(255, 255, 255, 0.15);
794
+ background: rgba(255, 255, 255, 0.06);
795
+ color: #e2e8f0;
796
+ display: flex;
797
+ align-items: center;
798
+ gap: 10px;
799
+ padding: 0 12px;
800
+ cursor: pointer;
801
+ transition: all var(--transition);
802
+ }
803
+
804
+ .nd-backstage-back:hover {
805
+ background: rgba(255, 255, 255, 0.12);
806
+ border-color: rgba(255, 255, 255, 0.2);
807
+ }
808
+
809
+ .nd-backstage-section {
810
+ margin-top: 10px;
811
+ padding: 0 6px;
812
+ font-size: 10px;
813
+ font-weight: 800;
814
+ letter-spacing: 0.08em;
815
+ text-transform: uppercase;
816
+ color: rgba(226, 232, 240, 0.7);
817
+ }
818
+
819
+ .nd-backstage-item {
820
+ height: 34px;
821
+ border-radius: 10px;
822
+ border: 1px solid transparent;
823
+ background: transparent;
824
+ color: #e2e8f0;
825
+ display: flex;
826
+ align-items: center;
827
+ gap: 10px;
828
+ padding: 0 10px;
829
+ cursor: pointer;
830
+ transition: all var(--transition);
831
+ }
832
+
833
+ .nd-backstage-item:hover:not(:disabled) {
834
+ background: rgba(59, 130, 246, 0.18);
835
+ border-color: rgba(59, 130, 246, 0.25);
836
+ }
837
+
838
+ .nd-backstage-item.active {
839
+ background: rgba(59, 130, 246, 0.26);
840
+ border-color: rgba(59, 130, 246, 0.35);
841
+ }
842
+
843
+ .nd-backstage-item:disabled {
844
+ opacity: 0.45;
845
+ cursor: not-allowed;
846
+ }
847
+
848
+ .nd-backstage-spacer { flex: 1; }
849
+
850
+ .nd-backstage-main {
851
+ flex: 1;
852
+ min-width: 0;
853
+ padding: 22px 24px;
854
+ overflow: auto;
855
+ }
856
+
857
+ .nd-backstage-header {
858
+ padding: 0 2px 16px;
859
+ }
860
+
861
+ .nd-backstage-title {
862
+ font-size: 20px;
863
+ font-weight: 900;
864
+ color: var(--nd-text);
865
+ line-height: 1.2;
866
+ }
867
+
868
+ .nd-backstage-sub {
869
+ font-size: 12px;
870
+ color: var(--nd-text-secondary);
871
+ margin-top: 4px;
872
+ }
873
+
874
+ .nd-backstage-grid {
875
+ display: grid;
876
+ grid-template-columns: repeat(3, minmax(0, 1fr));
877
+ gap: 12px;
878
+ }
879
+
880
+ .nd-backstage-view {
881
+ display: flex;
882
+ flex-direction: column;
883
+ gap: 12px;
884
+ }
885
+
886
+ .nd-bs-view {
887
+ display: flex;
888
+ align-items: flex-start;
889
+ justify-content: flex-start;
890
+ }
891
+
892
+ .nd-bs-view-card {
893
+ width: min(820px, 100%);
894
+ border: 1px solid var(--nd-border);
895
+ background: var(--nd-surface);
896
+ border-radius: 12px;
897
+ padding: 16px;
898
+ box-shadow: var(--shadow-sm);
899
+ }
900
+
901
+ .nd-bs-view-title {
902
+ font-size: 14px;
903
+ font-weight: 900;
904
+ color: var(--nd-text);
905
+ }
906
+
907
+ .nd-bs-view-desc {
908
+ font-size: 12px;
909
+ color: var(--nd-text-secondary);
910
+ margin-top: 4px;
911
+ }
912
+
913
+ .nd-bs-view-actions {
914
+ display: flex;
915
+ flex-wrap: wrap;
916
+ gap: 8px;
917
+ margin-top: 12px;
918
+ }
919
+
920
+ .nd-bs-primary,
921
+ .nd-bs-secondary {
922
+ height: 34px;
923
+ padding: 0 12px;
924
+ border-radius: 10px;
925
+ border: 1px solid #d1d5db;
926
+ background: #ffffff;
927
+ color: #0f172a;
928
+ cursor: pointer;
929
+ display: inline-flex;
930
+ align-items: center;
931
+ gap: 8px;
932
+ transition: all var(--transition);
933
+ }
934
+
935
+ .nd-bs-primary {
936
+ background: var(--nd-primary);
937
+ border-color: var(--nd-primary-dark);
938
+ color: #ffffff;
939
+ }
940
+
941
+ .nd-bs-primary:hover:not(:disabled) {
942
+ background: var(--nd-primary-dark);
943
+ }
944
+
945
+ .nd-bs-secondary:hover:not(:disabled) {
946
+ background: #f3f4f6;
947
+ }
948
+
949
+ .nd-bs-primary:disabled,
950
+ .nd-bs-secondary:disabled {
951
+ opacity: 0.55;
952
+ cursor: not-allowed;
953
+ }
954
+
955
+ .nd-bs-form {
956
+ margin-top: 12px;
957
+ display: grid;
958
+ grid-template-columns: 1fr;
959
+ gap: 8px;
960
+ }
961
+
962
+ .nd-bs-label {
963
+ font-size: 11px;
964
+ font-weight: 700;
965
+ color: var(--nd-text-secondary);
966
+ }
967
+
968
+ .nd-bs-input {
969
+ height: 34px;
970
+ border-radius: 10px;
971
+ border: 1px solid var(--nd-border);
972
+ padding: 0 10px;
973
+ outline: none;
974
+ font-size: 12px;
975
+ background: #ffffff;
976
+ transition: border-color var(--transition), box-shadow var(--transition);
977
+ }
978
+
979
+ .nd-bs-input:focus {
980
+ border-color: var(--nd-primary);
981
+ box-shadow: 0 0 0 2px rgba(37, 99, 235, 0.15);
982
+ }
983
+
984
+ .nd-bs-meta {
985
+ margin-top: 12px;
986
+ border: 1px solid var(--nd-border);
987
+ border-radius: 12px;
988
+ overflow: hidden;
989
+ }
990
+
991
+ .nd-bs-meta-row {
992
+ display: flex;
993
+ justify-content: space-between;
994
+ gap: 12px;
995
+ padding: 10px 12px;
996
+ font-size: 12px;
997
+ color: var(--nd-text);
998
+ background: #ffffff;
999
+ }
1000
+
1001
+ .nd-bs-meta-row + .nd-bs-meta-row {
1002
+ border-top: 1px solid var(--nd-border);
1003
+ }
1004
+
1005
+ .nd-bs-meta-row span:first-child {
1006
+ color: var(--nd-text-secondary);
1007
+ font-weight: 700;
1008
+ }
1009
+
1010
+ .nd-bs-meta-row span:last-child {
1011
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
1012
+ }
1013
+
1014
+ .nd-bs-callout {
1015
+ margin-top: 12px;
1016
+ border: 1px solid var(--nd-border);
1017
+ border-radius: 12px;
1018
+ background: #f8fafc;
1019
+ padding: 12px;
1020
+ }
1021
+
1022
+ .nd-bs-callout-title {
1023
+ font-size: 12px;
1024
+ font-weight: 900;
1025
+ color: var(--nd-text);
1026
+ }
1027
+
1028
+ .nd-bs-callout-desc {
1029
+ font-size: 12px;
1030
+ color: var(--nd-text-secondary);
1031
+ margin-top: 4px;
1032
+ }
1033
+
1034
+ .nd-bs-open {
1035
+ margin-top: 12px;
1036
+ }
1037
+
1038
+ .nd-bs-open-top {
1039
+ display: flex;
1040
+ justify-content: flex-end;
1041
+ margin-bottom: 10px;
1042
+ }
1043
+
1044
+ .nd-bs-open-list {
1045
+ position: relative;
1046
+ }
1047
+
1048
+ .nd-bs-open-item {
1049
+ display: flex;
1050
+ flex-direction: column;
1051
+ gap: 2px;
1052
+ padding: 4px 0;
1053
+ }
1054
+
1055
+ .nd-bs-open-name {
1056
+ display: flex;
1057
+ align-items: center;
1058
+ gap: 8px;
1059
+ font-size: 12px;
1060
+ font-weight: 700;
1061
+ color: var(--nd-text);
1062
+ }
1063
+
1064
+ .nd-bs-pin {
1065
+ width: 24px;
1066
+ height: 22px;
1067
+ border-radius: 8px;
1068
+ border: 1px solid var(--nd-border);
1069
+ background: #ffffff;
1070
+ color: var(--nd-text-muted);
1071
+ cursor: pointer;
1072
+ display: inline-flex;
1073
+ align-items: center;
1074
+ justify-content: center;
1075
+ transition: all var(--transition);
1076
+ flex-shrink: 0;
1077
+ }
1078
+
1079
+ .nd-bs-pin:hover {
1080
+ background: #f8fafc;
1081
+ color: var(--nd-text);
1082
+ }
1083
+
1084
+ .nd-bs-recents {
1085
+ margin-bottom: 12px;
1086
+ display: grid;
1087
+ grid-template-columns: 1fr 1fr;
1088
+ gap: 10px;
1089
+ }
1090
+
1091
+ .nd-bs-recents-block {
1092
+ border: 1px solid var(--nd-border);
1093
+ border-radius: 12px;
1094
+ background: #ffffff;
1095
+ overflow: hidden;
1096
+ }
1097
+
1098
+ .nd-bs-recents-title {
1099
+ padding: 8px 10px;
1100
+ font-size: 11px;
1101
+ font-weight: 900;
1102
+ letter-spacing: 0.06em;
1103
+ text-transform: uppercase;
1104
+ background: #f8fafc;
1105
+ border-bottom: 1px solid var(--nd-border);
1106
+ color: var(--nd-text-secondary);
1107
+ }
1108
+
1109
+ .nd-bs-recents-list {
1110
+ display: flex;
1111
+ flex-direction: column;
1112
+ }
1113
+
1114
+ .nd-bs-recents-item {
1115
+ display: flex;
1116
+ justify-content: space-between;
1117
+ gap: 10px;
1118
+ padding: 8px 10px;
1119
+ border: none;
1120
+ background: transparent;
1121
+ cursor: pointer;
1122
+ text-align: left;
1123
+ transition: background var(--transition);
1124
+ }
1125
+
1126
+ .nd-bs-recents-item:hover {
1127
+ background: var(--nd-primary-ghost);
1128
+ }
1129
+
1130
+ .nd-bs-recents-name {
1131
+ font-size: 12px;
1132
+ font-weight: 700;
1133
+ color: var(--nd-text);
1134
+ overflow: hidden;
1135
+ text-overflow: ellipsis;
1136
+ white-space: nowrap;
1137
+ }
1138
+
1139
+ .nd-bs-recents-meta {
1140
+ font-size: 11px;
1141
+ color: var(--nd-text-muted);
1142
+ flex-shrink: 0;
1143
+ }
1144
+
1145
+ .nd-bs-open-meta {
1146
+ font-size: 11px;
1147
+ color: var(--nd-text-muted);
1148
+ }
1149
+
1150
+ .nd-bs-empty {
1151
+ padding: 10px 4px 0;
1152
+ font-size: 12px;
1153
+ color: var(--nd-text-muted);
1154
+ }
1155
+ .nd-bs-card {
1156
+ text-align: left;
1157
+ border: 1px solid var(--nd-border);
1158
+ background: var(--nd-surface);
1159
+ border-radius: 12px;
1160
+ padding: 14px 14px 12px;
1161
+ cursor: pointer;
1162
+ transition: all var(--transition);
1163
+ box-shadow: var(--shadow-sm);
1164
+ }
1165
+
1166
+ .nd-bs-card:hover:not(:disabled) {
502
1167
  border-color: var(--nd-primary-light);
1168
+ box-shadow: var(--shadow);
1169
+ transform: translateY(-1px);
503
1170
  }
504
1171
 
505
- .nd-btn-sm i { font-size: 13px !important; color: var(--nd-primary); }
506
- .nd-btn-sm span { font-size: 11px; color: var(--nd-text-secondary); }
507
-
508
- .nd-tbar-btn {
509
- display: flex;
510
- align-items: center;
511
- justify-content: center;
512
- width: 28px;
513
- height: 26px;
514
- border-radius: var(--radius-sm);
515
- cursor: pointer;
516
- transition: all var(--transition);
517
- color: var(--nd-text-secondary);
518
- border: 1px solid transparent;
519
- background: transparent;
1172
+ .nd-bs-card:disabled {
1173
+ opacity: 0.55;
1174
+ cursor: not-allowed;
1175
+ transform: none;
520
1176
  }
521
1177
 
522
- .nd-tbar-btn:hover {
1178
+ .nd-bs-card-ico {
1179
+ width: 34px;
1180
+ height: 34px;
1181
+ border-radius: 10px;
523
1182
  background: var(--nd-primary-ghost);
1183
+ border: 1px solid var(--nd-primary-light);
524
1184
  color: var(--nd-primary);
1185
+ display: flex;
1186
+ align-items: center;
1187
+ justify-content: center;
1188
+ margin-bottom: 10px;
525
1189
  }
526
1190
 
527
- .nd-tbar-btn.active { background: var(--nd-primary); color: #fff; }
528
- .nd-tbar-btn i { font-size: 13px !important; }
1191
+ .nd-bs-card-ico i { font-size: 16px; }
529
1192
 
530
- /* Botones de formato de texto (B, I) */
531
- .nd-format-btn {
532
- font-family: Georgia, 'Times New Roman', serif;
1193
+ .nd-bs-card-title {
1194
+ font-size: 13px;
1195
+ font-weight: 800;
1196
+ color: var(--nd-text);
533
1197
  }
534
1198
 
535
- .nd-format-text-bold {
536
- font-weight: 900;
537
- font-size: 15px;
538
- line-height: 1;
1199
+ .nd-bs-card-desc {
1200
+ font-size: 12px;
539
1201
  color: var(--nd-text-secondary);
1202
+ margin-top: 2px;
540
1203
  }
541
1204
 
542
- .nd-format-text-italic {
543
- font-style: italic;
544
- font-weight: 700;
545
- font-size: 15px;
546
- line-height: 1;
547
- color: var(--nd-text-secondary);
1205
+ .nd-backstage-meta {
1206
+ margin-top: 16px;
1207
+ border: 1px solid var(--nd-border);
1208
+ border-radius: 12px;
1209
+ overflow: hidden;
1210
+ background: var(--nd-surface);
548
1211
  }
549
1212
 
550
- .nd-tbar-btn.active .nd-format-text-bold,
551
- .nd-tbar-btn.active .nd-format-text-italic {
552
- color: #fff;
1213
+ .nd-backstage-meta-row {
1214
+ display: flex;
1215
+ justify-content: space-between;
1216
+ gap: 12px;
1217
+ padding: 10px 12px;
1218
+ font-size: 12px;
1219
+ color: var(--nd-text);
553
1220
  }
554
1221
 
555
- /* Botón de color de texto */
556
- .nd-color-btn {
557
- position: relative;
1222
+ .nd-backstage-meta-row + .nd-backstage-meta-row {
1223
+ border-top: 1px solid var(--nd-border);
558
1224
  }
559
1225
 
560
- .nd-color-btn:hover {
561
- background: var(--nd-primary-ghost);
1226
+ .nd-backstage-meta-row span:first-child {
1227
+ color: var(--nd-text-secondary);
1228
+ font-weight: 700;
562
1229
  }
563
1230
 
564
- .nd-font-block { display: flex; flex-direction: column; gap: 4px; }
565
- .nd-font-block .nd-row { display: flex; gap: 4px; align-items: center; }
566
-
567
- .nd-body { flex: 1; display: flex; overflow: hidden; position: relative; }
1231
+ .nd-backstage-meta-row span:last-child {
1232
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
1233
+ }
568
1234
 
569
1235
  .nd-sidebar {
570
1236
  background: var(--nd-surface);
@@ -703,6 +1369,169 @@ html, body, #app {
703
1369
 
704
1370
  .nd-props { padding: 4px 0; }
705
1371
 
1372
+ .nd-props-context {
1373
+ display: flex;
1374
+ align-items: center;
1375
+ justify-content: space-between;
1376
+ gap: 10px;
1377
+ padding: 10px 12px;
1378
+ border-bottom: 1px solid var(--nd-border);
1379
+ background: var(--nd-surface);
1380
+ }
1381
+
1382
+ .nd-props-context-title {
1383
+ font-size: 12px;
1384
+ font-weight: 700;
1385
+ color: var(--nd-text);
1386
+ line-height: 1.1;
1387
+ }
1388
+
1389
+ .nd-props-context-sub {
1390
+ font-size: 10px;
1391
+ color: var(--nd-text-muted);
1392
+ line-height: 1.1;
1393
+ margin-top: 2px;
1394
+ }
1395
+
1396
+ .nd-props-context-actions {
1397
+ display: flex;
1398
+ align-items: center;
1399
+ gap: 4px;
1400
+ }
1401
+
1402
+ .nd-props-section {
1403
+ margin: 10px 10px 0;
1404
+ border: 1px solid var(--nd-border);
1405
+ border-radius: var(--radius);
1406
+ overflow: hidden;
1407
+ background: var(--nd-surface);
1408
+ }
1409
+
1410
+ .nd-props-section-head {
1411
+ display: flex;
1412
+ align-items: center;
1413
+ gap: 8px;
1414
+ padding: 8px 10px;
1415
+ cursor: pointer;
1416
+ user-select: none;
1417
+ background: #f8fafc;
1418
+ color: var(--nd-text);
1419
+ font-size: 11px;
1420
+ font-weight: 700;
1421
+ text-transform: uppercase;
1422
+ letter-spacing: 0.04em;
1423
+ }
1424
+
1425
+ .nd-props-section-head:hover {
1426
+ background: var(--nd-primary-ghost);
1427
+ color: var(--nd-primary);
1428
+ }
1429
+
1430
+ .nd-props-section-body {
1431
+ padding: 10px 10px 2px;
1432
+ }
1433
+
1434
+ .p-dialog.nd-about-dialog {
1435
+ border-radius: 12px;
1436
+ overflow: hidden;
1437
+ }
1438
+
1439
+ .p-dialog.nd-about-dialog .p-dialog-header {
1440
+ background: var(--nd-surface);
1441
+ border-bottom: 1px solid var(--nd-border);
1442
+ }
1443
+
1444
+ .p-dialog.nd-about-dialog .p-dialog-content {
1445
+ background: var(--nd-surface);
1446
+ }
1447
+
1448
+ .p-dialog.nd-about-dialog .p-dialog-footer {
1449
+ background: var(--nd-surface);
1450
+ border-top: 1px solid var(--nd-border);
1451
+ }
1452
+
1453
+ .nd-about-body {
1454
+ padding: 4px 2px 2px;
1455
+ }
1456
+
1457
+ .nd-about-hero {
1458
+ display: flex;
1459
+ align-items: center;
1460
+ gap: 12px;
1461
+ padding: 10px 12px 8px;
1462
+ border: 1px solid var(--nd-border);
1463
+ border-radius: 12px;
1464
+ background: #f8fafc;
1465
+ }
1466
+
1467
+ .nd-about-logo {
1468
+ width: 48px;
1469
+ height: 48px;
1470
+ border-radius: 12px;
1471
+ background: #ffffff;
1472
+ border: 1px solid var(--nd-border);
1473
+ display: flex;
1474
+ align-items: center;
1475
+ justify-content: center;
1476
+ flex-shrink: 0;
1477
+ }
1478
+
1479
+ .nd-about-logo-img {
1480
+ width: 100%;
1481
+ height: 100%;
1482
+ object-fit: contain;
1483
+ }
1484
+
1485
+ .nd-about-title {
1486
+ font-size: 14px;
1487
+ font-weight: 900;
1488
+ color: var(--nd-text);
1489
+ line-height: 1.2;
1490
+ }
1491
+
1492
+ .nd-about-sub {
1493
+ font-size: 12px;
1494
+ color: var(--nd-text-secondary);
1495
+ margin-top: 2px;
1496
+ }
1497
+
1498
+ .nd-about-kv {
1499
+ margin-top: 12px;
1500
+ border: 1px solid var(--nd-border);
1501
+ border-radius: 12px;
1502
+ overflow: hidden;
1503
+ }
1504
+
1505
+ .nd-about-row {
1506
+ display: flex;
1507
+ justify-content: space-between;
1508
+ gap: 12px;
1509
+ padding: 10px 12px;
1510
+ font-size: 12px;
1511
+ color: var(--nd-text);
1512
+ background: #ffffff;
1513
+ }
1514
+
1515
+ .nd-about-row + .nd-about-row {
1516
+ border-top: 1px solid var(--nd-border);
1517
+ }
1518
+
1519
+ .nd-about-row span:first-child {
1520
+ color: var(--nd-text-secondary);
1521
+ font-weight: 600;
1522
+ }
1523
+
1524
+ .nd-about-row span:last-child {
1525
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
1526
+ color: var(--nd-text);
1527
+ }
1528
+
1529
+ .nd-about-footer {
1530
+ display: flex;
1531
+ justify-content: flex-end;
1532
+ padding: 2px 0;
1533
+ }
1534
+
706
1535
  /* ─── MANUAL FIELDS ─────────────────────────────────────────────────── */
707
1536
  .nd-manual-field {
708
1537
  position: relative;
@@ -1148,13 +1977,13 @@ html, body, #app {
1148
1977
  flex-shrink: 0;
1149
1978
  }
1150
1979
 
1151
- .nd-page-content {
1152
- position: absolute;
1153
- inset: 0;
1154
- box-sizing: border-box;
1155
- z-index: 5;
1156
- }
1157
-
1980
+ .nd-page-content {
1981
+ position: absolute;
1982
+ inset: 0;
1983
+ box-sizing: border-box;
1984
+ z-index: 5;
1985
+ }
1986
+
1158
1987
  .nd-page.a4.portrait { width: 794px; min-height: 1123px; }
1159
1988
  .nd-page.a4.landscape { width: 1123px; min-height: 794px; }
1160
1989
  .nd-page.letter.portrait { width: 816px; min-height: 1056px; }
@@ -1225,10 +2054,11 @@ html, body, #app {
1225
2054
  }
1226
2055
 
1227
2056
  .nd-band:hover { background: rgba(37, 99, 235, 0.02); }
2057
+ .nd-band.selected { background: rgba(37, 99, 235, 0.05); box-shadow: inset 0 0 0 1px rgba(37, 99, 235, 0.3); }
1228
2058
 
1229
2059
  .nd-band-tag {
1230
2060
  position: absolute;
1231
- left: calc(-96px - var(--nd-margin-left-px, 0px));
2061
+ left: calc(-96px - var(--nd-margin-left-px, 0px));
1232
2062
  top: 3px;
1233
2063
  width: 90px;
1234
2064
  background: var(--nd-surface);
@@ -1257,10 +2087,62 @@ html, body, #app {
1257
2087
  background: var(--nd-primary-light);
1258
2088
  border-color: var(--nd-primary-light);
1259
2089
  }
2090
+ .nd-band-tag.selected {
2091
+ color: var(--nd-primary);
2092
+ background: var(--nd-primary-light);
2093
+ border-color: var(--nd-primary);
2094
+ }
1260
2095
 
1261
2096
  .nd-band-source { color: var(--nd-text-muted); font-weight: 400; font-size: 9px; }
1262
2097
  .nd-band-content { position: relative; margin-left: 0; }
1263
2098
 
2099
+ .nd-snap-guide {
2100
+ position: absolute;
2101
+ pointer-events: none;
2102
+ z-index: 50;
2103
+ background: rgba(59, 130, 246, 0.75);
2104
+ }
2105
+
2106
+ .nd-snap-guide.v { top: 0; bottom: 0; width: 1px; }
2107
+ .nd-snap-guide.h { left: 0; right: 0; height: 1px; }
2108
+ .nd-snap-guide.margin { background: rgba(239, 68, 68, 0.85); }
2109
+
2110
+ .nd-drag-metrics {
2111
+ position: absolute;
2112
+ pointer-events: none;
2113
+ z-index: 60;
2114
+ background: rgba(15, 23, 42, 0.85);
2115
+ color: #ffffff;
2116
+ font-size: 10px;
2117
+ padding: 3px 6px;
2118
+ border-radius: 6px;
2119
+ white-space: nowrap;
2120
+ box-shadow: var(--shadow-md);
2121
+ }
2122
+
2123
+ .nd-distance-line {
2124
+ position: absolute;
2125
+ pointer-events: none;
2126
+ z-index: 55;
2127
+ background: rgba(59, 130, 246, 0.55);
2128
+ }
2129
+
2130
+ .nd-distance-line.h { height: 1px; }
2131
+ .nd-distance-line.v { width: 1px; }
2132
+
2133
+ .nd-distance-label {
2134
+ position: absolute;
2135
+ pointer-events: none;
2136
+ z-index: 56;
2137
+ transform: translate(-50%, -50%);
2138
+ background: rgba(59, 130, 246, 0.85);
2139
+ color: #ffffff;
2140
+ font-size: 10px;
2141
+ padding: 2px 6px;
2142
+ border-radius: 999px;
2143
+ white-space: nowrap;
2144
+ }
2145
+
1264
2146
  .nd-band-hint {
1265
2147
  position: absolute;
1266
2148
  inset: 0;
@@ -1721,3 +2603,69 @@ html, body, #app {
1721
2603
  .text-gray-400 { color: #9ca3af !important; }
1722
2604
  .opacity-50 { opacity: 0.5 !important; }
1723
2605
  .cursor-not-allowed { cursor: not-allowed !important; }
2606
+
2607
+ /* ============================================================
2608
+ WIDGET LIBRARY & DASHBOARD DESIGNER
2609
+ ============================================================ */
2610
+
2611
+ .nd-widget-groups {
2612
+ padding: 12px;
2613
+ display: flex;
2614
+ flex-direction: column;
2615
+ gap: 20px;
2616
+ }
2617
+
2618
+ .nd-cat-title {
2619
+ font-size: 10px;
2620
+ font-weight: 800;
2621
+ color: var(--nd-text-muted);
2622
+ text-transform: uppercase;
2623
+ letter-spacing: 0.06em;
2624
+ margin-bottom: 10px;
2625
+ padding-left: 2px;
2626
+ }
2627
+
2628
+ .nd-widget-grid {
2629
+ display: grid;
2630
+ grid-template-columns: repeat(2, 1fr);
2631
+ gap: 8px;
2632
+ }
2633
+
2634
+ .nd-widget-item {
2635
+ background: #fff;
2636
+ border: 1px solid var(--nd-border);
2637
+ border-radius: 10px;
2638
+ padding: 12px 8px;
2639
+ display: flex;
2640
+ flex-direction: column;
2641
+ align-items: center;
2642
+ justify-content: center;
2643
+ gap: 8px;
2644
+ cursor: grab;
2645
+ transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
2646
+ text-align: center;
2647
+ box-shadow: 0 1px 2px rgba(0,0,0,0.03);
2648
+ }
2649
+
2650
+ .nd-widget-item:hover {
2651
+ border-color: var(--nd-primary);
2652
+ background: var(--nd-primary-ghost);
2653
+ transform: translateY(-2px);
2654
+ box-shadow: 0 4px 12px rgba(37, 99, 235, 0.12);
2655
+ }
2656
+
2657
+ .nd-widget-item:active {
2658
+ cursor: grabbing;
2659
+ }
2660
+
2661
+ .nd-widget-item i {
2662
+ font-size: 20px;
2663
+ filter: drop-shadow(0 2px 4px rgba(0,0,0,0.05));
2664
+ }
2665
+
2666
+ .nd-widget-item span {
2667
+ font-size: 10px;
2668
+ font-weight: 600;
2669
+ color: var(--nd-text-secondary);
2670
+ line-height: 1.2;
2671
+ }