@runwell/shopify-toolkit 0.17.4 → 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.
- package/bin/runwell-shopify +4 -1
- package/lib/list.js +120 -0
- package/modules/INDEX.md +52 -19
- package/modules/_shared/css-tokens/assets/runwell-tokens.css +24 -4
- package/modules/_shared/css-tokens/module.json +2 -2
- package/modules/_shared/css-typography/assets/runwell-typography.css +14 -6
- package/modules/_shared/css-typography/module.json +2 -2
- package/modules/care-coaching-medvi/README.md +46 -0
- package/modules/care-coaching-medvi/assets/runwell-care-coaching-medvi.css +241 -0
- package/modules/care-coaching-medvi/module.json +80 -0
- package/modules/care-coaching-medvi/sections/runwell-care-coaching-medvi.liquid +274 -0
- package/modules/care-coaching-medvi/snippets/runwell-care-coaching-medvi-circular-text.liquid +25 -0
- package/modules/collection-block-medvi/README.md +50 -0
- package/modules/collection-block-medvi/assets/runwell-collection-block-medvi.css +242 -0
- package/modules/collection-block-medvi/module.json +83 -0
- package/modules/collection-block-medvi/sections/runwell-collection-block-medvi.liquid +355 -0
- package/modules/product-trio-medvi/README.md +35 -0
- package/modules/product-trio-medvi/assets/runwell-product-trio-medvi.css +119 -0
- package/modules/product-trio-medvi/module.json +48 -0
- package/modules/product-trio-medvi/sections/runwell-product-trio-medvi.liquid +188 -0
- package/modules/testimonials-medvi/README.md +44 -0
- package/modules/testimonials-medvi/assets/runwell-testimonials-medvi.css +239 -0
- package/modules/testimonials-medvi/module.json +68 -0
- package/modules/testimonials-medvi/sections/runwell-testimonials-medvi.liquid +355 -0
- package/package.json +2 -2
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# product-trio-medvi
|
|
2
|
+
|
|
3
|
+
3-product fan-layout showcase with a single soft-corner copy panel beside. Hero anchor for a product line. Reveals the actual product lineup that a `collection-block-medvi` introduces.
|
|
4
|
+
|
|
5
|
+
Category: `branding`
|
|
6
|
+
|
|
7
|
+
## Files
|
|
8
|
+
|
|
9
|
+
- `sections/runwell-product-trio-medvi.liquid`
|
|
10
|
+
- `assets/runwell-product-trio-medvi.css`
|
|
11
|
+
|
|
12
|
+
## Layout
|
|
13
|
+
|
|
14
|
+
Three products arranged in a fan: center product foregrounded (z-index above, slightly larger, vertically anchored at bottom), left and right products partially behind it. The composition is asymmetric on purpose; medvi's reference shot has the center product offset.
|
|
15
|
+
|
|
16
|
+
The copy panel sits beside the products holding a single short headline (no body, no CTA). That's intentional: this component reveals products and anchors them with a one-line promise. Ad copy or extended CTA belong in adjacent components (`collection-block-medvi`, `editorial-block`, etc.).
|
|
17
|
+
|
|
18
|
+
## Tokens consumed
|
|
19
|
+
|
|
20
|
+
Brand: `--runwell-oat`, `--runwell-tertiary`, `--runwell-celadon`. Design system: `--runwell-radius-xl`. Typography: `--runwell-h3-size`.
|
|
21
|
+
|
|
22
|
+
## Tenant overrides
|
|
23
|
+
|
|
24
|
+
- Brand-block (`runwell.config.json`) flips global tokens. Panel background follows `--runwell-oat` by default.
|
|
25
|
+
- Per-instance (Theme Editor): 6 image fields (3 products with uploaded image plus bundled-asset fallback for each), panel headline, panel background color, layout (products-left vs products-right), bg band.
|
|
26
|
+
|
|
27
|
+
## Lineage
|
|
28
|
+
|
|
29
|
+
Extracted from `https://home.medvi.org/` on 2026-05-06. Framer label: `3 Cards / Pill Image Group`. Scrape path: `_clients/capital-v/lushi/research/medvi-reference/site-scrape/`. The medvi reference shot uses 3 supplement jars (Colonix+ / BrainBloom / Colonix+) with a soft-cream panel saying "Doctor-formulated blends designed to support how your body works best."
|
|
30
|
+
|
|
31
|
+
## Notes
|
|
32
|
+
|
|
33
|
+
- Recommended product images are PNG with transparent background so the products float on top of the section's bg band. Document this in tenant onboarding.
|
|
34
|
+
- Mobile: products row keeps horizontal arrangement but shrinks; panel stacks below.
|
|
35
|
+
- This module pairs naturally with `collection-block-medvi`. Typical sequence: `collection-block-medvi` (introduces the category with benefits + lifestyle) then `product-trio-medvi` (reveals the products) then onward.
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/* Runwell product-trio-medvi.
|
|
2
|
+
|
|
3
|
+
3-product fan layout with center product foregrounded. Single
|
|
4
|
+
soft-corner copy panel beside.
|
|
5
|
+
|
|
6
|
+
Tokens: --runwell-oat, --runwell-tertiary, --runwell-radius-xl,
|
|
7
|
+
--runwell-h3-size.
|
|
8
|
+
Mobile-first: products row stays horizontal but shrinks; panel
|
|
9
|
+
stacks below at <768px.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
.runwell-product-trio-medvi {
|
|
13
|
+
padding: clamp(3rem, 8vw, 7rem) clamp(1.5rem, 4vw, 4rem);
|
|
14
|
+
font-family: var(--font-body-family, inherit);
|
|
15
|
+
color: var(--runwell-tertiary, #0B3D38);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.runwell-product-trio-medvi--bg-white {
|
|
19
|
+
background: #ffffff;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.runwell-product-trio-medvi--bg-oat {
|
|
23
|
+
background: var(--runwell-oat, #F5F0EE);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.runwell-product-trio-medvi--bg-celadon-tint {
|
|
27
|
+
background: color-mix(in srgb, var(--runwell-celadon, #ADDDBD) 18%, white);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.runwell-product-trio-medvi__inner {
|
|
31
|
+
display: grid;
|
|
32
|
+
grid-template-columns: 1fr;
|
|
33
|
+
gap: clamp(2rem, 4vw, 4rem);
|
|
34
|
+
max-width: 1280px;
|
|
35
|
+
margin: 0 auto;
|
|
36
|
+
align-items: center;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
@media (min-width: 768px) {
|
|
40
|
+
.runwell-product-trio-medvi__inner {
|
|
41
|
+
grid-template-columns: 1.2fr 1fr;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
.runwell-product-trio-medvi--products-right .runwell-product-trio-medvi__inner {
|
|
45
|
+
direction: rtl;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
.runwell-product-trio-medvi--products-right .runwell-product-trio-medvi__inner > * {
|
|
49
|
+
direction: ltr;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/* ----- Products fan ----- */
|
|
54
|
+
|
|
55
|
+
.runwell-product-trio-medvi__products {
|
|
56
|
+
position: relative;
|
|
57
|
+
display: flex;
|
|
58
|
+
align-items: flex-end;
|
|
59
|
+
justify-content: center;
|
|
60
|
+
gap: clamp(0.25rem, 1vw, 0.75rem);
|
|
61
|
+
min-height: clamp(280px, 35vw, 480px);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
.runwell-product-trio-medvi__product {
|
|
65
|
+
position: relative;
|
|
66
|
+
display: flex;
|
|
67
|
+
align-items: flex-end;
|
|
68
|
+
justify-content: center;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
.runwell-product-trio-medvi__product img {
|
|
72
|
+
display: block;
|
|
73
|
+
width: 100%;
|
|
74
|
+
height: auto;
|
|
75
|
+
object-fit: contain;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
.runwell-product-trio-medvi__product--left,
|
|
79
|
+
.runwell-product-trio-medvi__product--right {
|
|
80
|
+
flex: 0 1 28%;
|
|
81
|
+
max-width: 220px;
|
|
82
|
+
z-index: 1;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
.runwell-product-trio-medvi__product--left {
|
|
86
|
+
margin-right: -3%;
|
|
87
|
+
transform: translateY(8%);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
.runwell-product-trio-medvi__product--right {
|
|
91
|
+
margin-left: -3%;
|
|
92
|
+
transform: translateY(8%);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
.runwell-product-trio-medvi__product--center {
|
|
96
|
+
flex: 0 1 36%;
|
|
97
|
+
max-width: 320px;
|
|
98
|
+
z-index: 2;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/* ----- Copy panel ----- */
|
|
102
|
+
|
|
103
|
+
.runwell-product-trio-medvi__panel {
|
|
104
|
+
border-radius: var(--runwell-radius-xl, 32px);
|
|
105
|
+
padding: clamp(2rem, 4vw, 3.5rem);
|
|
106
|
+
display: flex;
|
|
107
|
+
align-items: center;
|
|
108
|
+
min-height: clamp(180px, 20vw, 280px);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
.runwell-product-trio-medvi__panel-heading {
|
|
112
|
+
font-family: var(--font-heading-family, inherit);
|
|
113
|
+
font-size: var(--runwell-h3-size, clamp(2rem, 3vw, 2.8rem));
|
|
114
|
+
font-weight: 600;
|
|
115
|
+
line-height: 1.25;
|
|
116
|
+
margin: 0;
|
|
117
|
+
text-align: center;
|
|
118
|
+
width: 100%;
|
|
119
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "product-trio-medvi",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"category": "branding",
|
|
5
|
+
"source": "medvi",
|
|
6
|
+
"base": "product-trio",
|
|
7
|
+
"qualifier": null,
|
|
8
|
+
"description": "3-product showcase, fan layout with center product foregrounded, soft-corner copy panel beside. Hero anchor for a product line.",
|
|
9
|
+
"replaces": null,
|
|
10
|
+
"files": {
|
|
11
|
+
"sections": [
|
|
12
|
+
"sections/runwell-product-trio-medvi.liquid"
|
|
13
|
+
],
|
|
14
|
+
"snippets": [],
|
|
15
|
+
"assets": [
|
|
16
|
+
"assets/runwell-product-trio-medvi.css"
|
|
17
|
+
]
|
|
18
|
+
},
|
|
19
|
+
"config": {
|
|
20
|
+
"schema": {
|
|
21
|
+
"panel_heading": {
|
|
22
|
+
"type": "string",
|
|
23
|
+
"default": "Doctor-formulated blends designed to support how your body works best.",
|
|
24
|
+
"label": "Panel headline"
|
|
25
|
+
},
|
|
26
|
+
"panel_bg": {
|
|
27
|
+
"type": "string",
|
|
28
|
+
"default": "{{brand.oat}}",
|
|
29
|
+
"label": "Panel background tint"
|
|
30
|
+
},
|
|
31
|
+
"layout": {
|
|
32
|
+
"type": "string",
|
|
33
|
+
"default": "products-left",
|
|
34
|
+
"label": "Layout: products-left or products-right"
|
|
35
|
+
},
|
|
36
|
+
"bg_band": {
|
|
37
|
+
"type": "string",
|
|
38
|
+
"default": "white",
|
|
39
|
+
"label": "Background band: white, oat, celadon-tint"
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
"lineage": {
|
|
44
|
+
"extracted_from": "https://home.medvi.org/",
|
|
45
|
+
"scrape_path": "_clients/capital-v/lushi/research/medvi-reference/site-scrape/",
|
|
46
|
+
"framer_label": "3 Cards / Pill Image Group"
|
|
47
|
+
}
|
|
48
|
+
}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
{%- comment -%}
|
|
2
|
+
Runwell product-trio-medvi.
|
|
3
|
+
|
|
4
|
+
3-product showcase: 3 product images in a fan layout with the center
|
|
5
|
+
product foregrounded; single soft-corner copy panel beside, holding
|
|
6
|
+
one short headline. Hero anchor for a product line.
|
|
7
|
+
|
|
8
|
+
Lineage: extracted from home.medvi.org (Framer label "3 Cards / Pill
|
|
9
|
+
Image Group"), generalised to Runwell brand tokens.
|
|
10
|
+
{%- endcomment -%}
|
|
11
|
+
|
|
12
|
+
{{ 'runwell-product-trio-medvi.css' | asset_url | stylesheet_tag }}
|
|
13
|
+
|
|
14
|
+
{%- liquid
|
|
15
|
+
assign layout = section.settings.layout | default: 'products-left'
|
|
16
|
+
assign bg_band = section.settings.bg_band | default: 'white'
|
|
17
|
+
assign panel_bg = section.settings.panel_bg | default: 'var(--runwell-oat)'
|
|
18
|
+
-%}
|
|
19
|
+
|
|
20
|
+
<section
|
|
21
|
+
class="runwell-product-trio-medvi runwell-product-trio-medvi--{{ layout }} runwell-product-trio-medvi--bg-{{ bg_band }}"
|
|
22
|
+
>
|
|
23
|
+
<div class="runwell-product-trio-medvi__inner">
|
|
24
|
+
|
|
25
|
+
<div class="runwell-product-trio-medvi__products">
|
|
26
|
+
<div class="runwell-product-trio-medvi__product runwell-product-trio-medvi__product--left">
|
|
27
|
+
{%- if section.settings.product_image_left != blank -%}
|
|
28
|
+
<img
|
|
29
|
+
src="{{ section.settings.product_image_left | image_url: width: 600 }}"
|
|
30
|
+
alt="{{ section.settings.product_image_left.alt | default: '' | escape }}"
|
|
31
|
+
width="{{ section.settings.product_image_left.width }}"
|
|
32
|
+
height="{{ section.settings.product_image_left.height }}"
|
|
33
|
+
loading="lazy"
|
|
34
|
+
>
|
|
35
|
+
{%- elsif section.settings.product_image_left_asset != blank -%}
|
|
36
|
+
<img
|
|
37
|
+
src="{{ section.settings.product_image_left_asset | asset_url }}"
|
|
38
|
+
alt=""
|
|
39
|
+
width="600"
|
|
40
|
+
height="800"
|
|
41
|
+
loading="lazy"
|
|
42
|
+
>
|
|
43
|
+
{%- endif -%}
|
|
44
|
+
</div>
|
|
45
|
+
|
|
46
|
+
<div class="runwell-product-trio-medvi__product runwell-product-trio-medvi__product--center">
|
|
47
|
+
{%- if section.settings.product_image_center != blank -%}
|
|
48
|
+
<img
|
|
49
|
+
src="{{ section.settings.product_image_center | image_url: width: 800 }}"
|
|
50
|
+
alt="{{ section.settings.product_image_center.alt | default: '' | escape }}"
|
|
51
|
+
width="{{ section.settings.product_image_center.width }}"
|
|
52
|
+
height="{{ section.settings.product_image_center.height }}"
|
|
53
|
+
loading="lazy"
|
|
54
|
+
>
|
|
55
|
+
{%- elsif section.settings.product_image_center_asset != blank -%}
|
|
56
|
+
<img
|
|
57
|
+
src="{{ section.settings.product_image_center_asset | asset_url }}"
|
|
58
|
+
alt=""
|
|
59
|
+
width="800"
|
|
60
|
+
height="1000"
|
|
61
|
+
loading="lazy"
|
|
62
|
+
>
|
|
63
|
+
{%- endif -%}
|
|
64
|
+
</div>
|
|
65
|
+
|
|
66
|
+
<div class="runwell-product-trio-medvi__product runwell-product-trio-medvi__product--right">
|
|
67
|
+
{%- if section.settings.product_image_right != blank -%}
|
|
68
|
+
<img
|
|
69
|
+
src="{{ section.settings.product_image_right | image_url: width: 600 }}"
|
|
70
|
+
alt="{{ section.settings.product_image_right.alt | default: '' | escape }}"
|
|
71
|
+
width="{{ section.settings.product_image_right.width }}"
|
|
72
|
+
height="{{ section.settings.product_image_right.height }}"
|
|
73
|
+
loading="lazy"
|
|
74
|
+
>
|
|
75
|
+
{%- elsif section.settings.product_image_right_asset != blank -%}
|
|
76
|
+
<img
|
|
77
|
+
src="{{ section.settings.product_image_right_asset | asset_url }}"
|
|
78
|
+
alt=""
|
|
79
|
+
width="600"
|
|
80
|
+
height="800"
|
|
81
|
+
loading="lazy"
|
|
82
|
+
>
|
|
83
|
+
{%- endif -%}
|
|
84
|
+
</div>
|
|
85
|
+
</div>
|
|
86
|
+
|
|
87
|
+
{%- if section.settings.panel_heading != blank -%}
|
|
88
|
+
<div
|
|
89
|
+
class="runwell-product-trio-medvi__panel"
|
|
90
|
+
style="background: {{ panel_bg }};"
|
|
91
|
+
>
|
|
92
|
+
<p class="runwell-product-trio-medvi__panel-heading">{{ section.settings.panel_heading }}</p>
|
|
93
|
+
</div>
|
|
94
|
+
{%- endif -%}
|
|
95
|
+
|
|
96
|
+
</div>
|
|
97
|
+
</section>
|
|
98
|
+
|
|
99
|
+
{% schema %}
|
|
100
|
+
{
|
|
101
|
+
"name": "Product trio (medvi)",
|
|
102
|
+
"tag": "section",
|
|
103
|
+
"class": "section-runwell-product-trio-medvi",
|
|
104
|
+
"settings": [
|
|
105
|
+
{
|
|
106
|
+
"type": "header",
|
|
107
|
+
"content": "Products (3 images)"
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
"type": "image_picker",
|
|
111
|
+
"id": "product_image_left",
|
|
112
|
+
"label": "Left product image",
|
|
113
|
+
"info": "PNG with transparent background recommended."
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
"type": "text",
|
|
117
|
+
"id": "product_image_left_asset",
|
|
118
|
+
"label": "Left product image (asset filename)"
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
"type": "image_picker",
|
|
122
|
+
"id": "product_image_center",
|
|
123
|
+
"label": "Center product image (foregrounded)"
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
"type": "text",
|
|
127
|
+
"id": "product_image_center_asset",
|
|
128
|
+
"label": "Center product image (asset filename)"
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
"type": "image_picker",
|
|
132
|
+
"id": "product_image_right",
|
|
133
|
+
"label": "Right product image"
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
"type": "text",
|
|
137
|
+
"id": "product_image_right_asset",
|
|
138
|
+
"label": "Right product image (asset filename)"
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
"type": "header",
|
|
142
|
+
"content": "Copy panel"
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
"type": "text",
|
|
146
|
+
"id": "panel_heading",
|
|
147
|
+
"label": "Panel headline",
|
|
148
|
+
"default": "Doctor-formulated blends designed to support how your body works best."
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
"type": "color",
|
|
152
|
+
"id": "panel_bg",
|
|
153
|
+
"label": "Panel background tint",
|
|
154
|
+
"default": "#F5F0EE"
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
"type": "header",
|
|
158
|
+
"content": "Layout"
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
"type": "select",
|
|
162
|
+
"id": "layout",
|
|
163
|
+
"label": "Layout",
|
|
164
|
+
"options": [
|
|
165
|
+
{ "value": "products-left", "label": "Products on left" },
|
|
166
|
+
{ "value": "products-right", "label": "Products on right" }
|
|
167
|
+
],
|
|
168
|
+
"default": "products-left"
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
"type": "select",
|
|
172
|
+
"id": "bg_band",
|
|
173
|
+
"label": "Background band",
|
|
174
|
+
"options": [
|
|
175
|
+
{ "value": "white", "label": "White" },
|
|
176
|
+
{ "value": "oat", "label": "Oat" },
|
|
177
|
+
{ "value": "celadon-tint", "label": "Celadon tint" }
|
|
178
|
+
],
|
|
179
|
+
"default": "white"
|
|
180
|
+
}
|
|
181
|
+
],
|
|
182
|
+
"presets": [
|
|
183
|
+
{
|
|
184
|
+
"name": "Product trio (medvi)"
|
|
185
|
+
}
|
|
186
|
+
]
|
|
187
|
+
}
|
|
188
|
+
{% endschema %}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# testimonials-medvi
|
|
2
|
+
|
|
3
|
+
Interleaved photo card + quote card mosaic in a CSS grid. Magazine-spread feel. Blocks of type `quote` and `photo` are user-droppable in the Theme Editor; the designer controls visual rhythm by ordering blocks.
|
|
4
|
+
|
|
5
|
+
Category: `social-proof`
|
|
6
|
+
|
|
7
|
+
## Files
|
|
8
|
+
|
|
9
|
+
- `sections/runwell-testimonials-medvi.liquid`
|
|
10
|
+
- `assets/runwell-testimonials-medvi.css`
|
|
11
|
+
|
|
12
|
+
## Layout
|
|
13
|
+
|
|
14
|
+
- Header: centered eyebrow + 2-color split headline + lede.
|
|
15
|
+
- Grid: responsive 1/2/4 columns at 320 / 768 / 1024 px breakpoints. Each cell has a 5:6 aspect ratio; photos and quote cards line up.
|
|
16
|
+
- Cells flow naturally; designer arranges blocks in the Theme Editor for the photo + quote interleave.
|
|
17
|
+
- Up to 12 blocks (max_blocks).
|
|
18
|
+
|
|
19
|
+
## Tokens consumed
|
|
20
|
+
|
|
21
|
+
Brand: `--runwell-oat`, `--runwell-primary`, `--runwell-tertiary`. Design system: `--runwell-radius-lg`. Typography: `--runwell-eyebrow-size`, `--runwell-h2-size`, `--runwell-body-size`, `--runwell-meta-size`, `--runwell-cta-size`.
|
|
22
|
+
|
|
23
|
+
## Block types
|
|
24
|
+
|
|
25
|
+
- **quote**: author, rating (range 0 to 5), quote (richtext). Renders as padded card with author + star rating row + quote body.
|
|
26
|
+
- **photo**: image (uploaded) with image_asset fallback, image_focal (center / top / bottom). Renders as full-bleed portrait card with `object-fit: cover` driven by focal point.
|
|
27
|
+
|
|
28
|
+
## Lineage
|
|
29
|
+
|
|
30
|
+
Extracted from `https://home.medvi.org/` on 2026-05-06. Framer label: `What Our Clients Say Parallax Scroll Section`. Scrape path: `_clients/capital-v/lushi/research/medvi-reference/site-scrape/`.
|
|
31
|
+
|
|
32
|
+
The medvi reference uses an interleaved row pattern: row 1 = `[photo, quote, quote, quote]`, row 2 = `[quote, quote, photo, quote]`. We keep the layout flexible (CSS grid plus block order) rather than encoding the pattern in code; designers reproduce the rhythm by ordering blocks.
|
|
33
|
+
|
|
34
|
+
## Tenant overrides
|
|
35
|
+
|
|
36
|
+
- `runwell.config.json` brand block: rewires the global tokens.
|
|
37
|
+
- Per-instance Theme Editor: header copy, accent color, card background, star color, bg band, plus block ordering and content.
|
|
38
|
+
|
|
39
|
+
## Notes
|
|
40
|
+
|
|
41
|
+
- Photo focal point: medvi crops portraits tight with face at top of frame. Default is `center`; use `top` for headshots and `bottom` for full-body shots where the bottom should anchor the visual.
|
|
42
|
+
- Star rating: ASCII `★` glyph in the configured color. Zero rating hides the star row.
|
|
43
|
+
- Default preset includes 6 quote cards + 2 photo placeholders, using medvi's reference quotes (with anonymised first names). Tenants replace the preset content with their own customer testimonials post-launch.
|
|
44
|
+
- Mobile: grid collapses to 1 column, then 2 columns at 768px, then 4 columns at 1024px.
|
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
/* Runwell testimonials-medvi.
|
|
2
|
+
|
|
3
|
+
Two horizontal marquee rows. Each row scrolls continuously; row 2
|
|
4
|
+
reverses direction. Cards are landscape (~16:9), ~400px wide. Photos
|
|
5
|
+
fill cards with object-fit cover. Quote cards have tinted background,
|
|
6
|
+
padded interior with author + star row + quote body.
|
|
7
|
+
|
|
8
|
+
Loop: each row's content rendered twice in DOM. CSS animation
|
|
9
|
+
translates by -50% (one full set width) over the configured duration
|
|
10
|
+
(--rw-tm-duration). When set 1 leaves viewport, set 2 has taken its
|
|
11
|
+
place; loop is seamless.
|
|
12
|
+
|
|
13
|
+
Accessibility: pause on hover and on focus-within for users navigating
|
|
14
|
+
with keyboard. Stops entirely on prefers-reduced-motion.
|
|
15
|
+
|
|
16
|
+
Tokens: --runwell-oat, --runwell-primary, --runwell-tertiary,
|
|
17
|
+
--runwell-radius-lg.
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
.runwell-testimonials-medvi {
|
|
21
|
+
padding: clamp(3rem, 8vw, 7rem) 0;
|
|
22
|
+
font-family: var(--font-body-family, inherit);
|
|
23
|
+
color: var(--runwell-tertiary, #0B3D38);
|
|
24
|
+
|
|
25
|
+
/* css custom properties driven from Liquid; defaults below are fallbacks */
|
|
26
|
+
--rw-tm-duration: 60s;
|
|
27
|
+
--rw-tm-card-w: 400px;
|
|
28
|
+
--rw-tm-gap: 20px;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
.runwell-testimonials-medvi--bg-white {
|
|
32
|
+
background: #ffffff;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.runwell-testimonials-medvi--bg-oat {
|
|
36
|
+
background: var(--runwell-oat, #F5F0EE);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
.runwell-testimonials-medvi--bg-celadon-tint {
|
|
40
|
+
background: color-mix(in srgb, var(--runwell-celadon, #ADDDBD) 18%, white);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/* ----- Header ----- */
|
|
44
|
+
|
|
45
|
+
.runwell-testimonials-medvi__header {
|
|
46
|
+
max-width: 760px;
|
|
47
|
+
margin: 0 auto clamp(2rem, 5vw, 4rem);
|
|
48
|
+
padding: 0 clamp(1.5rem, 4vw, 3rem);
|
|
49
|
+
text-align: center;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
.runwell-testimonials-medvi__eyebrow {
|
|
53
|
+
font-size: var(--runwell-eyebrow-size, 0.78rem);
|
|
54
|
+
letter-spacing: 0.16em;
|
|
55
|
+
text-transform: uppercase;
|
|
56
|
+
font-weight: 600;
|
|
57
|
+
margin: 0 0 1rem;
|
|
58
|
+
opacity: 0.85;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.runwell-testimonials-medvi__headline {
|
|
62
|
+
font-family: var(--font-heading-family, inherit);
|
|
63
|
+
font-size: var(--runwell-h2-size, clamp(3rem, 5vw, 4.8rem));
|
|
64
|
+
font-weight: 700;
|
|
65
|
+
line-height: 1.1;
|
|
66
|
+
margin: 0;
|
|
67
|
+
letter-spacing: -0.01em;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
.runwell-testimonials-medvi__headline-pre,
|
|
71
|
+
.runwell-testimonials-medvi__headline-post {
|
|
72
|
+
display: inline;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
.runwell-testimonials-medvi__lede {
|
|
76
|
+
font-size: var(--runwell-body-size, 1.6rem);
|
|
77
|
+
line-height: 1.5;
|
|
78
|
+
opacity: 0.85;
|
|
79
|
+
margin: 1rem auto 0;
|
|
80
|
+
max-width: 50ch;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/* ----- Marquee rows ----- */
|
|
84
|
+
|
|
85
|
+
.runwell-testimonials-medvi__rows {
|
|
86
|
+
display: flex;
|
|
87
|
+
flex-direction: column;
|
|
88
|
+
gap: clamp(0.75rem, 1.5vw, 1.25rem);
|
|
89
|
+
width: 100%;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
.runwell-testimonials-medvi__row {
|
|
93
|
+
position: relative;
|
|
94
|
+
width: 100%;
|
|
95
|
+
overflow: hidden; /* clip the moving track at viewport edges */
|
|
96
|
+
-webkit-mask-image: linear-gradient(to right, transparent 0, black 4%, black 96%, transparent 100%);
|
|
97
|
+
mask-image: linear-gradient(to right, transparent 0, black 4%, black 96%, transparent 100%);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
.runwell-testimonials-medvi__track {
|
|
101
|
+
list-style: none;
|
|
102
|
+
margin: 0;
|
|
103
|
+
padding: 0;
|
|
104
|
+
display: flex;
|
|
105
|
+
flex-wrap: nowrap;
|
|
106
|
+
align-items: center;
|
|
107
|
+
gap: var(--rw-tm-gap, 20px);
|
|
108
|
+
width: max-content;
|
|
109
|
+
animation: runwell-tm-marquee var(--rw-tm-duration, 60s) linear infinite;
|
|
110
|
+
will-change: transform;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/* Row 2 direction: same (default, medvi-faithful) keeps both rows scrolling left.
|
|
114
|
+
`reverse` flips row 2 to create visual rhythm. */
|
|
115
|
+
.runwell-testimonials-medvi__rows--row2-reverse .runwell-testimonials-medvi__row--2 .runwell-testimonials-medvi__track {
|
|
116
|
+
animation-direction: reverse;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
.runwell-testimonials-medvi__row:hover .runwell-testimonials-medvi__track,
|
|
120
|
+
.runwell-testimonials-medvi__row:focus-within .runwell-testimonials-medvi__track {
|
|
121
|
+
animation-play-state: paused;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
@keyframes runwell-tm-marquee {
|
|
125
|
+
from { transform: translateX(0); }
|
|
126
|
+
to { transform: translateX(calc(-50% - var(--rw-tm-gap, 20px) / 2)); }
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
@media (prefers-reduced-motion: reduce) {
|
|
130
|
+
.runwell-testimonials-medvi__track {
|
|
131
|
+
animation: none;
|
|
132
|
+
transform: none;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/* ----- Items + cards ----- */
|
|
137
|
+
|
|
138
|
+
.runwell-testimonials-medvi__item {
|
|
139
|
+
flex: 0 0 auto;
|
|
140
|
+
width: var(--rw-tm-card-w, 400px);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
.runwell-testimonials-medvi__card {
|
|
144
|
+
margin: 0;
|
|
145
|
+
border-radius: var(--runwell-radius-lg, 20px);
|
|
146
|
+
overflow: hidden;
|
|
147
|
+
display: flex;
|
|
148
|
+
flex-direction: column;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/* Per-card aspect ratios: photos default 16:9 (medvi-faithful native landscape),
|
|
152
|
+
quotes default 5:3 (taller for multi-line text). Either can be overridden
|
|
153
|
+
per-instance via section settings. */
|
|
154
|
+
.runwell-testimonials-medvi__rows--photo-aspect-16-9 .runwell-testimonials-medvi__card--photo { aspect-ratio: 16 / 9; }
|
|
155
|
+
.runwell-testimonials-medvi__rows--photo-aspect-5-3 .runwell-testimonials-medvi__card--photo { aspect-ratio: 5 / 3; }
|
|
156
|
+
.runwell-testimonials-medvi__rows--photo-aspect-4-3 .runwell-testimonials-medvi__card--photo { aspect-ratio: 4 / 3; }
|
|
157
|
+
.runwell-testimonials-medvi__rows--photo-aspect-1-1 .runwell-testimonials-medvi__card--photo { aspect-ratio: 1 / 1; }
|
|
158
|
+
|
|
159
|
+
.runwell-testimonials-medvi__rows--quote-aspect-16-9 .runwell-testimonials-medvi__card--quote { aspect-ratio: 16 / 9; }
|
|
160
|
+
.runwell-testimonials-medvi__rows--quote-aspect-5-3 .runwell-testimonials-medvi__card--quote { aspect-ratio: 5 / 3; }
|
|
161
|
+
.runwell-testimonials-medvi__rows--quote-aspect-4-3 .runwell-testimonials-medvi__card--quote { aspect-ratio: 4 / 3; }
|
|
162
|
+
.runwell-testimonials-medvi__rows--quote-aspect-1-1 .runwell-testimonials-medvi__card--quote { aspect-ratio: 1 / 1; }
|
|
163
|
+
|
|
164
|
+
/* Quote card */
|
|
165
|
+
.runwell-testimonials-medvi__card--quote {
|
|
166
|
+
padding: clamp(1.5rem, 2.2vw, 2rem) clamp(1.75rem, 2.6vw, 2.25rem);
|
|
167
|
+
justify-content: flex-start;
|
|
168
|
+
gap: 0.85rem;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
.runwell-testimonials-medvi__card-head {
|
|
172
|
+
display: flex;
|
|
173
|
+
align-items: center;
|
|
174
|
+
justify-content: space-between;
|
|
175
|
+
gap: 1rem;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
.runwell-testimonials-medvi__card-author {
|
|
179
|
+
font-family: var(--font-heading-family, inherit);
|
|
180
|
+
font-size: var(--runwell-body-size, 1.6rem);
|
|
181
|
+
font-weight: 700;
|
|
182
|
+
margin: 0;
|
|
183
|
+
line-height: 1.2;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
.runwell-testimonials-medvi__card-rating {
|
|
187
|
+
display: inline-flex;
|
|
188
|
+
gap: 0.15em;
|
|
189
|
+
font-size: var(--runwell-body-size, 1.6rem);
|
|
190
|
+
letter-spacing: 0.05em;
|
|
191
|
+
line-height: 1;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
.runwell-testimonials-medvi__star {
|
|
195
|
+
line-height: 1;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
.runwell-testimonials-medvi__card-quote {
|
|
199
|
+
font-size: var(--runwell-cta-size, 1.5rem);
|
|
200
|
+
line-height: 1.5;
|
|
201
|
+
opacity: 0.85;
|
|
202
|
+
flex: 1 1 auto;
|
|
203
|
+
display: -webkit-box;
|
|
204
|
+
-webkit-line-clamp: 6;
|
|
205
|
+
-webkit-box-orient: vertical;
|
|
206
|
+
overflow: hidden;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
.runwell-testimonials-medvi__card-quote p {
|
|
210
|
+
margin: 0 0 0.4em;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
.runwell-testimonials-medvi__card-quote p:last-child {
|
|
214
|
+
margin-bottom: 0;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
/* Photo card */
|
|
218
|
+
.runwell-testimonials-medvi__card--photo {
|
|
219
|
+
background: var(--runwell-oat, #F5F0EE);
|
|
220
|
+
padding: 0;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
.runwell-testimonials-medvi__card--photo img {
|
|
224
|
+
display: block;
|
|
225
|
+
width: 100%;
|
|
226
|
+
height: 100%;
|
|
227
|
+
object-fit: cover;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
.runwell-testimonials-medvi__card--photo-focal-center img { object-position: center; }
|
|
231
|
+
.runwell-testimonials-medvi__card--photo-focal-top img { object-position: 50% 25%; }
|
|
232
|
+
.runwell-testimonials-medvi__card--photo-focal-bottom img { object-position: 50% 75%; }
|
|
233
|
+
|
|
234
|
+
/* Mobile: smaller card width but keep marquee */
|
|
235
|
+
@media (max-width: 767px) {
|
|
236
|
+
.runwell-testimonials-medvi {
|
|
237
|
+
--rw-tm-card-w: 280px;
|
|
238
|
+
}
|
|
239
|
+
}
|