spree_core 5.5.3 → 5.6.0.rc1

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 (133) hide show
  1. checksums.yaml +4 -4
  2. data/app/helpers/spree/base_helper.rb +12 -2
  3. data/app/helpers/spree/currency_helper.rb +1 -4
  4. data/app/helpers/spree/locale_helper.rb +18 -13
  5. data/app/helpers/spree/localized_names_helper.rb +25 -0
  6. data/app/mailers/spree/admin_user_mailer.rb +71 -0
  7. data/app/mailers/spree/base_mailer.rb +73 -11
  8. data/app/mailers/spree/export_mailer.rb +7 -7
  9. data/app/mailers/spree/import_mailer.rb +19 -0
  10. data/app/mailers/spree/invitation_mailer.rb +16 -11
  11. data/app/mailers/spree/report_mailer.rb +6 -6
  12. data/app/mailers/spree/webhook_mailer.rb +7 -6
  13. data/app/models/concerns/spree/admin_user_methods.rb +44 -0
  14. data/app/models/concerns/spree/legacy_multi_store_support.rb +48 -0
  15. data/app/models/concerns/spree/presentation_translatable.rb +39 -0
  16. data/app/models/concerns/spree/product_scopes.rb +21 -3
  17. data/app/models/concerns/spree/single_store_resource.rb +5 -0
  18. data/app/models/concerns/spree/store_scoped_resource.rb +10 -0
  19. data/app/models/concerns/spree/stores/markets.rb +9 -1
  20. data/app/models/concerns/spree/stores/setup.rb +37 -23
  21. data/app/models/concerns/spree/translatable_resource.rb +95 -5
  22. data/app/models/concerns/spree/user_methods.rb +27 -2
  23. data/app/models/spree/ability.rb +5 -4
  24. data/app/models/spree/allowed_origin.rb +31 -0
  25. data/app/models/spree/category.rb +12 -2
  26. data/app/models/spree/channel/gating.rb +67 -0
  27. data/app/models/spree/channel.rb +1 -0
  28. data/app/models/spree/classification.rb +12 -0
  29. data/app/models/spree/country.rb +22 -1
  30. data/app/models/spree/credit_card.rb +29 -0
  31. data/app/models/spree/currency.rb +47 -0
  32. data/app/models/spree/current.rb +12 -1
  33. data/app/models/spree/customer_group.rb +1 -0
  34. data/app/models/spree/export.rb +19 -0
  35. data/app/models/spree/exports/coupon_codes.rb +1 -2
  36. data/app/models/spree/import.rb +84 -1
  37. data/app/models/spree/import_row.rb +7 -1
  38. data/app/models/spree/imports/product_translations.rb +6 -0
  39. data/app/models/spree/locale.rb +104 -0
  40. data/app/models/spree/option_type.rb +11 -13
  41. data/app/models/spree/option_value.rb +5 -17
  42. data/app/models/spree/order.rb +19 -2
  43. data/app/models/spree/payment_method.rb +6 -5
  44. data/app/models/spree/policy.rb +2 -1
  45. data/app/models/spree/product.rb +23 -2
  46. data/app/models/spree/promotion/rules/channel.rb +37 -0
  47. data/app/models/spree/promotion/rules/market.rb +37 -0
  48. data/app/models/spree/promotion.rb +5 -3
  49. data/app/models/spree/promotion_handler/promotion_duplicator.rb +1 -1
  50. data/app/models/spree/role_user.rb +4 -0
  51. data/app/models/spree/search_provider/meilisearch.rb +22 -9
  52. data/app/models/spree/setup_task.rb +12 -0
  53. data/app/models/spree/setup_tasks.rb +86 -0
  54. data/app/models/spree/shipment.rb +38 -1
  55. data/app/models/spree/shipment_handler.rb +1 -1
  56. data/app/models/spree/stock/availability_validator.rb +1 -1
  57. data/app/models/spree/stock/quantifier.rb +21 -1
  58. data/app/models/spree/stock_item.rb +2 -1
  59. data/app/models/spree/stock_location.rb +4 -1
  60. data/app/models/spree/store.rb +45 -9
  61. data/app/models/spree/store_payment_method.rb +5 -1
  62. data/app/models/spree/store_promotion.rb +4 -0
  63. data/app/models/spree/taxon.rb +112 -9
  64. data/app/models/spree/taxonomy.rb +1 -1
  65. data/app/models/spree/translations/batch.rb +104 -0
  66. data/app/models/spree/variant.rb +29 -2
  67. data/app/presenters/spree/search_provider/product_presenter.rb +3 -0
  68. data/app/services/spree/carts/complete.rb +3 -0
  69. data/app/services/spree/fulfillments/create.rb +259 -0
  70. data/app/services/spree/locales/set_fallback_locale_for_store.rb +7 -1
  71. data/app/services/spree/locales.rb +52 -0
  72. data/app/services/spree/products/prepare_nested_attributes.rb +40 -12
  73. data/app/services/spree/shipments/update.rb +1 -1
  74. data/app/services/spree/stock_reservations/reserve.rb +4 -1
  75. data/app/services/spree/taxons/add_products.rb +3 -0
  76. data/app/services/spree/taxons/remove_products.rb +3 -0
  77. data/app/subscribers/spree/admin_user_email_subscriber.rb +29 -0
  78. data/app/subscribers/spree/import_email_subscriber.rb +26 -0
  79. data/app/views/layouts/spree/base_mailer.html.erb +14 -17
  80. data/app/views/spree/admin_user_mailer/confirmation_email.html.erb +7 -0
  81. data/app/views/spree/admin_user_mailer/password_reset_email.html.erb +8 -0
  82. data/app/views/spree/export_mailer/export_done.html.erb +6 -14
  83. data/app/views/spree/import_mailer/import_done.html.erb +12 -0
  84. data/app/views/spree/invitation_mailer/invitation_accepted.html.erb +4 -12
  85. data/app/views/spree/invitation_mailer/invitation_email.html.erb +11 -24
  86. data/app/views/spree/report_mailer/report_done.html.erb +6 -14
  87. data/app/views/spree/shared/_base_mailer_footer.html.erb +15 -8
  88. data/app/views/spree/shared/_base_mailer_header.html.erb +7 -5
  89. data/app/views/spree/shared/_base_mailer_stylesheets.html.erb +211 -273
  90. data/app/views/spree/shared/_mailer_button.html.erb +10 -0
  91. data/app/views/spree/shared/_mailer_hero.html.erb +12 -0
  92. data/app/views/spree/shared/_purchased_items_styles.html.erb +112 -0
  93. data/app/views/spree/webhook_mailer/endpoint_disabled.html.erb +39 -14
  94. data/config/initializers/spree_store_setup_tasks.rb +23 -0
  95. data/config/locales/en.yml +42 -992
  96. data/db/migrate/20260613000001_add_store_id_to_spree_role_users.rb +10 -0
  97. data/db/migrate/20260626000001_add_store_id_to_spree_taxons.rb +11 -0
  98. data/db/migrate/20260627000001_add_products_count_to_spree_taxons.rb +6 -0
  99. data/db/migrate/20260628000001_add_store_id_to_spree_promotions.rb +10 -0
  100. data/db/migrate/20260628000002_add_store_id_to_spree_payment_methods.rb +11 -0
  101. data/db/migrate/20260630000001_add_preorder_fields_to_spree_variants.rb +7 -0
  102. data/db/migrate/20260707000001_add_fingerprint_to_spree_credit_cards.rb +39 -0
  103. data/db/migrate/20260710000001_add_import_id_status_index_to_spree_import_rows.rb +7 -0
  104. data/db/migrate/20260711000001_add_preferences_to_spree_exports.rb +7 -0
  105. data/db/sample_data/promotions.rb +1 -1
  106. data/lib/generators/spree/authentication/dummy/templates/create_spree_admin_users.rb.tt +0 -1
  107. data/lib/mobility/plugins/store_based_fallbacks.rb +7 -5
  108. data/lib/spree/core/configuration.rb +1 -0
  109. data/lib/spree/core/controller_helpers/locale.rb +4 -1
  110. data/lib/spree/core/controller_helpers/strong_parameters.rb +1 -0
  111. data/lib/spree/core/dependencies.rb +3 -0
  112. data/lib/spree/core/engine.rb +24 -0
  113. data/lib/spree/core/preferences/preferable.rb +6 -1
  114. data/lib/spree/core/previews/admin_user_preview.rb +22 -0
  115. data/lib/spree/core/previews/export_preview.rb +37 -0
  116. data/lib/spree/core/previews/invitation_preview.rb +47 -0
  117. data/lib/spree/core/previews/preview_data.rb +52 -0
  118. data/lib/spree/core/previews/report_preview.rb +40 -0
  119. data/lib/spree/core/previews/webhook_preview.rb +34 -0
  120. data/lib/spree/core/version.rb +1 -1
  121. data/lib/spree/core.rb +22 -1
  122. data/lib/spree/permitted_attributes.rb +5 -4
  123. data/lib/spree/testing_support/factories/export_factory.rb +4 -0
  124. data/lib/spree/testing_support/factories/payment_method_factory.rb +1 -9
  125. data/lib/spree/testing_support/factories/promotion_factory.rb +1 -9
  126. data/lib/spree/testing_support/factories/promotion_rule_factory.rb +24 -0
  127. data/lib/spree/translations.rb +113 -0
  128. data/lib/spree/upgrades/5_5_to_5_6/manifest.yml +59 -0
  129. data/lib/tasks/role_users.rake +21 -0
  130. data/lib/tasks/single_store_associations.rake +65 -0
  131. data/lib/tasks/taxons.rake +62 -1
  132. metadata +47 -5
  133. data/app/models/spree/product/legacy_multi_store_support.rb +0 -40
