435 lines
7.7 KiB
CSS
435 lines
7.7 KiB
CSS
/* HarborSmith - Animation Styles */
|
|
/* ========================= */
|
|
|
|
/* Fade Animations */
|
|
@keyframes fadeIn {
|
|
from {
|
|
opacity: 0;
|
|
}
|
|
to {
|
|
opacity: 1;
|
|
}
|
|
}
|
|
|
|
@keyframes fadeInUp {
|
|
from {
|
|
opacity: 0;
|
|
transform: translateY(30px);
|
|
}
|
|
to {
|
|
opacity: 1;
|
|
transform: translateY(0);
|
|
}
|
|
}
|
|
|
|
@keyframes fadeInDown {
|
|
from {
|
|
opacity: 0;
|
|
transform: translateY(-30px);
|
|
}
|
|
to {
|
|
opacity: 1;
|
|
transform: translateY(0);
|
|
}
|
|
}
|
|
|
|
@keyframes fadeInLeft {
|
|
from {
|
|
opacity: 0;
|
|
transform: translateX(-30px);
|
|
}
|
|
to {
|
|
opacity: 1;
|
|
transform: translateX(0);
|
|
}
|
|
}
|
|
|
|
@keyframes fadeInRight {
|
|
from {
|
|
opacity: 0;
|
|
transform: translateX(30px);
|
|
}
|
|
to {
|
|
opacity: 1;
|
|
transform: translateX(0);
|
|
}
|
|
}
|
|
|
|
/* Scale Animations */
|
|
@keyframes scaleIn {
|
|
from {
|
|
opacity: 0;
|
|
transform: scale(0.9);
|
|
}
|
|
to {
|
|
opacity: 1;
|
|
transform: scale(1);
|
|
}
|
|
}
|
|
|
|
@keyframes pulse {
|
|
0%, 100% {
|
|
transform: scale(1);
|
|
}
|
|
50% {
|
|
transform: scale(1.05);
|
|
}
|
|
}
|
|
|
|
/* Rotate Animations */
|
|
@keyframes rotate {
|
|
from {
|
|
transform: rotate(0deg);
|
|
}
|
|
to {
|
|
transform: rotate(360deg);
|
|
}
|
|
}
|
|
|
|
@keyframes spin {
|
|
0% {
|
|
transform: rotate(0deg);
|
|
}
|
|
100% {
|
|
transform: rotate(360deg);
|
|
}
|
|
}
|
|
|
|
/* Slide Animations */
|
|
@keyframes slideInLeft {
|
|
from {
|
|
transform: translateX(-100%);
|
|
}
|
|
to {
|
|
transform: translateX(0);
|
|
}
|
|
}
|
|
|
|
@keyframes slideInRight {
|
|
from {
|
|
transform: translateX(100%);
|
|
}
|
|
to {
|
|
transform: translateX(0);
|
|
}
|
|
}
|
|
|
|
@keyframes slideInUp {
|
|
from {
|
|
transform: translateY(100%);
|
|
}
|
|
to {
|
|
transform: translateY(0);
|
|
}
|
|
}
|
|
|
|
@keyframes slideInDown {
|
|
from {
|
|
transform: translateY(-100%);
|
|
}
|
|
to {
|
|
transform: translateY(0);
|
|
}
|
|
}
|
|
|
|
/* Special Effects */
|
|
@keyframes shimmer {
|
|
0% {
|
|
background-position: -1000px 0;
|
|
}
|
|
100% {
|
|
background-position: 1000px 0;
|
|
}
|
|
}
|
|
|
|
@keyframes ripple {
|
|
0% {
|
|
transform: scale(0);
|
|
opacity: 1;
|
|
}
|
|
100% {
|
|
transform: scale(4);
|
|
opacity: 0;
|
|
}
|
|
}
|
|
|
|
@keyframes wave {
|
|
0%, 100% {
|
|
transform: translateX(0);
|
|
}
|
|
25% {
|
|
transform: translateX(-25px);
|
|
}
|
|
75% {
|
|
transform: translateX(25px);
|
|
}
|
|
}
|
|
|
|
@keyframes float {
|
|
0%, 100% {
|
|
transform: translateY(0);
|
|
}
|
|
50% {
|
|
transform: translateY(-20px);
|
|
}
|
|
}
|
|
|
|
@keyframes bounce {
|
|
0%, 20%, 50%, 80%, 100% {
|
|
transform: translateY(0);
|
|
}
|
|
40% {
|
|
transform: translateY(-30px);
|
|
}
|
|
60% {
|
|
transform: translateY(-15px);
|
|
}
|
|
}
|
|
|
|
/* Loading Animation */
|
|
@keyframes loading {
|
|
0% {
|
|
transform: rotate(0deg);
|
|
}
|
|
100% {
|
|
transform: rotate(360deg);
|
|
}
|
|
}
|
|
|
|
.loading-spinner {
|
|
width: 40px;
|
|
height: 40px;
|
|
border: 3px solid var(--border);
|
|
border-top-color: var(--primary);
|
|
border-radius: 50%;
|
|
animation: loading 1s linear infinite;
|
|
}
|
|
|
|
/* Utility Classes */
|
|
.animate-fade-in {
|
|
animation: fadeIn 0.5s ease-out;
|
|
}
|
|
|
|
.animate-fade-up {
|
|
animation: fadeInUp 0.6s ease-out;
|
|
}
|
|
|
|
.animate-fade-up-delay {
|
|
animation: fadeInUp 0.6s ease-out 0.2s both;
|
|
}
|
|
|
|
.animate-fade-up-delay-2 {
|
|
animation: fadeInUp 0.6s ease-out 0.4s both;
|
|
}
|
|
|
|
.animate-scale-in {
|
|
animation: scaleIn 0.5s ease-out;
|
|
}
|
|
|
|
.animate-pulse {
|
|
animation: pulse 2s ease-in-out infinite;
|
|
}
|
|
|
|
.animate-float {
|
|
animation: float 3s ease-in-out infinite;
|
|
}
|
|
|
|
.animate-bounce {
|
|
animation: bounce 2s ease-in-out infinite;
|
|
}
|
|
|
|
/* Scroll Animations */
|
|
.scroll-animate {
|
|
opacity: 0;
|
|
transform: translateY(30px);
|
|
transition: all 0.6s ease-out;
|
|
}
|
|
|
|
.scroll-animate.visible {
|
|
opacity: 1;
|
|
transform: translateY(0);
|
|
}
|
|
|
|
.scroll-animate-left {
|
|
opacity: 0;
|
|
transform: translateX(-30px);
|
|
transition: all 0.6s ease-out;
|
|
}
|
|
|
|
.scroll-animate-left.visible {
|
|
opacity: 1;
|
|
transform: translateX(0);
|
|
}
|
|
|
|
.scroll-animate-right {
|
|
opacity: 0;
|
|
transform: translateX(30px);
|
|
transition: all 0.6s ease-out;
|
|
}
|
|
|
|
.scroll-animate-right.visible {
|
|
opacity: 1;
|
|
transform: translateX(0);
|
|
}
|
|
|
|
.scroll-animate-scale {
|
|
opacity: 0;
|
|
transform: scale(0.9);
|
|
transition: all 0.6s ease-out;
|
|
}
|
|
|
|
.scroll-animate-scale.visible {
|
|
opacity: 1;
|
|
transform: scale(1);
|
|
}
|
|
|
|
/* Parallax Effects */
|
|
.parallax {
|
|
transition: transform 0.5s cubic-bezier(0.25, 0.46, 0.45, 0.94);
|
|
}
|
|
|
|
.parallax-slow {
|
|
transition: transform 0.8s cubic-bezier(0.25, 0.46, 0.45, 0.94);
|
|
}
|
|
|
|
.parallax-fast {
|
|
transition: transform 0.3s cubic-bezier(0.25, 0.46, 0.45, 0.94);
|
|
}
|
|
|
|
/* Hover Effects */
|
|
.hover-lift {
|
|
transition: transform 0.3s ease;
|
|
}
|
|
|
|
.hover-lift:hover {
|
|
transform: translateY(-5px);
|
|
}
|
|
|
|
.hover-grow {
|
|
transition: transform 0.3s ease;
|
|
}
|
|
|
|
.hover-grow:hover {
|
|
transform: scale(1.05);
|
|
}
|
|
|
|
.hover-shrink {
|
|
transition: transform 0.3s ease;
|
|
}
|
|
|
|
.hover-shrink:hover {
|
|
transform: scale(0.95);
|
|
}
|
|
|
|
.hover-rotate {
|
|
transition: transform 0.3s ease;
|
|
}
|
|
|
|
.hover-rotate:hover {
|
|
transform: rotate(5deg);
|
|
}
|
|
|
|
/* Text Effects */
|
|
.text-gradient-animate {
|
|
background: linear-gradient(
|
|
90deg,
|
|
var(--primary) 0%,
|
|
var(--accent) 25%,
|
|
var(--primary) 50%,
|
|
var(--accent) 75%,
|
|
var(--primary) 100%
|
|
);
|
|
background-size: 200% auto;
|
|
-webkit-background-clip: text;
|
|
-webkit-text-fill-color: transparent;
|
|
background-clip: text;
|
|
animation: shimmer 3s linear infinite;
|
|
}
|
|
|
|
/* Page Transitions */
|
|
.page-transition-fade {
|
|
animation: fadeIn 0.5s ease-out;
|
|
}
|
|
|
|
.page-transition-slide-up {
|
|
animation: slideInUp 0.5s ease-out;
|
|
}
|
|
|
|
.page-transition-slide-left {
|
|
animation: slideInLeft 0.5s ease-out;
|
|
}
|
|
|
|
/* Stagger Animations */
|
|
.stagger-animate > * {
|
|
opacity: 0;
|
|
transform: translateY(20px);
|
|
animation: fadeInUp 0.5s ease-out forwards;
|
|
}
|
|
|
|
.stagger-animate > *:nth-child(1) { animation-delay: 0.1s; }
|
|
.stagger-animate > *:nth-child(2) { animation-delay: 0.2s; }
|
|
.stagger-animate > *:nth-child(3) { animation-delay: 0.3s; }
|
|
.stagger-animate > *:nth-child(4) { animation-delay: 0.4s; }
|
|
.stagger-animate > *:nth-child(5) { animation-delay: 0.5s; }
|
|
.stagger-animate > *:nth-child(6) { animation-delay: 0.6s; }
|
|
|
|
/* Skeleton Loading */
|
|
.skeleton {
|
|
background: linear-gradient(
|
|
90deg,
|
|
var(--surface) 25%,
|
|
var(--border) 50%,
|
|
var(--surface) 75%
|
|
);
|
|
background-size: 200% 100%;
|
|
animation: shimmer 1.5s infinite;
|
|
}
|
|
|
|
/* Progress Bar Animation */
|
|
.progress-bar-fill {
|
|
animation: fillProgress 2s ease-out forwards;
|
|
}
|
|
|
|
@keyframes fillProgress {
|
|
from {
|
|
width: 0%;
|
|
}
|
|
to {
|
|
width: var(--progress, 100%);
|
|
}
|
|
}
|
|
|
|
/* Counter Animation */
|
|
.counter-animate {
|
|
animation: countUp 2s ease-out;
|
|
}
|
|
|
|
@keyframes countUp {
|
|
from {
|
|
opacity: 0;
|
|
transform: translateY(20px);
|
|
}
|
|
to {
|
|
opacity: 1;
|
|
transform: translateY(0);
|
|
}
|
|
}
|
|
|
|
/* Water Wave Effect */
|
|
@keyframes waterWave {
|
|
0% {
|
|
transform: translateX(0) translateZ(0) scaleY(1);
|
|
}
|
|
50% {
|
|
transform: translateX(-25%) translateZ(0) scaleY(0.8);
|
|
}
|
|
100% {
|
|
transform: translateX(-50%) translateZ(0) scaleY(1);
|
|
}
|
|
}
|
|
|
|
.water-wave {
|
|
background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1200 120' preserveAspectRatio='none'%3E%3Cpath d='M321.39,56.44c58-10.79,114.16-30.13,172-41.86,82.39-16.72,168.19-17.73,250.45-.39C823.78,31,906.67,72,985.66,92.83c70.05,18.48,146.53,26.09,214.34,3V0H0V27.35A600.21,600.21,0,0,0,321.39,56.44Z' fill='%23ffffff' fill-opacity='0.3'%3E%3C/path%3E%3C/svg%3E");
|
|
background-size: 200% 100%;
|
|
animation: waterWave 10s linear infinite;
|
|
} |