react-pdf-levelup 1.0.4

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 (70) hide show
  1. package/README.md +40 -0
  2. package/fn/aggAlias.js +21 -0
  3. package/fn/moveComponents.js +129 -0
  4. package/fn/postinstall.js +66 -0
  5. package/fn/upVersion.js +12 -0
  6. package/fn/updateTsconfig.js +10 -0
  7. package/next.config.mjs +6 -0
  8. package/package.json +39 -0
  9. package/public/bg-login.jpg +0 -0
  10. package/public/codigo_guardado.js +1 -0
  11. package/public/css/style.css +751 -0
  12. package/public/dboard/logo.png +0 -0
  13. package/public/favicon.ico +0 -0
  14. package/public/fonts/TimesNewerRoman-Bold.otf +0 -0
  15. package/public/fonts/TimesNewerRoman-BoldItalic.otf +0 -0
  16. package/public/fonts/TimesNewerRoman-Italic.otf +0 -0
  17. package/public/fonts/TimesNewerRoman-Regular.otf +0 -0
  18. package/public/header-pdf.jpg +0 -0
  19. package/public/home/bgHome.jpg +0 -0
  20. package/public/home/bgHome2.jpg +0 -0
  21. package/public/home/download.jpg +0 -0
  22. package/public/home/undraw_elements_re_25t9.svg +1 -0
  23. package/public/home/undraw_project_completed_re_jr7u.svg +1 -0
  24. package/public/home/undraw_shared_goals_re_jvqd.svg +1 -0
  25. package/public/home/undraw_spread_love_re_v3cl.svg +1 -0
  26. package/public/home/undraw_target_re_fi8j.svg +1 -0
  27. package/public/home/undraw_visionary_technology_re_jfp7.svg +1 -0
  28. package/public/logo.png +0 -0
  29. package/public/marca/logo.svg +1 -0
  30. package/src/components/PDF/components/DocumentoTemplate.tsx +140 -0
  31. package/src/components/PDF/components/PDFContent.tsx +192 -0
  32. package/src/components/PDF/core/Etiquetas.tsx +152 -0
  33. package/src/components/PDF/core/Grid.tsx +101 -0
  34. package/src/components/PDF/core/Img.tsx +22 -0
  35. package/src/components/PDF/core/LayoutPDF.tsx +186 -0
  36. package/src/components/PDF/core/Listas.tsx +10 -0
  37. package/src/components/PDF/core/MakePDF.tsx +50 -0
  38. package/src/components/PDF/core/PageElements.tsx +50 -0
  39. package/src/components/PDF/core/Position.tsx +33 -0
  40. package/src/components/PDF/core/Tablet.tsx +121 -0
  41. package/src/components/PDF/core/index.tsx +56 -0
  42. package/src/components/PDF/lib/pdfParser.ts +620 -0
  43. package/src/components/PDF/services/apiService.ts +17 -0
  44. package/src/components/PDF/templates/AllTemplate.tsx +134 -0
  45. package/src/components/PDF/templates/BusinessCardTemplate.tsx +139 -0
  46. package/src/components/PDF/templates/CertificateTemplate.tsx +31 -0
  47. package/src/components/PDF/templates/HeaderFooterTemplate.tsx +61 -0
  48. package/src/components/PDF/templates/InvoiceTemplate.tsx +53 -0
  49. package/src/components/PDF/templates/ProposalTemplate.tsx +246 -0
  50. package/src/components/PDF/templates/ReportTemplate.tsx +57 -0
  51. package/src/components/PDF/templates/ResumeTemplate.tsx +170 -0
  52. package/src/components/PDF/templates/TablasTemplate.tsx +307 -0
  53. package/src/components/PDF/templates/index.ts +9 -0
  54. package/src/components/PDF/view/ColorPicker.tsx +147 -0
  55. package/src/components/PDF/view/Header.tsx +102 -0
  56. package/src/components/PDF/view/HomePDF.tsx +177 -0
  57. package/src/components/PDF/view/SettingsPanel.tsx +703 -0
  58. package/src/pages/AllTemplate.tsx +53 -0
  59. package/src/pages/Documento2.tsx +45 -0
  60. package/src/pages/_app.tsx +6 -0
  61. package/src/pages/_document.tsx +13 -0
  62. package/src/pages/api/generatePDF.ts +74 -0
  63. package/src/pages/api/hello.ts +13 -0
  64. package/src/pages/api/readFile.ts +18 -0
  65. package/src/pages/api/readTemplateFile.ts +26 -0
  66. package/src/pages/api/save.ts +22 -0
  67. package/src/pages/api/saveFile.ts +20 -0
  68. package/src/pages/index.tsx +13 -0
  69. package/src/pages/template/[template].tsx +250 -0
  70. package/tsconfig.json +63 -0
