ultimate-jekyll-manager 0.0.96 → 0.0.98

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.
Files changed (71) hide show
  1. package/.playwright-mcp/page-2025-10-22T19-11-27-666Z.png +0 -0
  2. package/.playwright-mcp/page-2025-10-22T19-11-57-357Z.png +0 -0
  3. package/CLAUDE.md +42 -0
  4. package/README.md +66 -0
  5. package/_backup/checkout copy 2.html +392 -0
  6. package/_backup/checkout copy 3.html +376 -0
  7. package/_backup/checkout copy 4.html +365 -0
  8. package/_backup/checkout copy.html +331 -0
  9. package/_backup/checkout-semi.html +331 -0
  10. package/_backup/cover-old.html +55 -0
  11. package/dist/assets/css/core/bindings.scss +7 -2
  12. package/dist/assets/css/core/utilities.scss +9 -1
  13. package/dist/assets/css/pages/payment/checkout/index.scss +52 -7
  14. package/dist/assets/js/core/complete.js +56 -0
  15. package/dist/assets/js/core/initialize.js +11 -0
  16. package/dist/assets/js/pages/app/index.js +82 -43
  17. package/dist/assets/js/pages/download/index.js +0 -6
  18. package/dist/assets/js/pages/payment/checkout/index.js +58 -52
  19. package/dist/assets/js/pages/payment/checkout/modules/discount-bindings.js +51 -0
  20. package/dist/assets/js/pages/payment/checkout/modules/pricing.js +55 -30
  21. package/dist/assets/js/pages/payment/checkout/modules/state.js +68 -14
  22. package/dist/assets/js/pages/payment/checkout/modules/ui-bindings.js +160 -0
  23. package/dist/assets/js/pages/payment/checkout/modules/ui.js +27 -42
  24. package/dist/assets/js/pages/payment/confirmation/index.js +58 -53
  25. package/dist/assets/js/pages/payment/confirmation/modules/bindings.js +28 -0
  26. package/dist/assets/js/pages/payment/confirmation/modules/state.js +19 -0
  27. package/dist/assets/js/ultimate-jekyll-manager.js +6 -2
  28. package/dist/assets/themes/classy/css/base/_spacing.scss +27 -0
  29. package/dist/defaults/dist/{redirects/authentication/helpers/well-known-change-password.html → .well-known/change-password.html} +4 -1
  30. package/dist/defaults/dist/.well-known/security.txt +15 -0
  31. package/dist/defaults/dist/_includes/core/body.html +31 -0
  32. package/dist/defaults/dist/_includes/core/foot.html +35 -0
  33. package/dist/defaults/dist/_layouts/blueprint/app.html +1 -1
  34. package/dist/defaults/dist/_layouts/blueprint/payment/checkout.html +6 -1
  35. package/dist/defaults/dist/_layouts/blueprint/payment/confirmation.html +6 -1
  36. package/dist/defaults/dist/_layouts/core/root.html +1 -0
  37. package/dist/defaults/dist/_layouts/modules/utilities/redirect.html +42 -31
  38. package/dist/defaults/dist/_layouts/themes/classy/backend/core/base.html +0 -35
  39. package/dist/defaults/dist/_layouts/themes/classy/frontend/core/base.html +0 -34
  40. package/dist/defaults/dist/_layouts/themes/classy/frontend/core/cover.html +6 -9
  41. package/dist/defaults/dist/_layouts/themes/classy/frontend/pages/404.html +35 -44
  42. package/dist/defaults/dist/_layouts/themes/classy/frontend/pages/account/index.html +1 -1
  43. package/dist/defaults/dist/_layouts/themes/classy/frontend/pages/app.html +83 -0
  44. package/dist/defaults/dist/_layouts/themes/classy/frontend/pages/auth/oauth2.html +42 -44
  45. package/dist/defaults/dist/_layouts/themes/classy/frontend/pages/auth/reset.html +57 -59
  46. package/dist/defaults/dist/_layouts/themes/classy/frontend/pages/auth/signin.html +67 -69
  47. package/dist/defaults/dist/_layouts/themes/classy/frontend/pages/auth/signup.html +76 -78
  48. package/dist/defaults/dist/_layouts/themes/classy/frontend/pages/download.html +1 -4
  49. package/dist/defaults/dist/_layouts/themes/classy/frontend/pages/payment/checkout.html +291 -240
  50. package/dist/defaults/dist/_layouts/themes/classy/frontend/pages/payment/confirmation.html +43 -47
  51. package/dist/defaults/dist/humans.txt +25 -0
  52. package/dist/defaults/dist/opensearch.xml +26 -0
  53. package/dist/defaults/dist/pages/test/account/dashboard.html +3 -0
  54. package/dist/defaults/dist/pages/test/index.md +2 -2
  55. package/dist/defaults/dist/pages/test/libraries/ads.html +3 -0
  56. package/dist/defaults/dist/pages/test/libraries/bootstrap-components.html +11 -2
  57. package/dist/defaults/dist/pages/test/libraries/cover.html +47 -0
  58. package/dist/defaults/dist/pages/test/libraries/error.html +3 -0
  59. package/dist/defaults/dist/pages/test/libraries/lazy-loading.html +3 -0
  60. package/dist/defaults/dist/pages/test/redirect/external.md +3 -0
  61. package/dist/defaults/dist/pages/test/redirect/internal.md +3 -0
  62. package/dist/defaults/dist/pages/test/translation/index.md +2 -2
  63. package/dist/defaults/dist/redirects/authentication/helpers/change-password.html +1 -1
  64. package/dist/defaults/dist/redirects/authentication/helpers/forgot.html +1 -1
  65. package/dist/defaults/dist/redirects/authentication/helpers/recover.html +1 -1
  66. package/dist/defaults/dist/redirects/authentication/helpers/reset-password.html +1 -1
  67. package/dist/defaults/dist/sitemap.html +112 -28
  68. package/dist/defaults/dist/sitemap.xml +6 -1
  69. package/firebase-debug.log +388 -0
  70. package/package.json +1 -1
  71. package/dist/assets/js/core/init.js +0 -36
