🔥 Transform to Deck Hearth Fire-Inspired Design
🎨 Complete Brand Transformation: - Rebranded from 'TCG Vault' to 'Deck Hearth' - Updated logo initials from 'TCG' to 'DH' - Changed app name throughout the application 🔥 Fire-Themed Color Palette: Light Theme (Warm Daylight by the Hearth): - Primary: Warm cream (#fefcf8) like sunlit stone - Secondary: Soft beige (#f7f3ed) like aged parchment - Tertiary: Light wood tone (#f0e6d6) - Text: Dark chocolate brown (#2d1810) - Accents: Ember orange, flame orange, golden yellow Dark Theme (Cozy Evening by the Fire): - Primary: Deep charcoal (#1a0f0a) like burnt wood - Secondary: Rich dark brown (#2d1b12) like oak - Tertiary: Medium brown (#3d2317) like mahogany - Text: Warm white (#fff8f0) like firelight - Accents: Bright flame, glowing ember, golden glow 🎨 Fire-Inspired Design Elements: - Flame gradient: Orange to ember red - Golden gradient: Golden yellow to flame orange - Fire glow effects with warm shadows - Wood-toned borders and accents - Ember and flame-colored interactive elements 🔧 Enhanced Component Styling: - Updated BulkSelectionToolbar with fire colors - New CSS classes: btn-flame, btn-ember, btn-gold - Fire glow and ember glow effects - Gradient backgrounds: gradient-bg-fire, gradient-bg-golden - Tailwind color palette: hearth.flame, hearth.ember, etc. ✨ Warm & Inviting Experience: - Light mode: Cozy daytime fireplace atmosphere - Dark mode: Intimate evening hearth ambiance - Maintains accessibility with proper contrast - Smooth transitions between themes The app now perfectly captures the warm, inviting feeling of gathering around a hearth! 🔥🏠✨
This commit is contained in:
parent
48d1b1b5f9
commit
e056f53b1f
5 changed files with 141 additions and 57 deletions
|
|
@ -46,7 +46,7 @@ export default function BulkSelectionToolbar({
|
||||||
<div className="bg-white rounded-xl shadow-2xl border border-gray-200 px-3 sm:px-6 py-3 sm:py-4 flex items-center justify-between sm:justify-start sm:space-x-4 sm:min-w-96">
|
<div className="bg-white rounded-xl shadow-2xl border border-gray-200 px-3 sm:px-6 py-3 sm:py-4 flex items-center justify-between sm:justify-start sm:space-x-4 sm:min-w-96">
|
||||||
{/* Selection Count */}
|
{/* Selection Count */}
|
||||||
<div className="flex items-center space-x-2">
|
<div className="flex items-center space-x-2">
|
||||||
<div className="w-8 h-8 bg-purple-600 rounded-full flex items-center justify-center">
|
<div className="w-8 h-8 rounded-full flex items-center justify-center" style={{ backgroundColor: 'var(--accent-ember)' }}>
|
||||||
<span className="text-white text-sm font-bold">{selectedCount}</span>
|
<span className="text-white text-sm font-bold">{selectedCount}</span>
|
||||||
</div>
|
</div>
|
||||||
<span className="text-gray-700 font-medium text-sm sm:text-base">
|
<span className="text-gray-700 font-medium text-sm sm:text-base">
|
||||||
|
|
@ -62,7 +62,10 @@ export default function BulkSelectionToolbar({
|
||||||
<div className="flex items-center space-x-1 sm:space-x-2">
|
<div className="flex items-center space-x-1 sm:space-x-2">
|
||||||
<button
|
<button
|
||||||
onClick={handleAddToCollection}
|
onClick={handleAddToCollection}
|
||||||
className="px-2 sm:px-3 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 text-sm font-medium flex items-center space-x-1 transition-colors"
|
className="px-2 sm:px-3 py-2 text-white rounded-lg text-sm font-medium flex items-center space-x-1 transition-colors"
|
||||||
|
style={{ backgroundColor: 'var(--accent-flame)' }}
|
||||||
|
onMouseEnter={(e) => e.target.style.backgroundColor = 'var(--accent-ember)'}
|
||||||
|
onMouseLeave={(e) => e.target.style.backgroundColor = 'var(--accent-flame)'}
|
||||||
>
|
>
|
||||||
<svg className="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
<svg className="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||||
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M19 11H5m14 0a2 2 0 012 2v6a2 2 0 01-2 2H5a2 2 0 01-2-2v-6a2 2 0 012-2m14 0V9a2 2 0 00-2-2M5 11V9a2 2 0 012-2m0 0V5a2 2 0 012-2h6a2 2 0 012 2v2M7 7h10" />
|
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M19 11H5m14 0a2 2 0 012 2v6a2 2 0 01-2 2H5a2 2 0 01-2-2v-6a2 2 0 012-2m14 0V9a2 2 0 00-2-2M5 11V9a2 2 0 012-2m0 0V5a2 2 0 012-2h6a2 2 0 012 2v2M7 7h10" />
|
||||||
|
|
@ -72,7 +75,10 @@ export default function BulkSelectionToolbar({
|
||||||
|
|
||||||
<button
|
<button
|
||||||
onClick={handleAddToDeck}
|
onClick={handleAddToDeck}
|
||||||
className="px-2 sm:px-3 py-2 bg-green-600 text-white rounded-lg hover:bg-green-700 text-sm font-medium flex items-center space-x-1 transition-colors"
|
className="px-2 sm:px-3 py-2 text-white rounded-lg text-sm font-medium flex items-center space-x-1 transition-colors"
|
||||||
|
style={{ backgroundColor: 'var(--accent-gold)' }}
|
||||||
|
onMouseEnter={(e) => e.target.style.backgroundColor = '#e6830b'}
|
||||||
|
onMouseLeave={(e) => e.target.style.backgroundColor = 'var(--accent-gold)'}
|
||||||
>
|
>
|
||||||
<svg className="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
<svg className="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||||
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M19 11H5m14 0a2 2 0 012 2v6a2 2 0 01-2 2H5a2 2 0 01-2-2v-6a2 2 0 012-2m14 0V9a2 2 0 00-2-2M5 11V9a2 2 0 012-2m0 0V5a2 2 0 012-2h6a2 2 0 012 2v2M7 7h10" />
|
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M19 11H5m14 0a2 2 0 012 2v6a2 2 0 01-2 2H5a2 2 0 01-2-2v-6a2 2 0 012-2m14 0V9a2 2 0 00-2-2M5 11V9a2 2 0 012-2m0 0V5a2 2 0 012-2h6a2 2 0 012 2v2M7 7h10" />
|
||||||
|
|
@ -82,7 +88,10 @@ export default function BulkSelectionToolbar({
|
||||||
|
|
||||||
<button
|
<button
|
||||||
onClick={handleMarkAsOwned}
|
onClick={handleMarkAsOwned}
|
||||||
className="px-2 sm:px-3 py-2 bg-purple-600 text-white rounded-lg hover:bg-purple-700 text-sm font-medium flex items-center space-x-1 transition-colors"
|
className="px-2 sm:px-3 py-2 text-white rounded-lg text-sm font-medium flex items-center space-x-1 transition-colors"
|
||||||
|
style={{ backgroundColor: 'var(--accent-wood)' }}
|
||||||
|
onMouseEnter={(e) => e.target.style.backgroundColor = '#6d4c41'}
|
||||||
|
onMouseLeave={(e) => e.target.style.backgroundColor = 'var(--accent-wood)'}
|
||||||
>
|
>
|
||||||
<svg className="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
<svg className="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||||
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M5 13l4 4L19 7" />
|
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M5 13l4 4L19 7" />
|
||||||
|
|
|
||||||
|
|
@ -117,9 +117,9 @@ export default function Layout({ children, user = { email: 'me@randallstillwell.
|
||||||
<div className="lg:hidden flex justify-between items-center mb-4">
|
<div className="lg:hidden flex justify-between items-center mb-4">
|
||||||
<div className="flex items-center">
|
<div className="flex items-center">
|
||||||
<div className="w-10 h-10 logo-container mr-3">
|
<div className="w-10 h-10 logo-container mr-3">
|
||||||
<span className="text-white font-bold text-sm">TCG</span>
|
<span className="text-white font-bold text-sm">DH</span>
|
||||||
</div>
|
</div>
|
||||||
<h1 className="text-xl font-bold" style={{ color: 'var(--text-primary)' }}>TCG Vault</h1>
|
<h1 className="text-xl font-bold" style={{ color: 'var(--text-primary)' }}>Deck Hearth</h1>
|
||||||
</div>
|
</div>
|
||||||
<button
|
<button
|
||||||
onClick={() => setIsMobileMenuOpen(false)}
|
onClick={() => setIsMobileMenuOpen(false)}
|
||||||
|
|
@ -135,9 +135,9 @@ export default function Layout({ children, user = { email: 'me@randallstillwell.
|
||||||
{/* Desktop Header */}
|
{/* Desktop Header */}
|
||||||
<div className="hidden lg:flex items-center mb-8">
|
<div className="hidden lg:flex items-center mb-8">
|
||||||
<div className="w-10 h-10 logo-container mr-3">
|
<div className="w-10 h-10 logo-container mr-3">
|
||||||
<span className="text-white font-bold text-sm">TCG</span>
|
<span className="text-white font-bold text-sm">DH</span>
|
||||||
</div>
|
</div>
|
||||||
<h1 className="text-xl font-bold" style={{ color: 'var(--text-primary)' }}>TCG Vault</h1>
|
<h1 className="text-xl font-bold" style={{ color: 'var(--text-primary)' }}>Deck Hearth</h1>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<nav className="space-y-2 flex-1">
|
<nav className="space-y-2 flex-1">
|
||||||
|
|
|
||||||
|
|
@ -113,7 +113,7 @@ export default function ShareModal({
|
||||||
|
|
||||||
const handleSocialShare = (platform) => {
|
const handleSocialShare = (platform) => {
|
||||||
const url = window.location.href;
|
const url = window.location.href;
|
||||||
const title = `Check out this collection on TCG Vault`;
|
const title = `Check out this collection on Deck Hearth`;
|
||||||
|
|
||||||
const shareUrls = {
|
const shareUrls = {
|
||||||
twitter: `https://twitter.com/intent/tweet?url=${encodeURIComponent(url)}&text=${encodeURIComponent(title)}`,
|
twitter: `https://twitter.com/intent/tweet?url=${encodeURIComponent(url)}&text=${encodeURIComponent(title)}`,
|
||||||
|
|
|
||||||
|
|
@ -12,51 +12,53 @@ body {
|
||||||
transition: background-color 0.3s ease, color 0.3s ease;
|
transition: background-color 0.3s ease, color 0.3s ease;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Theme Variables */
|
/* Theme Variables - Deck Hearth Fire-Inspired */
|
||||||
:root {
|
:root {
|
||||||
/* Light Theme */
|
/* Light Theme - Warm Daylight by the Hearth */
|
||||||
--bg-primary-light: #ffffff;
|
--bg-primary-light: #fefcf8; /* Warm cream, like sunlit stone */
|
||||||
--bg-secondary-light: #f8fafc;
|
--bg-secondary-light: #f7f3ed; /* Soft beige, like aged parchment */
|
||||||
--bg-tertiary-light: #f1f5f9;
|
--bg-tertiary-light: #f0e6d6; /* Light wood tone */
|
||||||
--text-primary-light: #1e293b;
|
--text-primary-light: #2d1810; /* Dark chocolate brown */
|
||||||
--text-secondary-light: #64748b;
|
--text-secondary-light: #5d4037; /* Medium brown, like burnt wood */
|
||||||
--text-accent-light: #3b82f6;
|
--text-accent-light: #d84315; /* Ember orange */
|
||||||
--border-light: #e2e8f0;
|
--border-light: #e8dcc6; /* Light wood border */
|
||||||
--shadow-light: 0 4px 6px -1px rgba(0, 0, 0, 0.1);
|
--shadow-light: 0 4px 6px -1px rgba(45, 24, 16, 0.1);
|
||||||
--gradient-primary-light: linear-gradient(135deg, #3b82f6 0%, #8b5cf6 100%);
|
--gradient-primary-light: linear-gradient(135deg, #ff6f00 0%, #d84315 100%); /* Fire gradient */
|
||||||
--gradient-secondary-light: linear-gradient(135deg, #06b6d4 0%, #3b82f6 100%);
|
--gradient-secondary-light: linear-gradient(135deg, #ffab40 0%, #ff6f00 100%); /* Golden flame */
|
||||||
--accent-blue-light: #06b6d4;
|
--accent-flame-light: #ff6f00; /* Bright flame orange */
|
||||||
--accent-purple-light: #8b5cf6;
|
--accent-ember-light: #d84315; /* Deep ember red */
|
||||||
--accent-pink-light: #ec4899;
|
--accent-gold-light: #ffab40; /* Golden flame */
|
||||||
--input-bg-light: #ffffff;
|
--accent-wood-light: #8d6e63; /* Rich wood tone */
|
||||||
--input-border-light: #e2e8f0;
|
--input-bg-light: #fefcf8;
|
||||||
--input-text-light: #1e293b;
|
--input-border-light: #e8dcc6;
|
||||||
--input-placeholder-light: #64748b;
|
--input-text-light: #2d1810;
|
||||||
|
--input-placeholder-light: #5d4037;
|
||||||
}
|
}
|
||||||
|
|
||||||
[data-theme="dark"] {
|
[data-theme="dark"] {
|
||||||
/* Dark Theme - Based on the reference image */
|
/* Dark Theme - Cozy Evening by the Fire */
|
||||||
--bg-primary-dark: #0f0f23;
|
--bg-primary-dark: #1a0f0a; /* Deep charcoal, like burnt wood */
|
||||||
--bg-secondary-dark: #1a1a2e;
|
--bg-secondary-dark: #2d1b12; /* Rich dark brown, like oak */
|
||||||
--bg-tertiary-dark: #16213e;
|
--bg-tertiary-dark: #3d2317; /* Medium brown, like mahogany */
|
||||||
--text-primary-dark: #ffffff;
|
--text-primary-dark: #fff8f0; /* Warm white, like firelight */
|
||||||
--text-secondary-dark: #a1a1aa;
|
--text-secondary-dark: #d7c4b0; /* Soft cream, like candlelight */
|
||||||
--text-accent-dark: #06b6d4;
|
--text-accent-dark: #ff8a50; /* Bright flame orange */
|
||||||
--border-dark: #2d2d3a;
|
--border-dark: #4a2f1f; /* Dark wood border */
|
||||||
--shadow-dark: 0 4px 6px -1px rgba(0, 0, 0, 0.3);
|
--shadow-dark: 0 4px 6px -1px rgba(26, 15, 10, 0.4);
|
||||||
--gradient-primary-dark: linear-gradient(135deg, #8b5cf6 0%, #06b6d4 100%);
|
--gradient-primary-dark: linear-gradient(135deg, #ff8a50 0%, #d84315 100%); /* Evening fire */
|
||||||
--gradient-secondary-dark: linear-gradient(135deg, #ec4899 0%, #8b5cf6 100%);
|
--gradient-secondary-dark: linear-gradient(135deg, #ffab40 0%, #ff6f00 100%); /* Golden embers */
|
||||||
--accent-blue-dark: #06b6d4;
|
--accent-flame-dark: #ff8a50; /* Bright flame */
|
||||||
--accent-purple-dark: #8b5cf6;
|
--accent-ember-dark: #d84315; /* Glowing ember */
|
||||||
--accent-pink-dark: #ec4899;
|
--accent-gold-dark: #ffab40; /* Golden glow */
|
||||||
--input-bg-dark: #1a1a2e;
|
--accent-wood-dark: #8d6e63; /* Warm wood */
|
||||||
--input-border-dark: #2d2d3a;
|
--input-bg-dark: #2d1b12;
|
||||||
--input-text-dark: #ffffff;
|
--input-border-dark: #4a2f1f;
|
||||||
--input-placeholder-dark: #a1a1aa;
|
--input-text-dark: #fff8f0;
|
||||||
--search-bg-dark: #1a1a2e;
|
--input-placeholder-dark: #d7c4b0;
|
||||||
--search-border-dark: #2d2d3a;
|
--search-bg-dark: #2d1b12;
|
||||||
--search-text-dark: #ffffff;
|
--search-border-dark: #4a2f1f;
|
||||||
--search-placeholder-dark: #a1a1aa;
|
--search-text-dark: #fff8f0;
|
||||||
|
--search-placeholder-dark: #d7c4b0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Apply theme colors */
|
/* Apply theme colors */
|
||||||
|
|
@ -82,9 +84,14 @@ body {
|
||||||
--shadow: var(--shadow-light);
|
--shadow: var(--shadow-light);
|
||||||
--gradient-primary: var(--gradient-primary-light);
|
--gradient-primary: var(--gradient-primary-light);
|
||||||
--gradient-secondary: var(--gradient-secondary-light);
|
--gradient-secondary: var(--gradient-secondary-light);
|
||||||
--accent-blue: var(--accent-blue-light);
|
--accent-flame: var(--accent-flame-light);
|
||||||
--accent-purple: var(--accent-purple-light);
|
--accent-ember: var(--accent-ember-light);
|
||||||
--accent-pink: var(--accent-pink-light);
|
--accent-gold: var(--accent-gold-light);
|
||||||
|
--accent-wood: var(--accent-wood-light);
|
||||||
|
/* Legacy color mappings for compatibility */
|
||||||
|
--accent-blue: var(--accent-flame-light);
|
||||||
|
--accent-purple: var(--accent-ember-light);
|
||||||
|
--accent-pink: var(--accent-gold-light);
|
||||||
--input-bg: var(--input-bg-light);
|
--input-bg: var(--input-bg-light);
|
||||||
--input-border: var(--input-border-light);
|
--input-border: var(--input-border-light);
|
||||||
--input-text: var(--input-text-light);
|
--input-text: var(--input-text-light);
|
||||||
|
|
@ -103,22 +110,77 @@ body {
|
||||||
--shadow: var(--shadow-dark);
|
--shadow: var(--shadow-dark);
|
||||||
--gradient-primary: var(--gradient-primary-dark);
|
--gradient-primary: var(--gradient-primary-dark);
|
||||||
--gradient-secondary: var(--gradient-secondary-dark);
|
--gradient-secondary: var(--gradient-secondary-dark);
|
||||||
--accent-blue: var(--accent-blue-dark);
|
--accent-flame: var(--accent-flame-dark);
|
||||||
--accent-purple: var(--accent-purple-dark);
|
--accent-ember: var(--accent-ember-dark);
|
||||||
--accent-pink: var(--accent-pink-dark);
|
--accent-gold: var(--accent-gold-dark);
|
||||||
|
--accent-wood: var(--accent-wood-dark);
|
||||||
|
/* Legacy color mappings for compatibility */
|
||||||
|
--accent-blue: var(--accent-flame-dark);
|
||||||
|
--accent-purple: var(--accent-ember-dark);
|
||||||
|
--accent-pink: var(--accent-gold-dark);
|
||||||
--input-bg: var(--input-bg-dark);
|
--input-bg: var(--input-bg-dark);
|
||||||
--input-border: var(--input-border-dark);
|
--input-border: var(--input-border-dark);
|
||||||
--input-text: var(--input-text-dark);
|
--input-text: var(--input-text-dark);
|
||||||
--input-placeholder: var(--input-placeholder-dark);
|
--input-placeholder: var(--input-placeholder-dark);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Custom component styles */
|
/* Custom component styles - Fire-themed */
|
||||||
.btn-primary {
|
.btn-primary {
|
||||||
@apply font-bold py-3 px-6 rounded-2xl transition-all duration-300 shadow-lg hover:shadow-xl;
|
@apply font-bold py-3 px-6 rounded-2xl transition-all duration-300 shadow-lg hover:shadow-xl;
|
||||||
background: var(--gradient-primary);
|
background: var(--gradient-primary);
|
||||||
color: white;
|
color: white;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.btn-flame {
|
||||||
|
@apply font-bold py-2 px-4 rounded-lg transition-all duration-300 shadow-md hover:shadow-lg;
|
||||||
|
background-color: var(--accent-flame);
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-flame:hover {
|
||||||
|
background-color: var(--accent-ember);
|
||||||
|
transform: translateY(-1px);
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-ember {
|
||||||
|
@apply font-bold py-2 px-4 rounded-lg transition-all duration-300 shadow-md hover:shadow-lg;
|
||||||
|
background-color: var(--accent-ember);
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-ember:hover {
|
||||||
|
background: var(--gradient-primary);
|
||||||
|
transform: translateY(-1px);
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-gold {
|
||||||
|
@apply font-bold py-2 px-4 rounded-lg transition-all duration-300 shadow-md hover:shadow-lg;
|
||||||
|
background-color: var(--accent-gold);
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-gold:hover {
|
||||||
|
background: var(--gradient-secondary);
|
||||||
|
transform: translateY(-1px);
|
||||||
|
}
|
||||||
|
|
||||||
|
.gradient-bg-fire {
|
||||||
|
background: var(--gradient-primary);
|
||||||
|
}
|
||||||
|
|
||||||
|
.gradient-bg-golden {
|
||||||
|
background: var(--gradient-secondary);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Fire glow effects */
|
||||||
|
.fire-glow {
|
||||||
|
box-shadow: 0 0 20px rgba(255, 111, 0, 0.3);
|
||||||
|
}
|
||||||
|
|
||||||
|
.ember-glow {
|
||||||
|
box-shadow: 0 0 15px rgba(216, 67, 21, 0.4);
|
||||||
|
}
|
||||||
|
|
||||||
.btn-secondary {
|
.btn-secondary {
|
||||||
@apply font-bold py-3 px-6 rounded-2xl transition-all duration-300 shadow-lg hover:shadow-xl;
|
@apply font-bold py-3 px-6 rounded-2xl transition-all duration-300 shadow-lg hover:shadow-xl;
|
||||||
background: var(--gradient-secondary);
|
background: var(--gradient-secondary);
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,19 @@ export default {
|
||||||
screens: {
|
screens: {
|
||||||
'xs': '475px',
|
'xs': '475px',
|
||||||
},
|
},
|
||||||
|
colors: {
|
||||||
|
hearth: {
|
||||||
|
flame: '#ff6f00',
|
||||||
|
ember: '#d84315',
|
||||||
|
gold: '#ffab40',
|
||||||
|
wood: '#8d6e63',
|
||||||
|
cream: '#fefcf8',
|
||||||
|
parchment: '#f7f3ed',
|
||||||
|
charcoal: '#1a0f0a',
|
||||||
|
oak: '#2d1b12',
|
||||||
|
mahogany: '#3d2317',
|
||||||
|
}
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
plugins: [],
|
plugins: [],
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue