decksmith 0.1.15__py3-none-any.whl → 0.9.1__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,656 @@
1
+ :root {
2
+ /* Colors - Modern Dark Theme (VS Code inspired) */
3
+ --bg-primary: #1e1e1e;
4
+ --bg-secondary: #252526;
5
+ --bg-tertiary: #333333;
6
+ --bg-header: #1e1e1e; /* Seamless header */
7
+ --bg-input: #3c3c3c;
8
+ --bg-hover: #2a2d2e;
9
+ --bg-active: #37373d;
10
+
11
+ --text-primary: #cccccc;
12
+ --text-secondary: #969696;
13
+ --text-muted: #6e6e6e;
14
+ --text-inverse: #ffffff;
15
+
16
+ --accent-color: #007fd4; /* VS Code Blue */
17
+ --accent-hover: #026ec1;
18
+ --danger-color: #f14c4c;
19
+ --danger-hover: #d43b3b;
20
+ --success-color: #4caf50;
21
+ --warning-color: #cca700;
22
+
23
+ --border-color: #3e3e42; /* Subtle borders */
24
+ --border-focus: #007fd4;
25
+
26
+ /* Spacing */
27
+ --spacing-xs: 4px;
28
+ --spacing-sm: 8px;
29
+ --spacing-md: 16px;
30
+ --spacing-lg: 24px;
31
+ --spacing-xl: 32px;
32
+
33
+ /* Layout */
34
+ --header-height: 50px;
35
+ --radius-sm: 3px;
36
+ --radius-md: 5px;
37
+ --radius-lg: 8px;
38
+
39
+ /* Shadows */
40
+ --shadow-sm: 0 2px 4px rgba(0, 0, 0, 0.1);
41
+ --shadow-md: 0 4px 8px rgba(0, 0, 0, 0.2);
42
+ --shadow-lg: 0 8px 16px rgba(0, 0, 0, 0.3);
43
+ }
44
+
45
+ body, html {
46
+ margin: 0;
47
+ padding: 0;
48
+ height: 100%;
49
+ font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
50
+ background-color: var(--bg-primary);
51
+ color: var(--text-primary);
52
+ overflow: hidden;
53
+ font-size: 13px; /* Slightly smaller, more dense interface */
54
+ line-height: 1.5;
55
+ }
56
+
57
+ /* Scrollbars */
58
+ ::-webkit-scrollbar {
59
+ width: 10px;
60
+ height: 10px;
61
+ }
62
+
63
+ ::-webkit-scrollbar-track {
64
+ background: transparent;
65
+ }
66
+
67
+ ::-webkit-scrollbar-thumb {
68
+ background: #424242;
69
+ border-radius: 10px;
70
+ border: 2px solid var(--bg-primary); /* Creates padding effect */
71
+ }
72
+
73
+ ::-webkit-scrollbar-thumb:hover {
74
+ background: #4f4f4f;
75
+ }
76
+
77
+ ::-webkit-scrollbar-corner {
78
+ background: transparent;
79
+ }
80
+
81
+ /* Header */
82
+ #header {
83
+ height: var(--header-height);
84
+ background: var(--bg-header);
85
+ border-bottom: 1px solid var(--border-color);
86
+ display: flex;
87
+ align-items: center;
88
+ justify-content: space-between;
89
+ padding: 0 var(--spacing-md);
90
+ box-sizing: border-box;
91
+ user-select: none;
92
+ }
93
+
94
+ .app-branding {
95
+ display: flex;
96
+ align-items: center;
97
+ gap: var(--spacing-sm);
98
+ color: var(--text-primary);
99
+ font-size: 1.1em;
100
+ font-weight: 600;
101
+ }
102
+
103
+ .app-branding i {
104
+ color: var(--accent-color);
105
+ }
106
+
107
+ .project-controls {
108
+ display: flex;
109
+ align-items: center;
110
+ gap: var(--spacing-md);
111
+ }
112
+
113
+ .project-path-container {
114
+ display: flex;
115
+ align-items: center;
116
+ gap: var(--spacing-sm);
117
+ color: var(--text-secondary);
118
+ background: var(--bg-secondary);
119
+ padding: 4px 12px;
120
+ border-radius: var(--radius-sm);
121
+ font-size: 0.9em;
122
+ max-width: 400px;
123
+ border: 1px solid transparent;
124
+ transition: border-color 0.2s;
125
+ }
126
+
127
+ .project-path-container:hover {
128
+ border-color: var(--border-color);
129
+ }
130
+
131
+ #current-project-path {
132
+ font-family: 'Consolas', 'Monaco', monospace;
133
+ white-space: nowrap;
134
+ overflow: hidden;
135
+ text-overflow: ellipsis;
136
+ }
137
+
138
+ .button-group {
139
+ display: flex;
140
+ gap: var(--spacing-xs);
141
+ }
142
+
143
+ /* Buttons */
144
+ .btn {
145
+ padding: 6px 14px;
146
+ border: 1px solid transparent;
147
+ background: transparent;
148
+ color: var(--text-primary);
149
+ cursor: pointer;
150
+ border-radius: var(--radius-sm);
151
+ font-family: inherit;
152
+ font-size: 0.95em;
153
+ font-weight: 500;
154
+ transition: all 0.15s ease;
155
+ display: inline-flex;
156
+ align-items: center;
157
+ gap: 8px;
158
+ outline: none;
159
+ }
160
+
161
+ .btn:hover {
162
+ background: var(--bg-hover);
163
+ color: var(--text-inverse);
164
+ }
165
+
166
+ .btn:active {
167
+ background: var(--bg-active);
168
+ transform: translateY(1px);
169
+ }
170
+
171
+ .btn.primary {
172
+ background: var(--accent-color);
173
+ color: white;
174
+ }
175
+
176
+ .btn.primary:hover {
177
+ background: var(--accent-hover);
178
+ }
179
+
180
+ .btn.danger {
181
+ background: var(--danger-color);
182
+ color: white;
183
+ }
184
+
185
+ .btn.danger:hover {
186
+ background: var(--danger-hover);
187
+ }
188
+
189
+ .btn.small {
190
+ padding: 4px 10px;
191
+ font-size: 0.9em;
192
+ }
193
+
194
+ /* Layout Containers */
195
+ .app-container {
196
+ display: flex;
197
+ height: calc(100vh - var(--header-height));
198
+ width: 100vw;
199
+ }
200
+
201
+ #left-pane, #right-pane {
202
+ height: 100%;
203
+ display: flex;
204
+ flex-direction: column;
205
+ }
206
+
207
+ #left-pane {
208
+ width: 50%;
209
+ background: var(--bg-secondary);
210
+ }
211
+
212
+ #right-pane {
213
+ width: 50%;
214
+ background: var(--bg-primary);
215
+ padding: 0; /* Removed padding for cleaner split */
216
+ }
217
+
218
+ #editors-container {
219
+ height: 100%;
220
+ width: 100%;
221
+ display: flex;
222
+ flex-direction: column;
223
+ }
224
+
225
+ #yaml-pane, #csv-pane {
226
+ display: flex;
227
+ flex-direction: column;
228
+ height: 50%;
229
+ background: var(--bg-secondary);
230
+ }
231
+
232
+ .pane-header {
233
+ background: var(--bg-secondary);
234
+ padding: 8px 16px;
235
+ font-weight: 600;
236
+ font-size: 0.85em;
237
+ text-transform: uppercase;
238
+ letter-spacing: 0.5px;
239
+ color: var(--text-secondary);
240
+ display: flex;
241
+ align-items: center;
242
+ justify-content: space-between;
243
+ }
244
+
245
+ #yaml-editor, #csv-editor {
246
+ flex-grow: 1;
247
+ width: 100%;
248
+ height: 100%;
249
+ }
250
+
251
+ /* Preview Area */
252
+ .preview-wrapper {
253
+ display: flex;
254
+ flex-direction: column;
255
+ height: 100%;
256
+ background: var(--bg-primary);
257
+ overflow: hidden;
258
+ }
259
+
260
+ .controls {
261
+ padding: 10px 16px;
262
+ background: var(--bg-primary);
263
+ border-bottom: 1px solid var(--border-color);
264
+ display: flex;
265
+ justify-content: space-between;
266
+ align-items: center;
267
+ }
268
+
269
+ .control-group {
270
+ display: flex;
271
+ align-items: center;
272
+ gap: var(--spacing-md);
273
+ }
274
+
275
+ .control-group label {
276
+ color: var(--text-secondary);
277
+ font-weight: 500;
278
+ display: flex;
279
+ align-items: center;
280
+ gap: 8px;
281
+ font-size: 0.95em;
282
+ }
283
+
284
+ .select-wrapper {
285
+ position: relative;
286
+ }
287
+
288
+ .select-wrapper::after {
289
+ content: '\f078'; /* FontAwesome chevron-down */
290
+ font-family: 'Font Awesome 6 Free';
291
+ font-weight: 900;
292
+ position: absolute;
293
+ right: 10px;
294
+ top: 50%;
295
+ transform: translateY(-50%);
296
+ color: var(--text-secondary);
297
+ pointer-events: none;
298
+ font-size: 0.8em;
299
+ }
300
+
301
+ select {
302
+ appearance: none;
303
+ -webkit-appearance: none;
304
+ background: var(--bg-input);
305
+ color: var(--text-primary);
306
+ border: 1px solid var(--border-color);
307
+ padding: 6px 30px 6px 12px;
308
+ border-radius: var(--radius-sm);
309
+ outline: none;
310
+ font-family: inherit;
311
+ font-size: 0.95em;
312
+ cursor: pointer;
313
+ width: 100%;
314
+ box-sizing: border-box;
315
+ transition: border-color 0.2s;
316
+ }
317
+
318
+ select:hover {
319
+ border-color: var(--text-muted);
320
+ }
321
+
322
+ select:focus {
323
+ border-color: var(--border-focus);
324
+ }
325
+
326
+ .preview-area {
327
+ flex-grow: 1;
328
+ display: flex;
329
+ justify-content: center;
330
+ align-items: center;
331
+ background-color: #1a1a1a;
332
+ /* Checkered background for transparency */
333
+ background-image:
334
+ linear-gradient(45deg, #222 25%, transparent 25%),
335
+ linear-gradient(-45deg, #222 25%, transparent 25%),
336
+ linear-gradient(45deg, transparent 75%, #222 75%),
337
+ linear-gradient(-45deg, transparent 75%, #222 75%);
338
+ background-size: 20px 20px;
339
+ background-position: 0 0, 0 10px, 10px -10px, -10px 0px;
340
+ overflow: auto;
341
+ position: relative;
342
+ padding: var(--spacing-lg);
343
+ box-sizing: border-box;
344
+ }
345
+
346
+ #preview-image {
347
+ max-width: 100%;
348
+ max-height: 100%;
349
+ object-fit: contain;
350
+ box-shadow: var(--shadow-lg);
351
+ border-radius: var(--radius-sm);
352
+ transition: transform 0.2s ease;
353
+ }
354
+
355
+ #loading-indicator {
356
+ position: absolute;
357
+ top: 0;
358
+ left: 0;
359
+ width: 100%;
360
+ height: 100%;
361
+ display: flex;
362
+ justify-content: center;
363
+ align-items: center;
364
+ color: var(--accent-color);
365
+ z-index: 10;
366
+ background: rgba(0, 0, 0, 0.2);
367
+ backdrop-filter: blur(2px);
368
+ }
369
+
370
+ #placeholder-text {
371
+ color: var(--text-muted);
372
+ font-size: 1.1em;
373
+ display: flex;
374
+ flex-direction: column;
375
+ align-items: center;
376
+ gap: 16px;
377
+ user-select: none;
378
+ }
379
+
380
+ #placeholder-text::before {
381
+ content: '\f03e'; /* FontAwesome image icon */
382
+ font-family: 'Font Awesome 6 Free';
383
+ font-weight: 900;
384
+ font-size: 4em;
385
+ opacity: 0.2;
386
+ }
387
+
388
+ /* Status Bar */
389
+ #status-bar {
390
+ padding: 4px 12px;
391
+ background: var(--accent-color);
392
+ color: white;
393
+ font-size: 0.85em;
394
+ font-weight: 500;
395
+ display: flex;
396
+ align-items: center;
397
+ gap: 8px;
398
+ height: 24px;
399
+ transition: background-color 0.3s ease, color 0.3s ease;
400
+ }
401
+
402
+
403
+ #status-bar.processing {
404
+ background-color: var(--warning-color);
405
+ color: var(--bg-primary);
406
+ }
407
+
408
+ #status-bar.success {
409
+ background-color: var(--success-color);
410
+ }
411
+
412
+ .status-line {
413
+ height: 2px;
414
+ width: 100%;
415
+ background-color: transparent;
416
+ transition: background-color 0.3s ease;
417
+ }
418
+
419
+ .status-line.success { background-color: var(--success-color); }
420
+ .status-line.error { background-color: var(--danger-color); }
421
+ .status-line.loading { background-color: var(--warning-color); }
422
+
423
+ /* Toasts */
424
+ #toast-container {
425
+ position: fixed;
426
+ bottom: 30px;
427
+ right: 30px;
428
+ z-index: 1000;
429
+ display: flex;
430
+ flex-direction: column;
431
+ gap: 12px;
432
+ }
433
+
434
+ .toast {
435
+ background: var(--bg-tertiary);
436
+ color: var(--text-primary);
437
+ padding: 14px 20px;
438
+ border-radius: var(--radius-md);
439
+ box-shadow: var(--shadow-lg);
440
+ opacity: 0;
441
+ transform: translateY(20px);
442
+ transition: opacity 0.3s, transform 0.3s;
443
+ min-width: 280px;
444
+ border-left: 4px solid transparent;
445
+ display: flex;
446
+ align-items: center;
447
+ gap: 12px;
448
+ font-size: 0.95em;
449
+ }
450
+
451
+ .toast.show {
452
+ opacity: 1;
453
+ transform: translateY(0);
454
+ }
455
+
456
+ .toast.success { border-left-color: var(--success-color); }
457
+ .toast.error { border-left-color: var(--danger-color); }
458
+ .toast.info { border-left-color: var(--accent-color); }
459
+
460
+ /* Split.js gutters */
461
+ .gutter {
462
+ background-color: var(--bg-primary);
463
+ background-repeat: no-repeat;
464
+ background-position: 50%;
465
+ transition: background-color 0.2s;
466
+ z-index: 10;
467
+ }
468
+
469
+ .gutter:hover {
470
+ background-color: var(--accent-color);
471
+ }
472
+
473
+ .gutter.gutter-horizontal {
474
+ cursor: col-resize;
475
+ width: 4px; /* Thinner gutter */
476
+ }
477
+
478
+ .gutter.gutter-vertical {
479
+ cursor: row-resize;
480
+ height: 4px; /* Thinner gutter */
481
+ }
482
+
483
+ /* Modals */
484
+ .modal {
485
+ position: fixed;
486
+ top: 0;
487
+ left: 0;
488
+ width: 100%;
489
+ height: 100%;
490
+ z-index: 2000;
491
+ display: flex;
492
+ justify-content: center;
493
+ align-items: center;
494
+ backdrop-filter: blur(5px);
495
+ opacity: 0;
496
+ pointer-events: none;
497
+ transition: opacity 0.2s ease;
498
+ }
499
+
500
+ .modal:not(.hidden) {
501
+ opacity: 1;
502
+ pointer-events: auto;
503
+ }
504
+
505
+ .modal-overlay {
506
+ position: absolute;
507
+ top: 0;
508
+ left: 0;
509
+ width: 100%;
510
+ height: 100%;
511
+ background: rgba(0, 0, 0, 0.5);
512
+ }
513
+
514
+ .modal-content {
515
+ position: relative;
516
+ background: var(--bg-secondary);
517
+ padding: var(--spacing-lg);
518
+ border-radius: var(--radius-lg);
519
+ box-shadow: var(--shadow-lg);
520
+ width: 450px;
521
+ max-width: 90%;
522
+ z-index: 2001;
523
+ border: 1px solid var(--border-color);
524
+ transform: scale(0.95);
525
+ transition: transform 0.2s ease;
526
+ }
527
+
528
+ .modal:not(.hidden) .modal-content {
529
+ transform: scale(1);
530
+ }
531
+
532
+ .modal-content h3, .modal-content h1 {
533
+ margin-top: 0;
534
+ margin-bottom: var(--spacing-md);
535
+ color: var(--text-inverse);
536
+ font-weight: 600;
537
+ }
538
+
539
+ .form-group {
540
+ margin-bottom: var(--spacing-lg);
541
+ }
542
+
543
+ .form-group label {
544
+ display: block;
545
+ margin-bottom: var(--spacing-sm);
546
+ font-weight: 500;
547
+ color: var(--text-secondary);
548
+ font-size: 0.9em;
549
+ }
550
+
551
+ .input-group {
552
+ display: flex;
553
+ gap: var(--spacing-sm);
554
+ }
555
+
556
+ input[type="text"] {
557
+ width: 100%;
558
+ padding: 10px 12px;
559
+ box-sizing: border-box;
560
+ border: 1px solid var(--border-color);
561
+ border-radius: var(--radius-sm);
562
+ background: var(--bg-input);
563
+ color: var(--text-primary);
564
+ outline: none;
565
+ font-family: inherit;
566
+ font-size: 0.95em;
567
+ transition: border-color 0.2s;
568
+ }
569
+
570
+ input[type="text"]:focus {
571
+ border-color: var(--border-focus);
572
+ }
573
+
574
+ .modal-actions {
575
+ display: flex;
576
+ justify-content: flex-end;
577
+ gap: var(--spacing-sm);
578
+ margin-top: var(--spacing-lg);
579
+ }
580
+
581
+ .btn.secondary {
582
+ background: transparent;
583
+ border: 1px solid var(--border-color);
584
+ color: var(--text-primary);
585
+ }
586
+
587
+ .btn.secondary:hover {
588
+ background: var(--bg-tertiary);
589
+ border-color: var(--text-secondary);
590
+ }
591
+
592
+ /* Welcome Screen */
593
+ .welcome-content {
594
+ text-align: center;
595
+ padding: 60px 40px;
596
+ width: 500px;
597
+ background: var(--bg-secondary);
598
+ border: 1px solid var(--border-color);
599
+ }
600
+
601
+ .welcome-content h1 {
602
+ font-size: 2.2em;
603
+ margin-bottom: 16px;
604
+ background: linear-gradient(135deg, var(--accent-color), #a366ff);
605
+ -webkit-background-clip: text;
606
+ -webkit-text-fill-color: transparent;
607
+ letter-spacing: -0.5px;
608
+ }
609
+
610
+ .welcome-content p {
611
+ color: var(--text-secondary);
612
+ margin-bottom: 40px;
613
+ font-size: 1.1em;
614
+ line-height: 1.6;
615
+ }
616
+
617
+ .welcome-actions {
618
+ display: flex;
619
+ justify-content: center;
620
+ gap: var(--spacing-md);
621
+ }
622
+
623
+ .btn.large {
624
+ padding: 12px 28px;
625
+ font-size: 1.05em;
626
+ font-weight: 600;
627
+ }
628
+
629
+ .hidden {
630
+ display: none !important;
631
+ }
632
+
633
+ /* Form Grid */
634
+ .form-grid {
635
+ display: grid;
636
+ grid-template-columns: 1fr 1fr;
637
+ gap: var(--spacing-md);
638
+ }
639
+
640
+ input[type="number"] {
641
+ width: 100%;
642
+ padding: 10px 12px;
643
+ box-sizing: border-box;
644
+ border: 1px solid var(--border-color);
645
+ border-radius: var(--radius-sm);
646
+ background: var(--bg-input);
647
+ color: var(--text-primary);
648
+ outline: none;
649
+ font-family: inherit;
650
+ font-size: 0.95em;
651
+ transition: border-color 0.2s;
652
+ }
653
+
654
+ input[type="number"]:focus {
655
+ border-color: var(--border-focus);
656
+ }