// Stelaah — line icon system (Lucide-style, 24x24 stroke)
const ICON_PATHS = {
  dashboard: 'M4 3h5a1 1 0 0 1 1 1v7a1 1 0 0 1 -1 1h-5a1 1 0 0 1 -1 -1v-7a1 1 0 0 1 1 -1zM15 3h5a1 1 0 0 1 1 1v3a1 1 0 0 1 -1 1h-5a1 1 0 0 1 -1 -1v-3a1 1 0 0 1 1 -1zM15 12h5a1 1 0 0 1 1 1v7a1 1 0 0 1 -1 1h-5a1 1 0 0 1 -1 -1v-7a1 1 0 0 1 1 -1zM4 16h5a1 1 0 0 1 1 1v3a1 1 0 0 1 -1 1h-5a1 1 0 0 1 -1 -1v-3a1 1 0 0 1 1 -1z',
  home: 'M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2zM9 22V12h6v10',
  circle: 'M2 12a10 10 0 1 0 20 0a10 10 0 1 0 -20 0',
  sliders: 'M4 21v-7M4 10V3M12 21v-9M12 8V3M20 21v-5M20 12V3M2 14h4M10 8h4M18 16h4',
  feed: 'M4 11a9 9 0 0 1 9 9M4 4a16 16 0 0 1 16 16M4 19a1 1 0 1 0 2 0a1 1 0 1 0 -2 0',
  activity: 'M22 12h-4l-3 9L9 3l-3 9H2',
  projects: 'M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83zM2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 12M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 17',
  tasks: 'M9 11l3 3L22 4M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11',
  checkCircle: 'M21.801 10A10 10 0 1 1 17 3.335M9 11l3 3L22 4',
  checkSquare: 'M9 11l3 3L20 5M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11',
  calendar: 'M5 4h14a2 2 0 0 1 2 2v14a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2v-14a2 2 0 0 1 2 -2zM16 2v4M8 2v4M3 10h18',
  planner: 'M4 4h16a1 1 0 0 1 1 1v2a1 1 0 0 1 -1 1h-16a1 1 0 0 1 -1 -1v-2a1 1 0 0 1 1 -1zM4 12h8a1 1 0 0 1 1 1v6a1 1 0 0 1 -1 1h-8a1 1 0 0 1 -1 -1v-6a1 1 0 0 1 1 -1zM17 12h3a1 1 0 0 1 1 1v6a1 1 0 0 1 -1 1h-3a1 1 0 0 1 -1 -1v-6a1 1 0 0 1 1 -1z',
  files: 'M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7zM14 2v4a2 2 0 0 0 2 2h4',
  file: 'M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7zM14 2v4a2 2 0 0 0 2 2h4',
  doc: 'M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7zM14 2v4a2 2 0 0 0 2 2h4M16 13H8M16 17H8M10 9H8',
  contract: 'M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7zM14 2v4a2 2 0 0 0 2 2h4M9 15l2 2 4-4',
  estimate: 'M8 2h8a2 2 0 0 1 2 2v18l-3-2-3 2-3-2-3 2V4a2 2 0 0 1 2-2zM9 7h6M9 11h6M9 15h4',
  code: 'M16 18l6-6-6-6M8 6l-6 6 6 6',
  folder: 'M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2z',
  docs: 'M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7zM14 2v4a2 2 0 0 0 2 2h4M16 13H8M16 17H8M10 9H8',
  chat: 'M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z',
  messages: 'M7.9 20A9 9 0 1 0 4 16.1L2 22z',
  clients: 'M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2M5 7a4 4 0 1 0 8 0a4 4 0 1 0 -8 0M22 21v-2a4 4 0 0 0-3-3.87M16 3.13a4 4 0 0 1 0 7.75',
  team: 'M18 21a8 8 0 0 0-16 0M5 8a5 5 0 1 0 10 0a5 5 0 1 0 -10 0M22 20c0-3.37-2-6.5-4-8a5 5 0 0 0-.45-8.3',
  user: 'M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2M8 7a4 4 0 1 0 8 0a4 4 0 1 0 -8 0',
  finance: 'M12 2v20M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6',
  invoice: 'M8 2h8a2 2 0 0 1 2 2v18l-3-2-3 2-3-2-3 2V4a2 2 0 0 1 2-2zM9 7h6M9 11h6M9 15h4',
  receipt: 'M5 2v20l2-1.2L9 22l2-1.2L13 22l2-1.2L17 22l2-1.2V2l-2 1.2L15 2l-2 1.2L11 2 9 3.2 7 2 5 3.2zM8 8h8M8 12h8M8 16h5',
  creditCard: 'M3 5h18a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V6a1 1 0 0 1 1-1zM2 10h20',
  wallet: 'M3 7a2 2 0 0 1 2-2h13a2 2 0 0 1 2 2v2H5a2 2 0 0 0 0 4h15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2zM16 13h6v-4h-6a2 2 0 0 0 0 4zM18 11h.01',
  info: 'M12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20M12 16v-4M12 8h.01',
  alertCircle: 'M12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20M12 8v4M12 16h.01',
  alert: 'M21.73 18l-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3zM12 9v4M12 17h.01',
  contracts: 'M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7zM14 2v4a2 2 0 0 0 2 2h4M9 15l2 2 4-4',
  clipboard: 'M9 2h6a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H9a1 1 0 0 1-1-1V3a1 1 0 0 1 1-1zM8 4H6a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2h-2M9 12l2 2 4-4',
  reports: 'M3 3v18h18M18 17V9M13 17V5M8 17v-3',
  performance: 'M16 7h6v6M22 7l-8.5 8.5-5-5L2 17',
  automations: 'M4 3h4a1 1 0 0 1 1 1v4a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1v-4a1 1 0 0 1 1 -1zM16 15h4a1 1 0 0 1 1 1v4a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1v-4a1 1 0 0 1 1 -1zM9 6h4a2 2 0 0 1 2 2v7',
  workflow: 'M3 3h5a1 1 0 0 1 1 1v5a1 1 0 0 1 -1 1h-5a1 1 0 0 1 -1 -1v-5a1 1 0 0 1 1 -1zM16 14h5a1 1 0 0 1 1 1v5a1 1 0 0 1 -1 1h-5a1 1 0 0 1 -1 -1v-5a1 1 0 0 1 1 -1zM9 6.5h4a2 2 0 0 1 2 2v6',
  workload: 'M12 14l4-4M3.34 19a10 10 0 1 1 17.32 0',
  social: 'M15 5a3 3 0 1 0 6 0a3 3 0 1 0 -6 0M3 12a3 3 0 1 0 6 0a3 3 0 1 0 -6 0M15 19a3 3 0 1 0 6 0a3 3 0 1 0 -6 0M8.59 13.51l6.83 3.98M15.41 6.51l-6.82 3.98',
  megaphone: 'M3 11l18-5v12L3 14v-3zM11.6 16.8a3 3 0 1 1-5.8-1.6',
  sparkles: 'M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .962 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.962 0zM20 3v4M22 5h-4M4 17v2M5 18H3',
  bot: 'M12 8V4H8M6 8h12a2 2 0 0 1 2 2v8a2 2 0 0 1 -2 2h-12a2 2 0 0 1 -2 -2v-8a2 2 0 0 1 2 -2zM2 14h2M20 14h2M15 13v2M9 13v2',
  orbit: 'M12 3a9 9 0 1 0 9 9M12 7a5 5 0 1 0 5 5M21 12h-8',
  userPlus: 'M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2M9 7a4 4 0 1 0 0 8a4 4 0 0 0 0-8M19 8v6M22 11h-6',
  note: 'M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7M18.375 2.625a1 1 0 0 1 3 3l-9.013 9.014a2 2 0 0 1-.853.505l-2.873.84a.5.5 0 0 1-.62-.62l.84-2.873a2 2 0 0 1 .506-.852z',
  settings: '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.51a2 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-2zM9 12a3 3 0 1 0 6 0a3 3 0 1 0 -6 0',
  search: 'M21 21l-4.35-4.35M11 19a8 8 0 1 0 0-16 8 8 0 0 0 0 16z',
  bell: 'M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9M10.268 21a2 2 0 0 0 3.464 0',
  bellOff: 'M10.268 21a2 2 0 0 0 3.464 0M17 17H4a1 1 0 0 1-.74-1.673C4.59 13.956 6 12.499 6 8a6 6 0 0 1 .258-1.742M8.668 3.01A6 6 0 0 1 18 8c0 2.687.77 4.653 1.707 6.05M2 2l20 20',
  plus: 'M5 12h14M12 5v14',
  chevDown: 'M6 9l6 6 6-6',
  chevUp: 'M6 15l6-6 6 6',
  chevRight: 'M9 18l6-6-6-6',
  chevLeft: 'M15 18l-6-6 6-6',
  arrowRight: 'M5 12h14M12 5l7 7-7 7',
  arrowUp: 'M12 19V5M5 12l7-7 7 7',
  arrowDown: 'M12 5v14M19 12l-7 7-7-7',
  minus: 'M5 12h14',
  arrowLeft: 'M19 12H5M12 19l-7-7 7-7',
  undo: 'M3 7v6h6M21 17a9 9 0 0 0-15-6.7L3 13',
  redo: 'M21 7v6h-6M3 17a9 9 0 0 1 15-6.7L21 13',
  trendUp: 'M16 7h6v6M22 7l-8.5 8.5-5-5L2 17',
  more: 'M11 12a1 1 0 1 0 2 0a1 1 0 1 0 -2 0M18 12a1 1 0 1 0 2 0a1 1 0 1 0 -2 0M4 12a1 1 0 1 0 2 0a1 1 0 1 0 -2 0',
  dots: 'M11 12a1 1 0 1 0 2 0a1 1 0 1 0 -2 0M18 12a1 1 0 1 0 2 0a1 1 0 1 0 -2 0M4 12a1 1 0 1 0 2 0a1 1 0 1 0 -2 0',
  command: 'M9 6a3 3 0 1 0-3 3h12a3 3 0 1 0-3-3v12a3 3 0 1 0 3-3H6a3 3 0 1 0 3 3z',
  square: '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',
  comment: 'M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z',
  chart: 'M3 3v18h18M18 17V9M13 17V5M8 17v-3',
  chevronRight: 'M9 18l6-6-6-6',
  select: 'M3 3l7.07 17 2.51-7.42L20 10.07z',
  grip: 'M8 6a1 1 0 1 0 2 0a1 1 0 1 0 -2 0M8 12a1 1 0 1 0 2 0a1 1 0 1 0 -2 0M8 18a1 1 0 1 0 2 0a1 1 0 1 0 -2 0M14 6a1 1 0 1 0 2 0a1 1 0 1 0 -2 0M14 12a1 1 0 1 0 2 0a1 1 0 1 0 -2 0M14 18a1 1 0 1 0 2 0a1 1 0 1 0 -2 0',
  cursor: 'M3 3l7.07 17 2.51-7.42L20 10.07z',
  hand: 'M18 11V6a2 2 0 0 0-2-2 2 2 0 0 0-2 2M14 10V4a2 2 0 0 0-2-2 2 2 0 0 0-2 2v2M10 10.5V6a2 2 0 0 0-2-2 2 2 0 0 0-2 2v8M18 8a2 2 0 1 1 4 0v6a8 8 0 0 1-8 8h-2c-2.8 0-4.5-.86-5.99-2.34l-3.6-3.6a2 2 0 0 1 2.83-2.82L7 15',
  type: 'M4 7V4h16v3M9 20h6M12 4v16',
  frame: 'M4 7h16M4 17h16M7 4v16M17 4v16M3 3h18v18H3z',
  pen: 'M12 19l7-7 3 3-7 7-3-3zM18 13l-1.5-7.5L2 2l3.5 14.5L13 18zM2 2l7.586 7.586',
  feather: 'M20.24 12.24a6 6 0 0 0-8.49-8.49L5 10.5V19h8.5zM16 8L2 22M17.5 15H9',
  bulb: 'M9 18h6M10 22h4M15.09 14c.18-.98.65-1.74 1.41-2.5A4.65 4.65 0 0 0 18 8 6 6 0 0 0 6 8c0 1 .23 2.23 1.5 3.5.76.76 1.23 1.52 1.41 2.5',
  gift: 'M20 12v8a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1v-8M2 7h20v5H2zM12 22V7M12 7H7.5a2.5 2.5 0 0 1 0-5C11 2 12 7 12 7zM12 7h4.5a2.5 2.5 0 0 0 0-5C13 2 12 7 12 7z',
  cake: 'M20 21v-8a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v8M4 16s.5-1 2-1 2.5 1 4 1 2.5-1 4-1 2.5 1 4 1 2-1 2-1M2 21h20M7 8v3M12 8v3M17 8v3M7 4h.01M12 4h.01M17 4h.01',
  wand: 'M15 4V2M15 16v-2M8 9h2M20 9h2M17.8 11.8l1.4 1.4M17.8 6.2l1.4-1.4M3 21l9-9M12.2 6.2l-1.4-1.4',
  sticky: 'M15 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h10l6-6V5a2 2 0 0 0-2-2zM15 21v-4a2 2 0 0 1 2-2h4',
  camera: 'M14.5 4h-5L7 7H4a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2h-3zM12 17a4 4 0 1 0 0-8 4 4 0 0 0 0 8z',
  copy: 'M9 9h10a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2V11a2 2 0 0 1 2-2zM5 15H4a2 2 0 0 1-2-2V3a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2v1',
  x: 'M18 6L6 18M6 6l12 12',
  check: 'M20 6L9 17l-5-5',
  cloud: 'M17.5 19a4.5 4.5 0 1 0-1.4-8.78A6 6 0 1 0 6 16.5a4 4 0 0 0 .5.03h11z',
  logout: 'M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4M16 17l5-5-5-5M21 12H9',
  checkDouble: 'M1 12l4 4L13 8M9 14l1 1 8-9',
  filter: 'M22 3H2l8 9.46V19l4 2v-8.54z',
  sort: 'M21 16l-4 4-4-4M17 20V4M3 8l4-4 4 4M7 4v16',
  upload: 'M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4M17 8l-5-5-5 5M12 3v12',
  download: 'M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4M7 10l5 5 5-5M12 15V3',
  clock: 'M2 12a10 10 0 1 0 20 0a10 10 0 1 0 -20 0M12 6v6l4 2',
  star: 'M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z',
  flag: 'M4 15s1-1 4-1 5 2 8 2 4-1 4-1V3s-1 1-4 1-5-2-8-2-4 1-4 1zM4 22V4',
  mail: 'M4 4h16a2 2 0 0 1 2 2v12a2 2 0 0 1 -2 2h-16a2 2 0 0 1 -2 -2v-12a2 2 0 0 1 2 -2zM22 7l-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7',
  phone: 'M13.832 16.568a1 1 0 0 0 1.213-.303l.355-.465A2 2 0 0 1 17 15h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2A18 18 0 0 1 2 4a2 2 0 0 1 2-2h3a2 2 0 0 1 2 2v3a2 2 0 0 1-.8 1.6l-.468.351a1 1 0 0 0-.292 1.233 14 14 0 0 0 6.392 6.384z',
  link: 'M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71',
  grid: 'M4 3h5a1 1 0 0 1 1 1v5a1 1 0 0 1 -1 1h-5a1 1 0 0 1 -1 -1v-5a1 1 0 0 1 1 -1zM15 3h5a1 1 0 0 1 1 1v5a1 1 0 0 1 -1 1h-5a1 1 0 0 1 -1 -1v-5a1 1 0 0 1 1 -1zM15 14h5a1 1 0 0 1 1 1v5a1 1 0 0 1 -1 1h-5a1 1 0 0 1 -1 -1v-5a1 1 0 0 1 1 -1zM4 14h5a1 1 0 0 1 1 1v5a1 1 0 0 1 -1 1h-5a1 1 0 0 1 -1 -1v-5a1 1 0 0 1 1 -1z',
  list: 'M8 6h13M8 12h13M8 18h13M3 6h.01M3 12h.01M3 18h.01',
  listOrdered: 'M10 6h11M10 12h11M10 18h11M4 6h1v4M4 10h2M6 18H4c0-1 2-2 2-3s-1-1.5-2-1',
  quote: 'M3 21c3 0 7-1 7-8V5a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h2.5M14 21c3 0 7-1 7-8V5a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h2.5',
  starOff: 'M8.5 8.5 12 2l2.5 5 5.5.8-4 3.9.9 5.4L12 14.5',
  columns: 'M5 3h14a2 2 0 0 1 2 2v14a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2v-14a2 2 0 0 1 2 -2zM12 3v18',
  rows: 'M5 3h14a2 2 0 0 1 2 2v14a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2v-14a2 2 0 0 1 2 -2zM3 12h18',
  panelLeft: 'M5 3h14a2 2 0 0 1 2 2v14a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2v-14a2 2 0 0 1 2 -2zM9 3v18',
  timeline: 'M8 6h10M6 12h9M11 18h7',
  monitor: 'M3 4h18a1 1 0 0 1 1 1v10a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1zM8 20h8M12 16v4',
  tablet: 'M6 2h12a2 2 0 0 1 2 2v16a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 18h.01',
  smartphone: 'M8 2h8a1 1 0 0 1 1 1v18a1 1 0 0 1-1 1H8a1 1 0 0 1-1-1V3a1 1 0 0 1 1-1zM12 18h.01',
  alignLeft: 'M4 6h16M4 12h10M4 18h13',
  alignCenter: 'M4 6h16M7 12h10M6 18h12',
  alignRight: 'M4 6h16M10 12h10M7 18h13',
  eye: 'M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0M9 12a3 3 0 1 0 6 0a3 3 0 1 0 -6 0',
  edit: 'M21.174 6.812a1 1 0 0 0-3.986-3.986L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497zM15 5l4 4',
  trash: 'M3 6h18M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2M10 11v6M14 11v6',
  paperclip: 'M21.44 11.05l-9.19 9.19a6 6 0 0 1-8.49-8.49l9.19-9.19a4 4 0 0 1 5.66 5.66l-9.2 9.19a2 2 0 0 1-2.83-2.83l8.49-8.48',
  send: 'M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11zM21.854 2.147l-10.94 10.939',
  play: 'M6 3l14 9-14 9z',
  pause: 'M7 4h2a1 1 0 0 1 1 1v14a1 1 0 0 1 -1 1h-2a1 1 0 0 1 -1 -1v-14a1 1 0 0 1 1 -1zM15 4h2a1 1 0 0 1 1 1v14a1 1 0 0 1 -1 1h-2a1 1 0 0 1 -1 -1v-14a1 1 0 0 1 1 -1z',
  video: 'M4 6h10a2 2 0 0 1 2 2v8a2 2 0 0 1 -2 2h-10a2 2 0 0 1 -2 -2v-8a2 2 0 0 1 2 -2zM16 10l4.55-2.275A1 1 0 0 1 22 8.618v6.764a1 1 0 0 1-1.45.894L16 14',
  image: 'M5 3h14a2 2 0 0 1 2 2v14a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2v-14a2 2 0 0 1 2 -2zM7 9a2 2 0 1 0 4 0a2 2 0 1 0 -4 0M21 15l-3.086-3.086a2 2 0 0 0-2.828 0L6 21',
  pin: 'M20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0M9 10a3 3 0 1 0 6 0a3 3 0 1 0 -6 0',
  volume: 'M11 4.7L6.5 9H3v6h3.5l4.5 4.3zM15.5 8.5a5 5 0 0 1 0 7M18.5 5.5a9 9 0 0 1 0 13',
  volumeX: 'M11 4.7L6.5 9H3v6h3.5l4.5 4.3zM22 9l-6 6M16 9l6 6',
  pushpin: 'M12 17v5M9 10.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V16a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-.76a2 2 0 0 0-1.11-1.79l-1.78-.9A2 2 0 0 1 15 10.76V7a1 1 0 0 1 1-1 2 2 0 0 0 0-4H8a2 2 0 0 0 0 4 1 1 0 0 1 1 1z',
  globe: 'M2 12a10 10 0 1 0 20 0a10 10 0 1 0 -20 0M2 12h20M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20',
  zap: 'M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z',
  shield: 'M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z',
  book: 'M4 19.5A2.5 2.5 0 0 1 6.5 17H20M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z',
  lock: 'M5 11h14a2 2 0 0 1 2 2v7a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2v-7a2 2 0 0 1 2 -2zM7 11V7a5 5 0 0 1 10 0v4',
  unlock: 'M5 11h14a2 2 0 0 1 2 2v7a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2v-7a2 2 0 0 1 2 -2zM7 11V7a5 5 0 0 1 9.9 -1',
  layers: 'M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83zM2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 12M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 17',
  target: 'M2 12a10 10 0 1 0 20 0a10 10 0 1 0 -20 0M6 12a6 6 0 1 0 12 0a6 6 0 1 0 -12 0M10 12a2 2 0 1 0 4 0a2 2 0 1 0 -4 0',
  rocket: 'M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09zM12 15l-3-3a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.35 22.35 0 0 1-4 2zM9 12H4s.55-3.03 2-4c1.62-1.08 5 0 5 0M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5',
  briefcase: 'M4 7h16a2 2 0 0 1 2 2v10a2 2 0 0 1 -2 2h-16a2 2 0 0 1 -2 -2v-10a2 2 0 0 1 2 -2zM16 21V5a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16',
  smile: 'M2 12a10 10 0 1 0 20 0a10 10 0 1 0 -20 0M8 14s1.5 2 4 2 4-2 4-2M9 9h.01M15 9h.01',
  crown: 'M2 18h20M3 8l4 5 5-8 5 8 4-5-2 10H5z',
  thumbsUp: 'M7 10v12M15 5.88L14 10h5.83a2 2 0 0 1 1.92 2.56l-2.33 8A2 2 0 0 1 17.5 22H4a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h2.76a2 2 0 0 0 1.79-1.11L12 2a3.13 3.13 0 0 1 3 3.88z',
  pie: 'M21.21 15.89A10 10 0 1 1 8 2.83M22 12A10 10 0 0 0 12 2v10z',
  bolt: 'M13 2L3 14h9l-1 8 10-12h-9l1-8z',
  share: 'M4 12v8a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-8M16 6l-4-4-4 4M12 2v13',
  refresh: 'M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8M21 3v5h-5M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16M8 16H3v5',
  ban: 'M12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20zM5.6 5.6l12.8 12.8',
  dollar: 'M12 2v20M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6',
  building: 'M9 22v-4h6v4M8 6h.01M16 6h.01M12 6h.01M12 10h.01M12 14h.01M16 10h.01M16 14h.01M8 10h.01M8 14h.01',
  headphones: 'M3 14h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-7a9 9 0 0 1 18 0v7a2 2 0 0 1-2 2h-1a2 2 0 0 1-2-2v-3a2 2 0 0 1 2-2h3',
  sun: 'M8 12a4 4 0 1 0 8 0a4 4 0 1 0 -8 0M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M6.34 17.66l-1.41 1.41M19.07 4.93l-1.41 1.41',
  moon: 'M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9z',
  printer: 'M6 9V2h12v7M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2M6 14h12v8H6z',
  menu: 'M4 6h16M4 12h16M4 18h16',
  expand: 'M8 3H5a2 2 0 0 0-2 2v3M21 8V5a2 2 0 0 0-2-2h-3M3 16v3a2 2 0 0 0 2 2h3M16 21h3a2 2 0 0 0 2-2v-3',
  minimize: 'M9 9H4M9 9V4M9 9 3 3M15 9h5M15 9V4M15 9l6-6M9 15H4M9 15v5M9 15l-6 6M15 15h5M15 15v5M15 15l6 6',
  external: 'M15 3h6v6M10 14 21 3M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6',
  reply: 'M9 14 4 9l5-5M4 9h11a4 4 0 0 1 4 4v3',
  mic: 'M12 2a3 3 0 0 0-3 3v7a3 3 0 0 0 6 0V5a3 3 0 0 0-3-3zM19 10v2a7 7 0 0 1-14 0v-2M12 19v3',
  brain: 'M9 3a3 3 0 0 0-3 3 3 3 0 0 0-1 5.8A3 3 0 0 0 7 17a3 3 0 0 0 5 1 3 3 0 0 0 5-1 3 3 0 0 0 2-5.2A3 3 0 0 0 18 6a3 3 0 0 0-3-3 3 3 0 0 0-3 1.5A3 3 0 0 0 9 3z',
  pieChart: 'M21.21 15.89A10 10 0 1 1 8 2.83M22 12A10 10 0 0 0 12 2v10z',
  hash: 'M4 9h16M4 15h16M10 3L8 21M16 3l-2 18',
  bookmark: 'M19 21l-7-4-7 4V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z',
  inbox: 'M22 12h-6l-2 3h-4l-2-3H2M5.45 5.11L2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z',
  heart: 'M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7z',
  coffee: 'M3 8h14v9a4 4 0 0 1-4 4H7a4 4 0 0 1-4-4zM17 8h1a4 4 0 1 1 0 8h-1M6 1v3M10 1v3M14 1v3',
  compass: 'M2 12a10 10 0 1 0 20 0a10 10 0 1 0 -20 0M16.24 7.76l-2.12 6.36-6.36 2.12 2.12-6.36z',
  leaf: 'M11 20A7 7 0 0 1 9.8 6.1C15.5 5 17 4.48 19 2c1 2 2 4.18 2 8 0 5.5-4.78 10-10 10zM2 21c0-3 1.85-5.36 5.08-6C9.5 14.52 12 13 13 12',
  palette: 'M12 22a1 1 0 0 1 0-20 10 9 0 0 1 10 9 5 5 0 0 1-5 5h-2.25a1.75 1.75 0 0 0-1.4 2.8l.3.4a1.75 1.75 0 0 1-1.4 2.8zM13 6.5a0.5 0.5 0 1 0 1 0a0.5 0.5 0 1 0 -1 0M17 10.5a0.5 0.5 0 1 0 1 0a0.5 0.5 0 1 0 -1 0M6 12.5a0.5 0.5 0 1 0 1 0a0.5 0.5 0 1 0 -1 0M8 7.5a0.5 0.5 0 1 0 1 0a0.5 0.5 0 1 0 -1 0',
  archive: 'M3 3h18a1 1 0 0 1 1 1v3a1 1 0 0 1 -1 1h-18a1 1 0 0 1 -1 -1v-3a1 1 0 0 1 1 -1zM4 8v11a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8M10 12h4',
  eyeOff: 'M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49M14.084 14.158a3 3 0 0 1-4.242-4.242M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143M2 2l20 20',
  at: 'M8 12a4 4 0 1 0 8 0a4 4 0 1 0 -8 0M16 8v5a3 3 0 0 0 6 0v-1a10 10 0 1 0-3.92 7.94',
  package: 'M16.5 9.4l-9-5.19M21 16V8a2 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 16zM3.27 6.96L12 12.01l8.73-5.05M12 22.08V12',
  box: '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 16zM3.3 7l8.7 5 8.7-5M12 22V12',
  boxes: 'M2.97 12.92A2 2 0 0 0 2 14.63v3.24a2 2 0 0 0 .97 1.71l3 1.8a2 2 0 0 0 2.06 0L12 19v-5.5l-5-3-4.03 2.42zM7 16.5l-4.74-2.85M7 16.5l5-3M7 16.5v5.17M12 13.5V19l3.97 2.38a2 2 0 0 0 2.06 0l3-1.8a2 2 0 0 0 .97-1.71v-3.24a2 2 0 0 0-.97-1.71L17 10.5l-5 3zM17 16.5l-5-3M17 16.5l4.74-2.85M17 16.5v5.17M7.97 4.42A2 2 0 0 0 7 6.13v4.37l5 3 5-3V6.13a2 2 0 0 0-.97-1.71l-3-1.8a2 2 0 0 0-2.06 0zM12 8L7.26 5.15M12 8l4.74-2.85M12 8v5.5',
  truck: 'M14 18V6a1 1 0 0 0-1-1H3a1 1 0 0 0-1 1v11a1 1 0 0 0 1 1h1M14 9h4l4 4v4a1 1 0 0 1-1 1h-1M8 18a2 2 0 1 0 4 0a2 2 0 1 0 -4 0M16 18a2 2 0 1 0 4 0a2 2 0 1 0 -4 0',
  wrench: 'M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94z',
  tag: 'M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42zM7.5 7.5h.01',
  repeat: 'M17 2l4 4-4 4M3 11v-1a4 4 0 0 1 4-4h14M7 22l-4-4 4-4M21 13v1a4 4 0 0 1-4 4H3',
  scan: 'M3 7V5a2 2 0 0 1 2-2h2M17 3h2a2 2 0 0 1 2 2v2M21 17v2a2 2 0 0 1-2 2h-2M7 21H5a2 2 0 0 1-2-2v-2M7 12h10',
  alertTriangle: 'M21.73 18l-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3zM12 9v4M12 17h.01',
  rotate: 'M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8M21 3v5h-5',
  help: 'M12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3M12 17h.01',
};

