/*
Theme Name: Sauna na Wiśle
Author: Sauna na Wiśle
Description: Lekki, responsywny motyw. Cała treść stron pochodzi z edytora blokowego WordPress.
Version: 1.1.16
Requires at least: 6.3
Tested up to: 6.8
Requires PHP: 7.4
License: GPL-2.0-or-later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
Text Domain: sauna-na-wisle
Tags: custom-logo, custom-menu, e-commerce, featured-images, block-styles
*/
:root {
  --sauna-red: #e02328;
  --sauna-cream: #f4ead9;
  --sauna-blue: #b0d5ff;
  --sauna-purple: #624066;
  --sauna-purple-deep: #503454;
  --sauna-ink: #624066;
  --sauna-text: #f4ead9;
  --sauna-container: 1120px;
  --sauna-header-height: 56px;
  --sauna-title: 'new-astro', 'New Astro', 'DejaVu Sans', Arial, sans-serif;
  --sauna-serif: 'gelica', 'Gelica', 'DejaVu Serif', Georgia, serif;
  --sauna-shadow: 0 5px 18px rgba(52,12,51,.18);
}
*, *::before, *::after { box-sizing: border-box; }
html { scroll-behavior: smooth; }
body { margin: 0; min-width: 320px; background: var(--sauna-purple); color: var(--sauna-text); font-family: var(--sauna-serif); font-size: 18px; line-height: 1.5; overflow-wrap: break-word; }
a { color: inherit; text-underline-offset: .2em; }
img, svg, video { max-width: 100%; height: auto; }
img { display: block; }
figure { margin: 0; }
p { margin: 0 0 1.2em; }
h1, h2, h3, h4 { line-height: 1.13; margin: 0 0 .7em; }
h1 { font-family: var(--sauna-title); font-weight: 600; text-transform: uppercase; }
h2, h3, h4 { font-family: var(--sauna-serif); font-weight: 700; }
button, input, select, textarea { font: inherit; }
button { cursor: pointer; }
a:focus-visible, button:focus-visible, input:focus-visible, select:focus-visible, textarea:focus-visible { outline: 3px solid var(--sauna-blue); outline-offset: 3px; }
.screen-reader-text { position: absolute!important; height: 1px; width: 1px; clip: rect(1px,1px,1px,1px); overflow: hidden; }
.screen-reader-text:focus { clip: auto!important; z-index: 100000; left: 8px; top: 8px; width: auto; height: auto; padding: 12px; color: #111; background: #fff; }
.sauna-container { width: min(calc(100% - 48px), var(--sauna-container)); margin-inline: auto; }
.site-main { min-height: 35vh; }
/* This exact header is shared by every WordPress template. */
.site-header { position: relative; z-index: 900; width: 100%; background: var(--sauna-purple); color: var(--sauna-cream); }
.header-inner { min-height: var(--sauna-header-height); display: flex; align-items: center; justify-content: space-between; gap: 28px; }
.header-brand { flex: 0 0 168px; width: 168px; min-width: 0; }
.brand-link, .custom-logo-link { display: inline-flex; align-items: center; text-decoration: none; }
.brand-link img { width: 168px; height: auto; max-height: 40px; object-fit: contain; }
.custom-logo { width: 168px; height: auto; max-width: 168px; max-height: 40px; object-fit: contain; }
.site-nav .menu { margin: 0; padding: 0; display: flex; align-items: center; gap: clamp(18px,2.6vw,38px); list-style: none; }
.site-nav li { list-style: none; }
.site-nav a { display: block; padding: 12px 0; color: var(--sauna-cream); font: 600 14px/1.3 var(--sauna-title); text-transform: uppercase; letter-spacing: .01em; text-decoration: none; }
.site-nav a:hover, .site-nav .current-menu-item > a, .site-nav .current_page_item > a { text-decoration: underline; text-underline-offset: 6px; }
.nav-toggle { display: none; width: 44px; height: 44px; align-items: center; justify-content: center; background: transparent; border: 1px solid rgba(255,255,255,.35); border-radius: 6px; color: var(--sauna-cream); }
.nav-toggle .bars, .nav-toggle .bars::before, .nav-toggle .bars::after { content: ''; display: block; width: 22px; height: 2px; background: currentColor; border-radius: 2px; position: relative; transition: transform .18s; }
.nav-toggle .bars::before { position: absolute; top: -7px; }
.nav-toggle .bars::after { position: absolute; top: 7px; }
.nav-toggle[aria-expanded=true] .bars { background: transparent; }
.nav-toggle[aria-expanded=true] .bars::before { transform: translateY(7px) rotate(45deg); }
.nav-toggle[aria-expanded=true] .bars::after { transform: translateY(-7px) rotate(-45deg); }
@media (min-width: 782px) {
  .site-header { position: sticky; top: 0; }
  body.admin-bar .site-header { top: 32px; }
  .site-nav .menu-item-has-children { position: relative; }
  .site-nav .sub-menu { position: absolute; top: 100%; left: 0; display: none; min-width: 180px; margin: 0; padding: 10px 20px; list-style: none; background: var(--sauna-purple); box-shadow: 0 12px 26px rgba(0,0,0,.2); }
  .site-nav .menu-item-has-children:hover > .sub-menu, .site-nav .menu-item-has-children:focus-within > .sub-menu { display: block; }
  .site-nav .sub-menu a { white-space: nowrap; }
}
/* Real provided ray artwork, already contrast-adjusted for the page colors.
   IMPORTANT: the graphic is a direct element background rather than a ::before
   pseudo-element (which could be hidden or overwritten by block/theme styles).
   New asset URLs invalidate stale CDN/browser caches from previous releases. */
.site-header .sauna-container { width: min(90%, 1600px); }
.site-header .header-brand .brand-link img,
.site-header .header-brand .custom-logo-link img,
.woocommerce-page .site-header .header-brand img,
.woocommerce .site-header .header-brand img {
  display: block;
  width: 168px !important;
  max-width: 168px !important;
  height: auto !important;
  max-height: 40px !important;
  object-fit: contain;
}
/* Apply to both PHP generated banners AND existing Gutenberg banner blocks.
   This intentionally also styles older blocks lacking the sauna-rayed class. */
:is(.sauna-rayed, .sauna-home-hero, .sauna-page-banner, .sauna-section-banner) {
  position: relative;
  isolation: isolate;
  overflow: hidden;
  background-color: var(--sauna-red);
  background-image: url('assets/images/sauna-rays-red-112.png') !important;
  background-repeat: no-repeat !important;
  background-size: 115% auto !important;
  background-position: center -55vw !important;
}
/* Override stale ::before ray overlays carried by 1.1.0/1.1.1. */
:is(.sauna-rayed, .sauna-home-hero, .sauna-page-banner, .sauna-section-banner)::before {
  content: none !important;
  display: none !important;
}
:is(.sauna-rayed--purple,
    .sauna-main--prices .sauna-page-banner,
    .sauna-main--shop .sauna-page-banner,
    .sauna-main--standard .sauna-page-banner,
    .sauna-main--standard .sauna-section-banner) {
  background-color: var(--sauna-purple);
  background-image: url('assets/images/sauna-rays-purple-112.png') !important;
}
/* The red templates retain the red ray source independently of page content. */
:is(.sauna-rayed--red,
    .sauna-main--home .sauna-home-hero,
    .sauna-main--offer .sauna-page-banner,
    .sauna-main--offer .sauna-section-banner) {
  background-color: var(--sauna-red);
  background-image: url('assets/images/sauna-rays-red-112.png') !important;
}
/* The original composition places the display heading far into a tall,
   edge-to-edge ray panel: don't reveal the footer or shop grid above the fold. */
/* Main Oferta banner mirrors the height/heading of Cennik and Rezerwacja.
   Do not enlarge offer's internal section banners (--section), which have
   separate sizes and remain editable via Gutenberg. Mobile rules below retain
   the compact layouts introduced in version 1.1.7. */
.sauna-main--prices .sauna-page-banner,
.sauna-main--shop .sauna-page-banner,
.sauna-main--offer .sauna-page-banner:not(.sauna-page-banner--section) {
  min-height: clamp(640px, 100svh, 1050px);
  padding: 110px 24px 80px;
}
.sauna-main--prices .sauna-page-banner h1,
.sauna-main--shop .sauna-page-banner h1,
.sauna-main--offer .sauna-page-banner:not(.sauna-page-banner--section) h1 {
  font-size: clamp(44px, 5.6vw, 76px);
}
.sauna-main--prices .sauna-prices-body {
  min-height: max(640px, 110svh);
  background: transparent;
}
/* A missing/empty prices block must not shorten the visual page. */
.sauna-main--prices .sauna-default-content {
  min-height: 0;
  padding-bottom: 0;
}
/* Gutenberg: every heading, link, photo and caption lives in page post_content. */
.sauna-full-content > :where(.alignfull) { margin-inline: 0; }
.sauna-full-content > :where(.alignwide) { max-width: var(--sauna-container); margin-inline: auto; }
.sauna-main--home, .sauna-main--offer { background: var(--sauna-red); }
.sauna-main--standard, .sauna-main--prices, .sauna-main--shop { background: var(--sauna-purple); }
.sauna-home-hero { min-height: 100vh; padding: 115px 24px 64px; display: flex; align-items: center; justify-content: center; flex-direction: column; text-align: center; }
.sauna-home-hero h1 { margin: 0 0 100px; font-family: var(--sauna-title); font-size: clamp(43px, 6.3vw, 88px); font-weight: 600; color: var(--sauna-cream); }
.sauna-home-hero > p { max-width: 700px; margin: 30px auto 0; font-size: 18px; line-height: 1.38; }
.sauna-home-hero .wp-block-buttons { justify-content: center; }
.wp-block-buttons { gap: 1rem; }
.wp-block-button__link, .sauna-button, .woocommerce a.button, .woocommerce button.button, .woocommerce input.button, .woocommerce #respond input#submit, .woocommerce a.button.alt, .woocommerce button.button.alt, .woocommerce input.button.alt, .wc-block-components-button:not(.is-link) { display: inline-flex; align-items: center; justify-content: center; max-width: 100%; min-height: 50px; padding: 14px 32px; border: 0; border-radius: 50px; background: var(--sauna-purple); color: var(--sauna-cream); box-shadow: var(--sauna-shadow); font: 600 14px/1.3 var(--sauna-title); text-align: center; text-transform: uppercase; text-decoration: none; transition: transform .18s, filter .18s; }
.wp-block-button__link:hover, .sauna-button:hover, .woocommerce a.button:hover, .woocommerce button.button:hover, .woocommerce a.button.alt:hover, .woocommerce button.button.alt:hover, .wc-block-components-button:not(.is-link):hover { transform: translateY(-2px); filter: brightness(1.1); color: var(--sauna-cream); }
.sauna-button--cream .wp-block-button__link, .sauna-button--cream.wp-block-button__link { background: var(--sauna-cream); color: var(--sauna-purple); }
.sauna-button--cream .wp-block-button__link:hover { color: var(--sauna-purple); }
.sauna-photo-band { width: 100%; height: clamp(320px, 39vw, 510px); overflow: hidden; background: var(--sauna-cream); }
.sauna-photo-band > figure, .sauna-photo-band > figure img { width: 100%; height: 100%; }
.sauna-photo-band img { width: 100%; height: 100%; object-fit: cover; object-position: center 45%; }
.sauna-photo-band--second { height: clamp(360px, 50vw, 660px); }
.sauna-photo-band--second img { object-position: center 38%; }
.sauna-home-intro { background: var(--sauna-red); padding: 70px 24px 72px; text-align: center; }
.sauna-home-intro > p { max-width: 760px; margin: 0 auto 52px; font-size: 18px; }
.sauna-highlights { max-width: 810px; margin: 0 auto 52px!important; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 26px; }
.sauna-highlight { display: flex; align-items: center; flex-direction: column; justify-content: center; min-height: 210px; padding: 26px 17px; border: 1px solid rgba(255,255,255,.05); border-radius: 22px; background: var(--sauna-red); box-shadow: 0 4px 14px rgba(90,15,30,.27); }
/* Gutenberg's is-layout-flow inserts a positive top margin after the first
   block. In a CSS grid that makes the first tile appear taller than others.
   Reset only these three cards, without modifying WordPress global spacing. */
.sauna-highlights { align-items: stretch; }
.sauna-highlights > .sauna-highlight {
  margin-block: 0 !important;
  align-self: stretch;
}

.sauna-highlight h2 { font: 600 17px/1.15 var(--sauna-title); text-transform: uppercase; margin: 0 0 17px; }
.sauna-highlight p { font-size: 15px; line-height: 1.27; margin: 0; }
.sauna-home-intro .wp-block-buttons { justify-content: center; }
.sauna-page-banner { display: flex; justify-content: center; align-items: center; min-height: 440px; padding: 85px 24px; text-align: center; }
.sauna-page-banner h1, .sauna-page-banner h2 { max-width: 1000px; margin: 0; font: 600 clamp(44px, 7.2vw, 92px)/1.12 var(--sauna-title); text-transform: uppercase; color: var(--sauna-cream); }
.sauna-page-banner--section { min-height: 340px; }
.sauna-page-banner--section h2 { font-size: clamp(35px, 5.5vw, 66px); }
.sauna-default-content { width: min(calc(100% - 48px), 930px); margin: 0 auto; min-height: 320px; padding: 60px 0 100px; }
.sauna-default-content:has(> .sauna-page-banner:first-child), .sauna-offer-content:has(> .sauna-page-banner:first-child) { width: 100%; max-width: none; padding: 0; }
.sauna-offer-content { background: var(--sauna-red); }
.sauna-offer-intro { padding: 64px 24px 78px; margin-inline: auto; max-width: 830px; }
.sauna-offer-intro h2 { font-size: clamp(30px,4vw,44px); text-transform: none; }
.sauna-offer-intro h3 { font-size: clamp(26px,3.5vw,36px); }
.sauna-offer-intro figure { margin: 26px 0 54px; }
.sauna-offer-intro img { width: 100%; max-height: 460px; object-fit: cover; }
.sauna-prices-body { min-height: 300px; padding: 30px max(24px,calc((100vw - 930px)/2)) 90px; }
.entry-content > *:first-child { margin-top: 0; }
.entry-content > *:last-child { margin-bottom: 0; }
.entry-content h2 { margin-top: 1.1em; font-size: clamp(28px,4vw,44px); }
.entry-content h3 { font-size: clamp(23px,3vw,34px); }
.entry-content ul, .entry-content ol { padding-left: 1.4em; }
/* Blocks must be sized against their actual containing block, not 100vw:
   100vw includes the browser's vertical scrollbar on Windows and can cause
   a horizontal scrollbar when the block is centered with 50vw offsets. */
.entry-content .alignwide {
  width: min(100%, var(--sauna-container));
  max-width: 100%;
  margin-inline: auto;
  transform: none;
}
.entry-content .alignfull {
  width: 100%;
  max-width: 100%;
  margin-inline: 0;
  transform: none;
}
/* The Cennik template starts with a narrow text container in legacy styles.
   Make that canvas full-width, then constrain ordinary Gutenberg blocks,
   allowing alignfull banners and photos to remain genuinely edge-to-edge. */
.sauna-main--prices .sauna-default-content {
  width: 100%;
  max-width: 100%;
  margin-inline: 0;
}
.sauna-main--prices .sauna-default-content > :not(.alignfull) {
  max-width: min(calc(100% - 48px), 930px);
  margin-inline: auto;
}
.sauna-main--prices .sauna-default-content > .alignfull,
.sauna-main--offer .sauna-offer-content > .alignfull {
  width: 100%;
  max-width: 100%;
  margin-inline: 0;
}

/* Backward compatibility for blocks in the existing Oferta page from v1.0.1. */
.sauna-offer-content > .sauna-container { max-width: none; width: 100%; }
.sauna-offer-content .sauna-offer-grid { max-width: 780px; margin: 0 auto; padding: 62px 24px; }
.sauna-offer-content .sauna-offer-grid img { width: 100%; max-height: 440px; object-fit: cover; }
.sauna-offer-content .sauna-section-banner { min-height: 340px; padding: 60px 24px; display: flex; justify-content: center; align-items: center; text-align: center; position: relative; overflow: hidden; background: var(--sauna-red); }
.sauna-offer-content .sauna-section-banner > * { position: relative; z-index: 1; }
.sauna-offer-content .sauna-section-banner h2 { font: 600 clamp(36px,6vw,68px)/1.12 var(--sauna-title); text-transform: uppercase; margin: 0; }
.sauna-offer-content .sauna-offer-section-copy { max-width: 780px; margin: 0 auto; padding: 55px 24px; }
.sauna-offer-content .sauna-offer-section-copy img { width: 100%; max-height: 450px; object-fit: cover; }
.sauna-shop-content { max-width: 1050px; padding-top: 62px; padding-bottom: 100px; }
.sauna-posts { display: grid; grid-template-columns: repeat(2,minmax(0,1fr)); gap: 24px; }
.sauna-post-card { padding: 24px; border: 1px solid rgba(244,234,217,.3); border-radius: 16px; }
.sauna-post-card h2 { font-size: 27px; }
.sauna-pagination { padding-top: 35px; }
.site-footer { background: var(--sauna-purple-deep); color: var(--sauna-cream); padding: 62px 0 22px; }
.footer-grid { display: grid; grid-template-columns: repeat(3,minmax(0,1fr)); gap: 40px; }
.footer-area h2 { font-size: 21px; text-transform: uppercase; }
.footer-area ul { padding: 0; margin: 0; list-style: none; }
.footer-area li { margin: 0 0 9px; }
.footer-area a { color: var(--sauna-cream); }
.footer-bottom { margin-top: 36px; padding-top: 20px; border-top: 1px solid rgba(244,234,217,.22); font-size: 13px; }
.footer-bottom p { margin: 0; }

/* WooCommerce presentation; no checkout or reservation logic modified. */
.woocommerce ul.products{display:grid;grid-template-columns:repeat(var(--sauna-shop-default-columns,3),minmax(0,1fr));gap:28px;margin:0}.woocommerce ul.products::before,.woocommerce ul.products::after{display:none}.woocommerce ul.products li.product,.woocommerce-page ul.products li.product{margin:0!important;float:none!important;width:auto!important;clear:none!important;background:rgba(255,255,255,.06);padding:16px 16px 20px;border-radius:15px}.woocommerce ul.products li.product .woocommerce-loop-product__title{font-family:var(--sauna-title);font-size:20px;text-transform:uppercase;color:var(--sauna-cream)}.woocommerce ul.products li.product .price{color:var(--sauna-cream);font-size:18px}.woocommerce ul.products li.product img{border-radius:10px;width:100%;height:auto;aspect-ratio:1/1;object-fit:contain}.woocommerce .star-rating{color:#ffdc93}.woocommerce span.onsale{background:var(--sauna-red);color:white;min-width:3.3em}.woocommerce div.product p.price,.woocommerce div.product span.price{color:var(--sauna-cream)}.woocommerce div.product .product_title{font-family:var(--sauna-title);text-transform:uppercase;font-size:clamp(28px,4vw,50px)}.woocommerce div.product .woocommerce-tabs ul.tabs li a{color:var(--sauna-purple)}.woocommerce div.product .woocommerce-tabs .panel{padding:18px 0}.woocommerce table.shop_table{background:rgba(255,255,255,.09);border:1px solid rgba(244,234,217,.38);border-radius:12px;border-collapse:separate}.woocommerce table.shop_table th,.woocommerce table.shop_table td{border-color:rgba(244,234,217,.24)}.woocommerce a.remove{color:var(--sauna-cream)!important}.woocommerce a.remove:hover{background:var(--sauna-red)}.woocommerce form .form-row input.input-text,.woocommerce form .form-row textarea,.woocommerce .quantity .qty,.woocommerce select,.woocommerce .select2-container .select2-selection--single,.woocommerce-page input:not([type=checkbox]):not([type=radio]),.woocommerce-page textarea{padding:11px 13px;max-width:100%;background:#fff;color:#342036;border:1px solid #bca5bc;border-radius:7px}.woocommerce .quantity .qty{width:85px}.woocommerce form.checkout_coupon,.woocommerce form.login,.woocommerce form.register,.woocommerce .cart-collaterals .cart_totals,.woocommerce .woocommerce-checkout #payment{background:rgba(255,255,255,.09);color:var(--sauna-cream);border-radius:12px;padding:20px}.woocommerce .woocommerce-checkout #payment div.payment_box{background:var(--sauna-cream);color:var(--sauna-purple)}.woocommerce .woocommerce-checkout #payment div.payment_box::before{border-bottom-color:var(--sauna-cream)}.woocommerce-message,.woocommerce-info,.woocommerce-error{border-top-color:var(--sauna-blue);color:#38243c;background:var(--sauna-cream)}.woocommerce-message::before,.woocommerce-info::before{color:var(--sauna-purple)}.woocommerce .price,.wc-block-components-product-price{color:var(--sauna-cream)}.wc-block-cart,.wc-block-checkout{color:var(--sauna-cream)}.wc-block-components-main,.wc-block-components-sidebar{color:var(--sauna-cream)}.wc-block-components-totals-wrapper,.wc-block-components-order-summary{border-color:rgba(244,234,217,.25)!important}.wc-block-components-text-input input,.wc-block-components-combobox input{color:#33223a!important}.wc-block-components-checkout-step__heading,.wc-block-components-title{color:inherit}.wc-block-components-panel__button{color:inherit}.wc-block-components-sidebar-layout{gap:20px}.woocommerce nav.woocommerce-pagination ul{border:0}.woocommerce nav.woocommerce-pagination ul li{border:0;margin:4px}.woocommerce nav.woocommerce-pagination ul li a,.woocommerce nav.woocommerce-pagination ul li span{padding:12px;background:var(--sauna-cream);color:var(--sauna-purple);border-radius:7px}.woocommerce nav.woocommerce-pagination ul li span.current{background:var(--sauna-blue);color:var(--sauna-purple)}

/* Force square PRODUCT LISTING thumbnails for both classic templates and Woo
   Product Collection / legacy grid blocks. Product gallery and checkout images
   are intentionally excluded. A 1:1 uploaded source displays without cropping.
   Existing 4:3 thumbnails already cropped on disk require regeneration. */
.sauna-main--shop :is(
  .woocommerce ul.products li.product img,
  .woocommerce-page ul.products li.product img,
  .wc-block-grid__product-image img,
  .wc-block-components-product-image img,
  .wp-block-woocommerce-product-image img,
  .wc-block-product-template .wp-block-post-featured-image img
),
.sauna-main--transaction :is(
  .wc-block-grid__product-image img,
  .wc-block-product-template .wp-block-woocommerce-product-image img
) {
  display: block;
  width: 100%;
  height: auto;
  max-width: 100%;
  aspect-ratio: 1 / 1 !important;
  object-fit: contain !important;
}
/* Woo Product Collection may set its image aspect-ratio on the container. */
.sauna-main--shop :is(
  .wp-block-woocommerce-product-image,
  .wc-block-components-product-image,
  .wc-block-grid__product-image
) {
  aspect-ratio: 1 / 1 !important;
}

@media (max-width: 1000px) {
  .sauna-highlights { gap: 16px; }
  .footer-grid { gap: 24px; }
  .woocommerce ul.products { grid-template-columns: repeat(2, minmax(0,1fr)); }
}
@media (max-width: 781px) {
  body { font-size: 16px; }
  .site-header { position: relative; }
  .header-inner { min-height: 62px; }
  .site-header .sauna-container { width: calc(100% - 32px); }
  .header-brand { flex-basis: 155px; width: 155px; }
  .site-header .header-brand .brand-link img, .site-header .header-brand .custom-logo-link img, .woocommerce-page .site-header .header-brand img { width: 155px !important; max-width: 155px !important; }
  .nav-toggle { display: flex; flex: 0 0 44px; }
  .site-nav { display: none; position: absolute; top: 100%; left: 0; right: 0; padding: 12px 20px 22px; background: var(--sauna-purple); border-top: 1px solid rgba(255,255,255,.2); box-shadow: 0 14px 22px rgba(0,0,0,.25); }
  .site-nav.is-open { display: block; }
  .site-nav .menu { align-items: stretch; gap: 0; flex-direction: column; }
  .site-nav a { padding: 12px; font-size: 15px; }
  .site-nav .sub-menu { padding: 0 0 0 18px; margin: 0; list-style: none; }
  .sauna-container { width: min(calc(100% - 32px),var(--sauna-container)); }
  .sauna-home-hero { padding: 90px 18px 55px; }
  .sauna-home-hero h1 { font-size: clamp(42px,9vw,67px); margin-bottom: 70px; }
  .sauna-home-hero > p { font-size: 16px; }
  .sauna-page-banner { min-height: 320px; padding: 64px 20px; }
  .sauna-main--prices .sauna-page-banner, .sauna-main--shop .sauna-page-banner { min-height: clamp(640px, 100svh, 1050px); }
  .sauna-rayed::before,   .sauna-page-banner h1 { font-size: clamp(40px,10vw,68px); }
  .sauna-page-banner--section { min-height: 260px; }
  .sauna-page-banner--section h2 { font-size: clamp(35px,6vw,56px); }
  .sauna-home-intro { padding: 54px 20px; }
  .sauna-home-intro > p { font-size: 16px; margin-bottom: 35px; }
  .sauna-highlights { max-width: 390px; grid-template-columns: 1fr; margin-bottom: 36px!important; }
  .sauna-highlight { min-height: 145px; padding: 24px; }
  .sauna-highlight h2 { margin-bottom: 10px; }
  .sauna-photo-band { height: 330px; }
  .sauna-photo-band--second { height: 400px; }
  .sauna-default-content { width: calc(100% - 32px); padding: 36px 0 65px; }
  .sauna-offer-intro { padding: 40px 20px 60px; }
  .sauna-shop-content { padding-top: 38px; padding-bottom: 80px; }
  .sauna-posts { grid-template-columns: 1fr; }
  .footer-grid { grid-template-columns: 1fr; }
  .site-footer { padding-top: 44px; }
}
@media (max-width: 530px) {
  .sauna-home-hero h1 { font-size: 41px; }
  .sauna-photo-band img { object-position: 58% center; }
  .sauna-photo-band--second img { object-position: 45% center; }
  .wp-block-button__link, .sauna-button { font-size: 13px; min-height: 48px; padding: 12px 23px; }
  .woocommerce ul.products { grid-template-columns: 1fr; gap: 18px; }
  .woocommerce ul.products li.product, .woocommerce-page ul.products li.product { width: auto!important; }
  .woocommerce div.product div.images, .woocommerce div.product div.summary { width: 100%; float: none; }
}
@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  *, *::before, *::after { transition-duration: .01ms!important; animation-duration: .01ms!important; }
}


/* ========== 1.1.4: one consistent shell across the site ========== */
/* WooCommerce adds body classes and block styles which can otherwise change
   the alignment, font, list bullets or image dimensions of the site menu. */
body .site-header {
  position: relative;
  z-index: 1000;
  background: var(--sauna-purple);
  color: var(--sauna-cream);
  width: 100%;
  margin: 0;
  padding: 0;
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.5);
}
body .site-header .header-inner {
  min-height: var(--sauna-header-height);
  display: flex;
  flex-wrap: nowrap;
  align-items: center;
  justify-content: space-between;
  gap: 24px;
}
body .site-header .header-brand {
  flex: 0 0 168px;
  width: 168px;
  min-width: 168px;
  margin: 0;
}
body .site-header .brand-link {
  display: inline-flex;
  align-items: center;
  line-height: 0;
}
body .site-header .site-brand-image,
body.woocommerce-page .site-header .site-brand-image {
  display: block;
  flex: none;
  width: 168px !important;
  max-width: 168px !important;
  height: auto !important;
  max-height: 40px !important;
  object-fit: contain;
  box-shadow: none;
  margin: 0;
}
body .site-header .site-nav,
body .site-header .site-nav ul,
body .site-header .site-nav li,
body .site-header .site-nav a {
  box-sizing: border-box;
}
body .site-header .site-nav { flex: 0 1 auto; min-width: 0; margin: 0; }
body .site-header .site-nav > ul,
body .site-header .site-nav > div > ul {
  display: flex;
  align-items: center;
  gap: clamp(14px, 2.6vw, 38px);
  list-style: none;
  margin: 0;
  padding: 0;
}
body .site-header .site-nav li { list-style: none; margin: 0; padding: 0; }
body .site-header .site-nav > ul > li > a,
body .site-header .site-nav > div > ul > li > a {
  font-family: var(--sauna-title);
  font-weight: 600;
  font-size: 14px;
  line-height: 1.3;
  text-transform: uppercase;
  color: var(--sauna-cream);
  display: block;
  background: transparent;
  padding: 12px 0;
  border: none;
  text-decoration: none;
  white-space: nowrap;
}
body .site-header .site-nav a:hover,
body .site-header .site-nav .current-menu-item > a { color: var(--sauna-cream); text-decoration: underline; text-underline-offset: 6px; }
@media (min-width: 782px) {
  body .site-header { position: sticky; top: 0; }
  body.admin-bar .site-header { top: 32px; }
  body .site-header .site-nav .sub-menu {
    display: none;
    position: absolute;
    top: 100%;
    left: 0;
    background: var(--sauna-purple);
    padding: 10px 20px;
    flex-direction: column;
    align-items: stretch;
    box-shadow: 0 12px 26px rgba(0,0,0,.2);
  }
  body .site-header .site-nav li:hover > .sub-menu,
  body .site-header .site-nav li:focus-within > .sub-menu { display: flex; }
}

