@runwell/shopify-toolkit 0.17.3 → 0.18.0

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 (26) hide show
  1. package/bin/runwell-shopify +4 -1
  2. package/lib/list.js +120 -0
  3. package/modules/INDEX.md +52 -19
  4. package/modules/_shared/css-tokens/assets/runwell-tokens.css +24 -4
  5. package/modules/_shared/css-tokens/module.json +2 -2
  6. package/modules/_shared/css-typography/assets/runwell-typography.css +14 -6
  7. package/modules/_shared/css-typography/module.json +2 -2
  8. package/modules/care-coaching-medvi/README.md +46 -0
  9. package/modules/care-coaching-medvi/assets/runwell-care-coaching-medvi.css +241 -0
  10. package/modules/care-coaching-medvi/module.json +80 -0
  11. package/modules/care-coaching-medvi/sections/runwell-care-coaching-medvi.liquid +274 -0
  12. package/modules/care-coaching-medvi/snippets/runwell-care-coaching-medvi-circular-text.liquid +25 -0
  13. package/modules/collection-block-medvi/README.md +50 -0
  14. package/modules/collection-block-medvi/assets/runwell-collection-block-medvi.css +242 -0
  15. package/modules/collection-block-medvi/module.json +83 -0
  16. package/modules/collection-block-medvi/sections/runwell-collection-block-medvi.liquid +355 -0
  17. package/modules/product-trio-medvi/README.md +35 -0
  18. package/modules/product-trio-medvi/assets/runwell-product-trio-medvi.css +119 -0
  19. package/modules/product-trio-medvi/module.json +48 -0
  20. package/modules/product-trio-medvi/sections/runwell-product-trio-medvi.liquid +188 -0
  21. package/modules/recently-viewed/module.json +2 -1
  22. package/modules/testimonials-medvi/README.md +44 -0
  23. package/modules/testimonials-medvi/assets/runwell-testimonials-medvi.css +239 -0
  24. package/modules/testimonials-medvi/module.json +68 -0
  25. package/modules/testimonials-medvi/sections/runwell-testimonials-medvi.liquid +355 -0
  26. package/package.json +2 -2
