@sc-360-v2/storefront-cms-library 0.5.51 → 0.5.52

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.
@@ -35,7 +35,9 @@
35
35
  // --_ctm-mob-rep-lt-aw-in-se,
36
36
  // var(--_ctm-tab-rep-lt-aw-in-se, var(--_ctm-rep-lt-aw-in-se, 40px))
37
37
  // );
38
- min-height: var(-_sf-ic-sz-nn);
38
+ // Was `var(-_sf-ic-sz-nn)` — one dash short, so the declaration was dropped and
39
+ // the type-3 control bar had no reserved height.
40
+ min-height: var(--_sf-ic-sz-nn);
39
41
  --_sf-t3-lt-vl-v2: var(--_sf-rp-ct-t3-left-vl, 50%);
40
42
  --_sf-t3-bt-bl-v2: var(--_sf-rp-ct-t3-bottom-vl, 20px);
41
43
  --_sf-t3-tr-bl-v2: var(--_sf-rp-ct-t3-transform-vl, translateX(-50%));
@@ -108,6 +110,12 @@
108
110
  display: flex;
109
111
  justify-content: center;
110
112
  align-items: center;
113
+
114
+ // Overrides the stroke hardcoded in the chevron icon markup. Lower specificity
115
+ // than the :hover rule above, so hover still wins with the active colour.
116
+ path {
117
+ stroke: var(--_sf-sl-ct-aw-in-cl, #667085);
118
+ }
111
119
  }
112
120
  display: flex;
113
121
  justify-content: center;
@@ -19,9 +19,16 @@ $wrapper: ".tgl__wrapper";
19
19
  display: var(--_d-flex);
20
20
  align-items: center;
21
21
  // border: 1px solid var(--_gray-200);
22
- border-style: prepareMediaVariable(--_ctm-rep-dn-gd-vw-cl-se-lt-se-br-se, solid);
23
- border-width: prepareMediaVariable(--_ctm-rep-dn-gd-vw-cl-se-lt-se-br-wh, 1px);
24
- border-color: prepareMediaVariable(--_ctm-rep-dn-gd-vw-cl-se-lt-se-br-cr, var(--_gray-200));
22
+ // Gated on the Layout Style > Show Border switch; previously the border was
23
+ // unconditional, so turning the switch off changed nothing.
24
+ &[data-show-border="true"] {
25
+ border-style: prepareMediaVariable(--_ctm-rep-dn-gd-vw-cl-se-lt-se-br-se, solid);
26
+ border-width: prepareMediaVariable(--_ctm-rep-dn-gd-vw-cl-se-lt-se-br-wh, 1px);
27
+ border-color: prepareMediaVariable(
28
+ --_ctm-rep-dn-gd-vw-cl-se-lt-se-br-cr,
29
+ var(--_gray-200)
30
+ );
31
+ }
25
32
  --_br-6: 6px;
26
33
  --_width-40: 40px;
27
34
  --_width-20: 20px;
@@ -74,22 +81,34 @@ $wrapper: ".tgl__wrapper";
74
81
  );
75
82
  }
76
83
 
