// Curated stroke icon set. All 18x18, currentColor strokes.
const Ic = ({ d, size=18, stroke=1.6, fill="none", children, ...rest }) => (
  <svg width={size} height={size} viewBox="0 0 24 24" fill={fill} stroke="currentColor"
    strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round" {...rest}>
    {d ? <path d={d}/> : children}
  </svg>
);

const Icon = {
  home:   p => <Ic {...p}><path d="M3 11l9-7 9 7"/><path d="M5 10v10h14V10"/></Ic>,
  cart:   p => <Ic {...p}><circle cx="9" cy="20" r="1.2"/><circle cx="17" cy="20" r="1.2"/><path d="M3 4h2l2.4 12.2a2 2 0 002 1.6h7.7a2 2 0 002-1.5L21 8H6"/></Ic>,
  sale:   p => <Ic {...p}><path d="M4 7h16M4 12h16M4 17h10"/><circle cx="18" cy="17" r="2"/></Ic>,
  pos:    p => <Ic {...p}><rect x="3" y="4" width="18" height="14" rx="2"/><path d="M3 9h18M7 13h3M14 13h3"/></Ic>,
  box:    p => <Ic {...p}><path d="M3 7l9-4 9 4-9 4-9-4z"/><path d="M3 7v10l9 4 9-4V7"/><path d="M12 11v10"/></Ic>,
  fish:   p => <Ic {...p}><path d="M3 12c3-5 9-7 14-5 1 2 2 4 2 5s-1 3-2 5c-5 2-11 0-14-5z"/><circle cx="15" cy="11" r="0.8" fill="currentColor"/><path d="M3 12l-1-2M3 12l-1 2"/></Ic>,
  plant:  p => <Ic {...p}><path d="M12 21v-7"/><path d="M12 14c-4 0-6-3-6-7 4 0 6 3 6 7z"/><path d="M12 14c4 0 6-3 6-7-4 0-6 3-6 7z"/></Ic>,
  tank:   p => <Ic {...p}><rect x="3" y="6" width="18" height="13" rx="2"/><path d="M3 11c3 1 6-1 9 0s6-1 9 0"/></Ic>,
  truck:  p => <Ic {...p}><path d="M3 7h11v8H3z"/><path d="M14 10h4l3 3v2h-7"/><circle cx="7" cy="17" r="1.5"/><circle cx="17" cy="17" r="1.5"/></Ic>,
  buy:    p => <Ic {...p}><path d="M4 5h16l-1.5 9H6.5z"/><path d="M6 14l-1 4h14"/></Ic>,
  death:  p => <Ic {...p}><path d="M12 3l9 9-9 9-9-9z"/><path d="M9 12h6M12 9v6"/></Ic>,
  bookmark:p => <Ic {...p}><path d="M6 3h12v18l-6-4-6 4z"/></Ic>,
  invoice:p => <Ic {...p}><path d="M5 3h11l3 3v15H5z"/><path d="M8 9h8M8 13h8M8 17h5"/></Ic>,
  user:   p => <Ic {...p}><circle cx="12" cy="8" r="4"/><path d="M4 21c1-4 4-6 8-6s7 2 8 6"/></Ic>,
  users:  p => <Ic {...p}><circle cx="9" cy="9" r="3.5"/><circle cx="17" cy="10" r="2.5"/><path d="M2 20c1-3 3-5 7-5s6 2 7 5"/><path d="M15 20c.5-2 2-3 4-3s3 .5 4 2"/></Ic>,
  crown:  p => <Ic {...p}><path d="M3 8l4 5 5-8 5 8 4-5v10H3z"/></Ic>,
  money:  p => <Ic {...p}><rect x="3" y="6" width="18" height="12" rx="2"/><circle cx="12" cy="12" r="2.5"/><path d="M6 9v6M18 9v6"/></Ic>,
  chart:  p => <Ic {...p}><path d="M4 20V8M10 20V4M16 20v-9M22 20H2"/></Ic>,
  spark:  p => <Ic {...p}><path d="M12 3l2 5 5 2-5 2-2 5-2-5-5-2 5-2z"/></Ic>,
  shield: p => <Ic {...p}><path d="M12 3l8 3v6c0 5-3 8-8 9-5-1-8-4-8-9V6z"/></Ic>,
  cog:    p => <Ic {...p}><circle cx="12" cy="12" r="3"/><path d="M19 12a7 7 0 00-.1-1.2l2-1.6-2-3.4-2.4.8a7 7 0 00-2-1.2L14 3h-4l-.5 2.4a7 7 0 00-2 1.2l-2.4-.8-2 3.4 2 1.6a7 7 0 000 2.4l-2 1.6 2 3.4 2.4-.8a7 7 0 002 1.2L10 21h4l.5-2.4a7 7 0 002-1.2l2.4.8 2-3.4-2-1.6c0-.4.1-.8.1-1.2z"/></Ic>,
  log:    p => <Ic {...p}><path d="M4 4h16v16H4z"/><path d="M8 8h8M8 12h8M8 16h5"/></Ic>,
  search: p => <Ic {...p}><circle cx="11" cy="11" r="7"/><path d="M20 20l-4-4"/></Ic>,
  bell:   p => <Ic {...p}><path d="M6 8a6 6 0 1112 0v5l2 3H4l2-3z"/><path d="M10 19a2 2 0 004 0"/></Ic>,
  alert:  p => <Ic {...p}><path d="M12 3l10 18H2z"/><path d="M12 10v5M12 18h.01"/></Ic>,
  chevron:p => <Ic {...p}><path d="M9 6l6 6-6 6"/></Ic>,
  chevDown:p => <Ic {...p}><path d="M6 9l6 6 6-6"/></Ic>,
  collapse:p=> <Ic {...p}><path d="M4 6h16M4 12h10M4 18h16"/></Ic>,
  plus:   p => <Ic {...p}><path d="M12 5v14M5 12h14"/></Ic>,
  minus:  p => <Ic {...p}><path d="M5 12h14"/></Ic>,
  x:      p => <Ic {...p}><path d="M6 6l12 12M18 6L6 18"/></Ic>,
  check:  p => <Ic {...p}><path d="M5 12l5 5 9-11"/></Ic>,
  arrowUp:p => <Ic {...p}><path d="M12 19V5M5 12l7-7 7 7"/></Ic>,
  arrowDown:p => <Ic {...p}><path d="M12 5v14M5 12l7 7 7-7"/></Ic>,
  arrowRight:p=> <Ic {...p}><path d="M5 12h14M13 5l7 7-7 7"/></Ic>,
  filter: p => <Ic {...p}><path d="M3 5h18l-7 9v6l-4-2v-4z"/></Ic>,
  export: p => <Ic {...p}><path d="M12 16V4M7 9l5-5 5 5"/><path d="M5 20h14"/></Ic>,
  print:  p => <Ic {...p}><path d="M6 9V3h12v6"/><rect x="3" y="9" width="18" height="8" rx="2"/><path d="M6 17h12v4H6z"/></Ic>,
  scan:   p => <Ic {...p}><path d="M3 7V4h4M21 7V4h-4M3 17v3h4M21 17v3h-4"/><path d="M7 12h10"/></Ic>,
  card:   p => <Ic {...p}><rect x="3" y="6" width="18" height="12" rx="2"/><path d="M3 10h18"/></Ic>,
  cash:   p => <Ic {...p}><rect x="3" y="6" width="18" height="12" rx="2"/><circle cx="12" cy="12" r="2.5"/></Ic>,
  more:   p => <Ic {...p}><circle cx="5" cy="12" r="1.5" fill="currentColor"/><circle cx="12" cy="12" r="1.5" fill="currentColor"/><circle cx="19" cy="12" r="1.5" fill="currentColor"/></Ic>,
  edit:   p => <Ic {...p}><path d="M4 20h4l10-10-4-4L4 16z"/><path d="M14 6l4 4"/></Ic>,
  trash:  p => <Ic {...p}><path d="M4 7h16M9 7V4h6v3M6 7l1 13h10l1-13"/></Ic>,
  eye:    p => <Ic {...p}><path d="M2 12s4-7 10-7 10 7 10 7-4 7-10 7-10-7-10-7z"/><circle cx="12" cy="12" r="3"/></Ic>,
  link:   p => <Ic {...p}><path d="M10 14a4 4 0 005.7 0l3-3a4 4 0 00-5.7-5.7L11 7"/><path d="M14 10a4 4 0 00-5.7 0l-3 3a4 4 0 005.7 5.7L13 17"/></Ic>,
  qr:     p => <Ic {...p}><rect x="3" y="3" width="7" height="7"/><rect x="14" y="3" width="7" height="7"/><rect x="3" y="14" width="7" height="7"/><path d="M14 14h3v3M21 14v3M14 18v3h3M21 21h-2"/></Ic>,
  globe:  p => <Ic {...p}><circle cx="12" cy="12" r="9"/><path d="M3 12h18M12 3c2.5 3 4 6 4 9s-1.5 6-4 9c-2.5-3-4-6-4-9s1.5-6 4-9z"/></Ic>,
  thermo: p => <Ic {...p}><path d="M14 4a2 2 0 10-4 0v10a4 4 0 104 0z"/></Ic>,
  drop:   p => <Ic {...p}><path d="M12 3c4 5 6 8 6 11a6 6 0 11-12 0c0-3 2-6 6-11z"/></Ic>,
  doc:    p => <Ic {...p}><path d="M6 3h9l4 4v14H6z"/><path d="M14 3v5h5"/></Ic>,
  filePdf:p => <Ic {...p}><path d="M6 3h9l4 4v14H6z"/><path d="M14 3v5h5"/><path d="M8 14h2v4M12 14h1a1.5 1.5 0 010 3h-1v1M16 14h2M16 14v4M16 16h1.5"/></Ic>,
  loc:    p => <Ic {...p}><path d="M12 21s7-7 7-12a7 7 0 10-14 0c0 5 7 12 7 12z"/><circle cx="12" cy="9" r="2.5"/></Ic>,
  star:   p => <Ic {...p}><path d="M12 3l3 6 6 .9-4.5 4.3 1.1 6.3L12 17.5 6.4 20.5 7.5 14.2 3 10l6-.9z"/></Ic>,
  pause:  p => <Ic {...p}><rect x="6" y="4" width="4" height="16"/><rect x="14" y="4" width="4" height="16"/></Ic>,
  play:   p => <Ic {...p}><path d="M6 4l14 8-14 8z"/></Ic>,
  refresh:p=> <Ic {...p}><path d="M21 12a9 9 0 01-15 6.7M3 12a9 9 0 0115-6.7"/><path d="M21 4v5h-5M3 20v-5h5"/></Ic>,
  flag:   p => <Ic {...p}><path d="M5 21V4M5 4h12l-2 4 2 4H5"/></Ic>,
  sun:    p => <Ic {...p}><circle cx="12" cy="12" r="4"/><path d="M12 2v3M12 19v3M2 12h3M19 12h3M4.5 4.5l2 2M17.5 17.5l2 2M19.5 4.5l-2 2M6.5 17.5l-2 2"/></Ic>,
  moon:   p => <Ic {...p}><path d="M20 14a8 8 0 11-9-11 7 7 0 009 11z"/></Ic>,
  gift:   p => <Ic {...p}><rect x="3" y="9" width="18" height="12" rx="2"/><path d="M3 13h18M12 9v12M8 9a3 3 0 010-6c2 0 4 6 4 6s-2 0-4 0zM16 9a3 3 0 000-6c-2 0-4 6-4 6s2 0 4 0z"/></Ic>,
  hamster:p => <Ic {...p}><ellipse cx="12" cy="13" rx="8" ry="6"/><circle cx="6.5" cy="9" r="2"/><circle cx="17.5" cy="9" r="2"/><circle cx="9.5" cy="12" r="0.7" fill="currentColor"/><circle cx="14.5" cy="12" r="0.7" fill="currentColor"/><path d="M11 15h2"/></Ic>,
  rabbit: p => <Ic {...p}><ellipse cx="12" cy="15" rx="7" ry="5"/><path d="M8 12C8 7 9 4 10 4s1 4 1 7M16 12c0-5-1-8-2-8s-1 4-1 7"/><circle cx="10" cy="14" r="0.7" fill="currentColor"/><circle cx="14" cy="14" r="0.7" fill="currentColor"/></Ic>,
  dog:    p => <Ic {...p}><path d="M4 9l1-3 3 1 1 2M20 9l-1-3-3 1-1 2"/><path d="M5 10c0 6 3 10 7 10s7-4 7-10"/><circle cx="9" cy="13" r="0.8" fill="currentColor"/><circle cx="15" cy="13" r="0.8" fill="currentColor"/><path d="M11 16c.5.4 1.5.4 2 0"/></Ic>,
  cat:    p => <Ic {...p}><path d="M4 8l2-4 2 4M20 8l-2-4-2 4"/><path d="M4 10c0 6 4 10 8 10s8-4 8-10"/><circle cx="9.5" cy="13" r="0.8" fill="currentColor"/><circle cx="14.5" cy="13" r="0.8" fill="currentColor"/><path d="M9 16h6"/></Ic>,
  bug:    p => <Ic {...p}><ellipse cx="12" cy="13" rx="5" ry="7"/><path d="M7 9l-3-2M7 13H4M7 17l-3 2M17 9l3-2M17 13h3M17 17l3 2M12 6V3"/></Ic>,
  flask:  p => <Ic {...p}><path d="M9 3h6M10 3v6l-5 9a2 2 0 002 3h10a2 2 0 002-3l-5-9V3"/><path d="M7 14h10"/></Ic>,
  tool:   p => <Ic {...p}><path d="M14 7a4 4 0 015 5l-9 9-5-5 9-9z"/><path d="M3 21l3-3M13 12l3 3"/></Ic>,
  speak:  p => <Ic {...p}><path d="M4 5h12a3 3 0 013 3v6a3 3 0 01-3 3H8l-4 3z"/><path d="M8 10h6M8 13h4"/></Ic>,
  trophy: p => <Ic {...p}><path d="M6 4h12v6a6 6 0 11-12 0z"/><path d="M6 7H3v3h3M18 7h3v3h-3M9 19h6M12 16v3"/></Ic>,
  ticket: p => <Ic {...p}><path d="M3 9a2 2 0 002-2V5h14v2a2 2 0 000 4v6H5v-6a2 2 0 00-2-2z" fill="none"/><path d="M9 5v14M14 8l-4 8"/></Ic>,
  qrShort:p => <Ic {...p}><rect x="3" y="3" width="7" height="7"/><rect x="14" y="3" width="7" height="7"/><rect x="3" y="14" width="7" height="7"/></Ic>,
  tag:    p => <Ic {...p}><path d="M20 7l-8-4-8 4v10l8 4 8-4z"/><path d="M12 3v18M3.3 7l8.7 4 8.7-4"/></Ic>,
  store:  p => <Ic {...p}><path d="M3 9l2-5h14l2 5"/><path d="M3 9a3 3 0 006 0 3 3 0 006 0 3 3 0 006 0"/><path d="M5 9v12h14V9"/><path d="M10 21v-6h4v6"/></Ic>,
  image:  p => <Ic {...p}><rect x="3" y="3" width="18" height="18" rx="2"/><circle cx="8.5" cy="8.5" r="1.5"/><path d="M21 15l-5-5L5 21"/></Ic>,
  camera: p => <Ic {...p}><path d="M23 19a2 2 0 01-2 2H3a2 2 0 01-2-2V8a2 2 0 012-2h4l2-3h6l2 3h4a2 2 0 012 2z"/><circle cx="12" cy="13" r="4"/></Ic>,
};

window.Icon = Icon;
