// ============================================================
// SamuelMarndi.com — Brand Logo Icons (SVG marks)
// Hand-built minimal brand marks for tech stack & partners
// ============================================================

const BrandSVG = ({ children, viewBox = "0 0 24 24", size = 28 }) => (
  <svg width={size} height={size} viewBox={viewBox} xmlns="http://www.w3.org/2000/svg">{children}</svg>
);

const Brands = {
  // === Cloud ===
  aws: ({ size = 28 }) => (
    <BrandSVG size={size} viewBox="0 0 80 48">
      <path d="M22 27c0 1.7-.2 3-.5 4 .5.4.8.8 1 1.3l-1.6 1.1c-.4-.4-.7-.8-1-1.3-1.2 1.3-2.8 2-4.7 2-2.3 0-4-1.3-4-3.7 0-2.5 1.8-3.8 5-3.8.8 0 1.7.1 2.6.2v-1c0-1.6-.7-2.4-2.4-2.4-1.4 0-2.6.4-3.8 1l-.6-1.6c1.4-.7 2.8-1 4.4-1 3.4 0 5.3 1.8 5.3 5zm-2.2 3v-1.5c-.7-.2-1.5-.2-2.2-.2-1.8 0-2.7.7-2.7 2 0 1.2.6 1.8 1.8 1.8 1 0 2-.5 3.1-2zm10-8.3c.3.6.5 1.4.6 2.4l2.6-8.3h2.4l2.5 8.3c.1-1 .3-1.8.6-2.4l2.2-5.9h2.5l-3.5 9.4c-.5 1.3-1.2 2-2.4 2-1.2 0-1.9-.6-2.4-2l-2.4-7.6-2.4 7.6c-.5 1.3-1.2 2-2.4 2s-1.9-.7-2.4-2l-3.4-9.4h2.5l2.3 5.9z" fill="#252F3E"/>
      <path d="M52 36c-4.8 0-9-2-12-5l1.2-1.7c2.8 2.6 6.6 4.2 11 4.2 3 0 5.2-1 5.2-2.8 0-1.5-1-2.2-4.5-3l-2-.5c-4.4-1-6.3-2.6-6.3-5.4 0-3.2 2.7-5.3 7-5.3 2.8 0 5.3 1 7.4 2.6L57.8 20c-1.8-1.4-4-2.2-6.3-2.2-2.8 0-4.5 1-4.5 2.7 0 1.5 1 2.1 4.8 3l1.7.4c4.4 1 6.4 2.6 6.4 5.4 0 3.4-2.8 5.4-7.9 5.4z" fill="#FF9900"/>
    </BrandSVG>
  ),
  azure: ({ size = 28 }) => (
    <BrandSVG size={size}>
      <path d="M13.05 4.24L6.56 18.05 2 18l7.09-12.26 3.96-1.5zM13.75 5.33l8.25 14.31H7.92l4.84-5.78 4.07 3.62 3.92-12.15z" fill="#0078D4"/>
    </BrandSVG>
  ),
  gcp: ({ size = 28 }) => (
    <BrandSVG size={size}>
      <path d="M15.2 8.4L17.6 6c.5-.5.5-1.2 0-1.7-1.3-1.3-3.1-2.1-5.1-2.1-2.8 0-5.3 1.6-6.5 3.9l3 1.7c.7-1.2 2-2 3.5-2 .9 0 1.8.3 2.4.7l.3-.1z" fill="#EA4335"/>
      <path d="M21 12c0-.7-.1-1.4-.2-2H12v3.8h5c-.2 1.1-.9 2.1-1.9 2.8l3 2.3C19.8 17.3 21 14.8 21 12z" fill="#4285F4"/>
      <path d="M5.7 14.3c-.2-.7-.4-1.4-.4-2.2 0-.8.1-1.5.4-2.2L2.6 8.2C1.9 9.4 1.5 10.6 1.5 12s.4 2.6 1 3.8l3.2-1.5z" fill="#FBBC04"/>
      <path d="M12 21c2.4 0 4.5-.8 6-2.1l-3-2.3c-.8.5-1.8.8-3 .8-2.3 0-4.2-1.6-4.9-3.7l-3.1 1.5C5.4 18.5 8.4 21 12 21z" fill="#34A853"/>
    </BrandSVG>
  ),
  oracle: ({ size = 28 }) => (
    <BrandSVG size={size} viewBox="0 0 56 28">
      <path d="M9 5c-5 0-9 4-9 9s4 9 9 9h12c5 0 9-4 9-9s-4-9-9-9H9zm0 4h12c2.8 0 5 2.2 5 5s-2.2 5-5 5H9c-2.8 0-5-2.2-5-5s2.2-5 5-5z" fill="#F80000"/>
      <path d="M34 5h4v11h12v4H34V5z" fill="#F80000"/>
    </BrandSVG>
  ),

  // === Dev ===
  react: ({ size = 28 }) => (
    <BrandSVG size={size}>
      <circle cx="12" cy="12" r="2" fill="#61DAFB"/>
      <g stroke="#61DAFB" strokeWidth="1" fill="none">
        <ellipse cx="12" cy="12" rx="10" ry="4"/>
        <ellipse cx="12" cy="12" rx="10" ry="4" transform="rotate(60 12 12)"/>
        <ellipse cx="12" cy="12" rx="10" ry="4" transform="rotate(120 12 12)"/>
      </g>
    </BrandSVG>
  ),
  nextjs: ({ size = 28 }) => (
    <BrandSVG size={size}>
      <circle cx="12" cy="12" r="11" fill="#000"/>
      <path d="M9 7h1.6l5.4 8.5V7H17v10h-1.4L9.4 8.6V17H9V7z" fill="#fff"/>
    </BrandSVG>
  ),
  node: ({ size = 28 }) => (
    <BrandSVG size={size}>
      <path d="M12 2L3 7v10l9 5 9-5V7l-9-5z" fill="#339933"/>
      <path d="M12 7.5L7 10.3v3.4l5 2.8 5-2.8v-3.4L12 7.5z" fill="#fff"/>
    </BrandSVG>
  ),
  typescript: ({ size = 28 }) => (
    <BrandSVG size={size}>
      <rect width="24" height="24" rx="3" fill="#3178C6"/>
      <path d="M14 11v2h2.5v7H19v-7h2.5v-2H14zm-4.5 1.2c-1 0-2 .4-2.5 1l1 1.2c.4-.4 1-.7 1.5-.7.6 0 1 .3 1 .8 0 .4-.4.7-1.5 1.3-1.5.7-2 1.4-2 2.5 0 1.4 1.1 2.2 2.5 2.2 1 0 2-.4 2.6-1.2L11 17.8c-.4.4-.9.7-1.5.7-.7 0-1-.4-1-.9 0-.5.4-.8 1.5-1.3 1.4-.7 2-1.3 2-2.5 0-1.4-1-2.6-2.5-2.6z" fill="#fff"/>
    </BrandSVG>
  ),
  python: ({ size = 28 }) => (
    <BrandSVG size={size}>
      <path d="M12 2c-3 0-5 1-5 3v3h5v1H4v8h3v-3c0-2 2-3 5-3h4v-9c0-2-2-3-4-3h-0z" fill="#3776AB"/>
      <path d="M12 22c3 0 5-1 5-3v-3h-5v-1h8V7h-3v3c0 2-2 3-5 3H8v9c0 2 2 3 4 3z" fill="#FFD43B"/>
      <circle cx="9" cy="5" r=".8" fill="#fff"/>
      <circle cx="15" cy="19" r=".8" fill="#fff"/>
    </BrandSVG>
  ),
  postgres: ({ size = 28 }) => (
    <BrandSVG size={size}>
      <ellipse cx="12" cy="12" rx="9" ry="10" fill="#336791"/>
      <path d="M6 9c0-2 2-4 4-4M8 14c1-2 2-3 4-3s4 0 5 2M10 18c1-1 2-2 4-1" stroke="#fff" strokeWidth="1.2" fill="none" strokeLinecap="round"/>
    </BrandSVG>
  ),
  mongodb: ({ size = 28 }) => (
    <BrandSVG size={size}>
      <path d="M12 2c-2 4-5 6-5 11 0 5 3 8 5 9 0-1 0-3-.2-5-.4-3 .2-7 .2-15z" fill="#47A248"/>
      <path d="M12 2v22c.5-.8 1-2 1-3.5C13 17 12 14 12 11.5V2z" fill="#3FA037"/>
    </BrandSVG>
  ),
  redis: ({ size = 28 }) => (
    <BrandSVG size={size}>
      <path d="M2 7l10-4 10 4-10 4-10-4z" fill="#DC382D"/>
      <path d="M2 12l10 4 10-4" stroke="#DC382D" strokeWidth="2" fill="none"/>
      <path d="M2 17l10 4 10-4" stroke="#DC382D" strokeWidth="2" fill="none"/>
    </BrandSVG>
  ),

  // === Containers / Ops ===
  docker: ({ size = 28 }) => (
    <BrandSVG size={size}>
      <g fill="#2496ED">
        <rect x="2" y="11" width="3" height="3"/>
        <rect x="6" y="11" width="3" height="3"/>
        <rect x="10" y="11" width="3" height="3"/>
        <rect x="14" y="11" width="3" height="3"/>
        <rect x="6" y="7" width="3" height="3"/>
        <rect x="10" y="7" width="3" height="3"/>
        <rect x="10" y="3" width="3" height="3"/>
      </g>
      <path d="M22 13c-1 3-4 5-9 5-3 0-6-1-9-3l-1 4c2 2 6 3 10 3 6 0 11-3 11-9h-2z" fill="#2496ED"/>
    </BrandSVG>
  ),
  k8s: ({ size = 28 }) => (
    <BrandSVG size={size}>
      <polygon points="12,2 21,7 18,18 6,18 3,7" fill="none" stroke="#326CE5" strokeWidth="1.6"/>
      <polygon points="12,7 17,10 15,15 9,15 7,10" fill="#326CE5"/>
    </BrandSVG>
  ),

  // === Networking / Hardware ===
  cisco: ({ size = 28 }) => (
    <BrandSVG size={size} viewBox="0 0 60 28">
      <g fill="#1BA0D7">
        <rect x="2" y="11" width="2" height="6" rx="1"/>
        <rect x="6" y="9" width="2" height="10" rx="1"/>
        <rect x="10" y="5" width="2" height="18" rx="1"/>
        <rect x="14" y="9" width="2" height="10" rx="1"/>
        <rect x="18" y="11" width="2" height="6" rx="1"/>
        <rect x="24" y="11" width="2" height="6" rx="1"/>
        <rect x="28" y="9" width="2" height="10" rx="1"/>
        <rect x="32" y="5" width="2" height="18" rx="1"/>
        <rect x="36" y="9" width="2" height="10" rx="1"/>
        <rect x="40" y="11" width="2" height="6" rx="1"/>
      </g>
    </BrandSVG>
  ),
  mikrotik: ({ size = 28 }) => (
    <BrandSVG size={size}>
      <rect x="2" y="6" width="20" height="12" rx="2" fill="#293239"/>
      <circle cx="6" cy="12" r="1" fill="#0FA300"/>
      <circle cx="10" cy="12" r="1" fill="#0FA300"/>
      <circle cx="14" cy="12" r="1" fill="#0FA300"/>
      <circle cx="18" cy="12" r="1" fill="#0FA300"/>
    </BrandSVG>
  ),
  hikvision: ({ size = 28 }) => (
    <BrandSVG size={size}>
      <circle cx="12" cy="12" r="10" fill="#E60012"/>
      <circle cx="12" cy="12" r="4" fill="#fff"/>
      <circle cx="12" cy="12" r="2" fill="#E60012"/>
    </BrandSVG>
  ),

  // === Messaging / SaaS ===
  slack: ({ size = 28 }) => (
    <BrandSVG size={size}>
      <rect x="2" y="9" width="6" height="2" rx="1" fill="#36C5F0"/>
      <rect x="13" y="9" width="2" height="6" rx="1" fill="#2EB67D"/>
      <rect x="9" y="2" width="2" height="6" rx="1" fill="#ECB22E"/>
      <rect x="9" y="16" width="6" height="2" rx="1" fill="#E01E5A"/>
      <rect x="16" y="9" width="6" height="2" rx="1" fill="#36C5F0"/>
      <rect x="9" y="13" width="2" height="6" rx="1" fill="#E01E5A"/>
      <rect x="2" y="13" width="6" height="2" rx="1" fill="#ECB22E"/>
      <rect x="13" y="16" width="2" height="6" rx="1" fill="#2EB67D"/>
    </BrandSVG>
  ),
  github: ({ size = 28 }) => (
    <BrandSVG size={size}>
      <path d="M12 2C6.5 2 2 6.5 2 12c0 4.4 2.9 8.2 6.8 9.5.5.1.7-.2.7-.5v-1.7c-2.8.6-3.4-1.3-3.4-1.3-.5-1.2-1.1-1.5-1.1-1.5-.9-.6.1-.6.1-.6 1 .1 1.5 1 1.5 1 .9 1.5 2.4 1.1 3 .8.1-.7.4-1.1.6-1.4-2.2-.3-4.5-1.1-4.5-5 0-1.1.4-2 1-2.7-.1-.3-.4-1.3.1-2.7 0 0 .8-.3 2.7 1 .8-.2 1.7-.3 2.5-.3s1.7.1 2.5.3c1.9-1.3 2.7-1 2.7-1 .5 1.4.2 2.4.1 2.7.7.7 1 1.6 1 2.7 0 3.9-2.4 4.7-4.6 5 .4.3.7.9.7 1.8v2.7c0 .3.2.6.7.5C19.1 20.2 22 16.4 22 12c0-5.5-4.5-10-10-10z" fill="currentColor"/>
    </BrandSVG>
  ),
  whatsapp: ({ size = 28 }) => (
    <BrandSVG size={size}>
      <path d="M12 2a10 10 0 00-8.5 15.2L2 22l4.9-1.5A10 10 0 1012 2zm5.8 14c-.3.7-1.5 1.3-2.1 1.4-.5.1-1.2.1-2-.1-1.7-.5-3.5-2-4.9-3.8-.5-.7-.9-1.5-1.1-2.4 0-.9.3-1.7.7-2.1.3-.3.6-.4.8-.4h.6c.2 0 .4 0 .6.5.2.5.7 1.7.8 1.8.1.1.1.3 0 .5l-.4.5c-.1.2-.3.3-.1.6.1.3.6 1 1.3 1.6.9.8 1.7 1 2 1.2.2.1.4.1.5-.1l.7-.8c.2-.2.4-.2.6-.1.2.1 1.4.7 1.7.8.3.1.5.2.5.3 0 .3 0 1-.2 1.6z" fill="#25D366"/>
    </BrandSVG>
  ),

  // === AI ===
  claude: ({ size = 28 }) => (
    <BrandSVG size={size}>
      <rect width="24" height="24" rx="5" fill="#D97757"/>
      <path d="M7 16l2.5-7h1.7L13.6 16h-1.6l-.6-1.8h-2.6L8.3 16H7zm2.3-3.1h1.9L10.2 10l-.9 2.9zM15 9h1.6v7H15V9z" fill="#fff"/>
    </BrandSVG>
  ),
  openai: ({ size = 28 }) => (
    <BrandSVG size={size}>
      <circle cx="12" cy="12" r="10" fill="#000"/>
      <path d="M16 8.5a3 3 0 00-3-2.5 3 3 0 00-5 1 3 3 0 000 5.5 3 3 0 003 4.5 3 3 0 005-2 3 3 0 000-5.5h0zm-4 1l3 1.5v2.5L12 15l-3-1.5v-2.5L12 9.5z" stroke="#fff" strokeWidth="1" fill="none"/>
    </BrandSVG>
  ),

  // === Payments ===
  stripe: ({ size = 28 }) => (
    <BrandSVG size={size}>
      <rect width="24" height="24" rx="4" fill="#635BFF"/>
      <path d="M11 16c-2 0-4-.6-5-1.3v-2c1 .6 3 1.4 4.8 1.4 1 0 1.7-.3 1.7-1 0-.5-.5-.8-2-1.3-2-.6-3.5-1.3-3.5-3 0-1.7 1.5-2.8 4-2.8 1.5 0 3 .4 4 .9V8.6c-1.5-.5-2.8-.8-4-.8-.7 0-1.3.2-1.3.8 0 .5.6.8 2 1.2 2 .7 3.5 1.3 3.5 3.1 0 2-1.7 3.1-4.2 3.1z" fill="#fff"/>
    </BrandSVG>
  ),
  razorpay: ({ size = 28 }) => (
    <BrandSVG size={size}>
      <rect width="24" height="24" rx="4" fill="#3395FF"/>
      <path d="M5 19l5-14h3l-3 9h6l-2 5H9l1-3H7l-2 3z" fill="#fff"/>
    </BrandSVG>
  ),
  // === Other companies ===
  google: ({ size = 28 }) => (
    <BrandSVG size={size}>
      <path d="M21 12c0-.7-.1-1.4-.2-2H12v3.8h5c-.2 1.1-.9 2.1-1.9 2.8l3 2.3C19.8 17.3 21 14.8 21 12z" fill="#4285F4"/>
      <path d="M12 21c2.4 0 4.5-.8 6-2.1l-3-2.3c-.8.5-1.8.8-3 .8-2.3 0-4.2-1.6-4.9-3.7l-3.1 1.5C5.4 18.5 8.4 21 12 21z" fill="#34A853"/>
      <path d="M5.1 14.7c-.2-.7-.4-1.4-.4-2.2 0-.8.1-1.5.4-2.2L2 8.7C1.4 9.7 1 11 1 12.5s.4 2.8 1 3.8l3.1-1.6z" fill="#FBBC04"/>
      <path d="M12 6c1.3 0 2.5.5 3.4 1.3l2.5-2.5C16.4 3.4 14.3 2.5 12 2.5 8.4 2.5 5.3 4.5 3.7 7.5l3.1 1.5C7.6 6.9 9.6 6 12 6z" fill="#EA4335"/>
    </BrandSVG>
  ),
  microsoft: ({ size = 28 }) => (
    <BrandSVG size={size}>
      <rect x="2" y="2" width="9.5" height="9.5" fill="#F25022"/>
      <rect x="12.5" y="2" width="9.5" height="9.5" fill="#7FBA00"/>
      <rect x="2" y="12.5" width="9.5" height="9.5" fill="#00A4EF"/>
      <rect x="12.5" y="12.5" width="9.5" height="9.5" fill="#FFB900"/>
    </BrandSVG>
  ),
  apple: ({ size = 28 }) => (
    <BrandSVG size={size}>
      <path d="M17 13.7c0 3.2-2.4 5.3-2.5 5.3-.8.6-1.6.6-2 .6-.5 0-.9-.2-1.5-.4-.5-.2-1-.4-1.5-.4-.6 0-1 .2-1.5.4-.6.3-1 .4-1.5.4-.4 0-1.2 0-2-.7C3 17.1 2 14 3 11.5c1-2.5 3-3 4-3 .8 0 1.5.3 2 .5.5.2 1 .4 1.4.4.4 0 .9-.2 1.5-.5.6-.2 1.4-.5 2.4-.5.7 0 2.5.3 3.5 1.7-3 1.6-2.8 5.4-.8 6.5zM14 6c.5-.7.9-1.6.8-2.5-.8 0-1.7.5-2.3 1.2-.5.6-1 1.6-.8 2.5.9 0 1.8-.5 2.3-1.2z" fill="currentColor"/>
    </BrandSVG>
  ),
  meta: ({ size = 28 }) => (
    <BrandSVG size={size}>
      <path d="M2 18c0-3 1-7 3-9 1-1 2-2 4-2s3 1 4 3l3 6 2-3c1-2 1-3 3-3 2 0 3 2 3 4s-1 4-3 4c-1 0-2-1-3-2l-2-3-2 4c-1 2-2 3-4 3-3 0-5-2-5-5z" fill="#1877F2"/>
    </BrandSVG>
  ),
  shopify: ({ size = 28 }) => (
    <BrandSVG size={size}>
      <path d="M15 4l3 .8L20 21l-15 1L7 4l8 0z" fill="#95BF47"/>
      <path d="M12 7c-2 0-3 2-3 3l3 1c0 .5-1 1-2 1-2 0-3 1-3 2 0 2 3 2 3 4l5-1L13 7h-1z" fill="#fff"/>
    </BrandSVG>
  ),
  wordpress: ({ size = 28 }) => (
    <BrandSVG size={size}>
      <circle cx="12" cy="12" r="10" fill="#21759B"/>
      <path d="M4 12l4 11L6 12zm9-7l3 16L18 5zM8 6l8 13" stroke="#fff" strokeWidth="1.2" fill="none"/>
    </BrandSVG>
  ),
  hubspot: ({ size = 28 }) => (
    <BrandSVG size={size}>
      <circle cx="17" cy="16" r="4" fill="#FF7A59"/>
      <circle cx="6" cy="6" r="2" fill="#FF7A59"/>
      <path d="M6 8v8M8 14h5M17 12V5l-4 4" stroke="#FF7A59" strokeWidth="1.6" fill="none"/>
    </BrandSVG>
  ),
  twilio: ({ size = 28 }) => (
    <BrandSVG size={size}>
      <circle cx="12" cy="12" r="10" fill="#F22F46"/>
      <circle cx="9" cy="9" r="2" fill="#fff"/>
      <circle cx="15" cy="9" r="2" fill="#fff"/>
      <circle cx="9" cy="15" r="2" fill="#fff"/>
      <circle cx="15" cy="15" r="2" fill="#fff"/>
    </BrandSVG>
  ),
  vercel: ({ size = 28 }) => (
    <BrandSVG size={size}>
      <polygon points="12,3 22,20 2,20" fill="currentColor"/>
    </BrandSVG>
  ),
  figma: ({ size = 28 }) => (
    <BrandSVG size={size}>
      <circle cx="8" cy="6" r="3" fill="#F24E1E"/>
      <circle cx="14" cy="6" r="3" fill="#FF7262"/>
      <circle cx="14" cy="12" r="3" fill="#A259FF"/>
      <circle cx="8" cy="12" r="3" fill="#1ABCFE"/>
      <circle cx="8" cy="18" r="3" fill="#0ACF83"/>
    </BrandSVG>
  ),
  pinecone: ({ size = 28 }) => (
    <BrandSVG size={size}>
      <path d="M12 2L8 8h8l-4-6zm0 6l-5 7h10l-5-7zm0 7l-6 8h12l-6-8z" fill="#1B17B3"/>
    </BrandSVG>
  ),
  // generic fallback chip
  generic: ({ size = 28, color = "#0D9488", letter = "?" }) => (
    <BrandSVG size={size}>
      <rect width="24" height="24" rx="6" fill={color}/>
      <text x="12" y="17" textAnchor="middle" fontFamily="Manrope, sans-serif" fontWeight="700" fontSize="12" fill="#fff">{letter}</text>
    </BrandSVG>
  ),
};

