/*
 * Recepcja: animacje wejścia i efekty przycisków.
 * Animujemy tylko opacity, transform, filter i clip-path: układ strony nie skacze.
 * Ukrywanie działa wyłącznie przy klasie html.rcp-anim-on (dodaje ją skrypt w <head>,
 * nie dodaje przy "ogranicz ruch" w systemie i zdejmuje, gdy JS się nie wczyta).
 */

:root {
	--rcp-ease: cubic-bezier(0.22, 0.61, 0.36, 1);
}

[data-rcp-delay="100"] { --rcp-delay: 100ms; }
[data-rcp-delay="200"] { --rcp-delay: 200ms; }
[data-rcp-delay="300"] { --rcp-delay: 300ms; }
[data-rcp-delay="500"] { --rcp-delay: 500ms; }
[data-rcp-delay="800"] { --rcp-delay: 800ms; }

/* ------------------------------------------------------------------
 * Animacje wejścia
 * ---------------------------------------------------------------- */

/* Przejście istnieje tylko na czas animacji (potem .rcp-done), żeby nie psuć efektów hover. */
html.rcp-anim-on [data-rcp-anim]:not(.rcp-done) {
	transition:
		opacity 0.8s var(--rcp-ease),
		transform 0.9s var(--rcp-ease),
		filter 0.9s var(--rcp-ease),
		clip-path 1.1s var(--rcp-ease);
	transition-delay: var(--rcp-delay, 0ms);
}

html.rcp-anim-on [data-rcp-anim="fade"]:not(.rcp-in),
html.rcp-anim-on [data-rcp-anim="fade-up"]:not(.rcp-in),
html.rcp-anim-on [data-rcp-anim="slide-left"]:not(.rcp-in),
html.rcp-anim-on [data-rcp-anim="slide-right"]:not(.rcp-in),
html.rcp-anim-on [data-rcp-anim="zoom"]:not(.rcp-in),
html.rcp-anim-on [data-rcp-anim="blur"]:not(.rcp-in) {
	opacity: 0;
}

html.rcp-anim-on [data-rcp-anim="fade-up"]:not(.rcp-in) { transform: translateY(40px); }
html.rcp-anim-on [data-rcp-anim="slide-left"]:not(.rcp-in) { transform: translateX(-60px); }
html.rcp-anim-on [data-rcp-anim="slide-right"]:not(.rcp-in) { transform: translateX(60px); }
html.rcp-anim-on [data-rcp-anim="zoom"]:not(.rcp-in) { transform: scale(0.92); }
html.rcp-anim-on [data-rcp-anim="blur"]:not(.rcp-in) { filter: blur(14px); }

/* Zasłona: element odsłania się z wybranej strony, zdjęcie w środku lekko się oddala. */
html.rcp-anim-on [data-rcp-anim^="reveal"] { clip-path: inset(0 0 0 0); }
html.rcp-anim-on [data-rcp-anim="reveal-left"]:not(.rcp-in) { clip-path: inset(0 100% 0 0); }
html.rcp-anim-on [data-rcp-anim="reveal-right"]:not(.rcp-in) { clip-path: inset(0 0 0 100%); }
html.rcp-anim-on [data-rcp-anim="reveal-up"]:not(.rcp-in) { clip-path: inset(100% 0 0 0); }
html.rcp-anim-on [data-rcp-anim="reveal-down"]:not(.rcp-in) { clip-path: inset(0 0 100% 0); }

html.rcp-anim-on [data-rcp-anim^="reveal"]:not(.rcp-done):not([data-rcp-parallax]) img {
	transition: transform 1.6s var(--rcp-ease);
	transition-delay: var(--rcp-delay, 0ms);
}

html.rcp-anim-on [data-rcp-anim^="reveal"]:not(.rcp-in):not([data-rcp-parallax]) img {
	transform: scale(1.18);
}

