/*
Theme Name: Chatynki
Theme URI: https://www.chatynki.pl/
Author: Chatynki
Author URI: https://www.chatynki.pl/
Description: Motyw blokowy dla Chatynek, dwóch całorocznych domków w Krynicy-Zdroju na Słotwinach. Kierunek „Wieczór w Beskidzie”: ciemny motyw domyślny, Fraunces i Manrope, miedź i bursztyn, ziarno na całej stronie.
Version: 1.0.0
Requires at least: 6.5
Tested up to: 7.1
Requires PHP: 7.4
License: GNU General Public License v2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
Text Domain: chatynki
Tags: full-site-editing, block-patterns, one-column, custom-colors, dark-mode-support
*/

/* ===========================================================================
   TOKENY — kopia z design/design-tokens.json
   ======================================================================== */
:root{
  /* Paleta „granat/błękit" z 13.09 — próba na żywym kodzie, do oceny
     na iPadzie. Podmienione WYŁĄCZNIE wartości tokenów; nazwy zmiennych
     (--copper, --amber, --zielony) zostają, żeby nie ruszać setek
     odwołań w reszcie pliku — to podmiana koloru, nie nowy system. */
  --bg:            #0F1722;
  --surface:       #1E293B;
  --surface-2:     #1B2E44;
  --text:          #F1F5F9;
  --muted:         #94A3B8;
  --copper:        #7EA6C9;
  --copper-hi:     #5B8DB8;
  --amber:         #8FB6D9;
  --link:          #8FB6D9;   /* linki; w jasnym motywie ciemniejszy, bo --amber ma tam kontrast 2,4:1 (23.09) */
  --on-copper:     #0F1722;
  --line:          #334155;
  --line-strong:   #4A5563;
  --disabled-bg:   #1B2E44;
  --disabled-tx:   #64748B;
  --glow:          rgba(126,166,201,.28);
  --scrim:         linear-gradient(to top, rgba(6,10,9,.92) 0%, rgba(6,10,9,.55) 45%, rgba(6,10,9,.10) 100%);
  --scrim-text:    rgba(6,10,9,.82);
  --panel-scrim:   linear-gradient(to top, rgba(6,10,9,.90) 0%, rgba(6,10,9,.80) 64%, rgba(6,10,9,0) 100%);
  --grain-op:      .05;
  --shadow:        0 1px 0 rgba(255,255,255,.03), 0 24px 60px -30px rgba(0,0,0,.9);

  --r:  5px;
  /* SKALA ODSTĘPÓW — PŁYNNA, NIE SKOKOWA.
     Każdy stopień sam się interpoluje między 360 px a 1440 px szerokości okna,
     więc odstęp rośnie razem z ekranem i nigdzie nie przeskakuje. Dzięki temu
     nie potrzeba media query do samego rozmiaru — zostają one wyłącznie
     do zmiany UKŁADU (ile kolumn), a to jest ich właściwa robota.
     Wzór: clamp(minimum, minimum − (różnica × 1/3) + nachylenie, maksimum).
     --s1 zostaje stały: najmniejsze odstępy skalowane wyglądają na błąd. */
  --s1: .5rem;
  --s2: clamp(.875rem, .833rem + .19vw,  1rem);
  --s3: clamp(1.25rem, 1.083rem + .74vw, 1.75rem);
  --s4: clamp(2rem,    1.667rem + 1.48vw, 3rem);
  --s5: clamp(3rem,    2.167rem + 3.7vw,  5.5rem);
  --s6: clamp(4.5rem,  3rem + 6.67vw,     9rem);

  /* SKALA PISMA — PŁYNNA, W REM.
     Te same zasady co przy odstępach: każdy stopień interpoluje się sam
     między 360 px a 1440 px, więc media query nie są potrzebne do rozmiaru.
     ⚠️ WSZYSTKO W REM, NIE W PIKSELACH. Piksele ignorują ustawienie wielkości
     pisma w przeglądarce, więc ktoś z powiększoną czcionką systemową i tak
     dostawał nasze 13 px. W rem to ustawienie znów działa. */
  --t-micro: clamp(.6875rem, .667rem + .09vw, .75rem);   /* 11  → 12   */
  --t-small: clamp(.8125rem, .766rem + .19vw, .9375rem); /* 13  → 15   drobny (23.09: scalony z --t-mini) */
  --t-body:  clamp(.969rem,  .938rem + .14vw, 1.063rem); /* 15,5 → 17  */
  --t-h3:    clamp(1.188rem, 1.146rem + .19vw, 1.313rem);/* 19  → 21   */
  --t-h2:    clamp(1.4375rem, 1.321rem + .476vw, 1.75rem); /* 23 → 28  (23.09: wyraźny skok nad tytułem karty) */
  --t-liczba: clamp(2rem, 4.2vw, 3rem);                 /* 32 → 43 → 48  duże liczby */
  --t-tytul:  clamp(2.6rem, 6.2vw, 4.6rem);             /* 42 → 63 → 74  tytuł strony */
  /* Logo w belce: litery CHATYNKI w pliku to 35/143 wysokości obrazka,
     wersaliki Manrope w menu to 0,735 font-size → 3 × --t-body daje tę
     samą wysokość liter co menu, na każdej szerokości (15.09). */
  /* Menu: 13,5px na telefonie (4 pozycje mieszczą się w jednym rzędzie,
     wariant A z makiety 15.09) → 17px od 1440px, płynnie, bez progu. */
  --t-nav:   clamp(.844rem, .771rem + .324vw, 1.063rem); /* 13,5 → 17 */
  --logo-h:  calc(var(--t-nav) * 3);
  /* Audyt design-system 14.09: pierwszy tracking-token. Zastępuje na
     razie tylko powtórzone .14em (menu, 3 inne miejsca) — reszta
     rozstrzelenia liter w pliku (.01em…30em) zostaje jak jest, to
     celowe niuanse per komponent, nie duplikaty tej samej wartości. */
  --tracking-wide: .14em;
  /* KROJE (12.09): Manrope na CAŁĄ stronę, zastąpił Lato i Anton.
     Montserrat zostaje WYŁĄCZNIE na wordmark w hero, bo tak jest w logo. Ma latin-ext
     i pełną zmienną oś wagi 200–800, więc jeden plik robi wszystko. */
  --font-ui:      "Manrope", system-ui, sans-serif;
  --font-display: "Manrope", system-ui, sans-serif;
  --zielony:    #4CAF8F;  --zielony-hi: #63C0A2;  --on-zielony: #FFFFFF;
  --font-znak:    "Montserrat", "Manrope", sans-serif;   /* WYŁĄCZNIE wordmark CHATYNKI — tak jest w logo */   /* wordmark CHATYNKI — jak w logo */

  --measure: 62ch;
  --ease: cubic-bezier(.22,.61,.36,1);
}

:root[data-theme="light"]{
  --zielony:#4CAF8F; --zielony-hi:#3D9576;
  --bg:            #F8F9FB;
  --surface:       #F4F7FA;
  --surface-2:     #E6F0F7;
  --text:          #1F2D3D;
  --muted:         #6B7C93;
  --copper:        #2E5B7F;
  --copper-hi:     #1F4A6A;
  --amber:         #7EA6C9;
  --link:          #2E5B7F;
  --on-copper:     #FFFFFF;
  --line:          #D6DEE7;
  --line-strong:   #A9C4DB;
  --disabled-bg:   #D9DEE3;
  --disabled-tx:   #6B7C93;
  --glow:          rgba(46,91,127,.16);
  --scrim:         linear-gradient(to top, rgba(20,32,29,.88) 0%, rgba(20,32,29,.42) 50%, rgba(20,32,29,.05) 100%);
  --scrim-text:    rgba(6,10,9,.82);
  /* W motywie jasnym najgorszym kadrem pod panelem jest kadr CIEMNY, nie jasny,
     więc powłoka rozjaśnia zamiast przyciemniać. */
  --panel-scrim:   linear-gradient(to top, rgba(246,242,234,.92) 0%, rgba(246,242,234,.80) 64%, rgba(246,242,234,0) 100%);
  --grain-op:      .03;
  --shadow:        0 1px 2px rgba(20,32,29,.05), 0 20px 44px -28px rgba(20,32,29,.35);
}

/* ===========================================================================
   PODSTAWA
   ======================================================================== */
*,*::before,*::after{ box-sizing:border-box; }
html{ background:var(--bg); scroll-behavior:smooth; }
@media (prefers-reduced-motion:reduce){ html{ scroll-behavior:auto; } }

body{
  margin:0;
  background:var(--bg);
  color:var(--text);
  font-family:"Manrope",-apple-system,"Segoe UI",sans-serif;
  font-size:var(--t-body);
  line-height:1.65;
  -webkit-font-smoothing:antialiased;
  transition:background-color .5s var(--ease), color .5s var(--ease);
}
h1,h2,h3,h4,.ch-display{
  font-family:"Manrope",sans-serif; font-weight:700;
  letter-spacing:-.015em;
  text-wrap:balance;
  margin:0;
}
p{ text-wrap:pretty; }
img{ max-width:100%; }
[id]{ scroll-margin-top:7rem; }

.wp-site-blocks > footer{ margin-block-start:0; }
.wp-site-blocks > *{ margin-block-start:0; }

/* WordPress dokłada blokom w układzie „flow” odstęp margin-block-start równy
   blockGap. Makiety takich odstępów nie mają: cały rytm robią własne reguły
   komponentów (.blok padding, .card p margin, .uklad gap). Ten reset kasuje
   dopisek rdzenia WEWNĄTRZ złożeń przeniesionych z makiet i stoi PRZED
   regułami komponentów, żeby one nadal wygrywały kaskadą. */
.ch-wrap.is-layout-flow > *,.ch-brandbar.is-layout-flow > *,.ch-logo-chip.is-layout-flow > *,.ch-hero-frame.is-layout-flow > *,.ch-hero-copy.is-layout-flow > *,.ch-sec-head.is-layout-flow > *,.ch-cards.is-layout-flow > *,.ch-card.is-layout-flow > *,.ch-figura.is-layout-flow > *,.ch-card .ch-body.is-layout-flow > *,.ch-liczby.is-layout-flow > *,.ch-liczba.is-layout-flow > *,.ch-opinie-uklad.is-layout-flow > *,.ch-opinie.is-layout-flow > *,.ch-ocena-duza.is-layout-flow > *,.ch-zapis.is-layout-flow > *,.ch-zapis .ch-srodek.is-layout-flow > *,.ch-zapis .ch-obraz.is-layout-flow > *,.ch-kanaly.is-layout-flow > *,.ch-kanal.is-layout-flow > *,.ch-kolumny.is-layout-flow > *,.ch-kolumny > div.is-layout-flow > *,.ch-panel.is-layout-flow > *,.ch-uklad.is-layout-flow > *,.ch-uklad > div.is-layout-flow > *,.ch-uklad-media.is-layout-flow > *,.ch-galeria.is-layout-flow > *,.ch-kadr.is-layout-flow > *,.ch-spis.is-layout-flow > *,.ch-spis .ch-poz.is-layout-flow > *,.ch-pas.is-layout-flow > *,.ch-pytania.is-layout-flow > *,.ch-kontakt-siatka.is-layout-flow > *,.ch-kkarta.is-layout-flow > *,.ch-kontakt-dane.is-layout-flow > *,.ch-kontakt-dane .ch-poz.is-layout-flow > *,.ch-dojazd.is-layout-flow > *,.ch-wstep.is-layout-flow > *,.ch-cennik-panel.is-layout-flow > *,.ch-spis-tresci.is-layout-flow > *,.ch-par.is-layout-flow > *,.ch-definicje.is-layout-flow > *,.ch-wyroz.is-layout-flow > *,.ch-cta.is-layout-flow > *,.ch-cta > div.is-layout-flow > *,.ch-cta-pas.is-layout-flow > *,.ch-cta-pas > div.is-layout-flow > *,.ch-stopka.is-layout-flow > *,.ch-stopka .ch-wrap.is-layout-flow > *,.ch-stopka-siatka.is-layout-flow > *,.ch-stopka-siatka > div.is-layout-flow > *,.ch-stopka-siatka > nav.is-layout-flow > *,.ch-prosta-strona.is-layout-flow > *,.ch-rez-siatka.is-layout-flow > *,.ch-rez-boczne.is-layout-flow > *{
  margin-block-start:0;
}
/* ⚠️ 13.09: dopisane „.is-layout-flow” do KAŻDEGO selektora wyżej.
   Bez tego ta reguła miała tę samą swoistość co własna reguła rdzenia
   WordPressa (`:root :where(.is-layout-flow) > *{margin-block:1.75rem 0}`,
   wstrzykiwana w <head> PO tym arkuszu) — przy remisie wygrywa kolejność
   w źródle, czyli wygrywał rdzeń, nie ten reset. Stąd np. druga karta w
   parze na głównej (sekcja 03) stała 28 px niżej od pierwszej. Dopisana
   klasa daje regule jedną swoistość więcej i rozstrzyga remis na stałe,
   niezależnie od kolejności wczytywania arkuszy. */

/* Siatka z wyjsciem na pelna szerokosc.
   Dzieci .wrap domyslnie siedza w kolumnie tresci, a te z klasa .pelna
   (oraz kazdy .hero) rozciagaja sie od krawedzi do krawedzi ekranu.
   Bez 100vw, wiec pionowy pasek przewijania niczego nie przesuwa. */
.ch-wrap{
  --kolumna: 1280px;
  display:grid;
  grid-template-columns:
    [pelna-start] minmax(var(--s3), 1fr)
    [tresc-start] minmax(0, var(--kolumna)) [tresc-end]
    minmax(var(--s3), 1fr) [pelna-end];
}
.ch-wrap > *{ grid-column: tresc; min-width:0; }
.ch-wrap > .pelna,
.ch-wrap > .ch-hero,
.ch-wrap > .ch-hero-karuzela{ grid-column: pelna; }
.ch-tresc{ max-width:var(--measure); }
.ch-blok{ padding:var(--s6) 0 0; }
.ch-blok--zwarty{ padding:var(--s5) 0 0; }

#wp-skip-link.skip-link{
  position:absolute; left:-9999px; top:0; z-index:100;
  background:var(--copper); color:var(--on-copper);
  padding:.75rem 1rem; border-radius:var(--r);
  font:700 var(--t-small)/1 "Manrope",sans-serif; text-decoration:none;
}
#wp-skip-link.skip-link:focus{ left:var(--s2); top:var(--s2); }

/* ziarno, jedna warstwa na całą stronę */
body::before{
  content:"";
  position:fixed; inset:0; z-index:9999; pointer-events:none;
  opacity:var(--grain-op);
  transition:opacity .5s var(--ease);
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='3'/%3E%3C/filter%3E%3Crect width='160' height='160' filter='url(%23n)'/%3E%3C/svg%3E");
}
.editor-styles-wrapper body::before{ display:none; }

/* ===========================================================================
   1. PASEK MARKI
   ======================================================================== */
/* Kuba 30.09 (audyt T7): pasek miał się przyklejać, ale sticky siedział na .ch-brandbar, a jej rodzic (opakowanie części
   szablonu „header”) ma dokładnie jej wysokość, więc nie było gdzie się przykleić. Przykleja się teraz opakowanie, pierwsze
   dziecko .wp-site-blocks. Tło 60% krycia z rozmyciem i nasyceniem (Kuba 30.09). */
/* Kuba 30.09: na telefonie bez przyklejania. Na iPhonie górny pas z godziną należy do Safari i przewijana strona i tak pod nim
   prześwituje, a dwurzędowy pasek zabierał 1/6 ekranu („troszeczkę dziwnie wygląda”). Komputer i iPad: przyklejony. */
@media (min-width:601px){
  .wp-site-blocks > .wp-block-template-part:first-child{ position:sticky; top:0; z-index:50; }
}
.ch-brandbar{
  position:relative; z-index:50;
  /* 1fr auto 1fr, nie trzy równe: środek bierze tyle, ile menu potrzebuje,
     boki dzielą resztę po równo. Przy 1fr×3 menu w kolumnie 360px (1200px
     ekranu) łamało się na dwa wiersze, KONTAKT spadał pod spód (15.09). */
  display:grid; grid-template-columns:1fr auto 1fr; grid-template-areas:"logo nav prawa";
  align-items:center; gap:var(--s2) var(--s3);
  padding:var(--s2) var(--s3);
  /* Kuba 30.09: efekt „szkła” jak u Apple: 60% krycia (było 88%, potem 75%), mocniejsze rozmycie i nasycenie tła pod spodem. */
  background:color-mix(in srgb, var(--bg) 60%, transparent);
  backdrop-filter:blur(18px) saturate(1.6);
  -webkit-backdrop-filter:blur(18px) saturate(1.6);
  border-bottom:1px solid var(--line);
}
@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))){
  .ch-brandbar{ background:var(--bg); }
}
/* Bez własnego tła (15.09): pełne tło + przejście .5s zostało po czarnym
   JPG-u z mix-blend-mode. Przy zmianie motywu belka zmieniała kolor od razu,
   a kafelek pół sekundy później — za logo mignął prostokąt. */
.ch-logo-chip{
  display:inline-flex; align-items:center; flex:0 0 auto;
  grid-area:logo; justify-self:center;
  padding:.3rem .45rem; border-radius:var(--r);
  text-decoration:none;
}
.ch-logo-chip:focus-visible{ outline:2px solid var(--copper); outline-offset:3px; }
.ch-logo-chip .wp-block-image{ margin:0; line-height:0; }
.ch-logo-chip .ch-logo img,.ch-logo-chip img.ch-logo{ height:var(--logo-h); width:auto; display:block; }
/* Wspólna linia bazowa napisu CHATYNKI w logo i pozycji menu (logo i menu
   w jednym rzędzie). Oba są wyśrodkowane w pionie, ale linia bazowa w pliku
   leży na 92/143 obrazka, a w menu niżej niż środek linii — zmierzone
   15.09 przy 1100/1200/1440px: logo o 1,8–2,5px za nisko. Przesunięcie
   liczone od fontu menu, więc rośnie razem z nim. */
.ch-brandbar .ch-logo-chip{ transform:translateY(calc(var(--t-nav) * -.13)); }
.ch-logo-chip .ch-logo--na-ciemnym{ display:block; }
.ch-logo-chip .ch-logo--na-jasnym{ display:none; }
:root[data-theme="light"] .ch-logo-chip .ch-logo--na-ciemnym{ display:none; }
:root[data-theme="light"] .ch-logo-chip .ch-logo--na-jasnym{ display:block; }

/* nawigacja — blok core/navigation ubrany w wygląd z makiet */
.ch-nav{
  display:flex; align-items:center; gap:var(--s2);
  grid-area:nav; justify-self:center; min-width:0;
  overflow-x:auto; scrollbar-width:none;
}
.ch-nav::-webkit-scrollbar{ display:none; }
.ch-nav .wp-block-navigation__container,.ch-nav ul{
  display:flex; align-items:center; justify-content:center; gap:var(--s3);
  flex-wrap:nowrap; list-style:none; margin:0; padding:0;
}
.ch-nav a,.ch-nav .wp-block-navigation-item__content{
  position:relative;
  font:700 var(--t-nav)/1 "Manrope",sans-serif; letter-spacing:var(--tracking-wide); text-transform:uppercase;
  color:var(--muted); text-decoration:none; white-space:nowrap;
  padding:var(--s1) 0; border-bottom:2px solid transparent;
  transition:color .35s var(--ease), border-color .35s var(--ease);
}
.ch-nav a:hover,.ch-nav .wp-block-navigation-item__content:hover{
  color:var(--text); border-bottom-color:var(--copper);
}
.ch-nav a[aria-current="page"],.ch-nav .wp-block-navigation-item__content[aria-current="page"],.ch-nav .current-menu-item > a{
  color:var(--amber); border-bottom-color:var(--copper);
}
.ch-nav a:focus-visible,.ch-nav .wp-block-navigation-item__content:focus-visible{
  outline:2px solid var(--copper); outline-offset:3px; border-radius:2px;
}
.ch-nav .wp-block-navigation-item__label{ text-decoration:none; }

/* Widoczna jest tylko ikonka; opis dla czytnika ekranu siedzi w
   .ch-tylko-czytnik, poza ekranem, ale w drzewie dostępności. */
.ch-tylko-czytnik{
  position:absolute; width:1px; height:1px; overflow:hidden;
  clip:rect(0 0 0 0); clip-path:inset(50%); white-space:nowrap;
}

.ch-tel{
  display:inline-flex; align-items:center; gap:.5rem; flex:0 0 auto;
  font:600 var(--t-small)/1 "Manrope",sans-serif; letter-spacing:.02em;
  color:var(--muted); text-decoration:none;
  transition:color .35s var(--ease);
}
.ch-tel:hover{ color:var(--copper); }
.ch-tel:focus-visible{ outline:2px solid var(--copper); outline-offset:3px; border-radius:2px; }
.ch-tel .ch-ikona{ width:1.05rem; height:1.05rem; flex:none; }

.ch-toggle{
  display:inline-flex; align-items:center; flex:0 0 auto;
  background:transparent; border:0; padding:.4rem; margin:-.4rem; cursor:pointer;
}
.ch-toggle:focus-visible{ outline:2px solid var(--copper); outline-offset:3px; border-radius:999px; }
.ch-toggle-tor{
  position:relative; display:inline-flex; align-items:center; justify-content:space-between;
  width:3.6rem; height:2rem; padding:0 .4rem;
  border:1px solid var(--line-strong); border-radius:999px; background:var(--surface-2);
  transition:border-color .35s var(--ease);
}
.ch-toggle:hover .ch-toggle-tor{ border-color:var(--copper); }
/* Ikony w torze to tylko cichy podkład pod spodem, zawsze szare —
   nieaktywny stan „wyparzony", nie wygaszony do zera. Ta pod gałką
   jest zasłonięta, więc jej kolor i tak nie widać.
   ⚠️ 13.09, druga runda: cienkie promyki słońca (2 jednostki z 24 w
   viewBox) przy renderze .85rem/.9rem miały mniej niż 1,5 px na
   ekranie — aliasing zamieniał je w coś krzywego. Ikona powiększona
   do 1rem i promyki przerysowane jako proste kreski (stroke, nie
   wypełnione zaokrąglone prostokąty) — grubość skaluje się jednolicie
   pod każdym kątem, prosto i po skosie tak samo, nie aliasuje się przy
   małym rozmiarze tak łatwo jak cienkie wypełnione kształty. */
.ch-toggle-ikona{ position:relative; z-index:1; width:1rem; height:1rem; flex:none; color:var(--muted); }
/* Gałka: kolor z rodziny szarości, nie żółty — ustalone 13.09.
   Ikona NA gałce to inna sprawa: wybrany stan ma być żółty, jasno
   żółty, żeby wyraźnie odróżniał się od szarego podkładu w torze.
   ⚠️ Pozycja gałki liczona tak, żeby jej ŚRODEK pokrywał się ze
   środkiem ikony w torze pod spodem. Ramka toru (1px z każdej strony)
   liczy się do jej szerokości (box-sizing:border-box), więc pole
   dostępne na padding i ikony to 3.6rem − .125rem ramki = 3.475rem,
   nie cała szerokość toru. Lewa pozycja: .4rem (padding) + .5rem (pół
   ikony) − .75rem (pół gałki) = .15rem. Prawa: 3.475rem − .4rem −
   .5rem − .75rem = 1.825rem. Sprawdzone pomiarem w przeglądarce, nie
   tylko na papierze — środki pokrywają się co do 0,01 px. */
