/* Avigon Base, main.css (ladowany asynchronicznie).
   Sekcje below-the-fold. Tokeny i above-the-fold siedza w critical.css. */

/* ---------- Sekcje / rytm ---------- */
.av-sec{padding-block:var(--av-section-y)}
.av-sec--light{background:var(--av-surface);color:var(--av-ink)}
.av-sec--alt{background:var(--av-surface-alt);color:var(--av-ink)}
.av-sec--dark{background:var(--av-surface-dark);color:var(--av-on-dark)}
.av-sec--dark .av-lead,.av-sec--dark p{color:var(--av-on-dark-soft)}
.av-sec--dark .av-h2,.av-sec--dark .av-h3,.av-sec--dark .av-h4,.av-sec--dark strong{color:var(--av-on-dark)}
.av-sec__actions{margin:2rem 0 0}
.av-sec__actions--center{display:flex;justify-content:center;margin-top:2.75rem}

.av-shead{margin-bottom:clamp(2rem,4vw,3.25rem);max-width:72ch}
.av-shead--center{margin-inline:auto;text-align:center}
.av-shead--center .av-lead{margin-inline:auto}
.av-h2--on-dark{color:var(--av-on-dark)}

.av-prose p{margin:0 0 1.15em;max-width:68ch}
.av-prose p:last-child{margin-bottom:0}
.av-prose--on-dark p{color:var(--av-on-dark-soft)}
.av-prose--sm p{font-size:.94rem}
.av-prose strong{color:var(--av-ink);font-weight:650}
.av-prose--on-dark strong{color:var(--av-on-dark)}

.av-grid{display:grid;gap:1px;background:var(--av-line)}
.av-grid--2{grid-template-columns:repeat(2,minmax(0,1fr))}
.av-grid--3{grid-template-columns:repeat(3,minmax(0,1fr))}
.av-grid--4{grid-template-columns:repeat(4,minmax(0,1fr))}
.av-card--bordered{border:0;padding:clamp(1.5rem,2.5vw,2rem);background:var(--av-surface)}
.av-card--bordered h3{margin-bottom:.5rem}
.av-card--bordered p{margin:0;font-size:.92rem;color:var(--av-ink-soft)}

/* Listy z ptaszkiem, bez ikon SVG, czysty CSS */
.av-checks li{position:relative;padding-left:1.7rem;margin-bottom:.6rem;font-size:.93rem}
.av-checks li::before{content:"";position:absolute;left:0;top:.42em;width:.62rem;height:.34rem;
border-left:2px solid var(--av-accent);border-bottom:2px solid var(--av-accent);transform:rotate(-45deg)}
/* Na jasnym tle sam zolty ptaszek gubi sie w tle, wiec tam idzie ciemny. */
.av-sec--light .av-checks li::before,.av-sec--alt .av-checks li::before{
border-left-color:var(--av-ink);border-bottom-color:var(--av-ink)}
.av-checks--on-dark li::before,.av-sec--dark .av-checks li::before{border-color:var(--av-accent)}
.av-checks--on-dark li{color:var(--av-on-dark-soft)}

.av-frame{margin:0;border:var(--av-border-w) solid var(--av-line);position:relative}
/* aspect-ratio rezerwuje miejsce nawet gdy obrazek nie dostal width/height.
   Dzieje sie tak dla plikow, ktorych getimagesize() nie czyta (SVG) oraz dla
   obrazow podanych jako goly URL spoza biblioteki mediow, bez tego CLS. */
/* Kadr od gory i rozmiar 'large' w szablonach (nie av-card/av-portrait, ktore WP tnie od
   srodka): na serwerze w O nas, konsultacji i kontakcie sa zdjecia zespolu (1.6.7,
   _STANDARD/27 rozdz. 6a pkt 13). */
.av-frame img{width:100%;aspect-ratio:4/3;object-fit:cover;object-position:center top}
.av-frame--dark{border-color:var(--av-line-dark)}

/* ---------- Pasek zaufania ---------- */
.av-trust{padding-block:2.25rem;border-block:var(--av-border-w) solid var(--av-line);background:var(--av-surface)}
.av-trust__in{display:flex;align-items:center;gap:clamp(1rem,3vw,2.5rem);flex-wrap:wrap;justify-content:center}
.av-trust__title{margin:0;font-size:.78rem;font-weight:650;letter-spacing:.1em;
text-transform:uppercase;color:var(--av-ink-soft)}
.av-trust__list{display:flex;flex-wrap:wrap;align-items:center;gap:clamp(1rem,3vw,2.5rem);justify-content:center}
.av-trust__item{font-size:.9rem;font-weight:600;color:var(--av-ink-soft)}
.av-trust__item img{max-height:26px;width:auto;filter:grayscale(1);opacity:.7;transition:opacity var(--av-ease),filter var(--av-ease)}
.av-trust__item:hover img{filter:none;opacity:1}

/* ---------- O nas ---------- */
.av-about{display:grid;grid-template-columns:minmax(0,1.1fr) minmax(0,.9fr);gap:clamp(2rem,5vw,4rem);align-items:start}

.av-about__cards{display:grid;grid-template-columns:1fr 1fr;gap:1px;background:var(--av-line);margin-top:1px}
.av-minicard{background:var(--av-surface);padding:1.15rem 1.25rem;display:block}
.av-minicard strong{display:block;font-size:.95rem;line-height:1.3;margin-bottom:.35rem}
.av-minicard span{display:block;font-size:.84rem;color:var(--av-ink-soft);line-height:1.5}
.av-sign{margin:1.75rem 0 0;padding-left:1rem;border-left:3px solid var(--av-accent)}
.av-sign__name{display:block;font-weight:700}
.av-sign__role{display:block;font-size:.82rem;color:var(--av-ink-soft)}

/* ---------- Dlaczego my ---------- */



.av-why__item p{font-size:.93rem;margin-bottom:0}

.av-quote{margin:clamp(2.5rem,5vw,4rem) 0 0;padding:clamp(1.75rem,3vw,2.5rem);
border:var(--av-border-w) solid var(--av-line-dark);max-width:80ch;margin-inline:auto;text-align:center}
.av-quote p{font-family:var(--av-font-head);font-size:clamp(1.05rem,1.8vw,1.3rem);
line-height:1.5;color:var(--av-on-dark);margin-bottom:.85rem}
.av-quote cite{font-style:normal;font-size:.82rem;letter-spacing:.08em;
text-transform:uppercase;color:var(--av-accent)}

/* ---------- Metoda sprzedazy ---------- */
.av-method{display:grid;gap:1px;background:var(--av-line)}
.av-method__item{background:var(--av-surface);display:grid;
grid-template-columns:minmax(0,1.25fr) minmax(0,.75fr);gap:clamp(1.5rem,3vw,3rem);
padding:clamp(1.75rem,3vw,2.75rem);align-items:center}
.av-method__item:nth-child(even) .av-method__media{order:-1}
.av-method__num{display:block;font-family:var(--av-font-head);font-size:.8rem;font-weight:800;
letter-spacing:.14em;color:var(--av-ink-soft);margin-bottom:.85rem}
.av-method__copy p{color:var(--av-ink-soft);max-width:62ch}
.av-method__media{margin:0;border:var(--av-border-w) solid var(--av-line)}
.av-method__media img{width:100%;aspect-ratio:4/3;object-fit:cover}

/* ---------- Pasek CTA ---------- */
.av-band{background:var(--av-surface-dark);color:var(--av-on-dark);padding-block:clamp(3rem,6vw,5rem)}
.av-band__in{display:flex;gap:2rem;align-items:center;justify-content:space-between;flex-wrap:wrap}
.av-band__in>div:first-child{max-width:56ch}
.av-band .av-h2{margin-bottom:.5rem}
.av-band__text{color:var(--av-on-dark-soft);margin:0}
.av-band__actions{display:flex;gap:.85rem;flex-wrap:wrap}

/* ---------- Proces ---------- */
.av-process{display:grid;grid-template-columns:minmax(0,.72fr) minmax(0,1.28fr);gap:clamp(2rem,4vw,3.25rem);align-items:start}
.av-process__intro{position:sticky;top:110px}
.av-process__tel{margin:1rem 0 0;font-size:1.15rem;font-weight:700}
.av-process__tel a{text-decoration:none}
.av-steps{display:grid;gap:clamp(1rem,2vw,1.5rem);margin:0;padding:0;list-style:none;counter-reset:none}
/* Zolta krawedz po lewej stronie karty: prowadzi wzrok w dol stosu i wiaze
   kroki z numeracja, ktora jest w tym samym kolorze. */
.av-steps__item{display:grid;grid-template-columns:minmax(0,230px) minmax(0,1fr);
gap:clamp(1.25rem,2.5vw,1.75rem);align-items:stretch;
background:var(--av-surface);border:var(--av-border-w) solid var(--av-line);
border-left:3px solid var(--av-accent);
transition:box-shadow var(--av-ease),border-color var(--av-ease)}
.av-steps__item:hover{box-shadow:0 10px 30px rgba(var(--av-ink-rgb),.09)}
.av-steps__num{display:inline-flex;align-items:center;gap:.55rem;
font-family:var(--av-font-head);font-weight:var(--av-head-weight);
font-size:1.05rem;letter-spacing:.08em;color:var(--av-ink-soft);margin-bottom:.5rem}
.av-steps__num::after{content:"";width:24px;height:2px;background:var(--av-accent)}
.av-steps__item p{margin:0;color:var(--av-ink-soft);font-size:.94rem}

/* ---------- Gwarancje ---------- */
.av-seal{margin:2.5rem auto 0;max-width:max-content;padding:.9rem 1.6rem;
border:2px solid var(--av-ink);font-weight:700;font-size:.92rem;text-align:center}

/* ---------- Liczby ---------- */
.av-stats{background:var(--av-surface-dark);color:var(--av-on-dark);padding-block:clamp(3rem,6vw,5rem)}
.av-stats__title{text-align:center;margin-bottom:2.5rem}
.av-stats__grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));
gap:1px;background:var(--av-line-dark);border:var(--av-border-w) solid var(--av-line-dark)}
.av-stats__item{background:var(--av-surface-dark);padding:clamp(1.5rem,3vw,2.25rem);text-align:center}
.av-stats__item dt{font-family:var(--av-font-head);font-size:clamp(1.9rem,4vw,2.9rem);
font-weight:800;letter-spacing:-.03em;line-height:1;color:var(--av-accent)}
.av-stats__item dd{margin:.65rem 0 0;font-size:.85rem;color:var(--av-on-dark-soft);line-height:1.5}

/* ---------- Konsultacja ---------- */
.av-consult{display:grid;grid-template-columns:minmax(0,.78fr) minmax(0,1.22fr);gap:clamp(2rem,4.5vw,3.5rem);align-items:start}
.av-consult__badge{display:inline-block;font-size:.72rem;font-weight:800;letter-spacing:.14em;
text-transform:uppercase;color:var(--av-on-accent);background:var(--av-accent);padding:.45rem .85rem;margin-bottom:1.25rem}
.av-consult__media img{width:100%;aspect-ratio:4/5;object-fit:cover;
/* Kadr trzymamy od gory: to portret, wiec przy przycinaniu ma zniknac
   podloga, a nie twarz. */
object-position:center top}

/* ---------- Opinie ---------- */
.av-rating{display:flex;align-items:center;justify-content:center;gap:.75rem;flex-wrap:wrap;
margin:0 0 2.5rem;font-size:.9rem;color:var(--av-on-dark-soft)}
.av-rating__value{font-family:var(--av-font-head);font-size:2rem;font-weight:800;color:var(--av-on-dark);line-height:1}
.av-stars{color:var(--av-accent);letter-spacing:.12em}
.av-reviews{display:grid;grid-auto-flow:column;grid-auto-columns:minmax(300px,1fr);
gap:1px;background:var(--av-line-dark);overflow-x:auto;scroll-snap-type:x mandatory;scrollbar-width:thin}
.av-review{scroll-snap-align:start;background:var(--av-surface-dark);padding:clamp(1.5rem,2.5vw,2rem);
display:flex;flex-direction:column;gap:1rem}
.av-review__stars{color:var(--av-accent);margin:0;letter-spacing:.1em;font-size:.9rem}
.av-review blockquote{margin:0;flex:1}
.av-review blockquote p{margin:0;font-size:.94rem;color:var(--av-on-dark-soft);line-height:1.65}
.av-review__foot{display:flex;align-items:center;gap:.75rem;
border-top:var(--av-border-w) solid var(--av-line-dark);padding-top:1rem}
.av-review__avatar{flex:0 0 38px;width:38px;height:38px;display:grid;place-items:center;
background:var(--av-accent);color:var(--av-on-accent);font-weight:800;font-size:.95rem}
.av-review__foot strong{display:block;font-size:.9rem;color:var(--av-on-dark)}
.av-review__foot em{font-style:normal;font-size:.78rem;color:var(--av-on-dark-soft)}

/* ---------- FAQ ---------- */
/* FAQ w stylu metrohouse-row: zadnych kart ani pudelek, tylko cienkie linie
   miedzy pytaniami. Bialy tekst na zdjeciu, zolty znacznik. Proste linie,
   zero zaokraglen, zgodnie z reszta marki. */
