polish: streamline colors and enhance UX with major improvements

Color System Improvements:
- Added accentColor prop to ToolCard for consistent color identity
- Each tool now has its signature color for hover effects
- Title and arrow icon now change to tool's accent color on hover
- Footer links match card colors for unified visual language

Hero Section Enhancement:
- Added prominent CTA buttons (Explore Tools + View on GitHub)
- Gradient animated button with hover effects
- GitHub button with icon and border hover effect
- Better visual hierarchy with button placement
- Updated scroll indicator text to "Scroll to explore"

User Experience:
- Improved hover interactions with color-coded feedback
- Better visual consistency across all components
- Enhanced call-to-action visibility
- Smooth transitions and micro-interactions

Color Palette:
- Vert: #10b981 (emerald green)
- Paint: #f97316 (vibrant orange)
- Pastel: #a855f7 (purple)
- Stirling: #667eea (indigo blue)
- Units: #2dd4bf (cyan)
- Draw: #ec4899 (pink)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-11-08 18:40:25 +01:00
parent 86efde25bc
commit 3a4fa63de7
3 changed files with 69 additions and 4 deletions

View File

@@ -48,6 +48,43 @@ export default function Hero() {
Simple, powerful, and always at your fingertips.
</motion.p>
{/* CTA Buttons */}
<motion.div
className="flex flex-col sm:flex-row gap-4 justify-center items-center mb-16"
initial={{ opacity: 0, y: 20 }}
animate={{ opacity: 1, y: 0 }}
transition={{ duration: 0.8, delay: 0.8 }}
>
<motion.a
href="#tools"
className="group relative px-8 py-4 rounded-full bg-gradient-to-r from-purple-500 to-cyan-500 text-white font-semibold shadow-lg overflow-hidden"
whileHover={{ scale: 1.05 }}
whileTap={{ scale: 0.95 }}
>
<span className="relative z-10">Explore Tools</span>
<motion.div
className="absolute inset-0 bg-gradient-to-r from-purple-600 to-cyan-600"
initial={{ x: '100%' }}
whileHover={{ x: 0 }}
transition={{ duration: 0.3 }}
/>
</motion.a>
<motion.a
href="https://github.com/valknarness/kit-ui"
target="_blank"
rel="noopener noreferrer"
className="group px-8 py-4 rounded-full border-2 border-gray-600 text-gray-300 font-semibold hover:border-purple-400 hover:text-purple-400 transition-all duration-300 inline-flex items-center gap-2"
whileHover={{ scale: 1.05 }}
whileTap={{ scale: 0.95 }}
>
<svg className="w-5 h-5" fill="currentColor" viewBox="0 0 24 24">
<path fillRule="evenodd" d="M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z" clipRule="evenodd" />
</svg>
View on GitHub
</motion.a>
</motion.div>
{/* Scroll indicator */}
<motion.a
href="#tools"
@@ -56,7 +93,7 @@ export default function Hero() {
animate={{ opacity: 1 }}
transition={{ duration: 0.8, delay: 1 }}
>
<span className="text-sm text-gray-500 group-hover:text-gray-400 transition-colors">Explore Tools</span>
<span className="text-sm text-gray-500 group-hover:text-gray-400 transition-colors">Scroll to explore</span>
<motion.div
className="w-6 h-10 border-2 border-gray-600 group-hover:border-purple-400 rounded-full p-1 transition-colors"
animate={{ y: [0, 10, 0] }}

View File

@@ -9,11 +9,12 @@ interface ToolCardProps {
icon: ReactNode;
url: string;
gradient: string;
accentColor: string;
index: number;
badges?: string[];
}
export default function ToolCard({ title, description, icon, url, gradient, index, badges }: ToolCardProps) {
export default function ToolCard({ title, description, icon, url, gradient, accentColor, index, badges }: ToolCardProps) {
return (
<motion.a
href={url}
@@ -49,7 +50,18 @@ export default function ToolCard({ title, description, icon, url, gradient, inde
</motion.div>
{/* Title */}
<h3 className="text-2xl font-bold mb-3 text-white group-hover:text-transparent group-hover:bg-clip-text group-hover:bg-gradient-to-r group-hover:from-purple-400 group-hover:to-cyan-400 transition-all duration-300">
<h3
className="text-2xl font-bold mb-3 text-white transition-all duration-300"
style={{
color: 'white',
}}
onMouseEnter={(e) => {
e.currentTarget.style.color = accentColor;
}}
onMouseLeave={(e) => {
e.currentTarget.style.color = 'white';
}}
>
{title}
</h3>
@@ -74,7 +86,16 @@ export default function ToolCard({ title, description, icon, url, gradient, inde
{/* Arrow icon */}
<motion.div
className="absolute bottom-8 right-8 text-gray-600 group-hover:text-purple-400"
className="absolute bottom-8 right-8 text-gray-600 transition-colors duration-300"
style={{
color: '#6b7280',
}}
onMouseEnter={(e) => {
e.currentTarget.style.color = accentColor;
}}
onMouseLeave={(e) => {
e.currentTarget.style.color = '#6b7280';
}}
initial={{ x: 0 }}
whileHover={{ x: 5 }}
>

View File

@@ -9,6 +9,7 @@ const tools = [
description: 'Privacy-focused file converter that processes images, audio, and documents locally on your device. No file size limits, completely open source.',
url: 'https://vert.kit.pivoine.art',
gradient: 'gradient-green-teal',
accentColor: '#10b981',
badges: ['Privacy', 'Open Source', 'Free'],
icon: (
<svg className="w-12 h-12 text-white" fill="none" stroke="currentColor" viewBox="0 0 24 24">
@@ -21,6 +22,7 @@ const tools = [
description: 'An advanced image editor running in your browser. Edit photos, create graphics, and more.',
url: 'https://paint.kit.pivoine.art',
gradient: 'gradient-orange-pink',
accentColor: '#f97316',
badges: ['Browser-Based', 'Free'],
icon: (
<svg className="w-12 h-12 text-white" fill="none" stroke="currentColor" viewBox="0 0 24 24">
@@ -33,6 +35,7 @@ const tools = [
description: 'Modern color manipulation toolkit with palette generation, accessibility testing, and format conversion. Supports hex, RGB, HSL, Lab, and more.',
url: 'https://pastel.kit.pivoine.art',
gradient: 'gradient-indigo-purple',
accentColor: '#a855f7',
badges: ['Open Source', 'WCAG', 'Free'],
icon: (
<svg className="w-12 h-12 text-white" fill="none" stroke="currentColor" viewBox="0 0 24 24">
@@ -48,6 +51,7 @@ const tools = [
description: 'Powerful locally-hosted PDF toolkit with 50+ operations. Merge, split, convert, OCR, sign, and manipulate PDFs with complete privacy.',
url: 'https://stirling.kit.pivoine.art',
gradient: 'gradient-purple-blue',
accentColor: '#667eea',
badges: ['Privacy', 'Open Source', 'Free'],
icon: (
<svg className="w-12 h-12 text-white" fill="none" stroke="currentColor" viewBox="0 0 24 24">
@@ -61,6 +65,7 @@ const tools = [
description: 'Smart unit converter with 187 units across 23 categories. Real-time bidirectional conversion with fuzzy search and conversion history.',
url: 'https://units.kit.pivoine.art',
gradient: 'gradient-cyan-purple',
accentColor: '#2dd4bf',
badges: ['Real-time', 'Free'],
icon: (
<svg className="w-12 h-12 text-white" fill="none" stroke="currentColor" viewBox="0 0 24 24">
@@ -73,6 +78,7 @@ const tools = [
description: 'Virtual whiteboard for sketching hand-drawn style diagrams. Create flowcharts, wireframes, and visual brainstorming with collaborative editing.',
url: 'https://draw.kit.pivoine.art',
gradient: 'gradient-orange-pink',
accentColor: '#ec4899',
badges: ['Collaborative', 'Open Source', 'Free'],
icon: (
<svg className="w-12 h-12 text-white" fill="none" stroke="currentColor" viewBox="0 0 24 24">
@@ -112,6 +118,7 @@ export default function ToolsGrid() {
icon={tool.icon}
url={tool.url}
gradient={tool.gradient}
accentColor={tool.accentColor}
badges={tool.badges}
index={index}
/>