const { useState, useEffect } = React; const NavDropdown = ({ label, items, href }) => { const [isOpen, setIsOpen] = useState(false); return (
setIsOpen(true)} onMouseLeave={() => setIsOpen(false)}> {isOpen && (
{items.map((item, idx) => ( {item.label} ))}
)}
); }; const MegaDropdown = ({ label, columns, href }) => { const [isOpen, setIsOpen] = useState(false); return (
setIsOpen(true)} onMouseLeave={() => setIsOpen(false)} > {isOpen && (
Browse
Learn about kava & kratom, the industry, and the association.
{columns.map((col, i) => (
{col.heading}
{col.items.map((item, j) => ( {item.label} ))}
))}
)}
); }; const Button = ({ children, variant = 'primary', className = '', onClick }) => { const base = "px-8 py-3 rounded-full font-bold transition-all duration-300 flex items-center justify-center gap-2 transform hover:scale-105"; const variants = { primary: "bg-clay-500 text-white hover:bg-clay-600 shadow-[0_0_40px_-10px_rgba(192,108,75,0.5)]", forest: "bg-forest-800 text-white hover:bg-forest-900 shadow-md", gold: "bg-gold-500 text-forest-900 hover:bg-gold-600 shadow-md", outline: "bg-transparent border-2 border-white text-white hover:bg-white/10" }; return ; }; const Header = () => { const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false); return ( ); }; const Footer = () => { const [email, setEmail] = useState(''); const [status, setStatus] = useState('idle'); // idle, loading, success, error const [message, setMessage] = useState(''); const handleSubscribe = async (e) => { e.preventDefault(); if (!email) return; setStatus('loading'); setMessage(''); try { const res = await fetch('/backend/subscribe.php', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ email }) }); const data = await res.json(); if (res.ok && data.success) { setStatus('success'); setMessage(data.message || 'Subscribed successfully!'); setEmail(''); } else { setStatus('error'); setMessage(data.error || data.message || 'Something went wrong.'); } } catch (err) { setStatus('error'); setMessage('Connection failed. Please try again.'); } }; return ( ); }; const Hero = () => (
The Authority on Botanical Safety

The Unified Voice of the Kava and Kratom Retail Industry

Uniting the kava and kratom retail industry for science-based advocacy and sensible regulation.

); const WhyJoinSection = ({ showTitle = true }) => (
{showTitle &&

Why Join?

}
{[ { icon: '/assets/icons/why-join-unified-advocacy.svg', title: 'Unified Advocacy', body: 'Gain a powerful voice in regulatory discussions with lawmakers at local, state, and federal levels. Our collective representation amplifies your concerns and protects your business interests.' }, { icon: '/assets/icons/why-join-regulatory-resources.svg', title: 'Regulatory Resources', body: 'Access expert legal guidance on compliance issues, stay informed about regulatory changes, and receive support during legislative challenges that could impact your business.' }, { icon: '/assets/icons/why-join-industry-standards.svg', title: 'Industry Standards', body: 'Demonstrate your commitment to quality and safety by adopting our industry-leading best practices and standards that enhance consumer confidence and business reputation.' }, { icon: '/assets/icons/why-join-scientific-resources.svg', title: 'Scientific Resources', body: 'Gain exclusive access to peer-reviewed research, expert analyses, and educational materials that support product knowledge and informed customer conversations.' }, ].map((card, i) => (

{card.title}

{card.body}

))}
); const CampaignSlides = () => (
Organized Advocacy

Without organized advocacy, kratom faces the constant threat of blanket prohibition that ignores science, tradition, and the millions of Americans who depend on safe access to this botanical.

Join the Movement

Don’t stand on the sidelines

while the future of the industry is decided without you.

Your industry needs you, and KKRA makes sure you’re heard.

Become a Member Donate
); // Make components available globally window.NavDropdown = NavDropdown; window.MegaDropdown = MegaDropdown; window.Button = Button; window.Header = Header; window.Footer = Footer; window.Hero = Hero; window.WhyJoinSection = WhyJoinSection; window.CampaignSlides = CampaignSlides; // KKRA runtime config (override by setting these before components.jsx loads) window.KKRA_API_BASE = window.KKRA_API_BASE || '/api'; window.KKRA_ZEFFY = window.KKRA_ZEFFY || { // Fill these with real Zeffy embed links when available. // Example modal button attribute expects: https://www.zeffy.com/embed/ticketing/?modal=true individual_one_time_modal: '', individual_monthly_modal: '', business_standard_monthly_modal: '', business_standard_annual_modal: '', business_executive_annual_modal: '', };