const TAG_COLORS = ['stone','sage','olive','blue','teal','gold','clay','mauve','plum','rust'];

// Notion-style colored tag pill
function Tag({ color, label, dot, sm, style }) {
  return (
    <span className={'tag '+(color||'stone')+(sm?' tag-sm':'')} style={style}>
      {dot && <span className="tag-dot"></span>}
      <span className="tag-label">{label}</span>
    </span>
  );
}

// ── Flaticon UIcons (Regular Rounded) bridge ───────────────────────────────
// Map each app icon name to one or more candidate UIcons names. At runtime we
// probe which candidate actually resolves to a real glyph (the ::before content)
// and use the first valid one; anything unmapped, mis-named, or unavailable
// (e.g. the CDN didn't load) falls back to the original inline SVG below — so an
// icon can never render blank. One source of truth: change here, all callers update.
const UICON = {
  dashboard:['dashboard','apps'], home:['home'], circle:['circle'], sliders:['settings-sliders'],
  feed:['rss'], activity:['pulse','heart-rate'], projects:['layers','apps'], tasks:['list-check','checklist','tasks'],
  checkCircle:['check-circle','checkbox'], calendar:['calendar'], planner:['calendar-day','table-layout','layout-fluid'],
  files:['document','file'], file:['file','document'], doc:['document','file'], contract:['file-signature','document-signed','file-check'],
  estimate:['file-invoice','document','file'], code:['code-simple','browser-code'], folder:['folder'], docs:['document','file'],
  chat:['comment','comment-alt'], messages:['comment-dots','comments','comment-alt'], clients:['users-alt','users'], team:['users','users-alt'],
  user:['user'], finance:['sack-dollar','dollar','usd-circle'], invoice:['file-invoice','receipt'], receipt:['receipt'], creditCard:['credit-card'], wallet:['wallet','wallet-arrow'],
  info:['info'], alertCircle:['exclamation','info'], alert:['triangle-warning','exclamation'], contracts:['file-signature','document-signed'],
  reports:['chart-histogram','stats','chart-simple'], performance:['chart-line-up','arrow-trend-up','chart-histogram'],
  automations:['workflow-alt','workflow','sitemap'], workflow:['workflow-alt','sitemap'], workload:['dashboard-monitor','gauge','tachometer-alt-fast'],
  social:['share-alt','share-nodes'], sparkles:['sparkles'], megaphone:['megaphone','bullhorn'], bot:['robot','bot'], userPlus:['user-add'], note:['note','notebook'],
  settings:['settings'], search:['search'], bell:['bell'], bellOff:['bell-slash','bell-cross'], plus:['plus'],
  chevDown:['angle-small-down','angle-down'], chevUp:['angle-small-up','angle-up'], chevRight:['angle-small-right','angle-right'], chevLeft:['angle-small-left','angle-left'],
  arrowRight:['arrow-right'], arrowUp:['arrow-up'], arrowDown:['arrow-down'], minus:['minus'], arrowLeft:['arrow-left'],
  undo:['undo','rotate-left'], redo:['redo','rotate-right'], trendUp:['arrow-trend-up','chart-line-up'], more:['menu-dots'], dots:['menu-dots'],
  square:['square'], comment:['comment'], chart:['chart-histogram','chart-simple'], chevronRight:['angle-small-right','angle-right'],
  select:['cursor','arrow-pointer'], cursor:['cursor','arrow-pointer'], hand:['hand'], type:['text','font-case'], pen:['pencil','pen-nib','edit'],
  feather:['feather','pen-nib'], bulb:['bulb'], sticky:['note-sticky','note'], camera:['camera'], copy:['copy','duplicate'],
  x:['cross-small','cross'], check:['check'], cloud:['cloud'], logout:['sign-out-alt','exit'], filter:['filter'], sort:['sort','sort-alt'],
  upload:['upload','cloud-upload'], download:['download','cloud-download'], clock:['clock'], star:['star'], flag:['flag'], mail:['envelope'],
  phone:['phone-call','phone-flip'], link:['link-alt','link'], grid:['apps','grid'], list:['list'], quote:['quote-right'], starOff:['star'],
  eye:['eye'], edit:['edit','pencil'], trash:['trash'], paperclip:['clip','paperclip-vertical'], send:['paper-plane','paper-plane-top'],
  play:['play'], pause:['pause'], video:['video-camera','video-camera-alt'], image:['picture','image'], pin:['marker','map-marker'],
  volume:['volume'], volumeX:['volume-mute','volume-slash'], pushpin:['thumbtack'], globe:['globe','earth-americas','world'], zap:['bolt'],
  shield:['shield','shield-check'], book:['book-alt','book'], lock:['lock'], unlock:['unlock','lock-open-alt'], layers:['layers'],
  target:['target','bullseye-arrow','dartboard'], rocket:['rocket-lunch','rocket'], briefcase:['briefcase'], smile:['smile'], crown:['crown','crown-alt'],
  thumbsUp:['thumbs-up','social-network'], pie:['chart-pie','chart-pie-alt'], bolt:['bolt'], share:['share','share-square'], refresh:['refresh','rotate-right'],
  ban:['ban','block'], dollar:['dollar','usd-circle'], building:['building','bank'], headphones:['headphones','headset'], sun:['sun','brightness'],
  moon:['moon','moon-stars'], printer:['print','printer'], menu:['menu-burger'], expand:['expand','arrows-maximize'], minimize:['compress','arrows-minimize'],
  external:['arrow-up-right-from-square','up-right-from-square'], reply:['reply-all'], mic:['microphone','microphone-alt'], brain:['brain'],
  pieChart:['chart-pie','chart-pie-alt'], hash:['hashtag'], bookmark:['bookmark'], inbox:['inbox'], heart:['heart'], coffee:['coffee','mug-hot','mug-alt'],
  compass:['compass'], leaf:['leaf'], palette:['palette'], archive:['archive','box-open'], eyeOff:['eye-crossed','eye-slash'], at:['at'],
  package:['box','box-alt'], box:['box','box-alt'], boxes:['boxes','box-alt'], truck:['truck-side','truck-moving'], wrench:['wrench-simple','tools','wrench-alt'],
  tag:['tags','tag','price-tag'], repeat:['rotate-right','refresh'], alertTriangle:['triangle-warning','exclamation'], rotate:['rotate-right','refresh'],
  help:['interrogation','question'], grip:['grip-dots','grip-lines'], thumbtack:['thumbtack'], trash2:['trash'],
};

