/* global React */
const { useState, useEffect } = React;
// ───── Eyebrow ─────
const Eyebrow = ({ children, color = 'var(--fg-muted)' }) =>
{children}
;
// ───── Btn ─────
const Btn = ({ children, variant = 'primary', icon, onClick, href, size = 'md', target, rel }) => {
const base = {
display: 'inline-flex', alignItems: 'center', gap: 8, cursor: 'pointer',
fontFamily: 'var(--font-body)', fontWeight: 500, fontSize: size === 'lg' ? 16 : 14,
padding: size === 'lg' ? '15px 28px' : '12px 22px',
borderRadius: 999, border: 0, transition: 'all .18s cubic-bezier(.16,1,.3,1)',
textDecoration: 'none', whiteSpace: 'nowrap'
};
const styles = {
primary: { ...base, background: 'var(--brotek-magenta)', color: '#fff' },
ghost: { ...base, background: 'transparent', color: 'var(--fg)', border: '1px solid rgba(255,255,255,.18)' },
text: { ...base, background: 'transparent', color: 'var(--fg)', padding: '8px 0' },
glass: { ...base, background: 'linear-gradient(160deg,rgba(255,255,255,.10),rgba(255,255,255,.03))',
color: 'var(--fg)', border: '1px solid rgba(255,255,255,.14)', backdropFilter: 'blur(12px)' }
};
const Tag = href ? 'a' : 'button';
const [hover, setHover] = useState(false);
const hoverStyle = hover ?
variant === 'primary' ? { background: '#FF1A9E', boxShadow: '0 0 60px rgba(236,0,140,.4)' } :
variant === 'ghost' ? { borderColor: 'rgba(255,255,255,.4)' } :
{} :
{};
return (
setHover(true)} onMouseLeave={() => setHover(false)}
style={{ ...styles[variant], ...hoverStyle }}>
{children}
{icon && }
);
};
// ───── Icon (Feather-style) ─────
const ICONS = {
'arrow-right': <>>,
'arrow-up-right': <>>,
'check': ,
'x': <>>,
'shield': ,
'zap': ,
'lock': <>>,
'alert': <>>,
'trending': <>>,
'users': <>>,
'message': ,
'plus': <>>,
'minus': ,
'calendar': <>>,
'menu': <>>,
'search': <>>,
'cpu': <>>,
'eye': <>>,
'code': <>>,
'globe': <>>,
'linkedin': <>>,
'youtube': <>>,
'instagram': <>>,
'twitter':
};
const Icon = ({ name, size = 20, color = 'currentColor', strokeWidth = 2 }) =>
;
// ───── GlassCard ─────
const GlassCard = ({ children, style, glow, radius = 24, hover = true }) => {
const [h, setH] = useState(false);
const glowMap = {
magenta: 'rgba(236,0,140,.35)', violet: 'rgba(163,53,231,.30)',
green: 'rgba(53,231,71,.25)', blue: 'rgba(53,81,231,.30)',
cyan: 'rgba(53,231,199,.25)', orange: 'rgba(251,136,29,.25)',
red: 'rgba(236,77,42,.30)'
};
return (
setH(true)} onMouseLeave={() => setH(false)}
style={{
background: 'linear-gradient(160deg,rgba(255,255,255,.08),rgba(255,255,255,.02))',
border: `1px solid rgba(255,255,255,${h && hover ? .18 : .10})`,
backdropFilter: 'blur(24px)', WebkitBackdropFilter: 'blur(24px)',
borderRadius: radius, padding: 28,
transition: 'all .24s cubic-bezier(.16,1,.3,1)',
transform: h && hover ? 'translateY(-2px)' : 'none',
boxShadow: glow ? `inset 0 0 60px ${glowMap[glow] || glowMap.magenta}` : 'none',
...style
}}>
{children}
);
};
// ───── Light (radial color blur) ─────
const Light = ({ color = '#EC008C', size = 800, opacity = 0.5, top, left, right, bottom, blur = 80 }) =>
;
// ───── Sticker (decorative service tag) ─────
const Sticker = ({ color = '#EC008C', label, size = 110, rotate = -8, sublabel }) =>
{/* perforation hole */}
{sublabel || 'BROTEK·SVC'}
{label}
;
// ───── Logo ─────
// Uses the official Brotek PNG logos provided by the brand team.
// variant: 'full' (wordmark) | 'iso' (isotype). theme: 'white' (for dark bg) | 'black'.
const Logo = ({ height = 28, variant = 'full', theme = 'white' }) => {
// Resolve asset path: pages in nested folders (servicios/ or blog/) need ../ prefix; root pages don't.
const prefix = (window.location.pathname.includes('/servicios/') || window.location.pathname.includes('/blog/')) ? '../' : '';
const src = variant === 'iso' ?
`${prefix}assets/logos/brotek-isotype-${theme}.png` :
`${prefix}assets/logos/brotek-logo-${theme}.png`;
return (
);
};
Object.assign(window, { Eyebrow, Btn, Icon, GlassCard, Light, Sticker, Logo });