/* ============================================================ AR — Bits.jsx · shared atoms (evolved) ============================================================ */ const Container = ({ children, style, className = '' }) => (
{children}
); const Eyebrow = ({ children, color = 'var(--ar-cyan)', style }) => (
{children}
); const GradText = ({ children, style }) => ( {children} ); const Chip = ({ children, icon, style }) => ( {icon && } {children} ); const Button = ({ children, variant = 'primary', size = 'md', onClick, type, style }) => { const base = { fontFamily: 'var(--ar-font-body)', fontWeight: 600, border: 'none', cursor: 'pointer', display: 'inline-flex', alignItems: 'center', justifyContent: 'center', gap: 8, position: 'relative', overflow: 'hidden', whiteSpace: 'nowrap', transition: 'transform 140ms var(--ar-ease), box-shadow 220ms, filter 220ms, background 220ms', }; const sizes = { sm: { padding: '9px 16px', fontSize: 13, borderRadius: 12 }, md: { padding: '13px 22px', fontSize: 15, borderRadius: 14 }, lg: { padding: '16px 28px', fontSize: 16, borderRadius: 16 }, }; const variants = { primary: { background: 'linear-gradient(135deg, #005EFF 0%, #00D4FF 100%)', color: '#fff', boxShadow: '0 0 28px rgba(0,94,255,0.32)' }, secondary: { background: 'rgba(255,255,255,0.02)', color: 'var(--ar-text-main)', border: '1px solid rgba(255,255,255,0.18)' }, ghost: { background: 'transparent', color: 'var(--ar-cyan)', padding: '8px 4px' }, }; return ( ); }; const IconTile = ({ icon, size = 52, accent = 'cyan' }) => { const ref = React.useRef(null); React.useEffect(() => { if (window.lucide && ref.current) window.lucide.createIcons(); }); const colors = { cyan: { bg: 'rgba(0,212,255,0.10)', bd: 'rgba(0,212,255,0.30)', stroke: '#00D4FF' }, blue: { bg: 'rgba(0,94,255,0.14)', bd: 'rgba(0,94,255,0.45)', stroke: '#7CB0FF' }, }[accent]; return (
); }; /* Card with optional pointer-tracking glow + lift */ const Card = ({ children, style, premium = false, hoverable = true, glow = true, onClick }) => { const [hover, setHover] = React.useState(false); const ref = React.useRef(null); const onMove = (e) => { if (!glow || !ref.current) return; const r = ref.current.getBoundingClientRect(); ref.current.style.setProperty('--mx', `${e.clientX - r.left}px`); ref.current.style.setProperty('--my', `${e.clientY - r.top}px`); }; return (
hoverable && setHover(true)} onMouseLeave={() => hoverable && setHover(false)} style={{ position: 'relative', overflow: 'hidden', background: premium ? 'linear-gradient(145deg, rgba(0,94,255,0.13), rgba(255,255,255,0.025))' : 'var(--ar-bg-card)', border: `1px solid ${hover ? 'rgba(0,94,255,0.45)' : 'rgba(255,255,255,0.10)'}`, borderRadius: 22, padding: 28, transition: 'border-color 220ms, transform 280ms var(--ar-ease), box-shadow 280ms', transform: hover ? 'translateY(-4px)' : 'none', boxShadow: hover ? '0 30px 70px -26px rgba(0,0,0,0.75), 0 0 0 1px rgba(0,94,255,0.22) inset' : '0 18px 48px -18px rgba(0,0,0,0.7), 0 0 0 1px rgba(255,255,255,0.04) inset', ...style, }} > {glow && (
)}
{children}
); }; /* Reveal — wraps children in a scroll-reveal node with optional stagger delay */ const Reveal = ({ children, delay = 0, style, as = 'div' }) => { const El = as; return {children}; }; /* Section header block */ const SectionHead = ({ eyebrow, title, sub, align = 'left', maxWidth = 720, style }) => (
{eyebrow}

{title}

{sub && (

{sub}

)}
); Object.assign(window, { Container, Eyebrow, GradText, Chip, Button, IconTile, Card, Reveal, SectionHead });