/* src/styles/card-animations.css */ /* Resource Cards */ .resource-card { position: relative; border-radius: 12px; background: rgba(15, 23, 42, 0.7); backdrop-filter: blur(10px); border: 1px solid rgba(6, 182, 212, 0.1); overflow: hidden; transition: all 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275); height: 100%; display: flex; flex-direction: column; text-decoration: none; } .resource-card:hover { transform: translateY(-8px); box-shadow: 0 15px 30px rgba(0, 0, 0, 0.3), 0 0 20px rgba(6, 182, 212, 0.3); border-color: rgba(6, 182, 212, 0.4); } /* Icon Wrapper */ .resource-icon-wrapper { display: flex; align-items: center; justify-content: center; padding: 2rem; background: #0f1e2a; /* Darker background for icon area */ position: relative; overflow: hidden; } /* Icon Styles */ .resource-icon { width: 64px; height: 64px; color: #06b6d4; /* Brighter cyan color for icons */ z-index: 1; transition: transform 0.5s ease, color 0.3s ease; } .resource-card:hover .resource-icon { transform: scale(1.1); color: #0fcfe7; /* Even brighter on hover */ } /* Tech Logo (for tech-stack.astro) */ .tech-logo { width: 64px; height: 64px; border-radius: 12px; background: linear-gradient(135deg, var(--accent-primary), var(--accent-secondary)); color: var(--bg-primary); display: flex; align-items: center; justify-content: center; font-size: 1.75rem; font-weight: bold; z-index: 1; transition: transform 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275); } .resource-card:hover .tech-logo { transform: scale(1.1); box-shadow: 0 0 15px rgba(6, 182, 212, 0.3); } /* Particles */ .resource-icon-particles { position: absolute; top: 0; left: 0; width: 100%; height: 100%; pointer-events: none; } .resource-icon-particle { position: absolute; width: 5px; height: 5px; border-radius: 50%; background: var(--accent-primary); opacity: 0; /* Hidden by default */ animation: particle-float 3s infinite ease-in-out; } .resource-card:hover .resource-icon-particle { opacity: 0.7; /* Only visible on hover */ } /* Particle and dot positions and timing */ .resource-icon-particle:nth-child(1) { animation-duration: 3s; animation-delay: 0s; top: 30%; left: 40%; } .resource-icon-particle:nth-child(2) { animation-duration: 4s; animation-delay: 0.3s; top: 60%; left: 30%; } .resource-icon-particle:nth-child(3) { animation-duration: 3.5s; animation-delay: 0.7s; top: 40%; left: 60%; } .resource-icon-particle:nth-child(4) { animation-duration: 4.5s; animation-delay: 1s; top: 70%; left: 50%; } .resource-icon-particle:nth-child(5) { animation-duration: 5s; animation-delay: 1.5s; top: 50%; left: 70%; } /* Background dots */ .icon-bg-dot { position: absolute; width: 4px; height: 4px; border-radius: 50%; background-color: #06b6d4; opacity: 0; /* Hidden by default */ z-index: 0; } .resource-card:hover .icon-bg-dot { opacity: 0.3; /* Only visible on hover */ animation: float-dot 8s infinite ease-in-out; } .icon-bg-dot:nth-child(odd) { animation-duration: 6s; animation-direction: reverse; } /* Glow effect */ .resource-icon-wrapper::before { content: ''; position: absolute; width: 120px; height: 120px; background: radial-gradient(circle, rgba(6, 182, 212, 0.2), transparent 70%); opacity: 0; /* Hidden by default */ transform: scale(0.8); transition: transform 0.5s ease, opacity 0.5s ease; } .resource-card:hover .resource-icon-wrapper::before { transform: scale(1.2); opacity: 0.7; /* Only visible on hover */ } /* Card Shine Effect */ .shine-effect { position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: linear-gradient( 135deg, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.05) 50%, rgba(255, 255, 255, 0) 100% ); transform: translateX(-100%); transition: transform 0s; pointer-events: none; } .resource-card:hover .shine-effect { transform: translateX(100%); transition: transform 0.5s ease-in-out; } /* Tag styling */ .resource-tag { font-size: 0.75rem; padding: 0.25rem 0.75rem; background: rgba(6, 182, 212, 0.1); color: var(--accent-primary); border-radius: 20px; white-space: nowrap; transition: all 0.3s ease; } .resource-tag:hover { background: rgba(6, 182, 212, 0.2); transform: translateY(-2px); box-shadow: 0 3px 6px rgba(6, 182, 212, 0.2); } /* Animations */ @keyframes particle-float { 0% { transform: translate(0, 0) scale(0.5); opacity: 0; } 25% { opacity: 0.6; transform: translate(10px, -10px) scale(1); } 50% { transform: translate(20px, -15px) scale(1.2); opacity: 0.8; } 75% { opacity: 0.6; transform: translate(30px, -5px) scale(1); } 100% { transform: translate(40px, 0) scale(0.5); opacity: 0; } } @keyframes float-dot { 0% { transform: translate(0, 0); opacity: 0.2; } 25% { transform: translate(5px, -10px); opacity: 0.5; } 50% { transform: translate(15px, -5px); opacity: 0.3; } 75% { transform: translate(10px, 5px); opacity: 0.4; } 100% { transform: translate(0, 0); opacity: 0.2; } }