@@ -16,24 +16,73 @@ web_manager:
16
16
  ### PAGE CONFIG ###
17
17
  ---
18
18
 
19
- <!-- Fullscreen Preloader -->
20
- <div id="checkout-preloader" class="position-fixed top-0 start-0 w-100 h-100 d-flex align-items-center justify-content-center bg-body" style="z-index: 9999;">
21
- <div class="text-center">
22
- <div class="spinner-border spinner-border-lg text-primary mb-3" role="status">
23
- <span class="visually-hidden">Loading...</span>
24
- </div>
25
- <h5 class="text-muted">Loading secure checkout...</h5>
26
- <p class="text-muted small mb-0">Please be patient while your order is prepared.</p>
27
- </div>
28
- </div>
29
-
30
- <!-- Error Message Container -->
31
- <div id="checkout-error-container" class="d-none">
19
+ <!-- Capture payment buttons content to reuse in both desktop and mobile layouts -->
20
+ {% capture payment_buttons_content %}
21
+ <!-- Credit/Debit Card Button -->
22
+ <button type="submit" class="btn btn-adaptive btn-lg py-3 d-flex align-items-center justify-content-center payment-button"
23
+ data-payment-method="card"
24
+ data-action="pay-card"
25
+ data-wm-bind="@show checkout.paymentMethods.card">
26
+ {% uj_icon "credit-card", "me-2 fa-3xl" %}
27
+ <span class="fw-semibold">Credit/Debit</span>
28
+ </button>
29
+
30
+ <!-- PayPal Button -->
31
+ <button type="submit" class="btn btn-paypal btn-lg py-3 d-flex align-items-center justify-content-center payment-button"
32
+ data-payment-method="paypal"
33
+ data-action="pay-paypal"
34
+ data-wm-bind="@show checkout.paymentMethods.paypal">
35
+ <img src="https://www.paypalobjects.com/webstatic/mktg/Logo/pp-logo-200px.png"
36
+ alt="PayPal"
37
+ height="28"
38
+ style="max-height: 28px;">
39
+ </button>
40
+
41
+ <!-- Apple Pay Button -->
42
+ <button type="submit" class="btn btn-dark btn-lg py-3 d-flex align-items-center justify-content-center payment-button"
43
+ data-payment-method="apple-pay"
44
+ data-action="pay-apple-pay"
45
+ data-wm-bind="@show checkout.paymentMethods.applePay"
46
+ hidden>
47
+ {% uj_icon "apple", "me-2 fa-3xl" %}
48
+ <span class="fw-semibold">Apple Pay</span>
49
+ </button>
50
+
51
+ <!-- Google Pay Button -->
52
+ <button type="submit" class="btn btn-outline-dark btn-lg py-3 d-flex align-items-center justify-content-center payment-button"
53
+ data-payment-method="google-pay"
54
+ data-action="pay-google-pay"
55
+ data-wm-bind="@show checkout.paymentMethods.googlePay"
56
+ hidden>
57
+ <img src="https://www.gstatic.com/instantbuy/svg/dark_gpay.svg"
58
+ alt="Google Pay"
59
+ height="24"
60
+ class="me-2">
61
+ <span class="fw-semibold">Google Pay</span>
62
+ </button>
63
+
64
+ <!-- Crypto Button -->
65
+ <button type="submit" class="btn btn-outline-adaptive btn-lg py-3 d-flex align-items-center justify-content-center payment-button"
66
+ data-payment-method="crypto"
67
+ data-action="pay-crypto"
68
+ data-wm-bind="@show checkout.paymentMethods.crypto"
69
+ hidden>
70
+ {% uj_icon "bitcoin", "me-2 fa-3xl" %}
71
+ <span class="fw-semibold">Crypto</span>
72
+ </button>
73
+
74
+ <p class="text-muted small text-center mb-0">
75
+ By purchasing, you agree to our <a href="/terms" target="_blank">Terms of Service</a> and <a href="/privacy" target="_blank">Privacy Policy</a>.
76
+ </p>
77
+ {% endcapture %}
78
+
79
+ <!-- Error Message Container (hidden by default, shown via bindings) -->
80
+ <div id="checkout-error-container" data-wm-bind="@show checkout.error.show" hidden>
32
81
  <div class="row justify-content-center">