// inject sizing so font-glyph icons size by font-size (and override fixed px rules
// like `.btn .icn{width:16px}`) and stay color-driven like the SVGs they replace.
(function(){
  try{
    if(document.getElementById('uicon-sizing')) return;
    const st=document.createElement('style'); st.id='uicon-sizing';
    st.textContent='i.icn.fi{width:1em;height:1em;line-height:1;display:inline-flex;align-items:center;justify-content:center;font-style:normal;flex-shrink:0;vertical-align:middle;}i.icn.fi::before{display:block;font-size:inherit;margin:0;}';
    (document.head||document.documentElement).appendChild(st);
  }catch(e){}
})();

// Probe once (lazily, after the stylesheet is applied) which candidate resolves.
let _fiResolved = null;
function fiClass(name){
  if(_fiResolved === null){
    _fiResolved = {};
    let host=null;
    try{
      host=document.createElement('div');
      host.style.cssText='position:absolute;left:-9999px;top:-9999px;visibility:hidden;font-size:20px';
      (document.body||document.documentElement).appendChild(host);
      const cache={};
      const test=(cls)=>{
        if(cache[cls]!==undefined) return cache[cls];
        const i=document.createElement('i'); i.className='fi fi-rr-'+cls; host.appendChild(i);
        let c=''; try{ c=getComputedStyle(i,'::before').content; }catch(e){}
        host.removeChild(i);
        let s=c||''; if(s.length>=2 && (s[0]==='"'||s[0]==="'")) s=s.slice(1,-1);
        const ok = !!s && s!=='none' && s!=='normal' && c!=='none' && c!=='normal';
        cache[cls]=ok?cls:false; return cache[cls];
      };
      for(const nm in UICON){ let r=null; for(const cand of UICON[nm]){ if(test(cand)){ r=cand; break; } } _fiResolved[nm]=r; }
    }catch(e){ _fiResolved={}; }
    finally{ if(host&&host.parentNode) host.parentNode.removeChild(host); }
  }
  return _fiResolved[name] || null;
}

