@sc-360-v2/storefront-cms-library 0.5.70 → 0.5.72

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (141) 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/bundleDetails.scss +6189 -6189
  16. package/dist/buy-for-tab-container.scss +141 -141
  17. package/dist/buy-for-tab.scss +649 -649
  18. package/dist/buy-for-tabs-container-item.scss +80 -80
  19. package/dist/buyForPopup.scss +339 -339
  20. package/dist/cart-details.scss +3986 -3986
  21. package/dist/cart-products-sidebar.scss +211 -211
  22. package/dist/cart-wrapper.scss +127 -127
  23. package/dist/cartDropdownOverlay.scss +653 -653
  24. package/dist/cartGrouping.scss +89 -89
  25. package/dist/category-groups-element.scss +739 -739
  26. package/dist/category-groups-quota-details.scss +626 -626
  27. package/dist/category.scss +137 -137
  28. package/dist/categoryDetails.scss +61 -61
  29. package/dist/categoryWidget.scss +34 -34
  30. package/dist/checkbox-radio.scss +124 -124
  31. package/dist/code-temp.scss +59 -59
  32. package/dist/colorpicker_v2.scss +62 -62
  33. package/dist/common-element.scss +35 -35
  34. package/dist/confirm-modal.scss +370 -370
  35. package/dist/confirmationModal.scss +139 -139
  36. package/dist/contact-us.scss +105 -105
  37. package/dist/container.scss +168 -168
  38. package/dist/custom-fonts.scss +100 -100
  39. package/dist/customization-tree.scss +162 -162
  40. package/dist/default-dropdown.scss +259 -259
  41. package/dist/dropdownTemplate.scss +699 -699
  42. package/dist/editCartItem.scss +110 -110
  43. package/dist/embed-temp.scss +73 -73
  44. package/dist/embroider-preview-element.scss +94 -94
  45. package/dist/embroider-template-1-v2.scss +1105 -1105
  46. package/dist/embroider-template-1.scss +501 -501
  47. package/dist/embroidery.scss +247 -247
  48. package/dist/employee-bulk-order.scss +4060 -4060
  49. package/dist/emtpy-templates.scss +165 -165
  50. package/dist/faq.scss +696 -696
  51. package/dist/fb-dropdown.scss +135 -135
  52. package/dist/filter-results.scss +361 -361
  53. package/dist/flex-text-editor.scss +271 -271
  54. package/dist/form-preview.scss +530 -530
  55. package/dist/global-styles.scss +198 -198
  56. package/dist/grid.scss +169 -169
  57. package/dist/icon-library.scss +78 -78
  58. package/dist/image-for-product.scss +21 -21
  59. package/dist/image-temp.scss +203 -203
  60. package/dist/item-stock.scss +93 -93
  61. package/dist/kitDetails.scss +5739 -5739
  62. package/dist/kits.scss +305 -305
  63. package/dist/language-selector.scss +948 -948
  64. package/dist/last-x-orders.scss +285 -285
  65. package/dist/layouter-item.scss +141 -141
  66. package/dist/layouter-pro-item.scss +139 -139
  67. package/dist/layouter-pro.scss +134 -134
  68. package/dist/layouter.scss +491 -491
  69. package/dist/light-box-v2.scss +155 -155
  70. package/dist/lightbox.scss +78 -78
  71. package/dist/loader.scss +37 -37
  72. package/dist/login.scss +29 -11
  73. package/dist/marchandiserSets.scss +141 -141
  74. package/dist/mega-menu-container.scss +152 -152
  75. package/dist/menu-item.scss +19 -19
  76. package/dist/menu-v2.scss +999 -999
  77. package/dist/menu.scss +174 -174
  78. package/dist/multi-select-dropdown.scss +316 -316
  79. package/dist/my-templates.scss +477 -477
  80. package/dist/my-wishlist.scss +27 -27
  81. package/dist/option-bar.scss +886 -886
  82. package/dist/order-processing.scss +61 -61
  83. package/dist/order-status.scss +74 -0
  84. package/dist/overflow-module.scss +63 -63
  85. package/dist/past-orders.scss +1039 -1039
  86. package/dist/payment-methods.scss +307 -307
  87. package/dist/phone-input.scss +208 -208
  88. package/dist/pickup-locations.scss +1359 -1359
  89. package/dist/position-module.scss +95 -95
  90. package/dist/prefix-list.scss +86 -86
  91. package/dist/product-actions.scss +2872 -2872
  92. package/dist/product-basic-elements.scss +600 -600
  93. package/dist/product-customizations.scss +155 -155
  94. package/dist/product-inventory.scss +1621 -1621
  95. package/dist/product-labels.scss +265 -265
  96. package/dist/product-price.scss +3392 -3392
  97. package/dist/product-promotions.scss +3224 -3224
  98. package/dist/product-sizechart.scss +1921 -1921
  99. package/dist/product.scss +140 -140
  100. package/dist/profile.scss +824 -824
  101. package/dist/quantity-selector.scss +1074 -1074
  102. package/dist/quick-inventory-check.scss +285 -285
  103. package/dist/quick-links.scss +627 -627
  104. package/dist/quota-details.scss +526 -526
  105. package/dist/repeater-embla-controls.scss +211 -211
  106. package/dist/repeater-grid-toggle.scss +206 -206
  107. package/dist/repeater-item.scss +152 -152
  108. package/dist/repeater.scss +946 -946
  109. package/dist/request-for-quotes.scss +841 -841
  110. package/dist/responsive-behaviour.scss +29 -29
  111. package/dist/rfqs.scss +861 -861
  112. package/dist/scroll.scss +414 -414
  113. package/dist/search.scss +689 -689
  114. package/dist/section.scss +276 -276
  115. package/dist/shareCartSideBar.scss +254 -254
  116. package/dist/shipping-estimator.scss +41 -41
  117. package/dist/shipping-payments.scss +2518 -2518
  118. package/dist/simple-list.scss +338 -338
  119. package/dist/skeleton.scss +64 -64
  120. package/dist/sort.scss +176 -176
  121. package/dist/spotlight.scss +1706 -1706
  122. package/dist/stack.scss +171 -171
  123. package/dist/static-global.scss +292 -292
  124. package/dist/static-text.scss +52 -52
  125. package/dist/stockStatus.scss +70 -70
  126. package/dist/store-locations.scss +1592 -1592
  127. package/dist/sub-category.scss +74 -74
  128. package/dist/submit-quote.scss +275 -275
  129. package/dist/tab-container-item.scss +80 -80
  130. package/dist/tab-container.scss +141 -141
  131. package/dist/table.scss +9 -0
  132. package/dist/tabs.scss +440 -440
  133. package/dist/text-temp.scss +109 -109
  134. package/dist/theme-classes.scss +421 -421
  135. package/dist/toaster.scss +392 -392
  136. package/dist/toggle-button.scss +32 -32
  137. package/dist/transform-properties-module.scss +20 -20
  138. package/dist/types/builder/tools/element-edit/login.d.ts +1 -0
  139. package/dist/types/builder/tools/element-edit/resetPassword.d.ts +1 -0
  140. package/dist/wishlist-overlay.scss +48 -48
  141. 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
+ }