@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
package/dist/map.scss CHANGED
@@ -1,1359 +1,1359 @@
1
- @use "sass:map";
2
- @use "sass:list";
3
- @use "./functions.scss" as *;
4
-
5
- // Tooltip tip + placement, ported from the image hotspot (hotspot.scss) so both
6
- // elements anchor their tooltip the same way.
7
- //
8
- // $ics is the tip's border-width: a 5px border with no content box makes a 10px
9
- // triangle whose apex sits at the centre of the 10px box.
10
- $ics: 5px;
11
- $tip: $ics * 2;
12
- $bm: 30px;
13
-
14
- // Gap between the pin's edge and the tooltip. Held in a custom property so it can
15
- // track the pin's real size at runtime (see --_sf-tp-gp below) instead of the flat
16
- // 20px this file used to assume — that offset ignored Pin Size, so the tip drifted
17
- // off the pin as soon as the pin was resized.
18
- $g: var(--_sf-tp-gp);
19
-
20
- $overflowSelector: ".flex__overflow";
21
-
22
- // Each entry places the tooltip relative to the pin's centre, then pins the tip to
23
- // the tooltip edge that faces the pin. Because $g already absorbs the pin's
24
- // half-size, every tip offset below is a constant: the triangle always spans exactly
25
- // the gap, base on the tooltip edge and apex on the pin edge. The previous table did
26
- // this with hand-tuned multipliers (1.25 / 1.75 / 2.05 / 2.7 …) and, in five entries,
27
- // a stray top-level border-color that painted over the tooltip's own border colour.
28
- $data: (
29
- // tooltip to the LEFT — tip on its right edge, pointing right
30
- leftTop: (
31
- transform: translate(calc(-100% - #{$g}), calc(-100% + #{$bm})),
32
- icon: (
33
- right: -#{$tip},
34
- bottom: calc(#{$bm} - #{$ics}),
35
- border-color: transparent transparent transparent var(--_ctm-dn-tp-dn-bd-cr),
36
- ),
37
- ),
38
- leftCenter: (
39
- transform: translate(calc(-100% - #{$g}), -50%),
40
- icon: (
41
- right: -#{$tip},
42
- top: calc(50% - #{$ics}),
43
- border-color: transparent transparent transparent var(--_ctm-dn-tp-dn-bd-cr),
44
- ),
45
- ),
46
- leftBottom: (
47
- transform: translate(calc(-100% - #{$g}), calc(0% - #{$bm})),
48
- icon: (
49
- right: -#{$tip},
50
- top: calc(#{$bm} - #{$ics}),
51
- border-color: transparent transparent transparent var(--_ctm-dn-tp-dn-bd-cr),
52
- ),
53
- ),
54
- // tooltip ABOVE — tip on its bottom edge, pointing down
55
- topLeft: (
56
- transform: translate(calc(-100% + #{$bm}), calc(-100% - #{$g})),
57
- icon: (
58
- bottom: -#{$tip},
59
- right: calc(#{$bm} - #{$ics}),
60
- border-color: var(--_ctm-dn-tp-dn-bd-cr) transparent transparent transparent,
61
- ),
62
- ),
63
- topCenter: (
64
- transform: translate(-50%, calc(-100% - #{$g})),
65
- icon: (
66
- bottom: -#{$tip},
67
- left: calc(50% - #{$ics}),
68
- border-color: var(--_ctm-dn-tp-dn-bd-cr) transparent transparent transparent,
69
- ),
70
- ),
71
- topRight: (
72
- transform: translate(calc(0% - #{$bm}), calc(-100% - #{$g})),
73
- icon: (
74
- bottom: -#{$tip},
75
- left: calc(#{$bm} - #{$ics}),
76
- border-color: var(--_ctm-dn-tp-dn-bd-cr) transparent transparent transparent,
77
- ),
78
- ),
79
- // tooltip to the RIGHT — tip on its left edge, pointing left
80
- rightTop: (
81
- transform: translate(#{$g}, calc(-100% + #{$bm})),
82
- icon: (
83
- left: -#{$tip},
84
- bottom: calc(#{$bm} - #{$ics}),
85
- border-color: transparent var(--_ctm-dn-tp-dn-bd-cr) transparent transparent,
86
- ),
87
- ),
88
- rightCenter: (
89
- transform: translate(#{$g}, -50%),
90
- icon: (
91
- left: -#{$tip},
92
- top: calc(50% - #{$ics}),
93
- border-color: transparent var(--_ctm-dn-tp-dn-bd-cr) transparent transparent,
94
- ),
95
- ),
96
- rightBottom: (
97
- transform: translate(#{$g}, calc(0% - #{$bm})),
98
- icon: (
99
- left: -#{$tip},
100
- top: calc(#{$bm} - #{$ics}),
101
- border-color: transparent var(--_ctm-dn-tp-dn-bd-cr) transparent transparent,
102
- ),
103
- ),
104
- // tooltip BELOW — tip on its top edge, pointing up
105
- bottomLeft: (
106
- transform: translate(calc(-100% + #{$bm}), #{$g}),
107
- icon: (
108
- top: -#{$tip},
109
- right: calc(#{$bm} - #{$ics}),
110
- border-color: transparent transparent var(--_ctm-dn-tp-dn-bd-cr) transparent,
111
- ),
112
- ),
113
- bottomCenter: (
114
- transform: translate(-50%, #{$g}),
115
- icon: (
116
- top: -#{$tip},
117
- left: calc(50% - #{$ics}),
118
- border-color: transparent transparent var(--_ctm-dn-tp-dn-bd-cr) transparent,
119
- ),
120
- ),
121
- bottomRight: (
122
- transform: translate(calc(0% - #{$bm}), #{$g}),
123
- icon: (
124
- top: -#{$tip},
125
- left: calc(#{$bm} - #{$ics}),
126
- border-color: transparent transparent var(--_ctm-dn-tp-dn-bd-cr) transparent,
127
- ),
128
- )
129
- );
130
-
131
- // Tooltip Design > Horizontal Alignment, translated for `text-align`. The control is
132
- // picked from the shared alignment list (flex-start | center | flex-end), and those
133
- // keywords mean nothing to text-align, so the two ends have to be mapped. The last two
134
- // entries are the pre-list values, still stored on pages saved before that fix.
135
- $tooltipTextAlign: (
136
- "flex-start": left,
137
- "center": center,
138
- "flex-end": right,
139
- "left": left,
140
- "right": right,
141
- );
142
-
143
- [data-div-type="element"] {
144
- &[data-element-type="map"] {
145
- // Half the pin as it actually renders, and the gap the tooltip keeps from the
146
- // pin's centre — both driven by the Pin Size control rather than a literal, so
147
- // the tip lands on the pin at any size. Unlike the image hotspot there is no
148
- // icon-only variant to handle: .hotspot is always sized by the pin size here,
149
- // with the icon drawn inside it.
150
- --_sf-ht-hf: calc(#{prepareMediaVariable(--_ctm-dn-pn-se-ht-se, 24px)} / 2);
151
- --_sf-tp-gp: calc(var(--_sf-ht-hf) + #{$ics});
152
-
153
- &[data-hotspot-position] {
154
- @each $key, $value in $data {
155
- &[data-hotspot-position="#{$key}"] {
156
- .hotspot__tooltip {
157
- @each $prop, $val in $value {
158
- @if ($prop != icon) {
159
- #{$prop}: #{$val};
160
- } @else {
161
- @each $key2, $value2 in $val {
162
- &:after {
163
- #{$key2}: #{$value2};
164
- }
165
- }
166
- }
167
- }
168
- }
169
- }
170
- }
171
- }
172
- }
173
- }
174
- [data-div-type="element"] {
175
- &[data-element-type="map"] {
176
- // width: var(--_lt-wh);
177
- // height: var(--_lt-ht);
178
- // margin: var(--_lt-mn);
179
- // padding: var(--_lt-pg);
180
- // width: var(--_ctm-lt-wh, var(--_tst-lt-wh));
181
- width: var(
182
- --_sf-el-wh-st-mx,
183
- calc(
184
- 1% * var(--_ctm-mob-ele-nw-wh-vl, var(--_ctm-tab-ele-nw-wh-vl, var(--_ctm-ele-nw-wh-vl)))
185
- )
186
- );
187
- margin: var(--_ctm-mob-lt-mn, var(--_ctm-tab-lt-mn, var(--_ctm-lt-mn)));
188
-
189
- --_aspect-ratio: calc(
190
- 1 *
191
- (
192
- var(--_ctm-mob-lt-ht, var(--_ctm-tab-lt-ht, var(--_ctm-lt-ht))) /
193
- var(--_ctm-mob-lt-wh, var(--_ctm-tab-lt-wh, var(--_ctm-lt-wh)))
194
- )
195
- );
196
-
197
- & > .wrapper {
198
- width: 100%;
199
- // height: 100%;
200
- }
201
- &[data-show-shadow="false"] {
202
- --_show-shadow: none;
203
- }
204
-
205
- // design > Map Widget Layout — where the title/description block sits relative to
206
- // the map. Top/Bottom stack it (column), Left/Right put it beside the map (row).
207
- &[data-text-container-position="Bottom"] .map-element {
208
- flex-direction: column-reverse;
209
- }
210
- &[data-text-container-position="Left"],
211
- &[data-text-container-position="Right"] {
212
- .map-element {
213
- flex-direction: row;
214
-
215
- // Beside the map the header sizes to its content and the map takes the rest;
216
- // stacked above/below it keeps spanning the full width.
217
- > .gallery-header {
218
- // Text Container Width. `auto` (the default) is the previous behaviour.
219
- width: prepareMediaVariable(--_ctm-dn-mp-wt-lt-tt-cr-wh, auto);
220
- // Shrinkable: the width defaults to 100%, which beside the map is a ceiling —
221
- // without this the header would take the whole row and collapse the map.
222
- flex: 0 1 auto;
223
- }
224
- > .map {
225
- flex: 1 1 auto;
226
- }
227
- }
228
- }
229
- &[data-text-container-position="Right"] .map-element {
230
- flex-direction: row-reverse;
231
- }
232
-
233
- // The alignment control switches between the horizontal list (left/center/right)
234
- // for stacked layouts and the vertical one (top/center/bottom) for side-by-side.
235
- // Stacked: the header spans the full width, so align the text inside it. Side by
236
- // side: align the header on the flex cross axis.
237
- &[data-text-container-alignment="left"] .map-element > .gallery-header {
238
- text-align: left;
239
- }
240
- &[data-text-container-alignment="right"] .map-element > .gallery-header {
241
- text-align: right;
242
- }
243
- &[data-text-container-alignment="top"] .map-element {
244
- align-items: flex-start;
245
- }
246
- &[data-text-container-alignment="bottom"] .map-element {
247
- align-items: flex-end;
248
- }
249
- &[data-text-container-alignment="center"] {
250
- .map-element {
251
- align-items: center;
252
-
253
- > .gallery-header {
254
- text-align: center;
255
- }
256
- }
257
- }
258
-
259
- &[data-hotspot-image-style-show-border="true"] {
260
- .imageHotspot-element {
261
- border-style: var(--_ctm-dn-ie-se-br-se);
262
- border-color: var(--_ctm-dn-ie-se-br-cr);
263
- border-width: var(--_ctm-dn-ie-se-br-wh);
264
- border-radius: var(--_ctm-dn-ie-se-br-rs);
265
- }
266
- }
267
- &[data-hotspot-tooltip-style-show-border="true"] {
268
- .hotspot__tooltip {
269
- border-style: var(--_ctm-dn-tp-dn-br-se);
270
- border-color: var(--_ctm-dn-tp-dn-br-cr);
271
- border-width: var(--_ctm-dn-tp-dn-br-wh);
272
- border-radius: var(--_ctm-dn-tp-dn-br-rs);
273
- }
274
- }
275
- &[data-hotspot-tooltip-style-show-shadow="true"] {
276
- .hotspot__tooltip {
277
- box-shadow: var(--_ctm-dn-tp-dn-sw-ae) var(--_ctm-dn-tp-dn-sw-br) var(--_ctm-dn-tp-dn-sw-sd)
278
- var(--_ctm-dn-tp-dn-sw-cr);
279
- }
280
- }
281
-
282
- // Tooltip Design > Horizontal Alignment, applied to the tooltip text itself.
283
- //
284
- // .text_box re-applies the control as align-items further down, which moves the
285
- // title and the description only while they are narrower than the tooltip. A title
286
- // long enough to wrap fills that wrapper, and a flex container cannot move a child
287
- // that is already full width — which is why the control looked dead on the title
288
- // while the shorter description still followed it.
289
- //
290
- // The value reaches the DOM as a data attribute because align-items keywords are
291
- // not text-align keywords; Map Widget Layout's alignment takes the same route to
292
- // .gallery-header above. The tooltip-level control wins over the per-text Alignment
293
- // in Tooltip Text Design — it is the one that positions the text block.
294
- @each $key, $align in $tooltipTextAlign {
295
- &[data-tooltip-text-alignment="#{$key}"] {
296
- .map-element .hotspot__tooltip .text_box > * {
297
- text-align: $align;
298
- }
299
- }
300
- }
301
- &[data-hotspot-tooltip-image-style-show-border="true"] {
302
- .tooltip__image {
303
- border-style: var(--_ctm-dn-tp-ie-dn-br-se);
304
- border-color: var(--_ctm-dn-tp-ie-dn-br-cr);
305
- border-width: var(--_ctm-dn-tp-ie-dn-br-wh);
306
- border-radius: var(--_ctm-dn-tp-ie-dn-br-rs);
307
- }
308
- }
309
- &[data-hotspot-tooltip-image-style-show-shadow="true"] {
310
- .tooltip__image {
311
- box-shadow: var(
312
- --_show-shadow,
313
- var(--_ctm-dn-tp-ie-dn-sw-ae) var(--_ctm-dn-tp-ie-dn-sw-br) var(--_ctm-dn-tp-ie-dn-sw-sd)
314
- var(--_ctm-dn-tp-ie-dn-sw-cr)
315
- );
316
- }
317
- }
318
- &[data-hotspot-style-show-shadow="true"] {
319
- .hotspot {
320
- box-shadow: var(--_ctm-dn-ht-se-sw-ae) var(--_ctm-dn-ht-se-sw-br) var(--_ctm-dn-ht-se-sw-sd)
321
- var(--_ctm-dn-ht-se-sw-cr);
322
- }
323
- }
324
- &[data-hotspot-style-show-border="true"] {
325
- .hotspot {
326
- border-style: var(--_ctm-dn-ht-se-br-se);
327
- border-color: var(--_ctm-dn-ht-se-br-cr);
328
- border-width: var(--_ctm-dn-ht-se-br-wh);
329
- border-radius: var(--_ctm-dn-ht-se-br-rs);
330
- }
331
- }
332
- .map-element {
333
- --text-high-contrast-rgb-value: 49, 49, 49;
334
- --detail-medium-contrast: rgb(234, 234, 234);
335
- --text-body: rgb(54, 49, 61);
336
-
337
- position: relative;
338
- background-color: var(
339
- --_ctm-mob-dn-mp-wt-bd-cr,
340
- var(--_ctm-tab-dn-mp-wt-bd-cr, var(--_ctm-dn-mp-wt-bd-cr))
341
- );
342
-
343
- padding: var(--_ctm-mob-lt-pg, var(--_ctm-tab-lt-pg, var(--_ctm-lt-pg)));
344
-
345
- display: flex;
346
- flex-direction: column;
347
- --_sf-cd-gp: calc(var(--_sf-gp) * 0.5);
348
-
349
- gap: var(
350
- --_ctm-mob-dn-mp-wt-lt-mp-ad-tt-cr-sg,
351
- var(--_ctm-tab-dn-mp-wt-lt-mp-ad-tt-cr-sg, var(--_ctm-dn-mp-wt-lt-mp-ad-tt-cr-sg))
352
- );
353
- // Alignment comes from the [data-text-container-alignment] rules above. It used to
354
- // read the *spacing* variable here, which is a length and never valid for
355
- // align-content, so the control did nothing.
356
-
357
- width: 100%;
358
- height: var(--_ctm-mob-lt-ht, var(--_ctm-tab-lt-ht, var(--_ctm-lt-ht)));
359
- // Height is a fixed value from layout, so keep the border inside it rather than
360
- // letting it push the widget past the size the user set.
361
- box-sizing: border-box;
362
-
363
- border-color: var(
364
- --_ctm-mob-dn-mp-wt-br-cr,
365
- var(--_ctm-tab-dn-mp-wt-br-cr, var(--_ctm-dn-mp-wt-br-cr))
366
- );
367
-
368
- border-style: var(
369
- --_ctm-mob-dn-mp-wt-br-se,
370
- var(--_ctm-tab-dn-mp-wt-br-se, var(--_ctm-dn-mp-wt-br-se))
371
- );
372
-
373
- border-width: var(
374
- --_ctm-mob-dn-mp-wt-br-wh,
375
- var(--_ctm-tab-dn-mp-wt-br-wh, var(--_ctm-dn-mp-wt-br-wh))
376
- );
377
-
378
- border-radius: var(
379
- --_ctm-mob-dn-mp-wt-br-rs,
380
- var(--_ctm-tab-dn-mp-wt-br-rs, var(--_ctm-dn-mp-wt-br-rs))
381
- );
382
-
383
- box-shadow: var(
384
- --_show-shadow,
385
- var(--_ctm-mob-dn-mp-wt-sw-ae, var(--_ctm-tab-dn-mp-wt-sw-ae, var(--_ctm-dn-mp-wt-sw-ae)))
386
- var(--_ctm-mob-dn-mp-wt-sw-br, var(--_ctm-tab-dn-mp-wt-sw-br, var(--_ctm-dn-mp-wt-sw-br)))
387
- var(--_ctm-mob-dn-mp-wt-sw-sd, var(--_ctm-tab-dn-mp-wt-sw-sd, var(--_ctm-dn-mp-wt-sw-sd)))
388
- var(--_ctm-mob-dn-mp-wt-sw-cr, var(--_ctm-tab-dn-mp-wt-sw-cr, var(--_ctm-dn-mp-wt-sw-cr)))
389
- );
390
-
391
- .gallery-header {
392
- // Text alignment is driven by [data-text-container-alignment] above. The
393
- // gallery variable that used to sit here is never emitted for a map element.
394
- box-sizing: border-box;
395
-
396
- // line-height: var(--_ctm-dn-gy-lt-tt-ad-dn-sg, var(--_tst-dn-gy-lt-tt-ad-dn-sg));
397
- display: flex;
398
- flex-direction: column;
399
-
400
- gap: var(
401
- --_ctm-mob-dn-mp-wt-tt-cr-lt-te-ad-dn-sg,
402
- var(--_ctm-tab-dn-mp-wt-tt-cr-lt-te-ad-dn-sg, var(--_ctm-dn-mp-wt-tt-cr-lt-te-ad-dn-sg))
403
- );
404
- padding-block: var(
405
- --_ctm-mob-dn-mp-wt-tt-cr-lt-tt-vl-pg,
406
- var(--_ctm-tab-dn-mp-wt-tt-cr-lt-tt-vl-pg, var(--_ctm-dn-mp-wt-tt-cr-lt-tt-vl-pg))
407
- );
408
- padding-inline: var(
409
- --_ctm-mob-dn-mp-wt-tt-cr-lt-tt-hl-pg,
410
- var(--_ctm-tab-dn-mp-wt-tt-cr-lt-tt-hl-pg, var(--_ctm-dn-mp-wt-tt-cr-lt-tt-hl-pg))
411
- );
412
- // design > Map Widget Text Container Design. This used to read a
413
- // `...-tt-cr-lt-tt-cr-bd-cr` variable — the Text Container *Layout* prefix with a
414
- // property that section has never had — so the Fill control did nothing.
415
- background-color: var(
416
- --_ctm-mob-dn-mp-wt-tt-cr-dn-bd-cr,
417
- var(--_ctm-tab-dn-mp-wt-tt-cr-dn-bd-cr, var(--_ctm-dn-mp-wt-tt-cr-dn-bd-cr))
418
- );
419
-
420
- // Text Container Width. 100% is the previous behaviour, so an unset width
421
- // still spans the container.
422
- width: prepareMediaVariable(--_ctm-dn-mp-wt-lt-tt-cr-wh, 100%);
423
- // ...but never wider than the widget. The control accepts a percentage of the
424
- // widget and a raw length, and either can be dialled past the widget's own
425
- // width — a percentage over 100, or a length longer than the widget. Both used
426
- // to push the header (and the text painted on it) out over whatever sits to the
427
- // right of the map. Clamping here rather than only capping the control also
428
- // covers pages already saved with an oversized width.
429
- max-width: 100%;
430
- // Lets it shrink to that width beside the map — a flex item defaults to
431
- // min-width:auto and refuses to go below its longest word.
432
- min-width: 0;
433
- // Never shrink below the wrapped text — the map absorbs the remaining height
434
- // instead, so a taller heading does not overflow the widget.
435
- flex: 0 0 auto;
436
- border-color: var(
437
- --_ctm-mob-dn-mp-wt-tt-cr-dn-br-cr,
438
- var(--_ctm-tab-dn-mp-wt-tt-cr-dn-br-cr, var(--_ctm-dn-mp-wt-tt-cr-dn-br-cr))
439
- );
440
- border-style: var(
441
- --_ctm-mob-dn-mp-wt-tt-cr-dn-br-se,
442
- var(--_ctm-tab-dn-mp-wt-tt-cr-dn-br-se, var(--_ctm-dn-mp-wt-tt-cr-dn-br-se))
443
- );
444
- border-width: var(
445
- --_ctm-mob-dn-mp-wt-tt-cr-dn-br-wh,
446
- var(--_ctm-tab-dn-mp-wt-tt-cr-dn-br-wh, var(--_ctm-dn-mp-wt-tt-cr-dn-br-wh))
447
- );
448
- border-radius: var(
449
- --_ctm-mob-dn-mp-wt-tt-cr-dn-br-rs,
450
- var(--_ctm-tab-dn-mp-wt-tt-cr-dn-br-rs, var(--_ctm-dn-mp-wt-tt-cr-dn-br-rs))
451
- );
452
- box-shadow: var(
453
- --_show-shadow,
454
- var(
455
- --_ctm-mob-dn-mp-wt-tt-cr-dn-sw-ae,
456
- var(--_ctm-tab-dn-mp-wt-tt-cr-dn-sw-ae, var(--_ctm-dn-mp-wt-tt-cr-dn-sw-ae))
457
- )
458
- var(
459
- --_ctm-mob-dn-mp-wt-tt-cr-dn-sw-br,
460
- var(--_ctm-tab-dn-mp-wt-tt-cr-dn-sw-br, var(--_ctm-dn-mp-wt-tt-cr-dn-sw-br))
461
- )
462
- var(
463
- --_ctm-mob-dn-mp-wt-tt-cr-dn-sw-sd,
464
- var(--_ctm-tab-dn-mp-wt-tt-cr-dn-sw-sd, var(--_ctm-dn-mp-wt-tt-cr-dn-sw-sd))
465
- )
466
- var(
467
- --_ctm-mob-dn-mp-wt-tt-cr-dn-sw-cr,
468
- var(--_ctm-tab-dn-mp-wt-tt-cr-dn-sw-cr, var(--_ctm-dn-mp-wt-tt-cr-dn-sw-cr))
469
- )
470
- );
471
-
472
- & h3 {
473
- color: var(
474
- --_ctm-mob-dn-mp-wt-cr,
475
- var(--_ctm-tab-dn-mp-wt-cr, var(--_ctm-dn-mp-wt-cr, var(--_tst-dn-mp-wt-cr)))
476
- );
477
- font-family: var(
478
- --_ctm-mob-dn-mp-wt-ft-fy,
479
- var(--_ctm-tab-dn-mp-wt-ft-fy, var(--_ctm-dn-mp-wt-ft-fy, var(--_tst-dn-mp-wt-ft-fy)))
480
- );
481
- text-transform: var(
482
- --_ctm-mob-dn-mp-wt-tt-tm,
483
- var(--_ctm-tab-dn-mp-wt-tt-tm, var(--_ctm-dn-mp-wt-tt-tm, var(--_tst-dn-mp-wt-tt-tm)))
484
- );
485
- word-wrap: var(
486
- --_ctm-mob-dn-mp-wt-wd-wp,
487
- var(--_ctm-tab-dn-mp-wt-wd-wp, var(--_ctm-dn-mp-wt-wd-wp, break-word))
488
- );
489
- word-break: var(
490
- --_ctm-mob-dn-mp-wt-wd-bk,
491
- var(--_ctm-tab-dn-mp-wt-wd-bk, var(--_ctm-dn-mp-wt-wd-bk, var(--_tst-dn-mp-wt-wd-bk)))
492
- );
493
- font-size: var(
494
- --_ctm-mob-dn-mp-wt-ft-se,
495
- var(--_ctm-tab-dn-mp-wt-ft-se, var(--_ctm-dn-mp-wt-ft-se, var(--_tst-dn-mp-wt-ft-se)))
496
- );
497
- font-weight: var(
498
- --_ctm-mob-dn-mp-wt-ft-wt,
499
- var(--_ctm-tab-dn-mp-wt-ft-wt, var(--_ctm-dn-mp-wt-ft-wt, var(--_tst-dn-mp-wt-ft-wt)))
500
- );
501
- font-style: var(
502
- --_ctm-mob-dn-mp-wt-ft-se-ic,
503
- var(
504
- --_ctm-tab-dn-mp-wt-ft-se-ic,
505
- var(--_ctm-dn-mp-wt-ft-se-ic, var(--_tst-dn-mp-wt-ft-se-ic))
506
- )
507
- );
508
- text-align: var(
509
- --_ctm-mob-dn-mp-wt-tt-an,
510
- var(--_ctm-tab-dn-mp-wt-tt-an, var(--_ctm-dn-mp-wt-tt-an, var(--_tst-dn-mp-wt-tt-an)))
511
- );
512
- letter-spacing: var(
513
- --_ctm-mob-dn-mp-wt-lr-sg,
514
- var(--_ctm-tab-dn-mp-wt-lr-sg, var(--_ctm-dn-mp-wt-lr-sg, var(--_tst-dn-mp-wt-lr-sg)))
515
- );
516
- line-height: var(
517
- --_ctm-mob-dn-mp-wt-le-ht,
518
- var(--_ctm-tab-dn-mp-wt-le-ht, var(--_ctm-dn-mp-wt-le-ht, var(--_tst-dn-mp-wt-le-ht)))
519
- );
520
- text-decoration: var(
521
- --_ctm-mob-dn-mp-wt-ue,
522
- var(--_ctm-tab-dn-mp-wt-ue, var(--_ctm-dn-mp-wt-ue, var(--_tst-dn-mp-wt-ue)))
523
- );
524
- }
525
-
526
- & p {
527
- color: var(
528
- --_ctm-mob-dn-mp-wt-cr-dc,
529
- var(--_ctm-tab-dn-mp-wt-cr-dc, var(--_ctm-dn-mp-wt-cr-dc, var(--_tst-dn-mp-wt-cr-dc)))
530
- );
531
- font-family: var(
532
- --_ctm-mob-dn-mp-wt-ft-fy-dc,
533
- var(
534
- --_ctm-tab-dn-mp-wt-ft-fy-dc,
535
- var(--_ctm-dn-mp-wt-ft-fy-dc, var(--_tst-dn-mp-wt-ft-fy-dc))
536
- )
537
- );
538
- text-transform: var(
539
- --_ctm-mob-dn-mp-wt-tt-tm-dc,
540
- var(
541
- --_ctm-tab-dn-mp-wt-tt-tm-dc,
542
- var(--_ctm-dn-mp-wt-tt-tm-dc, var(--_tst-dn-mp-wt-tt-tm-dc))
543
- )
544
- );
545
- word-wrap: var(
546
- --_ctm-mob-dn-mp-wt-wd-wp-dc,
547
- var(--_ctm-tab-dn-mp-wt-wd-wp-dc, var(--_ctm-dn-mp-wt-wd-wp-dc, break-word))
548
- );
549
- word-break: var(
550
- --_ctm-mob-dn-mp-wt-wd-bk-dc,
551
- var(
552
- --_ctm-tab-dn-mp-wt-wd-bk-dc,
553
- var(--_ctm-dn-mp-wt-wd-bk-dc, var(--_tst-dn-mp-wt-wd-bk-dc))
554
- )
555
- );
556
- font-size: var(
557
- --_ctm-mob-dn-mp-wt-ft-se-dc,
558
- var(
559
- --_ctm-tab-dn-mp-wt-ft-se-dc,
560
- var(--_ctm-dn-mp-wt-ft-se-dc, var(--_tst-dn-mp-wt-ft-se-dc))
561
- )
562
- );
563
- font-weight: var(
564
- --_ctm-mob-dn-mp-wt-ft-wt-dc,
565
- var(
566
- --_ctm-tab-dn-mp-wt-ft-wt-dc,
567
- var(--_ctm-dn-mp-wt-ft-wt-dc, var(--_tst-dn-mp-wt-ft-wt-dc))
568
- )
569
- );
570
- font-style: var(
571
- --_ctm-mob-dn-mp-wt-ft-se-ic-dc,
572
- var(
573
- --_ctm-tab-dn-mp-wt-ft-se-ic-dc,
574
- var(--_ctm-dn-mp-wt-ft-se-ic-dc, var(--_tst-dn-mp-wt-ft-se-ic-dc))
575
- )
576
- );
577
- text-align: var(
578
- --_ctm-mob-dn-mp-wt-tt-an-dc,
579
- var(
580
- --_ctm-tab-dn-mp-wt-tt-an-dc,
581
- var(--_ctm-dn-mp-wt-tt-an-dc, var(--_tst-dn-mp-wt-tt-an-dc))
582
- )
583
- );
584
- letter-spacing: var(
585
- --_ctm-mob-dn-mp-wt-lr-sg-dc,
586
- var(
587
- --_ctm-tab-dn-mp-wt-lr-sg-dc,
588
- var(--_ctm-dn-mp-wt-lr-sg-dc, var(--_tst-dn-mp-wt-lr-sg-dc))
589
- )
590
- );
591
- line-height: var(
592
- --_ctm-mob-dn-mp-wt-le-ht-dc,
593
- var(
594
- --_ctm-tab-dn-mp-wt-le-ht-dc,
595
- var(--_ctm-dn-mp-wt-le-ht-dc, var(--_tst-dn-mp-wt-le-ht-dc))
596
- )
597
- );
598
- text-decoration: var(
599
- --_ctm-mob-dn-mp-wt-ue-dc,
600
- var(--_ctm-tab-dn-mp-wt-ue-dc, var(--_ctm-dn-mp-wt-ue-dc, var(--_tst-dn-mp-wt-ue-dc)))
601
- );
602
- }
603
-
604
- // h3 {
605
- // margin-bottom: var(--_mb-4);
606
- // }
607
- }
608
-
609
- .img__overlay {
610
- background: var(
611
- --_ctm-mob-dn-ie-se-oy-cr,
612
- var(--_ctm-tab-dn-ie-se-oy-cr, var(--_ctm-dn-ie-se-oy-cr, var(--_tst-dn-ie-se-oy-cr)))
613
- );
614
-
615
- height: 100%;
616
- width: 100%;
617
- position: absolute;
618
- top: 0;
619
- }
620
- @keyframes scaleInOut {
621
- 0% {
622
- transform: scale(1);
623
- }
624
- 50% {
625
- transform: scale(1.5);
626
- }
627
- 100% {
628
- transform: scale(1);
629
- }
630
- }
631
- // Sonar ripple: each ring fades in at the pin size, expands and fades out.
632
- @keyframes sonar {
633
- 0% {
634
- transform: scale(1);
635
- opacity: 0.6;
636
- }
637
- 100% {
638
- // Expands to ~1.8x the pin — clearly visible motion but still tight to the
639
- // pin (not spreading far, per the earlier "going very long" feedback).
640
- transform: scale(1.8);
641
- opacity: 0;
642
- }
643
- }
644
- .hotspot__container {
645
- position: absolute;
646
- // The marker element is already anchored at the location's lat/lng, so the pin
647
- // and the tooltip both sit at its origin and are placed from there. The 43%/12%
648
- // that used to be here came from the image hotspot's static-image layout and
649
- // means nothing for a marker.
650
- top: 0;
651
- left: 0;
652
- .hotspot__main {
653
- position: relative;
654
-
655
- // Divi Pixel-style sonar: a single bordered ring centred on the pin that
656
- // expands and fades out on a loop. Only the ring animates — the pin/icon is
657
- // static and kept on top via z-index. Rendered in JS only when the animation
658
- // toggle is on. Duration comes from the frequency control (2s if none set), so
659
- // the user's ms value drives the speed.
660
- .svg-sonar-container {
661
- position: absolute;
662
- top: 50%;
663
- left: 50%;
664
- width: prepareMediaVariable(--_ctm-dn-pn-se-ht-se);
665
- height: prepareMediaVariable(--_ctm-dn-pn-se-ht-se);
666
- translate: -50% -50%;
667
- pointer-events: none;
668
- z-index: 1;
669
-
670
- .sonar-circle {
671
- position: absolute;
672
- inset: 0;
673
- border-radius: 50%;
674
- // Ring colour follows the pin's background colour; visible fallback so the
675
- // ripple never renders invisibly if the background var isn't emitted.
676
- border: 1px solid prepareMediaVariable(--_ctm-dn-pn-se-bd-cr, #243dc6);
677
- opacity: 0;
678
- animation: sonar prepareMediaVariable(--_ctm-dn-pn-se-an-fy, 2s) linear infinite;
679
- }
680
-
681
- // Square pins get matching square rings; circle (default) stays 50%.
682
- &[data-hotspot-shape="square"] .sonar-circle {
683
- border-radius: 0;
684
- }
685
- }
686
-
687
- .hotspot {
688
- // background: var(--_ctm-dn-ht-se-bd-cr);
689
- // height: var(--_ctm-dn-tp-tt-dn-ft-se);
690
- // width: var(--_ctm-dn-tp-tt-dn-ft-se);
691
- position: absolute;
692
- // Above the sonar rings (container is z-index 1), so the pin/icon stays on top.
693
- z-index: 2;
694
- cursor: pointer;
695
- // width: var(--_ctm-dn-ht-se-ht-se);
696
- // height: var(--_ctm-dn-ht-se-ht-se);
697
- // background-color: var(--_ctm-dn-ht-se-bd-cr);
698
- width: var(
699
- --_ctm-mob-dn-pn-se-ht-se,
700
- var(--_ctm-tab-dn-pn-se-ht-se, var(--_ctm-dn-pn-se-ht-se))
701
- );
702
- height: var(
703
- --_ctm-mob-dn-pn-se-ht-se,
704
- var(--_ctm-tab-dn-pn-se-ht-se, var(--_ctm-dn-pn-se-ht-se))
705
- );
706
-
707
- height: prepareMediaVariable(--_ctm-dn-pn-se-ht-se);
708
- width: prepareMediaVariable(--_ctm-dn-pn-se-ht-se);
709
-
710
- position: absolute;
711
- cursor: pointer;
712
-
713
- display: flex;
714
- align-items: center;
715
- top: 50%;
716
- left: 50%;
717
-
718
- translate: -50% -50%;
719
- box-sizing: border-box;
720
- justify-content: center;
721
- box-shadow: var(
722
- --_ctm-mob-dn-pn-se-sw-ae,
723
- var(--_ctm-tab-dn-pn-se-sw-ae, var(--_ctm-dn-pn-se-sw-ae))
724
- )
725
- var(
726
- --_ctm-mob-dn-pn-se-sw-br,
727
- var(--_ctm-tab-dn-pn-se-sw-br, var(--_ctm-dn-pn-se-sw-br))
728
- )
729
- var(
730
- --_ctm-mob-dn-pn-se-sw-sd,
731
- var(--_ctm-tab-dn-pn-se-sw-sd, var(--_ctm-dn-pn-se-sw-sd))
732
- )
733
- var(
734
- --_ctm-mob-dn-pn-se-sw-cr,
735
- var(--_ctm-tab-dn-pn-se-sw-cr, var(--_ctm-dn-pn-se-sw-cr))
736
- );
737
-
738
- // Pin corners follow the Shape control only — Circle or Square. There is no
739
- // separate radius control for pins, and this used to be applied as an inline
740
- // style from MarkersComponent, which outranked every rule in this file.
741
- &[data-hotspot-shape="circle"] {
742
- border-radius: 50%;
743
- }
744
- &[data-hotspot-shape="square"] {
745
- border-radius: 0;
746
- }
747
-
748
- svg {
749
- width: prepareMediaVariable(--_ctm-dn-pn-se-in-se);
750
- height: prepareMediaVariable(--_ctm-dn-pn-se-in-se);
751
-
752
- path[fill] {
753
- fill: prepareMediaVariable(--_ctm-dn-pn-se-in-c1);
754
- }
755
- path[stroke] {
756
- stroke: prepareMediaVariable(--_ctm-dn-pn-se-in-c1);
757
- // Overrides the stroke-width presentation attribute baked into the icon markup.
758
- stroke-width: prepareMediaVariable(--_ctm-dn-pn-se-se-wh, 1.25);
759
- }
760
- }
761
-
762
- // One gate for "this pin has a styled box": always true for a shape pin,
763
- // and for an icon pin only while its Background toggle is on. It used to
764
- // also match [data-show-animation="true"], which meant turning the
765
- // background off did nothing as soon as the animation was enabled.
766
- &[data-show-shape-styles="true"] {
767
- background-color: var(
768
- --_ctm-mob-dn-pn-se-bd-cr,
769
- var(--_ctm-tab-dn-pn-se-bd-cr, var(--_ctm-dn-pn-se-bd-cr))
770
- );
771
-
772
- border-style: var(
773
- --_ctm-mob-dn-pn-se-br-se,
774
- var(--_ctm-tab-dn-pn-se-br-se, var(--_ctm-dn-pn-se-br-se))
775
- );
776
- border-color: var(
777
- --_ctm-mob-dn-pn-se-br-cr,
778
- var(--_ctm-tab-dn-pn-se-br-cr, var(--_ctm-dn-pn-se-br-cr))
779
- );
780
- border-width: var(
781
- --_ctm-mob-dn-pn-se-br-wh,
782
- var(--_ctm-tab-dn-pn-se-br-wh, var(--_ctm-dn-pn-se-br-wh))
783
- );
784
- // No border-radius here — it would land after the shape rules above and
785
- // undo Circle. The Shape control is the only thing that rounds a pin.
786
- // box-shadow is applied unconditionally above so it works for all pins,
787
- // independent of this shape/animation gate.
788
- }
789
- }
790
- }
791
- }
792
- .hotspot__tooltip {
793
- --_sf-br-vl: var(--_ctm-dn-tp-dn-br-rs, 0px);
794
- position: absolute;
795
- background: prepareMediaVariable(--_ctm-dn-tp-dn-bd-cr);
796
- z-index: 1000;
797
- // Sizing follows the image hotspot: the user's width/height with a floor under
798
- // them. The caps are viewport-relative on purpose — this element's containing
799
- // block is the Google marker, which is effectively zero-sized, so a percentage
800
- // max-width would resolve to 0 and clamp the tooltip down to its min instead of
801
- // holding the size the user set. The viewport cap still stops a desktop-sized
802
- // tooltip spilling off a phone screen.
803
- width: prepareMediaVariable(--_ctm-dn-tp-dn-tp-wh);
804
- height: prepareMediaVariable(--_ctm-dn-tp-dn-tp-ht);
805
- min-width: 100px;
806
- min-height: 100px;
807
- max-width: calc(100vw - 32px);
808
- max-height: calc(100vh - 32px);
809
- box-sizing: border-box;
810
- // Placement comes from the [data-hotspot-position] transforms above, measured
811
- // from the marker origin.
812
- top: 0;
813
- left: 0;
814
- // No overflow here on purpose. The tip is an ::after sitting 10px outside the
815
- // box, so any overflow value other than visible clips it away — that's what was
816
- // eating the caret. The image hotspot scrolls its inner wrapper instead, and
817
- // .text_box below does the same.
818
- overflow: visible;
819
-
820
- padding: 4px 8px;
821
- display: flex;
822
- justify-content: prepareMediaVariable(--_ctm-dn-tp-dn-hl-at);
823
- align-items: prepareMediaVariable(--_ctm-dn-tp-dn-vl-at);
824
-
825
- &::after {
826
- content: "";
827
- position: absolute;
828
-
829
- border-width: 5px;
830
- border-style: solid;
831
- }
832
- // The scroll container, mirroring .tooltip__image_with_text on the image
833
- // hotspot: long content scrolls in here rather than on the tooltip itself.
834
- .text_box {
835
- overflow-y: auto;
836
- max-width: 100%;
837
- width: 100%;
838
- height: 100%;
839
- // This wrapper fills the tooltip on both axes, so the justify-content /
840
- // align-items set on .hotspot__tooltip above have nothing left to move —
841
- // that is why both alignment controls looked dead. Same trap the image
842
- // hotspot hit with .tooltip__image_with_text (hotspot.scss): the alignment
843
- // has to be re-applied on the box that actually holds the title and the
844
- // description. The stack is a column here, so the *vertical* control drives
845
- // justify-content and the *horizontal* one drives align-items — the opposite
846
- // mapping to the tooltip itself.
847
- display: flex;
848
- flex-direction: column;
849
- justify-content: prepareMediaVariable(--_ctm-dn-tp-dn-vl-at);
850
- align-items: prepareMediaVariable(--_ctm-dn-tp-dn-hl-at);
851
-
852
- // align-items shrinks each child to its content width, so the text still
853
- // needs a cap to wrap against instead of overflowing the tooltip.
854
- > * {
855
- max-width: 100%;
856
- }
857
-
858
- h6 {
859
- font-size: prepareMediaVariable(--_ctm-dn-tp-tt-dn-ft-se);
860
- font-family: prepareMediaVariable(--_ctm-dn-tp-tt-dn-ft-fy);
861
- color: prepareMediaVariable(--_ctm-dn-tp-tt-dn-cr);
862
-
863
- font-weight: prepareMediaVariable(--_ctm-dn-tp-tt-dn-ft-wt);
864
- font-style: prepareMediaVariable(--_ctm-dn-tp-tt-dn-ft-se-ic);
865
- text-align: prepareMediaVariable(--_ctm-dn-tp-tt-dn-tt-an);
866
- letter-spacing: prepareMediaVariable(--_ctm-dn-tp-tt-dn-lr-sg);
867
- line-height: prepareMediaVariable(--_ctm-dn-tp-tt-dn-le-ht);
868
- // Underline and line-through are two independent toggles writing two
869
- // variables, so they have to be composed, not chained. `var(--lh, <ue>)`
870
- // never reaches its fallback: the schema declares linethrough with an
871
- // empty value, and stylesToString emits it as `--…-lh: ;`, which is a
872
- // *defined* empty value rather than a missing one — so var() substitutes
873
- // nothing and the whole declaration is thrown away. Listing both keywords
874
- // on text-decoration-line lets either, both or neither apply; when both
875
- // resolve empty the declaration is invalid and the initial `none` stands,
876
- // which is exactly the both-off case.
877
- text-decoration-line: var(
878
- --_ctm-mob-dn-tp-tt-dn-ue,
879
- var(--_ctm-tab-dn-tp-tt-dn-ue, var(--_ctm-dn-tp-tt-dn-ue,))
880
- )
881
- var(
882
- --_ctm-mob-dn-tp-tt-dn-lh,
883
- var(--_ctm-tab-dn-tp-tt-dn-lh, var(--_ctm-dn-tp-tt-dn-lh,))
884
- );
885
- // Same text properties the text element exposes (see text-temp-v2.scss).
886
- text-transform: prepareMediaVariable(--_ctm-dn-tp-tt-dn-tt-tm, none);
887
- word-wrap: prepareMediaVariable(--_ctm-dn-tp-tt-dn-wd-wp, normal);
888
- word-break: prepareMediaVariable(--_ctm-dn-tp-tt-dn-wd-bk, normal);
889
-
890
- // Text Overflow toggle in the typography panel; the line count rides in on
891
- // --_sf-line-clamp from the element.
892
- &#{$overflowSelector} {
893
- @include restrictToLinesShow(#{var(--_sf-line-clamp, 1)});
894
- }
895
- }
896
- p {
897
- font-size: prepareMediaVariable(--_ctm-dn-tp-tt-dn-ft-se-dc);
898
- color: prepareMediaVariable(--_ctm-dn-tp-tt-dn-cr-dc);
899
- font-family: prepareMediaVariable(--_ctm-dn-tp-tt-dn-ft-fy-dc);
900
- font-weight: prepareMediaVariable(--_ctm-dn-tp-tt-dn-ft-wt-dc);
901
- font-style: prepareMediaVariable(--_ctm-dn-tp-tt-dn-ft-se-ic-dc);
902
- text-align: prepareMediaVariable(--_ctm-dn-tp-tt-dn-tt-an-dc);
903
- letter-spacing: prepareMediaVariable(--_ctm-dn-tp-tt-dn-lr-sg-dc);
904
- line-height: prepareMediaVariable(--_ctm-dn-tp-tt-dn-le-ht-dc);
905
- // Same composition as the title above.
906
- text-decoration-line: var(
907
- --_ctm-mob-dn-tp-tt-dn-ue-dc,
908
- var(--_ctm-tab-dn-tp-tt-dn-ue-dc, var(--_ctm-dn-tp-tt-dn-ue-dc,))
909
- )
910
- var(
911
- --_ctm-mob-dn-tp-tt-dn-lh-dc,
912
- var(--_ctm-tab-dn-tp-tt-dn-lh-dc, var(--_ctm-dn-tp-tt-dn-lh-dc,))
913
- );
914
- text-transform: prepareMediaVariable(--_ctm-dn-tp-tt-dn-tt-tm-dc, none);
915
- word-wrap: prepareMediaVariable(--_ctm-dn-tp-tt-dn-wd-wp-dc, normal);
916
- word-break: prepareMediaVariable(--_ctm-dn-tp-tt-dn-wd-bk-dc, normal);
917
-
918
- &#{$overflowSelector} {
919
- @include restrictToLinesShow(#{var(--_sf-line-clamp-desc, 1)});
920
- }
921
- }
922
- }
923
- .tooltip__image {
924
- width: 100%;
925
- background-color: var(--_ctm-dn-tp-ie-dn-bd-cr);
926
- transition: transform 0.3s ease-in-out;
927
- display: flex;
928
- justify-content: var(--_ctm-dn-tp-ie-dn-hl-at);
929
- align-items: var(--_ctm-dn-tp-ie-dn-vl-at);
930
- img {
931
- object-fit: var(--_ctm-dn-tp-ie-dn-ft-os);
932
- height: -webkit-fill-available;
933
- max-width: 100%;
934
- rotate: calc(var(--_ctm-dn-tp-ie-dn-ud) * 1deg);
935
- scale: var(--_ctm-dn-tp-ie-dn-zm-ie);
936
-
937
- &:hover {
938
- &[data-on-img-hover="Zoom In"] {
939
- transform: scale(1.08);
940
- }
941
- &[data-on-img-hover="Zoom Out"] {
942
- transform: scale(0.92);
943
- }
944
- }
945
- }
946
- }
947
- }
948
- // .hotspot__main {
949
- // position: relative;
950
- // .hotspot {
951
- // background: var(
952
- // --_ctm-mob-dn-pn-se-bd-cr,
953
- // var(--_ctm-tab-dn-pn-se-bd-cr, var(--_ctm-dn-pn-se-bd-cr))
954
- // );
955
- // border-style: var(
956
- // --_ctm-mob-dn-pn-se-br-se,
957
- // var(--_ctm-tab-dn-pn-se-br-se, var(--_ctm-dn-pn-se-br-se))
958
- // );
959
- // border-color: var(
960
- // --_ctm-mob-dn-pn-se-br-cr,
961
- // var(--_ctm-tab-dn-pn-se-br-cr, var(--_ctm-dn-pn-se-br-cr))
962
- // );
963
- // border-width: var(
964
- // --_ctm-mob-dn-pn-se-br-wh,
965
- // var(--_ctm-tab-dn-pn-se-br-wh, var(--_ctm-dn-pn-se-br-wh))
966
- // );
967
- // border-radius: var(
968
- // --_ctm-mob-dn-pn-se-br-rs,
969
- // var(--_ctm-tab-dn-pn-se-br-rs, var(--_ctm-dn-pn-se-br-rs))
970
- // );
971
- // box-shadow: var(
972
- // --_show-shadow,
973
- // var(
974
- // --_ctm-mob-dn-pn-se-sw-ae,
975
- // var(--_ctm-tab-dn-pn-se-sw-ae, var(--_ctm-dn-pn-se-sw-ae))
976
- // )
977
- // var(
978
- // --_ctm-mob-dn-pn-se-sw-br,
979
- // var(--_ctm-tab-dn-pn-se-sw-br, var(--_ctm-dn-pn-se-sw-br))
980
- // )
981
- // var(
982
- // --_ctm-mob-dn-pn-se-sw-sd,
983
- // var(--_ctm-tab-dn-pn-se-sw-sd, var(--_ctm-dn-pn-se-sw-sd))
984
- // )
985
- // var(
986
- // --_ctm-mob-dn-pn-se-sw-cr,
987
- // var(--_ctm-tab-dn-pn-se-sw-cr, var(--_ctm-dn-pn-se-sw-cr))
988
- // )
989
- // );
990
-
991
- // position: absolute;
992
- // cursor: pointer;
993
- // width: var(
994
- // --_ctm-mob-dn-pn-se-ht-se,
995
- // var(--_ctm-tab-dn-pn-se-ht-se, var(--_ctm-dn-pn-se-ht-se))
996
- // );
997
- // height: var(
998
- // --_ctm-mob-dn-pn-se-ht-se,
999
- // var(--_ctm-tab-dn-pn-se-ht-se, var(--_ctm-dn-pn-se-ht-se))
1000
- // );
1001
- // background-color: var(
1002
- // --_ctm-mob-dn-pn-se-bd-cr,
1003
- // var(--_ctm-tab-dn-pn-se-bd-cr, var(--_ctm-dn-pn-se-bd-cr))
1004
- // );
1005
-
1006
- // display: flex;
1007
- // align-items: center;
1008
- // top: 50%;
1009
- // left: 50%;
1010
- // transform: translate(-50%, -50%);
1011
- // justify-content: center;
1012
- // animation: scaleInOut
1013
- // var(
1014
- // --_ctm-mob-dn-pn-se-an-fy,
1015
- // var(--_ctm-tab-dn-pn-se-an-fy, var(--_ctm-dn-pn-se-an-fy))
1016
- // )
1017
- // infinite;
1018
-
1019
- // .icon {
1020
- // display: var(--_sf-show-icon-ff, flex);
1021
-
1022
- // svg {
1023
- // width: var(
1024
- // --_ctm-mob-dn-pn-se-in-se,
1025
- // var(--_ctm-tab-dn-pn-se-in-se, var(--_ctm-dn-pn-se-in-se))
1026
- // );
1027
- // height: var(
1028
- // --_ctm-mob-dn-pn-se-in-se,
1029
- // var(--_ctm-tab-dn-pn-se-in-se, var(--_ctm-dn-pn-se-in-se))
1030
- // );
1031
-
1032
- // path {
1033
- // stroke: var(
1034
- // --_ctm-mob-dn-pn-se-in-c1,
1035
- // var(--_ctm-tab-dn-pn-se-in-c1, var(--_ctm-dn-pn-se-in-c1))
1036
- // );
1037
- // Overrides the stroke-width presentation attribute baked into the icon markup.
1038
- stroke-width: prepareMediaVariable(--_ctm-dn-pn-se-se-wh, 1.25);
1039
- // fill: var(
1040
- // --_ctm-mob-dn-pn-se-in-c1,
1041
- // var(--_ctm-tab-dn-pn-se-in-c1, var(--_ctm-dn-pn-se-in-c1))
1042
- // );
1043
- // }
1044
- // }
1045
- // }
1046
- // }
1047
- // .hotspot__tooltip {
1048
- // position: absolute;
1049
- // background: var(
1050
- // --_ctm-mob-dn-tp-dn-bd-cr,
1051
- // var(--_ctm-tab-dn-tp-dn-bd-cr, var(--_ctm-dn-tp-dn-bd-cr))
1052
- // );
1053
- // border-style: var(
1054
- // --_ctm-mob-dn-tp-dn-br-se,
1055
- // var(--_ctm-tab-dn-tp-dn-br-se, var(--_ctm-dn-tp-dn-br-se))
1056
- // );
1057
- // border-color: var(
1058
- // --_ctm-mob-dn-tp-dn-br-cr,
1059
- // var(--_ctm-tab-dn-tp-dn-br-cr, var(--_ctm-dn-tp-dn-br-cr))
1060
- // );
1061
- // border-width: var(
1062
- // --_ctm-mob-dn-tp-dn-br-wh,
1063
- // var(--_ctm-tab-dn-tp-dn-br-wh, var(--_ctm-dn-tp-dn-br-wh))
1064
- // );
1065
- // border-radius: var(
1066
- // --_ctm-mob-dn-tp-dn-br-rs,
1067
- // var(--_ctm-tab-dn-tp-dn-br-rs, var(--_ctm-dn-tp-dn-br-rs))
1068
- // );
1069
-
1070
- // box-shadow: var(
1071
- // --_show-shadow,
1072
- // var(
1073
- // --_ctm-mob-dn-tp-dn-sw-ae,
1074
- // var(--_ctm-tab-dn-tp-dn-sw-ae, var(--_ctm-dn-tp-dn-sw-ae))
1075
- // )
1076
- // var(
1077
- // --_ctm-mob-dn-tp-dn-sw-br,
1078
- // var(--_ctm-tab-dn-tp-dn-sw-br, var(--_ctm-dn-tp-dn-sw-br))
1079
- // )
1080
- // var(
1081
- // --_ctm-mob-dn-tp-dn-sw-sd,
1082
- // var(--_ctm-tab-dn-tp-dn-sw-sd, var(--_ctm-dn-tp-dn-sw-sd))
1083
- // )
1084
- // var(
1085
- // --_ctm-mob-dn-tp-dn-sw-cr,
1086
- // var(--_ctm-tab-dn-tp-dn-sw-cr, var(--_ctm-dn-tp-dn-sw-cr))
1087
- // )
1088
- // );
1089
-
1090
- // z-index: 1000;
1091
- // min-width: 100px;
1092
- // width: var(
1093
- // --_ctm-mob-dn-tp-dn-tp-wh,
1094
- // var(--_ctm-tab-dn-tp-dn-tp-wh, var(--_ctm-dn-tp-dn-tp-wh))
1095
- // );
1096
- // min-height: 100px;
1097
- // height: var(
1098
- // --_ctm-mob-dn-tp-dn-tp-ht,
1099
- // var(--_ctm-tab-dn-tp-dn-tp-ht, var(--_ctm-dn-tp-dn-tp-ht))
1100
- // );
1101
-
1102
- // // border-radius: 4px;
1103
- // // transform: translate(-10%, -130%);
1104
- // left: -10px;
1105
- // bottom: 7px;
1106
- // padding: 4px 8px;
1107
- // display: flex;
1108
- // justify-content: var(
1109
- // --_ctm-mob-dn-tp-dn-hl-at,
1110
- // var(--_ctm-tab-dn-tp-dn-hl-at, var(--_ctm-dn-tp-dn-hl-at))
1111
- // );
1112
- // align-items: var(
1113
- // --_ctm-mob-dn-tp-dn-vl-at,
1114
- // var(--_ctm-tab-dn-tp-dn-vl-at, var(--_ctm-dn-tp-dn-vl-at))
1115
- // );
1116
-
1117
- // &::after {
1118
- // content: "";
1119
- // position: absolute;
1120
- // top: 100%;
1121
- // left: 20px;
1122
- // margin-left: -5px;
1123
- // border-width: 5px;
1124
- // border-style: solid;
1125
- // border-color: var(
1126
- // --_ctm-mob-dn-tp-dn-bd-cr,
1127
- // var(--_ctm-tab-dn-tp-dn-bd-cr, var(--_ctm-dn-tp-dn-bd-cr))
1128
- // )
1129
- // transparent transparent transparent;
1130
- // }
1131
- // span {
1132
- // svg {
1133
- // width: var(
1134
- // --_ctm-mob-dn-pn-se-in-se,
1135
- // var(--_ctm-tab-dn-pn-se-in-se, var(--_ctm-dn-pn-se-in-se))
1136
- // );
1137
- // height: var(
1138
- // --_ctm-mob-dn-pn-se-in-se,
1139
- // var(--_ctm-tab-dn-pn-se-in-se, var(--_ctm-dn-pn-se-in-se))
1140
- // );
1141
- // path {
1142
- // stroke: var(
1143
- // --_ctm-mob-dn-pn-se-in-c1,
1144
- // var(--_ctm-tab-dn-pn-se-in-c1, var(--_ctm-dn-pn-se-in-c1))
1145
- // );
1146
- // Overrides the stroke-width presentation attribute baked into the icon markup.
1147
- stroke-width: prepareMediaVariable(--_ctm-dn-pn-se-se-wh, 1.25);
1148
- // }
1149
- // }
1150
- // }
1151
-
1152
- // .text_box {
1153
- // h6 {
1154
- // font-size: var(
1155
- // --_ctm-mob-dn-tp-tt-dn-ft-se,
1156
- // var(--_ctm-tab-dn-tp-tt-dn-ft-se, var(--_ctm-dn-tp-tt-dn-ft-se))
1157
- // );
1158
- // font-family: var(
1159
- // --_ctm-mob-dn-tp-tt-dn-ft-fy,
1160
- // var(--_ctm-tab-dn-tp-tt-dn-ft-fy, var(--_ctm-dn-tp-tt-dn-ft-fy))
1161
- // );
1162
- // color: var(
1163
- // --_ctm-mob-dn-tp-tt-dn-cr,
1164
- // var(--_ctm-tab-dn-tp-tt-dn-cr, var(--_ctm-dn-tp-tt-dn-cr))
1165
- // );
1166
-
1167
- // font-weight: var(
1168
- // --_ctm-mob-dn-tp-tt-dn-ft-wt,
1169
- // var(--_ctm-tab-dn-tp-tt-dn-ft-wt, var(--_ctm-dn-tp-tt-dn-ft-wt))
1170
- // );
1171
- // font-style: var(
1172
- // --_ctm-mob-dn-tp-tt-dn-ft-se-ic,
1173
- // var(--_ctm-tab-dn-tp-tt-dn-ft-se-ic, var(--_ctm-dn-tp-tt-dn-ft-se-ic))
1174
- // );
1175
- // text-align: var(
1176
- // --_ctm-mob-dn-tp-tt-dn-tt-an,
1177
- // var(--_ctm-tab-dn-tp-tt-dn-tt-an, var(--_ctm-dn-tp-tt-dn-tt-an))
1178
- // );
1179
- // letter-spacing: var(
1180
- // --_ctm-mob-dn-tp-tt-dn-lr-sg,
1181
- // var(--_ctm-tab-dn-tp-tt-dn-lr-sg, var(--_ctm-dn-tp-tt-dn-lr-sg))
1182
- // );
1183
- // line-height: var(
1184
- // --_ctm-mob-dn-tp-tt-dn-le-ht,
1185
- // var(--_ctm-tab-dn-tp-tt-dn-le-ht, var(--_ctm-dn-tp-tt-dn-le-ht))
1186
- // );
1187
- // text-decoration: var(
1188
- // --_ctm-mob-dn-tp-tt-dn-ue,
1189
- // var(--_ctm-tab-dn-tp-tt-dn-ue, var(--_ctm-dn-tp-tt-dn-ue))
1190
- // );
1191
- // }
1192
-
1193
- // p {
1194
- // font-size: var(
1195
- // --_ctm-mob-dn-tp-tt-dn-ft-se-dc,
1196
- // var(--_ctm-tab-dn-tp-tt-dn-ft-se-dc, var(--_ctm-dn-tp-tt-dn-ft-se-dc))
1197
- // );
1198
- // color: var(
1199
- // --_ctm-mob-dn-tp-tt-dn-cr-dc,
1200
- // var(--_ctm-tab-dn-tp-tt-dn-cr-dc, var(--_ctm-dn-tp-tt-dn-cr-dc))
1201
- // );
1202
- // font-family: var(
1203
- // --_ctm-mob-dn-tp-tt-dn-ft-fy-dc,
1204
- // var(--_ctm-tab-dn-tp-tt-dn-ft-fy-dc, var(--_ctm-dn-tp-tt-dn-ft-fy-dc))
1205
- // );
1206
- // font-weight: var(
1207
- // --_ctm-mob-dn-tp-tt-dn-ft-wt-dc,
1208
- // var(--_ctm-tab-dn-tp-tt-dn-ft-wt-dc, var(--_ctm-dn-tp-tt-dn-ft-wt-dc))
1209
- // );
1210
- // font-style: var(
1211
- // --_ctm-mob-dn-tp-tt-dn-ft-se-ic-dc,
1212
- // var(--_ctm-tab-dn-tp-tt-dn-ft-se-ic-dc, var(--_ctm-dn-tp-tt-dn-ft-se-ic-dc))
1213
- // );
1214
- // text-align: var(
1215
- // --_ctm-mob-dn-tp-tt-dn-tt-an-dc,
1216
- // var(--_ctm-tab-dn-tp-tt-dn-tt-an-dc, var(--_ctm-dn-tp-tt-dn-tt-an-dc))
1217
- // );
1218
- // letter-spacing: var(
1219
- // --_ctm-mob-dn-tp-tt-dn-lr-sg-dc,
1220
- // var(--_ctm-tab-dn-tp-tt-dn-lr-sg-dc, var(--_ctm-dn-tp-tt-dn-lr-sg-dc))
1221
- // );
1222
- // line-height: var(
1223
- // --_ctm-mob-dn-tp-tt-dn-le-ht-dc,
1224
- // var(--_ctm-tab-dn-tp-tt-dn-le-ht-dc, var(--_ctm-dn-tp-tt-dn-le-ht-dc))
1225
- // );
1226
- // text-decoration: var(
1227
- // --_ctm-mob-dn-tp-tt-dn-ue-dc,
1228
- // var(--_ctm-tab-dn-tp-tt-dn-ue-dc, var(--_ctm-dn-tp-tt-dn-ue-dc))
1229
- // );
1230
- // }
1231
- // }
1232
- // .tooltip__image {
1233
- // background-color: var(
1234
- // --_ctm-mob-dn-tp-ie-dn-bd-cr,
1235
- // var(--_ctm-tab-dn-tp-ie-dn-bd-cr, var(--_ctm-dn-tp-ie-dn-bd-cr))
1236
- // );
1237
- // transition: transform 0.3s ease-in-out;
1238
- // border-style: var(
1239
- // --_ctm-mob-dn-tp-ie-dn-br-se,
1240
- // var(--_ctm-tab-dn-tp-ie-dn-br-se, var(--_ctm-dn-tp-ie-dn-br-se))
1241
- // );
1242
- // border-color: var(
1243
- // --_ctm-mob-dn-tp-ie-dn-br-cr,
1244
- // var(--_ctm-tab-dn-tp-ie-dn-br-cr, var(--_ctm-dn-tp-ie-dn-br-cr))
1245
- // );
1246
- // border-width: var(
1247
- // --_ctm-mob-dn-tp-ie-dn-br-wh,
1248
- // var(--_ctm-tab-dn-tp-ie-dn-br-wh, var(--_ctm-dn-tp-ie-dn-br-wh))
1249
- // );
1250
- // border-radius: var(
1251
- // --_ctm-mob-dn-tp-ie-dn-br-rs,
1252
- // var(--_ctm-tab-dn-tp-ie-dn-br-rs, var(--_ctm-dn-tp-ie-dn-br-rs))
1253
- // );
1254
- // box-shadow: var(
1255
- // --_show-shadow,
1256
- // var(
1257
- // --_ctm-mob-dn-tp-ie-dn-sw-ae,
1258
- // var(--_ctm-tab-dn-tp-ie-dn-sw-ae, var(--_ctm-dn-tp-ie-dn-sw-ae))
1259
- // )
1260
- // var(
1261
- // --_ctm-mob-dn-tp-ie-dn-sw-br,
1262
- // var(--_ctm-tab-dn-tp-ie-dn-sw-br, var(--_ctm-dn-tp-ie-dn-sw-br))
1263
- // )
1264
- // var(
1265
- // --_ctm-mob-dn-tp-ie-dn-sw-sd,
1266
- // var(--_ctm-tab-dn-tp-ie-dn-sw-sd, var(--_ctm-dn-tp-ie-dn-sw-sd))
1267
- // )
1268
- // var(
1269
- // --_ctm-mob-dn-tp-ie-dn-sw-cr,
1270
- // var(--_ctm-tab-dn-tp-ie-dn-sw-cr, var(--_ctm-dn-tp-ie-dn-sw-cr))
1271
- // )
1272
- // );
1273
- // display: flex;
1274
- // justify-content: var(
1275
- // --_ctm-mob-dn-tp-ie-dn-hl-at,
1276
- // var(--_ctm-tab-dn-tp-ie-dn-hl-at, var(--_ctm-dn-tp-ie-dn-hl-at))
1277
- // );
1278
- // align-items: var(
1279
- // --_ctm-mob-dn-tp-ie-dn-vl-at,
1280
- // var(--_ctm-tab-dn-tp-ie-dn-vl-at, var(--_ctm-dn-tp-ie-dn-vl-at))
1281
- // );
1282
-
1283
- // img {
1284
- // object-fit: var(
1285
- // --_ctm-mob-dn-tp-ie-dn-ft-os,
1286
- // var(--_ctm-tab-dn-tp-ie-dn-ft-os, var(--_ctm-dn-tp-ie-dn-ft-os))
1287
- // );
1288
- // max-width: 100%;
1289
- // rotate: calc(
1290
- // var(
1291
- // --_ctm-mob-dn-tp-ie-dn-ud,
1292
- // var(--_ctm-tab-dn-tp-ie-dn-ud, var(--_ctm-dn-tp-ie-dn-ud))
1293
- // ) *
1294
- // 1deg
1295
- // );
1296
- // scale: var(
1297
- // --_ctm-mob-dn-tp-ie-dn-zm-ie,
1298
- // var(--_ctm-tab-dn-tp-ie-dn-zm-ie, var(--_ctm-dn-tp-ie-dn-zm-ie))
1299
- // );
1300
- // }
1301
- // }
1302
- // }
1303
- // }
1304
-
1305
- .map {
1306
- width: 100%;
1307
- height: 100%;
1308
- min-width: 0;
1309
- // Yields height to the heading rather than demanding the full 100%.
1310
- flex: 1 1 auto;
1311
- min-height: 0;
1312
- // design > Map Style. The map box paints its own border from that section's
1313
- // scope (`--_ctm-dn-mp-se-*`), independent of the widget's border on
1314
- // `.map-element` and the header's on `.gallery-header`. `overflow: hidden` so a
1315
- // rounded corner actually clips the tiles inside it.
1316
- overflow: hidden;
1317
- border-color: prepareMediaVariable(--_ctm-dn-mp-ie-br-cr);
1318
- border-style: prepareMediaVariable(--_ctm-dn-mp-ie-br-se);
1319
- border-width: prepareMediaVariable(--_ctm-dn-mp-ie-br-wh);
1320
- border-radius: prepareMediaVariable(--_ctm-dn-mp-ie-br-rs);
1321
- img {
1322
- width: 100%;
1323
- height: 100%;
1324
- }
1325
- }
1326
- }
1327
-
1328
- // "Show Border" / "Show Shadow" switches. Each design section paints its box from
1329
- // CSS variables, so the switches reach the stylesheet as data attributes and the
1330
- // matching border-width / box-shadow is zeroed here. Kept at the end of the block
1331
- // and matched to the same selector depth as the rules they override — anywhere
1332
- // earlier and the section rules above would win the tie on source order.
1333
- &[data-map-widget-border="false"] .map-element {
1334
- border-width: 0;
1335
- border-style: none;
1336
- }
1337
- &[data-map-widget-shadow="false"] .map-element {
1338
- box-shadow: none;
1339
- }
1340
- &[data-text-container-border="false"] .map-element > .gallery-header {
1341
- border-width: 0;
1342
- border-style: none;
1343
- }
1344
- &[data-text-container-shadow="false"] .map-element > .gallery-header {
1345
- box-shadow: none;
1346
- }
1347
- &[data-pin-border="false"] .map-element .hotspot__container .hotspot__main .hotspot {
1348
- border-width: 0;
1349
- border-style: none;
1350
- }
1351
- &[data-pin-shadow="false"] .map-element .hotspot__container .hotspot__main .hotspot {
1352
- box-shadow: none;
1353
- }
1354
- &[data-map-border="false"] .map-element .map {
1355
- border-width: 0;
1356
- border-style: none;
1357
- }
1358
- }
1359
- }
1
+ @use "sass:map";
2
+ @use "sass:list";
3
+ @use "./functions.scss" as *;
4
+
5
+ // Tooltip tip + placement, ported from the image hotspot (hotspot.scss) so both
6
+ // elements anchor their tooltip the same way.
7
+ //
8
+ // $ics is the tip's border-width: a 5px border with no content box makes a 10px
9
+ // triangle whose apex sits at the centre of the 10px box.
10
+ $ics: 5px;
11
+ $tip: $ics * 2;
12
+ $bm: 30px;
13
+
14
+ // Gap between the pin's edge and the tooltip. Held in a custom property so it can
15
+ // track the pin's real size at runtime (see --_sf-tp-gp below) instead of the flat
16
+ // 20px this file used to assume — that offset ignored Pin Size, so the tip drifted
17
+ // off the pin as soon as the pin was resized.
18
+ $g: var(--_sf-tp-gp);
19
+
20
+ $overflowSelector: ".flex__overflow";
21
+
22
+ // Each entry places the tooltip relative to the pin's centre, then pins the tip to
23
+ // the tooltip edge that faces the pin. Because $g already absorbs the pin's
24
+ // half-size, every tip offset below is a constant: the triangle always spans exactly
25
+ // the gap, base on the tooltip edge and apex on the pin edge. The previous table did
26
+ // this with hand-tuned multipliers (1.25 / 1.75 / 2.05 / 2.7 …) and, in five entries,
27
+ // a stray top-level border-color that painted over the tooltip's own border colour.
28
+ $data: (
29
+ // tooltip to the LEFT — tip on its right edge, pointing right
30
+ leftTop: (
31
+ transform: translate(calc(-100% - #{$g}), calc(-100% + #{$bm})),
32
+ icon: (
33
+ right: -#{$tip},
34
+ bottom: calc(#{$bm} - #{$ics}),
35
+ border-color: transparent transparent transparent var(--_ctm-dn-tp-dn-bd-cr),
36
+ ),
37
+ ),
38
+ leftCenter: (
39
+ transform: translate(calc(-100% - #{$g}), -50%),
40
+ icon: (
41
+ right: -#{$tip},
42
+ top: calc(50% - #{$ics}),
43
+ border-color: transparent transparent transparent var(--_ctm-dn-tp-dn-bd-cr),
44
+ ),
45
+ ),
46
+ leftBottom: (
47
+ transform: translate(calc(-100% - #{$g}), calc(0% - #{$bm})),
48
+ icon: (
49
+ right: -#{$tip},
50
+ top: calc(#{$bm} - #{$ics}),
51
+ border-color: transparent transparent transparent var(--_ctm-dn-tp-dn-bd-cr),
52
+ ),
53
+ ),
54
+ // tooltip ABOVE — tip on its bottom edge, pointing down
55
+ topLeft: (
56
+ transform: translate(calc(-100% + #{$bm}), calc(-100% - #{$g})),
57
+ icon: (
58
+ bottom: -#{$tip},
59
+ right: calc(#{$bm} - #{$ics}),
60
+ border-color: var(--_ctm-dn-tp-dn-bd-cr) transparent transparent transparent,
61
+ ),
62
+ ),
63
+ topCenter: (
64
+ transform: translate(-50%, calc(-100% - #{$g})),
65
+ icon: (
66
+ bottom: -#{$tip},
67
+ left: calc(50% - #{$ics}),
68
+ border-color: var(--_ctm-dn-tp-dn-bd-cr) transparent transparent transparent,
69
+ ),
70
+ ),
71
+ topRight: (
72
+ transform: translate(calc(0% - #{$bm}), calc(-100% - #{$g})),
73
+ icon: (
74
+ bottom: -#{$tip},
75
+ left: calc(#{$bm} - #{$ics}),
76
+ border-color: var(--_ctm-dn-tp-dn-bd-cr) transparent transparent transparent,
77
+ ),
78
+ ),
79
+ // tooltip to the RIGHT — tip on its left edge, pointing left
80
+ rightTop: (
81
+ transform: translate(#{$g}, calc(-100% + #{$bm})),
82
+ icon: (
83
+ left: -#{$tip},
84
+ bottom: calc(#{$bm} - #{$ics}),
85
+ border-color: transparent var(--_ctm-dn-tp-dn-bd-cr) transparent transparent,
86
+ ),
87
+ ),
88
+ rightCenter: (
89
+ transform: translate(#{$g}, -50%),
90
+ icon: (
91
+ left: -#{$tip},
92
+ top: calc(50% - #{$ics}),
93
+ border-color: transparent var(--_ctm-dn-tp-dn-bd-cr) transparent transparent,
94
+ ),
95
+ ),
96
+ rightBottom: (
97
+ transform: translate(#{$g}, calc(0% - #{$bm})),
98
+ icon: (
99
+ left: -#{$tip},
100
+ top: calc(#{$bm} - #{$ics}),
101
+ border-color: transparent var(--_ctm-dn-tp-dn-bd-cr) transparent transparent,
102
+ ),
103
+ ),
104
+ // tooltip BELOW — tip on its top edge, pointing up
105
+ bottomLeft: (
106
+ transform: translate(calc(-100% + #{$bm}), #{$g}),
107
+ icon: (
108
+ top: -#{$tip},
109
+ right: calc(#{$bm} - #{$ics}),
110
+ border-color: transparent transparent var(--_ctm-dn-tp-dn-bd-cr) transparent,
111
+ ),
112
+ ),
113
+ bottomCenter: (
114
+ transform: translate(-50%, #{$g}),
115
+ icon: (
116
+ top: -#{$tip},
117
+ left: calc(50% - #{$ics}),
118
+ border-color: transparent transparent var(--_ctm-dn-tp-dn-bd-cr) transparent,
119
+ ),
120
+ ),
121
+ bottomRight: (
122
+ transform: translate(calc(0% - #{$bm}), #{$g}),
123
+ icon: (
124
+ top: -#{$tip},
125
+ left: calc(#{$bm} - #{$ics}),
126
+ border-color: transparent transparent var(--_ctm-dn-tp-dn-bd-cr) transparent,
127
+ ),
128
+ )
129
+ );
130
+
131
+ // Tooltip Design > Horizontal Alignment, translated for `text-align`. The control is
132
+ // picked from the shared alignment list (flex-start | center | flex-end), and those
133
+ // keywords mean nothing to text-align, so the two ends have to be mapped. The last two
134
+ // entries are the pre-list values, still stored on pages saved before that fix.
135
+ $tooltipTextAlign: (
136
+ "flex-start": left,
137
+ "center": center,
138
+ "flex-end": right,
139
+ "left": left,
140
+ "right": right,
141
+ );
142
+
143
+ [data-div-type="element"] {
144
+ &[data-element-type="map"] {
145
+ // Half the pin as it actually renders, and the gap the tooltip keeps from the
146
+ // pin's centre — both driven by the Pin Size control rather than a literal, so
147
+ // the tip lands on the pin at any size. Unlike the image hotspot there is no
148
+ // icon-only variant to handle: .hotspot is always sized by the pin size here,
149
+ // with the icon drawn inside it.
150
+ --_sf-ht-hf: calc(#{prepareMediaVariable(--_ctm-dn-pn-se-ht-se, 24px)} / 2);
151
+ --_sf-tp-gp: calc(var(--_sf-ht-hf) + #{$ics});
152
+
153
+ &[data-hotspot-position] {
154
+ @each $key, $value in $data {
155
+ &[data-hotspot-position="#{$key}"] {
156
+ .hotspot__tooltip {
157
+ @each $prop, $val in $value {
158
+ @if ($prop != icon) {
159
+ #{$prop}: #{$val};
160
+ } @else {
161
+ @each $key2, $value2 in $val {
162
+ &:after {
163
+ #{$key2}: #{$value2};
164
+ }
165
+ }
166
+ }
167
+ }
168
+ }
169
+ }
170
+ }
171
+ }
172
+ }
173
+ }
174
+ [data-div-type="element"] {
175
+ &[data-element-type="map"] {
176
+ // width: var(--_lt-wh);
177
+ // height: var(--_lt-ht);
178
+ // margin: var(--_lt-mn);
179
+ // padding: var(--_lt-pg);
180
+ // width: var(--_ctm-lt-wh, var(--_tst-lt-wh));
181
+ width: var(
182
+ --_sf-el-wh-st-mx,
183
+ calc(
184
+ 1% * var(--_ctm-mob-ele-nw-wh-vl, var(--_ctm-tab-ele-nw-wh-vl, var(--_ctm-ele-nw-wh-vl)))
185
+ )
186
+ );
187
+ margin: var(--_ctm-mob-lt-mn, var(--_ctm-tab-lt-mn, var(--_ctm-lt-mn)));
188
+
189
+ --_aspect-ratio: calc(
190
+ 1 *
191
+ (
192
+ var(--_ctm-mob-lt-ht, var(--_ctm-tab-lt-ht, var(--_ctm-lt-ht))) /
193
+ var(--_ctm-mob-lt-wh, var(--_ctm-tab-lt-wh, var(--_ctm-lt-wh)))
194
+ )
195
+ );
196
+
197
+ & > .wrapper {
198
+ width: 100%;
199
+ // height: 100%;
200
+ }
201
+ &[data-show-shadow="false"] {
202
+ --_show-shadow: none;
203
+ }
204
+
205
+ // design > Map Widget Layout — where the title/description block sits relative to
206
+ // the map. Top/Bottom stack it (column), Left/Right put it beside the map (row).
207
+ &[data-text-container-position="Bottom"] .map-element {
208
+ flex-direction: column-reverse;
209
+ }
210
+ &[data-text-container-position="Left"],
211
+ &[data-text-container-position="Right"] {
212
+ .map-element {
213
+ flex-direction: row;
214
+
215
+ // Beside the map the header sizes to its content and the map takes the rest;
216
+ // stacked above/below it keeps spanning the full width.
217
+ > .gallery-header {
218
+ // Text Container Width. `auto` (the default) is the previous behaviour.
219
+ width: prepareMediaVariable(--_ctm-dn-mp-wt-lt-tt-cr-wh, auto);
220
+ // Shrinkable: the width defaults to 100%, which beside the map is a ceiling —
221
+ // without this the header would take the whole row and collapse the map.
222
+ flex: 0 1 auto;
223
+ }
224
+ > .map {
225
+ flex: 1 1 auto;
226
+ }
227
+ }
228
+ }
229
+ &[data-text-container-position="Right"] .map-element {
230
+ flex-direction: row-reverse;
231
+ }
232
+
233
+ // The alignment control switches between the horizontal list (left/center/right)
234
+ // for stacked layouts and the vertical one (top/center/bottom) for side-by-side.
235
+ // Stacked: the header spans the full width, so align the text inside it. Side by
236
+ // side: align the header on the flex cross axis.
237
+ &[data-text-container-alignment="left"] .map-element > .gallery-header {
238
+ text-align: left;
239
+ }
240
+ &[data-text-container-alignment="right"] .map-element > .gallery-header {
241
+ text-align: right;
242
+ }
243
+ &[data-text-container-alignment="top"] .map-element {
244
+ align-items: flex-start;
245
+ }
246
+ &[data-text-container-alignment="bottom"] .map-element {
247
+ align-items: flex-end;
248
+ }
249
+ &[data-text-container-alignment="center"] {
250
+ .map-element {
251
+ align-items: center;
252
+
253
+ > .gallery-header {
254
+ text-align: center;
255
+ }
256
+ }
257
+ }
258
+
259
+ &[data-hotspot-image-style-show-border="true"] {
260
+ .imageHotspot-element {
261
+ border-style: var(--_ctm-dn-ie-se-br-se);
262
+ border-color: var(--_ctm-dn-ie-se-br-cr);
263
+ border-width: var(--_ctm-dn-ie-se-br-wh);
264
+ border-radius: var(--_ctm-dn-ie-se-br-rs);
265
+ }
266
+ }
267
+ &[data-hotspot-tooltip-style-show-border="true"] {
268
+ .hotspot__tooltip {
269
+ border-style: var(--_ctm-dn-tp-dn-br-se);
270
+ border-color: var(--_ctm-dn-tp-dn-br-cr);
271
+ border-width: var(--_ctm-dn-tp-dn-br-wh);
272
+ border-radius: var(--_ctm-dn-tp-dn-br-rs);
273
+ }
274
+ }
275
+ &[data-hotspot-tooltip-style-show-shadow="true"] {
276
+ .hotspot__tooltip {
277
+ box-shadow: var(--_ctm-dn-tp-dn-sw-ae) var(--_ctm-dn-tp-dn-sw-br) var(--_ctm-dn-tp-dn-sw-sd)
278
+ var(--_ctm-dn-tp-dn-sw-cr);
279
+ }
280
+ }
281
+
282
+ // Tooltip Design > Horizontal Alignment, applied to the tooltip text itself.
283
+ //
284
+ // .text_box re-applies the control as align-items further down, which moves the
285
+ // title and the description only while they are narrower than the tooltip. A title
286
+ // long enough to wrap fills that wrapper, and a flex container cannot move a child
287
+ // that is already full width — which is why the control looked dead on the title
288
+ // while the shorter description still followed it.
289
+ //
290
+ // The value reaches the DOM as a data attribute because align-items keywords are
291
+ // not text-align keywords; Map Widget Layout's alignment takes the same route to
292
+ // .gallery-header above. The tooltip-level control wins over the per-text Alignment
293
+ // in Tooltip Text Design — it is the one that positions the text block.
294
+ @each $key, $align in $tooltipTextAlign {
295
+ &[data-tooltip-text-alignment="#{$key}"] {
296
+ .map-element .hotspot__tooltip .text_box > * {
297
+ text-align: $align;
298
+ }
299
+ }
300
+ }
301
+ &[data-hotspot-tooltip-image-style-show-border="true"] {
302
+ .tooltip__image {
303
+ border-style: var(--_ctm-dn-tp-ie-dn-br-se);
304
+ border-color: var(--_ctm-dn-tp-ie-dn-br-cr);
305
+ border-width: var(--_ctm-dn-tp-ie-dn-br-wh);
306
+ border-radius: var(--_ctm-dn-tp-ie-dn-br-rs);
307
+ }
308
+ }
309
+ &[data-hotspot-tooltip-image-style-show-shadow="true"] {
310
+ .tooltip__image {
311
+ box-shadow: var(
312
+ --_show-shadow,
313
+ var(--_ctm-dn-tp-ie-dn-sw-ae) var(--_ctm-dn-tp-ie-dn-sw-br) var(--_ctm-dn-tp-ie-dn-sw-sd)
314
+ var(--_ctm-dn-tp-ie-dn-sw-cr)
315
+ );
316
+ }
317
+ }
318
+ &[data-hotspot-style-show-shadow="true"] {
319
+ .hotspot {
320
+ box-shadow: var(--_ctm-dn-ht-se-sw-ae) var(--_ctm-dn-ht-se-sw-br) var(--_ctm-dn-ht-se-sw-sd)
321
+ var(--_ctm-dn-ht-se-sw-cr);
322
+ }
323
+ }
324
+ &[data-hotspot-style-show-border="true"] {
325
+ .hotspot {
326
+ border-style: var(--_ctm-dn-ht-se-br-se);
327
+ border-color: var(--_ctm-dn-ht-se-br-cr);
328
+ border-width: var(--_ctm-dn-ht-se-br-wh);
329
+ border-radius: var(--_ctm-dn-ht-se-br-rs);
330
+ }
331
+ }
332
+ .map-element {
333
+ --text-high-contrast-rgb-value: 49, 49, 49;
334
+ --detail-medium-contrast: rgb(234, 234, 234);
335
+ --text-body: rgb(54, 49, 61);
336
+
337
+ position: relative;
338
+ background-color: var(
339
+ --_ctm-mob-dn-mp-wt-bd-cr,
340
+ var(--_ctm-tab-dn-mp-wt-bd-cr, var(--_ctm-dn-mp-wt-bd-cr))
341
+ );
342
+
343
+ padding: var(--_ctm-mob-lt-pg, var(--_ctm-tab-lt-pg, var(--_ctm-lt-pg)));
344
+
345
+ display: flex;
346
+ flex-direction: column;
347
+ --_sf-cd-gp: calc(var(--_sf-gp) * 0.5);
348
+
349
+ gap: var(
350
+ --_ctm-mob-dn-mp-wt-lt-mp-ad-tt-cr-sg,
351
+ var(--_ctm-tab-dn-mp-wt-lt-mp-ad-tt-cr-sg, var(--_ctm-dn-mp-wt-lt-mp-ad-tt-cr-sg))
352
+ );
353
+ // Alignment comes from the [data-text-container-alignment] rules above. It used to
354
+ // read the *spacing* variable here, which is a length and never valid for
355
+ // align-content, so the control did nothing.
356
+
357
+ width: 100%;
358
+ height: var(--_ctm-mob-lt-ht, var(--_ctm-tab-lt-ht, var(--_ctm-lt-ht)));
359
+ // Height is a fixed value from layout, so keep the border inside it rather than
360
+ // letting it push the widget past the size the user set.
361
+ box-sizing: border-box;
362
+
363
+ border-color: var(
364
+ --_ctm-mob-dn-mp-wt-br-cr,
365
+ var(--_ctm-tab-dn-mp-wt-br-cr, var(--_ctm-dn-mp-wt-br-cr))
366
+ );
367
+
368
+ border-style: var(
369
+ --_ctm-mob-dn-mp-wt-br-se,
370
+ var(--_ctm-tab-dn-mp-wt-br-se, var(--_ctm-dn-mp-wt-br-se))
371
+ );
372
+
373
+ border-width: var(
374
+ --_ctm-mob-dn-mp-wt-br-wh,
375
+ var(--_ctm-tab-dn-mp-wt-br-wh, var(--_ctm-dn-mp-wt-br-wh))
376
+ );
377
+
378
+ border-radius: var(
379
+ --_ctm-mob-dn-mp-wt-br-rs,
380
+ var(--_ctm-tab-dn-mp-wt-br-rs, var(--_ctm-dn-mp-wt-br-rs))
381
+ );
382
+
383
+ box-shadow: var(
384
+ --_show-shadow,
385
+ var(--_ctm-mob-dn-mp-wt-sw-ae, var(--_ctm-tab-dn-mp-wt-sw-ae, var(--_ctm-dn-mp-wt-sw-ae)))
386
+ var(--_ctm-mob-dn-mp-wt-sw-br, var(--_ctm-tab-dn-mp-wt-sw-br, var(--_ctm-dn-mp-wt-sw-br)))
387
+ var(--_ctm-mob-dn-mp-wt-sw-sd, var(--_ctm-tab-dn-mp-wt-sw-sd, var(--_ctm-dn-mp-wt-sw-sd)))
388
+ var(--_ctm-mob-dn-mp-wt-sw-cr, var(--_ctm-tab-dn-mp-wt-sw-cr, var(--_ctm-dn-mp-wt-sw-cr)))
389
+ );
390
+
391
+ .gallery-header {
392
+ // Text alignment is driven by [data-text-container-alignment] above. The
393
+ // gallery variable that used to sit here is never emitted for a map element.
394
+ box-sizing: border-box;
395
+
396
+ // line-height: var(--_ctm-dn-gy-lt-tt-ad-dn-sg, var(--_tst-dn-gy-lt-tt-ad-dn-sg));
397
+ display: flex;
398
+ flex-direction: column;
399
+
400
+ gap: var(
401
+ --_ctm-mob-dn-mp-wt-tt-cr-lt-te-ad-dn-sg,
402
+ var(--_ctm-tab-dn-mp-wt-tt-cr-lt-te-ad-dn-sg, var(--_ctm-dn-mp-wt-tt-cr-lt-te-ad-dn-sg))
403
+ );
404
+ padding-block: var(
405
+ --_ctm-mob-dn-mp-wt-tt-cr-lt-tt-vl-pg,
406
+ var(--_ctm-tab-dn-mp-wt-tt-cr-lt-tt-vl-pg, var(--_ctm-dn-mp-wt-tt-cr-lt-tt-vl-pg))
407
+ );
408
+ padding-inline: var(
409
+ --_ctm-mob-dn-mp-wt-tt-cr-lt-tt-hl-pg,
410
+ var(--_ctm-tab-dn-mp-wt-tt-cr-lt-tt-hl-pg, var(--_ctm-dn-mp-wt-tt-cr-lt-tt-hl-pg))
411
+ );
412
+ // design > Map Widget Text Container Design. This used to read a
413
+ // `...-tt-cr-lt-tt-cr-bd-cr` variable — the Text Container *Layout* prefix with a
414
+ // property that section has never had — so the Fill control did nothing.
415
+ background-color: var(
416
+ --_ctm-mob-dn-mp-wt-tt-cr-dn-bd-cr,
417
+ var(--_ctm-tab-dn-mp-wt-tt-cr-dn-bd-cr, var(--_ctm-dn-mp-wt-tt-cr-dn-bd-cr))
418
+ );
419
+
420
+ // Text Container Width. 100% is the previous behaviour, so an unset width
421
+ // still spans the container.
422
+ width: prepareMediaVariable(--_ctm-dn-mp-wt-lt-tt-cr-wh, 100%);
423
+ // ...but never wider than the widget. The control accepts a percentage of the
424
+ // widget and a raw length, and either can be dialled past the widget's own
425
+ // width — a percentage over 100, or a length longer than the widget. Both used
426
+ // to push the header (and the text painted on it) out over whatever sits to the
427
+ // right of the map. Clamping here rather than only capping the control also
428
+ // covers pages already saved with an oversized width.
429
+ max-width: 100%;
430
+ // Lets it shrink to that width beside the map — a flex item defaults to
431
+ // min-width:auto and refuses to go below its longest word.
432
+ min-width: 0;
433
+ // Never shrink below the wrapped text — the map absorbs the remaining height
434
+ // instead, so a taller heading does not overflow the widget.
435
+ flex: 0 0 auto;
436
+ border-color: var(
437
+ --_ctm-mob-dn-mp-wt-tt-cr-dn-br-cr,
438
+ var(--_ctm-tab-dn-mp-wt-tt-cr-dn-br-cr, var(--_ctm-dn-mp-wt-tt-cr-dn-br-cr))
439
+ );
440
+ border-style: var(
441
+ --_ctm-mob-dn-mp-wt-tt-cr-dn-br-se,
442
+ var(--_ctm-tab-dn-mp-wt-tt-cr-dn-br-se, var(--_ctm-dn-mp-wt-tt-cr-dn-br-se))
443
+ );
444
+ border-width: var(
445
+ --_ctm-mob-dn-mp-wt-tt-cr-dn-br-wh,
446
+ var(--_ctm-tab-dn-mp-wt-tt-cr-dn-br-wh, var(--_ctm-dn-mp-wt-tt-cr-dn-br-wh))
447
+ );
448
+ border-radius: var(
449
+ --_ctm-mob-dn-mp-wt-tt-cr-dn-br-rs,
450
+ var(--_ctm-tab-dn-mp-wt-tt-cr-dn-br-rs, var(--_ctm-dn-mp-wt-tt-cr-dn-br-rs))
451
+ );
452
+ box-shadow: var(
453
+ --_show-shadow,
454
+ var(
455
+ --_ctm-mob-dn-mp-wt-tt-cr-dn-sw-ae,
456
+ var(--_ctm-tab-dn-mp-wt-tt-cr-dn-sw-ae, var(--_ctm-dn-mp-wt-tt-cr-dn-sw-ae))
457
+ )
458
+ var(
459
+ --_ctm-mob-dn-mp-wt-tt-cr-dn-sw-br,
460
+ var(--_ctm-tab-dn-mp-wt-tt-cr-dn-sw-br, var(--_ctm-dn-mp-wt-tt-cr-dn-sw-br))
461
+ )
462
+ var(
463
+ --_ctm-mob-dn-mp-wt-tt-cr-dn-sw-sd,
464
+ var(--_ctm-tab-dn-mp-wt-tt-cr-dn-sw-sd, var(--_ctm-dn-mp-wt-tt-cr-dn-sw-sd))
465
+ )
466
+ var(
467
+ --_ctm-mob-dn-mp-wt-tt-cr-dn-sw-cr,
468
+ var(--_ctm-tab-dn-mp-wt-tt-cr-dn-sw-cr, var(--_ctm-dn-mp-wt-tt-cr-dn-sw-cr))
469
+ )
470
+ );
471
+
472
+ & h3 {
473
+ color: var(
474
+ --_ctm-mob-dn-mp-wt-cr,
475
+ var(--_ctm-tab-dn-mp-wt-cr, var(--_ctm-dn-mp-wt-cr, var(--_tst-dn-mp-wt-cr)))
476
+ );
477
+ font-family: var(
478
+ --_ctm-mob-dn-mp-wt-ft-fy,
479
+ var(--_ctm-tab-dn-mp-wt-ft-fy, var(--_ctm-dn-mp-wt-ft-fy, var(--_tst-dn-mp-wt-ft-fy)))
480
+ );
481
+ text-transform: var(
482
+ --_ctm-mob-dn-mp-wt-tt-tm,
483
+ var(--_ctm-tab-dn-mp-wt-tt-tm, var(--_ctm-dn-mp-wt-tt-tm, var(--_tst-dn-mp-wt-tt-tm)))
484
+ );
485
+ word-wrap: var(
486
+ --_ctm-mob-dn-mp-wt-wd-wp,
487
+ var(--_ctm-tab-dn-mp-wt-wd-wp, var(--_ctm-dn-mp-wt-wd-wp, break-word))
488
+ );
489
+ word-break: var(
490
+ --_ctm-mob-dn-mp-wt-wd-bk,
491
+ var(--_ctm-tab-dn-mp-wt-wd-bk, var(--_ctm-dn-mp-wt-wd-bk, var(--_tst-dn-mp-wt-wd-bk)))
492
+ );
493
+ font-size: var(
494
+ --_ctm-mob-dn-mp-wt-ft-se,
495
+ var(--_ctm-tab-dn-mp-wt-ft-se, var(--_ctm-dn-mp-wt-ft-se, var(--_tst-dn-mp-wt-ft-se)))
496
+ );
497
+ font-weight: var(
498
+ --_ctm-mob-dn-mp-wt-ft-wt,
499
+ var(--_ctm-tab-dn-mp-wt-ft-wt, var(--_ctm-dn-mp-wt-ft-wt, var(--_tst-dn-mp-wt-ft-wt)))
500
+ );
501
+ font-style: var(
502
+ --_ctm-mob-dn-mp-wt-ft-se-ic,
503
+ var(
504
+ --_ctm-tab-dn-mp-wt-ft-se-ic,
505
+ var(--_ctm-dn-mp-wt-ft-se-ic, var(--_tst-dn-mp-wt-ft-se-ic))
506
+ )
507
+ );
508
+ text-align: var(
509
+ --_ctm-mob-dn-mp-wt-tt-an,
510
+ var(--_ctm-tab-dn-mp-wt-tt-an, var(--_ctm-dn-mp-wt-tt-an, var(--_tst-dn-mp-wt-tt-an)))
511
+ );
512
+ letter-spacing: var(
513
+ --_ctm-mob-dn-mp-wt-lr-sg,
514
+ var(--_ctm-tab-dn-mp-wt-lr-sg, var(--_ctm-dn-mp-wt-lr-sg, var(--_tst-dn-mp-wt-lr-sg)))
515
+ );
516
+ line-height: var(
517
+ --_ctm-mob-dn-mp-wt-le-ht,
518
+ var(--_ctm-tab-dn-mp-wt-le-ht, var(--_ctm-dn-mp-wt-le-ht, var(--_tst-dn-mp-wt-le-ht)))
519
+ );
520
+ text-decoration: var(
521
+ --_ctm-mob-dn-mp-wt-ue,
522
+ var(--_ctm-tab-dn-mp-wt-ue, var(--_ctm-dn-mp-wt-ue, var(--_tst-dn-mp-wt-ue)))
523
+ );
524
+ }
525
+
526
+ & p {
527
+ color: var(
528
+ --_ctm-mob-dn-mp-wt-cr-dc,
529
+ var(--_ctm-tab-dn-mp-wt-cr-dc, var(--_ctm-dn-mp-wt-cr-dc, var(--_tst-dn-mp-wt-cr-dc)))
530
+ );
531
+ font-family: var(
532
+ --_ctm-mob-dn-mp-wt-ft-fy-dc,
533
+ var(
534
+ --_ctm-tab-dn-mp-wt-ft-fy-dc,
535
+ var(--_ctm-dn-mp-wt-ft-fy-dc, var(--_tst-dn-mp-wt-ft-fy-dc))
536
+ )
537
+ );
538
+ text-transform: var(
539
+ --_ctm-mob-dn-mp-wt-tt-tm-dc,
540
+ var(
541
+ --_ctm-tab-dn-mp-wt-tt-tm-dc,
542
+ var(--_ctm-dn-mp-wt-tt-tm-dc, var(--_tst-dn-mp-wt-tt-tm-dc))
543
+ )
544
+ );
545
+ word-wrap: var(
546
+ --_ctm-mob-dn-mp-wt-wd-wp-dc,
547
+ var(--_ctm-tab-dn-mp-wt-wd-wp-dc, var(--_ctm-dn-mp-wt-wd-wp-dc, break-word))
548
+ );
549
+ word-break: var(
550
+ --_ctm-mob-dn-mp-wt-wd-bk-dc,
551
+ var(
552
+ --_ctm-tab-dn-mp-wt-wd-bk-dc,
553
+ var(--_ctm-dn-mp-wt-wd-bk-dc, var(--_tst-dn-mp-wt-wd-bk-dc))
554
+ )
555
+ );
556
+ font-size: var(
557
+ --_ctm-mob-dn-mp-wt-ft-se-dc,
558
+ var(
559
+ --_ctm-tab-dn-mp-wt-ft-se-dc,
560
+ var(--_ctm-dn-mp-wt-ft-se-dc, var(--_tst-dn-mp-wt-ft-se-dc))
561
+ )
562
+ );
563
+ font-weight: var(
564
+ --_ctm-mob-dn-mp-wt-ft-wt-dc,
565
+ var(
566
+ --_ctm-tab-dn-mp-wt-ft-wt-dc,
567
+ var(--_ctm-dn-mp-wt-ft-wt-dc, var(--_tst-dn-mp-wt-ft-wt-dc))
568
+ )
569
+ );
570
+ font-style: var(
571
+ --_ctm-mob-dn-mp-wt-ft-se-ic-dc,
572
+ var(
573
+ --_ctm-tab-dn-mp-wt-ft-se-ic-dc,
574
+ var(--_ctm-dn-mp-wt-ft-se-ic-dc, var(--_tst-dn-mp-wt-ft-se-ic-dc))
575
+ )
576
+ );
577
+ text-align: var(
578
+ --_ctm-mob-dn-mp-wt-tt-an-dc,
579
+ var(
580
+ --_ctm-tab-dn-mp-wt-tt-an-dc,
581
+ var(--_ctm-dn-mp-wt-tt-an-dc, var(--_tst-dn-mp-wt-tt-an-dc))
582
+ )
583
+ );
584
+ letter-spacing: var(
585
+ --_ctm-mob-dn-mp-wt-lr-sg-dc,
586
+ var(
587
+ --_ctm-tab-dn-mp-wt-lr-sg-dc,
588
+ var(--_ctm-dn-mp-wt-lr-sg-dc, var(--_tst-dn-mp-wt-lr-sg-dc))
589
+ )
590
+ );
591
+ line-height: var(
592
+ --_ctm-mob-dn-mp-wt-le-ht-dc,
593
+ var(
594
+ --_ctm-tab-dn-mp-wt-le-ht-dc,
595
+ var(--_ctm-dn-mp-wt-le-ht-dc, var(--_tst-dn-mp-wt-le-ht-dc))
596
+ )
597
+ );
598
+ text-decoration: var(
599
+ --_ctm-mob-dn-mp-wt-ue-dc,
600
+ var(--_ctm-tab-dn-mp-wt-ue-dc, var(--_ctm-dn-mp-wt-ue-dc, var(--_tst-dn-mp-wt-ue-dc)))
601
+ );
602
+ }
603
+
604
+ // h3 {
605
+ // margin-bottom: var(--_mb-4);
606
+ // }
607
+ }
608
+
609
+ .img__overlay {
610
+ background: var(
611
+ --_ctm-mob-dn-ie-se-oy-cr,
612
+ var(--_ctm-tab-dn-ie-se-oy-cr, var(--_ctm-dn-ie-se-oy-cr, var(--_tst-dn-ie-se-oy-cr)))
613
+ );
614
+
615
+ height: 100%;
616
+ width: 100%;
617
+ position: absolute;
618
+ top: 0;
619
+ }
620
+ @keyframes scaleInOut {
621
+ 0% {
622
+ transform: scale(1);
623
+ }
624
+ 50% {
625
+ transform: scale(1.5);
626
+ }
627
+ 100% {
628
+ transform: scale(1);
629
+ }
630
+ }
631
+ // Sonar ripple: each ring fades in at the pin size, expands and fades out.
632
+ @keyframes sonar {
633
+ 0% {
634
+ transform: scale(1);
635
+ opacity: 0.6;
636
+ }
637
+ 100% {
638
+ // Expands to ~1.8x the pin — clearly visible motion but still tight to the
639
+ // pin (not spreading far, per the earlier "going very long" feedback).
640
+ transform: scale(1.8);
641
+ opacity: 0;
642
+ }
643
+ }
644
+ .hotspot__container {
645
+ position: absolute;
646
+ // The marker element is already anchored at the location's lat/lng, so the pin
647
+ // and the tooltip both sit at its origin and are placed from there. The 43%/12%
648
+ // that used to be here came from the image hotspot's static-image layout and
649
+ // means nothing for a marker.
650
+ top: 0;
651
+ left: 0;
652
+ .hotspot__main {
653
+ position: relative;
654
+
655
+ // Divi Pixel-style sonar: a single bordered ring centred on the pin that
656
+ // expands and fades out on a loop. Only the ring animates — the pin/icon is
657
+ // static and kept on top via z-index. Rendered in JS only when the animation
658
+ // toggle is on. Duration comes from the frequency control (2s if none set), so
659
+ // the user's ms value drives the speed.
660
+ .svg-sonar-container {
661
+ position: absolute;
662
+ top: 50%;
663
+ left: 50%;
664
+ width: prepareMediaVariable(--_ctm-dn-pn-se-ht-se);
665
+ height: prepareMediaVariable(--_ctm-dn-pn-se-ht-se);
666
+ translate: -50% -50%;
667
+ pointer-events: none;
668
+ z-index: 1;
669
+
670
+ .sonar-circle {
671
+ position: absolute;
672
+ inset: 0;
673
+ border-radius: 50%;
674
+ // Ring colour follows the pin's background colour; visible fallback so the
675
+ // ripple never renders invisibly if the background var isn't emitted.
676
+ border: 1px solid prepareMediaVariable(--_ctm-dn-pn-se-bd-cr, #243dc6);
677
+ opacity: 0;
678
+ animation: sonar prepareMediaVariable(--_ctm-dn-pn-se-an-fy, 2s) linear infinite;
679
+ }
680
+
681
+ // Square pins get matching square rings; circle (default) stays 50%.
682
+ &[data-hotspot-shape="square"] .sonar-circle {
683
+ border-radius: 0;
684
+ }
685
+ }
686
+
687
+ .hotspot {
688
+ // background: var(--_ctm-dn-ht-se-bd-cr);
689
+ // height: var(--_ctm-dn-tp-tt-dn-ft-se);
690
+ // width: var(--_ctm-dn-tp-tt-dn-ft-se);
691
+ position: absolute;
692
+ // Above the sonar rings (container is z-index 1), so the pin/icon stays on top.
693
+ z-index: 2;
694
+ cursor: pointer;
695
+ // width: var(--_ctm-dn-ht-se-ht-se);
696
+ // height: var(--_ctm-dn-ht-se-ht-se);
697
+ // background-color: var(--_ctm-dn-ht-se-bd-cr);
698
+ width: var(
699
+ --_ctm-mob-dn-pn-se-ht-se,
700
+ var(--_ctm-tab-dn-pn-se-ht-se, var(--_ctm-dn-pn-se-ht-se))
701
+ );
702
+ height: var(
703
+ --_ctm-mob-dn-pn-se-ht-se,
704
+ var(--_ctm-tab-dn-pn-se-ht-se, var(--_ctm-dn-pn-se-ht-se))
705
+ );
706
+
707
+ height: prepareMediaVariable(--_ctm-dn-pn-se-ht-se);
708
+ width: prepareMediaVariable(--_ctm-dn-pn-se-ht-se);
709
+
710
+ position: absolute;
711
+ cursor: pointer;
712
+
713
+ display: flex;
714
+ align-items: center;
715
+ top: 50%;
716
+ left: 50%;
717
+
718
+ translate: -50% -50%;
719
+ box-sizing: border-box;
720
+ justify-content: center;
721
+ box-shadow: var(
722
+ --_ctm-mob-dn-pn-se-sw-ae,
723
+ var(--_ctm-tab-dn-pn-se-sw-ae, var(--_ctm-dn-pn-se-sw-ae))
724
+ )
725
+ var(
726
+ --_ctm-mob-dn-pn-se-sw-br,
727
+ var(--_ctm-tab-dn-pn-se-sw-br, var(--_ctm-dn-pn-se-sw-br))
728
+ )
729
+ var(
730
+ --_ctm-mob-dn-pn-se-sw-sd,
731
+ var(--_ctm-tab-dn-pn-se-sw-sd, var(--_ctm-dn-pn-se-sw-sd))
732
+ )
733
+ var(
734
+ --_ctm-mob-dn-pn-se-sw-cr,
735
+ var(--_ctm-tab-dn-pn-se-sw-cr, var(--_ctm-dn-pn-se-sw-cr))
736
+ );
737
+
738
+ // Pin corners follow the Shape control only — Circle or Square. There is no
739
+ // separate radius control for pins, and this used to be applied as an inline
740
+ // style from MarkersComponent, which outranked every rule in this file.
741
+ &[data-hotspot-shape="circle"] {
742
+ border-radius: 50%;
743
+ }
744
+ &[data-hotspot-shape="square"] {
745
+ border-radius: 0;
746
+ }
747
+
748
+ svg {
749
+ width: prepareMediaVariable(--_ctm-dn-pn-se-in-se);
750
+ height: prepareMediaVariable(--_ctm-dn-pn-se-in-se);
751
+
752
+ path[fill] {
753
+ fill: prepareMediaVariable(--_ctm-dn-pn-se-in-c1);
754
+ }
755
+ path[stroke] {
756
+ stroke: prepareMediaVariable(--_ctm-dn-pn-se-in-c1);
757
+ // Overrides the stroke-width presentation attribute baked into the icon markup.
758
+ stroke-width: prepareMediaVariable(--_ctm-dn-pn-se-se-wh, 1.25);
759
+ }
760
+ }
761
+
762
+ // One gate for "this pin has a styled box": always true for a shape pin,
763
+ // and for an icon pin only while its Background toggle is on. It used to
764
+ // also match [data-show-animation="true"], which meant turning the
765
+ // background off did nothing as soon as the animation was enabled.
766
+ &[data-show-shape-styles="true"] {
767
+ background-color: var(
768
+ --_ctm-mob-dn-pn-se-bd-cr,
769
+ var(--_ctm-tab-dn-pn-se-bd-cr, var(--_ctm-dn-pn-se-bd-cr))
770
+ );
771
+
772
+ border-style: var(
773
+ --_ctm-mob-dn-pn-se-br-se,
774
+ var(--_ctm-tab-dn-pn-se-br-se, var(--_ctm-dn-pn-se-br-se))
775
+ );
776
+ border-color: var(
777
+ --_ctm-mob-dn-pn-se-br-cr,
778
+ var(--_ctm-tab-dn-pn-se-br-cr, var(--_ctm-dn-pn-se-br-cr))
779
+ );
780
+ border-width: var(
781
+ --_ctm-mob-dn-pn-se-br-wh,
782
+ var(--_ctm-tab-dn-pn-se-br-wh, var(--_ctm-dn-pn-se-br-wh))
783
+ );
784
+ // No border-radius here — it would land after the shape rules above and
785
+ // undo Circle. The Shape control is the only thing that rounds a pin.
786
+ // box-shadow is applied unconditionally above so it works for all pins,
787
+ // independent of this shape/animation gate.
788
+ }
789
+ }
790
+ }
791
+ }
792
+ .hotspot__tooltip {
793
+ --_sf-br-vl: var(--_ctm-dn-tp-dn-br-rs, 0px);
794
+ position: absolute;
795
+ background: prepareMediaVariable(--_ctm-dn-tp-dn-bd-cr);
796
+ z-index: 1000;
797
+ // Sizing follows the image hotspot: the user's width/height with a floor under
798
+ // them. The caps are viewport-relative on purpose — this element's containing
799
+ // block is the Google marker, which is effectively zero-sized, so a percentage
800
+ // max-width would resolve to 0 and clamp the tooltip down to its min instead of
801
+ // holding the size the user set. The viewport cap still stops a desktop-sized
802
+ // tooltip spilling off a phone screen.
803
+ width: prepareMediaVariable(--_ctm-dn-tp-dn-tp-wh);
804
+ height: prepareMediaVariable(--_ctm-dn-tp-dn-tp-ht);
805
+ min-width: 100px;
806
+ min-height: 100px;
807
+ max-width: calc(100vw - 32px);
808
+ max-height: calc(100vh - 32px);
809
+ box-sizing: border-box;
810
+ // Placement comes from the [data-hotspot-position] transforms above, measured
811
+ // from the marker origin.
812
+ top: 0;
813
+ left: 0;
814
+ // No overflow here on purpose. The tip is an ::after sitting 10px outside the
815
+ // box, so any overflow value other than visible clips it away — that's what was
816
+ // eating the caret. The image hotspot scrolls its inner wrapper instead, and
817
+ // .text_box below does the same.
818
+ overflow: visible;
819
+
820
+ padding: 4px 8px;
821
+ display: flex;
822
+ justify-content: prepareMediaVariable(--_ctm-dn-tp-dn-hl-at);
823
+ align-items: prepareMediaVariable(--_ctm-dn-tp-dn-vl-at);
824
+
825
+ &::after {
826
+ content: "";
827
+ position: absolute;
828
+
829
+ border-width: 5px;
830
+ border-style: solid;
831
+ }
832
+ // The scroll container, mirroring .tooltip__image_with_text on the image
833
+ // hotspot: long content scrolls in here rather than on the tooltip itself.
834
+ .text_box {
835
+ overflow-y: auto;
836
+ max-width: 100%;
837
+ width: 100%;
838
+ height: 100%;
839
+ // This wrapper fills the tooltip on both axes, so the justify-content /
840
+ // align-items set on .hotspot__tooltip above have nothing left to move —
841
+ // that is why both alignment controls looked dead. Same trap the image
842
+ // hotspot hit with .tooltip__image_with_text (hotspot.scss): the alignment
843
+ // has to be re-applied on the box that actually holds the title and the
844
+ // description. The stack is a column here, so the *vertical* control drives
845
+ // justify-content and the *horizontal* one drives align-items — the opposite
846
+ // mapping to the tooltip itself.
847
+ display: flex;
848
+ flex-direction: column;
849
+ justify-content: prepareMediaVariable(--_ctm-dn-tp-dn-vl-at);
850
+ align-items: prepareMediaVariable(--_ctm-dn-tp-dn-hl-at);
851
+
852
+ // align-items shrinks each child to its content width, so the text still
853
+ // needs a cap to wrap against instead of overflowing the tooltip.
854
+ > * {
855
+ max-width: 100%;
856
+ }
857
+
858
+ h6 {
859
+ font-size: prepareMediaVariable(--_ctm-dn-tp-tt-dn-ft-se);
860
+ font-family: prepareMediaVariable(--_ctm-dn-tp-tt-dn-ft-fy);
861
+ color: prepareMediaVariable(--_ctm-dn-tp-tt-dn-cr);
862
+
863
+ font-weight: prepareMediaVariable(--_ctm-dn-tp-tt-dn-ft-wt);
864
+ font-style: prepareMediaVariable(--_ctm-dn-tp-tt-dn-ft-se-ic);
865
+ text-align: prepareMediaVariable(--_ctm-dn-tp-tt-dn-tt-an);
866
+ letter-spacing: prepareMediaVariable(--_ctm-dn-tp-tt-dn-lr-sg);
867
+ line-height: prepareMediaVariable(--_ctm-dn-tp-tt-dn-le-ht);
868
+ // Underline and line-through are two independent toggles writing two
869
+ // variables, so they have to be composed, not chained. `var(--lh, <ue>)`
870
+ // never reaches its fallback: the schema declares linethrough with an
871
+ // empty value, and stylesToString emits it as `--…-lh: ;`, which is a
872
+ // *defined* empty value rather than a missing one — so var() substitutes
873
+ // nothing and the whole declaration is thrown away. Listing both keywords
874
+ // on text-decoration-line lets either, both or neither apply; when both
875
+ // resolve empty the declaration is invalid and the initial `none` stands,
876
+ // which is exactly the both-off case.
877
+ text-decoration-line: var(
878
+ --_ctm-mob-dn-tp-tt-dn-ue,
879
+ var(--_ctm-tab-dn-tp-tt-dn-ue, var(--_ctm-dn-tp-tt-dn-ue,))
880
+ )
881
+ var(
882
+ --_ctm-mob-dn-tp-tt-dn-lh,
883
+ var(--_ctm-tab-dn-tp-tt-dn-lh, var(--_ctm-dn-tp-tt-dn-lh,))
884
+ );
885
+ // Same text properties the text element exposes (see text-temp-v2.scss).
886
+ text-transform: prepareMediaVariable(--_ctm-dn-tp-tt-dn-tt-tm, none);
887
+ word-wrap: prepareMediaVariable(--_ctm-dn-tp-tt-dn-wd-wp, normal);
888
+ word-break: prepareMediaVariable(--_ctm-dn-tp-tt-dn-wd-bk, normal);
889
+
890
+ // Text Overflow toggle in the typography panel; the line count rides in on
891
+ // --_sf-line-clamp from the element.
892
+ &#{$overflowSelector} {
893
+ @include restrictToLinesShow(#{var(--_sf-line-clamp, 1)});
894
+ }
895
+ }
896
+ p {
897
+ font-size: prepareMediaVariable(--_ctm-dn-tp-tt-dn-ft-se-dc);
898
+ color: prepareMediaVariable(--_ctm-dn-tp-tt-dn-cr-dc);
899
+ font-family: prepareMediaVariable(--_ctm-dn-tp-tt-dn-ft-fy-dc);
900
+ font-weight: prepareMediaVariable(--_ctm-dn-tp-tt-dn-ft-wt-dc);
901
+ font-style: prepareMediaVariable(--_ctm-dn-tp-tt-dn-ft-se-ic-dc);
902
+ text-align: prepareMediaVariable(--_ctm-dn-tp-tt-dn-tt-an-dc);
903
+ letter-spacing: prepareMediaVariable(--_ctm-dn-tp-tt-dn-lr-sg-dc);
904
+ line-height: prepareMediaVariable(--_ctm-dn-tp-tt-dn-le-ht-dc);
905
+ // Same composition as the title above.
906
+ text-decoration-line: var(
907
+ --_ctm-mob-dn-tp-tt-dn-ue-dc,
908
+ var(--_ctm-tab-dn-tp-tt-dn-ue-dc, var(--_ctm-dn-tp-tt-dn-ue-dc,))
909
+ )
910
+ var(
911
+ --_ctm-mob-dn-tp-tt-dn-lh-dc,
912
+ var(--_ctm-tab-dn-tp-tt-dn-lh-dc, var(--_ctm-dn-tp-tt-dn-lh-dc,))
913
+ );
914
+ text-transform: prepareMediaVariable(--_ctm-dn-tp-tt-dn-tt-tm-dc, none);
915
+ word-wrap: prepareMediaVariable(--_ctm-dn-tp-tt-dn-wd-wp-dc, normal);
916
+ word-break: prepareMediaVariable(--_ctm-dn-tp-tt-dn-wd-bk-dc, normal);
917
+
918
+ &#{$overflowSelector} {
919
+ @include restrictToLinesShow(#{var(--_sf-line-clamp-desc, 1)});
920
+ }
921
+ }
922
+ }
923
+ .tooltip__image {
924
+ width: 100%;
925
+ background-color: var(--_ctm-dn-tp-ie-dn-bd-cr);
926
+ transition: transform 0.3s ease-in-out;
927
+ display: flex;
928
+ justify-content: var(--_ctm-dn-tp-ie-dn-hl-at);
929
+ align-items: var(--_ctm-dn-tp-ie-dn-vl-at);
930
+ img {
931
+ object-fit: var(--_ctm-dn-tp-ie-dn-ft-os);
932
+ height: -webkit-fill-available;
933
+ max-width: 100%;
934
+ rotate: calc(var(--_ctm-dn-tp-ie-dn-ud) * 1deg);
935
+ scale: var(--_ctm-dn-tp-ie-dn-zm-ie);
936
+
937
+ &:hover {
938
+ &[data-on-img-hover="Zoom In"] {
939
+ transform: scale(1.08);
940
+ }
941
+ &[data-on-img-hover="Zoom Out"] {
942
+ transform: scale(0.92);
943
+ }
944
+ }
945
+ }
946
+ }
947
+ }
948
+ // .hotspot__main {
949
+ // position: relative;
950
+ // .hotspot {
951
+ // background: var(
952
+ // --_ctm-mob-dn-pn-se-bd-cr,
953
+ // var(--_ctm-tab-dn-pn-se-bd-cr, var(--_ctm-dn-pn-se-bd-cr))
954
+ // );
955
+ // border-style: var(
956
+ // --_ctm-mob-dn-pn-se-br-se,
957
+ // var(--_ctm-tab-dn-pn-se-br-se, var(--_ctm-dn-pn-se-br-se))
958
+ // );
959
+ // border-color: var(
960
+ // --_ctm-mob-dn-pn-se-br-cr,
961
+ // var(--_ctm-tab-dn-pn-se-br-cr, var(--_ctm-dn-pn-se-br-cr))
962
+ // );
963
+ // border-width: var(
964
+ // --_ctm-mob-dn-pn-se-br-wh,
965
+ // var(--_ctm-tab-dn-pn-se-br-wh, var(--_ctm-dn-pn-se-br-wh))
966
+ // );
967
+ // border-radius: var(
968
+ // --_ctm-mob-dn-pn-se-br-rs,
969
+ // var(--_ctm-tab-dn-pn-se-br-rs, var(--_ctm-dn-pn-se-br-rs))
970
+ // );
971
+ // box-shadow: var(
972
+ // --_show-shadow,
973
+ // var(
974
+ // --_ctm-mob-dn-pn-se-sw-ae,
975
+ // var(--_ctm-tab-dn-pn-se-sw-ae, var(--_ctm-dn-pn-se-sw-ae))
976
+ // )
977
+ // var(
978
+ // --_ctm-mob-dn-pn-se-sw-br,
979
+ // var(--_ctm-tab-dn-pn-se-sw-br, var(--_ctm-dn-pn-se-sw-br))
980
+ // )
981
+ // var(
982
+ // --_ctm-mob-dn-pn-se-sw-sd,
983
+ // var(--_ctm-tab-dn-pn-se-sw-sd, var(--_ctm-dn-pn-se-sw-sd))
984
+ // )
985
+ // var(
986
+ // --_ctm-mob-dn-pn-se-sw-cr,
987
+ // var(--_ctm-tab-dn-pn-se-sw-cr, var(--_ctm-dn-pn-se-sw-cr))
988
+ // )
989
+ // );
990
+
991
+ // position: absolute;
992
+ // cursor: pointer;
993
+ // width: var(
994
+ // --_ctm-mob-dn-pn-se-ht-se,
995
+ // var(--_ctm-tab-dn-pn-se-ht-se, var(--_ctm-dn-pn-se-ht-se))
996
+ // );
997
+ // height: var(
998
+ // --_ctm-mob-dn-pn-se-ht-se,
999
+ // var(--_ctm-tab-dn-pn-se-ht-se, var(--_ctm-dn-pn-se-ht-se))
1000
+ // );
1001
+ // background-color: var(
1002
+ // --_ctm-mob-dn-pn-se-bd-cr,
1003
+ // var(--_ctm-tab-dn-pn-se-bd-cr, var(--_ctm-dn-pn-se-bd-cr))
1004
+ // );
1005
+
1006
+ // display: flex;
1007
+ // align-items: center;
1008
+ // top: 50%;
1009
+ // left: 50%;
1010
+ // transform: translate(-50%, -50%);
1011
+ // justify-content: center;
1012
+ // animation: scaleInOut
1013
+ // var(
1014
+ // --_ctm-mob-dn-pn-se-an-fy,
1015
+ // var(--_ctm-tab-dn-pn-se-an-fy, var(--_ctm-dn-pn-se-an-fy))
1016
+ // )
1017
+ // infinite;
1018
+
1019
+ // .icon {
1020
+ // display: var(--_sf-show-icon-ff, flex);
1021
+
1022
+ // svg {
1023
+ // width: var(
1024
+ // --_ctm-mob-dn-pn-se-in-se,
1025
+ // var(--_ctm-tab-dn-pn-se-in-se, var(--_ctm-dn-pn-se-in-se))
1026
+ // );
1027
+ // height: var(
1028
+ // --_ctm-mob-dn-pn-se-in-se,
1029
+ // var(--_ctm-tab-dn-pn-se-in-se, var(--_ctm-dn-pn-se-in-se))
1030
+ // );
1031
+
1032
+ // path {
1033
+ // stroke: var(
1034
+ // --_ctm-mob-dn-pn-se-in-c1,
1035
+ // var(--_ctm-tab-dn-pn-se-in-c1, var(--_ctm-dn-pn-se-in-c1))
1036
+ // );
1037
+ // Overrides the stroke-width presentation attribute baked into the icon markup.
1038
+ stroke-width: prepareMediaVariable(--_ctm-dn-pn-se-se-wh, 1.25);
1039
+ // fill: var(
1040
+ // --_ctm-mob-dn-pn-se-in-c1,
1041
+ // var(--_ctm-tab-dn-pn-se-in-c1, var(--_ctm-dn-pn-se-in-c1))
1042
+ // );
1043
+ // }
1044
+ // }
1045
+ // }
1046
+ // }
1047
+ // .hotspot__tooltip {
1048
+ // position: absolute;
1049
+ // background: var(
1050
+ // --_ctm-mob-dn-tp-dn-bd-cr,
1051
+ // var(--_ctm-tab-dn-tp-dn-bd-cr, var(--_ctm-dn-tp-dn-bd-cr))
1052
+ // );
1053
+ // border-style: var(
1054
+ // --_ctm-mob-dn-tp-dn-br-se,
1055
+ // var(--_ctm-tab-dn-tp-dn-br-se, var(--_ctm-dn-tp-dn-br-se))
1056
+ // );
1057
+ // border-color: var(
1058
+ // --_ctm-mob-dn-tp-dn-br-cr,
1059
+ // var(--_ctm-tab-dn-tp-dn-br-cr, var(--_ctm-dn-tp-dn-br-cr))
1060
+ // );
1061
+ // border-width: var(
1062
+ // --_ctm-mob-dn-tp-dn-br-wh,
1063
+ // var(--_ctm-tab-dn-tp-dn-br-wh, var(--_ctm-dn-tp-dn-br-wh))
1064
+ // );
1065
+ // border-radius: var(
1066
+ // --_ctm-mob-dn-tp-dn-br-rs,
1067
+ // var(--_ctm-tab-dn-tp-dn-br-rs, var(--_ctm-dn-tp-dn-br-rs))
1068
+ // );
1069
+
1070
+ // box-shadow: var(
1071
+ // --_show-shadow,
1072
+ // var(
1073
+ // --_ctm-mob-dn-tp-dn-sw-ae,
1074
+ // var(--_ctm-tab-dn-tp-dn-sw-ae, var(--_ctm-dn-tp-dn-sw-ae))
1075
+ // )
1076
+ // var(
1077
+ // --_ctm-mob-dn-tp-dn-sw-br,
1078
+ // var(--_ctm-tab-dn-tp-dn-sw-br, var(--_ctm-dn-tp-dn-sw-br))
1079
+ // )
1080
+ // var(
1081
+ // --_ctm-mob-dn-tp-dn-sw-sd,
1082
+ // var(--_ctm-tab-dn-tp-dn-sw-sd, var(--_ctm-dn-tp-dn-sw-sd))
1083
+ // )
1084
+ // var(
1085
+ // --_ctm-mob-dn-tp-dn-sw-cr,
1086
+ // var(--_ctm-tab-dn-tp-dn-sw-cr, var(--_ctm-dn-tp-dn-sw-cr))
1087
+ // )
1088
+ // );
1089
+
1090
+ // z-index: 1000;
1091
+ // min-width: 100px;
1092
+ // width: var(
1093
+ // --_ctm-mob-dn-tp-dn-tp-wh,
1094
+ // var(--_ctm-tab-dn-tp-dn-tp-wh, var(--_ctm-dn-tp-dn-tp-wh))
1095
+ // );
1096
+ // min-height: 100px;
1097
+ // height: var(
1098
+ // --_ctm-mob-dn-tp-dn-tp-ht,
1099
+ // var(--_ctm-tab-dn-tp-dn-tp-ht, var(--_ctm-dn-tp-dn-tp-ht))
1100
+ // );
1101
+
1102
+ // // border-radius: 4px;
1103
+ // // transform: translate(-10%, -130%);
1104
+ // left: -10px;
1105
+ // bottom: 7px;
1106
+ // padding: 4px 8px;
1107
+ // display: flex;
1108
+ // justify-content: var(
1109
+ // --_ctm-mob-dn-tp-dn-hl-at,
1110
+ // var(--_ctm-tab-dn-tp-dn-hl-at, var(--_ctm-dn-tp-dn-hl-at))
1111
+ // );
1112
+ // align-items: var(
1113
+ // --_ctm-mob-dn-tp-dn-vl-at,
1114
+ // var(--_ctm-tab-dn-tp-dn-vl-at, var(--_ctm-dn-tp-dn-vl-at))
1115
+ // );
1116
+
1117
+ // &::after {
1118
+ // content: "";
1119
+ // position: absolute;
1120
+ // top: 100%;
1121
+ // left: 20px;
1122
+ // margin-left: -5px;
1123
+ // border-width: 5px;
1124
+ // border-style: solid;
1125
+ // border-color: var(
1126
+ // --_ctm-mob-dn-tp-dn-bd-cr,
1127
+ // var(--_ctm-tab-dn-tp-dn-bd-cr, var(--_ctm-dn-tp-dn-bd-cr))
1128
+ // )
1129
+ // transparent transparent transparent;
1130
+ // }
1131
+ // span {
1132
+ // svg {
1133
+ // width: var(
1134
+ // --_ctm-mob-dn-pn-se-in-se,
1135
+ // var(--_ctm-tab-dn-pn-se-in-se, var(--_ctm-dn-pn-se-in-se))
1136
+ // );
1137
+ // height: var(
1138
+ // --_ctm-mob-dn-pn-se-in-se,
1139
+ // var(--_ctm-tab-dn-pn-se-in-se, var(--_ctm-dn-pn-se-in-se))
1140
+ // );
1141
+ // path {
1142
+ // stroke: var(
1143
+ // --_ctm-mob-dn-pn-se-in-c1,
1144
+ // var(--_ctm-tab-dn-pn-se-in-c1, var(--_ctm-dn-pn-se-in-c1))
1145
+ // );
1146
+ // Overrides the stroke-width presentation attribute baked into the icon markup.
1147
+ stroke-width: prepareMediaVariable(--_ctm-dn-pn-se-se-wh, 1.25);
1148
+ // }
1149
+ // }
1150
+ // }
1151
+
1152
+ // .text_box {
1153
+ // h6 {
1154
+ // font-size: var(
1155
+ // --_ctm-mob-dn-tp-tt-dn-ft-se,
1156
+ // var(--_ctm-tab-dn-tp-tt-dn-ft-se, var(--_ctm-dn-tp-tt-dn-ft-se))
1157
+ // );
1158
+ // font-family: var(
1159
+ // --_ctm-mob-dn-tp-tt-dn-ft-fy,
1160
+ // var(--_ctm-tab-dn-tp-tt-dn-ft-fy, var(--_ctm-dn-tp-tt-dn-ft-fy))
1161
+ // );
1162
+ // color: var(
1163
+ // --_ctm-mob-dn-tp-tt-dn-cr,
1164
+ // var(--_ctm-tab-dn-tp-tt-dn-cr, var(--_ctm-dn-tp-tt-dn-cr))
1165
+ // );
1166
+
1167
+ // font-weight: var(
1168
+ // --_ctm-mob-dn-tp-tt-dn-ft-wt,
1169
+ // var(--_ctm-tab-dn-tp-tt-dn-ft-wt, var(--_ctm-dn-tp-tt-dn-ft-wt))
1170
+ // );
1171
+ // font-style: var(
1172
+ // --_ctm-mob-dn-tp-tt-dn-ft-se-ic,
1173
+ // var(--_ctm-tab-dn-tp-tt-dn-ft-se-ic, var(--_ctm-dn-tp-tt-dn-ft-se-ic))
1174
+ // );
1175
+ // text-align: var(
1176
+ // --_ctm-mob-dn-tp-tt-dn-tt-an,
1177
+ // var(--_ctm-tab-dn-tp-tt-dn-tt-an, var(--_ctm-dn-tp-tt-dn-tt-an))
1178
+ // );
1179
+ // letter-spacing: var(
1180
+ // --_ctm-mob-dn-tp-tt-dn-lr-sg,
1181
+ // var(--_ctm-tab-dn-tp-tt-dn-lr-sg, var(--_ctm-dn-tp-tt-dn-lr-sg))
1182
+ // );
1183
+ // line-height: var(
1184
+ // --_ctm-mob-dn-tp-tt-dn-le-ht,
1185
+ // var(--_ctm-tab-dn-tp-tt-dn-le-ht, var(--_ctm-dn-tp-tt-dn-le-ht))
1186
+ // );
1187
+ // text-decoration: var(
1188
+ // --_ctm-mob-dn-tp-tt-dn-ue,
1189
+ // var(--_ctm-tab-dn-tp-tt-dn-ue, var(--_ctm-dn-tp-tt-dn-ue))
1190
+ // );
1191
+ // }
1192
+
1193
+ // p {
1194
+ // font-size: var(
1195
+ // --_ctm-mob-dn-tp-tt-dn-ft-se-dc,
1196
+ // var(--_ctm-tab-dn-tp-tt-dn-ft-se-dc, var(--_ctm-dn-tp-tt-dn-ft-se-dc))
1197
+ // );
1198
+ // color: var(
1199
+ // --_ctm-mob-dn-tp-tt-dn-cr-dc,
1200
+ // var(--_ctm-tab-dn-tp-tt-dn-cr-dc, var(--_ctm-dn-tp-tt-dn-cr-dc))
1201
+ // );
1202
+ // font-family: var(
1203
+ // --_ctm-mob-dn-tp-tt-dn-ft-fy-dc,
1204
+ // var(--_ctm-tab-dn-tp-tt-dn-ft-fy-dc, var(--_ctm-dn-tp-tt-dn-ft-fy-dc))
1205
+ // );
1206
+ // font-weight: var(
1207
+ // --_ctm-mob-dn-tp-tt-dn-ft-wt-dc,
1208
+ // var(--_ctm-tab-dn-tp-tt-dn-ft-wt-dc, var(--_ctm-dn-tp-tt-dn-ft-wt-dc))
1209
+ // );
1210
+ // font-style: var(
1211
+ // --_ctm-mob-dn-tp-tt-dn-ft-se-ic-dc,
1212
+ // var(--_ctm-tab-dn-tp-tt-dn-ft-se-ic-dc, var(--_ctm-dn-tp-tt-dn-ft-se-ic-dc))
1213
+ // );
1214
+ // text-align: var(
1215
+ // --_ctm-mob-dn-tp-tt-dn-tt-an-dc,
1216
+ // var(--_ctm-tab-dn-tp-tt-dn-tt-an-dc, var(--_ctm-dn-tp-tt-dn-tt-an-dc))
1217
+ // );
1218
+ // letter-spacing: var(
1219
+ // --_ctm-mob-dn-tp-tt-dn-lr-sg-dc,
1220
+ // var(--_ctm-tab-dn-tp-tt-dn-lr-sg-dc, var(--_ctm-dn-tp-tt-dn-lr-sg-dc))
1221
+ // );
1222
+ // line-height: var(
1223
+ // --_ctm-mob-dn-tp-tt-dn-le-ht-dc,
1224
+ // var(--_ctm-tab-dn-tp-tt-dn-le-ht-dc, var(--_ctm-dn-tp-tt-dn-le-ht-dc))
1225
+ // );
1226
+ // text-decoration: var(
1227
+ // --_ctm-mob-dn-tp-tt-dn-ue-dc,
1228
+ // var(--_ctm-tab-dn-tp-tt-dn-ue-dc, var(--_ctm-dn-tp-tt-dn-ue-dc))
1229
+ // );
1230
+ // }
1231
+ // }
1232
+ // .tooltip__image {
1233
+ // background-color: var(
1234
+ // --_ctm-mob-dn-tp-ie-dn-bd-cr,
1235
+ // var(--_ctm-tab-dn-tp-ie-dn-bd-cr, var(--_ctm-dn-tp-ie-dn-bd-cr))
1236
+ // );
1237
+ // transition: transform 0.3s ease-in-out;
1238
+ // border-style: var(
1239
+ // --_ctm-mob-dn-tp-ie-dn-br-se,
1240
+ // var(--_ctm-tab-dn-tp-ie-dn-br-se, var(--_ctm-dn-tp-ie-dn-br-se))
1241
+ // );
1242
+ // border-color: var(
1243
+ // --_ctm-mob-dn-tp-ie-dn-br-cr,
1244
+ // var(--_ctm-tab-dn-tp-ie-dn-br-cr, var(--_ctm-dn-tp-ie-dn-br-cr))
1245
+ // );
1246
+ // border-width: var(
1247
+ // --_ctm-mob-dn-tp-ie-dn-br-wh,
1248
+ // var(--_ctm-tab-dn-tp-ie-dn-br-wh, var(--_ctm-dn-tp-ie-dn-br-wh))
1249
+ // );
1250
+ // border-radius: var(
1251
+ // --_ctm-mob-dn-tp-ie-dn-br-rs,
1252
+ // var(--_ctm-tab-dn-tp-ie-dn-br-rs, var(--_ctm-dn-tp-ie-dn-br-rs))
1253
+ // );
1254
+ // box-shadow: var(
1255
+ // --_show-shadow,
1256
+ // var(
1257
+ // --_ctm-mob-dn-tp-ie-dn-sw-ae,
1258
+ // var(--_ctm-tab-dn-tp-ie-dn-sw-ae, var(--_ctm-dn-tp-ie-dn-sw-ae))
1259
+ // )
1260
+ // var(
1261
+ // --_ctm-mob-dn-tp-ie-dn-sw-br,
1262
+ // var(--_ctm-tab-dn-tp-ie-dn-sw-br, var(--_ctm-dn-tp-ie-dn-sw-br))
1263
+ // )
1264
+ // var(
1265
+ // --_ctm-mob-dn-tp-ie-dn-sw-sd,
1266
+ // var(--_ctm-tab-dn-tp-ie-dn-sw-sd, var(--_ctm-dn-tp-ie-dn-sw-sd))
1267
+ // )
1268
+ // var(
1269
+ // --_ctm-mob-dn-tp-ie-dn-sw-cr,
1270
+ // var(--_ctm-tab-dn-tp-ie-dn-sw-cr, var(--_ctm-dn-tp-ie-dn-sw-cr))
1271
+ // )
1272
+ // );
1273
+ // display: flex;
1274
+ // justify-content: var(
1275
+ // --_ctm-mob-dn-tp-ie-dn-hl-at,
1276
+ // var(--_ctm-tab-dn-tp-ie-dn-hl-at, var(--_ctm-dn-tp-ie-dn-hl-at))
1277
+ // );
1278
+ // align-items: var(
1279
+ // --_ctm-mob-dn-tp-ie-dn-vl-at,
1280
+ // var(--_ctm-tab-dn-tp-ie-dn-vl-at, var(--_ctm-dn-tp-ie-dn-vl-at))
1281
+ // );
1282
+
1283
+ // img {
1284
+ // object-fit: var(
1285
+ // --_ctm-mob-dn-tp-ie-dn-ft-os,
1286
+ // var(--_ctm-tab-dn-tp-ie-dn-ft-os, var(--_ctm-dn-tp-ie-dn-ft-os))
1287
+ // );
1288
+ // max-width: 100%;
1289
+ // rotate: calc(
1290
+ // var(
1291
+ // --_ctm-mob-dn-tp-ie-dn-ud,
1292
+ // var(--_ctm-tab-dn-tp-ie-dn-ud, var(--_ctm-dn-tp-ie-dn-ud))
1293
+ // ) *
1294
+ // 1deg
1295
+ // );
1296
+ // scale: var(
1297
+ // --_ctm-mob-dn-tp-ie-dn-zm-ie,
1298
+ // var(--_ctm-tab-dn-tp-ie-dn-zm-ie, var(--_ctm-dn-tp-ie-dn-zm-ie))
1299
+ // );
1300
+ // }
1301
+ // }
1302
+ // }
1303
+ // }
1304
+
1305
+ .map {
1306
+ width: 100%;
1307
+ height: 100%;
1308
+ min-width: 0;
1309
+ // Yields height to the heading rather than demanding the full 100%.
1310
+ flex: 1 1 auto;
1311
+ min-height: 0;
1312
+ // design > Map Style. The map box paints its own border from that section's
1313
+ // scope (`--_ctm-dn-mp-se-*`), independent of the widget's border on
1314
+ // `.map-element` and the header's on `.gallery-header`. `overflow: hidden` so a
1315
+ // rounded corner actually clips the tiles inside it.
1316
+ overflow: hidden;
1317
+ border-color: prepareMediaVariable(--_ctm-dn-mp-ie-br-cr);
1318
+ border-style: prepareMediaVariable(--_ctm-dn-mp-ie-br-se);
1319
+ border-width: prepareMediaVariable(--_ctm-dn-mp-ie-br-wh);
1320
+ border-radius: prepareMediaVariable(--_ctm-dn-mp-ie-br-rs);
1321
+ img {
1322
+ width: 100%;
1323
+ height: 100%;
1324
+ }
1325
+ }
1326
+ }
1327
+
1328
+ // "Show Border" / "Show Shadow" switches. Each design section paints its box from
1329
+ // CSS variables, so the switches reach the stylesheet as data attributes and the
1330
+ // matching border-width / box-shadow is zeroed here. Kept at the end of the block
1331
+ // and matched to the same selector depth as the rules they override — anywhere
1332
+ // earlier and the section rules above would win the tie on source order.
1333
+ &[data-map-widget-border="false"] .map-element {
1334
+ border-width: 0;
1335
+ border-style: none;
1336
+ }
1337
+ &[data-map-widget-shadow="false"] .map-element {
1338
+ box-shadow: none;
1339
+ }
1340
+ &[data-text-container-border="false"] .map-element > .gallery-header {
1341
+ border-width: 0;
1342
+ border-style: none;
1343
+ }
1344
+ &[data-text-container-shadow="false"] .map-element > .gallery-header {
1345
+ box-shadow: none;
1346
+ }
1347
+ &[data-pin-border="false"] .map-element .hotspot__container .hotspot__main .hotspot {
1348
+ border-width: 0;
1349
+ border-style: none;
1350
+ }
1351
+ &[data-pin-shadow="false"] .map-element .hotspot__container .hotspot__main .hotspot {
1352
+ box-shadow: none;
1353
+ }
1354
+ &[data-map-border="false"] .map-element .map {
1355
+ border-width: 0;
1356
+ border-style: none;
1357
+ }
1358
+ }
1359
+ }