/* Tekst i elementy po kolei: całość ukryta, dopóki skrypt nie podzieli treści. */
html.rcp-anim-on [data-rcp-anim="words"]:not([data-rcp-ready]),
html.rcp-anim-on [data-rcp-anim="lines"]:not([data-rcp-ready]),
html.rcp-anim-on [data-rcp-anim="stagger"]:not([data-rcp-ready]),
html.rcp-anim-on [data-rcp-anim="chars"]:not([data-rcp-ready]),
html.rcp-anim-on [data-rcp-anim="type"]:not([data-rcp-ready]),
html.rcp-anim-on [data-rcp-anim="scramble"]:not([data-rcp-ready]),
html.rcp-anim-on [data-rcp-anim="scroll-color"]:not([data-rcp-ready]),
html.rcp-anim-on [data-rcp-anim="counter"]:not([data-rcp-ready]) {
	opacity: 0;
}

.rcp-w {
	display: inline-block;
	overflow: hidden;
	vertical-align: top;
	padding-bottom: 0.12em;
	margin-bottom: -0.12em;
}

.rcp-w__in {
	display: inline-block;
}

[data-rcp-anim="words"] .rcp-w {
	overflow: visible;
}

html.rcp-anim-on [data-rcp-anim="words"]:not(.rcp-in) .rcp-w__in {
	opacity: 0;
	transform: translateY(0.5em);
}

html.rcp-anim-on [data-rcp-anim="words"]:not(.rcp-done) .rcp-w__in {
	transition: opacity 0.6s var(--rcp-ease), transform 0.6s var(--rcp-ease);
	transition-delay: calc(var(--rcp-delay, 0ms) + var(--i, 0) * 45ms);
}

html.rcp-anim-on [data-rcp-anim="lines"]:not(.rcp-in) .rcp-w__in {
	transform: translateY(110%);
}

html.rcp-anim-on [data-rcp-anim="lines"]:not(.rcp-done) .rcp-w__in {
	transition: transform 0.9s var(--rcp-ease);
	transition-delay: calc(var(--rcp-delay, 0ms) + var(--i, 0) * 110ms);
}

html.rcp-anim-on [data-rcp-anim="stagger"]:not(.rcp-in) .rcp-part {
	opacity: 0;
	transform: translateY(30px);
}

html.rcp-anim-on [data-rcp-anim="stagger"]:not(.rcp-done) .rcp-part {
	transition: opacity 0.7s var(--rcp-ease), transform 0.7s var(--rcp-ease);
	transition-delay: calc(var(--rcp-delay, 0ms) + var(--i, 0) * 90ms);
}

/* ------------------------------------------------------------------
 * Paralaksa: zdjęcie przesuwa się w kadrze (albo cały element lekko płynie).
 * --rcp-py liczy skrypt; klasa html.rcp-px-on tylko gdy skrypt działa.
 * ---------------------------------------------------------------- */

[data-rcp-parallax="1"] { --rcp-ps: 1.15; }
[data-rcp-parallax="2"] { --rcp-ps: 1.25; }

html.rcp-px-on [data-rcp-parallax] img {
	transform: translate3d(0, var(--rcp-py, 0px), 0) scale(var(--rcp-ps, 1.15));
	transition: none;
	will-change: transform;
}

html.rcp-px-on [data-rcp-parallax].rcp-px-self {
	transform: translate3d(0, var(--rcp-py, 0px), 0);
}

.elementor-widget-image[data-rcp-parallax] {
	overflow: hidden;
}

/* Tekst literami: czytnik ekranu czyta .rcp-sr, litery są tylko dla oka. */
.rcp-sr {
	position: absolute !important;
	width: 1px;
	height: 1px;
	margin: -1px;
	padding: 0;
	overflow: hidden;
	clip-path: inset(50%);
	white-space: nowrap;
	border: 0;
}

.rcp-cw {
	display: inline-block;
	white-space: nowrap;
}

.rcp-c {
	display: inline-block;
	white-space: pre;
}

html.rcp-anim-on [data-rcp-anim="chars"]:not(.rcp-in) .rcp-c {
	opacity: 0;
	transform: translateY(0.45em);
}

