@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
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
{%- comment -%}
|
|
2
|
-
|
|
3
|
-
explains why
|
|
4
|
-
|
|
5
|
-
|
|
2
|
+
Runwell PDP journal link. Connects a product to the editorial article
|
|
3
|
+
that explains why we carry it. Uses the product metafield
|
|
4
|
+
`<namespace>.journal_article` (default namespace 'runwell', overridable
|
|
5
|
+
per-client). Falls back to the section settings article picker, then
|
|
6
|
+
the manual title.
|
|
6
7
|
{%- endcomment -%}
|
|
7
8
|
|
|
8
|
-
{%- assign
|
|
9
|
+
{%- assign ns = section.settings.metafield_namespace | default: 'runwell' -%}
|
|
10
|
+
{%- assign linked_article = product.metafields[ns].journal_article.value -%}
|
|
9
11
|
{%- if linked_article == blank -%}
|
|
10
12
|
{%- assign linked_article = section.settings.article -%}
|
|
11
13
|
{%- endif -%}
|
|
@@ -59,7 +61,7 @@
|
|
|
59
61
|
|
|
60
62
|
{% schema %}
|
|
61
63
|
{
|
|
62
|
-
"name": "
|
|
64
|
+
"name": "Runwell PDP journal link",
|
|
63
65
|
"tag": "section",
|
|
64
66
|
"class": "section-runwell-pdp-journal",
|
|
65
67
|
"settings": [
|
|
@@ -69,11 +71,18 @@
|
|
|
69
71
|
"label": "Eyebrow",
|
|
70
72
|
"default": "From the journal"
|
|
71
73
|
},
|
|
74
|
+
{
|
|
75
|
+
"type": "text",
|
|
76
|
+
"id": "metafield_namespace",
|
|
77
|
+
"label": "Journal metafield namespace",
|
|
78
|
+
"default": "runwell",
|
|
79
|
+
"info": "Reads product.metafields.<namespace>.journal_article. Default: runwell."
|
|
80
|
+
},
|
|
72
81
|
{
|
|
73
82
|
"type": "article",
|
|
74
83
|
"id": "article",
|
|
75
84
|
"label": "Linked article (override)",
|
|
76
|
-
"info": "Optional. If set, overrides the product's
|
|
85
|
+
"info": "Optional. If set, overrides the product's <namespace>.journal_article metafield."
|
|
77
86
|
},
|
|
78
87
|
{
|
|
79
88
|
"type": "color",
|
|
@@ -101,7 +110,7 @@
|
|
|
101
110
|
"type": "textarea",
|
|
102
111
|
"id": "fallback_body",
|
|
103
112
|
"label": "Fallback body",
|
|
104
|
-
"default": "Every product
|
|
113
|
+
"default": "Every product we carry pairs with a journal article. Browse the full archive to dig deeper."
|
|
105
114
|
},
|
|
106
115
|
{
|
|
107
116
|
"type": "text",
|
|
@@ -117,7 +126,7 @@
|
|
|
117
126
|
],
|
|
118
127
|
"presets": [
|
|
119
128
|
{
|
|
120
|
-
"name": "
|
|
129
|
+
"name": "Runwell PDP journal link"
|
|
121
130
|
}
|
|
122
131
|
]
|
|
123
132
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{%- comment -%}
|
|
2
|
-
|
|
2
|
+
Runwell PDP trust block. Shows the four-check standards on every PDP.
|
|
3
3
|
Builds buyer trust the way Goop's "What it is / what it does" panels do.
|
|
4
4
|
Drop into product.json after the main-product section.
|
|
5
5
|
{%- endcomment -%}
|
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
|
|
57
57
|
{% schema %}
|
|
58
58
|
{
|
|
59
|
-
"name": "
|
|
59
|
+
"name": "Runwell PDP trust",
|
|
60
60
|
"tag": "section",
|
|
61
61
|
"class": "section-runwell-pdp-trust",
|
|
62
62
|
"settings": [
|
|
@@ -76,7 +76,7 @@
|
|
|
76
76
|
"type": "textarea",
|
|
77
77
|
"id": "lede",
|
|
78
78
|
"label": "Lede",
|
|
79
|
-
"default": "We do not stock everything. Every product
|
|
79
|
+
"default": "We do not stock everything. Every product has to clear these four checks before it gets a page."
|
|
80
80
|
},
|
|
81
81
|
{
|
|
82
82
|
"type": "color",
|
|
@@ -128,7 +128,7 @@
|
|
|
128
128
|
],
|
|
129
129
|
"presets": [
|
|
130
130
|
{
|
|
131
|
-
"name": "
|
|
131
|
+
"name": "Runwell PDP trust",
|
|
132
132
|
"blocks": [
|
|
133
133
|
{ "type": "check", "settings": { "eyebrow": "Check 01", "title": "Ingredients we trust.", "body": "Whole-food forms over synthetic where the science holds. Synthetic where it works better, with a clear reason why." } },
|
|
134
134
|
{ "type": "check", "settings": { "eyebrow": "Check 02", "title": "Doses that match research.", "body": "We check actual doses against published trials. No buzzword ingredients at one-tenth the studied dose." } },
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{%- comment -%}
|
|
2
|
-
|
|
2
|
+
Runwell press bar. Logos in a row with optional eyebrow text and link.
|
|
3
3
|
Used on homepage and about page. Keep tight; the wins do the talking.
|
|
4
4
|
|
|
5
5
|
Block options (in priority order):
|
|
@@ -52,7 +52,7 @@
|
|
|
52
52
|
|
|
53
53
|
{% schema %}
|
|
54
54
|
{
|
|
55
|
-
"name": "
|
|
55
|
+
"name": "Runwell press bar",
|
|
56
56
|
"tag": "section",
|
|
57
57
|
"class": "section-runwell-press-bar",
|
|
58
58
|
"settings": [
|
|
@@ -104,7 +104,7 @@
|
|
|
104
104
|
"max_blocks": 9,
|
|
105
105
|
"presets": [
|
|
106
106
|
{
|
|
107
|
-
"name": "
|
|
107
|
+
"name": "Runwell press bar",
|
|
108
108
|
"blocks": [
|
|
109
109
|
{ "type": "logo", "settings": { "label": "Bloomberg", "asset_filename": "runwell-press-bloomberg.png" } },
|
|
110
110
|
{ "type": "logo", "settings": { "label": "Yahoo Finance", "asset_filename": "runwell-press-yahoo-finance.png" } },
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{%- comment -%}
|
|
2
|
-
|
|
2
|
+
Runwell recently-viewed products. Reads from localStorage (populated on
|
|
3
3
|
PDP visits) and renders up to 4 cards. Native replacement for the
|
|
4
4
|
recently-viewed feature in Vitals / similar apps.
|
|
5
5
|
{%- endcomment -%}
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
|
|
24
24
|
{% schema %}
|
|
25
25
|
{
|
|
26
|
-
"name": "
|
|
26
|
+
"name": "Runwell recently viewed",
|
|
27
27
|
"tag": "section",
|
|
28
28
|
"class": "section-runwell-rv",
|
|
29
29
|
"settings": [
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
{ "type": "color", "id": "background_color", "label": "Background", "default": "#FFFFFF" }
|
|
33
33
|
],
|
|
34
34
|
"presets": [
|
|
35
|
-
{ "name": "
|
|
35
|
+
{ "name": "Runwell recently viewed" }
|
|
36
36
|
]
|
|
37
37
|
}
|
|
38
38
|
{% endschema %}
|
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
{%- comment -%}
|
|
2
|
-
|
|
3
|
-
Reads from product metafield
|
|
4
|
-
|
|
5
|
-
|
|
2
|
+
Runwell native PDP reviews. Replaces Stamped / Loox display layer.
|
|
3
|
+
Reads from product metafield `<namespace>.reviews` (json type, default
|
|
4
|
+
namespace 'runwell', overridable per-client via section setting).
|
|
5
|
+
Each entry is { name, location, rating, body, date, verified }.
|
|
6
|
+
Falls back to a "no reviews yet" state with a mailto CTA pointing
|
|
7
|
+
to shop.email (merchant configures in Shopify admin > settings).
|
|
6
8
|
{%- endcomment -%}
|
|
7
9
|
|
|
8
10
|
{%- if product != blank -%}
|
|
9
|
-
{%- assign
|
|
11
|
+
{%- assign ns = section.settings.metafield_namespace | default: 'runwell' -%}
|
|
12
|
+
{%- assign reviews_json = product.metafields[ns].reviews.value -%}
|
|
10
13
|
<section class="runwell-reviews" data-runwell-reviews>
|
|
11
14
|
<div class="runwell-reviews__inner">
|
|
12
15
|
<header class="runwell-reviews__header">
|
|
@@ -45,7 +48,9 @@
|
|
|
45
48
|
</ul>
|
|
46
49
|
{%- else -%}
|
|
47
50
|
<div class="runwell-reviews__empty">
|
|
48
|
-
|
|
51
|
+
{%- comment -%}brand.support_email is interpolated at sync time from runwell.config.json; falls back to Shopify admin shop.email if the brand var is unset.{%- endcomment -%}
|
|
52
|
+
{%- assign reply_to = '{{brand.support_email}}' | default: shop.email | default: shop.url -%}
|
|
53
|
+
<p>No reviews on this one yet. If you have tried it, write us at <a href="mailto:{{ reply_to }}?subject=Review for {{ product.title | escape }}">{{ reply_to }}</a> and we will publish thoughtful reviews on the page.</p>
|
|
49
54
|
</div>
|
|
50
55
|
{%- endif -%}
|
|
51
56
|
|
|
@@ -79,14 +84,15 @@
|
|
|
79
84
|
|
|
80
85
|
{% schema %}
|
|
81
86
|
{
|
|
82
|
-
"name": "
|
|
87
|
+
"name": "Runwell PDP reviews",
|
|
83
88
|
"tag": "section",
|
|
84
89
|
"class": "section-runwell-pdp-reviews",
|
|
85
90
|
"settings": [
|
|
86
|
-
{ "type": "text", "id": "heading", "label": "Heading", "default": "What customers wrote in." }
|
|
91
|
+
{ "type": "text", "id": "heading", "label": "Heading", "default": "What customers wrote in." },
|
|
92
|
+
{ "type": "text", "id": "metafield_namespace", "label": "Reviews metafield namespace", "default": "runwell", "info": "Reads product.metafields.<namespace>.reviews. Default: runwell." }
|
|
87
93
|
],
|
|
88
94
|
"presets": [
|
|
89
|
-
{ "name": "
|
|
95
|
+
{ "name": "Runwell PDP reviews" }
|
|
90
96
|
]
|
|
91
97
|
}
|
|
92
98
|
{% endschema %}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{%- comment -%}
|
|
2
|
-
|
|
2
|
+
Runwell risk-reversal block. Small, calm reassurance that drops directly
|
|
3
3
|
under the PDP buy form (or anywhere the editor wants reassurance).
|
|
4
4
|
Per CRO §5.3 (foundational trust signal under add-to-cart).
|
|
5
5
|
{%- endcomment -%}
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
|
|
40
40
|
{% schema %}
|
|
41
41
|
{
|
|
42
|
-
"name": "
|
|
42
|
+
"name": "Runwell risk reversal",
|
|
43
43
|
"tag": "section",
|
|
44
44
|
"class": "section-runwell-risk-reversal",
|
|
45
45
|
"settings": [
|
|
@@ -87,7 +87,7 @@
|
|
|
87
87
|
],
|
|
88
88
|
"presets": [
|
|
89
89
|
{
|
|
90
|
-
"name": "
|
|
90
|
+
"name": "Runwell risk reversal"
|
|
91
91
|
}
|
|
92
92
|
]
|
|
93
93
|
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
.runwell-scrolling-ticker {
|
|
2
|
+
overflow: hidden;
|
|
3
|
+
white-space: nowrap;
|
|
4
|
+
padding: 12px 0;
|
|
5
|
+
font-size: 1.4rem;
|
|
6
|
+
font-weight: 600;
|
|
7
|
+
letter-spacing: 0.08em;
|
|
8
|
+
text-transform: uppercase;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
.scrolling-ticker__inner {
|
|
12
|
+
display: flex;
|
|
13
|
+
width: max-content;
|
|
14
|
+
animation: ticker-scroll var(--ticker-speed, 25s) linear infinite;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.scrolling-ticker__content {
|
|
18
|
+
display: flex;
|
|
19
|
+
align-items: center;
|
|
20
|
+
flex-shrink: 0;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.scrolling-ticker__item {
|
|
24
|
+
display: inline-flex;
|
|
25
|
+
align-items: center;
|
|
26
|
+
gap: 6px;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.scrolling-ticker__separator {
|
|
30
|
+
opacity: 0.6;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.scrolling-ticker__icon {
|
|
34
|
+
font-size: 1.2em;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
@keyframes ticker-scroll {
|
|
38
|
+
0% { transform: translateX(0); }
|
|
39
|
+
100% { transform: translateX(-25%); }
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.scrolling-ticker:hover .scrolling-ticker__inner {
|
|
43
|
+
animation-play-state: paused;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
@media screen and (max-width: 749px) {
|
|
47
|
+
.runwell-scrolling-ticker {
|
|
48
|
+
font-size: 1.2rem;
|
|
49
|
+
padding: 10px 0;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "scrolling-ticker",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"category": "social-proof",
|
|
5
|
+
"description": "Top-of-page horizontally-scrolling promotional ticker (free shipping, sale messaging, FOMO copy). One block per text item. Replaces announcement-bar / scrolling-text apps. Promoted from Lusha bespoke (guabrasha-store/sections/scrolling-ticker.liquid).",
|
|
6
|
+
"files": {
|
|
7
|
+
"sections": ["sections/runwell-scrolling-ticker.liquid"],
|
|
8
|
+
"assets": ["assets/runwell-scrolling-ticker.css"]
|
|
9
|
+
},
|
|
10
|
+
"config": {
|
|
11
|
+
"schema": {}
|
|
12
|
+
}
|
|
13
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
{{ 'runwell-scrolling-ticker.css' | asset_url | stylesheet_tag }}
|
|
2
|
+
|
|
3
|
+
<div class="runwell-scrolling-ticker color-{{ section.settings.color_scheme }}" role="marquee">
|
|
4
|
+
<div class="scrolling-ticker__inner">
|
|
5
|
+
{% for i in (1..4) %}
|
|
6
|
+
<div class="scrolling-ticker__content" {% if forloop.index > 1 %}aria-hidden="true"{% endif %}>
|
|
7
|
+
{% for block in section.blocks %}
|
|
8
|
+
<span class="scrolling-ticker__item">
|
|
9
|
+
{% if block.settings.icon != 'none' %}
|
|
10
|
+
<span class="scrolling-ticker__icon">{{ block.settings.icon }}</span>
|
|
11
|
+
{% endif %}
|
|
12
|
+
{{ block.settings.text }}
|
|
13
|
+
</span>
|
|
14
|
+
<span class="scrolling-ticker__separator"> {{ section.settings.separator }} </span>
|
|
15
|
+
{% endfor %}
|
|
16
|
+
</div>
|
|
17
|
+
{% endfor %}
|
|
18
|
+
</div>
|
|
19
|
+
</div>
|
|
20
|
+
|
|
21
|
+
{% schema %}
|
|
22
|
+
{
|
|
23
|
+
"name": "Scrolling Ticker",
|
|
24
|
+
"tag": "section",
|
|
25
|
+
"class": "section-runwell-scrolling-ticker",
|
|
26
|
+
"settings": [
|
|
27
|
+
{
|
|
28
|
+
"type": "color_scheme",
|
|
29
|
+
"id": "color_scheme",
|
|
30
|
+
"label": "Color scheme",
|
|
31
|
+
"default": "scheme-3"
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"type": "text",
|
|
35
|
+
"id": "separator",
|
|
36
|
+
"label": "Separator",
|
|
37
|
+
"default": "\u2728"
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"type": "range",
|
|
41
|
+
"id": "speed",
|
|
42
|
+
"label": "Scroll speed (seconds)",
|
|
43
|
+
"min": 10,
|
|
44
|
+
"max": 60,
|
|
45
|
+
"step": 5,
|
|
46
|
+
"default": 25,
|
|
47
|
+
"unit": "s"
|
|
48
|
+
}
|
|
49
|
+
],
|
|
50
|
+
"blocks": [
|
|
51
|
+
{
|
|
52
|
+
"type": "text",
|
|
53
|
+
"name": "Text item",
|
|
54
|
+
"settings": [
|
|
55
|
+
{
|
|
56
|
+
"type": "text",
|
|
57
|
+
"id": "text",
|
|
58
|
+
"label": "Text",
|
|
59
|
+
"default": "Free shipping on orders over $50"
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"type": "text",
|
|
63
|
+
"id": "icon",
|
|
64
|
+
"label": "Icon (emoji)",
|
|
65
|
+
"default": "none"
|
|
66
|
+
}
|
|
67
|
+
]
|
|
68
|
+
}
|
|
69
|
+
],
|
|
70
|
+
"presets": [
|
|
71
|
+
{
|
|
72
|
+
"name": "Scrolling Ticker",
|
|
73
|
+
"blocks": [
|
|
74
|
+
{ "type": "text", "settings": { "text": "FREE SHIPPING on orders over $50", "icon": "\u2728" } },
|
|
75
|
+
{ "type": "text", "settings": { "text": "Your 2-minute morning sculpting ritual", "icon": "\u2728" } },
|
|
76
|
+
{ "type": "text", "settings": { "text": "Inspired by centuries of facial sculpting wisdom", "icon": "\u2728" } },
|
|
77
|
+
{ "type": "text", "settings": { "text": "90-Day Satisfaction Guarantee", "icon": "\u2728" } }
|
|
78
|
+
]
|
|
79
|
+
}
|
|
80
|
+
]
|
|
81
|
+
}
|
|
82
|
+
{% endschema %}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{%- comment -%}
|
|
2
|
-
|
|
2
|
+
Runwell free-shipping announcement bar. Sits at the very top of every
|
|
3
3
|
page. Reads cart total and shows a progress message + bar.
|
|
4
4
|
{%- endcomment -%}
|
|
5
5
|
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
|
|
41
41
|
{% schema %}
|
|
42
42
|
{
|
|
43
|
-
"name": "
|
|
43
|
+
"name": "Runwell shipping bar",
|
|
44
44
|
"tag": "aside",
|
|
45
45
|
"class": "section-runwell-shipping-bar",
|
|
46
46
|
"enabled_on": {
|
|
@@ -88,7 +88,7 @@
|
|
|
88
88
|
],
|
|
89
89
|
"presets": [
|
|
90
90
|
{
|
|
91
|
-
"name": "
|
|
91
|
+
"name": "Runwell shipping bar"
|
|
92
92
|
}
|
|
93
93
|
]
|
|
94
94
|
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
.social-proof-banner__content {
|
|
2
|
+
display: flex;
|
|
3
|
+
align-items: baseline;
|
|
4
|
+
justify-content: center;
|
|
5
|
+
gap: 0.6rem;
|
|
6
|
+
text-align: center;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
.social-proof-banner__count {
|
|
10
|
+
font-family: var(--font-heading-family);
|
|
11
|
+
font-size: 3.6rem;
|
|
12
|
+
font-weight: 600;
|
|
13
|
+
line-height: 1;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
.social-proof-banner__text {
|
|
17
|
+
font-size: 1.6rem;
|
|
18
|
+
opacity: 0.8;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
@media screen and (max-width: 749px) {
|
|
22
|
+
.social-proof-banner__content {
|
|
23
|
+
flex-direction: column;
|
|
24
|
+
gap: 0.2rem;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.social-proof-banner__count {
|
|
28
|
+
font-size: 2.8rem;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "social-proof-banner",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"category": "social-proof",
|
|
5
|
+
"description": "Single-line social-proof banner (e.g. 'Loved by 12,400+ customers'). Compact form for tucking under hero or above CTA. Replaces fixed-text social-proof apps. Promoted from Lusha bespoke (guabrasha-store/sections/social-proof-banner.liquid).",
|
|
6
|
+
"files": {
|
|
7
|
+
"sections": ["sections/runwell-social-proof-banner.liquid"],
|
|
8
|
+
"assets": ["assets/runwell-social-proof-banner.css"]
|
|
9
|
+
},
|
|
10
|
+
"config": {
|
|
11
|
+
"schema": {}
|
|
12
|
+
}
|
|
13
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
{{ 'runwell-social-proof-banner.css' | asset_url | stylesheet_tag }}
|
|
2
|
+
|
|
3
|
+
<div class="runwell-social-proof-banner color-{{ section.settings.color_scheme }} section-{{ section.id }}-padding">
|
|
4
|
+
<div class="page-width">
|
|
5
|
+
<div class="social-proof-banner__content">
|
|
6
|
+
{% if section.settings.count != blank %}
|
|
7
|
+
<span class="social-proof-banner__count">{{ section.settings.count }}</span>
|
|
8
|
+
{% endif %}
|
|
9
|
+
{% if section.settings.text != blank %}
|
|
10
|
+
<span class="social-proof-banner__text">{{ section.settings.text }}</span>
|
|
11
|
+
{% endif %}
|
|
12
|
+
</div>
|
|
13
|
+
</div>
|
|
14
|
+
</div>
|
|
15
|
+
|
|
16
|
+
{% schema %}
|
|
17
|
+
{
|
|
18
|
+
"name": "Social Proof Banner",
|
|
19
|
+
"tag": "section",
|
|
20
|
+
"class": "section-runwell-social-proof-banner",
|
|
21
|
+
"settings": [
|
|
22
|
+
{
|
|
23
|
+
"type": "text",
|
|
24
|
+
"id": "count",
|
|
25
|
+
"label": "Count",
|
|
26
|
+
"default": "2,400+"
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"type": "text",
|
|
30
|
+
"id": "text",
|
|
31
|
+
"label": "Text",
|
|
32
|
+
"default": "Happy Customers and Counting"
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"type": "color_scheme",
|
|
36
|
+
"id": "color_scheme",
|
|
37
|
+
"label": "Color scheme",
|
|
38
|
+
"default": "scheme-2"
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"type": "range",
|
|
42
|
+
"id": "padding_top",
|
|
43
|
+
"label": "Top padding",
|
|
44
|
+
"min": 0, "max": 60, "step": 4, "default": 24, "unit": "px"
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"type": "range",
|
|
48
|
+
"id": "padding_bottom",
|
|
49
|
+
"label": "Bottom padding",
|
|
50
|
+
"min": 0, "max": 60, "step": 4, "default": 24, "unit": "px"
|
|
51
|
+
}
|
|
52
|
+
],
|
|
53
|
+
"presets": [
|
|
54
|
+
{
|
|
55
|
+
"name": "Social Proof Banner"
|
|
56
|
+
}
|
|
57
|
+
]
|
|
58
|
+
}
|
|
59
|
+
{% endschema %}
|
|
60
|
+
|
|
61
|
+
<style>
|
|
62
|
+
.section-{{ section.id }}-padding {
|
|
63
|
+
padding-top: {{ section.settings.padding_top }}px;
|
|
64
|
+
padding-bottom: {{ section.settings.padding_bottom }}px;
|
|
65
|
+
}
|
|
66
|
+
</style>
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
.stats-bar__grid {
|
|
2
|
+
display: grid;
|
|
3
|
+
gap: 2rem;
|
|
4
|
+
text-align: center;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
.stats-bar__grid--3-col {
|
|
8
|
+
grid-template-columns: repeat(3, 1fr);
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
.stats-bar__grid--2-col {
|
|
12
|
+
grid-template-columns: repeat(2, 1fr);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.stats-bar__grid--4-col {
|
|
16
|
+
grid-template-columns: repeat(4, 1fr);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.stats-bar__item {
|
|
20
|
+
display: flex;
|
|
21
|
+
flex-direction: column;
|
|
22
|
+
align-items: center;
|
|
23
|
+
gap: 0.8rem;
|
|
24
|
+
padding: 2rem 1rem;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.stats-bar__number {
|
|
28
|
+
font-size: 4.8rem;
|
|
29
|
+
line-height: 1;
|
|
30
|
+
font-weight: 600;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.stats-bar__label {
|
|
34
|
+
font-size: 1.4rem;
|
|
35
|
+
opacity: 0.85;
|
|
36
|
+
max-width: 24ch;
|
|
37
|
+
line-height: 1.4;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
@media screen and (max-width: 749px) {
|
|
41
|
+
.stats-bar__grid--3-col,
|
|
42
|
+
.stats-bar__grid--4-col {
|
|
43
|
+
grid-template-columns: 1fr;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
.stats-bar__number {
|
|
47
|
+
font-size: 3.6rem;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "stats-bar",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"category": "social-proof",
|
|
5
|
+
"description": "Three-up (or N-up) stats row with big number + supporting label per block. Editorial social proof: clinical results, customer surveys, NPS, etc. Replaces app-driven stat counters. Promoted from Lusha bespoke (guabrasha-store/sections/stats-bar.liquid).",
|
|
6
|
+
"files": {
|
|
7
|
+
"sections": ["sections/runwell-stats-bar.liquid"],
|
|
8
|
+
"assets": ["assets/runwell-stats-bar.css"]
|
|
9
|
+
},
|
|
10
|
+
"config": {
|
|
11
|
+
"schema": {}
|
|
12
|
+
}
|
|
13
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
{{ 'runwell-stats-bar.css' | asset_url | stylesheet_tag }}
|
|
2
|
+
|
|
3
|
+
<div class="runwell-stats-bar color-{{ section.settings.color_scheme }} section-{{ section.id }}-padding">
|
|
4
|
+
<div class="page-width">
|
|
5
|
+
<div class="stats-bar__grid stats-bar__grid--{{ section.blocks.size }}-col">
|
|
6
|
+
{% for block in section.blocks %}
|
|
7
|
+
<div class="stats-bar__item" {{ block.shopify_attributes }}>
|
|
8
|
+
<span class="stats-bar__number h0">{{ block.settings.number }}</span>
|
|
9
|
+
<span class="stats-bar__label">{{ block.settings.label }}</span>
|
|
10
|
+
</div>
|
|
11
|
+
{% endfor %}
|
|
12
|
+
</div>
|
|
13
|
+
</div>
|
|
14
|
+
</div>
|
|
15
|
+
|
|
16
|
+
{% schema %}
|
|
17
|
+
{
|
|
18
|
+
"name": "Stats Bar",
|
|
19
|
+
"tag": "section",
|
|
20
|
+
"class": "section-runwell-stats-bar",
|
|
21
|
+
"settings": [
|
|
22
|
+
{
|
|
23
|
+
"type": "color_scheme",
|
|
24
|
+
"id": "color_scheme",
|
|
25
|
+
"label": "Color scheme",
|
|
26
|
+
"default": "scheme-3"
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"type": "range",
|
|
30
|
+
"id": "padding_top",
|
|
31
|
+
"label": "Top padding",
|
|
32
|
+
"min": 0,
|
|
33
|
+
"max": 100,
|
|
34
|
+
"step": 4,
|
|
35
|
+
"default": 40,
|
|
36
|
+
"unit": "px"
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"type": "range",
|
|
40
|
+
"id": "padding_bottom",
|
|
41
|
+
"label": "Bottom padding",
|
|
42
|
+
"min": 0,
|
|
43
|
+
"max": 100,
|
|
44
|
+
"step": 4,
|
|
45
|
+
"default": 40,
|
|
46
|
+
"unit": "px"
|
|
47
|
+
}
|
|
48
|
+
],
|
|
49
|
+
"blocks": [
|
|
50
|
+
{
|
|
51
|
+
"type": "stat",
|
|
52
|
+
"name": "Statistic",
|
|
53
|
+
"settings": [
|
|
54
|
+
{
|
|
55
|
+
"type": "text",
|
|
56
|
+
"id": "number",
|
|
57
|
+
"label": "Number",
|
|
58
|
+
"default": "89%"
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
"type": "text",
|
|
62
|
+
"id": "label",
|
|
63
|
+
"label": "Label",
|
|
64
|
+
"default": "saw reduced puffiness in 7 days"
|
|
65
|
+
}
|
|
66
|
+
]
|
|
67
|
+
}
|
|
68
|
+
],
|
|
69
|
+
"presets": [
|
|
70
|
+
{
|
|
71
|
+
"name": "Stats Bar",
|
|
72
|
+
"blocks": [
|
|
73
|
+
{ "type": "stat", "settings": { "number": "89%", "label": "saw reduced puffiness in 7 days" } },
|
|
74
|
+
{ "type": "stat", "settings": { "number": "94%", "label": "noticed a more sculpted jawline in 4 weeks" } },
|
|
75
|
+
{ "type": "stat", "settings": { "number": "91%", "label": "said their skin felt softer after first use" } }
|
|
76
|
+
]
|
|
77
|
+
}
|
|
78
|
+
]
|
|
79
|
+
}
|
|
80
|
+
{% endschema %}
|
|
81
|
+
|
|
82
|
+
<style>
|
|
83
|
+
.section-{{ section.id }}-padding {
|
|
84
|
+
padding-top: {{ section.settings.padding_top }}px;
|
|
85
|
+
padding-bottom: {{ section.settings.padding_bottom }}px;
|
|
86
|
+
}
|
|
87
|
+
</style>
|