2025-11-07 11:26:19 +01:00
|
|
|
'use client';
|
|
|
|
|
|
|
|
|
|
import { motion } from 'framer-motion';
|
|
|
|
|
|
|
|
|
|
export default function Logo({ className = '', size = 120 }: { className?: string; size?: number }) {
|
|
|
|
|
return (
|
|
|
|
|
<motion.svg
|
|
|
|
|
width={size}
|
|
|
|
|
height={size}
|
|
|
|
|
viewBox="0 0 200 200"
|
|
|
|
|
fill="none"
|
|
|
|
|
xmlns="http://www.w3.org/2000/svg"
|
|
|
|
|
className={className}
|
2025-11-09 15:54:15 +01:00
|
|
|
initial={{ opacity: 0, scale: 0.9 }}
|
|
|
|
|
animate={{ opacity: 1, scale: 1 }}
|
|
|
|
|
transition={{ duration: 0.6, ease: 'easeOut' }}
|
2025-11-07 11:26:19 +01:00
|
|
|
>
|
2025-11-09 16:08:28 +01:00
|
|
|
{/* Wrench (Lucide) - vertical */}
|
2025-11-09 15:49:32 +01:00
|
|
|
<motion.g
|
2025-11-09 16:08:28 +01:00
|
|
|
transform="translate(100, 100) rotate(0) scale(5) translate(-12, -12)"
|
2025-11-09 15:56:57 +01:00
|
|
|
initial={{ pathLength: 0, opacity: 0 }}
|
|
|
|
|
animate={{ pathLength: 1, opacity: 1 }}
|
|
|
|
|
transition={{ duration: 1.2, ease: 'easeInOut' }}
|
2025-11-07 11:26:19 +01:00
|
|
|
>
|
2025-11-09 15:56:57 +01:00
|
|
|
<motion.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.94l-3.76 3.76z"
|
|
|
|
|
stroke="url(#wrenchGradient)"
|
|
|
|
|
strokeWidth="1.5"
|
2025-11-09 15:49:32 +01:00
|
|
|
strokeLinecap="round"
|
2025-11-09 15:54:15 +01:00
|
|
|
strokeLinejoin="round"
|
2025-11-09 15:56:57 +01:00
|
|
|
fill="none"
|
|
|
|
|
vectorEffect="non-scaling-stroke"
|
2025-11-07 11:26:19 +01:00
|
|
|
/>
|
|
|
|
|
</motion.g>
|
|
|
|
|
|
2025-11-09 16:08:28 +01:00
|
|
|
{/* Brush (Lucide) - horizontal flipped */}
|
2025-11-07 11:26:19 +01:00
|
|
|
<motion.g
|
2025-11-09 16:08:28 +01:00
|
|
|
transform="translate(100, 97) rotate(90) scale(5) translate(-12, -12)"
|
2025-11-09 15:56:57 +01:00
|
|
|
initial={{ pathLength: 0, opacity: 0 }}
|
|
|
|
|
animate={{ pathLength: 1, opacity: 1 }}
|
|
|
|
|
transition={{ duration: 1.2, delay: 0.3, ease: 'easeInOut' }}
|
2025-11-07 11:26:19 +01:00
|
|
|
>
|
2025-11-09 15:56:57 +01:00
|
|
|
<motion.path
|
2025-11-09 16:08:28 +01:00
|
|
|
d="m11 10l3 3m-7.5 8A3.5 3.5 0 1 0 3 17.5a2.62 2.62 0 0 1-.708 1.792A1 1 0 0 0 3 21z"
|
2025-11-09 15:56:57 +01:00
|
|
|
stroke="url(#brushGradient)"
|
|
|
|
|
strokeWidth="1.5"
|
2025-11-09 15:49:32 +01:00
|
|
|
strokeLinecap="round"
|
2025-11-09 15:54:15 +01:00
|
|
|
strokeLinejoin="round"
|
|
|
|
|
fill="none"
|
2025-11-09 15:56:57 +01:00
|
|
|
vectorEffect="non-scaling-stroke"
|
|
|
|
|
/>
|
|
|
|
|
<motion.path
|
2025-11-09 16:08:28 +01:00
|
|
|
d="M9.969 17.031L21.378 5.624a1 1 0 0 0-3.002-3.002L6.967 14.031"
|
2025-11-09 15:56:57 +01:00
|
|
|
stroke="url(#brushGradient)"
|
|
|
|
|
strokeWidth="1.5"
|
|
|
|
|
strokeLinecap="round"
|
|
|
|
|
strokeLinejoin="round"
|
2025-11-09 16:08:28 +01:00
|
|
|
fill="none"
|
2025-11-09 15:56:57 +01:00
|
|
|
vectorEffect="non-scaling-stroke"
|
2025-11-07 11:26:19 +01:00
|
|
|
/>
|
|
|
|
|
</motion.g>
|
|
|
|
|
|
|
|
|
|
{/* Gradient definitions */}
|
|
|
|
|
<defs>
|
2025-11-09 15:56:57 +01:00
|
|
|
<linearGradient id="wrenchGradient" x1="0%" y1="0%" x2="100%" y2="100%">
|
2025-11-09 15:49:32 +01:00
|
|
|
<stop offset="0%" stopColor="#667eea" />
|
2025-11-09 15:56:57 +01:00
|
|
|
<stop offset="100%" stopColor="#a855f7" />
|
|
|
|
|
</linearGradient>
|
|
|
|
|
<linearGradient id="brushGradient" x1="0%" y1="0%" x2="100%" y2="100%">
|
|
|
|
|
<stop offset="0%" stopColor="#f59e0b" />
|
|
|
|
|
<stop offset="100%" stopColor="#ec4899" />
|
|
|
|
|
</linearGradient>
|
2025-11-07 11:26:19 +01:00
|
|
|
</defs>
|
|
|
|
|
</motion.svg>
|
|
|
|
|
);
|
|
|
|
|
}
|