interface Props {
  id: string;
  size?: number;
  className?: string;
}

interface Visual {
  bg: string;
  fg: string;
  glyph: (size: number) => JSX.Element;
}

function star4(size: number, color: string) {
  // Sparkle / 4-point star — used for Claude.
  const s = size;
  const c = s / 2;
  const r = s * 0.36;
  const t = s * 0.08;
  return (
    <path
      d={`M ${c} ${c - r} C ${c} ${c - t}, ${c + t} ${c}, ${c + r} ${c} C ${c + t} ${c}, ${c} ${c + t}, ${c} ${c + r} C ${c} ${c + t}, ${c - t} ${c}, ${c - r} ${c} C ${c - t} ${c}, ${c} ${c - t}, ${c} ${c - r} Z`}
      fill={color}
    />
  );
}

function qoderGlyph(size: number) {
  return (
    <svg width={size} height={size} viewBox="0 0 1024 1024" aria-hidden="true">
      <path
        d="M0 0m227.555556 0l568.888888 0q227.555556 0 227.555556 227.555556l0 568.888888q0 227.555556-227.555556 227.555556l-568.888888 0q-227.555556 0-227.555556-227.555556l0-568.888888q0-227.555556 227.555556-227.555556Z"
        fill="#111113"
      />
      <path
        d="M839.68 576.910222V463.189333c0-64.603022-28.114489-116.451556-77.050311-142.262044l-252.757333-133.279289-1.268623 2.423467-1.268622 2.417777c47.092622 24.832 74.114844 74.922667 74.114845 137.426489v113.720889c0 3.424711-0.091022 7.025778-0.261689 10.626845-0.028444 0.694044-0.085333 1.3824-0.142223 2.104889l-0.113777 1.700977c-0.147911 2.275556-0.290133 4.579556-0.523378 6.855111-0.085333 0.9216-0.199111 1.871644-0.312889 2.787556l-0.261689 2.161778c-0.227556 1.905778-0.432356 3.777422-0.722489 5.677511-0.142222 1.063822-0.312889 2.104889-0.489244 3.168711l-0.256 1.644089c-0.318578 1.928533-0.637156 3.857067-1.006934 5.7856a282.646756 282.646756 0 0 1-1.763555 8.584533l-0.199111 0.836267c-0.631467 2.7648-1.325511 5.501156-2.070756 8.237511l-0.6656 2.417778c-0.773689 2.7648-1.581511 5.5296-2.446222 8.300089l-0.779378 2.389333a258.639644 258.639644 0 0 1-3.111822 9.045333c-0.284444 0.802133-0.603022 1.581511-0.9216 2.389334l-0.489244 1.297066c-0.893156 2.304-1.786311 4.636444-2.730667 6.940445-0.551822 1.353956-1.154844 2.707911-1.735111 4.061866l-0.199111 0.489245c-0.750933 1.757867-1.524622 3.515733-2.332445 5.245155-0.694044 1.553067-1.439289 3.077689-2.161778 4.608-0.836267 1.729422-1.6384 3.424711-2.503111 5.12a364.253867 364.253867 0 0 1-4.926577 9.307023c-0.864711 1.558756-1.763556 3.111822-2.651023 4.664889-0.864711 1.501867-1.729422 3.026489-2.651022 4.494222-0.9216 1.558756-1.871644 3.083378-2.850133 4.608-0.9216 1.473422-1.820444 2.912711-2.7648 4.352-0.978489 1.530311-1.991111 2.998044-3.140267 4.721778-0.9216 1.359644-1.8432 2.7136-2.7648 4.039111a415.8976 415.8976 0 0 1-6.337422 8.669866c-1.063822 1.410844-2.133333 2.7648-3.2256 4.1472-1.1264 1.410844-2.247111 2.844444-3.373511 4.232534-0.978489 1.211733-1.985422 2.389333-2.992356 3.572622l-0.2048 0.227555c-1.319822 1.5872-2.673778 3.140267-4.061866 4.699023a305.948444 305.948444 0 0 1-7.458134 8.152177c-1.063822 1.120711-2.161778 2.218667-3.254044 3.339378-1.877333 1.900089-3.771733 3.743289-5.705956 5.586489l-0.830578 0.807822-2.048 1.956978c-2.417778 2.247111-4.869689 4.437333-7.3728 6.599111l-0.694044 0.603022-0.802133 0.722489-1.183289 0.978489c-2.048 1.729422-4.118756 3.396267-6.1952 5.063111-0.631467 0.523378-1.291378 1.012622-1.956978 1.536l-0.489244 0.369778c-1.757867 1.353956-3.515733 2.673778-5.444267 4.090311-0.807822 0.574578-1.581511 1.183289-2.389333 1.757867-2.048 1.467733-4.096 2.878578-6.166756 4.266667l-1.609956 1.120711c-2.707911 1.786311-5.444267 3.515733-8.209066 5.182577l-1.763556 1.035378a304.355556 304.355556 0 0 1-6.593422 3.805867c-0.659911 0.375467-1.325511 0.7168-1.991111 1.063822l-1.029689 0.546133c-1.8432 0.978489-3.657956 1.934222-5.501156 2.884267l-3.026488 1.467733-0.341334 0.170667c-1.792 0.864711-3.549867 1.672533-5.364622 2.480356-1.149156 0.512-2.304 1.035378-3.4816 1.524622-1.820444 0.779378-3.657956 1.524622-5.472711 2.247111l-0.978489 0.375467-2.423467 0.950044c-1.991111 0.750933-4.004978 1.439289-6.018844 2.133333l-1.092267 0.369778c-0.608711 0.2048-1.211733 0.432356-1.820444 0.637156a230.968889 230.968889 0 0 1-9.045334 2.730666l-17.652622 4.841245c-2.616889 0.722489-5.245156 1.388089-7.8336 1.991111-0.489244 0.113778-0.950044 0.199111-1.439289 0.284444l-1.962666 0.403912c-1.467733 0.318578-2.907022 0.637156-4.380445 0.893155-0.603022 0.113778-1.234489 0.2048-1.837511 0.318578l-2.366578 0.398222c-1.149156 0.2048-2.304 0.4096-3.453155 0.551822-0.6656 0.085333-1.325511 0.170667-1.991111 0.227556l-2.389334 0.290133c-1.063822 0.147911-2.127644 0.261689-3.197155 0.375467-0.432356 0.028444-0.864711 0.056889-1.268622 0.113778l-0.978489 0.091022c-1.666844 0.142222-3.339378 0.284444-5.006223 0.369778-0.637156 0.028444-1.240178 0.056889-1.877333 0.056889h-0.9216c-1.467733 0.091022-2.907022 0.147911-4.346311 0.147911H327.68c-1.353956 0-2.736356-0.028444-4.090311-0.085334-0.750933 0-1.496178-0.056889-2.247111-0.113777h-0.750934c-1.410844-0.113778-2.787556-0.2048-4.204088-0.318578l-1.8432-0.170667c-1.757867-0.176356-3.487289-0.347022-5.239467-0.580267l-1.1264-0.142222c-2.048-0.290133-4.090311-0.608711-6.132622-0.978489l-1.530311-0.290133c-1.262933-0.261689-2.531556-0.517689-3.800178-0.807822-1.991111-0.432356-3.948089-0.9216-5.905067-1.467734l-0.836267-0.227555c-0.375467-0.091022-0.7168-0.2048-1.092266-0.290133a144.571733 144.571733 0 0 1-7.520711-2.389334l-1.786311-0.6656a117.077333 117.077333 0 0 1-5.267912-2.048l-1.991111-0.859022-0.432355-0.2048a128.529067 128.529067 0 0 1-4.522667-2.070756l-0.688355-0.347022q-0.261689-0.142222-0.403912-0.2048l-18.807466-9.847466 13.624889 13.624888h0.455111L513.706667 828.199822c0.864711 0.466489 1.729422 0.893156 2.616889 1.353956 0.290133 0.147911 0.580267 0.261689 0.864711 0.403911l0.551822 0.261689c1.553067 0.750933 3.106133 1.467733 4.721778 2.161778l0.4608 0.199111c0.694044 0.290133 1.353956 0.603022 2.048 0.893155 1.809067 0.750933 3.623822 1.439289 5.472711 2.133334l0.603022 0.227555c0.318578 0.119467 0.603022 0.233244 0.864711 0.347022l0.375467 0.113778c2.531556 0.893156 5.176889 1.729422 7.8336 2.480356 0.398222 0.113778 0.807822 0.227556 1.206044 0.312889l0.779378 0.2048c2.019556 0.546133 4.096 1.063822 6.166756 1.524622l0.489244 0.113778 0.745244 0.176355c0.608711 0.142222 1.240178 0.256 1.877334 0.375467l2.446222 0.4608c2.104889 0.375467 4.209778 0.7168 6.337422 1.035378l1.1776 0.142222c1.786311 0.233244 3.601067 0.432356 5.415822 0.608711l3.544178 0.312889 1.672534 0.085333 1.3824 0.062578c0.9216 0.056889 1.814756 0.113778 2.7648 0.142222 1.297067 0.056889 2.616889 0.056889 3.919644 0.085333h3.367822c1.410844 0 2.821689-0.056889 4.522667-0.142222h0.9216c0.631467-0.056889 1.297067-0.056889 1.956978-0.113778 1.700978-0.091022 3.4304-0.227556 5.159822-0.375466l0.9216-0.085334c0.455111-0.034133 0.9216-0.056889 1.6384-0.147911l3.026489-0.341333 2.275555-0.284444c0.745244-0.091022 1.496178-0.182044 2.247111-0.295823 1.206044-0.170667 2.389333-0.375467 3.601067-0.568889l2.304-0.381155c0.659911-0.113778 1.325511-0.199111 1.985422-0.341333 1.496178-0.284444 2.998044-0.608711 4.494223-0.927289l1.8432-0.369778 1.644088-0.341333c2.673778-0.6144 5.353244-1.302756 8.061156-2.048l17.658311-4.835556a193.820444 193.820444 0 0 0 11.121778-3.436089l1.149155-0.398222c2.076444-0.722489 4.152889-1.444978 6.1952-2.195911 0.893156-0.312889 1.757867-0.682667 2.616889-1.035378l0.836267-0.341333c1.877333-0.750933 3.777422-1.501867 5.620622-2.309689 1.1776-0.512 2.360889-1.035378 3.566934-1.553067 1.848889-0.836267 3.663644-1.672533 5.4784-2.537244l0.603022-0.284445 2.850133-1.3824c1.900089-0.950044 3.771733-1.934222 5.649067-2.941155l1.035378-0.546134c0.688356-0.375467 1.3824-0.722489 2.048-1.092266 2.275556-1.240178 4.494222-2.56 6.735644-3.8912l0.750933-0.432356c0.341333-0.199111 0.688356-0.398222 1.063823-0.603022 2.673778-1.615644 5.330489-3.282489 7.953066-5.006222l1.814756-1.245867 55.506489 25.2928c32.426667 14.774044 69.302044-8.931556 69.302044-44.589511v-205.431467-0.056889l0.113778 0.113778z"
        fill="#2ADB5C"
      />
      <path
        d="M510.008889 187.704889c-0.859022-0.455111-1.723733-0.893156-2.588445-1.319822-0.4608-0.233244-0.950044-0.432356-1.410844-0.6656a168.533333 168.533333 0 0 0-4.664889-2.161778l-2.503111-1.092267a112.145067 112.145067 0 0 0-5.449956-2.104889c-0.489244-0.170667-0.978489-0.398222-1.496177-0.568889-0.113778-0.034133-0.227556-0.091022-0.341334-0.119466-2.571378-0.893156-5.159822-1.729422-7.7824-2.480356-0.659911-0.199111-1.325511-0.341333-1.991111-0.512a110.933333 110.933333 0 0 0-6.104178-1.501866c-0.432356-0.085333-0.836267-0.227556-1.234488-0.318578-0.893156-0.199111-1.786311-0.341333-2.679467-0.512-0.523378-0.119467-1.069511-0.2048-1.5872-0.324267a144.128 144.128 0 0 0-6.308978-1.006933c-0.398222-0.056889-0.802133-0.085333-1.206044-0.142222-1.786311-0.227556-3.544178-0.432356-5.358934-0.603023l-1.900089-0.170666c-0.551822-0.062578-1.097956-0.119467-1.644088-0.147911-0.893156-0.056889-1.786311-0.085333-2.673778-0.142223a112.241778 112.241778 0 0 0-3.117511-0.147911c-1.3824-0.056889-2.787556-0.056889-4.204089-0.085333-1.006933 0-2.048-0.028444-3.054934 0-1.467733 0-2.963911 0.085333-4.460088 0.113778-0.955733 0.028444-1.934222 0.056889-2.884267 0.113777-1.695289 0.091022-3.424711 0.233244-5.125689 0.375467l-2.332444 0.170667h-0.227556c-1.388089 0.147911-2.798933 0.347022-4.209778 0.523378-1.120711 0.142222-2.218667 0.256-3.339378 0.398222-1.5872 0.233244-3.168711 0.523378-4.755911 0.779378-1.035378 0.170667-2.070756 0.318578-3.111822 0.523377-1.780622 0.341333-3.595378 0.7168-5.410133 1.120711-0.864711 0.170667-1.706667 0.341333-2.565689 0.546134-2.679467 0.608711-5.358933 1.297067-8.0384 2.048l-17.652622 4.835555c-3.111822 0.864711-6.200889 1.786311-9.272889 2.798934-1.012622 0.312889-1.991111 0.688356-2.998045 1.035377-2.076444 0.7168-4.152889 1.439289-6.200889 2.190223-1.149156 0.432356-2.298311 0.893156-3.4816 1.353955-1.871644 0.745244-3.743289 1.496178-5.614933 2.304l-3.572622 1.553067a318.464 318.464 0 0 0-5.472711 2.537244c-1.149156 0.546133-2.304 1.092267-3.458845 1.666845-1.900089 0.950044-3.771733 1.934222-5.643377 2.941155-1.035378 0.546133-2.070756 1.092267-3.083378 1.6384-2.275556 1.240178-4.494222 2.565689-6.741334 3.8912-0.603022 0.341333-1.206044 0.688356-1.814755 1.063823-2.673778 1.615644-5.3248 3.316622-7.975822 5.040355-0.142222 0.091022-0.284444 0.2048-0.432356 0.290133-0.574578 0.375467-1.120711 0.779378-1.672533 1.154845a245.532444 245.532444 0 0 0-8.897422 6.2464c-1.820444 1.353956-3.629511 2.707911-5.415823 4.096-0.836267 0.625778-1.672533 1.291378-2.480355 1.922844-2.127644 1.706667-4.260978 3.4304-6.365867 5.188267-0.398222 0.341333-0.802133 0.659911-1.206044 0.978489-0.085333 0.056889-0.170667 0.142222-0.261689 0.199111-0.432356 0.375467-0.836267 0.779378-1.268622 1.154844-2.531556 2.190222-5.063111 4.437333-7.515023 6.741334-1.006933 0.9216-1.956978 1.871644-2.9696 2.821689-1.956978 1.877333-3.885511 3.771733-5.814044 5.705955-0.523378 0.512-1.041067 1.006933-1.558756 1.524622-0.603022 0.603022-1.149156 1.268622-1.757866 1.871645a322.389333 322.389333 0 0 0-4.289423 4.608l-3.367822 3.714844c-1.416533 1.5872-2.770489 3.197156-4.152889 4.778667-0.688356 0.813511-1.3824 1.592889-2.048 2.395022-0.398222 0.489244-0.796444 1.006933-1.206044 1.496178-1.1776 1.444978-2.332444 2.884267-3.453156 4.352-1.097956 1.410844-2.218667 2.821689-3.316622 4.232533-1.120711 1.467733-2.218667 2.9696-3.310933 4.465778-0.688356 0.950044-1.410844 1.877333-2.104889 2.850133-0.369778 0.517689-0.688356 1.041067-1.063822 1.558756-1.006933 1.439289-1.991111 2.907022-2.998045 4.346311a233.198933 233.198933 0 0 0-5.905066 9.073778c-0.625778 0.978489-1.262933 1.962667-1.871645 2.9696-0.341333 0.574578-0.659911 1.1776-1.035378 1.757867-0.9216 1.524622-1.814756 3.049244-2.673777 4.608a255.488 255.488 0 0 0-2.7136 4.778666c-0.864711 1.558756-1.695289 3.140267-2.531556 4.699022-0.517689 0.978489-1.097956 1.956978-1.5872 2.963912-0.312889 0.603022-0.574578 1.211733-0.893156 1.814755-0.893156 1.757867-1.729422 3.515733-2.588444 5.2736-0.750933 1.553067-1.501867 3.106133-2.218667 4.693333-0.807822 1.786311-1.5872 3.572622-2.360889 5.358934-0.4608 1.063822-0.984178 2.127644-1.416533 3.2256-0.199111 0.455111-0.369778 0.950044-0.568889 1.439289-0.984178 2.332444-1.877333 4.693333-2.798933 7.088355-0.489244 1.262933-0.978489 2.503111-1.439289 3.771734-1.1264 3.054933-2.161778 6.132622-3.168711 9.244444-0.170667 0.517689-0.375467 1.035378-0.546133 1.5872 0 0.056889-0.028444 0.142222-0.056889 0.199111-0.091022 0.227556-0.147911 0.489244-0.227556 0.722489-0.898844 2.821689-1.706667 5.643378-2.5088 8.465067-0.233244 0.836267-0.4608 1.644089-0.6656 2.480355-0.750933 2.787556-1.467733 5.614933-2.104889 8.436622-0.056889 0.284444-0.142222 0.580267-0.199111 0.864712a214.471111 214.471111 0 0 0-1.581511 7.463822c-0.091022 0.455111-0.147911 0.893156-0.233244 1.353955-0.398222 2.070756-0.722489 4.1472-1.063823 6.2464-0.261689 1.530311-0.517689 3.083378-0.750933 4.608-0.318578 2.190222-0.546133 4.380444-0.807822 6.570667-0.170667 1.439289-0.375467 2.878578-0.489245 4.323556-0.227556 2.417778-0.398222 4.864-0.546133 7.310222-0.085333 1.211733-0.199111 2.389333-0.261689 3.601066-0.113778 3.544178-0.199111 7.202133-0.199111 10.831645v113.720889c0 41.449244 11.753244 76.8512 31.914667 103.520711a133.159822 133.159822 0 0 0 16.622933 18.346667 133.131378 133.131378 0 0 0 27.995022 19.740444l252.757334 133.245156c-46.427022-24.484978-76.498489-75.269689-76.532623-141.602134v-113.720889c0-3.629511 0.091022-7.287467 0.261689-10.922666 0.056889-1.206044 0.170667-2.389333 0.261689-3.595378 0.170667-2.446222 0.312889-4.869689 0.546133-7.315911 0.142222-1.439289 0.341333-2.878578 0.489245-4.323556 0.256-2.184533 0.489244-4.380444 0.807822-6.564978 0.227556-1.524622 0.489244-3.083378 0.745245-4.608 0.347022-2.076444 0.694044-4.175644 1.069511-6.252088 0.546133-2.935467 1.149156-5.876622 1.814755-8.783645 0.056889-0.284444 0.142222-0.574578 0.199111-0.864711 0.659911-2.821689 1.353956-5.643378 2.104889-8.442311 0.227556-0.802133 0.432356-1.6384 0.659911-2.446222 0.779378-2.821689 1.615644-5.671822 2.503111-8.470756 0.091022-0.227556 0.147911-0.489244 0.233245-0.7168 0.170667-0.574578 0.403911-1.183289 0.603022-1.763555 1.012622-3.072 2.048-6.189511 3.168711-9.238756 0.4608-1.268622 0.955733-2.503111 1.444978-3.777422 0.893156-2.360889 1.814756-4.721778 2.787556-7.082667 0.637156-1.558756 1.3312-3.111822 1.991111-4.636444 0.779378-1.786311 1.558756-3.572622 2.360889-5.358934 0.722489-1.5872 1.473422-3.140267 2.218666-4.693333 0.836267-1.763556 1.700978-3.515733 2.594134-5.2736 0.807822-1.615644 1.6384-3.197156 2.474666-4.8128a241.379556 241.379556 0 0 1 5.245156-9.472l2.673778-4.608c0.955733-1.592889 1.934222-3.140267 2.912711-4.699022 0.9216-1.496178 1.877333-2.963911 2.821689-4.465778 1.012622-1.553067 2.048-3.077689 3.083377-4.608a242.323911 242.323911 0 0 1 6.166756-8.726756c1.092267-1.496178 2.184533-2.998044 3.310933-4.465777 1.092267-1.439289 2.190222-2.821689 3.310934-4.232534 1.154844-1.439289 2.304-2.912711 3.458844-4.352 1.063822-1.297067 2.161778-2.588444 3.254044-3.885511 1.3824-1.615644 2.730667-3.2256 4.1472-4.8128 1.092267-1.240178 2.218667-2.474667 3.339378-3.714844 1.410844-1.553067 2.855822-3.083378 4.295111-4.608a272.366933 272.366933 0 0 1 9.130667-9.102222c0.978489-0.950044 1.956978-1.900089 2.963911-2.821689 2.480356-2.304 4.983467-4.551111 7.520711-6.741334 0.517689-0.432356 1.006933-0.9216 1.524622-1.353955 0.403911-0.341333 0.807822-0.6656 1.211734-0.978489 2.104889-1.763556 4.209778-3.487289 6.365866-5.188267 0.836267-0.659911 1.672533-1.291378 2.503112-1.928533 1.786311-1.3824 3.601067-2.7648 5.415822-4.090311l2.594133-1.900089c2.076444-1.496178 4.209778-2.9696 6.308978-4.380445 0.546133-0.369778 1.092267-0.773689 1.672533-1.120711 2.7648-1.8432 5.558044-3.601067 8.379734-5.330489 0.603022-0.341333 1.211733-0.688356 1.786311-1.035377 2.247111-1.325511 4.494222-2.651022 6.769777-3.8912 1.006933-0.574578 2.048-1.092267 3.083378-1.6384a211.495822 211.495822 0 0 1 9.102222-4.608c1.814756-0.864711 3.657956-1.729422 5.501156-2.565689l3.538489-1.553067c1.877333-0.807822 3.748978-1.558756 5.649067-2.309689 1.149156-0.455111 2.304-0.9216 3.453155-1.348266 2.048-0.779378 4.118756-1.501867 6.1952-2.190223l2.998045-1.041066a214.243556 214.243556 0 0 1 9.272888-2.787556l17.658312-4.841244a182.385778 182.385778 0 0 1 8.032711-2.019556c0.9216-0.199111 1.820444-0.375467 2.707911-0.574578 1.763556-0.375467 3.515733-0.779378 5.245155-1.092266 1.063822-0.2048 2.133333-0.347022 3.197156-0.523378 1.553067-0.256 3.111822-0.546133 4.664889-0.773689 1.1264-0.170667 2.247111-0.261689 3.373511-0.403911 1.467733-0.170667 2.935467-0.375467 4.4032-0.517689 0.779378-0.091022 1.530311-0.113778 2.304-0.170667 1.729422-0.147911 3.458844-0.290133 5.159822-0.381155 0.950044-0.056889 1.900089-0.056889 2.844445-0.113778 1.501867-0.056889 3.003733-0.113778 4.494222-0.142222h3.060622c1.410844 0 2.821689 0 4.204089 0.085333 1.035378 0.028444 2.070756 0.085333 3.111822 0.142222 1.439289 0.091022 2.878578 0.170667 4.289422 0.290134l1.900089 0.170666c1.786311 0.170667 3.572622 0.375467 5.358934 0.608711 0.398222 0.056889 0.807822 0.085333 1.211733 0.142223 2.127644 0.284444 4.232533 0.631467 6.308978 1.006933 0.512 0.085333 1.063822 0.2048 1.581511 0.318578 1.325511 0.261689 2.616889 0.546133 3.948089 0.836266a208.292978 208.292978 0 0 1 8.0896 2.013867c2.622578 0.750933 5.216711 1.558756 7.7824 2.446222 0.625778 0.233244 1.234489 0.466489 1.871644 0.694045 1.814756 0.6656 3.629511 1.353956 5.415822 2.104889 0.830578 0.341333 1.666844 0.7168 2.503111 1.092266 1.581511 0.694044 3.140267 1.410844 4.664889 2.161778 1.353956 0.659911 2.679467 1.297067 4.004978 1.991111l-252.757333-133.256533z"
        fill="#FFFFFF"
      />
    </svg>
  );
}

