@runwell/shopify-toolkit 0.6.0 → 0.8.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.
- package/modules/INDEX.md +35 -9
- package/modules/comparison-table/variants/feature-columns/sections/runwell-comparison-table.liquid +3 -3
- package/modules/delivery-estimate/snippets/runwell-delivery-estimate.liquid +1 -1
- package/modules/editorial-block/sections/runwell-editorial-block.liquid +3 -3
- package/modules/editorial-hero/module.json +36 -53
- package/modules/editorial-hero/variants/hero-with-card/assets/runwell-editorial-hero.css +108 -0
- package/modules/editorial-hero/variants/hero-with-card/sections/runwell-editorial-hero.liquid +91 -0
- package/modules/editorial-hero/{sections → variants/video-bg/sections}/runwell-video-hero.liquid +3 -3
- package/modules/exit-intent/sections/runwell-exit-intent.liquid +3 -3
- package/modules/faq/sections/runwell-faq.liquid +5 -5
- package/modules/how-it-works/sections/runwell-how-it-works.liquid +5 -5
- package/modules/inventory-urgency/snippets/runwell-inventory-urgency.liquid +1 -1
- package/modules/pdp-ingredients/sections/runwell-ingredients.liquid +14 -6
- package/modules/pdp-journal-link/sections/runwell-pdp-journal.liquid +18 -9
- package/modules/pdp-trust-checks/sections/runwell-pdp-trust.liquid +4 -4
- package/modules/press-bar/sections/runwell-press-bar.liquid +3 -3
- package/modules/recently-viewed/sections/runwell-recently-viewed.liquid +3 -3
- package/modules/reviews/sections/runwell-pdp-reviews.liquid +15 -9
- package/modules/risk-reversal/sections/runwell-risk-reversal.liquid +3 -3
- package/modules/scrolling-ticker/assets/runwell-scrolling-ticker.css +51 -0
- package/modules/scrolling-ticker/module.json +13 -0
- package/modules/scrolling-ticker/sections/runwell-scrolling-ticker.liquid +82 -0
- package/modules/shipping-bar/sections/runwell-shipping-bar.liquid +3 -3
- package/modules/social-proof-banner/assets/runwell-social-proof-banner.css +30 -0
- package/modules/social-proof-banner/module.json +13 -0
- package/modules/social-proof-banner/sections/runwell-social-proof-banner.liquid +66 -0
- package/modules/stats-bar/assets/runwell-stats-bar.css +49 -0
- package/modules/stats-bar/module.json +13 -0
- package/modules/stats-bar/sections/runwell-stats-bar.liquid +87 -0
- package/modules/sticky-atc/sections/runwell-pdp-sticky.liquid +3 -3
- package/modules/testimonials/module.json +24 -26
- package/modules/testimonials/variants/carousel-ugc/assets/runwell-testimonials.css +169 -0
- package/modules/testimonials/variants/carousel-ugc/sections/runwell-testimonials.liquid +148 -0
- package/modules/testimonials/{sections → variants/grid-quotes/sections}/runwell-testimonials.liquid +3 -3
- package/modules/trust-badges/sections/runwell-trust-badges.liquid +4 -4
- package/package.json +1 -1
package/modules/INDEX.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Auto-generated by `scripts/generate-index.mjs`. Do not edit by hand.
|
|
4
4
|
Skills (shopify-storefront, shopify-cro, shopify-cli-ops, shopify-admin-browser) grep this file before writing custom Liquid.
|
|
5
5
|
|
|
6
|
-
Total modules:
|
|
6
|
+
Total modules: 34.
|
|
7
7
|
|
|
8
8
|
## By category
|
|
9
9
|
|
|
@@ -11,7 +11,7 @@ Total modules: 31.
|
|
|
11
11
|
- **conversion**: cart-cross-sell, cart-freeship-progress, cart-usps, exit-intent, gift-with-purchase, post-purchase-upsell, quick-view, risk-reversal, shipping-bar, sticky-atc
|
|
12
12
|
- **customer**: loyalty-tiers, wishlist
|
|
13
13
|
- **pdp**: comparison-table, delivery-estimate, inventory-urgency, pdp-ingredients, pdp-journal-link, pdp-trust-checks, recently-viewed
|
|
14
|
-
- **social-proof**: press-bar, product-badges, reviews, testimonials, trust-badges
|
|
14
|
+
- **social-proof**: press-bar, product-badges, reviews, scrolling-ticker, social-proof-banner, stats-bar, testimonials, trust-badges
|
|
15
15
|
- **storefront**: editorial-block, editorial-hero, faq, how-it-works
|
|
16
16
|
|
|
17
17
|
## Modules
|
|
@@ -25,7 +25,7 @@ Total modules: 31.
|
|
|
25
25
|
| `comparison-table` | pdp | app-driven comparison widgets | | eyebrow, heading, lede, background_color, text_color | feature-columns, feature-rows | (none) |
|
|
26
26
|
| `delivery-estimate` | pdp | (native build) | snippets:1 | (none) | (none) | (none) |
|
|
27
27
|
| `editorial-block` | storefront | (native build) | sections:1 | eyebrow, heading, lede, background_color, text_color | (none) | (none) |
|
|
28
|
-
| `editorial-hero` | storefront |
|
|
28
|
+
| `editorial-hero` | storefront | Dawn's image-banner / video-banner | | eyebrow, heading, subheading | video-bg, hero-with-card | (none) |
|
|
29
29
|
| `exit-intent` | conversion | (native build) | sections:1 assets:1 | eyebrow, heading, lede | (none) | (none) |
|
|
30
30
|
| `faq` | storefront | (native build) | sections:1 | eyebrow, heading, background_color, text_color | (none) | (none) |
|
|
31
31
|
| `gift-with-purchase` | conversion | (native build) | snippets:1 assets:1 | threshold_cents, gift_handle, unlocked_message, locked_message_suffix | (none) | create-gift-product + create-gift-discount |
|
|
@@ -43,10 +43,13 @@ Total modules: 31.
|
|
|
43
43
|
| `recently-viewed` | pdp | (native build) | sections:1 assets:1 | eyebrow, heading, background_color | (none) | (none) |
|
|
44
44
|
| `reviews` | social-proof | (native build) | sections:1 | heading | (none) | (none) |
|
|
45
45
|
| `risk-reversal` | conversion | (native build) | sections:1 | icon, heading, body, link_label, link_url, background_color, text_color | (none) | (none) |
|
|
46
|
+
| `scrolling-ticker` | social-proof | announcement-bar / scrolling-text apps | sections:1 assets:1 | (none) | (none) | (none) |
|
|
46
47
|
| `shipping-bar` | conversion | (native build) | sections:1 | threshold_cents, message_below, message_qualified, message_default, background_color, text_color | (none) | (none) |
|
|
48
|
+
| `social-proof-banner` | social-proof | fixed-text social-proof apps | sections:1 assets:1 | (none) | (none) | (none) |
|
|
49
|
+
| `stats-bar` | social-proof | app-driven stat counters | sections:1 assets:1 | (none) | (none) | (none) |
|
|
47
50
|
| `sticky-atc` | conversion | Sticky Add To Cart Booster Pro and similar | sections:1 assets:1 | (none) | (none) | (none) |
|
|
48
51
|
| `subscriptions` | catalog | Recharge / Bold Subscriptions / Appstle for the storefront display layer; subscription management still uses Shopify's native customer account | snippets:1 | one_time_label, subscribe_label, fineprint | (none) | install-shopify-subscriptions + create-selling-plan-group + enable-customer-account-tab |
|
|
49
|
-
| `testimonials` | social-proof |
|
|
52
|
+
| `testimonials` | social-proof | app-driven review widgets at the social-proof display layer | | eyebrow, heading, background_color, text_color | grid-quotes, carousel-ugc | (none) |
|
|
50
53
|
| `trust-badges` | social-proof | (native build) | sections:1 | background_color, text_color | (none) | (none) |
|
|
51
54
|
| `wishlist` | customer | Wishlist Plus, Wishlist King, Globo Wishlist | sections:1 snippets:1 assets:1 templates:1 | max_items | (none) | create-wishlist-page |
|
|
52
55
|
|
|
@@ -107,9 +110,10 @@ Total modules: 31.
|
|
|
107
110
|
### editorial-hero
|
|
108
111
|
|
|
109
112
|
- Category: storefront
|
|
110
|
-
-
|
|
111
|
-
-
|
|
112
|
-
- Config: eyebrow, heading, subheading
|
|
113
|
+
- Replaces: Dawn's image-banner / video-banner
|
|
114
|
+
- What: Editorial hero section.
|
|
115
|
+
- Config: eyebrow, heading, subheading
|
|
116
|
+
- Variants: video-bg, hero-with-card
|
|
113
117
|
|
|
114
118
|
### exit-intent
|
|
115
119
|
|
|
@@ -233,6 +237,13 @@ Total modules: 31.
|
|
|
233
237
|
- Files: sections:1
|
|
234
238
|
- Config: icon, heading, body, link_label, link_url, background_color, text_color
|
|
235
239
|
|
|
240
|
+
### scrolling-ticker
|
|
241
|
+
|
|
242
|
+
- Category: social-proof
|
|
243
|
+
- Replaces: announcement-bar / scrolling-text apps
|
|
244
|
+
- What: Top-of-page horizontally-scrolling promotional ticker (free shipping, sale messaging, FOMO copy).
|
|
245
|
+
- Files: sections:1 assets:1
|
|
246
|
+
|
|
236
247
|
### shipping-bar
|
|
237
248
|
|
|
238
249
|
- Category: conversion
|
|
@@ -240,6 +251,20 @@ Total modules: 31.
|
|
|
240
251
|
- Files: sections:1
|
|
241
252
|
- Config: threshold_cents, message_below, message_qualified, message_default, background_color, text_color
|
|
242
253
|
|
|
254
|
+
### social-proof-banner
|
|
255
|
+
|
|
256
|
+
- Category: social-proof
|
|
257
|
+
- Replaces: fixed-text social-proof apps
|
|
258
|
+
- What: Single-line social-proof banner (e.g.
|
|
259
|
+
- Files: sections:1 assets:1
|
|
260
|
+
|
|
261
|
+
### stats-bar
|
|
262
|
+
|
|
263
|
+
- Category: social-proof
|
|
264
|
+
- Replaces: app-driven stat counters
|
|
265
|
+
- What: Three-up (or N-up) stats row with big number + supporting label per block.
|
|
266
|
+
- Files: sections:1 assets:1
|
|
267
|
+
|
|
243
268
|
### sticky-atc
|
|
244
269
|
|
|
245
270
|
- Category: conversion
|
|
@@ -259,9 +284,10 @@ Total modules: 31.
|
|
|
259
284
|
### testimonials
|
|
260
285
|
|
|
261
286
|
- Category: social-proof
|
|
262
|
-
-
|
|
263
|
-
-
|
|
287
|
+
- Replaces: app-driven review widgets at the social-proof display layer
|
|
288
|
+
- What: Customer testimonials section.
|
|
264
289
|
- Config: eyebrow, heading, background_color, text_color
|
|
290
|
+
- Variants: grid-quotes, carousel-ugc
|
|
265
291
|
|
|
266
292
|
### trust-badges
|
|
267
293
|
|
package/modules/comparison-table/variants/feature-columns/sections/runwell-comparison-table.liquid
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{%- comment -%}
|
|
2
|
-
|
|
2
|
+
Runwell product comparison table. Drops on PDP (or any template) to
|
|
3
3
|
compare attributes across Lushi products or against a competitor.
|
|
4
4
|
Editorial style, not a feature dump. Per CRO §5.2 (decision-aid for
|
|
5
5
|
high-trust niches).
|
|
@@ -84,7 +84,7 @@
|
|
|
84
84
|
|
|
85
85
|
{% schema %}
|
|
86
86
|
{
|
|
87
|
-
"name": "
|
|
87
|
+
"name": "Runwell comparison table",
|
|
88
88
|
"tag": "section",
|
|
89
89
|
"class": "section-runwell-comparison",
|
|
90
90
|
"settings": [
|
|
@@ -145,7 +145,7 @@
|
|
|
145
145
|
"max_blocks": 4,
|
|
146
146
|
"presets": [
|
|
147
147
|
{
|
|
148
|
-
"name": "
|
|
148
|
+
"name": "Runwell comparison table",
|
|
149
149
|
"blocks": [
|
|
150
150
|
{ "type": "column", "settings": { "column_title": "Lushi pick", "column_subtitle": "This product" } },
|
|
151
151
|
{ "type": "column", "settings": { "column_title": "Drugstore", "column_subtitle": "Average mass-market option" } },
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{%- comment -%}
|
|
2
|
-
|
|
2
|
+
Runwell delivery estimate. Renders a placeholder span filled by JS with
|
|
3
3
|
a date range based on cutoff time and standard transit. Native
|
|
4
4
|
replacement for the Estimated Delivery Date widget in Vitals etc.
|
|
5
5
|
{%- endcomment -%}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{%- comment -%}
|
|
2
|
-
|
|
2
|
+
Runwell editorial section: eyebrow + serif italic heading + lede + body.
|
|
3
3
|
Used for the homepage section flow (Approach, Press, Partnering equivalents).
|
|
4
4
|
{%- endcomment -%}
|
|
5
5
|
|
|
@@ -66,7 +66,7 @@
|
|
|
66
66
|
|
|
67
67
|
{% schema %}
|
|
68
68
|
{
|
|
69
|
-
"name": "
|
|
69
|
+
"name": "Runwell editorial block",
|
|
70
70
|
"tag": "section",
|
|
71
71
|
"class": "section-runwell-editorial",
|
|
72
72
|
"settings": [
|
|
@@ -143,7 +143,7 @@
|
|
|
143
143
|
],
|
|
144
144
|
"presets": [
|
|
145
145
|
{
|
|
146
|
-
"name": "
|
|
146
|
+
"name": "Runwell editorial block",
|
|
147
147
|
"blocks": [
|
|
148
148
|
{ "type": "card" },
|
|
149
149
|
{ "type": "card" },
|
|
@@ -1,61 +1,44 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "editorial-hero",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"category": "storefront",
|
|
5
|
-
"description": "
|
|
6
|
-
"
|
|
7
|
-
"sections": [
|
|
8
|
-
"sections/runwell-video-hero.liquid"
|
|
9
|
-
]
|
|
10
|
-
},
|
|
5
|
+
"description": "Editorial hero section. Two variants: video-bg (default) renders a full-bleed background video with eyebrow + heading + subhead + dual CTA, ideal for Lushi-style editorial brands; hero-with-card renders a background image with a centered text card (Hero with Card pattern), ideal for product-led brands. Replaces Dawn's image-banner / video-banner.",
|
|
6
|
+
"default_variant": "video-bg",
|
|
11
7
|
"config": {
|
|
12
8
|
"schema": {
|
|
13
|
-
"eyebrow": {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
"
|
|
26
|
-
"label": "
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
"type": "string",
|
|
30
|
-
"label": "
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
"
|
|
37
|
-
|
|
38
|
-
"
|
|
39
|
-
"
|
|
40
|
-
},
|
|
41
|
-
"
|
|
42
|
-
"type": "
|
|
43
|
-
"default": "Shop
|
|
44
|
-
"
|
|
45
|
-
},
|
|
46
|
-
"button_link_primary": {
|
|
47
|
-
"type": "string",
|
|
48
|
-
"label": "Primary button link"
|
|
49
|
-
},
|
|
50
|
-
"button_label_secondary": {
|
|
51
|
-
"type": "string",
|
|
52
|
-
"default": "Read the journal",
|
|
53
|
-
"label": "Secondary button label"
|
|
54
|
-
},
|
|
55
|
-
"button_link_secondary": {
|
|
56
|
-
"type": "string",
|
|
57
|
-
"label": "Secondary button link"
|
|
9
|
+
"eyebrow": { "type": "string", "default": "Wellness, curated", "label": "Eyebrow text" },
|
|
10
|
+
"heading": { "type": "string", "default": "Glow from within.", "label": "Headline" },
|
|
11
|
+
"subheading": { "type": "string", "default": "Lushi is a modern wellness brand offering curated supplements, skincare, and rituals for everyday health.", "label": "Subheading" }
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"variants": {
|
|
15
|
+
"video-bg": {
|
|
16
|
+
"description": "Full-bleed background video (mp4) with poster fallback, eyebrow + heading + subhead + primary/secondary CTAs. Section type: runwell-video-hero.",
|
|
17
|
+
"files": {
|
|
18
|
+
"sections": ["variants/video-bg/sections/runwell-video-hero.liquid"]
|
|
19
|
+
},
|
|
20
|
+
"config_extra": {
|
|
21
|
+
"video_url": { "type": "string", "label": "Background video URL (mp4)" },
|
|
22
|
+
"poster_image": { "type": "string", "label": "Poster image (and fallback)" },
|
|
23
|
+
"fallback_asset": { "type": "string", "label": "Bundled fallback asset filename (e.g. lushi-hero-bg.jpg)" },
|
|
24
|
+
"min_height": { "type": "number", "default": 100, "label": "Hero min-height (vh)" },
|
|
25
|
+
"button_label_primary": { "type": "string", "default": "Shop wellness", "label": "Primary button label" },
|
|
26
|
+
"button_link_primary": { "type": "string", "label": "Primary button link" },
|
|
27
|
+
"button_label_secondary": { "type": "string", "default": "Read the journal", "label": "Secondary button label" },
|
|
28
|
+
"button_link_secondary": { "type": "string", "label": "Secondary button link" }
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
"hero-with-card": {
|
|
32
|
+
"description": "Background image (image_picker) with a centered text card overlay. Single CTA. Image overlay opacity is configurable. Section type: runwell-editorial-hero. Ported from Lusha bespoke (guabrasha-store/sections/hero-with-card.liquid).",
|
|
33
|
+
"files": {
|
|
34
|
+
"sections": ["variants/hero-with-card/sections/runwell-editorial-hero.liquid"],
|
|
35
|
+
"assets": ["variants/hero-with-card/assets/runwell-editorial-hero.css"]
|
|
36
|
+
},
|
|
37
|
+
"config_extra": {
|
|
38
|
+
"overlay_opacity": { "type": "number", "default": 20, "label": "Image overlay opacity (%)" },
|
|
39
|
+
"button_label": { "type": "string", "default": "Shop now", "label": "Button label" },
|
|
40
|
+
"button_link": { "type": "string", "label": "Button link" }
|
|
58
41
|
}
|
|
59
42
|
}
|
|
60
43
|
}
|
|
61
|
-
}
|
|
44
|
+
}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
.runwell-editorial-hero--card {
|
|
2
|
+
position: relative;
|
|
3
|
+
min-height: 85vh;
|
|
4
|
+
display: flex;
|
|
5
|
+
align-items: center;
|
|
6
|
+
justify-content: center;
|
|
7
|
+
overflow: hidden;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
.runwell-editorial-hero__media {
|
|
11
|
+
position: absolute;
|
|
12
|
+
inset: 0;
|
|
13
|
+
z-index: 0;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
.runwell-editorial-hero__image {
|
|
17
|
+
width: 100%;
|
|
18
|
+
height: 100%;
|
|
19
|
+
object-fit: cover;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.runwell-editorial-hero__placeholder {
|
|
23
|
+
width: 100%;
|
|
24
|
+
height: 100%;
|
|
25
|
+
background: #E8D5C4;
|
|
26
|
+
display: flex;
|
|
27
|
+
align-items: center;
|
|
28
|
+
justify-content: center;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
.runwell-editorial-hero__placeholder svg {
|
|
32
|
+
width: 60%;
|
|
33
|
+
max-width: 600px;
|
|
34
|
+
opacity: 0.3;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
.runwell-editorial-hero__overlay {
|
|
38
|
+
position: absolute;
|
|
39
|
+
inset: 0;
|
|
40
|
+
background: #000;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
.runwell-editorial-hero__content-wrapper {
|
|
44
|
+
position: relative;
|
|
45
|
+
z-index: 1;
|
|
46
|
+
padding: 2rem;
|
|
47
|
+
width: 100%;
|
|
48
|
+
display: flex;
|
|
49
|
+
justify-content: center;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
.runwell-editorial-hero__card {
|
|
53
|
+
background: rgba(255, 255, 255, 0.95);
|
|
54
|
+
backdrop-filter: blur(12px);
|
|
55
|
+
border-radius: 20px;
|
|
56
|
+
padding: 3.6rem 4rem;
|
|
57
|
+
max-width: 560px;
|
|
58
|
+
text-align: center;
|
|
59
|
+
box-shadow: 0 8px 40px rgba(0, 0, 0, 0.08);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
.runwell-editorial-hero__heading {
|
|
63
|
+
margin-bottom: 1.2rem;
|
|
64
|
+
color: #2A2622;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
.runwell-editorial-hero__subheading {
|
|
68
|
+
font-size: 1.5rem;
|
|
69
|
+
color: #6B6259;
|
|
70
|
+
line-height: 1.6;
|
|
71
|
+
margin-bottom: 2rem;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
.runwell-editorial-hero__button {
|
|
75
|
+
min-width: 200px;
|
|
76
|
+
font-size: 1.5rem;
|
|
77
|
+
padding: 1.4rem 3.2rem;
|
|
78
|
+
background: #2A2622;
|
|
79
|
+
color: #fff;
|
|
80
|
+
border: none;
|
|
81
|
+
border-radius: 8px;
|
|
82
|
+
font-weight: 600;
|
|
83
|
+
letter-spacing: 0.02em;
|
|
84
|
+
cursor: pointer;
|
|
85
|
+
text-decoration: none;
|
|
86
|
+
display: inline-block;
|
|
87
|
+
transition: background 0.2s;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
.runwell-editorial-hero__button:hover {
|
|
91
|
+
background: #3F5B4C;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
@media screen and (max-width: 749px) {
|
|
95
|
+
.runwell-editorial-hero--card {
|
|
96
|
+
min-height: 70vh;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
.runwell-editorial-hero__card {
|
|
100
|
+
padding: 2.4rem 2rem;
|
|
101
|
+
margin: 0 1rem;
|
|
102
|
+
border-radius: 16px;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
.runwell-editorial-hero__button {
|
|
106
|
+
width: 100%;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
{{ 'runwell-editorial-hero.css' | asset_url | stylesheet_tag }}
|
|
2
|
+
|
|
3
|
+
<div class="runwell-editorial-hero runwell-editorial-hero--card color-{{ section.settings.color_scheme }}">
|
|
4
|
+
<div class="runwell-editorial-hero__media">
|
|
5
|
+
{% if section.settings.image != blank %}
|
|
6
|
+
{{ section.settings.image | image_url: width: 1920 | image_tag: loading: 'eager', class: 'runwell-editorial-hero__image', sizes: '100vw' }}
|
|
7
|
+
{% else %}
|
|
8
|
+
<div class="runwell-editorial-hero__placeholder">{{ 'lifestyle-1' | placeholder_svg_tag }}</div>
|
|
9
|
+
{% endif %}
|
|
10
|
+
<div class="runwell-editorial-hero__overlay" style="opacity: {{ section.settings.overlay_opacity | divided_by: 100.0 }};"></div>
|
|
11
|
+
</div>
|
|
12
|
+
|
|
13
|
+
<div class="runwell-editorial-hero__content-wrapper">
|
|
14
|
+
<div class="runwell-editorial-hero__card color-scheme-1">
|
|
15
|
+
{% if section.settings.heading != blank %}
|
|
16
|
+
<h1 class="runwell-editorial-hero__heading {{ section.settings.heading_size }}">{{ section.settings.heading }}</h1>
|
|
17
|
+
{% endif %}
|
|
18
|
+
{% if section.settings.subheading != blank %}
|
|
19
|
+
<p class="runwell-editorial-hero__subheading">{{ section.settings.subheading }}</p>
|
|
20
|
+
{% endif %}
|
|
21
|
+
{% if section.settings.button_label != blank %}
|
|
22
|
+
<a href="{{ section.settings.button_link }}" class="button runwell-editorial-hero__button">{{ section.settings.button_label }}</a>
|
|
23
|
+
{% endif %}
|
|
24
|
+
</div>
|
|
25
|
+
</div>
|
|
26
|
+
</div>
|
|
27
|
+
|
|
28
|
+
{% schema %}
|
|
29
|
+
{
|
|
30
|
+
"name": "Editorial hero (card)",
|
|
31
|
+
"tag": "section",
|
|
32
|
+
"class": "section-runwell-editorial-hero",
|
|
33
|
+
"settings": [
|
|
34
|
+
{
|
|
35
|
+
"type": "image_picker",
|
|
36
|
+
"id": "image",
|
|
37
|
+
"label": "Background image"
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"type": "range",
|
|
41
|
+
"id": "overlay_opacity",
|
|
42
|
+
"label": "Image overlay opacity",
|
|
43
|
+
"min": 0, "max": 80, "step": 5, "default": 20, "unit": "%"
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"type": "text",
|
|
47
|
+
"id": "heading",
|
|
48
|
+
"label": "Heading",
|
|
49
|
+
"default": "A Moment of Care, Every Day"
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"type": "select",
|
|
53
|
+
"id": "heading_size",
|
|
54
|
+
"label": "Heading size",
|
|
55
|
+
"options": [
|
|
56
|
+
{ "value": "h1", "label": "Large" },
|
|
57
|
+
{ "value": "h0", "label": "Extra large" }
|
|
58
|
+
],
|
|
59
|
+
"default": "h1"
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"type": "text",
|
|
63
|
+
"id": "subheading",
|
|
64
|
+
"label": "Subheading",
|
|
65
|
+
"default": "Discover gentle sculpting tools designed for everyday comfort; a thoughtful addition to your morning ritual."
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"type": "text",
|
|
69
|
+
"id": "button_label",
|
|
70
|
+
"label": "Button label",
|
|
71
|
+
"default": "Shop Now"
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"type": "url",
|
|
75
|
+
"id": "button_link",
|
|
76
|
+
"label": "Button link"
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
"type": "color_scheme",
|
|
80
|
+
"id": "color_scheme",
|
|
81
|
+
"label": "Color scheme",
|
|
82
|
+
"default": "scheme-1"
|
|
83
|
+
}
|
|
84
|
+
],
|
|
85
|
+
"presets": [
|
|
86
|
+
{
|
|
87
|
+
"name": "Editorial hero (card)"
|
|
88
|
+
}
|
|
89
|
+
]
|
|
90
|
+
}
|
|
91
|
+
{% endschema %}
|
package/modules/editorial-hero/{sections → variants/video-bg/sections}/runwell-video-hero.liquid
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{%- comment -%}
|
|
2
|
-
|
|
2
|
+
Runwell video hero. Full-bleed background video with editorial copy
|
|
3
3
|
bottom-left. Mirrors the v1 lushi.co Hero pattern but pivots messaging
|
|
4
4
|
to general health and wellness.
|
|
5
5
|
{%- endcomment -%}
|
|
@@ -76,7 +76,7 @@
|
|
|
76
76
|
|
|
77
77
|
{% schema %}
|
|
78
78
|
{
|
|
79
|
-
"name": "
|
|
79
|
+
"name": "Runwell video hero",
|
|
80
80
|
"tag": "section",
|
|
81
81
|
"class": "section-runwell-video-hero",
|
|
82
82
|
"settings": [
|
|
@@ -150,7 +150,7 @@
|
|
|
150
150
|
],
|
|
151
151
|
"presets": [
|
|
152
152
|
{
|
|
153
|
-
"name": "
|
|
153
|
+
"name": "Runwell video hero"
|
|
154
154
|
}
|
|
155
155
|
]
|
|
156
156
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{%- comment -%}
|
|
2
|
-
|
|
2
|
+
Runwell exit-intent newsletter popup. Native replacement for Privy /
|
|
3
3
|
Justuno / Uno popups. Triggers on mouseleave at top of viewport
|
|
4
4
|
(desktop) or after 30 seconds (mobile fallback). Suppresses with a
|
|
5
5
|
localStorage cookie for 30 days after dismiss or sign-up.
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
|
|
34
34
|
{% schema %}
|
|
35
35
|
{
|
|
36
|
-
"name": "
|
|
36
|
+
"name": "Runwell exit popup",
|
|
37
37
|
"tag": "section",
|
|
38
38
|
"class": "section-runwell-exit",
|
|
39
39
|
"settings": [
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
{ "type": "textarea", "id": "lede", "label": "Lede", "default": "Join the journal and get the founder's take on what we picked, why we picked it, and which products to skip altogether." }
|
|
43
43
|
],
|
|
44
44
|
"presets": [
|
|
45
|
-
{ "name": "
|
|
45
|
+
{ "name": "Runwell exit popup" }
|
|
46
46
|
]
|
|
47
47
|
}
|
|
48
48
|
{% endschema %}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{%- comment -%}
|
|
2
|
-
|
|
2
|
+
Runwell FAQ accordion. Native replacement for FAQ widgets in Vitals,
|
|
3
3
|
HelpCenter, etc. Uses native HTML <details> elements so it works
|
|
4
4
|
without any JS.
|
|
5
5
|
{%- endcomment -%}
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
|
|
31
31
|
{% schema %}
|
|
32
32
|
{
|
|
33
|
-
"name": "
|
|
33
|
+
"name": "Runwell FAQ",
|
|
34
34
|
"tag": "section",
|
|
35
35
|
"class": "section-runwell-faq",
|
|
36
36
|
"settings": [
|
|
@@ -52,12 +52,12 @@
|
|
|
52
52
|
"max_blocks": 12,
|
|
53
53
|
"presets": [
|
|
54
54
|
{
|
|
55
|
-
"name": "
|
|
55
|
+
"name": "Runwell FAQ",
|
|
56
56
|
"blocks": [
|
|
57
|
-
{ "type": "qa", "settings": { "question": "Are these supplements third-party tested?", "answer": "<p>Every product we list ships with a published Certificate of Analysis from the supplier. We confirm the lot numbers match what the bottle claims before any product gets a page on
|
|
57
|
+
{ "type": "qa", "settings": { "question": "Are these supplements third-party tested?", "answer": "<p>Every product we list ships with a published Certificate of Analysis from the supplier. We confirm the lot numbers match what the bottle claims before any product gets a page on the site.</p>" } },
|
|
58
58
|
{ "type": "qa", "settings": { "question": "How fast do orders ship?", "answer": "<p>Most orders leave the warehouse within one to two business days. Free standard shipping on US orders over $75; flat $7 below. International rates calculated at checkout.</p>" } },
|
|
59
59
|
{ "type": "qa", "settings": { "question": "What is the return policy?", "answer": "<p>If a product does not earn a place on your counter, write to us within 30 days for a full refund. We do not make returns hard.</p>" } },
|
|
60
|
-
{ "type": "qa", "settings": { "question": "Do these products treat or cure conditions?", "answer": "<p>No. Statements about supplements and skincare on
|
|
60
|
+
{ "type": "qa", "settings": { "question": "Do these products treat or cure conditions?", "answer": "<p>No. Statements about supplements and skincare on this site have not been evaluated by the FDA and are not intended to diagnose, treat, cure, or prevent any disease. Consult your physician before starting any new regimen.</p>" } },
|
|
61
61
|
{ "type": "qa", "settings": { "question": "How does the journal work?", "answer": "<p>Every product is paired with a journal post explaining how it works, who it is for, and what the research actually says. Editorial, not advertorial.</p>" } }
|
|
62
62
|
]
|
|
63
63
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{%- comment -%}
|
|
2
|
-
|
|
2
|
+
Runwell "How it works" section. Side-image left + content right (or
|
|
3
3
|
reversible). Eyebrow + headline + lede + 3 numbered service cards.
|
|
4
4
|
Mirrors v1 .conciergeSection / "Nationwide Access to Concierge Care"
|
|
5
5
|
but pivoted to wellness curation flow.
|
|
@@ -60,11 +60,11 @@
|
|
|
60
60
|
|
|
61
61
|
{% schema %}
|
|
62
62
|
{
|
|
63
|
-
"name": "
|
|
63
|
+
"name": "Runwell how it works",
|
|
64
64
|
"tag": "section",
|
|
65
65
|
"class": "section-runwell-how",
|
|
66
66
|
"settings": [
|
|
67
|
-
{ "type": "text", "id": "eyebrow", "label": "Eyebrow", "default": "How
|
|
67
|
+
{ "type": "text", "id": "eyebrow", "label": "Eyebrow", "default": "How it works" },
|
|
68
68
|
{ "type": "text", "id": "heading", "label": "Heading", "default": "Curated, written, shipped." },
|
|
69
69
|
{ "type": "textarea", "id": "lede", "label": "Lede", "default": "Three simple steps from the brands we trust to your counter. No filler in between." },
|
|
70
70
|
{ "type": "image_picker", "id": "image", "label": "Side image (uploaded)" },
|
|
@@ -87,9 +87,9 @@
|
|
|
87
87
|
"max_blocks": 4,
|
|
88
88
|
"presets": [
|
|
89
89
|
{
|
|
90
|
-
"name": "
|
|
90
|
+
"name": "Runwell how it works",
|
|
91
91
|
"blocks": [
|
|
92
|
-
{ "type": "step", "settings": { "title": "We curate.", "body": "Every product
|
|
92
|
+
{ "type": "step", "settings": { "title": "We curate.", "body": "Every product is hand-picked and clears our standards before it gets a page." } },
|
|
93
93
|
{ "type": "step", "settings": { "title": "We write.", "body": "Each product pairs with a journal post: how it works, who it's for, and what the research actually says. Editorial, not advertorial." } },
|
|
94
94
|
{ "type": "step", "settings": { "title": "We ship.", "body": "Suppliers ship direct from their facility. Free shipping over $75; 30-day no-hassle returns." } }
|
|
95
95
|
]
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{%- comment -%}
|
|
2
|
-
|
|
2
|
+
Runwell inventory urgency. Shows "Only N left" near ATC when stock is
|
|
3
3
|
low. Replaces the urgency widget from Vitals / similar apps.
|
|
4
4
|
Threshold and display are conservative: only fires when inventory is
|
|
5
5
|
tracked AND visible on the PDP product object.
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
{%- comment -%}
|
|
2
|
-
|
|
2
|
+
Runwell ingredient grid. Drops below a PDP description (or anywhere) and
|
|
3
3
|
spotlights 3 to 6 hero ingredients with name, role, and dose. Reads
|
|
4
|
-
product.metafields
|
|
4
|
+
product.metafields.<namespace>.ingredients (list.metaobject, default namespace runwell) when set, with
|
|
5
5
|
manual blocks as the fallback.
|
|
6
6
|
{%- endcomment -%}
|
|
7
7
|
|
|
8
|
-
{%- assign
|
|
8
|
+
{%- assign ns = section.settings.metafield_namespace | default: 'runwell' -%}
|
|
9
|
+
{%- assign ingredients_meta = product.metafields[ns].ingredients.value -%}
|
|
9
10
|
|
|
10
11
|
<section
|
|
11
12
|
class="runwell-ingredients"
|
|
@@ -74,7 +75,7 @@
|
|
|
74
75
|
|
|
75
76
|
{% schema %}
|
|
76
77
|
{
|
|
77
|
-
"name": "
|
|
78
|
+
"name": "Runwell ingredients",
|
|
78
79
|
"tag": "section",
|
|
79
80
|
"class": "section-runwell-ingredients",
|
|
80
81
|
"settings": [
|
|
@@ -84,6 +85,13 @@
|
|
|
84
85
|
"label": "Eyebrow",
|
|
85
86
|
"default": "What's inside"
|
|
86
87
|
},
|
|
88
|
+
{
|
|
89
|
+
"type": "text",
|
|
90
|
+
"id": "metafield_namespace",
|
|
91
|
+
"label": "Ingredients metafield namespace",
|
|
92
|
+
"default": "runwell",
|
|
93
|
+
"info": "Reads product.metafields.<namespace>.ingredients (list.metaobject)."
|
|
94
|
+
},
|
|
87
95
|
{
|
|
88
96
|
"type": "text",
|
|
89
97
|
"id": "heading",
|
|
@@ -110,7 +118,7 @@
|
|
|
110
118
|
},
|
|
111
119
|
{
|
|
112
120
|
"type": "paragraph",
|
|
113
|
-
"content": "If product.metafields
|
|
121
|
+
"content": "If product.metafields.<namespace>.ingredients is set, those are used and the blocks below are ignored."
|
|
114
122
|
}
|
|
115
123
|
],
|
|
116
124
|
"blocks": [
|
|
@@ -127,7 +135,7 @@
|
|
|
127
135
|
"max_blocks": 8,
|
|
128
136
|
"presets": [
|
|
129
137
|
{
|
|
130
|
-
"name": "
|
|
138
|
+
"name": "Runwell ingredients",
|
|
131
139
|
"blocks": [
|
|
132
140
|
{ "type": "ingredient", "settings": { "name": "Magnesium glycinate", "dose": "200mg", "role": "The most bioavailable form of magnesium. Supports sleep onset and muscle recovery." } },
|
|
133
141
|
{ "type": "ingredient", "settings": { "name": "L-theanine", "dose": "100mg", "role": "Amino acid from green tea. Calms without sedating; pairs well with magnesium." } },
|