function Icon({ name, size, className, style, strokeWidth, preferSvg }) {
  const px = size || 20;
  if(name === 'aria' || name === 'ariaMono'){
    if(window.AriaMark){
      return <window.AriaMark
        size={px}
        state="awake"
        palette={name==='aria' ? 'color' : 'mono'}
        color={name==='ariaMono' ? 'currentColor' : null}
        className={className}
        style={style}
      />;
    }
    name = 'sparkles';
  }
  // Prefer a Flaticon UIcons glyph when one truly resolves; otherwise SVG below.
  const fi = (!preferSvg && name && UICON[name]) ? fiClass(name) : null;
  if(fi){
    return <i className={'icn fi fi-rr-'+fi + (className?(' '+className):'')} style={{ fontSize:px, ...style }} aria-hidden="true"/>;
  }
  let d = ICON_PATHS[name];
  if(d === undefined){
    // Surface unknown icon names loudly in dev instead of silently rendering the
    // dashboard glyph (which hides broken references). Still renders a fallback.
    if(name){
      Icon._warned = Icon._warned || {};
      if(!Icon._warned[name]){
        Icon._warned[name] = 1;
        (window.__missingIcons = window.__missingIcons || []).push(name);
        try{ console.warn('[Icon] unknown name "'+name+'" — falling back to dashboard glyph. Add it to ICON_PATHS in s-icons.jsx.'); }catch(e){}
      }
    }
    d = ICON_PATHS.dashboard;
  }
  // Notion-style finish: thin uniform monoline, rounded caps/joins, calm + light.
  // Slightly scale the stroke down at larger sizes so big icons read as airy.
  const sw = strokeWidth || (px >= 30 ? 1.9 : 2);
  return (
    <svg className={'icn ' + (className||'')} style={style} width={px} height={px}
      viewBox="0 0 24 24" fill="none" stroke="currentColor"
      strokeWidth={sw} strokeLinecap="round" strokeLinejoin="round">
      {d.split('M').filter(Boolean).map((seg,i)=> <path key={i} d={'M'+seg}/>)}
    </svg>
  );
}

