pasteup 0.1.0__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,983 @@
1
+ /*
2
+ * Pasteup: a hand-drawn look for a clip-art tool.
3
+ *
4
+ * The sketchy feel comes from wobbly border radii, an SVG roughness filter on
5
+ * card outlines (#sketchy in index.html), hard offset shadows and two bundled
6
+ * handwriting fonts. Body text, inputs and paths stay in a plain system font,
7
+ * because a handwriting font hurts reading at small sizes.
8
+ */
9
+
10
+ @font-face {
11
+ font-family: "Caveat";
12
+ src: url("../fonts/caveat-latin-700.woff2") format("woff2");
13
+ font-weight: 700;
14
+ font-style: normal;
15
+ font-display: swap;
16
+ }
17
+
18
+ @font-face {
19
+ font-family: "Patrick Hand";
20
+ src: url("../fonts/patrick-hand-latin-400.woff2") format("woff2");
21
+ font-weight: 400;
22
+ font-style: normal;
23
+ font-display: swap;
24
+ }
25
+
26
+ /* ---------- Tokens ---------- */
27
+
28
+ :root {
29
+ /* Light only: browsers that darken pages on their own leave this one alone. */
30
+ color-scheme: only light;
31
+ --paper: #fbf6ea;
32
+ --paper-raised: #fffdf7;
33
+ --paper-dot: rgba(43, 42, 51, 0.1);
34
+ --ink: #2b2a33;
35
+ --ink-soft: #57525f;
36
+ --line: #2b2a33;
37
+ --line-soft: rgba(43, 42, 51, 0.32);
38
+ --shadow: #2b2a33;
39
+ --marker: #ffd447;
40
+ --marker-ink: #2b2a33;
41
+ --accent: #1f5fa8;
42
+ --tape: rgba(236, 207, 128, 0.7);
43
+ --note: #fff3b0;
44
+ --success-ink: #1d6337;
45
+ --success-bg: #dcf1df;
46
+ --warning-ink: #8f2418;
47
+ --warning-bg: #fde2da;
48
+ --neutral-bg: #f1ebdd;
49
+ --chevron: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%232b2a33' stroke-width='2.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 9.5c2.5 2.2 4.6 4.3 7 6.6 2.4-2.4 4.5-4.6 7-7'/%3E%3C/svg%3E");
50
+ --squiggle: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 120 12' fill='none' stroke='%23ffd447' stroke-width='5' stroke-linecap='round' preserveAspectRatio='none'%3E%3Cpath d='M3 7c9-5 15 4 24 0s15-5 24 0 15 4 24 0 15-5 24 0 12 3 18 0'/%3E%3C/svg%3E");
51
+
52
+ --font-hand: "Caveat", "Patrick Hand", "Comic Sans MS", cursive;
53
+ --font-label: "Patrick Hand", "Comic Sans MS", system-ui, sans-serif;
54
+ --font-body: ui-rounded, "SF Pro Rounded", "Segoe UI", system-ui, -apple-system, Roboto, sans-serif;
55
+ --font-mono: ui-monospace, "SF Mono", Menlo, Consolas, monospace;
56
+
57
+ --wobble: 255px 15px 225px 15px / 15px 225px 15px 255px;
58
+ --wobble-soft: 14px 5px 12px 6px / 6px 12px 5px 14px;
59
+ --blob: 52% 48% 55% 45% / 48% 54% 46% 52%;
60
+ --pencil: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%232b2a33' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4.2 19.8l1.1-4.5L16.4 4.2c.8-.8 2-.8 2.8 0l.6.6c.8.8.8 2 0 2.8L8.7 18.7z'/%3E%3Cpath d='M14.4 6.3l3.3 3.3'/%3E%3C/svg%3E");
61
+ }
62
+
63
+ /* ---------- Base ---------- */
64
+
65
+ *,
66
+ *::before,
67
+ *::after {
68
+ box-sizing: border-box;
69
+ }
70
+
71
+ html {
72
+ background: var(--paper);
73
+ }
74
+
75
+ body {
76
+ margin: 0;
77
+ min-height: 100vh;
78
+ color: var(--ink);
79
+ background-color: var(--paper);
80
+ background-image: radial-gradient(var(--paper-dot) 1.2px, transparent 1.4px);
81
+ background-size: 22px 22px;
82
+ font-family: var(--font-body);
83
+ font-size: 1rem;
84
+ line-height: 1.5;
85
+ }
86
+
87
+ h1,
88
+ h2,
89
+ h3,
90
+ h4,
91
+ p {
92
+ margin: 0;
93
+ }
94
+
95
+ a {
96
+ color: var(--accent);
97
+ text-underline-offset: 0.2em;
98
+ }
99
+
100
+ [hidden],
101
+ .hidden {
102
+ display: none !important;
103
+ }
104
+
105
+ .visually-hidden {
106
+ position: absolute;
107
+ width: 1px;
108
+ height: 1px;
109
+ overflow: hidden;
110
+ clip: rect(0 0 0 0);
111
+ white-space: nowrap;
112
+ }
113
+
114
+ .svg-defs {
115
+ position: absolute;
116
+ width: 0;
117
+ height: 0;
118
+ }
119
+
120
+ .skip-link {
121
+ position: absolute;
122
+ left: 1rem;
123
+ top: -4rem;
124
+ z-index: 10;
125
+ padding: 0.5rem 1rem;
126
+ background: var(--marker);
127
+ color: var(--marker-ink);
128
+ border: 2px solid var(--line);
129
+ font-family: var(--font-label);
130
+ font-size: 1.1rem;
131
+ }
132
+
133
+ .skip-link:focus {
134
+ top: 1rem;
135
+ }
136
+
137
+ .doodle {
138
+ width: 2.25rem;
139
+ height: 2.25rem;
140
+ flex: none;
141
+ fill: none;
142
+ stroke: currentColor;
143
+ stroke-width: 2.6;
144
+ stroke-linecap: round;
145
+ stroke-linejoin: round;
146
+ }
147
+
148
+ .doodle__fill {
149
+ fill: var(--paper-raised);
150
+ }
151
+
152
+ .doodle__accent {
153
+ fill: var(--marker);
154
+ }
155
+
156
+ /* ---------- Masthead ---------- */
157
+
158
+ .masthead {
159
+ max-width: 1240px;
160
+ margin: 0 auto;
161
+ padding: 1.75rem 1.25rem 0.25rem;
162
+ display: flex;
163
+ align-items: center;
164
+ justify-content: space-between;
165
+ gap: 1rem;
166
+ flex-wrap: wrap;
167
+ }
168
+
169
+ .brand {
170
+ display: flex;
171
+ align-items: center;
172
+ gap: 0.9rem;
173
+ }
174
+
175
+ .brand .doodle {
176
+ width: 3.4rem;
177
+ height: 3.4rem;
178
+ transform: rotate(-8deg);
179
+ }
180
+
181
+ .brand h1 {
182
+ /* Hug the word, so the underline is as long as the word. */
183
+ width: fit-content;
184
+ font-family: var(--font-hand);
185
+ font-size: clamp(2.7rem, 7vw, 3.6rem);
186
+ line-height: 0.95;
187
+ padding-bottom: 0.2em;
188
+ background: var(--squiggle) no-repeat left bottom / 100% 0.32em;
189
+ }
190
+
191
+ .brand__tagline {
192
+ font-family: var(--font-label);
193
+ font-size: 1.2rem;
194
+ color: var(--ink-soft);
195
+ }
196
+
197
+ /* ---------- Layout ---------- */
198
+
199
+ .layout {
200
+ max-width: 1240px;
201
+ margin: 0 auto;
202
+ padding: 2rem 1.25rem 3rem;
203
+ display: grid;
204
+ grid-template-columns: minmax(0, 1fr);
205
+ gap: 2.5rem;
206
+ align-items: start;
207
+ }
208
+
209
+ /* Each result card follows its step in the source, so narrow screens read top
210
+ to bottom: scan, see what was found, set up, make, see the files. Wide
211
+ screens move the cards beside their steps, where they stay in view while the
212
+ step scrolls past. */
213
+ @media (min-width: 1100px) {
214
+ .layout {
215
+ grid-template-columns: minmax(0, 1.6fr) minmax(320px, 1fr);
216
+ }
217
+
218
+ .step {
219
+ grid-column: 1;
220
+ }
221
+
222
+ .step--pick {
223
+ grid-row: 1;
224
+ }
225
+
226
+ .step--page {
227
+ grid-row: 2;
228
+ }
229
+
230
+ .step--make {
231
+ grid-row: 3;
232
+ }
233
+
234
+ .result-panel {
235
+ grid-column: 2;
236
+ position: sticky;
237
+ top: 1.75rem;
238
+ }
239
+
240
+ .result-panel--scan {
241
+ grid-row: 1 / span 2;
242
+ }
243
+
244
+ .result-panel--files {
245
+ grid-row: 3;
246
+ }
247
+ }
248
+
249
+ /* ---------- Cards ---------- */
250
+
251
+ .card {
252
+ position: relative;
253
+ background: var(--paper-raised);
254
+ padding: 1.9rem 1.6rem 1.6rem;
255
+ }
256
+
257
+ /* The outline and its shadow are drawn by a pseudo-element so the roughness
258
+ filter bends the ink line without blurring the text inside. */
259
+ .card::after {
260
+ content: "";
261
+ position: absolute;
262
+ inset: 0;
263
+ border: 2px solid var(--line);
264
+ border-radius: 6px 10px 8px 12px / 12px 8px 10px 6px;
265
+ box-shadow: 4px 5px 0 var(--shadow);
266
+ filter: url("#sketchy");
267
+ pointer-events: none;
268
+ }
269
+
270
+ /* A strip of masking tape holding the card to the page. */
271
+ .card::before {
272
+ content: "";
273
+ position: absolute;
274
+ top: -0.8rem;
275
+ left: 50%;
276
+ width: 6.5rem;
277
+ height: 1.55rem;
278
+ background: var(--tape);
279
+ transform: translateX(-50%) rotate(-3deg);
280
+ z-index: 1;
281
+ }
282
+
283
+ .layout > .card:nth-child(even)::before {
284
+ left: 22%;
285
+ transform: translateX(-50%) rotate(2.5deg);
286
+ }
287
+
288
+ .step__title {
289
+ display: flex;
290
+ align-items: center;
291
+ gap: 0.7rem;
292
+ margin-bottom: 0.4rem;
293
+ font-family: var(--font-hand);
294
+ font-size: clamp(1.9rem, 4.5vw, 2.3rem);
295
+ line-height: 1.05;
296
+ }
297
+
298
+ .step__number {
299
+ display: inline-grid;
300
+ place-items: center;
301
+ width: 2.5rem;
302
+ height: 2.5rem;
303
+ flex: none;
304
+ border: 2px solid var(--line);
305
+ border-radius: var(--blob);
306
+ background: var(--marker);
307
+ color: var(--marker-ink);
308
+ font-size: 1.65rem;
309
+ transform: rotate(-7deg);
310
+ }
311
+
312
+ .step__intro {
313
+ color: var(--ink-soft);
314
+ margin-bottom: 1.25rem;
315
+ max-width: 62ch;
316
+ }
317
+
318
+ .subhead {
319
+ font-family: var(--font-hand);
320
+ font-size: 1.75rem;
321
+ line-height: 1.1;
322
+ }
323
+
324
+ /* ---------- Form controls ---------- */
325
+
326
+ .field {
327
+ min-width: 0;
328
+ }
329
+
330
+ .field + .field {
331
+ margin-top: 1rem;
332
+ }
333
+
334
+ .field-grid {
335
+ display: grid;
336
+ grid-template-columns: repeat(auto-fit, minmax(8.5rem, 1fr));
337
+ gap: 1rem 1.1rem;
338
+ }
339
+
340
+ .field-grid .field + .field {
341
+ margin-top: 0;
342
+ }
343
+
344
+ /* Five short page settings fit one row on a wide card. */
345
+ .field-grid--page {
346
+ grid-template-columns: repeat(auto-fit, minmax(6.5rem, 1fr));
347
+ }
348
+
349
+ .field-label,
350
+ legend.field-label {
351
+ display: block;
352
+ margin-bottom: 0.3rem;
353
+ font-family: var(--font-label);
354
+ font-size: 1.2rem;
355
+ line-height: 1.2;
356
+ }
357
+
358
+ .field-help {
359
+ margin-top: 0.35rem;
360
+ font-size: 0.9rem;
361
+ color: var(--ink-soft);
362
+ }
363
+
364
+ input[type="text"],
365
+ input[type="number"],
366
+ select,
367
+ textarea {
368
+ width: 100%;
369
+ min-height: 2.8rem;
370
+ padding: 0.55rem 0.8rem;
371
+ font: inherit;
372
+ color: var(--ink);
373
+ background: var(--paper);
374
+ border: 2px solid var(--line);
375
+ border-radius: var(--wobble-soft);
376
+ }
377
+
378
+ textarea {
379
+ min-height: 5.5rem;
380
+ resize: vertical;
381
+ }
382
+
383
+ select {
384
+ appearance: none;
385
+ padding-right: 2.4rem;
386
+ background-image: var(--chevron);
387
+ background-repeat: no-repeat;
388
+ background-position: right 0.65rem center;
389
+ background-size: 1.2rem;
390
+ }
391
+
392
+ input::placeholder,
393
+ textarea::placeholder {
394
+ color: var(--ink-soft);
395
+ opacity: 0.85;
396
+ }
397
+
398
+ input[readonly] {
399
+ background: var(--note);
400
+ border-style: dashed;
401
+ font-family: var(--font-mono);
402
+ font-size: 0.9rem;
403
+ }
404
+
405
+ input:disabled,
406
+ select:disabled {
407
+ border-style: dashed;
408
+ opacity: 0.6;
409
+ }
410
+
411
+ :focus-visible {
412
+ outline: 3px dashed var(--accent);
413
+ outline-offset: 3px;
414
+ }
415
+
416
+ /* Hand-drawn checkboxes: a wobbly box with a marker tick. */
417
+ .check,
418
+ .subfolder-checklist__item {
419
+ display: flex;
420
+ align-items: flex-start;
421
+ gap: 0.6rem;
422
+ font-family: var(--font-label);
423
+ font-size: 1.15rem;
424
+ line-height: 1.3;
425
+ cursor: pointer;
426
+ }
427
+
428
+ .check input,
429
+ .subfolder-checklist__item input {
430
+ appearance: none;
431
+ display: grid;
432
+ place-content: center;
433
+ width: 1.45rem;
434
+ height: 1.45rem;
435
+ margin: 0;
436
+ flex: none;
437
+ background: var(--paper);
438
+ border: 2px solid var(--line);
439
+ border-radius: 5px 9px 4px 10px / 10px 4px 9px 5px;
440
+ cursor: pointer;
441
+ }
442
+
443
+ .check input::after,
444
+ .subfolder-checklist__item input::after {
445
+ content: "";
446
+ width: 0.75rem;
447
+ height: 0.4rem;
448
+ margin-top: -0.2rem;
449
+ border-left: 3px solid var(--marker-ink);
450
+ border-bottom: 3px solid var(--marker-ink);
451
+ transform: rotate(-48deg) scale(0);
452
+ transition: transform 120ms ease-out;
453
+ }
454
+
455
+ .check input:checked,
456
+ .subfolder-checklist__item input:checked {
457
+ background: var(--marker);
458
+ }
459
+
460
+ .check input:checked::after,
461
+ .subfolder-checklist__item input:checked::after {
462
+ transform: rotate(-48deg) scale(1);
463
+ }
464
+
465
+ .check + .check,
466
+ .check + .field-help + .check {
467
+ margin-top: 0.6rem;
468
+ }
469
+
470
+ /* Mode choice: two sticky-note cards behaving as radio buttons. */
471
+ .mode-toggle {
472
+ margin: 0 0 1.25rem;
473
+ padding: 0;
474
+ border: 0;
475
+ min-width: 0;
476
+ }
477
+
478
+ .mode-toggle__options {
479
+ display: grid;
480
+ grid-template-columns: repeat(auto-fit, minmax(11rem, 1fr));
481
+ gap: 0.9rem;
482
+ }
483
+
484
+ .mode-option {
485
+ position: relative;
486
+ display: block;
487
+ cursor: pointer;
488
+ }
489
+
490
+ .mode-option input {
491
+ position: absolute;
492
+ inset: 0;
493
+ width: 100%;
494
+ height: 100%;
495
+ margin: 0;
496
+ opacity: 0;
497
+ cursor: pointer;
498
+ }
499
+
500
+ .mode-option__body {
501
+ display: block;
502
+ height: 100%;
503
+ padding: 0.8rem 1rem 0.85rem;
504
+ background: var(--paper);
505
+ border: 2px solid var(--line);
506
+ border-radius: var(--wobble);
507
+ box-shadow: 3px 4px 0 var(--shadow);
508
+ transition: transform 120ms ease-out, background-color 120ms ease-out;
509
+ }
510
+
511
+ .mode-option__title {
512
+ display: block;
513
+ font-family: var(--font-label);
514
+ font-size: 1.35rem;
515
+ line-height: 1.2;
516
+ }
517
+
518
+ .mode-option__text {
519
+ display: block;
520
+ font-size: 0.92rem;
521
+ }
522
+
523
+ .mode-option input:checked + .mode-option__body {
524
+ background: var(--marker);
525
+ color: var(--marker-ink);
526
+ transform: rotate(-1.2deg);
527
+ }
528
+
529
+ .mode-option input:checked + .mode-option__body .mode-option__title::after {
530
+ content: " \2713";
531
+ }
532
+
533
+ .mode-option input:focus-visible + .mode-option__body {
534
+ outline: 3px dashed var(--accent);
535
+ outline-offset: 4px;
536
+ }
537
+
538
+ /* Collapsible extras: native <details>, so keyboard and screen readers work. */
539
+ .disclosure {
540
+ margin-top: 1.25rem;
541
+ padding-top: 0.9rem;
542
+ border-top: 2px dashed var(--line-soft);
543
+ }
544
+
545
+ .disclosure > summary {
546
+ display: inline-flex;
547
+ align-items: center;
548
+ gap: 0.5rem;
549
+ list-style: none;
550
+ cursor: pointer;
551
+ font-family: var(--font-label);
552
+ font-size: 1.2rem;
553
+ }
554
+
555
+ .disclosure > summary::-webkit-details-marker {
556
+ display: none;
557
+ }
558
+
559
+ .disclosure > summary::before {
560
+ content: "+";
561
+ display: inline-grid;
562
+ place-items: center;
563
+ width: 1.5rem;
564
+ height: 1.5rem;
565
+ border: 2px solid var(--line);
566
+ border-radius: var(--blob);
567
+ font-size: 1.1rem;
568
+ line-height: 1;
569
+ }
570
+
571
+ .disclosure[open] > summary::before {
572
+ content: "\2013";
573
+ background: var(--marker);
574
+ color: var(--marker-ink);
575
+ }
576
+
577
+ .disclosure__body {
578
+ padding-top: 1rem;
579
+ }
580
+
581
+ .disclosure__body > .field + .field-grid {
582
+ margin-top: 1rem;
583
+ }
584
+
585
+ /* ---------- Buttons ---------- */
586
+
587
+ .primary-button,
588
+ .secondary-button {
589
+ display: inline-flex;
590
+ align-items: center;
591
+ justify-content: center;
592
+ gap: 0.5rem;
593
+ min-height: 2.9rem;
594
+ padding: 0.55rem 1.4rem;
595
+ font-family: var(--font-label);
596
+ font-size: 1.25rem;
597
+ line-height: 1.1;
598
+ color: var(--ink);
599
+ background: var(--paper-raised);
600
+ border: 2px solid var(--line);
601
+ border-radius: var(--wobble);
602
+ box-shadow: 3px 4px 0 var(--shadow);
603
+ cursor: pointer;
604
+ transition: transform 120ms ease-out, box-shadow 120ms ease-out;
605
+ }
606
+
607
+ .primary-button {
608
+ background: var(--marker);
609
+ color: var(--marker-ink);
610
+ }
611
+
612
+ .primary-button:hover:not(:disabled),
613
+ .secondary-button:hover:not(:disabled) {
614
+ transform: translate(-1px, -2px) rotate(-0.6deg);
615
+ box-shadow: 4px 6px 0 var(--shadow);
616
+ }
617
+
618
+ .primary-button:active:not(:disabled),
619
+ .secondary-button:active:not(:disabled) {
620
+ transform: translate(2px, 3px);
621
+ box-shadow: 1px 1px 0 var(--shadow);
622
+ }
623
+
624
+ .primary-button:disabled,
625
+ .secondary-button:disabled {
626
+ border-style: dashed;
627
+ box-shadow: none;
628
+ opacity: 0.55;
629
+ cursor: not-allowed;
630
+ }
631
+
632
+ .button-small {
633
+ min-height: 2.4rem;
634
+ padding: 0.35rem 1rem;
635
+ font-size: 1.1rem;
636
+ }
637
+
638
+ .actions {
639
+ display: flex;
640
+ align-items: center;
641
+ flex-wrap: wrap;
642
+ gap: 0.75rem 1.25rem;
643
+ margin-top: 1.4rem;
644
+ }
645
+
646
+ .actions__hint {
647
+ color: var(--ink-soft);
648
+ font-size: 0.95rem;
649
+ max-width: 40ch;
650
+ }
651
+
652
+ /* ---------- Step-specific ---------- */
653
+
654
+ .subpanel {
655
+ margin-top: 1.6rem;
656
+ padding: 1.25rem;
657
+ background: var(--paper);
658
+ border: 2px dashed var(--line);
659
+ border-radius: var(--wobble-soft);
660
+ }
661
+
662
+ .subpanel .subhead {
663
+ margin-bottom: 0.3rem;
664
+ }
665
+
666
+ .subfolder-checklist {
667
+ display: grid;
668
+ grid-template-columns: repeat(auto-fill, minmax(12rem, 1fr));
669
+ gap: 0.55rem 1.1rem;
670
+ margin: 0.75rem 0 1rem;
671
+ }
672
+
673
+ .subfolder-checklist__item {
674
+ align-items: center;
675
+ overflow-wrap: anywhere;
676
+ }
677
+
678
+ .subfolder-picker-row {
679
+ display: flex;
680
+ align-items: flex-end;
681
+ flex-wrap: wrap;
682
+ gap: 0.75rem;
683
+ }
684
+
685
+ .subfolder-picker-row .field {
686
+ flex: 1 1 14rem;
687
+ }
688
+
689
+ .checklist-fieldset {
690
+ margin: 0;
691
+ padding: 0;
692
+ border: 0;
693
+ min-width: 0;
694
+ }
695
+
696
+ .status-line {
697
+ margin-top: 0.6rem;
698
+ font-size: 0.95rem;
699
+ }
700
+
701
+ .status-error {
702
+ color: var(--warning-ink);
703
+ }
704
+
705
+ /* Tiles keep their own height, so each button sits right under its options. */
706
+ .output-grid {
707
+ display: grid;
708
+ grid-template-columns: repeat(auto-fit, minmax(16.5rem, 1fr));
709
+ gap: 1.4rem;
710
+ align-items: start;
711
+ }
712
+
713
+ .output-tile {
714
+ display: flex;
715
+ flex-direction: column;
716
+ gap: 0.85rem;
717
+ padding: 1.2rem 1.2rem 1.3rem;
718
+ background: var(--paper);
719
+ border: 2px dashed var(--line);
720
+ border-radius: var(--wobble);
721
+ }
722
+
723
+ .output-tile__head {
724
+ display: flex;
725
+ align-items: center;
726
+ gap: 0.6rem;
727
+ }
728
+
729
+ .output-tile__head p {
730
+ color: var(--ink-soft);
731
+ font-size: 0.95rem;
732
+ }
733
+
734
+ .output-tile .disclosure {
735
+ margin-top: 0.1rem;
736
+ }
737
+
738
+ .output-tile > .primary-button,
739
+ .output-tile > .secondary-button {
740
+ margin-top: 0.3rem;
741
+ align-self: flex-start;
742
+ }
743
+
744
+ .sticky-note {
745
+ margin: 0 0 1.6rem;
746
+ padding: 0.7rem 1rem;
747
+ background: var(--note);
748
+ color: var(--ink);
749
+ font-family: var(--font-label);
750
+ font-size: 1.15rem;
751
+ line-height: 1.3;
752
+ border-radius: 2px 2px 14px 2px;
753
+ box-shadow: 2px 3px 0 rgba(0, 0, 0, 0.14);
754
+ transform: rotate(-0.8deg);
755
+ max-width: 46ch;
756
+ }
757
+
758
+ /* ---------- Results ---------- */
759
+
760
+ .result-panel .step__title {
761
+ margin-bottom: 1rem;
762
+ }
763
+
764
+ .result-card__header {
765
+ display: flex;
766
+ flex-direction: column;
767
+ align-items: flex-start;
768
+ gap: 0.6rem;
769
+ }
770
+
771
+ .result-badge {
772
+ display: inline-block;
773
+ padding: 0.1rem 0.85rem;
774
+ font-family: var(--font-label);
775
+ font-size: 1.15rem;
776
+ color: var(--ink);
777
+ background: var(--neutral-bg);
778
+ border: 2px solid currentColor;
779
+ border-radius: var(--wobble);
780
+ transform: rotate(-2.5deg);
781
+ }
782
+
783
+ .result-badge--success {
784
+ color: var(--success-ink);
785
+ background: var(--success-bg);
786
+ }
787
+
788
+ .result-badge--warning {
789
+ color: var(--warning-ink);
790
+ background: var(--warning-bg);
791
+ }
792
+
793
+ .is-busy .result-badge--neutral {
794
+ animation: wiggle 0.9s ease-in-out infinite;
795
+ }
796
+
797
+ @keyframes wiggle {
798
+ 50% {
799
+ transform: rotate(2.5deg);
800
+ }
801
+ }
802
+
803
+ .result-message {
804
+ overflow-wrap: anywhere;
805
+ }
806
+
807
+ /* Tips and caveats, pencilled onto a sticky note. */
808
+ .result-notes {
809
+ display: grid;
810
+ gap: 0.45rem;
811
+ margin: 0.9rem 0 0;
812
+ padding: 0;
813
+ list-style: none;
814
+ }
815
+
816
+ .result-notes li {
817
+ padding: 0.5rem 0.75rem 0.5rem 2.1rem;
818
+ background: var(--note) var(--pencil) no-repeat 0.6rem 0.6rem / 1.05rem;
819
+ border-radius: 2px 2px 12px 2px;
820
+ font-size: 0.95rem;
821
+ overflow-wrap: anywhere;
822
+ }
823
+
824
+ .result-summary-grid {
825
+ display: grid;
826
+ grid-template-columns: auto 1fr;
827
+ gap: 0.25rem 1rem;
828
+ margin: 1.1rem 0 0;
829
+ padding-top: 0.8rem;
830
+ border-top: 2px dashed var(--line-soft);
831
+ }
832
+
833
+ .result-summary-row {
834
+ display: contents;
835
+ }
836
+
837
+ .result-summary-row dt {
838
+ font-family: var(--font-label);
839
+ font-size: 1.1rem;
840
+ color: var(--ink-soft);
841
+ }
842
+
843
+ .result-summary-row dd {
844
+ margin: 0;
845
+ font-weight: 600;
846
+ }
847
+
848
+ .result-section h3 {
849
+ margin: 1.1rem 0 0.4rem;
850
+ font-family: var(--font-label);
851
+ font-size: 1.2rem;
852
+ font-weight: 400;
853
+ }
854
+
855
+ .result-list {
856
+ display: grid;
857
+ gap: 0.2rem;
858
+ margin: 0;
859
+ padding: 0;
860
+ list-style: none;
861
+ }
862
+
863
+ .result-list__item {
864
+ position: relative;
865
+ padding-left: 1.3rem;
866
+ font-size: 0.95rem;
867
+ overflow-wrap: anywhere;
868
+ }
869
+
870
+ .result-list__item::before {
871
+ content: "\2736";
872
+ position: absolute;
873
+ left: 0;
874
+ color: var(--ink-soft);
875
+ font-size: 0.8rem;
876
+ line-height: 1.9;
877
+ }
878
+
879
+ .result-list__more {
880
+ padding-left: 1.3rem;
881
+ font-family: var(--font-label);
882
+ font-size: 1.05rem;
883
+ color: var(--ink-soft);
884
+ }
885
+
886
+ .result-path {
887
+ display: flex;
888
+ align-items: flex-start;
889
+ gap: 0.6rem;
890
+ padding: 0.5rem 0.55rem 0.5rem 0.8rem;
891
+ background: var(--note);
892
+ border: 2px dashed var(--line);
893
+ border-radius: var(--wobble-soft);
894
+ }
895
+
896
+ .result-path code {
897
+ flex: 1;
898
+ min-width: 0;
899
+ padding-top: 0.2rem;
900
+ font-family: var(--font-mono);
901
+ font-size: 0.85rem;
902
+ white-space: pre-wrap;
903
+ overflow-wrap: anywhere;
904
+ }
905
+
906
+ .copy-button {
907
+ flex: none;
908
+ min-height: 2rem;
909
+ padding: 0.1rem 0.75rem;
910
+ font-family: var(--font-label);
911
+ font-size: 1.05rem;
912
+ color: var(--ink);
913
+ background: var(--paper-raised);
914
+ border: 2px solid var(--line);
915
+ border-radius: var(--wobble);
916
+ box-shadow: 2px 2px 0 var(--shadow);
917
+ cursor: pointer;
918
+ transition: transform 120ms ease-out, box-shadow 120ms ease-out;
919
+ }
920
+
921
+ .copy-button:hover {
922
+ transform: translate(-1px, -1px) rotate(-1.5deg);
923
+ }
924
+
925
+ .copy-button:active {
926
+ transform: translate(1px, 1px);
927
+ box-shadow: none;
928
+ }
929
+
930
+ .result-empty,
931
+ .muted-text {
932
+ color: var(--ink-soft);
933
+ }
934
+
935
+ /* ---------- Footer ---------- */
936
+
937
+ .site-footer {
938
+ max-width: 1240px;
939
+ margin: 0 auto;
940
+ padding: 0 1.25rem 2.5rem;
941
+ color: var(--ink-soft);
942
+ font-family: var(--font-label);
943
+ font-size: 1.05rem;
944
+ }
945
+
946
+ /* ---------- Small screens ---------- */
947
+
948
+ @media (max-width: 560px) {
949
+ .card {
950
+ padding: 1.7rem 1.1rem 1.3rem;
951
+ }
952
+
953
+ .layout {
954
+ padding-top: 1.5rem;
955
+ gap: 2.2rem;
956
+ }
957
+
958
+ .actions > .primary-button,
959
+ .output-tile > .primary-button,
960
+ .output-tile > .secondary-button,
961
+ .subpanel .primary-button {
962
+ width: 100%;
963
+ align-self: stretch;
964
+ }
965
+ }
966
+
967
+ /* ---------- Motion ---------- */
968
+
969
+ @media (prefers-reduced-motion: reduce) {
970
+ *,
971
+ *::before,
972
+ *::after {
973
+ animation: none !important;
974
+ transition: none !important;
975
+ }
976
+
977
+ .primary-button:hover:not(:disabled),
978
+ .secondary-button:hover:not(:disabled),
979
+ .primary-button:active:not(:disabled),
980
+ .secondary-button:active:not(:disabled) {
981
+ transform: none;
982
+ }
983
+ }