33
82
  <div class="col-lg-8">
34
83
  <div class="alert alert-danger" role="alert">
35
84
  <h4 class="alert-heading">Oops! Something went wrong</h4>
36
- <p id="checkout-error-message"></p>
85
+ <p data-wm-bind="@text checkout.error.message"></p>
37
86
  <hr>
38
87
  <button class="btn btn-outline-danger" onclick="window.location.reload()">
39
88
  Try again
@@ -43,274 +92,276 @@ web_manager:
43
92
  </div>
44
93
  </div>
45
94
 
46
- <!-- Checkout Section -->
47
- <section id="checkout-content">
48
- <!-- Title Row -->
95
+ <!-- Checkout Section (visible by default, hidden only when error is shown) -->
96
+ <section id="checkout-content" class="col-12 col-xl-10 mw-xl" data-wm-bind="@hide checkout.error.show">
49
97
  <div class="row mb-4">
50
98
  <div class="col-12">
51
- <h1 class="h2 mb-0">Checkout</h1>
99
+ <h1 class="h2 mb-0 text-center text-lg-start">Checkout</h1>
52
100
  </div>
53
101
  </div>
54
-
55
- <!-- Main Checkout Form -->
56
- <form id="checkout-form" autocomplete="on" novalidate>
57
- <!-- Content Row -->
58
- <div class="row">
59
- <!-- Left Column - Payment Form -->
60
- <div class="col-lg-7 mb-4">
61
- <!-- Billing Cycle Selection -->
62
- <div class="card border-1 shadow-sm mb-4">
63
- <div class="card-body p-4">
64
- <h3 class="h5 fw-bold mb-3">Billing Cycle</h3>
65
- <div class="d-flex justify-content-between align-items-center mb-3">
66
- <h6 class="fw-bold mb-0">
67
- <span id="selected-plan-name">Loading...</span> Plan
68
- </h6>
69
- <a href="/pricing" class="small text-decoration-none">
70
- {% uj_icon "arrow-left", "me-1" %}
71
- Change plan
72
- </a>
73
- </div>
74
-
75
- <!-- Subscription Toggle (hidden by default) -->
76
- <div id="subscription-toggle" class="d-none">
77
- <div class="row g-3">
78
- <div class="col-6">
79
- <input type="radio" class="btn-check" name="billing-cycle" id="annually" value="annually">
80
- <label class="btn btn-outline-secondary text-body w-100 p-3 position-relative border-2 rounded-3 _animation-hover-up" for="annually">
81
- <span id="savings-badge" class="position-absolute top-0 start-50 translate-middle badge rounded-pill bg-primary px-3 py-2">Save --</span>
82
- <div class="d-flex align-items-center justify-content-center mb-2">
83
- <span class="bg-secondary bg-opacity-25 text-secondary rounded-circle d-inline-flex align-items-center justify-content-center">
84
- {% uj_icon "check", "fa-md p-1" %}
85
- </span>
86
- </div>
87
- <div class="fs-4 mb-1">
88
- <span id="annually-price-lg">$--</span>
89
- <span class="text-muted fs-6 fw-normal">/mo</span>
90
- </div>
91
- <div class="text-muted small">Annual Plan</div>
92
- </label>
102
+ <div class="card border-0 shadow-lg">
103
+ <div class="card-body p-3 p-md-5">
104
+ <!-- Title Row -->
105
+ <!-- <div class="row mb-4">
106
+ <div class="col-12">
107
+ <h1 class="h2 mb-0 text-center text-lg-start">Checkout</h1>
108
+ </div>
109
+ </div> -->
110
+
111
+ <!-- Main Checkout Form -->
112
+ <form id="checkout-form" autocomplete="on" novalidate>
113
+ <!-- Content Row -->
114
+ <div class="row d-lg-flex">
115
+ <!-- Section 1: Billing Cycle & Customer Info -->
116
+ <div class="col-12 col-lg-7 mb-4 mb-lg-0 order-1">
117
+ <!-- Billing Cycle Selection -->
118
+ <div class="_card _border-1 _border-secondary _shadow-sm mb-4">
119
+ <div class="card-body">
120
+ <h3 class="h5 fw-bold mb-3">Billing Cycle</h3>
121
+ <div class="d-flex justify-content-between align-items-center mb-3 _wm-binding-skeleton" _data-wm-bind="@show checkout" hidden>
122
+ <h6 class="fw-bold mb-0">
123
+ <span data-wm-bind="@text checkout.product.name">Loading...</span> Plan
124
+ </h6>
125
+ <a href="/pricing" class="small text-decoration-none">
126
+ {% uj_icon "arrow-left", "me-1" %}
127
+ Change plan
128
+ </a>
93
129
  </div>
