/* ==========================================================================
   WooCommerce — gorna.design (ciemna galeria)
   Koszyk, kasa, moje konto, formularze, mini-cart.
   ========================================================================== */

/* Kolor AKCJI dla teł przycisków niosących kremowy tekst: przyciemniona magenta,
   która z kremem daje ≥4.5:1 (WCAG AA). Marka --gd-magenta zostaje akcentem
   (focus, selekcja, gradienty, plakietki) — tu deepujemy tylko powierzchnie z tekstem. */
:root { --gd-magenta-action: #B0407D; }

/* Siatka bezpieczeństwa PRZECIWKO CAŁEJ KLASIE błędu, nie tylko konkretnemu
   przypadkowi Koszyk/Kasa (patrz obszerny komentarz niżej przy regule
   `body.woocommerce-cart main, body.woocommerce-checkout main`). Przyczyna
   źródłowa: <html> i <body> mają RÓŻNE kolory tła (zweryfikowane w DevTools),
   a domyślny margin-top pierwszego bloku w <main> (2rem, typowy odstęp
   .wp-block-group z theme.json) potrafi "przeciekać" (collapse) przez
   header/`.wp-site-blocks`/<body> aż do <html>, jeśli żaden z nich nie ma
   paddingu/bordera blokującego to zjawisko. Nasze własne szablony mają już
   punktową łatę (`main.gd-main { margin-block-start: 0 !important }`,
   style.css) — ale KAŻDY przyszły endpoint WooCommerce (albo innej wtyczki),
   który wyrenderuje się przez CUDZY szablon blokowy bez klasy `gd-main`,
   odziedziczy ten sam błąd, dopóki ktoś go nie zgłosi z osobna. `display:
   flow-root` na <body> ustanawia własny block formatting context — margines
   żadnego potomka nie może już "uciec" poza <body>, niezależnie od źródła
   szablonu. Zero efektów ubocznych: to jedyny cel tej właściwości, nie zmienia
   niczego widocznego tam, gdzie kolizji i tak nie było (np. strony z gd-main,
   które już mają nadmiarowe zabezpieczenie punktowe). Celowo GLOBALNE (samo
   <body>, bez selektora na klasę woocommerce-*) — style.css jest plikiem
   chronionym (§18 CLAUDE.md), więc reguła współdzielona przez całą witrynę
   ląduje tutaj, w nie-chronionym pliku, zamiast tam. */
body {
	display: flow-root;
}

/* Jaśniejszy pasek pod nagłówkiem na mobile (Safari/Chrome iOS, zgłoszenie
   Piotra ze zrzutu ekranu telefonu) — WYŁĄCZNIE strona główna (.gd-hero +
   main.gd-main--flush). Nie udało się tego wiernie odtworzyć w tym
   środowisku (Chrome desktop nie ma prawdziwego env(safe-area-inset-top),
   a resize_window nie zmienia realnego viewportu strony w tym embedzie —
   window.innerWidth zostaje przy 1920px niezależnie od żądanego rozmiaru),
   więc to poprawka DEFENSYWNA, nie potwierdzona co do dokładnej geometrii
   przyczyny, tylko co do koloru: <main> na stronie głównej ma dziś
   background: transparent (dziedziczy z .wp-block-group), a leży
   bezpośrednio na <body>, którego tło (--gd-bg, #16132A — jaśniejsze) różni
   się od tła .gd-hero (--gd-void, #0E0C1D — ciemniejsze, to samo co <html>).
   Jeśli na realnym urządzeniu (z innym niż tu safe-area-inset-top i inną
   dynamiką paska adresu Safari) .gd-hero nie sięga idealnie do y=0, w tej
   szczelinie prześwituje jaśniejsze tło <body> zamiast ciemnego tła hero —
   dokładnie taki pasek, jaki widać na zrzucie. Wymuszenie tego samego
   ciemnego tła na <main> usuwa kolizję kolorów niezależnie od tego, gdzie
   dokładnie leży szczelina — do potwierdzenia przez Piotra na telefonie. */
main.gd-main--flush {
	background: var(--gd-void, #0E0C1D);
}

/* Koszyk i kasa nie mają własnego szablonu w motywie (brak
   templates/page-cart.html / page-checkout.html) — WordPress dociąga
   domyślny blokowy szablon z samej wtyczki WooCommerce, którego <main> nie
   ma naszej klasy `gd-main`, więc reguła `main.gd-main { padding-top:
   calc(var(--gd-header-offset) + 1.5rem) }` (style.css) nigdy się nie
   stosuje. Efekt: treść (a przede wszystkim pierwszy komunikat "dodano do
   koszyka") zaczyna się w punkcie 0 dokumentu, czyli dokładnie pod
   przezroczystym na starcie, fixed nagłówkiem — komunikat wizualnie wchodzi
   w menu. Celujemy przez klasy na <body>, które WooCommerce dodaje
   niezależnie od źródła szablonu.

   DRUGA WARSTWA TEGO SAMEGO PROBLEMU (zgłoszenie Piotra po pierwszej
   poprawce): to <main> ma jeszcze WŁASNY, domyślny margin-top: 2rem
   (globalny odstęp bloku .wp-block-group z is-layout-constrained). Skoro nic
   nad nim (header.wp-block-template-part — bez wysokości, bo jedyne
   dziecko .gd-header jest fixed — ani .wp-site-blocks, ani <body>) nie ma
   paddingu/bordera, ten margines "przecieka" przez wszystkie z nich
   (collapsing) aż do <html>. A <html> ma INNE tło niż <body>
   (zweryfikowane w DevTools: html=rgb(14,12,29), body=rgb(22,19,42)) — stąd
   widoczny, ciemniejszy pasek na samej górze strony, kończący się dokładnie
   tam, gdzie zaczyna się (jaśniejsze) tło <body>. Zerujemy margin-top na
   <main> i przenosimy cały odstęp na padding-top (już był powyżej) — padding
   nie collapse'uje, więc dodatkowo domyka block formatting context. */
/* :not(.woocommerce-order-received) w obu selektorach niżej — WooCommerce
   nadaje TĘ SAMĄ klasę body.woocommerce-checkout całemu procesowi kasy,
   łącznie ze stroną "Zamówienie otrzymane" (endpoint order-received to wciąż
   strona Checkout, ID 9). Ta strona ma jednak WŁASNY, kompletny szablon
   (templates/order-confirmation.html, main.gd-order-confirmation) z pełną,
   od-krawędzi-do-krawędzi sekcją aury (.gd-order-confirmation__status) —
   doliczanie jej naszego padding-inline dla "gołego" szablonu Koszyka/Kasy
   ściskało tę sekcję i ucinało łunę .gd-blob po prawej stronie (zgłoszenie
   Piotra). Strona potwierdzenia sama zarządza swoim odstępem przez
   .gd-section (style.css) — nie powinna być tu w ogóle dotykana. */
body.woocommerce-cart main,
body.woocommerce-checkout:not(.woocommerce-order-received) main {
	margin-top: 0;
	/* <main> ma klasę has-global-padding, ale --wp--style--root--padding-left/
	   right rozwiązuje się na 0px (nieustawione w theme.json) — has-global-padding
	   nic więc nie daje. Stąd treść styka się z krawędziami ekranu na mobile
	   (zgłoszenie Piotra). */
	padding-inline: var(--gd-pad-x, 1.25rem);
}

/* TYLKO Koszyk ma nasz właściwy .gd-header (position:fixed, przezroczysty na
   starcie) — main potrzebuje paddingu równego jego wysokości, żeby treść nie
   chowała się pod nim. Kasa renderuje INNY, uproszczony nagłówek
   (header.wp-block-template-part:not(.gd-header) wyżej w tym pliku) — to
   zwykły, statyczny (position:static, zweryfikowane w DevTools) element w
   przepływie dokumentu, który sam rezerwuje swoje miejsce. Doliczanie mu
   tego samego --gd-header-offset (myślanego pod fixed .gd-header) dawało
   podwójny odstęp — dokładnie tę "za dużą przerwę u góry", którą zgłosił
   Piotr. Kasa dostaje więc tylko odrobinę oddechu, nie pełną kompensację. */
body.woocommerce-cart main {
	padding-top: calc(var(--gd-header-offset, 5rem) + 1.5rem);
}

body.woocommerce-checkout:not(.woocommerce-order-received) main {
	padding-top: 1.5rem;
}

@media (max-width: 560px) {
	body.woocommerce-cart main {
		padding-top: calc(var(--gd-header-offset, 5rem) + 3rem);
	}

	body.woocommerce-checkout:not(.woocommerce-order-received) main {
		padding-top: 1rem;
	}
}

/* --- Formularze (kasa, konto, kontakt Woo) --- */
.woocommerce form .form-row input.input-text,
.woocommerce form .form-row textarea,
.wc-block-components-text-input input,
.wc-block-components-textarea textarea,
textarea.wc-block-components-textarea {
	background: rgba(244, 239, 230, 0.04) !important;
	border: 1px solid rgba(244, 239, 230, 0.16) !important;
	border-radius: 8px !important;
	color: var(--gd-cream, #F4EFE6) !important;
	padding: 0.85rem 1rem;
	font-family: var(--gd-font-body, sans-serif);
	transition: border-color 0.3s ease;
}

/* <select> (kraj/województwo) — w Chrome natywny element select nie renderuje
   poprawnie tła o niskiej alfa (rgba 0.04 spod spodu prześwituje jako biel,
   zweryfikowane eksperymentalnie); potrzebuje w pełni nieprzezroczystego koloru,
   inaczej niż input/textarea powyżej. */
.woocommerce form .form-row select,
.wc-blocks-components-select .wc-blocks-components-select__select {
	background: var(--gd-surface, #241F3B) !important;
	border: 1px solid rgba(244, 239, 230, 0.16) !important;
	border-radius: 8px !important;
	color: var(--gd-cream, #F4EFE6) !important;
	padding: 0.85rem 1rem;
	font-family: var(--gd-font-body, sans-serif);
	transition: border-color 0.3s ease;
}

/* Natywna strzałka <select> ma niespójny, zależny od OS/silnika wygląd — wyłączamy
   ją, ale WC Blocks i tak rysuje WŁASNĄ strzałkę jako osobny <svg
   class="wc-blocks-components-select__expand"> nad polem (position:absolute), więc
   NIE dokładamy tu drugiego chevronu przez background-image (byłaby podwójna
   strzałka). Prawdziwa przyczyna zgłoszenia „chevron ledwo widoczny": domyślny
   fill tego SVG to ciemny szary rgb(43,45,47) — prawie czarny na naszym ciemnym
   tle (zweryfikowane: getComputedStyle zwracał dokładnie tę wartość). */
.woocommerce form .form-row select,
.wc-blocks-components-select .wc-blocks-components-select__select {
	appearance: none;
	-webkit-appearance: none;
	-moz-appearance: none;
	padding-right: 2.75rem !important;
}

.wc-blocks-components-select__expand {
	fill: var(--gd-cream, #F4EFE6) !important;
}

.woocommerce form .form-row input.input-text:focus,
.woocommerce form .form-row textarea:focus,
.woocommerce form .form-row select:focus,
.wc-block-components-text-input input:focus,
.wc-block-components-textarea textarea:focus,
textarea.wc-block-components-textarea:focus,
.wc-blocks-components-select .wc-blocks-components-select__select:focus {
	border-color: var(--gd-magenta-bright, #E36AAE) !important;
	outline: none;
	box-shadow: 0 0 0 3px rgba(192, 70, 138, 0.18) !important;
}

.wc-block-components-text-input label,
.wc-block-components-checkbox__label,
.woocommerce form .form-row label {
	color: var(--gd-muted, #C9C2D6) !important;
}

/* Autouzupełnianie Chrome maluje własne, jasne tło pod spodem (niezależnie od
   naszego background-color) — cofamy to bardzo dużym wewnętrznym box-shadow
   (klasyczny, jedyny niezawodny sposób na nadpisanie stylu autofill). */
.woocommerce form .form-row input.input-text:-webkit-autofill,
.wc-block-components-text-input input:-webkit-autofill {
	-webkit-text-fill-color: var(--gd-cream, #F4EFE6) !important;
	-webkit-box-shadow: 0 0 0 1000px var(--gd-surface, #241F3B) inset !important;
	box-shadow: 0 0 0 1000px var(--gd-surface, #241F3B) inset !important;
	caret-color: var(--gd-cream, #F4EFE6);
}

/* --- Bloki koszyka / kasy: powierzchnie i typografia --- */
.wp-block-woocommerce-cart,
.wp-block-woocommerce-checkout {
	color: var(--gd-cream, #F4EFE6);
}

.wc-block-components-sidebar .wc-block-components-panel,
.wc-block-cart__sidebar .wc-block-components-totals-wrapper,
.wc-block-components-order-summary,
.wc-block-components-checkout-step {
	background: transparent;
}

.wc-block-cart__sidebar,
.wc-block-checkout__sidebar {
	background: var(--gd-surface, #241F3B);
	border-radius: 10px;
	border: 1px solid rgba(244, 239, 230, 0.08);
	/* !important konieczny: WooCommerce ma własną regułę
	   `.wc-block-components-sidebar-layout .wc-block-components-sidebar
	   { padding: 0; width: 100% }` (ta sama klasa co niżej, inny wrapper
	   przodka), o WYŻSZEJ swoistości (dwie klasy) niż nasz prosty selektor
	   klasowy (jedna klasa) — wygrywa niezależnie od kolejności plików.
	   Zweryfikowane w kodzie źródłowym wtyczki (cart.css). To dokładnie ten
	   brak "oddechu" w "Podsumowaniu koszyka/zamówienia" na mobile, który
	   zgłosił Piotr — nasz padding:1.5rem nigdy się nie stosował, mimo że
	   reguła fizycznie istniała w tym pliku. */
	padding: 1.5rem !important;
}

.wc-block-cart-items,
.wc-block-cart-items th,
.wc-block-cart-items td {
	border-color: rgba(244, 239, 230, 0.09) !important;
	color: var(--gd-cream, #F4EFE6);
}

.wc-block-cart-items__header {
	color: var(--gd-muted, #C9C2D6) !important;
	text-transform: uppercase;
	letter-spacing: 0.12em;
	font-size: 0.7rem !important;
}

.wc-block-components-product-name {
	color: var(--gd-cream, #F4EFE6) !important;
	font-family: var(--gd-font-display, serif);
	font-size: 1.15rem;
}

.wc-block-components-product-metadata,
.wc-block-components-product-details {
	color: var(--gd-muted, #C9C2D6) !important;
}

.wc-block-cart-item__image img {
	border-radius: 4px;
	box-shadow: var(--wp--preset--shadow--card);
}

.wc-block-components-totals-item,
.wc-block-components-totals-footer-item,
.wc-block-components-totals-coupon,
.wc-block-components-totals-wrapper {
	color: var(--gd-cream, #F4EFE6);
	border-color: rgba(244, 239, 230, 0.09) !important;
}

.wc-block-components-formatted-money-amount {
	color: var(--gd-ochre-bright, #E0B458);
}

/* Ilość — ukryta logicznie nie jest, ale przy 1 egz. siatka i tak ją blokuje */
.wc-block-components-quantity-selector {
	background: rgba(244, 239, 230, 0.04);
	border: 1px solid rgba(244, 239, 230, 0.16);
	border-radius: 999px;
}

.wc-block-components-quantity-selector input,
.wc-block-components-quantity-selector button {
	color: var(--gd-cream, #F4EFE6) !important;
	background: transparent !important;
}

/* Przyciski bloków Woo */
.wc-block-components-button:not(.is-link) {
	background: var(--gd-magenta-action, #B0407D) !important;
	color: var(--gd-cream, #F4EFE6) !important;
	border-radius: 999px !important;
	text-transform: uppercase;
	letter-spacing: 0.12em;
	font-weight: 600;
	font-size: 0.8rem !important;
	padding: 1rem 2rem;
	border: none;
	transition: background-color 0.3s ease, transform 0.3s ease, box-shadow 0.3s ease;
}

.wc-block-components-button:not(.is-link):hover {
	background: var(--gd-violet, #7E4FB0) !important;
	transform: translateY(-2px);
	box-shadow: 0 12px 32px -8px rgba(192, 70, 138, 0.5);
}

/* CTA produktu „Dodaj do koszyka" — tło z --gd-magenta ustawia zamrożony style.css;
   nadpisujemy je kolorem akcji (WCAG AA), bez ruszania style.css. Hover (violet)
   ma już ~5:1, więc zostaje. */
.gd-product__details .single_add_to_cart_button {
	background: var(--gd-magenta-action, #B0407D);
}

/* A11y (P1, krytyka strony głównej): rdzeniowe WYPEŁNIONE przyciski blokowe
   (hero „Zobacz kolekcję", finałowe „Napisz do mnie" itd.) dziedziczą tło
   --gd-magenta (#C0468A) z zamrożonego theme.json = 4.09:1 z kremowym tekstem
   (< AA 4.5:1). Deepujemy TYLKO wypełnione warianty do Action Magenta
   (#B0407D = 4.73:1), bez ruszania theme.json. theme.json owija reguły presetów
   w :where() (swoistość 0), więc ten override wygrywa naturalnie. Warianty
   outline/ghost (przezroczyste tło) są wykluczone. */
.wp-block-button:not(.is-style-outline):not(.gd-btn-ghost) > .wp-block-button__link.wp-element-button {
	background-color: var(--gd-magenta-action, #B0407D);
}

/* Linki w blokach */
.wp-block-woocommerce-cart a,
.wp-block-woocommerce-checkout a {
	color: var(--gd-ochre-bright, #E0B458);
}

/* Mini-cart drawer. Kontener zewnętrzny (.wc-block-components-drawer) ma domyślnie
   BIAŁE tło z rdzenia wtyczki — nasze wcześniejsze pokrycie malowało tylko
   wnętrze (content/items/footer), więc biel przebijała wąskim paskiem na lewej
   krawędzi wszędzie tam, gdzie wewnętrzne warstwy nie sięgają idealnie do brzegu. */
.wc-block-mini-cart__drawer {
	color: var(--gd-cream, #F4EFE6);
}

.wc-block-mini-cart__drawer.wc-block-components-drawer {
	background: var(--gd-void, #0E0C1D) !important;
}

.wc-block-mini-cart__drawer .components-modal__content,
.wc-block-mini-cart__drawer .wc-block-mini-cart__items,
.wc-block-mini-cart__drawer .wc-block-mini-cart__footer {
	background: var(--gd-void, #0E0C1D) !important;
}

.wc-block-mini-cart__footer {
	border-top: 1px solid rgba(244, 239, 230, 0.09) !important;
}

/* Przycisk zamknięcia szuflady — domyślny odstęp od krawędzi (12px) jest
   zauważalnie ciaśniejszy niż padding reszty treści szuflady; dosuwamy go do
   tego samego rytmu. */
.wc-block-mini-cart__drawer .wc-block-components-drawer__close {
	top: 24px !important;
	right: 24px !important;
}

/* Plakietka z liczbą sztuk na miniaturze (koszyk/kasa/mini-cart): domyślnie
   background: currentColor + tekst z presetu "background" (którego nasza paleta
   nie definiuje) — w tym motywie wychodzi biały krążek z niewidocznym białym
   tekstem. Wymuszamy jawny, czytelny kontrast. */
.wc-block-components-order-summary-item__quantity,
.wc-block-mini-cart-items .wc-block-cart-item__image .wc-block-components-order-summary-item__quantity {
	background: var(--gd-magenta-action, #B0407D) !important;
	color: var(--gd-cream, #F4EFE6);
}

.wc-block-components-order-summary-item__quantity span {
	color: var(--gd-cream, #F4EFE6) !important;
}

/* Kupony / dostawa */
.wc-block-components-totals-coupon-link,
.wc-block-components-shipping-calculator-address__button {
	color: var(--gd-muted, #C9C2D6) !important;
}

/* Komunikaty Store API bloków (np. "»Kobieta z pawiem« został dodany do koszyka."
   po dodaniu produktu) — domyślnie jasne tło rdzenia wtyczki, nieustylowane w tym
   motywie dotąd. Ten sam komunikat celowo towarzyszy klientowi z koszyka na kasę
   (Store API trzyma go w kliencie do kolejnej zmiany koszyka) — to zamierzone
   zachowanie WooCommerce, nie usterka; tu tylko dociągamy go do ciemnej palety. */
.wc-block-components-notice-banner {
	background: var(--gd-surface, #241F3B) !important;
	border: 1px solid var(--gd-line, rgba(244, 239, 230, 0.09)) !important;
	border-radius: 8px;
	color: var(--gd-cream, #F4EFE6) !important;
}

.wc-block-components-notice-banner.is-success { border-color: var(--gd-teal, #2E7D6B) !important; }
.wc-block-components-notice-banner.is-error { border-color: var(--gd-orange, #E07B39) !important; }
.wc-block-components-notice-banner.is-warning,
.wc-block-components-notice-banner.is-info { border-color: var(--gd-line-strong, rgba(244, 239, 230, 0.18)) !important; }

.wc-block-components-notice-banner .wc-block-components-notice-banner__content,
.wc-block-components-notice-banner a {
	color: var(--gd-cream, #F4EFE6) !important;
}

/* WC Blocks samo dostarcza dla linku ".wc-forward" wewnątrz banera (np. "Zobacz
   koszyk" po dodaniu do koszyka, "Przeglądaj produkty" przy pustych pobraniach)
   regułę `color:#2f2f2f !important` o specyficzności 3 klas — bije powyższą,
   ogólniejszą regułę `.wc-block-components-notice-banner a` (2 selektory) mimo
   !important po obu stronach. Prawie czarny tekst na naszym ciemnym tle był
   niewidoczny (zgłoszenie Piotra). Dopasowujemy specyficzność 1:1 z tym samym
   selektorem WC, żeby wygrać kolejność źródła (nasz plik ładuje się po WC). */
.wc-block-components-notice-banner > .wc-block-components-notice-banner__content .wc-forward {
	color: var(--gd-ochre-bright, #E0B458) !important;
}

.wc-block-components-notice-banner a { color: var(--gd-ochre-bright, #E0B458) !important; }

/* ==========================================================================
   Nagłówek na kasie — WooCommerce celowo podmienia nasz pełny nagłówek (z menu)
   na własny, minimalny "checkout-header" (tylko logo + koszyk), wzorzec
   "distraction-free checkout" ograniczający rozpraszanie tuż przed płatnością.
   To zamierzone zachowanie wtyczki (templates/templates/page-checkout.html z
   samej wtyczki twardo wskazuje "theme":"woocommerce/woocommerce" jako źródło
   tej części szablonu) — nie przywracamy pełnego menu, tylko dociągamy wysokość
   i typografię tego uproszczonego paska do reszty marki, żeby nie wyglądał jak
   inny, zepsuty motyw. Selektor celowany wyłącznie w stronę kasy, z wykluczeniem
   naszego właściwego .gd-header (który koszyk/inne strony renderują normalnie). */
body.woocommerce-checkout header.wp-block-template-part:not(.gd-header) {
	background: var(--gd-void, #0E0C1D);
	min-height: 5rem;
	display: flex;
	align-items: center;
	/* Brakujące justify-content — bez niego logo i ikona koszyka pakują się
	   razem po lewej (flex default: flex-start), stąd ciasnota zgłoszona na
	   iPhonie, gdzie węższy ekran dodatkowo to uwypukla. */
	justify-content: space-between;
	gap: 1rem;
	padding-inline: max(1.25rem, 4vw);
}

body.woocommerce-checkout header.wp-block-template-part:not(.gd-header) .wp-block-site-title a {
	font-family: var(--gd-font-display, "Fraunces", serif);
	color: var(--gd-cream, #F4EFE6);
	text-decoration: none;
}

body.woocommerce-checkout header.wp-block-template-part:not(.gd-header) .wc-block-cart-link {
	color: var(--gd-cream, #F4EFE6);
}

/* --- Klasyczne widoki (fallback: konto, zamówienia) --- */
.woocommerce table.shop_table {
	background: transparent;
	border: 1px solid rgba(244, 239, 230, 0.09);
	border-radius: 8px;
	color: var(--gd-cream, #F4EFE6);
}

.woocommerce table.shop_table th,
.woocommerce table.shop_table td {
	border-color: rgba(244, 239, 230, 0.09) !important;
	color: var(--gd-cream, #F4EFE6);
	/* WC core zostawia tu tylko 4px pionowego paddingu — wystarczające dla
	   samego tekstu, ale przycisk-pigułka (.woocommerce a.button, wysoki
	   dzięki własnemu paddingowi 0.85rem) niemal styka się z krawędzią
	   komórki/wiersza (zgłoszenie Piotra: "Zobacz"/"Usuń" bez oddechu). */
	padding-top: 1rem;
	padding-bottom: 1rem;
	vertical-align: middle;
}

/* WC renderuje nawigację jako wąską kolumnę boczną obok treści (klasyczny
   float layout, ~30% z 740px .gd-prose = ok. 220px) NIEZALEŻNIE od szerokości
   ekranu — flex-wrap poziomy w tak wąskiej kolumnie łamie krótkie/długie
   etykiety ("KOKPIT"/"ZAMÓWIENIA"/"POBRANIA"...) w nieregularną, przypadkową
   siatkę zamiast czytelnej listy (zgłoszenie Piotra, widoczne też na desktopie,
   nie tylko na mobile — stąd stała kolumna, bez media query). */
.woocommerce-MyAccount-navigation ul {
	list-style: none;
	padding: 0;
	display: flex;
	flex-direction: column;
	gap: 0.85rem;
	margin-bottom: 2rem;
}

.woocommerce-MyAccount-navigation a {
	color: var(--gd-muted, #C9C2D6);
	font-size: 0.8rem;
	letter-spacing: 0.12em;
	text-transform: uppercase;
}

.woocommerce-MyAccount-navigation .is-active a {
	color: var(--gd-ochre-bright, #E0B458);
}

.woocommerce a.button,
.woocommerce button.button,
.woocommerce input.button {
	background: var(--gd-magenta-action, #B0407D);
	color: var(--gd-cream, #F4EFE6);
	border-radius: 999px;
	text-transform: uppercase;
	letter-spacing: 0.1em;
	font-size: 0.78rem;
	padding: 0.85rem 1.8rem;
	border: none;
}

.woocommerce a.button:hover,
.woocommerce button.button:hover {
	background: var(--gd-violet, #7E4FB0);
	color: var(--gd-cream, #F4EFE6);
}

/* Etykieta „Sprzedane" w klasycznych pętlach (fallback) */
.gd-sold-label {
	display: inline-block;
	padding: 0.7rem 1.4rem;
	border: 1px solid rgba(244, 239, 230, 0.2);
	border-radius: 999px;
	color: var(--gd-muted, #C9C2D6);
	font-size: 0.7rem;
	letter-spacing: 0.18em;
	text-transform: uppercase;
	text-align: center;
}

/* Galeria produktu — lightbox/zoom na ciemnym */
.woocommerce-product-gallery__wrapper {
	background: var(--gd-surface, #241F3B);
}

.pswp__bg { background: rgba(14, 12, 29, 0.96) !important; }

/* Lightbox PhotoSwipe: zsuń górny pasek (z przyciskiem X) poniżej paska statusu
   / notcha iPhone'a. Na desktopie env() = 0, więc bez zmian. */
.pswp .pswp__top-bar {
	top: 0;
	padding-right: 0;
}

body.gd-ios-scrollport .pswp .pswp__top-bar {
	top: env(safe-area-inset-top, 0px);
	padding-right: env(safe-area-inset-right, 0px);
}

/* Pasek to flex (justify-content:flex-end). Na ≤1024px PhotoSwipe wrzuca preloader
   (44px) do paska jako element po PRAWEJ od X, przez co X odsuwa się od krawędzi.
   order:1 czyni X ostatnim elementem = dosunięty równo do prawej krawędzi. */
.pswp .pswp__button--close {
	order: 1;
}

/* ==========================================================================
   Hero strony głównej — wordmark + losowe dostępne dzieło
   ========================================================================== */

.gd-hero.gd-hero > *,
.gd-hero__layout > * {
	margin-block-start: 0;
}

.gd-hero__layout {
	position: relative;
	z-index: 1;
	display: grid;
	grid-template-columns: minmax(0, 1fr);
	width: min(100%, 1600px);
	margin-inline: auto;
}

.gd-hero__copy,
.gd-hero-artwork {
	min-width: 0;
}

.gd-hero-artwork {
	width: min(100%, 34rem);
	width: min(
		100%,
		34rem,
		var(--gd-hero-artwork-width-vh, 34rem),
		var(--gd-hero-artwork-width-rem, 34rem)
	);
	margin: 0;
}

.gd-hero-artwork__link {
	color: inherit;
	text-decoration: none;
}

.gd-hero-artwork__link::before {
	content: "";
	position: absolute;
	inset: 0;
	z-index: 2;
}

.gd-hero-artwork:focus-within {
	outline: 2px solid var(--gd-magenta-bright, #E36AAE);
	outline-offset: 0.65rem;
}

.gd-hero-artwork__link:focus-visible {
	outline: none;
	color: inherit;
}

.gd-artwork .gd-hero-artwork__frame {
	display: block;
	width: 100%;
	margin: 0;
	background: transparent;
}

.gd-artwork .gd-hero-artwork__image {
	display: block;
	width: 100%;
	height: auto;
	aspect-ratio: auto;
	transform: scale(1.002);
	transition: transform 0.85s var(--gd-ease-out, ease);
}

.gd-artwork.gd-hero-artwork:hover .gd-hero-artwork__image,
.gd-artwork.gd-hero-artwork:focus-within .gd-hero-artwork__image {
	transform: scale(1.025);
}

.gd-hero-artwork__caption {
	padding-top: 1.25rem;
}

.gd-hero-artwork__title {
	margin: 0;
	font-family: var(--gd-font-display, Fraunces, serif);
	font-size: clamp(1.9rem, 1.4rem + 2.2vw, 2.8rem);
	font-weight: 380;
	line-height: 1.12;
	letter-spacing: -0.02em;
	color: var(--gd-cream, #F4EFE6);
	overflow-wrap: anywhere;
	text-wrap: balance;
}
.gd-hero__empty {
	max-width: 30rem;
	margin: clamp(2rem, 5vh, 3.5rem) 0 0;
	font-family: var(--gd-font-display, Fraunces, serif);
	font-size: clamp(1.9rem, 1.4rem + 2.2vw, 2.8rem);
	font-style: italic;
	font-weight: 340;
	line-height: 1.25;
	color: var(--gd-muted, #C9C2D6);
}

.gd-hero__layout:has(.gd-hero__empty) .gd-hero__eyebrow,
.gd-hero__layout:has(.gd-hero__empty) .gd-hero__sub,
.gd-hero__layout:has(.gd-hero__empty) .gd-hero__actions {
	display: none;
}

@media (min-width: 882px) {
	.gd-hero__layout:has(.gd-hero-artwork) {
		grid-template-columns: minmax(0, 1.12fr) minmax(22rem, 0.88fr);
		align-items: center;
		gap: clamp(2.5rem, 6vw, 7rem);
	}

	.gd-hero-artwork {
		justify-self: end;
	}
}

@media (max-width: 881px) {
	.gd-hero:has(.gd-hero-artwork) {
		min-height: auto;
		padding-bottom: clamp(3rem, 9vw, 5rem);
	}

	.gd-hero__layout:has(.gd-hero-artwork) {
		gap: clamp(2.75rem, 8vw, 4.5rem);
	}

	.gd-hero-artwork {
		margin-inline: auto;
	}
}

@media (prefers-reduced-motion: reduce) {
	.gd-hero-artwork__frame,
	.gd-hero-artwork__image {
		transition: none;
	}
}

/* ==========================================================================
   Kafel siatki strony głównej — jawna dostępność, zakup na stronie obrazu
   ========================================================================== */

.gd-artwork { position: relative; }

.gd-gallery .gd-artwork-image--landscape {
	aspect-ratio: var(--gd-artwork-aspect);
	background: transparent;
}

.gd-gallery .gd-artwork-image--landscape > a,
.gd-gallery .gd-artwork-image--landscape img {
	aspect-ratio: var(--gd-artwork-aspect);
	height: auto;
	object-fit: contain;
	transform: scale(1.002);
}

.gd-gallery .gd-artwork:hover .gd-artwork-image--landscape img {
	transform: scale(1.025);
}

.gd-artwork__meta {
	align-items: flex-start;
}

.gd-artwork .gd-price--available {
	display: flex;
	flex: 0 0 auto;
	flex-direction: column;
	align-items: flex-end;
	gap: 0.35rem;
}

.gd-artwork__availability {
	font-family: var(--gd-font-body, "Hanken Grotesk", sans-serif);
	font-size: 0.62rem;
	font-weight: 600;
	letter-spacing: 0.12em;
	line-height: 1.35;
	text-align: right;
	text-transform: uppercase;
	color: var(--gd-muted, #C9C2D6);
}

/* Stan Sprzedane w wierszu meta: przekreślona, przygaszona cena + tag „Sprzedane".
   Sygnał niezależny od plakietki na obrazie (ta potrafi wejść pod fixed-header). */
.gd-artwork .gd-price--sold {
	color: var(--gd-muted, #C9C2D6);
	text-decoration: line-through;
	text-decoration-thickness: 1px;
	opacity: 0.8;
}
.gd-artwork .gd-price-sold-label {
	display: inline-block;
	margin-right: 0.6rem;
	color: var(--gd-cream, #F4EFE6);
	text-decoration: none;
	font-size: 0.62rem;
	font-weight: 600;
	letter-spacing: 0.18em;
	text-transform: uppercase;
	opacity: 1;
}

/* ==========================================================================
   Overrides układu motywu (nie-Woo) — krytyka strony głównej, P2/a11y.
   style.css jest zamrożony; te reguły korygują go z wyższej swoistości/źródła.
   ========================================================================== */

/* Filary 01/02/03: WordPress wstrzykuje block-gap (margin-block-start) między
   kolejne dzieci grupy o layout:flow. Filary są CSS-gridem, więc ten margines
   spychał 2. i 3. kafel o ~32px w dół — górne hairline'y i numery się rozjeżdżały.
   Zerujemy górny margines dzieci; grid ma własny `gap` (kolumny) oraz `gap` w
   wariancie mobilnym (1 kolumna), więc odstępy pozostają zachowane. align-items:start
   jako dodatkowe zabezpieczenie kotwiczenia do góry wiersza. */
.gd-pillars { align-items: start; }
.gd-pillars > * { margin-block-start: 0; }

/* Nagłówki kolumn stopki były h6 (przeskok poziomów h2→h6, a11y 1.3.1). W markupie
   zmienione na h3; tu odtwarzamy 1:1 wygląd starego h6 (globalne reguły h3 różnią
   się — inny krój/rozmiar), bez ruszania zamrożonego style.css. */
.gd-footer h3 {
	font-family: var(--gd-font-body, "Hanken Grotesk", sans-serif);
	font-size: 0.68rem;
	font-weight: 500;
	letter-spacing: 0.22em;
	line-height: 1.1;
	text-transform: uppercase;
	color: var(--gd-muted, #C9C2D6);
	margin: 0 0 1.25rem;
}

/* Mobile i powiększony tekst: nagłówek reflowuje zamiast ucinać język/koszyk. */
@media (max-width: 560px) {
	.gd-header {
		gap: 0.75rem;
	}

	.gd-hero {
		padding-top: calc(var(--gd-header-offset) + 3rem);
	}

	.gd-header .wp-block-site-title {
		flex: 1 1 8rem;
		min-width: 0;
	}

	.gd-header .wp-block-site-title a {
		display: flex;
		align-items: center;
		overflow-wrap: anywhere;
	}

	.gd-header > .wp-block-group {
		flex: 1 1 10rem;
		min-width: 0;
		max-width: 100%;
		flex-wrap: wrap !important;
		justify-content: flex-end;
		gap: 0.5rem !important;
	}
}

/* Cel dotykowy może być większy niż widoczny znak — bez wizualnego pompowania UI. */
@media (max-width: 560px), (pointer: coarse) {
	.gd-header .wp-block-site-title a,
	.wp-block-navigation__responsive-container-open,
	.wp-block-navigation__responsive-container-close,
	.gd-lang-btn,
	.gd-header .wc-block-mini-cart__button,
	.gd-hero-artwork__link,
	.gd-artwork .wp-block-post-title a,
	.gd-arrow-link,
	.gd-footer a {
		min-inline-size: 44px;
		min-block-size: 44px;
	}

	.wp-block-navigation__responsive-container-open,
	.wp-block-navigation__responsive-container-close,
	.gd-lang-btn,
	.gd-header .wc-block-mini-cart__button,
	.gd-hero-artwork__link,
	.gd-artwork .wp-block-post-title a,
	.gd-arrow-link,
	.gd-footer a {
		display: inline-flex;
		align-items: center;
	}
}

/* style.css stylizuje .wc-block-store-notices bezwarunkowo (tło/ramka/padding). Kontener
   nie jest jednak nigdy dosłownie :empty — WooCommerce Blocks renderuje w nim <template>
   dla Interactivity API nawet bez komunikatów — więc bez tej reguły pusty pasek jest
   widoczny stale (np. na /sklep/, dopóki nic nie trafi do koszyka). Realny komunikat
   zawsze dostaje .wc-block-components-notice-banner — chowamy kontener, dopóki go nie ma. */
.wc-block-store-notices:not(:has(.wc-block-components-notice-banner)) {
	display: none;
}

/* Pusty koszyk (page-cart.html, post_content strony Koszyk) — zastępuje domyślny,
   nigdy nieprzetłumaczony blok WooCommerce "Your cart is currently empty! / New in
   store" (wc-block-grid, inna karta produktu niż .gd-artwork używany wszędzie
   indziej) własnym, spójnym z resztą motywu komunikatem. Same produkty-sugestie
   przeniesione do osobnej sekcji "Może Cię zainteresować" (siatka .gd-related-grid,
   [gd_cart_related], inc/cart-page.php) — tu tylko nagłówek + link powrotny. */
.gd-cart-empty {
	display: flex;
	justify-content: center;
	text-align: center;
	padding-block: clamp(3rem, 8vh, 5rem) clamp(2rem, 6vh, 3.5rem);
}

.gd-cart-empty__title {
	font-family: var(--gd-font-display, "Fraunces", serif);
	font-weight: 380;
	font-size: clamp(1.7rem, 1.2rem + 1.8vw, 2.4rem);
	color: var(--gd-cream, #F4EFE6);
	margin: 0 0 1.5rem;
}

.gd-cart-empty .gd-related-empty {
	margin: 0;
}

/* Podgląd orientacyjny EUR/GBP/USD pod ceną PLN (inc/currency-preview.php). Rozliczenie
   zawsze w PLN — ten napis nigdy nie zastępuje ceny głównej, tylko dopisuje kontekst. */
.gd-price-fx {
	display: block;
	margin-top: 0.2rem;
	font-family: var(--gd-font-body, "Hanken Grotesk", sans-serif);
	font-size: 0.72rem;
	font-weight: 500;
	letter-spacing: 0.01em;
	color: var(--gd-muted, #C9C2D6);
	opacity: 0.85;
}

/* ==========================================================================
   order-pay — zaliczka/saldo portretów na zamówienie (inc/commissions-payments.php)
   Klasyczny szablon woocommerce_pay (nie blok checkout) — bez override PHP szablonu,
   celowo czysty CSS (mniej ryzyka niż kopiowanie rdzennego pliku wtyczki). Klient
   trafia tu z przycisku "Zapłać zaliczkę/saldo teraz" na stronie statusu zamówienia.
   ========================================================================== */

.woocommerce-order-pay {
	color: var(--gd-cream, #F4EFE6);
	font-family: var(--gd-font-body, "Hanken Grotesk", sans-serif);
}

.woocommerce-order-pay #order_review_heading,
.woocommerce-order-pay h3 {
	font-family: var(--gd-font-display, "Fraunces", serif);
	color: var(--gd-cream, #F4EFE6);
}

.woocommerce-order-pay table#order_review,
.woocommerce-order-pay table.shop_table {
	background: var(--gd-surface, #241F3B);
	border: 1px solid var(--gd-line, rgba(244, 239, 230, 0.09));
	border-radius: 10px;
	overflow: hidden;
}

/* Lista bramek (Stripe/PayPal/Przelewy24) — dotąd zupełnie nieostylowana, dziedziczyła
   domyślny jasny wygląd WooCommerce, kontrastujący z resztą ciemnej strony. */
#order_review #payment,
.woocommerce-order-pay #payment {
	background: var(--gd-surface, #241F3B) !important;
	border-radius: 10px;
}

#order_review #payment ul.payment_methods,
.woocommerce-order-pay ul.payment_methods {
	border: none !important;
	padding: 1rem 1.1rem !important;
	margin: 0 !important;
}

#order_review .wc_payment_methods li.wc_payment_method,
.woocommerce-order-pay .wc_payment_methods li.wc_payment_method {
	border-top: 1px solid var(--gd-line, rgba(244, 239, 230, 0.09));
	padding: 0.85rem 0;
}

#order_review .wc_payment_methods li.wc_payment_method:first-child,
.woocommerce-order-pay .wc_payment_methods li.wc_payment_method:first-child {
	border-top: none;
}

#order_review .wc_payment_methods label,
.woocommerce-order-pay .wc_payment_methods label {
	color: var(--gd-cream, #F4EFE6) !important;
	font-weight: 500;
}

#order_review .wc_payment_methods input.input-radio,
.woocommerce-order-pay .wc_payment_methods input.input-radio {
	accent-color: var(--gd-magenta, #C0468A);
	margin-right: 0.5rem;
}

#order_review .payment_box,
.woocommerce-order-pay .payment_box,
#add_payment_method .payment_box {
	background: var(--gd-ink, #1E1B33) !important;
	color: var(--gd-muted, #C9C2D6) !important;
	border-radius: 8px;
	margin: 0.75rem 0 0.25rem !important;
	padding: 1rem !important;
}

#order_review .payment_box::before,
.woocommerce-order-pay .payment_box::before,
#add_payment_method .payment_box::before {
	border-bottom-color: var(--gd-ink, #1E1B33) !important;
}

#order_review .payment_box a,
.woocommerce-order-pay .payment_box a,
#add_payment_method .payment_box a {
	color: var(--gd-magenta-bright, #E36AAE);
}

/* "Dodaj metodę płatności" (Moje konto) renderuje ten sam .payment_box co
   order-pay wyżej, ale WC core dostarcza tam DODATKOWO jasne tło z wyższą
   specyficznością (#add_payment_method #payment div.payment_box — 3 selektory
   ID/klasa), bijące powyższe reguły mimo !important po obu stronach (specyf.
   decyduje przy remisie ważności). Kremowy tekst motywu na jasnym tle WC był
   nieczytelny (zgłoszenie Piotra — cały formularz "nieczytelny"). Dopasowanie
   dokładnie tego samego selektora WC gwarantuje wygraną. */
#add_payment_method #payment div.payment_box {
	background: var(--gd-ink, #1E1B33) !important;
}

#add_payment_method .payment_box .testmode-info,
#add_payment_method .payment_box .testmode-info strong,
#add_payment_method .payment_box label {
	color: var(--gd-muted, #C9C2D6) !important;
}

.woocommerce-order-pay .woocommerce-info,
.woocommerce-order-pay .woocommerce-error,
.woocommerce-order-pay .woocommerce-message {
	background: var(--gd-surface, #241F3B) !important;
	color: var(--gd-cream, #F4EFE6) !important;
	border-top-color: var(--gd-magenta, #C0468A) !important;
	border-radius: 8px;
}

.woocommerce-order-pay .woocommerce-error {
	border-top-color: var(--gd-orange, #E07B39) !important;
}

/* Klasyczny przycisk "Opłać zamówienie" (#place_order) — rozciągamy na pełną szerokość,
   spójnie z resztą przycisków w tej sekcji. */
.woocommerce-order-pay #place_order,
.woocommerce-order-pay .form-row {
	display: block;
	width: 100%;
	box-sizing: border-box;
}

/* #place_order wyłączony (natywny atrybut disabled) do czasu zaznaczenia zgody na
   warunki — jedyny przycisk wysyłający płatność, współdzielony przez wszystkie bramki
   (inc/payment-gateways.php). Domyślny styl przycisku ma jawne tło (--gd-magenta-action),
   więc same :disabled przeglądarki go nie wyszarza — dopisujemy to ręcznie. */
.woocommerce-order-pay #place_order:disabled {
	background: var(--gd-surface, #241F3B);
	color: var(--gd-muted, #C9C2D6);
	cursor: not-allowed;
	opacity: 0.6;
}

/* Smart Button PayPal (#ppc-button-ppcp-gateway) rysuje się WEWNĄTRZ iframe'a z domeny
   paypal.com — nie mamy dostępu do jego wnętrza, więc nie da się go "wyszarzyć" CSS-em
   od środka. pointer-events: none blokuje kliknięcie, a przygaszenie kontenera daje ten
   sam wizualny sygnał "nieaktywne" co disabled #place_order obok (inc/payment-gateways.php). */
.gd-smart-button-locked {
	pointer-events: none;
	opacity: 0.5;
	filter: grayscale(0.4);
	cursor: not-allowed;
}

/* Smart Button PayPal (#ppc-button-ppcp-gateway) rysuje się WEWNĄTRZ iframe'a z domeny
   paypal.com — nie mamy dostępu do jego wnętrza, więc nie da się go "rozciągnąć" CSS-em.
   Zweryfikowane eksperymentalnie: w trybie "responsive" PayPal ma twardy sufit szerokości
   (~612px) w szerokich kontenerach, ale W WĄSKIM kontenerze (≤~650px) faktycznie wypełnia
   go niemal całkowicie. Więc zamiast zostawiać przycisk przyklejony do lewej krawędzi
   z niewyjaśnioną pustą przestrzenią po prawej (wygląda jak błąd), ograniczamy WRAPPER
   do szerokości, którą PayPal faktycznie wypełnia, i centrujemy — wygląda na celowe. */
.woocommerce-order-pay .ppc-button-wrapper {
	max-width: 650px;
	margin: 0 auto;
}

/* Plakietki metod płatności w stopce (wymóg weryfikacji Przelewy24 — flagi na
   każdej podstronie). Oficjalne logotypy marek (SVG własnych wtyczek bramek,
   wp-content/themes/gorna-design/assets/img/payments/), nie tekstowe podmienniki —
   podmienione 2026-09-01, plan "Uruchomienie produkcyjnych bramek płatności", Etap 2. */
.gd-payment-badges {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 0.5rem;
	margin-top: 0.75rem !important;
}

.gd-payment-badge {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	/* !important: WooCommerce doleja własny arkusz TYLKO na stronach WC (produkt,
	   koszyk, kasa) z regułą ".woocommerce img { height: auto; max-width: 100% }" —
	   specyficzność (0,1,1) bije naszą ".gd-payment-badge" (0,1,0), więc na stronach
	   spoza WC (O mnie, Kontakt) plakietki miały poprawne 16px, a na stronie produktu
	   rosły do naturalnego rozmiaru SVG (setki px). Znalezione 2026-09-02. */
	height: 16px !important;
	width: auto !important;
	padding: 0.25rem 0.5rem;
	/* Reguła Pill-or-Photograph (DESIGN.md) — plakietki/chipy są zawsze w pełni
	   pigułkowate (999px), tak jak poprzednie tekstowe chipy w tym miejscu. */
	border-radius: 999px;
	/* Logotypy marek są projektowane pod jasne tła (Visa/Mastercard/PayPal) —
	   stałe jasne tło pod każdą plakietką gwarantuje czytelność niezależnie od
	   koloru sekcji, w której stopka aktualnie "oddycha" (color-blocking, §11). */
	background: rgba(244, 239, 230, 0.92);
}

/* Checkout Blocks — wymagany checkbox akceptacji Regulaminu (migracja 0025) +
   towarzyszące mu elementy dokładane skryptem w inc/payment-gateways.php (nie da się
   ich osadzić jako treść bloku — patrz obszerny komentarz w tym pliku PHP o tym,
   dlaczego natywny tekst checkboxa musi zostać domyślny, żeby działał po angielsku). */

/* Widoczna (nie tylko atrybut title) podpowiedź pod "Ekspresową kasą", gdy przycisk
   PayPal jest zablokowany brakiem zgody — ten sam przygaszony ton co .gd-legal-meta. */
.gd-express-locked-hint {
	display: none;
	margin-top: 0.5rem !important;
	font-size: 0.82rem;
	color: var(--gd-muted, #C9C2D6);
	text-align: center;
}

.gd-express-locked-hint--visible {
	display: block;
}

/* Osobny, krótki komunikat błędu POD checkboxem zgody — nie zastępuje natywnej
   etykiety, dokłada się obok niej, w tym samym miejscu i stylu co błędy pozostałych
   pól formularza ("Proszę poprawić adres e-mail" itp.). Kolor i rozmiar zmierzone
   bezpośrednio z natywnego .wc-block-components-validation-error na tej samej stronie
   (rgb(204, 24, 24), 13px) — celowo identyczne, nie przybliżone. */
.gd-terms-error {
	display: none;
	margin: 0.35rem 0 0 !important;
	font-size: 13px;
	color: rgb(204, 24, 24);
}

.gd-terms-error--visible {
	display: block;
}
