@salla.sa/twilight-components 2.14.348 → 2.14.350

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (158) hide show
  1. package/dist/cjs/{filepond-plugin-file-poster-CStjlaHV.js → filepond-plugin-file-poster-DUgrMVOZ.js} +1 -1
  2. package/dist/cjs/{filepond-plugin-file-validate-size-DrcM89vc.js → filepond-plugin-file-validate-size-C14LEY_l.js} +1 -1
  3. package/dist/cjs/{filepond-plugin-file-validate-type-DnIoL6mq.js → filepond-plugin-file-validate-type-AbHwQAHY.js} +1 -1
  4. package/dist/cjs/{filepond-plugin-image-edit-DLV0U0gb.js → filepond-plugin-image-edit-5ydXOhOa.js} +1 -1
  5. package/dist/cjs/{filepond-plugin-image-exif-orientation-tPl3p3z_.js → filepond-plugin-image-exif-orientation-D0oIUOy-.js} +1 -1
  6. package/dist/cjs/{filepond-plugin-image-preview-WTfIQM6C.js → filepond-plugin-image-preview-Bf_VUYwr.js} +1 -1
  7. package/dist/cjs/{filepond-B_sfbQx7.js → filepond-qUaAgMcd.js} +1 -1
  8. package/dist/cjs/{index-CkpcUCU5.js → index-BRdJtc1o.js} +2 -2
  9. package/dist/cjs/{index-4jrFyN8u.js → index-DKEcPhG9.js} +1 -1
  10. package/dist/cjs/loader.cjs.js +2 -2
  11. package/dist/cjs/salla-accordion_62.cjs.entry.js +100 -28
  12. package/dist/cjs/salla-advertisement.cjs.entry.js +1 -1
  13. package/dist/cjs/salla-app-install-alert.cjs.entry.js +1 -1
  14. package/dist/cjs/salla-apps-icons.cjs.entry.js +1 -1
  15. package/dist/cjs/salla-cart-item-offers.cjs.entry.js +1 -1
  16. package/dist/cjs/salla-conditional-offer.cjs.entry.js +1 -1
  17. package/dist/cjs/salla-contacts.cjs.entry.js +1 -1
  18. package/dist/cjs/salla-custom-fields.cjs.entry.js +1 -1
  19. package/dist/cjs/salla-filters-widget.cjs.entry.js +1 -1
  20. package/dist/cjs/salla-filters.cjs.entry.js +1 -1
  21. package/dist/cjs/salla-hook.cjs.entry.js +1 -1
  22. package/dist/cjs/salla-installment.cjs.entry.js +1 -1
  23. package/dist/cjs/salla-loyalty-prize-item.cjs.entry.js +1 -1
  24. package/dist/cjs/salla-loyalty-program.cjs.entry.js +1 -1
  25. package/dist/cjs/salla-metadata.cjs.entry.js +1 -1
  26. package/dist/cjs/salla-notification-item.cjs.entry.js +1 -1
  27. package/dist/cjs/salla-notifications.cjs.entry.js +1 -1
  28. package/dist/cjs/salla-offer.cjs.entry.js +1 -1
  29. package/dist/cjs/salla-order-details-multiple-bundle-product.cjs.entry.js +1 -11
  30. package/dist/cjs/salla-order-details-options.cjs.entry.js +1 -1
  31. package/dist/cjs/salla-order-details.cjs.entry.js +1 -1
  32. package/dist/cjs/salla-order-summary.cjs.entry.js +1 -1
  33. package/dist/cjs/salla-order-totals-card.cjs.entry.js +1 -1
  34. package/dist/cjs/salla-orders.cjs.entry.js +1 -1
  35. package/dist/cjs/salla-payments.cjs.entry.js +1 -1
  36. package/dist/cjs/salla-price-range.cjs.entry.js +1 -1
  37. package/dist/cjs/salla-review-card.cjs.entry.js +1 -1
  38. package/dist/cjs/salla-reviews-page.cjs.entry.js +1 -1
  39. package/dist/cjs/salla-reviews.cjs.entry.js +1 -1
  40. package/dist/cjs/salla-social.cjs.entry.js +1 -1
  41. package/dist/cjs/salla-tiered-offer.cjs.entry.js +1 -1
  42. package/dist/cjs/salla-tooltip.cjs.entry.js +1 -1
  43. package/dist/cjs/salla-trust-badges.cjs.entry.js +1 -1
  44. package/dist/cjs/salla-verify.cjs.entry.js +1 -1
  45. package/dist/cjs/salla-wallet.cjs.entry.js +1 -1
  46. package/dist/cjs/twilight.cjs.js +2 -2
  47. package/dist/cjs/{vanilla-picker-BBejdpPH.js → vanilla-picker-CYHmsxIw.js} +1 -1
  48. package/dist/collection/components/salla-count-down/salla-count-down.js +125 -1
  49. package/dist/collection/components/salla-order-details/salla-order-details-multiple-bundle-product.js +0 -10
  50. package/dist/collection/components/salla-product-options/salla-product-options.js +44 -10
  51. package/dist/collection/components/salla-slider/salla-slider.css +4 -0
  52. package/dist/collection/components/salla-slider/salla-slider.js +35 -7
  53. package/dist/components/index.js +2 -2
  54. package/dist/components/salla-count-down2.js +24 -2
  55. package/dist/components/salla-order-details-multiple-bundle-product2.js +0 -10
  56. package/dist/components/salla-product-options2.js +44 -10
  57. package/dist/components/salla-slider2.js +36 -8
  58. package/dist/esm/{filepond-BBd4zIxi.js → filepond-DDOVDszb.js} +1 -1
  59. package/dist/esm/{filepond-plugin-file-poster-Vvhvcuu3.js → filepond-plugin-file-poster-DK5QZAmf.js} +1 -1
  60. package/dist/esm/{filepond-plugin-file-validate-size-NvdGUEr-.js → filepond-plugin-file-validate-size-BoUr1T-f.js} +1 -1
  61. package/dist/esm/{filepond-plugin-file-validate-type-BwVZhOLd.js → filepond-plugin-file-validate-type-USfq-Egq.js} +1 -1
  62. package/dist/esm/{filepond-plugin-image-edit-BOgZn2vW.js → filepond-plugin-image-edit-BzsOppMe.js} +1 -1
  63. package/dist/esm/{filepond-plugin-image-exif-orientation-BmbDj4hl.js → filepond-plugin-image-exif-orientation-D2x3fkHF.js} +1 -1
  64. package/dist/esm/{filepond-plugin-image-preview-CDsLWAPe.js → filepond-plugin-image-preview-CAbtIGaT.js} +1 -1
  65. package/dist/esm/{index-LmL2BolE.js → index-CkAdPgup.js} +2 -2
  66. package/dist/esm/{index-BhHl4h44.js → index-unlRcuKr.js} +1 -1
  67. package/dist/esm/loader.js +3 -3
  68. package/dist/esm/salla-accordion_62.entry.js +100 -28
  69. package/dist/esm/salla-advertisement.entry.js +1 -1
  70. package/dist/esm/salla-app-install-alert.entry.js +1 -1
  71. package/dist/esm/salla-apps-icons.entry.js +1 -1
  72. package/dist/esm/salla-cart-item-offers.entry.js +1 -1
  73. package/dist/esm/salla-conditional-offer.entry.js +1 -1
  74. package/dist/esm/salla-contacts.entry.js +1 -1
  75. package/dist/esm/salla-custom-fields.entry.js +1 -1
  76. package/dist/esm/salla-filters-widget.entry.js +1 -1
  77. package/dist/esm/salla-filters.entry.js +1 -1
  78. package/dist/esm/salla-hook.entry.js +1 -1
  79. package/dist/esm/salla-installment.entry.js +1 -1
  80. package/dist/esm/salla-loyalty-prize-item.entry.js +1 -1
  81. package/dist/esm/salla-loyalty-program.entry.js +1 -1
  82. package/dist/esm/salla-metadata.entry.js +1 -1
  83. package/dist/esm/salla-notification-item.entry.js +1 -1
  84. package/dist/esm/salla-notifications.entry.js +1 -1
  85. package/dist/esm/salla-offer.entry.js +1 -1
  86. package/dist/esm/salla-order-details-multiple-bundle-product.entry.js +1 -11
  87. package/dist/esm/salla-order-details-options.entry.js +1 -1
  88. package/dist/esm/salla-order-details.entry.js +1 -1
  89. package/dist/esm/salla-order-summary.entry.js +1 -1
  90. package/dist/esm/salla-order-totals-card.entry.js +1 -1
  91. package/dist/esm/salla-orders.entry.js +1 -1
  92. package/dist/esm/salla-payments.entry.js +1 -1
  93. package/dist/esm/salla-price-range.entry.js +1 -1
  94. package/dist/esm/salla-review-card.entry.js +1 -1
  95. package/dist/esm/salla-reviews-page.entry.js +1 -1
  96. package/dist/esm/salla-reviews.entry.js +1 -1
  97. package/dist/esm/salla-social.entry.js +1 -1
  98. package/dist/esm/salla-tiered-offer.entry.js +1 -1
  99. package/dist/esm/salla-tooltip.entry.js +1 -1
  100. package/dist/esm/salla-trust-badges.entry.js +1 -1
  101. package/dist/esm/salla-verify.entry.js +1 -1
  102. package/dist/esm/salla-wallet.entry.js +1 -1
  103. package/dist/esm/twilight.js +3 -3
  104. package/dist/esm/{vanilla-picker-nCA1ATQw.js → vanilla-picker-7Rdeecyw.js} +1 -1
  105. package/dist/twilight/{p-133f1a48.entry.js → p-0162ae20.entry.js} +1 -1
  106. package/dist/twilight/{p-388fb59e.entry.js → p-0587a19b.entry.js} +1 -1
  107. package/dist/twilight/{p-312c1af1.entry.js → p-0eb554c0.entry.js} +1 -1
  108. package/dist/twilight/{p-8c111815.entry.js → p-100f7787.entry.js} +1 -1
  109. package/dist/twilight/{p-45cd70b8.entry.js → p-17618bb7.entry.js} +1 -1
  110. package/dist/twilight/{p-2ed7cfba.entry.js → p-1d2131a2.entry.js} +1 -1
  111. package/dist/twilight/{p-3d69e45a.entry.js → p-25e36e28.entry.js} +1 -1
  112. package/dist/twilight/{p-07add349.entry.js → p-478033b6.entry.js} +1 -1
  113. package/dist/twilight/{p-6c648552.entry.js → p-4bb743c7.entry.js} +1 -1
  114. package/dist/twilight/{p-c38c65f0.entry.js → p-50098fb9.entry.js} +1 -1
  115. package/dist/twilight/{p-74aaf06c.entry.js → p-50e1eb99.entry.js} +1 -1
  116. package/dist/twilight/{p-c302d3e3.entry.js → p-57bf3aff.entry.js} +1 -1
  117. package/dist/twilight/{p-fbbd8d5d.entry.js → p-6c0dd774.entry.js} +1 -1
  118. package/dist/twilight/{p-f1f60ef7.entry.js → p-7c33b8f3.entry.js} +1 -1
  119. package/dist/twilight/{p-d2ed15e9.entry.js → p-815175b1.entry.js} +1 -1
  120. package/dist/twilight/p-82f05641.entry.js +4 -0
  121. package/dist/twilight/{p-b30a12dc.entry.js → p-843a8d82.entry.js} +1 -1
  122. package/dist/twilight/p-8565cac6.entry.js +4 -0
  123. package/dist/twilight/{p-48b90fb3.entry.js → p-9b1184eb.entry.js} +1 -1
  124. package/dist/twilight/{p-v9xIxXO9.js → p-BCXFmuAu.js} +1 -1
  125. package/dist/twilight/{p-TSs7NqKJ.js → p-BHSXg2s-.js} +1 -1
  126. package/dist/twilight/{p-D1_qMmD0.js → p-BXAV6QCo.js} +1 -1
  127. package/dist/twilight/{p-CIEz2m31.js → p-BY-pqCWB.js} +1 -1
  128. package/dist/twilight/{p-Bf4kQRcH.js → p-BgVF6sgk.js} +1 -1
  129. package/dist/twilight/p-Ciq2A6DK.js +9 -0
  130. package/dist/twilight/{p-LmL2BolE.js → p-CkAdPgup.js} +1 -1
  131. package/dist/twilight/{p-xUcnsSlW.js → p-DGD3SzSN.js} +1 -1
  132. package/dist/twilight/{p-qNQwLhxq.js → p-De1xuTRp.js} +1 -1
  133. package/dist/twilight/{p-c0pjDpvN.js → p-DhexS4-2.js} +1 -1
  134. package/dist/twilight/{p-4d47725f.entry.js → p-a4b3ddc4.entry.js} +1 -1
  135. package/dist/twilight/{p-549ff403.entry.js → p-a61b0f9c.entry.js} +1 -1
  136. package/dist/twilight/{p-7c85a102.entry.js → p-aa32cabd.entry.js} +1 -1
  137. package/dist/twilight/{p-0aef5345.entry.js → p-abcf3b2d.entry.js} +1 -1
  138. package/dist/twilight/{p-63e9750c.entry.js → p-affbe255.entry.js} +1 -1
  139. package/dist/twilight/{p-06956c1d.entry.js → p-b5b851dc.entry.js} +1 -1
  140. package/dist/twilight/{p-bcec0cf0.entry.js → p-b6cddbff.entry.js} +1 -1
  141. package/dist/twilight/{p-09dceb55.entry.js → p-b8872e5f.entry.js} +1 -1
  142. package/dist/twilight/{p-cd2c9076.entry.js → p-b8e7613a.entry.js} +1 -1
  143. package/dist/twilight/{p-f74f1591.entry.js → p-b9648b3c.entry.js} +1 -1
  144. package/dist/twilight/{p-966ed241.entry.js → p-bd0fda0b.entry.js} +1 -1
  145. package/dist/twilight/{p-03870195.entry.js → p-c18da320.entry.js} +1 -1
  146. package/dist/twilight/{p-950f9a87.entry.js → p-c4f190b2.entry.js} +1 -1
  147. package/dist/twilight/{p-4cd30c07.entry.js → p-c5ac1d40.entry.js} +1 -1
  148. package/dist/twilight/{p-23ff2132.entry.js → p-d72fc67d.entry.js} +1 -1
  149. package/dist/twilight/{p-9f39c553.entry.js → p-e5dc45dc.entry.js} +1 -1
  150. package/dist/twilight/twilight.esm.js +1 -1
  151. package/dist/types/components/salla-count-down/salla-count-down.d.ts +22 -0
  152. package/dist/types/components/salla-order-details/salla-order-details-multiple-bundle-product.d.ts +0 -1
  153. package/dist/types/components/salla-slider/salla-slider.d.ts +7 -1
  154. package/dist/types/components.d.ts +48 -0
  155. package/package.json +5 -5
  156. package/dist/twilight/p-2c9d0518.entry.js +0 -4
  157. package/dist/twilight/p-2gPrnQD6.js +0 -9
  158. package/dist/twilight/p-fff8923d.entry.js +0 -4
