/* =============================================
   Slider na stronie głównej
   Zastępuje LayerSlider (jQuery + GreenSock)

   Przewijanie robi CSS (scroll-snap), JS dokłada tylko sterowanie.
   Kolor slajdu wchodzi jednym custom property --accent, ustawianym
   w HTML — patrz tablica $slides w content/home_slider.php.
   ============================================= */

.hero {
	position: relative;
	background-color: #fff;
	overflow: hidden;
}

/* ---------- tor przewijania ---------- */

.hero__track {
	display: grid;
	grid-auto-flow: column;
	grid-auto-columns: 100%;
	overflow-x: auto;
	overscroll-behavior-x: contain;
	scroll-snap-type: x mandatory;
	scroll-behavior: smooth;
	/* Pasek przewijania jest tu zbędny — slajdy zmienia się kropkami,
	   strzałkami albo gestem. */
	scrollbar-width: none;
	-ms-overflow-style: none;
}

.hero__track::-webkit-scrollbar {
	display: none;
}

.hero__slide {
	position: relative;
	scroll-snap-align: center;
	scroll-snap-stop: always;
	display: flex;
	align-items: center;
	min-height: 380px;
	padding: 2rem 0 3.5rem 0;
	overflow: hidden;
}

@media (min-width: 768px) {
	.hero__slide {
		min-height: 440px;
	}
}

@media (min-width: 992px) {
	.hero__slide {
		min-height: 520px;
		padding: 1rem 0 3rem 0;
	}
}

/* ---------- tło (wyblakły watermark) ---------- */

/* Punkt 75%/50% i wysokość równa wysokości slajdu odtwarzają położenie
   oraz skalę, jakie watermark miał na płótnie LayerSlidera. */
.hero__bg {
	position: absolute;
	top: 50%;
	left: 75%;
	transform: translate(-50%, -50%);
	height: 100%;
	pointer-events: none;
	user-select: none;
	z-index: 0;
}

.hero__bg img {
	display: block;
	height: 100%;
	width: auto;
	max-width: none;
}

/* ---------- siatka treści ---------- */

.hero__inner {
	position: relative;
	z-index: 1;
	width: 100%;
	max-width: 1140px;
	margin-inline: auto;
	padding-inline: 1.25rem;
	display: grid;
	grid-template-columns: minmax(0, 1fr);
	align-items: center;
	gap: 1.5rem;
}

@media (min-width: 768px) {
	.hero__inner {
		/* Odstęp od lewej odtwarza dawne left:80px z płótna LayerSlidera. */
		padding-inline: 2.5rem 1.5rem;
		grid-template-columns: minmax(0, 1fr) auto;
		gap: 1.5rem;
	}
}

@media (min-width: 1200px) {
	.hero__inner {
		padding-inline: 80px 60px;
		gap: 2rem;
	}
}

/* ---------- kolumna tekstowa ---------- */

.hero__text {
	order: 2;
}

@media (min-width: 768px) {
	.hero__text {
		order: 1;
	}
}

/* Rozmiary są płynne, ale górna granica każdego clamp() to dokładnie
   ta wartość, którą slider miał wcześniej na desktopie (body ma 14 px,
   więc 3.0em = 42 px, 2.6em = 36.4 px, 1.2em = 16.8 px, 1.4em = 19.6 px). */
.hero__title {
	margin: 0;
	font-size: clamp(1.75rem, 1.05rem + 2.7vw, 42px);
	font-weight: 500;
	line-height: 1.1;
	color: #212529;
}

.hero__logo {
	display: block;
	margin-bottom: 0.15em;
}

.hero__logo img {
	display: block;
	width: auto;
	height: clamp(1.75rem, 1.05rem + 2.7vw, 41px);
}

.hero__tagline {
	margin: 0.1em 0 0 0;
	font-size: clamp(1.375rem, 0.9rem + 2.2vw, 36.4px);
	font-weight: 300;
	line-height: 1.15;
	color: var(--accent);
}

.hero__lead {
	margin: 1em 0 0 0;
	max-width: 46ch;
	font-size: clamp(0.9375rem, 0.85rem + 0.35vw, 16.8px);
	line-height: 1.5;
	color: #212529;
}

/* Kolumna tekstowa jest wyśrodkowana w pionie, więc różna długość
   opisów przesuwałaby tytuł w górę i w dół przy zmianie slajdu.
   Rezerwujemy miejsce na pięć wierszy — tyle mają wszystkie trzy opisy.
   Pisząc nowy slajd warto się w tych pięciu wierszach zmieścić. */
@media (min-width: 768px) {
	.hero__lead {
		min-height: 7.5em;
	}
}

/* Na wąskich ekranach hero nie może urosnąć na pół strony — dłuższe
   opisy przycinamy wizualnie, pełny tekst zostaje w kodzie, a rolę
   „czytaj dalej" pełni przycisk CTA. */
@media (max-width: 767.98px) {
	.hero__lead {
		display: -webkit-box;
		-webkit-line-clamp: 5;
		line-clamp: 5;
		-webkit-box-orient: vertical;
		overflow: hidden;
	}
}

.hero__cta {
	display: inline-block;
	margin-top: 1.4em;
	padding: 0.5em 1.25em;
	font-size: clamp(1rem, 0.9rem + 0.45vw, 19.6px);
	color: #fff;
	background: var(--accent);
	opacity: 0.75;
	transition: background-color 0.25s ease, opacity 0.25s ease;
}

