@sc-360-v2/storefront-cms-library 0.5.70 → 0.5.72
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/dist/add-existing-form.scss +68 -68
- package/dist/add-products-tab-details.scss +4071 -4071
- package/dist/add-products-tab-uom-details.scss +1106 -1106
- package/dist/add-products-tab.scss +2377 -2377
- package/dist/allocation-header-quota-details.scss +609 -609
- package/dist/allocations-quota-details.scss +525 -525
- package/dist/amount-estimator.scss +1192 -1192
- package/dist/animation-control.scss +23 -23
- package/dist/badge.scss +408 -408
- package/dist/brand-basic-elements.scss +387 -387
- package/dist/brand.scss +142 -142
- package/dist/breadcrumbs.scss +966 -966
- package/dist/builder.js +1 -1
- package/dist/bulk-order-pad.scss +692 -692
- package/dist/bundleDetails.scss +6189 -6189
- package/dist/buy-for-tab-container.scss +141 -141
- package/dist/buy-for-tab.scss +649 -649
- package/dist/buy-for-tabs-container-item.scss +80 -80
- package/dist/buyForPopup.scss +339 -339
- package/dist/cart-details.scss +3986 -3986
- package/dist/cart-products-sidebar.scss +211 -211
- package/dist/cart-wrapper.scss +127 -127
- package/dist/cartDropdownOverlay.scss +653 -653
- package/dist/cartGrouping.scss +89 -89
- package/dist/category-groups-element.scss +739 -739
- package/dist/category-groups-quota-details.scss +626 -626
- package/dist/category.scss +137 -137
- package/dist/categoryDetails.scss +61 -61
- package/dist/categoryWidget.scss +34 -34
- package/dist/checkbox-radio.scss +124 -124
- package/dist/code-temp.scss +59 -59
- package/dist/colorpicker_v2.scss +62 -62
- package/dist/common-element.scss +35 -35
- package/dist/confirm-modal.scss +370 -370
- package/dist/confirmationModal.scss +139 -139
- package/dist/contact-us.scss +105 -105
- package/dist/container.scss +168 -168
- package/dist/custom-fonts.scss +100 -100
- package/dist/customization-tree.scss +162 -162
- package/dist/default-dropdown.scss +259 -259
- package/dist/dropdownTemplate.scss +699 -699
- package/dist/editCartItem.scss +110 -110
- package/dist/embed-temp.scss +73 -73
- package/dist/embroider-preview-element.scss +94 -94
- package/dist/embroider-template-1-v2.scss +1105 -1105
- package/dist/embroider-template-1.scss +501 -501
- package/dist/embroidery.scss +247 -247
- package/dist/employee-bulk-order.scss +4060 -4060
- package/dist/emtpy-templates.scss +165 -165
- package/dist/faq.scss +696 -696
- package/dist/fb-dropdown.scss +135 -135
- package/dist/filter-results.scss +361 -361
- package/dist/flex-text-editor.scss +271 -271
- package/dist/form-preview.scss +530 -530
- package/dist/global-styles.scss +198 -198
- package/dist/grid.scss +169 -169
- package/dist/icon-library.scss +78 -78
- package/dist/image-for-product.scss +21 -21
- package/dist/image-temp.scss +203 -203
- package/dist/item-stock.scss +93 -93
- package/dist/kitDetails.scss +5739 -5739
- package/dist/kits.scss +305 -305
- package/dist/language-selector.scss +948 -948
- package/dist/last-x-orders.scss +285 -285
- package/dist/layouter-item.scss +141 -141
- package/dist/layouter-pro-item.scss +139 -139
- package/dist/layouter-pro.scss +134 -134
- package/dist/layouter.scss +491 -491
- package/dist/light-box-v2.scss +155 -155
- package/dist/lightbox.scss +78 -78
- package/dist/loader.scss +37 -37
- package/dist/login.scss +29 -11
- package/dist/marchandiserSets.scss +141 -141
- package/dist/mega-menu-container.scss +152 -152
- package/dist/menu-item.scss +19 -19
- package/dist/menu-v2.scss +999 -999
- package/dist/menu.scss +174 -174
- package/dist/multi-select-dropdown.scss +316 -316
- package/dist/my-templates.scss +477 -477
- package/dist/my-wishlist.scss +27 -27
- package/dist/option-bar.scss +886 -886
- package/dist/order-processing.scss +61 -61
- package/dist/order-status.scss +74 -0
- package/dist/overflow-module.scss +63 -63
- package/dist/past-orders.scss +1039 -1039
- package/dist/payment-methods.scss +307 -307
- package/dist/phone-input.scss +208 -208
- package/dist/pickup-locations.scss +1359 -1359
- package/dist/position-module.scss +95 -95
- package/dist/prefix-list.scss +86 -86
- package/dist/product-actions.scss +2872 -2872
- package/dist/product-basic-elements.scss +600 -600
- package/dist/product-customizations.scss +155 -155
- package/dist/product-inventory.scss +1621 -1621
- package/dist/product-labels.scss +265 -265
- package/dist/product-price.scss +3392 -3392
- package/dist/product-promotions.scss +3224 -3224
- package/dist/product-sizechart.scss +1921 -1921
- package/dist/product.scss +140 -140
- package/dist/profile.scss +824 -824
- package/dist/quantity-selector.scss +1074 -1074
- package/dist/quick-inventory-check.scss +285 -285
- package/dist/quick-links.scss +627 -627
- package/dist/quota-details.scss +526 -526
- package/dist/repeater-embla-controls.scss +211 -211
- package/dist/repeater-grid-toggle.scss +206 -206
- package/dist/repeater-item.scss +152 -152
- package/dist/repeater.scss +946 -946
- package/dist/request-for-quotes.scss +841 -841
- package/dist/responsive-behaviour.scss +29 -29
- package/dist/rfqs.scss +861 -861
- package/dist/scroll.scss +414 -414
- package/dist/search.scss +689 -689
- package/dist/section.scss +276 -276
- package/dist/shareCartSideBar.scss +254 -254
- package/dist/shipping-estimator.scss +41 -41
- package/dist/shipping-payments.scss +2518 -2518
- package/dist/simple-list.scss +338 -338
- package/dist/skeleton.scss +64 -64
- package/dist/sort.scss +176 -176
- package/dist/spotlight.scss +1706 -1706
- package/dist/stack.scss +171 -171
- package/dist/static-global.scss +292 -292
- package/dist/static-text.scss +52 -52
- package/dist/stockStatus.scss +70 -70
- package/dist/store-locations.scss +1592 -1592
- package/dist/sub-category.scss +74 -74
- package/dist/submit-quote.scss +275 -275
- package/dist/tab-container-item.scss +80 -80
- package/dist/tab-container.scss +141 -141
- package/dist/table.scss +9 -0
- package/dist/tabs.scss +440 -440
- package/dist/text-temp.scss +109 -109
- package/dist/theme-classes.scss +421 -421
- package/dist/toaster.scss +392 -392
- package/dist/toggle-button.scss +32 -32
- package/dist/transform-properties-module.scss +20 -20
- package/dist/types/builder/tools/element-edit/login.d.ts +1 -0
- package/dist/types/builder/tools/element-edit/resetPassword.d.ts +1 -0
- package/dist/wishlist-overlay.scss +48 -48
- package/package.json +1 -1
package/dist/scroll.scss
CHANGED
|
@@ -1,414 +1,414 @@
|
|
|
1
|
-
@use "sass:map";
|
|
2
|
-
@use "sass:list";
|
|
3
|
-
@use "./functions.scss" as *;
|
|
4
|
-
|
|
5
|
-
$max-items: 20;
|
|
6
|
-
|
|
7
|
-
[data-div-type="element"] {
|
|
8
|
-
&[data-element-type="scroll"] {
|
|
9
|
-
// width: var(--_sf-nw-wh, var(--_tst-lt-wh));
|
|
10
|
-
width: var(
|
|
11
|
-
--_sf-el-wh-st-mx,
|
|
12
|
-
calc(
|
|
13
|
-
1% * var(--_ctm-mob-ele-nw-wh-vl, var(--_ctm-tab-ele-nw-wh-vl, var(--_ctm-ele-nw-wh-vl)))
|
|
14
|
-
)
|
|
15
|
-
);
|
|
16
|
-
margin: var(--_ctm-mob-lt-mn, var(--_ctm-tab-lt-mn, var(--_ctm-lt-mn)));
|
|
17
|
-
aspect-ratio: 1 / var(--_sf-aspect-ratio);
|
|
18
|
-
|
|
19
|
-
& > .wrapper {
|
|
20
|
-
width: var(--_ctm-mob-lt-wh, var(--_ctm-tab-lt-wh, var(--_ctm-lt-wh)));
|
|
21
|
-
// height: var(--_ctm-mob-lt-ht, var(--_ctm-tab-lt-ht, var(--_ctm-lt-ht)));
|
|
22
|
-
|
|
23
|
-
overflow: hidden;
|
|
24
|
-
white-space: nowrap;
|
|
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
|
-
|
|
41
|
-
&[data-widget-shadow="true"] {
|
|
42
|
-
box-shadow: var(
|
|
43
|
-
--_ctm-mob-dn-sl-cr-sw-ae,
|
|
44
|
-
var(--_ctm-tab-dn-sl-cr-sw-ae, var(--_ctm-dn-sl-cr-sw-ae))
|
|
45
|
-
)
|
|
46
|
-
var(--_ctm-mob-dn-sl-cr-sw-br, var(--_ctm-tab-dn-sl-cr-sw-br, var(--_ctm-dn-sl-cr-sw-br)))
|
|
47
|
-
var(--_ctm-mob-dn-sl-cr-sw-sd, var(--_ctm-tab-dn-sl-cr-sw-sd, var(--_ctm-dn-sl-cr-sw-sd)))
|
|
48
|
-
var(--_ctm-mob-dn-sl-cr-sw-cr, var(--_ctm-tab-dn-sl-cr-sw-cr, var(--_ctm-dn-sl-cr-sw-cr)));
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
// .scroll__container {
|
|
52
|
-
@for $i from 1 through $max-items {
|
|
53
|
-
.scroll-item[data-index="i#{$i}"] {
|
|
54
|
-
display: flex;
|
|
55
|
-
padding: prepareMediaVariable(
|
|
56
|
-
--_ctm-dn-i#{$i}-pg,
|
|
57
|
-
#{prepareMediaVariable(--_ctm-dn-i1-pg)}
|
|
58
|
-
);
|
|
59
|
-
gap: prepareMediaVariable(
|
|
60
|
-
--_ctm-dn-i#{$i}-im-gp,
|
|
61
|
-
#{prepareMediaVariable(--_ctm-dn-i1-im-gp)}
|
|
62
|
-
);
|
|
63
|
-
background-color: prepareMediaVariable(
|
|
64
|
-
--_ctm-dn-i#{$i}-bd-cr,
|
|
65
|
-
#{prepareMediaVariable(--_ctm-dn-i1-bd-cr)}
|
|
66
|
-
);
|
|
67
|
-
border-color: prepareMediaVariable(
|
|
68
|
-
--_ctm-dn-i#{$i}-br-cr,
|
|
69
|
-
#{prepareMediaVariable(--_ctm-dn-i1-br-cr)}
|
|
70
|
-
);
|
|
71
|
-
border-style: prepareMediaVariable(
|
|
72
|
-
--_ctm-dn-i#{$i}-br-se,
|
|
73
|
-
#{prepareMediaVariable(--_ctm-dn-i1-br-se)}
|
|
74
|
-
);
|
|
75
|
-
border-width: prepareMediaVariable(
|
|
76
|
-
--_ctm-dn-i#{$i}-br-wh,
|
|
77
|
-
#{prepareMediaVariable(--_ctm-dn-i1-br-wh)}
|
|
78
|
-
);
|
|
79
|
-
border-radius: prepareMediaVariable(
|
|
80
|
-
--_ctm-dn-i#{$i}-br-rs,
|
|
81
|
-
#{prepareMediaVariable(--_ctm-dn-i1-br-rs)}
|
|
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
|
-
}
|
|
109
|
-
color: prepareMediaVariable(
|
|
110
|
-
--_ctm-dn-i#{$i}-cr,
|
|
111
|
-
#{prepareMediaVariable(--_ctm-dn-i1-cr)}
|
|
112
|
-
);
|
|
113
|
-
font-family: prepareMediaVariable(
|
|
114
|
-
--_ctm-dn-i#{$i}-ft-fy,
|
|
115
|
-
#{prepareMediaVariable(--_ctm-dn-i1-ft-fy)}
|
|
116
|
-
);
|
|
117
|
-
&.flex__overflow {
|
|
118
|
-
white-space: normal;
|
|
119
|
-
@include restrictToLinesShow(#{var(--_sf-line-clamp, 1)});
|
|
120
|
-
}
|
|
121
|
-
font-size: prepareMediaVariable(
|
|
122
|
-
--_ctm-dn-i#{$i}-ft-se,
|
|
123
|
-
#{prepareMediaVariable(--_ctm-dn-i1-ft-se)}
|
|
124
|
-
);
|
|
125
|
-
font-weight: prepareMediaVariable(
|
|
126
|
-
--_ctm-dn-i#{$i}-ft-wt,
|
|
127
|
-
#{prepareMediaVariable(--_ctm-dn-i1-ft-wt)}
|
|
128
|
-
);
|
|
129
|
-
font-style: prepareMediaVariable(
|
|
130
|
-
--_ctm-dn-i#{$i}-ft-se-ic,
|
|
131
|
-
#{prepareMediaVariable(--_ctm-dn-i1-ft-se-ic)}
|
|
132
|
-
);
|
|
133
|
-
text-align: prepareMediaVariable(
|
|
134
|
-
--_ctm-dn-i#{$i}-tt-an,
|
|
135
|
-
#{prepareMediaVariable(--_ctm-dn-i1-tt-an)}
|
|
136
|
-
);
|
|
137
|
-
letter-spacing: prepareMediaVariable(
|
|
138
|
-
--_ctm-dn-i#{$i}-lr-sg,
|
|
139
|
-
#{prepareMediaVariable(--_ctm-dn-i1-lr-sg)}
|
|
140
|
-
);
|
|
141
|
-
line-height: prepareMediaVariable(
|
|
142
|
-
--_ctm-dn-i#{$i}-le-ht,
|
|
143
|
-
#{prepareMediaVariable(--_ctm-dn-i1-le-ht)}
|
|
144
|
-
);
|
|
145
|
-
text-decoration: prepareMediaVariable(
|
|
146
|
-
--_ctm-dn-i#{$i}-ue,
|
|
147
|
-
#{prepareMediaVariable(--_ctm-dn-i1-ue)}
|
|
148
|
-
);
|
|
149
|
-
// All three inherit, so setting them on the item is enough for the text node
|
|
150
|
-
// (and the `.scroll-item__text` span the clamp uses) to pick them up.
|
|
151
|
-
text-transform: prepareMediaVariable(
|
|
152
|
-
--_ctm-dn-i#{$i}-tt-tm,
|
|
153
|
-
#{prepareMediaVariable(--_ctm-dn-i1-tt-tm)}
|
|
154
|
-
);
|
|
155
|
-
word-wrap: prepareMediaVariable(
|
|
156
|
-
--_ctm-dn-i#{$i}-wd-wr,
|
|
157
|
-
#{prepareMediaVariable(--_ctm-dn-i1-wd-wr)}
|
|
158
|
-
);
|
|
159
|
-
word-break: prepareMediaVariable(
|
|
160
|
-
--_ctm-dn-i#{$i}-wd-bk,
|
|
161
|
-
#{prepareMediaVariable(--_ctm-dn-i1-wd-bk)}
|
|
162
|
-
);
|
|
163
|
-
|
|
164
|
-
.icon {
|
|
165
|
-
svg {
|
|
166
|
-
width: prepareMediaVariable(
|
|
167
|
-
--_ctm-dn-i#{$i}-in-se,
|
|
168
|
-
#{prepareMediaVariable(--_ctm-dn-i1-in-se)}
|
|
169
|
-
);
|
|
170
|
-
height: prepareMediaVariable(
|
|
171
|
-
--_ctm-dn-i#{$i}-in-se,
|
|
172
|
-
#{prepareMediaVariable(--_ctm-dn-i1-in-se)}
|
|
173
|
-
);
|
|
174
|
-
path {
|
|
175
|
-
stroke: prepareMediaVariable(
|
|
176
|
-
--_ctm-dn-i#{$i}-in-c1,
|
|
177
|
-
#{prepareMediaVariable(--_ctm-dn-i1-in-c1)}
|
|
178
|
-
);
|
|
179
|
-
// Overrides the stroke-width presentation attribute baked into the icon markup.
|
|
180
|
-
stroke-width: prepareMediaVariable(
|
|
181
|
-
--_ctm-dn-i#{$i}-se-wh,
|
|
182
|
-
#{prepareMediaVariable(--_ctm-dn-i1-se-wh)}
|
|
183
|
-
);
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
&[data-pause-on-hover="true"] .scrolling {
|
|
191
|
-
&:hover {
|
|
192
|
-
animation-play-state: paused;
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
&[data-scroll-direction="leftToRight"] .scrolling {
|
|
197
|
-
animation-direction: normal;
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
&[data-scroll-direction="rightToLeft"] .scrolling {
|
|
201
|
-
animation-direction: reverse;
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
// Vertical scroll. The horizontal marquee translates on X and lays the items out
|
|
205
|
-
// in a row; both have to flip for a vertical run, so the two vertical directions
|
|
206
|
-
// share this block and only differ by `animation-direction` below.
|
|
207
|
-
&[data-scroll-direction="topToBottom"],
|
|
208
|
-
&[data-scroll-direction="bottomToTop"] {
|
|
209
|
-
// `nowrap` is what keeps the horizontal run on one line; it fights a column stack.
|
|
210
|
-
white-space: normal;
|
|
211
|
-
|
|
212
|
-
.scrolling {
|
|
213
|
-
flex-direction: column;
|
|
214
|
-
// Full width so the items have room to sit left, centre or right inside the
|
|
215
|
-
// container. Left to size itself, the track is only as wide as its widest
|
|
216
|
-
// item and Horizontal Alignment would have no space to move anything in.
|
|
217
|
-
width: 100%;
|
|
218
|
-
animation-name: marquee-vertical;
|
|
219
|
-
padding-right: 0;
|
|
220
|
-
padding-bottom: 10px;
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
// Horizontal Alignment. The track is a column here, so its cross axis is the
|
|
224
|
-
// horizontal one and `align-items` is what places the items across it.
|
|
225
|
-
&[data-horizontal-alignment="left"] .scrolling {
|
|
226
|
-
align-items: flex-start;
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
&[data-horizontal-alignment="center"] .scrolling {
|
|
230
|
-
align-items: center;
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
&[data-horizontal-alignment="right"] .scrolling {
|
|
234
|
-
align-items: flex-end;
|
|
235
|
-
}
|
|
236
|
-
|
|
237
|
-
// The container is sized with `min-height`, which is right for a row (content
|
|
238
|
-
// never exceeds it) but wrong for a column: the stack would simply grow the box,
|
|
239
|
-
// nothing would overflow, and the marquee would look frozen. Pin the height.
|
|
240
|
-
.scroll__container {
|
|
241
|
-
height: var(--_ctm-mob-lt-ht, var(--_ctm-tab-lt-ht, var(--_ctm-lt-ht)));
|
|
242
|
-
align-items: flex-start;
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
// `marquee-vertical` translates upward, which reads as bottom-to-top on screen —
|
|
247
|
-
// so that is the `normal` case and top-to-bottom is the reversed one. Same trick
|
|
248
|
-
// as the horizontal pair above.
|
|
249
|
-
&[data-scroll-direction="bottomToTop"] .scrolling {
|
|
250
|
-
animation-direction: normal;
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
&[data-scroll-direction="topToBottom"] .scrolling {
|
|
254
|
-
animation-direction: reverse;
|
|
255
|
-
}
|
|
256
|
-
|
|
257
|
-
&[data-scroll-speed="0.5x"] .scrolling {
|
|
258
|
-
animation-duration: 40s;
|
|
259
|
-
}
|
|
260
|
-
&[data-scroll-speed="1x"] .scrolling {
|
|
261
|
-
animation-duration: 20s;
|
|
262
|
-
}
|
|
263
|
-
&[data-scroll-speed="2x"] .scrolling {
|
|
264
|
-
animation-duration: 10s;
|
|
265
|
-
}
|
|
266
|
-
&[data-scroll-speed="4x"] .scrolling {
|
|
267
|
-
animation-duration: 5s;
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
&[data-repeat-elements="true"] .scrolling {
|
|
271
|
-
animation-iteration-count: infinite;
|
|
272
|
-
}
|
|
273
|
-
&[data-repeat-elements="false"] .scrolling {
|
|
274
|
-
animation-iteration-count: 1;
|
|
275
|
-
}
|
|
276
|
-
}
|
|
277
|
-
|
|
278
|
-
// The Scroll Container's shadow is painted on `.wrapper` rather than on
|
|
279
|
-
// `.scroll__container`: the container fills the wrapper, and the wrapper clips
|
|
280
|
-
// (`overflow: hidden`), so a shadow on the container would be clipped away. An
|
|
281
|
-
// element's own box-shadow is never clipped by its own overflow, so the wrapper is
|
|
282
|
-
// the right box for it — and it carries the matching border-radius (see above) so
|
|
283
|
-
// the shadow follows the rounded shape instead of drawing a square glow.
|
|
284
|
-
//
|
|
285
|
-
// These were previously written as `&[data-widget-shadow=...]`, which targets the
|
|
286
|
-
// element root, but the attribute is emitted on `.wrapper` (unlike
|
|
287
|
-
// `data-widget-border`, which is on the root) — so neither rule ever matched.
|
|
288
|
-
& > .wrapper[data-widget-shadow="false"] {
|
|
289
|
-
box-shadow: none;
|
|
290
|
-
}
|
|
291
|
-
|
|
292
|
-
&[data-widget-border="true"] {
|
|
293
|
-
.scroll__container {
|
|
294
|
-
border-color: var(
|
|
295
|
-
--_ctm-mob-dn-sl-cr-br-cr,
|
|
296
|
-
var(--_ctm-tab-dn-sl-cr-br-cr, var(--_ctm-dn-sl-cr-br-cr))
|
|
297
|
-
);
|
|
298
|
-
border-style: var(
|
|
299
|
-
--_ctm-mob-dn-sl-cr-br-se,
|
|
300
|
-
var(--_ctm-tab-dn-sl-cr-br-se, var(--_ctm-dn-sl-cr-br-se))
|
|
301
|
-
);
|
|
302
|
-
border-width: var(
|
|
303
|
-
--_ctm-mob-dn-sl-cr-br-wh,
|
|
304
|
-
var(--_ctm-tab-dn-sl-cr-br-wh, var(--_ctm-dn-sl-cr-br-wh))
|
|
305
|
-
);
|
|
306
|
-
}
|
|
307
|
-
}
|
|
308
|
-
|
|
309
|
-
.scroll__container {
|
|
310
|
-
width: 100%;
|
|
311
|
-
// height: 100%;
|
|
312
|
-
min-height: var(--_ctm-mob-lt-ht, var(--_ctm-tab-lt-ht, var(--_ctm-lt-ht)));
|
|
313
|
-
padding: var(--_ctm-mob-lt-pg, var(--_ctm-tab-lt-pg, var(--_ctm-lt-pg)));
|
|
314
|
-
overflow: hidden;
|
|
315
|
-
white-space: nowrap;
|
|
316
|
-
display: flex;
|
|
317
|
-
justify-content: flex-start;
|
|
318
|
-
align-items: center;
|
|
319
|
-
background-color: var(
|
|
320
|
-
--_ctm-mob-dn-sl-cr-bd-cr,
|
|
321
|
-
var(--_ctm-tab-dn-sl-cr-bd-cr, var(--_ctm-dn-sl-cr-bd-cr))
|
|
322
|
-
);
|
|
323
|
-
border-radius: var(
|
|
324
|
-
--_ctm-mob-dn-sl-cr-br-rs,
|
|
325
|
-
var(--_ctm-tab-dn-sl-cr-br-rs, var(--_ctm-dn-sl-cr-br-rs))
|
|
326
|
-
);
|
|
327
|
-
|
|
328
|
-
.scrolling {
|
|
329
|
-
display: flex;
|
|
330
|
-
flex-direction: row;
|
|
331
|
-
justify-content: flex-start;
|
|
332
|
-
align-items: center;
|
|
333
|
-
flex-shrink: 0;
|
|
334
|
-
gap: var(--_ctm-mob-lt-im-sg, var(--_ctm-tab-lt-im-sg, var(--_ctm-lt-im-sg)));
|
|
335
|
-
padding-right: 10px;
|
|
336
|
-
animation-name: marquee;
|
|
337
|
-
animation-timing-function: linear;
|
|
338
|
-
}
|
|
339
|
-
|
|
340
|
-
// Text Overflow. The item's text sits in its own span so the clamp gets a block
|
|
341
|
-
// box of its own — clamping `.scroll-item` itself would swap its `display: flex`
|
|
342
|
-
// for `-webkit-box` and break the icon/text row. `white-space` has to be reset
|
|
343
|
-
// because `.wrapper` sets `nowrap`, and a clamp on a non-wrapping node can only
|
|
344
|
-
// ever show one line.
|
|
345
|
-
.scroll-item__text.flex__overflow {
|
|
346
|
-
@include restrictToLinesShow(#{var(--_sf-line-clamp, 1)});
|
|
347
|
-
white-space: normal;
|
|
348
|
-
}
|
|
349
|
-
|
|
350
|
-
.divider {
|
|
351
|
-
background-color: var(
|
|
352
|
-
--_ctm-mob-dn-dr-se-bd-cr,
|
|
353
|
-
var(--_ctm-tab-dn-dr-se-bd-cr, var(--_ctm-dn-dr-se-bd-cr))
|
|
354
|
-
);
|
|
355
|
-
padding: 3px;
|
|
356
|
-
font-size: var(
|
|
357
|
-
--_ctm-mob-dn-dr-se-se,
|
|
358
|
-
var(--_ctm-tab-dn-dr-se-se, var(--_ctm-dn-dr-se-se))
|
|
359
|
-
);
|
|
360
|
-
color: var(
|
|
361
|
-
--_ctm-mob-dn-dr-se-dr-cr,
|
|
362
|
-
var(--_ctm-tab-dn-dr-se-dr-cr, var(--_ctm-dn-dr-se-dr-cr))
|
|
363
|
-
);
|
|
364
|
-
}
|
|
365
|
-
|
|
366
|
-
.icon {
|
|
367
|
-
background-color: var(
|
|
368
|
-
--_ctm-mob-dn-dr-se-bd-cr,
|
|
369
|
-
var(--_ctm-tab-dn-dr-se-bd-cr, var(--_ctm-dn-dr-se-bd-cr))
|
|
370
|
-
);
|
|
371
|
-
padding: 3px;
|
|
372
|
-
|
|
373
|
-
svg {
|
|
374
|
-
width: var(--_ctm-mob-dn-dr-se-se, var(--_ctm-tab-dn-dr-se-se, var(--_ctm-dn-dr-se-se)));
|
|
375
|
-
height: var(--_ctm-mob-dn-dr-se-se, var(--_ctm-tab-dn-dr-se-se, var(--_ctm-dn-dr-se-se)));
|
|
376
|
-
|
|
377
|
-
path {
|
|
378
|
-
stroke: var(
|
|
379
|
-
--_ctm-mob-dn-dr-se-dr-cr,
|
|
380
|
-
var(--_ctm-tab-dn-dr-se-dr-cr, var(--_ctm-dn-dr-se-dr-cr))
|
|
381
|
-
);
|
|
382
|
-
}
|
|
383
|
-
}
|
|
384
|
-
}
|
|
385
|
-
|
|
386
|
-
// Divider Style > Stroke Width. Scoped to the dividers, which sit as direct
|
|
387
|
-
// children of the track — the items' own icons carry the same `.icon` class, so
|
|
388
|
-
// declaring this in the block above would let the divider's setting retune every
|
|
389
|
-
// item icon too. The value overrides the stroke-width baked into the icon markup;
|
|
390
|
-
// 1.25 matches the schema default.
|
|
391
|
-
> .scrolling > .icon svg path {
|
|
392
|
-
stroke-width: prepareMediaVariable(--_ctm-dn-dr-se-se-wh, 1.25);
|
|
393
|
-
}
|
|
394
|
-
|
|
395
|
-
@keyframes marquee {
|
|
396
|
-
0% {
|
|
397
|
-
transform: translateX(0);
|
|
398
|
-
}
|
|
399
|
-
100% {
|
|
400
|
-
transform: translateX(var(--_marquee-tx, -50%));
|
|
401
|
-
}
|
|
402
|
-
}
|
|
403
|
-
|
|
404
|
-
@keyframes marquee-vertical {
|
|
405
|
-
0% {
|
|
406
|
-
transform: translateY(0);
|
|
407
|
-
}
|
|
408
|
-
100% {
|
|
409
|
-
transform: translateY(var(--_marquee-ty, -50%));
|
|
410
|
-
}
|
|
411
|
-
}
|
|
412
|
-
}
|
|
413
|
-
}
|
|
414
|
-
}
|
|
1
|
+
@use "sass:map";
|
|
2
|
+
@use "sass:list";
|
|
3
|
+
@use "./functions.scss" as *;
|
|
4
|
+
|
|
5
|
+
$max-items: 20;
|
|
6
|
+
|
|
7
|
+
[data-div-type="element"] {
|
|
8
|
+
&[data-element-type="scroll"] {
|
|
9
|
+
// width: var(--_sf-nw-wh, var(--_tst-lt-wh));
|
|
10
|
+
width: var(
|
|
11
|
+
--_sf-el-wh-st-mx,
|
|
12
|
+
calc(
|
|
13
|
+
1% * var(--_ctm-mob-ele-nw-wh-vl, var(--_ctm-tab-ele-nw-wh-vl, var(--_ctm-ele-nw-wh-vl)))
|
|
14
|
+
)
|
|
15
|
+
);
|
|
16
|
+
margin: var(--_ctm-mob-lt-mn, var(--_ctm-tab-lt-mn, var(--_ctm-lt-mn)));
|
|
17
|
+
aspect-ratio: 1 / var(--_sf-aspect-ratio);
|
|
18
|
+
|
|
19
|
+
& > .wrapper {
|
|
20
|
+
width: var(--_ctm-mob-lt-wh, var(--_ctm-tab-lt-wh, var(--_ctm-lt-wh)));
|
|
21
|
+
// height: var(--_ctm-mob-lt-ht, var(--_ctm-tab-lt-ht, var(--_ctm-lt-ht)));
|
|
22
|
+
|
|
23
|
+
overflow: hidden;
|
|
24
|
+
white-space: nowrap;
|
|
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
|
+
|
|
41
|
+
&[data-widget-shadow="true"] {
|
|
42
|
+
box-shadow: var(
|
|
43
|
+
--_ctm-mob-dn-sl-cr-sw-ae,
|
|
44
|
+
var(--_ctm-tab-dn-sl-cr-sw-ae, var(--_ctm-dn-sl-cr-sw-ae))
|
|
45
|
+
)
|
|
46
|
+
var(--_ctm-mob-dn-sl-cr-sw-br, var(--_ctm-tab-dn-sl-cr-sw-br, var(--_ctm-dn-sl-cr-sw-br)))
|
|
47
|
+
var(--_ctm-mob-dn-sl-cr-sw-sd, var(--_ctm-tab-dn-sl-cr-sw-sd, var(--_ctm-dn-sl-cr-sw-sd)))
|
|
48
|
+
var(--_ctm-mob-dn-sl-cr-sw-cr, var(--_ctm-tab-dn-sl-cr-sw-cr, var(--_ctm-dn-sl-cr-sw-cr)));
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// .scroll__container {
|
|
52
|
+
@for $i from 1 through $max-items {
|
|
53
|
+
.scroll-item[data-index="i#{$i}"] {
|
|
54
|
+
display: flex;
|
|
55
|
+
padding: prepareMediaVariable(
|
|
56
|
+
--_ctm-dn-i#{$i}-pg,
|
|
57
|
+
#{prepareMediaVariable(--_ctm-dn-i1-pg)}
|
|
58
|
+
);
|
|
59
|
+
gap: prepareMediaVariable(
|
|
60
|
+
--_ctm-dn-i#{$i}-im-gp,
|
|
61
|
+
#{prepareMediaVariable(--_ctm-dn-i1-im-gp)}
|
|
62
|
+
);
|
|
63
|
+
background-color: prepareMediaVariable(
|
|
64
|
+
--_ctm-dn-i#{$i}-bd-cr,
|
|
65
|
+
#{prepareMediaVariable(--_ctm-dn-i1-bd-cr)}
|
|
66
|
+
);
|
|
67
|
+
border-color: prepareMediaVariable(
|
|
68
|
+
--_ctm-dn-i#{$i}-br-cr,
|
|
69
|
+
#{prepareMediaVariable(--_ctm-dn-i1-br-cr)}
|
|
70
|
+
);
|
|
71
|
+
border-style: prepareMediaVariable(
|
|
72
|
+
--_ctm-dn-i#{$i}-br-se,
|
|
73
|
+
#{prepareMediaVariable(--_ctm-dn-i1-br-se)}
|
|
74
|
+
);
|
|
75
|
+
border-width: prepareMediaVariable(
|
|
76
|
+
--_ctm-dn-i#{$i}-br-wh,
|
|
77
|
+
#{prepareMediaVariable(--_ctm-dn-i1-br-wh)}
|
|
78
|
+
);
|
|
79
|
+
border-radius: prepareMediaVariable(
|
|
80
|
+
--_ctm-dn-i#{$i}-br-rs,
|
|
81
|
+
#{prepareMediaVariable(--_ctm-dn-i1-br-rs)}
|
|
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
|
+
}
|
|
109
|
+
color: prepareMediaVariable(
|
|
110
|
+
--_ctm-dn-i#{$i}-cr,
|
|
111
|
+
#{prepareMediaVariable(--_ctm-dn-i1-cr)}
|
|
112
|
+
);
|
|
113
|
+
font-family: prepareMediaVariable(
|
|
114
|
+
--_ctm-dn-i#{$i}-ft-fy,
|
|
115
|
+
#{prepareMediaVariable(--_ctm-dn-i1-ft-fy)}
|
|
116
|
+
);
|
|
117
|
+
&.flex__overflow {
|
|
118
|
+
white-space: normal;
|
|
119
|
+
@include restrictToLinesShow(#{var(--_sf-line-clamp, 1)});
|
|
120
|
+
}
|
|
121
|
+
font-size: prepareMediaVariable(
|
|
122
|
+
--_ctm-dn-i#{$i}-ft-se,
|
|
123
|
+
#{prepareMediaVariable(--_ctm-dn-i1-ft-se)}
|
|
124
|
+
);
|
|
125
|
+
font-weight: prepareMediaVariable(
|
|
126
|
+
--_ctm-dn-i#{$i}-ft-wt,
|
|
127
|
+
#{prepareMediaVariable(--_ctm-dn-i1-ft-wt)}
|
|
128
|
+
);
|
|
129
|
+
font-style: prepareMediaVariable(
|
|
130
|
+
--_ctm-dn-i#{$i}-ft-se-ic,
|
|
131
|
+
#{prepareMediaVariable(--_ctm-dn-i1-ft-se-ic)}
|
|
132
|
+
);
|
|
133
|
+
text-align: prepareMediaVariable(
|
|
134
|
+
--_ctm-dn-i#{$i}-tt-an,
|
|
135
|
+
#{prepareMediaVariable(--_ctm-dn-i1-tt-an)}
|
|
136
|
+
);
|
|
137
|
+
letter-spacing: prepareMediaVariable(
|
|
138
|
+
--_ctm-dn-i#{$i}-lr-sg,
|
|
139
|
+
#{prepareMediaVariable(--_ctm-dn-i1-lr-sg)}
|
|
140
|
+
);
|
|
141
|
+
line-height: prepareMediaVariable(
|
|
142
|
+
--_ctm-dn-i#{$i}-le-ht,
|
|
143
|
+
#{prepareMediaVariable(--_ctm-dn-i1-le-ht)}
|
|
144
|
+
);
|
|
145
|
+
text-decoration: prepareMediaVariable(
|
|
146
|
+
--_ctm-dn-i#{$i}-ue,
|
|
147
|
+
#{prepareMediaVariable(--_ctm-dn-i1-ue)}
|
|
148
|
+
);
|
|
149
|
+
// All three inherit, so setting them on the item is enough for the text node
|
|
150
|
+
// (and the `.scroll-item__text` span the clamp uses) to pick them up.
|
|
151
|
+
text-transform: prepareMediaVariable(
|
|
152
|
+
--_ctm-dn-i#{$i}-tt-tm,
|
|
153
|
+
#{prepareMediaVariable(--_ctm-dn-i1-tt-tm)}
|
|
154
|
+
);
|
|
155
|
+
word-wrap: prepareMediaVariable(
|
|
156
|
+
--_ctm-dn-i#{$i}-wd-wr,
|
|
157
|
+
#{prepareMediaVariable(--_ctm-dn-i1-wd-wr)}
|
|
158
|
+
);
|
|
159
|
+
word-break: prepareMediaVariable(
|
|
160
|
+
--_ctm-dn-i#{$i}-wd-bk,
|
|
161
|
+
#{prepareMediaVariable(--_ctm-dn-i1-wd-bk)}
|
|
162
|
+
);
|
|
163
|
+
|
|
164
|
+
.icon {
|
|
165
|
+
svg {
|
|
166
|
+
width: prepareMediaVariable(
|
|
167
|
+
--_ctm-dn-i#{$i}-in-se,
|
|
168
|
+
#{prepareMediaVariable(--_ctm-dn-i1-in-se)}
|
|
169
|
+
);
|
|
170
|
+
height: prepareMediaVariable(
|
|
171
|
+
--_ctm-dn-i#{$i}-in-se,
|
|
172
|
+
#{prepareMediaVariable(--_ctm-dn-i1-in-se)}
|
|
173
|
+
);
|
|
174
|
+
path {
|
|
175
|
+
stroke: prepareMediaVariable(
|
|
176
|
+
--_ctm-dn-i#{$i}-in-c1,
|
|
177
|
+
#{prepareMediaVariable(--_ctm-dn-i1-in-c1)}
|
|
178
|
+
);
|
|
179
|
+
// Overrides the stroke-width presentation attribute baked into the icon markup.
|
|
180
|
+
stroke-width: prepareMediaVariable(
|
|
181
|
+
--_ctm-dn-i#{$i}-se-wh,
|
|
182
|
+
#{prepareMediaVariable(--_ctm-dn-i1-se-wh)}
|
|
183
|
+
);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
&[data-pause-on-hover="true"] .scrolling {
|
|
191
|
+
&:hover {
|
|
192
|
+
animation-play-state: paused;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
&[data-scroll-direction="leftToRight"] .scrolling {
|
|
197
|
+
animation-direction: normal;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
&[data-scroll-direction="rightToLeft"] .scrolling {
|
|
201
|
+
animation-direction: reverse;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
// Vertical scroll. The horizontal marquee translates on X and lays the items out
|
|
205
|
+
// in a row; both have to flip for a vertical run, so the two vertical directions
|
|
206
|
+
// share this block and only differ by `animation-direction` below.
|
|
207
|
+
&[data-scroll-direction="topToBottom"],
|
|
208
|
+
&[data-scroll-direction="bottomToTop"] {
|
|
209
|
+
// `nowrap` is what keeps the horizontal run on one line; it fights a column stack.
|
|
210
|
+
white-space: normal;
|
|
211
|
+
|
|
212
|
+
.scrolling {
|
|
213
|
+
flex-direction: column;
|
|
214
|
+
// Full width so the items have room to sit left, centre or right inside the
|
|
215
|
+
// container. Left to size itself, the track is only as wide as its widest
|
|
216
|
+
// item and Horizontal Alignment would have no space to move anything in.
|
|
217
|
+
width: 100%;
|
|
218
|
+
animation-name: marquee-vertical;
|
|
219
|
+
padding-right: 0;
|
|
220
|
+
padding-bottom: 10px;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
// Horizontal Alignment. The track is a column here, so its cross axis is the
|
|
224
|
+
// horizontal one and `align-items` is what places the items across it.
|
|
225
|
+
&[data-horizontal-alignment="left"] .scrolling {
|
|
226
|
+
align-items: flex-start;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
&[data-horizontal-alignment="center"] .scrolling {
|
|
230
|
+
align-items: center;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
&[data-horizontal-alignment="right"] .scrolling {
|
|
234
|
+
align-items: flex-end;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
// The container is sized with `min-height`, which is right for a row (content
|
|
238
|
+
// never exceeds it) but wrong for a column: the stack would simply grow the box,
|
|
239
|
+
// nothing would overflow, and the marquee would look frozen. Pin the height.
|
|
240
|
+
.scroll__container {
|
|
241
|
+
height: var(--_ctm-mob-lt-ht, var(--_ctm-tab-lt-ht, var(--_ctm-lt-ht)));
|
|
242
|
+
align-items: flex-start;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
// `marquee-vertical` translates upward, which reads as bottom-to-top on screen —
|
|
247
|
+
// so that is the `normal` case and top-to-bottom is the reversed one. Same trick
|
|
248
|
+
// as the horizontal pair above.
|
|
249
|
+
&[data-scroll-direction="bottomToTop"] .scrolling {
|
|
250
|
+
animation-direction: normal;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
&[data-scroll-direction="topToBottom"] .scrolling {
|
|
254
|
+
animation-direction: reverse;
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
&[data-scroll-speed="0.5x"] .scrolling {
|
|
258
|
+
animation-duration: 40s;
|
|
259
|
+
}
|
|
260
|
+
&[data-scroll-speed="1x"] .scrolling {
|
|
261
|
+
animation-duration: 20s;
|
|
262
|
+
}
|
|
263
|
+
&[data-scroll-speed="2x"] .scrolling {
|
|
264
|
+
animation-duration: 10s;
|
|
265
|
+
}
|
|
266
|
+
&[data-scroll-speed="4x"] .scrolling {
|
|
267
|
+
animation-duration: 5s;
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
&[data-repeat-elements="true"] .scrolling {
|
|
271
|
+
animation-iteration-count: infinite;
|
|
272
|
+
}
|
|
273
|
+
&[data-repeat-elements="false"] .scrolling {
|
|
274
|
+
animation-iteration-count: 1;
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
// The Scroll Container's shadow is painted on `.wrapper` rather than on
|
|
279
|
+
// `.scroll__container`: the container fills the wrapper, and the wrapper clips
|
|
280
|
+
// (`overflow: hidden`), so a shadow on the container would be clipped away. An
|
|
281
|
+
// element's own box-shadow is never clipped by its own overflow, so the wrapper is
|
|
282
|
+
// the right box for it — and it carries the matching border-radius (see above) so
|
|
283
|
+
// the shadow follows the rounded shape instead of drawing a square glow.
|
|
284
|
+
//
|
|
285
|
+
// These were previously written as `&[data-widget-shadow=...]`, which targets the
|
|
286
|
+
// element root, but the attribute is emitted on `.wrapper` (unlike
|
|
287
|
+
// `data-widget-border`, which is on the root) — so neither rule ever matched.
|
|
288
|
+
& > .wrapper[data-widget-shadow="false"] {
|
|
289
|
+
box-shadow: none;
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
&[data-widget-border="true"] {
|
|
293
|
+
.scroll__container {
|
|
294
|
+
border-color: var(
|
|
295
|
+
--_ctm-mob-dn-sl-cr-br-cr,
|
|
296
|
+
var(--_ctm-tab-dn-sl-cr-br-cr, var(--_ctm-dn-sl-cr-br-cr))
|
|
297
|
+
);
|
|
298
|
+
border-style: var(
|
|
299
|
+
--_ctm-mob-dn-sl-cr-br-se,
|
|
300
|
+
var(--_ctm-tab-dn-sl-cr-br-se, var(--_ctm-dn-sl-cr-br-se))
|
|
301
|
+
);
|
|
302
|
+
border-width: var(
|
|
303
|
+
--_ctm-mob-dn-sl-cr-br-wh,
|
|
304
|
+
var(--_ctm-tab-dn-sl-cr-br-wh, var(--_ctm-dn-sl-cr-br-wh))
|
|
305
|
+
);
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
.scroll__container {
|
|
310
|
+
width: 100%;
|
|
311
|
+
// height: 100%;
|
|
312
|
+
min-height: var(--_ctm-mob-lt-ht, var(--_ctm-tab-lt-ht, var(--_ctm-lt-ht)));
|
|
313
|
+
padding: var(--_ctm-mob-lt-pg, var(--_ctm-tab-lt-pg, var(--_ctm-lt-pg)));
|
|
314
|
+
overflow: hidden;
|
|
315
|
+
white-space: nowrap;
|
|
316
|
+
display: flex;
|
|
317
|
+
justify-content: flex-start;
|
|
318
|
+
align-items: center;
|
|
319
|
+
background-color: var(
|
|
320
|
+
--_ctm-mob-dn-sl-cr-bd-cr,
|
|
321
|
+
var(--_ctm-tab-dn-sl-cr-bd-cr, var(--_ctm-dn-sl-cr-bd-cr))
|
|
322
|
+
);
|
|
323
|
+
border-radius: var(
|
|
324
|
+
--_ctm-mob-dn-sl-cr-br-rs,
|
|
325
|
+
var(--_ctm-tab-dn-sl-cr-br-rs, var(--_ctm-dn-sl-cr-br-rs))
|
|
326
|
+
);
|
|
327
|
+
|
|
328
|
+
.scrolling {
|
|
329
|
+
display: flex;
|
|
330
|
+
flex-direction: row;
|
|
331
|
+
justify-content: flex-start;
|
|
332
|
+
align-items: center;
|
|
333
|
+
flex-shrink: 0;
|
|
334
|
+
gap: var(--_ctm-mob-lt-im-sg, var(--_ctm-tab-lt-im-sg, var(--_ctm-lt-im-sg)));
|
|
335
|
+
padding-right: 10px;
|
|
336
|
+
animation-name: marquee;
|
|
337
|
+
animation-timing-function: linear;
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
// Text Overflow. The item's text sits in its own span so the clamp gets a block
|
|
341
|
+
// box of its own — clamping `.scroll-item` itself would swap its `display: flex`
|
|
342
|
+
// for `-webkit-box` and break the icon/text row. `white-space` has to be reset
|
|
343
|
+
// because `.wrapper` sets `nowrap`, and a clamp on a non-wrapping node can only
|
|
344
|
+
// ever show one line.
|
|
345
|
+
.scroll-item__text.flex__overflow {
|
|
346
|
+
@include restrictToLinesShow(#{var(--_sf-line-clamp, 1)});
|
|
347
|
+
white-space: normal;
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
.divider {
|
|
351
|
+
background-color: var(
|
|
352
|
+
--_ctm-mob-dn-dr-se-bd-cr,
|
|
353
|
+
var(--_ctm-tab-dn-dr-se-bd-cr, var(--_ctm-dn-dr-se-bd-cr))
|
|
354
|
+
);
|
|
355
|
+
padding: 3px;
|
|
356
|
+
font-size: var(
|
|
357
|
+
--_ctm-mob-dn-dr-se-se,
|
|
358
|
+
var(--_ctm-tab-dn-dr-se-se, var(--_ctm-dn-dr-se-se))
|
|
359
|
+
);
|
|
360
|
+
color: var(
|
|
361
|
+
--_ctm-mob-dn-dr-se-dr-cr,
|
|
362
|
+
var(--_ctm-tab-dn-dr-se-dr-cr, var(--_ctm-dn-dr-se-dr-cr))
|
|
363
|
+
);
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
.icon {
|
|
367
|
+
background-color: var(
|
|
368
|
+
--_ctm-mob-dn-dr-se-bd-cr,
|
|
369
|
+
var(--_ctm-tab-dn-dr-se-bd-cr, var(--_ctm-dn-dr-se-bd-cr))
|
|
370
|
+
);
|
|
371
|
+
padding: 3px;
|
|
372
|
+
|
|
373
|
+
svg {
|
|
374
|
+
width: var(--_ctm-mob-dn-dr-se-se, var(--_ctm-tab-dn-dr-se-se, var(--_ctm-dn-dr-se-se)));
|
|
375
|
+
height: var(--_ctm-mob-dn-dr-se-se, var(--_ctm-tab-dn-dr-se-se, var(--_ctm-dn-dr-se-se)));
|
|
376
|
+
|
|
377
|
+
path {
|
|
378
|
+
stroke: var(
|
|
379
|
+
--_ctm-mob-dn-dr-se-dr-cr,
|
|
380
|
+
var(--_ctm-tab-dn-dr-se-dr-cr, var(--_ctm-dn-dr-se-dr-cr))
|
|
381
|
+
);
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
// Divider Style > Stroke Width. Scoped to the dividers, which sit as direct
|
|
387
|
+
// children of the track — the items' own icons carry the same `.icon` class, so
|
|
388
|
+
// declaring this in the block above would let the divider's setting retune every
|
|
389
|
+
// item icon too. The value overrides the stroke-width baked into the icon markup;
|
|
390
|
+
// 1.25 matches the schema default.
|
|
391
|
+
> .scrolling > .icon svg path {
|
|
392
|
+
stroke-width: prepareMediaVariable(--_ctm-dn-dr-se-se-wh, 1.25);
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
@keyframes marquee {
|
|
396
|
+
0% {
|
|
397
|
+
transform: translateX(0);
|
|
398
|
+
}
|
|
399
|
+
100% {
|
|
400
|
+
transform: translateX(var(--_marquee-tx, -50%));
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
@keyframes marquee-vertical {
|
|
405
|
+
0% {
|
|
406
|
+
transform: translateY(0);
|
|
407
|
+
}
|
|
408
|
+
100% {
|
|
409
|
+
transform: translateY(var(--_marquee-ty, -50%));
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
}
|