/* ============================================================
   KOSMETOLOGIA NK — Natalia Knez
   Design system
   ============================================================ */

:root {
  /* Brand constants */
  --green-900: #2a3830;
  --green-800: #35473b;
  --green-700: #3f5346;
  --green-600: #4a6053;
  --cream-50:  #f6f2ea;
  --cream-100: #f1ece2;
  --cream-200: #e9e2d4;
  --cream-300: #ddd2bf;
  --gold:      #b68d63;
  --gold-soft: #c6a583;
  /* Akcent marki = złoto. Wcześniej te trzy wartości nadpisywał JS (panel
     Tweaks) już po wczytaniu strony, więc kolory przeskakiwały z łososiowych
     na złote w trakcie ładowania. Teraz są docelowe od pierwszej klatki. */
  --peach:     #c1a079;
  --peach-soft:#d6bd9c;
  --ink:       #26211b;
  --ink-soft:  #5b5347;

  /* Semantic tokens (default = GREEN palette) */
  --hero-bg:   var(--green-800);
  --hero-fg:   #ffffff;
  --hero-muted:#dde3da;
  --page-bg:   var(--cream-50);
  --page-fg:   var(--ink);
  --page-muted:var(--ink-soft);
  --panel-bg:  #ffffff;
  --band-bg:   var(--green-800);
  --band-fg:   #ffffff;
  --soft-bg:   #efe4d4;       /* soft panel w tonacji złota */
  --accent:    var(--gold);
  --accent-2:  var(--gold-soft);
  --line:      rgba(38,33,27,.14);
  --line-light:rgba(246,242,234,.22);

  /* Type */
  --serif: "Cormorant Garamond", Georgia, serif;
  --sans:  "Jost", system-ui, sans-serif;

  --maxw: 1280px;
  --gutter: clamp(20px, 5vw, 72px);
}

/* CREAM palette ------------------------------------------------ */
:root[data-palette="cream"] {
  --hero-bg:   var(--cream-50);
  --hero-fg:   var(--ink);
  --hero-muted:#7c7264;
  --band-bg:   var(--green-800);
  --band-fg:   var(--cream-50);
}

* { box-sizing: border-box; margin: 0; padding: 0; }

/* Clip horizontal overflow at the root. Decorative elements (sparks, stat card,
   badge, palms) intentionally poke past their containers; `overflow-x: hidden`
   on <body> alone does NOT stop the sideways pan on iOS Safari (the <html>
   element stays the scroll container), so clip on <html> too. `clip` (not
   `hidden`) leaves vertical scrolling untouched and creates no scroll container. */
html { -webkit-text-size-adjust: 100%; overflow-x: clip; }

body {
  font-family: var(--sans);
  font-weight: 300;
  color: var(--page-fg);
  background: var(--page-bg);
  line-height: 1.6;
  -webkit-font-smoothing: antialiased;
  overflow-x: clip;
}

img { display: block; max-width: 100%; }
a { color: inherit; text-decoration: none; }
button { font-family: inherit; cursor: pointer; border: none; background: none; }

/* ---------- Typography helpers ---------- */
.serif { font-family: var(--serif); }

.eyebrow {
  font-family: var(--sans);
  font-weight: 400;
  font-size: clamp(11px, 1vw, 13px);
  letter-spacing: .32em;
  text-transform: uppercase;
}

.display {
  font-family: var(--serif);
  font-weight: 500;
  line-height: 0.98;
  letter-spacing: -0.01em;
  text-wrap: balance;
}

h1.display { font-size: clamp(44px, 8.5vw, 132px); }
h2.display { font-size: clamp(34px, 5.4vw, 78px); }
h3.display { font-size: clamp(26px, 3vw, 42px); }

p { text-wrap: pretty; }

/* ---------- Layout ---------- */
.wrap { width: 100%; max-width: var(--maxw); margin-inline: auto; padding-inline: var(--gutter); }

section { position: relative; }

.section-pad { padding-block: clamp(72px, 11vw, 160px); }

