jQuery(function($) { function closeAllOffCanvas(exceptID = null) { let anyOpen = false; // Track if another Off-Canvas remains open $(".e-off-canvas").each(function() { let canvasID = $(this).attr("id"); if (!exceptID || canvasID !== exceptID) { $(this).removeClass("e-off-canvas-visible") .addClass("e-off-canvas-hidden") .attr("aria-hidden", "true") .css({ "z-index": "10", "visibility": "hidden", "opacity": "0" }); // Full removal delay set to 0ms setTimeout(() => { if ($(this).attr("aria-hidden") === "true") { $(this).css("display", "none"); } }, 0); } else { anyOpen = true; // At least one Off-Canvas is still open } }); } function openOffCanvas(targetID) { let targetCanvas = $(targetID); if (targetCanvas.length) { // Close all others EXCEPT the one we're opening closeAllOffCanvas(targetID); // Open immediately with delay set to 0ms setTimeout(() => { targetCanvas.removeClass("e-off-canvas-hidden") .addClass("e-off-canvas-visible") .attr("aria-hidden", "false") .css({ "z-index": "9999", "visibility": "visible", "opacity": "1", "display": "block" }); // Ensure the White Background Stays Visible $("body").addClass("off-canvas-active"); // Force repaint after opening forceRepaint(); }, 0); } } // Decode Base64 function decodeBase64(str) { try { return atob(str); } catch (e) { return null; } } // Handle Elementor Off-Canvas OPEN clicks $(document).on('click', '[href*="elementor-action%3Aaction%3Doff_canvas%3Aopen"]', function(event) { event.preventDefault(); let href = decodeURIComponent($(this).attr("href")); let base64Match = href.match(/settings=([^&]+)/); if (base64Match) { let decodedSettings = decodeBase64(base64Match[1]); try { let settingsObj = JSON.parse(decodedSettings); if (settingsObj.id) { let offCanvasID = "#off-canvas-" + settingsObj.id; openOffCanvas(offCanvasID); } } catch (e) {} } }); // Handle Elementor Off-Canvas CLOSE clicks $(document).on('click', '[href*="elementor-action%3Aaction%3Doff_canvas%3Aclose"]', function(event) { event.preventDefault(); closeAllOffCanvas(); }); // Ensure all Off-Canvas elements start hidden (ONLY if NOT in Elementor Editor) function initializeOffCanvasVisibility() { // Check if the body does NOT have the Elementor edit mode class if (!$('body').hasClass('elementor-element-edit-mode')) { $(".e-off-canvas").each(function() { $(this).attr("aria-hidden", "true").css({ "z-index": "10", "visibility": "hidden", "opacity": "0", "display": "none" }); }); } } // Call the initialization function $(window).on('load', initializeOffCanvasVisibility); // Utility function to force repaint function forceRepaint() { if ($('body').length) { $('body')[0].style.display = 'none'; $('body')[0].offsetHeight; $('body')[0].style.display = ''; } } });

Milestone at Jouvoli: ISO 50001 Expertise Strengthened

We’re proud to share that two of our data scientists have officially achieved the PECB ISO 50001 Lead Implementer certification. At Jouvoli, we build solutions with international standards in mind from the start. Energy management is part of how we design, develop and scale our product, helping our customers move confidently toward sustainable and compliant […]

EN