@sc-360-v2/storefront-cms-library 0.5.15 → 0.5.16

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.
@@ -4,6 +4,7 @@
4
4
 
5
5
  $resizerId: "[data-cms-tool='cms-element-resizer']";
6
6
  $resizeActive: '[data-cms-element-resizer="true"]';
7
+ $overflowSelector: ".flex__overflow";
7
8
 
8
9
  [data-div-type="element"] {
9
10
  &[data-element-type="cartSummary"] {
@@ -1204,12 +1205,12 @@ $resizeActive: '[data-cms-element-resizer="true"]';
1204
1205
  // letter-spacing: var(--_ctm-dn-hg-tt-dn-lr-sg);
1205
1206
  // text-align: var(--_ctm-dn-hg-tt-dn-tt-an);
1206
1207
  // text-decoration: var(--_ctm-dn-hg-tt-dn-ue);
1207
- display: -webkit-box;
1208
- -webkit-line-clamp: 2;
1208
+ // display: -webkit-box;
1209
+ // -webkit-line-clamp: 2;
1209
1210
  /* Show exactly 2 lines */
1210
- -webkit-box-orient: vertical;
1211
- overflow: hidden;
1212
- text-overflow: ellipsis;
1211
+ // -webkit-box-orient: vertical;
1212
+ // overflow: hidden;
1213
+ // text-overflow: ellipsis;
1213
1214
  font-family: var(
1214
1215
  --_ctm-mob-dn-pt-wt-pt-ne-ft-fy,
1215
1216
  var(--_ctm-tab-dn-pt-wt-pt-ne-ft-fy, var(--_ctm-dn-pt-wt-pt-ne-ft-fy))
@@ -1252,6 +1253,9 @@ $resizeActive: '[data-cms-element-resizer="true"]';
1252
1253
  --_ctm-mob-dn-pt-wt-pt-ne-pg,
1253
1254
  var(--_ctm-tab-dn-pt-wt-pt-ne-pg, var(--_ctm-dn-pt-wt-pt-ne-pg))
1254
1255
  );
1256
+ &#{$overflowSelector} {
1257
+ @include restrictToLinesShow(#{var(--_sf-line-clamp, 1)});
1258
+ }
1255
1259
  }
1256
1260
 
1257
1261
  .cart_summary_primary_text {
@@ -1306,7 +1310,7 @@ $resizeActive: '[data-cms-element-resizer="true"]';
1306
1310
  var(--_ctm-tab-dn-pt-wt-pt-pe-pg, var(--_ctm-dn-pt-wt-pt-pe-pg))
1307
1311
  );
1308
1312
  margin-top: 2px;
1309
- width: 20%;
1313
+ // width: 20%;
1310
1314
  }
1311
1315
 
1312
1316
  .cart_summary_product_text {
@@ -1883,8 +1887,8 @@ $resizeActive: '[data-cms-element-resizer="true"]';
1883
1887
  }
1884
1888
 
