Privacy Policy

Privacy Policy

 

This privacy notice discloses the privacy practices for (website address). This privacy notice applies solely to information collected by this website. It will notify you of the following:

  • What personally identifiable information is collected from you through the website, how it is used and with whom it may be shared.
  • What choices are available to you regarding the use of your data.
  • The security procedures in place to protect the misuse of your information.
  • How you can correct any inaccuracies in the information.

Information Collection, Use, and Sharing

We are the sole owners of the information collected on this site. We only have access to/collect information that you voluntarily give us via email or other direct contact from you. We will not sell or rent this information to anyone.

We will use your information to respond to you, regarding the reason you contacted us. We will not share your information with any third party outside of our organization, other than as necessary to fulfill your request, e.g. to ship an order.

Unless you ask us not to, we may contact you via email in the future to tell you about specials, new products or services, or changes to this privacy policy.

Your Access to and Control Over Information 

You may opt out of any future contacts from us at any time. You can do the following at any time by contacting us via the email address or phone number given on our website:

  • See what data we have about you, if any.
  • Change/correct any data we have about you.
  • Have us delete any data we have about you.
  • Express any concern you have about our use of your data.

Security

We take precautions to protect your information. When you submit sensitive information via the website, your information is protected both online and offline.

Wherever we collect sensitive information (such as credit card data), that information is encrypted and transmitted to us in a secure way. You can verify this by looking for a lock icon in the address bar and looking for "https" at the beginning of the address of the Web page.

While we use encryption to protect sensitive information transmitted online, we also protect your information offline. Only employees who need the information to perform a specific job (for example, billing or customer service) are granted access to personally identifiable information. The computers/servers in which we store personally identifiable information are kept in a secure environment.

If you feel that we are not abiding by this privacy policy, you should contact us immediately.

/** * H4KI — Givecloud exit-intent popup suppressor * * Hides the "Are you sure you want to leave without making a difference?" * modal that Givecloud's Giving Experience widget shows on exit intent. * * Detection is text-based (not class-based) because the widget is React + * Tailwind and its utility classes can change between Givecloud releases. * * Works whether it's loaded: * - inside a Givecloud-hosted page / the widget document itself * (Givecloud admin custom script section), or * - on the parent WordPress page (the embedded widget lives in a * same-origin iframe, so page JS can reach into it). * * Last verified against widget markup: Jul 2026. */ (function () { 'use strict'; // The phrase that identifies the exit-intent modal. var TRIGGER = /leave without making a difference/i; function dismiss(container, doc) { var target = deepestMatch(container); var overlay = fixedAncestor(target, doc) || container; if (overlay.__gcExitHidden) return; overlay.__gcExitHidden = true; // Hide immediately so the donor never sees a flash of the modal. overlay.style.setProperty('display', 'none', 'important'); // Then let the widget close itself via its own "Close" control so React // state, backdrop, and body scroll-lock are cleaned up properly. var controls = overlay.querySelectorAll('button, a, [role="button"]'); for (var i = 0; i < controls.length; i++) { if (/^\s*close\b/i.test(controls[i].textContent || '')) { try { controls[i].click(); } catch (e) { /* ignore */ } break; } } // Safety net: if the widget reuses this same DOM node for a *different* // modal later (e.g. a payment sheet), un-hide it so we never block a // legitimate dialog. var restore = setInterval(function () { if (!overlay.isConnected) { clearInterval(restore); return; } if (!TRIGGER.test(overlay.textContent || '')) { overlay.style.removeProperty('display'); overlay.__gcExitHidden = false; clearInterval(restore); } }, 500); } // Walk down to the innermost element still containing the trigger text. function deepestMatch(root) { var el = root, descend = true; while (descend) { descend = false; var kids = el.children || []; for (var i = 0; i < kids.length; i++) { if (TRIGGER.test(kids[i].textContent || '')) { el = kids[i]; descend = true; break; } } } return el; } // Climb back up to the position:fixed overlay that wraps the whole modal // (card + gray backdrop), so hiding it removes everything at once. function fixedAncestor(el, doc) { var win = doc.defaultView || window; while (el && el !== doc.body) { if (win.getComputedStyle(el).position === 'fixed') return el; el = el.parentElement; } return null; } function sweep(doc) { if (!doc.body || !TRIGGER.test(doc.body.textContent || '')) return; var kids = doc.body.children; for (var i = 0; i < kids.length; i++) { if (TRIGGER.test(kids[i].textContent || '')) dismiss(kids[i], doc); } } function watch(doc) { if (!doc || !doc.body || doc.__gcExitWatcher) return; doc.__gcExitWatcher = true; new MutationObserver(function () { sweep(doc); }) .observe(doc.body, { childList: true, subtree: true }); sweep(doc); // in case the modal is already showing } // Watch the document this script runs in… watch(document); // …and keep checking for same-origin iframes (the embedded widget on the // WordPress site). Re-runs every second because Givecloud creates — and can // rewrite — the widget iframe after page load, which discards observers. setInterval(function () { watch(document); var frames = document.querySelectorAll('iframe'); for (var i = 0; i < frames.length; i++) { try { watch(frames[i].contentDocument); } catch (e) { /* cross-origin */ } } }, 1000); })();