@@ -0,0 +1,751 @@
1
+ /* ===== Variables globales ===== */
2
+ :root {
3
+ --primary-color: #3b82f6;
4
+ --primary-hover: #2563eb;
5
+ --secondary-color: #10b981;
6
+ --secondary-hover: #059669;
7
+ --background-color: #f3f4f6;
8
+ --surface-color: #ffffff;
9
+ --header-bg: #1e293b;
10
+ --editor-bg: #1e1e1e;
11
+ --border-color: #e5e7eb;
12
+ --text-color: #1f2937;
13
+ --text-light: #6b7280;
14
+ --text-inverted: #f9fafb;
15
+ --shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
16
+ --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
17
+ --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
18
+ --radius: 8px;
19
+ --transition: all 0.2s ease;
20
+ }
21
+
22
+ /* ===== Estilos generales ===== */
23
+ html,
24
+ body {
25
+ margin: 0;
26
+ padding: 0;
27
+ font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans",
28
+ "Helvetica Neue", sans-serif;
29
+ background-color: var(--background-color);
30
+ color: var(--text-color);
31
+ }
32
+
33
+ /* ===== Animaciones ===== */
34
+ @keyframes fadeIn {
35
+ from {
36
+ opacity: 0;
37
+ transform: translateY(-10px);
38
+ }
39
+
40
+ to {
41
+ opacity: 1;
42
+ transform: translateY(0);
43
+ }
44
+ }
45
+
46
+ @keyframes spin {
47
+ to {
48
+ transform: rotate(360deg);
49
+ }
50
+ }
51
+
52
+ .fade-in {
53
+ animation: fadeIn 0.3s ease-in-out;
54
+ }
55
+
56
+ iframe {
57
+ height: 100vh;
58
+ width: 100%;
59
+
60
+ }
61
+
62
+ /* ===== Header ===== */
63
+ .header {
64
+ display: flex;
65
+ align-items: center;
66
+ justify-content: space-between;
67
+ padding: 0.75rem 1.5rem;
68
+ background-color: var(--header-bg);
69
+ box-shadow: var(--shadow-md);
70
+ position: sticky;
71
+ top: 0;
72
+ z-index: 10;
73
+ }
74
+
75
+ .header-title {
76
+ font-size: 1.25rem;
77
+ font-weight: 600;
78
+ color: var(--text-inverted);
79
+ display: flex;
80
+ align-items: center;
81
+ gap: 0.5rem;
82
+ }
83
+
84
+ .header-tools {
85
+ display: flex;
86
+ gap: 0.75rem;
87
+ align-items: center;
88
+ }
89
+
90
+ .template-select {
91
+ padding: 8px;
92
+ border-radius: 4px;
93
+ border: 1px solid var(--border-color);
94
+ background-color: white;
95
+ font-size: 14px;
96
+ }
97
+
98
+ /* ===== Botones ===== */
99
+ .btn {
100
+ display: inline-flex;
101
+ align-items: center;
102
+ justify-content: center;
103
+ padding: 0.5rem 1rem;
104
+ font-size: 0.875rem;
105
+ font-weight: 500;
106
+ border-radius: var(--radius);
107
+ border: none;
108
+ cursor: pointer;
109
+ transition: var(--transition);
110
+ gap: 0.5rem;
111
+ }
112
+
113
+ .btn:active {
114
+ transform: translateY(1px);
115
+ }
116
+
117
+ .btn-primary {
118
+ background-color: var(--primary-color);
119
+ color: var(--text-inverted);
120
+ }
121
+
122
+ .btn-primary:hover {
123
+ background-color: var(--primary-hover);
124
+ }
125
+
126
+ .btn-secondary {
127
+ background-color: var(--secondary-color);
128
+ color: var(--text-inverted);
129
+ }
130
+
131
+ .btn-secondary:hover {
132
+ background-color: var(--secondary-hover);
133
+ }
134
+
135
+ .btn-outline {
136
+ background-color: transparent;
137
+ border: 1px solid var(--border-color);
138
+ color: var(--text-color);
139
+ }
140
+
141
+ .btn-outline:hover {
142
+ background-color: rgba(0, 0, 0, 0.05);
143
+ }
144
+
145
+ .btn-icon {
146
+ padding: 0.5rem;
147
+ border-radius: 50%;
148
+ background-color: transparent;
149
+ color: var(--text-inverted);
150
+ }
151
+
152
+ .btn-icon:hover {
153
+ background-color: rgba(255, 255, 255, 0.1);
154
+ }
155
+
156
+ /* ===== Tooltip ===== */
157
+ .tooltip {
158
+ position: relative;
159
+ }
160
+
161
+ .tooltip:hover::after {
162
+ content: attr(data-tooltip);
163
+ position: absolute;
164
+ bottom: 100%;
165
+ left: 50%;
166
+ transform: translateX(-50%);
167
+ background-color: var(--text-color);
168
+ color: var(--text-inverted);
169
+ padding: 0.25rem 0.5rem;
170
+ border-radius: var(--radius);
171
+ font-size: 0.75rem;
172
+ white-space: nowrap;
173
+ z-index: 10;
174
+ margin-bottom: 5px;
175
+ }
176
+
177
+ /* ===== Layout principal ===== */
178
+ .container-playground {
179
+ display: grid;
180
+ grid-template-columns: 1fr 1fr;
181
+ height: calc(100vh - 60px);
182
+ /* Altura total menos el header */
183
+ animation: fadeIn 0.5s ease;
184
+ }
185
+
186
+ /* ===== Contenedores ===== */
187
+ .container-editor,
188
+ .container-render {
189
+ overflow: hidden;
190
+ box-shadow: var(--shadow-md);
191
+ height: 100%;
192
+ transition: var(--transition);
193
+ }
194
+
195
+ .container-editor {
196
+ background-color: var(--editor-bg);
197
+ }
198
+
199
+ .container-editor:focus-within,
200
+ .container-render:hover {
201
+ box-shadow: var(--shadow-lg);
202
+ }
203
+
204
+ /* ===== Estilos para el visor de PDF ===== */
205
+ .container-render {
206
+ position: relative;
207
+ transition: opacity 0.5s ease;
208
+ background-color: #525659;
209
+ }
210
+
211
+ .container-render.rendering {
212
+ opacity: 0.7;
213
+ }
214
+
215
+ .pdf-loading-overlay {
216
+ position: absolute;
217
+ top: 0;
218
+ left: 0;
219
+ right: 0;
220
+ bottom: 0;
221
+ background-color: rgba(255, 255, 255, 0.8);
222
+ display: flex;
223
+ flex-direction: column;
224
+ justify-content: center;
225
+ align-items: center;
226
+ z-index: 10;
227
+ opacity: 0;
228
+ visibility: hidden;
229
+ transition: opacity 0.3s ease, visibility 0.3s ease;
230
+ }
231
+
232
+ .rendering .pdf-loading-overlay {
233
+ opacity: 1;
234
+ visibility: visible;
235
+ }
236
+
237
+ .pdf-loading-spinner {
238
+ width: 50px;
239
+ height: 50px;
240
+ border: 5px solid rgba(0, 0, 0, 0.1);
241
+ border-radius: 50%;
242
+ border-top-color: #3498db;
243
+ animation: spin 1s ease-in-out infinite;
244
+ }
245
+
246
+ .pdf-loading-text {
247
+ margin-top: 15px;
248
+ font-size: 16px;
249
+ color: #333;
250
+ }
251
+
252
+ .pdf-viewer-container {
253
+ transition: filter 0.3s ease;
254
+ }
255
+
256
+ .rendering .pdf-viewer-container {
257
+ filter: blur(2px);
258
+ }
259
+
260
+ /* PDF Viewer Styles */
261
+ .react-pdf__Document {
262
+ display: flex;
263
+ flex-direction: column;
264
+ align-items: center;
265
+ }
266
+
267
+ .react-pdf__Page {
268
+ max-width: 100%;
269
+ box-shadow: 0 0 20px rgba(0, 0, 0, 0.15);
270
+ margin-bottom: 20px;
271
+ }
272
+
273
+ .react-pdf__Page__canvas {
274
+ max-width: 100%;
275
+ height: auto !important;
276
+ }
277
+
278
+ /* PDF Viewer Controls */
279
+ .pdf-controls {
280
+ position: fixed;
281
+ bottom: 20px;
282
+ left: 50%;
283
+ transform: translateX(-50%);
284
+ background-color: #fff;
285
+ border-radius: 8px;
286
+ padding: 8px 16px;
287
+ display: flex;
288
+ gap: 12px;
289
+ align-items: center;
290
+ box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
291
+ z-index: 100;
292
+ }
293
+
294
+ .pdf-controls button {
295
+ background: none;
296
+ border: none;
297
+ padding: 8px;
298
+ cursor: pointer;
299
+ border-radius: 4px;
300
+ display: flex;
301
+ align-items: center;
302
+ justify-content: center;
303
+ color: #666;
304
+ transition: all 0.2s;
305
+ }
306
+
307
+ .pdf-controls button:hover {
308
+ background-color: #f0f0f0;
309
+ color: #333;
310
+ }
311
+
312
+ .pdf-controls .page-info {
313
+ font-size: 14px;
314
+ color: #666;
315
+ display: flex;
316
+ align-items: center;
317
+ gap: 4px;
318
+ }
319
+
320
+ .pdf-controls .zoom-info {
321
+ font-size: 14px;
322
+ color: #666;
323
+ min-width: 60px;
324
+ text-align: center;
325
+ }
326
+
327
+ /* PDF Page Loading */
328
+ .react-pdf__Page__loading {
329
+ display: flex;
330
+ justify-content: center;
331
+ align-items: center;
332
+ height: 100%;
333
+ min-height: 300px;
334
+ background-color: #f8f9fa;
335
+ border-radius: 4px;
336
+ }
337
+
338
+ .react-pdf__message {
339
+ padding: 20px;
340
+ color: #666;
341
+ text-align: center;
342
+ font-size: 14px;
343
+ }
344
+
345
+ /* Toolbar in PDF viewer */
346
+ .pdf-toolbar {
347
+ position: fixed;
348
+ top: 70px;
349
+ right: 20px;
350
+ background-color: #fff;
351
+ border-radius: 8px;
352
+ padding: 8px;
353
+ display: flex;
354
+ flex-direction: column;
355
+ gap: 8px;
356
+ box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
357
+ z-index: 100;
358
+ }
359
+
360
+ .pdf-toolbar button {
361
+ background: none;
362
+ border: none;
363
+ padding: 8px;
364
+ cursor: pointer;
365
+ border-radius: 4px;
366
+ display: flex;
367
+ align-items: center;
368
+ justify-content: center;
369
+ color: #666;
370
+ transition: all 0.2s;
371
+ }
372
+
373
+ .pdf-toolbar button:hover {
374
+ background-color: #f0f0f0;
375
+ color: #333;
376
+ }
377
+
378
+ .pdf-toolbar .separator {
379
+ height: 1px;
380
+ background-color: #eee;
381
+ margin: 4px 0;
382
+ }
383
+
384
+ /* ===== Modal ===== */
385
+ .modal {
386
+ position: fixed;
387
+ top: 0;
388
+ left: 0;
389
+ width: 100%;
390
+ height: 100%;
391
+ background-color: rgba(0, 0, 0, 0.5);
392
+ display: flex;
393
+ align-items: center;
394
+ justify-content: center;
395
+ z-index: 1000;
396
+ opacity: 0;
397
+ visibility: hidden;
398
+ transition: var(--transition);
399
+ }
400
+
401
+ .modal.show {
402
+ opacity: 1;
403
+ visibility: visible;
404
+ }
405
+
406
+ .modal-content {
407
+ background-color: var(--surface-color);
408
+ padding: 2rem;
409
+ border-radius: var(--radius);
410
+ box-shadow: var(--shadow-lg);
411
+ width: 100%;
412
+ max-width: 500px;
413
+ transform: translateY(-20px);
414
+ transition: var(--transition);
415
+ }
416
+
417
+ .modal.show .modal-content {
418
+ transform: translateY(0);
419
+ }
420
+
421
+ .modal-content h2 {
422
+ margin-top: 0;
423
+ color: var(--text-color);
424
+ font-size: 1.5rem;
425
+ margin-bottom: 1.5rem;
426
+ }
427
+
428
+ .modal-content input {
429
+ width: 100%;
430
+ padding: 0.75rem;
431
+ border: 1px solid var(--border-color);
432
+ border-radius: var(--radius);
433
+ margin-bottom: 1.5rem;
434
+ font-size: 1rem;
435
+ transition: var(--transition);
436
+ }
437
+
438
+ .modal-content input:focus {
439
+ outline: none;
440
+ border-color: var(--primary-color);
441
+ box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.5);
442
+ }
443
+
444
+ .modal-content button {
445
+ margin-right: 0.75rem;
446
+ }
447
+
448
+ /* ===== Formularios ===== */
449
+ .form-group {
450
+ margin-bottom: 15px;
451
+ }
452
+
453
+ .form-group label {
454
+ display: block;
455
+ margin-bottom: 5px;
456
+ }
457
+
458
+ .form-control {
459
+ width: 100%;
460
+ padding: 8px;
461
+ border: 1px solid var(--border-color);
462
+ border-radius: var(--radius);
463
+ }
464
+
465
+ input[type="checkbox"] {
466
+ margin-right: 8px;
467
+ }
468
+
469
+ /* ===== Color Picker ===== */
470
+ .color-picker-container {
471
+ position: relative;
472
+ display: inline-block;
473
+ }
474
+
475
+ .color-picker-panel {
476
+ position: absolute;
477
+ top: 100%;
478
+ right: 0;
479
+ width: 280px;
480
+ background-color: #ffffff;
481
+ border-radius: 8px;
482
+ box-shadow: 0 5px 15px rgba(0, 0, 0, 0.15);
483
+ padding: 16px;
484
+ z-index: 1000;
485
+ margin-top: 8px;
486
+ animation: fadeIn 0.2s ease-in-out;
487
+ }
488
+
489
+ .color-picker-header {
490
+ display: flex;
491
+ justify-content: space-between;
492
+ align-items: center;
493
+ margin-bottom: 16px;
494
+ }
495
+
496
+ .color-picker-header h3 {
497
+ margin: 0;
498
+ font-size: 16px;
499
+ font-weight: 600;
500
+ color: #333;
501
+ }
502
+
503
+ .selected-color-preview {
504
+ width: 32px;
505
+ height: 32px;
506
+ border-radius: 4px;
507
+ border: 1px solid #ddd;
508
+ }
509
+
510
+ .color-input-container {
511
+ display: flex;
512
+ flex-direction: column;
513
+ gap: 8px;
514
+ margin-bottom: 16px;
515
+ }
516
+
517
+ .color-input {
518
+ width: 100%;
519
+ height: 40px;
520
+ border: none;
521
+ border-radius: 4px;
522
+ cursor: pointer;
523
+ padding: 0;
524
+ }
525
+
526
+ .color-input::-webkit-color-swatch-wrapper {
527
+ padding: 0;
528
+ }
529
+
530
+ .color-input::-webkit-color-swatch {
531
+ border: none;
532
+ border-radius: 4px;
533
+ }
534
+
535
+ .hex-value-container {
536
+ display: flex;
537
+ gap: 8px;
538
+ }
539
+
540
+ .hex-input {
541
+ flex: 1;
542
+ height: 36px;
543
+ border: 1px solid #ddd;
544
+ border-radius: 4px;
545
+ padding: 0 12px;
546
+ font-family: monospace;
547
+ font-size: 14px;
548
+ }
549
+
550
+ .copy-button {
551
+ background-color: #f0f0f0;
552
+ border: 1px solid #ddd;
553
+ border-radius: 4px;
554
+ padding: 0 12px;
555
+ cursor: pointer;
556
+ font-size: 14px;
557
+ transition: background-color 0.2s;
558
+ }
559
+
560
+ .copy-button:hover {
561
+ background-color: #e0e0e0;
562
+ }
563
+
564
+ .color-section {
565
+ margin-bottom: 16px;
566
+ }
567
+
568
+ .color-section h4 {
569
+ margin: 0 0 8px 0;
570
+ font-size: 14px;
571
+ font-weight: 500;
572
+ color: #555;
573
+ }
574
+
575
+ .color-grid {
576
+ display: grid;
577
+ grid-template-columns: repeat(7, 1fr);
578
+ gap: 8px;
579
+ }
580
+
581
+ .color-swatch {
582
+ width: 100%;
583
+ aspect-ratio: 1;
584
+ border-radius: 4px;
585
+ cursor: pointer;
586
+ border: 1px solid rgba(0, 0, 0, 0.1);
587
+ transition: transform 0.1s;
588
+ }
589
+
590
+ .color-swatch:hover {
591
+ transform: scale(1.1);
592
+ box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
593
+ }
594
+
595
+ /* ===== Media queries para responsividad ===== */
596
+ @media (max-width: 1024px) {
597
+ .container-playground {
598
+ grid-template-columns: 1fr;
599
+ grid-template-rows: 1fr 1fr;
600
+ }
601
+ }
602
+
603
+ @media (max-width: 640px) {
604
+ .header {
605
+ flex-wrap: wrap;
606
+ justify-content: center;
607
+ padding: 1rem;
608
+ }
609
+
610
+ .header-title {
611
+ width: 100%;
612
+ text-align: center;
613
+ margin-bottom: 0.5rem;
614
+ }
615
+
616
+ .header-tools {
617
+ width: 100%;
618
+ justify-content: center;
619
+ flex-wrap: wrap;
620
+ }
621
+
622
+ .btn {
623
+ padding: 0.5rem;
624
+ }
625
+
626
+ .color-picker-panel {
627
+ width: 250px;
628
+ right: -100px;
629
+ }
630
+ }
631
+
632
+ /* ===== Panel de Configuración ===== */
633
+ .settings-panel-overlay {
634
+ position: fixed;
635
+ top: 0;
636
+ left: 0;
637
+ width: 100%;
638
+ height: 100%;
639
+ background-color: rgba(0, 0, 0, 0.5);
640
+ display: flex;
641
+ align-items: center;
642
+ justify-content: center;
643
+ z-index: 1000;
644
+ animation: fadeIn 0.2s ease-in-out;
645
+ }
646
+
647
+ .settings-panel {
648
+ background-color: var(--surface-color);
649
+ border-radius: var(--radius);
650
+ box-shadow: var(--shadow-lg);
651
+ width: 90%;
652
+ max-width: 700px;
653
+ max-height: 90vh;
654
+ display: flex;
655
+ flex-direction: column;
656
+ animation: slideUp 0.3s ease-out;
657
+ }
658
+
659
+ @keyframes slideUp {
660
+ from {
661
+ transform: translateY(20px);
662
+ opacity: 0;
663
+ }
664
+
665
+ to {
666
+ transform: translateY(0);
667
+ opacity: 1;
668
+ }
669
+ }
670
+
671
+ .settings-panel-header {
672
+ display: flex;
673
+ justify-content: space-between;
674
+ align-items: center;
675
+ padding: 1rem 1.5rem;
676
+ border-bottom: 1px solid var(--border-color);
677
+ }
678
+
679
+ .settings-panel-header h2 {
680
+ margin: 0;
681
+ font-size: 1.25rem;
682
+ color: var(--text-color);
683
+ }
684
+
685
+ .settings-panel-content {
686
+ padding: 1.5rem;
687
+ overflow-y: auto;
688
+ max-height: calc(90vh - 130px);
689
+ }
690
+
691
+ .settings-section {
692
+ margin-bottom: 1.5rem;
693
+ padding-bottom: 1.5rem;
694
+ border-bottom: 1px solid var(--border-color);
695
+ }
696
+
697
+ .settings-section:last-child {
698
+ margin-bottom: 0;
699
+ padding-bottom: 0;
700
+ border-bottom: none;
701
+ }
702
+
703
+ .settings-section h3 {
704
+ margin: 0 0 1rem 0;
705
+ font-size: 1rem;
706
+ color: var(--text-color);
707
+ }
708
+
709
+ .padding-grid {
710
+ display: grid;
711
+ grid-template-columns: 1fr 1fr;
712
+ gap: 1rem;
713
+ }
714
+
715
+ .checkbox-group {
716
+ display: flex;
717
+ align-items: center;
718
+ }
719
+
720
+ .checkbox-group input[type="checkbox"] {
721
+ margin-right: 0.5rem;
722
+ }
723
+
724
+ .settings-panel-footer {
725
+ display: flex;
726
+ justify-content: flex-end;
727
+ padding: 1rem 1.5rem;
728
+ border-top: 1px solid var(--border-color);
729
+ gap: 0.75rem;
730
+ }
731
+
732
+ .color-input {
733
+ height: 40px;
734
+ padding: 0;
735
+ border: 1px solid var(--border-color);
736
+ }
737
+
738
+ @media (max-width: 640px) {
739
+ .settings-panel {
740
+ width: 95%;
741
+ max-height: 95vh;
742
+ }
743
+
744
+ .settings-panel-content {
745
+ max-height: calc(95vh - 130px);
746
+ }
747
+
748
+ .padding-grid {
749
+ grid-template-columns: 1fr;
750
+ }
751
+ }