.av-faq{max-width:52rem;margin-inline:auto}
.av-faq__list{display:block;border-top:var(--av-border-w) solid rgba(255,255,255,.16)}
.av-faq__item{background:none;border:0;box-shadow:none;
border-bottom:var(--av-border-w) solid rgba(255,255,255,.16)}
.av-faq__item summary{list-style:none;cursor:pointer;position:relative;
display:flex;align-items:center;gap:1.5rem;padding:1.45rem 0;
font-family:var(--av-font-head);font-weight:600;
font-size:clamp(1.02rem,1.5vw,1.14rem);line-height:1.4;color:#fff;
transition:color var(--av-ease)}
.av-faq__item summary::-webkit-details-marker{display:none}
.av-faq__item summary:hover{color:var(--av-accent)}
.av-faq__item[open] summary{color:var(--av-accent)}
.av-faq__item summary:focus-visible{outline:2px solid var(--av-accent);outline-offset:4px}
/* Znacznik: kwadratowy plus, ktory obraca sie w krzyzyk i zapala na zolto. */
.av-faq__item summary::after{content:"";flex:none;margin-left:auto;
width:32px;height:32px;background:rgba(255,255,255,.1);
background-image:
  linear-gradient(currentColor,currentColor),
  linear-gradient(currentColor,currentColor);
background-size:13px 2px,2px 13px;
background-position:center,center;background-repeat:no-repeat;
transition:transform .3s cubic-bezier(.4,0,.2,1),background-color var(--av-ease)}
.av-faq__item[open] summary::after{transform:rotate(45deg);
background-color:var(--av-accent);color:var(--av-on-accent)}
.av-faq__panel{overflow:hidden}
.av-faq__a{padding:0 3.5rem 1.6rem 0;border:0}
.av-faq__a p{margin:0 0 .9em;color:rgba(255,255,255,.82);font-size:1rem;line-height:1.7}
.av-faq__a p:last-child{margin-bottom:0}
.av-faq__a strong{color:#fff}
/* Bez JS panel jest po prostu widoczny, wiec tresc nigdy nie znika. */
.av-faq--js .av-faq__panel{height:0;will-change:height}
@media (prefers-reduced-motion:reduce){
  .av-faq__item summary::after{transition:none}
}
@media (max-width:620px){
  .av-faq__item summary{gap:1rem}
  .av-faq__a{padding-right:0}
}

/* ---------- Kontakt ---------- */
.av-contact__in{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,460px);gap:clamp(2rem,5vw,4rem);align-items:start}
.av-contact__list{border-top:var(--av-border-w) solid var(--av-line-dark);margin-top:.5rem}
.av-contact__list li{display:grid;grid-template-columns:120px 1fr;gap:1rem;padding:1rem 0;
border-bottom:var(--av-border-w) solid var(--av-line-dark);align-items:baseline}
.av-contact__k{font-size:.74rem;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--av-on-dark-soft)}
.av-contact__v{font-size:1.02rem;font-weight:600;color:var(--av-on-dark);text-decoration:none}
a.av-contact__v:hover{color:var(--av-accent)}
.av-contact__photo{margin-top:1.5rem}
.av-contact__photo img{width:100%;aspect-ratio:4/3;object-fit:cover;object-position:center top}
.av-contact .av-card--form{background:var(--av-surface);color:var(--av-ink)}
.av-contact .av-card--form p,.av-contact .av-card--form .av-card__sub{color:var(--av-ink-soft)}

/* ---------- Tekst SEO ---------- */
.av-seotext__grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:clamp(1.5rem,3vw,2.5rem)}
.av-seotext__grid h3{margin-bottom:.6rem}

/* ---------- Stopka ---------- */
.av-footer{background:var(--av-surface-dark);color:var(--av-on-dark-soft);
padding-block:clamp(3rem,5vw,4.5rem) 2rem;font-size:.9rem}
.av-footer__grid{display:grid;grid-template-columns:minmax(0,1.4fr) repeat(auto-fit,minmax(160px,1fr));
gap:clamp(1.75rem,4vw,3rem);padding-bottom:2.5rem;border-bottom:var(--av-border-w) solid var(--av-line-dark)}
.av-footer__name{font-family:var(--av-font-head);font-weight:800;font-size:1.15rem;
color:var(--av-on-dark);display:block;margin-bottom:.75rem;letter-spacing:-.02em}
.av-footer__desc{max-width:46ch;line-height:1.6}
.av-footer__rating{display:flex;gap:.5rem;align-items:center;font-size:.85rem;margin:0}
.av-footer__h{font-size:.76rem;font-weight:700;letter-spacing:.12em;text-transform:uppercase;
color:var(--av-on-dark);margin-bottom:1rem}
.av-footer__col li{margin-bottom:.55rem;line-height:1.5}
.av-footer__col a{text-decoration:none}
.av-footer__col a:hover{color:var(--av-accent)}
.av-footer__bar{display:flex;justify-content:space-between;gap:1rem;flex-wrap:wrap;
padding-top:1.75rem;font-size:.82rem}
.av-footer__bar p{margin:0}
.av-footer__legal{display:flex;gap:1.25rem;flex-wrap:wrap}
.av-footer__legal a{text-decoration:none}
.av-footer__legal a:hover{color:var(--av-accent)}
/* Podpis autora akcentem. Akcent na ciemnym tle ma 11,66:1 (patrz brand.json),
   wiec spokojnie niesie sie jako tekst. Zdejmujemy przy tym opacity: dziala na
   caly poddrzewo i dziecko go nie odzyska wlasnym opacity:1, wiec przy .7
   kontrast akcentu spadlby ponizej progu. */
.av-footer__credits{color:var(--av-on-dark-soft)}
.av-footer__credits a{color:var(--av-accent)}
.av-footer__credits a:hover{color:var(--av-on-dark);text-decoration:underline}

/* ---------- Sticky call bar (mobile) ---------- */
.av-callbar{display:none}
@media (max-width:900px){
.av-callbar{display:grid;grid-template-columns:1fr 1fr;position:fixed;left:0;right:0;bottom:0;z-index:120;
background:var(--av-surface-dark);border-top:var(--av-border-w) solid var(--av-line-dark);
/* Wysuwa sie z dolu z wyhamowaniem: 220 ms wspolnego --av-ease bylo tu zbyt
   nagle, belka wjezdzala skokiem w pole widzenia. */
transform:translateY(100%);
transition:transform .42s cubic-bezier(.22,.61,.36,1),opacity .42s ease;
opacity:0;will-change:transform}
.av-callbar.is-visible{transform:none;opacity:1}
@media (prefers-reduced-motion:reduce){
  .av-callbar{transition:none}
}
.av-callbar__btn{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.1rem;
min-height:60px;padding:.6rem .75rem;text-decoration:none;font-size:.76rem;font-weight:650;
letter-spacing:.04em;text-transform:uppercase;color:var(--av-on-dark)}
.av-callbar__btn strong{font-size:.95rem;letter-spacing:0;text-transform:none}
.av-callbar__btn--form{background:var(--av-accent);color:var(--av-on-accent)}
/* BEZ body{padding-bottom}: belka chowa sie, zanim stopka wejdzie na ekran
   (main.js, data-av-ctabar="footer"), wiec na dole strony niczego nie zaslania.
   Rezerwa 60 px zostawala po jej zniknieciu jako bialy pasek pod stopka (1.6.5). */
}

/* ---------- Podstrony (polityka prywatnosci itp.) ---------- */
.av-page{padding-block:clamp(3rem,6vw,5rem);max-width:820px}
.av-page__title{font-size:clamp(1.8rem,4vw,2.6rem);margin-bottom:1.5rem}
.av-page__actions{display:flex;gap:.85rem;flex-wrap:wrap;margin-top:2rem}
.av-prose h2{font-size:1.5rem;margin-top:2rem}
.av-prose h3{font-size:1.2rem;margin-top:1.5rem}
.av-prose ul,.av-prose ol{margin:0 0 1.15em 1.25rem}
.av-prose li{list-style:disc;margin-bottom:.4rem}
.av-prose ol li{list-style:decimal}

/* ---------- Breakpointy ---------- */
@media (max-width:1040px){
.av-grid--4{grid-template-columns:repeat(2,minmax(0,1fr))}
.av-about,.av-process,.av-consult,.av-contact__in{grid-template-columns:1fr}
.av-process__intro{position:static}
.av-method__item{grid-template-columns:1fr}
.av-method__item:nth-child(even) .av-method__media{order:0}
}
@media (max-width:620px){
.av-grid--3,.av-grid--4,.av-about__cards{grid-template-columns:1fr}
.av-contact__list li{grid-template-columns:1fr;gap:.2rem}
.av-band__actions .av-btn{width:100%}
.av-steps__item{grid-template-columns:1fr;gap:.5rem}
.av-footer__bar{flex-direction:column}
}

/* Kotwice pod sticky navem, bez tego CTA #kontakt chowa naglowek pod paskiem */
[id]{scroll-margin-top:96px}
.av-burger[aria-expanded="true"] span:nth-child(1){transform:translateY(7px) rotate(45deg)}
.av-burger[aria-expanded="true"] span:nth-child(2){opacity:0}
.av-burger[aria-expanded="true"] span:nth-child(3){transform:translateY(-7px) rotate(-45deg)}

/* Mikro-dowód zaufania pod przyciskiem formularza */
.av-form__proof{display:flex;align-items:center;justify-content:center;gap:.5rem;
margin:.85rem 0 0;font-size:.82rem;font-weight:600;color:var(--av-ink-soft)}
.av-form__proof .av-stars{color:var(--av-accent);font-size:.9rem}

/* ---------- Partnerzy ---------- */
.av-partners__item{background:var(--av-surface);display:flex;flex-direction:column}
.av-partners__logo{display:flex;align-items:center;justify-content:center;min-height:104px;
padding:1.35rem 1.5rem;border-bottom:var(--av-border-w) solid var(--av-line);background:var(--av-surface)}
.av-partners__logo img{max-height:44px;width:auto;filter:grayscale(1);opacity:.72;
transition:opacity var(--av-ease),filter var(--av-ease)}
.av-partners__item:hover .av-partners__logo img{filter:none;opacity:1}
.av-partners__wordmark{font-weight:700;letter-spacing:.02em;color:var(--av-ink-soft)}
.av-partners__body{padding:clamp(1.25rem,2vw,1.65rem);display:flex;flex-direction:column;gap:.4rem;flex:1}
.av-partners__role{margin:0;font-size:.72rem;font-weight:700;letter-spacing:var(--av-tracking-eyebrow);
text-transform:uppercase;color:var(--av-ink-soft)}
.av-partners__text{margin:0;font-size:.88rem;line-height:1.6;color:var(--av-ink-soft)}
.av-partners__link{margin-top:auto;padding-top:.75rem;font-size:.82rem;font-weight:650;
color:var(--av-ink);text-decoration:none;border-bottom:2px solid var(--av-accent);align-self:flex-start}
.av-partners__link:hover{color:var(--av-accent-ink)}
.av-partners__note{margin:1.5rem 0 0;text-align:center;font-size:.84rem;color:var(--av-ink-soft)}

/* ---------- Profile spolecznosciowe w stopce ---------- */
.av-footer__social{display:flex;flex-wrap:wrap;gap:.5rem;margin-top:1.15rem}
.av-footer__social a{display:inline-block;padding:.35rem .75rem;font-size:.78rem;font-weight:650;
letter-spacing:.03em;text-decoration:none;color:var(--av-on-dark);
border:var(--av-border-w) solid var(--av-line-dark);transition:all var(--av-ease)}
.av-footer__social a:hover{background:var(--av-accent);color:var(--av-on-accent);border-color:var(--av-accent)}


/* ---------- Slider (portfolio, partnerzy) ----------
   Track to scroll-snap: bez JS to zwykla przewijalna lista, z JS dochodza
   strzalki i kropki. Zadna tresc nie jest ukryta przed czytnikiem ekranu. */
.av-slider{position:relative}
.av-slider__head{display:flex;align-items:flex-end;justify-content:space-between;
gap:1.5rem;margin-bottom:clamp(1.5rem,3vw,2.25rem)}
/* Flex, nie grid: karty w portfolio maja rozne szerokosci, a grid-auto-columns
   wymusza jedna wartosc na wszystkie kolumny. Szerokosc MUSI byc sztywna
   (flex:0 0 X), inaczej karty zapadaja sie do zera przy 17 slajdach. */
/* Pasek przewijania schowany: nawigacje przejely strzalki i kropki pod trackiem,
   a systemowy suwak dokladal trzeci, niespojny element sterowania.
   Przewijanie gestem i kolkiem dziala dalej. */
.av-slider__track{display:flex;gap:clamp(1rem,2vw,1.5rem);
overflow-x:auto;scroll-snap-type:x mandatory;padding-bottom:0;
scrollbar-width:none;-ms-overflow-style:none}
.av-slider__track::-webkit-scrollbar{display:none}
.av-slider__track>*{scroll-snap-align:start;flex:0 0 var(--av-slide,300px)}
.av-slider__track:focus-visible{outline:2px solid var(--av-accent);outline-offset:4px}

.av-slider__foot{display:flex;align-items:center;justify-content:center;
gap:clamp(.75rem,2vw,1.5rem);margin-top:1.75rem}
.av-slider__nav{display:flex;align-items:center;gap:.5rem;flex-shrink:0}
.av-slider__btn{display:grid;place-items:center;width:44px;height:44px;flex-shrink:0;
background:var(--av-surface);color:var(--av-ink);cursor:pointer;
border:var(--av-border-w) solid var(--av-line);transition:all var(--av-ease)}
.av-slider__btn svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:2}
.av-slider__btn:hover:not(:disabled){background:var(--av-accent);border-color:var(--av-accent);color:var(--av-on-accent)}
.av-slider__btn:disabled{opacity:.3;cursor:default}
.av-sec--dark .av-slider__btn,.av-sec--dark .av-slider__btn{background:transparent;color:var(--av-on-dark);border-color:var(--av-line-dark)}

.av-slider__dots{display:flex;justify-content:center;align-items:center;gap:.5rem;margin:0;flex-wrap:wrap}
/* Pasek zostaje 4 px wysoki, ale sam cel dotyku ma 24 px: padding powieksza
   obszar klikalny, background-clip trzyma kolor wylacznie na tresci, a ujemny
   margines oddaje ukradzione 20 px, wiec stopka slidera nie rosnie. */
.av-slider__dot{width:28px;height:4px;padding:10px 0;margin:-10px 0;box-sizing:content-box;
background-clip:content-box;cursor:pointer;background-color:var(--av-line);
border:0;transition:background-color var(--av-ease),width var(--av-ease)}
.av-slider__dot:hover{background-color:var(--av-accent-dark)}
.av-slider__dot.is-active{background-color:var(--av-accent);width:44px}
.av-slider:not(.is-live) .av-slider__foot{display:none}

/* Portfolio: karta sprzedanej nieruchomosci */
.av-sold__item{background:var(--av-surface);border:var(--av-border-w) solid var(--av-line);
display:flex;flex-direction:column;transition:border-color var(--av-ease)}
.av-sold__item:hover{border-color:var(--av-accent)}
.av-sold__media{position:relative;overflow:hidden;background:var(--av-surface-alt)}
.av-sold__media img{width:100%;aspect-ratio:3/2;object-fit:cover;transition:transform .5s ease}
.av-sold__item:hover .av-sold__media img{transform:scale(1.04)}
.av-sold__flag{position:absolute;top:0;left:0;padding:.4rem .85rem;
background:var(--av-accent);color:var(--av-on-accent);
font-size:.7rem;font-weight:700;letter-spacing:.1em;text-transform:uppercase}
.av-sold__body{padding:1.15rem 1.25rem;border-top:var(--av-border-w) solid var(--av-line)}
.av-sold__body .av-h4{margin:0 0 .3rem;font-size:.98rem}
.av-sold__meta{margin:0;font-size:.84rem;color:var(--av-ink-soft);font-weight:650}