@@ -1,17 +1,69 @@
1
1
  <style type="text/css" rel="stylesheet" media="all">
2
- /* Base ------------------------------ */
2
+ /* Fonts ------------------------------ */
3
+ /* Same files the react-email Studio templates load; Gmail strips these and falls back to Arial. */
4
+
5
+ @font-face {
6
+ font-family: "Geist";
7
+ font-style: normal;
8
+ font-weight: 500;
9
+ src: url("https://fonts.gstatic.com/s/geist/v4/gyByhwUxId8gMEwcGFU.woff2") format("woff2");
10
+ }
11
+
12
+ @font-face {
13
+ font-family: "Geist";
14
+ font-style: normal;
15
+ font-weight: 600;
16
+ src: url("https://fonts.gstatic.com/s/geist/v4/gyByhwUxId8gMEwcGFU.woff2") format("woff2");
17
+ }
18
+
19
+ @font-face {
20
+ font-family: "Geist";
21
+ font-style: normal;
22
+ font-weight: 700;
23
+ src: url("https://fonts.gstatic.com/s/geist/v4/gyByhwUxId8gMEwcGFU.woff2") format("woff2");
24
+ }
25
+
26
+ @font-face {
27
+ font-family: "Inter";
28
+ font-style: normal;
29
+ font-weight: 400;
30
+ src: url("https://fonts.gstatic.com/s/inter/v20/UcCO3FwrK3iLTeHuS_nVMrMxCp50SjIw2boKoduKmMEVuOKfMZg.ttf") format("truetype");
31
+ }
32
+
33
+ @font-face {
34
+ font-family: "Inter";
35
+ font-style: normal;
36
+ font-weight: 450;
37
+ src: url("https://fonts.gstatic.com/s/inter/v20/UcCO3FwrK3iLTeHuS_nVMrMxCp50SjIw2boKoduKmMEVuOKfMZg.ttf") format("truetype");
38
+ }
39
+
40
+ @font-face {
41
+ font-family: "Inter";
42
+ font-style: normal;
43
+ font-weight: 500;
44
+ src: url("https://fonts.gstatic.com/s/inter/v20/UcCO3FwrK3iLTeHuS_nVMrMxCp50SjIw2boKoduKmMEVuI6fMZg.ttf") format("truetype");
45
+ }
46
+
47
+ @font-face {
48
+ font-family: "Inter";
49
+ font-style: normal;
50
+ font-weight: 600;
51
+ src: url("https://fonts.gstatic.com/s/inter/v20/UcCO3FwrK3iLTeHuS_nVMrMxCp50SjIw2boKoduKmMEVuGKYMZg.ttf") format("truetype");
52
+ }
3
53
 