@@ -2,6 +2,7 @@
2
2
  * Crafted with ❤ by Salla
3
3
  */
4
4
  import { proxyCustomElement, HTMLElement, h, Host } from '@stencil/core/internal/client';
5
+ import { d as defineCustomElement$1 } from './salla-button2.js';
5
6
 
6
7
  const sallaCountDownCss = "";
7
8
 
@@ -135,6 +136,16 @@ const SallaCountDown = /*@__PURE__*/ proxyCustomElement(class SallaCountDown ext
135
136
  this.normalizedPreOrder?.availability_date &&
136
137
  this.renderPreOrderToBeAvailableOn(), this.renderPreOrderCountDown()));
137
138
  }
139
+ renderPrefixText() {
140
+ if (!this.prefixText)
141
+ return null;
142
+ return h("span", { class: "s-count-down-prefix-text" }, this.prefixText);
143
+ }
144
+ renderButton() {
145
+ if (!this.withButton || !this.buttonText)
146
+ return null;
147
+ return h("salla-button", { color: "primary", size: "medium", href: this.buttonHref }, this.buttonIcon ? h("i", { class: this.buttonIcon }) : null, h("span", null, this.buttonText));
148
+ }
138
149
  renderContent() {
139
150
  if (!this.date)
140
151
  return null;
@@ -147,12 +158,18 @@ const SallaCountDown = /*@__PURE__*/ proxyCustomElement(class SallaCountDown ext
147
158
  return this.renderCountDown();
148
159
  }
149
160
  render() {
150
- return (h(Host, { key: '96bba6312e710673e1f249cabecfc8756fac5c0e', class: `s-count-down-wrapper ${this.preOrder && this.isValidDate(this.date) ? 's-count-down-pre-order' : ''}` }, this.renderContent(), this.offerEnded && this.renderOfferEnded()));
161
+ return (h(Host, { key: '11e7cf7cf77bbde82d990107b7ccda8f1fc9ad6f', class: `s-count-down-wrapper ${this.preOrder && this.isValidDate(this.date) ? 's-count-down-pre-order' : ''} ${this.horizontal ? 's-count-down-horizontal' : ''} ${this.withButton ? 's-count-down-with-button' : ''}` }, this.renderPrefixText(), this.renderContent(), this.offerEnded && this.renderOfferEnded(), this.renderButton()));
151
162
  }
152
163
  static get style() { return sallaCountDownCss; }
153
164
  }, [0, "salla-count-down", {
154
165
  "date": [1],
155
166
  "preOrder": [1, "pre-order"],
167
+ "horizontal": [4],
168
+ "withButton": [4, "with-button"],
169
+ "prefixText": [1, "prefix-text"],
170
+ "buttonHref": [1, "button-href"],
171
+ "buttonText": [1, "button-text"],
172
+ "buttonIcon": [1, "button-icon"],
156
173
  "boxed": [4],
157
174
  "size": [1],
158
175
  "color": [1],
@@ -178,13 +195,18 @@ function defineCustomElement() {
178
195
  if (typeof customElements === "undefined") {
179
196
  return;
180
197
  }
181
- const components = ["salla-count-down"];
198
+ const components = ["salla-count-down", "salla-button"];
182
199
  components.forEach(tagName => { switch (tagName) {
183
200
  case "salla-count-down":
184
201
  if (!customElements.get(tagName)) {
185
202
  customElements.define(tagName, SallaCountDown);
186
203
  }
187
204
  break;
205
+ case "salla-button":
206
+ if (!customElements.get(tagName)) {
207
+ defineCustomElement$1();
208
+ }
209
+ break;
188
210
  } });
189
211
  }
190
212
  defineCustomElement();
@@ -48,16 +48,6 @@ const SallaproductDetailsMultipleBundleProduct = /*@__PURE__*/ proxyCustomElemen
48
48
  }
49
49
  return this.productDetails?.options?.length > 0;
50
50
  }
51
- renderProductPrice() {
52
- if (!this.productDetails) {
53
- return null;
54
- }
55
- const { is_on_sale, sale_price, regular_price, price } = this.productDetails;
56
- if (is_on_sale && sale_price) {
57
- return (h("div", null, h("span", { class: "s-order-details-product-price s-order-details-product-price-sale" }, h("span", { innerHTML: salla.money(sale_price) })), regular_price && (h("span", { class: "s-order-details-product-regular-price" }, h("span", { innerHTML: salla.money(regular_price) })))));
58
- }
59
- return (h("span", { class: "s-order-details-product-price" }, h("span", { innerHTML: salla.money(price) })));
60
- }
61
51
  renderOptions() {
62
52
  if (!this.productDetails?.options?.length) {
63
53
  return null;
@@ -558,19 +558,53 @@ const SallaProductOptions = /*@__PURE__*/ proxyCustomElement(class SallaProductO
558
558
  }, []);
559
559
  }
