// Shared icon set + small atoms used across components
const Icon = {
Shield: (p) => (
),
Scale: (p) => (
),
Doc: (p) => (
),
Check: (p) => (
),
Book: (p) => (
),
Gavel: (p) => (
),
Cog: (p) => (
),
WhatsApp: (p) => (
),
Instagram: (p) => (
),
LinkedIn: (p) => (
),
Mail: (p) => (
),
Arrow: (p) => →,
};
// Reveal-on-scroll wrapper
function Reveal({ children, delay = 0, as: As = "div", className = "", ...rest }) {
const ref = React.useRef(null);
React.useEffect(() => {
const el = ref.current; if (!el) return;
const io = new IntersectionObserver((entries) => {
entries.forEach((e) => {
if (e.isIntersecting) {
setTimeout(() => el.classList.add("is-in"), delay);
io.unobserve(el);
}
});
}, { threshold: 0.12 });
io.observe(el);
return () => io.disconnect();
}, [delay]);
return {children};
}
const WHATSAPP_LINK = "#";
// Resolves an image: uses the bundled blob URL (window.__resources) when the
// page is a standalone export, otherwise falls back to the relative asset path
// used by the modular site/ source.
const ASSET = (id, path) => (typeof window !== "undefined" && window.__resources && window.__resources[id]) || path;
Object.assign(window, { Icon, Reveal, WHATSAPP_LINK, ASSET });