/* CSS_EDYTOR.css — SCAFFOLD (maksymalna baza) dla Yose Apartment
   Wygenerowany: node scripts/jarvis.js scaffold yose-apartment
   Prefix: --ys-  ·  Vibe: urban-bold  ·  Theme: default13
   WORKFLOW SUBTRAKTYWNY: usuwaj nieuzywane warianty/regiony, NIE dopisuj od zera. */


/* ============================================================
   §ROOT — brand tokens
   ============================================================ */
/* ============================================================
   §ROOT — brand tokens (alias-at-root). Prefix: --ys-*
   Kolory z brief.kolory (override) lub palety vibe "urban-bold".
   Odcienie primary/secondary (light/dark/soft/ink) liczone z koloru MARKI (HSL) przy override.
   --xx-* aliasy → warstwy uzywajace --xx-* dziedzicza marke bez renamingu.
   ============================================================ */
:root {
  --ys-primary:   #CC1B22;
  --ys-secondary: #1E2227;
  --ys-primary-light: #E7484E;
  --ys-primary-dark: #7B1014;
  --ys-secondary-light: #3D454F;
  --ys-cream: #2A2A2A;
  --ys-bg: #0F0F0F;
  --ys-text: #FFFFFF;
  --ys-text-soft: #D8D8D8;
  --ys-text-muted: #A8A8A8;
  --ys-primary-soft: rgba(204, 27, 34, 0.12);
  --ys-primary-ink: #7B1014;
  --ys-secondary-dark: #000000;
  --ys-secondary-soft: rgba(30, 34, 39, 0.12);
  --ys-secondary-ink: #000000;
  --ys-font-heading: "Young Serif", Georgia, serif;
  --ys-font-body:    "Instrument Sans", system-ui, -apple-system, sans-serif;

  /* --xx-* alias → brand (legalny wzorzec; linter B3 to dopuszcza) */
  --xx-primary:   var(--ys-primary);
  --xx-secondary: var(--ys-secondary);
  --xx-primary-light: var(--ys-primary-light);
  --xx-primary-dark: var(--ys-primary-dark);
  --xx-secondary-light: var(--ys-secondary-light);
  --xx-cream: var(--ys-cream);
  --xx-bg: var(--ys-bg);
  --xx-text: var(--ys-text);
  --xx-text-soft: var(--ys-text-soft);
  --xx-text-muted: var(--ys-text-muted);
  --xx-primary-soft: var(--ys-primary-soft);
  --xx-primary-ink: var(--ys-primary-ink);
  --xx-secondary-dark: var(--ys-secondary-dark);
  --xx-secondary-soft: var(--ys-secondary-soft);
  --xx-secondary-ink: var(--ys-secondary-ink);
  --xx-font-heading: var(--ys-font-heading);
  --xx-font-body:    var(--ys-font-body);

  /* safety-net: tokeny --xx-* których używają warstwy L2/L4/L7/L8,
     a których paleta vibe nie definiuje. Zapobiega "sypaniu się" kolorów
     (linter B3: var(--xx-…) bez definicji = bloker). Popraw wg marki. */
  --xx-white: #FFFFFF;
  --xx-dark: var(--ys-text);
  --xx-accent: var(--ys-secondary);
  --xx-border: rgba(0, 0, 0, 0.10);
  --xx-shadow: var(--xx-shadow-md);
  --xx-hero-bg: var(--xx-cream);
  --xx-footer-bg: var(--ys-secondary);

  /* --ido-* alias (uzywane przez L1 §A typografia + komponenty L2/L3) */
  --ido-primary:      var(--xx-primary);
  --ido-secondary:    var(--xx-secondary);
  --ido-accent:       var(--xx-accent);
  --ido-dark:         var(--xx-dark);
  --ido-bg:           var(--xx-bg, #FFFFFF);
  --ido-light:        var(--xx-white, #FFFFFF);
  --ido-font-heading: var(--ys-font-heading);
  --ido-font-body:    var(--ys-font-body);
  --ido-radius:       var(--xx-radius, 8px);
  --ido-header-h:     72px;
}


/* ============================================================
   LAYER 1 — TRAPS (system bug-fixes)
   ============================================================ */

/* ═══════════════════════════════════════════════════════════════
   ido-system-traps.css
   Layer 1 of 3 — IdoBooking System Bug Fixes (Traps)
   ═══════════════════════════════════════════════════════════════

   PURPOSE:
   All known IdoBooking / IdoSell system bugs that affect EVERY
   client identically. This file is shared — never client-specific.
   Client theme variables (colors, fonts, sizes) are defined in
   Layer 3 (client-theme.css) as --ido-* custom properties.

   LAYER ARCHITECTURE:
     Layer 1 → ido-system-traps.css   (this file — universal fixes)
     Layer 2 → ido-layout.css         (structural, client-customized)
     Layer 3 → client-theme.css       (CSS vars + brand overrides)

   VARIABLE CONTRACT (must be defined in Layer 3 :root):
     --ido-primary      Primary brand color
     --ido-secondary    Secondary / lighter brand color
     --ido-accent       Accent / highlight color
     --ido-bg           Page background color
     --ido-dark         Dark text / dark surfaces color
     --ido-light        Light surface color (near-white)
     --ido-font-heading Heading font stack
     --ido-font-body    Body font stack
     --ido-radius       Base border-radius
     --ido-header-h     Fixed header height (e.g. 80px)

   HARDCODED ELEMENTS NOTE:
   The following selectors are rendered inside sandboxed iframes
   or injected shadow-like contexts where CSS custom properties
   do NOT inherit. Use literal hex values only:
     #bounce, #backTop, .ck_dsclr__btn_v2,
     .ck_dsclr__btn_v2:hover, .skip_link, .formbutton
   The generator replaces var(--ys-primary) and
   var(--ys-secondary) tokens before deployment.

   TRAP COUNT: 18 root traps + page-specific universal fixes
   SOURCE: TEMPLATE_ARKUSZ_STYLOW.css + trap_tracker.json
   Updated: 2026-04-11
   ═══════════════════════════════════════════════════════════════ */


/* ═══════════════════════════════════════════════════════════════
   TRAP #1 — Body font-size reset
   ROOT CAUSE: IdoSell sets html { font-size: 140% } on the
   default13 template, which makes 1rem = 22.4px. Every unit
   derived from rem is 40% too large. Reset to 16px.
   CLIENTS: all (7/7 surveyed)
   ═══════════════════════════════════════════════════════════════ */
body,
body.default13 {
  font-size: 16px !important;
  font-family: var(--ido-font-body) !important;
  background: var(--ido-bg) !important;
  color: var(--ido-dark) !important;
  line-height: 1.7 !important;
  -webkit-font-smoothing: antialiased;
}


/* ═══════════════════════════════════════════════════════════════
   TRAP #2 — System orange #AD5009 → brand color
   ROOT CAUSE: default13.css hardcodes #AD5009 on .btn,
   .btn-primary, .btn-success, filter headers, links. Override
   with brand primary. Exclude .slick-arrow (navigation arrows).
   CLIENTS: all (7/7)

   PROMIEN RAZEM Z KOLOREM (2026-09-04, zgloszenie Damiana „zobacz na mapie
   nie zaokraglone, a jarvis powinien to wiedziec"). Ta regula brandowala
   WYLACZNIE kolor, wiec przyciski platformy zostawaly KANCIASTE obok naszych
   zaokraglonych - zmierzone u apartamenty-delecta na /offer/N: `.accommodation-*`
   14 px, ale `.btn-reverse` („Zobacz na mapie", „ZAREZERWUJ TERAZ" w cenniku)
   i `.btn` („SZCZEGOLY", „Rezerwacja online" w navbarze) 0 px. Kolor bez
   promienia to polowa brandingu - od teraz jedno i drugie w tym samym miejscu.
   `.slick-arrow` i nasz back-to-top (pigulka 999px) maja wlasne reguly wyzej.
   ═══════════════════════════════════════════════════════════════ */
.btn:not(.slick-arrow),
.btn-primary:not(.slick-arrow),
.btn-success:not(.slick-arrow),
a.btn:not(.slick-arrow),
button.btn:not(.slick-arrow) {
  background-color: var(--ido-primary) !important;
  border-color: var(--ido-primary) !important;
  color: #fff !important;
  border-radius: var(--ido-radius, 8px) !important;
}
/* `.contact__btn` to OSOBNA klasa platformy na /contact - `.btn` jej NIE lapie.
   Bug-klasa „kolor bez ksztaltu" (ta sama co w lessons/068 §J, powtorzona 2026-09-07):
   klient brandowal jej kolor i zostawal PLATFORMOWY kształt - zmierzone na 60345:
   `border-radius: 999px` (pill), wysokosc 20 px, `padding: 0`, `font-weight: 600`,
   obok naszych `.btn` 10 px / 48 px / `0 20px` / 700. Zgloszenie: „podstrona kontakt
   ma miec identyczne przyciski jak np offers". Kolor I GEOMETRIA w jednej regule. */
body.page-contact .contact__btn,
body.page-contact a.contact__btn {
  background-color: var(--ido-primary) !important;
  border-color: var(--ido-primary) !important;
  color: #fff !important;
  border-radius: var(--ido-radius, 8px) !important;
  min-height: 48px !important;
  padding: 0 20px !important;
  font-weight: 700 !important;
  letter-spacing: normal !important;
  align-items: center !important;
  justify-content: center !important;
}
.btn:not(.slick-arrow):hover,
.btn-primary:not(.slick-arrow):hover,
.btn-success:not(.slick-arrow):hover,
a.btn:not(.slick-arrow):hover,
button.btn:not(.slick-arrow):hover {
  background-color: var(--ido-secondary) !important;
  border-color: var(--ido-secondary) !important;
  color: #fff !important;
}

/* System scheme CSS vars — override green/orange defaults
   (333333.css.gz defines --maincolor1 as green #4ADE80) */
html:root {
  --maincolor1: var(--ido-primary) !important;
  --supportcolor1: var(--ido-secondary) !important;
  --maincolor2: var(--ido-dark) !important;
}


/* ═══════════════════════════════════════════════════════════════
   TRAP #3 — H1 "big-label" hidden by system on /offer pages
   ROOT CAUSE: System applies display:none via JS on .big-label
   on accommodation detail pages. Force visible.
   CLIENTS: mazurski, mountainprestige (and others via JS)
   ═══════════════════════════════════════════════════════════════ */
h1.big-label {
  display: block !important;
  visibility: visible !important;
  font-family: var(--ido-font-heading) !important;
}


/* ═══════════════════════════════════════════════════════════════
   TRAP #4 — H2 "IdoBooking" injected inside .index-info
   ROOT CAUSE: System renders the literal text "IdoBooking" as
   an H2 inside .index-info and inside .section.parallax.
   Must be hidden — it overlaps hero content.
   CLIENTS: all (7/7)
   ═══════════════════════════════════════════════════════════════ */
.index-info h2,
.index-info h1,
.section.parallax > h2 {
  display: none !important;
  visibility: hidden !important;
}


/* ═══════════════════════════════════════════════════════════════
   TRAP #5 — Dark overlay on slider via pseudo-elements
   ROOT CAUSE: .parallax-slider::before gets a semi-opaque
   black background from system CSS, darkening the hero image.
   .parallax-image::after does the same on image-only heroes.
   Both must be suppressed so custom overlays render cleanly.
   CLIENTS: all (7/7)
   ═══════════════════════════════════════════════════════════════ */
.parallax-slider::before,
.parallax-slider::after,
.parallax-image::before,
.parallax-image::after {
  background: transparent !important;
  display: none !important;
  opacity: 0 !important;
}


/* ═══════════════════════════════════════════════════════════════
   TRAP #6 — Header must be position:fixed, NOT sticky
   ROOT CAUSE: position:sticky on .defaultsb / header.default13
   creates a layout gap between header and hero on iOS Safari
   and when sticky triggers at wrong scroll offset. Fixed + explicit
   top:0 is the only reliable cross-browser approach.
   CLIENTS: all (7/7)
   ═══════════════════════════════════════════════════════════════ */
.defaultsb,
#defaultsb,
.default13,
.navbar-wrapper,
header.header,
header.default13 {
  position: fixed !important;
  top: 0 !important;
  left: 0 !important;
  right: 0 !important;
  width: 100% !important;
  z-index: 1100 !important;
}


/* ═══════════════════════════════════════════════════════════════
   TRAP #7 — Subpage padding-top compensates fixed header
   ROOT CAUSE: Fixed header overlaps page content on subpages.
   Homepage is excluded — fullscreen hero handles offset itself.
   Value comes from --ido-header-h measured on live site.
   CLIENTS: all (7/7)
   ═══════════════════════════════════════════════════════════════ */
body.page-offers,
body.page-offer,
body.page-contact,
body.page-txt,
body:not(.page-index) .content-wrapper,
body:not(.page-index) main {
  padding-top: var(--ido-header-h) !important;
}


/* ═══════════════════════════════════════════════════════════════
   TRAP #8 — Stacking context: .index-info z-index too high
   ROOT CAUSE: .index-info receives position:absolute and
   z-index:1000 from system, which traps it above the slider
   and blocks pointer events on hero CTAs. Reset position to
   allow hero overlay to sit above it.
   NOTE: pointer-events:none prevents invisible area blocking clicks.
   CLIENTS: all (7/7)
   ═══════════════════════════════════════════════════════════════ */
.index-info {
  z-index: 1 !important;
  pointer-events: none !important;
  overflow: visible !important;
}
.index-info * {
  pointer-events: none !important;
}
.index-info button,
.index-info .navbar-reservation {
  display: none !important;
}


/* ═══════════════════════════════════════════════════════════════
   TRAP #9 — System z-index: -1 on form inputs
   ROOT CAUSE: System stylesheet sets z-index:-1 on inputs and
   selects inside the booking widget, making them unclickable
   when the widget sits inside a positioned container.
   CLIENTS: najmar, ecocamping, madera, golden, mountainprestige
   ═══════════════════════════════════════════════════════════════ */
#iai_book_form input,
#iai_book_form select,
#iai_book_form textarea,
#iai_book_form .widget__option,
input,
select,
textarea {
  z-index: 2 !important;
  position: relative;
}


/* ═══════════════════════════════════════════════════════════════
   TRAP #10 — System inline positioning on .index-info
   ROOT CAUSE: System JS injects inline style="top:Xpx; left:Xpx"
   on .index-info, misaligning it relative to the hero. These
   overrides must use !important to beat inline styles.
   CLIENTS: all (7/7)
   ═══════════════════════════════════════════════════════════════ */
.index-info {
  top: 0 !important;
  left: 0 !important;
  right: 0 !important;
  bottom: auto !important;
  transform: none !important;
}


/* ═══════════════════════════════════════════════════════════════
   TRAP #11 — Litepicker calendar rendered at 944px width
   ROOT CAUSE: Litepicker date range picker gets a hardcoded
   width from the system JS config, causing horizontal scroll
   on mobile and overflow on desktop sidebars. fit-content
   corrects to actual rendered width.
   CLIENTS: najmar, ecocamping, madera, golden, mountainprestige
   ═══════════════════════════════════════════════════════════════ */
.litepicker {
  width: fit-content !important;
  max-width: var(--ys-vw, 100vw) !important;
}


/* ═══════════════════════════════════════════════════════════════
   TRAP #12 — Ghost booking form on /offer pages
   ROOT CAUSE: System renders a duplicate #iai_book_form with
   class d-none on offer detail pages. Without explicit height:0
   it still occupies vertical space even when display:none,
   pushing content down.
   CLIENTS: all /offer pages
   ═══════════════════════════════════════════════════════════════ */
body.page-offer #iai_book_form.d-none,
body.page-offer .iai-search.d-none {
  display: none !important;
  height: 0 !important;
  overflow: hidden !important;
  margin: 0 !important;
  padding: 0 !important;
}


/* ═══════════════════════════════════════════════════════════════
   TRAP #13 — .iai-search shown on /offers page (has its own)
   ROOT CAUSE: The /offers page has a built-in filter sidebar.
   The global .iai-search bar also renders, duplicating search UI.
   Also hide on /txt subpages where a search widget makes no sense.
   CLIENTS: najmar, ecocamping, madera, mazurski, golden, mountainprestige
   ═══════════════════════════════════════════════════════════════ */
body.page-offers .iai-search,
body.page-offers #iai_book_se,
body.page-txt .iai-search,
body.page-txt #iai_book_se {
  display: none !important;
}


/* ═══════════════════════════════════════════════════════════════
   TRAP #14 — FontAwesome NOT loaded — hide broken FA icons
   ROOT CAUSE: IdoSell does not load FontAwesome by default in
   template 11 / default13. FA icon elements render as invisible
   0x0 boxes OR as raw unicode squares. Hide them system-wide;
   replace with CSS-only chevrons where needed (see §7 /offers).
   CLIENTS: all (7/7)
   ═══════════════════════════════════════════════════════════════ */
body.page-offers .filter_header .fa,
body.page-offers .filter_header .fa-angle-down,
body.page-offers .filter_header [class^="fa-"],
body.page-offers .filter_header [class*=" fa-"] {
  display: none !important;
}


/* ═══════════════════════════════════════════════════════════════
   TRAP #15 — Gradient overlay on .section.parallax
   ROOT CAUSE: The system ::after pseudo-element on .section.parallax
   renders a dark solid overlay that obscures hero images.
   IMPORTANT: append custom overlays to .section.parallax itself,
   NOT to .parallax-slider — the slider has z-index:-2 which traps
   any positioned child below it (cannot be fixed without JS).
   .index-info::after must also be suppressed.
   CLIENTS: all (7/7)
   ═══════════════════════════════════════════════════════════════ */
.section.parallax::after {
  content: '' !important;
  position: absolute !important;
  top: 0 !important;
  left: 0 !important;
  right: 0 !important;
  bottom: 0 !important;
  background: linear-gradient(
    to bottom,
    rgba(255, 255, 255, 0.85) 0%,
    rgba(255, 255, 255, 0.4)  12%,
    rgba(255, 255, 255, 0)    22%,
    rgba(0, 0, 0, 0)          60%,
    rgba(0, 0, 0, 0.35)      100%
  ) !important;
  pointer-events: none !important;
  z-index: 1 !important;
}
.index-info::after,
.index-info::before {
  display: none !important;
  content: none !important;
}


/* ═══════════════════════════════════════════════════════════════
   TRAP #16 — span.btn on /offers gets line-height: 49px
   ROOT CAUSE: System stylesheet targets span.btn and forces
   line-height:49px + height:49px, which makes the "SZCZEGOLY"
   button on offer listing cards enormously tall. Normalize to
   auto height with flex centering.
   CLIENTS: najmar, ecocamping, madera, mazurski, golden, mountainprestige
   ═══════════════════════════════════════════════════════════════ */
body.page-offers span.btn,
.page-offers .accommodation-buttons span.btn,
.offer span.btn {
  line-height: 1.4 !important;
  height: auto !important;
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
  padding: 10px 24px !important;
  font-family: var(--ido-font-body) !important;
  font-size: 13px !important;
}


/* ═══════════════════════════════════════════════════════════════
   TRAP #17 — Tabs sticky: system JS adds --fixed class, not .sticky
   ROOT CAUSE: The offer detail tabs bar gets a class of "--fixed"
   (double-dash prefix, Bootstrap modifier style) added by system JS
   when it sticks. This is NOT the standard .sticky class. Without
   an explicit rule targeting .tabs.--fixed the tab bar jumps out
   of layout — full-width fix and z-index are required.
   CLIENTS: mazurski, mountainprestige
   ═══════════════════════════════════════════════════════════════ */
.tabs.--fixed {
  position: fixed !important;
  top: var(--ido-header-h) !important;
  left: 0 !important;
  right: 0 !important;
  width: var(--ys-vw, 100vw) !important;
  margin: 0 !important;
  z-index: 1000 !important;
  background: var(--ido-light) !important;
  box-shadow: 0 2px 20px rgba(0, 0, 0, 0.06) !important;
}

/* Tabs span child font size — system forces 1.3rem */
.tabs__item > span {
  font-size: 13px !important;
  font-family: var(--ido-font-body) !important;
  font-weight: 500 !important;
}


/* ═══════════════════════════════════════════════════════════════
   TRAP #18 — pas platnosci .footer-contact-baner (REWIZJA 2026-09-30)
   ROOT CAUSE (system): .footer-contact-baner ma na sztywno granatowe tlo
   (#3E475E), a loga VISA/MC sa rysowane pod nie.
   STARY FIX BYL BLEDEM: wymuszal CIEMNE tlo pasa + `brightness(0) invert(1)`
   i `opacity:.4` na logach oraz `opacity:.3` na znaku Powered by. Zmierzone
   na wschodnia-elegans (2026-09-30): na jasnej stopce ciemna „pigulka" pod
   VISA/MC na srodku pasa i przygaszony znak licencyjny - zgloszenie Damiana
   wracalo u kolejnych klientow, bo KAZDY nowy build dostawal ten blok.
   KANON (lesson 094): loga w WLASNYCH kolorach; czytelnosc wybiera sie
   WARIANTEM SVG pod tlo (`_on_white` / `_on_black`), nie filtrem.
   Egzekucja: lint L-payments-invert + L-powered-filter (biblioteka).
   ═══════════════════════════════════════════════════════════════ */
.footer-contact-baner,
.footer__strip,
footer .footer__strip,
.footer-bottom,
.payment-methods {
  background: transparent !important;
  background-color: transparent !important;
}
.footer-contact-baner svg,
.footer-contact-baner img,
.footer__strip img,
.powered_by_logo img,
.powered_by img {
  filter: none !important;
  opacity: 1 !important;
}


/* ═══════════════════════════════════════════════════════════════
   ADDITIONAL UNIVERSAL FIX — Leaflet map overflow
   ROOT CAUSE: A wildcard selector [class*="map"] from system CSS
   clips map tile images. Protect Leaflet containers explicitly.
   CLIENTS: najmar, madera, mountainprestige
   ═══════════════════════════════════════════════════════════════ */
.leaflet-container {
  overflow: hidden !important;
}
.leaflet-container * {
  box-sizing: content-box;
}


/* ═══════════════════════════════════════════════════════════════
   ADDITIONAL UNIVERSAL FIX — container-hotspot (JS rebuilds cards)
   ROOT CAUSE: System renders a .container-hotspot with system-styled
   offer cards that JS replaces. Hide the system version to prevent
   flash of unstyled content.
   CLIENTS: madera, mountainprestige
   ═══════════════════════════════════════════════════════════════ */
.container-hotspot {
  display: none !important;
}


/* ═══════════════════════════════════════════════════════════════
   §A — TYPOGRAPHY BASE (universal, uses CSS vars)
   ═══════════════════════════════════════════════════════════════ */
h1, h2, h3, h4, h5, h6 {
  font-family: var(--ido-font-heading) !important;
  color: var(--ido-dark) !important;
  line-height: 1.2 !important;
}

a {
  color: var(--ido-primary);
  text-decoration: none;
  transition: color 0.2s ease;
}
a:hover {
  color: var(--ido-secondary);
}


/* ═══════════════════════════════════════════════════════════════
   §B — SEARCH WIDGET (universal fixes)
   Font and persons-dropdown chevron are broken on all clients.
   ═══════════════════════════════════════════════════════════════ */
.iai-search,
#iai_book_form {
  font-family: var(--ido-font-body) !important;
}

/* Search / booking submit button
   NOTE: .formbutton does NOT inherit CSS vars in all contexts.
   Generator must replace var(--ys-primary) and var(--ys-secondary). */
.formbutton,
#iai_book_form .formbutton {
  background: var(--ys-primary) !important;
  color: #fff !important;
  border: none !important;
  border-radius: var(--ido-radius) !important;
  font-family: var(--ido-font-body) !important;
  cursor: pointer !important;
}
.formbutton:hover,
#iai_book_form .formbutton:hover {
  background: var(--ys-secondary) !important;
}

/* Persons dropdown chevron — system button is 8x8 and invisible */
#iai_book_form .widget__option.iai_input-small .iai_widget_btn {
  position: absolute !important;
  top: 50% !important;
  right: 16px !important;
  left: auto !important;
  transform: translateY(-50%) !important;
  width: 20px !important;
  height: 20px !important;
  opacity: 1 !important;
  font-size: 0 !important;
  background: transparent !important;
  border: none !important;
}
#iai_book_form .widget__option.iai_input-small .iai_widget_btn::after {
  content: '' !important;
  display: block !important;
  width: 8px !important;
  height: 8px !important;
  border-right: 2px solid var(--ido-dark) !important;
  border-bottom: 2px solid var(--ido-dark) !important;
  transform: rotate(45deg) !important;
  margin: 2px auto 0 !important;
}
#iai_book_form .widget__option.iai_input-small {
  padding-right: 44px !important;
}

/* Persons dropdown list overflow */
.persons_list {
  overflow: visible !important;
  max-height: none !important;
  height: auto !important;
}


/* ═══════════════════════════════════════════════════════════════
   §C — /offers PAGE (universal styling for all clients)
   ═══════════════════════════════════════════════════════════════ */

/* Offers container background — system default is #292929 dark */
body.page-offers,
body.page-offers main,
.offers-container {
  background: var(--ido-bg) !important;
  color: var(--ido-dark) !important;
}

/* Filter section headers — brand color, heading font */
body.page-offers h4,
body.page-offers .sidebar h4,
body.page-offers .filter_header {
  color: var(--ido-primary) !important;
  font-family: var(--ido-font-heading) !important;
}

/* Filter header layout with CSS chevron (FontAwesome not loaded) */
body.page-offers .filter_header {
  display: flex !important;
  justify-content: space-between !important;
  align-items: center !important;
  cursor: pointer !important;
  padding: 10px 16px !important;
  border: 1px solid #ddd !important;
  border-radius: 8px !important;
  margin-bottom: 8px !important;
  transition: background 0.2s ease !important;
  font-size: 13px !important;
  font-weight: 600 !important;
  text-transform: uppercase !important;
  letter-spacing: 1px !important;
}
body.page-offers .filter_header:hover {
  background: rgba(0, 0, 0, 0.03) !important;
}

/* CSS-only chevron replaces missing FontAwesome icon */
body.page-offers .filter_header::after {
  content: "" !important;
  display: inline-block !important;
  flex-shrink: 0 !important;
  width: 10px !important;
  height: 10px !important;
  border-right: 2px solid var(--ido-primary) !important;
  border-bottom: 2px solid var(--ido-primary) !important;
  transform: rotate(45deg) !important;
  transition: transform 0.3s ease !important;
  margin-left: 12px !important;
  margin-top: -3px !important;
}
body.page-offers .filter_header[aria-expanded="true"]::after {
  transform: rotate(-135deg) !important;
  margin-top: 3px !important;
}

/* Filter collapse — Bootstrap collapse guard */
body.page-offers .filter_content.collapse:not(.show) {
  display: none !important;
}
body.page-offers .filter_content.collapse.show {
  display: block !important;
  height: auto !important;
  overflow: visible !important;
}

/* /offers buttons */
body.page-offers .btn,
body.page-offers button.btn,
body.page-offers a.btn {
  background: var(--ido-primary) !important;
  color: #fff !important;
  border: none !important;
}
body.page-offers .btn:hover {
  background: var(--ido-secondary) !important;
}


/* ═══════════════════════════════════════════════════════════════
   §D — /offer DETAIL PAGE (universal fixes)
   ═══════════════════════════════════════════════════════════════ */

/* Chip ceny — KANON: PROSTOKAT h64 r12. NIE kolo, NIE pigulka.
   System renderuje owal 244x161, wiec geometrie trzeba wymusic.

   HISTORIA (2026-09-08): do tej pory bylo tu `border-radius: 50%` + 150x150
   na NIEZAKRESOWANYM `.offer-price`. Trzy skutki naraz:
     (a) lamalo wlasny kanon projektu (feedback_offer_price_chip_layout.md:
         „prostokat h64 r12, NIE pill" — lekcja Fair Rentals v1.70.3, gdzie
         wymuszanie pigulki rozjezdzalo cene; delecta runda 16d zmierzyla 66px/r12),
     (b) layer3-offers-list musial to nadpisywac na /offers przez
         `html body.page-offers …` (walka z wlasna warstwa nizej w kaskadzie),
     (c) lint N-price-chip-circle swiecil u 13 klientow floty naraz.
   Zakres zwezony do body.page-offer (INSTINCT-09: zero regul globalnych) —
   lista /offers ma wlasna geometrie w layer3-offers-list. */
body.page-offer .offer-price {
  min-width: 130px !important;
  height: 64px !important;
  border-radius: 12px !important;
  display: flex !important;
  flex-direction: column !important;
  align-items: center !important;
  justify-content: center !important;
  background: var(--ido-primary) !important;
  color: #fff !important;
  padding: 0 16px !important;
  text-align: center !important;
  white-space: nowrap !important;
}
body.page-offer .offer-price small {
  font-size: 12px !important;
  line-height: 1.15 !important;
}
body.page-offer .offer-price span {
  font-size: 20px !important;
  font-weight: 700 !important;
  line-height: 1.15 !important;
}

/* ZAREZERWUJ / Reserve button */
.accommodation-leftbutton,
.page-offer .btn-success,
.page-offer a.btn-success,
.page-offer .period-price .btn {
  background: var(--ido-primary) !important;
  border-color: var(--ido-primary) !important;
  color: #fff !important;
  font-family: var(--ido-font-body) !important;
  font-size: 13px !important;
  font-weight: 600 !important;
  padding: 12px 24px !important;
  border-radius: var(--ido-radius) !important;
  border: none !important;
  cursor: pointer !important;
  text-transform: uppercase !important;
  letter-spacing: 1px !important;
}
.accommodation-leftbutton:hover,
.page-offer .btn-success:hover,
.page-offer a.btn-success:hover {
  background: var(--ido-secondary) !important;
  border-color: var(--ido-secondary) !important;
}

/* contact__btn centering — system default justify-content:normal */
.contact__btn {
  justify-content: center !important;
  font-family: var(--ido-font-body) !important;
}

/* System price h2/p too large on detail page */
.price,
.offer .price,
.page-offer .price {
  font-size: 20px !important;
  font-weight: 600 !important;
  color: var(--ido-primary) !important;
}


/* ═══════════════════════════════════════════════════════════════
   §E — /contact PAGE (universal)
   ═══════════════════════════════════════════════════════════════ */
body.page-contact a {
  color: var(--ido-primary) !important;
}
body.page-contact a:hover {
  color: var(--ido-secondary) !important;
}
body.page-contact .btn,
body.page-contact form button,
body.page-contact form input[type="submit"] {
  background: var(--ido-primary) !important;
  border-color: var(--ido-primary) !important;
  color: #fff !important;
}
body.page-contact .btn:hover {
  background: var(--ido-secondary) !important;
}
body.page-contact .leaflet-container {
  border-radius: var(--ido-radius) !important;
  overflow: hidden !important;
}


/* ═══════════════════════════════════════════════════════════════
   §F — /txt SUBPAGES (universal)
   ═══════════════════════════════════════════════════════════════ */
.txt-text {
  font-family: var(--ido-font-body) !important;
  line-height: 1.7 !important;
  color: var(--ido-dark) !important;
}
.txt-text h2,
.txt-text h3 {
  font-family: var(--ido-font-heading) !important;
  color: var(--ido-primary) !important;
}


/* ═══════════════════════════════════════════════════════════════
   §G — FOOTER (universal dark override)
   ═══════════════════════════════════════════════════════════════ */

/* WYMOG LICENCYJNY (TRAP-03 / B9) — zdjecie filtra platformy ze stopki.
   default13 naklada na <footer> `filter: brightness(0.97)`. Dwa skutki naraz:
     (a) przygasza CALA stopke, w tym logo „Powered by IdoBooking", ktorego
         widocznosc jest wymogiem licencyjnym (nie kosmetyka),
     (b) `filter` inny niz none tworzy containing block, wiec `position: fixed`
         WEWNATRZ stopki przestaje byc wzgledem viewportu.
   Zdejmujemy filtr ze stopki I potomkow — samo `.powered_by { filter: none }`
   (layer2) NIE cofa filtra nalozonego na PRZODKA.
   Ref: feedback_powered_by_idobooking_visible.md · lint N-footer-filter-none
   (2026-09-08: brakowalo u 14 z 26 klientow floty = luka warstwy, nie klientow). */
html body footer,
html body footer *,
html body .footer,
html body .footer * {
  filter: none !important;
}

footer,
.footer,
.footer-wrapper,
.page-footer {
  background: var(--ido-dark) !important;
  color: rgba(255, 255, 255, 0.6) !important;
  font-family: var(--ido-font-body) !important;
}
footer h3,
footer h4,
.footer h3,
.footer h4 {
  color: #fff !important;
  font-family: var(--ido-font-heading) !important;
  font-size: 16px !important;
}
footer a,
.footer a {
  color: var(--ido-accent) !important;
}
footer a:hover,
.footer a:hover {
  color: var(--ido-secondary) !important;
}


/* ═══════════════════════════════════════════════════════════════
   §H — SYSTEM ELEMENTS WITH HARDCODED HEX (no CSS var inheritance)
   WARNING: Do NOT replace these tokens manually.
   The pipeline generator substitutes them at build time:
     var(--ys-primary)   → client primary color hex (e.g. #4A6741)
     var(--ys-secondary) → client secondary color hex (e.g. #6B8F5E)
   Affected elements: #bounce, #backTop, .ck_dsclr__btn_v2, .skip_link
   These live in system-injected shadow contexts or iframes where
   CSS custom properties from :root do NOT cascade.
   ═══════════════════════════════════════════════════════════════ */

/* Scroll-down arrow (system positions it centered; move to right edge) */
#bounce {
  background-color: var(--ys-primary) !important;
  background: var(--ys-primary) !important;
  left: auto !important;
  right: 32px !important;
  transform: none !important;
  margin-left: 0 !important;
}

/* Back-to-top button */
#backTop {
  background: var(--ys-primary) !important;
}
#backTop:hover {
  background: var(--ys-secondary) !important;
}

/* Cookie consent banner */
.ck_dsclr__btn_v2 {
  background: var(--ys-primary) !important;
}
.ck_dsclr__btn_v2:hover {
  background: var(--ys-secondary) !important;
}
.ck_dsclr_v2 a {
  color: var(--ys-primary) !important;
}
.ck_dsclr_x_v2 {
  color: var(--ys-primary) !important;
}

/* Skip-to-content accessibility link */
.skip_link {
  background: var(--ys-primary) !important;
  color: #fff !important;
}

/* ==========================================================================
   §I — HOME-GATE (uniwersalny; kazdy klient default13)
   --------------------------------------------------------------------------
   Pole /panel/frontpage `fg_body_top_code` (wypelniane przez panel-fill.mjs) jest
   GLOBALNE — renderuje sie na KAZDEJ podstronie (jak HEAD/body_bottom), nie tylko
   na home. Bez bramki tresc strony glownej wycieka na /txt/*, /offer/N itd.
   (feedback_idobooking_frontpage_body_top_global — PW 2026-07-10).

   Kontrakt: CALA tresc home w body_top owinieta w <div class="ys-home">
   (scaffold bodyTopFor robi to automatycznie). Tu ukrywamy ja wszedzie POZA
   strona glowna; na body.page-index .ys-home pozostaje widoczne.

   fullpage-home wymaga DODATKOWO ukrycia systemowego <main> + samodzielnego hero
   → layer-home-selfcontained.css (emitowana gdy fullpage:true).
   Regula lint: N-home-selfcontained (pilnuje gate + hide-main przy fullpage).
   ========================================================================== */
html body:not(.page-index) .ys-home {
  display: none !important;
}



/* ============================================================
   LAYER 2 — COMPONENTS (nav/footer/btn/form/stopka)
   ============================================================ */

/*
 * ido-components.css
 * IdoBooking Universal Component Library — Layer 2
 * Shared by all clients. Parameterized via CSS custom properties.
 * Layer 1 (ido-base.css) sets the variables. Layer 3 (client.css) overrides.
 *
 * Prefix: ido-
 * Variables consumed: --ido-primary, --ido-secondary, --ido-accent,
 *   --ido-bg, --ido-dark, --ido-light, --ido-font-heading, --ido-font-body,
 *   --ido-radius
 *
 * Table of contents:
 *  1. Layout System
 *  2. Hero Section
 *  3. Split Layout
 *  4. Feature Grid
 *  5. Offer Cards
 *  6. CTA Section
 *  7. Stats Bar
 *  8. FAQ Accordion
 *  9. Gallery Grid
 * 10. Buttons
 * 11. Typography Helpers
 * 12. Animations
 * 13. Accessibility
 * 14. Responsive
 */

/* =========================================================
   1. LAYOUT SYSTEM
   ========================================================= */

.ido-section {
  padding: 80px 24px;
  box-sizing: border-box;
  width: 100%;
}

.ido-section--white {
  background-color: #ffffff;
}

.ido-section--cream {
  background-color: var(--ido-bg, #f8f5f0);
}

.ido-section--dark {
  background-color: var(--ido-dark, #1a1a1a);
  color: #ffffff;
}

.ido-section--accent {
  background-color: var(--ido-accent, #e8d5b0);
}

.ido-container {
  max-width: 1200px;
  margin-inline: auto;
  padding-inline: 24px;
  box-sizing: border-box;
  width: 100%;
}

.ido-container--narrow {
  max-width: 900px;
  margin-inline: auto;
  padding-inline: 24px;
  box-sizing: border-box;
  width: 100%;
}

/* =========================================================
   2. HERO SECTION
   ========================================================= */

.ido-hero {
  position: relative;
  min-height: 85vh;
  display: flex;
  align-items: center;
  justify-content: center;
  overflow: hidden;
}

/* Overlay on top of system slider (.section.parallax) */
.ido-hero::before {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(
    to bottom,
    rgba(0, 0, 0, 0.45) 0%,
    rgba(0, 0, 0, 0.25) 60%,
    rgba(0, 0, 0, 0.55) 100%
  );
  z-index: 5;
  pointer-events: none;
}

.ido-hero__content {
  position: absolute;
  inset: 0;
  z-index: 10;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  text-align: center;
  padding: 40px 24px;
  gap: 20px;
}

.ido-hero__title {
  font-family: var(--ido-font-heading, Georgia, serif);
  font-size: clamp(2rem, 5vw + 1rem, 4.5rem);
  font-weight: 700;
  color: #ffffff;
  line-height: 1.15;
  margin: 0;
  text-shadow: 0 2px 16px rgba(0, 0, 0, 0.55), 0 1px 4px rgba(0, 0, 0, 0.4);
  max-width: 900px;
}

.ido-hero__subtitle {
  font-family: var(--ido-font-body, system-ui, sans-serif);
  font-size: clamp(1rem, 1.5vw + 0.5rem, 1.375rem);
  color: rgba(255, 255, 255, 0.9);
  font-weight: 300;
  line-height: 1.6;
  margin: 0;
  max-width: 680px;
  text-shadow: 0 1px 6px rgba(0, 0, 0, 0.4);
}

.ido-hero__cta {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  background-color: var(--ido-primary, #8b6f47);
  color: #ffffff;
  font-family: var(--ido-font-body, system-ui, sans-serif);
  font-size: 1rem;
  font-weight: 600;
  text-decoration: none;
  padding: 16px 40px;
  border-radius: var(--ido-radius, 4px);
  border: 2px solid transparent;
  cursor: pointer;
  letter-spacing: 0.5px;
  transition: background-color 0.25s ease, transform 0.2s ease, box-shadow 0.25s ease;
  box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3);
  margin-top: 8px;
}

.ido-hero__cta:hover {
  background-color: var(--ido-secondary, #6b5035);
  transform: translateY(-2px);
  box-shadow: 0 8px 28px rgba(0, 0, 0, 0.35);
}

.ido-hero__scroll {
  position: absolute;
  bottom: 28px;
  left: 50%;
  transform: translateX(-50%);
  z-index: 10;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 6px;
  color: rgba(255, 255, 255, 0.75);
  font-size: 0.75rem;
  font-family: var(--ido-font-body, system-ui, sans-serif);
  letter-spacing: 1.5px;
  text-transform: uppercase;
  cursor: pointer;
  animation: ido-bounce 2s ease-in-out infinite;
  text-decoration: none;
}

.ido-hero__scroll::after {
  content: "";
  display: block;
  width: 20px;
  height: 20px;
  border-right: 2px solid rgba(255, 255, 255, 0.75);
  border-bottom: 2px solid rgba(255, 255, 255, 0.75);
  transform: rotate(45deg);
  margin-top: -6px;
}

@keyframes ido-bounce {
  0%, 100% { transform: translateX(-50%) translateY(0); }
  50%       { transform: translateX(-50%) translateY(8px); }
}

/* =========================================================
   3. SPLIT LAYOUT
   ========================================================= */

.ido-split {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 48px;
  align-items: center;
}

.ido-split--reverse .ido-split__text {
  order: 2;
}

.ido-split--reverse .ido-split__img {
  order: 1;
}

.ido-split__text {
  display: flex;
  flex-direction: column;
  gap: 16px;
}

.ido-split__img {
  overflow: hidden;
  border-radius: var(--ido-radius, 4px);
  line-height: 0;
}

.ido-split__img img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
  transition: transform 0.5s ease;
}

.ido-split__img:hover img {
  transform: scale(1.03);
}

/* =========================================================
   4. FEATURE GRID
   ========================================================= */

.ido-features {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
  gap: 32px;
}

.ido-feature {
  text-align: center;
  padding: 36px 24px;
  border-radius: var(--ido-radius, 4px);
  background-color: var(--ido-light, #ffffff);
  transition: transform 0.25s ease, box-shadow 0.25s ease;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 12px;
}

.ido-feature:hover {
  transform: translateY(-4px);
  box-shadow: 0 12px 40px rgba(0, 0, 0, 0.12);
}

.ido-feature__icon {
  font-size: 48px;
  line-height: 1;
  display: block;
  margin-bottom: 4px;
}

.ido-feature__title {
  font-family: var(--ido-font-heading, Georgia, serif);
  font-size: 1.2rem;
  font-weight: 700;
  color: var(--ido-dark, #1a1a1a);
  margin: 0;
  line-height: 1.3;
}

.ido-feature__desc {
  font-family: var(--ido-font-body, system-ui, sans-serif);
  font-size: 0.9rem;
  color: var(--ido-dark, #1a1a1a);
  opacity: 0.7;
  line-height: 1.65;
  margin: 0;
}

/* =========================================================
   5. OFFER CARDS
   ========================================================= */

.ido-cards {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
  gap: 28px;
}

.ido-card {
  background-color: #ffffff;
  border-radius: var(--ido-radius, 4px);
  box-shadow: 0 2px 12px rgba(0, 0, 0, 0.08);
  overflow: hidden;
  position: relative;
  transition: transform 0.3s ease, box-shadow 0.3s ease;
  display: flex;
  flex-direction: column;
}

.ido-card:hover {
  transform: translateY(-8px);
  box-shadow: 0 20px 48px rgba(0, 0, 0, 0.15);
}

.ido-card:hover .ido-card__img img {
  transform: scale(1.05);
}

.ido-card__img {
  aspect-ratio: 4 / 3;
  overflow: hidden;
  line-height: 0;
  flex-shrink: 0;
}

.ido-card__img img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
  transition: transform 0.4s ease;
}

.ido-card__body {
  padding: 24px;
  display: flex;
  flex-direction: column;
  gap: 10px;
  flex: 1;
}

.ido-card__title {
  font-family: var(--ido-font-heading, Georgia, serif);
  font-size: 1.15rem;
  font-weight: 700;
  color: var(--ido-dark, #1a1a1a);
  margin: 0;
  line-height: 1.3;
}

.ido-card__price {
  font-family: var(--ido-font-heading, Georgia, serif);
  font-size: 1.25rem;
  font-weight: 700;
  color: var(--ido-primary, #8b6f47);
  margin: 0;
}

/* Stretched link — makes entire card clickable */
.ido-card__link {
  position: static;
  text-decoration: none;
  color: inherit;
  font-size: 0.875rem;
  font-weight: 600;
  color: var(--ido-primary, #8b6f47);
  margin-top: auto;
  display: inline-flex;
  align-items: center;
  gap: 4px;
}

.ido-card__link::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 1;
}

/* =========================================================
   6. CTA SECTION
   ========================================================= */

.ido-cta {
  text-align: center;
  padding: 80px 24px;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 28px;
}

.ido-cta--dark {
  background-color: var(--ido-dark, #1a1a1a);
  color: #ffffff;
}

.ido-cta--dark .ido-cta__heading {
  color: #ffffff;
}

.ido-cta__heading {
  font-family: var(--ido-font-heading, Georgia, serif);
  font-size: clamp(1.6rem, 2.5vw + 0.75rem, 2.5rem);
  font-weight: 700;
  color: var(--ido-dark, #1a1a1a);
  line-height: 1.2;
  margin: 0;
  max-width: 700px;
}

.ido-cta__contacts {
  display: flex;
  flex-direction: row;
  align-items: center;
  gap: 36px;
  flex-wrap: wrap;
  justify-content: center;
}

.ido-cta__contacts a {
  font-family: var(--ido-font-body, system-ui, sans-serif);
  font-size: 1.05rem;
  font-weight: 600;
  color: var(--ido-primary, #8b6f47);
  text-decoration: none;
  display: inline-flex;
  align-items: center;
  gap: 8px;
  transition: opacity 0.2s ease;
}

.ido-cta--dark .ido-cta__contacts a {
  color: var(--ido-accent, #e8d5b0);
}

.ido-cta__contacts a:hover {
  opacity: 0.75;
  text-decoration: underline;
}

.ido-cta__btn {
  font-size: 1.1rem;
  padding: 18px 48px;
}

/* =========================================================
   7. STATS BAR
   ========================================================= */

.ido-stats {
  display: flex;
  flex-direction: row;
  align-items: center;
  justify-content: center;
  gap: 48px;
  flex-wrap: wrap;
  padding: 60px 24px;
}

.ido-stat {
  text-align: center;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 6px;
}

.ido-stat__number {
  font-family: var(--ido-font-heading, Georgia, serif);
  font-size: 3rem;
  font-weight: 700;
  color: var(--ido-primary, #8b6f47);
  line-height: 1;
  margin: 0;
}

.ido-stat__label {
  font-family: var(--ido-font-body, system-ui, sans-serif);
  font-size: 0.875rem;
  color: var(--ido-dark, #1a1a1a);
  opacity: 0.6;
  text-transform: uppercase;
  letter-spacing: 1px;
  margin: 0;
}

/* =========================================================
   8. FAQ ACCORDION
   ========================================================= */

.ido-faq {
  display: flex;
  flex-direction: column;
}

.ido-faq__item {
  border-bottom: 1px solid rgba(0, 0, 0, 0.1);
}

.ido-faq__item:first-child {
  border-top: 1px solid rgba(0, 0, 0, 0.1);
}

.ido-faq__question {
  display: flex;
  justify-content: space-between;
  align-items: center;
  width: 100%;
  padding: 20px 4px;
  background: none;
  border: none;
  cursor: pointer;
  font-family: var(--ido-font-heading, Georgia, serif);
  font-size: 1.05rem;
  font-weight: 600;
  color: var(--ido-dark, #1a1a1a);
  text-align: left;
  gap: 16px;
  line-height: 1.4;
  transition: color 0.2s ease;
}

.ido-faq__question:hover {
  color: var(--ido-primary, #8b6f47);
}

/* CSS chevron icon */
.ido-faq__question::after {
  content: "";
  display: block;
  flex-shrink: 0;
  width: 12px;
  height: 12px;
  border-right: 2px solid currentColor;
  border-bottom: 2px solid currentColor;
  transform: rotate(45deg);
  transition: transform 0.3s ease;
  margin-top: -4px;
}

.ido-faq__question[aria-expanded="true"]::after {
  transform: rotate(-135deg);
  margin-top: 4px;
}

.ido-faq__answer {
  display: none;
  padding: 0 4px 20px;
  font-family: var(--ido-font-body, system-ui, sans-serif);
  font-size: 0.95rem;
  line-height: 1.7;
  color: var(--ido-dark, #1a1a1a);
  opacity: 0.8;
}

.ido-faq__question[aria-expanded="true"] + .ido-faq__answer {
  display: block;
}

/* =========================================================
   9. GALLERY GRID
   ========================================================= */

.ido-gallery {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
  gap: 8px;
}

.ido-gallery__item {
  overflow: hidden;
  border-radius: calc(var(--ido-radius, 4px) / 2);
  line-height: 0;
  cursor: pointer;
  position: relative;
}

.ido-gallery__item img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
  aspect-ratio: 1 / 1;
  transition: transform 0.35s ease;
}

.ido-gallery__item:hover img {
  transform: scale(1.08);
}

/* =========================================================
   10. BUTTONS
   ========================================================= */

.ido-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  background-color: var(--ido-primary, #8b6f47);
  color: #ffffff;
  font-family: var(--ido-font-body, system-ui, sans-serif);
  font-size: 0.9375rem;
  font-weight: 600;
  line-height: 1;
  text-decoration: none;
  border: 2px solid var(--ido-primary, #8b6f47);
  border-radius: var(--ido-radius, 4px);
  padding: 14px 32px;
  cursor: pointer;
  letter-spacing: 0.3px;
  white-space: nowrap;
  transition: background-color 0.22s ease, color 0.22s ease, border-color 0.22s ease,
              transform 0.18s ease, box-shadow 0.22s ease;
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.12);
  -webkit-appearance: none;
  appearance: none;
}

.ido-btn:hover {
  background-color: var(--ido-secondary, #6b5035);
  border-color: var(--ido-secondary, #6b5035);
  color: #ffffff;
  transform: translateY(-2px);
  box-shadow: 0 6px 20px rgba(0, 0, 0, 0.18);
}

.ido-btn:active {
  transform: translateY(0);
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.12);
}

.ido-btn--outline {
  background-color: transparent;
  color: var(--ido-primary, #8b6f47);
  border-color: var(--ido-primary, #8b6f47);
  box-shadow: none;
}

.ido-btn--outline:hover {
  background-color: var(--ido-primary, #8b6f47);
  color: #ffffff;
}

.ido-btn--white {
  background-color: #ffffff;
  color: var(--ido-dark, #1a1a1a);
  border-color: #ffffff;
}

.ido-btn--white:hover {
  background-color: var(--ido-bg, #f8f5f0);
  border-color: var(--ido-bg, #f8f5f0);
  color: var(--ido-dark, #1a1a1a);
}

.ido-btn--lg {
  font-size: 1.0625rem;
  padding: 18px 48px;
}

.ido-btn:focus-visible {
  outline: 3px solid var(--ido-primary, #8b6f47);
  outline-offset: 3px;
}

/* =========================================================
   11. TYPOGRAPHY HELPERS
   ========================================================= */

.ido-heading {
  font-family: var(--ido-font-heading, Georgia, serif);
  color: var(--ido-dark, #1a1a1a);
  line-height: 1.2;
  font-weight: 700;
  margin: 0;
}

.ido-kicker {
  display: block;
  font-family: var(--ido-font-body, system-ui, sans-serif);
  font-size: 0.8125rem;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 2px;
  color: var(--ido-primary, #8b6f47);
  margin: 0;
}

.ido-text {
  font-family: var(--ido-font-body, system-ui, sans-serif);
  line-height: 1.7;
  margin: 0;
}

/* =========================================================
   12. ANIMATIONS
   ========================================================= */

.ido-reveal {
  opacity: 0;
  transform: translateY(30px);
  transition: opacity 0.6s ease, transform 0.6s ease;
}

.ido-reveal--left {
  transform: translateX(-30px);
}

.ido-reveal--right {
  transform: translateX(30px);
}

.ido-revealed {
  opacity: 1;
  transform: translate(0, 0);
}

.ido-stagger-1 { transition-delay: 0.1s; }
.ido-stagger-2 { transition-delay: 0.2s; }
.ido-stagger-3 { transition-delay: 0.3s; }
.ido-stagger-4 { transition-delay: 0.4s; }

/* noscript fallback — when JS is not available, show all revealed elements */
html:not(.ido-js) .ido-reveal {
  opacity: 1;
  transform: none;
}

/* =========================================================
   13. ACCESSIBILITY
   ========================================================= */

/* Screen-reader only utility */
.ido-sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}

/* Focus visible states for interactive elements */
.ido-feature:focus-visible,
.ido-card:focus-visible,
.ido-gallery__item:focus-visible,
.ido-faq__question:focus-visible,
.ido-cta__contacts a:focus-visible,
.ido-hero__cta:focus-visible,
.ido-hero__scroll:focus-visible {
  outline: 3px solid var(--ido-primary, #8b6f47);
  outline-offset: 2px;
}

/* Disable ALL animations for users who prefer reduced motion */
@media (prefers-reduced-motion: reduce) {
  .ido-reveal,
  .ido-reveal--left,
  .ido-reveal--right {
    opacity: 1;
    transform: none;
    transition: none;
  }

  .ido-stagger-1,
  .ido-stagger-2,
  .ido-stagger-3,
  .ido-stagger-4 {
    transition-delay: 0s;
  }

  .ido-hero__scroll {
    animation: none;
  }

  .ido-btn,
  .ido-card,
  .ido-feature,
  .ido-split__img img,
  .ido-card__img img,
  .ido-gallery__item img,
  .ido-faq__question::after,
  .ido-faq__question,
  .ido-hero__cta,
  .ido-cta__contacts a {
    transition: none;
  }
}

/* =========================================================
   14. RESPONSIVE
   ========================================================= */

/* --- Tablet landscape (max 991px) --- */
@media (max-width: 991px) {
  .ido-section {
    padding: 60px 20px;
  }

  .ido-hero {
    min-height: 60vh;
  }

  .ido-split {
    grid-template-columns: 1fr;
    gap: 32px;
  }

  .ido-split--reverse .ido-split__text,
  .ido-split--reverse .ido-split__img {
    order: unset;
  }

  .ido-stats {
    gap: 32px;
    padding: 48px 20px;
  }

  .ido-cta {
    padding: 60px 20px;
  }

  .ido-cards {
    grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
    gap: 20px;
  }

  .ido-features {
    gap: 24px;
  }
}

/* --- Tablet portrait (max 768px) --- */
@media (max-width: 768px) {
  .ido-section {
    padding: 48px 16px;
  }

  .ido-container,
  .ido-container--narrow {
    padding-inline: 16px;
  }

  .ido-hero {
    min-height: 60vh;
  }

  .ido-hero__content {
    padding: 32px 16px;
    gap: 16px;
  }

  .ido-hero__cta {
    padding: 14px 28px;
    font-size: 0.9375rem;
  }

  .ido-features {
    grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
    gap: 20px;
  }

  .ido-feature {
    padding: 28px 16px;
  }

  .ido-cards {
    grid-template-columns: 1fr 1fr;
    gap: 16px;
  }

  .ido-stats {
    gap: 24px;
    padding: 40px 16px;
  }

  .ido-stat__number {
    font-size: 2.25rem;
  }

  .ido-gallery {
    grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
  }

  .ido-cta {
    padding: 48px 16px;
    gap: 20px;
  }

  .ido-cta__contacts {
    flex-direction: column;
    gap: 16px;
  }

  .ido-faq__question {
    font-size: 0.975rem;
    padding: 16px 4px;
  }
}

/* --- Mobile (max 480px) --- */
@media (max-width: 480px) {
  .ido-section {
    padding: 40px 16px;
  }

  .ido-hero {
    min-height: 50vh;
  }

  .ido-hero__scroll {
    display: none;
  }

  .ido-cards {
    grid-template-columns: 1fr;
  }

  .ido-features {
    grid-template-columns: 1fr;
  }

  .ido-gallery {
    grid-template-columns: repeat(2, 1fr);
    gap: 6px;
  }

  .ido-stat__number {
    font-size: 2rem;
  }

  .ido-stats {
    gap: 20px;
    padding: 32px 16px;
  }

  .ido-btn--lg {
    font-size: 1rem;
    padding: 16px 32px;
  }

  .ido-split {
    gap: 24px;
  }

  .ido-cta__heading {
    font-size: 1.5rem;
  }

  .ido-faq__question {
    font-size: 0.9375rem;
  }
}


/* ==========================================================================
   §FOOTER (JARVIS canonical) — stopka od zera .ys-footer
   --------------------------------------------------------------------------
   Struktura budowana przez library/js/ido-footer-rebuild.js:
     footer.ys-footer
       > .ys-footer__top       (grid kolumn)
           > .ys-footer__col
               .ys-footer__logo   (svg + brand)
               .ys-footer__tag    (tagline / note)
               h4                      (nagłówek kolumny)
               a                       (link nawigacji)
               + RELOKOWANE żywe węzły panelu:
                 .footer__contact          (Kontakt — dane z panelu)
                 ul.footer__social_media   (social)
                 .powered_by               (Powered by IdoBooking — LICENCJA)
       > .ys-footer__bottom
           > .ys-footer__bottom-in  (© + .footer-contact-baner = płatności)

   Dane (kontakt/social/powered/płatności) są panel-driven → auto-update.
   My stylujemy tylko wygląd. Źródło kanoniczne: cityofthekings SR2 (F18).

   Trapy pokryte:
     TRAP-11  relokacja żywych węzłów (JS) — tu tylko style.
     TRAP-12  navy pseudo-pas .footer-contact-baner::before → kill.
     TRAP-13  Powered-by widoczne + płatności bez ciemnego boxa.

   Domyślnie JASNA stopka (bg z tokenu). Dla ciemnej stopki: nadpisz
   `footer.ys-footer { background: <dark> }` + kolory tekstu w §CLIENT.
   ========================================================================== */

/* pełna szerokość — full-bleed obsługuje layer-fullbleed.css (.ys-footer
   jest na jego liście (b)); tu tylko wizualia stopki */
footer.ys-footer {
  background: var(--ys-footer-bg, var(--ys-bg, #FAF6EE)) !important;
  border-top: 1px solid var(--ys-border, #E6DECE);
  color: var(--ys-text-soft, #4A4A4A) !important;
}

/* tekst relokowanych węzłów przejmuje kolor stopki (dane z panelu bywają ciemne) */
.ys-footer .footer__contact,
.ys-footer .footer__contact *,
.ys-footer .ys-footer__col,
.ys-footer .ys-footer__col * {
  color: var(--ys-text-soft, #4A4A4A) !important;
}
.ys-footer .footer__contact a:hover,
.ys-footer .ys-footer__col > a:hover {
  color: var(--ys-primary, #B8892B) !important;
}
.ys-footer .ys-footer__logo,
.ys-footer .ys-footer__col h4 {
  color: var(--ys-text, #1F1B16) !important;
}

/* ── GRID KOLUMN: 4 desktop → 1 mobile ── */
.ys-footer__top {
  max-width: var(--ys-maxw, 1240px);
  margin: 0 auto;
  padding: 58px 24px 38px;
  display: grid;
  grid-template-columns: 1.5fr 1fr 1fr 1.1fr;
  gap: 40px;
}
.ys-footer__col {
  text-align: left;
}
.ys-footer__logo {
  display: flex;
  align-items: center;
  gap: 10px;
  font-family: var(--ys-font-heading, serif);
  font-size: 22px;
  color: var(--ys-text, #1F1B16);
  margin-bottom: 14px;
  letter-spacing: 0.02em;
}
.ys-footer__logo svg {
  width: 28px;
  height: 28px;
  color: var(--ys-primary, #B8892B);
  flex-shrink: 0;
}
.ys-footer__tag {
  font-size: 14px;
  line-height: 1.65;
  color: var(--ys-text-muted, #8A8378);
  max-width: 34ch;
  margin: 0;
}
.ys-footer__col h4 {
  font-family: var(--ys-font-heading, serif);
  font-size: 15px;
  color: var(--ys-text, #1F1B16);
  margin: 0 0 14px;
  font-weight: 500;
}
.ys-footer__col > a {
  font-size: 14px;
  color: var(--ys-text-soft, #4A4A4A);
  text-decoration: none;
  display: block;
  padding: 5px 0;
  transition: color 0.2s ease, padding-left 0.2s ease;
}
.ys-footer__col > a:hover {
  color: var(--ys-primary, #B8892B);
  padding-left: 4px;
}

/* ── PASEK DOLNY: © + płatności, lewo-wyrównany ── */
.ys-footer__bottom {
  border-top: 1px solid var(--ys-border, #E6DECE);
}
/* prawy padding 90px = miejsce na #backTop (fixed, right ~26px) */
.ys-footer__bottom-in {
  max-width: var(--ys-maxw, 1240px);
  margin: 0 auto;
  padding: 18px 90px 18px 24px;
  display: flex;
  align-items: center;
  justify-content: flex-start;
  gap: 28px;
  flex-wrap: wrap;
  font-size: 12px;
  color: var(--ys-text-muted, #8A8378);
}
.ys-footer__bottom-in a {
  color: var(--ys-text-muted, #8A8378);
  text-decoration: none;
}
.ys-footer__bottom-in a:hover {
  color: var(--ys-primary, #B8892B);
}

/* ── RELOKOWANE WĘZŁY SYSTEMOWE (przejmują nasz styl, dane z panelu) ── */
.ys-footer .footer__contact {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  gap: 9px;
  justify-items: start;
  /* platforma daje .footer__contact justify-content:center (mobile) - w GRIDZIE to centruje cala kolumne
     (li x=81 przy kolumnie x=34 @375, wschodnia-elegans 2026-10-01, F16). align-items = os pionowa. */
  justify-content: start !important;
  align-items: start !important;
}
.ys-footer .footer__contact li {
  display: flex;
  align-items: center;
  gap: 9px;
  font-size: 14px;
  justify-content: flex-start;
}
.ys-footer .footer__contact a {
  text-decoration: none;
}
/* link do regulaminu bywa w osobnym li — do lewej, nie wyśrodkowany */
.ys-footer .footer__contact li.footer-contact-terms {
  flex-direction: column;
  align-items: flex-start !important;
  gap: 4px;
}
.ys-footer .footer__contact li.footer-contact-terms a {
  align-self: flex-start !important;
  text-align: left !important;
}
/* adres ma 2 spany (ulica / kod+miasto) — block, żeby flex+gap ich nie rozjechał */
.ys-footer .footer-contact-adress {
  display: block !important;
}
.ys-footer ul.footer__social_media {
  list-style: none;
  display: flex;
  gap: 10px;
  padding: 0;
  margin: 16px 0 0;
}
.ys-footer ul.footer__social_media a {
  width: 38px;
  height: 38px;
  border-radius: 50%;
  border: 1px solid var(--ys-border, #E6DECE);
  display: flex;
  align-items: center;
  justify-content: center;
  color: var(--ys-text-soft, #4A4A4A);
  transition: background 0.2s ease, color 0.2s ease, border-color 0.2s ease;
}
.ys-footer ul.footer__social_media a:hover {
  background: var(--ys-primary, #B8892B);
  color: #FFF;
  border-color: var(--ys-primary, #B8892B);
}

/* ── POWERED-BY (TRAP-13, wymóg licencyjny — ZAWSZE widoczne) ──
   on_white.svg ma root fill="none" + ciemny wordmark → na jasnym tle OK jako
   <img>, ale NIGDY nie zerujemy widoczności. filter:none + opacity:1. */
.ys-footer .powered_by,
.powered_by {
  margin-top: 6px;
  display: inline-block;
}
.ys-footer .powered_by_logo,
.powered_by a.powered_by_logo {
  display: inline-block;
  background: transparent;
  padding: 0;
  border: 0;
  border-radius: 0;
}
.powered_by a,
.powered_by img,
.ys-footer .powered_by_logo img {
  filter: none !important;
  opacity: 1 !important;
  display: block;
}
/* ROZMIAR ZNAKU (rewizja 2026-09-30, kanon miaapart §MI-PAS-PLATNOSCI):
   sterujemy WYSOKOSCIA przy `content-box` i zerowym paddingu. Stare
   `width:150px` dawalo przy grafice 3:1 z duza iloscia swiatla znak
   optycznie malutki (zglaszane: miaapart, wschodnia-elegans), a odziedziczony
   `padding` przy `border-box` potrafil zostawic obrazkowi 10 px (lesson 094).
   52 px = porownywalne z VISA/MC w tym samym rzedzie, nie schowane.
   Waga `:not(#_)`, bo reguly rozmiaru z blokow stopki maja `!important`.
   Egzekucja: lint L-powered-width (biblioteka). */
html body:not(#_) .powered_by_logo img,
html body:not(#_) .powered_by img {
  padding: 0 !important;
  box-sizing: content-box !important;
  height: 52px !important;
  width: auto !important;
  max-width: none !important;
  max-height: none !important;
  background: transparent !important;
  display: inline-block !important;
}
@media (max-width: 560px) {
  html body:not(#_) .powered_by_logo img,
  html body:not(#_) .powered_by img { height: 44px !important; }
}

/* ── PŁATNOŚCI (TRAP-13) — własne czyste loga na jasnym tle, BEZ ciemnego boxa ──
   Systemowe loga MC mają biały wordmark (pod ciemne tło) → na jasnym niewidoczne.
   JS fixPaymentLogos() ukrywa systemowe i wstawia .ys-pay (VISA + MC).
   TRAP-12: kill navy pseudo-pas .footer-contact-baner::before/::after. */
.ys-footer .footer-contact-baner {
  background: transparent !important;
  padding: 0 !important;
  border-radius: 0 !important;
  box-shadow: none !important;
  display: inline-flex !important;
  gap: 28px !important;
  align-items: center !important;
  flex-wrap: wrap !important;
  margin-left: auto !important;   /* pas zaufania przy PRAWEJ krawedzi, © po lewej */
}
/* §PAS-PLATNOSCI (kanon miaapart, biblioteka od 2026-09-30): VISA, Mastercard
   i znak Powered by w JEDNYM rzedzie. Znak przenosi tu ido-footer-rebuild.js.
   Dzieci pasa nie dostaja zadnego wlasnego tla ani ramki. */
.ys-footer .footer-contact-baner > *,
.ys-footer .footer-contact-baner > .powered_by {
  flex: 0 0 auto !important;
  display: inline-flex !important;
  align-items: center !important;
  width: auto !important;
  margin: 0 !important;
  padding: 0 !important;
  background: transparent !important;
  border: 0 !important;
  border-radius: 0 !important;
  box-shadow: none !important;
}
@media (max-width: 560px) {
  .ys-footer .footer-contact-baner { gap: 18px !important; margin: 0 auto !important; justify-content: center !important; }
}
.ys-footer .footer-contact-baner::before,
.ys-footer .footer-contact-baner::after,
.footer-contact-baner::before,
.footer-contact-baner::after {
  display: none !important;
  content: none !important;
}
/* własne loga wstrzyknięte przez JS — czyste kolory na jasnym tle */
.ys-pay {
  display: inline-flex;
  align-items: center;
  gap: 20px;
}
.ys-pay svg {
  height: 28px;
  width: auto;
  display: block;
}
/* relokowane systemowe loga (jeśli JS ich nie podmienił) — pokaż w realnych
   kolorach zamiast systemowego filter:invert(1) który je wybielał */
.ys-footer .footer-contact-baner svg,
.ys-footer .footer-contact-baner > span img {
  filter: none !important;
  height: 26px;
  width: auto;
  opacity: 1 !important;
}

/* ── UKRYJ oryginalną systemową stopkę gdy zbudowano naszą ── */
body.ys-footer-built footer > .footer.container {
  display: none !important;
}
body.ys-footer-built footer:not(.ys-footer) {
  display: none !important;
}

/* ── RESPONSYWNOŚĆ: 4 kol → 2 → 1 ── */
@media (max-width: 860px) {
  .ys-footer__top {
    grid-template-columns: 1fr 1fr;
    gap: 30px;
  }
}
@media (max-width: 560px) {
  .ys-footer__top {
    grid-template-columns: 1fr;
  }
  .ys-footer__bottom-in {
    flex-direction: column;
    text-align: center;
    padding-right: 24px;
  }
}


/* ==========================================================================
   §NAV-DRAWER (mobile fallback) — dla initNavFallback() z ido-mobile-nav.js
   --------------------------------------------------------------------------
   Na HOME systemowy hamburger bywa martwy (bxSlider psuje systemowy JS menu).
   initNavFallback() przełącza `body.ys-nav-open`; ten harness pokazuje
   #navbar jako slide-drawer ≤991px.

   Trapy pokryte:
     - hamburger .navbar-toggler MUSI być fixed, POZA off-screen drawerem,
       widoczny nad wszystkim (inaczej znika razem z ukrytym #navbar).
     - backdrop z-index MUSI być MNIEJSZY niż header/toggler (inaczej backdrop
       nad drawerem = klik nie działa; feedback_..._backdrop_zindex_above_header).

   Ref: feedback_idobooking_home_bxslider_breaks_mobile_menu,
        feedback_idobooking_mobile_nav_toggler_inside_offscreen_drawer,
        feedback_idobooking_mobile_drawer_backdrop_zindex_above_header.
   ========================================================================== */
@media (max-width: 991.98px) {
  /* hamburger — fixed POZA drawerem, zawsze widoczny (z-index > drawer > backdrop) */
  .navbar-toggler,
  .menu-toggle {
    position: fixed !important;
    top: 12px;
    right: 14px;
    z-index: 1200 !important;
    display: inline-flex !important;
    align-items: center;
    justify-content: center;
  }

  /* CLOSED (baza) — #navbar UKRYTY na mobile HOME, gdy drawer zamknięty. Bez tej reguły
     natywny hamburger default13 (podpięty do tego samego .navbar-toggler) przecieka #navbar
     jako display:block; position:static = WYŚRODKOWANY blok podczas swojego OPÓŹNIONEGO
     (~350ms) chowania po zamknięciu drawera („flash"). Czyni ys-nav-open JEDYNYM
     źródłem widoczności #navbar na mobile. SCOPE `page-index` KRYTYCZNY: podstrony używają
     natywnego #navbar — globalne #navbar{display:none} ubiłoby ich menu. Open rule niżej
     (równa specyficzność 0,1,1 + !important) wygrywa dzięki KOLEJNOŚCI ŹRÓDŁA. Ref: lessons/029. */
  body.page-index #navbar {
    display: none !important;
  }

  /* #navbar jako slide-drawer — wjeżdża po dodaniu klasy (nadpisuje CLOSED powyżej) */
  body.ys-nav-open #navbar {
    display: block !important;
    position: fixed !important;
    top: 0;
    right: 0;
    left: auto;
    width: min(82vw, 340px) !important;
    max-width: 340px !important;
    /* bottom:0 zamiast height:100vh: silnik ustawia szufladzie W LINII top = wysokosc naglowka (zmierzone
       wschodnia-elegans 2026-10-02: top:103px), wiec 100vh wypychalo jej dol 103 px pod ekran - ostatnie pozycje
       przy rozwinietym podmenu byly nieosiagalne. bottom:0 konczy ja na dole ekranu takze z paskiem adresu. */
    bottom: 0 !important;
    height: auto !important;
    max-height: none !important;
    overflow-y: auto !important;
    background: var(--ys-bg, #FFF) !important;
    box-shadow: -8px 0 40px rgba(0, 0, 0, 0.22) !important;
    z-index: 1100 !important;
    padding: 72px 24px 28px !important;
    box-sizing: border-box !important;
    transform: translateX(0) !important;
  }

  /* szuflada przesunieta przez silnik pod naglowek (inline top: <wysokosc naglowka>) nie potrzebuje 72 px
     odstepu na naglowek - byl podwojny (pusty pas nad pierwsza pozycja menu) */
  body.ys-nav-open #navbar[style*="top"]:not([style*="top: 0"]) { padding-top: 24px !important; }

  /* backdrop — półprzezroczysta zasłona POD drawerem (z-index < drawer i < toggler) */
  body.ys-nav-open::after {
    content: "";
    position: fixed;
    inset: 0;
    background: rgba(0, 0, 0, 0.42);
    z-index: 1050;
    pointer-events: none;   /* klik-poza-drawerem obsługuje JS na document */
  }

  /* linki w drawerze — czytelny stack */
  body.ys-nav-open #navbar ul,
  body.ys-nav-open #navbar .menu {
    display: block !important;
    flex-direction: column !important;
  }
  body.ys-nav-open #navbar a {
    display: block !important;
    padding: 12px 0 !important;
  }
}


/* =========================================================
   §CONTACT — /contact (AUTOMATYCZNA strona, body.page-contact)
   ---------------------------------------------------------
   Deliverable (KAŻDY default13, lessons/034): mapa NAD listą kontaktów
   + STYLOWANE pola formularza (border marki + focus-ring) + brand button
   + typografia. NIE zostawiaj stuba (sam link + goły leaflet). /contact jest
   renderowana przez SYSTEM (NIE body_top) → stylujemy CSS-only, scope body.page-contact.
   Kanon: osada §E (mapa/leaflet) + cityofthekings M5 (pola).
   Ref: feedback_idobooking_contact_page_auto · deliverable N-contact-canonical.
   Tokeny: tylko --ido-* zdefiniowane w :root (scaffold) + literały (brak undefined-var). */
/* mapa NAD listą (system renderuje mapę pod listą → flex + order:-1) */
body.page-contact .contact,
body.page-contact .contact-wrapper {
  display: flex !important;
  flex-direction: column !important;
}
body.page-contact #map_container,
body.page-contact .leaflet-container {
  order: -1 !important;
  border-radius: var(--ido-radius, 8px) !important;
  overflow: hidden !important;
  /* rewizja 2026-09-30: 320 px bylo za malo (zgloszenie wschodnia-elegans pkt 14) -
     mapa ma pokazac dzielnice, nie tylko kwartal wokol pinezki */
  min-height: clamp(360px, 52vh, 560px) !important;
}
/* ODSTEP MAPA -> KOLUMNY (rewizja 2026-09-30). Zmierzone na wschodnia-elegans:
   dolna krawedz mapy = gorna krawedz H2 „Platnosci" (0 px), H1 kolumny obok mial
   poprawke tylko u klienta, wiec kolumny staly nierowno. Poprawka istniala u
   u-aniolka (`ua-klient.css`), nie w bibliotece - stad powtorka.
   Egzekucja: lint L-contact-payments-gap + asercja live §14x. */
body.page-contact .contact__label,
body.page-contact .contact__payments .contact__label,
body.page-contact .contact__payments h2,
body.page-contact h1.contact__label {
  margin-top: clamp(28px, 3.5vw, 48px) !important;
  margin-bottom: 18px !important;
}
/* TRESC Z PANELU bez obcych fontow (wschodnia-elegans 2026-10-01, spec 15): tekst wklejony do edytora panelu
   niesie inline `font-family: tahoma` (kopiuj-wklej z Worda) - na /contact i w sekcjach CMS gosc widzi
   trzeci krój. Kroj dziedziczymy z marki; reszta stylu inline (pogrubienie, kolor) zostaje. */
body .contact [style*="font-family"], body .txt-text [style*="font-family"], body .news-wrapper [style*="font-family"],
body .about-main-description [style*="font-family"] { font-family: inherit !important; }
/* ODSTEP OD STOPKI (spec 15, wschodnia-elegans 2026-10-01): silnik daje main#pageContent padding-bottom:0,
   ostatnia sekcja /contact stykala sie ze stopka (0 px). Padding na KONTENERZE, nie margines dziecka. */
body.page-contact #pageContent { padding-bottom: clamp(40px, 5vw, 72px) !important; }
/* DANE DO PRZELEWU: etykieta i wartosc w dwoch kolumnach z oddechem, odstep od
   kreski ponizej (zgloszenie: „zbyt blisko kreski pod"). */
body.page-contact .contact__list.--bank {
  display: grid !important;
  gap: 10px !important;
  margin: 0 0 28px !important;
  padding: 0 0 8px !important;
}
body.page-contact .contact__list.--bank li {
  display: grid !important;
  grid-template-columns: minmax(130px, 42%) minmax(0, 1fr) !important;
  column-gap: 16px !important;
  align-items: baseline !important;
  padding: 0 !important;
  line-height: 1.5 !important;
}
body.page-contact .contact__list.--bank li > span:first-child {
  color: var(--ido-dark, #1A1A1A) !important;
  opacity: .7;
  font-size: 14px !important;
}
body.page-contact .contact__list.--bank li > span:last-child {
  font-weight: 600 !important;
  font-variant-numeric: tabular-nums;
  overflow-wrap: anywhere;
  white-space: normal !important;   /* silnik daje nowrap: IBAN (32 zn.) wychodzil z kolumny i dosuwal sie do etykiety */
  min-width: 0;
}
/* NUMER KONTA (pierwszy wiersz): etykieta NAD numerem, numer na pelna szerokosc i w jednej linii, gdy sie miesci
   (zgloszenie Damiana 2026-10-01, wschodnia-elegans: „Dane do przelewu najezdza na numer konta"). Egzekucja: 14ba. */
body.page-contact .contact__list.--bank li:first-child { grid-template-columns: 1fr !important; row-gap: 4px !important; }
body.page-contact .contact__list.--bank li:first-child > span:last-child { font-size: 16px !important; letter-spacing: .02em; }
@media (max-width: 560px) {
  body.page-contact .contact__list.--bank li { grid-template-columns: 1fr !important; row-gap: 2px !important; }
}
/* linki + brand button */
body.page-contact a { color: var(--ido-primary, var(--ys-primary)) !important; }
body.page-contact a:hover { color: var(--ido-secondary, #A6894F) !important; }
body.page-contact .btn,
body.page-contact form button,
body.page-contact form input[type="submit"] {
  background: var(--ido-primary, var(--ys-primary)) !important;
  border-color: var(--ido-primary, var(--ys-primary)) !important;
  color: #FFFFFF !important;
  border-radius: var(--ido-radius, 8px) !important;
  /* Przycisk to UI, nie naglowek: font TEKSTOWY. Zmierzone 2026-09-07 na 60345 -
     ta regula dawala `.btn` na /contact font Cormorant (serif), gdy ten sam `.btn`
     na /offers mial Karla. Rozjazd wylapany przez spec 15 (lessons/072). */
  font-family: var(--ido-font-body, system-ui) !important;
  font-weight: 700 !important;
}
body.page-contact .btn:hover,
body.page-contact form button:hover { background: var(--ido-secondary, #A6894F) !important; }
/* STYLOWANE POLA formularza — border marki + focus-ring (nie systemowa siwizna) */
body.page-contact input[type="text"],
body.page-contact input[type="email"],
body.page-contact input[type="tel"],
body.page-contact textarea,
body.page-contact select {
  width: 100% !important;
  font-family: var(--ido-font-body, system-ui) !important;
  font-size: 15px !important;
  color: var(--ido-dark, #1A1A1A) !important;
  background: var(--ido-light, #FFFFFF) !important;
  border: 1px solid rgba(0, 0, 0, 0.14) !important;
  border-radius: var(--ido-radius, 8px) !important;
  padding: 12px 14px !important;
  transition: border-color .2s ease, box-shadow .2s ease !important;
}
body.page-contact input:focus,
body.page-contact textarea:focus,
body.page-contact select:focus {
  outline: 0 !important;
  border-color: var(--ido-primary, var(--ys-primary)) !important;
  box-shadow: 0 0 0 3px rgba(204, 27, 34, 0.18) !important;
}
body.page-contact textarea { min-height: 140px !important; resize: vertical !important; }


/* ═══════════════════════════════════════════════════════════════════════════════
   §LANG-SWITCHER — przelacznik jezyka (naglowek, prawy gorny rog)
   ───────────────────────────────────────────────────────────────────────────────
   BUG-KLASA (2026-07-31, five-stars, zgloszenie Damiana: „ta sekcja jest taka szara"):
   natywny dropdown jezykow default13 to `#language_menu` z tlem **#E5E5E5**, BEZ ramki,
   cienia i promienia, `z-index:auto`, a flagi to PNG **20x13 px** wciete w `display:flex`
   bez odstepow. Wyglada jak systemowy panel sterowania wklejony w premium naglowek.
   Zaden nasz layer tego nie dotykal, wiec KAZDY klient wielojezyczny mial to szare.

   ANATOMIA (z live DOM, nie z domyslu):
     .page-top__language            wrapper (position:relative)
       button.language__toggler     etykieta biezacego jezyka + i.icon-arrow_smaller_down
                                    (+ span.visuallyhidden = nazwa dostepna, NIE RUSZAC)
       #language_menu.language      panel (klasa `.active` gdy otwarty)
         .flags > a[hreflang][title]  link jezyka; `title` = NAZWA jezyka („Polski"/„English")
           img.flag                   PNG 20x13
         .currency > form > select    waluty (u wielu klientow display:none — stylujemy defensywnie)

   ZASADY:
   1. Etykieta jezyka bierze sie z `attr(title)` — silnik podaje ja per jezyk, wiec ZERO
      hardkodowania nazw i zero pracy przy dodaniu kolejnego jezyka.
   2. Aktywny jezyk zaznaczamy STATYCZNIE przez `html[lang="xx"] … a[hreflang="xx"]` —
      bez JS, dziala tez gdy panel renderuje sie po stronie serwera.
   3. Kolor etykiety = `inherit` (dziedziczy po naglowku), zeby przelacznik byl czytelny
      i na przezroczystym naglowku nad hero, i na bialej belce podstron.
   4. `filter` TYLKO na flagach — nigdy na logo powered-by (TRAP-03).
   ═══════════════════════════════════════════════════════════════════════════════ */

/* --- toggler (etykieta biezacego jezyka) --- */
header .page-top__language .language__toggler {
  display: inline-flex !important;
  align-items: center;
  gap: 7px;
  padding: 6px 2px !important;
  background: transparent !important;
  border: 0 !important;
  font-family: var(--ido-font-body, sans-serif) !important;
  font-size: 11px !important;
  font-weight: 600 !important;
  letter-spacing: 0.18em !important;
  text-transform: uppercase;
  color: inherit !important;
  cursor: pointer;
  transition: color 0.2s ease, opacity 0.2s ease;
}
header .page-top__language .language__toggler:hover { color: var(--ido-primary, #B0914F) !important; }
header .page-top__language .language__toggler i {
  display: inline-block;
  font-size: 9px;
  transition: transform 0.25s ease;
}
header .page-top__language .language__toggler[aria-expanded="true"] i { transform: rotate(180deg); }
header .page-top__language .language__toggler:focus-visible {
  outline: 2px solid var(--ido-primary, #B0914F);
  outline-offset: 3px;
}

/* --- panel --- */
header .page-top__language #language_menu.language {
  top: calc(100% + 12px) !important;
  right: 0 !important;
  left: auto !important;
  min-width: 178px;
  max-width: calc(var(--ys-vw, 100vw) - 24px);
  padding: 8px !important;
  background: #FFFFFF !important;
  border: 1px solid var(--ido-hairline, rgba(176, 145, 79, 0.5)) !important;
  border-radius: 0 !important;
  box-shadow: 0 18px 44px rgba(20, 20, 20, 0.16) !important;
  z-index: 1200 !important;
}
/* dziobek — kotwiczy panel wizualnie w togglerze */
header .page-top__language #language_menu.language::after {
  content: "";
  position: absolute;
  top: -5px;
  right: 18px;
  width: 8px;
  height: 8px;
  background: #FFFFFF;
  border-left: 1px solid var(--ido-hairline, rgba(176, 145, 79, 0.5));
  border-top: 1px solid var(--ido-hairline, rgba(176, 145, 79, 0.5));
  transform: rotate(45deg);
}

/* --- lista jezykow: flaga + NAZWA z attr(title) --- */
header .page-top__language #language_menu .flags {
  display: block !important;
  margin: 0 !important;
  padding: 0 !important;
}
header .page-top__language #language_menu .flags a {
  display: flex !important;
  align-items: center;
  gap: 11px;
  padding: 9px 10px !important;
  margin: 0 !important;
  text-decoration: none !important;
  border-radius: 0;
  transition: background-color 0.2s ease;
}
header .page-top__language #language_menu .flags a::after {
  content: attr(title);
  font-family: var(--ido-font-body, sans-serif);
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  line-height: 1;
  color: var(--ido-dark, #1A1917);
  transition: color 0.2s ease;
}
header .page-top__language #language_menu .flags a:hover { background: var(--ido-bg, #F7F4EE) !important; }
header .page-top__language #language_menu .flags a:hover::after { color: var(--ido-primary, #B0914F); }
header .page-top__language #language_menu .flags a:focus-visible {
  outline: 2px solid var(--ido-primary, #B0914F);
  outline-offset: -2px;
}
header .page-top__language #language_menu .flags img.flag {
  width: 24px !important;
  height: 16px !important;
  max-width: none !important;
  object-fit: cover;
  display: block !important;
  border: 1px solid rgba(20, 20, 20, 0.14);
  filter: saturate(0.9);
  transition: filter 0.2s ease, transform 0.2s ease;
}
header .page-top__language #language_menu .flags a:hover img.flag {
  filter: none;
  transform: scale(1.06);
}

/* --- aktywny jezyk: pasek zlota + etykieta w kolorze marki (bez JS) --- */
html[lang="pl"] header .page-top__language #language_menu .flags a[hreflang="pl"],
html[lang="en"] header .page-top__language #language_menu .flags a[hreflang="en"],
html[lang="de"] header .page-top__language #language_menu .flags a[hreflang="de"],
html[lang="es"] header .page-top__language #language_menu .flags a[hreflang="es"],
html[lang="cs"] header .page-top__language #language_menu .flags a[hreflang="cs"],
html[lang="uk"] header .page-top__language #language_menu .flags a[hreflang="uk"] {
  background: var(--ido-bg, #F7F4EE) !important;
  box-shadow: inset 2px 0 0 var(--ido-primary, #B0914F);
}
html[lang="pl"] header .page-top__language #language_menu .flags a[hreflang="pl"]::after,
html[lang="en"] header .page-top__language #language_menu .flags a[hreflang="en"]::after,
html[lang="de"] header .page-top__language #language_menu .flags a[hreflang="de"]::after,
html[lang="es"] header .page-top__language #language_menu .flags a[hreflang="es"]::after,
html[lang="cs"] header .page-top__language #language_menu .flags a[hreflang="cs"]::after,
html[lang="uk"] header .page-top__language #language_menu .flags a[hreflang="uk"]::after {
  color: var(--ido-primary, #B0914F);
}
html[lang="pl"] header .page-top__language #language_menu .flags a[hreflang="pl"] img.flag,
html[lang="en"] header .page-top__language #language_menu .flags a[hreflang="en"] img.flag,
html[lang="de"] header .page-top__language #language_menu .flags a[hreflang="de"] img.flag,
html[lang="es"] header .page-top__language #language_menu .flags a[hreflang="es"] img.flag,
html[lang="cs"] header .page-top__language #language_menu .flags a[hreflang="cs"] img.flag,
html[lang="uk"] header .page-top__language #language_menu .flags a[hreflang="uk"] img.flag { filter: none; }

/* --- waluty (gdy klient je pokazuje) --- */
header .page-top__language #language_menu .currency {
  margin: 6px 0 0 !important;
  padding: 8px 10px 2px !important;
  border-top: 1px solid rgba(20, 20, 20, 0.1);
}
header .page-top__language #language_menu .currency select {
  width: 100%;
  padding: 7px 8px;
  background: #FFFFFF;
  border: 1px solid rgba(20, 20, 20, 0.16);
  border-radius: 0;
  font-family: var(--ido-font-body, sans-serif);
  font-size: 12px;
  letter-spacing: 0.06em;
  color: var(--ido-dark, #1A1917);
}
header .page-top__language #language_menu .currency select:focus {
  outline: 0;
  border-color: var(--ido-primary, #B0914F);
  box-shadow: 0 0 0 3px rgba(176, 145, 79, 0.18);
}

@media (prefers-reduced-motion: reduce) {
  header .page-top__language .language__toggler i,
  header .page-top__language #language_menu .flags a,
  header .page-top__language #language_menu .flags img.flag { transition: none !important; }
  header .page-top__language #language_menu .flags a:hover img.flag { transform: none !important; }
}
/* --- TELEFON: rzad czterech przyciskow zamiast pudelka panelu (2026-10-02, wschodnia-elegans) ---
   Silnik w szufladzie chowa .language__toggler (span display:none, przycisk 4x12 px) i pokazuje liste na stale,
   a regula panelu wyzej obudowywala ja bialym pudelkiem 154 px z dziobkiem. Na telefonie jeden rzad
   flaga + KOD jezyka: jedno stukniecie zmienia jezyk, nic nie zajmuje pol ekranu. Asercja 14bd. */
@media (max-width: 991px) {
  header .page-top__language #language_menu.language {
    position: static !important; display: block !important; min-width: 0; max-width: none; margin: 18px 0 0 !important;
    padding: 0 !important; background: transparent !important; border: 0 !important; box-shadow: none !important;
  }
  header .page-top__language #language_menu.language::after { content: none !important; display: none !important; }
  /* 4 przyciski w JEDNYM rzedzie przy kolumnie szuflady 260 px (zmierzone: przy padding 12 i fladze 24 px
     wychodzilo 4 x 74 px = dwa rzedy) */
  header .page-top__language #language_menu .flags { display: flex !important; flex-wrap: wrap; justify-content: center; gap: 4px; }
  header .page-top__language #language_menu .flags a {
    gap: 5px; padding: 7px 8px !important; border: 1px solid rgba(20, 20, 20, 0.14); border-radius: 999px;
    background: transparent !important; box-shadow: none !important;
  }
  header .page-top__language #language_menu .flags a::after { content: attr(hreflang) !important; text-transform: uppercase; letter-spacing: .08em; font-size: 11px !important; }
  header .page-top__language #language_menu .flags a img.flag { width: 20px !important; height: 13px !important; }
  html[lang="pl"] header .page-top__language #language_menu .flags a[hreflang="pl"],
  html[lang="en"] header .page-top__language #language_menu .flags a[hreflang="en"],
  html[lang="de"] header .page-top__language #language_menu .flags a[hreflang="de"],
  html[lang="es"] header .page-top__language #language_menu .flags a[hreflang="es"],
  html[lang="cs"] header .page-top__language #language_menu .flags a[hreflang="cs"],
  html[lang="uk"] header .page-top__language #language_menu .flags a[hreflang="uk"] {
    border-color: var(--ido-primary, #B0914F) !important; background: var(--ido-bg, #F7F4EE) !important;
  }
  header .page-top__language #language_menu .flags img.flag { filter: none !important; }
}
/* /§LANG-SWITCHER */

/* ── §SUB-NAVI: podmenu z panelu (pozycja przesunieta w prawo w Strona www → Menu; silnik renderuje
   <ul class="sub-navi"> w li.nav-item, bez stylu marki). Kanon 2026-10-01 (wschodnia-elegans: Kawiarnia →
   Sniadania / Menu / Cocktail bar). Desktop: karta po :hover i :focus-within (klawiatura). Telefon: lista z wcieciem w szufladzie,
   ZWINIETA do stukniecia strzalki (aria-expanded, poprawka 2026-10-02). ── */
@media (min-width: 992px) {
  html body .navbar-nav > .nav-item:has(> .sub-navi) { position: relative; }
  html body .navbar-nav > .nav-item:has(> .sub-navi) > a::after {
    content: ""; display: inline-block; width: 6px; height: 6px; margin: 0 0 3px 7px; border-right: 1.5px solid currentColor;
    border-bottom: 1.5px solid currentColor; transform: rotate(45deg); opacity: .7;
  }
  html body .navbar-nav .sub-navi {
    display: none !important; position: absolute !important; top: 100% !important; left: 50% !important; transform: translateX(-50%);
    min-width: 210px; margin: 0 !important; padding: 8px !important; list-style: none; z-index: 1100 !important;
    background: #FFFFFF !important; border-radius: var(--xx-radius-lg, 16px) !important; border: 1px solid rgba(20, 32, 44, .08);
    box-shadow: 0 22px 48px -18px rgba(20, 16, 11, .35) !important;
  }
  html body .navbar-nav > .nav-item:hover > .sub-navi,
  html body .navbar-nav > .nav-item:focus-within > .sub-navi { display: block !important; }
  html body .navbar-nav .sub-navi::before { content: ""; position: absolute; left: 0; right: 0; top: -12px; height: 12px; }   /* most nad szczelina, kursor nie gubi menu */
  html body .navbar-nav .sub-navi li { margin: 0 !important; padding: 0 !important; }
  html body .navbar-nav .sub-navi a.nav-link {
    display: block !important; padding: 10px 14px !important; border-radius: var(--xx-radius, 10px) !important; white-space: nowrap;
    font-size: 14px !important; letter-spacing: .02em !important; text-transform: none !important; color: var(--xx-text, #1A1A1A) !important;
  }
  html body .navbar-nav .sub-navi a.nav-link:hover, html body .navbar-nav .sub-navi a.nav-link:focus-visible { background: var(--xx-cream, #F4EFE6) !important; }
}
@media (max-width: 991px) {
  html body .navbar-nav .sub-navi { display: block !important; position: static !important; transform: none !important; box-shadow: none !important;
    background: transparent !important; margin: 0 0 6px !important; padding: 0 0 0 16px !important; list-style: none; border-left: 1px solid rgba(20, 32, 44, .12); }
  html body .navbar-nav .sub-navi a.nav-link { font-size: 15px !important; padding: 8px 0 !important; opacity: .85; text-transform: none !important; }
  /* ZWINIETE, dopoki gosc nie stuknie strzalki: silnik przelacza TYLKO aria-expanded na button.nav-toggler
     (zmierzone 2026-10-02: false -> true -> false, lista caly czas 149 px). Chowamy wylacznie, gdy przycisk
     istnieje - bez skryptu silnika podmenu zostaje widoczne. Asercja 14bd, regula L-subnavi-mobile-zwiniete. */
  /* :not(#_) = waga ID: regula szuflady `body.<pfx>-nav-open #navbar ul {display:block!important}` ma ID i bila te zwykla */
  html body:not(#_) .navbar-nav > .nav-item:has(> .nav-toggler[aria-expanded="false"]) > .sub-navi { display: none !important; }
  /* strzalka = ::after silnika z transform: translate(50%, -50%); obracamy JA, skladajac z tym samym
     przesunieciem. Obrot przycisku albo wlasciwosc `rotate` przesuwaly strzalke o ~30 px (zmierzone). */
  html body .navbar-nav > .nav-item > .nav-toggler::after { transition: transform .2s ease; }
  html body .navbar-nav > .nav-item > .nav-toggler[aria-expanded="true"]::after { transform: translate(50%, -50%) rotate(180deg); }
}



/* ============================================================
   LAYER 3 — OFFER PAGE (has_offer:true)
   ============================================================ */

/* ═══════════════════════════════════════════════════════════════
   LAYER 3 — /OFFER/N/ PAGE BASE
   Reusable starter dla każdego nowego projektu IdoBooking.
   Adaptuj kolory przez podmianę CSS variables — zmienne `--xx-*`
   to placeholdery do podmienienia (np. --pk-, --fr-, --mc-).

   Pochodzenie: extracted z fairrentals (FR_ARKUSZ_STYLOW.css sekcje 28+49)
   + Piekary 1-3 (sekcja 50). Tested live (chrome-devtools MCP):
   - Sophie Apartment, /offer/13/ — tabs styled, prices centered,
     hotspot duplicates removed, page height -30%.

   Krytyczne klasy systemowe IdoBooking pokrywane:
   - .big-label, .offer-title (H1 — nazwa apartamentu)
   - .tabs / .object-menu (drugie menu obiektu — kalendarz/właściwości/...)
   - .object-price, .offer-price, .price-from, .price-block (ceny)
   - .price-list, .season-row, .season-cell_* (cennik sezonowy)
   - .offer-gallery, .gallery, .offer-photo (galeria)
   - .offer-features, .amenities, .features-list (udogodnienia)
   - .booking-form, .reservation-form (sidebar rezerwacji)
   - .container-hotspot (system "Proponowane oferty" — UKRYTE bo duplikat)
   ═══════════════════════════════════════════════════════════════ */

/* ──────────────────────────────────────────────────────────
   1. Page wrapper — padding sensowne, brak ucinania pod headerem
   ────────────────────────────────────────────────────────── */
html body.page-offer main,
html body.page-offer #pageContent {
  background: var(--xx-bg, #FAFAF5) !important;
  padding: clamp(80px, 10vw, 120px) clamp(20px, 4vw, 40px) clamp(40px, 6vw, 64px) !important;
}

/* Footer gap fix — eliminuj puste miejsce po cenniku */
html body.page-offer main,
html body.page-offer #pageContent {
  padding-bottom: 32px !important;
  margin-bottom: 0 !important;
}
html body.page-offer ~ footer,
html body.page-offer footer {
  margin-top: 0 !important;
}


/* ──────────────────────────────────────────────────────────
   2. Headings — nazwa apartamentu (H1) + sekcje (H2/H3)
   ────────────────────────────────────────────────────────── */
html body.page-offer h1,
html body.page-offer .big-label,
html body.page-offer .offer-title {
  font-family: var(--xx-font-heading, 'Playfair Display', serif) !important;
  font-size: clamp(32px, 4.4vw, 46px) !important;
  font-weight: 400 !important;
  color: var(--xx-text, #1A1A1A) !important;
  margin: 0 0 16px !important;
  line-height: 1.15 !important;
}

html body.page-offer h2,
html body.page-offer h3,
html body.page-offer .label,
html body.page-offer .offer-label {
  font-family: var(--xx-font-heading, 'Playfair Display', serif) !important;
  color: var(--xx-text, #1A1A1A) !important;
  margin-top: 32px !important;
  margin-bottom: 16px !important;
}


/* ──────────────────────────────────────────────────────────
   3. Object tabs (KALENDARZ DOSTĘPNOŚCI / WŁAŚCIWOŚCI / ZASADY...)
   System renderuje ul.tabs z linkami. Bez stylowania = brzydkie
   default <li> bullets + brak hierarchii. Tu: flex + underline.
   ────────────────────────────────────────────────────────── */
html body.page-offer .tabs,
html body.page-offer .object-menu,
html body.page-offer ul.tabs {
  display: flex !important;
  flex-wrap: wrap !important;
  gap: 0 !important;
  list-style: none !important;
  margin: 0 0 32px !important;
  padding: 0 !important;
  border-bottom: 1px solid var(--xx-border, #E5DDD0) !important;
  background: transparent !important;
}
html body.page-offer .tabs > li,
html body.page-offer .tabs > a,
html body.page-offer .object-menu > li,
html body.page-offer .object-menu > a {
  flex: 0 0 auto !important;
  list-style: none !important;
  margin: 0 !important;
  padding: 0 !important;
}
html body.page-offer .tabs a,
html body.page-offer .object-menu a {
  display: inline-block !important;
  padding: 14px 18px !important;
  font-family: var(--xx-font-body, 'DM Sans', sans-serif) !important;
  font-size: 12px !important;
  font-weight: 600 !important;
  letter-spacing: 1.6px !important;
  text-transform: uppercase !important;
  color: var(--xx-text-muted, #6B6B6B) !important;
  text-decoration: none !important;
  border-bottom: 2px solid transparent !important;
  transition: color 0.3s ease, border-color 0.3s ease !important;
}
html body.page-offer .tabs a:hover,
html body.page-offer .object-menu a:hover,
html body.page-offer .tabs li.active a,
html body.page-offer .tabs a.active,
html body.page-offer .object-menu a.active {
  color: var(--xx-primary, var(--ys-primary)) !important;
  border-bottom-color: var(--xx-primary, var(--ys-primary)) !important;
}


/* ──────────────────────────────────────────────────────────
   4. Price block — wycentrowany, cream tło, primary akcent
   Default systemowy: text-align right, flex — wygląda krzywo.
   ────────────────────────────────────────────────────────── */
html body.page-offer .object-price,
html body.page-offer .offer-price,
html body.page-offer .price-block,
html body.page-offer .price-from {
  display: flex !important;
  flex-direction: column !important;
  align-items: center !important;
  justify-content: center !important;
  text-align: center !important;
  margin: 0 auto 16px !important;
  width: 100% !important;
}
html body.page-offer .object-price {
  background: var(--xx-cream, #F2EDE4) !important;
  border: 1px solid var(--xx-border, #E5DDD0) !important;
  border-radius: var(--xx-radius-lg, 16px) !important;
  padding: 24px 32px !important;
  max-width: 280px !important;
  font-family: var(--xx-font-heading, 'Playfair Display', serif) !important;
  font-size: 18px !important;
  color: var(--xx-text, #1A1A1A) !important;
  box-shadow: var(--xx-shadow, 0 4px 30px rgba(26,26,26,0.08)) !important;
}
html body.page-offer .object-price .price {
  font-size: 28px !important;
  font-weight: 500 !important;
  color: var(--xx-primary, var(--ys-primary)) !important;
  letter-spacing: 0.5px !important;
}


/* ──────────────────────────────────────────────────────────
   5. Cennik sezonowy — JEDNA karta na sezon (rewizja 2026-09-30)
   Stara wersja biblioteki dawala kremowy kontener + ramki wierszy,
   a systemowa tabela i .object-price dokladaly swoje: jedna cena w
   CZTERECH zagniezdzonych prostokatach (pomiar mickiewicza40 runda 20,
   wschodnia-elegans 2026-09-30). Zgloszenie wracalo u kazdego klienta,
   bo poprawka zyla tylko w CSS mickiewicza40. Kanon teraz tutaj.
   Zostaje JEDNA ramka: systemowa tabela = karta sezonu.
   Egzekucja: lint L-cennik-nested (biblioteka) + asercja live §14w.
   ────────────────────────────────────────────────────────── */
html body.page-offer .offer-desc-wrapper {
  /* systemowa obwodka 1 px w kolorze TEKSTU (currentColor) dookola calego panelu zakladek -
     piata ramka wokol ceny (wschodnia-elegans 2026-10-01, pomiar rodzicow #offer-prices) */
  border: 0 !important;
}
html body.page-offer .offer-prices,
html body.page-offer .offer-prices.tab,
html body.page-offer #offer-prices_mobile {
  border: 0 !important;
  box-shadow: none !important;
  background: transparent !important;
}
html body.page-offer .price-list,
html body.page-offer .price-list.row {
  background: transparent !important;
  border: 0 !important;
  border-radius: 0 !important;
  box-shadow: none !important;
  padding: 0 !important;
  margin: 18px 0 0 !important;
}
html body.page-offer .season-row,
html body.page-offer [class*="season-row"] {
  border: 0 !important;
  box-shadow: none !important;
  background: transparent !important;
  padding: 0 !important;
}
html body.page-offer .offer-prices table {
  width: 100% !important;
  background: #FFFFFF !important;
  border: 1px solid rgba(20, 32, 44, .12) !important;
  border-radius: 14px !important;
  border-collapse: separate !important;
  border-spacing: 0 !important;
  overflow: hidden !important;
  margin: 0 0 18px !important;
}
html body.page-offer .offer-prices table td,
html body.page-offer .offer-prices table th,
html body.page-offer .offer-prices table tr {
  border: 0 !important;
}
html body.page-offer .season-cell_heading td {
  /* neutralny odcien na bialej karcie - NIE --xx-cream: w ciemnych vibe'ach (np.
     art-deco-vintage) ten token jest ciemny (#1A1A1A) i pasek robil sie czarny */
  background: rgba(20, 32, 44, .035) !important;
  border-bottom: 1px solid rgba(20, 32, 44, .10) !important;
  padding: 13px 20px !important;
}
html body.page-offer .season-cell_main td { padding: 20px !important; }
html body.page-offer .season-cell_heading,
html body.page-offer .season-cell_dates,
html body.page-offer .season-cell_date {
  font-family: var(--xx-font-body, sans-serif) !important;
  color: var(--xx-text, #1A1A1A) !important;
  font-size: 12.5px !important;
  font-weight: 600 !important;
  letter-spacing: .08em !important;
  text-transform: uppercase !important;
}
/* `.season-cell_dates` ma systemowy border-bottom BEZ koloru (= currentColor),
   a `tr.season-cell_footer` to pusty wiersz 2 px z ramka - dwie ostatnie kreski */
html body.page-offer .season-cell_dates,
html body.page-offer .season-cell_heading span,
html body.page-offer .season-cell_main td > div {
  border-top: 0 !important;
  border-bottom: 0 !important;
  padding-left: 0 !important;
  padding-right: 0 !important;
}
html body.page-offer tr.season-cell_footer,
html body.page-offer .season-cell_footer td {
  display: none !important;
}
/* cena W KARCIE: sama typografia, bez wlasnego pudelka */
html body.page-offer .offer-prices .object-price {
  background: transparent !important;
  border: 0 !important;
  border-radius: 0 !important;
  box-shadow: none !important;
  padding: 0 0 14px !important;
  max-width: none !important;
  align-items: flex-start !important;
  text-align: left !important;
  font-family: var(--xx-font-body, sans-serif) !important;
  font-size: 14px !important;
  color: var(--xx-text-soft, #45453F) !important;
}
html body.page-offer .offer-prices .object-price .price {
  font-family: var(--xx-font-heading, serif) !important;
  font-size: 30px !important;
  font-weight: 600 !important;
  color: var(--xx-text, #14202C) !important;
  letter-spacing: -.01em !important;
}
html body.page-offer .season-cell_year,
html body.page-offer .year-label.label {
  font-family: var(--xx-font-body, sans-serif) !important;
  font-size: 13px !important;
  font-weight: 600 !important;
  letter-spacing: .1em !important;
  color: var(--xx-text-muted, #55616E) !important;
  margin: 0 0 12px !important;
  background: transparent !important;
}


/* ──────────────────────────────────────────────────────────
   6. Gallery + features + booking-form — białe karty z border
   ────────────────────────────────────────────────────────── */
html body.page-offer .offer-gallery img,
html body.page-offer .gallery img,
html body.page-offer .offer-photo img,
html body.page-offer .object-gallery img {
  border-radius: var(--xx-radius, 8px) !important;
}

html body.page-offer .offer-features,
html body.page-offer .amenities,
html body.page-offer .features-list,
html body.page-offer .object-amenities {
  background: var(--xx-white, #FFFFFF) !important;
  border-radius: var(--xx-radius-lg, 16px) !important;
  border: 1px solid var(--xx-border, #E5DDD0) !important;
  padding: 24px !important;
  margin: 16px 0 !important;
}

html body.page-offer .booking-form,
html body.page-offer .reservation-form,
html body.page-offer aside.booking,
html body.page-offer .object-booking {
  background: var(--xx-white, #FFFFFF) !important;
  border-radius: var(--xx-radius-lg, 16px) !important;
  border: 1px solid var(--xx-border, #E5DDD0) !important;
  padding: 24px !important;
  box-shadow: var(--xx-shadow, 0 4px 30px rgba(26,26,26,0.08)) !important;
}


/* ──────────────────────────────────────────────────────────
   7. Form inputs — brand focus state
   ────────────────────────────────────────────────────────── */
html body.page-offer input:not([type="radio"]):not([type="checkbox"]),
html body.page-offer select,
html body.page-offer textarea {
  font-family: var(--xx-font-body, 'DM Sans', sans-serif) !important;
  font-size: 15px !important;
  border: 1px solid var(--xx-border, #E5DDD0) !important;
  border-radius: var(--xx-radius, 8px) !important;
  padding: 12px 16px !important;
  min-height: 46px !important;
  background: var(--xx-white, #FFFFFF) !important;
}
html body.page-offer input:focus,
html body.page-offer select:focus,
html body.page-offer textarea:focus {
  border-color: var(--xx-primary, var(--ys-primary)) !important;
  box-shadow: 0 0 0 3px var(--xx-primary-soft, rgba(204, 27, 34, 0.15)) !important;
  outline: none !important;
}


/* ──────────────────────────────────────────────────────────
   8. .container-hotspot — UKRYJ na /offer/N/
   System na /offer/N/ pokazuje "Proponowane oferty" w hotspocie
   z CAŁYM katalogiem (np. 122 obiekty u brokera Mentalis).
   To 99% duplikat z featured offers + przepełnienie strony.
   Jeśli masz własną sekcję wyróżnionych na home, na /offer/N/
   też ukryj nasze pk-offers-section (JS w initOfferPageBranding).
   ────────────────────────────────────────────────────────── */
body.page-offer .container-hotspot {
  display: none !important;
}


/* ──────────────────────────────────────────────────────────
   10. STICKY TABS — BEM modifier --fixed (KRYTYCZNE!)
   System IdoBooking dodaje JS-em modifier --fixed do .tabs gdy
   gość scrolluje past natural tab position. Bez tego stylowania
   sticky pasek jest WĄSKI (system max-width:1140px) + items
   pionowo (gdy .tabs__item bez width:auto).
   Historia: fairrentals v1.6 + v1.40, piekary 2026-05-25.
   Pełna analiza: lessons/024-tabs-fixed-bem-modifier-sticky-scroll.md
   ────────────────────────────────────────────────────────── */
html body .tabs.--fixed,
html body.page-offer .tabs.--fixed,
html body .tabs.tabs--fixed,
html body .tabs.sticky {
  position: fixed !important;
  top: 64px !important;              /* MUSI być zsynchronizowane z header scrolled height (verify live!) */
  left: 0 !important;
  right: 0 !important;
  inset-inline: 0 !important;
  width: var(--ys-vw, 100vw) !important;
  max-width: var(--ys-vw, 100vw) !important;       /* DEFEAT system .tabs{max-width:1140px} */
  min-width: 0 !important;
  margin: 0 !important;
  padding: 0 24px !important;
  z-index: 999 !important;
  background: rgba(255, 255, 255, 0.98) !important;
  box-shadow: var(--xx-shadow, 0 4px 30px rgba(26,26,26,0.08)) !important;
  border-bottom: 1px solid var(--xx-border, #E5DDD0) !important;
  display: flex !important;
  justify-content: center !important;
  align-items: center !important;
  flex-wrap: wrap !important;
  gap: 4px !important;
  backdrop-filter: blur(10px) !important;
  -webkit-backdrop-filter: blur(10px) !important;
  box-sizing: border-box !important;
}

/* Mobile — header scrolled na mobile ~56px */
@media (max-width: 991.98px) {
  html body .tabs.--fixed,
  html body.page-offer .tabs.--fixed,
  html body .tabs.tabs--fixed {
    top: 56px !important;
    padding: 0 16px !important;
  }
}

/* KLUCZOWE: .tabs__item to KLIKALNY div z <span> w środku (tabindex+JS).
   IdoBooking NIE używa <a> w sticky tabs — wszystkie style padding/font
   muszą iść BEZPOŚREDNIO na .tabs__item, nie na descendant <a>.
   Active state: .tabs__item.active (zwykła klasa, bez BEM --).
   Live evidence (piekary 2026-05-25): DOM = <div class="tabs__item">
                                          <span>Tekst</span>
                                        </div> */
html body .tabs > .tabs__item,
html body .tabs .tabs__item,
html body .tabs.--fixed > .tabs__item,
html body .tabs.--fixed .tabs__item {
  flex: 0 0 auto !important;
  width: auto !important;
  display: inline-flex !important;
  align-items: center !important;
  padding: 12px 14px !important;
  font-family: var(--xx-font-body, 'DM Sans', sans-serif) !important;
  font-size: 12px !important;
  font-weight: 600 !important;
  letter-spacing: 1.4px !important;
  text-transform: uppercase !important;
  color: var(--xx-text-muted, #6B6B6B) !important;
  cursor: pointer !important;
  border-bottom: 2px solid transparent !important;
  white-space: nowrap !important;
  background: transparent !important;
  transition: color 0.2s ease, border-color 0.2s ease !important;
}
html body .tabs > .tabs__item:hover,
html body .tabs > .tabs__item.active,
html body .tabs.--fixed > .tabs__item:hover,
html body .tabs.--fixed > .tabs__item.active,
html body .tabs__item:hover,
html body .tabs__item.active {
  color: var(--xx-primary, var(--ys-primary)) !important;
  border-bottom-color: var(--xx-primary, var(--ys-primary)) !important;
}
/* Span wewnątrz dziedziczy styl z parent */
html body .tabs__item span,
html body .tabs.--fixed .tabs__item span {
  color: inherit !important;
  font: inherit !important;
  letter-spacing: inherit !important;
  text-transform: inherit !important;
}

/* Fallback dla <a>/<li><a>/<button> — gdyby system zmienił DOM w przyszłości */
html body .tabs.--fixed a,
html body .tabs.--fixed li a,
html body .tabs.--fixed button {
  font-family: var(--xx-font-body, 'DM Sans', sans-serif) !important;
  font-size: 12px !important;
  font-weight: 600 !important;
  letter-spacing: 1.4px !important;
  text-transform: uppercase !important;
  color: var(--xx-text-muted, #6B6B6B) !important;
  padding: 12px 14px !important;
  text-decoration: none !important;
  white-space: nowrap !important;
  border-bottom: 2px solid transparent !important;
}
html body .tabs.--fixed a:hover,
html body .tabs.--fixed a.active,
html body .tabs.--fixed li.active a {
  color: var(--xx-primary, var(--ys-primary)) !important;
  border-bottom-color: var(--xx-primary, var(--ys-primary)) !important;
}

/* 10b. AKORDEON NA TELEFONIE (<=979px, bramka silnika) — lessons/053 (easyrent), u-aniolka 2026-10-01.
   Na telefonie `.tabs__item` nie jest juz sama etykieta: ZAWIERA CALY PANEL (opis, kalendarz, cennik).
   Regula etykiet wyzej (nowrap, uppercase, 12 px, inline-flex row) dziedziczyla sie do tresci:
   tabela cennika i kalendarz wychodzily 178 px za ekran, a `.tabs` z overflow-x:hidden je ucinal
   (body czyste, wiec 01-smoke tego nie widzi; lapie 14b „przycinanie na krawedzi").
   Etykieta (`> span`) zostaje; panel dostaje kolumne, zwezanie i zwykla typografie. */
@media (max-width: 979px) {
  html body.page-offer .tabs__item { flex-direction: column !important; align-items: stretch !important; min-width: 0 !important; max-width: 100% !important; }
  html body.page-offer .tabs__item > *, html body.page-offer .tabs .tab { min-width: 0 !important; max-width: 100% !important; }
  html body.page-offer .tabs__item > div, html body.page-offer .tabs__item > div *:not(.btn):not(.btn *) {
    white-space: normal !important; text-transform: none !important; letter-spacing: normal !important; overflow-wrap: anywhere !important;
  }
  html body.page-offer .tabs__item > div { font-size: 15px !important; font-weight: 400 !important; color: var(--xx-text, #1A1A1A) !important; overflow-x: visible !important; }
  /* kalendarz ma min-content ~436 px i nie zawinie sie sensownie - tylko on dostaje wlasny scroll */
  html body.page-offer #calendar-data, html body.page-offer #calendar-data_mobile { overflow-x: auto !important; -webkit-overflow-scrolling: touch; }
  html body.page-offer .season-row_sub { min-width: 0 !important; max-width: 100% !important; padding-left: 0 !important; padding-right: 0 !important; }
  /* tabela sezonu ma min-content 312 px - bez `fixed` nie zejdzie do szerokosci kolumny */
  html body.page-offer .season-row_sub table { width: 100% !important; max-width: 100% !important; table-layout: fixed !important; }
  html body.page-offer .room_rez .btn { white-space: normal !important; }
  /* panel cennika ma trzy wciecia (pl-4 pr-4 + .price-list.row + kolumna) - na telefonie karta sezonu zostawala 205 px */
  html body.page-offer .tabs__item > .offer-prices { padding-left: 0 !important; padding-right: 0 !important; }
  html body.page-offer .offer-prices .price-list.row { padding-left: 0 !important; padding-right: 0 !important; margin-left: 0 !important; margin-right: 0 !important; }
}
/* opis lozek z panelu: silnik daje `.roomspace.sublink > span{white-space:nowrap}` - dlugi tekst (508 px) wypychal strone */
html body.page-offer .roomspace.sublink > span, html body.page-offer .roomspace.sublink > span * { white-space: normal !important; max-width: 100%; }


/* ──────────────────────────────────────────────────────────
   9. Bootstrap row gutter fix — czasem ucina padding na .col-*
   ────────────────────────────────────────────────────────── */
html body.page-offer .row {
  margin-left: -12px !important;
  margin-right: -12px !important;
}
html body.page-offer .row > [class^="col"],
html body.page-offer .row > [class*=" col"] {
  padding-left: 12px !important;
  padding-right: 12px !important;
}


/* ══════════════════════════════════════════════════════════════
   §OFFER-CANONICAL — kanoniczny detal /offer/N (JARVIS)
   --------------------------------------------------------------------------
   Źródła live-verified: cityofthekings SR4 (F18), easyrent §ER-OFFERDETAIL.
   Trapy: price chip = PROSTOKĄT (NIE pill), #additional absolute overflow,
   dublowane udogodnienia systemowe na /offer/N.
   ══════════════════════════════════════════════════════════════ */

/* ── PRICE CHIP = PROSTOKĄT h64 r12 (NIE pill h56) ──
   Systemowy .offer-price ma border-radius:50% (elipsa ~253x150). Nasza klasa
   .ys-price-chip + defeat systemowego kształtu na .offer-price/.object-price. */
.ys-price-chip,
body.page-offer .offer-price,
body.page-offer .object-price {
  border-radius: var(--xx-radius-lg, 12px) !important;
  width: auto !important;
  height: auto !important;
  min-height: 64px !important;
  aspect-ratio: auto !important;
  padding: 12px 26px !important;
  display: inline-flex !important;
  flex-direction: column !important;
  align-items: center !important;
  justify-content: center !important;
  gap: 2px !important;
  max-width: 100% !important;
  box-sizing: border-box !important;
}

/* ── #additional — absolute → static (TRAP: overflow / page-pan) ── */
body.page-offer #additional {
  position: static !important;
}

/* ── AMENITIES-HIDE na /offer/N gdy dublują nasz layout ──
   Gdy budujemy własną siatkę .ys-offer-amenities (JS/body_top), systemowe
   listy udogodnień są duplikatem. Ukryj systemowe TYLKO gdy body ma znacznik
   `.ys-has-amenities` (dodaje go nasz JS po zbudowaniu własnej siatki) —
   inaczej zostają systemowe (bez naszej siatki lepsze niż nic).
   Scope wyłącznie body.page-offer (NIE /offers listing). */
body.page-offer.ys-has-amenities .offer-features,
body.page-offer.ys-has-amenities .amenities,
body.page-offer.ys-has-amenities .features-list,
body.page-offer.ys-has-amenities .object-amenities,
body.page-offer.ys-has-amenities .object-facilities {
  display: none !important;
}

/* nasza siatka udogodnień (gdy budujemy własną) — ikona + etykieta */
.ys-offer-amenities {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
  gap: 12px;
  margin: 24px 0;
  list-style: none;
  padding: 0;
}
.ys-offer-amenities li {
  display: flex;
  align-items: center;
  gap: 10px;
  font-size: 14px;
  color: var(--xx-text-soft, #3A3A3A);
}
.ys-offer-amenities svg {
  width: 18px;
  height: 18px;
  color: var(--xx-primary, var(--ys-primary));
  flex-shrink: 0;
}


/* ── ZAREZERWUJ CTA = WYŚRODKOWANY + BRAND (deliverable, KAŻDY /offer/N) ──
   Struktura systemu: <a.accommodation-reservation> (wrapper, transparent,
   text-align:left) > <span.accommodation-leftbutton> (właściwy przycisk).
   Wrapper tylko CENTRUJE (flex); właściwy przycisk = wypełnienie marką + biała
   czcionka = hierarchia CTA + „kolorystyka gra". MIERZ SPAN (a.accommodation-
   reservation jest transparentny → pomiar po anchorze = fałszywy alarm).
   text-indent kompensuje letter-spacing (tekst optycznie wyśrodkowany).
   Kanon: prosty-wynajem §PW-OFFER (819-858) live-verified deltaX≈0.
   Ref: feedback_idobooking_offer_reservation_cta_center_brand · deliverable N-offer-cta-center. */
html body.page-offer .accommodation-reservation,
html body.page-offer a.accommodation-reservation {
  display: flex !important;
  align-items: center !important;
  justify-content: center !important;
  background: transparent !important;
  padding: 0 !important;
  min-height: 0 !important;
}
html body.page-offer a.accommodation-reservation .accommodation-leftbutton,
html body.page-offer .accommodation-reservation .accommodation-leftbutton,
html body.page-offer .accommodation-leftbutton {
  background: var(--xx-primary, var(--ys-primary)) !important;
  color: #FFFFFF !important;
  border: none !important;
  border-radius: var(--xx-radius-lg, 12px) !important;
  min-height: 52px !important;
  width: 100% !important;
  display: flex !important;
  align-items: center !important;
  justify-content: center !important;
  text-align: center !important;
  text-indent: 0.6px !important;          /* kompensacja letter-spacing */
  font-family: var(--xx-font-heading, 'Playfair Display', serif) !important;
  font-weight: 700 !important;
  letter-spacing: 0.6px !important;
  box-shadow: none !important;
}
html body.page-offer a.accommodation-reservation:hover .accommodation-leftbutton,
html body.page-offer .accommodation-reservation:hover .accommodation-leftbutton,
html body.page-offer .accommodation-leftbutton:hover {
  background: var(--xx-secondary, #A6894F) !important;
  color: #FFFFFF !important;
}
/* pozostałe CTA offer („Zobacz na mapie" / „Sprawdź dostępność" / „Zobacz cennik")
   — spójne wyśrodkowanie (system domyślnie justify-content:normal / text-align:left) */
html body.page-offer #generateDirections,
html body.page-offer a.offerCalendar,
html body.page-offer a.to-offer-prices {
  text-align: center !important;
  justify-content: center !important;
}


/* ──────────────────────────────────────────────────────────
   N. Systemowe WRAPPERY /offer — reskin tla
   ────────────────────────────────────────────────────────── */

/* Platforma maluje wrappery detalu oferty ciemnym slabem rgb(41,41,41).
   Bez tego reskinu ciemny pas przebija POD nasza trescia na jasnym motywie
   (widoczne jako czarne pasmo za galeria / opisem / sidebarem).

   DODANE 2026-09-08: tej reguly NIE BYLO NIGDZIE w library/ — `grep offer-wrapper
   library/css/` dawal zero trafien, a lint N-offer-reskin-present swiecil
   u 14 z 26 klientow floty. Klasyczny objaw z pamieci projektu: „ten sam brak
   u 3. klienta = brak warstwy w library/", nie usterka klienta.
   Ref: feedback_offer_price_chip_layout.md · lint N-offer-reskin-present */
html body.page-offer .offer-wrapper,
html body.page-offer .offer-parallax,
html body.page-offer .offer-right-wrapper,
html body.page-offer .offer-desc-wrapper {
  background: var(--xx-bg, #FAFAF5) !important;
}

/* Sidebar rezerwacji zostaje kartowy (jasniejszy niz pas strony), zeby
   po zdjeciu ciemnego slabu nie zlal sie z tlem. */
html body.page-offer .offer-right-wrapper {
  background: var(--xx-white, #FFFFFF) !important;
}


/* ──────────────────────────────────────────────────────────
   PRZY KOPIOWANIU DO NOWEGO PROJEKTU:
   1. Replace WSZYSTKIE --xx-* na własny prefix klienta (--pk-, --mc-, etc.)
      LUB alias-at-root (scaffold): zostaw --xx-* i zmapuj w :root na paletę.
   2. Upewnij się że masz w :root design tokens:
      --xx-primary (akcent), --xx-text, --xx-text-soft, --xx-text-muted,
      --xx-cream, --xx-white, --xx-bg, --xx-border,
      --xx-font-heading, --xx-font-body,
      --xx-radius, --xx-radius-lg, --xx-shadow,
      --xx-primary-soft (rgba primary 0.15 — dla focus glow)
   3. Po wklejeniu — chrome-devtools MCP verify:
      - body.page-offer h1 visible
      - .tabs display: flex + border-bottom
      - .object-price = PROSTOKĄT (border-radius 12px, NIE 50%)
      - #additional position: static
      - .container-hotspot display: none
   ────────────────────────────────────────────────────────── */



/* ============================================================
   LAYER 3b — OFFERS LIST (has_offer:true)
   ============================================================ */

/* ==========================================================================
   LAYER 3b - /OFFERS LIST (lista ofert, body.page-offers)

   CO TO: uniwersalna warstwa dla LISTY ofert na szablonie default13. Bez niej
   kazdy nowy klient dostaje domyslny wyglad platformy: karta bez radiusa,
   systemowy `box-shadow: rgba(0,0,0,.3) 0 0 15px`, jeden rzad na cala
   szerokosc kontenera. Warstwa robi z tego siatke rownych kart.

   DLA KOGO: klienci z faktem `has_offer` (ci sami, ktorzy dostaja
   layer3-offer-page-base.css). Emitowana ZARAZ PO niej - lista przed detalem.

   RELACJA DO layer1-traps.css §C: NIE walczymy, dopelniamy.
     - §C robi: tlo strony, naglowki filtrow, chevron akordeonu, collapse,
       kolor przyciskow (`body.page-offers .btn`).
     - TA warstwa robi: geometrie (siatka, karta, zdjecie, chip ceny, CTA).
     - Kolor tla/hover przyciskow zostaje w §C (jeden wlasciciel) - tu tylko
       ksztalt, tap-target i pozycja CTA.
     - §C ma `.offers-container { background: ... !important }` o
       specyficznosci (0,1,0). layer1 §D ma dodatkowo NIEZAKRESOWANE
       `.offer-price { border-radius: 50% !important }` (kolo dla /offer/N),
       ktore na LIScie robi z chipa ceny kolo. Dlatego kazda regula tutaj
       startuje od `html body.page-offers ...` - wyzsza specyficznosc wygrywa
       kaskade bez ruszania §C/§D.

   TOKENY (wszystkie z biblioteki, klient podmienia prefiks albo mapuje
   alias-at-root - scaffold robi to sam):
     --xx-primary --xx-secondary --xx-bg --xx-white --xx-dark
     --xx-text --xx-text-muted --xx-border --xx-radius --xx-radius-lg
     --xx-shadow-lg --xx-ease --xx-font-heading --xx-font-body
   UWAGA 1: NIE ma tokenu `--xx-line` (nie definiuje go ani layer5, ani
   safety-net scaffoldu) - kanoniczna nazwa krawedzi to `--xx-border`.
   Token uzyty bez definicji w :root = bloker lint B3, dlatego zero nowych.
   UWAGA 2: warstwa wchodzi PRZEZ SCAFFOLD - `rootAliasBlock` definiuje
   wszystkie 14 uzytych tokenow (sprawdzone: five-stars, osada-pogodno =
   14/14). Dopisujac ja RECZNIE do klienta legacy bez bloku alias-at-root
   (prosty-wynajem `--pw-`, bhpstar-krokus `--kr-`, miaapart `--mi-`) NAJPIERW
   dodaj aliasy `--xx-* : var(--<pfx>-*)`, inaczej lint B3 = 14 blokerow.

   MARKUP (zmierzony na zywo 2026-09-01, engine default13):
     main > div.container
       div.offers_wrapper                 <- opcjonalny (nie na kazdym silniku)
         div.offers-container             <- KARTA (systemowy flex-row, col-md-*)
           a.object-icon                  <- zdjecie + link
           div.accommodation-rest         <- tresc
             h2 > a (nazwa; tytul bywa <a>, NIE h2 - patrz five-stars)
             .accommodation-short-description
             .object-price / .offer-price (chip; box ~130px, wiec nowrap)
             .roomspace / .accommodation-roomspace
             .day-item x N                <- kalendarz dostepnosci
             .accommodation-buttons > .btn  <- SZCZEGOLY

   ZRODLO WZORCA (sprawdzone bloki u klientow, nie wymyslone od zera):
     - five-stars  §FS-OFFERS-LIST + §FS-OFFERS-CONTRAST (grid rownych kolumn,
       rozbrojenie bootstrapowego .row w karcie, chip poziomy nowrap, tytul=<a>)
     - prosty-wynajem §PW-OFFERS-V29 (karta flex column, line-clamp opisu,
       CTA przyklejony do dolu przez margin-top:auto)
     - osada-pogodno §C (grid + border + radius + hover translateY)
     - bhpstar-krokus (typografia karty, .accommodation-buttons, mobile stack)
     - miaapart (chip ceny ma tylko ~130px szerokosci -> nowrap obowiazkowy)
   Skonsolidowane do biblioteki: 2026-09-01.

   PULAPKI ZAKODOWANE TUTAJ:
     - `.day-item` to TAKZE klasa Litepickera. Kazda regula na `.day-item`
       jest zakresowana do `.offers-container` - inaczej rozjezdza kalendarz
       wyszukiwarki, ktora stoi na tej samej podstronie.
     - chip ceny = PROSTOKAT (h 56-66px), NIGDY pill/kolo (lint
       N-price-chip-circle + feedback_offer_price_chip_layout).
     - siatka NIE moze isc na systemowy `.container` bez sprawdzenia, ze karty
       sa jego bezposrednim dzieckiem - inaczej lamie layout z sidebarem
       filtrow (dlatego `:has(> .offers-container)`).
   ========================================================================== */


/* --------------------------------------------------------------------------
   1. SZEROKOSC STRONY + SIATKA KART (3 / 2 / 1 kolumna)
      default13 daje `.container` 1170px i liste jako jeden rzad. Kontener
      poszerzamy do 1280px (bezpiecznie: to podstrona listy, nie formularz),
      a liste zamieniamy na grid o rownych komorkach.
   -------------------------------------------------------------------------- */
html body.page-offers main > .container {
  max-width: 1280px !important;
  width: 100% !important;
}

/* Rodzice listy: `.offers_wrapper` (wiekszosc silnikow) LUB systemowy
   `.container`, gdy karty sa jego bezposrednim dzieckiem (silnik bez wrappera
   - zmierzone 2026-09-01). `:has()` = brak wsparcia => selektor odpada i
   zostaje domyslny rzad, nic sie nie psuje. */
html body.page-offers .offers_wrapper,
html body.page-offers main > .container:has(> .offers-container) {
  display: grid !important;
  grid-template-columns: 1fr !important;
  gap: 24px !important;
  align-items: stretch !important;
}

/* Wszystko, co NIE jest karta (h1, sortowanie, paginacja, komunikat o braku
   wynikow), dostaje pelny rzad - inaczej wpada do komorki siatki. */
html body.page-offers .offers_wrapper > *:not(.offers-container),
html body.page-offers main > .container:has(> .offers-container) > *:not(.offers-container) {
  grid-column: 1 / -1 !important;
}

/* LICZBA KOLUMN Z DOSTEPNEJ SZEROKOSCI, NIE ZE SZEROKOSCI OKNA.
   Sztywne `repeat(3, ...)` przy 1200px okna nie wiedzialo nic o bocznej
   kolumnie filtrow: silnik z `aside.col-md-3` zostawia liscie ~926 px, wiec
   karty schodzily do 289 px - za waskie na zdjecie, cene i CTA naraz
   (zmierzone na mickiewicza40, runda 20). `auto-fill` liczy to samo z faktu:
   ~926 px = 2 kolumny, pelna szerokosc 1280 px = 3. Klient bez sidebaru
   dostaje wiec 3 kolumny jak dotad, klient z sidebarem - 2 czytelne. */
@media (min-width: 768px) {
  html body.page-offers .offers_wrapper,
  html body.page-offers main > .container:has(> .offers-container) {
    grid-template-columns: repeat(auto-fill, minmax(330px, 1fr)) !important;
    gap: 26px !important;
  }
}

@media (min-width: 1200px) {
  html body.page-offers .offers_wrapper,
  html body.page-offers main > .container:has(> .offers-container) {
    gap: 30px !important;
  }
}


/* --------------------------------------------------------------------------
   2. KARTA - zabicie systemowego cienia + wlasna powierzchnia
      System: `box-shadow: rgba(0,0,0,.3) 0 0 15px`, `border-radius: 0`,
      `display: flex` (rzad). Zamiana na kolumne o rownej wysokosci.
   -------------------------------------------------------------------------- */
html body.page-offers .offers-container {
  display: flex !important;
  flex-direction: column !important;
  height: 100% !important;
  margin: 0 !important;
  padding: 0 !important;
  background: var(--xx-bg, #FFFFFF) !important;
  border: 1px solid var(--xx-border, rgba(0, 0, 0, 0.10)) !important;
  border-radius: var(--xx-radius-lg, 14px) !important;
  overflow: hidden !important;
  /* wlasny cien zamiast systemowego rgba(0,0,0,.3) 0 0 15px (rozmyty halo) */
  box-shadow: 0 2px 14px rgba(0, 0, 0, 0.07) !important;
  transition: transform 0.25s var(--xx-ease, cubic-bezier(0.4, 0, 0.2, 1)),
              box-shadow 0.25s var(--xx-ease, cubic-bezier(0.4, 0, 0.2, 1)),
              border-color 0.25s var(--xx-ease, cubic-bezier(0.4, 0, 0.2, 1)) !important;
}

/* Bezposrednie dzieci karty to bootstrapowe kolumny (col-md-5 / col-md-7).
   W karcie pionowej musza byc pelnej szerokosci. */
html body.page-offers .offers-container > a.object-icon,
html body.page-offers .offers-container > .object-icon,
html body.page-offers .offers-container > .accommodation-rest {
  width: 100% !important;
  max-width: 100% !important;
  float: none !important;
  margin: 0 !important;
}


/* --------------------------------------------------------------------------
   3. ZDJECIE 4:5 (kadr portretowy, cover, bez wyciekania)
      Override na wezszy kadr (np. 4/3, 16/10) rob w sekcji §CLIENT:
      `html body.page-offers .offers-container .object-icon{aspect-ratio:4/3!important}`
   -------------------------------------------------------------------------- */
html body.page-offers .offers-container > a.object-icon,
html body.page-offers .offers-container > .object-icon {
  display: block !important;
  flex: 0 0 auto !important;
  aspect-ratio: 4 / 5 !important;
  min-height: 0 !important;
  padding: 0 !important;
  overflow: hidden !important;
  position: relative !important;
  background: var(--xx-cream, rgba(0, 0, 0, 0.04)) !important;
}

html body.page-offers .offers-container .object-icon img {
  display: block !important;
  width: 100% !important;
  height: 100% !important;
  object-fit: cover !important;
  object-position: center !important;
  transition: transform 0.5s var(--xx-ease, cubic-bezier(0.4, 0, 0.2, 1)) !important;
}


/* --------------------------------------------------------------------------
   4. TRESC KARTY - typografia z tokenow
      Tytul bywa <a> zamiast <h2> (five-stars, audyt live) - stad oba
      selektory i jawny kolor na linku (system daje bialy = niewidoczny).
   -------------------------------------------------------------------------- */
html body.page-offers .offers-container > .accommodation-rest {
  flex: 1 1 auto !important;
  display: flex !important;
  flex-direction: column !important;
  gap: 8px !important;
  padding: 20px 22px 22px !important;
  background: transparent !important;
  color: var(--xx-text, rgba(0, 0, 0, 0.88)) !important;
}

html body.page-offers .offers-container h2,
html body.page-offers .offers-container h3 {
  font-family: var(--xx-font-heading, Georgia, serif) !important;
  font-size: clamp(18px, 1.4vw, 21px) !important;
  font-weight: 600 !important;
  line-height: 1.25 !important;
  margin: 0 !important;
  color: var(--xx-text, rgba(0, 0, 0, 0.88)) !important;
  display: -webkit-box !important;
  -webkit-line-clamp: 2 !important;
  -webkit-box-orient: vertical !important;
  overflow: hidden !important;
}

html body.page-offers .offers-container h2 a,
html body.page-offers .offers-container h3 a,
html body.page-offers .offers-container .accommodation-rest > a {
  color: inherit !important;
  text-decoration: none !important;
}

html body.page-offers .offers-container h2 a:hover,
html body.page-offers .offers-container h3 a:hover {
  color: var(--xx-primary) !important;
}

/* Opis: rowna wysokosc kart = ograniczenie do 3 linii (system daje opisy
   roznej dlugosci, ktore rozjezdzaja siatke). */
html body.page-offers .offers-container .accommodation-short-description {
  font-family: var(--xx-font-body, system-ui, sans-serif) !important;
  font-size: 14px !important;
  line-height: 1.55 !important;
  margin: 0 !important;
  color: var(--xx-text-muted, rgba(0, 0, 0, 0.62)) !important;
  display: -webkit-box !important;
  -webkit-line-clamp: 3 !important;
  -webkit-box-orient: vertical !important;
  overflow: hidden !important;
}

/* Metryka lokalu (metraz / liczba osob) - drobny wiersz pod tytulem. */
html body.page-offers .offers-container .roomspace,
html body.page-offers .offers-container .accommodation-roomspace {
  font-family: var(--xx-font-body, system-ui, sans-serif) !important;
  font-size: 13px !important;
  line-height: 1.4 !important;
  margin: 0 !important;
  color: var(--xx-text-muted, rgba(0, 0, 0, 0.62)) !important;
}


/* --------------------------------------------------------------------------
   5. CENA = TYPOGRAFIA, NIE CHIP (zmiana kanonu 2026-10-01, lessons/104)
      Do 30.09 cena na liscie stala w ciemnym prostokacie z „CENA JUZ OD"
      wersalikami, obok rownie ciemnego „SZCZEGOLY" - dwa klocki w jednym
      kolorze, ktore gosc bierze za dwa przyciski, a do tego o 4 px nierowne
      (chip 56 px, CTA 60 px). Zgloszone u wschodniej i ponownie u u-aniolka
      („ten sam co zawsze blad"). Kanon jak u wschodniej: male „od", kwota
      duza krojem naglowkow, male „za noc" (tekst wstawia ido-offers-list.js),
      a cena i CTA w jednym wierszu stopki karty nad wlosowa linia.
      Prostokat h64 r12 zostaje TYLKO na /offer/N (feedback_offer_price_chip_layout).
      Bije NIEZAKRESOWANE layer1 §D `.offer-price{border-radius:50%}`.
      Regula L-offers-price-typo + asercja 14aj.
   -------------------------------------------------------------------------- */
html body.page-offers .offers-container .object-price,
html body.page-offers .offers-container .offer-price {
  display: inline-flex !important;
  flex-direction: row !important;
  align-items: baseline !important;
  flex-wrap: wrap !important;
  gap: 2px 6px !important;
  width: auto !important;
  max-width: 100% !important;
  min-height: 0 !important;
  height: auto !important;
  padding: 0 !important;
  margin: 0 !important;
  border: 0 !important;
  border-radius: 0 !important;
  box-shadow: none !important;
  background: transparent !important;
  color: var(--xx-text, #1A1A1A) !important;
}

html body.page-offers .offers-container .object-price small,
html body.page-offers .offers-container .offer-price small,
html body.page-offers .offers-container .ido-cena__jedn {
  font-family: var(--xx-font-body, system-ui, sans-serif) !important;
  font-size: 13px !important;
  font-weight: 500 !important;
  line-height: 1.2 !important;
  letter-spacing: 0 !important;
  text-transform: none !important;
  white-space: nowrap !important;
  opacity: 1 !important;
  margin: 0 !important;
  color: var(--xx-text-muted, rgba(0, 0, 0, 0.62)) !important;
}

html body.page-offers .offers-container .object-price .price,
html body.page-offers .offers-container .offer-price .price {
  font-family: var(--xx-font-heading, Georgia, serif) !important;
  font-size: 26px !important;
  font-weight: 600 !important;
  line-height: 1 !important;
  letter-spacing: -0.01em !important;
  white-space: nowrap !important;
  padding: 0 !important;
  color: var(--xx-primary) !important;
}

/* --------------------------------------------------------------------------
   6. KALENDARZ DOSTEPNOSCI (.day-item) - okielznany, na mobile schowany
      UWAGA: `.day-item` uzywa TAKZE Litepicker (wyszukiwarka stoi na tej
      samej podstronie). Kazdy selektor jest zakresowany do `.offers-container`
      - poza karta nie ruszamy niczego.
   -------------------------------------------------------------------------- */
html body.page-offers .offers-container .day-item {
  flex: 0 0 auto !important;
  width: auto !important;
  min-width: 26px !important;
  max-width: 34px !important;
  height: 26px !important;
  min-height: 0 !important;
  margin: 0 !important;
  padding: 0 2px !important;
  box-sizing: border-box !important;
  font-family: var(--xx-font-body, system-ui, sans-serif) !important;
  font-size: 11px !important;
  line-height: 26px !important;
  text-align: center !important;
  border-radius: 4px !important;
  overflow: hidden !important;
  color: var(--xx-text-muted, rgba(0, 0, 0, 0.62)) !important;
}

/* Rodzic dni (silnik nie daje mu wlasnej klasy) - zawijany rzad zamiast
   rozpychania karty. `:has()` = progressive enhancement, brak wsparcia
   oznacza tylko brak zawijania, nie zlamany layout. */
html body.page-offers .offers-container .accommodation-rest *:has(> .day-item) {
  display: flex !important;
  flex-wrap: wrap !important;
  gap: 3px !important;
  max-width: 100% !important;
  margin: 0 !important;
  padding: 0 !important;
  overflow: hidden !important;
}


/* --------------------------------------------------------------------------
   7. HOVER - podniesienie karty + cien (off przy prefers-reduced-motion)
   -------------------------------------------------------------------------- */
html body.page-offers .offers-container:hover {
  transform: translateY(-4px) !important;
  box-shadow: var(--xx-shadow-lg, 0 18px 44px rgba(0, 0, 0, 0.14)) !important;
  border-color: var(--xx-secondary) !important;
}

html body.page-offers .offers-container:hover .object-icon img {
  transform: scale(1.05) !important;
}

@media (prefers-reduced-motion: reduce) {
  html body.page-offers .offers-container,
  html body.page-offers .offers-container .object-icon img {
    transition: none !important;
  }
  html body.page-offers .offers-container:hover {
    transform: none !important;
  }
  html body.page-offers .offers-container:hover .object-icon img {
    transform: none !important;
  }
}


/* --------------------------------------------------------------------------
   8. CTA "SZCZEGOLY" - ksztalt CTA marki, przyklejony do dolu karty
      KOLOR tla/hover zostaje w layer1 §C (`body.page-offers .btn`) - jeden
      wlasciciel koloru, zero wyscigu kaskady. Tutaj tylko geometria,
      tap-target 44px i pozycja (rowna linia bazowa przyciskow w siatce).
   -------------------------------------------------------------------------- */
html body.page-offers .offers-container .accommodation-buttons {
  margin-top: auto !important;
  padding-top: 16px !important;
  border-top: 1px solid rgba(0, 0, 0, 0.10) !important;
  display: flex !important;
  flex-wrap: wrap !important;
  align-items: center !important;
  justify-content: space-between !important;
  gap: 12px 16px !important;
}

html body.page-offers .offers-container .accommodation-buttons .btn,
html body.page-offers .offers-container .accommodation-buttons a.btn,
html body.page-offers .offers-container .accommodation-buttons span.btn,
html body.page-offers .offers-container .accommodation-buttons button.btn {
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
  min-height: 44px !important;
  padding: 11px 24px !important;
  font-family: var(--xx-font-body, system-ui, sans-serif) !important;
  font-size: 13px !important;
  font-weight: 700 !important;
  letter-spacing: 0.06em !important;
  text-transform: uppercase !important;
  text-decoration: none !important;
  border-radius: var(--xx-radius, 8px) !important;
  cursor: pointer !important;
}


/* --------------------------------------------------------------------------
   9. ROZBROJENIE BOOTSTRAPA WEWNATRZ KARTY
      Silnik wklada w `.accommodation-rest` wiersz `.row > .col-md-*`
      (tytul | cena | metraz). W wezszej karcie kolumna 1/3 wypycha chip ceny
      w pion (five-stars) - dlatego wiersz idzie na blok, kolumny na 100%.
   -------------------------------------------------------------------------- */
html body.page-offers .offers-container .accommodation-rest .row {
  display: block !important;
  margin: 0 !important;
}

html body.page-offers .offers-container .accommodation-rest [class*="col-"] {
  display: block !important;
  width: 100% !important;
  max-width: 100% !important;
  flex: none !important;
  float: none !important;
  padding-left: 0 !important;
  padding-right: 0 !important;
  text-align: left !important;
}


/* --------------------------------------------------------------------------
   10. DOSTEPNOSC - widoczny focus-visible na linkach karty
       Systemowy `outline: none` na linkach zabija nawigacje klawiatura.
   -------------------------------------------------------------------------- */
html body.page-offers .offers-container a:focus-visible {
  outline: 3px solid var(--xx-primary) !important;
  outline-offset: 2px !important;
  border-radius: 3px !important;
}

html body.page-offers .offers-container > a.object-icon:focus-visible,
html body.page-offers .offers-container > .object-icon:focus-visible {
  outline-offset: -3px !important;
}


/* --------------------------------------------------------------------------
   11. MOBILE (< 768px) - jedna kolumna, kadr wezszy, kalendarz schowany
       Kalendarz dostepnosci w karcie na 375px jest nieczytelny i rozpycha
       tresc - chowamy go, dostepnosc zostaje na /offer/N.
   -------------------------------------------------------------------------- */
@media (max-width: 767px) {
  html body.page-offers .offers-container > a.object-icon,
  html body.page-offers .offers-container > .object-icon {
    aspect-ratio: 16 / 10 !important;
  }
  html body.page-offers .offers-container > .accommodation-rest {
    padding: 16px 16px 18px !important;
  }
  html body.page-offers .offers-container .day-item,
  html body.page-offers .offers-container .accommodation-rest *:has(> .day-item) {
    display: none !important;
  }
  html body.page-offers .offers-container .accommodation-buttons .btn {
    width: 100% !important;
  }
}


/* ─── PRZYCISK „WYCZYSC FILTRY" ────────────────────────────────────────────
   Wstawia go ido-offers-list.js na gorze kolumny filtrow i pokazuje TYLKO,
   gdy cos jest zaznaczone. Selektor po koncowce klasy, zeby warstwa dzialala
   niezaleznie od prefiksu klienta. */
button[class$="-filtry-czysc"] {
  display: block;
  width: 100%;
  margin: 0 0 14px;
  padding: 0 14px;
  min-height: 40px;
  font: 600 13px/1.2 var(--ido-font-body, inherit);
  letter-spacing: .02em;
  color: var(--ido-dark, #2E2419);
  background: transparent;
  border: 1px solid var(--ido-hairline, rgba(46, 36, 25, .26));
  border-radius: var(--ido-radius, 8px);
  cursor: pointer;
  transition: background .18s ease, color .18s ease, border-color .18s ease;
}
button[class$="-filtry-czysc"]:hover,
button[class$="-filtry-czysc"]:focus-visible {
  color: #FFF;
  background: var(--ido-accent, #B4551F);
  border-color: var(--ido-accent, #B4551F);
}
button[class$="-filtry-czysc"][hidden] { display: none; }



/* ============================================================
   LAYER CMS-SECTIONS (strefy edytowalne klienta — has_cms)
   ============================================================ */

/* ============================================================
   LAYER: CMS-SECTIONS — styl natywnych sekcji CMS IdoBooking
   (lesson 028: text / photo / photo_and_text / text_and_photo /
   double_photo budowane przez panel-fill `sections_pl`).
   ------------------------------------------------------------
   PO CO: sekcje natywne renderuja sie jako czysty Bootstrap
   (`.txt-text > .row > .col-12.col-md-6` z img[data-src] + h2/p/ul
   z WYSIWYG) BEZ zadnej unikalnej klasy. Ta warstwa nadaje im
   brandowy wyglad, zeby tresc edytowana przez KLIENTA w panelu
   wygladala jak sekcje projektowane przez JARVIS.
   ------------------------------------------------------------
   TOKENY: --xx-* (alias-at-root, wzorzec cityofthekings) +
   wlasne --xx-cms-* zdefiniowane nizej (nadpisz w bloku klienta).
   SCOPE: body.page-txt (podstrony /txt) + home „O nas"
   (main .section_sub.container). Sekcje „Kod HTML" (nasz design
   z klasami prefiksowymi) NIE sa dotykane — selektory celuja
   wylacznie w gole rzedy col-12/col-md-6 i WYSIWYG output.
   ============================================================ */

:root {
  --xx-cms-radius: 12px;
  --xx-cms-gap: 56px;                 /* rytm miedzy sekcjami CMS */
  --xx-cms-img-ratio: 4 / 3;          /* stabilny layout przed lazy-load (img bez width/height) */
  --xx-cms-heading-font: inherit;     /* klient: podmien na --<prefix>-font-heading */
}

/* --- rytm sekcji (natywne rzedy w tresci /txt i home O-nas) --- */
body.page-txt .txt-text > .row,
main .section_sub.container .cms .row {
  margin-bottom: var(--xx-cms-gap);
  align-items: center;
  row-gap: 24px;
}
body.page-txt .txt-text > .row:last-child { margin-bottom: 0; }

/* --- zdjecia sekcji: pelna szerokosc kolumny, staly ratio, brand radius ---
   img[data-src] = systemowy lazy-load; aspect-ratio rezerwuje miejsce,
   wiec strona nie skacze przy podmianie data-src -> src. */
body.page-txt .txt-text > .row > [class*="col-"] > img,
main .section_sub.container .cms .row > [class*="col-"] > img {
  display: block;
  width: 100%;
  height: auto;
  aspect-ratio: var(--xx-cms-img-ratio);
  object-fit: cover;
  border-radius: var(--xx-cms-radius);
  box-shadow: var(--xx-shadow);
  background: var(--xx-cream);        /* placeholder zanim lazy zaladuje */
}

/* pusty slot (klient jeszcze nie wybral zdjecia — ikona defaulticon):
   pokaz elegancki kremowy placeholder zamiast rozciagnietej ikonki. */
body.page-txt .txt-text > .row > [class*="col-"] > img[src*="defaulticon"],
body.page-txt .txt-text > .row > [class*="col-"] > img[data-src*="defaulticon"] {
  object-fit: none;                   /* ikonka w naturalnym rozmiarze na srodku */
  opacity: 0.35;
}

/* slot zostawiony PUSTY celowo (sekcja zapisana z src:'' - klient doda zdjecie pozniej, lessons/028):
   silnik renderuje <img title="" data-src="">, czyli pusta kolumne obok tekstu (zmierzone 61253,
   2026-10-06). Gosc nie widzi dziury: kolumna znika, tekst bierze cala szerokosc; po wybraniu
   zdjecia w panelu data-src przestaje byc pusty i uklad wraca sam. */
body.page-txt .txt-text .row > [class*="col-"]:has(> img[data-src=""]:not([src]), > img[data-src=""][src=""], > img[src=""]:not([data-src])),
main .section_sub.container .row > [class*="col-"]:has(> img[data-src=""]:not([src]), > img[data-src=""][src=""], > img[src=""]:not([data-src])) {
  display: none !important;
}
body.page-txt .txt-text .row:has(> [class*="col-"] > img[data-src=""], > [class*="col-"] > img[src=""]:not([data-src])) > [class*="col-"],
main .section_sub.container .row:has(> [class*="col-"] > img[data-src=""], > [class*="col-"] > img[src=""]:not([data-src])) > [class*="col-"] {
  flex: 0 0 100% !important;
  max-width: 100% !important;
}
/* sekcja z SAMYMI pustymi slotami (np. dwa zdjecia) znika cala - inaczej zostaje odstep mb-5 */
body.page-txt .txt-text .row:has(> [class*="col-"] > img):not(:has(> [class*="col-"] > :not(img[data-src=""], img[src=""]))),
main .section_sub.container .row:has(> [class*="col-"] > img):not(:has(> [class*="col-"] > :not(img[data-src=""], img[src=""]))) {
  display: none !important;
}

/* --- typografia WYSIWYG: gole h2/h3/p/ul maja wygladac jak sekcje JARVIS --- */
body.page-txt .txt-text > .row h2,
main .section_sub.container .cms .row h2 {
  font-family: var(--xx-cms-heading-font);
  color: var(--xx-text);
  font-size: clamp(26px, 3.2vw, 38px);
  line-height: 1.15;
  margin: 0 0 16px;
}
body.page-txt .txt-text > .row h3,
main .section_sub.container .cms .row h3 {
  font-family: var(--xx-cms-heading-font);
  color: var(--xx-text);
  font-size: clamp(20px, 2.2vw, 26px);
  margin: 0 0 10px;
}
body.page-txt .txt-text > .row p,
main .section_sub.container .cms .row p {
  color: var(--xx-text-soft);
  font-size: 17px;
  line-height: 1.75;
  margin: 0 0 14px;
}
body.page-txt .txt-text > .row ul,
main .section_sub.container .cms .row ul {
  margin: 0 0 14px;
  padding-left: 0;
  list-style: none;
}
body.page-txt .txt-text > .row ul li,
main .section_sub.container .cms .row ul li {
  position: relative;
  padding-left: 26px;
  margin-bottom: 8px;
  color: var(--xx-text-soft);
  font-size: 16.5px;
  line-height: 1.6;
}
body.page-txt .txt-text > .row ul li::before {
  content: "";
  position: absolute;
  left: 0;
  top: 0.62em;
  width: 14px;
  height: 2px;
  background: var(--xx-secondary);
}
body.page-txt .txt-text > .row a,
main .section_sub.container .cms .row a {
  color: var(--xx-secondary);
  text-decoration: underline;
  text-underline-offset: 3px;
}

/* --- defensywa WYSIWYG: klient moze wkleic tekst z Worda z inline font-family;
   fonty przywracamy do brandu (kolorow celowo NIE nadpisujemy — swiadoma swoboda). --- */
body.page-txt .txt-text > .row [style*="font-family"],
main .section_sub.container .cms .row [style*="font-family"] {
  font-family: inherit !important;
}

/* --- skalowanie uniwersalne: zaden obraz sekcji (takze wklejony recznie w WYSIWYG)
   nie rozpycha kolumny — klient moze wrzucic dowolnie szeroki/wysoki plik. --- */
body.page-txt .txt-text > .row img,
main .section_sub.container .cms .row img {
  max-width: 100%;
  height: auto;
}

/* --- mobile: kolumny stackuja (Bootstrap), foto nad tekstem dostaje oddech --- */
@media (max-width: 767px) {
  body.page-txt .txt-text > .row { margin-bottom: 40px; }
  body.page-txt .txt-text > .row h2 { font-size: 26px; }
}



/* ============================================================
   LAYER LITEPICKER (kalendarz w palecie marki — custom_search)
   ============================================================ */

/* ==========================================================================
   LAYER LITEPICKER — kalendarz dat w palecie klienta (domyslnie w KAZDYM buildzie
   z wyszukiwarka; scaffold dolacza przy custom_search != false)
   --------------------------------------------------------------------------
   Po co osobna warstwa: kalendarz byl dotad stylowany per klient (delecta §22.4,
   mickiewicza40 §M40-KALENDARZ, five-stars, easyrent). Biblioteka miala tylko
   szerokosc (TRAP #11), wiec kazdy NOWY klient startowal z systemowym kalendarzem
   (biale tlo, font systemowy, niebieskie zaznaczenie, kwadratowy przycisk) i Damian
   zglaszal to ponownie (wschodnia-elegans 2026-09-30, pkt 1).
   Kanon: mickiewicza40 §M40-KALENDARZ (zmierzone 13:1 dla dnia startu).
   Egzekucja: lint L-litepicker-unstyled (biblioteka) + N-search-litepicker (klient).

   ZAKRES: Litepicker dopina sie do <body>, wiec selektory sa GOLE `.litepicker`
   (nie da sie zakresowac na hero). `.day-item` jest tez klasa kalendarza dostepnosci
   na /offer/N - dlatego wszystko pod `.litepicker`.
   Tokeny: --xx-* z MEGA-ROOT (scaffold podmienia na --<prefix>-*).
   ========================================================================== */
.litepicker {
  width: fit-content !important;
  max-width: var(--ys-vw, 100vw) !important;
  font-family: var(--xx-font-body, system-ui, sans-serif) !important;
  border-radius: var(--xx-radius-lg, 16px) !important;
  box-shadow: 0 24px 60px -20px rgba(20, 16, 11, .45), 0 2px 8px rgba(20, 16, 11, .12) !important;
  border: 1px solid rgba(20, 32, 44, .10) !important;
  overflow: hidden;
}
.litepicker .container__months {
  background: #FFFFFF !important;
  box-shadow: none !important;
  border-radius: var(--xx-radius-lg, 16px) !important;
  padding: 14px 10px 10px !important;
}
.litepicker .container__months .month-item {
  padding: 6px 10px !important;
}
.litepicker .month-item-name,
.litepicker .month-item-year {
  font-family: var(--xx-font-heading, serif) !important;
  font-weight: 600 !important;
  font-size: 16px !important;
  color: var(--xx-text, #1A1A1A) !important;
  text-transform: capitalize !important;
}
.litepicker .month-item-weekdays-row > div {
  font-size: 11px !important;
  font-weight: 600 !important;
  letter-spacing: .1em !important;
  text-transform: uppercase !important;
  color: var(--xx-text-muted, #6B6B6B) !important;
}
.litepicker .day-item {
  border-radius: 10px !important;
  font-size: 14px !important;
  color: var(--xx-text, #1A1A1A) !important;
  transition: background .15s ease, color .15s ease;
}
.litepicker .day-item:hover {
  background: var(--xx-cream2, rgba(0, 0, 0, .06)) !important;
  box-shadow: inset 0 0 0 1px var(--xx-secondary, #A6894F) !important;
  color: var(--xx-text, #1A1A1A) !important;
}
.litepicker .day-item.is-today {
  color: var(--xx-secondary-dark, var(--xx-primary, #1A1A1A)) !important;
  font-weight: 700 !important;
}
.litepicker .day-item.is-start-date,
.litepicker .day-item.is-end-date,
.litepicker .day-item.is-start-date.is-end-date {
  background: var(--xx-primary, #1B2430) !important;
  color: #FFFFFF !important;
  font-weight: 600 !important;
}
.litepicker .day-item.is-in-range {
  background: var(--xx-cream2, rgba(0, 0, 0, .08)) !important;
  border-radius: 0 !important;
  color: var(--xx-text, #1A1A1A) !important;
}
.litepicker .day-item.is-locked,
.litepicker .day-item.is-locked:hover {
  color: #BDBDBD !important;
  background: transparent !important;
  box-shadow: none !important;
  text-decoration: line-through;
}
/* DZIEN STARTOWY BYL NIEWIDOCZNY (u-aniolka 2026-10-01, zgloszenie Damiana „nie ma zaznaczenia daty startowej"):
   przy minDays:2 Litepicker po kliknieciu daje dniowi startu ROWNIEZ `is-locked` (koniec nie moze byc tego dnia).
   Regula `.is-locked` wyzej ma te sama wage i stoi PO regule startu -> przezroczyste tlo, szary, przekreslony.
   Stan wybrany ZAWSZE wygrywa z blokada. Egzekucja: L-litepicker-start-locked + 14ae. */
.litepicker .day-item.is-start-date.is-locked,
.litepicker .day-item.is-end-date.is-locked,
.litepicker .day-item.is-start-date.is-locked:hover,
.litepicker .day-item.is-end-date.is-locked:hover {
  background: var(--xx-primary, #1B2430) !important;
  color: #FFFFFF !important;
  font-weight: 600 !important;
  text-decoration: none !important;
}
.litepicker .button-previous-month,
.litepicker .button-next-month {
  border-radius: 999px !important;
  width: 34px !important;
  height: 34px !important;
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
}
.litepicker .button-previous-month:hover,
.litepicker .button-next-month:hover {
  background: var(--xx-cream2, rgba(0, 0, 0, .06)) !important;
}
.litepicker .button-previous-month svg,
.litepicker .button-next-month svg {
  fill: var(--xx-primary, #1B2430) !important;
}
.litepicker .container__footer,
.litepicker .container__tooltip {
  background: #FFFFFF !important;
  border-top: 1px solid rgba(20, 32, 44, .08) !important;
}
/* separator miedzy miesiacami: jedna cienka linia zamiast systemowej szarej sciany */
.litepicker .container__months.columns-2 .month-item + .month-item {
  border-left: 1px solid rgba(20, 32, 44, .06) !important;
}
@media (max-width: 767px) {
  .litepicker { border-radius: var(--xx-radius, 12px) !important; }
}
/* TELEFON = DOLNY ARKUSZ (jodlowa-2 2026-10-08, zrzut Damiana): Litepicker na waskim ekranie stawial okno na srodku
   (position:fixed + translate) albo pod polem z 2 miesiacami wystajacymi poza ekran - w obu wypadkach zaslanial pole
   daty i wyszukiwarke. Arkusz od dolu na cala szerokosc, jeden miesiac, dni rozciagniete na szerokosc ekranu.
   Pole daty przewija nad arkusz ido-search-delegate (before:show). Egzekucja: 14ac (okno w ekranie). */
@media (max-width: 767px) {
  .litepicker {
    position: fixed !important; left: 0 !important; right: 0 !important; top: auto !important; bottom: 0 !important;
    transform: none !important; width: 100% !important; max-width: 100% !important; z-index: 10050 !important;
    border-radius: 18px 18px 0 0 !important; border: 0 !important;
    box-shadow: 0 -18px 50px rgba(0, 0, 0, .28) !important;
    --litepicker-month-width: calc(var(--ys-vw, 100vw) - 24px) !important;
    --litepicker-day-width: calc((var(--ys-vw, 100vw) - 44px) / 7) !important;
  }
  .litepicker .container__main, .litepicker .container__months { width: 100% !important; max-width: 100% !important; }
  .litepicker .container__months { padding: 12px 12px calc(14px + env(safe-area-inset-bottom, 0px)) !important; }
  .litepicker .container__months .month-item { width: 100% !important; padding: 4px 0 !important; }
  .litepicker .container__days > div, .litepicker .container__days > a { height: 44px !important; line-height: 44px !important; }
}
/* MIESIACE OBOK SIEBIE (u-aniolka 2026-10-01, zgloszenie Damiana „otwiera sie jeden pod drugim"):
   Litepicker liczy szerokosc `.container__months.columns-2` jako DOKLADNIE 2 x --litepicker-month-width.
   Padding `.month-item` wyzej (6px 10px) przy box-sizing:content-box dawal 2 x 370 = 740 px w 720 px
   tresci -> drugi miesiac zawijal sie POD pierwszy, a okno rozlewalo sie na 740x830. Padding miesci sie
   w szerokosci miesiaca (border-box), a kontener nie zawija. Egzekucja: L-litepicker-month-wrap + 14ac. */
.litepicker .container__months .month-item { box-sizing: border-box !important; }
.litepicker .container__months.columns-2, .litepicker .container__months.columns-3 { flex-wrap: nowrap !important; }
/* /LAYER LITEPICKER */



/* ============================================================
   LAYER NEWS (blog /news + teaser na home — has_news)
   ============================================================ */

/* ==========================================================================
   LAYER NEWS — blog na systemowym module Aktualnosci (TYLKO /news + pozycja menu)
   --------------------------------------------------------------------------
   Kanon: cityofthekings §CK-NEWS + feedback_idobooking_news_blog_module_cards.md,
   przeniesiony do biblioteki 2026-09-30 (wczesniej zyl tylko u klientow).
   Para z library/js/ido-news.js. Tokeny --xx-* (scaffold -> --<prefix>-*).
   Pulapki pokryte:
     - siatka auto-FILL (nie auto-fit): pojedynczy wpis nie rozciaga sie na cala szerokosc;
     - tytul bywa H2 albo H3 -> obejmujemy oba;
     - BLOG NIGDY NA STRONIE GLOWNEJ (decyzja Damiana, wschodnia-elegans 2026-10-01): silnik
       default13 sam wstawia .news-container na home, gdy sa wpisy. Chowamy go na .page-index;
       wejscie do bloga = pozycja menu „Blog" -> /news. Egzekucja: L-news-home-hidden + 14ag.
     - pojedynczy wpis renderuje sie jako main.news-item.page (bez .news-content):
       zdejmujemy wyglad karty, ograniczamy kolumne do czytelnej szerokosci;
     - skrot clamp 5 linii na /news.
   ========================================================================== */
body.page-news .news-wrapper.row {
  display: grid !important;
  grid-template-columns: repeat(auto-fill, minmax(min(100%, 320px), 1fr));
  gap: 28px;
  max-width: 1240px;
  margin: 0 auto !important;
  padding: 0 24px;
  align-items: stretch;
}
body.page-news .news-wrapper .news-item{
  width: auto !important;
  max-width: none !important;
  flex: none !important;
  margin: 0 !important;
  background: #FFFFFF !important;
  border: 1px solid rgba(20, 32, 44, .10) !important;
  border-radius: var(--xx-radius-lg, 16px) !important;
  overflow: hidden !important;
  padding: 0 0 8px !important;
  display: flex !important;
  flex-direction: column !important;
  transition: transform .2s ease, box-shadow .2s ease;
}
body.page-news .news-wrapper .news-item:hover{
  transform: translateY(-4px);
  box-shadow: 0 14px 34px -16px rgba(20, 16, 11, .35);
}
body.page-news .news-wrapper .news-item img{
  width: 100% !important;
  max-width: 100% !important;
  aspect-ratio: 16 / 10;
  object-fit: cover;
  margin: 0 0 16px !important;
  border-radius: 0 !important;
}
body.page-news .news-wrapper .news-item :is(h2, h3) {
  font-family: var(--xx-font-heading, serif) !important;
  font-size: 20px !important;
  font-weight: 500 !important;
  line-height: 1.25 !important;
  margin: 6px 0 8px !important;
  padding: 0 24px !important;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
body.page-news .news-item :is(h2, h3) a {
  color: var(--xx-text, #1A1A1A) !important;
  text-decoration: none !important;
}
body.page-news .news-item :is(h2, h3) a:hover {
  color: var(--xx-secondary-dark, var(--xx-primary, #1A1A1A)) !important;
}
body.page-news .news-date{
  display: block;
  font-size: 11.5px !important;
  color: var(--xx-text-muted, #6B6B6B) !important;
  text-transform: uppercase;
  letter-spacing: .06em;
  padding: 0 24px !important;
  margin-bottom: 6px;
}
body.page-news .news-content{
  font-size: 14px !important;
  line-height: 1.65 !important;
  color: var(--xx-text-soft, #3A3A3A) !important;
  padding: 0 24px !important;
  display: -webkit-box !important;
  -webkit-line-clamp: 5 !important;
  -webkit-box-orient: vertical !important;
  overflow: hidden !important;
}
body.page-news .news-item .more-news{
  align-self: flex-start;
  margin: auto 24px 18px !important;
  padding-top: 12px;
  border-radius: var(--xx-radius, 8px) !important;
}
body.page-news .news-list,
body.page-news main:not(.news-item) { padding-bottom: 56px !important; }
/* POJEDYNCZY wpis = main.news-item.page: artykul, nie karta */
body.page-news main.news-item {
  max-width: 820px !important;
  margin: 0 auto !important;
  padding: 0 20px 64px !important;
  border: 0 !important;
  border-radius: 0 !important;
  overflow: visible !important;
  background: transparent !important;
  box-sizing: border-box !important;
  display: block !important;
}
body.page-news main.news-item img {
  aspect-ratio: auto;
  max-height: 520px !important;
  object-fit: cover !important;
  border-radius: var(--xx-radius, 8px) !important;
}
body.page-news main.news-item p {
  font-size: 17px !important;
  line-height: 1.75 !important;
  color: var(--xx-text-soft, #3A3A3A) !important;
}
/* BLOG NIE NA HOME: systemowy blok Aktualnosci znika ze strony glownej (cala sekcja, z naglowkiem) */
html body.page-index .news-container { display: none !important; }
/* Rewizja 2026-10-01 (wschodnia-elegans, zgloszenie Damiana): tresc za blisko ramki karty,
   napis „czytaj wiecej" pod srodkiem przycisku (silnik: line-height 49px + padding-top 12px),
   wpis: H1 51 px i H2 36 px WERSALIKAMI przy H3 20 px = nierowna skala. */
body.page-news .news-wrapper .news-item > div:first-of-type{ padding-top: 24px; }
body.page-news .news-wrapper .news-item img + div{ padding-top: 4px; }
body.page-news .news-item .more-news{
  display: inline-flex !important; align-items: center !important; justify-content: center !important;
  height: 44px !important; line-height: 1 !important; padding: 0 22px !important;
  margin: 16px 24px 20px !important; text-transform: uppercase; letter-spacing: .06em;
}
body.page-news .news-wrapper .news-item :is(h2, h3) a { text-transform: none !important; }
body.page-news .news-wrapper .news-item :is(h2, h3) { text-transform: none !important; font-size: 21px !important; }
/* pojedynczy wpis: jedna skala, bez wersalikow w tresci */
body.page-news main.news-item h1.big-label {
  font-size: clamp(30px, 3.4vw, 44px) !important; line-height: 1.15 !important; text-transform: none !important;
  margin: 0 0 10px !important; letter-spacing: 0 !important;
}
body.page-news main.news-item .date-news { display: block; font-size: 12px; letter-spacing: .1em; text-transform: uppercase; color: var(--xx-text-muted, #6B6B6B); margin: 0 0 24px; }
body.page-news main.news-item .news-wrapper h2 { font-size: clamp(22px, 2.2vw, 28px) !important; line-height: 1.25 !important; text-transform: none !important; margin: 28px 0 12px !important; }
body.page-news main.news-item .news-wrapper h3 { font-size: 20px !important; line-height: 1.3 !important; text-transform: none !important; margin: 24px 0 8px !important; }
body.page-news main.news-item .news-wrapper p { font-size: 17px !important; line-height: 1.75 !important; margin: 0 0 14px !important; }
body.page-news main.news-item article > img,
body.page-news main.news-item .news-wrapper img { width: 100% !important; height: auto !important; aspect-ratio: 16 / 9; object-fit: cover !important; border-radius: var(--xx-radius-lg, 16px) !important; margin: 0 0 28px !important; }
/* /LAYER NEWS */



/* ============================================================
   LAYER MIEJSCA (kafle okolicy + karta miejsca — has_okolica, para z ido-miejsca.js)
   ============================================================ */

/* ═══════════════════════════════════════════════════════════════════════════
   layer-miejsca.css — kafle okolicy klikalne + okno karty miejsca (para z library/js/ido-miejsca.js)
   Wyciagniete z mickiewicza40 §M40 (runda 2026-09-18, kanon zgloszen Damiana: „kazda atrakcja po
   nacisnieciu otwiera sie jako fajna karta opisowa", „lupy nie zaslaniaja tekstu") do biblioteki
   2026-10-01 przy u-aniolka, zeby nastepny klient nie pisal okna od zera. Klasy .ys-, tokeny --xx-.
   Markup: li.ys-okolica__p[data-lat][data-lng][data-ys-baza] > .ys-okolica__kadr,
   .ys-okolica__nazwa, .ys-okolica__czas, .ys-okolica__wiecej (opis dlugi, ukryty).
   ═══════════════════════════════════════════════════════════════════════════ */
/* --- ZNACZEK „pokaz pelny opis" --------------------------------------- */
html body:not(#_) .ys-okolica__p { position: relative; }
/* Znaczek siedzi w rogu KADRU, nie przy dolnej krawedzi kafla. Przy dole
   nachodzil na etykiete czasu, gdy ta lamala sie na dwie linie (Damian:
   „te lupy zaslaniaja tekst w dluzszych opisach"). Nad zdjeciem nie zaslania
   niczego, a caly kafel i tak jest klikalny. */
html body:not(#_) .ys-okolica__lupa {
  position: absolute;
  right: 10px;
  top: 10px;
  bottom: auto;
  width: 34px;
  height: 34px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: 0;
  border: 1px solid rgba(30, 58, 84, .18);
  border-radius: 999px;
  background: rgba(252, 250, 247, .94);
  color: var(--xx-secondary, #1E3A54);
  cursor: pointer;
  box-shadow: 0 2px 8px rgba(20, 32, 44, .12);
  transition: background .18s ease, color .18s ease, transform .18s ease;
  z-index: 2;
}
html body:not(#_) .ys-okolica__lupa:hover,
html body:not(#_) .ys-okolica__lupa:focus-visible {
  background: var(--xx-secondary, #1E3A54);
  color: #FCFAF7;
  transform: translateY(-1px);
}

/* --- KAFEL JAKO CALY UCHWYT -------------------------------------------- */
/* Klikniecie otwiera karte opisowa, wiec kafel musi wygladac na klikalny.
   Sam znaczek nie wystarczal: Damian zglosil, ze „naciska sie i nic nie ma",
   bo obsluga kafla ruszala tylko mape stojaca wyzej, poza kadrem ekranu. */
html body:not(#_) .ys-okolica__p { cursor: pointer; }
html body:not(#_) .ys-okolica__p:focus-visible {
  outline: 2px solid var(--xx-secondary, #1E3A54);
  outline-offset: 3px;
}
html body:not(#_) .ys-okolica__p:hover .ys-okolica__lupa {
  background: var(--xx-secondary, #1E3A54);
  color: #FCFAF7;
}
/* opis dlugi mieszka w kaflu, ale pokazuje sie dopiero w karcie */
html body:not(#_) .ys-okolica__wiecej { display: none !important; }

/* przypis fotografa na kadrze - wymog licencji Creative Commons */
html body:not(#_) .ys-okolica__kadr { position: relative; }
html body:not(#_) .ys-okolica__fot {
  position: absolute;
  left: 0;
  bottom: 0;
  max-width: 100%;
  padding: 2px 7px;
  font-family: var(--xx-font-body, sans-serif);
  font-size: 9.5px;
  line-height: 1.3;
  letter-spacing: .02em;
  color: rgba(252, 250, 247, .88);
  background: rgba(20, 32, 44, .55);
  border-top-right-radius: 4px;
  pointer-events: none;
}

/* --- OKNO KARTY MIEJSCA ------------------------------------------------ */
/* Runda 2026-09-18 (druga tego dnia): „po nacisnieciu te karty maja byc
   wieksze i ma byc opcja wyznaczenia trasy z google mapsa i ma byc wiecej
   napisane o tych atrakcjach". Karta jest dwukolumnowa: kadr trzyma pelna
   wysokosc okna, tekst obok przewija sie sam, wiec kilka akapitow miesci sie
   bez scrollowania calego okna. */
html body:not(#_) .ys-miejsce[hidden] { display: none !important; }
html body:not(#_) .ys-miejsce {
  position: fixed;
  inset: 0;
  z-index: 100000;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 24px;
}
html body:not(#_) .ys-miejsce__tlo {
  position: absolute;
  inset: 0;
  background: rgba(20, 32, 44, .68);
}
html body:not(#_) .ys-miejsce__karta {
  position: relative;
  z-index: 1;
  display: grid;
  grid-template-columns: minmax(0, 40%) minmax(0, 60%);
  align-items: stretch;
  width: min(960px, 100%);
  max-height: min(680px, calc(100vh - 48px));
  overflow: hidden;
  background: #FCFAF7;
  border-radius: 6px;
  box-shadow: 0 18px 60px rgba(20, 32, 44, .34);
}
html body:not(#_) .ys-miejsce__zamknij {
  position: absolute;
  top: 10px;
  right: 10px;
  width: 38px;
  height: 38px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: 0;
  font-size: 24px;
  line-height: 1;
  border: 0;
  border-radius: 999px;
  background: rgba(252, 250, 247, .92);
  color: var(--xx-primary, #1B2430);
  cursor: pointer;
  z-index: 2;
}
html body:not(#_) .ys-miejsce__foto { margin: 0; min-height: 0; }
html body:not(#_) .ys-miejsce__foto .ys-okolica__kadr {
  display: block;
  width: 100%;
  height: 100%;
  border-radius: 0;
}
html body:not(#_) .ys-miejsce__foto img {
  width: 100%;
  height: 100%;
  min-height: 260px;
  object-fit: cover;
  display: block;
}
/* kadr liczbowy (punkt bez zdjecia) nie ma juz wystepowac, ale gdyby
   kiedys wrocil, karta ma wygladac jak karta, nie jak dziura */
/* plansza marki (kafel bez zdjecia, ilustracja w ::before) - bez wysokosci w oknie na telefonie
   miala 32 px, bo siatka okna ma tam wiersz `auto` (zmierzone jodlowa-2, 2026-10-08) */
html body:not(#_) .ys-miejsce__foto .ys-okolica__kadr--plansza { min-height: 260px; }
html body:not(#_) .ys-miejsce__foto .ys-okolica__kadr--liczba {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  min-height: 260px;
  background: var(--xx-secondary, #1E3A54);
  color: #FCFAF7;
}
html body:not(#_) .ys-miejsce__tresc {
  padding: 26px 30px 28px;
  overflow: auto;
  min-height: 0;
}
html body:not(#_) .ys-miejsce__czas {
  margin: 0 0 8px;
  font-family: var(--xx-font-body, sans-serif);
  font-size: 12px;
  letter-spacing: .09em;
  text-transform: uppercase;
  color: var(--xx-secondary, #1E3A54);
}
html body:not(#_) .ys-miejsce__nazwa {
  margin: 0 0 14px;
  font-family: var(--xx-font-heading, serif);
  font-size: clamp(24px, 3vw, 32px);
  line-height: 1.18;
  color: var(--xx-primary, #1B2430);
}
html body:not(#_) .ys-miejsce__opis {
  font-family: var(--xx-font-body, sans-serif);
  font-size: 15.5px;
  line-height: 1.68;
  color: rgba(27, 36, 48, .86);
}
html body:not(#_) .ys-miejsce__opis p { margin: 0 0 12px; }
html body:not(#_) .ys-miejsce__opis p:last-child { margin-bottom: 0; }
html body:not(#_) .ys-miejsce__zrodlo {
  margin: 14px 0 0;
  font-family: var(--xx-font-body, sans-serif);
  font-size: 11.5px;
  line-height: 1.5;
  color: rgba(27, 36, 48, .55);
}
html body:not(#_) .ys-miejsce__zrodlo[hidden] { display: none !important; }
html body:not(#_) .ys-miejsce__akcje {
  margin: 20px 0 0;
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
}
html body:not(#_) .ys-miejsce__akcje .ys-btn[hidden] { display: none !important; }
html body:not(#_) .ys-miejsce__akcje .ys-btn {
  font-family: var(--xx-font-body, sans-serif);
  cursor: pointer;
}
/* Dwa przyciski w jednym rzedzie musza sie roznic WAGA, nie tylko trescia:
   trasa to akcja glowna (pelne tlo), mapa - poboczna (obrys). Geometria zostaje
   identyczna, zmienia sie wypelnienie (kolor i ksztalt ustawiamy razem). */
/* `!important`, bo baza `.ys-btn` maluje tlo skrotem `background: var(--...)`.
   UWAGA na diagnoze: skrot z `var()` NIE pokazuje sie jako `rule.style.backgroundColor`
   w CSSOM (wartosc czeka na podstawienie), wiec skan regul „kto ustawia tlo" go gubi -
   trzeba porownac wartosc WYLICZONA, nie liste regul. */
html body:not(#_) .ys-miejsce__akcje .ys-miejsce__mapa {
  background: transparent !important;
  color: var(--xx-secondary, #1E3A54) !important;
  border: 1px solid var(--xx-secondary, #1E3A54) !important;
}
html body:not(#_) .ys-miejsce__akcje .ys-miejsce__mapa:hover,
html body:not(#_) .ys-miejsce__akcje .ys-miejsce__mapa:focus-visible {
  background: var(--xx-secondary, #1E3A54) !important;
  color: #FCFAF7 !important;
}

@media (max-width: 860px) {
  html body:not(#_) .ys-miejsce { padding: 12px; }
  html body:not(#_) .ys-miejsce__karta {
    grid-template-columns: minmax(0, 1fr);
    grid-template-rows: auto minmax(0, 1fr);
    max-height: calc(100vh - 24px);
  }
  html body:not(#_) .ys-miejsce__foto img,
  html body:not(#_) .ys-miejsce__foto .ys-okolica__kadr--plansza,
  html body:not(#_) .ys-miejsce__foto .ys-okolica__kadr--liczba {
    height: 210px;
    min-height: 210px;
  }
  html body:not(#_) .ys-miejsce__tresc { padding: 20px 20px 24px; }
}




/* ============================================================
   LAYER FULL-BLEED §19 (100vw sekcje)
   ============================================================ */

/* ==========================================================================
   LAYER — FULL-BLEED (§19 / TRAP-14) — JEDEN utrzymywany blok
   --------------------------------------------------------------------------
   PROBLEM (TRAP-14): default13 wstrzykuje body_top w
     <div class="section_sub container">  (max-width ~1170px, margines po bokach).
   Bez wyrwania na 100vw pasy sekcji (hero / band / cta / stats) siedzą w
   ~1140px kolumnie zamiast pełnej szerokości → body-bg prześwituje po bokach.

   ROZWIĄZANIE — dwuwarstwowe:
     (a) KLASA UNIWERSALNA `.ys-fullbleed` — nosi ją KAŻDY wrapper sekcji
         w body_top (scaffold dodaje ją do szkieletów). Nowa sekcja =
         dopisz klasę w HTML, ZERO zmian tutaj. To jest domyślna droga.
     (b) JAWNA LISTA selektorów systemowych/nazwanych sekcji — safety-net dla
         markupu bez klasy uniwersalnej. Skonsolidowana z L1/L3/L4 + klientów
         live-verified (cityofthekings F18, easyrent). DOPISZ TU nową sekcję,
         jeśli z jakiegoś powodu nie może nosić `.ys-fullbleed`.

   Źródła kanoniczne: easyrent §ER-FULLBLEED (10404+), cityofthekings .ck-section.

   Krytyczne detale:
     - `overflow-x: clip` (NIE hidden) na body per-page — clip NIE psuje
       position:sticky (np. sticky bookbox na /offer/N). hidden by je złamał.
     - full-bleed NIGDY na `.container` systemowym — złamałby layout treści
       (formularze, listy, siatki systemowe liczą na 1170px kontener).
     - wewnętrzne wrappery (`__inner`) trzymają treść na czytelnej szerokości.

   PARAMETRYZACJA: `ys` → prefiks klienta (scaffold). Tokeny opcjonalne.
   ========================================================================== */

/* --------------------------------------------------------------------------
   0. Guard poziomego scrolla — clip zamiast hidden (sticky-safe).
      Per-page scope: nie ruszamy overflow globalnie na html/body poza
      znanymi page-* (bezpieczniejsze niż `html,body{overflow-x:clip}`
      które bije systemowe layouty spoza tych podstron).
   -------------------------------------------------------------------------- */
body.page-index,
body.page-offers,
body.page-offer,
body.page-txt,
body.page-contact,
body.page-news {
  overflow-x: clip !important;
}

/* --------------------------------------------------------------------------
   (a) KLASA UNIWERSALNA — domyślny mechanizm full-bleed dla wrapperów body_top.
      Wyrywa element z kontenera 1170px na pełną szerokość viewportu.
      `calc(50% - var(--ys-vw, 100vw) / 2)` = połowa różnicy między 100% rodzica a 100vw (ujemny
      margines) → element rozlewa się symetrycznie do krawędzi ekranu.
   -------------------------------------------------------------------------- */
.ys-fullbleed {
  width: var(--ys-vw, 100vw) !important;
  margin-left: calc(50% - var(--ys-vw, 100vw) / 2) !important;
  margin-right: calc(50% - var(--ys-vw, 100vw) / 2) !important;
  max-width: var(--ys-vw, 100vw) !important;
  box-sizing: border-box !important;
}

/* Wewnętrzny wrapper treści — trzyma tekst/siatkę na czytelnej szerokości
   wewnątrz pełnoszerokiego pasa. Padding boczny „przykleja" treść do kolumny
   1240px, ale tło (na rodzicu .ys-fullbleed) sięga krawędzi ekranu. */
.ys-fullbleed > .ys-inner,
.ys-inner {
  max-width: var(--ys-maxw, 1240px);
  margin-left: auto !important;
  margin-right: auto !important;
  padding-left: clamp(20px, 4vw, 48px);
  padding-right: clamp(20px, 4vw, 48px);
  box-sizing: border-box;
}

/* --------------------------------------------------------------------------
   (b) JAWNA LISTA SEKCJI PEŁNEJ SZEROKOŚCI (safety-net)
      Skonsolidowana z klientów live-verified. Selektory z `.ys-` mają
      prefiks podmieniany przez scaffold. Reguła TYLKO ujemny margines +
      100vw — bez tła/paddingu (te definiuje sekcja per vibe).

      ┌────────────────────────────────────────────────────────────────┐
      │ DOPISZ TU nową sekcję pełnej szerokości, jeśli jej wrapper NIE   │
      │ może nosić klasy `.ys-fullbleed`. Preferuj jednak klasę (a).│
      └────────────────────────────────────────────────────────────────┘
   -------------------------------------------------------------------------- */
.ys-section,
.ys-hero,
.ys-hero-lite,
.ys-pagehead,
.ys-pagehero,
.ys-band,
.ys-statsband,
.ys-trust,
.ys-cta,
.ys-darkhero,
.ys-storyhero,
.ys-splithero,
.ys-keyrow,
.ys-contact,
.ys-filterbar,
.ys-results-head,
.ys-breadcrumb,
.ys-pagination,
.ys-footer {
  width: var(--ys-vw, 100vw) !important;
  margin-left: calc(50% - var(--ys-vw, 100vw) / 2) !important;
  margin-right: calc(50% - var(--ys-vw, 100vw) / 2) !important;
  max-width: var(--ys-vw, 100vw) !important;
  box-sizing: border-box !important;
}

/* Sekcje z listy (b) które renderują treść bez własnego `__inner`
   (np. siatki key-row / hero split) — wyrównaj padding do kolumny 1240px,
   żeby treść nie kleiła się do krawędzi ekranu. `max()` gwarantuje min.
   oddech 20-48px nawet na wąskich ekranach. */
.ys-storyhero,
.ys-splithero,
.ys-keyrow,
.ys-contact,
.ys-filterbar,
.ys-results-head,
.ys-breadcrumb {
  padding-left: max(clamp(20px, 4vw, 48px), calc((var(--ys-vw, 100vw) - var(--ys-maxw, 1240px)) / 2)) !important;
  padding-right: max(clamp(20px, 4vw, 48px), calc((var(--ys-vw, 100vw) - var(--ys-maxw, 1240px)) / 2)) !important;
}

/* --------------------------------------------------------------------------
   Mobile — full-bleed liczy też szerokość paska przewijania (100vw > widoczna
   szerokość gdy scrollbar zajmuje miejsce), co dawało 1-2px poziomego rozjazdu.
   overflow-x:clip (sekcja 0) go tnie, ale twardo kapujemy szerokość na
   dokumencie, żeby nie było nawet subpikselowego dryfu.
   -------------------------------------------------------------------------- */
@media (max-width: 991.98px) {
  html,
  body {
    max-width: 100%;
    overflow-x: clip;
  }
}



/* ============================================================
   LAYER 4 — VARIETY (warianty sekcji)
   ============================================================ */

/* === §VIBE-VARIETY (L4): usuń nieużywane warianty === */
/* ═══════════════════════════════════════════════════════════════
   LAYER 4 — VARIETY PATTERNS (70 wariantów sekcji)
   Modular section styles. Aktywacja: <section class="xx-hero xx-hero--asymmetric-grid">.
   JARVIS pickuje 1 wariant per sekcja per klient (z vibe-presets.json).

   Sections x variants:
   - Hero (10): asymmetric-grid, full-bleed-image, split-half, centered-typography,
     overlap-image, video-bg, parallax-scroll, slider-multi, mosaic-collage, minimal-text
   - About (8): asym-text-img, split-half, full-width-quote, timeline-vertical,
     stat-row-cards, image-mosaic-text, story-narrative, founder-portrait-quote
   - Gallery (8): asym-mosaic, masonry, slider-fullscreen, grid-equal,
     polaroid-stack, isotope-filter, lightbox-thumbs, carousel-3-cards
   - CTA (8): dark-bold, gradient, full-bleed-image-overlay, minimal-text,
     side-image, sticky-bottom-bar, countdown-timer, multi-button-row
   - Features (6): icon-grid-4col, text-list-numbered, alternating-rows,
     comparison-table, cards-pop-hover, accordion-vertical
   - Testimonials (6): slider-fullwidth, grid-3col, single-quote-big,
     video-grid, masonry-mixed, carousel-photos
   - Location/Map (5): full-bleed-map, split-text-map, info-cards-map,
     dual-location-tabs, interactive-points
   - FAQ (4): accordion-classic, two-column-grid, sidebar-search, tabs-categorized
   - Navigation (8): transparent-overlay, solid, megamenu, side-drawer,
     scroll-spy, hamburger-only, sticky-compact, pill-tabs
   - Footer (7): minimal, compact, dark-rich, image-bg, multi-column, centered, social-focus

   Total: 70 variants
   ═══════════════════════════════════════════════════════════════ */

/* ╔════════════════════════════════════════════════════════════╗
   ║  HERO SECTIONS (10 variants)                                ║
   ╚════════════════════════════════════════════════════════════╝ */

/* ──────────────────────────────────────────────────────────
   HERO 1/10 — asymmetric-grid
   Use: luxury-heritage, industrial-loft
   Layout: 3:2 grid, big image left, text right
   ────────────────────────────────────────────────────────── */
.ys-hero.ys-hero--asymmetric-grid {
  display: grid;
  grid-template-columns: 3fr 2fr;
  gap: clamp(24px, 4vw, 64px);
  min-height: 80vh;
  align-items: center;
  padding: clamp(60px, 8vw, 120px) clamp(20px, 4vw, 48px);
  background: var(--xx-cream);
}
.ys-hero--asymmetric-grid .ys-hero__media {
  position: relative;
  aspect-ratio: 16/10;
  border-radius: var(--xx-radius-lg);
  overflow: hidden;
  box-shadow: var(--xx-shadow-lg);
}
.ys-hero--asymmetric-grid .ys-hero__media img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.ys-hero--asymmetric-grid .ys-hero__text {
  display: flex;
  flex-direction: column;
  justify-content: center;
}
.ys-hero--asymmetric-grid .ys-hero__eyebrow {
  font-size: 12px;
  letter-spacing: 3px;
  text-transform: uppercase;
  color: var(--xx-primary);
  margin-bottom: 16px;
}
.ys-hero--asymmetric-grid .ys-hero__title {
  font-family: var(--xx-font-heading);
  font-size: clamp(36px, 5vw, 64px);
  margin: 0 0 24px;
  line-height: 1.1;
  color: var(--xx-text);
}
.ys-hero--asymmetric-grid .ys-hero__lead {
  font-size: clamp(16px, 1.3vw, 19px);
  color: var(--xx-text-soft);
  margin: 0 0 32px;
  line-height: 1.6;
}
.ys-hero--asymmetric-grid .ys-hero__cta {
  display: inline-flex;
  align-items: center;
  gap: 12px;
  padding: 16px 32px;
  background: var(--xx-primary);
  color: #fff;
  text-decoration: none;
  border-radius: var(--xx-radius);
  font-weight: 600;
  transition: background 0.3s var(--xx-ease);
  width: fit-content;
}
.ys-hero--asymmetric-grid .ys-hero__cta:hover {
  background: var(--xx-secondary);
}
@media (max-width: 991px) {
  .ys-hero.ys-hero--asymmetric-grid {
    grid-template-columns: 1fr;
    min-height: auto;
  }
  .ys-hero--asymmetric-grid .ys-hero__media {
    aspect-ratio: 4/3;
  }
}

/* ──────────────────────────────────────────────────────────
   HERO 2/10 — full-bleed-image
   Use: cinematic, dramatic, resort
   Layout: full viewport image, centered overlay text
   ────────────────────────────────────────────────────────── */
.ys-hero.ys-hero--full-bleed-image {
  position: relative;
  min-height: 100vh;
  display: flex;
  align-items: center;
  justify-content: center;
  text-align: center;
  overflow: hidden;
  color: #fff;
}
.ys-hero--full-bleed-image .ys-hero__media {
  position: absolute;
  inset: 0;
  z-index: 0;
}
.ys-hero--full-bleed-image .ys-hero__media img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.ys-hero--full-bleed-image .ys-hero__media::after {
  content: '';
  position: absolute;
  inset: 0;
  background: linear-gradient(180deg, rgba(0,0,0,0.2) 0%, rgba(0,0,0,0.55) 100%);
}
.ys-hero--full-bleed-image .ys-hero__text {
  position: relative;
  z-index: 1;
  max-width: 760px;
  padding: 0 clamp(20px, 4vw, 48px);
}
.ys-hero--full-bleed-image .ys-hero__eyebrow {
  font-size: 13px;
  letter-spacing: 4px;
  text-transform: uppercase;
  opacity: 0.9;
  margin-bottom: 20px;
}
.ys-hero--full-bleed-image .ys-hero__title {
  font-family: var(--xx-font-heading);
  font-size: clamp(42px, 7vw, 88px);
  line-height: 1.05;
  margin: 0 0 24px;
  text-shadow: 0 2px 12px rgba(0,0,0,0.3);
}
.ys-hero--full-bleed-image .ys-hero__lead {
  font-size: clamp(17px, 1.5vw, 22px);
  opacity: 0.95;
  margin: 0 0 40px;
  line-height: 1.55;
}
.ys-hero--full-bleed-image .ys-hero__cta {
  display: inline-block;
  padding: 18px 42px;
  background: var(--xx-primary);
  color: #fff;
  text-decoration: none;
  border-radius: var(--xx-radius);
  font-weight: 600;
  letter-spacing: 1px;
  transition: transform 0.3s var(--xx-ease), background 0.3s var(--xx-ease);
}
.ys-hero--full-bleed-image .ys-hero__cta:hover {
  background: var(--xx-secondary);
  transform: translateY(-2px);
}
@media (max-width: 991px) {
  .ys-hero.ys-hero--full-bleed-image {
    min-height: 85vh;
  }
}

/* ──────────────────────────────────────────────────────────
   HERO 3/10 — split-half
   Use: editorial, boutique, balanced
   Layout: 50/50 split, image one side, text other
   ────────────────────────────────────────────────────────── */
.ys-hero.ys-hero--split-half {
  display: grid;
  grid-template-columns: 1fr 1fr;
  min-height: 90vh;
  background: var(--xx-bg);
}
.ys-hero--split-half .ys-hero__media {
  position: relative;
  overflow: hidden;
}
.ys-hero--split-half .ys-hero__media img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.ys-hero--split-half .ys-hero__text {
  display: flex;
  flex-direction: column;
  justify-content: center;
  padding: clamp(40px, 6vw, 96px);
}
.ys-hero--split-half .ys-hero__eyebrow {
  font-size: 12px;
  letter-spacing: 3px;
  text-transform: uppercase;
  color: var(--xx-primary);
  margin-bottom: 20px;
}
.ys-hero--split-half .ys-hero__title {
  font-family: var(--xx-font-heading);
  font-size: clamp(36px, 4.5vw, 60px);
  line-height: 1.1;
  margin: 0 0 24px;
  color: var(--xx-text);
}
.ys-hero--split-half .ys-hero__lead {
  font-size: clamp(15px, 1.2vw, 18px);
  color: var(--xx-text-soft);
  margin: 0 0 36px;
  line-height: 1.7;
}
.ys-hero--split-half .ys-hero__cta {
  display: inline-flex;
  align-items: center;
  gap: 12px;
  padding: 14px 28px;
  background: var(--xx-primary);
  color: #fff;
  text-decoration: none;
  border-radius: var(--xx-radius);
  font-weight: 600;
  width: fit-content;
  transition: background 0.3s var(--xx-ease);
}
.ys-hero--split-half .ys-hero__cta:hover {
  background: var(--xx-secondary);
}
@media (max-width: 991px) {
  .ys-hero.ys-hero--split-half {
    grid-template-columns: 1fr;
    min-height: auto;
  }
  .ys-hero--split-half .ys-hero__media {
    aspect-ratio: 16/10;
  }
}

/* ──────────────────────────────────────────────────────────
   HERO 4/10 — centered-typography
   Use: minimal, typographic, editorial
   Layout: pure text, no image, centered
   ────────────────────────────────────────────────────────── */
.ys-hero.ys-hero--centered-typography {
  min-height: 70vh;
  display: flex;
  align-items: center;
  justify-content: center;
  text-align: center;
  padding: clamp(80px, 12vw, 160px) clamp(20px, 4vw, 48px);
  background: var(--xx-cream);
}
.ys-hero--centered-typography .ys-hero__text {
  max-width: 880px;
}
.ys-hero--centered-typography .ys-hero__eyebrow {
  font-size: 13px;
  letter-spacing: 5px;
  text-transform: uppercase;
  color: var(--xx-primary);
  margin-bottom: 32px;
}
.ys-hero--centered-typography .ys-hero__title {
  font-family: var(--xx-font-heading);
  font-size: clamp(44px, 7vw, 96px);
  line-height: 1.02;
  letter-spacing: -0.02em;
  margin: 0 0 32px;
  color: var(--xx-text);
}
.ys-hero--centered-typography .ys-hero__lead {
  font-size: clamp(17px, 1.4vw, 21px);
  color: var(--xx-text-soft);
  margin: 0 auto 44px;
  line-height: 1.65;
  max-width: 640px;
}
.ys-hero--centered-typography .ys-hero__cta {
  display: inline-block;
  padding: 16px 36px;
  background: transparent;
  color: var(--xx-primary);
  text-decoration: none;
  border: 2px solid var(--xx-primary);
  border-radius: var(--xx-radius);
  font-weight: 600;
  letter-spacing: 1px;
  transition: all 0.3s var(--xx-ease);
}
.ys-hero--centered-typography .ys-hero__cta:hover {
  background: var(--xx-primary);
  color: #fff;
}
@media (max-width: 991px) {
  .ys-hero.ys-hero--centered-typography {
    min-height: 60vh;
  }
}

/* ──────────────────────────────────────────────────────────
   HERO 5/10 — overlap-image
   Use: modern, layered, magazine
   Layout: image overlaps text box (negative margin)
   ────────────────────────────────────────────────────────── */
.ys-hero.ys-hero--overlap-image {
  position: relative;
  padding: clamp(80px, 10vw, 140px) clamp(20px, 4vw, 48px);
  background: var(--xx-cream);
}
.ys-hero--overlap-image .ys-hero__inner {
  position: relative;
  max-width: 1280px;
  margin: 0 auto;
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 0;
  align-items: center;
}
.ys-hero--overlap-image .ys-hero__media {
  position: relative;
  z-index: 1;
  aspect-ratio: 4/5;
  border-radius: var(--xx-radius-lg);
  overflow: hidden;
  box-shadow: var(--xx-shadow-lg);
}
.ys-hero--overlap-image .ys-hero__media img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.ys-hero--overlap-image .ys-hero__text {
  position: relative;
  z-index: 2;
  background: var(--xx-bg);
  padding: clamp(32px, 4vw, 56px);
  margin-left: -8%;
  border-radius: var(--xx-radius-lg);
  box-shadow: var(--xx-shadow-md);
}
.ys-hero--overlap-image .ys-hero__eyebrow {
  font-size: 12px;
  letter-spacing: 3px;
  text-transform: uppercase;
  color: var(--xx-primary);
  margin-bottom: 16px;
}
.ys-hero--overlap-image .ys-hero__title {
  font-family: var(--xx-font-heading);
  font-size: clamp(32px, 4vw, 52px);
  line-height: 1.1;
  margin: 0 0 20px;
  color: var(--xx-text);
}
.ys-hero--overlap-image .ys-hero__lead {
  font-size: clamp(15px, 1.2vw, 18px);
  color: var(--xx-text-soft);
  margin: 0 0 28px;
  line-height: 1.65;
}
.ys-hero--overlap-image .ys-hero__cta {
  display: inline-block;
  padding: 14px 30px;
  background: var(--xx-primary);
  color: #fff;
  text-decoration: none;
  border-radius: var(--xx-radius);
  font-weight: 600;
  transition: background 0.3s var(--xx-ease);
}
.ys-hero--overlap-image .ys-hero__cta:hover {
  background: var(--xx-secondary);
}
@media (max-width: 991px) {
  .ys-hero--overlap-image .ys-hero__inner {
    grid-template-columns: 1fr;
  }
  .ys-hero--overlap-image .ys-hero__text {
    margin-left: 0;
    margin-top: -40px;
    width: 92%;
    margin-right: auto;
  }
}

/* ──────────────────────────────────────────────────────────
   HERO 6/10 — video-bg
   Use: cinematic, dynamic, premium
   Layout: video background + centered overlay text
   ────────────────────────────────────────────────────────── */
.ys-hero.ys-hero--video-bg {
  position: relative;
  min-height: 100vh;
  display: flex;
  align-items: center;
  justify-content: center;
  overflow: hidden;
  color: #fff;
  text-align: center;
}
.ys-hero--video-bg .ys-hero__media {
  position: absolute;
  inset: 0;
  z-index: 0;
}
.ys-hero--video-bg .ys-hero__media video,
.ys-hero--video-bg .ys-hero__media iframe {
  width: 100%;
  height: 100%;
  object-fit: cover;
  pointer-events: none;
}
.ys-hero--video-bg .ys-hero__media::after {
  content: '';
  position: absolute;
  inset: 0;
  background: linear-gradient(180deg, rgba(0,0,0,0.3) 0%, rgba(0,0,0,0.6) 100%);
}
.ys-hero--video-bg .ys-hero__text {
  position: relative;
  z-index: 1;
  max-width: 800px;
  padding: 0 clamp(20px, 4vw, 48px);
}
.ys-hero--video-bg .ys-hero__eyebrow {
  font-size: 13px;
  letter-spacing: 5px;
  text-transform: uppercase;
  opacity: 0.95;
  margin-bottom: 24px;
}
.ys-hero--video-bg .ys-hero__title {
  font-family: var(--xx-font-heading);
  font-size: clamp(44px, 7vw, 92px);
  line-height: 1.05;
  margin: 0 0 28px;
  text-shadow: 0 2px 16px rgba(0,0,0,0.4);
}
.ys-hero--video-bg .ys-hero__lead {
  font-size: clamp(17px, 1.5vw, 22px);
  margin: 0 0 40px;
  line-height: 1.6;
  opacity: 0.95;
}
.ys-hero--video-bg .ys-hero__cta {
  display: inline-block;
  padding: 18px 44px;
  background: rgba(255,255,255,0.12);
  color: #fff;
  text-decoration: none;
  border: 2px solid #fff;
  border-radius: var(--xx-radius);
  font-weight: 600;
  letter-spacing: 1px;
  backdrop-filter: blur(8px);
  transition: all 0.3s var(--xx-ease);
}
.ys-hero--video-bg .ys-hero__cta:hover {
  background: #fff;
  color: var(--xx-text);
}
@media (max-width: 991px) {
  .ys-hero.ys-hero--video-bg {
    min-height: 80vh;
  }
}

/* ──────────────────────────────────────────────────────────
   HERO 7/10 — parallax-scroll
   Use: scenic, immersive, storytelling
   Layout: parallax background (background-attachment: fixed)
   ────────────────────────────────────────────────────────── */
.ys-hero.ys-hero--parallax-scroll {
  position: relative;
  min-height: 95vh;
  display: flex;
  align-items: center;
  background-image: var(--xx-hero-bg, linear-gradient(135deg, #333, #111));
  background-size: cover;
  background-position: center;
  background-attachment: fixed;
  color: #fff;
  overflow: hidden;
}
.ys-hero--parallax-scroll::before {
  content: '';
  position: absolute;
  inset: 0;
  background: linear-gradient(180deg, rgba(0,0,0,0.25) 0%, rgba(0,0,0,0.55) 100%);
  z-index: 0;
}
.ys-hero--parallax-scroll .ys-hero__text {
  position: relative;
  z-index: 1;
  max-width: 700px;
  padding: 0 clamp(20px, 6vw, 80px);
}
.ys-hero--parallax-scroll .ys-hero__eyebrow {
  font-size: 12px;
  letter-spacing: 4px;
  text-transform: uppercase;
  opacity: 0.9;
  margin-bottom: 20px;
}
.ys-hero--parallax-scroll .ys-hero__title {
  font-family: var(--xx-font-heading);
  font-size: clamp(40px, 6vw, 78px);
  line-height: 1.08;
  margin: 0 0 24px;
}
.ys-hero--parallax-scroll .ys-hero__lead {
  font-size: clamp(16px, 1.3vw, 20px);
  opacity: 0.95;
  margin: 0 0 36px;
  line-height: 1.65;
}
.ys-hero--parallax-scroll .ys-hero__cta {
  display: inline-block;
  padding: 16px 36px;
  background: var(--xx-primary);
  color: #fff;
  text-decoration: none;
  border-radius: var(--xx-radius);
  font-weight: 600;
  transition: transform 0.3s var(--xx-ease), background 0.3s var(--xx-ease);
}
.ys-hero--parallax-scroll .ys-hero__cta:hover {
  background: var(--xx-secondary);
  transform: translateY(-2px);
}
@media (max-width: 991px) {
  .ys-hero.ys-hero--parallax-scroll {
    background-attachment: scroll;
    min-height: 75vh;
  }
}

/* ──────────────────────────────────────────────────────────
   HERO 8/10 — slider-multi
   Use: resort, gallery-first, multi-property
   Layout: slick/swiper carousel with multiple full slides
   ────────────────────────────────────────────────────────── */
.ys-hero.ys-hero--slider-multi {
  position: relative;
  min-height: 90vh;
  overflow: hidden;
  background: var(--xx-text);
}
.ys-hero--slider-multi .ys-hero__slider {
  position: relative;
  height: 90vh;
}
.ys-hero--slider-multi .ys-hero__slide {
  position: relative;
  height: 90vh;
  display: flex;
  align-items: flex-end;
  color: #fff;
  overflow: hidden;
}
.ys-hero--slider-multi .ys-hero__media {
  position: absolute;
  inset: 0;
  z-index: 0;
}
.ys-hero--slider-multi .ys-hero__media img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.ys-hero--slider-multi .ys-hero__media::after {
  content: '';
  position: absolute;
  inset: 0;
  background: linear-gradient(0deg, rgba(0,0,0,0.7) 0%, rgba(0,0,0,0.15) 60%);
}
.ys-hero--slider-multi .ys-hero__text {
  position: relative;
  z-index: 1;
  padding: 0 clamp(20px, 6vw, 80px) clamp(60px, 10vw, 120px);
  max-width: 800px;
}
.ys-hero--slider-multi .ys-hero__eyebrow {
  font-size: 12px;
  letter-spacing: 4px;
  text-transform: uppercase;
  opacity: 0.9;
  margin-bottom: 16px;
}
.ys-hero--slider-multi .ys-hero__title {
  font-family: var(--xx-font-heading);
  font-size: clamp(36px, 5.5vw, 72px);
  line-height: 1.1;
  margin: 0 0 20px;
  text-shadow: 0 2px 12px rgba(0,0,0,0.4);
}
.ys-hero--slider-multi .ys-hero__lead {
  font-size: clamp(15px, 1.3vw, 19px);
  opacity: 0.95;
  margin: 0 0 28px;
  line-height: 1.6;
}
.ys-hero--slider-multi .ys-hero__cta {
  display: inline-block;
  padding: 14px 32px;
  background: var(--xx-primary);
  color: #fff;
  text-decoration: none;
  border-radius: var(--xx-radius);
  font-weight: 600;
  transition: background 0.3s var(--xx-ease);
}
.ys-hero--slider-multi .ys-hero__cta:hover {
  background: var(--xx-secondary);
}
.ys-hero--slider-multi .slick-dots {
  position: absolute;
  bottom: 24px;
  left: 50%;
  transform: translateX(-50%);
  z-index: 2;
  display: flex;
  gap: 8px;
  list-style: none;
  padding: 0;
}
.ys-hero--slider-multi .slick-dots li button {
  width: 32px;
  height: 3px;
  background: rgba(255,255,255,0.4);
  border: none;
  font-size: 0;
  cursor: pointer;
  transition: background 0.3s var(--xx-ease);
}
.ys-hero--slider-multi .slick-dots li.slick-active button {
  background: #fff;
}
@media (max-width: 991px) {
  .ys-hero.ys-hero--slider-multi,
  .ys-hero--slider-multi .ys-hero__slider,
  .ys-hero--slider-multi .ys-hero__slide {
    min-height: 75vh;
    height: 75vh;
  }
}

/* ──────────────────────────────────────────────────────────
   HERO 9/10 — mosaic-collage
   Use: gallery-rich, multi-shot, artistic
   Layout: 4-image collage grid with text overlay
   ────────────────────────────────────────────────────────── */
.ys-hero.ys-hero--mosaic-collage {
  position: relative;
  min-height: 100vh;
  padding: clamp(60px, 8vw, 100px) clamp(20px, 4vw, 48px);
  background: var(--xx-cream);
  overflow: hidden;
}
.ys-hero--mosaic-collage .ys-hero__inner {
  max-width: 1400px;
  margin: 0 auto;
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: clamp(20px, 3vw, 48px);
  align-items: center;
}
.ys-hero--mosaic-collage .ys-hero__media {
  display: grid;
  grid-template-columns: 1fr 1fr;
  grid-template-rows: 1fr 1fr;
  gap: 12px;
  aspect-ratio: 1;
}
.ys-hero--mosaic-collage .ys-hero__media img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  border-radius: var(--xx-radius);
}
.ys-hero--mosaic-collage .ys-hero__media img:nth-child(1) {
  grid-row: 1 / 3;
  border-radius: var(--xx-radius-lg);
}
.ys-hero--mosaic-collage .ys-hero__text {
  padding: clamp(20px, 4vw, 40px);
}
.ys-hero--mosaic-collage .ys-hero__eyebrow {
  font-size: 12px;
  letter-spacing: 3px;
  text-transform: uppercase;
  color: var(--xx-primary);
  margin-bottom: 16px;
}
.ys-hero--mosaic-collage .ys-hero__title {
  font-family: var(--xx-font-heading);
  font-size: clamp(34px, 4.5vw, 58px);
  line-height: 1.1;
  margin: 0 0 24px;
  color: var(--xx-text);
}
.ys-hero--mosaic-collage .ys-hero__lead {
  font-size: clamp(15px, 1.2vw, 18px);
  color: var(--xx-text-soft);
  margin: 0 0 32px;
  line-height: 1.65;
}
.ys-hero--mosaic-collage .ys-hero__cta {
  display: inline-block;
  padding: 14px 30px;
  background: var(--xx-primary);
  color: #fff;
  text-decoration: none;
  border-radius: var(--xx-radius);
  font-weight: 600;
  transition: background 0.3s var(--xx-ease);
}
.ys-hero--mosaic-collage .ys-hero__cta:hover {
  background: var(--xx-secondary);
}
@media (max-width: 991px) {
  .ys-hero--mosaic-collage .ys-hero__inner {
    grid-template-columns: 1fr;
  }
  .ys-hero--mosaic-collage .ys-hero__media {
    aspect-ratio: 4/3;
  }
}

/* ──────────────────────────────────────────────────────────
   HERO 10/10 — minimal-text
   Use: editorial, austere, brutalist
   Layout: very minimal — small headline, large body type
   ────────────────────────────────────────────────────────── */
.ys-hero.ys-hero--minimal-text {
  min-height: 60vh;
  display: flex;
  align-items: center;
  padding: clamp(80px, 12vw, 160px) clamp(20px, 6vw, 80px);
  background: var(--xx-bg);
  border-bottom: 1px solid rgba(0,0,0,0.08);
}
.ys-hero--minimal-text .ys-hero__text {
  max-width: 900px;
}
.ys-hero--minimal-text .ys-hero__eyebrow {
  font-size: 12px;
  letter-spacing: 3px;
  text-transform: uppercase;
  color: var(--xx-text-muted);
  margin-bottom: 32px;
}
.ys-hero--minimal-text .ys-hero__title {
  font-family: var(--xx-font-heading);
  font-size: clamp(28px, 3.5vw, 42px);
  line-height: 1.3;
  margin: 0 0 24px;
  color: var(--xx-text);
  font-weight: 500;
}
.ys-hero--minimal-text .ys-hero__lead {
  font-size: clamp(20px, 2vw, 28px);
  color: var(--xx-text);
  margin: 0 0 40px;
  line-height: 1.45;
  font-weight: 300;
}
.ys-hero--minimal-text .ys-hero__cta {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  color: var(--xx-primary);
  text-decoration: none;
  font-weight: 600;
  letter-spacing: 1px;
  border-bottom: 2px solid var(--xx-primary);
  padding-bottom: 4px;
  transition: gap 0.3s var(--xx-ease);
}
.ys-hero--minimal-text .ys-hero__cta:hover {
  gap: 16px;
}
@media (max-width: 991px) {
  .ys-hero.ys-hero--minimal-text {
    min-height: 50vh;
  }
}

/* ╔════════════════════════════════════════════════════════════╗
   ║  ABOUT SECTIONS (8 variants)                                ║
   ╚════════════════════════════════════════════════════════════╝ */

/* ──────────────────────────────────────────────────────────
   ABOUT 1/8 — asym-text-img
   Use: editorial, magazine, story-led
   Layout: asymmetric 2:3 grid, text on left smaller
   ────────────────────────────────────────────────────────── */
.ys-about.ys-about--asym-text-img {
  display: grid;
  grid-template-columns: 2fr 3fr;
  gap: clamp(32px, 5vw, 80px);
  align-items: center;
  padding: clamp(60px, 8vw, 120px) clamp(20px, 4vw, 48px);
  max-width: 1400px;
  margin: 0 auto;
}
.ys-about--asym-text-img .ys-about__content {
  display: flex;
  flex-direction: column;
}
.ys-about--asym-text-img .ys-about__title {
  font-family: var(--xx-font-heading);
  font-size: clamp(32px, 4vw, 52px);
  line-height: 1.1;
  margin: 0 0 24px;
  color: var(--xx-text);
}
.ys-about--asym-text-img .ys-about__body {
  font-size: clamp(15px, 1.2vw, 18px);
  color: var(--xx-text-soft);
  line-height: 1.75;
  margin: 0;
}
.ys-about--asym-text-img .ys-about__body p {
  margin: 0 0 18px;
}
.ys-about--asym-text-img .ys-about__media {
  position: relative;
  aspect-ratio: 4/3;
  border-radius: var(--xx-radius-lg);
  overflow: hidden;
  box-shadow: var(--xx-shadow-md);
}
.ys-about--asym-text-img .ys-about__media img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}
@media (max-width: 991px) {
  .ys-about.ys-about--asym-text-img {
    grid-template-columns: 1fr;
  }
}

/* ──────────────────────────────────────────────────────────
   ABOUT 2/8 — split-half
   Use: balanced, classical
   Layout: 50/50 image + text
   ────────────────────────────────────────────────────────── */
.ys-about.ys-about--split-half {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: clamp(40px, 6vw, 96px);
  align-items: center;
  padding: clamp(60px, 8vw, 120px) clamp(20px, 4vw, 48px);
  max-width: 1300px;
  margin: 0 auto;
}
.ys-about--split-half .ys-about__media {
  aspect-ratio: 1;
  border-radius: var(--xx-radius-lg);
  overflow: hidden;
  box-shadow: var(--xx-shadow-md);
}
.ys-about--split-half .ys-about__media img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.ys-about--split-half .ys-about__title {
  font-family: var(--xx-font-heading);
  font-size: clamp(32px, 4vw, 50px);
  margin: 0 0 24px;
  line-height: 1.15;
  color: var(--xx-text);
}
.ys-about--split-half .ys-about__body {
  font-size: clamp(15px, 1.2vw, 17px);
  color: var(--xx-text-soft);
  line-height: 1.75;
}
.ys-about--split-half .ys-about__body p {
  margin: 0 0 16px;
}
@media (max-width: 991px) {
  .ys-about.ys-about--split-half {
    grid-template-columns: 1fr;
  }
  .ys-about--split-half .ys-about__media {
    aspect-ratio: 4/3;
  }
}

/* ──────────────────────────────────────────────────────────
   ABOUT 3/8 — full-width-quote
   Use: brand voice, manifesto, hero-quote
   Layout: huge centered quote, no image
   ────────────────────────────────────────────────────────── */
.ys-about.ys-about--full-width-quote {
  padding: clamp(80px, 12vw, 160px) clamp(20px, 6vw, 80px);
  background: var(--xx-cream);
  text-align: center;
}
.ys-about--full-width-quote .ys-about__content {
  max-width: 1000px;
  margin: 0 auto;
}
.ys-about--full-width-quote .ys-about__title {
  font-family: var(--xx-font-heading);
  font-size: clamp(28px, 3.6vw, 52px);
  line-height: 1.3;
  margin: 0 0 32px;
  color: var(--xx-text);
  font-style: italic;
  font-weight: 400;
  position: relative;
}
.ys-about--full-width-quote .ys-about__title::before {
  content: '\201C';
  display: block;
  font-size: clamp(80px, 12vw, 160px);
  line-height: 0.5;
  color: var(--xx-primary);
  margin-bottom: 24px;
  font-family: Georgia, serif;
}
.ys-about--full-width-quote .ys-about__body {
  font-size: 14px;
  letter-spacing: 3px;
  text-transform: uppercase;
  color: var(--xx-text-muted);
}
@media (max-width: 991px) {
  .ys-about.ys-about--full-width-quote {
    padding: clamp(60px, 10vw, 100px) clamp(20px, 4vw, 32px);
  }
}

/* ──────────────────────────────────────────────────────────
   ABOUT 4/8 — timeline-vertical
   Use: heritage, story, history
   Layout: vertical timeline with milestones
   ────────────────────────────────────────────────────────── */
.ys-about.ys-about--timeline-vertical {
  padding: clamp(60px, 8vw, 120px) clamp(20px, 4vw, 48px);
  max-width: 900px;
  margin: 0 auto;
}
.ys-about--timeline-vertical .ys-about__title {
  font-family: var(--xx-font-heading);
  font-size: clamp(32px, 4vw, 48px);
  text-align: center;
  margin: 0 0 60px;
  color: var(--xx-text);
}
.ys-about--timeline-vertical .ys-about__content {
  position: relative;
  padding-left: 40px;
}
.ys-about--timeline-vertical .ys-about__content::before {
  content: '';
  position: absolute;
  left: 12px;
  top: 8px;
  bottom: 8px;
  width: 2px;
  background: var(--xx-primary);
  opacity: 0.3;
}
.ys-about--timeline-vertical .ys-about__item {
  position: relative;
  padding: 0 0 40px;
}
.ys-about--timeline-vertical .ys-about__item::before {
  content: '';
  position: absolute;
  left: -36px;
  top: 8px;
  width: 14px;
  height: 14px;
  background: var(--xx-primary);
  border: 3px solid var(--xx-bg);
  border-radius: 50%;
  box-shadow: 0 0 0 2px var(--xx-primary);
}
.ys-about--timeline-vertical .ys-about__year {
  font-family: var(--xx-font-heading);
  font-size: 22px;
  color: var(--xx-primary);
  margin: 0 0 8px;
  font-weight: 700;
}
.ys-about--timeline-vertical .ys-about__body {
  font-size: 16px;
  color: var(--xx-text-soft);
  line-height: 1.7;
  margin: 0;
}
@media (max-width: 991px) {
  .ys-about--timeline-vertical .ys-about__content {
    padding-left: 32px;
  }
}

/* ──────────────────────────────────────────────────────────
   ABOUT 5/8 — stat-row-cards
   Use: data-driven, established, credibility
   Layout: 4-column stat cards beneath intro
   ────────────────────────────────────────────────────────── */
.ys-about.ys-about--stat-row-cards {
  padding: clamp(60px, 8vw, 120px) clamp(20px, 4vw, 48px);
  max-width: 1300px;
  margin: 0 auto;
  text-align: center;
}
.ys-about--stat-row-cards .ys-about__title {
  font-family: var(--xx-font-heading);
  font-size: clamp(32px, 4vw, 50px);
  margin: 0 0 24px;
  color: var(--xx-text);
}
.ys-about--stat-row-cards .ys-about__body {
  font-size: clamp(16px, 1.3vw, 19px);
  color: var(--xx-text-soft);
  max-width: 740px;
  margin: 0 auto 64px;
  line-height: 1.7;
}
.ys-about--stat-row-cards .ys-about__stats {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: clamp(16px, 2vw, 32px);
}
.ys-about--stat-row-cards .ys-about__stat {
  padding: clamp(24px, 3vw, 40px) 20px;
  background: var(--xx-cream);
  border-radius: var(--xx-radius-lg);
  transition: transform 0.3s var(--xx-ease);
}
.ys-about--stat-row-cards .ys-about__stat:hover {
  transform: translateY(-4px);
  box-shadow: var(--xx-shadow-md);
}
.ys-about--stat-row-cards .ys-about__stat-number {
  font-family: var(--xx-font-heading);
  font-size: clamp(36px, 4.5vw, 56px);
  font-weight: 700;
  color: var(--xx-primary);
  display: block;
  margin-bottom: 8px;
  line-height: 1;
}
.ys-about--stat-row-cards .ys-about__stat-label {
  font-size: 13px;
  letter-spacing: 2px;
  text-transform: uppercase;
  color: var(--xx-text-soft);
}
@media (max-width: 991px) {
  .ys-about--stat-row-cards .ys-about__stats {
    grid-template-columns: repeat(2, 1fr);
  }
}

/* ──────────────────────────────────────────────────────────
   ABOUT 6/8 — image-mosaic-text
   Use: gallery-led, visual brand
   Layout: 3-image mosaic + text below
   ────────────────────────────────────────────────────────── */
.ys-about.ys-about--image-mosaic-text {
  padding: clamp(60px, 8vw, 120px) clamp(20px, 4vw, 48px);
  max-width: 1400px;
  margin: 0 auto;
}
.ys-about--image-mosaic-text .ys-about__media {
  display: grid;
  grid-template-columns: 2fr 1fr 1fr;
  grid-template-rows: 1fr 1fr;
  gap: 16px;
  height: clamp(360px, 50vw, 560px);
  margin-bottom: 60px;
}
.ys-about--image-mosaic-text .ys-about__media img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  border-radius: var(--xx-radius);
}
.ys-about--image-mosaic-text .ys-about__media img:nth-child(1) {
  grid-row: 1 / 3;
  border-radius: var(--xx-radius-lg);
}
.ys-about--image-mosaic-text .ys-about__content {
  max-width: 900px;
  margin: 0 auto;
  text-align: center;
}
.ys-about--image-mosaic-text .ys-about__title {
  font-family: var(--xx-font-heading);
  font-size: clamp(32px, 4vw, 52px);
  margin: 0 0 24px;
  color: var(--xx-text);
}
.ys-about--image-mosaic-text .ys-about__body {
  font-size: clamp(16px, 1.3vw, 19px);
  color: var(--xx-text-soft);
  line-height: 1.75;
}
.ys-about--image-mosaic-text .ys-about__body p {
  margin: 0 0 18px;
}
@media (max-width: 991px) {
  .ys-about--image-mosaic-text .ys-about__media {
    grid-template-columns: 1fr 1fr;
    grid-template-rows: auto auto;
    height: auto;
  }
  .ys-about--image-mosaic-text .ys-about__media img:nth-child(1) {
    grid-row: 1;
    grid-column: 1 / 3;
    aspect-ratio: 16/9;
  }
}

/* ──────────────────────────────────────────────────────────
   ABOUT 7/8 — story-narrative
   Use: long-form, storytelling, heritage
   Layout: drop-cap intro + flowing paragraphs
   ────────────────────────────────────────────────────────── */
.ys-about.ys-about--story-narrative {
  padding: clamp(80px, 12vw, 140px) clamp(20px, 6vw, 80px);
  max-width: 760px;
  margin: 0 auto;
}
.ys-about--story-narrative .ys-about__eyebrow {
  font-size: 12px;
  letter-spacing: 4px;
  text-transform: uppercase;
  color: var(--xx-primary);
  margin-bottom: 16px;
  text-align: center;
}
.ys-about--story-narrative .ys-about__title {
  font-family: var(--xx-font-heading);
  font-size: clamp(36px, 5vw, 60px);
  line-height: 1.1;
  margin: 0 0 48px;
  color: var(--xx-text);
  text-align: center;
}
.ys-about--story-narrative .ys-about__divider {
  width: 60px;
  height: 2px;
  background: var(--xx-primary);
  margin: 0 auto 48px;
}
.ys-about--story-narrative .ys-about__body {
  font-size: clamp(17px, 1.3vw, 19px);
  color: var(--xx-text);
  line-height: 1.85;
  font-family: var(--xx-font-body);
}
.ys-about--story-narrative .ys-about__body p {
  margin: 0 0 24px;
}
.ys-about--story-narrative .ys-about__body p:first-of-type::first-letter {
  font-family: var(--xx-font-heading);
  font-size: 76px;
  float: left;
  line-height: 0.85;
  padding: 8px 12px 0 0;
  color: var(--xx-primary);
  font-weight: 700;
}
@media (max-width: 991px) {
  .ys-about.ys-about--story-narrative {
    padding: clamp(60px, 10vw, 100px) clamp(20px, 4vw, 32px);
  }
}

/* ──────────────────────────────────────────────────────────
   ABOUT 8/8 — founder-portrait-quote
   Use: personal brand, owner-led, boutique
   Layout: square portrait + quote + name
   ────────────────────────────────────────────────────────── */
.ys-about.ys-about--founder-portrait-quote {
  display: grid;
  grid-template-columns: minmax(260px, 380px) 1fr;
  gap: clamp(40px, 6vw, 80px);
  align-items: center;
  padding: clamp(60px, 8vw, 120px) clamp(20px, 4vw, 48px);
  max-width: 1200px;
  margin: 0 auto;
  background: var(--xx-cream);
  border-radius: var(--xx-radius-lg);
}
.ys-about--founder-portrait-quote .ys-about__media {
  aspect-ratio: 1;
  border-radius: 50%;
  overflow: hidden;
  box-shadow: var(--xx-shadow-md);
}
.ys-about--founder-portrait-quote .ys-about__media img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.ys-about--founder-portrait-quote .ys-about__title {
  font-family: var(--xx-font-heading);
  font-size: clamp(22px, 2.4vw, 32px);
  font-style: italic;
  line-height: 1.4;
  margin: 0 0 28px;
  color: var(--xx-text);
  font-weight: 400;
}
.ys-about--founder-portrait-quote .ys-about__title::before {
  content: '\201C';
  color: var(--xx-primary);
  margin-right: 4px;
}
.ys-about--founder-portrait-quote .ys-about__title::after {
  content: '\201D';
  color: var(--xx-primary);
  margin-left: 4px;
}
.ys-about--founder-portrait-quote .ys-about__author {
  font-family: var(--xx-font-heading);
  font-size: 20px;
  color: var(--xx-text);
  margin: 0 0 4px;
}
.ys-about--founder-portrait-quote .ys-about__role {
  font-size: 13px;
  letter-spacing: 2px;
  text-transform: uppercase;
  color: var(--xx-primary);
}
@media (max-width: 991px) {
  .ys-about.ys-about--founder-portrait-quote {
    grid-template-columns: 1fr;
    text-align: center;
  }
  .ys-about--founder-portrait-quote .ys-about__media {
    max-width: 260px;
    margin: 0 auto;
  }
}

/* ╔════════════════════════════════════════════════════════════╗
   ║  GALLERY SECTIONS (8 variants)                              ║
   ╚════════════════════════════════════════════════════════════╝ */

/* ──────────────────────────────────────────────────────────
   GALLERY 1/8 — asym-mosaic
   Use: editorial, magazine, varied
   Layout: asymmetric grid with mixed sizes
   ────────────────────────────────────────────────────────── */
.ys-gallery.ys-gallery--asym-mosaic {
  padding: clamp(60px, 8vw, 120px) clamp(20px, 4vw, 48px);
  max-width: 1400px;
  margin: 0 auto;
}
.ys-gallery--asym-mosaic .ys-gallery__grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  grid-auto-rows: 220px;
  gap: 16px;
}
.ys-gallery--asym-mosaic .ys-gallery__item {
  position: relative;
  overflow: hidden;
  border-radius: var(--xx-radius);
  cursor: pointer;
}
.ys-gallery--asym-mosaic .ys-gallery__item:nth-child(1) {
  grid-column: 1 / 3;
  grid-row: 1 / 3;
}
.ys-gallery--asym-mosaic .ys-gallery__item:nth-child(4) {
  grid-column: 3 / 5;
  grid-row: 2 / 4;
}
.ys-gallery--asym-mosaic .ys-gallery__item:nth-child(6) {
  grid-column: 1 / 3;
  grid-row: 3 / 4;
}
.ys-gallery--asym-mosaic .ys-gallery__item img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform 0.5s var(--xx-ease);
}
.ys-gallery--asym-mosaic .ys-gallery__item:hover img {
  transform: scale(1.05);
}
.ys-gallery--asym-mosaic .ys-gallery__caption {
  position: absolute;
  bottom: 0;
  left: 0;
  right: 0;
  padding: 16px 20px;
  background: linear-gradient(0deg, rgba(0,0,0,0.8) 0%, transparent 100%);
  color: #fff;
  font-size: 14px;
  opacity: 0;
  transition: opacity 0.3s var(--xx-ease);
}
.ys-gallery--asym-mosaic .ys-gallery__item:hover .ys-gallery__caption {
  opacity: 1;
}
@media (max-width: 991px) {
  .ys-gallery--asym-mosaic .ys-gallery__grid {
    grid-template-columns: repeat(2, 1fr);
    grid-auto-rows: 180px;
  }
  .ys-gallery--asym-mosaic .ys-gallery__item:nth-child(n) {
    grid-column: auto;
    grid-row: auto;
  }
}

/* ──────────────────────────────────────────────────────────
   GALLERY 2/8 — masonry
   Use: Pinterest-style, varied heights
   Layout: CSS columns masonry
   ────────────────────────────────────────────────────────── */
.ys-gallery.ys-gallery--masonry {
  padding: clamp(60px, 8vw, 120px) clamp(20px, 4vw, 48px);
  max-width: 1400px;
  margin: 0 auto;
}
.ys-gallery--masonry .ys-gallery__grid {
  column-count: 4;
  column-gap: 16px;
}
.ys-gallery--masonry .ys-gallery__item {
  break-inside: avoid;
  margin-bottom: 16px;
  border-radius: var(--xx-radius);
  overflow: hidden;
  position: relative;
  cursor: pointer;
}
.ys-gallery--masonry .ys-gallery__item img {
  width: 100%;
  height: auto;
  display: block;
  transition: transform 0.5s var(--xx-ease);
}
.ys-gallery--masonry .ys-gallery__item:hover img {
  transform: scale(1.04);
}
.ys-gallery--masonry .ys-gallery__caption {
  position: absolute;
  inset: auto 0 0 0;
  padding: 14px 18px;
  background: linear-gradient(0deg, rgba(0,0,0,0.75), transparent);
  color: #fff;
  font-size: 13px;
  opacity: 0;
  transition: opacity 0.3s var(--xx-ease);
}
.ys-gallery--masonry .ys-gallery__item:hover .ys-gallery__caption {
  opacity: 1;
}
@media (max-width: 1200px) {
  .ys-gallery--masonry .ys-gallery__grid {
    column-count: 3;
  }
}
@media (max-width: 768px) {
  .ys-gallery--masonry .ys-gallery__grid {
    column-count: 2;
  }
}
@media (max-width: 480px) {
  .ys-gallery--masonry .ys-gallery__grid {
    column-count: 1;
  }
}

/* ──────────────────────────────────────────────────────────
   GALLERY 3/8 — slider-fullscreen
   Use: cinematic, immersive
   Layout: full-screen carousel with arrows
   ────────────────────────────────────────────────────────── */
.ys-gallery.ys-gallery--slider-fullscreen {
  position: relative;
  background: var(--xx-text);
  overflow: hidden;
}
.ys-gallery--slider-fullscreen .ys-gallery__grid {
  position: relative;
  height: 80vh;
}
.ys-gallery--slider-fullscreen .ys-gallery__item {
  position: relative;
  height: 80vh;
  width: 100%;
}
.ys-gallery--slider-fullscreen .ys-gallery__item img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.ys-gallery--slider-fullscreen .ys-gallery__caption {
  position: absolute;
  left: 0;
  right: 0;
  bottom: 60px;
  text-align: center;
  color: #fff;
  font-family: var(--xx-font-heading);
  font-size: clamp(20px, 2vw, 28px);
  text-shadow: 0 2px 12px rgba(0,0,0,0.5);
  padding: 0 20px;
}
.ys-gallery--slider-fullscreen .slick-arrow {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  z-index: 2;
  width: 56px;
  height: 56px;
  background: rgba(255,255,255,0.15);
  border: 1px solid rgba(255,255,255,0.3);
  border-radius: 50%;
  color: #fff;
  font-size: 20px;
  cursor: pointer;
  backdrop-filter: blur(8px);
  transition: background 0.3s var(--xx-ease);
}
.ys-gallery--slider-fullscreen .slick-arrow:hover {
  background: rgba(255,255,255,0.3);
}
.ys-gallery--slider-fullscreen .slick-prev {
  left: 32px;
}
.ys-gallery--slider-fullscreen .slick-next {
  right: 32px;
}
@media (max-width: 991px) {
  .ys-gallery--slider-fullscreen .ys-gallery__grid,
  .ys-gallery--slider-fullscreen .ys-gallery__item {
    height: 60vh;
  }
  .ys-gallery--slider-fullscreen .slick-prev {
    left: 12px;
  }
  .ys-gallery--slider-fullscreen .slick-next {
    right: 12px;
  }
}

/* ──────────────────────────────────────────────────────────
   GALLERY 4/8 — grid-equal
   Use: clean, organized, catalog
   Layout: equal 3-column grid
   ────────────────────────────────────────────────────────── */
.ys-gallery.ys-gallery--grid-equal {
  padding: clamp(60px, 8vw, 120px) clamp(20px, 4vw, 48px);
  max-width: 1400px;
  margin: 0 auto;
}
.ys-gallery--grid-equal .ys-gallery__grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 20px;
}
.ys-gallery--grid-equal .ys-gallery__item {
  position: relative;
  aspect-ratio: 4/3;
  border-radius: var(--xx-radius);
  overflow: hidden;
  cursor: pointer;
}
.ys-gallery--grid-equal .ys-gallery__item img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform 0.4s var(--xx-ease);
}
.ys-gallery--grid-equal .ys-gallery__item:hover img {
  transform: scale(1.05);
}
.ys-gallery--grid-equal .ys-gallery__caption {
  position: absolute;
  inset: auto 0 0 0;
  padding: 16px 20px;
  color: #fff;
  background: linear-gradient(0deg, rgba(0,0,0,0.7), transparent);
  font-size: 14px;
}
@media (max-width: 991px) {
  .ys-gallery--grid-equal .ys-gallery__grid {
    grid-template-columns: repeat(2, 1fr);
  }
}
@media (max-width: 480px) {
  .ys-gallery--grid-equal .ys-gallery__grid {
    grid-template-columns: 1fr;
  }
}

/* ──────────────────────────────────────────────────────────
   GALLERY 5/8 — polaroid-stack
   Use: nostalgic, scrapbook, playful
   Layout: rotated polaroid-style cards
   ────────────────────────────────────────────────────────── */
.ys-gallery.ys-gallery--polaroid-stack {
  padding: clamp(60px, 8vw, 120px) clamp(20px, 4vw, 48px);
  max-width: 1300px;
  margin: 0 auto;
  background: var(--xx-cream);
}
.ys-gallery--polaroid-stack .ys-gallery__grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
  gap: 32px;
  justify-items: center;
}
.ys-gallery--polaroid-stack .ys-gallery__item {
  background: #fff;
  padding: 14px 14px 48px;
  box-shadow: 0 6px 24px rgba(0,0,0,0.15);
  max-width: 280px;
  transition: transform 0.35s var(--xx-ease);
  cursor: pointer;
}
.ys-gallery--polaroid-stack .ys-gallery__item:nth-child(odd) {
  transform: rotate(-2deg);
}
.ys-gallery--polaroid-stack .ys-gallery__item:nth-child(even) {
  transform: rotate(2deg);
}
.ys-gallery--polaroid-stack .ys-gallery__item:hover {
  transform: rotate(0) scale(1.05);
  z-index: 2;
}
.ys-gallery--polaroid-stack .ys-gallery__item img {
  width: 100%;
  aspect-ratio: 1;
  object-fit: cover;
  display: block;
}
.ys-gallery--polaroid-stack .ys-gallery__caption {
  padding-top: 14px;
  text-align: center;
  font-family: 'Caveat', 'Brush Script MT', cursive;
  font-size: 18px;
  color: var(--xx-text);
}
@media (max-width: 991px) {
  .ys-gallery--polaroid-stack .ys-gallery__grid {
    gap: 24px;
  }
}

/* ──────────────────────────────────────────────────────────
   GALLERY 6/8 — isotope-filter
   Use: categorized, portfolio, multi-category
   Layout: filter buttons + filtered grid
   ────────────────────────────────────────────────────────── */
.ys-gallery.ys-gallery--isotope-filter {
  padding: clamp(60px, 8vw, 120px) clamp(20px, 4vw, 48px);
  max-width: 1400px;
  margin: 0 auto;
}
.ys-gallery--isotope-filter .ys-gallery__filter {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 12px;
  margin-bottom: 48px;
}
.ys-gallery--isotope-filter .ys-gallery__filter-btn {
  padding: 10px 22px;
  background: transparent;
  border: 1px solid rgba(0,0,0,0.15);
  border-radius: 999px;
  color: var(--xx-text-soft);
  font-size: 14px;
  font-weight: 500;
  letter-spacing: 0.5px;
  cursor: pointer;
  transition: all 0.3s var(--xx-ease);
}
.ys-gallery--isotope-filter .ys-gallery__filter-btn:hover {
  border-color: var(--xx-primary);
  color: var(--xx-primary);
}
.ys-gallery--isotope-filter .ys-gallery__filter-btn.is-active {
  background: var(--xx-primary);
  border-color: var(--xx-primary);
  color: #fff;
}
.ys-gallery--isotope-filter .ys-gallery__grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 20px;
}
.ys-gallery--isotope-filter .ys-gallery__item {
  position: relative;
  aspect-ratio: 4/3;
  border-radius: var(--xx-radius);
  overflow: hidden;
  cursor: pointer;
  transition: opacity 0.3s var(--xx-ease), transform 0.3s var(--xx-ease);
}
.ys-gallery--isotope-filter .ys-gallery__item.is-hidden {
  display: none;
}
.ys-gallery--isotope-filter .ys-gallery__item img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform 0.4s var(--xx-ease);
}
.ys-gallery--isotope-filter .ys-gallery__item:hover img {
  transform: scale(1.05);
}
.ys-gallery--isotope-filter .ys-gallery__caption {
  position: absolute;
  inset: auto 0 0 0;
  padding: 16px 20px;
  background: linear-gradient(0deg, rgba(0,0,0,0.75), transparent);
  color: #fff;
  font-size: 14px;
}
@media (max-width: 991px) {
  .ys-gallery--isotope-filter .ys-gallery__grid {
    grid-template-columns: repeat(2, 1fr);
  }
}
@media (max-width: 480px) {
  .ys-gallery--isotope-filter .ys-gallery__grid {
    grid-template-columns: 1fr;
  }
}

/* ──────────────────────────────────────────────────────────
   GALLERY 7/8 — lightbox-thumbs
   Use: big preview + thumbnails (product detail style)
   Layout: large image left, thumbs grid right
   ────────────────────────────────────────────────────────── */
.ys-gallery.ys-gallery--lightbox-thumbs {
  padding: clamp(60px, 8vw, 120px) clamp(20px, 4vw, 48px);
  max-width: 1300px;
  margin: 0 auto;
  display: grid;
  grid-template-columns: 2fr 1fr;
  gap: 24px;
}
.ys-gallery--lightbox-thumbs .ys-gallery__main {
  position: relative;
  aspect-ratio: 4/3;
  border-radius: var(--xx-radius-lg);
  overflow: hidden;
  box-shadow: var(--xx-shadow-md);
}
.ys-gallery--lightbox-thumbs .ys-gallery__main img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.ys-gallery--lightbox-thumbs .ys-gallery__grid {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 12px;
  align-content: start;
}
.ys-gallery--lightbox-thumbs .ys-gallery__item {
  position: relative;
  aspect-ratio: 1;
  border-radius: var(--xx-radius);
  overflow: hidden;
  cursor: pointer;
  opacity: 0.75;
  transition: opacity 0.3s var(--xx-ease);
}
.ys-gallery--lightbox-thumbs .ys-gallery__item:hover,
.ys-gallery--lightbox-thumbs .ys-gallery__item.is-active {
  opacity: 1;
  outline: 2px solid var(--xx-primary);
  outline-offset: -2px;
}
.ys-gallery--lightbox-thumbs .ys-gallery__item img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}
@media (max-width: 991px) {
  .ys-gallery.ys-gallery--lightbox-thumbs {
    grid-template-columns: 1fr;
  }
  .ys-gallery--lightbox-thumbs .ys-gallery__grid {
    grid-template-columns: repeat(4, 1fr);
  }
}

/* ──────────────────────────────────────────────────────────
   GALLERY 8/8 — carousel-3-cards
   Use: catalog, featured, slider preview
   Layout: 3-card slider with peek
   ────────────────────────────────────────────────────────── */
.ys-gallery.ys-gallery--carousel-3-cards {
  padding: clamp(60px, 8vw, 120px) 0;
  max-width: 100%;
  overflow: hidden;
}
.ys-gallery--carousel-3-cards .ys-gallery__grid {
  padding: 0 clamp(20px, 4vw, 48px);
  display: flex;
  gap: 20px;
}
.ys-gallery--carousel-3-cards .ys-gallery__item {
  flex: 0 0 calc((100% / 3) - 14px);
  position: relative;
  aspect-ratio: 3/4;
  border-radius: var(--xx-radius-lg);
  overflow: hidden;
  cursor: pointer;
  transition: transform 0.3s var(--xx-ease);
}
.ys-gallery--carousel-3-cards .ys-gallery__item:hover {
  transform: translateY(-6px);
}
.ys-gallery--carousel-3-cards .ys-gallery__item img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform 0.5s var(--xx-ease);
}
.ys-gallery--carousel-3-cards .ys-gallery__item:hover img {
  transform: scale(1.06);
}
.ys-gallery--carousel-3-cards .ys-gallery__caption {
  position: absolute;
  bottom: 0;
  left: 0;
  right: 0;
  padding: 24px;
  background: linear-gradient(0deg, rgba(0,0,0,0.8), transparent);
  color: #fff;
  font-family: var(--xx-font-heading);
  font-size: 22px;
}
@media (max-width: 991px) {
  .ys-gallery--carousel-3-cards .ys-gallery__item {
    flex: 0 0 calc((100% / 2) - 10px);
  }
}
@media (max-width: 600px) {
  .ys-gallery--carousel-3-cards .ys-gallery__item {
    flex: 0 0 80%;
  }
}

/* ╔════════════════════════════════════════════════════════════╗
   ║  CTA SECTIONS (8 variants)                                  ║
   ╚════════════════════════════════════════════════════════════╝ */

/* ──────────────────────────────────────────────────────────
   CTA 1/8 — dark-bold
   Use: high-contrast, conversion-focused
   Layout: dark background, big white text, prominent CTA
   ────────────────────────────────────────────────────────── */
.ys-cta.ys-cta--dark-bold {
  background: var(--xx-text);
  color: #fff;
  padding: clamp(80px, 10vw, 140px) clamp(20px, 4vw, 48px);
  text-align: center;
}
.ys-cta--dark-bold .ys-cta__inner {
  max-width: 800px;
  margin: 0 auto;
}
.ys-cta--dark-bold .ys-cta__title {
  font-family: var(--xx-font-heading);
  font-size: clamp(36px, 5vw, 64px);
  line-height: 1.1;
  margin: 0 0 24px;
}
.ys-cta--dark-bold .ys-cta__lead {
  font-size: clamp(16px, 1.4vw, 20px);
  opacity: 0.85;
  margin: 0 0 40px;
  line-height: 1.65;
}
.ys-cta--dark-bold .ys-cta__cta {
  display: inline-block;
  padding: 18px 44px;
  background: var(--xx-primary);
  color: #fff;
  text-decoration: none;
  border-radius: var(--xx-radius);
  font-weight: 700;
  letter-spacing: 1px;
  text-transform: uppercase;
  font-size: 14px;
  transition: transform 0.3s var(--xx-ease), background 0.3s var(--xx-ease);
}
.ys-cta--dark-bold .ys-cta__cta:hover {
  background: var(--xx-secondary);
  transform: translateY(-2px);
}
@media (max-width: 991px) {
  .ys-cta.ys-cta--dark-bold {
    padding: clamp(60px, 10vw, 100px) clamp(20px, 4vw, 32px);
  }
}

/* ──────────────────────────────────────────────────────────
   CTA 2/8 — gradient
   Use: vibrant, modern, energy
   Layout: gradient background, centered
   ────────────────────────────────────────────────────────── */
.ys-cta.ys-cta--gradient {
  background: var(--xx-gradient-primary, linear-gradient(135deg, var(--xx-primary), var(--xx-secondary)));
  color: #fff;
  padding: clamp(80px, 10vw, 140px) clamp(20px, 4vw, 48px);
  text-align: center;
  position: relative;
  overflow: hidden;
}
.ys-cta--gradient::before {
  content: '';
  position: absolute;
  inset: 0;
  background: radial-gradient(circle at 30% 30%, rgba(255,255,255,0.15) 0%, transparent 60%);
  pointer-events: none;
}
.ys-cta--gradient .ys-cta__inner {
  position: relative;
  max-width: 820px;
  margin: 0 auto;
}
.ys-cta--gradient .ys-cta__title {
  font-family: var(--xx-font-heading);
  font-size: clamp(34px, 4.5vw, 56px);
  line-height: 1.1;
  margin: 0 0 24px;
}
.ys-cta--gradient .ys-cta__lead {
  font-size: clamp(16px, 1.3vw, 19px);
  opacity: 0.95;
  margin: 0 0 40px;
  line-height: 1.65;
}
.ys-cta--gradient .ys-cta__cta {
  display: inline-block;
  padding: 18px 44px;
  background: #fff;
  color: var(--xx-primary);
  text-decoration: none;
  border-radius: var(--xx-radius);
  font-weight: 700;
  letter-spacing: 1px;
  transition: transform 0.3s var(--xx-ease);
}
.ys-cta--gradient .ys-cta__cta:hover {
  transform: translateY(-2px) scale(1.02);
}
@media (max-width: 991px) {
  .ys-cta.ys-cta--gradient {
    padding: clamp(60px, 10vw, 100px) clamp(20px, 4vw, 32px);
  }
}

/* ──────────────────────────────────────────────────────────
   CTA 3/8 — full-bleed-image-overlay
   Use: scenic, emotion, immersive
   Layout: hero-style banner CTA with image bg
   ────────────────────────────────────────────────────────── */
.ys-cta.ys-cta--full-bleed-image-overlay {
  position: relative;
  min-height: 60vh;
  display: flex;
  align-items: center;
  justify-content: center;
  text-align: center;
  color: #fff;
  overflow: hidden;
  padding: clamp(60px, 10vw, 120px) clamp(20px, 4vw, 48px);
}
.ys-cta--full-bleed-image-overlay .ys-cta__media {
  position: absolute;
  inset: 0;
  z-index: 0;
}
.ys-cta--full-bleed-image-overlay .ys-cta__media img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.ys-cta--full-bleed-image-overlay .ys-cta__media::after {
  content: '';
  position: absolute;
  inset: 0;
  background: linear-gradient(180deg, rgba(0,0,0,0.35) 0%, rgba(0,0,0,0.65) 100%);
}
.ys-cta--full-bleed-image-overlay .ys-cta__inner {
  position: relative;
  z-index: 1;
  max-width: 800px;
}
.ys-cta--full-bleed-image-overlay .ys-cta__title {
  font-family: var(--xx-font-heading);
  font-size: clamp(36px, 5.5vw, 68px);
  line-height: 1.1;
  margin: 0 0 24px;
  text-shadow: 0 2px 12px rgba(0,0,0,0.4);
}
.ys-cta--full-bleed-image-overlay .ys-cta__lead {
  font-size: clamp(16px, 1.4vw, 20px);
  margin: 0 0 36px;
  line-height: 1.65;
  opacity: 0.95;
}
.ys-cta--full-bleed-image-overlay .ys-cta__cta {
  display: inline-block;
  padding: 18px 42px;
  background: var(--xx-primary);
  color: #fff;
  text-decoration: none;
  border-radius: var(--xx-radius);
  font-weight: 700;
  letter-spacing: 1px;
  transition: background 0.3s var(--xx-ease);
}
.ys-cta--full-bleed-image-overlay .ys-cta__cta:hover {
  background: var(--xx-secondary);
}
@media (max-width: 991px) {
  .ys-cta.ys-cta--full-bleed-image-overlay {
    min-height: 50vh;
  }
}

/* ──────────────────────────────────────────────────────────
   CTA 4/8 — minimal-text
   Use: editorial, subtle, brand-led
   Layout: small section, just text and link
   ────────────────────────────────────────────────────────── */
.ys-cta.ys-cta--minimal-text {
  padding: clamp(60px, 8vw, 100px) clamp(20px, 4vw, 48px);
  text-align: center;
  background: var(--xx-bg);
  border-top: 1px solid rgba(0,0,0,0.06);
  border-bottom: 1px solid rgba(0,0,0,0.06);
}
.ys-cta--minimal-text .ys-cta__inner {
  max-width: 700px;
  margin: 0 auto;
}
.ys-cta--minimal-text .ys-cta__title {
  font-family: var(--xx-font-heading);
  font-size: clamp(24px, 2.6vw, 34px);
  margin: 0 0 16px;
  color: var(--xx-text);
  font-weight: 500;
}
.ys-cta--minimal-text .ys-cta__lead {
  font-size: 16px;
  color: var(--xx-text-soft);
  margin: 0 0 24px;
  line-height: 1.6;
}
.ys-cta--minimal-text .ys-cta__cta {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  color: var(--xx-primary);
  text-decoration: none;
  font-weight: 600;
  border-bottom: 1px solid var(--xx-primary);
  padding-bottom: 3px;
  transition: gap 0.3s var(--xx-ease);
}
.ys-cta--minimal-text .ys-cta__cta:hover {
  gap: 16px;
}
@media (max-width: 991px) {
  .ys-cta.ys-cta--minimal-text {
    padding: clamp(40px, 8vw, 80px) clamp(20px, 4vw, 32px);
  }
}

/* ──────────────────────────────────────────────────────────
   CTA 5/8 — side-image
   Use: balanced, visual + action
   Layout: image one side, big CTA other
   ────────────────────────────────────────────────────────── */
.ys-cta.ys-cta--side-image {
  display: grid;
  grid-template-columns: 1fr 1fr;
  align-items: stretch;
  background: var(--xx-cream);
  overflow: hidden;
}
.ys-cta--side-image .ys-cta__media {
  position: relative;
  min-height: 360px;
}
.ys-cta--side-image .ys-cta__media img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.ys-cta--side-image .ys-cta__inner {
  padding: clamp(40px, 6vw, 80px);
  display: flex;
  flex-direction: column;
  justify-content: center;
}
.ys-cta--side-image .ys-cta__title {
  font-family: var(--xx-font-heading);
  font-size: clamp(30px, 4vw, 48px);
  line-height: 1.15;
  margin: 0 0 20px;
  color: var(--xx-text);
}
.ys-cta--side-image .ys-cta__lead {
  font-size: clamp(15px, 1.2vw, 17px);
  color: var(--xx-text-soft);
  margin: 0 0 32px;
  line-height: 1.7;
}
.ys-cta--side-image .ys-cta__cta {
  display: inline-block;
  padding: 16px 36px;
  background: var(--xx-primary);
  color: #fff;
  text-decoration: none;
  border-radius: var(--xx-radius);
  font-weight: 600;
  width: fit-content;
  transition: background 0.3s var(--xx-ease);
}
.ys-cta--side-image .ys-cta__cta:hover {
  background: var(--xx-secondary);
}
@media (max-width: 991px) {
  .ys-cta.ys-cta--side-image {
    grid-template-columns: 1fr;
  }
  .ys-cta--side-image .ys-cta__media {
    min-height: 240px;
  }
}

/* ──────────────────────────────────────────────────────────
   CTA 6/8 — sticky-bottom-bar
   Use: persistent conversion, mobile-first
   Layout: sticky bar at bottom of viewport
   ────────────────────────────────────────────────────────── */
.ys-cta.ys-cta--sticky-bottom-bar {
  position: sticky;
  bottom: 0;
  z-index: 100;
  background: var(--xx-text);
  color: #fff;
  padding: 16px clamp(16px, 3vw, 32px);
  box-shadow: 0 -4px 16px rgba(0,0,0,0.12);
}
.ys-cta--sticky-bottom-bar .ys-cta__inner {
  max-width: 1300px;
  margin: 0 auto;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  flex-wrap: wrap;
}
.ys-cta--sticky-bottom-bar .ys-cta__title {
  font-family: var(--xx-font-heading);
  font-size: clamp(16px, 1.4vw, 20px);
  margin: 0;
  font-weight: 600;
}
.ys-cta--sticky-bottom-bar .ys-cta__lead {
  font-size: 13px;
  opacity: 0.8;
  margin: 0;
}
.ys-cta--sticky-bottom-bar .ys-cta__actions {
  display: flex;
  gap: 12px;
  margin-left: auto;
}
.ys-cta--sticky-bottom-bar .ys-cta__cta {
  display: inline-block;
  padding: 12px 28px;
  background: var(--xx-primary);
  color: #fff;
  text-decoration: none;
  border-radius: var(--xx-radius);
  font-weight: 600;
  font-size: 14px;
  transition: background 0.3s var(--xx-ease);
}
.ys-cta--sticky-bottom-bar .ys-cta__cta:hover {
  background: var(--xx-secondary);
}
@media (max-width: 768px) {
  .ys-cta--sticky-bottom-bar .ys-cta__inner {
    justify-content: center;
  }
  .ys-cta--sticky-bottom-bar .ys-cta__actions {
    margin-left: 0;
    width: 100%;
    justify-content: center;
  }
}

/* ──────────────────────────────────────────────────────────
   CTA 7/8 — countdown-timer
   Use: urgency, limited offer, promo
   Layout: big timer + CTA
   ────────────────────────────────────────────────────────── */
.ys-cta.ys-cta--countdown-timer {
  background: var(--xx-gradient-accent, linear-gradient(135deg, var(--xx-secondary), var(--xx-primary)));
  color: #fff;
  padding: clamp(60px, 8vw, 100px) clamp(20px, 4vw, 48px);
  text-align: center;
}
.ys-cta--countdown-timer .ys-cta__inner {
  max-width: 800px;
  margin: 0 auto;
}
.ys-cta--countdown-timer .ys-cta__title {
  font-family: var(--xx-font-heading);
  font-size: clamp(30px, 4vw, 48px);
  margin: 0 0 32px;
  line-height: 1.15;
}
.ys-cta--countdown-timer .ys-cta__timer {
  display: flex;
  justify-content: center;
  gap: clamp(12px, 2vw, 24px);
  margin-bottom: 36px;
}
.ys-cta--countdown-timer .ys-cta__timer-unit {
  background: rgba(255,255,255,0.15);
  backdrop-filter: blur(8px);
  border-radius: var(--xx-radius);
  padding: 16px 12px;
  min-width: 84px;
}
.ys-cta--countdown-timer .ys-cta__timer-value {
  font-family: var(--xx-font-heading);
  font-size: clamp(28px, 4vw, 44px);
  font-weight: 700;
  line-height: 1;
  display: block;
}
.ys-cta--countdown-timer .ys-cta__timer-label {
  font-size: 11px;
  letter-spacing: 2px;
  text-transform: uppercase;
  opacity: 0.85;
  margin-top: 4px;
}
.ys-cta--countdown-timer .ys-cta__cta {
  display: inline-block;
  padding: 16px 40px;
  background: #fff;
  color: var(--xx-primary);
  text-decoration: none;
  border-radius: var(--xx-radius);
  font-weight: 700;
  letter-spacing: 1px;
  transition: transform 0.3s var(--xx-ease);
}
.ys-cta--countdown-timer .ys-cta__cta:hover {
  transform: translateY(-2px);
}
@media (max-width: 991px) {
  .ys-cta--countdown-timer .ys-cta__timer-unit {
    min-width: 64px;
    padding: 12px 8px;
  }
}

/* ──────────────────────────────────────────────────────────
   CTA 8/8 — multi-button-row
   Use: multiple paths, choice, navigation
   Layout: text + row of multiple CTAs
   ────────────────────────────────────────────────────────── */
.ys-cta.ys-cta--multi-button-row {
  padding: clamp(60px, 8vw, 120px) clamp(20px, 4vw, 48px);
  background: var(--xx-cream);
  text-align: center;
}
.ys-cta--multi-button-row .ys-cta__inner {
  max-width: 900px;
  margin: 0 auto;
}
.ys-cta--multi-button-row .ys-cta__title {
  font-family: var(--xx-font-heading);
  font-size: clamp(30px, 4vw, 48px);
  margin: 0 0 16px;
  color: var(--xx-text);
  line-height: 1.15;
}
.ys-cta--multi-button-row .ys-cta__lead {
  font-size: clamp(15px, 1.2vw, 18px);
  color: var(--xx-text-soft);
  margin: 0 0 36px;
  line-height: 1.65;
}
.ys-cta--multi-button-row .ys-cta__actions {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 14px;
}
.ys-cta--multi-button-row .ys-cta__cta {
  display: inline-block;
  padding: 14px 30px;
  background: var(--xx-primary);
  color: #fff;
  text-decoration: none;
  border-radius: var(--xx-radius);
  font-weight: 600;
  transition: background 0.3s var(--xx-ease);
}
.ys-cta--multi-button-row .ys-cta__cta:hover {
  background: var(--xx-secondary);
}
.ys-cta--multi-button-row .ys-cta__cta-secondary {
  display: inline-block;
  padding: 14px 30px;
  background: transparent;
  color: var(--xx-primary);
  text-decoration: none;
  border: 2px solid var(--xx-primary);
  border-radius: var(--xx-radius);
  font-weight: 600;
  transition: all 0.3s var(--xx-ease);
}
.ys-cta--multi-button-row .ys-cta__cta-secondary:hover {
  background: var(--xx-primary);
  color: #fff;
}
@media (max-width: 991px) {
  .ys-cta--multi-button-row .ys-cta__actions {
    flex-direction: column;
    align-items: stretch;
  }
}

/* ╔════════════════════════════════════════════════════════════╗
   ║  FEATURES SECTIONS (6 variants)                             ║
   ╚════════════════════════════════════════════════════════════╝ */

/* ──────────────────────────────────────────────────────────
   FEATURES 1/6 — icon-grid-4col
   Use: amenities, services overview
   Layout: 4-column icon grid
   ────────────────────────────────────────────────────────── */
.ys-features.ys-features--icon-grid-4col {
  padding: clamp(60px, 8vw, 120px) clamp(20px, 4vw, 48px);
  max-width: 1400px;
  margin: 0 auto;
}
.ys-features--icon-grid-4col .ys-features__title {
  font-family: var(--xx-font-heading);
  font-size: clamp(30px, 4vw, 48px);
  text-align: center;
  margin: 0 0 60px;
  color: var(--xx-text);
}
.ys-features--icon-grid-4col .ys-features__grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: clamp(24px, 3vw, 40px);
}
.ys-features--icon-grid-4col .ys-features__item {
  text-align: center;
  padding: 24px 16px;
}
.ys-features--icon-grid-4col .ys-features__icon {
  width: 56px;
  height: 56px;
  margin: 0 auto 20px;
  color: var(--xx-primary);
  display: flex;
  align-items: center;
  justify-content: center;
}
.ys-features--icon-grid-4col .ys-features__icon svg {
  width: 100%;
  height: 100%;
}
.ys-features--icon-grid-4col .ys-features__item .ys-features__title {
  font-size: 18px;
  font-weight: 600;
  margin: 0 0 10px;
  color: var(--xx-text);
  text-align: center;
}
.ys-features--icon-grid-4col .ys-features__desc {
  font-size: 14px;
  color: var(--xx-text-soft);
  line-height: 1.6;
  margin: 0;
}
@media (max-width: 991px) {
  .ys-features--icon-grid-4col .ys-features__grid {
    grid-template-columns: repeat(2, 1fr);
  }
}
@media (max-width: 480px) {
  .ys-features--icon-grid-4col .ys-features__grid {
    grid-template-columns: 1fr;
  }
}

/* ──────────────────────────────────────────────────────────
   FEATURES 2/6 — text-list-numbered
   Use: process, methodology, steps
   Layout: large numbers + descriptions
   ────────────────────────────────────────────────────────── */
.ys-features.ys-features--text-list-numbered {
  padding: clamp(60px, 8vw, 120px) clamp(20px, 4vw, 48px);
  max-width: 1000px;
  margin: 0 auto;
}
.ys-features--text-list-numbered .ys-features__title {
  font-family: var(--xx-font-heading);
  font-size: clamp(30px, 4vw, 48px);
  margin: 0 0 60px;
  color: var(--xx-text);
}
.ys-features--text-list-numbered .ys-features__grid {
  display: flex;
  flex-direction: column;
  gap: 32px;
}
.ys-features--text-list-numbered .ys-features__item {
  display: grid;
  grid-template-columns: 120px 1fr;
  gap: 24px;
  align-items: start;
  padding-bottom: 32px;
  border-bottom: 1px solid rgba(0,0,0,0.08);
}
.ys-features--text-list-numbered .ys-features__item:last-child {
  border-bottom: none;
}
.ys-features--text-list-numbered .ys-features__icon {
  font-family: var(--xx-font-heading);
  font-size: clamp(48px, 6vw, 72px);
  color: var(--xx-primary);
  font-weight: 700;
  line-height: 0.9;
  opacity: 0.85;
}
.ys-features--text-list-numbered .ys-features__item .ys-features__title {
  font-size: 22px;
  margin: 0 0 12px;
  color: var(--xx-text);
  font-weight: 600;
}
.ys-features--text-list-numbered .ys-features__desc {
  font-size: 16px;
  color: var(--xx-text-soft);
  line-height: 1.75;
  margin: 0;
}
@media (max-width: 768px) {
  .ys-features--text-list-numbered .ys-features__item {
    grid-template-columns: 1fr;
    gap: 12px;
  }
}

/* ──────────────────────────────────────────────────────────
   FEATURES 3/6 — alternating-rows
   Use: detailed features, image+text per item
   Layout: alternating left/right rows
   ────────────────────────────────────────────────────────── */
.ys-features.ys-features--alternating-rows {
  padding: clamp(60px, 8vw, 120px) clamp(20px, 4vw, 48px);
  max-width: 1300px;
  margin: 0 auto;
}
.ys-features--alternating-rows .ys-features__grid {
  display: flex;
  flex-direction: column;
  gap: clamp(60px, 8vw, 100px);
}
.ys-features--alternating-rows .ys-features__item {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: clamp(32px, 5vw, 80px);
  align-items: center;
}
.ys-features--alternating-rows .ys-features__item:nth-child(even) .ys-features__icon {
  order: 2;
}
.ys-features--alternating-rows .ys-features__icon {
  aspect-ratio: 4/3;
  border-radius: var(--xx-radius-lg);
  overflow: hidden;
  box-shadow: var(--xx-shadow-md);
}
.ys-features--alternating-rows .ys-features__icon img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.ys-features--alternating-rows .ys-features__item .ys-features__title {
  font-family: var(--xx-font-heading);
  font-size: clamp(26px, 3vw, 40px);
  margin: 0 0 20px;
  color: var(--xx-text);
  line-height: 1.15;
}
.ys-features--alternating-rows .ys-features__desc {
  font-size: clamp(15px, 1.2vw, 17px);
  color: var(--xx-text-soft);
  line-height: 1.75;
  margin: 0;
}
@media (max-width: 991px) {
  .ys-features--alternating-rows .ys-features__item,
  .ys-features--alternating-rows .ys-features__item:nth-child(even) .ys-features__icon {
    grid-template-columns: 1fr;
    order: unset;
  }
}

/* ──────────────────────────────────────────────────────────
   FEATURES 4/6 — comparison-table
   Use: tiers, packages, plans
   Layout: side-by-side comparison columns
   ────────────────────────────────────────────────────────── */
.ys-features.ys-features--comparison-table {
  padding: clamp(60px, 8vw, 120px) clamp(20px, 4vw, 48px);
  max-width: 1200px;
  margin: 0 auto;
}
.ys-features--comparison-table .ys-features__title {
  font-family: var(--xx-font-heading);
  font-size: clamp(30px, 4vw, 48px);
  text-align: center;
  margin: 0 0 60px;
  color: var(--xx-text);
}
.ys-features--comparison-table .ys-features__grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 20px;
}
.ys-features--comparison-table .ys-features__item {
  background: var(--xx-bg);
  border: 1px solid rgba(0,0,0,0.08);
  border-radius: var(--xx-radius-lg);
  padding: clamp(28px, 3.5vw, 44px) clamp(24px, 3vw, 36px);
  transition: transform 0.3s var(--xx-ease), box-shadow 0.3s var(--xx-ease);
}
.ys-features--comparison-table .ys-features__item:hover {
  transform: translateY(-6px);
  box-shadow: var(--xx-shadow-md);
}
.ys-features--comparison-table .ys-features__item--featured {
  background: var(--xx-primary);
  color: #fff;
  border-color: var(--xx-primary);
  transform: scale(1.04);
}
.ys-features--comparison-table .ys-features__icon {
  font-size: 13px;
  letter-spacing: 2px;
  text-transform: uppercase;
  color: var(--xx-primary);
  margin-bottom: 12px;
}
.ys-features--comparison-table .ys-features__item--featured .ys-features__icon {
  color: #fff;
  opacity: 0.9;
}
.ys-features--comparison-table .ys-features__item .ys-features__title {
  font-family: var(--xx-font-heading);
  font-size: 32px;
  margin: 0 0 20px;
  text-align: left;
}
.ys-features--comparison-table .ys-features__desc {
  font-size: 14px;
  line-height: 1.8;
  margin: 0;
}
.ys-features--comparison-table .ys-features__desc ul {
  list-style: none;
  padding: 0;
  margin: 0;
}
.ys-features--comparison-table .ys-features__desc li {
  padding: 8px 0;
  border-bottom: 1px solid rgba(0,0,0,0.06);
}
.ys-features--comparison-table .ys-features__item--featured .ys-features__desc li {
  border-bottom-color: rgba(255,255,255,0.15);
}
@media (max-width: 991px) {
  .ys-features--comparison-table .ys-features__grid {
    grid-template-columns: 1fr;
  }
  .ys-features--comparison-table .ys-features__item--featured {
    transform: none;
  }
}

/* ──────────────────────────────────────────────────────────
   FEATURES 5/6 — cards-pop-hover
   Use: interactive, modern, services
   Layout: 3-col cards with strong hover effect
   ────────────────────────────────────────────────────────── */
.ys-features.ys-features--cards-pop-hover {
  padding: clamp(60px, 8vw, 120px) clamp(20px, 4vw, 48px);
  max-width: 1300px;
  margin: 0 auto;
  background: var(--xx-cream);
}
.ys-features--cards-pop-hover .ys-features__title {
  font-family: var(--xx-font-heading);
  font-size: clamp(30px, 4vw, 48px);
  text-align: center;
  margin: 0 0 56px;
  color: var(--xx-text);
}
.ys-features--cards-pop-hover .ys-features__grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: clamp(20px, 2.5vw, 32px);
}
.ys-features--cards-pop-hover .ys-features__item {
  background: var(--xx-bg);
  padding: clamp(28px, 3vw, 40px);
  border-radius: var(--xx-radius-lg);
  position: relative;
  overflow: hidden;
  transition: transform 0.35s var(--xx-ease), box-shadow 0.35s var(--xx-ease);
  cursor: pointer;
}
.ys-features--cards-pop-hover .ys-features__item::before {
  content: '';
  position: absolute;
  inset: 0;
  background: var(--xx-gradient-primary, linear-gradient(135deg, var(--xx-primary), var(--xx-secondary)));
  opacity: 0;
  transition: opacity 0.35s var(--xx-ease);
  z-index: 0;
}
.ys-features--cards-pop-hover .ys-features__item:hover {
  transform: translateY(-8px);
  box-shadow: var(--xx-shadow-lg);
}
.ys-features--cards-pop-hover .ys-features__item:hover::before {
  opacity: 1;
}
.ys-features--cards-pop-hover .ys-features__item > * {
  position: relative;
  z-index: 1;
  transition: color 0.35s var(--xx-ease);
}
.ys-features--cards-pop-hover .ys-features__item:hover * {
  color: #fff;
}
.ys-features--cards-pop-hover .ys-features__icon {
  width: 48px;
  height: 48px;
  color: var(--xx-primary);
  margin-bottom: 20px;
}
.ys-features--cards-pop-hover .ys-features__item .ys-features__title {
  font-size: 22px;
  margin: 0 0 12px;
  text-align: left;
}
.ys-features--cards-pop-hover .ys-features__desc {
  font-size: 15px;
  color: var(--xx-text-soft);
  line-height: 1.65;
  margin: 0;
}
@media (max-width: 991px) {
  .ys-features--cards-pop-hover .ys-features__grid {
    grid-template-columns: 1fr;
  }
}

/* ──────────────────────────────────────────────────────────
   FEATURES 6/6 — accordion-vertical
   Use: compact, expandable, faq-style
   Layout: vertical accordion list
   ────────────────────────────────────────────────────────── */
.ys-features.ys-features--accordion-vertical {
  padding: clamp(60px, 8vw, 120px) clamp(20px, 4vw, 48px);
  max-width: 900px;
  margin: 0 auto;
}
.ys-features--accordion-vertical .ys-features__title {
  font-family: var(--xx-font-heading);
  font-size: clamp(30px, 4vw, 48px);
  text-align: center;
  margin: 0 0 56px;
  color: var(--xx-text);
}
.ys-features--accordion-vertical .ys-features__grid {
  display: flex;
  flex-direction: column;
  gap: 12px;
}
.ys-features--accordion-vertical .ys-features__item {
  border: 1px solid rgba(0,0,0,0.1);
  border-radius: var(--xx-radius);
  overflow: hidden;
  transition: border-color 0.3s var(--xx-ease);
}
.ys-features--accordion-vertical .ys-features__item.is-open {
  border-color: var(--xx-primary);
}
.ys-features--accordion-vertical .ys-features__item .ys-features__title {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  font-family: var(--xx-font-body);
  font-size: 17px;
  font-weight: 600;
  margin: 0;
  padding: 20px 24px;
  color: var(--xx-text);
  cursor: pointer;
  text-align: left;
}
.ys-features--accordion-vertical .ys-features__icon {
  width: 24px;
  height: 24px;
  color: var(--xx-primary);
  flex-shrink: 0;
  transition: transform 0.3s var(--xx-ease);
}
.ys-features--accordion-vertical .ys-features__item.is-open .ys-features__icon {
  transform: rotate(45deg);
}
.ys-features--accordion-vertical .ys-features__desc {
  font-size: 15px;
  color: var(--xx-text-soft);
  line-height: 1.75;
  padding: 0 24px 20px;
  margin: 0;
  display: none;
}
.ys-features--accordion-vertical .ys-features__item.is-open .ys-features__desc {
  display: block;
}
@media (max-width: 991px) {
  .ys-features--accordion-vertical .ys-features__item .ys-features__title {
    font-size: 16px;
    padding: 18px 20px;
  }
}

/* ╔════════════════════════════════════════════════════════════╗
   ║  TESTIMONIALS SECTIONS (6 variants)                         ║
   ╚════════════════════════════════════════════════════════════╝ */

/* ──────────────────────────────────────────────────────────
   TESTIMONIALS 1/6 — slider-fullwidth
   Use: cinematic, single-focus
   Layout: full-width slider, one quote at a time
   ────────────────────────────────────────────────────────── */
.ys-testimonials.ys-testimonials--slider-fullwidth {
  padding: clamp(80px, 10vw, 140px) clamp(20px, 4vw, 48px);
  background: var(--xx-cream);
  text-align: center;
  position: relative;
  overflow: hidden;
}
.ys-testimonials--slider-fullwidth .ys-testimonials__slider {
  max-width: 900px;
  margin: 0 auto;
  position: relative;
}
.ys-testimonials--slider-fullwidth .ys-testimonials__item {
  padding: 32px 16px;
}
.ys-testimonials--slider-fullwidth .ys-testimonials__photo {
  width: 84px;
  height: 84px;
  border-radius: 50%;
  margin: 0 auto 24px;
  overflow: hidden;
  box-shadow: var(--xx-shadow-md);
}
.ys-testimonials--slider-fullwidth .ys-testimonials__photo img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.ys-testimonials--slider-fullwidth .ys-testimonials__quote {
  font-family: var(--xx-font-heading);
  font-size: clamp(20px, 2.4vw, 32px);
  font-style: italic;
  line-height: 1.45;
  margin: 0 0 32px;
  color: var(--xx-text);
  font-weight: 400;
}
.ys-testimonials--slider-fullwidth .ys-testimonials__quote::before {
  content: '\201C';
  color: var(--xx-primary);
  font-size: 1.4em;
  line-height: 0;
  vertical-align: -0.2em;
  margin-right: 6px;
}
.ys-testimonials--slider-fullwidth .ys-testimonials__author {
  font-size: 17px;
  font-weight: 600;
  color: var(--xx-text);
  margin: 0 0 4px;
}
.ys-testimonials--slider-fullwidth .ys-testimonials__role {
  font-size: 13px;
  letter-spacing: 2px;
  text-transform: uppercase;
  color: var(--xx-primary);
}
.ys-testimonials--slider-fullwidth .slick-dots {
  display: flex;
  gap: 8px;
  justify-content: center;
  list-style: none;
  padding: 32px 0 0;
  margin: 0;
}
.ys-testimonials--slider-fullwidth .slick-dots li button {
  width: 10px;
  height: 10px;
  border-radius: 50%;
  border: 0;
  background: rgba(0,0,0,0.2);
  font-size: 0;
  cursor: pointer;
  transition: background 0.3s var(--xx-ease);
}
.ys-testimonials--slider-fullwidth .slick-dots li.slick-active button {
  background: var(--xx-primary);
}
@media (max-width: 991px) {
  .ys-testimonials.ys-testimonials--slider-fullwidth {
    padding: clamp(60px, 10vw, 100px) clamp(20px, 4vw, 32px);
  }
}

/* ──────────────────────────────────────────────────────────
   TESTIMONIALS 2/6 — grid-3col
   Use: many reviews, social proof
   Layout: 3-column card grid
   ────────────────────────────────────────────────────────── */
.ys-testimonials.ys-testimonials--grid-3col {
  padding: clamp(60px, 8vw, 120px) clamp(20px, 4vw, 48px);
  max-width: 1300px;
  margin: 0 auto;
}
.ys-testimonials--grid-3col .ys-testimonials__slider {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: clamp(16px, 2vw, 28px);
}
.ys-testimonials--grid-3col .ys-testimonials__item {
  background: var(--xx-bg);
  padding: clamp(24px, 3vw, 36px);
  border-radius: var(--xx-radius-lg);
  border: 1px solid rgba(0,0,0,0.06);
  transition: transform 0.3s var(--xx-ease), box-shadow 0.3s var(--xx-ease);
}
.ys-testimonials--grid-3col .ys-testimonials__item:hover {
  transform: translateY(-4px);
  box-shadow: var(--xx-shadow-md);
}
.ys-testimonials--grid-3col .ys-testimonials__quote {
  font-size: 15px;
  line-height: 1.7;
  color: var(--xx-text);
  margin: 0 0 24px;
  font-style: italic;
}
.ys-testimonials--grid-3col .ys-testimonials__quote::before {
  content: '\201C';
  font-family: var(--xx-font-heading);
  font-size: 40px;
  line-height: 0;
  color: var(--xx-primary);
  vertical-align: -0.3em;
  margin-right: 4px;
}
.ys-testimonials--grid-3col .ys-testimonials__author {
  display: flex;
  align-items: center;
  gap: 12px;
}
.ys-testimonials--grid-3col .ys-testimonials__photo {
  width: 44px;
  height: 44px;
  border-radius: 50%;
  overflow: hidden;
  flex-shrink: 0;
}
.ys-testimonials--grid-3col .ys-testimonials__photo img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.ys-testimonials--grid-3col .ys-testimonials__role {
  font-size: 12px;
  color: var(--xx-text-muted);
  letter-spacing: 1px;
}
@media (max-width: 991px) {
  .ys-testimonials--grid-3col .ys-testimonials__slider {
    grid-template-columns: 1fr;
  }
}

/* ──────────────────────────────────────────────────────────
   TESTIMONIALS 3/6 — single-quote-big
   Use: editorial, brand voice, one signature review
   Layout: single huge quote, no slider
   ────────────────────────────────────────────────────────── */
.ys-testimonials.ys-testimonials--single-quote-big {
  padding: clamp(80px, 12vw, 160px) clamp(20px, 6vw, 80px);
  background: var(--xx-text);
  color: #fff;
  text-align: center;
}
.ys-testimonials--single-quote-big .ys-testimonials__item {
  max-width: 1000px;
  margin: 0 auto;
}
.ys-testimonials--single-quote-big .ys-testimonials__quote {
  font-family: var(--xx-font-heading);
  font-size: clamp(28px, 4vw, 52px);
  line-height: 1.3;
  margin: 0 0 40px;
  font-style: italic;
  font-weight: 300;
}
.ys-testimonials--single-quote-big .ys-testimonials__quote::before {
  content: '\201C';
  display: block;
  font-size: clamp(100px, 14vw, 180px);
  line-height: 0.5;
  color: var(--xx-primary);
  margin-bottom: 24px;
}
.ys-testimonials--single-quote-big .ys-testimonials__author {
  font-family: var(--xx-font-heading);
  font-size: 22px;
  margin: 0 0 6px;
}
.ys-testimonials--single-quote-big .ys-testimonials__role {
  font-size: 13px;
  letter-spacing: 3px;
  text-transform: uppercase;
  opacity: 0.7;
}
@media (max-width: 991px) {
  .ys-testimonials.ys-testimonials--single-quote-big {
    padding: clamp(60px, 12vw, 100px) clamp(20px, 4vw, 32px);
  }
}

/* ──────────────────────────────────────────────────────────
   TESTIMONIALS 4/6 — video-grid
   Use: rich media, video reviews
   Layout: 3-column grid of video cards
   ────────────────────────────────────────────────────────── */
.ys-testimonials.ys-testimonials--video-grid {
  padding: clamp(60px, 8vw, 120px) clamp(20px, 4vw, 48px);
  max-width: 1300px;
  margin: 0 auto;
}
.ys-testimonials--video-grid .ys-testimonials__slider {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 24px;
}
.ys-testimonials--video-grid .ys-testimonials__item {
  position: relative;
  border-radius: var(--xx-radius-lg);
  overflow: hidden;
  background: var(--xx-text);
  cursor: pointer;
  transition: transform 0.3s var(--xx-ease);
}
.ys-testimonials--video-grid .ys-testimonials__item:hover {
  transform: translateY(-4px);
}
.ys-testimonials--video-grid .ys-testimonials__photo {
  position: relative;
  aspect-ratio: 9/16;
  overflow: hidden;
}
.ys-testimonials--video-grid .ys-testimonials__photo img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.ys-testimonials--video-grid .ys-testimonials__photo::after {
  content: '';
  position: absolute;
  inset: 0;
  background: linear-gradient(0deg, rgba(0,0,0,0.7), transparent 50%);
}
.ys-testimonials--video-grid .ys-testimonials__photo::before {
  content: '';
  position: absolute;
  top: 50%;
  left: 50%;
  width: 64px;
  height: 64px;
  background: rgba(255,255,255,0.95);
  border-radius: 50%;
  transform: translate(-50%, -50%);
  z-index: 1;
}
.ys-testimonials--video-grid .ys-testimonials__quote {
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  padding: 20px;
  color: #fff;
  font-size: 14px;
  line-height: 1.5;
  z-index: 2;
}
.ys-testimonials--video-grid .ys-testimonials__author {
  font-weight: 600;
  font-size: 15px;
  margin: 0 0 2px;
}
.ys-testimonials--video-grid .ys-testimonials__role {
  font-size: 11px;
  opacity: 0.85;
  letter-spacing: 1px;
}
@media (max-width: 991px) {
  .ys-testimonials--video-grid .ys-testimonials__slider {
    grid-template-columns: 1fr;
  }
}

/* ──────────────────────────────────────────────────────────
   TESTIMONIALS 5/6 — masonry-mixed
   Use: varied quote lengths, organic
   Layout: masonry columns
   ────────────────────────────────────────────────────────── */
.ys-testimonials.ys-testimonials--masonry-mixed {
  padding: clamp(60px, 8vw, 120px) clamp(20px, 4vw, 48px);
  max-width: 1300px;
  margin: 0 auto;
  background: var(--xx-cream);
}
.ys-testimonials--masonry-mixed .ys-testimonials__slider {
  column-count: 3;
  column-gap: 20px;
}
.ys-testimonials--masonry-mixed .ys-testimonials__item {
  break-inside: avoid;
  margin-bottom: 20px;
  background: var(--xx-bg);
  border-radius: var(--xx-radius);
  padding: 24px;
  box-shadow: var(--xx-shadow-sm);
}
.ys-testimonials--masonry-mixed .ys-testimonials__quote {
  font-size: 15px;
  line-height: 1.65;
  margin: 0 0 18px;
  color: var(--xx-text);
}
.ys-testimonials--masonry-mixed .ys-testimonials__author {
  font-weight: 600;
  font-size: 14px;
  color: var(--xx-text);
}
.ys-testimonials--masonry-mixed .ys-testimonials__role {
  font-size: 12px;
  color: var(--xx-text-muted);
}
@media (max-width: 991px) {
  .ys-testimonials--masonry-mixed .ys-testimonials__slider {
    column-count: 2;
  }
}
@media (max-width: 600px) {
  .ys-testimonials--masonry-mixed .ys-testimonials__slider {
    column-count: 1;
  }
}

/* ──────────────────────────────────────────────────────────
   TESTIMONIALS 6/6 — carousel-photos
   Use: photo-rich, lifestyle, real customers
   Layout: carousel with photo + short quote
   ────────────────────────────────────────────────────────── */
.ys-testimonials.ys-testimonials--carousel-photos {
  padding: clamp(60px, 8vw, 120px) 0;
  overflow: hidden;
}
.ys-testimonials--carousel-photos .ys-testimonials__slider {
  padding: 0 clamp(20px, 4vw, 48px);
  display: flex;
  gap: 24px;
}
.ys-testimonials--carousel-photos .ys-testimonials__item {
  flex: 0 0 calc((100% / 3) - 16px);
  background: var(--xx-bg);
  border-radius: var(--xx-radius-lg);
  overflow: hidden;
  box-shadow: var(--xx-shadow-sm);
}
.ys-testimonials--carousel-photos .ys-testimonials__photo {
  aspect-ratio: 4/3;
  overflow: hidden;
}
.ys-testimonials--carousel-photos .ys-testimonials__photo img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.ys-testimonials--carousel-photos .ys-testimonials__quote {
  padding: 20px 24px 8px;
  font-size: 15px;
  line-height: 1.6;
  color: var(--xx-text);
  margin: 0;
}
.ys-testimonials--carousel-photos .ys-testimonials__author {
  padding: 0 24px 20px;
  font-weight: 600;
  font-size: 14px;
}
.ys-testimonials--carousel-photos .ys-testimonials__role {
  font-size: 12px;
  color: var(--xx-text-muted);
  letter-spacing: 1px;
  margin-left: 6px;
}
@media (max-width: 991px) {
  .ys-testimonials--carousel-photos .ys-testimonials__item {
    flex: 0 0 calc((100% / 2) - 12px);
  }
}
@media (max-width: 600px) {
  .ys-testimonials--carousel-photos .ys-testimonials__item {
    flex: 0 0 85%;
  }
}

/* ╔════════════════════════════════════════════════════════════╗
   ║  LOCATION / MAP SECTIONS (5 variants)                       ║
   ╚════════════════════════════════════════════════════════════╝ */

/* ──────────────────────────────────────────────────────────
   LOCATION 1/5 — full-bleed-map
   Use: dramatic, full focus on location
   Layout: full-width map with floating info card
   ────────────────────────────────────────────────────────── */
.ys-location.ys-location--full-bleed-map {
  position: relative;
  min-height: 600px;
  background: var(--xx-cream);
}
.ys-location--full-bleed-map .ys-location__map {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
}
.ys-location--full-bleed-map .ys-location__map iframe,
.ys-location--full-bleed-map .ys-location__map img,
.ys-location--full-bleed-map .ys-location__map > div {
  width: 100%;
  height: 100%;
  border: 0;
}
.ys-location--full-bleed-map .ys-location__info {
  position: absolute;
  top: 50%;
  left: clamp(20px, 5vw, 80px);
  transform: translateY(-50%);
  z-index: 2;
  max-width: 380px;
  background: var(--xx-bg);
  padding: clamp(28px, 3.5vw, 44px);
  border-radius: var(--xx-radius-lg);
  box-shadow: var(--xx-shadow-lg);
}
.ys-location--full-bleed-map .ys-location__info h3 {
  font-family: var(--xx-font-heading);
  font-size: clamp(22px, 2.4vw, 30px);
  margin: 0 0 16px;
  color: var(--xx-text);
}
.ys-location--full-bleed-map .ys-location__address {
  font-size: 15px;
  line-height: 1.65;
  color: var(--xx-text-soft);
  margin: 0 0 20px;
  font-style: normal;
}
.ys-location--full-bleed-map .ys-location__directions {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 12px 24px;
  background: var(--xx-primary);
  color: #fff;
  text-decoration: none;
  border-radius: var(--xx-radius);
  font-size: 14px;
  font-weight: 600;
  transition: background 0.3s var(--xx-ease);
}
.ys-location--full-bleed-map .ys-location__directions:hover {
  background: var(--xx-secondary);
}
@media (max-width: 768px) {
  .ys-location.ys-location--full-bleed-map {
    min-height: 500px;
  }
  .ys-location--full-bleed-map .ys-location__info {
    top: auto;
    bottom: 20px;
    left: 20px;
    right: 20px;
    max-width: none;
    transform: none;
  }
}

/* ──────────────────────────────────────────────────────────
   LOCATION 2/5 — split-text-map
   Use: balanced, info-rich
   Layout: 50/50 text + map
   ────────────────────────────────────────────────────────── */
.ys-location.ys-location--split-text-map {
  display: grid;
  grid-template-columns: 1fr 1fr;
  min-height: 480px;
  background: var(--xx-bg);
}
.ys-location--split-text-map .ys-location__info {
  padding: clamp(40px, 5vw, 72px);
  display: flex;
  flex-direction: column;
  justify-content: center;
}
.ys-location--split-text-map .ys-location__info h3 {
  font-family: var(--xx-font-heading);
  font-size: clamp(28px, 3.5vw, 42px);
  margin: 0 0 24px;
  color: var(--xx-text);
  line-height: 1.15;
}
.ys-location--split-text-map .ys-location__address {
  font-size: 16px;
  line-height: 1.75;
  color: var(--xx-text-soft);
  margin: 0 0 28px;
  font-style: normal;
}
.ys-location--split-text-map .ys-location__directions {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  padding: 14px 28px;
  background: var(--xx-primary);
  color: #fff;
  text-decoration: none;
  border-radius: var(--xx-radius);
  font-weight: 600;
  width: fit-content;
  transition: background 0.3s var(--xx-ease);
}
.ys-location--split-text-map .ys-location__directions:hover {
  background: var(--xx-secondary);
}
.ys-location--split-text-map .ys-location__map {
  position: relative;
  min-height: 360px;
}
.ys-location--split-text-map .ys-location__map iframe,
.ys-location--split-text-map .ys-location__map > div {
  width: 100%;
  height: 100%;
  border: 0;
}
@media (max-width: 991px) {
  .ys-location.ys-location--split-text-map {
    grid-template-columns: 1fr;
  }
}

/* ──────────────────────────────────────────────────────────
   LOCATION 3/5 — info-cards-map
   Use: multi-property, hotel details
   Layout: map + row of info cards below
   ────────────────────────────────────────────────────────── */
.ys-location.ys-location--info-cards-map {
  padding: clamp(60px, 8vw, 120px) clamp(20px, 4vw, 48px);
  max-width: 1400px;
  margin: 0 auto;
}
.ys-location--info-cards-map .ys-location__map {
  height: 420px;
  margin-bottom: 40px;
  border-radius: var(--xx-radius-lg);
  overflow: hidden;
  box-shadow: var(--xx-shadow-md);
}
.ys-location--info-cards-map .ys-location__map iframe,
.ys-location--info-cards-map .ys-location__map > div {
  width: 100%;
  height: 100%;
  border: 0;
}
.ys-location--info-cards-map .ys-location__info {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 20px;
}
.ys-location--info-cards-map .ys-location__card {
  background: var(--xx-cream);
  padding: 28px;
  border-radius: var(--xx-radius);
  transition: transform 0.3s var(--xx-ease);
}
.ys-location--info-cards-map .ys-location__card:hover {
  transform: translateY(-4px);
  box-shadow: var(--xx-shadow-sm);
}
.ys-location--info-cards-map .ys-location__card h4 {
  font-family: var(--xx-font-heading);
  font-size: 19px;
  margin: 0 0 10px;
  color: var(--xx-text);
}
.ys-location--info-cards-map .ys-location__address {
  font-size: 14px;
  line-height: 1.65;
  color: var(--xx-text-soft);
  margin: 0;
  font-style: normal;
}
.ys-location--info-cards-map .ys-location__directions {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  margin-top: 14px;
  color: var(--xx-primary);
  font-size: 13px;
  font-weight: 600;
  text-decoration: none;
  letter-spacing: 0.5px;
}
@media (max-width: 991px) {
  .ys-location--info-cards-map .ys-location__info {
    grid-template-columns: 1fr;
  }
  .ys-location--info-cards-map .ys-location__map {
    height: 320px;
  }
}

/* ──────────────────────────────────────────────────────────
   LOCATION 4/5 — dual-location-tabs
   Use: multi-site, switchable
   Layout: tab buttons + switchable map panel
   ────────────────────────────────────────────────────────── */
.ys-location.ys-location--dual-location-tabs {
  padding: clamp(60px, 8vw, 120px) clamp(20px, 4vw, 48px);
  max-width: 1300px;
  margin: 0 auto;
}
.ys-location--dual-location-tabs .ys-location__tabs {
  display: flex;
  gap: 4px;
  margin-bottom: 24px;
  border-bottom: 1px solid rgba(0,0,0,0.1);
  flex-wrap: wrap;
}
.ys-location--dual-location-tabs .ys-location__tab {
  padding: 14px 24px;
  background: transparent;
  border: 0;
  border-bottom: 3px solid transparent;
  color: var(--xx-text-soft);
  font-size: 15px;
  font-weight: 600;
  cursor: pointer;
  transition: all 0.3s var(--xx-ease);
  margin-bottom: -1px;
}
.ys-location--dual-location-tabs .ys-location__tab.is-active {
  color: var(--xx-primary);
  border-bottom-color: var(--xx-primary);
}
.ys-location--dual-location-tabs .ys-location__panel {
  display: none;
  grid-template-columns: 1fr 1fr;
  gap: 32px;
  align-items: center;
}
.ys-location--dual-location-tabs .ys-location__panel.is-active {
  display: grid;
}
.ys-location--dual-location-tabs .ys-location__map {
  height: 380px;
  border-radius: var(--xx-radius-lg);
  overflow: hidden;
}
.ys-location--dual-location-tabs .ys-location__map iframe,
.ys-location--dual-location-tabs .ys-location__map > div {
  width: 100%;
  height: 100%;
  border: 0;
}
.ys-location--dual-location-tabs .ys-location__info h3 {
  font-family: var(--xx-font-heading);
  font-size: clamp(24px, 2.6vw, 32px);
  margin: 0 0 16px;
  color: var(--xx-text);
}
.ys-location--dual-location-tabs .ys-location__address {
  font-size: 15px;
  line-height: 1.7;
  color: var(--xx-text-soft);
  margin: 0 0 24px;
  font-style: normal;
}
.ys-location--dual-location-tabs .ys-location__directions {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 12px 24px;
  background: var(--xx-primary);
  color: #fff;
  text-decoration: none;
  border-radius: var(--xx-radius);
  font-weight: 600;
  font-size: 14px;
  transition: background 0.3s var(--xx-ease);
}
.ys-location--dual-location-tabs .ys-location__directions:hover {
  background: var(--xx-secondary);
}
@media (max-width: 991px) {
  .ys-location--dual-location-tabs .ys-location__panel.is-active {
    grid-template-columns: 1fr;
  }
  .ys-location--dual-location-tabs .ys-location__map {
    height: 280px;
  }
}

/* ──────────────────────────────────────────────────────────
   LOCATION 5/5 — interactive-points
   Use: many points-of-interest, map with hotspots
   Layout: map + list of nearby attractions
   ────────────────────────────────────────────────────────── */
.ys-location.ys-location--interactive-points {
  display: grid;
  grid-template-columns: 1fr 380px;
  gap: 0;
  min-height: 600px;
  background: var(--xx-bg);
}
.ys-location--interactive-points .ys-location__map {
  position: relative;
  min-height: 480px;
}
.ys-location--interactive-points .ys-location__map iframe,
.ys-location--interactive-points .ys-location__map > div {
  width: 100%;
  height: 100%;
  border: 0;
}
.ys-location--interactive-points .ys-location__info {
  padding: clamp(28px, 3vw, 40px);
  background: var(--xx-cream);
  overflow-y: auto;
  max-height: 600px;
}
.ys-location--interactive-points .ys-location__info h3 {
  font-family: var(--xx-font-heading);
  font-size: 24px;
  margin: 0 0 24px;
  color: var(--xx-text);
}
.ys-location--interactive-points .ys-location__list {
  list-style: none;
  padding: 0;
  margin: 0;
  display: flex;
  flex-direction: column;
  gap: 14px;
}
.ys-location--interactive-points .ys-location__point {
  display: grid;
  grid-template-columns: 32px 1fr auto;
  gap: 12px;
  align-items: center;
  padding: 12px;
  background: var(--xx-bg);
  border-radius: var(--xx-radius);
  cursor: pointer;
  transition: background 0.3s var(--xx-ease);
}
.ys-location--interactive-points .ys-location__point:hover {
  background: var(--xx-primary);
  color: #fff;
}
.ys-location--interactive-points .ys-location__point-num {
  width: 28px;
  height: 28px;
  border-radius: 50%;
  background: var(--xx-primary);
  color: #fff;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 13px;
  font-weight: 700;
}
.ys-location--interactive-points .ys-location__point:hover .ys-location__point-num {
  background: #fff;
  color: var(--xx-primary);
}
.ys-location--interactive-points .ys-location__point-name {
  font-size: 14px;
  font-weight: 500;
}
.ys-location--interactive-points .ys-location__point-dist {
  font-size: 12px;
  opacity: 0.7;
}
@media (max-width: 991px) {
  .ys-location.ys-location--interactive-points {
    grid-template-columns: 1fr;
  }
  .ys-location--interactive-points .ys-location__info {
    max-height: none;
  }
}

/* ╔════════════════════════════════════════════════════════════╗
   ║  FAQ SECTIONS (4 variants)                                  ║
   ╚════════════════════════════════════════════════════════════╝ */

/* ──────────────────────────────────────────────────────────
   FAQ 1/4 — accordion-classic
   Use: standard FAQ, common pattern
   Layout: vertical accordion
   ────────────────────────────────────────────────────────── */
.ys-faq.ys-faq--accordion-classic {
  padding: clamp(60px, 8vw, 120px) clamp(20px, 4vw, 48px);
  max-width: 900px;
  margin: 0 auto;
}
.ys-faq--accordion-classic .ys-faq__title {
  font-family: var(--xx-font-heading);
  font-size: clamp(30px, 4vw, 48px);
  text-align: center;
  margin: 0 0 56px;
  color: var(--xx-text);
}
.ys-faq--accordion-classic .ys-faq__list {
  display: flex;
  flex-direction: column;
  gap: 12px;
}
.ys-faq--accordion-classic .ys-faq__item {
  border: 1px solid rgba(0,0,0,0.1);
  border-radius: var(--xx-radius);
  overflow: hidden;
  transition: border-color 0.3s var(--xx-ease);
}
.ys-faq--accordion-classic .ys-faq__item.is-open {
  border-color: var(--xx-primary);
}
.ys-faq--accordion-classic .ys-faq__question {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  padding: 20px 24px;
  font-size: 16px;
  font-weight: 600;
  color: var(--xx-text);
  cursor: pointer;
  user-select: none;
  background: transparent;
  border: 0;
  width: 100%;
  text-align: left;
}
.ys-faq--accordion-classic .ys-faq__toggle {
  width: 24px;
  height: 24px;
  color: var(--xx-primary);
  flex-shrink: 0;
  transition: transform 0.3s var(--xx-ease);
}
.ys-faq--accordion-classic .ys-faq__item.is-open .ys-faq__toggle {
  transform: rotate(45deg);
}
.ys-faq--accordion-classic .ys-faq__answer {
  padding: 0 24px 20px;
  font-size: 15px;
  line-height: 1.75;
  color: var(--xx-text-soft);
  display: none;
}
.ys-faq--accordion-classic .ys-faq__item.is-open .ys-faq__answer {
  display: block;
}

/* ──────────────────────────────────────────────────────────
   FAQ 2/4 — two-column-grid
   Use: many questions, scan-friendly
   Layout: 2-column static grid
   ────────────────────────────────────────────────────────── */
.ys-faq.ys-faq--two-column-grid {
  padding: clamp(60px, 8vw, 120px) clamp(20px, 4vw, 48px);
  max-width: 1300px;
  margin: 0 auto;
}
.ys-faq--two-column-grid .ys-faq__title {
  font-family: var(--xx-font-heading);
  font-size: clamp(30px, 4vw, 48px);
  text-align: center;
  margin: 0 0 56px;
  color: var(--xx-text);
}
.ys-faq--two-column-grid .ys-faq__list {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: clamp(28px, 3vw, 48px);
}
.ys-faq--two-column-grid .ys-faq__item {
  border-left: 3px solid var(--xx-primary);
  padding-left: 20px;
}
.ys-faq--two-column-grid .ys-faq__question {
  font-family: var(--xx-font-heading);
  font-size: 19px;
  font-weight: 600;
  margin: 0 0 12px;
  color: var(--xx-text);
}
.ys-faq--two-column-grid .ys-faq__answer {
  font-size: 15px;
  line-height: 1.75;
  color: var(--xx-text-soft);
  margin: 0;
}
@media (max-width: 768px) {
  .ys-faq--two-column-grid .ys-faq__list {
    grid-template-columns: 1fr;
  }
}

/* ──────────────────────────────────────────────────────────
   FAQ 3/4 — sidebar-search
   Use: large FAQ, knowledge base
   Layout: sidebar with category + search + list
   ────────────────────────────────────────────────────────── */
.ys-faq.ys-faq--sidebar-search {
  display: grid;
  grid-template-columns: 260px 1fr;
  gap: 48px;
  padding: clamp(60px, 8vw, 120px) clamp(20px, 4vw, 48px);
  max-width: 1300px;
  margin: 0 auto;
}
.ys-faq--sidebar-search aside {
  position: sticky;
  top: 100px;
  align-self: start;
}
.ys-faq--sidebar-search .ys-faq__search {
  display: block;
  width: 100%;
  padding: 12px 16px;
  margin-bottom: 24px;
  border: 1px solid rgba(0,0,0,0.15);
  border-radius: var(--xx-radius);
  font-size: 14px;
  background: var(--xx-bg);
}
.ys-faq--sidebar-search .ys-faq__categories {
  list-style: none;
  padding: 0;
  margin: 0;
}
.ys-faq--sidebar-search .ys-faq__categories li {
  padding: 10px 14px;
  border-radius: var(--xx-radius);
  font-size: 14px;
  font-weight: 500;
  color: var(--xx-text-soft);
  cursor: pointer;
  transition: background 0.3s var(--xx-ease), color 0.3s var(--xx-ease);
}
.ys-faq--sidebar-search .ys-faq__categories li:hover,
.ys-faq--sidebar-search .ys-faq__categories li.is-active {
  background: var(--xx-primary);
  color: #fff;
}
.ys-faq--sidebar-search .ys-faq__list {
  display: flex;
  flex-direction: column;
  gap: 16px;
}
.ys-faq--sidebar-search .ys-faq__item {
  background: var(--xx-cream);
  border-radius: var(--xx-radius);
  padding: 20px 24px;
}
.ys-faq--sidebar-search .ys-faq__question {
  font-size: 17px;
  font-weight: 600;
  margin: 0 0 10px;
  color: var(--xx-text);
}
.ys-faq--sidebar-search .ys-faq__answer {
  font-size: 14px;
  line-height: 1.7;
  color: var(--xx-text-soft);
  margin: 0;
}
@media (max-width: 991px) {
  .ys-faq.ys-faq--sidebar-search {
    grid-template-columns: 1fr;
  }
  .ys-faq--sidebar-search aside {
    position: static;
  }
}

/* ──────────────────────────────────────────────────────────
   FAQ 4/4 — tabs-categorized
   Use: grouped by topic
   Layout: tab bar + filtered list
   ────────────────────────────────────────────────────────── */
.ys-faq.ys-faq--tabs-categorized {
  padding: clamp(60px, 8vw, 120px) clamp(20px, 4vw, 48px);
  max-width: 1000px;
  margin: 0 auto;
}
.ys-faq--tabs-categorized .ys-faq__title {
  font-family: var(--xx-font-heading);
  font-size: clamp(30px, 4vw, 48px);
  text-align: center;
  margin: 0 0 40px;
  color: var(--xx-text);
}
.ys-faq--tabs-categorized .ys-faq__tabs {
  display: flex;
  justify-content: center;
  flex-wrap: wrap;
  gap: 8px;
  margin-bottom: 40px;
}
.ys-faq--tabs-categorized .ys-faq__tab {
  padding: 10px 20px;
  border: 1px solid rgba(0,0,0,0.15);
  background: transparent;
  border-radius: 999px;
  color: var(--xx-text-soft);
  font-size: 14px;
  font-weight: 500;
  cursor: pointer;
  transition: all 0.3s var(--xx-ease);
}
.ys-faq--tabs-categorized .ys-faq__tab.is-active {
  background: var(--xx-primary);
  border-color: var(--xx-primary);
  color: #fff;
}
.ys-faq--tabs-categorized .ys-faq__list {
  display: flex;
  flex-direction: column;
  gap: 10px;
}
.ys-faq--tabs-categorized .ys-faq__item {
  background: var(--xx-cream);
  border-radius: var(--xx-radius);
  padding: 18px 22px;
}
.ys-faq--tabs-categorized .ys-faq__item.is-hidden {
  display: none;
}
.ys-faq--tabs-categorized .ys-faq__question {
  font-size: 16px;
  font-weight: 600;
  margin: 0 0 8px;
  color: var(--xx-text);
}
.ys-faq--tabs-categorized .ys-faq__answer {
  font-size: 14px;
  line-height: 1.7;
  color: var(--xx-text-soft);
  margin: 0;
}

/* ╔════════════════════════════════════════════════════════════╗
   ║  NAVIGATION SECTIONS (8 variants)                           ║
   ╚════════════════════════════════════════════════════════════╝ */

/* ──────────────────────────────────────────────────────────
   NAVIGATION 1/8 — transparent-overlay
   Use: hero-overlap, immersive
   Layout: fixed transparent, becomes solid on scroll
   ────────────────────────────────────────────────────────── */
.ys-nav.ys-nav--transparent-overlay {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  z-index: 1000;
  padding: 20px clamp(20px, 4vw, 48px);
  background: transparent;
  transition: background 0.3s var(--xx-ease), padding 0.3s var(--xx-ease);
}
.ys-nav--transparent-overlay.is-scrolled {
  background: rgba(255,255,255,0.95);
  backdrop-filter: blur(10px);
  padding: 14px clamp(20px, 4vw, 48px);
  box-shadow: 0 2px 12px rgba(0,0,0,0.06);
}
.ys-nav--transparent-overlay .ys-nav__inner {
  max-width: 1400px;
  margin: 0 auto;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 32px;
}
.ys-nav--transparent-overlay .ys-nav__brand {
  font-family: var(--xx-font-heading);
  font-size: 22px;
  color: #fff;
  text-decoration: none;
  font-weight: 700;
  transition: color 0.3s var(--xx-ease);
}
.ys-nav--transparent-overlay.is-scrolled .ys-nav__brand {
  color: var(--xx-text);
}
.ys-nav--transparent-overlay .ys-nav__list {
  list-style: none;
  display: flex;
  gap: clamp(20px, 3vw, 40px);
  margin: 0;
  padding: 0;
}
.ys-nav--transparent-overlay .ys-nav__link {
  color: #fff;
  text-decoration: none;
  font-size: 14px;
  font-weight: 500;
  letter-spacing: 0.5px;
  transition: color 0.3s var(--xx-ease);
}
.ys-nav--transparent-overlay.is-scrolled .ys-nav__link {
  color: var(--xx-text);
}
.ys-nav--transparent-overlay .ys-nav__link:hover {
  color: var(--xx-primary);
}
.ys-nav--transparent-overlay .ys-nav__toggle {
  display: none;
  background: transparent;
  border: 0;
  color: #fff;
  cursor: pointer;
}
.ys-nav--transparent-overlay.is-scrolled .ys-nav__toggle {
  color: var(--xx-text);
}
@media (max-width: 991px) {
  .ys-nav--transparent-overlay .ys-nav__list {
    display: none;
  }
  .ys-nav--transparent-overlay .ys-nav__toggle {
    display: block;
  }
}

/* ──────────────────────────────────────────────────────────
   NAVIGATION 2/8 — solid
   Use: standard, always visible
   Layout: solid bg, full opaque
   ────────────────────────────────────────────────────────── */
.ys-nav.ys-nav--solid {
  background: var(--xx-bg);
  border-bottom: 1px solid rgba(0,0,0,0.06);
  padding: 16px clamp(20px, 4vw, 48px);
}
.ys-nav--solid .ys-nav__inner {
  max-width: 1400px;
  margin: 0 auto;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 32px;
}
.ys-nav--solid .ys-nav__brand {
  font-family: var(--xx-font-heading);
  font-size: 22px;
  color: var(--xx-text);
  text-decoration: none;
  font-weight: 700;
}
.ys-nav--solid .ys-nav__list {
  list-style: none;
  display: flex;
  gap: clamp(20px, 3vw, 40px);
  margin: 0;
  padding: 0;
}
.ys-nav--solid .ys-nav__link {
  color: var(--xx-text);
  text-decoration: none;
  font-size: 14px;
  font-weight: 500;
  transition: color 0.3s var(--xx-ease);
}
.ys-nav--solid .ys-nav__link:hover {
  color: var(--xx-primary);
}
.ys-nav--solid .ys-nav__toggle {
  display: none;
  background: transparent;
  border: 0;
  cursor: pointer;
}
@media (max-width: 991px) {
  .ys-nav--solid .ys-nav__list {
    display: none;
  }
  .ys-nav--solid .ys-nav__toggle {
    display: block;
  }
}

/* ──────────────────────────────────────────────────────────
   NAVIGATION 3/8 — megamenu
   Use: large site, many sub-pages
   Layout: nav with expandable megamenu dropdown
   ────────────────────────────────────────────────────────── */
.ys-nav.ys-nav--megamenu {
  background: var(--xx-bg);
  position: relative;
  padding: 16px clamp(20px, 4vw, 48px);
  border-bottom: 1px solid rgba(0,0,0,0.06);
}
.ys-nav--megamenu .ys-nav__inner {
  max-width: 1400px;
  margin: 0 auto;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 32px;
}
.ys-nav--megamenu .ys-nav__brand {
  font-family: var(--xx-font-heading);
  font-size: 22px;
  color: var(--xx-text);
  text-decoration: none;
  font-weight: 700;
}
.ys-nav--megamenu .ys-nav__list {
  list-style: none;
  display: flex;
  gap: clamp(20px, 3vw, 36px);
  margin: 0;
  padding: 0;
}
.ys-nav--megamenu .ys-nav__item {
  position: static;
}
.ys-nav--megamenu .ys-nav__link {
  color: var(--xx-text);
  text-decoration: none;
  font-size: 14px;
  font-weight: 500;
  display: flex;
  align-items: center;
  gap: 4px;
  padding: 8px 0;
  transition: color 0.3s var(--xx-ease);
}
.ys-nav--megamenu .ys-nav__link:hover {
  color: var(--xx-primary);
}
.ys-nav--megamenu .ys-nav__drawer {
  position: absolute;
  left: 0;
  right: 0;
  top: 100%;
  background: var(--xx-bg);
  box-shadow: 0 12px 32px rgba(0,0,0,0.1);
  padding: 32px clamp(20px, 4vw, 48px);
  display: none;
  z-index: 1;
}
.ys-nav--megamenu .ys-nav__item:hover .ys-nav__drawer {
  display: block;
}
.ys-nav--megamenu .ys-nav__drawer-grid {
  max-width: 1400px;
  margin: 0 auto;
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 32px;
}
.ys-nav--megamenu .ys-nav__drawer-col h4 {
  font-family: var(--xx-font-heading);
  font-size: 14px;
  letter-spacing: 2px;
  text-transform: uppercase;
  color: var(--xx-primary);
  margin: 0 0 14px;
}
.ys-nav--megamenu .ys-nav__drawer-col a {
  display: block;
  padding: 6px 0;
  color: var(--xx-text-soft);
  text-decoration: none;
  font-size: 14px;
  transition: color 0.3s var(--xx-ease);
}
.ys-nav--megamenu .ys-nav__drawer-col a:hover {
  color: var(--xx-primary);
}
.ys-nav--megamenu .ys-nav__toggle {
  display: none;
}
@media (max-width: 991px) {
  .ys-nav--megamenu .ys-nav__list,
  .ys-nav--megamenu .ys-nav__drawer {
    display: none;
  }
  .ys-nav--megamenu .ys-nav__toggle {
    display: block;
    background: transparent;
    border: 0;
    cursor: pointer;
  }
}

/* ──────────────────────────────────────────────────────────
   NAVIGATION 4/8 — side-drawer
   Use: mobile-first, minimal nav, off-canvas
   Layout: hamburger triggers full-height side drawer
   ────────────────────────────────────────────────────────── */
.ys-nav.ys-nav--side-drawer {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  z-index: 1000;
  padding: 16px clamp(20px, 4vw, 48px);
  background: var(--xx-bg);
}
.ys-nav--side-drawer .ys-nav__inner {
  max-width: 1400px;
  margin: 0 auto;
  display: flex;
  align-items: center;
  justify-content: space-between;
}
.ys-nav--side-drawer .ys-nav__brand {
  font-family: var(--xx-font-heading);
  font-size: 20px;
  color: var(--xx-text);
  text-decoration: none;
  font-weight: 700;
}
.ys-nav--side-drawer .ys-nav__toggle {
  background: transparent;
  border: 0;
  width: 44px;
  height: 44px;
  cursor: pointer;
  color: var(--xx-text);
}
.ys-nav--side-drawer .ys-nav__drawer {
  position: fixed;
  top: 0;
  right: 0;
  bottom: 0;
  width: min(420px, 90vw);
  background: var(--xx-text);
  color: #fff;
  padding: 100px 40px 40px;
  transform: translateX(100%);
  transition: transform 0.4s var(--xx-ease);
  z-index: 999;
  overflow-y: auto;
}
.ys-nav--side-drawer.is-open .ys-nav__drawer {
  transform: translateX(0);
}
.ys-nav--side-drawer .ys-nav__list {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: 24px;
}
.ys-nav--side-drawer .ys-nav__link {
  font-family: var(--xx-font-heading);
  color: #fff;
  font-size: 28px;
  text-decoration: none;
  font-weight: 500;
  display: block;
  transition: color 0.3s var(--xx-ease);
}
.ys-nav--side-drawer .ys-nav__link:hover {
  color: var(--xx-primary);
}

/* ──────────────────────────────────────────────────────────
   NAVIGATION 5/8 — scroll-spy
   Use: single-page, on-page anchors
   Layout: sticky nav with active link based on scroll
   ────────────────────────────────────────────────────────── */
.ys-nav.ys-nav--scroll-spy {
  position: sticky;
  top: 0;
  z-index: 100;
  background: var(--xx-bg);
  padding: 14px clamp(20px, 4vw, 48px);
  border-bottom: 1px solid rgba(0,0,0,0.06);
}
.ys-nav--scroll-spy .ys-nav__inner {
  max-width: 1300px;
  margin: 0 auto;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 32px;
}
.ys-nav--scroll-spy .ys-nav__brand {
  font-family: var(--xx-font-heading);
  font-size: 18px;
  color: var(--xx-text);
  text-decoration: none;
  font-weight: 700;
}
.ys-nav--scroll-spy .ys-nav__list {
  list-style: none;
  display: flex;
  gap: clamp(16px, 2vw, 32px);
  margin: 0;
  padding: 0;
}
.ys-nav--scroll-spy .ys-nav__link {
  color: var(--xx-text-soft);
  text-decoration: none;
  font-size: 14px;
  font-weight: 500;
  letter-spacing: 0.5px;
  padding: 4px 0;
  position: relative;
  transition: color 0.3s var(--xx-ease);
}
.ys-nav--scroll-spy .ys-nav__link::after {
  content: '';
  position: absolute;
  left: 0;
  right: 0;
  bottom: -4px;
  height: 2px;
  background: var(--xx-primary);
  transform: scaleX(0);
  transform-origin: left;
  transition: transform 0.3s var(--xx-ease);
}
.ys-nav--scroll-spy .ys-nav__link.is-active,
.ys-nav--scroll-spy .ys-nav__link:hover {
  color: var(--xx-primary);
}
.ys-nav--scroll-spy .ys-nav__link.is-active::after {
  transform: scaleX(1);
}
@media (max-width: 768px) {
  .ys-nav--scroll-spy .ys-nav__list {
    overflow-x: auto;
    flex-wrap: nowrap;
  }
}

/* ──────────────────────────────────────────────────────────
   NAVIGATION 6/8 — hamburger-only
   Use: minimal, fashion, gallery
   Layout: just brand + hamburger
   ────────────────────────────────────────────────────────── */
.ys-nav.ys-nav--hamburger-only {
  padding: 24px clamp(20px, 4vw, 48px);
  background: transparent;
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  z-index: 1000;
}
.ys-nav--hamburger-only .ys-nav__inner {
  max-width: 1400px;
  margin: 0 auto;
  display: flex;
  align-items: center;
  justify-content: space-between;
}
.ys-nav--hamburger-only .ys-nav__brand {
  font-family: var(--xx-font-heading);
  font-size: 24px;
  color: var(--xx-text);
  text-decoration: none;
  font-weight: 700;
  letter-spacing: 1px;
}
.ys-nav--hamburger-only .ys-nav__toggle {
  width: 48px;
  height: 48px;
  background: transparent;
  border: 0;
  cursor: pointer;
  color: var(--xx-text);
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 6px;
}
.ys-nav--hamburger-only .ys-nav__toggle span {
  display: block;
  width: 28px;
  height: 2px;
  background: currentColor;
  transition: transform 0.3s var(--xx-ease);
}
.ys-nav--hamburger-only .ys-nav__list {
  display: none;
}

/* ──────────────────────────────────────────────────────────
   NAVIGATION 7/8 — sticky-compact
   Use: shrinking on scroll
   Layout: sticky, compresses when scrolled
   ────────────────────────────────────────────────────────── */
.ys-nav.ys-nav--sticky-compact {
  position: sticky;
  top: 0;
  z-index: 100;
  background: var(--xx-bg);
  padding: 20px clamp(20px, 4vw, 48px);
  transition: padding 0.3s var(--xx-ease), box-shadow 0.3s var(--xx-ease);
}
.ys-nav--sticky-compact.is-scrolled {
  padding: 10px clamp(20px, 4vw, 48px);
  box-shadow: 0 2px 12px rgba(0,0,0,0.08);
}
.ys-nav--sticky-compact .ys-nav__inner {
  max-width: 1400px;
  margin: 0 auto;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 32px;
}
.ys-nav--sticky-compact .ys-nav__brand {
  font-family: var(--xx-font-heading);
  font-size: 24px;
  color: var(--xx-text);
  text-decoration: none;
  font-weight: 700;
  transition: font-size 0.3s var(--xx-ease);
}
.ys-nav--sticky-compact.is-scrolled .ys-nav__brand {
  font-size: 18px;
}
.ys-nav--sticky-compact .ys-nav__list {
  list-style: none;
  display: flex;
  gap: clamp(16px, 2.5vw, 32px);
  margin: 0;
  padding: 0;
}
.ys-nav--sticky-compact .ys-nav__link {
  color: var(--xx-text);
  text-decoration: none;
  font-size: 14px;
  font-weight: 500;
  transition: color 0.3s var(--xx-ease);
}
.ys-nav--sticky-compact .ys-nav__link:hover {
  color: var(--xx-primary);
}
.ys-nav--sticky-compact .ys-nav__toggle {
  display: none;
  background: transparent;
  border: 0;
  cursor: pointer;
}
@media (max-width: 991px) {
  .ys-nav--sticky-compact .ys-nav__list {
    display: none;
  }
  .ys-nav--sticky-compact .ys-nav__toggle {
    display: block;
  }
}

/* ──────────────────────────────────────────────────────────
   NAVIGATION 8/8 — pill-tabs
   Use: playful, modern, app-like
   Layout: rounded pill background under active link
   ────────────────────────────────────────────────────────── */
.ys-nav.ys-nav--pill-tabs {
  padding: 16px clamp(20px, 4vw, 48px);
  background: var(--xx-bg);
}
.ys-nav--pill-tabs .ys-nav__inner {
  max-width: 1300px;
  margin: 0 auto;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 32px;
}
.ys-nav--pill-tabs .ys-nav__brand {
  font-family: var(--xx-font-heading);
  font-size: 20px;
  color: var(--xx-text);
  text-decoration: none;
  font-weight: 700;
}
.ys-nav--pill-tabs .ys-nav__list {
  list-style: none;
  display: flex;
  gap: 4px;
  margin: 0;
  padding: 6px;
  background: var(--xx-cream);
  border-radius: 999px;
}
.ys-nav--pill-tabs .ys-nav__link {
  color: var(--xx-text-soft);
  text-decoration: none;
  font-size: 13px;
  font-weight: 600;
  padding: 8px 18px;
  border-radius: 999px;
  transition: all 0.3s var(--xx-ease);
}
.ys-nav--pill-tabs .ys-nav__link:hover {
  color: var(--xx-primary);
}
.ys-nav--pill-tabs .ys-nav__link.is-active {
  background: var(--xx-primary);
  color: #fff;
}
.ys-nav--pill-tabs .ys-nav__toggle {
  display: none;
  background: transparent;
  border: 0;
  cursor: pointer;
}
@media (max-width: 991px) {
  .ys-nav--pill-tabs .ys-nav__list {
    display: none;
  }
  .ys-nav--pill-tabs .ys-nav__toggle {
    display: block;
  }
}

/* ╔════════════════════════════════════════════════════════════╗
   ║  FOOTER SECTIONS (7 variants)                               ║
   ╚════════════════════════════════════════════════════════════╝ */

/* ──────────────────────────────────────────────────────────
   FOOTER 1/7 — minimal
   Use: clean, restrained
   Layout: single row, just essentials
   ────────────────────────────────────────────────────────── */
.ys-footer.ys-footer--minimal {
  padding: 32px clamp(20px, 4vw, 48px);
  background: var(--xx-bg);
  border-top: 1px solid rgba(0,0,0,0.08);
}
.ys-footer--minimal .ys-footer__inner {
  max-width: 1300px;
  margin: 0 auto;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  flex-wrap: wrap;
}
.ys-footer--minimal .ys-footer__copyright {
  font-size: 13px;
  color: var(--xx-text-muted);
}
.ys-footer--minimal .ys-footer__list {
  list-style: none;
  display: flex;
  gap: 24px;
  margin: 0;
  padding: 0;
}
.ys-footer--minimal .ys-footer__list a {
  font-size: 13px;
  color: var(--xx-text-soft);
  text-decoration: none;
  transition: color 0.3s var(--xx-ease);
}
.ys-footer--minimal .ys-footer__list a:hover {
  color: var(--xx-primary);
}

/* ──────────────────────────────────────────────────────────
   FOOTER 2/7 — compact
   Use: small footer, brand + links + social
   Layout: 3-column compact
   ────────────────────────────────────────────────────────── */
.ys-footer.ys-footer--compact {
  padding: 48px clamp(20px, 4vw, 48px) 24px;
  background: var(--xx-cream);
}
.ys-footer--compact .ys-footer__inner {
  max-width: 1300px;
  margin: 0 auto;
  display: grid;
  grid-template-columns: 1.2fr 1fr 1fr;
  gap: 40px;
}
.ys-footer--compact .ys-footer__heading {
  font-family: var(--xx-font-heading);
  font-size: 13px;
  letter-spacing: 2px;
  text-transform: uppercase;
  color: var(--xx-primary);
  margin: 0 0 16px;
}
.ys-footer--compact .ys-footer__col p,
.ys-footer--compact .ys-footer__col address {
  font-size: 14px;
  line-height: 1.7;
  color: var(--xx-text-soft);
  margin: 0;
  font-style: normal;
}
.ys-footer--compact .ys-footer__list {
  list-style: none;
  padding: 0;
  margin: 0;
}
.ys-footer--compact .ys-footer__list a {
  display: block;
  padding: 4px 0;
  font-size: 14px;
  color: var(--xx-text-soft);
  text-decoration: none;
  transition: color 0.3s var(--xx-ease);
}
.ys-footer--compact .ys-footer__list a:hover {
  color: var(--xx-primary);
}
.ys-footer--compact .ys-footer__bottom {
  max-width: 1300px;
  margin: 32px auto 0;
  padding-top: 20px;
  border-top: 1px solid rgba(0,0,0,0.08);
  font-size: 12px;
  color: var(--xx-text-muted);
  text-align: center;
}
@media (max-width: 768px) {
  .ys-footer--compact .ys-footer__inner {
    grid-template-columns: 1fr;
  }
}

/* ──────────────────────────────────────────────────────────
   FOOTER 3/7 — dark-rich
   Use: premium, sophisticated
   Layout: large dark footer with many sections
   ────────────────────────────────────────────────────────── */
.ys-footer.ys-footer--dark-rich {
  background: var(--xx-text);
  color: rgba(255,255,255,0.85);
  padding: clamp(60px, 8vw, 100px) clamp(20px, 4vw, 48px) 24px;
}
.ys-footer--dark-rich .ys-footer__inner {
  max-width: 1400px;
  margin: 0 auto;
  display: grid;
  grid-template-columns: 1.4fr repeat(3, 1fr);
  gap: clamp(28px, 3vw, 48px);
}
.ys-footer--dark-rich .ys-footer__brand {
  font-family: var(--xx-font-heading);
  font-size: 28px;
  color: #fff;
  margin: 0 0 16px;
  font-weight: 700;
}
.ys-footer--dark-rich .ys-footer__col p {
  font-size: 14px;
  line-height: 1.75;
  margin: 0 0 20px;
  opacity: 0.8;
}
.ys-footer--dark-rich .ys-footer__heading {
  font-family: var(--xx-font-heading);
  font-size: 14px;
  letter-spacing: 2px;
  text-transform: uppercase;
  color: #fff;
  margin: 0 0 20px;
}
.ys-footer--dark-rich .ys-footer__list {
  list-style: none;
  padding: 0;
  margin: 0;
}
.ys-footer--dark-rich .ys-footer__list a {
  display: block;
  padding: 6px 0;
  font-size: 14px;
  color: rgba(255,255,255,0.7);
  text-decoration: none;
  transition: color 0.3s var(--xx-ease);
}
.ys-footer--dark-rich .ys-footer__list a:hover {
  color: var(--xx-primary);
}
.ys-footer--dark-rich .ys-footer__social {
  display: flex;
  gap: 12px;
}
.ys-footer--dark-rich .ys-footer__social a {
  width: 38px;
  height: 38px;
  border-radius: 50%;
  background: rgba(255,255,255,0.08);
  display: flex;
  align-items: center;
  justify-content: center;
  color: #fff;
  transition: background 0.3s var(--xx-ease);
}
.ys-footer--dark-rich .ys-footer__social a:hover {
  background: var(--xx-primary);
}
.ys-footer--dark-rich .ys-footer__bottom {
  max-width: 1400px;
  margin: 48px auto 0;
  padding-top: 24px;
  border-top: 1px solid rgba(255,255,255,0.1);
  display: flex;
  justify-content: space-between;
  font-size: 12px;
  /* BEZ opacity: pas niesie loga VISA/MC i znak Powered by (licencja) - przygaszony pas = przygaszone loga (villa-haffnera 2026-10-07, L-footer-bottom-opacity) */
  flex-wrap: wrap;
  gap: 12px;
}
@media (max-width: 991px) {
  .ys-footer--dark-rich .ys-footer__inner {
    grid-template-columns: repeat(2, 1fr);
  }
}
@media (max-width: 600px) {
  .ys-footer--dark-rich .ys-footer__inner {
    grid-template-columns: 1fr;
  }
}

/* ──────────────────────────────────────────────────────────
   FOOTER 4/7 — image-bg
   Use: scenic, atmospheric
   Layout: footer with background image + dark overlay
   ────────────────────────────────────────────────────────── */
.ys-footer.ys-footer--image-bg {
  position: relative;
  padding: clamp(80px, 10vw, 120px) clamp(20px, 4vw, 48px) 24px;
  /* `background`, nie `background-image`: scaffold daje --xx-footer-bg jako KOLOR (var(--<p>-secondary)) -
     w background-image kolor jest niewazny, tlo spadalo na biel, a mgla 65% dawala szara stopke z ciemnym
     tekstem (jodlowa-2 2026-10-08, lessons/108). Shorthand przyjmuje kolor, gradient i url(). */
  background: var(--xx-footer-bg, linear-gradient(135deg, #333, #111));
  background-size: cover;
  background-position: center;
  color: #fff;
  overflow: hidden;
}
.ys-footer--image-bg::before {
  content: '';
  position: absolute;
  inset: 0;
  background: rgba(0,0,0,0.65);
  z-index: 0;
}
.ys-footer--image-bg .ys-footer__inner {
  position: relative;
  z-index: 1;
  max-width: 1300px;
  margin: 0 auto;
  display: grid;
  grid-template-columns: 1.4fr 1fr 1fr;
  gap: 40px;
}
.ys-footer--image-bg .ys-footer__brand {
  font-family: var(--xx-font-heading);
  font-size: 32px;
  margin: 0 0 16px;
}
.ys-footer--image-bg .ys-footer__col p,
.ys-footer--image-bg .ys-footer__col address {
  font-size: 14px;
  line-height: 1.75;
  opacity: 0.85;
  margin: 0;
  font-style: normal;
}
.ys-footer--image-bg .ys-footer__heading {
  font-size: 13px;
  letter-spacing: 2px;
  text-transform: uppercase;
  margin: 0 0 16px;
  opacity: 0.85;
}
.ys-footer--image-bg .ys-footer__list {
  list-style: none;
  padding: 0;
  margin: 0;
}
.ys-footer--image-bg .ys-footer__list a {
  display: block;
  padding: 5px 0;
  font-size: 14px;
  color: rgba(255,255,255,0.85);
  text-decoration: none;
  transition: color 0.3s var(--xx-ease);
}
.ys-footer--image-bg .ys-footer__list a:hover {
  color: var(--xx-primary);
}
.ys-footer--image-bg .ys-footer__bottom {
  position: relative;
  z-index: 1;
  max-width: 1300px;
  margin: 56px auto 0;
  padding-top: 20px;
  border-top: 1px solid rgba(255,255,255,0.15);
  font-size: 12px;
  /* BEZ opacity (L-footer-bottom-opacity): pas niesie loga platnosci i Powered by */
  text-align: center;
}
@media (max-width: 991px) {
  .ys-footer--image-bg .ys-footer__inner {
    grid-template-columns: 1fr;
  }
}

/* ──────────────────────────────────────────────────────────
   FOOTER 5/7 — multi-column
   Use: large site map, many links
   Layout: 5-column grid
   ────────────────────────────────────────────────────────── */
.ys-footer.ys-footer--multi-column {
  background: var(--xx-cream);
  padding: clamp(60px, 8vw, 100px) clamp(20px, 4vw, 48px) 24px;
}
.ys-footer--multi-column .ys-footer__inner {
  max-width: 1400px;
  margin: 0 auto;
  display: grid;
  grid-template-columns: 1.5fr repeat(4, 1fr);
  gap: clamp(24px, 3vw, 40px);
}
.ys-footer--multi-column .ys-footer__brand {
  font-family: var(--xx-font-heading);
  font-size: 26px;
  margin: 0 0 16px;
  color: var(--xx-text);
}
.ys-footer--multi-column .ys-footer__col p {
  font-size: 14px;
  line-height: 1.7;
  color: var(--xx-text-soft);
  margin: 0 0 20px;
}
.ys-footer--multi-column .ys-footer__heading {
  font-family: var(--xx-font-heading);
  font-size: 14px;
  font-weight: 600;
  color: var(--xx-text);
  margin: 0 0 16px;
}
.ys-footer--multi-column .ys-footer__list {
  list-style: none;
  padding: 0;
  margin: 0;
}
.ys-footer--multi-column .ys-footer__list a {
  display: block;
  padding: 5px 0;
  font-size: 14px;
  color: var(--xx-text-soft);
  text-decoration: none;
  transition: color 0.3s var(--xx-ease);
}
.ys-footer--multi-column .ys-footer__list a:hover {
  color: var(--xx-primary);
}
.ys-footer--multi-column .ys-footer__bottom {
  max-width: 1400px;
  margin: 48px auto 0;
  padding-top: 20px;
  border-top: 1px solid rgba(0,0,0,0.08);
  font-size: 12px;
  color: var(--xx-text-muted);
  display: flex;
  justify-content: space-between;
  flex-wrap: wrap;
  gap: 12px;
}
@media (max-width: 991px) {
  .ys-footer--multi-column .ys-footer__inner {
    grid-template-columns: repeat(2, 1fr);
  }
}
@media (max-width: 600px) {
  .ys-footer--multi-column .ys-footer__inner {
    grid-template-columns: 1fr;
  }
}

/* ──────────────────────────────────────────────────────────
   FOOTER 6/7 — centered
   Use: brand-centric, single column
   Layout: centered brand + nav + social
   ────────────────────────────────────────────────────────── */
.ys-footer.ys-footer--centered {
  padding: clamp(60px, 8vw, 100px) clamp(20px, 4vw, 48px) 24px;
  background: var(--xx-bg);
  text-align: center;
}
.ys-footer--centered .ys-footer__inner {
  max-width: 800px;
  margin: 0 auto;
}
.ys-footer--centered .ys-footer__brand {
  font-family: var(--xx-font-heading);
  font-size: clamp(28px, 3.5vw, 42px);
  color: var(--xx-text);
  margin: 0 0 16px;
  font-weight: 700;
}
.ys-footer--centered .ys-footer__col p {
  font-size: 15px;
  line-height: 1.65;
  color: var(--xx-text-soft);
  margin: 0 auto 32px;
  max-width: 540px;
}
.ys-footer--centered .ys-footer__list {
  list-style: none;
  display: flex;
  justify-content: center;
  flex-wrap: wrap;
  gap: 24px;
  padding: 0;
  margin: 0 0 32px;
}
.ys-footer--centered .ys-footer__list a {
  font-size: 14px;
  color: var(--xx-text);
  text-decoration: none;
  transition: color 0.3s var(--xx-ease);
}
.ys-footer--centered .ys-footer__list a:hover {
  color: var(--xx-primary);
}
.ys-footer--centered .ys-footer__social {
  display: flex;
  gap: 12px;
  justify-content: center;
  margin-bottom: 40px;
}
.ys-footer--centered .ys-footer__social a {
  width: 40px;
  height: 40px;
  border-radius: 50%;
  border: 1px solid rgba(0,0,0,0.15);
  display: flex;
  align-items: center;
  justify-content: center;
  color: var(--xx-text-soft);
  text-decoration: none;
  transition: all 0.3s var(--xx-ease);
}
.ys-footer--centered .ys-footer__social a:hover {
  background: var(--xx-primary);
  border-color: var(--xx-primary);
  color: #fff;
}
.ys-footer--centered .ys-footer__bottom {
  padding-top: 24px;
  border-top: 1px solid rgba(0,0,0,0.08);
  font-size: 12px;
  color: var(--xx-text-muted);
}

/* ──────────────────────────────────────────────────────────
   FOOTER 7/7 — social-focus
   Use: community, brand engagement
   Layout: big social CTAs + minimal links
   ────────────────────────────────────────────────────────── */
.ys-footer.ys-footer--social-focus {
  background: var(--xx-gradient-primary, linear-gradient(135deg, var(--xx-primary), var(--xx-secondary)));
  color: #fff;
  padding: clamp(60px, 8vw, 100px) clamp(20px, 4vw, 48px) 24px;
  text-align: center;
}
.ys-footer--social-focus .ys-footer__inner {
  max-width: 900px;
  margin: 0 auto;
}
.ys-footer--social-focus .ys-footer__heading {
  font-family: var(--xx-font-heading);
  font-size: clamp(24px, 3vw, 36px);
  margin: 0 0 32px;
}
.ys-footer--social-focus .ys-footer__social {
  display: flex;
  justify-content: center;
  gap: 16px;
  margin-bottom: 48px;
  flex-wrap: wrap;
}
.ys-footer--social-focus .ys-footer__social a {
  width: 56px;
  height: 56px;
  border-radius: 50%;
  background: rgba(255,255,255,0.15);
  backdrop-filter: blur(8px);
  display: flex;
  align-items: center;
  justify-content: center;
  color: #fff;
  text-decoration: none;
  transition: transform 0.3s var(--xx-ease), background 0.3s var(--xx-ease);
}
.ys-footer--social-focus .ys-footer__social a:hover {
  background: #fff;
  color: var(--xx-primary);
  transform: translateY(-4px);
}
.ys-footer--social-focus .ys-footer__list {
  list-style: none;
  display: flex;
  justify-content: center;
  flex-wrap: wrap;
  gap: 24px;
  padding: 0;
  margin: 0 0 32px;
}
.ys-footer--social-focus .ys-footer__list a {
  font-size: 13px;
  color: rgba(255,255,255,0.9);
  text-decoration: none;
  letter-spacing: 1px;
  text-transform: uppercase;
  transition: opacity 0.3s var(--xx-ease);
}
.ys-footer--social-focus .ys-footer__list a:hover {
  opacity: 0.7;
}
.ys-footer--social-focus .ys-footer__bottom {
  padding-top: 24px;
  border-top: 1px solid rgba(255,255,255,0.18);
  font-size: 12px;
  opacity: 0.85;
}

/* ═══════════════════════════════════════════════════════════════
   §SEARCH — hero booking search widget (JS: ido-search-delegate.js)
   Wariant aktywny przez rotacje anty-dup: klasa .ys-search--<wariant> na <form>
   (scaffold: variant_pools.search + data-search-variant na slocie hero__search).

   >>> PULA NIE JEST ZAMKNIETA — jak dodac KOLEJNY wariant: <<<
   1) dopisz blok `.ys-search--<nazwa> { ... }` ponizej (nadpisz dowolne z base
      .ys-search__group/__label/__input/__submit — reszte dziedziczy z base),
   2) dodaj "<nazwa>" do library/templates/vibe-presets.json → variant_pools.search,
   3) gotowe: rotacja (pickVariant) i lint (N-search-variant, regex /-search--/)
      podchwytuja nowy wariant automatycznie — zaden enum/switch do aktualizacji.
   Kazdy wariant deleguje do #iai_book_form / /book-now (from_own_button=1).
   ═══════════════════════════════════════════════════════════════ */
.ys-hero__search { margin-top: 8px; }
/* CLS (wschodnia-elegans 2026-10-01, 14b): warianty maja `margin: 26px auto 0` NA FORMULARZU. Przy pustym slocie
   tego marginesu nie ma, po wstrzyknieciu przelatuje przez slot (margin collapsing) i spycha tresc hero o ~20 px.
   Gorny odstep trzyma slot, formularz w slocie ma 0. */
.ys-hero__search > .ys-search { margin-top: 0 !important; }
.ys-hero__search:has(> .ys-search--bar), .ys-hero__search[data-search-variant="bar"] { margin-top: 26px; }
.ys-search { display: flex; text-align: left; }
.ys-search__group { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
.ys-search__label { display: inline-flex; align-items: center; gap: 7px; font-family: var(--xx-font-body); font-size: 10.5px; font-weight: 700; letter-spacing: 1.4px; text-transform: uppercase; color: var(--xx-text-muted); }
.ys-search__label svg { width: 15px; height: 15px; color: var(--xx-secondary); flex: 0 0 auto; }
.ys-search__input, .ys-search select { border: none; background: transparent; font-family: var(--xx-font-body); font-size: 15.5px; font-weight: 600; color: var(--xx-text); padding: 2px 0; width: 100%; outline: none; cursor: pointer; -webkit-appearance: none; appearance: none; }
.ys-search__input::placeholder { color: var(--xx-text-muted); font-weight: 500; }
.ys-search__submit { flex: 0 0 auto; display: inline-flex; align-items: center; justify-content: center; gap: 9px; border: none; cursor: pointer; background: var(--xx-secondary); color: #FFFFFF; font-family: var(--xx-font-body); font-weight: 700; font-size: 15.5px; letter-spacing: .02em; transition: background-color .22s var(--xx-ease), transform .18s var(--xx-ease); }
.ys-search__submit svg { width: 18px; height: 18px; }
.ys-search__submit:hover { background: var(--xx-secondary-dark); transform: translateY(-1px); }

/* -- WARIANT: bar (kanon osada) — poziomy przezroczysty pasek, dzielniki 1px -- */
.ys-search--bar { align-items: stretch; flex-wrap: nowrap; gap: 0; padding: 8px; max-width: 920px; margin: 26px auto 0; background: rgba(255,255,255,.96); border-radius: var(--xx-radius-lg); box-shadow: 0 24px 60px rgba(20,16,10,.30); -webkit-backdrop-filter: blur(6px); backdrop-filter: blur(6px); }
.ys-search--bar .ys-search__group { flex: 1 1 0; padding: 12px 22px; position: relative; }
.ys-search--bar .ys-search__group + .ys-search__group::before { content: ""; position: absolute; left: 0; top: 18%; height: 64%; width: 1px; background: var(--xx-border); }
.ys-search--bar .ys-search__group--guests { flex: 0 0 128px; }
.ys-search--bar .ys-search__submit { padding: 0 30px; border-radius: max(8px, calc(var(--xx-radius-lg, 16px) - 4px)); }   /* max(): przy ostrym presecie (radius-lg 4 px) przycisk wychodzil kwadratowy (wschodnia 2026-09-30) */
@media (max-width: 820px) {
  .ys-search--bar { flex-direction: column; gap: 2px; max-width: 440px; padding: 10px; }
  .ys-search--bar .ys-search__group, .ys-search--bar .ys-search__group--guests { flex: 1 1 auto; padding: 12px 16px; }
  .ys-search--bar .ys-search__group + .ys-search__group::before { left: 16px; right: 16px; top: 0; height: 1px; width: auto; }
  .ys-search--bar .ys-search__submit { width: 100%; padding: 15px 24px; margin-top: 8px; }
}

/* telefon: zwarty pasek 2x2 (mickiewicza40 2026-10-01): jedna kolumna miala 366 px @375 i wchodzila pod baner
   cookies w lewym dolnym rogu. Lokalizacja na cala szerokosc, daty obok siebie, goscie + przycisk w jednym rzedzie. */
@media (max-width: 560px) {
  .ys-search--bar { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 0; }
  .ys-search--bar .ys-search__group--loc { grid-column: 1 / -1; }
  .ys-search--bar .ys-search__group, .ys-search--bar .ys-search__group--guests { padding: 10px 12px; min-width: 0; }
  .ys-search--bar .ys-search__submit { width: auto; margin: 8px 6px 6px; padding: 10px; font-size: 14px; line-height: 1.15; white-space: normal; text-align: center; align-self: center; }
  .ys-search--bar .ys-search__submit svg { display: none; }
}
/* siatka 2x2 (<=560): kreski-dzielniki z ukladu kolumnowego (::before na kolejnych grupach) w siatce stawaly
   w przypadkowych miejscach (nad „Wyjazd", pod „Przyjazd") - w siatce dzielniki zbedne (wschodnia 2026-10-01) */
@media (max-width: 560px) { .ys-search--bar .ys-search__group + .ys-search__group::before { display: none !important; } }

/* -- WARIANT: card (kanon easyrent) — biala karta na siatce, etykieta nad polem -- */
.ys-search--card { display: grid; grid-template-columns: 1.2fr 1.2fr 1fr auto; gap: 14px; align-items: end; max-width: 940px; margin: 26px auto 0; padding: 22px; background: var(--xx-white, #FFFFFF); border: 1px solid var(--xx-border); border-radius: var(--xx-radius-lg); box-shadow: var(--xx-shadow-md); }
.ys-search--card .ys-search__group { gap: 6px; }
.ys-search--card .ys-search__input, .ys-search--card select { border: 1px solid var(--xx-border); border-radius: var(--xx-radius); padding: 11px 14px; font-size: 15px; background: var(--xx-cream, #FFFFFF); height: 48px; box-sizing: border-box; }   /* JAWNA wysokosc pola = wysokosc przycisku: przycisk 46 px przy polach 50 px stal 4 px nizej (u-aniolka 2026-10-01, 14ad) */
.ys-search--card .ys-search__submit { height: 48px; padding: 0 26px; border-radius: max(8px, var(--xx-radius, 8px)); }   /* max(): preset z radius 0 (winter-alpine) dawal kwadrat (u-aniolka 2026-10-01, 14ab) */
@media (max-width: 991px) { .ys-search--card { grid-template-columns: 1fr 1fr; } .ys-search--card .ys-search__submit { grid-column: 1 / -1; width: 100%; } }
/* telefon: zwarta karta 2x2 (daty obok siebie, goscie + przycisk w drugim wierszu). Jedna kolumna miala 369 px
   @375 i wypelniala caly ekran hero - kazdy baner/pasek przy dolnej krawedzi na nia wchodzil (u-aniolka 2026-10-01).
   minmax(0,1fr): przycisk z dlugim napisem nie rozpycha kolumny. Rezerwacja CLS: hero__search:empty ~212 px. */
@media (max-width: 560px) {
  .ys-search--card { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 12px; padding: 18px; }
  .ys-search--card .ys-search__group--loc { grid-column: 1 / -1; }
  .ys-search--card .ys-search__submit { grid-column: auto; width: 100%; align-self: end; height: 48px; padding: 0 10px; font-size: 14px; line-height: 1.15; white-space: normal; text-align: center; gap: 6px; }
  .ys-search--card .ys-search__submit svg { display: none; }
}

/* ── §LEAFLET-KROJ: kontrolki i podpisy mapy w kroju marki (u-aniolka + mickiewicza40 2026-10-01, spec 15:
   Leaflet daje „Helvetica Neue" na linkach, „Lucida Console" na +/- i „Tahoma" na zamknieciu dymka) ── */
html body .leaflet-container, html body .leaflet-container a, html body .leaflet-control-zoom a,
html body .leaflet-control-attribution, html body .leaflet-popup-close-button, html body .leaflet-popup-content {
  font-family: var(--xx-font-body, system-ui, sans-serif) !important;
}

/* ── §COOKIE-PASYWNY: baner zgody w LEWYM DOLNYM rogu (decyzja Damiana 2026-10-01, lessons/102) ──
   Silnik maluje toast `--passive` na ciemno (link w kolorze marki niewidoczny) i ~420x220, przez co
   wchodzil na wyszukiwarke hero. Kanon: jasna karta, desktop plaski pasek 600 px (tekst i „Zamknij"
   w jednym wierszu, ~135 px), telefon pelna szerokosc, 11 px. Wariant `--blocked` (modal prawny) NIETKNIETY.
   Zmierzone u-aniolka: 1280x800 wyszukiwarka do 589, baner od 649; 375x812 karta do 567, baner od 612. */
html body #ck_dsclr_v2.--passive, html body.page-index #ck_dsclr_v2.--passive {
  top: auto !important; bottom: 16px !important; left: 16px !important; right: auto !important;
  width: min(380px, calc(100vw - 32px)) !important; max-width: none !important; transform: none !important;
  padding: 14px 16px !important; border-radius: 16px !important; box-shadow: 0 18px 44px rgba(8,16,11,.24) !important;
  background: #FFFFFF !important; color: var(--xx-text, #1A1A1A) !important; border: 1px solid rgba(0,0,0,.10) !important;
}
html body #ck_dsclr_v2.--passive p { color: var(--xx-text-soft, #3A3A3A) !important; font-size: 12px !important; line-height: 1.45 !important; margin: 0 0 10px !important; padding-right: 22px; }
html body #ck_dsclr_v2.--passive a { color: var(--xx-primary, #1A1A1A) !important; font-weight: 800; text-decoration: underline !important; }
html body #ck_dsclr_v2.--passive .ck_dsclr_x_v2, html body #ck_dsclr_v2.--passive .ck_dsclr_x_v2 i { color: var(--xx-text-muted, #6B6B6B) !important; }
html body #ck_dsclr_v2.--passive .ck_dsclr__btn_v2 { color: #FFFFFF !important; padding: 8px 18px !important; min-height: 0 !important; border-radius: 10px !important; }
@media (min-width: 768px) {
  html body #ck_dsclr_v2.--passive, html body.page-index #ck_dsclr_v2.--passive { width: min(600px, calc(100vw - 32px)) !important; }
  html body #ck_dsclr_v2.--passive .ck_dsclr__sub_v2 { display: flex !important; align-items: center; gap: 18px; }
  html body #ck_dsclr_v2.--passive .ck_dsclr__sub_v2 p { margin: 0 !important; flex: 1 1 auto; }
  html body #ck_dsclr_v2.--passive .ck_dsclr__sub_v2 > div { flex: 0 0 auto; margin: 0 26px 0 0 !important; }
}
@media (max-width: 767px) {
  html body #ck_dsclr_v2.--passive, html body.page-index #ck_dsclr_v2.--passive { left: 8px !important; right: 8px !important; bottom: 8px !important; width: auto !important; padding: 10px 12px !important; }
  html body #ck_dsclr_v2.--passive p { font-size: 11px !important; line-height: 1.4 !important; margin-bottom: 8px !important; }
}

/* ── §PASEK-CTA: staly przycisk rezerwacji na telefonie (wstawia ido-mobile-nav.js, lessons/060 §B, test 14g) ── */
.ys-pasek { display: none; }
@media (max-width: 767px) {
  .ys-pasek { display: flex; position: fixed; left: 12px; right: 12px; bottom: calc(12px + env(safe-area-inset-bottom, 0px)); z-index: 1050; transform: translateY(calc(100% + 28px)); transition: transform .3s cubic-bezier(.2,.7,.2,1); pointer-events: none; }
  .ys-pasek.ys-pasek--on { transform: none; pointer-events: auto; }
  body:has(.ys-pasek--on) #backTop { bottom: calc(80px + env(safe-area-inset-bottom, 0px)) !important; }   /* strzalka „do gory" nad paskiem, nie pod nim (villa-haffnera 2026-10-07) */
  .ys-pasek__btn { flex: 1 1 auto; display: flex; align-items: center; justify-content: center; min-height: 52px; border-radius: max(10px, var(--xx-radius)); background: var(--xx-secondary) !important; color: #FFFFFF !important; font-family: var(--xx-font-body); font-weight: 800; font-size: 16px; text-decoration: none !important; box-shadow: 0 14px 34px rgba(8,16,11,.32); }
  body footer { padding-bottom: 84px; }   /* pasek nie zaslania dolu stopki */
}
@media (prefers-reduced-motion: reduce) { .ys-pasek { transition: none; } }

/* -- WARIANT: pill — kompaktowy, mocno zaokraglony, lekki -- */
.ys-search--pill { align-items: center; flex-wrap: nowrap; gap: 0; padding: 6px 6px 6px 20px; max-width: 720px; margin: 24px auto 0; background: rgba(255,255,255,.94); border: 1px solid var(--xx-border); border-radius: 999px; box-shadow: 0 12px 34px rgba(20,16,10,.20); }
.ys-search--pill .ys-search__group { flex: 1 1 0; padding: 6px 18px; position: relative; }
.ys-search--pill .ys-search__group + .ys-search__group::before { content: ""; position: absolute; left: 0; top: 20%; height: 60%; width: 1px; background: var(--xx-border); }
.ys-search--pill .ys-search__label { font-size: 9.5px; letter-spacing: 1.1px; }
.ys-search--pill .ys-search__input, .ys-search--pill select { font-size: 14px; }
.ys-search--pill .ys-search__group--guests { flex: 0 0 96px; }
.ys-search--pill .ys-search__submit { width: 52px; height: 52px; padding: 0; border-radius: 999px; }
@media (max-width: 820px) {
  .ys-search--pill { flex-direction: column; gap: 2px; max-width: 400px; padding: 12px; border-radius: var(--xx-radius-lg); }
  .ys-search--pill .ys-search__group { flex: 1 1 auto; padding: 10px 14px; }
  .ys-search--pill .ys-search__group + .ys-search__group::before { left: 14px; right: 14px; top: 0; height: 1px; width: auto; }
  .ys-search--pill .ys-search__submit { width: 100%; height: 48px; border-radius: max(8px, var(--xx-radius, 8px)); }
}

/* -- WARIANT: split — dwupoziomowy: lokalizacja u gory, daty+goscie+submit nizej -- */
.ys-search--split { display: grid; grid-template-columns: 1fr 1fr 1fr auto; gap: 12px 14px; align-items: end; max-width: 900px; margin: 26px auto 0; padding: 20px; background: rgba(255,255,255,.97); border-radius: var(--xx-radius-lg); box-shadow: 0 20px 50px rgba(20,16,10,.26); }
.ys-search--split .ys-search__group--loc { grid-column: 1 / -1; }
.ys-search--split .ys-search__group { gap: 6px; }
.ys-search--split .ys-search__input, .ys-search--split select { border-bottom: 2px solid var(--xx-border); padding: 8px 2px; font-size: 15px; }
.ys-search--split .ys-search__submit { height: 46px; padding: 0 26px; border-radius: max(8px, var(--xx-radius, 8px)); }
@media (max-width: 700px) { .ys-search--split { grid-template-columns: 1fr 1fr; } .ys-search--split .ys-search__submit { grid-column: 1 / -1; width: 100%; } }
@media (max-width: 460px) { .ys-search--split { grid-template-columns: 1fr; } }

/* ═══════════════════════════════════════════════════════════════
   END OF LAYER 4 — VARIETY PATTERNS
   74 variants across 10 section types (Search x4 added 2026-07-17).
   ═══════════════════════════════════════════════════════════════ */

/* === /§VIBE-VARIETY (L4) === */


/* ============================================================
   LAYER 5 — COLOR SYSTEM (vibe) — vibe "urban-bold" (wyciety blok, brand-safe)
   ============================================================ */

/* data-vibe="urban-bold" ustawiany automatycznie w KONIEC_BODY (SCAFFOLD B3);
   primary/secondary/gradient/font przepisane na tokeny marki → aktywacja nie zmienia palety/fontu. */
:root[data-vibe="urban-bold"],
[data-vibe="urban-bold"] {
  --xx-primary:         var(--ys-primary);
  --xx-primary-light:   var(--ys-primary-light);
  --xx-primary-dark:    var(--ys-primary-dark);
  --xx-primary-soft:    var(--ys-primary-soft);
  --xx-secondary:       var(--ys-secondary);
  --xx-secondary-light: var(--ys-secondary-light);
  --xx-secondary-dark:  var(--ys-secondary-dark);
  --xx-cream:           var(--ys-cream);
  --xx-cream2:          #242424;
  --xx-cream3:          #1E1E1E;
  --xx-bg:              var(--ys-bg);
  --xx-text:            var(--ys-text);
  --xx-text-soft:       var(--ys-text-soft);
  --xx-text-muted:      var(--ys-text-muted);
  --xx-shadow-sm:       0 2px 8px rgba(0, 0, 0, 0.40);
  --xx-shadow-md:       0 4px 30px rgba(0, 0, 0, 0.50);
  --xx-shadow-lg:       0 12px 40px rgba(0, 0, 0, 0.65);
  --xx-gradient-primary: linear-gradient(135deg, var(--ys-primary) 0%, var(--ys-primary-dark) 100%);
  --xx-gradient-accent:  linear-gradient(135deg, var(--ys-secondary) 0%, var(--ys-secondary-dark) 100%);
  --xx-radius:          0px;
  --xx-radius-lg:       2px;
  --xx-ease:            cubic-bezier(0.4, 0, 0.2, 1);
}

@media (prefers-color-scheme: dark) {
  [data-vibe="urban-bold"]:not([data-mode="light"]) {
    --xx-primary:         var(--ys-primary);
    --xx-primary-light:   var(--ys-primary-light);
    --xx-primary-dark:    var(--ys-primary-dark);
    --xx-primary-soft:    var(--ys-primary-soft);
    --xx-secondary:       var(--ys-secondary);
    --xx-secondary-light: var(--ys-secondary-light);
    --xx-secondary-dark:  var(--ys-secondary-dark);
    --xx-cream:           #1A1A1A;
    --xx-cream2:          #141414;
    --xx-cream3:          #0E0E0E;
    --xx-bg:              #000000;
    --xx-text:            #FFFFFF;
    --xx-text-soft:       #E5E5E5;
    --xx-text-muted:      #C8C8C8;
    --xx-shadow-sm:       0 2px 8px rgba(0, 0, 0, 0.50);
    --xx-shadow-md:       0 4px 30px rgba(0, 0, 0, 0.65);
    --xx-shadow-lg:       0 12px 40px rgba(0, 0, 0, 0.80);
    --xx-gradient-primary: linear-gradient(135deg, var(--ys-primary) 0%, var(--ys-primary-dark) 100%);
    --xx-gradient-accent:  linear-gradient(135deg, var(--ys-secondary) 0%, var(--ys-secondary-dark) 100%);
  }
}

[data-vibe="urban-bold"][data-mode="dark"],
[data-vibe="urban-bold"].force-dark {
  --xx-primary:         var(--ys-primary);
  --xx-primary-light:   var(--ys-primary-light);
  --xx-primary-dark:    var(--ys-primary-dark);
  --xx-primary-soft:    var(--ys-primary-soft);
  --xx-secondary:       var(--ys-secondary);
  --xx-secondary-light: var(--ys-secondary-light);
  --xx-secondary-dark:  var(--ys-secondary-dark);
  --xx-cream:           #1A1A1A;
  --xx-cream2:          #141414;
  --xx-cream3:          #0E0E0E;
  --xx-bg:              #000000;
  --xx-text:            #FFFFFF;
  --xx-text-soft:       #E5E5E5;
  --xx-text-muted:      #C8C8C8;
  --xx-shadow-sm:       0 2px 8px rgba(0, 0, 0, 0.50);
  --xx-shadow-md:       0 4px 30px rgba(0, 0, 0, 0.65);
  --xx-shadow-lg:       0 12px 40px rgba(0, 0, 0, 0.80);
  --xx-gradient-primary: linear-gradient(135deg, var(--ys-primary) 0%, var(--ys-primary-dark) 100%);
  --xx-gradient-accent:  linear-gradient(135deg, var(--ys-secondary) 0%, var(--ys-secondary-dark) 100%);
}


/* ──────────────────────────────────────────────────────────
   6. WELLNESS CALM
   Spa, hotel wellness


/* ============================================================
   LAYER 6 — TYPOGRAPHY (vibe) — vibe "urban-bold" (wyciety blok, brand-safe)
   ============================================================ */

/* data-vibe="urban-bold" ustawiany automatycznie w KONIEC_BODY (SCAFFOLD B3);
   primary/secondary/gradient/font przepisane na tokeny marki → aktywacja nie zmienia palety/fontu. */
[data-vibe="urban-bold"] {
  --xx-font-heading: var(--ys-font-heading);
  --xx-font-body:    var(--ys-font-body);
  --xx-font-display: "Young Serif", Georgia, serif;
  --xx-letter-spacing-heading: -0.02em;
  --xx-letter-spacing-caption: 2px;
  --xx-line-height-tight: 0.95;
  --xx-line-height-base: 1.5;
  --xx-line-height-loose: 1.65;
}

[data-vibe="urban-bold"] body {
  font-family: var(--xx-font-body);
  line-height: var(--xx-line-height-base);
  color: var(--xx-text);
}

[data-vibe="urban-bold"] h1,
[data-vibe="urban-bold"] .ys-h1 {
  font-family: var(--xx-font-heading);
  font-size: clamp(48px, 7vw, 96px);
  font-weight: 400;
  line-height: var(--xx-line-height-tight);
  letter-spacing: var(--xx-letter-spacing-heading);
  text-transform: uppercase;
  margin: 0 0 0.4em;
}
[data-vibe="urban-bold"] h2,
[data-vibe="urban-bold"] .ys-h2 {
  font-family: var(--xx-font-heading);
  font-size: clamp(36px, 5vw, 72px);
  font-weight: 400;
  line-height: 1.05;
  letter-spacing: var(--xx-letter-spacing-heading);
  text-transform: uppercase;
  margin: 0 0 0.5em;
}
[data-vibe="urban-bold"] h3,
[data-vibe="urban-bold"] .ys-h3 {
  font-family: var(--xx-font-heading);
  font-size: clamp(24px, 2.5vw, 36px);
  font-weight: 400;
  line-height: 1.15;
  text-transform: uppercase;
  margin: 0 0 0.5em;
}
[data-vibe="urban-bold"] h4,
[data-vibe="urban-bold"] .ys-h4 {
  font-family: var(--xx-font-heading);
  font-size: clamp(18px, 1.8vw, 24px);
  font-weight: 400;
  line-height: 1.25;
  text-transform: uppercase;
  letter-spacing: 0.02em;
  margin: 0 0 0.6em;
}
[data-vibe="urban-bold"] p,
[data-vibe="urban-bold"] .ys-p {
  font-family: var(--xx-font-body);
  font-size: clamp(15px, 1.1vw, 17px);
  line-height: var(--xx-line-height-base);
  margin: 0 0 1em;
}
[data-vibe="urban-bold"] .ys-caption {
  font-family: var(--xx-font-body);
  font-size: 12px;
  letter-spacing: var(--xx-letter-spacing-caption);
  text-transform: uppercase;
  font-weight: 700;
}
:where([data-vibe="urban-bold"]) .ys-eyebrow {
  font-family: var(--xx-font-body);
  font-size: 13px;
  letter-spacing: 3px;
  text-transform: uppercase;
  font-weight: 700;
  color: var(--xx-primary);
}
[data-vibe="urban-bold"] .ys-drop-cap::first-letter {
  font-family: var(--xx-font-heading);
  font-size: 4.5em;
  float: left;
  line-height: 0.85;
  margin: 4px 12px 0 0;
  color: var(--xx-primary);
}
[data-vibe="urban-bold"] .ys-lead {
  font-family: var(--xx-font-body);
  font-size: clamp(17px, 1.3vw, 21px);
  line-height: 1.5;
  color: var(--xx-text-soft);
  font-weight: 500;
}


/* ──────────────────────────────────────────────────────────
   6. WELLNESS CALM — Source Serif Pro + Source Sans Pro


/* ============================================================
   LAYER 7 — INTERACTIONS (hover/reveal/anim)
   ============================================================ */

/* ═══════════════════════════════════════════════════════════════
   LAYER 7 — INTERACTIONS
   Hover effects (8), scroll reveals (5), modal animations (4),
   loading states (3), form validation visuals (3).

   Wszystkie używają --xx-ease (defined w layer5).
   Respektują @media (prefers-reduced-motion: reduce).
   ═══════════════════════════════════════════════════════════════ */

/* ── §LIGHTBOX (ido-lb) — uniwersalny click-to-zoom (JS: ido-lightbox.js) ──
   Fixed namespace `ido-lb` (NIE prefiksowany) — JS tworzy identyczne klasy, wiec
   NIE podlega renameCssClasses. Triggery (.ys-gallery / .txt-text .row img /
   .cms .row img) sa prefiksowane/natywne → zdjecia z galerii I z sekcji CMS klienta. */
.ido-lb{position:fixed;inset:0;z-index:99999;display:none;align-items:center;justify-content:center}
.ido-lb.ido-lb--active{display:flex}
.ido-lb__overlay{position:absolute;inset:0;background:rgba(15,15,15,.92);cursor:zoom-out}
.ido-lb__img{position:relative;max-width:92vw;max-height:88vh;object-fit:contain;border-radius:6px;box-shadow:0 10px 40px rgba(0,0,0,.5);animation:ido-lb-in .25s ease}
@keyframes ido-lb-in{from{opacity:0;transform:scale(.97)}to{opacity:1;transform:none}}
.ido-lb__caption{position:absolute;left:0;right:0;bottom:16px;margin:0;text-align:center;color:#fff;font-size:14px;padding:0 16px;text-shadow:0 1px 3px rgba(0,0,0,.6)}
.ido-lb__close,.ido-lb__prev,.ido-lb__next{position:absolute;z-index:2;background:rgba(0,0,0,.4);color:#fff;border:0;width:48px;height:48px;border-radius:50%;font-size:28px;line-height:1;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:background .2s}
.ido-lb__close:hover,.ido-lb__prev:hover,.ido-lb__next:hover{background:rgba(0,0,0,.7)}
.ido-lb__close{top:16px;right:16px}
.ido-lb__prev{left:16px;top:50%;transform:translateY(-50%)}
.ido-lb__next{right:16px;top:50%;transform:translateY(-50%)}
@media (prefers-reduced-motion:reduce){.ido-lb__img{animation:none}}
/* obrazy klikalne do powiekszenia — galeria + sekcje CMS klienta (skalowanie hover) */
.ys-gallery img,.ys-gallery__item img,.txt-text .row img,.cms .row img,.ys-home figure img{cursor:zoom-in;transition:transform .3s ease,box-shadow .3s ease}
.ys-gallery__item:hover img,.txt-text .row a:hover img{transform:scale(1.03)}
/* kadr dekoracyjny wylaczony z powiekszenia (data-lb="off" na figure, ido-lightbox.js) */
html body [data-lb="off"] img{cursor:default !important}

/* ── REDUCED MOTION GUARD (apply first) ─────────────────────── */
@media (prefers-reduced-motion: reduce) {
  .ys-hover--scale,
  .ys-hover--glow,
  .ys-hover--lift,
  .ys-hover--rotate-3d,
  .ys-hover--slide-underline,
  .ys-hover--color-shift,
  .ys-hover--brightness-pop,
  .ys-hover--border-grow,
  .ys-reveal,
  .ys-reveal--slide-left,
  .ys-reveal--zoom,
  .ys-reveal--stagger > *,
  .ys-reveal--parallax,
  .ys-skeleton,
  .ys-spinner,
  .ys-dot-loader > span,
  .ys-modal--fade-in,
  .ys-modal--slide-up,
  .ys-modal--slide-right,
  .ys-modal--scale-bounce {
    transition: none !important;
    animation: none !important;
  }
  .ys-reveal,
  .ys-reveal--slide-left,
  .ys-reveal--zoom,
  .ys-reveal--parallax {
    opacity: 1 !important;
    transform: none !important;
  }
  .ys-reveal--stagger > * {
    opacity: 1 !important;
    transform: none !important;
  }
}

/* ═══════════════════════════════════════════════════════════════
   HOVER EFFECTS (8 variants)
   Wszystkie wykorzystują GPU-accelerated transforms i opacity.
   Dodawaj klasy do dowolnego elementu, np. .ys-card.ys-hover--lift.
   ═══════════════════════════════════════════════════════════════ */

/* ── 1. SCALE ───────────────────────────────────────────────── */
.ys-hover--scale {
  transition: transform 0.3s var(--xx-ease);
  will-change: transform;
  transform-origin: center center;
  cursor: pointer;
}
.ys-hover--scale:hover,
.ys-hover--scale:focus-visible {
  transform: scale(1.03);
}
.ys-hover--scale:active {
  transform: scale(0.98);
}

/* ── 2. GLOW ────────────────────────────────────────────────── */
.ys-hover--glow {
  transition: box-shadow 0.3s var(--xx-ease),
              transform 0.3s var(--xx-ease);
  will-change: box-shadow;
  cursor: pointer;
}
.ys-hover--glow:hover,
.ys-hover--glow:focus-visible {
  box-shadow: 0 12px 40px var(--xx-primary-soft),
              0 4px 12px rgba(0, 0, 0, 0.08);
}
.ys-hover--glow:active {
  box-shadow: 0 4px 16px var(--xx-primary-soft);
}

/* ── 3. SLIDE UNDERLINE ─────────────────────────────────────── */
.ys-hover--slide-underline {
  position: relative;
  display: inline-block;
  cursor: pointer;
  text-decoration: none;
}
.ys-hover--slide-underline::after {
  content: '';
  position: absolute;
  left: 0;
  bottom: -2px;
  width: 0;
  height: 2px;
  background: var(--xx-primary);
  transition: width 0.3s var(--xx-ease);
  pointer-events: none;
}
.ys-hover--slide-underline:hover::after,
.ys-hover--slide-underline:focus-visible::after {
  width: 100%;
}

/* ── 4. LIFT ────────────────────────────────────────────────── */
.ys-hover--lift {
  transition: transform 0.3s var(--xx-ease),
              box-shadow 0.3s var(--xx-ease);
  will-change: transform, box-shadow;
  cursor: pointer;
}
.ys-hover--lift:hover,
.ys-hover--lift:focus-visible {
  transform: translateY(-4px);
  box-shadow: 0 16px 48px rgba(0, 0, 0, 0.12),
              0 6px 16px rgba(0, 0, 0, 0.06);
}
.ys-hover--lift:active {
  transform: translateY(-1px);
  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.08);
}

/* ── 5. COLOR SHIFT ─────────────────────────────────────────── */
.ys-hover--color-shift {
  transition: color 0.3s var(--xx-ease),
              background-color 0.3s var(--xx-ease),
              border-color 0.3s var(--xx-ease);
  cursor: pointer;
  background-color: var(--xx-cream);
  color: var(--xx-text);
}
.ys-hover--color-shift:hover,
.ys-hover--color-shift:focus-visible {
  background-color: var(--xx-primary);
  color: var(--xx-cream);
  border-color: var(--xx-primary);
}
.ys-hover--color-shift:active {
  background-color: var(--xx-primary-dark, var(--xx-primary));
}

/* ── 6. ROTATE 3D ───────────────────────────────────────────── */
.ys-hover--rotate-3d {
  transition: transform 0.5s var(--xx-ease),
              box-shadow 0.5s var(--xx-ease);
  transform-style: preserve-3d;
  will-change: transform;
  cursor: pointer;
}
.ys-hover--rotate-3d:hover,
.ys-hover--rotate-3d:focus-visible {
  transform: perspective(800px) rotateY(5deg) rotateX(2deg);
  box-shadow: -12px 16px 32px rgba(0, 0, 0, 0.12);
}
.ys-hover--rotate-3d:active {
  transform: perspective(800px) rotateY(2deg) rotateX(1deg);
}

/* ── 7. BRIGHTNESS POP ──────────────────────────────────────── */
.ys-hover--brightness-pop {
  transition: filter 0.3s var(--xx-ease),
              transform 0.3s var(--xx-ease);
  will-change: filter;
  cursor: pointer;
}
.ys-hover--brightness-pop:hover,
.ys-hover--brightness-pop:focus-visible {
  filter: brightness(1.1) saturate(1.2);
}
.ys-hover--brightness-pop:active {
  filter: brightness(0.98) saturate(1.1);
}

/* ── 8. BORDER GROW (center-out) ────────────────────────────── */
.ys-hover--border-grow {
  position: relative;
  display: inline-block;
  cursor: pointer;
  padding-bottom: 4px;
}
.ys-hover--border-grow::after {
  content: '';
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  height: 2px;
  background: var(--xx-primary);
  transform: scaleX(0);
  transform-origin: center;
  transition: transform 0.3s var(--xx-ease);
  pointer-events: none;
}
.ys-hover--border-grow:hover::after,
.ys-hover--border-grow:focus-visible::after {
  transform: scaleX(1);
}

/* ═══════════════════════════════════════════════════════════════
   SCROLL REVEAL (5 variants)
   Base state: hidden; add .ys-in via IntersectionObserver in JS.
   Wszystkie używają opacity + transform (GPU-friendly).
   ═══════════════════════════════════════════════════════════════ */

/* ── 1. BASE REVEAL (fade + slide up) ───────────────────────── */
.ys-reveal {
  opacity: 0;
  transform: translateY(20px);
  transition: opacity 0.6s var(--xx-ease),
              transform 0.6s var(--xx-ease);
  will-change: opacity, transform;
}
.ys-reveal.ys-in {
  opacity: 1;
  transform: translateY(0);
}

/* ── 2. SLIDE LEFT ──────────────────────────────────────────── */
.ys-reveal--slide-left {
  opacity: 0;
  transform: translateX(-40px);
  transition: opacity 0.6s var(--xx-ease),
              transform 0.6s var(--xx-ease);
  will-change: opacity, transform;
}
.ys-reveal--slide-left.ys-in {
  opacity: 1;
  transform: translateX(0);
}

/* ── 3. ZOOM ────────────────────────────────────────────────── */
.ys-reveal--zoom {
  opacity: 0;
  transform: scale(0.9);
  transition: opacity 0.6s var(--xx-ease),
              transform 0.6s var(--xx-ease);
  will-change: opacity, transform;
}
.ys-reveal--zoom.ys-in {
  opacity: 1;
  transform: scale(1);
}

/* ── 4. STAGGER (parent class — children animate one by one) ── */
.ys-reveal--stagger > * {
  opacity: 0;
  transform: translateY(16px);
  transition: opacity 0.5s var(--xx-ease),
              transform 0.5s var(--xx-ease);
  will-change: opacity, transform;
}
.ys-reveal--stagger.ys-in > * {
  opacity: 1;
  transform: translateY(0);
}
/* JS sets transition-delay per child (data-stagger-index attr) */
.ys-reveal--stagger.ys-in > *:nth-child(1) { transition-delay: 0s; }
.ys-reveal--stagger.ys-in > *:nth-child(2) { transition-delay: 0.08s; }
.ys-reveal--stagger.ys-in > *:nth-child(3) { transition-delay: 0.16s; }
.ys-reveal--stagger.ys-in > *:nth-child(4) { transition-delay: 0.24s; }
.ys-reveal--stagger.ys-in > *:nth-child(5) { transition-delay: 0.32s; }
.ys-reveal--stagger.ys-in > *:nth-child(6) { transition-delay: 0.40s; }
.ys-reveal--stagger.ys-in > *:nth-child(7) { transition-delay: 0.48s; }
.ys-reveal--stagger.ys-in > *:nth-child(8) { transition-delay: 0.56s; }

/* ── 5. PARALLAX (longer distance, slower) ──────────────────── */
.ys-reveal--parallax {
  opacity: 0;
  transform: translateY(60px);
  transition: opacity 0.9s var(--xx-ease),
              transform 0.9s var(--xx-ease);
  will-change: opacity, transform;
}
.ys-reveal--parallax.ys-in {
  opacity: 1;
  transform: translateY(0);
}

/* ═══════════════════════════════════════════════════════════════
   MODAL ANIMATIONS (4 keyframes + 4 classes + overlay)
   Stosuj klasę .ys-active na modalu by uruchomić animację wejścia.
   Overlay (.ys-modal__overlay) zawsze fade-in.
   ═══════════════════════════════════════════════════════════════ */

/* ── OVERLAY (background dimmer) ────────────────────────────── */
.ys-modal__overlay {
  position: fixed;
  inset: 0;
  background: rgba(0, 0, 0, 0.5);
  opacity: 0;
  animation: xx-overlay-fade 0.3s var(--xx-ease) forwards;
  z-index: 1000;
}
.ys-modal__overlay.ys-closing {
  animation: xx-overlay-fade-out 0.25s var(--xx-ease) forwards;
}
@keyframes xx-overlay-fade {
  from { opacity: 0; }
  to   { opacity: 1; }
}
@keyframes xx-overlay-fade-out {
  from { opacity: 1; }
  to   { opacity: 0; }
}

/* ── MODAL BASE (positioning) ───────────────────────────────── */
.ys-modal {
  position: fixed;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  background: var(--xx-cream);
  color: var(--xx-text);
  border-radius: 12px;
  box-shadow: 0 24px 72px rgba(0, 0, 0, 0.24);
  z-index: 1001;
  max-width: 90vw;
  max-height: 90vh;
  overflow: auto;
  opacity: 0;
}

/* ── 1. FADE IN ─────────────────────────────────────────────── */
@keyframes xx-modal-fade-in {
  from { opacity: 0; transform: translate(-50%, -50%) scale(0.95); }
  to   { opacity: 1; transform: translate(-50%, -50%) scale(1); }
}
.ys-modal--fade-in.ys-active {
  animation: xx-modal-fade-in 0.3s var(--xx-ease) forwards;
}

/* ── 2. SLIDE UP ────────────────────────────────────────────── */
@keyframes xx-modal-slide-up {
  from { opacity: 0; transform: translate(-50%, calc(-50% + 40px)); }
  to   { opacity: 1; transform: translate(-50%, -50%); }
}
.ys-modal--slide-up.ys-active {
  animation: xx-modal-slide-up 0.35s var(--xx-ease) forwards;
}

/* ── 3. SLIDE RIGHT (drawer style) ──────────────────────────── */
@keyframes xx-modal-slide-right {
  from { opacity: 0; transform: translate(100%, -50%); }
  to   { opacity: 1; transform: translate(-50%, -50%); }
}
.ys-modal--slide-right.ys-active {
  animation: xx-modal-slide-right 0.4s var(--xx-ease) forwards;
}
/* Drawer variant: anchored to right edge */
.ys-modal--drawer.ys-modal--slide-right {
  top: 0;
  left: auto;
  right: 0;
  transform: translateX(100%);
  height: 100vh;
  max-height: 100vh;
  border-radius: 0;
  width: min(420px, 90vw);
}
.ys-modal--drawer.ys-modal--slide-right.ys-active {
  animation: xx-drawer-slide-right 0.4s var(--xx-ease) forwards;
}
@keyframes xx-drawer-slide-right {
  from { transform: translateX(100%); }
  to   { transform: translateX(0); }
}

/* ── 4. SCALE BOUNCE ────────────────────────────────────────── */
@keyframes xx-modal-scale-bounce {
  from { opacity: 0; transform: translate(-50%, -50%) scale(0.7); }
  to   { opacity: 1; transform: translate(-50%, -50%) scale(1); }
}
.ys-modal--scale-bounce.ys-active {
  animation: xx-modal-scale-bounce 0.4s cubic-bezier(0.34, 1.56, 0.64, 1) forwards;
}

/* ── MODAL CLOSE (exit animation) ───────────────────────────── */
.ys-modal.ys-closing {
  animation: xx-modal-close 0.25s var(--xx-ease) forwards !important;
}
@keyframes xx-modal-close {
  from { opacity: 1; }
  to   { opacity: 0; transform: translate(-50%, -50%) scale(0.96); }
}

/* ═══════════════════════════════════════════════════════════════
   LOADING STATES (3 patterns)
   Skeleton (placeholder), Spinner (circular), Dot loader (bouncing).
   ═══════════════════════════════════════════════════════════════ */

/* ── 1. SKELETON ────────────────────────────────────────────── */
.ys-skeleton {
  display: block;
  background-color: var(--xx-cream);
  border-radius: 6px;
  animation: xx-skeleton-pulse 1.5s var(--xx-ease) infinite;
  pointer-events: none;
  user-select: none;
  color: transparent;
}
@keyframes xx-skeleton-pulse {
  0%, 100% { background-color: var(--xx-cream); }
  50%      { background-color: var(--xx-cream3, #e8e2d8); }
}
.ys-skeleton--text {
  height: 1em;
  width: 100%;
  margin-bottom: 0.5em;
  border-radius: 4px;
}
.ys-skeleton--text:last-child {
  width: 70%;
  margin-bottom: 0;
}
.ys-skeleton--title {
  height: 1.4em;
  width: 60%;
  margin-bottom: 0.75em;
  border-radius: 4px;
}
.ys-skeleton--circle {
  width: 48px;
  height: 48px;
  border-radius: 50%;
}
.ys-skeleton--image {
  width: 100%;
  aspect-ratio: 16 / 9;
  border-radius: 8px;
}
.ys-skeleton--button {
  width: 120px;
  height: 44px;
  border-radius: 8px;
}

/* ── 2. SPINNER ─────────────────────────────────────────────── */
.ys-spinner {
  display: inline-block;
  width: 24px;
  height: 24px;
  border: 2px solid var(--xx-cream3, #e8e2d8);
  border-top-color: var(--xx-primary);
  border-radius: 50%;
  animation: xx-spinner 0.8s linear infinite;
  vertical-align: middle;
}
@keyframes xx-spinner {
  to { transform: rotate(360deg); }
}
.ys-spinner--sm {
  width: 16px;
  height: 16px;
  border-width: 2px;
}
.ys-spinner--lg {
  width: 40px;
  height: 40px;
  border-width: 3px;
}
.ys-spinner--cream {
  border-color: rgba(255, 255, 255, 0.3);
  border-top-color: var(--xx-cream);
}

/* ── 3. DOT LOADER ──────────────────────────────────────────── */
.ys-dot-loader {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  line-height: 1;
}
.ys-dot-loader > span {
  display: inline-block;
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--xx-primary);
  animation: xx-dot-bounce 1.4s var(--xx-ease) infinite both;
  opacity: 0.5;
}
.ys-dot-loader > span:nth-child(1) { animation-delay: 0s; }
.ys-dot-loader > span:nth-child(2) { animation-delay: 0.15s; }
.ys-dot-loader > span:nth-child(3) { animation-delay: 0.3s; }
@keyframes xx-dot-bounce {
  0%, 80%, 100% {
    transform: scale(0.6);
    opacity: 0.5;
  }
  40% {
    transform: scale(1);
    opacity: 1;
  }
}
.ys-dot-loader--lg > span {
  width: 12px;
  height: 12px;
}
.ys-dot-loader--cream > span {
  background: var(--xx-cream);
}

/* ═══════════════════════════════════════════════════════════════
   FORM VALIDATION VISUALS (3)
   Klasy aplikowane przez JS na podstawie state walidacji.
   Zielone/czerwone explicit (nie zmieniają się per klient).
   ═══════════════════════════════════════════════════════════════ */

/* ── 1. INPUT VALID (green checkmark) ───────────────────────── */
.ys-input--valid {
  border-color: #2ECC71 !important;
  padding-right: 36px !important;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16' fill='none' stroke='%232ECC71' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'><polyline points='3 8 7 12 13 4'/></svg>") !important;
  background-repeat: no-repeat !important;
  background-position: right 10px center !important;
  background-size: 16px 16px !important;
  transition: border-color 0.2s var(--xx-ease);
}

/* ── 2. INPUT ERROR (red x mark) ────────────────────────────── */
.ys-input--error {
  border-color: #E74C3C !important;
  padding-right: 36px !important;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16' fill='none' stroke='%23E74C3C' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'><line x1='4' y1='4' x2='12' y2='12'/><line x1='12' y1='4' x2='4' y2='12'/></svg>") !important;
  background-repeat: no-repeat !important;
  background-position: right 10px center !important;
  background-size: 16px 16px !important;
  transition: border-color 0.2s var(--xx-ease);
}

/* ── 3. ERROR MESSAGE (below input) ─────────────────────────── */
.ys-input-error-msg {
  color: #E74C3C;
  font-size: 13px;
  line-height: 1.4;
  margin-top: 6px;
  display: flex;
  align-items: center;
  gap: 6px;
}
.ys-input-error-msg::before {
  content: '';
  display: inline-block;
  width: 14px;
  height: 14px;
  flex-shrink: 0;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 14 14' fill='none' stroke='%23E74C3C' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><circle cx='7' cy='7' r='6'/><line x1='7' y1='4' x2='7' y2='8'/><line x1='7' y1='10' x2='7' y2='10'/></svg>");
  background-repeat: no-repeat;
  background-position: center;
}

/* ── SHAKE ANIMATION (invalid submit) ───────────────────────── */
@keyframes xx-input-shake {
  0%, 100% { transform: translateX(0); }
  25%      { transform: translateX(-6px); }
  75%      { transform: translateX(6px); }
}
.ys-input--shake {
  animation: xx-input-shake 0.3s var(--xx-ease);
}

/* ── FOCUS RING (valid/error states) ────────────────────────── */
.ys-input--valid:focus {
  outline: none;
  box-shadow: 0 0 0 3px rgba(46, 204, 113, 0.2);
}
.ys-input--error:focus {
  outline: none;
  box-shadow: 0 0 0 3px rgba(231, 76, 60, 0.2);
}

/* ═══════════════════════════════════════════════════════════════
   COMBINATION UTILITIES
   Klasy łączące kilka efektów (np. card z lift + glow).
   Dodawaj do karty/buttonu by jednym slug-em włączyć kompozyt.
   ═══════════════════════════════════════════════════════════════ */

/* ── CARD INTERACTION (lift + glow) ─────────────────────────── */
.ys-hover--card {
  transition: transform 0.3s var(--xx-ease),
              box-shadow 0.3s var(--xx-ease);
  will-change: transform, box-shadow;
  cursor: pointer;
}
.ys-hover--card:hover,
.ys-hover--card:focus-visible {
  transform: translateY(-4px);
  box-shadow: 0 16px 48px rgba(0, 0, 0, 0.12),
              0 0 24px var(--xx-primary-soft);
}
.ys-hover--card:active {
  transform: translateY(-1px);
}

/* ── IMAGE ZOOM (within fixed-size container) ───────────────── */
.ys-hover--image-zoom {
  overflow: hidden;
  position: relative;
}
.ys-hover--image-zoom img,
.ys-hover--image-zoom > picture > img {
  transition: transform 0.5s var(--xx-ease);
  will-change: transform;
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.ys-hover--image-zoom:hover img,
.ys-hover--image-zoom:focus-visible img,
.ys-hover--image-zoom:hover > picture > img,
.ys-hover--image-zoom:focus-visible > picture > img {
  transform: scale(1.06);
}

/* ── OVERLAY REVEAL (caption on hover) ──────────────────────── */
.ys-hover--overlay {
  position: relative;
  overflow: hidden;
  cursor: pointer;
}
.ys-hover--overlay::before {
  content: '';
  position: absolute;
  inset: 0;
  background: linear-gradient(to top,
              rgba(0, 0, 0, 0.6) 0%,
              rgba(0, 0, 0, 0) 60%);
  opacity: 0;
  transition: opacity 0.3s var(--xx-ease);
  pointer-events: none;
  z-index: 1;
}
.ys-hover--overlay:hover::before,
.ys-hover--overlay:focus-visible::before {
  opacity: 1;
}

/* ═══════════════════════════════════════════════════════════════
   DURATION + DELAY UTILITIES
   Dodaj klasę by precyzyjnie sterować czasem animacji/transition.
   Działa z .ys-reveal*, .ys-hover--*, .ys-modal--*.
   ═══════════════════════════════════════════════════════════════ */

.ys-dur-150 { transition-duration: 0.15s !important; animation-duration: 0.15s !important; }
.ys-dur-200 { transition-duration: 0.2s  !important; animation-duration: 0.2s  !important; }
.ys-dur-300 { transition-duration: 0.3s  !important; animation-duration: 0.3s  !important; }
.ys-dur-500 { transition-duration: 0.5s  !important; animation-duration: 0.5s  !important; }
.ys-dur-700 { transition-duration: 0.7s  !important; animation-duration: 0.7s  !important; }
.ys-dur-1000 { transition-duration: 1s   !important; animation-duration: 1s   !important; }

.ys-delay-0   { transition-delay: 0s     !important; animation-delay: 0s     !important; }
.ys-delay-100 { transition-delay: 0.1s   !important; animation-delay: 0.1s   !important; }
.ys-delay-200 { transition-delay: 0.2s   !important; animation-delay: 0.2s   !important; }
.ys-delay-300 { transition-delay: 0.3s   !important; animation-delay: 0.3s   !important; }
.ys-delay-500 { transition-delay: 0.5s   !important; animation-delay: 0.5s   !important; }
.ys-delay-700 { transition-delay: 0.7s   !important; animation-delay: 0.7s   !important; }

/* ═══════════════════════════════════════════════════════════════
   CURSOR + STATE HELPERS
   ═══════════════════════════════════════════════════════════════ */

.ys-cursor-pointer { cursor: pointer; }
.ys-cursor-help    { cursor: help; }
.ys-cursor-grab    { cursor: grab; }
.ys-cursor-grab:active { cursor: grabbing; }
.ys-cursor-not-allowed { cursor: not-allowed; }

.ys-state-loading {
  pointer-events: none;
  opacity: 0.6;
  position: relative;
}
.ys-state-loading::after {
  content: '';
  position: absolute;
  inset: 0;
  background: rgba(255, 255, 255, 0.3);
  pointer-events: none;
}

.ys-state-disabled {
  pointer-events: none;
  opacity: 0.5;
  filter: grayscale(0.4);
  cursor: not-allowed;
}

/* ═══════════════════════════════════════════════════════════════
   PRINT MEDIA — disable all interactions/animations
   ═══════════════════════════════════════════════════════════════ */
@media print {
  .ys-skeleton,
  .ys-spinner,
  .ys-dot-loader,
  .ys-modal__overlay,
  .ys-modal {
    display: none !important;
  }
  .ys-reveal,
  .ys-reveal--slide-left,
  .ys-reveal--zoom,
  .ys-reveal--stagger > *,
  .ys-reveal--parallax {
    opacity: 1 !important;
    transform: none !important;
  }
}

/* ═══════════════════════════════════════════════════════════════
   END LAYER 7 — INTERACTIONS
   ═══════════════════════════════════════════════════════════════ */



/* ============================================================
   LAYER 8 — DIVIDERS / PATTERNS
   ============================================================ */

/* ═══════════════════════════════════════════════════════════════
   LAYER 8 — DIVIDERS + PATTERNS + TEXTURES
   Visual accents do separowania sekcji i bogacenia teł.

   - Curved dividers (5): SVG shape masks między sekcjami
   - Wave dividers (5): soft/double/sharp/organic/thin
   - Geometric patterns (5): dots/lines/triangles/hexagon/diamond
   - Organic shapes (5): blob masks
   - Texture overlays (5): paper/fabric/grunge/noise/watercolor
   - Vibe-specific accents (8): luxury gold-leaf, art-deco sunburst, mountain topo, etc.

   Wszystkie SVG inline jako data: URI — bez assets zewnętrznych.
   ═══════════════════════════════════════════════════════════════ */


/* ───────────────────────────────────────────────────────────────
   1) CURVED DIVIDERS
   Sekcyjne przejścia z miękkimi krzywymi Béziera.
   Wszystkie wymagają parenta z kolorem dolnej sekcji.
   Element sam ma kolor górnej sekcji, ::after rysuje wycinek dolnej.
   ─────────────────────────────────────────────────────────────── */

.ys-divider--curve-down {
  position: relative;
  height: 100px;
  width: 100%;
  background: var(--xx-bg, #FAFAF5);
  margin: 0;
  pointer-events: none;
  overflow: hidden;
  color: var(--xx-cream, #FAFAF5);
}
.ys-divider--curve-down::after {
  content: '';
  position: absolute;
  bottom: 0;
  left: 0;
  right: 0;
  height: 100%;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1440 100' preserveAspectRatio='none'><path fill='%23FAFAF5' d='M0,60 C480,0 960,120 1440,60 L1440,100 L0,100 Z'/></svg>");
  background-size: 100% 100%;
  background-repeat: no-repeat;
  pointer-events: none;
}

.ys-divider--curve-up {
  position: relative;
  height: 100px;
  width: 100%;
  background: var(--xx-bg, #FAFAF5);
  margin: 0;
  pointer-events: none;
  overflow: hidden;
}
.ys-divider--curve-up::after {
  content: '';
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  height: 100%;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1440 100' preserveAspectRatio='none'><path fill='%23FAFAF5' d='M0,40 C480,100 960,-20 1440,40 L1440,0 L0,0 Z'/></svg>");
  background-size: 100% 100%;
  background-repeat: no-repeat;
  pointer-events: none;
}

.ys-divider--curve-asym {
  position: relative;
  height: 120px;
  width: 100%;
  background: var(--xx-bg, #FAFAF5);
  margin: 0;
  pointer-events: none;
  overflow: hidden;
}
.ys-divider--curve-asym::after {
  content: '';
  position: absolute;
  bottom: 0;
  left: 0;
  right: 0;
  height: 100%;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1440 120' preserveAspectRatio='none'><path fill='%23FAFAF5' d='M0,20 C300,100 800,40 1100,90 C1280,118 1380,110 1440,90 L1440,120 L0,120 Z'/></svg>");
  background-size: 100% 100%;
  background-repeat: no-repeat;
  pointer-events: none;
}

.ys-divider--curve-tilt {
  position: relative;
  height: 110px;
  width: 100%;
  background: var(--xx-bg, #FAFAF5);
  margin: 0;
  pointer-events: none;
  overflow: hidden;
}
.ys-divider--curve-tilt::after {
  content: '';
  position: absolute;
  bottom: 0;
  left: 0;
  right: 0;
  height: 100%;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1440 110' preserveAspectRatio='none'><path fill='%23FAFAF5' d='M0,90 C400,70 800,40 1440,10 L1440,110 L0,110 Z'/></svg>");
  background-size: 100% 100%;
  background-repeat: no-repeat;
  pointer-events: none;
}

.ys-divider--curve-double {
  position: relative;
  height: 130px;
  width: 100%;
  background: var(--xx-bg, #FAFAF5);
  margin: 0;
  pointer-events: none;
  overflow: hidden;
}
.ys-divider--curve-double::before {
  content: '';
  position: absolute;
  bottom: 10px;
  left: 0;
  right: 0;
  height: 100%;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1440 100' preserveAspectRatio='none'><path fill='%23EEEEE4' opacity='0.6' d='M0,50 C320,10 720,90 1440,50 L1440,100 L0,100 Z'/></svg>");
  background-size: 100% 100%;
  background-repeat: no-repeat;
  pointer-events: none;
}
.ys-divider--curve-double::after {
  content: '';
  position: absolute;
  bottom: 0;
  left: 0;
  right: 0;
  height: 100%;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1440 100' preserveAspectRatio='none'><path fill='%23FAFAF5' d='M0,70 C480,20 960,110 1440,60 L1440,100 L0,100 Z'/></svg>");
  background-size: 100% 100%;
  background-repeat: no-repeat;
  pointer-events: none;
}


/* ───────────────────────────────────────────────────────────────
   2) WAVE DIVIDERS
   Wave/zigzag variants — flowing transitions inspired by water/wind.
   ─────────────────────────────────────────────────────────────── */

.ys-divider--wave-soft {
  position: relative;
  height: 80px;
  width: 100%;
  background: var(--xx-bg, #FAFAF5);
  margin: 0;
  pointer-events: none;
  overflow: hidden;
}
.ys-divider--wave-soft::after {
  content: '';
  position: absolute;
  bottom: 0;
  left: 0;
  right: 0;
  height: 100%;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1440 80' preserveAspectRatio='none'><path fill='%23FAFAF5' d='M0,40 C180,10 360,70 540,40 C720,10 900,70 1080,40 C1260,10 1440,40 1440,40 L1440,80 L0,80 Z'/></svg>");
  background-size: 100% 100%;
  background-repeat: no-repeat;
  pointer-events: none;
}

.ys-divider--wave-double {
  position: relative;
  height: 100px;
  width: 100%;
  background: var(--xx-bg, #FAFAF5);
  margin: 0;
  pointer-events: none;
  overflow: hidden;
}
.ys-divider--wave-double::before {
  content: '';
  position: absolute;
  bottom: 8px;
  left: 0;
  right: 0;
  height: 100%;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1440 100' preserveAspectRatio='none'><path fill='%23EEEEE4' opacity='0.55' d='M0,50 C200,20 400,80 600,50 C800,20 1000,80 1200,50 C1320,30 1440,50 1440,50 L1440,100 L0,100 Z'/></svg>");
  background-size: 100% 100%;
  background-repeat: no-repeat;
  pointer-events: none;
}
.ys-divider--wave-double::after {
  content: '';
  position: absolute;
  bottom: 0;
  left: 0;
  right: 0;
  height: 100%;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1440 100' preserveAspectRatio='none'><path fill='%23FAFAF5' d='M0,60 C200,30 400,90 600,60 C800,30 1000,90 1200,60 C1320,40 1440,60 1440,60 L1440,100 L0,100 Z'/></svg>");
  background-size: 100% 100%;
  background-repeat: no-repeat;
  pointer-events: none;
}

.ys-divider--wave-sharp {
  position: relative;
  height: 70px;
  width: 100%;
  background: var(--xx-bg, #FAFAF5);
  margin: 0;
  pointer-events: none;
  overflow: hidden;
}
.ys-divider--wave-sharp::after {
  content: '';
  position: absolute;
  bottom: 0;
  left: 0;
  right: 0;
  height: 100%;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1440 70' preserveAspectRatio='none'><path fill='%23FAFAF5' d='M0,40 L120,10 L240,40 L360,10 L480,40 L600,10 L720,40 L840,10 L960,40 L1080,10 L1200,40 L1320,10 L1440,40 L1440,70 L0,70 Z'/></svg>");
  background-size: 100% 100%;
  background-repeat: no-repeat;
  pointer-events: none;
}

.ys-divider--wave-organic {
  position: relative;
  height: 120px;
  width: 100%;
  background: var(--xx-bg, #FAFAF5);
  margin: 0;
  pointer-events: none;
  overflow: hidden;
}
.ys-divider--wave-organic::after {
  content: '';
  position: absolute;
  bottom: 0;
  left: 0;
  right: 0;
  height: 100%;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1440 120' preserveAspectRatio='none'><path fill='%23FAFAF5' d='M0,60 C120,30 240,100 380,70 C540,40 680,90 820,55 C980,25 1120,95 1260,65 C1340,50 1440,80 1440,80 L1440,120 L0,120 Z'/></svg>");
  background-size: 100% 100%;
  background-repeat: no-repeat;
  pointer-events: none;
}

.ys-divider--wave-thin {
  position: relative;
  height: 40px;
  width: 100%;
  background: var(--xx-bg, #FAFAF5);
  margin: 0;
  pointer-events: none;
  overflow: hidden;
}
.ys-divider--wave-thin::after {
  content: '';
  position: absolute;
  bottom: 0;
  left: 0;
  right: 0;
  height: 100%;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1440 40' preserveAspectRatio='none'><path fill='%23FAFAF5' d='M0,20 C240,5 480,35 720,20 C960,5 1200,35 1440,20 L1440,40 L0,40 Z'/></svg>");
  background-size: 100% 100%;
  background-repeat: no-repeat;
  pointer-events: none;
}


/* ───────────────────────────────────────────────────────────────
   3) GEOMETRIC PATTERNS
   Tileable backgrounds — dots, lines, polygons.
   Aplikuj na sekcje jako bg-image (na .section.ys-pattern--dots).
   ─────────────────────────────────────────────────────────────── */

.ys-pattern--dots {
  background-color: var(--xx-bg, #FAFAF5);
  background-image: radial-gradient(var(--xx-cream3, #DCDCD0) 1px, transparent 1px);
  background-size: 20px 20px;
  background-position: 0 0;
}
.ys-pattern--dots.ys-pattern--lg {
  background-size: 40px 40px;
}
.ys-pattern--dots.ys-pattern--subtle {
  background-image: radial-gradient(rgba(0, 0, 0, 0.06) 1px, transparent 1px);
}

.ys-pattern--lines {
  background-color: var(--xx-bg, #FAFAF5);
  background-image: repeating-linear-gradient(
    45deg,
    var(--xx-cream3, #DCDCD0),
    var(--xx-cream3, #DCDCD0) 1px,
    transparent 1px,
    transparent 12px
  );
}
.ys-pattern--lines.ys-pattern--lg {
  background-image: repeating-linear-gradient(
    45deg,
    var(--xx-cream3, #DCDCD0),
    var(--xx-cream3, #DCDCD0) 2px,
    transparent 2px,
    transparent 24px
  );
}
.ys-pattern--lines.ys-pattern--subtle {
  background-image: repeating-linear-gradient(
    45deg,
    rgba(0, 0, 0, 0.04),
    rgba(0, 0, 0, 0.04) 1px,
    transparent 1px,
    transparent 12px
  );
}

.ys-pattern--triangles {
  background-color: var(--xx-bg, #FAFAF5);
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='40' height='40' viewBox='0 0 40 40'><path fill='none' stroke='%23DCDCD0' stroke-width='1' d='M20,5 L35,35 L5,35 Z'/></svg>");
  background-size: 40px 40px;
  background-repeat: repeat;
}
.ys-pattern--triangles.ys-pattern--lg {
  background-size: 80px 80px;
}
.ys-pattern--triangles.ys-pattern--subtle {
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='40' height='40' viewBox='0 0 40 40'><path fill='none' stroke='rgba(0,0,0,0.05)' stroke-width='1' d='M20,5 L35,35 L5,35 Z'/></svg>");
}

.ys-pattern--hexagon {
  background-color: var(--xx-bg, #FAFAF5);
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='56' height='100' viewBox='0 0 56 100'><path fill='none' stroke='%23DCDCD0' stroke-width='1' d='M28,1 L55,17 L55,49 L28,65 L1,49 L1,17 Z M28,65 L55,81 L55,113 M28,65 L1,81 L1,113'/></svg>");
  background-size: 56px 100px;
  background-repeat: repeat;
}
.ys-pattern--hexagon.ys-pattern--lg {
  background-size: 112px 200px;
}
.ys-pattern--hexagon.ys-pattern--subtle {
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='56' height='100' viewBox='0 0 56 100'><path fill='none' stroke='rgba(0,0,0,0.05)' stroke-width='1' d='M28,1 L55,17 L55,49 L28,65 L1,49 L1,17 Z M28,65 L55,81 L55,113 M28,65 L1,81 L1,113'/></svg>");
}

.ys-pattern--diamond {
  background-color: var(--xx-bg, #FAFAF5);
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='40' height='40' viewBox='0 0 40 40'><path fill='none' stroke='%23DCDCD0' stroke-width='1' d='M20,2 L38,20 L20,38 L2,20 Z'/></svg>");
  background-size: 40px 40px;
  background-repeat: repeat;
}
.ys-pattern--diamond.ys-pattern--lg {
  background-size: 80px 80px;
}
.ys-pattern--diamond.ys-pattern--subtle {
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='40' height='40' viewBox='0 0 40 40'><path fill='none' stroke='rgba(0,0,0,0.05)' stroke-width='1' d='M20,2 L38,20 L20,38 L2,20 Z'/></svg>");
}


/* ───────────────────────────────────────────────────────────────
   4) ORGANIC SHAPES — BLOBS
   Absolutely positioned, decorative.
   Parent musi mieć position: relative + overflow: hidden.
   Kolor wypełnienia via currentColor → ustaw color: var(--xx-primary).
   ─────────────────────────────────────────────────────────────── */

.ys-blob {
  position: absolute;
  pointer-events: none;
  z-index: 0;
  width: 400px;
  height: 400px;
  opacity: 0.15;
  background-repeat: no-repeat;
  background-size: contain;
  color: var(--xx-primary, var(--ys-primary));
}
.ys-blob--top-right { top: -100px; right: -100px; }
.ys-blob--top-left { top: -100px; left: -100px; }
.ys-blob--bottom-right { bottom: -100px; right: -100px; }
.ys-blob--bottom-left { bottom: -100px; left: -100px; }
.ys-blob--sm { width: 220px; height: 220px; }
.ys-blob--lg { width: 600px; height: 600px; }

.ys-blob--soft {
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 200 200'><path fill='%23722F37' d='M44.6,-67.5C57.8,-58.6,68.3,-44.6,73.6,-29.2C78.9,-13.8,79,3,73.4,17.6C67.8,32.1,56.5,44.4,43.4,54.6C30.3,64.8,15.1,73,-0.8,74.1C-16.7,75.2,-33.3,69.3,-46.7,59.2C-60.1,49.1,-70.2,34.8,-74.5,18.7C-78.7,2.6,-77,-15.3,-69.7,-30C-62.5,-44.7,-49.6,-56.1,-35.6,-65C-21.5,-73.8,-6.4,-80,8.7,-79.5C23.7,-79,31.5,-76.3,44.6,-67.5Z' transform='translate(100 100)'/></svg>");
}

.ys-blob--spike {
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 200 200'><path fill='%23722F37' d='M48.5,-58.2L62.7,-49.3L72.1,-32.9L74.8,-12.5L70.8,7.6L60.1,28.5L43.3,49.4L21.8,68.1L-3.6,73L-29.5,64.5L-50.4,46.6L-66.2,22.9L-72.8,-4.5L-68.3,-32.5L-53.1,-52.8L-31.8,-65.7L-7.9,-71.6L17.6,-69.5L34.3,-67.1Z' transform='translate(100 100)'/></svg>");
}

.ys-blob--circle-organic {
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 200 200'><path fill='%23722F37' d='M51,-67.5C66.1,-58.4,77.9,-43.1,82.5,-26.1C87.1,-9.1,84.5,9.6,77.2,25.5C69.9,41.4,57.9,54.6,43.2,63C28.5,71.4,11.1,75,-5.5,82.2C-22.1,89.4,-37.9,100.1,-50.3,95.2C-62.7,90.3,-71.8,69.7,-77.7,50.5C-83.6,31.3,-86.3,13.6,-83.9,-3.2C-81.5,-19.9,-74.1,-35.6,-63.1,-46.1C-52.1,-56.6,-37.5,-61.9,-23.4,-69.5C-9.3,-77.1,4.3,-87.1,18.7,-86C33.1,-84.9,48.3,-72.7,51,-67.5Z' transform='translate(100 100)'/></svg>");
}

.ys-blob--asym {
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 200 200'><path fill='%23722F37' d='M37.5,-55.8C47.4,-49.7,53.5,-37.4,61.6,-23.7C69.7,-10,79.7,5.1,79.1,19.6C78.4,34.1,67.1,48,53.2,57.3C39.4,66.7,23.1,71.5,7.1,68.7C-9,65.9,-24.6,55.5,-39.1,46.2C-53.5,36.9,-66.7,28.7,-72.8,16.2C-78.8,3.6,-77.7,-13.4,-70.4,-26.7C-63.1,-40,-49.7,-49.6,-36.1,-55.1C-22.4,-60.5,-8.5,-61.7,3.6,-66.8C15.7,-71.8,27.5,-61.9,37.5,-55.8Z' transform='translate(100 100)'/></svg>");
}

.ys-blob--small {
  width: 220px;
  height: 220px;
  opacity: 0.18;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 200 200'><path fill='%23722F37' d='M53.7,-65.5C66.4,-55.6,71.4,-35.9,73.3,-17.4C75.2,1.2,74,18.6,66.6,33.3C59.2,48,45.6,60,30,67.1C14.4,74.2,-3.2,76.4,-19.6,72.1C-36,67.7,-51.2,56.7,-61.8,42.4C-72.4,28.1,-78.3,10.6,-76.3,-5.7C-74.3,-22,-64.4,-37.1,-51.5,-46.8C-38.6,-56.5,-22.7,-60.8,-4.5,-55.7C13.7,-50.6,41,-75.4,53.7,-65.5Z' transform='translate(100 100)'/></svg>");
}


/* ───────────────────────────────────────────────────────────────
   5) TEXTURE OVERLAYS
   Subtelne nakładki na sekcje — paper, fabric, grain.
   Element musi mieć position: relative; texture-y nakładane via ::after.
   ─────────────────────────────────────────────────────────────── */

.ys-texture--paper {
  position: relative;
}
.ys-texture--paper::after {
  content: '';
  position: absolute;
  inset: 0;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='200' height='200'><filter id='p'><feTurbulence type='fractalNoise' baseFrequency='0.65' numOctaves='3' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 0.2 0 0 0 0 0.2 0 0 0 0 0.2 0 0 0 0.15 0'/></filter><rect width='200' height='200' filter='url(%23p)'/></svg>");
  background-size: 200px 200px;
  opacity: 0.04;
  pointer-events: none;
  mix-blend-mode: multiply;
  z-index: 1;
}

.ys-texture--fabric {
  position: relative;
}
.ys-texture--fabric::after {
  content: '';
  position: absolute;
  inset: 0;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'><path fill='none' stroke='%23000000' stroke-width='0.5' opacity='0.4' d='M0,0 L8,8 M0,8 L8,0'/></svg>");
  background-size: 8px 8px;
  background-repeat: repeat;
  opacity: 0.06;
  pointer-events: none;
  mix-blend-mode: multiply;
  z-index: 1;
}

.ys-texture--grunge {
  position: relative;
}
.ys-texture--grunge::after {
  content: '';
  position: absolute;
  inset: 0;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='300' height='300'><filter id='g'><feTurbulence type='turbulence' baseFrequency='0.02 0.15' numOctaves='5' seed='3' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 0.1 0 0 0 0 0.1 0 0 0 0 0.1 0 0 0 1 0'/></filter><rect width='300' height='300' filter='url(%23g)'/></svg>");
  background-size: 300px 300px;
  opacity: 0.08;
  pointer-events: none;
  mix-blend-mode: multiply;
  z-index: 1;
}

.ys-texture--noise {
  position: relative;
}
.ys-texture--noise::after {
  content: '';
  position: absolute;
  inset: 0;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='100' height='100'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/></filter><rect width='100' height='100' filter='url(%23n)' opacity='0.6'/></svg>");
  background-size: 100px 100px;
  opacity: 0.05;
  pointer-events: none;
  mix-blend-mode: multiply;
  z-index: 1;
}

.ys-texture--watercolor {
  position: relative;
}
.ys-texture--watercolor::after {
  content: '';
  position: absolute;
  inset: 0;
  background-image:
    radial-gradient(circle at 20% 30%, rgba(204, 27, 34, 0.08) 0%, transparent 50%),
    radial-gradient(circle at 75% 60%, rgba(212, 165, 116, 0.07) 0%, transparent 55%),
    radial-gradient(circle at 50% 90%, rgba(143, 175, 162, 0.06) 0%, transparent 60%);
  background-size: 100% 100%;
  background-repeat: no-repeat;
  opacity: 0.85;
  pointer-events: none;
  mix-blend-mode: multiply;
  z-index: 1;
}


/* ───────────────────────────────────────────────────────────────
   6) VIBE-SPECIFIC ACCENTS
   Selektory dziedziczone z parenta z [data-vibe="..."].
   Każdy accent to opcjonalny element dekoracyjny obok komponentu.
   ─────────────────────────────────────────────────────────────── */

/* 6.1) LUXURY HERITAGE — gold leaf w rogach */
[data-vibe="luxury-heritage"] .ys-accent--gold-leaf {
  position: relative;
}
[data-vibe="luxury-heritage"] .ys-accent--gold-leaf::before,
[data-vibe="luxury-heritage"] .ys-accent--gold-leaf::after {
  content: '';
  position: absolute;
  width: 80px;
  height: 80px;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 80 80'><path fill='%23C9A961' opacity='0.85' d='M10,10 Q40,5 70,10 Q65,40 70,70 Q40,65 10,70 Q15,40 10,10 Z M20,20 L60,20 M20,60 L60,60 M20,20 L20,60 M60,20 L60,60'/><path fill='none' stroke='%23C9A961' stroke-width='1.2' d='M15,15 L65,15 L65,65 L15,65 Z M25,25 L55,25 L55,55 L25,55 Z'/></svg>");
  background-repeat: no-repeat;
  background-size: contain;
  pointer-events: none;
}
[data-vibe="luxury-heritage"] .ys-accent--gold-leaf::before {
  top: 10px;
  left: 10px;
}
[data-vibe="luxury-heritage"] .ys-accent--gold-leaf::after {
  bottom: 10px;
  right: 10px;
  transform: rotate(180deg);
}

/* 6.2) ART DECO VINTAGE — sunburst za nagłówkiem */
[data-vibe="art-deco-vintage"] .ys-accent--sunburst {
  position: relative;
}
[data-vibe="art-deco-vintage"] .ys-accent--sunburst::before {
  content: '';
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  width: 400px;
  height: 400px;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 200 200'><g fill='none' stroke='%23D4A574' stroke-width='1.2' opacity='0.4'><circle cx='100' cy='100' r='30'/><circle cx='100' cy='100' r='50'/><circle cx='100' cy='100' r='75'/><path d='M100,100 L100,10 M100,100 L100,190 M100,100 L10,100 M100,100 L190,100 M100,100 L36,36 M100,100 L164,36 M100,100 L36,164 M100,100 L164,164 M100,100 L65,15 M100,100 L135,15 M100,100 L185,65 M100,100 L185,135 M100,100 L135,185 M100,100 L65,185 M100,100 L15,135 M100,100 L15,65'/></g></svg>");
  background-repeat: no-repeat;
  background-size: contain;
  pointer-events: none;
  z-index: 0;
}
[data-vibe="art-deco-vintage"] .ys-accent--sunburst > * {
  position: relative;
  z-index: 1;
}

/* 6.3) MOUNTAIN RUGGED — topografia */
[data-vibe="mountain-rugged"] .ys-accent--topo {
  background-color: var(--xx-bg, #FAFAF5);
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 400 400'><g fill='none' stroke='%23556B5D' stroke-width='0.7' opacity='0.35'><path d='M0,200 Q100,150 200,200 T400,200'/><path d='M0,180 Q100,130 200,180 T400,180'/><path d='M0,160 Q100,110 200,160 T400,160'/><path d='M0,220 Q100,170 200,220 T400,220'/><path d='M0,240 Q100,190 200,240 T400,240'/><path d='M0,260 Q100,210 200,260 T400,260'/><path d='M0,140 Q120,90 240,140 T400,140'/><path d='M0,120 Q140,70 280,120 T400,120'/><path d='M0,280 Q120,230 240,280 T400,280'/><path d='M0,300 Q140,250 280,300 T400,300'/></g></svg>");
  background-size: 400px 400px;
  background-repeat: repeat;
}

/* 6.4) MODERN COASTAL — shells scattered */
[data-vibe="modern-coastal"] .ys-accent--shells {
  position: relative;
}
[data-vibe="modern-coastal"] .ys-accent--shells::before {
  content: '';
  position: absolute;
  inset: 0;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 240 240'><g fill='none' stroke='%237BA7BC' stroke-width='1' opacity='0.4'><path d='M30,30 Q40,20 50,30 Q45,40 30,30 M35,30 L35,42 M40,30 L40,42 M45,30 L45,42'/><path d='M170,60 Q185,50 200,60 Q195,75 170,60 M178,60 L178,77 M186,60 L186,77 M194,60 L194,77'/><path d='M80,140 Q95,130 110,140 Q105,155 80,140 M88,140 L88,157 M96,140 L96,157 M104,140 L104,157'/><path d='M190,180 Q200,170 210,180 Q205,190 190,180 M195,180 L195,192 M200,180 L200,192 M205,180 L205,192'/><path d='M40,200 Q55,190 70,200 Q65,215 40,200 M48,200 L48,217 M56,200 L56,217 M64,200 L64,217'/></g></svg>");
  background-size: 240px 240px;
  background-repeat: repeat;
  pointer-events: none;
  z-index: 0;
  opacity: 0.7;
}

/* 6.5) BOUTIQUE ROMANTIC — script flourish */
[data-vibe="boutique-romantic"] .ys-accent--script {
  position: relative;
  padding-bottom: 60px;
}
[data-vibe="boutique-romantic"] .ys-accent--script::after {
  content: '';
  position: absolute;
  bottom: 10px;
  left: 50%;
  transform: translateX(-50%);
  width: 280px;
  height: 40px;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 280 40'><path fill='none' stroke='%23B47B84' stroke-width='1.3' stroke-linecap='round' d='M10,20 Q40,5 70,20 Q100,35 130,20 Q160,5 190,20 Q220,35 250,20 Q260,15 270,20 M140,28 L140,32 M135,30 L145,30'/></svg>");
  background-repeat: no-repeat;
  background-size: contain;
  pointer-events: none;
}

/* 6.6) ECO GLAMPING — leaves w rogach */
[data-vibe="eco-glamping"] .ys-accent--leaves {
  position: relative;
}
[data-vibe="eco-glamping"] .ys-accent--leaves::before,
[data-vibe="eco-glamping"] .ys-accent--leaves::after {
  content: '';
  position: absolute;
  width: 120px;
  height: 120px;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 120 120'><g fill='%236B8E5A' opacity='0.55'><path d='M60,15 Q35,40 35,75 Q35,95 60,105 Q60,80 60,15 Z'/><path d='M60,15 Q85,40 85,75 Q85,95 60,105 Q60,80 60,15 Z' opacity='0.7'/><path d='M60,30 L60,100' stroke='%23556B5D' stroke-width='0.8' fill='none'/></g></svg>");
  background-repeat: no-repeat;
  background-size: contain;
  pointer-events: none;
}
[data-vibe="eco-glamping"] .ys-accent--leaves::before {
  top: 0;
  left: 0;
  transform: rotate(-25deg);
}
[data-vibe="eco-glamping"] .ys-accent--leaves::after {
  bottom: 0;
  right: 0;
  transform: rotate(155deg);
}

/* 6.7) INDUSTRIAL LOFT — exposed brick wash */
[data-vibe="industrial-loft"] .ys-accent--brick {
  background-color: var(--xx-bg, #FAFAF5);
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 120 60'><g fill='none' stroke='%238A5A40' stroke-width='0.8' opacity='0.25'><rect x='0' y='0' width='60' height='30'/><rect x='60' y='0' width='60' height='30'/><rect x='-30' y='30' width='60' height='30'/><rect x='30' y='30' width='60' height='30'/><rect x='90' y='30' width='60' height='30'/></g></svg>");
  background-size: 120px 60px;
  background-repeat: repeat;
}
[data-vibe="industrial-loft"] .ys-accent--brick::after {
  content: '';
  position: absolute;
  inset: 0;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='300' height='300'><filter id='ib'><feTurbulence type='fractalNoise' baseFrequency='0.7' numOctaves='2' stitchTiles='stitch'/></filter><rect width='300' height='300' filter='url(%23ib)'/></svg>");
  background-size: 300px 300px;
  opacity: 0.07;
  pointer-events: none;
  mix-blend-mode: multiply;
}

/* 6.8) ASIAN ZEN — ink brush stroke */
[data-vibe="asian-zen"] .ys-accent--ink-brush {
  position: relative;
  padding: 30px 0;
  text-align: center;
}
[data-vibe="asian-zen"] .ys-accent--ink-brush::before {
  content: '';
  display: block;
  width: 240px;
  height: 30px;
  margin: 0 auto 20px;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 240 30'><path fill='%232C2C2C' opacity='0.78' d='M10,15 Q20,8 35,12 Q60,18 90,14 Q120,10 150,16 Q180,22 210,15 Q220,12 228,15 Q228,18 220,19 Q200,22 175,18 Q140,14 110,18 Q70,22 40,17 Q20,14 10,15 Z'/></svg>");
  background-repeat: no-repeat;
  background-size: contain;
  pointer-events: none;
}


/* ───────────────────────────────────────────────────────────────
   7) UTILITY MODIFIERS — height/size/inversion
   Dodatkowe klasy modyfikujące dividery i wzory.
   ─────────────────────────────────────────────────────────────── */

/* Height modifiers — dla wszystkich dividerów */
.ys-divider--h-sm { height: 50px; }
.ys-divider--h-md { height: 80px; }
.ys-divider--h-lg { height: 140px; }
.ys-divider--h-xl { height: 200px; }

/* Horizontal flip — odbij divider lewo-prawo */
.ys-divider--flip-x::after,
.ys-divider--flip-x::before {
  transform: scaleX(-1);
}

/* Vertical flip — odbij divider gora-dol */
.ys-divider--flip-y::after,
.ys-divider--flip-y::before {
  transform: scaleY(-1);
}

/* Inverted color variants — gdy gorna sekcja jest ciemna */
.ys-divider--inverted {
  background: var(--xx-dark, #1A1A1A);
}
.ys-divider--inverted::after {
  filter: invert(1) brightness(0.95);
}

/* Pattern positioning helpers */
.ys-pattern--center { background-position: center center; }
.ys-pattern--tl { background-position: top left; }
.ys-pattern--br { background-position: bottom right; }

/* Pattern opacity variants */
.ys-pattern--op-10 { opacity: 0.1; }
.ys-pattern--op-25 { opacity: 0.25; }
.ys-pattern--op-50 { opacity: 0.5; }
.ys-pattern--op-75 { opacity: 0.75; }


/* ───────────────────────────────────────────────────────────────
   8) BLOB COLOR VARIANTS
   Dodatkowe warianty kolorystyczne dla blob — primary/secondary/accent.
   ─────────────────────────────────────────────────────────────── */

.ys-blob--primary { color: var(--xx-primary, var(--ys-primary)); }
.ys-blob--secondary { color: var(--xx-secondary, #1A2B4A); }
.ys-blob--accent { color: var(--xx-accent, #C9A961); }
.ys-blob--neutral { color: var(--xx-cream3, #DCDCD0); }

.ys-blob--op-05 { opacity: 0.05; }
.ys-blob--op-10 { opacity: 0.10; }
.ys-blob--op-20 { opacity: 0.20; }
.ys-blob--op-30 { opacity: 0.30; }


/* ───────────────────────────────────────────────────────────────
   9) DIVIDER COLOR THEME OVERRIDES
   Każdy divider rysuje wycinek o kolorze dolnej sekcji.
   Te klasy nadpisują fill SVG aby pasował do palety klienta.
   ─────────────────────────────────────────────────────────────── */

/* Cream — domyślne tło stron */
.ys-divider--fill-cream.ys-divider--curve-down::after,
.ys-divider--fill-cream.ys-divider--curve-up::after,
.ys-divider--fill-cream.ys-divider--curve-asym::after,
.ys-divider--fill-cream.ys-divider--curve-tilt::after,
.ys-divider--fill-cream.ys-divider--curve-double::after,
.ys-divider--fill-cream.ys-divider--wave-soft::after,
.ys-divider--fill-cream.ys-divider--wave-sharp::after,
.ys-divider--fill-cream.ys-divider--wave-organic::after,
.ys-divider--fill-cream.ys-divider--wave-thin::after {
  filter: none;
}

/* Dark — gdy dolna sekcja na dark mode */
.ys-divider--fill-dark.ys-divider--curve-down::after {
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1440 100' preserveAspectRatio='none'><path fill='%231A1A1A' d='M0,60 C480,0 960,120 1440,60 L1440,100 L0,100 Z'/></svg>");
}
.ys-divider--fill-dark.ys-divider--curve-up::after {
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1440 100' preserveAspectRatio='none'><path fill='%231A1A1A' d='M0,40 C480,100 960,-20 1440,40 L1440,0 L0,0 Z'/></svg>");
}
.ys-divider--fill-dark.ys-divider--wave-soft::after {
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1440 80' preserveAspectRatio='none'><path fill='%231A1A1A' d='M0,40 C180,10 360,70 540,40 C720,10 900,70 1080,40 C1260,10 1440,40 1440,40 L1440,80 L0,80 Z'/></svg>");
}
.ys-divider--fill-dark.ys-divider--wave-sharp::after {
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1440 70' preserveAspectRatio='none'><path fill='%231A1A1A' d='M0,40 L120,10 L240,40 L360,10 L480,40 L600,10 L720,40 L840,10 L960,40 L1080,10 L1200,40 L1320,10 L1440,40 L1440,70 L0,70 Z'/></svg>");
}

/* Primary — gdy dolna sekcja w kolorze marki */
.ys-divider--fill-primary.ys-divider--curve-down::after {
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1440 100' preserveAspectRatio='none'><path fill='%23722F37' d='M0,60 C480,0 960,120 1440,60 L1440,100 L0,100 Z'/></svg>");
}
.ys-divider--fill-primary.ys-divider--curve-up::after {
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1440 100' preserveAspectRatio='none'><path fill='%23722F37' d='M0,40 C480,100 960,-20 1440,40 L1440,0 L0,0 Z'/></svg>");
}
.ys-divider--fill-primary.ys-divider--wave-soft::after {
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1440 80' preserveAspectRatio='none'><path fill='%23722F37' d='M0,40 C180,10 360,70 540,40 C720,10 900,70 1080,40 C1260,10 1440,40 1440,40 L1440,80 L0,80 Z'/></svg>");
}

/* Accent — gdy dolna sekcja zaznaczona kolorem akcentu */
.ys-divider--fill-accent.ys-divider--curve-down::after {
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1440 100' preserveAspectRatio='none'><path fill='%23C9A961' d='M0,60 C480,0 960,120 1440,60 L1440,100 L0,100 Z'/></svg>");
}
.ys-divider--fill-accent.ys-divider--wave-soft::after {
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1440 80' preserveAspectRatio='none'><path fill='%23C9A961' d='M0,40 C180,10 360,70 540,40 C720,10 900,70 1080,40 C1260,10 1440,40 1440,40 L1440,80 L0,80 Z'/></svg>");
}


/* ───────────────────────────────────────────────────────────────
   10) PATTERN COLOR THEME OVERRIDES
   Wzorce w kolorach palety klienta — nie tylko cream3.
   ─────────────────────────────────────────────────────────────── */

.ys-pattern--dots.ys-pattern--primary {
  background-image: radial-gradient(rgba(204, 27, 34, 0.18) 1px, transparent 1px);
}
.ys-pattern--dots.ys-pattern--accent {
  background-image: radial-gradient(rgba(201, 169, 97, 0.22) 1px, transparent 1px);
}
.ys-pattern--dots.ys-pattern--secondary {
  background-image: radial-gradient(rgba(26, 43, 74, 0.20) 1px, transparent 1px);
}

.ys-pattern--lines.ys-pattern--primary {
  background-image: repeating-linear-gradient(
    45deg,
    rgba(204, 27, 34, 0.14),
    rgba(204, 27, 34, 0.14) 1px,
    transparent 1px,
    transparent 12px
  );
}
.ys-pattern--lines.ys-pattern--accent {
  background-image: repeating-linear-gradient(
    45deg,
    rgba(201, 169, 97, 0.18),
    rgba(201, 169, 97, 0.18) 1px,
    transparent 1px,
    transparent 12px
  );
}
.ys-pattern--lines.ys-pattern--secondary {
  background-image: repeating-linear-gradient(
    45deg,
    rgba(26, 43, 74, 0.16),
    rgba(26, 43, 74, 0.16) 1px,
    transparent 1px,
    transparent 12px
  );
}

/* Pattern angle modifiers — zmieniaj kierunek linii */
.ys-pattern--lines.ys-pattern--angle-0 {
  background-image: repeating-linear-gradient(
    0deg,
    var(--xx-cream3, #DCDCD0),
    var(--xx-cream3, #DCDCD0) 1px,
    transparent 1px,
    transparent 12px
  );
}
.ys-pattern--lines.ys-pattern--angle-90 {
  background-image: repeating-linear-gradient(
    90deg,
    var(--xx-cream3, #DCDCD0),
    var(--xx-cream3, #DCDCD0) 1px,
    transparent 1px,
    transparent 12px
  );
}
.ys-pattern--lines.ys-pattern--angle-135 {
  background-image: repeating-linear-gradient(
    135deg,
    var(--xx-cream3, #DCDCD0),
    var(--xx-cream3, #DCDCD0) 1px,
    transparent 1px,
    transparent 12px
  );
}


/* ───────────────────────────────────────────────────────────────
   11) RESPONSIVE ADJUSTMENTS
   Mobile-first — zmniejszamy wysokości i widoczność dekoracji.
   ─────────────────────────────────────────────────────────────── */

@media (max-width: 768px) {
  .ys-divider--curve-down,
  .ys-divider--curve-up,
  .ys-divider--curve-tilt {
    height: 60px;
  }
  .ys-divider--curve-asym,
  .ys-divider--curve-double {
    height: 70px;
  }
  .ys-divider--wave-soft,
  .ys-divider--wave-sharp {
    height: 50px;
  }
  .ys-divider--wave-double,
  .ys-divider--wave-organic {
    height: 60px;
  }
  .ys-divider--wave-thin {
    height: 30px;
  }

  .ys-blob {
    width: 250px;
    height: 250px;
    opacity: 0.10;
  }
  .ys-blob--sm {
    width: 150px;
    height: 150px;
  }
  .ys-blob--lg {
    width: 350px;
    height: 350px;
  }
  .ys-blob--top-right { top: -60px; right: -60px; }
  .ys-blob--top-left { top: -60px; left: -60px; }
  .ys-blob--bottom-right { bottom: -60px; right: -60px; }
  .ys-blob--bottom-left { bottom: -60px; left: -60px; }

  [data-vibe="luxury-heritage"] .ys-accent--gold-leaf::before,
  [data-vibe="luxury-heritage"] .ys-accent--gold-leaf::after {
    width: 50px;
    height: 50px;
  }
  [data-vibe="art-deco-vintage"] .ys-accent--sunburst::before {
    width: 240px;
    height: 240px;
  }
  [data-vibe="eco-glamping"] .ys-accent--leaves::before,
  [data-vibe="eco-glamping"] .ys-accent--leaves::after {
    width: 70px;
    height: 70px;
  }
  [data-vibe="boutique-romantic"] .ys-accent--script::after {
    width: 200px;
    height: 30px;
  }
}

@media (max-width: 480px) {
  .ys-divider--h-xl { height: 100px; }
  .ys-divider--h-lg { height: 80px; }

  .ys-pattern--dots { background-size: 16px 16px; }
  .ys-pattern--dots.ys-pattern--lg { background-size: 28px 28px; }
  .ys-pattern--triangles,
  .ys-pattern--diamond { background-size: 30px 30px; }
  .ys-pattern--hexagon { background-size: 44px 80px; }
}


/* ───────────────────────────────────────────────────────────────
   12) ACCESSIBILITY — REDUCED MOTION + HIGH CONTRAST
   Wyłącz subtelne tekstury gdy user ma reduce-motion albo high-contrast.
   ─────────────────────────────────────────────────────────────── */

@media (prefers-reduced-motion: reduce) {
  .ys-blob,
  .ys-texture--paper::after,
  .ys-texture--fabric::after,
  .ys-texture--grunge::after,
  .ys-texture--noise::after,
  .ys-texture--watercolor::after {
    transition: none !important;
    animation: none !important;
  }
}

@media (prefers-contrast: more) {
  .ys-texture--paper::after,
  .ys-texture--fabric::after,
  .ys-texture--grunge::after,
  .ys-texture--noise::after,
  .ys-texture--watercolor::after {
    display: none;
  }
  .ys-blob {
    opacity: 0.08;
  }
  .ys-pattern--dots,
  .ys-pattern--lines,
  .ys-pattern--triangles,
  .ys-pattern--hexagon,
  .ys-pattern--diamond {
    background-image: none;
  }
}

@media print {
  .ys-divider--curve-down,
  .ys-divider--curve-up,
  .ys-divider--curve-asym,
  .ys-divider--curve-tilt,
  .ys-divider--curve-double,
  .ys-divider--wave-soft,
  .ys-divider--wave-double,
  .ys-divider--wave-sharp,
  .ys-divider--wave-organic,
  .ys-divider--wave-thin {
    display: none;
  }
  .ys-blob,
  .ys-texture--paper::after,
  .ys-texture--fabric::after,
  .ys-texture--grunge::after,
  .ys-texture--noise::after,
  .ys-texture--watercolor::after {
    display: none;
  }
}


/* ───────────────────────────────────────────────────────────────
   END LAYER 8
   Notes:
   - Wszystkie data:image/svg+xml URI używają URL-encoded hex (%23 = #)
   - SVG paths used preserveAspectRatio='none' tam gdzie potrzebne stretch
   - Blob shapes opacity 0.15-0.18 → nie kradną fokusa od treści
   - Vibe accents nakładają się tylko gdy parent ma odpowiedni data-vibe
   - Wszystkie elementy decoratywne pointer-events: none
   - Reduced motion + prefers-contrast respected
   - Print media: wszystkie dekoracje wyłączone
   ─────────────────────────────────────────────────────────────── */



/* ============================================================
   LAYER HOME-SELF-CONTAINED (fullpage: main hidden + hero standalone)
   ============================================================ */

/* ==========================================================================
   LAYER — HOME SELF-CONTAINED (fullpage-home)  [emitowana TYLKO gdy fullpage:true]
   --------------------------------------------------------------------------
   PROBLEM (feedback_idobooking_frontpage_body_top_global — „strona glowna
   rozjechana", Prosty Wynajem v3.10, 2026-07-10):
   Pole /panel/frontpage `fg_body_top_code` jest GLOBALNE (render na KAZDEJ
   podstronie, jak HEAD/body_bottom). Tresc home wklejona tam renderuje sie jako
   blok .ys-home PRZED systemowym <main.fullpage-wrapper>. Na fullpage-home:
     - systemowy <main> (slider + sekcje) laduje POD nasza trescia,
     - hero teleportowany do slidera spada na dol, fixed parallax-image przykrywa gore,
     - jesli home byl KIEDYS tez w polu CMS (main > .section_sub.container) → DUBEL.
   (bxSlider „is not a function" = slepy trop: problem STRUKTURALNY, nie timing HEAD.)

   FIX (kod, niezalezny od fullpage.js / bxSlider / timingu HEAD):
     (1) ukryj CALY systemowy <main> na home — kasuje orphan slider + parallax-image
         + stara kopie dubla (wszystko siedzi w main). Footer jest POZA main →
         nietkniety (zweryfikuj live: el.closest('main.fullpage-wrapper')===null;
         upewnij sie, ze nic potrzebnego nie zostaje w main — #iai_book_form OK,
         bo wyszukiwarke delegujemy do /book-now przez ido-search-delegate).
     (2) hero SAMODZIELNY — nie teleportuje do slidera; wlasne tlo ustawia
         ido-home-selfcontained.js do --ys-hero-bg (src z systemowego slidera
         = wybor klienta w panelu; brak → klasa --noimg = grafitowy gradient).

   GATE .ys-home poza page-index → layer1-traps.css §I (uniwersalny, kazdy klient).

   WERYFIKUJ LIVE (INSTINCT-07): getComputedStyle(main).display==='none',
   hero top≈0, .ys-home widoczny 1×, docHeight spada (dubel znika),
   horizOverflow 0, footer obecny, reveal sekcji na normalnym scrollu.
   PARAMETRYZACJA: `ys` → prefiks klienta (scaffold).
   ========================================================================== */

/* (1) WYLACZONE: tresc home siedzi w SEKCJACH CMS wewnatrz <main> (lessons/078, 093). */

/* (2) hero samodzielny: zdjecie + WOLNY ZOOM (Ken Burns) — DELIVERABLE „zoom na
   glowne zdjecie" (KAZDE wdrozenie, lessons/034). Warstwy:
     ::before — ZDJECIE (JS → --ys-hero-bg) + animacja scale 1→1.12.
                Pseudo BEZ potomkow → NIE tworzy containing-block, wiec wyszukiwarka
                / litepicker (dolaczany do <body>) NIE jest przycinany. overflow:hidden
                na .ys-hero przycina powiekszony obraz (zero poziomego scrolla).
     ::after  — scrim (gradient) dla czytelnosci napisow nad zdjeciem.
     __inner  — tresc, z-index nad obiema warstwami.
   Pelna szerokosc niesie juz .ys-fullbleed (layer-fullbleed). NIE dawaj transform
   na sam .ys-hero (to by ZLAMALO pozycje kalendarza wyszukiwarki) — zoom siedzi
   wylacznie na ::before. Kanon: osada-pogodno opKenBurns (2026-07-14).
   Ref: feedback_idobooking_default13_hero_ken_burns_zoom · deliverable N-hero-kenburns-feature. */
html body.page-index .ys-home .ys-hero {
  position: relative;
  overflow: hidden;
  background-color: #16181C;              /* fallback nim zaladuje sie zdjecie */
  background-image: none;
  min-height: clamp(560px, 84vh, 820px);
  display: flex;
  align-items: center;
  justify-content: center;
  /* naglowek default13 jest fixed i lezy NAD hero: bez gornego odstepu wysrodkowana tresc wjezdza
     pod belke na niskim oknie laptopa (osada 1280x640: nadtytul 106 px, naglowek do 120 px -
     klient widzial „dolne fragmenty liter"). Odstep = wysokosc naglowka + 24 px; border-box
     trzyma min-height, a przy niskim ekranie hero rosnie zamiast przycinac. lessons/110, 14 */
  box-sizing: border-box;
  padding-top: calc(var(--ys-naglowek-h, 120px) + 24px);
  padding-bottom: 40px;
}
html body.page-index .ys-home .ys-hero::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 0;
  background-image: var(--ys-hero-bg, none);
  background-size: cover;
  background-position: center center;
  background-repeat: no-repeat;
  transform: scale(1);
  transform-origin: 50% 50%;
  animation: ys-kenburns 26s ease-in-out infinite alternate;
  will-change: transform;
}
@keyframes ys-kenburns {
  from { transform: scale(1); }
  to   { transform: scale(1.12); }
}
@media (prefers-reduced-motion: reduce) {
  html body.page-index .ys-home .ys-hero::before {
    animation: none;
    transform: none;
  }
}
/* scrim dla kontrastu napisow (pseudo bez potomkow → containing-block bez znaczenia) */
html body.page-index .ys-home .ys-hero::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 1;
  background: linear-gradient(180deg, rgba(16, 18, 22, 0.42) 0%, rgba(12, 13, 17, 0.70) 100%);
  pointer-events: none;
}

/* brak zdjecia (pusty/opozniony slider) → sam grafitowy gradient na ::before; napisy czytelne */
html body.page-index .ys-home .ys-hero.ys-hero--noimg::before {
  background-image: radial-gradient(120% 120% at 50% 0%, #23262C 0%, #16181C 70%);
}

html body.page-index .ys-home .ys-hero__inner {
  position: relative;
  z-index: 2;
  max-width: var(--ys-maxw, 1040px);
  width: 100%;
  margin-left: auto;
  margin-right: auto;
}

@media (max-width: 767px) {
  html body.page-index .ys-home .ys-hero {
    min-height: clamp(520px, 80vh, 700px);
  }
}


/* ==========================================================================
   (3) H1-DISCIPLINE — dokladnie 1 widoczny H1 / strona (lessons/033, generalizacja)
   --------------------------------------------------------------------------
   Testy 07-seo / 11-subpages / 02-traps licza getComputedStyle(h1).display, ktory
   IGNORUJE display:none PRZODKA. Dwa zrodla nadmiarowych H1 na fullpage-home:
     - hero-h1 (.ys-hero__title) wycieka do DOM /txt i /offer/N przez GLOBALNY
       fg_body_top_code (wizualnie ukryty gate .ys-home, ale liczony przez test);
     - systemowe home-h1 siedzi w ukrytym main.fullpage-wrapper (ten sam licznik).
   Wymuszamy WLASNY display:none (nie polegamy na display:none przodka).
   Poza home: ukryj hero-h1; na home: ukryj wszystkie H1 procz naszego hero__title.
   ========================================================================== */
html body:not(.page-index) .ys-home h1 {
  display: none !important;
}
body.page-index h1:not(.ys-hero__title) {
  display: none !important;
}
/* /txt: tresc nie chowa sie pod fixed header (h58, position:fixed) */
body.page-txt #pageContent {
  padding-top: 84px !important;
}


/* ==========================================================================
   (4) COOKIE TOAST — repozycja na home (deliverable N-cookie-hero-overlap)
   --------------------------------------------------------------------------
   Natywny toast zgody #ck_dsclr_v2 (--passive, fixed, lewy-dol ~420x168) nachodzi
   na pole wyszukiwarki hero i przechwytuje klik. Na home/desktop przypinamy go do
   gornego-lewego rogu (pod fixed header ~110px) — odporne na wysokosc viewportu,
   hero nietkniete, baner nadal w pelni widoczny i klikalny. Mobile bez zmian.
   Kanon: easyrent §ER-COOKIE (7141, MCP live 2026-06-19).
   Ref: feedback_idobooking_cookie_toast_overlaps_hero_widget.

   ZAWEZENIE 2026-09-10 (zmierzone na silniku 60357): baner zgody ma DWA warianty.
   `--passive` to toast w lewym dolnym rogu (~420x168) - o niego chodzi tej regule.
   `--blocked` to modal decyzyjny (~480x873), wysrodkowany WLASNYM `transform`
   i celowo zaslaniajacy strone do czasu wyboru. Selektor bez rozroznienia lapal oba,
   a `top:110px` dolozone do jego transformu wypychalo modal 326 px NAD ekran (czesc
   tresci i przyciskow poza viewportem). Nie ruszamy wariantu blokujacego: to zgoda
   wymagana prawnie, a nie ozdoba - musi byc w calosci widoczna i klikalna. */
/* ZMIANA 2026-10-01 (decyzja Damiana, u-aniolka): baner pasywny stoi w LEWYM DOLNYM rogu jako zwarta,
   jasna karta na KAZDEJ trasie - kanon w layer4 §COOKIE-PASYWNY. Przypinanie `top:110px` usuniete:
   pod naglowkiem wchodzilo na H1 (lessons/052), a na dole kolizje z wyszukiwarka rozwiazuje
   zwarta karta + 2x2 wyszukiwarka na telefonie (lessons/102). */


/* ═══════════════════════════════════════════════════════════════════════════════
   §KENBURNS-SLIDER — WARIANT dla klientow, u ktorych HERO = SYSTEMOWY SLIDER
   ───────────────────────────────────────────────────────────────────────────────
   Kanon wyzej (`.ys-hero::before`) zaklada NASZ hero z tlem w CSS. Czesc klientow
   (np. mazurski_chill 2026-07-31) ma hero = natywny `#parallax_topslider` z 24 slajdami
   i wlasnym `.ys-hero` MARTWYM (usunietym z DOM). Tam trzeba animowac systemowy
   markup — ale NIE dowolny element, bo trzy rzeczy sie bija:

     1. `.slick-track` ma transform OD SLICKA (przesuwanie slajdow) → animowanie go
        zabija karuzele.
     2. `.parallax-image` bywa transformowane przez parallax MOTYWU przy scrollu →
        nasza animacja (animacje bija inline style dla animowanej wlasciwosci)
        skasowalaby efekt motywu.
     3. Test **TRAP-09** („Ken Burns wylaczony, hero img scale ≈ 1") mierzy transform
        **IMG** — animowanie `img` zrobiloby z zielonego testu czerwony.

   ROZWIAZANIE: animuj `picture` (wrapper, ktorego nie tyka ani slick, ani parallax,
   ani test). Klipuje `.slick-list` (`overflow:hidden`), wiec zoom nie wylewa sie poza hero.
   Zweryfikowane live (mazurski_chill): picture scale 1.0009 → 1.0032 po 3,3 s,
   `img` transform = `none`, `.parallax-image` transform = `none`.
   ═══════════════════════════════════════════════════════════════════════════════ */

@keyframes ys-kenburns-slider {
  from { transform: scale(1); }
  to   { transform: scale(1.1); }
}
/* KRYTYCZNE — animuj TYLKO `.slick-active`. Regresja live (mazurski_chill 2026-07-31):
   regula bez `.slick-active` zlapala WSZYSTKIE 24 slajdy → 24 rownoczesne animacje
   z `will-change: transform` = 24 warstwy kompozytowe pelnowymiarowych zdjec; strona
   zamulila sie tak, ze testy szly 50 s - 1,7 min zamiast 3-10 s. Slick przeklada
   `.slick-active`, wiec zoom i tak restartuje sie na kazdym slajdzie. */
body.page-index #parallax_topslider .slick-slide picture {
  display: block;
  transform-origin: 50% 55%;
}
body.page-index #parallax_topslider .slick-slide.slick-active picture {
  animation: ys-kenburns-slider 26s ease-in-out infinite alternate;
  will-change: transform;
}
@media (prefers-reduced-motion: reduce) {
  body.page-index #parallax_topslider .slick-slide picture,
  body.page-index #parallax_topslider .slick-slide.slick-active picture { animation: none !important; transform: none !important; }
}
/* /§KENBURNS-SLIDER */

/* (9) SZWY MIEDZY SEKCJAMI CMS HOME (u-aniolka 2026-10-02, zgloszenie Damiana: „cienka przerywana linia").
   Sekcje fullpage maja ulamkowe wysokosci (769,63 / 1541,38 px), a pod nimi siedzi obraz paralaksy silnika
   (.parallax-image img) - w szczelinie subpikselowej przeswituje jako jasna, przerywana linia przez cala szerokosc.
   Zakladka 2 px + cien w kolorze tla zakrywa szew (zweryfikowane live zrzutem). */
html body.page-index main .fp-section + .fp-section { margin-top: -2px !important; }
html body.page-index main .fp-section { box-shadow: 0 2px 0 0 var(--xx-bg, #FFFFFF); }


/* ys-klient.css - Villa Haffnera (61253), 2026-10-06. Baza = warstwy klienta z Design Apartments Krakow (hl) bez ich strony glownej
   (§HL-V2 pominiete - Damian: kazda strona inny uklad). Strona glowna Villi = §VH-DOM nizej. */
/* ═══════════════════════════════════════════════════════════════════════════
   §HL-CLIENT — Villa Haffnera (61253), 2026-10-02
   Komponenty przeniesione z u-aniolka (sprawdzone na live: hero z karta wyszukiwarki, kafle,
   karty lokali, tablica, karty okolicy z mapa, final), paleta krakowska: cegla #5E6B47,
   mosiadz #C0AA90 (tylko ozdoba; tekst mosiezny = #7A5A2E), papier #F6F1EA, grafit #221C19.
   Playfair Display (naglowki) + Manrope (tekst). Tresc home = sekcje CMS wewnatrz <main>.
   ═══════════════════════════════════════════════════════════════════════════ */

/* ── §UA-BAZA ─────────────────────────────────────────────────────────── */
html body { background: var(--ys-bg) !important; color: var(--ys-text); font-family: var(--ys-font-body); }
html body .ys-home h2, html body .ys-home h3, html body .ys-section-title, html body .ys-strona h2, html body .ys-strona h3, html body .ys-strona h4 {
  font-family: var(--ys-font-heading) !important; font-weight: 600 !important; letter-spacing: -0.01em; text-transform: none !important;
}
html body .ys-eyebrow {
  font-family: var(--ys-font-body); font-size: 12.5px; font-weight: 800; letter-spacing: .2em;
  text-transform: uppercase; color: var(--ys-secondary-ink); margin: 0 0 12px;
}
html body .ys-eyebrow--jasny { color: #E3CBA0; }   /* na zieleni 7,9:1 */

/* ── §UA-HOME-CMS: systemowe czesci home, ktore zastepujemy (kanon 60889) ── */
html body.page-index:has(.ys-home) main .section.parallax,
html body.page-index:has(.ys-home) main .parallax-container,
html body.page-index:has(.ys-home) main .firstslide,
html body.page-index:has(.ys-home) main > .iai-search { display: none !important; }
html body.page-index .about-main-description,
html body.page-index .about-main-description > .section,
html body.page-index .about-main-description > .section > .section_sub {
  margin: 0 !important; padding: 0 !important; max-width: none !important; width: 100% !important;
}
html body.page-index .about-main-description > .section:empty,
html body.page-index .about-main-description > .section > .section_sub:empty { display: none !important; }
html.fp-enabled body.page-index main.fullpage-wrapper,
html body.page-index main.fullpage-wrapper,
html body.page-index main.fullpage-wrapper > .fp-section,
html body.page-index main.fullpage-wrapper .fp-tableCell,
html body.page-index main.fullpage-wrapper .fp-auto-height {
  height: auto !important; min-height: 0 !important; transform: none !important;
}
html body.page-index main.fullpage-wrapper .fp-tableCell { display: block !important; vertical-align: baseline !important; }
html body.page-index main.fullpage-wrapper > .fp-section { display: block !important; }
html body:not(#_).page-index .section.fp-auto-height,
html body:not(#_).page-index main.fullpage-wrapper > .section { background: var(--ys-bg) !important; }
html body.page-index #bounce { display: none !important; }

/* ── §UA-HERO (full-bleed-image: tresc do lewej, karta wyszukiwarki) ──── */
html body.page-index .ys-home .ys-hero {
  min-height: clamp(640px, 96vh, 1000px) !important;
  align-items: center !important;
  padding: calc(var(--ys-header-h, 72px) + 40px) clamp(20px, 4vw, 56px) clamp(150px, 18vh, 200px) !important;
  background-color: #1B1513 !important;
}
html body.page-index .ys-home .ys-hero::before { background-position: 38% 45% !important; }
html body.page-index .ys-home .ys-hero::after {
  background:
    linear-gradient(90deg, rgba(20,14,12,.78) 0%, rgba(20,14,12,.52) 38%, rgba(20,14,12,.10) 70%, rgba(20,14,12,0) 100%),
    linear-gradient(180deg, rgba(20,14,12,.35) 0%, rgba(20,14,12,0) 30%, rgba(20,14,12,.45) 100%) !important;
}
html body.page-index .ys-home .ys-hero__inner { text-align: left; max-width: var(--ys-maxw) !important; }
html body.page-index .ys-home .ys-hero__eyebrow {
  position: relative; z-index: 2; font-size: 13px; font-weight: 800; letter-spacing: .24em; text-transform: uppercase;
  color: #E3CBA0; margin: 0 0 16px;
}
html body.page-index .ys-home .ys-hero__title {
  position: relative; z-index: 2; font-family: var(--ys-font-heading) !important; font-weight: 600 !important;
  font-size: clamp(56px, 8.2vw, 124px) !important; line-height: .98 !important; letter-spacing: -0.02em;
  color: #FFFFFF !important; margin: 0 0 20px !important; text-transform: none !important;
}
html body.page-index .ys-home .ys-hero__lead {
  position: relative; z-index: 2; font-size: clamp(17px, 1.5vw, 20px); line-height: 1.6; color: rgba(255,255,255,.93);
  max-width: 50ch; margin: 0 0 28px;
}
html body.page-index .ys-home .ys-hero__search { position: relative; z-index: 3; max-width: 980px; }
html body.page-index .ys-home .ys-hero__note {
  position: relative; z-index: 2; margin: 16px 0 0; font-size: 14.5px; color: rgba(255,255,255,.88);
}
html body.page-index .ys-home .ys-hero__note span { font-weight: 800; color: #FFFFFF; }
html body.page-index .ys-hero__search:empty { min-height: 96px; }          /* rezerwacja pod JS (CLS, D15) */
@media (max-width: 820px) {
  html body.page-index .ys-hero__search:empty { min-height: 330px; }
  html body.page-index .ys-home .ys-hero::after { background: linear-gradient(180deg, rgba(20,14,12,.55) 0%, rgba(20,14,12,.35) 40%, rgba(20,14,12,.80) 100%) !important; }
}

/* wyszukiwarka (wariant card): biala karta, bursztynowy przycisk z CIEMNYM napisem (6,1:1) */
html body .ys-search--card { border-radius: 20px !important; box-shadow: 0 24px 60px rgba(16,11,9,.35) !important; }
/* przycisk = glowny kolor marki (zielen z logo) z bialym napisem, ROWNY polom: ta sama wysokosc, linia i promien.
   Bylo: bursztyn + ciezki ciemny napis 800, 46 px przy polach 50 px i 4 px nizej - „nie pasuje" (Damian 2026-10-01).
   Bursztyn zostaje akcentem (ikona lupy), nie wypelnieniem. */
html body .ys-search--card .ys-search__input, html body .ys-search--card select { height: 50px !important; box-sizing: border-box !important; }
html body .ys-search__submit {
  background: var(--ys-primary) !important; color: #FFFFFF !important; font-weight: 700 !important; letter-spacing: .01em !important;
  height: 50px !important; border-radius: 6px !important; box-shadow: 0 8px 20px -10px rgba(94, 107, 71,.6) !important;
}
html body .ys-search__submit:hover { background: #A3503D !important; color: #FFFFFF !important; transform: none !important; }
html body .ys-search__submit:focus-visible { outline: 3px solid var(--ys-secondary) !important; outline-offset: 2px !important; }
html body .ys-search__submit svg { color: var(--ys-secondary) !important; }
html body .ys-search__label svg { color: var(--ys-primary) !important; }

/* ── §UA-KAFLE: cztery kafelki nachodzace na hero ─────────────────────── */
html body .ys-kafle { position: relative; z-index: 4; margin-top: -120px !important; padding: 0 clamp(16px, 4vw, 56px) !important; }
html body .ys-kafle__siatka { max-width: var(--ys-maxw); margin: 0 auto; display: grid; grid-template-columns: repeat(4, 1fr); gap: 16px; }
html body .ys-kafelek {
  position: relative; display: block; overflow: hidden; border-radius: 22px; min-height: 300px;
  background: #7A3223; color: #FFFFFF !important; text-decoration: none !important; isolation: isolate;
  box-shadow: 0 18px 40px rgba(16,11,9,.22);
}
html body .ys-kafelek__foto, html body .ys-kafelek__foto img { position: absolute; inset: 0; width: 100%; height: 100%; display: block; }
html body .ys-kafelek__foto img { object-fit: cover; transition: transform .8s cubic-bezier(.2,.7,.2,1); }
html body .ys-kafelek:hover .ys-kafelek__foto img { transform: scale(1.06); }
html body .ys-kafelek::after { content: ""; position: absolute; inset: 0; z-index: 1; background: linear-gradient(180deg, rgba(20,14,12,.05) 30%, rgba(20,14,12,.86) 100%); }
html body .ys-kafelek__tresc { position: absolute; left: 0; right: 0; bottom: 0; z-index: 2; padding: 20px 22px 22px; display: flex; flex-direction: column; gap: 4px; }
html body .ys-kafelek__nad { font-size: 11.5px; font-weight: 800; letter-spacing: .18em; text-transform: uppercase; color: #E3CBA0; }
html body .ys-kafelek__tytul { font-family: var(--ys-font-heading); font-weight: 600; font-size: 23px; line-height: 1.15; color: #FFFFFF; }
html body .ys-kafelek__opis { font-size: 14px; line-height: 1.45; color: rgba(255,255,255,.86); }
html body .ys-kafelek:focus-visible { outline: 3px solid var(--ys-secondary); outline-offset: 3px; }
@media (max-width: 991px) { html body .ys-kafle__siatka { grid-template-columns: 1fr 1fr; } html body .ys-kafelek { min-height: 240px; } }
@media (max-width: 560px) { html body .ys-kafle { margin-top: -70px !important; } html body .ys-kafle__siatka { grid-template-columns: 1fr; } html body .ys-kafelek { min-height: 210px; } }

/* ── §UA-O-DOMU: sekcja CMS text_and_photo (EDYTOWALNA) ───────────────── */
html body.page-index main .section_sub.container > .row:not(:has(.ys-home)) {
  max-width: var(--ys-maxw); margin: 0 auto !important;
  padding: clamp(72px, 9vw, 128px) clamp(20px, 4vw, 48px) !important;
  display: flex; align-items: center; gap: clamp(28px, 5vw, 80px); flex-wrap: wrap;
}
html body.page-index main .section_sub.container > .row:not(:has(.ys-home)) > [class*="col-"] { flex: 1 1 380px; max-width: none; padding: 0 !important; }
html body.page-index main .section_sub.container > .row:not(:has(.ys-home)) h2 {
  font-family: var(--ys-font-heading) !important; font-weight: 600 !important; text-transform: none !important;
  font-size: clamp(34px, 4vw, 54px) !important; line-height: 1.08 !important; color: var(--ys-text) !important; margin: 0 0 22px !important;
}
html body.page-index main .section_sub.container > .row:not(:has(.ys-home)) p { font-size: 17px; line-height: 1.75; color: var(--ys-text-soft); max-width: 58ch; margin: 0 0 16px; }
html body.page-index main .section_sub.container > .row:not(:has(.ys-home)) img {
  width: 100% !important; height: auto !important; aspect-ratio: 4 / 3; object-fit: cover;
  border-radius: 28px; display: block; box-shadow: 0 30px 60px rgba(20,14,12,.16); cursor: zoom-in;
}

/* ── §UA-PASY ─────────────────────────────────────────────────────────── */
html body .ys-band { padding: clamp(80px, 10vw, 140px) clamp(20px, 4vw, 48px) !important; }
html body .ys-band__inner { max-width: var(--ys-maxw); margin: 0 auto; }
html body .ys-band--jasny { background: var(--ys-bg); }
html body .ys-band--kremowy { background: var(--ys-cream); border-radius: var(--ys-radius-band); }
html body .ys-head { margin: 0 0 clamp(34px, 4vw, 54px); }
html body .ys-head--rzad { display: flex; align-items: flex-end; justify-content: space-between; gap: 24px; flex-wrap: wrap; }
html body .ys-section-title {
  font-size: clamp(34px, 4.2vw, 58px) !important; line-height: 1.06 !important; color: var(--ys-text) !important;
  margin: 0 !important; max-width: 22ch; text-wrap: balance;
}
html body .ys-link-strzalka {
  display: inline-flex; align-items: center; gap: 10px; font-weight: 800; font-size: 15px;
  color: var(--ys-primary) !important; text-decoration: none !important; border-bottom: 2px solid var(--ys-secondary); padding-bottom: 4px;
}
html body .ys-link-strzalka::after { content: "\2192"; transition: transform .25s ease; }
html body .ys-link-strzalka:hover::after { transform: translateX(4px); }

/* ── §UA-POKOJE: karty ze zdjeciem u gory ─────────────────────────────── */
html body .ys-pokoje { display: grid; grid-template-columns: repeat(4, 1fr); gap: 20px; }
html body .ys-pokoj {
  display: flex; flex-direction: column; overflow: hidden; border-radius: 22px; background: #FFFFFF;
  border: 1px solid rgba(94, 107, 71,.10); box-shadow: 0 14px 34px rgba(20,14,12,.07);
  text-decoration: none !important; color: var(--ys-text) !important; transition: transform .25s ease, box-shadow .25s ease;
}
html body .ys-pokoj:hover { transform: translateY(-4px); box-shadow: 0 22px 44px rgba(20,14,12,.12); }
html body .ys-pokoj__foto { display: block; aspect-ratio: 4 / 3; overflow: hidden; background: #E6DED3; }
html body .ys-pokoj__foto img { width: 100%; height: 100%; object-fit: cover; display: block; }
html body .ys-pokoj__tresc { display: flex; flex-direction: column; gap: 6px; padding: 20px 22px 24px; flex: 1 1 auto; }
html body .ys-pokoj__nazwa { font-family: var(--ys-font-heading); font-weight: 600; font-size: 22px; line-height: 1.2; }
html body .ys-pokoj__meta { font-size: 14.5px; line-height: 1.5; color: var(--ys-text-soft); }
html body .ys-pokoj__cena { margin-top: auto; padding-top: 12px; font-weight: 800; font-size: 16px; color: var(--ys-primary); }
html body .ys-pokoj:focus-visible { outline: 3px solid var(--ys-secondary); outline-offset: 3px; }
@media (max-width: 991px) { html body .ys-pokoje { grid-template-columns: 1fr 1fr; } }
@media (max-width: 560px) { html body .ys-pokoje { grid-template-columns: 1fr; } }

/* ── §UA-W-CENIE: „karta schroniska" (2026-10-01, zamiast ciemnego pasa z 6 kartami-ikonami - Damian: „AI slopowe")
   Papierowy krem, duze zdjecie basenu po lewej, redakcyjna lista z numerami i wlosowymi liniami, bez ikon i ramek.
   Pod spodem tablica jak w schronisku: nazwa, kropki, cena. Jeden akcent: bursztyn na numerach i cenach. */
html body .ys-band--papier { background: var(--ys-cream); border-radius: var(--ys-radius-band); }
html body .ys-wcenie { display: grid; grid-template-columns: minmax(0, 5fr) minmax(0, 7fr); gap: clamp(32px, 6vw, 96px); align-items: start; }
html body .ys-wcenie__foto { margin: 0; position: sticky; top: calc(var(--ys-header-h, 80px) + 24px); }
html body .ys-wcenie__foto img { display: block; width: 100%; aspect-ratio: 4 / 5; object-fit: cover; border-radius: 4px 140px 4px 4px; box-shadow: 0 30px 60px -30px rgba(16,32,26,.45); }
html body .ys-wcenie__foto figcaption { margin-top: 14px; font-size: 13px; letter-spacing: .04em; color: var(--ys-text-muted); }
html body .ys-wcenie__foto figcaption::before { content: ""; display: inline-block; width: 28px; height: 1px; background: var(--ys-secondary); vertical-align: middle; margin-right: 10px; }
html body .ys-wcenie__tresc .ys-section-title { margin-bottom: clamp(24px, 3vw, 40px) !important; }
html body .ys-wcenie__lista { list-style: none; margin: 0; padding: 0; counter-reset: none; }
html body .ys-wcenie__lista li { display: grid; grid-template-columns: 64px minmax(0, 1fr); column-gap: 12px; padding: 22px 0; border-top: 1px solid rgba(34,28,25,.14); }
html body .ys-wcenie__lista li:last-child { border-bottom: 1px solid rgba(34,28,25,.14); }
html body .ys-wcenie__nr { font-family: var(--ys-font-heading); font-size: 15px; font-weight: 600; letter-spacing: .08em; color: var(--ys-secondary-ink, #7A5A2E); padding-top: 4px; font-variant-numeric: tabular-nums; }
html body .ys-wcenie__lista h3 { font-family: var(--ys-font-heading) !important; font-weight: 600 !important; font-size: clamp(20px, 1.9vw, 24px) !important; line-height: 1.25 !important; color: var(--ys-text) !important; margin: 0 0 4px !important; text-transform: none !important; }
html body .ys-wcenie__lista p { margin: 0; font-size: 15.5px; line-height: 1.6; color: var(--ys-text-soft); }
/* tablica schroniska */
html body .ys-tablica { margin-top: clamp(48px, 6vw, 80px); background: #FFFFFF; border-radius: 6px; padding: clamp(24px, 3.4vw, 44px) clamp(22px, 4vw, 56px); box-shadow: 0 1px 0 rgba(34,28,25,.06), 0 20px 50px -34px rgba(16,32,26,.5); border-top: 4px double var(--ys-primary); }
html body .ys-tablica__glowa { display: flex; align-items: baseline; justify-content: space-between; flex-wrap: wrap; gap: 6px 24px; margin-bottom: 18px; }
html body .ys-tablica__tytul { margin: 0; font-family: var(--ys-font-heading); font-weight: 600; font-size: clamp(22px, 2.2vw, 28px); color: var(--ys-text); }
html body .ys-tablica__dopisek { margin: 0; font-size: 12px; font-weight: 800; letter-spacing: .16em; text-transform: uppercase; color: var(--ys-secondary-ink, #7A5A2E); }
html body .ys-tablica__lista { margin: 0; display: grid; grid-template-columns: 1fr 1fr; gap: 4px clamp(32px, 5vw, 72px); }
html body .ys-tablica__poz { display: flex; align-items: baseline; gap: 10px; padding: 12px 0; }
html body .ys-tablica__poz dt { font-weight: 600; font-size: 15.5px; color: var(--ys-text); }
html body .ys-tablica__kropki { flex: 1 1 24px; min-width: 24px; border-bottom: 2px dotted rgba(34,28,25,.28); transform: translateY(-4px); }
html body .ys-tablica__poz dd { margin: 0; font-family: var(--ys-font-heading); font-weight: 600; font-size: 19px; color: var(--ys-primary); white-space: nowrap; }
html body .ys-tablica__poz dd small { font-family: var(--ys-font-body); font-weight: 600; font-size: 12.5px; color: var(--ys-text-muted); margin-left: 4px; }
@media (max-width: 991px) {
  html body .ys-wcenie { grid-template-columns: 1fr; }
  html body .ys-wcenie__foto { position: static; }
  html body .ys-wcenie__foto img { aspect-ratio: 16 / 10; border-radius: 4px 90px 4px 4px; }
  html body .ys-tablica__lista { grid-template-columns: 1fr; }
}
@media (max-width: 560px) {
  html body .ys-wcenie__lista li { grid-template-columns: 44px minmax(0, 1fr); padding: 18px 0; }
  html body .ys-tablica__poz { flex-wrap: wrap; }
  html body .ys-tablica__poz dt { flex: 1 1 100%; }
  html body .ys-tablica__kropki { display: none; }
}
/* ── ODZYSKANE 2026-10-01 z CSSOM wersji live v=1790846193 (blok skasowany omylkowo przy wymianie sekcji „W cenie";
   tresc regul 1:1, komentarze zrodlowe utracone) ── */
/* §UA-KULIG */
html body .ys-kulig__uklad { display: grid; grid-template-columns: 6fr 5fr; gap: clamp(32px, 5vw, 80px); align-items: center; }
html body .ys-kulig__foto { margin: 0px; position: relative; }
html body .ys-kulig__foto img { width: 100%; aspect-ratio: 4 / 3; object-fit: cover; border-radius: 28px; display: block; box-shadow: rgba(10, 20, 14, 0.18) 0px 30px 60px; }
html body .ys-kulig__foto::after { content: ""; position: absolute; left: -18px; bottom: -18px; width: 42%; height: 42%; z-index: -1; border-radius: 28px; background: var(--ys-cream); }
html body .ys-kulig__lead { font-size: 17px; line-height: 1.75; color: var(--ys-text-soft); margin: 22px 0px; max-width: 54ch; }
html body .ys-kroki { list-style: none; counter-reset: k 0; margin: 0px 0px 30px; padding: 0px; }
html body .ys-kroki li { counter-increment: k 1; position: relative; padding: 12px 0px 12px 46px; border-bottom: 1px solid rgba(94, 107, 71, 0.12); font-size: 16px; color: var(--ys-text-soft); }
html body .ys-kroki li::before { content: counter(k); position: absolute; left: 0px; top: 10px; width: 30px; height: 30px; border-radius: 50%; background: var(--ys-primary); color: rgb(255, 255, 255); font-weight: 800; font-size: 14px; display: flex; align-items: center; justify-content: center; }
html body .ys-kroki strong { color: var(--ys-text); }
@media (max-width: 991px) {
html body .ys-kulig__uklad { grid-template-columns: 1fr; }
}
/* §UA-OKOLICA + mapa */
html body .ys-okolica { display: grid; grid-template-columns: 5fr 7fr; gap: clamp(32px, 5vw, 72px); align-items: start; }
html body .ys-ciekawostki { list-style: none; margin: 26px 0px 28px; padding: 0px; }
html body .ys-ciekawostki li { padding: 13px 0px; border-bottom: 1px solid rgba(94, 107, 71, 0.12); font-size: 16px; line-height: 1.55; color: var(--ys-text-soft); }
html body .ys-ciekawostki strong { color: var(--ys-text); }
html body .ys-mapa { position: relative; height: clamp(360px, 38vw, 500px); border-radius: 24px; overflow: hidden; background: rgb(226, 220, 205); box-shadow: rgba(10, 20, 14, 0.12) 0px 24px 50px; z-index: 0; }
html body .ys-mapa__podpowiedz { position: absolute; inset: 0px; z-index: 800; display: flex; align-items: center; justify-content: center; background: rgba(10, 20, 14, 0.46); color: rgb(255, 255, 255); font-weight: 700; font-size: 16px; text-align: center; padding: 20px; opacity: 0; pointer-events: none; transition: opacity 0.25s; }
html body .ys-mapa--podp .ys-mapa__podpowiedz { opacity: 1; }
html body .ys-pin:not(.ys-pin--znak) span { display: block; width: 34px; height: 34px; border-radius: 50% 50% 50% 0px; transform: rotate(-45deg); background: var(--ys-primary); border: 3px solid var(--ys-secondary); box-shadow: rgba(0, 0, 0, 0.3) 0px 6px 14px; }
html body .ys-adres { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 12px 24px; margin-top: 20px; }
html body .ys-adres__linia { margin: 0px; font-size: 15.5px; color: var(--ys-text-soft); }
html body .ys-adres__linia strong { color: var(--ys-text); font-weight: 700; }
@media (max-width: 991px) {
html body .ys-okolica { grid-template-columns: 1fr; }
}
/* §UA-GRUPY */
html body .ys-grupy { padding-top: clamp(64px, 8vw, 110px) !important; padding-bottom: clamp(24px, 3vw, 40px) !important; }
html body .ys-grupy__uklad { display: grid; grid-template-columns: 5fr 6fr auto; gap: clamp(24px, 4vw, 56px); align-items: center; padding: clamp(32px, 4vw, 48px); border: 1px solid rgba(94, 107, 71, 0.14); border-radius: 28px; }
html body .ys-grupy__tekst { margin: 0px; font-size: 16.5px; line-height: 1.7; color: var(--ys-text-soft); }
@media (max-width: 991px) {
html body .ys-grupy__uklad { grid-template-columns: 1fr; }
}
/* §UA-PRZYCISKI */
html body .ys-btn, html body .btn { border-radius: 14px !important; font-family: var(--ys-font-body) !important; }
html body .ys-btn { display: inline-flex; align-items: center; justify-content: center; min-height: 52px; padding: 0px 26px; font-weight: 800; font-size: 15.5px; letter-spacing: 0.02em; transition: background-color 0.2s, color 0.2s, transform 0.2s; border: 2px solid transparent; text-decoration: none !important; }
html body .ys-btn:hover { transform: translateY(-1px); }
html body .ys-btn--bursztyn { background: var(--ys-secondary); color: rgb(23, 35, 28) !important; }
html body .ys-btn--bursztyn:hover { background: rgb(217, 150, 69); }
html body .ys-btn--ciemny { background: var(--ys-primary); color: rgb(255, 255, 255) !important; }
html body .ys-btn--ciemny:hover { background: rgb(44, 81, 64); }
html body .ys-btn--obrys { border-color: var(--ys-primary); background: transparent; color: var(--ys-primary) !important; }
html body .ys-btn--obrys:hover { background: var(--ys-primary); color: rgb(255, 255, 255) !important; }
html body .ys-btn--obrys-jasny { border-color: rgba(255, 255, 255, 0.6); background: transparent; color: rgb(255, 255, 255) !important; }
html body .ys-btn--obrys-jasny:hover { background: rgb(255, 255, 255); color: var(--ys-primary) !important; }
/* §UA-FINAL */
html body .ys-final { background: var(--ys-bg); padding: clamp(48px, 6vw, 88px) clamp(16px, 3vw, 32px) clamp(48px, 6vw, 80px) !important; }
html body .ys-final__inner { max-width: var(--ys-maxw); margin: 0px auto; text-align: center; border-radius: var(--ys-radius-band); padding: clamp(56px, 7vw, 100px) clamp(24px, 5vw, 80px); background: radial-gradient(120% 140% at 50% 0%,#A3503D 0%,var(--ys-ink) 72%); color: rgb(255, 255, 255); }
html body .ys-final__tytul { font-size: clamp(34px, 4.4vw, 60px) !important; line-height: 1.06 !important; color: rgb(255, 255, 255) !important; margin: 0px 0px 16px !important; }
html body .ys-final__lead { font-size: 17px; line-height: 1.65; color: rgba(255, 255, 255, 0.84); max-width: 56ch; margin: 0px auto 30px; }
html body .ys-final__akcje { display: flex; gap: 14px; justify-content: center; flex-wrap: wrap; }
/* §UA-STRONA: podstrony /txt */
html body.page-txt .ys-strona { max-width: 1040px; margin: 0px auto; padding: clamp(24px, 4vw, 56px) 0px; }
html body.page-txt .ys-strona__tytul { font-size: clamp(32px, 4vw, 52px) !important; line-height: 1.08 !important; color: var(--ys-text) !important; margin: 0px 0px 18px !important; }
html body.page-txt .ys-strona__lead { font-size: 18px; line-height: 1.7; color: var(--ys-text-soft); max-width: 62ch; margin: 0px 0px 40px; }
html body.page-txt .ys-grupa, html body.page-txt .ys-menu-kuligu { margin: 0px 0px 44px; }
html body.page-txt .ys-grupa__tytul { letter-spacing: 0.18em; padding-bottom: 12px; border-bottom: 1px solid rgba(200, 129, 47, 0.4); font-family: var(--ys-font-body) !important; font-size: 12.5px !important; font-weight: 800 !important; text-transform: uppercase !important; color: var(--ys-secondary-ink) !important; margin: 0px 0px 16px !important; }
/* program kuligu: ten sam redakcyjny styl co „W cenie pobytu” na glownej (numer bursztynem, wlosowa linia, bez ciemnych kart) - 2026-10-01 */
html body.page-txt .ys-program { list-style: none; margin: 0px 0px 44px; padding: 0px; display: grid; grid-template-columns: repeat(3, 1fr); column-gap: clamp(20px, 3vw, 40px); }
html body.page-txt .ys-program__krok { position: relative; padding: 22px 0 6px; border-top: 2px solid var(--ys-primary); background: transparent; color: var(--ys-text); }
html body.page-txt .ys-program__nr { display: block; font-family: var(--ys-font-heading); font-size: 15px; font-weight: 600; letter-spacing: .08em; color: var(--ys-secondary-ink, #7A5A2E); margin-bottom: 10px; font-variant-numeric: tabular-nums; }
html body.page-txt .ys-program__tytul { font-size: 22px !important; color: var(--ys-text) !important; margin: 0px 0px 8px !important; }
html body.page-txt .ys-program__krok p { margin: 0px; font-size: 15.5px; line-height: 1.6; color: var(--ys-text-soft); }
html body.page-txt .ys-lista-ptaszki { list-style: none; margin: 0px; padding: 0px; display: grid; grid-template-columns: 1fr 1fr; gap: 10px 28px; }
html body.page-txt .ys-lista-ptaszki li { position: relative; padding-left: 30px; font-size: 16.5px; line-height: 1.55; color: var(--ys-text-soft); }
html body.page-txt .ys-lista-ptaszki li::before { content: ""; position: absolute; left: 2px; top: 0.38em; width: 14px; height: 8px; border-left: 3px solid var(--ys-secondary); border-bottom: 3px solid var(--ys-secondary); transform: rotate(-45deg); }
html body.page-txt .ys-strona--cta { text-align: center; padding: clamp(48px, 6vw, 80px) clamp(20px, 4vw, 48px); background: var(--ys-cream); border-radius: var(--ys-radius-band); margin-bottom: clamp(24px, 4vw, 48px); }
html body.page-txt .ys-strona--cta .ys-strona__lead { margin: 0px auto 26px; }
html body.page-txt .txt-text > div:not(:has(.ys-strona)) { max-width: 1040px; margin-left: auto !important; margin-right: auto !important; }
html body.page-txt .txt-text h3:not(.ys-grupa__tytul):not(.ys-program__tytul) { font-family: var(--ys-font-heading) !important; font-weight: 600 !important; font-size: 28px !important; color: var(--ys-text) !important; margin: 0px 0px 12px !important; text-transform: none !important; }
html body.page-txt .txt-text p { font-size: 17px; line-height: 1.7; color: var(--ys-text-soft); max-width: 70ch; }
html body.page-txt .txt-text .row img { max-height: 560px; object-fit: cover; border-radius: 28px; cursor: zoom-in; width: 100% !important; }
@media (max-width: 991px) {
html body.page-txt .ys-program { grid-template-columns: 1fr 1fr; }
}
@media (max-width: 640px) {
html body.page-txt .ys-program, html body.page-txt .ys-lista-ptaszki { grid-template-columns: 1fr; }
}
/* §UA-SYSTEM: /offers, /offer/N, /contact, stopka, naglowek */
html body.page-offers .offers-container h2, html body.page-offers .offers-container h2 a { text-transform: none !important; letter-spacing: 0px !important; font-size: 24px !important; line-height: 1.2 !important; }
html body.page-offers #filter_locations, html body .showlocation.widget__option { display: none !important; }
html body.page-offer .accommodation-reservation .btn, html body.page-offer .accommodation-reservation a, html body.page-offer .accommodation-leftbutton, html body.page-offer a.accommodation-reservation .accommodation-leftbutton { font-family: var(--ys-font-body) !important; letter-spacing: 0.04em !important; font-weight: 800 !important; background: var(--ys-secondary) !important; color: rgb(23, 35, 28) !important; border-color: var(--ys-secondary) !important; }
html body.page-offer .accommodation-reservation .btn:hover, html body.page-offer .accommodation-reservation a:hover, html body.page-offer a.accommodation-reservation:hover .accommodation-leftbutton { background: rgb(217, 150, 69) !important; }
html body.page-contact h1.contact__label { font-size: clamp(34px, 4vw, 52px) !important; line-height: 1.08 !important; margin: clamp(32px, 4vw, 56px) 0px 24px !important; text-transform: none !important; }
html body.page-contact .contact h2.contact__label { text-transform: none !important; }
html body .ys-footer .footer__contact li::after { content: none !important; }
html body .ys-footer .footer-contact-baner { align-items: center; gap: 18px; display: inline-flex !important; }
html body header .navbar-toggler, html body header .navbar-toggler i, html body header .navbar-toggler span, html body header .navbar-toggler .icon::before { color: var(--ys-primary) !important; }
@media (max-width: 991px) {
html body header .navbar-reservation { margin-right: 62px !important; }
}
html body .ys-logo { display: inline-flex; align-items: center; gap: 10px; color: var(--ys-primary); line-height: 1; text-decoration: none !important; }
html body .ys-logo svg { width: 54px; height: 32px; flex: 0 0 auto; }
html body .ys-logo__tekst { display: flex; flex-direction: column; gap: 3px; }
html body .ys-logo__nazwa { font-family: var(--ys-font-heading); font-weight: 600; font-size: 22px; letter-spacing: -0.01em; color: var(--ys-primary); white-space: nowrap; }
html body .ys-logo__miejsce { font-family: var(--ys-font-body); font-weight: 800; font-size: 9.5px; letter-spacing: .32em; text-transform: uppercase; color: var(--ys-secondary-ink); }

/* ── §UA-FORCED-COLORS (lessons/093) ──────────────────────────────────── */
@media (forced-colors: active) {
  html body.page-index .ys-home .ys-hero, html body .ys-band--papier, html body .ys-tablica, html body .ys-final__inner, html body .ys-kafelek, html body.page-txt .ys-program__krok {
    background: Canvas !important; box-shadow: none !important;
  }
  html body.page-index .ys-home .ys-hero::before, html body.page-index .ys-home .ys-hero::after, html body .ys-kafelek::after { content: none !important; }
  html body .ys-kafelek__foto { position: static !important; height: 160px !important; }
  html body .ys-kafelek__tresc { position: static !important; }
  html body.page-index .ys-home .ys-hero__title, html body.page-index .ys-home .ys-hero__lead, html body.page-index .ys-home .ys-hero__eyebrow,
  html body.page-index .ys-home .ys-hero__note, html body .ys-kafelek__tytul, html body .ys-kafelek__opis, html body .ys-kafelek__nad,
  html body .ys-wcenie__lista h3, html body .ys-wcenie__lista p, html body .ys-wcenie__nr, html body .ys-tablica__poz dt, html body .ys-tablica__poz dd,
  html body .ys-final__tytul, html body .ys-final__lead, html body.page-txt .ys-program__tytul, html body.page-txt .ys-program__krok p {
    color: CanvasText !important; text-shadow: none !important; background: Canvas !important;
  }
  html body .ys-search { background: Canvas !important; border: 1px solid CanvasText !important; box-shadow: none !important; }
  html body:not(#_) .ys-search__submit, html body:not(#_) .ys-btn { background: ButtonFace !important; color: ButtonText !important; border: 2px solid ButtonBorder !important; }
  html body .ys-tablica, html body .ys-kafelek, html body .ys-pokoj { border: 1px solid CanvasText !important; }
}

/* ── §UA-RUNDA-1 2026-09-30 (przelot po live) ─────────────────────────────
   (1) eyebrow na zieleni i w karcie finalu byl w kolorze tla (typografia vibe [data-vibe] .ys-eyebrow
       wygrywala z .ys-eyebrow--jasny) - zmierzone rgb(31,59,45) na #5E6B47;
   (2) sekcja CMS „O domu" + pas pokoi sumowaly odstepy (~300 px pustki, lessons/098 §B);
   (3) „Grupy": tytul lamal sie na 3 linie w waskiej kolumnie;
   (4) karta wyszukiwarki odsunieta od lewej krawedzi napisow hero;
   (5) /txt: opisy krokow kuligu ciemne na zielonym (regula .txt-text p), H1 w bursztynie 2,9:1;
   (6) /contact: naglowek „Platnosci" przyklejony do mapy. */
html body .ys-final .ys-eyebrow, html body .ys-eyebrow.ys-eyebrow--jasny { color: #E3CBA0 !important; }
html body.page-index main .section_sub.container > .row:not(:has(.ys-home)) { padding-bottom: clamp(40px, 5vw, 72px) !important; }
html body #pokoje.ys-band { padding-top: clamp(24px, 3vw, 48px) !important; }
html body .ys-grupy__uklad { grid-template-columns: minmax(0, 1.1fr) minmax(0, 1.4fr) auto; }
html body .ys-grupy .ys-section-title { font-size: clamp(28px, 3vw, 40px) !important; max-width: none; }
html body.page-index .ys-hero__search .ys-search { margin-left: 0 !important; }
html body.page-txt .txt-text .ys-program__krok p { color: var(--ys-text-soft) !important; }   /* 2026-10-01: karty programu juz nie sa ciemne (byl bialy tekst na kremie) */
html body.page-txt h1, html body.page-txt .big-label, html body.page-contact h1.contact__label { color: var(--ys-primary) !important; }
html body.page-txt .ys-strona { max-width: none; }
html body.page-contact .contact__payments .contact__label, html body.page-contact .contact__payments h2 { margin-top: clamp(24px, 3vw, 40px) !important; }
@media (max-width: 991px) { html body .ys-grupy__uklad { grid-template-columns: 1fr; } }
/* (7) /offers: karta miala zdjecie 4:3 w ramce 4:5 (biblioteka) = 220 px pustego pola pod kadrem -
       ramka dostaje te same proporcje co zdjecie; H1 w kolorze marki, nie akcentu; mapa boczna silnika
       ma zle wspolrzedne lokalizacji (Proszowice), a obiekt jest jeden - chowamy ja */
html body.page-offers .offers-container > a.object-icon, html body.page-offers .offers-container > .object-icon { aspect-ratio: 4 / 3 !important; height: auto !important; }   /* waga jak w bibliotece (`> a.`), inaczej przegrywa */
html body.page-offers h1.big-label { color: var(--ys-primary) !important; }
html body.page-offers .offer-right.side-map { display: none !important; }
html body.page-offers .offers_content h3, html body.page-offers .offers_content .payments-info h3 { color: var(--ys-primary) !important; }
/* (8) mobile: przycisk menu (ikona + napis) wystawal 11 px pod naglowek i poza prawa krawedz; po przewinieciu
       „Online reservation" silnika zawijal sie pod logo i podwajal wysokosc naglowka (zmierzone 375 px) -
       na telefonie rezerwacja jest w karcie wyszukiwarki hero i w kaflach, wiec przycisk w naglowku znika;
       kafelki dostaja ten sam margines boczny co reszta tresci (bylo 8 px) */
@media (max-width: 991px) {
  html body header .navbar-toggler { top: 4px !important; padding: 2px 6px !important; gap: 2px !important; right: 8px !important; }
  html body header .navbar-toggler span { font-size: 10px !important; line-height: 1 !important; }
}
@media (max-width: 575px) {
  html body header .navbar-reservation { display: none !important; }
  html body .ys-kafle.ys-fullbleed { padding-left: 16px !important; padding-right: 16px !important; }
}
/* (9) przebieg testow desktop 2026-09-30:
   - 14k: w HTML z serwera byly DWA H1 (systemowy header_name w .index-info + nasz tytul hero). Tytul hero
     jest teraz <p>, a systemowy H1 („U Aniolka - dom wczasowy w Murzasichlu") zostaje jedynym H1 -
     czytelny dla robota i czytnika, wizualnie ukryty (sr-only, NIE display:none);
   - CLS 15 px: karta wyszukiwarki ma 124 px, rezerwacja miala 96;
   - F16: lista kontaktu w stopce centrowala dzieci flexem;
   - /contact: tresc dotykala stopki (0 px). */
/* H1: systemowy <h1> (header_name) przenosi ys-klient.js do hero - w zrodle 1 H1, na ekranie ten sam (14k + 14n) */
html body.page-index .ys-hero__search:empty { min-height: 124px; }
@media (max-width: 991px) { html body.page-index .ys-hero__search:empty { min-height: 212px; } }   /* zwarta karta 2x2 na telefonie (§13 nizej): 212 px (CLS, runda 5) */
html body .ys-footer .footer__contact { align-items: flex-start !important; justify-content: start !important; }   /* runda 5: na telefonie grid centrowal kolumne kontaktu (+16 px, F16) */
html body.page-contact .contact { padding-bottom: clamp(48px, 6vw, 80px) !important; }
/* (11) kontrolki i przypisy mapy Leaflet w kroju marki (spec 15: „Lucida Console", „Helvetica Neue" na /contact) */
html body .leaflet-container, html body .leaflet-container a, html body .leaflet-control-zoom a, html body .leaflet-control-attribution { font-family: var(--ys-font-body) !important; }
/* (12) runda 5 (testy 2026-10-01, telefon) */
/* przycisk, akordeon /offer/N, opis lozek, karta 2x2 i pasek CTA na telefonie - od 2026-10-01 w BIBLIOTECE (layer3 §10b, layer4 §PASEK-CTA,
   ido-mobile-nav initPasekCta, reguly L-*). Tu tylko roznice marki: */
html body .ys-pasek__btn { background: var(--ys-primary) !important; color: #FFFFFF !important; border-radius: 8px !important; }   /* ten sam styl co przycisk wyszukiwarki */
/* /contact: mapa za niska (320 px), kanon layer2 §CONTACT (14y) */
html body.page-contact #map_container { height: clamp(360px, 52vh, 560px) !important; min-height: 360px !important; }
/* cena w JEDNEJ ramce (14z, layer3 §5): karta = tabela sezonu, `.object-price` bez wlasnej ramki i cienia */
html body.page-offer .offer-prices .object-price, html body.page-offer #offer-prices_mobile .object-price {
  border: 0 !important; box-shadow: none !important; background: transparent !important; white-space: normal !important; flex-wrap: wrap !important;
}
/* (13) baner cookies w lewym dolnym rogu - od 2026-10-01 kanon BIBLIOTEKI (layer4 §COOKIE-PASYWNY, L-cookie-pasywny-rog).
   Tu tylko hero na telefonie: mniej powietrza nad tytulem, zeby karta wyszukiwarki konczyla sie nad banerem. */
@media (max-width: 767px) {
  html body.page-index .ys-home .ys-hero { padding-top: 72px !important; }   /* mniej powietrza nad tytulem: karta konczy sie wyzej niz baner cookies */
  html body.page-index .ys-hero__lead { font-size: 15px !important; line-height: 1.5 !important; }
}
/* /§UA-CLIENT */

/* ═══ §UA-RUNDA-ZDJECIA (2026-10-01, zgloszenie Damiana: „bardzo malo zdjec", „okolica, kuligi brak fot",
   „zdjecia na glownej nie klikalne", sekcja opinii, podstrona Grupy i przyjecia) ═══════════════════════════ */

/* (1) „Dom w zdjeciach" - mozaika prawdziwych kadrow obiektu, kazdy klikalny (lightbox: .ys-home figure img) */
html body .ys-dom__dopisek { margin: 0; font-size: 14px; color: var(--ys-text-muted); }
html body .ys-dom__siatka { display: grid; grid-template-columns: 2fr 1fr 1fr; grid-auto-rows: clamp(150px, 16vw, 230px); gap: 14px; }
html body .ys-dom__kadr { position: relative; margin: 0; overflow: hidden; border-radius: 20px; background: #E6DED3; }
html body .ys-dom__kadr--duzy { grid-column: 1 / 2; grid-row: 1 / 3; }
html body .ys-dom__kadr img { width: 100%; height: 100%; object-fit: cover; display: block; transition: transform .8s cubic-bezier(.2,.7,.2,1); }
html body .ys-dom__kadr:hover img { transform: scale(1.05); }
html body .ys-dom__kadr figcaption {
  position: absolute; left: 12px; bottom: 12px; padding: 6px 12px; border-radius: 999px; pointer-events: none;
  background: rgba(16,32,26,.72); color: #FFFFFF; font-size: 13px; font-weight: 700; letter-spacing: .02em;
}
@media (max-width: 767px) {
  html body .ys-dom__siatka { grid-template-columns: 1fr 1fr; grid-auto-rows: 150px; gap: 10px; }
  html body .ys-dom__kadr--duzy { grid-column: 1 / -1; grid-row: auto; height: 220px; }
}

/* (2) kulig na glownej: duzy kadr + dwa mniejsze, wszystkie klikalne */
html body .ys-kulig__galeria { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }
html body .ys-kulig__galeria .ys-kulig__foto:first-child { grid-column: 1 / -1; }
html body .ys-kulig__foto--maly img { border-radius: 20px !important; box-shadow: 0 16px 34px rgba(20,14,12,.14) !important; }
html body .ys-kulig__foto--maly::after { content: none !important; }

/* (3) okolica na glownej: szesc kart ze zdjeciem (linki do kart na /txt Okolica) + mapa z adresem pod spodem */
html body .ys-miejsca-home { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 18px; }   /* 8 kart = 2 pelne rzedy (bez dziury) */
html body .ys-miejsce-k { display: flex; flex-direction: column; gap: 4px; text-decoration: none !important; color: var(--ys-text) !important; }
html body .ys-miejsce-k__foto { display: block; aspect-ratio: 4 / 3; overflow: hidden; border-radius: 20px; background: #E6DED3; margin-bottom: 10px; }
html body .ys-miejsce-k__foto img { width: 100%; height: 100%; object-fit: cover; display: block; transition: transform .8s cubic-bezier(.2,.7,.2,1); }
html body .ys-miejsce-k:hover .ys-miejsce-k__foto img { transform: scale(1.05); }
html body .ys-miejsce-k__nazwa { font-family: var(--ys-font-heading); font-weight: 600; font-size: 22px; line-height: 1.2; }
html body .ys-miejsce-k__opis { font-size: 15px; line-height: 1.5; color: var(--ys-text-soft); }
html body .ys-miejsce-k:focus-visible { outline: 3px solid var(--ys-secondary); outline-offset: 4px; border-radius: 20px; }
html body .ys-okolica--mapa { display: grid; grid-template-columns: minmax(0, 7fr) minmax(0, 5fr); gap: clamp(24px, 4vw, 56px); align-items: center; margin-top: clamp(48px, 6vw, 80px); }
html body .ys-okolica--mapa .ys-mapa { height: clamp(300px, 30vw, 400px); }
html body .ys-okolica--mapa .ys-adres { display: block; margin: 0; }
html body .ys-okolica--mapa .ys-adres p { font-size: 16px; line-height: 1.65; color: var(--ys-text-soft); margin: 0 0 14px; }
html body .ys-okolica--mapa .ys-adres .ys-adres__linia { font-size: 18px; }
@media (max-width: 991px) {
  html body .ys-miejsca-home { grid-template-columns: 1fr 1fr; }
  html body .ys-okolica--mapa { grid-template-columns: 1fr; }
}
@media (max-width: 560px) { html body .ys-miejsca-home { grid-template-columns: 1fr; } }

/* (4) opinie gosci - sekcja CMS `text` (EDYTOWALNA). Sekcja `text` renderuje sie WPROST w .section_sub.container,
   bez wiersza .row (pamiec: „Sekcja CMS text NIE MA wiersza .row") - rozpoznajemy ja po cytacie .ys-opinia */
html body.page-index main .section_sub.container:has(> .ys-opinia) {
  max-width: var(--ys-maxw); margin: 0 auto !important; padding: clamp(72px, 9vw, 120px) clamp(20px, 4vw, 48px) !important;
  display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); column-gap: clamp(24px, 3vw, 44px); row-gap: 4px; align-items: start;
}
html body.page-index main .section_sub.container:has(> .ys-opinia) > :not(.ys-opinia) { grid-column: 1 / -1; }
html body.page-index main .section_sub.container:has(> .ys-opinia) > h2 {
  font-family: var(--ys-font-heading) !important; font-weight: 600 !important; font-size: clamp(34px, 4vw, 54px) !important;
  line-height: 1.08 !important; color: var(--ys-text) !important; margin: 0 0 clamp(28px, 3vw, 44px) !important; text-transform: none !important;
}
html body .ys-opinia { margin: 0; padding: 26px 0 0; border-top: 2px solid var(--ys-primary); position: relative; }
html body .ys-opinia::before {
  /* ” (gorny cudzyslow) - dolny „ przy line-height < 1 schodzil na pierwsza litere cytatu (zgloszenie Damiana 2026-10-02) */
  content: "\201D"; display: block; font-family: var(--ys-font-heading); font-size: 56px; line-height: 1; height: 34px;
  overflow: hidden; color: var(--ys-secondary); margin: 0 0 10px;
}
html body.page-index .ys-opinia p {
  font-family: var(--ys-font-heading); font-size: 19px; line-height: 1.55; color: var(--ys-text) !important; margin: 0 0 16px; max-width: none;
}
html body.page-index .ys-opinia p.ys-opinia__tlum { font-family: var(--ys-font-body); font-size: 15px; color: var(--ys-text-soft) !important; }
html body .ys-opinia cite { display: block; font-style: normal; font-size: 13px; font-weight: 700; letter-spacing: .04em; color: var(--ys-secondary-ink, #7A5A2E); }
@media (max-width: 860px) {
  html body.page-index main .section_sub.container:has(> .ys-opinia) { grid-template-columns: 1fr; row-gap: 22px; }
}

/* (5) grupy na glownej (photo_and_text) - przycisk w tresci CMS */
html body.page-index main .section_sub.container > .row .ys-btn { margin-top: 8px; }

/* (6) Okolica /txt: karty miejsc ze zdjeciem (klik = okno karty, layer-miejsca + ido-miejsca) */
html body.page-txt .ys-okolica__lista { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 18px; }
html body.page-txt .ys-okolica__p { display: flex; flex-direction: column; overflow: hidden; border-radius: 20px; background: #FFFFFF; border: 1px solid rgba(94, 107, 71,.10); box-shadow: 0 12px 30px rgba(20,14,12,.07); transition: transform .25s ease, box-shadow .25s ease; }
html body.page-txt .ys-okolica__p:hover { transform: translateY(-3px); box-shadow: 0 20px 40px rgba(20,14,12,.12); }
html body.page-txt .ys-okolica__kadr { margin: 0; aspect-ratio: 4 / 3; overflow: hidden; background: #E6DED3; }
html body.page-txt .ys-okolica__kadr img { width: 100%; height: 100%; object-fit: cover; display: block; border-radius: 0 !important; }
html body .ys-okolica__kadr--plansza, html body.page-txt .ys-okolica__kadr.ys-okolica__kadr--plansza { display: flex; align-items: flex-end; padding: 20px; background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='40' viewBox='0 0 120 40'%3E%3Cpath d='M0 20c10-8 20-8 30 0s20 8 30 0 20-8 30 0 20 8 30 0' fill='none' stroke='%23C0AA90' stroke-opacity='.35' stroke-width='1.5'/%3E%3C/svg%3E") center / 120px 40px repeat, radial-gradient(120% 120% at 20% 0%, #7E8E62 0%, #3A4230 80%); }   /* plansza Villi: oliwka + fale piasku (zamiast cegly Homeland) */
html body .ys-okolica__kadr--plansza span { font-family: var(--ys-font-heading); font-size: 26px; font-style: italic; font-weight: 500; line-height: 1.15; color: #F4EFE4; }
html body.page-txt .ys-okolica__tekst { padding: 18px 20px 22px; }
html body.page-txt .ys-okolica__nazwa { font-size: 22px !important; color: var(--ys-text) !important; margin: 0 0 6px !important; }
html body.page-txt .txt-text .ys-okolica__opis { margin: 0; font-size: 15px; line-height: 1.55; color: var(--ys-text-soft); }
html body.page-txt .ys-okolica__czas { display: none; }   /* minuty tylko w oknie karty (decyzja Damiana) */
/* grupa z 4 kartami = 2 x 2 (zamiast 3 + samotna czwarta) */
html body.page-txt .ys-okolica__lista:has(> li:nth-child(4):last-child) { grid-template-columns: repeat(2, minmax(0, 1fr)); }
/* okno karty: „Wyznacz trase" jako przycisk marki (layer-miejsca daje tylko geometrie) */
html body .ys-miejsce__akcje .ys-miejsce__trasa {
  display: inline-flex; align-items: center; min-height: 46px; padding: 12px 22px !important; border-radius: 10px;
  background: var(--ys-primary) !important; color: #FFFFFF !important; font-weight: 800; text-decoration: none !important;
}
html body .ys-miejsce__akcje .ys-miejsce__trasa:hover { background: var(--ys-ink) !important; }
html body.page-txt .ys-okolica__lupa { top: 12px !important; right: 12px !important; }
html body .ys-miejsce__foto .ys-okolica__kadr--plansza { min-height: 100%; aspect-ratio: auto; }
@media (max-width: 991px) { html body.page-txt .ys-okolica__lista { grid-template-columns: 1fr 1fr; } }
@media (max-width: 560px) { html body.page-txt .ys-okolica__lista { grid-template-columns: 1fr; } }

/* (7) podstrony /txt: sekcje CMS tekst + zdjecie w rytmie, z oddechem miedzy sekcjami */
html body.page-txt .txt-text > div > .row:has(> .col-md-6), html body.page-txt .txt-text .row:has(> [class*="col-md-6"]) {
  max-width: 1040px; margin: 0 auto clamp(48px, 6vw, 88px) !important; align-items: center; row-gap: 24px;
}
html body.page-txt .txt-text .row:has(> [class*="col-md-6"]) img { aspect-ratio: 4 / 3; height: auto; max-height: none; }
html body.page-txt .txt-text .ys-eyebrow { margin-bottom: 10px; }

/* (8) Grupy i przyjecia: cztery karty-wejscia, uprawnienia do turnusow */
html body.page-txt .ys-grupy-karty { list-style: none; margin: 0 0 clamp(48px, 6vw, 80px); padding: 0; display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); column-gap: clamp(18px, 2.5vw, 32px); }
html body.page-txt .ys-grupy-karta { padding: 20px 0 0; border-top: 2px solid var(--ys-primary); }
html body.page-txt .ys-grupy-karta__nr { display: block; font-family: var(--ys-font-heading); font-size: 15px; font-weight: 600; letter-spacing: .08em; color: var(--ys-secondary-ink, #7A5A2E); margin-bottom: 8px; }
html body.page-txt .ys-grupy-karta h3 { font-size: 21px !important; margin: 0 0 6px !important; }
html body.page-txt .txt-text .ys-grupy-karta p { margin: 0; font-size: 15px; line-height: 1.55; }
html body.page-txt .ys-strona--turnusy { background: var(--ys-cream); border-radius: var(--ys-radius-band); padding: clamp(32px, 5vw, 64px) clamp(24px, 5vw, 64px) !important; margin-bottom: clamp(48px, 6vw, 88px); }
html body.page-txt .ys-strona__tytul--sredni { font-size: clamp(26px, 3vw, 38px) !important; }
html body.page-txt .ys-turnusy { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 2fr); gap: clamp(24px, 4vw, 56px); margin-top: 18px; }
html body.page-txt .ys-turnusy__glowa { font-size: 12.5px !important; font-weight: 800; letter-spacing: .16em; text-transform: uppercase; color: var(--ys-secondary-ink, #7A5A2E) !important; margin: 0 0 14px !important; }
html body.page-txt .ys-lista-ptaszki--2kol { grid-template-columns: 1fr 1fr; }
html body.page-txt .txt-text .ys-turnusy__nota { margin: 22px 0 0; font-size: 15px; }
html body.page-txt .ys-strona__akcje { display: flex; gap: 12px; justify-content: center; flex-wrap: wrap; }
@media (max-width: 991px) { html body.page-txt .ys-grupy-karty { grid-template-columns: 1fr 1fr; row-gap: 24px; } html body.page-txt .ys-turnusy { grid-template-columns: 1fr; } }
@media (max-width: 560px) { html body.page-txt .ys-grupy-karty, html body.page-txt .ys-lista-ptaszki--2kol { grid-template-columns: 1fr; } }
html body.page-txt .ys-turnusy > div:first-child .ys-lista-ptaszki { grid-template-columns: 1fr; }

/* tablica „Kuchnia i doba" rozdzielona na dwie grupy (zgloszenie 2026-10-02: wyzywienie jest platne, doba to ramy czasowe):
   Wyzywienie (platne dodatkowo) | Doba hotelowa - dwie kolumny, kazda z wlasnym naglowkiem */
html body .ys-tablica:has(> .ys-tablica__grupa) { display: grid; grid-template-columns: minmax(0, 3fr) minmax(0, 2fr); gap: 28px clamp(32px, 5vw, 72px); }
html body .ys-tablica__grupa .ys-tablica__lista { grid-template-columns: 1fr; }
html body .ys-tablica__grupa + .ys-tablica__grupa { border-left: 1px solid rgba(94, 107, 71, 0.12); padding-left: clamp(24px, 4vw, 56px); }
@media (max-width: 767px) {
  html body .ys-tablica:has(> .ys-tablica__grupa) { grid-template-columns: 1fr; }
  html body .ys-tablica__grupa + .ys-tablica__grupa { border-left: 0; padding-left: 0; border-top: 1px solid rgba(94, 107, 71, 0.12); padding-top: 22px; }
}

/* pinezka mapy = znak domu w bialej kropli (2026-10-02, zamiast ciemnej kropli) - home i /contact */
html body .ys-pin.ys-pin--znak { background: none !important; border: 0 !important; }
html body .ys-pin--znak .ys-pin__kropla {
  position: relative; display: flex; align-items: center; justify-content: center; width: 52px; height: 52px;
  border-radius: 50% 50% 50% 0; transform: rotate(-45deg); background: #FFFFFF; border: 3px solid var(--ys-secondary);
  box-shadow: 0 8px 18px rgba(10, 20, 14, 0.32);
}
html body .ys-pin--znak .ys-pin__znak { display: block; transform: rotate(45deg); width: 34px; color: var(--ys-primary); line-height: 0; }
html body .ys-pin--znak .ys-pin__znak svg { width: 34px; height: auto; display: block; }

/* /offers: H1 silnika (.big-label) wersalikami w Playfair dawal ~90 px i spychal liste pod ekran (2026-10-02) */
html body:not(#_).page-offers .offers_content h1.big-label,
html body:not(#_).page-offers h1.big-label {
  font-size: clamp(34px, 3.6vw, 52px) !important; line-height: 1.1 !important; text-transform: none !important;
  letter-spacing: -0.01em !important; color: var(--ys-text) !important; margin-bottom: 28px !important;
}

/* ═══════════════════════════════════════════════════════════════════════════


/* ── §YS-R3 (2026-10-15): galeria z lightboxem, tabela porownawcza, cztery fakty, pas spaceru ── */
html body:not(#_).page-txt .ys-galeria { max-width: 1240px; margin: 0 auto clamp(32px, 4vw, 56px); }
html body:not(#_).page-txt .ys-galeria__grupa + .ys-galeria__grupa { margin-top: clamp(32px, 4vw, 56px); }
html body:not(#_).page-txt .ys-galeria__t { margin: 0 0 16px !important; font: 600 clamp(22px, 2.2vw, 28px)/1.2 var(--ys-font-heading) !important; color: var(--ys-text) !important; }
html body:not(#_).page-txt .ys-galeria__siatka { display: grid !important; grid-template-columns: repeat(auto-fill, minmax(min(100%, 240px), 1fr)); gap: 12px; margin: 0 !important; padding: 0 !important; }
html body:not(#_).page-txt .ys-galeria__k { margin: 0 !important; aspect-ratio: 4 / 3; overflow: hidden; border-radius: 2px; background: var(--ys-cream); }
html body:not(#_).page-txt .ys-galeria__k img { width: 100% !important; height: 100% !important; object-fit: cover; display: block; cursor: zoom-in; transition: transform .5s ease; }
html body:not(#_).page-txt .ys-galeria__k:hover img { transform: scale(1.04); }
html body:not(#_).page-txt .ys-tabela { max-width: 1040px; margin: 0 auto; overflow-x: auto; }
html body:not(#_).page-txt .ys-tabela table { width: 100%; border-collapse: collapse; font: 400 16px/1.5 var(--ys-font-body); color: var(--ys-text); background: #FFFFFF; }
html body:not(#_).page-txt .ys-tabela th, html body:not(#_).page-txt .ys-tabela td { padding: 14px 16px; border-bottom: 1px solid rgba(0, 0, 0, .1); text-align: left; vertical-align: top; }
html body:not(#_).page-txt .ys-tabela thead th { font: 700 15px/1.3 var(--ys-font-body); letter-spacing: .04em; color: #FFFFFF; background: var(--ys-primary); }
html body:not(#_).page-txt .ys-tabela tbody th { font-weight: 600; color: var(--ys-text); white-space: nowrap; }
html body:not(#_).page-txt .ys-cztery { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: clamp(16px, 2.4vw, 32px); margin: 8px 0 0 !important; padding: 0 !important; list-style: none !important; }
html body:not(#_).page-txt .ys-cztery li { margin: 0 !important; padding: 20px 0 0 !important; border-top: 2px solid var(--ys-primary); }
html body:not(#_).page-txt .ys-cztery li::before { content: none !important; }
html body:not(#_).page-txt .ys-cztery__nr { display: block; margin-bottom: 10px; font: 600 14px/1 var(--ys-font-body); letter-spacing: .14em; color: #74552A; }
html body:not(#_).page-txt .ys-cztery h3 { margin: 0 0 6px !important; font: 600 22px/1.2 var(--ys-font-heading) !important; color: var(--ys-text) !important; }
html body:not(#_).page-txt .ys-cztery p { margin: 0 !important; font: 400 15.5px/1.55 var(--ys-font-body) !important; color: var(--ys-text-soft) !important; }
@media (max-width: 860px) { html body:not(#_).page-txt .ys-cztery { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 480px) { html body:not(#_).page-txt .ys-cztery { grid-template-columns: minmax(0, 1fr); } }
html body:not(#_).page-txt .ys-spacer-pas { text-align: center; }
html body:not(#_).page-txt .ys-spacer-pas__liczby { margin: 0 0 10px !important; font: 500 clamp(22px, 2.4vw, 30px)/1.2 var(--ys-font-heading) !important; color: var(--ys-text) !important; }
html body:not(#_).page-txt .ys-spacer-pas__liczby strong { font-size: 1.7em; color: var(--ys-primary); }
html body:not(#_).page-txt .ys-spacer-pas > * { margin-left: auto !important; margin-right: auto !important; text-align: center !important; }
html body:not(#_).page-txt .ys-spacer-pas__liczby { max-width: none !important; width: 100%; }
html body:not(#_).page-txt .ys-spacer-pas .ys-strona__lead { margin-left: auto !important; margin-right: auto !important; }


/* ══════════════════════════════════════════════════════════════════════════════════════════════
   §YS-R1 (2026-11-05) - „TABLICA PRZYLOTÓW": wygląd Yose Apartment (24453, Poznań-Ławica).
   Karta startowa pkt 9-12 (ok Damiana 2026-10-28). Obiekt jest przy lotnisku Ławica, logo ma samolot:
   wyszukiwarka i czasy dojazdu jako tablica lotniska (krój Space Mono, żółte litery na grafitowym tle),
   reszta strony jasna (krem), czerwień logo #CC1B22 jako akcent, grafit #1E2227 jako tekst.
   Kroje: Young Serif (nagłówki), Instrument Sans (tekst), Space Mono (tablica). Dopisana NA KOŃCU arkusza.
   ══════════════════════════════════════════════════════════════════════════════════════════════ */
html:root {
  --ys-primary: #CC1B22; --ys-primary-dark: #A3151B; --ys-primary-light: #E7484E; --ys-primary-soft: #FBE4E3; --ys-primary-ink: #A3151B;
  --ys-secondary: #1E2227; --ys-secondary-dark: #121417; --ys-secondary-light: #3D454F; --ys-secondary-soft: #E6E4DF; --ys-secondary-ink: #A3151B;
  --ys-bg: #F6F2EA; --ys-cream: #EFE8DC; --ys-papier: #FFFDF9; --ys-text: #1E2227; --ys-text-soft: #474D55; --ys-text-muted: #5C626A; --ys-ink: #1E2227;
  --ys-tablica: #16191C; --ys-tablica-2: #20252A; --ys-klapka: #F3C04F; --ys-klapka-2: #FFE7A8;
  --ys-linia: rgba(30, 34, 39, .14); --ys-linia-mocna: rgba(30, 34, 39, .3);
  --ys-font-heading: "Young Serif", Georgia, "Times New Roman", serif;
  --ys-font-body: "Instrument Sans", system-ui, -apple-system, "Segoe UI", sans-serif;
  --ys-font-mono: "Space Mono", ui-monospace, "SFMono-Regular", Menlo, monospace;
  --ys-r: 14px; --ys-maxw: 1240px; --ido-hairline: rgba(30, 34, 39, .14);
  --ys-cien: 0 1px 2px rgba(18, 20, 23, .08), 0 22px 44px -22px rgba(18, 20, 23, .45);
  --xx-cream: var(--ys-cream); --xx-bg: var(--ys-bg); --xx-text: var(--ys-text); --xx-text-soft: var(--ys-text-soft); --xx-text-muted: var(--ys-text-muted);
  --xx-dark: var(--ys-text); --xx-footer-bg: var(--ys-tablica); --xx-hero-bg: var(--ys-tablica);
  color-scheme: only light;
}
html body:not(#_) { background: var(--ys-bg) !important; color: var(--ys-text); font-family: var(--ys-font-body) !important; }
html body:not(#_) :is(h1, h2, h3, h4, .big-label) { font-family: var(--ys-font-heading) !important; font-weight: 400 !important; letter-spacing: -.01em; }
html body:not(#_) .ys-eyebrow { font: 700 12.5px/1.2 var(--ys-font-mono) !important; letter-spacing: .14em !important; text-transform: uppercase; color: var(--ys-primary-dark) !important; margin: 0 0 12px !important; }
html body:not(#_) .ys-tytul { font: 400 clamp(30px, 3.4vw, 48px)/1.08 var(--ys-font-heading) !important; color: var(--ys-text) !important; margin: 0 0 16px !important; }
html body:not(#_) .ys-lead { font: 400 clamp(17px, 1.3vw, 19px)/1.62 var(--ys-font-body) !important; color: var(--ys-text-soft) !important; max-width: 60ch; margin: 0 0 24px !important; }
html body:not(#_) .ys-wnetrze { max-width: var(--ys-maxw); margin: 0 auto; padding: 0 clamp(18px, 4vw, 40px); }
html body:not(#_) a.ys-btn, html body:not(#_) .ys-btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 10px; min-height: 52px; padding: 0 28px !important; border-radius: 10px !important;
  background: var(--ys-primary) !important; color: #FFFFFF !important; font: 700 16px/1 var(--ys-font-body) !important; text-decoration: none !important;
  border: 0 !important; box-shadow: 0 12px 26px -14px rgba(163, 21, 27, .75); transition: transform .2s ease, background-color .2s ease;
}
html body:not(#_) a.ys-btn:hover { background: var(--ys-primary-dark) !important; transform: translateY(-2px); }
html body:not(#_) a.ys-btn--ciemny { background: var(--ys-secondary) !important; box-shadow: none; }
html body:not(#_) a.ys-btn--ciemny:hover { background: var(--ys-secondary-dark) !important; }
html body:not(#_) a.ys-link { font: 700 16px/1.3 var(--ys-font-body) !important; color: var(--ys-text) !important; text-decoration: none !important;
  border-bottom: 2px solid var(--ys-primary) !important; padding-bottom: 2px; }
html body:not(#_) a.ys-link:hover { color: var(--ys-primary-dark) !important; }
html body:not(#_) :focus-visible { outline: 3px solid var(--ys-primary) !important; outline-offset: 3px; }

/* systemowe części home chowamy TYLKO tam, gdzie są nasze sekcje (EN/DE mają dziś starą treść - pakiet = PL) */
html body.page-index:has(.ys-home) main .index-info { position: absolute !important; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); }

/* ── 1. HERO: zdjęcie salonu + tablica przylotów z wyszukiwarką ── */
html body.page-index:not(#_) .ys-przylot {
  display: grid; grid-template-columns: minmax(0, 1.08fr) minmax(0, 1fr); gap: 0; align-items: stretch;
  min-height: min(860px, calc(100vh - 20px)); padding: calc(var(--ys-header-h, 84px) + 18px) clamp(14px, 2.4vw, 32px) clamp(28px, 3vw, 44px);
  background: var(--ys-bg);
}
html body.page-index:not(#_) .ys-przylot__foto { position: relative; margin: 0; overflow: hidden; border-radius: var(--ys-r) 0 0 var(--ys-r); min-height: 420px; background: var(--ys-tablica); }
html body.page-index:not(#_) .ys-przylot__foto img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; object-position: 50% 55%;
  animation: ys-zoom 28s ease-in-out infinite alternate; transform-origin: 40% 60%; }
@keyframes ys-zoom { from { transform: scale(1); } to { transform: scale(1.09); } }
html body.page-index:not(#_) .ys-przylot__podpis { position: absolute; left: 18px; bottom: 18px; margin: 0 !important; padding: 8px 12px; border-radius: 6px;
  background: rgba(22, 25, 28, .82); color: #FFFFFF !important; font: 700 12px/1.2 var(--ys-font-mono) !important; letter-spacing: .1em; text-transform: uppercase; }
html body.page-index:not(#_) .ys-przylot__tablica {
  position: relative; display: flex; flex-direction: column; justify-content: center; gap: 0;
  padding: clamp(26px, 3.4vw, 52px) clamp(22px, 3.2vw, 52px); border-radius: 0 var(--ys-r) var(--ys-r) 0;
  background: var(--ys-tablica); color: #FFFFFF;
  background-image: repeating-linear-gradient(180deg, rgba(255, 255, 255, .025) 0 1px, transparent 1px 4px);
}
html body.page-index:not(#_) .ys-przylot__glowa { display: flex; justify-content: space-between; align-items: center; gap: 12px; margin: 0 0 clamp(18px, 2.4vw, 30px) !important;
  padding-bottom: 14px; border-bottom: 1px solid rgba(255, 255, 255, .14); font: 700 12.5px/1.2 var(--ys-font-mono); letter-spacing: .16em; text-transform: uppercase; color: var(--ys-klapka); }
html body.page-index:not(#_) .ys-przylot__glowa span:last-child { color: rgba(255, 255, 255, .72); letter-spacing: .08em; }
html body.page-index:not(#_) .ys-przylot__glowa svg { width: 20px; height: 20px; vertical-align: -4px; margin-right: 8px; fill: currentColor; }
html body.page-index:not(#_) .ys-przylot .ys-hero__title, html body.page-index:not(#_) .ys-przylot h1 {
  font: 400 clamp(32px, 3.5vw, 52px)/1.06 var(--ys-font-heading) !important; color: #FFFFFF !important; margin: 0 0 14px !important; text-transform: none !important; letter-spacing: -.01em !important; }
html body.page-index:not(#_) .ys-przylot__lead { margin: 0 0 22px !important; font: 400 17px/1.6 var(--ys-font-body) !important; color: rgba(255, 255, 255, .82) !important; max-width: 46ch; }
html body.page-index:not(#_) .ys-przylot__fakty { display: flex; flex-wrap: wrap; gap: 8px; margin: 0 0 24px !important; padding: 0 !important; list-style: none !important; }
html body.page-index:not(#_) .ys-przylot__fakty span { margin: 0 !important; padding: 7px 10px !important; border-radius: 4px; background: var(--ys-tablica-2); border: 1px solid rgba(255, 255, 255, .08);
  font: 700 13.5px/1 var(--ys-font-mono) !important; letter-spacing: .04em; color: var(--ys-klapka-2) !important; }
html body.page-index:not(#_) html body.page-index:not(#_) .ys-przylot__cena { margin: 18px 0 0 !important; font: 400 14.5px/1.4 var(--ys-font-body) !important; color: rgba(255, 255, 255, .72) !important; }
html body.page-index:not(#_) .ys-przylot__cena strong { font: 700 15px/1 var(--ys-font-mono); color: var(--ys-klapka); }

/* wyszukiwarka jako wiersz tablicy: PRZYLOT / WYLOT / OSOBY */
html body.page-index:not(#_) .ys-przylot .ys-search { display: grid !important; grid-template-columns: 1fr 1fr 0.7fr; gap: 8px !important; margin: 0 !important; padding: 0 !important;
  background: transparent !important; box-shadow: none !important; border: 0 !important; max-width: none !important; }
html body.page-index:not(#_) .ys-przylot .ys-search__group--loc { display: none !important; }
html body.page-index:not(#_) .ys-przylot .ys-search__group { display: flex !important; flex-direction: column; gap: 6px; margin: 0 !important; padding: 12px 12px 10px !important;
  border-radius: 6px !important; background: var(--ys-tablica-2) !important; border: 1px solid rgba(255, 255, 255, .1) !important; min-width: 0; }
html body.page-index:not(#_) .ys-przylot .ys-search__label { display: flex; align-items: center; gap: 6px; margin: 0 !important; font: 700 11.5px/1.2 var(--ys-font-mono) !important;
  letter-spacing: .14em; text-transform: uppercase; color: rgba(255, 255, 255, .7) !important; }
html body.page-index:not(#_) .ys-przylot .ys-search__label svg { width: 14px; height: 14px; color: var(--ys-klapka); }
html body.page-index:not(#_) .ys-przylot .ys-search :is(input, select) { width: 100% !important; min-height: 34px !important; padding: 0 !important; border: 0 !important; border-radius: 0 !important;
  background: transparent !important; box-shadow: none !important; color: var(--ys-klapka) !important; font: 700 17px/1.2 var(--ys-font-mono) !important; letter-spacing: .02em; cursor: pointer; }
html body.page-index:not(#_) .ys-przylot .ys-search select option { color: var(--ys-text); background: #FFFFFF; }
html body.page-index:not(#_) .ys-przylot .ys-search :is(input)::placeholder { color: rgba(243, 192, 79, .62) !important; opacity: 1; }
html body.page-index:not(#_) .ys-przylot .ys-search__submit { grid-column: 1 / -1; display: inline-flex !important; align-items: center; justify-content: center; gap: 10px;
  margin: 6px 0 0 !important; min-height: 56px; width: 100% !important; border: 0 !important; border-radius: 8px !important; background: var(--ys-primary) !important;
  color: #FFFFFF !important; font: 700 16px/1 var(--ys-font-body) !important; letter-spacing: .02em; cursor: pointer; transition: background-color .2s ease; }
html body.page-index:not(#_) .ys-przylot .ys-search__submit:hover { background: var(--ys-primary-dark) !important; }
html body.page-index:not(#_) .ys-przylot .ys-search__submit svg { width: 18px; height: 18px; }

/* ── 2. ODLOTY: czasy dojazdu jako tablica ── */
html body.page-index:not(#_) .ys-odloty { padding: clamp(36px, 5vw, 72px) 0; background: var(--ys-bg); }
html body.page-index:not(#_) .ys-odloty__glowa { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: end; gap: 16px 32px; margin-bottom: 22px; }
html body.page-index:not(#_) .ys-odloty__glowa .ys-tytul { margin: 0 !important; }
html body.page-index:not(#_) .ys-tablica { margin: 0 !important; padding: 10px clamp(10px, 2vw, 22px) !important; list-style: none !important; border-radius: var(--ys-r);
  background: var(--ys-tablica); box-shadow: var(--ys-cien); }
html body.page-index:not(#_) .ys-tablica__naglowek, html body.page-index:not(#_) .ys-tablica__w > a {
  display: grid; grid-template-columns: 76px minmax(0, 1fr) 132px 110px 28px; gap: 14px; align-items: center; }
html body.page-index:not(#_) .ys-tablica__naglowek { padding: 10px 10px 12px; font: 700 11.5px/1 var(--ys-font-mono); letter-spacing: .16em; text-transform: uppercase;
  color: rgba(255, 255, 255, .55); border-bottom: 1px solid rgba(255, 255, 255, .12); }
html body.page-index:not(#_) .ys-tablica__w { margin: 0 !important; padding: 0 !important; border-bottom: 1px solid rgba(255, 255, 255, .07); }
html body.page-index:not(#_) .ys-tablica__w::before { content: none !important; }
html body.page-index:not(#_) .ys-tablica__w:last-child { border-bottom: 0; }
html body.page-index:not(#_) .ys-tablica__w > a { padding: 14px 10px; color: #FFFFFF !important; text-decoration: none !important; border-radius: 6px; transition: background-color .2s ease; }
html body.page-index:not(#_) .ys-tablica__w > a:hover { background: rgba(255, 255, 255, .05); }
html body.page-index:not(#_) .ys-tablica__kod { display: inline-flex; gap: 2px; }
html body.page-index:not(#_) .ys-tablica__kod i { display: inline-block; width: 1.25em; padding: 5px 0; text-align: center; font: 700 17px/1 var(--ys-font-mono); font-style: normal;
  color: var(--ys-klapka); background: var(--ys-tablica-2); border-radius: 3px; box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .5), inset 0 1px 0 rgba(255, 255, 255, .05);
  background-image: linear-gradient(180deg, transparent 49%, rgba(0, 0, 0, .55) 49%, rgba(0, 0, 0, .55) 51%, transparent 51%); }
html body.page-index:not(#_) .ys-tablica__cel { font: 400 clamp(17px, 1.5vw, 21px)/1.25 var(--ys-font-heading); color: #FFFFFF; min-width: 0; }
html body.page-index:not(#_) .ys-tablica__cel small { display: block; margin-top: 3px; font: 400 13.5px/1.3 var(--ys-font-body); color: rgba(255, 255, 255, .62); }
html body.page-index:not(#_) .ys-tablica__czas { font: 700 18px/1 var(--ys-font-mono); color: var(--ys-klapka); white-space: nowrap; }
html body.page-index:not(#_) .ys-tablica__tryb { font: 700 12px/1 var(--ys-font-mono); letter-spacing: .12em; text-transform: uppercase; color: #8FD19E; white-space: nowrap; }
html body.page-index:not(#_) .ys-tablica__strz { width: 18px; height: 18px; color: rgba(255, 255, 255, .45); }
html body.page-index:not(#_) .ys-odloty__przypis { margin: 14px 0 0 !important; font: 400 13.5px/1.5 var(--ys-font-body) !important; color: var(--ys-text-muted) !important; }

/* ── 3. KTO GDZIE ŚPI: trzy sypialnie z łóżkami narysowanymi jak plan ── */
html body.page-index:not(#_) .ys-plan { padding: clamp(48px, 6vw, 96px) 0; background: var(--ys-papier); border-top: 1px solid var(--ys-linia); border-bottom: 1px solid var(--ys-linia); }
html body.page-index:not(#_) .ys-plan__glowa { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 18px 40px; align-items: end; margin-bottom: clamp(26px, 3vw, 40px); }
html body.page-index:not(#_) .ys-plan__liczby { display: flex; gap: clamp(16px, 2.4vw, 34px); margin: 0 !important; padding: 0 !important; list-style: none !important; }
html body.page-index:not(#_) .ys-plan__liczby li { margin: 0 !important; padding: 0 0 0 14px !important; border-left: 3px solid var(--ys-primary); }
html body.page-index:not(#_) .ys-plan__liczby li::before { content: none !important; }
html body.page-index:not(#_) .ys-plan__liczby strong { display: block; font: 400 clamp(30px, 3vw, 42px)/1 var(--ys-font-heading); color: var(--ys-text); }
html body.page-index:not(#_) .ys-plan__liczby span { display: block; margin-top: 6px; font: 700 12px/1.2 var(--ys-font-mono); letter-spacing: .1em; text-transform: uppercase; color: var(--ys-text-muted); }
html body.page-index:not(#_) .ys-plan__pokoje { display: grid; grid-template-columns: 1fr 1fr 1.5fr; gap: clamp(14px, 2vw, 24px); margin: 0 !important; padding: 0 !important; list-style: none !important; }
html body.page-index:not(#_) .ys-plan__p { margin: 0 !important; padding: 0 !important; display: flex; flex-direction: column; border-radius: var(--ys-r); overflow: hidden; background: #FFFFFF;
  border: 1px solid var(--ys-linia); box-shadow: 0 1px 2px rgba(18, 20, 23, .05); }
html body.page-index:not(#_) .ys-plan__p::before { content: none !important; }
html body.page-index:not(#_) .ys-plan__foto { margin: 0; aspect-ratio: 4 / 3; overflow: hidden; background: var(--ys-cream); }
html body.page-index:not(#_) .ys-plan__p--duzy .ys-plan__foto { aspect-ratio: 16 / 9; }
html body.page-index:not(#_) .ys-plan__foto img { width: 100%; height: 100%; object-fit: cover; display: block; cursor: zoom-in; transition: transform .6s ease; }
html body.page-index:not(#_) .ys-plan__p:hover .ys-plan__foto img { transform: scale(1.04); }
html body.page-index:not(#_) .ys-plan__opis { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 6px 16px; align-items: center; padding: 18px 20px 20px; }
html body.page-index:not(#_) .ys-plan__nazwa { grid-column: 1; margin: 0 !important; font: 400 22px/1.2 var(--ys-font-heading) !important; color: var(--ys-text) !important; }
html body.page-index:not(#_) .ys-plan__ile { grid-column: 1; margin: 0 !important; font: 700 13px/1.2 var(--ys-font-mono) !important; letter-spacing: .06em; color: var(--ys-primary-dark) !important; }
html body.page-index:not(#_) .ys-lozka { grid-column: 2; grid-row: 1 / span 2; display: flex; flex-wrap: wrap; gap: 5px; max-width: 132px; justify-content: flex-end; }
html body.page-index:not(#_) .ys-lozka i { display: block; width: 18px; height: 30px; border: 2px solid var(--ys-text); border-radius: 3px; background: linear-gradient(180deg, var(--ys-primary-soft) 0 26%, transparent 26%); }
html body.page-index:not(#_) .ys-plan__reszta { display: flex; flex-wrap: wrap; gap: 10px 26px; margin: 22px 0 0 !important; padding: 0 !important; list-style: none !important; }
html body.page-index:not(#_) .ys-plan__reszta li { margin: 0 !important; padding: 0 0 0 22px !important; position: relative; font: 400 16px/1.5 var(--ys-font-body); color: var(--ys-text-soft); }
html body.page-index:not(#_) .ys-plan__reszta li::before { content: "" !important; position: absolute; left: 0; top: .5em; width: 10px; height: 10px; border-radius: 2px; background: var(--ys-primary); }
html body.page-index:not(#_) .ys-plan__cta { display: flex; flex-wrap: wrap; gap: 14px 26px; align-items: center; margin-top: 28px; }

/* ── 4. DLA KOGO: karty pokładowe ── */
html body.page-index:not(#_) .ys-karty { padding: clamp(48px, 6vw, 96px) 0; background: var(--ys-bg); }
html body.page-index:not(#_) .ys-karty__lista { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: clamp(14px, 2vw, 22px); margin: clamp(22px, 3vw, 34px) 0 0 !important; padding: 0 !important; list-style: none !important; }
html body.page-index:not(#_) .ys-bilet { position: relative; margin: 0 !important; padding: 0 !important; display: grid; grid-template-columns: minmax(0, 1fr) 118px; border-radius: var(--ys-r);
  background: #FFFFFF; border: 1px solid var(--ys-linia); box-shadow: 0 1px 2px rgba(18, 20, 23, .05); overflow: hidden; }
html body.page-index:not(#_) .ys-bilet::before { content: none !important; }
html body.page-index:not(#_) .ys-bilet > a { display: contents; color: inherit !important; text-decoration: none !important; }
html body.page-index:not(#_) .ys-bilet__glowny { padding: 22px 24px 24px; }
html body.page-index:not(#_) .ys-bilet__klasa { margin: 0 0 10px !important; font: 700 11.5px/1 var(--ys-font-mono) !important; letter-spacing: .16em; text-transform: uppercase; color: var(--ys-primary-dark) !important; }
html body.page-index:not(#_) .ys-bilet__t { margin: 0 0 8px !important; font: 400 23px/1.2 var(--ys-font-heading) !important; color: var(--ys-text) !important; }
html body.page-index:not(#_) .ys-bilet__o { margin: 0 !important; font: 400 15.5px/1.55 var(--ys-font-body) !important; color: var(--ys-text-soft) !important; }
html body.page-index:not(#_) .ys-bilet__odcinek { display: flex; flex-direction: column; justify-content: center; align-items: center; gap: 6px; padding: 16px 10px; text-align: center;
  border-left: 2px dashed var(--ys-linia-mocna); background: var(--ys-cream); }
html body.page-index:not(#_) .ys-bilet__odcinek::before, html body.page-index:not(#_) .ys-bilet__odcinek::after { content: ""; position: absolute; right: 108px; width: 20px; height: 20px; border-radius: 50%; background: var(--ys-bg); border: 1px solid var(--ys-linia); }
html body.page-index:not(#_) .ys-bilet__odcinek::before { top: -11px; } html body.page-index:not(#_) .ys-bilet__odcinek::after { bottom: -11px; }
html body.page-index:not(#_) .ys-bilet__wyjscie { font: 700 11px/1 var(--ys-font-mono); letter-spacing: .16em; text-transform: uppercase; color: var(--ys-text-muted); }
html body.page-index:not(#_) .ys-bilet__nr { font: 400 34px/1 var(--ys-font-heading); color: var(--ys-primary); }
html body.page-index:not(#_) .ys-bilet:hover { border-color: var(--ys-linia-mocna); }

/* ── 5. KAMIENICE: separator z fasadami Starego Rynku ── */
html body.page-index:not(#_) .ys-kamienice { margin: 0; padding: 0; line-height: 0; background: var(--ys-bg); }
html body.page-index:not(#_) .ys-kamienice svg { display: block; width: 100%; height: clamp(70px, 9vw, 130px); }

/* ── 6. DOBRZE WIEDZIEĆ + FINAŁ ── */
html body.page-index:not(#_) .ys-wiedza { padding: clamp(48px, 6vw, 88px) 0; background: var(--ys-tablica); color: #FFFFFF; }
html body.page-index:not(#_) .ys-wiedza .ys-eyebrow { color: var(--ys-klapka) !important; }
html body.page-index:not(#_) .ys-wiedza .ys-tytul { color: #FFFFFF !important; }
html body.page-index:not(#_) .ys-wiedza__siatka { display: grid; grid-template-columns: minmax(0, 5fr) minmax(0, 7fr); gap: clamp(28px, 5vw, 72px); align-items: start; }
html body.page-index:not(#_) .ys-wiedza__lista { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); column-gap: 28px; margin: 0 !important; }
html body.page-index:not(#_) .ys-wiedza__lista > div { padding: 16px 0; border-bottom: 1px solid rgba(255, 255, 255, .12); }
html body.page-index:not(#_) .ys-wiedza__lista dt { margin: 0 0 6px; font: 700 11.5px/1.2 var(--ys-font-mono); letter-spacing: .14em; text-transform: uppercase; color: rgba(255, 255, 255, .6); }
html body.page-index:not(#_) .ys-wiedza__lista dd { margin: 0; font: 400 17px/1.45 var(--ys-font-body); color: #FFFFFF; }
html body.page-index:not(#_) .ys-wiedza__lista dd strong { font: 700 17px/1 var(--ys-font-mono); color: var(--ys-klapka); }
html body.page-index:not(#_) .ys-wiedza a.ys-link { color: #FFFFFF !important; }
html body.page-index:not(#_) .ys-wiedza__lead { margin: 0 0 22px !important; font: 400 17px/1.6 var(--ys-font-body) !important; color: rgba(255, 255, 255, .78) !important; }

html body.page-index:not(#_) .ys-final { position: relative; padding: clamp(56px, 7vw, 110px) clamp(18px, 4vw, 40px); background: var(--ys-bg); text-align: center; }
html body.page-index:not(#_) .ys-final__karta { position: relative; max-width: 760px; margin: 0 auto; padding: clamp(32px, 4vw, 56px) clamp(22px, 4vw, 56px); border-radius: var(--ys-r);
  background: #FFFFFF; border: 1px solid var(--ys-linia); box-shadow: var(--ys-cien); }
html body.page-index:not(#_) .ys-final__karta p { margin: 0 auto 26px !important; max-width: 52ch; font: 400 17px/1.6 var(--ys-font-body) !important; color: var(--ys-text-soft) !important; }
html body.page-index:not(#_) .ys-final__cta { display: flex; flex-wrap: wrap; gap: 14px 26px; justify-content: center; align-items: center; }

/* sekcje CMS edytowane przez klienta (text_and_photo, text) na home - w rytmie strony */
html body.page-index:has(.ys-home) main .section_sub.container:has(> .row > [class*="col-"] > p.ys-eyebrow),
html body.page-index:has(.ys-home) main .section_sub.container:has(> p.ys-eyebrow) { max-width: var(--ys-maxw) !important; margin: 0 auto !important; padding: clamp(48px, 6vw, 88px) clamp(18px, 4vw, 40px) !important; }
html body.page-index:has(.ys-home) main .section_sub.container:has(> .row > [class*="col-"] > p.ys-eyebrow) > .row { align-items: center; row-gap: 26px; }
html body.page-index:has(.ys-home) main .section_sub.container:has(> .row > [class*="col-"] > p.ys-eyebrow) img { width: 100% !important; border-radius: var(--ys-r); aspect-ratio: 4 / 3; object-fit: cover; }
html body.page-index:has(.ys-home) main .section_sub.container:is(:has(> .row > [class*="col-"] > p.ys-eyebrow), :has(> p.ys-eyebrow)) h2 { font: 400 clamp(28px, 3vw, 42px)/1.1 var(--ys-font-heading) !important; color: var(--ys-text) !important; margin: 0 0 16px !important; text-transform: none !important; }
html body.page-index:has(.ys-home) main .section_sub.container:is(:has(> .row > [class*="col-"] > p.ys-eyebrow), :has(> p.ys-eyebrow)) :is(p, li) { font: 400 17px/1.65 var(--ys-font-body); color: var(--ys-text-soft); }
html body.page-index:has(.ys-home) main .section_sub.container:has(> p.ys-eyebrow) > :is(p, h2, ul) { max-width: 72ch; }
html body.page-index:has(.ys-home) main .section_sub.container:has(> p.ys-eyebrow) ul { columns: 2 320px; column-gap: 40px; padding-left: 1.1em; }
html body.page-index:has(.ys-home) main .section_sub.container:has(> p.ys-eyebrow) li { margin: 0 0 10px; break-inside: avoid; }
html body.page-index:has(.ys-home) main .section_sub.container:has(> p.ys-eyebrow) li::marker { color: var(--ys-primary); }

/* ── 7. PODSTRONY ── */
html body.page-txt:not(#_) .ys-strona__tytul, html body.page-txt:not(#_) h1.ys-strona__tytul { font: 400 clamp(32px, 3.8vw, 52px)/1.08 var(--ys-font-heading) !important; color: var(--ys-text) !important; }
html body.page-txt:not(#_) .ys-plan { padding: 0; background: transparent; border: 0; }
html body.page-txt:not(#_) .ys-plan__pokoje { display: grid; grid-template-columns: 1fr 1fr 1.5fr; gap: 18px; margin: 0 0 clamp(28px, 4vw, 48px) !important; padding: 0 !important; list-style: none !important; }
html body.page-txt:not(#_) .ys-plan__p { margin: 0 !important; padding: 0 !important; border-radius: var(--ys-r); overflow: hidden; background: #FFFFFF; border: 1px solid var(--ys-linia); }
html body.page-txt:not(#_) .ys-plan__p::before { content: none !important; }
html body.page-txt:not(#_) .ys-plan__foto { margin: 0; aspect-ratio: 4 / 3; overflow: hidden; }
html body.page-txt:not(#_) .ys-plan__foto img { width: 100% !important; height: 100% !important; object-fit: cover; display: block; border-radius: 0 !important; max-height: none !important; }
html body.page-txt:not(#_) .ys-plan__opis { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 6px 16px; align-items: center; padding: 16px 18px 18px; }
html body.page-txt:not(#_) .ys-plan__nazwa { margin: 0 !important; font: 400 21px/1.2 var(--ys-font-heading) !important; color: var(--ys-text) !important; }
html body.page-txt:not(#_) .ys-plan__ile { margin: 0 !important; font: 700 13px/1.2 var(--ys-font-mono) !important; color: var(--ys-primary-dark) !important; max-width: none !important; }
html body.page-txt:not(#_) .ys-lozka { grid-column: 2; grid-row: 1 / span 2; display: flex; flex-wrap: wrap; gap: 5px; max-width: 132px; justify-content: flex-end; }
html body.page-txt:not(#_) .ys-lozka i { display: block; width: 18px; height: 30px; border: 2px solid var(--ys-text); border-radius: 3px; background: linear-gradient(180deg, var(--ys-primary-soft) 0 26%, transparent 26%); }
html body.page-txt:not(#_) .ys-spacer { text-align: center; }
html body.page-txt:not(#_) .ys-spacer > * { margin-left: auto !important; margin-right: auto !important; }
html body.page-txt:not(#_) .ys-spacer__okno { position: relative; max-width: 1040px; margin: 0 auto 28px; aspect-ratio: 16 / 9; border-radius: var(--ys-r); overflow: hidden; background: var(--ys-tablica); }
html body.page-txt:not(#_) .ys-spacer__okno img { width: 100% !important; height: 100% !important; object-fit: cover; max-height: none !important; border-radius: 0 !important; opacity: .55; }
html body.page-txt:not(#_) .ys-spacer__okno a { position: absolute; inset: 0; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 14px; color: #FFFFFF !important; text-decoration: none !important; }
html body.page-txt:not(#_) .ys-spacer__okno span { display: inline-flex; align-items: center; gap: 10px; min-height: 58px; padding: 0 30px; border-radius: 10px; background: var(--ys-primary); font: 700 18px/1 var(--ys-font-body); }
html body.page-txt:not(#_) .ys-spacer__okno small { font: 700 12.5px/1 var(--ys-font-mono); letter-spacing: .14em; text-transform: uppercase; color: var(--ys-klapka); }
html body.page-txt:not(#_) .ys-galeria__t small { margin-left: 10px; font: 700 12px/1 var(--ys-font-mono); letter-spacing: .1em; text-transform: uppercase; color: var(--ys-text-muted); }

/* ── 8. STOPKA i nagłówek: grafit tablicy, czerwony akcent ── */
html body:not(#_) header .navbar-reservation a, html body:not(#_) header a.navbar-reservation, html body:not(#_) header .navbar-reservation .btn { background: var(--ys-primary) !important; border-color: var(--ys-primary) !important; color: #FFFFFF !important; }

/* ── 9. TELEFON ── */
@media (max-width: 991px) {
  html body.page-index:not(#_) .ys-przylot { grid-template-columns: minmax(0, 1fr); min-height: 0; padding-left: 12px; padding-right: 12px; }
  html body.page-index:not(#_) .ys-przylot__foto { min-height: 0; aspect-ratio: 4 / 3; border-radius: var(--ys-r) var(--ys-r) 0 0; }
  html body.page-index:not(#_) .ys-przylot__tablica { border-radius: 0 0 var(--ys-r) var(--ys-r); }
  html body.page-index:not(#_) .ys-plan__glowa, html body.page-index:not(#_) .ys-wiedza__siatka { grid-template-columns: minmax(0, 1fr); }
  html body.page-index:not(#_) .ys-plan__pokoje, html body.page-txt:not(#_) .ys-plan__pokoje { grid-template-columns: 1fr 1fr; }
  html body:not(#_) .ys-plan__p--duzy { grid-column: 1 / -1; }
  html body.page-index:not(#_) .ys-karty__lista { grid-template-columns: minmax(0, 1fr); }
}
@media (max-width: 640px) {
  html body.page-index:not(#_) .ys-przylot .ys-search { grid-template-columns: 1fr 1fr; }
  html body.page-index:not(#_) .ys-przylot .ys-search__group--guests { grid-column: 1 / -1; }
  html body.page-index:not(#_) .ys-tablica__naglowek { display: none; }
  html body.page-index:not(#_) .ys-tablica__w > a { grid-template-columns: 70px minmax(0, 1fr) auto; grid-template-areas: "kod cel czas" "kod cel tryb"; gap: 4px 12px; }
  html body.page-index:not(#_) .ys-tablica__kod { grid-area: kod; } html body.page-index:not(#_) .ys-tablica__cel { grid-area: cel; }
  html body.page-index:not(#_) .ys-tablica__czas { grid-area: czas; text-align: right; font-size: 15px; } html body.page-index:not(#_) .ys-tablica__tryb { grid-area: tryb; text-align: right; font-size: 10.5px; }
  html body.page-index:not(#_) .ys-tablica__strz { display: none; }
  html body.page-index:not(#_) .ys-tablica__kod i { font-size: 14px; }
  html body.page-index:not(#_) .ys-plan__pokoje, html body.page-txt:not(#_) .ys-plan__pokoje { grid-template-columns: minmax(0, 1fr); }
  html body.page-index:not(#_) .ys-plan__liczby { flex-wrap: wrap; }
  html body.page-index:not(#_) .ys-bilet { grid-template-columns: minmax(0, 1fr) 84px; }
  html body.page-index:not(#_) .ys-bilet__odcinek::before, html body.page-index:not(#_) .ys-bilet__odcinek::after { right: 74px; }
  html body.page-index:not(#_) .ys-wiedza__lista { grid-template-columns: minmax(0, 1fr); }
}
@media (prefers-reduced-motion: reduce) { html body.page-index:not(#_) .ys-przylot__foto img { animation: none !important; } }
@media (forced-colors: active) {
  html body.page-index:not(#_) :is(.ys-przylot__tablica, .ys-tablica, .ys-wiedza, .ys-przylot__fakty li, .ys-przylot .ys-search__group) { background: Canvas !important; color: CanvasText !important; border: 1px solid CanvasText !important; }
  html body.page-index:not(#_) :is(.ys-tablica__kod i, .ys-tablica__czas, .ys-tablica__cel, .ys-przylot h1, .ys-przylot__lead, .ys-wiedza dd, .ys-wiedza dt, .ys-wiedza .ys-tytul) { color: CanvasText !important; background: Canvas !important; }
  html body.page-index:not(#_) .ys-przylot .ys-search :is(input, select) { color: FieldText !important; background: Field !important; }
  html body.page-index:not(#_) .ys-przylot .ys-search__submit { background: ButtonFace !important; color: ButtonText !important; border: 2px solid ButtonBorder !important; }
}

/* ── 10. PRZELOT 2026-11-05: systemowy H1 podstron ma text-transform uppercase (silnik), galeria szersza niz naglowek strony ── */
html body.page-txt:not(#_) h1.ys-strona__tytul, html body.page-txt:not(#_) h1.ys-h1-podstrony { text-transform: none !important; letter-spacing: -.01em !important; }
html body.page-txt:not(#_) .ys-galeria { max-width: 1040px !important; }

/* ── 11. FAQ (akordeon sklada ys-klient faq()) - styl z pd-klient-dom.css, w palecie Yose ── */
html body.page-txt .ys-faq { max-width: 860px; margin: 0 auto !important; border-bottom: 1px solid var(--ys-linia); padding: 0 !important; }
html body.page-txt .ys-faq h3 { margin: 0 !important; }
html body.page-txt:not(#_) .ys-faq__q { display: flex; align-items: center; justify-content: space-between; gap: 20px; width: 100%; padding: 20px 0; border: 0 !important; border-radius: 0 !important; background: none !important; box-shadow: none !important;
  text-align: left; cursor: pointer; font: 400 21px/1.3 var(--ys-font-heading) !important; color: var(--ys-text) !important; text-transform: none !important; }
html body.page-txt .ys-faq__q::after { content: "+"; flex: 0 0 auto; display: grid; place-items: center; width: 32px; height: 32px; border-radius: 50%; border: 1px solid var(--ys-primary); font: 400 20px/1 var(--ys-font-body); color: var(--ys-primary); }
html body.page-txt .ys-faq--otw .ys-faq__q::after { content: "\2212"; background: var(--ys-primary); color: #FFFFFF; }
html body.page-txt .ys-faq__q:focus-visible { outline: 2px solid var(--ys-primary); outline-offset: 4px; }
html body.page-txt .ys-faq > :not(h3) { display: none; }
html body.page-txt .ys-faq.ys-faq--otw > :not(h3) { display: block; margin: 0 0 20px !important; font-size: 16.5px; line-height: 1.7; color: var(--ys-text-soft); max-width: 70ch; }

/* ── 12. Okolica: plansza = kafel tablicy odlotow (kod lotniskowy), nie fale z klonu; tytul okna bez wersalikow ── */
html body:not(#_) .ys-okolica__kadr--plansza, html body.page-txt:not(#_) .ys-okolica__kadr.ys-okolica__kadr--plansza {
  align-items: center !important; justify-content: center !important; background: var(--ys-tablica) !important;
  background-image: repeating-linear-gradient(180deg, rgba(255, 255, 255, .03) 0 1px, transparent 1px 4px) !important; }
html body:not(#_) .ys-okolica__kadr--plansza span { font: 700 clamp(34px, 4vw, 52px)/1 var(--ys-font-mono) !important; font-style: normal !important; letter-spacing: .18em; color: var(--ys-klapka) !important; }
html body:not(#_) [class*="ys-miejsce"] :is(h2, h3, h4) { text-transform: none !important; letter-spacing: -.01em !important; }
html body:not(#_) .ys-okolica__czas { font-family: var(--ys-font-mono) !important; color: var(--ys-primary-dark) !important; }

/* ── 13. Okolica: karty ze zdjeciem (2026-11-05) - kod lotniskowy jako klapka na kadrze, zeby zostal motyw tablicy ── */
html body.page-txt:not(#_) .ys-okolica__kadr--foto, html body:not(#_) .ys-miejsce__foto .ys-okolica__kadr--foto { position: relative; }
html body:not(#_) .ys-okolica__kod { position: absolute; left: 14px; bottom: 14px; padding: 7px 10px 6px; border-radius: 6px; background: var(--ys-tablica) !important;
  font: 700 15px/1 var(--ys-font-mono) !important; letter-spacing: .18em; color: var(--ys-klapka) !important; box-shadow: 0 4px 14px rgba(0, 0, 0, .25); pointer-events: none; }
html body.page-txt .ys-okolica__p:hover .ys-okolica__kadr--foto img { transform: scale(1.04); }
html body.page-txt .ys-okolica__kadr--foto img { transition: transform .5s ease; }
@media (prefers-reduced-motion: reduce) { html body.page-txt .ys-okolica__kadr--foto img { transition: none; } html body.page-txt .ys-okolica__p:hover .ys-okolica__kadr--foto img { transform: none; } }
/* telefon: grupa 4 kart tez w 1 kolumnie (regula :has(4 kart) w bazie ma wieksza wage niz media 560 px i ucinala nazwy) */
@media (max-width: 560px) { html body.page-txt .ys-okolica__lista:has(> li:nth-child(4):last-child) { grid-template-columns: 1fr; } }

/* ── 14. HERO = SLIDER ZDJEC APARTAMENTU (ticket #17, wzor u-aniolka): przyciemnione kadry zmieniaja sie same,
   tablica z wyszukiwarka lezy NA zdjeciach; pod hero cztery kwadraty atutow nachodza na dol zdjecia ── */
html body.page-index:not(#_) .ys-przylot.ys-przylot--slider {
  position: relative; isolation: isolate; overflow: hidden; display: grid; grid-template-columns: minmax(0, 600px); align-content: center;
  min-height: clamp(640px, 94vh, 940px); padding: calc(var(--ys-header-h, 84px) + 32px) clamp(18px, 5vw, 72px) clamp(150px, 19vh, 200px);
  background: var(--ys-tablica); }
html body.page-index:not(#_) .ys-przylot__slajdy { position: absolute; inset: 0; z-index: -2; margin: 0; }
html body.page-index:not(#_) .ys-przylot__slajdy img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; object-position: 50% 55%;
  opacity: 0; animation: ys-slajd 35s linear infinite; will-change: opacity, transform; border-radius: 0 !important; }
html body.page-index:not(#_) .ys-przylot__slajdy img:nth-child(1) { animation-delay: -1.5s; }
html body.page-index:not(#_) .ys-przylot__slajdy img:nth-child(2) { animation-delay: 5.5s; }
html body.page-index:not(#_) .ys-przylot__slajdy img:nth-child(3) { animation-delay: 12.5s; }
html body.page-index:not(#_) .ys-przylot__slajdy img:nth-child(4) { animation-delay: 19.5s; }
html body.page-index:not(#_) .ys-przylot__slajdy img:nth-child(5) { animation-delay: 26.5s; }
@keyframes ys-slajd { 0% { opacity: 0; transform: scale(1); } 5% { opacity: 1; } 20% { opacity: 1; } 25% { opacity: 0; transform: scale(1.07); } 100% { opacity: 0; transform: scale(1.07); } }
html body.page-index:not(#_) .ys-przylot--slider::after { content: ""; position: absolute; inset: 0; z-index: -1; pointer-events: none;
  background: linear-gradient(90deg, rgba(14, 16, 19, .72) 0%, rgba(14, 16, 19, .42) 48%, rgba(14, 16, 19, .18) 100%),
              linear-gradient(180deg, rgba(14, 16, 19, .35) 0%, rgba(14, 16, 19, 0) 30%, rgba(14, 16, 19, .5) 100%); }
html body.page-index:not(#_) .ys-przylot--slider .ys-przylot__tablica { border-radius: var(--ys-r); background-color: rgba(22, 25, 28, .84) !important;
  -webkit-backdrop-filter: blur(6px); backdrop-filter: blur(6px); box-shadow: 0 30px 70px rgba(0, 0, 0, .35); border: 1px solid rgba(255, 255, 255, .08); }

html body.page-index:not(#_) .ys-kafle { position: relative; z-index: 4; margin-top: -118px !important; padding: 0 clamp(16px, 4vw, 56px) clamp(8px, 2vw, 20px) !important; }
html body.page-index:not(#_) .ys-kafle__siatka { max-width: var(--ys-maxw); margin: 0 auto; display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 16px; }
html body.page-index:not(#_) a.ys-kafelek { position: relative; display: block; overflow: hidden; isolation: isolate; aspect-ratio: 1 / 1; min-height: 0; border-radius: var(--ys-r);
  background: var(--ys-tablica); color: #FFFFFF !important; text-decoration: none !important; box-shadow: 0 18px 40px rgba(14, 16, 19, .22); }
html body.page-index:not(#_) .ys-kafelek__foto, html body.page-index:not(#_) .ys-kafelek__foto img { position: absolute; inset: 0; width: 100%; height: 100%; display: block; }
html body.page-index:not(#_) .ys-kafelek__foto img { object-fit: cover; border-radius: 0 !important; transition: transform .8s cubic-bezier(.2, .7, .2, 1); }
html body.page-index:not(#_) a.ys-kafelek:hover .ys-kafelek__foto img { transform: scale(1.06); }
html body.page-index:not(#_) a.ys-kafelek::after { content: ""; position: absolute; inset: 0; z-index: 1; background: linear-gradient(180deg, rgba(14, 16, 19, 0) 35%, rgba(14, 16, 19, .86) 100%); }
html body.page-index:not(#_) .ys-kafelek__tresc { position: absolute; left: 0; right: 0; bottom: 0; z-index: 2; display: flex; flex-direction: column; gap: 4px; padding: 18px 20px 20px; }
html body.page-index:not(#_) .ys-kafelek__nad { align-self: flex-start; padding: 5px 8px 4px; border-radius: 4px; background: var(--ys-tablica); font: 700 11px/1 var(--ys-font-mono); letter-spacing: .14em; text-transform: uppercase; color: var(--ys-klapka); }
html body.page-index:not(#_) .ys-kafelek__tytul { margin-top: 6px; font: 400 clamp(20px, 1.8vw, 25px)/1.15 var(--ys-font-heading); color: #FFFFFF; }
html body.page-index:not(#_) .ys-kafelek__opis { font: 400 14px/1.45 var(--ys-font-body); color: rgba(255, 255, 255, .86); }

/* zdjecia Poznania pod „Kto u nas nocuje" - sekcja double_photo (klient podmienia w panelu) */
html body.page-index:has(.ys-home) main .section_sub.container:has(> .row > [class*="col-"] > img):not(:has(p, h2, h3)) {
  max-width: var(--ys-maxw) !important; margin: 0 auto !important; padding: 0 clamp(18px, 4vw, 40px) clamp(40px, 5vw, 72px) !important; }
html body.page-index:has(.ys-home) main .section_sub.container:has(> .row > [class*="col-"] > img):not(:has(p, h2, h3)) > .row { row-gap: 16px; }
html body.page-index:has(.ys-home) main .section_sub.container:has(> .row > [class*="col-"] > img):not(:has(p, h2, h3)) img {
  width: 100% !important; aspect-ratio: 16 / 10; object-fit: cover; border-radius: var(--ys-r) !important; display: block; }

@media (max-width: 991px) {
  html body.page-index:not(#_) .ys-przylot.ys-przylot--slider { grid-template-columns: minmax(0, 1fr); padding: calc(var(--ys-header-h, 72px) + 16px) 12px 110px; min-height: 0; }
  html body.page-index:not(#_) .ys-przylot--slider .ys-przylot__tablica { border-radius: var(--ys-r); }
  html body.page-index:not(#_) .ys-kafle { margin-top: -80px !important; padding: 0 12px 8px !important; }
  html body.page-index:not(#_) .ys-kafle__siatka { grid-template-columns: 1fr 1fr; gap: 10px; }
  html body.page-index:not(#_) .ys-kafelek__tresc { padding: 12px 12px 14px; }
  html body.page-index:not(#_) .ys-kafelek__opis { display: none; }
  html body.page-index:not(#_) .ys-kafelek__tytul { font-size: 18px; }
}
@media (prefers-reduced-motion: reduce) {
  html body.page-index:not(#_) .ys-przylot__slajdy img { animation: none !important; }
  html body.page-index:not(#_) .ys-przylot__slajdy img:first-child { opacity: 1; }
}
@media (forced-colors: active) { html body.page-index:not(#_) .ys-przylot__slajdy, html body.page-index:not(#_) .ys-przylot--slider::after, html body.page-index:not(#_) a.ys-kafelek::after { display: none; } }

/* ── 15. DLA KOGO: porownanie apartament / hotel ── */
html body.page-txt:not(#_) .ys-porownanie__tytul { font: 400 clamp(26px, 2.6vw, 36px)/1.15 var(--ys-font-heading) !important; color: var(--ys-text) !important; margin: 0 0 10px !important; text-transform: none !important; }
html body.page-txt:not(#_) .ys-porownanie__ramka { overflow-x: auto; margin: 20px 0 16px; border-radius: var(--ys-r); border: 1px solid var(--ys-linia); background: #FFFFFF; }
html body.page-txt:not(#_) .ys-porownanie table { width: 100%; min-width: 520px; border-collapse: collapse; margin: 0 !important; font: 400 15.5px/1.45 var(--ys-font-body); color: var(--ys-text-soft); }
html body.page-txt:not(#_) .ys-porownanie :is(th, td) { padding: 13px 16px !important; text-align: left; border: 0 !important; border-bottom: 1px solid var(--ys-linia) !important; vertical-align: top; }
html body.page-txt:not(#_) .ys-porownanie tbody tr:last-child :is(th, td) { border-bottom: 0 !important; }
html body.page-txt:not(#_) .ys-porownanie thead th { background: var(--ys-tablica) !important; color: var(--ys-klapka) !important; font: 700 12px/1.2 var(--ys-font-mono) !important; letter-spacing: .12em; text-transform: uppercase; }
html body.page-txt:not(#_) .ys-porownanie tbody th { font-weight: 700; color: var(--ys-text) !important; white-space: nowrap; }
html body.page-txt:not(#_) .ys-porownanie tbody td:nth-child(2) { color: var(--ys-text) !important; font-weight: 600; background: rgba(163, 21, 27, .04); }
html body.page-txt:not(#_) .ys-porownanie__kiedy { font: 400 15.5px/1.6 var(--ys-font-body) !important; color: var(--ys-text-soft) !important; max-width: 80ch; }
/* §14 poprawki po przelocie: karta tablicy nie rozciaga sie na cala wysokosc hero; zdjecia Poznania na pelna szerokosc kontenera,
   mniej pustego miejsca miedzy „Praca i wypoczynek", „Kto u nas nocuje" i zdjeciami */
html body.page-index:not(#_) .ys-przylot--slider .ys-przylot__tablica { align-self: center; }
html body.page-index:not(#_) .ys-karty { padding-top: clamp(28px, 4vw, 56px) !important; padding-bottom: clamp(20px, 2.4vw, 32px) !important; }
html body.page-index:has(.ys-home) main .section_sub.container:has(> .row > [class*="col-"] > img):not(:has(p, h2, h3)) > .row { margin: 0 -8px !important; padding: 0 !important; }
html body.page-index:has(.ys-home) main .section_sub.container:has(> .row > [class*="col-"] > img):not(:has(p, h2, h3)) > .row > [class*="col-"] { padding: 0 8px !important; margin: 0 !important; }
@media (max-width: 640px) {
  html body.page-index:not(#_) .ys-przylot.ys-przylot--slider { padding-top: calc(var(--ys-header-h, 72px) + 150px); }
  html body.page-index:not(#_) .ys-przylot--slider .ys-przylot__lead { display: none; }
  html body.page-index:not(#_) .ys-przylot--slider .ys-przylot__tablica { background-color: rgba(22, 25, 28, .8) !important; padding: 20px 18px 22px; }
  html body.page-index:not(#_) .ys-przylot--slider .ys-hero__title { font-size: 30px !important; }
}
/* §14 cookie: baner silnika (pasywny, lewy dolny rog ~610 px) zaslanial przycisk wyszukiwarki -> na komputerze karta po PRAWEJ,
   na telefonie wyzszy pas slidera nad karta (wyszukiwarka wypada pod pierwszym ekranem, jak w poprzednim ukladzie). Test 14b. */
@media (min-width: 992px) {
  html body.page-index:not(#_) .ys-przylot.ys-przylot--slider { grid-template-columns: minmax(0, 1fr) minmax(0, 560px); }
  html body.page-index:not(#_) .ys-przylot--slider .ys-przylot__tablica { grid-column: 2; }
  html body.page-index:not(#_) .ys-przylot--slider::after { background: linear-gradient(270deg, rgba(14, 16, 19, .72) 0%, rgba(14, 16, 19, .4) 48%, rgba(14, 16, 19, .12) 100%),
    linear-gradient(180deg, rgba(14, 16, 19, .35) 0%, rgba(14, 16, 19, 0) 30%, rgba(14, 16, 19, .5) 100%); }
}
@media (max-width: 640px) {
  html body.page-index:not(#_) .ys-przylot.ys-przylot--slider { padding-top: calc(var(--ys-header-h, 72px) + 300px); }
  html body.page-index:not(#_) .ys-przylot--slider .ys-przylot__lead { display: block; font-size: 15.5px !important; }
}
