@sc-360-v2/storefront-cms-library 0.5.69 → 0.5.71

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 (158) hide show
  1. package/dist/add-existing-form.scss +68 -68
  2. package/dist/add-products-tab-details.scss +4071 -4071
  3. package/dist/add-products-tab-uom-details.scss +1106 -1106
  4. package/dist/add-products-tab.scss +2377 -2377
  5. package/dist/allocation-header-quota-details.scss +609 -609
  6. package/dist/allocations-quota-details.scss +525 -525
  7. package/dist/amount-estimator.scss +1192 -1192
  8. package/dist/animation-control.scss +23 -23
  9. package/dist/badge.scss +408 -408
  10. package/dist/brand-basic-elements.scss +387 -387
  11. package/dist/brand.scss +142 -142
  12. package/dist/breadcrumbs.scss +966 -966
  13. package/dist/builder.js +1 -1
  14. package/dist/bulk-order-pad.scss +692 -692
  15. package/dist/bundleCategories.scss +301 -301
  16. package/dist/bundleDetails.scss +6189 -6189
  17. package/dist/buy-for-tab-container.scss +141 -141
  18. package/dist/buy-for-tab.scss +649 -649
  19. package/dist/buy-for-tabs-container-item.scss +80 -80
  20. package/dist/buyForPopup.scss +339 -339
  21. package/dist/cart-details.scss +3986 -3986
  22. package/dist/cart-products-sidebar.scss +211 -211
  23. package/dist/cart-summary.scss +2826 -2826
  24. package/dist/cart-wrapper.scss +127 -127
  25. package/dist/cartAttributes.scss +1422 -1422
  26. package/dist/cartDropdownOverlay.scss +653 -653
  27. package/dist/cartGrouping.scss +89 -89
  28. package/dist/category-groups-element.scss +739 -739
  29. package/dist/category-groups-quota-details.scss +626 -626
  30. package/dist/category.scss +137 -137
  31. package/dist/categoryDetails.scss +61 -61
  32. package/dist/categoryWidget.scss +34 -34
  33. package/dist/checkbox-radio.scss +124 -124
  34. package/dist/code-temp.scss +59 -59
  35. package/dist/colorpicker_v2.scss +62 -62
  36. package/dist/common-element.scss +35 -35
  37. package/dist/confirm-modal.scss +370 -370
  38. package/dist/confirmationModal.scss +139 -139
  39. package/dist/contact-us.scss +105 -105
  40. package/dist/container.scss +168 -168
  41. package/dist/countdown.scss +899 -899
  42. package/dist/coupon.scss +1519 -1519
  43. package/dist/custom-fonts.scss +100 -100
  44. package/dist/customization-tree.scss +162 -162
  45. package/dist/default-dropdown.scss +259 -259
  46. package/dist/dropdownTemplate.scss +699 -699
  47. package/dist/editCartItem.scss +110 -110
  48. package/dist/embed-temp.scss +73 -73
  49. package/dist/embroider-preview-element.scss +94 -94
  50. package/dist/embroider-template-1-v2.scss +1105 -1105
  51. package/dist/embroider-template-1.scss +501 -501
  52. package/dist/embroidery.scss +247 -247
  53. package/dist/employee-bulk-order.scss +4060 -4060
  54. package/dist/emtpy-templates.scss +165 -165
  55. package/dist/faq.scss +696 -696
  56. package/dist/fb-dropdown.scss +135 -135
  57. package/dist/filter-results.scss +361 -361
  58. package/dist/filters.scss +3040 -3040
  59. package/dist/flex-text-editor.scss +271 -271
  60. package/dist/form-preview.scss +530 -530
  61. package/dist/gallery-slider-temp.scss +1776 -1776
  62. package/dist/global-styles.scss +198 -198
  63. package/dist/grid.scss +169 -169
  64. package/dist/icon-library.scss +78 -78
  65. package/dist/icon-list.scss +39 -0
  66. package/dist/image-for-product.scss +21 -21
  67. package/dist/image-temp.scss +203 -203
  68. package/dist/item-stock.scss +93 -93
  69. package/dist/kitDetails.scss +5739 -5739
  70. package/dist/kits.scss +305 -305
  71. package/dist/language-selector.scss +948 -948
  72. package/dist/last-x-orders.scss +285 -285
  73. package/dist/layouter-item.scss +141 -141
  74. package/dist/layouter-pro-item.scss +139 -139
  75. package/dist/layouter-pro.scss +134 -134
  76. package/dist/layouter.scss +491 -491
  77. package/dist/light-box-v2.scss +155 -155
  78. package/dist/lightbox.scss +78 -78
  79. package/dist/loader.scss +37 -37
  80. package/dist/login.scss +29 -11
  81. package/dist/map.scss +1359 -1359
  82. package/dist/marchandiserSets.scss +141 -141
  83. package/dist/mega-menu-container.scss +152 -152
  84. package/dist/menu-item.scss +19 -19
  85. package/dist/menu-v2.scss +999 -999
  86. package/dist/menu.scss +174 -174
  87. package/dist/multi-select-dropdown.scss +316 -316
  88. package/dist/my-templates.scss +477 -477
  89. package/dist/my-wishlist.scss +27 -27
  90. package/dist/option-bar.scss +886 -886
  91. package/dist/order-processing.scss +61 -61
  92. package/dist/order-status.scss +2187 -2187
  93. package/dist/overflow-module.scss +63 -63
  94. package/dist/past-orders.scss +1039 -1039
  95. package/dist/payment-methods.scss +307 -307
  96. package/dist/phone-input.scss +208 -208
  97. package/dist/pickup-locations.scss +1359 -1359
  98. package/dist/position-module.scss +95 -95
  99. package/dist/prefix-list.scss +86 -86
  100. package/dist/product-actions.scss +2872 -2872
  101. package/dist/product-basic-elements.scss +600 -600
  102. package/dist/product-customizations.scss +155 -155
  103. package/dist/product-highlights.scss +348 -348
  104. package/dist/product-image-allocation.scss +1477 -1477
  105. package/dist/product-inventory.scss +1621 -1621
  106. package/dist/product-labels.scss +265 -265
  107. package/dist/product-options.scss +1444 -1444
  108. package/dist/product-price.scss +4 -0
  109. package/dist/product-promotions.scss +3224 -3224
  110. package/dist/product-sizechart.scss +1921 -1921
  111. package/dist/product.scss +140 -140
  112. package/dist/profile.scss +824 -824
  113. package/dist/quantity-selector.scss +1074 -1074
  114. package/dist/quick-inventory-check.scss +285 -285
  115. package/dist/quick-links.scss +627 -627
  116. package/dist/quota-details.scss +526 -526
  117. package/dist/quotes.scss +847 -847
  118. package/dist/repeater-embla-controls.scss +211 -211
  119. package/dist/repeater-grid-toggle.scss +206 -206
  120. package/dist/repeater-item.scss +152 -152
  121. package/dist/repeater.scss +946 -946
  122. package/dist/request-for-quotes.scss +841 -841
  123. package/dist/responsive-behaviour.scss +29 -29
  124. package/dist/rfqs.scss +861 -861
  125. package/dist/scroll.scss +414 -414
  126. package/dist/search-results-heading.scss +309 -309
  127. package/dist/search.scss +689 -689
  128. package/dist/section.scss +276 -276
  129. package/dist/shareCartSideBar.scss +254 -254
  130. package/dist/shipping-estimator.scss +41 -41
  131. package/dist/shipping-payments.scss +2518 -2518
  132. package/dist/simple-list.scss +338 -338
  133. package/dist/skeleton.scss +64 -64
  134. package/dist/spotlight.scss +1706 -1706
  135. package/dist/stack.scss +171 -171
  136. package/dist/static-global.scss +292 -292
  137. package/dist/static-text.scss +52 -52
  138. package/dist/stockStatus.scss +70 -70
  139. package/dist/store-locations.scss +1592 -1592
  140. package/dist/sub-category.scss +74 -74
  141. package/dist/submit-quote.scss +275 -275
  142. package/dist/tab-container-item.scss +80 -80
  143. package/dist/tab-container.scss +141 -141
  144. package/dist/table.scss +9 -0
  145. package/dist/tabs.scss +440 -440
  146. package/dist/text-temp.scss +109 -109
  147. package/dist/theme-classes.scss +421 -421
  148. package/dist/toaster.scss +392 -392
  149. package/dist/toggle-button.scss +32 -32
  150. package/dist/transform-properties-module.scss +20 -20
  151. package/dist/types/builder/tools/element-edit/icon-list.d.ts +5 -0
  152. package/dist/types/builder/tools/element-edit/login.d.ts +1 -0
  153. package/dist/types/builder/tools/element-edit/resetPassword.d.ts +1 -0
  154. package/dist/types/builder/tools/element-edit/userElements.d.ts +99 -0
  155. package/dist/user-elements.scss +2896 -2911
  156. package/dist/widget.scss +153 -153
  157. package/dist/wishlist-overlay.scss +48 -48
  158. package/package.json +1 -1