.hero__cta:hover,
.hero__cta:focus-visible {
	color: #fff;
	background: #000;
	opacity: 1;
	text-decoration: none;
}

/* ---------- koło z produktem ---------- */

.hero__media {
	order: 1;
	position: relative;
	/* Średnica koła; produkt jest pozycjonowany w procentach tej
	   wartości, więc cała kompozycja skaluje się razem. */
	width: clamp(170px, 44vw, 240px);
	aspect-ratio: 1 / 1;
	justify-self: center;
}

@media (min-width: 768px) {
	.hero__media {
		order: 2;
		width: clamp(230px, 27vw, 400px);
		justify-self: end;
	}
}

.hero__circle {
	position: absolute;
	inset: 0;
	border-radius: 50%;
	background: var(--accent);
}

.hero__product {
	position: absolute;
	left: calc(var(--px) * 1%);
	top: calc(var(--py) * 1%);
	width: calc(var(--pw) * 1%);
}

.hero__product img {
	display: block;
	width: 100%;
	height: auto;
}

/* ---------- nawigacja ---------- */

/* Nawigacja korzysta z tej samej siatki co treść slajdu, żeby na
   desktopie zaczynała się dokładnie pod kolumną tekstową. */
.hero__nav {
	position: absolute;
	left: 50%;
	bottom: 0.75rem;
	transform: translateX(-50%);
	z-index: 2;
	width: 100%;
	max-width: 1140px;
	padding-inline: 1.25rem;
	display: flex;
	align-items: center;
	justify-content: center;
	gap: 0.25rem;
}

@media (min-width: 768px) {
	.hero__nav {
		bottom: 1.25rem;
		padding-inline: 2.5rem 1.5rem;
		justify-content: flex-start;
	}

	/* Wyrównanie optyczne — przycisk ma własny padding, więc bez tego
	   strzałka wisiałaby kilka pikseli na prawo od tekstu. */
	.hero__nav .hero__arrow:first-child {
		margin-left: -9px;
	}
}

@media (min-width: 1200px) {
	.hero__nav {
		padding-inline: 80px 60px;
	}
}

.hero__arrow,
.hero__toggle {
	display: flex;
	align-items: center;
	justify-content: center;
	width: 34px;
	height: 34px;
	padding: 0;
	border: none;
	background: none;
	color: #b2b2b2;
	font-size: 1.1rem;
	line-height: 1;
	cursor: pointer;
	transition: color 0.2s ease;
}

.hero__arrow:hover,
.hero__toggle:hover {
	color: #606060;
}

.hero__toggle {
	font-size: 0.8rem;
	margin-left: 0.25rem;
}

.hero__dots {
	display: flex;
	align-items: center;
	gap: 0.35rem;
}

.hero__dot {
	position: relative;
	width: 34px;
	height: 34px;
	padding: 5px;
	border: none;
	border-radius: 50%;
	background: none;
	cursor: pointer;
	opacity: 0.4;
	transition: opacity 0.25s ease, box-shadow 0.25s ease;
}

.hero__dot:hover {
	opacity: 0.8;
}

.hero__dot[aria-current="true"] {
	opacity: 1;
	box-shadow: 0 0 0 2px var(--accent);
}

.hero__badge,
.hero__badge img {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: contain;
}

.hero__arrow:focus-visible,
.hero__toggle:focus-visible,
.hero__dot:focus-visible,
.hero__cta:focus-visible {
	outline: 2px solid #00159d;
	outline-offset: 2px;
}

/* ---------- animacje wejścia ---------- */

@media (prefers-reduced-motion: no-preference) {
	/* Odpowiednik dawnych offsetxin/delayin z LayerSlidera: warstwy
	   wjeżdżają z prawej, jedna po drugiej.

	   Stan początkowy (przezroczystość i przesunięcie) siedzi wyłącznie
	   w klatkach animacji, a nie w regule bazowej — gdyby siedział
	   w bazowej, slajdy bez klasy .is-active byłyby niewidoczne, czyli
	   przy wyłączonym JS zobaczylibyśmy pusty slajd po przesunięciu
	   palcem. Dzięki fill-mode: backwards element sam z siebie jest
	   widoczny, a animacja tylko dokłada ruch. */
	.hero__slide.is-active .hero__text > *,
	.hero__slide.is-active .hero__media {
		animation: hero-wjazd 0.55s cubic-bezier(0.22, 0.61, 0.36, 1) backwards;
	}

	.hero__slide.is-active .hero__text > :nth-child(2) { animation-delay: 60ms; }
	.hero__slide.is-active .hero__text > :nth-child(3) { animation-delay: 120ms; }
	.hero__slide.is-active .hero__text > :nth-child(4) { animation-delay: 180ms; }

	.hero__slide.is-active .hero__bg img {
		animation: hero-zblizenie 9s ease-out both;
	}
}

@keyframes hero-wjazd {
	from { opacity: 0; transform: translateX(40px); }
	to   { opacity: 1; transform: none; }
}

@keyframes hero-zblizenie {
	from { transform: scale(1); }
	to   { transform: scale(1.08); }
}

/* Przy prefers-reduced-motion: reduce nie ma ani animacji wejścia, ani
   płynnego przewijania toru (autoodtwarzanie wyłącza samo JS). */
@media (prefers-reduced-motion: reduce) {
	.hero__track {
		scroll-behavior: auto;
	}
}
