/*
 * header.css — pasek ogłoszeń, nagłówek, nawigacja, stopka
 *
 * Część arkuszy theme'u rozbitych per feature. Kolejność ładowania i lista
 * plików: functions.php → oliwa_enqueue_assets(). Wszystkie wartości pochodzą
 * z assets/css/tokens.css.
 */

/* -------------------------------------------------------------------------
   Pasek informacyjny i nagłówek

   Sticky ma w systemie dokładnie jedno miejsce: header (veil + blur 10px).
   Pasek nad nim przewija się razem z treścią.
   ---------------------------------------------------------------------- */

.oliwa-announcement {
	font-family: var(--font-body);
	font-size: var(--text-2xs);
	font-weight: 600;
	letter-spacing: var(--tracking-wider);
	text-transform: uppercase;
}

.oliwa-announcement p {
	line-height: 1;
	margin: 0;
}

/*
 * Sticky siedzi na OPAKOWANIU template-partu, nie na samym <header>.
 * `wp:template-part` zawsze renderuje własny element wokół zawartości (rdzeń
 * nie daje się tego wyłączyć — bez `tagName` bierze tag z obszaru). Ten
 * element jest dokładnie tak wysoki jak nagłówek, a sticky przykleja się
 * wyłącznie w granicach rodzica — czyli nagłówek „przyklejał się" do pasa
 * o własnej wysokości i znikał razem z nim. Klasa `oliwa-header-slot` jest
 * dopisana do bloku template-part w każdym szablonie.
 */
.oliwa-header-slot {
	position: sticky;
	top: 0;
	z-index: 40;
}

.oliwa-header {
	-webkit-backdrop-filter: var(--blur-veil);
	backdrop-filter: var(--blur-veil);
	background: var(--veil-cream);
	border-bottom: 1px solid var(--hairline);
	/* Kotwica dla pola wyszukiwania, które na telefonie rozwija się jako
	   osobny rząd pod paskiem ikon (patrz sekcja „Wąskie ekrany”). */
	position: relative;
}

/* Pasek admina nie może przykryć nagłówka. */
.admin-bar .oliwa-header-slot {
	top: 32px;
}

@media (max-width: 782px) {
	.admin-bar .oliwa-header-slot {
		top: 46px;
	}
}

/* W edytorze sticky rozjeżdża canvas — tam statycznie. */
.editor-styles-wrapper .oliwa-header-slot {
	position: static;
}

.editor-styles-wrapper .oliwa-header {
	backdrop-filter: none;
}

.oliwa-header .wp-block-site-title a {
	color: var(--wp--preset--color--primary);
	text-decoration: none;
}

/* Sufit wysokości: bez tego zdjęcie wgrane jako logo (pionowe, duże)
   rozpycha sticky header na pół ekranu. Szerokość dobiera się sama. */
.oliwa-header .wp-block-site-logo img {
	display: block;
	height: auto;
	max-height: 56px;
	width: auto;
}

/* Logo zamiast nazwy witryny — z fallbackiem.

   Bloki nie mają warunków, więc w nagłówku i stopce siedzą oba: Logo witryny
   i Tytuł witryny. Kiedy logo NIE jest ustawione, blok logo renderuje pustkę
   i zostaje sam napis. Kiedy JEST, WordPress dokłada do <body> klasę
   wp-custom-logo — i to ona chowa napis. Zero PHP, zero duplikatu treści
   dla czytników ekranu (logo niesie nazwę witryny w alt). */
.wp-custom-logo .oliwa-header .wp-block-site-title,
.wp-custom-logo .oliwa-footer .wp-block-site-title {
	display: none;
}

/* Rozmiar dotyczy obu wariantów logo w stopce. */
.oliwa-footer-logo img {
	height: auto;
	max-width: 180px;
}

/* Tryb awaryjny: jasne logo nie jest wgrane, więc stopka dostaje ciemny
   wordmark i musi go rozjaśnić. brightness zamiast invert, żeby złoty
   gradient marki nie zmienił odcienia. Klasę dokłada inc/logo.php. */
.oliwa-footer-logo.is-logo-fallback img {
	filter: brightness(1.6);
}

/* Edytor renderuje bloki w JS, więc filtr render_block z inc/logo.php tam nie
   biegnie: canvas zawsze pokazuje zwykłe logo i zawsze w trybie awaryjnym.
   Podobnie klasa wp-custom-logo nie trafia na canvas, więc logo i tytuł
   witryny widać tam naraz — front pokazuje tylko jedno. */
.editor-styles-wrapper .oliwa-footer-logo img {
	filter: brightness(1.6);
}