@@ -1,948 +1,948 @@
1
- @use "sass:map";
2
- @use "sass:list";
3
- @use "./functions.scss" as *;
4
-
5
- // Widget Style > Placeholder Text. The section is per-state (Default / Hover) and its
6
- // typography reached the stylesheet as `--_ctm-dn-wt-se-{dt,hr}-se-*` that nothing
7
- // read, so both states looked dead in the panel. Both states publish the same
8
- // `--_sf-wt-*` names and the hovered widget wins the cascade.
9
- //
10
- // Deliberately no final fallback inside these chains: an untouched property stays
11
- // invalid at computed-value time, which is what lets the consumers fall back to
12
- // `--_ctm-dn-wt-pr-tt-*`. Those come from the retired Widget Placeholder Text
13
- // section — Widget Style absorbed it, so the fallback exists only for pages saved
14
- // before the merge. Same shape the divider already uses for its
15
- // hover-falls-back-to-default chain below.
16
- $widgetFontProps: ft-fy, ft-se, cr, ft-wt, ft-se-ic, ue, tt-an, lr-sg, le-ht, tt-tm, wd-wp, wd-bk,
17
- pg;
18
-
19
- @mixin widgetStateFont($state, $fallbackState: null) {
20
- @each $p in $widgetFontProps {
21
- $inner: if(
22
- $fallbackState == null,
23
- var(--_ctm-dn-wt-se-#{$state}-#{$p}),
24
- var(
25
- --_ctm-dn-wt-se-#{$state}-#{$p},
26
- var(
27
- --_ctm-mob-dn-wt-se-#{$fallbackState}-#{$p},
28
- var(
29
- --_ctm-tab-dn-wt-se-#{$fallbackState}-#{$p},
30
- var(--_ctm-dn-wt-se-#{$fallbackState}-#{$p})
31
- )
32
- )
33
- )
34
- );
35
- --_sf-wt-#{$p}: var(
36
- --_ctm-mob-dn-wt-se-#{$state}-#{$p},
37
- var(--_ctm-tab-dn-wt-se-#{$state}-#{$p}, #{$inner})
38
- );
39
- }
40
- }
41
-
42
- [data-div-type="element"] {
43
- &[data-element-type="languageMenu"],
44
- &[data-element-type="currencySelector"],
45
- &[data-element-type="userGroupsSelector"],
46
- &[data-element-type="warehouseSelector"] {
47
- margin: var(--_ctm-mob-lt-mn, var(--_ctm-tab-lt-mn, var(--_ctm-lt-mn)));
48
-
49
- & > .wrapper {
50
- width: 100%;
51
- height: auto;
52
- }
53
- &[data-show-shadow="false"] {
54
- --_show-shadow: none;
55
- }
56
- .language__conatiner {
57
- // background-color: var(
58
- // --_ctm-mob-dn-wt-se-dt-se-bd-cr,
59
- // var(--_ctm-tab-dn-wt-se-dt-se-bd-cr, var(--_ctm-dn-wt-se-dt-se-bd-cr))
60
- // );
61
-
62
- // border-color: var(
63
- // --_ctm-mob-dn-wt-se-dt-se-br-cr,
64
- // var(--_ctm-tab-dn-wt-se-dt-se-br-cr, var(--_ctm-dn-wt-se-dt-se-br-cr))
65
- // );
66
-
67
- // border-style: var(
68
- // --_ctm-mob-dn-wt-se-dt-se-br-se,
69
- // var(--_ctm-tab-dn-wt-se-dt-se-br-se, var(--_ctm-dn-wt-se-dt-se-br-se))
70
- // );
71
-
72
- // border-width: var(
73
- // --_ctm-mob-dn-wt-se-dt-se-br-wh,
74
- // var(--_ctm-tab-dn-wt-se-dt-se-br-wh, var(--_ctm-dn-wt-se-dt-se-br-wh))
75
- // );
76
-
77
- // border-radius: var(
78
- // --_ctm-mob-dn-wt-se-dt-se-br-rs,
79
- // var(--_ctm-tab-dn-wt-se-dt-se-br-rs, var(--_ctm-dn-wt-se-dt-se-br-rs))
80
- // );
81
-
82
- // box-shadow: var(
83
- // --_show-shadow,
84
- // var(
85
- // --_ctm-mob-dn-wt-se-dt-se-sw-ae,
86
- // var(--_ctm-tab-dn-wt-se-dt-se-sw-ae, var(--_ctm-dn-wt-se-dt-se-sw-ae))
87
- // )
88
- // var(
89
- // --_ctm-mob-dn-wt-se-dt-se-sw-br,
90
- // var(--_ctm-tab-dn-wt-se-dt-se-sw-br, var(--_ctm-dn-wt-se-dt-se-sw-br))
91
- // )
92
- // var(
93
- // --_ctm-mob-dn-wt-se-dt-se-sw-sd,
94
- // var(--_ctm-tab-dn-wt-se-dt-se-sw-sd, var(--_ctm-dn-wt-se-dt-se-sw-sd))
95
- // )
96
- // var(
97
- // --_ctm-mob-dn-wt-se-dt-se-sw-cr,
98
- // var(--_ctm-tab-dn-wt-se-dt-se-sw-cr, var(--_ctm-dn-wt-se-dt-se-sw-cr))
99
- // )
100
- // );
101
- // &:hover {
102
- // background-color: var(
103
- // --_ctm-mob-dn-wt-se-hr-se-bd-cr,
104
- // var(--_ctm-tab-dn-wt-se-hr-se-bd-cr, var(--_ctm-dn-wt-se-hr-se-bd-cr))
105
- // );
106
-
107
- // border-color: var(
108
- // --_ctm-mob-dn-wt-se-hr-se-br-cr,
109
- // var(--_ctm-tab-dn-wt-se-hr-se-br-cr, var(--_ctm-dn-wt-se-hr-se-br-cr))
110
- // );
111
-
112
- // border-style: var(
113
- // --_ctm-mob-dn-wt-se-hr-se-br-se,
114
- // var(--_ctm-tab-dn-wt-se-hr-se-br-se, var(--_ctm-dn-wt-se-hr-se-br-se))
115
- // );
116
-
117
- // border-width: var(
118
- // --_ctm-mob-dn-wt-se-hr-se-br-wh,
119
- // var(--_ctm-tab-dn-wt-se-hr-se-br-wh, var(--_ctm-dn-wt-se-hr-se-br-wh))
120
- // );
121
-
122
- // border-radius: var(
123
- // --_ctm-mob-dn-wt-se-hr-se-br-rs,
124
- // var(--_ctm-tab-dn-wt-se-hr-se-br-rs, var(--_ctm-dn-wt-se-hr-se-br-rs))
125
- // );
126
-
127
- // box-shadow: var(
128
- // --_show-shadow,
129
- // var(
130
- // --_ctm-mob-dn-wt-se-hr-se-sw-ae,
131
- // var(--_ctm-tab-dn-wt-se-hr-se-sw-ae, var(--_ctm-dn-wt-se-hr-se-sw-ae))
132
- // )
133
- // var(
134
- // --_ctm-mob-dn-wt-se-hr-se-sw-br,
135
- // var(--_ctm-tab-dn-wt-se-hr-se-sw-br, var(--_ctm-dn-wt-se-hr-se-sw-br))
136
- // )
137
- // var(
138
- // --_ctm-mob-dn-wt-se-hr-se-sw-sd,
139
- // var(--_ctm-tab-dn-wt-se-hr-se-sw-sd, var(--_ctm-dn-wt-se-hr-se-sw-sd))
140
- // )
141
- // var(
142
- // --_ctm-mob-dn-wt-se-hr-se-sw-cr,
143
- // var(--_ctm-tab-dn-wt-se-hr-se-sw-cr, var(--_ctm-dn-wt-se-hr-se-sw-cr))
144
- // )
145
- // );
146
- // }
147
-
148
- // gap: var(
149
- // --_ctm-mob-lt-it-ad-mn-qy-sg,
150
- // var(--_ctm-tab-lt-it-ad-mn-qy-sg, var(--_ctm-lt-it-ad-mn-qy-sg))
151
- // );
152
- display: flex;
153
- gap: var(--_ctm-mob-lt-gp-bn-is, var(--_ctm-tab-lt-gp-bn-is, var(--_ctm-lt-gp-bn-is)));
154
-
155
- // "Show Border" switches — widget style (default/hover), widget dropdown and
156
- // item style (default/hover/selected). Each state is gated on its own switch.
157
- // border-style is reset alongside the width: a state whose width variables are
158
- // unset resolves border-width to the initial `medium`, so zeroing the width
159
- // alone still leaves a border painted in whatever border-style is in effect.
160
- &[data-widget-border="false"] {
161
- .est__dropdown__main .est__dropdown .dropdown__button__wrapper {
162
- border-width: 0;
163
- border-style: none;
164
- }
165
- }
166
- &[data-widget-hover-border="false"] {
167
- .est__dropdown__main .est__dropdown .dropdown__button__wrapper:hover {
168
- border-width: 0;
169
- border-style: none;
170
- }
171
- }
172
- &[data-dropdown-border="false"] {
173
- .est__dropdown__main .est__dropdown .list {
174
- border-width: 0;
175
- border-style: none;
176
- }
177
- }
178
- &[data-item-border="false"] {
179
- .option:not(:hover):not([data-selected="true"]) {
180
- border-width: 0;
181
- border-style: none;
182
- }
183
- }
184
- &[data-item-hover-border="false"] {
185
- .option:hover:not([data-selected="true"]) {
186
- border-width: 0;
187
- border-style: none;
188
- }
189
- }
190
- &[data-item-selected-border="false"] {
191
- .option[data-selected="true"] {
192
- border-width: 0;
193
- border-style: none;
194
- }
195
- }
196
-
197
- .option:hover {
198
- --_sf-hr-bd-cr: var(
199
- --_ctm-mob-dn-im-se-hr-se-bd-cr,
200
- var(--_ctm-tab-dn-im-se-hr-se-bd-cr, var(--_ctm-dn-im-se-hr-se-bd-cr))
201
- );
202
- --_sf-hr-br-cr: var(
203
- --_ctm-mob-dn-im-se-hr-se-br-cr,
204
- var(--_ctm-tab-dn-im-se-hr-se-br-cr, var(--_ctm-dn-im-se-hr-se-br-cr))
205
- );
206
- --_sf-hr-br-se: var(
207
- --_ctm-mob-dn-im-se-hr-se-br-se,
208
- var(--_ctm-tab-dn-im-se-hr-se-br-se, var(--_ctm-dn-im-se-hr-se-br-se))
209
- );
210
- --_sf-hr-br-wh: var(
211
- --_ctm-mob-dn-im-se-hr-se-br-wh,
212
- var(--_ctm-tab-dn-im-se-hr-se-br-wh, var(--_ctm-dn-im-se-hr-se-br-wh))
213
- );
214
- --_sf-hr-br-rs: var(
215
- --_ctm-mob-dn-im-se-hr-se-br-rs,
216
- var(--_ctm-tab-dn-im-se-hr-se-br-rs, var(--_ctm-dn-im-se-hr-se-br-rs))
217
- );
218
-
219
- // for shadow
220
- --_sf-hr-sw-ae: var(
221
- --_ctm-mob-dn-im-se-hr-se-sw-ae,
222
- var(--_ctm-tab-dn-im-se-hr-se-sw-ae, var(--_ctm-dn-im-se-hr-se-sw-ae))
223
- );
224
- --_sf-hr-sw-br: var(
225
- --_ctm-mob-dn-im-se-hr-se-sw-br,
226
- var(--_ctm-tab-dn-im-se-hr-se-sw-br, var(--_ctm-dn-im-se-hr-se-sw-br))
227
- );
228
- --_sf-hr-sw-hr: var(
229
- --_ctm-mob-dn-im-se-hr-se-sw-hr,
230
- var(--_ctm-tab-dn-im-se-hr-se-sw-hr, var(--_ctm-dn-im-se-hr-se-sw-hr))
231
- );
232
- --_sf-hr-sw-cr: var(
233
- --_ctm-mob-dn-im-se-hr-se-sw-cr,
234
- var(--_ctm-tab-dn-im-se-hr-se-sw-cr, var(--_ctm-dn-im-se-hr-se-sw-cr))
235
- );
236
-
237
- // for font
238
-
239
- --_sf-hr-cr: var(
240
- --_ctm-mob-dn-im-se-hr-se-cr,
241
- var(--_ctm-tab-dn-im-se-hr-se-cr, var(--_ctm-dn-im-se-hr-se-cr))
242
- );
243
- --_sf-hr-ft-fy: var(
244
- --_ctm-mob-dn-im-se-hr-se-ft-fy,
245
- var(--_ctm-tab-dn-im-se-hr-se-ft-fy, var(--_ctm-dn-im-se-hr-se-ft-fy))
246
- );
247
- --_sf-hr-ft-se: var(
248
- --_ctm-mob-dn-im-se-hr-se-ft-se,
249
- var(--_ctm-tab-dn-im-se-hr-se-ft-se, var(--_ctm-dn-im-se-hr-se-ft-se))
250
- );
251
- --_sf-hr-ft-wt: var(
252
- --_ctm-mob-dn-im-se-hr-se-ft-wt,
253
- var(--_ctm-tab-dn-im-se-hr-se-ft-wt, var(--_ctm-dn-im-se-hr-se-ft-wt))
254
- );
255
- --_sf-hr-ft-se-ic: var(
256
- --_ctm-mob-dn-im-se-hr-se-ft-se-ic,
257
- var(--_ctm-tab-dn-im-se-hr-se-ft-se-ic, var(--_ctm-dn-im-se-hr-se-ft-se-ic))
258
- );
259
- --_sf-hr-tt-an: var(
260
- --_ctm-mob-dn-im-se-hr-se-tt-an,
261
- var(--_ctm-tab-dn-im-se-hr-se-tt-an, var(--_ctm-dn-im-se-hr-se-tt-an))
262
- );
263
- --_sf-hr-lr-sg: var(
264
- --_ctm-mob-dn-im-se-hr-se-lr-sg,
265
- var(--_ctm-tab-dn-im-se-hr-se-lr-sg, var(--_ctm-dn-im-se-hr-se-lr-sg))
266
- );
267
- --_sf-hr-le-ht: var(
268
- --_ctm-mob-dn-im-se-hr-se-le-ht,
269
- var(--_ctm-tab-dn-im-se-hr-se-le-ht, var(--_ctm-dn-im-se-hr-se-le-ht))
270
- );
271
-
272
- --_sf-hr-ue: var(
273
- --_ctm-mob-dn-im-se-hr-se-ue,
274
- var(--_ctm-tab-dn-im-se-hr-se-ue, var(--_ctm-dn-im-se-hr-se-ue))
275
- );
276
- --_sf-hr-tt-tm: var(
277
- --_ctm-mob-dn-im-se-hr-se-tt-tm,
278
- var(--_ctm-tab-dn-im-se-hr-se-tt-tm, var(--_ctm-dn-im-se-hr-se-tt-tm))
279
- );
280
- --_sf-hr-wd-wp: var(
281
- --_ctm-mob-dn-im-se-hr-se-wd-wp,
282
- var(--_ctm-tab-dn-im-se-hr-se-wd-wp, var(--_ctm-dn-im-se-hr-se-wd-wp))
283
- );
284
- --_sf-hr-wd-bk: var(
285
- --_ctm-mob-dn-im-se-hr-se-wd-bk,
286
- var(--_ctm-tab-dn-im-se-hr-se-wd-bk, var(--_ctm-dn-im-se-hr-se-wd-bk))
287
- );
288
- --_sf-hr-pg: var(
289
- --_ctm-mob-dn-im-se-hr-se-pg,
290
- var(--_ctm-tab-dn-im-se-hr-se-pg, var(--_ctm-dn-im-se-hr-se-pg))
291
- );
292
- }
293
-
294
- .option[data-selected="true"] {
295
- --_sf-sd-bd-cr: var(
296
- --_ctm-mob-dn-im-se-sd-se-bd-cr,
297
- var(--_ctm-tab-dn-im-se-sd-se-bd-cr, var(--_ctm-dn-im-se-sd-se-bd-cr))
298
- );
299
- --_sf-sd-br-cr: var(
300
- --_ctm-mob-dn-im-se-sd-se-br-cr,
301
- var(--_ctm-tab-dn-im-se-sd-se-br-cr, var(--_ctm-dn-im-se-sd-se-br-cr))
302
- );
303
- --_sf-sd-br-se: var(
304
- --_ctm-mob-dn-im-se-sd-se-br-se,
305
- var(--_ctm-tab-dn-im-se-sd-se-br-se, var(--_ctm-dn-im-se-sd-se-br-se))
306
- );
307
- --_sf-sd-br-wh: var(
308
- --_ctm-mob-dn-im-se-sd-se-br-wh,
309
- var(--_ctm-tab-dn-im-se-sd-se-br-wh, var(--_ctm-dn-im-se-sd-se-br-wh))
310
- );
311
- // Was missing entirely, so `border-radius: var(--_sf-sd-br-rs, <default state>)`
312
- // always fell through to the default state and Selected > Border Radius did
313
- // nothing. Every sibling state variable had one; this is the odd one out.
314
- --_sf-sd-br-rs: var(
315
- --_ctm-mob-dn-im-se-sd-se-br-rs,
316
- var(--_ctm-tab-dn-im-se-sd-se-br-rs, var(--_ctm-dn-im-se-sd-se-br-rs))
317
- );
318
- // new
319
- --_sf-sd-sw-ae: var(
320
- --_ctm-mob-dn-im-se-sd-se-sw-ae,
321
- var(--_ctm-tab-dn-im-se-sd-se-sw-ae, var(--_ctm-dn-im-se-sd-se-sw-ae))
322
- );
323
- --_sf-sd-sw-br: var(
324
- --_ctm-mob-dn-im-se-sd-se-sw-br,
325
- var(--_ctm-tab-dn-im-se-sd-se-sw-br, var(--_ctm-dn-im-se-sd-se-sw-br))
326
- );
327
- --_sf-sd-sw-sd: var(
328
- --_ctm-mob-dn-im-se-sd-se-sw-sd,
329
- var(--_ctm-tab-dn-im-se-sd-se-sw-sd, var(--_ctm-dn-im-se-sd-se-sw-sd))
330
- );
331
- --_sf-sd-sw-cr: var(
332
- --_ctm-mob-dn-im-se-sd-se-sw-cr,
333
- var(--_ctm-tab-dn-im-se-sd-se-sw-cr, var(--_ctm-dn-im-se-sd-se-sw-cr))
334
- );
335
-
336
- // for font
337
-
338
- --_sf-sd-cr: var(
339
- --_ctm-mob-dn-im-se-sd-se-cr,
340
- var(--_ctm-tab-dn-im-se-sd-se-cr, var(--_ctm-dn-im-se-sd-se-cr))
341
- );
342
- --_sf-sd-ft-fy: var(
343
- --_ctm-mob-dn-im-se-sd-se-ft-fy,
344
- var(--_ctm-tab-dn-im-se-sd-se-ft-fy, var(--_ctm-dn-im-se-sd-se-ft-fy))
345
- );
346
- --_sf-sd-ft-se: var(
347
- --_ctm-mob-dn-im-se-sd-se-ft-se,
348
- var(--_ctm-tab-dn-im-se-sd-se-ft-se, var(--_ctm-dn-im-se-sd-se-ft-se))
349
- );
350
- --_sf-sd-ft-wt: var(
351
- --_ctm-mob-dn-im-se-sd-se-ft-wt,
352
- var(--_ctm-tab-dn-im-se-sd-se-ft-wt, var(--_ctm-dn-im-se-sd-se-ft-wt))
353
- );
354
- --_sf-sd-ft-se-ic: var(
355
- --_ctm-mob-dn-im-se-sd-se-ft-se-ic,
356
- var(--_ctm-tab-dn-im-se-sd-se-ft-se-ic, var(--_ctm-dn-im-se-sd-se-ft-se-ic))
357
- );
358
- --_sf-sd-tt-an: var(
359
- --_ctm-mob-dn-im-se-sd-se-tt-an,
360
- var(--_ctm-tab-dn-im-se-sd-se-tt-an, var(--_ctm-dn-im-se-sd-se-tt-an))
361
- );
362
- --_sf-sd-lr-sg: var(
363
- --_ctm-mob-dn-im-se-sd-se-lr-sg,
364
- var(--_ctm-tab-dn-im-se-sd-se-lr-sg, var(--_ctm-dn-im-se-sd-se-lr-sg))
365
- );
366
- --_sf-sd-le-ht: var(
367
- --_ctm-mob-dn-im-se-sd-se-le-ht,
368
- var(--_ctm-tab-dn-im-se-sd-se-le-ht, var(--_ctm-dn-im-se-sd-se-le-ht))
369
- );
370
-
371
- --_sf-sd-ue: var(
372
- --_ctm-mob-dn-im-se-sd-se-ue,
373
- var(--_ctm-tab-dn-im-se-sd-se-ue, var(--_ctm-dn-im-se-sd-se-ue))
374
- );
375
- --_sf-sd-tt-tm: var(
376
- --_ctm-mob-dn-im-se-sd-se-tt-tm,
377
- var(--_ctm-tab-dn-im-se-sd-se-tt-tm, var(--_ctm-dn-im-se-sd-se-tt-tm))
378
- );
379
- --_sf-sd-wd-wp: var(
380
- --_ctm-mob-dn-im-se-sd-se-wd-wp,
381
- var(--_ctm-tab-dn-im-se-sd-se-wd-wp, var(--_ctm-dn-im-se-sd-se-wd-wp))
382
- );
383
- --_sf-sd-wd-bk: var(
384
- --_ctm-mob-dn-im-se-sd-se-wd-bk,
385
- var(--_ctm-tab-dn-im-se-sd-se-wd-bk, var(--_ctm-dn-im-se-sd-se-wd-bk))
386
- );
387
- --_sf-sd-pg: var(
388
- --_ctm-mob-dn-im-se-sd-se-pg,
389
- var(--_ctm-tab-dn-im-se-sd-se-pg, var(--_ctm-dn-im-se-sd-se-pg))
390
- );
391
- }
392
-
393
- .option {
394
- width: 100%;
395
- display: flex;
396
- align-items: center;
397
- cursor: pointer;
398
- justify-content: var(--_ctm-mob-lt-at, var(--_ctm-tab-lt-at, var(--_ctm-lt-at)));
399
-
400
- position: relative;
401
- box-sizing: border-box;
402
- // Without this a flex item refuses to shrink below its content width, so a
403
- // larger font size pushed the label straight out of the widget.
404
- // min-width: 0;
405
-
406
- padding: var(--_sf-hr-pg, prepareMediaVariable(--_ctm-dn-im-se-dt-se-pg));
407
- gap: var(--_ctm-mob-lt-im-sg, var(--_ctm-tab-lt-im-sg, var(--_ctm-lt-im-sg)));
408
- border-color: var(--_sf-hr-br-cr, prepareMediaVariable(--_ctm-dn-im-se-dt-se-br-cr));
409
-
410
- background-color: var(--_sf-hr-bd-cr, prepareMediaVariable(--_ctm-dn-im-se-dt-se-bd-cr));
411
- border-style: var(--_sf-hr-br-se, prepareMediaVariable(--_ctm-dn-im-se-dt-se-br-se));
412
- border-radius: var(--_sf-hr-br-rs, prepareMediaVariable(--_ctm-dn-im-se-dt-se-br-rs));
413
- border-width: var(--_sf-hr-br-wh, prepareMediaVariable(--_ctm-dn-im-se-dt-se-br-wh));
414
-
415
- box-shadow: var(--_sf-hr-sw-ae, prepareMediaVariable(--_ctm-dn-im-se-dt-se-sw-ae))
416
- var(--_sf-hr-sw-br, prepareMediaVariable(--_ctm-dn-im-se-dt-se-sw-br))
417
- var(--_sf-hr-sw-sd, prepareMediaVariable(--_ctm-dn-im-se-dt-se-sw-sd))
418
- var(--_sf-hr-sw-cr, prepareMediaVariable(--_ctm-dn-im-se-dt-se-sw-cr));
419
- //
420
- &[data-selected="true"] {
421
- // `.option` only ever declared padding from the hover variable, so
422
- // `--_sf-sd-pg` was set by the selected-state block but never read and
423
- // Selected > Padding did nothing.
424
- padding: var(--_sf-sd-pg, prepareMediaVariable(--_ctm-dn-im-se-dt-se-pg));
425
- border-color: var(--_sf-sd-br-cr, prepareMediaVariable(--_ctm-dn-im-se-dt-se-br-cr));
426
-
427
- background-color: var(--_sf-sd-bd-cr, prepareMediaVariable(--_ctm-dn-im-se-dt-se-bd-cr));
428
- border-style: var(--_sf-sd-br-se, prepareMediaVariable(--_ctm-dn-im-se-dt-se-br-se));
429
- border-width: var(--_sf-sd-br-wh, prepareMediaVariable(--_ctm-dn-im-se-dt-se-br-wh));
430
- border-radius: var(--_sf-sd-br-rs, prepareMediaVariable(--_ctm-dn-im-se-dt-se-br-rs));
431
- box-shadow: var(--_sf-sd-sw-ae, prepareMediaVariable(--_ctm-dn-im-se-dt-se-sw-ae))
432
- var(--_sf-sd-sw-br, prepareMediaVariable(--_ctm-dn-im-se-dt-se-sw-br))
433
- var(--_sf-sd-sw-sd, prepareMediaVariable(--_ctm-dn-im-se-dt-se-sw-sd))
434
- var(--_sf-sd-sw-cr, prepareMediaVariable(--_ctm-dn-im-se-dt-se-sw-cr));
435
- .language__name {
436
- color: var(--_sf-sd-cr, prepareMediaVariable(--_ctm-dn-im-se-dt-se-cr));
437
- font-family: var(--_sf-sd-ft-fy, prepareMediaVariable(--_ctm-dn-im-se-dt-se-ft-fy));
438
- font-size: var(--_sf-sd-ft-se, prepareMediaVariable(--_ctm-dn-im-se-dt-se-ft-se));
439
- font-weight: var(--_sf-sd-ft-wt, prepareMediaVariable(--_ctm-dn-im-se-dt-se-ft-wt));
440
- font-style: var(
441
- --_sf-sd-ft-se-ic,
442
- prepareMediaVariable(--_ctm-dn-im-se-dt-se-ft-se-ic)
443
- );
444
- text-align: var(--_sf-sd-tt-an, prepareMediaVariable(--_ctm-dn-im-se-dt-se-tt-an));
445
- letter-spacing: var(--_sf-sd-lr-sg, prepareMediaVariable(--_ctm-dn-im-se-dt-se-lr-sg));
446
- line-height: var(--_sf-sd-le-ht, prepareMediaVariable(--_ctm-dn-im-se-dt-se-le-ht-dc));
447
- text-decoration: var(--_sf-sd-ue, prepareMediaVariable(--_ctm-dn-im-se-dt-se-ue));
448
- text-transform: var(--_sf-sd-tt-tm, prepareMediaVariable(--_ctm-dn-im-se-dt-se-tt-tm));
449
- word-wrap: var(
450
- --_sf-sd-wd-wp,
451
- prepareMediaVariable(--_ctm-dn-im-se-dt-se-wd-wp, normal)
452
- );
453
- word-break: var(
454
- --_sf-sd-wd-bk,
455
- prepareMediaVariable(--_ctm-dn-im-se-dt-se-wd-bk, normal)
456
- );
457
- -webkit-line-clamp: var(--_sf-it-clamp-sd, var(--_sf-it-clamp, 1));
458
- white-space: var(--_sf-it-ws-sd, var(--_sf-it-ws, nowrap));
459
- }
460
- }
461
- }
462
- &[data-flex-direction="column"] {
463
- .language__name {
464
- white-space: unset;
465
- }
466
- }
467
- &[data-flex-direction="row"] {
468
- overflow-x: auto;
469
- }
470
- // Matched when *either* state wants a divider, so the rules below exist and each
471
- // state can then decide visibility for itself — gating on the default state alone
472
- // meant a divider switched on only for hover could never appear.
473
- &:is([data-show-divider="true"], [data-show-divider-hover="true"]) {
474
- // Divider weight/colour resolve through these two, so the hover block below
475
- // only has to re-point them. Previously the declarations read the default
476
- // state's variables directly and the Widget Style > Hover > Divider controls
477
- // wrote to `--_ctm-dn-wt-se-hr-se-dr-*`, which nothing ever read.
478
- --_sf-dr-wt: var(
479
- --_ctm-mob-dn-wt-se-dt-se-dr-wt,
480
- var(--_ctm-tab-dn-wt-se-dt-se-dr-wt, var(--_ctm-dn-wt-se-dt-se-dr-wt))
481
- );
482
- --_sf-dr-cr: var(
483
- --_ctm-mob-dn-wt-se-dt-se-dr-cr,
484
- var(--_ctm-tab-dn-wt-se-dt-se-dr-cr, var(--_ctm-dn-wt-se-dt-se-dr-cr))
485
- );
486
-
487
- // Divider lives under Widget Style, so its hover state is the *widget* being
488
- // hovered, not an individual option. Scoping this to `.option:hover` only
489
- // repainted the hovered option's own divider, which read as "not working".
490
- &:hover {
491
- --_sf-dr-wt: var(
492
- --_ctm-mob-dn-wt-se-hr-se-dr-wt,
493
- var(
494
- --_ctm-tab-dn-wt-se-hr-se-dr-wt,
495
- var(
496
- --_ctm-dn-wt-se-hr-se-dr-wt,
497
- var(
498
- --_ctm-mob-dn-wt-se-dt-se-dr-wt,
499
- var(--_ctm-tab-dn-wt-se-dt-se-dr-wt, var(--_ctm-dn-wt-se-dt-se-dr-wt))
500
- )
501
- )
502
- )
503
- );
504
- --_sf-dr-cr: var(
505
- --_ctm-mob-dn-wt-se-hr-se-dr-cr,
506
- var(
507
- --_ctm-tab-dn-wt-se-hr-se-dr-cr,
508
- var(
509
- --_ctm-dn-wt-se-hr-se-dr-cr,
510
- var(
511
- --_ctm-mob-dn-wt-se-dt-se-dr-cr,
512
- var(--_ctm-tab-dn-wt-se-dt-se-dr-cr, var(--_ctm-dn-wt-se-dt-se-dr-cr))
513
- )
514
- )
515
- )
516
- );
517
- }
518
-
519
- // Both states also collapse the weight when their own switch is off, so the space
520
- // reserved below matches whether the divider is actually painted. Mirrors the
521
- // `display: none` rules at the end of this block.
522
- &[data-show-divider="false"]:not(:hover),
523
- &[data-show-divider-hover="false"]:hover {
524
- --_sf-dr-wt: 0px;
525
- }
526
-
527
- // The divider is a pseudo-element, so it takes no space of its own: at a weight
528
- // wider than half the item gap it used to grow back over the option's label.
529
- // `dividerGapReserve` gives the option that weight as margin and
530
- // `dividerGapOffset` pushes the divider into it, so the rule stays inside the gap
531
- // whatever the weight. `--_sf-dr-wt` rather than the raw variables so the reserve
532
- // follows the hover weight the same way the divider itself does.
533
- &[data-flex-direction="row"] {
534
- .option:not(:last-child) {
535
- @include dividerGapReserve(var(--_sf-dr-wt), right);
536
- }
537
- .option:not(:last-child)::before {
538
- content: "";
539
- position: absolute;
540
- top: 0;
541
- bottom: 0; /* For full height divider */
542
- right: dividerGapOffset(
543
- var(--_ctm-mob-lt-gp-bn-is, var(--_ctm-tab-lt-gp-bn-is, var(--_ctm-lt-gp-bn-is))),
544
- var(--_sf-dr-wt)
545
- );
546
- width: var(--_sf-dr-wt); /* Divider thickness */
547
- background-color: var(--_sf-dr-cr); /* Divider color */
548
- }
549
- }
550
- &[data-flex-direction="column"] {
551
- .option:not(:last-child) {
552
- @include dividerGapReserve(var(--_sf-dr-wt));
553
- }
554
- .option:not(:last-child)::before {
555
- content: "";
556
- position: absolute;
557
- left: 0;
558
- right: 0;
559
- bottom: dividerGapOffset(
560
- var(--_ctm-mob-lt-gp-bn-is, var(--_ctm-tab-lt-gp-bn-is, var(--_ctm-lt-gp-bn-is))),
561
- var(--_sf-dr-wt)
562
- );
563
- height: var(--_sf-dr-wt);
564
- background-color: var(--_sf-dr-cr);
565
- }
566
- }
567
-
568
- // Each state's own Show Divider switch. Declared last so they win over the
569
- // `::before` rules above, and split by state so turning the divider off for
570
- // hover only affects the hovered widget.
571
- &[data-show-divider="false"] .option::before {
572
- display: none;
573
- }
574
- &[data-show-divider-hover="false"]:hover .option::before {
575
- display: none;
576
- }
577
- &[data-show-divider-hover="true"]:hover .option:not(:last-child)::before {
578
- display: block;
579
- }
580
- }
581
-
582
- .option_select {
583
- width: 100%;
584
- display: flex;
585
- align-items: center;
586
- justify-content: var(--_ctm-mob-lt-at, var(--_ctm-tab-lt-at, var(--_ctm-lt-at)));
587
-
588
- position: relative;
589
- min-width: 0;
590
-
591
- // Widget Style > padding (was Widget Placeholder Text > padding). It used to sit
592
- // on `.value__selected__new` only, which is the *empty* state — as soon as an
593
- // option was selected the markup switched to this branch and the padding
594
- // appeared to do nothing.
595
- padding: var(--_sf-wt-pg, prepareMediaVariable(--_ctm-dn-wt-pr-tt-pg));
596
- gap: var(--_ctm-mob-lt-im-sg, var(--_ctm-tab-lt-im-sg, var(--_ctm-lt-im-sg)));
597
- .language__name {
598
- width: 100%;
599
- // Widget Style's per-state values first; the retired Widget Placeholder Text
600
- // variables remain only as a fallback for pages saved before the two merged.
601
- font-family: var(--_sf-wt-ft-fy, prepareMediaVariable(--_ctm-dn-wt-pr-tt-ft-fy));
602
- font-size: var(--_sf-wt-ft-se, prepareMediaVariable(--_ctm-dn-wt-pr-tt-ft-se));
603
- color: var(--_sf-wt-cr, prepareMediaVariable(--_ctm-dn-wt-pr-tt-cr));
604
- font-weight: var(--_sf-wt-ft-wt, prepareMediaVariable(--_ctm-dn-wt-pr-tt-ft-wt));
605
- text-decoration: var(--_sf-wt-ue, prepareMediaVariable(--_ctm-dn-wt-pr-tt-ue));
606
- font-style: var(--_sf-wt-ft-se-ic, prepareMediaVariable(--_ctm-dn-wt-pr-tt-ft-se-ic));
607
- text-align: var(--_sf-wt-tt-an, prepareMediaVariable(--_ctm-dn-wt-pr-tt-tt-an));
608
- letter-spacing: var(--_sf-wt-lr-sg, prepareMediaVariable(--_ctm-dn-wt-pr-tt-lr-sg));
609
- line-height: var(--_sf-wt-le-ht, prepareMediaVariable(--_ctm-dn-wt-pr-tt-le-ht));
610
- text-transform: var(--_sf-wt-tt-tm, prepareMediaVariable(--_ctm-dn-wt-pr-tt-tt-tm));
611
- word-wrap: var(--_sf-wt-wd-wp, prepareMediaVariable(--_ctm-dn-wt-pr-tt-wd-wp, normal));
612
- word-break: var(--_sf-wt-wd-bk, prepareMediaVariable(--_ctm-dn-wt-pr-tt-wd-bk, normal));
613
- }
614
- }
615
-
616
- .language__name {
617
- color: var(--_sf-hr-cr, prepareMediaVariable(--_ctm-dn-im-se-dt-se-cr));
618
- font-family: var(--_sf-hr-ft-fy, prepareMediaVariable(--_ctm-dn-im-se-dt-se-ft-fy));
619
- &.flex__overflow {
620
- white-space: normal;
621
- @include restrictToLinesShow(#{var(--_sf-line-clamp, 1)});
622
- }
623
- font-size: var(--_sf-hr-ft-se, prepareMediaVariable(--_ctm-dn-im-se-dt-se-ft-se));
624
- font-weight: var(--_sf-hr-ft-wt, prepareMediaVariable(--_ctm-dn-im-se-dt-se-ft-wt));
625
- font-style: var(--_sf-hr-ft-se-ic, prepareMediaVariable(--_ctm-dn-im-se-dt-se-ft-se-ic));
626
- text-align: var(--_sf-hr-tt-an, prepareMediaVariable(--_ctm-dn-im-se-dt-se-tt-an));
627
- letter-spacing: var(--_sf-hr-lr-sg, prepareMediaVariable(--_ctm-dn-im-se-dt-se-lr-sg));
628
- line-height: var(--_sf-hr-le-ht, prepareMediaVariable(--_ctm-dn-im-se-dt-se-le-ht));
629
- text-decoration: var(--_sf-hr-ue, prepareMediaVariable(--_ctm-dn-im-se-dt-se-ue));
630
- text-transform: var(--_sf-hr-tt-tm, prepareMediaVariable(--_ctm-dn-im-se-dt-se-tt-tm));
631
- word-wrap: var(--_sf-hr-wd-wp, prepareMediaVariable(--_ctm-dn-im-se-dt-se-wd-wp, normal));
632
- word-break: var(--_sf-hr-wd-bk, prepareMediaVariable(--_ctm-dn-im-se-dt-se-wd-bk, normal));
633
-
634
- // text-align only has room to act once the label owns the line box — as a
635
- // content-sized flex item it hugged its text, so every alignment looked the
636
- // same. `min-width: 0` keeps it shrinkable so a larger font size truncates
637
- // instead of overflowing the widget.
638
- flex: 1 1 auto;
639
- min-width: 0;
640
- max-width: 100%;
641
-
642
- // Text Overflow is driven entirely by the two clamp custom properties the
643
- // element sets per interaction state (see LanguageMenuElement/DropdownComponent):
644
- // off resolves to 1 nowrap line, on to N wrapped lines. Keeping the box display
645
- // constant means the hover and selected rules below only have to swap the pair,
646
- // which a marker class could not express.
647
- display: -webkit-box;
648
- -webkit-box-orient: vertical;
649
- overflow: hidden;
650
- text-overflow: ellipsis;
651
- -webkit-line-clamp: var(--_sf-it-clamp, 1);
652
- white-space: var(--_sf-it-ws, nowrap);
653
- }
654
-
655
- .option:hover .language__name {
656
- -webkit-line-clamp: var(--_sf-it-clamp-hr, var(--_sf-it-clamp, 1));
657
- white-space: var(--_sf-it-ws-hr, var(--_sf-it-ws, nowrap));
658
- }
659
-
660
- //Dropdown
661
- .value__selected__new {
662
- width: 100%;
663
- // padding: 8px 12px;
664
- // text-align: left;
665
- // Same order as `.option_select .language__name` above: Widget Style's per-state
666
- // typography first, Widget Placeholder Text second. This is the empty branch —
667
- // the two swap in the markup as soon as an option is picked, so they have to
668
- // resolve identically or the text would jump on first selection.
669
- font-family: var(--_sf-wt-ft-fy, prepareMediaVariable(--_ctm-dn-wt-pr-tt-ft-fy));
670
- &.flex__overflow {
671
- white-space: normal;
672
- @include restrictToLinesShow(#{var(--_sf-line-clamp, 1)});
673
- }
674
- font-size: var(--_sf-wt-ft-se, prepareMediaVariable(--_ctm-dn-wt-pr-tt-ft-se));
675
- color: var(--_sf-wt-cr, prepareMediaVariable(--_ctm-dn-wt-pr-tt-cr));
676
- // color: var(--_gray-600);
677
- font-weight: var(--_sf-wt-ft-wt, prepareMediaVariable(--_ctm-dn-wt-pr-tt-ft-wt));
678
- text-decoration: var(--_sf-wt-ue, prepareMediaVariable(--_ctm-dn-wt-pr-tt-ue));
679
- font-style: var(--_sf-wt-ft-se-ic, prepareMediaVariable(--_ctm-dn-wt-pr-tt-ft-se-ic));
680
- text-align: var(--_sf-wt-tt-an, prepareMediaVariable(--_ctm-dn-wt-pr-tt-tt-an));
681
- letter-spacing: var(--_sf-wt-lr-sg, prepareMediaVariable(--_ctm-dn-wt-pr-tt-lr-sg));
682
- line-height: var(--_sf-wt-le-ht, prepareMediaVariable(--_ctm-dn-wt-pr-tt-le-ht));
683
- padding: var(--_sf-wt-pg, prepareMediaVariable(--_ctm-dn-wt-pr-tt-pg));
684
- text-transform: var(--_sf-wt-tt-tm, prepareMediaVariable(--_ctm-dn-wt-pr-tt-tt-tm));
685
- word-wrap: var(--_sf-wt-wd-wp, prepareMediaVariable(--_ctm-dn-wt-pr-tt-wd-wp, normal));
686
- word-break: var(--_sf-wt-wd-bk, prepareMediaVariable(--_ctm-dn-wt-pr-tt-wd-bk, normal));
687
- min-width: 0;
688
- display: -webkit-box;
689
- -webkit-box-orient: vertical;
690
- overflow: hidden;
691
- text-overflow: ellipsis;
692
- -webkit-line-clamp: var(--_sf-it-clamp, 1);
693
- white-space: var(--_sf-it-ws, nowrap);
694
- }
695
- .est__dropdown__main {
696
- position: relative;
697
- width: 100%;
698
- margin-top: 0px;
699
- label {
700
- font-size: 14px;
701
- color: var(--_gray-700);
702
- margin-bottom: 8px;
703
- display: block;
704
- }
705
-
706
- .est__dropdown {
707
- cursor: pointer;
708
- position: relative;
709
- color: var(--_gray-700);
710
-
711
- // border-radius: 6px;
712
- // background-color: #fff;
713
- display: flex;
714
- justify-content: space-between;
715
- align-items: center;
716
- padding: prepareMediaVariable(--_ctm-dn-dn-se-pg);
717
-
718
- width: 100%;
719
-
720
- .dropdown__button__wrapper {
721
- width: 100%;
722
- // Widget Style > Placeholder Text, default state. Published here rather than
723
- // on the text nodes because the hover state below has to override it, and
724
- // `.value__selected__new` / `.option_select .language__name` are two separate
725
- // branches of the same markup.
726
- @include widgetStateFont(dt-se);
727
- padding: var(--_ctm-mob-lt-im-pg, var(--_ctm-tab-lt-im-pg, var(--_ctm-lt-im-pg)));
728
- background-color: var(
729
- --_ctm-mob-dn-wt-se-dt-se-bd-cr,
730
- var(--_ctm-tab-dn-wt-se-dt-se-bd-cr, var(--_ctm-dn-wt-se-dt-se-bd-cr))
731
- );
732
-
733
- border-color: var(
734
- --_ctm-mob-dn-wt-se-dt-se-br-cr,
735
- var(--_ctm-tab-dn-wt-se-dt-se-br-cr, var(--_ctm-dn-wt-se-dt-se-br-cr))
736
- );
737
-
738
- border-style: var(
739
- --_ctm-mob-dn-wt-se-dt-se-br-se,
740
- var(--_ctm-tab-dn-wt-se-dt-se-br-se, var(--_ctm-dn-wt-se-dt-se-br-se))
741
- );
742
-
743
- border-width: var(
744
- --_ctm-mob-dn-wt-se-dt-se-br-wh,
745
- var(--_ctm-tab-dn-wt-se-dt-se-br-wh, var(--_ctm-dn-wt-se-dt-se-br-wh))
746
- );
747
-
748
- border-radius: var(
749
- --_ctm-mob-dn-wt-se-dt-se-br-rs,
750
- var(--_ctm-tab-dn-wt-se-dt-se-br-rs, var(--_ctm-dn-wt-se-dt-se-br-rs))
751
- );
752
-
753
- box-shadow: var(
754
- --_show-shadow,
755
- var(
756
- --_ctm-mob-dn-wt-se-dt-se-sw-ae,
757
- var(--_ctm-tab-dn-wt-se-dt-se-sw-ae, var(--_ctm-dn-wt-se-dt-se-sw-ae))
758
- )
759
- var(
760
- --_ctm-mob-dn-wt-se-dt-se-sw-br,
761
- var(--_ctm-tab-dn-wt-se-dt-se-sw-br, var(--_ctm-dn-wt-se-dt-se-sw-br))
762
- )
763
- var(
764
- --_ctm-mob-dn-wt-se-dt-se-sw-sd,
765
- var(--_ctm-tab-dn-wt-se-dt-se-sw-sd, var(--_ctm-dn-wt-se-dt-se-sw-sd))
766
- )
767
- var(
768
- --_ctm-mob-dn-wt-se-dt-se-sw-cr,
769
- var(--_ctm-tab-dn-wt-se-dt-se-sw-cr, var(--_ctm-dn-wt-se-dt-se-sw-cr))
770
- )
771
- );
772
- &:hover {
773
- // Hover state, falling back to the default state per property so a widget
774
- // that only sets a hover colour keeps the default font, size and the rest.
775
- @include widgetStateFont(hr-se, dt-se);
776
- background-color: var(
777
- --_ctm-mob-dn-wt-se-hr-se-bd-cr,
778
- var(--_ctm-tab-dn-wt-se-hr-se-bd-cr, var(--_ctm-dn-wt-se-hr-se-bd-cr))
779
- );
780
-
781
- border-color: var(
782
- --_ctm-mob-dn-wt-se-hr-se-br-cr,
783
- var(--_ctm-tab-dn-wt-se-hr-se-br-cr, var(--_ctm-dn-wt-se-hr-se-br-cr))
784
- );
785
-
786
- border-style: var(
787
- --_ctm-mob-dn-wt-se-hr-se-br-se,
788
- var(--_ctm-tab-dn-wt-se-hr-se-br-se, var(--_ctm-dn-wt-se-hr-se-br-se))
789
- );
790
-
791
- border-width: var(
792
- --_ctm-mob-dn-wt-se-hr-se-br-wh,
793
- var(--_ctm-tab-dn-wt-se-hr-se-br-wh, var(--_ctm-dn-wt-se-hr-se-br-wh))
794
- );
795
-
796
- border-radius: var(
797
- --_ctm-mob-dn-wt-se-hr-se-br-rs,
798
- var(--_ctm-tab-dn-wt-se-hr-se-br-rs, var(--_ctm-dn-wt-se-hr-se-br-rs))
799
- );
800
-
801
- box-shadow: var(
802
- --_show-shadow,
803
- var(
804
- --_ctm-mob-dn-wt-se-hr-se-sw-ae,
805
- var(--_ctm-tab-dn-wt-se-hr-se-sw-ae, var(--_ctm-dn-wt-se-hr-se-sw-ae))
806
- )
807
- var(
808
- --_ctm-mob-dn-wt-se-hr-se-sw-br,
809
- var(--_ctm-tab-dn-wt-se-hr-se-sw-br, var(--_ctm-dn-wt-se-hr-se-sw-br))
810
- )
811
- var(
812
- --_ctm-mob-dn-wt-se-hr-se-sw-sd,
813
- var(--_ctm-tab-dn-wt-se-hr-se-sw-sd, var(--_ctm-dn-wt-se-hr-se-sw-sd))
814
- )
815
- var(
816
- --_ctm-mob-dn-wt-se-hr-se-sw-cr,
817
- var(--_ctm-tab-dn-wt-se-hr-se-sw-cr, var(--_ctm-dn-wt-se-hr-se-sw-cr))
818
- )
819
- );
820
- }
821
- .option_select {
822
- // Truncation is handled by `.language__name` inside, which knows whether
823
- // Text Overflow is on and how many lines to clamp to. A `white-space:
824
- // nowrap` here inherited down and defeated the multi-line clamp.
825
- overflow: hidden;
826
- }
827
-
828
- // Widget Style > Hover > Text Overflow. The clamp pair reaches the DOM as an
829
- // inline style (it is `controls`, not CSS), so hover cannot be expressed by
830
- // the variable cascade above — the element publishes both pairs on the label
831
- // and this rule chooses the hovered one, falling back to the default pair.
832
- // Safe to scope on the wrapper: the options list is its sibling, not a
833
- // descendant, so option labels keep their own Item Style clamp.
834
- &:hover {
835
- .language__name,
836
- .value__selected__new {
837
- -webkit-line-clamp: var(--_sf-it-clamp-hr, var(--_sf-it-clamp, 1));
838
- white-space: var(--_sf-it-ws-hr, var(--_sf-it-ws, nowrap));
839
- }
840
- }
841
- }
842
-
843
- .est__dropdown__button {
844
- display: flex;
845
- align-items: center;
846
- width: 100%;
847
- position: relative;
848
- gap: 8px;
849
- // Keeps the label shrinkable so a larger font size truncates instead of
850
- // pushing the toggle icon out of the widget.
851
- min-width: 0;
852
-
853
- & > .option_select,
854
- & > .value__selected__new {
855
- flex: 1 1 auto;
856
- min-width: 0;
857
- }
858
- }
859
-
860
- .est__dropdown__icon {
861
- // position: absolute;
862
- // right: 0;
863
- transition: transform 0.4s ease-in-out;
864
- display: flex;
865
- &.rotate__180 {
866
- transform: rotate(180deg);
867
- }
868
- &.rotate__0 {
869
- transform: rotate(0deg);
870
- }
871
- width: prepareMediaVariable(--_ctm-dn-te-in-in-se);
872
- height: prepareMediaVariable(--_ctm-dn-te-in-in-se);
873
-
874
- svg {
875
- width: prepareMediaVariable(--_ctm-dn-te-in-in-se);
876
- height: prepareMediaVariable(--_ctm-dn-te-in-in-se);
877
-
878
- path {
879
- stroke: var(
880
- --_ctm-mob-dn-te-in-in-c1,
881
- var(--_ctm-tab-dn-te-in-cr, var(--_ctm-dn-te-in-in-c1))
882
- );
883
- // Overrides the stroke-width presentation attribute baked into the icon markup.
884
- stroke-width: prepareMediaVariable(--_ctm-dn-te-in-se-wh, 1.25);
885
- }
886
- }
887
- }
888
-
889
- .list {
890
- flex-direction: column;
891
- border: 1px solid var(--_gray-200);
892
- border-radius: 6px;
893
- position: absolute;
894
- top: 100%;
895
- left: 0;
896
- width: 100%;
897
- padding: 4px;
898
- background-color: prepareMediaVariable(--_ctm-dn-wt-dn-bd-cr);
899
- border-radius: prepareMediaVariable(--_ctm-dn-wt-dn-br-rs);
900
- z-index: var(--_higher-zIndex);
901
- max-height: 200px;
902
- overflow-y: auto;
903
- border-width: prepareMediaVariable(--_ctm-dn-wt-dn-br-wh);
904
- border-style: prepareMediaVariable(--_ctm-dn-wt-dn-br-se);
905
- border-color: prepareMediaVariable(--_ctm-dn-wt-dn-br-cr);
906
- // margin-top: var(
907
- // --_ctm-mob-lt-gp-bn-is,
908
- // var(--_ctm-tab-lt-gp-bn-is, var(--_ctm-lt-gp-bn-is))
909
- // );
910
- gap: var(--_ctm-mob-lt-gp-bn-is, var(--_ctm-tab-lt-gp-bn-is, var(--_ctm-lt-gp-bn-is)));
911
- // padding: 2px;
912
- // border-radius: 4px;
913
- // border: 1px solid var(--_gray-300);
914
- box-shadow: prepareMediaVariable(--_ctm-dn-wt-dn-sw-ae)
915
- prepareMediaVariable(--_ctm-dn-wt-dn-sw-br)
916
- prepareMediaVariable(--_ctm-dn-wt-dn-sw-sd)
917
- prepareMediaVariable(--_ctm-dn-wt-dn-sw-cr);
918
-
919
- &.top {
920
- bottom: 100%;
921
- top: auto;
922
- }
923
-
924
- .option {
925
- cursor: pointer;
926
- // &:not(:last-child) {
927
- // margin-bottom: 2px;
928
- // }
929
- // padding: 4px;
930
- // &:hover {
931
- // background: var(--_gray-100);
932
- // border-radius: 4px;
933
- // }
934
- }
935
- &.show__panel {
936
- animation: slideUp 0.4s ease-in-out forwards;
937
- }
938
-
939
- &.hide__panel {
940
- animation: slideDown 0.4s ease-in-out forwards;
941
- pointer-events: none;
942
- }
943
- }
944
- }
945
- }
946
- }
947
- }
948
- }
1
+ @use "sass:map";
2
+ @use "sass:list";
3
+ @use "./functions.scss" as *;
4
+
5
+ // Widget Style > Placeholder Text. The section is per-state (Default / Hover) and its
6
+ // typography reached the stylesheet as `--_ctm-dn-wt-se-{dt,hr}-se-*` that nothing
7
+ // read, so both states looked dead in the panel. Both states publish the same
8
+ // `--_sf-wt-*` names and the hovered widget wins the cascade.
9
+ //
10
+ // Deliberately no final fallback inside these chains: an untouched property stays
11
+ // invalid at computed-value time, which is what lets the consumers fall back to
12
+ // `--_ctm-dn-wt-pr-tt-*`. Those come from the retired Widget Placeholder Text
13
+ // section — Widget Style absorbed it, so the fallback exists only for pages saved
14
+ // before the merge. Same shape the divider already uses for its
15
+ // hover-falls-back-to-default chain below.
16
+ $widgetFontProps: ft-fy, ft-se, cr, ft-wt, ft-se-ic, ue, tt-an, lr-sg, le-ht, tt-tm, wd-wp, wd-bk,
17
+ pg;
18
+
19
+ @mixin widgetStateFont($state, $fallbackState: null) {
20
+ @each $p in $widgetFontProps {
21
+ $inner: if(
22
+ $fallbackState == null,
23
+ var(--_ctm-dn-wt-se-#{$state}-#{$p}),
24
+ var(
25
+ --_ctm-dn-wt-se-#{$state}-#{$p},
26
+ var(
27
+ --_ctm-mob-dn-wt-se-#{$fallbackState}-#{$p},
28
+ var(
29
+ --_ctm-tab-dn-wt-se-#{$fallbackState}-#{$p},
30
+ var(--_ctm-dn-wt-se-#{$fallbackState}-#{$p})
31
+ )
32
+ )
33
+ )
34
+ );
35
+ --_sf-wt-#{$p}: var(
36
+ --_ctm-mob-dn-wt-se-#{$state}-#{$p},
37
+ var(--_ctm-tab-dn-wt-se-#{$state}-#{$p}, #{$inner})
38
+ );
39
+ }
40
+ }
41
+
42
+ [data-div-type="element"] {
43
+ &[data-element-type="languageMenu"],
44
+ &[data-element-type="currencySelector"],
45
+ &[data-element-type="userGroupsSelector"],
46
+ &[data-element-type="warehouseSelector"] {
47
+ margin: var(--_ctm-mob-lt-mn, var(--_ctm-tab-lt-mn, var(--_ctm-lt-mn)));
48
+
49
+ & > .wrapper {
50
+ width: 100%;
51
+ height: auto;
52
+ }
53
+ &[data-show-shadow="false"] {
54
+ --_show-shadow: none;
55
+ }
56
+ .language__conatiner {
57
+ // background-color: var(
58
+ // --_ctm-mob-dn-wt-se-dt-se-bd-cr,
59
+ // var(--_ctm-tab-dn-wt-se-dt-se-bd-cr, var(--_ctm-dn-wt-se-dt-se-bd-cr))
60
+ // );
61
+
62
+ // border-color: var(
63
+ // --_ctm-mob-dn-wt-se-dt-se-br-cr,
64
+ // var(--_ctm-tab-dn-wt-se-dt-se-br-cr, var(--_ctm-dn-wt-se-dt-se-br-cr))
65
+ // );
66
+
67
+ // border-style: var(
68
+ // --_ctm-mob-dn-wt-se-dt-se-br-se,
69
+ // var(--_ctm-tab-dn-wt-se-dt-se-br-se, var(--_ctm-dn-wt-se-dt-se-br-se))
70
+ // );
71
+
72
+ // border-width: var(
73
+ // --_ctm-mob-dn-wt-se-dt-se-br-wh,
74
+ // var(--_ctm-tab-dn-wt-se-dt-se-br-wh, var(--_ctm-dn-wt-se-dt-se-br-wh))
75
+ // );
76
+
77
+ // border-radius: var(
78
+ // --_ctm-mob-dn-wt-se-dt-se-br-rs,
79
+ // var(--_ctm-tab-dn-wt-se-dt-se-br-rs, var(--_ctm-dn-wt-se-dt-se-br-rs))
80
+ // );
81
+
82
+ // box-shadow: var(
83
+ // --_show-shadow,
84
+ // var(
85
+ // --_ctm-mob-dn-wt-se-dt-se-sw-ae,
86
+ // var(--_ctm-tab-dn-wt-se-dt-se-sw-ae, var(--_ctm-dn-wt-se-dt-se-sw-ae))
87
+ // )
88
+ // var(
89
+ // --_ctm-mob-dn-wt-se-dt-se-sw-br,
90
+ // var(--_ctm-tab-dn-wt-se-dt-se-sw-br, var(--_ctm-dn-wt-se-dt-se-sw-br))
91
+ // )
92
+ // var(
93
+ // --_ctm-mob-dn-wt-se-dt-se-sw-sd,
94
+ // var(--_ctm-tab-dn-wt-se-dt-se-sw-sd, var(--_ctm-dn-wt-se-dt-se-sw-sd))
95
+ // )
96
+ // var(
97
+ // --_ctm-mob-dn-wt-se-dt-se-sw-cr,
98
+ // var(--_ctm-tab-dn-wt-se-dt-se-sw-cr, var(--_ctm-dn-wt-se-dt-se-sw-cr))
99
+ // )
100
+ // );
101
+ // &:hover {
102
+ // background-color: var(
103
+ // --_ctm-mob-dn-wt-se-hr-se-bd-cr,
104
+ // var(--_ctm-tab-dn-wt-se-hr-se-bd-cr, var(--_ctm-dn-wt-se-hr-se-bd-cr))
105
+ // );
106
+
107
+ // border-color: var(
108
+ // --_ctm-mob-dn-wt-se-hr-se-br-cr,
109
+ // var(--_ctm-tab-dn-wt-se-hr-se-br-cr, var(--_ctm-dn-wt-se-hr-se-br-cr))
110
+ // );
111
+
112
+ // border-style: var(
113
+ // --_ctm-mob-dn-wt-se-hr-se-br-se,
114
+ // var(--_ctm-tab-dn-wt-se-hr-se-br-se, var(--_ctm-dn-wt-se-hr-se-br-se))
115
+ // );
116
+
117
+ // border-width: var(
118
+ // --_ctm-mob-dn-wt-se-hr-se-br-wh,
119
+ // var(--_ctm-tab-dn-wt-se-hr-se-br-wh, var(--_ctm-dn-wt-se-hr-se-br-wh))
120
+ // );
121
+
122
+ // border-radius: var(
123
+ // --_ctm-mob-dn-wt-se-hr-se-br-rs,
124
+ // var(--_ctm-tab-dn-wt-se-hr-se-br-rs, var(--_ctm-dn-wt-se-hr-se-br-rs))
125
+ // );
126
+
127
+ // box-shadow: var(
128
+ // --_show-shadow,
129
+ // var(
130
+ // --_ctm-mob-dn-wt-se-hr-se-sw-ae,
131
+ // var(--_ctm-tab-dn-wt-se-hr-se-sw-ae, var(--_ctm-dn-wt-se-hr-se-sw-ae))
132
+ // )
133
+ // var(
134
+ // --_ctm-mob-dn-wt-se-hr-se-sw-br,
135
+ // var(--_ctm-tab-dn-wt-se-hr-se-sw-br, var(--_ctm-dn-wt-se-hr-se-sw-br))
136
+ // )
137
+ // var(
138
+ // --_ctm-mob-dn-wt-se-hr-se-sw-sd,
139
+ // var(--_ctm-tab-dn-wt-se-hr-se-sw-sd, var(--_ctm-dn-wt-se-hr-se-sw-sd))
140
+ // )
141
+ // var(
142
+ // --_ctm-mob-dn-wt-se-hr-se-sw-cr,
143
+ // var(--_ctm-tab-dn-wt-se-hr-se-sw-cr, var(--_ctm-dn-wt-se-hr-se-sw-cr))
144
+ // )
145
+ // );
146
+ // }
147
+
148
+ // gap: var(
149
+ // --_ctm-mob-lt-it-ad-mn-qy-sg,
150
+ // var(--_ctm-tab-lt-it-ad-mn-qy-sg, var(--_ctm-lt-it-ad-mn-qy-sg))
151
+ // );
152
+ display: flex;
153
+ gap: var(--_ctm-mob-lt-gp-bn-is, var(--_ctm-tab-lt-gp-bn-is, var(--_ctm-lt-gp-bn-is)));
154
+
155
+ // "Show Border" switches — widget style (default/hover), widget dropdown and
156
+ // item style (default/hover/selected). Each state is gated on its own switch.
157
+ // border-style is reset alongside the width: a state whose width variables are
158
+ // unset resolves border-width to the initial `medium`, so zeroing the width
159
+ // alone still leaves a border painted in whatever border-style is in effect.
160
+ &[data-widget-border="false"] {
161
+ .est__dropdown__main .est__dropdown .dropdown__button__wrapper {
162
+ border-width: 0;
163
+ border-style: none;
164
+ }
165
+ }
166
+ &[data-widget-hover-border="false"] {
167
+ .est__dropdown__main .est__dropdown .dropdown__button__wrapper:hover {
168
+ border-width: 0;
169
+ border-style: none;
170
+ }
171
+ }
172
+ &[data-dropdown-border="false"] {
173
+ .est__dropdown__main .est__dropdown .list {
174
+ border-width: 0;
175
+ border-style: none;
176
+ }
177
+ }
178
+ &[data-item-border="false"] {
179
+ .option:not(:hover):not([data-selected="true"]) {
180
+ border-width: 0;
181
+ border-style: none;
182
+ }
183
+ }
184
+ &[data-item-hover-border="false"] {
185
+ .option:hover:not([data-selected="true"]) {
186
+ border-width: 0;
187
+ border-style: none;
188
+ }
189
+ }
190
+ &[data-item-selected-border="false"] {
191
+ .option[data-selected="true"] {
192
+ border-width: 0;
193
+ border-style: none;
194
+ }
195
+ }
196
+
197
+ .option:hover {
198
+ --_sf-hr-bd-cr: var(
199
+ --_ctm-mob-dn-im-se-hr-se-bd-cr,
200
+ var(--_ctm-tab-dn-im-se-hr-se-bd-cr, var(--_ctm-dn-im-se-hr-se-bd-cr))
201
+ );
202
+ --_sf-hr-br-cr: var(
203
+ --_ctm-mob-dn-im-se-hr-se-br-cr,
204
+ var(--_ctm-tab-dn-im-se-hr-se-br-cr, var(--_ctm-dn-im-se-hr-se-br-cr))
205
+ );
206
+ --_sf-hr-br-se: var(
207
+ --_ctm-mob-dn-im-se-hr-se-br-se,
208
+ var(--_ctm-tab-dn-im-se-hr-se-br-se, var(--_ctm-dn-im-se-hr-se-br-se))
209
+ );
210
+ --_sf-hr-br-wh: var(
211
+ --_ctm-mob-dn-im-se-hr-se-br-wh,
212
+ var(--_ctm-tab-dn-im-se-hr-se-br-wh, var(--_ctm-dn-im-se-hr-se-br-wh))
213
+ );
214
+ --_sf-hr-br-rs: var(
215
+ --_ctm-mob-dn-im-se-hr-se-br-rs,
216
+ var(--_ctm-tab-dn-im-se-hr-se-br-rs, var(--_ctm-dn-im-se-hr-se-br-rs))
217
+ );
218
+
219
+ // for shadow
220
+ --_sf-hr-sw-ae: var(
221
+ --_ctm-mob-dn-im-se-hr-se-sw-ae,
222
+ var(--_ctm-tab-dn-im-se-hr-se-sw-ae, var(--_ctm-dn-im-se-hr-se-sw-ae))
223
+ );
224
+ --_sf-hr-sw-br: var(
225
+ --_ctm-mob-dn-im-se-hr-se-sw-br,
226
+ var(--_ctm-tab-dn-im-se-hr-se-sw-br, var(--_ctm-dn-im-se-hr-se-sw-br))
227
+ );
228
+ --_sf-hr-sw-hr: var(
229
+ --_ctm-mob-dn-im-se-hr-se-sw-hr,
230
+ var(--_ctm-tab-dn-im-se-hr-se-sw-hr, var(--_ctm-dn-im-se-hr-se-sw-hr))
231
+ );
232
+ --_sf-hr-sw-cr: var(
233
+ --_ctm-mob-dn-im-se-hr-se-sw-cr,
234
+ var(--_ctm-tab-dn-im-se-hr-se-sw-cr, var(--_ctm-dn-im-se-hr-se-sw-cr))
235
+ );
236
+
237
+ // for font
238
+
239
+ --_sf-hr-cr: var(
240
+ --_ctm-mob-dn-im-se-hr-se-cr,
241
+ var(--_ctm-tab-dn-im-se-hr-se-cr, var(--_ctm-dn-im-se-hr-se-cr))
242
+ );
243
+ --_sf-hr-ft-fy: var(
244
+ --_ctm-mob-dn-im-se-hr-se-ft-fy,
245
+ var(--_ctm-tab-dn-im-se-hr-se-ft-fy, var(--_ctm-dn-im-se-hr-se-ft-fy))
246
+ );
247
+ --_sf-hr-ft-se: var(
248
+ --_ctm-mob-dn-im-se-hr-se-ft-se,
249
+ var(--_ctm-tab-dn-im-se-hr-se-ft-se, var(--_ctm-dn-im-se-hr-se-ft-se))
250
+ );
251
+ --_sf-hr-ft-wt: var(
252
+ --_ctm-mob-dn-im-se-hr-se-ft-wt,
253
+ var(--_ctm-tab-dn-im-se-hr-se-ft-wt, var(--_ctm-dn-im-se-hr-se-ft-wt))
254
+ );
255
+ --_sf-hr-ft-se-ic: var(
256
+ --_ctm-mob-dn-im-se-hr-se-ft-se-ic,
257
+ var(--_ctm-tab-dn-im-se-hr-se-ft-se-ic, var(--_ctm-dn-im-se-hr-se-ft-se-ic))
258
+ );
259
+ --_sf-hr-tt-an: var(
260
+ --_ctm-mob-dn-im-se-hr-se-tt-an,
261
+ var(--_ctm-tab-dn-im-se-hr-se-tt-an, var(--_ctm-dn-im-se-hr-se-tt-an))
262
+ );
263
+ --_sf-hr-lr-sg: var(
264
+ --_ctm-mob-dn-im-se-hr-se-lr-sg,
265
+ var(--_ctm-tab-dn-im-se-hr-se-lr-sg, var(--_ctm-dn-im-se-hr-se-lr-sg))
266
+ );
267
+ --_sf-hr-le-ht: var(
268
+ --_ctm-mob-dn-im-se-hr-se-le-ht,
269
+ var(--_ctm-tab-dn-im-se-hr-se-le-ht, var(--_ctm-dn-im-se-hr-se-le-ht))
270
+ );
271
+
272
+ --_sf-hr-ue: var(
273
+ --_ctm-mob-dn-im-se-hr-se-ue,
274
+ var(--_ctm-tab-dn-im-se-hr-se-ue, var(--_ctm-dn-im-se-hr-se-ue))
275
+ );
276
+ --_sf-hr-tt-tm: var(
277
+ --_ctm-mob-dn-im-se-hr-se-tt-tm,
278
+ var(--_ctm-tab-dn-im-se-hr-se-tt-tm, var(--_ctm-dn-im-se-hr-se-tt-tm))
279
+ );
280
+ --_sf-hr-wd-wp: var(
281
+ --_ctm-mob-dn-im-se-hr-se-wd-wp,
282
+ var(--_ctm-tab-dn-im-se-hr-se-wd-wp, var(--_ctm-dn-im-se-hr-se-wd-wp))
283
+ );
284
+ --_sf-hr-wd-bk: var(
285
+ --_ctm-mob-dn-im-se-hr-se-wd-bk,
286
+ var(--_ctm-tab-dn-im-se-hr-se-wd-bk, var(--_ctm-dn-im-se-hr-se-wd-bk))
287
+ );
288
+ --_sf-hr-pg: var(
289
+ --_ctm-mob-dn-im-se-hr-se-pg,
290
+ var(--_ctm-tab-dn-im-se-hr-se-pg, var(--_ctm-dn-im-se-hr-se-pg))
291
+ );
292
+ }
293
+
294
+ .option[data-selected="true"] {
295
+ --_sf-sd-bd-cr: var(
296
+ --_ctm-mob-dn-im-se-sd-se-bd-cr,
297
+ var(--_ctm-tab-dn-im-se-sd-se-bd-cr, var(--_ctm-dn-im-se-sd-se-bd-cr))
298
+ );
299
+ --_sf-sd-br-cr: var(
300
+ --_ctm-mob-dn-im-se-sd-se-br-cr,
301
+ var(--_ctm-tab-dn-im-se-sd-se-br-cr, var(--_ctm-dn-im-se-sd-se-br-cr))
302
+ );
303
+ --_sf-sd-br-se: var(
304
+ --_ctm-mob-dn-im-se-sd-se-br-se,
305
+ var(--_ctm-tab-dn-im-se-sd-se-br-se, var(--_ctm-dn-im-se-sd-se-br-se))
306
+ );
307
+ --_sf-sd-br-wh: var(
308
+ --_ctm-mob-dn-im-se-sd-se-br-wh,
309
+ var(--_ctm-tab-dn-im-se-sd-se-br-wh, var(--_ctm-dn-im-se-sd-se-br-wh))
310
+ );
311
+ // Was missing entirely, so `border-radius: var(--_sf-sd-br-rs, <default state>)`
312
+ // always fell through to the default state and Selected > Border Radius did
313
+ // nothing. Every sibling state variable had one; this is the odd one out.
314
+ --_sf-sd-br-rs: var(
315
+ --_ctm-mob-dn-im-se-sd-se-br-rs,
316
+ var(--_ctm-tab-dn-im-se-sd-se-br-rs, var(--_ctm-dn-im-se-sd-se-br-rs))
317
+ );
318
+ // new
319
+ --_sf-sd-sw-ae: var(
320
+ --_ctm-mob-dn-im-se-sd-se-sw-ae,
321
+ var(--_ctm-tab-dn-im-se-sd-se-sw-ae, var(--_ctm-dn-im-se-sd-se-sw-ae))
322
+ );
323
+ --_sf-sd-sw-br: var(
324
+ --_ctm-mob-dn-im-se-sd-se-sw-br,
325
+ var(--_ctm-tab-dn-im-se-sd-se-sw-br, var(--_ctm-dn-im-se-sd-se-sw-br))
326
+ );
327
+ --_sf-sd-sw-sd: var(
328
+ --_ctm-mob-dn-im-se-sd-se-sw-sd,
329
+ var(--_ctm-tab-dn-im-se-sd-se-sw-sd, var(--_ctm-dn-im-se-sd-se-sw-sd))
330
+ );
331
+ --_sf-sd-sw-cr: var(
332
+ --_ctm-mob-dn-im-se-sd-se-sw-cr,
333
+ var(--_ctm-tab-dn-im-se-sd-se-sw-cr, var(--_ctm-dn-im-se-sd-se-sw-cr))
334
+ );
335
+
336
+ // for font
337
+
338
+ --_sf-sd-cr: var(
339
+ --_ctm-mob-dn-im-se-sd-se-cr,
340
+ var(--_ctm-tab-dn-im-se-sd-se-cr, var(--_ctm-dn-im-se-sd-se-cr))
341
+ );
342
+ --_sf-sd-ft-fy: var(
343
+ --_ctm-mob-dn-im-se-sd-se-ft-fy,
344
+ var(--_ctm-tab-dn-im-se-sd-se-ft-fy, var(--_ctm-dn-im-se-sd-se-ft-fy))
345
+ );
346
+ --_sf-sd-ft-se: var(
347
+ --_ctm-mob-dn-im-se-sd-se-ft-se,
348
+ var(--_ctm-tab-dn-im-se-sd-se-ft-se, var(--_ctm-dn-im-se-sd-se-ft-se))
349
+ );
350
+ --_sf-sd-ft-wt: var(
351
+ --_ctm-mob-dn-im-se-sd-se-ft-wt,
352
+ var(--_ctm-tab-dn-im-se-sd-se-ft-wt, var(--_ctm-dn-im-se-sd-se-ft-wt))
353
+ );
354
+ --_sf-sd-ft-se-ic: var(
355
+ --_ctm-mob-dn-im-se-sd-se-ft-se-ic,
356
+ var(--_ctm-tab-dn-im-se-sd-se-ft-se-ic, var(--_ctm-dn-im-se-sd-se-ft-se-ic))
357
+ );
358
+ --_sf-sd-tt-an: var(
359
+ --_ctm-mob-dn-im-se-sd-se-tt-an,
360
+ var(--_ctm-tab-dn-im-se-sd-se-tt-an, var(--_ctm-dn-im-se-sd-se-tt-an))
361
+ );
362
+ --_sf-sd-lr-sg: var(
363
+ --_ctm-mob-dn-im-se-sd-se-lr-sg,
364
+ var(--_ctm-tab-dn-im-se-sd-se-lr-sg, var(--_ctm-dn-im-se-sd-se-lr-sg))
365
+ );
366
+ --_sf-sd-le-ht: var(
367
+ --_ctm-mob-dn-im-se-sd-se-le-ht,
368
+ var(--_ctm-tab-dn-im-se-sd-se-le-ht, var(--_ctm-dn-im-se-sd-se-le-ht))
369
+ );
370
+
371
+ --_sf-sd-ue: var(
372
+ --_ctm-mob-dn-im-se-sd-se-ue,
373
+ var(--_ctm-tab-dn-im-se-sd-se-ue, var(--_ctm-dn-im-se-sd-se-ue))
374
+ );
375
+ --_sf-sd-tt-tm: var(
376
+ --_ctm-mob-dn-im-se-sd-se-tt-tm,
377
+ var(--_ctm-tab-dn-im-se-sd-se-tt-tm, var(--_ctm-dn-im-se-sd-se-tt-tm))
378
+ );
379
+ --_sf-sd-wd-wp: var(
380
+ --_ctm-mob-dn-im-se-sd-se-wd-wp,
381
+ var(--_ctm-tab-dn-im-se-sd-se-wd-wp, var(--_ctm-dn-im-se-sd-se-wd-wp))
382
+ );
383
+ --_sf-sd-wd-bk: var(
384
+ --_ctm-mob-dn-im-se-sd-se-wd-bk,
385
+ var(--_ctm-tab-dn-im-se-sd-se-wd-bk, var(--_ctm-dn-im-se-sd-se-wd-bk))
386
+ );
387
+ --_sf-sd-pg: var(
388
+ --_ctm-mob-dn-im-se-sd-se-pg,
389
+ var(--_ctm-tab-dn-im-se-sd-se-pg, var(--_ctm-dn-im-se-sd-se-pg))
390
+ );
391
+ }
392
+
393
+ .option {
394
+ width: 100%;
395
+ display: flex;
396
+ align-items: center;
397
+ cursor: pointer;
398
+ justify-content: var(--_ctm-mob-lt-at, var(--_ctm-tab-lt-at, var(--_ctm-lt-at)));
399
+
400
+ position: relative;
401
+ box-sizing: border-box;
402
+ // Without this a flex item refuses to shrink below its content width, so a
403
+ // larger font size pushed the label straight out of the widget.
404
+ // min-width: 0;
405
+
406
+ padding: var(--_sf-hr-pg, prepareMediaVariable(--_ctm-dn-im-se-dt-se-pg));
407
+ gap: var(--_ctm-mob-lt-im-sg, var(--_ctm-tab-lt-im-sg, var(--_ctm-lt-im-sg)));
408
+ border-color: var(--_sf-hr-br-cr, prepareMediaVariable(--_ctm-dn-im-se-dt-se-br-cr));
409
+
410
+ background-color: var(--_sf-hr-bd-cr, prepareMediaVariable(--_ctm-dn-im-se-dt-se-bd-cr));
411
+ border-style: var(--_sf-hr-br-se, prepareMediaVariable(--_ctm-dn-im-se-dt-se-br-se));
412
+ border-radius: var(--_sf-hr-br-rs, prepareMediaVariable(--_ctm-dn-im-se-dt-se-br-rs));
413
+ border-width: var(--_sf-hr-br-wh, prepareMediaVariable(--_ctm-dn-im-se-dt-se-br-wh));
414
+
415
+ box-shadow: var(--_sf-hr-sw-ae, prepareMediaVariable(--_ctm-dn-im-se-dt-se-sw-ae))
416
+ var(--_sf-hr-sw-br, prepareMediaVariable(--_ctm-dn-im-se-dt-se-sw-br))
417
+ var(--_sf-hr-sw-sd, prepareMediaVariable(--_ctm-dn-im-se-dt-se-sw-sd))
418
+ var(--_sf-hr-sw-cr, prepareMediaVariable(--_ctm-dn-im-se-dt-se-sw-cr));
419
+ //
420
+ &[data-selected="true"] {
421
+ // `.option` only ever declared padding from the hover variable, so
422
+ // `--_sf-sd-pg` was set by the selected-state block but never read and
423
+ // Selected > Padding did nothing.
424
+ padding: var(--_sf-sd-pg, prepareMediaVariable(--_ctm-dn-im-se-dt-se-pg));
425
+ border-color: var(--_sf-sd-br-cr, prepareMediaVariable(--_ctm-dn-im-se-dt-se-br-cr));
426
+
427
+ background-color: var(--_sf-sd-bd-cr, prepareMediaVariable(--_ctm-dn-im-se-dt-se-bd-cr));
428
+ border-style: var(--_sf-sd-br-se, prepareMediaVariable(--_ctm-dn-im-se-dt-se-br-se));
429
+ border-width: var(--_sf-sd-br-wh, prepareMediaVariable(--_ctm-dn-im-se-dt-se-br-wh));
430
+ border-radius: var(--_sf-sd-br-rs, prepareMediaVariable(--_ctm-dn-im-se-dt-se-br-rs));
431
+ box-shadow: var(--_sf-sd-sw-ae, prepareMediaVariable(--_ctm-dn-im-se-dt-se-sw-ae))
432
+ var(--_sf-sd-sw-br, prepareMediaVariable(--_ctm-dn-im-se-dt-se-sw-br))
433
+ var(--_sf-sd-sw-sd, prepareMediaVariable(--_ctm-dn-im-se-dt-se-sw-sd))
434
+ var(--_sf-sd-sw-cr, prepareMediaVariable(--_ctm-dn-im-se-dt-se-sw-cr));
435
+ .language__name {
436
+ color: var(--_sf-sd-cr, prepareMediaVariable(--_ctm-dn-im-se-dt-se-cr));
437
+ font-family: var(--_sf-sd-ft-fy, prepareMediaVariable(--_ctm-dn-im-se-dt-se-ft-fy));
438
+ font-size: var(--_sf-sd-ft-se, prepareMediaVariable(--_ctm-dn-im-se-dt-se-ft-se));
439
+ font-weight: var(--_sf-sd-ft-wt, prepareMediaVariable(--_ctm-dn-im-se-dt-se-ft-wt));
440
+ font-style: var(
441
+ --_sf-sd-ft-se-ic,
442
+ prepareMediaVariable(--_ctm-dn-im-se-dt-se-ft-se-ic)
443
+ );
444
+ text-align: var(--_sf-sd-tt-an, prepareMediaVariable(--_ctm-dn-im-se-dt-se-tt-an));
445
+ letter-spacing: var(--_sf-sd-lr-sg, prepareMediaVariable(--_ctm-dn-im-se-dt-se-lr-sg));
446
+ line-height: var(--_sf-sd-le-ht, prepareMediaVariable(--_ctm-dn-im-se-dt-se-le-ht-dc));
447
+ text-decoration: var(--_sf-sd-ue, prepareMediaVariable(--_ctm-dn-im-se-dt-se-ue));
448
+ text-transform: var(--_sf-sd-tt-tm, prepareMediaVariable(--_ctm-dn-im-se-dt-se-tt-tm));
449
+ word-wrap: var(
450
+ --_sf-sd-wd-wp,
451
+ prepareMediaVariable(--_ctm-dn-im-se-dt-se-wd-wp, normal)
452
+ );
453
+ word-break: var(
454
+ --_sf-sd-wd-bk,
455
+ prepareMediaVariable(--_ctm-dn-im-se-dt-se-wd-bk, normal)
456
+ );
457
+ -webkit-line-clamp: var(--_sf-it-clamp-sd, var(--_sf-it-clamp, 1));
458
+ white-space: var(--_sf-it-ws-sd, var(--_sf-it-ws, nowrap));
459
+ }
460
+ }
461
+ }
462
+ &[data-flex-direction="column"] {
463
+ .language__name {
464
+ white-space: unset;
465
+ }
466
+ }
467
+ &[data-flex-direction="row"] {
468
+ overflow-x: auto;
469
+ }
470
+ // Matched when *either* state wants a divider, so the rules below exist and each
471
+ // state can then decide visibility for itself — gating on the default state alone
472
+ // meant a divider switched on only for hover could never appear.
473
+ &:is([data-show-divider="true"], [data-show-divider-hover="true"]) {
474
+ // Divider weight/colour resolve through these two, so the hover block below
475
+ // only has to re-point them. Previously the declarations read the default
476
+ // state's variables directly and the Widget Style > Hover > Divider controls
477
+ // wrote to `--_ctm-dn-wt-se-hr-se-dr-*`, which nothing ever read.
478
+ --_sf-dr-wt: var(
479
+ --_ctm-mob-dn-wt-se-dt-se-dr-wt,
480
+ var(--_ctm-tab-dn-wt-se-dt-se-dr-wt, var(--_ctm-dn-wt-se-dt-se-dr-wt))
481
+ );
482
+ --_sf-dr-cr: var(
483
+ --_ctm-mob-dn-wt-se-dt-se-dr-cr,
484
+ var(--_ctm-tab-dn-wt-se-dt-se-dr-cr, var(--_ctm-dn-wt-se-dt-se-dr-cr))
485
+ );
486
+
487
+ // Divider lives under Widget Style, so its hover state is the *widget* being
488
+ // hovered, not an individual option. Scoping this to `.option:hover` only
489
+ // repainted the hovered option's own divider, which read as "not working".
490
+ &:hover {
491
+ --_sf-dr-wt: var(
492
+ --_ctm-mob-dn-wt-se-hr-se-dr-wt,
493
+ var(
494
+ --_ctm-tab-dn-wt-se-hr-se-dr-wt,
495
+ var(
496
+ --_ctm-dn-wt-se-hr-se-dr-wt,
497
+ var(
498
+ --_ctm-mob-dn-wt-se-dt-se-dr-wt,
499
+ var(--_ctm-tab-dn-wt-se-dt-se-dr-wt, var(--_ctm-dn-wt-se-dt-se-dr-wt))
500
+ )
501
+ )
502
+ )
503
+ );
504
+ --_sf-dr-cr: var(
505
+ --_ctm-mob-dn-wt-se-hr-se-dr-cr,
506
+ var(
507
+ --_ctm-tab-dn-wt-se-hr-se-dr-cr,
508
+ var(
509
+ --_ctm-dn-wt-se-hr-se-dr-cr,
510
+ var(
511
+ --_ctm-mob-dn-wt-se-dt-se-dr-cr,
512
+ var(--_ctm-tab-dn-wt-se-dt-se-dr-cr, var(--_ctm-dn-wt-se-dt-se-dr-cr))
513
+ )
514
+ )
515
+ )
516
+ );
517
+ }
518
+
519
+ // Both states also collapse the weight when their own switch is off, so the space
520
+ // reserved below matches whether the divider is actually painted. Mirrors the
521
+ // `display: none` rules at the end of this block.
522
+ &[data-show-divider="false"]:not(:hover),
523
+ &[data-show-divider-hover="false"]:hover {
524
+ --_sf-dr-wt: 0px;
525
+ }
526
+
527
+ // The divider is a pseudo-element, so it takes no space of its own: at a weight
528
+ // wider than half the item gap it used to grow back over the option's label.
529
+ // `dividerGapReserve` gives the option that weight as margin and
530
+ // `dividerGapOffset` pushes the divider into it, so the rule stays inside the gap
531
+ // whatever the weight. `--_sf-dr-wt` rather than the raw variables so the reserve
532
+ // follows the hover weight the same way the divider itself does.
533
+ &[data-flex-direction="row"] {
534
+ .option:not(:last-child) {
535
+ @include dividerGapReserve(var(--_sf-dr-wt), right);
536
+ }
537
+ .option:not(:last-child)::before {
538
+ content: "";
539
+ position: absolute;
540
+ top: 0;
541
+ bottom: 0; /* For full height divider */
542
+ right: dividerGapOffset(
543
+ var(--_ctm-mob-lt-gp-bn-is, var(--_ctm-tab-lt-gp-bn-is, var(--_ctm-lt-gp-bn-is))),
544
+ var(--_sf-dr-wt)
545
+ );
546
+ width: var(--_sf-dr-wt); /* Divider thickness */
547
+ background-color: var(--_sf-dr-cr); /* Divider color */
548
+ }
549
+ }
550
+ &[data-flex-direction="column"] {
551
+ .option:not(:last-child) {
552
+ @include dividerGapReserve(var(--_sf-dr-wt));
553
+ }
554
+ .option:not(:last-child)::before {
555
+ content: "";
556
+ position: absolute;
557
+ left: 0;
558
+ right: 0;
559
+ bottom: dividerGapOffset(
560
+ var(--_ctm-mob-lt-gp-bn-is, var(--_ctm-tab-lt-gp-bn-is, var(--_ctm-lt-gp-bn-is))),
561
+ var(--_sf-dr-wt)
562
+ );
563
+ height: var(--_sf-dr-wt);
564
+ background-color: var(--_sf-dr-cr);
565
+ }
566
+ }
567
+
568
+ // Each state's own Show Divider switch. Declared last so they win over the
569
+ // `::before` rules above, and split by state so turning the divider off for
570
+ // hover only affects the hovered widget.
571
+ &[data-show-divider="false"] .option::before {
572
+ display: none;
573
+ }
574
+ &[data-show-divider-hover="false"]:hover .option::before {
575
+ display: none;
576
+ }
577
+ &[data-show-divider-hover="true"]:hover .option:not(:last-child)::before {
578
+ display: block;
579
+ }
580
+ }
581
+
582
+ .option_select {
583
+ width: 100%;
584
+ display: flex;
585
+ align-items: center;
586
+ justify-content: var(--_ctm-mob-lt-at, var(--_ctm-tab-lt-at, var(--_ctm-lt-at)));
587
+
588
+ position: relative;
589
+ min-width: 0;
590
+
591
+ // Widget Style > padding (was Widget Placeholder Text > padding). It used to sit
592
+ // on `.value__selected__new` only, which is the *empty* state — as soon as an
593
+ // option was selected the markup switched to this branch and the padding
594
+ // appeared to do nothing.
595
+ padding: var(--_sf-wt-pg, prepareMediaVariable(--_ctm-dn-wt-pr-tt-pg));
596
+ gap: var(--_ctm-mob-lt-im-sg, var(--_ctm-tab-lt-im-sg, var(--_ctm-lt-im-sg)));
597
+ .language__name {
598
+ width: 100%;
599
+ // Widget Style's per-state values first; the retired Widget Placeholder Text
600
+ // variables remain only as a fallback for pages saved before the two merged.
601
+ font-family: var(--_sf-wt-ft-fy, prepareMediaVariable(--_ctm-dn-wt-pr-tt-ft-fy));
602
+ font-size: var(--_sf-wt-ft-se, prepareMediaVariable(--_ctm-dn-wt-pr-tt-ft-se));
603
+ color: var(--_sf-wt-cr, prepareMediaVariable(--_ctm-dn-wt-pr-tt-cr));
604
+ font-weight: var(--_sf-wt-ft-wt, prepareMediaVariable(--_ctm-dn-wt-pr-tt-ft-wt));
605
+ text-decoration: var(--_sf-wt-ue, prepareMediaVariable(--_ctm-dn-wt-pr-tt-ue));
606
+ font-style: var(--_sf-wt-ft-se-ic, prepareMediaVariable(--_ctm-dn-wt-pr-tt-ft-se-ic));
607
+ text-align: var(--_sf-wt-tt-an, prepareMediaVariable(--_ctm-dn-wt-pr-tt-tt-an));
608
+ letter-spacing: var(--_sf-wt-lr-sg, prepareMediaVariable(--_ctm-dn-wt-pr-tt-lr-sg));
609
+ line-height: var(--_sf-wt-le-ht, prepareMediaVariable(--_ctm-dn-wt-pr-tt-le-ht));
610
+ text-transform: var(--_sf-wt-tt-tm, prepareMediaVariable(--_ctm-dn-wt-pr-tt-tt-tm));
611
+ word-wrap: var(--_sf-wt-wd-wp, prepareMediaVariable(--_ctm-dn-wt-pr-tt-wd-wp, normal));
612
+ word-break: var(--_sf-wt-wd-bk, prepareMediaVariable(--_ctm-dn-wt-pr-tt-wd-bk, normal));
613
+ }
614
+ }
615
+
616
+ .language__name {
617
+ color: var(--_sf-hr-cr, prepareMediaVariable(--_ctm-dn-im-se-dt-se-cr));
618
+ font-family: var(--_sf-hr-ft-fy, prepareMediaVariable(--_ctm-dn-im-se-dt-se-ft-fy));
619
+ &.flex__overflow {
620
+ white-space: normal;
621
+ @include restrictToLinesShow(#{var(--_sf-line-clamp, 1)});
622
+ }
623
+ font-size: var(--_sf-hr-ft-se, prepareMediaVariable(--_ctm-dn-im-se-dt-se-ft-se));
624
+ font-weight: var(--_sf-hr-ft-wt, prepareMediaVariable(--_ctm-dn-im-se-dt-se-ft-wt));
625
+ font-style: var(--_sf-hr-ft-se-ic, prepareMediaVariable(--_ctm-dn-im-se-dt-se-ft-se-ic));
626
+ text-align: var(--_sf-hr-tt-an, prepareMediaVariable(--_ctm-dn-im-se-dt-se-tt-an));
627
+ letter-spacing: var(--_sf-hr-lr-sg, prepareMediaVariable(--_ctm-dn-im-se-dt-se-lr-sg));
628
+ line-height: var(--_sf-hr-le-ht, prepareMediaVariable(--_ctm-dn-im-se-dt-se-le-ht));
629
+ text-decoration: var(--_sf-hr-ue, prepareMediaVariable(--_ctm-dn-im-se-dt-se-ue));
630
+ text-transform: var(--_sf-hr-tt-tm, prepareMediaVariable(--_ctm-dn-im-se-dt-se-tt-tm));
631
+ word-wrap: var(--_sf-hr-wd-wp, prepareMediaVariable(--_ctm-dn-im-se-dt-se-wd-wp, normal));
632
+ word-break: var(--_sf-hr-wd-bk, prepareMediaVariable(--_ctm-dn-im-se-dt-se-wd-bk, normal));
633
+
634
+ // text-align only has room to act once the label owns the line box — as a
635
+ // content-sized flex item it hugged its text, so every alignment looked the
636
+ // same. `min-width: 0` keeps it shrinkable so a larger font size truncates
637
+ // instead of overflowing the widget.
638
+ flex: 1 1 auto;
639
+ min-width: 0;
640
+ max-width: 100%;
641
+
642
+ // Text Overflow is driven entirely by the two clamp custom properties the
643
+ // element sets per interaction state (see LanguageMenuElement/DropdownComponent):
644
+ // off resolves to 1 nowrap line, on to N wrapped lines. Keeping the box display
645
+ // constant means the hover and selected rules below only have to swap the pair,
646
+ // which a marker class could not express.
647
+ display: -webkit-box;
648
+ -webkit-box-orient: vertical;
649
+ overflow: hidden;
650
+ text-overflow: ellipsis;
651
+ -webkit-line-clamp: var(--_sf-it-clamp, 1);
652
+ white-space: var(--_sf-it-ws, nowrap);
653
+ }
654
+
655
+ .option:hover .language__name {
656
+ -webkit-line-clamp: var(--_sf-it-clamp-hr, var(--_sf-it-clamp, 1));
657
+ white-space: var(--_sf-it-ws-hr, var(--_sf-it-ws, nowrap));
658
+ }
659
+
660
+ //Dropdown
661
+ .value__selected__new {
662
+ width: 100%;
663
+ // padding: 8px 12px;
664
+ // text-align: left;
665
+ // Same order as `.option_select .language__name` above: Widget Style's per-state
666
+ // typography first, Widget Placeholder Text second. This is the empty branch —
667
+ // the two swap in the markup as soon as an option is picked, so they have to
668
+ // resolve identically or the text would jump on first selection.
669
+ font-family: var(--_sf-wt-ft-fy, prepareMediaVariable(--_ctm-dn-wt-pr-tt-ft-fy));
670
+ &.flex__overflow {
671
+ white-space: normal;
672
+ @include restrictToLinesShow(#{var(--_sf-line-clamp, 1)});
673
+ }
674
+ font-size: var(--_sf-wt-ft-se, prepareMediaVariable(--_ctm-dn-wt-pr-tt-ft-se));
675
+ color: var(--_sf-wt-cr, prepareMediaVariable(--_ctm-dn-wt-pr-tt-cr));
676
+ // color: var(--_gray-600);
677
+ font-weight: var(--_sf-wt-ft-wt, prepareMediaVariable(--_ctm-dn-wt-pr-tt-ft-wt));
678
+ text-decoration: var(--_sf-wt-ue, prepareMediaVariable(--_ctm-dn-wt-pr-tt-ue));
679
+ font-style: var(--_sf-wt-ft-se-ic, prepareMediaVariable(--_ctm-dn-wt-pr-tt-ft-se-ic));
680
+ text-align: var(--_sf-wt-tt-an, prepareMediaVariable(--_ctm-dn-wt-pr-tt-tt-an));
681
+ letter-spacing: var(--_sf-wt-lr-sg, prepareMediaVariable(--_ctm-dn-wt-pr-tt-lr-sg));
682
+ line-height: var(--_sf-wt-le-ht, prepareMediaVariable(--_ctm-dn-wt-pr-tt-le-ht));
683
+ padding: var(--_sf-wt-pg, prepareMediaVariable(--_ctm-dn-wt-pr-tt-pg));
684
+ text-transform: var(--_sf-wt-tt-tm, prepareMediaVariable(--_ctm-dn-wt-pr-tt-tt-tm));
685
+ word-wrap: var(--_sf-wt-wd-wp, prepareMediaVariable(--_ctm-dn-wt-pr-tt-wd-wp, normal));
686
+ word-break: var(--_sf-wt-wd-bk, prepareMediaVariable(--_ctm-dn-wt-pr-tt-wd-bk, normal));
687
+ min-width: 0;
688
+ display: -webkit-box;
689
+ -webkit-box-orient: vertical;
690
+ overflow: hidden;
691
+ text-overflow: ellipsis;
692
+ -webkit-line-clamp: var(--_sf-it-clamp, 1);
693
+ white-space: var(--_sf-it-ws, nowrap);
694
+ }
695
+ .est__dropdown__main {
696
+ position: relative;
697
+ width: 100%;
698
+ margin-top: 0px;
699
+ label {
700
+ font-size: 14px;
701
+ color: var(--_gray-700);
702
+ margin-bottom: 8px;
703
+ display: block;
704
+ }
705
+
706
+ .est__dropdown {
707
+ cursor: pointer;
708
+ position: relative;
709
+ color: var(--_gray-700);
710
+
711
+ // border-radius: 6px;
712
+ // background-color: #fff;
713
+ display: flex;
714
+ justify-content: space-between;
715
+ align-items: center;
716
+ padding: prepareMediaVariable(--_ctm-dn-dn-se-pg);
717
+
718
+ width: 100%;
719
+
720
+ .dropdown__button__wrapper {
721
+ width: 100%;
722
+ // Widget Style > Placeholder Text, default state. Published here rather than
723
+ // on the text nodes because the hover state below has to override it, and
724
+ // `.value__selected__new` / `.option_select .language__name` are two separate
725
+ // branches of the same markup.
726
+ @include widgetStateFont(dt-se);
727
+ padding: var(--_ctm-mob-lt-im-pg, var(--_ctm-tab-lt-im-pg, var(--_ctm-lt-im-pg)));
728
+ background-color: var(
729
+ --_ctm-mob-dn-wt-se-dt-se-bd-cr,
730
+ var(--_ctm-tab-dn-wt-se-dt-se-bd-cr, var(--_ctm-dn-wt-se-dt-se-bd-cr))
731
+ );
732
+
733
+ border-color: var(
734
+ --_ctm-mob-dn-wt-se-dt-se-br-cr,
735
+ var(--_ctm-tab-dn-wt-se-dt-se-br-cr, var(--_ctm-dn-wt-se-dt-se-br-cr))
736
+ );
737
+
738
+ border-style: var(
739
+ --_ctm-mob-dn-wt-se-dt-se-br-se,
740
+ var(--_ctm-tab-dn-wt-se-dt-se-br-se, var(--_ctm-dn-wt-se-dt-se-br-se))
741
+ );
742
+
743
+ border-width: var(
744
+ --_ctm-mob-dn-wt-se-dt-se-br-wh,
745
+ var(--_ctm-tab-dn-wt-se-dt-se-br-wh, var(--_ctm-dn-wt-se-dt-se-br-wh))
746
+ );
747
+
748
+ border-radius: var(
749
+ --_ctm-mob-dn-wt-se-dt-se-br-rs,
750
+ var(--_ctm-tab-dn-wt-se-dt-se-br-rs, var(--_ctm-dn-wt-se-dt-se-br-rs))
751
+ );
752
+
753
+ box-shadow: var(
754
+ --_show-shadow,
755
+ var(
756
+ --_ctm-mob-dn-wt-se-dt-se-sw-ae,
757
+ var(--_ctm-tab-dn-wt-se-dt-se-sw-ae, var(--_ctm-dn-wt-se-dt-se-sw-ae))
758
+ )
759
+ var(
760
+ --_ctm-mob-dn-wt-se-dt-se-sw-br,
761
+ var(--_ctm-tab-dn-wt-se-dt-se-sw-br, var(--_ctm-dn-wt-se-dt-se-sw-br))
762
+ )
763
+ var(
764
+ --_ctm-mob-dn-wt-se-dt-se-sw-sd,
765
+ var(--_ctm-tab-dn-wt-se-dt-se-sw-sd, var(--_ctm-dn-wt-se-dt-se-sw-sd))
766
+ )
767
+ var(
768
+ --_ctm-mob-dn-wt-se-dt-se-sw-cr,
769
+ var(--_ctm-tab-dn-wt-se-dt-se-sw-cr, var(--_ctm-dn-wt-se-dt-se-sw-cr))
770
+ )
771
+ );
772
+ &:hover {
773
+ // Hover state, falling back to the default state per property so a widget
774
+ // that only sets a hover colour keeps the default font, size and the rest.
775
+ @include widgetStateFont(hr-se, dt-se);
776
+ background-color: var(
777
+ --_ctm-mob-dn-wt-se-hr-se-bd-cr,
778
+ var(--_ctm-tab-dn-wt-se-hr-se-bd-cr, var(--_ctm-dn-wt-se-hr-se-bd-cr))
779
+ );
780
+
781
+ border-color: var(
782
+ --_ctm-mob-dn-wt-se-hr-se-br-cr,
783
+ var(--_ctm-tab-dn-wt-se-hr-se-br-cr, var(--_ctm-dn-wt-se-hr-se-br-cr))
784
+ );
785
+
786
+ border-style: var(
787
+ --_ctm-mob-dn-wt-se-hr-se-br-se,
788
+ var(--_ctm-tab-dn-wt-se-hr-se-br-se, var(--_ctm-dn-wt-se-hr-se-br-se))
789
+ );
790
+
791
+ border-width: var(
792
+ --_ctm-mob-dn-wt-se-hr-se-br-wh,
793
+ var(--_ctm-tab-dn-wt-se-hr-se-br-wh, var(--_ctm-dn-wt-se-hr-se-br-wh))
794
+ );
795
+
796
+ border-radius: var(
797
+ --_ctm-mob-dn-wt-se-hr-se-br-rs,
798
+ var(--_ctm-tab-dn-wt-se-hr-se-br-rs, var(--_ctm-dn-wt-se-hr-se-br-rs))
799
+ );
800
+
801
+ box-shadow: var(
802
+ --_show-shadow,
803
+ var(
804
+ --_ctm-mob-dn-wt-se-hr-se-sw-ae,
805
+ var(--_ctm-tab-dn-wt-se-hr-se-sw-ae, var(--_ctm-dn-wt-se-hr-se-sw-ae))
806
+ )
807
+ var(
808
+ --_ctm-mob-dn-wt-se-hr-se-sw-br,
809
+ var(--_ctm-tab-dn-wt-se-hr-se-sw-br, var(--_ctm-dn-wt-se-hr-se-sw-br))
810
+ )
811
+ var(
812
+ --_ctm-mob-dn-wt-se-hr-se-sw-sd,
813
+ var(--_ctm-tab-dn-wt-se-hr-se-sw-sd, var(--_ctm-dn-wt-se-hr-se-sw-sd))
814
+ )
815
+ var(
816
+ --_ctm-mob-dn-wt-se-hr-se-sw-cr,
817
+ var(--_ctm-tab-dn-wt-se-hr-se-sw-cr, var(--_ctm-dn-wt-se-hr-se-sw-cr))
818
+ )
819
+ );
820
+ }
821
+ .option_select {
822
+ // Truncation is handled by `.language__name` inside, which knows whether
823
+ // Text Overflow is on and how many lines to clamp to. A `white-space:
824
+ // nowrap` here inherited down and defeated the multi-line clamp.
825
+ overflow: hidden;
826
+ }
827
+
828
+ // Widget Style > Hover > Text Overflow. The clamp pair reaches the DOM as an
829
+ // inline style (it is `controls`, not CSS), so hover cannot be expressed by
830
+ // the variable cascade above — the element publishes both pairs on the label
831
+ // and this rule chooses the hovered one, falling back to the default pair.
832
+ // Safe to scope on the wrapper: the options list is its sibling, not a
833
+ // descendant, so option labels keep their own Item Style clamp.
834
+ &:hover {
835
+ .language__name,
836
+ .value__selected__new {
837
+ -webkit-line-clamp: var(--_sf-it-clamp-hr, var(--_sf-it-clamp, 1));
838
+ white-space: var(--_sf-it-ws-hr, var(--_sf-it-ws, nowrap));
839
+ }
840
+ }
841
+ }
842
+
843
+ .est__dropdown__button {
844
+ display: flex;
845
+ align-items: center;
846
+ width: 100%;
847
+ position: relative;
848
+ gap: 8px;
849
+ // Keeps the label shrinkable so a larger font size truncates instead of
850
+ // pushing the toggle icon out of the widget.
851
+ min-width: 0;
852
+
853
+ & > .option_select,
854
+ & > .value__selected__new {
855
+ flex: 1 1 auto;
856
+ min-width: 0;
857
+ }
858
+ }
859
+
860
+ .est__dropdown__icon {
861
+ // position: absolute;
862
+ // right: 0;
863
+ transition: transform 0.4s ease-in-out;
864
+ display: flex;
865
+ &.rotate__180 {
866
+ transform: rotate(180deg);
867
+ }
868
+ &.rotate__0 {
869
+ transform: rotate(0deg);
870
+ }
871
+ width: prepareMediaVariable(--_ctm-dn-te-in-in-se);
872
+ height: prepareMediaVariable(--_ctm-dn-te-in-in-se);
873
+
874
+ svg {
875
+ width: prepareMediaVariable(--_ctm-dn-te-in-in-se);
876
+ height: prepareMediaVariable(--_ctm-dn-te-in-in-se);
877
+
878
+ path {
879
+ stroke: var(
880
+ --_ctm-mob-dn-te-in-in-c1,
881
+ var(--_ctm-tab-dn-te-in-cr, var(--_ctm-dn-te-in-in-c1))
882
+ );
883
+ // Overrides the stroke-width presentation attribute baked into the icon markup.
884
+ stroke-width: prepareMediaVariable(--_ctm-dn-te-in-se-wh, 1.25);
885
+ }
886
+ }
887
+ }
888
+
889
+ .list {
890
+ flex-direction: column;
891
+ border: 1px solid var(--_gray-200);
892
+ border-radius: 6px;
893
+ position: absolute;
894
+ top: 100%;
895
+ left: 0;
896
+ width: 100%;
897
+ padding: 4px;
898
+ background-color: prepareMediaVariable(--_ctm-dn-wt-dn-bd-cr);
899
+ border-radius: prepareMediaVariable(--_ctm-dn-wt-dn-br-rs);
900
+ z-index: var(--_higher-zIndex);
901
+ max-height: 200px;
902
+ overflow-y: auto;
903
+ border-width: prepareMediaVariable(--_ctm-dn-wt-dn-br-wh);
904
+ border-style: prepareMediaVariable(--_ctm-dn-wt-dn-br-se);
905
+ border-color: prepareMediaVariable(--_ctm-dn-wt-dn-br-cr);
906
+ // margin-top: var(
907
+ // --_ctm-mob-lt-gp-bn-is,
908
+ // var(--_ctm-tab-lt-gp-bn-is, var(--_ctm-lt-gp-bn-is))
909
+ // );
910
+ gap: var(--_ctm-mob-lt-gp-bn-is, var(--_ctm-tab-lt-gp-bn-is, var(--_ctm-lt-gp-bn-is)));
911
+ // padding: 2px;
912
+ // border-radius: 4px;
913
+ // border: 1px solid var(--_gray-300);
914
+ box-shadow: prepareMediaVariable(--_ctm-dn-wt-dn-sw-ae)
915
+ prepareMediaVariable(--_ctm-dn-wt-dn-sw-br)
916
+ prepareMediaVariable(--_ctm-dn-wt-dn-sw-sd)
917
+ prepareMediaVariable(--_ctm-dn-wt-dn-sw-cr);
918
+
919
+ &.top {
920
+ bottom: 100%;
921
+ top: auto;
922
+ }
923
+
924
+ .option {
925
+ cursor: pointer;
926
+ // &:not(:last-child) {
927
+ // margin-bottom: 2px;
928
+ // }
929
+ // padding: 4px;
930
+ // &:hover {
931
+ // background: var(--_gray-100);
932
+ // border-radius: 4px;
933
+ // }
934
+ }
935
+ &.show__panel {
936
+ animation: slideUp 0.4s ease-in-out forwards;
937
+ }
938
+
939
+ &.hide__panel {
940
+ animation: slideDown 0.4s ease-in-out forwards;
941
+ pointer-events: none;
942
+ }
943
+ }
944
+ }
945
+ }
946
+ }
947
+ }
948
+ }