/* Wygenerowane przez tools/wytnij-css.py z prototypu — nie edytuj recznie. */
/* Naglowek, menu, koszyk-panel, stopka, przyciski, siatka. */

    :root { --in-maxw: 1120px; --in-gut: 24px; --in-hgut: 72px; }
    * { box-sizing: border-box; }
    html, body { overflow-x: hidden; overflow-x: clip; }
    /* ═══ TŁO SERWISU — „otulenie" (13.08) ══════════════════════════════
       Klientka: strona jest za surowa i „szpitalna" od nadmiaru bieli.
       Wzór: makieta numermockup-7yoqm5hc.manus.space — tam tło NIE jest
       czystą bielą, tylko papierem (#FCFDFF) z mgłą (#E7EDF9) i dwiema
       miękkimi poświatami: turkusową i lawendową. Wszystkie te kolory są
       już w palecie Instytutu (accent #67B6C0, border #C6C4D8, primary
       #643B81) — nie dokładamy nowych barw, tylko wyprowadzamy je z kart
       na tło.

       `fixed` sprawia, że mgła stoi w miejscu przy przewijaniu i nie
       rozciąga się na całą (bardzo długą) stronę. Białe pozostają KARTY —
       i o to chodzi: dopiero na mgle zaczynają się odcinać. */
    body { font-family: var(--font-body, 'Source Sans Pro', sans-serif); margin: 0;
           color: var(--color-text, #0B1220); min-height: 100vh;
           /* Mgła #E7EDF9 z makiety klientki — jeden, równy kolor na całej
              stronie (13.08). Wcześniej był gradient; klientka wskazała
              konkretną wartość z inspektora. Białe zostają KARTY, i to one
              mają się na tej mgle odcinać. */
           background: #E7EDF9; }
    img { max-width: 100%; height: auto; display: block; }
    a { color: inherit; }
    /* ZASADA DESKTOPU: każdy moduł jest full-bleed z gutterem 72px z obu stron
       (--in-hgut), a nie zwężony do kolumny 1120px. Poniżej 1080px gutter spada
       do 24px (--in-gut). --in-maxw zostaje dla wyjątków, np. kolumny artykułu. */
    .in-wrap { max-width: none; margin: 0 auto; padding: 0 var(--in-hgut); }
    /* proza puszczona na 1900px robi linijki nie do czytania — same moduły są
       pełnej szerokości, ale akapity stojące bezpośrednio w module mają miarę */
    .in-sec > .in-wrap > .in-p,
    .in-sec > .in-wrap > .in-lead { max-width: 75ch; }
    .in-sec { padding: 72px 0; }
    .in-sec[id] { scroll-margin-top: 104px; }
    .in-sec + .in-sec { border-top: 0; }
    /* JEDNA waga dla wszystkich nagłówków — 500. Bez tej deklaracji przeglądarka
       daje im domyślne bold (700), co przy 36px robiło się ciężkie. Nie dokładamy
       font-weight przy pojedynczych modułach: tytuł kafelka ma być tej samej
       grubości co nagłówek sekcji, różnić ma je tylko rozmiar. */
    :root { --font-display: 'DM Serif Display', Georgia, 'Times New Roman', serif; }
    /* h4-h6 dopisane 27.08.2026. Wczesniej krój nagłówkowy dostawały tylko
       h1-h3, więc śródtytuły we wpisach blogowych — a jest ich sporo, 43 razy
       h5 i 12 razy h4 — renderowały się krojem tekstowym. W sekcjach tego nie
       było widać, bo tam nagłówki mają własne klasy; wychodziło wyłącznie
       w treści wpisów, która idzie surowym HTML-em. Zgłoszone przez Bartka. */
    h1, h2, h3, h4, h5, h6 { font-family: var(--font-heading, 'Baloo 2', sans-serif);
                 font-weight: 500; line-height: 1.2; }
    /* h1 i h2 na kroju szeryfowym. Reguła jest tak mocna, bo w projekcie
       kilkanaście miejsc ustawia `font-family: var(--font-heading)` wprost
       na nagłówku (hero, split, showcase, moduł o autorce) — bez tego
       zmieniłaby się tylko część tytułów i strona by się rozjechała. */
    html body :is(h1, h2),
    html body .in-xh-h,
    html body .in-fd-title,
    html body .in-showcase-copy > h2,
    html body .in-sec.in-split > .in-wrap > h2 {
        font-family: var(--font-display) !important;
        font-weight: 400 !important;
    }
    /* 13.08: nagłówki w ciemnym fiolecie marki (--brand-800), nie w czerni.
       Czarny szeryf na lawendowej mgle wyglądał jak z innej strony.
       ⚠️ KOLOR jest w OSOBNEJ regule i BEZ `.in-xh-h` — nagłówek hero stoi na
       ciemnym fiolecie i ma być BIAŁY. Wpisany w listę wyżej wygrywał
       specyficznością (html body .in-xh-h = 0,1,2) z własną regułą hero
       (.in-xh-h = 0,1,0) i tytuł strony głównej robił się prawie niewidoczny.
       Pozostałe nagłówki na ciemnym tle (.in-cb-h, .in-hero-panel h2) mają
       selektory klasowe, więc wygrywają z `html body :is(h1,h2)` same z siebie. */
    html body :is(h1, h2),
    html body .in-fd-title,
    html body .in-showcase-copy > h2,
    html body .in-sec.in-split > .in-wrap > h2 {
        color: var(--brand-800, #372047);
    }
    h1 { margin: 0 0 24px; }
    h2 { margin: 0 0 24px; }
    h3 { margin: 0; }
    .in-p { font-size: 17px; line-height: 1.7; margin: 0 0 20px; }
    .in-lead { font-size: 20px; line-height: 1.6; margin: 0 0 28px; color: var(--color-text, #0B1220); }

    /* ---- header: plywajacy pill-nav ---- */
    .in-hdr { position: sticky; top: 0; z-index: 60; padding: 16px 0; background: transparent; }
    /* pigułka nawigacji jest full-bleed (72px od krawędzi), a nie zwężona
       do kolumny treści — jedyny taki element, reszta trzyma się --in-maxw */
    .in-pill { max-width: none; margin: 0 var(--in-hgut); display: flex; align-items: center; gap: 20px;
               background: var(--in-surface, #fff); border: 1px solid var(--color-border, #C6C4D8);
               border-radius: 999px; padding: 10px 12px 10px 24px; min-height: 64px; }
    .in-brand { flex: 0 0 auto; display: flex; align-items: center; }
    /* 40 px, nie 34: znak z napisem „Instytut Numeroterapii" jest szeroki i niski,
       wiec przy 34 px sam sygnet robil sie mikry. Pigulka ma 64 px wysokosci
       i 10 px paddingu, czyli 44 px swiatla — 40 px jest maksimum bez rozpychania. */
    .in-brand img { height: 40px; width: auto; }
    /* sam znak (bez napisu) — pokazuje sie dopiero na telefonie, patrz @media 600px */
    .in-brand-mark { display: none; }

    .in-nav { flex: 1 1 auto; }
    .in-nav > ul { display: flex; justify-content: center; align-items: center;
                   gap: 6px; list-style: none; margin: 0; padding: 0; }
    .in-has-dd { position: relative; }
    .in-dd-btn { display: inline-flex; align-items: center; gap: 6px; cursor: pointer;
                 background: none; border: 0; padding: 10px 14px; border-radius: 999px;
                 font-family: inherit; font-size: 13px; font-weight: 600; letter-spacing: .06em;
                 text-transform: uppercase; color: var(--color-text, #0B1220); white-space: nowrap; }
    .in-dd-btn:hover { background: var(--in-hover, rgba(0,0,0,.04)); }
    /* pozycje płaskie (menu wg architektury IA — 7 pozycji, bez rozwijanych list).
       Ciaśniej niż .in-dd-btn, bo 7 etykiet musi zmieścić się w pigułce 1120px. */
    .in-nav-l { display: inline-block; text-decoration: none; padding: 9px 11px; border-radius: 999px;
                font-size: 14px; font-weight: 600; letter-spacing: .04em; text-transform: uppercase;
                color: var(--color-text, #0B1220); white-space: nowrap; }
    .in-nav-l:hover { background: var(--in-hover, rgba(0,0,0,.04)); }
    .in-nav-l[aria-current="page"] { background: var(--brand-50, #E7EDF9); color: var(--brand-primary, #643B81); }
    .in-chev { width: 14px; height: 14px; fill: none; stroke: currentColor; stroke-width: 2;
               stroke-linecap: round; stroke-linejoin: round; transition: transform .18s ease; }
    .in-has-dd.is-open .in-chev { transform: rotate(180deg); }
    .in-has-dd.is-open .in-dd-btn { background: var(--in-hover, rgba(0,0,0,.04)); }

    .in-dd { position: absolute; top: calc(100% + 14px); left: 50%; transform: translateX(-50%) translateY(-6px);
             width: 380px; background: var(--in-surface, #fff);
             border: 1px solid var(--color-border, #C6C4D8); border-radius: var(--radius-lg, 12px);
             box-shadow: var(--shadow-lg, 0 12px 28px rgba(0,0,0,.12)); padding: 8px;
             opacity: 0; visibility: hidden; pointer-events: none; transition: opacity .18s ease, transform .18s ease; }
    .in-has-dd.is-open .in-dd { opacity: 1; visibility: visible; pointer-events: auto; transform: translateX(-50%) translateY(0); }
    .in-dd ul { list-style: none; margin: 0; padding: 0; }
    .in-dd a { display: block; text-decoration: none; padding: 12px 14px; border-radius: var(--radius-md, 8px); }
    /* 13.08: hover kafelka LEKKO FIOLETOWY (prośba klientki), nie szary jak
       reszta nawigacji — dlatego wprost fiolet marki, nie var(--in-hover). */
    .in-dd a:hover, .in-dd a:focus-visible { background: rgba(100,59,129,.09); outline: none; }
    .in-dd-t { display: block; font-family: var(--font-heading, inherit); font-size: 15px; font-weight: 600;
               color: var(--color-text, #0B1220); margin-bottom: 3px; }
    .in-dd-d { display: block; font-size: 13px; line-height: 1.45; color: var(--color-text-muted, #413B4D); }

    /* „Oferta" jest dwukolumnowa: praca z czlowiekiem po lewej, produkty do
       samodzielnej pracy po prawej. Panel puszczamy szerzej niz standardowe
       380 px, ale z zapasem na krawedzie okna — menu desktopowe zyje dopiero
       od 1280 px, wiec 680 px zawsze sie miesci. */
    .in-dd--2 { width: min(680px, calc(100vw - 96px)); display: grid;
                grid-template-columns: 1fr 1fr; gap: 6px; padding: 12px; }
    .in-dd-c + .in-dd-c { border-left: 1px solid var(--color-border, #C6C4D8); padding-left: 10px; }
    .in-dd-g { font-size: 11px; font-weight: 700; letter-spacing: .1em; text-transform: uppercase;
               color: var(--color-text-muted, #413B4D); margin: 6px 0 8px 14px; }
    /* Aktywna podstrona w rozwijanej liscie + podswietlenie przycisku rodzica.
       :has() zamiast dodatkowej regulki w build.py — ten sam mechanizm, co
       przy .in-qz-o:has(input:checked). */
    .in-dd a[aria-current="page"] { background: var(--brand-50, #E7EDF9); }
    .in-dd a[aria-current="page"] .in-dd-t { color: var(--brand-primary, #643B81); }
    .in-has-dd:has(a[aria-current="page"]) .in-dd-btn { color: var(--brand-primary, #643B81); }

    /* ——— ikony konta i koszyka w pigulce nawigacji (11.08) ———
       Sklep zyje na instytutnumeroterapii.pl (WooCommerce), wiec to jest
       WARSTWA UI: licznik i pozycje trzymamy w localStorage, a „Zobacz koszyk"
       i „Zamowienie" prowadza do prawdziwego sklepu. Zadna z tych rzeczy nie
       udaje, ze cos kupila — dopoki nie ma API sklepu, koszyk zapelnia sie
       tylko przez `data-cart-add` (patrz komentarz przy skrypcie). */
    .in-hdr-acts { flex: 0 0 auto; display: flex; align-items: center; gap: 4px; }
    .in-ic-btn { position: relative; display: inline-grid; place-items: center;
                 width: 44px; height: 44px; border: 0; padding: 0; cursor: pointer;
                 background: none; border-radius: 999px; text-decoration: none;
                 color: var(--color-text, #0B1220); }
    .in-ic-btn:hover { background: var(--in-hover, rgba(0,0,0,.04)); }
    .in-ic-btn svg { width: 22px; height: 22px; fill: none; stroke: currentColor;
                     stroke-width: 1.7; stroke-linecap: round; stroke-linejoin: round; }
    /* licznik siedzi na rogu torby — jak we wzorze; przy zerze jest wyszarzony,
       zeby nie krzyczal czerwienia o pustym koszyku */
    .in-cart-badge { position: absolute; right: 1px; bottom: 2px; min-width: 18px; height: 18px;
                     display: grid; place-items: center; padding: 0 5px; border-radius: 999px;
                     background: var(--brand-primary, #643B81); color: #fff;
                     font-size: 11px; font-weight: 700; line-height: 1;
                     border: 2px solid var(--in-surface, #fff); }
    .in-cart-badge[data-empty] { background: var(--color-text-muted, #413B4D); opacity: .55; }
    .in-hdr--over:not(.is-stuck) .in-ic-btn { color: #fff; }
    .in-hdr--over:not(.is-stuck) .in-ic-btn:hover { background: rgba(255,255,255,.10); }
    .in-hdr--over:not(.is-stuck) .in-cart-badge { border-color: transparent; }

    /* ——— szuflada koszyka ——— */
    /* Szuflada jest przypieta GORA I DOLEM (top:0; bottom:0), a nie liczona z
       jednostki wysokosci. `height: 100dvh` potrafi w niektorych przegladarkach
       wyjsc wyzsze niz widoczny obszar i wtedy stopka z przyciskami chowa sie
       pod krawedzia okna — drugie CTA („Zamowienie") bylo przez to nie do
       kliknięcia. Przypiecie do obu krawedzi zamyka temat w kazdej przegladarce. */
    .in-cart { position: fixed; top: 0; bottom: 0; right: 0; z-index: 70; width: min(420px, 100vw);
               max-height: 100dvh; display: flex; flex-direction: column;
               background: var(--in-surface, #fff); border-left: 1px solid var(--color-border, #C6C4D8);
               box-shadow: -18px 0 48px rgba(11,18,32,.14);
               transform: translateX(100%); visibility: hidden;
               transition: transform .38s cubic-bezier(.22,.61,.36,1), visibility 0s linear .38s; }
    html.in-cart-open .in-cart { transform: none; visibility: visible; transition-delay: 0s; }
    .in-cart-h { display: flex; align-items: center; justify-content: space-between;
                 gap: 16px; padding: 22px 24px 18px; border-bottom: 1px solid var(--color-border, #C6C4D8); }
    .in-cart-h h2 { margin: 0; }
    .in-cart-x { width: 40px; height: 40px; display: grid; place-items: center; cursor: pointer;
                 border: 0; background: none; border-radius: 999px; color: var(--color-text, #0B1220); }
    .in-cart-x:hover { background: var(--in-hover, rgba(0,0,0,.04)); }
    .in-cart-x svg { width: 20px; height: 20px; fill: none; stroke: currentColor; stroke-width: 1.8;
                     stroke-linecap: round; }
    /* min-height: 0 — bez tego lista pozycji nie chce zjechać poniżej swojej
       wysokości i wypycha stopkę poza szufladę */
    /* kolumna flex, zeby `margin: auto 0` na pustym stanie wysrodkowalo go
       w pionie zamiast zostawiac go przyklejonego do gory */
    .in-cart-body { flex: 1 1 auto; min-height: 0; overflow-y: auto; padding: 8px 24px;
                    display: flex; flex-direction: column; }
    .in-cart-it { display: grid; grid-template-columns: 64px 1fr 32px; gap: 14px; align-items: start;
                  padding: 18px 0; border-bottom: 1px solid var(--color-border, #C6C4D8); }
    .in-cart-it img { width: 64px; height: 64px; object-fit: cover; border-radius: var(--radius-md, 8px);
                      margin: 0; }
    .in-cart-it-t { display: block; font-weight: 600; font-size: 15px; line-height: 1.4;
                    color: var(--color-text, #0B1220); text-decoration: none; }
    .in-cart-it-q { display: block; font-size: 13px; color: var(--color-text-muted, #413B4D); margin: 4px 0 6px; }
    .in-cart-it-p { display: block; font-weight: 700; color: var(--brand-primary, #643B81); }
    .in-cart-rm { width: 32px; height: 32px; display: grid; place-items: center; cursor: pointer;
                  border: 0; background: none; border-radius: 999px; color: var(--color-text-muted, #413B4D); }
    .in-cart-rm:hover { background: var(--in-hover, rgba(0,0,0,.04)); color: #b3261e; }
    .in-cart-rm svg { width: 17px; height: 17px; fill: none; stroke: currentColor; stroke-width: 1.7;
                      stroke-linecap: round; stroke-linejoin: round; }
    .in-cart-empty { margin: 0; padding: 26px 12px 20px; text-align: center; font-size: 15px;
                     line-height: 1.6; color: var(--color-text-muted, #413B4D); }
    /* Pusty koszyk NIE rozpycha sie na cala wysokosc — inaczej stopka z CTA
       siedziala przy dolnej krawedzi okna i przy niskim oknie wychodzila poza
       kadr. Teraz komunikat i przyciski stoja tuz pod naglowkiem. */
    .in-cart-out { grid-column: 1 / -1; margin: 2px 0 0; font-size: 12px; line-height: 1.5;
                   color: var(--color-text-muted, #413B4D); }
    .in-cart-f { flex: 0 0 auto; padding: 16px 24px calc(16px + env(safe-area-inset-bottom));
                 border-top: 1px solid var(--color-border, #C6C4D8);
                 display: grid; grid-template-columns: repeat(auto-fit, minmax(190px, 1fr));
                 gap: 10px; }
    .in-cart-sum { grid-column: 1 / -1; display: flex; align-items: baseline;
                   justify-content: space-between; margin: 0 0 4px; font-size: 15px; }
    .in-cart-sum strong { font-size: 20px; }
    .in-cart-f .in-btn, .in-cart-f .in-btn-ghost { text-align: center; }
    @media (max-width: 600px) { .in-cart-body { padding: 4px 18px; }
                                .in-cart-f { padding-left: 18px; padding-right: 18px; } }
    /* NISKIE OKNO. Nagłówek (86 px) + stopka (194 px) potrafią nie zmieścić się
       w oknie — wtedy drugie CTA („Zamówienie") wychodziło poza szufladę i nie
       dało się do niego dojechać, bo nic się nie przewijało. Najpierw ścieśniamy
       stopkę, a `overflow-y` na szufladzie jest ostatnią deską ratunku: gdyby
       nawet to nie starczyło (duże powiększenie strony), całość da się przewinąć. */
    .in-cart { overflow-y: auto; overscroll-behavior: contain; }
    @media (max-height: 640px) {
        .in-cart-h { padding: 14px 24px 12px; }
        .in-cart-empty { padding: 22px 24px; }
        .in-cart-sum { margin-bottom: 2px; }
        .in-cart-f { padding-top: 14px; padding-bottom: calc(14px + env(safe-area-inset-bottom)); gap: 8px; }
        .in-cart-f .in-btn, .in-cart-f .in-btn-ghost { min-height: 46px; padding-top: 12px; padding-bottom: 12px; }
    }

    .in-nav-cta { flex: 0 0 auto; display: inline-block; text-decoration: none; white-space: nowrap;
                  background: var(--brand-primary, #643B81); color: var(--brand-on-primary, #fff);
                  font-size: 14px; font-weight: 600; padding: 12px 24px; border-radius: 999px; }
    .in-nav-cta:hover { filter: brightness(1.08); }

    /* ---- header nad ciemnym hero: przezroczysty na gorze, bialy po scrollu ----
       Klase .in-hdr--over dokleja JS tylko na stronach z ciemnym hero
       (.in-xh / .in-hero-purple / .in-hero-foto) — na jasnych podstronach
       pigulka zostaje biala od razu. .is-stuck wchodzi po przewinieciu. */
    .in-pill { transition: background .28s ease, border-color .28s ease, box-shadow .28s ease; }
    .in-hdr--over:not(.is-stuck) .in-pill {
        background: transparent; border-color: rgba(255,255,255,.42); }
    .in-hdr--over:not(.is-stuck) :is(.in-nav-l, .in-dd-btn, .in-burger) { color: #fff; }
    .in-hdr--over:not(.is-stuck) .in-brand img { filter: brightness(0) invert(1); }
    /* Aktywna pozycja i hover na ciemnym tle to SZKLO, nie plaska plama bieli:
       przezroczyste tlo + rozmycie tego, co pod spodem + cienki jasny obrys
       i delikatny blik u gory. Obrys idzie przez inset box-shadow, a nie border,
       zeby pigulka nie urosla o 2 px i nie przesunela sasiadow. */
    .in-hdr--over:not(.is-stuck) :is(.in-nav-l, .in-dd-btn, .in-burger):hover {
        background: rgba(255,255,255,.10);
        -webkit-backdrop-filter: blur(10px) saturate(1.3);
        backdrop-filter: blur(10px) saturate(1.3);
        box-shadow: inset 0 0 0 1px rgba(255,255,255,.24); }
    /* Samo blur nie wystarczylo: nad plaskim fioletem (podstrony) nie ma czego
       rozmywac, wiec pigulka czytala sie jak plaska plama. Szklo robia dopiero
       trzy rzeczy razem: rozjasnienie TLA pod spodem (brightness w backdrop-filter),
       pionowy gradient bieli imitujacy zalamanie swiatla i jasna krawedz + blik. */
    .in-hdr--over:not(.is-stuck) .in-nav-l[aria-current="page"] {
        color: #fff;
        background: linear-gradient(180deg, rgba(255,255,255,.26) 0%, rgba(255,255,255,.10) 52%, rgba(255,255,255,.16) 100%);
        -webkit-backdrop-filter: blur(14px) saturate(1.7) brightness(1.3);
        backdrop-filter: blur(14px) saturate(1.7) brightness(1.3);
        box-shadow: inset 0 0 0 1px rgba(255,255,255,.42),
                    inset 0 1px 0 rgba(255,255,255,.55),
                    inset 0 -6px 12px -6px rgba(255,255,255,.30),
                    0 6px 18px rgba(11,18,32,.16); }
    .in-hdr--over:not(.is-stuck) .in-has-dd:has(a[aria-current="page"]) .in-dd-btn { color: #fff; }
    .in-hdr--over:not(.is-stuck) .in-nav-cta {
        background: #fff !important; color: var(--brand-primary, #643B81) !important; }
    .in-hdr.is-stuck .in-pill { box-shadow: 0 10px 30px rgba(11,18,32,.10); }
    .in-brand img, .in-nav-l, .in-dd-btn, .in-burger, .in-nav-cta {
        transition: color .28s ease, background .28s ease, filter .28s ease; }

    /* burger + panel mobilny */
    .in-burger { display: none; margin-left: auto; background: none; border: 0; cursor: pointer;
                 padding: 10px; border-radius: 999px; color: var(--color-text, #0B1220); }
    .in-burger:hover { background: var(--in-hover, rgba(0,0,0,.04)); }
    .in-burger svg { width: 22px; height: 22px; fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; }
    /* Tło prawie kryjące, nie 0.82/0.68: nad ciemnym hero panel robił się szarą
       plamą, a czarny tekst siadał na fioletowym tle strony. Rozmycie zostaje,
       ale czytelność menu nie może zależeć od tego, co jest pod spodem.
       Wysokość liczona z dvh (nie 76vh): na telefonie pasek przeglądarki zjadał
       kawałek panelu i lista urywała się w połowie pozycji. */
    .in-mob { display: block; position: absolute; z-index: 2; top: calc(100% - 8px);
              left: 0; right: 0; margin: 12px var(--in-hgut) 0; max-width: none;
              background: rgba(255,255,255,.97);
              border: 1px solid rgba(198,196,216,.9); border-radius: 26px;
              box-shadow: 0 24px 64px rgba(94,104,154,.22);
              -webkit-backdrop-filter: blur(26px) saturate(1.35);
              backdrop-filter: blur(26px) saturate(1.35);
              padding: 12px; max-height: min(76vh, 760px);
              max-height: min(calc(100dvh - 108px), 760px);
              overflow-y: auto; overscroll-behavior: contain;
              opacity: 0; visibility: hidden; pointer-events: none;
              transform: translate3d(0,-18px,0) scale(.985);
              transform-origin: 50% 0;
              clip-path: inset(0 0 100% 0 round 26px);
              transition: opacity .38s ease, transform .5s cubic-bezier(.2,.78,.22,1),
                          clip-path .5s cubic-bezier(.2,.78,.22,1), visibility 0s linear .5s; }
    .in-mob.is-open { opacity: 1; visibility: visible; pointer-events: auto;
                      transform: translate3d(0,0,0) scale(1);
                      clip-path: inset(0 0 0 0 round 26px);
                      transition-delay: 0s; }
    /* Klasę zdejmuje/nakłada skrypt burgera na dole strony. Blokada siedzi na
       <html>, nie na <body>: kontenerem przewijania jest element dokumentu,
       więc `body { overflow: hidden }` nic nie zatrzymywało, a przy zamykaniu
       menu gubiło pozycję scrolla i strona skakała na górę. */
    html.in-nav-open { overflow: hidden; }
    /* Szklana zaslona pod otwartym menu. Element siedzi POZA <header> — naglowek
       jest sticky z z-index:60, czyli wlasnym kontekstem ukladania, i scrim
       wpiety do srodka nie rozmylby niczego spoza niego. Tu: z-index 50 =
       ponizej naglowka (60), wiec pigulka i panel menu zostaja ostre, a cala
       reszta strony idzie w rozmycie. Klikniecie w zaslone zamyka menu —
       zdarzenie bakla do `document`, gdzie siedzi handler burgera. */
    .in-scrim { position: fixed; inset: 0; z-index: 50; pointer-events: none;
                background: rgba(11,18,32,.22);
                -webkit-backdrop-filter: blur(18px) saturate(1.2);
                backdrop-filter: blur(18px) saturate(1.2);
                opacity: 0; visibility: hidden;
                transition: opacity .38s ease, visibility 0s linear .38s; }
    html.in-nav-open .in-scrim,
    html.in-cart-open .in-scrim { opacity: 1; visibility: visible; pointer-events: auto;
                                 transition-delay: 0s; }
    .in-mob ul { list-style: none; margin: 0; padding: 0; }
    .in-mob a { display: block; text-decoration: none; font-size: 15px; padding: 11px 12px;
                border-radius: var(--radius-md, 8px); color: var(--color-text, #0B1220); }
    .in-mob a:hover { background: var(--in-hover, rgba(0,0,0,.04)); }
    .in-mob-h { font-size: 11px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase;
                color: var(--color-text-muted, #413B4D); padding: 14px 12px 6px; }
    /* CTA na dole panelu mobilnego (wg makiety: overlay konczy sie dwoma przyciskami).
       PRZYKLEJONE do dolnej krawedzi panelu: menu ma 14 pozycji, wiec przy niskim
       ekranie oba przyciski lezaly poza kadrem i nikt do nich nie docieral —
       lista wygladala po prostu na uciete. */
    /* bottom: -12px, nie 0 — o wysokosc dolnego paddingu panelu. Przy zerze pod
       przyklejonymi przyciskami przeswitywal 12-px pasek przewijanej listy. */
    .in-mob-cta { position: sticky; bottom: -12px; z-index: 1;
                  display: grid; gap: 10px;
                  padding: 14px 12px 12px; margin: 8px -12px -12px;
                  background: rgba(255,255,255,.97);
                  -webkit-backdrop-filter: blur(10px); backdrop-filter: blur(10px);
                  border-top: 1px solid var(--color-border, #C6C4D8);
                  border-radius: 0 0 26px 26px;
                  /* biala poswiata nad kreska wygasza pozycje wjezdzajaca pod pasek,
                     zamiast zostawiac ja przecieta w pol linijki */
                  box-shadow: 0 -14px 16px -4px rgba(255,255,255,.95); }
    .in-mob-cta a { text-align: center; }
    .in-mob-cta .in-btn { color: var(--brand-on-primary, #fff); }

    /* ---- modal potwierdzenia wysyłki formularza (makieta: "Wiadomość wysłana!") ---- */
    .in-md { position: fixed; inset: 0; z-index: 90; display: grid; place-items: center;
             padding: 24px; background: rgba(11,18,32,.55); }
    .in-md[hidden] { display: none; }
    .in-md-box { background: var(--in-surface, #fff); border-radius: var(--radius-lg, 12px);
                 box-shadow: var(--shadow-lg, 0 12px 28px rgba(0,0,0,.12));
                 padding: 40px 36px; max-width: 460px; width: 100%; text-align: center; }
    .in-md-box h2 { margin: 0 0 12px; }
    .in-md-box p { font-size: 16px; line-height: 1.6; color: var(--color-text-muted, #413B4D); margin: 0 0 26px; }
    .in-md-btns { display: flex; gap: 10px; justify-content: center; flex-wrap: wrap; }
    .in-md-btns button { font-family: inherit; font-size: 16px; cursor: pointer; }

    /* ---- hero (na gradiencie, ciemny tekst) ---- */
    .in-hero { position: relative; background: transparent; color: var(--color-text, #0B1220);
               margin-top: -96px; padding: 200px 0 110px; text-align: center; }
    .in-hero img { height: 84px; width: auto; margin: 0 auto 36px; }
    .in-eyebrow { font-size: 12px; font-weight: 700; letter-spacing: .18em; text-transform: uppercase;
                  color: var(--color-text-muted, #413B4D); margin: 0 0 18px; }
    .in-hero h1 { font-size: clamp(38px, 5.4vw, 68px); max-width: 15ch; margin: 0 auto 24px; letter-spacing: -.02em; }
    .in-hero .in-lead { max-width: 760px; margin: 0 auto 14px; }
    .in-hero-note { font-size: 14px; color: var(--color-text-muted, #413B4D); margin: 0 0 34px; }
    .in-hero-btns { display: flex; gap: 14px; justify-content: center; flex-wrap: wrap; }
    /* Etykieta przycisku NIGDY nie lamie sie w srodku wyrazu. Ponizej 600 px
       `main` dostaje `overflow-wrap: anywhere` (dlugie adresy w tresci) i to
       dziedziczenie robilo z „Wszystkie numeroterapeutki" -> „Wszystk / ie /
       numero / terapeu / tki". Lamiemy tylko na spacjach. */
    .in-btn, .in-btn-ghost, button.in-btn, .in-cta-tag,
    .in-person-cta, .in-rail-cta-b, .in-nav-cta {
        overflow-wrap: normal; word-break: normal; hyphens: none;
    }
    .in-btn-ghost { display: inline-block; text-decoration: none; padding: 14px 28px;
                    border-radius: var(--radius-md, 8px); font-weight: 600; color: var(--color-text, #0B1220);
                    border: 1px solid rgba(11,18,32,.22); }
    .in-btn-ghost:hover { background: rgba(255,255,255,.5); border-color: rgba(11,18,32,.45); }

    /* misja — jasna sekcja, lead wyrozniony */
    .in-misja .in-lead { max-width: 900px; }

    .in-two { display: grid; grid-template-columns: 1fr 1fr; gap: 48px; align-items: start; }
    .in-two > *, .in-grid3 > *, .in-ftr-grid > * { min-width: 0; }
    .in-list { list-style: none; padding: 0; margin: 0; display: grid; gap: 12px; }
    .in-list li { padding: 14px 18px; background: var(--in-surface, #fff); border: 1px solid var(--color-border, #C6C4D8);
                  border-radius: var(--radius-md, 8px); font-size: 16px; }

    .in-grid3 { display: grid; grid-template-columns: repeat(3, 1fr); gap: 24px; }
    /* 20 px, nie --radius-md (8 px): przy kafelku wielkości „Na czym stoi Instytut"
       ósemka czytała się jak ostry kant i rozjeżdżała się z resztą serwisu, gdzie
       karty mają 20-30 px (moduły ikonowe, obszary, opinie, panel hero).
       Moduły z własnym promieniem nadpisują to u siebie — nie ruszamy ich. */
    .in-card { text-decoration: none; background: var(--in-surface, #fff); border: 1px solid var(--color-border, #C6C4D8);
               border-radius: 20px; overflow: hidden; display: block; }
    .in-card img { aspect-ratio: 16/10; object-fit: cover; width: 100%; }
    .in-card h3 { padding: 18px; }
    .in-card:hover { border-color: var(--brand-primary, #643B81); }

    .in-btn { display: inline-block; background: var(--brand-primary, #643B81);
              color: var(--brand-on-primary, #fff); text-decoration: none;
              padding: 14px 28px; border-radius: var(--radius-md, 8px); font-weight: 600; }

    /* CTA bywa <button>, nie <a> — tak wyglada kazde „Dodaj do koszyka"
       (data-cart-add). Przycisk NIE dziedziczy kroju ani stopnia pisma po
       stronie i ma wlasna ramke, wiec bez tego wypadal z rytmu pozostalych
       pigulek. Ghost odzyskuje swoja obwodke linijke nizej. */
    button:is(.in-btn, .in-btn-ghost) { font: inherit; font-weight: 600; line-height: inherit;
                                        cursor: pointer; border: 0; text-align: left; }
    button.in-btn-ghost { border: 1px solid rgba(11,18,32,.22); }

    .in-cta { text-align: center; }
    .in-cta .in-lead { max-width: 720px; margin: 0 auto 28px; }


    /* ══════════════════════════════════════════════════════════════════
       STRZALKA W KOLKU PRZY KAZDYM CTA (06.08)
       ──────────────────────────────────────────────────────────────────
       Wzorzec z pasa CTA („Zagraj w gre") rozciagniety na wszystkie pigulki.
       Kolko rysuje ::after (::before jest zajete przez turkusowa kule hoveru),
       a strzalka to tlo SVG w data-URI — ZERO zmian w markupie, dziala na
       wszystkich wygenerowanych stronach naraz.
    
       Wyjatki: przyciski, ktore juz maja ikone w srodku, nawigacja quizu
       i testu (sterowanie krokami, nie CTA) oraz paginacja bloga.
       ══════════════════════════════════════════════════════════════════ */
    :is(.in-btn, .in-btn-ghost):not(:has(.in-cta-ic)):not(:has(.in-cb-ic)):not(:has(.in-hero-arrow)):not(:has(svg)):not(.in-qz-nav *):not(.in-ts-nav *) {
        display: inline-flex; align-items: center; justify-content: space-between; gap: 14px;
        padding-block: 8px; padding-inline: 26px 8px;
    }
    :is(.in-btn, .in-btn-ghost):not(:has(.in-cta-ic)):not(:has(.in-cb-ic)):not(:has(.in-hero-arrow)):not(:has(svg)):not(.in-qz-nav *):not(.in-ts-nav *)::after {
        content: ""; flex: 0 0 auto; width: 34px; height: 34px; border-radius: 50%;
        background-color: #fff;
        background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23643B81' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 12h13M12 5l7 7-7 7'/%3E%3C/svg%3E");
        background-size: 17px; background-position: center; background-repeat: no-repeat;
        transition: transform .3s ease;
    }
    .in-btn-ghost:not(:has(.in-cta-ic)):not(:has(.in-cb-ic)):not(:has(.in-hero-arrow)):not(:has(svg))::after {
        background-color: var(--brand-primary, #643B81);
        background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23ffffff' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 12h13M12 5l7 7-7 7'/%3E%3C/svg%3E");
    }
    :is(.in-btn, .in-btn-ghost):hover::after { transform: translateX(3px); }
    /* na hoverze pigulke zalewa turkus — kolko zostaje biale, strzalka fioletowa */
    .in-btn-ghost:is(:hover, :focus-visible)::after {
        background-color: #fff; background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23643B81' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 12h13M12 5l7 7-7 7'/%3E%3C/svg%3E");
    }
    
    /* ═══ CIEMNY PANEL MARKI (13.08) ═══════════════════════════════════════
       Jedna receptura tła dla DWÓCH miejsc: panel stopki i pas CTA z testem.
       Klientka: „mocniejsze kolory i biały font" — pastelowy gradient stopki
       poszedł w głąb (turkus → indygo → fiolet), więc tekst musi być biały.
       Trzymamy to w zmiennej, bo oba miejsca mają wyglądać IDENTYCZNIE —
       zmieniasz tutaj, zmienia się w obu. Kolory są z palety Instytutu:
       #67B6C0 (accent), #8C66B2 / #643B81 (fiolet), #5E689A (indygo).
       ══════════════════════════════════════════════════════════════════════ */
    :root {
        /* 13.08: ten sam przebieg co hero podstron (.in-hero-purple w pages.css)
           — najciemniejszy fiolet u góry, przez fiolet marki i błękit do
           turkusu. Wcześniej panel miał własny układ radialnych plam i czytał
           się jak inny motyw niż reszta serwisu. Zmieniasz tutaj — sprawdź
           tamten blok, to jest ta sama rampa. */
        --in-panel-tlo:
            radial-gradient(circle at 82% 10%, rgba(198,196,216,.18), transparent 34%),
            radial-gradient(circle at 6% 62%, rgba(94,104,154,.24), transparent 38%),
            /* 13.08 (2): JAŚNIEJ — klientka wskazała gradient hero podstron
               jako wzorzec. Rampa idzie więc jak tam: fiolet → indygo →
               jasny błękit #5C86AC, bez dawnego zejścia w ciemny turkus
               #35707E. Jedno odstępstwo od hero: dołu NIE rozjaśniamy do
               #93CDD4/bieli — w hero na jasnym pasie nie stoi żaden tekst,
               a tu stoją białe linki stopki i copyright. #4C7B96 na dolnej
               krawędzi trzyma 4,6:1 (WCAG AA); #93CDD4 dawałby 1,8:1. */
            linear-gradient(176deg,
                #2B1839 0%,
                #46295E 12%,
                #643B81 30%,
                #5F5F94 50%,
                #5C86AC 78%,
                #4C7B96 100%);
    }

    /* ---- stopka: duzy panel w duchu inspiracji, ale w palecie Instytutu ---- */
    /* Otoczenie panelu zostaje BIALE — zgodnie ze wspolnym tlem projektu (body).
       Wczesniej bylo tu #C6C4D8 i to ono robilo lawendowa ramke wokol stopki;
       fiolet ma byc na samym panelu, nie pod nim. (06.08) */
    /* Stopka na jasnym lawendowym panelu (#F3EFF5 = --brand-50). Wszystkie
       kolory tekstu i obrysow ida od ciemnego, nie od bieli. */
    /* przezroczysta — mgła z body ma iść pod stopkę (13.08) */
    .in-ftr { background: transparent; border: 0;
              padding: clamp(28px,3.4vw,56px) clamp(20px,3.4vw,56px) 28px;
              color: #fff; }
    .in-ftr-panel { overflow: hidden;
                    /* 13.08: panel poszedł w GŁĄB — patrz --in-panel-tlo wyżej.
                       Wcześniej były tu te same kolory, ale w pastelu; cały
                       tekst szedł od ciemnego. Teraz jest odwrotnie: tło ciemne,
                       litery białe. Zmieniasz tło — sprawdź kontrast liter. */
                    background: var(--in-panel-tlo);
                    border: 1px solid rgba(255,255,255,.12);
                    border-radius: 44px 44px 44px 8px; }
    /* Logo nad tekstem, nie obok (prosba 06.08) — jedna kolumna, blok
       wprowadzenia zaczyna sie w tej samej osi co logo. */
    .in-ftr-top { display: grid; grid-template-columns: minmax(0, 1fr);
                  gap: clamp(28px,3.5vw,46px); align-items: start; justify-items: start;
                  padding: clamp(52px,5vw,82px) clamp(42px,5.5vw,94px) clamp(66px,7vw,116px); }
    .in-ftr-logo { display: inline-flex; width: max-content; max-width: 100%; align-items: center;
                   text-decoration: none; }
    .in-ftr-logo img { display: block; width: 190px; max-width: 100%; height: auto; }
    .in-ftr-intro { display: grid; gap: 26px; }
    .in-ftr-statement { max-width: 24ch; margin: 0; color: #fff;
                        font-family: var(--font-heading, 'Baloo 2', sans-serif);
                        font-size: clamp(32px,3.4vw,54px); font-weight: 400;
                        line-height: 1.04; letter-spacing: -.035em; text-wrap: balance; }
    .in-ftr-grid { display: grid; grid-template-columns: 1fr 1fr 1fr 1fr;
                   gap: clamp(38px,4.5vw,80px); align-items: start;
                   padding: 0 clamp(42px,5.5vw,94px) clamp(54px,5.5vw,90px); }
    /* Podtytul i zdanie sa scalone w JEDEN akapit (prosba 06.08) — klasa .in-ftr-sub
       zostaje dla zgodnosci, ale stopien pisma dyktuje .in-ftr-claim (16 px). */
    /* Na ciemnym panelu kolory tekstu idą od BIELI, nie od grafitu: nagłówki
       kolumn i linki pełną bielą (z lekkim przygaszeniem tekstu pobocznego),
       fiolet marki zostaje tylko tam, gdzie leży na białym (hover ikon). */
    .in-ftr .in-ftr-sub { margin: 0; color: rgba(255,255,255,.78);
                          font-size: 16px; line-height: 1.6; }
    /* 46ch = 366 px, czyli zdanie lamalo sie na dwie linie — teraz miesci sie w jednej */
    .in-ftr .in-ftr-claim { max-width: 88ch; margin: 0; color: rgba(255,255,255,.72);
                            font-size: 15px; line-height: 1.62; }
    .in-ftr h3 { margin: 0 0 20px; color: rgba(255,255,255,.62); 
                 font-weight: 650; letter-spacing: .1em; text-transform: uppercase; }
    .in-ftr ul { list-style: none; padding: 0; margin: 0; }
    .in-ftr li { border: 0; }
    .in-ftr li a { display: block; padding: 7px 0; color: rgba(255,255,255,.92);
                   font-size: 15px; line-height: 1.42; text-decoration: none;
                   transition: color .18s ease, padding-left .18s ease; }
    .in-ftr li:first-child a { padding-top: 0; }
    .in-ftr li a:hover, .in-ftr li a:focus-visible {
        color: #fff; padding-left: 4px; }
    .in-ftr-bottom { display: flex; align-items: center; justify-content: space-between;
                     gap: 12px 24px; flex-wrap: wrap; padding: 24px clamp(8px,3vw,42px) 0; }
    /* UWAGA: pasek z copyrightem stoi POZA ciemnym panelem, na jasnej mgle
       serwisu — dlatego jako jedyny w stopce zostaje przy ciemnym tekście.
       Biel była tu nieczytelna. */
    .in-ftr .in-ftr-copy { margin: 0; color: var(--color-text-muted, #413B4D);
                            font-size: 13px; }
    /* dane spolki — ten sam stopien co copyright, ale bez akcentu; na waskim
       ekranie schodzi pod copyright (flex-wrap wyzej) */
    .in-ftr .in-ftr-legal { margin: 0; color: var(--color-text-muted, #413B4D);
                            font-size: 13px; line-height: 1.5; }
    /* Ikony socialowe siedza w kolumnie brandowej ciemnego panelu stopki — stad
       jasne obrysy i inwersja kolorow na hover. */
    /* drugi naglowek w kolumnie „Prawne" — social siedzi pod linkami prawnymi,
       stad odstep od gory (wczesniej ta kolumna miala same ikony i pustke) */
    .in-ftr .in-ftr-soc-h { margin: 30px 0 16px; }
    .in-ftr-socials { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
    .in-ftr-socials a { display: inline-flex; align-items: center; justify-content: center;
                        width: 38px; height: 38px; border: 1px solid rgba(255,255,255,.34);
                        border-radius: 999px; color: #fff;
                        text-decoration: none; transition: color .18s, background .18s, border-color .18s; }
    .in-ftr-socials a svg { display: block; width: 18px; height: 18px; fill: currentColor; }
    .in-ftr-socials a:hover, .in-ftr-socials a:focus-visible {
        border-color: #fff; background: #fff; color: var(--brand-primary, #643B81); }

    /* Ośmiu pozycjom pigułka wystarczała dopiero od 1280 px — stąd ten próg.
       Od 11.08 pozycji jest pięć (dwie rozwijane), więc pełne menu schodzi
       na burger przy 1100 px (podniesione z 1080 px dnia 26.09 — między 1100
       a 1080 desktopowe menu robiło się za ciasne i rozjeżdżało, dając stan
       „częściowo mobilny"; teraz przejście jest czyste na 1100). Ten sam próg
       trzyma JS dropdownów (matchMedia '(min-width: 1101px)' przy hoverze) —
       obie liczby MUSZĄ iść razem. Gutery zwężamy dalej przy 1279 px. */
    @media (max-width: 1279px) {
        :root { --in-hgut: var(--in-gut); }
        .in-wrap { padding: 0 var(--in-gut); }
        .in-pill { margin: 0 var(--in-gut); padding-left: 18px; }
        .in-mob { margin-left: var(--in-gut); margin-right: var(--in-gut); }
    }
    @media (max-width: 1100px) {
        .in-nav, .in-nav-cta { display: none; }
        .in-burger { display: inline-flex; }
        /* Konto, koszyk i burger jako jedna grupa przy prawej krawedzi pigulki.
           Bez tego ikony zostawaly tuz przy logo, a burger odjezdzal sam w prawo
           — miedzy nimi wisiala pusta dziura na pol pigulki. */
        .in-hdr-acts { margin-left: auto; }
        .in-burger { margin-left: 0; }
    /* Menu na srodku WOLNEGO MIEJSCA, nie na osi pigulki (decyzja 12.08).
       Byla tu odwrotna regula: nawigacja wyjeta z ukladu (`position: absolute`)
       i przyklejona do osi pigulki. Osiowo bylo idealnie, ale blok CTA + ikony
       jest duzo szerszy od logo, wiec menu mialo 257 px luki od logo i tylko
       90 px od CTA — czytalo sie jako dosuniete w prawo. Teraz nawigacja jest
       zwyklym elementem flexa (`flex: 1 1 auto` wyzej) i srodkuje swoja liste
       w luce miedzy sasiadami: odstepy po obu stronach sa rowne, kosztem
       ~83 px odchylki od osi pigulki. Nie wracaj do `position: absolute` bez
       rozmowy — to byl swiadomy wybor miedzy dwoma rodzajami srodka.
       Znika tez korekta odstepow dla 1081-1279 px: byla potrzebna tylko po to,
       zeby osiowe menu nie wchodzilo na CTA. */
    @media (max-width: 860px) {
        .in-two, .in-grid3 { grid-template-columns: 1fr; }
        .in-ftr { padding: 24px 20px; }
        .in-ftr-top { gap: 34px; padding: 52px 44px 64px; }
        /* Cztery kolumny zostaja w jednej linijce — zwezamy je i przycinamy gap,
           zamiast zwijac brand na pelna szerokosc. */
        .in-ftr-grid { grid-template-columns: 1fr 1fr 1fr 1fr; gap: 34px; padding: 0 44px 56px; }
    }
    @media (max-width: 600px) {
        :root { --in-gut: 20px; --in-hgut: 20px; }
        main, .in-ftr, .in-mob { overflow-wrap: anywhere; }
        /* Bezpiecznik: nic nie ma prawa rozjechac strony w bok na telefonie.
           `clip` (nie `hidden`) — hidden zrobilby ze strony kontener przewijania
           i zabilby `position: sticky` w hero. */
        html, body { overflow-x: clip; }
        .in-sec { padding: 56px 0; }
        .in-hdr { padding: 12px 0; }
        .in-pill { min-height: 58px; padding: 7px 8px 7px 16px; }
        /* Na telefonie logo skraca sie do samego znaku — pelny logotyp z napisem
           zjadal polowe pigulki i spychal ikony na srodek. */
        .in-brand-full { display: none; }
        .in-brand-mark { display: block; height: 36px; width: auto; }

        .in-brand { min-height: 44px; }
        .in-burger { min-width: 44px; min-height: 44px; align-items: center; justify-content: center; }
        .in-mob { margin-top: 8px; border-radius: 24px;
                  clip-path: inset(0 0 100% 0 round 24px); }
        .in-mob.is-open { clip-path: inset(0 0 0 0 round 24px); }
        /* CTA hero podstron JEDEN POD DRUGIM. W dwoch kolumnach na telefonie
           kazdy przycisk mial ~150 px i etykiety w rodzaju „Wszystkie
           numeroterapeutki" lamaly sie w srodku wyrazu. */
        .in-hero-btns {
            display: grid; grid-template-columns: 1fr;
            /* 14 px, nie 10: przyciski stoja tu JEDEN POD DRUGIM (na desktopie
               obok siebie), a przy 10 px czytaly sie jak jeden slupek. */
            gap: 14px; width: 100%;
        }
        .in-hero-btns > .in-btn, .in-hero-btns > .in-btn-ghost {
            width: 100%; min-width: 0; min-height: 52px; padding-inline: 18px;
            text-align: center; white-space: normal; font-size: 15px; line-height: 1.3;
        }
        .in-btn, .in-btn-ghost { max-width: 100%; text-align: center; }
        .in-ftr { padding: 18px 12px 22px; }
        .in-ftr-panel { border-radius: 30px 30px 30px 6px; }
        .in-ftr-top { padding: 38px 26px 50px; gap: 30px; }
        .in-ftr-logo img { width: 166px; }
        .in-ftr-statement { font-size: clamp(34px,11vw,46px); }
        .in-ftr-grid { grid-template-columns: 1fr; gap: 28px; padding: 0 26px 42px; }
        .in-ftr-brand { grid-column: auto; }
        .in-ftr .in-ftr-sub, .in-ftr .in-ftr-claim { font-size: 16px; }
        .in-ftr h3 { margin-bottom: 10px; }
        /* Bylo min-height 44px + 11/12px paddingu — kazdy odnosnik zajmowal
           tyle co przycisk i lista rozjezdzala sie na pol ekranu. 38px nadal
           jest wygodnym celem dotyku, a grupy czytaja sie jak listy, nie jak
           osobne guziki. */
        .in-ftr li a { min-height: 38px; padding: 7px 0 8px; font-size: 16px; }
        .in-ftr-bottom { align-items: flex-start; flex-direction: column; padding: 20px 8px 0; }
        .in-sec[id] { scroll-margin-top: 84px; }
        .in-md-box { padding: 30px 22px; }
    }


    html body h2 { line-height: 1.12; }
    /* Wyjatek: naglowek w panelu hero to podtytul karty, nie naglowek sekcji —
       w skali 40px rozpychal panel na pol ekranu. */
    html body .in-hero-panel h2 { font-size: 24px !important; line-height: 1.25; }
    html body { font-size: 16px; }
    html body :is(
        .in-p, .in-lead, .in-pr-d, .in-ftr-sub, .in-ftr-claim,
        .in-media p, .in-card p, .in-list li, .in-check li,
        .in-fq-a, .in-fq-body p, .in-contact-card p
    ) { font-size: 16px !important; }

    @media (max-width: 600px) {
        html body h2 { line-height: 1.18; }
        html body .in-hero-panel h2 { font-size: 22px !important; }
        html body { font-size: 14px; }
        html body :is(
            .in-p, .in-lead, .in-pr-d, .in-ftr-sub, .in-ftr-claim,
            .in-media p, .in-card p, .in-list li, .in-check li,
            .in-fq-a, .in-fq-body p, .in-contact-card p
        ) { font-size: 14px !important; }
    }

/* Stan startowy dla wejscia przy scrollu. Na podstronach ta sama regula jest
   w pages.css; homepage pages.css nie dostaje, wiec trzyma ja u siebie.
   Bez guardu prefers-reduced-motion — jak reszta animacji w projekcie. */
.rv { opacity: 0; transform: translateY(20px);
      transition: opacity .6s ease, transform .6s cubic-bezier(.4,0,.2,1);
      transition-delay: var(--rv-d, 0ms); }
.rv.is-in { opacity: 1; transform: none; }
