/* GRESº · Text reveal (ver assets/js/gres-reveal.js) */
:root {
	--gres-ease: cubic-bezier(.16, 1, .3, 1); /* expo out: arranca rápido y se posa despacio */
	--gres-dur: 1.15s;
}

/* Evita el parpadeo antes de que corra el JS (html.gres-js se pone en <head>). */
html.gres-js .gres-landing:not(.gres-reveal-on) .elementor-widget:not(.elementor-screen-only),
html.gres-js .gres-landing:not(.gres-reveal-on) #reserva { opacity: 0; }

/* Palabras: suben desde una máscara con un leve desenfoque */
.gres-w {
	display: inline-block;
	overflow: hidden;
	vertical-align: top;
	padding-bottom: .12em; /* que no recorte descendentes */
	margin-bottom: -.12em;
}
.gres-w__i {
	display: inline-block;
	transform: translate3d(0, 105%, 0) rotate(2deg);
	transform-origin: 0 100%;
	opacity: 0;
	filter: blur(6px);
	transition:
		transform var(--gres-dur) var(--gres-ease),
		opacity calc(var(--gres-dur) * .8) var(--gres-ease),
		filter var(--gres-dur) var(--gres-ease);
	transition-delay: calc(var(--d, 0s) + var(--i, 0) * .045s);
	will-change: transform;
}
.gres-rv.is-in .gres-w__i { transform: none; opacity: 1; filter: none; }

/* Lema letra a letra, con el espaciado abriéndose */
.gres-rv--chars .gres-c {
	display: inline-block;
	white-space: pre;
	opacity: 0;
	transform: translate3d(0, .35em, 0);
	filter: blur(4px);
	transition: opacity 1s var(--gres-ease), transform 1s var(--gres-ease), filter 1s var(--gres-ease);
	transition-delay: calc(var(--d, 0s) + .2s + var(--i, 0) * .03s);
}
.gres-rv--chars { letter-spacing: .05em !important; transition: letter-spacing 2.2s var(--gres-ease) calc(var(--d, 0s) + .2s); }
.gres-rv--chars.is-in { letter-spacing: .2em !important; }
.gres-rv--chars.is-in .gres-c { opacity: 1; transform: none; filter: none; }

/* Logo: barrido de máscara de abajo arriba. Va en el hijo: con clip-path en el
   elemento observado, IntersectionObserver lo da por invisible y nunca entra. */
.gres-rv--mask > * {
	clip-path: inset(100% 0 0 0);
	transform: translate3d(0, 18px, 0) scale(1.04);
	transition: clip-path 1.6s var(--gres-ease) var(--d, 0s), transform 1.8s var(--gres-ease) var(--d, 0s);
}
.gres-rv--mask.is-in > * { clip-path: inset(0 0 0 0); transform: none; }

/* Líneas: se dibujan desde el centro */
.gres-rv--line .elementor-divider-separator {
	transform: scaleX(0);
	transition: transform 1.6s var(--gres-ease) calc(var(--d, 0s) + .1s);
}
.gres-rv--line.is-in .elementor-divider-separator { transform: scaleX(1); }

/* Botones, QR, icono y caja de reservas */
.gres-rv--rise {
	opacity: 0;
	transform: translate3d(0, 24px, 0);
	transition: opacity 1.2s var(--gres-ease) calc(var(--d, 0s) + .25s), transform 1.2s var(--gres-ease) calc(var(--d, 0s) + .25s);
}
.gres-rv--rise.is-in { opacity: 1; transform: none; }

@media (prefers-reduced-motion: reduce) {
	html.gres-js .gres-landing .elementor-widget, html.gres-js .gres-landing #reserva { opacity: 1 !important; }
}
