// Lightweight inline SVG icons (Lucide-style — original strokes)
const I = (paths, opts = {}) => function Icon(p) {
  return React.createElement('svg', {
    viewBox: '0 0 24 24',
    fill: 'none',
    stroke: 'currentColor',
    strokeWidth: opts.sw || 1.75,
    strokeLinecap: 'round',
    strokeLinejoin: 'round',
    ...p
  }, paths.map((d, i) => React.createElement(d.tag || 'path', { key: i, ...d.props })));
};

const p = (d, props = {}) => ({ tag: 'path', props: { d, ...props } });
const c = (cx, cy, r, props = {}) => ({ tag: 'circle', props: { cx, cy, r, ...props } });
const r = (props) => ({ tag: 'rect', props });
const l = (x1, y1, x2, y2, props = {}) => ({ tag: 'line', props: { x1, y1, x2, y2, ...props } });

window.Icons = {
  Home: I([p('M3 11.5 12 4l9 7.5'), p('M5 10v10h14V10')]),
  FileText: I([p('M14 3H7a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V8z'), p('M14 3v5h5'), l(9, 13, 15, 13), l(9, 17, 13, 17)]),
  Users: I([p('M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2'), c(9, 7, 4), p('M22 21v-2a4 4 0 0 0-3-3.87'), p('M16 3.13a4 4 0 0 1 0 7.75')]),
  Building: I([r({ x: 4, y: 3, width: 16, height: 18, rx: 1 }), l(9, 8, 9, 8), l(15, 8, 15, 8), l(9, 12, 9, 12), l(15, 12, 15, 12), l(9, 16, 9, 16), l(15, 16, 15, 16), p('M10 21v-4h4v4')]),
  Bell: I([p('M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9'), p('M10.3 21a1.94 1.94 0 0 0 3.4 0')]),
  Book: I([p('M4 19.5A2.5 2.5 0 0 1 6.5 17H20'), p('M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z')]),
  Folder: I([p('M3 7a2 2 0 0 1 2-2h4l2 2h8a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z')]),
  Server: I([r({ x: 3, y: 4, width: 18, height: 7, rx: 1 }), r({ x: 3, y: 13, width: 18, height: 7, rx: 1 }), l(7, 7.5, 7.01, 7.5), l(7, 16.5, 7.01, 16.5)]),
  Kanban: I([r({ x: 3, y: 3, width: 18, height: 18, rx: 2 }), l(9, 7, 9, 13), l(15, 7, 15, 17)]),
  Chat: I([p('M21 11.5a8.38 8.38 0 0 1-.9 3.8 8.5 8.5 0 0 1-7.6 4.7 8.38 8.38 0 0 1-3.8-.9L3 21l1.9-5.7a8.38 8.38 0 0 1-.9-3.8 8.5 8.5 0 0 1 4.7-7.6 8.38 8.38 0 0 1 3.8-.9h.5a8.48 8.48 0 0 1 8 8z')]),
  Megaphone: I([p('M3 11v3a1 1 0 0 0 1 1h2l3.5 4.5a1 1 0 0 0 1.7-.7V5.2a1 1 0 0 0-1.7-.7L6 9H4a1 1 0 0 0-1 1z'), p('M14 8a4 4 0 0 1 0 9'), p('M19 5a8 8 0 0 1 0 15')]),
  Settings: I([p('M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.5a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z'), c(12, 12, 3)]),
  User: I([p('M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2'), c(12, 7, 4)]),
  Search: I([c(11, 11, 7), l(21, 21, 16.65, 16.65)]),
  ChevronLeft: I([p('M15 18l-6-6 6-6')]),
  ChevronRight: I([p('M9 18l6-6-6-6')]),
  ChevronDown: I([p('M6 9l6 6 6-6')]),
  Plus: I([l(12, 5, 12, 19), l(5, 12, 19, 12)]),
  Filter: I([p('M22 3H2l8 9.46V19l4 2v-8.54L22 3z')]),
  Download: I([p('M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4'), p('M7 10l5 5 5-5'), l(12, 15, 12, 3)]),
  ArrowUp: I([l(12, 19, 12, 5), p('M5 12l7-7 7 7')]),
  ArrowDown: I([l(12, 5, 12, 19), p('M19 12l-7 7-7-7')]),
  TrendUp: I([p('M3 17l6-6 4 4 8-8'), p('M14 7h7v7')]),
  Wallet: I([p('M21 12V7a2 2 0 0 0-2-2H5a2 2 0 0 0 0 4h14a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V7'), c(17, 13, 1.5)]),
  Check: I([p('M20 6L9 17l-5-5')]),
  Clock: I([c(12, 12, 9), p('M12 7v5l3 2')]),
  AlertTriangle: I([p('M10.3 3.86a2 2 0 0 1 3.4 0l8.4 14.27A2 2 0 0 1 20.4 21H3.6a2 2 0 0 1-1.7-2.87z'), l(12, 9, 12, 13), l(12, 17, 12.01, 17)]),
  Info: I([c(12, 12, 9), l(12, 16, 12, 12), l(12, 8, 12.01, 8)]),
  Sparkles: I([p('M12 3l1.9 4.5L18 9.5l-4.1 2L12 16l-1.9-4.5L6 9.5l4.1-2z'), p('M19 14l.7 2L21 16.7 19 17.4 18.3 19 17 17.4 15 16.7 17 16z'), p('M5 4l.6 1.5L7 6l-1.4.6L5 8l-.6-1.4L3 6l1.4-.5z')]),
  Zap: I([p('M13 2L3 14h9l-1 8 10-12h-9l1-8z')]),
  Globe: I([c(12, 12, 9), l(3, 12, 21, 12), p('M12 3a14 14 0 0 1 0 18'), p('M12 3a14 14 0 0 0 0 18')]),
  Key: I([p('M21 2l-2 2'), p('M14.5 7.5l4 4-9 9-4-4z'), c(7, 17, 0.5), p('M21 2l-9 9 4 4 9-9z')]),
  Mail: I([r({ x: 2, y: 4, width: 20, height: 16, rx: 2 }), p('M2 6l10 7 10-7')]),
  Lock: I([r({ x: 4, y: 11, width: 16, height: 10, rx: 2 }), p('M8 11V7a4 4 0 0 1 8 0v4')]),
  Plug: I([p('M12 22v-5'), p('M9 7V2'), p('M15 7V2'), p('M5 12h14v3a5 5 0 0 1-5 5h-4a5 5 0 0 1-5-5z')]),
  CreditCard: I([r({ x: 2, y: 5, width: 20, height: 14, rx: 2 }), l(2, 10, 22, 10)]),
  X: I([l(18, 6, 6, 18), l(6, 6, 18, 18)]),
  ArrowRight: I([l(5, 12, 19, 12), p('M12 5l7 7-7 7')]),
  PanelLeft: I([r({ x: 3, y: 3, width: 18, height: 18, rx: 2 }), l(9, 3, 9, 21)]),
  PanelRight: I([r({ x: 3, y: 3, width: 18, height: 18, rx: 2 }), l(15, 3, 15, 21)]),
  PanelLeftClose: I([r({ x: 3, y: 3, width: 18, height: 18, rx: 2 }), l(9, 3, 9, 21), p('M16 9l-3 3 3 3')]),
  MoreHorizontal: I([c(12, 12, 1), c(19, 12, 1), c(5, 12, 1)]),
  Sun: I([c(12, 12, 4), l(12, 2, 12, 4), l(12, 20, 12, 22), l(2, 12, 4, 12), l(20, 12, 22, 12), l(4.93, 4.93, 6.34, 6.34), l(17.66, 17.66, 19.07, 19.07), l(4.93, 19.07, 6.34, 17.66), l(17.66, 6.34, 19.07, 4.93)]),
  Moon: I([p('M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z')]),
  Edit: I([p('M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7'), p('M18.5 2.5a2.12 2.12 0 0 1 3 3L12 15l-4 1 1-4z')]),
  Copy: I([r({ x: 9, y: 9, width: 13, height: 13, rx: 2 }), p('M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1')]),
  Eye: I([p('M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z'), c(12, 12, 3)]),
  EyeOff: I([p('M9.88 9.88a3 3 0 1 0 4.24 4.24'), p('M10.73 5.08A10.43 10.43 0 0 1 12 5c7 0 11 8 11 8a13.16 13.16 0 0 1-1.67 2.68'), p('M6.61 6.61A13.526 13.526 0 0 0 1 13s4 8 11 8a9.74 9.74 0 0 0 5.39-1.61'), l(2, 2, 22, 22)]),
  LogOut: I([p('M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4'), p('M16 17l5-5-5-5'), l(21, 12, 9, 12)]),
  Trash: I([p('M3 6h18'), p('M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2'), l(10, 11, 10, 17), l(14, 11, 14, 17)]),
  Star: I([p('M12 2l3 7h7l-5.5 4.5L18 21l-6-4-6 4 1.5-7.5L2 9h7z')]),
  Calendar: I([r({ x: 3, y: 4, width: 18, height: 18, rx: 2 }), l(16, 2, 16, 6), l(8, 2, 8, 6), l(3, 10, 21, 10)]),
  Archive: I([r({ x: 2, y: 3, width: 20, height: 5, rx: 1 }), p('M4 8v11a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8'), l(10, 12, 14, 12)]),
  ArchiveRestore: I([r({ x: 2, y: 3, width: 20, height: 5, rx: 1 }), p('M4 8v11a2 2 0 0 0 2 2h6'), p('M16 21l4-4-4-4'), l(20, 17, 12, 17)]),
  CheckSquare: I([r({ x: 3, y: 3, width: 18, height: 18, rx: 2 }), p('M9 12l2 2 4-4')]),
  Hash: I([l(4, 9, 20, 9), l(4, 15, 20, 15), l(10, 3, 8, 21), l(16, 3, 14, 21)]),
  Undo: I([
    // Curved "back" arrow — left-pointing arrowhead with a tail curving down-right.
    p('M9 14 4 9l5-5'),
    p('M4 9h10a6 6 0 0 1 0 12h-3'),
  ]),
  Brain: I([
    p('M12 5a3 3 0 1 0-5.997.125 4 4 0 0 0-2.526 5.77 4 4 0 0 0 .556 6.588A4 4 0 1 0 12 18Z'),
    p('M12 5a3 3 0 1 1 5.997.125 4 4 0 0 1 2.526 5.77 4 4 0 0 1-.556 6.588A4 4 0 1 1 12 18Z'),
    p('M15 13a4.5 4.5 0 0 1-3-4 4.5 4.5 0 0 1-3 4'),
    p('M17.6 6.5a3 3 0 0 0 .4-1.375'),
    p('M6 5.125A3 3 0 0 0 6.4 6.5'),
    p('M3.5 10.9a4 4 0 0 1 .585-.396'),
    p('M19.94 10.5a4 4 0 0 1 .585.396'),
    p('M6 18a4 4 0 0 1-1.967-.516'),
    p('M19.97 17.484A4 4 0 0 1 18 18'),
  ]),

  // File-format icons (storage). All share the same outer file silhouette as
  // FileText so they read as "files" at a glance, with a distinctive interior
  // glyph for the format. Database is the only one with a different silhouette
  // (cylinder) since .db/.sqlite don't really feel like "documents".
  FileImage: I([p('M14 3H7a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V8z'), p('M14 3v5h5'), c(9, 13, 1), p('m17 18-3-3-2 2-2-2-3 3')]),
  FileVideo: I([p('M14 3H7a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V8z'), p('M14 3v5h5'), p('m10 14 5 3-5 3z')]),
  FileAudio: I([p('M14 3H7a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V8z'), p('M14 3v5h5'), p('M9 18v-5l5-1v5'), c(8, 18, 1.2), c(13, 17, 1.2)]),
  FileArchive: I([p('M14 3H7a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V8z'), p('M14 3v5h5'), l(10, 9, 10, 10), l(10, 11, 10, 12), l(10, 13, 10, 14), c(10, 17, 1.5)]),
  FileCode: I([p('M14 3H7a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V8z'), p('M14 3v5h5'), p('m10 14-2 2 2 2'), p('m14 14 2 2-2 2')]),
  FileSpreadsheet: I([p('M14 3H7a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V8z'), p('M14 3v5h5'), l(7, 13, 17, 13), l(7, 17, 17, 17), l(12, 10, 12, 19)]),
  FilePresentation: I([p('M14 3H7a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V8z'), p('M14 3v5h5'), l(7, 18.5, 17, 18.5), l(8, 18.5, 8, 15), l(12, 18.5, 12, 12), l(16, 18.5, 16, 14)]),
  FilePdf: I([p('M14 3H7a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V8z'), p('M14 3v5h5'), l(8, 13, 13, 13), l(8, 16, 13, 16), p('M16 12v7l-1.5-1.5L13 19v-7z')]),
  FileTerminal: I([p('M14 3H7a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V8z'), p('M14 3v5h5'), p('m8 13 3 2-3 2'), l(12, 17, 16, 17)]),
  FileFont: I([p('M14 3H7a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V8z'), p('M14 3v5h5'), l(9, 12, 9, 19), l(9, 12, 15, 12), l(9, 15, 13, 15)]),
  FileBook: I([p('M14 3H7a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V8z'), p('M14 3v5h5'), r({ x: 8, y: 12, width: 8, height: 6, rx: 1 }), l(12, 12, 12, 18)]),
  FileBox: I([p('M14 3H7a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V8z'), p('M14 3v5h5'), p('M12 11l4 2v4l-4 2-4-2v-4z'), p('M8 13l4 2 4-2'), l(12, 15, 12, 19)]),
  Database: I([p('M21 5c0 1.66-4 3-9 3s-9-1.34-9-3 4-3 9-3 9 1.34 9 3z'), p('M3 5v6c0 1.66 4 3 9 3s9-1.34 9-3V5'), p('M3 11v6c0 1.66 4 3 9 3s9-1.34 9-3v-6')]),
};