// Stelaah brand mark — official 4-petal spiral
function StelaahMark({ size, style, color }) {
  const s = size || 30;
  return (
    <svg width={s} height={s} viewBox="0 0 952 958" fill={color||'currentColor'} style={style}>
      <path d="M419.149 158.969C418.721 145.119 433.446 135.999 445.654 142.553L584.534 217.107C596.743 223.661 597.278 240.973 585.498 248.269L451.493 331.265C439.713 338.561 424.452 330.369 424.024 316.519L419.149 158.969Z"/>
      <path d="M222.905 385.887C211.188 378.491 211.871 361.184 224.135 354.735L363.644 281.366C375.908 274.916 390.554 284.161 390.008 298.007L383.793 455.51C383.247 469.355 367.917 477.417 356.199 470.021L222.905 385.887Z"/>
      <path d="M301.131 675.521C288.444 681.092 274.483 670.84 276.002 657.067L293.275 500.391C294.794 486.618 310.653 479.654 321.821 487.855L448.87 581.153C460.038 589.354 458.14 606.571 445.453 612.142L301.131 675.521Z"/>
      <path d="M584.94 772.79C582.457 786.422 566.148 792.254 555.584 783.288L435.409 681.288C424.845 672.322 427.949 655.282 440.996 650.616L589.418 597.542C602.465 592.876 615.67 604.084 613.187 617.716L584.94 772.79Z"/>
    </svg>
  );
}

