@keyframes pulse-btn {
    0% {
        transform: scale(1);
        box-shadow: 0 0 0 0 rgba(255, 255, 255, 0.7);
    }
    25% {
        transform: scale(1.01);
        box-shadow: 0 0 0 12px rgba(255, 255, 255, 0);
    }
}

@keyframes pulse-dark {
    0% {
        transform: scale(1);
        box-shadow: 0 0 0 0 rgba(0, 0, 0, 0.7);
    }
    25% {
        transform: scale(1.01);
        box-shadow: 0 0 0 12px rgba(0, 0, 0, 0);
    }
}

@keyframes rotation {
    0% {
        transform: rotate(0deg) scale(1);
    }
    100% {
        transform: rotate(180deg) scale(1);
    }
}

@keyframes core-wave {
    0% {
        opacity: 0.70;
        transform: scale(1);
        filter: blur(0px);
    }
    50% {
        opacity: 0.35;
        transform: scale(18);
        filter: blur(1px);
    }
    100% {
        opacity: 0;
        transform: scale(32);
        filter: blur(2px);
    }
}

.pulse-dark-on-click {
    /* Allow pulsing without overriding ongoing animations (rotation/pulse) */
    animation-name: pulse-dark-square, rotation;
    animation-duration: 3s, 15s;
    animation-timing-function: ease, linear;
    animation-iteration-count: 1, infinite;
    animation-fill-mode: none, none;
}

@keyframes pulse-dark-square {
    0% {
        transform: scale(0.95);
        box-shadow: 0 0 0 0 rgba(0, 0, 0, 0.7);
    }

    70% {
        transform: scale(1);
        box-shadow: 0 0 0 10px rgba(0, 0, 0, 0);
    }

    100% {
        transform: scale(0.95);
        box-shadow: 0 0 0 0 rgba(0, 0, 0, 0);
    }
}

/* Orbital wobble path for the explainer dot (small circle with slight irregularity) */
@keyframes orbit-wobble {
    /* Approximate a small circular path of ~16px diameter with wobble */
    0%   { --ox: 0px;   --oy: 0px; }
    5%   { --ox: 3px;   --oy: 1px; }
    10%  { --ox: 6px;   --oy: 2px; }
    15%  { --ox: 8px;   --oy: 5px; }
    20%  { --ox: 10px;  --oy: 8px; }
    25%  { --ox: 9px;   --oy: 11px; }
    30%  { --ox: 7px;   --oy: 12px; }
    35%  { --ox: 4px;   --oy: 13px; }
    40%  { --ox: 0px;   --oy: 12px; }
    45%  { --ox: -4px;  --oy: 11px; }
    50%  { --ox: -7px;  --oy: 9px; }
    55%  { --ox: -9px;  --oy: 6px; }
    60%  { --ox: -10px; --oy: 2px; }
    65%  { --ox: -9px;  --oy: -2px; }
    70%  { --ox: -7px;  --oy: -5px; }
    75%  { --ox: -4px;  --oy: -8px; }
    80%  { --ox: 0px;   --oy: -9px; }
    85%  { --ox: 3px;   --oy: -8px; }
    90%  { --ox: 6px;   --oy: -6px; }
    95%  { --ox: 8px;   --oy: -3px; }
    100% { --ox: 0px;   --oy: 0px; }
}

/* Subtle jitter to make the path feel more natural/"random" */
@keyframes orbit-jitter {
    0%   { --jx: 0px;    --jy: 0px; }
    10%  { --jx: 0.5px;  --jy: -0.6px; }
    20%  { --jx: -0.8px; --jy: 0.3px; }
    30%  { --jx: 1px;    --jy: 0.4px; }
    40%  { --jx: -0.6px; --jy: -0.8px; }
    50%  { --jx: 0.4px;  --jy: 1px; }
    60%  { --jx: -1px;   --jy: 0.5px; }
    70%  { --jx: 0.7px;  --jy: -0.3px; }
    80%  { --jx: -0.5px; --jy: 0.7px; }
    90%  { --jx: 0.6px;  --jy: -0.5px; }
    100% { --jx: 0px;    --jy: 0px; }
}
