/* =============================================
   animations.css — Keyframe Animations
   ============================================= */

@keyframes neutronStar {

    0%,
    100% {
        transform: translate(0, 0) scale(1);
        box-shadow: 0 0 30px #ff6b6b, 0 0 60px rgba(255, 107, 107, 0.3);
    }

    25% {
        transform: translate(50px, -20px) scale(1.1);
        box-shadow: 0 0 40px #ff6b6b, 0 0 80px rgba(255, 107, 107, 0.5);
    }

    50% {
        transform: translate(100px, 10px) scale(0.9);
        box-shadow: 0 0 50px #ff6b6b, 0 0 100px rgba(255, 107, 107, 0.7);
    }

    75% {
        transform: translate(70px, 30px) scale(1.2);
        box-shadow: 0 0 60px #ff6b6b, 0 0 120px rgba(255, 107, 107, 0.6);
    }
}

@keyframes blackHole {

    0%,
    100% {
        transform: translate(0, 0) scale(1);
        box-shadow: 0 0 0 3px rgba(255, 255, 255, 0.1),
            0 0 50px rgba(138, 43, 226, 0.4),
            inset 0 0 20px #000;
    }

    25% {
        transform: translate(-60px, 15px) scale(1.1);
        box-shadow: 0 0 0 5px rgba(255, 255, 255, 0.2),
            0 0 70px rgba(138, 43, 226, 0.6),
            inset 0 0 25px #000;
    }

    50% {
        transform: translate(-120px, -5px) scale(1.2);
        box-shadow: 0 0 0 7px rgba(255, 255, 255, 0.3),
            0 0 90px rgba(138, 43, 226, 0.8),
            inset 0 0 30px #000;
    }

    75% {
        transform: translate(-80px, -25px) scale(1.05);
        box-shadow: 0 0 0 4px rgba(255, 255, 255, 0.15),
            0 0 60px rgba(138, 43, 226, 0.5),
            inset 0 0 22px #000;
    }
}

@keyframes accretionDisk {
    0% {
        transform: translate(-50%, -50%) rotate(0deg);
    }

    100% {
        transform: translate(-50%, -50%) rotate(360deg);
    }
}

@keyframes gravitationalWave {
    0% {
        opacity: 0.8;
        transform: translate(-50%, -50%) scale(0.5);
        border-color: rgba(0, 255, 255, 0.8);
    }

    50% {
        opacity: 0.4;
        border-color: rgba(0, 255, 255, 0.4);
    }

    100% {
        opacity: 0;
        transform: translate(-50%, -50%) scale(2);
        border-color: rgba(0, 255, 255, 0);
    }
}

@keyframes darkMatter {
    0% {
        transform: translate(0, 0) rotate(0deg);
        opacity: 0;
    }

    10% {
        opacity: 0.7;
    }

    90% {
        opacity: 0.3;
    }

    100% {
        transform: translate(100vw, -50vh) rotate(360deg);
        opacity: 0;
    }
}

@keyframes twinkle {
    0% {
        opacity: 0.3;
        transform: scale(1);
    }

    100% {
        opacity: 1;
        transform: scale(1.2);
    }
}

@keyframes drift {
    0% {
        transform: translate(-100px, 100vh);
    }

    100% {
        transform: translate(100vw, -100px);
    }
}

@keyframes energyJet {

    0%,
    100% {
        opacity: 0.3;
        transform: scaleY(1);
        filter: blur(1px);
    }

    50% {
        opacity: 0.8;
        transform: scaleY(1.5);
        filter: blur(0px);
    }
}

