@import url('https://fonts.googleapis.com/css2?family=Dosis:wght@200..800&family=Space+Mono:ital,wght@0,400;0,700;1,400;1,700&family=Libre+Baskerville:ital,wght@0,400..700;1,400..700&display=swap');
/* Google Fonts: Dosis */
.dosis-bold {
    font-family: "Dosis", serif;
    font-optical-sizing: auto;
    font-weight: 600;
    font-style: normal;
}
.dosis-extra-bold {
    font-family: "Dosis", serif;
    font-optical-sizing: auto;
    font-weight: 700;
    font-style: normal;
}
/* Google Fonts: Space Mono */
.space-mono-regular {
    font-family: "Space Mono", serif;
    font-weight: 400;
    font-style: normal;
}
.space-mono-bold {
    font-family: "Space Mono", serif;
    font-weight: 700;
    font-style: normal;
}
.space-mono-regular-italic {
    font-family: "Space Mono", serif;
    font-weight: 400;
    font-style: italic;
}
.space-mono-bold-italic {
    font-family: "Space Mono", serif;
    font-weight: 700;
    font-style: italic;
}
/* Google Font: Libre Baskerville */
.text-serif-regular {
    font-family: "Libre Baskerville", serif;
    font-optical-sizing: auto;
    font-weight: 400;
    font-style: normal;
}
/* Credit: Manuel Pinto (https://codepen.io/P1N2O/pen/pyBNzX) */
.color-banner {
    background: linear-gradient(-45deg, #ee7752, #e73c7e, #23a6d5, #23d5ab);
    background-size: 400% 400%;
    animation: gradient 15s ease infinite;
}

    @keyframes gradient {
        0% {
            background-position: 0% 50%;
        }
        50% {
            background-position: 100% 50%;
        }
        100% {
            background-position: 0% 50%;
        }
    }

/* Social Proof Donation */
@keyframes slide-up-down {
    0% { opacity: 0; transform: translateY(20px); }
    10% { opacity: 1; transform: translateY(0); }
    90% { opacity: 1; transform: translateY(0); }
    100% { opacity: 0; transform: translateY(20px); }
}
.animate-slide-up-down {
    animation: slide-up-down 5s ease-in-out forwards;
}

/* Donation Modal */
/* Progress Bar Transition */
.modal-progress-bar {
    transition: width 0.3s ease-in-out;
}

/* Modal Overlay & Base (Keep your existing styles) */
.modal-overlay {
    display: flex;
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background: rgba(0, 0, 0, 0.7);
    justify-content: center;
    align-items: center;
    z-index: 50;

    opacity: 0;
    visibility: hidden;
    transition: opacity 0.3s ease, visibility 0.3s ease;
}
.modal-overlay.visible {
    opacity: 1;
    visibility: visible;
}
.modal {
    background: white;
    width: 90%;
    max-width: 600px; /* Limits width on big screens */
    border-radius: 8px;
    z-index: 51;
    max-height: 90vh; /* Prevents it being too tall */
    overflow-y: auto; /* Scroll inside modal if needed */
    transform: scale(0.9);
    transition: transform 0.3s ease;
}
.modal-overlay.visible .modal {
    transform: scale(1);
}
/* ====== DONATE SECTION ========= */
.progress-wrapper {
  margin-bottom: 2rem;
}

.progress-labels {
  display: flex;
  justify-content: space-between;
  font-size: 0.95rem;
  margin-bottom: 0.5rem;
}

.progress-bar {
  width: 100%;
  height: 18px;
  background: #e3efe9;
  border-radius: 999px;
  overflow: hidden;
}

.progress-fill {
  height: 100%;
  width: var(--progress);
  background: linear-gradient(90deg, #2f9e7d, #6bcf9b);
  border-radius: 999px;
  animation: grow 1.5s ease-out;
}

@keyframes grow {
  from { width: 0; }
  to { width: var(--progress); }
}
/* Satellite Timelapse */
.timelapse-container {
    position: relative;
    width: 100%;
    max-width: 900px;
    margin: auto;
    aspect-ratio: 16 / 9;
    overflow: hidden;
    border-radius: 16px;
    box-shadow: 0 10px 30px rgba(0,0,0,0.25);
}

.timelapse-container img {
width: 100%;
height: 100%;
object-fit: cover;
}

.year-label {
    position: absolute;
    top: 20px;
    right: 20px;
    z-index: 10;
    background: rgba(0, 0, 0, 0.6);
    color: white;
    font-weight: 600;
    letter-spacing: 1px;
}
/* Smooth zoom on final frame */
.timelapse-container img {
    transition:
        opacity 1.2s ease,
        transform 6s ease;
    transform-origin: center center;
}

/* Applied only to final frame */
.timelapse-container img.zoom-final {
    transform: scale(1.25);
}

.hide-scrollbar::-webkit-scrollbar { display: none; }

.hide-scrollbar { -ms-overflow-style: none; scrollbar-width: none; }

/* Animation for the Live indicator */
@keyframes pulse-red {
    0% { box-shadow: 0 0 0 0 rgba(220, 38, 38, 0.7); }
    70% { box-shadow: 0 0 0 6px rgba(220, 38, 38, 0); }
    100% { box-shadow: 0 0 0 0 rgba(220, 38, 38, 0); }
}
.live-dot { animation: pulse-red 2s infinite; }

/* Calendar */
.event-section {
    scroll-margin-top: 6rem;
}  
.event-section:target {
    outline: 3px solid #67e8f9;
    border-radius: 1rem;
}

/* ==== ACTIVITY TICKER === */
@keyframes ticker-scroll {
    0% { transform: translateX(0); }
    100% { transform: translateX(-50%); }
}

.animate-ticker {
    display: flex;
    width: fit-content;
    animation: ticker-scroll 60s linear infinite;
}

/* Pause when the link wrapper is hovered */
#ticker-link-wrapper:hover #ticker-track {
    animation-play-state: paused;
}

/* ==== CAMPAIGN THERMOMETER === */
/* 1. Define the animation */
@keyframes grow-progress {
    from { width: 0%; }
    to { width: var(--final-width); } /* We use a CSS variable for the goal */
}

.progress-fill {
    height: 100%;
    background-color: #0891b2; /* cyan-600 */
    width: 0%; /* Start at 0% */
    border-radius: 999px;
}

/* 2. This class will be added by JS when the user scrolls into view */
.animate-now {
    animation: grow-progress 2s cubic-bezier(0.1, 0.5, 0.5, 1) forwards;
}