/* Ikony akcji w nagłówku: szukajka, konto, koszyk.
   Wszystkie trzy to kwadraty 44px z ikoną w oliwce — bez wypełnień, bo
   złoto jest zarezerwowane dla licznika koszyka. */
.oliwa-header-actions {
	gap: var(--space-2);
}

.oliwa-header-actions .wp-block-search {
	margin: 0;
	width: auto;
}

.oliwa-header-actions .wp-block-search .wp-block-search__inside-wrapper {
	border: 0;
	padding: 0;
}

/* Domyślnie blok wyszukiwania rozpycha się do 100% szerokości rodzica —
   w trybie „tylko ikona" musi być kwadratem, nie panelem. */
.oliwa-header-actions .wp-block-search__button {
	align-items: center;
	background-color: transparent;
	border: 0;
	border-radius: var(--radius-control);
	color: var(--wp--preset--color--primary);
	display: flex;
	height: var(--control-h-md);
	justify-content: center;
	margin: 0;
	min-width: 0;
	padding: 0;
	transition: background-color var(--duration-base) var(--easing-standard);
	width: var(--control-h-md);
}

.oliwa-header-actions .wp-block-search__button:hover {
	background-color: var(--wp--preset--color--base-alt);
	color: var(--wp--preset--color--primary);
}

.oliwa-header-actions .wp-block-search__button svg {
	height: var(--icon-lg);
	width: var(--icon-lg);
}

/* Pole wyszukiwania rozwija się po kliknięciu ikony — 220px, jak w projekcie. */
.oliwa-header-actions .wp-block-search__input {
	border: 1px solid var(--hairline);
	border-radius: var(--radius-control);
	font-size: var(--text-sm);
	min-height: var(--control-h-sm);
	padding: var(--pad-control-sm);
	width: 220px;
}

.oliwa-header-actions .wp-block-search__searchfield-hidden .wp-block-search__input {
	width: 0;
}

.oliwa-header-actions .wp-block-woocommerce-customer-account,
.oliwa-header-actions .wp-block-woocommerce-mini-cart {
	margin: 0;
}

.wc-block-customer-account__link {
	align-items: center;
	border-radius: var(--radius-control);
	color: var(--wp--preset--color--primary);
	display: flex;
	height: var(--control-h-md);
	justify-content: center;
	padding: 0;
	transition: background-color var(--duration-base) var(--easing-standard);
	width: var(--control-h-md);
}

.wc-block-customer-account__link:hover {
	background-color: var(--wp--preset--color--base-alt);
	color: var(--wp--preset--color--primary);
}

/* Woo renderuje tu SVG bez własnej klasy, więc celujemy w element. */
.wc-block-customer-account__link svg,
.wc-block-customer-account__account-icon {
	height: var(--icon-lg);
	width: var(--icon-lg);
}

/* -------------------------------------------------------------------------
   Nawigacja

   Aktywny element dostaje 2px złotą regułę — echo podkreślenia z wordmarku.
   Nic grubszego niż 2px w całym systemie.
   ---------------------------------------------------------------------- */

.wp-block-navigation .wp-block-navigation-item__content {
	border-bottom: 2px solid transparent;
	padding-bottom: var(--space-1);
	padding-top: var(--space-2);
	transition: color var(--duration-base) var(--easing-standard),
		border-color var(--duration-base) var(--easing-standard);
}

.wp-block-navigation .wp-block-navigation-item__content:hover {
	border-bottom-color: var(--wp--preset--color--accent-soft);
	color: var(--wp--preset--color--primary);
}

.wp-block-navigation .current-menu-item>.wp-block-navigation-item__content,
.wp-block-navigation .current-menu-ancestor>.wp-block-navigation-item__content,
.wp-block-navigation .current_page_item>.wp-block-navigation-item__content {
	border-bottom-color: var(--wp--preset--color--accent);
	color: var(--wp--preset--color--primary);
}

/* Strzałka rozwijania. WP renderuje ją jako osobny <button> obok <a>,
   z SVG 12px — za małym przy kapitalikach nawigacji. Link ma symetryczny
   padding (6px/6px), więc strzałce wystarczy align-self: center. */
.wp-block-navigation__submenu-icon.wp-block-navigation-submenu__toggle,
.wp-block-navigation .wp-block-navigation__submenu-icon {
	align-items: center;
	align-self: center;
	background: transparent;
	border: 0;
	color: inherit;
	display: flex;
	height: auto;
	justify-content: center;
	margin-left: var(--space-2);
	padding: 0;
	width: auto;
}

.wp-block-navigation__submenu-icon svg {
	display: block;
	height: var(--icon-sm);
	stroke: currentColor;
	stroke-width: 0.8;
	width: var(--icon-sm);
}

