/* =============================================================================
   site.css — o.massage.warsaw (Warszawa, Powiśle). Warstwa marki NA WIERZCHU
   tokens.css + styles.css + signature-moves.css. Paleta „Honey Glow" wyprowadzona
   ze zdjęć wnętrza (images/places/ — łuk podświetlany na złoto, leżanki, len,
   bursztyn) — NIE zmieniać kolorów/fontów tutaj.
   Kolejność linków w <head>: tokens.css → styles.css → signature-moves.css → site.css
   ============================================================================= */

/* --- Marka w headerze ------------------------------------------------------ */
.brand { display: flex; flex-direction: column; gap: 2px; text-decoration: none; }
.brand .brand-name {
  font-family: var(--font-heading); font-size: var(--fs-lg, 20px); font-weight: 700;
  letter-spacing: .01em; color: var(--text-strong); text-transform: none;
}
.brand .brand-tagline { color: var(--text-muted); font-style: italic; }
.nav-cta { margin-inline-start: var(--space-3, 12px); }
nav[aria-label="Główna"] .nav-cta { min-height: 44px; padding: 0 var(--space-5, 24px); }
@media (max-width: 767px) {
  .site-header.nav-collapsed .nav-cta,
  nav[aria-label="Główna"] .nav-cta { width: 100%; margin-inline-start: 0; margin-top: var(--space-3, 12px); }
}

/* --- Rytm sekcji: spacje KRÓTKIE + tła zróżnicowane (korekty dyrektora) ----- */
main > section, main > .section {
  padding-block: clamp(36px, 5.5vw, 64px);
  border-bottom: 1px solid var(--color-border);
}
main > section:last-of-type { border-bottom: 0; }
.sec-head { padding-top: var(--space-2, 8px); margin-bottom: var(--space-5, 24px); max-width: 62ch; }
.sec-head .eyebrow { margin-bottom: var(--space-3, 12px); }
.sec-head h2 { margin-bottom: var(--space-3, 12px); }
.sec-head p { color: var(--text-body); }

.tint-a  { background: var(--color-bg); }
.tint-b  { background: var(--color-surface); }
.tint-c  { background: linear-gradient(180deg, var(--color-surface), var(--color-bg)); }
.tint-d  { background: var(--color-primary); }
.tint-d .sec-head h2, .tint-d .sec-head p, .tint-d h3 { color: var(--text-onPrimary); }
.tint-d .eyebrow { color: var(--color-accent); }
.hairline-top { border-top: 1px solid var(--color-border); }

/* --- Hero: stacked-media (archetyp z seeda) — wyśrodkowany stack + duży media-frame pod spodem */
.hero--stacked { padding-block: clamp(48px, 8vw, 88px) clamp(0px, 0vw, 0px); background: var(--color-bg); border-bottom: 1px solid var(--color-border); }
.hero--stacked .hero__stack { max-width: 780px; margin-inline: auto; text-align: center; display: grid; justify-items: center; gap: var(--space-4, 16px); }
.hero--stacked .hero__eyebrow { color: var(--text-muted); }
.hero--stacked h1 { font-size: clamp(34px, 6.4vw, var(--fs-4xl, 49px)); margin-bottom: 0; max-width: 18ch; }
.hero--stacked .lead { font-size: var(--fs-lg, 20px); color: var(--text-body); max-width: 46ch; }
.hero--stacked .trust { justify-content: center; margin-bottom: var(--space-2, 8px); }
.hero--stacked .hero__cta { justify-content: center; gap: var(--space-3, 12px); margin-bottom: var(--space-6, 32px); }
.hero--stacked .hero__media {
  position: relative; width: 100%; aspect-ratio: 16 / 8; overflow: hidden;
  border-top: 1px solid var(--color-border);
}
.hero--stacked .hero__media img { width: 100%; height: 100%; object-fit: cover; display: block; }
.hero--stacked .hero__media::after {
  content: ""; position: absolute; inset: 0;
  background: linear-gradient(0deg, rgba(20,14,6,.32), transparent 55%);
}
@media (min-width: 700px) { .hero--stacked .hero__media { aspect-ratio: 21 / 9; } }
@media (min-width: 1100px) { .hero--stacked .hero__media { aspect-ratio: 30 / 9; } }

