@nice2dev/ui-printing 1.0.28

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.
Files changed (49) hide show
  1. package/README.md +56 -0
  2. package/dist/index.cjs +2 -0
  3. package/dist/index.d.ts +15 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.mjs +3085 -0
  6. package/dist/print-button/NicePrintButton.d.ts +5 -0
  7. package/dist/print-button/NicePrintButton.d.ts.map +1 -0
  8. package/dist/print-button/index.d.ts +2 -0
  9. package/dist/print-button/index.d.ts.map +1 -0
  10. package/dist/print-preview/NicePrintPreview.d.ts +5 -0
  11. package/dist/print-preview/NicePrintPreview.d.ts.map +1 -0
  12. package/dist/print-preview/index.d.ts +2 -0
  13. package/dist/print-preview/index.d.ts.map +1 -0
  14. package/dist/print-queue/NicePrintQueue.d.ts +5 -0
  15. package/dist/print-queue/NicePrintQueue.d.ts.map +1 -0
  16. package/dist/print-queue/index.d.ts +2 -0
  17. package/dist/print-queue/index.d.ts.map +1 -0
  18. package/dist/style.css +1 -0
  19. package/dist/template-browser/NiceTemplateBrowser.d.ts +5 -0
  20. package/dist/template-browser/NiceTemplateBrowser.d.ts.map +1 -0
  21. package/dist/template-browser/index.d.ts +2 -0
  22. package/dist/template-browser/index.d.ts.map +1 -0
  23. package/dist/template-editor/NiceTemplateEditor.d.ts +6 -0
  24. package/dist/template-editor/NiceTemplateEditor.d.ts.map +1 -0
  25. package/dist/template-editor/index.d.ts +2 -0
  26. package/dist/template-editor/index.d.ts.map +1 -0
  27. package/dist/types/printingTypes.d.ts +249 -0
  28. package/dist/types/printingTypes.d.ts.map +1 -0
  29. package/package.json +66 -0
  30. package/src/globals.d.ts +9 -0
  31. package/src/index.ts +69 -0
  32. package/src/print-button/NicePrintButton.tsx +182 -0
  33. package/src/print-button/PrintButton.module.css +167 -0
  34. package/src/print-button/index.ts +1 -0
  35. package/src/print-preview/NicePrintPreview.tsx +417 -0
  36. package/src/print-preview/PrintPreview.module.css +122 -0
  37. package/src/print-preview/index.ts +1 -0
  38. package/src/print-queue/NicePrintQueue.tsx +350 -0
  39. package/src/print-queue/PrintQueue.module.css +203 -0
  40. package/src/print-queue/index.ts +1 -0
  41. package/src/template-browser/NiceTemplateBrowser.tsx +221 -0
  42. package/src/template-browser/TemplateBrowser.module.css +277 -0
  43. package/src/template-browser/index.ts +1 -0
  44. package/src/template-editor/NiceTemplateEditor.tsx +2386 -0
  45. package/src/template-editor/NiceTemplateEditor.tsx.first +1011 -0
  46. package/src/template-editor/NiceTemplateEditor.tsx.tmp +392 -0
  47. package/src/template-editor/TemplateEditor.module.css +1462 -0
  48. package/src/template-editor/index.ts +1 -0
  49. package/src/types/printingTypes.ts +301 -0