/* ========== WooCommerce Cart / Checkout: presentation only ========== */
/* Overrides the 930px ordinary text-column and tall page hero only on the
   registered Cart and Checkout pages. Checkout / receipt endpoints keep the
   same template. Blocks or shortcodes themselves are untouched. */
.sauna-main--transaction {
  background: var(--sauna-purple);
  min-height: max(60vh, 600px);
  padding: 0 0 clamp(52px, 7vw, 110px);
}
.sauna-transaction-heading {
  padding: clamp(48px, 7vw, 100px) 0 clamp(28px, 4vw, 46px);
  text-align: center;
}
.sauna-transaction-heading h1 {
  color: var(--sauna-cream);
  font: 600 clamp(38px, 6vw, 76px)/1.1 var(--sauna-title);
  text-transform: uppercase;
  margin: 0;
}
.sauna-transaction-content {
  width: min(calc(100% - 48px), 1200px);
  max-width: none;
  margin: 0 auto;
  padding: clamp(24px, 4vw, 54px);
  border-radius: 18px;
  background: var(--sauna-cream);
  color: var(--sauna-purple);
  min-width: 0;
  overflow-wrap: break-word;
}
.sauna-transaction-content > * { max-width: 100%; }
.sauna-transaction-content .wp-block-woocommerce-cart,
.sauna-transaction-content .wp-block-woocommerce-checkout,
.sauna-transaction-content .wc-block-cart,
.sauna-transaction-content .wc-block-checkout,
.sauna-transaction-content .woocommerce {
  color: var(--sauna-purple);
  max-width: 100%;
}
.sauna-transaction-content .wc-block-components-sidebar-layout {
  display: flex;
  flex-wrap: nowrap;
  align-items: flex-start;
  gap: clamp(18px, 3.5vw, 42px);
  margin: 0;
}
.sauna-transaction-content .wc-block-components-main {
  flex: 1 1 60%;
  min-width: 0;
  max-width: none;
  padding: 0;
  color: var(--sauna-purple);
}
.sauna-transaction-content .wc-block-components-sidebar {
  flex: 1 1 35%;
  min-width: 270px;
  width: auto;
  max-width: none;
  padding: 0;
  color: var(--sauna-purple);
}
.sauna-transaction-content .wc-block-components-totals-wrapper,
.sauna-transaction-content .wc-block-components-order-summary,
.sauna-transaction-content .wc-block-components-checkout-step,
.sauna-transaction-content .wc-block-components-panel {
  border-color: rgba(98, 64, 102, .20) !important;
}
.sauna-transaction-content .wc-block-components-product-price,
.sauna-transaction-content .woocommerce .price,
.sauna-transaction-content .wc-block-cart-item__prices,
.sauna-transaction-content .wc-block-cart-items__header,
.sauna-transaction-content .wc-block-components-title,
.sauna-transaction-content .wc-block-components-checkout-step__heading,
.sauna-transaction-content .wc-block-components-totals-item__value,
.sauna-transaction-content .wc-block-components-totals-item__label,
.sauna-transaction-content .wc-block-components-order-summary-item__total-price,
.sauna-transaction-content .wc-block-components-order-summary-item__individual-prices {
  color: var(--sauna-purple);
}
.sauna-transaction-content .wc-block-components-button:not(.is-link),
.sauna-transaction-content .woocommerce a.button,
.sauna-transaction-content .woocommerce button.button,
.sauna-transaction-content .woocommerce input.button {
  border-radius: 30px;
  min-height: 48px;
  padding: 12px 22px;
  background-color: var(--sauna-purple);
  color: var(--sauna-cream);
  box-shadow: none;
}
.sauna-transaction-content .wc-block-components-button:not(.is-link):hover,
.sauna-transaction-content .woocommerce a.button:hover,
.sauna-transaction-content .woocommerce button.button:hover { color: var(--sauna-cream); background-color: var(--sauna-purple-deep); }
.sauna-transaction-content .wc-block-components-text-input input,
.sauna-transaction-content .wc-block-components-combobox input,
.sauna-transaction-content .woocommerce input.input-text,
.sauna-transaction-content .woocommerce select,
.sauna-transaction-content .woocommerce textarea,
.sauna-transaction-content input[type='text'],
.sauna-transaction-content input[type='email'],
.sauna-transaction-content input[type='tel'] {
  min-width: 0;
  max-width: 100%;
  color: #33223a;
  background: #fff;
  border-radius: 7px;
}
.sauna-transaction-content .wc-block-cart-items {
  width: 100%;
  table-layout: auto;
}
.sauna-transaction-content .wc-block-cart-items img,
.sauna-transaction-content .woocommerce-cart-form img {
  max-width: 92px;
  height: auto;
  object-fit: cover;
  border-radius: 8px;
}
/* Classic shortcode Cart: native WooCommerce table, with no horizontal overflow. */
.sauna-transaction-content .woocommerce-cart-form { min-width: 0; overflow-x: auto; }
.sauna-transaction-content .woocommerce table.shop_table {
  width: 100%;
  border: 1px solid rgba(98,64,102,.22);
  background: #fff;
  color: var(--sauna-purple);
}
.sauna-transaction-content .woocommerce table.shop_table th,
.sauna-transaction-content .woocommerce table.shop_table td { border-color: rgba(98,64,102,.15); }
.sauna-transaction-content .woocommerce .cart-collaterals .cart_totals,
.sauna-transaction-content .woocommerce .woocommerce-checkout #payment,
.sauna-transaction-content .woocommerce form.checkout_coupon,
.sauna-transaction-content .woocommerce form.login {
  background: #fff;
  color: var(--sauna-purple);
  border: 1px solid rgba(98,64,102,.15);
  border-radius: 14px;
}
.sauna-transaction-content .woocommerce-message,
.sauna-transaction-content .woocommerce-info,
.sauna-transaction-content .woocommerce-error { background: #fff; color: var(--sauna-purple); }
.sauna-transaction-content .woocommerce .checkout .col2-set,
.sauna-transaction-content .woocommerce .checkout #order_review,
.sauna-transaction-content .woocommerce .cart-collaterals .cart_totals { max-width: 100%; }
.sauna-transaction-content .woocommerce a.remove { color: var(--sauna-purple)!important; }
.sauna-transaction-content .woocommerce a.remove:hover { color: #fff!important; }
.sauna-transaction-content :is(a, button, input, select, textarea):focus-visible { outline: 3px solid var(--sauna-blue); outline-offset: 2px; }

/* ========== Single global footer, including WooCommerce ========== */
body .sauna-global-footer {
  background: var(--sauna-purple-deep);
  color: var(--sauna-cream);
  padding: 46px 0 22px;
  margin: 0;
  width: 100%;
  clear: both;
}
body .sauna-global-footer .footer-grid:empty { display: none; }
body .sauna-global-footer .footer-grid { gap: clamp(20px, 3vw, 44px); }
body .sauna-global-footer .footer-bottom { margin-top: 18px; }
body .sauna-global-footer .footer-grid + .footer-bottom { margin-top: 40px; }
body .sauna-global-footer a { color: var(--sauna-cream); }

@media (max-width: 1020px) {
  .sauna-transaction-content .wc-block-components-sidebar-layout { flex-direction: column; }
  .sauna-transaction-content .wc-block-components-main,
  .sauna-transaction-content .wc-block-components-sidebar { flex: auto; min-width: 0; width: 100%; }
}
@media (max-width: 781px) {
  body .site-header { position: relative; top: auto; }
  body .site-header .header-inner { min-height: 62px; }
  body .site-header .header-brand { flex-basis: 155px; width: 155px; min-width: 155px; }
  body .site-header .site-brand-image,
  body.woocommerce-page .site-header .site-brand-image { width: 155px !important; max-width: 155px !important; }
  body .site-header .site-nav { display: none; position: absolute; top: 100%; left: 0; right: 0; padding: 12px 20px 22px; }
  body .site-header .site-nav.is-open { display: block; }
  body .site-header .site-nav > ul,
  body .site-header .site-nav > div > ul { flex-direction: column; align-items: stretch; gap: 0; }
  body .site-header .site-nav > ul > li > a,
  body .site-header .site-nav > div > ul > li > a { padding: 12px; font-size: 15px; }
  body .sauna-global-footer .footer-grid { grid-template-columns: 1fr; }
  .sauna-transaction-heading { padding: 42px 0 22px; }
  .sauna-transaction-content { width: calc(100% - 32px); padding: 20px; border-radius: 12px; }
  .sauna-transaction-content .wc-block-components-sidebar-layout { display: block; }
  .sauna-transaction-content .wc-block-components-main,
  .sauna-transaction-content .wc-block-components-sidebar { width: 100%; margin: 0; padding: 0; }
  .sauna-transaction-content .wc-block-components-sidebar { margin-top: 26px; }
  .sauna-transaction-content .woocommerce table.shop_table_responsive tr td { text-align: right; }
}
@media (max-width: 500px) {
  .sauna-transaction-content { padding: 16px; }
  .sauna-transaction-content .wc-block-cart-items img { max-width: 68px; }
  .sauna-transaction-content .wc-block-cart-item__wrap,
  .sauna-transaction-content .wc-block-cart-items__row { min-width: 0; }
  .sauna-transaction-heading h1 { font-size: clamp(34px, 9vw, 54px); }
}

/* The commerce title band uses the same supplied purple rays as the other
   purple pages. Keep it compact so the actual cart and checkout stay usable. */
.sauna-transaction-heading {
  width: 100%;
  max-width: none;
  margin: 0;
  background-color: var(--sauna-purple);
  background-image: url('assets/images/sauna-rays-purple-112.png');
  background-repeat: no-repeat;
  background-size: 115% auto;
  background-position: center -55vw;
}
/* Single clean footer on both WooCommerce and ordinary pages. */
body .sauna-global-footer { padding: 26px 0; }
body .sauna-global-footer .footer-bottom { margin: 0; padding: 0; border: 0; }
body .sauna-global-footer .footer-bottom p { margin: 0; }

/* ========== 1.1.5: WooCommerce single-product layout ========== */
/* Only on the single-product view. Do not reflow the cart, checkout, or shop grid. */
body.single-product .sauna-main--shop .sauna-shop-content {
  width: min(calc(100% - 48px), 1200px);
  max-width: 1200px;
  min-width: 0;
}
body.single-product .sauna-main--shop .sauna-shop-content div.product {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
  grid-template-areas: 'gallery details';
  column-gap: clamp(24px, 4vw, 58px);
  row-gap: clamp(20px, 3vw, 40px);
  align-items: start;
  min-width: 0;
}
/* WooCommerce normally floats its two columns. Floats can also cause narrow,
   vertical text when a reservation form or an extra section is present. */
body.single-product .sauna-main--shop div.product > :is(.woocommerce-product-gallery, .images) {
  grid-area: gallery;
  float: none !important;
  clear: none !important;
  position: relative;
  width: 100% !important;
  max-width: 100% !important;
  min-width: 0 !important;
  margin: 0 !important;
  align-self: start;
}
body.single-product .sauna-main--shop div.product > :is(.summary, .entry-summary) {
  grid-area: details;
  float: none !important;
  clear: none !important;
  width: 100% !important;
  max-width: 100% !important;
  min-width: 0 !important;
  margin: 0 !important;
  overflow-wrap: anywhere;
}
body.single-product .sauna-main--shop div.product > :not(.woocommerce-product-gallery):not(.images):not(.summary):not(.entry-summary) {
  grid-column: 1 / -1;
  min-width: 0;
}
body.single-product .sauna-main--shop div.product .summary > :is(
  .product_title,
  .price,
  .woocommerce-product-details__short-description,
  .cart,
  .product_meta,
  .woocommerce-tabs
) {
  float: none !important;
  clear: both;
  display: block;
  width: 100%;
  max-width: 100%;
  min-width: 0;
  margin-left: 0;
  margin-right: 0;
}
body.single-product .sauna-main--shop div.product .summary .product_title {
  font-size: clamp(36px, 4vw, 60px);
  line-height: 1.14;
  overflow-wrap: break-word;
  margin: 0 0 20px;
}
body.single-product .sauna-main--shop div.product .summary .price { margin-bottom: 22px; }
body.single-product .sauna-main--shop div.product .summary :is(form.cart, .wc-bookings-booking-form, .wc-bookings-booking-cost) {
  max-width: 100%;
  min-width: 0;
}
body.single-product .sauna-main--shop div.product .summary form.cart {
  display: block;
  float: none;
  width: 100%;
}
body.single-product .sauna-main--shop div.product .summary :is(input, select, textarea) {
  max-width: 100%;
}
body.single-product .sauna-main--shop div.product .woocommerce-product-gallery img,
body.single-product .sauna-main--shop div.product div.images img {
  display: block;
  width: 100%;
  height: auto;
  object-fit: contain;
  border-radius: 10px;
}
/* Hide related products as a defensive fallback if a plugin renders them
   outside the default WooCommerce hook. No reservation/calendar is hidden. */
body.single-product .sauna-main--shop div.product > .related.products,
body.single-product .sauna-main--shop div.product > section.related,
body.single-product .sauna-main--shop .related.products,
body.single-product .sauna-main--shop .wp-block-woocommerce-related-products {
  display: none !important;
}
@media (max-width: 800px) {
  body.single-product .sauna-main--shop .sauna-shop-content {
    width: calc(100% - 32px);
    padding-top: 35px;
  }
  body.single-product .sauna-main--shop .sauna-shop-content div.product {
    grid-template-columns: minmax(0, 1fr);
    grid-template-areas: 'gallery' 'details';
    gap: 28px;
  }
  body.single-product .sauna-main--shop div.product > :not(.woocommerce-product-gallery):not(.images):not(.summary):not(.entry-summary) {
    grid-column: 1;
  }
}

/* ========================================================================
   1.1.6 - Cart, empty cart and Checkout share the PURPLE visual treatment
   of the existing "Order received" screen. This changes presentation only;
   WooCommerce Blocks and classic shortcodes continue to own all content,
   controls, prices, checkout validation and payment integrations.
   ======================================================================== */
body .sauna-main--transaction {
  background-color: var(--sauna-purple);
  /* Purple rays at the top, fading into the calm receipt-style backdrop. */
  background-image:
    linear-gradient(to bottom, rgba(98,64,102,0) 0, var(--sauna-purple) 240px, var(--sauna-purple) 100%),
    url('assets/images/sauna-rays-purple-112.png');
  background-repeat: no-repeat;
  background-size: 100% 100%, 115% auto;
  background-position: center top, center -55vw;
  color: var(--sauna-cream);
  min-height: max(60vh, 540px);
  padding-bottom: clamp(60px, 8vw, 110px);
}
/* Match the normal receipt's restrained, 930px-wide text column, without
   introducing a separate cream-colored surface. */
body .sauna-main--transaction .sauna-transaction-heading {
  width: min(calc(100% - 48px), 930px);
  max-width: 930px;
  text-align: left;
  padding: clamp(52px, 7vw, 90px) 0 26px;
  min-height: 0;
  margin-inline: auto;
  background: transparent;
}
body .sauna-main--transaction .sauna-transaction-heading h1 {
  font-size: clamp(32px, 4.2vw, 50px);
  color: var(--sauna-cream);
}
body .sauna-main--transaction .sauna-transaction-content {
  width: min(calc(100% - 48px), 930px);
  max-width: 930px;
  padding: 0;
  margin-inline: auto;
  min-height: 0;
  background: transparent;
  border: 0;
  box-shadow: none;
  border-radius: 0;
  color: var(--sauna-cream);
  overflow-wrap: break-word;
}
/* WooCommerce blocks set their own foregrounds; unify them with the receipt. */
body .sauna-main--transaction .sauna-transaction-content :is(
  .wp-block-woocommerce-cart,
  .wp-block-woocommerce-checkout,
  .wc-block-cart,
  .wc-block-checkout,
  .wc-block-components-sidebar-layout,
  .wc-block-components-main,
  .wc-block-components-sidebar,
  .wc-block-components-totals-item,
  .wc-block-components-totals-item__label,
  .wc-block-components-totals-item__value,
  .wc-block-components-title,
  .wc-block-components-checkout-step__heading,
  .wc-block-components-product-name,
  .wc-block-components-product-price,
  .wc-block-cart-item__prices,
  .wc-block-cart-items__header,
  .wc-block-components-order-summary-item__total-price,
  .wc-block-components-order-summary-item__individual-prices,
  .wc-block-components-panel__button,
  .wc-block-cart__empty-cart__title,
  .wc-block-components-shipping-rates-control__package,
  .woocommerce
) {
  color: var(--sauna-cream);
}
/* WooCommerce headings should follow the receipt's content hierarchy:
   the page title is large, headings inside forms/sidebar are smaller. */
body .sauna-main--transaction .sauna-transaction-content :is(
  .wc-block-components-title,
  .wc-block-components-checkout-step__heading,
  .wc-block-components-order-summary__title,
  .wc-block-cart__empty-cart__title
) {
  font-family: var(--sauna-serif);
  font-size: clamp(20px, 2vw, 25px);
  line-height: 1.25;
  font-weight: 700;
  color: var(--sauna-cream);
  text-transform: none;
  overflow-wrap: anywhere;
  margin: 0 0 18px;
}
body .sauna-main--transaction .sauna-transaction-content .wc-block-components-sidebar :is(h2,h3) {
  font-size: clamp(20px, 2vw, 25px);
  line-height: 1.25;
  color: var(--sauna-cream);
  margin: 0 0 18px;
}
body .sauna-main--transaction .sauna-transaction-content :is(input[type='radio'],input[type='checkbox']) {
  accent-color: var(--sauna-cream);
}
body .sauna-main--transaction .sauna-transaction-content :is(
  .wc-block-components-totals-wrapper,
  .wc-block-components-order-summary,
  .wc-block-components-checkout-step,
  .wc-block-components-panel,
  .wc-block-cart-items,
  .wc-block-components-order-summary-item,
  .wc-block-components-totals-coupon
) {
  border-color: rgba(244, 234, 217, .28) !important;
}
/* Same transparent, softly delineated panels as the receipt's summary table. */
body .sauna-main--transaction .sauna-transaction-content :is(
  .wc-block-components-order-summary,
  .wc-block-components-address-card,
  .wc-block-components-notice-banner,
  .wc-block-components-radio-control-accordion-content,
  .wc-block-components-payment-methods__payment-method-content,
  .wc-block-components-totals-coupon__content
) {
  background: rgba(244, 234, 217, .06);
  color: var(--sauna-cream);
  border-color: rgba(244, 234, 217, .23);
}
body .sauna-main--transaction .sauna-transaction-content .wc-block-components-sidebar-layout {
  gap: clamp(20px, 3.2vw, 38px);
}
body .sauna-main--transaction .sauna-transaction-content .wc-block-components-sidebar {
  min-width: 0;
}
body .sauna-main--transaction .sauna-transaction-content :is(
  .wc-block-components-text-input input,
  .wc-block-components-combobox input,
  .wc-block-components-textarea,
  input[type='text'], input[type='email'], input[type='tel'], select, textarea
) {
  background-color: #fff;
  color: #38243c;
  border: 1px solid rgba(98, 64, 102, .4);
  max-width: 100%;
}
body .sauna-main--transaction .sauna-transaction-content :is(
  .wc-block-components-button:not(.is-link),
  .wp-block-button__link,
  .woocommerce a.button,
  .woocommerce button.button,
  .woocommerce input.button,
  .woocommerce a.button.alt,
  .woocommerce button.button.alt,
  .woocommerce input.button.alt
) {
  background: var(--sauna-cream);
  color: var(--sauna-purple);
  border: 1px solid var(--sauna-cream);
  box-shadow: none;
  border-radius: 99px;
  min-height: 48px;
}
body .sauna-main--transaction .sauna-transaction-content :is(
  .wc-block-components-button:not(.is-link),
  .wp-block-button__link,
  .woocommerce a.button,
  .woocommerce button.button,
  .woocommerce input.button
):hover {
  background: #fff;
  color: var(--sauna-purple-deep);
  filter: none;
}
/* Quantity steppers, remove links and coupon toggles remain visible. */
body .sauna-main--transaction .sauna-transaction-content :is(
  .wc-block-components-quantity-selector,
  .wc-block-components-quantity-selector__button,
  .wc-block-cart-item__remove-link,
  .wc-block-components-totals-coupon-link,
  .wc-block-components-panel__button,
  .wc-block-components-radio-control__label
) { color: var(--sauna-cream); border-color: rgba(244,234,217,.4); }
body .sauna-main--transaction .sauna-transaction-content :is(
  .wc-block-components-quantity-selector__input,
  .wc-block-components-checkbox__input,
  .wc-block-components-radio-control__input
) { accent-color: var(--sauna-cream); }
/* Empty cart: eliminate the outsized empty shell, leave actual WooCommerce
   messages, links, product recommendations and the loading state intact. */
body .sauna-main--transaction .sauna-transaction-content :is(
  .wp-block-woocommerce-empty-cart-block,
  .wc-block-cart__empty-cart
) {
  min-height: 0;
  background: transparent;
  color: var(--sauna-cream);
  padding: 16px 0 44px;
}
body .sauna-main--transaction .sauna-transaction-content :is(
  .wc-block-cart__empty-cart__title,
  .wp-block-woocommerce-empty-cart-block h2,
  .wp-block-woocommerce-empty-cart-block h3
) { color: var(--sauna-cream); }
body .sauna-main--transaction .sauna-transaction-content .wp-block-woocommerce-empty-cart-block .wc-block-grid__products,
body .sauna-main--transaction .sauna-transaction-content .wp-block-woocommerce-empty-cart-block .wc-block-product-template {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 20px;
  margin: 0;
  padding: 0;
}
body .sauna-main--transaction .sauna-transaction-content .wp-block-woocommerce-empty-cart-block .wc-block-grid__product,
body .sauna-main--transaction .sauna-transaction-content .wp-block-woocommerce-empty-cart-block .wc-block-product {
  max-width: 100%;
  min-width: 0;
  border: 1px solid rgba(244,234,217,.22);
  background: rgba(244,234,217,.06);
  border-radius: 12px;
  padding: 14px;
}
/* Classic WooCommerce Cart / Checkout share the same receipt-style table
   and payment presentation, in case the site changes from Blocks to shortcodes. */
body .sauna-main--transaction .sauna-transaction-content .woocommerce table.shop_table {
  background: rgba(244, 234, 217, .08);
  color: var(--sauna-cream);
  border: 1px solid rgba(244,234,217,.38);
  border-radius: 12px;
}
body .sauna-main--transaction .sauna-transaction-content .woocommerce table.shop_table :is(th,td) {
  color: var(--sauna-cream);
  border-color: rgba(244,234,217,.25);
}
body .sauna-main--transaction .sauna-transaction-content .woocommerce :is(
  .cart-collaterals .cart_totals,
  .woocommerce-checkout #payment,
  form.checkout_coupon,
  form.login,
  form.register
) {
  background: rgba(244,234,217,.07);
  color: var(--sauna-cream);
  border-color: rgba(244,234,217,.25);
}
body .sauna-main--transaction .sauna-transaction-content .woocommerce :is(
  .woocommerce-message,.woocommerce-info,.woocommerce-error
) {
  background: rgba(244,234,217,.12);
  color: var(--sauna-cream);
}
body .sauna-main--transaction .sauna-transaction-content .woocommerce :is(a.remove,.amount,.price) { color: var(--sauna-cream) !important; }
body .sauna-main--transaction .sauna-transaction-content .woocommerce a.remove:hover { color: var(--sauna-purple) !important; background: var(--sauna-cream); }
body .sauna-main--transaction .sauna-transaction-content :is(a,button,input,textarea,select):focus-visible {
  outline: 3px solid var(--sauna-blue);
  outline-offset: 2px;
}
@media (max-width: 1020px) {
  body .sauna-main--transaction .sauna-transaction-content .wc-block-components-sidebar-layout {
    flex-wrap: wrap;
    flex-direction: column;
  }
  body .sauna-main--transaction .sauna-transaction-content .wc-block-components-main,
  body .sauna-main--transaction .sauna-transaction-content .wc-block-components-sidebar {
    width: 100%;
    min-width: 0;
    max-width: none;
    flex: 1 1 auto;
  }
}
@media (max-width: 781px) {
  body .sauna-main--transaction .sauna-transaction-heading,
  body .sauna-main--transaction .sauna-transaction-content {
    width: calc(100% - 32px);
  }
  body .sauna-main--transaction .sauna-transaction-heading { padding-top: 42px; }
  body .sauna-main--transaction .sauna-transaction-content .wp-block-woocommerce-empty-cart-block .wc-block-grid__products,
  body .sauna-main--transaction .sauna-transaction-content .wp-block-woocommerce-empty-cart-block .wc-block-product-template {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}
@media (max-width: 520px) {
  body .sauna-main--transaction .sauna-transaction-content .wp-block-woocommerce-empty-cart-block .wc-block-grid__products,
  body .sauna-main--transaction .sauna-transaction-content .wp-block-woocommerce-empty-cart-block .wc-block-product-template {
    grid-template-columns: minmax(0, 1fr);
  }
}


/* ========================================================================
   1.1.7 - Compact page banners only on narrow/mobile viewports.
   Desktop hero dimensions and the shared navigation header are unchanged.
   The empty vertical space was caused by 100vh/100svh minimum heights used
   on phones, not by the 62px global site-header.
   Applies to PHP banners and editable Gutenberg Group banner blocks alike.
   ======================================================================== */
@media (max-width: 781px) {
  /* Home: keep all Gutenberg text, CTA and intro, but let their actual content
     determine the section height rather than forcing a full screen. */
  body .sauna-main--home .sauna-home-hero,
  body .sauna-home-hero {
    height: auto !important;
    min-height: 0 !important;
    padding: clamp(84px, 11svh, 108px) 18px clamp(50px, 7svh, 68px) !important;
  }
  body .sauna-home-hero h1 {
    font-size: clamp(36px, 10vw, 47px);
    line-height: 1.12;
    margin: 0 0 clamp(36px, 6svh, 54px) !important;
  }
  body .sauna-home-hero > p {
    margin: clamp(24px, 3.5svh, 34px) auto 0 !important;
    max-width: 36rem;
  }

  /* Ordinary page banners, including Oferta, Cennik, Rezerwacja and
     WooCommerce single-product banners, no longer consume the whole screen. */
  body .sauna-page-banner,
  body .sauna-main--prices .sauna-page-banner,
  body .sauna-main--shop .sauna-page-banner,
  body .sauna-main--offer .sauna-page-banner,
  body .sauna-main--standard .sauna-page-banner {
    height: auto !important;
    min-height: clamp(260px, 36svh, 340px) !important;
    padding: 56px 18px !important;
  }
  body .sauna-page-banner h1,
  body .sauna-main--prices .sauna-page-banner h1,
  body .sauna-main--shop .sauna-page-banner h1 {
    font-size: clamp(34px, 8.5vw, 49px);
    line-height: 1.14;
    overflow-wrap: anywhere;
  }
  /* Multiple section headers within Oferta should be shorter than its main
     title banner. This selector also covers older editor-generated variants. */
  body .sauna-page-banner.sauna-page-banner--section,
  body .sauna-main--offer .sauna-page-banner.sauna-page-banner--section,
  body .sauna-main--offer .sauna-section-banner,
  body .sauna-section-banner {
    min-height: 205px !important;
    height: auto !important;
    padding: 46px 18px !important;
  }
  body .sauna-page-banner--section h2,
  body .sauna-section-banner h2 {
    font-size: clamp(30px, 7.6vw, 43px);
    overflow-wrap: anywhere;
  }
  /* Don't force an empty Cennik block to occupy another entire mobile
     viewport. Populated blocks retain their normal editable content. */
  body .sauna-main--prices .sauna-prices-body:empty {
    min-height: 0;
    padding-block: 0;
  }
}

/* Editor-managed global footer (selected in Appearance > Sauna na Wisle). */
.sauna-editor-footer { width: 100%; max-width: 100%; margin: 0; padding: 0; }
.sauna-editor-footer > .alignfull,
.sauna-editor-footer > .wp-block-group.alignfull { max-width: 100%; width: 100%; margin-left: 0; margin-right: 0; }
.sauna-editor-footer :is(img, video, iframe) { max-width: 100%; }

/* ========================================================================
   1.1.11 - WooCommerce catalog columns controlled by the shop setting.

   The old theme hard-coded 3 columns and allowed a maximum of 4 in
   add_theme_support('woocommerce'). WooCommerce itself marks its classic
   product grid `ul.products.columns-N` (including shortcode overrides).
   Respect that marker; the saved Customizer option is only a fallback.
   Product Collection blocks use their own editor-side column setting and are
   deliberately left alone.
   ======================================================================== */
.sauna-main--shop .woocommerce ul.products,
body.woocommerce .sauna-main--shop ul.products,
body.woocommerce-page .sauna-main--shop ul.products {
  --sauna-catalog-columns: var(--sauna-shop-default-columns, 3);
  display: grid;
  grid-template-columns: repeat(var(--sauna-catalog-columns), minmax(0, 1fr));
  gap: clamp(12px, 1.8vw, 28px);
  margin: 0;
  padding: 0;
  list-style: none;
}
.sauna-main--shop ul.products > li.product {
  min-width: 0;
  list-style: none;
}
.sauna-main--shop .woocommerce ul.products.columns-1,
body.woocommerce .sauna-main--shop ul.products.columns-1,
body.woocommerce-page .sauna-main--shop ul.products.columns-1 {
  --sauna-catalog-columns: 1;
}
.sauna-main--shop .woocommerce ul.products.columns-2,
body.woocommerce .sauna-main--shop ul.products.columns-2,
body.woocommerce-page .sauna-main--shop ul.products.columns-2 {
  --sauna-catalog-columns: 2;
}
.sauna-main--shop .woocommerce ul.products.columns-3,
body.woocommerce .sauna-main--shop ul.products.columns-3,
body.woocommerce-page .sauna-main--shop ul.products.columns-3 {
  --sauna-catalog-columns: 3;
}
.sauna-main--shop .woocommerce ul.products.columns-4,
body.woocommerce .sauna-main--shop ul.products.columns-4,
body.woocommerce-page .sauna-main--shop ul.products.columns-4 {
  --sauna-catalog-columns: 4;
}
.sauna-main--shop .woocommerce ul.products.columns-5,
body.woocommerce .sauna-main--shop ul.products.columns-5,
body.woocommerce-page .sauna-main--shop ul.products.columns-5 {
  --sauna-catalog-columns: 5;
}
.sauna-main--shop .woocommerce ul.products.columns-6,
body.woocommerce .sauna-main--shop ul.products.columns-6,
body.woocommerce-page .sauna-main--shop ul.products.columns-6 {
  --sauna-catalog-columns: 6;
}

/* A six-column desktop grid needs slightly denser cards to prevent headings
   and booking buttons from colliding. Product images remain 1:1. */
@media (min-width: 1101px) {
  body.woocommerce .sauna-main--shop:has(ul.products.columns-5) .sauna-shop-content,
  body.woocommerce .sauna-main--shop:has(ul.products.columns-6) .sauna-shop-content,
  body.woocommerce-page .sauna-main--shop:has(ul.products.columns-5) .sauna-shop-content,
  body.woocommerce-page .sauna-main--shop:has(ul.products.columns-6) .sauna-shop-content {
    width: min(calc(100% - 48px), 1340px);
    max-width: 1340px;
  }
  .sauna-main--shop :is(ul.products.columns-5, ul.products.columns-6) li.product {
    padding: 12px 12px 16px;
  }
  .sauna-main--shop :is(ul.products.columns-5, ul.products.columns-6) li.product .woocommerce-loop-product__title {
    font-size: clamp(14px, 1.05vw, 18px);
    overflow-wrap: anywhere;
  }
  .sauna-main--shop :is(ul.products.columns-5, ul.products.columns-6) li.product .price {
    font-size: 15px;
  }
  .sauna-main--shop :is(ul.products.columns-5, ul.products.columns-6) li.product .button {
    font-size: 12px;
    padding: 10px 14px;
    min-height: 40px;
  }
}
/* Tablet: never increase a manually requested 1- or 2-column layout. */
@media (min-width: 781px) and (max-width: 1100px) {
  .sauna-main--shop .woocommerce ul.products,
  body.woocommerce .sauna-main--shop ul.products,
  body.woocommerce-page .sauna-main--shop ul.products {
    grid-template-columns: repeat(min(3, var(--sauna-catalog-columns)), minmax(0, 1fr));
  }
}
@media (min-width: 531px) and (max-width: 780px) {
  .sauna-main--shop .woocommerce ul.products,
  body.woocommerce .sauna-main--shop ul.products,
  body.woocommerce-page .sauna-main--shop ul.products {
    grid-template-columns: repeat(min(2, var(--sauna-catalog-columns)), minmax(0, 1fr));
  }
}
@media (max-width: 530px) {
  .sauna-main--shop .woocommerce ul.products,
  body.woocommerce .sauna-main--shop ul.products,
  body.woocommerce-page .sauna-main--shop ul.products {
    grid-template-columns: minmax(0, 1fr);
  }
}

/* ========================================================================
   1.1.12 - Global glass header over the NEXT section on every template.

   The negative bottom margin deliberately takes the bar out of the space
   preceding main while keeping `position: sticky` available on desktop.
   This is NOT a fixed-position overlay: its sticky behavior and the mobile
   navigation remain compatible with the existing header markup.
   Theme custom CSS (Appearance > Sauna na Wisle) can override the variables.
   ======================================================================== */
:root {
  --sauna-header-overlay: rgba(22, 16, 21, .60);
  --sauna-header-shadow: 0 4px 12px rgba(0, 0, 0, .30);
}
body .site-header {
  position: sticky;
  top: 0;
  margin-bottom: calc(-1 * var(--sauna-header-height));
  background-color: var(--sauna-header-overlay);
  box-shadow: var(--sauna-header-shadow);
  -webkit-backdrop-filter: blur(2px);
  backdrop-filter: blur(2px);
}
/* WooCommerce and WordPress blocks share this header, with no separate copy. */
body.admin-bar .site-header { top: 32px; }
@media (max-width: 781px) {
  body .site-header {
    position: relative;
    top: auto;
    margin-bottom: -62px;
  }
  body.admin-bar .site-header { top: auto; }
  /* Keep mobile dropdown readable over photos, while the closed bar is glass. */
  body .site-header .site-nav.is-open {
    background: rgba(34, 24, 37, .95);
    box-shadow: 0 12px 20px rgba(0, 0, 0, .22);
  }
}
/* Cart/Checkout have no tall hero: allow for an overlaid navigation bar. */
body .sauna-main--transaction .sauna-transaction-heading {
  padding-top: clamp(112px, 10vw, 148px);
}
@media (max-width: 781px) {
  body .sauna-main--transaction .sauna-transaction-heading {
    padding-top: 106px;
  }
}

/* V1.1.16: Unique photographic hero classes. Images already uploaded to WP.
   Specificity and !important intentionally override legacy ray background rules.
   Hero height is exactly 800px on desktop; mobile stays compact. */
.sauna-page-banner:is(.sauna-header--oferta, .sauna-header--cennik, .sauna-header--rezerwacja, .sauna-header--produkt) {
  box-sizing: border-box;
  width: 100%;
  height: 800px;
  min-height: 800px;
  padding: 0 24px;
  display: flex;
  justify-content: center;
  align-items: center;
  background-repeat: no-repeat !important;
  background-size: cover !important;
  background-position: center center !important;
  background-color: #624066;
}
.sauna-page-banner.sauna-header--oferta {
  background-image: url('/wp-content/uploads/2026/10/sauna-oferta-header.webp') !important;
}
.sauna-page-banner.sauna-header--cennik {
  background-image: url('/wp-content/uploads/2026/10/sauna-cennik-header.webp') !important;
}
.sauna-page-banner.sauna-header--rezerwacja,
.sauna-page-banner.sauna-header--produkt {
  background-image: url('/wp-content/uploads/2026/10/sauna-rezerwacja-header.webp') !important;
}
.sauna-page-banner:is(.sauna-header--oferta, .sauna-header--cennik, .sauna-header--rezerwacja, .sauna-header--produkt) > h1 {
  margin: 0;
  text-align: center;
  text-shadow: 0 2px 18px rgba(0,0,0,.4);
}
@media (max-width: 767px) {
  body .sauna-page-banner:is(.sauna-header--oferta, .sauna-header--cennik, .sauna-header--rezerwacja, .sauna-header--produkt) {
    height: 340px !important;
    min-height: 340px !important;
    padding: 20px !important;
    background-position: center center !important;
    background-size: cover !important;
  }
}
