/* Bostevo CRM - Botones, efecto "wave" (ripple) y dropdowns genéricos */

.btn {
    position: relative;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
    padding: 10px 20px;
    border-radius: var(--radius-md);
    font-weight: 600;
    font-size: 13.8px;
    overflow: hidden;
    transition: background var(--transition-fast), box-shadow var(--transition-fast), transform var(--transition-fast);
}

.btn:active {
    transform: scale(0.98);
}

.btn-primary {
    background: linear-gradient(135deg, var(--color-primary-dark), var(--color-primary));
    color: #fff;
    box-shadow: 0 6px 16px rgba(36, 86, 224, 0.3);
}

.btn-primary:hover {
    box-shadow: 0 8px 22px rgba(36, 86, 224, 0.4);
}

.btn-secondary {
    background: var(--bg-body);
    color: var(--text-primary);
    border: 1px solid var(--border-color);
}

.btn-secondary:hover {
    background: var(--color-primary-light);
    border-color: var(--color-primary-light);
}

.btn-danger {
    background: var(--danger);
    color: #fff;
}

.btn-block {
    width: 100%;
}

.text-danger {
    color: var(--danger) !important;
}

/* ---------- Efecto WAVE (ripple) ----------
   Se aplica automáticamente por JS (assets/js/wave.js) a cualquier
   elemento con la clase .wave-btn al hacer click, sin importar si es
   un <button>, <a> o un item del menú. */
.wave-btn {
    position: relative;
    isolation: isolate;
}

.wave-ripple {
    position: absolute;
    border-radius: 50%;
    transform: scale(0);
    background: currentColor;
    opacity: 0.35;
    pointer-events: none;
    animation: bostevoWave 0.65s var(--ease-elegant);
    z-index: 0;
}

@keyframes bostevoWave {
    to {
        transform: scale(2.6);
        opacity: 0;
    }
}

/* El sidebar ahora tiene fondo blanco (antes era oscuro): el ripple debe
   verse en el azul de marca, no blanco (sería invisible sobre blanco). */
.sidebar .wave-ripple {
    background: var(--color-brand);
    opacity: 0.14;
}

/* Sobre botones primary (fondo de color) el ripple debe ser blanco */
.btn-primary .wave-ripple {
    background: #ffffff;
    opacity: 0.25;
}

/* ---------- Dropdown genérico (usado en user-menu, filtros, etc.) ---------- */
.dropdown {
    position: relative;
}

.dropdown-menu {
    position: absolute;
    top: calc(100% + 10px);
    right: 0;
    min-width: 230px;
    background: var(--bg-surface);
    border: 1px solid var(--border-color);
    border-radius: var(--radius-md);
    box-shadow: var(--shadow-lg);
    padding: 8px;
    z-index: 80;

    opacity: 0;
    visibility: hidden;
    transform: translateY(-8px) scale(0.97);
    transform-origin: top right;
    transition: opacity var(--transition-base), transform var(--transition-base), visibility var(--transition-base);
}

.dropdown-menu.open {
    opacity: 1;
    visibility: visible;
    transform: translateY(0) scale(1);
}

.dropdown-item {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 10px 12px;
    border-radius: var(--radius-sm);
    font-size: 13.5px;
    color: var(--text-primary);
    width: 100%;
    text-align: left;
}

.dropdown-item:hover {
    background: var(--bg-body);
}

.dropdown-item i {
    width: 16px;
    text-align: center;
    color: var(--text-secondary);
}

.dropdown-divider {
    height: 1px;
    background: var(--border-color);
    margin: 6px 4px;
}

/* El dropdown por defecto se abre hacia la derecha (menú de usuario, header).
   Para dropdowns de filtros en toolbars (alineados a la izquierda), usar
   esta variante para que el menú no se salga de la pantalla. */
.dropdown-menu-left {
    left: 0;
    right: auto;
    transform-origin: top left;
}

/* ---------- Buscador tipo autocomplete DENTRO de un dropdown-menu ----------
   Cualquier .dropdown-menu con un <input data-dropdown-search> filtra sus
   propios .dropdown-item al escribir (ver assets/js/dropdown-search.js).
   Reutilizable en cualquier filtro del sistema con muchas opciones (ej.
   campaña/agente en Leads), no exclusivo de un módulo. */
.dropdown-search {
    position: relative;
    margin-bottom: 6px;
}

.dropdown-search input {
    width: 100%;
    padding: 8px 10px 8px 32px;
    border-radius: var(--radius-sm);
    border: 1px solid var(--border-color);
    background: var(--bg-body);
    font-size: 13px;
}

.dropdown-search input:focus {
    outline: none;
    border-color: var(--color-primary);
    background: var(--bg-surface);
}

.dropdown-search i {
    position: absolute;
    left: 10px;
    top: 50%;
    transform: translateY(-50%);
    color: var(--text-secondary);
    font-size: 12px;
}

.dropdown-menu-scroll {
    max-height: 260px;
    overflow-y: auto;
}

.dropdown-empty {
    padding: 10px 12px;
    font-size: 12.5px;
    color: var(--text-secondary);
    text-align: center;
}
