// WOSC minimal safe tools bootstrap (function () { "use strict"; function installErrorLogging() { if (window.__woscErrorLoggerInstalled) return; window.__woscErrorLoggerInstalled = true; var KEY = "__wosc_tools_error_log__"; var MAX = 120; function safeString(v) { try { if (typeof v === "string") return v; return JSON.stringify(v); } catch (e) { return String(v); } } function writeLog(entry) { try { var arr = []; var raw = localStorage.getItem(KEY); if (raw) arr = JSON.parse(raw) || []; arr.push(entry); if (arr.length > MAX) arr = arr.slice(arr.length - MAX); localStorage.setItem(KEY, JSON.stringify(arr)); } catch (e) {} } function baseEntry(type) { return { ts: new Date().toISOString(), type: type, page: location.pathname + location.search + location.hash, ua: navigator.userAgent }; } window.addEventListener("error", function (ev) { var t = ev && ev.target; // Script/css/image loading errors if (t && t !== window && (t.src || t.href)) { var e1 = baseEntry("resource-error"); e1.tag = t.tagName || ""; e1.src = t.src || t.href || ""; writeLog(e1); return; } var e2 = baseEntry("js-error"); e2.message = ev && ev.message ? ev.message : "unknown js error"; e2.file = ev && ev.filename ? ev.filename : ""; e2.line = ev && ev.lineno ? ev.lineno : 0; e2.col = ev && ev.colno ? ev.colno : 0; e2.stack = ev && ev.error && ev.error.stack ? String(ev.error.stack) : ""; writeLog(e2); }, true); window.addEventListener("unhandledrejection", function (ev) { var e = baseEntry("unhandledrejection"); e.reason = ev && ev.reason ? safeString(ev.reason) : "unknown rejection"; writeLog(e); }); // Track navigation actions for crash timeline. ["pushState", "replaceState"].forEach(function (m) { if (!history[m]) return; var orig = history[m]; history[m] = function () { var r = orig.apply(this, arguments); try { var e = baseEntry("navigation"); e.method = m; e.url = location.pathname + location.search + location.hash; writeLog(e); } catch (x) {} return r; }; }); } function installSafeGlobals() { // Prevent runtime crashes from missing legacy analytics globals. if (!window.dataLayer || typeof window.dataLayer.push !== "function") { var dl = []; dl.push = function () { return Array.prototype.push.apply(dl, arguments); }; window.dataLayer = dl; } if (typeof window.gtag !== "function") { window.gtag = function () { try { window.dataLayer.push(arguments); } catch (e) {} }; } if (typeof window.google_tags_first_party === "undefined") { window.google_tags_first_party = []; } if (typeof window.__tcfapi !== "function") { window.__tcfapi = function (_cmd, _ver, cb) { if (typeof cb === "function") cb({}, false); }; } } function isCalculatorPath() { return /calculator/i.test(location.pathname || ""); } function applyCssFixes() { var styleId = "wosc-tools-safe-fix"; if (document.getElementById(styleId)) return; var st = document.createElement("style"); st.id = styleId; st.textContent = "[id*='cookie'],[id*='consent'],[id*='privacy'],[class*='cookie'],[class*='consent'],[class*='privacy']{" + "display:none !important; visibility:hidden !important; pointer-events:none !important;}" + ".pwa-prompt,.pwa-prompt-portal,.pwa-settings,.pwa-settings-button,.floating-settings,.settings-fab,.settings-button,.theme-toggle,.theme-toggle-embedded{" + "display:none !important; visibility:hidden !important; pointer-events:none !important;}" + ".ot-floating-button,.ot-sdk-container,.qc-cmp-ui-container,.qc-cmp2-summary-buttons,.fc-floating-button,.cky-btn,.cky-btn-revisit-wrapper{" + "display:none !important; visibility:hidden !important; pointer-events:none !important;}" + "[aria-label*='privacy' i],[title*='privacy' i],[aria-label*='consent' i],[title*='consent' i]{" + "display:none !important; visibility:hidden !important; pointer-events:none !important;}" + "#onetrust-pc-btn-handler,.ot-sdk-show-settings,.qc-cmp2-container,.fc-consent-root,[aria-modal='true'][role='dialog']{" + "display:none !important; visibility:hidden !important; pointer-events:none !important;}" + "body{overflow:auto !important;}"; if (isCalculatorPath()) { st.textContent += "header,nav,aside,[role='navigation'],[class*='sidebar'],[id*='sidebar'],[class*='topbar'],[class*='navbar'],[class*='drawer'],[id*='drawer']{" + "display:none !important; visibility:hidden !important; pointer-events:none !important;}" + "main,[role='main']{margin-left:0 !important; width:100% !important; max-width:none !important;}"; } (document.head || document.documentElement).appendChild(st); } function removeBadConsentScripts() { var scripts = document.querySelectorAll("script[src]"); for (var i = 0; i < scripts.length; i++) { var src = String(scripts[i].getAttribute("src") || "").toLowerCase(); if (src.indexOf("gatekeeperconsent.com") >= 0 || src.indexOf("cmp.min.js") >= 0) { scripts[i].remove(); } } } function hideLeftPrivacyBadge() { var nodes = document.querySelectorAll("button,a,div,span"); for (var i = 0; i < nodes.length; i++) { var el = nodes[i]; var s = window.getComputedStyle(el); if (!s || s.position !== "fixed") continue; var left = parseInt(s.left || "0", 10); var bottom = parseInt(s.bottom || "0", 10); var z = parseInt(s.zIndex || "0", 10); var w = parseInt(s.width || "0", 10); var h = parseInt(s.height || "0", 10); var txt = ((el.getAttribute("aria-label") || "") + " " + (el.getAttribute("title") || "") + " " + (el.textContent || "")).toLowerCase(); var looksLikePrivacy = txt.indexOf("privacy") >= 0 || txt.indexOf("consent") >= 0 || txt.indexOf("cookie") >= 0 || txt.indexOf("settings") >= 0; var looksLikeFloatingBadge = left <= 30 && bottom <= 120 && z >= 100 && w <= 90 && h <= 90; if (looksLikePrivacy || looksLikeFloatingBadge) { el.style.display = "none"; el.style.pointerEvents = "none"; } } } function run() { installErrorLogging(); installSafeGlobals(); applyCssFixes(); removeBadConsentScripts(); hideLeftPrivacyBadge(); } if (document.readyState === "loading") { document.addEventListener("DOMContentLoaded", run); } else { run(); } setInterval(run, 1000); })();