4
- @import url("https://fonts.googleapis.com/css?family=Nunito+Sans:400,700&display=swap");
54
+ /* Base ------------------------------ */
5
55
 
6
56
  body {
7
57
  width: 100% !important;
8
58
  height: 100%;
9
59
  margin: 0;
10
60
  -webkit-text-size-adjust: none;
61
+ background-color: #FFFFFF;
62
+ color: #726A6A;
11
63
  }
12
64
 
13
65
  a {
14
- color: #3869D4;
66
+ color: #332C2C;
15
67
  }
16
68
 
17
69
  a img {
@@ -39,49 +91,73 @@
39
91
  body,
40
92
  td,
41
93
  th {
42
- font-family: "Nunito Sans", Helvetica, Arial, sans-serif;
94
+ font-family: "Inter", Helvetica, Arial, sans-serif;
43
95
  }
44
96
 
45
97
  h1 {
46
- margin-top: 0;
47
- color: #333333;
48
- font-size: 22px;
49
- font-weight: bold;
50
- text-align: left;
98
+ margin: 0 0 24px;
99
+ font-family: "Geist", "Inter", Helvetica, Arial, sans-serif;
100
+ color: #332C2C;
101
+ font-size: 40px;
102
+ line-height: 1.2;
103
+ letter-spacing: -0.8px;
104
+ font-weight: 700;
105
+ text-align: center;
51
106
  }
52
107
 
53
108
  h2 {
54
- margin-top: 0;
55
- color: #333333;
56
- font-size: 16px;
57
- font-weight: bold;
58
- text-align: left;
109
+ margin: 0 0 16px;
110
+ font-family: "Geist", "Inter", Helvetica, Arial, sans-serif;
111
+ color: #332C2C;
112
+ font-size: 22px;
113
+ line-height: 1.4;
114
+ letter-spacing: -0.18px;
115
+ font-weight: 500;
116
+ text-align: center;
59
117
  }
60
118
 
61
119
  h3 {
62
- margin-top: 0;
63
- color: #333333;
64
- font-size: 14px;
65
- font-weight: bold;
120
+ margin: 0 0 16px;
121
+ font-family: "Geist", "Inter", Helvetica, Arial, sans-serif;
122
+ color: #726A6A;
123
+ font-size: 16px;
124
+ line-height: 1.5;
125
+ letter-spacing: -0.16px;
126
+ font-weight: 500;
66
127
  text-align: left;
67
128
  }
68
129
 
69
130
  td,
70
131
  th {
71
- font-size: 16px;
132
+ font-size: 14px;
72
133
  }
73
134
 
74
135
  p,
75
136
  ul,
76
137
  ol,
77
138
  blockquote {
78
- margin: .4em 0 1.1875em;
79
- font-size: 16px;
80
- line-height: 1.625;
139
+ margin: 0 0 16px;
140
+ font-size: 14px;
141
+ line-height: 1.6;
142
+ letter-spacing: -0.042px;
143
+ font-weight: 450;
144
+ color: #726A6A;
81
145
  }
82
146
 
83
147
  p.sub {
84
148
  font-size: 13px;
149
+ color: #726A6A;
150
+ }
151
+
152
+ p.sub a {
153
+ color: #726A6A;
154
+ word-break: break-all;
155
+ }
156
+
157
+ p.strong {
158
+ margin: 0;
159
+ font-weight: 500;
160
+ color: #332C2C;
85
161
  }
86
162
 
87
163
  /* Utilities ------------------------------ */
@@ -101,34 +177,30 @@
101
177
  /* Buttons ------------------------------ */
102
178
 
103
179
  .button {
104
- background-color: #3869D4;
105
- border-top: 10px solid #3869D4;
106
- border-right: 18px solid #3869D4;
107
- border-bottom: 10px solid #3869D4;
108
- border-left: 18px solid #3869D4;
109
180
  display: inline-block;
110
- color: #FFF !important;
181
+ background-color: #FFFFFF;
182
+ border: 1px solid #E8E9E9;
183
+ border-radius: 8px;
184
+ padding: 12px 20px;
185
+ font-size: 15px;
186
+ line-height: 1.6;
187
+ font-weight: 500;
188
+ color: #1F2222 !important;
111
189
  text-decoration: none;
112
- border-radius: 3px;
113
- box-shadow: 0 2px 3px rgba(0, 0, 0, 0.16);
114
190
  -webkit-text-size-adjust: none;
115
191
  box-sizing: border-box;
116
192
  }
117
193
 
118
194
  .button--green {
119
195
  background-color: #22BC66;
120
- border-top: 10px solid #22BC66;
121
- border-right: 18px solid #22BC66;
122
- border-bottom: 10px solid #22BC66;
123
- border-left: 18px solid #22BC66;
196
+ border-color: #22BC66;
197
+ color: #FFFFFF !important;
124
198
  }
125
199
 
126
200
  .button--red {
127
201
  background-color: #FF6136;
128
- border-top: 10px solid #FF6136;
129
- border-right: 18px solid #FF6136;
130
- border-bottom: 10px solid #FF6136;
131
- border-left: 18px solid #FF6136;
202
+ border-color: #FF6136;
203
+ color: #FFFFFF !important;
132
204
  }
133
205
 
134
206
  @media only screen and (max-width: 500px) {
@@ -138,317 +210,183 @@
138
210
  }
139
211
  }