/* Partnerzy w sliderze: karta ma pelna wysokosc traku */
.av-slider__track .av-partners__item{border:var(--av-border-w) solid var(--av-line);height:100%}

@media (max-width:700px){
.av-slider__head{flex-direction:column;align-items:flex-start;gap:1rem}
}

/* ---------- Przerywnik parallax ----------
   Sam obraz, bez tresci i bez welonu. Zdjecie stoi, strona plynie po nim.
   clip-path przycina dziecko z position:fixed do obszaru sekcji, dzieki czemu
   tlem jest prawdziwy <img> (AVIF/WebP + srcset), a nie background-image,
   ktorego zadna wtyczka obrazkowa nie przekonwertuje. */
.av-parallax{position:relative;height:40vh;min-height:280px;max-height:520px;
overflow:hidden;background:var(--av-surface-alt)}
.av-parallax__media{position:absolute;inset:0;overflow:hidden}
.av-parallax__media img{width:100%;height:100%;object-fit:cover;object-position:center}
@supports (clip-path:inset(0)){
  .av-parallax{clip-path:inset(0)}
  .av-parallax__media{position:fixed}
}
/* Na dotyku i przy redukcji ruchu zdjecie stoi w sekcji, nie w oknie:
   position:fixed w iOS Safari powoduje skoki przy chowaniu paska adresu. */
@media (hover:none),(prefers-reduced-motion:reduce){
  .av-parallax__media{position:absolute}
}

/* ---------- Kafelki liczb: ramka + duza zolta wartosc ---------- */
.av-stats__grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1px;background:var(--av-line-dark)}
.av-stats__item{background:var(--av-surface-dark);padding:clamp(1.5rem,2.6vw,2.15rem)}
.av-stats__item dt{font-family:var(--av-font-head);font-weight:var(--av-head-weight);
font-size:clamp(2rem,3.6vw,2.9rem);line-height:1;letter-spacing:-.03em;color:var(--av-accent);
overflow-wrap:anywhere}
.av-stats__item dd{margin:.6rem 0 0;font-size:.86rem;line-height:1.5;color:var(--av-on-dark-soft)}
@media (max-width:900px){.av-stats__grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width:560px){.av-stats__grid{grid-template-columns:1fr}}

/* ---------- Zdjecie w ramce z zoltym offsetem ---------- */
.av-frame{position:relative;margin:0;border:var(--av-border-w) solid var(--av-line)}
.av-frame::before{content:"";position:absolute;inset:-14px -14px auto auto;
width:58%;height:58%;border:2px solid var(--av-accent);z-index:-1;pointer-events:none}
.av-about__side,.av-consult__media,.av-contact__photo{isolation:isolate}

/* ---------- Prezentacja oferty (zdjecia, staging) ---------- */
/* Tekst dostaje mniej miejsca, zeby suwak przed/po mogl byc wiekszy:
   to on jest dowodem w tej sekcji, a nie akapit obok niego. */
.av-staging{display:grid;grid-template-columns:minmax(0,.8fr) minmax(0,1.2fr);
gap:clamp(2rem,4vw,3.25rem);align-items:start}
.av-staging__figures{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));
gap:1.5rem;margin:2rem 0 0;padding-top:1.75rem;border-top:var(--av-border-w) solid var(--av-line-dark)}
.av-staging__figures dt{font-family:var(--av-font-head);font-weight:var(--av-head-weight);
font-size:clamp(1.7rem,3vw,2.4rem);line-height:1;letter-spacing:-.03em;color:var(--av-accent)}
.av-staging__figures dd{margin:.45rem 0 0;font-size:.84rem;line-height:1.45;color:var(--av-on-dark-soft)}
.av-staging__media{margin:0;position:relative;border:var(--av-border-w) solid var(--av-line-dark)}
.av-staging__media img{width:100%;aspect-ratio:4/3;object-fit:cover;display:block}
.av-staging__media figcaption{padding:.9rem 1.1rem;font-size:.82rem;line-height:1.5;
color:var(--av-on-dark-soft);border-top:var(--av-border-w) solid var(--av-line-dark)}
@media (max-width:1040px){.av-staging{grid-template-columns:1fr}}
/* Kolumna tekstu obok suwaka: mniejszy tytul i tekst, bez duzej przerwy
   miedzy leadem a akapitem, przycisk pod opisem (1.6.1). */
.av-staging__copy .av-h2{font-size:clamp(1.6rem,1.2rem + 1.5vw,2.25rem)}
.av-staging__copy .av-lead{font-size:1rem;margin-bottom:.9rem}
.av-staging__copy .av-shead{margin-bottom:0}
.av-staging__copy .av-prose p{font-size:.95rem}
.av-staging__cta{margin-top:1.5rem}
@media (max-width:600px){.av-staging__cta .av-btn{width:100%}}


/* ---------- Porownanie: jedna siatka, wiersze wyrownane z konstrukcji ---------- */
.av-cmp{--av-cmp-cols:minmax(150px,.85fr) minmax(0,1.15fr) minmax(0,1.15fr);
margin-top:clamp(1.75rem,3vw,2.5rem);border:var(--av-border-w) solid var(--av-line)}
.av-cmp__thead,.av-cmp__row{display:grid;grid-template-columns:var(--av-cmp-cols);align-items:stretch}
.av-cmp__thead{background:var(--av-surface-dark);color:var(--av-on-dark)}
.av-cmp__th{display:flex;flex-direction:column;gap:.3rem;justify-content:flex-end;
padding:1.1rem 1.25rem;font-size:.95rem}
.av-cmp__th--crit{font-size:.72rem;font-weight:700;letter-spacing:var(--av-tracking-eyebrow);
text-transform:uppercase;color:var(--av-on-dark-soft)}
.av-cmp__th--win{background:var(--av-accent);color:var(--av-on-accent)}
.av-cmp__th strong{font-family:var(--av-font-head);font-size:1.05rem;font-weight:var(--av-head-weight);line-height:1.25}
.av-cmp__flag{font-size:.68rem;font-weight:700;letter-spacing:.1em;text-transform:uppercase;opacity:.85}
.av-cmp__flag--muted{color:var(--av-on-dark-soft)}

.av-cmp__row+.av-cmp__row,.av-cmp__thead+.av-cmp__row{border-top:var(--av-border-w) solid var(--av-line)}
.av-cmp__row:nth-child(even){background:var(--av-surface-alt)}
.av-cmp__crit{padding:1rem 1.25rem;font-size:.82rem;font-weight:700;letter-spacing:.04em;
text-transform:uppercase;color:var(--av-ink-soft);display:flex;align-items:center}
.av-cmp__cell{display:flex;gap:.6rem;align-items:flex-start;padding:1rem 1.25rem;font-size:.94rem;line-height:1.5}
.av-cmp__cell--win{background:rgba(var(--av-accent-rgb),.09);font-weight:600;
box-shadow:inset 3px 0 0 var(--av-accent)}
.av-cmp__cell--lose{color:var(--av-ink-soft)}
.av-cmp__mark{flex:none;width:18px;height:18px;margin-top:.15rem;position:relative}
.av-cmp__mark--yes::before,.av-cmp__mark--yes::after,
.av-cmp__mark--no::before,.av-cmp__mark--no::after{content:"";position:absolute;background:currentColor}
.av-cmp__mark--yes{color:var(--av-success)}
.av-cmp__mark--yes::before{left:2px;top:9px;width:6px;height:2px;transform:rotate(45deg)}
.av-cmp__mark--yes::after{left:5px;top:6px;width:12px;height:2px;transform:rotate(-50deg)}
.av-cmp__mark--no{color:var(--av-error);opacity:.75}
.av-cmp__mark--no::before,.av-cmp__mark--no::after{left:2px;top:8px;width:14px;height:2px}
.av-cmp__mark--no::before{transform:rotate(45deg)}
.av-cmp__mark--no::after{transform:rotate(-45deg)}

@media (max-width:860px){
  .av-cmp__thead{display:none}
  .av-cmp__row{grid-template-columns:1fr}
  .av-cmp__crit{padding-bottom:.35rem;background:var(--av-surface-alt)}
  .av-cmp__row:nth-child(even){background:transparent}
  .av-cmp__cell--win{box-shadow:inset 3px 0 0 var(--av-accent)}
  .av-cmp__cell::before{font-size:.68rem;font-weight:700;letter-spacing:.1em;text-transform:uppercase;
  align-self:center;flex:none;width:3.2rem;color:var(--av-ink-soft)}
  .av-cmp__cell--win::before{content:"Z NAMI";color:var(--av-ink-soft)}
  .av-cmp__cell--lose::before{content:"SAM"}
}

/* ---------- Portfolio: wstega zebata ----------
   Duze prostokaty biegna od lewej do prawej. Nieparzyste maja zdjecie u gory
   i opis pod spodem, parzyste odwrotnie: opis u gory, zdjecie pod nim.
   Dzieki stalej wysokosci sciezki zdjecie parzystej karty zaczyna sie dokladnie
   tam, gdzie konczy sie opis nieparzystej, wiec calosc zazebia sie w rytm. */
/* 38vw daje na 1440px trzy kadry, z ktorych trzeci jest ucinany krawedzia
   ekranu. To ucinanie jest celowe: mowi uzytkownikowi, ze wstega leci dalej. */
.av-slider--portfolio{--av-pf-media:380px;--av-pf-body:122px}
/* Naglowek portfolio siedzi blizej kadrow: domyslny odstep sekcji zostawial
   dziure, ktora rozbijala zwiazek miedzy tytulem a wstega. */
.av-slider--portfolio .av-slider__head{margin-bottom:clamp(.75rem,1.5vw,1.15rem)}
.av-slider--portfolio .av-slider__head .av-shead{margin-bottom:0}
.av-slider--portfolio .av-slider__track{
  align-items:stretch;
  height:calc(var(--av-pf-media) + var(--av-pf-body));
  gap:0;   /* zdjecia maja stykac sie bez przerw */
  /* Wstega ma biec od krawedzi do krawedzi, a nie konczyc sie na kontenerze.
     Naglowek sekcji zostaje w kolumnie tekstowej. */
  width:100vw;margin-left:calc(50% - 50vw);
  padding-inline:var(--av-pad-x);scroll-padding-inline:var(--av-pad-x)}
.av-slider--portfolio .av-sold__item{
  flex:0 0 clamp(320px,38vw,560px);
  display:flex;flex-direction:column;justify-content:flex-start;
  background:none;border:0;height:100%}
.av-slider--portfolio .av-sold__media{
  flex:none;height:var(--av-pf-media);border:0;outline:0;
  background:var(--av-surface-alt)}
.av-slider--portfolio .av-sold__media img{width:100%;height:100%;aspect-ratio:auto;object-fit:cover}
.av-slider--portfolio .av-sold__item:hover .av-sold__media img{transform:scale(1.03)}

/* Opis: miasto jako mala etykieta nad ulica. Plakietka SPRZEDANE jest juz
   na zdjeciu, wiec podpis nie powtarza tej informacji drugi raz. */
.av-slider--portfolio .av-sold__body{
  flex:none;height:var(--av-pf-body);border:0;
  padding:.95rem 1rem 0;display:flex;flex-direction:column-reverse;
  justify-content:flex-end;align-items:center;text-align:center;gap:.35rem;
  border-top:2px solid var(--av-accent)}
.av-slider--portfolio .av-sold__body .av-h4{
  margin:0;font-size:1.15rem;line-height:1.2;letter-spacing:-.015em}
.av-slider--portfolio .av-sold__meta{
  margin:0;font-size:.7rem;font-weight:700;letter-spacing:var(--av-tracking-eyebrow);
  text-transform:uppercase;color:var(--av-ink-soft)}

@media (max-width:700px){
  /* Na telefonie jeden kadr na ekran, na cala szerokosc: przy 78vw sasiednie
     zdjecie zaglada zza krawedzi i rozprasza. */
  .av-slider--portfolio{--av-pf-media:62vw;--av-pf-body:104px}
  .av-slider--portfolio .av-slider__track{padding-inline:0;scroll-padding-inline:0}
  .av-slider--portfolio .av-sold__item{flex-basis:100vw}
  .av-slider--portfolio .av-sold__body{padding-inline:var(--av-pad-x)}
}

/* Plakietka siada na dolnej krawedzi kadru, tej stykajacej sie z podpisem,
   dzieki czemu plakietka i podpis czytaja sie jako jeden blok. */
.av-slider--portfolio .av-sold__flag{
  left:50%;transform:translateX(-50%);top:auto;bottom:0;
  padding:.45rem 1.1rem;letter-spacing:.14em}
.av-slider--portfolio .av-sold__media img{transition:transform .5s ease}

/* ---------- Zdjecia towarzyszace dluzszemu tekstowi ----------
   Kolumna ze zdjeciem jest krotsza od kolumny tekstu i zostawialaby pod soba
   puste pole. Sticky sprawia, ze zdjecie towarzyszy czytaniu zamiast wisiec
   u gory. Offset liczony z realnej wysokosci nawigacji, bo ona jest sticky. */


/* ---------- Plywajaca belka CTA ---------- */
.av-ctabar{position:fixed;left:0;right:0;bottom:0;z-index:110;
background:var(--av-surface-dark);color:var(--av-on-dark);
border-top:2px solid var(--av-accent);
transform:translateY(100%);transition:transform var(--av-ease)}
.av-ctabar.is-visible{transform:translateY(0)}
.av-ctabar__in{display:flex;align-items:center;justify-content:space-between;
gap:1.5rem;padding-block:.85rem;flex-wrap:wrap}
.av-ctabar__msg{margin:0;font-family:var(--av-font-head);font-weight:600;
font-size:1.02rem;line-height:1.3}
.av-ctabar__actions{display:flex;gap:.75rem;flex-shrink:0}
.av-ctabar .av-btn{min-height:44px;padding:.6rem 1.2rem;font-size:.9rem}
.av-ctabar .av-btn--ghost{color:var(--av-on-dark);border-color:rgba(255,255,255,.4)}
/* Przycisk tylko z ikona, w zieleni WhatsAppa: znak rozpoznawalny bez podpisu.
   Selektor musi byc podwojny, bo ".av-ctabar .av-btn" wyzej ustawia padding
   1.2rem i przy pojedynczej klasie zostawalo na ikone 5 px.
   Zielen na tle belki ma 8.91:1, wiec obrys przycisku jest czytelny; bialy
   znak w srodku to lockup marki. */