94
- <div class="col-6">
95
- <input type="radio" class="btn-check" name="billing-cycle" id="monthly" value="monthly">
96
- <label class="btn btn-outline-secondary text-body w-100 p-3 border-2 rounded-3 _animation-hover-up" for="monthly">
97
- <div class="d-flex align-items-center justify-content-center mb-2">
98
- <span class="bg-secondary bg-opacity-25 text-secondary rounded-circle d-inline-flex align-items-center justify-content-center">
99
- {% uj_icon "check", "fa-md p-1" %}
100
- </span>
130
+
131
+ <!-- Subscription Toggle (shown for subscriptions only) -->
132
+ <div id="subscription-toggle">
133
+ <div class="row g-3">
134
+ <div class="col-6">
135
+ <div class="wm-binding-skeleton" data-wm-bind="@show checkout.product.isSubscription">
136
+ <input type="radio" class="btn-check" name="billing-cycle" id="annually" value="annually">
137
+ <label class="btn btn-outline-adaptive text-body w-100 p-3 position-relative border-2 rounded-3 _animation-hover-up wm-binding-skeleton" data-wm-bind="@show checkout.product.isSubscription" for="annually">
138
+ <span class="position-absolute top-0 start-50 translate-middle badge rounded-pill bg-primary px-3 py-2"
139
+ data-wm-bind="@text checkout.pricing.savingsBadge, @show checkout.pricing.showSavingsBadge"
140
+ hidden
141
+ >Save --</span>
142
+ <div class="d-flex align-items-center justify-content-center mb-2">
143
+ <span class="bg-secondary bg-opacity-25 text-secondary rounded-circle d-inline-flex align-items-center justify-content-center">
144
+ {% uj_icon "check", "fa-md p-1" %}
145
+ </span>
146
+ </div>
147
+ <div class="fs-4 mb-1 wm-binding-skeleton" data-wm-bind="@show checkout">
148
+ <span data-wm-bind="@text checkout.pricing.annualMonthlyRate">$--</span>
149
+ <span class="opacity-60 fs-6 fw-normal">/mo</span>
150
+ </div>
151
+ <div class="opacity-80 small">Annual Plan</div>
152
+ </label>
153
+ </div>
101
154
  </div>
102
- <div class="fs-4 mb-1">
103
- <span id="monthly-price-lg">$--</span>
104
- <span class="text-muted fs-6 fw-normal">/mo</span>
155
+ <div class="col-6">
156
+ <div class="wm-binding-skeleton" data-wm-bind="@show checkout.product.isSubscription">
157
+ <input type="radio" class="btn-check" name="billing-cycle" id="monthly" value="monthly">
158
+ <label class="btn btn-outline-adaptive text-body w-100 p-3 border-2 rounded-3 _animation-hover-up wm-binding-skeleton" data-wm-bind="@show checkout.product.isSubscription" for="monthly">
159
+ <div class="d-flex align-items-center justify-content-center mb-2">
160
+ <span class="bg-secondary bg-opacity-25 text-secondary rounded-circle d-inline-flex align-items-center justify-content-center">
161
+ {% uj_icon "check", "fa-md p-1" %}
162
+ </span>
163
+ </div>
164
+ <div class="fs-4 mb-1 wm-binding-skeleton" data-wm-bind="@show checkout">
165
+ <span data-wm-bind="@text checkout.pricing.monthlyPrice">$--</span>
166
+ <span class="opacity-60 fs-6 fw-normal">/mo</span>
167
+ </div>
168
+ <div class="opacity-80 small">Monthly Plan</div>
169
+ </label>
170
+ </div>
105
171
  </div>
106
- <div class="text-muted small">Monthly Plan</div>
107
- </label>
108
- </div>
109
- </div>
172
+ </div>
110
173
 
111
- <!-- Payment text under the boxes -->
112
- <div class="text-muted small text-center mt-2">
113
- * Pay <span class="mb-0" id="billing-cycle-payment-text">$-- monthly</span>
114
- </div>
174
+ <!-- Payment text under the boxes -->
175
+ <div class="text-muted small text-center mt-2 wm-binding-skeleton" data-wm-bind="@show checkout">
176
+ * Pay <span class="mb-0">$-- monthly</span>
177
+ </div>
115
178
 