// ── Letter-mark factory: clean consistent fallbacks for brands without unique SVG.
//    Keys are case/space-insensitive aliases mapped to {letter, color}.
const LetterBrands = {
  // CCTV / surveillance / access
  "dahua":      { l: "D", c: "#C8102E" },
  "cpplus":     { l: "CP", c: "#003F87" },
  "cp plus":    { l: "CP", c: "#003F87" },
  "hanwha":     { l: "H", c: "#F37021" },
  "anviz":      { l: "A", c: "#0066B3" },
  "zkteco":     { l: "ZK", c: "#E30613" },
  "essl":       { l: "eS", c: "#1F4E79" },
  "mantra":     { l: "M", c: "#F58220" },
  "honeywell":  { l: "H", c: "#E2231A" },
  "bosch":      { l: "B", c: "#EA0016" },
  "notifier":   { l: "N", c: "#D71920" },
  "spintly":    { l: "S", c: "#7B61FF" },
  // Networking / firewall
  "meraki":     { l: "M", c: "#67B346" },
  "fortinet":   { l: "F", c: "#EE3124" },
  "sophos":     { l: "S", c: "#0A4595" },
  "ubiquiti":   { l: "U", c: "#0559C9" },
  "aruba":      { l: "A", c: "#FF8300" },
  // Hardware
  "dell":       { l: "D", c: "#007DB8" },
  "hp":         { l: "HP", c: "#0096D6" },
  "hpe":        { l: "HPE", c: "#01A982" },
  "lenovo":     { l: "L", c: "#E2231A" },
  "supermicro": { l: "S", c: "#19355E" },
  "synology":   { l: "Sy", c: "#11479E" },
  "qnap":       { l: "Q", c: "#FF6900" },
  "apc":        { l: "APC", c: "#3DAE2B" },
  "vertiv":     { l: "V", c: "#28C7AB" },
  // Backup / security
  "veeam":      { l: "V", c: "#00B336" },
  "datto":      { l: "D", c: "#5B2D90" },
  "bitdefender":{ l: "B", c: "#ED1C24" },
  "kaspersky":  { l: "K", c: "#006D5C" },
  "truenas":    { l: "T", c: "#0095D5" },
  // Cloud
  "cloudflare": { l: "CF", c: "#F38020" },
  "terraform":  { l: "T", c: "#7B42BC" },
  "kubernetes": { l: "K", c: "#326CE5" },
  // Languages / frameworks
  "django":     { l: "Dj", c: "#092E20" },
  "tailwind":   { l: "Tw", c: "#06B6D4" },
  "flutter":    { l: "F", c: "#02569B" },
  "swift":      { l: "S", c: "#F05138" },
  "kotlin":     { l: "K", c: "#7F52FF" },
  "ruby":       { l: "R", c: "#CC342D" },
  "rails":      { l: "R", c: "#CC0000" },
  "go":         { l: "Go", c: "#00ADD8" },
  // Databases / data
  "mysql":      { l: "M", c: "#4479A1" },
  "bigquery":   { l: "BQ", c: "#669DF6" },
  "snowflake":  { l: "S", c: "#29B5E8" },
  "clickhouse": { l: "CH", c: "#FFCC01" },
  "metabase":   { l: "M", c: "#509EE3" },
  "airbyte":    { l: "A", c: "#615EFF" },
  "dbt":        { l: "dbt", c: "#FF694A" },
  "looker":     { l: "L", c: "#4286F4" },
  "tableau":    { l: "T", c: "#1F77B4" },
  "powerbi":    { l: "P", c: "#F2C811" },
  // AI / vector / orchestration
  "llama":      { l: "L", c: "#0066FF" },
  "mixtral":    { l: "M", c: "#FF7000" },
  "pgvector":   { l: "pg", c: "#336791" },
  "langchain":  { l: "LC", c: "#1C3A3A" },
  "llamaindex": { l: "Li", c: "#3D3D3D" },
  "weaviate":   { l: "W", c: "#26C6DA" },
  "chroma":     { l: "C", c: "#FF8C00" },
  "qdrant":     { l: "Q", c: "#DC382C" },
  "wb":         { l: "wb", c: "#FFBE00" },
  "weights & biases": { l: "wb", c: "#FFBE00" },
  // Tools / SaaS
  "googleworkspace": { l: "GW", c: "#4285F4" },
  "google workspace": { l: "GW", c: "#4285F4" },
  "microsoft365": { l: "M", c: "#D83B01" },
  "microsoft 365": { l: "M", c: "#D83B01" },
  "office365":  { l: "O", c: "#D83B01" },
  "teamviewer": { l: "T", c: "#0E8EE9" },
  "anydesk":    { l: "A", c: "#EF443B" },
  "zoho":       { l: "Z", c: "#E42527" },
  "zoho assist": { l: "Z", c: "#E42527" },
  "tally":      { l: "T", c: "#5B1F61" },
  "greythr":    { l: "G", c: "#10B981" },
  "keka":       { l: "K", c: "#5C5CE0" },
  "intune":     { l: "I", c: "#0078D4" },
  "jamf":       { l: "J", c: "#3F51B5" },
  // IoT
  "mqtt":       { l: "M", c: "#660066" },
  "lorawan":    { l: "Lo", c: "#0099CC" },
  "modbus":     { l: "Md", c: "#6B6B6B" },
  "opcua":      { l: "OP", c: "#1E5B9F" },
  "opc-ua":     { l: "OP", c: "#1E5B9F" },
  "grafana":    { l: "G", c: "#F46800" },
  "influxdb":   { l: "I", c: "#22ADF6" },
  "awsiot":     { l: "IoT", c: "#FF9900" },
  "aws iot":    { l: "IoT", c: "#FF9900" },
  "azureiot":   { l: "Iot", c: "#0078D4" },
  "azure iot hub": { l: "Iot", c: "#0078D4" },
};

// Auto-register letter-mark brands.
Object.entries(LetterBrands).forEach(([key, def]) => {
  if (!Brands[key]) {
    Brands[key] = ({ size = 28 }) => <Brands.generic size={size} letter={def.l} color={def.c} />;
  }
  // Also register normalised key (no spaces, lowercase) for techStack lookup
  const norm = key.replace(/[\s.&-]/g, '').toLowerCase();
  if (norm !== key && !Brands[norm]) {
    Brands[norm] = ({ size = 28 }) => <Brands.generic size={size} letter={def.l} color={def.c} />;
  }
});

window.Brands = Brands;