/* --- Pasek zaufania ---------------------------------------------------------- */
.trust-bar { display: flex; flex-wrap: wrap; gap: var(--space-6, 32px); align-items: center; justify-content: center; text-align: center; }
.trust-bar__item { display: grid; gap: 2px; }
.trust-bar__num { font-family: var(--font-heading); font-size: var(--fs-2xl, 31px); color: var(--color-accent); }
.trust-bar__label { font-size: var(--fs-sm, 13px); color: var(--text-muted); text-transform: uppercase; letter-spacing: .06em; }

/* --- Ikonki akcentowe (atuty) ------------------------------------------------ */
.icon-grid { display: grid; gap: var(--space-6, 32px); grid-template-columns: 1fr; }
@media (min-width: 640px) { .icon-grid { grid-template-columns: repeat(2, 1fr); } }
@media (min-width: 980px) { .icon-grid { grid-template-columns: repeat(4, 1fr); } }
.icon-card { display: grid; gap: var(--space-3, 12px); padding: var(--space-5, 24px); background: var(--color-surface); border: 1px solid var(--color-border); border-radius: var(--radius-lg); }
.icon-card__icon { width: 40px; height: 40px; color: var(--color-accent); }
.icon-card h3 { font-size: var(--fs-lg, 20px); }
.icon-card p { color: var(--text-body); font-size: var(--fs-sm, 14px); }

/* --- Warianty icon-grid dla podstron (2/3 kolumny) — RESPONSYWNE, żeby hardkodowany
   grid-template-columns w inline style nie wywoływał poziomego scrolla @390 (L-030). */
.icon-grid--narrow { max-width: 760px; margin-inline: auto; }
.icon-grid--team { max-width: 900px; margin-inline: auto; }
.icon-grid-2, .icon-grid-3 { grid-template-columns: 1fr; }
@media (min-width: 560px) { .icon-grid-2, .icon-grid-3 { grid-template-columns: repeat(2, 1fr); } }
@media (min-width: 860px) { .icon-grid-3 { grid-template-columns: repeat(3, 1fr); } }

/* --- Karty usług: akcent na kartę-hit -------------------------------------- */
.offer-card--flagship { border-color: color-mix(in srgb, var(--color-accent) 55%, var(--color-border)); position: relative; }
.offer-card--flagship::before {
  content: "Najczęściej wybierany"; position: absolute; top: -12px; left: var(--space-5, 24px);
  background: var(--color-accent); color: var(--color-accentText); font-size: var(--fs-xs, 10px);
  text-transform: uppercase; letter-spacing: .08em; padding: 4px 12px; border-radius: 999px; font-weight: 700;
}
.offer-card .offer-meta { display: flex; flex-wrap: wrap; gap: var(--space-4, 16px); color: var(--text-muted); font-size: var(--fs-sm, 13px); }
.offer-card .offer-meta b { color: var(--color-accent); font-weight: 700; }

/* --- BOOKSY-SLOT (L-051): placeholder rezerwacji online --------------------- */
.booksy-slot {
  display: grid; gap: var(--space-4, 16px); place-items: center; text-align: center;
  padding: var(--space-8, 64px) var(--space-5, 24px); border-radius: var(--radius-lg);
  border: 1px dashed color-mix(in srgb, var(--color-accent) 45%, var(--color-border));
  /* background-color EXPLICITE (nie tylko gradient w skrócie 'background') — inaczej
     narzędzia QA liczące kontrast po computed backgroundColor widzą "transparent" i
     łapią kolor sekcji-rodzica (tu: ciemny tint-d), dając fałszywy alarm tekst-duch. */
  background-color: var(--color-surface);
  background-image: linear-gradient(135deg, color-mix(in srgb, var(--color-accent) 16%, transparent), transparent);
}
.booksy-slot__icon { width: 52px; height: 52px; color: var(--color-accent); }
/* jasne tło slotu (nawet w ciemnej sekcji tint-d) → nagłówek MUSI zostać ciemny,
   inaczej dziedziczy '.tint-d h3 { color:#fff }' i znika (biały na kremie, L-024). */
.booksy-slot h3 { color: var(--text-strong); }
.booksy-slot h3 { font-size: var(--fs-xl, 25px); max-width: 26ch; }
.booksy-slot p { color: var(--text-body); max-width: 48ch; }
.booksy-slot .cluster { justify-content: center; }

