#spinner-overlay {
    position: fixed;
    top:0; left:0;
    width:100%; height:100%;
    background: rgba(255,255,255,0.5);
    backdrop-filter: blur(5px);
    /* Ensure hidden on load */
    display: none !important;
    visibility: hidden !important;
    opacity: 0 !important;

    flex-direction: column;
    align-items: center; 
    justify-content: center;
    z-index: 9999;
    pointer-events: none;
    transition: opacity 0.3s ease;
}
#spinner-overlay.active { 
    display: flex !important; 
    visibility: visible !important;
    opacity: 1 !important; 
    pointer-events: all !important; 
}

.spinner-border {
    width: 4rem;
    height: 4rem;
    border-width: 0.5rem;
    animation: spin 1s linear infinite;
}
@keyframes spin { 100% { transform: rotate(360deg); } }

.fade-message {
    padding: 10px;
    border-radius: 5px;
    color: white;
    margin-bottom: 5px;
    opacity: 1;
    transition: opacity 1s;
}

/* HTML: <div class="loader"></div> */
.loader {
  --d:22px;
  width: 4px;
  height: 4px;
  border-radius: 50%;
  color: #25b09b;
  box-shadow: 
    calc(1*var(--d))      calc(0*var(--d))     0 0,
    calc(0.707*var(--d))  calc(0.707*var(--d)) 0 1px,
    calc(0*var(--d))      calc(1*var(--d))     0 2px,
    calc(-0.707*var(--d)) calc(0.707*var(--d)) 0 3px,
    calc(-1*var(--d))     calc(0*var(--d))     0 4px,
    calc(-0.707*var(--d)) calc(-0.707*var(--d))0 5px,
    calc(0*var(--d))      calc(-1*var(--d))    0 6px;
  animation: l27 1s infinite steps(8);
}
@keyframes l27 {
  100% {transform: rotate(1turn)}
}