propongo 1.3.4__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,1359 @@
1
+ :root {
2
+ --primary: #2563eb;
3
+ --primary-hover: #1d4ed8;
4
+ --danger: #dc2626;
5
+ --danger-hover: #b91c1c;
6
+ --success: #16a34a;
7
+ --warning: #d97706;
8
+ --bg: #f8fafc;
9
+ --surface: #ffffff;
10
+ --surface-alt: #f1f5f9;
11
+ --border: #e2e8f0;
12
+ --text: #1e293b;
13
+ --text-muted: #64748b;
14
+ --sidebar-width: 300px;
15
+ --header-height: 56px;
16
+ }
17
+
18
+ * { margin: 0; padding: 0; box-sizing: border-box; }
19
+
20
+ body {
21
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
22
+ font-size: 14px;
23
+ color: var(--text);
24
+ background: var(--bg);
25
+ line-height: 1.5;
26
+ }
27
+
28
+ .app-container {
29
+ display: flex;
30
+ min-height: 100vh;
31
+ }
32
+
33
+ .sidebar {
34
+ width: var(--sidebar-width);
35
+ background: var(--surface);
36
+ border-right: 1px solid var(--border);
37
+ display: flex;
38
+ flex-direction: column;
39
+ position: fixed;
40
+ top: 0;
41
+ left: 0;
42
+ bottom: 0;
43
+ z-index: 100;
44
+ transform: translateX(-100%);
45
+ transition: transform 0.2s ease;
46
+ }
47
+
48
+ .sidebar.open {
49
+ transform: translateX(0);
50
+ }
51
+
52
+ .sidebar-header {
53
+ display: flex;
54
+ justify-content: space-between;
55
+ align-items: center;
56
+ padding: 12px 16px;
57
+ border-bottom: 1px solid var(--border);
58
+ }
59
+
60
+ .sidebar-header h3 {
61
+ font-size: 16px;
62
+ font-weight: 600;
63
+ }
64
+
65
+ .sidebar-content {
66
+ flex: 1;
67
+ overflow-y: auto;
68
+ padding: 12px;
69
+ }
70
+
71
+ .snippet-category {
72
+ margin-bottom: 16px;
73
+ }
74
+
75
+ .snippet-category h4 {
76
+ font-size: 12px;
77
+ text-transform: uppercase;
78
+ color: var(--text-muted);
79
+ letter-spacing: 0.05em;
80
+ margin-bottom: 8px;
81
+ padding: 0 4px;
82
+ }
83
+
84
+ .snippet-item {
85
+ padding: 8px 12px;
86
+ border: 1px solid var(--border);
87
+ border-radius: 6px;
88
+ margin-bottom: 6px;
89
+ cursor: pointer;
90
+ transition: all 0.15s ease;
91
+ background: var(--surface);
92
+ }
93
+
94
+ .snippet-item:hover {
95
+ border-color: var(--primary);
96
+ background: #eff6ff;
97
+ }
98
+
99
+ .snippet-item .snippet-title {
100
+ font-weight: 500;
101
+ font-size: 13px;
102
+ margin-bottom: 2px;
103
+ }
104
+
105
+ .snippet-item .snippet-preview {
106
+ font-size: 12px;
107
+ color: var(--text-muted);
108
+ white-space: nowrap;
109
+ overflow: hidden;
110
+ text-overflow: ellipsis;
111
+ }
112
+
113
+ .snippet-item .snippet-delete {
114
+ float: right;
115
+ opacity: 0;
116
+ transition: opacity 0.15s;
117
+ }
118
+
119
+ .snippet-item:hover .snippet-delete {
120
+ opacity: 1;
121
+ }
122
+
123
+ .snippet-add-form {
124
+ padding: 12px;
125
+ border-top: 1px solid var(--border);
126
+ background: var(--surface-alt);
127
+ }
128
+
129
+ .snippet-add-form input,
130
+ .snippet-add-form textarea {
131
+ width: 100%;
132
+ margin-bottom: 6px;
133
+ }
134
+
135
+ .main-content {
136
+ flex: 1;
137
+ margin-left: 0;
138
+ transition: margin-left 0.2s ease;
139
+ }
140
+
141
+ .main-content.sidebar-open {
142
+ margin-left: var(--sidebar-width);
143
+ }
144
+
145
+ .app-header {
146
+ display: flex;
147
+ align-items: center;
148
+ justify-content: space-between;
149
+ height: var(--header-height);
150
+ padding: 0 20px;
151
+ background: var(--surface);
152
+ border-bottom: 1px solid var(--border);
153
+ position: sticky;
154
+ top: 0;
155
+ z-index: 50;
156
+ }
157
+
158
+ .header-left {
159
+ display: flex;
160
+ align-items: center;
161
+ gap: 12px;
162
+ }
163
+
164
+ .header-left h1 {
165
+ font-size: 18px;
166
+ font-weight: 700;
167
+ }
168
+
169
+ .header-center {
170
+ flex: 1;
171
+ max-width: 400px;
172
+ margin: 0 20px;
173
+ }
174
+
175
+ .title-input {
176
+ width: 100%;
177
+ border: 1px solid transparent;
178
+ background: transparent;
179
+ font-size: 15px;
180
+ font-weight: 500;
181
+ padding: 6px 8px;
182
+ border-radius: 4px;
183
+ text-align: center;
184
+ }
185
+
186
+ .title-input:hover {
187
+ border-color: var(--border);
188
+ }
189
+
190
+ .title-input:focus {
191
+ outline: none;
192
+ border-color: var(--primary);
193
+ background: var(--surface);
194
+ }
195
+
196
+ .title-display {
197
+ font-size: 15px;
198
+ font-weight: 500;
199
+ padding: 6px 8px;
200
+ text-align: center;
201
+ color: var(--text);
202
+ }
203
+
204
+ .header-right {
205
+ display: flex;
206
+ gap: 8px;
207
+ }
208
+
209
+ .tab-nav {
210
+ display: flex;
211
+ gap: 0;
212
+ padding: 0 20px;
213
+ background: var(--surface);
214
+ border-bottom: 1px solid var(--border);
215
+ position: sticky;
216
+ top: var(--header-height);
217
+ z-index: 10;
218
+ }
219
+
220
+ .tab-btn {
221
+ padding: 10px 20px;
222
+ border: none;
223
+ background: none;
224
+ cursor: pointer;
225
+ font-size: 14px;
226
+ font-weight: 500;
227
+ color: var(--text-muted);
228
+ border-bottom: 2px solid transparent;
229
+ transition: all 0.15s ease;
230
+ }
231
+
232
+ .tab-btn:hover {
233
+ color: var(--text);
234
+ }
235
+
236
+ .tab-btn.active {
237
+ color: var(--primary);
238
+ border-bottom-color: var(--primary);
239
+ }
240
+
241
+ .tab-content {
242
+ padding: 24px;
243
+ max-width: 900px;
244
+ width: 100%;
245
+ }
246
+
247
+ .section h2 {
248
+ font-size: 20px;
249
+ font-weight: 600;
250
+ margin-bottom: 20px;
251
+ }
252
+
253
+ .form-group {
254
+ margin-bottom: 24px;
255
+ }
256
+
257
+ .form-group label {
258
+ display: block;
259
+ font-weight: 500;
260
+ margin-bottom: 6px;
261
+ font-size: 13px;
262
+ }
263
+
264
+ textarea, input[type="text"], input[type="number"], input[type="date"], select {
265
+ width: 100%;
266
+ padding: 8px 12px;
267
+ border: 1px solid var(--border);
268
+ border-radius: 6px;
269
+ font-size: 14px;
270
+ font-family: inherit;
271
+ background: var(--surface);
272
+ color: var(--text);
273
+ }
274
+
275
+ textarea:focus, input:focus, select:focus {
276
+ outline: none;
277
+ border-color: var(--primary);
278
+ box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1);
279
+ }
280
+
281
+ textarea {
282
+ resize: vertical;
283
+ }
284
+
285
+ .btn {
286
+ padding: 8px 16px;
287
+ border: none;
288
+ border-radius: 6px;
289
+ font-size: 14px;
290
+ font-weight: 500;
291
+ cursor: pointer;
292
+ display: inline-flex;
293
+ align-items: center;
294
+ gap: 6px;
295
+ transition: all 0.15s ease;
296
+ text-decoration: none;
297
+ }
298
+
299
+ .btn-primary {
300
+ background: var(--primary);
301
+ color: white;
302
+ }
303
+
304
+ .btn-primary:hover {
305
+ background: var(--primary-hover);
306
+ }
307
+
308
+ .btn-secondary {
309
+ background: var(--surface-alt);
310
+ color: var(--text);
311
+ border: 1px solid var(--border);
312
+ }
313
+
314
+ .btn-secondary:hover {
315
+ background: var(--border);
316
+ }
317
+
318
+ .btn-danger {
319
+ background: var(--danger);
320
+ color: white;
321
+ }
322
+
323
+ .btn-danger:hover {
324
+ background: var(--danger-hover);
325
+ }
326
+
327
+ .btn-sm {
328
+ padding: 4px 10px;
329
+ font-size: 13px;
330
+ }
331
+
332
+ .btn-icon {
333
+ background: none;
334
+ border: none;
335
+ cursor: pointer;
336
+ font-size: 18px;
337
+ padding: 4px 8px;
338
+ color: var(--text-muted);
339
+ border-radius: 4px;
340
+ }
341
+
342
+ .btn-icon:hover {
343
+ background: var(--surface-alt);
344
+ color: var(--text);
345
+ }
346
+
347
+ .btn-danger-icon {
348
+ color: var(--danger);
349
+ }
350
+
351
+ .task-card {
352
+ background: var(--surface);
353
+ border: 1px solid var(--border);
354
+ border-radius: 8px;
355
+ padding: 12px;
356
+ margin-bottom: 8px;
357
+ }
358
+
359
+ .task-header {
360
+ display: flex;
361
+ align-items: center;
362
+ gap: 8px;
363
+ margin-bottom: 8px;
364
+ }
365
+
366
+ .task-name-input {
367
+ flex: 1;
368
+ border: 1px solid transparent;
369
+ font-weight: 500;
370
+ padding: 4px 8px;
371
+ background: transparent;
372
+ }
373
+
374
+ .task-name-input:hover {
375
+ border-color: var(--border);
376
+ }
377
+
378
+ .task-name-input:focus {
379
+ border-color: var(--primary);
380
+ background: var(--surface);
381
+ }
382
+
383
+ .task-desc-input {
384
+ width: 100%;
385
+ border: 1px solid transparent;
386
+ font-size: 13px;
387
+ padding: 4px 8px;
388
+ background: transparent;
389
+ }
390
+
391
+ .task-desc-input:hover {
392
+ border-color: var(--border);
393
+ }
394
+
395
+ .task-desc-input:focus {
396
+ border-color: var(--primary);
397
+ background: var(--surface);
398
+ }
399
+
400
+ .add-task-form {
401
+ display: flex;
402
+ gap: 8px;
403
+ margin-top: 12px;
404
+ }
405
+
406
+ .flex-grow {
407
+ flex: 1;
408
+ }
409
+
410
+ .budget-summary-bar {
411
+ display: flex;
412
+ align-items: center;
413
+ justify-content: space-between;
414
+ padding: 12px 16px;
415
+ background: var(--surface);
416
+ border: 1px solid var(--border);
417
+ border-radius: 8px;
418
+ margin-bottom: 20px;
419
+ }
420
+
421
+ .budget-total {
422
+ font-size: 20px;
423
+ font-weight: 700;
424
+ color: var(--success);
425
+ }
426
+
427
+ .budget-add-form {
428
+ display: flex;
429
+ gap: 8px;
430
+ align-items: end;
431
+ flex-wrap: wrap;
432
+ }
433
+
434
+ .budget-add-form select,
435
+ .budget-add-form input {
436
+ width: auto;
437
+ min-width: 120px;
438
+ }
439
+
440
+ .budget-item-card {
441
+ display: flex;
442
+ align-items: center;
443
+ padding: 10px 12px;
444
+ background: var(--surface);
445
+ border: 1px solid var(--border);
446
+ border-radius: 6px;
447
+ margin-bottom: 6px;
448
+ }
449
+
450
+ .budget-item-info {
451
+ flex: 1;
452
+ }
453
+
454
+ .budget-item-name {
455
+ font-weight: 500;
456
+ }
457
+
458
+ .budget-item-task {
459
+ font-size: 12px;
460
+ color: var(--text-muted);
461
+ margin-left: 8px;
462
+ }
463
+
464
+ .budget-item-numbers {
465
+ margin-right: 12px;
466
+ text-align: right;
467
+ font-size: 13px;
468
+ color: var(--text-muted);
469
+ font-variant-numeric: tabular-nums;
470
+ white-space: nowrap;
471
+ }
472
+
473
+ .budget-item-total {
474
+ font-weight: 600;
475
+ color: var(--success);
476
+ margin-left: 12px;
477
+ }
478
+
479
+ .budget-task-group {
480
+ margin-bottom: 12px;
481
+ border: 1px solid var(--border);
482
+ border-radius: 6px;
483
+ overflow: hidden;
484
+ }
485
+
486
+ .budget-task-header {
487
+ display: flex;
488
+ justify-content: space-between;
489
+ align-items: center;
490
+ padding: 8px 12px;
491
+ background: var(--surface-alt);
492
+ border-bottom: 1px solid var(--border);
493
+ }
494
+
495
+ .budget-task-name {
496
+ font-weight: 600;
497
+ font-size: 14px;
498
+ }
499
+
500
+ .budget-task-subtotal {
501
+ font-weight: 600;
502
+ font-size: 14px;
503
+ color: var(--success);
504
+ }
505
+
506
+ .budget-task-group .budget-item-card {
507
+ border: none;
508
+ border-bottom: 1px solid var(--border);
509
+ border-radius: 0;
510
+ margin-bottom: 0;
511
+ }
512
+
513
+ .budget-task-group .budget-item-card:last-child {
514
+ border-bottom: none;
515
+ }
516
+
517
+ .budget-item-actions {
518
+ display: flex;
519
+ align-items: center;
520
+ gap: 2px;
521
+ margin-left: 8px;
522
+ }
523
+
524
+ .budget-item-edit-form {
525
+ display: flex;
526
+ align-items: center;
527
+ gap: 8px;
528
+ flex: 1;
529
+ }
530
+
531
+ .budget-item-edit-form input,
532
+ .budget-item-edit-form select {
533
+ width: auto;
534
+ padding: 4px 8px;
535
+ border: 1px solid var(--border);
536
+ border-radius: 4px;
537
+ font-size: 13px;
538
+ background: var(--bg);
539
+ color: var(--text);
540
+ }
541
+
542
+ .budget-item-edit-form .flex-grow {
543
+ flex: 1;
544
+ }
545
+
546
+ .budget-item-edit-actions {
547
+ display: flex;
548
+ gap: 4px;
549
+ margin-left: 8px;
550
+ }
551
+
552
+ .timeline-input-card {
553
+ display: flex;
554
+ align-items: center;
555
+ padding: 10px 12px;
556
+ background: var(--surface);
557
+ border: 1px solid var(--border);
558
+ border-radius: 6px;
559
+ margin-bottom: 6px;
560
+ }
561
+
562
+ .timeline-task-name {
563
+ flex: 1;
564
+ font-weight: 500;
565
+ }
566
+
567
+ .timeline-fields {
568
+ display: flex;
569
+ gap: 12px;
570
+ }
571
+
572
+ .field-group {
573
+ display: flex;
574
+ flex-direction: column;
575
+ align-items: center;
576
+ }
577
+
578
+ .field-group label {
579
+ font-size: 11px;
580
+ color: var(--text-muted);
581
+ margin-bottom: 2px;
582
+ }
583
+
584
+ .field-group input {
585
+ width: 70px;
586
+ text-align: center;
587
+ }
588
+
589
+ .date-input {
590
+ width: 200px;
591
+ }
592
+
593
+ .callout {
594
+ padding: 12px 16px;
595
+ border-radius: 6px;
596
+ margin-bottom: 16px;
597
+ }
598
+
599
+ .callout-warning {
600
+ background: #fef3c7;
601
+ border: 1px solid #fbbf24;
602
+ }
603
+
604
+ .callout-info {
605
+ background: #dbeafe;
606
+ border: 1px solid #60a5fa;
607
+ }
608
+
609
+ .empty-text {
610
+ color: var(--text-muted);
611
+ font-style: italic;
612
+ padding: 12px;
613
+ text-align: center;
614
+ }
615
+
616
+ .preview-actions {
617
+ display: flex;
618
+ gap: 8px;
619
+ margin-bottom: 20px;
620
+ }
621
+
622
+ .preview-document {
623
+ max-width: 100%;
624
+ width: 100%;
625
+ }
626
+
627
+ .preview-header {
628
+ text-align: center;
629
+ margin-bottom: 32px;
630
+ padding-bottom: 16px;
631
+ border-bottom: 2px solid var(--primary);
632
+ }
633
+
634
+ .preview-header h1 {
635
+ font-size: 24px;
636
+ margin-bottom: 4px;
637
+ }
638
+
639
+ .preview-client {
640
+ color: var(--text-muted);
641
+ }
642
+
643
+ .preview-section-block {
644
+ margin-bottom: 20px;
645
+ padding-bottom: 12px;
646
+ border-bottom: 1px solid var(--border);
647
+ }
648
+
649
+ .preview-section-block:last-child {
650
+ border-bottom: none;
651
+ margin-bottom: 0;
652
+ padding-bottom: 0;
653
+ }
654
+
655
+ .preview-section-block h2 {
656
+ font-size: 18px;
657
+ border-bottom: 1px solid var(--border);
658
+ padding-bottom: 4px;
659
+ margin-bottom: 12px;
660
+ }
661
+
662
+ .preview-text h1, .preview-text h2, .preview-text h3,
663
+ .preview-text h4, .preview-text h5, .preview-text h6 {
664
+ margin: 12px 0 6px 0;
665
+ line-height: 1.3;
666
+ }
667
+ .preview-text h1 { font-size: 18px; }
668
+ .preview-text h2 { font-size: 16px; }
669
+ .preview-text h3 { font-size: 15px; }
670
+ .preview-text h4, .preview-text h5, .preview-text h6 { font-size: 14px; }
671
+ .preview-text p { margin-bottom: 8px; }
672
+ .preview-text ul, .preview-text ol {
673
+ margin: 6px 0 8px 20px;
674
+ padding: 0;
675
+ }
676
+ .preview-text li { margin-bottom: 3px; }
677
+ .preview-text code {
678
+ font-family: monospace;
679
+ font-size: 13px;
680
+ background: var(--surface-alt);
681
+ padding: 1px 4px;
682
+ border-radius: 3px;
683
+ }
684
+ .preview-task div h1, .preview-task div h2, .preview-task div h3,
685
+ .preview-task div h4, .preview-task div h5, .preview-task div h6 {
686
+ margin: 12px 0 6px 0;
687
+ }
688
+ .preview-task div p { margin-bottom: 8px; }
689
+ .preview-task div ul, .preview-task div ol {
690
+ margin: 6px 0 8px 20px;
691
+ padding: 0;
692
+ }
693
+ .preview-task div li { margin-bottom: 3px; }
694
+
695
+ .preview-task {
696
+ margin-bottom: 12px;
697
+ }
698
+
699
+ .preview-task h3 {
700
+ font-size: 15px;
701
+ margin-bottom: 4px;
702
+ }
703
+
704
+ .preview-budget-table,
705
+ .preview-timeline-table {
706
+ width: 100%;
707
+ border-collapse: collapse;
708
+ }
709
+
710
+ .preview-budget-table th,
711
+ .preview-budget-table td,
712
+ .preview-timeline-table th,
713
+ .preview-timeline-table td {
714
+ padding: 8px 12px;
715
+ text-align: left;
716
+ }
717
+
718
+ .preview-budget-table th.num-col,
719
+ .preview-budget-table td.num-col {
720
+ text-align: right;
721
+ font-variant-numeric: tabular-nums;
722
+ }
723
+
724
+ .preview-budget-table th,
725
+ .preview-timeline-table th {
726
+ background: var(--surface-alt);
727
+ font-weight: 600;
728
+ }
729
+
730
+ .preview-budget-table th.num-col {
731
+ text-align: right;
732
+ }
733
+
734
+ .preview-timeline-chart {
735
+ margin-bottom: 16px;
736
+ }
737
+
738
+ .preview-timeline-row {
739
+ display: flex;
740
+ align-items: center;
741
+ margin-bottom: 2px;
742
+ overflow: hidden;
743
+ }
744
+
745
+ .preview-timeline-label {
746
+ min-width: 90px;
747
+ max-width: 90px;
748
+ font-size: 10px;
749
+ font-weight: 500;
750
+ padding-right: 6px;
751
+ flex-shrink: 0;
752
+ white-space: nowrap;
753
+ overflow: hidden;
754
+ text-overflow: ellipsis;
755
+ }
756
+
757
+ .preview-timeline-cells {
758
+ display: flex;
759
+ flex: 1;
760
+ min-width: 0;
761
+ }
762
+ .preview-timeline-cells.preview-timeline-data-cells {
763
+ display: block;
764
+ position: relative;
765
+ height: 16px;
766
+ }
767
+
768
+ .preview-timeline-year-cell {
769
+ text-align: center;
770
+ font-size: 11px;
771
+ font-weight: 600;
772
+ color: var(--text);
773
+ padding: 4px 0;
774
+ flex-shrink: 0;
775
+ }
776
+
777
+ .preview-timeline-month-cell {
778
+ flex: 1;
779
+ text-align: center;
780
+ font-size: 10px;
781
+ color: var(--text-muted);
782
+ padding: 2px 0;
783
+ }
784
+
785
+ .preview-timeline-month-cell-year-start {
786
+ }
787
+
788
+ .preview-timeline-bar {
789
+ height: 16px;
790
+ background: #1d4ed8;
791
+ border-radius: 3px;
792
+ }
793
+
794
+ .preview-timeline-bar.preview-timeline-bar-indent {
795
+ background: #bfdbfe;
796
+ }
797
+
798
+ .preview-timeline-row-indent .preview-timeline-label {
799
+ padding-left: 16px;
800
+ font-weight: 400;
801
+ font-size: 10px;
802
+ color: var(--text-muted);
803
+ }
804
+
805
+ /* Proposals list page */
806
+ .proposals-list {
807
+ padding: 40px 24px;
808
+ }
809
+
810
+ .proposals-grid {
811
+ display: grid;
812
+ grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
813
+ gap: 16px;
814
+ }
815
+
816
+ .proposal-card {
817
+ background: var(--surface);
818
+ border: 1px solid var(--border);
819
+ border-radius: 8px;
820
+ padding: 20px;
821
+ }
822
+
823
+ .proposal-card h3 {
824
+ font-size: 16px;
825
+ margin-bottom: 4px;
826
+ }
827
+
828
+ .proposal-card .client-name {
829
+ color: var(--text-muted);
830
+ font-size: 13px;
831
+ margin-bottom: 8px;
832
+ }
833
+
834
+ .proposal-card .updated {
835
+ font-size: 12px;
836
+ color: var(--text-muted);
837
+ margin-bottom: 12px;
838
+ }
839
+
840
+ .card-actions {
841
+ display: flex;
842
+ gap: 8px;
843
+ }
844
+
845
+ .empty-state {
846
+ text-align: center;
847
+ padding: 60px 20px;
848
+ }
849
+
850
+ .empty-state h2 {
851
+ margin-bottom: 8px;
852
+ }
853
+
854
+ .empty-state p {
855
+ color: var(--text-muted);
856
+ margin-bottom: 20px;
857
+ }
858
+
859
+ /* Modal */
860
+ .modal {
861
+ position: fixed;
862
+ inset: 0;
863
+ background: rgba(0,0,0,0.4);
864
+ display: flex;
865
+ align-items: center;
866
+ justify-content: center;
867
+ z-index: 200;
868
+ }
869
+
870
+ .modal.hidden {
871
+ display: none;
872
+ }
873
+
874
+ .modal-content {
875
+ background: var(--surface);
876
+ border-radius: 12px;
877
+ width: 90%;
878
+ max-width: 600px;
879
+ max-height: 80vh;
880
+ display: flex;
881
+ flex-direction: column;
882
+ }
883
+
884
+ .modal-header {
885
+ display: flex;
886
+ justify-content: space-between;
887
+ align-items: center;
888
+ padding: 16px 20px;
889
+ border-bottom: 1px solid var(--border);
890
+ }
891
+
892
+ .modal-body {
893
+ flex: 1;
894
+ overflow-y: auto;
895
+ padding: 16px 20px;
896
+ }
897
+
898
+ .modal-footer {
899
+ padding: 12px 20px;
900
+ border-top: 1px solid var(--border);
901
+ text-align: right;
902
+ }
903
+
904
+ /* Gantt */
905
+ .gantt-container {
906
+ overflow-x: auto;
907
+ border: 1px solid var(--border);
908
+ border-radius: 8px;
909
+ padding: 16px;
910
+ background: var(--surface);
911
+ }
912
+
913
+ .gantt-header {
914
+ display: flex;
915
+ margin-bottom: 8px;
916
+ }
917
+
918
+ .gantt-label-col {
919
+ min-width: 180px;
920
+ font-weight: 600;
921
+ font-size: 12px;
922
+ color: var(--text-muted);
923
+ }
924
+
925
+ .gantt-year-row {
926
+ display: flex;
927
+ margin-bottom: 2px;
928
+ }
929
+
930
+ .gantt-year-cells {
931
+ display: flex;
932
+ flex: 1;
933
+ }
934
+
935
+ .gantt-year-cell {
936
+ text-align: center;
937
+ font-size: 12px;
938
+ font-weight: 700;
939
+ color: var(--text);
940
+ padding: 4px 0;
941
+ }
942
+
943
+ .gantt-month-cells {
944
+ display: flex;
945
+ flex: 1;
946
+ }
947
+
948
+ .gantt-month {
949
+ min-width: 60px;
950
+ text-align: center;
951
+ font-size: 11px;
952
+ color: var(--text-muted);
953
+ }
954
+
955
+ .gantt-month-year-start {
956
+ }
957
+
958
+ .gantt-row {
959
+ display: flex;
960
+ align-items: center;
961
+ margin-bottom: 4px;
962
+ }
963
+
964
+ .gantt-row-label {
965
+ min-width: 180px;
966
+ font-size: 13px;
967
+ font-weight: 500;
968
+ padding-right: 12px;
969
+ }
970
+
971
+ .gantt-row-label-budget {
972
+ padding-left: 24px;
973
+ font-weight: 400;
974
+ font-size: 12px;
975
+ color: var(--text-muted);
976
+ }
977
+
978
+ .gantt-bar.gantt-bar-budget {
979
+ background: #bfdbfe;
980
+ }
981
+
982
+ .gantt-bar-container {
983
+ display: flex;
984
+ flex: 1;
985
+ height: 24px;
986
+ }
987
+
988
+ .gantt-cell {
989
+ min-width: 60px;
990
+ height: 24px;
991
+ }
992
+
993
+ .gantt-cell.gantt-year-border {
994
+ }
995
+
996
+ .gantt-bar {
997
+ background: #1d4ed8;
998
+ height: 20px;
999
+ border-radius: 3px;
1000
+ min-width: 60px;
1001
+ }
1002
+
1003
+ .gantt-placeholder {
1004
+ text-align: center;
1005
+ color: var(--text-muted);
1006
+ padding: 24px;
1007
+ }
1008
+
1009
+ /* Indirect costs */
1010
+ .indirect-row {
1011
+ border-top: 1px solid var(--border);
1012
+ padding-top: 16px;
1013
+ }
1014
+
1015
+ .indirect-input-row {
1016
+ display: flex;
1017
+ align-items: center;
1018
+ gap: 12px;
1019
+ }
1020
+
1021
+ .indirect-input-row input {
1022
+ width: 80px;
1023
+ }
1024
+
1025
+ .indirect-label {
1026
+ flex: 1;
1027
+ font-weight: 500;
1028
+ color: var(--text-muted);
1029
+ font-size: 14px;
1030
+ }
1031
+
1032
+ .indirect-amount {
1033
+ font-weight: 600;
1034
+ font-size: 14px;
1035
+ color: var(--text-muted);
1036
+ font-variant-numeric: tabular-nums;
1037
+ }
1038
+
1039
+ .budget-total-with-indirect {
1040
+ margin-top: 12px;
1041
+ background: #f0fdf4;
1042
+ border-color: var(--success);
1043
+ }
1044
+
1045
+ .budget-total-final {
1046
+ font-size: 20px;
1047
+ font-weight: 700;
1048
+ color: var(--success);
1049
+ }
1050
+
1051
+ /* Timeline controls */
1052
+ .timeline-controls-row {
1053
+ display: flex;
1054
+ gap: 20px;
1055
+ align-items: center;
1056
+ }
1057
+
1058
+ .toggle-label {
1059
+ display: flex;
1060
+ align-items: center;
1061
+ gap: 6px;
1062
+ font-size: 13px;
1063
+ cursor: pointer;
1064
+ }
1065
+
1066
+ .toggle-label input[type="checkbox"] {
1067
+ width: auto;
1068
+ cursor: pointer;
1069
+ }
1070
+
1071
+ .budget-task-name-indent {
1072
+ padding-left: 16px;
1073
+ font-style: italic;
1074
+ }
1075
+
1076
+ /* Snippet loading */
1077
+ .snippet-loading {
1078
+ text-align: center;
1079
+ color: var(--text-muted);
1080
+ padding: 20px;
1081
+ }
1082
+
1083
+ /* Print styles */
1084
+ @media print {
1085
+ .sidebar, .app-header, .tab-nav, .preview-actions { display: none !important; }
1086
+ .main-content { margin-left: 0 !important; }
1087
+ .tab-content { padding: 0 !important; max-width: none !important; }
1088
+ .preview-document { border: none !important; box-shadow: none !important; padding: 0 !important; }
1089
+ }
1090
+
1091
+ /* Sidebar toggle arrow */
1092
+ .sidebar-toggle-btn {
1093
+ font-size: 16px;
1094
+ padding: 4px 8px;
1095
+ cursor: pointer;
1096
+ background: none;
1097
+ border: 1px solid transparent;
1098
+ border-radius: 6px;
1099
+ color: var(--text);
1100
+ transition: all 0.2s ease;
1101
+ transform: scaleX(-1);
1102
+ }
1103
+
1104
+ .sidebar-toggle-btn:hover {
1105
+ background: var(--surface-alt);
1106
+ border-color: var(--border);
1107
+ }
1108
+
1109
+ .sidebar-toggle-btn.rotated {
1110
+ transform: scaleX(1);
1111
+ }
1112
+
1113
+ /* Hamburger menu */
1114
+ .hamburger-menu {
1115
+ position: relative;
1116
+ }
1117
+
1118
+ .hamburger-btn {
1119
+ font-size: 22px;
1120
+ padding: 6px 10px;
1121
+ cursor: pointer;
1122
+ background: none;
1123
+ border: 1px solid transparent;
1124
+ border-radius: 6px;
1125
+ color: var(--text);
1126
+ transition: all 0.15s;
1127
+ }
1128
+
1129
+ .hamburger-btn:hover {
1130
+ background: var(--surface-alt);
1131
+ border-color: var(--border);
1132
+ }
1133
+
1134
+ .hamburger-dropdown {
1135
+ position: absolute;
1136
+ right: 0;
1137
+ top: 100%;
1138
+ margin-top: 4px;
1139
+ background: var(--surface);
1140
+ border: 1px solid var(--border);
1141
+ border-radius: 8px;
1142
+ box-shadow: 0 8px 24px rgba(0,0,0,0.15);
1143
+ min-width: 180px;
1144
+ z-index: 200;
1145
+ overflow: hidden;
1146
+ }
1147
+
1148
+ .hamburger-dropdown.hidden {
1149
+ display: none;
1150
+ }
1151
+
1152
+ .hamburger-item {
1153
+ display: block;
1154
+ width: 100%;
1155
+ text-align: left;
1156
+ padding: 10px 16px;
1157
+ font-size: 13px;
1158
+ font-family: inherit;
1159
+ color: var(--text);
1160
+ background: none;
1161
+ border: none;
1162
+ cursor: pointer;
1163
+ text-decoration: none;
1164
+ transition: background 0.1s;
1165
+ }
1166
+
1167
+ .hamburger-item:hover {
1168
+ background: var(--surface-alt);
1169
+ }
1170
+
1171
+ .hamburger-divider {
1172
+ border: none;
1173
+ border-top: 1px solid var(--border);
1174
+ margin: 0;
1175
+ }
1176
+
1177
+ .hamburger-theme-btn {
1178
+ display: flex;
1179
+ justify-content: space-between;
1180
+ align-items: center;
1181
+ }
1182
+
1183
+ /* Dark mode */
1184
+ [data-theme="dark"] {
1185
+ --primary: #60a5fa;
1186
+ --primary-hover: #3b82f6;
1187
+ --success: #4ade80;
1188
+ --warning: #fbbf24;
1189
+ --bg: #0f172a;
1190
+ --surface: #1e293b;
1191
+ --surface-alt: #334155;
1192
+ --border: #475569;
1193
+ --text: #e2e8f0;
1194
+ --text-muted: #94a3b8;
1195
+ }
1196
+
1197
+ [data-theme="dark"] body {
1198
+ background: var(--bg);
1199
+ color: var(--text);
1200
+ }
1201
+
1202
+ [data-theme="dark"] .title-input {
1203
+ color: var(--text);
1204
+ }
1205
+
1206
+ [data-theme="dark"] .title-input:hover {
1207
+ border-color: var(--border);
1208
+ }
1209
+
1210
+ [data-theme="dark"] .title-input:focus {
1211
+ background: var(--surface);
1212
+ border-color: var(--primary);
1213
+ }
1214
+
1215
+ [data-theme="dark"] textarea, [data-theme="dark"] input[type="text"],
1216
+ [data-theme="dark"] input[type="number"], [data-theme="dark"] input[type="date"],
1217
+ [data-theme="dark"] select {
1218
+ background: var(--surface);
1219
+ color: var(--text);
1220
+ border-color: var(--border);
1221
+ }
1222
+
1223
+ [data-theme="dark"] textarea:focus, [data-theme="dark"] input:focus,
1224
+ [data-theme="dark"] select:focus {
1225
+ box-shadow: 0 0 0 3px rgba(96, 165, 250, 0.2);
1226
+ }
1227
+
1228
+ [data-theme="dark"] .task-card {
1229
+ background: var(--surface);
1230
+ border-color: var(--border);
1231
+ }
1232
+
1233
+ [data-theme="dark"] .task-name-input, [data-theme="dark"] .task-desc-input {
1234
+ color: var(--text);
1235
+ }
1236
+
1237
+ [data-theme="dark"] .budget-item-card {
1238
+ background: var(--surface);
1239
+ border-color: var(--border);
1240
+ }
1241
+
1242
+ [data-theme="dark"] .budget-task-group {
1243
+ border-color: var(--border);
1244
+ }
1245
+
1246
+ [data-theme="dark"] .budget-task-header {
1247
+ background: var(--surface-alt);
1248
+ border-color: var(--border);
1249
+ }
1250
+
1251
+ [data-theme="dark"] .budget-summary-bar {
1252
+ background: var(--surface);
1253
+ border-color: var(--border);
1254
+ }
1255
+
1256
+ [data-theme="dark"] .budget-total-with-indirect {
1257
+ background: #052e16;
1258
+ border-color: var(--success);
1259
+ }
1260
+
1261
+ [data-theme="dark"] .timeline-input-card {
1262
+ background: var(--surface);
1263
+ border-color: var(--border);
1264
+ }
1265
+
1266
+ [data-theme="dark"] .callout-warning {
1267
+ background: #422006;
1268
+ border-color: #92400e;
1269
+ }
1270
+
1271
+ [data-theme="dark"] .callout-info {
1272
+ background: #172554;
1273
+ border-color: #1e40af;
1274
+ }
1275
+
1276
+ [data-theme="dark"] .gantt-container {
1277
+ background: var(--surface);
1278
+ border-color: var(--border);
1279
+ }
1280
+
1281
+ [data-theme="dark"] .gantt-month {
1282
+ color: var(--text-muted);
1283
+ }
1284
+
1285
+ [data-theme="dark"] .gantt-year-cell {
1286
+ color: var(--text);
1287
+ border-color: var(--border);
1288
+ }
1289
+
1290
+ [data-theme="dark"] .gantt-cell.gantt-year-border {
1291
+ border-color: #64748b;
1292
+ }
1293
+
1294
+ [data-theme="dark"] .gantt-month-year-start {
1295
+ border-color: #64748b;
1296
+ }
1297
+
1298
+ [data-theme="dark"] .preview-document {
1299
+ background: var(--surface);
1300
+ border-color: var(--border);
1301
+ }
1302
+
1303
+ [data-theme="dark"] .preview-section-block {
1304
+ border-color: var(--border);
1305
+ }
1306
+
1307
+ [data-theme="dark"] .preview-section-block h2 {
1308
+ border-color: var(--border);
1309
+ }
1310
+
1311
+ [data-theme="dark"] .preview-budget-table th, [data-theme="dark"] .preview-timeline-table th {
1312
+ background: var(--surface-alt);
1313
+ }
1314
+
1315
+ [data-theme="dark"] .modal-content {
1316
+ background: var(--surface);
1317
+ border-color: var(--border);
1318
+ }
1319
+
1320
+ [data-theme="dark"] .modal-header, [data-theme="dark"] .modal-footer {
1321
+ border-color: var(--border);
1322
+ }
1323
+
1324
+ [data-theme="dark"] .snippet-item {
1325
+ background: var(--surface);
1326
+ border-color: var(--border);
1327
+ }
1328
+
1329
+ [data-theme="dark"] .snippet-item:hover {
1330
+ background: #1e3a5f;
1331
+ }
1332
+
1333
+ [data-theme="dark"] .sidebar {
1334
+ background: var(--surface);
1335
+ border-color: var(--border);
1336
+ }
1337
+
1338
+ [data-theme="dark"] .sidebar-header {
1339
+ border-color: var(--border);
1340
+ }
1341
+
1342
+ [data-theme="dark"] .snippet-add-form {
1343
+ background: var(--surface-alt);
1344
+ border-color: var(--border);
1345
+ }
1346
+
1347
+ [data-theme="dark"] .proposal-card {
1348
+ background: var(--surface);
1349
+ border-color: var(--border);
1350
+ }
1351
+
1352
+ [data-theme="dark"] .hamburger-dropdown {
1353
+ background: var(--surface);
1354
+ border-color: var(--border);
1355
+ }
1356
+
1357
+ [data-theme="dark"] .indirect-amount {
1358
+ color: var(--text-muted);
1359
+ }