/* =============================================================================
   MoikSys Advanced Gallery Widget — v1.1.0
   Compatible con Elementor Free
   ============================================================================= */

/* --------------------------------------------------------------------------
   Placeholder (solo en editor)
   -------------------------------------------------------------------------- */
.moiksys-gallery-placeholder {
	display: flex;
	flex-direction: column;
	align-items: center;
	justify-content: center;
	padding: 48px 24px;
	background: #f7f7f7;
	border: 2px dashed #cccccc;
	color: #aaaaaa;
	text-align: center;
	border-radius: 6px;
}
.moiksys-gallery-placeholder p {
	margin: 0;
	font-size: 14px;
}

/* --------------------------------------------------------------------------
   Wrapper
   -------------------------------------------------------------------------- */
.moiksys-gallery-wrapper {
	width: 100%;
	box-sizing: border-box;
}

/* --------------------------------------------------------------------------
   Elemento base
   -------------------------------------------------------------------------- */
.moiksys-gallery-item {
	position: relative;
	overflow: hidden;
	display: block;
	box-sizing: border-box;
	background-color: transparent;
}

.moiksys-gallery-link {
	display: block;
	width: 100%;
	height: 100%;
	text-decoration: none;
	outline: none;
}

/* --------------------------------------------------------------------------
   Contenedor de imagen
   -------------------------------------------------------------------------- */
.moiksys-gallery-image-wrap {
	position: relative;
	overflow: hidden;
	display: block;
	width: 100%;
	height: 100%;
}

.moiksys-gallery-img {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
	transition: transform 0.38s cubic-bezier(0.4, 0, 0.2, 1);
}

/* --- Proporción de imagen (aplicada vía prefix_class en el wrapper) ------ */
.moiksys-ratio-square   .moiksys-gallery-grid .moiksys-gallery-image-wrap,
.moiksys-ratio-square   .moiksys-gallery-carousel .moiksys-gallery-image-wrap { aspect-ratio: 1 / 1; }

.moiksys-ratio-landscape .moiksys-gallery-grid .moiksys-gallery-image-wrap,
.moiksys-ratio-landscape .moiksys-gallery-carousel .moiksys-gallery-image-wrap { aspect-ratio: 4 / 3; }

.moiksys-ratio-wide  .moiksys-gallery-grid .moiksys-gallery-image-wrap,
.moiksys-ratio-wide  .moiksys-gallery-carousel .moiksys-gallery-image-wrap { aspect-ratio: 16 / 9; }

.moiksys-ratio-portrait .moiksys-gallery-grid .moiksys-gallery-image-wrap,
.moiksys-ratio-portrait .moiksys-gallery-carousel .moiksys-gallery-image-wrap { aspect-ratio: 3 / 4; }

.moiksys-ratio-auto .moiksys-gallery-img {
	height: auto;
	object-fit: initial;
}

/* --- Zoom al pasar cursor ------------------------------------------------ */
.moiksys-img-zoom-yes .moiksys-gallery-item:hover .moiksys-gallery-img {
	transform: scale(1.07);
}

/* --------------------------------------------------------------------------
   Diseño CUADRÍCULA (Grid)
   -------------------------------------------------------------------------- */
.moiksys-gallery-grid {
	display: grid;
	grid-template-columns: repeat(var(--moiksys-columns, 3), 1fr);
	gap: 8px;
}

/* --------------------------------------------------------------------------
   Diseño MOSAICO — columnas CSS (sin JS para el layout)
   -------------------------------------------------------------------------- */
.moiksys-gallery-masonry {
	columns: var(--moiksys-columns, 3);
	column-gap: 8px;
	gap: 8px;
}

.moiksys-gallery-masonry .moiksys-gallery-item {
	break-inside: avoid;
	page-break-inside: avoid;
	-webkit-column-break-inside: avoid;
	margin-bottom: 8px;
	display: block;
	width: 100%;
}

.moiksys-gallery-masonry .moiksys-gallery-img {
	height: auto;
	object-fit: initial;
}

/* --------------------------------------------------------------------------
   Diseño JUSTIFICADO — filas flex con altura uniforme
   -------------------------------------------------------------------------- */
.moiksys-gallery-justified {
	display: flex;
	flex-wrap: wrap;
	gap: 8px;
	align-items: flex-start;
}

.moiksys-gallery-justified .moiksys-gallery-item {
	flex: 1 1 200px;
	min-width: 120px;
	max-width: 100%;
}

.moiksys-gallery-justified .moiksys-gallery-image-wrap {
	height: 220px;
}

.moiksys-gallery-justified .moiksys-gallery-img {
	width: 100%;
	height: 100%;
	object-fit: cover;
}