.av-ctabar .av-ctabar__wa{display:inline-flex;align-items:center;justify-content:center;
width:48px;min-height:48px;padding:0;flex:none;
background:#25d366;border-color:#25d366;color:#fff}
.av-ctabar .av-ctabar__wa:hover{background:#1ebe5d;border-color:#1ebe5d;color:#fff}
.av-ctabar .av-ctabar__wa svg{width:26px;height:26px}
.av-ctabar .av-btn--ghost:hover{background:var(--av-on-dark);color:var(--av-ink)}
/* Na mobile rolę belki pełni av-callbar, dwa paski na raz zjadłyby ekran. */
@media (max-width:900px){.av-ctabar{display:none}}
@media (prefers-reduced-motion:reduce){.av-ctabar{transition:none}}

/* ---------- Kroki procesu ze zdjeciem ---------- */
.av-steps__media{overflow:hidden;background:var(--av-surface-alt)}
.av-steps__media img{width:100%;height:100%;min-height:200px;object-fit:cover;object-position:var(--av-step-pos,center top);display:block;
transition:transform .5s ease}
.av-steps__item:hover .av-steps__media img{transform:scale(1.03)}
.av-steps__body{padding:clamp(1.25rem,2.5vw,1.9rem) clamp(1.25rem,2.5vw,1.9rem) clamp(1.25rem,2.5vw,1.9rem) 0}
.av-steps__body p{margin:0;color:var(--av-ink-soft);line-height:1.6}
.av-steps__body .av-h3{margin-bottom:.5rem}
@media (max-width:820px){
  .av-steps__item{grid-template-columns:1fr}
  .av-steps__media img{min-height:180px;max-height:240px}
  .av-steps__body{padding:1.25rem}
}


/* ---------- Sekcja na zdjeciu (liczby, FAQ) ----------
   Zdjecie jako <img>, nie background-image: tla CSS nie przechodza przez
   konwersje do AVIF/WebP w zadnej metodzie Imagify. */
.av-sec--photo{position:relative;isolation:isolate;
background:var(--av-surface-dark);color:var(--av-on-dark)}
.av-sec__bg{position:absolute;inset:0;z-index:-2;overflow:hidden}
.av-sec__bg img{width:100%;height:100%;object-fit:cover;object-position:center}
.av-sec--photo::after{content:"";position:absolute;inset:0;z-index:-1;
background:rgba(10,12,13,var(--av-scrim,.86))}
.av-sec--photo .av-h2,.av-sec--photo .av-h3{color:var(--av-on-dark)}
.av-sec--photo .av-lead{color:var(--av-on-dark-soft)}
.av-sec--photo .av-eyebrow{color:var(--av-accent)}

/* Kafelki liczb na zdjeciu */
.av-sec--photo .av-stats__grid{background:transparent;gap:clamp(1rem,2vw,1.5rem)}
.av-sec--photo .av-stats__item{background:rgba(255,255,255,.05);
border:var(--av-border-w) solid rgba(255,255,255,.14);
padding:clamp(1.35rem,2.4vw,1.9rem);display:flex;flex-direction:column;gap:.7rem}
.av-stats__top{display:flex;align-items:flex-start;justify-content:space-between;gap:1rem}
.av-stats__value{margin:0;font-family:var(--av-font-head);font-weight:var(--av-head-weight);
font-size:clamp(1.9rem,3.4vw,2.7rem);line-height:1;letter-spacing:-.03em;color:var(--av-accent)}
.av-stats__icon{flex:none;display:grid;place-items:center;width:40px;height:40px;
border:var(--av-border-w) solid rgba(var(--av-accent-rgb),.45);color:var(--av-accent)}
.av-stats__icon svg{width:20px;height:20px}
.av-stats__label{margin:0;font-size:.88rem;line-height:1.5;color:var(--av-on-dark-soft)}


/* Formularz kontaktowy jedzie z uzytkownikiem przy dlugiej liscie danych obok */
@media (min-width:1041px){
  .av-contact__form{position:sticky;top:calc(var(--av-nav-h,80px) + 1.5rem)}
}

/* ---------- Plakietki social na zdjeciu w kontakcie ---------- */
.av-contact__photo{position:relative}
.av-contact__social{position:absolute;right:.85rem;bottom:.85rem;z-index:2;
display:flex;gap:.5rem;margin:0;padding:0;list-style:none}
.av-contact__social a{display:grid;place-items:center;width:40px;height:40px;
background:rgba(10,12,13,.72);color:#fff;
border:var(--av-border-w) solid rgba(255,255,255,.28);
transition:background var(--av-ease),color var(--av-ease),border-color var(--av-ease)}
.av-contact__social a:hover{background:var(--av-accent);color:var(--av-on-accent);border-color:var(--av-accent)}
.av-contact__social svg{width:19px;height:19px}

/* Zamkniecie belki: delikatne, w prawym rogu, nie konkuruje z CTA */
.av-ctabar__in{position:relative;padding-right:2.5rem}
.av-ctabar__close{position:absolute;right:0;top:50%;transform:translateY(-50%);
display:grid;place-items:center;width:32px;height:32px;padding:0;cursor:pointer;
background:none;border:0;color:var(--av-on-dark-soft);opacity:.65;
transition:opacity var(--av-ease),color var(--av-ease)}
.av-ctabar__close:hover{opacity:1;color:var(--av-accent)}
.av-ctabar__close svg{width:17px;height:17px}

/* ---------- Tasma logotypow partnerow ----------
   Jeden tor, lista w srodku dwa razy, przesuniecie o -50% szerokosci toru.
   Przy -50% druga kopia trafia dokladnie tam, gdzie stala pierwsza, wiec
   petla jest bezszwowa niezaleznie od liczby logotypow i szerokosci okna. */
.av-marquee{padding-block:clamp(1rem,2vw,1.5rem);
border-block:var(--av-border-w) solid var(--av-line);background:var(--av-surface);
overflow-x:clip}
.av-marquee__title{display:none;margin:0 0 1.5rem;text-align:center;font-size:.72rem;font-weight:700;
letter-spacing:var(--av-tracking-eyebrow);text-transform:uppercase;color:var(--av-ink-soft)}
.av-marquee__viewport{overflow-x:clip;overflow-y:visible;
-webkit-mask-image:linear-gradient(90deg,transparent,#000 8%,#000 92%,transparent);
mask-image:linear-gradient(90deg,transparent,#000 8%,#000 92%,transparent)}
.av-marquee__track{display:flex;align-items:center;width:max-content;
margin:0;padding:0;list-style:none;gap:clamp(2.5rem,5vw,4.5rem);
animation:av-marquee 40s linear infinite}
/* Tasma jedzie caly czas: zadnego zatrzymywania ani reakcji na kursor. */
.av-marquee__track li{flex:0 0 auto;display:flex;align-items:center;position:relative}
/* Wszystkie pliki logo maja identyczne plotno 640x180 z wyrownana masa
   optyczna znaku, wiec sama wysokosc daje juz rowny rzad. max-width jest
   celowo zdjety: wczesniej dusil szerokie wordmarki do polowy wysokosci. */
.av-marquee__track img{height:calc(64px * var(--av-logo-scale,1));width:auto;max-width:none;object-fit:contain;
/* Domyslnie szarosc, kolor dopiero pod kursorem: rzad logotypow ma byc tlem
   dla tresci, a nie piecioma konkurencyjnymi paletami tuz pod hero. */
filter:grayscale(1);opacity:.62;
transition:filter var(--av-ease),opacity var(--av-ease)}
.av-marquee__track li:hover img,
.av-marquee__track li:focus-within img{filter:none;opacity:1}
@media (prefers-reduced-motion:reduce){
  .av-marquee__track img{transition:none}
}
.av-marquee__wordmark{font-family:var(--av-font-head);font-weight:700;
letter-spacing:.02em;color:var(--av-ink-soft);white-space:nowrap}
@keyframes av-marquee{from{transform:translateX(0)}to{transform:translateX(-50%)}}
@media (prefers-reduced-motion:reduce){
  .av-marquee__track{animation:none}
  .av-marquee__viewport{overflow-x:auto;scrollbar-width:none}
  .av-marquee__viewport::-webkit-scrollbar{display:none}
}

/* ---------- Ikona w karcie gwarancji ---------- */
/* Ikona w gwarancjach: wieksza i z wypelnieniem, zeby czytala sie jako znak,
   a nie drobna ramka obok tekstu. */
.av-guarantee__item .av-stats__icon{width:56px;height:56px;margin-bottom:1.1rem;
background:var(--av-surface-dark);border-color:var(--av-surface-dark);color:var(--av-accent)}
.av-guarantee__item .av-stats__icon svg{width:28px;height:28px}
/* Karta wysrodkowana: ikona, tytul i jedno zdanie na osi (prosba klienta 1.6.0). */
.av-guarantee__item{transition:border-color var(--av-ease);display:flex;flex-direction:column;align-items:center;text-align:center}
.av-guarantee__item .av-stats__icon{margin-inline:auto}
.av-guarantee__item p{margin-bottom:0}
.av-guarantee__item:hover{border-color:var(--av-accent)}

/* ---------- Proces: karty sklejaja sie w stos (wzorzec z ROW) ----------
   Kazda karta jest sticky z offsetem rosnacym o 18px na pozycje, wiec przy
   przewijaniu nasuwaja sie na siebie jak harmonijka. Zero JavaScriptu. */
@media (min-width:1041px){
  .av-process__intro{position:sticky;top:calc(var(--av-nav-h,80px) + 1.5rem);align-self:start}
  .av-steps__item{position:sticky;
  top:calc(var(--av-nav-h,80px) + 1.5rem + var(--i,0) * 18px)}
}
@media (prefers-reduced-motion:reduce){
  .av-steps__item{position:static}
}

/* ---------- WhatsApp wychodzacy ze zdjecia w kontakcie ---------- */
/* Na desktopie przycisk nachodzi na dolna krawedz zdjecia: ma czytac sie jak
   zaproszenie do rozmowy, a nie kolejna pozycja listy. Plakietki social siedza
   w przeciwleglym rogu, wiec sie nie zderzaja. Zdjecie potrzebuje prześwitu
   pod soba, inaczej przycisk zaslania pierwszy wiersz listy kontaktowej. */
.av-contact__photo{overflow:visible;margin-bottom:3rem}
.av-contact__wa{position:absolute;left:1.15rem;bottom:-1.5rem;z-index:3;
display:inline-flex;align-items:center;gap:.5rem;
min-height:46px;padding:.65rem 1.15rem;font-size:.9rem;
box-shadow:0 10px 24px rgba(10,12,13,.35)}
.av-contact__wa svg{width:18px;height:18px;flex:none}
@media (max-width:560px){
  /* Na telefonie oba elementy wchodza w normalny przeplyw pod zdjeciem:
     przycisk na pelna szerokosc nachodzil na plakietki przyklejone do rogu. */
  .av-contact__photo{display:flex;flex-direction:column;gap:.85rem;margin-bottom:0}
  .av-contact__photo img{order:0}
  .av-contact__social{position:static;order:1;justify-content:center;margin:.85rem 0 0;gap:.65rem}
  /* Poza zdjeciem plakietki nie konkuruja juz z fotografia, wiec moga byc
     wieksze: na dotyk 48 px to wygodny cel. */
  .av-contact__social a{background:rgba(255,255,255,.08);width:48px;height:48px}
  .av-contact__social svg{width:23px;height:23px}
  .av-contact__wa{position:static;order:2;width:100%;justify-content:center;
  margin:0;box-shadow:none}
  /* Ramka nalezy do zdjecia, nie do calej kolumny. Gdy plakietki i przycisk
     wchodza w przeplyw, obramowany <figure> rosnie razem z nimi i wyglada,
     jakby przyciski wyjezdzaly ze zdjecia. Dlatego na mobile ramke przejmuje
     sam obrazek, a ozdobny naroznik znika: nie ma juz do czego przylegac. */
  .av-contact__photo{border:0}
  .av-contact__photo::before{display:none}
  .av-contact__photo img{border:var(--av-border-w) solid var(--av-line-dark)}
}

/* ---------- Suwak przed/po (home staging) ---------- */
.av-ba{margin:0}
.av-ba__frame{position:relative;overflow:hidden;user-select:none;
border:var(--av-border-w) solid var(--av-line-dark);background:var(--av-surface-dark)}
.av-ba__after,.av-ba__before{display:block}
.av-ba__after img,.av-ba__before img{width:100%;aspect-ratio:3/2;object-fit:cover;display:block}
/* Warstwa "przed" lezy na "po" i jest przycinana szerokoscia. Bez JS ma 50%. */
.av-ba__before{position:absolute;inset:0;width:50%;overflow:hidden}
.av-ba__before img{width:auto;height:100%;max-width:none}
.av-ba__frame{--av-ba-w:100%}
.av-ba__label{position:absolute;top:.85rem;padding:.35rem .8rem;
font-size:.7rem;font-weight:700;letter-spacing:.14em;text-transform:uppercase;
background:rgba(10,12,13,.82);color:#fff}
.av-ba__label--before{left:.85rem}
.av-ba__label--after{right:.85rem;background:var(--av-accent);color:var(--av-on-accent)}
.av-ba__handle{position:absolute;top:0;bottom:0;left:50%;width:2px;
background:var(--av-accent);transform:translateX(-1px);pointer-events:none}
.av-ba__grip{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);
display:grid;place-items:center;width:44px;height:44px;
background:var(--av-accent);color:var(--av-on-accent);
box-shadow:0 4px 16px rgba(10,12,13,.4)}
.av-ba__grip svg{width:20px;height:20px}
/* Suwak lezy na calym kadrze i jest niewidoczny: obsluge wizualna przejmuje uchwyt. */
.av-ba__range{position:absolute;inset:0;width:100%;height:100%;margin:0;
opacity:0;cursor:ew-resize;appearance:none;background:none}
.av-ba__range:focus-visible{opacity:1;outline:3px solid var(--av-accent);outline-offset:-3px}
.av-ba:not(.is-live) .av-ba__handle{display:none}
.av-ba__hint{margin:.9rem 0 0;font-size:.82rem;color:var(--av-on-dark-soft)}

/* Numer w kolumnie procesu: sam z siebie wyglada jak przypadkowa liczba,
   wiec dostaje etykiete i wyraznie czyta sie jako druga sciezka kontaktu. */
.av-process__tel{display:flex;flex-direction:column;gap:.15rem;margin-top:1.5rem;
padding-top:1.25rem;border-top:var(--av-border-w) solid var(--av-line)}
.av-process__tel-label{font-size:.72rem;font-weight:700;
letter-spacing:var(--av-tracking-eyebrow);text-transform:uppercase;color:var(--av-ink-soft)}
.av-process__tel a{font-family:var(--av-font-head);font-weight:700;
font-size:1.3rem;letter-spacing:-.01em;text-decoration:none;color:var(--av-ink)}
.av-process__tel a:hover{color:var(--av-accent-ink)}

/* CTA na przerywniku parallax: pojawia sie tylko tam, gdzie config je poda,
   wiec nie kazdy divider zamienia sie w kolejne wezwanie do dzialania. */
.av-parallax--cta{display:grid;place-items:center}
.av-parallax--cta::before{content:"";position:absolute;inset:0;z-index:1;
background:linear-gradient(rgba(10,12,13,.28),rgba(10,12,13,.62))}
.av-parallax__cta{position:relative;z-index:2;text-align:center;
padding-inline:var(--av-pad-x);max-width:44rem}
.av-parallax__cta p{margin:0 0 1.25rem;font-family:var(--av-font-head);
font-weight:var(--av-head-weight);line-height:1.2;letter-spacing:-.02em;
font-size:clamp(1.35rem,3vw,2.15rem);color:#fff;text-shadow:0 2px 16px rgba(10,12,13,.6)}

/* ---------- Dlaczego my: zdjecie agenta + kafelki 2 w rzedzie ----------
   Uklad z metrohouse-row. Zdjecie jest przyklejone, bo kolumna zalet jest
   od niego dluzsza i inaczej zostawialaby pod nim puste pole. */
.av-why{display:grid;gap:1px;background:var(--av-line-dark);
grid-template-columns:repeat(3,minmax(0,1fr))}
.av-why--photo{background:none;gap:clamp(1.75rem,3.5vw,3rem);
grid-template-columns:minmax(0,.8fr) minmax(0,1.2fr);align-items:start}
.av-why__media{position:relative;margin:0;isolation:isolate;
border:var(--av-border-w) solid var(--av-line-dark)}
/* 4:5 zamiast 3:4: przy 3:4 figura miala 736px, czyli tyle co cale okno po
   odjeciu nawigacji, wiec przyklejenie nie mialo czego przewijac. */
.av-why__media img{width:100%;aspect-ratio:var(--av-why-ratio,4/5);object-fit:cover;object-position:var(--av-why-pos,center top);display:block}
/* Zolta ramka offsetowa: ten sam akcent, co przy zdjeciu w sekcji o nas. */
.av-why__media::before{content:"";position:absolute;inset:auto auto -14px -14px;
width:58%;height:42%;border:2px solid var(--av-accent);z-index:-1;pointer-events:none}
.av-why__media figcaption{padding:1.15rem 1.25rem;background:var(--av-surface-dark-alt);
border-top:var(--av-border-w) solid var(--av-line-dark)}
.av-why__media blockquote{margin:0;font-size:.95rem;line-height:1.6;color:var(--av-on-dark)}
.av-why__media cite{display:block;margin-top:.6rem;font-style:normal;font-size:.76rem;
font-weight:700;letter-spacing:var(--av-tracking-eyebrow);text-transform:uppercase;color:var(--av-accent)}

.av-why__grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));
gap:1px;background:var(--av-line-dark);margin:0;padding:0;list-style:none}
.av-why__item{background:var(--av-surface-dark);position:relative;
padding:clamp(1.35rem,2.4vw,1.9rem);display:flex;flex-direction:column;gap:.45rem}
.av-why__num{font-family:var(--av-font-head);font-weight:var(--av-head-weight);
font-size:.85rem;letter-spacing:.1em;color:var(--av-accent)}
.av-why__item .av-h4{margin:0;color:var(--av-on-dark)}
.av-why__item p{margin:0;font-size:.9rem;line-height:1.6;color:var(--av-on-dark-soft)}
.av-why__badge{align-self:flex-start;margin-top:auto;padding-top:.6rem;
font-size:.68rem;font-weight:700;letter-spacing:var(--av-tracking-eyebrow);
text-transform:uppercase;color:var(--av-accent)}


@media (max-width:1040px){
  .av-why,.av-why--photo{grid-template-columns:1fr}
  .av-why__media{position:relative;max-width:420px}
}
@media (max-width:620px){
  .av-why__grid{grid-template-columns:1fr}
}

/* Kontakt obok CTA na przerywniku */
.av-parallax__cta{max-width:52rem}
.av-parallax__actions{display:flex;align-items:center;justify-content:center;
gap:clamp(1rem,3vw,2.25rem);flex-wrap:wrap}
/* Telefon i mail jeden pod drugim, ikona po lewej: pionowy uklad czyta sie
   jak wizytowka, a nie jak dwa przypadkowe linki obok przycisku. */
.av-parallax__contact{display:grid;gap:.55rem;justify-items:start;
margin:0;padding:0;list-style:none;text-align:left}
.av-parallax__contact a{display:inline-flex;align-items:center;gap:.6rem;
font-family:var(--av-font-head);font-weight:650;font-size:1.02rem;
color:#fff;text-decoration:none;transition:color var(--av-ease)}
.av-parallax__contact svg{width:19px;height:19px;flex:none;color:var(--av-accent)}
.av-parallax__contact a span{border-bottom:2px solid rgba(var(--av-accent-rgb),.45);padding-bottom:.12rem;
transition:border-color var(--av-ease)}
.av-parallax__contact a:hover{color:var(--av-accent)}
.av-parallax__contact a:hover span{border-color:var(--av-accent)}
@media (max-width:620px){
  .av-parallax__actions{flex-direction:column-reverse}
  .av-parallax__contact{justify-items:center;text-align:center}
}

/* ---------- Konsultacja: dociagnieta do jezyka reszty strony ---------- */
/* Plakietka nachodzi na prawa krawedz zdjecia, po stronie tekstu: prowadzi
   wzrok z fotografii do tresci, zamiast wisiec w lewym rogu. */
.av-consult__badge{position:absolute;right:-1.25rem;bottom:1.5rem;z-index:2;
display:inline-flex;align-items:center;gap:.65rem;
background:var(--av-accent);color:var(--av-on-accent);
padding:.7rem 1.2rem;font-family:var(--av-font-head);font-size:.88rem;font-weight:700;
line-height:1.2;letter-spacing:.01em;box-shadow:0 10px 26px rgba(10,12,13,.4)}
.av-consult__badge::before{content:"";flex:none;width:9px;height:9px;
background:var(--av-on-accent)}
@media (max-width:1040px){
  .av-consult__badge{right:auto;left:1.15rem;bottom:-1.1rem}
}
/* Korzysci jako numerowana lista: to jest agenda spotkania, wiec kolejnosc
   niesie znaczenie, a numer czyta sie lepiej niz kolejny ptaszek. */
.av-consult__gains{display:grid;gap:1px;background:var(--av-line-dark);
margin:1.75rem 0 0;padding:0;list-style:none;
border-block:var(--av-border-w) solid var(--av-line-dark)}
.av-consult__gains li{display:grid;grid-template-columns:auto 1fr;gap:1rem;
align-items:baseline;background:var(--av-surface-dark);
padding:.95rem .25rem;color:var(--av-on-dark);font-size:.97rem;line-height:1.55}
.av-consult__gain-num{font-family:var(--av-font-head);font-weight:var(--av-head-weight);
font-size:.82rem;letter-spacing:.1em;color:var(--av-accent)}
.av-consult__media{position:relative;margin:0 0 2.25rem;isolation:isolate;overflow:visible;
border:var(--av-border-w) solid var(--av-line-dark)}
.av-consult__media::before{content:"";position:absolute;inset:-14px -14px auto auto;
width:56%;height:40%;border:2px solid var(--av-accent);z-index:-1;pointer-events:none}
.av-consult .av-sec__actions{margin-top:1.9rem}

/* FAQ na zdjeciu: karty zostaja kryjace, wiec czytelnosc nie zalezy od kadru. */

/* ---------- Stopka na telefonie ----------
   Kolumny obok siebie na waskim ekranie daja cztery drabinki po dwa slowa.
   Na mobile ustawiamy je jedna pod druga i centrujemy, zeby czytalo sie
   jak podpis, a nie jak rozsypana tabela. */
@media (max-width:700px){
  .av-footer__grid{grid-template-columns:1fr;gap:2rem;text-align:center}
  .av-footer__brand{align-items:center}
  /* Logo jest obrazkiem, wiec text-align:center go nie dotyczy. */
  .av-footer__logo{margin-inline:auto}
  .av-footer__desc{margin-inline:auto;max-width:46ch}
  .av-footer__social{justify-content:center}
  .av-footer__col ul{display:flex;flex-wrap:wrap;justify-content:center;gap:.5rem 1.15rem}
  .av-footer__col li{margin:0}
  .av-footer__h{margin-bottom:.75rem}
  .av-footer__bar{flex-direction:column;align-items:center;gap:.75rem;text-align:center}
  .av-footer__legal{display:flex;flex-wrap:wrap;justify-content:center;gap:.5rem 1rem}
}

/* ---------- Akcent w tresci ----------
   <span class="acc"> wyroznia kluczowa frazę w zbitym akapicie. Kolor dobrany
   pod tlo: na jasnym idzie ciemniejszy wariant zoltego (5,94:1), na ciemnym
   czysty akcent marki (11,66:1). Samo pogrubienie ginie w dlugim tekscie. */
/* Zolty #fecc00 ma na bialym 1,52:1, wiec nie moze byc kolorem tekstu.
   Zamiast barwic litery na ciemne zloto, zostawiamy je czytelne i podkreslamy
   czystym kolorem marki. Akcent jest widoczny, tekst nadal spelnia WCAG. */
.acc{color:var(--av-ink);font-weight:650;
box-shadow:inset 0 -.42em 0 rgba(var(--av-accent-rgb),.35)}
.av-sec--dark .acc,.av-sec--photo .acc,.av-parallax .acc,
.av-hero--bg .acc,.av-footer .acc,.av-exit .acc{color:var(--av-accent);box-shadow:none}
.av-prose .acc,.av-lead .acc{font-weight:650}

/* Dane kontaktowe w kolumnie procesu */
.av-process__contact{display:grid;gap:.7rem;margin:1.5rem 0 0;padding-top:1.35rem;
list-style:none;border-top:var(--av-border-w) solid var(--av-line)}
.av-process__contact li{display:grid;grid-template-columns:auto 1fr;gap:.8rem;align-items:center}
/* Czysty zolty na bialym ma 1,52:1, czyli ponizej progu 3:1 dla elementow
   graficznych. Ikona dostaje wiec ciemna podkladke: kolor marki zostaje
   dokladnie taki, jaki ma byc, a kontrast rosnie do 11,66:1. */
.av-process__contact li::before{content:"";grid-row:1;grid-column:1;
width:34px;height:34px;background:var(--av-surface-dark)}
.av-process__contact svg{grid-row:1;grid-column:1;width:17px;height:17px;
place-self:center;color:var(--av-accent)}
.av-process__contact a,.av-process__contact span{font-size:.94rem;line-height:1.45;
color:var(--av-ink);text-decoration:none}
.av-process__contact a:hover{color:var(--av-accent-ink);text-decoration:underline}

/* ---------- Przyklejone zdjecia w sekcjach z dluzszym tekstem ----------
   CELOWO na samym koncu pliku. Reguly bazowe tych elementow ustawiaja
   position:relative dla ramek offsetowych; przy tej samej specyficznosci
   wygrywa deklaracja pozniejsza, wiec sticky musi stac jako ostatnie.
   Sticky sam ustanawia kontekst pozycjonowania, wiec ::before dziala dalej. */
@media (min-width:1041px){
  .av-about__side,
  .av-why__media,
  .av-consult__media{position:sticky;top:calc(var(--av-nav-h,80px) + 1.5rem)}
}

/* ---------- Popup wyjscia ---------- */
.av-exit{position:fixed;inset:0;z-index:200;display:grid;place-items:center;
padding:var(--av-pad-x)}
/* KRYTYCZNE: [hidden] i .av-exit maja te sama specyficznosc, wiec display:grid
   z reguly klasowej wygrywal z domyslnym display:none. Popup zostawal wtedy
   nad cala strona jako przezroczysta warstwa i przechwytywal wszystkie klikniecia.
   Ta deklaracja musi tu byc. */
.av-exit[hidden]{display:none}
.av-exit__overlay{position:absolute;inset:0;background:rgba(8,10,11,.72);
opacity:0;transition:opacity .28s var(--av-ease)}
.av-exit__dialog{position:relative;display:grid;
grid-template-columns:minmax(0,320px) minmax(0,1fr);
width:min(880px,100%);max-height:94svh;overflow:auto;
background:var(--av-surface-dark);color:var(--av-on-dark);
border-top:3px solid var(--av-accent);
box-shadow:0 30px 80px rgba(8,10,11,.55);
opacity:0;transform:translateY(14px) scale(.985);
transition:opacity .3s var(--av-ease),transform .3s var(--av-ease)}
.av-exit.is-open .av-exit__overlay{opacity:1}
.av-exit.is-open .av-exit__dialog{opacity:1;transform:none}
.av-exit__dialog:focus{outline:none}

/* Kolumna boczna: zdjecie zabiera cala wolna wysokosc, a plakietka i kontakt
   tylko tyle, ile potrzebuja. Wysokosc dyktuje formularz w drugiej kolumnie,
   wiec zdjecie samo dopasowuje sie do okna zamiast stac na sztywnej wartosci. */
.av-exit__aside{position:relative;display:flex;flex-direction:column;
background:var(--av-surface-dark-alt)}
/* Zdjecie i plakietka ida od krawedzi do krawedzi kolumny; wlasny odstep
   dostaje dopiero lista kontaktowa. Ramka i padding wokol zdjecia robily
   z niego obrazek w obrazku. */
/* Zdjecie NIE dyktuje wysokosci okna: img jest absolutny, wiec kolumna ma
   tyle, ile formularz obok. Wczesniej pionowe zdjecie mialo naturalne ~600 px,
   okno 787 px nie miescilo sie na laptopach (768-864 px) i trzeba bylo przewijac. Zdjecie bierze cala wolna wysokosc kolumny (flex:1, 1.6.8), plakietka i kontakt stoja pod nim.
   Kadr od gory, nadmiar schodzi z dolu; plakietka i kontakt wyzej. */
.av-exit__photo{position:relative;flex:1 1 auto;min-height:170px;margin:0;overflow:hidden}
.av-exit__photo img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;
object-position:var(--av-exit-photo-pos,center top);display:block}


/* Plakietka jako pelny akcent, nie sam zolty tekst: na tej kolumnie ma byc
   jedynym mocnym punktem i prowadzic wzrok do danych kontaktowych. */
.av-exit__badge{flex:none;display:flex;align-items:center;gap:.5rem;margin:0;
padding:.7rem clamp(1rem,2vw,1.35rem);background:var(--av-accent);color:var(--av-on-accent);
font-size:.72rem;font-weight:800;line-height:1.25;
letter-spacing:var(--av-tracking-eyebrow);text-transform:uppercase}
.av-exit__badge svg{flex:none;width:16px;height:16px}

/* Wiekszy odstep od dolu podnosi plakietke i kontakt nad krawedz okna,
   zdjecie oddaje te wysokosc (flex:1). Wzorzec: kwadrat-warszawski 1.17.3. */
.av-exit__contact{flex:none;display:grid;gap:.45rem;list-style:none;
margin:0;padding:clamp(1rem,2vw,1.35rem) clamp(1rem,2vw,1.35rem) clamp(1.75rem,4svh,2.5rem)}
.av-exit__who{font-family:var(--av-font-head);font-weight:700;font-size:1rem;
color:var(--av-on-dark);margin-bottom:.1rem}
.av-exit__contact a{display:flex;align-items:center;gap:.55rem;
font-size:.92rem;color:var(--av-on-dark);text-decoration:none;
transition:color var(--av-ease)}
.av-exit__contact a svg{flex:none;width:16px;height:16px;color:var(--av-accent);
transition:color var(--av-ease)}
.av-exit__contact a:hover{color:var(--av-accent)}
.av-exit__contact a span{min-width:0;overflow-wrap:anywhere}

/* Pion liczony od wysokosci okna (kwadrat-warszawski 1.17.3): staly padding
   na laptopie 1366x768 przelewal formularz za max-height i wracal pasek. */
.av-exit__body{padding:clamp(1.1rem,3svh,2.25rem) clamp(1.5rem,3vw,2.25rem)}
/* Okno ma sie miescic bez przewijania na laptopie 1366x768 (okno ~690 px).
   Formularz w popupie jest gestszy niz na stronie: nizsze pola, mniejsze
   odstepy, pusty wiersz statusu nie zajmuje miejsca (bez display:none - to region aria-live i musi ogłosić wynik). */
.av-exit__body .av-eyebrow{margin-bottom:.6rem}
.av-exit__body .av-field{margin-bottom:.6rem}
.av-exit__body .av-field__label{margin-bottom:.25rem}
.av-exit__body .av-field input{min-height:0;height:46px;padding-block:.5rem}
.av-exit__body .av-consent{margin-bottom:.9rem}
.av-exit__body .av-btn{min-height:50px;padding-block:.75rem}
.av-exit__body .av-form__proof,.av-exit__body .av-form__note{margin-top:.6rem}
.av-exit__body .av-form__status:empty{min-height:0;margin:0}
.av-exit__title{font-family:var(--av-font-head);font-weight:var(--av-head-weight);
font-size:clamp(1.2rem,1.9vw,1.55rem);line-height:1.2;letter-spacing:-.02em;
white-space:nowrap;margin:0 0 1.1rem;color:var(--av-on-dark)}
.av-exit__text{margin:0 0 .9rem;font-size:.95rem;line-height:1.6;color:var(--av-on-dark-soft)}
.av-exit__body .av-field__label{color:var(--av-on-dark-soft)}
.av-exit__body .av-field input{background:rgba(255,255,255,.06);
border-color:rgba(255,255,255,.34);color:#fff}
.av-exit__body .av-field input::placeholder{color:rgba(255,255,255,.55)}
.av-exit__body .av-consent,.av-exit__body .av-form__note{color:var(--av-on-dark-soft)}
.av-exit__body .av-consent a,.av-exit__body .av-form__note a{color:var(--av-accent)}

.av-exit__close{position:absolute;right:.6rem;top:.6rem;z-index:2;
display:grid;place-items:center;width:38px;height:38px;padding:0;cursor:pointer;
background:rgba(8,10,11,.55);border:0;color:#fff;
transition:background var(--av-ease),color var(--av-ease)}
.av-exit__close:hover{background:var(--av-accent);color:var(--av-on-accent)}
.av-exit__close svg{width:18px;height:18px}

@media (max-width:760px){
  .av-exit__dialog{grid-template-columns:1fr}
  .av-exit__aside{display:none}
}
@media (prefers-reduced-motion:reduce){
  .av-exit__overlay,.av-exit__dialog{transition:none}
}

/* ---------- Belka partnera (logo + rola w transakcji) ----------
   Stoi tuz nad FAQ: jasny, spokojny pas miedzy blokiem gwarancji a ciemna
   sekcja pytan. Bez przycisku, bo to dowod, a nie kolejne wezwanie do akcji. */
.av-pband{padding-block:clamp(2rem,4vw,3rem);background:var(--av-surface-alt);
border-block:var(--av-border-w) solid var(--av-line)}
.av-pband__in{display:grid;gap:clamp(1.25rem,3vw,2.5rem);align-items:center;
grid-template-columns:minmax(190px,240px) minmax(0,1fr)}
/* Znak partnera jest ciemny i na szarym tle sekcji gubi kontur. */
.av-pband__logo{display:grid;place-items:center;padding:clamp(1rem,2vw,1.5rem);
background:var(--av-surface);border:var(--av-border-w) solid var(--av-line);
border-top:3px solid var(--av-accent)}
.av-pband__logo img{width:100%;max-width:250px;height:auto;object-fit:contain}
.av-pband__copy{min-width:0}
.av-pband__copy .av-eyebrow{margin-bottom:.6rem}
.av-pband__text{margin:.65rem 0 0;max-width:64ch;color:var(--av-ink-soft)}
.av-pband__note{margin:.7rem 0 0;font-size:.85rem;color:var(--av-ink-soft);
padding-left:.9rem;border-left:2px solid var(--av-accent)}
@media (max-width:760px){
  .av-pband__in{grid-template-columns:1fr;justify-items:start}
  .av-pband__logo{width:min(100%,220px)}
}

/* ---------- Pasek marki ---------- */
/* Grafika jest zwyklym <img>, nie tlem CSS: tylko wtedy Imagify poda ja
   w AVIF/WebP. Reguly ponizej dbaja o to, zeby przy proporcji 24:1 pasek
   nie zrobil sie na telefonie kilkupikselowym paskiem. */
.av-bband{display:block;line-height:0}
.av-bband--light{background:var(--av-surface)}
.av-bband--alt{background:var(--av-surface-alt)}
.av-bband--dark{background:var(--av-surface-dark)}
.av-bband__img{display:block;width:100%;height:auto;
min-height:clamp(30px,3.4vw,40px);object-fit:cover}
.av-bband--bleed{width:100vw;margin-left:calc(50% - 50vw);
margin-block:clamp(2rem,4vw,3.25rem) clamp(1.75rem,3.5vw,2.75rem)}
/* Logotyp w stopce zastepuje nazwe pisana tekstem, wiec przejmuje jej odstep. */
.av-footer__logo{display:block;width:auto;height:clamp(38px,4.5vw,52px);margin-bottom:.85rem}
/* Kontakt w stopce: ikona jako znacznik przy tresci, tekst zawija sie
   pod nia bez wciecia, dlatego siatka, a nie flex z gapem. */
.av-footer__contact li{display:grid;grid-template-columns:18px minmax(0,1fr);
gap:.6rem;align-items:start}
.av-footer__contact svg{width:18px;height:18px;margin-top:.15rem;color:var(--av-accent)}
.av-footer__contact a{overflow-wrap:anywhere}
/* Turnstile pokazuje sie tylko przy podejrzanym ruchu, wiec zwykle ma zerowa
   wysokosc. Margines dokladamy dopiero, gdy widget cos wyrenderuje. */
.av-turnstile:not(:empty){margin-bottom:1rem}
/* Widget renderuje sie dopiero po dotknieciu formularza (main.js), a stoi nad
   pierwszym polem: bez zarezerwowanej wysokosci zepchnalby pola w trakcie
   pisania. 65px = wysokosc widgetu w rozmiarze normal. NIE usuwaj. */
.av-turnstile[data-appearance="always"]{min-height:65px;margin-bottom:1rem}
.av-turnstile iframe{max-width:100%}
/* Przewijanie wewnatrz okna nie przenosi sie na strone pod spodem. */
.av-exit__dialog{overscroll-behavior:contain}

/* Blok informacyjny na dole to przypis dla wyszukiwarki, nie tresc dla
   czytajacego. W rozmiarze tekstu glownego wyglada jak doklejony wypelniacz,
   wiec schodzi o stopien nizej i traci kontrast. */
.av-seotext__grid p{font-size:.82rem;line-height:1.65;color:var(--av-ink-soft)}
.av-seotext__grid h3{font-size:.95rem}
.av-seotext .av-sec__head{margin-bottom:1.25rem}

/* ---------- Baner zgod iubenda ---------- */
/* Ukrywamy WYLACZNIE plakietke z logo dostawcy, nie baner.
   Sam baner, przyciski zgody i odmowy oraz panel ustawien zostaja nietkniete:
   ukryty baner zgod to problem prawny, nie kosmetyczny. Zdejmujemy tylko
   sygnature "iubenda" doklejona do rogu, bo to reklama uslugi na stronie klienta.
   Regula obowiazuje na kazdym landingu. */
.iubenda-cs-brand-badge{display:none !important}

/* ---------- Wyceniarka ----------
   Uklad taki jak w sekcji kontaktu (tresc + karta z formularzem), ale na
   jasnym tle: wyceniarka stoi w srodku strony, a dwie ciemne sekcje pod rzad
   zlewaly sie w jeden blok. Karta jest lepka na duzych ekranach, bo lista
   korzysci po lewej jest dluzsza niz formularz. */
.av-wyc{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,480px);gap:clamp(2rem,5vw,4rem);align-items:start}
.av-wyc__card{background:var(--av-surface)}
.av-wyc__steps{display:grid;gap:1px;background:var(--av-line);margin:1.75rem 0 1.5rem;
border-block:var(--av-border-w) solid var(--av-line)}
.av-wyc__steps li{display:grid;grid-template-columns:auto 1fr;gap:1rem;align-items:baseline;
padding:.95rem .1rem;background:var(--av-surface-alt);font-size:.95rem}
.av-wyc__step-num{font-family:var(--av-font-head);font-weight:var(--av-head-weight);
font-size:.82rem;letter-spacing:.08em;color:var(--av-accent-ink)}
.av-wyc__embed{position:relative;aspect-ratio:3/4;min-height:520px}
.av-wyc__embed iframe{position:absolute;inset:0;width:100%;height:100%;border:0}
@media (min-width:1041px){
  .av-wyc__card{position:sticky;top:calc(var(--av-nav-h,80px) + 1.5rem)}
}
@media (max-width:1040px){
  .av-wyc{grid-template-columns:1fr}
}

/* Pola o nieruchomosci wewnatrz formularza wyceny. */
.av-wycp{margin-bottom:1rem;padding-bottom:1rem;border-bottom:var(--av-border-w) solid var(--av-line)}
.av-wycp__typ{border:0;padding:0;margin:0 0 .85rem}
.av-wycp__row{display:grid;grid-template-columns:minmax(0,1.35fr) minmax(0,1fr);gap:.75rem}
@media (max-width:420px){
  .av-wycp__row{grid-template-columns:1fr}
}
.av-chips{display:flex;flex-wrap:wrap;gap:.5rem}
.av-chip input{position:absolute;width:1px;height:1px;opacity:0;pointer-events:none}
.av-chip label{display:inline-block;padding:.5rem .9rem;font-size:.88rem;font-weight:600;
border:var(--av-border-w) solid var(--av-line);background:var(--av-surface);
color:var(--av-ink-soft);cursor:pointer;transition:background .15s,border-color .15s,color .15s}
.av-chip label:hover{border-color:var(--av-accent-ink)}
.av-chip input:checked + label{background:var(--av-accent);border-color:var(--av-accent);
color:var(--av-on-accent)}
/* Fokus musi byc widoczny takze wtedy, gdy chip jest zaznaczony: sam kolor
   tla nie mowi uzytkownikowi klawiatury, gdzie stoi kursor. */
.av-chip input:focus-visible + label{outline:3px solid rgba(var(--av-accent-rgb),.55);outline-offset:2px}
/* Selecty nie byly stylowane w bazie motywu (formularz mial tylko inputy
   i textarea), a niestylowany <select> obok stylowanego <input> wyglada
   jak pole z innego formularza. */
.av-field select{width:100%;min-height:50px;padding:.75rem 2.2rem .75rem .9rem;
font:inherit;color:var(--av-ink);background-color:var(--av-surface);
border:var(--av-border-w) solid var(--av-line);border-radius:var(--av-radius);
appearance:none;-webkit-appearance:none;cursor:pointer;
background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%235a6459' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E");
background-repeat:no-repeat;background-position:right .75rem center;background-size:1.1rem}
.av-field select:focus{border-color:var(--av-accent-ink);outline:none;
box-shadow:0 0 0 3px rgba(var(--av-accent-rgb),.28)}

/* Przypis pod sekcja przygotowania (np. zastrzezenie o zakresie prac). */
.av-method__note{margin-top:1.5rem;font-size:.9rem;color:var(--av-ink-soft);max-width:72ch}

/* Podpis "Wizualizacja" na obrazach wygenerowanych (av_viz_label). Lewy gorny
   rog, bo dolna krawedz zajmuja podpisy i cytaty. Ciemna podkladka trzyma
   kontrast bialego tekstu niezaleznie od kadru. */
/* .av-why__media celowo NIE tutaj: ta regula stoi pod blokiem "Przyklejone
   zdjecia" i zdejmowala mu sticky (1.5.9). Sticky i tak ustala kontekst
   pozycjonowania dla plakietki. */
.av-method__media,.av-steps__media{position:relative}
.av-viz{position:absolute;top:.6rem;left:.6rem;z-index:2;padding:.22rem .5rem;
font-size:.68rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;line-height:1.3;
background:rgba(var(--av-ink-rgb),.78);color:#fff;pointer-events:none}

/* Sekcje pod zgieciem: przegladarka nie liczy ich layoutu przy pierwszym
   malowaniu, wiec dluga strona nie opoznia renderu hero (_STANDARD/12 5.9).
   Hero to .av-hero, nie .av-sec, a przerywniki parallax to .av-parallax -
   obu to nie dotyczy. `auto` w contain-intrinsic-size zapamietuje prawdziwa
   wysokosc, ale DOPIERO po pierwszym renderze sekcji - przy kliknieciu w menu
   zaraz po wejsciu cel liczy sie z zastepczych 800 px i przewijanie konczy
   sie za wczesnie. .av-cv-off wlacza JS na czas skoku do kotwicy (main.js,
   "Kotwice"): jeden pelny layout, wysokosci zapamietane, klasa znika. */
.av-sec{content-visibility:auto;contain-intrinsic-size:auto 800px}
.av-cv-off .av-sec{content-visibility:visible}

/* ---------- Rolka wideo w ramce telefonu ----------
   Tresc po lewej, telefon po prawej; na telefonie ramka pod trescia.
   Ramka ma zaokraglenia mimo layout.radius 0: to przedmiot (telefon), nie
   element interfejsu, i bez promienia nie czyta sie jako telefon.
   Kadr 9:16 rezerwuje miejsce, zanim cokolwiek sie wczyta (zero CLS).
   Selektory potomne bez ">", bo Imagify owija plakat w picture (_STANDARD/05). */
.av-reel__in{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:clamp(2rem,6vw,5rem);align-items:center}
.av-reel__actions{display:flex;flex-wrap:wrap;align-items:center;gap:1rem 1.5rem}
.av-reel__ig{display:inline-flex;align-items:center;gap:.55rem;min-height:44px;
color:var(--av-on-dark);font-weight:600;text-decoration:none}
.av-reel__ig svg{width:22px;height:22px;flex:none;color:var(--av-accent)}
.av-reel__ig:hover span{text-decoration:underline;text-underline-offset:3px}
.av-reel__phone{width:clamp(230px,24vw,300px);padding:10px;border-radius:44px;
background:#0a0d0b;box-shadow:0 0 0 2px #2b332d,0 30px 60px -20px rgba(0,0,0,.65);position:relative}
.av-reel__screen{position:relative;aspect-ratio:9/16;border-radius:34px;overflow:hidden;background:#000;isolation:isolate}
.av-reel__poster,.av-reel__screen video,.av-reel__screen iframe{position:absolute;inset:0;width:100%;height:100%;border:0;display:block}
.av-reel__poster img{width:100%;height:100%;object-fit:cover;display:block}
.av-reel__screen video{object-fit:cover}
.av-reel__poster{z-index:1;transition:opacity .35s ease}
.av-reel__screen.is-playing .av-reel__poster{opacity:0;pointer-events:none}
.av-reel__island{position:absolute;top:10px;left:50%;transform:translateX(-50%);width:32%;height:22px;
border-radius:999px;background:#000;z-index:3;pointer-events:none}
.av-reel__sound{position:absolute;inset:0;z-index:2;display:flex;align-items:flex-end;justify-content:center;
padding:0 0 12%;background:transparent;border:0;cursor:pointer;transition:opacity .28s ease}
.av-reel__sound.is-hidden{opacity:0;pointer-events:none}
.av-reel__pill{display:inline-flex;align-items:center;gap:.5rem;min-height:44px;padding:.55rem 1rem;
border-radius:999px;background:rgba(0,0,0,.62);color:#fff;font-size:.88rem;font-weight:600;
-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}
.av-reel__pill svg{width:20px;height:20px;flex:none}
.av-reel__sound:focus-visible .av-reel__pill{outline:3px solid var(--av-accent);outline-offset:3px}
@media (max-width:900px){
  .av-reel__in{grid-template-columns:1fr}
  .av-reel__phone{justify-self:center;width:min(78vw,300px)}
}
@media (prefers-reduced-motion:reduce){
  .av-reel__poster,.av-reel__sound{transition:none}
}

/* ---------- Opinie: pasek oceny + dwa rzedy w przeciwne strony ----------
   Inspiracja: sekcja [opinie_google] z innej strony floty, na tokenach Arki
   (zielen, grafit, zero zaokraglen). Rzedy na cala szerokosc, krawedzie
   wygaszone maska. Animacja rusza dopiero po sklonowaniu kart (.is-ready),
   bez klonow petla przeskakiwalaby w polowie. */
/* Pasek oceny = jeden link do wszystkich opinii w Google (cala powierzchnia
   klikalna). Komorki rowne, bez pustej przerwy: ocena | liczby | strzalka.
   Na hover pasek podnosi sie, a komorka ze strzalka zalewa sie akcentem. */
.av-opinie__pasek{position:relative;display:grid;grid-template-columns:minmax(0,1.35fr) repeat(auto-fit,minmax(0,1fr));
margin:0 0 clamp(2rem,4vw,3rem);background:var(--av-surface-dark);color:var(--av-on-dark);text-decoration:none;
box-shadow:0 12px 32px rgba(var(--av-ink-rgb),.18);transition:transform .3s ease,box-shadow .3s ease}
.av-opinie__pasek::before{content:"";position:absolute;inset:0 0 auto;height:3px;
background:linear-gradient(90deg,var(--av-accent),rgba(var(--av-accent-rgb),.15))}
.av-opinie__pasek--link:hover{transform:translateY(-3px);box-shadow:0 18px 40px rgba(var(--av-ink-rgb),.26)}
.av-opinie__pasek--link:focus-visible{outline:3px solid rgba(var(--av-accent-rgb),.6);outline-offset:3px}
.av-opinie__kom{display:flex;flex-direction:column;justify-content:center;gap:.35rem;min-width:0;
padding:1.6rem clamp(1.1rem,2.4vw,2.2rem);border-right:1px solid var(--av-line-dark)}
.av-opinie__kom:last-child{border-right:0}
.av-opinie__wynik{flex-direction:row;align-items:center;justify-content:flex-start;gap:1rem}
.av-opinie__wynik strong{display:block;font-family:var(--av-font-head);font-size:clamp(2.5rem,2rem + 2vw,3.5rem);
font-weight:800;line-height:.9;letter-spacing:-.03em;margin-bottom:.45rem}
.av-opinie__wynik .av-opinie__zrodlo{font-size:1.25rem;margin:0;letter-spacing:0}
.av-opinie__stat strong{font-family:var(--av-font-head);font-size:1.8rem;font-weight:800;line-height:1;color:var(--av-accent)}
.av-opinie__stat span{font-size:.72rem;font-weight:700;letter-spacing:.12em;line-height:1.35;text-transform:uppercase;color:var(--av-on-dark-soft)}
.av-opinie__wszystkie{flex-direction:row;align-items:center;justify-content:space-between;gap:.8rem;
background:rgba(var(--av-accent-rgb),.12);color:var(--av-on-dark);
font-size:.78rem;font-weight:700;letter-spacing:.12em;line-height:1.35;text-transform:uppercase;transition:background .25s ease,color .25s ease}
.av-opinie__wszystkie svg{flex:none;transition:transform .25s ease}
.av-opinie__pasek--link:hover .av-opinie__wszystkie,.av-opinie__pasek--link:focus-visible .av-opinie__wszystkie{background:var(--av-accent);color:var(--av-on-accent)}
.av-opinie__pasek--link:hover .av-opinie__wszystkie svg{transform:translateX(4px)}
@media (max-width:1040px){
  .av-opinie__pasek{grid-template-columns:repeat(3,minmax(0,1fr))}
  .av-opinie__wynik{grid-column:1/-1;border-right:0;border-bottom:1px solid var(--av-line-dark);padding-block:1.2rem}
  .av-opinie__stat{padding-block:1rem}
  .av-opinie__stat:nth-child(4){border-right:0}
  .av-opinie__stat strong{font-size:1.45rem}
  .av-opinie__wszystkie{grid-column:1/-1;border-right:0;border-top:1px solid var(--av-line-dark);padding-block:1rem;min-height:44px}
}
@media (max-width:520px){
  .av-opinie__kom{padding-inline:.8rem}
  .av-opinie__stat span{font-size:.64rem;letter-spacing:.08em}
}
@media (prefers-reduced-motion:reduce){
  .av-opinie__pasek,.av-opinie__wszystkie svg{transition:none}
  .av-opinie__pasek--link:hover{transform:none}
}
/* Gwiazdki: critical.css ma svg{display:block} - bez nadpisania kazda gwiazdka
   z wtyczki lądowala w osobnej linii (pionowy slupek). */
.av-stars-row,.av-stars-grh{display:inline-flex;align-items:center;gap:2px;color:var(--av-accent);line-height:0}
.av-stars-grh>*{display:inline-flex;align-items:center;gap:2px;flex-wrap:nowrap}
.av-stars-row svg,.av-stars-grh svg{display:inline-block;flex:none}
.av-glogo{display:block;flex:none}
.av-sr{position:absolute !important;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}

.av-opinie__rzedy{display:grid;gap:1.25rem}
.av-orzad{--av-gap:1.25rem;overflow-x:auto;scrollbar-width:none;
-webkit-mask-image:linear-gradient(90deg,transparent,#000 5%,#000 95%,transparent);
mask-image:linear-gradient(90deg,transparent,#000 5%,#000 95%,transparent)}
.av-orzad::-webkit-scrollbar{display:none}
.av-orzad__tor{display:flex;align-items:stretch;gap:var(--av-gap);width:max-content;margin:0;
padding:.25rem clamp(1rem,4vw,2.5rem);list-style:none}
.av-orzad.is-ready{overflow:hidden}
.av-orzad.is-ready .av-orzad__tor{padding-inline:0;animation:av-orzad-jazda var(--av-orzad-czas,120s) linear infinite}
.av-orzad--rev.is-ready .av-orzad__tor{animation-direction:reverse}
.av-orzad.is-ready:hover .av-orzad__tor,.av-orzad.is-ready:focus-within .av-orzad__tor,
.av-opinie.has-modal .av-orzad__tor{animation-play-state:paused}
@keyframes av-orzad-jazda{from{transform:translateX(0)}to{transform:translateX(calc(-50% - var(--av-gap) / 2))}}
@media (prefers-reduced-motion:reduce){
  .av-orzad.is-ready{overflow-x:auto}
  .av-orzad.is-ready .av-orzad__tor{animation:none;padding-inline:clamp(1rem,4vw,2.5rem)}
}

.av-opinia{display:flex;flex-direction:column;gap:.75rem;width:min(24rem,78vw);flex:none;
padding:1.6rem;background:var(--av-surface);border:var(--av-border-w) solid var(--av-line);
transition:border-color .25s ease}
.av-opinia:hover{border-color:var(--av-accent)}
.av-opinia__gora{display:flex;align-items:center;gap:.75rem}
.av-opinia__avatar{flex:none;width:44px;height:44px;border-radius:50%;overflow:hidden;display:grid;place-items:center;
background:var(--av-accent-soft);color:var(--av-accent-ink);font-family:var(--av-font-head);font-weight:800}
.av-opinia__avatar img,.av-opinia .grh-avatar{width:100%;height:100%;object-fit:cover;display:block}
.av-opinia .grh-avatar--initials{display:grid;place-items:center;background:var(--av-accent-soft);color:var(--av-accent-ink)}
.av-opinia__kto{display:grid;min-width:0;line-height:1.3}
.av-opinia__kto strong{font-size:1rem;color:var(--av-ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.av-opinia__kto span{font-size:.8rem;color:var(--av-ink-soft)}
.av-opinia__tekst{margin:0;flex:1}
.av-opinia__tekst p{margin:0;font-size:.95rem;line-height:1.62;color:var(--av-ink-soft)}
.av-opinia__stopka{display:flex;align-items:center;justify-content:space-between;gap:.75rem;
margin-top:auto;padding-top:1rem;border-top:var(--av-border-w) solid var(--av-line)}
.av-opinia__zrodlo{display:inline-flex;align-items:center;gap:.5rem;min-height:32px;font-size:.8rem;font-weight:600;
color:var(--av-ink-soft);text-decoration:none}
a.av-opinia__zrodlo:hover{color:var(--av-accent-ink)}
.av-opinia__more{flex:none;min-height:36px;padding:.4rem .8rem;background:none;border:1px solid var(--av-accent);
color:var(--av-accent-ink);font:700 .74rem/1 var(--av-font-body);letter-spacing:.06em;text-transform:uppercase;cursor:pointer;
transition:background .25s ease,color .25s ease}
.av-opinia__more:hover{background:var(--av-accent);color:var(--av-on-accent)}
.av-opinia__more:focus-visible{outline:3px solid rgba(var(--av-accent-rgb),.55);outline-offset:2px}

/* Okno z pelna opinia. display:none, gdy zamkniete - ukryte-ale-obecne okno
   potrafi zostac elementem LCP (_STANDARD/12 5.8 "Modale kradna LCP"). */
.av-omodal{position:fixed;inset:0;z-index:9999;display:none;place-items:center;padding:clamp(1rem,4vw,3rem)}
.av-omodal.is-open{display:grid}
.av-omodal__tlo{position:absolute;inset:0;background:rgba(var(--av-ink-rgb),.78)}
.av-omodal__okno{position:relative;z-index:1;width:min(38rem,100%);max-height:84vh;overflow-y:auto;
padding:clamp(1.75rem,1rem + 2.5vw,2.75rem);background:var(--av-surface);border-top:3px solid var(--av-accent);
box-shadow:0 24px 60px rgba(0,0,0,.35)}
.av-omodal__zamknij{position:absolute;top:.75rem;right:.75rem;width:44px;height:44px;display:grid;place-items:center;
border:0;background:var(--av-surface-dark);color:#fff;cursor:pointer}
.av-omodal__zamknij:hover{background:var(--av-accent);color:var(--av-on-accent)}
.av-omodal__glowa{padding:0 3rem 1rem 0;margin-bottom:1.25rem;border-bottom:var(--av-border-w) solid var(--av-line)}
.av-omodal__autor{margin:0;font-family:var(--av-font-head);font-size:1.5rem;font-weight:800;line-height:1.2;color:var(--av-ink)}
.av-omodal__meta{margin:.2rem 0 0;font-size:.82rem;color:var(--av-ink-soft)}
.av-omodal__gwiazdki{display:inline-flex;gap:2px;margin-top:.75rem;color:var(--av-accent)}
.av-omodal__tresc{margin:0;font-size:1.05rem;line-height:1.7;color:var(--av-ink-soft);white-space:pre-line}
.av-omodal__stopka{display:flex;flex-wrap:wrap;align-items:center;gap:1rem;margin-top:1.75rem;padding-top:1.25rem;
border-top:var(--av-border-w) solid var(--av-line)}
.av-omodal__google{font-size:.82rem;font-weight:600;color:var(--av-ink-soft);text-underline-offset:3px}
body.av-omodal-lock{overflow:hidden}

/* ---------- Wyceniarka z Adresometrem (tryb .av-wyc--ado) ----------
   Po lewej lekki opis i podglad strony raportu PDF z plakietka, po prawej
   widzet. Karta widzetu bez naszego paska i paddingu - widzet ma wlasny
   wyglad w Shadow DOM. min-height rezerwuje miejsce, zanim skrypt dojedzie. */
.av-wyc--ado .av-wyc{grid-template-columns:minmax(0,.9fr) minmax(0,1.1fr);
grid-template-areas:"opis widzet" "raport widzet";grid-template-rows:auto 1fr;row-gap:0}
.av-wyc--ado .av-wyc__copy{grid-area:opis}
.av-wyc--ado .av-wyc__card{grid-area:widzet}
.av-wyc--ado .av-wyc__raportbox{grid-area:raport}
.av-wyc--ado .av-wyc__card{padding:0;background:transparent;box-shadow:none;border:0}
.av-wyc--ado .av-wyc__card::before{display:none}
/* Rezerwacja = zmierzona wysokosc widzetu Adresometru (21.09.2026): 807 px,
   ponizej ~560 px szerokosci widzet sklada sie w kolumne i ma ~1050 px.
   Za mala rezerwacja (bylo 540) = skok ukladu przy doczytaniu, a przy skoku
   do kotwicy ponizej wyceny cel uciekal o te roznice. */
.av-wyc__ado{position:relative;min-height:807px}
@media (max-width:559px){.av-wyc__ado{min-height:1050px}}
.av-wyc__ado-wait{position:absolute;inset:0;display:grid;place-items:center;margin:0;
background:var(--av-surface);border:var(--av-border-w) solid var(--av-line);color:var(--av-ink-soft);font-size:.92rem}
.av-wyc__ado.is-loaded .av-wyc__ado-wait{display:none}

.av-wyc__raport{position:relative;margin:1.75rem 0 0;width:min(100%,340px);
transform:rotate(-2.5deg);transform-origin:40% 60%}
.av-wyc__raport img{width:100%;height:auto;display:block;background:#fff;
border:var(--av-border-w) solid var(--av-line);box-shadow:0 18px 40px -18px rgba(var(--av-ink-rgb),.45)}
/* Makieta: kartka A4 narysowana CSS-em, dopoki klient nie da zrzutu raportu. */
.av-wyc__kartka{display:flex;flex-direction:column;gap:.55rem;aspect-ratio:210/297;padding:1.4rem 1.3rem;
background:#fff;border:var(--av-border-w) solid var(--av-line);box-shadow:0 18px 40px -18px rgba(var(--av-ink-rgb),.45)}
.av-wyc__kartka span{display:block;height:7px;background:var(--av-line);width:88%}
.av-wyc__kartka span:nth-child(4){width:70%}
.av-wyc__kartka span:nth-child(5){width:80%}
.av-wyc__kartka .av-wyc__kartka-logo{width:34%;height:12px;background:var(--av-accent)}
.av-wyc__kartka .av-wyc__kartka-cena{width:62%;height:26px;margin:.6rem 0 .4rem;background:var(--av-accent-soft);
border-left:4px solid var(--av-accent)}
.av-wyc__kartka .av-wyc__kartka-mapa{width:100%;height:auto;flex:1;margin:.5rem 0;
background:repeating-linear-gradient(45deg,var(--av-surface-alt) 0 10px,#fff 10px 20px);border:var(--av-border-w) solid var(--av-line)}
/* Plakietka nachodzi na prawa krawedz kartki: prowadzi wzrok do widzetu. */
.av-wyc__badge{position:absolute;right:-1.25rem;bottom:1.5rem;display:inline-flex;align-items:center;gap:.5rem;
padding:.6rem .95rem;background:var(--av-accent);color:var(--av-on-accent);
font-size:.85rem;font-weight:700;transform:rotate(2.5deg);box-shadow:0 10px 24px -10px rgba(var(--av-ink-rgb),.5)}
.av-wyc__badge svg{width:18px;height:18px;flex:none}
.av-wyc__note{margin:1.75rem 0 0;font-size:.8rem;line-height:1.5;color:var(--av-ink-soft);max-width:52ch}
/* Telefon: opis -> formularz -> podglad raportu (kolejnosc jak w HTML).
   Wczesniej duzy podglad stal przed formularzem i trzeba go bylo przewinac. */
@media (max-width:1040px){
  .av-wyc--ado .av-wyc{grid-template-columns:1fr;grid-template-areas:"opis" "widzet" "raport";row-gap:2rem}
  .av-wyc__raport{margin-inline:auto;width:min(78%,300px)}
}
@media (max-width:480px){
  .av-wyc__badge{right:-.5rem}
}

/* Stopka: e-mail w jednej linii. overflow-wrap:anywhere lamal adres
   "biuro@arka-" / "nieruchomosci.pl", choc miejsca bylo dosc; kolumna kontaktu
   bierze teraz tyle, ile potrzebuje najdluzsza pozycja (max-content). */
@media (min-width:901px){
  .av-footer__grid{grid-template-columns:minmax(0,1.3fr) minmax(0,.8fr) minmax(0,.9fr) max-content}
}
.av-footer__contact a[href^="mailto:"]{overflow-wrap:normal;white-space:nowrap}

/* ---------- Przygotowanie: slider mieszkanie / dom / dzialka (1.6.3) ----------
   Jeden rzad zamiast trzech blokow. Karty stoja w jednej komorce siatki
   (grid-area 1/1), wiec wysokosc sceny = najwyzsza karta i nic nie skacze
   przy przelaczaniu. Wejscie: zdjecie odslania sie od prawej (clip-path)
   z lekkim przyblizeniem, tekst wjezdza z lewej element po elemencie.
   Kierunek wstecz (.is-back) odwraca oba ruchy. Bez JS (.is-ready brak)
   karty stoja jedna pod druga, zakladki i pasek sa hidden. */
.av-prep{position:relative}
.av-prep__stage{display:grid;gap:clamp(1.5rem,3vw,2.5rem)}
.av-prep__slide{display:grid;grid-template-columns:minmax(0,.9fr) minmax(0,1.1fr);
background:var(--av-surface);border:var(--av-border-w) solid var(--av-line);
box-shadow:0 24px 60px -36px rgba(var(--av-ink-rgb),.45);overflow:hidden}
.av-prep__copy{padding:clamp(1.5rem,3.2vw,2.75rem);display:flex;flex-direction:column;justify-content:center;gap:.2rem}
.av-prep__num{font-family:var(--av-font-head);font-weight:800;font-size:.85rem;letter-spacing:.12em;color:var(--av-accent-ink);margin-bottom:.6rem}
.av-prep__num em{font-style:normal;color:var(--av-ink-soft);opacity:.7}
.av-prep__copy .av-h3{margin:0 0 .75rem}
.av-prep__copy p{margin:0 0 1rem;color:var(--av-ink-soft);max-width:58ch}
.av-prep__copy .av-checks{margin:0}
.av-prep__media{position:relative;margin:0;min-height:100%;overflow:hidden;background:var(--av-surface-alt)}
.av-prep__media img{width:100%;height:100%;min-height:340px;object-fit:cover;display:block}

/* Zakladki: pigulki nad karta, aktywna wypelniona akcentem. */
.av-prep__tabs{display:flex;flex-wrap:wrap;gap:.6rem;margin:0 0 1.25rem}
.av-prep__tab{display:inline-flex;align-items:center;gap:.6rem;min-height:44px;padding:.55rem 1.1rem;cursor:pointer;
background:var(--av-surface);border:var(--av-border-w) solid var(--av-line);color:var(--av-ink);
font:600 .95rem/1 var(--av-font-body);transition:background var(--av-ease),color var(--av-ease),border-color var(--av-ease)}
.av-prep__tab-num{font-family:var(--av-font-head);font-weight:800;font-size:.75rem;letter-spacing:.1em;color:var(--av-accent-ink);transition:color var(--av-ease)}
.av-prep__tab:hover{border-color:var(--av-accent)}
.av-prep__tab.is-active{background:var(--av-surface-dark);border-color:var(--av-surface-dark);color:#fff}
.av-prep__tab.is-active .av-prep__tab-num{color:var(--av-accent)}
.av-prep__tab:focus-visible,.av-prep__arrow:focus-visible{outline:3px solid rgba(var(--av-accent-rgb),.55);outline-offset:2px}

/* Pasek pod karta: notka po lewej, licznik + postep + strzalki po prawej. */
.av-prep__bar{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:1rem 2rem;margin-top:1.25rem}
.av-prep__note{margin:0;max-width:62ch;font-size:.9rem;line-height:1.55;color:var(--av-ink-soft)}
.av-prep__nav{display:flex;align-items:center;gap:.75rem;margin-left:auto}
.av-prep__count{font-family:var(--av-font-head);font-size:.9rem;color:var(--av-ink-soft);min-width:4.2em}
.av-prep__count b{color:var(--av-ink);font-weight:800}
.av-prep__progress{position:relative;width:clamp(70px,9vw,120px);height:2px;background:var(--av-line);overflow:hidden}
.av-prep__progress i{position:absolute;inset:0 auto 0 0;width:var(--av-prep-p,33%);background:var(--av-accent);
transition:width .5s cubic-bezier(.65,0,.35,1)}
.av-prep__arrow{display:grid;place-items:center;width:52px;height:52px;padding:0;cursor:pointer;
background:var(--av-surface);border:var(--av-border-w) solid var(--av-line);color:var(--av-ink);
transition:background var(--av-ease),color var(--av-ease),border-color var(--av-ease),transform var(--av-ease)}
.av-prep__arrow:hover{border-color:var(--av-ink)}
.av-prep__arrow--next{background:var(--av-accent);border-color:var(--av-accent);color:var(--av-on-accent)}
.av-prep__arrow--next:hover{background:var(--av-surface-dark);border-color:var(--av-surface-dark);color:#fff}
.av-prep__arrow svg{transition:transform var(--av-ease)}
.av-prep__arrow:hover svg{transform:translateX(-3px)}
.av-prep__arrow--next:hover svg{transform:translateX(3px)}

/* Tryb slidera (JS dolozyl .is-ready). */
.av-prep.is-ready .av-prep__stage{display:grid;gap:0}
.av-prep.is-ready .av-prep__slide{grid-area:1/1;visibility:hidden;opacity:0;pointer-events:none;
transition:opacity .45s ease,visibility 0s linear .45s}
.av-prep.is-ready .av-prep__slide.is-active{visibility:visible;opacity:1;pointer-events:auto;z-index:1;
transition:opacity .2s ease,visibility 0s}
.av-prep.is-ready .av-prep__stage{touch-action:pan-y}

.av-prep.is-anim .av-prep__slide.is-active .av-prep__media{animation:av-prep-odslon .8s cubic-bezier(.77,0,.18,1) both}
.av-prep.is-anim .av-prep__slide.is-active .av-prep__media img{animation:av-prep-zoom 1.2s cubic-bezier(.22,1,.36,1) both}
.av-prep.is-anim .av-prep__slide.is-active .av-prep__copy > *{animation:av-prep-tekst .6s cubic-bezier(.22,1,.36,1) both}
.av-prep.is-anim .av-prep__slide.is-active .av-prep__copy > :nth-child(2){animation-delay:.07s}
.av-prep.is-anim .av-prep__slide.is-active .av-prep__copy > :nth-child(3){animation-delay:.14s}
.av-prep.is-anim .av-prep__slide.is-active .av-prep__copy > :nth-child(4){animation-delay:.21s}
.av-prep.is-back .av-prep__slide.is-active .av-prep__media{animation-name:av-prep-odslon-wstecz}
@keyframes av-prep-odslon{from{clip-path:inset(0 0 0 100%)}to{clip-path:inset(0 0 0 0)}}
@keyframes av-prep-odslon-wstecz{from{clip-path:inset(0 100% 0 0)}to{clip-path:inset(0 0 0 0)}}
@keyframes av-prep-zoom{from{transform:scale(1.12)}to{transform:scale(1)}}
@keyframes av-prep-tekst{from{opacity:0;transform:translateX(-28px)}to{opacity:1;transform:none}}

@media (max-width:900px){
  .av-prep__slide{grid-template-columns:1fr}
  .av-prep__media{order:-1}
  .av-prep__media img{min-height:0;aspect-ratio:3/2}
  .av-prep__copy p{font-size:.98rem;line-height:1.6}
  .av-prep__copy .av-checks li{font-size:.92rem}
  .av-prep__tabs{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;margin-inline:calc(var(--av-pad-x) * -1);padding-inline:var(--av-pad-x)}
  .av-prep__tabs::-webkit-scrollbar{display:none}
  .av-prep__tab{flex:none}
  .av-prep__nav{margin-left:0;width:100%}
  .av-prep__progress{flex:1}
}
@media (prefers-reduced-motion:reduce){
  .av-prep.is-anim .av-prep__slide.is-active .av-prep__media,
  .av-prep.is-anim .av-prep__slide.is-active .av-prep__media img,
  .av-prep.is-anim .av-prep__slide.is-active .av-prep__copy > *{animation:none}
  .av-prep__progress i,.av-prep.is-ready .av-prep__slide{transition:none}
}
