Skip to main content

max / makenotwork

11.8 KB · 643 lines History Blame Raw
1 /* Creation Wizard Layout */
2
3 .wizard-layout {
4 display: flex;
5 max-width: 1100px;
6 margin: 0 auto;
7 gap: 2rem;
8 min-height: 60vh;
9 }
10
11 .wizard-sidebar {
12 width: 220px;
13 flex-shrink: 0;
14 padding-top: 0.5rem;
15 }
16
17 .wizard-sidebar h2 {
18 font-family: var(--font-heading); font-weight: bold;
19 font-size: 1.3rem;
20 margin-bottom: 1.5rem;
21 }
22
23 .wizard-content {
24 flex: 1;
25 min-width: 0;
26 }
27
28 /* Step Indicator */
29
30 .wizard-steps {
31 list-style: none;
32 padding: 0;
33 margin: 0;
34 }
35
36 .wizard-step-indicator {
37 display: flex;
38 align-items: center;
39 gap: 0.6rem;
40 padding: 0.5rem 0;
41 font-size: 0.9rem;
42 color: var(--text-muted);
43 position: relative;
44 }
45
46 .wizard-step-indicator + .wizard-step-indicator::before {
47 content: '';
48 position: absolute;
49 left: 12px;
50 top: -4px;
51 width: 1px;
52 height: 12px;
53 background: var(--border);
54 }
55
56 .wizard-step-indicator.completed + .wizard-step-indicator::before {
57 background: var(--highlight);
58 }
59
60 .step-number {
61 display: inline-flex;
62 align-items: center;
63 justify-content: center;
64 width: 24px;
65 height: 24px;
66 border-radius: 50%;
67 font-size: 0.75rem;
68 font-weight: bold;
69 flex-shrink: 0;
70 border: 2px solid var(--border);
71 color: var(--text-muted);
72 background: transparent;
73 }
74
75 .wizard-step-indicator.active .step-number {
76 border-color: var(--highlight);
77 background: var(--highlight);
78 color: var(--primary-light);
79 }
80
81 .wizard-step-indicator.completed .step-number {
82 border-color: var(--highlight);
83 color: var(--highlight);
84 }
85
86 .wizard-step-indicator.active .step-label {
87 color: var(--detail);
88 font-weight: bold;
89 }
90
91 .wizard-step-indicator.completed .step-label {
92 color: var(--detail);
93 }
94
95 /* Step Content */
96
97 .wizard-step {
98 background: var(--light-background);
99 padding: 2rem;
100 border-radius: 4px;
101 }
102
103 .wizard-step h2 {
104 font-family: var(--font-heading); font-weight: bold;
105 font-size: 1.6rem;
106 margin-bottom: 0.25rem;
107 }
108
109 .step-description {
110 color: var(--text-muted);
111 font-size: 0.9rem;
112 margin-bottom: 1.5rem;
113 }
114
115 /* Wizard Actions (button row) */
116
117 .wizard-actions {
118 display: flex;
119 align-items: center;
120 gap: 0.75rem;
121 margin-top: 2rem;
122 padding-top: 1.5rem;
123 border-top: 1px solid var(--border);
124 flex-wrap: wrap;
125 }
126
127 .wizard-actions .primary {
128 margin-left: auto;
129 }
130
131 /* Type Card Grid */
132
133 .type-grid {
134 display: grid;
135 grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));
136 gap: 0.75rem;
137 margin-top: 0.5rem;
138 }
139
140 .type-grid-large {
141 grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
142 }
143
144 /* (.type-card primitive lives in style.css under the .card--selectable
145 canonical recipe; this file only contains wizard-specific layouts.) */
146
147 /* Suggestion Input (category, tags) */
148
149 .suggestion-input {
150 position: relative;
151 }
152
153 .suggestion-dropdown {
154 display: none;
155 position: absolute;
156 top: 100%;
157 left: 0;
158 right: 0;
159 background: var(--background);
160 border: 1px solid var(--border);
161 border-top: none;
162 border-radius: 0 0 4px 4px;
163 max-height: 200px;
164 overflow-y: auto;
165 z-index: 10;
166 box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
167 }
168
169 .suggestion-dropdown.open {
170 display: block;
171 }
172
173 .suggestion-item {
174 padding: 0.5rem 0.75rem;
175 cursor: pointer;
176 font-size: 0.9rem;
177 }
178
179 .suggestion-item:hover {
180 background: var(--light-background);
181 }
182
183 .suggestion-create {
184 font-style: italic;
185 opacity: 0.8;
186 border-top: 1px solid var(--border);
187 }
188
189 /* (`.monetization-card{,-cards,.info-only}` removed 2026-05-20 — dead CSS,
190 no template references. Selectable monetization choices use the canonical
191 `.card--selectable` recipe in style.css.) */
192
193 .tier-row {
194 display: flex;
195 justify-content: space-between;
196 padding: 0.4rem 0;
197 font-size: 0.9rem;
198 border-bottom: 1px solid var(--border);
199 }
200
201 .tier-form-row {
202 display: grid;
203 grid-template-columns: 1fr 1fr 2fr;
204 gap: 0.75rem;
205 margin-top: 0.5rem;
206 padding: 0.75rem;
207 background: var(--surface-alt);
208 border-radius: 4px;
209 }
210
211 /* Pricing Cards */
212
213 .pricing-cards {
214 display: grid;
215 grid-template-columns: repeat(3, 1fr);
216 gap: 1rem;
217 margin-bottom: 1.5rem;
218 }
219
220 /* (`.pricing-card`, `.content-choice-card`, and the `.is-disabled` modifier
221 all live in style.css under the canonical `.card--selectable` recipe.) */
222 .pricing-fields {
223 margin-top: 1rem;
224 }
225
226 .content-choice-cards {
227 display: grid;
228 grid-template-columns: 1fr 1fr;
229 gap: 1rem;
230 margin-bottom: 1.5rem;
231 }
232
233 /* Preview Summary */
234
235 .preview-summary {
236 margin-bottom: 1.5rem;
237 }
238
239 .preview-row {
240 display: flex;
241 padding: 0.6rem 0;
242 border-bottom: 1px solid var(--border);
243 font-size: 0.9rem;
244 }
245
246 .preview-row.indent {
247 padding-left: 1.5rem;
248 }
249
250 .preview-label {
251 width: 180px;
252 flex-shrink: 0;
253 color: var(--text-muted);
254 font-weight: bold;
255 }
256
257 .preview-value {
258 flex: 1;
259 }
260
261 /* Preview Checklist */
262
263 .preview-checklist {
264 margin-bottom: 1.5rem;
265 }
266
267 .preview-checklist h3 {
268 font-family: var(--font-mono);
269 font-size: 0.95rem;
270 margin-bottom: 0.5rem;
271 }
272
273 .preview-checklist ul {
274 list-style: none;
275 padding: 0;
276 margin: 0;
277 }
278
279 .preview-checklist li {
280 padding: 0.3rem 0;
281 padding-left: 3.5rem;
282 position: relative;
283 font-size: 0.9rem;
284 }
285
286 .preview-checklist li::before {
287 position: absolute;
288 left: 0;
289 font-family: var(--font-mono);
290 font-size: 0.75rem;
291 text-transform: uppercase;
292 letter-spacing: 0.04em;
293 line-height: 1.6;
294 }
295
296 .check-done::before {
297 content: "Done";
298 color: var(--success);
299 }
300
301 .check-missing::before {
302 content: "Todo";
303 color: var(--text-muted);
304 }
305
306 /* Upload Areas */
307
308 .upload-area {
309 border: 2px dashed var(--border);
310 border-radius: 4px;
311 padding: 2rem;
312 text-align: center;
313 cursor: pointer;
314 transition: border-color 0.15s;
315 background: var(--background);
316 }
317
318 .upload-area:hover,
319 .upload-area.dragover {
320 border-color: var(--highlight);
321 }
322
323 /* Project Image Dropzone */
324
325 .project-image-dropzone {
326 border: 2px dashed var(--border);
327 border-radius: 4px;
328 padding: 2rem;
329 text-align: center;
330 cursor: pointer;
331 transition: border-color 0.15s;
332 background: var(--background);
333 max-width: 300px;
334 }
335
336 .project-image-dropzone:hover,
337 .project-image-dropzone.dragover {
338 border-color: var(--highlight);
339 }
340
341 .project-image-placeholder {
342 color: var(--text-muted);
343 }
344
345 .project-image-upload {
346 display: flex;
347 flex-direction: column;
348 gap: 0.75rem;
349 max-width: 300px;
350 }
351
352 .project-image-upload .secondary {
353 align-self: flex-start;
354 }
355
356 .project-image-current img {
357 width: 200px;
358 height: 200px;
359 object-fit: cover;
360 border-radius: 4px;
361 }
362
363 .upload-progress-inline {
364 font-size: 0.85rem;
365 display: flex;
366 flex-wrap: wrap;
367 align-items: center;
368 gap: 0.5rem;
369 }
370
371 .upload-progress-inline .progress-bar-container {
372 width: 100%;
373 height: 6px;
374 background: var(--border);
375 border-radius: 3px;
376 overflow: hidden;
377 }
378
379 .upload-progress-inline .progress-bar {
380 height: 100%;
381 background: var(--highlight);
382 transition: width 0.2s;
383 }
384
385 .upload-error-inline {
386 font-size: 0.85rem;
387 color: var(--danger, #c0392b);
388 padding: 0.5rem 0.75rem;
389 background: rgba(192, 57, 43, 0.08);
390 border-radius: 4px;
391 }
392
393 /* Project Card Preview */
394
395 .project-card-preview {
396 display: flex;
397 gap: 1rem;
398 align-items: center;
399 padding: 1rem;
400 background: var(--background);
401 border: 1px solid var(--border);
402 border-radius: 4px;
403 }
404
405 .preview-cover {
406 width: 80px;
407 height: 80px;
408 flex-shrink: 0;
409 border-radius: 4px;
410 overflow: hidden;
411 background: var(--surface-muted);
412 }
413
414 .preview-cover img {
415 width: 100%;
416 height: 100%;
417 object-fit: cover;
418 }
419
420 .preview-cover-empty {
421 display: flex;
422 align-items: center;
423 justify-content: center;
424 height: 100%;
425 font-size: 0.75rem;
426 color: var(--text-muted);
427 }
428
429 /* Distribution */
430
431 .distribution-section {
432 background: var(--background);
433 padding: 1.25rem;
434 border: 1px solid var(--border);
435 border-radius: 4px;
436 }
437
438 .distribution-section h3 {
439 font-family: var(--font-mono);
440 font-size: 0.95rem;
441 margin-bottom: 0.5rem;
442 }
443
444 .checkbox-label {
445 display: flex;
446 align-items: center;
447 gap: 0.5rem;
448 cursor: pointer;
449 font-size: 0.9rem;
450 }
451
452 /* Monospace input for text editor */
453
454 .monospace-input {
455 font-family: var(--font-mono);
456 font-size: 0.85rem;
457 line-height: 1.6;
458 }
459
460 /* Readonly field */
461
462 .readonly-field {
463 opacity: 0.6;
464 cursor: not-allowed;
465 }
466
467 /* Info box */
468
469 .info-box {
470 background: var(--surface-alt);
471 padding: 1rem;
472 border-radius: 4px;
473 font-size: 0.9rem;
474 }
475
476 /* Responsive */
477
478 @media (max-width: 768px) {
479 .wizard-layout {
480 flex-direction: column;
481 }
482
483 .wizard-sidebar {
484 width: 100%;
485 }
486
487 .wizard-steps {
488 display: flex;
489 gap: 0.25rem;
490 overflow-x: auto;
491 }
492
493 .wizard-step-indicator {
494 flex-direction: column;
495 gap: 0.2rem;
496 font-size: 0.75rem;
497 min-width: 0;
498 }
499
500 .wizard-step-indicator + .wizard-step-indicator::before {
501 display: none;
502 }
503
504 .step-label {
505 white-space: nowrap;
506 }
507
508 .pricing-cards,
509 .content-choice-cards {
510 grid-template-columns: 1fr;
511 }
512
513 .type-grid {
514 grid-template-columns: repeat(2, 1fr);
515 }
516
517 .tier-form-row {
518 grid-template-columns: 1fr;
519 }
520
521 .preview-row {
522 flex-direction: column;
523 gap: 0.25rem;
524 }
525
526 .preview-label {
527 width: auto;
528 }
529 }
530
531 /* ===========================================
532 WIZARD STEPS — shared step-level patterns
533 ===========================================
534 Patterns shared across:
535 - wizards/wizard_project.html
536 - wizards/steps/project/basics.html
537 - wizards/steps/project/appearance.html
538 - wizards/steps/item/basics.html
539 - wizards/steps/join/stripe.html
540 */
541
542 /* Intro paragraph below .step-description that explains the concept. */
543 .wizard-step .form-hint {
544 margin-bottom: 1.5rem;
545 }
546
547 /* "Checking..." style spinner shown next to async-validated inputs. */
548 .wizard-field-spinner {
549 font-size: 0.85rem;
550 }
551
552 /* Spacing helpers for hints that sit just above a control group. */
553 .wizard-hint-gap-sm { margin-bottom: 0.5rem; }
554 .wizard-hint-gap-md { margin-bottom: 0.75rem; }
555
556 /* Vertical radio group for AI disclosure and similar one-of-many pickers. */
557 .wizard-radio-group {
558 display: flex;
559 flex-direction: column;
560 gap: 0.5rem;
561 }
562
563 .wizard-radio-option {
564 display: flex;
565 align-items: center;
566 gap: 0.5rem;
567 cursor: pointer;
568 }
569
570 /* Optional-label suffix, e.g. "(optional)". */
571 .wizard-optional-tag {
572 opacity: 0.5;
573 font-weight: normal;
574 }
575
576 /* Square cover images inside upload previews (project + item basics). */
577 .wizard-cover-img {
578 width: 100%;
579 aspect-ratio: 1 / 1;
580 object-fit: cover;
581 }
582
583 /* Stripe-step layout. */
584 .stripe-connect-box {
585 background: var(--surface-muted);
586 padding: var(--space-4);
587 text-align: center;
588 margin: var(--space-3) 0;
589 }
590
591 .stripe-connect-box .stripe-intro {
592 margin: var(--space-3) 0;
593 opacity: 0.8;
594 }
595
596 .stripe-connect-actions {
597 margin-top: var(--space-4);
598 }
599
600 .stripe-connect-cta {
601 display: inline-block;
602 padding: 0.75rem 1.5rem;
603 text-decoration: none;
604 background: var(--stripe);
605 border: none;
606 color: var(--primary-light);
607 }
608
609 .stripe-connect-cta:hover {
610 opacity: 0.85;
611 }
612
613 .stripe-connect-note {
614 font-size: 0.8rem;
615 opacity: 0.5;
616 margin-top: var(--space-3);
617 }
618
619 .stripe-connect-note-secondary {
620 font-size: 0.8rem;
621 opacity: 0.7;
622 margin-top: var(--space-2);
623 }
624
625 .stripe-benefits {
626 text-align: left;
627 margin-top: var(--space-3);
628 }
629
630 .benefit-item {
631 padding: 0.4rem 0 0.4rem 1.5rem;
632 position: relative;
633 font-size: 0.9rem;
634 }
635
636 .benefit-item::before {
637 content: "";
638 position: absolute;
639 left: 0;
640 color: var(--success);
641 }
642
643