/* --------------------------------------------------------------------------
   Diseño CARRUSEL
   -------------------------------------------------------------------------- */
.moiksys-gallery-carousel-outer {
	position: relative;
}

.moiksys-gallery-carousel {
	display: flex;
	overflow: hidden;
	gap: 8px;
	scroll-behavior: smooth;
	-webkit-overflow-scrolling: touch;
}

.moiksys-gallery-carousel .moiksys-gallery-item {
	flex: 0 0 calc(
		(100% - (var(--moiksys-columns, 3) - 1) * 8px) / var(--moiksys-columns, 3)
	);
	min-width: 0;
}

/* Botones de navegación del carrusel */
.moiksys-carousel-btn {
	position: absolute;
	top: 50%;
	transform: translateY(-50%);
	z-index: 10;
	width: 40px;
	height: 40px;
	border-radius: 50%;
	border: none;
	background: rgba(0, 0, 0, 0.50);
	color: #ffffff;
	cursor: pointer;
	display: flex;
	align-items: center;
	justify-content: center;
	transition: background-color 0.22s ease, color 0.22s ease, opacity 0.22s ease;
	padding: 0;
	flex-shrink: 0;
}
.moiksys-carousel-btn:hover { background: rgba(0, 0, 0, 0.80); }
.moiksys-carousel-btn:disabled { opacity: 0.35; cursor: default; pointer-events: none; }
.moiksys-carousel-btn.moiksys-carousel-prev { left: -20px; }
.moiksys-carousel-btn.moiksys-carousel-next { right: -20px; }
.moiksys-carousel-btn svg { flex-shrink: 0; }

/* Puntos de navegación del carrusel */
.moiksys-carousel-dots {
	display: flex;
	align-items: center;
	justify-content: center;
	gap: 8px;
	margin-top: 16px;
	flex-wrap: wrap;
	width: 100%;
}

.moiksys-dot {
	display: block;
	width: 10px;
	height: 10px;
	border-radius: 50%;
	background-color: rgba(0, 0, 0, 0.25);
	border: none;
	padding: 0;
	cursor: pointer;
	transition: background-color 0.22s ease, width 0.22s ease, height 0.22s ease;
	flex-shrink: 0;
}

.moiksys-dot.active {
	background-color: #333333;
	width: 12px;
	height: 12px;
}

.moiksys-dot:not(.active):hover {
	background-color: rgba(0, 0, 0, 0.50);
}

/* --------------------------------------------------------------------------
   Superposición (overlay)
   -------------------------------------------------------------------------- */
.moiksys-gallery-overlay {
	position: absolute;
	inset: 0;
	display: flex;
	flex-direction: column;
	background-color: rgba(0, 0, 0, 0.58);
	pointer-events: none;
	will-change: opacity, transform;
}

/* Desvanecer */
.moiksys-gallery-overlay.moiksys-hover-fade {
	opacity: 0;
	transition: opacity 0.32s ease;
}
.moiksys-gallery-item:hover .moiksys-gallery-overlay.moiksys-hover-fade {
	opacity: 1;
}

/* Deslizar arriba */
.moiksys-gallery-overlay.moiksys-hover-slide-up {
	transform: translateY(100%);
	opacity: 1;
	transition: transform 0.34s ease;
}
.moiksys-gallery-item:hover .moiksys-gallery-overlay.moiksys-hover-slide-up {
	transform: translateY(0);
}

/* Deslizar abajo */
.moiksys-gallery-overlay.moiksys-hover-slide-down {
	transform: translateY(-100%);
	opacity: 1;
	transition: transform 0.34s ease;
}
.moiksys-gallery-item:hover .moiksys-gallery-overlay.moiksys-hover-slide-down {
	transform: translateY(0);
}

/* Acercar (zoom) */
.moiksys-gallery-overlay.moiksys-hover-zoom {
	opacity: 0;
	transform: scale(0.82);
	transition: opacity 0.30s ease, transform 0.30s ease;
}
.moiksys-gallery-item:hover .moiksys-gallery-overlay.moiksys-hover-zoom {
	opacity: 1;
	transform: scale(1);
}

/* --------------------------------------------------------------------------
   Información (título + descripción dentro del overlay)
   -------------------------------------------------------------------------- */
.moiksys-gallery-info {
	padding: 12px 14px;
	display: flex;
	flex-direction: column;
	gap: 4px;
	width: 100%;
	box-sizing: border-box;
}

.moiksys-gallery-title {
	display: block;
	color: #ffffff;
	font-size: 14px;
	font-weight: 600;
	line-height: 1.35;
	margin: 0;
}

