/* 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 (
);
};
window.Wordmark = Wordmark;
window.Icons = Icons;