/* ============================================================
   UTILITÁRIOS
   ============================================================ */

.text-muted { color: var(--text-muted) !important; }
.text-secondary-custom { color: var(--text-secondary) !important; }
.text-success { color: var(--success) !important; }
.text-danger { color: var(--danger) !important; }
.text-warning { color: var(--warning-text) !important; } /* --warning puro não atinge contraste AA em texto */
.text-info { color: var(--info) !important; }
.text-primary { color: var(--primary) !important; }

.fw-bold { font-weight: var(--font-weight-bold); }
.fw-semibold { font-weight: var(--font-weight-semibold); }

.rounded-lg { border-radius: var(--radius-lg); }
.rounded-xl { border-radius: var(--radius-xl); }

.shadow-xs { box-shadow: var(--shadow-xs); }
.shadow-sm { box-shadow: var(--shadow-sm); }
.shadow-md { box-shadow: var(--shadow-md); }
.shadow-lg { box-shadow: var(--shadow-lg); }

.opacity-50 { opacity: 0.5; }
.opacity-75 { opacity: 0.75; }

.cursor-pointer { cursor: pointer; }

.min-w-0 { min-width: 0; }

/* Usado enquanto o drawer mobile do menu está aberto */
body.no-scroll {
    overflow: hidden;
}

.visually-hidden-focusable:not(:focus):not(:focus-within) {
    position: absolute !important;
    width: 1px !important;
    height: 1px !important;
    padding: 0 !important;
    margin: -1px !important;
    overflow: hidden !important;
    clip: rect(0, 0, 0, 0) !important;
    white-space: nowrap !important;
    border: 0 !important;
}

/* ---------- Skip link (navegação por teclado) ---------- */
.skip-link {
    position: absolute;
    top: -48px;
    left: var(--space-4);
    z-index: var(--z-tooltip, 1080);
    padding: var(--space-2) var(--space-4);
    background: var(--primary);
    color: #fff;
    border-radius: var(--radius-md);
    font-size: var(--font-size-sm);
    font-weight: var(--font-weight-semibold);
    text-decoration: none;
    transition: top var(--transition-fast);
}

.skip-link:focus {
    top: var(--space-4);
    color: #fff;
    outline: 2px solid #fff;
    outline-offset: 2px;
}

/* ---------- Animações discretas ---------- */
@keyframes fadeIn {
    from { opacity: 0; transform: translateY(8px); }
    to { opacity: 1; transform: translateY(0); }
}

.fade-in {
    animation: fadeIn 0.2s ease-out;
}

@keyframes slideIn {
    from { opacity: 0; transform: translateX(-16px); }
    to { opacity: 1; transform: translateX(0); }
}

.slide-in {
    animation: slideIn 0.2s ease-out;
}

@media (prefers-reduced-motion: reduce) {
    .fade-in,
    .slide-in {
        animation: none;
    }
}