116
- <!-- Free Trial Badge -->
117
- <div id="trial-badge" class="alert alert-success mt-3 mb-0 p-2 d-none">
118
- <small class="d-flex align-items-center mb-0">
119
- {% uj_icon "gift", "me-2" %}
120
- <span id="trial-message"></span>
121
- </small>
179
+ <!-- Free Trial Badge -->
180
+ <div class="alert alert-success mt-3 mb-0 p-2"
181
+ data-wm-bind="@show checkout.trial.show"
182
+ hidden>
183
+ <small class="d-flex align-items-center mb-0">
184
+ {% uj_icon "gift", "me-2" %}
185
+ <span data-wm-bind="@text checkout.trial.message"></span>
186
+ </small>
187
+ </div>
188
+ </div>
122
189
  </div>
123
190
  </div>
124
- </div>
125
- </div>
126
191
 
127
- <!-- Customer Information Card -->
128
- <div class="card border-1 shadow-sm mb-4">
129
- <div class="card-body p-4">
130
- <h3 class="h5 fw-bold mb-3">Customer Information</h3>
192
+ <hr>
131
193
 
132
- <div class="text-center">
133
- Managing order for <strong data-wm-bind="@text auth.user.email"></strong>, <a href="#" id="switch-account">switch account</a>.
134
- </div>
194
+ <!-- Customer Information Card -->
195
+ <div class="_card _border-1 _border-secondary _shadow-sm mb-3">
196
+ <div class="card-body">
197
+ <h3 class="h5 fw-bold mb-3">Customer Information</h3>
135
198
 
136
- <!-- Customer form fields will go here when needed -->
137
- <div id="customer-fields" class="text-start">
138
- <!-- Future form fields like shipping address, VAT number, etc. -->
139
- <!-- <div class="mb-3">
140
- <label for="customer-name" class="form-label fw-semibold">
141
- Name <span class="text-danger">*</span>
142
- </label>
143
- <input type="text" class="form-control form-control-md" id="customer-name" name="customer_name" placeholder="Enter your full name" autocomplete="name" required>
144
- </div> -->
199
+ <div class="text-start wm-binding-skeleton" data-wm-bind="@show checkout">
200
+ Managing order for <strong data-wm-bind="@text auth.user.email">loading@example.com</strong>, <a href="#" id="switch-account">switch account</a>.
201
+ </div>
202
+
203
+ <!-- Customer form fields will go here when needed -->
204
+ <div id="customer-fields" class="text-start">
205
+ <!-- Future form fields like shipping address, VAT number, etc. -->
206
+ <!-- <div class="mb-3">
207
+ <label for="customer-name" class="form-label fw-semibold">
208
+ Name <span class="text-danger">*</span>
209
+ </label>
210
+ <input type="text" class="form-control form-control-md" id="customer-name" name="customer_name" placeholder="Enter your full name" autocomplete="name" required>
211
+ </div> -->
212
+ </div>
213
+ </div>
145
214
  </div>
146
- </div>
147
- </div>
148
215
 