560
560
  componentDidLoad() {
561
- if (this.optionsData?.length === 0 && !this.optionsData.some(option => option.type === DisplayType.DONATION)) {
561
+ if (!this.optionsData?.length) {
562
562
  return;
563
563
  }
564
- const selectedDonationOption = this.optionsData.find(option => option.type === DisplayType.DONATION)?.details.find(detail => detail.is_selected);
565
- if (!selectedDonationOption) {
566
- return;
564
+ // Handle donation options
565
+ const selectedDonationOption = this.optionsData.find(option => option.type === DisplayType.DONATION)?.details?.find(detail => detail.is_selected);
566
+ if (selectedDonationOption) {
567
+ setTimeout(() => {
568
+ salla.event.emit('product-options::donation-changed', {
569
+ id: this.productId,
570
+ price: selectedDonationOption.additional_price
571
+ });
572
+ }, 1000);
573
+ }
574
+ // Handle pre-selected options on product page
575
+ // Call salla.product.getPrice() directly to avoid triggering form validation which causes unwanted scroll
576
+ if (!salla.url.is_page("cart")) {
577
+ const pricingOptionTypes = [
578
+ DisplayType.SINGLE_OPTION,
579
+ DisplayType.MULTIPLE_OPTIONS,
580
+ DisplayType.COLOR,
581
+ DisplayType.THUMBNAIL,
582
+ DisplayType.DONATION,
583
+ DisplayType.DIGITAL_CARD_VALUE,
584
+ DisplayType.COUNTRY
585
+ ];
586
+ const hasPreSelectedPricingOption = this.optionsData.some(option => pricingOptionTypes.includes(option.type) &&
587
+ option.details?.some(detail => detail.is_selected));
588
+ if (hasPreSelectedPricingOption) {
589
+ // Use requestAnimationFrame to ensure DOM is fully painted before accessing form
590
+ requestAnimationFrame(() => {
591
+ try {
592
+ const form = this.host.closest('form');
593
+ if (!form)
594
+ return;
595
+ // Validate form belongs to this product to avoid conflicts on complex pages
596
+ const formData = new FormData(form);
597
+ const formProductId = formData.get('id') || formData.get('product_id');
598
+ if (formProductId && String(formProductId) !== String(this.productId))
599
+ return;
600
+ salla.product.getPrice(formData);
601
+ }
602
+ catch (e) {
603
+ salla.log('Error updating price for pre-selected options:', e);
604
+ }
605
+ });
606
+ }
567
607
  }
568
- setTimeout(() => {
569
- salla.event.emit('product-options::donation-changed', {
570
- id: this.productId,
571
- price: selectedDonationOption.additional_price
572
- });
573
- }, 1000);
574
608
  }
575
609
  /**
576
610
  * Enable user-initiated validation mode so invalid fields will scroll into view
@@ -9788,7 +9788,7 @@ function EffectCards({
9788
9788
  const modules = [Virtual, Keyboard, Mousewheel, Navigation, Pagination, Scrollbar, Parallax, Zoom, Controller, A11y, History, HashNavigation, Autoplay, Thumb, freeMode, Grid, Manipulation, EffectFade, EffectCube, EffectFlip, EffectCoverflow, EffectCreative, EffectCards];
9789
9789
  Swiper.use(modules);
9790
9790
 
9791
- const sallaSliderCss = "/**\n * Swiper 12.1.0\n * Most modern mobile touch slider and framework with hardware accelerated transitions\n * https://swiperjs.com\n *\n * Copyright 2014-2026 Vladimir Kharlampidi\n *\n * Released under the MIT License\n *\n * Released on: January 28, 2026\n */\n\n:root {\n --swiper-theme-color: #007aff;\n /*\n --swiper-preloader-color: var(--swiper-theme-color);\n --swiper-wrapper-transition-timing-function: initial;\n */\n}\n:host {\n position: relative;\n display: block;\n margin-left: auto;\n margin-right: auto;\n z-index: 1;\n}\n.swiper {\n margin-left: auto;\n margin-right: auto;\n position: relative;\n overflow: hidden;\n list-style: none;\n padding: 0;\n /* Fix of Webkit flickering */\n z-index: 1;\n display: block;\n}\n.swiper-vertical > .swiper-wrapper {\n flex-direction: column;\n}\n.swiper-wrapper {\n position: relative;\n width: 100%;\n height: 100%;\n z-index: 1;\n display: flex;\n transition-property: transform;\n transition-timing-function: var(--swiper-wrapper-transition-timing-function, initial);\n box-sizing: content-box;\n}\n.swiper-android .swiper-slide,\n.swiper-ios .swiper-slide,\n.swiper-wrapper {\n transform: translate3d(0px, 0, 0);\n}\n.swiper-horizontal {\n touch-action: pan-y;\n}\n.swiper-vertical {\n touch-action: pan-x;\n}\n.swiper-slide {\n flex-shrink: 0;\n width: 100%;\n height: 100%;\n position: relative;\n transition-property: transform;\n display: block;\n}\n.swiper-slide-invisible-blank {\n visibility: hidden;\n}\n/* Auto Height */\n.swiper-autoheight,\n.swiper-autoheight .swiper-slide {\n height: auto;\n}\n.swiper-autoheight .swiper-wrapper {\n align-items: flex-start;\n transition-property: transform, height;\n}\n.swiper-backface-hidden .swiper-slide {\n transform: translateZ(0);\n backface-visibility: hidden;\n}\n/* 3D Effects */\n.swiper-3d.swiper-css-mode .swiper-wrapper {\n perspective: 1200px;\n}\n.swiper-3d .swiper-wrapper {\n transform-style: preserve-3d;\n}\n.swiper-3d {\n perspective: 1200px;\n .swiper-slide,\n .swiper-cube-shadow {\n transform-style: preserve-3d;\n }\n}\n\n/* CSS Mode */\n.swiper-css-mode {\n > .swiper-wrapper {\n overflow: auto;\n scrollbar-width: none; /* For Firefox */\n -ms-overflow-style: none; /* For Internet Explorer and Edge */\n &::-webkit-scrollbar {\n display: none;\n }\n }\n > .swiper-wrapper > .swiper-slide {\n scroll-snap-align: start start;\n }\n &.swiper-horizontal {\n > .swiper-wrapper {\n scroll-snap-type: x mandatory;\n }\n > .swiper-wrapper > .swiper-slide:first-child {\n margin-inline-start: var(--swiper-slides-offset-before);\n scroll-margin-inline-start: var(--swiper-slides-offset-before);\n }\n > .swiper-wrapper > .swiper-slide:last-child {\n margin-inline-end: var(--swiper-slides-offset-after);\n }\n }\n &.swiper-vertical {\n > .swiper-wrapper {\n scroll-snap-type: y mandatory;\n }\n > .swiper-wrapper > .swiper-slide:first-child {\n margin-block-start: var(--swiper-slides-offset-before);\n scroll-margin-block-start: var(--swiper-slides-offset-before);\n }\n > .swiper-wrapper > .swiper-slide:last-child {\n margin-block-end: var(--swiper-slides-offset-after);\n }\n }\n &.swiper-free-mode {\n > .swiper-wrapper {\n scroll-snap-type: none;\n }\n > .swiper-wrapper > .swiper-slide {\n scroll-snap-align: none;\n }\n }\n &.swiper-centered {\n > .swiper-wrapper::before {\n content: '';\n flex-shrink: 0;\n order: 9999;\n }\n > .swiper-wrapper > .swiper-slide {\n scroll-snap-align: center center;\n scroll-snap-stop: always;\n }\n }\n &.swiper-centered.swiper-horizontal {\n > .swiper-wrapper > .swiper-slide:first-child {\n margin-inline-start: var(--swiper-centered-offset-before);\n }\n > .swiper-wrapper::before {\n height: 100%;\n min-height: 1px;\n width: var(--swiper-centered-offset-after);\n }\n }\n &.swiper-centered.swiper-vertical {\n > .swiper-wrapper > .swiper-slide:first-child {\n margin-block-start: var(--swiper-centered-offset-before);\n }\n > .swiper-wrapper::before {\n width: 100%;\n min-width: 1px;\n height: var(--swiper-centered-offset-after);\n }\n }\n}\n\n/* Slide styles start */\n/* 3D Shadows */\n.swiper-3d {\n .swiper-slide-shadow,\n .swiper-slide-shadow-left,\n .swiper-slide-shadow-right,\n .swiper-slide-shadow-top,\n .swiper-slide-shadow-bottom,\n .swiper-slide-shadow,\n .swiper-slide-shadow-left,\n .swiper-slide-shadow-right,\n .swiper-slide-shadow-top,\n .swiper-slide-shadow-bottom {\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n pointer-events: none;\n z-index: 10;\n }\n .swiper-slide-shadow {\n background: rgba(0, 0, 0, 0.15);\n }\n .swiper-slide-shadow-left {\n background-image: linear-gradient(to left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));\n }\n .swiper-slide-shadow-right {\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));\n }\n .swiper-slide-shadow-top {\n background-image: linear-gradient(to top, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));\n }\n .swiper-slide-shadow-bottom {\n background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));\n }\n}\n.swiper-lazy-preloader {\n width: 42px;\n height: 42px;\n position: absolute;\n left: 50%;\n top: 50%;\n margin-left: -21px;\n margin-top: -21px;\n z-index: 10;\n transform-origin: 50%;\n box-sizing: border-box;\n border: 4px solid var(--swiper-preloader-color, var(--swiper-theme-color));\n border-radius: 50%;\n border-top-color: transparent;\n}\n.swiper:not(.swiper-watch-progress),\n.swiper-watch-progress .swiper-slide-visible {\n .swiper-lazy-preloader {\n animation: swiper-preloader-spin 1s infinite linear;\n }\n}\n.swiper-lazy-preloader-white {\n --swiper-preloader-color: #fff;\n}\n.swiper-lazy-preloader-black {\n --swiper-preloader-color: #000;\n}\n@keyframes swiper-preloader-spin {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n/* Slide styles end */\n\n.swiper-virtual .swiper-slide {\n -webkit-backface-visibility: hidden;\n transform: translateZ(0);\n}\n.swiper-virtual.swiper-css-mode {\n .swiper-wrapper::after {\n content: '';\n position: absolute;\n left: 0;\n top: 0;\n pointer-events: none;\n }\n}\n.swiper-virtual.swiper-css-mode.swiper-horizontal {\n .swiper-wrapper::after {\n height: 1px;\n width: var(--swiper-virtual-size);\n }\n}\n\n.swiper-virtual.swiper-css-mode.swiper-vertical {\n .swiper-wrapper::after {\n width: 1px;\n height: var(--swiper-virtual-size);\n }\n}\n\n\n\n:root {\n --swiper-navigation-size: 44px;\n /*\n --swiper-navigation-top-offset: 50%;\n --swiper-navigation-sides-offset: 4px;\n --swiper-navigation-color: var(--swiper-theme-color);\n */\n}\n.swiper-button-prev,\n.swiper-button-next {\n position: absolute;\n\n width: var(--swiper-navigation-size);\n height: var(--swiper-navigation-size);\n\n z-index: 10;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--swiper-navigation-color, var(--swiper-theme-color));\n &.swiper-button-disabled {\n opacity: 0.35;\n cursor: auto;\n pointer-events: none;\n }\n &.swiper-button-hidden {\n opacity: 0;\n cursor: auto;\n pointer-events: none;\n }\n .swiper-navigation-disabled & {\n display: none !important;\n }\n svg {\n width: 100%;\n height: 100%;\n object-fit: contain;\n transform-origin: center;\n fill: currentColor;\n pointer-events: none;\n }\n}\n\n.swiper-button-lock {\n display: none;\n}\n\n.swiper-button-prev,\n.swiper-button-next {\n top: var(--swiper-navigation-top-offset, 50%);\n margin-top: calc(0px - (var(--swiper-navigation-size) / 2));\n}\n.swiper-button-prev {\n left: var(--swiper-navigation-sides-offset, 4px);\n right: auto;\n .swiper-navigation-icon {\n transform: rotate(180deg);\n }\n}\n.swiper-button-next {\n right: var(--swiper-navigation-sides-offset, 4px);\n left: auto;\n}\n.swiper-horizontal {\n .swiper-button-prev,\n .swiper-button-next,\n ~ .swiper-button-prev,\n ~ .swiper-button-next {\n top: var(--swiper-navigation-top-offset, 50%);\n margin-top: calc(0px - (var(--swiper-navigation-size) / 2));\n margin-left: 0;\n }\n .swiper-button-prev,\n & ~ .swiper-button-prev,\n &.swiper-rtl .swiper-button-next,\n &.swiper-rtl ~ .swiper-button-next {\n left: var(--swiper-navigation-sides-offset, 4px);\n right: auto;\n }\n .swiper-button-next,\n & ~ .swiper-button-next,\n &.swiper-rtl .swiper-button-prev,\n &.swiper-rtl ~ .swiper-button-prev {\n right: var(--swiper-navigation-sides-offset, 4px);\n left: auto;\n }\n .swiper-button-prev,\n & ~ .swiper-button-prev,\n &.swiper-rtl .swiper-button-next,\n &.swiper-rtl ~ .swiper-button-next {\n .swiper-navigation-icon {\n transform: rotate(180deg);\n }\n }\n &.swiper-rtl .swiper-button-prev,\n &.swiper-rtl ~ .swiper-button-prev {\n .swiper-navigation-icon {\n transform: rotate(0deg);\n }\n }\n}\n.swiper-vertical {\n .swiper-button-prev,\n .swiper-button-next,\n ~ .swiper-button-prev,\n ~ .swiper-button-next {\n left: var(--swiper-navigation-top-offset, 50%);\n right: auto;\n margin-left: calc(0px - (var(--swiper-navigation-size) / 2));\n margin-top: 0;\n }\n .swiper-button-prev,\n ~ .swiper-button-prev {\n top: var(--swiper-navigation-sides-offset, 4px);\n bottom: auto;\n .swiper-navigation-icon {\n transform: rotate(-90deg);\n }\n }\n .swiper-button-next,\n ~ .swiper-button-next {\n bottom: var(--swiper-navigation-sides-offset, 4px);\n top: auto;\n .swiper-navigation-icon {\n transform: rotate(90deg);\n }\n }\n}\n\n:root {\n /*\n --swiper-pagination-color: var(--swiper-theme-color);\n --swiper-pagination-left: auto;\n --swiper-pagination-right: 8px;\n --swiper-pagination-bottom: 8px;\n --swiper-pagination-top: auto;\n --swiper-pagination-fraction-color: inherit;\n --swiper-pagination-progressbar-bg-color: rgba(0,0,0,0.25);\n --swiper-pagination-progressbar-size: 4px;\n --swiper-pagination-bullet-size: 8px;\n --swiper-pagination-bullet-width: 8px;\n --swiper-pagination-bullet-height: 8px;\n --swiper-pagination-bullet-border-radius: 50%;\n --swiper-pagination-bullet-inactive-color: #000;\n --swiper-pagination-bullet-inactive-opacity: 0.2;\n --swiper-pagination-bullet-opacity: 1;\n --swiper-pagination-bullet-horizontal-gap: 4px;\n --swiper-pagination-bullet-vertical-gap: 6px;\n */\n}\n.swiper-pagination {\n position: absolute;\n text-align: center;\n transition: 300ms opacity;\n transform: translate3d(0, 0, 0);\n z-index: 10;\n &.swiper-pagination-hidden {\n opacity: 0;\n }\n .swiper-pagination-disabled > &,\n &.swiper-pagination-disabled {\n display: none !important;\n }\n}\n/* Common Styles */\n.swiper-pagination-fraction,\n.swiper-pagination-custom,\n.swiper-horizontal > .swiper-pagination-bullets,\n.swiper-pagination-bullets.swiper-pagination-horizontal {\n bottom: var(--swiper-pagination-bottom, 8px);\n top: var(--swiper-pagination-top, auto);\n left: 0;\n width: 100%;\n}\n/* Bullets */\n.swiper-pagination-bullets-dynamic {\n overflow: hidden;\n font-size: 0;\n .swiper-pagination-bullet {\n transform: scale(0.33);\n position: relative;\n }\n .swiper-pagination-bullet-active {\n transform: scale(1);\n }\n .swiper-pagination-bullet-active-main {\n transform: scale(1);\n }\n .swiper-pagination-bullet-active-prev {\n transform: scale(0.66);\n }\n .swiper-pagination-bullet-active-prev-prev {\n transform: scale(0.33);\n }\n .swiper-pagination-bullet-active-next {\n transform: scale(0.66);\n }\n .swiper-pagination-bullet-active-next-next {\n transform: scale(0.33);\n }\n}\n.swiper-pagination-bullet {\n width: var(--swiper-pagination-bullet-width, var(--swiper-pagination-bullet-size, 8px));\n height: var(--swiper-pagination-bullet-height, var(--swiper-pagination-bullet-size, 8px));\n display: inline-block;\n border-radius: var(--swiper-pagination-bullet-border-radius, 50%);\n background: var(--swiper-pagination-bullet-inactive-color, #000);\n opacity: var(--swiper-pagination-bullet-inactive-opacity, 0.2);\n button& {\n border: none;\n margin: 0;\n padding: 0;\n box-shadow: none;\n appearance: none;\n }\n .swiper-pagination-clickable & {\n cursor: pointer;\n }\n\n &:only-child {\n display: none !important;\n }\n}\n.swiper-pagination-bullet-active {\n opacity: var(--swiper-pagination-bullet-opacity, 1);\n background: var(--swiper-pagination-color, var(--swiper-theme-color));\n}\n\n.swiper-vertical > .swiper-pagination-bullets,\n.swiper-pagination-vertical.swiper-pagination-bullets {\n right: var(--swiper-pagination-right, 8px);\n left: var(--swiper-pagination-left, auto);\n top: 50%;\n transform: translate3d(0px, -50%, 0);\n .swiper-pagination-bullet {\n margin: var(--swiper-pagination-bullet-vertical-gap, 6px) 0;\n display: block;\n }\n &.swiper-pagination-bullets-dynamic {\n top: 50%;\n transform: translateY(-50%);\n width: 8px;\n .swiper-pagination-bullet {\n display: inline-block;\n transition:\n 200ms transform,\n 200ms top;\n }\n }\n}\n.swiper-horizontal > .swiper-pagination-bullets,\n.swiper-pagination-horizontal.swiper-pagination-bullets {\n .swiper-pagination-bullet {\n margin: 0 var(--swiper-pagination-bullet-horizontal-gap, 4px);\n }\n &.swiper-pagination-bullets-dynamic {\n left: 50%;\n transform: translateX(-50%);\n white-space: nowrap;\n .swiper-pagination-bullet {\n transition:\n 200ms transform,\n 200ms left;\n }\n }\n}\n.swiper-horizontal.swiper-rtl > .swiper-pagination-bullets-dynamic .swiper-pagination-bullet {\n transition:\n 200ms transform,\n 200ms right;\n}\n/* Fraction */\n.swiper-pagination-fraction {\n color: var(--swiper-pagination-fraction-color, inherit);\n}\n/* Progress */\n.swiper-pagination-progressbar {\n background: var(--swiper-pagination-progressbar-bg-color, rgba(0, 0, 0, 0.25));\n position: absolute;\n .swiper-pagination-progressbar-fill {\n background: var(--swiper-pagination-color, var(--swiper-theme-color));\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n transform: scale(0);\n transform-origin: left top;\n }\n .swiper-rtl & .swiper-pagination-progressbar-fill {\n transform-origin: right top;\n }\n .swiper-horizontal > &,\n &.swiper-pagination-horizontal,\n .swiper-vertical > &.swiper-pagination-progressbar-opposite,\n &.swiper-pagination-vertical.swiper-pagination-progressbar-opposite {\n width: 100%;\n height: var(--swiper-pagination-progressbar-size, 4px);\n left: 0;\n top: 0;\n }\n .swiper-vertical > &,\n &.swiper-pagination-vertical,\n .swiper-horizontal > &.swiper-pagination-progressbar-opposite,\n &.swiper-pagination-horizontal.swiper-pagination-progressbar-opposite {\n width: var(--swiper-pagination-progressbar-size, 4px);\n height: 100%;\n left: 0;\n top: 0;\n }\n}\n.swiper-pagination-lock {\n display: none;\n}\n\n:root {\n /*\n --swiper-scrollbar-border-radius: 10px;\n --swiper-scrollbar-top: auto;\n --swiper-scrollbar-bottom: 4px;\n --swiper-scrollbar-left: auto;\n --swiper-scrollbar-right: 4px;\n --swiper-scrollbar-sides-offset: 1%;\n --swiper-scrollbar-bg-color: rgba(0, 0, 0, 0.1);\n --swiper-scrollbar-drag-bg-color: rgba(0, 0, 0, 0.5);\n --swiper-scrollbar-size: 4px;\n */\n}\n.swiper-scrollbar {\n border-radius: var(--swiper-scrollbar-border-radius, 10px);\n position: relative;\n touch-action: none;\n background: var(--swiper-scrollbar-bg-color, rgba(0, 0, 0, 0.1));\n .swiper-scrollbar-disabled > &,\n &.swiper-scrollbar-disabled {\n display: none !important;\n }\n .swiper-horizontal > &,\n &.swiper-scrollbar-horizontal {\n position: absolute;\n left: var(--swiper-scrollbar-sides-offset, 1%);\n bottom: var(--swiper-scrollbar-bottom, 4px);\n top: var(--swiper-scrollbar-top, auto);\n z-index: 50;\n height: var(--swiper-scrollbar-size, 4px);\n width: calc(100% - 2 * var(--swiper-scrollbar-sides-offset, 1%));\n }\n .swiper-vertical > &,\n &.swiper-scrollbar-vertical {\n position: absolute;\n left: var(--swiper-scrollbar-left, auto);\n right: var(--swiper-scrollbar-right, 4px);\n top: var(--swiper-scrollbar-sides-offset, 1%);\n z-index: 50;\n width: var(--swiper-scrollbar-size, 4px);\n height: calc(100% - 2 * var(--swiper-scrollbar-sides-offset, 1%));\n }\n}\n.swiper-scrollbar-drag {\n height: 100%;\n width: 100%;\n position: relative;\n background: var(--swiper-scrollbar-drag-bg-color, rgba(0, 0, 0, 0.5));\n border-radius: var(--swiper-scrollbar-border-radius, 10px);\n left: 0;\n top: 0;\n}\n.swiper-scrollbar-cursor-drag {\n cursor: move;\n}\n.swiper-scrollbar-lock {\n display: none;\n}\n\n\n/* Zoom container styles start */\n.swiper-zoom-container {\n width: 100%;\n height: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n text-align: center;\n\n > img,\n > svg,\n > canvas {\n max-width: 100%;\n max-height: 100%;\n object-fit: contain;\n }\n}\n/* Zoom container styles end */\n\n.swiper-slide-zoomed {\n cursor: move;\n touch-action: none;\n}\n\n\n/* a11y */\n.swiper .swiper-notification {\n position: absolute;\n left: 0;\n top: 0;\n pointer-events: none;\n opacity: 0;\n z-index: -1000;\n}\n\n\n\n\n.swiper-thumbs {\n .swiper-slide-thumb-active {\n /* Styles for active thumb slide */\n }\n}\n\n.swiper-free-mode > .swiper-wrapper {\n transition-timing-function: ease-out;\n margin: 0 auto;\n}\n\n.swiper-grid > .swiper-wrapper {\n flex-wrap: wrap;\n}\n.swiper-grid-column > .swiper-wrapper {\n flex-wrap: wrap;\n flex-direction: column;\n}\n\n\n.swiper-fade {\n &.swiper-free-mode {\n .swiper-slide {\n transition-timing-function: ease-out;\n }\n }\n .swiper-slide {\n pointer-events: none;\n transition-property: opacity;\n .swiper-slide {\n pointer-events: none;\n }\n }\n .swiper-slide-active {\n pointer-events: auto;\n & .swiper-slide-active {\n pointer-events: auto;\n }\n }\n}\n\n.swiper.swiper-cube {\n overflow: visible;\n}\n.swiper-cube {\n .swiper-slide {\n pointer-events: none;\n backface-visibility: hidden;\n z-index: 1;\n visibility: hidden;\n transform-origin: 0 0;\n width: 100%;\n height: 100%;\n .swiper-slide {\n pointer-events: none;\n }\n }\n &.swiper-rtl .swiper-slide {\n transform-origin: 100% 0;\n }\n .swiper-slide-active {\n &,\n & .swiper-slide-active {\n pointer-events: auto;\n }\n }\n .swiper-slide-active,\n .swiper-slide-next,\n .swiper-slide-prev {\n pointer-events: auto;\n visibility: visible;\n }\n\n .swiper-cube-shadow {\n position: absolute;\n left: 0;\n bottom: 0px;\n width: 100%;\n height: 100%;\n opacity: 0.6;\n z-index: 0;\n\n &:before {\n content: '';\n background: #000;\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n right: 0;\n filter: blur(50px);\n }\n }\n}\n.swiper-cube {\n .swiper-slide-next + .swiper-slide {\n pointer-events: auto;\n visibility: visible;\n }\n}\n/* Cube slide shadows start */\n.swiper-cube {\n .swiper-slide-shadow-cube.swiper-slide-shadow-top,\n .swiper-slide-shadow-cube.swiper-slide-shadow-bottom,\n .swiper-slide-shadow-cube.swiper-slide-shadow-left,\n .swiper-slide-shadow-cube.swiper-slide-shadow-right {\n z-index: 0;\n backface-visibility: hidden;\n }\n}\n/* Cube slide shadows end */\n\n.swiper.swiper-flip {\n overflow: visible;\n}\n.swiper-flip {\n .swiper-slide {\n pointer-events: none;\n backface-visibility: hidden;\n z-index: 1;\n .swiper-slide {\n pointer-events: none;\n }\n }\n .swiper-slide-active {\n &,\n & .swiper-slide-active {\n pointer-events: auto;\n }\n }\n}\n/* Flip slide shadows start */\n.swiper-flip {\n .swiper-slide-shadow-flip.swiper-slide-shadow-top,\n .swiper-slide-shadow-flip.swiper-slide-shadow-bottom,\n .swiper-slide-shadow-flip.swiper-slide-shadow-left,\n .swiper-slide-shadow-flip.swiper-slide-shadow-right {\n z-index: 0;\n backface-visibility: hidden;\n }\n}\n/* Flip slide shadows end */\n\n.swiper-coverflow {\n}\n\n.swiper-creative {\n .swiper-slide {\n backface-visibility: hidden;\n overflow: hidden;\n transition-property: transform, opacity, height;\n }\n}\n\n.swiper.swiper-cards {\n overflow: visible;\n}\n.swiper-cards {\n .swiper-slide {\n transform-origin: center bottom;\n backface-visibility: hidden;\n overflow: hidden;\n }\n}\n\n.swiper {\n overflow: clip;\n}";
9791
+ const sallaSliderCss = "/**\n * Swiper 12.1.0\n * Most modern mobile touch slider and framework with hardware accelerated transitions\n * https://swiperjs.com\n *\n * Copyright 2014-2026 Vladimir Kharlampidi\n *\n * Released under the MIT License\n *\n * Released on: January 28, 2026\n */\n\n:root {\n --swiper-theme-color: #007aff;\n /*\n --swiper-preloader-color: var(--swiper-theme-color);\n --swiper-wrapper-transition-timing-function: initial;\n */\n}\n:host {\n position: relative;\n display: block;\n margin-left: auto;\n margin-right: auto;\n z-index: 1;\n}\n.swiper {\n margin-left: auto;\n margin-right: auto;\n position: relative;\n overflow: hidden;\n list-style: none;\n padding: 0;\n /* Fix of Webkit flickering */\n z-index: 1;\n display: block;\n}\n.swiper-vertical > .swiper-wrapper {\n flex-direction: column;\n}\n.swiper-wrapper {\n position: relative;\n width: 100%;\n height: 100%;\n z-index: 1;\n display: flex;\n transition-property: transform;\n transition-timing-function: var(--swiper-wrapper-transition-timing-function, initial);\n box-sizing: content-box;\n}\n.swiper-android .swiper-slide,\n.swiper-ios .swiper-slide,\n.swiper-wrapper {\n transform: translate3d(0px, 0, 0);\n}\n.swiper-horizontal {\n touch-action: pan-y;\n}\n.swiper-vertical {\n touch-action: pan-x;\n}\n.swiper-slide {\n flex-shrink: 0;\n width: 100%;\n height: 100%;\n position: relative;\n transition-property: transform;\n display: block;\n}\n.swiper-slide-invisible-blank {\n visibility: hidden;\n}\n/* Auto Height */\n.swiper-autoheight,\n.swiper-autoheight .swiper-slide {\n height: auto;\n}\n.swiper-autoheight .swiper-wrapper {\n align-items: flex-start;\n transition-property: transform, height;\n}\n.swiper-backface-hidden .swiper-slide {\n transform: translateZ(0);\n backface-visibility: hidden;\n}\n/* 3D Effects */\n.swiper-3d.swiper-css-mode .swiper-wrapper {\n perspective: 1200px;\n}\n.swiper-3d .swiper-wrapper {\n transform-style: preserve-3d;\n}\n.swiper-3d {\n perspective: 1200px;\n .swiper-slide,\n .swiper-cube-shadow {\n transform-style: preserve-3d;\n }\n}\n\n/* CSS Mode */\n.swiper-css-mode {\n > .swiper-wrapper {\n overflow: auto;\n scrollbar-width: none; /* For Firefox */\n -ms-overflow-style: none; /* For Internet Explorer and Edge */\n &::-webkit-scrollbar {\n display: none;\n }\n }\n > .swiper-wrapper > .swiper-slide {\n scroll-snap-align: start start;\n }\n &.swiper-horizontal {\n > .swiper-wrapper {\n scroll-snap-type: x mandatory;\n }\n > .swiper-wrapper > .swiper-slide:first-child {\n margin-inline-start: var(--swiper-slides-offset-before);\n scroll-margin-inline-start: var(--swiper-slides-offset-before);\n }\n > .swiper-wrapper > .swiper-slide:last-child {\n margin-inline-end: var(--swiper-slides-offset-after);\n }\n }\n &.swiper-vertical {\n > .swiper-wrapper {\n scroll-snap-type: y mandatory;\n }\n > .swiper-wrapper > .swiper-slide:first-child {\n margin-block-start: var(--swiper-slides-offset-before);\n scroll-margin-block-start: var(--swiper-slides-offset-before);\n }\n > .swiper-wrapper > .swiper-slide:last-child {\n margin-block-end: var(--swiper-slides-offset-after);\n }\n }\n &.swiper-free-mode {\n > .swiper-wrapper {\n scroll-snap-type: none;\n }\n > .swiper-wrapper > .swiper-slide {\n scroll-snap-align: none;\n }\n }\n &.swiper-centered {\n > .swiper-wrapper::before {\n content: '';\n flex-shrink: 0;\n order: 9999;\n }\n > .swiper-wrapper > .swiper-slide {\n scroll-snap-align: center center;\n scroll-snap-stop: always;\n }\n }\n &.swiper-centered.swiper-horizontal {\n > .swiper-wrapper > .swiper-slide:first-child {\n margin-inline-start: var(--swiper-centered-offset-before);\n }\n > .swiper-wrapper::before {\n height: 100%;\n min-height: 1px;\n width: var(--swiper-centered-offset-after);\n }\n }\n &.swiper-centered.swiper-vertical {\n > .swiper-wrapper > .swiper-slide:first-child {\n margin-block-start: var(--swiper-centered-offset-before);\n }\n > .swiper-wrapper::before {\n width: 100%;\n min-width: 1px;\n height: var(--swiper-centered-offset-after);\n }\n }\n}\n\n/* Slide styles start */\n/* 3D Shadows */\n.swiper-3d {\n .swiper-slide-shadow,\n .swiper-slide-shadow-left,\n .swiper-slide-shadow-right,\n .swiper-slide-shadow-top,\n .swiper-slide-shadow-bottom,\n .swiper-slide-shadow,\n .swiper-slide-shadow-left,\n .swiper-slide-shadow-right,\n .swiper-slide-shadow-top,\n .swiper-slide-shadow-bottom {\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n pointer-events: none;\n z-index: 10;\n }\n .swiper-slide-shadow {\n background: rgba(0, 0, 0, 0.15);\n }\n .swiper-slide-shadow-left {\n background-image: linear-gradient(to left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));\n }\n .swiper-slide-shadow-right {\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));\n }\n .swiper-slide-shadow-top {\n background-image: linear-gradient(to top, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));\n }\n .swiper-slide-shadow-bottom {\n background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));\n }\n}\n.swiper-lazy-preloader {\n width: 42px;\n height: 42px;\n position: absolute;\n left: 50%;\n top: 50%;\n margin-left: -21px;\n margin-top: -21px;\n z-index: 10;\n transform-origin: 50%;\n box-sizing: border-box;\n border: 4px solid var(--swiper-preloader-color, var(--swiper-theme-color));\n border-radius: 50%;\n border-top-color: transparent;\n}\n.swiper:not(.swiper-watch-progress),\n.swiper-watch-progress .swiper-slide-visible {\n .swiper-lazy-preloader {\n animation: swiper-preloader-spin 1s infinite linear;\n }\n}\n.swiper-lazy-preloader-white {\n --swiper-preloader-color: #fff;\n}\n.swiper-lazy-preloader-black {\n --swiper-preloader-color: #000;\n}\n@keyframes swiper-preloader-spin {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n/* Slide styles end */\n\n.swiper-virtual .swiper-slide {\n -webkit-backface-visibility: hidden;\n transform: translateZ(0);\n}\n.swiper-virtual.swiper-css-mode {\n .swiper-wrapper::after {\n content: '';\n position: absolute;\n left: 0;\n top: 0;\n pointer-events: none;\n }\n}\n.swiper-virtual.swiper-css-mode.swiper-horizontal {\n .swiper-wrapper::after {\n height: 1px;\n width: var(--swiper-virtual-size);\n }\n}\n\n.swiper-virtual.swiper-css-mode.swiper-vertical {\n .swiper-wrapper::after {\n width: 1px;\n height: var(--swiper-virtual-size);\n }\n}\n\n\n\n:root {\n --swiper-navigation-size: 44px;\n /*\n --swiper-navigation-top-offset: 50%;\n --swiper-navigation-sides-offset: 4px;\n --swiper-navigation-color: var(--swiper-theme-color);\n */\n}\n.swiper-button-prev,\n.swiper-button-next {\n position: absolute;\n\n width: var(--swiper-navigation-size);\n height: var(--swiper-navigation-size);\n\n z-index: 10;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--swiper-navigation-color, var(--swiper-theme-color));\n &.swiper-button-disabled {\n opacity: 0.35;\n cursor: auto;\n pointer-events: none;\n }\n &.swiper-button-hidden {\n opacity: 0;\n cursor: auto;\n pointer-events: none;\n }\n .swiper-navigation-disabled & {\n display: none !important;\n }\n svg {\n width: 100%;\n height: 100%;\n object-fit: contain;\n transform-origin: center;\n fill: currentColor;\n pointer-events: none;\n }\n}\n\n.swiper-button-lock {\n display: none;\n}\n\n.swiper-button-prev,\n.swiper-button-next {\n top: var(--swiper-navigation-top-offset, 50%);\n margin-top: calc(0px - (var(--swiper-navigation-size) / 2));\n}\n.swiper-button-prev {\n left: var(--swiper-navigation-sides-offset, 4px);\n right: auto;\n .swiper-navigation-icon {\n transform: rotate(180deg);\n }\n}\n.swiper-button-next {\n right: var(--swiper-navigation-sides-offset, 4px);\n left: auto;\n}\n.swiper-horizontal {\n .swiper-button-prev,\n .swiper-button-next,\n ~ .swiper-button-prev,\n ~ .swiper-button-next {\n top: var(--swiper-navigation-top-offset, 50%);\n margin-top: calc(0px - (var(--swiper-navigation-size) / 2));\n margin-left: 0;\n }\n .swiper-button-prev,\n & ~ .swiper-button-prev,\n &.swiper-rtl .swiper-button-next,\n &.swiper-rtl ~ .swiper-button-next {\n left: var(--swiper-navigation-sides-offset, 4px);\n right: auto;\n }\n .swiper-button-next,\n & ~ .swiper-button-next,\n &.swiper-rtl .swiper-button-prev,\n &.swiper-rtl ~ .swiper-button-prev {\n right: var(--swiper-navigation-sides-offset, 4px);\n left: auto;\n }\n .swiper-button-prev,\n & ~ .swiper-button-prev,\n &.swiper-rtl .swiper-button-next,\n &.swiper-rtl ~ .swiper-button-next {\n .swiper-navigation-icon {\n transform: rotate(180deg);\n }\n }\n &.swiper-rtl .swiper-button-prev,\n &.swiper-rtl ~ .swiper-button-prev {\n .swiper-navigation-icon {\n transform: rotate(0deg);\n }\n }\n}\n.swiper-vertical {\n .swiper-button-prev,\n .swiper-button-next,\n ~ .swiper-button-prev,\n ~ .swiper-button-next {\n left: var(--swiper-navigation-top-offset, 50%);\n right: auto;\n margin-left: calc(0px - (var(--swiper-navigation-size) / 2));\n margin-top: 0;\n }\n .swiper-button-prev,\n ~ .swiper-button-prev {\n top: var(--swiper-navigation-sides-offset, 4px);\n bottom: auto;\n .swiper-navigation-icon {\n transform: rotate(-90deg);\n }\n }\n .swiper-button-next,\n ~ .swiper-button-next {\n bottom: var(--swiper-navigation-sides-offset, 4px);\n top: auto;\n .swiper-navigation-icon {\n transform: rotate(90deg);\n }\n }\n}\n\n:root {\n /*\n --swiper-pagination-color: var(--swiper-theme-color);\n --swiper-pagination-left: auto;\n --swiper-pagination-right: 8px;\n --swiper-pagination-bottom: 8px;\n --swiper-pagination-top: auto;\n --swiper-pagination-fraction-color: inherit;\n --swiper-pagination-progressbar-bg-color: rgba(0,0,0,0.25);\n --swiper-pagination-progressbar-size: 4px;\n --swiper-pagination-bullet-size: 8px;\n --swiper-pagination-bullet-width: 8px;\n --swiper-pagination-bullet-height: 8px;\n --swiper-pagination-bullet-border-radius: 50%;\n --swiper-pagination-bullet-inactive-color: #000;\n --swiper-pagination-bullet-inactive-opacity: 0.2;\n --swiper-pagination-bullet-opacity: 1;\n --swiper-pagination-bullet-horizontal-gap: 4px;\n --swiper-pagination-bullet-vertical-gap: 6px;\n */\n}\n.swiper-pagination {\n position: absolute;\n text-align: center;\n transition: 300ms opacity;\n transform: translate3d(0, 0, 0);\n z-index: 10;\n &.swiper-pagination-hidden {\n opacity: 0;\n }\n .swiper-pagination-disabled > &,\n &.swiper-pagination-disabled {\n display: none !important;\n }\n}\n/* Common Styles */\n.swiper-pagination-fraction,\n.swiper-pagination-custom,\n.swiper-horizontal > .swiper-pagination-bullets,\n.swiper-pagination-bullets.swiper-pagination-horizontal {\n bottom: var(--swiper-pagination-bottom, 8px);\n top: var(--swiper-pagination-top, auto);\n left: 0;\n width: 100%;\n}\n/* Bullets */\n.swiper-pagination-bullets-dynamic {\n overflow: hidden;\n font-size: 0;\n .swiper-pagination-bullet {\n transform: scale(0.33);\n position: relative;\n }\n .swiper-pagination-bullet-active {\n transform: scale(1);\n }\n .swiper-pagination-bullet-active-main {\n transform: scale(1);\n }\n .swiper-pagination-bullet-active-prev {\n transform: scale(0.66);\n }\n .swiper-pagination-bullet-active-prev-prev {\n transform: scale(0.33);\n }\n .swiper-pagination-bullet-active-next {\n transform: scale(0.66);\n }\n .swiper-pagination-bullet-active-next-next {\n transform: scale(0.33);\n }\n}\n.swiper-pagination-bullet {\n width: var(--swiper-pagination-bullet-width, var(--swiper-pagination-bullet-size, 8px));\n height: var(--swiper-pagination-bullet-height, var(--swiper-pagination-bullet-size, 8px));\n display: inline-block;\n border-radius: var(--swiper-pagination-bullet-border-radius, 50%);\n background: var(--swiper-pagination-bullet-inactive-color, #000);\n opacity: var(--swiper-pagination-bullet-inactive-opacity, 0.2);\n button& {\n border: none;\n margin: 0;\n padding: 0;\n box-shadow: none;\n appearance: none;\n }\n .swiper-pagination-clickable & {\n cursor: pointer;\n }\n\n &:only-child {\n display: none !important;\n }\n}\n.swiper-pagination-bullet-active {\n opacity: var(--swiper-pagination-bullet-opacity, 1);\n background: var(--swiper-pagination-color, var(--swiper-theme-color));\n}\n\n.swiper-vertical > .swiper-pagination-bullets,\n.swiper-pagination-vertical.swiper-pagination-bullets {\n right: var(--swiper-pagination-right, 8px);\n left: var(--swiper-pagination-left, auto);\n top: 50%;\n transform: translate3d(0px, -50%, 0);\n .swiper-pagination-bullet {\n margin: var(--swiper-pagination-bullet-vertical-gap, 6px) 0;\n display: block;\n }\n &.swiper-pagination-bullets-dynamic {\n top: 50%;\n transform: translateY(-50%);\n width: 8px;\n .swiper-pagination-bullet {\n display: inline-block;\n transition:\n 200ms transform,\n 200ms top;\n }\n }\n}\n.swiper-horizontal > .swiper-pagination-bullets,\n.swiper-pagination-horizontal.swiper-pagination-bullets {\n .swiper-pagination-bullet {\n margin: 0 var(--swiper-pagination-bullet-horizontal-gap, 4px);\n }\n &.swiper-pagination-bullets-dynamic {\n left: 50%;\n transform: translateX(-50%);\n white-space: nowrap;\n .swiper-pagination-bullet {\n transition:\n 200ms transform,\n 200ms left;\n }\n }\n}\n.swiper-horizontal.swiper-rtl > .swiper-pagination-bullets-dynamic .swiper-pagination-bullet {\n transition:\n 200ms transform,\n 200ms right;\n}\n/* Fraction */\n.swiper-pagination-fraction {\n color: var(--swiper-pagination-fraction-color, inherit);\n}\n/* Progress */\n.swiper-pagination-progressbar {\n background: var(--swiper-pagination-progressbar-bg-color, rgba(0, 0, 0, 0.25));\n position: absolute;\n .swiper-pagination-progressbar-fill {\n background: var(--swiper-pagination-color, var(--swiper-theme-color));\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n transform: scale(0);\n transform-origin: left top;\n }\n .swiper-rtl & .swiper-pagination-progressbar-fill {\n transform-origin: right top;\n }\n .swiper-horizontal > &,\n &.swiper-pagination-horizontal,\n .swiper-vertical > &.swiper-pagination-progressbar-opposite,\n &.swiper-pagination-vertical.swiper-pagination-progressbar-opposite {\n width: 100%;\n height: var(--swiper-pagination-progressbar-size, 4px);\n left: 0;\n top: 0;\n }\n .swiper-vertical > &,\n &.swiper-pagination-vertical,\n .swiper-horizontal > &.swiper-pagination-progressbar-opposite,\n &.swiper-pagination-horizontal.swiper-pagination-progressbar-opposite {\n width: var(--swiper-pagination-progressbar-size, 4px);\n height: 100%;\n left: 0;\n top: 0;\n }\n}\n.swiper-pagination-lock {\n display: none;\n}\n\n:root {\n /*\n --swiper-scrollbar-border-radius: 10px;\n --swiper-scrollbar-top: auto;\n --swiper-scrollbar-bottom: 4px;\n --swiper-scrollbar-left: auto;\n --swiper-scrollbar-right: 4px;\n --swiper-scrollbar-sides-offset: 1%;\n --swiper-scrollbar-bg-color: rgba(0, 0, 0, 0.1);\n --swiper-scrollbar-drag-bg-color: rgba(0, 0, 0, 0.5);\n --swiper-scrollbar-size: 4px;\n */\n}\n.swiper-scrollbar {\n border-radius: var(--swiper-scrollbar-border-radius, 10px);\n position: relative;\n touch-action: none;\n background: var(--swiper-scrollbar-bg-color, rgba(0, 0, 0, 0.1));\n .swiper-scrollbar-disabled > &,\n &.swiper-scrollbar-disabled {\n display: none !important;\n }\n .swiper-horizontal > &,\n &.swiper-scrollbar-horizontal {\n position: absolute;\n left: var(--swiper-scrollbar-sides-offset, 1%);\n bottom: var(--swiper-scrollbar-bottom, 4px);\n top: var(--swiper-scrollbar-top, auto);\n z-index: 50;\n height: var(--swiper-scrollbar-size, 4px);\n width: calc(100% - 2 * var(--swiper-scrollbar-sides-offset, 1%));\n }\n .swiper-vertical > &,\n &.swiper-scrollbar-vertical {\n position: absolute;\n left: var(--swiper-scrollbar-left, auto);\n right: var(--swiper-scrollbar-right, 4px);\n top: var(--swiper-scrollbar-sides-offset, 1%);\n z-index: 50;\n width: var(--swiper-scrollbar-size, 4px);\n height: calc(100% - 2 * var(--swiper-scrollbar-sides-offset, 1%));\n }\n}\n.swiper-scrollbar-drag {\n height: 100%;\n width: 100%;\n position: relative;\n background: var(--swiper-scrollbar-drag-bg-color, rgba(0, 0, 0, 0.5));\n border-radius: var(--swiper-scrollbar-border-radius, 10px);\n left: 0;\n top: 0;\n}\n.swiper-scrollbar-cursor-drag {\n cursor: move;\n}\n.swiper-scrollbar-lock {\n display: none;\n}\n\n\n/* Zoom container styles start */\n.swiper-zoom-container {\n width: 100%;\n height: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n text-align: center;\n\n > img,\n > svg,\n > canvas {\n max-width: 100%;\n max-height: 100%;\n object-fit: contain;\n }\n}\n/* Zoom container styles end */\n\n.swiper-slide-zoomed {\n cursor: move;\n touch-action: none;\n}\n\n\n/* a11y */\n.swiper .swiper-notification {\n position: absolute;\n left: 0;\n top: 0;\n pointer-events: none;\n opacity: 0;\n z-index: -1000;\n}\n\n\n\n\n.swiper-thumbs {\n .swiper-slide-thumb-active {\n /* Styles for active thumb slide */\n }\n}\n\n.swiper-free-mode > .swiper-wrapper {\n transition-timing-function: ease-out;\n margin: 0 auto;\n}\n\n.swiper-grid > .swiper-wrapper {\n flex-wrap: wrap;\n}\n.swiper-grid-column > .swiper-wrapper {\n flex-wrap: wrap;\n flex-direction: column;\n}\n\n\n.swiper-fade {\n &.swiper-free-mode {\n .swiper-slide {\n transition-timing-function: ease-out;\n }\n }\n .swiper-slide {\n pointer-events: none;\n transition-property: opacity;\n .swiper-slide {\n pointer-events: none;\n }\n }\n .swiper-slide-active {\n pointer-events: auto;\n & .swiper-slide-active {\n pointer-events: auto;\n }\n }\n}\n\n.swiper.swiper-cube {\n overflow: visible;\n}\n.swiper-cube {\n .swiper-slide {\n pointer-events: none;\n backface-visibility: hidden;\n z-index: 1;\n visibility: hidden;\n transform-origin: 0 0;\n width: 100%;\n height: 100%;\n .swiper-slide {\n pointer-events: none;\n }\n }\n &.swiper-rtl .swiper-slide {\n transform-origin: 100% 0;\n }\n .swiper-slide-active {\n &,\n & .swiper-slide-active {\n pointer-events: auto;\n }\n }\n .swiper-slide-active,\n .swiper-slide-next,\n .swiper-slide-prev {\n pointer-events: auto;\n visibility: visible;\n }\n\n .swiper-cube-shadow {\n position: absolute;\n left: 0;\n bottom: 0px;\n width: 100%;\n height: 100%;\n opacity: 0.6;\n z-index: 0;\n\n &:before {\n content: '';\n background: #000;\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n right: 0;\n filter: blur(50px);\n }\n }\n}\n.swiper-cube {\n .swiper-slide-next + .swiper-slide {\n pointer-events: auto;\n visibility: visible;\n }\n}\n/* Cube slide shadows start */\n.swiper-cube {\n .swiper-slide-shadow-cube.swiper-slide-shadow-top,\n .swiper-slide-shadow-cube.swiper-slide-shadow-bottom,\n .swiper-slide-shadow-cube.swiper-slide-shadow-left,\n .swiper-slide-shadow-cube.swiper-slide-shadow-right {\n z-index: 0;\n backface-visibility: hidden;\n }\n}\n/* Cube slide shadows end */\n\n.swiper.swiper-flip {\n overflow: visible;\n}\n.swiper-flip {\n .swiper-slide {\n pointer-events: none;\n backface-visibility: hidden;\n z-index: 1;\n .swiper-slide {\n pointer-events: none;\n }\n }\n .swiper-slide-active {\n &,\n & .swiper-slide-active {\n pointer-events: auto;\n }\n }\n}\n/* Flip slide shadows start */\n.swiper-flip {\n .swiper-slide-shadow-flip.swiper-slide-shadow-top,\n .swiper-slide-shadow-flip.swiper-slide-shadow-bottom,\n .swiper-slide-shadow-flip.swiper-slide-shadow-left,\n .swiper-slide-shadow-flip.swiper-slide-shadow-right {\n z-index: 0;\n backface-visibility: hidden;\n }\n}\n/* Flip slide shadows end */\n\n.swiper-coverflow {\n}\n\n.swiper-creative {\n .swiper-slide {\n backface-visibility: hidden;\n overflow: hidden;\n transition-property: transform, opacity, height;\n }\n}\n\n.swiper.swiper-cards {\n overflow: visible;\n}\n.swiper-cards {\n .swiper-slide {\n transform-origin: center bottom;\n backface-visibility: hidden;\n overflow: hidden;\n }\n}\n\n.swiper {\n overflow: clip;\n}\n\n.s-slider-vertical .s-slider-container {\n min-width: 0;\n}";
9792
9792
 
9793
9793
  const SallaSlider = /*@__PURE__*/ proxyCustomElement(class SallaSlider extends HTMLElement$1 {
9794
9794
  constructor() {
@@ -9887,7 +9887,9 @@ const SallaSlider = /*@__PURE__*/ proxyCustomElement(class SallaSlider extends H
9887
9887
  this.currentIndex = undefined;
9888
9888
  this.isEnd = false;
9889
9889
  this.isBeginning = true;
9890
- this.windowWidth = window.innerWidth;
9890
+ /** Use matchMedia instead of window.innerWidth to avoid forced reflow (Lighthouse recommended) */
9891
+ this.isDesktopViewport = typeof window !== 'undefined' ? window.matchMedia('(min-width: 768px)').matches : true;
9892
+ this.viewportMediaQuery = null;
9891
9893
  this.hasThumbSlot = false;
9892
9894
  this.pre_defined_config = {
9893
9895
  carousel: {
@@ -9931,6 +9933,9 @@ const SallaSlider = /*@__PURE__*/ proxyCustomElement(class SallaSlider extends H
9931
9933
  spaceBetween: 30
9932
9934
  }
9933
9935
  };
9936
+ this.onViewportChange = (e) => {
9937
+ this.isDesktopViewport = e.matches;
9938
+ };
9934
9939
  this.direction = this.direction || document.documentElement.dir;
9935
9940
  }
9936
9941
  // Methods
@@ -10227,11 +10232,11 @@ const SallaSlider = /*@__PURE__*/ proxyCustomElement(class SallaSlider extends H
10227
10232
  return pre_defined_config;
10228
10233
  }
10229
10234
  getThumbsDirection() {
10230
- const { verticalThumbs, windowWidth, direction } = this;
10231
- if (verticalThumbs && windowWidth < 768 && direction === 'rtl') {
10235
+ const { verticalThumbs, isDesktopViewport, direction } = this;
10236
+ if (verticalThumbs && !isDesktopViewport && direction === 'rtl') {
10232
10237
  return 'rtl';
10233
10238
  }
10234
- if (verticalThumbs && windowWidth > 768 && direction === 'rtl') {
10239
+ if (verticalThumbs && isDesktopViewport && direction === 'rtl') {
10235
10240
  return 'ltr';
10236
10241
  }
10237
10242
  return direction;
@@ -10249,6 +10254,8 @@ const SallaSlider = /*@__PURE__*/ proxyCustomElement(class SallaSlider extends H
10249
10254
  // Backward compatibility: lazy load data-background as background-image (removed in Swiper v9+)
10250
10255
  this.loadLazyBackgrounds();
10251
10256
  this.slider.on('slideChange', () => this.loadLazyBackgrounds());
10257
+ // Add swiper-lazy-loaded to lazy images when visible
10258
+ this.observeLazyImages();
10252
10259
  // Expose slider events
10253
10260
  this.slider.on('slideChange', (slider) => {
10254
10261
  //todo:: it doesn't change when loop is active, always will be false
@@ -10284,7 +10291,7 @@ const SallaSlider = /*@__PURE__*/ proxyCustomElement(class SallaSlider extends H
10284
10291
  classes += this.verticalThumbs ? ' s-slider-vertical ' : ' s-slider-horizontal ';
10285
10292
  classes += this.arrowsCentered ? ' s-slider-v-centered ' : '';
10286
10293
  classes += this.gridThumbs ? ' s-slider-with-grid-thumbs ' : '';
10287
- return (h(Host, { key: '671c02110bae2bd18cac37cf07ea33a5f0fbd671', class: 's-slider-wrapper ' + classes }, this.blockTitle || this.showControls ?
10294
+ return (h(Host, { key: '44f6baf2ec3a6421cd8d8ce6779c6ce781cecc7f', class: 's-slider-wrapper ' + classes }, this.blockTitle || this.showControls ?
10288
10295
  h("div", { class: "s-slider-block__title" }, this.blockTitle ?
10289
10296
  h("div", { class: "s-slider-block__title-right" }, h("h2", null, this.blockTitle), this.blockSubtitle ? h("p", { innerHTML: this.blockSubtitle }) : '')
10290
10297
  : '', h("div", { class: "s-slider-block__title-left" }, this.displayAllUrl ?
@@ -10292,11 +10299,28 @@ const SallaSlider = /*@__PURE__*/ proxyCustomElement(class SallaSlider extends H
10292
10299
  : '', this.showControls ?
10293
10300
  h("div", { class: "s-slider-block__title-nav", dir: "rtl" }, h("button", { "aria-label": "Previous Slide", class: "s-slider-prev s-slider-nav-arrow" }, h("span", { class: "s-slider-button-icon", innerHTML: this.direction == 'rtl' ? KeyBoardArrowRightIcon : KeyBoardArrowLeftIcon })), h("button", { "aria-label": "Next Slide", class: "s-slider-next s-slider-nav-arrow" }, h("span", { class: "s-slider-button-icon", innerHTML: this.direction == 'rtl' ? KeyBoardArrowLeftIcon : KeyBoardArrowRightIcon })))
10294
10301
  : ''))
10295
- : '', h("div", { key: '75e963b5694e4af9d2cef0e179644c44bee587ef', class: "swiper s-slider-container", ref: el => this.sliderContainer = el, dir: this.vertical ? "ltr" : this.direction }, h("slot", { key: '01ab750e52328fec9acef587acfa23d0477ef41d' }), h("div", { key: '87790d8f677a5c6ae52c31de07fa53642be096ba', class: "swiper-wrapper s-slider-swiper-wrapper", ref: el => this.sliderWrapper = el }, h("slot", { key: 'e14d002dbb228d96b4ce915a2a83f566fce00cf7', name: 'items' })), this.pagination ? h("div", { class: "swiper-pagination" }) : ''), this.type == 'thumbs' && this.hasThumbSlot ? h("div", { class: "s-slider-thumbs" }, h("div", { class: "swiper s-slider-thumbs-container", dir: this.getThumbsDirection(), ref: el => this.thumbsSliderContainer = el }, h("div", { class: { "s-slider-swiper-wrapper swiper-wrapper": true, "s-slider-grid-thumbs": this.gridThumbs }, ref: el => this.thumbsSliderWrapper = el }, h("slot", { name: "thumbs" })), this.showThumbsControls ?
10302
+ : '', h("div", { key: '384d3224e9e2f9ad08d71093ee4c6f907232c07e', class: "swiper s-slider-container", ref: el => this.sliderContainer = el, dir: this.vertical ? "ltr" : this.direction }, h("slot", { key: '578756df5b652d9b7e86d3f0424e4ec886b7a75f' }), h("div", { key: '7966a00ec720374a3dac1533d72fdfeb31db8105', class: "swiper-wrapper s-slider-swiper-wrapper", ref: el => this.sliderWrapper = el }, h("slot", { key: '39f9656cabb053dc4878ae1f2bd94a6efc19f975', name: 'items' })), this.pagination ? h("div", { class: "swiper-pagination" }) : ''), this.type == 'thumbs' && this.hasThumbSlot ? h("div", { class: "s-slider-thumbs" }, h("div", { class: "swiper s-slider-thumbs-container", dir: this.getThumbsDirection(), ref: el => this.thumbsSliderContainer = el }, h("div", { class: { "s-slider-swiper-wrapper swiper-wrapper": true, "s-slider-grid-thumbs": this.gridThumbs }, ref: el => this.thumbsSliderWrapper = el }, h("slot", { name: "thumbs" })), this.showThumbsControls ?
10296
10303
  h("div", { class: "s-slider-thumbs-nav", dir: "rtl" }, h("button", { "aria-label": "Previous Slide", class: "s-slider-thumbs-prev s-slider-nav-arrow" }, h("span", { class: "s-slider-button-icon", innerHTML: this.direction == 'rtl' ? KeyBoardArrowRightIcon : KeyBoardArrowLeftIcon })), h("button", { "aria-label": "Next Slide", class: "s-slider-thumbs-next s-slider-nav-arrow" }, h("span", { class: "s-slider-button-icon", innerHTML: this.direction == 'rtl' ? KeyBoardArrowLeftIcon : KeyBoardArrowRightIcon })))
10297
10304
  : null))
10298
10305
  : null));
10299
10306
  }
10307
+ /** Observe all .swiper-lazy images and add swiper-lazy-loaded when they enter viewport. */
10308
+ observeLazyImages() {
10309
+ const lazyEls = this.sliderContainer?.querySelectorAll('.swiper-lazy:not(.swiper-lazy-loaded)');
10310
+ if (!lazyEls?.length)
10311
+ return;
10312
+ if (!this.lazyImageObserver) {
10313
+ this.lazyImageObserver = new IntersectionObserver((entries, observer) => {
10314
+ entries.forEach(entry => {
10315
+ if (!entry.isIntersecting)
10316
+ return;
10317
+ entry.target.classList.add('swiper-lazy-loaded');
10318
+ observer.unobserve(entry.target);
10319
+ });
10320
+ }, { rootMargin: '50px' });
10321
+ }
10322
+ lazyEls.forEach(el => this.lazyImageObserver.observe(el));
10323
+ }
10300
10324
  /** Lazy load data-background for active slide and adjacent slides (backward compat for Swiper v9+). */
10301
10325
  loadLazyBackgrounds() {
10302
10326
  if (!this.slider?.slides)
@@ -10349,9 +10373,13 @@ const SallaSlider = /*@__PURE__*/ proxyCustomElement(class SallaSlider extends H
10349
10373
  this.flattenSlotToElements(this.thumbsSliderWrapper, 'div[slot="thumbs"]');
10350
10374
  }
10351
10375
  this.initSlider();
10376
+ this.viewportMediaQuery = window.matchMedia('(min-width: 768px)');
10377
+ this.viewportMediaQuery.addEventListener('change', this.onViewportChange);
10352
10378
  }
10353
10379
  disconnectedCallback() {
10380
+ this.viewportMediaQuery?.removeEventListener('change', this.onViewportChange);
10354
10381
  this.lazyObserver?.disconnect();
10382
+ this.lazyImageObserver?.disconnect();
10355
10383
  }
10356
10384
  get host() { return this; }
10357
10385
  static get style() { return sallaSliderCss; }
@@ -10381,7 +10409,7 @@ const SallaSlider = /*@__PURE__*/ proxyCustomElement(class SallaSlider extends H
10381
10409
  "isEnd": [32],
10382
10410
  "isBeginning": [32],
10383
10411
  "displayAllTitle": [32],
10384
- "windowWidth": [32],
10412
+ "isDesktopViewport": [32],
10385
10413
  "sliderInstance": [64],
10386
10414
  "slideTo": [64],
10387
10415
  "slideNext": [64],
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * Crafted with ❤ by Salla
3
3
  */
4
- import { d as getDefaultExportFromCjs } from './index-LmL2BolE.js';
4
+ import { d as getDefaultExportFromCjs } from './index-CkAdPgup.js';
5
5
 
6
6
  function _mergeNamespaces(n, m) {
7
7
  m.forEach(function (e) {
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * Crafted with ❤ by Salla
3
3
  */
4
- import { d as getDefaultExportFromCjs } from './index-LmL2BolE.js';
4
+ import { d as getDefaultExportFromCjs } from './index-CkAdPgup.js';
5
5
 
6
6
  function _mergeNamespaces(n, m) {
7
7
  m.forEach(function (e) {
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * Crafted with ❤ by Salla
3
3
  */
4
- import { d as getDefaultExportFromCjs } from './index-LmL2BolE.js';
4
+ import { d as getDefaultExportFromCjs } from './index-CkAdPgup.js';
5
5
 
6
6
  function _mergeNamespaces(n, m) {
7
7
  m.forEach(function (e) {
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * Crafted with ❤ by Salla
3
3
  */
4
- import { d as getDefaultExportFromCjs } from './index-LmL2BolE.js';
4
+ import { d as getDefaultExportFromCjs } from './index-CkAdPgup.js';
5
5
 
6
6
  function _mergeNamespaces(n, m) {
7
7
  m.forEach(function (e) {
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * Crafted with ❤ by Salla
3
3
  */
4
- import { d as getDefaultExportFromCjs } from './index-LmL2BolE.js';
4
+ import { d as getDefaultExportFromCjs } from './index-CkAdPgup.js';
5
5
 
6
6
  function _mergeNamespaces(n, m) {
7
7
  m.forEach(function (e) {
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * Crafted with ❤ by Salla
3
3
  */
4
- import { d as getDefaultExportFromCjs } from './index-LmL2BolE.js';
4
+ import { d as getDefaultExportFromCjs } from './index-CkAdPgup.js';
5
5
 
6
6
  function _mergeNamespaces(n, m) {
7
7
  m.forEach(function (e) {
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * Crafted with ❤ by Salla
3
3
  */
4
- import { d as getDefaultExportFromCjs } from './index-LmL2BolE.js';
4
+ import { d as getDefaultExportFromCjs } from './index-CkAdPgup.js';
5
5
 
6
6
  function _mergeNamespaces(n, m) {
7
7
  m.forEach(function (e) {