deckhearth/styles/globals.css
Randall Stillwell 1387ecaccb 🎨 Redesigned Card Hover with Side Information Panel
 New Side Panel Design:
- Information panel slides out from the right side of cards
- 500ms hover delay to prevent accidental triggers
- 320px wide panel with comprehensive card details
- Smooth slide-in animation with backdrop blur effect

🎯 TCG-Specific Information:
- MTG: Mana cost, Power/Toughness, Colors with proper styling
- Pokemon: HP display with yellow highlighting
- Lorcana: Ink cost, Strength/Willpower stats
- Oracle text/description for all card types

🌙 Dark Theme Support:
- Full dark mode styling for all panel elements
- Dark-aware color schemes for TCG-specific badges
- Proper contrast ratios for accessibility

 Enhanced Features:
- Structured layout: Header, Body, Footer sections
- Grid-based action buttons with tooltips
- Copy card info functionality
- Responsive design (hidden on mobile/tablet)
- Better grid spacing with right padding for panels

🎨 Professional Polish:
- Backdrop blur effects for depth
- Smooth transitions with proper easing
- Z-index management for layering
- Reduced grid columns to accommodate panels

Perfect for detailed card inspection! 🃏
2025-07-25 23:55:54 -05:00

398 lines
No EOL
9.5 KiB
CSS

