/* 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 }) => {ICONS[name]} ; // ───── 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 ( Brotek); }; Object.assign(window, { Eyebrow, Btn, Icon, GlassCard, Light, Sticker, Logo });