// 1Radar v3 — Remix-style line icons (matches the EUSpy / Monarch Figma vocabulary).
// All icons rendered as 24x24 strokes; resize via the `size` prop.

const Icon = ({ name, size = 20, stroke = 1.6, style = {}, ...rest }) => {
  const common = {
    width: size, height: size, viewBox: '0 0 24 24',
    fill: 'none',
    strokeWidth: stroke, strokeLinecap: 'round', strokeLinejoin: 'round',
    style: { display: 'inline-block', flexShrink: 0, stroke: 'currentColor', ...style },
    ...rest,
    stroke: 'currentColor',
  };
  const F = (path) => <svg {...common}>{path}</svg>;

  switch (name) {
    case 'home': return F(<><path d="M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8"/><path d="M3 10a2 2 0 0 1 .709-1.528l7-6a2 2 0 0 1 2.582 0l7 6A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/></>);
    case 'compass': return (
      <svg {...common} viewBox="2 2 20 20">
        <path fill="currentColor" stroke="currentColor" strokeWidth="0.4" d="M12 8q-1.65 0-2.825 1.175T8 12q0 1.26.716 2.277q.717 1.017 1.89 1.465q.188.085.284.28q.094.195.016.384q-.079.177-.247.275t-.344.019q-1.498-.538-2.406-1.821T7 12q0-2.077 1.462-3.538T12 7q1.583 0 2.878.909q1.295.908 1.828 2.399q.073.177-.032.354t-.282.25q-.207.078-.396-.02q-.188-.098-.273-.305q-.448-1.173-1.465-1.88T12 8m0-4Q8.65 4 6.325 6.325T4 12q0 3.342 2.248 5.63q2.248 2.29 5.546 2.359q.214.011.363.163t.143.365t-.149.364t-.357.144q-1.873-.029-3.474-.783q-1.6-.754-2.786-1.991t-1.86-2.856T3 12q0-1.864.71-3.506q.711-1.642 1.927-2.857Q6.852 4.42 8.494 3.71T12 3q3.56 0 6.251 2.512t2.774 6.263q.012.208-.132.36q-.143.154-.356.16t-.378-.15t-.176-.37q-.087-3.154-2.42-5.465Q15.229 4 12 4m7.242 16.27l-4.28-4.295l-.52 1.583q-.105.292-.398.29q-.292-.004-.378-.296l-1.449-4.825q-.061-.236.106-.404q.168-.167.404-.106l4.825 1.449q.292.086.295.378t-.29.398l-1.582.52l4.3 4.28q.214.214.214.514t-.214.513t-.516.214t-.517-.214"/>
      </svg>
    );
    case 'sparkles': return F(<><path d="M12 3v4M12 17v4M3 12h4M17 12h4M5.6 5.6l2.8 2.8M15.6 15.6l2.8 2.8M18.4 5.6l-2.8 2.8M8.4 15.6l-2.8 2.8"/></>);
    case 'image-ai': return F(<>
      <circle cx="7" cy="8" r="1.5"/>
      <path d="M20.998 11q.002.705.002 1.5c0 4.478 0 6.718-1.391 8.109S15.979 22 11.5 22c-4.478 0-6.718 0-8.109-1.391S2 16.979 2 12.5c0-4.478 0-6.718 1.391-8.109S7.021 3 11.5 3q.795 0 1.5.002"/>
      <path d="m18.5 2l.258.697c.338.914.507 1.371.84 1.704c.334.334.791.503 1.705.841L22 5.5l-.697.258c-.914.338-1.371.507-1.704.84c-.334.334-.503.791-.841 1.705L18.5 9l-.258-.697c-.338-.914-.507-1.371-.84-1.704c-.334-.334-.791-.503-1.705-.841L15 5.5l.697-.258c.914-.338 1.371-.507 1.704-.84c.334-.334.503-.791.841-1.705z"/>
      <path d="M4.5 21.5c4.372-5.225 9.274-12.116 16.498-7.458"/>
    </>);
    case 'mic': return F(<><rect x="9" y="3" width="6" height="12" rx="3"/><path d="M5 11a7 7 0 0 0 14 0"/><path d="M12 18v3"/></>);
    case 'wand': return F(<><path d="m4 20 14-14"/><path d="m17 4 1 2 2 1-2 1-1 2-1-2-2-1 2-1z"/><path d="M5 11v2M3 12h2"/></>);
    case 'bookmark': return F(<><path d="M6 3h12v18l-6-4-6 4z"/></>);
    case 'star': return F(<><path d="m12 3 2.6 5.5 6 .9-4.3 4.2 1 6-5.3-2.8-5.3 2.8 1-6L3.4 9.4l6-.9z"/></>);
    case 'building': return (
      <svg {...common} viewBox="0 0 14 14" strokeWidth="1">
        <path d="M1.233 3.087c-.644.386-.643.942-.003 1.33c.63.38 1.288.77 2.038 1.13s1.562.675 2.356.977c.807.308 1.967.308 2.771-.001c.787-.303 1.59-.618 2.337-.976a25 25 0 0 0 2.035-1.121c.644-.386.644-.943.003-1.33c-.63-.38-1.288-.77-2.038-1.13S9.17 1.291 8.376.988C7.569.681 6.409.681 5.605.99c-.787.302-1.59.618-2.337.976c-.746.358-1.405.743-2.035 1.12"/>
        <path d="M13.25 7.795a27 27 0 0 1-2.205 1.12c-.81.359-1.68.675-2.533.977c-.871.309-2.128.309-3.003.001c-.86-.302-1.74-.617-2.553-.977S1.43 8.166.747 7.786"/>
        <path d="M13.25 10.92a27 27 0 0 1-2.205 1.12c-.81.359-1.68.675-2.533.977c-.871.309-2.128.309-3.003.002c-.86-.303-1.74-.618-2.553-.978S1.43 11.29.747 10.91"/>
      </svg>
    );
    case 'package': return F(<><path d="m12 3 9 5v8l-9 5-9-5V8z"/><path d="m3 8 9 5 9-5"/><path d="M12 13v9"/></>);
    case 'shop': return F(<><path d="M4 8h16l-1 12H5z"/><path d="M8 8V6a4 4 0 0 1 8 0v2"/></>);
    case 'chat': return F(<><path d="M4 5h16v11H8l-4 4z"/></>);
    case 'play-circle': return F(<><circle cx="12" cy="12" r="9"/><path d="m10 8 6 4-6 4z" fill="currentColor" stroke="none"/></>);
    case 'tools': return F(<><path d="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"/></>);
    case 'gamepad': return F(<><rect x="2" y="7" width="20" height="11" rx="4"/><path d="M7 11v3M5.5 12.5h3M15 13h.01M18 11h.01"/></>);
    case 'gift': return F(<><rect x="3" y="9" width="18" height="12" rx="2"/><path d="M3 13h18M12 9v12"/><path d="M12 9c-3 0-5-1.5-5-3a2 2 0 0 1 5-1c0 2-1.7 4-1.7 4M12 9c3 0 5-1.5 5-3a2 2 0 0 0-5-1"/></>);
    case 'users': return F(<><circle cx="9" cy="8" r="3"/><path d="M3 20c0-3 3-5 6-5s6 2 6 5"/><circle cx="17" cy="9" r="2.5"/><path d="M21 19c0-2-1.5-4-4-4"/></>);
    case 'user': return F(<><circle cx="12" cy="8" r="4"/><path d="M4 21c0-4 4-7 8-7s8 3 8 7"/></>);
    case 'settings': return F(<><circle cx="12" cy="12" r="3"/><path d="M19.4 14a7.8 7.8 0 0 0 0-4l2-1.6-2-3.4-2.4.9a8 8 0 0 0-3.5-2L13 1h-2l-.5 2.9a8 8 0 0 0-3.5 2l-2.4-.9-2 3.4L4.6 10a7.8 7.8 0 0 0 0 4l-2 1.6 2 3.4 2.4-.9a8 8 0 0 0 3.5 2L11 23h2l.5-2.9a8 8 0 0 0 3.5-2l2.4.9 2-3.4z"/></>);
    case 'help': return F(<><circle cx="12" cy="12" r="9"/><path d="M9.5 9a2.5 2.5 0 1 1 3.5 2.3c-.7.4-1 1-1 1.7"/><path d="M12 17h.01"/></>);
    case 'logout': return F(<><path d="M9 4H5v16h4"/><path d="m15 8 4 4-4 4"/><path d="M19 12H9"/></>);
    case 'search': return F(<><circle cx="11" cy="11" r="7"/><path d="m20 20-3.5-3.5"/></>);
    case 'filter': return F(<><path d="M4 5h16l-6 7v6l-4 2v-8z"/></>);
    case 'sort-desc': return F(<><path d="M7 4v16M4 17l3 3 3-3"/><path d="M14 6h7M14 11h5M14 16h3"/></>);
    case 'arrow-down-s': return F(<><path d="m7 10 5 5 5-5"/></>);
    case 'arrow-up-s': return F(<><path d="m7 14 5-5 5 5"/></>);
    case 'arrow-right-s': return F(<><path d="m9 6 6 6-6 6"/></>);
    case 'arrow-left-s': return F(<><path d="m15 6-6 6 6 6"/></>);
    case 'arrow-up-right': return F(<><path d="M7 17 17 7M9 7h8v8"/></>);
    case 'arrow-up': return F(<><path d="M12 19V5M5 12l7-7 7 7"/></>);
    case 'arrow-down': return F(<><path d="M12 5v14M5 12l7 7 7-7"/></>);
    case 'plus': return F(<><path d="M12 5v14M5 12h14"/></>);
    case 'minus': return F(<><path d="M5 12h14"/></>);
    case 'close': return F(<><path d="M6 6l12 12M18 6 6 18"/></>);
    case 'check': return F(<><path d="m5 12 4 4 10-10"/></>);
    case 'eye': return F(<><path d="M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7S2 12 2 12z"/><circle cx="12" cy="12" r="3"/></>);
    case 'eye-off': return F(<><path d="M3 3l18 18"/><path d="M10.6 6.2A10 10 0 0 1 12 6c6.5 0 10 6 10 6a16 16 0 0 1-3.6 4.4M6 7a16 16 0 0 0-4 5s3.5 6 10 6a10 10 0 0 0 5-1.3"/><path d="M9.5 9.5a3 3 0 0 0 4.2 4.2"/></>);
    case 'heart': return F(<><path d="M12 21s-7-4.5-9.5-9A5.5 5.5 0 0 1 12 7a5.5 5.5 0 0 1 9.5 5C19 16.5 12 21 12 21z"/></>);
    case 'flame': return F(<><path d="M8.5 14.5A2.5 2.5 0 0 0 11 12c0-1.38-.5-2-1-3-1.07-2.14-.22-4.05 2-6 .5 2.5 2 4.9 4 6.5 2 1.6 3 3.5 3 5.5a7 7 0 1 1-14 0c0-1.15.43-2.29 1-3a2.5 2.5 0 0 0 2.5 2.5z"/></>);
    case 'flashlight': return F(<><path d="m6 4 12 4-1 4-9 9-3-3 9-9z"/></>);
    case 'play': return F(<><path d="m6 4 14 8-14 8z" fill="currentColor" stroke="none"/></>);
    case 'play-line': return F(<><path d="m6 4 14 8-14 8z"/></>);
    case 'pause': return F(<><rect x="6" y="4" width="4" height="16" rx="1"/><rect x="14" y="4" width="4" height="16" rx="1"/></>);
    case 'volume': return F(<><path d="M4 9h4l5-4v14l-5-4H4z"/><path d="M16 9a4 4 0 0 1 0 6"/></>);
    case 'speaker': return F(<><path d="M4 9h4l5-4v14l-5-4H4z"/><path d="M16 8a6 6 0 0 1 0 8"/><path d="M19 5a10 10 0 0 1 0 14"/></>);
    case 'globe': return F(<><circle cx="12" cy="12" r="9"/><path d="M3 12h18M12 3a14 14 0 0 1 0 18M12 3a14 14 0 0 0 0 18"/></>);
    case 'language': return F(<><path d="M3 5h12M9 3v2M5 5c0 6 4 10 10 10M11 9c0 5-3 8-7 8"/><path d="m13 21 4-10 4 10M14.5 17h5"/></>);
    case 'translate': return F(<><path d="M4 4h12M10 4v3M5 8c1 5 5 8 10 8M11 11c-1 4-4 6-7 6"/><path d="m13 22 4-10 4 10M14 18h6"/></>);
    case 'calendar': return F(<><rect x="3" y="5" width="18" height="16" rx="2"/><path d="M3 9h18M8 3v4M16 3v4"/></>);
    case 'clock': return F(<><circle cx="12" cy="12" r="9"/><path d="M12 7v5l3 3"/></>);
    case 'zap': return F(<><path d="M13 2 4 14h8l-1 8 9-12h-8z"/></>);
    case 'mail': return F(<><rect x="3" y="6" width="18" height="13" rx="2"/><path d="m3 6 9 7 9-7"/></>);
    case 'flag': return F(<><path d="M5 21V4M5 4h14l-3 4 3 4H5"/></>);
    case 'pin': return F(<><path d="M12 21v-7M7 9V4h10v5l3 4H4z"/></>);
    case 'link': return F(<><path d="M10 14a4 4 0 0 0 6 0l2-2a4 4 0 0 0-6-6l-1 1"/><path d="M14 10a4 4 0 0 0-6 0l-2 2a4 4 0 0 0 6 6l1-1"/></>);
    case 'external': return F(<><path d="M14 5h5v5"/><path d="M19 5 10 14"/><path d="M19 13v6H5V5h6"/></>);
    case 'copy': return F(<><rect x="8" y="8" width="12" height="12" rx="2"/><path d="M16 8V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v8a2 2 0 0 0 2 2h2"/></>);
    case 'download': return F(<><path d="M12 4v12M6 12l6 6 6-6"/><path d="M4 20h16"/></>);
    case 'upload': return F(<><path d="M12 20V8M6 12l6-6 6 6"/><path d="M4 20h16"/></>);
    case 'share': return F(<><circle cx="6" cy="12" r="3"/><circle cx="18" cy="6" r="3"/><circle cx="18" cy="18" r="3"/><path d="m9 11 6-3M9 13l6 3"/></>);
    case 'edit': return F(<><path d="M4 20h4l11-11-4-4L4 16z"/><path d="m14 7 4 4"/></>);
    case 'trash': return F(<><path d="M5 7h14M9 7V4h6v3M7 7l1 13h8l1-13"/></>);
    case 'more-h': return F(<><circle cx="6" cy="12" r="1.4" fill="currentColor"/><circle cx="12" cy="12" r="1.4" fill="currentColor"/><circle cx="18" cy="12" r="1.4" fill="currentColor"/></>);
    case 'more-v': return F(<><circle cx="12" cy="6" r="1.4" fill="currentColor"/><circle cx="12" cy="12" r="1.4" fill="currentColor"/><circle cx="12" cy="18" r="1.4" fill="currentColor"/></>);
    case 'menu': return F(<><path d="M4 7h16M4 12h16M4 17h10"/></>);
    case 'sidebar': return F(<><rect x="3" y="4" width="18" height="16" rx="2"/><path d="M9 4v16"/></>);
    case 'expand': return F(<><path d="M4 4h6M4 4v6M20 20h-6M20 20v-6M4 20l6-6M20 4l-6 6"/></>);
    case 'collapse': return F(<><path d="M9 4H4v5M15 4h5v5M9 20H4v-5M15 20h5v-5"/></>);
    case 'chevron-down': return F(<><path d="m6 9 6 6 6-6"/></>);
    case 'chevron-up': return F(<><path d="m6 15 6-6 6 6"/></>);
    case 'chevron-right': return F(<><path d="m9 6 6 6-6 6"/></>);
    case 'chevron-left': return F(<><path d="m15 6-6 6 6 6"/></>);
    case 'sun': return F(<><circle cx="12" cy="12" r="4"/><path d="M12 2v3M12 19v3M2 12h3M19 12h3M5 5l2 2M17 17l2 2M5 19l2-2M17 7l2-2"/></>);
    case 'moon': return F(<><path d="M21 13a9 9 0 1 1-10-10 7 7 0 0 0 10 10z"/></>);
    case 'cmd': return F(<><path d="M9 6a3 3 0 1 0 0 6h6a3 3 0 1 0 0-6 3 3 0 0 0-3 3v6a3 3 0 1 0 3-3M9 12a3 3 0 1 0 3 3"/></>);
    case 'kbd-return': return F(<><path d="M21 8v4a3 3 0 0 1-3 3H7"/><path d="m11 11-4 4 4 4"/></>);
    case 'thumbs-up': return F(<><path d="M7 11v9H4v-9zM7 11l5-7c2 0 3 1 3 3v3h5a2 2 0 0 1 2 2l-2 7a2 2 0 0 1-2 1H7"/></>);
    case 'spy': return F(<><circle cx="8" cy="14" r="3"/><circle cx="16" cy="14" r="3"/><path d="M3 11h18M11 14h2"/><path d="m6 11 2-4h8l2 4"/></>);
    case 'meta': return F(<><path d="M3 14c2-7 5-9 8-9 4 0 6 6 9 9-2 5-5 5-7 5-3 0-4-3-5-7-2-7-5 7-5 7"/></>);
    case 'tiktok': return F(<><path d="M14 4v10a4 4 0 1 1-4-4"/><path d="M14 4c0 2 2 4 5 4"/></>);
    case 'instagram': return F(<><rect x="3" y="3" width="18" height="18" rx="5"/><circle cx="12" cy="12" r="4"/><circle cx="17.5" cy="6.5" r=".8" fill="currentColor"/></>);
    case 'youtube': return F(<><rect x="2" y="6" width="20" height="12" rx="3"/><path d="m10 9 5 3-5 3z" fill="currentColor" stroke="none"/></>);
    case 'shopify': return F(<><path d="M7 6c1-2 3-3 5-3 1 0 2 1 2 2-1 0-2 0-3 1-2 1-3 4-3 6"/><path d="m6 7 8-1 2 14-10 1z"/></>);
    case 'chrome': return F(<><circle cx="12" cy="12" r="9"/><circle cx="12" cy="12" r="3"/><path d="M12 9h9M9 14 4.5 6.5M15 14l-4 7.5"/></>);
    case 'graph': return F(<><path d="M4 19V5M4 19h16"/><path d="m7 15 4-5 3 3 5-7"/></>);
    case 'database': return F(<><ellipse cx="12" cy="5" rx="8" ry="3"/><path d="M4 5v6c0 1.7 3.6 3 8 3s8-1.3 8-3V5M4 11v6c0 1.7 3.6 3 8 3s8-1.3 8-3v-6"/></>);
    case 'lock': return F(<><rect x="4" y="11" width="16" height="10" rx="2"/><path d="M8 11V8a4 4 0 0 1 8 0v3"/></>);
    case 'check-circle': return F(<><circle cx="12" cy="12" r="9"/><path d="m8 12 3 3 5-6"/></>);
    case 'info': return F(<><circle cx="12" cy="12" r="9"/><path d="M12 11v6M12 8h.01"/></>);
    case 'alert': return F(<><circle cx="12" cy="12" r="9"/><path d="M12 7v6M12 17h.01"/></>);
    case 'send': return F(<><path d="m3 11 18-7-7 18-2-8z"/></>);
    case 'mic-line': return F(<><rect x="9" y="3" width="6" height="12" rx="3"/><path d="M5 11a7 7 0 0 0 14 0M12 18v3M8 21h8"/></>);
    case 'video': return F(<><rect x="3" y="6" width="13" height="12" rx="2"/><path d="m22 8-6 4 6 4z"/></>);
    case 'scissors': return F(<><circle cx="6" cy="6" r="3"/><circle cx="6" cy="18" r="3"/><path d="M20 4 8.12 15.88M14.47 14.48 20 20M8.12 8.12 12 12"/></>);
    case 'attach': return F(<><path d="m21 12-8 8a5 5 0 0 1-7-7l9-9a3.5 3.5 0 1 1 5 5L11 18a2 2 0 0 1-3-3l8-8"/></>);
    case 'spark': return F(<><path d="M12 3v6M12 15v6M3 12h6M15 12h6"/></>);
    case 'mute': return F(<><path d="M4 9h4l5-4v14l-5-4H4z"/><path d="m17 9 4 4M21 9l-4 4"/></>);
    case 'platform-meta': return F(<><path d="M3 13c1-5 3-7 5-7 3 0 4 4 7 8 1.5 2 3 3 4 1.5"/><path d="M19 7.5c-1-1.5-3-1.5-4 0-1 1-1 3-1 4.5"/></>);
    case 'flag-fr':
      return <svg width={size} height={size} viewBox="0 0 24 16" style={{display:'inline-block',borderRadius:2,...style}}>
        <rect width="8" height="16" fill="#0055A4"/>
        <rect x="8" width="8" height="16" fill="#fff"/>
        <rect x="16" width="8" height="16" fill="#EF4135"/>
      </svg>;
    case 'flag-us':
      return <svg width={size} height={size} viewBox="0 0 24 16" style={{display:'inline-block',borderRadius:2,...style}}>
        <rect width="24" height="16" fill="#fff"/>
        {[0,2,4,6,8,10,12].map(y => <rect key={y} y={y} width="24" height="1.2" fill="#B22234"/>)}
        <rect width="10" height="8" fill="#3C3B6E"/>
      </svg>;
    case 'flag-de':
      return <svg width={size} height={size} viewBox="0 0 24 16" style={{display:'inline-block',borderRadius:2,...style}}>
        <rect width="24" height="5.33" fill="#000"/>
        <rect y="5.33" width="24" height="5.33" fill="#DD0000"/>
        <rect y="10.66" width="24" height="5.33" fill="#FFCE00"/>
      </svg>;
    case 'flag-uk':
      return <svg width={size} height={size} viewBox="0 0 24 16" style={{display:'inline-block',borderRadius:2,...style}}>
        <rect width="24" height="16" fill="#012169"/>
        <path d="M0 0 24 16M24 0 0 16" stroke="#fff" strokeWidth="2"/>
        <path d="M12 0v16M0 8h24" stroke="#fff" strokeWidth="3"/>
        <path d="M12 0v16M0 8h24" stroke="#C8102E" strokeWidth="1.5"/>
      </svg>;
    case 'logo':
      return <svg width={size} height={size} viewBox="0 0 32 32" style={{display:'inline-block',...style}}>
        <rect width="32" height="32" rx="9" fill="#0E121B"/>
        <circle cx="16" cy="16" r="9" fill="none" stroke="#fff" strokeWidth="1.5" strokeDasharray="2 3"/>
        <circle cx="16" cy="16" r="4" fill="#335CFF"/>
        <path d="M16 16 22 10" stroke="#fff" strokeWidth="1.5" strokeLinecap="round"/>
      </svg>;
    case 'apple': return F(<><path d="M16 3a4 4 0 0 1-3 4 4 4 0 0 1 1-4z"/><path d="M19 14c0 4-2 7-4 7-1 0-2-1-3-1s-2 1-3 1c-2 0-5-3-5-7 0-3 2-6 5-6 1 0 2 1 3 1s2-1 3-1c2 0 4 2 4 6z"/></>);
    case 'google': return <svg width={size} height={size} viewBox="0 0 24 24" style={{display:'inline-block',...style}}>
      <path d="M21.6 12.2c0-.7 0-1.4-.2-2H12v3.8h5.4c-.2 1.2-.9 2.3-2 3v2.5h3.2c1.9-1.7 3-4.3 3-7.3z" fill="#4285F4"/>
      <path d="M12 22c2.7 0 5-1 6.6-2.5l-3.2-2.5c-.9.6-2 1-3.4 1-2.6 0-4.8-1.7-5.6-4.1H3.1v2.6A10 10 0 0 0 12 22z" fill="#34A853"/>
      <path d="M6.4 13.9c-.4-1.2-.4-2.5 0-3.7V7.6H3.1a10 10 0 0 0 0 8.9l3.3-2.6z" fill="#FBBC04"/>
      <path d="M12 5.8c1.5 0 2.8.5 3.8 1.5l2.8-2.8A10 10 0 0 0 3.1 7.6l3.3 2.6c.8-2.4 3-4.1 5.6-4.1z" fill="#EA4335"/>
    </svg>;
    case 'arrow-right': return F(<><path d="M5 12h14M13 5l7 7-7 7"/></>);
    case 'export': return F(<><path d="M12 4v12M6 10l6-6 6 6"/><path d="M4 20h16"/></>);
    case 'folder': return F(<><path d="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"/></>);
    case 'image': return F(<><rect x="3" y="3" width="18" height="18" rx="3"/><circle cx="9" cy="9" r="1.5"/><path d="m3 17 5-5 4 4 3-3 6 6"/></>);
    case 'magic-wand': return F(<><path d="m4 20 14-14"/><path d="m17 4 1 2 2 1-2 1-1 2-1-2-2-1 2-1z"/><path d="M5 11v2M3 12h2"/></>);
    case 'cursor': return F(<><path d="m4 4 6 16 2-7 7-2z"/></>);
    case 'user-add': return F(<><circle cx="9" cy="8" r="4"/><path d="M3 21c0-4 3-6 6-6s6 2 6 6"/><path d="M19 8v6M16 11h6"/></>);
    case 'wallet': return F(<><rect x="3" y="6" width="18" height="14" rx="2"/><path d="M3 10h18M16 14h2"/><path d="M5 6V4a2 2 0 0 1 2-2h10v4"/></>);
    case 'message': return F(<><path d="M4 5h16v12H9l-5 4z"/></>);
    case 'clock': return F(<><circle cx="12" cy="12" r="9"/><path d="M12 7v5l3 2"/></>);
    case 'tag': return F(<><path d="M3 11V4h7l11 11-7 7z"/><circle cx="7.5" cy="7.5" r="1.2" fill="currentColor"/></>);
    case 'trend-up': return F(<><path d="M3 17 9 11l4 4 8-8"/><path d="M14 4h7v7"/></>);
    case 'bell': return F(<><path d="M6 16V11a6 6 0 0 1 12 0v5l2 2H4z"/><path d="M10 20a2 2 0 0 0 4 0"/></>);
    case 'sort': return F(<><path d="M7 4v16M4 17l3 3 3-3"/><path d="M17 20V4M14 7l3-3 3 3"/></>);
    case 'workflow': return F(<>
      <rect x="3" y="4" width="6" height="6" rx="1.5"/>
      <rect x="3" y="14" width="6" height="6" rx="1.5"/>
      <rect x="15" y="9" width="6" height="6" rx="1.5"/>
      <path d="M9 7h3a2 2 0 0 1 2 2v3M9 17h3a2 2 0 0 0 2-2v-3"/>
    </>);
    case 'play-fill': return F(<><path d="m6 4 14 8-14 8z" fill="currentColor" stroke="none"/></>);
    case 'hand': return F(<>
      <path d="M7 11V5.5a1.5 1.5 0 0 1 3 0V11"/>
      <path d="M10 10.5V4a1.5 1.5 0 0 1 3 0v7"/>
      <path d="M13 11V5a1.5 1.5 0 0 1 3 0v8"/>
      <path d="M16 12V8a1.5 1.5 0 0 1 3 0v8a5 5 0 0 1-5 5h-2a4 4 0 0 1-3-1.5l-3-3.5a1.5 1.5 0 0 1 2-2L9 14"/>
    </>);
    case 'text-tool': return F(<>
      <path d="M5 6V4h14v2"/>
      <path d="M12 4v16"/>
      <path d="M9 20h6"/>
    </>);
    case 'sticky': return F(<>
      <path d="M4 4h11l5 5v11H4z"/>
      <path d="M15 4v5h5"/>
    </>);
    case 'shape-rect': return F(<>
      <rect x="3" y="6" width="18" height="12" rx="2"/>
    </>);
    case 'pen': return F(<>
      <path d="m4 20 1-4 11-11 4 4-11 11z"/>
      <path d="m13 8 4 4"/>
    </>);
    case 'eraser': return F(<>
      <path d="m17 3 4 4-12 12-4-4z"/>
      <path d="M9 19H4"/>
      <path d="m13 11 4 4"/>
    </>);
    case 'undo': return F(<>
      <path d="M3 8h10a6 6 0 0 1 0 12H7"/>
      <path d="m7 4-4 4 4 4"/>
    </>);
    case 'redo': return F(<>
      <path d="M21 8H11a6 6 0 0 0 0 12h6"/>
      <path d="m17 4 4 4-4 4"/>
    </>);
    case 'bg-remove': return F(<>
      <path d="M12 2.844L9.19 9.22l-6.377 2.811l6.377 2.811L12 21.22l2.812-6.377l6.376-2.811l-6.376-2.811z"/>
    </>);
    case 'circle-shape': return F(<><circle cx="12" cy="12" r="9"/></>);
    case 'diamond-shape': return F(<><path d="M12 3 21 12 12 21 3 12z"/></>);
    case 'triangle-shape': return F(<><path d="M12 4 22 20 2 20z"/></>);
    case 'frame': return F(<>
      <rect x="3" y="3" width="7" height="7" rx="1"/>
      <rect x="14" y="3" width="7" height="7" rx="1"/>
      <rect x="3" y="14" width="7" height="7" rx="1"/>
      <rect x="14" y="14" width="7" height="7" rx="1"/>
    </>);
    case 'connector': return F(<>
      <circle cx="5" cy="12" r="2" fill="currentColor"/>
      <path d="M7 12h4"/>
      <path d="M15 12h2"/>
      <path d="M13 8l4 4-4 4"/>
    </>);
    case 'map': return F(<>
      <path d="M3 6v15l6-3 6 3 6-3V3l-6 3-6-3z"/>
      <path d="M9 3v15M15 6v15"/>
    </>);
    case 'maximize': return F(<><path d="M4 8V4h4M20 8V4h-4M4 16v4h4M20 16v4h-4"/></>);
    default:
      return F(<circle cx="12" cy="12" r="3"/>);
  }
};

// Brand chip with first-letter and gradient (used a lot in cards / brand list)
const BrandChip = ({ name, size = 32, square = false, src = null }) => {
  const letter = (name || '?').charAt(0).toUpperCase();
  const palettes = [
    ['#FF8A4C','#D34A35'], ['#7B5BFF','#3B2BAE'], ['#10B981','#047857'],
    ['#F59E0B','#B45309'], ['#0EA5E9','#0369A1'], ['#EC4899','#9D174D'],
    ['#6366F1','#312E81'], ['#14B8A6','#0F766E']
  ];
  const seed = (name || '').split('').reduce((a, c) => a + c.charCodeAt(0), 0) % palettes.length;
  const [c1, c2] = palettes[seed];
  return (
    <div style={{
      width: size, height: size,
      borderRadius: square ? 8 : 999,
      background: src ? `url(${src}) center/cover` : `linear-gradient(135deg, ${c1}, ${c2})`,
      color: '#fff',
      display: 'grid', placeItems: 'center',
      fontWeight: 600, fontSize: size * 0.42,
      flexShrink: 0,
      boxShadow: 'inset 0 0 0 1px rgba(255,255,255,0.12)',
    }}>
      {!src && letter}
    </div>
  );
};

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