84
+ // Show Shadow / Show Icon are per-state switches on the Button accordion; they
85
+ // reach the markup as data attributes and gate the two variables below.
86
+ &[data-show-shadow="false"] {
87
+ --_show-shadow: none;
88
+ }
89
+ &[data-show-icon="false"] {
90
+ --_show-icon: none;
91
+ }
92
+
77
93
  box-shadow: var(
78
- --_sf-at-btn-sw-ae,
79
- #{prepareMediaVariable(--_ctm-rep-dn-gd-vw-cl-se-bn-dt-se-sw-ae, 0)}
80
- )
81
- var(
82
- --_sf-at-btn-sw-br,
83
- #{prepareMediaVariable(--_ctm-rep-dn-gd-vw-cl-se-bn-dt-se-sw-br, 0)}
84
- )
94
+ --_show-shadow,
85
95
  var(
86
- --_sf-at-btn-sw-sd,
87
- #{prepareMediaVariable(--_ctm-rep-dn-gd-vw-cl-se-bn-dt-se-sw-sd, 0)}
88
- )
89
- var(
90
- --_sf-at-btn-sw-cr,
91
- #{prepareMediaVariable(--_ctm-rep-dn-gd-vw-cl-se-bn-dt-se-sw-cr, transparent)}
92
- );
96
+ --_sf-at-btn-sw-ae,
97
+ #{prepareMediaVariable(--_ctm-rep-dn-gd-vw-cl-se-bn-dt-se-sw-ae, 0)}
98
+ )
99
+ var(
100
+ --_sf-at-btn-sw-br,
101
+ #{prepareMediaVariable(--_ctm-rep-dn-gd-vw-cl-se-bn-dt-se-sw-br, 0)}
102
+ )
103
+ var(
104
+ --_sf-at-btn-sw-sd,
105
+ #{prepareMediaVariable(--_ctm-rep-dn-gd-vw-cl-se-bn-dt-se-sw-sd, 0)}
106
+ )
107
+ var(
108
+ --_sf-at-btn-sw-cr,
109
+ #{prepareMediaVariable(--_ctm-rep-dn-gd-vw-cl-se-bn-dt-se-sw-cr, transparent)}
110
+ )
111
+ );
93
112
 
94
113
  // Radius falls back to the pill geometry these two buttons have always had.
95
114
  // It is NOT routed through an --_sf-at-btn-* variable: prepareMediaVariable
@@ -162,10 +181,15 @@ $wrapper: ".tgl__wrapper";
162
181
  --_sf-at-btn-pg: #{prepareMediaVariable(--_ctm-rep-dn-gd-vw-cl-se-bn-sd-se-pg)};
163
182
  }
164
183
 