1885
1889
  &:hover {
1886
- // --_sf-hr-bd-cr: #{prepareMediaVariable(--_ctm-dn-ct-as-rt-qe-hr-se-bd-cr)};
1887
- @include BgColorLighter(var(--_sf-hr-cr), 5%);
1890
+ --_sf-hr-bd-cr: #{prepareMediaVariable(--_ctm-dn-ct-as-rt-qe-hr-se-bd-cr)};
1891
+ // @include BgColorLighter(var(--_sf-hr-cr), 5%);
1888
1892
  --_sf-hr-br-cr: #{prepareMediaVariable(--_ctm-dn-ct-as-rt-qe-hr-se-br-cr)};
1889
1893
  --_sf-hr-br-se: #{prepareMediaVariable(--_ctm-dn-ct-as-rt-qe-hr-se-br-se)};
1890
1894
  --_sf-hr-br-wh: #{prepareMediaVariable(--_ctm-dn-ct-as-rt-qe-hr-se-br-wh)};
@@ -4,21 +4,131 @@
4
4
  $activeElementSelector: "[data-has-clicked='true']";
5
5
  $resizerId: "[data-cms-tool='cms-element-resizer']";
6
6
  $resizeActive: '[data-cms-element-resizer="true"]';
7
+
8
+ // Generated CSS-var bases (prefix `catego`; path = design-key shortcodes via
9
+ // splitCamelCaseAndJoin). Edits in the design panel write these; the second arg
10
+ // to prepareMediaVariable keeps the Figma default when a var is unset.
11
+ $cg-widget: "--_ctm-catego-dn-wt-se"; // design.widgetStyle
12
+ $cg-sidebar: "--_ctm-catego-dn-sr-dn-sr-cr"; // sidebarDesign.sidebarContainer
13
+ $cg-cat-heading: "--_ctm-catego-dn-sr-dn-cs-hg"; // sidebarDesign.categoriesHeading
14
+ $cg-tree: "--_ctm-catego-dn-sr-dn-cy-te-im"; // sidebarDesign.categoryTreeItem
15
+ $cg-tree-icon: "--_ctm-catego-dn-sr-dn-cy-te-in"; // sidebarDesign.categoryTreeIcon
16
+ $cg-subtree: "--_ctm-catego-dn-sr-dn-sb-cy-te-im"; // sidebarDesign.subCategoryTreeItem
17
+ $cg-chip: "--_ctm-catego-dn-sb-cy-sr-dn-sb-cy-cp"; // subCategoryScrollerDesign.subCategoryChip
18
+ $cg-arrow: "--_ctm-catego-dn-sb-cy-sr-dn-sr-aw"; // subCategoryScrollerDesign.scrollerArrow
19
+ $cg-chip-image: "--_ctm-catego-dn-sb-cy-sr-dn-sb-cy-ie"; // subCategoryScrollerDesign.subCategoryImage
20
+ $cg-bc-item: "--_ctm-catego-dn-bb-dn-bb-im"; // breadcrumbDesign.breadcrumbItem
21
+ $cg-bc-sep: "--_ctm-catego-dn-bb-dn-sr-in"; // breadcrumbDesign.separatorIcon
22
+ $cg-allprod-heading: "--_ctm-catego-dn-pt-gd-dn-al-ps-hg"; // productGridDesign.allProductsHeading
23
+ $cg-card: "--_ctm-catego-dn-pt-gd-dn-pt-cd"; // productGridDesign.productCard
24
+ $cg-brand: "--_ctm-catego-dn-pt-gd-dn-bd-ne"; // productGridDesign.brandName
25
+ $cg-name: "--_ctm-catego-dn-pt-gd-dn-pt-ne"; // productGridDesign.productName
26
+ $cg-price: "--_ctm-catego-dn-pt-gd-dn-pt-pe"; // productGridDesign.productPrice
27
+ $cg-variants: "--_ctm-catego-dn-pt-gd-dn-vs-tt"; // productGridDesign.variantsText
28
+
29
+ @mixin cg-font($base, $color, $size, $weight: 600) {
30
+ color: prepareMediaVariable(#{$base}-cr, $color);
31
+ font-family: prepareMediaVariable(#{$base}-ft-fy, ("Inter", sans-serif));
32
+ font-size: prepareMediaVariable(#{$base}-ft-se, $size);
33
+ font-weight: prepareMediaVariable(#{$base}-ft-wt, $weight);
34
+ // Remaining typography states (only apply when set in the design panel).
35
+ font-style: prepareMediaVariable(#{$base}-ft-se-ic);
36
+ text-align: prepareMediaVariable(#{$base}-tt-an);
37
+ letter-spacing: prepareMediaVariable(#{$base}-lr-sg);
38
+ line-height: prepareMediaVariable(#{$base}-le-ht);
39
+ text-decoration: prepareMediaVariable(#{$base}-ue);
40
+ }
41
+
42
+ // Container fill / border / radius / shadow for a given state base
43
+ // (e.g. `$cg-tree-dt-se`). Shadow stays invisible until set in the panel.
44
+ @mixin cg-design($base) {
45
+ background-color: prepareMediaVariable(#{$base}-bd-cr, transparent);
46
+ border-color: prepareMediaVariable(#{$base}-br-cr, transparent);
47
+ border-style: prepareMediaVariable(#{$base}-br-se, solid);
48
+ border-width: prepareMediaVariable(#{$base}-br-wh, 0);
49
+ border-radius: prepareMediaVariable(#{$base}-br-rs, 4px);
50
+ box-shadow: prepareMediaVariable(#{$base}-sw-ae, 0 0) prepareMediaVariable(#{$base}-sw-br, 0)
51
+ prepareMediaVariable(#{$base}-sw-sd, 0) prepareMediaVariable(#{$base}-sw-cr, transparent);
52
+ }
53
+
54
+ // Interactive-state typography ($state = "hr-se" | "sd-se"): the state's own
55
+ // vars fall back to the DEFAULT state (dt-se), then the Figma value — so Figma
56
+ // only seeds the default state and edits to the default cascade to every state.
57
+ @mixin cg-font-state($base, $state, $color, $size, $weight: 600) {
58
+ color: prepareMediaVariable(
59
+ #{$base}-#{$state}-cr,
60
+ prepareMediaVariable(#{$base}-dt-se-cr, $color)
61
+ );
62
+ font-family: prepareMediaVariable(
63
+ #{$base}-#{$state}-ft-fy,
64
+ prepareMediaVariable(#{$base}-dt-se-ft-fy, ("Inter", sans-serif))
65
+ );
66
+ font-size: prepareMediaVariable(
67
+ #{$base}-#{$state}-ft-se,
68
+ prepareMediaVariable(#{$base}-dt-se-ft-se, $size)
69
+ );
70
+ font-weight: prepareMediaVariable(
71
+ #{$base}-#{$state}-ft-wt,
72
+ prepareMediaVariable(#{$base}-dt-se-ft-wt, $weight)
73
+ );
74
+ font-style: prepareMediaVariable(
75
+ #{$base}-#{$state}-ft-se-ic,
76
+ prepareMediaVariable(#{$base}-dt-se-ft-se-ic)
77
+ );
78
+ text-align: prepareMediaVariable(
79
+ #{$base}-#{$state}-tt-an,
80
+ prepareMediaVariable(#{$base}-dt-se-tt-an)
81
+ );
82
+ letter-spacing: prepareMediaVariable(
83
+ #{$base}-#{$state}-lr-sg,
84
+ prepareMediaVariable(#{$base}-dt-se-lr-sg)
85
+ );
86
+ line-height: prepareMediaVariable(
87
+ #{$base}-#{$state}-le-ht,
88
+ prepareMediaVariable(#{$base}-dt-se-le-ht)
89
+ );
90
+ text-decoration: prepareMediaVariable(
91
+ #{$base}-#{$state}-ue,
92
+ prepareMediaVariable(#{$base}-dt-se-ue)
93
+ );
94
+ }
95
+
96
+ // Interactive-state container design, falling back to the DEFAULT state.
97
+ @mixin cg-design-state($base, $state) {
98
+ background-color: prepareMediaVariable(
99
+ #{$base}-#{$state}-bd-cr,
100
+ prepareMediaVariable(#{$base}-dt-se-bd-cr, transparent)
101
+ );
102
+ border-color: prepareMediaVariable(
103
+ #{$base}-#{$state}-br-cr,
104
+ prepareMediaVariable(#{$base}-dt-se-br-cr, transparent)
105
+ );
106
+ border-style: prepareMediaVariable(
107
+ #{$base}-#{$state}-br-se,
108
+ prepareMediaVariable(#{$base}-dt-se-br-se, solid)
109
+ );
110
+ border-width: prepareMediaVariable(
111
+ #{$base}-#{$state}-br-wh,
112
+ prepareMediaVariable(#{$base}-dt-se-br-wh, 0)
113
+ );
114
+ border-radius: prepareMediaVariable(
115
+ #{$base}-#{$state}-br-rs,
116
+ prepareMediaVariable(#{$base}-dt-se-br-rs, 4px)
117
+ );
118
+ box-shadow: prepareMediaVariable(
119
+ #{$base}-#{$state}-sw-ae,
120
+ prepareMediaVariable(#{$base}-dt-se-sw-ae, 0 0)
121
+ )
122
+ prepareMediaVariable(#{$base}-#{$state}-sw-br, prepareMediaVariable(#{$base}-dt-se-sw-br, 0))
123
+ prepareMediaVariable(#{$base}-#{$state}-sw-sd, prepareMediaVariable(#{$base}-dt-se-sw-sd, 0))
124
+ prepareMediaVariable(
125
+ #{$base}-#{$state}-sw-cr,
126
+ prepareMediaVariable(#{$base}-dt-se-sw-cr, transparent)
127
+ );
128
+ }
129
+
7
130
  [data-div-type="element"] {
8
131
  &[data-element-type="categoryGroups"] {
9
- // width: var(--_sf-catego-nw-wh);
10
- // width: var(--_sf-el-wh-st-mx, calc(1% * var(--_ctm-ele-nw-wh-vl, var(--_sf-nw-wh))));
11
- // width: calc(
12
- // 1% *
13
- // var(
14
- // --_ctm-mob-catego-ele-nw-wh-vl,
15
- // var(--_ctm-tab-catego-ele-nw-wh-vl, var(--_ctm-catego-ele-nw-wh-vl)),
16
- // auto
17
- // )
18
- // );
19
- // width: 100%;
20
- // height: var(--_ctm-catego-lt-ht);
21
-
22
132
  width: calc(
23
133
  1% *
24
134
  var(
@@ -45,94 +155,404 @@ $resizeActive: '[data-cms-element-resizer="true"]';
45
155
  var(--_ctm-tab-catego-lt-pg, var(--_ctm-catego-lt-pg))
46
156
  );
47
157
 
48
- background-color: var(
49
- --_ctm-mob-catego-dn-bd-cr,
50
- var(--_ctm-tab-catego-dn-bd-cr, var(--_ctm-catego-dn-bd-cr))
51
- );
52
- background-image: var(
53
- --_ctm-mob-catego-dn-bd-ie,
54
- var(--_ctm-tab-catego-dn-bd-ie, var(--_ctm-catego-dn-bd-ie))
55
- );
56
- background-attachment: var(
57
- --_ctm-mob-catego-dn-bd-at,
58
- var(--_ctm-tab-catego-dn-bd-at, var(--_ctm-catego-dn-bd-at))
59
- );
60
- background-position: var(
61
- --_ctm-mob-catego-dn-bd-pn,
62
- var(--_ctm-tab-catego-dn-bd-pn, var(--_ctm-catego-dn-bd-pn))
63
- );
64
- background-repeat: var(
65
- --_ctm-mob-catego-dn-bd-rt,
66
- var(--_ctm-tab-catego-dn-bd-rt, var(--_ctm-catego-dn-bd-rt))
67
- );
68
- background-size: var(
69
- --_ctm-mob-catego-dn-bd-se,
70
- var(--_ctm-tab-catego-dn-bd-se, var(--_ctm-catego-dn-bd-se))
71
- );
72
- border-radius: var(
73
- --_ctm-mob-catego-dn-br-rs,
74
- var(--_ctm-tab-catego-dn-br-rs, var(--_ctm-catego-dn-br-rs))
75
- );
76
- border-color: var(
77
- --_ctm-mob-catego-dn-br-cr,
78
- var(--_ctm-tab-catego-dn-br-cr, var(--_ctm-catego-dn-br-cr))
79
- );
80
- border-style: var(
81
- --_ctm-mob-catego-dn-br-se,
82
- var(--_ctm-tab-catego-dn-br-se, var(--_ctm-catego-dn-br-se))
83
- );
84
- border-width: var(
85
- --_ctm-mob-catego-dn-br-wh,
86
- var(--_ctm-tab-catego-dn-br-wh, var(--_ctm-catego-dn-br-wh))
87
- );
88
- box-shadow: var(
89
- --_hover-show-shadow,
90
- var(
91
- --_sf-hr-bx-sw,
92
- var(
93
- --_show-shadow,
94
- var(
95
- --_ctm-mob-catego-dn-sw-ae,
96
- var(--_ctm-tab-catego-dn-sw-ae, var(--_ctm-catego-dn-sw-ae))
97
- )
98
- var(
99
- --_ctm-mob-catego-dn-sw-br,
100
- var(--_ctm-tab-catego-dn-sw-br, var(--_ctm-catego-dn-sw-br))
101
- )
102
- var(
103
- --_ctm-mob-catego-dn-sw-sd,
104
- var(--_ctm-tab-catego-dn-sw-sd, var(--_ctm-catego-dn-sw-sd))
105
- )
106
- var(
107
- --_ctm-mob-catego-dn-sw-cr,
108
- var(--_ctm-tab-catego-dn-sw-cr, var(--_ctm-catego-dn-sw-cr))
109
- )
110
- )
111
- )
112
- );
158
+ background-color: prepareMediaVariable(#{$cg-widget}-bd-cr, transparent);
159
+ border-color: prepareMediaVariable(#{$cg-widget}-br-cr, transparent);
160
+ border-style: prepareMediaVariable(#{$cg-widget}-br-se, solid);
161
+ border-width: prepareMediaVariable(#{$cg-widget}-br-wh, 0);
162
+ border-radius: prepareMediaVariable(#{$cg-widget}-br-rs, 0);
113
163
  }
114
164
  }
115
165
 
116
- .loading_view {
166
+ // -------------------------------------------------------------------
167
+ // Fixed two-column layout. Figma tokens are the prepareMediaVariable
168
+ // fallbacks so the design renders correctly before any panel edits.
169
+ // -------------------------------------------------------------------
170
+ .category__groups__element__container {
171
+ display: flex;
172
+ gap: 36px;
173
+ align-items: flex-start;
174
+ width: 100%;
175
+ }
176
+
177
+ // ---- Left sidebar -------------------------------------------------
178
+ .cg_sidebar {
179
+ display: flex;
180
+ flex-direction: column;
181
+ gap: 12px;
182
+ width: 260px;
183
+ flex-shrink: 0;
184
+ background-color: prepareMediaVariable(#{$cg-sidebar}-bd-cr, transparent);
185
+ border-color: prepareMediaVariable(#{$cg-sidebar}-br-cr, transparent);
186
+ border-style: prepareMediaVariable(#{$cg-sidebar}-br-se, solid);
187
+ border-width: prepareMediaVariable(#{$cg-sidebar}-br-wh, 0);
188
+ border-radius: prepareMediaVariable(#{$cg-sidebar}-br-rs, 0);
189
+ }
190
+
191
+ .cg_sidebar_heading {
192
+ margin: 0;
193
+ text-transform: uppercase;
194
+ line-height: 1.25;
195
+ @include cg-font($cg-cat-heading, #002a4e, 16px, 400);
196
+ }
197
+ .cg_all_products_heading {
198
+ margin: 0;
199
+ text-transform: uppercase;
200
+ line-height: 1.25;
201
+ @include cg-font($cg-allprod-heading, #002a4e, 24px, 400);
202
+ }
203
+ .cg_subcategory_title {
204
+ margin: 0;
205
+ font-family: "Inter", sans-serif;
206
+ color: #002a4e;
207
+ text-transform: uppercase;
208
+ line-height: 1.25;
209
+ font-size: 16px;
210
+ }
211
+
212
+ .cg_sidebar_divider,
213
+ .cg_main_divider {
214
+ display: block;
215
+ width: 100%;
216
+ // Widget Style → Divider (show toggle + colour + thickness).
217
+ height: prepareMediaVariable(#{$cg-widget}-dr-wh, 1px);
218
+ background: prepareMediaVariable(#{$cg-widget}-dr-cr, #e5e7eb);
219
+ }
220
+ &[data-show-dividers="false"] {
221
+ .cg_sidebar_divider,
222
+ .cg_main_divider,
223
+ .cg_subcategory_divider {
224
+ display: none;
225
+ }
226
+ }
227
+
228
+ .cg_category_tree {
229
+ display: flex;
230
+ flex-direction: column;
231
+ gap: 8px;
232
+ width: 100%;
233
+ }
234
+
235
+ .cg_tree_node {
236
+ display: flex;
237
+ align-items: center;
238
+ gap: 4px;
239
+ padding: 4px 0;
240
+ cursor: pointer;
241
+ @include cg-design(#{$cg-tree}-dt-se);
242
+ }
243
+ .cg_tree_node_icon {
244
+ display: flex;
245
+ align-items: center;
246
+ justify-content: center;
247
+ width: 24px;
248
+ height: 24px;
249
+ flex-shrink: 0;
250
+ // Configurable expand/collapse icon colour (currentColor stroke).
251
+ color: prepareMediaVariable(#{$cg-tree-icon}-in-c1, #002a4e);
252
+ }
253
+ .cg_chevron {
254
+ display: flex;
255
+ transition: transform 0.15s ease;
256
+ svg {
257
+ width: prepareMediaVariable(#{$cg-tree-icon}-in-se, 20px);
258
+ height: prepareMediaVariable(#{$cg-tree-icon}-in-se, 20px);
259
+ }
260
+ }
261
+ .cg_chevron.is-open {
262
+ transform: rotate(90deg);
263
+ }
264
+ .cg_tree_node_label {
265
+ flex: 1;
266
+ @include cg-font(#{$cg-tree}-dt-se, #002a4e, 14px, 600);
267
+ }
268
+ .cg_tree_node:hover {
269
+ @include cg-design-state($cg-tree, hr-se);
270
+ }
271
+ .cg_tree_node:hover .cg_tree_node_label {
272
+ @include cg-font-state($cg-tree, hr-se, #002a4e, 14px, 600);
273
+ }
274
+ .cg_tree_node.is-active {
275
+ @include cg-design-state($cg-tree, sd-se);
276
+ }
277
+ .cg_tree_node.is-active .cg_tree_node_label {
278
+ @include cg-font-state($cg-tree, sd-se, #002a4e, 14px, 600);
279
+ }
280
+
281
+ .cg_subtree {
282
+ display: flex;
283
+ flex-direction: column;
284
+ gap: 8px;
285
+ padding-left: 31px;
286
+ width: 100%;
287
+ }
288
+ .cg_subtree_node {
289
+ padding: 4px 0;
290
+ cursor: pointer;
291
+ @include cg-design(#{$cg-subtree}-dt-se);
292
+ }
293
+ .cg_subtree_node_label {
294
+ letter-spacing: -0.28px;
295
+ @include cg-font(#{$cg-subtree}-dt-se, #1d1b1c, 14px, 400);
296
+ }
297
+ .cg_subtree_node:hover {
298
+ @include cg-design-state($cg-subtree, hr-se);
299
+ }
300
+ .cg_subtree_node:hover .cg_subtree_node_label {
301
+ @include cg-font-state($cg-subtree, hr-se, #1d1b1c, 14px, 400);
302
+ }
303
+ .cg_subtree_node.is-active {
304
+ @include cg-design-state($cg-subtree, sd-se);
305
+ }
306
+ .cg_subtree_node.is-active .cg_subtree_node_label {
307
+ @include cg-font-state($cg-subtree, sd-se, #1d1b1c, 14px, 400);
308
+ }
309
+
310
+ // ---- Right main ---------------------------------------------------
311
+ .cg_main {
312
+ display: flex;
313
+ flex-direction: column;
314
+ gap: 12px;
315
+ flex: 1 0 0;
316
+ min-width: 0;
317
+ }
318
+
319
+ // Drill-down breadcrumb (reuses the Breadcrumbs element DOM classes), styled
320
+ // from the breadcrumbDesign panel: breadcrumbItem (default/hover/selected) +
321
+ // separatorIcon. Selected state = the current (last) crumb.
322
+ .cg_breadcrumb {
117
323
  width: 100%;
324
+ .horizontal_breadcrumb_wrapper {
325
+ display: inline-flex;
326
+ align-items: center;
327
+ flex-wrap: wrap;
328
+ gap: 6px;
329
+ }
330
+ .breadcrumb_item {
331
+ padding: 0 4px;
332
+ display: flex;
333
+ align-items: center;
334
+ gap: 8px;
335
+ white-space: nowrap;
336
+ @include cg-design(#{$cg-bc-item}-dt-se);
337
+ @include cg-font(#{$cg-bc-item}-dt-se, #4b4546, 14px, 400);
338
+ &[data-show-cursor="true"] {
339
+ cursor: pointer;
340
+ }
341
+ &[data-show-cursor="true"]:hover {
342
+ @include cg-design-state($cg-bc-item, hr-se);
343
+ @include cg-font-state($cg-bc-item, hr-se, #4b4546, 14px, 400);
344
+ }
345
+ &:last-of-type {
346
+ @include cg-design-state($cg-bc-item, sd-se);
347
+ @include cg-font-state($cg-bc-item, sd-se, #1d1b1c, 14px, 600);
348
+ }
349
+ }
350
+ // Collapse ("…") button shown when the trail is too deep.
351
+ .collapse_btn {
352
+ display: flex;
353
+ align-items: center;
354
+ padding: 0 4px;
355
+ border: none;
356
+ background: transparent;
357
+ cursor: pointer;
358
+ line-height: 1;
359
+ @include cg-font(#{$cg-bc-item}-dt-se, #4b4546, 16px, 600);
360
+ }
361
+ .separator .icon {
362
+ display: flex;
363
+ svg {
364
+ width: prepareMediaVariable(#{$cg-bc-sep}-in-se, 16px);
365
+ height: prepareMediaVariable(#{$cg-bc-sep}-in-se, 16px);
366
+ path {
367
+ stroke: prepareMediaVariable(#{$cg-bc-sep}-in-c1, #8a8a8a);
368
+ }
369
+ }
370
+ }
371
+ }
372
+
373
+ // Breadcrumb (top) + chip row (bottom) stack vertically.
374
+ .cg_subcategory_scroller {
118
375
  display: flex;
376
+ flex-direction: column;
377
+ align-items: stretch;
378
+ gap: 12px;
379
+ width: 100%;
380
+ }
381
+ // The horizontal chip row: left arrow + scrolling rail + right arrow.
382
+ .cg_subcategory_row {
383
+ display: flex;
384
+ align-items: center;
385
+ gap: 12px;
386
+ width: 100%;
387
+ }
388
+ .cg_subcategory_divider {
389
+ width: 100%;
390
+ // Widget Style → Divider (colour + thickness), same as the other dividers.
391
+ height: prepareMediaVariable(#{$cg-widget}-dr-wh, 1px);
392
+ background: prepareMediaVariable(#{$cg-widget}-dr-cr, #cbd5e1);
393
+ flex-shrink: 0;
394
+ }
395
+ .cg_scroller_arrow {
396
+ display: flex;
397
+ align-items: center;
119
398
  justify-content: center;
399
+ padding: 0;
400
+ border: none;
401
+ background: transparent;
402
+ cursor: pointer;
403
+ flex-shrink: 0;
404
+ // Icon colour (property `iconColor1` -> `in-c1`) drives the SVG `currentColor` stroke.
405
+ color: prepareMediaVariable(#{$cg-arrow}-in-c1, #002a4e);
406
+ svg {
407
+ width: prepareMediaVariable(#{$cg-arrow}-in-se, 20px);
408
+ height: prepareMediaVariable(#{$cg-arrow}-in-se, 20px);
409
+ }
410
+ }
411
+ .cg_chip_rail {
412
+ display: flex;
413
+ align-items: center;
414
+ gap: 16px;
415
+ flex: 1 0 0;
416
+ min-width: 0;
417
+ overflow-x: auto;
418
+ scrollbar-width: none;
419
+ &::-webkit-scrollbar {
420
+ display: none;
421
+ }
120
422
  }
423
+ .cg_chip {
424
+ display: flex;
425
+ align-items: center;
426
+ cursor: pointer;
427
+ flex-shrink: 0;
428
+ padding: 0;
429
+ @include cg-design(#{$cg-chip}-dt-se);
430
+ }
431
+ .cg_chip_icon {
432
+ display: flex;
433
+ align-items: center;
434
+ justify-content: center;
435
+ width: prepareMediaVariable(#{$cg-chip-image}-wh, 36px);
436
+ height: prepareMediaVariable(#{$cg-chip-image}-ht, 36px);
437
+ padding: prepareMediaVariable(#{$cg-chip-image}-pg, 0);
438
+ flex-shrink: 0;
439
+ overflow: hidden;
440
+ color: #002a4e;
441
+ // Sub Category Image design controls (fill / border / radius / shadow).
442
+ @include cg-design($cg-chip-image);
443
+ img {
444
+ width: 100%;
445
+ height: 100%;
446
+ object-fit: cover;
447
+ transition: transform 0.3s ease-in-out;
448
+ }
449
+ // Image Settings -> On Hover (zoom).
450
+ &[data-on-hover="Zoom In"]:hover img {
451
+ transform: scale(1.08);
452
+ }
453
+ &[data-on-hover="Zoom Out"]:hover img {
454
+ transform: scale(0.92);
455
+ }
456
+ }
457
+ .cg_chip_label {
458
+ padding: 4px 12px;
459
+ white-space: nowrap;
460
+ @include cg-font(#{$cg-chip}-dt-se, #002a4e, 14px, 400);
461
+ }
462
+ .cg_chip:hover {
463
+ @include cg-design-state($cg-chip, hr-se);
464
+ }
465
+ .cg_chip:hover .cg_chip_label {
466
+ @include cg-font-state($cg-chip, hr-se, #002a4e, 14px, 400);
467
+ }
468
+ .cg_chip.is-active {
469
+ @include cg-design-state($cg-chip, sd-se);
470
+ }
471
+ .cg_chip.is-active .cg_chip_label {
472
+ @include cg-font-state($cg-chip, sd-se, #002a4e, 14px, 400);
473
+ }
474
+
475
+ // ---- Product grid -------------------------------------------------
476
+ .cg_product_grid {
477
+ display: grid;
478
+ grid-template-columns: repeat(var(--cg-columns, 3), 1fr);
479
+ column-gap: 24px;
480
+ row-gap: 48px;
481
+ width: 100%;
482
+ }
483
+ .cg_product_card {
484
+ display: flex;
485
+ flex-direction: column;
486
+ gap: prepareMediaVariable(#{$cg-card}-dt-se-im-gp, 16px);
487
+ padding: prepareMediaVariable(#{$cg-card}-dt-se-pg, 0);
488
+ position: relative;
489
+ min-width: 0;
490
+ background-color: prepareMediaVariable(#{$cg-card}-dt-se-bd-cr, transparent);
491
+ border-color: prepareMediaVariable(#{$cg-card}-dt-se-br-cr, transparent);
492
+ border-style: prepareMediaVariable(#{$cg-card}-dt-se-br-se, solid);
493
+ border-width: prepareMediaVariable(#{$cg-card}-dt-se-br-wh, 0);
494
+ border-radius: prepareMediaVariable(#{$cg-card}-dt-se-br-rs, 0);
495
+ }
496
+ .cg_product_card:hover {
497
+ background-color: prepareMediaVariable(#{$cg-card}-hr-se-bd-cr, transparent);
498
+ border-color: prepareMediaVariable(#{$cg-card}-hr-se-br-cr, transparent);
499
+ }
500
+ .cg_product_image_wrapper {
501
+ position: relative;
502
+ width: 100%;
503
+ overflow: hidden;
504
+
505
+ // Gallery / zoom / thumbnail styling for the embedded ProductImageContent,
506
+ // rebound to the Category Groups productImage CSS-variable paths.
507
+ @import "./category-groups-product-image.scss";
508
+ }
509
+ // Fallback image (rendered only when the Product Image setting is absent).
510
+ .cg_product_image {
511
+ display: block;
512
+ width: 100%;
513
+ height: 400px;
514
+ object-fit: cover;
515
+ }
516
+ .cg_product_info {
517
+ display: flex;
518
+ flex-direction: column;
519
+ gap: 12px;
520
+ }
521
+ .cg_brand_name {
522
+ margin: 0;
523
+ @include cg-font($cg-brand, #737373, 14px, 400);
524
+ }
525
+ .cg_product_name {
526
+ margin: 0;
527
+ letter-spacing: -0.32px;
528
+ @include cg-font($cg-name, #0a3355, 16px, 600);
529
+ // Text overflow toggle + max lines (Product Name design controls).
530
+ &.flex__overflow {
531
+ @include restrictToLinesShow(#{var(--_sf-line-clamp, 1)});
532
+ }
533
+ }
534
+ .cg_product_price {
535
+ margin: 0;
536
+ display: flex;
537
+ align-items: center;
538
+ gap: 6px;
539
+ @include cg-font($cg-price, #000, 16px, 800);
540
+ }
541
+ .cg_variants_text {
542
+ margin: 0;
543
+ @include cg-font($cg-variants, #737373, 14px, 400);
544
+ }
545
+
546
+ @import "./category-groups-product-options.scss";
121
547
 
122
- // &[data-view-state="full"] {
123
- // width: auto;
124
- // margin: 0;
125
- // justify-self: stretch !important;
126
- // align-self: stretch !important;
127
- // cursor: auto;
128
- // &:is(#{$activeElementSelector}) {
129
- // & > div {
130
- // &[data-div-type="wrapper__layer"] {
131
- // --_sf-vt-zz: visible;
132
- // --_sf-op-zz: 1;
133
- // }
134
- // }
135
- // }
136
- // }
548
+ // Price styling for the embedded ProductPriceContent, rebound to the Category
549
+ // Groups productPrice CSS-variable paths.
550
+ @import "./category-groups-product-price.scss";
551
+
552
+ .loading_view {
553
+ width: 100%;
554
+ display: flex;
555
+ justify-content: center;
556
+ }
137
557
  }
138
558
  }