// icons.jsx — Lucide-style line icons (24x24, stroke). Single consistent family.
const ICON_PATHS = {
  home: 'M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z|M9 22V12h6v10',
  dashboard: 'M3 4a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v5a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1z|M13 4a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v3a1 1 0 0 1-1 1h-6a1 1 0 0 1-1-1z|M13 12a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v8a1 1 0 0 1-1 1h-6a1 1 0 0 1-1-1z|M3 15a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v5a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1z',
  package: 'M7.5 4.27l9 5.15|M21 8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16Z|M3.3 7l8.7 5 8.7-5|M12 22V12',
  calendar: 'M8 2v4|M16 2v4|M3 10h18|M5 4h14a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2z',
  store: 'M2 7l2-4h16l2 4|M4 7v13a1 1 0 0 0 1 1h14a1 1 0 0 0 1-1V7|M2 7h20|M9 21v-6h6v6',
  settings: 'M12 15a3 3 0 1 0 0-6 3 3 0 0 0 0 6z|M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 1 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-4 0v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 1 1-2.83-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1 0-4h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 1 1 2.83-2.83l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 1 1 2.83 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1z',
  plus: 'M12 5v14|M5 12h14',
  search: 'M11 19a8 8 0 1 0 0-16 8 8 0 0 0 0 16z|M21 21l-4.3-4.3',
  check: 'M20 6L9 17l-5-5',
  checkCheck: 'M18 6L7 17l-5-5|M22 10l-7.5 7.5L13 16',
  skip: 'M5 4l10 8-10 8V4z|M19 5v14',
  eye: 'M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7-10-7-10-7z|M12 15a3 3 0 1 0 0-6 3 3 0 0 0 0 6z',
  bell: 'M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9|M10.3 21a1.94 1.94 0 0 0 3.4 0',
  chevronR: 'M9 18l6-6-6-6',
  chevronD: 'M6 9l6 6 6-6',
  chevronL: 'M15 18l-6-6 6-6',
  x: 'M18 6L6 18|M6 6l12 12',
  user: 'M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2|M12 11a4 4 0 1 0 0-8 4 4 0 0 0 0 8z',
  external: 'M15 3h6v6|M10 14L21 3|M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6',
  refresh: 'M3 12a9 9 0 0 1 15-6.7L21 8|M21 3v5h-5|M21 12a9 9 0 0 1-15 6.7L3 16|M3 21v-5h5',
  image: 'M5 3h14a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z|M8.5 11a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3z|M21 15l-5-5L5 21',
  clock: 'M12 21a9 9 0 1 0 0-18 9 9 0 0 0 0 18z|M12 7v5l3 2',
  alert: 'M10.3 3.9L1.8 18a2 2 0 0 0 1.7 3h17a2 2 0 0 0 1.7-3L13.7 3.9a2 2 0 0 0-3.4 0z|M12 9v4|M12 17h.01',
  zap: 'M13 2L3 14h9l-1 8 10-12h-9l1-8z',
  filter: 'M22 3H2l8 9.46V19l4 2v-8.54L22 3z',
  sort: 'M3 16l4 4 4-4|M7 20V4|M11 8l4-4 4 4|M15 4v16',
  dots: 'M12 13a1 1 0 1 0 0-2 1 1 0 0 0 0 2z|M12 6a1 1 0 1 0 0-2 1 1 0 0 0 0 2z|M12 20a1 1 0 1 0 0-2 1 1 0 0 0 0 2z',
  pause: 'M6 4h4v16H6z|M14 4h4v16h-4z',
  play: 'M6 4l14 8-14 8V4z',
  trash: 'M3 6h18|M8 6V4a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v2|M19 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6|M10 11v6|M14 11v6',
  edit: 'M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7|M18.5 2.5a2.1 2.1 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z',
  send: 'M22 2L11 13|M22 2l-7 20-4-9-9-4 20-7z',
  upload: 'M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4|M17 8l-5-5-5 5|M12 3v12',
  moon: 'M21 12.8A9 9 0 1 1 11.2 3a7 7 0 0 0 9.8 9.8z',
  sun: 'M12 17a5 5 0 1 0 0-10 5 5 0 0 0 0 10z|M12 1v2|M12 21v2|M4.2 4.2l1.4 1.4|M18.4 18.4l1.4 1.4|M1 12h2|M21 12h2|M4.2 19.8l1.4-1.4|M18.4 5.6l1.4-1.4',
  menu: 'M4 6h16|M4 12h16|M4 18h16',
  sliders: 'M4 21v-7|M4 10V3|M12 21v-9|M12 8V3|M20 21v-5|M20 12V3|M1 14h6|M9 8h6|M17 16h6',
  tag: 'M20.6 13.4L13.4 20.6a2 2 0 0 1-2.8 0l-7.2-7.2A2 2 0 0 1 2.8 12V4a1 1 0 0 1 1-1h8a2 2 0 0 1 1.4.6l7.4 7.4a2 2 0 0 1 0 2.8z|M7 7h.01',
  trending: 'M23 6l-9.5 9.5-5-5L1 18|M17 6h6v6',
  facebook: 'M18 2h-3a5 5 0 0 0-5 5v3H7v4h3v8h4v-8h3l1-4h-4V7a1 1 0 0 1 1-1h3z',
  globe: 'M12 21a9 9 0 1 0 0-18 9 9 0 0 0 0 18z|M3 12h18|M12 3a14 14 0 0 1 0 18 14 14 0 0 1 0-18z',
  checkCircle: 'M12 21a9 9 0 1 0 0-18 9 9 0 0 0 0 18z|M9 12l2 2 4-4',
  xCircle: 'M12 21a9 9 0 1 0 0-18 9 9 0 0 0 0 18z|M15 9l-6 6|M9 9l6 6',
  loader: 'M12 2v4|M12 18v4|M4.9 4.9l2.8 2.8|M16.3 16.3l2.8 2.8|M2 12h4|M18 12h4|M4.9 19.1l2.8-2.8|M16.3 7.7l2.8-2.8',
  panelLeft: 'M3 5h18a0 0 0 0 1 0 0v14a0 0 0 0 1 0 0H3a0 0 0 0 1 0 0V5a0 0 0 0 1 0 0z|M9 4v16',
  list: 'M8 6h13|M8 12h13|M8 18h13|M3 6h.01|M3 12h.01|M3 18h.01',
  grid: 'M4 4h7v7H4z|M13 4h7v7h-7z|M13 13h7v7h-7z|M4 13h7v7H4z',
  mail: 'M4 4h16a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2z|M22 7l-10 6L2 7',
  lock: 'M5 11h14a2 2 0 0 1 2 2v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-7a2 2 0 0 1 2-2z|M7 11V7a5 5 0 0 1 10 0v4',
  arrowR: 'M5 12h14|M12 5l7 7-7 7',
  arrowL: 'M19 12H5|M12 19l-7-7 7-7',
  copy: 'M9 9h11a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2v-9a2 2 0 0 1 2-2z|M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1',
  download: 'M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4|M7 10l5 5 5-5|M12 15V3',
  yen: 'M12 3l-5 8h10l-5-8z|M12 11v10|M8 15h8|M8 18h8',
  database: 'M12 8c4.4 0 8-1.3 8-3s-3.6-3-8-3-8 1.3-8 3 3.6 3 8 3z|M4 5v6c0 1.7 3.6 3 8 3s8-1.3 8-3V5|M4 11v6c0 1.7 3.6 3 8 3s8-1.3 8-3v-6',
  telegram: 'M22 3L2 10l6 2.5L18 6l-7 8.5V21l3.5-4 4.5 2L22 3z',
  sparkle: 'M12 3l1.9 5.6L19.5 10l-5.6 1.9L12 17l-1.9-5.1L4.5 10l5.6-1.4L12 3z',
  scan: 'M3 7V5a2 2 0 0 1 2-2h2|M17 3h2a2 2 0 0 1 2 2v2|M21 17v2a2 2 0 0 1-2 2h-2|M7 21H5a2 2 0 0 1-2-2v-2|M7 12h10',
  layers: 'M12 2l9 5-9 5-9-5 9-5z|M3 12l9 5 9-5|M3 17l9 5 9-5',
  rotate: 'M3 12a9 9 0 1 0 9-9 9 9 0 0 0-6.4 2.6L3 8|M3 3v5h5',
  maximize: 'M8 3H5a2 2 0 0 0-2 2v3|M21 8V5a2 2 0 0 0-2-2h-3|M3 16v3a2 2 0 0 0 2 2h3|M16 21h3a2 2 0 0 0 2-2v-3',
  inbox: 'M22 12h-6l-2 3h-4l-2-3H2|M5.5 5h13a2 2 0 0 1 1.8 1.1L22 12v6a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2v-6L3.7 6.1A2 2 0 0 1 5.5 5z',
  megaphone: 'M3 11v4a1 1 0 0 0 1 1h2l3 4V6L6 10H4a1 1 0 0 0-1 1z|M9 6v12l10 4V2L9 6z|M21 9v6',
  gallery: 'M3 5h14a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V7a2 2 0 0 1 2-2z|M21 3H7|M23 5v14|M7 11a2 2 0 1 0 0-4 2 2 0 0 0 0 4z|M19 17l-5-5L3 19',
  instagram: 'M6 2h12a4 4 0 0 1 4 4v12a4 4 0 0 1-4 4H6a4 4 0 0 1-4-4V6a4 4 0 0 1 4-4z|M12 16a4 4 0 1 0 0-8 4 4 0 0 0 0 8z|M17.5 6.5h.01',
  video: 'M23 7l-7 5 7 5V7z|M3 5h11a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V7a2 2 0 0 1 2-2z',
  wand: 'M15 4V2|M15 16v-2|M8 9h2|M20 9h2|M17.8 11.8L19 13|M15 9h.01|M17.8 6.2L19 5|M3 21l9-9|M12.2 6.2L11 5',
  palette: 'M12 22a10 10 0 1 1 0-20 8 8 0 0 1 8 8 4 4 0 0 1-4 4h-2a2 2 0 0 0-1 4 2 2 0 0 1-1 4z|M7 13a1 1 0 1 0 0-2 1 1 0 0 0 0 2z|M10 8a1 1 0 1 0 0-2 1 1 0 0 0 0 2z|M15 8a1 1 0 1 0 0-2 1 1 0 0 0 0 2z',
  key: 'M21 2l-9.6 9.6|M15.5 7.5l4 4L22 9l-4-4|M7.5 14.5a4 4 0 1 0 0 6 4 4 0 0 0 0-6z',
  archive: 'M21 8v13H3V8|M1 3h22v5H1z|M10 12h4',
  barChart: 'M3 3v18h18|M7 16V8|M12 16V4|M17 16v-6',
  target: 'M12 21a9 9 0 1 0 0-18 9 9 0 0 0 0 18z|M12 18a6 6 0 1 0 0-12 6 6 0 0 0 0 12z|M12 15a3 3 0 1 0 0-6 3 3 0 0 0 0 6z',
  save: 'M19 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11l5 5v11a2 2 0 0 1-2 2z|M17 21v-8H7v8|M7 3v5h8',
  paintbrush: 'M18.4 2.6a2.1 2.1 0 0 1 3 3L12 15l-4 1 1-4 9.4-9.4z|M11 13l-2 2-3 3-4 1 1-4 3-3 2-2',
  thermometer: 'M14 14.76V3.5a2.5 2.5 0 0 0-5 0v11.26a4 4 0 1 0 5 0z',
  pieChart: 'M21.2 15.9A10 10 0 1 1 8 2.8|M22 12A10 10 0 0 0 12 2v10z',
  star: 'M12 2l3 7h7l-6 5 2 8-6-4-6 4 2-8-6-5h7z',
  flag: 'M4 22V4a1 1 0 0 1 1-1h14l-3 6 3 6H5v7|M4 15h0',
  beaker: 'M6 2h12|M9 2v6L3 19a2 2 0 0 0 2 3h14a2 2 0 0 0 2-3L15 8V2|M9 14h6',
  trend: 'M23 6l-9.5 9.5-5-5L1 18|M17 6h6v6',
  notepad: 'M19 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h7l7 7v9a2 2 0 0 1-2 2z|M14 3v6h6|M8 13h6|M8 17h6',
  bot: 'M12 8V4H8|M16 4H12|M12 8V4|M2 13h2|M20 13h2|M20 8a2 2 0 0 1 2 2v6a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2v-6a2 2 0 0 1 2-2zm-3 5a1 1 0 1 0 0 2 1 1 0 0 0 0-2zm-10 0a1 1 0 1 0 0 2 1 1 0 0 0 0-2z',
  shield: 'M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z|M9 12l2 2 4-4',
  truck: 'M1 3h15v13H1z|M16 8h4l3 3v5h-7|M5.5 21a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5z|M18.5 21a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5z',
  history: 'M3 12a9 9 0 1 0 3.2-6.9L3 8|M3 3v5h5|M12 7v5l3 2',
  swatches: 'M3 3h8v8H3z|M13 3h8v8h-8z|M3 13h8v8H3z|M13 13h8v8h-8z',
  type: 'M4 7V4h16v3|M9 20h6|M12 4v16',
  ban: 'M12 21a9 9 0 1 0 0-18 9 9 0 0 0 0 18z|M5.6 5.6l12.8 12.8',
  scale: 'M12 3v18|M5 8h14|M5 8l-3 6c0 2 1.5 3 3 3s3-1 3-3l-3-6z|M19 8l-3 6c0 2 1.5 3 3 3s3-1 3-3l-3-6z',
  link: 'M10 13a5 5 0 0 0 7 0l3-3a5 5 0 0 0-7-7l-2 2|M14 11a5 5 0 0 0-7 0l-3 3a5 5 0 0 0 7 7l2-2',
  rocket: 'M4.5 16.5L3 21l4.5-1.5|M5 12l8-8 5 5-8 8|M14 6l4 4|M9 18l3 3|M11 16l3 3|M20 12l3-3|M16 8l3-3',
};

function Icon({ name, size = 18, stroke = 2, className = '', style = {} }) {
  const d = ICON_PATHS[name];
  if (!d) return null;
  const parts = d.split('|');
  return (
    <svg className={'icon ' + className} width={size} height={size} viewBox="0 0 24 24"
         fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round"
         strokeLinejoin="round" style={{ flexShrink: 0, ...style }} aria-hidden="true">
      {parts.map((p, i) => <path key={i} d={p} />)}
    </svg>
  );
}

Object.assign(window, { Icon, ICON_PATHS });