@tailwind base;
@tailwind components;
@tailwind utilities;
/* Custom styles */
body {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
transition: background-color 0.3s ease, color 0.3s ease;
}
/* Theme Variables */
:root {
/* Light Theme */
--bg-primary-light: #ffffff;
--bg-secondary-light: #f8fafc;
--bg-tertiary-light: #f1f5f9;
--text-primary-light: #1e293b;
--text-secondary-light: #64748b;
--text-accent-light: #3b82f6;
--border-light: #e2e8f0;
--shadow-light: 0 4px 6px -1px rgba(0, 0, 0, 0.1);
--gradient-primary-light: linear-gradient(135deg, #3b82f6 0%, #8b5cf6 100%);
--gradient-secondary-light: linear-gradient(135deg, #06b6d4 0%, #3b82f6 100%);
--accent-blue-light: #06b6d4;
--accent-purple-light: #8b5cf6;
--accent-pink-light: #ec4899;
--input-bg-light: #ffffff;
--input-border-light: #e2e8f0;
--input-text-light: #1e293b;
--input-placeholder-light: #64748b;
}
[data-theme="dark"] {
/* Dark Theme - Based on the reference image */
--bg-primary-dark: #0f0f23;
--bg-secondary-dark: #1a1a2e;
--bg-tertiary-dark: #16213e;
--text-primary-dark: #ffffff;
--text-secondary-dark: #a1a1aa;
--text-accent-dark: #06b6d4;
--border-dark: #2d2d3a;
--shadow-dark: 0 4px 6px -1px rgba(0, 0, 0, 0.3);
--gradient-primary-dark: linear-gradient(135deg, #8b5cf6 0%, #06b6d4 100%);
--gradient-secondary-dark: linear-gradient(135deg, #ec4899 0%, #8b5cf6 100%);
--accent-blue-dark: #06b6d4;
--accent-purple-dark: #8b5cf6;
--accent-pink-dark: #ec4899;
--input-bg-dark: #1a1a2e;
--input-border-dark: #2d2d3a;
--input-text-dark: #ffffff;
--input-placeholder-dark: #a1a1aa;
--search-bg-dark: #1a1a2e;
--search-border-dark: #2d2d3a;
--search-text-dark: #ffffff;
--search-placeholder-dark: #a1a1aa;
}
/* Apply theme colors */
body {
background-color: var(--bg-primary-light);
color: var(--text-primary-light);
}
[data-theme="dark"] body {
background-color: var(--bg-primary-dark);
color: var(--text-primary-dark);
}
/* Default theme variables for light theme */
:root {
--bg-primary: var(--bg-primary-light);
--bg-secondary: var(--bg-secondary-light);
--bg-tertiary: var(--bg-tertiary-light);
--text-primary: var(--text-primary-light);
--text-secondary: var(--text-secondary-light);
--text-accent: var(--text-accent-light);
--border: var(--border-light);
--shadow: var(--shadow-light);
--gradient-primary: var(--gradient-primary-light);
--gradient-secondary: var(--gradient-secondary-light);
--accent-blue: var(--accent-blue-light);
--accent-purple: var(--accent-purple-light);
--accent-pink: var(--accent-pink-light);
--input-bg: var(--input-bg-light);
--input-border: var(--input-border-light);
--input-text: var(--input-text-light);
--input-placeholder: var(--input-placeholder-light);
}
/* Dark theme variables */
[data-theme="dark"] {
--bg-primary: var(--bg-primary-dark);
--bg-secondary: var(--bg-secondary-dark);
--bg-tertiary: var(--bg-tertiary-dark);
--text-primary: var(--text-primary-dark);
--text-secondary: var(--text-secondary-dark);
--text-accent: var(--text-accent-dark);
--border: var(--border-dark);
--shadow: var(--shadow-dark);
--gradient-primary: var(--gradient-primary-dark);
--gradient-secondary: var(--gradient-secondary-dark);
--accent-blue: var(--accent-blue-dark);
--accent-purple: var(--accent-purple-dark);
--accent-pink: var(--accent-pink-dark);
--input-bg: var(--input-bg-dark);
--input-border: var(--input-border-dark);
--input-text: var(--input-text-dark);
--input-placeholder: var(--input-placeholder-dark);
}
/* Custom component styles */
.btn-primary {
@apply font-bold py-3 px-6 rounded-2xl transition-all duration-300 shadow-lg hover:shadow-xl;
background: var(--gradient-primary);
color: white;
}
.btn-secondary {
@apply font-bold py-3 px-6 rounded-2xl transition-all duration-300 shadow-lg hover:shadow-xl;
background: var(--gradient-secondary);
color: white;
}
.input-field {
@apply w-full px-4 py-3 border rounded-2xl shadow-sm focus:outline-none focus:ring-2 focus:ring-offset-0 transition-all duration-200;
background-color: var(--input-bg);
border-color: var(--input-border);
color: var(--input-text);
}
.input-field::placeholder {
color: var(--input-placeholder);
}
.card {
@apply rounded-3xl shadow-lg p-6 transition-all duration-300;
background-color: var(--bg-primary);
border: 1px solid var(--border);
}
/* Glowing effects for dark theme */
[data-theme="dark"] .glow-blue {
box-shadow: 0 0 20px rgba(6, 182, 212, 0.3);
}
[data-theme="dark"] .glow-purple {
box-shadow: 0 0 20px rgba(139, 92, 246, 0.3);
}
[data-theme="dark"] .glow-pink {
box-shadow: 0 0 20px rgba(236, 72, 153, 0.3);
}
/* Gradient text effects */
.gradient-text-blue {
background: linear-gradient(135deg, #06b6d4 0%, #3b82f6 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
.gradient-text-purple {
background: linear-gradient(135deg, #8b5cf6 0%, #ec4899 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
/* Theme toggle button */
.theme-toggle {
@apply p-2 rounded-2xl transition-all duration-300;
background: var(--bg-secondary);
color: var(--text-primary);
}
/* Header icons */
.header-icon {
@apply p-2 rounded-xl transition-all duration-200;
color: var(--text-secondary);
}
/* Logo styling */
.logo-container {
@apply rounded-2xl flex items-center justify-center transition-all duration-300;
background: var(--gradient-primary);
}
/* Custom scrollbar */
::-webkit-scrollbar {
width: 8px;
}
::-webkit-scrollbar-track {
background: var(--bg-secondary);
}
::-webkit-scrollbar-thumb {
background: var(--text-secondary);
border-radius: 4px;
}
::-webkit-scrollbar-thumb:hover {
background: var(--text-accent);
}
/* Search bar specific styling */
.search-bar {
@apply w-full px-4 py-3 border rounded-2xl shadow-sm focus:outline-none focus:ring-2 focus:ring-offset-0 transition-all duration-200;
background-color: var(--input-bg);
border-color: var(--input-border);
color: var(--input-text);
}
.search-bar::placeholder {
color: var(--input-placeholder);
}
/* Action buttons with proper gradients */
.action-btn-primary {
@apply font-bold py-3 px-6 rounded-2xl transition-all duration-300 shadow-lg hover:shadow-xl;
background: var(--gradient-primary);
color: white;
}
.action-btn-secondary {
@apply font-bold py-3 px-6 rounded-2xl transition-all duration-300 shadow-lg hover:shadow-xl;
background: var(--gradient-secondary);
color: white;
}
/* Particle Effects for High Rarity Cards */
@keyframes float {
0%, 100% {
transform: translateY(0px) translateX(0px);
opacity: 0.7;
}
25% {
transform: translateY(-8px) translateX(4px);
opacity: 1;
}
50% {
transform: translateY(-4px) translateX(-2px);
opacity: 0.8;
}
75% {
transform: translateY(-12px) translateX(6px);
opacity: 0.9;
}
}
@keyframes sparkle {
0%, 100% {
transform: scale(1) rotate(0deg);
opacity: 0.8;
}
25% {
transform: scale(1.5) rotate(90deg);
opacity: 1;
}
50% {
transform: scale(0.8) rotate(180deg);
opacity: 0.6;
}
75% {
transform: scale(1.2) rotate(270deg);
opacity: 0.9;
}
}
@keyframes aura {
0%, 100% {
opacity: 0.1;
transform: scale(1);
}
50% {
opacity: 0.2;
transform: scale(1.05);
}
}
@keyframes edgeFloat {
0%, 100% {
opacity: 0.7;
transform: translateY(0px) translateX(0px);
}
25% {
opacity: 1;
transform: translateY(-3px) translateX(2px);
}
50% {
opacity: 0.8;
transform: translateY(-1px) translateX(-1px);
}
75% {
opacity: 0.9;
transform: translateY(-4px) translateX(3px);
}
}
@keyframes edgeGlow {
0%, 100% {
opacity: 0.4;
transform: scale(1);
}
25% {
opacity: 0.8;
transform: scale(1.2);
}
50% {
opacity: 0.6;
transform: scale(0.8);
}
75% {
opacity: 0.9;
transform: scale(1.1);
}
}
/* Enhanced glow effects for mythic and enchanted cards */
.card-mythic-glow {
box-shadow:
0 0 20px rgba(255, 215, 0, 0.4),
0 0 40px rgba(255, 215, 0, 0.2),
0 0 60px rgba(255, 215, 0, 0.1);
}
.card-enchanted-glow {
box-shadow:
0 0 20px rgba(168, 85, 247, 0.4),
0 0 40px rgba(168, 85, 247, 0.2),
0 0 60px rgba(168, 85, 247, 0.1);
}
/* Card Hover Panel Styles */
.card-item-container {
position: relative;
}
.card-item-container:hover {
z-index: 50;
}
.card-item-container.selected {
z-index: 60;
}
/* Ensure proper layering during animations */
.card-grid-container {
position: relative;
z-index: 1;
}
/* Prevent text selection during card interactions */
.card-item-container * {
user-select: none;
}
/* Side panel specific styles */
.card-side-panel {
transform-origin: left center;
backdrop-filter: blur(8px);
}
/* Responsive adjustments for side panels */
@media (max-width: 1280px) {
.card-side-panel {
width: 16rem; /* w-64 */
}
}
@media (max-width: 1024px) {
.card-side-panel {
display: none; /* Hide panels on smaller screens */
}
}
/* Dark mode improvements */
@media (prefers-color-scheme: dark) {
.card-side-panel {
backdrop-filter: blur(8px) brightness(0.8);
}
}
/* Smooth panel transitions */
.card-panel-enter {
opacity: 0;
transform: translateX(8px);
}
.card-panel-enter-active {
opacity: 1;
transform: translateX(0);
transition: all 300ms ease-out;
}