nexabase-report 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/style.css ADDED
@@ -0,0 +1,1723 @@
1
+ /* ============================================================
2
+ NEXABASE REPORT — GLOBAL STYLES
3
+ ============================================================ */
4
+
5
+ /* PRIMEVUE CORE */
6
+ @import "primevue/resources/themes/lara-light-blue/theme.css";
7
+ @import "primevue/resources/primevue.min.css";
8
+ @import "primeicons/primeicons.css";
9
+ @import "primeflex/primeflex.css";
10
+
11
+ /* RESET */
12
+ html, body, #app {
13
+ margin: 0;
14
+ padding: 0;
15
+ width: 100vw;
16
+ height: 100vh;
17
+ overflow: hidden;
18
+ background: #f1f5f9;
19
+ font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, sans-serif;
20
+ }
21
+
22
+ /* Toast overrides */
23
+ .p-toast { font-size: 12px; }
24
+ .p-toast .p-toast-message .p-toast-message-content { padding: 12px; border-radius: 6px; }
25
+
26
+ /* ============================================================
27
+ STIMULSOFT PREVIEW DIALOG
28
+ ============================================================ */
29
+
30
+ .p-dialog.nd-stimulsoft-dialog {
31
+ border: none !important;
32
+ box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.5) !important;
33
+ border-radius: 12px !important;
34
+ overflow: hidden !important;
35
+ }
36
+
37
+ .p-dialog.nd-stimulsoft-dialog .p-dialog-header {
38
+ background: #1e293b !important;
39
+ color: #f8fafc !important;
40
+ padding: 0 !important;
41
+ margin: 0 !important;
42
+ border: none !important;
43
+ border-bottom: 1px solid rgba(255, 255, 255, 0.1) !important;
44
+ display: flex !important;
45
+ flex-direction: row !important;
46
+ align-items: center !important;
47
+ min-height: 42px !important;
48
+ position: relative !important;
49
+ }
50
+
51
+ .p-dialog.nd-stimulsoft-dialog .p-dialog-header .p-dialog-title {
52
+ display: none !important;
53
+ }
54
+
55
+ /* Close button - position top-right */
56
+ .p-dialog.nd-stimulsoft-dialog .p-dialog-header .p-dialog-header-icon {
57
+ position: absolute !important;
58
+ right: 10px !important;
59
+ top: 6px !important;
60
+ width: 30px !important;
61
+ height: 30px !important;
62
+ color: rgba(255, 255, 255, 0.5) !important;
63
+ border-radius: 50% !important;
64
+ border: 1px solid rgba(255, 255, 255, 0.2) !important;
65
+ padding: 0 !important;
66
+ display: flex !important;
67
+ align-items: center !important;
68
+ justify-content: center !important;
69
+ z-index: 10 !important;
70
+ }
71
+
72
+ .p-dialog.nd-stimulsoft-dialog .p-dialog-header .p-dialog-header-icon:hover {
73
+ color: white !important;
74
+ background: rgba(255, 255, 255, 0.15) !important;
75
+ }
76
+
77
+ .p-dialog.nd-stimulsoft-dialog .p-dialog-content {
78
+ background: #e2e8f0 !important;
79
+ padding: 0 !important;
80
+ display: flex !important;
81
+ flex-direction: column !important;
82
+ overflow: auto !important;
83
+ min-height: calc(98vh - 80px) !important;
84
+ }
85
+
86
+ .p-dialog.nd-stimulsoft-dialog .p-dialog-footer {
87
+ background: #1e293b !important;
88
+ color: white !important;
89
+ padding: 0 !important;
90
+ margin: 0 !important;
91
+ border: none !important;
92
+ border-top: 1px solid rgba(255, 255, 255, 0.1) !important;
93
+ display: flex !important;
94
+ flex-direction: row !important;
95
+ align-items: center !important;
96
+ min-height: 36px !important;
97
+ }
98
+
99
+ .nd-st-toolbar {
100
+ width: 100%;
101
+ display: flex !important;
102
+ flex-direction: row !important;
103
+ align-items: center !important;
104
+ gap: 2px !important;
105
+ padding: 6px 12px !important;
106
+ padding-right: 50px !important;
107
+ }
108
+
109
+ .nd-st-group {
110
+ display: flex !important;
111
+ flex-direction: row !important;
112
+ align-items: center !important;
113
+ gap: 2px !important;
114
+ }
115
+
116
+ .nd-st-divider {
117
+ width: 1px !important;
118
+ height: 24px !important;
119
+ background: rgba(255, 255, 255, 0.15) !important;
120
+ margin: 0 6px !important;
121
+ flex-shrink: 0 !important;
122
+ }
123
+
124
+ .nd-st-spacer {
125
+ flex: 1 !important;
126
+ }
127
+
128
+ .nd-st-viewport {
129
+ flex: 1;
130
+ padding: 30px;
131
+ display: flex;
132
+ justify-content: center;
133
+ align-items: flex-start;
134
+ width: 100%;
135
+ overflow: auto;
136
+ }
137
+
138
+ .nd-st-paper-wrapper {
139
+ background: white;
140
+ box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.1);
141
+ height: min-content;
142
+ width: auto;
143
+ border-radius: 2px;
144
+ }
145
+
146
+ .nd-st-loading {
147
+ display: flex;
148
+ flex-direction: column;
149
+ align-items: center;
150
+ justify-content: center;
151
+ gap: 16px;
152
+ min-height: 400px;
153
+ color: #64748b;
154
+ font-size: 16px;
155
+ }
156
+
157
+ .nd-st-statusbar {
158
+ width: 100%;
159
+ display: flex !important;
160
+ flex-direction: row !important;
161
+ align-items: center !important;
162
+ padding: 0 12px !important;
163
+ gap: 4px !important;
164
+ }
165
+
166
+ .nd-st-zoom-label {
167
+ color: white !important;
168
+ font-family: 'Courier New', monospace !important;
169
+ min-width: 50px !important;
170
+ text-align: center !important;
171
+ font-size: 12px !important;
172
+ font-weight: 600 !important;
173
+ }
174
+
175
+ .nd-st-statusbar span {
176
+ color: rgba(255, 255, 255, 0.8) !important;
177
+ font-size: 12px !important;
178
+ padding: 0 8px !important;
179
+ }
180
+
181
+ /* Toolbar buttons */
182
+ .nd-st-toolbar .p-button {
183
+ color: rgba(255, 255, 255, 0.7) !important;
184
+ background: transparent !important;
185
+ border: 1px solid transparent !important;
186
+ padding: 4px 10px !important;
187
+ font-size: 12px !important;
188
+ min-height: 28px !important;
189
+ border-radius: 4px !important;
190
+ }
191
+
192
+ .nd-st-toolbar .p-button:hover {
193
+ color: white !important;
194
+ background: rgba(255, 255, 255, 0.1) !important;
195
+ border-color: rgba(255, 255, 255, 0.15) !important;
196
+ }
197
+
198
+ .nd-st-toolbar .p-button .pi {
199
+ color: rgba(255, 255, 255, 0.6) !important;
200
+ margin-right: 5px !important;
201
+ }
202
+
203
+ .nd-st-toolbar .p-button:hover .pi {
204
+ color: white !important;
205
+ }
206
+
207
+ .nd-st-toolbar .p-button.p-button-icon-only {
208
+ padding: 4px 8px !important;
209
+ width: 28px !important;
210
+ }
211
+
212
+ .nd-st-toolbar .p-button.p-button-icon-only .pi {
213
+ margin-right: 0 !important;
214
+ }
215
+
216
+ /* Statusbar buttons */
217
+ .nd-st-statusbar .p-button {
218
+ color: rgba(255, 255, 255, 0.7) !important;
219
+ background: transparent !important;
220
+ border: 1px solid transparent !important;
221
+ padding: 0 !important;
222
+ min-height: 24px !important;
223
+ width: 24px !important;
224
+ border-radius: 4px !important;
225
+ }
226
+
227
+ .nd-st-statusbar .p-button:hover {
228
+ color: white !important;
229
+ background: rgba(255, 255, 255, 0.1) !important;
230
+ }
231
+
232
+ .nd-st-statusbar .p-button .pi {
233
+ color: rgba(255, 255, 255, 0.6) !important;
234
+ font-size: 12px !important;
235
+ }
236
+
237
+ .nd-st-statusbar .p-button:hover .pi {
238
+ color: white !important;
239
+ }
240
+
241
+ /* ============================================================
242
+ DESIGNER COMPONENT STYLES
243
+ ============================================================ */
244
+
245
+ :root {
246
+ --nd-primary: #2563eb;
247
+ --nd-primary-dark: #1d4ed8;
248
+ --nd-primary-light: #dbeafe;
249
+ --nd-primary-ghost: rgba(37, 99, 235, 0.08);
250
+ --nd-surface: #ffffff;
251
+ --nd-background: #f1f5f9;
252
+ --nd-background-canvas: #e2e8f0;
253
+ --nd-border: #e2e8f0;
254
+ --nd-border-strong: #cbd5e1;
255
+ --nd-text: #1e293b;
256
+ --nd-text-secondary: #64748b;
257
+ --nd-text-muted: #94a3b8;
258
+ --nd-success: #059669;
259
+ --nd-warning: #d97706;
260
+ --nd-danger: #dc2626;
261
+ --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);
262
+ --shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
263
+ --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
264
+ --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
265
+ --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);
266
+ --radius-sm: 4px;
267
+ --radius: 6px;
268
+ --radius-md: 8px;
269
+ --transition: 150ms cubic-bezier(0.4, 0, 0.2, 1);
270
+ }
271
+
272
+ .nd-root {
273
+ display: flex;
274
+ flex-direction: column;
275
+ height: 100vh;
276
+ font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, sans-serif;
277
+ background: var(--nd-background);
278
+ color: var(--nd-text);
279
+ overflow: hidden;
280
+ user-select: none;
281
+ -webkit-font-smoothing: antialiased;
282
+ }
283
+
284
+ .nd-header {
285
+ background: var(--nd-surface);
286
+ border-bottom: 1px solid var(--nd-border);
287
+ box-shadow: var(--shadow-sm);
288
+ z-index: 50;
289
+ }
290
+
291
+ .nd-tab-bar {
292
+ display: flex;
293
+ padding: 6px 12px 0;
294
+ gap: 2px;
295
+ background: var(--nd-background);
296
+ border-bottom: 1px solid var(--nd-border);
297
+ align-items: flex-end;
298
+ }
299
+
300
+ .nd-tab-report-name {
301
+ margin-left: auto;
302
+ padding-bottom: 2px;
303
+ }
304
+
305
+ .nd-report-name-input {
306
+ height: 26px;
307
+ padding: 3px 10px;
308
+ font-size: 12px;
309
+ font-weight: 500;
310
+ color: var(--nd-text);
311
+ background: var(--nd-surface);
312
+ border: 1px solid var(--nd-border);
313
+ border-radius: var(--radius-sm);
314
+ outline: none;
315
+ transition: border-color var(--transition), box-shadow var(--transition);
316
+ width: 220px;
317
+ }
318
+
319
+ .nd-report-name-input:focus {
320
+ border-color: var(--nd-primary);
321
+ box-shadow: 0 0 0 2px rgba(37, 99, 235, 0.15);
322
+ }
323
+
324
+ .nd-report-name-input::placeholder {
325
+ color: var(--nd-text-muted);
326
+ font-weight: 400;
327
+ }
328
+
329
+ .nd-tab {
330
+ padding: 7px 18px;
331
+ font-size: 12px;
332
+ font-weight: 500;
333
+ cursor: pointer;
334
+ color: var(--nd-text-secondary);
335
+ border-radius: var(--radius-sm) var(--radius-sm) 0 0;
336
+ border: 1px solid transparent;
337
+ border-bottom: none;
338
+ transition: all var(--transition);
339
+ }
340
+
341
+ .nd-tab:hover {
342
+ color: var(--nd-text);
343
+ background: rgba(255, 255, 255, 0.6);
344
+ }
345
+
346
+ .nd-tab.active {
347
+ color: var(--nd-primary);
348
+ background: var(--nd-surface);
349
+ border-color: var(--nd-border);
350
+ border-bottom-color: var(--nd-surface);
351
+ margin-bottom: -1px;
352
+ font-weight: 600;
353
+ }
354
+
355
+ .nd-tab-archivo {
356
+ background: var(--nd-primary) !important;
357
+ color: #fff !important;
358
+ font-weight: 600 !important;
359
+ border-color: transparent !important;
360
+ }
361
+
362
+ .nd-tab-archivo:hover {
363
+ background: var(--nd-primary-dark) !important;
364
+ }
365
+
366
+ .nd-tab-archivo.active {
367
+ background: var(--nd-primary-dark) !important;
368
+ color: #fff !important;
369
+ border-color: var(--nd-primary) !important;
370
+ }
371
+
372
+ .nd-toolbar {
373
+ display: flex;
374
+ min-height: 96px;
375
+ background: var(--nd-surface);
376
+ padding: 8px 16px;
377
+ gap: 4px;
378
+ align-items: stretch;
379
+ overflow-x: auto;
380
+ }
381
+
382
+ .nd-toolbar::-webkit-scrollbar { height: 4px; }
383
+ .nd-toolbar::-webkit-scrollbar-thumb { background: var(--nd-border-strong); border-radius: 4px; }
384
+
385
+ .nd-group {
386
+ display: flex;
387
+ flex-direction: column;
388
+ background: transparent;
389
+ padding: 4px 8px 20px;
390
+ position: relative;
391
+ gap: 2px;
392
+ flex-shrink: 0;
393
+ }
394
+
395
+ .nd-group + .nd-group {
396
+ border-left: 1px solid var(--nd-border);
397
+ padding-left: 12px;
398
+ margin-left: 4px;
399
+ }
400
+
401
+ .nd-group-body {
402
+ display: flex;
403
+ align-items: flex-start;
404
+ justify-content: center;
405
+ gap: 4px;
406
+ }
407
+
408
+ .nd-group-title {
409
+ position: absolute;
410
+ bottom: 2px;
411
+ left: 0;
412
+ right: 0;
413
+ font-size: 10px;
414
+ font-weight: 500;
415
+ color: var(--nd-text-muted);
416
+ text-align: center;
417
+ text-transform: uppercase;
418
+ letter-spacing: 0.04em;
419
+ }
420
+
421
+ .nd-btn-lg {
422
+ display: flex;
423
+ flex-direction: column;
424
+ align-items: center;
425
+ justify-content: center;
426
+ gap: 3px;
427
+ padding: 6px 10px;
428
+ border-radius: var(--radius);
429
+ cursor: pointer;
430
+ min-width: 60px;
431
+ height: 68px;
432
+ border: 1px solid transparent;
433
+ background: transparent;
434
+ transition: all var(--transition);
435
+ }
436
+
437
+ .nd-btn-lg:hover {
438
+ background: var(--nd-primary-ghost);
439
+ border-color: var(--nd-primary-light);
440
+ }
441
+
442
+ .nd-btn-lg:active { background: var(--nd-primary-light); }
443
+ .nd-btn-lg i { font-size: 24px !important; color: var(--nd-primary); }
444
+
445
+ .nd-btn-lg span {
446
+ font-size: 10.5px;
447
+ font-weight: 500;
448
+ color: var(--nd-text-secondary);
449
+ line-height: 1.2;
450
+ text-align: center;
451
+ }
452
+
453
+ .nd-btn-lg:hover i { color: var(--nd-primary-dark); }
454
+
455
+ .nd-btn-sm-col {
456
+ display: flex;
457
+ flex-direction: column;
458
+ justify-content: center;
459
+ gap: 2px;
460
+ }
461
+
462
+ .nd-margins-group .nd-group-body {
463
+ align-items: flex-end !important;
464
+ justify-content: flex-end !important;
465
+ }
466
+
467
+ .nd-margins-group .nd-btn-sm-col {
468
+ margin-top: auto !important;
469
+ }
470
+
471
+ /* Forzar ancho de los InputNumber dentro de márgenes */
472
+ .nd-margins-group .p-inputnumber {
473
+ width: 55px !important;
474
+ min-width: 55px !important;
475
+ max-width: 55px !important;
476
+ flex-shrink: 0 !important;
477
+ }
478
+
479
+ .nd-margins-group .p-inputnumber .p-inputnumber-input {
480
+ width: 55px !important;
481
+ min-width: 55px !important;
482
+ padding-left: 6px !important;
483
+ padding-right: 6px !important;
484
+ }
485
+
486
+ .nd-btn-sm {
487
+ display: flex;
488
+ align-items: center;
489
+ gap: 6px;
490
+ padding: 3px 10px;
491
+ border-radius: var(--radius-sm);
492
+ cursor: pointer;
493
+ height: 24px;
494
+ min-width: 100px;
495
+ border: 1px solid transparent;
496
+ background: transparent;
497
+ transition: all var(--transition);
498
+ }
499
+
500
+ .nd-btn-sm:hover {
501
+ background: var(--nd-primary-ghost);
502
+ border-color: var(--nd-primary-light);
503
+ }
504
+
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;
520
+ }
521
+
522
+ .nd-tbar-btn:hover {
523
+ background: var(--nd-primary-ghost);
524
+ color: var(--nd-primary);
525
+ }
526
+
527
+ .nd-tbar-btn.active { background: var(--nd-primary); color: #fff; }
528
+ .nd-tbar-btn i { font-size: 13px !important; }
529
+
530
+ /* Botones de formato de texto (B, I) */
531
+ .nd-format-btn {
532
+ font-family: Georgia, 'Times New Roman', serif;
533
+ }
534
+
535
+ .nd-format-text-bold {
536
+ font-weight: 900;
537
+ font-size: 15px;
538
+ line-height: 1;
539
+ color: var(--nd-text-secondary);
540
+ }
541
+
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);
548
+ }
549
+
550
+ .nd-tbar-btn.active .nd-format-text-bold,
551
+ .nd-tbar-btn.active .nd-format-text-italic {
552
+ color: #fff;
553
+ }
554
+
555
+ /* Botón de color de texto */
556
+ .nd-color-btn {
557
+ position: relative;
558
+ }
559
+
560
+ .nd-color-btn:hover {
561
+ background: var(--nd-primary-ghost);
562
+ }
563
+
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; }
568
+
569
+ .nd-sidebar {
570
+ background: var(--nd-surface);
571
+ border-left: 1px solid var(--nd-border);
572
+ display: flex;
573
+ flex-direction: column;
574
+ box-shadow: -2px 0 8px rgba(0, 0, 0, 0.04);
575
+ }
576
+
577
+ .nd-sidebar-panels {
578
+ flex: 1;
579
+ overflow-y: auto;
580
+ overflow-x: hidden;
581
+ }
582
+
583
+ .nd-sidebar-panels::-webkit-scrollbar { width: 6px; }
584
+ .nd-sidebar-panels::-webkit-scrollbar-thumb { background: var(--nd-border-strong); border-radius: 4px; }
585
+
586
+ .nd-panel-title {
587
+ padding: 10px 14px;
588
+ background: var(--nd-background);
589
+ font-weight: 700;
590
+ font-size: 11px;
591
+ color: var(--nd-text);
592
+ border-bottom: 1px solid var(--nd-border);
593
+ text-transform: uppercase;
594
+ letter-spacing: 0.04em;
595
+ position: sticky;
596
+ top: 0;
597
+ z-index: 10;
598
+ }
599
+
600
+ .nd-panel-subtitle {
601
+ font-size: 10px;
602
+ font-weight: 700;
603
+ text-transform: uppercase;
604
+ color: var(--nd-text-muted);
605
+ margin: 14px 0 6px;
606
+ padding: 0 12px;
607
+ letter-spacing: 0.04em;
608
+ }
609
+
610
+ .nd-sidebar-tabs {
611
+ height: 36px;
612
+ display: flex;
613
+ background: var(--nd-surface);
614
+ border-top: 1px solid var(--nd-border);
615
+ flex-shrink: 0;
616
+ }
617
+
618
+ .nd-side-tab {
619
+ flex: 1;
620
+ display: flex;
621
+ align-items: center;
622
+ justify-content: center;
623
+ gap: 5px;
624
+ font-size: 11px;
625
+ font-weight: 500;
626
+ cursor: pointer;
627
+ border-right: 1px solid var(--nd-border);
628
+ color: var(--nd-text-muted);
629
+ transition: all var(--transition);
630
+ background: transparent;
631
+ }
632
+
633
+ .nd-side-tab:last-child { border-right: none; }
634
+ .nd-side-tab:hover { color: var(--nd-text); background: var(--nd-primary-ghost); }
635
+
636
+ .nd-side-tab.active {
637
+ color: var(--nd-primary);
638
+ background: var(--nd-primary-light);
639
+ font-weight: 600;
640
+ }
641
+
642
+ .nd-side-tab i { font-size: 13px; }
643
+
644
+ .nd-coll-group { margin: 2px 6px; }
645
+
646
+ .nd-coll-header {
647
+ display: flex;
648
+ align-items: center;
649
+ gap: 8px;
650
+ padding: 7px 10px;
651
+ cursor: pointer;
652
+ background: transparent;
653
+ border-radius: var(--radius-sm);
654
+ font-size: 12px;
655
+ font-weight: 500;
656
+ color: var(--nd-text);
657
+ transition: all var(--transition);
658
+ }
659
+
660
+ .nd-coll-header:hover { background: var(--nd-primary-ghost); color: var(--nd-primary); }
661
+ .nd-coll-header i { font-size: 11px; color: var(--nd-text-muted); }
662
+ .nd-coll-header:hover i { color: var(--nd-primary); }
663
+
664
+ .nd-field-list { padding: 2px 0 4px 26px; }
665
+
666
+ .nd-field-item {
667
+ display: flex;
668
+ align-items: center;
669
+ gap: 8px;
670
+ padding: 5px 8px;
671
+ font-size: 12px;
672
+ color: var(--nd-text-secondary);
673
+ cursor: grab;
674
+ border-radius: var(--radius-sm);
675
+ transition: all var(--transition);
676
+ border: 1px solid transparent;
677
+ }
678
+
679
+ .nd-field-item:hover {
680
+ background: var(--nd-primary-light);
681
+ color: var(--nd-primary);
682
+ border-color: var(--nd-primary-light);
683
+ }
684
+
685
+ .nd-field-item:active { cursor: grabbing; }
686
+ .nd-field-item i { font-size: 10px; color: var(--nd-text-muted); }
687
+
688
+ .nd-item {
689
+ padding: 9px 14px;
690
+ font-size: 12px;
691
+ cursor: pointer;
692
+ display: flex;
693
+ align-items: center;
694
+ gap: 10px;
695
+ color: var(--nd-text-secondary);
696
+ border-radius: var(--radius-sm);
697
+ margin: 1px 6px;
698
+ transition: all var(--transition);
699
+ }
700
+
701
+ .nd-item:hover { background: var(--nd-primary-ghost); color: var(--nd-primary); }
702
+ .nd-item i { font-size: 13px; color: var(--nd-text-muted); }
703
+
704
+ .nd-props { padding: 4px 0; }
705
+
706
+ /* ─── MANUAL FIELDS ─────────────────────────────────────────────────── */
707
+ .nd-manual-field {
708
+ position: relative;
709
+ background: linear-gradient(135deg, #f5f3ff 0%, #ede9fe 100%);
710
+ border-color: #c4b5fd;
711
+ }
712
+
713
+ .nd-manual-field:hover {
714
+ background: linear-gradient(135deg, #ede9fe 0%, #ddd6fe 100%);
715
+ border-color: #8b5cf6;
716
+ }
717
+
718
+ .nd-manual-badge {
719
+ font-size: 9px;
720
+ padding: 1px 5px;
721
+ background: #8b5cf6;
722
+ color: white;
723
+ border-radius: 3px;
724
+ margin-left: auto;
725
+ font-weight: 500;
726
+ }
727
+
728
+ .nd-field-delete {
729
+ opacity: 0;
730
+ transition: opacity 0.15s;
731
+ }
732
+
733
+ .nd-field-item:hover .nd-field-delete {
734
+ opacity: 1;
735
+ }
736
+
737
+ .nd-empty-state {
738
+ padding: 12px;
739
+ text-align: center;
740
+ color: var(--nd-text-muted);
741
+ font-style: italic;
742
+ }
743
+
744
+ /* ─── MANUAL FIELDS LIST IN TAB DATOS ──────────────────────────────── */
745
+ .nd-manual-fields-list {
746
+ display: flex;
747
+ flex-direction: column;
748
+ gap: 4px;
749
+ margin-top: 6px;
750
+ }
751
+
752
+ .nd-manual-field-item {
753
+ display: flex;
754
+ align-items: center;
755
+ gap: 6px;
756
+ padding: 5px 8px;
757
+ background: #f9fafb;
758
+ border: 1px solid #e5e7eb;
759
+ border-radius: 4px;
760
+ font-size: 11px;
761
+ }
762
+
763
+ .nd-manual-field-info {
764
+ flex: 1;
765
+ display: flex;
766
+ flex-direction: column;
767
+ gap: 1px;
768
+ }
769
+
770
+ .nd-manual-field-name {
771
+ font-weight: 500;
772
+ color: var(--nd-text-primary);
773
+ }
774
+
775
+ .nd-manual-field-type {
776
+ color: var(--nd-text-muted);
777
+ font-size: 9px;
778
+ }
779
+
780
+ /* ─── DATA SOURCE RELATIONS ─────────────────────────────────────────── */
781
+ .nd-relations-list {
782
+ display: flex;
783
+ flex-direction: column;
784
+ gap: 4px;
785
+ margin-top: 6px;
786
+ }
787
+
788
+ .nd-relation-item {
789
+ display: flex;
790
+ align-items: center;
791
+ gap: 6px;
792
+ padding: 5px 8px;
793
+ background: #fffbeb;
794
+ border: 1px solid #fde68a;
795
+ border-radius: 4px;
796
+ font-size: 11px;
797
+ }
798
+
799
+ .nd-relation-info {
800
+ flex: 1;
801
+ display: flex;
802
+ flex-direction: column;
803
+ gap: 1px;
804
+ }
805
+
806
+ .nd-relation-label {
807
+ font-weight: 500;
808
+ color: var(--nd-text-primary);
809
+ }
810
+
811
+ .nd-relation-detail {
812
+ color: var(--nd-text-muted);
813
+ font-size: 9px;
814
+ font-family: monospace;
815
+ }
816
+
817
+ /* ─── DATA SOURCE PREVIEW ──────────────────────────────────────────── */
818
+ .nd-ds-preview {
819
+ margin-top: 6px;
820
+ padding-top: 6px;
821
+ border-top: 1px dashed #e5e7eb;
822
+ }
823
+
824
+ .nd-preview-table {
825
+ margin-top: 6px;
826
+ overflow-x: auto;
827
+ }
828
+
829
+ .nd-preview-table-inner {
830
+ width: 100%;
831
+ font-size: 9px;
832
+ border-collapse: collapse;
833
+ }
834
+
835
+ .nd-preview-table-inner th,
836
+ .nd-preview-table-inner td {
837
+ padding: 3px 5px;
838
+ border: 1px solid #e5e7eb;
839
+ text-align: left;
840
+ white-space: nowrap;
841
+ overflow: hidden;
842
+ text-overflow: ellipsis;
843
+ }
844
+
845
+ .nd-preview-table-inner th {
846
+ background: #f3f4f6;
847
+ font-weight: 600;
848
+ color: var(--nd-text-primary);
849
+ }
850
+
851
+ .nd-preview-table-inner td {
852
+ color: var(--nd-text-secondary);
853
+ }
854
+
855
+ .nd-preview-count {
856
+ display: block;
857
+ margin-top: 3px;
858
+ font-size: 8px;
859
+ color: var(--nd-text-muted);
860
+ text-align: center;
861
+ }
862
+
863
+ /* Tabla de preview completa en diálogo modal */
864
+ .nd-preview-table-full {
865
+ width: 100% !important;
866
+ border-collapse: collapse;
867
+ font-size: 12px;
868
+ }
869
+
870
+ .nd-preview-table-full th,
871
+ .nd-preview-table-full td {
872
+ padding: 6px 10px;
873
+ border: 1px solid #e5e7eb;
874
+ text-align: left;
875
+ white-space: nowrap;
876
+ overflow: hidden;
877
+ text-overflow: ellipsis;
878
+ max-width: 200px;
879
+ }
880
+
881
+ .nd-preview-table-full th {
882
+ background: #f3f4f6;
883
+ font-weight: 600;
884
+ color: var(--nd-text-primary);
885
+ position: sticky;
886
+ top: 0;
887
+ z-index: 1;
888
+ }
889
+
890
+ .nd-preview-table-full td {
891
+ color: var(--nd-text-secondary);
892
+ }
893
+
894
+ .nd-preview-table-full tbody tr:nth-child(even) {
895
+ background: #fafafa;
896
+ }
897
+
898
+ .nd-preview-table-full tbody tr:hover {
899
+ background: #f0f7ff;
900
+ }
901
+
902
+ /* ─── DRILLDOWN EDITOR ─────────────────────────────────────────────── */
903
+ .nd-param-mapping {
904
+ display: grid;
905
+ grid-template-columns: 1fr 1fr auto;
906
+ gap: 8px;
907
+ align-items: end;
908
+ padding: 8px;
909
+ background: #f9fafb;
910
+ border: 1px solid #e5e7eb;
911
+ border-radius: 6px;
912
+ margin-bottom: 8px;
913
+ }
914
+
915
+ .nd-color-picker {
916
+ width: 32px;
917
+ height: 28px;
918
+ border: 1px solid #d1d5db;
919
+ border-radius: 4px;
920
+ cursor: pointer;
921
+ padding: 0;
922
+ }
923
+
924
+ /* ─── WATERMARK DIALOG ─────────────────────────────────────────────── */
925
+ .nd-wm-dialog .p-dialog-header {
926
+ background: linear-gradient(135deg, #f8fafc 0%, #f1f5f9 100%);
927
+ }
928
+ .nd-wm-dialog .p-dialog-content {
929
+ padding: 16px 20px !important;
930
+ overflow: visible !important;
931
+ }
932
+ .nd-wm-dialog .p-dialog-footer {
933
+ padding: 8px 20px 12px !important;
934
+ }
935
+
936
+ /* Override PrimeVue sizes for compact ribbon inputs */
937
+ .p-inputtext-xs.p-inputtext {
938
+ font-size: 11px !important;
939
+ padding: 3px 6px !important;
940
+ height: 24px !important;
941
+ }
942
+
943
+ .p-inputnumber-xs.p-inputnumber {
944
+ font-size: 11px !important;
945
+ }
946
+
947
+ .p-inputnumber-xs .p-inputnumber-input {
948
+ font-size: 11px !important;
949
+ padding: 3px 6px !important;
950
+ height: 24px !important;
951
+ }
952
+
953
+ .p-dropdown-xs.p-dropdown {
954
+ font-size: 11px !important;
955
+ }
956
+
957
+ .p-dropdown-xs .p-dropdown-label {
958
+ font-size: 11px !important;
959
+ padding: 3px 8px !important;
960
+ height: 24px !important;
961
+ }
962
+
963
+ .p-dropdown-xs .p-dropdown-trigger {
964
+ width: 24px !important;
965
+ }
966
+
967
+ .nd-field {
968
+ padding: 6px 12px;
969
+ display: flex;
970
+ flex-direction: column;
971
+ gap: 4px;
972
+ }
973
+
974
+ .nd-field label {
975
+ font-size: 10px;
976
+ font-weight: 600;
977
+ color: var(--nd-text-muted);
978
+ text-transform: uppercase;
979
+ letter-spacing: 0.04em;
980
+ }
981
+
982
+ .nd-field-row { display: flex; gap: 8px; padding: 4px 12px; }
983
+
984
+ .nd-val-badge {
985
+ display: inline-block;
986
+ padding: 2px 8px;
987
+ background: var(--nd-primary-light);
988
+ color: var(--nd-primary);
989
+ border-radius: var(--radius-sm);
990
+ font-size: 11px;
991
+ font-weight: 600;
992
+ }
993
+
994
+ .nd-empty { padding: 30px 20px; text-align: center; color: var(--nd-text-muted); font-size: 12px; }
995
+ .nd-help-text { padding: 10px 12px; font-size: 11px; color: var(--nd-text-muted); line-height: 1.5; }
996
+
997
+ .nd-connection-indicator {
998
+ display: flex;
999
+ align-items: center;
1000
+ gap: 8px;
1001
+ padding: 10px 12px;
1002
+ margin: 8px;
1003
+ background: #ecfdf5;
1004
+ border-radius: var(--radius);
1005
+ font-size: 11px;
1006
+ color: var(--nd-success);
1007
+ border: 1px solid #a7f3d0;
1008
+ }
1009
+
1010
+ .nd-connection-indicator i { font-size: 14px; }
1011
+
1012
+ .nd-table-editor { padding: 0 12px; }
1013
+
1014
+ .nd-col-edit-card {
1015
+ background: var(--nd-background);
1016
+ border: 1px solid var(--nd-border);
1017
+ border-radius: var(--radius);
1018
+ padding: 10px;
1019
+ margin-bottom: 8px;
1020
+ transition: border-color var(--transition);
1021
+ }
1022
+
1023
+ .nd-col-edit-card:hover { border-color: var(--nd-border-strong); }
1024
+
1025
+ .nd-col-header {
1026
+ display: flex;
1027
+ justify-content: space-between;
1028
+ align-items: center;
1029
+ margin-bottom: 8px;
1030
+ font-weight: 600;
1031
+ font-size: 11px;
1032
+ color: var(--nd-primary);
1033
+ }
1034
+
1035
+ .nd-actions { border-top: 1px solid var(--nd-border); padding-top: 12px; margin-top: 8px; }
1036
+
1037
+ .nd-textarea { resize: vertical; min-height: 60px; font-size: 12px; line-height: 1.5; }
1038
+
1039
+ .nd-workspace {
1040
+ flex: 1;
1041
+ display: grid;
1042
+ grid-template-columns: 30px 1fr;
1043
+ grid-template-rows: 28px 1fr;
1044
+ background: var(--nd-background-canvas);
1045
+ position: relative;
1046
+ overflow: hidden;
1047
+ }
1048
+
1049
+ .nd-corner {
1050
+ grid-area: 1 / 1;
1051
+ background: var(--nd-surface);
1052
+ border-right: 1px solid var(--nd-border);
1053
+ border-bottom: 1px solid var(--nd-border);
1054
+ z-index: 60;
1055
+ }
1056
+
1057
+ .nd-ruler-h {
1058
+ grid-area: 1 / 2;
1059
+ height: 28px;
1060
+ background: var(--nd-surface);
1061
+ border-bottom: 1px solid var(--nd-border);
1062
+ position: relative;
1063
+ z-index: 50;
1064
+ overflow: hidden;
1065
+ }
1066
+
1067
+ .nd-ruler-h-inner {
1068
+ width: 794px; /* A4 width — matches paper */
1069
+ height: 100%;
1070
+ position: relative;
1071
+ margin: 0 auto;
1072
+ }
1073
+
1074
+ .nd-ruler-v {
1075
+ grid-area: 2 / 1;
1076
+ width: 34px;
1077
+ background: var(--nd-surface);
1078
+ border-right: 1px solid var(--nd-border);
1079
+ position: relative;
1080
+ z-index: 50;
1081
+ overflow: visible;
1082
+ }
1083
+
1084
+ .nd-ruler-v-inner { width: 100%; height: 100%; position: relative; }
1085
+
1086
+ .nd-tick-h {
1087
+ position: absolute;
1088
+ top: 0;
1089
+ height: 100%;
1090
+ width: 1px;
1091
+ border-left: 1px solid var(--nd-border);
1092
+ font-size: 9px;
1093
+ color: var(--nd-text-muted);
1094
+ font-weight: 500;
1095
+ text-align: center;
1096
+ padding-top: 14px;
1097
+ padding-left: 0;
1098
+ transform: translateX(-50%);
1099
+ }
1100
+
1101
+ .nd-tick-v {
1102
+ position: absolute;
1103
+ left: 0;
1104
+ width: 100%;
1105
+ height: 1px;
1106
+ border-top: 1px solid var(--nd-border);
1107
+ }
1108
+
1109
+ .nd-v-lbl {
1110
+ font-size: 9px;
1111
+ color: var(--nd-text-muted);
1112
+ font-weight: 500;
1113
+ position: absolute;
1114
+ left: 6px;
1115
+ top: -5px;
1116
+ white-space: nowrap;
1117
+ transform: rotate(-90deg);
1118
+ transform-origin: 0 0;
1119
+ }
1120
+
1121
+ .nd-scroller {
1122
+ grid-area: 2 / 2;
1123
+ overflow: auto;
1124
+ padding: 50px;
1125
+ display: flex;
1126
+ justify-content: center;
1127
+ --nd-scale: 1;
1128
+ }
1129
+
1130
+ .nd-scroller::-webkit-scrollbar { width: 10px; height: 10px; }
1131
+ .nd-scroller::-webkit-scrollbar-track { background: var(--nd-background); }
1132
+ .nd-scroller::-webkit-scrollbar-thumb {
1133
+ background: var(--nd-border-strong);
1134
+ border-radius: 6px;
1135
+ border: 2px solid var(--nd-background);
1136
+ }
1137
+ .nd-scroller::-webkit-scrollbar-thumb:hover { background: var(--nd-text-muted); }
1138
+
1139
+ .nd-page-wrapper { display: flex; justify-content: center; padding-bottom: 100px; }
1140
+
1141
+ .nd-page {
1142
+ background: #fff;
1143
+ position: relative;
1144
+ box-shadow: var(--shadow-xl);
1145
+ transform: scale(var(--nd-scale));
1146
+ transform-origin: top center;
1147
+ transition: transform 0.2s ease;
1148
+ flex-shrink: 0;
1149
+ }
1150
+
1151
+ .nd-page-content {
1152
+ position: absolute;
1153
+ inset: 0;
1154
+ box-sizing: border-box;
1155
+ z-index: 5;
1156
+ }
1157
+
1158
+ .nd-page.a4.portrait { width: 794px; min-height: 1123px; }
1159
+ .nd-page.a4.landscape { width: 1123px; min-height: 794px; }
1160
+ .nd-page.letter.portrait { width: 816px; min-height: 1056px; }
1161
+ .nd-page.letter.landscape { width: 1056px; min-height: 816px; }
1162
+ .nd-page.ticket.portrait { width: 302px; min-height: 800px; }
1163
+
1164
+ .nd-paper-grid {
1165
+ position: absolute;
1166
+ inset: 0;
1167
+ background-image:
1168
+ linear-gradient(rgba(0, 0, 0, 0.03) 1px, transparent 1px),
1169
+ linear-gradient(90deg, rgba(0, 0, 0, 0.03) 1px, transparent 1px);
1170
+ background-size: 37.8px 37.8px;
1171
+ pointer-events: none;
1172
+ z-index: 1;
1173
+ }
1174
+
1175
+ .nd-margin-guides { position: absolute; inset: 0; pointer-events: none; z-index: 2; }
1176
+
1177
+ .nd-guide-v,
1178
+ .nd-guide-h {
1179
+ position: absolute;
1180
+ background: rgba(239, 68, 68, 0.25);
1181
+ border: 1px dashed rgba(239, 68, 68, 0.5);
1182
+ }
1183
+
1184
+ .nd-guide-v { top: 0; bottom: 0; width: 1px; }
1185
+ .nd-guide-h { left: 0; right: 0; height: 1px; }
1186
+
1187
+ .nd-paper-bands { position: relative; z-index: 10; min-height: 100%; }
1188
+
1189
+ /* Watermark en diseñador */
1190
+ .nd-watermark-layer {
1191
+ position: absolute;
1192
+ top: 0;
1193
+ left: 0;
1194
+ right: 0;
1195
+ bottom: 0;
1196
+ display: flex;
1197
+ align-items: center;
1198
+ justify-content: center;
1199
+ overflow: hidden;
1200
+ pointer-events: none;
1201
+ z-index: 0;
1202
+ }
1203
+
1204
+ .nd-watermark-single {
1205
+ position: absolute;
1206
+ }
1207
+
1208
+ .nd-watermark-text {
1209
+ display: block;
1210
+ font-family: Arial, sans-serif;
1211
+ font-weight: 900;
1212
+ letter-spacing: 4px;
1213
+ user-select: none;
1214
+ text-transform: uppercase;
1215
+ text-shadow: 0 0 10px rgba(0, 0, 0, 0.05);
1216
+ white-space: nowrap;
1217
+ }
1218
+
1219
+ .nd-band {
1220
+ position: relative;
1221
+ border-bottom: 1px dashed var(--nd-border);
1222
+ transition: background var(--transition);
1223
+ min-height: 20px;
1224
+ z-index: 1;
1225
+ }
1226
+
1227
+ .nd-band:hover { background: rgba(37, 99, 235, 0.02); }
1228
+
1229
+ .nd-band-tag {
1230
+ position: absolute;
1231
+ left: calc(-96px - var(--nd-margin-left-px, 0px));
1232
+ top: 3px;
1233
+ width: 90px;
1234
+ background: var(--nd-surface);
1235
+ color: var(--nd-text-secondary);
1236
+ font-size: 10px;
1237
+ font-weight: 700;
1238
+ padding: 3px 8px;
1239
+ text-align: right;
1240
+ border: 1px solid var(--nd-border);
1241
+ border-right: none;
1242
+ border-radius: var(--radius-sm) 0 0 var(--radius-sm);
1243
+ cursor: pointer;
1244
+ transition: all var(--transition);
1245
+ white-space: nowrap;
1246
+ overflow: hidden;
1247
+ text-overflow: ellipsis;
1248
+ display: flex;
1249
+ align-items: center;
1250
+ justify-content: flex-end;
1251
+ gap: 4px;
1252
+ z-index: 20;
1253
+ }
1254
+
1255
+ .nd-band-tag:hover {
1256
+ color: var(--nd-primary);
1257
+ background: var(--nd-primary-light);
1258
+ border-color: var(--nd-primary-light);
1259
+ }
1260
+
1261
+ .nd-band-source { color: var(--nd-text-muted); font-weight: 400; font-size: 9px; }
1262
+ .nd-band-content { position: relative; margin-left: 0; }
1263
+
1264
+ .nd-band-hint {
1265
+ position: absolute;
1266
+ inset: 0;
1267
+ display: flex;
1268
+ flex-direction: column;
1269
+ align-items: center;
1270
+ justify-content: center;
1271
+ gap: 6px;
1272
+ color: var(--nd-text-muted);
1273
+ font-size: 12px;
1274
+ pointer-events: none;
1275
+ opacity: 0;
1276
+ transition: opacity var(--transition);
1277
+ }
1278
+
1279
+ .nd-band:hover .nd-band-hint { opacity: 0.6; }
1280
+ .nd-band-hint i { font-size: 20px; }
1281
+
1282
+ .nd-band-resizer {
1283
+ position: absolute;
1284
+ bottom: -2px;
1285
+ left: 0;
1286
+ width: 100%;
1287
+ height: 6px;
1288
+ cursor: ns-resize;
1289
+ z-index: 30;
1290
+ transition: background var(--transition);
1291
+ }
1292
+
1293
+ .nd-band-resizer:hover { background: rgba(37, 99, 235, 0.15); }
1294
+ .nd-band-resizer.active { background: var(--nd-primary); height: 3px; }
1295
+
1296
+ /* Element Resize Handles */
1297
+ .nd-resize-handle {
1298
+ position: absolute;
1299
+ width: 10px;
1300
+ height: 10px;
1301
+ background: #fff;
1302
+ border: 2px solid var(--nd-primary);
1303
+ border-radius: 50%;
1304
+ z-index: 100;
1305
+ opacity: 0;
1306
+ transition: opacity var(--transition), transform var(--transition);
1307
+ pointer-events: auto;
1308
+ }
1309
+
1310
+ .nd-el:hover .nd-resize-handle,
1311
+ .nd-el.selected .nd-resize-handle {
1312
+ opacity: 1;
1313
+ }
1314
+
1315
+ .nd-resize-handle:hover {
1316
+ transform: scale(1.3);
1317
+ background: var(--nd-primary);
1318
+ box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.2);
1319
+ }
1320
+
1321
+ .nd-resize-handle.top-left {
1322
+ top: -5px;
1323
+ left: -5px;
1324
+ cursor: nwse-resize;
1325
+ }
1326
+
1327
+ .nd-resize-handle.top-right {
1328
+ top: -5px;
1329
+ right: -5px;
1330
+ cursor: nesw-resize;
1331
+ }
1332
+
1333
+ .nd-resize-handle.bottom-left {
1334
+ bottom: -5px;
1335
+ left: -5px;
1336
+ cursor: nesw-resize;
1337
+ }
1338
+
1339
+ .nd-resize-handle.bottom-right {
1340
+ bottom: -5px;
1341
+ right: -5px;
1342
+ cursor: nwse-resize;
1343
+ }
1344
+
1345
+ .nd-el {
1346
+ position: absolute;
1347
+ box-sizing: border-box;
1348
+ border: 1.5px solid transparent;
1349
+ cursor: move;
1350
+ transition: border-color var(--transition), box-shadow var(--transition);
1351
+ z-index: 5;
1352
+ overflow: hidden;
1353
+ display: flex;
1354
+ align-items: center;
1355
+ justify-content: center;
1356
+ padding: 2px;
1357
+ }
1358
+
1359
+ .nd-el:hover {
1360
+ border-color: var(--nd-primary-light);
1361
+ background: rgba(37, 99, 235, 0.03);
1362
+ }
1363
+
1364
+ .nd-el.selected {
1365
+ border-color: var(--nd-primary) !important;
1366
+ background: rgba(37, 99, 235, 0.04);
1367
+ box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.12);
1368
+ z-index: 15;
1369
+ }
1370
+
1371
+ .nd-el.multi-selected {
1372
+ border-color: #8b5cf6 !important;
1373
+ background: rgba(139, 92, 246, 0.06);
1374
+ box-shadow: 0 0 0 2px rgba(139, 92, 246, 0.2);
1375
+ z-index: 14;
1376
+ }
1377
+
1378
+ .nd-el.dragging { opacity: 0.85; z-index: 100; box-shadow: var(--shadow-lg); }
1379
+
1380
+ /* Selection Box */
1381
+ .nd-selection-box {
1382
+ position: absolute;
1383
+ border: 2px dashed #3b82f6;
1384
+ background: rgba(59, 130, 246, 0.08);
1385
+ pointer-events: none;
1386
+ z-index: 9999;
1387
+ border-radius: 2px;
1388
+ }
1389
+
1390
+ /* Shape Rendering */
1391
+ .nd-shape-render {
1392
+ display: flex;
1393
+ align-items: center;
1394
+ justify-content: center;
1395
+ width: 100%;
1396
+ height: 100%;
1397
+ }
1398
+
1399
+ .nd-shape-render svg {
1400
+ width: 100%;
1401
+ height: 100%;
1402
+ }
1403
+
1404
+ .nd-shape-label {
1405
+ display: flex;
1406
+ align-items: center;
1407
+ gap: 4px;
1408
+ font-size: 10px;
1409
+ color: var(--nd-text-muted);
1410
+ }
1411
+
1412
+ /* QR Code placeholder */
1413
+ .nd-qr-placeholder {
1414
+ display: flex;
1415
+ flex-direction: column;
1416
+ align-items: center;
1417
+ justify-content: center;
1418
+ gap: 4px;
1419
+ font-size: 10px;
1420
+ color: var(--nd-text-muted);
1421
+ }
1422
+
1423
+ /* System Variables in Dictionary */
1424
+ .nd-sysvar-category {
1425
+ margin-top: 4px;
1426
+ }
1427
+
1428
+ .nd-sysvar-category-title {
1429
+ font-size: 9px;
1430
+ font-weight: 700;
1431
+ color: var(--nd-text-muted);
1432
+ text-transform: uppercase;
1433
+ letter-spacing: 0.5px;
1434
+ padding: 4px 8px 2px;
1435
+ background: var(--nd-background);
1436
+ border-radius: 3px;
1437
+ }
1438
+
1439
+ .nd-sysvar-item {
1440
+ flex-direction: column;
1441
+ align-items: flex-start;
1442
+ gap: 1px;
1443
+ padding: 4px 8px;
1444
+ }
1445
+
1446
+ .nd-sysvar-example {
1447
+ font-size: 8px;
1448
+ color: #9ca3af;
1449
+ font-style: italic;
1450
+ margin-left: 16px;
1451
+ }
1452
+
1453
+ /* Data Source List in Ribbon */
1454
+ .nd-datasource-list {
1455
+ margin-top: 8px;
1456
+ }
1457
+
1458
+ .nd-ds-grid {
1459
+ display: flex;
1460
+ flex-direction: row;
1461
+ flex-wrap: wrap;
1462
+ gap: 8px;
1463
+ }
1464
+
1465
+ .nd-datasource-item {
1466
+ background: var(--nd-background);
1467
+ border: 1px solid var(--nd-border);
1468
+ border-radius: 6px;
1469
+ padding: 6px 8px;
1470
+ font-size: 10px;
1471
+ min-width: 200px;
1472
+ max-width: 240px;
1473
+ flex: 0 1 auto;
1474
+ }
1475
+
1476
+ .nd-ds-primary {
1477
+ border-color: #3b82f6;
1478
+ background: #f0f7ff;
1479
+ }
1480
+
1481
+ .nd-ds-header {
1482
+ display: flex;
1483
+ align-items: center;
1484
+ justify-content: space-between;
1485
+ margin-bottom: 4px;
1486
+ }
1487
+
1488
+ .nd-ds-badge {
1489
+ font-weight: 700;
1490
+ color: #f59e0b;
1491
+ font-size: 11px;
1492
+ }
1493
+
1494
+ .nd-ds-manual-badge {
1495
+ font-size: 9px;
1496
+ color: #8b5cf6;
1497
+ background: #f3f0ff;
1498
+ padding: 1px 6px;
1499
+ border-radius: 4px;
1500
+ font-weight: 500;
1501
+ }
1502
+
1503
+ .nd-ds-primary .nd-ds-badge {
1504
+ color: #3b82f6;
1505
+ }
1506
+
1507
+ .nd-ds-fields {
1508
+ display: flex;
1509
+ gap: 4px;
1510
+ align-items: center;
1511
+ }
1512
+
1513
+ .nd-ds-select {
1514
+ flex: 1;
1515
+ }
1516
+
1517
+ .nd-ds-alias {
1518
+ width: 70px !important;
1519
+ padding: 2px 4px !important;
1520
+ font-size: 9px !important;
1521
+ border-radius: 3px !important;
1522
+ }
1523
+
1524
+ .p-dropdown-xs,
1525
+ .p-dropdown-xs .p-dropdown-label {
1526
+ font-size: 9px !important;
1527
+ padding: 2px 4px !important;
1528
+ min-height: 22px !important;
1529
+ }
1530
+
1531
+ .p-inputtext-xs {
1532
+ font-size: 9px !important;
1533
+ padding: 2px 4px !important;
1534
+ min-height: 22px !important;
1535
+ }
1536
+
1537
+
1538
+ .nd-placeholder-img {
1539
+ display: flex;
1540
+ align-items: center;
1541
+ justify-content: center;
1542
+ width: 100%;
1543
+ height: 100%;
1544
+ color: var(--nd-text-muted);
1545
+ background: var(--nd-background);
1546
+ }
1547
+
1548
+ .nd-img-preview {
1549
+ width: 100%;
1550
+ height: 100%;
1551
+ object-fit: contain;
1552
+ display: block;
1553
+ }
1554
+
1555
+ .nd-placeholder-bar {
1556
+ display: flex;
1557
+ flex-direction: column;
1558
+ align-items: center;
1559
+ justify-content: center;
1560
+ width: 100%;
1561
+ height: 100%;
1562
+ color: var(--nd-text-muted);
1563
+ font-family: 'Courier New', monospace;
1564
+ }
1565
+
1566
+ .nd-bar-mock { font-size: 16px; letter-spacing: -1px; line-height: 1; }
1567
+
1568
+ .nd-table-render {
1569
+ display: flex;
1570
+ flex-direction: column;
1571
+ width: 100%;
1572
+ height: 100%;
1573
+ border: 1px solid var(--nd-border-strong);
1574
+ background: #fff;
1575
+ overflow: hidden;
1576
+ border-radius: 2px;
1577
+ }
1578
+
1579
+ .nd-table-header {
1580
+ display: flex;
1581
+ background: #f1f5f9;
1582
+ border-bottom: 1px solid var(--nd-border-strong);
1583
+ flex-shrink: 0;
1584
+ }
1585
+
1586
+ .nd-table-row { display: flex; flex: 1; background: #fff; }
1587
+
1588
+ .nd-table-cell {
1589
+ padding: 4px 8px;
1590
+ border-right: 1px solid var(--nd-border);
1591
+ font-size: 11px;
1592
+ white-space: nowrap;
1593
+ overflow: hidden;
1594
+ text-overflow: ellipsis;
1595
+ min-height: 22px;
1596
+ display: flex;
1597
+ align-items: center;
1598
+ }
1599
+
1600
+ .nd-table-cell:last-child { border-right: none; }
1601
+
1602
+ .nd-table-cell.head { font-weight: 600; color: var(--nd-text); background: #f8fafc; }
1603
+
1604
+ .nd-table-cell.body {
1605
+ color: var(--nd-text-secondary);
1606
+ font-family: 'Courier New', monospace;
1607
+ font-style: italic;
1608
+ }
1609
+
1610
+ .nd-footer {
1611
+ height: 30px;
1612
+ background: var(--nd-surface);
1613
+ color: var(--nd-text-secondary);
1614
+ display: flex;
1615
+ align-items: center;
1616
+ padding: 0 12px;
1617
+ font-size: 11px;
1618
+ border-top: 1px solid var(--nd-border);
1619
+ gap: 0;
1620
+ z-index: 50;
1621
+ }
1622
+
1623
+ .nd-f-seg {
1624
+ height: 100%;
1625
+ display: flex;
1626
+ align-items: center;
1627
+ padding: 0 12px;
1628
+ border-right: 1px solid var(--nd-border);
1629
+ white-space: nowrap;
1630
+ gap: 6px;
1631
+ color: var(--nd-text-secondary);
1632
+ }
1633
+
1634
+ .nd-f-seg:last-child { border-right: none; }
1635
+ .nd-f-seg.main { flex: 1; }
1636
+ .nd-f-seg i { font-size: 12px; color: var(--nd-text-muted); }
1637
+
1638
+ .nd-f-lbl {
1639
+ color: var(--nd-text-muted);
1640
+ font-size: 9px;
1641
+ text-transform: uppercase;
1642
+ font-weight: 600;
1643
+ letter-spacing: 0.04em;
1644
+ }
1645
+
1646
+ .nd-f-val { font-weight: 700; color: var(--nd-primary); }
1647
+
1648
+ .nd-zoom {
1649
+ display: flex;
1650
+ align-items: center;
1651
+ gap: 8px;
1652
+ margin-left: auto;
1653
+ padding: 0 12px;
1654
+ border-left: 1px solid var(--nd-border);
1655
+ }
1656
+
1657
+ .nd-zoom span {
1658
+ font-size: 11px;
1659
+ font-weight: 600;
1660
+ color: var(--nd-text-secondary);
1661
+ min-width: 42px;
1662
+ text-align: center;
1663
+ }
1664
+
1665
+ .nd-zoom input[type="range"] { width: 100px; cursor: pointer; accent-color: var(--nd-primary); }
1666
+
1667
+ /* PrimeVue overrides in ribbon */
1668
+ .nd-dropdown-mini,
1669
+ .nd-dropdown-mini .p-dropdown {
1670
+ width: 110px !important;
1671
+ height: 26px !important;
1672
+ font-size: 11px !important;
1673
+ line-height: 26px !important;
1674
+ }
1675
+
1676
+ .nd-dropdown-mini .p-dropdown-label {
1677
+ padding: 0 8px !important;
1678
+ font-size: 11px !important;
1679
+ display: flex;
1680
+ align-items: center;
1681
+ line-height: 24px !important;
1682
+ }
1683
+
1684
+ .nd-dropdown-mini .p-dropdown-trigger {
1685
+ width: 24px !important;
1686
+ }
1687
+
1688
+ .nd-input-mini,
1689
+ .nd-input-mini .p-inputnumber {
1690
+ width: 65px !important;
1691
+ height: 26px !important;
1692
+ }
1693
+
1694
+ .nd-input-mini .p-inputnumber-input {
1695
+ padding: 2px 4px !important;
1696
+ font-size: 11px !important;
1697
+ text-align: center;
1698
+ height: 22px !important;
1699
+ line-height: 18px !important;
1700
+ }
1701
+
1702
+ .nd-toolbar .p-divider.p-divider-vertical {
1703
+ margin: 0 4px;
1704
+ height: 24px;
1705
+ align-self: center;
1706
+ }
1707
+
1708
+ .nd-toolbar .p-divider .p-divider-content { background-color: var(--nd-border); }
1709
+
1710
+ /* Utilities */
1711
+ .w-full { width: 100% !important; }
1712
+ .mt-2 { margin-top: 8px !important; }
1713
+ .mb-2 { margin-bottom: 8px !important; }
1714
+ .block { display: block !important; }
1715
+ .flex { display: flex !important; }
1716
+ .items-center { align-items: center !important; }
1717
+ .gap-2 { gap: 8px !important; }
1718
+ .text-center { text-align: center !important; }
1719
+ .text-\[9px\] { font-size: 9px !important; }
1720
+ .text-\[10px\] { font-size: 10px !important; }
1721
+ .text-gray-400 { color: #9ca3af !important; }
1722
+ .opacity-50 { opacity: 0.5 !important; }
1723
+ .cursor-not-allowed { cursor: not-allowed !important; }