/* ==========================================================================
   CAPE COAST PROPERTIES — Custom Style Add-ons & Keyframes
   ========================================================================== */

/* 1. Custom Google Fonts Integration Fallbacks */
body {
    font-family: 'Plus Jakarta Sans', ui-sans-serif, system-ui, -apple-system, sans-serif;
}
h1, h2, h3, h4, h5, h6, .font-heading {
    font-family: 'Playfair Display', Georgia, Cambria, serif;
}

/* 2. Scrollbar customization */
.scrollbar-none::-webkit-scrollbar {
    display: none;
}
.scrollbar-none {
    -ms-overflow-style: none;  /* IE and Edge */
    scrollbar-width: none;  /* Firefox */
}

/* 3. Preloader Animations */
.animate-ping-slow {
    animation: ping 3s cubic-bezier(0, 0, 0.2, 1) infinite;
}

/* 4. Diagonal-wipe Mobile Menu Transitions */
.clip-diagonal-start {
    clip-path: circle(0% at 100% 0%);
}
.clip-diagonal-end {
    clip-path: circle(150% at 100% 0%);
    transition: clip-path 0.5s cubic-bezier(0.4, 0, 0.2, 1);
}

/* 5. Scroll Reveal Utilities */
.reveal-on-scroll {
    opacity: 0;
    transform: translateY(30px);
    transition: opacity 0.8s cubic-bezier(0.16, 1, 0.3, 1), transform 0.8s cubic-bezier(0.16, 1, 0.3, 1);
    will-change: transform, opacity;
}

.reveal-on-scroll.revealed {
    opacity: 1;
    transform: translateY(0);
}

/* Stagger delay classes for scroll reveal */
.reveal-delay-100 { transition-delay: 100ms; }
.reveal-delay-200 { transition-delay: 200ms; }
.reveal-delay-300 { transition-delay: 300ms; }
.reveal-delay-400 { transition-delay: 400ms; }

/* 6. Custom Animations */
.animate-spin-slow {
    animation: spin 25s linear infinite;
}

.animate-pulse-slow {
    animation: pulse-slow 3s ease-in-out infinite;
}

@keyframes pulse-slow {
    0%, 100% { opacity: 0.15; }
    50% { opacity: 0.35; }
}

.animate-bounce-short {
    animation: bounce-short 2.5s ease-in-out infinite;
}

@keyframes bounce-short {
    0%, 100% {
        transform: translateY(0);
    }
    50% {
        transform: translateY(-5px);
    }
}

.animate-fade-in-slow {
    animation: fadeIn 1s ease-out forwards;
}

.animate-fade-in-up {
    animation: fadeInUp 0.6s cubic-bezier(0.16, 1, 0.3, 1) forwards;
}

@keyframes fadeIn {
    from { opacity: 0; }
    to { opacity: 1; }
}

@keyframes fadeInUp {
    from {
        opacity: 0;
        transform: translateY(30px);
    }
    to {
        opacity: 1;
        transform: translateY(0);
    }
}

/* Mobile Menu Links Slide-Up animation */
.animate-slide-up-stagger {
    opacity: 0;
    transform: translateY(15px);
    animation: slideUp 0.4s cubic-bezier(0.16, 1, 0.3, 1) forwards;
}

@keyframes slideUp {
    to {
        opacity: 1;
        transform: translateY(0);
    }
}

/* 7. Infinite Scrolling Marquee Banner */
@keyframes marquee {
    0% { transform: translateX(0); }
    100% { transform: translateX(-50%); }
}

.animate-marquee {
    display: flex;
    width: max-content;
    animation: marquee 30s linear infinite;
}

/* 8. Infinite Scrolling Reviews Track */
@keyframes scroll-reviews {
    0% { transform: translateX(0); }
    100% { transform: translateX(-50%); }
}

.animate-scroll-reviews {
    display: flex;
    width: max-content;
    animation: scroll-reviews 45s linear infinite;
}

.mask-reviews {
    mask-image: linear-gradient(to right, transparent, white 8%, white 92%, transparent);
    -webkit-mask-image: linear-gradient(to right, transparent, white 8%, white 92%, transparent);
}

/* 9. Floating Hover Effects */
.hover-float {
    transition: transform 0.4s cubic-bezier(0.16, 1, 0.3, 1), box-shadow 0.4s cubic-bezier(0.16, 1, 0.3, 1), border-color 0.4s cubic-bezier(0.16, 1, 0.3, 1);
}

.hover-float:hover {
    transform: translateY(-6px);
    box-shadow: 0 20px 40px -15px rgba(30, 30, 30, 0.08);
}

.hover-scale {
    transition: transform 0.3s cubic-bezier(0.16, 1, 0.3, 1);
}

.hover-scale:hover {
    transform: scale(1.03);
}

/* 10. Global Cursor Interaction Settings */
button,
[type="button"],
[type="reset"],
[type="submit"],
a,
select {
    cursor: pointer !important;
}

/* Custom visual styling overrides */
.clip-diagonal-wipe {
    clip-path: polygon(0 0, 100% 0, 100% 100%, 0 100%);
}
