PageSourceSearch

https://www.imsa-adportas.cl/ver2/wp-content/themes/ia/librerias/scripts.js

js imsa-adportas.cl collected 2026-10-09 22:52:13 UTC 23,946 bytes, 798 lines download raw bytes

1document.querySelectorAll(".scroll-top").forEach((el) => {
2  el.addEventListener("click", (e) => {
3    e.preventDefault();
4    window.scrollTo({ top: 0, behavior: "smooth" });
5  });
6});
7
8// Función para igualar la altura
9function equalizeHeight() {
10  var elements = document.querySelectorAll(".equal-height");
11  var maxHeight = 0;
12
13  // Encuentra la altura máxima
14  elements.forEach(function (element) {
15    var height = element.offsetHeight;
16    if (height > maxHeight) {
17      maxHeight = height;
18    }
19  });
20
21  // Aplica la altura máxima a todos los elementos
22  elements.forEach(function (element) {
23    element.style.height = maxHeight + "px";
24  });
25}
26
27// También puedes llamar a equalizeHeight() después de un tiempo de espera para asegurarte
28setTimeout(equalizeHeight, 1000);
29
30//var player = videojs('my-video');
31document.addEventListener("DOMContentLoaded", function () {
32  const bold = "font-weight: bold";
33  const normal = "font-weight: normal";
34  const menuMobile = document.querySelector("#menu-mobile");
35  const menuMobileBotonesPrincipales = document.querySelector("#menu-mobile .menu-mobile- li");
36  const menuMobileBotones = document.querySelectorAll("#menu-mobile li.boton-menu");
37  const menuMasOpciones = document.querySelector("#menu-mobile .mas-opciones");
38  const menuMasOpcionesBotones = document.querySelectorAll("#menu-mobile .mas-opciones li");
39
40  if (menuMobile && menuMobileBotones && menuMasOpciones) {
41    document.addEventListener("click", function (event) {
42      // Remueve clase On si se hace click afuera
43      if (!menuMobile.contains(event.target)) {
44        menuMobileBotones.forEach(function (boton) {
45          boton.classList.remove("on");
46          boton.classList.remove("activo");
47          boton.classList.add("desactivo");
48          if (menuMasOpciones.classList.contains("mostrar")) {
49            menuMasOpciones.classList.remove("mostrar");
50            menuMasOpciones.classList.add("ocultar");
51          }
52        });
53      }
54    });
55
56    menuMobileBotones.forEach(function (boton) {
57      boton.addEventListener("click", function (event) {
58        if (boton.classList.contains("boton-opciones-menu")) {
59          if (menuMasOpciones.classList.contains("mostrar")) {
60            menuMasOpciones.classList.remove("mostrar");
61            menuMasOpciones.classList.add("ocultar");
62            boton.classList.remove("activo");
63            boton.classList.add("desactivo");
64          } else {
65            menuMasOpciones.classList.add("mostrar");
66            menuMasOpciones.classList.remove("ocultar");
67            boton.classList.add("activo");
68            boton.classList.remove("desactivo");
69          }
70        } else {
71          if (boton.parentElement.classList.contains("menu-mobile-")) {
72            if (menuMasOpciones.classList.contains("mostrar")) {
73              menuMasOpciones.classList.remove("mostrar");
74              menuMasOpciones.classList.add("ocultar");
75              const botonOpcionesMenu = document.querySelector(".boton-opciones-menu");
76              if (botonOpcionesMenu) {
77                botonOpcionesMenu.classList.add("desactivo");
78                botonOpcionesMenu.classList.remove("activo");
79              }
80            }
81          }
82        }
83        menuMobileBotones.forEach(function (boton) {
84          boton.classList.remove("on");
85        });
86        // Cuando hace click en los botones del menú opciones
87        if (boton.parentElement.classList.contains("mas-opciones")) {
88          const botonOpcionesMenu = document.querySelector(".boton-opciones-menu");
89          if (botonOpcionesMenu) {
90            botonOpcionesMenu.classList.add("on");
91          }
92        }
93        boton.classList.add("on");
94      });
95    });
96
97    const botonWhatsappMenu = document.querySelector("#menu-mobile li.boton-whatsapp-menu");
98    if (botonWhatsappMenu) {
99      const menu_mobile = botonWhatsappMenu.offsetWidth;
100      const menu_mobile_opciones = document.querySelector("#menu-mobile ul.mas-opciones");
101      if (menu_mobile_opciones) {
102        menu_mobile_opciones.style.width = menu_mobile + "px";
103      }
104      window.addEventListener("resize", function () {
105        const menu_mobile = botonWhatsappMenu.offsetWidth;
106        if (menu_mobile_opciones) {
107          menu_mobile_opciones.style.width = menu_mobile + "px";
108        }
109      });
110    }
111  }
112
113  // Lógica del menú flotante
114  var menuMobileV = document.querySelector("#menu-mobile");
115  var menuFlotante = document.querySelector(".menu-flotante");
116  var footer = document.querySelector("footer");
117
118  if (menuMobileV && footer) {
119    window.addEventListener("scroll", function () {
120      var footerRect = footer.getBoundingClientRect();
121      var windowHeight = window.innerHeight;
122      if (footerRect.top <= windowHeight - 100) {
123        menuMobileV.style.display = "none";
124      } else {
125        menuMobileV.style.display = "block";
126      }
127    });
128  }
129
130  if (menuFlotante && footer) {
131    window.addEventListener("scroll", function () {
132      var footerRect = footer.getBoundingClientRect();
133      var windowHeight = window.innerHeight;
134      if (footerRect.top <= windowHeight - 100) {
135        menuFlotante.style.display = "none";
136      } else {
137        menuFlotante.style.display = "block";
138      }
139    });
140  }
141
142  document.querySelectorAll(".tabs-contenedor").forEach((tabsContainer) => {
143    const tabs = tabsContainer.querySelectorAll(".tab");
144    const line = tabsContainer.querySelector(".linea");
145    const contents = tabsContainer.querySelectorAll(".tab-contenido");
146    const select = tabsContainer.querySelector("select");
147    let swiperInstance = null;
148
149    function initializeSwiper(content) {
150      const swiperElement = content.querySelector(".swiper-galerias");
151      if (swiperElement) {
152        swiperInstance = new Swiper(swiperElement, {
153          centeredSlides: false,
154          loop: false,
155          slidesPerView: 1,
156          spaceBetween: 15,
157          lazy: {
158            loadPrevNext: true,
159            loadPrevNextAmount: 2,
160          },
161          keyboard: {
162            enabled: true,
163            onlyInViewport: true,
164          },
165          pagination: {
166            el: ".swiper-pagination",
167            clickable: true,
168            dynamicBullets: true,
169          },
170          navigation: {
171            nextEl: ".swiper-button-next",
172            prevEl: ".swiper-button-prev",
173          },
174          parallax: true,
175          direction: "horizontal",
176          effect: "parallax", // Considera desactivar 'parallax' si no es esencial
177          speed: 3000,
178          autoplay: {
179            pauseOnMouseEnter: false,
180            disableOnInteraction: false,
181            delay: 5000,
182          },
183          initialSlide: 0,
184          breakpoints: {
185            992: {
186              slidesPerView: 2,
187              spaceBetween: 30,
188            },
189          },
190        });
191      }
192    }
193
194    function updateLine(tab) {
195      const rect = tab.getBoundingClientRect();
196      const offsetParent = tab.offsetParent || tab.parentElement; // Usar parentElement si offsetParent es null
197      if (offsetParent) {
198        const parentRect = offsetParent.getBoundingClientRect();
199        line.style.width = `${rect.width}px`;
200        line.style.left = `${rect.left - parentRect.left}px`;
201      } else {
202        console.error("No se pudo determinar el offsetParent ni el parentElement");
203      }
204    }
205
206    function updateTabs(index) {
207      tabs.forEach((tab) => tab.classList.remove("active"));
208      tabs[index].classList.add("active");
209      updateLine(tabs[index]);
210      contents.forEach((content) => (content.style.display = "none"));
211      const contentToShow = tabsContainer.querySelector(`#contenido-${index}`);
212      contentToShow.style.display = "block";
213      // Destruir la instancia de Swiper anterior si existe
214      if (swiperInstance) {
215        swiperInstance.destroy(true, true);
216      }
217      // Inicializar Swiper solo si el tab tiene el swiper
218      initializeSwiper(contentToShow);
219    }
220    const firstTab = tabs[0];
221    const firstContent = contents[0]; // Definir firstContent correctamente
222    if (firstTab && firstContent) {
223      firstTab.classList.add("active");
224      updateLine(firstTab);
225      firstContent.style.display = "block"; // Mostrar el primer contenido
226      initializeSwiper(firstContent); // Inicializar Swiper en la primera tab
227    }
228    let resizeRAF;
229    window.onresize = () => {
230      cancelAnimationFrame(resizeRAF);
231      resizeRAF = requestAnimationFrame(() => {
232        const activeTab = tabsContainer.querySelector(".active");
233        if (activeTab) {
234          updateLine(activeTab);
235        }
236      });
237    };
238    tabs.forEach((tab, index) => {
239      tab.addEventListener("click", () => {
240        updateTabs(index);
241      });
242    });
243    if (select) {
244      select.addEventListener("change", (event) => {
245        const index = event.target.value;
246        updateTabs(index);
247      });
248    }
249  });
250
251  var headerHeight = document.querySelector("header").offsetHeight;
252
253  // Desplazamiento suave con offset para anclas existentes
254  if (window.location.hash) {
255    var target = document.querySelector(window.location.hash);
256
257    var anchor = window.location.hash;
258    var anchor_ele = anchor.substring(1); // Elimina el '#' del hash
259
260    if (target) {
261      window.scrollTo({
262        top: target.offsetTop - headerHeight,
263        behavior: "smooth",
264      });
265    }
266
267    // Esperar a que los tabs estén listos
268
269    setTimeout(function () {
270      var elements = document.querySelectorAll("[data-anchor]");
271      elements.forEach(function (element) {
272        if (element.getAttribute("data-anchor") === anchor_ele) {
273          element.click();
274        }
275      });
276    }, 300); // Retraso de 300ms
277  }
278
279  // Desplazamiento suave con offset al hacer clic en enlaces
280  document.querySelectorAll('a[href^="#"]').forEach((anchor) => {
281    anchor.addEventListener("click", function (e) {
282      e.preventDefault();
283
284      var target = document.querySelector(this.getAttribute("href"));
285      var anchor = this.getAttribute("href");
286
287      if (target) {
288        window.scrollTo({
289          top: target.offsetTop - headerHeight,
290          behavior: "smooth",
291        });
292      }
293
294      // Click automático en elementos con data-anchor después de un retraso
295      setTimeout(function () {
296        var anchor_ele = anchor.substring(1); // Elimina el '#' del hash
297
298        var elements = document.querySelectorAll("[data-anchor]");
299        elements.forEach(function (element) {
300          if (element.getAttribute("data-anchor") === anchor_ele) {
301            element.click();
302          }
303        });
304      }, 800); // Retraso de 300ms
305    });
306  });
307
308  const colaboradores = document.querySelectorAll(".colaboradores");
309  const resultados_colaboradores = document.querySelectorAll(".resultado-colaboradores");
310
311  colaboradores.forEach((colaborador) => {
312    colaborador.addEventListener("click", function () {
313      const comunaData = this.getAttribute("data");
314
315      resultados_colaboradores.forEach((resultado) => {
316        if (resultado.getAttribute("data") === comunaData) {
317          resultado.style.display = "flex";
318        } else {
319          resultado.style.display = "none";
320        }
321      });
322    });
323  });
324
325  const comunas = document.querySelectorAll(".comuna");
326  const resultados = document.querySelectorAll(".resultado");
327
328  comunas.forEach((comuna) => {
329    comuna.addEventListener("click", function () {
330      const comunaData = this.getAttribute("data-comuna");
331
332      resultados.forEach((resultado) => {
333        if (resultado.getAttribute("data-comuna") === comunaData) {
334          resultado.style.display = "block";
335        } else {
336          resultado.style.display = "none";
337        }
338      });
339    });
340  });
341
342  const comunaItems = document.querySelectorAll(".lista-vertical li");
343  const contenidoItems = document.querySelectorAll(".lista-vertical-contenido");
344
345  comunaItems.forEach((item) => {
346    item.addEventListener("click", function () {
347      // Remover la clase 'activo' de todos los elementos de la lista
348      comunaItems.forEach((i) => i.classList.remove("activo"));
349      // Agregar la clase 'activo' al elemento clicado
350      this.classList.add("activo");
351
352      // Obtener el valor de data-comuna del elemento clicado
353      const comuna = this.getAttribute("data-comuna");
354
355      // Ocultar todos los contenidos
356      contenidoItems.forEach((contenido) => {
357        contenido.classList.remove("activo");
358      });
359
360      // Mostrar el contenido correspondiente
361      const contenidoActivo = document.querySelector(`.lista-vertical-contenido.${comuna}`);
362      if (contenidoActivo) {
363        contenidoActivo.classList.add("activo");
364      }
365    });
366  });
367
368  const header = document.querySelector("header");
369
370  window.addEventListener("scroll", function () {
371    if (window.scrollY > 200) {
372      header.classList.add("scrolled");
373    } else {
374      header.classList.remove("scrolled");
375    }
376  });
377
378  const sectionObserver = lozad(".lozad", {
379    rootMargin: "0px",
380    threshold: 0.1,
381    load: function (el) {
382      if (el.dataset.loaded === "false") {
383        const content = el.querySelector(".section-content");
384        if (content) {
385          content.style.display = "block";
386          el.dataset.loaded = "true";
387          //console.log('Sección cargada:', el);
388          // Inicializa Lozad.js para las imágenes dentro de la sección cargada
389          const innerObserver = lozad(content.querySelectorAll(".lozad"));
390          innerObserver.observe();
391        } else {
392          console.error("No se encontró el contenido de la sección:", el);
393        }
394      }
395
396      // Igualar la altura después de cargar las imágenes
397      equalizeHeight();
398    },
399  });
400
401  sectionObserver.observe();
402
403  Fancybox.bind("[data-fancybox]", {
404    // Tus opciones personalizadas
405  });
406
407  const btnVerLegal = document.querySelector(".btn-ver-legal");
408  const verLegal = document.querySelector(".legal");
409
410  if (btnVerLegal && verLegal) {
411    btnVerLegal.addEventListener("click", function () {
412      if (verLegal.classList.contains("show")) {
413        verLegal.classList.remove("show");
414        setTimeout(() => {
415          verLegal.style.display = "none";
416        }, 0); // Tiempo de la transición
417      } else {
418        verLegal.style.display = "block";
419        setTimeout(() => {
420          verLegal.classList.add("show");
421        }, 0); // Pequeño retraso para activar la transición
422      }
423    });
424  }
425
426  // Botones funcionamiento mapa
427  const btnVerComoLlegar = document.getElementById("btn-ver-como-llegar");
428  const btnVerMapaGoogle = document.getElementById("btn-ver-mapa-google");
429  const mapaGoogle = document.getElementById("mapa-google");
430  const mapaLlegar = document.getElementById("mapa-llegar");
431
432  if (btnVerComoLlegar && btnVerMapaGoogle && mapaGoogle && mapaLlegar) {
433    btnVerComoLlegar.addEventListener("click", function (event) {
434      event.preventDefault();
435      mapaGoogle.style.display = "none";
436      mapaLlegar.style.display = "flex";
437      btnVerComoLlegar.style.display = "none";
438      btnVerMapaGoogle.style.display = "flex";
439    });
440
441    btnVerMapaGoogle.addEventListener("click", function (event) {
442      event.preventDefault();
443      mapaLlegar.style.display = "none";
444      mapaGoogle.style.display = "flex";
445      btnVerComoLlegar.style.display = "flex";
446      btnVerMapaGoogle.style.display = "none";
447    });
448  }
449
450  var modal = document.getElementById("modal");
451  var openButtons = document.querySelectorAll(".abrir-modal-ws");
452
453  if (modal && openButtons.length > 0) {
454    var formWS = modal.querySelector("#form-ws");
455    var inputModelo = formWS ? formWS.querySelector('input[name="modelo"]') : null;
456    var inputProyecto = formWS ? formWS.querySelector('input[name="proyecto"]') : null;
457    var inputMensaje = formWS ? formWS.querySelector('input[name="mensaje_personalizado"]') : null;
458    var inputTelefono = formWS ? formWS.querySelector('input[name="telefono_ws"]') : null;
459
460    openButtons.forEach(function (button) {
461      button.addEventListener("click", function (event) {
462        event.preventDefault();
463
464        if (formWS && button.classList.contains("consulta-modelo-ws")) {
465          var modeloNombre = button.dataset.modelo || "";
466          var proyectoNombre = button.dataset.proyecto || (inputProyecto ? inputProyecto.defaultValue : "");
467          var etapaNombre = button.dataset.etapa || "";
468          var whatsappNumero = button.dataset.whatsapp || "";
469
470          if (inputModelo) inputModelo.value = modeloNombre;
471          if (inputProyecto) inputProyecto.value = proyectoNombre;
472          if (inputTelefono && whatsappNumero) inputTelefono.value = whatsappNumero;
473          if (inputMensaje) {
474            var mensajeConsulta = "Hola, me interesa la " + modeloNombre + " de " + proyectoNombre;
475            if (etapaNombre) {
476              mensajeConsulta += " " + etapaNombre;
477            }
478            inputMensaje.value = mensajeConsulta;
479          }
480        } else if (formWS) {
481          if (inputModelo) inputModelo.value = inputModelo.defaultValue;
482          if (inputProyecto) inputProyecto.value = inputProyecto.defaultValue;
483          if (inputMensaje) inputMensaje.value = inputMensaje.defaultValue;
484          if (inputTelefono) inputTelefono.value = inputTelefono.defaultValue;
485        }
486
487        Fancybox.show([{ src: "#modal", type: "inline" }], {
488          dragToClose: false,
489          autoFocus: false,
490          on: {
491            destroy: function () {
492              if (typeof window.resetearFormularioWS === "function") {
493                window.resetearFormularioWS();
494              }
495            },
496          },
497        });
498      });
499    });
500  }
501});
502
503window.onload = function () {
504  var swiperIframeSpecial = new Swiper(".swiper-iframe-especial", {
505    centeredSlides: false,
506    loop: true,
507    slidesPerView: 1,
508    spaceBetween: 30,
509    autoHeight: false,
510    parallax: true,
511    direction: "horizontal",
512    effect: "parallax", // Considera desactivar 'parallax' si no es esencial
513
514    lazy: {
515      loadPrevNext: true,
516      loadPrevNextAmount: 2,
517    },
518    keyboard: {
519      enabled: true,
520      onlyInViewport: true,
521    },
522    pagination: {
523      el: ".swiper-pagination",
524      clickable: true,
525      dynamicBullets: true,
526    },
527  });
528
529  var swiperPortadas = new Swiper(".swiper-portadas", {
530    centeredSlides: false,
531    loop: true,
532    slidesPerView: 1,
533    spaceBetween: 0,
534    autoHeight: true,
535
536    keyboard: {
537      enabled: true,
538      onlyInViewport: true,
539    },
540    // pagination: {
541    //     el: '.swiper-pagination',
542    //     clickable: true,
543    //     dynamicBullets: true
544    // },
545
546    navigation: {
547      nextEl: ".swiper-button-next",
548      prevEl: ".swiper-button-prev",
549    },
550
551    parallax: false,
552    direction: "horizontal",
553    effect: "fade", // Considera desactivar 'parallax' si no es esencial
554
555    fadeEffect: {
556      crossFade: true,
557    },
558
559    speed: 3000,
560    autoplay: {
561      pauseOnMouseEnter: false,
562      disableOnInteraction: false,
563      delay: 8000,
564    },
565
566    breakpoints: {
567      992: {
568        autoHeight: false,
569        slidesPerView: 1,
570        spaceBetween: 0,
571      },
572    },
573  });
574
575  var swiper_dos_imagenes = new Swiper(".swiper-dos-imagenes", {
576    centeredSlides: false,
577    loop: false,
578    slidesPerView: 1,
579    spaceBetween: 0,
580    parallax: true,
581    lazy: {
582      loadPrevNext: true,
583      loadPrevNextAmount: 1,
584    },
585    keyboard: {
586      enabled: true,
587      onlyInViewport: true,
588    },
589    pagination: {
590      el: ".swiper-pagination",
591      clickable: true,
592      dynamicBullets: true,
593    },
594
595    breakpoints: {
596      992: {
597        slidesPerView: 2,
598        spaceBetween: 30,
599      },
600    },
601  });
602
603  var swiper_dos_imagenes = new Swiper(".swiper-una-imagen", {
604    centeredSlides: false,
605    loop: false,
606    slidesPerView: 1,
607    spaceBetween: 0,
608    parallax: true,
609    lazy: {
610      loadPrevNext: true,
611      loadPrevNextAmount: 1,
612    },
613    keyboard: {
614      enabled: true,
615      onlyInViewport: true,
616    },
617    pagination: {
618      el: ".swiper-pagination",
619      clickable: true,
620      dynamicBullets: true,
621    },
622    navigation: {
623      nextEl: ".swiper-button-next",
624      prevEl: ".swiper-button-prev",
625    },
626
627    breakpoints: {
628      992: {
629        slidesPerView: 1,
630        spaceBetween: 30,
631      },
632    },
633  });
634
635  var swiperGaleriasProyectos = new Swiper(".swiper-galerias-proyectos-internos", {
636    centeredSlides: false,
637    loop: false,
638    slidesPerView: 1,
639
640    spaceBetween: 0,
641    parallax: true,
642    lazy: {
643      loadPrevNext: true,
644      loadPrevNextAmount: 2,
645    },
646    keyboard: {
647      enabled: true,
648      onlyInViewport: true,
649    },
650    pagination: {
651      el: ".swiper-pagination-proyectos-internos",
652      clickable: true,
653      dynamicBullets: true,
654    },
655    navigation: {
656      nextEl: ".swiper-button-next",
657      prevEl: ".swiper-button-prev",
658    },
659    direction: "horizontal",
660    effect: "parallax", // Considera desactivar 'parallax' si no es esencial
661    breakpoints: {
662      992: {
663        slidesPerView: 2,
664        spaceBetween: 30,
665      },
666    },
667  });
668
669  var swiper = new Swiper(".swiper-galerias-proyectos", {
670    centeredSlides: true,
671    loop: true,
672    slidesPerView: 1,
673    spaceBetween: 0,
674    parallax: true,
675    lazy: {
676      loadPrevNext: true,
677      loadPrevNextAmount: 1,
678    },
679    keyboard: {
680      enabled: true,
681      onlyInViewport: true,
682    },
683    pagination: {
684      el: ".swiper-pagination",
685      clickable: true,
686      dynamicBullets: false,
687    },
688    navigation: {
689      nextEl: ".swiper-button-next",
690      prevEl: ".swiper-button-prev",
691    },
692    direction: "horizontal",
693    effect: "parallax", // Considera desactivar 'parallax' si no es esencial
694    breakpoints: {
695      992: {
696        slidesPerView: 1,
697        spaceBetween: 0,
698      },
699    },
700  });
701
702  // Contar el número de slides
703  var numberOfSlides = document.querySelectorAll(".swiper-galerias-internas .swiper-slide").length;
704
705  // Configuración condicional de Swiper
706  var swiperConfig = {
707    centeredSlides: true,
708    loop: numberOfSlides > 3, // Usar loop solo si hay más de 3 slides
709    slidesPerView: 1,
710    spaceBetween: 15,
711    lazy: {
712      loadPrevNext: true,
713      loadPrevNextAmount: 4,
714    },
715    keyboard: {
716      enabled: true,
717      onlyInViewport: true,
718    },
719    pagination: {
720      el: ".swiper-pagination",
721      clickable: true,
722      dynamicBullets: true,
723    },
724    navigation: {
725      nextEl: ".swiper-button-next",
726      prevEl: ".swiper-button-prev",
727    },
728    direction: "horizontal",
729    effect: "slide", // Considera desactivar 'parallax' si no es esencial
730    initialSlide: 0,
731
732    direction: "horizontal",
733
734    speed: 3000,
735    autoplay: {
736      pauseOnMouseEnter: false,
737      disableOnInteraction: false,
738      delay: 5000,
739    },
740
741    breakpoints: {
742      992: {
743        slidesPerView: 2.3,
744        spaceBetween: 30,
745      },
746    },
747  };
748
749  // Inicializar Swiper con la configuración condicional
750  var swiper = new Swiper(".swiper-galerias-internas", swiperConfig);
751
752  var swiper = new Swiper(".swiper-modelos-relacionados", {
753    slidesPerView: 1,
754    spaceBetween: 15,
755    lazy: {
756      loadPrevNext: true,
757      loadPrevNextAmount: 3,
758    },
759    keyboard: {
760      enabled: true,
761      onlyInViewport: true,
762    },
763    pagination: {
764      el: ".swiper-pagination-modelos",
765      clickable: true,
766      dynamicBullets: true,
767    },
768    navigation: {
769      nextEl: ".swiper-button-next",
770      prevEl: ".swiper-button-prev",
771    },
772    direction: "horizontal",
773    effect: "slide",
774    parallax: true,
775
776    centerInsufficientSlides: true,
777
778    initialSlide: 0,
779    breakpoints: {
780      992: {
781        // sobre X px
782        slidesPerView: 2,
783        spaceBetween: 45,
784      },
785
786      1300: {
787        slidesPerView: 3,
788        loop: true,
789      },
790
791      1700: {
792        slidesPerView: 4,
793        loop: true,
794        spaceBetween: 45,
795      },
796    },
797  });
798};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.