149
- <!-- Payment Method Card -->
150
- <div class="card border-1 shadow-sm mb-0">
151
- <div class="card-body p-4">
152
- <h3 class="h5 fw-bold mb-3">Payment Method</h3>
153
-
154
- <!-- Direct Payment Buttons -->
155
- <div class="d-grid gap-3">
156
- <!-- Credit/Debit Card Button -->
157
- <button type="submit" class="btn btn-adaptive btn-lg py-3 d-flex align-items-center justify-content-center" id="pay-with-card" data-payment-method="card" data-action="pay-card">
158
- {% uj_icon "credit-card", "me-2 fa-3xl" %}
159
- <span class="fw-semibold">Credit/Debit</span>
160
- </button>
161
-
162
- <!-- PayPal Button -->
163
- <button type="submit" class="btn btn-paypal btn-lg py-3 d-flex align-items-center justify-content-center" id="pay-with-paypal" data-payment-method="paypal" data-action="pay-paypal">
164
- <img src="https://www.paypalobjects.com/webstatic/mktg/Logo/pp-logo-200px.png"
165
- alt="PayPal"
166
- height="28"
167
- style="max-height: 28px;">
168
- </button>
169
-
170
- <!-- Apple Pay Button (shown conditionally) -->
171
- <button type="submit" class="btn btn-dark btn-lg py-3 d-flex align-items-center justify-content-center d-none" id="pay-with-apple-pay" data-payment-method="apple-pay" data-action="pay-apple-pay">
172
- {% uj_icon "apple", "me-2 fa-3xl" %}
173
- <span class="fw-semibold">Apple Pay</span>
174
- </button>
175
-
176
- <!-- Google Pay Button (shown conditionally) -->
177
- <button type="submit" class="btn btn-outline-dark btn-lg py-3 d-flex align-items-center justify-content-center d-none" id="pay-with-google-pay" data-payment-method="google-pay" data-action="pay-google-pay">
178
- <img src="https://www.gstatic.com/instantbuy/svg/dark_gpay.svg"
179
- alt="Google Pay"
180
- height="24"
181
- class="me-2">
182
- <span class="fw-semibold">Google Pay</span>
183
- </button>
184
-
185
- <!-- Crypto Button -->
186
- <button type="submit" class="btn btn-outline-adaptive btn-lg py-3 d-flex align-items-center justify-content-center" id="pay-with-crypto" data-payment-method="crypto" data-action="pay-crypto">
187
- {% uj_icon "bitcoin", "me-2 fa-3xl" %}
188
- <span class="fw-semibold">Crypto</span>
189
- </button>
190
-
191
- <!-- Divider -->
192
- <!-- <div class="d-flex align-items-center my-2">
193
- <hr class="flex-grow-1">
194
- <span class="text-muted small px-3">or pay with cryptocurrency</span>
195
- <hr class="flex-grow-1">
196
- </div> -->
197
-
198
- <p class="text-muted small text-center mb-0">
199
- By purchasing, you agree to our <a href="/terms" target="_blank">Terms of Service</a> and <a href="/privacy" target="_blank">Privacy Policy</a>.
200
- </p>
216
+ <!-- HR separator (visible on desktop only) -->
217
+ <hr class="d-none d-lg-block">
218
+
219
+ <!-- Payment Method Card (Desktop only - duplicate for layout) -->
220
+ <div class="_card _border-1 _border-secondary _shadow-sm mb-0 d-none d-lg-block">
221
+ <div class="card-body">
222
+ <h3 class="h5 fw-bold mb-3">Payment Method</h3>
223
+
224
+ <!-- Direct Payment Buttons -->
225
+ <div class="d-grid gap-3 wm-binding-skeleton" data-wm-bind="@show checkout.paymentMethods">
226
+ {{ payment_buttons_content }}
227
+ </div>
228
+ </div>
201
229
  </div>
202
- </div>
203
- </div>
204
230
 
205
- <!-- Security badges -->
206
- <div class="text-center mt-2">
207
- <div class="d-flex justify-content-center align-items-center gap-3 small text-muted">
208
- <span>{% uj_icon "shield-check", "text-success" %} Secure Checkout</span>
209
- <span>{% uj_icon "lock", "text-success" %} SSL Encrypted</span>
210
- <span>{% uj_icon "check-circle", "text-success" %} Money-back guarantee</span>
211
231
  </div>
212
- </div>
213
- </div>
214
232
 
215
- <!-- Right Column - Order Summary -->
216
- <div class="col-lg-5">
217
- <div class="order-summary-sticky">
218
- <div class="card border-1 shadow-sm">
219
- <div class="card-body p-4">
220
- <h3 class="h5 fw-bold mb-3">Order Summary</h3>
221
-
222
- <!-- Product Item -->
223
- <div class="order-item mb-4">
224
- <div class="d-flex align-items-center">
225
- <div class="position-relative me-3">
226
- <div class="product-thumbnail bg-light rounded-3 d-flex align-items-center justify-content-center">
227
- <img src="{{ site.brand.images.brandmark }}?cb={{ site.uj.cache_breaker }}" class="img-fluid p-3" alt="{{ site.brand.name }} Plan Icon"/>
233
+ <!-- Section 2: Order Summary -->
234
+ <div class="col-12 col-lg-5 mb-4 mb-lg-0 order-2 ms-lg-auto">
235
+ <div class="order-summary-sticky">
236
+ <div class="_card _border-1 _border-secondary _shadow-sm">
237
+ <div class="card-body">
238
+ <h3 class="h5 fw-bold mb-3">Order Summary</h3>
239
+
240
+ <!-- Product Item -->
241
+ <div class="order-item mb-4">
242
+ <div class="d-flex align-items-center wm-binding-skeleton" data-wm-bind="@show checkout">
243
+ <div class="position-relative me-3">
244
+ <div class="product-thumbnail bg-light rounded-3 d-flex align-items-center justify-content-center">
245
+ <img src="{{ site.brand.images.brandmark }}?cb={{ site.uj.cache_breaker }}" class="img-fluid p-3" alt="{{ site.brand.name }} Plan Icon"/>
246
+ </div>
247
+ <span class="position-absolute badge rounded-pill bg-primary" style="top: -0.375rem; right: -0.375rem;">
248
+ 1
249
+ <span class="visually-hidden">quantity</span>
250
+ </span>
251
+ </div>
252
+ <div class="flex-grow-1 text-start wm-binding-skeleton" data-wm-bind="@show checkout">
253
+ <h6 class="mb-1" data-wm-bind="@text checkout.product.name">Loading...</h6>
254
+ <!-- <p class="text-muted small mb-0" data-wm-bind="@text checkout.product.description">Loading product details...</p> -->
255
+ </div>
256
+ <div class="text-end d-none">
257
+ <div class="fw-bold" data-wm-bind="@text checkout.pricing.productPrice">$--</div>
258
+ </div>
228
259
  </div>
