/* Icon set — minimal Lucide-style 1.5 stroke icons */ const Icons = { ArrowRight: (p) => ( ), ArrowUpRight: (p) => ( ), ArrowDown: (p) => ( ), ChevronDown: (p) => ( ), Workflow: (p) => ( ), Cpu: (p) => ( ), TrendingUp: (p) => ( ), ShieldCheck: (p) => ( ), Quote: (p) => ( ), /* Soluciones icons */ FileText: (p) => ( ), ShoppingCart: (p) => ( ), MessagesSquare: (p) => ( ), BarChart: (p) => ( ), /* Servicios icons */ Globe: (p) => ( ), Sparkles: (p) => ( ), /* Industry icons (Confiaron) */ Calculator: (p) => ( ), Truck: (p) => ( ), ShoppingBag: (p) => ( ), Briefcase: (p) => ( ), UserCheck: (p) => ( ), Factory: (p) => ( ), Clock: (p) => ( ), AlertTriangle: (p) => ( ), TrendingDown: (p) => ( ), Check: (p) => ( ), ChevronRight: (p) => ( ), AlertCircle: (p) => ( ), Wallet: (p) => ( ), Bot: (p) => ( ), MessageCircle: (p) => ( ), Layers: (p) => ( ), Package: (p) => ( ), Store: (p) => ( ), Archive: (p) => ( ), Database: (p) => ( ), FileSpreadsheet: (p) => ( ), Search: (p) => ( ), Send: (p) => ( ), BarChart3: (p) => ( ), ImageOff: (p) => ( ), Rocket: (p) => ( ), Palette: (p) => ( ), CodeTwo: (p) => ( ), Gauge: (p) => ( ), Smartphone: (p) => ( ), PenTool: (p) => ( ), MessageCircleOff: (p) => ( ), ListChecks: (p) => ( ), ZapOff: (p) => ( ), GitBranch: (p) => ( ), BookOpen: (p) => ( ), RefreshCw: (p) => ( ), Compass: (p) => ( ), Target: (p) => ( ), Megaphone: (p) => ( ), Lock: (p) => ( ), Linkedin: (p) => ( ), Twitter: (p) => ( ), Github: (p) => ( ), WhatsApp: (p) => ( ), }; /* String name → component lookup for data-driven content */ function iconFromName(name) { const map = { 'file-text': Icons.FileText, 'alert-circle': Icons.AlertCircle, 'alert-triangle': Icons.AlertTriangle, 'wallet': Icons.Wallet, 'clock': Icons.Clock, 'workflow': Icons.Workflow, 'bot': Icons.Bot, 'message-circle': Icons.MessageCircle, 'message-square': Icons.MessagesSquare, 'shopping-cart': Icons.ShoppingCart, 'store': Icons.Store, 'package': Icons.Package, 'layers': Icons.Layers, 'archive': Icons.Archive, 'bar-chart': Icons.BarChart, 'bar-chart-3': Icons.BarChart3, 'database': Icons.Database, 'truck': Icons.Truck, 'briefcase': Icons.Briefcase, 'shopping-bag': Icons.ShoppingBag, 'user-check': Icons.UserCheck, 'factory': Icons.Factory, 'shield-check': Icons.ShieldCheck, 'cpu': Icons.Cpu, 'trending-up': Icons.TrendingUp, 'trending-down': Icons.TrendingDown, 'check': Icons.Check, 'file-spreadsheet': Icons.FileSpreadsheet, 'search': Icons.Search, 'send': Icons.Send, 'globe': Icons.Globe, 'sparkles': Icons.Sparkles, 'image-off': Icons.ImageOff, 'rocket': Icons.Rocket, 'palette': Icons.Palette, 'code-2': Icons.CodeTwo, 'gauge': Icons.Gauge, 'smartphone': Icons.Smartphone, 'pen-tool': Icons.PenTool, 'message-circle-off': Icons.MessageCircleOff, 'list-checks': Icons.ListChecks, 'zap-off': Icons.ZapOff, 'git-branch': Icons.GitBranch, 'book-open': Icons.BookOpen, 'refresh-cw': Icons.RefreshCw, 'lock': Icons.Lock, 'compass': Icons.Compass, 'target': Icons.Target, 'megaphone': Icons.Megaphone, }; return map[name] || Icons.Workflow; } window.iconFromName = iconFromName; /* ---------- Wordmark: "Geish" + aurora gradient on "ia" ---------- Measures the "ia" tspan after mount so the gradient lines up regardless of fontSize/fontWeight/letterSpacing. Shared across all pages — declared globally on window. */ let __wordmarkSeq = 0; const Wordmark = ({ fontSize = 17, color = '#FAFAFA', fontWeight = 510, letterSpacing = -0.3, }) => { const idRef = React.useRef(null); if (idRef.current === null) idRef.current = `aurora-wm-${++__wordmarkSeq}`; const iaRef = React.useRef(null); const [coords, setCoords] = React.useState({ x1: fontSize * 2.7, x2: fontSize * 3.65, w: fontSize * 4.0, }); React.useEffect(() => { if (!iaRef.current) return; try { const b = iaRef.current.getBBox(); setCoords({ x1: b.x, x2: b.x + b.width, w: b.x + b.width }); } catch (_) { /* ignore */ } }, [fontSize, fontWeight, letterSpacing]); const h = Math.ceil(fontSize * 1.25); return ( Geish ia ); }; window.Wordmark = Wordmark; window.Icons = Icons;