140
212
 
141
- /* Attribute list ------------------------------ */
213
+ /* Hero ------------------------------ */
142
214
 
143
- .attributes {
144
- margin: 0 0 21px;
145
- }
146
-
147
- .attributes_content {
148
- background-color: #F4F4F7;
149
- padding: 16px;
215
+ .hero {
216
+ width: 100%;
217
+ text-align: center;
150
218
  }
151
219
 
152
- .attributes_item {
153
- padding: 0;
220
+ .hero_content {
221
+ max-width: 420px;
222
+ margin: 0 auto;
154
223
  }
155
224
 
156
- /* Related Items ------------------------------ */
157
-
158
- .related {
159
- width: 100%;
225
+ .hero h1 {
160
226
  margin: 0;
161
- padding: 25px 0 0 0;
162
- -premailer-width: 100%;
163
- -premailer-cellpadding: 0;
164
- -premailer-cellspacing: 0;
165
227
  }
166
228
 
167
- .related_item {
168
- padding: 10px 0;
169
- color: #CBCCCF;
170
- font-size: 15px;
171
- line-height: 18px;
229
+ .hero p {
230
+ margin: 12px 0 0;
172
231
  }
173
232
 
174
- .related_item-title {
175
- display: block;
176
- margin: .5em 0 0;
233
+ .hero .greeting {
234
+ margin: 24px 0 0;
235
+ font-size: 15px;
236
+ font-weight: 500;
237
+ color: #332C2C;
177
238
  }
178
239
 
179
- .related_item-thumb {
180
- display: block;
181
- padding-bottom: 10px;
240
+ .hero .sub {
241
+ margin: 24px 0 0;
182
242
  }
183
243
 
184
- .related_heading {
185
- border-top: 1px solid #CBCCCF;
186
- text-align: center;
187
- padding: 25px 0 10px;
244
+ .hero .sub + .sub {
245
+ margin: 16px 0 0;
188
246
  }
189
247
 
190
- /* Discount Code ------------------------------ */
248
+ /* Sections ------------------------------ */
191
249
 
192
- .discount {
250
+ .section {
193
251
  width: 100%;
194
- margin: 0;
195
- padding: 24px;
196
- -premailer-width: 100%;
197
- -premailer-cellpadding: 0;
198
- -premailer-cellspacing: 0;
199
- background-color: #F4F4F7;
200
- border: 2px dashed #CBCCCF;
201
- }
202
-
203
- .discount_heading {
204
- text-align: center;
205
- }
206
-
207
- .discount_body {
208
- text-align: center;
209
- font-size: 15px;
210
- }
211
-
212
- /* Social Icons ------------------------------ */
213
-
214
- .social {
215
- width: auto;
216
- }
217
-
218
- .social td {
219
- padding: 0;
220
- width: auto;
252
+ margin: 48px 0 0;
253
+ text-align: left;
221
254
  }
222
255
 
223
- .social_icon {
224
- height: 20px;
225
- margin: 0 8px 10px 8px;
226
- padding: 0;
256
+ .section .sub {
257
+ margin: 16px 0 0;
227
258
  }
228
259
 
229
- /* Data table ------------------------------ */
260
+ /* Structure ------------------------------ */
230
261
 
231
- .purchase {
262
+ .email-wrapper {
232
263
  width: 100%;
233
264
  margin: 0;
234
- -premailer-width: 100%;
235
- -premailer-cellpadding: 0;
236
- -premailer-cellspacing: 0;
265
+ padding: 0;
266
+ background-color: #FFFFFF;
237
267
  }
238
268
 
239
- .purchase_content {
269
+ .email-content {
240
270
  width: 100%;
241
- margin: 0;
242
- -premailer-width: 100%;
243
- -premailer-cellpadding: 0;
244
- -premailer-cellspacing: 0;
245
- }
246
-
247
- .purchase_item {
248
- padding: 10px 4px;
249
- color: #51545E;
250
- font-size: 15px;
251
- line-height: 18px;
271
+ max-width: 640px;
272
+ margin: 0 auto;
273
+ padding: 0;
252
274
  }
253
275
 
254
- .purchase_image {
255
- padding: 5px;
256
- width: 100px;
257
-
258
- img {
259
- width: 100px;
260
- }
261
- }
276
+ /* Masthead ----------------------- */
262
277
 
263
- .purchase_item p {
264
- margin: 0;
265
- padding: 0.1em 0;
278
+ .email-masthead {
279
+ padding: 0 0 32px;
280
+ text-align: center;
266
281
  }
267
282
 
268
- .purchase_item--additional {
269
- font-size: 12px;
270
- }
283
+ /* Body ------------------------------ */
271
284
 
272
- .purchase_heading {
273
- padding-bottom: 8px;
274
- border-bottom: 1px solid #EAEAEC;
285
+ .email-card {
286
+ background-color: #F6F6F6;
287
+ padding: 56px 24px;
275
288
  }
276
289
 
277
- .purchase_heading p {
278
- margin: 0;
279
- color: #85878E;
280
- font-size: 12px;
290
+ .email-footer {
291
+ padding: 64px 24px;
292
+ text-align: center;
281
293
  }
282
294
 
283
- .purchase_footer {
284
- padding-top: 15px;
285
- border-top: 1px solid #EAEAEC;
295
+ .email-footer p {
296
+ color: #726A6A;
286
297
  }
287
298
 
288
- .purchase_total {
289
- margin: 0;
290
- text-align: right;
291
- font-weight: bold;
292
- color: #333333;
299
+ .footer_content {
300
+ max-width: 320px;
301
+ margin: 0 auto;
293
302
  }
294
303
 
295
- .purchase_total--name {
304
+ .footer_brand {
296
305
  margin: 0;
297
- text-align: right;
298
- color: #333333;
299
- }
300
-
301
- .purchase_total--label {
302
- padding: 0 15px 0 0;
306
+ font-size: 13px;
307
+ line-height: 1.5;
308
+ letter-spacing: -0.13px;
303
309
  }
304
310
 
305
- .purchase_total-col {
306
- vertical-align: bottom;
311
+ .footer_brand a {
312
+ color: #726A6A;
313
+ font-weight: 500;
314
+ text-decoration: none;
307
315
  }
308
316
 
309
- body {
310
- background-color: #F2F4F6;
311
- color: #51545E;
317
+ .footer_meta {
318
+ margin: 12px 0 0;
319
+ font-size: 11px;
320
+ line-height: 1.5;
321
+ letter-spacing: -0.11px;
312
322
  }
313
323
 
314
- p {
315
- color: #51545E;
324
+ .footer_meta a {
325
+ color: #726A6A;
316
326
  }
317
327
 
318
- .email-wrapper {
319
- width: 100%;
320
- margin: 0;
321
- padding: 0;
322
- -premailer-width: 100%;
323
- -premailer-cellpadding: 0;
324
- -premailer-cellspacing: 0;
325
- background-color: #F2F4F6;
328
+ .footer_note {
329
+ margin: 20px 0 0;
330
+ font-size: 11px;
331
+ line-height: 1.5;
332
+ letter-spacing: -0.11px;
333
+ color: #726A6A;
326
334
  }
327
335
 
328
- .email-content {
336
+ .body-action {
329
337
  width: 100%;
330
- margin: 0;
338
+ margin: 32px auto 0;
331
339
  padding: 0;
332
- -premailer-width: 100%;
333
- -premailer-cellpadding: 0;
334
- -premailer-cellspacing: 0;
335
- }
336
-
337
- /* Masthead ----------------------- */
338
-
339
- .email-masthead {
340
- padding: 25px 0;
341
340
  text-align: center;
342
341
  }
343
342
 
344
- .email-masthead_logo {
345
- width: 94px;
346
- }
347
-
348
- .email-masthead_name {
349
- font-size: 16px;
350
- font-weight: bold;
351
- color: #A8AAAF;
352
- text-decoration: none;
353
- text-shadow: 0 1px 0 white;
354
- }
355
-
356
- /* Body ------------------------------ */
343
+ /* Legacy class hooks ------------------------------ */
344
+ /* Kept for host apps and extensions that override mailer templates with
345
+ pre-5.6 markup; nothing in Spree itself uses these anymore. */
357
346
 
358
- .email-body {
347
+ .purchase,
348
+ .purchase_content {
359
349
  width: 100%;
360
350
  margin: 0;
361
- padding: 0;
362
- -premailer-width: 100%;
363
- -premailer-cellpadding: 0;
364
- -premailer-cellspacing: 0;
365
- }
366
-
367
- .email-body_inner {
368
- width: 570px;
369
- margin: 0 auto;
370
- padding: 0;
371
- -premailer-width: 570px;
372
- -premailer-cellpadding: 0;
373
- -premailer-cellspacing: 0;
374
- background-color: #FFFFFF;
375
- }
376
-
377
- .email-footer {
378
- width: 570px;
379
- margin: 0 auto;
380
- padding: 0;
381
- -premailer-width: 570px;
382
- -premailer-cellpadding: 0;
383
- -premailer-cellspacing: 0;
384
- text-align: center;
385
351
  }
386
352
 
387
- .email-footer p {
388
- color: #A8AAAF;
353
+ .purchase_item {
354
+ padding: 10px 4px;
355
+ color: #726A6A;
356
+ font-size: 14px;
357
+ line-height: 1.6;
389
358
  }
390
359
 
391
- .body-action {
392
- width: 100%;
393
- margin: 30px auto;
394
- padding: 0;
395
- -premailer-width: 100%;
396
- -premailer-cellpadding: 0;
397
- -premailer-cellspacing: 0;
398
- text-align: center;
360
+ .purchase_item--additional {
361
+ font-size: 13px;
362
+ color: #726A6A;
399
363
  }
400
364
 
401
- .body-sub {
402
- margin-top: 25px;
403
- padding-top: 25px;
404
- border-top: 1px solid #EAEAEC;
365
+ .purchase_total {
366
+ margin: 0;
367
+ text-align: right;
368
+ font-weight: 500;
369
+ color: #332C2C;
405
370
  }
406
371
 
407
- .content-cell {
408
- padding: 40px;
372
+ .purchase_total--name {
373
+ margin: 0;
374
+ text-align: right;
375
+ color: #726A6A;
409
376
  }
410
377
 
411
- /*Media Queries ------------------------------ */
378
+ /* Media Queries ------------------------------ */
412
379
 
413
380
  @media only screen and (max-width: 600px) {
414
- .email-body_inner,
415
- .email-footer {
416
- width: 100% !important;
417
- }
418
- .content-cell {
419
- padding: 40px 15px !important;
381
+ .email-card {
382
+ padding: 40px 16px !important;
420
383
  }
421
- }
422
-
423
- @media (prefers-color-scheme: dark) {
424
- body,
425
- .email-body,
426
- .email-body_inner,
427
- .email-content,
428
- .email-wrapper,
429
- .email-masthead,
430
384
  .email-footer {
431
- background-color: #333333 !important;
432
- color: #FFF !important;
385
+ padding: 48px 16px !important;
433
386
  }
434
-
435
- p,
436
- ul,
437
- ol,
438
- blockquote,
439
- h1,
440
- h2,
441
- h3 {
442
- color: #FFF !important;
443
- }
444
-
445
- .attributes_content,
446
- .discount {
447
- background-color: #222 !important;
448
- }
449
-
450
- .email-masthead_name {
451
- text-shadow: none !important;
387
+ h1 {
388
+ font-size: 32px !important;
389
+ letter-spacing: -0.64px !important;
452
390
  }
453
391
  }
454
392
  </style>
@@ -0,0 +1,10 @@
1
+ <% button_class = local_assigns.fetch(:button_class, nil) %>
2
+ <table class="body-action" align="center" width="100%" cellpadding="0" cellspacing="0" role="presentation">
3
+ <tr>
4
+ <td align="center">
5
+ <a href="<%= url %>" class="f-fallback button <%= button_class %>" target="_blank">
6
+ <%= label %>
7
+ </a>
8
+ </td>
9
+ </tr>
10
+ </table>
@@ -0,0 +1,12 @@
1
+ <%# Centered hero block every mailer template opens with.
2
+ Render as a layout so the template's headline/copy fills it:
3
+ render layout: 'spree/shared/mailer_hero' do ... end %>
4
+ <table class="hero" width="100%" cellpadding="0" cellspacing="0" role="presentation">
5
+ <tr>
6
+ <td align="center">
7
+ <div class="hero_content f-fallback">
8
+ <%= yield %>
9
+ </div>
10
+ </td>
11
+ </tr>
12
+ </table>