229
- <span class="position-absolute badge rounded-pill bg-primary" style="top: -0.375rem; right: -0.375rem;">
230
- 1
231
- <span class="visually-hidden">quantity</span>
232
- </span>
233
- </div>
234
- <div class="flex-grow-1 text-start">
235
- <h6 class="mb-1" id="product-name">Loading...</h6>
236
- <p class="text-muted small mb-0" id="product-description">Loading product details...</p>
237
- </div>
238
- <div class="text-end d-none">
239
- <div class="fw-bold" id="product-price">$--</div>
240
260
  </div>
241
- </div>
242
- </div>
243
261
 
244
- <!-- Discount Code -->
245
- <div class="mb-4">
246
- <div class="input-group">
247
- <input type="text" class="form-control rounded-start-3 border py-2 px-3 text-start" id="discount-code" name="discount-code" placeholder="Discount code" autocomplete="off">
248
- <button class="btn btn-adaptive rounded-end-3 border px-4" type="button" id="apply-discount" data-action="apply-discount">Apply</button>
249
- </div>
262
+ <!-- Discount Code -->
263
+ <div class="mb-4 wm-binding-skeleton" data-wm-bind="@show checkout">
264
+ <div class="input-group" data-wm-bind="@show checkout" hidden>
265
+ <input type="text" class="form-control rounded-start-3 border py-2 px-3 text-start" id="discount-code" name="discount-code" placeholder="Discount code" autocomplete="off">
266
+ <button class="btn btn-adaptive rounded-end-3 border px-4" type="button" id="apply-discount" data-action="apply-discount">Apply</button>
267
+ </div>
250
268
 
251
- <!-- Discount Messages -->
252
- <div class="text-start">
253
- <div id="discount-message-loading" class="mt-2 text-primary small d-none">
254
- {% uj_icon "clock", "me-1" %} Checking code...
255
- </div>
256
- <div id="discount-message-success" class="mt-2 text-success small d-none">
257
- {% uj_icon "check-circle", "me-1" %} <span id="confirmation-text">Discount applied</span>
258
- </div>
259
- <div id="discount-message-error" class="mt-2 text-danger small d-none">
260
- {% uj_icon "times-circle", "me-1" %} <span id="error-text">Invalid discount code</span>
269
+ <!-- Discount Messages -->
270
+ <div class="text-start">
271
+ <div class="mt-2 text-primary small" data-wm-bind="@show checkout.discount.loading" hidden>
272
+ {% uj_icon "clock", "me-1" %} Checking code...
273
+ </div>
274
+ <div class="mt-2 text-success small" data-wm-bind="@show checkout.discount.success" hidden>
275
+ {% uj_icon "check-circle", "me-1" %} <span data-wm-bind="@text checkout.discount.successMessage">Discount applied</span>
276
+ </div>
277
+ <div class="mt-2 text-danger small" data-wm-bind="@show checkout.discount.error" hidden>
278
+ {% uj_icon "times-circle", "me-1" %} <span data-wm-bind="@text checkout.discount.errorMessage">Invalid discount code</span>
279
+ </div>
280
+ </div>
261
281
  </div>
262
- </div>
263
- </div>
264
282
 
265
- <!-- Price Breakdown -->
266
- <div>
267
- <div class="d-flex justify-content-between mb-2">
268
- <span class="text-muted">Subtotal</span>
269
- <span id="subtotal">$--</span>
270
- </div>
283
+ <!-- Price Breakdown -->
284
+ <div>
285
+ <div class="d-flex justify-content-between mb-2 wm-binding-skeleton" data-wm-bind="@show checkout">
286
+ <span class="text-muted">Subtotal</span>
287
+ <span data-wm-bind="@text checkout.pricing.subtotal">$--</span>
288
+ </div>
271
289
 
272
- <div class="d-flex justify-content-between mb-2 text-success d-none" id="discount-row">
273
- <span>Discount (<span id="discount-percent"></span>)</span>
274
- <span>-$<span id="discount-amount"></span></span>
275
- </div>
290
+ <div class="d-flex justify-content-between mb-2 text-success"
291
+ data-wm-bind="@show checkout.discount.hasDiscount"
292
+ hidden>
293
+ <span>Discount (<span data-wm-bind="@text checkout.discount.percent"></span>)</span>
294
+ <span>-$<span data-wm-bind="@text checkout.discount.amount"></span></span>
295
+ </div>
276
296
 