/* ---------- Buttons ---------- */
.btn {
  display: inline-flex; align-items: center; gap: .6em;
  font-family: var(--sans); font-weight: 400;
  font-size: 14px; letter-spacing: .14em; text-transform: uppercase; white-space: nowrap;
  padding: 1.05em 2.1em; border-radius: 999px;
  transition: transform .45s cubic-bezier(.2,.8,.2,1), background .4s, color .4s, box-shadow .4s;
}
/* warstwę GPU podnosimy dopiero na hover — przycisk animuje się tylko wtedy */
.btn:hover { will-change: transform; }
.btn--peach { background: var(--peach); color: #fff; }
.btn--peach:hover { background: #d49a80; transform: translateY(-2px); box-shadow: 0 14px 30px -12px rgba(221,168,144,.7); }
.btn--green { background: var(--green-800); color: var(--cream-50); }
.btn--green:hover { background: var(--green-900); transform: translateY(-2px); box-shadow: 0 14px 30px -14px rgba(35,47,39,.6); }
.btn--ghost { border: 1px solid currentColor; }
.btn--ghost:hover { transform: translateY(-2px); }
.btn--gold { background: var(--gold); color: #fff; }
.btn--gold:hover { background: #a87f55; transform: translateY(-2px); box-shadow: 0 14px 30px -14px rgba(182,141,99,.7); }

/* ---------- Sparkle (4-point star) ---------- */
.spark {
  position: absolute; width: 26px; height: 26px; pointer-events: none;
  background: var(--accent-2);
  -webkit-mask: var(--spark-mask) center/contain no-repeat;
  mask: var(--spark-mask) center/contain no-repeat;
  opacity: .9;
}
:root {
  --spark-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'%3E%3Cpath d='M50 0C52 27 73 48 100 50 73 52 52 73 50 100 48 73 27 52 0 50 27 48 48 27 50 0Z' fill='black'/%3E%3C/svg%3E");
}

/* ---------- Cookie consent banner ---------- */
.nk-consent {
  position: fixed; left: 0; right: 0; bottom: 0; z-index: 200;
  display: flex; gap: 18px; align-items: center; justify-content: space-between; flex-wrap: wrap;
  padding: 16px clamp(16px, 4vw, 32px) calc(16px + env(safe-area-inset-bottom, 0px));
  background: var(--green-800); color: var(--cream-50);
  box-shadow: 0 -10px 30px -18px rgba(0,0,0,.5);
}
.nk-consent__txt { font-size: 13px; line-height: 1.5; max-width: 70ch; margin: 0;
  color: color-mix(in oklab, var(--cream-50) 88%, transparent); }
.nk-consent__btns { display: flex; gap: 10px; flex: none; }
.nk-consent__btn { font-family: var(--sans); font-size: 12px; letter-spacing: .12em; text-transform: uppercase;
  padding: 11px 22px; border-radius: 999px; cursor: pointer; transition: background .3s, border-color .3s, transform .3s; }
.nk-consent__btn--ghost { background: transparent; color: var(--cream-50); border: 1px solid color-mix(in oklab, var(--cream-50) 40%, transparent); }
.nk-consent__btn--ghost:hover { border-color: var(--cream-50); }
.nk-consent__btn--solid { background: var(--accent-2); color: var(--green-900); border: 1px solid var(--accent-2); }
.nk-consent__btn--solid:hover { background: #e7c2b0; transform: translateY(-1px); }
.nk-consent-link { cursor: pointer; font: inherit; color: inherit; opacity: .7;
  background: none; border: none; padding: 0; text-decoration: underline; text-underline-offset: 2px; }
.nk-consent-link:hover { opacity: 1; }
@media (max-width: 640px) {
  .nk-consent { flex-direction: column; align-items: stretch; gap: 12px; }
  .nk-consent__btns { justify-content: stretch; }
  .nk-consent__btn { flex: 1; }
}

/* ---------- Reveal animation (CSS-driven, robust) ---------- */
.reveal { opacity: 1; }
@media (prefers-reduced-motion: no-preference) {
  .js .reveal {
    opacity: 0;
    transform: translateY(32px);
    /* Uwaga: BEZ will-change. Reveali jest kilkadziesiąt, a will-change trzyma
       osobną warstwę GPU na stałe — także długo po zakończeniu animacji. To
       obciążało kompozycję przy każdym przewinięciu. opacity/transform i tak są
       animowane na GPU, więc podpowiedź jest tu zbędna. */
  }
  /* transition lives on the revealed state so hiding (1->0 when .js is added) is
     instant; only the reveal (0->1 via .in) animates — fixes hero snapping in */
  .js .reveal.in {
    opacity: 1; transform: none;
    transition: opacity .9s ease, transform 1s cubic-bezier(.2,.8,.2,1);
  }
}
