// Shared components: icons, brand mark, formatters const { useState, useEffect, useRef, useMemo } = React; /* ---------- ICONS ---------- */ function Icon({ name, size = 18, stroke = 1.6, ...rest }) { const s = size; const common = { width: s, height: s, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: stroke, strokeLinecap: "round", strokeLinejoin: "round", ...rest }; switch (name) { case "arrow-right": return ( ); case "arrow-up-right": return ( ); case "arrow-down": return ( ); case "check": return ( ); case "phone": return ( ); case "whatsapp": return ( ); case "map-pin": return ( ); case "clock": return ( ); case "mail": return ( ); case "shield": return ( ); case "shield-check": return ( ); case "zap": return ( ); case "spark": return ( ); case "wallet": return ( ); case "users": return ( ); case "calendar": return ( ); case "doc": return ( ); case "car": return ( ); case "key": return ( ); case "building": return ( ); case "star": return ( ); case "instagram": return ( ); case "facebook": return ( ); case "linkedin": return ( ); default: return null; } } /* ---------- BRAND MARK (echoes logo: 2x2 squares in brand colors) ---------- */ function BrandMark({ size = 32, gap = 2 }) { const cell = (size - gap) / 2; return ( ); } function Wordmark({ size = 22, withSub = true }) { return ( SUMAFIN {withSub && SOLUCIONES FINANCIERAS} ); } /* ---------- FORMATTERS ---------- */ const fmtMXN = (n) => "$" + Math.round(n).toLocaleString("es-MX"); Object.assign(window, { Icon, BrandMark, Wordmark, fmtMXN });