/* ========================================================== YAPPY. — shared UI primitives ========================================================== */ /* ---------- Icons: 3px stroke, round caps, forest only ---------- */ const ICON_PATHS = { leaf: <>, person: <>, target: <>, explore: <>, consult: <>, decision: <>, box: <>, shield: <>, lock: <>, doc: <>, support: <>, factory: <>, calendar: <>, clock: <>, arrow: <>, back: <>, plus: <>, close: <>, menu: <>, bag: <>, user: <>, check: <>, alert: <>, pause: <>, mail: <>, }; function Icon({ name, size = 24, stroke = 3, style, className }) { return ( = 32 ? (stroke * 24) / size : 2.3} strokeLinecap="round" strokeLinejoin="round" style={style} className={className} aria-hidden="true">{ICON_PATHS[name]} ); } /* ---------- Logo: supplied artwork only. Never retyped. ---------- */ function Logo({ variant = 'forest', width = 150, onClick, label = 'Yappy — home' }) { const src = variant === 'cream' ? 'assets/logo-cream.png' : variant === 'mono' ? 'assets/logo-mono.png' : 'assets/logo-forest.png'; // clear space = 1x full-stop diameter (≈ 6.2% of wordmark width) const pad = Math.round(width * 0.062); return ( YAPPY. ); } function Greenrise({ variant = 'cream', width = 64 }) { return Greenrise Pharma; } /* ---------- Brand line (always in this form) ---------- */ function BrandLine({ dark = false, size = 14, style }) { return (
The world is loud. Find your quiet.
); } /* ---------- Flowing shape: one per panel, bleeds off edge ---------- */ const FLOW_PATHS = { a: 'M420 0 C 320 120 470 260 360 380 C 260 490 330 620 500 700 L 700 700 L 700 0 Z', b: 'M0 520 C 160 430 260 560 400 500 C 540 440 600 330 700 360 L 700 700 L 0 700 Z', c: 'M700 120 C 540 160 520 300 600 400 C 680 500 560 620 420 700 L 700 700 Z', d: 'M260 0 C 200 180 380 240 360 400 C 340 560 160 600 220 700 L 700 700 L 700 0 Z', e: 'M0 0 L 380 0 C 300 140 420 220 340 360 C 260 500 120 520 0 640 Z', }; function Flow({ shape = 'a', color, style, className }) { return ( ); } /* ---------- Full stop motif (max one per layout) ---------- */ function FullStop({ size = 120, style }) { return