nexabase-report 0.2.5 → 0.2.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,2287 @@
1
+ /* ============================================================
2
+ DESIGNER COMPONENT STYLES
3
+ ============================================================ */
4
+
5
+ .nd-root {
6
+ display: flex;
7
+ flex-direction: column;
8
+ height: 100vh;
9
+ font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, sans-serif;
10
+ background: var(--nd-background);
11
+ color: var(--nd-text);
12
+ overflow: hidden;
13
+ user-select: none;
14
+ -webkit-font-smoothing: antialiased;
15
+ }
16
+
17
+ .nd-header {
18
+ background: var(--nd-surface);
19
+ border-bottom: 1px solid var(--nd-border);
20
+ box-shadow: var(--shadow-sm);
21
+ z-index: 50;
22
+ }
23
+
24
+ .nd-tab-bar {
25
+ display: flex;
26
+ padding: 6px 12px 0;
27
+ gap: 2px;
28
+ background: var(--nd-background);
29
+ border-bottom: 1px solid var(--nd-border);
30
+ align-items: flex-end;
31
+ }
32
+
33
+ .nd-brand {
34
+ display: flex;
35
+ align-items: center;
36
+ gap: 8px;
37
+ padding-bottom: 2px;
38
+ margin-right: 8px;
39
+ cursor: pointer;
40
+ user-select: none;
41
+ }
42
+
43
+ .nd-brand-logo-ribbon {
44
+ height: 20px;
45
+ width: auto;
46
+ flex-shrink: 0;
47
+ filter: drop-shadow(0 1px 1px rgba(0,0,0,0.05));
48
+ }
49
+
50
+ .nd-qat {
51
+ display: flex;
52
+ align-items: center;
53
+ gap: 2px;
54
+ padding-bottom: 2px;
55
+ margin-right: 6px;
56
+ }
57
+
58
+ .nd-qat-btn {
59
+ width: 26px;
60
+ height: 24px;
61
+ border-radius: var(--radius-sm);
62
+ border: 1px solid transparent;
63
+ background: transparent;
64
+ color: var(--nd-text-secondary);
65
+ cursor: pointer;
66
+ display: inline-flex;
67
+ align-items: center;
68
+ justify-content: center;
69
+ transition: all var(--transition);
70
+ }
71
+
72
+ .nd-qat-btn:hover:not(:disabled) {
73
+ background: rgba(255, 255, 255, 0.6);
74
+ border-color: var(--nd-border);
75
+ color: var(--nd-text);
76
+ }
77
+
78
+ .nd-qat-btn:disabled {
79
+ opacity: 0.45;
80
+ cursor: not-allowed;
81
+ }
82
+
83
+ .nd-qat-sep {
84
+ width: 1px;
85
+ height: 18px;
86
+ background: var(--nd-border);
87
+ margin: 0 4px;
88
+ }
89
+
90
+ .nd-doc-type-toggle {
91
+ display: flex;
92
+ align-items: center;
93
+ background: rgba(0, 0, 0, 0.05);
94
+ padding: 3px;
95
+ border-radius: 10px;
96
+ margin: 0 16px;
97
+ border: 1px solid rgba(0,0,0,0.05);
98
+ margin-bottom: 2px;
99
+ }
100
+
101
+ .nd-type-btn {
102
+ padding: 4px 14px;
103
+ font-size: 11px;
104
+ font-weight: 700;
105
+ color: #64748b;
106
+ background: transparent;
107
+ border: none;
108
+ border-radius: 7px;
109
+ cursor: pointer;
110
+ transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
111
+ display: flex;
112
+ align-items: center;
113
+ gap: 6px;
114
+ height: 24px;
115
+ }
116
+
117
+ .nd-type-btn i {
118
+ font-size: 13px;
119
+ opacity: 0.7;
120
+ }
121
+
122
+ .nd-type-btn:hover:not(.active) {
123
+ background: rgba(255, 255, 255, 0.4);
124
+ color: var(--nd-text);
125
+ }
126
+
127
+ .nd-type-btn.active {
128
+ background: white;
129
+ color: var(--nd-primary);
130
+ box-shadow: 0 4px 10px rgba(0, 0, 0, 0.08);
131
+ }
132
+
133
+ .nd-type-btn.active i {
134
+ opacity: 1;
135
+ }
136
+
137
+ .nd-tab-report-name {
138
+ margin-left: auto;
139
+ padding-bottom: 2px;
140
+ }
141
+
142
+ .nd-top-right {
143
+ display: flex;
144
+ align-items: center;
145
+ gap: 8px;
146
+ }
147
+
148
+ .nd-ribbon-toggle {
149
+ width: 28px;
150
+ height: 26px;
151
+ border-radius: var(--radius-sm);
152
+ border: 1px solid var(--nd-border);
153
+ background: var(--nd-surface);
154
+ color: var(--nd-text-secondary);
155
+ cursor: pointer;
156
+ display: inline-flex;
157
+ align-items: center;
158
+ justify-content: center;
159
+ transition: all var(--transition);
160
+ }
161
+
162
+ .nd-ribbon-toggle:hover {
163
+ background: rgba(255, 255, 255, 0.6);
164
+ color: var(--nd-text);
165
+ }
166
+
167
+ .nd-conn {
168
+ display: inline-flex;
169
+ align-items: center;
170
+ gap: 6px;
171
+ padding: 0 8px;
172
+ height: 26px;
173
+ border-radius: 999px;
174
+ border: 1px solid var(--nd-border);
175
+ background: var(--nd-surface);
176
+ color: var(--nd-text-secondary);
177
+ font-size: 11px;
178
+ font-weight: 500;
179
+ }
180
+
181
+ .nd-conn-dot {
182
+ width: 8px;
183
+ height: 8px;
184
+ border-radius: 999px;
185
+ background: #ef4444;
186
+ box-shadow: 0 0 0 2px rgba(239, 68, 68, 0.15);
187
+ }
188
+
189
+ .nd-conn.active .nd-conn-dot {
190
+ background: #22c55e;
191
+ box-shadow: 0 0 0 2px rgba(34, 197, 94, 0.15);
192
+ }
193
+
194
+ .nd-conn-text { line-height: 1; }
195
+
196
+ .nd-report-name-input {
197
+ height: 26px;
198
+ padding: 3px 10px;
199
+ font-size: 12px;
200
+ font-weight: 500;
201
+ color: var(--nd-text);
202
+ background: var(--nd-surface);
203
+ border: 1px solid var(--nd-border);
204
+ border-radius: var(--radius-sm);
205
+ outline: none;
206
+ transition: border-color var(--transition), box-shadow var(--transition);
207
+ width: 220px;
208
+ }
209
+
210
+ .nd-report-name-input:focus {
211
+ border-color: var(--nd-primary);
212
+ box-shadow: 0 0 0 2px rgba(37, 99, 235, 0.15);
213
+ }
214
+
215
+ .nd-report-name-input::placeholder {
216
+ color: var(--nd-text-muted);
217
+ font-weight: 400;
218
+ }
219
+
220
+ .nd-tab {
221
+ padding: 7px 18px;
222
+ font-size: 12px;
223
+ font-weight: 500;
224
+ cursor: pointer;
225
+ color: var(--nd-text-secondary);
226
+ border-radius: var(--radius-sm) var(--radius-sm) 0 0;
227
+ border: 1px solid transparent;
228
+ border-bottom: none;
229
+ transition: all var(--transition);
230
+ }
231
+
232
+ .nd-tab:hover {
233
+ color: var(--nd-text);
234
+ background: rgba(255, 255, 255, 0.6);
235
+ }
236
+
237
+ .nd-tab.active {
238
+ color: var(--nd-primary);
239
+ background: var(--nd-surface);
240
+ border-color: var(--nd-border);
241
+ border-bottom-color: var(--nd-surface);
242
+ margin-bottom: -1px;
243
+ font-weight: 600;
244
+ }
245
+
246
+ .nd-tab-archivo {
247
+ background: var(--nd-primary) !important;
248
+ color: #fff !important;
249
+ font-weight: 600 !important;
250
+ border-color: transparent !important;
251
+ }
252
+
253
+ .nd-tab-archivo:hover {
254
+ background: var(--nd-primary-dark) !important;
255
+ }
256
+
257
+ .nd-tab-archivo.active {
258
+ background: var(--nd-primary-dark) !important;
259
+ color: #fff !important;
260
+ border-color: var(--nd-primary) !important;
261
+ }
262
+
263
+ .nd-toolbar {
264
+ display: flex;
265
+ min-height: 96px;
266
+ background: var(--nd-surface);
267
+ padding: 8px 16px;
268
+ gap: 4px;
269
+ align-items: stretch;
270
+ overflow-x: auto;
271
+ }
272
+
273
+ .nd-toolbar::-webkit-scrollbar { height: 4px; }
274
+ .nd-toolbar::-webkit-scrollbar-thumb { background: var(--nd-border-strong); border-radius: 4px; }
275
+
276
+ .nd-group {
277
+ display: flex;
278
+ flex-direction: column;
279
+ background: transparent;
280
+ padding: 4px 8px 20px;
281
+ position: relative;
282
+ gap: 2px;
283
+ flex-shrink: 0;
284
+ }
285
+
286
+ .nd-group + .nd-group {
287
+ border-left: 1px solid var(--nd-border);
288
+ padding-left: 12px;
289
+ margin-left: 4px;
290
+ }
291
+
292
+ .nd-group-body {
293
+ display: flex;
294
+ align-items: flex-start;
295
+ justify-content: center;
296
+ gap: 4px;
297
+ }
298
+
299
+ .nd-group-title {
300
+ position: absolute;
301
+ bottom: 2px;
302
+ left: 0;
303
+ right: 0;
304
+ font-size: 10px;
305
+ font-weight: 500;
306
+ color: var(--nd-text-muted);
307
+ text-align: center;
308
+ text-transform: uppercase;
309
+ letter-spacing: 0.04em;
310
+ }
311
+
312
+ .nd-btn-lg {
313
+ display: flex;
314
+ flex-direction: column;
315
+ align-items: center;
316
+ justify-content: center;
317
+ gap: 3px;
318
+ padding: 6px 10px;
319
+ border-radius: var(--radius);
320
+ cursor: pointer;
321
+ min-width: 60px;
322
+ height: 68px;
323
+ border: 1px solid transparent;
324
+ background: transparent;
325
+ transition: all var(--transition);
326
+ }
327
+
328
+ .nd-btn-lg:hover {
329
+ background: var(--nd-primary-ghost);
330
+ border-color: var(--nd-primary-light);
331
+ }
332
+
333
+ .nd-btn-lg:active { background: var(--nd-primary-light); }
334
+ .nd-btn-lg i { font-size: 24px !important; color: var(--nd-primary); }
335
+
336
+ .nd-btn-lg span {
337
+ font-size: 10.5px;
338
+ font-weight: 500;
339
+ color: var(--nd-text-secondary);
340
+ line-height: 1.2;
341
+ text-align: center;
342
+ }
343
+
344
+ .nd-btn-lg:hover i { color: var(--nd-primary-dark); }
345
+
346
+ .nd-btn-sm-col {
347
+ display: flex;
348
+ flex-direction: column;
349
+ justify-content: center;
350
+ gap: 2px;
351
+ }
352
+
353
+ .nd-margins-group .nd-group-body {
354
+ align-items: flex-end !important;
355
+ justify-content: flex-end !important;
356
+ }
357
+
358
+ .nd-margins-group .nd-btn-sm-col {
359
+ margin-top: auto !important;
360
+ }
361
+
362
+ /* Forzar ancho de los InputNumber dentro de márgenes */
363
+ .nd-margins-group .p-inputnumber {
364
+ width: 55px !important;
365
+ min-width: 55px !important;
366
+ max-width: 55px !important;
367
+ flex-shrink: 0 !important;
368
+ }
369
+
370
+ .nd-margins-group .p-inputnumber .p-inputnumber-input {
371
+ width: 55px !important;
372
+ min-width: 55px !important;
373
+ padding-left: 6px !important;
374
+ padding-right: 6px !important;
375
+ }
376
+
377
+ .nd-btn-sm {
378
+ display: flex;
379
+ align-items: center;
380
+ gap: 6px;
381
+ padding: 3px 10px;
382
+ border-radius: var(--radius-sm);
383
+ cursor: pointer;
384
+ height: 24px;
385
+ min-width: 100px;
386
+ border: 1px solid transparent;
387
+ background: transparent;
388
+ transition: all var(--transition);
389
+ }
390
+
391
+ .nd-btn-sm:hover {
392
+ background: var(--nd-primary-ghost);
393
+ border-color: var(--nd-primary-light);
394
+ }
395
+
396
+ .nd-btn-sm i { font-size: 13px !important; color: var(--nd-primary); }
397
+ .nd-btn-sm span { font-size: 11px; color: var(--nd-text-secondary); }
398
+
399
+ .nd-tbar-btn {
400
+ display: flex;
401
+ align-items: center;
402
+ justify-content: center;
403
+ width: 28px;
404
+ height: 26px;
405
+ border-radius: var(--radius-sm);
406
+ cursor: pointer;
407
+ transition: all var(--transition);
408
+ color: var(--nd-text-secondary);
409
+ border: 1px solid transparent;
410
+ background: transparent;
411
+ }
412
+
413
+ .nd-tbar-btn:hover {
414
+ background: var(--nd-primary-ghost);
415
+ color: var(--nd-primary);
416
+ }
417
+
418
+ .nd-tbar-btn.active { background: var(--nd-primary); color: #fff; }
419
+ .nd-tbar-btn i { font-size: 13px !important; }
420
+
421
+ /* Botones de formato de texto (B, I) */
422
+ .nd-format-btn {
423
+ font-family: Georgia, 'Times New Roman', serif;
424
+ }
425
+
426
+ .nd-format-text-bold {
427
+ font-weight: 900;
428
+ font-size: 15px;
429
+ line-height: 1;
430
+ color: var(--nd-text-secondary);
431
+ }
432
+
433
+ .nd-format-text-italic {
434
+ font-style: italic;
435
+ font-weight: 700;
436
+ font-size: 15px;
437
+ line-height: 1;
438
+ color: var(--nd-text-secondary);
439
+ }
440
+
441
+ .nd-tbar-btn.active .nd-format-text-bold,
442
+ .nd-tbar-btn.active .nd-format-text-italic {
443
+ color: #fff;
444
+ }
445
+
446
+ /* Botón de color de texto */
447
+ .nd-color-btn {
448
+ position: relative;
449
+ }
450
+
451
+ .nd-color-btn:hover {
452
+ background: var(--nd-primary-ghost);
453
+ }
454
+
455
+ .nd-font-block { display: flex; flex-direction: column; gap: 4px; }
456
+ .nd-font-block .nd-row { display: flex; gap: 4px; align-items: center; }
457
+
458
+ .nd-body { flex: 1; display: flex; overflow: hidden; position: relative; }
459
+
460
+ .nd-backstage {
461
+ flex: 1;
462
+ display: flex;
463
+ overflow: hidden;
464
+ background: var(--nd-background);
465
+ min-height: 0;
466
+ }
467
+
468
+ .nd-backstage-left {
469
+ width: 260px;
470
+ flex-shrink: 0;
471
+ background: #0f172a;
472
+ color: #e2e8f0;
473
+ display: flex;
474
+ flex-direction: column;
475
+ padding: 10px;
476
+ gap: 6px;
477
+ }
478
+
479
+ .nd-backstage-back {
480
+ height: 34px;
481
+ border-radius: 10px;
482
+ border: 1px solid rgba(255, 255, 255, 0.15);
483
+ background: rgba(255, 255, 255, 0.06);
484
+ color: #e2e8f0;
485
+ display: flex;
486
+ align-items: center;
487
+ gap: 10px;
488
+ padding: 0 12px;
489
+ cursor: pointer;
490
+ transition: all var(--transition);
491
+ }
492
+
493
+ .nd-backstage-back:hover {
494
+ background: rgba(255, 255, 255, 0.12);
495
+ border-color: rgba(255, 255, 255, 0.2);
496
+ }
497
+
498
+ .nd-backstage-section {
499
+ margin-top: 10px;
500
+ padding: 0 6px;
501
+ font-size: 10px;
502
+ font-weight: 800;
503
+ letter-spacing: 0.08em;
504
+ text-transform: uppercase;
505
+ color: rgba(226, 232, 240, 0.7);
506
+ }
507
+
508
+ .nd-backstage-item {
509
+ height: 34px;
510
+ border-radius: 10px;
511
+ border: 1px solid transparent;
512
+ background: transparent;
513
+ color: #e2e8f0;
514
+ display: flex;
515
+ align-items: center;
516
+ gap: 10px;
517
+ padding: 0 10px;
518
+ cursor: pointer;
519
+ transition: all var(--transition);
520
+ }
521
+
522
+ .nd-backstage-item:hover:not(:disabled) {
523
+ background: rgba(59, 130, 246, 0.18);
524
+ border-color: rgba(59, 130, 246, 0.25);
525
+ }
526
+
527
+ .nd-backstage-item.active {
528
+ background: rgba(59, 130, 246, 0.26);
529
+ border-color: rgba(59, 130, 246, 0.35);
530
+ }
531
+
532
+ .nd-backstage-item:disabled {
533
+ opacity: 0.45;
534
+ cursor: not-allowed;
535
+ }
536
+
537
+ .nd-backstage-spacer { flex: 1; }
538
+
539
+ .nd-backstage-main {
540
+ flex: 1;
541
+ min-width: 0;
542
+ padding: 22px 24px;
543
+ overflow: auto;
544
+ }
545
+
546
+ .nd-backstage-header {
547
+ padding: 0 2px 16px;
548
+ }
549
+
550
+ .nd-backstage-title {
551
+ font-size: 20px;
552
+ font-weight: 900;
553
+ color: var(--nd-text);
554
+ line-height: 1.2;
555
+ }
556
+
557
+ .nd-backstage-sub {
558
+ font-size: 12px;
559
+ color: var(--nd-text-secondary);
560
+ margin-top: 4px;
561
+ }
562
+
563
+ .nd-backstage-grid {
564
+ display: grid;
565
+ grid-template-columns: repeat(3, minmax(0, 1fr));
566
+ gap: 12px;
567
+ }
568
+
569
+ .nd-backstage-view {
570
+ display: flex;
571
+ flex-direction: column;
572
+ gap: 12px;
573
+ }
574
+
575
+ .nd-bs-view {
576
+ display: flex;
577
+ align-items: flex-start;
578
+ justify-content: flex-start;
579
+ }
580
+
581
+ .nd-bs-view-card {
582
+ width: min(820px, 100%);
583
+ border: 1px solid var(--nd-border);
584
+ background: var(--nd-surface);
585
+ border-radius: 12px;
586
+ padding: 16px;
587
+ box-shadow: var(--shadow-sm);
588
+ }
589
+
590
+ .nd-bs-view-title {
591
+ font-size: 14px;
592
+ font-weight: 900;
593
+ color: var(--nd-text);
594
+ }
595
+
596
+ .nd-bs-view-desc {
597
+ font-size: 12px;
598
+ color: var(--nd-text-secondary);
599
+ margin-top: 4px;
600
+ }
601
+
602
+ .nd-bs-view-actions {
603
+ display: flex;
604
+ flex-wrap: wrap;
605
+ gap: 8px;
606
+ margin-top: 12px;
607
+ }
608
+
609
+ .nd-bs-primary,
610
+ .nd-bs-secondary {
611
+ height: 34px;
612
+ padding: 0 12px;
613
+ border-radius: 10px;
614
+ border: 1px solid #d1d5db;
615
+ background: #ffffff;
616
+ color: #0f172a;
617
+ cursor: pointer;
618
+ display: inline-flex;
619
+ align-items: center;
620
+ gap: 8px;
621
+ transition: all var(--transition);
622
+ }
623
+
624
+ .nd-bs-primary {
625
+ background: var(--nd-primary);
626
+ border-color: var(--nd-primary-dark);
627
+ color: #ffffff;
628
+ }
629
+
630
+ .nd-bs-primary:hover:not(:disabled) {
631
+ background: var(--nd-primary-dark);
632
+ }
633
+
634
+ .nd-bs-secondary:hover:not(:disabled) {
635
+ background: #f3f4f6;
636
+ }
637
+
638
+ .nd-bs-primary:disabled,
639
+ .nd-bs-secondary:disabled {
640
+ opacity: 0.55;
641
+ cursor: not-allowed;
642
+ }
643
+
644
+ .nd-bs-form {
645
+ margin-top: 12px;
646
+ display: grid;
647
+ grid-template-columns: 1fr;
648
+ gap: 8px;
649
+ }
650
+
651
+ .nd-bs-label {
652
+ font-size: 11px;
653
+ font-weight: 700;
654
+ color: var(--nd-text-secondary);
655
+ }
656
+
657
+ .nd-bs-input {
658
+ height: 34px;
659
+ border-radius: 10px;
660
+ border: 1px solid var(--nd-border);
661
+ padding: 0 10px;
662
+ outline: none;
663
+ font-size: 12px;
664
+ background: #ffffff;
665
+ transition: border-color var(--transition), box-shadow var(--transition);
666
+ }
667
+
668
+ .nd-bs-input:focus {
669
+ border-color: var(--nd-primary);
670
+ box-shadow: 0 0 0 2px rgba(37, 99, 235, 0.15);
671
+ }
672
+
673
+ .nd-bs-meta {
674
+ margin-top: 12px;
675
+ border: 1px solid var(--nd-border);
676
+ border-radius: 12px;
677
+ overflow: hidden;
678
+ }
679
+
680
+ .nd-bs-meta-row {
681
+ display: flex;
682
+ justify-content: space-between;
683
+ gap: 12px;
684
+ padding: 10px 12px;
685
+ font-size: 12px;
686
+ color: var(--nd-text);
687
+ background: #ffffff;
688
+ }
689
+
690
+ .nd-bs-meta-row + .nd-bs-meta-row {
691
+ border-top: 1px solid var(--nd-border);
692
+ }
693
+
694
+ .nd-bs-meta-row span:first-child {
695
+ color: var(--nd-text-secondary);
696
+ font-weight: 700;
697
+ }
698
+
699
+ .nd-bs-meta-row span:last-child {
700
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
701
+ }
702
+
703
+ .nd-bs-callout {
704
+ margin-top: 12px;
705
+ border: 1px solid var(--nd-border);
706
+ border-radius: 12px;
707
+ background: #f8fafc;
708
+ padding: 12px;
709
+ }
710
+
711
+ .nd-bs-callout-title {
712
+ font-size: 12px;
713
+ font-weight: 900;
714
+ color: var(--nd-text);
715
+ }
716
+
717
+ .nd-bs-callout-desc {
718
+ font-size: 12px;
719
+ color: var(--nd-text-secondary);
720
+ margin-top: 4px;
721
+ }
722
+
723
+ .nd-bs-open {
724
+ margin-top: 12px;
725
+ }
726
+
727
+ .nd-bs-open-top {
728
+ display: flex;
729
+ justify-content: flex-end;
730
+ margin-bottom: 10px;
731
+ }
732
+
733
+ .nd-bs-open-list {
734
+ position: relative;
735
+ }
736
+
737
+ .nd-bs-open-item {
738
+ display: flex;
739
+ flex-direction: column;
740
+ gap: 2px;
741
+ padding: 4px 0;
742
+ }
743
+
744
+ .nd-bs-open-name {
745
+ display: flex;
746
+ align-items: center;
747
+ gap: 8px;
748
+ font-size: 12px;
749
+ font-weight: 700;
750
+ color: var(--nd-text);
751
+ }
752
+
753
+ .nd-bs-pin {
754
+ width: 24px;
755
+ height: 22px;
756
+ border-radius: 8px;
757
+ border: 1px solid var(--nd-border);
758
+ background: #ffffff;
759
+ color: var(--nd-text-muted);
760
+ cursor: pointer;
761
+ display: inline-flex;
762
+ align-items: center;
763
+ justify-content: center;
764
+ transition: all var(--transition);
765
+ flex-shrink: 0;
766
+ }
767
+
768
+ .nd-bs-pin:hover {
769
+ background: #f8fafc;
770
+ color: var(--nd-text);
771
+ }
772
+
773
+ .nd-bs-recents {
774
+ margin-bottom: 12px;
775
+ display: grid;
776
+ grid-template-columns: 1fr 1fr;
777
+ gap: 10px;
778
+ }
779
+
780
+ .nd-bs-recents-block {
781
+ border: 1px solid var(--nd-border);
782
+ border-radius: 12px;
783
+ background: #ffffff;
784
+ overflow: hidden;
785
+ }
786
+
787
+ .nd-bs-recents-title {
788
+ padding: 8px 10px;
789
+ font-size: 11px;
790
+ font-weight: 900;
791
+ letter-spacing: 0.06em;
792
+ text-transform: uppercase;
793
+ background: #f8fafc;
794
+ border-bottom: 1px solid var(--nd-border);
795
+ color: var(--nd-text-secondary);
796
+ }
797
+
798
+ .nd-bs-recents-list {
799
+ display: flex;
800
+ flex-direction: column;
801
+ }
802
+
803
+ .nd-bs-recents-item {
804
+ display: flex;
805
+ justify-content: space-between;
806
+ gap: 10px;
807
+ padding: 8px 10px;
808
+ border: none;
809
+ background: transparent;
810
+ cursor: pointer;
811
+ text-align: left;
812
+ transition: background var(--transition);
813
+ }
814
+
815
+ .nd-bs-recents-item:hover {
816
+ background: var(--nd-primary-ghost);
817
+ }
818
+
819
+ .nd-bs-recents-name {
820
+ font-size: 12px;
821
+ font-weight: 700;
822
+ color: var(--nd-text);
823
+ overflow: hidden;
824
+ text-overflow: ellipsis;
825
+ white-space: nowrap;
826
+ }
827
+
828
+ .nd-bs-recents-meta {
829
+ font-size: 11px;
830
+ color: var(--nd-text-muted);
831
+ flex-shrink: 0;
832
+ }
833
+
834
+ .nd-bs-open-meta {
835
+ font-size: 11px;
836
+ color: var(--nd-text-muted);
837
+ }
838
+
839
+ .nd-bs-empty {
840
+ padding: 10px 4px 0;
841
+ font-size: 12px;
842
+ color: var(--nd-text-muted);
843
+ }
844
+ .nd-bs-card {
845
+ text-align: left;
846
+ border: 1px solid var(--nd-border);
847
+ background: var(--nd-surface);
848
+ border-radius: 12px;
849
+ padding: 14px 14px 12px;
850
+ cursor: pointer;
851
+ transition: all var(--transition);
852
+ box-shadow: var(--shadow-sm);
853
+ }
854
+
855
+ .nd-bs-card:hover:not(:disabled) {
856
+ border-color: var(--nd-primary-light);
857
+ box-shadow: var(--shadow);
858
+ transform: translateY(-1px);
859
+ }
860
+
861
+ .nd-bs-card:disabled {
862
+ opacity: 0.55;
863
+ cursor: not-allowed;
864
+ transform: none;
865
+ }
866
+
867
+ .nd-bs-card-ico {
868
+ width: 34px;
869
+ height: 34px;
870
+ border-radius: 10px;
871
+ background: var(--nd-primary-ghost);
872
+ border: 1px solid var(--nd-primary-light);
873
+ color: var(--nd-primary);
874
+ display: flex;
875
+ align-items: center;
876
+ justify-content: center;
877
+ margin-bottom: 10px;
878
+ }
879
+
880
+ .nd-bs-card-ico i { font-size: 16px; }
881
+
882
+ .nd-bs-card-title {
883
+ font-size: 13px;
884
+ font-weight: 800;
885
+ color: var(--nd-text);
886
+ }
887
+
888
+ .nd-bs-card-desc {
889
+ font-size: 12px;
890
+ color: var(--nd-text-secondary);
891
+ margin-top: 2px;
892
+ }
893
+
894
+ .nd-backstage-meta {
895
+ margin-top: 16px;
896
+ border: 1px solid var(--nd-border);
897
+ border-radius: 12px;
898
+ overflow: hidden;
899
+ background: var(--nd-surface);
900
+ }
901
+
902
+ .nd-backstage-meta-row {
903
+ display: flex;
904
+ justify-content: space-between;
905
+ gap: 12px;
906
+ padding: 10px 12px;
907
+ font-size: 12px;
908
+ color: var(--nd-text);
909
+ }
910
+
911
+ .nd-backstage-meta-row + .nd-backstage-meta-row {
912
+ border-top: 1px solid var(--nd-border);
913
+ }
914
+
915
+ .nd-backstage-meta-row span:first-child {
916
+ color: var(--nd-text-secondary);
917
+ font-weight: 700;
918
+ }
919
+
920
+ .nd-backstage-meta-row span:last-child {
921
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
922
+ }
923
+
924
+ .nd-sidebar {
925
+ background: var(--nd-surface);
926
+ border-left: 1px solid var(--nd-border);
927
+ display: flex;
928
+ flex-direction: column;
929
+ box-shadow: -2px 0 8px rgba(0, 0, 0, 0.04);
930
+ }
931
+
932
+ .nd-sidebar-panels {
933
+ flex: 1;
934
+ overflow-y: auto;
935
+ overflow-x: hidden;
936
+ }
937
+
938
+ .nd-sidebar-panels::-webkit-scrollbar { width: 6px; }
939
+ .nd-sidebar-panels::-webkit-scrollbar-thumb { background: var(--nd-border-strong); border-radius: 4px; }
940
+
941
+ .nd-panel-title {
942
+ padding: 10px 14px;
943
+ background: var(--nd-background);
944
+ font-weight: 700;
945
+ font-size: 11px;
946
+ color: var(--nd-text);
947
+ border-bottom: 1px solid var(--nd-border);
948
+ text-transform: uppercase;
949
+ letter-spacing: 0.04em;
950
+ position: sticky;
951
+ top: 0;
952
+ z-index: 10;
953
+ }
954
+
955
+ .nd-panel-subtitle {
956
+ font-size: 10px;
957
+ font-weight: 700;
958
+ text-transform: uppercase;
959
+ color: var(--nd-text-muted);
960
+ margin: 14px 0 6px;
961
+ padding: 0 12px;
962
+ letter-spacing: 0.04em;
963
+ }
964
+
965
+ .nd-sidebar-tabs {
966
+ height: 36px;
967
+ display: flex;
968
+ background: var(--nd-surface);
969
+ border-top: 1px solid var(--nd-border);
970
+ flex-shrink: 0;
971
+ }
972
+
973
+ .nd-side-tab {
974
+ flex: 1;
975
+ display: flex;
976
+ align-items: center;
977
+ justify-content: center;
978
+ gap: 5px;
979
+ font-size: 11px;
980
+ font-weight: 500;
981
+ cursor: pointer;
982
+ border-right: 1px solid var(--nd-border);
983
+ color: var(--nd-text-muted);
984
+ transition: all var(--transition);
985
+ background: transparent;
986
+ }
987
+
988
+ .nd-side-tab:last-child { border-right: none; }
989
+ .nd-side-tab:hover { color: var(--nd-text); background: var(--nd-primary-ghost); }
990
+
991
+ .nd-side-tab.active {
992
+ color: var(--nd-primary);
993
+ background: var(--nd-primary-light);
994
+ font-weight: 600;
995
+ }
996
+
997
+ .nd-side-tab i { font-size: 13px; }
998
+
999
+ .nd-coll-group { margin: 2px 6px; }
1000
+
1001
+ .nd-coll-header {
1002
+ display: flex;
1003
+ align-items: center;
1004
+ gap: 8px;
1005
+ padding: 7px 10px;
1006
+ cursor: pointer;
1007
+ background: transparent;
1008
+ border-radius: var(--radius-sm);
1009
+ font-size: 12px;
1010
+ font-weight: 500;
1011
+ color: var(--nd-text);
1012
+ transition: all var(--transition);
1013
+ }
1014
+
1015
+ .nd-coll-header:hover { background: var(--nd-primary-ghost); color: var(--nd-primary); }
1016
+ .nd-coll-header i { font-size: 11px; color: var(--nd-text-muted); }
1017
+ .nd-coll-header:hover i { color: var(--nd-primary); }
1018
+
1019
+ .nd-field-list { padding: 2px 0 4px 26px; }
1020
+
1021
+ .nd-field-item {
1022
+ display: flex;
1023
+ align-items: center;
1024
+ gap: 8px;
1025
+ padding: 5px 8px;
1026
+ font-size: 12px;
1027
+ color: var(--nd-text-secondary);
1028
+ cursor: grab;
1029
+ border-radius: var(--radius-sm);
1030
+ transition: all var(--transition);
1031
+ border: 1px solid transparent;
1032
+ }
1033
+
1034
+ .nd-field-item:hover {
1035
+ background: var(--nd-primary-light);
1036
+ color: var(--nd-primary);
1037
+ border-color: var(--nd-primary-light);
1038
+ }
1039
+
1040
+ .nd-field-item:active { cursor: grabbing; }
1041
+ .nd-field-item i { font-size: 10px; color: var(--nd-text-muted); }
1042
+
1043
+ .nd-item {
1044
+ padding: 9px 14px;
1045
+ font-size: 12px;
1046
+ cursor: pointer;
1047
+ display: flex;
1048
+ align-items: center;
1049
+ gap: 10px;
1050
+ color: var(--nd-text-secondary);
1051
+ border-radius: var(--radius-sm);
1052
+ margin: 1px 6px;
1053
+ transition: all var(--transition);
1054
+ }
1055
+
1056
+ .nd-item:hover { background: var(--nd-primary-ghost); color: var(--nd-primary); }
1057
+ .nd-item i { font-size: 13px; color: var(--nd-text-muted); }
1058
+
1059
+ .nd-props { padding: 4px 0; }
1060
+
1061
+ .nd-props-context {
1062
+ display: flex;
1063
+ align-items: center;
1064
+ justify-content: space-between;
1065
+ gap: 10px;
1066
+ padding: 10px 12px;
1067
+ border-bottom: 1px solid var(--nd-border);
1068
+ background: var(--nd-surface);
1069
+ }
1070
+
1071
+ .nd-props-context-title {
1072
+ font-size: 12px;
1073
+ font-weight: 700;
1074
+ color: var(--nd-text);
1075
+ line-height: 1.1;
1076
+ }
1077
+
1078
+ .nd-props-context-sub {
1079
+ font-size: 10px;
1080
+ color: var(--nd-text-muted);
1081
+ line-height: 1.1;
1082
+ margin-top: 2px;
1083
+ }
1084
+
1085
+ .nd-props-context-actions {
1086
+ display: flex;
1087
+ align-items: center;
1088
+ gap: 4px;
1089
+ }
1090
+
1091
+ .nd-props-section {
1092
+ margin: 10px 10px 0;
1093
+ border: 1px solid var(--nd-border);
1094
+ border-radius: var(--radius);
1095
+ overflow: hidden;
1096
+ background: var(--nd-surface);
1097
+ }
1098
+
1099
+ .nd-props-section-head {
1100
+ display: flex;
1101
+ align-items: center;
1102
+ gap: 8px;
1103
+ padding: 8px 10px;
1104
+ cursor: pointer;
1105
+ user-select: none;
1106
+ background: #f8fafc;
1107
+ color: var(--nd-text);
1108
+ font-size: 11px;
1109
+ font-weight: 700;
1110
+ text-transform: uppercase;
1111
+ letter-spacing: 0.04em;
1112
+ }
1113
+
1114
+ .nd-props-section-head:hover {
1115
+ background: var(--nd-primary-ghost);
1116
+ color: var(--nd-primary);
1117
+ }
1118
+
1119
+ .nd-props-section-body {
1120
+ padding: 10px 10px 2px;
1121
+ }
1122
+
1123
+ .nd-about-body {
1124
+ padding: 4px 2px 2px;
1125
+ }
1126
+
1127
+ .nd-about-hero {
1128
+ display: flex;
1129
+ align-items: center;
1130
+ gap: 12px;
1131
+ padding: 10px 12px 8px;
1132
+ border: 1px solid var(--nd-border);
1133
+ border-radius: 12px;
1134
+ background: #f8fafc;
1135
+ }
1136
+
1137
+ .nd-about-logo {
1138
+ width: 48px;
1139
+ height: 48px;
1140
+ border-radius: 12px;
1141
+ background: #ffffff;
1142
+ border: 1px solid var(--nd-border);
1143
+ display: flex;
1144
+ align-items: center;
1145
+ justify-content: center;
1146
+ flex-shrink: 0;
1147
+ }
1148
+
1149
+ .nd-about-logo-img {
1150
+ width: 100%;
1151
+ height: 100%;
1152
+ object-fit: contain;
1153
+ }
1154
+
1155
+ .nd-about-title {
1156
+ font-size: 14px;
1157
+ font-weight: 900;
1158
+ color: var(--nd-text);
1159
+ line-height: 1.2;
1160
+ }
1161
+
1162
+ .nd-about-sub {
1163
+ font-size: 12px;
1164
+ color: var(--nd-text-secondary);
1165
+ margin-top: 2px;
1166
+ }
1167
+
1168
+ .nd-about-kv {
1169
+ margin-top: 12px;
1170
+ border: 1px solid var(--nd-border);
1171
+ border-radius: 12px;
1172
+ overflow: hidden;
1173
+ }
1174
+
1175
+ .nd-about-row {
1176
+ display: flex;
1177
+ justify-content: space-between;
1178
+ gap: 12px;
1179
+ padding: 10px 12px;
1180
+ font-size: 12px;
1181
+ color: var(--nd-text);
1182
+ background: #ffffff;
1183
+ }
1184
+
1185
+ .nd-about-row + .nd-about-row {
1186
+ border-top: 1px solid var(--nd-border);
1187
+ }
1188
+
1189
+ .nd-about-row span:first-child {
1190
+ color: var(--nd-text-secondary);
1191
+ font-weight: 600;
1192
+ }
1193
+
1194
+ .nd-about-row span:last-child {
1195
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
1196
+ color: var(--nd-text);
1197
+ }
1198
+
1199
+ .nd-about-footer {
1200
+ display: flex;
1201
+ justify-content: flex-end;
1202
+ padding: 2px 0;
1203
+ }
1204
+
1205
+ /* ─── MANUAL FIELDS ─────────────────────────────────────────────────── */
1206
+ .nd-manual-field {
1207
+ position: relative;
1208
+ background: linear-gradient(135deg, #f5f3ff 0%, #ede9fe 100%);
1209
+ border-color: #c4b5fd;
1210
+ }
1211
+
1212
+ .nd-manual-field:hover {
1213
+ background: linear-gradient(135deg, #ede9fe 0%, #ddd6fe 100%);
1214
+ border-color: #8b5cf6;
1215
+ }
1216
+
1217
+ .nd-manual-badge {
1218
+ font-size: 9px;
1219
+ padding: 1px 5px;
1220
+ background: #8b5cf6;
1221
+ color: white;
1222
+ border-radius: 3px;
1223
+ margin-left: auto;
1224
+ font-weight: 500;
1225
+ }
1226
+
1227
+ .nd-field-delete {
1228
+ opacity: 0;
1229
+ transition: opacity 0.15s;
1230
+ }
1231
+
1232
+ .nd-field-item:hover .nd-field-delete {
1233
+ opacity: 1;
1234
+ }
1235
+
1236
+ .nd-empty-state {
1237
+ padding: 12px;
1238
+ text-align: center;
1239
+ color: var(--nd-text-muted);
1240
+ font-style: italic;
1241
+ }
1242
+
1243
+ /* ─── MANUAL FIELDS LIST IN TAB DATOS ──────────────────────────────── */
1244
+ .nd-manual-fields-list {
1245
+ display: flex;
1246
+ flex-direction: column;
1247
+ gap: 4px;
1248
+ margin-top: 6px;
1249
+ }
1250
+
1251
+ .nd-manual-field-item {
1252
+ display: flex;
1253
+ align-items: center;
1254
+ gap: 6px;
1255
+ padding: 5px 8px;
1256
+ background: #f9fafb;
1257
+ border: 1px solid #e5e7eb;
1258
+ border-radius: 4px;
1259
+ font-size: 11px;
1260
+ }
1261
+
1262
+ .nd-manual-field-info {
1263
+ flex: 1;
1264
+ display: flex;
1265
+ flex-direction: column;
1266
+ gap: 1px;
1267
+ }
1268
+
1269
+ .nd-manual-field-name {
1270
+ font-weight: 500;
1271
+ color: var(--nd-text-primary);
1272
+ }
1273
+
1274
+ .nd-manual-field-type {
1275
+ color: var(--nd-text-muted);
1276
+ font-size: 9px;
1277
+ }
1278
+
1279
+ /* ─── DATA SOURCE RELATIONS ─────────────────────────────────────────── */
1280
+ .nd-relations-list {
1281
+ display: flex;
1282
+ flex-direction: column;
1283
+ gap: 4px;
1284
+ margin-top: 6px;
1285
+ }
1286
+
1287
+ .nd-relation-item {
1288
+ display: flex;
1289
+ align-items: center;
1290
+ gap: 6px;
1291
+ padding: 5px 8px;
1292
+ background: #fffbeb;
1293
+ border: 1px solid #fde68a;
1294
+ border-radius: 4px;
1295
+ font-size: 11px;
1296
+ }
1297
+
1298
+ .nd-relation-info {
1299
+ flex: 1;
1300
+ display: flex;
1301
+ flex-direction: column;
1302
+ gap: 1px;
1303
+ }
1304
+
1305
+ .nd-relation-label {
1306
+ font-weight: 500;
1307
+ color: var(--nd-text-primary);
1308
+ }
1309
+
1310
+ .nd-relation-detail {
1311
+ color: var(--nd-text-muted);
1312
+ font-size: 9px;
1313
+ font-family: monospace;
1314
+ }
1315
+
1316
+ /* ─── DATA SOURCE PREVIEW ──────────────────────────────────────────── */
1317
+ .nd-ds-preview {
1318
+ margin-top: 6px;
1319
+ padding-top: 6px;
1320
+ border-top: 1px dashed #e5e7eb;
1321
+ }
1322
+
1323
+ .nd-preview-table {
1324
+ margin-top: 6px;
1325
+ overflow-x: auto;
1326
+ }
1327
+
1328
+ .nd-preview-table-inner {
1329
+ width: 100%;
1330
+ font-size: 9px;
1331
+ border-collapse: collapse;
1332
+ }
1333
+
1334
+ .nd-preview-table-inner th,
1335
+ .nd-preview-table-inner td {
1336
+ padding: 3px 5px;
1337
+ border: 1px solid #e5e7eb;
1338
+ text-align: left;
1339
+ white-space: nowrap;
1340
+ overflow: hidden;
1341
+ text-overflow: ellipsis;
1342
+ }
1343
+
1344
+ .nd-preview-table-inner th {
1345
+ background: #f3f4f6;
1346
+ font-weight: 600;
1347
+ color: var(--nd-text-primary);
1348
+ }
1349
+
1350
+ .nd-preview-table-inner td {
1351
+ color: var(--nd-text-secondary);
1352
+ }
1353
+
1354
+ .nd-preview-count {
1355
+ display: block;
1356
+ margin-top: 3px;
1357
+ font-size: 8px;
1358
+ color: var(--nd-text-muted);
1359
+ text-align: center;
1360
+ }
1361
+
1362
+ /* Tabla de preview completa en diálogo modal */
1363
+ .nd-preview-table-full {
1364
+ width: 100% !important;
1365
+ border-collapse: collapse;
1366
+ font-size: 12px;
1367
+ }
1368
+
1369
+ .nd-preview-table-full th,
1370
+ .nd-preview-table-full td {
1371
+ padding: 6px 10px;
1372
+ border: 1px solid #e5e7eb;
1373
+ text-align: left;
1374
+ white-space: nowrap;
1375
+ overflow: hidden;
1376
+ text-overflow: ellipsis;
1377
+ max-width: 200px;
1378
+ }
1379
+
1380
+ .nd-preview-table-full th {
1381
+ background: #f3f4f6;
1382
+ font-weight: 600;
1383
+ color: var(--nd-text-primary);
1384
+ position: sticky;
1385
+ top: 0;
1386
+ z-index: 1;
1387
+ }
1388
+
1389
+ .nd-preview-table-full td {
1390
+ color: var(--nd-text-secondary);
1391
+ }
1392
+
1393
+ .nd-preview-table-full tbody tr:nth-child(even) {
1394
+ background: #fafafa;
1395
+ }
1396
+
1397
+ .nd-preview-table-full tbody tr:hover {
1398
+ background: #f0f7ff;
1399
+ }
1400
+
1401
+ /* ─── DRILLDOWN EDITOR ─────────────────────────────────────────────── */
1402
+ .nd-param-mapping {
1403
+ display: grid;
1404
+ grid-template-columns: 1fr 1fr auto;
1405
+ gap: 8px;
1406
+ align-items: end;
1407
+ padding: 8px;
1408
+ background: #f9fafb;
1409
+ border: 1px solid #e5e7eb;
1410
+ border-radius: 6px;
1411
+ margin-bottom: 8px;
1412
+ }
1413
+
1414
+ .nd-color-picker {
1415
+ width: 32px;
1416
+ height: 28px;
1417
+ border: 1px solid #d1d5db;
1418
+ border-radius: 4px;
1419
+ cursor: pointer;
1420
+ padding: 0;
1421
+ }
1422
+
1423
+ .nd-field {
1424
+ padding: 6px 12px;
1425
+ display: flex;
1426
+ flex-direction: column;
1427
+ gap: 4px;
1428
+ box-sizing: border-box;
1429
+ }
1430
+
1431
+ .nd-field label {
1432
+ font-size: 10px;
1433
+ font-weight: 600;
1434
+ color: var(--nd-text-muted);
1435
+ text-transform: uppercase;
1436
+ letter-spacing: 0.04em;
1437
+ }
1438
+
1439
+ .nd-field .p-inputtext,
1440
+ .nd-field .p-inputtextarea,
1441
+ .nd-field .p-dropdown {
1442
+ width: 100%;
1443
+ box-sizing: border-box;
1444
+ display: flex;
1445
+ align-items: center;
1446
+ height: 30px;
1447
+ padding-top: 0;
1448
+ padding-bottom: 0;
1449
+ }
1450
+
1451
+ .nd-field textarea {
1452
+ width: 100%;
1453
+ box-sizing: border-box;
1454
+ height: 30px;
1455
+ padding-top: 4px;
1456
+ padding-bottom: 4px;
1457
+ }
1458
+
1459
+ .nd-field .p-dropdown .p-dropdown-label {
1460
+ padding: 4px 8px;
1461
+ display: flex;
1462
+ align-items: center;
1463
+ }
1464
+
1465
+ .nd-field .p-dropdown .p-dropdown-trigger {
1466
+ height: 30px;
1467
+ display: flex;
1468
+ align-items: center;
1469
+ }
1470
+
1471
+ .nd-field-row { display: flex; gap: 8px; padding: 4px 12px; }
1472
+
1473
+ .nd-val-badge {
1474
+ display: inline-block;
1475
+ padding: 2px 8px;
1476
+ background: var(--nd-primary-light);
1477
+ color: var(--nd-primary);
1478
+ border-radius: var(--radius-sm);
1479
+ font-size: 11px;
1480
+ font-weight: 600;
1481
+ }
1482
+
1483
+ .nd-empty { padding: 30px 20px; text-align: center; color: var(--nd-text-muted); font-size: 12px; }
1484
+ .nd-help-text { padding: 10px 12px; font-size: 11px; color: var(--nd-text-muted); line-height: 1.5; }
1485
+
1486
+ .nd-connection-indicator {
1487
+ display: flex;
1488
+ align-items: center;
1489
+ gap: 8px;
1490
+ padding: 10px 12px;
1491
+ margin: 8px;
1492
+ background: #ecfdf5;
1493
+ border-radius: var(--radius);
1494
+ font-size: 11px;
1495
+ color: var(--nd-success);
1496
+ border: 1px solid #a7f3d0;
1497
+ }
1498
+
1499
+ .nd-connection-indicator i { font-size: 14px; }
1500
+
1501
+ .nd-table-editor { padding: 0 12px; }
1502
+
1503
+ .nd-col-edit-card {
1504
+ background: var(--nd-background);
1505
+ border: 1px solid var(--nd-border);
1506
+ border-radius: var(--radius);
1507
+ padding: 10px;
1508
+ margin-bottom: 8px;
1509
+ transition: border-color var(--transition);
1510
+ }
1511
+
1512
+ .nd-col-edit-card:hover { border-color: var(--nd-border-strong); }
1513
+
1514
+ .nd-col-header {
1515
+ display: flex;
1516
+ justify-content: space-between;
1517
+ align-items: center;
1518
+ margin-bottom: 8px;
1519
+ font-weight: 600;
1520
+ font-size: 11px;
1521
+ color: var(--nd-primary);
1522
+ }
1523
+
1524
+ .nd-actions { border-top: 1px solid var(--nd-border); padding-top: 12px; margin-top: 8px; }
1525
+
1526
+ .nd-textarea { resize: none; font-size: 12px; line-height: 1.5; width: 100%; box-sizing: border-box; display: block; }
1527
+
1528
+ .nd-workspace {
1529
+ flex: 1;
1530
+ display: grid;
1531
+ grid-template-columns: 30px 1fr;
1532
+ grid-template-rows: 28px 1fr;
1533
+ background: var(--nd-background-canvas);
1534
+ position: relative;
1535
+ overflow: hidden;
1536
+ }
1537
+
1538
+ .nd-corner {
1539
+ grid-area: 1 / 1;
1540
+ background: var(--nd-surface);
1541
+ border-right: 1px solid var(--nd-border);
1542
+ border-bottom: 1px solid var(--nd-border);
1543
+ z-index: 60;
1544
+ }
1545
+
1546
+ .nd-ruler-h {
1547
+ grid-area: 1 / 2;
1548
+ height: 28px;
1549
+ background: var(--nd-surface);
1550
+ border-bottom: 1px solid var(--nd-border);
1551
+ position: relative;
1552
+ z-index: 50;
1553
+ overflow: hidden;
1554
+ }
1555
+
1556
+ .nd-ruler-h-inner {
1557
+ width: 794px; /* A4 width — matches paper */
1558
+ height: 100%;
1559
+ position: relative;
1560
+ margin: 0 auto;
1561
+ }
1562
+
1563
+ .nd-ruler-v {
1564
+ grid-area: 2 / 1;
1565
+ width: 34px;
1566
+ background: var(--nd-surface);
1567
+ border-right: 1px solid var(--nd-border);
1568
+ position: relative;
1569
+ z-index: 50;
1570
+ overflow: visible;
1571
+ }
1572
+
1573
+ .nd-ruler-v-inner { width: 100%; height: 100%; position: relative; }
1574
+
1575
+ .nd-tick-h {
1576
+ position: absolute;
1577
+ top: 0;
1578
+ height: 100%;
1579
+ width: 1px;
1580
+ border-left: 1px solid var(--nd-border);
1581
+ font-size: 9px;
1582
+ color: var(--nd-text-muted);
1583
+ font-weight: 500;
1584
+ text-align: center;
1585
+ padding-top: 14px;
1586
+ padding-left: 0;
1587
+ transform: translateX(-50%);
1588
+ }
1589
+
1590
+ .nd-tick-v {
1591
+ position: absolute;
1592
+ left: 0;
1593
+ width: 100%;
1594
+ height: 1px;
1595
+ border-top: 1px solid var(--nd-border);
1596
+ }
1597
+
1598
+ .nd-v-lbl {
1599
+ font-size: 9px;
1600
+ color: var(--nd-text-muted);
1601
+ font-weight: 500;
1602
+ position: absolute;
1603
+ left: 6px;
1604
+ top: -5px;
1605
+ white-space: nowrap;
1606
+ transform: rotate(-90deg);
1607
+ transform-origin: 0 0;
1608
+ }
1609
+
1610
+ .nd-scroller {
1611
+ grid-area: 2 / 2;
1612
+ overflow: auto;
1613
+ padding: 50px;
1614
+ display: flex;
1615
+ justify-content: center;
1616
+ --nd-scale: 1;
1617
+ }
1618
+
1619
+ .nd-scroller::-webkit-scrollbar { width: 10px; height: 10px; }
1620
+ .nd-scroller::-webkit-scrollbar-track { background: var(--nd-background); }
1621
+ .nd-scroller::-webkit-scrollbar-thumb {
1622
+ background: var(--nd-border-strong);
1623
+ border-radius: 6px;
1624
+ border: 2px solid var(--nd-background);
1625
+ }
1626
+ .nd-scroller::-webkit-scrollbar-thumb:hover { background: var(--nd-text-muted); }
1627
+
1628
+ .nd-page-wrapper { display: flex; justify-content: center; padding-bottom: 100px; }
1629
+
1630
+ .nd-page {
1631
+ background: #fff;
1632
+ position: relative;
1633
+ box-shadow: var(--shadow-xl);
1634
+ transform: scale(var(--nd-scale));
1635
+ transform-origin: top center;
1636
+ transition: transform 0.2s ease;
1637
+ flex-shrink: 0;
1638
+ }
1639
+
1640
+ .nd-page-content {
1641
+ position: absolute;
1642
+ inset: 0;
1643
+ box-sizing: border-box;
1644
+ z-index: 5;
1645
+ }
1646
+
1647
+ .nd-page.a4.portrait { width: 794px; min-height: 1123px; }
1648
+ .nd-page.a4.landscape { width: 1123px; min-height: 794px; }
1649
+ .nd-page.letter.portrait { width: 816px; min-height: 1056px; }
1650
+ .nd-page.letter.landscape { width: 1056px; min-height: 816px; }
1651
+ .nd-page.ticket.portrait { width: 302px; min-height: 800px; }
1652
+
1653
+ .nd-paper-grid {
1654
+ position: absolute;
1655
+ inset: 0;
1656
+ background-image:
1657
+ linear-gradient(rgba(0, 0, 0, 0.03) 1px, transparent 1px),
1658
+ linear-gradient(90deg, rgba(0, 0, 0, 0.03) 1px, transparent 1px);
1659
+ background-size: 37.8px 37.8px;
1660
+ pointer-events: none;
1661
+ z-index: 1;
1662
+ }
1663
+
1664
+ .nd-margin-guides { position: absolute; inset: 0; pointer-events: none; z-index: 2; }
1665
+
1666
+ .nd-guide-v,
1667
+ .nd-guide-h {
1668
+ position: absolute;
1669
+ background: rgba(239, 68, 68, 0.25);
1670
+ border: 1px dashed rgba(239, 68, 68, 0.5);
1671
+ }
1672
+
1673
+ .nd-guide-v { top: 0; bottom: 0; width: 1px; }
1674
+ .nd-guide-h { left: 0; right: 0; height: 1px; }
1675
+
1676
+ .nd-paper-bands { position: relative; z-index: 10; min-height: 100%; }
1677
+
1678
+ /* Watermark en diseñador */
1679
+ .nd-watermark-layer {
1680
+ position: absolute;
1681
+ top: 0;
1682
+ left: 0;
1683
+ right: 0;
1684
+ bottom: 0;
1685
+ display: flex;
1686
+ align-items: center;
1687
+ justify-content: center;
1688
+ overflow: hidden;
1689
+ pointer-events: none;
1690
+ z-index: 0;
1691
+ }
1692
+
1693
+ .nd-watermark-single {
1694
+ position: absolute;
1695
+ }
1696
+
1697
+ .nd-watermark-text {
1698
+ display: block;
1699
+ font-family: Arial, sans-serif;
1700
+ font-weight: 900;
1701
+ letter-spacing: 4px;
1702
+ user-select: none;
1703
+ text-transform: uppercase;
1704
+ text-shadow: 0 0 10px rgba(0, 0, 0, 0.05);
1705
+ white-space: nowrap;
1706
+ }
1707
+
1708
+ .nd-band {
1709
+ position: relative;
1710
+ border-bottom: 1px dashed var(--nd-border);
1711
+ transition: background var(--transition);
1712
+ min-height: 20px;
1713
+ z-index: 1;
1714
+ }
1715
+
1716
+ .nd-band:hover { background: rgba(37, 99, 235, 0.02); }
1717
+ .nd-band.selected { background: rgba(37, 99, 235, 0.05); box-shadow: inset 0 0 0 1px rgba(37, 99, 235, 0.3); }
1718
+
1719
+ .nd-band-tag {
1720
+ position: absolute;
1721
+ left: calc(-96px - var(--nd-margin-left-px, 0px));
1722
+ top: 3px;
1723
+ width: 90px;
1724
+ background: var(--nd-surface);
1725
+ color: var(--nd-text-secondary);
1726
+ font-size: 10px;
1727
+ font-weight: 700;
1728
+ padding: 3px 8px;
1729
+ text-align: right;
1730
+ border: 1px solid var(--nd-border);
1731
+ border-right: none;
1732
+ border-radius: var(--radius-sm) 0 0 var(--radius-sm);
1733
+ cursor: pointer;
1734
+ transition: all var(--transition);
1735
+ white-space: nowrap;
1736
+ overflow: hidden;
1737
+ text-overflow: ellipsis;
1738
+ display: flex;
1739
+ align-items: center;
1740
+ justify-content: flex-end;
1741
+ gap: 4px;
1742
+ z-index: 20;
1743
+ }
1744
+
1745
+ .nd-band-tag:hover {
1746
+ color: var(--nd-primary);
1747
+ background: var(--nd-primary-light);
1748
+ border-color: var(--nd-primary-light);
1749
+ }
1750
+ .nd-band-tag.selected {
1751
+ color: var(--nd-primary);
1752
+ background: var(--nd-primary-light);
1753
+ border-color: var(--nd-primary);
1754
+ }
1755
+
1756
+ .nd-band-source { color: var(--nd-text-muted); font-weight: 400; font-size: 9px; }
1757
+ .nd-band-content { position: relative; margin-left: 0; }
1758
+
1759
+ .nd-snap-guide {
1760
+ position: absolute;
1761
+ pointer-events: none;
1762
+ z-index: 50;
1763
+ background: rgba(59, 130, 246, 0.75);
1764
+ }
1765
+
1766
+ .nd-snap-guide.v { top: 0; bottom: 0; width: 1px; }
1767
+ .nd-snap-guide.h { left: 0; right: 0; height: 1px; }
1768
+ .nd-snap-guide.margin { background: rgba(239, 68, 68, 0.85); }
1769
+
1770
+ .nd-drag-metrics {
1771
+ position: absolute;
1772
+ pointer-events: none;
1773
+ z-index: 60;
1774
+ background: rgba(15, 23, 42, 0.85);
1775
+ color: #ffffff;
1776
+ font-size: 10px;
1777
+ padding: 3px 6px;
1778
+ border-radius: 6px;
1779
+ white-space: nowrap;
1780
+ box-shadow: var(--shadow-md);
1781
+ }
1782
+
1783
+ .nd-distance-line {
1784
+ position: absolute;
1785
+ pointer-events: none;
1786
+ z-index: 55;
1787
+ background: rgba(59, 130, 246, 0.55);
1788
+ }
1789
+
1790
+ .nd-distance-line.h { height: 1px; }
1791
+ .nd-distance-line.v { width: 1px; }
1792
+
1793
+ .nd-distance-label {
1794
+ position: absolute;
1795
+ pointer-events: none;
1796
+ z-index: 56;
1797
+ transform: translate(-50%, -50%);
1798
+ background: rgba(59, 130, 246, 0.85);
1799
+ color: #ffffff;
1800
+ font-size: 10px;
1801
+ padding: 2px 6px;
1802
+ border-radius: 999px;
1803
+ white-space: nowrap;
1804
+ }
1805
+
1806
+ .nd-band-hint {
1807
+ position: absolute;
1808
+ inset: 0;
1809
+ display: flex;
1810
+ flex-direction: column;
1811
+ align-items: center;
1812
+ justify-content: center;
1813
+ gap: 6px;
1814
+ color: var(--nd-text-muted);
1815
+ font-size: 12px;
1816
+ pointer-events: none;
1817
+ opacity: 0;
1818
+ transition: opacity var(--transition);
1819
+ }
1820
+
1821
+ .nd-band:hover .nd-band-hint { opacity: 0.6; }
1822
+ .nd-band-hint i { font-size: 20px; }
1823
+
1824
+ .nd-band-resizer {
1825
+ position: absolute;
1826
+ bottom: -2px;
1827
+ left: 0;
1828
+ width: 100%;
1829
+ height: 6px;
1830
+ cursor: ns-resize;
1831
+ z-index: 30;
1832
+ transition: background var(--transition);
1833
+ }
1834
+
1835
+ .nd-band-resizer:hover { background: rgba(37, 99, 235, 0.15); }
1836
+ .nd-band-resizer.active { background: var(--nd-primary); height: 3px; }
1837
+
1838
+ /* Element Resize Handles */
1839
+ .nd-resize-handle {
1840
+ position: absolute;
1841
+ width: 10px;
1842
+ height: 10px;
1843
+ background: #fff;
1844
+ border: 2px solid var(--nd-primary);
1845
+ border-radius: 50%;
1846
+ z-index: 100;
1847
+ opacity: 0;
1848
+ transition: opacity var(--transition), transform var(--transition);
1849
+ pointer-events: auto;
1850
+ }
1851
+
1852
+ .nd-el:hover .nd-resize-handle,
1853
+ .nd-el.selected .nd-resize-handle {
1854
+ opacity: 1;
1855
+ }
1856
+
1857
+ .nd-resize-handle:hover {
1858
+ transform: scale(1.3);
1859
+ background: var(--nd-primary);
1860
+ box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.2);
1861
+ }
1862
+
1863
+ .nd-resize-handle.top-left {
1864
+ top: -5px;
1865
+ left: -5px;
1866
+ cursor: nwse-resize;
1867
+ }
1868
+
1869
+ .nd-resize-handle.top-right {
1870
+ top: -5px;
1871
+ right: -5px;
1872
+ cursor: nesw-resize;
1873
+ }
1874
+
1875
+ .nd-resize-handle.bottom-left {
1876
+ bottom: -5px;
1877
+ left: -5px;
1878
+ cursor: nesw-resize;
1879
+ }
1880
+
1881
+ .nd-resize-handle.bottom-right {
1882
+ bottom: -5px;
1883
+ right: -5px;
1884
+ cursor: nwse-resize;
1885
+ }
1886
+
1887
+ .nd-el {
1888
+ position: absolute;
1889
+ box-sizing: border-box;
1890
+ border: 1.5px solid transparent;
1891
+ cursor: move;
1892
+ transition: border-color var(--transition), box-shadow var(--transition);
1893
+ z-index: 5;
1894
+ display: flex;
1895
+ align-items: center;
1896
+ justify-content: center;
1897
+ padding: 2px;
1898
+ }
1899
+
1900
+ .nd-el:hover {
1901
+ border-color: var(--nd-primary-light);
1902
+ background: rgba(37, 99, 235, 0.03);
1903
+ }
1904
+
1905
+ .nd-el.selected {
1906
+ border-color: var(--nd-primary) !important;
1907
+ background: rgba(37, 99, 235, 0.04);
1908
+ box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.12);
1909
+ z-index: 15;
1910
+ }
1911
+
1912
+ .nd-el.multi-selected {
1913
+ border-color: #8b5cf6 !important;
1914
+ background: rgba(139, 92, 246, 0.06);
1915
+ box-shadow: 0 0 0 2px rgba(139, 92, 246, 0.2);
1916
+ z-index: 14;
1917
+ }
1918
+
1919
+ .nd-el.dragging { opacity: 0.85; z-index: 100; box-shadow: var(--shadow-lg); }
1920
+
1921
+ /* Selection Box */
1922
+ .nd-selection-box {
1923
+ position: absolute;
1924
+ border: 2px dashed #3b82f6;
1925
+ background: rgba(59, 130, 246, 0.08);
1926
+ pointer-events: none;
1927
+ z-index: 9999;
1928
+ border-radius: 2px;
1929
+ }
1930
+
1931
+ /* Shape Rendering */
1932
+ .nd-shape-render {
1933
+ display: flex;
1934
+ align-items: center;
1935
+ justify-content: center;
1936
+ width: 100%;
1937
+ height: 100%;
1938
+ }
1939
+
1940
+ .nd-shape-render svg {
1941
+ width: 100%;
1942
+ height: 100%;
1943
+ overflow: visible;
1944
+ }
1945
+
1946
+ .nd-shape-label {
1947
+ display: flex;
1948
+ align-items: center;
1949
+ gap: 4px;
1950
+ font-size: 10px;
1951
+ color: var(--nd-text-muted);
1952
+ }
1953
+
1954
+ /* QR Code placeholder */
1955
+ .nd-qr-placeholder {
1956
+ display: flex;
1957
+ flex-direction: column;
1958
+ align-items: center;
1959
+ justify-content: center;
1960
+ gap: 4px;
1961
+ font-size: 10px;
1962
+ color: var(--nd-text-muted);
1963
+ }
1964
+
1965
+ /* System Variables in Dictionary */
1966
+ .nd-sysvar-category {
1967
+ margin-top: 4px;
1968
+ }
1969
+
1970
+ .nd-sysvar-category-title {
1971
+ font-size: 9px;
1972
+ font-weight: 700;
1973
+ color: var(--nd-text-muted);
1974
+ text-transform: uppercase;
1975
+ letter-spacing: 0.5px;
1976
+ padding: 4px 8px 2px;
1977
+ background: var(--nd-background);
1978
+ border-radius: 3px;
1979
+ }
1980
+
1981
+ .nd-sysvar-item {
1982
+ flex-direction: column;
1983
+ align-items: flex-start;
1984
+ gap: 1px;
1985
+ padding: 4px 8px;
1986
+ }
1987
+
1988
+ .nd-sysvar-example {
1989
+ font-size: 8px;
1990
+ color: #9ca3af;
1991
+ font-style: italic;
1992
+ margin-left: 16px;
1993
+ }
1994
+
1995
+ /* Data Source List in Ribbon */
1996
+ .nd-datasource-list {
1997
+ margin-top: 8px;
1998
+ }
1999
+
2000
+ .nd-ds-grid {
2001
+ display: flex;
2002
+ flex-direction: row;
2003
+ flex-wrap: wrap;
2004
+ gap: 8px;
2005
+ }
2006
+
2007
+ .nd-datasource-item {
2008
+ background: var(--nd-background);
2009
+ border: 1px solid var(--nd-border);
2010
+ border-radius: 6px;
2011
+ padding: 6px 8px;
2012
+ font-size: 10px;
2013
+ min-width: 200px;
2014
+ max-width: 240px;
2015
+ flex: 0 1 auto;
2016
+ }
2017
+
2018
+ .nd-ds-primary {
2019
+ border-color: #3b82f6;
2020
+ background: #f0f7ff;
2021
+ }
2022
+
2023
+ .nd-ds-header {
2024
+ display: flex;
2025
+ align-items: center;
2026
+ justify-content: space-between;
2027
+ margin-bottom: 4px;
2028
+ }
2029
+
2030
+ .nd-ds-badge {
2031
+ font-weight: 700;
2032
+ color: #f59e0b;
2033
+ font-size: 11px;
2034
+ }
2035
+
2036
+ .nd-ds-manual-badge {
2037
+ font-size: 9px;
2038
+ color: #8b5cf6;
2039
+ background: #f3f0ff;
2040
+ padding: 1px 6px;
2041
+ border-radius: 4px;
2042
+ font-weight: 500;
2043
+ }
2044
+
2045
+ .nd-ds-primary .nd-ds-badge {
2046
+ color: #3b82f6;
2047
+ }
2048
+
2049
+ .nd-ds-fields {
2050
+ display: flex;
2051
+ gap: 4px;
2052
+ align-items: center;
2053
+ }
2054
+
2055
+ .nd-ds-select {
2056
+ flex: 1;
2057
+ }
2058
+
2059
+ .nd-ds-alias {
2060
+ width: 70px !important;
2061
+ padding: 2px 4px !important;
2062
+ font-size: 9px !important;
2063
+ border-radius: 3px !important;
2064
+ }
2065
+
2066
+ .p-dropdown-xs,
2067
+ .p-dropdown-xs .p-dropdown-label {
2068
+ font-size: 9px !important;
2069
+ padding: 2px 4px !important;
2070
+ min-height: 22px !important;
2071
+ }
2072
+
2073
+ .p-inputtext-xs {
2074
+ font-size: 9px !important;
2075
+ padding: 2px 4px !important;
2076
+ min-height: 22px !important;
2077
+ }
2078
+
2079
+ .nd-placeholder-img {
2080
+ display: flex;
2081
+ align-items: center;
2082
+ justify-content: center;
2083
+ width: 100%;
2084
+ height: 100%;
2085
+ color: var(--nd-text-muted);
2086
+ background: var(--nd-background);
2087
+ }
2088
+
2089
+ .nd-img-preview {
2090
+ width: 100%;
2091
+ height: 100%;
2092
+ object-fit: contain;
2093
+ display: block;
2094
+ }
2095
+
2096
+ .nd-placeholder-bar {
2097
+ display: flex;
2098
+ flex-direction: column;
2099
+ align-items: center;
2100
+ justify-content: center;
2101
+ width: 100%;
2102
+ height: 100%;
2103
+ color: var(--nd-text-muted);
2104
+ font-family: 'Courier New', monospace;
2105
+ }
2106
+
2107
+ .nd-bar-mock { font-size: 16px; letter-spacing: -1px; line-height: 1; }
2108
+
2109
+ .nd-table-render {
2110
+ display: flex;
2111
+ flex-direction: column;
2112
+ width: 100%;
2113
+ height: 100%;
2114
+ border: 1px solid var(--nd-border-strong);
2115
+ background: #fff;
2116
+ overflow: hidden;
2117
+ border-radius: 2px;
2118
+ }
2119
+
2120
+ .nd-table-header {
2121
+ display: flex;
2122
+ background: #f1f5f9;
2123
+ border-bottom: 1px solid var(--nd-border-strong);
2124
+ flex-shrink: 0;
2125
+ }
2126
+
2127
+ .nd-table-row { display: flex; flex: 1; background: #fff; }
2128
+
2129
+ .nd-table-cell {
2130
+ padding: 4px 8px;
2131
+ border-right: 1px solid var(--nd-border);
2132
+ font-size: 11px;
2133
+ white-space: nowrap;
2134
+ overflow: hidden;
2135
+ text-overflow: ellipsis;
2136
+ min-height: 22px;
2137
+ display: flex;
2138
+ align-items: center;
2139
+ }
2140
+
2141
+ .nd-table-cell:last-child { border-right: none; }
2142
+
2143
+ .nd-table-cell.head { font-weight: 600; color: var(--nd-text); background: #f8fafc; }
2144
+
2145
+ .nd-table-cell.body {
2146
+ color: var(--nd-text-secondary);
2147
+ font-family: 'Courier New', monospace;
2148
+ font-style: italic;
2149
+ }
2150
+
2151
+ .nd-footer {
2152
+ height: 30px;
2153
+ background: var(--nd-surface);
2154
+ color: var(--nd-text-secondary);
2155
+ display: flex;
2156
+ align-items: center;
2157
+ padding: 0 12px;
2158
+ font-size: 11px;
2159
+ border-top: 1px solid var(--nd-border);
2160
+ gap: 0;
2161
+ z-index: 50;
2162
+ }
2163
+
2164
+ .nd-f-seg {
2165
+ height: 100%;
2166
+ display: flex;
2167
+ align-items: center;
2168
+ padding: 0 12px;
2169
+ border-right: 1px solid var(--nd-border);
2170
+ white-space: nowrap;
2171
+ gap: 6px;
2172
+ color: var(--nd-text-secondary);
2173
+ }
2174
+
2175
+ .nd-f-seg:last-child { border-right: none; }
2176
+ .nd-f-seg.main { flex: 1; }
2177
+ .nd-f-seg i { font-size: 12px; color: var(--nd-text-muted); }
2178
+
2179
+ .nd-f-lbl {
2180
+ color: var(--nd-text-muted);
2181
+ font-size: 9px;
2182
+ text-transform: uppercase;
2183
+ font-weight: 600;
2184
+ letter-spacing: 0.04em;
2185
+ }
2186
+
2187
+ .nd-f-val { font-weight: 700; color: var(--nd-primary); }
2188
+
2189
+ .nd-zoom {
2190
+ display: flex;
2191
+ align-items: center;
2192
+ gap: 8px;
2193
+ margin-left: auto;
2194
+ padding: 0 12px;
2195
+ border-left: 1px solid var(--nd-border);
2196
+ }
2197
+
2198
+ .nd-zoom span {
2199
+ font-size: 11px;
2200
+ font-weight: 600;
2201
+ color: var(--nd-text-secondary);
2202
+ min-width: 42px;
2203
+ text-align: center;
2204
+ }
2205
+
2206
+ .nd-zoom input[type="range"] { width: 100px; cursor: pointer; accent-color: var(--nd-primary); }
2207
+
2208
+ /* Utilities */
2209
+ .w-full { width: 100% !important; }
2210
+ .mt-2 { margin-top: 8px !important; }
2211
+ .mb-2 { margin-bottom: 8px !important; }
2212
+ .block { display: block !important; }
2213
+ .flex { display: flex !important; }
2214
+ .items-center { align-items: center !important; }
2215
+ .gap-2 { gap: 8px !important; }
2216
+ .text-center { text-align: center !important; }
2217
+ .text-\[9px\] { font-size: 9px !important; }
2218
+ .text-\[10px\] { font-size: 10px !important; }
2219
+ .text-gray-400 { color: #9ca3af !important; }
2220
+ .opacity-50 { opacity: 0.5 !important; }
2221
+ .cursor-not-allowed { cursor: not-allowed !important; }
2222
+
2223
+ /* ============================================================
2224
+ WIDGET LIBRARY & DASHBOARD DESIGNER
2225
+ ============================================================ */
2226
+
2227
+ .nd-widget-groups {
2228
+ padding: 12px;
2229
+ display: flex;
2230
+ flex-direction: column;
2231
+ gap: 20px;
2232
+ }
2233
+
2234
+ .nd-cat-title {
2235
+ font-size: 10px;
2236
+ font-weight: 800;
2237
+ color: var(--nd-text-muted);
2238
+ text-transform: uppercase;
2239
+ letter-spacing: 0.06em;
2240
+ margin-bottom: 10px;
2241
+ padding-left: 2px;
2242
+ }
2243
+
2244
+ .nd-widget-grid {
2245
+ display: grid;
2246
+ grid-template-columns: repeat(2, 1fr);
2247
+ gap: 8px;
2248
+ }
2249
+
2250
+ .nd-widget-item {
2251
+ background: #fff;
2252
+ border: 1px solid var(--nd-border);
2253
+ border-radius: 10px;
2254
+ padding: 12px 8px;
2255
+ display: flex;
2256
+ flex-direction: column;
2257
+ align-items: center;
2258
+ justify-content: center;
2259
+ gap: 8px;
2260
+ cursor: grab;
2261
+ transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
2262
+ text-align: center;
2263
+ box-shadow: 0 1px 2px rgba(0,0,0,0.03);
2264
+ }
2265
+
2266
+ .nd-widget-item:hover {
2267
+ border-color: var(--nd-primary);
2268
+ background: var(--nd-primary-ghost);
2269
+ transform: translateY(-2px);
2270
+ box-shadow: 0 4px 12px rgba(37, 99, 235, 0.12);
2271
+ }
2272
+
2273
+ .nd-widget-item:active {
2274
+ cursor: grabbing;
2275
+ }
2276
+
2277
+ .nd-widget-item i {
2278
+ font-size: 20px;
2279
+ filter: drop-shadow(0 2px 4px rgba(0,0,0,0.05));
2280
+ }
2281
+
2282
+ .nd-widget-item span {
2283
+ font-size: 10px;
2284
+ font-weight: 600;
2285
+ color: var(--nd-text-secondary);
2286
+ line-height: 1.2;
2287
+ }