/* Animations */
@keyframes fadeInUp {
    from {
        opacity: 0;
        transform: translateY(30px);
    }

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

@keyframes float {

    0%,
    100% {
        transform: translateY(0px);
    }

    50% {
        transform: translateY(-20px);
    }
}

/* ═══════════════════════════════════════════════════
   PULSAR – rotating polar beam
   ═══════════════════════════════════════════════════ */

/* Pulsar 1 – wanders across the upper-right and mid-screen regions */
@keyframes pulsarDrift1 {
    0%   { transform: translate(  0vw,   0vh); }
    10%  { transform: translate(  8vw,  12vh); }
    22%  { transform: translate(-14vw,   7vh); }
    35%  { transform: translate(  4vw,  30vh); }
    48%  { transform: translate(-20vw,  42vh); }
    58%  { transform: translate( 18vw,  20vh); }
    70%  { transform: translate( -7vw,  -5vh); }
    82%  { transform: translate( 24vw,  33vh); }
    92%  { transform: translate( 10vw,  14vh); }
    100% { transform: translate(  0vw,   0vh); }
}

/* Pulsar 2 – starts bottom-left, roams upper-right and centre regions */
@keyframes pulsarDrift2 {
    0%   { transform: translate(  0vw,   0vh); }
    12%  { transform: translate( 24vw, -20vh); }
    25%  { transform: translate( 42vw, -40vh); }
    38%  { transform: translate( 14vw, -54vh); }
    52%  { transform: translate( 50vw,  -8vh); }
    65%  { transform: translate( 30vw, -30vh); }
    78%  { transform: translate(  8vw, -44vh); }
    90%  { transform: translate( 36vw, -16vh); }
    100% { transform: translate(  0vw,   0vh); }
}

@keyframes pulsarSpin {
    from { transform: translate(-50%, -50%) rotate(0deg); }
    to   { transform: translate(-50%, -50%) rotate(360deg); }
}

@keyframes pulsarPulse {
    0%, 100% {
        transform: translate(-50%, -50%) scale(1);
        box-shadow: 0 0 8px #fff, 0 0 20px #88ccff, 0 0 38px rgba(80, 180, 255, 0.5);
    }
    50% {
        transform: translate(-50%, -50%) scale(1.25);
        box-shadow: 0 0 14px #fff, 0 0 32px #aae0ff, 0 0 65px rgba(80, 180, 255, 0.95);
    }
}

/* ═══════════════════════════════════════════════════
   BINARY MERGER – inspiral + collision + GW rings
   ═══════════════════════════════════════════════════ */

/* Object A – black hole (orbits clockwise from the right) */
@keyframes binaryOrbitA {
    /* ── Orbit 1 (full radius ~44px) ── */
    0%     { transform: translate( 44px,   0px); opacity: 1; }
    6.25%  { transform: translate(  0px, -44px); opacity: 1; }
    12.5%  { transform: translate(-44px,   0px); opacity: 1; }
    18.75% { transform: translate(  0px,  44px); opacity: 1; }
    /* ── Orbit 2 (~38px) ── */
    25%    { transform: translate( 38px,   0px); opacity: 1; }
    31.25% { transform: translate(  0px, -38px); opacity: 1; }
    37.5%  { transform: translate(-38px,   0px); opacity: 1; }
    43.75% { transform: translate(  0px,  38px); opacity: 1; }
    /* ── Orbit 3 – tightening (~26px) ── */
    50%    { transform: translate( 26px,   0px); opacity: 1; }
    54%    { transform: translate(  0px, -26px); opacity: 1; }
    58%    { transform: translate(-26px,   0px); opacity: 1; }
    62%    { transform: translate(  0px,  18px); opacity: 1; }
    /* ── Rapid collapse ── */
    65%    { transform: translate( 12px,   0px); opacity: 1; }
    67%    { transform: translate( -5px,   0px); opacity: 1; }
    68.5%  { transform: translate(  2px,   0px); opacity: 1; }
    69.5%  { transform: translate(  0px,   0px); opacity: 0.3; }
    /* ── Merged – invisible ── */
    70%    { transform: translate(0, 0); opacity: 0; }
    91%    { transform: translate(0, 0); opacity: 0; }
    /* ── Re-emerge ── */
    100%   { transform: translate(44px, 0); opacity: 1; }
}

/* Object B – neutron star (always diametrically opposite) */
@keyframes binaryOrbitB {
    0%     { transform: translate(-44px,   0px); opacity: 1; }
    6.25%  { transform: translate(  0px,  44px); opacity: 1; }
    12.5%  { transform: translate( 44px,   0px); opacity: 1; }
    18.75% { transform: translate(  0px, -44px); opacity: 1; }
    25%    { transform: translate(-38px,   0px); opacity: 1; }
    31.25% { transform: translate(  0px,  38px); opacity: 1; }
    37.5%  { transform: translate( 38px,   0px); opacity: 1; }
    43.75% { transform: translate(  0px, -38px); opacity: 1; }
    50%    { transform: translate(-26px,   0px); opacity: 1; }
    54%    { transform: translate(  0px,  26px); opacity: 1; }
    58%    { transform: translate( 26px,   0px); opacity: 1; }
    62%    { transform: translate(  0px, -18px); opacity: 1; }
    65%    { transform: translate(-12px,   0px); opacity: 1; }
    67%    { transform: translate(  5px,   0px); opacity: 1; }
    68.5%  { transform: translate( -2px,   0px); opacity: 1; }
    69.5%  { transform: translate(  0px,   0px); opacity: 0.3; }
    70%    { transform: translate(0, 0); opacity: 0; }
    91%    { transform: translate(0, 0); opacity: 0; }
    100%   { transform: translate(-44px, 0); opacity: 1; }
}

/* Merger flash burst */
@keyframes mergerFlash {
    0%, 69%  { opacity: 0; transform: translate(-50%, -50%) scale(0); }
    70%      { opacity: 1; transform: translate(-50%, -50%) scale(0.4); }
    72%      { opacity: 1; transform: translate(-50%, -50%) scale(1.3); }
    76%      { opacity: 0.7; transform: translate(-50%, -50%) scale(2.2); }
    81%      { opacity: 0; transform: translate(-50%, -50%) scale(3.2); }
    100%     { opacity: 0; }
}

/* Expanding GW rings after merger */
@keyframes mergerRing {
    0%, 71%  {
        opacity: 0;
        transform: translate(-50%, -50%) scale(0);
        border-color: rgba(0, 230, 255, 0.9);
    }
    72%      { opacity: 0.9; transform: translate(-50%, -50%) scale(0.2); }
    86%      { opacity: 0.3; transform: translate(-50%, -50%) scale(2.8); }
    95%      { opacity: 0;   transform: translate(-50%, -50%) scale(4.2); }
    100%     { opacity: 0; }
}

/* Remnant black hole appears after merger */
@keyframes remnantAppear {
    0%, 71%  { opacity: 0; transform: translate(-50%, -50%) scale(0); }
    73%      { opacity: 1; transform: translate(-50%, -50%) scale(1.4); }
    76%      { opacity: 1; transform: translate(-50%, -50%) scale(1);   }
    89%      { opacity: 0.9; transform: translate(-50%, -50%) scale(1); }
    92%      { opacity: 0;   transform: translate(-50%, -50%) scale(0); }
    100%     { opacity: 0; }
}