@runwell/shopify-toolkit 0.18.0 → 0.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/bin/runwell-shopify +10 -1
  2. package/lib/list.js +22 -9
  3. package/lib/qa-bundles.js +117 -0
  4. package/lib/qa.js +147 -13
  5. package/modules/INDEX.md +14 -5
  6. package/modules/bundle-builder/README.md +6 -1
  7. package/modules/bundle-builder/module.json +5 -1
  8. package/modules/cart-cross-sell/snippets/runwell-cart-xsell.liquid +16 -0
  9. package/modules/runwell-bundle-system/README.md +35 -0
  10. package/modules/runwell-bundle-system/admin-metafields.json +46 -0
  11. package/modules/runwell-bundle-system/assets/runwell-bundle-system.css +861 -0
  12. package/modules/runwell-bundle-system/assets/runwell-bundle-system.js +287 -0
  13. package/modules/runwell-bundle-system/module.json +126 -0
  14. package/modules/runwell-bundle-system/qa/mobile-checklist.md +105 -0
  15. package/modules/runwell-bundle-system/sections/runwell-bundle-cart-xsell.liquid +59 -0
  16. package/modules/runwell-bundle-system/sections/runwell-bundle-collection.liquid +121 -0
  17. package/modules/runwell-bundle-system/sections/runwell-bundle-home-stacks.liquid +77 -0
  18. package/modules/runwell-bundle-system/sections/runwell-bundle-pdp-banner.liquid +50 -0
  19. package/modules/runwell-bundle-system/sections/runwell-bundle-pdp-pairs-with.liquid +72 -0
  20. package/modules/runwell-bundle-system/sections/runwell-bundle-pdp.liquid +105 -0
  21. package/modules/runwell-bundle-system/settings.json +25 -0
  22. package/modules/runwell-bundle-system/snippets/runwell-bundle-card.liquid +70 -0
  23. package/modules/runwell-bundle-system/snippets/runwell-bundle-cross-supplier.liquid +18 -0
  24. package/modules/runwell-bundle-system/snippets/runwell-bundle-data.liquid +67 -0
  25. package/modules/runwell-bundle-system/snippets/runwell-bundle-fomo.liquid +32 -0
  26. package/modules/runwell-bundle-system/snippets/runwell-bundle-free-gift.liquid +34 -0
  27. package/modules/runwell-bundle-system/snippets/runwell-bundle-multi-product.liquid +86 -0
  28. package/modules/runwell-bundle-system/snippets/runwell-bundle-pricing.liquid +30 -0
  29. package/modules/runwell-bundle-system/snippets/runwell-bundle-quantity-tiers.liquid +73 -0
  30. package/package.json +1 -1
