/* ============================================================
   Feedback de clique + película de transição entre páginas
   ============================================================ */

/* ---- Feedback de clique (ripple) ---- */
.btn,
button,
.nav-link,
.list-group-item-action,
[data-fl-click-feedback] {
    position: relative;
    overflow: hidden;
}

.fl-ripple {
    position: absolute;
    border-radius: 50%;
    transform: scale(0);
    background: rgba(255, 255, 255, 0.55);
    pointer-events: none;
    animation: fl-ripple-anim 0.6s ease-out forwards;
}

/* Em botões de fundo claro/outline a ripple branca some;
   usa a cor primária com baixa opacidade nesses casos. */
.btn-outline-primary .fl-ripple,
.btn-light .fl-ripple,
.btn-outline-secondary .fl-ripple,
.nav-link .fl-ripple,
.list-group-item-action .fl-ripple,
.bottom-nav-item .fl-ripple {
    background: rgba(242, 140, 51, 0.35);
}

@keyframes fl-ripple-anim {
    to {
        transform: scale(2.5);
        opacity: 0;
    }
}

/* ---- Película escura + loader (transição entre páginas) ---- */
.fl-loader-overlay {
    position: fixed;
    inset: 0;
    background: rgba(0, 2, 6, 0.75);
    backdrop-filter: blur(3px);
    display: flex;
    align-items: center;
    justify-content: center;
    z-index: 2000;
    opacity: 0;
    visibility: hidden;
    pointer-events: none;
    transition: opacity 0.4s ease, visibility 0.4s ease;
}

.fl-loader-overlay.fl-loader-visible {
    opacity: 1;
    visibility: visible;
    pointer-events: auto;
}

.fl-atom {
    width: 64px;
    height: 64px;
    position: relative;
    animation: fl-spin-atom 6s linear infinite;
}

.fl-dot-orbit {
    position: absolute;
    width: 14px;
    height: 14px;
    border-radius: 50%;
    background: var(--primary-color, #F28C33);
    box-shadow: 0 0 20px rgba(242, 140, 51, 0.4), 0 0 60px rgba(242, 140, 51, 0.15);
    animation: fl-pulse-dot 1.8s ease-in-out infinite alternate;
}

.fl-dot-orbit:nth-child(1) { top: 0; left: 50%; transform: translateX(-50%); animation-delay: 0s; }
.fl-dot-orbit:nth-child(2) { bottom: 0; left: 50%; transform: translateX(-50%); animation-delay: -0.9s; }
.fl-dot-orbit:nth-child(3) { top: 50%; left: 0; transform: translateY(-50%); animation-delay: -1.8s; }
.fl-dot-orbit:nth-child(4) { top: 50%; right: 0; transform: translateY(-50%); animation-delay: -2.7s; }

@keyframes fl-spin-atom {
    to { transform: rotate(360deg); }
}

@keyframes fl-pulse-dot {
    0% { transform: scale(0.6); opacity: 0.3; }
    100% { transform: scale(1.4); opacity: 1; }
}

/* Respeita quem prefere menos movimento */
@media (prefers-reduced-motion: reduce) {
    .fl-atom,
    .fl-dot-orbit {
        animation: none;
    }
    .fl-ripple {
        animation: none;
        opacity: 0;
    }
}