/* Wewnątrz rozwiniętej listy strzałka (submenu drugiego poziomu) nie ma
   złotej reguły nad sobą, więc kompensacja jest zbędna. */
.wp-block-navigation__submenu-container .wp-block-navigation__submenu-icon {
	margin-left: var(--space-1);
	padding: 0;
}

.wp-block-navigation__submenu-container .wp-block-navigation__submenu-icon svg {
	height: var(--icon-sm);
	width: var(--icon-sm);
}

/* Submenu = karta: hairline, 4px, cień raised.

   `!important` jest tu wymuszone przez rdzeń: kolory nakładki mobilnej
   (`overlayBackgroundColor`/`overlayTextColor` w parts/header.html) rdzeń
   wypisuje na kontenerze podmenu jako klasy presetów, a te generuje z
   `!important`. Bez tego karta na desktopie robiła się ciemnooliwkowa —
   razem z nazwą bieżącej strony w kolorze oliwki, czyli niewidoczną.
   Reguła stoi w media query, bo w szufladzie mobilnej podmenu MA być
   przezroczyste na oliwce. */
@media (min-width: 782px) {

	.oliwa-header .wp-block-navigation__submenu-container {
		background-color: var(--wp--preset--color--surface-card) !important;
		color: var(--wp--preset--color--contrast) !important;
	}
}

.wp-block-navigation__submenu-container {
	background-color: var(--wp--preset--color--surface-card);
	border: 1px solid var(--hairline) !important;
	border-radius: var(--radius-card);
	box-shadow: var(--shadow-raised);
	min-width: 232px;
	padding: var(--space-2) 0;
}

.wp-block-navigation__submenu-container .wp-block-navigation-item__content {
	border-bottom: 0;
	font-size: var(--text-sm);
	font-weight: 400;
	letter-spacing: 0;
	padding: var(--space-3) var(--space-5);
	text-transform: none;
	width: 100%;
}

.wp-block-navigation__submenu-container .wp-block-navigation-item__content:hover {
	background: var(--wp--preset--color--base-alt);
}

/* Stopka — linki wygaszone, rozjaśniają się do kremu. */
.oliwa-footer .wp-block-navigation-item__content {
	border-bottom: 0;
	color: var(--text-on-dark-muted);
	font-size: var(--text-sm);
	font-weight: 400;
	letter-spacing: 0;
	padding-bottom: 0;
	text-transform: none;
}

.oliwa-footer .wp-block-navigation-item__content:hover {
	color: var(--wp--preset--color--base-alt);
}

/* Aktywna pozycja w stopce. Reguła globalna maluje ją na oliwkowo
   (--primary), co na ciemnym tle stopki znika — tu marker to złoto,
   spójne z 2px złotą regułą w nawigacji głównej. */
.oliwa-footer .current-menu-item>.wp-block-navigation-item__content,
.oliwa-footer .current-menu-ancestor>.wp-block-navigation-item__content,
.oliwa-footer .current_page_item>.wp-block-navigation-item__content {
	border-bottom: 0;
	color: var(--wp--preset--color--accent-soft);
	font-weight: 500;
}

/* -------------------------------------------------------------------------
   Wąskie ekrany

   Projekt „header mobilny": pasek 64 px w jednym rzędzie — menu, logo na
   środku, akcje po prawej — nad nim pasek zapowiedzi, a pod ikonami
   rozwijane wyszukiwanie. Menu otwiera się jako oliwkowa szuflada na pełny
   ekran.
   ---------------------------------------------------------------------- */