html.rcp-anim-on [data-rcp-anim="chars"]:not(.rcp-done) .rcp-c {
	transition: opacity 0.5s var(--rcp-ease), transform 0.5s var(--rcp-ease);
	transition-delay: calc(var(--rcp-delay, 0ms) + var(--i, 0) * var(--rcp-step, 20ms));
}

/* Pisanie na klawiaturze */
html.rcp-anim-on [data-rcp-anim="type"] .rcp-c:not(.on) {
	opacity: 0;
}

.rcp-caret {
	display: inline-block;
	width: 2px;
	height: 1em;
	margin-left: 1px;
	background: currentColor;
	vertical-align: -0.12em;
	animation: rcp-blink 0.9s steps(1) infinite;
}

@keyframes rcp-blink {
	50% { opacity: 0; }
}

/* Losowe znaki */
html.rcp-anim-on [data-rcp-anim="scramble"]:not(.rcp-in) .rcp-chars {
	opacity: 0;
}

/* Zakreślacz: pogrubione fragmenty (albo cały tekst) dostają podkład w kolorze głównym. */
[data-rcp-anim="highlight"] {
	--rcp-hl: color-mix(in srgb, var(--e-global-color-primary, #b5838d) 30%, transparent);
}

.rcp-mark {
	background-image: linear-gradient(var(--rcp-hl), var(--rcp-hl));
	background-repeat: no-repeat;
	background-position: 0 88%;
	background-size: 100% 0.38em;
	-webkit-box-decoration-break: clone;
	box-decoration-break: clone;
}

html.rcp-anim-on [data-rcp-anim="highlight"]:not(.rcp-in) .rcp-mark {
	background-size: 0% 0.38em;
}

html.rcp-anim-on [data-rcp-anim="highlight"]:not(.rcp-done) .rcp-mark {
	transition: background-size 0.9s var(--rcp-ease);
	transition-delay: calc(var(--rcp-delay, 0ms) + 300ms + var(--i, 0) * 200ms);
}

/* Zabarwianie przy przewijaniu */
html.rcp-anim-on [data-rcp-anim="scroll-color"] .rcp-w__in {
	opacity: 0.2;
	transition: opacity 0.35s linear;
}

html.rcp-anim-on [data-rcp-anim="scroll-color"] .rcp-w__in.is-lit {
	opacity: 1;
}

/* Liczby: stała szerokość cyfr, żeby tekst nie skakał podczas odliczania. */
.rcp-num {
	font-variant-numeric: tabular-nums;
}

/* ------------------------------------------------------------------
 * Efekty przycisków
 * Klasa globalna z panelu (body.rcp-btnfx-*) działa na przyciski bez własnego wyboru,
 * klasa widgetu (.rcp-btn-fx-*) wygrywa zawsze.
 * ---------------------------------------------------------------- */

.elementor-button {
	--rcp-fx: var(--e-global-color-accent, #2e2a27);
}

/* Wspólna baza dla efektów z warstwą pod tekstem. */
body.rcp-btnfx-fill :is(.elementor-widget-button, .elementor-widget-rcp-booking):not([class*="rcp-btn-fx-"]) .elementor-button,
body.rcp-btnfx-fill-up :is(.elementor-widget-button, .elementor-widget-rcp-booking):not([class*="rcp-btn-fx-"]) .elementor-button,
body.rcp-btnfx-roll :is(.elementor-widget-button, .elementor-widget-rcp-booking):not([class*="rcp-btn-fx-"]) .elementor-button,
body.rcp-btnfx-shine :is(.elementor-widget-button, .elementor-widget-rcp-booking):not([class*="rcp-btn-fx-"]) .elementor-button,
body.rcp-btnfx-border :is(.elementor-widget-button, .elementor-widget-rcp-booking):not([class*="rcp-btn-fx-"]) .elementor-button,
.rcp-btn-fx-fill .elementor-button,
.rcp-btn-fx-fill-up .elementor-button,
.rcp-btn-fx-roll .elementor-button,
.rcp-btn-fx-shine .elementor-button,
.rcp-btn-fx-border .elementor-button {
	position: relative;
	overflow: hidden;
	isolation: isolate;
}

body[class*="rcp-btnfx-"] .elementor-button-content-wrapper,
[class*="rcp-btn-fx-"] .elementor-button-content-wrapper {
	position: relative;
	z-index: 1;
}

/* Wypełnienie z boku */
body.rcp-btnfx-fill :is(.elementor-widget-button, .elementor-widget-rcp-booking):not([class*="rcp-btn-fx-"]) .elementor-button::before,
.rcp-btn-fx-fill .elementor-button::before {
	content: "";
	position: absolute;
	inset: 0;
	z-index: 0;
	background: var(--rcp-fx);
	transform: scaleX(0);
	transform-origin: right center;
	transition: transform 0.45s var(--rcp-ease);
}

body.rcp-btnfx-fill :is(.elementor-widget-button, .elementor-widget-rcp-booking):not([class*="rcp-btn-fx-"]) .elementor-button:is(:hover, :focus-visible)::before,
.rcp-btn-fx-fill .elementor-button:is(:hover, :focus-visible)::before {
	transform: scaleX(1);
	transform-origin: left center;
}

/* Wypełnienie od dołu */
body.rcp-btnfx-fill-up :is(.elementor-widget-button, .elementor-widget-rcp-booking):not([class*="rcp-btn-fx-"]) .elementor-button::before,
.rcp-btn-fx-fill-up .elementor-button::before {
	content: "";
	position: absolute;
	inset: 0;
	z-index: 0;
	background: var(--rcp-fx);
	transform: scaleY(0);
	transform-origin: center bottom;
	transition: transform 0.4s var(--rcp-ease);
}

body.rcp-btnfx-fill-up :is(.elementor-widget-button, .elementor-widget-rcp-booking):not([class*="rcp-btn-fx-"]) .elementor-button:is(:hover, :focus-visible)::before,
.rcp-btn-fx-fill-up .elementor-button:is(:hover, :focus-visible)::before {
	transform: scaleY(1);
}

/* Tekst przewijany w górę (kopia tekstu to cień, bez dublowania treści w HTML) */
body.rcp-btnfx-roll :is(.elementor-widget-button, .elementor-widget-rcp-booking):not([class*="rcp-btn-fx-"]) .elementor-button-text,
.rcp-btn-fx-roll .elementor-button-text {
	display: inline-block;
	text-shadow: 0 3em currentColor;
	transition: transform 0.35s var(--rcp-ease);
}

body.rcp-btnfx-roll :is(.elementor-widget-button, .elementor-widget-rcp-booking):not([class*="rcp-btn-fx-"]) .elementor-button:is(:hover, :focus-visible) .elementor-button-text,
.rcp-btn-fx-roll .elementor-button:is(:hover, :focus-visible) .elementor-button-text {
	transform: translateY(-3em);
}

/* Strzałka */
body.rcp-btnfx-arrow :is(.elementor-widget-button, .elementor-widget-rcp-booking):not([class*="rcp-btn-fx-"]) .elementor-button-text::after,
.rcp-btn-fx-arrow .elementor-button-text::after {
	content: "→";
	display: inline-block;
	margin-left: 0.5em;
	transition: transform 0.3s var(--rcp-ease);
}

body.rcp-btnfx-arrow :is(.elementor-widget-button, .elementor-widget-rcp-booking):not([class*="rcp-btn-fx-"]) .elementor-button:is(:hover, :focus-visible) .elementor-button-text::after,
.rcp-btn-fx-arrow .elementor-button:is(:hover, :focus-visible) .elementor-button-text::after {
	transform: translateX(0.35em);
}

/* Podkreślenie */
body.rcp-btnfx-underline :is(.elementor-widget-button, .elementor-widget-rcp-booking):not([class*="rcp-btn-fx-"]) .elementor-button-text,
.rcp-btn-fx-underline .elementor-button-text {
	padding-bottom: 2px;
	background: linear-gradient(currentColor, currentColor) left bottom / 0 1px no-repeat;
	transition: background-size 0.35s var(--rcp-ease);
}

body.rcp-btnfx-underline :is(.elementor-widget-button, .elementor-widget-rcp-booking):not([class*="rcp-btn-fx-"]) .elementor-button:is(:hover, :focus-visible) .elementor-button-text,
.rcp-btn-fx-underline .elementor-button:is(:hover, :focus-visible) .elementor-button-text {
	background-size: 100% 1px;
}

/* Połysk */
body.rcp-btnfx-shine :is(.elementor-widget-button, .elementor-widget-rcp-booking):not([class*="rcp-btn-fx-"]) .elementor-button::before,
.rcp-btn-fx-shine .elementor-button::before {
	content: "";
	position: absolute;
	top: 0;
	bottom: 0;
	left: -75%;
	z-index: 0;
	width: 50%;
	background: linear-gradient(100deg, transparent, rgb(255 255 255 / 0.45), transparent);
	transform: skewX(-20deg);
	transition: left 0.7s var(--rcp-ease);
}

body.rcp-btnfx-shine :is(.elementor-widget-button, .elementor-widget-rcp-booking):not([class*="rcp-btn-fx-"]) .elementor-button:is(:hover, :focus-visible)::before,
.rcp-btn-fx-shine .elementor-button:is(:hover, :focus-visible)::before {
	left: 125%;
}

/* Uniesienie */
body.rcp-btnfx-lift :is(.elementor-widget-button, .elementor-widget-rcp-booking):not([class*="rcp-btn-fx-"]) .elementor-button,
.rcp-btn-fx-lift .elementor-button {
	transition: transform 0.25s var(--rcp-ease), box-shadow 0.25s var(--rcp-ease), background-color 0.25s, color 0.25s;
}

body.rcp-btnfx-lift :is(.elementor-widget-button, .elementor-widget-rcp-booking):not([class*="rcp-btn-fx-"]) .elementor-button:is(:hover, :focus-visible),
.rcp-btn-fx-lift .elementor-button:is(:hover, :focus-visible) {
	transform: translateY(-3px);
	box-shadow: 0 12px 24px -12px rgb(0 0 0 / 0.4);
}

/* Rysowana ramka */
body.rcp-btnfx-border :is(.elementor-widget-button, .elementor-widget-rcp-booking):not([class*="rcp-btn-fx-"]) .elementor-button::before,
.rcp-btn-fx-border .elementor-button::before {
	content: "";
	position: absolute;
	inset: 0;
	z-index: 0;
	border: 2px solid var(--rcp-fx);
	border-radius: inherit;
	clip-path: inset(0 100% 100% 0);
	transition: clip-path 0.5s var(--rcp-ease);
}

body.rcp-btnfx-border :is(.elementor-widget-button, .elementor-widget-rcp-booking):not([class*="rcp-btn-fx-"]) .elementor-button:is(:hover, :focus-visible)::before,
.rcp-btn-fx-border .elementor-button:is(:hover, :focus-visible)::before {
	clip-path: inset(0 0 0 0);
}

/* Pulsowanie: tylko dla jednego, najważniejszego przycisku na stronie */
body.rcp-btnfx-pulse :is(.elementor-widget-button, .elementor-widget-rcp-booking):not([class*="rcp-btn-fx-"]) .elementor-button,
.rcp-btn-fx-pulse .elementor-button {
	animation: rcp-pulse 2.2s ease-out infinite;
}

@keyframes rcp-pulse {
	0% { box-shadow: 0 0 0 0 color-mix(in srgb, var(--rcp-fx) 45%, transparent); }
	70% { box-shadow: 0 0 0 14px color-mix(in srgb, var(--rcp-fx) 0%, transparent); }
	100% { box-shadow: 0 0 0 0 color-mix(in srgb, var(--rcp-fx) 0%, transparent); }
}

/* Bez animacji dla osób, które ograniczyły ruch w systemie. */
@media (prefers-reduced-motion: reduce) {
	.elementor-button,
	.elementor-button::before,
	.elementor-button-text,
	.elementor-button-text::after,
	.rcp-caret {
		transition: none !important;
		animation: none !important;
	}
}