@@ -0,0 +1,242 @@
1
+ /* Runwell collection-block-medvi.
2
+
3
+ Duplex category section. Product side on one side; copy + photos
4
+ on the other. Sides flip via .runwell-collection-block-medvi--image-right.
5
+
6
+ Brand tokens: --runwell-primary, --runwell-oat, --runwell-celadon, etc.
7
+ Design tokens: --runwell-radius-lg/xl, --runwell-shadow-card.
8
+ Typography: --runwell-eyebrow-size, --runwell-h2-size, etc.
9
+
10
+ Mobile-first: stack vertical below 768px, side-by-side above.
11
+ */
12
+
13
+ .runwell-collection-block-medvi {
14
+ padding: clamp(3rem, 8vw, 7rem) clamp(1.5rem, 4vw, 4rem);
15
+ font-family: var(--font-body-family, inherit);
16
+ color: var(--runwell-tertiary, #0B3D38);
17
+ }
18
+
19
+ .runwell-collection-block-medvi--bg-white {
20
+ background: #ffffff;
21
+ }
22
+
23
+ .runwell-collection-block-medvi--bg-oat {
24
+ background: var(--runwell-oat, #F5F0EE);
25
+ }
26
+
27
+ .runwell-collection-block-medvi--bg-celadon-tint {
28
+ background: color-mix(in srgb, var(--runwell-celadon, #ADDDBD) 18%, white);
29
+ }
30
+
31
+ .runwell-collection-block-medvi__inner {
32
+ display: grid;
33
+ grid-template-columns: 1fr;
34
+ gap: clamp(2rem, 4vw, 4rem);
35
+ max-width: 1280px;
36
+ margin: 0 auto;
37
+ align-items: start;
38
+ }
39
+
40
+ @media (min-width: 768px) {
41
+ .runwell-collection-block-medvi__inner {
42
+ grid-template-columns: 1fr 1fr;
43
+ }
44
+
45
+ .runwell-collection-block-medvi--image-right .runwell-collection-block-medvi__inner {
46
+ direction: rtl;
47
+ }
48
+
49
+ .runwell-collection-block-medvi--image-right .runwell-collection-block-medvi__inner > * {
50
+ direction: ltr;
51
+ }
52
+ }
53
+
54
+ /* ----- Product side ----- */
55
+
56
+ .runwell-collection-block-medvi__product-side {
57
+ display: flex;
58
+ flex-direction: column;
59
+ gap: clamp(1.5rem, 3vw, 2.5rem);
60
+ }
61
+
62
+ .runwell-collection-block-medvi__product-card {
63
+ display: flex;
64
+ align-items: center;
65
+ justify-content: center;
66
+ border-radius: var(--runwell-radius-xl, 32px);
67
+ padding: clamp(1.5rem, 4vw, 3rem);
68
+ box-shadow: var(--runwell-shadow-card, 0 2px 8px rgba(0,0,0,0.04));
69
+ aspect-ratio: 4 / 3;
70
+ overflow: hidden;
71
+ }
72
+
73
+ .runwell-collection-block-medvi__product-image {
74
+ max-width: 90%;
75
+ max-height: 100%;
76
+ height: auto;
77
+ object-fit: contain;
78
+ }
79
+
80
+ /* ----- Benefits list ----- */
81
+
82
+ .runwell-collection-block-medvi__benefits {
83
+ display: flex;
84
+ flex-direction: column;
85
+ gap: 1rem;
86
+ padding: 0 clamp(0.5rem, 2vw, 1.5rem);
87
+ }
88
+
89
+ .runwell-collection-block-medvi__benefits-heading {
90
+ font-family: var(--font-heading-family, inherit);
91
+ font-size: var(--runwell-h4-size, 1.7rem);
92
+ font-weight: 600;
93
+ margin: 0;
94
+ line-height: 1.3;
95
+ }
96
+
97
+ .runwell-collection-block-medvi__benefits-list {
98
+ list-style: none;
99
+ margin: 0;
100
+ padding: 0;
101
+ display: flex;
102
+ flex-direction: column;
103
+ gap: 0.75rem;
104
+ }
105
+
106
+ .runwell-collection-block-medvi__benefit {
107
+ display: flex;
108
+ align-items: center;
109
+ gap: 0.85rem;
110
+ font-size: var(--runwell-body-size, 1.6rem);
111
+ line-height: 1.5;
112
+ }
113
+
114
+ .runwell-collection-block-medvi__check {
115
+ display: inline-flex;
116
+ align-items: center;
117
+ justify-content: center;
118
+ flex: 0 0 auto;
119
+ width: 1.6em;
120
+ height: 1.6em;
121
+ border-radius: 50%;
122
+ background: var(--runwell-primary, #0B3D38);
123
+ color: #ffffff;
124
+ }
125
+
126
+ .runwell-collection-block-medvi__check svg {
127
+ display: block;
128
+ }
129
+
130
+ .runwell-collection-block-medvi__benefit-text {
131
+ flex: 1 1 auto;
132
+ }
133
+
134
+ /* ----- Copy side ----- */
135
+
136
+ .runwell-collection-block-medvi__copy-side {
137
+ display: flex;
138
+ flex-direction: column;
139
+ gap: clamp(1rem, 2vw, 1.5rem);
140
+ }
141
+
142
+ .runwell-collection-block-medvi__eyebrow {
143
+ font-size: var(--runwell-eyebrow-size, 0.78rem);
144
+ letter-spacing: 0.12em;
145
+ text-transform: uppercase;
146
+ font-weight: 600;
147
+ margin: 0;
148
+ color: var(--runwell-primary, #0B3D38);
149
+ }
150
+
151
+ .runwell-collection-block-medvi__headline {
152
+ font-family: var(--font-heading-family, inherit);
153
+ font-size: var(--runwell-h2-size, clamp(3rem, 5vw, 4.8rem));
154
+ font-weight: 700;
155
+ line-height: 1.05;
156
+ margin: 0;
157
+ letter-spacing: -0.01em;
158
+ }
159
+
160
+ .runwell-collection-block-medvi__headline-part {
161
+ display: inline;
162
+ }
163
+
164
+ .runwell-collection-block-medvi__headline-accent {
165
+ /* color set inline via section settings (per-instance accent) */
166
+ }
167
+
168
+ .runwell-collection-block-medvi__photos {
169
+ display: grid;
170
+ grid-template-columns: 1fr 1fr;
171
+ gap: clamp(0.75rem, 2vw, 1.25rem);
172
+ margin: clamp(0.5rem, 1.5vw, 1rem) 0;
173
+ }
174
+
175
+ .runwell-collection-block-medvi__photo {
176
+ margin: 0;
177
+ border-radius: var(--runwell-radius-lg, 20px);
178
+ overflow: hidden;
179
+ aspect-ratio: 3 / 4;
180
+ background: var(--runwell-oat, #F5F0EE);
181
+ }
182
+
183
+ .runwell-collection-block-medvi__photo img {
184
+ display: block;
185
+ width: 100%;
186
+ height: 100%;
187
+ object-fit: cover;
188
+ }
189
+
190
+ .runwell-collection-block-medvi__subhead {
191
+ font-family: var(--font-heading-family, inherit);
192
+ font-size: var(--runwell-h4-size, 1.7rem);
193
+ font-weight: 600;
194
+ line-height: 1.3;
195
+ margin: 0;
196
+ }
197
+
198
+ .runwell-collection-block-medvi__body {
199
+ font-size: var(--runwell-body-size, 1.6rem);
200
+ line-height: 1.6;
201
+ opacity: 0.85;
202
+ }
203
+
204
+ .runwell-collection-block-medvi__body p {
205
+ margin: 0 0 0.5em;
206
+ }
207
+
208
+ .runwell-collection-block-medvi__body p:last-child {
209
+ margin-bottom: 0;
210
+ }
211
+
212
+ .runwell-collection-block-medvi__cta {
213
+ display: inline-flex;
214
+ align-items: center;
215
+ justify-content: center;
216
+ align-self: flex-start;
217
+ margin-top: 0.5rem;
218
+ padding: 0.85em 1.6em;
219
+ border-radius: 999px;
220
+ background: var(--runwell-primary, #0B3D38);
221
+ color: #ffffff;
222
+ font-size: var(--runwell-cta-size, 1.15rem);
223
+ font-weight: 600;
224
+ text-decoration: none;
225
+ transition: opacity 200ms ease, transform 200ms ease;
226
+ }
227
+
228
+ .runwell-collection-block-medvi__cta:hover,
229
+ .runwell-collection-block-medvi__cta:focus {
230
+ opacity: 0.9;
231
+ transform: translateY(-1px);
232
+ }
233
+
234
+ @media (prefers-reduced-motion: reduce) {
235
+ .runwell-collection-block-medvi__cta {
236
+ transition: none;
237
+ }
238
+ .runwell-collection-block-medvi__cta:hover,
239
+ .runwell-collection-block-medvi__cta:focus {
240
+ transform: none;
241
+ }
242
+ }
@@ -0,0 +1,83 @@
1
+ {
2
+ "name": "collection-block-medvi",
3
+ "version": "0.1.4",
4
+ "category": "storefront",
5
+ "source": "medvi",
6
+ "base": "collection-block",
7
+ "qualifier": null,
8
+ "description": "Duplex category section: product hero card on one side; eyebrow + split-color headline + benefits checklist + 2 lifestyle photos + CTA on the other. Sides flip per instance.",
9
+ "replaces": null,
10
+ "files": {
11
+ "sections": [
12
+ "sections/runwell-collection-block-medvi.liquid"
13
+ ],
14
+ "snippets": [],
15
+ "assets": [
16
+ "assets/runwell-collection-block-medvi.css"
17
+ ]
18
+ },
19
+ "config": {
20
+ "schema": {
21
+ "eyebrow": {
22
+ "type": "string",
23
+ "default": "PURPOSE-DRIVEN SUPPLEMENTATION",
24
+ "label": "Eyebrow (small caps tracked)"
25
+ },
26
+ "headline_pre": {
27
+ "type": "string",
28
+ "default": "Supplements with the",
29
+ "label": "Headline (first half)"
30
+ },
31
+ "headline_post": {
32
+ "type": "string",
33
+ "default": "power to boost real results",
34
+ "label": "Headline (accent half)"
35
+ },
36
+ "headline_accent_color": {
37
+ "type": "string",
38
+ "default": "{{brand.primary}}",
39
+ "label": "Accent color for headline_post"
40
+ },
41
+ "show_product_card": {
42
+ "type": "boolean",
43
+ "default": true,
44
+ "label": "Show product hero card"
45
+ },
46
+ "product_card_bg": {
47
+ "type": "string",
48
+ "default": "{{brand.celadon}}",
49
+ "label": "Product card background tint"
50
+ },
51
+ "benefits_heading": {
52
+ "type": "string",
53
+ "default": "What better support looks like",
54
+ "label": "Benefits heading"
55
+ },
56
+ "subhead": {
57
+ "type": "string",
58
+ "default": "Support that helps you feel better over time",
59
+ "label": "Sub-headline"
60
+ },
61
+ "cta_label": {
62
+ "type": "string",
63
+ "default": "Shop the collection",
64
+ "label": "CTA button label"
65
+ },
66
+ "layout": {
67
+ "type": "string",
68
+ "default": "image-left",
69
+ "label": "Layout: image-left or image-right"
70
+ },
71
+ "bg_band": {
72
+ "type": "string",
73
+ "default": "white",
74
+ "label": "Background band: white, oat, celadon-tint"
75
+ }
76
+ }
77
+ },
78
+ "lineage": {
79
+ "extracted_from": "https://home.medvi.org/",
80
+ "scrape_path": "_clients/capital-v/lushi/research/medvi-reference/site-scrape/",
81
+ "framer_label": "Cards & Copy"
82
+ }
83
+ }
@@ -0,0 +1,355 @@
1
+ {%- comment -%}
2
+ Runwell collection-block-medvi.
3
+
4
+ Duplex category section adapted from medvi.org. One side: product hero
5
+ card on a tinted background, with a benefits checklist below. Other side:
6
+ eyebrow + split-color headline + 2 lifestyle photos + sub + body + CTA.
7
+ Sides flip per instance via the `layout` setting.
8
+
9
+ Lineage: extracted from home.medvi.org (Framer label "Cards & Copy"),
10
+ generalised to Runwell brand tokens. See module README for details.
11
+ {%- endcomment -%}
12
+
13
+ {{ 'runwell-collection-block-medvi.css' | asset_url | stylesheet_tag }}
14
+
15
+ {%- liquid
16
+ assign layout = section.settings.layout | default: 'image-left'
17
+ assign bg_band = section.settings.bg_band | default: 'white'
18
+ assign accent_color = section.settings.headline_accent_color | default: 'var(--runwell-primary)'
19
+ assign product_card_bg = section.settings.product_card_bg | default: 'var(--runwell-celadon)'
20
+ -%}
21
+
22
+ <section
23
+ class="runwell-collection-block-medvi runwell-collection-block-medvi--{{ layout }} runwell-collection-block-medvi--bg-{{ bg_band }}"
24
+ >
25
+ <div class="runwell-collection-block-medvi__inner">
26
+
27
+ <div class="runwell-collection-block-medvi__product-side">
28
+ {%- if section.settings.show_product_card -%}
29
+ <div
30
+ class="runwell-collection-block-medvi__product-card"
31
+ style="background: {{ product_card_bg }};"
32
+ >
33
+ {%- if section.settings.product_image != blank -%}
34
+ <img
35
+ src="{{ section.settings.product_image | image_url: width: 800 }}"
36
+ alt="{{ section.settings.product_image.alt | default: section.settings.headline_pre | escape }}"
37
+ width="{{ section.settings.product_image.width }}"
38
+ height="{{ section.settings.product_image.height }}"
39
+ loading="lazy"
40
+ class="runwell-collection-block-medvi__product-image"
41
+ >
42
+ {%- elsif section.settings.product_image_asset != blank -%}
43
+ <img
44
+ src="{{ section.settings.product_image_asset | asset_url }}"
45
+ alt="{{ section.settings.headline_pre | escape }}"
46
+ width="800"
47
+ height="600"
48
+ loading="lazy"
49
+ class="runwell-collection-block-medvi__product-image"
50
+ >
51
+ {%- endif -%}
52
+ </div>
53
+ {%- endif -%}
54
+
55
+ {%- assign benefits_blocks = section.blocks | where: 'type', 'benefit' -%}
56
+ {%- if benefits_blocks.size > 0 -%}
57
+ <div class="runwell-collection-block-medvi__benefits">
58
+ {%- if section.settings.benefits_heading != blank -%}
59
+ <p class="runwell-collection-block-medvi__benefits-heading">
60
+ {{ section.settings.benefits_heading }}
61
+ </p>
62
+ {%- endif -%}
63
+ <ul class="runwell-collection-block-medvi__benefits-list">
64
+ {%- for block in benefits_blocks -%}
65
+ <li class="runwell-collection-block-medvi__benefit" {{ block.shopify_attributes }}>
66
+ <span class="runwell-collection-block-medvi__check" aria-hidden="true">
67
+ <svg viewBox="0 0 24 24" width="14" height="14" fill="none">
68
+ <path d="M5 12.5l4.5 4.5L19 7" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"/>
69
+ </svg>
70
+ </span>
71
+ <span class="runwell-collection-block-medvi__benefit-text">{{ block.settings.text }}</span>
72
+ </li>
73
+ {%- endfor -%}
74
+ </ul>
75
+ </div>
76
+ {%- endif -%}
77
+ </div>
78
+
79
+ <div class="runwell-collection-block-medvi__copy-side">
80
+ {%- if section.settings.eyebrow != blank -%}
81
+ <p class="runwell-collection-block-medvi__eyebrow">{{ section.settings.eyebrow }}</p>
82
+ {%- endif -%}
83
+
84
+ {%- liquid
85
+ assign h_pre = section.settings.headline_pre
86
+ assign h_mid = section.settings.headline_mid
87
+ assign h_post = section.settings.headline_post
88
+ assign has_mid = false
89
+ if h_mid != blank
90
+ assign has_mid = true
91
+ endif
92
+ -%}
93
+ {%- if h_pre != blank or h_mid != blank or h_post != blank -%}
94
+ <h2 class="runwell-collection-block-medvi__headline">
95
+ {%- if h_pre != blank -%}
96
+ <span class="runwell-collection-block-medvi__headline-part runwell-collection-block-medvi__headline-pre">{{ h_pre }}</span>
97
+ {%- if h_mid != blank or h_post != blank -%}{{ ' ' }}{%- endif -%}
98
+ {%- endif -%}
99
+ {%- if has_mid -%}
100
+ <span class="runwell-collection-block-medvi__headline-part runwell-collection-block-medvi__headline-accent" style="color: {{ accent_color }};">{{ h_mid }}</span>
101
+ {%- if h_post != blank -%}{{ ' ' }}<span class="runwell-collection-block-medvi__headline-part runwell-collection-block-medvi__headline-post">{{ h_post }}</span>{%- endif -%}
102
+ {%- elsif h_post != blank -%}
103
+ <span class="runwell-collection-block-medvi__headline-part runwell-collection-block-medvi__headline-accent" style="color: {{ accent_color }};">{{ h_post }}</span>
104
+ {%- endif -%}
105
+ </h2>
106
+ {%- endif -%}
107
+
108
+ <div class="runwell-collection-block-medvi__photos">
109
+ {%- if section.settings.lifestyle_image_1 != blank -%}
110
+ <figure class="runwell-collection-block-medvi__photo">
111
+ <img
112
+ src="{{ section.settings.lifestyle_image_1 | image_url: width: 800 }}"
113
+ alt="{{ section.settings.lifestyle_image_1.alt | default: '' | escape }}"
114
+ width="{{ section.settings.lifestyle_image_1.width }}"
115
+ height="{{ section.settings.lifestyle_image_1.height }}"
116
+ loading="lazy"
117
+ >
118
+ </figure>
119
+ {%- elsif section.settings.lifestyle_image_1_asset != blank -%}
120
+ <figure class="runwell-collection-block-medvi__photo">
121
+ <img
122
+ src="{{ section.settings.lifestyle_image_1_asset | asset_url }}"
123
+ alt=""
124
+ width="800"
125
+ height="1000"
126
+ loading="lazy"
127
+ >
128
+ </figure>
129
+ {%- endif -%}
130
+ {%- if section.settings.lifestyle_image_2 != blank -%}
131
+ <figure class="runwell-collection-block-medvi__photo">
132
+ <img
133
+ src="{{ section.settings.lifestyle_image_2 | image_url: width: 800 }}"
134
+ alt="{{ section.settings.lifestyle_image_2.alt | default: '' | escape }}"
135
+ width="{{ section.settings.lifestyle_image_2.width }}"
136
+ height="{{ section.settings.lifestyle_image_2.height }}"
137
+ loading="lazy"
138
+ >
139
+ </figure>
140
+ {%- elsif section.settings.lifestyle_image_2_asset != blank -%}
141
+ <figure class="runwell-collection-block-medvi__photo">
142
+ <img
143
+ src="{{ section.settings.lifestyle_image_2_asset | asset_url }}"
144
+ alt=""
145
+ width="800"
146
+ height="1000"
147
+ loading="lazy"
148
+ >
149
+ </figure>
150
+ {%- endif -%}
151
+ </div>
152
+
153
+ {%- if section.settings.subhead != blank -%}
154
+ <p class="runwell-collection-block-medvi__subhead">{{ section.settings.subhead }}</p>
155
+ {%- endif -%}
156
+
157
+ {%- if section.settings.body != blank -%}
158
+ <div class="runwell-collection-block-medvi__body">{{ section.settings.body }}</div>
159
+ {%- endif -%}
160
+
161
+ {%- if section.settings.cta_label != blank -%}
162
+ <a
163
+ href="{{ section.settings.cta_link | default: '#' }}"
164
+ class="runwell-collection-block-medvi__cta"
165
+ >
166
+ {{ section.settings.cta_label }}
167
+ </a>
168
+ {%- endif -%}
169
+ </div>
170
+
171
+ </div>
172
+ </section>
173
+
174
+ {% schema %}
175
+ {
176
+ "name": "Collection block (medvi)",
177
+ "tag": "section",
178
+ "class": "section-runwell-collection-block-medvi",
179
+ "settings": [
180
+ {
181
+ "type": "header",
182
+ "content": "Headline"
183
+ },
184
+ {
185
+ "type": "text",
186
+ "id": "eyebrow",
187
+ "label": "Eyebrow (tracked small caps)",
188
+ "default": "PURPOSE-DRIVEN SUPPLEMENTATION"
189
+ },
190
+ {
191
+ "type": "text",
192
+ "id": "headline_pre",
193
+ "label": "Headline (first part, plain)",
194
+ "default": "Supplements with the"
195
+ },
196
+ {
197
+ "type": "text",
198
+ "id": "headline_mid",
199
+ "label": "Headline (middle part, accent)",
200
+ "info": "Optional. When set, this is the accent-colored part and `headline_post` renders plain after it. Leave blank for a 2-part split (pre + post-accent)."
201
+ },
202
+ {
203
+ "type": "text",
204
+ "id": "headline_post",
205
+ "label": "Headline (third part)",
206
+ "info": "Plain when middle is set; accent when middle is blank.",
207
+ "default": "real results"
208
+ },
209
+ {
210
+ "type": "color",
211
+ "id": "headline_accent_color",
212
+ "label": "Headline accent color",
213
+ "default": "#0B3D38"
214
+ },
215
+ {
216
+ "type": "header",
217
+ "content": "Product hero card"
218
+ },
219
+ {
220
+ "type": "checkbox",
221
+ "id": "show_product_card",
222
+ "label": "Show product hero card",
223
+ "default": true
224
+ },
225
+ {
226
+ "type": "image_picker",
227
+ "id": "product_image",
228
+ "label": "Product image (uploaded)",
229
+ "info": "PNG with transparent background recommended. Falls through to bundled asset filename below."
230
+ },
231
+ {
232
+ "type": "text",
233
+ "id": "product_image_asset",
234
+ "label": "Product image (bundled asset filename)",
235
+ "info": "e.g. runwell-jar-hero.png"
236
+ },
237
+ {
238
+ "type": "color",
239
+ "id": "product_card_bg",
240
+ "label": "Product card background",
241
+ "default": "#ADDDBD"
242
+ },
243
+ {
244
+ "type": "text",
245
+ "id": "benefits_heading",
246
+ "label": "Benefits heading",
247
+ "default": "What better support looks like"
248
+ },
249
+ {
250
+ "type": "header",
251
+ "content": "Lifestyle photos"
252
+ },
253
+ {
254
+ "type": "image_picker",
255
+ "id": "lifestyle_image_1",
256
+ "label": "Lifestyle photo 1",
257
+ "info": "3:4 portrait crop recommended. Falls through to bundled asset filename below."
258
+ },
259
+ {
260
+ "type": "text",
261
+ "id": "lifestyle_image_1_asset",
262
+ "label": "Lifestyle photo 1 (asset filename fallback)"
263
+ },
264
+ {
265
+ "type": "image_picker",
266
+ "id": "lifestyle_image_2",
267
+ "label": "Lifestyle photo 2"
268
+ },
269
+ {
270
+ "type": "text",
271
+ "id": "lifestyle_image_2_asset",
272
+ "label": "Lifestyle photo 2 (asset filename fallback)"
273
+ },
274
+ {
275
+ "type": "header",
276
+ "content": "Body copy"
277
+ },
278
+ {
279
+ "type": "text",
280
+ "id": "subhead",
281
+ "label": "Sub-headline",
282
+ "default": "Support that helps you feel better over time"
283
+ },
284
+ {
285
+ "type": "richtext",
286
+ "id": "body",
287
+ "label": "Body",
288
+ "default": "<p>Doctor-designed formulas made with quality ingredients and evidence-based dosing to support your body day after day.</p>"
289
+ },
290
+ {
291
+ "type": "text",
292
+ "id": "cta_label",
293
+ "label": "CTA label",
294
+ "default": "Shop the collection"
295
+ },
296
+ {
297
+ "type": "url",
298
+ "id": "cta_link",
299
+ "label": "CTA link"
300
+ },
301
+ {
302
+ "type": "header",
303
+ "content": "Layout"
304
+ },
305
+ {
306
+ "type": "select",
307
+ "id": "layout",
308
+ "label": "Layout",
309
+ "options": [
310
+ { "value": "image-left", "label": "Product side on left" },
311
+ { "value": "image-right", "label": "Product side on right" }
312
+ ],
313
+ "default": "image-left"
314
+ },
315
+ {
316
+ "type": "select",
317
+ "id": "bg_band",
318
+ "label": "Background band",
319
+ "options": [
320
+ { "value": "white", "label": "White" },
321
+ { "value": "oat", "label": "Oat" },
322
+ { "value": "celadon-tint", "label": "Celadon tint" }
323
+ ],
324
+ "default": "white"
325
+ }
326
+ ],
327
+ "blocks": [
328
+ {
329
+ "type": "benefit",
330
+ "name": "Benefit",
331
+ "limit": 5,
332
+ "settings": [
333
+ {
334
+ "type": "text",
335
+ "id": "text",
336
+ "label": "Benefit text",
337
+ "default": "Clean, transparent ingredients"
338
+ }
339
+ ]
340
+ }
341
+ ],
342
+ "presets": [
343
+ {
344
+ "name": "Runwell collection-block-medvi",
345
+ "blocks": [
346
+ { "type": "benefit", "settings": { "text": "Clean, transparent ingredients" } },
347
+ { "type": "benefit", "settings": { "text": "Built to support daily health" } },
348
+ { "type": "benefit", "settings": { "text": "Evidence-based dosing" } },
349
+ { "type": "benefit", "settings": { "text": "Doctor-formulated blends" } },
350
+ { "type": "benefit", "settings": { "text": "High-quality sourcing" } }
351
+ ]
352
+ }
353
+ ]
354
+ }
355
+ {% endschema %}