165
- svg {
184
+ // `img` covers custom uploaded toggle icons, which render as an <img>.
185
+ svg,
186
+ img {
187
+ display: var(--_show-icon, block);
166
188
  width: calc(#{$size} * 1);
167
189
  height: calc(#{$size} * 1);
190
+ }
168
191
 
192
+ svg {
169
193
  path {
170
194
  stroke: var(
171
195
  --_sf-at-pt-cl,
@@ -105,34 +105,49 @@ $listViewSlector: '.lst_vw[data-element-type="repeater"]';
105
105
  // --_ctm-mob-rep-dn-rr-wt-bd-se,
106
106
  // var(--_ctm-tab-rep-dn-rr-wt-bd-se, var(--_ctm-rep-dn-rr-wt-bd-se))
107
107
  // );
108
+ &[data-show-border="true"] {
109
+ border-color: var(
110
+ --_ctm-mob-rep-dn-rr-wt-br-cr,
111
+ var(--_ctm-tab-rep-dn-rr-wt-br-cr, var(--_ctm-rep-dn-rr-wt-br-cr))
112
+ );
113
+ border-style: var(
114
+ --_ctm-mob-rep-dn-rr-wt-br-se,
115
+ var(--_ctm-tab-rep-dn-rr-wt-br-se, var(--_ctm-rep-dn-rr-wt-br-se))
116
+ );
117
+ border-width: var(
118
+ --_ctm-mob-rep-dn-rr-wt-br-wh,
119
+ var(--_ctm-tab-rep-dn-rr-wt-br-wh, var(--_ctm-rep-dn-rr-wt-br-wh))
120
+ );
121
+ }
108
122
  border-radius: var(
109
123
  --_ctm-mob-rep-dn-rr-wt-br-rs,
110
124
  var(--_ctm-tab-rep-dn-rr-wt-br-rs, var(--_ctm-rep-dn-rr-wt-br-rs))
111
125
  );
112
- border-color: var(
113
- --_ctm-mob-rep-dn-rr-wt-br-cr,
114
- var(--_ctm-tab-rep-dn-rr-wt-br-cr, var(--_ctm-rep-dn-rr-wt-br-cr))
115
- );
116
- border-style: var(
117
- --_ctm-mob-rep-dn-rr-wt-br-se,
118
- var(--_ctm-tab-rep-dn-rr-wt-br-se, var(--_ctm-rep-dn-rr-wt-br-se))
119
- );
120
- border-width: var(
121
- --_ctm-mob-rep-dn-rr-wt-br-wh,
122
- var(--_ctm-tab-rep-dn-rr-wt-br-wh, var(--_ctm-rep-dn-rr-wt-br-wh))
123
- );
126
+
127
+ // The shadow is configured under the Repeater Widget accordion, so its variables
128
+ // carry that accordion's `rr-wt` segment — without it nothing the builder writes
129
+ // was ever read back. The Show Shadow switch arrives as `data-show-shadow`.
130
+ &[data-show-shadow="false"] {
131
+ --_show-shadow: none;
132
+ }
124
133
  box-shadow: var(
125
- --_hover-show-shadow,
134
+ --_show-shadow,
126
135
  var(
127
- --_sf-hr-bx-sw,
136
+ --_ctm-mob-rep-dn-rr-wt-sw-ae,
137
+ var(--_ctm-tab-rep-dn-rr-wt-sw-ae, var(--_ctm-rep-dn-rr-wt-sw-ae, 0))
138
+ )
128
139
  var(
129
- --_show-shadow,
130
- var(--_ctm-mob-rep-dn-sw-ae, var(--_ctm-tab-rep-dn-sw-ae, var(--_ctm-rep-dn-sw-ae)))
131
- var(--_ctm-mob-rep-dn-sw-br, var(--_ctm-tab-rep-dn-sw-br, var(--_ctm-rep-dn-sw-br)))
132
- var(--_ctm-mob-rep-dn-sw-sd, var(--_ctm-tab-rep-dn-sw-sd, var(--_ctm-rep-dn-sw-sd)))
133
- var(--_ctm-mob-rep-dn-sw-cr, var(--_ctm-tab-rep-dn-sw-cr, var(--_ctm-rep-dn-sw-cr)))
140
+ --_ctm-mob-rep-dn-rr-wt-sw-br,
141
+ var(--_ctm-tab-rep-dn-rr-wt-sw-br, var(--_ctm-rep-dn-rr-wt-sw-br, 0))
142
+ )
143
+ var(
144
+ --_ctm-mob-rep-dn-rr-wt-sw-sd,
145
+ var(--_ctm-tab-rep-dn-rr-wt-sw-sd, var(--_ctm-rep-dn-rr-wt-sw-sd, 0))
146
+ )
147
+ var(
148
+ --_ctm-mob-rep-dn-rr-wt-sw-cr,
149
+ var(--_ctm-tab-rep-dn-rr-wt-sw-cr, var(--_ctm-rep-dn-rr-wt-sw-cr, transparent))
134
150
  )
135
- )
136
151
  );
137
152
  padding: var(--_ctm-mob-rep-lt-pg, var(--_ctm-tab-rep-lt-pg, var(--_ctm-rep-lt-pg)));
138
153
 
@@ -315,6 +330,12 @@ $listViewSlector: '.lst_vw[data-element-type="repeater"]';
315
330
  --_ctm-mob-rep-lt-cl-ae-cr,
316
331
  var(--_ctm-tab-rep-lt-cl-ae-cr, var(--_ctm-rep-lt-cl-ae-cr))
317
332
  );
333
+ // Resting arrow colour (Layout > Slider Settings > Arrow Icon Color). Fallback is
334
+ // the colour baked into the chevron icons, so untouched repeaters look the same.
335
+ --_sf-sl-ct-aw-in-cl: var(
336
+ --_ctm-mob-rep-lt-aw-in-cr,
337
+ var(--_ctm-tab-rep-lt-aw-in-cr, var(--_ctm-rep-lt-aw-in-cr, #667085))
338
+ );
318
339
  // &:is([data-control-type="1"]) {
319
340
  // @include CMSRepeaterEmblaControlStyles(1);
320
341
  // }
@@ -406,86 +427,21 @@ $listViewSlector: '.lst_vw[data-element-type="repeater"]';
406
427
  }
407
428
 
408
429
  #{$adSlotElementSelector} {
430
+ // The Ad Style > Image Controls schema was dropped, so these are plain values
431
+ // rather than custom properties — they reproduce what that schema defaulted to
432
+ // (full-bleed, centred, no border or shadow).
409
433
  a {
410
434
  width: 100%;
411
435
  display: var(--_d-flex);
412
436
  height: 100%;
413
- &:is(.lst_vw[data-element-type="repeater"] *) {
414
- --_sf-bm-sjst-vlo-pp: #{prepareMediaVariable(--_ctm-rep-dn-ad-se-ie-cs-lt-vw-jy-ct)};
415
- --_sf-bm-salg-vlo-pp: #{prepareMediaVariable(--_ctm-rep-dn-ad-se-ie-cs-lt-vw-an-is)};
416
- }
417
- justify-content: var(
418
- --_sf-bm-sjst-vlo-pp,
419
- #{prepareMediaVariable(--_ctm-rep-dn-ad-se-ie-cs-gd-vw-jy-ct)}
420
- );
421
- align-items: var(
422
- --_sf-bm-sjst-vlo-pp,
423
- #{prepareMediaVariable(--_ctm-rep-dn-ad-se-ie-cs-gd-vw-an-is)}
424
- );
437
+ justify-content: center;
438
+ align-items: center;
425
439
  }
426
440
  img {
427
441
  max-width: 100%;
428
442
  max-height: 100%;
429
- border-color: var(
430
- --_sf-bm-img-brr-clrrr,
431
- #{prepareMediaVariable(--_ctm-rep-dn-ad-se-ie-cs-gd-vw-br-cr)}
432
- );
433
- border-style: var(
434
- --_sf-bm-img-brr-sty,
435
- #{prepareMediaVariable(--_ctm-rep-dn-ad-se-ie-cs-gd-vw-br-se)}
436
- );
437
- border-width: var(
438
- --_sf-bm-img-brr-wdt,
439
- #{prepareMediaVariable(--_ctm-rep-dn-ad-se-ie-cs-gd-vw-br-wh, 0px)}
440
- );
441
- border-radius: var(
442
- --_sf-bm-img-brr-br,
443
- #{prepareMediaVariable(--_ctm-rep-dn-ad-se-ie-cs-gd-vw-br-rs)}
444
- );
445
- box-shadow: var(
446
- --_sf-bm-img-bx-sdw,
447
- #{prepareMediaVariable(--_ctm-rep-dn-ad-se-ie-cs-gd-vw-sw-ae)}
448
- )
449
- var(
450
- --_sf-bm-img-bx-sdw-blr,
451
- #{prepareMediaVariable(--_ctm-rep-dn-ad-se-ie-cs-gd-vw-sw-br)}
452
- )
453
- var(
454
- --_sf-bm-img-bx-sdw-sprd,
455
- #{prepareMediaVariable(--_ctm-rep-dn-ad-se-ie-cs-gd-vw-sw-sd)}
456
- )
457
- var(
458
- --_sf-bm-img-bx-sdw-clr,
459
- #{prepareMediaVariable(--_ctm-rep-dn-ad-se-ie-cs-gd-vw-sw-cr)}
460
- );
461
- // height: 100%;
462
- // width: 100%;
463
- // min-height: var(--_sf-img-mn-ht, 500px);
464
- // max-height: 100%;
465
- &:is(.lst_vw[data-element-type="repeater"] *) {
466
- --_sf-bm-swtdh-vlo-pp: #{prepareMediaVariable(--_ctm-rep-dn-ad-se-ie-cs-lt-vw-wh)};
467
- --_sf-bm-sht-vlo-pp: #{prepareMediaVariable(--_ctm-rep-dn-ad-se-ie-cs-lt-vw-ht)};
468
- --_sf-bm-img-brr-clrrr: #{prepareMediaVariable(--_ctm-rep-dn-ad-se-ie-cs-lt-vw-br-cr)};
469
- --_sf-bm-img-brr-sty: #{prepareMediaVariable(--_ctm-rep-dn-ad-se-ie-cs-lt-vw-br-se)};
470
- --_sf-bm-img-brr-wdt: #{prepareMediaVariable(--_ctm-rep-dn-ad-se-ie-cs-lt-vw-br-wh)};
471
- --_sf-bm-img-brr-br: #{prepareMediaVariable(--_ctm-rep-dn-ad-se-ie-cs-lt-vw-br-rs)};
472
- --_sf-bm-img-bx-sdw: #{prepareMediaVariable(--_ctm-rep-dn-ad-se-ie-cs-lt-vw-sw-ae)};
473
- --_sf-bm-img-bx-sdw-blr: #{prepareMediaVariable(--_ctm-rep-dn-ad-se-ie-cs-lt-vw-sw-br)};
474
- --_sf-bm-img-bx-sdw-sprd: #{prepareMediaVariable(--_ctm-rep-dn-ad-se-ie-cs-lt-vw-sw-sd)};
475
- --_sf-bm-img-bx-sdw-clr: #{prepareMediaVariable(--_ctm-rep-dn-ad-se-ie-cs-lt-vw-sw-cr)};
476
- }
477
- &:not(.lst_vw[data-element-type="repeater"] *) {
478
- --_sf-ht-vl: max(#{prepareMediaVariable(--_ctm-rep-dn-ad-se-ie-cs-gd-vw-ht)}, auto);
479
- }
480
-
481
- width: var(
482
- --_sf-bm-swtdh-vlo-pp,
483
- #{prepareMediaVariable(--_ctm-rep-dn-ad-se-ie-cs-gd-vw-wh)}
484
- );
485
- height: var(
486
- --_sf-bm-sht-vlo-pp,
487
- var(--_sf-ht-vl, #{prepareMediaVariable(--_ctm-rep-dn-ad-se-ie-cs-gd-vw-ht)})
488
- );
443
+ width: 100%;
444
+ height: 100%;
489
445
  object-fit: cover;
490
446
  object-position: center top;
491
447
  }
@@ -507,16 +463,19 @@ $listViewSlector: '.lst_vw[data-element-type="repeater"]';
507
463
  justify-content: center;
508
464
  padding: 0;
509
465
  z-index: 2;
510
- --_sf-wdt-vl-v2: #{prepareMediaVariable(--_ctm-rep-dn-ad-se-sr-cs-aw-in-se, 28x)};
511
- --_sf-bgr-clr-vl-v2: #{prepareMediaVariable(--_ctm-rep-dn-ad-se-sr-cs-cl-ae-cr, blue)};
512
- width: var(--_sf-wdt-vl-v2, 28px);
513
- height: var(--_sf-wdt-vl-v2, 28px);
466
+ // The Ad Style > Slider Controls schema was dropped, so the custom properties
467
+ // only resolve on pages saved before that. The fallbacks reproduce what that
468
+ // schema defaulted to (32px arrows, black).
469
+ --_sf-wdt-vl-v2: #{prepareMediaVariable(--_ctm-rep-dn-ad-se-sr-cs-aw-in-se, 32px)};
470
+ --_sf-bgr-clr-vl-v2: #{prepareMediaVariable(--_ctm-rep-dn-ad-se-sr-cs-cl-ae-cr, #000)};
471
+ width: var(--_sf-wdt-vl-v2, 32px);
472
+ height: var(--_sf-wdt-vl-v2, 32px);
514
473
  background: color-mix(in srgb, var(--_sf-bgr-clr-vl-v2) 10%, transparent);
515
474
 
516
475
  svg {
517
476
  --_perc: 0.5;
518
- width: calc(var(--_sf-wdt-vl-v2, 28px) * var(--_perc));
519
- height: calc(var(--_sf-wdt-vl-v2, 28px) * var(--_perc));
477
+ width: calc(var(--_sf-wdt-vl-v2, 32px) * var(--_perc));
478
+ height: calc(var(--_sf-wdt-vl-v2, 32px) * var(--_perc));
520
479
 
521
480
  path {
522
481
  stroke: var(--_sf-bgr-clr-vl-v2);
@@ -713,10 +672,18 @@ $listViewSlector: '.lst_vw[data-element-type="repeater"]';
713
672
 
714
673
  border-radius: var(--_sf-hr-br-rs, prepareMediaVariable(--_ctm-rep-dn-bn-se-dt-se-br-rs));
715
674
 
716
- box-shadow: var(--_sf-hr-sw-ae, prepareMediaVariable(--_ctm-rep-dn-bn-se-dt-se-sw-ae))
717
- var(--_sf-hr-sw-br, prepareMediaVariable(--_ctm-rep-dn-bn-se-dt-se-sw-br))
718
- var(--_sf-hr-sw-sd, prepareMediaVariable(--_ctm-rep-dn-bn-se-dt-se-sw-sd))
719
- var(--_sf-hr-sw-cr, prepareMediaVariable(--_ctm-rep-dn-bn-se-dt-se-sw-cr));
675
+ // Routed through the two gate variables the Show Shadow switches set above,
676
+ // otherwise turning the switch off left the shadow on screen.
677
+ box-shadow: var(
678
+ --_hover-show-shadow,
679
+ var(
680
+ --_show-shadow,
681
+ var(--_sf-hr-sw-ae, prepareMediaVariable(--_ctm-rep-dn-bn-se-dt-se-sw-ae, 0))
682
+ var(--_sf-hr-sw-br, prepareMediaVariable(--_ctm-rep-dn-bn-se-dt-se-sw-br, 0))
683
+ var(--_sf-hr-sw-sd, prepareMediaVariable(--_ctm-rep-dn-bn-se-dt-se-sw-sd, 0))
684
+ var(--_sf-hr-sw-cr, prepareMediaVariable(--_ctm-rep-dn-bn-se-dt-se-sw-cr, transparent))
685
+ )
686
+ );
720
687
 
721
688
  &[data-show-border="true"] {
722
689
  border-color: var(--_sf-hr-br-cr, prepareMediaVariable(--_ctm-rep-dn-bn-se-dt-se-br-cr));
package/dist/scroll.scss CHANGED
@@ -23,6 +23,21 @@ $max-items: 20;
23
23
  overflow: hidden;
24
24
  white-space: nowrap;
25
25
 
26
+ // The Scroll Container's shadow used to be painted here as well as on
27
+ // `.scroll__container` below. This wrapper is a separate, square box that sits
28
+ // outside the container, so the second copy was drawn around the wrapper with
29
+ // square corners — the shadow appearing "outside the element" and ignoring the
30
+ // corner radius. Only `.scroll__container` paints it now, and it carries the
31
+ // matching border-radius.
32
+ //
33
+ // The wrapper clips (`overflow: hidden`), so it needs the same radius or its
34
+ // square clip cuts the container's rounded corners back off — and the shadow
35
+ // below, which is painted here, then follows the rounded shape too.
36
+ border-radius: var(
37
+ --_ctm-mob-dn-sl-cr-br-rs,
38
+ var(--_ctm-tab-dn-sl-cr-br-rs, var(--_ctm-dn-sl-cr-br-rs))
39
+ );
40
+
26
41
  &[data-widget-shadow="true"] {
27
42
  box-shadow: var(
28
43
  --_ctm-mob-dn-sl-cr-sw-ae,
@@ -65,6 +80,32 @@ $max-items: 20;
65
80
  --_ctm-dn-i#{$i}-br-rs,
66
81
  #{prepareMediaVariable(--_ctm-dn-i1-br-rs)}
67
82
  );
83
+ // Each item's schema has carried showShadow/shadowColor/angle/spread/blur all
84
+ // along, but nothing ever read them — the only box-shadow declarations in this
85
+ // file were the container's. `--_show-item-shadow` is set to `none` by the
86
+ // item's own Show Shadow switch below.
87
+ box-shadow: var(
88
+ --_show-item-shadow,
89
+ prepareMediaVariable(
90
+ --_ctm-dn-i#{$i}-sw-ae,
91
+ #{prepareMediaVariable(--_ctm-dn-i1-sw-ae)}
92
+ )
93
+ prepareMediaVariable(
94
+ --_ctm-dn-i#{$i}-sw-br,
95
+ #{prepareMediaVariable(--_ctm-dn-i1-sw-br)}
96
+ )
97
+ prepareMediaVariable(
98
+ --_ctm-dn-i#{$i}-sw-sd,
99
+ #{prepareMediaVariable(--_ctm-dn-i1-sw-sd)}
100
+ )
101
+ prepareMediaVariable(
102
+ --_ctm-dn-i#{$i}-sw-cr,
103
+ #{prepareMediaVariable(--_ctm-dn-i1-sw-cr)}
104
+ )
105
+ );
106
+ &[data-item-shadow="false"] {
107
+ --_show-item-shadow: none;
108
+ }
68
109
  color: prepareMediaVariable(
69
110
  --_ctm-dn-i#{$i}-cr,
70
111
  #{prepareMediaVariable(--_ctm-dn-i1-cr)}
@@ -158,17 +199,17 @@ $max-items: 20;
158
199
  }
159
200
  }
160
201
 
161
- &[data-widget-shadow="true"] .scroll__container {
162
- box-shadow: var(
163
- --_ctm-mob-dn-sl-cr-sw-ae,
164
- var(--_ctm-tab-dn-sl-cr-sw-ae, var(--_ctm-dn-sl-cr-sw-ae))
165
- )
166
- var(--_ctm-mob-dn-sl-cr-sw-br, var(--_ctm-tab-dn-sl-cr-sw-br, var(--_ctm-dn-sl-cr-sw-br)))
167
- var(--_ctm-mob-dn-sl-cr-sw-sd, var(--_ctm-tab-dn-sl-cr-sw-sd, var(--_ctm-dn-sl-cr-sw-sd)))
168
- var(--_ctm-mob-dn-sl-cr-sw-cr, var(--_ctm-tab-dn-sl-cr-sw-cr, var(--_ctm-dn-sl-cr-sw-cr)));
169
- }
170
-
171
- &[data-widget-shadow="false"] .scroll__container {
202
+ // The Scroll Container's shadow is painted on `.wrapper` rather than on
203
+ // `.scroll__container`: the container fills the wrapper, and the wrapper clips
204
+ // (`overflow: hidden`), so a shadow on the container would be clipped away. An
205
+ // element's own box-shadow is never clipped by its own overflow, so the wrapper is
206
+ // the right box for it — and it carries the matching border-radius (see above) so
207
+ // the shadow follows the rounded shape instead of drawing a square glow.
208
+ //
209
+ // These were previously written as `&[data-widget-shadow=...]`, which targets the
210
+ // element root, but the attribute is emitted on `.wrapper` (unlike
211
+ // `data-widget-border`, which is on the root) — so neither rule ever matched.
212
+ & > .wrapper[data-widget-shadow="false"] {
172
213
  box-shadow: none;
173
214
  }
174
215
 
package/dist/search.scss CHANGED
@@ -320,7 +320,7 @@
320
320
  align-items: center;
321
321
  width: 100%;
322
322
  height: 100%;
323
- border: 1px solid var(--_gray-200);
323
+ // border: 1px solid var(--_gray-200);
324
324
  background-color: var(
325
325
  --_ctm-mob-dn-sh-br-bd-cr,
326
326
  var(--_ctm-tab-dn-sh-br-bd-cr, var(--_ctm-dn-sh-br-bd-cr))
@@ -1,38 +1,27 @@
1
- .skeleton__element {
2
- background-color: var(--_gray-300);
3
- border-radius: 6px;
4
- position: var(--_p-relative);
5
- overflow: hidden;
6
- display: inline-block;
7
- min-height: 12px;
8
- &.rounded {
9
- border-radius: 50%;
10
- }
11
- &::before {
12
- content: "";
13
- position: absolute;
14
- top: 0;
15
- left: 0;
16
- width: 100%;
17
- height: 100%;
18
- background: linear-gradient(
19
- 90deg,
20
- rgba(255, 255, 255, 0) 0%,
21
- rgba(255, 255, 255, 0.6) 50%,
22
- rgba(255, 255, 255, 0) 100%
23
- );
24
- animation: skeleton-shimmer 1.5s infinite ease-in-out;
25
- }
26
- }
27
-
28
- @keyframes skeleton-shimmer {
29
- 0% {
30
- transform: translateX(-100%);
31
- }
32
- 100% {
33
- transform: translateX(100%);
34
- }
35
- }
1
+ // `.skeleton__element` and `@keyframes skeleton-shimmer` are NOT defined here.
2
+ //
3
+ // They used to be — a copy of the library's old skeleton.scss. But global-styles.scss
4
+ // also defines them (mirrored from storefront-websites globals, which is what the
5
+ // shared elements are written against), and both files load into the builder. The two
6
+ // definitions did not replace each other, they stacked:
7
+ //
8
+ // old rule -> .skeleton__element::before { absolute gradient + shimmer }
9
+ // new rule -> .skeleton__element::after { absolute gradient + shimmer }
10
+ //
11
+ // so every skeleton ran TWO shimmer sweeps at once (0.6 alpha over 0.4), which read as
12
+ // a flicker in the builder canvas. The old `border-radius: 6px` also leaked through,
13
+ // since the new rules never set one — corners the same skeleton does not have on the
14
+ // storefront. Confirmed in the browser on the cms-builder page: both pseudo-elements
15
+ // had `animation-name: skeleton-shimmer` and the box computed `border-radius: 6px`.
16
+ //
17
+ // global-styles.scss is now the single definition, so the builder and the storefront
18
+ // render these skeletons identically. Everything the old block set that still matters
19
+ // (`display: block`, `min-height`, background) is already there. Nothing in the CMS
20
+ // used `.skeleton__element.rounded` the dashboard Skeleton is a CSS module with its
21
+ // own scoped class, and the shared Skeleton component sets its radius inline.
22
+ //
23
+ // If a skeleton style needs changing, change it in ONE of the two mirrored files
24
+ // (globals.scss in storefront-websites, global-styles.scss here) and copy it across.
36
25
 
37
26
  // dropdown skeletons
38
27
  .dpd_skeleton {
@@ -96,18 +96,20 @@
96
96
  --_ctm-mob-tbsco-dn-br-rs,
97
97
  var(--_ctm-tab-tbsco-dn-br-rs, var(--_ctm-tbsco-dn-br-rs))
98
98
  );
99
- border-color: var(
100
- --_ctm-mob-tbsco-dn-br-cr,
101
- var(--_ctm-tab-tbsco-dn-br-cr, var(--_ctm-tbsco-dn-br-cr))
102
- );
103
- border-style: var(
104
- --_ctm-mob-tbsco-dn-br-se,
105
- var(--_ctm-tab-tbsco-dn-br-se, var(--_ctm-tbsco-dn-br-se))
106
- );
107
- border-width: var(
108
- --_ctm-mob-tbsco-dn-br-wh,
109
- var(--_ctm-tab-tbsco-dn-br-wh, var(--_ctm-tbsco-dn-br-wh))
110
- );
99
+ &:is([data-show-border="true"] > *).wrapper {
100
+ border-color: var(
101
+ --_ctm-mob-tbsco-dn-br-cr,
102
+ var(--_ctm-tab-tbsco-dn-br-cr, var(--_ctm-tbsco-dn-br-cr))
103
+ );
104
+ border-style: var(
105
+ --_ctm-mob-tbsco-dn-br-se,
106
+ var(--_ctm-tab-tbsco-dn-br-se, var(--_ctm-tbsco-dn-br-se))
107
+ );
108
+ border-width: var(
109
+ --_ctm-mob-tbsco-dn-br-wh,
110
+ var(--_ctm-tab-tbsco-dn-br-wh, var(--_ctm-tbsco-dn-br-wh))
111
+ );
112
+ }
111
113
  box-shadow: var(
112
114
  --_hover-show-shadow,
113
115
  var(