@@ -0,0 +1,1462 @@
1
+ /* ─── Root layout ─────────────────────────────────────────────────────────── */
2
+ .root {
3
+ display: flex;
4
+ flex-direction: column;
5
+ height: 100%;
6
+ min-height: 0;
7
+ font-family: system-ui, sans-serif;
8
+ font-size: 12px;
9
+ background: var(--nice-bg-secondary, #f8fafc);
10
+ color: var(--nice-text, #1e293b);
11
+ overflow: hidden;
12
+ }
13
+
14
+ .dark {
15
+ background: var(--nice-text, #0f172a);
16
+ color: var(--nice-border, #e2e8f0);
17
+ }
18
+
19
+ /* ─── Toolbar ─────────────────────────────────────────────────────────────── */
20
+ .toolbar {
21
+ display: flex;
22
+ align-items: center;
23
+ flex-wrap: wrap;
24
+ gap: var(--nice-space-1-5, 6px);
25
+ padding: var(--nice-space-1-5, 6px) var(--nice-space-2-5, 10px);
26
+ background: var(--nice-bg, #FFFFFF);
27
+ border-bottom: 1px solid var(--nice-border, #e2e8f0);
28
+ box-shadow: 0 1px 3px var(--nice-overlay-6, rgba(0, 0, 0, 0.06));
29
+ flex-shrink: 0;
30
+ z-index: 10;
31
+ }
32
+
33
+ .dark .toolbar {
34
+ background: var(--nice-text, #1e293b);
35
+ border-bottom-color: var(--nice-text, #334155);
36
+ }
37
+
38
+ .toolbarGroup {
39
+ display: flex;
40
+ align-items: center;
41
+ gap: var(--nice-space-0-5, 2px);
42
+ padding: 0 var(--nice-space-1-5, 6px);
43
+ border-right: 1px solid var(--nice-border, #e2e8f0);
44
+ }
45
+
46
+ .dark .toolbarGroup {
47
+ border-right-color: var(--nice-text, #334155);
48
+ }
49
+
50
+ .toolbarGroup:last-child {
51
+ border-right: none;
52
+ }
53
+
54
+ .toolbarBtn {
55
+ display: inline-flex;
56
+ align-items: center;
57
+ justify-content: center;
58
+ padding: var(--nice-space-1, 4px) var(--nice-space-1-75, 7px);
59
+ border: 1px solid transparent;
60
+ border-radius: var(--nice-radius-md, 5px);
61
+ background: transparent;
62
+ color: inherit;
63
+ cursor: pointer;
64
+ font-size: 12px;
65
+ min-width: 28px;
66
+ white-space: nowrap;
67
+ transition: background 0.15s, border-color 0.15s;
68
+ }
69
+
70
+ .toolbarBtn:hover:not(:disabled) {
71
+ background: var(--nice-bg-secondary, #f1f5f9);
72
+ border-color: var(--nice-border, #cbd5e1);
73
+ }
74
+
75
+ .dark .toolbarBtn:hover:not(:disabled) {
76
+ background: var(--nice-text, #334155);
77
+ }
78
+
79
+ .toolbarBtn:disabled {
80
+ opacity: 0.35;
81
+ cursor: not-allowed;
82
+ }
83
+
84
+ .toolbarBtnActive {
85
+ background: var(--nice-primary-bg, #dbeafe);
86
+ border-color: var(--nice-primary-light, #93c5fd);
87
+ color: var(--nice-primary-dark, #1d4ed8);
88
+ }
89
+
90
+ .dark .toolbarBtnActive {
91
+ background: var(--nice-primary-dark, #1e3a5f);
92
+ border-color: var(--nice-primary, #3b82f6);
93
+ color: var(--nice-primary-light, #93c5fd);
94
+ }
95
+
96
+ .toolbarBtnDanger:hover:not(:disabled) {
97
+ background: var(--nice-danger-bg, #fee2e2);
98
+ border-color: var(--nice-danger-bg, #fca5a5);
99
+ color: var(--nice-danger-dark, #dc2626);
100
+ }
101
+
102
+ .toolbarSelect {
103
+ padding: var(--nice-space-0-75, 3px) var(--nice-space-1-5, 6px);
104
+ border: 1px solid var(--nice-border, #cbd5e1);
105
+ border-radius: var(--nice-radius-md, 5px);
106
+ background: var(--nice-bg-secondary, #f8fafc);
107
+ color: inherit;
108
+ font-size: 12px;
109
+ cursor: pointer;
110
+ }
111
+
112
+ .dark .toolbarSelect {
113
+ background: var(--nice-text, #1e293b);
114
+ border-color: var(--nice-text-secondary, #475569);
115
+ }
116
+
117
+ .toolbarSep {
118
+ display: inline-block;
119
+ width: 1px;
120
+ height: 16px;
121
+ background: var(--nice-border, #e2e8f0);
122
+ margin: 0 var(--nice-space-0-5, 2px);
123
+ }
124
+
125
+ .dark .toolbarSep {
126
+ background: var(--nice-text, #334155);
127
+ }
128
+
129
+ /* Insert dropdown */
130
+ .insertWrapper {
131
+ position: relative;
132
+ }
133
+
134
+ .insertBtn {
135
+ font-weight: 500;
136
+ color: var(--nice-primary-hover, #2563eb);
137
+ border-color: var(--nice-primary-bg, #bfdbfe);
138
+ background: var(--nice-primary-bg, #eff6ff);
139
+ }
140
+
141
+ .insertBtn:hover {
142
+ background: var(--nice-primary-bg, #dbeafe);
143
+ }
144
+
145
+ .insertDropdown {
146
+ position: absolute;
147
+ top: calc(100% + 4px);
148
+ left: 0;
149
+ background: var(--nice-bg, #FFFFFF);
150
+ border: 1px solid var(--nice-border, #e2e8f0);
151
+ border-radius: var(--nice-radius-lg, 8px);
152
+ box-shadow: 0 8px 24px var(--nice-overlay-12, rgba(0, 0, 0, 0.12));
153
+ min-width: 180px;
154
+ z-index: 100;
155
+ padding: var(--nice-space-1, 4px);
156
+ display: flex;
157
+ flex-direction: column;
158
+ }
159
+
160
+ .dark .insertDropdown {
161
+ background: var(--nice-text, #1e293b);
162
+ border-color: var(--nice-text, #334155);
163
+ }
164
+
165
+ .insertCategory {
166
+ padding: var(--nice-space-1-5, 6px) var(--nice-space-2-5, 10px) var(--nice-space-0-5, 2px);
167
+ font-size: 10px;
168
+ font-weight: 600;
169
+ letter-spacing: .06em;
170
+ text-transform: uppercase;
171
+ color: var(--nice-text-muted, #94a3b8);
172
+ }
173
+
174
+ .insertItem {
175
+ display: flex;
176
+ align-items: center;
177
+ gap: var(--nice-space-2, 8px);
178
+ padding: var(--nice-space-1-5, 6px) var(--nice-space-2-5, 10px);
179
+ border: none;
180
+ background: transparent;
181
+ cursor: pointer;
182
+ font-size: 12px;
183
+ color: inherit;
184
+ border-radius: var(--nice-radius-md, 5px);
185
+ text-align: left;
186
+ }
187
+
188
+ .insertItem:hover {
189
+ background: var(--nice-bg-secondary, #f1f5f9);
190
+ }
191
+
192
+ .dark .insertItem:hover {
193
+ background: var(--nice-text, #334155);
194
+ }
195
+
196
+ .insertIcon {
197
+ font-size: 13px;
198
+ width: 18px;
199
+ text-align: center;
200
+ }
201
+
202
+ /* Zoom */
203
+ .zoomSelect {
204
+ padding: var(--nice-space-0-75, 3px) var(--nice-space-1, 4px);
205
+ border: 1px solid var(--nice-border, #cbd5e1);
206
+ border-radius: var(--nice-radius-md, 5px);
207
+ background: var(--nice-bg-secondary, #f8fafc);
208
+ color: inherit;
209
+ font-size: 12px;
210
+ width: 60px;
211
+ }
212
+
213
+ .dark .zoomSelect {
214
+ background: var(--nice-text, #1e293b);
215
+ border-color: var(--nice-text-secondary, #475569);
216
+ }
217
+
218
+ /* Save button */
219
+ .saveBtn {
220
+ margin-left: auto;
221
+ padding: var(--nice-space-1-25, 5px) var(--nice-space-3-5, 14px);
222
+ background: var(--nice-primary-hover, #2563eb);
223
+ color: var(--nice-bg, #FFF);
224
+ border: none;
225
+ border-radius: var(--nice-radius-md, 6px);
226
+ cursor: pointer;
227
+ font-size: 12px;
228
+ font-weight: 500;
229
+ transition: background 0.15s;
230
+ }
231
+
232
+ .saveBtn:hover {
233
+ background: var(--nice-primary-dark, #1d4ed8);
234
+ }
235
+
236
+ /* ─── Editor body layout ──────────────────────────────────────────────────── */
237
+ .editorBody {
238
+ display: flex;
239
+ flex: 1;
240
+ min-height: 0;
241
+ overflow: hidden;
242
+ }
243
+
244
+ /* ─── Left panel ──────────────────────────────────────────────────────────── */
245
+ .leftPanel {
246
+ display: flex;
247
+ flex-direction: column;
248
+ width: 220px;
249
+ flex-shrink: 0;
250
+ border-right: 1px solid var(--nice-border, #e2e8f0);
251
+ background: var(--nice-bg, #FFFFFF);
252
+ overflow: hidden;
253
+ }
254
+
255
+ .dark .leftPanel {
256
+ background: var(--nice-text, #1e293b);
257
+ border-right-color: var(--nice-text, #334155);
258
+ }
259
+
260
+ .leftTabs {
261
+ display: flex;
262
+ border-bottom: 1px solid var(--nice-border, #e2e8f0);
263
+ flex-shrink: 0;
264
+ }
265
+
266
+ .dark .leftTabs {
267
+ border-bottom-color: var(--nice-text, #334155);
268
+ }
269
+
270
+ .leftTab {
271
+ flex: 1;
272
+ display: flex;
273
+ flex-direction: column;
274
+ align-items: center;
275
+ gap: var(--nice-space-0-5, 2px);
276
+ padding: var(--nice-space-2, 8px) var(--nice-space-0-5, 2px);
277
+ border: none;
278
+ background: transparent;
279
+ color: var(--nice-text-secondary, #64748b);
280
+ cursor: pointer;
281
+ font-size: 10px;
282
+ border-bottom: 2px solid transparent;
283
+ transition: color 0.15s, border-color 0.15s, background 0.15s;
284
+ }
285
+
286
+ .leftTab:hover {
287
+ background: var(--nice-bg-secondary, #f8fafc);
288
+ color: var(--nice-text, #1e293b);
289
+ }
290
+
291
+ .dark .leftTab:hover {
292
+ background: var(--nice-text, #0f172a);
293
+ color: var(--nice-border, #e2e8f0);
294
+ }
295
+
296
+ .leftTabActive {
297
+ color: var(--nice-primary-hover, #2563eb);
298
+ border-bottom-color: var(--nice-primary-hover, #2563eb);
299
+ background: var(--nice-primary-bg, #eff6ff);
300
+ }
301
+
302
+ .dark .leftTabActive {
303
+ background: var(--nice-primary-dark, #1e3a5f);
304
+ }
305
+
306
+ .leftTabIcon {
307
+ font-size: 14px;
308
+ }
309
+
310
+ .leftTabLabel {
311
+ font-size: 9px;
312
+ font-weight: 500;
313
+ }
314
+
315
+ .leftContent {
316
+ flex: 1;
317
+ overflow-y: auto;
318
+ padding: var(--nice-space-2, 8px) 0;
319
+ }
320
+
321
+ /* Panel headers */
322
+ .panelHeader {
323
+ padding: var(--nice-space-2, 8px) var(--nice-space-3, 12px) var(--nice-space-1, 4px);
324
+ font-size: 11px;
325
+ font-weight: 600;
326
+ color: var(--nice-text-secondary, #475569);
327
+ text-transform: uppercase;
328
+ letter-spacing: .04em;
329
+ display: flex;
330
+ align-items: center;
331
+ gap: var(--nice-space-1-5, 6px);
332
+ }
333
+
334
+ .panelHeaderIcon {
335
+ font-size: 13px;
336
+ }
337
+
338
+ .panelHeaderName {
339
+ flex: 1;
340
+ overflow: hidden;
341
+ text-overflow: ellipsis;
342
+ white-space: nowrap;
343
+ }
344
+
345
+ .searchBox {
346
+ padding: var(--nice-space-1, 4px) var(--nice-space-2-5, 10px) var(--nice-space-1-5, 6px);
347
+ }
348
+
349
+ .searchInput {
350
+ width: 100%;
351
+ padding: var(--nice-space-1-25, 5px) var(--nice-space-2, 8px);
352
+ border: 1px solid var(--nice-border, #e2e8f0);
353
+ border-radius: var(--nice-radius-md, 6px);
354
+ font-size: 12px;
355
+ background: var(--nice-bg-secondary, #f8fafc);
356
+ color: inherit;
357
+ box-sizing: border-box;
358
+ }
359
+
360
+ .dark .searchInput {
361
+ background: var(--nice-text, #0f172a);
362
+ border-color: var(--nice-text-secondary, #475569);
363
+ color: var(--nice-border, #e2e8f0);
364
+ }
365
+
366
+ .searchInput:focus {
367
+ outline: 2px solid var(--nice-primary, #3b82f6);
368
+ outline-offset: -1px;
369
+ }
370
+
371
+ /* Field list (schema fields) */
372
+ .fieldList {
373
+ display: flex;
374
+ flex-direction: column;
375
+ }
376
+
377
+ .fieldItem {
378
+ display: flex;
379
+ align-items: center;
380
+ gap: var(--nice-space-2, 8px);
381
+ padding: var(--nice-space-1-5, 6px) var(--nice-space-3, 12px);
382
+ cursor: grab;
383
+ border-radius: 0;
384
+ transition: background 0.12s;
385
+ }
386
+
387
+ .fieldItem:hover {
388
+ background: var(--nice-bg-secondary, #f1f5f9);
389
+ }
390
+
391
+ .dark .fieldItem:hover {
392
+ background: var(--nice-text, #334155);
393
+ }
394
+
395
+ .fieldItem:active {
396
+ cursor: grabbing;
397
+ }
398
+
399
+ .fieldItemIcon {
400
+ font-size: 13px;
401
+ width: 18px;
402
+ text-align: center;
403
+ flex-shrink: 0;
404
+ }
405
+
406
+ .fieldItemInfo {
407
+ flex: 1;
408
+ min-width: 0;
409
+ }
410
+
411
+ .fieldItemLabel {
412
+ font-size: 12px;
413
+ font-weight: 500;
414
+ overflow: hidden;
415
+ text-overflow: ellipsis;
416
+ white-space: nowrap;
417
+ }
418
+
419
+ .fieldItemPath {
420
+ font-size: 10px;
421
+ color: var(--nice-text-muted, #94a3b8);
422
+ overflow: hidden;
423
+ text-overflow: ellipsis;
424
+ white-space: nowrap;
425
+ }
426
+
427
+ .fieldItemType {
428
+ font-size: 9px;
429
+ background: var(--nice-border, #e2e8f0);
430
+ color: var(--nice-text-secondary, #475569);
431
+ padding: var(--nice-space-px, 1px) var(--nice-space-1-25, 5px);
432
+ border-radius: var(--nice-radius-sm, 3px);
433
+ flex-shrink: 0;
434
+ }
435
+
436
+ /* Layers list */
437
+ .layerList {
438
+ display: flex;
439
+ flex-direction: column;
440
+ padding: var(--nice-space-0-5, 2px) 0;
441
+ }
442
+
443
+ .layerItem {
444
+ display: flex;
445
+ align-items: center;
446
+ gap: var(--nice-space-2, 8px);
447
+ padding: var(--nice-space-1-25, 5px) var(--nice-space-2-5, 10px) var(--nice-space-1-25, 5px) var(--nice-space-3, 12px);
448
+ cursor: pointer;
449
+ transition: background 0.12s;
450
+ }
451
+
452
+ .layerItem:hover {
453
+ background: var(--nice-bg-secondary, #f1f5f9);
454
+ }
455
+
456
+ .dark .layerItem:hover {
457
+ background: var(--nice-text, #334155);
458
+ }
459
+
460
+ .layerItemSelected {
461
+ background: var(--nice-primary-bg, #eff6ff);
462
+ border-left: 2px solid var(--nice-primary-hover, #2563eb);
463
+ }
464
+
465
+ .dark .layerItemSelected {
466
+ background: var(--nice-primary-dark, #1e3a5f);
467
+ }
468
+
469
+ .layerIcon {
470
+ font-size: 12px;
471
+ width: 16px;
472
+ text-align: center;
473
+ }
474
+
475
+ .layerName {
476
+ flex: 1;
477
+ font-size: 12px;
478
+ overflow: hidden;
479
+ text-overflow: ellipsis;
480
+ white-space: nowrap;
481
+ }
482
+
483
+ .layerActions {
484
+ display: flex;
485
+ gap: var(--nice-space-0-5, 2px);
486
+ opacity: 0;
487
+ transition: opacity 0.15s;
488
+ }
489
+
490
+ .layerItem:hover .layerActions {
491
+ opacity: 1;
492
+ }
493
+
494
+ .layerBtn {
495
+ padding: var(--nice-space-0-5, 2px) var(--nice-space-1-25, 5px);
496
+ border: 1px solid var(--nice-border, #e2e8f0);
497
+ border-radius: var(--nice-radius-sm, 3px);
498
+ background: transparent;
499
+ cursor: pointer;
500
+ font-size: 11px;
501
+ color: inherit;
502
+ line-height: 1;
503
+ }
504
+
505
+ .layerBtn:hover {
506
+ background: var(--nice-bg-secondary, #f1f5f9);
507
+ }
508
+
509
+ /* Watermarks / Signatures list */
510
+ .wmList {
511
+ padding: var(--nice-space-1, 4px) var(--nice-space-2-5, 10px);
512
+ }
513
+
514
+ .wmItem {
515
+ background: var(--nice-bg-secondary, #f8fafc);
516
+ border: 1px solid var(--nice-border, #e2e8f0);
517
+ border-radius: var(--nice-radius-lg, 8px);
518
+ padding: var(--nice-space-2, 8px) var(--nice-space-2-5, 10px);
519
+ margin-bottom: var(--nice-space-2, 8px);
520
+ }
521
+
522
+ .dark .wmItem {
523
+ background: var(--nice-text, #0f172a);
524
+ border-color: var(--nice-text, #334155);
525
+ }
526
+
527
+ .wmRow {
528
+ display: flex;
529
+ align-items: center;
530
+ gap: var(--nice-space-1-5, 6px);
531
+ margin-bottom: var(--nice-space-1-25, 5px);
532
+ }
533
+
534
+ .wmLabel {
535
+ font-size: 11px;
536
+ color: var(--nice-text-secondary, #64748b);
537
+ min-width: 52px;
538
+ }
539
+
540
+ .wmInput {
541
+ flex: 1;
542
+ padding: var(--nice-space-1, 4px) var(--nice-space-1-5, 6px);
543
+ border: 1px solid var(--nice-border, #e2e8f0);
544
+ border-radius: var(--nice-radius-sm, 4px);
545
+ font-size: 12px;
546
+ background: var(--nice-bg, #FFF);
547
+ color: inherit;
548
+ }
549
+
550
+ .dark .wmInput {
551
+ background: var(--nice-text, #1e293b);
552
+ border-color: var(--nice-text-secondary, #475569);
553
+ color: var(--nice-border, #e2e8f0);
554
+ }
555
+
556
+ .wmInputNum {
557
+ width: 54px;
558
+ padding: var(--nice-space-1, 4px) var(--nice-space-1-5, 6px);
559
+ border: 1px solid var(--nice-border, #e2e8f0);
560
+ border-radius: var(--nice-radius-sm, 4px);
561
+ font-size: 12px;
562
+ background: var(--nice-bg, #FFF);
563
+ color: inherit;
564
+ }
565
+
566
+ .wmSelect {
567
+ flex: 1;
568
+ padding: var(--nice-space-1, 4px) var(--nice-space-1-5, 6px);
569
+ border: 1px solid var(--nice-border, #e2e8f0);
570
+ border-radius: var(--nice-radius-sm, 4px);
571
+ font-size: 12px;
572
+ background: var(--nice-bg, #FFF);
573
+ color: inherit;
574
+ }
575
+
576
+ .dark .wmSelect {
577
+ background: var(--nice-text, #1e293b);
578
+ border-color: var(--nice-text-secondary, #475569);
579
+ color: var(--nice-border, #e2e8f0);
580
+ }
581
+
582
+ .wmSlider {
583
+ flex: 1;
584
+ accent-color: var(--nice-primary-hover, #2563eb);
585
+ }
586
+
587
+ .wmValue {
588
+ font-size: 11px;
589
+ color: var(--nice-text-secondary, #64748b);
590
+ min-width: 32px;
591
+ text-align: right;
592
+ }
593
+
594
+ .wmUnit {
595
+ font-size: 11px;
596
+ color: var(--nice-text-muted, #94a3b8);
597
+ }
598
+
599
+ .wmDelete {
600
+ width: 100%;
601
+ margin-top: var(--nice-space-1, 4px);
602
+ padding: var(--nice-space-1, 4px);
603
+ border: 1px solid var(--nice-danger-bg, #fca5a5);
604
+ border-radius: var(--nice-radius-md, 5px);
605
+ background: var(--nice-bg, #FFF);
606
+ color: var(--nice-danger, #ef4444);
607
+ font-size: 11px;
608
+ cursor: pointer;
609
+ }
610
+
611
+ .wmDelete:hover {
612
+ background: var(--nice-danger-bg, #fee2e2);
613
+ }
614
+
615
+ .addBtn {
616
+ width: 100%;
617
+ padding: var(--nice-space-1-75, 7px);
618
+ border: 1px dashed var(--nice-border, #cbd5e1);
619
+ border-radius: var(--nice-radius-md, 6px);
620
+ background: transparent;
621
+ color: var(--nice-primary-hover, #2563eb);
622
+ font-size: 12px;
623
+ cursor: pointer;
624
+ margin-top: var(--nice-space-1, 4px);
625
+ }
626
+
627
+ .addBtn:hover {
628
+ background: var(--nice-primary-bg, #eff6ff);
629
+ border-color: var(--nice-primary-light, #93c5fd);
630
+ }
631
+
632
+ /* Settings form */
633
+ .settingsForm {
634
+ padding: var(--nice-space-1, 4px) var(--nice-space-2-5, 10px);
635
+ }
636
+
637
+ .settingsRow {
638
+ display: flex;
639
+ align-items: center;
640
+ gap: var(--nice-space-1-5, 6px);
641
+ margin-bottom: var(--nice-space-1-75, 7px);
642
+ }
643
+
644
+ .settingsLabel {
645
+ font-size: 11px;
646
+ color: var(--nice-text-secondary, #64748b);
647
+ min-width: 60px;
648
+ }
649
+
650
+ .settingsInput {
651
+ flex: 1;
652
+ padding: var(--nice-space-1, 4px) var(--nice-space-1-75, 7px);
653
+ border: 1px solid var(--nice-border, #e2e8f0);
654
+ border-radius: var(--nice-radius-md, 5px);
655
+ font-size: 12px;
656
+ background: var(--nice-bg, #FFF);
657
+ color: inherit;
658
+ }
659
+
660
+ .dark .settingsInput {
661
+ background: var(--nice-text, #0f172a);
662
+ border-color: var(--nice-text-secondary, #475569);
663
+ color: var(--nice-border, #e2e8f0);
664
+ }
665
+
666
+ .settingsInputNum {
667
+ width: 56px;
668
+ padding: var(--nice-space-1, 4px) var(--nice-space-1-75, 7px);
669
+ border: 1px solid var(--nice-border, #e2e8f0);
670
+ border-radius: var(--nice-radius-md, 5px);
671
+ font-size: 12px;
672
+ background: var(--nice-bg, #FFF);
673
+ color: inherit;
674
+ }
675
+
676
+ .dark .settingsInputNum {
677
+ background: var(--nice-text, #0f172a);
678
+ border-color: var(--nice-text-secondary, #475569);
679
+ color: var(--nice-border, #e2e8f0);
680
+ }
681
+
682
+ .settingsTextarea {
683
+ flex: 1;
684
+ padding: var(--nice-space-1, 4px) var(--nice-space-1-75, 7px);
685
+ border: 1px solid var(--nice-border, #e2e8f0);
686
+ border-radius: var(--nice-radius-md, 5px);
687
+ font-size: 12px;
688
+ background: var(--nice-bg, #FFF);
689
+ color: inherit;
690
+ resize: vertical;
691
+ }
692
+
693
+ .dark .settingsTextarea {
694
+ background: var(--nice-text, #0f172a);
695
+ border-color: var(--nice-text-secondary, #475569);
696
+ color: var(--nice-border, #e2e8f0);
697
+ }
698
+
699
+ .settingsDivider {
700
+ margin: var(--nice-space-2-5, 10px) 0 var(--nice-space-1-5, 6px);
701
+ padding: 0;
702
+ font-size: 10px;
703
+ font-weight: 600;
704
+ text-transform: uppercase;
705
+ letter-spacing: .06em;
706
+ color: var(--nice-text-muted, #94a3b8);
707
+ }
708
+
709
+ .settingsUnit {
710
+ font-size: 11px;
711
+ color: var(--nice-text-muted, #94a3b8);
712
+ }
713
+
714
+ /* Empty message */
715
+ .emptyMsg {
716
+ padding: var(--nice-space-4, 16px) var(--nice-space-3, 12px);
717
+ font-size: 11px;
718
+ color: var(--nice-text-muted, #94a3b8);
719
+ text-align: center;
720
+ line-height: 1.5;
721
+ }
722
+
723
+ /* ─── Canvas area ─────────────────────────────────────────────────────────── */
724
+ .canvasArea {
725
+ flex: 1;
726
+ display: flex;
727
+ flex-direction: column;
728
+ min-width: 0;
729
+ overflow: hidden;
730
+ background: var(--nice-bg-secondary, #f1f5f9);
731
+ }
732
+
733
+ .dark .canvasArea {
734
+ background: var(--nice-text, #0f172a);
735
+ }
736
+
737
+ .testDataBar {
738
+ display: flex;
739
+ align-items: center;
740
+ gap: var(--nice-space-2, 8px);
741
+ padding: var(--nice-space-1-25, 5px) var(--nice-space-3, 12px);
742
+ background: var(--nice-warning-bg, #fffbeb);
743
+ border-bottom: 1px solid var(--nice-warning-light, #fcd34d);
744
+ font-size: 11px;
745
+ flex-shrink: 0;
746
+ }
747
+
748
+ .dark .testDataBar {
749
+ background: #1c1709;
750
+ border-bottom-color: var(--nice-warning-dark, #78350f);
751
+ }
752
+
753
+ .testDataLabel {
754
+ font-weight: 500;
755
+ color: var(--nice-warning-dark, #92400e);
756
+ }
757
+
758
+ .testDataSelect {
759
+ padding: var(--nice-space-0-5, 2px) var(--nice-space-1-5, 6px);
760
+ border: 1px solid var(--nice-warning-light, #fcd34d);
761
+ border-radius: var(--nice-radius-sm, 4px);
762
+ font-size: 11px;
763
+ background: var(--nice-bg, #FFF);
764
+ color: inherit;
765
+ }
766
+
767
+ /* Ruler wrapper */
768
+ .rulerWrapper {
769
+ position: relative;
770
+ display: flex;
771
+ flex-shrink: 0;
772
+ pointer-events: none;
773
+ padding-left: var(--nice-space-5, 20px);
774
+ }
775
+
776
+ .rulerCorner {
777
+ position: absolute;
778
+ top: 0;
779
+ left: 0;
780
+ width: 20px;
781
+ height: 20px;
782
+ background: var(--nice-border, #e2e8f0);
783
+ z-index: 5;
784
+ border-right: 1px solid var(--nice-border, #cbd5e1);
785
+ border-bottom: 1px solid var(--nice-border, #cbd5e1);
786
+ }
787
+
788
+ .dark .rulerCorner {
789
+ background: var(--nice-text, #334155);
790
+ border-color: var(--nice-text-secondary, #475569);
791
+ }
792
+
793
+ .ruler {
794
+ position: relative;
795
+ background: var(--nice-bg-secondary, #f8fafc);
796
+ border-bottom: 1px solid var(--nice-border, #e2e8f0);
797
+ overflow: hidden;
798
+ }
799
+
800
+ .dark .ruler {
801
+ background: var(--nice-text, #1e293b);
802
+ border-bottom-color: var(--nice-text, #334155);
803
+ }
804
+
805
+ .ruler_h {
806
+ width: 100%;
807
+ height: 20px;
808
+ }
809
+
810
+ .ruler_v {
811
+ position: absolute;
812
+ left: 0;
813
+ top: 20px;
814
+ width: 20px;
815
+ height: calc(100% - 20px);
816
+ border-right: 1px solid var(--nice-border, #e2e8f0);
817
+ border-bottom: none;
818
+ }
819
+
820
+ .rulerTick {
821
+ position: absolute;
822
+ top: auto;
823
+ bottom: 0;
824
+ width: 1px;
825
+ height: 5px;
826
+ background: var(--nice-text-muted, #94a3b8);
827
+ transform: translateX(-50%);
828
+ }
829
+
830
+ .ruler_v .rulerTick {
831
+ top: 0;
832
+ bottom: auto;
833
+ left: auto;
834
+ right: 0;
835
+ width: 5px;
836
+ height: 1px;
837
+ transform: translateY(-50%);
838
+ }
839
+
840
+ .rulerTickMajor {
841
+ height: 10px;
842
+ background: var(--nice-text-secondary, #64748b);
843
+ }
844
+
845
+ .ruler_v .rulerTickMajor {
846
+ height: 1px;
847
+ width: 10px;
848
+ }
849
+
850
+ .rulerLabel {
851
+ position: absolute;
852
+ bottom: 12px;
853
+ left: 2px;
854
+ font-size: 8px;
855
+ color: var(--nice-text-secondary, #64748b);
856
+ user-select: none;
857
+ white-space: nowrap;
858
+ }
859
+
860
+ .ruler_v .rulerLabel {
861
+ bottom: auto;
862
+ top: 2px;
863
+ left: -2px;
864
+ transform: rotate(-90deg) translateX(50%);
865
+ transform-origin: left top;
866
+ }
867
+
868
+ /* Scrollable paper area */
869
+ .paperScroll {
870
+ flex: 1;
871
+ overflow: auto;
872
+ padding: var(--nice-space-6, 24px);
873
+ display: flex;
874
+ justify-content: center;
875
+ align-items: flex-start;
876
+ }
877
+
878
+ .paperShadow {
879
+ position: relative;
880
+ background: var(--nice-bg, #FFFFFF);
881
+ box-shadow: 0 4px 24px var(--nice-overlay-20, rgba(0, 0, 0, 0.18)), 0 1px 4px var(--nice-overlay-8, rgba(0, 0, 0, 0.08));
882
+ flex-shrink: 0;
883
+ }
884
+
885
+ .dark .paperShadow {
886
+ background: var(--nice-bg-secondary, #f8fafc);
887
+ }
888
+
889
+ /* Margin guide overlay */
890
+ .marginGuide {
891
+ position: absolute;
892
+ pointer-events: none;
893
+ border: 1px dashed rgba(59,130,246,.35);
894
+ z-index: 0;
895
+ }
896
+
897
+ /* Watermark */
898
+ .watermark {
899
+ position: absolute;
900
+ top: 50%;
901
+ left: 50%;
902
+ pointer-events: none;
903
+ font-weight: 900;
904
+ white-space: nowrap;
905
+ user-select: none;
906
+ letter-spacing: .1em;
907
+ z-index: 0;
908
+ }
909
+
910
+ /* ─── Section canvas ──────────────────────────────────────────────────────── */
911
+ .sectionCanvas {
912
+ position: relative;
913
+ width: 100%;
914
+ transition: box-shadow 0.15s;
915
+ box-sizing: border-box;
916
+ }
917
+
918
+ .sectionCanvasOver {
919
+ box-shadow: inset 0 0 0 2px var(--nice-primary, #3b82f6);
920
+ }
921
+
922
+ .sectionTypeChip {
923
+ position: absolute;
924
+ top: 3px;
925
+ left: 3px;
926
+ font-size: 9px;
927
+ font-weight: 600;
928
+ text-transform: uppercase;
929
+ letter-spacing: .06em;
930
+ padding: var(--nice-space-px, 1px) var(--nice-space-1-25, 5px);
931
+ border-radius: var(--nice-radius-sm, 3px);
932
+ background: rgba(148,163,184,.25);
933
+ color: var(--nice-text-secondary, #64748b);
934
+ pointer-events: none;
935
+ z-index: 50;
936
+ }
937
+
938
+ .sectionResizeBar {
939
+ position: absolute;
940
+ bottom: 0;
941
+ left: 0;
942
+ right: 0;
943
+ height: 6px;
944
+ cursor: ns-resize;
945
+ display: flex;
946
+ align-items: center;
947
+ justify-content: center;
948
+ z-index: 20;
949
+ }
950
+
951
+ .sectionResizeBar:hover {
952
+ background: var(--nice-primary-tint-15, rgba(59, 130, 246, 0.15));
953
+ }
954
+
955
+ .sectionResizeGrip {
956
+ width: 40px;
957
+ height: 3px;
958
+ border-radius: var(--nice-radius-full, 99px);
959
+ background: var(--nice-border, #cbd5e1);
960
+ }
961
+
962
+ /* ─── Field element ───────────────────────────────────────────────────────── */
963
+ .fieldImagePlaceholder {
964
+ width: 100%;
965
+ height: 100%;
966
+ display: flex;
967
+ align-items: center;
968
+ justify-content: center;
969
+ background: var(--nice-bg-secondary, #f1f5f9);
970
+ color: var(--nice-text-muted, #94a3b8);
971
+ font-size: 18px;
972
+ }
973
+
974
+ .fieldBarcodePlaceholder {
975
+ width: 100%;
976
+ height: 100%;
977
+ display: flex;
978
+ align-items: center;
979
+ justify-content: center;
980
+ background: var(--nice-bg-secondary, #f8fafc);
981
+ color: var(--nice-text-secondary, #64748b);
982
+ font-size: 10px;
983
+ font-family: monospace;
984
+ letter-spacing: .05em;
985
+ border: 1px solid var(--nice-border, #e2e8f0);
986
+ }
987
+
988
+ .fieldSignaturePlaceholder {
989
+ width: 100%;
990
+ height: 100%;
991
+ display: flex;
992
+ align-items: flex-end;
993
+ padding: var(--nice-space-1, 4px);
994
+ border-bottom: 1px solid var(--nice-text, #1e293b);
995
+ color: var(--nice-text-muted, #94a3b8);
996
+ font-size: 10px;
997
+ box-sizing: border-box;
998
+ }
999
+
1000
+ /* ─── Resize handles ──────────────────────────────────────────────────────── */
1001
+ .resizeHandle {
1002
+ position: absolute;
1003
+ width: 8px;
1004
+ height: 8px;
1005
+ background: var(--nice-primary-hover, #2563eb);
1006
+ border: 1.5px solid var(--nice-bg, #FFF);
1007
+ border-radius: var(--nice-radius-sm, 2px);
1008
+ z-index: 100;
1009
+ }
1010
+
1011
+ .handle_n { top: -4px; left: 50%; transform: translateX(-50%); cursor: n-resize; }
1012
+ .handle_s { bottom: -4px; left: 50%; transform: translateX(-50%); cursor: s-resize; }
1013
+ .handle_e { right: -4px; top: 50%; transform: translateY(-50%); cursor: e-resize; }
1014
+ .handle_w { left: -4px; top: 50%; transform: translateY(-50%); cursor: w-resize; }
1015
+ .handle_ne { top: -4px; right: -4px; cursor: ne-resize; }
1016
+ .handle_nw { top: -4px; left: -4px; cursor: nw-resize; }
1017
+ .handle_se { bottom: -4px; right: -4px; cursor: se-resize; }
1018
+ .handle_sw { bottom: -4px; left: -4px; cursor: sw-resize; }
1019
+
1020
+ /* ─── Right properties panel ──────────────────────────────────────────────── */
1021
+ .rightPanel {
1022
+ width: 240px;
1023
+ flex-shrink: 0;
1024
+ display: flex;
1025
+ flex-direction: column;
1026
+ border-left: 1px solid var(--nice-border, #e2e8f0);
1027
+ background: var(--nice-bg, #FFFFFF);
1028
+ overflow: hidden;
1029
+ }
1030
+
1031
+ .dark .rightPanel {
1032
+ background: var(--nice-text, #1e293b);
1033
+ border-left-color: var(--nice-text, #334155);
1034
+ }
1035
+
1036
+ .rightTabs {
1037
+ display: flex;
1038
+ border-bottom: 1px solid var(--nice-border, #e2e8f0);
1039
+ flex-shrink: 0;
1040
+ }
1041
+
1042
+ .dark .rightTabs {
1043
+ border-bottom-color: var(--nice-text, #334155);
1044
+ }
1045
+
1046
+ .rightTab {
1047
+ flex: 1;
1048
+ padding: var(--nice-space-1-75, 7px) var(--nice-space-1, 4px);
1049
+ border: none;
1050
+ background: transparent;
1051
+ color: var(--nice-text-secondary, #64748b);
1052
+ cursor: pointer;
1053
+ font-size: 11px;
1054
+ border-bottom: 2px solid transparent;
1055
+ transition: color 0.12s, border-color 0.12s, background 0.12s;
1056
+ }
1057
+
1058
+ .rightTab:hover {
1059
+ background: var(--nice-bg-secondary, #f8fafc);
1060
+ color: var(--nice-text, #1e293b);
1061
+ }
1062
+
1063
+ .dark .rightTab:hover {
1064
+ background: var(--nice-text, #0f172a);
1065
+ color: var(--nice-border, #e2e8f0);
1066
+ }
1067
+
1068
+ .rightTabActive {
1069
+ color: var(--nice-primary-hover, #2563eb);
1070
+ border-bottom-color: var(--nice-primary-hover, #2563eb);
1071
+ font-weight: 500;
1072
+ }
1073
+
1074
+ .propsBody {
1075
+ flex: 1;
1076
+ overflow-y: auto;
1077
+ padding: var(--nice-space-2, 8px) var(--nice-space-2-5, 10px);
1078
+ }
1079
+
1080
+ .propsEmpty {
1081
+ flex: 1;
1082
+ display: flex;
1083
+ flex-direction: column;
1084
+ align-items: center;
1085
+ justify-content: center;
1086
+ gap: var(--nice-space-3, 12px);
1087
+ padding: var(--nice-space-6, 24px) var(--nice-space-4, 16px);
1088
+ color: var(--nice-text-muted, #94a3b8);
1089
+ }
1090
+
1091
+ .propsEmptyIcon {
1092
+ font-size: 36px;
1093
+ opacity: 0.4;
1094
+ }
1095
+
1096
+ .propsEmptyText {
1097
+ font-size: 12px;
1098
+ text-align: center;
1099
+ }
1100
+
1101
+ /* ─── Position tab ────────────────────────────────────────────────────────── */
1102
+ .posGrid {
1103
+ display: grid;
1104
+ grid-template-columns: 1fr 1fr;
1105
+ gap: var(--nice-space-1-5, 6px);
1106
+ margin-bottom: var(--nice-space-2-5, 10px);
1107
+ }
1108
+
1109
+ .posCell {
1110
+ display: flex;
1111
+ align-items: center;
1112
+ gap: var(--nice-space-0-75, 3px);
1113
+ }
1114
+
1115
+ .posLabel {
1116
+ font-size: 10px;
1117
+ color: var(--nice-text-secondary, #64748b);
1118
+ min-width: 28px;
1119
+ }
1120
+
1121
+ .posInput {
1122
+ width: 54px;
1123
+ padding: var(--nice-space-1, 4px) var(--nice-space-1-25, 5px);
1124
+ border: 1px solid var(--nice-border, #e2e8f0);
1125
+ border-radius: var(--nice-radius-sm, 4px);
1126
+ font-size: 12px;
1127
+ background: var(--nice-bg, #FFF);
1128
+ color: inherit;
1129
+ }
1130
+
1131
+ .dark .posInput {
1132
+ background: var(--nice-text, #0f172a);
1133
+ border-color: var(--nice-text-secondary, #475569);
1134
+ color: var(--nice-border, #e2e8f0);
1135
+ }
1136
+
1137
+ .posInput:focus {
1138
+ outline: 2px solid var(--nice-primary, #3b82f6);
1139
+ outline-offset: -1px;
1140
+ }
1141
+
1142
+ .posUnit {
1143
+ font-size: 10px;
1144
+ color: var(--nice-text-muted, #94a3b8);
1145
+ }
1146
+
1147
+ /* Snap row */
1148
+ .snapSection {
1149
+ margin-top: var(--nice-space-2, 8px);
1150
+ }
1151
+
1152
+ .snapTitle {
1153
+ font-size: 10px;
1154
+ font-weight: 600;
1155
+ text-transform: uppercase;
1156
+ letter-spacing: .06em;
1157
+ color: var(--nice-text-muted, #94a3b8);
1158
+ margin-bottom: var(--nice-space-1-25, 5px);
1159
+ }
1160
+
1161
+ .snapRow {
1162
+ display: flex;
1163
+ gap: var(--nice-space-1, 4px);
1164
+ }
1165
+
1166
+ .snapBtn {
1167
+ flex: 1;
1168
+ padding: var(--nice-space-1-25, 5px);
1169
+ border: 1px solid var(--nice-border, #e2e8f0);
1170
+ border-radius: var(--nice-radius-md, 5px);
1171
+ background: var(--nice-bg-secondary, #f8fafc);
1172
+ color: inherit;
1173
+ font-size: 13px;
1174
+ cursor: pointer;
1175
+ }
1176
+
1177
+ .snapBtn:hover {
1178
+ background: var(--nice-primary-bg, #eff6ff);
1179
+ border-color: var(--nice-primary-light, #93c5fd);
1180
+ }
1181
+
1182
+ /* ─── Style tab ───────────────────────────────────────────────────────────── */
1183
+ .styleGroup {
1184
+ margin-bottom: var(--nice-space-2-5, 10px);
1185
+ }
1186
+
1187
+ .styleGroupTitle {
1188
+ font-size: 10px;
1189
+ font-weight: 600;
1190
+ text-transform: uppercase;
1191
+ letter-spacing: .06em;
1192
+ color: var(--nice-text-muted, #94a3b8);
1193
+ margin-bottom: var(--nice-space-1-5, 6px);
1194
+ padding-bottom: var(--nice-space-1, 4px);
1195
+ border-bottom: 1px solid var(--nice-bg-secondary, #f1f5f9);
1196
+ }
1197
+
1198
+ .dark .styleGroupTitle {
1199
+ border-bottom-color: var(--nice-text, #334155);
1200
+ }
1201
+
1202
+ .styleRow {
1203
+ display: flex;
1204
+ align-items: center;
1205
+ gap: var(--nice-space-1-25, 5px);
1206
+ margin-bottom: var(--nice-space-1-25, 5px);
1207
+ }
1208
+
1209
+ .styleLabel {
1210
+ font-size: 11px;
1211
+ color: var(--nice-text-secondary, #64748b);
1212
+ min-width: 50px;
1213
+ flex-shrink: 0;
1214
+ }
1215
+
1216
+ .styleSelect {
1217
+ padding: var(--nice-space-0-75, 3px) var(--nice-space-1-25, 5px);
1218
+ border: 1px solid var(--nice-border, #e2e8f0);
1219
+ border-radius: var(--nice-radius-sm, 4px);
1220
+ font-size: 12px;
1221
+ background: var(--nice-bg, #FFF);
1222
+ color: inherit;
1223
+ }
1224
+
1225
+ .dark .styleSelect {
1226
+ background: var(--nice-text, #0f172a);
1227
+ border-color: var(--nice-text-secondary, #475569);
1228
+ color: var(--nice-border, #e2e8f0);
1229
+ }
1230
+
1231
+ .styleSelectFull {
1232
+ flex: 1;
1233
+ padding: var(--nice-space-0-75, 3px) var(--nice-space-1-25, 5px);
1234
+ border: 1px solid var(--nice-border, #e2e8f0);
1235
+ border-radius: var(--nice-radius-sm, 4px);
1236
+ font-size: 12px;
1237
+ background: var(--nice-bg, #FFF);
1238
+ color: inherit;
1239
+ }
1240
+
1241
+ .dark .styleSelectFull {
1242
+ background: var(--nice-text, #0f172a);
1243
+ border-color: var(--nice-text-secondary, #475569);
1244
+ color: var(--nice-border, #e2e8f0);
1245
+ }
1246
+
1247
+ .styleSelectSm {
1248
+ width: 50px;
1249
+ padding: var(--nice-space-0-75, 3px) var(--nice-space-1, 4px);
1250
+ border: 1px solid var(--nice-border, #e2e8f0);
1251
+ border-radius: var(--nice-radius-sm, 4px);
1252
+ font-size: 12px;
1253
+ background: var(--nice-bg, #FFF);
1254
+ color: inherit;
1255
+ }
1256
+
1257
+ .styleSelectXs {
1258
+ width: 42px;
1259
+ padding: var(--nice-space-0-75, 3px) var(--nice-space-1, 4px);
1260
+ border: 1px solid var(--nice-border, #e2e8f0);
1261
+ border-radius: var(--nice-radius-sm, 4px);
1262
+ font-size: 11px;
1263
+ background: var(--nice-bg, #FFF);
1264
+ color: inherit;
1265
+ }
1266
+
1267
+ .dark .styleSelectXs {
1268
+ background: var(--nice-text, #0f172a);
1269
+ border-color: var(--nice-text-secondary, #475569);
1270
+ color: var(--nice-border, #e2e8f0);
1271
+ }
1272
+
1273
+ .styleInput {
1274
+ width: 52px;
1275
+ padding: var(--nice-space-0-75, 3px) var(--nice-space-1-25, 5px);
1276
+ border: 1px solid var(--nice-border, #e2e8f0);
1277
+ border-radius: var(--nice-radius-sm, 4px);
1278
+ font-size: 12px;
1279
+ background: var(--nice-bg, #FFF);
1280
+ color: inherit;
1281
+ }
1282
+
1283
+ .dark .styleInput {
1284
+ background: var(--nice-text, #0f172a);
1285
+ border-color: var(--nice-text-secondary, #475569);
1286
+ color: var(--nice-border, #e2e8f0);
1287
+ }
1288
+
1289
+ .styleInputFull {
1290
+ flex: 1;
1291
+ padding: var(--nice-space-0-75, 3px) var(--nice-space-1-75, 7px);
1292
+ border: 1px solid var(--nice-border, #e2e8f0);
1293
+ border-radius: var(--nice-radius-sm, 4px);
1294
+ font-size: 12px;
1295
+ background: var(--nice-bg, #FFF);
1296
+ color: inherit;
1297
+ }
1298
+
1299
+ .dark .styleInputFull {
1300
+ background: var(--nice-text, #0f172a);
1301
+ border-color: var(--nice-text-secondary, #475569);
1302
+ color: var(--nice-border, #e2e8f0);
1303
+ }
1304
+
1305
+ .styleUnit {
1306
+ font-size: 10px;
1307
+ color: var(--nice-text-muted, #94a3b8);
1308
+ flex-shrink: 0;
1309
+ }
1310
+
1311
+ .styleValue {
1312
+ font-size: 11px;
1313
+ color: var(--nice-text-secondary, #64748b);
1314
+ min-width: 32px;
1315
+ text-align: right;
1316
+ }
1317
+
1318
+ .toggleGroup {
1319
+ display: flex;
1320
+ gap: var(--nice-space-0-5, 2px);
1321
+ }
1322
+
1323
+ .toggleBtn {
1324
+ padding: var(--nice-space-0-75, 3px) var(--nice-space-2, 8px);
1325
+ border: 1px solid var(--nice-border, #e2e8f0);
1326
+ border-radius: var(--nice-radius-sm, 4px);
1327
+ background: var(--nice-bg-secondary, #f8fafc);
1328
+ color: inherit;
1329
+ font-size: 12px;
1330
+ cursor: pointer;
1331
+ transition: background 0.12s, border-color 0.12s;
1332
+ }
1333
+
1334
+ .toggleBtn:hover {
1335
+ background: var(--nice-border, #e2e8f0);
1336
+ }
1337
+
1338
+ .toggleBtnActive {
1339
+ background: var(--nice-primary-bg, #dbeafe);
1340
+ border-color: var(--nice-primary-light, #93c5fd);
1341
+ color: var(--nice-primary-dark, #1d4ed8);
1342
+ }
1343
+
1344
+ /* Color picker */
1345
+ .colorPicker {
1346
+ width: 28px;
1347
+ height: 26px;
1348
+ padding: var(--nice-space-px, 1px) var(--nice-space-0-5, 2px);
1349
+ border: 1px solid var(--nice-border, #e2e8f0);
1350
+ border-radius: var(--nice-radius-sm, 4px);
1351
+ cursor: pointer;
1352
+ }
1353
+
1354
+ .colorHex {
1355
+ width: 68px;
1356
+ padding: var(--nice-space-0-75, 3px) var(--nice-space-1-25, 5px);
1357
+ border: 1px solid var(--nice-border, #e2e8f0);
1358
+ border-radius: var(--nice-radius-sm, 4px);
1359
+ font-size: 12px;
1360
+ font-family: monospace;
1361
+ background: var(--nice-bg, #FFF);
1362
+ color: inherit;
1363
+ }
1364
+
1365
+ .dark .colorHex {
1366
+ background: var(--nice-text, #0f172a);
1367
+ border-color: var(--nice-text-secondary, #475569);
1368
+ color: var(--nice-border, #e2e8f0);
1369
+ }
1370
+
1371
+ .clearBtn {
1372
+ padding: var(--nice-space-0-75, 3px) var(--nice-space-1-75, 7px);
1373
+ border: 1px solid var(--nice-border, #e2e8f0);
1374
+ border-radius: var(--nice-radius-sm, 4px);
1375
+ background: transparent;
1376
+ color: var(--nice-text-muted, #94a3b8);
1377
+ font-size: 12px;
1378
+ cursor: pointer;
1379
+ }
1380
+
1381
+ .clearBtn:hover {
1382
+ background: var(--nice-danger-bg, #fee2e2);
1383
+ color: var(--nice-danger, #ef4444);
1384
+ border-color: var(--nice-danger-bg, #fca5a5);
1385
+ }
1386
+
1387
+ .sliderInput {
1388
+ flex: 1;
1389
+ accent-color: var(--nice-primary-hover, #2563eb);
1390
+ }
1391
+
1392
+ /* ─── Conditional tab ─────────────────────────────────────────────────────── */
1393
+ .conditionalHint {
1394
+ font-size: 11px;
1395
+ color: var(--nice-text-secondary, #64748b);
1396
+ background: var(--nice-bg-secondary, #f8fafc);
1397
+ border: 1px solid var(--nice-border, #e2e8f0);
1398
+ border-radius: var(--nice-radius-md, 6px);
1399
+ padding: var(--nice-space-1-75, 7px) var(--nice-space-2-5, 10px);
1400
+ margin-bottom: var(--nice-space-2-5, 10px);
1401
+ line-height: 1.5;
1402
+ }
1403
+
1404
+ .dark .conditionalHint {
1405
+ background: var(--nice-text, #0f172a);
1406
+ border-color: var(--nice-text, #334155);
1407
+ }
1408
+
1409
+ .clearConditionalBtn {
1410
+ margin-top: var(--nice-space-2, 8px);
1411
+ padding: var(--nice-space-1-25, 5px) var(--nice-space-2-5, 10px);
1412
+ border: 1px solid var(--nice-danger-bg, #fca5a5);
1413
+ border-radius: var(--nice-radius-md, 5px);
1414
+ background: transparent;
1415
+ color: var(--nice-danger, #ef4444);
1416
+ font-size: 11px;
1417
+ cursor: pointer;
1418
+ }
1419
+
1420
+ .clearConditionalBtn:hover {
1421
+ background: var(--nice-danger-bg, #fee2e2);
1422
+ }
1423
+
1424
+ /* ─── Shortcut grid ───────────────────────────────────────────────────────── */
1425
+ .shortcutGrid {
1426
+ display: grid;
1427
+ grid-template-columns: 1fr 1fr;
1428
+ gap: var(--nice-space-1-25, 5px);
1429
+ width: 100%;
1430
+ }
1431
+
1432
+ .shortcutChip {
1433
+ display: flex;
1434
+ flex-direction: column;
1435
+ align-items: center;
1436
+ gap: var(--nice-space-0-75, 3px);
1437
+ padding: var(--nice-space-1-5, 6px) var(--nice-space-2, 8px);
1438
+ background: var(--nice-bg-secondary, #f8fafc);
1439
+ border: 1px solid var(--nice-border, #e2e8f0);
1440
+ border-radius: var(--nice-radius-md, 6px);
1441
+ }
1442
+
1443
+ .dark .shortcutChip {
1444
+ background: var(--nice-text, #0f172a);
1445
+ border-color: var(--nice-text, #334155);
1446
+ }
1447
+
1448
+ .shortcutKeys {
1449
+ font-size: 10px;
1450
+ font-weight: 700;
1451
+ font-family: monospace;
1452
+ color: var(--nice-primary-dark, #1d4ed8);
1453
+ background: var(--nice-primary-bg, #dbeafe);
1454
+ padding: var(--nice-space-px, 1px) var(--nice-space-1-25, 5px);
1455
+ border-radius: var(--nice-radius-sm, 3px);
1456
+ }
1457
+
1458
+ .shortcutLabel {
1459
+ font-size: 9px;
1460
+ color: var(--nice-text-secondary, #64748b);
1461
+ text-align: center;
1462
+ }