@@ -0,0 +1,861 @@
1
+ /* runwell-bundle-system: assets/runwell-bundle-system.css.
2
+ Styles for the bundle PDP and shared bundle UI. Scoped to the
3
+ .runwell-bundle-system namespace. Brand tokens come from
4
+ _shared/css-tokens (--runwell-primary, --runwell-accent,
5
+ --runwell-cream, --runwell-oat, --runwell-celadon, --runwell-blue,
6
+ --runwell-tertiary, plus radii and shadows).
7
+
8
+ Layout: mobile first at 375px, side-by-side at 1024px+.
9
+ Tap targets: 44px floor for any interactive element. */
10
+
11
+ .runwell-bundle-system {
12
+ font-family: inherit;
13
+ color: inherit;
14
+ }
15
+
16
+ .runwell-bundle-system__inner {
17
+ display: grid;
18
+ grid-template-columns: 1fr;
19
+ gap: 24px;
20
+ }
21
+
22
+ @media (min-width: 1024px) {
23
+ .runwell-bundle-system__inner {
24
+ grid-template-columns: 1fr 1fr;
25
+ gap: 48px;
26
+ align-items: start;
27
+ }
28
+ }
29
+
30
+ .runwell-bundle-system__gallery-image {
31
+ width: 100%;
32
+ height: auto;
33
+ border-radius: var(--runwell-radius-md, 12px);
34
+ display: block;
35
+ }
36
+
37
+ .runwell-bundle-system__details {
38
+ display: flex;
39
+ flex-direction: column;
40
+ gap: 16px;
41
+ }
42
+
43
+ .runwell-bundle-system__sale-prefix {
44
+ margin: 0;
45
+ font-size: 0.875rem;
46
+ letter-spacing: 0.06em;
47
+ text-transform: uppercase;
48
+ color: var(--runwell-accent, currentColor);
49
+ }
50
+
51
+ .runwell-bundle-system__title {
52
+ margin: 0;
53
+ font-size: 1.75rem;
54
+ line-height: 1.2;
55
+ }
56
+
57
+ @media (min-width: 768px) {
58
+ .runwell-bundle-system__title {
59
+ font-size: 2.25rem;
60
+ }
61
+ }
62
+
63
+ .runwell-bundle-system__description {
64
+ margin: 0;
65
+ font-size: 1rem;
66
+ line-height: 1.5;
67
+ opacity: 0.85;
68
+ }
69
+
70
+ /* ---------- Quantity tiers (Mode A) ---------- */
71
+
72
+ .runwell-bundle-system__form {
73
+ margin: 0;
74
+ display: flex;
75
+ flex-direction: column;
76
+ gap: 16px;
77
+ }
78
+
79
+ .runwell-bundle-system__tiers {
80
+ border: 0;
81
+ padding: 0;
82
+ margin: 0;
83
+ display: flex;
84
+ flex-direction: column;
85
+ gap: 12px;
86
+ }
87
+
88
+ .runwell-bundle-system__tier {
89
+ position: relative;
90
+ display: flex;
91
+ flex-direction: column;
92
+ gap: 8px;
93
+ padding: 16px;
94
+ min-height: 44px;
95
+ border: 2px solid color-mix(in srgb, currentColor 12%, transparent);
96
+ border-radius: var(--runwell-radius-md, 12px);
97
+ background: var(--runwell-surface-card, #fff);
98
+ cursor: pointer;
99
+ transition: border-color 120ms ease, background 120ms ease;
100
+ }
101
+
102
+ .runwell-bundle-system__tier:hover {
103
+ border-color: color-mix(in srgb, var(--runwell-accent, currentColor) 50%, transparent);
104
+ }
105
+
106
+ .runwell-bundle-system__tier-input {
107
+ position: absolute;
108
+ opacity: 0;
109
+ pointer-events: none;
110
+ }
111
+
112
+ .runwell-bundle-system__tier:has(.runwell-bundle-system__tier-input:checked) {
113
+ border-color: var(--runwell-accent, currentColor);
114
+ background: color-mix(in srgb, var(--runwell-accent, currentColor) 6%, var(--runwell-surface-card, #fff));
115
+ }
116
+
117
+ .runwell-bundle-system__tier-row {
118
+ display: flex;
119
+ align-items: center;
120
+ gap: 12px;
121
+ flex-wrap: wrap;
122
+ }
123
+
124
+ .runwell-bundle-system__tier-row--prices {
125
+ justify-content: space-between;
126
+ font-size: 0.95rem;
127
+ }
128
+
129
+ .runwell-bundle-system__tier-qty {
130
+ font-weight: 600;
131
+ font-size: 1rem;
132
+ }
133
+
134
+ .runwell-bundle-system__tier-savings-badge {
135
+ margin-left: auto;
136
+ padding: 4px 10px;
137
+ font-size: 0.8rem;
138
+ font-weight: 600;
139
+ border-radius: 999px;
140
+ background: var(--runwell-accent, currentColor);
141
+ color: var(--runwell-cream, #fff);
142
+ }
143
+
144
+ .runwell-bundle-system__tier-total {
145
+ font-weight: 700;
146
+ font-size: 1.05rem;
147
+ }
148
+
149
+ .runwell-bundle-system__tier-strikethrough {
150
+ text-decoration: line-through;
151
+ opacity: 0.55;
152
+ font-size: 0.9rem;
153
+ }
154
+
155
+ .runwell-bundle-system__tier-per-unit {
156
+ font-size: 0.85rem;
157
+ opacity: 0.7;
158
+ margin-left: auto;
159
+ }
160
+
161
+ .runwell-bundle-system__atc {
162
+ min-height: 48px;
163
+ font-size: 1rem;
164
+ font-weight: 600;
165
+ cursor: pointer;
166
+ }
167
+
168
+ /* ---------- Pricing block (shared, used by Mode B and bundle cards) ---------- */
169
+
170
+ .runwell-bundle-system__pricing {
171
+ display: flex;
172
+ align-items: baseline;
173
+ gap: 12px;
174
+ flex-wrap: wrap;
175
+ }
176
+
177
+ .runwell-bundle-system__pricing-current {
178
+ font-size: 1.5rem;
179
+ font-weight: 700;
180
+ }
181
+
182
+ .runwell-bundle-system__pricing-strikethrough {
183
+ text-decoration: line-through;
184
+ opacity: 0.55;
185
+ font-size: 1rem;
186
+ }
187
+
188
+ .runwell-bundle-system__pricing-badge {
189
+ padding: 4px 10px;
190
+ font-size: 0.8rem;
191
+ font-weight: 600;
192
+ border-radius: 999px;
193
+ background: var(--runwell-accent, currentColor);
194
+ color: var(--runwell-cream, #fff);
195
+ }
196
+
197
+ /* ---------- Components list (Mode B) ---------- */
198
+
199
+ .runwell-bundle-system__components {
200
+ display: flex;
201
+ flex-direction: column;
202
+ gap: 8px;
203
+ padding: 16px;
204
+ border-radius: var(--runwell-radius-md, 12px);
205
+ background: var(--runwell-surface-card, #fff);
206
+ border: 1px solid color-mix(in srgb, currentColor 8%, transparent);
207
+ }
208
+
209
+ .runwell-bundle-system__components-heading {
210
+ margin: 0 0 4px 0;
211
+ font-size: 0.85rem;
212
+ font-weight: 600;
213
+ letter-spacing: 0.04em;
214
+ text-transform: uppercase;
215
+ opacity: 0.75;
216
+ }
217
+
218
+ .runwell-bundle-system__components-list {
219
+ list-style: none;
220
+ margin: 0;
221
+ padding: 0;
222
+ display: flex;
223
+ flex-direction: column;
224
+ gap: 10px;
225
+ }
226
+
227
+ .runwell-bundle-system__component {
228
+ display: grid;
229
+ grid-template-columns: auto auto 1fr auto;
230
+ align-items: center;
231
+ gap: 10px;
232
+ font-size: 0.95rem;
233
+ }
234
+
235
+ .runwell-bundle-system__component-thumb {
236
+ width: 60px;
237
+ height: 60px;
238
+ object-fit: cover;
239
+ border-radius: var(--runwell-radius-sm, 4px);
240
+ display: block;
241
+ }
242
+
243
+ .runwell-bundle-system__component-thumb--placeholder {
244
+ background: color-mix(in srgb, currentColor 6%, transparent);
245
+ }
246
+
247
+ .runwell-bundle-system__component-qty {
248
+ font-weight: 700;
249
+ font-variant-numeric: tabular-nums;
250
+ opacity: 0.8;
251
+ }
252
+
253
+ .runwell-bundle-system__component-name {
254
+ font-weight: 500;
255
+ line-height: 1.3;
256
+ }
257
+
258
+ .runwell-bundle-system__component-price {
259
+ font-weight: 600;
260
+ font-variant-numeric: tabular-nums;
261
+ }
262
+
263
+ .runwell-bundle-system__component--empty {
264
+ grid-template-columns: 1fr;
265
+ opacity: 0.7;
266
+ font-size: 0.9rem;
267
+ }
268
+
269
+ @media (min-width: 1024px) {
270
+ .runwell-bundle-system__component-thumb,
271
+ .runwell-bundle-system__component-thumb--placeholder {
272
+ width: 80px;
273
+ height: 80px;
274
+ }
275
+ }
276
+
277
+ /* ---------- Cross-supplier disclosure ---------- */
278
+
279
+ .runwell-bundle-system__cross-supplier {
280
+ display: flex;
281
+ align-items: flex-start;
282
+ gap: 10px;
283
+ margin: 0;
284
+ padding: 10px 12px;
285
+ border-radius: var(--runwell-radius-sm, 4px);
286
+ background: color-mix(in srgb, var(--runwell-blue, currentColor) 8%, transparent);
287
+ font-size: 0.85rem;
288
+ line-height: 1.4;
289
+ }
290
+
291
+ .runwell-bundle-system__cross-supplier-icon {
292
+ display: inline-flex;
293
+ align-items: center;
294
+ justify-content: center;
295
+ width: 18px;
296
+ height: 18px;
297
+ border-radius: 50%;
298
+ background: var(--runwell-blue, currentColor);
299
+ color: var(--runwell-cream, #fff);
300
+ font-size: 0.75rem;
301
+ font-weight: 700;
302
+ flex-shrink: 0;
303
+ }
304
+
305
+ /* ---------- FOMO ---------- */
306
+
307
+ .runwell-bundle-system__fomo {
308
+ display: flex;
309
+ flex-direction: column;
310
+ gap: 6px;
311
+ padding: 12px 14px;
312
+ border-radius: var(--runwell-radius-sm, 4px);
313
+ background: color-mix(in srgb, var(--runwell-accent, currentColor) 8%, transparent);
314
+ font-size: 0.9rem;
315
+ }
316
+
317
+ .runwell-bundle-system__fomo p {
318
+ margin: 0;
319
+ }
320
+
321
+ .runwell-bundle-system__fomo-label {
322
+ opacity: 0.75;
323
+ margin-right: 6px;
324
+ }
325
+
326
+ .runwell-bundle-system__fomo-time {
327
+ font-weight: 600;
328
+ font-variant-numeric: tabular-nums;
329
+ }
330
+
331
+ .runwell-bundle-system__fomo-scarcity strong {
332
+ color: var(--runwell-accent, currentColor);
333
+ }
334
+
335
+ /* ---------- Free gift ---------- */
336
+
337
+ .runwell-bundle-system__free-gift {
338
+ display: flex;
339
+ flex-direction: column;
340
+ gap: 8px;
341
+ padding: 12px 14px;
342
+ border-radius: var(--runwell-radius-md, 12px);
343
+ background: var(--runwell-surface-card-alt, #f5f5f5);
344
+ }
345
+
346
+ .runwell-bundle-system__free-gift-label {
347
+ margin: 0;
348
+ font-size: 0.85rem;
349
+ font-weight: 600;
350
+ letter-spacing: 0.04em;
351
+ text-transform: uppercase;
352
+ }
353
+
354
+ .runwell-bundle-system__free-gift-product {
355
+ display: flex;
356
+ align-items: center;
357
+ gap: 12px;
358
+ }
359
+
360
+ .runwell-bundle-system__free-gift-thumb {
361
+ width: 60px;
362
+ height: 60px;
363
+ object-fit: cover;
364
+ border-radius: var(--runwell-radius-sm, 4px);
365
+ }
366
+
367
+ .runwell-bundle-system__free-gift-name {
368
+ flex: 1;
369
+ font-size: 0.95rem;
370
+ }
371
+
372
+ .runwell-bundle-system__free-gift-price {
373
+ display: flex;
374
+ align-items: baseline;
375
+ gap: 6px;
376
+ font-size: 0.95rem;
377
+ }
378
+
379
+ /* ---------- Empty state ---------- */
380
+
381
+ .runwell-bundle-system__empty {
382
+ margin: 0;
383
+ padding: 16px;
384
+ border-radius: var(--runwell-radius-md, 12px);
385
+ background: var(--runwell-surface-card-alt, #f5f5f5);
386
+ font-size: 0.95rem;
387
+ opacity: 0.75;
388
+ }
389
+
390
+ /* ---------- Bundle card (shared by surfaces 1, 2, 3, 4, 6) ---------- */
391
+
392
+ .runwell-bundle-card {
393
+ display: flex;
394
+ flex-direction: column;
395
+ gap: 12px;
396
+ padding: 12px;
397
+ border-radius: var(--runwell-radius-md, 12px);
398
+ background: var(--runwell-surface-card, #fff);
399
+ text-decoration: none;
400
+ color: inherit;
401
+ transition: transform 200ms ease, box-shadow 200ms ease;
402
+ box-shadow: var(--runwell-shadow-card, 0 2px 8px rgba(0, 0, 0, 0.04));
403
+ }
404
+
405
+ .runwell-bundle-card:hover {
406
+ transform: translateY(-2px);
407
+ box-shadow: var(--runwell-shadow-elevated, 0 8px 24px rgba(0, 0, 0, 0.06));
408
+ }
409
+
410
+ .runwell-bundle-card__media {
411
+ position: relative;
412
+ border-radius: var(--runwell-radius-sm, 4px);
413
+ overflow: hidden;
414
+ aspect-ratio: 1 / 1;
415
+ }
416
+
417
+ .runwell-bundle-card__image {
418
+ width: 100%;
419
+ height: 100%;
420
+ object-fit: cover;
421
+ display: block;
422
+ }
423
+
424
+ .runwell-bundle-card__badge {
425
+ position: absolute;
426
+ top: 8px;
427
+ right: 8px;
428
+ padding: 4px 10px;
429
+ font-size: 0.75rem;
430
+ font-weight: 600;
431
+ border-radius: 999px;
432
+ background: var(--runwell-accent, currentColor);
433
+ color: var(--runwell-cream, #fff);
434
+ }
435
+
436
+ .runwell-bundle-card__badge--inline {
437
+ position: static;
438
+ font-size: 0.7rem;
439
+ }
440
+
441
+ .runwell-bundle-card__body {
442
+ display: flex;
443
+ flex-direction: column;
444
+ gap: 6px;
445
+ }
446
+
447
+ .runwell-bundle-card__title {
448
+ margin: 0;
449
+ font-size: 1.05rem;
450
+ font-weight: 600;
451
+ line-height: 1.3;
452
+ }
453
+
454
+ .runwell-bundle-card__meta {
455
+ margin: 0;
456
+ font-size: 0.8rem;
457
+ opacity: 0.7;
458
+ }
459
+
460
+ .runwell-bundle-card__price-row {
461
+ display: flex;
462
+ align-items: baseline;
463
+ gap: 8px;
464
+ flex-wrap: wrap;
465
+ font-size: 0.95rem;
466
+ }
467
+
468
+ .runwell-bundle-card__price {
469
+ font-weight: 700;
470
+ }
471
+
472
+ .runwell-bundle-card__strikethrough {
473
+ text-decoration: line-through;
474
+ opacity: 0.55;
475
+ font-size: 0.85rem;
476
+ }
477
+
478
+ .runwell-bundle-card__cta {
479
+ margin-top: 4px;
480
+ font-size: 0.85rem;
481
+ text-align: center;
482
+ padding: 8px 12px;
483
+ min-height: 40px;
484
+ }
485
+
486
+ /* Card variants */
487
+ .runwell-bundle-card--compact {
488
+ padding: 10px;
489
+ }
490
+
491
+ .runwell-bundle-card--compact .runwell-bundle-card__title {
492
+ font-size: 0.95rem;
493
+ }
494
+
495
+ .runwell-bundle-card--hero .runwell-bundle-card__title {
496
+ font-size: 1.25rem;
497
+ }
498
+
499
+ .runwell-bundle-card--hero .runwell-bundle-card__media {
500
+ aspect-ratio: 4 / 3;
501
+ }
502
+
503
+ /* ---------- Surface 2: PDP pairs-with ---------- */
504
+
505
+ .runwell-bundle-pdp-pairs-with {
506
+ font-family: inherit;
507
+ }
508
+
509
+ .runwell-bundle-pdp-pairs-with__inner {
510
+ display: flex;
511
+ flex-direction: column;
512
+ gap: 12px;
513
+ }
514
+
515
+ .runwell-bundle-pdp-pairs-with__eyebrow {
516
+ margin: 0;
517
+ font-size: 0.85rem;
518
+ letter-spacing: 0.06em;
519
+ text-transform: uppercase;
520
+ color: var(--runwell-accent, currentColor);
521
+ }
522
+
523
+ .runwell-bundle-pdp-pairs-with__heading {
524
+ margin: 0;
525
+ font-size: 1.5rem;
526
+ line-height: 1.2;
527
+ }
528
+
529
+ .runwell-bundle-pdp-pairs-with__cards {
530
+ display: grid;
531
+ grid-template-columns: 1fr;
532
+ gap: 12px;
533
+ }
534
+
535
+ @media (min-width: 768px) {
536
+ .runwell-bundle-pdp-pairs-with__cards {
537
+ grid-template-columns: repeat(2, 1fr);
538
+ }
539
+ }
540
+
541
+ /* ---------- Surface 3: home curated stacks ---------- */
542
+
543
+ .runwell-bundle-home-stacks {
544
+ font-family: inherit;
545
+ }
546
+
547
+ .runwell-bundle-home-stacks--bg-oat {
548
+ background: var(--runwell-oat, transparent);
549
+ }
550
+
551
+ .runwell-bundle-home-stacks--bg-celadon-tint {
552
+ background: color-mix(in srgb, var(--runwell-celadon, currentColor) 18%, white);
553
+ }
554
+
555
+ .runwell-bundle-home-stacks__inner {
556
+ display: flex;
557
+ flex-direction: column;
558
+ gap: 16px;
559
+ }
560
+
561
+ .runwell-bundle-home-stacks__eyebrow {
562
+ margin: 0;
563
+ font-size: 0.85rem;
564
+ letter-spacing: 0.06em;
565
+ text-transform: uppercase;
566
+ color: var(--runwell-accent, currentColor);
567
+ }
568
+
569
+ .runwell-bundle-home-stacks__heading {
570
+ margin: 0;
571
+ font-size: 1.75rem;
572
+ line-height: 1.2;
573
+ }
574
+
575
+ @media (min-width: 768px) {
576
+ .runwell-bundle-home-stacks__heading {
577
+ font-size: 2.25rem;
578
+ }
579
+ }
580
+
581
+ .runwell-bundle-home-stacks__cards {
582
+ display: grid;
583
+ grid-template-columns: 1fr;
584
+ gap: 16px;
585
+ margin-top: 8px;
586
+ }
587
+
588
+ @media (min-width: 768px) {
589
+ .runwell-bundle-home-stacks__cards {
590
+ grid-template-columns: repeat(2, 1fr);
591
+ gap: 20px;
592
+ }
593
+ }
594
+
595
+ @media (min-width: 1024px) {
596
+ .runwell-bundle-home-stacks__cards {
597
+ grid-template-columns: repeat(4, 1fr);
598
+ }
599
+ }
600
+
601
+ .runwell-bundle-home-stacks__empty {
602
+ margin: 0;
603
+ padding: 16px;
604
+ border-radius: var(--runwell-radius-md, 12px);
605
+ background: var(--runwell-surface-card-alt, #f5f5f5);
606
+ font-size: 0.9rem;
607
+ opacity: 0.7;
608
+ }
609
+
610
+ /* ---------- Surface 4: cart drawer bundle cross-sell ---------- */
611
+
612
+ .runwell-bundle-cart-xsell {
613
+ display: block;
614
+ margin-top: 12px;
615
+ border-radius: var(--runwell-radius-md, 12px);
616
+ background: color-mix(in srgb, var(--runwell-accent, currentColor) 8%, var(--runwell-surface-card, #fff));
617
+ padding: 12px;
618
+ }
619
+
620
+ .runwell-bundle-cart-xsell:empty {
621
+ display: none;
622
+ }
623
+
624
+ .runwell-bundle-cart-xsell__eyebrow {
625
+ margin: 0 0 8px 0;
626
+ font-size: 0.78rem;
627
+ font-weight: 600;
628
+ letter-spacing: 0.06em;
629
+ text-transform: uppercase;
630
+ color: var(--runwell-accent, currentColor);
631
+ }
632
+
633
+ .runwell-bundle-cart-xsell__card {
634
+ display: flex;
635
+ align-items: center;
636
+ gap: 10px;
637
+ }
638
+
639
+ .runwell-bundle-cart-xsell__thumb {
640
+ width: 60px;
641
+ height: 60px;
642
+ object-fit: cover;
643
+ border-radius: var(--runwell-radius-sm, 4px);
644
+ flex-shrink: 0;
645
+ }
646
+
647
+ .runwell-bundle-cart-xsell__details {
648
+ flex: 1;
649
+ min-width: 0;
650
+ display: flex;
651
+ flex-direction: column;
652
+ gap: 2px;
653
+ }
654
+
655
+ .runwell-bundle-cart-xsell__name {
656
+ margin: 0;
657
+ font-size: 0.9rem;
658
+ font-weight: 600;
659
+ line-height: 1.3;
660
+ white-space: nowrap;
661
+ overflow: hidden;
662
+ text-overflow: ellipsis;
663
+ }
664
+
665
+ .runwell-bundle-cart-xsell__price {
666
+ margin: 0;
667
+ font-size: 0.85rem;
668
+ opacity: 0.75;
669
+ }
670
+
671
+ .runwell-bundle-cart-xsell__cta {
672
+ min-height: 44px;
673
+ padding: 0 14px;
674
+ font-size: 0.85rem;
675
+ font-weight: 600;
676
+ border-radius: var(--runwell-radius-sm, 4px);
677
+ border: 0;
678
+ background: var(--runwell-accent, currentColor);
679
+ color: var(--runwell-cream, #fff);
680
+ cursor: pointer;
681
+ white-space: nowrap;
682
+ }
683
+
684
+ .runwell-bundle-cart-xsell__cta:disabled {
685
+ opacity: 0.6;
686
+ cursor: not-allowed;
687
+ }
688
+
689
+ /* ---------- Surface 5: PDP bundle banner ---------- */
690
+
691
+ .runwell-bundle-pdp-banner {
692
+ display: flex;
693
+ align-items: center;
694
+ justify-content: space-between;
695
+ gap: 12px;
696
+ padding: 10px 14px;
697
+ min-height: 44px;
698
+ border-radius: var(--runwell-radius-sm, 4px);
699
+ background: color-mix(in srgb, var(--runwell-celadon, currentColor) 18%, white);
700
+ color: inherit;
701
+ text-decoration: none;
702
+ font-size: 0.9rem;
703
+ transition: background-color 150ms ease;
704
+ }
705
+
706
+ .runwell-bundle-pdp-banner:hover,
707
+ .runwell-bundle-pdp-banner:focus-visible {
708
+ background: color-mix(in srgb, var(--runwell-celadon, currentColor) 26%, white);
709
+ }
710
+
711
+ .runwell-bundle-pdp-banner__copy {
712
+ flex: 1;
713
+ font-weight: 500;
714
+ }
715
+
716
+ .runwell-bundle-pdp-banner__chevron {
717
+ font-size: 1.2rem;
718
+ font-weight: 700;
719
+ opacity: 0.6;
720
+ }
721
+
722
+ /* ---------- Surface 1: /bundles collection grid ---------- */
723
+
724
+ .runwell-bundle-collection {
725
+ font-family: inherit;
726
+ }
727
+
728
+ .runwell-bundle-collection__inner {
729
+ display: flex;
730
+ flex-direction: column;
731
+ gap: 24px;
732
+ }
733
+
734
+ .runwell-bundle-collection__heading {
735
+ display: flex;
736
+ flex-direction: column;
737
+ gap: 6px;
738
+ text-align: left;
739
+ }
740
+
741
+ .runwell-bundle-collection__title {
742
+ margin: 0;
743
+ font-size: 2rem;
744
+ line-height: 1.1;
745
+ }
746
+
747
+ @media (min-width: 768px) {
748
+ .runwell-bundle-collection__title {
749
+ font-size: 2.5rem;
750
+ }
751
+ }
752
+
753
+ .runwell-bundle-collection__subline {
754
+ margin: 0;
755
+ font-size: 1rem;
756
+ opacity: 0.75;
757
+ }
758
+
759
+ .runwell-bundle-collection__grid {
760
+ display: grid;
761
+ grid-template-columns: 1fr;
762
+ gap: 24px;
763
+ }
764
+
765
+ @media (min-width: 768px) {
766
+ .runwell-bundle-collection__grid {
767
+ grid-template-columns: repeat(2, 1fr);
768
+ gap: 28px;
769
+ }
770
+ }
771
+
772
+ @media (min-width: 1024px) {
773
+ .runwell-bundle-collection__grid {
774
+ grid-template-columns: repeat(3, 1fr);
775
+ gap: 32px;
776
+ }
777
+ }
778
+
779
+ .runwell-bundle-collection__grid > .runwell-bundle-card--hero {
780
+ grid-column: 1 / -1;
781
+ }
782
+
783
+ .runwell-bundle-collection__empty {
784
+ margin: 0;
785
+ padding: 24px;
786
+ border-radius: var(--runwell-radius-md, 12px);
787
+ background: var(--runwell-surface-card-alt, #f5f5f5);
788
+ font-size: 0.95rem;
789
+ opacity: 0.75;
790
+ }
791
+
792
+ .runwell-bundle-collection__empty code {
793
+ font-family: ui-monospace, SFMono-Regular, monospace;
794
+ font-size: 0.85rem;
795
+ padding: 2px 6px;
796
+ border-radius: 3px;
797
+ background: rgba(0, 0, 0, 0.06);
798
+ }
799
+
800
+ /* ---------- Surface 6: collection page filter chip ---------- */
801
+
802
+ .runwell-bundle-collection--filter-chip {
803
+ display: flex;
804
+ flex-direction: column;
805
+ gap: 16px;
806
+ margin-bottom: 24px;
807
+ }
808
+
809
+ .runwell-bundle-collection__chip {
810
+ display: inline-flex;
811
+ align-items: center;
812
+ gap: 6px;
813
+ padding: 10px 18px;
814
+ min-height: 44px;
815
+ align-self: flex-start;
816
+ border: 2px solid color-mix(in srgb, currentColor 20%, transparent);
817
+ border-radius: 999px;
818
+ background: transparent;
819
+ color: inherit;
820
+ font-size: 0.9rem;
821
+ font-weight: 600;
822
+ cursor: pointer;
823
+ transition: background-color 150ms ease, border-color 150ms ease;
824
+ }
825
+
826
+ .runwell-bundle-collection__chip[aria-pressed="true"] {
827
+ background: var(--runwell-accent, currentColor);
828
+ color: var(--runwell-cream, #fff);
829
+ border-color: var(--runwell-accent, currentColor);
830
+ }
831
+
832
+ .runwell-bundle-collection__chip-count {
833
+ opacity: 0.7;
834
+ font-weight: 500;
835
+ }
836
+
837
+ .runwell-bundle-collection__pinned {
838
+ display: grid;
839
+ grid-template-columns: 1fr;
840
+ gap: 16px;
841
+ }
842
+
843
+ @media (min-width: 768px) {
844
+ .runwell-bundle-collection__pinned {
845
+ grid-template-columns: repeat(2, 1fr);
846
+ }
847
+ }
848
+
849
+ /* ---------- Visually hidden helper (for legend) ---------- */
850
+
851
+ .runwell-bundle-system .visually-hidden {
852
+ position: absolute;
853
+ width: 1px;
854
+ height: 1px;
855
+ margin: -1px;
856
+ padding: 0;
857
+ overflow: hidden;
858
+ clip: rect(0, 0, 0, 0);
859
+ white-space: nowrap;
860
+ border: 0;
861
+ }