@media (max-width: 781px) {
	.oliwa-hero {
		min-height: 480px;
	}

	/* Padding nagłówka siedzi w atrybucie `style` bloku, czyli inline —
	   z arkusza da się go zdjąć wyłącznie przez !important. */
	.oliwa-header {
		padding-bottom: 0 !important;
		padding-left: var(--space-1) !important;
		padding-right: var(--space-2) !important;
		padding-top: 0 !important;
	}

	.oliwa-header>.wp-block-group {
		align-items: center;
		flex-wrap: nowrap;
		gap: var(--space-1);
		min-height: var(--header-h-mobile);
	}

	/*
	 * Kolejność menu → logo → akcje wymaga, żeby wszystkie trzy bloki były
	 * dziećmi tego samego flexa. W markupie nawigacja i akcje siedzą we
	 * wspólnym kontenerze, więc `display: contents` rozpuszcza go — jego
	 * dzieci awansują do flexa nagłówka i zaczynają słuchać `order`.
	 */
	.oliwa-header>.wp-block-group>.wp-block-group:last-child {
		display: contents;
	}

	.oliwa-header .wp-block-navigation {
		order: 1;
	}

	.oliwa-header>.wp-block-group>.wp-block-group:first-child {
		flex: 1;
		justify-content: center;
		min-width: 0;
		order: 2;
	}

	.oliwa-header-actions {
		order: 3;
	}

	/* Hamburger to jedyna ikona bez własnego pola dotyku — rdzeń renderuje
	   goły <svg> 24 px. Reszta paska ma 44 px, więc dostaje tyle samo. */
	.oliwa-header .wp-block-navigation__responsive-container-open {
		align-items: center;
		display: flex;
		height: var(--control-h-md);
		justify-content: center;
		width: var(--control-h-md);
	}

	.oliwa-header .wp-block-navigation__responsive-container-open svg {
		height: var(--icon-lg);
		width: var(--icon-lg);
	}

	.oliwa-header .wp-block-site-logo img {
		max-height: var(--logo-h-mobile);
	}

	/* Projekt ma w pasku trzy ikony: menu, lupa, koszyk. Konto przenosi się
	   do szuflady (pozycja „Moje konto" w menu) — dopiero bez niego logo
	   staje na środku paska. */
	.oliwa-header-actions .wp-block-woocommerce-customer-account {
		display: none;
	}

	/*
	 * Wyszukiwanie: 220 px pola obok czterech ikon nie mieści się w 375 px,
	 * więc rozwinięte pole ląduje w osobnym rzędzie pod paskiem. Rdzeń po
	 * kliknięciu lupy zdejmuje klasę `…searchfield-hidden` — to jedyny
	 * sygnał otwarcia, jaki wystawia, i na nim opiera się ta reguła.
	 * Przesuwane jest samo pole, nie cały wrapper, bo w wrapperze siedzi
	 * też lupa — a ta ma zostać na swoim miejscu w pasku.
	 */
	.oliwa-header-actions .wp-block-search:not(.wp-block-search__searchfield-hidden) .wp-block-search__input {
		background: var(--wp--preset--color--base);
		border-left: 0;
		border-radius: 0;
		border-right: 0;
		left: 0;
		position: absolute;
		top: 100%;
		width: 100%;
	}

	/* -----------------------------------------------------------------
	   Szuflada menu

	   Tło i kolor tekstu ustawia sam blok (parts/header.html:
	   overlayBackgroundColor / overlayTextColor). Tutaj zostaje typografia:
	   krój display 28 px na pozycjach głównych, złoto na rozwiniętym
	   podmenu i hairline'y na ciemnym tle zamiast kart.
	   ----------------------------------------------------------------- */

	/*
	 * Szuflada rdzenia to `position: fixed; inset: 0` — ale fixed liczy się
	 * względem najbliższego przodka z filtrem, a nagłówek ma backdrop-filter
	 * (veil + blur). Bez tej reguły overlay dostaje pudełko wielkości paska
	 * i oliwkowe tło maluje tylko 64 px, choć pozycje menu wychodzą niżej.
	 */
	.oliwa-header:has(.wp-block-navigation__responsive-container.is-menu-open) {
		-webkit-backdrop-filter: none;
		backdrop-filter: none;
	}

	/* Nawigacja na desktopie jest dosunięta do prawej (atrybut bloku), więc
	   ten sam flex ustawia pozycje szuflady przy prawej krawędzi. W projekcie
	   lista jest wyrównana do lewej i bez odstępów — rozdziela ją hairline. */
	.oliwa-header .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content,
	.oliwa-header .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__container {
		align-items: flex-start;
		gap: 0;
		width: 100%;
	}

	.oliwa-header .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content {
		padding: var(--space-2) var(--space-6) var(--space-8);
	}

	.oliwa-header .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__container>.wp-block-navigation-item {
		align-items: center;
		border-bottom: 1px solid var(--hairline-on-dark);
		display: flex;
		flex-wrap: wrap;
		width: 100%;
	}

	.oliwa-header .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation-item__content {
		border-bottom: 0;
		/* Theme nie ma globalnego resetu box-sizing, a poniżej pozycje dostają
		   `width: 100%` razem z poziomym paddingiem — bez tego złoty przycisk
		   konta wychodzi poza kolumnę o sumę paddingu (2 × 24 px). */
		box-sizing: border-box;
		/* Cała szerokość, żeby pole dotyku pokrywało wiersz od hairline'u do
		   hairline'u — a nie tylko szerokość napisu. */
		width: 100%;
		font-family: var(--font-display);
		font-size: var(--text-2xl);
		font-weight: var(--weight-light);
		letter-spacing: 0;
		line-height: var(--leading-snug);
		padding: var(--space-4) 0;
		text-transform: none;
	}

	/* Aktywna pozycja. Reguła globalna maluje ją na oliwkowo (--primary),
	   czyli w kolorze tła szuflady — napis znikał. Marker to złoto, tak
	   samo jak w stopce. */
	.oliwa-header .wp-block-navigation__responsive-container.is-menu-open .current-menu-item>.wp-block-navigation-item__content,
	.oliwa-header .wp-block-navigation__responsive-container.is-menu-open .current-menu-ancestor>.wp-block-navigation-item__content,
	.oliwa-header .wp-block-navigation__responsive-container.is-menu-open .current_page_item>.wp-block-navigation-item__content {
		color: var(--accent-soft);
	}

	/* Pozycja z podmenu i jej lista są złote — jedyny akcent koloru
	   w szufladzie, echo złotej reguły z nawigacji na desktopie. */
	.oliwa-header .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation-submenu>.wp-block-navigation-item__content,
	.oliwa-header .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__submenu-icon {
		color: var(--accent-soft);
	}

	/* Na desktopie podmenu jest kartą (tło, hairline, cień). W szufladzie
	   ma być przezroczystą listą wciętą pod pozycją nadrzędną. */
	.oliwa-header .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__submenu-container {
		background: transparent;
		border: 0 !important;
		box-shadow: none;
		/* Podmenu jest trzecim dzieckiem <li>; pełna baza zrzuca je do
		   własnego wiersza pod pozycją nadrzędną. */
		flex-basis: 100%;
		min-width: 0;
		padding: 0 0 var(--space-4);
	}

	.oliwa-header .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__submenu-container .wp-block-navigation-item__content {
		color: var(--accent-soft);
		font-family: var(--font-body);
		font-size: var(--text-sm);
		font-weight: var(--weight-medium);
		letter-spacing: var(--tracking-wider);
		padding: var(--space-3) 0;
		text-transform: uppercase;
	}

	/* -----------------------------------------------------------------
	   Dolna sekcja szuflady

	   W projekcie to złoty przycisk konta i numer telefonu, odcięte od listy.
	   Blok nawigacji renderuje w szufladzie wyłącznie pozycje menu, więc obie
	   „kafle" są zwykłymi pozycjami menu 52 z własną klasą — nie osobnym
	   markupem. Na desktopie są zbędne i chowa je media query na końcu pliku.
	   ----------------------------------------------------------------- */

	/* Lista rozpycha się na pełną wysokość, żeby `margin-top: auto`
	   zepchnęło przycisk na dół ekranu. */
	.oliwa-header .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__container {
		flex: 1;
	}

	.oliwa-header .wp-block-navigation__responsive-container.is-menu-open .oliwa-menu-cta {
		border-bottom: 0;
		margin-top: auto;
		padding-top: var(--space-8);
	}

	.oliwa-header .wp-block-navigation__responsive-container.is-menu-open .oliwa-menu-cta .wp-block-navigation-item__content {
		background: var(--accent);
		color: var(--wp--preset--color--primary-dark);
		font-family: var(--font-body);
		font-size: var(--text-sm);
		font-weight: var(--weight-semibold);
		letter-spacing: var(--tracking-wider);
		padding: var(--pad-control-lg);
		text-align: center;
		text-transform: uppercase;
	}

	.oliwa-header .wp-block-navigation__responsive-container.is-menu-open .oliwa-menu-tel {
		border-bottom: 0;
	}

	.oliwa-header .wp-block-navigation__responsive-container.is-menu-open .oliwa-menu-tel .wp-block-navigation-item__content {
		color: var(--text-on-dark-muted);
		font-family: var(--font-body);
		font-size: var(--text-sm);
		font-weight: var(--weight-regular);
		letter-spacing: 0;
		padding: var(--space-4) 0;
		text-transform: none;
	}

	.wp-block-navigation__responsive-container-close {
		align-items: center;
		display: flex;
		height: var(--control-h-md);
		justify-content: center;
		width: var(--control-h-md);
	}

	.wp-block-navigation__responsive-container-close svg {
		height: var(--icon-lg);
		width: var(--icon-lg);
	}
}

/* Pozycje dopisane wyłącznie na potrzeby dolnej sekcji szuflady. Na szerokim
   ekranie nawigacja pokazuje sam spis stron — konto ma tam własną ikonę,
   a telefon stoi w stopce. */
@media (min-width: 782px) {

	.oliwa-header .oliwa-menu-cta,
	.oliwa-header .oliwa-menu-tel {
		display: none;
	}
}

