Files
website/website-mockups/css-backup-20250918-135142/animations.css
matt ec72c5d62b
Some checks failed
build-website / build (push) Failing after 1m2s
Initial import of HarborSmith website
2025-09-18 22:20:01 +02:00

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;
}