/* --- Godziny otwarcia -------------------------------------------------------- */
.hours-table { width: 100%; border-collapse: collapse; max-width: 480px; margin-inline: auto; }
.hours-table td { padding: var(--space-3, 12px) var(--space-4, 16px); border-bottom: 1px solid var(--color-border); }
.hours-table td:first-child { color: var(--text-body); }
.hours-table td:last-child { text-align: right; font-weight: 600; color: var(--text-strong); font-variant-numeric: tabular-nums; }
.hours-table tr.is-today td { color: var(--color-accent); }

/* --- Cennik ------------------------------------------------------------------ */
.price-table { width: 100%; border-collapse: collapse; margin-bottom: var(--space-3, 12px); }
.price-table th, .price-table td { text-align: left; padding: var(--space-3, 12px) var(--space-4, 16px); border-bottom: 1px solid var(--color-border); }
.price-table th { color: var(--text-muted); font-weight: 600; font-size: var(--fs-sm, 13px); text-transform: uppercase; letter-spacing: .05em; }
.price-table td:last-child, .price-table th:last-child { text-align: right; white-space: nowrap; }
.price-table td.price { color: var(--color-accent); font-weight: 700; font-family: var(--font-heading); }
.price-note { font-size: var(--fs-sm, 13px); color: var(--text-muted); margin-top: var(--space-3, 12px); }

/* --- Mapa dojazdu ------------------------------------------------------------ */
.map-frame { border-radius: var(--radius-lg); overflow: hidden; border: 1px solid var(--color-border); aspect-ratio: 16/9; }
.map-frame iframe { width: 100%; height: 100%; border: 0; display: block; }

/* --- Kolofon atrybucji zdjęć (wymóg Google) --------------------------------- */
.colofon { font-size: var(--fs-xs, 10px); color: var(--text-muted); margin-top: var(--space-5, 24px); }
.colofon a { text-decoration: underline; }

/* --- Galeria realizacje/atmosfera ------------------------------------------- */
.gallery-caption { font-size: var(--fs-sm, 13px); color: var(--text-muted); margin-top: var(--space-2, 8px); }
figure.g-item { margin: 0; }
.gallery-4up img { border-radius: var(--radius-md); }

/* --- Referencje: dopasowanie kolorystyczne do palety ------------------------ */
.reviews-google__card { background: var(--color-surface); }

/* --- FAQ: kolor akordeonu do palety ------------------------------------------ */
.fx-akordeon-faq details { background: var(--color-surface); }
.fx-akordeon-faq summary { color: var(--text-strong); }

/* --- Formularz kontaktowy ----------------------------------------------------- */
.contact-grid { display: grid; gap: var(--space-7, 48px); }
@media (min-width: 900px) { .contact-grid { grid-template-columns: 1fr 1fr; } }

/* --- Kontrast eyebrow na jasnym tle (WCAG): akcent-złoto na kremie/écru ma za
   niski kontrast jako KOLOR TEKSTU (2.5:1) — bazowy .eyebrow--ruled z styles.css
   koloruje tekst na var(--color-accent); tu nadpisujemy na czytelny text-muted,
   złoto zostaje wyłącznie w dekoracyjnych kreskach (nie wlicza się do kontrastu). */
.eyebrow--ruled { color: var(--text-muted); }
.eyebrow--ruled::before, .eyebrow--ruled::after { background: var(--color-accent); opacity: .8; }
/* na ciemnej sekcji (tint-d) złoto na espresso ma kontrast >4:1 — tam accent zostaje */
.tint-d .eyebrow--ruled { color: var(--color-accent); }
/* ...ALE gdy eyebrow siedzi na jasnej karcie .card WEWNĄTRZ tint-d (np. CTA-box na FAQ),
   tło pod tekstem znowu jest jasne — wracamy do muted, inaczej złoto na kremie ginie. */
.tint-d .card .eyebrow, .tint-d .card .eyebrow--ruled { color: var(--text-muted); }

/* --- Drobne poprawki dostępności/kontrastu ----------------------------------- */
.stars { color: var(--color-accent); }
::selection { background: var(--color-accent); color: var(--color-accentText); }
