PluginProbe
Subscriptions for WooCommerce with Stripe Recurring Payments / 2.0.0
Subscriptions for WooCommerce with Stripe Recurring Payments v2.0.0
2.0.0 1.11.2 1.11.1 1.11.0 1.10.9 1.10.8 1.10.7 1.10.6 1.10.5 1.10.4 1.10.3 1.10.2 1.10.1 1.10.0 1.9.6 1.9.5 trunk 1.3.0 1.3.1 1.3.2 1.4.0 1.4.1 1.4.2 1.5.0 1.5.1 All 61 releases
subscription / assets / css / admin / onboarding-wizard.css

onboarding-wizard.css in Subscriptions for WooCommerce with Stripe Recurring Payments 2.0.0, at assets/css/admin/onboarding-wizard.css

1,855 lines 43.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 /**
2 * Onboarding Wizard styles.
3 *
4 * Extracted from includes/Admin/views/onboarding-wizard.php.
5 * Enqueued via includes/Admin/Menu.php (handle: subscrpt-onboarding-wizard).
6 */
7 #subscrpt-onboarding-wizard {
8 max-width: 900px;
9 }
10
11 /* Two columns: the steps on the left, a persistent live-preview rail on the
12 right that stays put while the steps swap. */
13 /* One card: steps top-left, its nav footer bottom-left, and the preview
14 spanning the full height of the right column. */
15 .wpsubs-wizard-layout {
16 display: grid;
17 grid-template-columns: minmax(0, 1fr) 420px;
18 grid-template-rows: 1fr auto;
19 grid-template-areas:
20 "steps preview"
21 "footer preview";
22 background: var(--wpsubs-surface, #fff);
23 border: 1px solid var(--wpsubs-border, #e5e7eb);
24 border-radius: var(--wpsubs-radius, 8px);
25 box-shadow: var(--wpsubs-shadow, 0 1px 3px rgba(0, 0, 0, 0.08));
26 }
27 .wpsubs-wizard-steps {
28 grid-area: steps;
29 min-width: 0;
30 padding: 28px 32px;
31 }
32 .wpsubs-wizard-aside {
33 grid-area: preview;
34 display: flex;
35 flex-direction: column;
36 justify-content: center;
37 padding: 28px 32px;
38 border-left: 1px solid var(--wpsubs-border, #e5e7eb);
39 }
40 .wpsubs-preview {
41 width: 100%;
42 }
43 /* Footer carries the step's Back / Continue buttons, under the steps only. */
44 .wpsubs-wizard-footer {
45 grid-area: footer;
46 border-top: 1px solid var(--wpsubs-border, #e5e7eb);
47 padding: 16px 32px;
48 }
49 .wpsubs-wizard-nav {
50 display: flex;
51 align-items: center;
52 justify-content: space-between;
53 gap: 12px;
54 }
55 /* `display: flex` outweighs the bare `hidden` attribute, so restate it. */
56 .wpsubs-wizard-nav[hidden] {
57 display: none;
58 }
59 /* Grouped secondary links on the finish step (left of the Finish button). */
60 .wpsubs-wizard-nav__group {
61 display: flex;
62 gap: 12px;
63 }
64 .wpsubs-preview__label {
65 margin: 0 0 2px;
66 font-size: 11px;
67 font-weight: 700;
68 letter-spacing: 0.08em;
69 text-transform: uppercase;
70 color: var(--wpsubs-text-muted, #6b7280);
71 text-align: center;
72 }
73 .wpsubs-preview__caption {
74 margin: 12px 2px 0;
75 font-size: 12px;
76 line-height: 1.5;
77 color: var(--wpsubs-text-muted, #6b7280);
78 text-align: center;
79 }
80 @media (max-width: 900px) {
81 .wpsubs-wizard-layout {
82 grid-template-columns: minmax(0, 1fr);
83 grid-template-areas:
84 "steps"
85 "preview"
86 "footer";
87 }
88 .wpsubs-wizard-aside {
89 justify-content: flex-start;
90 border-left: none;
91 border-top: 1px solid var(--wpsubs-border, #e5e7eb);
92 }
93 }
94
95 /* Page sections — all rendered, JS toggles visibility. The active section
96 animates in on each step change. */
97 .wpsubs-wizard-section {
98 display: none;
99 }
100 .wpsubs-wizard-section.active {
101 display: block;
102 animation: wpsubs-section-in 0.35s cubic-bezier(0.22, 1, 0.36, 1) both;
103 }
104 @keyframes wpsubs-section-in {
105 from {
106 opacity: 0;
107 transform: translateY(10px);
108 }
109 to {
110 opacity: 1;
111 transform: translateY(0);
112 }
113 }
114 @media (prefers-reduced-motion: reduce) {
115 .wpsubs-wizard-section.active {
116 animation: none;
117 }
118 }
119 /* The welcome step animates its own inner content and hosts an absolutely
120 positioned background layer, so it must NOT get the section-level transform —
121 a transform would make it a containing block and shrink that background to
122 the centered card instead of the full panel. */
123 #subscrpt-section-0.wpsubs-wizard-section.active {
124 animation: none;
125 }
126 /* Stepper */
127 .wpsubs-wizard-stepper {
128 display: flex;
129 align-items: center;
130 width: fit-content;
131 margin: 0 auto 32px;
132 gap: 0;
133 }
134 .wpsubs-wizard-stepper__step {
135 display: flex;
136 align-items: center;
137 gap: 10px;
138 }
139 .wpsubs-wizard-stepper__num {
140 width: 28px;
141 height: 28px;
142 border-radius: 50%;
143 background: var(--wpsubs-surface-muted);
144 border: 1.5px solid var(--wpsubs-border);
145 display: flex;
146 align-items: center;
147 justify-content: center;
148 font-size: 12px;
149 font-weight: 600;
150 color: var(--wpsubs-text-muted);
151 flex-shrink: 0;
152 transition: all 0.2s;
153 }
154 .wpsubs-wizard-stepper__step.active .wpsubs-wizard-stepper__num {
155 background: var(--wpsubs-brand);
156 border-color: var(--wpsubs-brand);
157 color: var(--wpsubs-surface);
158 }
159 .wpsubs-wizard-stepper__step.done .wpsubs-wizard-stepper__num {
160 background: var(--wpsubs-brand);
161 border-color: var(--wpsubs-brand);
162 color: transparent;
163 position: relative;
164 }
165 .wpsubs-wizard-stepper__step.done .wpsubs-wizard-stepper__num::after {
166 content: "✓";
167 position: absolute;
168 color: var(--wpsubs-surface);
169 font-size: 11px;
170 font-weight: 700;
171 top: 50%;
172 left: 50%;
173 transform: translate(-50%, -50%);
174 }
175 .wpsubs-wizard-stepper__step.done + .wpsubs-wizard-stepper__line {
176 background: var(--wpsubs-brand);
177 }
178 .wpsubs-wizard-stepper__label {
179 font-size: 13px;
180 font-weight: 500;
181 color: var(--wpsubs-text-muted);
182 white-space: nowrap;
183 transition: color 0.2s;
184 }
185 .wpsubs-wizard-stepper__step.active .wpsubs-wizard-stepper__label {
186 color: var(--wpsubs-brand);
187 }
188 .wpsubs-wizard-stepper__line {
189 width: 48px;
190 flex-shrink: 0;
191 height: 1px;
192 background: var(--wpsubs-border);
193 margin: 0 8px;
194 }
195 /* Card */
196 /* No longer its own box — it is the left half of the shared card. */
197 .wpsubs-wizard-card {
198 padding: 0;
199 margin-bottom: 16px;
200 }
201
202 /* Welcome page (step 0): standalone intro — no preview, no footer nav. */
203 .wpsubs-wizard-layout.is-welcome {
204 grid-template-columns: 1fr;
205 grid-template-areas: "steps";
206 position: relative;
207 overflow: hidden;
208 }
209 .wpsubs-wizard-layout.is-welcome .wpsubs-wizard-aside,
210 .wpsubs-wizard-layout.is-welcome .wpsubs-wizard-footer {
211 display: none;
212 }
213 /* Center the intro in the available height so it doesn't sit at the top. */
214 .wpsubs-wizard-layout.is-welcome .wpsubs-wizard-steps {
215 position: relative;
216 z-index: 1;
217 display: flex;
218 align-items: center;
219 justify-content: center;
220 min-height: 500px;
221 overflow: hidden;
222 }
223 /* Faint dotted texture across the whole panel. */
224 .wpsubs-wizard-layout.is-welcome .wpsubs-wizard-steps::before {
225 content: "";
226 position: absolute;
227 inset: 0;
228 z-index: 0;
229 background-image: radial-gradient(var(--wpsubs-border, #e5e7eb) 1px, transparent 1px);
230 background-size: 22px 22px;
231 -webkit-mask-image: radial-gradient(ellipse 70% 70% at 50% 45%, #000 40%, transparent 100%);
232 mask-image: radial-gradient(ellipse 70% 70% at 50% 45%, #000 40%, transparent 100%);
233 opacity: 0.5;
234 pointer-events: none;
235 }
236 /* Two soft brand blobs drifting behind the card. */
237 .wpsubs-welcome-bg {
238 position: absolute;
239 inset: 0;
240 z-index: 0;
241 overflow: hidden;
242 pointer-events: none;
243 }
244 .wpsubs-welcome-bg::before,
245 .wpsubs-welcome-bg::after {
246 content: "";
247 position: absolute;
248 border-radius: 50%;
249 filter: blur(48px);
250 }
251 .wpsubs-welcome-bg::before {
252 width: 320px;
253 height: 320px;
254 top: -110px;
255 left: -90px;
256 background: radial-gradient(circle at 30% 30%, rgba(255, 77, 0, 0.22), transparent 70%);
257 animation: wpsubs-welcome-float-a 13s ease-in-out infinite;
258 }
259 .wpsubs-welcome-bg::after {
260 width: 360px;
261 height: 360px;
262 right: -120px;
263 bottom: -140px;
264 background: radial-gradient(circle at 60% 60%, rgba(255, 166, 133, 0.28), transparent 70%);
265 animation: wpsubs-welcome-float-b 17s ease-in-out infinite;
266 }
267 @keyframes wpsubs-welcome-float-a {
268 0%,
269 100% {
270 transform: translate(0, 0) scale(1);
271 }
272 50% {
273 transform: translate(26px, 20px) scale(1.08);
274 }
275 }
276 @keyframes wpsubs-welcome-float-b {
277 0%,
278 100% {
279 transform: translate(0, 0) scale(1);
280 }
281 50% {
282 transform: translate(-30px, -18px) scale(1.1);
283 }
284 }
285 .wpsubs-welcome {
286 position: relative;
287 z-index: 1;
288 max-width: 440px;
289 margin: 0 auto;
290 padding: 8px 0;
291 text-align: center;
292 animation: wpsubs-welcome-in 0.5s cubic-bezier(0.22, 1, 0.36, 1) both;
293 }
294 @keyframes wpsubs-welcome-in {
295 from {
296 opacity: 0;
297 transform: translateY(12px);
298 }
299 to {
300 opacity: 1;
301 transform: translateY(0);
302 }
303 }
304 .wpsubs-welcome__logo {
305 display: block;
306 width: 64px;
307 height: 64px;
308 margin: 0 auto 20px;
309 background: transparent;
310 /* drop-shadow follows the icon's transparent shape (box-shadow would frame
311 the square box and show through the transparent corners). */
312 filter: drop-shadow(0 8px 16px rgba(255, 77, 0, 0.28));
313 animation: wpsubs-welcome-float-logo 5.5s ease-in-out infinite;
314 }
315 @keyframes wpsubs-welcome-float-logo {
316 0%,
317 100% {
318 transform: translateY(0);
319 }
320 50% {
321 transform: translateY(-6px);
322 }
323 }
324 .wpsubs-welcome__title {
325 font-size: 25px;
326 font-weight: 800;
327 color: var(--wpsubs-text, #374151);
328 margin: 0 0 10px;
329 line-height: 1.25;
330 }
331 .wpsubs-welcome__lead {
332 font-size: 14px;
333 color: var(--wpsubs-text-muted, #6b7280);
334 line-height: 1.65;
335 margin: 0 auto;
336 max-width: 400px;
337 }
338 .wpsubs-welcome__steps {
339 list-style: none;
340 margin: 28px auto 0;
341 padding: 0;
342 text-align: left;
343 display: grid;
344 gap: 10px;
345 }
346 .wpsubs-welcome__steps li {
347 display: flex;
348 align-items: center;
349 gap: 12px;
350 padding: 13px 15px;
351 font-size: 13.5px;
352 font-weight: 500;
353 color: var(--wpsubs-text, #374151);
354 background: var(--wpsubs-surface-muted, #f9fafb);
355 border: 1px solid var(--wpsubs-border, #e5e7eb);
356 border-radius: var(--wpsubs-radius, 8px);
357 transition:
358 border-color 0.15s,
359 box-shadow 0.15s,
360 transform 0.15s;
361 animation: wpsubs-welcome-in 0.5s cubic-bezier(0.22, 1, 0.36, 1) both;
362 }
363 .wpsubs-welcome__steps li:nth-child(1) {
364 animation-delay: 0.12s;
365 }
366 .wpsubs-welcome__steps li:nth-child(2) {
367 animation-delay: 0.19s;
368 }
369 .wpsubs-welcome__steps li:nth-child(3) {
370 animation-delay: 0.26s;
371 }
372 .wpsubs-welcome__steps li:hover {
373 border-color: var(--wpsubs-brand, #ff4d00);
374 box-shadow: 0 2px 10px rgba(255, 77, 0, 0.1);
375 transform: translateX(2px);
376 }
377 .wpsubs-welcome__num {
378 display: inline-flex;
379 align-items: center;
380 justify-content: center;
381 flex-shrink: 0;
382 width: 26px;
383 height: 26px;
384 border-radius: 50%;
385 background: var(--wpsubs-brand, #ff4d00);
386 color: #fff;
387 font-size: 12px;
388 font-weight: 700;
389 }
390 .wpsubs-welcome__actions {
391 display: flex;
392 flex-direction: column;
393 align-items: center;
394 gap: 12px;
395 margin-top: 28px;
396 }
397 .wpsubs-btn--lg {
398 padding: 10px 22px;
399 font-size: 14px;
400 }
401 .wpsubs-welcome__skip {
402 background: none;
403 border: 0;
404 padding: 0;
405 cursor: pointer;
406 font-size: 13px;
407 color: var(--wpsubs-text-muted, #6b7280);
408 }
409 .wpsubs-welcome__skip:hover {
410 color: var(--wpsubs-text, #374151);
411 text-decoration: underline;
412 }
413 /* Respect reduced-motion: keep the layout, drop the movement. */
414 @media (prefers-reduced-motion: reduce) {
415 .wpsubs-welcome,
416 .wpsubs-welcome__logo,
417 .wpsubs-welcome__steps li,
418 .wpsubs-welcome-bg::before,
419 .wpsubs-welcome-bg::after {
420 animation: none;
421 }
422 }
423 /* Form rows (shared) */
424 .wpsubs-form-row {
425 margin-bottom: 16px;
426 }
427 .wpsubs-form-row label {
428 display: block;
429 font-size: 13px;
430 font-weight: 500;
431 color: var(--wpsubs-text);
432 margin-bottom: 6px;
433 }
434 /* Page 2 */
435 .wpsubs-p2-page-title {
436 font-size: 22px;
437 font-weight: 800;
438 color: var(--wpsubs-text);
439 margin: 0 0 8px;
440 line-height: 1.25;
441 }
442 .wpsubs-p2-page-subtitle {
443 font-size: 13.5px;
444 color: var(--wpsubs-text-muted);
445 line-height: 1.6;
446 margin: 0 0 28px;
447 }
448 .wpsubs-p2-section-block {
449 margin-bottom: 28px;
450 }
451 .wpsubs-p2-section-label {
452 font-size: 14px;
453 font-weight: 700;
454 color: var(--wpsubs-text);
455 margin: 0 0 4px;
456 }
457 .wpsubs-p2-section-desc {
458 font-size: 13px;
459 color: var(--wpsubs-text-muted);
460 margin: 0 0 14px;
461 }
462 /* Option cards */
463 .wpsubs-p2-option-cards {
464 display: grid;
465 grid-template-columns: 1fr 1fr;
466 gap: 12px;
467 margin-bottom: 12px;
468 }
469 .wpsubs-p2-option-card {
470 position: relative;
471 display: flex;
472 flex-direction: column;
473 gap: 6px;
474 padding: 16px;
475 border: 1px solid var(--wpsubs-border);
476 border-radius: var(--wpsubs-radius);
477 background: var(--wpsubs-surface);
478 cursor: pointer;
479 text-align: left;
480 transition:
481 border-color 0.15s,
482 background 0.15s;
483 }
484 .wpsubs-p2-option-card:hover {
485 border-color: var(--wpsubs-brand);
486 }
487 .wpsubs-p2-option-card.active {
488 border-color: var(--wpsubs-brand);
489 background: var(--wpsubs-brand-light);
490 }
491 .wpsubs-p2-option-card__icon {
492 width: 32px;
493 height: 32px;
494 border-radius: 6px;
495 border: 1px solid var(--wpsubs-border);
496 background: var(--wpsubs-surface);
497 display: flex;
498 align-items: center;
499 justify-content: center;
500 color: var(--wpsubs-text-muted);
501 margin-bottom: 4px;
502 }
503 .wpsubs-p2-option-card.active .wpsubs-p2-option-card__icon {
504 border-color: var(--wpsubs-brand);
505 color: var(--wpsubs-brand);
506 }
507 .wpsubs-p2-option-card__title {
508 font-size: 13px;
509 font-weight: 700;
510 color: var(--wpsubs-text);
511 margin: 0;
512 }
513 .wpsubs-p2-option-card__desc {
514 font-size: 12px;
515 color: var(--wpsubs-text-muted);
516 margin: 0;
517 line-height: 1.5;
518 }
519 /* Selected product chip */
520 .wpsubs-p2-selected-product {
521 display: flex;
522 align-items: center;
523 gap: 12px;
524 padding: 10px 14px;
525 border: 1px solid var(--wpsubs-border);
526 border-radius: var(--wpsubs-radius);
527 background: var(--wpsubs-surface);
528 margin-bottom: 4px;
529 }
530 .wpsubs-p2-selected-product__avatar {
531 width: 36px;
532 height: 36px;
533 border-radius: 6px;
534 background: var(--wpsubs-surface-muted);
535 border: 1px solid var(--wpsubs-border);
536 display: flex;
537 align-items: center;
538 justify-content: center;
539 font-size: 11px;
540 font-weight: 700;
541 color: var(--wpsubs-text-muted);
542 flex-shrink: 0;
543 }
544 .wpsubs-p2-selected-product__info {
545 flex: 1;
546 min-width: 0;
547 }
548 .wpsubs-p2-selected-product__name {
549 font-size: 13px;
550 font-weight: 600;
551 color: var(--wpsubs-text);
552 margin: 0 0 2px;
553 white-space: nowrap;
554 overflow: hidden;
555 text-overflow: ellipsis;
556 }
557 .wpsubs-p2-selected-product__meta {
558 font-size: 12px;
559 color: var(--wpsubs-text-muted);
560 margin: 0;
561 }
562 .wpsubs-p2-selected-product__clear {
563 background: none;
564 border: none;
565 cursor: pointer;
566 color: var(--wpsubs-text-muted);
567 font-size: 18px;
568 line-height: 1;
569 padding: 0 4px;
570 flex-shrink: 0;
571 transition: color 0.15s;
572 }
573 .wpsubs-p2-selected-product__clear:hover {
574 color: var(--wpsubs-text);
575 }
576 /* Section 2 body */
577 .wpsubs-p2-body {
578 display: grid;
579 grid-template-columns: 1fr 260px;
580 gap: 32px;
581 align-items: start;
582 }
583 .wpsubs-p2-form-grid {
584 display: grid;
585 grid-template-columns: 1fr 1fr;
586 gap: 16px;
587 margin-bottom: 16px;
588 }
589 .wpsubs-p2-form-grid .wpsubs-form-row {
590 margin-bottom: 0;
591 }
592 .wpsubs-p2-input-wrap {
593 position: relative;
594 }
595 .wpsubs-p2-input-prefix {
596 position: absolute;
597 left: 11px;
598 top: 50%;
599 transform: translateY(-50%);
600 font-size: 13px;
601 color: var(--wpsubs-text-muted);
602 pointer-events: none;
603 z-index: 1;
604 }
605 .wpsubs-p2-input-prefix + .wpsubs-input {
606 padding-left: 24px !important;
607 }
608 .wpsubs-p2-input-suffix {
609 position: absolute;
610 right: 11px;
611 top: 50%;
612 transform: translateY(-50%);
613 font-size: 13px;
614 color: var(--wpsubs-text-muted);
615 pointer-events: none;
616 }
617 .wpsubs-p2-input-suffix-input {
618 padding-right: 44px !important;
619 }
620 .wpsubs-p2-field-hint {
621 font-size: 12px;
622 color: var(--wpsubs-text-muted);
623 margin-top: 5px;
624 line-height: 1.4;
625 }
626
627 /* Page 3: per-duration pricing rows (name + price + on/off toggle) --------- */
628 .wpsubs-connect-dur {
629 display: flex;
630 align-items: center;
631 gap: 12px;
632 padding: 10px 12px;
633 border: 1px solid var(--wpsubs-border, #e5e7eb);
634 border-radius: var(--wpsubs-radius, 8px);
635 background: var(--wpsubs-surface, #fff);
636 margin-bottom: 8px;
637 }
638 .wpsubs-connect-dur:last-child {
639 margin-bottom: 0;
640 }
641 .wpsubs-connect-dur__icon {
642 display: inline-flex;
643 align-items: center;
644 justify-content: center;
645 flex-shrink: 0;
646 width: 28px;
647 height: 28px;
648 border-radius: 6px;
649 background: var(--wpsubs-brand-light, #fff1eb);
650 color: var(--wpsubs-brand, #ff4d00);
651 }
652 .wpsubs-connect-dur__icon svg {
653 width: 15px;
654 height: 15px;
655 }
656 .wpsubs-connect-dur__text {
657 flex: 1;
658 min-width: 0;
659 }
660 .wpsubs-connect-dur__name {
661 margin: 0;
662 font-size: 13px;
663 font-weight: 600;
664 color: var(--wpsubs-text, #374151);
665 overflow: hidden;
666 text-overflow: ellipsis;
667 white-space: nowrap;
668 }
669 .wpsubs-connect-dur__billing {
670 margin: 0;
671 font-size: 11.5px;
672 color: var(--wpsubs-text-muted, #6b7280);
673 }
674 .wpsubs-connect-dur__price {
675 flex-shrink: 0;
676 width: 104px;
677 }
678 .wpsubs-connect-dur__price .wpsubs-input {
679 width: 100%;
680 }
681 .wpsubs-connect-dur__switch {
682 flex-shrink: 0;
683 display: inline-flex;
684 align-items: center;
685 cursor: pointer;
686 }
687 /* Dim the price of a duration that's toggled off. */
688 .wpsubs-connect-dur.is-off .wpsubs-connect-dur__text,
689 .wpsubs-connect-dur.is-off .wpsubs-connect-dur__price {
690 opacity: 0.5;
691 }
692 .wpsubs-p2-label-optional {
693 font-weight: 400;
694 color: var(--wpsubs-text-subtle);
695 font-size: 12px;
696 margin-left: 4px;
697 }
698 /* Page 2 right preview */
699 .wpsubs-p2-preview-col {
700 position: sticky;
701 top: 80px;
702 }
703 .wpsubs-p2-preview-col-label {
704 font-size: 11px;
705 font-weight: 700;
706 letter-spacing: 0.08em;
707 text-transform: uppercase;
708 color: var(--wpsubs-text-muted);
709 margin: 0 0 10px;
710 }
711 .wpsubs-p2-preview-col-desc {
712 font-size: 12px;
713 color: var(--wpsubs-text-muted);
714 line-height: 1.5;
715 margin-top: 10px;
716 }
717 /* Page 2 nav (outside card) */
718 .wpsubs-p2-nav {
719 display: flex;
720 align-items: center;
721 justify-content: space-between;
722 margin-top: 16px;
723 }
724 .wpsubs-p2-nav-back {
725 background: none;
726 border: none;
727 cursor: pointer;
728 font-size: 13px;
729 color: var(--wpsubs-text-muted);
730 display: flex;
731 align-items: center;
732 gap: 4px;
733 padding: 0;
734 transition: color 0.15s;
735 }
736 .wpsubs-p2-nav-back:hover {
737 color: var(--wpsubs-text);
738 }
739 /* Product search */
740 .wpsubs-p2-product-search {
741 position: relative;
742 }
743 .wpsubs-p2-product-search__input-wrap {
744 display: flex;
745 align-items: center;
746 gap: 8px;
747 border: 1px solid var(--wpsubs-border);
748 border-radius: var(--wpsubs-radius);
749 padding: 0 12px;
750 background: var(--wpsubs-surface);
751 transition:
752 border-color 0.15s,
753 box-shadow 0.15s;
754 }
755 .wpsubs-p2-product-search__input-wrap:focus-within {
756 border-color: var(--wpsubs-brand);
757 box-shadow: 0 0 0 3px var(--wpsubs-brand-ring);
758 }
759 .wpsubs-p2-product-search__icon {
760 color: var(--wpsubs-text-muted);
761 flex-shrink: 0;
762 }
763 .wpsubs-p2-product-search__input,
764 .wpsubs-p2-product-search__input:focus {
765 flex: 1;
766 border: none !important;
767 outline: none !important;
768 box-shadow: none !important;
769 padding: 9px 0 !important;
770 font-size: 13px;
771 background: transparent !important;
772 }
773 .wpsubs-p2-product-search__dropdown {
774 position: absolute;
775 top: calc(100% + 4px);
776 left: 0;
777 right: 0;
778 background: var(--wpsubs-surface);
779 border: 1px solid var(--wpsubs-border);
780 border-radius: var(--wpsubs-radius);
781 box-shadow: var(--wpsubs-shadow-md);
782 z-index: 999;
783 max-height: 300px;
784 overflow-y: auto;
785 padding: 4px;
786 }
787 .wpsubs-p2-product-search__item {
788 display: flex;
789 align-items: center;
790 gap: 12px;
791 padding: 9px 10px;
792 border-radius: var(--wpsubs-radius-sm);
793 cursor: pointer;
794 transition: background 0.1s;
795 }
796 .wpsubs-p2-product-search__item:hover {
797 background: var(--wpsubs-surface-muted);
798 }
799 .wpsubs-p2-product-search__avatar {
800 width: 36px;
801 height: 36px;
802 border-radius: 8px;
803 display: flex;
804 align-items: center;
805 justify-content: center;
806 font-size: 12px;
807 font-weight: 700;
808 flex-shrink: 0;
809 }
810 .wpsubs-p2-product-search__info {
811 flex: 1;
812 min-width: 0;
813 }
814 .wpsubs-p2-product-search__name {
815 font-size: 13px;
816 font-weight: 600;
817 color: var(--wpsubs-text);
818 margin: 0 0 2px;
819 white-space: nowrap;
820 overflow: hidden;
821 text-overflow: ellipsis;
822 }
823 .wpsubs-p2-product-search__meta {
824 font-size: 12px;
825 color: var(--wpsubs-text-muted);
826 margin: 0;
827 }
828 .wpsubs-p2-product-search__price {
829 font-size: 13px;
830 font-weight: 600;
831 color: var(--wpsubs-text);
832 white-space: nowrap;
833 flex-shrink: 0;
834 }
835 .wpsubs-p2-product-search__empty {
836 padding: 12px 10px;
837 font-size: 13px;
838 color: var(--wpsubs-text-muted);
839 text-align: center;
840 }
841 .wpsubs-p2-product-search__item--locked {
842 opacity: 0.55;
843 cursor: not-allowed;
844 }
845 /* A product already attached to a plan — not selectable. */
846 .wpsubs-p2-product-search__item--disabled {
847 cursor: not-allowed;
848 }
849 .wpsubs-p2-product-search__item--disabled:hover {
850 background: transparent;
851 }
852 .wpsubs-p2-product-search__item--disabled .wpsubs-p2-product-search__avatar,
853 .wpsubs-p2-product-search__item--disabled .wpsubs-p2-product-search__info {
854 opacity: 0.5;
855 }
856 /* Inline "Added to another plan" note next to the product name (matches the
857 Plans admin product tab). */
858 .wpsubs-p2-product-search__connected {
859 margin-left: 8px;
860 font-size: 12px;
861 font-weight: 400;
862 font-style: italic;
863 color: var(--wpsubs-text-muted, #6b7280);
864 }
865 /* Billing every group — number input + standalone adv-select, matching the
866 plan duration editor (two separate controls with an 8px gap). */
867 .wpsubs-p2-billing-group {
868 display: flex;
869 gap: 8px;
870 align-items: center;
871 width: 100%;
872 }
873 .wpsubs-p2-billing-group .wpsubs-p2-billing-per-input {
874 flex: 1 1 auto;
875 min-width: 0;
876 }
877 /* Locked (no Pro): frequency is fixed at 1 and not editable. */
878 .wpsubs-p2-billing-per-input[readonly] {
879 background: var(--wpsubs-surface-muted, #f3f4f6) !important;
880 color: var(--wpsubs-text-muted, #6b7280);
881 cursor: not-allowed;
882 }
883 #subscrpt-billing-period-select {
884 width: 100%;
885 }
886 /* Pro badge + locked fields */
887 .wpsubs-p2-pro-badge {
888 display: inline-flex;
889 align-items: center;
890 background: var(--wpsubs-brand);
891 color: var(--wpsubs-surface);
892 font-size: 10px;
893 font-weight: 700;
894 padding: 2px 6px;
895 border-radius: 3px;
896 text-transform: uppercase;
897 letter-spacing: 0.04em;
898 margin-left: 6px;
899 vertical-align: middle;
900 }
901 .wpsubs-p2-field-pro-locked {
902 opacity: 0.6;
903 }
904 /* Variation picker */
905 .wpsubs-p2-variation-picker {
906 margin-top: 12px;
907 }
908 .wpsubs-p2-variation-picker__label {
909 font-size: 11px;
910 font-weight: 700;
911 letter-spacing: 0.06em;
912 text-transform: uppercase;
913 color: var(--wpsubs-text-muted);
914 margin: 0 0 8px;
915 }
916 .wpsubs-p2-variation-picker__loading {
917 font-size: 13px;
918 color: var(--wpsubs-text-muted);
919 padding: 10px 0;
920 }
921 .wpsubs-p2-variation-picker__list {
922 border: 1px solid var(--wpsubs-border);
923 border-radius: var(--wpsubs-radius);
924 overflow: hidden;
925 }
926 .wpsubs-p2-variation-item {
927 display: flex;
928 align-items: center;
929 gap: 12px;
930 padding: 10px 12px;
931 cursor: pointer;
932 transition: background 0.1s;
933 border-bottom: 1px solid var(--wpsubs-border);
934 }
935 .wpsubs-p2-variation-item:last-child {
936 border-bottom: none;
937 }
938 .wpsubs-p2-variation-item:hover {
939 background: var(--wpsubs-surface-muted);
940 }
941 .wpsubs-p2-variation-item.selected {
942 background: var(--wpsubs-brand-light);
943 }
944 .wpsubs-p2-variation-item__check {
945 width: 18px;
946 height: 18px;
947 border-radius: 50%;
948 border: 1.5px solid var(--wpsubs-border);
949 flex-shrink: 0;
950 display: flex;
951 align-items: center;
952 justify-content: center;
953 font-size: 10px;
954 font-weight: 700;
955 color: transparent;
956 transition: all 0.15s;
957 }
958 .wpsubs-p2-variation-item.selected .wpsubs-p2-variation-item__check {
959 background: var(--wpsubs-brand);
960 border-color: var(--wpsubs-brand);
961 color: var(--wpsubs-surface);
962 }
963 .wpsubs-p2-variation-item__info {
964 flex: 1;
965 min-width: 0;
966 }
967 .wpsubs-p2-variation-item__name {
968 font-size: 13px;
969 font-weight: 500;
970 color: var(--wpsubs-text);
971 margin: 0;
972 white-space: nowrap;
973 overflow: hidden;
974 text-overflow: ellipsis;
975 }
976 .wpsubs-p2-variation-item__meta {
977 font-size: 12px;
978 color: var(--wpsubs-text-muted);
979 margin: 0;
980 }
981 .wpsubs-p2-variation-item__price {
982 font-size: 13px;
983 font-weight: 600;
984 color: var(--wpsubs-text);
985 white-space: nowrap;
986 flex-shrink: 0;
987 }
988 /* Page 3 */
989 .wpsubs-p3-card {
990 text-align: center;
991 padding: 40px 40px 32px;
992 }
993
994 /* Final step: working / error states -------------------------------------- */
995 .wpsubs-finalize-progress,
996 .wpsubs-finalize-error {
997 text-align: center;
998 }
999 .wpsubs-finalize-spinner {
1000 width: 44px;
1001 height: 44px;
1002 margin: 0 auto 20px;
1003 border-radius: 50%;
1004 border: 3px solid var(--wpsubs-brand-light, #fff1eb);
1005 border-top-color: var(--wpsubs-brand, #ff4d00);
1006 animation: wpsubs-finalize-spin 0.7s linear infinite;
1007 }
1008 @keyframes wpsubs-finalize-spin {
1009 to {
1010 transform: rotate(360deg);
1011 }
1012 }
1013 .wpsubs-finalize-steps {
1014 list-style: none;
1015 margin: 4px auto 0;
1016 padding: 0;
1017 max-width: 260px;
1018 text-align: left;
1019 }
1020 .wpsubs-finalize-steps li {
1021 display: flex;
1022 align-items: center;
1023 gap: 10px;
1024 padding: 7px 0;
1025 font-size: 13px;
1026 font-weight: 500;
1027 color: var(--wpsubs-text-muted, #6b7280);
1028 }
1029 .wpsubs-finalize-steps__dot {
1030 flex-shrink: 0;
1031 width: 16px;
1032 height: 16px;
1033 border-radius: 50%;
1034 border: 2px solid var(--wpsubs-border-strong, #cbd5e1);
1035 background: var(--wpsubs-surface, #fff);
1036 transition:
1037 border-color 0.2s,
1038 background 0.2s;
1039 }
1040 .wpsubs-finalize-steps li.is-doing {
1041 color: var(--wpsubs-text, #374151);
1042 }
1043 .wpsubs-finalize-steps li.is-doing .wpsubs-finalize-steps__dot {
1044 border-color: var(--wpsubs-brand, #ff4d00);
1045 border-top-color: transparent;
1046 animation: wpsubs-finalize-spin 0.7s linear infinite;
1047 }
1048 .wpsubs-finalize-steps li.is-done {
1049 color: var(--wpsubs-text, #374151);
1050 }
1051 .wpsubs-finalize-steps li.is-done .wpsubs-finalize-steps__dot {
1052 border-color: var(--wpsubs-brand, #ff4d00);
1053 background: var(--wpsubs-brand, #ff4d00)
1054 url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M3 8.5L6.5 12L13 5' stroke='%23fff' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round' fill='none'/%3E%3C/svg%3E")
1055 center / 11px no-repeat;
1056 }
1057 .wpsubs-finalize-error__icon {
1058 width: 52px;
1059 height: 52px;
1060 border-radius: 50%;
1061 display: flex;
1062 align-items: center;
1063 justify-content: center;
1064 margin: 0 auto 20px;
1065 background: #fee2e2;
1066 color: #dc2626;
1067 }
1068 .wpsubs-finalize-error .wpsubs-btn {
1069 margin-top: 4px;
1070 }
1071
1072 .wpsubs-p3-success-icon {
1073 width: 52px;
1074 height: 52px;
1075 border-radius: 50%;
1076 background: var(--wpsubs-brand);
1077 display: flex;
1078 align-items: center;
1079 justify-content: center;
1080 margin: 0 auto 20px;
1081 }
1082 .wpsubs-p3-heading {
1083 font-size: 24px;
1084 font-weight: 700;
1085 color: var(--wpsubs-text);
1086 margin-bottom: 10px;
1087 }
1088 .wpsubs-p3-subtext {
1089 font-size: 13.5px;
1090 color: var(--wpsubs-text-muted);
1091 line-height: 1.6;
1092 max-width: 440px;
1093 margin: 0 auto 28px;
1094 }
1095 /* Product card */
1096 .wpsubs-p3-product-card {
1097 border: 1px solid var(--wpsubs-border);
1098 border-radius: var(--wpsubs-radius);
1099 overflow: hidden;
1100 margin-bottom: 24px;
1101 text-align: left;
1102 }
1103 .wpsubs-p3-product-card__header {
1104 display: grid;
1105 grid-template-columns: 1fr 160px 110px;
1106 padding: 8px 16px;
1107 border-bottom: 1px solid var(--wpsubs-border);
1108 }
1109 .wpsubs-p3-product-card__header span {
1110 font-size: 10px;
1111 font-weight: 600;
1112 letter-spacing: 0.06em;
1113 color: var(--wpsubs-text-muted);
1114 text-transform: uppercase;
1115 }
1116 .wpsubs-p3-product-card__row {
1117 display: grid;
1118 grid-template-columns: 1fr 160px 110px;
1119 align-items: center;
1120 padding: 14px 16px;
1121 }
1122 .wpsubs-p3-product-card__product {
1123 display: flex;
1124 align-items: center;
1125 gap: 12px;
1126 }
1127 .wpsubs-p3-product-avatar {
1128 width: 36px;
1129 height: 36px;
1130 border-radius: 6px;
1131 background: #fde8d8;
1132 color: #c2440f;
1133 font-size: 12px;
1134 font-weight: 700;
1135 display: flex;
1136 align-items: center;
1137 justify-content: center;
1138 flex-shrink: 0;
1139 }
1140 .wpsubs-p3-product-name {
1141 font-size: 13px;
1142 font-weight: 600;
1143 color: var(--wpsubs-text);
1144 margin: 0 0 2px;
1145 }
1146 .wpsubs-p3-product-meta {
1147 font-size: 11.5px;
1148 color: var(--wpsubs-text-muted);
1149 margin: 0;
1150 }
1151 .wpsubs-p3-product-card__status {
1152 display: flex;
1153 flex-direction: column;
1154 gap: 4px;
1155 }
1156 .wpsubs-p3-status-badge {
1157 display: inline-flex;
1158 align-items: center;
1159 gap: 5px;
1160 background: #ecfdf5;
1161 color: #065f46;
1162 font-size: 12px;
1163 font-weight: 500;
1164 padding: 3px 8px 3px 6px;
1165 border-radius: 12px;
1166 width: fit-content;
1167 }
1168 .wpsubs-p3-status-badge__dot {
1169 width: 6px;
1170 height: 6px;
1171 border-radius: 50%;
1172 background: #10b981;
1173 flex-shrink: 0;
1174 }
1175 .wpsubs-p3-status-sub {
1176 font-size: 11.5px;
1177 color: var(--wpsubs-text-muted);
1178 margin: 0;
1179 }
1180 .wpsubs-p3-product-card__price {
1181 text-align: right;
1182 }
1183 .wpsubs-p3-price-amount {
1184 display: block;
1185 font-size: 15px;
1186 font-weight: 700;
1187 color: var(--wpsubs-text);
1188 }
1189 .wpsubs-p3-price-period {
1190 font-size: 11.5px;
1191 color: var(--wpsubs-text-muted);
1192 }
1193 /* What now section */
1194 .wpsubs-p3-what-now-label {
1195 font-size: 10.5px;
1196 font-weight: 700;
1197 letter-spacing: 0.08em;
1198 color: var(--wpsubs-text-muted);
1199 text-transform: uppercase;
1200 text-align: left;
1201 margin-bottom: 8px;
1202 }
1203 .wpsubs-p3-action-rows {
1204 display: flex;
1205 flex-direction: column;
1206 gap: 0;
1207 border: 1px solid var(--wpsubs-border);
1208 border-radius: var(--wpsubs-radius);
1209 overflow: hidden;
1210 margin-bottom: 20px;
1211 }
1212 .wpsubs-p3-action-row {
1213 display: flex;
1214 align-items: center;
1215 gap: 14px;
1216 padding: 14px 16px;
1217 background: var(--wpsubs-surface);
1218 text-decoration: none;
1219 text-align: left;
1220 border: none;
1221 cursor: pointer;
1222 width: 100%;
1223 box-sizing: border-box;
1224 transition: background 0.12s;
1225 font-family: inherit;
1226 }
1227 .wpsubs-p3-action-row + .wpsubs-p3-action-row {
1228 border-top: 1px solid var(--wpsubs-border);
1229 }
1230 .wpsubs-p3-action-row:hover {
1231 background: var(--wpsubs-surface-muted);
1232 }
1233 .wpsubs-p3-action-row__icon {
1234 width: 34px;
1235 height: 34px;
1236 border: 1px solid var(--wpsubs-border);
1237 border-radius: var(--wpsubs-radius-sm);
1238 background: var(--wpsubs-surface-muted);
1239 display: flex;
1240 align-items: center;
1241 justify-content: center;
1242 flex-shrink: 0;
1243 color: var(--wpsubs-text-muted);
1244 }
1245 .wpsubs-p3-action-row__content {
1246 flex: 1;
1247 min-width: 0;
1248 }
1249 .wpsubs-p3-action-row__title {
1250 font-size: 13px;
1251 font-weight: 600;
1252 color: var(--wpsubs-text);
1253 margin: 0 0 2px;
1254 }
1255 .wpsubs-p3-action-row__desc {
1256 font-size: 12px;
1257 color: var(--wpsubs-text-muted);
1258 margin: 0;
1259 }
1260 .wpsubs-p3-action-row__chevron {
1261 color: var(--wpsubs-text-subtle);
1262 flex-shrink: 0;
1263 }
1264 /* Help footer */
1265 .wpsubs-p3-help-text {
1266 font-size: 12.5px;
1267 color: var(--wpsubs-text-muted);
1268 text-align: center;
1269 }
1270 .wpsubs-p3-help-link {
1271 color: var(--wpsubs-brand);
1272 text-decoration: none;
1273 }
1274 .wpsubs-p3-help-link:hover {
1275 text-decoration: underline;
1276 }
1277 /* Page 3 nav */
1278 .wpsubs-p3-nav {
1279 display: flex;
1280 align-items: center;
1281 justify-content: flex-end;
1282 gap: 10px;
1283 margin-top: 16px;
1284 }
1285 .wpsubs-p3-nav .wpsubs-btn {
1286 min-width: 140px;
1287 height: 36px;
1288 box-sizing: border-box;
1289 }
1290 /* Page 1 specific — two-column hero layout */
1291 .wpsubs-p1-left {
1292 display: flex;
1293 flex-direction: column;
1294 gap: 0;
1295 }
1296 .wpsubs-p1-badge {
1297 display: inline-flex;
1298 align-items: center;
1299 gap: 6px;
1300 background: var(--wpsubs-brand-light);
1301 color: var(--wpsubs-brand);
1302 font-size: 12px;
1303 font-weight: 600;
1304 padding: 4px 10px;
1305 border-radius: 20px;
1306 border: 1px solid var(--wpsubs-border);
1307 margin-bottom: 20px;
1308 width: fit-content;
1309 }
1310 .wpsubs-p1-badge__dot {
1311 width: 7px;
1312 height: 7px;
1313 border-radius: 50%;
1314 background: var(--wpsubs-brand);
1315 flex-shrink: 0;
1316 }
1317 .wpsubs-p1-heading {
1318 font-size: 26px;
1319 font-weight: 800;
1320 color: var(--wpsubs-text);
1321 line-height: 1.25;
1322 margin: 0 0 20px;
1323 }
1324 .wpsubs-p1-heading__accent {
1325 color: var(--wpsubs-brand);
1326 }
1327 .wpsubs-p1-desc {
1328 font-size: 13.5px;
1329 color: var(--wpsubs-text-muted);
1330 line-height: 1.6;
1331 margin: 0 0 24px;
1332 }
1333 .wpsubs-p1-bullets {
1334 list-style: none;
1335 padding: 0;
1336 margin: 0 0 36px;
1337 display: flex;
1338 flex-direction: column;
1339 gap: 12px;
1340 }
1341 .wpsubs-p1-bullets li {
1342 display: flex;
1343 align-items: center;
1344 gap: 8px;
1345 font-size: 13px;
1346 color: var(--wpsubs-text);
1347 }
1348 .wpsubs-p1-bullet-dot {
1349 width: 7px;
1350 height: 7px;
1351 border-radius: 50%;
1352 background: var(--wpsubs-brand);
1353 flex-shrink: 0;
1354 }
1355 .wpsubs-p1-actions {
1356 display: flex;
1357 align-items: center;
1358 gap: 16px;
1359 flex-wrap: wrap;
1360 }
1361 .wpsubs-p1-skip {
1362 font-size: 13px;
1363 color: var(--wpsubs-text-muted);
1364 background: none;
1365 border: none;
1366 cursor: pointer;
1367 padding: 0;
1368 text-decoration: none;
1369 }
1370 .wpsubs-p1-skip:hover {
1371 color: var(--wpsubs-text);
1372 }
1373 /* Right — product preview mockup */
1374 .wpsubs-p1-right {
1375 background: var(--wpsubs-surface-muted);
1376 border-radius: var(--wpsubs-radius);
1377 padding: 20px 20px 14px;
1378 border: 1px solid var(--wpsubs-border);
1379 transform: rotate(-3deg);
1380 transform-origin: center center;
1381 }
1382 .wpsubs-p1-preview-label {
1383 font-size: 13px;
1384 font-weight: 600;
1385 color: var(--wpsubs-text);
1386 margin: 0 0 2px;
1387 }
1388 .wpsubs-p1-preview-sublabel {
1389 font-size: 12px;
1390 color: var(--wpsubs-text-muted);
1391 margin: 0 0 16px;
1392 }
1393 .wpsubs-p1-preview-card {
1394 background: var(--wpsubs-surface);
1395 border-radius: var(--wpsubs-radius);
1396 border: 1px solid var(--wpsubs-border);
1397 overflow: hidden;
1398 box-shadow: var(--wpsubs-shadow-md);
1399 }
1400 .wpsubs-p1-preview-img {
1401 width: 100%;
1402 height: 100px;
1403 background: linear-gradient(135deg, var(--wpsubs-brand-light) 0%, var(--wpsubs-surface-muted) 100%);
1404 display: flex;
1405 align-items: center;
1406 justify-content: center;
1407 flex-direction: column;
1408 gap: 6px;
1409 border-bottom: 1px solid var(--wpsubs-border);
1410 }
1411 .wpsubs-p1-preview-img svg {
1412 width: 36px;
1413 height: 36px;
1414 color: var(--wpsubs-brand);
1415 opacity: 0.8;
1416 }
1417 .wpsubs-p1-preview-img__dots {
1418 display: flex;
1419 gap: 4px;
1420 }
1421 .wpsubs-p1-preview-img__dots span {
1422 width: 5px;
1423 height: 5px;
1424 border-radius: 50%;
1425 background: var(--wpsubs-brand);
1426 opacity: 0.3;
1427 }
1428 .wpsubs-p1-preview-body {
1429 padding: 14px;
1430 }
1431 .wpsubs-p1-preview-name {
1432 font-size: 13px;
1433 font-weight: 700;
1434 text-align: center;
1435 color: var(--wpsubs-text);
1436 margin: 0 0 4px;
1437 }
1438 .wpsubs-p1-preview-price {
1439 font-size: 13px;
1440 text-align: center;
1441 color: var(--wpsubs-text);
1442 margin: 0 0 12px;
1443 }
1444 .wpsubs-p1-preview-price span {
1445 color: var(--wpsubs-text-muted);
1446 font-size: 12px;
1447 }
1448 .wpsubs-p1-preview-btn {
1449 display: block;
1450 width: 100%;
1451 box-sizing: border-box;
1452 background: var(--wpsubs-brand);
1453 color: var(--wpsubs-surface);
1454 text-align: center;
1455 padding: 9px 12px;
1456 border-radius: var(--wpsubs-radius-sm);
1457 font-size: 13px;
1458 font-weight: 600;
1459 border: none;
1460 cursor: default;
1461 white-space: nowrap;
1462 overflow: hidden;
1463 text-overflow: ellipsis;
1464 }
1465 .wpsubs-p1-preview-skeletons {
1466 margin-top: 10px;
1467 display: flex;
1468 flex-direction: column;
1469 gap: 6px;
1470 }
1471 .wpsubs-p1-preview-skeleton {
1472 height: 10px;
1473 border-radius: 4px;
1474 background: var(--wpsubs-border);
1475 }
1476 .wpsubs-p1-preview-skeleton:last-child {
1477 width: 65%;
1478 }
1479 .wpsubs-p1-starts-here {
1480 text-align: right;
1481 font-size: 11px;
1482 color: var(--wpsubs-brand);
1483 margin-top: 12px;
1484 font-style: italic;
1485 display: flex;
1486 align-items: center;
1487 justify-content: flex-end;
1488 gap: 4px;
1489 }
1490 @media (max-width: 782px) {
1491 /* Stack the two-column body (form + preview/summary) on narrow screens. */
1492 .wpsubs-p2-body {
1493 grid-template-columns: 1fr;
1494 gap: 20px;
1495 }
1496 .wpsubs-p2-preview-col {
1497 position: static;
1498 }
1499 }
1500
1501 /* Page 1 animated plan-structure preview (right column):
1502 one Plan -> three Durations -> two Products, joined by flowing lines. */
1503 .wpsubs-p1-graph {
1504 position: relative;
1505 /* Fluid: fill the preview column instead of a fixed pixel box, so the nodes
1506 scale with the rail rather than needing a wider container. */
1507 width: 100%;
1508 aspect-ratio: 300 / 420;
1509 margin: 10px auto 0;
1510 }
1511 .wpsubs-p1-graph__lines {
1512 position: absolute;
1513 inset: 0;
1514 width: 100%;
1515 height: 100%;
1516 overflow: visible;
1517 }
1518 .wpsubs-p1-flow {
1519 fill: none;
1520 /* Muted by default; a line only turns brand-orange once the duration it
1521 belongs to is filled (.is-active, toggled from JS). */
1522 stroke: var(--wpsubs-border, #e5e7eb);
1523 stroke-width: 1.5;
1524 stroke-linecap: round;
1525 stroke-dasharray: 3 6;
1526 opacity: 0.35;
1527 }
1528 .wpsubs-p1-flow.is-active {
1529 stroke: var(--wpsubs-brand, #ff4d00);
1530 opacity: 0.55;
1531 animation: wpsubs-p1-flow 0.9s linear infinite;
1532 }
1533 @keyframes wpsubs-p1-flow {
1534 to {
1535 stroke-dashoffset: -9;
1536 }
1537 }
1538
1539 .wpsubs-p1-node {
1540 position: absolute;
1541 z-index: 1;
1542 display: flex;
1543 align-items: center;
1544 gap: 8px;
1545 box-sizing: border-box;
1546 padding: 10px 12px;
1547 background: var(--wpsubs-surface, #fff);
1548 border: 1px solid var(--wpsubs-border, #e5e7eb);
1549 border-radius: 9px;
1550 box-shadow: 0 1px 3px rgba(15, 23, 42, 0.08);
1551 font-size: 12px;
1552 font-weight: 600;
1553 color: var(--wpsubs-text, #374151);
1554 line-height: 1.2;
1555 white-space: nowrap;
1556 overflow: hidden;
1557 transform-origin: center;
1558 transition:
1559 transform 0.2s ease,
1560 box-shadow 0.2s ease,
1561 border-color 0.12s ease;
1562 }
1563 .wpsubs-p1-node__icon {
1564 display: inline-flex;
1565 align-items: center;
1566 justify-content: center;
1567 flex-shrink: 0;
1568 width: 24px;
1569 height: 24px;
1570 border-radius: 6px;
1571 background: var(--wpsubs-surface-muted, #f3f4f6);
1572 color: var(--wpsubs-text-muted, #6b7280);
1573 }
1574 .wpsubs-p1-node__icon svg {
1575 width: 14px;
1576 height: 14px;
1577 }
1578 .wpsubs-p1-node__label {
1579 overflow: hidden;
1580 text-overflow: ellipsis;
1581 }
1582 /* Two-line node body: title over a muted subtitle. */
1583 .wpsubs-p1-node__text {
1584 display: flex;
1585 flex-direction: column;
1586 gap: 1px;
1587 min-width: 0;
1588 }
1589 .wpsubs-p1-node__title {
1590 font-size: 12px;
1591 font-weight: 600;
1592 line-height: 1.25;
1593 overflow: hidden;
1594 text-overflow: ellipsis;
1595 white-space: nowrap;
1596 }
1597 .wpsubs-p1-node__sub {
1598 font-size: 10px;
1599 font-weight: 500;
1600 line-height: 1.3;
1601 color: var(--wpsubs-text-muted, #6b7280);
1602 overflow: hidden;
1603 text-overflow: ellipsis;
1604 white-space: nowrap;
1605 }
1606 .wpsubs-p1-node--plan .wpsubs-p1-node__sub {
1607 color: var(--wpsubs-brand, #ff4d00);
1608 opacity: 0.85;
1609 }
1610
1611 /* Plan node — brand accent, top of the fan-out. Widths are a % of the graph so
1612 they scale with the column. */
1613 .wpsubs-p1-node--plan {
1614 width: 58%;
1615 border-color: var(--wpsubs-brand, #ff4d00);
1616 background: var(--wpsubs-brand-light, #fff1eb);
1617 color: var(--wpsubs-brand-dark, #d93f00);
1618 }
1619 .wpsubs-p1-node--plan .wpsubs-p1-node__icon {
1620 background: var(--wpsubs-brand, #ff4d00);
1621 color: #fff;
1622 }
1623 /* Durations (x3) — narrower, so tighten padding/icon to keep text room. */
1624 .wpsubs-p1-node--dur {
1625 width: 30%;
1626 padding: 8px 9px;
1627 gap: 6px;
1628 }
1629 .wpsubs-p1-node--dur .wpsubs-p1-node__icon {
1630 width: 20px;
1631 height: 20px;
1632 }
1633 /* Products (x2). */
1634 .wpsubs-p1-node--prod {
1635 width: 44%;
1636 }
1637
1638 /* Ghost nodes — the "you can add more later" placeholders. */
1639 .wpsubs-p1-node--ghost {
1640 opacity: 0.45;
1641 border-style: dashed;
1642 box-shadow: none;
1643 }
1644 /* The product card stays muted on the plan/duration steps and only comes to
1645 life on the connect step (and after). */
1646 .wpsubs-p1-graph:not([data-active="prod"]):not([data-active="done"]) .wpsubs-p1-node--prod:not(.wpsubs-p1-node--ghost) {
1647 opacity: 0.45;
1648 border-style: dashed;
1649 box-shadow: none;
1650 }
1651
1652 /* The group belonging to the current step gets a brand ring. Ghosts never
1653 light up — only the node the step actually fills in. */
1654 .wpsubs-p1-graph[data-active="plan"] .wpsubs-p1-node--plan,
1655 .wpsubs-p1-graph[data-active="dur"] .wpsubs-p1-node--dur:not(.wpsubs-p1-node--ghost),
1656 .wpsubs-p1-graph[data-active="prod"] .wpsubs-p1-node--prod:not(.wpsubs-p1-node--ghost) {
1657 border-color: var(--wpsubs-brand, #ff4d00);
1658 background: var(--wpsubs-brand-light, #fff1eb);
1659 box-shadow: 0 0 0 3px var(--wpsubs-brand-ring, rgba(255, 77, 0, 0.22));
1660 animation: wpsubs-p1-pulse 1.6s ease-in-out infinite;
1661 }
1662 /* Keep the subtitle readable on the tinted background. */
1663 .wpsubs-p1-graph[data-active="dur"] .wpsubs-p1-node--dur:not(.wpsubs-p1-node--ghost) .wpsubs-p1-node__sub,
1664 .wpsubs-p1-graph[data-active="prod"] .wpsubs-p1-node--prod:not(.wpsubs-p1-node--ghost) .wpsubs-p1-node__sub {
1665 color: var(--wpsubs-brand-dark, #d93f00);
1666 }
1667 /* Past the durations step, the set duration cards keep a static brand tint
1668 (no pulse) — the same way the plan card stays coloured after step 1. */
1669 .wpsubs-p1-graph[data-active="prod"] .wpsubs-p1-node--dur:not(.wpsubs-p1-node--ghost),
1670 .wpsubs-p1-graph[data-active="done"] .wpsubs-p1-node--dur:not(.wpsubs-p1-node--ghost),
1671 .wpsubs-p1-graph[data-active="done"] .wpsubs-p1-node--prod:not(.wpsubs-p1-node--ghost) {
1672 border-color: var(--wpsubs-brand, #ff4d00);
1673 background: var(--wpsubs-brand-light, #fff1eb);
1674 }
1675 .wpsubs-p1-graph[data-active="prod"] .wpsubs-p1-node--dur:not(.wpsubs-p1-node--ghost) .wpsubs-p1-node__sub,
1676 .wpsubs-p1-graph[data-active="done"] .wpsubs-p1-node--dur:not(.wpsubs-p1-node--ghost) .wpsubs-p1-node__sub,
1677 .wpsubs-p1-graph[data-active="done"] .wpsubs-p1-node--prod:not(.wpsubs-p1-node--ghost) .wpsubs-p1-node__sub {
1678 color: var(--wpsubs-brand-dark, #d93f00);
1679 }
1680 @keyframes wpsubs-p1-pulse {
1681 0%,
1682 100% {
1683 box-shadow: 0 0 0 3px var(--wpsubs-brand-ring, rgba(255, 77, 0, 0.22));
1684 }
1685 50% {
1686 box-shadow: 0 0 0 5px rgba(255, 77, 0, 0.1);
1687 }
1688 }
1689
1690 /* Zoom the card whose field is currently focused (wins over the pulse). */
1691 .wpsubs-p1-graph[data-focus="plan"] .wpsubs-p1-node--plan,
1692 .wpsubs-p1-graph[data-focus="prod"] .wpsubs-p1-node--prod:not(.wpsubs-p1-node--ghost),
1693 .wpsubs-p1-node.is-zoom:not(.wpsubs-p1-node--ghost) {
1694 transform: scale(1.14);
1695 z-index: 3;
1696 border-color: var(--wpsubs-brand, #ff4d00);
1697 box-shadow: 0 10px 22px rgba(255, 77, 0, 0.2);
1698 animation: none;
1699 }
1700
1701 @media (prefers-reduced-motion: reduce) {
1702 .wpsubs-p1-flow,
1703 .wpsubs-p1-graph .wpsubs-p1-node {
1704 animation: none;
1705 }
1706 }
1707
1708 /* Button loading state (plan create / connect requests in flight). */
1709 .wpsubs-btn.is-loading {
1710 opacity: 0.6;
1711 cursor: progress;
1712 pointer-events: none;
1713 }
1714
1715 /* Free-trial line in the step-2 plan preview. */
1716 .wpsubs-p1-preview-trial {
1717 margin: 6px 0 0;
1718 font-size: 12px;
1719 font-weight: 600;
1720 color: #15803d;
1721 }
1722
1723 /* Pro-locked plan-type cards on the create-plan step. */
1724 .wpsubs-p2-option-card:disabled {
1725 opacity: 0.55;
1726 cursor: not-allowed;
1727 }
1728
1729 /* List layout for the plan-type cards (create-plan step): each row is
1730 icon + text, full width, with the check centered on the right. */
1731 .wpsubs-p2-option-cards--list {
1732 display: flex;
1733 flex-direction: column;
1734 gap: 8px;
1735 }
1736 .wpsubs-p2-option-cards--list .wpsubs-p2-option-card {
1737 flex-direction: row;
1738 align-items: center;
1739 gap: 12px;
1740 padding: 12px 44px 12px 16px;
1741 }
1742 .wpsubs-p2-option-cards--list .wpsubs-p2-option-card__icon {
1743 margin-bottom: 0;
1744 flex-shrink: 0;
1745 }
1746 .wpsubs-p2-option-card__text {
1747 min-width: 0;
1748 }
1749
1750 /* Compact option cards (connect step): horizontal icon + title, no description,
1751 so the two choices stay small. */
1752 .wpsubs-p2-option-cards--compact .wpsubs-p2-option-card {
1753 flex-direction: row;
1754 align-items: center;
1755 gap: 10px;
1756 padding: 10px 12px;
1757 }
1758 .wpsubs-p2-option-cards--compact .wpsubs-p2-option-card__icon {
1759 width: 28px;
1760 height: 28px;
1761 margin-bottom: 0;
1762 flex-shrink: 0;
1763 }
1764 .wpsubs-p2-option-cards--compact .wpsubs-p2-option-card__title {
1765 font-size: 12.5px;
1766 }
1767
1768 /* Durations accordion (step 2). */
1769 .wpsubs-dur {
1770 border: 1px solid var(--wpsubs-border, #e5e7eb);
1771 border-radius: var(--wpsubs-radius, 8px);
1772 background: var(--wpsubs-surface, #fff);
1773 margin-bottom: 10px;
1774 }
1775 .wpsubs-dur__head {
1776 display: flex;
1777 align-items: center;
1778 gap: 10px;
1779 padding: 12px 14px;
1780 cursor: pointer;
1781 user-select: none;
1782 }
1783 .wpsubs-dur.is-open .wpsubs-dur__head {
1784 border-bottom: 1px solid var(--wpsubs-border, #e5e7eb);
1785 }
1786 .wpsubs-dur__icon {
1787 display: inline-flex;
1788 align-items: center;
1789 justify-content: center;
1790 flex-shrink: 0;
1791 width: 28px;
1792 height: 28px;
1793 border-radius: 6px;
1794 background: var(--wpsubs-brand-light, #fff1eb);
1795 color: var(--wpsubs-brand, #ff4d00);
1796 }
1797 .wpsubs-dur__icon svg {
1798 width: 15px;
1799 height: 15px;
1800 }
1801 .wpsubs-dur__title {
1802 flex: 1 1 auto;
1803 min-width: 0;
1804 font-size: 13.5px;
1805 font-weight: 600;
1806 color: var(--wpsubs-text, #374151);
1807 overflow: hidden;
1808 text-overflow: ellipsis;
1809 white-space: nowrap;
1810 }
1811 .wpsubs-dur__remove {
1812 display: none;
1813 align-items: center;
1814 justify-content: center;
1815 flex-shrink: 0;
1816 width: 24px;
1817 height: 24px;
1818 border: none;
1819 background: none;
1820 border-radius: 5px;
1821 color: var(--wpsubs-text-subtle, #9ca3af);
1822 font-size: 20px;
1823 line-height: 1;
1824 cursor: pointer;
1825 transition:
1826 color 0.12s,
1827 background 0.12s;
1828 }
1829 .wpsubs-dur__remove:hover {
1830 color: #dc2626;
1831 background: #fef2f2;
1832 }
1833 #subscrpt-durations.has-multiple .wpsubs-dur__remove {
1834 display: inline-flex;
1835 }
1836 .wpsubs-dur__chevron {
1837 flex-shrink: 0;
1838 color: var(--wpsubs-text-subtle, #9ca3af);
1839 transition: transform 0.18s ease;
1840 }
1841 .wpsubs-dur.is-open .wpsubs-dur__chevron {
1842 transform: rotate(180deg);
1843 }
1844 .wpsubs-dur__body {
1845 padding: 14px;
1846 }
1847 .wpsubs-dur:not(.is-open) .wpsubs-dur__body {
1848 display: none;
1849 }
1850 /* Cadence picker keeps its content width; the number input flexes to fill the
1851 rest, so the picker never gets squeezed. */
1852 .wpsubs-dur__interval {
1853 flex: 0 0 auto;
1854 }
1855