// OMNIX ยท Primitivos UI compartidos (fondo blanco)
// Container, Eyebrow, Rule, Button, Badge, SectionMeta
const Container = ({ children, narrow = false, className = '', style = {} }) => (
{children}
);
const Eyebrow = ({ children, color, style = {} }) => (
{children}
);
const Rule = ({ dark = false, width = 48, style = {} }) => (
);
const Button = ({ variant = 'primary', children, icon, iconLeft, href, onClick, style = {}, dark = false, as }) => {
const base = {
fontFamily: 'var(--font-body)',
fontWeight: 600,
fontSize: 15,
padding: '13px 22px',
borderRadius: 4,
border: '1.5px solid transparent',
cursor: 'pointer',
display: 'inline-flex',
alignItems: 'center',
gap: 8,
letterSpacing: '-0.005em',
transition: 'all 160ms cubic-bezier(0.2, 0.7, 0.2, 1)',
textDecoration: 'none',
lineHeight: 1,
whiteSpace: 'nowrap',
};
const variants = {
primary: {
background: '#F4024C',
color: '#FFFFFF',
boxShadow: '0 8px 24px rgba(244,2,76,0.25)',
},
secondary: {
background: dark ? '#FFFFFF' : '#1E1F26',
color: dark ? '#1E1F26' : '#FFFFFF',
},
ghost: {
background: 'transparent',
color: dark ? '#FFFFFF' : '#1E1F26',
borderColor: dark ? '#2E3140' : '#1E1F26',
},
outline: {
background: 'transparent',
color: '#1E1F26',
borderColor: '#C7CFDA',
}
};
const props = {
style: { ...base, ...variants[variant], ...style },
onClick,
onMouseEnter: (e) => {
if (variant === 'primary') e.currentTarget.style.background = '#B00238';
if (variant === 'ghost' && !dark) e.currentTarget.style.background = '#1E1F26', e.currentTarget.style.color = '#FFF';
if (variant === 'ghost' && dark) e.currentTarget.style.background = '#FFF', e.currentTarget.style.color = '#000';
if (variant === 'outline') e.currentTarget.style.borderColor = '#1E1F26';
},
onMouseLeave: (e) => {
Object.assign(e.currentTarget.style, { ...base, ...variants[variant], ...style });
},
};
const content = (
<>
{iconLeft && }
{children}
{icon && }
>
);
if (href) return {content};
return ;
};
const Badge = ({ children, tone = 'ink', style = {} }) => {
const tones = {
ink: { background: '#1E1F26', color: '#FFFFFF' },
fuxia: { background: '#FFE5EC', color: '#B00238' },
blue: { background: '#E6EEFB', color: '#003B8C' },
outline: { background: 'transparent', color: '#52557A', border: '1px solid #C7CFDA' },
'outline-dark': { background: 'transparent', color: '#96A3B5', border: '1px solid #2E3140' },
success: { background: '#E3F2E9', color: '#0F5132' },
warning: { background: '#FBF3D9', color: '#B8860B' },
ghost: { background: '#F2F5F9', color: '#52557A' },
};
return (
{children}
);
};
// Section number + label header helper
const SectionMeta = ({ n, label, color = '#F4024C', dark = false, style = {} }) => (
{n}
{label}
);
// Editorial pill for "[VALIDAR]" metric footnotes
const ValidateMark = () => (
*
);
Object.assign(window, { Container, Eyebrow, Rule, Button, Badge, SectionMeta, ValidateMark });