// Stelaah brand wordmark — official lockup (custom serif "stelaah" + 4-petal mark)
// Text inherits currentColor; petals use the botanical green.
function StelaahWordmark({ height, style, petalColor }) {
  const h = height || 24;
  const w = h * (681 / 143);
  const green = petalColor || 'var(--lime)';
  return (
    <svg width={w} height={h} viewBox="0 0 681 143" fill="none" style={style} aria-label="stelaah">
      <g fill="currentColor">
        <path d="M82.3324 64.636C82.3324 69.4027 84.1437 73.3113 87.7664 76.362C91.5797 79.222 97.2997 82.4633 104.926 86.086C111.218 89.1367 116.08 91.806 119.512 94.094C122.944 96.1913 125.9 99.0513 128.378 102.674C131.048 106.297 132.382 110.587 132.382 115.544C132.382 123.743 128.474 130.321 120.656 135.278C113.03 140.235 102.734 142.714 89.7684 142.714C80.0444 142.714 72.0364 140.998 65.7444 137.566C59.4524 133.943 56.3064 129.272 56.3064 123.552C56.3064 119.739 57.7364 116.593 60.5964 114.114C63.4564 111.445 66.9837 110.11 71.1784 110.11C74.4197 110.11 77.6611 110.777 80.9024 112.112C77.6611 114.591 76.0404 118.595 76.0404 124.124C76.0404 127.937 77.3751 130.893 80.0444 132.99C82.7137 135.087 85.9551 136.136 89.7684 136.136C94.1537 136.136 97.8717 134.992 100.922 132.704C104.164 130.416 105.784 127.175 105.784 122.98C105.784 118.976 104.164 115.83 100.922 113.542C97.8717 111.063 93.0097 108.203 86.3364 104.962C80.2351 102.102 75.2777 99.528 71.4644 97.24C67.8417 94.7613 64.6957 91.52 62.0264 87.516C59.3571 83.512 58.0224 78.65 58.0224 72.93C58.0224 64.35 61.6451 57.5813 68.8904 52.624C76.1357 47.6667 85.2877 45.188 96.3464 45.188C106.07 45.188 113.983 46.9993 120.084 50.622C126.376 54.2447 129.522 58.916 129.522 64.636C129.522 69.0213 128.188 72.2627 125.518 74.36C122.849 76.4573 119.417 77.506 115.222 77.506C111.218 77.506 107.691 76.648 104.64 74.932C108.072 71.6907 109.788 67.5913 109.788 62.634C109.788 59.3927 108.549 56.8187 106.07 54.912C103.592 52.8147 100.35 51.766 96.3464 51.766C91.9611 51.766 88.5291 53.0053 86.0504 55.484C83.5717 57.9627 82.3324 61.0133 82.3324 64.636Z"/>
        <path d="M176.469 142.714C168.652 142.714 163.027 140.998 159.595 137.566C156.163 133.943 154.447 128.128 154.447 120.12V59.488H140.147C140.147 56.2467 140.338 54.1493 140.719 53.196C141.1 52.2427 142.244 51.48 144.151 50.908C150.443 49.192 155.4 46.5227 159.023 42.9C162.646 39.2773 165.601 34.034 167.889 27.17C168.461 25.0727 169.414 23.8333 170.749 23.452C172.084 22.88 175.325 22.594 180.473 22.594V48.334H203.925C203.925 50.8127 203.544 53.1007 202.781 55.198C202.018 57.1047 200.97 58.5347 199.635 59.488H180.473V123.838C180.473 129.558 182.856 132.418 187.623 132.418C189.72 132.418 192.008 131.751 194.487 130.416C197.156 129.081 199.54 127.27 201.637 124.982L203.925 127.842C195.726 137.757 186.574 142.714 176.469 142.714Z"/>
        <path d="M264.358 133.276C269.887 133.276 274.749 132.323 278.944 130.416C283.139 128.319 287.238 124.887 291.242 120.12L294.674 122.694C290.289 128.986 284.664 133.943 277.8 137.566C271.127 140.998 263.786 142.714 255.778 142.714C247.007 142.714 239.095 140.617 232.04 136.422C225.176 132.227 219.742 126.507 215.738 119.262C211.734 111.826 209.732 103.437 209.732 94.094C209.732 79.222 214.213 67.4007 223.174 58.63C232.326 49.6687 244.433 45.188 259.496 45.188C270.173 45.188 278.849 47.762 285.522 52.91C292.386 57.8673 295.818 64.35 295.818 72.358C295.818 81.51 291.909 88.8507 284.092 94.38C276.465 99.7187 265.979 102.388 252.632 102.388C247.293 102.388 242.431 102.007 238.046 101.244C238.999 111.159 241.859 118.976 246.626 124.696C251.393 130.416 257.303 133.276 264.358 133.276ZM256.35 52.052C250.439 52.052 245.768 55.6747 242.336 62.92C239.095 69.9747 237.474 79.8893 237.474 92.664V97.24C239.571 97.24 242.145 97.0493 245.196 96.668C253.204 95.7147 259.305 93.1407 263.5 88.946C267.885 84.5607 270.078 78.8407 270.078 71.786C270.078 66.066 268.743 61.3947 266.074 57.772C263.595 53.9587 260.354 52.052 256.35 52.052Z"/>
        <path d="M339.498 123.838C339.498 129.558 341.309 132.418 344.932 132.418C348.554 132.418 352.082 130.988 355.514 128.128L357.802 130.988C351.128 138.805 342.834 142.714 332.92 142.714C326.246 142.714 321.384 141.189 318.334 138.138C315.283 134.897 313.758 129.844 313.758 122.98V18.018C313.758 15.3487 312.518 14.014 310.04 14.014H300.888L300.03 11.154C303.652 7.722 308.324 5.05266 314.044 3.14599C319.954 1.04866 325.77 0 331.49 0C333.968 0 335.875 0.571998 337.21 1.71599C338.735 2.66933 339.498 4.09933 339.498 6.006V123.838Z"/>
        <path d="M394.146 76.934C390.142 79.222 385.375 80.366 379.846 80.366C375.842 80.366 372.696 79.222 370.408 76.934C368.12 74.4553 366.976 71.0233 366.976 66.638C366.976 60.1553 370.122 55.0073 376.414 51.194C382.897 47.19 391.286 45.188 401.582 45.188C413.785 45.188 423.318 47.8573 430.182 53.196C437.237 58.5347 440.764 65.78 440.764 74.932V124.41C440.764 129.749 442.671 132.418 446.484 132.418C450.107 132.418 453.634 130.988 457.066 128.128L459.354 130.988C452.299 138.805 443.91 142.714 434.186 142.714C428.466 142.714 424.081 141.284 421.03 138.424C418.17 135.564 416.454 131.083 415.882 124.982H414.738C411.687 130.511 407.588 134.897 402.44 138.138C397.483 141.189 391.763 142.714 385.28 142.714C378.035 142.714 372.219 140.521 367.834 136.136C363.449 131.56 361.256 125.649 361.256 118.404C361.256 110.205 365.165 103.723 372.982 98.956C380.799 94.1893 391.381 91.806 404.728 91.806C407.207 91.806 410.734 91.9967 415.31 92.378V78.078C415.31 68.7353 414.166 62.062 411.878 58.058C409.59 53.8633 405.872 51.766 400.724 51.766C397.101 51.766 394.241 52.91 392.144 55.198C390.047 57.486 388.998 60.4413 388.998 64.064C388.998 69.784 390.714 74.074 394.146 76.934ZM398.436 128.414C409.685 128.414 415.31 118.213 415.31 97.812C405.777 97.812 398.627 99.4327 393.86 102.674C389.093 105.725 386.71 110.11 386.71 115.83C386.71 119.643 387.759 122.694 389.856 124.982C391.953 127.27 394.813 128.414 398.436 128.414Z"/>
        <path d="M495.743 76.934C491.739 79.222 486.973 80.366 481.443 80.366C477.439 80.366 474.293 79.222 472.005 76.934C469.717 74.4553 468.573 71.0233 468.573 66.638C468.573 60.1553 471.719 55.0073 478.011 51.194C484.494 47.19 492.883 45.188 503.179 45.188C515.382 45.188 524.915 47.8573 531.779 53.196C538.834 58.5347 542.361 65.78 542.361 74.932V124.41C542.361 129.749 544.268 132.418 548.081 132.418C551.704 132.418 555.231 130.988 558.663 128.128L560.951 130.988C553.897 138.805 545.507 142.714 535.783 142.714C530.063 142.714 525.678 141.284 522.627 138.424C519.767 135.564 518.051 131.083 517.479 124.982H516.335C513.284 130.511 509.185 134.897 504.037 138.138C499.08 141.189 493.36 142.714 486.877 142.714C479.632 142.714 473.816 140.521 469.431 136.136C465.046 131.56 462.853 125.649 462.853 118.404C462.853 110.205 466.762 103.723 474.579 98.956C482.396 94.1893 492.978 91.806 506.325 91.806C508.804 91.806 512.331 91.9967 516.907 92.378V78.078C516.907 68.7353 515.763 62.062 513.475 58.058C511.187 53.8633 507.469 51.766 502.321 51.766C498.698 51.766 495.839 52.91 493.741 55.198C491.644 57.486 490.595 60.4413 490.595 64.064C490.595 69.784 492.311 74.074 495.743 76.934ZM500.033 128.414C511.283 128.414 516.907 118.213 516.907 97.812C507.374 97.812 500.224 99.4327 495.457 102.674C490.69 105.725 488.307 110.11 488.307 115.83C488.307 119.643 489.356 122.694 491.453 124.982C493.55 127.27 496.411 128.414 500.033 128.414Z"/>
        <path d="M661.976 123.838C661.976 129.558 663.787 132.418 667.41 132.418C671.033 132.418 674.56 130.988 677.992 128.128L680.28 130.988C673.226 138.805 664.932 142.714 655.398 142.714C648.534 142.714 643.577 140.998 640.526 137.566C637.666 133.943 636.236 128.128 636.236 120.12V76.362C636.236 65.3033 632.709 59.774 625.654 59.774C618.79 59.774 613.261 64.4453 609.066 73.788C604.871 83.1307 602.774 95.3333 602.774 110.396C602.774 116.307 603.156 121.073 603.918 124.696C604.872 128.128 606.397 131.369 608.494 134.42L610.782 137.28L608.494 140.14H567.024L565.308 135.278L569.312 134.42C572.363 133.657 574.365 132.513 575.318 130.988C576.272 129.272 576.748 126.031 576.748 121.264V19.162C576.748 17.6367 576.367 16.3973 575.604 15.444C575.032 14.4907 574.174 14.014 573.03 14.014H564.164L563.02 11.154C566.643 7.722 571.314 5.05266 577.034 3.14599C582.945 1.04866 588.76 0 594.48 0C596.959 0 598.961 0.571998 600.486 1.71599C602.012 2.66933 602.774 4.09933 602.774 6.006V76.648C605.444 67.6867 610.115 60.2507 616.788 54.34C623.652 48.2387 630.898 45.188 638.524 45.188C646.723 45.188 652.633 47.8573 656.256 53.196C660.069 58.5347 661.976 67.0193 661.976 78.65V123.838Z"/>
      </g>
      <g fill={green}>
        <path d="M39.948 21.1345C41.1804 15.1007 48.4825 12.6638 53.0917 16.748L60.8698 23.6402C65.479 27.7245 63.9384 35.2668 58.0967 37.2163L48.2389 40.5062C42.3972 42.4557 36.6357 37.3504 37.8682 31.3166L39.948 21.1345Z"/>
        <path d="M5.4257 49.3093C1.11507 44.9111 3.18215 37.4958 9.14644 35.9618L19.2112 33.3732C25.1755 31.8392 30.5638 37.3369 28.9101 43.2692L26.1195 53.2798C24.4659 59.212 17.0105 61.1295 12.6999 56.7313L5.4257 49.3093Z"/>
        <path d="M9.454 93.6871C3.39661 94.798 -1.5918 88.9349 0.474862 83.1337L3.96235 73.344C6.02901 67.5427 13.6007 66.1541 17.5915 70.8446L24.3258 78.7596C28.3165 83.4501 25.7332 90.7017 19.6758 91.8125L9.454 93.6871Z"/>
        <path d="M48.4861 115.185C46.0166 120.826 38.366 121.679 34.715 116.72L28.5538 108.351C24.9027 103.391 27.9895 96.3392 34.11 95.6569L44.4383 94.5057C50.5588 93.8235 55.1227 100.023 52.6532 105.664L48.4861 115.185Z"/>
      </g>
    </svg>
  );
}

window.Icon = Icon;
window.Tag = Tag;
window.TAG_COLORS = TAG_COLORS;
window.ICON_NAMES = Object.keys(ICON_PATHS);
window.StelaahMark = StelaahMark;
window.StelaahWordmark = StelaahWordmark;
