SPB Git forge

spb/spinza

Public
8commits 1branches 0releases
1.6 MBsize
maindefault branch
16 days agolast push
TypeScript 97.6% SQL 1.4% JavaScript 0.5%
1.8 KB · 43 lines tsx
Raw Blame History
1import { cn } from "@/lib/utils";23/** Spinza mark: a ring split by a diagonal spin stroke — original, drawn inline. */4export function SpinzaMark({ className, glow = true }: { className?: string; glow?: boolean }) {5  return (6    <svg viewBox="0 0 64 64" className={cn("h-8 w-8", className)} aria-hidden>7      <defs>8        <linearGradient id="spz-g" x1="0" y1="0" x2="1" y2="1">9          <stop offset="0" stopColor="#f3e2ad" />10          <stop offset="0.5" stopColor="#c9a961" />11          <stop offset="1" stopColor="#8a6d2e" />12        </linearGradient>13        {glow ? (14          <filter id="spz-glow" x="-30%" y="-30%" width="160%" height="160%">15            <feGaussianBlur stdDeviation="2.2" result="b" />16            <feMerge>17              <feMergeNode in="b" />18              <feMergeNode in="SourceGraphic" />19            </feMerge>20          </filter>21        ) : null}22      </defs>23      <g filter={glow ? "url(#spz-glow)" : undefined}>24        <circle cx="32" cy="32" r="24" fill="none" stroke="url(#spz-g)" strokeWidth="5" strokeDasharray="112 40" strokeLinecap="round" transform="rotate(-50 32 32)" />25        <path d="M20 40 L44 24" stroke="url(#spz-g)" strokeWidth="6" strokeLinecap="round" />26        <circle cx="44" cy="24" r="4.5" fill="#f3e2ad" />27      </g>28    </svg>29  );30}3132export function SpinzaWordmark({ className, size = "md" }: { className?: string; size?: "sm" | "md" | "lg" }) {33  const s = { sm: "text-lg", md: "text-xl", lg: "text-3xl" }[size];34  return (35    <span className={cn("inline-flex items-center gap-2 font-semibold tracking-[-0.02em]", s, className)}>36      <SpinzaMark className={size === "lg" ? "h-10 w-10" : size === "sm" ? "h-6 w-6" : "h-7 w-7"} />37      <span>38        SPIN<span className="text-accent">ZA</span>39      </span>40    </span>41  );42}43