/* landing.css v2 — design system landingów spójny z portalem klient.webup.pl
   (Inter, niebieskawy #F1F5FB i granat #1E3A5F jak na jowes.webup.pl, akcent pomarańczowy #F97316, promienie 6/10/14/18, miękkie cienie).
   Per-landing akcent pomocniczy: klasa theme-* na <body> ustawia --lp (kolor ikon/badge/mockupów);
   CTA zawsze pomarańczowe jak w portalu. */
:root {
  /* paleta zbliżona do jowes.webup.pl: chłodniejsze, bardziej niebieskie tło i granatowe nagłówki */
  --bg:            #F1F5FB;
  --surface:       #FFFFFF;
  --border:        #DCE4EF;
  --border-soft:   #E9EFF7;
  --border-strong: #C3D0E2;
  /* Kolory marki wprost z logo (webup-logo.svg): pomarańcz #FF6F00, granat #27495B.
     Wcześniej stały tu przybliżenia z Tailwinda (#F97316/#1E3A5F) i logo nie zgadzało się
     z resztą strony. --accent-fg to przyciemniony wariant do TEKSTU — czysty #FF6F00 na
     bieli ma kontrast ok. 2,9:1, czyli poniżej progu WCAG AA dla treści. */
  --navy:          #27495B;
  --fg:            #0F172A;
  --fg-secondary:  #475569;
  --fg-muted:      #94A3B8;
  --accent:        #FF6F00;
  --accent-hover:  #E56400;
  --accent-light:  #FF8A00;   /* jasniejszy pomarancz — stan hover, patrz .btn-primary:hover */
  --accent-soft:   #FFF4EA;
  --accent-fg:     #FF6F00;
  --green:         #16A34A;
  --green-soft:    #F0FDF4;
  --red:           #DC2626;
  --r-sm: 6px; --r: 10px; --r-lg: 14px; --r-xl: 18px;
  --shadow-sm: 0 1px 2px rgba(15,23,42,.04);
  --shadow:    0 1px 3px rgba(15,23,42,.05), 0 1px 2px rgba(15,23,42,.04);
  --shadow-lg: 0 8px 24px rgba(15,23,42,.08), 0 2px 6px rgba(15,23,42,.04);
  --lp: #FF6F00; --lp-soft: #FFF4EA;   /* akcent landingu (nadpisywany przez theme-*) */
}
body.theme-workspace { --lp:#1A73E8; --lp-soft:#EFF6FF; }
body.theme-cookie    { --lp:#D97706; --lp-soft:#FFFBEB; }
body.theme-hosting   { --lp:#059669; --lp-soft:#ECFDF5; }
body.theme-strona    { --lp:#7C3AED; --lp-soft:#F5F3FF; }
body.theme-adgrants  { --lp:#1A73E8; --lp-soft:#EFF6FF; }
body.theme-ping      { --lp:#DC2626; --lp-soft:#FEF2F2; }
body.theme-domeny    { --lp:#0891B2; --lp-soft:#ECFEFF; }

/* rachunek za odnowienie domeny (domeny) */
.mock-bill { background:var(--surface); border:1px solid var(--border); border-radius:var(--r-xl); box-shadow:var(--shadow-lg); overflow:hidden; }
.mbill-head { padding:13px 16px; background:var(--bg); border-bottom:1px solid var(--border); font-size:.85rem; font-weight:700; color:var(--fg); }
.mbill-head span { display:block; font-size:.72rem; font-weight:500; color:var(--fg-muted); }
.mbill-row { display:flex; justify-content:space-between; align-items:center; padding:12px 16px; border-bottom:1px solid var(--border-soft); font-size:.86rem; color:var(--fg-secondary); }
.mbill-row .who { display:flex; align-items:center; gap:9px; }
.mbill-row .who i { width:9px; height:9px; border-radius:50%; background:var(--border-strong); display:inline-block; }
.mbill-row del { color:var(--fg-muted); }
/* wiersz „tu płacicie dziś" — to on ma boleć, więc jest wyróżniony na czerwono */
.mbill-row.you { background:#FEF2F2; border-left:3px solid var(--red); padding-left:13px; }
.mbill-row.you .who { color:var(--fg); font-weight:600; }
.mbill-row.you .who i { background:var(--red); }
.mbill-row.you del { color:var(--red); font-size:1.05rem; font-weight:700; text-decoration-thickness:2px; }
.mbill-row.you .mbill-guess { color:var(--red); font-weight:600; font-size:.82rem; }
.you-tag { display:inline-block; margin-left:8px; background:var(--red); color:#fff; font-size:.66rem;
  font-weight:800; text-transform:uppercase; letter-spacing:.05em; padding:3px 9px; border-radius:999px; vertical-align:middle; }
/* nasz wiersz — kontra do powyższego */
.mbill-row.we { background:color-mix(in srgb, var(--green) 8%, #fff); border-left:3px solid var(--green); padding-left:13px; }
.mbill-row.we .who { color:var(--fg); }
.mbill-row.we .who i { background:var(--green); }
.mbill-row.we b { color:var(--green); font-size:1.25rem; font-weight:800; letter-spacing:-.02em; }
/* Podsumowanie: bohaterem jest OSZCZĘDNOŚĆ, nie nasza cena. */
.mbill-save { padding:20px 18px; background:var(--green-soft); text-align:center;
  border-top:1px solid color-mix(in srgb, var(--green) 25%, transparent); }
.mbill-save .sv-cap { font-size:.76rem; font-weight:800; text-transform:uppercase; letter-spacing:.08em; color:var(--green); }
.mbill-save .sv-big { font-size:2.4rem; font-weight:800; color:var(--green); letter-spacing:-.03em;
  line-height:1.05; margin:4px 0 6px; font-variant-numeric:tabular-nums; }
.mbill-save .sv-big small { display:block; font-size:.8rem; font-weight:600; color:var(--fg-secondary);
  letter-spacing:0; margin-top:2px; }
.mbill-save .sv-sub { font-size:.84rem; color:var(--fg-secondary); line-height:1.5; }
.mbill-save .sv-sub b { color:var(--green); font-weight:700; }
.mbill-save .sv-host { margin-top:12px; padding-top:11px; border-top:1px dashed color-mix(in srgb, var(--green) 30%, transparent);
  font-size:.82rem; color:var(--fg-secondary); line-height:1.5; }
.mbill-save .sv-host b { color:var(--fg); font-weight:700; }
.mbill-save .sv-host i { display:block; margin-top:4px; font-style:normal; font-size:.74rem; color:var(--fg-muted); }
/* domena klienta jako tytuł strony (personalizacja z linku ?d=) */
.hero h1 .h1-kicker { display:block; font-size:.86rem; font-weight:700; text-transform:uppercase;
  letter-spacing:.08em; color:var(--green); margin-bottom:8px; }
/* stary wariant (pigułka) — zostaje dla makiety przed sprawdzeniem domeny */
.mbill-save > span { display:block; color:var(--fg-secondary); font-size:.9rem; line-height:1.5; }

* { margin:0; padding:0; box-sizing:border-box; }
html { scroll-behavior:smooth; }
body { font-family:'Inter',-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif; color:var(--fg); background:var(--bg); line-height:1.6; -webkit-font-smoothing:antialiased; }
img { max-width:100%; }
a { color:var(--accent-fg); }

/* ── NAV ── */
/* Pasek przezroczysty: tło strony ma pod niego wchodzić. Po przewinięciu dokładamy
   lekkie rozmycie, żeby linki nie zlewały się z treścią. */
nav { position:sticky; top:0; z-index:50; display:flex; align-items:center;
  justify-content:space-between; padding:14px 32px; background:transparent;
  border-bottom:1px solid transparent; transition:background .2s, border-color .2s, backdrop-filter .2s; }
nav.stuck { background:rgba(255,255,255,.82); backdrop-filter:blur(10px);
  border-bottom-color:var(--border-soft); }
.nav-logo { display:flex; align-items:center; gap:10px; text-decoration:none; }
.nav-logo img { height:30px; display:block; }
/* Hamburger istnieje tylko na telefonie — reguły otwierania siedzą w media query na dole. */
.nav-toggle { display:none; }
.nav-burger { display:none; }
.nav-right { display:flex; align-items:center; gap:18px; }
.nav-link { color:var(--fg-secondary); text-decoration:none; font-size:.9rem; font-weight:500; }
.nav-link:hover { color:var(--fg); }
.nav-cta { display:inline-flex; align-items:center; background:var(--accent); color:#fff; text-decoration:none; font-weight:600; font-size:.9rem; padding:9px 18px; border-radius:var(--r); transition:.15s; white-space:nowrap; box-shadow:var(--shadow-sm); }
.nav-cta:hover { background:var(--accent-light); box-shadow:0 6px 18px rgba(255,111,0,.4); }
@media (max-width:560px){ .nav-link{display:none} }

/* ── HERO (jasne, 2 kolumny: copy + mockup) ── */
/* Hero landingu ma to samo ruchome tło co strona główna (warstwa .wu-bg wstrzykiwana
   przez wu_bg_html). Płaski gradient zostaje jako podkład pod plamami i jako wygląd
   awaryjny, gdy ktoś ma wyłączone animacje. `overflow:hidden` przycina plamy do sekcji. */
/* Hero landingu wchodzi POD pasek nawigacji — dokładnie tak jak .wu-hero na stronie
   głównej. Bez tego pasek stał na jasnym pasie tła strony i białe pozycje menu były
   na nim nieczytelne, mimo że hero niżej ma już ciemną plamę pod menu. */
.hero { position:relative; overflow:hidden; padding:96px 24px 88px; background:#fff; }
/* Ta sama biała powłoka co na stronie głównej — bez niej plamy biją w tekst. */
.hero::before { content:""; position:absolute; inset:0; z-index:1;
  background:rgba(255,255,255,.34); }
/* Treść hero musi być NAD warstwą tła — .wu-bg ma z-index 0. */
.hero > .hero-inner, .hero > .section-inner { position:relative; z-index:2; }
/* Plamy na pełnej mocy — dokładnie jak na stronie głównej. Przygaszenie do .55
   sprawiało, że górna część landingu wyglądała jak inny serwis. */
.hero > .wu-bg { opacity:1; }
@media (min-width:761px){ .hero { margin-top:-73px; padding-top:calc(96px + 73px); } }
@media (max-width:760px){ .hero { margin-top:-59px; padding-top:calc(44px + 59px); padding-bottom:46px; } }
@media (max-width:760px){
  /* Makieta produktu (zrzut wyszukiwarki, raport PING) na telefonie zajmowala pol ekranu
     i byla nieczytelna — na tej szerokosci liczy sie naglowek, zdanie i przycisk. */
  .hero-visual, .mock-note { display:none; }
  .hero { padding-bottom:40px; }
  .hero-stats { gap:14px; margin-top:18px; }
  .hero-stat .big { font-size:1.5rem; }
  .hero h1 { font-size:1.9rem; line-height:1.2; }
  .hero-sub { font-size:1rem; }
}
/* Plama kotwicząca pod menu musi być na landingu MOCNIEJSZA niż reszta tła — welon .55
   rozjaśnia wszystko, a ona jedyna odpowiada za czytelność białych napisów. */

.hero-inner { max-width:1080px; margin:0 auto; }
.hero-grid2 { display:grid; grid-template-columns:minmax(0,1.05fr) minmax(0,.95fr); gap:48px; align-items:center; }
.hero-grid2.rev > .hero-copy { order:2; } .hero-grid2.rev > .hero-visual { order:1; }
@media (max-width:900px){ .hero-grid2, .hero-grid2.rev { grid-template-columns:1fr; gap:36px; } .hero-grid2.rev > .hero-copy { order:1; } .hero-grid2.rev > .hero-visual { order:2; } }
.hero-badge { display:inline-flex; align-items:center; gap:8px; background:var(--lp-soft); color:var(--lp); border:1px solid color-mix(in srgb, var(--lp) 25%, transparent); padding:5px 14px; border-radius:999px; font-size:.8rem; font-weight:600; letter-spacing:.01em; margin-bottom:20px; }
/* Ta sama skala co .wu-hero h1 — 3rem kontra 3.4rem dawalo widoczna roznice. */
.hero h1 { font-size:clamp(2.1rem,4.6vw,3.4rem); font-weight:300; line-height:1.14; letter-spacing:-.025em; color:var(--navy); }
.hero h1 strong, .hero h1 b { font-weight:600; }
.hero h1 em { font-style:normal; font-weight:600; color:var(--accent); }
.hero-sub { margin-top:16px; font-size:clamp(1rem,1.8vw,1.13rem); color:var(--fg-secondary); max-width:600px; }
.hero-ctas { margin-top:28px; display:flex; gap:12px; flex-wrap:wrap; align-items:center; }
.btn-primary { display:inline-flex; align-items:center; gap:9px; background:var(--accent); color:#fff; text-decoration:none; font-weight:600; font-size:1rem; padding:13px 26px; border-radius:var(--r); border:none; cursor:pointer; transition:box-shadow .18s, transform .18s; box-shadow:0 4px 14px rgba(255,111,0,.26); }
/* Hover ROZJASNIA pomarancz zamiast go przyciemniac (decyzja Oskara 09.08).
   Sciemnianie czytalo sie jak stan wcisniecia, czyli odwrotnie do tego, co hover
   ma komunikowac; jasniejszy odcien plus 2 px w gore daje wrazenie podswietlenia.
   Kliknieciu zostawiamy ciemniejszy odcien — TAM przyciemnienie jest na miejscu. */
.btn-primary:hover { background:var(--accent-light); box-shadow:0 6px 20px rgba(255,111,0,.42); }
.btn-primary:active { background:var(--accent-hover); box-shadow:0 3px 10px rgba(255,111,0,.32); }
.btn-ghost { display:inline-flex; align-items:center; gap:7px; padding:13px 28px;
  border:1.5px solid var(--navy); border-radius:999px; background:transparent;
  color:var(--navy); font-weight:600; font-size:.95rem; text-decoration:none; transition:.16s; }
.btn-ghost:hover { background:var(--navy); border-color:var(--navy); color:#fff; }
.hero-stats { display:flex; gap:32px; margin-top:36px; flex-wrap:wrap; }
.hero-stat .big { display:block; font-size:1.45rem; font-weight:800; color:var(--fg); letter-spacing:-.02em; }
.hero-stat .small { font-size:.82rem; color:var(--fg-muted); }

/* ── SEKCJE ── */
section { padding:60px 24px; }
/* Poniżej 1120 px kolumna dotykałaby krawędzi ekranu — na telefonie tekst zaczynał się
   dosłownie w pikselu 0. Powyżej tej szerokości margines robi się sam z max-width,
   więc desktopu to nie rusza. */
.section-inner { max-width:1080px; margin:0 auto; }
@media (max-width:1119px){ .section-inner { padding-inline:20px; } }
.section-tag { display:inline-block; color:var(--accent-fg); background:var(--accent-soft); padding:4px 12px; border-radius:999px; font-weight:600; font-size:.78rem; text-transform:uppercase; letter-spacing:.07em; margin-bottom:12px; }
h2 { font-size:clamp(1.45rem,3.2vw,2.05rem); font-weight:800; line-height:1.22; letter-spacing:-.02em; color:var(--navy); }
.section-sub { margin-top:10px; color:var(--fg-secondary); font-size:1.02rem; max-width:640px; }
.alt { background:var(--surface); border-top:1px solid var(--border-soft); border-bottom:1px solid var(--border-soft); }

/* karty korzyści */
.benefit-grid { display:grid; grid-template-columns:repeat(auto-fit,minmax(235px,1fr)); gap:16px; margin-top:32px; }
.benefit-card { background:var(--surface); border:1px solid var(--border); border-radius:var(--r-lg); padding:22px; box-shadow:var(--shadow-sm); }
.benefit-card .icon { width:42px; height:42px; border-radius:var(--r); background:var(--lp-soft); color:var(--lp); display:flex; align-items:center; justify-content:center; font-size:1.25rem; margin-bottom:13px; }
.benefit-card h3 { font-size:1rem; font-weight:700; color:var(--fg); margin-bottom:5px; }
.benefit-card p { font-size:.92rem; color:var(--fg-secondary); }

/* kroki */
/* Kroki w stylu jowes.webup.pl: zespolone kafle (2px szczeliny) z dużym „duchem" numeru.
   Tło kafla jest przeciwne do tła sekcji, żeby działało i na jasnej, i na niebieskiej. */
.steps { display:grid; grid-template-columns:repeat(auto-fit,minmax(215px,1fr)); gap:2px; margin-top:38px; }
.step { background:var(--surface); border:none; border-radius:0; padding:32px 26px; box-shadow:none; }
.step:first-child { border-radius:var(--r-lg) 0 0 var(--r-lg); }
.step:last-child  { border-radius:0 var(--r-lg) var(--r-lg) 0; }
.alt .step { background:var(--bg); }
.step-no { display:block; width:auto; height:auto; background:none; border-radius:0; color:var(--border-strong);
  font-size:3.1rem; font-weight:800; line-height:1; letter-spacing:-.04em; margin-bottom:14px; font-variant-numeric:tabular-nums; }
.step-no::before { content:"0"; }   /* 1 → 01, jak na jowes (kroków nigdy nie ma 10+) */
.step h3 { font-size:1.02rem; font-weight:700; color:var(--navy); margin-bottom:6px; }
@media (max-width:640px){
  .steps { grid-template-columns:1fr; }
  .step:first-child { border-radius:var(--r-lg) var(--r-lg) 0 0; }
  .step:last-child  { border-radius:0 0 var(--r-lg) var(--r-lg); }
}
.step p { font-size:.9rem; color:var(--fg-secondary); }
.step .badge-our { display:inline-block; margin-top:10px; background:var(--green-soft); color:var(--green); font-size:.75rem; font-weight:700; padding:3px 10px; border-radius:999px; }

/* ── CENNIK ── */
.pricing { display:grid; grid-template-columns:repeat(auto-fit,minmax(285px,1fr)); gap:20px; margin-top:38px; align-items:stretch; }
.price-card { background:var(--surface); border:1px solid var(--border); border-radius:var(--r-xl); padding:28px 26px; display:flex; flex-direction:column; position:relative; box-shadow:var(--shadow); }
.price-card.featured { border:2px solid var(--accent); box-shadow:0 12px 34px rgba(249,115,22,.13); }
.price-flag { position:absolute; top:-13px; left:24px; background:var(--accent); color:#fff; font-size:.76rem; font-weight:700; padding:4px 13px; border-radius:999px; box-shadow:var(--shadow-sm); }
.price-name { font-size:1.12rem; font-weight:800; color:var(--navy); letter-spacing:-.01em; }
.price-for { color:var(--fg-muted); font-size:.88rem; margin-top:2px; }
.price-line { margin-top:16px; display:flex; align-items:baseline; gap:7px; flex-wrap:wrap; }
.price-num { font-size:2.2rem; font-weight:800; color:var(--fg); letter-spacing:-.03em; }
.price-per { color:var(--fg-muted); font-size:.92rem; }
.price-setup { margin-top:2px; color:var(--fg-secondary); font-size:.88rem; }
.price-setup strong { color:var(--fg); }
.price-feats { list-style:none; margin:18px 0 24px; flex:1; }
.price-feats li { padding:6px 0 6px 28px; position:relative; font-size:.93rem; color:var(--fg-secondary); }
.price-feats li strong { color:var(--fg); }
.price-feats li::before { content:"✓"; position:absolute; left:2px; color:var(--green); font-weight:800; }
.price-feats li.dim::before { content:"＋"; color:var(--accent); }
.price-cta { display:flex; align-items:center; justify-content:center; text-align:center; background:var(--fg); color:#fff; text-decoration:none; font-weight:600; padding:13px; border-radius:var(--r); border:none; width:100%; cursor:pointer; font-size:.98rem; transition:.15s; }
.price-cta:hover { background:#1E293B; }
.price-card.featured .price-cta { background:var(--accent); box-shadow:0 4px 14px rgba(249,115,22,.28); }
.price-card.featured .price-cta:hover { background:var(--accent-hover); }
.price-note { text-align:center; margin-top:10px; font-size:.82rem; color:var(--fg-muted); }
/* cennik wąski (2 warianty) — wyśrodkowany, nie przyklejony do lewej */
.pricing.narrow { max-width:920px; margin-left:auto; margin-right:auto; grid-template-columns:repeat(auto-fit,minmax(340px,1fr)); }

/* Zagęszczenie cennika — cała sekcja (nagłówek + przełącznik + karty + rozbicie ceny)
   ma się mieścić na jednym ekranie laptopa. Ruszamy wyłącznie odstępami i wielkością
   drobnego tekstu; ceny i CTA zostają w oryginalnym rozmiarze. */
.price-card { padding:18px 22px; }
.price-line { margin-top:8px; }
.price-setup { font-size:.85rem; }
.price-feats { margin:11px 0 13px; }
.price-feats li { padding:2px 0 2px 26px; font-size:.88rem; line-height:1.45; }
.price-cta { padding:11px; }
.price-note { margin-top:7px; font-size:.78rem; line-height:1.4; }
.pricing { margin-top:20px; }
section#cennik { padding-top:34px; padding-bottom:34px; }
section#cennik .section-sub { margin-top:7px; }

/* dodatki do zamówienia — klikalne kafle z żywą ceną; bez ramki, tylko delikatna kreska
   oddzielająca je od listy cech (ramka wokół bloku wyglądała jak wtrącona reklama) */
.price-addons { border:none; background:none; border-top:1px solid var(--border); border-radius:0; padding:13px 0 0; margin:2px 0 14px; }
.price-addons .pa-head { font-size:.76rem; font-weight:800; text-transform:uppercase; letter-spacing:.06em; color:var(--accent-fg); margin-bottom:6px; }
.pa-opt { display:flex; align-items:flex-start; gap:10px; padding:9px 11px; margin-bottom:6px; background:var(--surface); border:1.5px solid var(--border); border-radius:var(--r); cursor:pointer; transition:border-color .15s, box-shadow .15s; }
.pa-opt:last-of-type { margin-bottom:0; }
.pa-opt:hover { border-color:var(--accent); }
.pa-opt input { position:absolute; opacity:0; width:0; height:0; }
.pa-box { width:20px; height:20px; flex-shrink:0; margin-top:1px; border:2px solid var(--border-strong); border-radius:6px; display:flex; align-items:center; justify-content:center; transition:.15s; }
.pa-box::after { content:"✓"; color:#fff; font-size:.76rem; font-weight:800; opacity:0; transition:.15s; }
.pa-opt input:checked ~ .pa-box { background:var(--accent); border-color:var(--accent); }
.pa-opt input:checked ~ .pa-box::after { opacity:1; }
.pa-opt:has(input:checked) { border-color:var(--accent); box-shadow:0 0 0 3px rgba(249,115,22,.12); }
.pa-opt input:focus-visible ~ .pa-box { box-shadow:0 0 0 3px rgba(249,115,22,.35); }
.pa-txt { flex:1; font-size:.83rem; line-height:1.38; }
.pa-txt b { display:block; color:var(--fg); font-size:.87rem; }
.pa-txt span { color:var(--fg-secondary); }
.pa-price { font-weight:800; color:var(--accent-fg); white-space:nowrap; font-variant-numeric:tabular-nums; font-size:.9rem; }
.pa-foot { margin-top:9px; padding-top:8px; border-top:1px dashed color-mix(in srgb, var(--accent) 34%, transparent); display:flex; align-items:baseline; justify-content:space-between; gap:10px; font-size:.85rem; color:var(--fg-secondary); }
.pa-foot .pa-total { font-weight:800; font-size:1.15rem; color:var(--fg); font-variant-numeric:tabular-nums; }
/* wariant „w cenie" (VIP) */
.price-addons.incl .pa-head { color:var(--green); }
.price-addons.incl .pa-opt { cursor:default; border-color:color-mix(in srgb, var(--green) 26%, transparent); background:color-mix(in srgb, var(--green) 6%, #fff); }
.price-addons.incl .pa-opt:hover { border-color:color-mix(in srgb, var(--green) 26%, transparent); }
.price-addons.incl .pa-box { background:var(--green); border-color:var(--green); }
.price-addons.incl .pa-box::after { opacity:1; }
.price-addons.incl .pa-price { color:var(--green); }
.price-addons.incl .pa-foot { border-top-color:color-mix(in srgb, var(--green) 30%, transparent); }

/* ── tabelka porównań ── */
.compare { margin-top:32px; overflow-x:auto; }
.compare table { width:100%; border-collapse:separate; border-spacing:0; background:var(--surface); border:1px solid var(--border); border-radius:var(--r-lg); overflow:hidden; box-shadow:var(--shadow-sm); min-width:540px; }
.compare th, .compare td { padding:12px 16px; text-align:left; font-size:.92rem; border-bottom:1px solid var(--border-soft); }
.compare thead th { background:var(--bg); color:var(--fg-secondary); font-weight:600; font-size:.85rem; border-bottom:1px solid var(--border); }
.compare thead th:last-child { color:var(--accent-fg); background:var(--accent-soft); }
.compare tbody tr:last-child td { border-bottom:none; }
.compare td:last-child { background:color-mix(in srgb, var(--accent-soft) 55%, #fff); }
.compare .ok { color:var(--green); font-weight:700; }
.compare .no { color:var(--red); font-weight:600; }

/* ── FAQ ── */
.faq { max-width:760px; margin:32px auto 0; }
.faq details { background:var(--surface); border:1px solid var(--border); border-radius:var(--r-lg); margin-bottom:10px; overflow:hidden; box-shadow:var(--shadow-sm); }
.faq summary { cursor:pointer; padding:16px 20px; font-weight:600; font-size:.97rem; color:var(--fg); list-style:none; display:flex; justify-content:space-between; align-items:center; gap:12px; }
.faq summary::-webkit-details-marker { display:none; }
.faq summary::after { content:"+"; font-size:1.25rem; color:var(--accent); font-weight:700; flex-shrink:0; }
.faq details[open] summary::after { content:"–"; }
.faq .faq-a { padding:0 20px 16px; color:var(--fg-secondary); font-size:.93rem; }

/* ── CTA STRIP (ciemny slate jak --fg portalu) ── */
.cta-strip { background:var(--navy); color:#fff; text-align:center; padding:60px 24px; }
.cta-strip h2 { color:#fff; }
.cta-strip p { color:#CBD5E1; margin-top:10px; }
.cta-strip .btn-primary { margin-top:24px; }
.cta-strip a { color:#fff; }

/* ── MOCKUPY PRODUKTÓW (hero-visual) ── */
.hero-visual { position:relative; min-width:0; }
.mock-note { display:table; margin:0 0 8px auto; background:var(--fg); color:#fff; font-size:.72rem; font-weight:600; padding:4px 12px; border-radius:999px; box-shadow:var(--shadow); }

/* okno przeglądarki */
.mock-browser { background:var(--surface); border:1px solid var(--border); border-radius:var(--r-xl); box-shadow:var(--shadow-lg); overflow:hidden; }
.mb-top { display:flex; align-items:center; gap:10px; padding:10px 14px; background:var(--bg); border-bottom:1px solid var(--border); }
.mb-dots { display:flex; gap:5px; }
.mb-dots span { width:10px; height:10px; border-radius:50%; background:var(--border-strong); }
.mb-dots span:first-child { background:#FCA5A5; } .mb-dots span:nth-child(2) { background:#FCD34D; } .mb-dots span:nth-child(3) { background:#86EFAC; }
.mb-url { flex:1; background:var(--surface); border:1px solid var(--border); border-radius:999px; font-size:.75rem; color:var(--fg-muted); padding:4px 12px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.mb-url b { color:var(--fg-secondary); font-weight:600; }
.mb-body { position:relative; padding:16px; min-height:230px; }

/* szkielet strony w oknie */
.sk { border-radius:6px; background:var(--border-soft); }
.sk-line { height:9px; margin-bottom:7px; }
.sk-hero { height:64px; border-radius:var(--r); background:linear-gradient(120deg, var(--lp-soft), var(--border-soft)); margin-bottom:12px; }
.sk-cards { display:grid; grid-template-columns:repeat(3,1fr); gap:8px; }
.sk-card { height:46px; border-radius:8px; background:var(--border-soft); }

/* baner SmartCookie w mockupie — replika 1:1 realnego banera (sc.php/sc.css.php web150):
   biała karta radius 12, Open Sans 300, przyciski pill 20px, primary #ff7b00, powered-by. */
.scd-modal { position:relative; margin:14px 0 0; background:#fff; border:1px solid #e0e0e0; border-radius:12px; box-shadow:0 4px 20px rgba(0,0,0,.12); text-align:left; font-family:'Open Sans','Inter',sans-serif; }
.scd-body { padding:10px 12px 4px; font-size:12.5px; font-weight:300; line-height:1.4; color:#000; }
.scd-body strong { font-weight:700; }
.scd-body a { color:#4f4f4f; text-decoration:underline; }
.scd-cats { display:none; padding:2px 12px 0; }
.scd-cat { border-top:1px solid #f0f0f0; }
.scd-cat-head { display:flex; align-items:center; gap:8px; padding:7px 2px; font-size:12px; color:#000; font-weight:400; cursor:pointer; user-select:none; }
.scd-arrow { color:#999; font-size:14px; line-height:1; display:inline-block; transition:transform .15s; }
.scd-cat.open .scd-arrow { transform:rotate(90deg); }
.scd-cat-body { display:none; padding:0 2px 9px 22px; font-size:11px; font-weight:300; color:#777; line-height:1.5; }
.scd-cat.open .scd-cat-body { display:block; }
.scd-cat-head .name { flex:1; }
.scd-always { font-size:10.5px; color:#999; font-style:italic; }
.scd-switch { position:relative; width:30px; height:16px; flex-shrink:0; cursor:pointer; }
.scd-switch input { opacity:0; width:0; height:0; }
.scd-slider { position:absolute; inset:0; background:#eee; border-radius:999px; transition:.15s; }
.scd-slider::before { content:""; position:absolute; width:12px; height:12px; border-radius:50%; background:#fff; top:2px; left:2px; box-shadow:0 1px 2px rgba(0,0,0,.25); transition:.15s; }
.scd-switch input:checked + .scd-slider { background:#ff7b00; }
.scd-switch input:checked + .scd-slider::before { transform:translateX(14px); }
.scd-footer { display:flex; flex-wrap:wrap; align-items:center; justify-content:flex-end; gap:6px; padding:10px 12px; }
.scd-btn { box-sizing:border-box; display:inline-block; padding:6px 14px; font-size:10.5px; font-weight:400; font-family:'Open Sans',Arial,sans-serif; line-height:1.4; border-radius:20px; cursor:pointer; border:1px solid transparent; text-transform:uppercase; white-space:nowrap; background:transparent; transition:.15s; }
.scd-btn-sec { color:#ff7b00; border-color:#ff7b00; }
.scd-btn-sec:hover { color:#fff; background:#ff7b00; }
.scd-btn-pri { color:#fff; background:#ff7b00; box-shadow:0 2px 6px rgba(255,123,0,.2); }
.scd-btn-pri:hover { filter:brightness(1.1); }
.scd-powered { width:100%; text-align:right; font-size:10px; font-style:italic; color:#aaa; display:flex; align-items:center; justify-content:flex-end; gap:5px; margin-top:2px; }
.scd-powered img { height:11px; opacity:.75; }
/* pływający cookie-dot — 1:1 jak w realnym banerze: czarne kółko 40px, biała pigułka 28×16
   i czarna kropka 10px po lewej (sc.css.php: #cookie-dot + .sc-slider2 + :before = secondary #000) */
/* ── DEMO SMARTCOOKIE: STALA WYSOKOSC MAKIETY ──
   Baner rosnie przy „Preferencjach" i rozwijaniu kategorii (zmierzone: 341 → 479 → 538 px,
   a po akceptacji spada do 230). Makieta zmieniala przez to rozmiar i cala strona skakala.
   Teraz okno ma staly rozmiar, baner jest przyklejony do dolu jak w prawdziwej witrynie,
   a lista kategorii przewija sie w srodku, zamiast rozpychac okno. */
.demo-cookie .mb-body { height:448px; }
.demo-cookie .scd-modal { position:absolute; left:16px; right:16px; bottom:16px; margin:0;
  display:flex; flex-direction:column; max-height:calc(100% - 32px); }
.demo-cookie .scd-cats { overflow-y:auto; }
.demo-cookie .scd-footer { flex-shrink:0; }
@media (max-width:1119px){ .demo-cookie .mb-body { height:480px; } }

.scd-dot { position:absolute; left:12px; bottom:12px; width:40px; height:40px; border-radius:50%; background:#000; display:none; align-items:center; justify-content:center; cursor:pointer; z-index:2; }
.scd-dot .mini { width:28px; height:16px; background:#fff; border-radius:24px; display:flex; align-items:center; padding:2px; }
.scd-dot .mini::before { content:""; width:10px; height:10px; border-radius:50%; background:#000; }

/* pasek sprawdzania domeny (checker ?d=) */
.intel-bar { display:flex; gap:8px; margin-bottom:12px; }
.intel-bar input { flex:1; min-width:0; padding:11px 14px; border:1px solid var(--border-strong); border-radius:var(--r); font-size:.95rem; font-family:inherit; color:var(--fg); background:var(--surface); }
.intel-bar input:focus { outline:none; border-color:var(--accent); box-shadow:0 0 0 3px rgba(249,115,22,.15); }
.intel-btn { display:inline-flex; align-items:center; gap:7px; background:var(--fg); color:#fff; border:none; font-family:inherit; font-weight:600; font-size:.92rem; padding:11px 18px; border-radius:var(--r); cursor:pointer; transition:.15s; white-space:nowrap; }
.intel-btn:hover { background:#1E293B; }
.intel-btn[disabled] { opacity:.6; cursor:wait; }
.intel-status { margin:-4px 0 10px; font-size:.83rem; color:var(--fg-secondary); min-height:1.2em; }
.intel-status .ok { color:var(--green); font-weight:600; }
.intel-status .warn { color:var(--red); font-weight:600; }
.intel-result { background:var(--surface); border:1px solid var(--border); border-radius:var(--r-lg); box-shadow:var(--shadow); padding:14px 16px; margin-bottom:12px; display:none; }
.intel-result h4 { font-size:.92rem; font-weight:700; color:var(--fg); margin-bottom:6px; display:flex; align-items:center; gap:8px; }
.intel-result p { font-size:.87rem; color:var(--fg-secondary); }
.intel-result .tag { display:inline-block; font-size:.72rem; font-weight:700; padding:2px 9px; border-radius:999px; background:var(--lp-soft); color:var(--lp); }
.intel-result .tag.bad { background:#FEF2F2; color:var(--red); }
.intel-result .tag.good { background:var(--green-soft); color:var(--green); }

/* skrzynka Gmail (workspace) */
.mock-inbox { background:var(--surface); border:1px solid var(--border); border-radius:var(--r-xl); box-shadow:var(--shadow-lg); overflow:hidden; }
.mi-head { display:flex; align-items:center; gap:10px; padding:12px 16px; border-bottom:1px solid var(--border); background:var(--bg); }
.mi-head .dot { width:26px; height:26px; border-radius:50%; background:var(--lp); color:#fff; font-size:.8rem; font-weight:700; display:flex; align-items:center; justify-content:center; }
.mi-head b { font-size:.85rem; color:var(--fg); }
.mi-head span { font-size:.75rem; color:var(--fg-muted); }
.mi-row { display:flex; align-items:center; gap:12px; padding:11px 16px; border-bottom:1px solid var(--border-soft); }
.mi-row:last-child { border-bottom:none; }
.mi-av { width:30px; height:30px; border-radius:50%; flex-shrink:0; color:#fff; font-size:.75rem; font-weight:700; display:flex; align-items:center; justify-content:center; }
.mi-txt { min-width:0; }
.mi-txt b { display:block; font-size:.8rem; color:var(--fg); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.mi-txt span { display:block; font-size:.72rem; color:var(--fg-muted); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.mi-apps { display:flex; gap:8px; padding:12px 16px; background:var(--bg); border-top:1px solid var(--border); flex-wrap:wrap; }
.mi-app { display:inline-flex; align-items:center; gap:6px; font-size:.72rem; font-weight:600; color:var(--fg-secondary); background:var(--surface); border:1px solid var(--border); padding:5px 10px; border-radius:999px; }
.mi-app i { width:8px; height:8px; border-radius:50%; display:inline-block; }

/* panel monitoringu (hosting) */
.mock-monitor { background:var(--surface); border:1px solid var(--border); border-radius:var(--r-xl); box-shadow:var(--shadow-lg); overflow:hidden; }
.mm-head { display:flex; justify-content:space-between; align-items:center; padding:13px 16px; border-bottom:1px solid var(--border); background:var(--bg); font-size:.83rem; font-weight:700; color:var(--fg); }
.mm-live { display:inline-flex; align-items:center; gap:6px; font-size:.72rem; font-weight:600; color:var(--green); }
.mm-live i { width:8px; height:8px; border-radius:50%; background:var(--green); display:inline-block; animation:pulse 1.6s infinite; }
@keyframes pulse { 0%,100%{opacity:1} 50%{opacity:.35} }
.mm-row { display:flex; justify-content:space-between; align-items:center; gap:10px; padding:11px 16px; border-bottom:1px solid var(--border-soft); font-size:.83rem; color:var(--fg-secondary); }
.mm-row:last-of-type { border-bottom:none; }
.mm-row b { color:var(--fg); font-weight:600; }
.mm-ok { color:var(--green); font-weight:700; font-size:.8rem; }
.mm-bars { display:flex; gap:3px; align-items:flex-end; padding:12px 16px 16px; border-top:1px solid var(--border); }
.mm-bars i { flex:1; background:var(--lp); opacity:.85; border-radius:3px 3px 0 0; display:block; }

/* SERP Google (adgrants) */
.mock-serp { background:var(--surface); border:1px solid var(--border); border-radius:var(--r-xl); box-shadow:var(--shadow-lg); padding:16px; }
.ms-bar { display:flex; align-items:center; gap:10px; border:1px solid var(--border-strong); border-radius:999px; padding:9px 16px; font-size:.85rem; color:var(--fg); margin-bottom:14px; }
.ms-bar svg { flex-shrink:0; }
.ms-ad { border:1px solid var(--border); border-radius:var(--r-lg); padding:13px 15px; background:#fff; }
.ms-tag { display:inline-block; font-size:.68rem; font-weight:700; color:var(--fg); border:1px solid var(--border-strong); padding:1px 7px; border-radius:4px; margin-bottom:6px; }
.ms-url { font-size:.74rem; color:#0C6329; }
.ms-title { font-size:.98rem; color:#1A0DAB; font-weight:500; margin:2px 0 3px; }
.ms-desc { font-size:.78rem; color:var(--fg-secondary); }
.ms-org { padding:12px 15px 4px; opacity:.55; }
/* Przełącznik branży przy przykładowej reklamie (strona główna, sekcja Ad Grants).
   Pastylki to ten sam komponent (.kw-preset) co w planerze słów na adgrants.webup.pl. */
.gag-branze { justify-content:flex-start; margin-bottom:12px; }
/* Wszystkie warianty reklamy w JEDNEJ komórce siatki. Nieaktywne chowamy przez
   `visibility`, a nie `display` — dzięki temu nadal zajmują miejsce i wysokość bloku
   jest stała, równa najdłuższej reklamie. Inaczej przełączenie branży przesuwało
   całą stronę pod kursorem. */
.ms-stack { display:grid; }
.ms-stack > .ms-ad { grid-area:1 / 1; visibility:hidden; }
.ms-stack > .ms-ad.on { visibility:visible; }
.wu-gag-cta p a { color:var(--accent-fg); font-weight:600; }

.ms-badge { display:inline-flex; align-items:center; gap:7px; margin-top:12px; background:var(--green-soft); color:var(--green); font-size:.76rem; font-weight:700; padding:6px 12px; border-radius:999px; }

/* raport PING */
.mock-report { background:var(--surface); border:1px solid var(--border); border-radius:var(--r-xl); box-shadow:var(--shadow-lg); overflow:hidden; }
.mr-head { display:flex; justify-content:space-between; align-items:center; padding:13px 16px; background:var(--bg); border-bottom:1px solid var(--border); }
.mr-head b { font-size:.85rem; color:var(--fg); }
.mr-head span { font-size:.72rem; color:var(--fg-muted); }
.mr-score { display:flex; align-items:center; gap:14px; padding:16px; border-bottom:1px solid var(--border-soft); }
.mr-ring { width:64px; height:64px; border-radius:50%; background:conic-gradient(var(--red) 0 62%, var(--border-soft) 62% 100%); display:flex; align-items:center; justify-content:center; flex-shrink:0; }
.mr-ring i { width:48px; height:48px; border-radius:50%; background:#fff; display:flex; align-items:center; justify-content:center; font-style:normal; font-weight:800; font-size:.95rem; color:var(--fg); }
.mr-score p { font-size:.8rem; color:var(--fg-secondary); }
.mr-score b { color:var(--fg); }
.mr-item { display:flex; gap:10px; align-items:flex-start; padding:10px 16px; border-bottom:1px solid var(--border-soft); font-size:.8rem; color:var(--fg-secondary); }
.mr-item:last-child { border-bottom:none; }
.mr-item b { color:var(--fg); font-weight:600; }
.mr-dot { width:9px; height:9px; border-radius:50%; margin-top:5px; flex-shrink:0; }

/* ── MODAL ZAMÓWIENIA ── */
.modal-back { position:fixed; inset:0; background:rgba(15,23,42,.5); display:none; align-items:center; justify-content:center; z-index:100; padding:18px; }
.modal-back.open { display:flex; }
.modal { background:var(--surface); border-radius:var(--r-xl); max-width:440px; width:100%; padding:28px; position:relative; max-height:92vh; overflow:auto; box-shadow:var(--shadow-lg); }
.modal h3 { color:var(--fg); font-size:1.15rem; font-weight:800; margin-bottom:4px; }
.modal .modal-sub { color:var(--fg-muted); font-size:.88rem; margin-bottom:16px; }
.modal-close { position:absolute; top:14px; right:16px; background:none; border:none; font-size:1.5rem; color:var(--fg-muted); cursor:pointer; line-height:1; }
.modal label { display:block; font-size:.83rem; font-weight:600; color:var(--fg); margin:13px 0 5px; }
/* kafle dodatków w modalu są <label> — muszą zostać flexem, inaczej cena spada pod opis */
.modal .pa-opt { display:flex; margin:0 0 8px; font-weight:400; }
.modal .pa-opt:last-of-type { margin-bottom:0; }
.modal input[type=text], .modal input[type=email] { width:100%; padding:10px 14px; border:1px solid var(--border-strong); border-radius:var(--r); font-size:.95rem; font-family:inherit; color:var(--fg); background:var(--surface); }
.modal input:focus { outline:none; border-color:var(--accent); box-shadow:0 0 0 3px rgba(249,115,22,.15); }
.modal .consent { display:flex; gap:9px; align-items:flex-start; margin-top:15px; font-size:.8rem; color:var(--fg-muted); }
.modal .consent input { margin-top:3px; accent-color:var(--accent); }
.modal .btn-primary { width:100%; justify-content:center; margin-top:18px; }
.modal .err { display:none; background:#FEF2F2; color:var(--red); border:1px solid #FECACA; border-radius:var(--r); padding:10px 14px; font-size:.86rem; margin-top:13px; }
.modal .hp { position:absolute; left:-5000px; opacity:0; }

/* dziękujemy */
.thanks-wrap { max-width:680px; margin:0 auto; }
.thanks-card { background:var(--surface); border:1px solid var(--border); border-radius:var(--r-xl); padding:34px; margin-top:24px; box-shadow:var(--shadow); }
.thanks-ok { width:60px; height:60px; border-radius:50%; background:var(--green-soft); color:var(--green); font-size:1.8rem; display:flex; align-items:center; justify-content:center; margin-bottom:16px; }

/* karta budżetu grantu (hero Ad Grants) */
.grant-card { background:linear-gradient(155deg,#0F172A,#1E293B); color:#fff; border-radius:var(--r-xl); padding:26px; box-shadow:var(--shadow-lg); }
.grant-card .gc-top { display:flex; align-items:center; justify-content:space-between; gap:12px; font-size:.82rem; color:#B6C2D2; }
.grant-card .gc-badge { display:inline-flex; align-items:center; gap:6px; background:rgba(34,197,94,.16); color:#4ADE80; font-weight:700; font-size:.75rem; padding:4px 11px; border-radius:999px; }
.grant-card .gc-amt { font-size:2.9rem; font-weight:800; letter-spacing:-.03em; line-height:1.05; margin:14px 0 2px; }
.grant-card .gc-sub { font-size:.9rem; color:#CBD5E1; }
.grant-card .gc-bar { height:9px; border-radius:999px; background:rgba(255,255,255,.14); margin:18px 0 8px; overflow:hidden; }
.grant-card .gc-bar i { display:block; height:100%; width:64%; border-radius:999px; background:linear-gradient(90deg,#FF6F00,#FF9A47); }
.grant-card .gc-legend { display:flex; justify-content:space-between; font-size:.78rem; color:#8FA3B8; }
.grant-card .gc-rows { margin-top:20px; border-top:1px solid rgba(255,255,255,.12); padding-top:14px; }
.grant-card .gc-row { display:flex; justify-content:space-between; align-items:center; gap:10px; padding:7px 0; font-size:.86rem; color:#CBD5E1; }
.grant-card .gc-row b { color:#fff; }
.grant-card .gc-row .ok { color:#4ADE80; font-weight:700; }

/* ── MAKIETA WYNIKÓW GOOGLE (Ad Grants) — wygląd 1:1 z wyszukiwarką, więc celowo
   własne kolory/typografia Google zamiast tokenów landingu ── */
.g-wrap { max-width:760px; margin:34px auto 0; background:#f1f3f4; border-radius:var(--r-xl); overflow:hidden; box-shadow:0 14px 44px rgba(15,23,42,.16), 0 3px 10px rgba(15,23,42,.06); }
.g-bar { background:#dee1e6; padding:9px 14px; display:flex; align-items:center; gap:8px; }
.g-bar i { width:11px; height:11px; border-radius:50%; display:block; }
.g-url { flex:1; background:#fff; border-radius:20px; padding:5px 14px; font-size:.76rem; color:#5f6368; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; font-family:Arial,Helvetica,sans-serif; }
.g-inner { background:#fff; }
.g-search { padding:15px 20px 8px; display:flex; align-items:center; gap:14px; }
.g-input { flex:1; border:1px solid #dfe1e5; border-radius:24px; padding:9px 16px; font-size:.9rem; color:#202124; display:flex; align-items:center; justify-content:space-between; gap:8px; font-family:Arial,Helvetica,sans-serif; box-shadow:0 1px 4px rgba(32,33,36,.08); }
.g-tabs { padding:6px 20px 0; display:flex; gap:4px; border-bottom:1px solid #ebedef; }
.g-tab { padding:8px 12px; font-size:.79rem; color:#5f6368; border-bottom:3px solid transparent; margin-bottom:-1px; font-family:Arial,Helvetica,sans-serif; }
.g-tab.on { color:#1a73e8; border-bottom-color:#1a73e8; font-weight:600; }
.g-res { padding:18px 18px 20px; font-family:Arial,Helvetica,sans-serif; background:#f8fafc; }
/* każda reklama = osobna biała karta z niebieskim akcentem (czytelniejsze niż płaska lista) */
.g-ad { background:#fff; border:1px solid #e8edf3; border-radius:12px; box-shadow:0 1px 3px rgba(15,23,42,.06); padding:14px 16px 14px 0; margin-bottom:12px; }
.g-ad > div, .g-ad > span { margin-left:16px; }
.g-ad { border-left:4px solid #4285f4; }
.g-tag { display:inline-block; font-size:.7rem; font-weight:700; color:#856404; background:#fff8e1; border:1px solid #ffe082; border-radius:4px; padding:1px 7px; margin-bottom:6px; }
.g-line { display:flex; align-items:center; gap:8px; margin-bottom:3px; }
.g-fav { width:20px; height:20px; border-radius:50%; display:flex; align-items:center; justify-content:center; color:#fff; font-size:.62rem; font-weight:800; flex-shrink:0; }
.g-dom { font-size:.8rem; color:#202124; line-height:1.25; }
.g-dom span { display:block; font-size:.73rem; color:#1e7e34; }
.g-t { font-size:1.02rem; color:#1a0dab; line-height:1.35; margin:4px 0 4px; cursor:pointer; font-weight:500; }
.g-t:hover { text-decoration:underline; }
.g-d { font-size:.845rem; color:#4d5156; line-height:1.55; }
.g-sl { display:flex; flex-wrap:wrap; margin-top:8px; }
.g-sl a { font-size:.8rem; color:#1a0dab; text-decoration:none; padding:2px 0; }
.g-sl a:hover { text-decoration:underline; }
.g-sl a + a::before { content:'·'; color:#9aa0a6; margin:0 7px; }
.g-split { display:flex; align-items:center; gap:10px; margin:16px 0 12px; font-size:.72rem; color:#9aa0a6; text-transform:uppercase; letter-spacing:.07em; font-family:'Inter',sans-serif; font-weight:700; }
.g-split::before, .g-split::after { content:""; flex:1; height:1px; background:#e3e8ef; }
.g-org { margin-bottom:14px; opacity:.55; padding:0 4px; }
.g-org .g-oline { display:flex; align-items:center; gap:7px; margin-bottom:3px; }
.g-org .g-otile { width:18px; height:18px; border-radius:4px; background:#eceff3; display:flex; align-items:center; justify-content:center; font-size:.62rem; flex-shrink:0; }
.g-note { display:flex; align-items:center; justify-content:center; gap:9px; background:var(--green-soft); color:var(--green); font-family:'Inter',sans-serif; font-size:.86rem; font-weight:700; padding:11px 16px; text-align:center; }
.g-queries { display:flex; flex-wrap:wrap; gap:8px; justify-content:center; margin-top:26px; }
.g-q { font-family:'Inter',sans-serif; font-size:.85rem; font-weight:600; padding:7px 15px; border-radius:999px; border:1px solid var(--border-strong); background:var(--surface); color:var(--fg-secondary); cursor:pointer; transition:.15s; }
.g-q:hover { border-color:var(--accent); color:var(--accent-fg); }
.g-q.on { background:var(--fg); border-color:var(--fg); color:#fff; }

/* ── PLANER SŁÓW KLUCZOWYCH (Ad Grants) ── */
.kw-intro { display:flex; gap:12px; align-items:flex-start; background:var(--lp-soft); border:1px solid color-mix(in srgb, var(--lp) 22%, transparent); border-radius:var(--r-lg); padding:16px 20px; margin-top:26px; font-size:.93rem; color:var(--fg-secondary); line-height:1.6; }
.kw-intro b { color:var(--fg); }
.kw-intro .ico { font-size:1.2rem; line-height:1.2; }
.kw-wrap { display:grid; grid-template-columns:minmax(0,.95fr) minmax(0,1.05fr); gap:22px; margin-top:32px; align-items:start; }
/* minmax(0,…) + min-width:0 są konieczne: bez nich kolumna nie kurczy się poniżej
   szerokości treści (poziomy pas presetów) i cały panel wychodził poza ekran telefonu */
@media (max-width:880px){ .kw-wrap { grid-template-columns:minmax(0,1fr); } }
.kw-panel, .kw-res { min-width:0; }
.kw-panel { background:var(--surface); border:1px solid var(--border); border-radius:var(--r-xl); padding:20px; box-shadow:var(--shadow); }
.kw-presets { display:flex; flex-wrap:wrap; gap:7px; margin-bottom:14px; }
.kw-preset { font-family:inherit; font-size:.82rem; font-weight:600; padding:6px 13px; border-radius:999px; border:1px solid var(--border-strong); background:var(--surface); color:var(--fg-secondary); cursor:pointer; transition:.15s; }
.kw-preset:hover { border-color:var(--accent); color:var(--accent-fg); }
.kw-preset.active { background:var(--fg); border-color:var(--fg); color:#fff; }
.kw-label { display:block; font-size:.82rem; font-weight:600; color:var(--fg); margin-bottom:6px; }
.kw-ta { width:100%; min-height:210px; padding:12px 14px; border:1px solid var(--border-strong); border-radius:var(--r); font-family:inherit; font-size:.9rem; line-height:1.7; color:var(--fg); background:var(--surface); resize:vertical; }
.kw-ta:focus { outline:none; border-color:var(--accent); box-shadow:0 0 0 3px rgba(249,115,22,.15); }
.kw-bar { display:flex; align-items:center; justify-content:space-between; gap:10px; margin-top:12px; flex-wrap:wrap; }
.kw-cnt { font-size:.8rem; color:var(--fg-muted); }
.kw-err { display:none; background:#FEF2F2; color:var(--red); border:1px solid #FECACA; border-radius:var(--r); padding:9px 13px; font-size:.85rem; margin-top:10px; }
.kw-res { background:var(--surface); border:1px solid var(--border); border-radius:var(--r-xl); padding:20px; box-shadow:var(--shadow); }
.kw-total { background:linear-gradient(150deg,#0F172A,#1E293B); color:#fff; border-radius:var(--r-lg); padding:18px 20px; text-align:center; }
.kw-total .cap { display:block; font-size:.8rem; color:#B6C2D2; margin-bottom:2px; }
.kw-total .big { font-size:2.3rem; font-weight:800; letter-spacing:-.02em; line-height:1.1; display:block; }
.kw-total .unit { font-size:.85rem; color:#CBD5E1; }
.kw-mine { display:flex; align-items:baseline; gap:8px; flex-wrap:wrap; background:var(--lp-soft); border:1px solid color-mix(in srgb, var(--lp) 25%, transparent); border-radius:var(--r); padding:11px 14px; margin-top:12px; }
.kw-mine b { font-size:1.3rem; font-weight:800; color:var(--lp); }
.kw-mine span { font-size:.82rem; color:var(--fg-secondary); }
.kw-head { font-size:.75rem; font-weight:700; color:var(--fg-muted); letter-spacing:.07em; text-transform:uppercase; margin:16px 0 8px; }
.kw-list { max-height:330px; overflow-y:auto; }
.kw-row { display:flex; justify-content:space-between; align-items:center; gap:12px; padding:8px 2px; border-bottom:1px solid var(--border-soft); font-size:.9rem; }
.kw-row:last-child { border-bottom:none; }
.kw-row .kw { color:var(--fg); min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.kw-row .vol { color:var(--fg-secondary); font-weight:600; font-variant-numeric:tabular-nums; white-space:nowrap; }
.kw-note { font-size:.78rem; color:var(--fg-muted); margin-top:12px; text-align:center; }
.kw-skel { height:14px; border-radius:6px; background:var(--border-soft); margin-bottom:10px; animation:kwp 1.2s ease-in-out infinite; }
@keyframes kwp { 0%,100%{opacity:1} 50%{opacity:.45} }
.kw-cta { display:flex; align-items:center; justify-content:center; gap:8px; margin-top:16px;
  background:var(--accent); color:#fff !important; text-decoration:none; font-weight:600; font-size:.95rem;
  padding:12px 18px; border-radius:var(--r); box-shadow:0 4px 14px rgba(249,115,22,.28); }
.kw-cta:hover { background:var(--accent-hover); }
.kw-toggle { display:none; }
/* Telefon: presety w poziomym pasie zamiast trzech rzędów, a pole na frazy schowane
   pod przyciskiem — kliknięcie presetu i tak od razu odpytuje Google, więc na start
   wystarczą kafelki i wynik. Skraca sekcję o kilkaset pikseli. */
@media (max-width:640px){
  .kw-intro { display:none; }
  .kw-toggle { display:block; width:100%; margin-top:2px; padding:11px 14px; font-family:inherit;
    font-size:.9rem; font-weight:600; color:var(--fg-secondary); background:var(--bg);
    border:1px dashed var(--border-strong); border-radius:var(--r); cursor:pointer; }
  .kw-toggle:hover { border-color:var(--accent); color:var(--accent-fg); }
  .kw-panel:not(.open) .kw-label,
  .kw-panel:not(.open) .kw-ta,
  .kw-panel:not(.open) .kw-bar { display:none; }
  .kw-panel.open .kw-toggle { margin-bottom:12px; }
  .kw-presets { flex-wrap:nowrap; overflow-x:auto; margin:0 -20px 14px; padding:0 20px 4px;
    scrollbar-width:none; -webkit-overflow-scrolling:touch; }
  .kw-presets::-webkit-scrollbar { display:none; }
  .kw-preset { flex:0 0 auto; }
  /* height, nie min-height — pole ma rows="16", więc wysokość wewnętrzna wygrywa z min-height */
  .kw-ta { height:150px; min-height:0; font-size:16px; line-height:1.55; }  /* 16px = iOS nie zoomuje pola */
  .kw-bar { flex-direction:column-reverse; align-items:stretch; gap:8px; }
  .kw-bar .btn-primary { width:100%; justify-content:center; }
  .kw-cnt { text-align:center; }
  .kw-total .big { font-size:2rem; }
  .kw-list { max-height:360px; }
  .kw-panel, .kw-res { padding:16px; }
}

/* ── formularz darmowego audytu (PING Free) ── */
.audit-form { margin-top:30px; background:var(--surface); border:1px solid var(--border); border-radius:var(--r-xl);
  padding:26px 28px; box-shadow:var(--shadow); }
.audit-form .hp { position:absolute; left:-9999px; width:1px; height:1px; opacity:0; }
.aud-grid { display:grid; grid-template-columns:1fr 1fr; gap:16px; }
.audit-form label { display:block; font-size:.83rem; font-weight:600; color:var(--fg); }
.audit-form label span { font-weight:400; color:var(--fg-muted); }
.audit-form input[type=text], .audit-form input[type=email],
.audit-form select, .audit-form textarea { width:100%; margin-top:5px; padding:11px 14px;
  border:1px solid var(--border-strong); border-radius:var(--r); font-size:.95rem; font-family:inherit;
  color:var(--fg); background:var(--surface); }
.audit-form input:focus, .audit-form select:focus, .audit-form textarea:focus {
  outline:none; border-color:var(--accent); box-shadow:0 0 0 3px rgba(249,115,22,.15); }
.audit-form .btn-primary { width:100%; justify-content:center; margin-top:20px; }
.aud-err { display:none; background:#FEF2F2; color:var(--red); border:1px solid #FECACA; border-radius:var(--r);
  padding:10px 14px; font-size:.86rem; margin-top:14px; }
.aud-note { margin-top:12px; font-size:.82rem; color:var(--fg-muted); text-align:center; }
.audit-ok { display:none; margin-top:30px; background:var(--green-soft);
  border:1px solid color-mix(in srgb, var(--green) 30%, transparent); border-radius:var(--r-xl);
  padding:26px 28px; text-align:center; }
.audit-ok b { display:block; font-size:1.15rem; color:var(--green); margin-bottom:6px; }
.audit-ok span { font-size:.93rem; color:var(--fg-secondary); line-height:1.6; }
@media (max-width:640px){ .aud-grid { grid-template-columns:1fr; gap:14px; } .audit-form { padding:20px; } }

/* ── rozbicie ceny pakietu SMART ── */
.smart-math { max-width:780px; margin:20px auto 0; background:var(--surface); border:1px solid var(--border);
  border-radius:var(--r-xl); padding:13px 20px; box-shadow:var(--shadow); text-align:left; }
.smart-math > summary { list-style:none; cursor:pointer; display:flex; align-items:center; flex-wrap:wrap;
  gap:8px 16px; font-size:.95rem; color:var(--fg-secondary); }
.smart-math > summary::-webkit-details-marker { display:none; }
.sm-lead b { font-size:1.12rem; font-weight:800; color:var(--fg); font-variant-numeric:tabular-nums; letter-spacing:-.02em; white-space:nowrap; }
.sm-lead b.pk { color:var(--accent-fg); }
.sm-lead i { font-style:normal; color:var(--fg-muted); margin:0 8px; }
.sm-badge { background:var(--green-soft); border:1px solid color-mix(in srgb, var(--green) 26%, transparent);
  border-radius:999px; padding:4px 12px; font-size:.86rem; }
.sm-badge b { color:var(--green); font-weight:800; font-variant-numeric:tabular-nums; }
.sm-more { margin-left:auto; font-size:.83rem; font-weight:600; color:var(--accent-fg); white-space:nowrap; }
.sm-more::after { content:" ▾"; font-size:.75em; }
.smart-math[open] .sm-more::after { content:" ▴"; }
.sm-body { margin-top:10px; padding-top:4px; border-top:1px solid var(--border-soft); }
.sm-row { display:flex; align-items:baseline; justify-content:space-between; gap:14px; padding:6px 0;
  border-bottom:1px solid var(--border-soft); font-size:.9rem; color:var(--fg-secondary); }
.sm-row a { color:var(--fg-secondary); text-decoration:none; border-bottom:1px dotted var(--border-strong); }
.sm-row a:hover { color:var(--accent-fg); border-bottom-color:var(--accent); }
.sm-row b { font-variant-numeric:tabular-nums; color:var(--fg); font-weight:600; white-space:nowrap; text-align:right; }
.sm-row.sum { border-bottom:2px solid var(--border); font-weight:600; color:var(--fg); }
.sm-row.sum b { font-size:1.02rem; }
.sm-row.pkg { border-bottom:none; color:var(--navy); font-weight:700; padding:8px 0 2px; }
.sm-row.pkg b { font-size:1.18rem; font-weight:800; color:var(--accent-fg); letter-spacing:-.02em; }
.sm-row i { display:block; font-style:normal; font-size:.75rem; font-weight:500; color:var(--fg-muted); line-height:1.35; }
.sm-note { margin-top:9px; font-size:.75rem; color:var(--fg-muted); line-height:1.45; }
@media (max-width:640px){
  .smart-math > summary { gap:7px 10px; font-size:.88rem; }
  .sm-lead { width:100%; }
  .sm-lead i { margin:0 5px; }
  .sm-more { margin-left:0; }
}

/* ── Assistant: przed/po + dziennik zmian ── */
.asst-ba { display:grid; grid-template-columns:repeat(auto-fit,minmax(230px,1fr)); gap:16px; margin-top:32px; }
.ba-item { background:var(--surface); border:1px solid var(--border); border-radius:var(--r-lg); padding:18px 20px; box-shadow:var(--shadow-sm); }
.ba-cap { display:block; font-size:.76rem; font-weight:700; text-transform:uppercase; letter-spacing:.07em; color:var(--fg-muted); }
.ba-vals { display:flex; align-items:baseline; gap:10px; margin:8px 0 6px; }
.ba-vals b { font-size:1.5rem; font-weight:800; letter-spacing:-.02em; font-variant-numeric:tabular-nums; }
.ba-vals i { font-style:normal; color:var(--fg-muted); font-size:1.1rem; }
.was { color:var(--fg-muted); text-decoration:line-through; text-decoration-thickness:1.5px; }
.now { color:var(--green); }
.ba-note { font-size:.8rem; color:var(--fg-secondary); line-height:1.45; }

.asst-grid { display:grid; grid-template-columns:minmax(0,.92fr) minmax(0,1.08fr); gap:24px; margin-top:24px; align-items:start; }
.asst-copy h3 { font-size:1.1rem; font-weight:800; color:var(--navy); margin-bottom:8px; }
.asst-copy p { font-size:.95rem; color:var(--fg-secondary); line-height:1.6; }
.asst-list { list-style:none; margin:18px 0 0; }
.asst-list li { padding:10px 0 10px 26px; position:relative; border-bottom:1px solid var(--border-soft); }
.asst-list li:last-child { border-bottom:none; }
.asst-list li::before { content:"✓"; position:absolute; left:3px; top:11px; color:var(--green); font-weight:800; }
.asst-list b { display:block; font-size:.94rem; color:var(--fg); }
.asst-list span { font-size:.85rem; color:var(--fg-secondary); }
.asst-foot { margin-top:16px; font-size:.85rem; color:var(--fg-muted); }

.asst-feed { background:#0F172A; border-radius:var(--r-xl); overflow:hidden; box-shadow:var(--shadow-lg); }
.af-top { display:flex; align-items:center; gap:9px; padding:14px 18px; background:rgba(255,255,255,.05);
  border-bottom:1px solid rgba(255,255,255,.09); color:#CBD5E1; font-size:.84rem; font-weight:600; }
.af-dot { width:8px; height:8px; border-radius:50%; background:var(--green); box-shadow:0 0 0 4px rgba(22,163,74,.22); flex-shrink:0; animation:afPulse 2s ease-in-out infinite; }
@keyframes afPulse { 0%,100%{box-shadow:0 0 0 4px rgba(22,163,74,.22)} 50%{box-shadow:0 0 0 7px rgba(22,163,74,.05)} }
.af-rows { padding:6px 0; min-height:290px; }
.af-row { display:flex; gap:13px; padding:12px 18px; border-bottom:1px solid rgba(255,255,255,.06);
  opacity:0; transform:translateY(-8px); transition:opacity .4s ease, transform .4s ease; }
.af-row.in { opacity:1; transform:none; }
.af-row:last-child { border-bottom:none; }
.af-time { flex:0 0 78px; font-size:.72rem; color:#7C8CA5; padding-top:2px; }
.af-what > b { display:block; font-size:.88rem; color:#F1F5F9; font-weight:600; margin-bottom:2px; }
.af-what > span { font-size:.8rem; color:#94A3B8; line-height:1.5; }
.af-what .was { color:#7C8CA5; }
.af-what .now { color:#4ADE80; }
.af-row::before { content:""; position:relative; top:5px; flex:0 0 7px; height:7px; border-radius:50%; background:#64748B; }
.af-row.up::before  { background:#4ADE80; }
.af-row.off::before { background:#FB923C; }
.af-row.fix::before { background:#60A5FA; }
.af-note { padding:12px 18px; border-top:1px solid rgba(255,255,255,.09); font-size:.76rem; color:#7C8CA5; text-align:center; }
@media (max-width:900px){ .asst-grid { grid-template-columns:1fr; } .af-rows { min-height:0; } }
@media (prefers-reduced-motion:reduce){ .af-row { transition:none; opacity:1; transform:none; } .af-dot { animation:none; } }

/* ── ryzyka (czym grozi brak usługi) ── */
.risk-grid { display:grid; grid-template-columns:repeat(auto-fit,minmax(250px,1fr)); gap:16px; margin-top:32px; }
.risk-card { background:var(--surface); border:1px solid var(--border); border-left:4px solid var(--red);
  border-radius:var(--r-lg); padding:20px 22px; box-shadow:var(--shadow-sm); }
.risk-card .rk-ico { display:flex; align-items:center; justify-content:center; width:38px; height:38px;
  border-radius:10px; background:#FEF2F2; font-size:1.05rem; margin-bottom:12px; }
.risk-card b { display:block; font-size:1rem; color:var(--navy); margin-bottom:5px; }
.risk-card span { font-size:.88rem; color:var(--fg-secondary); line-height:1.55; }
.risk-card strong { color:var(--fg); }

/* ── PAKIET FUNDRAISERA ── */
.fr-grid { display:grid; grid-template-columns:repeat(auto-fit,minmax(210px,1fr)); gap:14px; margin-top:30px; }
.fr-item { display:flex; gap:12px; align-items:flex-start; background:var(--surface); border:1px solid var(--border); border-radius:var(--r-lg); padding:16px; box-shadow:var(--shadow-sm); }
.fr-item .ico { width:38px; height:38px; border-radius:10px; background:var(--lp-soft); color:var(--lp); display:flex; align-items:center; justify-content:center; font-size:1.1rem; flex-shrink:0; }
.fr-item b { display:block; font-size:.92rem; color:var(--fg); margin-bottom:2px; }
.fr-item span { font-size:.84rem; color:var(--fg-secondary); }
.fr-item .save { color:var(--green); font-weight:700; }

/* ── REALIZACJE (prawdziwe zrzuty stron) ── */
/* Dwie kolumny zamiast trzech — zrzuty stron potrzebują szerokości, żeby dało się
   cokolwiek na nich zobaczyć. Przy trzech kolumnach nagłówek klienta był nieczytelny. */
.showcase-grid { display:flex; flex-wrap:wrap; justify-content:center; gap:22px; margin-top:36px; }
.showcase-grid > .showcase-item { flex:1 1 430px; max-width:560px; }
.showcase-item { background:var(--surface); border:1px solid var(--border); border-radius:var(--r-xl); overflow:hidden; box-shadow:var(--shadow); transition:.15s; display:block; text-decoration:none; }
a.showcase-item:hover { transform:translateY(-3px); box-shadow:var(--shadow-lg); }
.showcase-top { display:flex; align-items:center; gap:10px; padding:9px 14px; background:var(--bg); border-bottom:1px solid var(--border); }
.showcase-top .mb-dots span { width:9px; height:9px; }
.showcase-top .mb-url { font-size:.74rem; }
/* Kadr 4:3 i zrzuty robione w 1440×1080 — dokładnie ta sama proporcja, więc `cover`
   nie ma czego przycinać i widać znacznie większy kawałek strony niż przy 16:10. */
.showcase-shot { display:block; width:100%; aspect-ratio:4/3; height:auto;
  object-fit:cover; object-position:top center; }
.showcase-cap { padding:13px 16px; }
.showcase-cap b { display:block; font-size:.92rem; color:var(--fg); }
.showcase-cap span { font-size:.82rem; color:var(--fg-muted); }
.showcase-tag { float:right; font-size:.7rem; font-weight:700; background:var(--lp-soft); color:var(--lp); padding:2px 9px; border-radius:999px; margin-top:2px; }

/* ── STOPKA v3 ── */
footer { background:var(--surface); border-top:1px solid var(--border); padding:0 24px 30px; position:relative; }
.footer-inner { max-width:1080px; margin:0 auto; padding-top:52px; }
.footer-grid { display:grid; grid-template-columns:1.35fr .9fr .9fr 1fr; gap:40px; align-items:start; }
@media (max-width:900px){ .footer-grid { grid-template-columns:1fr 1fr; gap:32px; } }
@media (max-width:560px){ .footer-grid { grid-template-columns:1fr; } }
@media (max-width:560px){ .footer-grid { grid-template-columns:1fr; } }
.footer-brand img { height:26px; margin-bottom:14px; }
.footer-brand p { font-size:.88rem; color:var(--fg-secondary); max-width:270px; line-height:1.55; }
.footer-social { display:flex; gap:8px; margin-top:16px; }
.footer-social a { width:34px; height:34px; border-radius:10px; border:1px solid var(--border); background:var(--surface); display:flex; align-items:center; justify-content:center; color:var(--fg-secondary); transition:.15s; }
.footer-social a:hover { color:#fff; background:var(--accent); border-color:var(--accent); transform:translateY(-1px); }
.footer-contact { margin-top:16px; display:flex; flex-direction:column; gap:7px; }
.footer-contact a { display:inline-flex; align-items:center; gap:9px; color:var(--fg); text-decoration:none; font-size:.9rem; font-weight:500; width:fit-content; }
.footer-contact a svg { color:var(--fg-muted); flex-shrink:0; transition:.15s; }
.footer-contact a:hover { color:var(--accent-fg); }
.footer-contact a:hover svg { color:var(--accent); }
.footer-col h4 { font-size:.75rem; font-weight:700; text-transform:uppercase; letter-spacing:.08em; color:var(--fg-muted); margin-bottom:14px; }
.footer-col a { position:relative; display:block; color:var(--fg-secondary); text-decoration:none; font-size:.9rem; padding:4.5px 0 4.5px 0; transition:color .15s, padding .15s; }
.footer-col a:hover { color:var(--accent-fg); }
.footer-col a[aria-current="page"] { color:var(--accent-fg); font-weight:600; }
/* karta Panelu klienta — mini-produkt, nie link */
.footer-panel { background:linear-gradient(150deg,#0F172A,#1E293B); border-radius:var(--r-xl); padding:24px; color:#E2E8F0; box-shadow:var(--shadow-lg); }
.footer-panel .fp-head { display:flex; align-items:center; gap:10px; font-weight:700; color:#fff; font-size:1rem; margin-bottom:8px; }
.footer-panel .fp-head .fp-ico { width:34px; height:34px; border-radius:10px; background:rgba(249,115,22,.18); color:var(--accent-l,#FB923C); display:flex; align-items:center; justify-content:center; flex-shrink:0; }
.footer-panel p { font-size:.85rem; color:#B6C2D2; line-height:1.5; }
.footer-panel .fp-btn { display:flex; align-items:center; justify-content:center; gap:8px; margin-top:16px; background:var(--accent); color:#fff; text-decoration:none; font-weight:600; font-size:.92rem; padding:11px 16px; border-radius:var(--r); transition:.15s; box-shadow:0 4px 14px rgba(249,115,22,.3); }
.footer-panel .fp-btn:hover { background:var(--accent-hover); transform:translateY(-1px); }
.footer-panel small { display:block; margin-top:10px; font-size:.76rem; color:#8FA3B8; text-align:center; }
/* Pasek prawny — układ jak na stronach klientów (test.webup.pl): linki z kreskami po
   lewej, dane spółki po prawej, wszystko wyśrodkowane na wąskim ekranie. */
.footer-bottom { display:flex; justify-content:space-between; align-items:center; gap:14px;
  flex-wrap:wrap; margin-top:44px; padding-top:22px; border-top:1px solid var(--border-soft);
  font-size:.83rem; color:var(--fg-muted); }
.fb-legal { display:flex; align-items:center; gap:12px; flex-wrap:wrap; }
.fb-legal a { color:var(--fg-secondary); text-decoration:none; font-weight:500; }
.fb-legal a:hover { color:var(--accent-fg); text-decoration:underline; }
.fb-sep { color:var(--border-strong); user-select:none; }
.fb-co { color:var(--fg-muted); }
@media (max-width:760px){
  .footer-bottom { flex-direction:column; text-align:center; gap:12px; }
  .fb-legal { justify-content:center; }
}
/* Ikona zgód SmartCookie jest fixed w lewym dolnym rogu okna (40px + 10px margines).
   Poniżej ~1180px stopka nie ma już bocznego marginesu i ikona zasłaniała linki prawne —
   dokładamy zapas na dole, żeby zawsze lądowała na pustym miejscu. */
@media (max-width:1180px){ footer { padding-bottom:86px; } }

/* ── pasek CTA przyklejony do dołu (telefon) ──
   padding-left robi miejsce ikonie zgód SmartCookie, która siedzi w tym samym rogu */
.sticky-cta { position:fixed; left:0; right:0; bottom:0; z-index:60; display:none; align-items:center; justify-content:space-between; gap:12px;
  padding:10px 14px 10px 62px; background:rgba(255,255,255,.97); backdrop-filter:blur(10px);
  border-top:1px solid var(--border); box-shadow:0 -4px 18px rgba(15,23,42,.10);
  transform:translateY(115%); transition:transform .22s ease; }
.sticky-cta.show { transform:translateY(0); }
.sticky-cta .sk-info { display:flex; flex-direction:column; line-height:1.25; min-width:0; }
.sticky-cta .sk-info b { font-size:1rem; color:var(--fg); font-weight:800; }
.sticky-cta .sk-info span { font-size:.74rem; color:var(--fg-muted); }
.sticky-cta .sk-go { flex-shrink:0; background:var(--accent); color:#fff; text-decoration:none; font-weight:700; font-size:.94rem;
  padding:11px 20px; border-radius:var(--r); box-shadow:0 4px 14px rgba(249,115,22,.3); }
@media (max-width:760px){ .sticky-cta { display:flex; } }

/* ── case studies ── */
.cs-grid { display:grid; grid-template-columns:repeat(auto-fit,minmax(290px,1fr)); gap:20px; margin-top:34px; align-items:stretch; }
.cs-card { background:var(--surface); border:1px solid var(--border); border-left:4px solid var(--lp); border-radius:var(--r-xl); padding:22px 24px; box-shadow:var(--shadow); display:flex; flex-direction:column; }
.cs-tag { font-size:.72rem; font-weight:700; text-transform:uppercase; letter-spacing:.07em; color:var(--fg-muted); }
.cs-org { font-size:1.1rem; font-weight:800; color:var(--navy); margin-top:5px; letter-spacing:-.01em; }
.cs-nums { display:grid; grid-template-columns:1fr 1fr; gap:14px; margin:18px 0 4px; }
.cs-nums b { display:block; font-size:1.55rem; font-weight:800; color:var(--lp); letter-spacing:-.02em; font-variant-numeric:tabular-nums; }
.cs-nums span { display:block; font-size:.75rem; color:var(--fg-muted); line-height:1.35; margin-top:2px; }
.cs-what { margin-top:12px; font-size:.87rem; color:var(--fg-secondary); line-height:1.55; flex:1; }
.cs-foot { margin-top:14px; padding-top:11px; border-top:1px solid var(--border-soft); font-size:.76rem; color:var(--fg-muted); }

/* cytat klienta */
.cs-quote { margin:26px 0 0; background:var(--surface); border:1px solid var(--border); border-radius:var(--r-xl); padding:28px 32px; box-shadow:var(--shadow); position:relative; }
.cs-quote::before { content:"”"; position:absolute; top:2px; left:22px; font-size:4.2rem; line-height:1; color:var(--accent); opacity:.22; font-family:Georgia,serif; }
.cs-quote blockquote { font-size:1.02rem; line-height:1.65; color:var(--fg); margin:0 0 16px; position:relative; }
.cs-quote figcaption { display:flex; flex-direction:column; gap:1px; border-top:1px solid var(--border-soft); padding-top:14px; }
.cs-quote figcaption b { font-size:.93rem; color:var(--fg); }
.cs-quote figcaption span { font-size:.82rem; color:var(--fg-muted); }

/* Taśma logotypów klientów — dwa pasy jadące w przeciwne strony, żeby w kadrze cały
   czas pojawiały się kolejne organizacje. Loga mają własne białe tło, więc kafle są białe. */
.logo-wall { margin-top:34px; }
.lw-head { text-align:center; font-size:.75rem; font-weight:700; text-transform:uppercase; letter-spacing:.09em; color:var(--fg-muted); margin-bottom:18px; }
.lw-marquee { overflow:hidden; padding:5px 0;
  -webkit-mask-image:linear-gradient(90deg,transparent,#000 7%,#000 93%,transparent);
          mask-image:linear-gradient(90deg,transparent,#000 7%,#000 93%,transparent); }
.lw-track { display:flex; gap:12px; width:max-content; animation:lwScroll 78s linear infinite; }
.lw-track.rev { animation-direction:reverse; animation-duration:92s; }
.lw-marquee:hover .lw-track { animation-play-state:paused; }
@keyframes lwScroll { from { transform:translateX(0); } to { transform:translateX(-50%); } }
.lw-tile { flex:0 0 auto; display:flex; align-items:center; justify-content:center;
  width:158px; height:68px; padding:8px 12px; background:#fff; border:1px solid var(--border);
  border-radius:var(--r-lg); box-shadow:var(--shadow-sm); transition:border-color .15s, box-shadow .15s, transform .15s; }
.lw-tile:hover { border-color:var(--lp); box-shadow:var(--shadow); transform:translateY(-2px); }
.lw-tile img { max-width:100%; max-height:100%; width:auto; height:auto; object-fit:contain; display:block; }
.lw-note { text-align:center; margin-top:20px; font-size:.82rem; color:var(--fg-muted); }
.lw-note a { color:var(--accent-fg); }
@media (prefers-reduced-motion:reduce){ .lw-track { animation:none; } .lw-marquee { overflow-x:auto; } }

/* kursy Akademii */
.course-grid { display:grid; grid-template-columns:repeat(auto-fit,minmax(260px,1fr)); gap:16px; margin-top:32px; }
.course { background:var(--surface); border:1px solid var(--border); border-radius:var(--r-lg); padding:18px 20px; box-shadow:var(--shadow-sm); }
.course .cg-ico { display:flex; align-items:center; justify-content:center; width:36px; height:36px; border-radius:10px; background:var(--lp-soft); font-size:1.05rem; margin-bottom:11px; }
.course b { display:block; font-size:.95rem; color:var(--navy); margin-bottom:3px; }
.course span { font-size:.84rem; color:var(--fg-secondary); line-height:1.5; }

/* podtytuł w bloku dodatków */
.price-addons .pa-sub { font-size:.8rem; color:var(--fg-secondary); line-height:1.45; margin:-2px 0 9px; }

/* ── pasek zaufania (pod hero) — granatowy pas jak sekcje na jowes.webup.pl ── */
.trust-bar { background:linear-gradient(120deg,#1B3453 0%,var(--navy) 45%,#2C4A6E 100%); position:relative; }
.trust-bar::after { content:""; position:absolute; inset:0; pointer-events:none;
  background:radial-gradient(34rem 14rem at 88% 0%, rgba(249,115,22,.16), transparent 65%); }
.trust-inner { position:relative; z-index:1; max-width:1080px; margin:0 auto; padding:30px 24px;
  display:grid; grid-template-columns:repeat(4,1fr); gap:24px; }
.tb-item { position:relative; display:flex; flex-direction:column; gap:4px; text-align:center; }
.tb-item + .tb-item::before { content:""; position:absolute; left:-12px; top:4px; bottom:4px; width:1px;
  background:linear-gradient(#fff0, rgba(255,255,255,.22), #fff0); }
.tb-item b { font-size:1.45rem; font-weight:800; color:#fff; letter-spacing:-.02em; line-height:1.1; }
.tb-item span { font-size:.79rem; color:#A9BCD4; line-height:1.4; }
@media (max-width:760px){
  .trust-inner { grid-template-columns:1fr 1fr; gap:20px 14px; padding:24px 18px; }
  .tb-item:nth-child(odd) + .tb-item::before { left:-7px; }
  .tb-item:nth-child(3)::before { display:none; }
  .tb-item b { font-size:1.2rem; }
}

/* ── przełącznik miesięcznie / rocznie ── */
/* .bill-switch = wariant nad cennikiem: steruje obiema kartami i rozbiciem ceny naraz. */
.bill-switch { display:flex; align-items:center; justify-content:center; flex-wrap:wrap; gap:6px 14px; margin-top:16px; }
.bill-switch .bill-toggle { margin-top:0; }
.bill-switch .bill-note { font-size:.83rem; color:var(--fg-muted); }
.bill-switch + .pricing { margin-top:16px; }
.bill-toggle { display:inline-flex; gap:2px; margin-top:12px; padding:3px; background:var(--bg);
  border:1px solid var(--border); border-radius:999px; }
.bill-toggle .bt-opt { font-family:inherit; font-size:.82rem; font-weight:600; color:var(--fg-secondary);
  background:none; border:none; padding:6px 15px; border-radius:999px; cursor:pointer; transition:.15s; }
.bill-toggle .bt-opt:hover { color:var(--accent-fg); }
.bill-toggle .bt-opt.on { background:var(--surface); color:var(--fg); box-shadow:var(--shadow-sm); }

/* ── kalkulator oszczędności ── */
.save-calc { margin-top:22px; background:var(--surface); border:1px solid var(--border); border-radius:var(--r-lg); padding:18px 20px; box-shadow:var(--shadow-sm); }
.save-calc .sv-q { font-weight:700; color:var(--fg); font-size:.95rem; margin-bottom:14px; }

.save-calc .sv-now { display:flex; align-items:baseline; justify-content:space-between; gap:10px; margin-top:6px; font-size:.82rem; color:var(--fg-muted); }
.save-calc .sv-now b { font-size:1rem; color:var(--fg); font-variant-numeric:tabular-nums; }
.save-calc .sv-res { margin-top:14px; padding-top:13px; border-top:1px solid var(--border-soft); display:flex; flex-direction:column; gap:3px; }
.save-calc .sv-win { font-size:1.05rem; font-weight:700; color:var(--green); }
.save-calc .sv-win b { font-size:1.2rem; }
.save-calc .sv-sub { font-size:.85rem; color:var(--fg-secondary); }
.save-calc .sv-neutral { font-size:.9rem; color:var(--fg-secondary); }
.save-calc .sv-neutral b { color:var(--fg); }
.save-calc .sv-note { margin-top:11px; font-size:.78rem; color:var(--fg-muted); line-height:1.5; }
.save-calc .sv-second { margin-top:18px; padding-top:16px; border-top:1px solid var(--border-soft); }

/* ── social.webup.pl: profile, które prowadzimy (żywe liczby z Graph API) ── */
.sp-sum { display:grid; grid-template-columns:repeat(auto-fit,minmax(160px,1fr)); gap:14px; margin-top:26px;
  background:var(--surface); border:1px solid var(--border); border-radius:var(--r-xl); padding:18px 22px; box-shadow:var(--shadow-sm); }
.sp-stat { text-align:center; }
.sp-stat b { display:block; font-size:1.7rem; font-weight:800; color:var(--navy); letter-spacing:-.03em; font-variant-numeric:tabular-nums; }
.sp-stat span { font-size:.82rem; color:var(--fg-muted); }
.sp-grid { display:grid; grid-template-columns:repeat(auto-fit,minmax(min(100%,280px),1fr)); gap:16px; margin-top:16px; }
.sp-card { display:block; background:var(--surface); border:1px solid var(--border); border-radius:var(--r-xl);
  padding:16px 18px; box-shadow:var(--shadow-sm); text-decoration:none; color:inherit; transition:.15s; }
.sp-card:hover { border-color:var(--border-strong); box-shadow:var(--shadow); transform:translateY(-2px); }
.sp-head { display:flex; align-items:center; gap:11px; padding-bottom:11px; margin-bottom:9px; border-bottom:1px solid var(--border-soft); }
.sp-head img { border-radius:50%; flex-shrink:0; }
.sp-head b { display:block; font-size:.98rem; font-weight:700; color:var(--navy); line-height:1.25; }
.sp-head span { font-size:.8rem; color:var(--fg-muted); }
.sp-row { display:flex; align-items:baseline; gap:8px; padding:3px 0; font-size:.9rem; }
.sp-row b { font-weight:700; color:var(--fg); font-variant-numeric:tabular-nums; }
.sp-row i { font-style:normal; color:var(--fg-muted); font-size:.83rem; }
.sp-ic { display:inline-flex; align-items:center; justify-content:center; width:20px; height:20px; border-radius:5px;
  font-size:.68rem; font-weight:800; color:#fff; flex-shrink:0; }
.sp-ic.fb { background:#1877F2; }
.sp-ic.ig { background:linear-gradient(45deg,#F9CE34,#EE2A7B,#6228D7); font-size:.58rem; }
.sp-foot { margin-top:9px; padding-top:9px; border-top:1px solid var(--border-soft); font-size:.83rem; color:var(--fg-secondary); }
.sp-foot b { color:var(--fg); font-weight:700; }
.sp-when { display:block; margin-top:2px; font-size:.78rem; color:var(--green); font-weight:600; }
.sp-note { margin-top:14px; font-size:.78rem; color:var(--fg-muted); }

/* ── social.webup.pl: makieta planu publikacji (ekran powitalny) ── */
.mock-cal { background:var(--surface); border:1px solid var(--border); border-radius:var(--r-xl); padding:16px 18px; box-shadow:var(--shadow); }
.mc-head { display:flex; align-items:center; justify-content:space-between; flex-wrap:wrap; gap:6px; padding-bottom:11px; border-bottom:1px solid var(--border-soft); }
.mc-head b { font-size:.95rem; color:var(--navy); }
.mc-legend { font-size:.72rem; color:var(--fg-muted); display:flex; align-items:center; gap:4px; }
.mc-legend i { width:8px; height:8px; border-radius:50%; display:inline-block; margin-left:6px; }
.mc-legend i.fb, .mc-d em.fb { background:#1877F2; }
.mc-legend i.ig, .mc-d em.ig { background:#EE2A7B; }
.mc-legend i.li, .mc-d em.li { background:#0A66C2; }
.mc-grid { display:grid; grid-template-columns:repeat(7,1fr); gap:4px; margin-top:11px; }
.mc-dow { text-align:center; font-size:.68rem; font-weight:700; text-transform:uppercase; letter-spacing:.05em; color:var(--fg-muted); padding-bottom:2px; }
.mc-d { aspect-ratio:1; border:1px solid var(--border-soft); border-radius:7px; padding:3px 0 0; display:flex;
  flex-direction:column; align-items:center; justify-content:flex-start; gap:3px; background:var(--surface); }
.mc-d.off { background:var(--bg); }
.mc-d i { font-style:normal; font-size:.68rem; color:var(--fg-muted); font-variant-numeric:tabular-nums; }
.mc-d em { width:6px; height:6px; border-radius:50%; display:block; }
.mc-foot { margin-top:12px; }
.mc-post { display:flex; align-items:center; gap:9px; background:var(--bg); border:1px solid var(--border-soft); border-radius:var(--r); padding:9px 11px; }
.mc-av { width:30px; height:30px; border-radius:50%; background:var(--navy); color:#fff; font-size:.7rem; font-weight:800;
  display:flex; align-items:center; justify-content:center; flex-shrink:0; }
.mc-post b { display:block; font-size:.83rem; color:var(--fg); }
.mc-post span { font-size:.76rem; color:var(--fg-muted); }
.mc-ok { margin-left:auto; font-size:.72rem; font-weight:700; color:var(--green); white-space:nowrap; }

/* pole na całą szerokość w formularzu zapytania (opis celu) */
.audit-form .aud-full { display:block; margin-top:14px; }
.audit-form .aud-full textarea { width:100%; font-family:inherit; font-size:.95rem; resize:vertical; }

/* ── social: galeria realnych postów z prowadzonych profili ── */
.pf-bar { margin-top:24px; background:var(--surface); border:1px solid var(--border); border-radius:999px;
  padding:11px 22px; font-size:.9rem; color:var(--fg-secondary); text-align:center; box-shadow:var(--shadow-sm); }
.pf-bar b { color:var(--navy); font-weight:800; font-variant-numeric:tabular-nums; }
.pf { margin-top:22px; }
.pf-head { display:flex; align-items:flex-end; justify-content:space-between; flex-wrap:wrap; gap:8px 16px; }
.pf-head h3 { font-size:1.15rem; font-weight:800; color:var(--navy); letter-spacing:-.01em; margin:2px 0 0; }
.pf-role { font-size:.73rem; font-weight:800; text-transform:uppercase; letter-spacing:.06em; color:var(--accent-fg); }
.pf-head .pf-role { display:block; }
.pf-head > div:first-child > span:last-child { display:block; font-size:.85rem; color:var(--fg-muted); }
.pf-link { font-size:.85rem; font-weight:600; color:var(--accent-fg); text-decoration:none; white-space:nowrap; }
.pf-link:hover { text-decoration:underline; }
.pf-meta { margin-top:6px; font-size:.83rem; color:var(--fg-muted); }
.pf-meta b { color:var(--fg-secondary); font-weight:700; font-variant-numeric:tabular-nums; }
/* Układ kolumnowy (masonry), a NIE siatka o równych wierszach: posty pokazujemy
   w proporcjach, w jakich wyszły — kwadrat, pion 4:5, rolka 9:16 — więc kafle mają
   różne wysokości i muszą się upakować, zamiast zostawiać dziury pod krótszymi. */
.pt-grid { columns:5; column-gap:13px; margin-top:12px; }
.pt-grid > .pt { break-inside:avoid; margin-bottom:13px; }
@media (max-width:1100px){ .pt-grid { columns:3; } .pt-grid > .pt:nth-child(n+4) { display:none; } }
@media (max-width:640px){ .pt-grid { columns:2; } .pt-grid > .pt:nth-child(n+3) { display:none; } }
.pt { display:block; background:var(--surface); border:1px solid var(--border);
  border-radius:var(--r-lg); overflow:hidden; text-decoration:none; color:inherit; position:relative;
  box-shadow:var(--shadow-sm); transition:.15s; }
.pt:hover { border-color:var(--border-strong); box-shadow:var(--shadow); transform:translateY(-2px); }
.pt-img { display:block; background:var(--bg); overflow:hidden; }   /* aspect-ratio ustawiane per post */
.pt-img img { width:100%; height:100%; object-fit:cover; display:block; }
.pt-dot { display:inline-block; width:7px; height:7px; border-radius:50%; margin-right:6px; vertical-align:baseline; }
.pt-dot.fb { background:#1877F2; }
.pt-dot.ig { background:#EE2A7B; }
.pt-dot.reel { background:var(--navy); }
.pt-body { display:flex; flex-direction:column; gap:5px; padding:10px 12px 11px; }
.pt-txt { font-size:.82rem; line-height:1.4; color:var(--fg-secondary); }
.pt-when { font-size:.74rem; color:var(--fg-muted); }

/* ── social: rozpisane realizacje ── */
.pj { margin-top:20px; background:var(--surface); border:1px solid var(--border); border-radius:var(--r-xl);
  padding:20px 24px; box-shadow:var(--shadow-sm); }
.pj-head { display:flex; align-items:flex-start; justify-content:space-between; flex-wrap:wrap; gap:10px 20px;
  padding-bottom:13px; border-bottom:1px solid var(--border-soft); }
.pj-role { display:block; font-size:.73rem; font-weight:800; text-transform:uppercase; letter-spacing:.06em; color:var(--accent-fg); }
.pj-head h3 { font-size:1.2rem; font-weight:800; color:var(--navy); letter-spacing:-.01em; margin:3px 0; }
.pj-when { font-size:.85rem; color:var(--fg-muted); }
.pj-chips { display:flex; flex-wrap:wrap; gap:6px; }
.pj-chips span { font-size:.74rem; font-weight:600; color:var(--fg-secondary); background:var(--bg);
  border:1px solid var(--border); border-radius:999px; padding:3px 10px; }
.pj-body { display:grid; grid-template-columns:1.35fr 1fr; gap:20px; margin-top:13px; align-items:start; }
.pj-list { list-style:none; display:flex; flex-direction:column; gap:6px; }
.pj-list li { position:relative; padding-left:22px; font-size:.91rem; line-height:1.5; color:var(--fg-secondary); }
.pj-list li::before { content:"✓"; position:absolute; left:0; color:var(--green); font-weight:800; }
.pj-list strong { color:var(--fg); }
.pj-quote { background:var(--bg); border-left:3px solid var(--accent); border-radius:0 var(--r) var(--r) 0;
  padding:13px 16px; font-size:.93rem; line-height:1.55; color:var(--fg); font-style:italic; }
.pj-quote cite { display:block; margin-top:8px; font-style:normal; font-size:.79rem; color:var(--fg-muted); }
.pj-result { background:var(--bg); border:1px solid var(--border-soft); border-radius:var(--r);
  padding:13px 16px; font-size:.88rem; line-height:1.55; color:var(--fg-secondary); }
.pj-result b { color:var(--navy); }
.pj-foot { margin-top:12px; padding-top:11px; border-top:1px solid var(--border-soft);
  font-size:.81rem; color:var(--fg-muted); }
.pj-clients { margin-top:22px; background:var(--surface); border:1px solid var(--border); border-radius:var(--r-xl);
  padding:16px 22px; font-size:.88rem; line-height:1.7; color:var(--fg-secondary); box-shadow:var(--shadow-sm); }
.pj-clients b { display:block; color:var(--navy); font-size:.76rem; font-weight:800; text-transform:uppercase;
  letter-spacing:.06em; margin-bottom:4px; }
@media (max-width:760px){ .pj-body { grid-template-columns:1fr; gap:14px; } .pj { padding:16px 18px; } }

/* ── social: kalkulator wyceny zapytania ── */
.qc { margin-top:26px; background:var(--surface); border:1px solid var(--border); border-radius:var(--r-xl);
  padding:22px 24px; box-shadow:var(--shadow); }
.qc-q { padding:13px 0; border-bottom:1px solid var(--border-soft); }
.qc-q:first-child { padding-top:0; }
.qc-q:last-of-type { border-bottom:none; }
.qc-q > b { display:block; font-size:.95rem; color:var(--navy); font-weight:700; margin-bottom:9px; }
.qc-q > i { display:block; margin-top:7px; font-style:normal; font-size:.79rem; color:var(--fg-muted); line-height:1.45; }
.qc-opts { display:flex; flex-wrap:wrap; gap:8px; }
.qc-chip { display:inline-flex; align-items:center; gap:8px; background:var(--bg); border:1px solid var(--border-strong);
  border-radius:999px; padding:7px 14px; font-size:.88rem; color:var(--fg-secondary); cursor:pointer; transition:.15s; }
.qc-chip.wide { border-radius:var(--r); width:100%; }
.qc-chip:hover { border-color:var(--accent); }
.qc-chip input { accent-color:var(--accent); cursor:pointer; margin:0; }
.qc-chip:has(input:checked) { background:var(--surface); border-color:var(--accent); color:var(--fg); font-weight:600; }
.qc-chip i { font-style:normal; color:var(--fg-muted); font-weight:400; }
.qc-slide { display:flex; align-items:center; gap:14px; }
.qc-slide input[type=range] { flex:1; }
.qc-slide output { min-width:110px; text-align:right; font-weight:700; color:var(--navy);
  font-variant-numeric:tabular-nums; font-size:.92rem; }
.qc-out { margin-top:16px; background:var(--bg); border:1px solid var(--border); border-radius:var(--r-lg); padding:16px 18px; }
.qc-pick { font-size:.74rem; font-weight:800; text-transform:uppercase; letter-spacing:.06em; color:var(--accent-fg); }
.qc-lines { margin-top:9px; }
.qc-line { display:flex; justify-content:space-between; align-items:baseline; gap:14px; padding:5px 0;
  font-size:.89rem; color:var(--fg-secondary); }
.qc-line b { color:var(--fg); font-weight:600; font-variant-numeric:tabular-nums; white-space:nowrap; }
.qc-total { display:flex; align-items:baseline; gap:10px; margin-top:9px; padding-top:11px; border-top:2px solid var(--border); }
.qc-total span { font-weight:700; color:var(--navy); }
.qc-total b { margin-left:auto; font-size:1.5rem; font-weight:800; color:var(--accent-fg);
  letter-spacing:-.02em; font-variant-numeric:tabular-nums; }
.qc-total i { font-style:normal; font-size:.78rem; color:var(--fg-muted); }
.qc-budget { margin-top:9px; font-size:.83rem; color:var(--fg-muted); }
.qc-budget b { color:var(--fg-secondary); }
.qc-hint { display:none; margin-top:10px; background:var(--green-soft);
  border:1px solid color-mix(in srgb, var(--green) 26%, transparent); border-radius:var(--r);
  padding:10px 13px; font-size:.86rem; line-height:1.5; color:var(--fg-secondary); }
.qc-hint b { color:var(--green); font-weight:800; }
.audit-form input[readonly] { background:var(--bg); color:var(--fg-secondary); cursor:default; }
@media (max-width:640px){
  .qc { padding:18px; }
  .qc-slide { flex-direction:column; align-items:stretch; gap:6px; }
  .qc-slide output { text-align:left; }
  .qc-total b { font-size:1.3rem; }
}

/* ── suwaki: ten sam wygląd co w panelu (.zad-range na zakładce Zadania) ──
   Domyślny suwak przeglądarki wygląda inaczej w każdej z nich; tu mamy jeden
   kształt na wszystkich landingach i zgodny z tym, co zespół widzi w panelu. */
.landing-range,
.save-calc input[type=range],
.qc-slide input[type=range] {
  -webkit-appearance:none; appearance:none; width:100%; height:6px; border-radius:9999px;
  background:var(--border); outline:none; cursor:pointer; accent-color:auto;
}
.landing-range:focus, .save-calc input[type=range]:focus, .qc-slide input[type=range]:focus { outline:none; }
.landing-range:focus-visible, .save-calc input[type=range]:focus-visible, .qc-slide input[type=range]:focus-visible {
  box-shadow:0 0 0 3px rgba(249,115,22,.25);
}
.landing-range::-webkit-slider-thumb,
.save-calc input[type=range]::-webkit-slider-thumb,
.qc-slide input[type=range]::-webkit-slider-thumb {
  -webkit-appearance:none; appearance:none; width:16px; height:16px; border-radius:50%;
  background:var(--accent); border:2px solid #fff; box-shadow:0 1px 3px rgba(0,0,0,.25); cursor:pointer;
}
.landing-range::-moz-range-thumb,
.save-calc input[type=range]::-moz-range-thumb,
.qc-slide input[type=range]::-moz-range-thumb {
  width:16px; height:16px; border-radius:50%; background:var(--accent);
  border:2px solid #fff; box-shadow:0 1px 3px rgba(0,0,0,.25); cursor:pointer;
}
.landing-range::-moz-range-track,
.save-calc input[type=range]::-moz-range-track,
.qc-slide input[type=range]::-moz-range-track { height:6px; border-radius:9999px; background:transparent; }

/* ── social: ekran powitalny z prawdziwymi postami (dwie kolumny w przeciwnych kierunkach) ── */
.hero-posts { display:grid; grid-template-columns:1fr 1fr; gap:12px; height:460px; overflow:hidden;
  mask-image:linear-gradient(to bottom, transparent, #000 12%, #000 88%, transparent);
  -webkit-mask-image:linear-gradient(to bottom, transparent, #000 12%, #000 88%, transparent); }
.hp-col { display:flex; flex-direction:column; gap:12px; will-change:transform; }
.hp-col.up   { animation:hpUp 42s linear infinite; }
.hp-col.down { animation:hpUp 38s linear infinite reverse; }
.hero-posts:hover .hp-col { animation-play-state:paused; }
@keyframes hpUp { from { transform:translateY(0); } to { transform:translateY(-50%); } }
.hp-i { display:block; border-radius:var(--r-lg); overflow:hidden; background:var(--surface);
  border:1px solid var(--border); box-shadow:var(--shadow-sm); flex:none; }
.hp-i img { width:100%; height:100%; object-fit:cover; display:block; }
@media (prefers-reduced-motion:reduce){ .hp-col { animation:none; } }
@media (max-width:900px){ .hero-posts { height:340px; } }

/* ── ptaszki na listach: białe na pomarańczowym kółku ──
   Zielony/ciemny znaczek na jasnym tle ginął. Jedna reguła na wszystkie listy
   (cennik, realizacje), żeby nie rozjeżdżały się między landingami. */
.price-feats li::before,
.pj-list li::before {
  content:"✓"; position:absolute; left:0; top:.28em;
  width:16px; height:16px; border-radius:50%;
  background:var(--accent); color:#fff;
  font-size:.62rem; font-weight:800; line-height:16px; text-align:center;
}
.price-feats li.dim::before { content:"+"; background:var(--navy); font-size:.72rem; }
.price-feats li, .pj-list li { padding-left:25px; }

/* ═══════════════════════════════════════════════════════════════════════════
   BLOG (webup.pl/blog) — lista, kategorie, wpis.
   Świadomie na tych samych zmiennych co landingi: blog ma być częścią serwisu,
   a nie osobną wyspą wizualną (po to wychodzimy z Wixa).
   ═══════════════════════════════════════════════════════════════════════════ */
.bl-hero { padding:46px 0 10px; text-align:center; }
.bl-hero h1 { font-size:clamp(1.9rem,4vw,2.7rem); line-height:1.15; letter-spacing:-.02em;
  color:var(--navy); margin:6px 0 12px; }
.bl-cats { display:flex; flex-wrap:wrap; gap:8px; justify-content:center; margin-top:22px; }
.bl-chip { display:inline-flex; align-items:center; gap:5px; padding:7px 14px; border-radius:999px;
  background:var(--surface); border:1px solid var(--border); font-size:.83rem; font-weight:600;
  color:var(--fg-secondary); text-decoration:none; transition:.15s; }
.bl-chip:hover { border-color:var(--border-strong); color:var(--fg); }
.bl-chip.on { background:var(--accent); border-color:var(--accent); color:#fff; }

.bl-grid { display:grid; gap:18px; grid-template-columns:repeat(auto-fill,minmax(300px,1fr)); }
.bl-featured { margin-bottom:22px; }
.bl-card { display:flex; flex-direction:column; gap:9px; padding:22px; text-decoration:none;
  background:var(--surface); border:1px solid var(--border); border-radius:var(--r-xl);
  box-shadow:var(--shadow-sm); transition:.16s; }
.bl-card:hover { border-color:var(--border-strong); box-shadow:var(--shadow-lg); transform:translateY(-2px); }
.bl-cat { font-size:.76rem; font-weight:700; color:var(--accent-fg); text-transform:none; }
.bl-card h3 { font-size:1.08rem; line-height:1.32; color:var(--navy); letter-spacing:-.01em; margin:0; }
.bl-card p { font-size:.9rem; line-height:1.6; color:var(--fg-secondary); margin:0; flex:1; }
.bl-meta { font-size:.78rem; color:var(--fg-muted); font-weight:500; }
.bl-big { background:linear-gradient(135deg,var(--surface) 0%,var(--accent-soft) 100%);
  border-color:var(--border-strong); padding:30px; }
.bl-big h3 { font-size:clamp(1.3rem,2.6vw,1.75rem); }
.bl-big p { font-size:1rem; }

/* ── WPIS ──
   Artykuł ma się CZYTAĆ, a nie wyglądać jak landing. Dlatego trzy rzeczy inaczej
   niż na stronach sprzedażowych:
   1) nagłówek do lewej — wyśrodkowany lid łamał się w wąski, poszarpany blok;
   2) biała powierzchnia pod tekstem — domyślne tło strony (#F1F5FB) na dłuższym
      tekście męczy i wygląda jak sekcja landingu, nie jak artykuł;
   3) ciemniejszy i nieco większy tekst, węższa miara (~68 znaków). */
.bl-article { background:var(--surface); }
.bl-head { padding:40px 0 4px; text-align:left; }
.bl-back { display:inline-block; font-size:.78rem; font-weight:700; color:var(--accent-fg);
  text-decoration:none; letter-spacing:.08em; text-transform:uppercase; margin-bottom:14px; }
.bl-back:hover { text-decoration:underline; }
.bl-head h1 { font-size:clamp(1.8rem,3.6vw,2.5rem); line-height:1.2; letter-spacing:-.022em;
  color:var(--navy); margin:0 0 16px; text-wrap:balance; }
.bl-lead { font-size:1.14rem; line-height:1.6; color:var(--fg-secondary); margin:0 0 24px; max-width:660px; }
.bl-byline { display:flex; align-items:center; justify-content:flex-start; gap:11px; flex-wrap:wrap;
  padding-bottom:24px; border-bottom:1px solid var(--border); }
.bl-av { width:38px; height:38px; border-radius:50%; background:var(--accent); color:#fff;
  display:grid; place-items:center; font-weight:800; font-size:1rem; flex:0 0 auto; overflow:hidden; }
/* Zdjęcie autora — te same pliki, co w sekcji zespołu na /o-nas. Pomarańczowe tło zostaje
   tylko pod inicjałem; przy zdjęciu przebijałoby przez zaokrąglenie. */
.bl-av.has-img { background:var(--border-soft); }
.bl-av img { width:100%; height:100%; object-fit:cover; display:block; }
.bl-av-s { width:24px; height:24px; font-size:.72rem; font-weight:700; }
.bl-who { display:flex; flex-direction:column; text-align:left; line-height:1.3; }
.bl-who b { font-size:.88rem; color:var(--fg); }
.bl-who span { font-size:.78rem; color:var(--fg-muted); }
.bl-when { font-size:.8rem; color:var(--fg-muted); border-left:1px solid var(--border); padding-left:11px; }

.bl-tldr { margin:28px 0 6px; padding:20px 24px; background:var(--accent-soft);
  border:1px solid #FED7AA; border-left:4px solid var(--accent); border-radius:var(--r-lg); }
.bl-tldr b { display:block; font-size:.8rem; font-weight:800; color:var(--accent-fg);
  text-transform:uppercase; letter-spacing:.05em; margin-bottom:9px; }
.bl-tldr ul { margin:0; padding-left:20px; }
.bl-tldr li { font-size:.93rem; line-height:1.6; color:var(--fg); margin-bottom:6px; }

.bl-body { font-size:1.06rem; line-height:1.78; color:#334155; max-width:68ch; padding-bottom:8px; }
.bl-body h2 { font-size:1.5rem; line-height:1.3; color:var(--navy); letter-spacing:-.015em;
  margin:38px 0 14px; }
.bl-body h3 { font-size:1.13rem; font-weight:700; line-height:1.4; color:var(--fg); margin:30px 0 9px; }
.bl-body p { margin:0 0 16px; }
.bl-body ul, .bl-body ol { margin:0 0 18px; padding-left:22px; }
.bl-body li { margin-bottom:8px; }
.bl-body strong { color:var(--fg); font-weight:700; }
.bl-body code { background:var(--bg); border:1px solid var(--border); border-radius:var(--r-sm);
  padding:1px 6px; font-size:.9em; font-family:ui-monospace,SFMono-Regular,Menlo,monospace; }
.bl-body a { color:var(--accent-fg); font-weight:600; }
.bl-body blockquote { margin:26px 0; padding:18px 24px; background:var(--surface);
  border:1px solid var(--border); border-left:4px solid var(--navy); border-radius:var(--r-lg);
  font-size:1.05rem; line-height:1.6; color:var(--navy); font-weight:500; }
.bl-body table { width:100%; border-collapse:collapse; margin:0 0 20px; font-size:.92rem;
  background:var(--surface); border:1px solid var(--border); border-radius:var(--r-lg); overflow:hidden; }
.bl-body th { background:var(--bg); text-align:left; font-weight:700; color:var(--fg); }
.bl-body th, .bl-body td { padding:10px 14px; border-bottom:1px solid var(--border-soft); }
.bl-body tr:last-child td { border-bottom:0; }

/* CTA w środku tekstu — wstawiane tam, gdzie akapit opisuje problem, nie na końcu wpisu */
.cta-inline { margin:28px 0; padding:22px 24px; background:var(--surface);
  border:1px solid var(--border-strong); border-radius:var(--r-xl); box-shadow:var(--shadow); }
.cta-inline b { display:block; font-size:1.02rem; color:var(--navy); margin-bottom:6px; }
.cta-inline span { display:block; font-size:.93rem; line-height:1.6; color:var(--fg-secondary); margin-bottom:14px; }
.cta-inline a { display:inline-block; background:var(--accent); color:#fff; font-weight:700;
  font-size:.9rem; padding:10px 20px; border-radius:var(--r); text-decoration:none; }
.cta-inline a:hover { background:var(--accent-hover); }

.bl-service { display:flex; align-items:center; gap:18px; flex-wrap:wrap; margin:34px 0 8px;
  padding:22px 24px; background:var(--navy); border-radius:var(--r-xl); color:#fff; }
.bls-ico { font-size:2rem; }
.bls-txt { flex:1; min-width:220px; display:flex; flex-direction:column; gap:3px; }
.bls-tag { font-size:.72rem; font-weight:700; text-transform:uppercase; letter-spacing:.06em; opacity:.65; }
.bls-txt b { font-size:1.12rem; }
.bls-txt span:last-child { font-size:.89rem; line-height:1.55; opacity:.82; }
.bls-cta { display:flex; flex-direction:column; align-items:flex-end; gap:8px; }
.bls-price { font-size:.86rem; font-weight:700; opacity:.85; }

.bl-share { display:flex; align-items:center; gap:12px; flex-wrap:wrap; margin-top:30px;
  padding-top:20px; border-top:1px solid var(--border); font-size:.87rem; color:var(--fg-muted); }
.bl-share a { color:var(--accent-fg); font-weight:600; text-decoration:none; }
.bl-share a:hover { text-decoration:underline; }

@media (max-width:640px){
  .bl-byline { justify-content:flex-start; }
  .bl-when { border-left:0; padding-left:0; width:100%; }
  .bl-service { flex-direction:column; align-items:flex-start; }
  .bls-cta { align-items:flex-start; width:100%; }
}

/* ── strona główna: grupy usług, ścieżka startowa, cennik zbiorczy ────────────
   Nazwa .ptab-*, a nie .pt-* — .pt/.pt-grid to kafle postów social mediów. */
.svc-group { margin-bottom:34px; }
.svc-group:last-child { margin-bottom:0; }
.svc-gt { display:inline-block; font-size:.88rem; font-weight:700; color:var(--navy);
  background:var(--surface); border:1px solid var(--border); border-radius:999px;
  padding:7px 16px; margin-bottom:16px; box-shadow:var(--shadow-sm); }

.start-grid { display:grid; gap:16px; grid-template-columns:repeat(auto-fit,minmax(280px,1fr)); }
.start-card { position:relative; display:flex; flex-direction:column; gap:8px; padding:26px 24px 22px;
  background:var(--surface); border:1px solid var(--border); border-radius:var(--r-xl);
  box-shadow:var(--shadow-sm); text-decoration:none; transition:.16s; }
.start-card:hover { border-color:var(--accent); box-shadow:var(--shadow-lg); transform:translateY(-2px); }
.start-no { position:absolute; top:-13px; left:24px; width:28px; height:28px; border-radius:50%;
  background:var(--navy); color:#fff; font-size:.85rem; font-weight:800; display:grid; place-items:center; }
.start-card b { font-size:1.08rem; color:var(--navy); margin-top:4px; }
.start-what { font-size:.92rem; line-height:1.6; color:var(--fg-secondary); flex:1; }
.start-go { font-size:.88rem; font-weight:700; color:var(--accent-fg); }

.ptab-wrap { overflow-x:auto; border:1px solid var(--border); border-radius:var(--r-xl);
  background:var(--surface); box-shadow:var(--shadow); }
.ptab { width:100%; min-width:640px; border-collapse:collapse; font-size:.93rem; }
.ptab th { background:var(--bg); text-align:left; padding:12px 18px; font-size:.78rem;
  font-weight:700; text-transform:uppercase; letter-spacing:.05em; color:var(--fg-muted);
  border-bottom:1px solid var(--border); }
.ptab td { padding:14px 18px; border-bottom:1px solid var(--border-soft); vertical-align:top;
  color:var(--fg-secondary); line-height:1.55; }
.ptab td:first-child { color:var(--fg); font-weight:600; white-space:nowrap; }
.ptab td:nth-child(2) { white-space:nowrap; color:var(--fg); font-weight:600; }
.ptab td:nth-child(2) span { display:block; font-size:.8rem; font-weight:500; color:var(--fg-muted); }
.ptab td:last-child { text-align:right; white-space:nowrap; }
.ptab td:last-child a { color:var(--accent-fg); font-weight:700; text-decoration:none; }
.ptab td:last-child a:hover { text-decoration:underline; }
.ptab tr:last-child td { border-bottom:0; }
.ptab-pkg td { background:var(--accent-soft); }
.ptab-sep td { background:var(--navy); color:#fff; font-size:.76rem; font-weight:700; text-align:left;
  text-transform:uppercase; letter-spacing:.06em; padding:8px 18px; }
.ptab-note { margin-top:14px; font-size:.88rem; color:var(--fg-muted); text-align:center; }
.ptab-note a { color:var(--accent-fg); font-weight:600; }

/* ── PING: kroki self-serve audytu (zastąpiły formularz zgłoszeniowy) ── */
.aud-steps { display:grid; gap:12px; grid-template-columns:repeat(auto-fit,minmax(210px,1fr)); margin-top:24px; }
.aud-step { position:relative; display:flex; flex-direction:column; gap:5px; padding:22px 20px 18px;
  background:var(--surface); border:1px solid var(--border); border-radius:var(--r-xl); box-shadow:var(--shadow-sm); }
.aud-n { position:absolute; top:-12px; left:20px; width:26px; height:26px; border-radius:50%;
  background:var(--lp); color:#fff; font-size:.8rem; font-weight:800; display:grid; place-items:center; }
.aud-step b { font-size:.98rem; color:var(--navy); margin-top:3px; }
.aud-step span:last-child { font-size:.87rem; line-height:1.55; color:var(--fg-secondary); }

/* ── odniesienie ceny do wartości, jaką klient dostaje (nad cennikiem) ── */
.price-anchor { max-width:720px; margin:0 auto 26px; padding:14px 22px; text-align:center;
  background:var(--accent-soft); border:1px solid #FED7AA; border-radius:var(--r-lg);
  font-size:.95rem; line-height:1.6; color:var(--fg-secondary); }
.price-anchor b { color:var(--accent-fg); font-weight:700; }

/* ═══════════════════════════════════════════════════════════════════════════
   STYL MARKI ZE STAREJ webup.pl — używany na stronie głównej i blogu.
   Landingi produktowe zostają na gęstszym układzie „sprzedażowym"; strona główna
   i blog mają wyglądać jak dotychczasowa witryna: płynne smugi pomarańcz+turkus,
   lekka i duża typografia, nadtytuł wersalikami, dużo powietrza.
   ═══════════════════════════════════════════════════════════════════════════ */
.wu { --wu-teal:#0D9488; }

/* nadtytuł sekcji: pomarańczowe wersaliki + kreska pod spodem */
.wu-kicker { display:block; text-align:center; font-size:.82rem; font-weight:600;
  letter-spacing:.18em; text-transform:uppercase; color:var(--accent); margin-bottom:14px; }
.wu-kicker::after { content:""; display:block; width:26px; height:3px; border-radius:2px;
  background:var(--accent); margin:11px auto 0; }

/* nagłówek: duży, LEKKI, wyśrodkowany — jak na starej stronie */
.wu-h2 { text-align:center; font-size:clamp(1.7rem,3.6vw,2.6rem); font-weight:300;
  line-height:1.25; letter-spacing:-.015em; color:var(--navy); margin:0 auto 16px; max-width:820px; }
.wu-h2 b, .wu-h2 strong { font-weight:600; }
.wu-sub { text-align:center; font-size:1.03rem; line-height:1.7; color:var(--fg-secondary);
  max-width:660px; margin:0 auto 40px; font-weight:400; }
/* Sekcje są BIAŁE domyślnie. Wcześniej nie miały żadnego tła, więc przebijało przez nie
   niebieskawe tło `body` i cała strona była jednolicie niebieska — a przeplot biały/niebieski
   był zamierzony (dwie sekcje mają wprost `background:var(--bg)`). Tylko one zostają niebieskie. */
.wu-sec { padding:80px 0; background:var(--surface); }
.wu-sec.tight { padding:56px 0; }

/* hero ze smugami */
/* Hero wchodzi POD pasek nawigacji (pasek jest przezroczysty, więc ma przez niego iść
   to samo tło co niżej). Bez tego nad hero zostawał jasny pas w kolorze tła strony
   i „transparentny” pasek wyglądał jak osobna belka. Wysokość paska jest stała na
   desktopie (73 px); na telefonie pasek zawija się w dwa rzędy, więc tam nie podciągamy. */
.wu-hero { position:relative; overflow:hidden; background:#fff; padding:96px 0 88px; }
@media (min-width:761px){
  .wu-hero { margin-top:-73px; padding-top:calc(96px + 73px); }
}
@media (max-width:760px){
  /* Na telefonie pasek to jeden rząd o stałej wysokości (logo + hamburger) = 59 px.
     Rozwinięte menu jest wyższe, ale ma własne tło, więc podciągnięcie zostaje bez zmian
     i układ nie skacze przy otwieraniu. */
  .wu-hero { margin-top:-59px; padding-top:calc(44px + 59px); }
}
/* ── ŻYWE TŁO MARKI ─────────────────────────────────────────────────────────
   Buduje je CSS, a nie animowany SVG. Poprzednia wersja trzymała animacje SMIL
   w <img> — Chrome je odtwarza, ale Safari (i każda przeglądarka z blokadą SMIL)
   pokazuje pierwszą klatkę i tło stoi. Na kolorowych plamach z `radial-gradient`
   animowanych przez `transform`/`opacity` działa wszędzie tak samo i idzie na GPU.

   Kolory wyłącznie z logo: #FF6F00 i #27495B (+ ich jaśniejsze warianty).
   Cztery plamy, każda z własnym czasem (16/21/26/33 s) i własną trasą — okresy są
   względnie pierwsze, więc układ nie wraca do tej samej klatki i nie widać pętli. */
/* Rozmycie 40 px, nie 64 — przy mocniejszym plamy tak się uśredniają, że ruch przestaje
   być widoczny gołym okiem (zmierzone: max różnica 25/255 między klatkami). */
.wu-bg { position:absolute; inset:0; z-index:0; pointer-events:none; overflow:hidden;
  filter:blur(40px); opacity:1; --mx:0; --my:0; --px:50%; --py:50%; }

.wu-blob { position:absolute; border-radius:50%; will-change:transform, opacity; }
/* Piąta plama, ZAKOTWICZONA w prawym górnym rogu — pod pozycjami menu. Cztery pozostałe
   odpływają i w części cyklu pas pod menu robił się prawie biały, przez co białe napisy
   znikały. Ta oddycha w miejscu, więc kolor spod menu nigdy nie ucieka.
   GRANATOWA, nie pomarańczowa: pomarańcz ma z bielą najwyżej ~2,5:1 przy wymaganych 4,5:1,
   granat daje ~7:1. Wcześniejsza próba z pomarańczową plamą dlatego nic nie dała.
   Jest CZĘŚCIĄ TŁA (siedzi w .wu-bg, pod welonem), a nie nakładką na pasek. */
.wu-bg::after { content:""; position:absolute; top:-34%; right:-14%; width:78vw; height:34vw;
  border-radius:50%; pointer-events:none;
  background:radial-gradient(ellipse at 60% 64%, #27495B 0%, #33586D 45%, rgba(39,73,91,0) 76%);
  animation:wuAnchor 20s ease-in-out infinite; }
@keyframes wuAnchor {
  0%,100% { transform:translate3d(0,0,0) scale(1); }
  50%     { transform:translate3d(-5%, 3%, 0) scale(1.1); }
}
/* Warstwa paralaksy siedzi na RODZICU plamy, żeby nie kolidować z animacją `transform`
   samej plamy — dwie animacje tej samej właściwości wykluczyłyby się nawzajem. */
.wu-par { position:absolute; inset:0; transition:transform 1.4s cubic-bezier(.16,.8,.3,1); }
.wu-par.p1 { transform:translate3d(calc(var(--mx) * 130px), calc(var(--my) * 95px), 0); }
.wu-par.p2 { transform:translate3d(calc(var(--mx) * -105px), calc(var(--my) * 80px), 0); }
.wu-par.p3 { transform:translate3d(calc(var(--mx) * 88px), calc(var(--my) * -100px), 0); }
.wu-par.p4 { transform:translate3d(calc(var(--mx) * -160px), calc(var(--my) * -120px), 0); }
@media (prefers-reduced-motion:reduce){ .wu-par { transform:none !important; } }
.wu-blob.b1 { width:56vw; height:46vw; top:-16%; right:-10%;
  background:radial-gradient(circle at 40% 40%, #FF9A3D 0%, #FF6F00 45%, rgba(255,111,0,0) 72%);
  animation:wuFloat1 12s ease-in-out infinite; }
.wu-blob.b2 { width:46vw; height:40vw; bottom:-18%; left:-8%;
  background:radial-gradient(circle at 50% 50%, #E56400 0%, rgba(229,100,0,0) 70%);
  animation:wuFloat2 16s ease-in-out infinite; }
.wu-blob.b3 { width:44vw; height:36vw; top:-8%; right:24%;
  background:radial-gradient(circle at 50% 50%, #27495B 0%, #3A6B85 38%, rgba(58,107,133,0) 72%);
  animation:wuFloat3 20s ease-in-out infinite; opacity:1; }
.wu-blob.b4 { width:40vw; height:32vw; top:6%; left:8%;
  background:radial-gradient(circle at 50% 50%, #FFC48A 0%, rgba(255,196,138,0) 70%);
  animation:wuFloat4 25s ease-in-out infinite; }

/* Trasy są nieregularne (cztery przystanki, nie tam-i-z-powrotem) i łączą przesunięcie
   ze skalą oraz obrotem — dzięki temu plama zmienia też KSZTAŁT, a nie tylko pozycję. */
@keyframes wuFloat1 {
  0%   { transform:translate3d(0,0,0)            scale(1)    rotate(0deg); }
  25%  { transform:translate3d(-30%, 20%, 0)     scale(1.45) rotate(14deg); }
  50%  { transform:translate3d(14%, 38%, 0)      scale(.72)  rotate(-12deg); }
  75%  { transform:translate3d(-18%, -14%, 0)    scale(1.28) rotate(8deg); }
  100% { transform:translate3d(0,0,0)            scale(1)    rotate(0deg); }
}
@keyframes wuFloat2 {
  0%   { transform:translate3d(0,0,0)            scale(1)    rotate(0deg); opacity:.9; }
  33%  { transform:translate3d(-40%, -30%, 0)    scale(1.5)  rotate(-18deg); opacity:.35; }
  66%  { transform:translate3d(18%, 14%, 0)      scale(.7)   rotate(12deg); opacity:1; }
  100% { transform:translate3d(0,0,0)            scale(1)    rotate(0deg);  opacity:.9; }
}
@keyframes wuFloat3 {
  0%   { transform:translate3d(0,0,0)            scale(1)    rotate(0deg); }
  40%  { transform:translate3d(48%, -26%, 0)     scale(1.4)  rotate(14deg); }
  70%  { transform:translate3d(-14%, 24%, 0)     scale(.72)  rotate(-10deg); }
  100% { transform:translate3d(0,0,0)            scale(1)    rotate(0deg); }
}
@keyframes wuFloat4 {
  0%   { transform:translate3d(0,0,0)            scale(1)    rotate(0deg);   opacity:.85; }
  30%  { transform:translate3d(55%, -34%, 0)     scale(1.6)  rotate(22deg);  opacity:.3; }
  60%  { transform:translate3d(-40%, 30%, 0)     scale(.65)  rotate(-18deg); opacity:1; }
  100% { transform:translate3d(0,0,0)            scale(1)    rotate(0deg);   opacity:.85; }
}
/* Hero i sekcja z wizytówką: tło wychodzi z krawędzi, więc pod treścią kładziemy
   jasny welon — inaczej tekst czytałoby się na pełnym pomarańczu. */
.wu-hero::before { content:""; position:absolute; inset:0; z-index:1;
  background:rgba(255,255,255,.34); }
.wu-hero .section-inner { position:relative; z-index:2; }

.wu-hero-copy { max-width:600px; }
.wu-hero h1 { font-size:clamp(2.1rem,4.6vw,3.4rem); font-weight:300; line-height:1.14;
  letter-spacing:-.025em; color:var(--navy); margin:0 0 20px; }
.wu-hero h1 b { font-weight:600; color:var(--accent); }
.wu-hero p { font-size:1.1rem; line-height:1.7; color:var(--fg-secondary); margin:0 0 30px; max-width:520px; }
.wu-hero-eyebrow { display:inline-flex; align-items:center; gap:8px; font-size:.8rem; font-weight:600;
  letter-spacing:.12em; text-transform:uppercase; color:var(--accent); margin-bottom:16px; }
@media (max-width:900px){
  .wu-hero { padding:64px 0 60px; }
  .wu-hero::before { opacity:.55; }
}

/* ── STAWKA W PROGRAMIE PARTNERSKIM ──
   Liczba ma być pierwszą rzeczą, którą widać — po nią ludzie wchodzą na tę stronę. */
.pp-rate { padding:34px 0; }
.pp-rate-box { display:flex; align-items:center; gap:34px; flex-wrap:wrap; justify-content:center;
  max-width:860px; margin:0 auto; padding:30px 34px; background:var(--surface);
  border:1px solid var(--border); border-radius:var(--r-xl); box-shadow:var(--shadow-sm); }
.pp-rate-num { display:flex; flex-direction:column; align-items:center; text-align:center;
  padding-right:34px; border-right:1px solid var(--border-soft); }
.pp-rate-num b { font-size:4rem; font-weight:800; line-height:1; color:var(--accent);
  letter-spacing:-.03em; }
.pp-rate-num span { font-size:.84rem; color:var(--fg-muted); margin-top:8px; max-width:170px; }
.pp-rate-list { margin:0; padding:0; list-style:none; flex:1 1 320px; }
.pp-rate-list li { position:relative; padding-left:22px; font-size:.95rem; line-height:1.6;
  color:var(--fg-secondary); margin-bottom:10px; }
.pp-rate-list li:last-child { margin-bottom:0; }
.pp-rate-list li::before { content:""; position:absolute; left:0; top:.6em; width:8px; height:8px;
  border-radius:50%; background:var(--accent); }
.pp-rate-list b { color:var(--fg); font-weight:700; }
@media (max-width:760px){
  .pp-rate-box { gap:20px; padding:24px 20px; }
  .pp-rate-num { padding:0 0 18px; border-right:0; border-bottom:1px solid var(--border-soft);
    width:100%; }
  .pp-rate-num b { font-size:3rem; }
}

/* ── STRONY DOKUMENTÓW (polityka prywatności, regulamin) ──
   Wąska kolumna i numeracja z <ol>; dokument prawny ma się dobrze CZYTAĆ,
   a nie wyglądać jak landing. Numery pochodzą z listy, nie z treści. */
.doc-page .section-inner { max-width:820px; }
.doc-page h1 { text-align:left; }
.doc-meta { font-size:.86rem; color:var(--fg-muted); margin:6px 0 34px; }
.doc-page h2 { font-size:1.05rem; font-weight:700; letter-spacing:.01em; color:var(--navy);
  margin:34px 0 12px; padding-top:18px; border-top:1px solid var(--border-soft); }
.doc-list { margin:0 0 4px; padding-left:22px; }
.doc-list li { font-size:.95rem; line-height:1.75; color:var(--fg-secondary); margin-bottom:9px; }
.doc-list li::marker { color:var(--accent-fg); font-weight:600; }

/* ── KAFLE ARTYKUŁÓW (strona główna, lista /blog, „powiązane" pod wpisem) ──
   Jeden wygląd we wszystkich trzech miejscach. Wcześniej blog miał własny kafel
   z pomarańczową płytką i po redesignie strony głównej widoki się rozjechały.
   Język ten sam co kafle usług: ta sama obwódka, uniesienie i kolor tytułu po najechaniu. */
.wu-posts.cards { display:flex; flex-wrap:wrap; justify-content:center; gap:14px;
  max-width:1080px; margin:0 auto; }
.wu-post-card { position:relative; display:flex; flex-direction:column; flex:0 1 calc(33.333% - 10px);
  min-width:250px; padding:22px 22px 18px; background:var(--surface); border:1px solid var(--border);
  border-radius:var(--r-xl); text-decoration:none; box-shadow:var(--shadow-sm);
  transition:border-color .16s, box-shadow .16s, transform .16s; }
.wu-post-card:hover { border-color:var(--accent); transform:translateY(-3px);
  box-shadow:0 12px 28px rgba(39,73,91,.12); }
.wpc-cat { font-size:.7rem; font-weight:700; letter-spacing:.1em; text-transform:uppercase;
  color:var(--accent-fg); margin-bottom:10px; }
.wu-post-card h3 { font-size:1.04rem; font-weight:600; line-height:1.4; color:var(--navy);
  margin:0 0 8px; text-wrap:balance; }
.wu-post-card:hover h3 { color:var(--accent-fg); }
.wu-post-card p { font-size:.89rem; line-height:1.6; color:var(--fg-secondary); margin:0 0 16px;
  display:-webkit-box; -webkit-line-clamp:3; -webkit-box-orient:vertical; overflow:hidden; }
/* Data i czas czytania zawsze przy dolnej krawędzi, żeby karty w rzędzie kończyły się równo. */
.wpc-meta { display:flex; align-items:center; gap:8px; margin-top:auto; font-size:.78rem;
  color:var(--fg-muted); }
.wpc-au { display:flex; flex-direction:column; line-height:1.35; min-width:0; }
.wpc-au b { font-weight:600; color:var(--fg-secondary); }

/* Wpis wyróżniony — pierwszy na liście /blog. Pełna szerokość i większy tytuł;
   bez tego dwanaście identycznych prostokątów nie mówi, od czego zacząć. */
.wu-post-card.feat { flex:0 0 100%; padding:30px 30px 24px;
  background:linear-gradient(180deg,#fff 0%,var(--surface-alt,#F7F8FA) 100%); }
.wu-post-card.feat h3 { font-size:1.5rem; line-height:1.3; letter-spacing:-.015em; margin-bottom:10px; }
.wu-post-card.feat p { font-size:.98rem; max-width:70ch; -webkit-line-clamp:2; margin-bottom:14px; }
.wu-post-card.feat .wpc-cat::after { content:" · najnowszy"; color:var(--fg-muted); font-weight:600; }

@media (max-width:980px){ .wu-post-card { flex:0 1 calc(50% - 7px); } }
@media (max-width:760px){
  .wu-posts.cards { gap:10px; }
  .wu-post-card, .wu-post-card.feat { flex:0 1 100%; min-width:0; padding:18px 16px 14px; }
  .wu-post-card p { -webkit-line-clamp:2; }
  .wu-post-card.feat h3 { font-size:1.2rem; }
}

/* pasek partnerów pod hero — szare logotypy, dużo światła */
/* Wszystkie osiem w JEDNEJ linii (decyzja Oskara 09.08 — dwa rzędy wyglądały źle) i na tym
   samym tle co reszta strony, bez własnego szarego pasa i kreski. Ramka zjeżdża ze 170 do 122 px,
   żeby 8×122 + 7×14 = 1074 zmieściło się w kolumnie 1080. */
.wu-partners { display:flex; align-items:center; justify-content:center; gap:16px 12px;
  flex-wrap:wrap; padding:30px max(16px, calc((100% - 1080px) / 2)) 24px; background:var(--surface); }
.wu-partners > a { flex:0 0 109px; max-width:109px; }
/* Na tablecie osiem w linii już się nie mieści — wtedy równe 4+4 (4×122 + 3×14 = 530). */
@media (max-width:1119px) and (min-width:761px){
  /* Na tablecie dziewięć w linii się nie mieści — wtedy 5+4 (5×109 + 4×12 = 593). */
  .wu-partners { padding-inline:max(16px, calc((100% - 593px) / 2)); }
}
/* Podpis pod spodem: najpierw logotypy, dopiero potem wyjasnienie. */
/* Podpis ma być ledwo obecny — to przypis do logotypów, nie nagłówek sekcji. */
.wu-partners-head { order:9; width:100%; text-align:center; font-size:.68rem; font-weight:500;
  letter-spacing:.1em; text-transform:uppercase; color:var(--fg-muted); opacity:.62; margin-top:4px; }
/* Wyrównanie wielkości siedzi w SAMYCH PLIKACH, nie tutaj: każdy znak jest wpasowany
   w to samo płótno 170×50 (2× = 340×100), a jego rozmiar w środku wyliczony z proporcji
   tak, żeby wszystkie miały podobne POLE — równa wysokość robiła ze znaku kwadratowego
   (Sektor 3.0) znaczek przy szerokim napisie (Radio Gdańsk). Skrypt: normalize_partners.py.
   Dlatego w CSS wystarczy jedna wysokość i wszystkie ramki wychodzą identyczne.
   Pliki mają zachowany kanał alfa — przy usuniętej przezroczystości zostawał biały prostokąt. */
/* Znaki są zredukowane do jednego koloru marki (duotone granat→biel, wypalony w plikach),
   więc osiem logotypów z ośmiu różnych stron czyta się jak jeden zestaw, a nie jak zlepek. */
.wu-partners a { display:grid; place-items:center; }
.wu-partners img { height:32px; width:auto; opacity:.85; transition:.2s; }
.wu-partners a:hover img { opacity:1; }
.wu-partners a:hover img { transform:translateY(-1px); }

/* usługi: duża okrągła ikona w ramce, tytuł, jedno zdanie — bez ścian tekstu */
/* Kompaktowo: ikona obok tekstu zamiast nad nim. Dziewięć kafli z ikoną 96 px
   i akapitem pod spodem zajmowało dwa ekrany; teraz mieszczą się w jednym. */
.wu-cards { display:flex; flex-wrap:wrap; justify-content:center; gap:12px; }
.wu-cards > .wu-card { flex:0 1 calc(33.333% - 8px); min-width:270px; }
/* Ikona zajmuje oba wiersze pierwszej kolumny, tytuł i opis idą w drugiej. Bez
   `grid-row` akapit lądował w kolumnie szerokiej na 52 px i łamał się po jednym słowie. */
/* Staly wiersz tytulu (22 px) — przy `auto` opisy startowaly na roznych wysokosciach,
   bo wysokosc wiersza brala sie z dlugosci tytulu w danym kaflu. */
.wu-card { display:grid; grid-template-columns:52px 1fr; grid-template-rows:22px auto;
  align-items:start; gap:2px 14px; text-align:left; text-decoration:none;
  padding:14px 16px; border-radius:var(--r-lg);
  transition:background .18s, box-shadow .18s, color .18s; }
.wu-card > .wu-ico { grid-column:1; grid-row:1 / span 2; align-self:start; }
.wu-card > h3 { grid-column:2; grid-row:1; align-self:start; line-height:1.35; }
.wu-card > p  { grid-column:2; grid-row:2; margin-top:6px; }
/* Reaguje CAŁY kafel, nie tylko ikona (Oskar 09.08) — ale bez podskoku.
   Poprzednia wersja unosiła kafel o 3 px i dokładała cień, a `transition` obejmował
   samo tło, więc ruch był skokowy; do tego `border-color` nic nie robiło, bo kafel
   w spoczynku nie ma obwódki. Teraz kafel po prostu WYPEŁNIA SIĘ GRANATEM — ten sam
   język co „Panel klienta" i zaznaczona pozycja w menu. Zero ruchu, płynne przejście. */
.wu-card:hover { background:var(--navy); box-shadow:0 10px 24px rgba(39,73,91,.18); }
.wu-card:hover h3 { color:#fff; }
.wu-card:hover p { color:rgba(255,255,255,.82); }
.wu-card:hover .wu-price { color:#FFB877; }
.wu-ico { width:52px; height:52px; border-radius:15px; border:1px solid var(--border);
  background:var(--surface); display:grid; place-items:center; color:var(--navy);
  box-shadow:var(--shadow-sm); transition:.2s; }
.wu-ico svg, .wu-ico img { width:26px; height:26px; }
.wu-card:hover .wu-ico { background:rgba(255,255,255,.12); border-color:rgba(255,255,255,.28);
  color:#fff; box-shadow:none; }
/* Znak PING jest dwukolorowy i wypełniony (nie na obrysie jak reszta ikon), więc żeby
   po najechaniu też robił się pomarańczowy, przefarbowujemy mu wprost `fill`. */
.ping-mark path, .ping-mark circle { transition:fill .16s; }
.wu-card:hover .ping-mark path, .wu-card:hover .ping-mark circle { fill:#fff; }
.wu-card h3 { font-size:1rem; font-weight:600; color:var(--navy); margin:0 0 3px;
  letter-spacing:-.01em; transition:color .18s; }
.wu-card .wu-price { font-size:.82rem; font-weight:600; color:var(--accent-fg); }
.wu-card p { font-size:.87rem; line-height:1.55; color:var(--fg-secondary); margin:0;
  transition:color .18s; }

/* „Cześć!" — wizytówka Oskara na tle smug, jak na starej stronie */
.wu-hi { position:relative; overflow:hidden; padding:78px 0; background:var(--bg); }
.wu-hi::before { content:""; position:absolute; inset:0; z-index:1;
  background:rgba(241,245,251,.5); }
.wu-hi .section-inner { position:relative; z-index:2; }
.wu-hi .wu-bg { transform:scaleX(-1); }
.wu-hi-grid { position:relative; display:grid; gap:0; grid-template-columns:290px 1fr;
  align-items:center; max-width:880px; margin:0 auto; }
.wu-vcard { background:var(--navy); border-radius:var(--r-xl); padding:30px 24px; text-align:center;
  color:#fff; box-shadow:var(--shadow-lg); position:relative; z-index:2; }
.wu-vcard img { width:150px; height:150px; border-radius:50%; object-fit:cover; display:block; margin:0 auto 16px; }
.wu-vcard b { display:block; font-size:1.15rem; font-weight:600; line-height:1.3; letter-spacing:.02em; }
.wu-vcard span { display:block; margin-top:8px; padding-top:12px; border-top:1px solid rgba(255,255,255,.18);
  font-size:.74rem; letter-spacing:.16em; text-transform:uppercase; opacity:.72; }
.wu-hi-body { background:var(--surface); border:1px solid var(--border); border-radius:var(--r-xl);
  box-shadow:var(--shadow-lg); padding:34px 34px 34px 60px; margin-left:-36px; }
.wu-hi-body h2 { font-size:1.9rem; font-weight:600; color:var(--navy); margin:0 0 4px; letter-spacing:-.02em; }
.wu-hi-body .wu-hi-lead { font-size:.98rem; color:var(--fg-secondary); margin:0 0 18px; }
.wu-hi-body ul { margin:0 0 20px; padding-left:20px; }
.wu-hi-body li { font-size:.94rem; line-height:1.65; color:var(--fg-secondary); margin-bottom:6px; }
@media (max-width:820px){
  .wu-hi-grid { grid-template-columns:1fr; gap:0; }
  .wu-vcard { max-width:250px; margin:0 auto; }
  .wu-hi-body { margin:-24px 0 0; padding:46px 24px 28px; }
}

/* zaufali nam — spokojna siatka logotypów zamiast przewijanego paska */
.wu-logos { display:flex; flex-wrap:wrap; align-items:center; justify-content:center;
  gap:34px 44px; max-width:1000px; margin:0 auto; }
/* mix-blend-mode zamiast samej przezroczystości: część logotypów ma wtopione białe
   albo szare tło i przy niskiej opacity wychodziły z tego szare plamy. */
/* Kolorowe, tak jak na starej webup.pl — w skali szarości połowa znaków traciła
   rozpoznawalność (Erasmus+, Radio Gdańsk, FRSE żyją kolorem). */
.wu-logos img { max-width:130px; max-height:62px; width:auto; height:auto;
  mix-blend-mode:multiply; transition:transform .18s; }
.wu-logos img:hover { transform:scale(1.06); }

/* Kafle wpisów żyją wyżej w bloku „KAFLE ARTYKUŁÓW" — tu był wariant
   z gradientową płytką, wycofany 10.08 na rzecz jednego wyglądu. */

/* przycisk „obrysowany" — na starej stronie sąsiadował z pełnym pomarańczowym */
/* Obwodka i tekst w JEDNYM kolorze — wczesniej ramka byla #FF6F00, a napis ciemniejszy
   #B34D00 i przycisk wygladal na niedokonczony. */
.wu-btn-outline { display:inline-flex; align-items:center; gap:7px; padding:12px 26px;
  border:1.5px solid var(--navy); border-radius:999px; color:var(--navy);
  font-weight:600; font-size:.95rem; text-decoration:none; background:transparent; transition:.16s; }
.wu-btn-outline:hover { background:var(--navy); border-color:var(--navy); color:#fff; }

/* Nagłówek wpisu na tle smug. UWAGA na specyficzność: `.wu-hero h1` i `.wu-hero p`
   są (0,1,1) i stoją w pliku NIŻEJ niż `.bl-head h1` / `.bl-lead`, więc wygrywały —
   tytuł szedł w rozmiarze hero landingu (58 px), a lid dostawał max-width:520px
   i łamał się węziej niż sam tekst artykułu. Stąd te selektory z dwiema klasami.
   Waga 300 (jak w nagłówkach sekcji) dawała tytuł cienki i wyblakły — tekst
   potrzebuje zdecydowanego tytułu, więc 700. */
.bl-head.wu-hero h1 { font-weight:700; font-size:clamp(1.8rem,3.4vw,2.4rem); }
.bl-head .bl-lead { max-width:660px; font-size:1.14rem; }
.bl-head.wu-hero h1 b, .bl-head.wu-hero h1 strong { font-weight:600; }
.bl-head.wu-hero::before { opacity:.5; }
.bl-head .bl-byline { border-bottom:0; }


/* Wyłączenie ruchu dla osób, które o to proszą w ustawieniach systemu. */
@media (prefers-reduced-motion:reduce){ .wu-blob { animation:none !important; } }

/* ═══════════════════════════════════════════════════════════════════════════
   NOWOCZESNE PODSTAWY (2026) — rzeczy, które dziś są standardem, a nie ozdobą.
   ═══════════════════════════════════════════════════════════════════════════ */

/* Formularze i kontrolki dziedziczą jasny motyw zamiast systemowego ciemnego. */
:root { color-scheme: light; }

/* Łamanie tekstu: `balance` wyrównuje długość wierszy w nagłówkach (koniec z jednym
   sierotą w drugiej linii), `pretty` pilnuje, żeby akapit nie kończył się sierotą. */
h1, h2, h3, .wu-h2, .bl-card h3, .wu-card h3 { text-wrap: balance; }
p, .wu-sub, .bl-lead { text-wrap: pretty; }

/* Widoczny fokus TYLKO dla klawiatury — mysz go nie wywołuje, więc nic nie „miga",
   a osoba nawigująca tabem zawsze wie, gdzie jest. Bez tego strona jest nieobsługiwalna
   z klawiatury, mimo że wygląda dobrze. */
a:focus-visible, button:focus-visible, input:focus-visible,
textarea:focus-visible, select:focus-visible, summary:focus-visible, [tabindex]:focus-visible {
  outline: 3px solid var(--accent);
  outline-offset: 2px;
  border-radius: 4px;
}
a:focus:not(:focus-visible), button:focus:not(:focus-visible) { outline: none; }

/* Płynne przewijanie do kotwic — wyłączone dla osób wrażliwych na ruch. */
@media (prefers-reduced-motion: no-preference) {
  html { scroll-behavior: smooth; }
}
/* Nagłówek jest przyklejony, więc kotwica musi zatrzymać się NIŻEJ, inaczej tytuł
   sekcji chowa się pod nawigacją. */
[id] { scroll-margin-top: 88px; }

/* Świadomie BEZ `content-visibility: auto` na sekcjach. Kusi (przeglądarka pomija
   malowanie tego, co poza ekranem), ale przy sekcjach o różnej wysokości zastępcza
   `contain-intrinsic-size` rozjeżdża pasek przewijania i psuje wydruk oraz Ctrl+F.
   Ta strona ma kilkanaście sekcji, więc zysk byłby żaden, a ryzyko realne. */

/* Obrazy nigdy nie wychodzą poza swój kontener i nie generują przesunięć układu. */
img { max-width: 100%; height: auto; }

/* Cel dotknięcia min. 44 px w nawigacji i stopce — wymóg dostępności na telefonie. */
.nav-link, .footer-col a, .fb-legal a { min-height: 44px; display: flex; align-items: center; }
.footer-col a { display: block; min-height: 0; padding: 9px 0; }

@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  *, *::before, *::after { animation-duration: .001ms !important; transition-duration: .001ms !important; }
}


/* ── nawigacja z podmenu ────────────────────────────────────────────────────
   Bez <details>: przeglądarka ukrywa jego zawartość na poziomie renderowania, więc
   `display:block` przy :hover nic nie dawało — zmieniała się tylko strzałka.
   :hover obsługuje mysz, :focus-within klawiaturę. Zero JS. */
.nav-menu { position:relative; display:flex; align-items:center; }
/* Trigger podmenu to <button>, więc trzeba mu zdjąć wygląd przycisku przeglądarki,
   ale NIE tło — pastylkę dostaje z .nav-link tak samo jak zwykłe odnośniki. */
.nav-menu > .nav-link { font:inherit; cursor:pointer;
  display:inline-flex; align-items:center; gap:6px; }
.nav-menu > .nav-link::after { content:""; width:5px; height:5px; border-right:1.6px solid currentColor;
  border-bottom:1.6px solid currentColor; transform:rotate(45deg) translateY(-1px); transition:transform .18s; }
.nav-menu:hover > .nav-link::after, .nav-menu:focus-within > .nav-link::after {
  transform:rotate(225deg) translateY(-2px); }
.nav-drop { position:absolute; top:calc(100% + 14px); left:50%; transform:translateX(-50%) translateY(-6px);
  min-width:320px; padding:10px; background:var(--surface); border:1px solid var(--border);
  border-radius:var(--r-xl); box-shadow:var(--shadow-lg); z-index:60;
  opacity:0; visibility:hidden; transition:opacity .16s, transform .16s, visibility .16s; }
.nav-menu:hover > .nav-drop, .nav-menu:focus-within > .nav-drop, .nav-menu.open > .nav-drop {
  opacity:1; visibility:visible; transform:translateX(-50%) translateY(0); }
/* Niewidoczny pas łączy przycisk z listą — bez niego kursor „gubi” menu w przerwie. */
.nav-drop::before { content:""; position:absolute; left:0; right:0; top:-16px; height:16px; }
.nav-drop a { display:block; padding:9px 12px; border-radius:var(--r); text-decoration:none; transition:.14s; }
.nav-drop a:hover { background:var(--accent-soft); }
.nav-drop b { display:block; font-size:.92rem; font-weight:600; color:var(--navy); }
.nav-drop span { display:block; font-size:.8rem; line-height:1.45; color:var(--fg-muted); margin-top:1px; }

/* ── prawa strona paska ──
   Pasek jest przezroczysty i leży na ruchomym tle, więc sam kolor tekstu za mało się odcinał.
   Każda pozycja dostaje własną jasną pastylkę, a po najechaniu wypełnia się granatem.
   Pomarańczowy hover wypadł: na pomarańczowej plamie tła był praktycznie niewidoczny.
   Pionowa kreska rozdzielająca też — przy pastylkach nie ma czego rozdzielać. */
.nav-right { gap:8px; }
/* Bez pastylek w stanie spoczynku: kontrast załatwia poświata na górze hero (.wu-hero::after),
   więc wystarczy czarny tekst o wyraźnej grubości. Pastylki były łataniem tła kolorem
   i robiły z paska rząd klocków. Granatowe wypełnienie zostaje na najechaniu. */
.nav-link { font-size:.95rem; font-weight:600; letter-spacing:-.005em; color:#0f1419;
  padding:9px 14px; border-radius:999px; background:transparent; border:1px solid transparent;
  transition:background .16s, color .16s, border-color .16s; }
.nav-link:hover, .nav-menu:hover > .nav-link, .nav-menu:focus-within > .nav-link {
  background:var(--navy); border-color:var(--navy); color:#fff; }
.nav-sep { display:none; }
/* Panel klienta: czarny obrys i czarny napis, granatowe wypełnienie dopiero po najechaniu.
   Oba przyciski w pasku mają WYMUSZONĄ tę samą wysokość — obrys 1,5 px po jednej stronie
   i jego brak po drugiej dawały różnicę 3 px, którą widać, gdy stoją obok siebie. */
.nav-btn-ghost, .nav-cta { height:42px; box-sizing:border-box; display:inline-flex;
  align-items:center; justify-content:center; }
.nav-btn-ghost { padding:0 18px; border-radius:999px;
  border:1.5px solid #0f1419; background:transparent; color:#0f1419; font-size:.9rem;
  font-weight:600; text-decoration:none; transition:.15s; white-space:nowrap; }
.nav-btn-ghost:hover { background:var(--navy); border-color:var(--navy); color:#fff; }
.nav-cta { padding:0 18px; }

/* ── BIAŁE POZYCJE NA PASKU LEŻĄCYM NA HERO (`.nav-over` = wu_nav) ──
   Tylko tam, gdzie pod paskiem jest ruchome tło. Landingi mają pasek na płaskim
   jasnym pasie i biel byłaby na nim nieczytelna przez cały czas.
   Cień jest OBOWIĄZKOWY, nie ozdobny: w części cyklu animacji jasna smuga wchodzi
   pod menu i tło dochodzi do czystej bieli — bez cienia napisy wtedy znikają
   (zmierzone: kontrast spadał do 1,0:1 przy wymaganych 4,5:1).
   Trzy stany MUSZĄ wrócić do ciemnego, bo mają pod sobą biel:
   pasek po przewinięciu (.stuck), rozwinięte menu na telefonie i hover. */
/* Biały tekst BEZ cienia — decyzja Oskara po obejrzeniu wariantu z poświatą.
   Zmierzone: przez część cyklu animacji pas pod menu dochodzi do 249/255, czyli
   kontrast 1,0:1 (wymagane 4,5:1) i napisy wtedy bledną. Zostawiam tak na jego
   wyraźne polecenie; wycofanie to zmiana koloru w tych czterech regułach niżej. */
.nav-over .nav-link, .nav-over .nav-btn-ghost { color:#fff; }
.nav-over .nav-btn-ghost { border-color:#fff; }
.nav-over.stuck .nav-link, .nav-over.stuck .nav-btn-ghost { color:#0f1419; }
.nav-over.stuck .nav-btn-ghost { border-color:#0f1419; }
.nav-over .nav-link:hover, .nav-over .nav-menu:hover > .nav-link,
.nav-over .nav-menu:focus-within > .nav-link, .nav-over .nav-btn-ghost:hover { color:#fff; }
/* Po najechaniu przycisk ma być JEDNOLICIE granatowy — biała obwódka z `.nav-over`
   zostawała na granacie jako obrys i przycisk wyglądał na niedokończony. */
.nav-over .nav-btn-ghost:hover { background:var(--navy); border-color:var(--navy); }

/* Pozycja, na której właśnie jesteśmy. Granat zamiast pomarańczu (decyzja Oskara 10.08).
   Na pasku leżącym na hero bierzemy NAJCIEMNIEJSZY granat z palety — jasny wariant
   ginął na szaroniebieskiej smudze pod menu. */
.nav-link.on { color:var(--navy); font-weight:600; }
.nav-over .nav-link.on { color:#16334A; }
.nav-over.stuck .nav-link.on { color:var(--navy); }
/* Po najechaniu pastylka robi się granatowa — napis musi wtedy zbielieć, inaczej
   granat siedzi na granacie i pozycja znika. Dotyczy WSZYSTKICH wariantów paska. */
.nav-link.on:hover, .nav-over .nav-link.on:hover, .nav-over.stuck .nav-link.on:hover { color:#fff; }

@media (max-width:1000px){
  .nav-menu { position:static; }
  .nav-drop { left:0; right:0; transform:none; min-width:0; }
  .nav-menu:hover > .nav-drop, .nav-menu:focus-within > .nav-drop, .nav-menu.open > .nav-drop { transform:none; }
}

/* ── sekcja dwukolumnowa na stronie głównej (SMART, Ad Grants) ──
   Same nagłówki z przyciskami czytały się jak przerywnik, nie jak oferta. */
.wu-split { display:grid; grid-template-columns:1fr 1fr; gap:44px; align-items:center;
  max-width:980px; margin:6px auto 0; text-align:left; }
/* Dzieci gridu mają domyślnie `min-width:auto` i nie kurczą się poniżej swojej treści —
   makieta wyszukiwarki rozpychała kolumnę i cała sekcja wychodziła poza kontener. */
.wu-split > * { min-width:0; }
.wu-split.rev > *:first-child { order:2; }
.wu-split .price-feats { margin-bottom:24px; }
.wu-split .hero-ctas { justify-content:flex-start; }
@media (max-width:860px){
  .wu-split { grid-template-columns:1fr; gap:30px; }
  .wu-split.rev > *:first-child { order:0; }
}


/* ── jeden kształt przycisku w całym serwisie ──
   btn-primary miał promień 10 px, a przyciski obok — pełną pigułkę; zestawione w parę
   wyglądały jak z dwóch różnych projektów. Wszystkie akcje mają teraz ten sam kształt. */
.btn-primary, .btn-ghost, .wu-btn-outline, .price-cta, .nav-cta, .fp-btn, .cta-inline a,
.bl-chip, .kw-preset { border-radius:999px; }
.btn-primary, .btn-ghost, .wu-btn-outline { padding:13px 28px; }

/* ── grupy usług na stronie głównej ── */
.wu-group { margin-bottom:34px; }
.wu-group:last-child { margin-bottom:0; }
.wu-group-t { display:block; text-align:center; font-size:.82rem; font-weight:700;
  letter-spacing:.16em; text-transform:uppercase; color:var(--navy);
  padding-bottom:16px; margin-bottom:30px; border-bottom:1px solid var(--border); }

/* ═══════════════════════════════════════════════════════════════════════════
   TELEFON — przejrzane na 390 px. Układ desktopowy jest tu nieczytelny:
   nawigacja nie mieści się w jednej linii, wielkie nagłówki łamią się na sześć
   wierszy, a tło zasłania tekst.
   ═══════════════════════════════════════════════════════════════════════════ */
@media (max-width:760px){
  /* Pasek zwinięty do jednego rzędu: logo + hamburger. Rozwijanie menu na płasko
     (każda pozycja w osobnym wierszu) dawało nawigację wysoką na 240–450 px,
     która spychała hero poniżej ekranu. */
  nav { flex-wrap:wrap; gap:8px 0; padding:10px 16px; }
  .nav-burger { display:flex; flex-direction:column; justify-content:center; gap:5px;
    width:44px; height:38px; padding:9px 9px; border-radius:12px; cursor:pointer;
    border:1px solid var(--border); background:rgba(255,255,255,.75); }
  .nav-burger span { display:block; height:2px; background:var(--navy); border-radius:2px;
    transition:transform .2s, opacity .15s; }
  .nav-toggle:checked ~ .nav-burger span:nth-child(1) { transform:translateY(7px) rotate(45deg); }
  .nav-toggle:checked ~ .nav-burger span:nth-child(2) { opacity:0; }
  .nav-toggle:checked ~ .nav-burger span:nth-child(3) { transform:translateY(-7px) rotate(-45deg); }
  /* Rozwinięte menu przykrywa tło, więc cały pasek dostaje własne — bez tego górna część
     paska zostawała przezroczysta (widać przez nią tło strony) i menu wyglądało dwukolorowo. */
  .nav-right { display:none; }
  nav:has(.nav-toggle:checked) { background:rgba(255,255,255,.97); backdrop-filter:blur(10px);
    border-bottom-color:var(--border-soft); }
  .nav-toggle:checked ~ .nav-right { width:100%; display:flex; flex-direction:column;
    align-items:stretch; gap:2px; padding:12px 0 6px; margin-top:8px;
    border-top:1px solid var(--border-soft); }
  /* Rozwinięte menu ma białe tło, więc białe napisy z `.nav-over` muszą tu zgasnąć. */
  .nav-link { font-size:.95rem; padding:7px 2px; }
  .nav-over .nav-toggle:checked ~ .nav-right .nav-link,
  .nav-over .nav-toggle:checked ~ .nav-right .nav-btn-ghost { color:#0f1419; }
  .nav-over .nav-toggle:checked ~ .nav-right .nav-btn-ghost { border-color:#0f1419; }
  .nav-sep { display:none; }
  .nav-btn-ghost, .nav-cta { width:100%; justify-content:center; text-align:center; margin-top:6px; }
  .nav-cta { font-size:.9rem; padding:11px 16px; }
  /* Podmenu jako zwykła lista pod przyciskiem — pływające pudełko nie ma tu sensu.
     ZWINIĘTE MUSI BYĆ `display:none`, a nie `visibility:hidden`: ukryty element
     w normalnym przepływie dalej rezerwuje swoją wysokość i pasek nawigacji rósł
     do ~450 px pustego miejsca (dwa niewidoczne menu jedno pod drugim).
     Otwiera je dotknięcie przycisku (fokus) — na telefonie nie ma :hover. */
  .nav-menu { width:100%; }
  .nav-drop { display:none; position:static; transform:none; min-width:0; box-shadow:none;
    border:0; border-left:2px solid var(--border); border-radius:0;
    margin:4px 0 4px 6px; padding:0 0 0 10px; animation:none;
    opacity:1; visibility:visible; }
  /* `.open` nadaje JS przy dotknieciu — `:focus-within` nie wystarcza, bo dotkniecie
     przycisku nie nadaje mu fokusu w Safari na iOS. */
  .nav-menu:focus-within > .nav-drop,
  .nav-menu.open > .nav-drop { display:block; transform:none; }
  .nav-drop span { display:none; }          /* same nazwy usług, bez opisów */
  .nav-drop a { padding:8px 4px; }

  /* Skrot `padding` MUSI uwzgledniac podciagniecie hero pod pasek (-59 px),
     inaczej nadtytul wchodzi pod logo. To bylo widac jako "hero mega wysoko". */
  .wu-hero { padding:calc(44px + 59px) 0 46px; }
  .wu-hero h1 { font-size:1.9rem; }
  .wu-hero p { font-size:1rem; }
  /* Tło pod tekstem musi zejść na drugi plan — na wąskim ekranie kolumna tekstu
     zajmuje całą szerokość i leżała wprost na pomarańczowej plamie. */
  .wu-hero::before { background:linear-gradient(180deg, rgba(255,255,255,.94) 0%,
    rgba(255,255,255,.86) 55%, rgba(255,255,255,.35) 100%); }
  .wu-bg { filter:blur(52px); opacity:.75; }

  .hero-ctas { flex-direction:column; align-items:stretch; gap:10px; }
  .hero-ctas .btn-primary, .hero-ctas .btn-ghost, .hero-ctas .wu-btn-outline {
    width:100%; justify-content:center; text-align:center; }

  .wu-sec { padding:52px 0; }
  .wu-sec.tight { padding:38px 0; }
  .wu-h2 { font-size:1.6rem; }
  .wu-sub { font-size:.96rem; margin-bottom:28px; }
  .wu-cards { gap:10px; }
  .wu-cards > .wu-card { flex:0 1 calc(50% - 5px); min-width:0; }
  /* Ikona nad tekstem, nie obok — przy szerokości ~170 px na tekst zostawało ~110 px
     i zdania łamały się po jednym słowie. */
  .wu-card { grid-template-columns:1fr; grid-template-rows:40px auto auto; gap:6px; padding:16px 14px; }
  .wu-card > .wu-ico { grid-column:1; grid-row:1; width:40px; height:40px; align-self:start; margin:0; }
  .wu-card > .wu-ico svg, .wu-card > .wu-ico img, .wu-card > .wu-ico .ping-mark { width:24px; height:24px; }
  .wu-card > h3 { grid-column:1; grid-row:2; font-size:.98rem; }
  .wu-card > p  { grid-column:1; grid-row:3; font-size:.85rem; line-height:1.5; margin-top:2px; }
  .wu-group { margin-bottom:34px; }

  /* pasek partnerów: dwa logotypy w rzędzie zamiast jednego pod drugim */
  /* Dwa logotypy w rzędzie: sztywna ramka 170 px z desktopu nie zmieściła dwóch obok siebie. */
  /* Trzy w rzędzie: przy dziewięciu znakach dwa w rzędzie dawały cztery rzędy
     i samotny dziewiąty na końcu. */
  .wu-partners { gap:16px 10px; padding:26px 12px 30px; }
  .wu-partners > a { flex:0 0 calc(33.333% - 7px); max-width:calc(33.333% - 7px); }
  .wu-partners img { height:30px; }

  .wu-hi { padding:46px 0; }
  .wu-hi-body { padding:44px 20px 26px; }
  .wu-hi-body h2 { font-size:1.55rem; }

  .showcase-grid { grid-template-columns:1fr; }
  .wu-logos { gap:22px 16px; grid-template-columns:repeat(auto-fit,minmax(96px,1fr)); }
  .wu-logos img { max-width:96px; max-height:40px; }
  .cta-strip h2 { font-size:1.5rem; }
  .ptab-wrap { border-radius:var(--r-lg); }
}
@media (max-width:420px){
  .wu-hero h1 { font-size:1.68rem; }
  .wu-h2 { font-size:1.42rem; }
  .wu-cards { grid-template-columns:1fr; }
}

/* zakładka 1,5% — jeden szeroki zrzut zamiast kafla w siatce realizacji */
/* Ta sama szerokość co kafel realizacji — wcześniej zrzut zakładki 1,5% miał 560 px
   i stał pod realizacjami jako wyraźnie szerszy klocek. Kafle realizacji są elastyczne
   (3 w rzędzie, odstęp 22 px), więc przy szerokim ekranie liczymy dokładnie tę samą
   szerokość, a niżej wracamy do zwykłego ograniczenia. */
.opp-shot { max-width:360px; margin:8px auto 0; border:1px solid var(--border);
  border-radius:var(--r-xl); overflow:hidden; box-shadow:var(--shadow-lg); background:var(--surface); }
.opp-shot img { display:block; width:100%; height:auto; }
@media (min-width:1000px){ .opp-shot { max-width:calc((100% - 44px) / 3); } }
/* realizacje: mniejsze kafle, więcej w rzędzie (proporcja bez zmian) */
.showcase-grid > .showcase-item { flex:1 1 300px; max-width:360px; }

/* Logo ma w pliku biały prostokąt — mnożenie usuwa go na dowolnym tle. */
.nav-logo img { mix-blend-mode:multiply; }

/* pasek dowodów doklejany przed stopką (wszystkie landingi) */
.proof-strip { padding:44px 0 10px; background:var(--surface); }

