(function () { var DESKTOP_MIN = 992; function isDesktop() { return window.innerWidth >= DESKTOP_MIN; } function waitForGSAP(cb) { if (typeof gsap !== "undefined") cb(); else setTimeout(function () { waitForGSAP(cb); }, 50); } function whenFullyLoaded(cb) { if (document.readyState === "complete") cb(); else window.addEventListener("load", cb, { once: true }); } function raf2(cb) { requestAnimationFrame(function () { requestAnimationFrame(cb); }); } function disableTransitionVisual() { sessionStorage.removeItem("page-transition-active"); document.documentElement.classList.remove("page-transitioning"); document.body.classList.remove("page-transitioning"); var g = document.querySelector(".load_grid"); if (g && typeof gsap !== "undefined") { gsap.set(g, { display: "none", opacity: 0, visibility: "hidden" }); } else if (g) { g.style.display = "none"; } } waitForGSAP(function () { var grid = document.querySelector(".load_grid"); var square = document.querySelector(".transition-square"); function initTransition() { if (!grid || !square) { setTimeout(initTransition, 50); return; } if (!isDesktop()) { disableTransitionVisual(); return; } var isTransitioned = sessionStorage.getItem("page-transition-active"); if (isTransitioned) { var pageContent = Array.from(document.body.children).filter(function (el) { return ( !el.classList.contains("load_grid") && el.tagName !== "SCRIPT" && el.tagName !== "STYLE" ); }); if (!pageContent.length) { sessionStorage.removeItem("page-transition-active"); return; } gsap.set(grid, { display: "block", opacity: 1, visibility: "visible" }); gsap.set(".transition-square", { position: "fixed", width: "100vw", height: "100vh", top: 0, left: 0, xPercent: 0, yPercent: 0, bottom: "auto", opacity: 1, force3D: true }); gsap.set(pageContent, { opacity: 0, scale: 0.95, force3D: true, visibility: "visible" }); function runTimeline() { var tl = gsap.timeline({ onComplete: function () { square.style.willChange = "auto"; grid.style.willChange = "auto"; pageContent.forEach(function (el) { el.style.willChange = ""; }); } }); tl.to(".transition-square", { height: "0vh", opacity: 1, duration: 0.9, ease: "expo.inOut", force3D: true }); tl.call( function () { document.documentElement.classList.remove("page-transitioning"); document.body.classList.remove("page-transitioning"); pageContent.forEach(function (el) { el.style.willChange = "transform, opacity"; }); }, null, "-=0.45" ); tl.to( pageContent, { opacity: 1, scale: 1, duration: 0.8, ease: "power3.out", stagger: { amount: 0.35, from: "start" }, force3D: true, clearProps: "transform" }, "-=0.45" ); tl.call(function () { pageContent.forEach(function (el) { el.style.opacity = ""; el.style.transform = ""; el.style.visibility = ""; }); gsap.set(".load_grid", { display: "none" }); sessionStorage.removeItem("page-transition-active"); }); } raf2(runTimeline); } else { gsap.set(".load_grid", { display: "none" }); } } if (document.readyState === "loading") { document.addEventListener("DOMContentLoaded", initTransition); } else { initTransition(); } function handleLinkClick(e) { if (!isDesktop()) return; var link = e.target.closest("a"); if (!link) return; if (link.id === "load-more-btn") return; var rawHref = link.getAttribute("href"); if (!rawHref || rawHref.trim() === "" || rawHref === "#") return; var hostname = link.hostname || (link.href ? new URL(link.href, window.location.href).hostname : ""); var href = rawHref || link.href; var target = link.getAttribute("target") || link.target; if ( hostname === window.location.hostname && href.indexOf("#") === -1 && target !== "_blank" ) { e.preventDefault(); var destination = href; sessionStorage.setItem("page-transition-active", "true"); whenFullyLoaded(function () { raf2(function () { gsap.set(".load_grid", { display: "block" }); gsap.set(".transition-square", { position: "fixed", top: "50%", left: "50%", xPercent: -50, yPercent: -50, width: "100vw", height: "100vh", transformOrigin: "50% 50%", scale: 0, opacity: 1, force3D: true, willChange: "transform" }); var tl = gsap.timeline({ defaults: { force3D: true }, onComplete: function () { square.style.willChange = "auto"; window.location = destination; } }); tl.to(".transition-square", { scale: 0.22, duration: 0.55, ease: "expo.out" }).to(".transition-square", { scale: 1, duration: 0.75, ease: "expo.inOut" }); }); }); } } if (document.readyState === "loading") { document.addEventListener("DOMContentLoaded", function () { document.addEventListener("click", handleLinkClick, true); }); } else { document.addEventListener("click", handleLinkClick, true); } window.addEventListener("resize", function () { if (!isDesktop()) disableTransitionVisual(); }); window.onpageshow = function (event) { if (event.persisted) window.location.reload(); }; }); })();