.ch-toggle-galka{
  position:absolute; top:.1875rem; left:1.825rem; width:1.5rem; height:1.5rem;
  display:flex; align-items:center; justify-content:center;
  border-radius:50%; background:var(--muted); z-index:2;
  transition:left .35s var(--ease), background-color .35s var(--ease);
}
.ch-toggle-galka-ikona{ width:1rem; height:1rem; color:#F4B942; }
.ch-toggle-galka-ikona--slonce{ display:none; }
:root[data-theme="light"] .ch-toggle-galka{ left:.15rem; }
:root[data-theme="light"] .ch-toggle-galka-ikona--slonce{ display:block; }
:root[data-theme="light"] .ch-toggle-galka-ikona--ksiezyc{ display:none; }

/* Panel prawy belki: telefon+przełącznik nad, język pod, całość
   wyśrodkowana w swojej kolumnie siatki (szkic gospodarza, 14.09). */
.ch-prawa{
  grid-area:prawa; justify-self:center;
  display:flex; flex-direction:column; align-items:center; gap:.4rem;
}
.ch-prawa-gorny{
  display:flex; align-items:center; justify-content:center;
  flex-wrap:wrap; gap:var(--s2) var(--s3);
}
/* Ujemny margines przełącznika (powiększa pole kliknięcia bez odstępu)
   w kolumnie zjadał odstęp do PL/EN — na dotyku nachodził na nie. */
.ch-prawa .ch-toggle{ margin:0; }

/* ===========================================================================
   2. HERO I PANEL SZUKANIA
   ======================================================================== */
.ch-hero{ position:relative; margin-top:var(--s4); }
/* Hero siega krawedzi, wiec rezygnuje z zaokraglenia i sam wciaga tresc
   do tej samej kolumny, w ktorej stoi reszta strony. */
.ch-wrap > .ch-hero > .ch-hero-frame{ border-radius:0; }
.ch-wrap > .ch-hero > .ch-hero-frame > .ch-hero-copy{
  width:100%;
  max-width:calc(var(--kolumna) + 2 * var(--s3));
  margin-inline:auto;
}
.ch-wrap > .ch-hero > .ch-hero-frame > .ch-hero-copy{ padding-inline:var(--s3); }
/* Panel ma wlasne tlo, wiec kolumne trzyma marginesem, nie wypelnieniem,
   inaczej szklana plyta siegalaby krawedzi ekranu. */

.ch-hero::before{
  content:""; position:absolute; z-index:0; pointer-events:none;
  inset:6% 22% -4% 22%;
  background:radial-gradient(60% 60% at 50% 60%, var(--glow), transparent 70%);
  filter:blur(48px);
}
.ch-hero-frame{
  position:relative; z-index:1;
  overflow:hidden; border-radius:var(--r);
  isolation:isolate;
  display:flex; flex-direction:column; justify-content:flex-end; align-items:flex-start;
  min-height:clamp(340px,52vh,520px);
}
.ch-hero-frame > img,
.ch-hero-frame > picture,
.ch-hero-frame > .wp-block-image{
  position:absolute; inset:0; z-index:0; margin:0;
  display:block; width:100%; height:100%;
}
.ch-hero-frame > img,
.ch-hero-frame > picture img,
.ch-hero-frame > .wp-block-image img{
  display:block; width:100%; height:100%;
  object-fit:cover;
  filter:saturate(.94) contrast(1.04);
}
.ch-hero-frame::after{
  content:""; position:absolute; inset:0; z-index:1; pointer-events:none;
  background:var(--scrim);
}
.ch-hero-copy{
  position:relative; z-index:2;
  padding:var(--s4) var(--s4) var(--s3);
  max-width:min(46rem, 100%);
}
.ch-hero-copy::before{
  content:""; position:absolute; z-index:-1; pointer-events:none;
  inset:-4rem -6rem -1px -1px;
  background:radial-gradient(115% 130% at 12% 100%, var(--scrim-text) 0%,
             color-mix(in srgb, var(--scrim-text) 89%, transparent) 58%, transparent 100%);
}
.ch-hero-copy .ch-eyebrow{
  font:600 var(--t-micro)/1 "Manrope",sans-serif; letter-spacing:.22em; text-transform:uppercase;
  color:var(--amber); margin:0 0 var(--s2);
}
.ch-display{
  font-size:var(--t-tytul);
  line-height:1.12;
  padding-block-start:.08em;
  max-width:14ch;
  font-weight:400;
  color:#F0E9DE;
  text-shadow:0 2px 24px rgba(0,0,0,.6);
}
.ch-hero-copy p{
  margin:var(--s2) 0 0; color:#DED6CA; font-size:var(--t-body); max-width:42ch;
  text-shadow:0 1px 12px rgba(0,0,0,.7);
}
/* podstrony: nieco mniejszy stopień i szersza miara, wg makiet domki/cennik/galeria */
.ch-hero--podstrona .ch-display{ max-width:16ch; }
.ch-hero--podstrona .ch-hero-copy p{ max-width:46ch; }
.ch-hero--niski .ch-hero-frame{ min-height:clamp(240px,34vh,360px); }
/* Nagłówek podstrony o STAŁYCH proporcjach zamiast wysokości liczonej z ekranu
   (było min-height 52vh: 3,0∶1 na komputerze, 1,9∶1 na iPadzie, 0,9∶1 na telefonie,
   ten sam plik kadrowany za każdym razem inaczej). Szeroki kadr 12∶5 (2,4∶1),
   na telefonie kwadrat. max-height chroni niskie ekrany laptopów: tam kadr
   traci trochę góry i dołu, dlatego ważne rzeczy trzymać w środkowym pasie. */
.ch-hero--proporcje .ch-hero-frame{ min-height:0; height:min(calc(100vw * 5 / 12), 66vh); }
@media (max-width:700px){ .ch-hero--proporcje .ch-hero-frame{ height:100vw; } }
/* Bez „kwadratu" pod tekstem (radialna plama .ch-hero-copy::before miała widoczną
   krawędź — gospodarz 19.09). Czytelność daje samo przyciemnienie przez całą
   szerokość zdjęcia, od dołu ku górze, bez żadnego kształtu. */
.ch-hero--proporcje .ch-hero-copy::before{ display:none; }
/* Napis nad tytułem jasny, ciepła biel tytułu przygaszona (było --amber, jasnoniebieski — gospodarz 19.09). */
.ch-hero--proporcje .ch-hero-copy .ch-eyebrow{ color:rgb(240 233 222 / .78); }
.ch-hero--proporcje .ch-hero-copy p{ text-wrap:balance; }
/* Zdanie pod tytułem ma zostać w jednej linii także na 320 px (gospodarz: „dwie linie nie”). */
.ch-hero--proporcje .ch-hero-copy p:not(.ch-eyebrow){ font-size:min(var(--t-body), 4.3vw); }

/* ===========================================================================
   HERO GŁÓWNEJ: KARUZELA + PIGUŁKA REZERWACJI
   Wg makiety zatwierdzonej 31.08 („Hero Chatynek").
   Slider to czysty CSS scroll-snap — zdjęcia stoją w HTML jako zwykłe <img>,
   więc widzi je wyszukiwarka i model językowy. Zero bibliotek, zero kilobajtów.
   ======================================================================== */
.ch-hero-karuzela{
  position:relative; isolation:isolate;
  overflow:visible;            /* pasek rozwija się W DÓŁ poza kadr; przycina sam .ch-tor */
  background:var(--bg); margin-top:var(--s4);
}
/* Kuba 26.09: hero ze zdjęciem na cały ekran (iPad poziomo, telefon pionowo): wysokość okna minus nagłówek, który
   mierzy rezerwacja-hero.js (--wys-naglowka; nagłówek ma różną wysokość zależnie od szerokości). */
.ch-hero-karuzela .ch-tor{
  width:100%; min-height:30rem;
  height:calc(100vh - var(--wys-naglowka, 5rem)); height:calc(100svh - var(--wys-naglowka, 5rem));
  max-height:calc(1080px - var(--wys-naglowka, 5rem));   /* Kuba 26.09: pełny ekran do Full HD, wyżej widać sekcję pod hero */
  display:block; position:relative; overflow:hidden;
}
/* Szerokość zawsze pełna (Kuba 26.09: pasy po bokach na monitorze 2560 „nie wiem, czy to dobra opcja”); ostrość na takich
   ekranach dadzą zdjęcia eksportowane w 2560 px szerokości, gdy będą. */
.ch-hero-karuzela .ch-slajd{
  position:absolute; inset:0; opacity:0;
  transition:opacity 1.1s ease-in-out;
}
.ch-hero-karuzela .ch-slajd picture{ display:contents; }   /* <picture> z wersją pionową (26.09): img dalej wypełnia kadr */
.ch-hero-karuzela .ch-slajd img{
  width:100%; height:100%; object-fit:cover; display:block;
  transform-origin:center 58%;
  filter:saturate(.96) contrast(1.03);
}

/* ---- POWOLNE PRZYBLIŻANIE (efekt Kena Burnsa) --------------------------
   ⚠️ Trwa 16 s, czyli DŁUŻEJ niż cykl zmiany (7 s). Krócej znaczyłoby, że
   zdjęcie dojeżdża do końca i zamiera w bezruchu, czekając na podmianę.
   ⚠️ Punkt odniesienia niżej niż środek (58%): niebo jest u góry, a domki,
   taras i jacuzzi w dolnej połowie. Przybliżamy tam, gdzie treść.
   ⚠️ Animujemy TYLKO widoczny kadr. Sześć naraz to sześć warstw bez powodu.
   ⚠️ PRZEJŚCIEM, NIE ANIMACJĄ (26.09, Kuba: „dziwny skok przed zmianą zdjęcia”). Animacja znikała razem z data-widoczny,
   więc odchodzący kadr, przybliżony po 7 s o ok. 5%, w ułamku sekundy wracał do pełnego kadru, zanim zdążył zgasnąć.
   Teraz przybliża klasa .ch-zblizenie (karuzela w functions.php): zdjęte zostaje przybliżone i wraca do skali 1
   dopiero po 1,2 s, gdy już zgasło (zanikanie trwa 1,1 s).
   -------------------------------------------------------------------- */
.ch-hero-karuzela .ch-slajd img{ transition:transform 0s 1.2s; }
.ch-hero-karuzela .ch-slajd.ch-zblizenie img{ transform:scale(1.085); transition:transform 16s ease-out; }

/* ⚠️ Przyciemnienie idzie za treścią, nie leży równo: mocne u dołu, gdzie
   stoi napis i pigułka, prawie zerowe w górnych dwóch trzecich. */
.ch-hero-karuzela .ch-zaslona{
  position:absolute; inset:0; z-index:1; pointer-events:none;
  background:linear-gradient(180deg,
    rgba(6,10,9,.34) 0%, rgba(6,10,9,.08) 26%, rgba(6,10,9,.30) 54%,
    rgba(6,10,9,.74) 82%, rgba(6,10,9,.82) 100%);
}

/* ⚠️ Grupa stoi nisko, ale nie przy samej krawędzi. Zapas robi
   `padding-bottom` w procentach wysokości kadru, nie w pikselach: przy 16:9
   i przy 4:5 odstęp ma wyglądać tak samo. */
.ch-hero-karuzela .ch-nakladka{
  position:absolute; inset:0; z-index:2;
  display:flex; flex-direction:column; justify-content:flex-end; align-items:center;
  text-align:center; padding:1.4rem;
  padding-bottom:clamp(.75rem, 2.5vh, 1.5rem);   /* Kuba 26.09: pasek jak najbliżej dołu, pod nim tylko krótki napis */
}
.ch-hero-karuzela .ch-grupa{
  display:flex; flex-direction:column; align-items:center; gap:.9rem;
  width:100%; max-width:min(1180px, 100%);
}
.ch-hero-karuzela .ch-nad-tytul{
  margin:0; font:700 var(--t-micro)/1 var(--font-ui);
  letter-spacing:.22em; text-transform:uppercase; color:rgba(255,255,255,.86);
}
.ch-hero-karuzela .ch-tytul{
  margin:0; color:#fff;
  font:200 clamp(2.2rem,7vw,5.2rem)/1.05 var(--font-znak);
  letter-spacing:.30em; text-indent:.30em; text-transform:uppercase;
  text-shadow:0 2px 30px rgba(0,0,0,.55);
}
.ch-hero-karuzela .ch-pod-selektorem{
  margin:0; font-family:var(--font-ui); font-size:var(--t-small); color:rgba(255,255,255,.84);
  text-shadow:0 1px 10px rgba(0,0,0,.5);
}
/* Kuba 27.09: pod paskiem dwa teksty rozdzielone podwójną strzałką w dół (znak » obrócony, krój strony);
   na telefonie jeden pod drugim, bez strzałki. */
.ch-hero-karuzela .ch-pod-selektorem span + span::before{
  content:"»"; content:"»" / ""; display:inline-block; transform:rotate(90deg); margin:0 .9rem; font-size:1.35em; line-height:1; vertical-align:-.05em;
}
@media (max-width:600px){
  .ch-hero-karuzela .ch-pod-selektorem span{ display:block; }
  .ch-hero-karuzela .ch-pod-selektorem span + span::before{ content:none; }
}

/* ---- PIGUŁKA: BLOK ZASTĘPCZY WTYCZKI REZERWACJI ------------------------
   Zwinięta pokazuje trzy rzeczy i przycisk; pola i cena dopiero po
   kliknięciu. Nikt nie widzi ośmiu pól na wejściu, a i tak wszystko jest
   jedno kliknięcie dalej.
   ⚠️ CIEMNA, nie biała. Biała działa na jednym równomiernie jasnym zdjęciu;
   tu kadry idą od słonecznego śniegu po nocny las i biała by znikała.
   Nic nie liczy i nic nie wysyła — prawdziwy formularz to osobna wtyczka.
   -------------------------------------------------------------------- */
.ch-hero-karuzela .ch-selektor{
  position:relative; z-index:5;
  width:100%; text-align:left;
  background:rgba(16,18,17,.94);
  backdrop-filter:blur(6px); -webkit-backdrop-filter:blur(6px);
  border:0; border-radius:4px;
  padding:1.1rem 1.4rem 1.4rem;
}
/* Otwarta rozpycha się w górę, na napis. Gęstsze tło, żeby czytało się jako
   panel położony na wierzchu, a nie jako pomyłka. */
@supports not ((backdrop-filter:blur(1px)) or (-webkit-backdrop-filter:blur(1px))){
  .ch-hero-karuzela .ch-selektor{ background:rgba(14,12,10,.92); }
}
.ch-hero-karuzela .ch-pasek{
  display:grid; grid-template-columns:1fr auto; align-items:end; gap:1rem 1.5rem;
}
.ch-hero-karuzela .ch-skrot{
  display:grid; grid-template-columns:repeat(auto-fit,minmax(8.5rem,1fr)); gap:1rem 1.25rem;
  font:inherit; color:#fff; text-align:left; min-width:0;
}
.ch-hero-karuzela .ch-skrot-poz{ display:flex; flex-direction:column; gap:.4rem; min-width:0; }
.ch-hero-karuzela .ch-skrot-poz em{
  font:700 var(--t-body)/1 var(--font-display); font-style:normal;
  letter-spacing:.02em; color:#fff;
}
.ch-hero-karuzela .ch-skrot-poz strong{
  display:flex; align-items:center; justify-content:center;
  min-height:3.4rem; padding:.6rem .9rem;
  background:#fff; color:#17140F; border-radius:2px;
  font:400 var(--t-body)/1.2 var(--font-ui);
}
/* 25.09: prawdziwe pola w tej samej białej skrzynce co atrapa. Zwykłe kontrolki przeglądarki
   (decyzja Kuby: „jak najprościej”), 16 px, żeby iPhone nie przybliżał strony po dotknięciu. */
.ch-hero-karuzela .ch-skrot-poz :is(input,select){
  display:block; width:100%; min-width:0; min-height:3.4rem; margin:0; padding:.6rem .9rem;
  background:#fff; color:#17140F; border:0; border-radius:2px; color-scheme:light;
  font:400 max(1rem,var(--t-body))/1.2 var(--font-ui); text-align:center; cursor:pointer;
}
/* Safari (zrzut Kuby 26.09, „brak ładu i składu”): bez appearance:none rysuje listę osób po swojemu (niska, z własnymi
   strzałkami), a datę przykleja do góry pola. Teraz trzy jednakowe skrzynki: stała wysokość, tekst na środku, po prawej
   nasza ikona (kalendarz albo strzałka). Ikonę kalendarza Chrome chowamy, bo całe pole i tak otwiera kalendarz
   (rezerwacja-hero.js, showPicker), a bez tego w Chrome byłaby, a w Safari nie. Sam kalendarz rysuje przeglądarka
   (na Macu w Safari mały, na iPhonie duży, systemowy) i tego stylem się nie zmieni. */
.ch-hero-karuzela .ch-skrot-poz :is(input,select){
  -webkit-appearance:none; appearance:none; height:3.4rem; padding:0 2.4rem; line-height:3.4rem; text-align-last:center;
  background:#fff no-repeat right .9rem center;
}
.ch-hero-karuzela .ch-skrot-poz select{
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='M1 1.5l5 5 5-5' fill='none' stroke='%2317140F' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
}
.ch-hero-karuzela .ch-skrot-poz input[type="date"]{
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16' fill='none' stroke='%2317140F' stroke-width='1.5'%3E%3Crect x='1.75' y='3' width='12.5' height='11.25' rx='1.5'/%3E%3Cpath d='M1.75 6.5h12.5M5 1.25v3M11 1.25v3'/%3E%3C/svg%3E");
}
/* Węższe okno na komputerze (27.09, zrzut Kuby): pola ścieśniają się, więc miejsce na ikonę tylko z prawej, inaczej data się ucina. */
@media (max-width:1000px){
  .ch-hero-karuzela .ch-skrot-poz :is(input,select){ padding:0 2.1rem 0 .5rem; background-position:right .7rem center; }
}
.ch-hero-karuzela .ch-skrot-poz input::-webkit-calendar-picker-indicator{ display:none; }
.ch-hero-karuzela .ch-skrot-poz input::-webkit-date-and-time-value{ text-align:center; }
.ch-hero-karuzela .ch-skrot-poz input::-webkit-datetime-edit{ padding:0; line-height:inherit; }
.ch-hero-karuzela .ch-skrot-poz :is(input,select):focus-visible{ outline:2px solid #fff; outline-offset:2px; }
.ch-hero-karuzela .ch-szukaj{
  flex:none; cursor:pointer; border:0; border-radius:6px;
  font:800 var(--t-body)/1 var(--font-display); letter-spacing:.01em;
  color:#fff; background:#D9301F;  /* 25.09: było #EF3A2C, biały napis 3,95∶1; ta sama czerwień co w formularzu rezerwacji */
  min-height:3.4rem; padding:.6rem 2.6rem;
  transition:background-color .3s var(--ease);
}
.ch-hero-karuzela .ch-szukaj:hover{ background:#C0281A; }
.ch-hero-karuzela .ch-szukaj:focus-visible{ outline:2px solid #fff; outline-offset:2px; }

/* Rozwinięcie chowamy wysokością, nie `display`, żeby dało się je płynnie
   otworzyć i zamknąć. */
/* Atrapa pola: ta sama skrzynka co kontrolka wtyczki, tylko nic nie robi.
   Reguła obejmuje też prawdziwe input/select, żeby po podmianie na shortcode
   nic nie drgnęło. */
.ch-hero-karuzela .ch-pole .ch-pole-slot,

/* ⚠️ Kwota jest zmyślona i tak podpisana na ekranie. Prawdziwą liczy wtyczka,
   bo cennik ma mieć jedno źródło. */
.ch-hero-karuzela .ch-makieta{
  font:600 var(--t-micro)/1.4 var(--font-ui);
  letter-spacing:.12em; text-transform:uppercase; color:rgba(255,255,255,.6);
}

.ch-hero-karuzela .ch-kropki{
  position:absolute; left:0; right:0; top:1rem; z-index:2;
  display:flex; gap:.4rem; justify-content:center;
}
.ch-hero-karuzela .ch-kropka{
  width:8px; height:8px; border-radius:50%; border:0; padding:0; cursor:pointer;
  background:rgba(255,255,255,.42);
  transition:background .2s, width .2s;
}
.ch-hero-karuzela .ch-kropka[aria-current="true"]{ background:#fff; width:22px; border-radius:4px; }

@media (prefers-reduced-motion:reduce){
  .ch-hero-karuzela .ch-tor{ scroll-behavior:auto; }
  .ch-hero-karuzela .ch-slajd img, .ch-hero-karuzela .ch-slajd.ch-zblizenie img{ transform:none; transition:none; }
}
@media (max-width:600px){
  /* ⚠️ Było tu `flex-wrap:wrap`, a .ch-pasek jest SIATKĄ od 12.09 — reguła
     nic nie robiła i trzy pola nachodziły na siebie na telefonie. */
  .ch-hero-karuzela .ch-pasek{ grid-template-columns:1fr; }
  .ch-hero-karuzela .ch-szukaj{ width:100%; }

  /* ⚠️ Pigułka nie może zakrywać prawie całego zdjęcia na telefonie —
     zgłoszenie gospodarza 12.09. Nadpis i podtytuł są ozdobą, marka
     mówi to samo napisem CHATYNKI; pola i przycisk zostają w pełnym
     rozmiarze (min. 44 px, próg celu dotyku), reszta się ściska. */
  .ch-hero-karuzela .ch-grupa{ gap:.6rem; }
  /* 27.09: drobny napis „Krynica-Zdrój · Beskid Sądecki” wraca także na telefonie (Kuba), bo pasek nie leży już na zdjęciu. */
  .ch-hero-karuzela .ch-selektor{ padding:.8rem 1rem 1rem; }
  .ch-hero-karuzela .ch-pasek{ gap:.6rem; }
  .ch-hero-karuzela .ch-skrot{ gap:.6rem .9rem; }
  .ch-hero-karuzela .ch-skrot-poz strong,
  .ch-hero-karuzela .ch-skrot-poz :is(input,select),
  .ch-hero-karuzela .ch-szukaj{ min-height:2.75rem; }
  /* Wąskie pole: miejsce na ikonę tylko z prawej, inaczej data się ucina. */
  .ch-hero-karuzela .ch-skrot-poz :is(input,select){ height:2.75rem; line-height:2.75rem; padding:0 2.1rem 0 .5rem; background-position:right .7rem center; }
}

.ch-hero-karuzela .ch-slajd[data-widoczny="1"]{ opacity:1; }

/* Kuba 30.09: iPad w pionie dostaje układ komputera (napis i pasek na zdjęciu, kadr poziomy), bo „ogromne zdjęcie i na dole
   co innego” źle zagospodarowało przestrzeń. Kadr nie na cały ekran, tylko 4:3 szerokości: poziome zdjęcie traci mniej
   z boków, a pod hero od razu widać następną sekcję. Układ ze zdjęciem na górze zostaje dla okien do 600 px (telefon). */
@media (min-width:601px) and (orientation:portrait) and (pointer:coarse){
  .ch-hero-karuzela .ch-tor{ height:75vw; }
}
/* ---- PIONOWY EKRAN: ZDJĘCIE NA GÓRZE, NAPIS I PASEK POD NIM (Kuba 27.09) ----------------
   Nałożony na zdjęcie pasek zasłaniał na telefonie jego dolną połowę („zdjęcia tak czy inaczej są przysłonięte”).
   Teraz zdjęcie ma własne pole, a napis i pasek leżą pod nim na ciemnym spodzie, w który zdjęcie miękko przechodzi.
   Pole zdjęcia wychodzi prawie kwadratowe (ok. 0,8-1,3): drugi kadr `-pion` to kwadrat.
   ⚠️ Od 30.09 warunek to samo okno do 600 px (iPad w pionie ma układ komputera, wpis wyżej). Wcześniej: dotyk w pionie albo okno do 600 px, a nie samo „portrait”: wąskie okno przeglądarki
   na komputerze też bywa wyższe niż szersze, a tam pasek ma się zwyczajnie ścieśniać (Kuba 27.09, zrzut z Chrome z paskiem kart). */
.ch-hero-karuzela{ --hero-spod:#101211; }
@media (max-width:600px){
  .ch-hero-karuzela{
    display:flex; flex-direction:column; background:var(--hero-spod); min-height:30rem;
    height:calc(100vh - var(--wys-naglowka, 5rem)); height:calc(100svh - var(--wys-naglowka, 5rem));
  }
  .ch-hero-karuzela .ch-tor{ flex:1 1 auto; height:auto; min-height:11rem; max-height:none; }
  .ch-hero-karuzela .ch-tor::after{
    content:""; position:absolute; left:0; right:0; bottom:-1px; height:40%; z-index:1; pointer-events:none;
    background:linear-gradient(180deg, transparent, var(--hero-spod));
  }
  .ch-hero-karuzela .ch-zaslona{ bottom:auto; height:30%; background:linear-gradient(180deg, rgba(6,10,9,.34), transparent); }
  .ch-hero-karuzela .ch-nakladka{ position:relative; inset:auto; flex:none; margin-top:-2.4rem; padding-top:0; }
  .ch-hero-karuzela .ch-selektor{ background:none; backdrop-filter:none; -webkit-backdrop-filter:none; padding:0; }
}
.ch-hero-karuzela .ch-krotko{ display:none; }
@media (max-width:600px){
  /* Trzy pola w jednym wierszu: daty po równo, osoby wąsko; ikonę kalendarza chowamy, bo pole i tak go otwiera. */
  .ch-hero-karuzela .ch-nakladka{ padding-left:.75rem; padding-right:.75rem; }
  .ch-hero-karuzela .ch-skrot{ grid-template-columns:1fr 1fr 5.9rem; gap:.5rem; }
  .ch-hero-karuzela .ch-skrot-poz{ gap:.3rem; }
  .ch-hero-karuzela .ch-skrot-poz em{ font-size:.9rem; }
  .ch-hero-karuzela .ch-skrot-poz input[type="date"]{ background-image:none; padding:0 .25rem; }
  .ch-hero-karuzela .ch-skrot-poz select{ padding:0 1.5rem 0 .4rem; background-position:right .55rem center; }
  .ch-hero-karuzela .ch-dlugo{ display:none; }
  .ch-hero-karuzela .ch-krotko{ display:inline; }
}
.ch-hero-karuzela .ch-nakladka .ch-lead-hero, .ch-hero-karuzela .ch-lead-hero{
  margin:0 auto; max-width:64ch; text-align:center;
  font:400 var(--t-small)/1.55 var(--font-ui); color:rgba(255,255,255,.9);
  text-shadow:0 1px 12px rgba(0,0,0,.7);
}

/* ===========================================================================
   3. NAGŁÓWEK SEKCJI I NADPIS
   ======================================================================== */
.ch-sec-head{
  display:flex; align-items:baseline; gap:var(--s2);
  padding-bottom:var(--s3); margin-bottom:var(--s4);
  border-bottom:1px solid var(--line);
}
/* Numer roboczy sekcji — pomoc do nagrań gospodarza, NIE element
   docelowego designu. Szary chip z hashtagiem, żeby dało się go
   wołać po numerze przy narracji.
   `--overlay`: pozycja absolutna w lewym górnym rogu, dla sekcji bez
   `.ch-sec-head` (hero, pasek faktów, pas CTA) — sam chip nie zajmuje
   miejsca w układzie, więc nie psuje siatek/flexów pod spodem.
   `--photo`: dopiero na zdjęciu (hero) czytelny jest ciemny wariant;
   pasek faktów i CTA to zwykłe tło strony, tam zostaje szary chip. */
.ch-sec-num{
  display:inline-block; font:600 var(--t-micro)/1 "Manrope",sans-serif;
  letter-spacing:.08em; color:var(--muted); background:var(--surface-2);
  border-radius:var(--r); padding:.25rem .5rem; margin:0;
}
.ch-sec-num--overlay{ position:absolute; top:var(--s2); left:var(--s2); z-index:2; }
.ch-sec-num--photo{ background:rgba(0,0,0,.55); color:#fff; }
/* 26.09 (plan przełączenia, Kuba: „rób”): numery robocze schowane przed przełączeniem. Z powrotem do nagrań: skasować tę linijkę. */
.ch-sec-num{ display:none; }
.ch-sec-head h2{ font-size:var(--t-h2); }
.ch-sec-head .ch-note{ margin:0 0 0 auto; color:var(--muted); font-size:var(--t-small); }
.ch-nadpis{
  display:block;
  font:600 var(--t-micro)/1 "Manrope",sans-serif; letter-spacing:.22em; text-transform:uppercase;
  color:var(--copper); margin:0 0 var(--s2);
}




/* ===========================================================================
   PAKIETY NA KONKRETNE DATY
   Karta bez zdjęcia: pakiet sprzedaje termin i cenę, nie widok.
   ======================================================================== */
/* Pakietów jest najwyżej trzy (rezerwacja-hero.js), więc ta sama zasada co przy kartach (Kuba 30.09): trzy w rzędzie, gdy się mieszczą. */
.ch-pakiety{ display:grid; grid-template-columns:repeat(auto-fit,minmax(max(200px, calc((100% - 2 * var(--s2)) / 3)),1fr)); gap:var(--s2); }
.ch-pakiet{
  display:flex; flex-direction:column; gap:.45rem;
  background:var(--surface); border:1px solid var(--line);
  border-radius:10px; padding:var(--s3);
  transition:border-color .35s var(--ease), transform .35s var(--ease);
}
.ch-pakiet:hover{ border-color:var(--line-strong); transform:translateY(-2px); }
.ch-pakiet-daty{
  margin:0; color:var(--link);   /* 26.09: było --amber, w jasnym motywie 2,4∶1 */
  font:700 var(--t-micro)/1.3 var(--font-ui); letter-spacing:.08em; text-transform:uppercase;
}
.ch-pakiet-daty span{ color:var(--muted); }
.ch-pakiet-daty span::before{ content:"· "; }
.ch-pakiet-nazwa{ margin:.15rem 0 0; font-size:var(--t-h3); }
.ch-pakiet-cena{
  margin:auto 0 0; padding-top:var(--s2); color:var(--text);
  font:700 var(--t-h2)/1 var(--font-display);
  display:flex; align-items:baseline; gap:.6rem; flex-wrap:wrap;
}
.ch-pakiet-cena span{
  font:400 var(--t-micro)/1.3 var(--font-ui); color:var(--muted);
  text-transform:uppercase; letter-spacing:.1em;
}
.ch-pakiet-rozbicie{ margin:0; color:var(--muted); font:400 var(--t-small)/1.5 var(--font-ui); }
#pakiety[hidden]{ display:none; }
/* Szkielet przed wczytaniem zajętości (27.09): te same elementy co prawdziwa karta, więc ta sama wysokość i nic się nie przesuwa. */
.ch-pakiety{ position:relative; }
.ch-pakiet--szkielet, .ch-pakiet--szkielet:hover{ transform:none; border-color:var(--line); }
.ch-pakiet--szkielet, .ch-pakiet--szkielet *{ color:transparent !important; }
.ch-pakiet--szkielet i{
  font-style:normal; border-radius:4px; -webkit-box-decoration-break:clone; box-decoration-break:clone;
  background:color-mix(in srgb, var(--muted) 22%, transparent); animation:oddech 1.8s ease-in-out infinite;
}
.ch-pakiet--szkielet .ch-rez-wybierz{ background:color-mix(in srgb, var(--muted) 16%, transparent); border-color:transparent; box-shadow:none; }
/* Wąska karta (ok. 1024 px, mały telefon): długa data zawija się na dwie linijki, więc dwie linijki są zarezerwowane
   w każdej karcie, szarej i prawdziwej; inaczej sekcja rosłaby o linijkę po wczytaniu terminów. */
.ch-pakiet{ container-type:inline-size; }
@container (max-width:340px){ .ch-pakiet-daty{ min-height:2.6em; } }
/* Kuba 27.09: napis w każdej szarej karcie w miejscu linii z datami (ten sam krój, więc ta sama wysokość), bez pigułki. */
.ch-pakiet--szkielet .ch-pakiet-szukam{ color:var(--muted) !important; }
.ch-pakiet--szkielet .ch-pakiet-szukam span::before{ content:none; }
.ch-pakiet--szkielet .ch-kropki-ladowania i{ background:var(--muted); animation:chRezFala 1.2s ease-in-out infinite; }
.ch-kropki-ladowania{ display:inline-flex; gap:.25rem; margin-left:.4rem; vertical-align:middle; }
.ch-kropki-ladowania i{ width:.35rem; height:.35rem; border-radius:50%; background:currentColor; animation:chRezFala 1.2s ease-in-out infinite; }
.ch-kropki-ladowania i:nth-child(2){ animation-delay:.15s; } .ch-kropki-ladowania i:nth-child(3){ animation-delay:.3s; }
.ch-pakiet:not(.ch-pakiet--szkielet){ animation:ch-rez-wejscie .5s var(--ease) both; }
.ch-pakiet:not(.ch-pakiet--szkielet):nth-child(2){ animation-delay:.1s; } .ch-pakiet:not(.ch-pakiet--szkielet):nth-child(3){ animation-delay:.2s; }
@media (prefers-reduced-motion:reduce){ .ch-pakiet--szkielet i, .ch-kropki-ladowania i, .ch-pakiet{ animation:none !important; } }
.ch-pakiet .ch-rez-wybierz{ align-self:flex-start; margin-top:var(--s1); min-height:2.75rem; padding:.55rem 1.3rem; }

/* ===========================================================================
   ODPOWIEDŹ PO „SPRAWDŹ" I DANE GOŚCIA — BLOKI ZASTĘPCZE
   Wygląd wg makiety gospodarza (12.09). Zielony znaczy „termin wolny";
   to ten sam język, którym mówi dzisiejszy formularz (zielone wolne,
   czerwone zajęte), więc nie używamy zieleni do niczego innego.
   ======================================================================== */
.ch-odpowiedz,.ch-dane{
  position:relative;
  background:var(--surface); border:1px solid var(--line); border-radius:10px;
  padding:var(--s3); margin-top:var(--s3);
}
.ch-odpowiedz[hidden],.ch-dane[hidden]{ display:none; }
/* ✕ zwija krok z powrotem, bez utraty tego, co gość już wpisał — patrz JS. */
.ch-zamknij{
  position:absolute; top:var(--s3); right:var(--s3); z-index:1;
  display:inline-flex; align-items:center; justify-content:center;
  width:2rem; height:2rem; flex:none; border-radius:50%;
  border:1px solid var(--line-strong); background:transparent; color:var(--muted);
  cursor:pointer; font:400 1.1rem/1 var(--font-ui);
  transition:border-color .3s var(--ease), color .3s var(--ease);
}
.ch-zamknij:hover{ border-color:var(--copper); color:var(--copper); }
.ch-zamknij:focus-visible{ outline:2px solid var(--copper); outline-offset:2px; }
.ch-odpowiedz-glowa{ display:flex; align-items:center; gap:.75rem; margin-bottom:var(--s3); padding-right:2.6rem; }
.ch-dane-tytul{ padding-right:2.6rem; }
.ch-znak-ok{
  flex:none; width:2.1rem; height:2.1rem; border-radius:50%;
  border:2px solid var(--zielony); position:relative;
}
.ch-znak-ok::after{
  content:""; position:absolute; left:34%; top:20%;
  width:.45rem; height:.85rem;
  border:solid var(--zielony); border-width:0 2px 2px 0; transform:rotate(45deg);
}
.ch-odpowiedz-termin{
  margin:0; color:var(--zielony);
  font:700 var(--t-h3)/1.2 var(--font-display); letter-spacing:.01em;
}
.ch-odpowiedz-tresc{
  display:grid; grid-template-columns:minmax(0,1.7fr) minmax(14rem,1fr);
  gap:var(--s3) var(--s4); align-items:start;
}
.ch-szczegoly{ margin:0; }
.ch-szczegoly > div{
  display:flex; justify-content:space-between; gap:var(--s2);
  padding:.7rem .2rem; border-bottom:1px solid var(--line);
}
.ch-szczegoly dt{ color:var(--muted); font:400 var(--t-small)/1.4 var(--font-ui); }
.ch-szczegoly dd{ margin:0; color:var(--text); font:700 var(--t-small)/1.4 var(--font-ui); }
.ch-szczegoly .ch-akcent{ color:var(--zielony); }
.ch-udogodnienia{ list-style:none; margin:var(--s3) 0 0; padding:0; display:grid; gap:.45rem; }
.ch-udogodnienia li{
  position:relative; padding-left:1.4rem;
  color:var(--text); font:400 var(--t-small)/1.5 var(--font-ui);
}
.ch-udogodnienia li::before{
  content:""; position:absolute; left:.15rem; top:.42em;
  width:.3rem; height:.6rem; border:solid var(--zielony);
  border-width:0 2px 2px 0; transform:rotate(45deg);
}
.ch-udogodnienia-dalej{ color:var(--muted); }
.ch-udogodnienia-dalej::before{ display:none; }
.ch-odpowiedz-cena{ text-align:right; }
.ch-cena-duza{
  margin:0; color:var(--text);
  font:700 var(--t-liczba)/1 var(--font-display);
}
.ch-cena-opis{
  margin:.3rem 0 0; color:var(--muted);
  font:400 var(--t-micro)/1.3 var(--font-ui); text-transform:uppercase; letter-spacing:.12em;
}
.ch-cena-razem{ margin:.5rem 0 var(--s3); color:var(--text); font:400 var(--t-small)/1.4 var(--font-ui); }
.ch-cena-razem b{ font-weight:700; }
.ch-rezerwuje{
  display:inline-flex; align-items:center; justify-content:center;
  border:0; border-radius:6px; cursor:pointer;
  background:var(--zielony); color:var(--on-zielony);
  font:800 var(--t-body)/1 var(--font-display); letter-spacing:.01em; text-transform:uppercase;
  min-height:3.2rem; padding:.6rem 2.2rem;
  transition:background-color .3s var(--ease);
}
.ch-rezerwuje:hover{ background:var(--zielony-hi); }
.ch-rezerwuje:focus-visible{ outline:2px solid var(--text); outline-offset:3px; }

/* ---- ETAP 3: DANE GOŚCIA ---- */
.ch-dane-tytul{ margin:0 0 var(--s3); font-size:var(--t-h3); }
.ch-dane-wiersze{ display:grid; gap:.6rem; }
.ch-wiersz{ display:grid; grid-template-columns:minmax(7rem,10rem) minmax(0,1fr); gap:var(--s2); align-items:center; }
.ch-etykieta-w{ color:var(--text); font:700 var(--t-small)/1.3 var(--font-ui); }
.ch-pole-w{
  display:flex; align-items:center; min-height:3rem; padding:.6rem .9rem;
  background:var(--bg); color:var(--muted);
  border:1px solid var(--line-strong); border-radius:8px;
  font:400 var(--t-small)/1.3 var(--font-ui);
}
.ch-pole-w--wybor{ color:var(--text); }
.ch-pole-w--pusty{ border-style:dashed; justify-content:center; }
.ch-zgoda{
  display:flex; align-items:flex-start; gap:.6rem; margin:var(--s3) 0 0;
  color:var(--muted); font:400 var(--t-small)/1.5 var(--font-ui);
}
.ch-kwadrat{ flex:none; width:1rem; height:1rem; margin-top:.15rem; border:1px solid var(--line-strong); border-radius:3px; }
.ch-odpowiedz .ch-makieta,.ch-dane .ch-makieta{ display:block; margin:var(--s2) 0 0; color:var(--muted); }

@media (max-width:640px){
  .ch-odpowiedz-tresc{ grid-template-columns:1fr; }
  .ch-odpowiedz-cena{ text-align:left; }
  .ch-rezerwuje{ width:100%; }
  .ch-wiersz{ grid-template-columns:1fr; gap:.3rem; }
}

/* ===========================================================================
   4. PRZYCISKI
   ======================================================================== */
.ch-btn,
.wp-block-button__link{
  display:inline-flex; align-items:center; justify-content:center;
  font:700 var(--t-small)/1 "Manrope",sans-serif; letter-spacing:.01em;
  padding:1.05rem 1.9rem;
  border-radius:var(--r); border:1px solid transparent;
  cursor:pointer; text-decoration:none;
  background:var(--copper); color:var(--on-copper);
  transition:background-color .35s var(--ease), border-color .35s var(--ease), color .35s var(--ease);
}
.ch-btn-primary,.wp-block-button__link{ background:var(--copper); color:var(--on-copper); }
.ch-btn-primary:hover,.wp-block-button__link:hover{ background:var(--copper-hi); color:var(--on-copper); }
.ch-btn-primary:focus-visible,.wp-block-button__link:focus-visible{ outline:2px solid var(--amber); outline-offset:3px; }
.ch-btn-ghost,
.wp-block-button.ch-btn-ghost .wp-block-button__link,
.ch-btn-ghost .wp-block-button__link{ background:transparent; color:var(--text); border-color:var(--line-strong); border-width:1px; border-style:solid; }
.ch-btn-ghost:hover,
.wp-block-button.ch-btn-ghost .wp-block-button__link:hover,
.ch-btn-ghost .wp-block-button__link:hover{ background:transparent; border-color:var(--copper); color:var(--amber); }
.ch-btn-ghost:focus-visible{ outline:2px solid var(--copper); outline-offset:3px; }
/* Klasa ch-btn-ghost siedzi też na opakowaniu .wp-block-buttons — ramka tylko na samym przycisku. */
.wp-block-buttons.ch-btn-ghost{ border:0; padding:0; }



.ch-brandbar .wp-block-buttons{ flex:0 0 auto; margin:0; }
.wp-block-buttons{ gap:var(--s2); }

/* ===========================================================================
   5. POLA FORMULARZA
   ======================================================================== */
.ch-field{ display:flex; flex-direction:column; gap:.45rem; min-width:0; }
.ch-field label{
  font:600 var(--t-micro)/1 var(--font-ui); letter-spacing:var(--tracking-wide); text-transform:uppercase;
  color:var(--muted);
}
.ch-field input,
.ch-field textarea{
  font:500 var(--t-body)/1.2 "Manrope",sans-serif;
  color:var(--text); background:var(--surface);
  border:1px solid var(--line-strong); border-radius:var(--r);
  padding:.95rem 1rem; width:100%;
  transition:border-color .3s var(--ease), box-shadow .3s var(--ease);
  color-scheme:dark;
}
:root[data-theme="light"] .ch-field :is(input,textarea){ color-scheme:light; }
.ch-field textarea{ resize:vertical; min-height:8rem; line-height:1.5; }
/* Podpowiedź w polu: wyraźnie słabsza od wpisanego tekstu, żeby nikt jej nie wziął za wypełnione pole. */
.ch-field :is(input,textarea)::placeholder{ color:var(--muted); opacity:.55; }
.ch-field :is(input,textarea):focus{
  outline:none; border-color:var(--copper);
  box-shadow:0 0 0 3px color-mix(in srgb,var(--copper) 26%, transparent);
}


/* ===========================================================================
   6. KARTY
   ======================================================================== */
.ch-cards{ display:grid; grid-template-columns:repeat(auto-fit,minmax(300px,1fr)); gap:var(--s3); }
/* Kuba 30.09 (iPad w pionie): trzecia karta sama w rzędzie „wygląda kulawo”. Trzy krótkie karty (główna) idą po trzy, gdy
   jedna trzecia szerokości ma co najmniej 200 px, jak na komputerze. Nie globalnie: w FAQ długie odpowiedzi w 200 px to
   trzy słowa w linijce, tam zostają dwie szersze kolumny. */
.ch-cards--trzy{ grid-template-columns:repeat(auto-fit,minmax(max(200px, calc((100% - 2 * var(--s3)) / 3)),1fr)); }
/* Cztery kafle w siatce auto-fit dawałyby 3 + sierotę. Dwie kolumny, 2×2. */
.ch-cards--para,.ch-cards--pary{ grid-template-columns:repeat(2,1fr); }
/* #03 na głównej, siatka trzech kolumn: 3 karty | szeroka (zdjęcie 2/3 z lewej)
   | szeroka (zdjęcie 2/3 z prawej) | film na cały rząd. Podział szerokiej karty
   liczony z odstępu, żeby krawędź zdjęcia trafiała w linię kolumn rzędu wyżej. */
.ch-domki{ grid-template-columns:repeat(3,1fr); }
.ch-card.ch-card--szeroka{ grid-column:1 / -1; display:grid; grid-template-columns:calc((100% - 2 * var(--s3)) / 3 * 2 + var(--s3)) 1fr; }
.ch-card.ch-card--prawa{ grid-template-columns:1fr calc((100% - 2 * var(--s3)) / 3 * 2 + var(--s3)); }
.ch-card--prawa .ch-figura{ order:2; }
/* Tekst na dwie kolumny, cały rząd siatki (#03 między szerokimi kartami).
   Nagłówek nad obiema kolumnami, akapity płyną z lewej do prawej. */
.ch-tekst-2kol{ grid-column:1 / -1; columns:2; column-gap:var(--s4); padding:var(--s3) 0; }
.ch-tekst-2kol h3{ column-span:all; font-size:var(--t-h3); margin:0 0 var(--s2); }
.ch-tekst-2kol p{ color:var(--muted); margin:0 0 var(--s2); }
/* Miejsce na film: kadr + ikona play na środku (sam obrazek, filmu jeszcze nie ma). */
.ch-film{
  grid-column:1 / -1; position:relative; display:grid; place-items:center;
  border-radius:var(--r); overflow:hidden; border:1px solid var(--line); box-shadow:var(--shadow);
}
.ch-film img{ display:block; width:100%; aspect-ratio:16/9; object-fit:cover; }
/* 24.09: film z YouTube za kliknięciem — do kliknięcia sam kadr, żadnych skryptów YouTube'a */
.ch-film-start{ display:block; width:100%; padding:0; border:0; background:#000; cursor:pointer; position:relative; line-height:0; }
.ch-film-start .ch-play{ left:50%; top:50%; transform:translate(-50%,-50%); }
.ch-film-start:hover .ch-play,.ch-film-start:focus-visible .ch-play{ background:rgb(0 0 0 / .7); }
.ch-film-start:focus-visible{ outline:3px solid var(--copper); outline-offset:-3px; }
.ch-film iframe{ display:block; width:100%; aspect-ratio:16/9; border:0; }
.ch-play{
  position:absolute; width:clamp(56px,9%,96px); aspect-ratio:1; border-radius:50%;
  display:grid; place-items:center; color:#fff;
  background:rgb(0 0 0 / .45); border:1.5px solid rgb(255 255 255 / .85);
  backdrop-filter:blur(4px); -webkit-backdrop-filter:blur(4px);
}
.ch-play svg{ width:42%; margin-left:6%; }
/* #03: kursor nad MAŁĄ kartą (1/3) — zdjęcie powoli i lekko się przybliża.
   Gospodarz 17.09: tylko małe karty, nie szerokie 2/3 ani film; docelowo tam,
   gdzie karta dokądś linkuje. Tylko urządzenia z kursorem, bez przy ograniczeniu ruchu. */
.ch-domki .ch-card:not(.ch-card--szeroka) img{ transition:transform 2.4s var(--ease); }
@media (hover:hover) and (prefers-reduced-motion:no-preference){
  .ch-domki .ch-card:not(.ch-card--szeroka):hover img{ transform:scale(1.03); }
}
.ch-card{
  background:var(--surface); border:1px solid var(--line);
  border-radius:var(--r); overflow:hidden;
  box-shadow:var(--shadow);
  transition:border-color .5s var(--ease), transform .5s var(--ease);
  display:flex; flex-direction:column;
}
.ch-card:hover{ border-color:color-mix(in srgb,var(--copper) 55%, var(--line)); transform:translateY(-2px); }
.ch-card figure,.ch-card .ch-figura{ margin:0; position:relative; line-height:0; }
.ch-card .ch-figura .wp-block-image{ margin:0; }
/* Proporcje zamiast sztywnej wysokości — kadr trzyma się jednej
   wartości na każdej szerokości ekranu, karta na komputerze i na
   telefonie. 13.09: 4∶3. 14.09, nowy standard po sesji zdjęciowej:
   **3∶2** — gospodarzowi zostawia więcej miejsca na tekst pod kartą i
   tak przygotowuje zdjęcia od teraz sam (pełna kontrola nad kadrem
   przed wysłaniem, nie przycinamy mu tego w CSS).
   ⚠️ Wyjątek na przyszłość, NIEWDROŻONY: trzy kolumny atrakcji na
   stronie Okolica (`.ch-grupa-kart`) mają zostać przy 4∶3 — gospodarz
   14.09: „tam ten format cztery trzy będzie odpowiedniejszy". Kiedy
   ta strona wejdzie do budowy: `.ch-grupa-kart .ch-card img{
   aspect-ratio:4/3; }` jako nadpisanie tego nowego domyślnego 3∶2. */
.ch-card img{ display:block; width:100%; aspect-ratio:3/2; height:auto; object-fit:cover; filter:saturate(.95); }
.ch-card .ch-badge,.ch-uklad-media .ch-badge,.ch-badge{
  font:700 var(--t-small)/1 var(--font-ui);  /* 22.09: większe plakietki (gospodarz) */ letter-spacing:var(--tracking-wide); text-transform:uppercase;
  background:rgba(6,10,9,.78); color:var(--amber);
  padding:.6rem .85rem; border-radius:3px; backdrop-filter:blur(6px);
}
.ch-card .ch-badge,.ch-uklad-media .ch-badge{
  position:absolute; left:var(--s2); top:var(--s2); margin:0; z-index:2;
}
.ch-card .ch-body{ padding:var(--s3); display:flex; flex-direction:column; flex:1; line-height:1.65; }
/* 22.09, gospodarz: „po tytule zaraz tekst, bez oddechu” — odstęp pod tytułem karty globalnie. */
.ch-card h3{ font-size:var(--t-h3); margin-bottom:var(--s2); }
.ch-card p{ margin:0 0 var(--s2); color:var(--muted); font-size:var(--t-body); }  /* 22.09: tekst w kartach w rozmiarze bazowym (15,5–17 px), jak akapity; gospodarz: „proporcjonalnie” */
.ch-card p:last-child{ margin-bottom:0; }
.ch-card p b,.ch-card p strong{ color:var(--text); font-weight:600; }
.ch-card .ch-price{
  display:flex; align-items:baseline; gap:.5rem; flex-wrap:wrap;
  margin-top:auto;
  padding-top:var(--s2); border-top:1px solid var(--line);
}
.ch-card .ch-price b,.ch-card .ch-price strong{
  font-family:"Manrope",sans-serif; font-size:var(--t-h2); font-weight:500;
  color:var(--amber);
}
.ch-card .ch-price span{ font-size:var(--t-small); color:var(--muted); }
.ch-card .ch-price a,.ch-card .ch-price a.ch-inline{ font-size:var(--t-small); }

/* ===========================================================================
   7. LICZBY — fakty stoją w tekście HTML
   ======================================================================== */
.ch-liczby{
  position:relative;
  display:grid; grid-template-columns:repeat(auto-fit,minmax(150px,1fr));
  gap:var(--s3) var(--s2);
  border-top:1px solid var(--line); border-bottom:1px solid var(--line);
  padding:var(--s4) 0;
}
.ch-liczba{ display:flex; flex-direction:column; gap:.35rem; position:relative; padding-left:var(--s2); }
.ch-liczba::before{
  content:""; position:absolute; left:0; top:.35rem; bottom:.35rem; width:2px;
  background:var(--copper);
}
.ch-wart{ font-variant-numeric:tabular-nums; }   /* odliczanie od zera (26.09): cyfry równej szerokości, nic nie skacze */
.ch-liczba b,.ch-liczba strong,.ch-liczba .ch-wart{
  font-family:"Manrope",sans-serif; font-weight:700;
  font-size:var(--t-liczba); line-height:1;
  color:var(--text); letter-spacing:-.02em;
  margin:0; display:block;
}
.ch-liczba .ch-jedn{ font-size:.42em; color:var(--amber); margin-left:.25em; letter-spacing:0; }
.ch-liczba .ch-opis{
  font:600 var(--t-micro)/1.5 var(--font-ui); letter-spacing:var(--tracking-wide); text-transform:uppercase;
  color:var(--muted); margin:0;
}
.ch-liczba .ch-opis strong{ display:inline; font:inherit; font-weight:800; letter-spacing:inherit; color:var(--text);  /* wyróżnione słowo w podpisie, nie duża liczba */
  text-decoration:underline; text-decoration-color:var(--amber); text-decoration-thickness:2px; text-underline-offset:3px; }

.ch-zasady{
  list-style:none; margin:var(--s4) 0 0; padding:0;
  display:grid; grid-template-columns:repeat(2,1fr); gap:var(--s2) var(--s3);
  max-width:56rem;
}
.ch-zasady li{
  position:relative; padding-left:var(--s2);
  color:var(--muted); font-size:var(--t-small);
}
.ch-zasady li::before{
  content:""; position:absolute; left:0; top:.6rem; width:2px; height:1.1em;
  background:var(--copper);
}
.ch-zasady li b,.ch-zasady li strong{ color:var(--text); font-weight:600; }

/* ===========================================================================
   9. ODNOŚNIKI W TREŚCI
   ======================================================================== */
/* Linki w zdaniach, wariant B (gospodarz 23.09): obwódka z lekkim tłem, po najechaniu
   lub dotknięciu pełne wypełnienie. Linki bez klasy w akapitach, listach, tabelach
   i podpisach (FAQ, Domki, Cennik) oraz .ch-inline (stopka, Regulamin, 404).
   Wyłączone linki-nawigacja: menu w stopce, duże linki Kontaktu, zakładki Atrakcji i 404
   (.ch-kotwice), spis treści Regulaminu, spis pod liczbami w Galerii, link w cenie na głównej. */
:is(:is(p,li,td,dd,figcaption) a:not([class]),a.ch-inline):not(.ch-stopka a:not(.ch-inline),.ch-duze a,.ch-kotwice a,.ch-spis-tresci a,.ch-opis a,.ch-price a){
  color:var(--link); font-weight:600; text-decoration:none;
  background:color-mix(in srgb,var(--link) 11%,transparent);
  border:1px solid color-mix(in srgb,var(--link) 32%,transparent); border-radius:4px;
  padding:.02em .36em;
  -webkit-box-decoration-break:clone; box-decoration-break:clone;
  transition:color .25s var(--ease), background-color .25s var(--ease), border-color .25s var(--ease);
}
:is(:is(p,li,td,dd,figcaption) a:not([class]),a.ch-inline):not(.ch-stopka a:not(.ch-inline),.ch-duze a,.ch-kotwice a,.ch-spis-tresci a,.ch-opis a,.ch-price a):is(:hover,:focus-visible){ background:var(--link); border-color:var(--link); color:var(--bg); }
:is(:is(p,li,td,dd,figcaption) a:not([class]),a.ch-inline):not(.ch-stopka a:not(.ch-inline),.ch-duze a,.ch-kotwice a,.ch-spis-tresci a,.ch-opis a,.ch-price a):focus-visible{ outline:2px solid var(--link); outline-offset:2px; }
a[href^="tel:"]{ white-space:nowrap; }  /* numer telefonu nie łamie się w środku (Regulamin) */
/* Galeria: podpisy pod liczbami to spis kategorii (wersaliki), zwykłe podkreślenie. */
.ch-opis a.ch-inline{ text-decoration-thickness:1px; text-underline-offset:3px; }

/* ===========================================================================
   10. OZDOBNIKI
   ======================================================================== */
.ch-emb{
  border:1px solid var(--line); border-radius:var(--r);
  background:var(--surface); padding:var(--s3);
  position:relative; overflow:hidden;
}
.ch-emb--edge{ border-left:3px solid var(--copper); }




@keyframes oddech{ 0%,100%{ opacity:.55 } 50%{ opacity:1 } }






@keyframes para{
  0%{ transform:translateY(20px) scaleY(.5); opacity:0 }
  25%{ opacity:.75 }
  100%{ transform:translateY(-120px) scaleY(1.2); opacity:0 }
}
.ch-emb--corner::after{
  content:""; position:absolute; top:0; right:0;
  width:64px; height:64px;
  background:linear-gradient(225deg, var(--copper) 0 2px, transparent 2px);
  opacity:.85;
}

.ch-hairline--znak{
  position:relative; border:0; height:1px; background:var(--line); margin:var(--s4) 0;
}
.ch-hairline--znak::after{
  content:""; position:absolute; left:0; top:0; width:40px; height:3px; background:var(--copper);
}
.wp-block-separator.ch-hairline--znak{ opacity:1; }

/* ===========================================================================
   11. WEJŚCIE W KADR — bez JS treść widoczna od razu
   ======================================================================== */
.js-reveal .ch-reveal{
  opacity:0; transform:translateY(14px);
  transition:opacity .6s var(--ease), transform .6s var(--ease);
}
.js-reveal .ch-reveal.is-in{ opacity:1; transform:none; }
.js-reveal .ch-reveal:nth-child(2){ transition-delay:.08s; }
.js-reveal .ch-reveal:nth-child(3){ transition-delay:.16s; }
.js-reveal .ch-reveal:nth-child(4){ transition-delay:.24s; }

@media (prefers-reduced-motion:reduce){
  .js-reveal .ch-reveal{ opacity:1; transform:none; transition:none; }
  .ch-cta-pas::after{ animation:none; }
  *,*::before,*::after{ transition-duration:.01ms !important; animation-duration:.01ms !important; }
}

/* Edytor: treść z animacją wejścia ma pozostać widoczna */
.editor-styles-wrapper .ch-reveal,
.editor-styles-wrapper .js-reveal .ch-reveal{
  opacity:1 !important; transform:none !important;
  animation:none !important; transition:none !important;
}

/* ===========================================================================
   12. UKŁADY PODSTRON: listy, panele, kolumny
   ======================================================================== */
.ch-uklad{ display:grid; grid-template-columns:1fr 1fr; gap:var(--s4); align-items:center; }
.ch-uklad + .ch-uklad{ margin-top:var(--s5); }
.ch-uklad-media{ position:relative; }
.ch-uklad-media .wp-block-image{ margin:0; }
/* 13.09: proporcje 3∶2 zamiast wysokości 100% dopasowanej do sąsiada.
   Wcześniej zdjęcie rozciągało się do wysokości tekstu obok — inny kadr
   przy krótszym akapicie, inny przy dłuższym, przypadkowo. Teraz kadr
   jest zamierzony i taki sam na komputerze i na telefonie. */
.ch-uklad-media img{
  display:block; width:100%; aspect-ratio:3/2; height:auto; object-fit:cover;
  border:1px solid var(--line); border-radius:var(--r);
  box-shadow:var(--shadow); filter:saturate(.95);
}
.ch-uklad h3{ font-size:var(--t-h3); margin-bottom:var(--s2); }
.ch-uklad p{ color:var(--muted); margin:0 0 var(--s2); max-width:48ch; }
.ch-uklad p:last-child{ margin-bottom:0; }
.ch-uklad b,.ch-uklad strong{ color:var(--text); }
.ch-uklad--odwrocony .ch-uklad-media{ order:2; }
/* 25.09, Instrukcje: panel jacuzzi z opisanymi przyciskami i piec w saunie w całości, we własnych
   proporcjach 4∶5 (kadr 3∶2 uciąłby opisy przycisków). Na szerokim ekranie zdjęcie po prawej, najwyżej
   26rem, tekst płynie obok; poniżej 900px (reguła niżej) zdjęcie nad tekstem. */
.ch-uklad--instrukcja{ grid-template-columns:minmax(0,1fr) minmax(0,26rem); align-items:start; }
.ch-uklad--instrukcja .ch-uklad-media{ order:2; }
.ch-uklad--instrukcja .ch-uklad-media img{ aspect-ratio:auto; }
.ch-uklad--instrukcja .ch-lista{ max-width:62ch; }
.ch-uklad--instrukcja .ch-lista + p{ margin-top:var(--s3); color:var(--text); }
/* 25.09, Welcome: panel „W razie potrzeby” zamyka stronę, z odstępem jak paragraf Regulaminu. */
.ch-wrap.is-layout-flow > .ch-panel--koniec{ margin-block-start:var(--s5); }
/* 22.09, Domki sekcja 01 (gospodarz): para zdjęcie+tekst jako panel z tłem jak karty,
   zdjęcie wypełnia połowę panelu i delikatnie przybliża się po najechaniu na cały panel,
   nad tekstem ikonka cienką linią. */
.ch-uklad--panel{
  /* minmax(0,1fr): kolumna zdjęcia nie może rosnąć od proporcji 3∶2 przy rozciągniętej
     wysokości (na iPadzie 1024 zdjęcie rozpychało się na 3/4 szerokości i rosło bez końca). */
  grid-template-columns:minmax(0,1fr) minmax(0,1fr);
  gap:0; align-items:stretch; background:var(--surface); border:1px solid var(--line);
  border-radius:var(--r); overflow:hidden; box-shadow:var(--shadow);
  transition:border-color .5s var(--ease), transform .5s var(--ease);
}
.ch-uklad--panel:hover{ border-color:color-mix(in srgb,var(--copper) 55%, var(--line)); transform:translateY(-2px); }
/* justify-self:stretch jawnie: dla elementu z aspect-ratio „normal” działa jak „start”,
   więc szerokość liczyła się z wysokości (wys.×1,5) i zdjęcie wyłaziło poza kolumnę. */
.ch-uklad--panel .ch-uklad-media{ aspect-ratio:3/2; min-width:0; justify-self:stretch; align-self:stretch; }
.ch-uklad--panel .ch-uklad-media img{
  position:absolute; inset:0; height:100%; aspect-ratio:auto;
  border:0; border-radius:0; box-shadow:none;
  transition:transform 1.4s var(--ease), filter .5s var(--ease);
}
/* efekt Kena Burnsa: powolne przybliżenie z lekkim przesunięciem */
.ch-uklad--panel:hover .ch-uklad-media img{ transform:scale(1.06) translate(-1.2%,-.8%); filter:saturate(1.02) contrast(1.04); }
.ch-uklad--panel > div:not(.ch-uklad-media){ padding:clamp(var(--s3), 4vw, var(--s4)); align-self:center; }
/* 22.09 (gospodarz, wariant B): ikonka panelu wnętrza siedzi w plakietce na zdjęciu, tekst jest czysty. */
.ch-badge svg{ width:17px; height:17px; fill:none; stroke:currentColor; stroke-width:1.75; stroke-linecap:round; stroke-linejoin:round; vertical-align:-2px; margin-right:.4rem; }
/* Ikonka w jednej linii z tytułem karty (gospodarz 22.09, „Trzy powody” na Domkach). */
/* Selektor z .ch-card .ch-body, bo rdzeń WordPressa zeruje margines dolny dzieci flow
   (`:root :where(.is-layout-flow) > *{margin-block:1.75rem 0}`) i wygrywał z samą klasą. */
.ch-tytul-z-ikona,.ch-card .ch-body > .ch-tytul-z-ikona{ display:flex; align-items:center; gap:.7rem; margin:0 0 var(--s2); }
.ch-tytul-z-ikona .ch-faq-ikona{ margin:0; flex:0 0 30px; }
.ch-tytul-z-ikona h3{ margin:0; }
/* Etykieta (odległość, miejsce, pora roku) POD tytułem z ikonką, nie nad nim (gospodarz 22.09: bez dublowania kategorii). */
.ch-card .ch-body > .ch-tytul-z-ikona + .ch-etykieta{ margin:calc(.3rem - var(--s2)) 0 .8rem; padding-left:calc(30px + .7rem); }  /* wcięta pod tekst tytułu, nie pod ikonę (gospodarz 22.09) */
.ch-ikona-karty .ch-card{ position:relative; overflow:hidden; }

.ch-lista{ list-style:none; margin:0; padding:0; display:grid; gap:.55rem; }
.ch-lista--dwie{ grid-template-columns:repeat(auto-fit,minmax(max(260px,calc((100% - 2 * var(--s3)) / 3)),1fr)); gap:.55rem var(--s3); }  /* najwyżej 3 kolumny (Cennik, „W cenie pobytu”: 6 punktów = 3×2) */
.ch-lista li{ position:relative; padding-left:1.15rem; font-size:var(--t-body); line-height:1.6; color:var(--muted); }
.ch-lista li::before{
  content:""; position:absolute; left:0; top:.68em; width:8px; height:2px; background:var(--copper);
}
.ch-lista li b,.ch-lista li strong{ color:var(--text); font-weight:600; }

.ch-panel{
  background:var(--surface); border:1px solid var(--line); border-left:3px solid var(--copper);
  border-radius:var(--r); padding:var(--s3); box-shadow:var(--shadow);
}
.ch-panel h3{ font-size:var(--t-h3); margin-bottom:.6rem; }
.ch-panel p{ color:var(--muted); margin:0 0 var(--s2); }
.ch-panel p:last-child{ margin-bottom:0; }
.ch-panel b,.ch-panel strong{ color:var(--text); }
.ch-panel--cichy{ border-left-color:var(--line); }

.ch-kolumny{ display:grid; grid-template-columns:repeat(auto-fit,minmax(280px,1fr)); gap:var(--s4) var(--s3); }
.ch-kolumny > div > h3{
  font:600 var(--t-micro)/1.5 var(--font-ui); letter-spacing:var(--tracking-wide); text-transform:uppercase;
  color:var(--copper); margin:0 0 var(--s2); padding-bottom:.6rem; border-bottom:1px solid var(--line);
}
.ch-kolumny > .ch-panel > h3{
  font-family:"Manrope",sans-serif; font-size:var(--t-h3); font-weight:400;
  letter-spacing:-.015em; text-transform:none; color:var(--text);
  border-bottom:0; padding-bottom:0; margin-bottom:.6rem;
}

.ch-kotwice{ display:flex; flex-wrap:wrap; gap:var(--s2); margin-top:var(--s4); padding-top:var(--s3); border-top:1px solid var(--line); }
.ch-kotwice a{
  text-decoration:none; color:var(--text);
  font:600 var(--t-micro)/1 "Manrope",sans-serif; letter-spacing:var(--tracking-wide); text-transform:uppercase;
  border:1px solid var(--line-strong); border-radius:var(--r); padding:.85rem 1.15rem;
  transition:border-color .35s var(--ease), color .35s var(--ease), background-color .35s var(--ease);
}
.ch-kotwice a:hover{ border-color:var(--copper); color:var(--amber); background:color-mix(in srgb,var(--copper) 8%, transparent); }
.ch-kotwice a:focus-visible{ outline:2px solid var(--copper); outline-offset:3px; }

.ch-wstep{ margin-top:var(--s4); }
.ch-wstep p{ margin:0 0 var(--s2); }  /* 23.09: wstępy zwykłym kolorem na wszystkich stronach */
.ch-wstep p:last-child{ margin-bottom:0; }

.ch-spis{ display:grid; grid-template-columns:repeat(auto-fit,minmax(300px,1fr)); gap:0 var(--s5); list-style:none; margin:var(--s4) 0 0; padding:0; }
.ch-spis > li,.ch-spis > .ch-poz{ padding:var(--s3) 0; border-top:1px solid var(--line); }
.ch-spis .ch-odl{ display:block; font:600 var(--t-micro)/1 var(--font-ui); letter-spacing:var(--tracking-wide); text-transform:uppercase; color:var(--amber); margin:0 0 .6rem; }
.ch-spis h3{ font-size:var(--t-h3); }
.ch-spis p{ margin:.5rem 0 0; color:var(--muted); font-size:var(--t-small); }
.ch-grupa-kart{ margin-bottom:var(--s3); }

.ch-pas{ margin:0 0 var(--s4); border-radius:var(--r); overflow:hidden; position:relative; }
.ch-pas--po{ margin:var(--s4) 0 0; }
.ch-pas .wp-block-image{ margin:0; line-height:0; }
.ch-pas img{ display:block; width:100%; height:clamp(200px,30vh,320px); object-fit:cover; filter:saturate(.94) contrast(1.04); }
.ch-pas figcaption,.ch-pas .ch-podpis{
  position:absolute; left:0; right:0; bottom:0; margin:0;
  padding:var(--s3); background:rgba(6,10,9,.82); color:#DED6CA; font-size:var(--t-small); line-height:1.6;
}
.ch-pas figcaption b,.ch-pas .ch-podpis b,.ch-pas .ch-podpis strong{ color:#F0E9DE; font-weight:600; }

/* ===========================================================================
   13. TABELE CENNIKA
   Blok core/table renderuje <figure class="wp-block-table"><table> plus
   <figcaption>, i NIE utrzymuje własnych klas na komórkach ani atrybutu
   data-sezon (walidator rdzenia je kasuje). Dlatego to, co w makiecie
   robiły klasy .cena i .uwaga oraz data-sezon, tutaj robią selektory
   strukturalne i treść generowana. Wygląd zostaje ten sam.
   ======================================================================== */

.ch-cennik{ margin:0; display:flex; flex-direction:column; overflow-x:auto; }
.ch-cennik table{ width:100%; border-collapse:collapse; font-size:var(--t-small); min-width:32rem; }
.ch-cennik figcaption,.ch-cennik .wp-element-caption{
  order:-1; position:sticky; left:0;
  text-align:left; color:var(--muted); font-size:var(--t-small);
  margin:0; padding-bottom:var(--s2);
}
.ch-cennik th,.ch-cennik td{
  text-align:left; padding:.95rem var(--s2) .95rem 0;
  border:0; border-bottom:1px solid var(--line);
  vertical-align:baseline;
}
.ch-cennik thead th{
  font:600 var(--t-micro)/1.5 var(--font-ui); letter-spacing:.12em; text-transform:uppercase;
  color:var(--muted);
  border-bottom:1px solid var(--line-strong);
}
.ch-cennik tbody th{ font-weight:600; color:var(--text); }
.ch-cennik--glowny tbody td,.ch-cennik--dodatki tbody td:nth-of-type(1){
  font-family:"Manrope",sans-serif; font-size:var(--t-h3); font-weight:500; color:var(--amber);
  white-space:nowrap;
}
.ch-cennik--dodatki tbody td:nth-of-type(2){
  color:var(--muted); font-size:var(--t-small); white-space:normal;
  font-family:"Manrope",-apple-system,"Segoe UI",sans-serif; font-weight:400;
}
.ch-cennik--dodatki tbody td:nth-of-type(2) strong{ color:var(--text); }
/* Cennik, „Opcjonalne dodatki” (gospodarz 23.09): tabela na 2/3, zdjęcie strefy SPA z podpisem na 1/3,
   w tej samej siatce co karty w trzech kolumnach; poniżej 900 px jedno pod drugim, tabela pierwsza. */
.ch-dodatki-uklad{ display:grid; gap:var(--s3); align-items:start; }
.ch-dodatki-uklad > *{ min-width:0; }
@media (min-width:900px){
  /* Obie części kończą się na tej samej wysokości (zasada gospodarza 23.09): wiersze tabeli
     rozciągają się do wysokości karty, a gdy to tabela jest wyższa, zdjęcie w karcie rośnie. */
  .ch-dodatki-uklad{ grid-template-columns:calc((100% - 2 * var(--s3)) / 3 * 2 + var(--s3)) 1fr; align-items:stretch; }
  .ch-dodatki-uklad > .ch-cennik table{ height:100%; }
  .ch-dodatki-uklad > .ch-card .ch-figura{ flex:1 1 auto; aspect-ratio:3/2; }
  .ch-dodatki-uklad > .ch-card .ch-figura figure{ position:absolute; inset:0; }
  .ch-dodatki-uklad > .ch-card .ch-figura img{ height:100%; aspect-ratio:auto; }
  .ch-dodatki-uklad > .ch-card .ch-body{ flex:none; }
}
.ch-cennik tbody tr:hover{ background:color-mix(in srgb,var(--copper) 7%, transparent); }
.ch-cennik tbody tr:last-child th,.ch-cennik tbody tr:last-child td{ border-bottom:0; }

.ch-cennik-panel{
  background:var(--surface); border:1px solid var(--line); border-radius:var(--r);
  box-shadow:var(--shadow); padding:var(--s3) var(--s4) var(--s4);
}
.ch-cennik--glowny table{ font-size:var(--t-body); min-width:44rem; }
.ch-cennik--glowny tbody th{ font-size:var(--t-body); white-space:nowrap; padding-right:var(--s3); }
.ch-cennik--glowny tbody td{ font-size:var(--t-h2); }
.ch-cennik--glowny thead th span{
  display:block; margin-top:.45rem;
  font-size:var(--t-small); font-weight:400; letter-spacing:.02em; text-transform:none;
  color:var(--muted); text-wrap:balance;  /* 23.09: daty w rozmiarze drobnym łamią się, gdy kolumna jest za wąska (iPad) */
}
/* Poniżej 780 px macierz 5 na 5 przestaje się mieścić, a przewijanie w bok
   gubi nagłówek kolumny. Każdy próg długości pobytu robi się wtedy kartą,
   a nazwa sezonu wraca jako treść generowana. Znacznik zostaje tabelą,
   nagłówek kolumn zostaje w drzewie dostępności. */
@media (max-width:780px){
  .ch-cennik--glowny table{ min-width:0; }
  .ch-cennik--glowny figcaption{ padding-bottom:var(--s3); }
  .ch-cennik--glowny thead{
    position:absolute; width:1px; height:1px; overflow:hidden;
    clip:rect(0 0 0 0); clip-path:inset(50%); white-space:nowrap;
  }
  .ch-cennik--glowny tbody tr{
    display:block; padding:var(--s2) var(--s3) var(--s2) var(--s2);
    border:1px solid var(--line); border-left:3px solid var(--copper);
    border-radius:var(--r); margin-bottom:var(--s2);
  }
  .ch-cennik--glowny tbody tr:hover{ background:transparent; }
  .ch-cennik--glowny tbody th{
    display:block; border:0; padding:0 0 .7rem; white-space:normal;
  }
  .ch-cennik--glowny tbody td{
    display:flex; align-items:baseline; justify-content:space-between; gap:var(--s2);
    padding:.55rem 0; border-bottom:1px solid var(--line);
  }
  .ch-cennik--glowny tbody tr td:last-child{ border-bottom:0; }
  .ch-cennik--glowny tbody td::before{
    font:600 var(--t-micro)/1.5 var(--font-ui); letter-spacing:.12em; text-transform:uppercase;
    color:var(--muted);
  }
  .ch-cennik--glowny tbody td:nth-of-type(1)::before{ content:"Wiosna"; }
  .ch-cennik--glowny tbody td:nth-of-type(2)::before{ content:"Sezon letni"; }
  .ch-cennik--glowny tbody td:nth-of-type(3)::before{ content:"Jesień"; }
  .ch-cennik--glowny tbody td:nth-of-type(4)::before{ content:"Sezon zimowy"; }
  .ch-cennik--dodatki tbody tr{
    display:block; padding:var(--s2) 0;
    border-bottom:1px solid var(--line);
  }
  .ch-cennik--dodatki tbody td{ display:block; border:0; padding:.25rem 0; }
  .ch-cennik--dodatki thead{
    position:absolute; width:1px; height:1px; overflow:hidden;
    clip:rect(0 0 0 0); clip-path:inset(50%); white-space:nowrap;
  }
  .ch-cennik--dodatki table{ min-width:0; }
}

/* ===========================================================================
   14. SIATKA GALERII
   ======================================================================== */
.ch-galeria{ display:grid; grid-template-columns:repeat(3,1fr); gap:var(--s3); }
.ch-galeria--pary{ grid-template-columns:repeat(2,1fr); }
.ch-kadr{
  margin:0; background:var(--surface);
  border:1px solid var(--line); border-radius:var(--r); overflow:hidden;
  box-shadow:var(--shadow);
  transition:border-color .5s var(--ease), transform .5s var(--ease);
}
.ch-kadr:hover{ border-color:color-mix(in srgb,var(--copper) 55%, var(--line)); transform:translateY(-2px); }
.ch-kadr .wp-block-image{ margin:0; line-height:0; }
.ch-kadr img{
  display:block; width:100%; height:auto; aspect-ratio:4/3; object-fit:cover;
  filter:saturate(.95); transition:filter .5s var(--ease);
}
.ch-kadr:hover img{ filter:saturate(1.02) contrast(1.04); }
.ch-kadr figcaption,.ch-kadr .ch-podpis{
  margin:0;
  padding:.85rem var(--s2); font-size:var(--t-small); line-height:1.5;
  color:var(--muted); border-top:1px solid var(--line);
}

/* ===========================================================================
   15. PYTANIA I ODPOWIEDZI (core/details)
   ======================================================================== */
.ch-pytania{ max-width:72ch; border-top:1px solid var(--line); }
.ch-pyt{ border-bottom:1px solid var(--line); }
.ch-pyt summary{
  list-style:none; cursor:pointer; position:relative;
  padding:1.35rem 3rem 1.35rem 0;
  font-family:"Manrope",sans-serif; font-size:var(--t-h3); line-height:1.4; letter-spacing:-.015em;
  color:var(--text); transition:color .35s var(--ease);
}
.ch-pyt summary::-webkit-details-marker{ display:none; }
.ch-pyt summary::marker{ content:""; }
.ch-pyt summary:hover{ color:var(--amber); }
.ch-pyt summary:focus-visible{ outline:2px solid var(--copper); outline-offset:3px; border-radius:2px; }
.ch-pyt summary::before,.ch-pyt summary::after{
  content:""; position:absolute; right:.4rem; top:1.35rem; margin-top:.55em;
  width:14px; height:2px; background:var(--copper);
  transition:transform .35s var(--ease), opacity .35s var(--ease);
}
.ch-pyt summary::after{ transform:rotate(90deg); }
.ch-pyt[open] summary{ color:var(--amber); }
.ch-pyt[open] summary::after{ transform:rotate(0deg); opacity:0; }



.ch-pyt > p{ margin:0 0 var(--s2); color:var(--muted); font-size:var(--t-body); padding:0 3rem var(--s2) 0; }
.ch-pyt > p:last-child{ padding-bottom:var(--s3); margin-bottom:0; }

/* ===========================================================================
   16. REGULAMIN
   ======================================================================== */
.ch-spis-tresci{
  margin-top:var(--s4);
  border:1px solid var(--line); border-left:3px solid var(--copper);
  border-radius:var(--r); background:var(--surface); padding:var(--s3); box-shadow:var(--shadow);
}
.ch-wrap.is-layout-flow > .ch-spis-tresci{ margin-block-start:var(--s4); }  /* reset flow zerował odstęp od wstępu */
.ch-spis-tresci ol{ margin:0; padding:0; list-style:none; display:grid; gap:.15rem; }
.ch-spis-tresci li{ border-bottom:1px solid var(--line); }
.ch-spis-tresci li:last-child{ border-bottom:0; }
/* Na szerokim ekranie spis w dwóch kolumnach, żeby na całej szerokości nie było pustych wierszy.
   ponytail: 7 paragrafów = 4 wiersze na sztywno; przy innej liczbie zmienić repeat() i nth-child. */
@media (min-width:900px){
  .ch-spis-tresci ol{ grid-template-columns:1fr 1fr; grid-template-rows:repeat(4,auto); grid-auto-flow:column; column-gap:var(--s5); }
  .ch-spis-tresci li:nth-child(4){ border-bottom:0; }
}
.ch-spis-tresci a{
  display:block; padding:.7rem 0;
  text-decoration:none; color:var(--text); font-size:var(--t-body);
  transition:color .35s var(--ease);
}
.ch-spis-tresci a:hover{ color:var(--amber); }
.ch-spis-tresci a:focus-visible{ outline:2px solid var(--copper); outline-offset:3px; border-radius:2px; }

.ch-par{ padding-top:var(--s5); }  /* 23.09: Regulamin na całą szerokość (gospodarz) */
.ch-par h2{ font-size:var(--t-h2); }
/* Rytm wewnątrz paragrafu Regulaminu: reset flow zerował wszystkie odstępy między blokami. */
.ch-par.is-layout-flow > * + *{ margin-block-start:var(--s2); }
.ch-par.is-layout-flow > h2 + *{ margin-block-start:var(--s3); }
.ch-par ol{ margin:var(--s3) 0 0; padding-left:1.5rem; }
.ch-par ol li{ margin-bottom:var(--s2); padding-left:.35rem; }
.ch-par ol li::marker{ color:var(--copper); font-weight:700; }
.ch-par p{ margin:var(--s2) 0 0; }
.ch-par dl{ margin:var(--s3) 0 0; }
.ch-par dt,.ch-par .ch-dt{ font-weight:700; color:var(--text); margin-top:var(--s2); }
.ch-par dd,.ch-par .ch-dd{ margin:.25rem 0 0; color:var(--muted); }
.ch-par .ch-wyroz{
  margin-top:var(--s3); padding:var(--s3);
  border:1px solid var(--line); border-left:3px solid var(--copper);
  border-radius:var(--r); background:var(--surface);
}
.ch-par .ch-wyroz p{ margin:0; }
.ch-par .ch-wyroz p + p{ margin-top:var(--s2); }
.ch-konto{ font-variant-numeric:tabular-nums; white-space:nowrap; }
.ch-data-akt{ margin-top:var(--s5); color:var(--muted); font-size:var(--t-small); }

/* ===========================================================================
   17. KONTAKT
   ======================================================================== */
.ch-kontakt-siatka{ display:grid; grid-template-columns:repeat(auto-fit,minmax(300px,1fr)); gap:var(--s3); }
.ch-kkarta{
  background:var(--surface); border:1px solid var(--line); border-radius:var(--r);
  box-shadow:var(--shadow); padding:var(--s3);
  transition:border-color .5s var(--ease), transform .5s var(--ease);
}
.ch-kkarta:hover{ border-color:color-mix(in srgb,var(--copper) 55%, var(--line)); transform:translateY(-2px); }
.ch-kkarta .ch-etykieta{
  display:block; font:600 var(--t-micro)/1 var(--font-ui); letter-spacing:var(--tracking-wide); text-transform:uppercase;
  color:var(--muted); margin:0 0 var(--s2);
}
.ch-kkarta .ch-duze,.ch-kkarta .ch-duze a{
  font-family:"Manrope",sans-serif; font-size:var(--t-h2); line-height:1.25; letter-spacing:-.015em;
  color:var(--link); text-decoration:none;  /* 25.09: było --amber, w jasnym motywie kontrast 2,4∶1 (token --link z 23.09) */
  border-bottom:1px solid color-mix(in srgb,var(--link) 45%, transparent);
  transition:color .35s var(--ease), border-color .35s var(--ease);
}
.ch-kkarta .ch-duze{ margin:0; border-bottom:0; }
.ch-kkarta .ch-duze a:hover{ color:var(--copper-hi); border-bottom-color:var(--copper); }
.ch-kkarta .ch-duze a:focus-visible{ outline:2px solid var(--copper); outline-offset:4px; }
.ch-kkarta .ch-adres{
  font-style:normal; font-family:"Manrope",sans-serif; font-size:var(--t-h3); line-height:1.4; letter-spacing:-.015em; color:var(--text);
  margin:0;
}
.ch-kkarta p{ margin:var(--s2) 0 0; color:var(--muted); font-size:var(--t-body); }
.ch-kkarta .wp-block-buttons{ margin-top:var(--s3); }

/* Sekcja 01 Kontaktu (19.09): formularz na 2/3, z prawej telefon+mail i pod nim FAQ.
   Do 900px jedna kolumna, formularz PIERWSZY (gospodarz 19.09). */
.ch-kontakt-siatka:has(.ch-formularz){ grid-template-columns:repeat(3,1fr); }
.ch-formularz{ grid-column:1 / 3; grid-row:1 / 3; display:flex; flex-direction:column; gap:var(--s3); margin:0; }
.ch-formularz .ch-etykieta{ margin:0; }
.ch-formularz:hover{ transform:none; }
.ch-formularz-wiersz{ display:grid; grid-template-columns:1fr 1fr; gap:var(--s3); }
.ch-formularz-stopka{ display:flex; align-items:center; gap:var(--s3); flex-wrap:wrap; }
.ch-formularz-stopka p{ margin:0; flex:1 1 16rem; }
.ch-pulapka{ position:absolute; left:-10000px; width:1px; height:1px; overflow:hidden; }
.ch-formularz-komunikat{ margin:0; padding:var(--s2) var(--s3); border-radius:var(--r); font-size:var(--t-small); border:1px solid; }
.ch-formularz-komunikat--ok{ color:var(--text); border-color:color-mix(in srgb,#7FB795 60%, transparent); background:color-mix(in srgb,#7FB795 12%, transparent); }
.ch-formularz-komunikat--blad{ color:var(--text); border-color:color-mix(in srgb,var(--copper) 60%, transparent); background:color-mix(in srgb,var(--copper) 12%, transparent); }
#formularz{ scroll-margin-top:var(--s5); }
/* Po wysłaniu: zamiast pól duże potwierdzenie — gość ma nie mieć wątpliwości, że poszło. */
.ch-formularz--wyslano{ align-items:flex-start; justify-content:center; gap:var(--s2); min-height:22rem; }
.ch-wyslano-znak{ width:3.4rem; height:3.4rem; border-radius:50%; display:grid; place-items:center;
  background:color-mix(in srgb,#7FB795 18%, transparent); color:#7FB795; border:1px solid color-mix(in srgb,#7FB795 55%, transparent); }
.ch-wyslano-znak svg{ width:55%; height:55%; }
.ch-formularz--wyslano h3{ margin:var(--s2) 0 0; font-size:var(--t-h2); }
.ch-formularz--wyslano p{ margin:0; color:var(--muted); max-width:42ch; }
.ch-formularz--wyslano a{ color:var(--amber); }

/* Sekcja 02: mapa Google 2/3 + adres 1/3, ta sama siatka co formularz. */
.ch-mapa-siatka{ display:grid; grid-template-columns:repeat(3,1fr); gap:var(--s3); margin-bottom:var(--s4); }
.ch-mapa{ grid-column:1 / 3; grid-row:1 / 3; border-radius:var(--r); overflow:hidden; border:1px solid var(--line); background:var(--surface); }
.ch-mapa-siatka > *{ margin:0 !important; }  /* flow WordPressa dodawał margines nad kartą adresu: karta była niższa od mapy */
/* Mapa z własnymi znacznikami (19.09). Pozycje --x/--y to ułamki obrazka z design/mapa-statyczna.py.
   --a = proporcja ramki, --ai = proporcja obrazka. Obrazek przycinany przez cover do ramki;
   wzór przelicza pozycję znacznika na przyciętą ramkę, więc znaczniki trafiają w punkt przy każdej proporcji. */
.ch-mapa{ position:relative; --ai:1.2; --a:1.2; aspect-ratio:var(--a); }  /* --ai: proporcja obrazka 1800×1500 */
.ch-mapa-link{ position:absolute; inset:0; display:block; }
.ch-mapa-link img{ width:100%; height:100%; object-fit:cover; display:block; filter:saturate(.8); transition:filter .5s var(--ease); }
.ch-mapa-link:hover img{ filter:saturate(1); }
.ch-mapa-pin,.ch-mapa-pkt{ position:absolute; pointer-events:none;
  left:calc((var(--x) * var(--ai) - (var(--ai) - var(--a)) * .5) / var(--a) * 100%); top:calc(var(--y) * 100%); }
.ch-mapa-pin{ transform:translate(-50%,-100%); display:flex; flex-direction:column; align-items:center; z-index:2; }
.ch-mapa-pin svg{ width:38px; height:50px; filter:drop-shadow(0 4px 6px rgb(0 0 0 / .4)); order:2; }
.ch-mapa-pin path{ fill:#EF3A2C; }  /* czerwień przycisku „Sprawdź” (gospodarz 19.09: znacznik czerwony) */
.ch-mapa-pin circle{ fill:#fff; }
.ch-mapa-pin b{ order:1; margin-bottom:6px; padding:.4rem .85rem; border-radius:999px; font:700 var(--t-small)/1.2 "Manrope",sans-serif; letter-spacing:.02em;
  color:#16211D; background:#fff; box-shadow:0 2px 6px rgb(0 0 0 / .25); white-space:nowrap; }
/* Punkty pomocnicze: kropka + podpis z boku. */
.ch-mapa-pkt i{ position:absolute; left:0; top:0; width:12px; height:12px; transform:translate(-50%,-50%); border-radius:50%;
  background:#16211D; border:2.5px solid #fff; box-shadow:0 1px 4px rgb(0 0 0 / .4); }
.ch-mapa-pkt b{ position:absolute; top:0; transform:translateY(-50%); white-space:nowrap; padding:.18rem .5rem; border-radius:999px;
  font:700 11px/1.2 "Manrope",sans-serif; color:#16211D; background:rgb(255 255 255 / .92); box-shadow:0 1px 4px rgb(0 0 0 / .25); }
.ch-mapa-pkt--prawo b{ left:12px; }
.ch-mapa-pkt--lewo b{ right:12px; }
.ch-mapa-otworz{ position:absolute; right:var(--s2); bottom:var(--s2); padding:.55rem .9rem; border-radius:var(--r);
  font:700 var(--t-small)/1 "Manrope",sans-serif; color:#16211D; background:rgb(255 255 255 / .92); box-shadow:0 2px 8px rgb(0 0 0 / .25); }
.ch-mapa-link:hover .ch-mapa-otworz{ background:#fff; }
.ch-mapa-link:focus-visible{ outline:2px solid var(--copper); outline-offset:-4px; }
/* Flaga Polski w adresie (goście z zagranicy): SVG, bo emoji flag nie działa w Windows. */
.ch-flaga{ width:1.15em; height:.72em; vertical-align:-.05em; margin-left:.3em; border-radius:1px; box-shadow:0 0 0 1px rgb(0 0 0 / .25); }
.ch-kkarta .ch-wspolrzedne{ font-family:ui-monospace,"SF Mono",Menlo,monospace; font-size:var(--t-small); letter-spacing:.02em; }
/* iPad w pionie i wąskie okna: karty rosną (tekst się zawija) i mapa była od nich niższa.
   Mapa idzie wtedy na całą szerokość jako szeroki kadr, karty stają obok siebie pod nią.
   Pinezka jest w środku obrazka, więc przycięcie w pionie jej nie rusza. */
@media (max-width:1100px) and (min-width:701px){
  .ch-mapa-siatka{ grid-template-columns:1fr 1fr; }
  .ch-mapa{ grid-column:1 / -1; grid-row:auto; --a:2; }
}
@media (max-width:700px){
  .ch-mapa{ --a:1; }
  .ch-mapa-otworz{ font-size:var(--t-micro); padding:.45rem .7rem; top:var(--s2); bottom:auto; }  /* na dole zasłaniał podpis licencji */
  .ch-mapa-pkt--centrum b{ left:auto; right:12px; }  /* przy prawej krawędzi wąskiej mapy */
}
.ch-mapa-osm{ position:absolute; left:.4rem; bottom:.3rem; font-size:11px; color:#333; background:rgb(255 255 255 / .75); padding:.05rem .35rem; border-radius:3px; }
.ch-mapa-osm a{ color:inherit; text-decoration:none; }
/* Numer telefonu i „FAQ”: pogrubione, większe, z odstępem od opisu (gospodarz 19.09). */
.ch-kkarta .ch-duze a{ font-weight:700; }  /* telefon i FAQ */
.ch-kkarta .ch-duze + p{ margin-top:var(--s3); }

.ch-dojazd{ margin-top:var(--s4); max-width:68ch; }
.ch-dojazd p{ margin:0 0 var(--s2); color:var(--muted); }
.ch-dojazd p:last-child{ margin-bottom:0; }
.ch-dojazd b,.ch-dojazd strong{ color:var(--text); font-weight:600; }

.ch-kontakt-dane{
  display:grid; grid-template-columns:repeat(auto-fit,minmax(220px,1fr));
  gap:var(--s3); margin-top:var(--s4);
}
.ch-kontakt-dane .ch-poz .ch-etykieta{
  display:block;
  font:600 var(--t-micro)/1.5 var(--font-ui); letter-spacing:var(--tracking-wide); text-transform:uppercase;
  color:var(--muted); margin:0 0 .35rem;
}
.ch-kontakt-dane .ch-poz .ch-wartosc{ font-size:var(--t-body); color:var(--text); margin:0; font-style:normal; }
.ch-kontakt-dane .ch-poz .ch-wartosc a{
  color:var(--amber); text-decoration:underline;
  text-decoration-thickness:1px; text-underline-offset:3px;
}

/* ===========================================================================
   18. OPINIE (strona główna)
   ======================================================================== */
.ch-opinie-uklad{
  display:grid; grid-template-columns:minmax(15rem,.8fr) 1.6fr; gap:var(--s4);
  align-items:stretch;  /* 24.09: obie strony kończą się równo */
}
.ch-ocena-duza .ch-wart{
  display:block;
  font-family:"Manrope",sans-serif; font-weight:700;
  font-size:var(--t-tytul); line-height:1;
  color:var(--text); letter-spacing:-.03em; margin:0;
}
.ch-ocena-duza .ch-z-ilu{
  display:block; margin:var(--s2) 0 0;
  font:600 var(--t-micro)/1.5 var(--font-ui); letter-spacing:var(--tracking-wide); text-transform:uppercase;
  color:var(--muted);
}
.ch-ocena-duza p:not(.ch-wart):not(.ch-z-ilu){ margin:var(--s3) 0 0; color:var(--muted); font-size:var(--t-small); }
.ch-opinie{ display:grid; gap:var(--s3); grid-auto-rows:1fr; }
.ch-opinia{ margin:0; }
.ch-opinia p{
  margin:0; font-family:"Manrope",sans-serif; font-weight:700;
  font-size:var(--t-h3); line-height:1.5;
  color:var(--text);
}
.ch-opinia cite,.ch-opinia figcaption{
  display:block; margin-top:var(--s2); font-style:normal;
  font:600 var(--t-micro)/1.5 var(--font-ui); letter-spacing:var(--tracking-wide); text-transform:uppercase;
  color:var(--muted);
}
.ch-opinia cite b,.ch-opinia cite strong,.ch-opinia figcaption b{ color:var(--amber); font-weight:600; }

/* 24.09: strona główna wg makiety — intro, gwiazdki, paski opinii, powody, odnośniki */
/* 25.09: tekst „Dlaczego warto wybrać Chatynki?” (gospodarz) — dwie kolumny jak w gazecie, które
   same wyrównują się do tej samej wysokości (zasada: części panelu kończą się równo). */
.ch-dlaczego h3{ font-size:var(--t-h3); margin:var(--s3) 0 var(--s1); break-after:avoid; }
.ch-dlaczego h3:first-child{ margin-top:0; }
.ch-dlaczego p{ margin:0 0 var(--s2); orphans:1; widows:1; }  /* dowolne łamanie akapitów = kolumny równe co do linijki */
@media (min-width:900px){ .ch-dlaczego{ column-count:2; column-gap:var(--s5); } }
.ch-intro > div > p:first-child{ color:var(--text); max-width:none; }
.ch-liczby--intro{ margin:var(--s3) 0; padding:var(--s3) 0; grid-template-columns:repeat(auto-fit,minmax(7rem,1fr)); gap:var(--s2); }
.ch-gwiazdki{ display:block; color:#F5C451; letter-spacing:.12em; font-size:var(--t-small); line-height:1; margin-bottom:.6rem; }
.ch-gwiazdki::before{ content:"★★★★★"; }
.ch-opinia p{ font-weight:500; font-size:var(--t-body); }  /* paski: tekst bazowy, nie tytuł karty */
.ch-opinie > :nth-child(n+3){ display:none; }  /* widoczne dwa paski; reszta to baza do rotacji (JS w functions.php) */
.ch-opinie--rotacja .ch-slot{ display:grid; }  /* stos opinii: wysokość = najdłuższa, strona nie skacze */
/* 24.09 (gospodarz): zmiana ma być widoczna — nowa opinia wjeżdża od dołu, stara odjeżdża w górę. */
.ch-opinie--rotacja .ch-slot > *{ grid-area:1 / 1; opacity:0; transform:translateY(16px); transition:opacity 1.5s var(--ease), transform 1.5s var(--ease); pointer-events:none; }
.ch-opinie--rotacja .ch-slot > .is-on{ opacity:1; transform:none; pointer-events:auto; }
.ch-opinie--rotacja .ch-slot > .is-off{ transform:translateY(-16px); }
.ch-tagi{ display:flex; flex-wrap:wrap; gap:.5rem; list-style:none; padding:0; margin:var(--s2) 0 0; }
.ch-tagi li{ font-size:var(--t-small); padding:.3rem .75rem; border:1px solid var(--line-strong); border-radius:999px; }
.ch-powody{ display:grid; grid-template-columns:repeat(auto-fit,minmax(16rem,1fr)); gap:var(--s3); }
.ch-powody > div{ display:flex; gap:.8rem; align-items:flex-start; }
.ch-powody svg{ flex:none; width:26px; height:26px; color:var(--copper); margin-top:.15rem; }
.ch-powody p{ margin:0; }
.ch-powody .ch-opis{ color:var(--muted); font-size:var(--t-small); }
.ch-odnosnik{ display:flex; flex-wrap:wrap; align-items:center; gap:var(--s2) var(--s3); margin:var(--s4) 0 0; }

/* ===========================================================================
   19. ZAPIS NA LISTĘ (strona główna)
   ======================================================================== */
.ch-zapis{
  display:grid; grid-template-columns:1fr 1fr; gap:0;
  border:1px solid var(--line); border-radius:var(--r); overflow:hidden;
  background:var(--surface); box-shadow:var(--shadow);
}
.ch-zapis .wp-block-image{ margin:0; height:100%; }
.ch-zapis img{ display:block; width:100%; height:100%; min-height:260px; object-fit:cover; filter:saturate(.95); }
.ch-zapis .ch-srodek{ padding:var(--s4); }
.ch-zapis h3{ font-size:var(--t-h2); }
.ch-zapis p{ color:var(--muted); font-size:var(--t-small); margin:var(--s2) 0 var(--s3); max-width:46ch; }
.ch-zapis form{ display:grid; grid-template-columns:1fr auto; gap:var(--s2); align-items:end; }
.ch-zapis .ch-fine{ grid-column:1 / -1; margin:.25rem 0 0; font-size:var(--t-small); color:var(--muted); max-width:none; }

.ch-kanaly{ display:grid; grid-template-columns:repeat(2,1fr); gap:var(--s3); }
.ch-kanal{ padding:var(--s3); }
.ch-kanal h3{ font-size:var(--t-h3); }
.ch-kanal p{ color:var(--muted); font-size:var(--t-small); margin:.5rem 0 var(--s3); }
.ch-kanal .ch-cena-tam{
  font:600 var(--t-micro)/1.5 var(--font-ui); letter-spacing:var(--tracking-wide); text-transform:uppercase;
  color:var(--muted); display:block; margin:0 0 var(--s2);
}
.ch-kanal .wp-block-buttons{ position:relative; z-index:1; }

/* ===========================================================================
   20. PASY ZACHĘTY
   ======================================================================== */
.ch-cta-pas,.ch-cta{
  display:flex; flex-wrap:wrap; align-items:center; justify-content:space-between;
  gap:var(--s3);
  margin-top:var(--s6);
  background:var(--surface); border:1px solid var(--line); border-left:3px solid var(--copper);
  border-radius:var(--r); padding:var(--s4); box-shadow:var(--shadow);
  position:relative; overflow:hidden;
}
.ch-cta{ margin-top:var(--s5); }
.ch-cta-pas::after{
  content:""; position:absolute; right:-40px; bottom:-60px; width:220px; height:220px;
  border-radius:50%; pointer-events:none;
  background:radial-gradient(circle, var(--glow), transparent 68%);
  filter:blur(26px);
  animation:oddech 9s var(--ease) infinite;
}
.ch-cta-pas > div,.ch-cta > div{ position:relative; z-index:1; max-width:52ch; }
.ch-cta-pas h2,.ch-cta h2{ font-size:var(--t-h2); margin-bottom:.5rem; }
.ch-cta-pas p,.ch-cta p{ margin:0; color:var(--muted); font-size:var(--t-small); }
.ch-cta p{ margin:.6rem 0 0; max-width:46ch; font-size:var(--t-body); }
.ch-cta-pas .wp-block-buttons,.ch-cta .wp-block-buttons{ position:relative; z-index:1; }

/* PAS WEZWANIA ZE ZDJĘCIEM (Kontakt 19.09; wg ustaleń: jeden komponent, inne zdjęcie na każdej stronie).
   Zdjęcie powoli się oddala w trakcie przewijania: animacja sterowana przewijaniem, czysty CSS.
   Bez background-attachment:fixed (iOS go ignoruje). Przeglądarka bez obsługi: nieruchome zdjęcie. */
.ch-pas-wezwania{ position:relative; overflow:hidden; isolation:isolate; margin-top:var(--s5) !important;  /* flow WordPressa nadpisywał odstęp */
  border-radius:var(--r); min-height:clamp(320px,44vh,440px); display:flex; align-items:flex-end; }  /* 20.09: gospodarz — nie wyżej niż ok. 440 px */
.ch-pw-tlo{ position:absolute; inset:0; z-index:-1; }
.ch-pw-tlo img{ width:100%; height:100%; object-fit:cover; object-position:var(--pw-x,50%) var(--pw-y,50%); transform-origin:var(--pw-x,50%) var(--pw-y,50%); display:block; transform:scale(1.06); }  /* 20.09: bez filtra (gospodarz: nie psuć zdjęcia). Punkt kadru i oddalania ustawia strona przez style="--pw-x;--pw-y" na <img> (Kontakt: słońce 70% 0) */
.ch-pas-wezwania::after{ content:""; position:absolute; inset:0; z-index:-1; pointer-events:none; background:linear-gradient(to top, rgb(6 10 9 / .62) 0%, rgb(6 10 9 / .28) 30%, transparent 58%); }  /* 20.09: tylko dół pod tekstem, niebo i słońce bez nakładki */
@supports (animation-timeline: view()){
  .ch-pw-tlo img{ animation:pw-oddal linear both; animation-timeline:view(); animation-range:entry 0% exit 100%; }
}
@keyframes pw-oddal{ from{ transform:scale(1.22); } to{ transform:scale(1); } }
@media (prefers-reduced-motion:reduce){ .ch-pw-tlo img{ animation:none; transform:none; } }
.ch-pw-tresc{ padding:var(--s4); max-width:40rem; }
.ch-pw-tresc .ch-nadpis{ color:rgb(240 233 222 / .78); }
.ch-pw-tresc h2{ color:#F0E9DE; font-size:var(--t-h2); margin:0 0 .5rem; text-shadow:0 2px 20px rgb(0 0 0 / .5); }
.ch-pw-tresc p{ color:#DED6CA; margin:0 0 var(--s3); text-shadow:0 1px 10px rgb(0 0 0 / .6); }
.ch-pw-tresc .wp-block-buttons{ margin:0; }

/* ===========================================================================
   21. STOPKA — jedna, kanoniczna, wg start.html plus szczera linijka
        o Booking.com i Airbnb z kontakt.html
   ======================================================================== */
/* 24.09 (gospodarz): stopka ZAWSZE ciemna, w kontrze do strony — głęboka neutralna szarość
   (bez niebieskiego), w obu motywach. Własne tokeny, żeby jasny motyw jej nie rozjaśniał. */
.ch-stopka{
  --bg:#17181B; --surface:#1F2024; --text:#E8E9EC; --muted:#9DA1A8; --line:#2E3036; --line-strong:#3E4147;
  --amber:#B9D3EA; --copper:#8FB6D9; --link:#B9D3EA;
  margin-top:var(--s6);
  background:var(--bg);
  border-top:1px solid var(--line);
  padding:var(--s5) 0 var(--s4);
  color:var(--muted); font-size:var(--t-small);
}
:root[data-theme="light"] .ch-stopka .ch-logo-chip .ch-logo--na-ciemnym{ display:block; }  /* w stopce zawsze logo na ciemne tło */
:root[data-theme="light"] .ch-stopka .ch-logo-chip .ch-logo--na-jasnym{ display:none; }
.ch-stopka-siatka{
  display:grid; grid-template-columns:1.2fr 1fr 1fr; gap:var(--s4);
  align-items:start;
}
.ch-stopka h2{
  font:700 calc(var(--t-micro) * 1.1)/1.5 var(--font-ui);   /* Kuba 27.09: lekko pogrubione i ciut większe */ letter-spacing:var(--tracking-wide); text-transform:uppercase;
  color:var(--muted); margin:0 0 var(--s2);
}
.ch-stopka ul{ list-style:none; margin:0; padding:0; display:grid; gap:.55rem; }
.ch-stopka li{ font-size:var(--t-small); }
.ch-stopka a{
  color:var(--text); text-decoration:none;
  transition:color .35s var(--ease);
}
.ch-stopka a:hover{ color:var(--amber); }
.ch-stopka a:focus-visible{ outline:2px solid var(--copper); outline-offset:3px; border-radius:2px; }
.ch-stopka .ch-adres{ font-style:normal; margin:var(--s2) 0 0; }
.ch-stopka .ch-adres b,.ch-stopka .ch-adres strong{ color:var(--text); font-weight:600; }
/* Kuba 30.09: region, kraj z flagą (gość z zagranicy od razu wie, gdzie to) i współrzędne do nawigacji, link do Map Google. */
.ch-stopka .ch-kraj{ display:inline-flex; align-items:center; gap:.45rem; }
.ch-stopka .ch-flaga{ width:1.15em; height:auto; border-radius:2px; box-shadow:0 0 0 1px rgba(255,255,255,.18); }
.ch-stopka a.ch-gps{ font-variant-numeric:tabular-nums; }
.ch-stopka .ch-logo-chip{ margin-bottom:var(--s2); padding-inline:0; }   /* Kuba 27.09: logo równo z tekstem pod nim */
/* Kuba 27.09: „Znajdź nas na” i ikony Booking.com i Airbnb (kafelki w barwach serwisów), odstęp od telefonu. */
.ch-stopka .ch-znajdz{ display:flex; align-items:center; gap:.6rem; margin:var(--s3) 0 0; }
.ch-stopka .ch-znajdz p{ margin:0 .25rem 0 0; }
.ch-stopka .ch-znajdz-ikona{ display:inline-grid; place-items:center; width:2rem; height:2rem; border-radius:7px; transition:transform .3s var(--ease); }
.ch-stopka .ch-znajdz-ikona:hover{ transform:translateY(-2px); }
/* Kuba 27.09: kreska dalej od ostatniej pozycji menu. Swoistość jak reset bloków w stopce (rozdz. 0, „.is-layout-flow > *”)
   plus jedna klasa, bo ten reset zerował margines i kreska przylegała do „Ustawień plików cookies”. */
.ch-stopka .ch-wrap.is-layout-flow > .ch-drobne{ margin-top:var(--s5); }
.ch-stopka-siatka > div.is-layout-flow > .ch-znajdz{ margin-top:var(--s3); }   /* Kuba 27.09: wolne miejsce pod telefonem */
/* Kuba 30.09: profile społecznościowe na górze trzeciej kolumny; znaki to SVG z pełnym tłem, rogi daje kafelek. */
.ch-stopka .ch-znajdz-ikona svg{ display:block; width:100%; height:100%; }
/* Kuba 07.10: social media jednym wierszem pod kolumnami, wyśrodkowane (nagłówek jak „Na stronie”, obok ikony; na wąskim ekranie ikony pod nim). */
.ch-stopka .ch-wrap.is-layout-flow > .ch-social-pas{ margin-top:var(--s4); display:flex; flex-wrap:wrap; align-items:center; justify-content:center; gap:.75rem var(--s3); }
.ch-stopka .ch-social-pas h2{ margin:0; }
.ch-stopka .ch-social-pas .ch-znajdz{ margin:0; }
.ch-stopka .ch-wrap.is-layout-flow > .ch-social-pas + .ch-drobne{ margin-top:var(--s4); }
/* Na dotyku linki stopki mają 44 px wysokości (rozdz. „cele dotyku”); kafelki zostają 32 px, obie tej samej wielkości. */
.ch-stopka .ch-znajdz a.ch-znajdz-ikona{ display:inline-grid; min-height:0; }
/* Kuba 29.09: obie ikony z jego plików 128 px, pełne tło, rogi zaokrągla strona. */
.ch-stopka .ch-znajdz-ikona{ overflow:hidden; }
.ch-stopka .ch-znajdz-ikona img{ display:block; width:100%; height:100%; }
/* Kuba 27.09: linki w „Na stronie” z kropką, żeby było widać, że to linki. */
.ch-stopka nav ul{ list-style:disc; padding-left:1.1em; }
.ch-stopka nav li::marker{ color:var(--copper); }
/* Kuba 27.09: „Krótko o obiekcie” z ikonami. */
.ch-stopka .ch-o-obiekcie li{ display:flex; align-items:center; gap:.6rem; }
.ch-stopka .ch-o-obiekcie svg{ flex:none; width:18px; height:18px; color:var(--copper); }
.ch-stopka .ch-drobne{
  padding-top:var(--s3);
  border-top:1px solid var(--line);
  font-size:var(--t-small);
}

/* ===========================================================================
   22. 404 I WYSZUKIWANIE
   ======================================================================== */
.ch-prosta-strona{ padding:var(--s5) 0 0; }
.ch-prosta-strona h1{ font-size:var(--t-tytul); }
.ch-prosta-strona h1.ch-tytul-bledu{ font-size:var(--t-h2); }   /* Kuba 28.09: na stronie błędu napis był „monstrualnie wielki” */
.ch-prosta-strona p{ color:var(--muted); margin:var(--s3) 0 0; max-width:var(--measure); }
.wp-block-search .wp-block-search__input{
  font:500 var(--t-body)/1.2 "Manrope",sans-serif; color:var(--text); background:var(--surface);
  border:1px solid var(--line-strong); border-radius:var(--r); padding:.95rem 1rem;
}
.wp-block-search .wp-block-search__input:focus{
  outline:none; border-color:var(--copper);
  box-shadow:0 0 0 3px color-mix(in srgb,var(--copper) 26%, transparent);
}
.wp-block-post-title a{ color:var(--text); text-decoration:none; }
.wp-block-post-title a:hover{ color:var(--amber); }

/* ===========================================================================
   ŁAMANIA
   ======================================================================== */
/* Belka na dwa rzędy: logo|prawa obok siebie, menu pod spodem na całą
   szerokość, wyśrodkowane. Zastępuje dawny flex-wrap (14.09) — przy nim
   przełącznik motywu i telefon rozjeżdżały się na osobne rzędy, gdy
   menu też łamało się do własnego wiersza; teraz logo i prawa panel
   trzymają się razem w jednym rzędzie na każdej szerokości. */
/* Próg był 1080px (przy kolumnach 1fr×3 menu się nie mieściło). Od 15.09
   środek belki = szerokość menu, więc jeden rząd mieści się do ~900px;
   układ pośredni (logo+telefon, PL/EN pod spodem, menu w trzecim rzędzie)
   wychodził na iPadzie w pionie (1024px) mimo miejsca. Teraz ≤900px =
   od razu wariant A (blok niżej), powyżej jeden rząd. */
@media (max-width:900px){
  .ch-brandbar{
    grid-template-columns:1fr 1fr;
    grid-template-areas:"logo prawa" "nav nav";
  }
  .ch-nav{ justify-self:stretch; }
  /* Menu schodzi do własnego rzędu, wspólna linia bazowa z logo znika. */
  .ch-brandbar .ch-logo-chip{ transform:none; }
  /* Audyt 14.09: było gap:1.25rem na sztywno, mrożąc płynną skalę --s3
     poniżej tego progu. Zostaje tylko odstęp pod spodem menu. */
  .ch-nav ul,.ch-nav .wp-block-navigation__container{ padding-bottom:.15rem; }
}
@media (max-width:900px){
  /* Wariant A z makiety „Nagłówek na telefon" (gospodarz 15.09). Rząd 1:
     logo z lewej, słuchawka + PL/EN + przełącznik z prawej, jeden rząd.
     Rząd 2: menu na całą szerokość, cztery pozycje rozłożone, bez
     przewijania w bok. Wcześniej: prawy panel w trzech piętrach, menu
     ucięte z wygaszeniem krawędzi, ok. 200px nagłówka. */
  .ch-brandbar{ padding:var(--s2); gap:var(--s2); grid-template-columns:auto minmax(0,1fr); }
  .ch-brandbar .ch-logo-chip{ justify-self:start; padding-inline:0; }
  .ch-prawa{ justify-self:end; flex-direction:row; gap:.25rem; }
  .ch-prawa-gorny{ display:contents; }
  .ch-prawa .ch-tel{ order:1; justify-content:center; min-width:2.75rem; min-height:2.75rem; }
  /* bez bocznego wypełnienia: na 360px logo i słuchawkę dzieliły 3px */
  .ch-prawa .ch-toggle{ order:3; min-height:2.75rem; padding-inline:0; }
  /* Numer zostaje w linku tel: i dla czytnika ekranu; na ekranie sama słuchawka. */
  .ch-tel-numer{
    position:absolute; width:1px; height:1px; overflow:hidden;
    clip:rect(0 0 0 0); clip-path:inset(50%); white-space:nowrap;
  }
  .ch-nav{ border-top:1px solid var(--surface); }
  /* ⚠️ WordPress sam nadaje kontenerowi menu flex-wrap:wrap — nowrap jawnie.
     Stały odstęp i środek, nie space-between (15.09, gospodarz: pozycje
     „od siebie oddalone" w wąskim oknie). `safe center`: gdyby menu się
     nie zmieściło, wyrówna do lewej zamiast ucinać oba końce. */
  .ch-nav .wp-block-navigation__container,.ch-nav ul{
    flex-wrap:nowrap; justify-content:safe center;
  }
  .ch-hero-copy{ padding:var(--s3) var(--s2) var(--s2); }
  .ch-sec-head{ flex-wrap:wrap; }
  .ch-sec-head .ch-note{ margin-left:0; flex-basis:100%; }
  .ch-cards--para,.ch-cards--pary{ grid-template-columns:1fr; }
  .ch-domki,.ch-card.ch-card--szeroka{ grid-template-columns:1fr; }
  .ch-kontakt-siatka:has(.ch-formularz){ grid-template-columns:1fr; }
  .ch-formularz{ grid-column:auto; grid-row:auto; }
  .ch-mapa-siatka{ grid-template-columns:1fr; }
  .ch-mapa{ grid-column:auto; grid-row:auto; }
  .ch-formularz-wiersz{ grid-template-columns:1fr; }
  .ch-tekst-2kol{ columns:1; }
  .ch-card--prawa .ch-figura{ order:0; }
  .ch-zasady{ grid-template-columns:1fr; }
  .ch-opinie-uklad{ grid-template-columns:1fr; gap:var(--s3); }
  .ch-zapis{ grid-template-columns:1fr; }
  .ch-zapis .ch-obraz{ order:-1; }
  .ch-zapis .ch-srodek{ padding:var(--s3); }
  .ch-kanaly{ grid-template-columns:1fr; }
  .ch-uklad{ grid-template-columns:1fr; gap:var(--s3); }
  .ch-uklad--odwrocony .ch-uklad-media,.ch-uklad--instrukcja .ch-uklad-media{ order:0; }
  .ch-galeria,.ch-galeria--pary{ grid-template-columns:1fr; }
  .ch-cennik-panel{ padding:var(--s3) var(--s2) var(--s3); }
  .ch-cta-pas,.ch-cta{ padding:var(--s3); }
  .ch-pyt > p{ padding-right:0; }
  .ch-konto{ white-space:normal; }
  .ch-stopka-siatka{ grid-template-columns:1fr; gap:var(--s3); }
  .ch-stopka nav ul{ grid-template-columns:1fr 1fr; }  /* 24.09: siedem linków w dwóch kolumnach, cele dotyku 44 px zostają */
}
@media (max-width:640px){
  .ch-zapis form{ grid-template-columns:1fr; }
  .ch-zapis form .ch-btn{ width:100%; }
}

/* ===========================================================================
   23. DROBIAZGI UKŁADU — klasy pomocnicze, którymi bloki odtwarzają style
        pisane w makietach atrybutem style="" na konkretnym elemencie
   ======================================================================== */
.ch-tresc-strony{ display:block; }
.ch-widelki{ display:block; }
.ch-naglowek-zasad{ font-size:var(--t-h3); }
.ch-pod-tabela{
  color:var(--muted); font-size:var(--t-small); line-height:1.6;
  margin:var(--s3) 0 0; max-width:74ch;
}
.ch-pod-tabela b,.ch-pod-tabela strong{ color:var(--text); }
.ch-liczby--bez-gory{ border-top:0; padding-top:0; }
.ch-definicje{ margin:var(--s3) 0 0; }
.ch-definicje .ch-dt{ font-weight:700; color:var(--text); margin:var(--s2) 0 0; }
.ch-definicje .ch-dd{ margin:.25rem 0 0; color:var(--muted); }

/* ===========================================================================
   CELE DOTYKU  (na końcu arkusza celowo: musi wygrywać
   z regułami szerokości, które stoją wyżej i też ruszają wypełnienia)
   Warunek na URZĄDZENIE, nie na szerokość: palec jest gruby tak samo na
   telefonie 360 px, jak na tablecie 1024 px, a mysz jest precyzyjna na
   obu. `pointer: coarse` pyta wprost o to, czym gość klika.
   44 px to próg, poniżej którego trafianie robi się loterią.
   ⚠️ Linki w środku zdania są z tej reguły WYŁĄCZONE (WCAG 2.5.8): nie da
   się ich powiększyć bez rozpychania wierszy tekstu.
   ======================================================================== */
@media (pointer: coarse){
  .ch-nav a,
  .ch-nav .wp-block-navigation-item__content{ padding-block:1rem; }
  .ch-toggle{ min-height:2.75rem; }
  .ch-tel{ min-height:2.75rem; }
  .ch-btn,.wp-block-button__link,.ch-szukaj,.ch-rezerwuje{ min-height:2.75rem; }
  .ch-stopka a:not(.ch-inline),
  .ch-kanal a:not(.ch-inline){ display:inline-flex; align-items:center; min-height:2.75rem; }
  /* Kuba 30.09 (iPad): 44 px na każdy link w „Na stronie” rozstrzeliło kolumnę. 32 px z odstępem mieści się w WCAG 2.5.8
     (24 px) i trzyma rytm kolumny obok. */
  .ch-stopka nav a:not(.ch-inline){ min-height:2rem; }
  .ch-stopka a.ch-gps{ min-height:2rem; }   /* jak linki w „Na stronie”: adres nie rozjeżdża się na dotyku */
  .ch-stopka nav ul{ gap:.3rem; }
  /* Logo też jest linkiem do strony głównej, więc też celem dotyku. */
  .ch-logo a{ display:flex; align-items:center; min-height:2.75rem; }
  /* Cele urosły, więc nagłówek oddaje to, co może: własne wypełnienie
     i pusty zapas wokół przycisku. Bez tego pasek zjada ćwierć ekranu. */
  .ch-brandbar{ padding:.55rem var(--s2); gap:.55rem var(--s2); }
  .ch-brandbar .wp-block-buttons{ margin-block:0; }
  .ch-brandbar .wp-block-button{ margin:0; }
}

/* Mail w regulaminie (wymóg prawny) zapisany tak, żeby w kodzie strony nie było ciągu
   „chatynki@gmail.com” dla zbieraczy adresów; człowiek widzi i kopiuje normalny adres. */
.ch-bez-botow{ display:none; }
.ch-mail-reczny{ white-space:nowrap; }

/* ATRAKCJE (20.09): strona zbiorcza + trzy podstrony (/atrakcje/w-krynicy/ itd.).
   Przełącznik części = .ch-kotwice z linkami między stronami; karty 4∶3 (gospodarz 14.09);
   dziewięć kart ze zdjęciem na stronę (gospodarz 20.09: wszystkie atrakcje równe);
   film z produkcji (mp4 na serwerze) ładuje się dopiero po kliknięciu (preload="none"). */
.ch-kotwice a.ch-tu{ border-color:var(--copper); color:var(--amber); background:color-mix(in srgb,var(--copper) 14%, transparent); }
.ch-grupa-kart .ch-card img{ aspect-ratio:4/3; }
.ch-card .ch-body > .wp-block-buttons{ margin-top:auto; padding-top:var(--s2); }
.ch-film--atrakcje{ display:block; }
.ch-film video{ display:block; width:100%; aspect-ratio:16/9; object-fit:cover; background:#000; }
.ch-film figcaption{ padding:var(--s2) var(--s3); color:var(--muted); font-size:var(--t-small); line-height:1.5; }
/* Przełącznik części: linki siedzą w <p> (blok akapitu), więc to on musi zawijać jak siatka,
   inaczej na telefonie trzeci przycisk nachodzi na tekst pod spodem (zauważone 20.09). */
.ch-kotwice > p{ display:flex; flex-wrap:wrap; gap:var(--s2); margin:0; }
/* Wstęp pod paskiem przycisków (Atrakcje): większy odstęp — gospodarz 20.09. !important, bo flow
   WordPressa nadpisuje margines górny dziecka .ch-wrap (tak samo jak przy pasie wezwania). */
.ch-kotwice + .ch-wstep,.ch-blok + .ch-wstep{ margin-top:var(--s5) !important; }
/* 22.09, Domki (gospodarz): obok wstępu trzy skróty do sekcji 01–03; na komputerze po prawej,
   na telefonie pod tekstem. Numerki w tym samym chipie co tytuły sekcji, do których prowadzą. */
.ch-wstep--skoki{ display:grid; grid-template-columns:auto minmax(0,1fr); gap:var(--s4) var(--s5); align-items:center; }
.ch-wstep--skoki > .ch-tresc{ max-width:68ch; }
.ch-wstep--skoki > .ch-skoki{ order:-1; }  /* na komputerze skróty po lewej (gospodarz 22.09), w HTML tekst jest pierwszy */
.ch-skoki{ display:flex; flex-direction:column; min-width:min(100%, 300px); }
.ch-skoki .ch-ikona-skoku{ width:24px; height:24px; stroke:var(--amber); }
.ch-skoki a{
  display:grid; grid-template-columns:auto 1fr auto; gap:var(--s2); align-items:center;
  padding:.85rem 0; border-top:1px solid var(--line); color:var(--text); text-decoration:none;
  font:600 var(--t-body)/1.4 var(--font-ui); transition:color .3s var(--ease);  /* 22.09: większy i grubszy font, żeby skróty nie ginęły obok treści */
}
.ch-skoki a:last-child{ border-bottom:1px solid var(--line); }
.ch-skoki a:hover,.ch-skoki a:focus-visible{ color:var(--amber); }
.ch-skoki svg{ width:18px; height:18px; fill:none; stroke:var(--amber); stroke-width:1.5; stroke-linecap:round; stroke-linejoin:round; transition:transform .3s var(--ease); }
.ch-skoki a:hover svg,.ch-skoki a:focus-visible svg{ transform:translateX(4px); }
@media (max-width:900px){ .ch-wstep--skoki{ grid-template-columns:1fr; } .ch-wstep--skoki > .ch-skoki{ order:0; } }  /* na telefonie skróty pod tekstem */
/* 22.09, gospodarz (zrzut z iPada, Kontakt): odstęp pod nagłówkiem strony był nieproporcjonalnie
   większy niż reszta. Ma być taki jak odstęp tekstu tytułu sekcji od linii pod nim (--s3). */
.ch-hero + .ch-blok,.ch-hero + .ch-blok--zwarty{ padding-top:var(--s4); }  /* zmierzone: --s3 dawało 11 px, --s4 daje ~27 px jak tytuł od linii */
.ch-hero + .ch-wstep{ margin-top:var(--s4) !important; }
/* Blok dwóch kolumn użyty bezpośrednio w .ch-wrap (Atrakcje): ma trzymać szerokość treści,
   nie pełną (jego grid-column:1/-1 jest dla siatki .ch-domki na stronie głównej). */
.ch-wrap > .ch-tekst-2kol{ grid-column:tresc; }
/* Atrakcje, blok pod filmem: każdy akapit w swojej kolumnie (nie łamanie gazetowe, w którym
   nie widać, gdzie zaczyna się drugi akapit — gospodarz 20.09); nazwy własne pogrubione. */
.ch-wrap > .ch-tekst-2kol{ columns:auto; display:grid; grid-template-columns:1fr 1fr; gap:var(--s2) var(--s4); align-items:start; }
.ch-wrap > .ch-tekst-2kol h3{ grid-column:1 / -1; }
.ch-wrap > .ch-tekst-2kol p{ margin:0; }
.ch-wrap > .ch-tekst-2kol strong{ color:var(--text); font-weight:600; }
@media (max-width:700px){ .ch-wrap > .ch-tekst-2kol{ grid-template-columns:1fr; } .ch-wrap > .ch-tekst-2kol h3{ grid-column:auto; } }
/* Nagłówek bez przyciemniania (Cennik 20.09, Domki 22.09 — gospodarz: „wolałbym, żeby nie było
   przyciemniane”). Bez filtra i bez żadnej nakładki na zdjęciu; czytelność daje cień na samych literach. */
.ch-hero--bez-cienia .ch-hero-frame img{ filter:none; }
.ch-hero--bez-cienia .ch-hero-frame::after{ display:none; }
.ch-hero--bez-cienia .ch-hero-copy{ text-shadow:0 1px 2px rgb(0 0 0 / .55), 0 2px 24px rgb(0 0 0 / .4); }
/* Cennik: przycisk rezerwacji w panelu z tabelą (gospodarz 21.09). */
.ch-cennik-panel .wp-block-buttons{ margin-top:var(--s3); }
/* Cennik, panel z tabelą (gospodarz 21.09): nazwy sezonów pogrubione; tekst „To ceny przykładowe”
   i przycisk „Zarezerwuj pobyt” obok siebie na jednej wysokości (na telefonie pod sobą);
   większy oddech między ostatnim wierszem tabeli a tym tekstem. */
.ch-cennik--glowny thead th{ font-weight:700; }
.ch-cennik--glowny thead th span{ font-weight:400; }
.ch-cennik-stopka{ display:flex; align-items:center; gap:var(--s4); margin-top:var(--s4) !important; }  /* !important: flow WordPressa nadpisuje margines dziecka panelu. Tekst na całą szerokość, przycisk przy prawej krawędzi (wariant „środek prawej połowy” odrzucony 21.09: za dużo pustki) */
.ch-cennik-stopka .ch-pod-tabela{ flex:1; margin:0; }
.ch-cennik-stopka .wp-block-buttons{ flex:none; margin:0; }
@media (max-width:700px){ .ch-cennik-stopka{ flex-direction:column; align-items:flex-start; gap:var(--s3); } }
/* Cennik: zastrzeżenie prawne jako ostatnie zdanie pod tabelą, drobniej (gospodarz 21.09). */
.ch-prawne{ display:block; margin-top:.6rem; font-size:var(--t-small); color:var(--muted); opacity:.85; }
/* Cennik, „Wyposażenie oraz zaplecze” (gospodarz 21.09): jedno zdjęcie 3∶2 + pięć grup w siatce trzech kolumn. */
.ch-wyposazenie .ch-uklad-media img{ aspect-ratio:3/2; }
.ch-wyposazenie h3{ font-size:var(--t-h3); margin:0 0 .5rem; }
@media (min-width:900px){ .ch-wyposazenie{ grid-template-columns:repeat(3,1fr); } }  /* na szerokim ekranie auto-fit dawał 4+2 komórki */
/* FAQ (21.09, wersja 3): karty bez rozwijania — 15 pytań + 3 zdjęcia = 18 kart w trzech kolumnach.
   Gospodarz: rozwijanie w siatce skacze, karty z widoczną odpowiedzią są czytelniejsze. */
.ch-faq-karty .ch-etykieta,.ch-ikona-karty .ch-etykieta{ font:600 var(--t-micro)/1.4 var(--font-ui); letter-spacing:var(--tracking-wide); text-transform:uppercase; color:var(--amber); margin:0 0 .5rem; }
.ch-faq-karty .ch-card h3,.ch-ikona-karty .ch-card h3{ font-size:var(--t-h3); }

@media (min-width:900px){ .ch-faq-karty,.ch-ikona-karty{ grid-template-columns:repeat(3,1fr); } }
/* FAQ: ikonka cienką linią nad etykietą każdego pytania (gospodarz 21.09), SVG w kodzie, bez biblioteki. */
.ch-faq-ikona{ display:block; width:30px; height:30px; margin:0 0 .75rem; fill:none; stroke:var(--amber); stroke-width:1.5; stroke-linecap:round; stroke-linejoin:round; }

/* Przycisk „na górę” (gospodarz 22.09). Ukryty do 600 px przewinięcia, klasa .is-widoczny ze skryptu. */
.ch-do-gory{
  position:fixed; right:var(--s3); bottom:calc(var(--s3) + env(safe-area-inset-bottom, 0px)); z-index:40;
  width:44px; height:44px; display:grid; place-items:center;
  background:var(--surface); border:1px solid var(--line); border-radius:var(--r); box-shadow:var(--shadow);
  color:var(--amber); opacity:0; transform:translateY(8px); pointer-events:none;
  transition:opacity .35s var(--ease), transform .35s var(--ease), border-color .35s var(--ease);
}
.ch-do-gory.is-widoczny{ opacity:1; transform:none; pointer-events:auto; }
.ch-do-gory:hover,.ch-do-gory:focus-visible{ border-color:color-mix(in srgb,var(--copper) 55%, var(--line)); }
.ch-do-gory svg{ width:20px; height:20px; fill:none; stroke:currentColor; stroke-width:1.5; stroke-linecap:round; stroke-linejoin:round; }

/* ===========================================================================
   24. REZERWACJA: WTYCZKA chatynki-rezerwacja W NOWYM WYGLĄDZIE (25.09)
   Wtyczka bez zmian (2.0.28, ta sama co na chatynki.pl): te same kroki, pola
   i kolejność (Kuba 25.09: „przełóżmy tylko to, co jest obecnie, do nowego
   wyglądu”). Motyw zmienia wyłącznie wygląd, na wzór bloków zastępczych
   z głównej (.ch-odpowiedz, .ch-dane) i czerwieni „Sprawdź” z hero.
   ⚠️ Każdy selektor zaczyna się od :root: arkusz wtyczki celuje
   w `#chatynki-rezerwacja-app .x`, więc jedna klasa więcej wygrywa niezależnie
   od kolejności wczytania arkuszy.
   ⚠️ Wtyczka ma własne zmienne o nazwach motywu (--bg, --line, --shadow).
   `inherit` oddaje im wartości strony, więc reszta jej reguł sama przechodzi
   na kolory motywu, także po przełączeniu jasny/ciemny.
   ⚠️ !important wyłącznie tam, gdzie skrypt wtyczki wpisuje kolor wprost
   w element (podpowiedź przy przerwie w wyborze, notka o psie, stara migawka).
   ======================================================================== */
.ch-rez-siatka{ display:grid; grid-template-columns:minmax(0,2fr) minmax(0,1fr); gap:var(--s3); align-items:start; }
/* Karty z prawej w naturalnej wysokości: formularz jest dwa razy wyższy od nich, a rozciągnięte
   do niego (jak na Kontakcie) miały po 300 px pustki pod tekstem. */
.ch-rez-boczne{ display:flex; flex-direction:column; gap:var(--s3); }
.ch-rez-boczne .ch-lista{ margin-top:var(--s2); }
/* iPad w pionie: kalendarz w 2/3 szerokości miałby dni po 37 px, za małe pod palec. */
@media (max-width:1100px){
  .ch-rez-siatka{ grid-template-columns:1fr; }
  .ch-rez-boczne{ display:grid; grid-template-columns:repeat(auto-fit,minmax(16rem,1fr)); }
}

:root #chatynki-rezerwacja-app{
  --bg:inherit; --line:inherit; --shadow:inherit;
  --card:var(--surface); --ink:var(--text); --ink-soft:var(--muted);
  --select:var(--copper); --select-ink:var(--on-copper);
  /* Czerwień „Sprawdź” o ton ciemniejsza niż w hero (#EF3A2C): biały napis ma na niej 4,8∶1 zamiast 3,95∶1.
     Minimum Kuby dla tego przycisku to 4,5∶1 (decyzja 30.08, komentarz przy #showPriceBtn we wtyczce). */
  --accent:#D9301F; --accent-dark:#C0281A;
  --radius:10px;
  /* Kolory znaczące, jak w dzisiejszym formularzu: zielony = wolne i rezerwacja,
     żółty = zwróć uwagę, czerwony = coś nie tak. Ciemny motyw ma je przygaszone. */
  --rez-ok-bg:rgba(76,175,143,.12);   --rez-ok-tx:#4CAF8F;   --rez-ok-linia:rgba(76,175,143,.38);
  --rez-uwaga-bg:rgba(245,196,81,.10); --rez-uwaga-tx:#F5C451; --rez-uwaga-linia:rgba(245,196,81,.32);
  --rez-blad-bg:rgba(239,58,44,.12);  --rez-blad-tx:#FF8A80; --rez-blad-linia:rgba(239,58,44,.40);
  /* Zieleń przycisku ciemniejsza niż --zielony: biały napis na #4CAF8F ma kontrast 2,7∶1, tu 5∶1. */
  --rez-zielony:#2E7D62; --rez-zielony-hi:#276B54;
  --rez-dzien:color-mix(in srgb,var(--text) 7%,var(--surface));
  --rez-dzien-linia:var(--line-strong);
  --rez-przeszly:color-mix(in srgb,var(--muted) 55%,transparent);
  --free:var(--rez-ok-bg); --free-ink:var(--rez-ok-tx);
  --busy-bg:var(--rez-blad-bg); --busy-ink:var(--rez-blad-tx);
  background:transparent; color:var(--text); padding:0;
  font-family:var(--font-ui); line-height:1.5;
}
:root[data-theme="light"] #chatynki-rezerwacja-app{
  --rez-ok-bg:#E6F2EC;    --rez-ok-tx:#2B7A5C;    --rez-ok-linia:#BFDCCD;
  --rez-uwaga-bg:#FBF6EC; --rez-uwaga-tx:#7A6528; --rez-uwaga-linia:#ECDFC4;
  --rez-blad-bg:#F9E3E1;  --rez-blad-tx:#A5261C;  --rez-blad-linia:#EBC3BF;
  --rez-dzien:#FFFFFF;
}

/* ---- karty kroków i pasek „od … zł” ---- */
:root #chatynki-rezerwacja-app .card{ padding:var(--s3); margin-bottom:var(--s3); }
:root #chatynki-rezerwacja-app .step-label{
  font:600 var(--t-micro)/1.5 var(--font-ui); letter-spacing:.22em; text-transform:uppercase;
  color:var(--copper); margin-bottom:var(--s2);
}
:root #chatynki-rezerwacja-app .step-label .mini{ font:400 var(--t-small)/1.4 var(--font-ui); letter-spacing:0; color:var(--muted); }
:root #chatynki-rezerwacja-app .cena-od{
  background:var(--surface); box-shadow:none; border:1px solid var(--line); border-left:3px solid var(--copper);
  border-radius:var(--radius); padding:var(--s2) var(--s3); margin-bottom:var(--s3); gap:var(--s2);
}
:root #chatynki-rezerwacja-app .cena-od-kwota{ font:400 var(--t-body)/1.3 var(--font-ui); color:var(--text); letter-spacing:0; }
:root #chatynki-rezerwacja-app .cena-od-kwota b{ font:800 var(--t-h3)/1 var(--font-display); color:var(--copper); }
:root #chatynki-rezerwacja-app .cena-od-drobne{ font-size:var(--t-small); color:var(--muted); margin-top:.3rem; }
:root #chatynki-rezerwacja-app .cena-od-drobne b{ color:var(--text); font-weight:600; }

/* ---- pola: jak wiersze danych z głównej (.ch-wiersz, .ch-pole-w) ---- */
:root #chatynki-rezerwacja-app label{ font:700 var(--t-small)/1.3 var(--font-ui); color:var(--text); }
:root #chatynki-rezerwacja-app :is(input,select,textarea){
  /* 16 px to minimum: przy mniejszym iPhone przybliża stronę po dotknięciu pola. */
  font:500 max(1rem,var(--t-body))/1.3 var(--font-ui);
  color:var(--text); background:var(--bg); color-scheme:dark;
  border:1px solid var(--line-strong); border-radius:8px; padding:.7rem .9rem; min-height:3rem;
  transition:border-color .3s var(--ease), box-shadow .3s var(--ease);
}
:root[data-theme="light"] #chatynki-rezerwacja-app :is(input,select,textarea){ color-scheme:light; }
/* Safari (zrzut Kuby 26.09): select rysował po swojemu, niższy od pól obok; autouzupełnianie malowało pola na żółto. */
:root #chatynki-rezerwacja-app select{
  -webkit-appearance:none; appearance:none; padding-right:2.4rem;
  background:var(--bg) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='M1 1.5l5 5 5-5' fill='none' stroke='%238391A5' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") no-repeat right .9rem center;
}
:root #chatynki-rezerwacja-app input:-webkit-autofill{ box-shadow:inset 0 0 0 100px var(--bg); -webkit-text-fill-color:var(--text); caret-color:var(--text); }
:root #chatynki-rezerwacja-app :is(input,textarea)::placeholder{ color:var(--muted); opacity:.6; }
:root #chatynki-rezerwacja-app :is(input,select,textarea):focus{
  outline:none; border-color:var(--copper);
  box-shadow:0 0 0 3px color-mix(in srgb,var(--copper) 26%,transparent);
}
:root #chatynki-rezerwacja-app .pole-w-linii{ gap:var(--s2); }
:root #chatynki-rezerwacja-app .pole-w-linii.etykieta-stala{ margin-top:.75rem; }
/* Wspólna szerokość etykiet (decyzja Kuby 26.08: pola zaczynają się w jednej linii), płynna: 108 px na telefonie, 128 px na komputerze. */
:root #chatynki-rezerwacja-app .pole-w-linii.etykieta-stala label{ flex:0 0 clamp(6.75rem, 6rem + 2.2vw, 8.25rem); }
:root #chatynki-rezerwacja-app .pole-zaczepka{
  min-height:3rem; padding:.7rem .9rem; border:1px dashed var(--line-strong); border-radius:8px;
  background:transparent; color:var(--muted); font:500 var(--t-small)/1.4 var(--font-ui);
}
:root #chatynki-rezerwacja-app .pole-zaczepka:hover{ border-color:var(--copper); color:var(--text); background:transparent; }
:root #chatynki-rezerwacja-app .checkbox-row{ gap:.6rem; margin-top:var(--s2); }
:root #chatynki-rezerwacja-app .checkbox-row input{ min-height:0; width:1.1rem; height:1.1rem; padding:0; accent-color:var(--copper); margin-top:.2rem; }
:root #chatynki-rezerwacja-app .checkbox-row label{ font:400 var(--t-small)/1.5 var(--font-ui); color:var(--muted); }

/* ---- podpowiedzi i komunikaty ---- */
:root #chatynki-rezerwacja-app .cal-hint{
  background:var(--rez-uwaga-bg); color:var(--rez-uwaga-tx); border:1px solid var(--rez-uwaga-linia);
  border-radius:8px; font:500 var(--t-small)/1.45 var(--font-ui); padding:.6rem .9rem;
}
:root #chatynki-rezerwacja-app #calHint[style*="background"]{
  background:var(--rez-blad-bg) !important; color:var(--rez-blad-tx) !important; border-color:var(--rez-blad-linia);
}
:root #chatynki-rezerwacja-app #calHint ~ .cal-hint,
:root #chatynki-rezerwacja-app #petNote{
  background:var(--rez-uwaga-bg) !important; color:var(--rez-uwaga-tx) !important; border:1px solid var(--rez-uwaga-linia) !important;
}
:root #chatynki-rezerwacja-app #petNote{ margin-top:.75rem; }
:root #chatynki-rezerwacja-app #petNote[style*="232, 240, 230"]{
  background:var(--rez-ok-bg) !important; color:var(--rez-ok-tx) !important; border-color:var(--rez-ok-linia) !important;
}
:root #chatynki-rezerwacja-app .err{ background:var(--rez-blad-bg); color:var(--rez-blad-tx); border:1px solid var(--rez-blad-linia); border-radius:8px; font-size:var(--t-small); }
:root #chatynki-rezerwacja-app .minstay{
  background:var(--rez-blad-bg); color:var(--text); border:0; border-left:3px solid var(--accent);
  border-radius:8px; font-size:var(--t-small);
}
:root #chatynki-rezerwacja-app .minstay strong{ color:var(--rez-blad-tx); }
:root #chatynki-rezerwacja-app .horyzont-info{
  background:transparent; border:1px solid var(--line); border-left:3px solid var(--line-strong);
  border-radius:8px; color:var(--muted); font-size:var(--t-small);
}
:root #chatynki-rezerwacja-app .horyzont-info strong{ color:var(--text); }

/* ---- kalendarz ---- */
:root #chatynki-rezerwacja-app .cal-head .mth{ font:700 var(--t-body)/1.3 var(--font-ui); }
:root #chatynki-rezerwacja-app .cal-head button{
  width:2.5rem; height:2.5rem; border:1px solid var(--line-strong); border-radius:6px;
  background:transparent; color:var(--text); font:400 1.25rem/1 var(--font-ui); cursor:pointer;
  transition:border-color .3s var(--ease), color .3s var(--ease);
}
:root #chatynki-rezerwacja-app .cal-head button:hover{ border-color:var(--copper); color:var(--copper); }
:root #chatynki-rezerwacja-app .cal-month-title{ font:600 var(--t-micro)/1.3 var(--font-ui); letter-spacing:var(--tracking-wide); color:var(--muted); }
:root #chatynki-rezerwacja-app .dow{ font:600 var(--t-micro)/1.3 var(--font-ui); color:var(--muted); }
:root #chatynki-rezerwacja-app .cal-grid{ gap:4px; }
:root #chatynki-rezerwacja-app .day{ border-radius:6px; font:600 var(--t-small)/1 var(--font-ui); }
/* Doba do kliknięcia: jaśniejsza płytka z obrysem. Przeszła: sama cyfra, bez płytki,
   żeby różnicę „wolno kliknąć / nie wolno” widać było bez czytania (lekcja z 25.08). */
:root #chatynki-rezerwacja-app .day.doba{
  background:var(--rez-dzien); border:1px solid var(--rez-dzien-linia); box-shadow:none;
  color:var(--text); font-weight:700;
}
:root #chatynki-rezerwacja-app .day.doba:hover{
  background:color-mix(in srgb,var(--copper) 16%,var(--rez-dzien)); border-color:var(--copper); box-shadow:none;
}
:root #chatynki-rezerwacja-app .day.doba:active{ background:color-mix(in srgb,var(--copper) 28%,var(--rez-dzien)); box-shadow:none; }
:root #chatynki-rezerwacja-app .day.doba.selected{ border-color:var(--copper); box-shadow:none; }
:root #chatynki-rezerwacja-app .day.past{ background:transparent; border:1px solid transparent; color:var(--rez-przeszly); font-weight:500; }
:root #chatynki-rezerwacja-app .day.poza-horyzontem,
:root #chatynki-rezerwacja-app .day.poza-horyzontem:hover{
  background:transparent; border:1px dashed var(--line); color:var(--rez-przeszly); font-weight:500;
}
:root #chatynki-rezerwacja-app .day.season-h::after{ bottom:5px; }
:root #chatynki-rezerwacja-app .legend{ font-size:var(--t-micro); color:var(--muted); gap:var(--s2); }
:root #chatynki-rezerwacja-app .dot{ border-radius:3px; }
:root #chatynki-rezerwacja-app .dates-display{ gap:var(--s2); }
:root #chatynki-rezerwacja-app .date-box{ border:1px dashed var(--line-strong); border-radius:8px; padding:.6rem .9rem; }
:root #chatynki-rezerwacja-app .date-box .lbl{ font:600 var(--t-micro)/1.4 var(--font-ui); letter-spacing:var(--tracking-wide); color:var(--muted); }
:root #chatynki-rezerwacja-app .date-box .val{ font:700 var(--t-body)/1.4 var(--font-ui); color:var(--text); }
:root #chatynki-rezerwacja-app .date-box.empty .val{ color:var(--muted); font-weight:400; }
:root #chatynki-rezerwacja-app .cal-loader{ background:transparent; border:1px dashed var(--line-strong); border-radius:var(--radius); }
:root #chatynki-rezerwacja-app .cal-loader-dots span{ background:var(--muted); animation-name:chRezFala; }
:root #chatynki-rezerwacja-app .cal-loader-txt{ font:700 var(--t-small)/1.4 var(--font-ui); color:var(--text); }
@keyframes chRezFala{ 0%,100%{ opacity:.3; transform:scale(.8); } 40%{ opacity:1; transform:scale(1.15); } }
@media (prefers-reduced-motion:reduce){ :root #chatynki-rezerwacja-app .cal-loader-dots span{ animation:none; opacity:.7; } }

/* ---- przyciski: „Sprawdź” czerwony jak w hero, „Rezerwuję” zielony jak na głównej ---- */
:root #chatynki-rezerwacja-app .cta{
  font:800 var(--t-body)/1.2 var(--font-display); letter-spacing:.01em;
  border-radius:6px; padding:.95rem 1.2rem; min-height:3.4rem; margin-top:var(--s3);
  transition:background-color .3s var(--ease);
}
:root #chatynki-rezerwacja-app #showPriceBtn{ background:var(--accent); color:#fff; }
:root #chatynki-rezerwacja-app #showPriceBtn:hover{ background:var(--accent-dark); }
:root #chatynki-rezerwacja-app .cta-reserve{ margin-top:0; background:var(--rez-zielony); color:#fff; }
:root #chatynki-rezerwacja-app .cta-reserve:hover{ background:var(--rez-zielony-hi); }
:root #chatynki-rezerwacja-app .cta:disabled,
:root #chatynki-rezerwacja-app .cta:disabled:hover{ background:var(--disabled-bg); color:var(--disabled-tx); }
:root #chatynki-rezerwacja-app .cta-oslona::after{ background:var(--text); color:var(--bg); font:500 var(--t-micro)/1.4 var(--font-ui); }
:root #chatynki-rezerwacja-app .cta-oslona::before{ border-top-color:var(--text); }
:root #chatynki-rezerwacja-app .clear-btn{ font-size:var(--t-small); color:var(--muted); }
:root #chatynki-rezerwacja-app .clear-btn:hover{ color:var(--copper); }

/* ---- odpowiedź: termin zajęty, propozycje, cena (wzór: .ch-odpowiedz z głównej) ---- */
:root #chatynki-rezerwacja-app .wynik{ border-radius:var(--radius); font-size:var(--t-body); padding:var(--s2) var(--s3); }
:root #chatynki-rezerwacja-app .wynik-tak{ background:var(--rez-ok-bg); color:var(--rez-ok-tx); border-color:var(--rez-ok-linia); }
:root #chatynki-rezerwacja-app .wynik-czesc{ background:var(--rez-uwaga-bg); color:var(--rez-uwaga-tx); border-color:var(--rez-uwaga-linia); }
:root #chatynki-rezerwacja-app .wynik-nie{ background:var(--rez-blad-bg); color:var(--rez-blad-tx); border-color:var(--rez-blad-linia); }
:root #chatynki-rezerwacja-app .wynik-info{ background:transparent; color:var(--text); border-color:var(--line); }
:root #chatynki-rezerwacja-app .wynik-opcja{
  background:var(--rez-zielony); border:0; border-radius:8px; box-shadow:none; color:#fff;
}
:root #chatynki-rezerwacja-app .wynik-opcja:hover{ background:var(--rez-zielony-hi); filter:none; box-shadow:none; }
:root #chatynki-rezerwacja-app .wynik-drobne{ border-top-color:var(--line); }
:root #chatynki-rezerwacja-app .price-out{ border:1px solid var(--line); border-radius:var(--radius); margin-top:var(--s3); }
:root #chatynki-rezerwacja-app .price-hero{ background:transparent; border:0; border-bottom:1px solid var(--line); color:var(--text); padding:var(--s3); }
:root #chatynki-rezerwacja-app .price-hero .lbl{ font:600 var(--t-micro)/1.3 var(--font-ui); letter-spacing:.12em; color:var(--muted); }
:root #chatynki-rezerwacja-app .price-hero .big{ font:700 var(--t-liczba)/1 var(--font-display); color:var(--text); margin-top:.3rem; }
:root #chatynki-rezerwacja-app .price-hero .per-sub{ font:400 var(--t-micro)/1.3 var(--font-ui); text-transform:uppercase; letter-spacing:.12em; color:var(--muted); margin-top:.4rem; }
:root #chatynki-rezerwacja-app .price-hero .total-line{ font:400 var(--t-small)/1.4 var(--font-ui); color:var(--text); border-top-color:var(--line); }
:root #chatynki-rezerwacja-app .price-actions{ padding:var(--s3) var(--s3) 0; }
:root #chatynki-rezerwacja-app .success{ background:var(--rez-ok-bg); color:var(--rez-ok-tx); border:1px solid var(--rez-ok-linia); border-radius:var(--radius); font:700 var(--t-body)/1.45 var(--font-ui); margin:var(--s2) var(--s3); }
:root #chatynki-rezerwacja-app .cr-benefits{ border-top:0; margin:var(--s2) 0 0; padding:var(--s2) var(--s3); }
:root #chatynki-rezerwacja-app .cr-benefits .b-item{ font:500 var(--t-small)/1.45 var(--font-ui); color:var(--text); }
:root #chatynki-rezerwacja-app .cr-benefits .b-ico{ color:var(--rez-ok-tx); }
:root #chatynki-rezerwacja-app .cr-benefits .b-more span{ color:var(--muted); }
:root #chatynki-rezerwacja-app .disclaimer-soft{ font-size:var(--t-micro); color:var(--muted); }
:root #chatynki-rezerwacja-app .price-body{ padding:0 var(--s3) var(--s2); font-size:var(--t-small); }
:root #chatynki-rezerwacja-app .price-body .line{ padding:.6rem .2rem; border-bottom:1px solid var(--line); gap:var(--s2); }
:root #chatynki-rezerwacja-app .price-body .line .k{ color:var(--muted); }
:root #chatynki-rezerwacja-app .price-body .line .v{ color:var(--text); font-weight:700; text-align:right; }
:root #chatynki-rezerwacja-app .deposit{ background:var(--rez-uwaga-bg); color:var(--rez-uwaga-tx); border-top:1px solid var(--rez-uwaga-linia); font-size:var(--t-small); padding:var(--s2) var(--s3); }
:root #chatynki-rezerwacja-app .cr-footer-meta{ font-size:var(--t-micro); color:var(--muted); opacity:.8; }

/* ---- rezerwacja w dwóch krokach pod hero (26.09, Kuba: cena od razu, projekt z Canvy, potem dwa kroki) ----
   Wskaźnik kroków (strzałki w prawo, nieklikalne), pod nim okno ze slajdami w jednym rzędzie, przesuwane w prawo:
   1 terminy z ceną, 2 termin i cena w jednym wierszu, dane i „Zarezerwuj wstępnie”, 3 podziękowanie. Kuba 26.09: sekcja
   nie rośnie w dół i na dużym monitorze nie skacze, więc od 768 px okno ma wysokość najwyższego slajdu (JS); na telefonie
   aktywnego. */
.ch-rez-kroki{ padding-top:var(--s4); width:100%; max-width:60rem; justify-self:center; scroll-margin-top:var(--wys-naglowka, 5rem); }
.ch-rez-kroki[hidden]{ display:none; }
/* Kuba 26.09: „więcej miękkości przy lądowaniu”: sekcja wjeżdża łagodnie przy pierwszym „Sprawdź”, wiersze pojawiają się
   po kolei (także przy każdym kolejnym „Sprawdź”, bo to nowe elementy), a krok 2 wsuwa się wolniej z przenikaniem. */
.ch-rez-okno{ overflow:hidden; overflow:clip; transition:height .6s var(--ease); }   /* clip: przewinięcie do pola nie przesuwa kroków w oknie (27.09) */
.ch-rez-tor{ display:flex; align-items:flex-start; transition:transform .7s var(--ease); }
.ch-rez-krok{ flex:0 0 100%; min-width:0; padding:3px; transition:opacity .6s var(--ease); }   /* 3 px: obrys i cień kart nie przycięte przez okno */
.ch-rez-krok[inert]{ opacity:0; }
@keyframes ch-rez-wejscie{ from{ opacity:0; transform:translateY(14px); } to{ opacity:1; transform:none; } }
.ch-rez-kroki:not([hidden]){ animation:ch-rez-wejscie .7s var(--ease) both; }
.ch-rez-wyniki > *, .ch-rez-lista > *{ animation:ch-rez-wejscie .55s var(--ease) both; }
.ch-rez-lista > :nth-child(1){ animation-delay:.15s; }
.ch-rez-lista > :nth-child(2){ animation-delay:.23s; }
.ch-rez-lista > :nth-child(3){ animation-delay:.31s; }
.ch-rez-lista > :nth-child(4){ animation-delay:.39s; }
.ch-rez-lista > :nth-child(n+5){ animation-delay:.47s; }
@media (prefers-reduced-motion:reduce){
  .ch-rez-okno,.ch-rez-tor,.ch-rez-krok{ transition:none; }
  .ch-rez-kroki:not([hidden]),.ch-rez-wyniki > *,.ch-rez-lista > *{ animation:none; }
}

/* Wskaźnik: trzy strzałki w prawo zazębione o grot. Zrobione = ptaszek na jasnej zieleni, bieżący = pełna zieleń
   przycisków (biały 5∶1), dalsze wyciszone. */
.ch-rez-etapy{ --grot:.9rem; display:flex; margin:0 3px var(--s3); padding:0; list-style:none; border-radius:8px; overflow:hidden; }
.ch-rez-etapy li{
  flex:1 1 0; min-width:0; display:flex; margin:0;
  background:var(--surface); color:var(--muted); font:700 var(--t-small)/1.2 var(--font-ui); white-space:nowrap;
  clip-path:polygon(0 0, calc(100% - var(--grot)) 0, 100% 50%, calc(100% - var(--grot)) 100%, 0 100%, var(--grot) 50%);
}
.ch-rez-etapy li + li{ margin-left:calc(3px - var(--grot)); }
.ch-rez-etapy li:first-child{ clip-path:polygon(0 0, calc(100% - var(--grot)) 0, 100% 50%, calc(100% - var(--grot)) 100%, 0 100%); }
.ch-rez-etapy li:last-child{ clip-path:polygon(0 0, 100% 0, 100% 100%, 0 100%, var(--grot) 50%); }
.ch-rez-etap-nr{
  flex:none; display:inline-grid; place-items:center; width:1.5rem; height:1.5rem; border-radius:50%;
  border:1.5px solid currentColor; font:800 var(--t-micro)/1 var(--font-ui);
}
.ch-rez-etap{
  flex:1 1 auto; min-width:0; display:flex; align-items:center; justify-content:center; gap:.55rem;
  min-height:2.75rem; padding:.4rem calc(var(--grot) + .5rem); margin:0;
  background:none; border:0; color:inherit; font:inherit; cursor:default;
}
/* Kuba 26.09: z kroku 2 wraca się do terminów kliknięciem w krok 1, bez osobnego przycisku „wróć”. */
button.ch-rez-etap:not(:disabled){ cursor:pointer; }
button.ch-rez-etap:not(:disabled):hover .ch-rez-etap-tekst{ text-decoration:underline; text-underline-offset:3px; }
button.ch-rez-etap:focus-visible{ outline:2px solid currentColor; outline-offset:-5px; }
.ch-rez-etap-tekst{ overflow:hidden; text-overflow:ellipsis; }
.ch-rez-etapy li[aria-current="step"]{ background:#2E7D62; color:#fff; }
.ch-rez-etapy li.ch-rez-etap--zrobiony{ background:color-mix(in srgb, #4CAF8F 16%, var(--surface)); color:#4CAF8F; }
:root[data-theme="light"] .ch-rez-etapy li:not([aria-current]){ background:color-mix(in srgb, var(--line) 55%, var(--surface)); }
:root[data-theme="light"] .ch-rez-etapy li.ch-rez-etap--zrobiony{ background:color-mix(in srgb, #4CAF8F 18%, var(--surface)); color:#2B7A5C; }
.ch-rez-etap--zrobiony .ch-rez-etap-nr{ background:#2E7D62; border-color:#2E7D62; color:#fff; }
@media (max-width:560px){
  /* Telefon: nazwa tylko przy bieżącym kroku, przy pozostałych numer albo ptaszek. */
  .ch-rez-etapy:has([aria-current]) li:not([aria-current]){ flex:0 0 4.25rem; }
  .ch-rez-etapy li:not([aria-current]) .ch-rez-etap-tekst{ display:none; }
}

.ch-rez-komunikat{
  margin:0 0 var(--s3); padding:var(--s2) var(--s3); border:1px solid var(--line); border-left:3px solid var(--line-strong);
  border-radius:8px; background:var(--surface); color:var(--text); font-size:var(--t-small);
}
.ch-rez-komunikat a,.ch-rez-podtytul a{ color:var(--link); font-weight:700; }
.ch-rez-komunikat--blad{ border-left-color:#D9301F; }
.ch-rez-rezerwuj:disabled{ opacity:.7; cursor:progress; }

/* Krok 1: wyniki. Zielony = wolne (język dzisiejszego formularza), czerwony = zajęte. */
.ch-rez-naglowek{ display:flex; align-items:center; gap:.75rem; margin:0 0 var(--s3); font:700 var(--t-h3)/1.25 var(--font-display); }
.ch-rez-naglowek--wolne{ color:#4CAF8F; }
.ch-rez-naglowek--zajete{ color:#FF8A80; }
:root[data-theme="light"] .ch-rez-naglowek--wolne{ color:#2B7A5C; }
:root[data-theme="light"] .ch-rez-naglowek--zajete{ color:#A5261C; }
.ch-rez-podtytul{ margin:var(--s3) 0 var(--s2); color:var(--muted); font:600 var(--t-small)/1.45 var(--font-ui); }
/* Kuba 26.09: terminy jako wiersze, przycisk na końcu wiersza, nie kafelki; potem „niewielki odstęp, żeby było widać,
   że to jest osobne”. */
.ch-rez-lista{ display:grid; gap:.4rem; }
.ch-rez-wiersz{
  display:grid; grid-template-columns:minmax(0,1fr) auto auto; align-items:center;
  gap:.5rem var(--s3); padding:.7rem var(--s3);
  background:var(--surface); border:1px solid var(--line); border-radius:10px;
}
/* Termin specjalny (święta, długi weekend, ferie) wybity (Kuba 26.09, poprawki 27.09: „grubszy pionowy pasek, na nim
   gwiazdka”, potem „coś beżowego czy żółtego zamiast granatu”): szeroki złoty pasek (złoto gwiazdek z opinii, #F5C451)
   z granatową gwiazdką, tło lekko beżowe. */
.ch-rez-wiersz--specjalny{
  position:relative; padding-left:calc(1.6rem + var(--s3));
  background:color-mix(in srgb, #F5C451 4%, var(--surface));   /* w ciemnym więcej wychodziło szarobrązowo */
  border-color:color-mix(in srgb, #F5C451 45%, var(--line));
  box-shadow:inset 1.6rem 0 0 #F5C451;
}
:root[data-theme="light"] .ch-rez-wiersz--specjalny{ background:color-mix(in srgb, #F5C451 10%, var(--surface)); }
.ch-rez-wiersz--specjalny::before{
  content:"★"; position:absolute; inset:0 auto 0 0; width:1.6rem; display:grid; place-items:center;
  color:#1F2D3D; font-size:.95rem;
}
.ch-rez-wiersz--specjalny .ch-rez-opcja-napis{ color:var(--text); }
/* Kuba 27.09: wolny termin gościa w kroku 1 w inwersji, cały wiersz zielony zamiast napisu „Twój termin jest wolny”.
   Po id, bo w kroku 2 ten sam wiersz zostaje jasny z zieloną kreską. */
#chRezWyniki .ch-rez-wiersz--glowny{ background:#2E7D62; border-color:#2E7D62; box-shadow:none; padding-block:1.25rem; }   /* Kuba 27.09: „ciut grubszy”, jak termin specjalny */
#chRezWyniki .ch-rez-wiersz--glowny :is(strong, span){ color:#fff; }
#chRezWyniki .ch-rez-wiersz--glowny .ch-rez-wybierz{ background:#fff; color:#2E7D62; }
#chRezWyniki .ch-rez-wiersz--glowny .ch-rez-wybierz:hover{ background:#E3F1EB; }
.ch-rez-lista > .ch-rez-podtytul:first-child{ margin-top:0; }
/* Kuba 27.09: trzy argumenty za rezerwacją bezpośrednią pod hero (przed „Sprawdź”), nad „Gotowymi terminami”: bez ramki,
   na tle strony, ikona i hasło, wchodzą po kolei z pauzą („bez pośredników, chwila odpoczynku, szybka odpowiedź…”). */
.ch-rez-powody{ display:flex; flex-wrap:wrap; justify-content:center; gap:var(--s2) var(--s5); }
.ch-rez-powody > div{ display:flex; align-items:center; gap:.6rem; font:600 var(--t-body)/1.3 var(--font-ui); color:var(--text); }
.js-reveal .ch-rez-powody > .ch-reveal:nth-child(1){ transition-delay:.1s; }
.js-reveal .ch-rez-powody > .ch-reveal:nth-child(2){ transition-delay:.7s; }
.js-reveal .ch-rez-powody > .ch-reveal:nth-child(3){ transition-delay:1.3s; }
.ch-rez-powody svg{ flex:none; width:24px; height:24px; color:var(--copper); }
/* Kuba 27.09: „sekcja się rozciąga”; odstęp nad i pod hasłami jak od paska kroków do pierwszego terminu (--s3), przed
   „Sprawdź” do następnej sekcji --s5 zamiast --s6. */
.ch-blok.ch-rez-powody-pas{ padding-top:var(--s3); }
.ch-rez-powody-pas + .ch-rez-kroki{ padding-top:var(--s3); }
.ch-rez-kroki[hidden] + .ch-blok{ padding-top:var(--s5); }
.ch-rez-wiersz--glowny{ box-shadow:inset 3px 0 0 #4CAF8F; }
.ch-rez-wiersz--glowny .ch-rez-opcja-napis{ color:#4CAF8F; }
:root[data-theme="light"] .ch-rez-wiersz--glowny .ch-rez-opcja-napis{ color:#2B7A5C; }
.ch-rez-wiersz-termin{ display:flex; flex-direction:column; gap:.1rem; min-width:0; }
.ch-rez-wiersz-termin strong{ font:700 var(--t-body)/1.3 var(--font-display); color:var(--text); }
.ch-rez-wiersz-cena{ display:flex; flex-direction:column; align-items:flex-end; text-align:right; }
.ch-rez-wiersz-cena strong{ font:700 var(--t-h3)/1.2 var(--font-display); color:var(--text); }
.ch-rez-wiersz-cena span{ font:400 var(--t-micro)/1.35 var(--font-ui); color:var(--muted); }
.ch-rez-opcja-napis{ margin:0 0 .15rem; font:700 var(--t-micro)/1.3 var(--font-ui); letter-spacing:var(--tracking-wide); text-transform:uppercase; color:var(--copper); }
.ch-rez-opcja-dni{ margin:0; font:400 var(--t-small)/1.45 var(--font-ui); color:var(--muted); }
@media (max-width:560px){
  .ch-rez-wiersz{ grid-template-columns:minmax(0,1fr) auto; grid-template-areas:"termin termin" "cena przycisk"; }
  .ch-rez-wiersz-termin{ grid-area:termin; }
  .ch-rez-wiersz-cena{ grid-area:cena; align-items:flex-start; text-align:left; }
  .ch-rez-wiersz .ch-rez-wybierz{ grid-area:przycisk; }
}
/* „Wybierz” i „Zarezerwuj wstępnie” zielone jak „Rezerwuję” w formularzu (biały napis 5∶1). */
.ch-rez-wybierz,.ch-rez-rezerwuj{
  min-height:3rem; padding:.75rem 1.2rem; border:0; border-radius:6px; cursor:pointer;
  background:#2E7D62; color:#fff; font:800 var(--t-body)/1.2 var(--font-display); letter-spacing:.01em;
  transition:background-color .3s var(--ease);
}
.ch-rez-wybierz:hover,.ch-rez-rezerwuj:hover{ background:#276B54; }
.ch-rez-wybierz:focus-visible,.ch-rez-rezerwuj:focus-visible{ outline:2px solid var(--text); outline-offset:2px; }
.ch-rez-wiersz .ch-rez-wybierz{ min-height:2.75rem; padding:.55rem 1.3rem; }
.ch-rez-rezerwuj{ min-height:3rem; padding-inline:2rem; }

/* Krok 2 (Kuba 26.09: „krótko data od do, ile nocy, cena na osobę, cena łącznie”): wiersz jak w kroku 1, bez przycisku,
   cena za osobę za dobę na zielono; pod nim dane (pola wtyczki) i „Zarezerwuj wstępnie”. */
.ch-rez-wybor{ margin:0 0 var(--s3); }
.ch-rez-opcja-dni b{ color:var(--text); font-weight:700; }
.ch-rez-opcja-dni b.ch-rez-osobodoba{ color:#4CAF8F; }
:root[data-theme="light"] .ch-rez-opcja-dni b.ch-rez-osobodoba{ color:#2B7A5C; }
.ch-rez-krok > .cr-footer-meta{ margin:var(--s3) 0 0; text-align:center; font:400 var(--t-micro)/1.6 var(--font-ui); color:var(--muted); opacity:.8; }
.ch-rez-stopka{ display:flex; justify-content:center; margin-top:var(--s3); }
@media (max-width:560px){
  .ch-rez-rezerwuj{ width:100%; }
}
/* Po „Zarezerwuj wstępnie”: mail i spam wyraźnie (Kuba 26.09). *//* Po „Potwierdzam”: mail i spam wyraźnie (Kuba 26.09). */
.ch-rez-komunikat--mail{ border-left-color:#4CAF8F; font-size:var(--t-body); }
.ch-rez-komunikat--mail p{ margin:0; }
.ch-rez-komunikat--mail p + p{ margin-top:.4rem; color:var(--muted); font-size:var(--t-small); }
.ch-rez-kroki #chatynki-rezerwacja-app > :not(.card:has(#rezForm)){ display:none; }
.ch-rez-kroki #chatynki-rezerwacja-app .card:has(#rezForm) > .step-label{ display:none; }
.ch-rez-kroki #rezForm > :is(.cta-oslona,#wynikBox,#priceOut,.clear-btn){ display:none !important; }
.ch-rez-kroki #chatynki-rezerwacja-app .card:has(#rezForm){ margin-bottom:var(--s3); }
.ch-rez-kroki #daneFields > .pole-w-linii:first-child{ margin-top:0; }
/* Kuba 27.09: kolejność Imię i nazwisko, Telefon, Email, potem Wiadomość i Zwierzęta; zgoda drobnym drukiem na środku nad
   przyciskiem. Od 768 px dwie kolumny: dane kontaktowe po lewej, wiadomość i zwierzęta po prawej. Kolejność w HTML wtyczki
   jest inna (imię, email, telefon, zwierzęta, wiadomość), więc przestawia ją CSS. */
/* !important: wtyczka chowa pola stylem w linii po sprawdzeniu danych; bez tego na telefonie krok 2 kurczył się przy wysyłce (Kuba 27.09: „strona skacze”). */
.ch-rez-kroki #chatynki-rezerwacja-app #daneFields{ display:flex !important; flex-direction:column; }
.ch-rez-kroki #daneFields > .pole-w-linii:has(#telefon){ order:1; }
.ch-rez-kroki #daneFields > .pole-w-linii:has(#email){ order:2; }
.ch-rez-kroki #daneFields > #wierszWiadomosc{ order:3; }
.ch-rez-kroki #daneFields > .pole-w-linii:has(#zwierzeta){ order:4; }
.ch-rez-kroki #daneFields > #petNote{ order:5; }
.ch-rez-kroki #chatynki-rezerwacja-app #daneFields > .checkbox-row{ order:6; justify-content:center; align-items:center; margin-top:var(--s3); }
.ch-rez-kroki #chatynki-rezerwacja-app #daneFields > .checkbox-row input{ margin-top:0; }
.ch-rez-kroki #chatynki-rezerwacja-app #daneFields > .checkbox-row label{ font-size:var(--t-micro); }
@media (min-width:768px){
  /* !important: po zgłoszeniu wtyczka chowa pola stylem w linii, a wtedy krok 2 by zmalał i sekcja drgnęła na podziękowaniu. */
  .ch-rez-kroki #chatynki-rezerwacja-app #daneFields{ display:grid !important; grid-template-columns:1fr 1fr; gap:.75rem var(--s4); align-items:center; }
  .ch-rez-kroki #chatynki-rezerwacja-app #daneFields > *{ margin:0; }
  .ch-rez-kroki #daneFields > .pole-w-linii:has(#imie){ grid-area:1 / 1; }
  .ch-rez-kroki #daneFields > .pole-w-linii:has(#telefon){ grid-area:2 / 1; }
  .ch-rez-kroki #daneFields > .pole-w-linii:has(#email){ grid-area:3 / 1; }
  .ch-rez-kroki #daneFields > #wierszWiadomosc{ grid-area:1 / 2; }
  .ch-rez-kroki #daneFields > .pole-w-linii:has(#zwierzeta){ grid-area:2 / 2; }
  .ch-rez-kroki #chatynki-rezerwacja-app #daneFields > .cal-hint{ grid-column:1 / -1; grid-row:4; }
  .ch-rez-kroki #chatynki-rezerwacja-app #daneFields > .checkbox-row{ grid-column:1 / -1; grid-row:5; margin-top:var(--s2); }
}

/* ===========================================================================
   OKIENKO ZGODY NA COOKIES (27.09.2026, Kuba: „ładnie, dyskretnie”; tekst tylko „Strona używa plików cookies. Szczegóły”)
   Od 08.10.2026 karta na środku ekranu (wcześniej w prawym górnym rogu pod nagłówkiem). Oba przyciski tej samej wielkości:
   odmowa ma być tak samo łatwa jak zgoda.
   ======================================================================== */
/* 08.10.2026 (Kuba): karta na ŚRODKU ekranu, bez przyciemnienia. Obejrzał też lightbox (przyciemniona strona, nic nie da się
   kliknąć) i wybrał ten wariant. Warstwa na cały ekran tylko centruje kartę: sama jest przezroczysta dla kliknięć,
   więc stronę pod spodem dalej da się używać. */
.ch-zgoda{
  position:fixed; inset:0; z-index:1000; display:grid; place-items:center; padding:1rem; margin:0;
  pointer-events:none;
}
.ch-zgoda-karta{
  pointer-events:auto; display:block; width:22rem; max-width:100%; padding:1rem 1.1rem; border-radius:12px;
  background:color-mix(in srgb, var(--surface) 80%, transparent); color:var(--text); border:1px solid var(--line);
  -webkit-backdrop-filter:blur(12px) saturate(1.2); backdrop-filter:blur(12px) saturate(1.2);   /* Kuba 27.09: lekka przezroczystość */
  box-shadow:0 10px 32px rgba(0,0,0,.22);
  font:400 var(--t-small)/1.5 var(--font-ui); text-align:left;
}
@supports not ((backdrop-filter:blur(1px)) or (-webkit-backdrop-filter:blur(1px))){ .ch-zgoda-karta{ background:var(--surface); } }
.ch-zgoda[hidden]{ display:none; }
.ch-zgoda p{ display:block; margin:0 0 .75rem; max-width:none; }
.ch-zgoda a{ color:var(--link); }
.ch-zgoda-przyciski{ display:grid; grid-template-columns:1fr 1fr; gap:.5rem; }
.ch-zgoda-przyciski .ch-btn{ min-height:2.5rem; padding:.45rem .8rem; font-size:var(--t-small); justify-content:center; white-space:nowrap; }

