// Top-level chrome — viewport switcher, page selector, header, footer
function Icon({ name, size = 18, stroke = 1.6 }) {
const paths = {
search: <> >,
user: <> >,
bag: <> >,
heart: ,
heartFill: ,
menu: <> >,
close: <> >,
chevR: ,
chevD: ,
chevL: ,
arrR: <> >,
arrUR: <> >,
plus: <> >,
minus: ,
check: ,
star: ,
starFill: ,
chat: <> >,
spark: <> >,
leaf: <> >,
moon: ,
shield: ,
flame: <> >,
brain: <> >,
sun: <> >,
desktop: <> >,
tablet: <> >,
mobile: <> >,
};
return (
{paths[name]}
);
};
const Logo = ({ small }) => (
nkherbal.
est. 2008 · andheri, mumbai
);
// Top fixed chrome
function TopChrome({ viewport, setViewport, page, setPage, theme, toggleTheme }) {
const pages = [
'Home', 'Shop', 'Product', 'Cart', 'Checkout', 'About', 'Ingredients', 'Journal', 'Contact', 'Account'
];
return (
nkherbal redesign · v1
setPage(e.target.value)}>
{pages.map(p => {p} )}
{[
{ v: 'desktop', i: 'desktop', l: 'Desktop' },
{ v: 'tablet', i: 'tablet', l: 'Tablet' },
{ v: 'mobile', i: 'mobile', l: 'Mobile' },
].map(o => (
setViewport(o.v)} title={o.l}>
{o.l}
))}
);
};
// Site header (inside the viewport)
function Header({ vp, page, goto, openCart, openSearch, cartCount, openQuiz }) {
const [mobileNav, setMobileNav] = React.useState(false);
const [scrolled, setScrolled] = React.useState(false);
const isMobile = vp === 'mobile';
React.useEffect(() => {
const el = document.querySelector('.viewport');
if (!el) return;
const onScroll = () => setScrolled(el.scrollTop > 60);
el.addEventListener('scroll', onScroll, { passive: true });
return () => el.removeEventListener('scroll', onScroll);
}, []);
const isHome = page === 'Home';
const headerBg = (isHome && !scrolled) ? 'transparent' : 'var(--bg)';
const headerShadow = (!isHome || scrolled) ? '0 1px 20px rgba(0,0,0,0.07)' : 'none';
const isTablet = vp === 'tablet';
const navItems = [
{ id: 'Shop', label: 'Shop' },
{ id: 'Ingredients', label: 'Ingredients' },
{ id: 'About', label: 'Our Story' },
{ id: 'Journal', label: 'Journal' },
{ id: 'Contact', label: 'Contact' },
];
return (
{/* announcement bar */}
{[0,1].map(i => (
{[
'FREE SHIPPING ACROSS INDIA',
'USE CODE SAVE499 · SAVE ₹499 ON EVERY ORDER',
'FSSAI APPROVED · ISO 9001-2015',
'COLD-PROCESSED · NO PRESERVATIVES',
'FREE SHIPPING ACROSS INDIA',
'USE CODE SAVE499 · SAVE ₹499 ON EVERY ORDER',
'FSSAI APPROVED · ISO 9001-2015',
'COLD-PROCESSED · NO PRESERVATIVES',
].map((text, j) => (
{text}
✦
))}
))}
goto('Home')} style={{ textAlign: 'left' }}>
{!isMobile && (
{navItems.map(n => (
goto(n.id)} className="nav-link" data-active={page === n.id ? 'true' : 'false'} style={{ fontSize: 14, fontWeight: 450, color: page === n.id ? 'var(--primary)' : 'var(--ink-2)', paddingBottom: 4, transition: 'color 0.2s', whiteSpace: 'nowrap' }}>
{n.label}
))}
)}
{!isMobile && !isTablet && (
Find my paste
)}
{!isMobile && goto('Account')} aria-label="Account"> }
{cartCount > 0 && {cartCount} }
{isMobile && (
setMobileNav(o => !o)} aria-label="Menu" style={{ display: 'flex', flexDirection: 'column', gap: 4, padding: 8, alignItems: 'center', justifyContent: 'center' }}>
)}
{mobileNav && (
setMobileNav(false)}>
{navItems.map(n => (
{ goto(n.id); setMobileNav(false); }} style={{ textAlign: 'left', padding: '20px 0', fontSize: 28, fontWeight: 500, letterSpacing: '-0.03em', borderBottom: '1px solid var(--line-soft)' }}>{n.label}
))}
{ openQuiz(); setMobileNav(false); }}> Find my paste
{ goto('Account'); setMobileNav(false); }}>My account
)}
);
};
// Footer
function Footer({ vp, goto }) {
const isMobile = vp === 'mobile';
return (
{/* big mark */}
nkherbal.
Stay close
One thoughtful letter a month. Sourcing diaries, recipes, and quiet recommendations.
Shop
{['All pastes', 'Muejaza For Men', 'Shahi Kalp', 'Kashmiri Shilajit', 'Testo-Vardhak', 'Combo'].map(x => (
goto('Shop')} className="footer-link" style={{ textAlign: 'left', fontSize: 14, opacity: 0.85 }}>{x}
))}
House
{[['Our story','About'], ['Ingredients','Ingredients'], ['Journal','Journal'], ['Wholesale','Contact'], ['Press kit','Contact']].map(([l,p]) => (
goto(p)} className="footer-link" style={{ textAlign: 'left', fontSize: 14, opacity: 0.85 }}>{l}
))}
Care
{[['Track order','Contact'], ['Shipping','Contact'], ['Returns','Contact'], ['FAQs','Contact'], ['Contact','Contact'], ['+91 80 4567 8901','Contact']].map(([l,p]) => (
goto(p)} className="footer-link" style={{ textAlign: 'left', fontSize: 14, opacity: 0.85 }}>{l}
))}
© 2026 nkherbal · all paste, no filler
{window.CERTS.map(c => (
{c}
))}
);
};
window.Icon = Icon;
window.Logo = Logo;
window.TopChrome = TopChrome;
window.Header = Header;
window.Footer = Footer;