@runwell/shopify-toolkit 0.15.2 → 0.15.4

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.
@@ -38,7 +38,7 @@
38
38
  </th>
39
39
  {%- for block in section.blocks -%}
40
40
  <th style="text-align: left; padding: 0.8rem 1rem; vertical-align: bottom; border-bottom: 2px solid currentColor;">
41
- <div style="font-family: var(--font-heading-family); font-style: italic; font-weight: 400; font-size: var(--runwell-cta-size); line-height: 1.2; margin-bottom: 0.2rem;">
41
+ <div style="font-family: var(--font-heading-family); font-style: italic; font-weight: 400; font-size: var(--runwell-h4-size); line-height: 1.2; margin-bottom: 0.2rem;">
42
42
  {{ block.settings.column_title }}
43
43
  </div>
44
44
  {%- if block.settings.column_subtitle != blank -%}
@@ -1,9 +1,17 @@
1
- /* Lushi exit-intent popup. Triggers on mouseleave to top of viewport
1
+ /* Runwell exit-intent popup. Triggers on mouseleave to top of viewport
2
2
  on desktop, after 30s of activity on mobile. Suppressed for 30 days
3
3
  after dismiss or sign-up. */
4
4
  (function () {
5
5
  if (typeof window === 'undefined') return;
6
- var KEY = 'lushi_exit_seen';
6
+ var KEY = 'runwell_exit_seen';
7
+ // Migrate from legacy Lushi-flavored key once. Drop after 2026-Q3.
8
+ try {
9
+ var legacy = localStorage.getItem('lushi_exit_seen');
10
+ if (legacy && !localStorage.getItem(KEY)) {
11
+ localStorage.setItem(KEY, legacy);
12
+ localStorage.removeItem('lushi_exit_seen');
13
+ }
14
+ } catch (e) { /* private mode or storage disabled */ }
7
15
  var DAYS = 30;
8
16
  var modal = document.querySelector('[data-runwell-exit-intent]');
9
17
  if (!modal) return;
@@ -34,7 +34,7 @@
34
34
  {{ linked_article.excerpt_or_content | strip_html | truncate: 180 }}
35
35
  </p>
36
36
  <a href="{{ linked_article.url }}"
37
- style="display: inline-block; padding: 0.85rem 1.4rem; border-radius: 4px; background: {{ section.settings.text_color }}; color: {{ section.settings.background_color }}; font-weight: 700; font-size: var(--runwell-caption-size); letter-spacing: 0.04em; text-transform: uppercase; text-decoration: none;">
37
+ style="display: inline-block; padding: 0.85rem 1.4rem; border-radius: 4px; background: {{ section.settings.text_color }}; color: {{ section.settings.background_color }}; font-weight: 700; font-size: var(--runwell-cta-size); letter-spacing: 0.04em; text-transform: uppercase; text-decoration: none;">
38
38
  Read the journal &rarr;
39
39
  </a>
40
40
  {%- else -%}
@@ -48,7 +48,7 @@
48
48
  {%- endif -%}
49
49
  {%- if section.settings.fallback_link_url != blank -%}
50
50
  <a href="{{ section.settings.fallback_link_url }}"
51
- style="display: inline-block; padding: 0.85rem 1.4rem; border-radius: 4px; background: {{ section.settings.text_color }}; color: {{ section.settings.background_color }}; font-weight: 700; font-size: var(--runwell-caption-size); letter-spacing: 0.04em; text-transform: uppercase; text-decoration: none;">
51
+ style="display: inline-block; padding: 0.85rem 1.4rem; border-radius: 4px; background: {{ section.settings.text_color }}; color: {{ section.settings.background_color }}; font-weight: 700; font-size: var(--runwell-cta-size); letter-spacing: 0.04em; text-transform: uppercase; text-decoration: none;">
52
52
  {{ section.settings.fallback_link_label | default: 'Read more' }} &rarr;
53
53
  </a>
54
54
  {%- endif -%}
@@ -35,7 +35,7 @@
35
35
  margin: 0 0 0.8rem 0;
36
36
  }
37
37
  .runwell-ty-upsell__lede {
38
- font-size: var(--runwell-meta-size);
38
+ font-size: var(--runwell-body-size);
39
39
  line-height: 1.5;
40
40
  margin: 0;
41
41
  opacity: 0.85;
@@ -98,11 +98,11 @@
98
98
  line-height: 1.2;
99
99
  }
100
100
  .runwell-ty-card__price {
101
- font-size: var(--runwell-caption-size);
101
+ font-size: var(--runwell-cta-size);
102
102
  opacity: 0.7;
103
103
  }
104
104
  .runwell-ty-card__cta {
105
- font-size: var(--runwell-caption-size);
105
+ font-size: var(--runwell-cta-size);
106
106
  font-weight: 700;
107
107
  text-decoration: underline;
108
108
  text-underline-offset: 4px;
@@ -124,11 +124,11 @@
124
124
  }
125
125
 
126
126
  function inject() {
127
- var host = document.querySelector('[data-lushi-upsell]');
127
+ var host = document.querySelector('[data-runwell-upsell]');
128
128
  if (host) return host;
129
129
  var anchor = document.querySelector('.os-step__info, .os-step, .step__sections, .main__content, main') || document.body;
130
130
  var div = document.createElement('div');
131
- div.setAttribute('data-lushi-upsell', '');
131
+ div.setAttribute('data-runwell-upsell', '');
132
132
  anchor.appendChild(div);
133
133
  return div;
134
134
  }
@@ -1,9 +1,17 @@
1
- /* Lushi: track recently viewed products in localStorage and render a
2
- "Recently viewed" section on PDP and home. Replaces the "Recently
3
- Viewed" feature from Vitals/Pagefly without the app overhead. */
1
+ /* Runwell recently-viewed: track recently viewed products in localStorage
2
+ and render a "Recently viewed" section on PDP and home. Replaces the
3
+ "Recently Viewed" feature from Vitals/Pagefly without the app overhead. */
4
4
  (function () {
5
5
  if (typeof window === 'undefined') return;
6
- var KEY = 'lushi_recently_viewed';
6
+ var KEY = 'runwell_recently_viewed';
7
+ // Migrate from legacy Lushi-flavored key once. Drop after 2026-Q3.
8
+ try {
9
+ var legacy = localStorage.getItem('lushi_recently_viewed');
10
+ if (legacy && !localStorage.getItem(KEY)) {
11
+ localStorage.setItem(KEY, legacy);
12
+ localStorage.removeItem('lushi_recently_viewed');
13
+ }
14
+ } catch (e) { /* private mode or storage disabled */ }
7
15
  var MAX = 8;
8
16
 
9
17
  function read() {
@@ -17,7 +17,7 @@
17
17
  {%- endif -%}
18
18
  <div style="flex: 1 1 auto;">
19
19
  {%- if section.settings.heading != blank -%}
20
- <h3 style="font-family: var(--font-heading-family); font-style: italic; font-weight: 400; font-size: var(--runwell-cta-size); line-height: 1.2; margin: 0 0 0.3rem 0;">
20
+ <h3 style="font-family: var(--font-heading-family); font-style: italic; font-weight: 400; font-size: var(--runwell-h4-size); line-height: 1.2; margin: 0 0 0.3rem 0;">
21
21
  {{ section.settings.heading }}
22
22
  </h3>
23
23
  {%- endif -%}
@@ -57,7 +57,7 @@
57
57
  .runwell-sticky-atc__title {
58
58
  font-family: var(--font-heading-family, serif);
59
59
  font-style: italic;
60
- font-size: var(--runwell-meta-size);
60
+ font-size: var(--runwell-body-size);
61
61
  font-weight: 400;
62
62
  line-height: 1.2;
63
63
  color: var(--runwell-primary, #1A1A1A);
@@ -68,7 +68,7 @@
68
68
 
69
69
  .runwell-sticky-atc__price {
70
70
  font-family: var(--font-body-family, sans-serif);
71
- font-size: var(--runwell-caption-size);
71
+ font-size: var(--runwell-body-size);
72
72
  font-weight: 500;
73
73
  color: var(--runwell-primary, #1A1A1A);
74
74
  opacity: 0.8;
@@ -86,7 +86,7 @@
86
86
  border-radius: 0;
87
87
  padding: 0.75rem 1.5rem;
88
88
  font-family: var(--font-body-family, sans-serif);
89
- font-size: var(--runwell-caption-size);
89
+ font-size: var(--runwell-body-size);
90
90
  font-weight: 600;
91
91
  letter-spacing: 0.04em;
92
92
  text-transform: uppercase;
@@ -108,10 +108,10 @@
108
108
  padding: 0.6rem 0.9rem;
109
109
  }
110
110
  .runwell-sticky-atc__title {
111
- font-size: var(--runwell-caption-size);
111
+ font-size: var(--runwell-body-size);
112
112
  }
113
113
  .runwell-sticky-atc__cta {
114
114
  padding: 0.6rem 1.1rem;
115
- font-size: var(--runwell-eyebrow-size);
115
+ font-size: var(--runwell-cta-size);
116
116
  }
117
117
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@runwell/shopify-toolkit",
3
- "version": "0.15.2",
3
+ "version": "0.15.4",
4
4
  "description": "Reusable Shopify theme modules from Runwell. Replaces typically app-driven features (reviews, wishlist, urgency, FAQ, post-purchase upsell, exit popups, free-ship progress, sticky ATC, testimonials, badges, bundles) with native Liquid + JS + CSS that ship across multiple client themes via a config-driven sync CLI.",
5
5
  "type": "module",
6
6
  "main": "lib/index.js",