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:
@@ -48,6 +48,43 @@ export default function Hero() {
|
|||||||
Simple, powerful, and always at your fingertips.
|
Simple, powerful, and always at your fingertips.
|
||||||
</motion.p>
|
</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 */}
|
{/* Scroll indicator */}
|
||||||
<motion.a
|
<motion.a
|
||||||
href="#tools"
|
href="#tools"
|
||||||
@@ -56,7 +93,7 @@ export default function Hero() {
|
|||||||
animate={{ opacity: 1 }}
|
animate={{ opacity: 1 }}
|
||||||
transition={{ duration: 0.8, delay: 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
|
<motion.div
|
||||||
className="w-6 h-10 border-2 border-gray-600 group-hover:border-purple-400 rounded-full p-1 transition-colors"
|
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] }}
|
animate={{ y: [0, 10, 0] }}
|
||||||
|
|||||||
@@ -9,11 +9,12 @@ interface ToolCardProps {
|
|||||||
icon: ReactNode;
|
icon: ReactNode;
|
||||||
url: string;
|
url: string;
|
||||||
gradient: string;
|
gradient: string;
|
||||||
|
accentColor: string;
|
||||||
index: number;
|
index: number;
|
||||||
badges?: string[];
|
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 (
|
return (
|
||||||
<motion.a
|
<motion.a
|
||||||
href={url}
|
href={url}
|
||||||
@@ -49,7 +50,18 @@ export default function ToolCard({ title, description, icon, url, gradient, inde
|
|||||||
</motion.div>
|
</motion.div>
|
||||||
|
|
||||||
{/* Title */}
|
{/* 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}
|
{title}
|
||||||
</h3>
|
</h3>
|
||||||
|
|
||||||
@@ -74,7 +86,16 @@ export default function ToolCard({ title, description, icon, url, gradient, inde
|
|||||||
|
|
||||||
{/* Arrow icon */}
|
{/* Arrow icon */}
|
||||||
<motion.div
|
<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 }}
|
initial={{ x: 0 }}
|
||||||
whileHover={{ x: 5 }}
|
whileHover={{ x: 5 }}
|
||||||
>
|
>
|
||||||
|
|||||||
@@ -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.',
|
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',
|
url: 'https://vert.kit.pivoine.art',
|
||||||
gradient: 'gradient-green-teal',
|
gradient: 'gradient-green-teal',
|
||||||
|
accentColor: '#10b981',
|
||||||
badges: ['Privacy', 'Open Source', 'Free'],
|
badges: ['Privacy', 'Open Source', 'Free'],
|
||||||
icon: (
|
icon: (
|
||||||
<svg className="w-12 h-12 text-white" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
<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.',
|
description: 'An advanced image editor running in your browser. Edit photos, create graphics, and more.',
|
||||||
url: 'https://paint.kit.pivoine.art',
|
url: 'https://paint.kit.pivoine.art',
|
||||||
gradient: 'gradient-orange-pink',
|
gradient: 'gradient-orange-pink',
|
||||||
|
accentColor: '#f97316',
|
||||||
badges: ['Browser-Based', 'Free'],
|
badges: ['Browser-Based', 'Free'],
|
||||||
icon: (
|
icon: (
|
||||||
<svg className="w-12 h-12 text-white" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
<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.',
|
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',
|
url: 'https://pastel.kit.pivoine.art',
|
||||||
gradient: 'gradient-indigo-purple',
|
gradient: 'gradient-indigo-purple',
|
||||||
|
accentColor: '#a855f7',
|
||||||
badges: ['Open Source', 'WCAG', 'Free'],
|
badges: ['Open Source', 'WCAG', 'Free'],
|
||||||
icon: (
|
icon: (
|
||||||
<svg className="w-12 h-12 text-white" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
<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.',
|
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',
|
url: 'https://stirling.kit.pivoine.art',
|
||||||
gradient: 'gradient-purple-blue',
|
gradient: 'gradient-purple-blue',
|
||||||
|
accentColor: '#667eea',
|
||||||
badges: ['Privacy', 'Open Source', 'Free'],
|
badges: ['Privacy', 'Open Source', 'Free'],
|
||||||
icon: (
|
icon: (
|
||||||
<svg className="w-12 h-12 text-white" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
<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.',
|
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',
|
url: 'https://units.kit.pivoine.art',
|
||||||
gradient: 'gradient-cyan-purple',
|
gradient: 'gradient-cyan-purple',
|
||||||
|
accentColor: '#2dd4bf',
|
||||||
badges: ['Real-time', 'Free'],
|
badges: ['Real-time', 'Free'],
|
||||||
icon: (
|
icon: (
|
||||||
<svg className="w-12 h-12 text-white" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
<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.',
|
description: 'Virtual whiteboard for sketching hand-drawn style diagrams. Create flowcharts, wireframes, and visual brainstorming with collaborative editing.',
|
||||||
url: 'https://draw.kit.pivoine.art',
|
url: 'https://draw.kit.pivoine.art',
|
||||||
gradient: 'gradient-orange-pink',
|
gradient: 'gradient-orange-pink',
|
||||||
|
accentColor: '#ec4899',
|
||||||
badges: ['Collaborative', 'Open Source', 'Free'],
|
badges: ['Collaborative', 'Open Source', 'Free'],
|
||||||
icon: (
|
icon: (
|
||||||
<svg className="w-12 h-12 text-white" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
<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}
|
icon={tool.icon}
|
||||||
url={tool.url}
|
url={tool.url}
|
||||||
gradient={tool.gradient}
|
gradient={tool.gradient}
|
||||||
|
accentColor={tool.accentColor}
|
||||||
badges={tool.badges}
|
badges={tool.badges}
|
||||||
index={index}
|
index={index}
|
||||||
/>
|
/>
|
||||||
|
|||||||
Reference in New Issue
Block a user