/* ==========================================================================
   Organiza Grid - estilos base
   ========================================================================== */

.og-filters {
    list-style: none;
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    margin: 0 0 24px;
    padding: 0;
}

.og-filters li {
    margin: 0;
}

.og-filters a {
    display: inline-block;
    padding: 8px 20px;
    border-radius: 999px;
    border: 1.5px solid transparent;
    text-decoration: none;
    font-size: 14px;
    line-height: 1.4;
    background: none;
    transition: background-color 0.25s ease, color 0.25s ease, border-color 0.25s ease;
    cursor: pointer;
}

.og-grid {
    display: grid;
    grid-template-columns: repeat(var(--og-columns, 4), 1fr);
    gap: 12px;
}

@media (max-width: 991px) {
    .og-grid {
        grid-template-columns: repeat(2, 1fr);
    }
}

@media (max-width: 600px) {
    .og-grid {
        grid-template-columns: repeat(1, 1fr);
    }
}

.og-item-link {
    display: block;
    text-decoration: none;
    color: inherit;
}

.og-item {
    position: relative;
    aspect-ratio: 1/1;
    overflow: hidden;
    background: #eee;
}

.og-thumb,
.og-thumb img {
    width: 100%;
    height: 100%;
    display: block;
    object-fit: cover;
}

/* Banda inferior (caption), oculta hasta el hover.
   Reposo neutro = en su sitio (bottom: 0) pero invisible (opacity: 0). El
   JS es quien mueve el transform explícitamente: al entrar la coloca sin
   transición fuera de la tarjeta por el lado real de entrada y luego anima
   hacia (0,0); al salir anima hacia fuera por el lado real de salida y,
   cuando termina, la devuelve sin transición a (0,0) — para que la próxima
   entrada parta siempre de la posición neutra y nunca "recuerde" el lado
   por el que salió la vez anterior. */
.og-caption {
    position: absolute;
    left: 0;
    right: 0;
    bottom: 0;
    height: 28%;
    display: flex;
    align-items: center;
    justify-content: center;
    text-align: center;
    padding: 10px 16px;
    opacity: 0;
    pointer-events: none;
    transition: transform var(--og-speed, 350ms) ease, opacity var(--og-speed, 350ms) ease;
    will-change: transform, opacity;
}

.og-caption h5 {
    margin: 0;
    width: 100%;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.02em;
}

/* Mientras se coloca la banda en su punto de partida/reposo (sin animar)
   se desactiva la transición para que el salto sea instantáneo y no se
   vea un "cruce" por el centro de la tarjeta. */
.og-caption.og-no-transition {
    transition: none !important;
}

/* Estado visible: en reposo, en su sitio (la banda inferior) — usado por
   el modo "directional" (JS) */
.og-caption.is-visible {
    opacity: 1;
    transform: translate(0, 0);
    pointer-events: auto;
}

/* ---- Modo "Sin animación": aparece/desaparece al instante, sin transición
   ni desplazamiento, controlado solo con :hover (no necesita JS). ---- */
.og-wrapper[data-hover-mode="none"] .og-caption {
    transition: none;
    transform: translate(0, 0);
}

.og-wrapper[data-hover-mode="none"] .og-item:hover .og-caption {
    opacity: 1;
    pointer-events: auto;
}

/* ---- Modo "Animación simple": siempre sube desde abajo al entrar y baja
   hacia abajo al salir, sin importar por dónde entra/sale el ratón
   (controlado solo con :hover, no necesita JS). ---- */
.og-wrapper[data-hover-mode="simple"] .og-caption {
    transform: translate(0, 100%);
}

.og-wrapper[data-hover-mode="simple"] .og-item:hover .og-caption {
    opacity: 1;
    transform: translate(0, 0);
    pointer-events: auto;
}

/* Filtrado: oculta los items que no coinciden */
.og-grid .og-item-link.og-hidden {
    display: none;
}
