Repository Public MIT
1import { cn } from "@/lib/utils";23interface LogoMarkProps {4 className?: string;5 /** taille en px du carré */6 size?: number;7}89/** Monogramme VQuant : « V » + trajectoire haussière sur tuile dégradée. */10export function LogoMark({ className, size = 32 }: LogoMarkProps) {11 return (12 <span13 aria-hidden14 className={cn("relative inline-grid place-items-center shrink-0 rounded-[28%] bg-brand text-white shadow-brand overflow-hidden", className)}15 style={{ width: size, height: size }}16 >17 <span className="pointer-events-none absolute inset-0 bg-gradient-to-br from-white/35 via-transparent to-black/10" />18 <svg viewBox="0 0 64 64" width={size} height={size} className="relative">19 <path d="M14 22 L26 44 L38 22" fill="none" stroke="currentColor" strokeWidth="6" strokeLinecap="round" strokeLinejoin="round" />20 <path d="M36 36 L44 27 L50 32 L54 18" fill="none" stroke="currentColor" strokeWidth="4" strokeLinecap="round" strokeLinejoin="round" opacity=".95" />21 <circle cx="54" cy="18" r="3.2" fill="currentColor" />22 </svg>23 </span>24 );25}2627interface LogoProps {28 className?: string;29 size?: number;30 withWordmark?: boolean;31 wordmarkClassName?: string;32}3334export function Logo({ className, size = 32, withWordmark = true, wordmarkClassName }: LogoProps) {35 return (36 <span className={cn("inline-flex items-center gap-2.5 select-none", className)}>37 <LogoMark size={size} />38 {withWordmark && (39 <span className={cn("font-display font-extrabold tracking-tight leading-none text-[1.05rem]", wordmarkClassName)}>40 <span className="text-foreground">V</span>41 <span className="text-brand">Quant</span>42 </span>43 )}44 </span>45 );46}47