@sc-360-v2/storefront-cms-library 0.5.70 → 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 (155) 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/image-for-product.scss +21 -21
  66. package/dist/image-temp.scss +203 -203
  67. package/dist/item-stock.scss +93 -93
  68. package/dist/kitDetails.scss +5739 -5739
  69. package/dist/kits.scss +305 -305
  70. package/dist/language-selector.scss +948 -948
  71. package/dist/last-x-orders.scss +285 -285
  72. package/dist/layouter-item.scss +141 -141
  73. package/dist/layouter-pro-item.scss +139 -139
  74. package/dist/layouter-pro.scss +134 -134
  75. package/dist/layouter.scss +491 -491
  76. package/dist/light-box-v2.scss +155 -155
  77. package/dist/lightbox.scss +78 -78
  78. package/dist/loader.scss +37 -37
  79. package/dist/login.scss +29 -11
  80. package/dist/map.scss +1359 -1359
  81. package/dist/marchandiserSets.scss +141 -141
  82. package/dist/mega-menu-container.scss +152 -152
  83. package/dist/menu-item.scss +19 -19
  84. package/dist/menu-v2.scss +999 -999
  85. package/dist/menu.scss +174 -174
  86. package/dist/multi-select-dropdown.scss +316 -316
  87. package/dist/my-templates.scss +477 -477
  88. package/dist/my-wishlist.scss +27 -27
  89. package/dist/option-bar.scss +886 -886
  90. package/dist/order-processing.scss +61 -61
  91. package/dist/order-status.scss +2187 -2187
  92. package/dist/overflow-module.scss +63 -63
  93. package/dist/past-orders.scss +1039 -1039
  94. package/dist/payment-methods.scss +307 -307
  95. package/dist/phone-input.scss +208 -208
  96. package/dist/pickup-locations.scss +1359 -1359
  97. package/dist/position-module.scss +95 -95
  98. package/dist/prefix-list.scss +86 -86
  99. package/dist/product-actions.scss +2872 -2872
  100. package/dist/product-basic-elements.scss +600 -600
  101. package/dist/product-customizations.scss +155 -155
  102. package/dist/product-highlights.scss +348 -348
  103. package/dist/product-image-allocation.scss +1477 -1477
  104. package/dist/product-inventory.scss +1621 -1621
  105. package/dist/product-labels.scss +265 -265
  106. package/dist/product-options.scss +1444 -1444
  107. package/dist/product-price.scss +3392 -3392
  108. package/dist/product-promotions.scss +3224 -3224
  109. package/dist/product-sizechart.scss +1921 -1921
  110. package/dist/product.scss +140 -140
  111. package/dist/profile.scss +824 -824
  112. package/dist/quantity-selector.scss +1074 -1074
  113. package/dist/quick-inventory-check.scss +285 -285
  114. package/dist/quick-links.scss +627 -627
  115. package/dist/quota-details.scss +526 -526
  116. package/dist/quotes.scss +847 -847
  117. package/dist/repeater-embla-controls.scss +211 -211
  118. package/dist/repeater-grid-toggle.scss +206 -206
  119. package/dist/repeater-item.scss +152 -152
  120. package/dist/repeater.scss +946 -946
  121. package/dist/request-for-quotes.scss +841 -841
  122. package/dist/responsive-behaviour.scss +29 -29
  123. package/dist/rfqs.scss +861 -861
  124. package/dist/scroll.scss +414 -414
  125. package/dist/search-results-heading.scss +309 -309
  126. package/dist/search.scss +689 -689
  127. package/dist/section.scss +276 -276
  128. package/dist/shareCartSideBar.scss +254 -254
  129. package/dist/shipping-estimator.scss +41 -41
  130. package/dist/shipping-payments.scss +2518 -2518
  131. package/dist/simple-list.scss +338 -338
  132. package/dist/skeleton.scss +64 -64
  133. package/dist/spotlight.scss +1706 -1706
  134. package/dist/stack.scss +171 -171
  135. package/dist/static-global.scss +292 -292
  136. package/dist/static-text.scss +52 -52
  137. package/dist/stockStatus.scss +70 -70
  138. package/dist/store-locations.scss +1592 -1592
  139. package/dist/sub-category.scss +74 -74
  140. package/dist/submit-quote.scss +275 -275
  141. package/dist/tab-container-item.scss +80 -80
  142. package/dist/tab-container.scss +141 -141
  143. package/dist/table.scss +9 -0
  144. package/dist/tabs.scss +440 -440
  145. package/dist/text-temp.scss +109 -109
  146. package/dist/theme-classes.scss +421 -421
  147. package/dist/toaster.scss +392 -392
  148. package/dist/toggle-button.scss +32 -32
  149. package/dist/transform-properties-module.scss +20 -20
  150. package/dist/types/builder/tools/element-edit/login.d.ts +1 -0
  151. package/dist/types/builder/tools/element-edit/resetPassword.d.ts +1 -0
  152. package/dist/user-elements.scss +2896 -2896
  153. package/dist/widget.scss +153 -153
  154. package/dist/wishlist-overlay.scss +48 -48
  155. 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
+ }