.moiksys-gallery-caption {
	display: block;
	color: rgba(255, 255, 255, 0.80);
	font-size: 12px;
	line-height: 1.45;
	margin: 0;
}

/* --------------------------------------------------------------------------
   Botón cargar más
   -------------------------------------------------------------------------- */
.moiksys-load-more-wrap {
	display: flex;
	justify-content: center;
	margin-top: 28px;
}

.moiksys-load-more-btn {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: 8px;
	padding: 12px 36px;
	background-color: #2d2d2d;
	color: #ffffff;
	border: none;
	border-radius: 4px;
	cursor: pointer;
	font-size: 14px;
	font-weight: 500;
	letter-spacing: 0.02em;
	line-height: 1;
	transition: background-color 0.22s ease, color 0.22s ease, opacity 0.22s ease;
	text-align: center;
	white-space: nowrap;
}

.moiksys-load-more-btn:hover {
	opacity: 0.82;
}

.moiksys-load-more-btn:disabled,
.moiksys-load-more-btn[disabled] {
	opacity: 0.45;
	cursor: not-allowed;
}

/* Spinner de carga */
.moiksys-load-more-btn .moiksys-spinner {
	display: inline-block;
	width: 16px;
	height: 16px;
	border: 2px solid rgba(255,255,255,0.4);
	border-top-color: #fff;
	border-radius: 50%;
	animation: moiksys-spin 0.7s linear infinite;
}

@keyframes moiksys-spin {
	to { transform: rotate(360deg); }
}

/* --------------------------------------------------------------------------
   Paginación
   -------------------------------------------------------------------------- */
.moiksys-pagination {
	display: flex;
	align-items: center;
	justify-content: center;
	gap: 6px;
	margin-top: 28px;
	flex-wrap: wrap;
}

.moiksys-pagination button,
.moiksys-page-btn {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-width: 36px;
	height: 36px;
	padding: 0 8px;
	background-color: #f0f0f0;
	color: #333333;
	border: none;
	border-radius: 4px;
	cursor: pointer;
	font-size: 14px;
	font-family: inherit;
	transition: background-color 0.2s ease, color 0.2s ease;
	line-height: 1;
	box-sizing: border-box;
}

.moiksys-pagination button.active,
.moiksys-page-btn.active {
	background-color: #2d2d2d;
	color: #ffffff;
	pointer-events: none;
	font-weight: 600;
}

.moiksys-pagination button:not(.active):hover,
.moiksys-page-btn:not(.active):hover {
	background-color: #e0e0e0;
}

.moiksys-pagination button:disabled,
.moiksys-page-btn:disabled {
	opacity: 0.38;
	cursor: not-allowed;
	pointer-events: none;
}

/* Estado de carga de página */
.moiksys-gallery-wrapper.is-loading .moiksys-gallery-grid,
.moiksys-gallery-wrapper.is-loading .moiksys-gallery-masonry,
.moiksys-gallery-wrapper.is-loading .moiksys-gallery-justified,
.moiksys-gallery-wrapper.is-loading .moiksys-gallery-carousel {
	opacity: 0.45;
	pointer-events: none;
	transition: opacity 0.2s ease;
}

/* --------------------------------------------------------------------------
   Animación de entrada para nuevos elementos (cargar más)
   -------------------------------------------------------------------------- */
.moiksys-gallery-item.moiksys-new {
	animation: moiksys-item-in 0.42s ease both;
}

@keyframes moiksys-item-in {
	from { opacity: 0; transform: translateY(18px); }
	to   { opacity: 1; transform: translateY(0); }
}

/* --------------------------------------------------------------------------
   Responsive por defecto (se sobreescriben por los selectores de Elementor)
   -------------------------------------------------------------------------- */
@media (max-width: 1024px) {
	.moiksys-gallery-grid,
	.moiksys-gallery-masonry,
	.moiksys-gallery-carousel {
		--moiksys-columns: 2;
	}
	.moiksys-carousel-btn.moiksys-carousel-prev { left: -14px; }
	.moiksys-carousel-btn.moiksys-carousel-next { right: -14px; }
}

@media (max-width: 767px) {
	.moiksys-gallery-grid,
	.moiksys-gallery-masonry,
	.moiksys-gallery-carousel {
		--moiksys-columns: 1;
	}
	.moiksys-gallery-justified .moiksys-gallery-item {
		flex: 1 1 100%;
	}
	.moiksys-carousel-btn.moiksys-carousel-prev { left: 4px; }
	.moiksys-carousel-btn.moiksys-carousel-next { right: 4px; }
}

/* En táctil: overlay siempre visible */
@media (hover: none) and (pointer: coarse) {
	.moiksys-gallery-overlay {
		opacity: 1 !important;
		transform: none !important;
	}
}