const VISUALS: Record<string, Visual> = {
  // Claude — warm Anthropic terracotta with sparkle.
  claude: {
    bg: 'linear-gradient(135deg, #d97757 0%, #b85a3b 100%)',
    fg: '#fff7ef',
    glyph: (s) => star4(s, '#fff7ef'),
  },
  // Codex — OpenAI signature dark green knot.
  codex: {
    bg: 'linear-gradient(135deg, #1a1a1a 0%, #303030 100%)',
    fg: '#10a37f',
    glyph: (s) => {
      const c = s / 2;
      const r = s * 0.32;
      return (
        <g
          transform={`rotate(15 ${c} ${c})`}
          stroke="#10a37f"
          strokeWidth={s * 0.07}
          fill="none"
          strokeLinecap="round"
        >
          <ellipse cx={c} cy={c} rx={r} ry={r * 0.45} />
          <ellipse
            cx={c}
            cy={c}
            rx={r}
            ry={r * 0.45}
            transform={`rotate(60 ${c} ${c})`}
          />
          <ellipse
            cx={c}
            cy={c}
            rx={r}
            ry={r * 0.45}
            transform={`rotate(120 ${c} ${c})`}
          />
        </g>
      );
    },
  },
  // Gemini — Google blue/purple with diamond spark.
  gemini: {
    bg: 'linear-gradient(135deg, #4285f4 0%, #9b72cb 60%, #d96570 100%)',
    fg: '#ffffff',
    glyph: (s) => star4(s, '#ffffff'),
  },
  // OpenCode — terminal green angle brackets.
  opencode: {
    bg: 'linear-gradient(135deg, #064e3b 0%, #0f766e 100%)',
    fg: '#a7f3d0',
    glyph: (s) => {
      const c = s / 2;
      const off = s * 0.16;
      const arm = s * 0.12;
      return (
        <g
          stroke="#a7f3d0"
          strokeWidth={s * 0.08}
          fill="none"
          strokeLinecap="round"
          strokeLinejoin="round"
        >
          <polyline points={`${c - off + arm},${c - arm} ${c - off},${c} ${c - off + arm},${c + arm}`} />
          <polyline points={`${c + off - arm},${c - arm} ${c + off},${c} ${c + off - arm},${c + arm}`} />
        </g>
      );
    },
  },
  // Cursor — clean black with a cursor arrow.
  'cursor-agent': {
    bg: 'linear-gradient(135deg, #18181b 0%, #3f3f46 100%)',
    fg: '#ffffff',
    glyph: (s) => {
      const c = s / 2;
      const o = s * 0.22;
      return (
        <path
          d={`M ${c - o} ${c - o} L ${c + o * 0.9} ${c} L ${c} ${c + o * 0.2} L ${c - o * 0.05} ${c + o * 0.85} Z`}
          fill="#ffffff"
        />
      );
    },
  },
  // GitHub Copilot — GitHub-dark with the Copilot two-eye mark.
  copilot: {
    bg: 'linear-gradient(135deg, #0d1117 0%, #1f2937 100%)',
    fg: '#ffffff',
    glyph: (s) => {
      const c = s / 2;
      const eyeOff = s * 0.14;
      const eyeRx = s * 0.075;
      const eyeRy = s * 0.12;
      return (
        <g fill="#ffffff">
          <ellipse cx={c - eyeOff} cy={c} rx={eyeRx} ry={eyeRy} />
          <ellipse cx={c + eyeOff} cy={c} rx={eyeRx} ry={eyeRy} />
        </g>
      );
    },
  },
  // Qwen — Alibaba indigo with stylized Q.
  qwen: {
    bg: 'linear-gradient(135deg, #615ced 0%, #8b5cf6 100%)',
    fg: '#ffffff',
    glyph: (s) => {
      const c = s / 2;
      const r = s * 0.26;
      return (
        <g fill="none" stroke="#ffffff" strokeWidth={s * 0.07} strokeLinecap="round">
          <circle cx={c} cy={c} r={r} />
          <line x1={c + r * 0.45} y1={c + r * 0.45} x2={c + r * 0.95} y2={c + r * 0.95} />
        </g>
      );
    },
  },
  // Qoder — black app tile with the official green/white Qoder mark.
  qoder: {
    bg: '#111113',
    fg: '#ffffff',
    glyph: qoderGlyph,
  },
  // DeepSeek — DeepSeek-blue with abstract whale-tail / wave glyph.
  deepseek: {
    bg: 'linear-gradient(135deg, #4d6bfe 0%, #1f3fce 100%)',
    fg: '#ffffff',
    glyph: (s) => {
      const c = s / 2;
      const r = s * 0.3;
      return (
        <g fill="none" stroke="#ffffff" strokeWidth={s * 0.08} strokeLinecap="round" strokeLinejoin="round">
          <path d={`M ${c - r} ${c + r * 0.3} Q ${c - r * 0.4} ${c - r * 0.6}, ${c} ${c - r * 0.1} T ${c + r} ${c + r * 0.3}`} />
          <path d={`M ${c - r * 0.6} ${c + r * 0.7} Q ${c} ${c + r * 0.2}, ${c + r * 0.6} ${c + r * 0.7}`} />
        </g>
      );
    },
  },
  // MiMo — Xiaomi orange with "Mi" stylized mark.
  mimo: {
    bg: 'linear-gradient(135deg, #FF6900 0%, #FF4D00 100%)',
    fg: '#ffffff',
    glyph: (s) => {
      const c = s / 2;
      const r = s * 0.22;
      return (
        <g fill="none" stroke="#ffffff" strokeWidth={s * 0.06} strokeLinecap="round" strokeLinejoin="round">
          {/* Stylized "Mi" — three vertical bars */}
          <line x1={c - r * 0.9} y1={c - r * 0.6} x2={c - r * 0.9} y2={c + r * 0.8} />
          <line x1={c - r * 0.1} y1={c - r * 0.6} x2={c - r * 0.1} y2={c + r * 0.8} />
          <line x1={c + r * 0.9} y1={c - r * 0.6} x2={c + r * 0.9} y2={c + r * 0.8} />
          {/* Connecting roof */}
          <polyline points={`${c - r * 0.9},${c - r * 0.6} ${c - r * 0.1},${c - r * 1.2} ${c + r * 0.9},${c - r * 0.6}`} />
        </g>
      );
    },
  },
};

const FALLBACK: Visual = {
  bg: 'linear-gradient(135deg, #6b7280 0%, #4b5563 100%)',
  fg: '#ffffff',
  glyph: (s) => {
    const c = s / 2;
    const r = s * 0.18;
    return <circle cx={c} cy={c} r={r} fill="#ffffff" />;
  },
};

export function AgentIcon({ id, size = 36, className }: Props) {
  const v = VISUALS[id] ?? FALLBACK;
  return (
    <span
      className={'agent-icon' + (className ? ' ' + className : '')}
      style={{
        width: size,
        height: size,
        background: v.bg,
        borderRadius: Math.round(size * 0.28),
      }}
      aria-hidden="true"
    >
      <svg width={size} height={size} viewBox={`0 0 ${size} ${size}`} fill={v.fg}>
        {v.glyph(size)}
      </svg>
    </span>
  );
}
