PageSourceSearch

https://www.mobileaction.co/wp-content/themes/mobileaction/assets/js/all.js?v=451931

js mobileaction.co collected 2026-09-24 18:34:30 UTC 109,807 bytes, 3,856 lines download raw bytes

1/* ai-gem-3d.js */
2// (function () {
3//   "use strict";
4
5//   var FACE_COLORS = [
6//     0x4478ff,
7//     0x8a54ff,
8//     0xff4f4f,
9//     0xf79009,
10//     0x63c909,
11//     0x4478ff,
12//     0x8a54ff,
13//     0xff4f4f,
14//   ];
15
16//   function buildGemGeometry(radius) {
17//     var geo = new THREE.OctahedronGeometry(radius, 0);
18//     geo = geo.toNonIndexed();
19
20//     var posCount = geo.attributes.position.count;
21//     var colors = new Float32Array(posCount * 3);
22//     var c = new THREE.Color();
23
24//     for (var i = 0; i < posCount; i += 3) {
25//       var faceIdx = Math.floor(i / 3);
26//       c.set(FACE_COLORS[faceIdx % FACE_COLORS.length]);
27//       for (var v = 0; v < 3; v++) {
28//         colors[(i + v) * 3] = c.r;
29//         colors[(i + v) * 3 + 1] = c.g;
30//         colors[(i + v) * 3 + 2] = c.b;
31//       }
32//     }
33
34//     geo.setAttribute("color", new THREE.BufferAttribute(colors, 3));
35//     geo.computeVertexNormals();
36//     return geo;
37//   }
38
39//   function createGlowSprite(colorStr, size) {
40//     var cv = document.createElement("canvas");
41//     cv.width = 256;
42//     cv.height = 256;
43//     var ctx = cv.getContext("2d");
44//     var g = ctx.createRadialGradient(128, 128, 0, 128, 128, 128);
45//     g.addColorStop(0, colorStr);
46//     g.addColorStop(0.4, colorStr.replace(",1)", ",0.3)"));
47//     g.addColorStop(1, "rgba(0,0,0,0)");
48//     ctx.fillStyle = g;
49//     ctx.fillRect(0, 0, 256, 256);
50
51//     var tex = new THREE.CanvasTexture(cv);
52//     var mat = new THREE.SpriteMaterial({
53//       map: tex,
54//       transparent: true,
55//       depthWrite: false,
56//       depthTest: false,
57//       blending: THREE.AdditiveBlending,
58//     });
59//     var sprite = new THREE.Sprite(mat);
60//     sprite.scale.set(size, size, 1);
61//     return sprite;
62//   }
63
64//   var CSS_SIZES = {
65//     sm: { w: 32, h: 36 },
66//     md: { w: 52, h: 58 },
67//     lg: { w: 120, h: 134 },
68//   };
69
70//   var RENDER_MULT = 5;
71
72//   function initGem3D(canvas) {
73//     try {
74//       var size = canvas.getAttribute("data-gem-size") || "sm";
75//       var dim = CSS_SIZES[size] || CSS_SIZES.sm;
76
77//       canvas.width = dim.w * RENDER_MULT;
78//       canvas.height = dim.h * RENDER_MULT;
79//       canvas.style.width = dim.w + "px";
80//       canvas.style.height = dim.h + "px";
81
82//       var renderer = new THREE.WebGLRenderer({
83//         canvas: canvas,
84//         alpha: true,
85//         antialias: true,
86//       });
87//       renderer.setSize(dim.w * RENDER_MULT, dim.h * RENDER_MULT, false);
88//       renderer.outputEncoding = THREE.sRGBEncoding;
89
90//       var scene = new THREE.Scene();
91
92//       var fov = size === "lg" ? 30 : size === "md" ? 35 : 40;
93//       var camZ = size === "lg" ? 4.0 : size === "md" ? 3.8 : 3.5;
94//       var camera = new THREE.PerspectiveCamera(fov, dim.w / dim.h, 0.1, 100);
95//       camera.position.set(0, 0.12, camZ);
96
97//       // Main gem
98//       var mainGeo = buildGemGeometry(0.55);
99//       var mainMat = new THREE.MeshPhysicalMaterial({
100//         vertexColors: true,
101//         roughness: 0.08,
102//         metalness: 0.15,
103//         clearcoat: 1.0,
104//         clearcoatRoughness: 0.03,
105//         transparent: true,
106//         opacity: 0.95,
107//         reflectivity: 0.9,
108//       });
109//       var mainGem = new THREE.Mesh(mainGeo, mainMat);
110//       mainGem.scale.set(1, 1.35, 1);
111//       scene.add(mainGem);
112
113//       // Small gem
114//       var smallGeo = buildGemGeometry(0.22);
115//       var smallMat = new THREE.MeshPhysicalMaterial({
116//         vertexColors: true,
117//         roughness: 0.06,
118//         metalness: 0.15,
119//         clearcoat: 1.0,
120//         clearcoatRoughness: 0.03,
121//         transparent: true,
122//         opacity: 0.92,
123//         reflectivity: 0.9,
124//       });
125//       var smallGem = new THREE.Mesh(smallGeo, smallMat);
126//       smallGem.position.set(0.55, 0.72, 0.1);
127//       smallGem.scale.set(1, 1.3, 1);
128//       scene.add(smallGem);
129
130//       // Glow sprites — additive blending, colored (not white)
131//       var mainGlow = createGlowSprite("rgba(120,80,255,1)", 2.0);
132//       mainGlow.position.set(0, 0, -0.3);
133//       scene.add(mainGlow);
134
135//       var smallGlow = createGlowSprite("rgba(255,160,40,1)", 0.9);
136//       smallGlow.position.set(0.55, 0.72, -0.1);
137//       scene.add(smallGlow);
138
139//       // Lighting — strong colored lights
140//       scene.add(new THREE.AmbientLight(0xffffff, 0.3));
141
142//       var blueLight = new THREE.PointLight(0x4488ff, 4.0, 14);
143//       blueLight.position.set(-2, 1.5, 3);
144//       scene.add(blueLight);
145
146//       var purpleLight = new THREE.PointLight(0x8855ff, 3.5, 14);
147//       purpleLight.position.set(2.5, -0.5, 2.5);
148//       scene.add(purpleLight);
149
150//       var redLight = new THREE.PointLight(0xff5555, 2.5, 12);
151//       redLight.position.set(0, 3, -1);
152//       scene.add(redLight);
153
154//       var orangeLight = new THREE.PointLight(0xffa500, 2.0, 12);
155//       orangeLight.position.set(-1.5, -2, 2);
156//       scene.add(orangeLight);
157
158//       var greenLight = new THREE.PointLight(0x88ff00, 1.5, 12);
159//       greenLight.position.set(2, 0, -2);
160//       scene.add(greenLight);
161
162//       var keyLight = new THREE.DirectionalLight(0xffffff, 0.8);
163//       keyLight.position.set(1, 2, 4);
164//       scene.add(keyLight);
165
166//       var fillLight = new THREE.DirectionalLight(0xaabbff, 0.4);
167//       fillLight.position.set(-2, -1, 2);
168//       scene.add(fillLight);
169
170//       // Interaction state
171//       var state = {
172//         rotSpeed: 0.4,
173//         targetRotSpeed: 0.4,
174//         smallBounce: 0,
175//         targetSmallBounce: 0,
176//         lightBoost: 1,
177//         targetLightBoost: 1,
178//       };
179
180//       var baseLights = { blue: 4.0, purple: 3.5, red: 2.5, orange: 2.0, green: 1.5 };
181
182//       var hoverTarget = canvas.closest("a") || canvas.closest("button") || canvas.parentElement;
183//       if (hoverTarget) {
184//         hoverTarget.addEventListener("mouseenter", function () {
185//           state.targetRotSpeed = 1.4;
186//           state.targetSmallBounce = 1;
187//           state.targetLightBoost = 2.0;
188//         });
189//         hoverTarget.addEventListener("mouseleave", function () {
190//           state.targetRotSpeed = 0.4;
191//           state.targetSmallBounce = 0;
192//           state.targetLightBoost = 1;
193//         });
194//       }
195
196//       var prefersReduced = window.matchMedia("(prefers-reduced-motion: reduce)").matches;
197//       var clock = new THREE.Clock();
198
199//       function animate() {
200//         requestAnimationFrame(animate);
201//         var dt = clock.getDelta();
202//         var t = clock.getElapsedTime();
203
204//         if (prefersReduced) {
205//           renderer.render(scene, camera);
206//           return;
207//         }
208
209//         state.rotSpeed += (state.targetRotSpeed - state.rotSpeed) * dt * 3;
210//         state.smallBounce += (state.targetSmallBounce - state.smallBounce) * dt * 4;
211//         state.lightBoost += (state.targetLightBoost - state.lightBoost) * dt * 3;
212
213//         mainGem.rotation.y += state.rotSpeed * dt;
214//         mainGem.rotation.x = Math.sin(t * 0.5) * 0.08;
215//         mainGem.position.y = Math.sin(t * 0.8) * 0.05;
216
217//         smallGem.rotation.y -= state.rotSpeed * 1.3 * dt;
218//         smallGem.rotation.z = Math.sin(t * 0.7) * 0.15;
219//         smallGem.position.set(
220//           0.55 + state.smallBounce * Math.sin(t * 3.5) * 0.05,
221//           0.72 + state.smallBounce * Math.sin(t * 4) * 0.1,
222//           0.1
223//         );
224
225//         mainGlow.position.y = mainGem.position.y;
226//         mainGlow.material.opacity = 0.5 + Math.sin(t * 2.0) * 0.1 * state.lightBoost;
227
228//         smallGlow.position.x = smallGem.position.x;
229//         smallGlow.position.y = smallGem.position.y;
230//         smallGlow.material.opacity = 0.4 + Math.sin(t * 2.8) * 0.1 * state.lightBoost;
231
232//         blueLight.intensity = baseLights.blue * state.lightBoost;
233//         purpleLight.intensity = baseLights.purple * state.lightBoost;
234//         redLight.intensity = baseLights.red * state.lightBoost;
235//         orangeLight.intensity = baseLights.orange * state.lightBoost;
236//         greenLight.intensity = baseLights.green * state.lightBoost;
237
238//         renderer.render(scene, camera);
239//       }
240
241//       animate();
242//     } catch (e) {
243//       console.error("ai-gem-3d init error:", e);
244//     }
245//   }
246
247//   function bootAll() {
248//     if (typeof THREE === "undefined") {
249//       setTimeout(bootAll, 100);
250//       return;
251//     }
252
253//     var canvases = document.querySelectorAll(".ai-gem-3d");
254//     for (var i = 0; i < canvases.length; i++) {
255//       if (!canvases[i].dataset.gemInit) {
256//         canvases[i].dataset.gemInit = "1";
257//         initGem3D(canvases[i]);
258//       }
259//     }
260//   }
261
262//   if (document.readyState === "loading") {
263//     document.addEventListener("DOMContentLoaded", bootAll);
264//   } else {
265//     bootAll();
266//   }
267
268//   window.initGem3D = initGem3D;
269// })();
270
271
272(function () {
273  "use strict";
274
275  var FACE_COLORS = [
276    0x4478ff,
277    0x8a54ff,
278    0xff4f4f,
279    0xf79009,
280    0x63c909,
281    0x4478ff,
282    0x8a54ff,
283    0xff4f4f,
284  ];
285
286  var CSS_SIZES = {
287    xs: { w: 24, h: 27 },
288    sm: { w: 32, h: 36 },
289    md: { w: 52, h: 58 },
290    lg: { w: 120, h: 134 },
291  };
292
293  var RENDER_MULT = 3;
294
295  function buildGemGeometry(radius) {
296    var geo = new THREE.OctahedronGeometry(radius, 0);
297    geo = geo.toNonIndexed();
298
299    var posCount = geo.attributes.position.count;
300    var colors = new Float32Array(posCount * 3);
301    var c = new THREE.Color();
302
303    for (var i = 0; i < posCount; i += 3) {
304      var faceIdx = Math.floor(i / 3);
305      c.set(FACE_COLORS[faceIdx % FACE_COLORS.length]);
306
307      for (var v = 0; v < 3; v++) {
308        colors[(i + v) * 3] = c.r;
309        colors[(i + v) * 3 + 1] = c.g;
310        colors[(i + v) * 3 + 2] = c.b;
311      }
312    }
313
314    geo.setAttribute("color", new THREE.BufferAttribute(colors, 3));
315    geo.computeVertexNormals();
316
317    return geo;
318  }
319
320  function createGlowSprite(colorStr, size) {
321    var cv = document.createElement("canvas");
322    cv.width = 256;
323    cv.height = 256;
324
325    var ctx = cv.getContext("2d");
326    var g = ctx.createRadialGradient(128, 128, 0, 128, 128, 128);
327
328    g.addColorStop(0, colorStr);
329    g.addColorStop(0.4, colorStr.replace(",1)", ",0.32)"));
330    g.addColorStop(1, "rgba(0,0,0,0)");
331
332    ctx.fillStyle = g;
333    ctx.fillRect(0, 0, 256, 256);
334
335    var tex = new THREE.CanvasTexture(cv);
336    tex.needsUpdate = true;
337
338    var mat = new THREE.SpriteMaterial({
339      map: tex,
340      transparent: true,
341      depthWrite: false,
342      depthTest: false,
343      blending: THREE.AdditiveBlending,
344    });
345
346    var sprite = new THREE.Sprite(mat);
347    sprite.scale.set(size, size, 1);
348
349    return sprite;
350  }
351
352  function initGem3D(canvas) {
353    if (!canvas || canvas.dataset.gemInit === "1") return;
354
355    try {
356      var size = canvas.getAttribute("data-gem-size") || "sm";
357      var dim = CSS_SIZES[size] || CSS_SIZES.sm;
358      var pixelRatio = Math.min(window.devicePixelRatio || 1, 2);
359
360      canvas.dataset.gemInit = "1";
361      canvas.style.width = dim.w + "px";
362      canvas.style.height = dim.h + "px";
363      canvas.style.display = "block";
364
365      canvas.width = Math.round(dim.w * pixelRatio * RENDER_MULT);
366      canvas.height = Math.round(dim.h * pixelRatio * RENDER_MULT);
367
368      var renderer = new THREE.WebGLRenderer({
369        canvas: canvas,
370        alpha: true,
371        antialias: true,
372        premultipliedAlpha: false,
373        powerPreference: "high-performance",
374      });
375
376      renderer.setPixelRatio(pixelRatio * RENDER_MULT);
377      renderer.setSize(dim.w, dim.h, false);
378      renderer.setClearColor(0x000000, 0);
379      renderer.outputEncoding = THREE.sRGBEncoding;
380      renderer.toneMapping = THREE.ACESFilmicToneMapping;
381      renderer.toneMappingExposure = 1.65;
382
383      var scene = new THREE.Scene();
384
385      var fov = size === "lg" ? 30 : size === "md" ? 35 : 40;
386      var camZ = size === "lg" ? 4.0 : size === "md" ? 3.5 : 3.0;
387      var camera = new THREE.PerspectiveCamera(fov, dim.w / dim.h, 0.1, 100);
388      camera.position.set(0, 0.08, camZ);
389
390      // Main gem
391      var mainGeo = buildGemGeometry(0.62);
392      var mainMat = new THREE.MeshBasicMaterial({
393        vertexColors: true,
394        transparent: true,
395        opacity: 0.98,
396        side: THREE.DoubleSide,
397        color: 0xffffff,
398      });
399
400      var highlight = new THREE.Mesh(
401        new THREE.OctahedronGeometry(0.2),
402        new THREE.MeshBasicMaterial({
403          color: 0xffffff,
404          transparent: true,
405          opacity: 0.15,
406        })
407      );
408      highlight.position.set(0, 0, 0.3);
409      scene.add(highlight);
410
411      var mainGem = new THREE.Mesh(mainGeo, mainMat);
412      mainGem.scale.set(1, 1.1, 1);
413      
414      scene.add(mainGem);
415
416      // Small gem
417      var smallGeo = buildGemGeometry(0.26);
418      var smallMat = new THREE.MeshBasicMaterial({
419        vertexColors: true,
420        transparent: true,
421        opacity: 0.96,
422        side: THREE.DoubleSide,
423      });
424
425      var smallGem = new THREE.Mesh(smallGeo, smallMat);
426      smallGem.position.set(0.62, 0.78, 0.1);
427      smallGem.scale.set(1, 1.1, 1);
428      scene.add(smallGem);
429
430      // Glow
431      var mainGlow = createGlowSprite("rgba(120,80,255,1)", 2.15);
432      mainGlow.position.set(0, 0, -0.3);
433      scene.add(mainGlow);
434
435      var smallGlow = createGlowSprite("rgba(255,160,40,1)", 1.0);
436      smallGlow.position.set(0.62, 0.78, -0.1);
437      scene.add(smallGlow);
438
439      // Lights
440      scene.add(new THREE.AmbientLight(0xffffff, 0.34));
441
442      var blueLight = new THREE.PointLight(0x4488ff, 4.0, 14);
443      blueLight.position.set(-2, 1.5, 3);
444      scene.add(blueLight);
445
446      var purpleLight = new THREE.PointLight(0x8855ff, 3.4, 14);
447      purpleLight.position.set(2.5, -0.5, 2.5);
448      scene.add(purpleLight);
449
450      var redLight = new THREE.PointLight(0xff5555, 2.4, 12);
451      redLight.position.set(0, 3, -1);
452      scene.add(redLight);
453
454      var orangeLight = new THREE.PointLight(0xffa500, 2.0, 12);
455      orangeLight.position.set(-1.5, -2, 2);
456      scene.add(orangeLight);
457
458      var greenLight = new THREE.PointLight(0x88ff00, 1.5, 12);
459      greenLight.position.set(2, 0, -2);
460      scene.add(greenLight);
461
462      var keyLight = new THREE.DirectionalLight(0xffffff, 0.85);
463      keyLight.position.set(1, 2, 4);
464      scene.add(keyLight);
465
466      var fillLight = new THREE.DirectionalLight(0xaabbff, 0.4);
467      fillLight.position.set(-2, -1, 2);
468      scene.add(fillLight);
469
470      var state = {
471        rotSpeed: 0.4,
472        targetRotSpeed: 0.4,
473        smallBounce: 0,
474        targetSmallBounce: 0,
475        lightBoost: 1,
476        targetLightBoost: 1,
477      };
478
479      var baseLights = {
480        blue: 4.0,
481        purple: 3.4,
482        red: 2.4,
483        orange: 2.0,
484        green: 1.5,
485      };
486
487      var hoverTarget =
488        canvas.closest("a") ||
489        canvas.closest("button") ||
490        canvas.parentElement;
491
492      if (hoverTarget && hoverTarget.dataset.aiGemHoverBound !== "1") {
493        hoverTarget.dataset.aiGemHoverBound = "1";
494
495        hoverTarget.addEventListener("mouseenter", function () {
496          state.targetRotSpeed = 1.2;
497          state.targetSmallBounce = 1;
498          state.targetLightBoost = 1.7;
499        });
500
501        hoverTarget.addEventListener("mouseleave", function () {
502          state.targetRotSpeed = 0.4;
503          state.targetSmallBounce = 0;
504          state.targetLightBoost = 1;
505        });
506      }
507
508      var prefersReduced = window.matchMedia("(prefers-reduced-motion: reduce)").matches;
509      var clock = new THREE.Clock();
510
511      function animate() {
512        if (!canvas.isConnected) {
513          renderer.dispose();
514          return;
515        }
516
517        requestAnimationFrame(animate);
518
519        var dt = clock.getDelta();
520        var t = clock.getElapsedTime();
521
522        if (prefersReduced) {
523          renderer.render(scene, camera);
524          return;
525        }
526
527        state.rotSpeed += (state.targetRotSpeed - state.rotSpeed) * dt * 3;
528        state.smallBounce += (state.targetSmallBounce - state.smallBounce) * dt * 4;
529        state.lightBoost += (state.targetLightBoost - state.lightBoost) * dt * 3;
530
531        mainGem.rotation.y += state.rotSpeed * dt;
532        mainGem.rotation.x = Math.sin(t * 0.5) * 0.08;
533        mainGem.position.y = Math.sin(t * 0.8) * 0.05;
534
535        smallGem.rotation.y -= state.rotSpeed * 1.3 * dt;
536        smallGem.rotation.z = Math.sin(t * 0.7) * 0.15;
537        smallGem.position.set(
538          0.62 + state.smallBounce * Math.sin(t * 3.5) * 0.05,
539          0.78 + state.smallBounce * Math.sin(t * 4) * 0.1,
540          0.1
541        );
542
543        mainGlow.position.y = mainGem.position.y;
544        mainGlow.material.opacity = 0.72 + Math.sin(t * 2.0) * 0.04 * state.lightBoost;
545
546        smallGlow.position.x = smallGem.position.x;
547        smallGlow.position.y = smallGem.position.y;
548        smallGlow.material.opacity = 0.62 + Math.sin(t * 2.8) * 0.05 * state.lightBoost;
549
550        blueLight.intensity = baseLights.blue * state.lightBoost;
551        purpleLight.intensity = baseLights.purple * state.lightBoost;
552        redLight.intensity = baseLights.red * state.lightBoost;
553        orangeLight.intensity = baseLights.orange * state.lightBoost;
554        greenLight.intensity = baseLights.green * state.lightBoost;
555
556        renderer.render(scene, camera);
557      }
558
559      function onResize() {
560        var newPixelRatio = Math.min(window.devicePixelRatio || 1, 2);
561
562        canvas.width = Math.round(dim.w * newPixelRatio * RENDER_MULT);
563        canvas.height = Math.round(dim.h * newPixelRatio * RENDER_MULT);
564
565        renderer.setPixelRatio(newPixelRatio * RENDER_MULT);
566        renderer.setSize(dim.w, dim.h, false);
567
568        camera.aspect = dim.w / dim.h;
569        camera.updateProjectionMatrix();
570      }
571
572      window.addEventListener("resize", onResize);
573      animate();
574    } catch (e) {
575      console.error("ai-gem-3d init error:", e);
576      canvas.dataset.gemInit = "";
577    }
578  }
579
580  function bootAll() {
581    if (typeof THREE === "undefined") {
582      setTimeout(bootAll, 120);
583      return;
584    }
585
586    var canvases = document.querySelectorAll(".ai-gem-3d");
587    for (var i = 0; i < canvases.length; i++) {
588      initGem3D(canvases[i]);
589    }
590  }
591
592  if (document.readyState === "loading") {
593    document.addEventListener("DOMContentLoaded", bootAll);
594  } else {
595    bootAll();
596  }
597
598  window.initGem3D = initGem3D;
599})();
600
601/* script.js */
602var app = {
603  setWindowHeight() {
604    document.documentElement.style.setProperty(
605      "--window-inner-height",
606      $(window).innerHeight() + "px"
607    );
608  },
609
610  swiperFn() {
611    if ($(".story-slider").length > 0) {
612      $(".story-slider").each(function () {
613        const $this = $(this);
614
615        const isLargeScreen = window.innerWidth >= 992;
616
617        const storySlider = new Swiper($this[0], {
618          loop: isLargeScreen ? false : true,
619          speed: 700,
620          slidesPerView: 1,
621          effect: "fade",
622          fadeEffect: {
623            crossFade: true,
624          },
625          simulateTouch: !isLargeScreen ? true : false,
626          observer: true,
627          observeParents: true,
628          autoplay: {
629            delay: 6000,
630            disableOnInteraction: false,
631          },
632          navigation: {
633            nextEl: $this.find(".story-slider-next")[0],
634            prevEl: $this.find(".story-slider-prev")[0],
635          },
636          pagination: {
637            el: $this.find(".story-slider-pagination")[0],
638            clickable: true,
639            renderBullet: function (index, className) {
640              return `<div class="${className}">
641                        <div class="swiper-nav__timeline"><span></span></div>
642                      </div>`;
643            },
644          },
645
646          on: {
647            init: function () {
648              const swiper = this;
649
650              setTimeout(() => {
651                swiper.autoplay.start();
652                updateUI(swiper.realIndex);
653              }, 50);
654            },
655
656            slideChangeTransitionStart: function () {
657              updateUI(this.realIndex);
658            },
659          },
660        });
661
662        function updateUI(activeIndex) {
663          const bullets = $this.find(".swiper-pagination-bullet");
664          const logos = $this.find(".story-slider-logo");
665
666          bullets.each(function (idx) {
667            const span = $(this).find("span");
668            if (span.length) {
669              span.removeClass("start");
670              void span[0].offsetWidth;
671              if (idx === activeIndex) {
672                span.addClass("start");
673              }
674            }
675          });
676
677          logos.each(function () {
678            const logoIndex = parseInt($(this).attr("data-index"), 10);
679            $(this).toggleClass("active", logoIndex === activeIndex);
680          });
681        }
682
683        $this.find(".story-slider-logo").each(function () {
684          $(this).on("click", function () {
685            const clickedIndex = parseInt($(this).attr("data-index"), 10);
686            const currentIndex = storySlider.realIndex;
687
688            if (!isNaN(clickedIndex) && clickedIndex !== currentIndex) {
689              storySlider.slideTo(clickedIndex);
690              updateUI(clickedIndex);
691            }
692          });
693        });
694      });
695    }
696
697    if ($(".app-cycle-slider").length > 0) {
698      var appCycleSlider = new Swiper(".app-cycle-slider", {
699        fadeEffect: {
700          crossFade: true,
701        },
702        speed: 700,
703        watchSlidesVisibility: true,
704        observer: true,
705        spaceBetween: 25,
706        observeParents: true,
707        watchSlidesProgress: true,
708
709        navigation: {
710          nextEl: ".app-cycle-slider-next",
711          prevEl: ".app-cycle-slider-prev",
712        },
713        pagination: {
714          el: ".nav-pagination.swiper-pagination.app-cycle-slider-pagination",
715          clickable: true,
716        },
717        breakpoints: {
718          320: {
719            slidesPerView: 1,
720            spaceBetween: 30,
721          },
722          350: {
723            slidesPerView: 1,
724            spaceBetween: 30,
725          },
726          400: {
727            slidesPerView: 1,
728            spaceBetween: 30,
729          },
730          440: {
731            slidesPerView: 1,
732            spaceBetween: 30,
733          },
734          525: {
735            slidesPerView: 1,
736            spaceBetween: 16,
737          },
738          650: {
739            slidesPerView: 1,
740            spaceBetween: 30,
741          },
742          768: {
743            slidesPerView: 1,
744            spaceBetween: 30,
745          },
746          992: {
747            slidesPerView: 7,
748            spaceBetween: 0,
749          },
750          1200: {
751            slidesPerView: 7,
752            spaceBetween: 0,
753          },
754          1700: {
755            slidesPerView: 7,
756            spaceBetween: 0,
757          },
758        },
759      });
760
761      $(".app-cycle-slider").on("click", ".label", function () {
762        var $currentSlide = $(this).closest(".swiper-slide");
763
764        $(".app-cycle-content-item-wrapper").removeClass("active");
765
766        $currentSlide
767          .find(".app-cycle-content-item-wrapper")
768          .addClass("active");
769      });
770    }
771    if ($(".brands-item-slider-2").length > 0) {
772      var brandsItemSlider2 = new Swiper(".brands-item-slider-2", {
773        loop: true,
774        slideVisibleClass: "is-visible",
775        speed: 700,
776        watchSlidesVisibility: true,
777        observer: true,
778        spaceBetween: 25,
779        observeParents: true,
780        watchSlidesProgress: true,
781
782        navigation: {
783          nextEl: ".brands-item-slider-2-next",
784          prevEl: ".brands-item-slider-2-prev",
785        },
786        pagination: {
787          el: ".nav-pagination.swiper-pagination.brands-item-slider-2-pagination",
788          clickable: true,
789        },
790        breakpoints: {
791          320: {
792            slidesPerView: 3,
793            spaceBetween: 30,
794          },
795          350: {
796            slidesPerView: 3.5,
797            spaceBetween: 30,
798          },
799          400: {
800            slidesPerView: 4,
801            spaceBetween: 30,
802          },
803          440: {
804            slidesPerView: 4,
805            spaceBetween: 30,
806          },
807          525: {
808            slidesPerView: 4,
809            spaceBetween: 30,
810          },
811          650: {
812            slidesPerView: 4,
813            spaceBetween: 30,
814          },
815          768: {
816            slidesPerView: 4,
817            spaceBetween: 30,
818          },
819          992: {
820            slidesPerView: 5,
821            spaceBetween: 30,
822          },
823          1200: {
824            slidesPerView: 5,
825            spaceBetween: 30,
826          },
827          1700: {
828            slidesPerView: 5,
829            spaceBetween: 30,
830          },
831        },
832      });
833    }
834    if ($(".experience-item-slider").length > 0) {
835      var experienceSlider = new Swiper(".experience-item-slider", {
836        loop: true,
837        slideVisibleClass: "is-visible",
838        speed: 700,
839        watchSlidesVisibility: true,
840        observer: true,
841        spaceBetween: 25,
842        observeParents: true,
843        watchSlidesProgress: true,
844        autoplay: {
845          delay: 10000,
846          disableOnInteraction: false,
847        },
848        navigation: {
849          nextEl: ".experience-item-slider-next",
850          prevEl: ".experience-item-slider-prev",
851        },
852        pagination: {
853          el: ".nav-pagination.swiper-pagination.experience-item-slider-nav",
854          clickable: true,
855        },
856        breakpoints: {
857          320: {
858            slidesPerView: 1,
859            spaceBetween: 24,
860          },
861          350: {
862            slidesPerView: 1.6,
863            spaceBetween: 24,
864          },
865          400: {
866            slidesPerView: 1.75,
867            spaceBetween: 24,
868          },
869          440: {
870            slidesPerView: 1.7,
871            spaceBetween: 24,
872          },
873          525: {
874            slidesPerView: 1.8,
875            spaceBetween: 16,
876          },
877          650: {
878            slidesPerView: 1.8,
879            spaceBetween: 16,
880          },
881          768: {
882            slidesPerView: 2.1,
883            spaceBetween: 16,
884          },
885          992: {
886            slidesPerView: 3.1,
887            spaceBetween: 65,
888          },
889          1200: {
890            slidesPerView: 3.1,
891            spaceBetween: 65,
892          },
893          1700: {
894            slidesPerView: 3.1,
895            spaceBetween: 65,
896          },
897        },
898      });
899    }
900
901    if ($(".timeline-item-slider").length > 0) {
902      var timelineItemSlider = new Swiper(".timeline-item-slider", {
903        loop: false,
904        speed: 700,
905        slideVisibleClass: "is-visible",
906        watchSlidesVisibility: true,
907        observer: true,
908        spaceBetween: 25,
909        observeParents: true,
910        watchSlidesProgress: true,
911        navigation: {
912          nextEl: ".timeline-item-slider-next",
913          prevEl: ".timeline-item-slider-prev",
914        },
915        pagination: {
916          el: ".nav-pagination.swiper-pagination.timeline-item-slider-pagination",
917          clickable: true,
918        },
919        breakpoints: {
920          320: {
921            slidesPerView: 1,
922            spaceBetween: 24,
923          },
924          350: {
925            slidesPerView: 1.4,
926            spaceBetween: 60,
927          },
928          400: {
929            slidesPerView: 1.4,
930            spaceBetween: 60,
931          },
932          440: {
933            slidesPerView: 1.4,
934            spaceBetween: 60,
935          },
936          525: {
937            slidesPerView: 1.8,
938            spaceBetween: 16,
939          },
940          650: {
941            slidesPerView: 1.8,
942            spaceBetween: 16,
943          },
944          768: {
945            slidesPerView: 2.1,
946            spaceBetween: 16,
947          },
948          992: {
949            slidesPerView: 3.7,
950            spaceBetween: 80,
951          },
952          1200: {
953            slidesPerView: 3.7,
954            spaceBetween: 80,
955          },
956          1700: {
957            slidesPerView: 3.7,
958            spaceBetween: 80,
959          },
960        },
961      });
962    }
963    if ($(".resource-card-slider").length > 0) {
964      var resourceCardSlider = new Swiper(".resource-card-slider", {
965        loop: false,
966        slideVisibleClass: "is-visible",
967        speed: 700,
968        watchSlidesVisibility: true,
969        observer: true,
970        spaceBetween: 25,
971        observeParents: true,
972        watchSlidesProgress: true,
973
974        navigation: {
975          nextEl: ".resource-card-slider-next",
976          prevEl: ".resource-card-slider-prev",
977        },
978        pagination: {
979          el: ".nav-pagination.swiper-pagination.resource-card-slider-pagination",
980          clickable: true,
981        },
982        breakpoints: {
983          320: {
984            slidesPerView: 1,
985            spaceBetween: 16,
986          },
987          350: {
988            slidesPerView: 1.3,
989            spaceBetween: 16,
990          },
991          376: {
992            slidesPerView: 1.3,
993            spaceBetween: 16,
994          },
995          440: {
996            slidesPerView: 1.4,
997            spaceBetween: 16,
998          },
999          525: {
1000            slidesPerView: 1.4,
1001            spaceBetween: 16,
1002          },
1003          650: {
1004            slidesPerView: 2.1,
1005            spaceBetween: 16,
1006          },
1007          768: {
1008            slidesPerView: 2.1,
1009            spaceBetween: 16,
1010          },
1011          992: {
1012            slidesPerView: 4,
1013            spaceBetween: 22,
1014          },
1015          1200: {
1016            slidesPerView: 3,
1017            spaceBetween: 22,
1018          },
1019          1700: {
1020            slidesPerView: 3,
1021            spaceBetween: 22,
1022          },
1023        },
1024      });
1025    }
1026    if ($(".featured-slider").length > 0) {
1027      var featuredSlider = new Swiper(".featured-slider", {
1028        loop: true,
1029        slideVisibleClass: "is-visible",
1030        slidesPerView: 1,
1031        speed: 700,
1032        watchSlidesVisibility: true,
1033        observer: true,
1034        spaceBetween: 14,
1035        observeParents: true,
1036        watchSlidesProgress: true,
1037
1038        navigation: {
1039          nextEl: ".featured-slider-next",
1040          prevEl: ".featured-slider-prev",
1041        },
1042        pagination: {
1043          el: ".nav-pagination.swiper-pagination.featured-slider-pagination",
1044          clickable: true,
1045        },
1046      });
1047    }
1048    if ($(".other-slider").length > 0) {
1049      var otherSlider = new Swiper(".other-slider", {
1050        loop: true,
1051        slideVisibleClass: "is-visible",
1052        speed: 700,
1053        watchSlidesVisibility: true,
1054        observer: true,
1055        spaceBetween: 25,
1056        observeParents: true,
1057        watchSlidesProgress: true,
1058
1059        navigation: {
1060          nextEl: ".other-slider-next",
1061          prevEl: ".other-slider-prev",
1062        },
1063        pagination: {
1064          el: ".nav-pagination.swiper-pagination.other-slider-pagination",
1065          clickable: true,
1066        },
1067        breakpoints: {
1068          320: {
1069            slidesPerView: 1,
1070            spaceBetween: 24,
1071          },
1072          350: {
1073            slidesPerView: 1.38,
1074            spaceBetween: 24,
1075          },
1076          376: {
1077            slidesPerView: 1.5,
1078            spaceBetween: 24,
1079          },
1080          440: {
1081            slidesPerView: 1.38,
1082            spaceBetween: 24,
1083          },
1084          525: {
1085            slidesPerView: 1.955,
1086            spaceBetween: 24,
1087          },
1088          650: {
1089            slidesPerView: 2.1,
1090            spaceBetween: 16,
1091          },
1092          768: {
1093            slidesPerView: 2.1,
1094            spaceBetween: 16,
1095          },
1096          992: {
1097            slidesPerView: 4,
1098            spaceBetween: 25,
1099          },
1100          1200: {
1101            slidesPerView: 4,
1102            spaceBetween: 25,
1103          },
1104          1700: {
1105            slidesPerView: 4,
1106            spaceBetween: 25,
1107          },
1108        },
1109      });
1110    }
1111    if ($(".other-slider-2").length > 0) {
1112      var otherSlider2 = new Swiper(".other-slider-2", {
1113        loop: true,
1114        slideVisibleClass: "is-visible",
1115        speed: 700,
1116        watchSlidesVisibility: true,
1117        observer: true,
1118        spaceBetween: 22,
1119        observeParents: true,
1120        watchSlidesProgress: true,
1121
1122        navigation: {
1123          nextEl: ".other-slider-2-next",
1124          prevEl: ".other-slider-2-prev",
1125        },
1126        pagination: {
1127          el: ".nav-pagination.swiper-pagination.other-slider-2-pagination",
1128          clickable: true,
1129        },
1130        breakpoints: {
1131          320: {
1132            slidesPerView: 1,
1133            spaceBetween: 14,
1134            centeredSlides: true,
1135          },
1136          350: {
1137            slidesPerView: 1.1,
1138            spaceBetween: 14,
1139            centeredSlides: true,
1140          },
1141          376: {
1142            slidesPerView: 1.1,
1143            spaceBetween: 14,
1144            centeredSlides: true,
1145          },
1146          440: {
1147            slidesPerView: 1.1,
1148            spaceBetween: 14,
1149            centeredSlides: true,
1150          },
1151          525: {
1152            slidesPerView: 1.8,
1153            spaceBetween: 14,
1154            centeredSlides: true,
1155          },
1156          650: {
1157            slidesPerView: 2.1,
1158            spaceBetween: 16,
1159          },
1160          768: {
1161            slidesPerView: 2.1,
1162            spaceBetween: 16,
1163          },
1164          992: {
1165            slidesPerView: 3,
1166            spaceBetween: 22,
1167          },
1168          1200: {
1169            slidesPerView: 3,
1170            spaceBetween: 22,
1171          },
1172          1700: {
1173            slidesPerView: 3,
1174            spaceBetween: 22,
1175          },
1176        },
1177      });
1178    }
1179
1180    if ($(".featured-partner-slider").length > 0) {
1181      var featuredPartnerSlider = new Swiper(".featured-partner-slider", {
1182        loop: false,
1183        slideVisibleClass: "is-visible",
1184        speed: 700,
1185        watchSlidesVisibility: true,
1186        observer: true,
1187        spaceBetween: 25,
1188        observeParents: true,
1189        watchSlidesProgress: true,
1190
1191        navigation: {
1192          nextEl: ".featured-partner-slider-next",
1193          prevEl: ".featured-partner-slider-prev",
1194        },
1195        pagination: {
1196          el: ".nav-pagination.swiper-pagination.featured-partner-slider-pagination",
1197          clickable: true,
1198        },
1199        breakpoints: {
1200          320: {
1201            slidesPerView: 1,
1202            spaceBetween: 14,
1203          },
1204          350: {
1205            slidesPerView: 1.2,
1206            spaceBetween: 14,
1207          },
1208          376: {
1209            slidesPerView: 1.2,
1210            spaceBetween: 14,
1211          },
1212          440: {
1213            slidesPerView: 1.2,
1214        
1214    spaceBetween: 14,
1215          },
1216          525: {
1217            slidesPerView: 1.2,
1218            spaceBetween: 14,
1219          },
1220          650: {
1221            slidesPerView: 2.1,
1222            spaceBetween: 14,
1223          },
1224          768: {
1225            slidesPerView: 2.1,
1226            spaceBetween: 16,
1227          },
1228          992: {
1229            slidesPerView: 3.65,
1230            spaceBetween: 24,
1231          },
1232          1200: {
1233            slidesPerView: 3.65,
1234            spaceBetween: 24,
1235          },
1236          1700: {
1237            slidesPerView: 3.65,
1238            spaceBetween: 24,
1239          },
1240        },
1241      });
1242    }
1243
1244    $(".price-card-slider").each(function (index, sliderEl) {
1245      var $slider = $(sliderEl);
1246      var totalSlides = $slider.find(".swiper-slide").length;
1247      var slidesPerView = 1;
1248      var windowWidth = window.innerWidth;
1249      var simulateTouch = false;
1250
1251      if (windowWidth <= 576) {
1252        $slider.addClass("no-swiper");
1253        return;
1254      } else {
1255        $slider.removeClass("no-swiper");
1256      }
1257
1258      var spaceBetween = 16;
1259      var centeredSlides = false;
1260      var loop = false;
1261
1262      if (windowWidth >= 992) {
1263        if (totalSlides === 1) {
1264          slidesPerView = 1;
1265          spaceBetween = 0;
1266        } else if (totalSlides === 2) {
1267          slidesPerView = 2;
1268          spaceBetween = 0;
1269          $slider.addClass("grid-2");
1270        } else if (totalSlides === 3) {
1271          slidesPerView = totalSlides;
1272          spaceBetween = 25;
1273        } else if (totalSlides === 4) {
1274          slidesPerView = 4;
1275          spaceBetween = 16;
1276        } else {
1277          slidesPerView = 4;
1278          spaceBetween = 16;
1279          centeredSlides = false;
1280          loop = false;
1281        }
1282      } else if (windowWidth >= 768) {
1283        slidesPerView = 2.1;
1284        if (totalSlides === 1) {
1285          slidesPerView = 1;
1286          spaceBetween = 0;
1287        }
1288      } else if (windowWidth >= 525) {
1289        slidesPerView = 1.8;
1290        if (totalSlides === 1) {
1291          slidesPerView = 1;
1292          spaceBetween = 0;
1293        }
1294      } else {
1295        slidesPerView = 1.1;
1296        if (totalSlides === 1) {
1297          slidesPerView = 1;
1298          spaceBetween = 0;
1299        }
1300      }
1301
1302      var navNext = $slider.find(".price-card-slider-next")[0];
1303      var navPrev = $slider.find(".price-card-slider-prev")[0];
1304      var pagination = $slider.find(".price-card-slider-pagination")[0];
1305
1306      new Swiper($slider[0], {
1307        loop: loop,
1308        speed: 700,
1309        spaceBetween: spaceBetween,
1310        slidesPerView: slidesPerView,
1311        centeredSlides: centeredSlides,
1312        observer: true,
1313        observeParents: true,
1314        watchSlidesProgress: true,
1315        watchSlidesVisibility: true,
1316        simulateTouch: simulateTouch,
1317
1318        navigation: {
1319          nextEl: navNext,
1320          prevEl: navPrev,
1321        },
1322        pagination: {
1323          el: pagination,
1324          clickable: true,
1325        },
1326      });
1327
1328      if (totalSlides <= 4) {
1329        $(navNext).hide();
1330        $(navPrev).hide();
1331        $(pagination).hide();
1332      } else {
1333        $(navNext).show();
1334        $(navPrev).show();
1335        $(pagination).show();
1336      }
1337    });
1338
1339    if ($(".category-item-slider").length > 0) {
1340      var experienceSlider = new Swiper(".category-item-slider", {
1341        loop: true,
1342        slideVisibleClass: "is-visible",
1343        speed: 700,
1344        watchSlidesVisibility: true,
1345        observer: true,
1346        spaceBetween: 25,
1347        observeParents: true,
1348        watchSlidesProgress: true,
1349
1350        navigation: {
1351          nextEl: ".category-item-slider-next",
1352          prevEl: ".category-item-slider-prev",
1353        },
1354        pagination: {
1355          el: ".nav-pagination.swiper-pagination.category-item-slider-nav",
1356          clickable: true,
1357        },
1358        breakpoints: {
1359          320: {
1360            slidesPerView: 1,
1361            spaceBetween: 16,
1362          },
1363          350: {
1364            slidesPerView: 1.1,
1365            spaceBetween: 16,
1366          },
1367          400: {
1368            slidesPerView: 1.1,
1369            spaceBetween: 16,
1370          },
1371          440: {
1372            slidesPerView: 1.1,
1373            spaceBetween: 16,
1374          },
1375          525: {
1376            slidesPerView: 1.8,
1377            spaceBetween: 16,
1378          },
1379          650: {
1380            slidesPerView: 1.8,
1381            spaceBetween: 16,
1382          },
1383          768: {
1384            slidesPerView: 2.1,
1385            spaceBetween: 16,
1386          },
1387          992: {
1388            slidesPerView: 3,
1389            spaceBetween: 65,
1390          },
1391          1200: {
1392            slidesPerView: 3,
1393            spaceBetween: 65,
1394          },
1395          1700: {
1396            slidesPerView: 3,
1397            spaceBetween: 65,
1398          },
1399        },
1400      });
1401    }
1402    if ($(".solution-item-slider").length > 0) {
1403      var totalSlides = $(".solution-item-slider .swiper-slide").length;
1404      var isLessThanOrEqualThree = totalSlides <= 3;
1405
1406      var solutionItemSlider = new Swiper(".solution-item-slider", {
1407        loop: !isLessThanOrEqualThree,
1408        speed: 700,
1409        slideVisibleClass: "is-visible",
1410        watchSlidesVisibility: true,
1411        centeredSlides: !isLessThanOrEqualThree,
1412        observer: true,
1413        spaceBetween: 25,
1414        observeParents: true,
1415        watchSlidesProgress: true,
1416
1417        navigation: {
1418          nextEl: ".solution-item-slider-next",
1419          prevEl: ".solution-item-slider-prev",
1420        },
1421        pagination: {
1422          el: ".nav-pagination.swiper-pagination.solution-item-slider-nav",
1423          clickable: true,
1424        },
1425
1426        breakpoints: isLessThanOrEqualThree
1427          ? {
1428            320: {
1429              slidesPerView: 1,
1430              centeredSlides: false,
1431              spaceBetween: 16,
1432            },
1433            350: {
1434              slidesPerView: 1.2,
1435              centeredSlides: false,
1436              spaceBetween: 16,
1437            },
1438            400: {
1439              slidesPerView: 1.3,
1440              centeredSlides: false,
1441              spaceBetween: 16,
1442            },
1443            440: {
1444              slidesPerView: 1.1,
1445              centeredSlides: false,
1446              spaceBetween: 16,
1447            },
1448            525: {
1449              slidesPerView: 1.8,
1450              centeredSlides: false,
1451              spaceBetween: 16,
1452            },
1453            650: {
1454              slidesPerView: 1.8,
1455              centeredSlides: false,
1456              spaceBetween: 16,
1457            },
1458            768: {
1459              slidesPerView: 2.1,
1460              centeredSlides: false,
1461              spaceBetween: 16,
1462            },
1463            992: {
1464              slidesPerView: 3,
1465              centeredSlides: true,
1466              spaceBetween: 20,
1467            },
1468            1200: {
1469              slidesPerView: 3,
1470              centeredSlides: false,
1471              spaceBetween: 20,
1472            },
1473            1700: {
1474              slidesPerView: 3,
1475              centeredSlides: false,
1476              spaceBetween: 20,
1477            },
1478            1921: {
1479              slidesPerView: 3,
1480              centeredSlides: false,
1481              spaceBetween: 20,
1482            },
1483          }
1484          : {
1485            320: {
1486              centeredSlides: false,
1487              slidesPerView: 1,
1488              spaceBetween: 16,
1489            },
1490            350: {
1491              centeredSlides: false,
1492              slidesPerView: 1.2,
1493              spaceBetween: 16,
1494            },
1495            400: {
1496              centeredSlides: false,
1497              slidesPerView: 1.3,
1498              spaceBetween: 16,
1499            },
1500            440: {
1501              centeredSlides: false,
1502              slidesPerView: 1.1,
1503              spaceBetween: 16,
1504            },
1505            525: {
1506              centeredSlides: false,
1507              slidesPerView: 1.8,
1508              spaceBetween: 16,
1509            },
1510            650: {
1511              centeredSlides: false,
1512              slidesPerView: 1.8,
1513              spaceBetween: 16,
1514            },
1515            768: {
1516              centeredSlides: false,
1517              slidesPerView: 2.1,
1518              spaceBetween: 16,
1519            },
1520            992: {
1521              centeredSlides: true,
1522              slidesPerView: 3.35,
1523              spaceBetween: 20,
1524            },
1525            1200: {
1526              centeredSlides: true,
1527              slidesPerView: 3.35,
1528              spaceBetween: 20,
1529            },
1530            1700: {
1531              centeredSlides: true,
1532              slidesPerView: 3.35,
1533              spaceBetween: 20,
1534            },
1535            1921: {
1536              centeredSlides: false,
1537              slidesPerView: 3,
1538              spaceBetween: 20,
1539            },
1540          },
1541      });
1542    }
1543
1544    if ($(".guides-item-slider").length > 0) {
1545      var guidesItemSlider = new Swiper(".guides-item-slider", {
1546        loop: true,
1547        speed: 700,
1548        centeredSlides: true,
1549        grabCursor: true,
1550        observer: true,
1551        spaceBetween: 25,
1552        observeParents: true,
1553        slideToClickedSlide: false,
1554
1555        navigation: {
1556          nextEl: ".guides-item-slider-next",
1557          prevEl: ".guides-item-slider-prev",
1558        },
1559        pagination: {
1560          el: ".nav-pagination.swiper-pagination.guides-item-slider-pagination",
1561          clickable: true,
1562        },
1563        breakpoints: {
1564          320: {
1565            centeredSlides: true,
1566            slidesPerView: 1,
1567            spaceBetween: 8,
1568          },
1569          350: {
1570            centeredSlides: true,
1571            slidesPerView: 1.02,
1572            spaceBetween: 8,
1573          },
1574          400: {
1575            centeredSlides: true,
1576            slidesPerView: 1.02,
1577            spaceBetween: 8,
1578          },
1579          440: {
1580            centeredSlides: true,
1581            slidesPerView: 1.02,
1582            spaceBetween: 8,
1583          },
1584          525: {
1585            centeredSlides: true,
1586            slidesPerView: 1.8,
1587            spaceBetween: 8,
1588          },
1589          650: {
1590            centeredSlides: true,
1591            slidesPerView: 1.8,
1592            spaceBetween: 16,
1593          },
1594          768: {
1595            centeredSlides: true,
1596            slidesPerView: 2.1,
1597            spaceBetween: 16,
1598          },
1599          992: {
1600            centeredSlides: true,
1601            slidesPerView: 3.35,
1602            spaceBetween: 20,
1603          },
1604          1200: {
1605            centeredSlides: true,
1606            slidesPerView: 1.38,
1607            spaceBetween: 18,
1608          },
1609          1700: {
1610            centeredSlides: true,
1611            slidesPerView: 1.38,
1612            spaceBetween: 18,
1613          },
1614          1921: {
1615            centeredSlides: false,
1616            slidesPerView: 1.38,
1617            spaceBetween: 18,
1618          },
1619        },
1620      });
1621
1622      guidesItemSlider.on("click", function (swiper) {
1623        if (!swiper.clickedSlide) return;
1624
1625        const clickedSlide = swiper.clickedSlide;
1626
1627        if (clickedSlide.classList.contains("swiper-slide-prev")) {
1628          swiper.slidePrev();
1629        } else if (clickedSlide.classList.contains("swiper-slide-next")) {
1630          swiper.slideNext();
1631        }
1632      });
1633    }
1634    if ($(".blog-card-slider").length > 0) {
1635      var blogCardSlider = new Swiper(".blog-card-slider", {
1636        effect: "coverflow",
1637        loop: true,
1638        speed: 700,
1639        grabCursor: true,
1640        centeredSlides: true,
1641        coverflowEffect: {
1642          rotate: 0,
1643          stretch: -350,
1644          depth: 650,
1645          modifier: 1,
1646          slideShadows: false,
1647        },
1648
1649        navigation: {
1650          nextEl: ".blog-card-slider-next",
1651          prevEl: ".blog-card-slider-prev",
1652        },
1653        pagination: {
1654          el: ".nav-pagination.swiper-pagination.blog-card-slider-nav",
1655          clickable: true,
1656        },
1657        breakpoints: {
1658          320: {
1659            slidesPerView: 1,
1660            coverflowEffect: {
1661              rotate: 0,
1662              stretch: -100,
1663              depth: 650,
1664              modifier: 1,
1665              slideShadows: false,
1666            },
1667          },
1668          350: {
1669            slidesPerView: 1.1,
1670            coverflowEffect: {
1671              rotate: 0,
1672              stretch: -100,
1673              depth: 650,
1674              modifier: 1,
1675              slideShadows: false,
1676            },
1677          },
1678          400: {
1679            slidesPerView: 1.2,
1680            coverflowEffect: {
1681              rotate: 0,
1682              stretch: -100,
1683              depth: 650,
1684              modifier: 1,
1685              slideShadows: false,
1686            },
1687          },
1688          440: {
1689            slidesPerView: 1.1,
1690            coverflowEffect: {
1691              rotate: 0,
1692              stretch: -150,
1693              depth: 650,
1694              modifier: 1,
1695              slideShadows: false,
1696            },
1697          },
1698          525: {
1699            slidesPerView: 1.1,
1700            coverflowEffect: {
1701              rotate: 0,
1702              stretch: -150,
1703              depth: 650,
1704              modifier: 1,
1705              slideShadows: false,
1706            },
1707          },
1708          650: {
1709            slidesPerView: 1,
1710            coverflowEffect: {
1711              rotate: 0,
1712              stretch: -200,
1713              depth: 650,
1714              modifier: 1,
1715              slideShadows: false,
1716            },
1717          },
1718          768: {
1719            slidesPerView: 1,
1720            coverflowEffect: {
1721              rotate: 0,
1722              stretch: -250,
1723              depth: 650,
1724              modifier: 1,
1725              slideShadows: false,
1726            },
1727          },
1728          992: {
1729            slidesPerView: 1,
1730            coverflowEffect: {
1731              rotate: 0,
1732              stretch: -350,
1733              depth: 650,
1734              modifier: 1,
1735              slideShadows: false,
1736            },
1737          },
1738          1200: {
1739            slidesPerView: 1,
1740          },
1741          1700: {
1742            slidesPerView: 1,
1743          },
1744        },
1745      });
1746    }
1747    if ($(".customer-card-slider").length > 0) {
1748      const isMobile = window.innerWidth < 992;
1749      var customerCardSlider = new Swiper(".customer-card-slider", {
1750        effect: "coverflow",
1751        loop: true,
1752        speed: 700,
1753        grabCursor: isMobile ? false : true,
1754        centeredSlides: true,
1755        coverflowEffect: {
1756          rotate: 0,
1757          stretch: -350,
1758          depth: 650,
1759          modifier: 1,
1760          slideShadows: false,
1761        },
1762
1763        navigation: {
1764          nextEl: ".customer-card-slider-next",
1765          prevEl: ".customer-card-slider-prev",
1766        },
1767        pagination: {
1768          el: ".nav-pagination.swiper-pagination.customer-card-slider-pagination",
1769          clickable: true,
1770        },
1771        breakpoints: {
1772          320: {
1773            slidesPerView: 1,
1774            coverflowEffect: {
1775              rotate: 0,
1776              stretch: -100,
1777              depth: 650,
1778              modifier: 1,
1779              slideShadows: false,
1780            },
1781          },
1782          350: {
1783            slidesPerView: 1.1,
1784            coverflowEffect: {
1785              rotate: 0,
1786              stretch: -100,
1787              depth: 650,
1788              modifier: 1,
1789              slideShadows: false,
1790            },
1791          },
1792          400: {
1793            slidesPerView: 1.2,
1794            coverflowEffect: {
1795              rotate: 0,
1796              stretch: -100,
1797              depth: 650,
1798              modifier: 1,
1799              slideShadows: false,
1800            },
1801          },
1802          440: {
1803            slidesPerView: 1.1,
1804            coverflowEffect: {
1805              rotate: 0,
1806              stretch: -150,
1807              depth: 650,
1808              modifier: 1,
1809              slideShadows: false,
1810            },
1811          },
1812          525: {
1813            slidesPerView: 1.1,
1814            coverflowEffect: {
1815              rotate: 0,
1816              stretch: -150,
1817              depth: 650,
1818              modifier: 1,
1819              slideShadows: false,
1820            },
1821          },
1822          650: {
1823            slidesPerView: 1,
1824            coverflowEffect: {
1825              rotate: 0,
1826              stretch: -200,
1827              depth: 650,
1828              modifier: 1,
1829              slideShadows: false,
1830            },
1831          },
1832          768: {
1833            slidesPerView: 1,
1834            coverflowEffect: {
1835              rotate: 0,
1836              stretch: -250,
1837              depth: 650,
1838              modifier: 1,
1839              slideShadows: false,
1840            },
1841          },
1842          992: {
1843            slidesPerView: 1,
1844            coverflowEffect: {
1845              rotate: 0,
1846              stretch: -350,
1847              depth: 650,
1848              modifier: 1,
1849              slideShadows: false,
1850            },
1851          },
1852          1200: {
1853            slidesPerView: 1,
1854          },
1855          1700: {
1856            slidesPerView: 1,
1857          },
1858          1920: {
1859            slidesPerView: 1,
1860            centeredSlides: true,
1861            coverflowEffect: {
1862              rotate: 0,
1863              stretch: -450,
1864              depth: 750,
1865              modifier: 3,
1866              slideShadows: false,
1867            },
1868          },
1869        },
1870      });
1871    }
1872
1873    if ($(".challenge-card-slider").length > 0) {
1874      var challengeCardSlider = new Swiper(".challenge-card-slider", {
1875        loop: true,
1876        effect: "fade",
1877        fadeEffect: {
1878          crossFade: true,
1879        },
1880        speed: 700,
1881        navigation: {
1882          nextEl: ".challenge-card-slider-next",
1883          prevEl: ".challenge-card-slider-prev",
1884        },
1885        pagination: {
1886          el: ".nav-pagination.swiper-pagination.challenge-card-slider-pagination",
1887          clickable: true,
1888        },
1889
1890        spaceBetween: 0,
1891
1892        breakpoints: {
1893          320: {
1894            slidesPerView: 1,
1895          },
1896          768: {
1897            slidesPerView: 1,
1898          },
1899          992: {
1900            slidesPerView: 1,
1901          },
1902          1200: {
1903            slidesPerView: 1,
1904          },
1905          1700: {
1906            slidesPerView: 1,
1907          },
1908        },
1909      });
1910    }
1911    if ($(".webinar-item-slider").length > 0) {
1912      var isLargeScreen = window.innerWidth >= 992;
1913      var webinarItemSlider = new Swiper(".webinar-item-slider", {
1914        loop: false,
1915        effect: "fade",
1916        fadeEffect: {
1917          crossFade: true,
1918        },
1919        slideVisibleClass: "is-visible",
1920        speed: 700,
1921        watchSlidesVisibility: true,
1922        observer: true,
1923        spaceBetween: 25,
1924        observeParents: true,
1925        watchSlidesProgress: true,
1926
1927        simulateTouch: !isLargeScreen ? true : false,
1928
1929        navigation: {
1930          nextEl: ".webinar-item-slider-next",
1931          prevEl: ".webinar-item-slider-prev",
1932        },
1933        pagination: {
1934          el: ".nav-pagination.swiper-pagination.webinar-item-slider-pagination",
1935          clickable: true,
1936        },
1937        breakpoints: {
1938          320: { slidesPerView: 1, spaceBetween: 16 },
1939          350: { slidesPerView: 1, spaceBetween: 16 },
1940          400: { slidesPerView: 1, spaceBetween: 16 },
1941          440: { slidesPerView: 1, spaceBetween: 16 },
1942          525: { slidesPerView: 1, spaceBetween: 16 },
1943          650: { slidesPerView: 1, spaceBetween: 16 },
1944          768: { slidesPerView: 1, spaceBetween: 16 },
1945          992: { slidesPerView: 1, spaceBetween: 0 },
1946          1200: { slidesPerView: 1, spaceBetween: 0 },
1947          1700: { slidesPerView: 1, spaceBetween: 0 },
1948        },
1949      });
1950
1951      $(".webinar-item").removeClass("active").first().addClass("active");
1952
1953      $(".webinar-item").each(function (index) {
1954        $(this).on("click", function () {
1955          const realIndex = index;
1956          webinarItemSlider.slideToLoop(realIndex);
1957
1958          $(".webinar-item").removeClass("active");
1959          $(this).addClass("active");
1960        });
1961      });
1962
1963      webinarItemSlider.on("slideChange", function () {
1964        var realIndex = webinarItemSlider.realIndex;
1965        $(".webinar-item").removeClass("active");
1966        $(".webinar-item").eq(realIndex).addClass("active");
1967      });
1968    }
1969
1970    $(function () {
1971      window.setTimeout(function () {
1972        window.dispatchEvent(new Event("resize"));
1973      }, 300);
1974    });
1975    $(window).focus(function () {
1976      {
1977        window.dispatchEvent(new Event("resize"));
1978      }
1979    });
1980  },
1981  mobileMenuOpenFn() {
1982    $("body").on("click", ".js-open-menu", function () {
1983      if ($(".header").hasClass("active")) {
1984        $(".header").removeClass("active");
1985        $(".js-open-menu").removeClass("active");
1986        $("html, body").removeClass("scroll-disabled");
1987        $(".w-brief-banner .header-wrapper").removeClass("fixed");
1988      } else {
1989        $(".header").addClass("active");
1990        $(".js-open-menu").addClass("active");
1991        $("html, body").addClass("scroll-disabled");
1992        $(".w-brief-banner .header-wrapper").addClass("fixed");
1993      }
1994    });
1995  },
1996  mobileMenuItemOpen() {
1997    if (window.innerWidth <= 991) {
1998      $("body").on(
1999        "click",
2000        ".header-menu-item.has-submenu .header-menu-item__title",
2001        function () {
2002          if ($(this).hasClass("active")) {
2003            $(this).removeClass("active");
2004            $(".header-right").removeClass("active");
2005            $("html, body").removeClass("scroll-disabled");
2006          } else {
2007            $(this).addClass("active");
2008            $(".header-right").addClass("active");
2009            $("html, body").addClass("scroll-disabled");
2010          }
2011        }
2012      );
2013
2014      $("body").on("click", ".js-close-submenu", function () {
2015        $(".header-menu-item__title").removeClass("active");
2016        $(".header-right").removeClass("active");
2017        $(".submenu-overlay").removeClass("active");
2018      });
2019
2020      $("body").on(
2021        "click",
2022        ".header-menu-item.has-submenu.simple .header-menu-item__title",
2023        function () {
2024          $(".header-right").removeClass("active");
2025          $(".submenu-overlay").addClass("active");
2026        }
2027      );
2028    }
2029  },
2030
2031  langsMenuOpen() {
2032    if (window.innerWidth < 992) {
2033      $(".langs").click(function () {
2034        $(".langs-menu").toggleClass("active");
2035      });
2036    }
2037  },
2038  mobileSubmenuOpen() {
2039    $(".mobile-menu-item.has-submenu").click(function () {
2040      if ($(this).hasClass("active")) {
2041        $(this).removeClass("active");
2042      } else {
2043        $(".mobile-menu-item").removeClass("active");
2044        $(this).addClass("active");
2045      }
2046    });
2047    if ($(window).width() < 992) {
2048      $(".footer-menu-item").click(function () {
2049        if ($(this).hasClass("active")) {
2050          $(this).removeClass("active");
2051        } else {
2052          $(".footer-menu-item").removeClass("active");
2053          $(this).addClass("active");
2054        }
2055      });
2056    }
2057  },
2058  bodyClickControlFn() {
2059    $("body").on("click", function (e) {
2060      if (
2061        e.target.closest(".langs-menu") === null &&
2062        e.target.closest(".langs-menu-content") === null
2063      ) {
2064        $(".langs-menu").removeClass("active");
2065      }
2066      if (
2067        e.target.closest(".dropdown_bar-item") === null &&
2068        e.target.closest(".dropdown_bar-item-box") === null
2069      ) {
2070        $(".dropdown_bar-item").removeClass("active");
2071      }
2072      if (
2073        e.target.closest(".header-user-icon") === null &&
2074        e.target.closest(".header-user-menu") === null
2075      ) {
2076        if (window.innerWidth > 991) {
2077          $(".header-user-icon").removeClass("active");
2078        }
2079      }
2080      if (
2081        e.target.closest(".notification-btn") === null &&
2082        e.target.closest(".notification-content") === null
2083      ) {
2084        $(".notification-btn").removeClass("active");
2085      }
2086      if (
2087        e.target.closest(".hero-search-top") === null &&
2088        e.target.closest(".hero-search-content") === null
2089      ) {
2090        $(".hero-search-top").removeClass("active");
2091      }
2092    });
2093  },
2094  dropdown() {
2095    $(".dropdown_bar-item").on("click", function (e) {
2096      e.stopPropagation();
2097      const isActive = $(this).hasClass("active");
2098
2099      $(".dropdown_bar-item").not(this).removeClass("active");
2100
2101      if (isActive) {
2102        $(this).removeClass("active");
2103        return;
2104      }
2105
2106      $(this).addClass("active");
2107    });
2108
2109    $(".dropdown_bar-item-box__item").on("click", function (e) {
2110      e.stopPropagation();
2111      const parentWrapper = $(this).closest(".dropdown_bar-item-box-wrapper");
2112      const parent = parentWrapper.parent();
2113      const isMultiple = parent.hasClass("multiple-choice");
2114
2115      if (isMultiple) {
2116        $(this).toggleClass("active");
2117
2118        const selectedCount = parentWrapper.find(
2119          ".dropdown_bar-item-box__item.active"
2120        ).length;
2121
2122        if (selectedCount > 0) {
2123          parent.find(".dropdown_bar-item-choiced").addClass("show");
2124          parent.find(".dropdown_bar-item-choiced-count").text(selectedCount);
2125        } else {
2126          parent.find(".dropdown_bar-item-choiced").removeClass("show");
2127        }
2128      } else {
2129        parentWrapper
2130          .find(".dropdown_bar-item-box__item")
2131          .removeClass("active");
2132        $(this).addClass("active");
2133
2134        const selectedText = $(this).text();
2135        parent.find(".dropdown_bar-item__title").text(selectedText);
2136
2137        parent.addClass("selected").removeClass("active");
2138      }
2139    });
2140
2141    $(document).on("click", function () {
2142      $(".dropdown_bar-item").removeClass("active");
2143    });
2144
2145    $(".dropdown_bar-item .search-input").on("click", function (e) {
2146      e.stopPropagation();
2147    });
2148
2149    $(".dropdown_bar-item .search-input input").on("input", function () {
2150      const searchTerm = $(this).val().toLowerCase();
2151
2152      $(".dropdown_bar-item-box__item").each(function () {
2153        const itemText = $(this).text().toLowerCase();
2154
2155        if (itemText.indexOf(searchTerm) === -1) {
2156          $(this).addClass("hidden");
2157        } else {
2158          $(this).removeClass("hidden");
2159        }
2160      });
2161    });
2162    $(".dropdown_bar-item-box__item.selected.active").each(function () {
2163      const selectedText = $(this).text();
2164      const parent = $(this).closest(".dropdown_bar-item-box-wrapper").parent();
2165      parent.find(".dropdown_bar-item__title").text(selectedText);
2166    });
2167  },
2168  tabFn() {
2169    $(".tab").each(function () {
2170      const $tabContainer = $(this);
2171
2172      const $tabItems = $tabContainer.find(".js-tab-item");
2173
2174      $tabItems.on("click", function (e) {
2175        e.preventDefault();
2176
2177        const $clickedTab = $(this);
2178        const dataFilter = $clickedTab.data("filter");
2179        const dataTab = $clickedTab.data("tab");
2180
2181        const $allTabItems = $clickedTab
2182          .closest(".animated-tabs")
2183          .find(".js-tab-item");
2184        const $filteredItems = $clickedTab
2185          .closest(".tab")
2186          .find(".filtered-item");
2187
2188        $allTabItems.removeClass("active");
2189
2190        if (dataFilter) {
2191          $allTabItems.removeClass("active");
2192          $clickedTab.addClass("active");
2193          $clickedTab
2194            .parent(".animated-tabs")
2195            .closest(".tab")
2196            .find(".filtered-item.active")
2197            .find(".js-tab-item.active")
2198            .trigger("click");
2199
2200          if ($clickedTab.hasClass("js-filter-all")) {
2201            $filteredItems.removeClass("hide").addClass("active");
2202          } else {
2203            const $targetFiltered = $filteredItems.filter("." + dataFilter);
2204            const $aiSection = $clickedTab.closest(".ai-features-section");
2205            const $currentActive = $filteredItems.filter(".active");
2206
2207            $filteredItems.removeClass("active tab-visible").addClass("hide");
2208            $targetFiltered.removeClass("hide").addClass("active");
2209
2210            if ($aiSection.length) {
2211              setTimeout(function () {
2212                $targetFiltered.addClass("tab-visible");
2213              }, 20);
2214            }
2215
2216            setTimeout(() => {
2217              const $activeSubTab = $targetFiltered.find(
2218                ".tab-link-wrapper .js-tab-item.active"
2219              );
2220              if ($activeSubTab.length === 0) {
2221                const $firstSubTab = $targetFiltered
2222                  .find(".tab-link-wrapper .js-tab-item")
2223                  .first();
2224                if ($firstSubTab.length) {
2225                  $firstSubTab.addClass("active");
2226                  const subFilter = $firstSubTab.data("filter");
2227                  const $subFiltered = $targetFiltered.find(".filtered-item");
2228
2229                  $subFiltered.removeClass("active").addClass("hide");
2230                  $subFiltered
2231                    .filter("." + subFilter)
2232                    .removeClass("hide")
2233                    .addClass("active");
2234                }
2235              } else {
2236                const subFilter = $activeSubTab.data("filter");
2237                const $subFiltered = $targetFiltered.find(".filtered-item");
2238
2239                $subFiltered.removeClass("active").addClass("hide");
2240                $subFiltered
2241                  .filter("." + subFilter)
2242                  .removeClass("hide")
2243                  .addClass("active");
2244              }
2245            }, 0);
2246          }
2247        } else if (dataTab) {
2248          $clickedTab.addClass("active");
2249          const $tabContent = $tabContainer.find(".tab-content");
2250
2251          $tabContent.removeClass("filtering").addClass("filtered");
2252          $tabContent.filter("." + dataTab).removeClass("filtered");
2253
2254          const hasAccordion = $tabContainer
2255            .find(".tab-content." + dataTab)
2256            .find(".accordion-wrapper");
2257          if (hasAccordion.length) {
2258            const firstItem = hasAccordion.find(".accordion-item").first();
2259            if (!firstItem.hasClass("active")) {
2260              firstItem.find(".js-accordion-trigger").trigger("click");
2261            }
2262          }
2263        }
2264
2265        setTimeout(() => {
2266          const $tabsWrapper = $clickedTab.closest(".animated-tabs");
2267          app.updateTabLine($tabsWrapper, $clickedTab);
2268        }, 100);
2269      });
2270
2271      const $initialTab = $tabContainer.find(".js-tab-item.active").first();
2272      if ($initialTab.length > 0) {
2273        $initialTab.trigger("click");
2274      } else {
2275        const $firstTab = $tabContainer
2276          .find(".js-tab-item")
2277          .first()
2278          .addClass("active");
2279        $firstTab.trigger("click");
2280      }
2281    });
2282
2283    $(".animated-tabs .js-tab-item.active").each(function () {
2284      const $tabsWrapper = $(this).closest(".animated-tabs");
2285      app.updateTabLine($tabsWrapper, $(this));
2286    });
2287
2288    setTimeout(function () {
2289      $(".ai-features-section .filtered-item.active").addClass("tab-visible");
2290    }, 50);
2291
2292    $(".js-category-filter .dropdown_bar-item-box__item").on(
2293      "click",
2294      function (e) {
2295        e.preventDefault();
2296
2297        const $clickedItem = $(this);
2298        const dataFilter = $clickedItem.data("filter");
2299
2300        if (dataFilter) {
2301          const $tabContainer = $(".tab");
2302          const $filteredItems = $tabContainer.find(".filtered-item");
2303
2304          $filteredItems.removeClass("active").addClass("hide");
2305          $filteredItems
2306            .filter("." + dataFilter)
2307            .removeClass("hide")
2308            .addClass("active");
2309
2310          const $targetFiltered = $filteredItems.filter("." + dataFilter);
2311          const $firstSubTab = $targetFiltered
2312            .find(".tab-link-wrapper .js-tab-item")
2313            .first();
2314
2315          if ($firstSubTab.length) {
2316            $targetFiltered
2317              .find(".tab-link-wrapper .js-tab-item")
2318              .removeClass("active");
2319            $firstSubTab.addClass("active");
2320
2321            const subFilter = $firstSubTab.data("filter");
2322            const $subFiltered = $targetFiltered.find(".filtered-item");
2323
2324            $subFiltered.removeClass("active").addClass("hide");
2325            $subFiltered
2326              .filter("." + subFilter)
2327              .removeClass("hide")
2328              .addClass("active");
2329          }
2330        }
2331      }
2332    );
2333
2334    const resetSubTabsInActiveFilteredItems = () => {
2335      $(".tab .filtered-item.active").each(function () {
2336        const $filteredItem = $(this);
2337        const $subTabsWrapper = $filteredItem.find(".tab-link-wrapper");
2338        const $subTabs = $subTabsWrapper.find(".js-tab-item");
2339
2340        if ($subTabs.length > 0) {
2341          const $firstSubTab = $subTabs.first();
2342          const $activeSubTab = $subTabs.filter(".active");
2343
2344          if (!$firstSubTab.is($activeSubTab)) {
2345            $subTabs.removeClass("active");
2346            $firstSubTab.addClass("active");
2347
2348            const subFilter = $firstSubTab.data("filter");
2349            const $subFiltered = $filteredItem.find(".filtered-item");
2350
2351            $subFiltered.removeClass("active").addClass("hide");
2352            $subFiltered
2353              .filter("." + subFilter)
2354              .removeClass("hide")
2355              .addClass("active");
2356
2357            const $tabsWrapper = $firstSubTab.closest(".animated-tabs");
2358            if ($tabsWrapper.length > 0) {
2359              app.updateTabLine($tabsWrapper, $firstSubTab);
2360            }
2361          }
2362        }
2363      });
2364    };
2365
2366    $(document).on(
2367      "click",
2368      ".js-outline-tab .js-tab-item[data-filter]",
2369      function () {
2370        setTimeout(() => {
2371          resetSubTabsInActiveFilteredItems();
2372        }, 100);
2373      }
2374    );
2375  },
2376
2377  animatedTabs() {
2378    $(".animated-tabs").each(function () {
2379      const $tabsWrapper = $(this);
2380      app.updateTabLine($tabsWrapper);
2381
2382      $tabsWrapper.find(".animated-tabs-item").on("click", function (e) {
2383        e.preventDefault();
2384      });
2385    });
2386  },
2387
2388  updateTabLine($tabsWrapper, $activeTab = null) {
2389    if (!$tabsWrapper || !$tabsWrapper.length) return;
2390
2391    const $activeItem =
2392      $activeTab || $tabsWrapper.find(".animated-tabs-item.active, .tab-item-landing.active").first();
2393    const $line = $tabsWrapper.find(".animated-tabs-line");
2394
2395    if (!$activeItem.length || !$line.length) return;
2396
2397    const isFixed = $tabsWrapper.closest(".tab-link-wrapper").hasClass("fixed");
2398    const activeWidth = $activeItem.outerWidth();
2399    const activePos = $activeItem.position();
2400    const scrollLeft = $tabsWrapper.scrollLeft();
2401
2402    if (isFixed) {
2403      const containerOffset = $tabsWrapper.offset().left;
2404      const itemOffset = $activeItem.offset().left;
2405      const relativeLeft = itemOffset - containerOffset + scrollLeft;
2406
2407      $line.css({
2408        left: relativeLeft,
2409        width: activeWidth,
2410      });
2411    } else {
2412      $line.css({
2413        left: activePos.left + scrollLeft,
2414        width: activeWidth,
2415      });
2416    }
2417
2418    $line.removeClass("blue orange light-purple purple red green");
2419    const colorClass = $activeItem
2420      .attr("class")
2421      .split(" ")
2422      .find((cls) =>
2423        ["blue", "orange", "light-purple", "purple", "red", "green"].includes(
2424          cls
2425        )
2426      );
2427    if (colorClass) {
2428      $line.addClass(colorClass);
2429    }
2430  },
2431
2432  fixedTab: function () {
2433    var tab = $(".tab .tab-link-wrapper");
2434    if (tab.length > 0) {
2435      var scrollPos = $(window).scrollTop();
2436      var wrapper = $(".wrapper");
2437      if (wrapper.length > 0) {
2438        var firstSection = wrapper.find(".section").first();
2439        var lastSection = wrapper.find(".section").last();
2440
2441        if (firstSection.length > 0 && lastSection.length > 0) {
2442          var firstSectionPos = firstSection.offset().top;
2443          var lastSectionPos = lastSection.offset().top + 300;
2444          var positionTopValue = parseInt(
2445            window
2446              .getComputedStyle(document.documentElement)
2447              .getPropertyValue("--tab-position")
2448              .trim()
2449          );
2450          var activeTabItem = $(".js-scroll-item.active");
2451
2452          if (activeTabItem.length > 0) {
2453            var parent = activeTabItem.parent(".animated-tabs");
2454            var activeWidth = activeTabItem.outerWidth();
2455            var activePos = activeTabItem.position();
2456
2457            $(".js-scroll-item").each(function () {
2458              var targetSection = $("#" + $(this).data("target"));
2459              if (targetSection.length > 0) {
2460                var sectionPos = targetSection.offset().top - 100;
2461                if (scrollPos > sectionPos - 100) {
2462                  $(".js-scroll-item").removeClass("active");
2463                  $(this).addClass("active");
2464                }
2465              }
2466            });
2467
2468            if (parent.length > 0) {
2469              app.updateTabLine(parent);
2470
2471              if ($(window).width() < 992) {
2472                parent.stop(true).animate(
2473                  {
2474                    scrollLeft: activePos.left + parent.scrollLeft() - 50,
2475                  },
2476                  200,
2477                  function () {
2478                    app.updateTabLine(parent);
2479                  }
2480                );
2481              }
2482            }
2483
2484            if (!isNaN(positionTopValue) && scrollPos > positionTopValue) {
2485              tab.addClass("fixed").removeClass("hidden");
2486              if (scrollPos > lastSection.offset().top + 300) {
2487                tab.addClass("hidden");
2488              }
2489            } else {
2490              tab.removeClass("fixed hidden");
2491            }
2492          }
2493        }
2494      }
2495    } else {
2496    }
2497
2498    $(".js-scroll-item").on("click", function (e) {
2499      e.preventDefault();
2500
2501      var target = $(this).data("target");
2502      var targetSection = $("#" + target);
2503
2504      if (targetSection.length > 0) {
2505        var newUrl = window.location.pathname + "#" + target;
2506        history.replaceState(null, null, newUrl);
2507      }
2508    });
2509  },
2510  scrollItem() {
2511    $("body").on("click", ".js-scroll-item", function (e) {
2512      e.preventDefault();
2513      let id = "";
2514      let scrollPos = "";
2515
2516      if ($(this).hasClass("animated-tabs-item")) {
2517        $(".js-scroll-item").removeClass("active");
2518        $(this).addClass("active");
2519      }
2520      if ($(this).data("target")) {
2521        id = $(this).data("target");
2522        if (window.innerWidth < 992) {
2523          scrollPos = $("#" + id).offset().top - 100;
2524        } else scrollPos = $("#" + id).offset().top - 20;
2525      } else {
2526        id = $(this).attr("href");
2527        scrollPos = $(id).offset().top;
2528      }
2529      $("html, body").animate(
2530        {
2531          scrollTop: scrollPos,
2532        },
2533        200
2534      );
2535    });
2536    $("body").on("click", ".js-scroll-link-item", function (e) {
2537      e.preventDefault();
2538      let id = $(this).attr("href");
2539      let scrollPos = $(id).offset().top;
2540      $("html, body").animate(
2541        {
2542          scrollTop: scrollPos,
2543        },
2544        200
2545      );
2546    });
2547  },
2548
2549  productStrategySectionImgChange() {
2550    $("body").on("click", ".js-filter-item", function () {
2551      const index = $(this).data("index");
2552
2553      $(".product-strategy-img").removeClass("active");
2554
2555      $('.product-strategy-img[data-index="' + index + '"]').addClass("active");
2556    });
2557  },
2558
2559  accordionFn() {
2560    $("body").on("click", ".js-accordion-trigger", function () {
2561      const trigger = $(this);
2562      const accordionGroup = trigger.closest(".accordion-wrapper");
2563      const item = trigger.closest(".accordion-item");
2564      const content = item.find(".accordion-calc");
2565      const contentWrapper = item.find(".accordion-content");
2566
2567      let multipleShow = accordionGroup.data("multiple-show") === true;
2568
2569      if (item.hasClass("active")) {
2570        trigger.removeClass("active");
2571        item.removeClass("active");
2572        contentWrapper.css("height", 0);
2573      } else {
2574        if (!multipleShow) {
2575          accordionGroup
2576            .find(".accordion-item.active")
2577            .removeClass("active")
2578            .find(".accordion-content")
2579            .css("height", 0);
2580          accordionGroup
2581            .find(".js-accordion-trigger.active")
2582            .removeClass("active");
2583        }
2584
2585        trigger.addClass("active");
2586        item.addClass("active");
2587        contentWrapper.css("height", content.outerHeight(true));
2588      }
2589    });
2590
2591    $(".accordion-item.opened .js-accordion-trigger").trigger("click");
2592  },
2593  recalcAccordionHeights() {
2594    var itemContent;
2595    $.each($(".accordion-item.active"), function (i, val) {
2596      itemContent = $(this).find(".accordion-calc");
2597      itemContent
2598        .parent(".accordion-content")
2599        .css("height", itemContent.outerHeight(true));
2600    });
2601  },
2602  validateForm() {
2603    $(".validateForm").each(function () {
2604      $(this).validate({
2605        rules: {
2606          mail: "required email",
2607          namesurname: {
2608            required: true,
2609          },
2610          name: {
2611            required: true,
2612          },
2613
2614          surname: {
2615            required: true,
2616          },
2617          phone: {
2618            required: true,
2619          },
2620          phoneCode: {
2621            required: true,
2622          },
2623          library: {
2624            required: true,
2625          },
2626          checkbox: {
2627            required: true,
2628          },
2629          ccardskt: {
2630            required: true,
2631          },
2632          detailCheckbox: {
2633            required: true,
2634          },
2635          ckullaniciadi: {
2636            required: true,
2637          },
2638          accessCode: {
2639            required: true,
2640          },
2641          oldpassword: {
2642            required: true,
2643            minlength: 8,
2644            maxlength: 14,
2645          },
2646          password: {
2647            required: true,
2648            minlength: 8,
2649            maxlength: 14,
2650          },
2651          retry_password: {
2652            required: true,
2653            minlength: 8,
2654            maxlength: 14,
2655            equalTo: "#password",
2656          },
2657          cpasswordnew: {
2658            required: true,
2659            minlength: 8,
2660            maxlength: 14,
2661          },
2662
2663          cnewpasswordagain: {
2664            required: true,
2665            minlength: 8,
2666            maxlength: 14,
2667            equalTo: "#cnewpassword",
2668          },
2669          verification: {
2670            required: true,
2671            maxlength: 1,
2672          },
2673          sozlesme: {
2674            required: true,
2675          },
2676          subject: {
2677            required: true,
2678          },
2679          message: {
2680            required: true,
2681          },
2682          rating: {
2683            required: true,
2684          },
2685          comment: {
2686            required: true,
2687          },
2688        },
2689        messages: {
2690          mail: {
2691            required: "This field is required!",
2692            email: "Please enter a valid e-mail address!",
2693          },
2694          namesurname: {
2695            required: "This field is required!",
2696          },
2697          name: {
2698            required: "This field is required!",
2699          },
2700          surname: {
2701            required: "This field is required!",
2702          },
2703          phone: {
2704            required: "This field is required!",
2705          },
2706          phoneCode: {
2707            required: "This field is required!",
2708          },
2709          checkbox: {
2710            required: "This field is required!",
2711          },
2712          detailCheckbox: {
2713            required: "This field is required!",
2714          },
2715          library: {
2716            required: "This field is required!",
2717          },
2718          accessCode: {
2719            required: "This field is required!",
2720          },
2721
2722          subject: {
2723            required: "This field is required!",
2724          },
2725          message: {
2726            required: "This field is required!",
2727          },
2728          kitapadi: {
2729            required: "This field is required!",
2730          },
2731          rating: {
2732            required: "This field is required!",
2733          },
2734          comment: {
2735            required: "This field is required!",
2736          },
2737          user: {
2738            required: "Select A User!",
2739          },
2740
2741          oldpassword: {
2742            required: "This field is required!",
2743            minlength: jQuery.validator.format(
2744              "You must enter at least {0} characters!"
2745            ),
2746            maxlength: jQuery.validator.format(
2747              "Maximum allowed length is {0} characters!"
2748            ),
2749          },
2750          password: {
2751            required: "This field is required!",
2752            minlength: jQuery.validator.format(
2753              "You must enter at least {0} characters!"
2754            ),
2755            maxlength: jQuery.validator.format(
2756              "Maximum allowed length is {0} characters!"
2757            ),
2758          },
2759          retry_password: {
2760            required: "This field is required!",
2761            minlength: jQuery.validator.format(
2762              "You must enter at least {0} characters!"
2763            ),
2764            maxlength: jQuery.validator.format(
2765              "Maximum allowed length is {0} characters!"
2766            ),
2767          },
2768          cpasswordagain: {
2769            required: "This field is required!",
2770            minlength: jQuery.validator.format(
2771              "You must enter at least {0} characters!"
2772            ),
2773            maxlength: jQuery.validator.format(
2774              "Maximum allowed length is {0} characters!"
2775            ),
2776            equalTo: "Passwords Don't Match",
2777          },
2778          cnewpasswordagain: {
2779            required: "This field is required!",
2780            minlength: jQuery.validator.format(
2781              "You must enter at least {0} characters!"
2782            ),
2783            maxlength: jQuery.validator.format(
2784              "Maximum allowed length is {0} characters!"
2785            ),
2786            equalTo: "Passwords Don't Match",
2787          },
2788          sozlesme: {
2789            required: "This field is required!",
2790          },
2791          verification: {
2792            required: "This field is required!",
2793          },
2794        },
2795        highlight: function (element) {
2796          $(element).closest(".input-row").addClass("input-error");
2797        },
2798        unhighlight: function (element) {
2799          $(element).closest(".input-row").removeClass("input-error");
2800        },
2801      });
2802    });
2803  },
2804
2805  modalFn: function () {
2806    $(".js-open-modal").on("click", function (e) {
2807      e.preventDefault();
2808
2809      $(".overlay, .js-modal").removeClass("active");
2810
2811      $(".overlay").addClass("active");
2812      var id = $(this).data("modal-id");
2813      $('.js-modal[data-modal-id="' + id + '"]').addClass("active");
2814
2815      $("html, body").addClass("scroll-disabled");
2816    });
2817
2818    $(".js-close-modal").on("click", function () {
2819      $(".overlay,.js-modal").removeClass("active");
2820      $("html, body").removeClass("scroll-disabled");
2821    });
2822
2823    $(document).keydown(function (e) {
2824      if (e.key === "Escape") {
2825        $(".overlay,.js-modal").removeClass("active");
2826        $("html, body").removeClass("scroll-disabled");
2827      }
2828    });
2829
2830    $("body").on("click", ".overlay", function () {
2831      $(".overlay,.js-modal").removeClass("active");
2832      $("html, body").removeClass("scroll-disabled");
2833    });
2834  },
2835
2836  overlayClickControlFn() {
2837    $(".overlay, .submenu-overlay").on("click", function (e) {
2838      $("html, body").removeClass("scroll-disabled");
2839      $(".overlay").removeClass("active");
2840      $(".submenu-overlay").removeClass("active");
2841      $(
2842        ".header-menu-item.has-submenu.simple .header-menu-item__title"
2843      ).removeClass("active");
2844      $(".js-open-search").removeClass("active");
2845      $(".js-open-subscribe").removeClass("active");
2846    });
2847  },
2848  inputPhoneControl() {
2849    $(".phone-mask").inputmask({
2850      mask: "999 999 99 99",
2851      showMaskOnHover: false,
2852      showMaskOnFocus: true,
2853    });
2854  },
2855
2856  animationTyping() {
2857    if ($(".animation-text").length > 0) {
2858      const $wordElements = $(".animation-text .word");
2859      const words = $wordElements
2860        .map(function () {
2861          return $(this).text().trim();
2862        })
2863        .get();
2864
2865      let currentWordIndex = 0;
2866      let isDeleting = true;
2867      let text = words[0];
2868      const typingSpeed = 150;
2869      const deletingSpeed = 100;
2870      const delayAfterTyping = 1000;
2871      const delayAfterDeleting = 1000;
2872
2873      $wordElements.removeClass("active").text("");
2874      $($wordElements.get(currentWordIndex)).addClass("active").text(words[0]);
2875
2876      function type() {
2877        const currentWord = words[currentWordIndex];
2878        const $currentElement = $($wordElements.get(currentWordIndex));
2879
2880        if (isDeleting) {
2881          text = currentWord.substring(0, text.length - 1);
2882        } else {
2883          text = currentWord.substring(0, text.length + 1);
2884        }
2885
2886        $currentElement.text(text);
2887
2888        if (!isDeleting && text === currentWord) {
2889          setTimeout(() => {
2890            isDeleting = true;
2891            type();
2892          }, delayAfterTyping);
2893        } else if (isDeleting && text === "") {
2894          setTimeout(() => {
2895            isDeleting = false;
2896            $currentElement.removeClass("active").text("");
2897            currentWordIndex = (currentWordIndex + 1) % words.length;
2898            const $nextElement = $($wordElements.get(currentWordIndex));
2899            $nextElement.addClass("active").text("");
2900            type();
2901          }, delayAfterDeleting);
2902        } else {
2903          setTimeout(type, isDeleting ? deletingSpeed : typingSpeed);
2904        }
2905      }
2906
2907      setTimeout(type, 1000);
2908    }
2909  },
2910
2911  initBeforeAfterSlider() {
2912    const windowWidth = $(window).width();
2913    if (windowWidth > 991) {
2914      const sliders = document.querySelectorAll(".transformation-slider");
2915
2916      sliders.forEach((slider) => {
2917        const handle = slider.querySelector(".js-slider-handle");
2918        const afterItem = slider.querySelector(".js-after");
2919        const beforeBtns = slider.querySelectorAll(".before-btn");
2920        const afterBtns = slider.querySelectorAll(".after-btn");
2921
2922        if (!handle || !afterItem) return;
2923
2924        let isDragging = false;
2925
2926        const setPosition = (percent, withTransition = false) => {
2927          if (withTransition) {
2928            handle.style.transition = "left 0.5s ease";
2929            afterItem.style.transition = "clip-path 0.5s ease";
2930          } else {
2931            handle.style.transition = "none";
2932            afterItem.style.transition = "none";
2933          }
2934
2935          handle.style.left = `${percent}%`;
2936          afterItem.style.clipPath = `inset(0 ${100 - percent}% 0 0)`;
2937        };
2938
2939        handle.addEventListener("mousedown", () => {
2940          isDragging = true;
2941        });
2942
2943        window.addEventListener("mouseup", () => {
2944          isDragging = false;
2945        });
2946
2947        window.addEventListener("mousemove", (e) => {
2948          if (!isDragging) return;
2949          const rect = slider.getBoundingClientRect();
2950          const offsetX = Math.min(
2951            Math.max(e.clientX - rect.left, 0),
2952            rect.width
2953          );
2954          const percent = (offsetX / rect.width) * 100;
2955          setPosition(percent, false);
2956        });
2957
2958        handle.addEventListener("touchstart", () => {
2959          isDragging = true;
2960          setPosition(null, false);
2961        });
2962
2963        window.addEventListener("touchend", () => {
2964          isDragging = false;
2965        });
2966
2967        window.addEventListener("touchmove", (e) => {
2968          if (!isDragging) return;
2969          const rect = slider.getBoundingClientRect();
2970          const offsetX = Math.min(
2971            Math.max(e.touches[0].clientX - rect.left, 0),
2972            rect.width
2973          );
2974          const percent = (offsetX / rect.width) * 100;
2975          setPosition(percent, false);
2976        });
2977
2978        beforeBtns.forEach((btn) => {
2979          btn.addEventListener("click", () => {
2980            setPosition(100, true);
2981          });
2982        });
2983
2984        afterBtns.forEach((btn) => {
2985          btn.addEventListener("click", () => {
2986            setPosition(0, true);
2987          });
2988        });
2989
2990        setPosition(70);
2991      });
2992    }
2993  },
2994
2995  dateTab() {
2996    $(document).ready(function () {
2997      $(".date-tab").each(function () {
2998        var $tabWrapper = $(this);
2999        var activeFilter = $tabWrapper
3000          .find(".date-tab-item.active")
3001          .data("filter");
3002
3003        var $container = $tabWrapper.parent();
3004        $container.find(".price-info").addClass("hidden");
3005        $container.find(".price-info.js-" + activeFilter).removeClass("hidden");
3006
3007        $tabWrapper.find(".date-tab-item").on("click", function () {
3008          var selectedFilter = $(this).data("filter");
3009
3010          $tabWrapper.find(".date-tab-item").removeClass("active");
3011          $(this).addClass("active");
3012
3013          $container.find(".price-info").addClass("hidden");
3014          $container
3015            .find(".price-info.js-" + selectedFilter)
3016            .removeClass("hidden");
3017        });
3018      });
3019    });
3020  },
3021  showMoreList() {
3022    $(".js-show-more-bar").on("click", function () {
3023      $(this).toggleClass("active");
3024      $(this)
3025        .parent(".js-collapse-wrapper")
3026        .find(".js-show-more-list")
3027        .toggleClass("active");
3028      $(this).find(".show-more-button-text.show").toggleClass("active");
3029      $(this).find(".show-more-button-text.hide").toggleClass("active");
3030      $(this).find(".show-more-button-icon").toggleClass("active");
3031    });
3032  },
3033
3034  searchOpen() {
3035    const $searchWrapper = $(".js-open-search");
3036    const $closeBtn = $(".js-close-search");
3037
3038    $searchWrapper.on("click", function () {
3039      $(this).addClass("active");
3040      $(".overlay").addClass("active");
3041
3042      setTimeout(() => {
3043        $(".search-content .inputMain").focus();
3044      }, 100);
3045    });
3046
3047    $closeBtn.on("click", function () {
3048      $searchWrapper.removeClass("active");
3049      $(".overlay").removeClass("active");
3050    });
3051  },
3052  subscribeOpen() {
3053    const $searchWrapper = $(".js-open-subscribe");
3054    const $closeBtn = $(".js-close-subscribe");
3055
3056    $searchWrapper.on("click", function () {
3057      $(this).addClass("active");
3058      $(".overlay").addClass("active");
3059    });
3060
3061    $closeBtn.on("click", function () {
3062      $searchWrapper.removeClass("active");
3063      $(".overlay").removeClass("active");
3064    });
3065  },
3066
3067  appImageLoad() {
3068    $(".app-section-img").css("z-index", "5");
3069  },
3070
3071  heroScrollImages() {
3072    $(document).ready(function () {
3073      const $scrollInner = $(".hero-right .scroll-inner");
3074      const $items = $scrollInner.children(".js-animation-img");
3075      const $cloned = $items.clone();
3076      $scrollInner.append($cloned);
3077
3078      let pos = 0;
3079      let velocity = 0.5;
3080      let targetVelocity = 1;
3081      let animationFrameId;
3082      const isMobile = window.innerWidth <= 991;
3083
3084      function animate() {
3085        velocity += (targetVelocity - velocity) * 0.05;
3086
3087        pos -= velocity;
3088        if (!$scrollInner[0]) return;
3089
3090        if (isMobile) {
3091          const scrollWidth = $scrollInner[0].scrollWidth / 2;
3092          if (Math.abs(pos) >= scrollWidth) pos = 0;
3093          $scrollInner.css("transform", `translateX(${pos}px)`);
3094        } else {
3095          const scrollHeight = $scrollInner[0].scrollHeight / 2;
3096          if (Math.abs(pos) >= scrollHeight) pos = 0;
3097          $scrollInner.css("transform", `translateY(${pos}px)`);
3098        }
3099
3100        animationFrameId = requestAnimationFrame(animate);
3101      }
3102
3103      animate();
3104
3105      $(".hero-right")
3106        .on("mouseenter", function () {
3107          targetVelocity = 0;
3108        })
3109        .on("mouseleave", function () {
3110          targetVelocity = 1;
3111        });
3112    });
3113  },
3114
3115  careerHeroImgSlides() {
3116    const run = () => {
3117      const container = document.querySelector(".js-scrolling");
3118
3119      if (!container) {
3120        return;
3121      }
3122
3123      const images = Array.from(container.children);
3124      images.forEach((img) => {
3125        const clone = img.cloneNode(true);
3126        container.appendChild(clone);
3127      });
3128
3129      let scrollX = 0;
3130      const speed = 0.5;
3131
3132      const animate = () => {
3133        scrollX += speed;
3134        if (scrollX >= container.scrollWidth / 2) {
3135          scrollX = 0;
3136        }
3137        container.scrollLeft = scrollX;
3138        requestAnimationFrame(animate);
3139      };
3140
3141      animate();
3142    };
3143
3144    if (document.readyState === "loading") {
3145      document.addEventListener("DOMContentLoaded", run);
3146    } else {
3147      run();
3148    }
3149  },
3150
3151  brandsLogosSlides() {
3152    const wrappers = document.querySelectorAll(".brands-item-wrapper");
3153
3154    wrappers.forEach((wrapper) => {
3155      const container = wrapper.querySelector(".brands-item-content");
3156      if (!container) return;
3157
3158      const items = Array.from(container.querySelectorAll(".brands-item"));
3159      if (items.length <= 5) {
3160        wrapper.classList.add("no-mask");
3161        return;
3162      }
3163
3164      const cloneTimes = 3;
3165      for (let i = 0; i < cloneTimes; i++) {
3166        items.forEach((item) => {
3167          const clone = item.cloneNode(true);
3168          container.appendChild(clone);
3169        });
3170      }
3171
3172      let pos = 0;
3173      const speed = 0.5;
3174
3175      function animate() {
3176        const resetWidth = container.scrollWidth / 2;
3177        pos -= speed;
3178
3179        container.style.transform = `translateX(${pos}px)`;
3180
3181        if (pos <= -resetWidth) {
3182          pos = 0;
3183        }
3184
3185        requestAnimationFrame(animate);
3186      }
3187
3188      animate();
3189    });
3190  },
3191
3192  careerScrollingImageSection() {
3193    const container = document.querySelector(".scrolling-img-section");
3194    if (!container) return;
3195
3196    const items = Array.from(container.children);
3197    items.forEach((item) => {
3198      const clone = item.cloneNode(true);
3199      container.appendChild(clone);
3200    });
3201
3202    let scrollPosition = 0;
3203    const speed = 0.5;
3204
3205    function animateScroll() {
3206      scrollPosition += speed;
3207      container.scrollLeft = scrollPosition;
3208
3209      const resetPoint = container.scrollWidth / 2;
3210
3211      if (scrollPosition >= resetPoint) {
3212        scrollPosition -= resetPoint;
3213        container.scrollLeft = scrollPosition;
3214      }
3215
3216      requestAnimationFrame(animateScroll);
3217    }
3218
3219    window.addEventListener("load", () => {
3220      container.scrollLeft = 0;
3221      animateScroll();
3222    });
3223  },
3224
3225  stepItemLineHeightControl() {
3226    $(document).ready(function () {
3227      var $wrapper = $(".step-item-wrapper");
3228      var $line = $wrapper.find(".line");
3229      var $lastBottom = $wrapper.find(".step-item-bottom").last();
3230
3231      if (
3232        $wrapper.length &&
3233        $lastBottom.length &&
3234        $wrapper.offset() &&
3235        $lastBottom.offset()
3236      ) {
3237        var wrapperTop = $wrapper.offset().top;
3238        var bottomTop = $lastBottom.offset().top;
3239        var lineHeight = bottomTop - wrapperTop - 26;
3240
3241        $line.css("height", lineHeight + "px");
3242      }
3243    });
3244  },
3245
3246  appCircleControl() {
3247    $(document).ready(function () {
3248      const $items = $(".app-cycle-content-item-wrapper");
3249      let currentIndex = 0;
3250
3251      const isMobile = window.innerWidth < 992;
3252      let $pagination = null;
3253
3254      if (isMobile) {
3255        $pagination = $(".pagination");
3256        $pagination.empty();
3257
3258        $items.each(function (i) {
3259          const $dot = $('<div class="pagination-item"></div>');
3260
3261          if ($(this).hasClass("active")) {
3262            $dot.addClass("active");
3263            currentIndex = i;
3264          }
3265
3266          $pagination.append($dot);
3267        });
3268      }
3269
3270      function updateView() {
3271        $items.removeClass("active").eq(currentIndex).addClass("active");
3272
3273        if (isMobile) {
3274          $(".pagination-item")
3275            .removeClass("active")
3276            .eq(currentIndex)
3277            .addClass("active");
3278        }
3279
3280        const rotation = currentIndex * 90;
3281        $(".cycle-center .center-circle").css(
3282          "transform",
3283          `rotate(${rotation}deg)`
3284        );
3285      }
3286
3287      $(".app-cycle .label").on("click", function () {
3288        const targetFilter = $(this).data("filter");
3289
3290        $(".app-cycle-content-item-wrapper").removeClass("active");
3291
3292        $(".app-cycle-content-item-wrapper").each(function () {
3293          const itemFilter = $(this).find(".label").data("filter");
3294          if (itemFilter === targetFilter) {
3295            $(this).addClass("active");
3296            currentIndex = i;
3297          }
3298        });
3299
3300        updateView();
3301      });
3302
3303      if (isMobile) {
3304        $(".btn-next").on("click", function () {
3305          currentIndex = (currentIndex + 1) % $items.length;
3306          updateView();
3307        });
3308
3309        $(".btn-prev").on("click", function () {
3310          currentIndex = (currentIndex - 1 + $items.length) % $items.length;
3311          updateView();
3312        });
3313
3314        $pagination.on("click", ".pagination-item", function () {
3315          currentIndex = $(this).index();
3316          updateView();
3317        });
3318      }
3319    });
3320  },
3321
3322  sidebarContentOpen() {
3323    $(".js-open-sidebar-content").on("click", function (e) {
3324      e.preventDefault();
3325
3326      const $clickedTop = $(this).closest(".sidebar-item-top");
3327
3328      $clickedTop.toggleClass("opened");
3329    });
3330  },
3331
3332  reportDetailProgressBar() {
3333    $(document).ready(function () {
3334      const $items = $(".sidebar-item-top");
3335      const total = $items.length;
3336
3337      const read = $items.filter(function () {
3338        return (
3339          $(this).hasClass("chapter-read") || $(this).hasClass("page-active")
3340        );
3341      }).length;
3342
3343      if (total > 0) {
3344        const percentage = (read / total) * 100;
3345        $(".progress span").css("width", `${percentage}%`);
3346      }
3347    });
3348  },
3349
3350  sidebarSearchFn() {
3351    jQuery(document).ready(function ($) {
3352      $(".sidebar .inputMain").on("input", function () {
3353        var searchTerm = $(this).val().toLowerCase().trim();
3354
3355        $(".sidebar-item").each(function () {
3356          var item = $(this);
3357          var matchCount = 0;
3358
3359          item.find(".sidebar-item-link").each(function () {
3360            var link = $(this);
3361            var content = link.data("content").toLowerCase();
3362
3363            if (searchTerm === "" || content.includes(searchTerm)) {
3364              link.show();
3365              matchCount++;
3366            } else {
3367              link.hide();
3368            }
3369          });
3370
3371          if (searchTerm === "" || matchCount > 0) {
3372            item.show();
3373          } else {
3374            item.hide();
3375          }
3376        });
3377      });
3378    });
3379  },
3380
3381  mobileSidebarOpen() {
3382    $(document).ready(function () {
3383      $(".js-open-sidebar").on("click", function (e) {
3384        e.preventDefault();
3385        $(".js-sidebar").addClass("active");
3386        $(".header-wrapper").addClass("no-fixed");
3387        $("html, body").addClass("scroll-disabled");
3388      });
3389      $(".js-close-sidebar").on("click", function (e) {
3390        e.preventDefault();
3391        $(".js-sidebar").removeClass("active");
3392        $(".header-wrapper").removeClass("no-fixed");
3393        $("html, body").removeClass("scroll-disabled");
3394      });
3395      $(".sidebar-item-link").on("click", function () {
3396        $(".js-sidebar").removeClass("active");
3397        $(".header-wrapper").removeClass("no-fixed");
3398        $("html, body").removeClass("scroll-disabled");
3399      });
3400    });
3401  },
3402
3403  modalVideoControlFn() {
3404    $(document).ready(function () {
3405      $(".js-modal-btn").modalVideo({
3406        channel: "youtube",
3407        autoplay: 1,
3408        youtube: {
3409          autoplay: 1,
3410          mute: 1,
3411        },
3412      });
3413      $(".js-modal-btn-vimeo").modalVideo({ channel: "vimeo" });
3414    });
3415  },
3416
3417  scrollRevealFn() {
3418    if (!document.querySelector('.landing-page-v2')) return;
3419    if (window.matchMedia('(prefers-reduced-motion: reduce)').matches) return;
3420
3421    const io = new IntersectionObserver(
3422      (entries) => {
3423        entries.forEach((entry) => {
3424          if (entry.isIntersecting) {
3425            entry.target.classList.add('sr-visible');
3426            io.unobserve(entry.target);
3427          }
3428        });
3429      },
3430      { threshold: 0.1, rootMargin: '0px 0px -48px 0px' }
3431    );
3432
3433    const reveal = (el, delay, extraClass) => {
3434      if (extraClass) el.classList.add(extraClass);
3435      if (delay) el.style.setProperty('--sr-delay', delay + 's');
3436      el.classList.add('sr-ready');
3437      io.observe(el);
3438    };
3439
3440    // Section heads
3441    document.querySelectorAll('.landing-page-v2 .section-head').forEach((el) => {
3442      reveal(el, 0, '');
3443    });
3444
3445    // Staggered grid items
3446    const staggerConfigs = [
3447      { parent: '.count-item-grid', child: '.count-item', extra: '' },
3448      { parent: '.feature-item-grid', child: '.feature-item', extra: 'sr-scale' },
3449      { parent: '.product-dev-item-grid', child: '.product-dev-item', extra: 'sr-scale' },
3450    ];
3451
3452    staggerConfigs.forEach(({ parent, child, extra }) => {
3453      document.querySelectorAll('.landing-page-v2 ' + parent).forEach((parentEl) => {
3454        parentEl.querySelectorAll(child).forEach((el, idx) => {
3455          reveal(el, idx * 0.09, extra);
3456        });
3457      });
3458    });
3459
3460    // Timeline items
3461    document.querySelectorAll('.landing-page-v2 .timeline-item').forEach((el, idx) => {
3462      reveal(el, idx * 0.1, '');
3463    });
3464
3465    // Section content left/right columns
3466    document.querySelectorAll(
3467      '.landing-page-v2 .section--row .section-content-left, .landing-page-v2 .section--row .section-content-right'
3468    ).forEach((el) => {
3469      reveal(el, 0, '');
3470    });
3471  },
3472
3473  landingTabScroll() {
3474    if (!$("body").hasClass("testing-ai-hero")) return;
3475
3476    var isDark = $(".landing-page-v2-dark").length > 0;
3477    var $wrapper = $(".landing-page-v2");
3478    if ($wrapper.length === 0) return;
3479
3480    var $breadcrumbWrapper = $wrapper.find(".breadcrumb-wrapper");
3481    if ($breadcrumbWrapper.length === 0) return;
3482
3483    var $allTabItems = $breadcrumbWrapper.find(".tab-item-landing");
3484    if ($allTabItems.length === 0) return;
3485
3486    var $animatedTabs = $breadcrumbWrapper.find(".animated-tabs");
3487    var $line = $animatedTabs.find(".animated-tabs-line");
3488    var scrollThreshold = 80;
3489
3490    function buildSections() {
3491      var sections = [];
3492      $allTabItems.each(function () {
3493        var anchor = $(this).attr("data-anchor") || "";
3494        var href = $(this).attr("href") || "";
3495        var hash = "";
3496        if (anchor && anchor.charAt(0) === "#") {
3497          hash = anchor;
3498        } else if (href.indexOf("#") !== -1) {
3499          hash = href.substring(href.indexOf("#"));
3500        }
3501        if (hash && hash.length > 1) {
3502          var $el = $(hash);
3503          if ($el.length > 0) {
3504            sections.push({ $tab: $(this), $section: $el, hash: hash });
3505          }
3506        }
3507      });
3508      sections.sort(function (a, b) {
3509        return a.$section.offset().top - b.$section.offset().top;
3510      });
3511      return sections;
3512    }
3513
3514    var anchorSections = buildSections();
3515
3516    console.log("[landingTabScroll] tabs:", $allTabItems.length, "anchors:", anchorSections.length, anchorSections.map(function (s) { return s.hash; }));
3517
3518    function syncLine() {
3519      if (!$animatedTabs.length || !$line.length) return;
3520      var $active = $allTabItems.filter(".active").first();
3521      if (!$active.length) {
3522        $line.css({ width: 0 });
3523        return;
3524      }
3525      var pos = $active.position();
3526      var scrollLeft = $animatedTabs.scrollLeft();
3527      $line.css({
3528        left: pos.left + scrollLeft,
3529        width: $active.outerWidth(),
3530      });
3531    }
3532
3533    $allTabItems.on("click", function (e) {
3534      var anchor = $(this).attr("data-anchor") || "";
3535      var href = $(this).attr("href") || "";
3536      var hash = "";
3537      if (anchor && anchor.charAt(0) === "#") {
3538        hash = anchor;
3539      } else if (href.indexOf("#") !== -1) {
3540        hash = href.substring(href.indexOf("#"));
3541      }
3542
3543      if (hash && hash.length > 1) {
3544        var $target = $(hash);
3545        if ($target.length > 0) {
3546          e.preventDefault();
3547          var headerOffset = $breadcrumbWrapper.outerHeight() || 60;
3548          var scrollTo = $target.offset().top - headerOffset - 10;
3549          $("html, body").animate({ scrollTop: scrollTo }, 600, "swing");
3550        }
3551      }
3552
3553      $allTabItems.removeClass("active");
3554      $(this).addClass("active");
3555      syncLine();
3556    });
3557
3558    function updateOnScroll() {
3559      var scrollTop = $(window).scrollTop();
3560
3561      if (!isDark && scrollTop > scrollThreshold) {
3562        $breadcrumbWrapper.addClass("tab-scrolled");
3563      } else {
3564        $breadcrumbWrapper.removeClass("tab-scrolled");
3565      }
3566
3567      if (anchorSections.length === 0) return;
3568
3569      var headerOffset = $breadcrumbWrapper.outerHeight() || 60;
3570      var activeFound = false;
3571
3572      for (var i = anchorSections.length - 1; i >= 0; i--) {
3573        var sectionTop = anchorSections[i].$section.offset().top - headerOffset - 60;
3574        if (scrollTop >= sectionTop) {
3575          $allTabItems.removeClass("active");
3576          anchorSections[i].$tab.addClass("active");
3577          activeFound = true;
3578          break;
3579        }
3580      }
3581
3582      if (!activeFound) {
3583        $allTabItems.removeClass("active");
3584      }
3585
3586      syncLine();
3587    }
3588
3589    $(window).on("scroll", updateOnScroll);
3590    updateOnScroll();
3591  },
3592
3593  landingPageHeaderScroll() {
3594    var $heroVideo = $(".landing-page .hero-video");
3595    if ($(".w-brief-banner").length > 0) return;
3596    if ($heroVideo.length === 0) return;
3597
3598    var heroHeight = $heroVideo.outerHeight();
3599
3600    function checkScroll() {
3601      var isOverlayHero = $("body").hasClass("has-video-overlay-hero");
3602      var scrollTop = $(window).scrollTop();
3603
3604      if ($(window).width() >= 992) {
3605        if (isOverlayHero) {
3606          $(".header-wrapper").addClass("header-light-theme");
3607          $(".header").removeClass("header-light-theme");
3608        } else {
3609          $(".header, .header-wrapper").addClass("header-light-theme");
3610        }
3611        return;
3612      }
3613
3614      if (isOverlayHero) {
3615        if (scrollTop >= heroHeight) {
3616          $(".header-wrapper").removeClass("header-light-theme");
3617        } else {
3618          $(".header-wrapper").addClass("header-light-theme");
3619        }
3620        $(".header").removeClass("header-light-theme");
3621      } else {
3622        if (scrollTop >= heroHeight) {
3623          $(".header, .header-wrapper").removeClass("header-light-theme");
3624        } else {
3625          $(".header, .header-wrapper").addClass("header-light-theme");
3626        }
3627      }
3628    }
3629
3630    checkScroll();
3631
3632    $(window).on("scroll", checkScroll);
3633    $(window).on("resize", function () {
3634      heroHeight = $heroVideo.outerHeight();
3635      checkScroll();
3636    });
3637  },
3638
3639
3640  aiFeatureSectionFilter() {
3641    $(".ai-feature-section").each(function () {
3642      const $section = $(this);
3643  
3644      const $accordionItems = $section.find(".js-accordion-item");
3645      const $productImages = $section.find(".product-info-img");
3646  
3647      $accordionItems.on("click", function () {
3648        const index = $accordionItems.index(this);
3649  
3650        $productImages.removeClass("active");
3651        $productImages.eq(index).addClass("active");
3652      });
3653    });
3654  },
3655
3656
3657
3658  init: function () {
3659    app.overlayClickControlFn();
3660    app.setWindowHeight();
3661    app.swiperFn();
3662    app.mobileMenuOpenFn();
3663    app.bodyClickControlFn();
3664    app.dropdown();
3665    app.tabFn();
3666    app.animatedTabs();
3667    app.mobileSubmenuOpen();
3668    app.fixedTab();
3669    app.scrollItem();
3670    app.accordionFn();
3671    app.recalcAccordionHeights();
3672    app.modalFn();
3673    app.validateForm();
3674    app.inputPhoneControl();
3675    app.animationTyping();
3676    app.initBeforeAfterSlider();
3677    app.dateTab();
3678    app.mobileMenuItemOpen();
3679    app.showMoreList();
3680    app.appImageLoad();
3681    app.langsMenuOpen();
3682    app.searchOpen();
3683    app.subscribeOpen();
3684    app.heroScrollImages();
3685    app.careerHeroImgSlides();
3686    app.brandsLogosSlides();
3687    app.careerScrollingImageSection();
3688    app.appCircleControl();
3689    app.sidebarContentOpen();
3690    app.reportDetailProgressBar();
3691    app.sidebarSearchFn();
3692    app.mobileSidebarOpen();
3693    app.stepItemLineHeightControl();
3694    app.modalVideoControlFn();
3695    app.productStrategySectionImgChange();
3696    app.landingPageHeaderScroll();
3697    app.scrollRevealFn();
3698    app.landingTabScroll();
3699    app.aiFeatureSectionFilter();
3700
3701    setTimeout(() => {
3702      $(".animated-tabs").each(function () {
3703        app.updateTabLine($(this));
3704      });
3705    }, 100);
3706  },
3707};
3708
3709$(function () {
3710  app.init();
3711});
3712
3713$(window).on("scroll", function () {
3714  app.fixedTab();
3715});
3716
3717$(window).on("resize", function () {
3718  $(".animated-tabs").each(function () {
3719    app.updateTabLine($(this));
3720  });
3721});
3722
3723
3724$('[data-fancybox="gallery"]').fancybox({
3725  buttons: ["download", "zoom", "fullScreen", "close"],
3726  lang: "tr",
3727  i18n: {
3728    tr: {
3729      CLOSE: "Çıkış",
3730      NEXT: "Sonraki",
3731      PREV: "Önceki",
3732      ERROR:
3733        "The requested content cannot be loaded. <br/> Please try again later.",
3734      PLAY_START: "Start slideshow",
3735      PLAY_STOP: "Pause slideshow",
3736      FULL_SCREEN: "Tam Ekran",
3737      THUMBS: "Galeri",
3738      DOWNLOAD: "İndir",
3739      SHARE: "Share",
3740      ZOOM: "Zoom",
3741    },
3742    thumbs: {
3743      autoStart: true,
3744    },
3745  },
3746  animationEffect: "zoom",
3747  transitionEffect: "slide",
3748  dblclickContent: "zoom",
3749});
3750
3751
3752
3753
3754function handleFooterMenuLimit() {
3755  var isDesktop = window.innerWidth > 991;
3756  $(".js-footer-menu-links").each(function () {
3757    var $container = $(this);
3758    var menu = $container.data("menu");
3759    var $links = $container.find(".footer-menu__link");
3760    var $seeAllBtn = $(".see-all-btn[data-menu='" + menu + "']");
3761    var $modal = $("#modal-" + menu);
3762    $links.show();
3763    $seeAllBtn.hide();
3764    $modal.hide();
3765    if (isDesktop && $links.length > 10) {
3766      $links.each(function (i) {
3767        if (i >= 10) $(this).hide();
3768      });
3769      $seeAllBtn.show();
3770      $modal.hide();
3771    }
3772  });
3773}
3774
3775$(function () {
3776  handleFooterMenuLimit();
3777  $(window).on("resize", handleFooterMenuLimit);
3778});
3779
3780$(document).on("click", ".see-all-btn", function (e) {
3781  e.stopPropagation();
3782  var menu = $(this).data("menu");
3783  var $container = $(".js-footer-menu-links[data-menu='" + menu + "']");
3784  var $links = $container.find(".footer-menu__link");
3785  var $modal = $("#modal-" + menu);
3786  $modal.show().addClass("active");
3787  $(".overlay").addClass("active");
3788  $("html, body").addClass("scroll-disabled");
3789});
3790$(document).on("click", ".footer-modal-close", function (e) {
3791  e.stopPropagation();
3792  $(this).closest(".footer-modal").hide().removeClass("active");
3793  $(".overlay").removeClass("active");
3794  $("html, body").removeClass("scroll-disabled");
3795});
3796$(document).on("click", ".overlay", function (e) {
3797  e.stopPropagation();
3798  $(".footer-modal.active").hide().removeClass("active");
3799  $(".overlay").removeClass("active");
3800  $("html, body").removeClass("scroll-disabled");
3801});
3802$(document).on("keydown", function (e) {
3803  if (e.key === "Escape" || e.key === "Esc") {
3804    $(".footer-modal.active").hide().removeClass("active");
3805    $(".overlay").removeClass("active");
3806    $("html, body").removeClass("scroll-disabled");
3807  }
3808});
3809document.querySelectorAll("li").forEach((li) => {
3810  if (li.querySelector("h3")) {
3811    li.classList.add("has-h3");
3812  }
3813});
3814
3815$(document).ready(function () {
3816  document.querySelectorAll("li").forEach((li) => {
3817    if (li.querySelector("h3")) {
3818      li.classList.add("has-h3");
3819    }
3820  });
3821});
3822
3823document.addEventListener("DOMContentLoaded", () => {
3824  hljs.highlightAll();
3825});
3826
3827
3828$(document).ready(function () {
3829  var $infoCard = $(".info-card");
3830  if ($(window).width() >= 992) {
3831    $(window).on("scroll", function () {
3832      if ($(this).scrollTop() >= 200) {
3833        $infoCard.addClass("sticky");
3834        updateSidebarMaxHeight();
3835      } else {
3836        $infoCard.removeClass("sticky");
3837      }
3838    });
3839  }
3840});
3841
3842function updateSidebarMaxHeight() {
3843  const sidebar = document.querySelector(".sidebar");
3844  const onlyDesktop = document.querySelector(".only-desktop");
3845  if (
3846    !sidebar ||
3847    sidebar.classList.contains("sidebar--accordion") ||
3848    window.innerWidth < 1024
3849  )
3850    return;
3851  const onlyDesktopHeight = onlyDesktop?.offsetHeight || 0;
3852  const additionalOffset = 4 * 16;
3853  const newMaxHeight =
3854    window.innerHeight - (onlyDesktopHeight + additionalOffset);
3855  sidebar.style.maxHeight = `${newMaxHeight}px`;
3856}

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.