277
- <div class="d-flex justify-content-between mb-3 text-success d-none" id="trial-discount-row">
278
- <span>Free Trial Discount</span>
279
- <span>-$<span id="trial-discount-amount"></span></span>
280
- </div>
297
+ <div class="d-flex justify-content-between mb-3 text-success"
298
+ data-wm-bind="@show checkout.trial.hasFreeTrial"
299
+ hidden>
300
+ <span>Free Trial Discount</span>
301
+ <span>-$<span data-wm-bind="@text checkout.trial.discountAmount"></span></span>
302
+ </div>
281
303
 
282
- <div class="d-flex justify-content-between align-items-center mb-3">
283
- <span class="fw-bold fs-5">Total Due Today</span>
284
- <span class="fw-bold fs-4" id="total-price">$--</span>
285
- </div>
304
+ <div class="d-flex justify-content-between align-items-center mb-3 wm-binding-skeleton" data-wm-bind="@show checkout">
305
+ <span class="fw-bold fs-5">Total Due Today</span>
306
+ <span class="fw-bold fs-4" data-wm-bind="@text checkout.pricing.total">$--</span>
307
+ </div>
286
308
 
287
- <hr class="my-3">
309
+ <hr class="my-3">
310
+
311
+ <div class="d-flex justify-content-between align-items-center text-muted wm-binding-skeleton" data-wm-bind="@show checkout">
312
+ <span>Recurring</span>
313
+ <span><span data-wm-bind="@text checkout.pricing.recurringAmount">$--</span> <span data-wm-bind="@text checkout.pricing.recurringPeriod">monthly</span></span>
314
+ </div>
288
315
 
289
- <div class="d-flex justify-content-between align-items-center text-muted">
290
- <span>Recurring</span>
291
- <span id="recurring-amount">$-- <span id="recurring-period">monthly</span></span>
316
+ <!-- Subscription Terms -->
317
+ <div class="mt-3 rounded-3 small text-body-tertiary text-start"
318
+ data-wm-bind="@show checkout.pricing.showTerms"
319
+ hidden>
320
+ <span data-wm-bind="@text checkout.pricing.termsText"></span>
321
+ </div>
322
+ </div>
292
323
  </div>
324
+ </div>
293
325
 
294
- <!-- Subscription Terms -->
295
- <div id="subscription-terms" class="mt-3 rounded-3 small text-body-tertiary d-none text-start">
296
- <span id="terms-text"></span>
326
+ <!-- Trust Badges -->
327
+ <div class="text-center mt-2">
328
+ <div class="d-flex justify-content-center align-items-center gap-3 text-muted">
329
+ <a href="javascript:;" class="text-decoration-none btn-link" id="checkout-help-button">
330
+ {% uj_icon "messages-question", "text-primary" %} Need help? Chat with us now!
331
+ </a>
297
332
  </div>
298
333
  </div>
299
334
  </div>
300
335
  </div>
301
336
 
302
- <!-- Trust Badges -->
303
- <div class="text-center mt-2">
304
- <div class="d-flex justify-content-center align-items-center gap-3 text-muted">
305
- <a href="javascript:;" class="text-decoration-none btn-link" id="checkout-help-button">
306
- {% uj_icon "messages-question", "text-primary" %} Need help? Chat with us now!
307
- </a>
337
+ <!-- Section 3: Payment Method (Mobile only - hidden on desktop) -->
338
+ <div class="col-12 col-lg-7 mb-4 order-3 d-lg-none">
339
+ <!-- Payment Method Card (Mobile position) -->
340
+ <div class="_card _border-1 _border-secondary _shadow-sm mb-0">
341
+ <div class="card-body">
342
+ <h3 class="h5 fw-bold mb-3">Payment Method</h3>
343
+
344
+ <!-- Direct Payment Buttons -->
345
+ <div class="d-grid gap-3 wm-binding-skeleton" data-wm-bind="@show checkout.paymentMethods">
346
+ {{ payment_buttons_content }}
347
+ </div>
348
+ </div>
308
349
  </div>
350
+
309
351
  </div>
310
352
  </div>
311
- </div>
353
+ </form>
312
354
  </div>
313
- </form>
355
+ </div>
356
+
357
+ <!-- Security badges (below main card) -->
358
+ <div class="text-center mt-3">
359
+ <div class="d-flex justify-content-center align-items-center gap-3 small text-muted">
360
+ <span>{% uj_icon "shield-check", "text-success" %} Secure Checkout</span>
361
+ <span>{% uj_icon "lock", "text-success" %} SSL Encrypted</span>
362
+ <span>{% uj_icon "check-circle", "text-success" %} Money-back guarantee</span>
363
+ </div>
364
+ </div>
314
365
  </section>
315
366
 
316
367
  {{ content | uj_content_format }}