/* ==========================================================================
   Landing "Feedback" (/)
   Port projektu Claude Design 32dda226-482e-4f52-a82d-dbc6f6e3960c (index.html).
   Tokeny: static/css/feedback-ds/tokens/*.css (kopia 1:1 — patrz README.md tam).
   Ta strona NIE dziedziczy po base.html i nie ładuje style.css, więc panel
   dostępności i klasy a11y są tu odtworzone na tokenach DS.
   ========================================================================== */

/* --- Układ strony ---------------------------------------------------------
   Źródło ma .page{height:100vh;overflow:hidden}. Używamy min-height i nie
   ucinamy przepełnienia: panel dostępności skaluje tekst do 200% (WCAG 1.4.4),
   a sztywne 100vh + overflow:hidden przycięłoby wtedy treść. Przy domyślnym
   rozmiarze czcionki render jest identyczny jak w projekcie. */
.page {
    min-height: 100vh;
    display: flex;
    flex-direction: column;
}

/* Nawigacja górna: static/css/topnav.css (wspólna z podstronami spod
   base.html) — znaczniki w templates/_topnav.html. Tu tylko zachowanie
   specyficzne dla landingu (przyklejenie + cień po przewinięciu) — owinięte
   w .landing-nav-wrap, bo topnav.css jest współdzielony z base.html i nie ma
   tam być sticky. Klasę .is-stuck dokłada static/js/landing-reveal.js. */
.landing-nav-wrap {
    position: sticky;
    top: 0;
    z-index: 30;
    background: var(--bg-page);
    border-bottom: 1px solid transparent;
    transition: border-color var(--duration-base) var(--ease-standard),
                box-shadow var(--duration-base) var(--ease-standard);
}

.landing-nav-wrap.is-stuck {
    border-bottom-color: var(--border-subtle);
    box-shadow: var(--shadow-s);
}

/* Kotwice z menu górnego (#jak-to-dziala, #cennik) - płynne przewijanie,
   wyłączone przy prefers-reduced-motion/panelu dostępności (patrz
   body.reduced-motion niżej), i odstęp pod nagłówkiem sekcji, żeby
   przyklejony .landing-nav-wrap go nie zasłaniał po skoku z linku. */
html {
    scroll-behavior: smooth;
}

body.reduced-motion {
    scroll-behavior: auto;
}

#jak-to-dziala,
#cennik {
    scroll-margin-top: 5rem;
}

/* --- Animacja wejścia przy przewijaniu (static/js/landing-reveal.js) ------
   [data-reveal] startuje niewidoczny/przesunięty, JS dokłada .is-visible przy
   wejściu w viewport (IntersectionObserver, próg 10%, raz na element). Bez
   JS-a albo gdy JS jeszcze nie wystartował, treść ma być widoczna od razu —
   stąd reguła bazowa to "widoczne", a "ukryty" włącza dopiero .js-reveal na
   <html> (dokładane przez sam skrypt zanim oznaczy elementy). Analogiczny
   wzorzec do .js-nav w nav.js. */
html.js-reveal [data-reveal] {
    opacity: 0;
    transform: translateY(22px);
    transition: opacity 420ms var(--ease-out), transform 420ms var(--ease-out);
    will-change: opacity, transform;
}

html.js-reveal [data-reveal].is-visible {
    opacity: 1;
    transform: none;
}

body.reduced-motion [data-reveal],
body.reduced-motion [data-reveal].is-visible {
    opacity: 1;
    transform: none;
    transition: none;
}

@media (prefers-reduced-motion: reduce) {
    html.js-reveal [data-reveal] {
        opacity: 1;
        transform: none;
        transition: none;
    }

    html {
        scroll-behavior: auto;
    }
}

/* --- Pasek informacyjny nad nawigacją (Issue #110) ------------------------
   Tylko landing (znaczniki w templates/index.html). Pełna szerokość, nad
   nawigacją, żeby był pierwszą rzeczą na stronie. Kolory z tokenów DS — ten
   sam duet co .eyebrow (rose-700 na rose-100, kontrast 6,18:1), więc tryb
   wysokiego kontrastu obsługuje go bez osobnej reguły: przemapowanie tokenów
   niżej w tym pliku podmienia oba kolory. */
.promo-banner {
    background: var(--rose-100);
    border-bottom: var(--border-w) solid var(--black);
    padding: 9px 48px;
    text-align: center;
}

.promo-banner__text {
    margin: 0;
    font-size: 14px;
    font-weight: 700;
    line-height: 1.4;
    letter-spacing: var(--tracking-wide);
    color: var(--rose-700);
}

/* --- Hero ---------------------------------------------------------------- */
.hero {
    flex: 1;
    min-height: 0;
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 32px;
    align-items: center;
    padding: 0 48px 20px;
    max-width: 1400px;
    margin: 0 auto;
    width: 100%;
}

.eyebrow {
    display: inline-block;
    background: var(--rose-100);
    color: var(--rose-700);
    padding: 5px 14px;
    border-radius: var(--radius-pill);
    font-size: 12px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: var(--tracking-wide);
    margin-bottom: 14px;
}

.hero h1 {
    font-family: var(--font-display);
    font-size: clamp(32px, 4vw, 54px);
    line-height: 1.04;
    margin: 0 0 14px;
}

/* Issue #158: symulacja_live.html loads landing.css just for the pricing
   cards, but that pulls in the two-column .hero grid meant for the landing
   page's text+image layout. The trial hero only ever has an H1 in it, so
   fall back to a centered block instead of leaving it stuck in column 1. */
.hero.hero--trial {
    display: block;
    text-align: center;
}

.sub {
    font-size: 16px;
    line-height: 1.5;
    color: var(--text-secondary);
    max-width: 460px;
    margin: 0 0 18px;
}

/* Lista korzyści w hero, zastępująca dawny akapit .sub (Issue TBD). Ten sam
   rozmiar/kolor tekstu co .sub, plus ikona check w stylu .value-card__icon
   (rose-100/rose-700), tylko mniejsza i inline z tekstem. */
.hero-checklist {
    list-style: none;
    margin: 0 0 18px;
    padding: 0;
    max-width: 480px;
    display: flex;
    flex-direction: column;
    gap: 10px;
}

.hero-checklist li {
    display: flex;
    align-items: flex-start;
    gap: 10px;
    font-size: 16px;
    line-height: 1.5;
    color: var(--text-secondary);
}

.hero-checklist__icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    width: 22px;
    height: 22px;
    margin-top: 1px;
    border-radius: 50%;
    background: var(--rose-100);
    color: var(--rose-700);
}

.cta-row {
    display: flex;
    gap: 14px;
    flex-wrap: wrap;
}

.cta-row .fb-btn {
    white-space: nowrap;
}

/* Odsłuchanie przykładowej rozmowy w hero - obraz sam rysuje pigułkę i tekst
   (jak .how-recording__play niżej w tym pliku), więc bez własnego tła/obrysu.
   Przycisk (nie link) - odtwarza nagranie inline, patrz how-it-works.js. */
.hero-listen {
    display: inline-flex;
    align-items: center;
    padding: 0;
    border: none;
    background: none;
    cursor: pointer;
    transition: transform var(--duration-base) var(--ease-standard);
}

.hero-listen:hover,
.hero-listen:focus-visible {
    transform: scale(1.03);
}

.hero-listen.is-playing .hero-listen__img {
    /* Brak osobnej grafiki na stan "pauza" - przygaszenie sygnalizuje, że
       nagranie właśnie gra (jak .how-recording__play.is-playing). */
    opacity: 0.7;
}

.hero-listen__img {
    display: block;
    height: 48px;
    width: auto;
}

/* Ikony inline (templates/_icons.html) — 16-20px obok tekstu, dziedziczą
   kolor z otoczenia (patrz docs/design.md, sekcja 8: "Adopted set: Lucide"). */
.icon {
    flex-shrink: 0;
    vertical-align: middle;
}

/* Plakietki zaufania pod CTA w hero (hero-owner z projektu Design) — krótkie,
   z ikoną, żeby rozwiać obiekcje ("czy trzeba płacić z góry?", "czy CV
   zostaje gdzieś zapisane?") tuż przy pierwszym wezwaniu do działania. */
.hero-reassurance {
    list-style: none;
    display: flex;
    flex-wrap: wrap;
    gap: 8px 20px;
    margin: 4px 0 0;
    padding: 0;
}

.hero-reassurance li {
    display: flex;
    align-items: center;
    gap: 7px;
    font-size: 14px;
    font-weight: 600;
    color: var(--text-secondary);
}

.hero-reassurance .icon {
    color: var(--rose-600);
}

/* Slot na zdjęcie z projektu. Proporcja dopasowana do hero_main4.jpg
   (898x1122 = 4:5, portret) - bez sztywnego max-height, żeby object-fit:
   cover nie musiał obcinać sylwetki, gdy zdjęcie jest wyższe niż szerokie;
   sekcja .hero (flex:1 w .page bez ograniczenia wysokości) po prostu rośnie
   o tyle, ile portretowe zdjęcie faktycznie potrzebuje. */
.hero-media {
    display: flex;
    align-items: center;
    justify-content: center;
    border-radius: var(--radius-l);
    aspect-ratio: 1 / 1;
}

.hero-media img {
    width: 100%;
    height: 100%;
    object-fit: contain;
    display: block;
    -webkit-mask-image: linear-gradient(to right,
        transparent 0%,
        rgba(0, 0, 0, .35) 22%,
        rgba(0, 0, 0, .85) 48%,
        #000 68%);
    mask-image: linear-gradient(to right,
        transparent 0%,
        rgba(0, 0, 0, .35) 22%,
        rgba(0, 0, 0, .85) 48%,
        #000 68%);
}

/* --- Button (port komponentu DS core/Button.jsx, variant="primary") -------
   Źródłowy JSX renderuje style inline; tu ten sam zestaw jako klasa, żeby nie
   ciągnąć React UMD + bundla DS dla jednego przycisku. Rozmiary s/m/l zgodne
   z obiektem `sizes` w komponencie. */
.fb-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
    font-family: var(--font-body);
    font-weight: 700;
    font-size: var(--text-body-m);
    line-height: 1;
    padding: 11px 22px;
    border-radius: var(--radius-pill);
    border: var(--border-w) solid transparent;
    text-decoration: none;
    cursor: pointer;
    transition: transform var(--duration-fast) var(--ease-standard),
                background var(--duration-base) var(--ease-standard);
}

.fb-btn--s {
    gap: 6px;
    font-size: var(--text-body-s);
    padding: 8px 16px;
}

.fb-btn--l {
    gap: 10px;
    font-size: var(--text-body-l);
    padding: 15px 28px;
}

/* Świadomie --brand-primary-hover (rose-600 #C22C4E) zamiast --brand-primary
   (rose-500 #E23A5F): biały tekst na rose-500 daje 4,20:1, poniżej progu
   WCAG AA 4,5:1 dla tekstu o normalnej wielkości. rose-600 daje 5,60:1.
   Ten sam wybór co --color-accent w style.css — obie warstwy mają być zgodne. */
.fb-btn--primary {
    background: var(--brand-primary-hover);
    color: var(--white);
    border-color: var(--brand-primary-hover);
}

.fb-btn--primary:hover {
    background: var(--brand-primary-active);
    border-color: var(--brand-primary-active);
    color: var(--white);
}

.fb-btn--secondary {
    background: var(--white);
    color: var(--text-primary);
    border-color: var(--black);
}

/* Odpowiednik onMouseDown -> scale(0.97) w komponencie. */
.fb-btn:active {
    transform: scale(0.97);
}

.fb-btn--primary:active {
    background: var(--brand-primary-active);
    border-color: var(--brand-primary-active);
}

.fb-btn[disabled] {
    opacity: 0.45;
    cursor: not-allowed;
}

/* Hero CTA — nadpisanie rozmiaru z projektu (style={{fontSize:16,padding:'16px 30px'}}). */
.fb-btn--hero {
    font-size: 16px;
    padding: 16px 30px;
}

/* --- Licznik minut platformy (Issue #147) ---------------------------------
   Pod dwoma CTA w hero, w jednej linii z resztą zdania (issue update - był
   samodzielnym paskiem między hero a "Jak to działa"). Liczba jest ostylowana
   jak wyświetlacz stopera (font mono, tabularne cyfry, ciemna "kapsuła") —
   ma się wyróżniać z reszty zdania, nie chować w zwykłym tekście. Rozmiar
   liczby w em (nie własny clamp) - kurczy się razem z tekstem, żeby całe
   zdanie + kapsuła zmieściły się w jednej linii nawet na wąskich ekranach. */
.minutes-counter__text {
    margin: 20px 0 0;
    font-size: clamp(12px, 2.6vw, 15px);
    font-weight: 700;
    color: var(--text-primary);
    white-space: nowrap;
}

.minutes-counter__value {
    display: inline-block;
    min-width: 2.4ch;
    margin-right: 2px;
    padding: 0.2em 0.6em;
    background: var(--black);
    color: var(--white);
    font-family: var(--font-mono);
    font-variant-numeric: tabular-nums;
    font-weight: 700;
    font-size: 1.35em;
    letter-spacing: 0.5px;
    line-height: 1.2;
    border-radius: var(--radius-m);
    vertical-align: middle;
}

/* --- Nagłówki sekcji (Issue #156) ------------------------------------------
   Wspólny styl dla "Jak to działa", "Cennik" i "Bezpieczeństwo i prywatność" -
   żeby sekcje strony głównej trzymały jedną hierarchię nagłówków. */
.section-heading {
    font-family: var(--font-display);
    font-size: clamp(24px, 3vw, 34px);
    font-weight: 700;
    text-align: center;
    margin: 0 0 12px;
    color: var(--text-primary);
}

/* Słowo wyróżnione w nagłówku "Jak to działa? To naprawdę proste" - rose-700
   zamiast rose-500/600, żeby tekst na jasnym tle strony (--bg-page) miał
   pewny kontrast, tak jak .eyebrow i .security-card__cta niżej. */
.section-heading__accent {
    color: var(--rose-700);
}

.section-lead {
    font-size: 16px;
    line-height: 1.5;
    color: var(--text-secondary);
    max-width: 640px;
    margin: 0 auto 32px;
    text-align: center;
}

/* --- Sekcja "Jak to działa" (Issue #156) ----------------------------------- */
.how-section {
    padding: 56px 48px;
    max-width: 1400px;
    margin: 0 auto;
    width: 100%;
}

/* Odsłuch nagrania symulacji, osadzony teraz w kroku 2 "Porozmawiaj na głos
   z asystentem AI" (dawniej osobny blok .how-recording nad krokami - patrz
   nagłówek templates/index.html). Elementy .how-recording__* zostały tylko
   tam, gdzie wciąż są używane: przycisk, ikona, podpis i samo <audio>
   (bez atrybutu controls - audio bez tego atrybutu jest domyślnie ukryte
   w każdej przeglądarce, więc nie trzeba już osobnej reguły display:none). */
.how-recording__audio {
    display: flex;
    align-items: center;
    gap: var(--space-3);
}

/* Przycisk jest teraz cały obrazem (odtworz_nagranie.jpg ma już własną
   pigułkę, cień i tekst "Odtwórz nagranie") - bez własnego tła/obrysu,
   które dublowałyby to, co obrazek już rysuje. */
.how-recording__play {
    display: inline-flex;
    align-items: center;
    padding: 0;
    border: none;
    background: none;
    cursor: pointer;
    transition: transform var(--duration-base) var(--ease-standard);
}

.how-recording__play:hover,
.how-recording__play:focus-visible {
    transform: scale(1.03);
}

.how-recording__play-icon {
    display: block;
    height: 48px;
    width: auto;
}

.how-recording__play.is-playing .how-recording__play-icon {
    /* Brak osobnej grafiki na stan "pauza" - przygaszenie sygnalizuje, że
       nagranie właśnie gra. */
    opacity: 0.7;
}

.how-recording__caption {
    font-size: 14px;
    font-weight: 600;
    color: var(--text-secondary);
    text-align: left;
}

/* Blok 2: kroki "Jak to działa", materiał zawsze po prawej stronie. */
.how-steps {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    flex-direction: column;
}

/* Cienka linia pozioma między krokami zamiast samej przerwy - odstęp
   rozdzielony na padding-block, żeby linia wypadła równo w połowie. Pierwszy
   krok nie ma paddingu od góry, a ostatni nie dostaje linii pod spodem. */
.how-step {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: var(--space-6);
    align-items: center;
    padding-block: var(--space-8);
}

.how-step:first-child {
    padding-top: 0;
}

.how-step:not(:last-child) {
    border-bottom: 1px solid var(--border-subtle);
}

.how-step__text {
    display: flex;
    flex-direction: column;
    gap: var(--space-3);
    align-items: flex-start;
    order: 1;
}

.how-step__media {
    order: 2;
}

/* Materiał na zmianę stron (zig-zag) - co drugi krok. */
.how-step--flip .how-step__text {
    order: 2;
}

.how-step--flip .how-step__media {
    order: 1;
}

/* Numer kroku obok tekstu (nie nad nim) - liczba i zdanie wprowadzające w
   jednym rzędzie, reszta treści kroku (formularz, odtwarzacz) niżej pod
   spodem, na pełnej szerokości .how-step__text. */
.how-step__header {
    display: flex;
    align-items: flex-start;
    gap: var(--space-4);
}

.how-step__number {
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    width: clamp(58px, 5.4vw, 74px);
    height: clamp(58px, 5.4vw, 74px);
    border-radius: 50%;
    background: var(--rose-600);
    color: var(--white);
    font-family: var(--font-display);
    font-size: clamp(26px, 2.6vw, 34px);
    line-height: 1;
    box-shadow: 0 6px 18px rgba(0, 0, 0, .14);
}

.how-step__text p {
    margin: 0;
    font-size: 17px;
    line-height: 1.5;
    color: var(--text-primary);
    font-weight: 600;
    max-width: 460px;
}

.how-step__media {
    border-radius: var(--radius-l);
    overflow: hidden;
    background: var(--grey-100);
    aspect-ratio: 16 / 10;
    display: flex;
}

.how-step__video,
.how-step__screenshot {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
}

/* Krok 3 - zrzut raportu (raport-po-rozmowie.jpg, 763x903) jest pionowy,
   nie pasuje do proporcji 16/10 reszty kroków. Własne proporcje dopasowane
   do obrazu, żeby cały raport zmieścił się w kadrze zamiast być przycięty
   przez object-fit: cover z .how-step__screenshot. */
.how-step__media--report {
    aspect-ratio: 763 / 903;
}

.how-step__media--report .how-step__screenshot {
    object-fit: contain;
}

/* Podgląd kroku 1 ("Wklej ogłoszenie i dołącz CV") — pole tekstowe na treść
   ogłoszenia i strefa przeciągnij-upuść na CV. To poglądowa makieta pierwszego
   ekranu po zalogowaniu, nie prawdziwy formularz: przycisk prowadzi do
   logowania/listy rekrutacji jak każde inne CTA na stronie, a plik nigdzie się
   nie wysyła — nazwę pliku podmienia lokalnie static/js/landing-cv-demo.js
   (drag&drop + wybór z dysku), żeby podgląd reagował, zanim odwiedzający
   w ogóle założy konto. */
.how-step-form {
    margin-top: var(--space-5);
    display: flex;
    flex-direction: column;
    gap: var(--space-3);
    background: var(--surface-card);
    border: 1px solid var(--border-subtle);
    border-radius: var(--radius-l);
    padding: var(--space-5);
    width: 100%;
    max-width: 460px;
}

.how-step-form__label {
    display: block;
    font-size: 13px;
    font-weight: 700;
    color: var(--text-primary);
    margin-bottom: 6px;
}

.how-step-form textarea {
    width: 100%;
    min-height: 84px;
    resize: vertical;
    padding: 10px 14px;
    border-radius: var(--radius-m);
    border: var(--border-w) solid var(--border-default);
    background: var(--white);
    font-family: var(--font-body);
    font-size: 14px;
    color: var(--text-primary);
}

.how-step-form textarea:focus-visible {
    outline: 3px solid var(--focus-ring);
    outline-offset: 2px;
    border-color: var(--border-strong);
}

.how-step-form__input {
    width: 100%;
    padding: 10px 14px;
    border-radius: var(--radius-m);
    border: var(--border-w) solid var(--border-default);
    background: var(--white);
    font-family: var(--font-body);
    font-size: 14px;
    color: var(--text-primary);
}

.how-step-form__input:focus-visible {
    outline: 3px solid var(--focus-ring);
    outline-offset: 2px;
    border-color: var(--border-strong);
}

.how-step-form__drop {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: var(--space-4);
    border-radius: var(--radius-m);
    border: 2px dashed var(--border-default);
    background: var(--white);
    cursor: pointer;
    transition: border-color var(--duration-fast) var(--ease-standard),
                background var(--duration-fast) var(--ease-standard);
}

.how-step-form__drop:hover,
.how-step-form__drop:focus-visible {
    border-color: var(--rose-600);
}

.how-step-form__drop.is-over {
    border-color: var(--rose-600);
    background: var(--rose-100);
}

.how-step-form__drop-icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 38px;
    height: 38px;
    flex: none;
    border-radius: var(--radius-m);
    background: var(--rose-100);
    color: var(--rose-700);
}

.how-step-form__drop-text {
    font-size: 14px;
    line-height: 1.5;
}

.how-step-form__drop-filename {
    display: block;
    font-weight: 700;
    color: var(--text-primary);
}

.how-step-form__drop-hint {
    color: var(--text-muted);
}

/* Issue #158 (follow-up): komunikat "dołącz CV", pokazywany, gdy formularz
   (teraz prawdziwy, nie makieta) wysyłany jest bez pliku. */
.how-step-form__error {
    margin: 0;
    font-size: 13px;
    color: var(--status-danger-fg);
}

.how-step-form__foot {
    display: flex;
    align-items: center;
    gap: var(--space-4);
    flex-wrap: wrap;
    margin-top: 4px;
}

.how-step-form__note {
    font-size: 13px;
    color: var(--text-muted);
}

/* CTA zamykające kroki "Jak to działa" - kolejny naturalny moment w ścieżce
   odwiedzającego, żeby zaproponować start: rozumie już cały proces, więc to
   dobre miejsce na wezwanie do działania przed sekcją Cennik. */
.how-cta {
    text-align: center;
    margin-top: var(--space-8);
}

.how-cta__text {
    margin: 0 0 var(--space-4);
    font-size: 18px;
    font-weight: 700;
    color: var(--text-primary);
}

/* --- Sekcja "Co dostajesz" (nowa struktura z projektu Design) -------------
   Cztery karty z ikoną, odpowiadające na "co właściwie dostaję" - między
   krokami "Jak to działa" a zestawieniem Cennika. Traktowanie #2 z sekcji 4
   docs/design.md (lekkie, 1px obrys, cień dopiero na hover) - tak jak
   .pricing-card i .security-card niżej. */
.value-section {
    padding: 56px 48px;
    max-width: 1400px;
    margin: 0 auto;
    width: 100%;
}

.value-grid {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: var(--space-5);
}

.value-card {
    height: 100%;
    background: var(--surface-card);
    border: 1px solid var(--border-subtle);
    border-radius: var(--radius-l);
    padding: var(--space-5);
    transition: transform var(--duration-base) var(--ease-out),
                border-color var(--duration-base) var(--ease-standard),
                box-shadow var(--duration-base) var(--ease-standard);
}

.value-card:hover,
.value-card:focus-within {
    border-color: var(--rose-600);
    box-shadow: var(--shadow-m);
    transform: translateY(-3px);
}

.value-card__icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 44px;
    height: 44px;
    border-radius: var(--radius-m);
    background: var(--rose-100);
    color: var(--rose-700);
    margin-bottom: 14px;
}

.value-card h3 {
    font-family: var(--font-display);
    font-size: 19px;
    margin: 0 0 8px;
    color: var(--text-primary);
}

.value-card p {
    margin: 0;
    color: var(--text-secondary);
    font-size: 15px;
    line-height: 1.6;
}

/* Wideo "Przed i Po" pod .value-grid (patrz templates/index.html) -
   wyśrodkowane.
   Odtwarzanie startuje dopiero po wjechaniu w widok - patrz
   [data-scroll-play] w static/js/landing-reveal.js. */
.value-section__compare-heading {
    margin-top: 40px;
}

.value-image {
    display: block;
    width: 100%;
    max-width: 500px;
    height: auto;
    margin: 0 auto;
    border-radius: var(--radius-l);
}

/* --- Sekcja "Bez Feedback / Z Feedback" (nowa struktura z projektu Design) -
   Kontrast problem→rozwiązanie w jednej karcie, dwie kolumny. Plakietki
   .compare-badge to lekka wersja Badge z projektu — bez oddzielnego
   komponentu, bo to jedyne miejsce, gdzie się pojawia. */
.compare-section {
    padding: 8px 48px 56px;
    max-width: 1400px;
    margin: 0 auto;
    width: 100%;
}

.compare-card {
    background: var(--surface-card);
    border: 1px solid var(--border-subtle);
    border-radius: var(--radius-l);
    padding: var(--space-6);
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: var(--space-6);
}

.pill-badge {
    display: inline-block;
    padding: 4px 12px;
    border-radius: var(--radius-pill);
    font-size: 12px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: var(--tracking-wide);
}

.pill-badge--neutral {
    background: var(--status-neutral-bg);
    color: var(--status-neutral-fg);
}

.pill-badge--success {
    background: var(--status-success-bg);
    color: var(--status-success-fg);
}

.pill-badge--danger {
    background: var(--status-danger-bg);
    color: var(--status-danger-fg);
}

/* Plakietka "Najczęściej wybierany" nad kartą planu Standard, patrz
   .pricing-card-wrap niżej. */
.pill-badge--rose {
    background: var(--rose-600);
    color: var(--white);
}

.compare-list {
    list-style: none;
    margin: 16px 0 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: 12px;
}

.compare-list li {
    display: grid;
    grid-template-columns: 20px 1fr;
    gap: 10px;
    line-height: 1.55;
}

.compare-list--before li {
    color: var(--text-secondary);
}

.compare-list--before .icon {
    color: var(--text-muted);
    margin-top: 2px;
}

.compare-list--after li {
    color: var(--text-primary);
    font-weight: 500;
}

.compare-list--after .icon {
    color: var(--success-700);
    margin-top: 2px;
}

/* --- Sekcja "Cennik" (Issue #156, treść dawnej /cennik) -------------------- */
.pricing-section {
    padding: 56px 48px;
    max-width: 1400px;
    margin: 0 auto;
    width: 100%;
}

.pricing-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: var(--space-6);
    margin-bottom: var(--space-7);
}

/* Owija .pricing-card tylko dla planu z plakietką - position:relative na
   każdej karcie byłoby nieszkodliwe, ale niepotrzebne tam, gdzie nic się nie
   pozycjonuje względem niej. */
.pricing-card-wrap {
    position: relative;
    height: 100%;
}

.pricing-card-wrap .pill-badge {
    position: absolute;
    top: -13px;
    left: 24px;
    z-index: 1;
}

.pricing-card-wrap .pricing-card {
    height: 100%;
}

/* Ramka celowo cienka i jasna (1px --border-subtle), bez cienia domyślnie -
   to samo, delikatniejsze traktowanie co miały kafelki na dawnej /cennik
   (.cennik-grid .tile w style.css), zamiast grubego czarnego obrysu DS. */
.pricing-card {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    padding: var(--space-6);
    border: 1px solid var(--border-subtle);
    border-radius: var(--radius-l);
    background: var(--surface-card);
    box-shadow: none;
    transition: border-color var(--duration-base) var(--ease-standard),
                box-shadow var(--duration-base) var(--ease-standard);
}

.pricing-card:hover,
.pricing-card:focus-within {
    border-color: var(--rose-600);
    box-shadow: var(--shadow-m);
}

.pricing-card h3 {
    font-family: var(--font-display);
    font-size: 22px;
    margin: 0;
    color: var(--text-primary);
}

.pricing-card__price {
    display: flex;
    align-items: baseline;
    gap: 6px;
    margin: var(--space-3) 0 var(--space-4);
}

.pricing-card__amount {
    font-family: var(--font-display);
    font-size: 44px;
    line-height: 1;
    font-weight: 700;
    color: var(--text-primary);
}

.pricing-card__currency {
    font-size: 16px;
    font-weight: 600;
    color: var(--text-secondary);
}

.pricing-card__features {
    list-style: none;
    margin: 0 0 var(--space-5);
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: var(--space-2);
    width: 100%;
}

.pricing-card__features li {
    position: relative;
    padding-left: 1.5rem;
    color: var(--text-secondary);
    font-size: 14px;
    line-height: 1.5;
}

.pricing-card__features li::before {
    content: "✓";
    position: absolute;
    left: 0;
    top: 0;
    color: var(--success-700);
    font-weight: 700;
}

/* Wyjątek od checka na zielono powyżej: plan Deal nie oferuje śledzenia
   postępów w wielu projektach rekrutacyjnych, więc dostaje czerwony krzyżyk
   zamiast zielonego checka. */
.pricing-card__features li.pricing-card__features-item--no::before {
    content: "✕";
    color: var(--rose-600);
}

.pricing-card .fb-btn {
    margin-top: auto;
}

/* "Co zawierają wszystkie pakiety?" - blok wspólny dla wszystkich trzech
   kart, więc pod .pricing-grid, a nie powtórzony w każdej karcie. */
.pricing-includes {
    max-width: 720px;
    margin: 0 auto var(--space-5);
    text-align: left;
}

.pricing-includes h3 {
    font-family: var(--font-display);
    font-size: 20px;
    margin: 0 0 var(--space-3);
    text-align: center;
    color: var(--text-primary);
}

.pricing-includes ul {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: var(--space-2);
}

.pricing-includes li {
    color: var(--text-secondary);
    font-size: 14px;
    line-height: 1.5;
}

.pricing-includes li strong {
    color: var(--text-primary);
}

.pricing-note {
    margin: var(--space-5) 0 0;
    text-align: center;
    font-size: 14px;
    color: var(--text-muted);
}

/* Issue #158: baner nad cennikiem dla odwiedzającego, którego bezpłatna
   próbka się skończyła - ta sama para kolorów co strefa CV po upuszczeniu
   pliku (.how-step-form__drop.is-over) dla spójności z resztą strony. */
.pricing-trial-banner {
    max-width: 720px;
    margin: 0 auto var(--space-5);
    padding: var(--space-4);
    border: 2px solid var(--rose-600);
    border-radius: var(--radius-m);
    background: var(--rose-100);
    text-align: center;
    font-size: 15px;
}

.pricing-trial-banner p {
    margin: 0;
}

/* --- Sekcja "Bezpieczeństwo i prywatność" (Issue #156, kafelki z /funkcje) - */
.security-section {
    padding: 56px 48px;
    max-width: 1400px;
    margin: 0 auto;
    width: 100%;
}

.security-grid {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: var(--space-6);
}

.security-card {
    padding: var(--space-6);
    border: 1px solid var(--border-subtle);
    border-radius: var(--radius-l);
    background: var(--surface-card);
}

.security-card h3 {
    font-family: var(--font-display);
    font-size: 19px;
    margin: 0 0 var(--space-2);
    color: var(--text-primary);
}

.security-card p {
    margin: 0 0 var(--space-3);
    color: var(--text-secondary);
    font-size: 15px;
    line-height: 1.6;
}

.security-card__cta {
    color: var(--rose-700);
    font-weight: 700;
    font-size: 14px;
    text-decoration: none;
}

.security-card__cta:hover,
.security-card__cta:focus-visible {
    text-decoration: underline;
}

/* --- Sekcja FAQ (nowa struktura z projektu Design) ------------------------
   <details>/<summary> naciwne - bez JS-a, ten sam wzorzec co reszta serwisu
   trzyma się elementów natywnych gdzie się da (np. checkboxy formularzy). */
.faq-section {
    padding: 8px 48px 56px;
    max-width: 1400px;
    margin: 0 auto;
    width: 100%;
}

.faq-list {
    max-width: 820px;
    margin: 24px auto 0;
    display: flex;
    flex-direction: column;
    gap: 12px;
}

.faq-item {
    background: var(--surface-card);
    border: 1px solid var(--border-subtle);
    border-radius: var(--radius-m);
    padding: 16px 20px;
}

.faq-item summary {
    cursor: pointer;
    font-weight: 700;
    color: var(--text-primary);
    list-style: none;
}

.faq-item summary::-webkit-details-marker {
    display: none;
}

.faq-item summary::after {
    content: "+";
    float: right;
    font-weight: 400;
    color: var(--text-muted);
}

.faq-item[open] summary::after {
    content: "\2212";
}

.faq-item p {
    margin: 10px 0 0;
    color: var(--text-secondary);
    line-height: 1.6;
}

/* --- Sekcja bloga (5 najnowszych wpisów, między FAQ i baner zamykający) --- */
.blog-section {
    padding: 8px 48px 56px;
    max-width: 1400px;
    margin: 0 auto;
    width: 100%;
}

/* Cała lista w jednym bloku (bez białej karty) - wiersze rozdziela tylko
   linia, tytuły tym samym krojem wyświetlanym co nagłówki sekcji (np.
   "Przećwicz trudne pytania rekrutacyjne."), żeby odróżnić je od reszty
   treści strony. */
.blog-list-card {
    max-width: 820px;
    margin: 24px auto 0;
}

.blog-list {
    margin: 0;
    padding: 0;
    list-style: none;
}

.blog-list-item + .blog-list-item {
    border-top: 1px solid var(--border-subtle);
}

.blog-list-item a {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 16px 20px;
    color: var(--text-primary);
    font-family: var(--font-display);
    text-decoration: none;
    border-radius: var(--radius-m);
}

.blog-list-item a:hover,
.blog-list-item a:focus-visible {
    background: var(--surface-rose);
}

.blog-list-item .icon {
    flex-shrink: 0;
    color: var(--rose-700);
}

/* --- Baner zamykający (nowa struktura z projektu Design) ------------------
   Ostatnie wezwanie do działania przed stopką, ta sama plama koloru co
   .eyebrow/.security-card__cta (surface-rose), żeby zamykało stronę bez
   wprowadzania nowego akcentu. */
.final-cta-section {
    padding: 0 48px 72px;
    max-width: 1400px;
    margin: 0 auto;
    width: 100%;
}

.final-cta-card {
    background: var(--surface-rose);
    border: 1px solid var(--rose-200);
    border-radius: var(--radius-l);
    padding: 56px 32px;
    text-align: center;
}

.final-cta-card h2 {
    font-family: var(--font-display);
    font-size: clamp(26px, 3.2vw, 38px);
    margin: 0 0 12px;
    color: var(--text-primary);
}

.final-cta-card .section-lead {
    margin-bottom: 24px;
}

.final-cta-card .cta-row {
    justify-content: center;
}

/* --- Stopka -------------------------------------------------------------- */
.landing-footer {
    padding: 14px 48px;
    display: flex;
    justify-content: space-between;
    gap: var(--space-5);
    flex-wrap: wrap;
    font-size: 13px;
    color: var(--text-muted);
}

/* Inline flow (nie flex) — separatory „·” to węzły tekstowe i mają się
   zawijać razem z linkami na wąskich ekranach. */
.landing-footer__legal {
    text-align: right;
}

.landing-footer a {
    color: inherit;
}

.landing-footer a:hover {
    color: var(--rose-700);
}

/* --- Fokus --------------------------------------------------------------- */
a:focus-visible,
button:focus-visible {
    outline: 3px solid var(--focus-ring);
    outline-offset: 3px;
    border-radius: var(--radius-s);
}

#main-content:focus {
    outline: none;
}

/* --- Skip-link (za base.html) -------------------------------------------- */
.skip-link {
    position: absolute;
    left: -9999px;
    top: 0;
    z-index: 1000;
    background: var(--black);
    color: var(--white);
    padding: var(--space-2) var(--space-4);
    font-weight: 700;
}

.skip-link:focus {
    left: 0;
}

/* --- Panel dostępności (za base.html, na tokenach DS) --------------------- */
.a11y-toggle-btn {
    position: fixed;
    right: 0;
    top: 50%;
    transform: translateY(-50%);
    z-index: 999;
    width: 48px;
    height: 48px;
    background: var(--black);
    color: var(--white);
    border: none;
    border-radius: var(--radius-m) 0 0 var(--radius-m);
    font-size: 1.5rem;
    cursor: pointer;
    display: flex;
    align-items: center;
    justify-content: center;
    transition: background var(--duration-base) var(--ease-standard);
}

.a11y-toggle-btn:hover,
.a11y-toggle-btn:focus-visible {
    background: var(--rose-700);
}

.a11y-panel {
    position: fixed;
    right: -320px;
    top: 0;
    width: 300px;
    max-width: 100%;
    height: 100%;
    background: var(--surface-card);
    border-left: var(--border-w) solid var(--black);
    box-shadow: var(--shadow-l);
    z-index: 1000;
    transition: right var(--duration-slow) var(--ease-out);
    padding: var(--space-5);
    overflow-y: auto;
}

.a11y-panel.open {
    right: 0;
}

.a11y-panel-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: var(--space-5);
}

.a11y-panel-header h2 {
    margin: 0;
    font-size: var(--text-heading-m);
    font-family: var(--font-display);
    color: var(--text-primary);
}

.a11y-close-btn {
    background: none;
    border: none;
    font-size: 1.8rem;
    line-height: 1;
    cursor: pointer;
    color: var(--text-primary);
}

.a11y-options {
    list-style: none;
    margin: 0;
    padding: 0;
}

.a11y-options li {
    margin-bottom: var(--space-2);
}

.a11y-options button {
    display: block;
    width: 100%;
    padding: var(--space-3) var(--space-4);
    background: var(--surface-card-alt);
    border: var(--border-w-thick) solid transparent;
    border-radius: var(--radius-m);
    font-family: var(--font-body);
    font-size: var(--text-body-m);
    text-align: left;
    color: var(--text-primary);
    cursor: pointer;
    transition: border-color var(--duration-base) var(--ease-standard),
                background var(--duration-base) var(--ease-standard);
}

.a11y-options button:hover,
.a11y-options button:focus-visible {
    border-color: var(--black);
    background: var(--grey-200);
}

.a11y-options button.active {
    border-color: var(--black);
    background: var(--surface-rose);
    font-weight: 700;
}

/* --- Klasy dodawane przez static/js/accessibility.js ----------------------
   Strona jest w całości oparta na tokenach, więc wysoki kontrast to po prostu
   przemapowanie aliasów semantycznych na czerń/biel. */
body.high-contrast {
    --bg-page: #000000;
    --bg-alt: #000000;
    --surface-card: #1A1A1A;
    --surface-card-alt: #1A1A1A;
    --surface-rose: #1A1A1A;
    --text-primary: #FFFFFF;
    --text-secondary: #E0E0E0;
    --text-muted: #E0E0E0;
    --border-subtle: #FFFFFF;
    --border-default: #FFFFFF;
    --border-strong: #FFFFFF;
    --black: #FFFFFF;
    --grey-100: #1A1A1A;
    --grey-200: #2A2A2A;
    --rose-100: #1A1A1A;
    --rose-600: #FF9DB2;
    --rose-700: #FF9DB2;
    --focus-ring: #F2D93B;
}

/* .eyebrow ma na sztywno --rose-700 jako kolor tekstu na --rose-100; po
   przemapowaniu obie zmienne są ciemne/jasne właściwie, ale ramka poprawia
   czytelność plakietki na czarnym tle. */
body.high-contrast .eyebrow {
    border: var(--border-w) solid #FFFFFF;
}

/* Przycisk marki na czarnym tle — biały tekst na różu ma za mały kontrast
   w trybie wysokiego kontrastu; odwracamy na biel/czerń. */
body.high-contrast .fb-btn--primary {
    background: #FFFFFF;
    color: #000000;
    border-color: #FFFFFF;
}

body.high-contrast .a11y-toggle-btn {
    background: #FFFFFF;
    color: #000000;
}

body.underline-links a {
    text-decoration: underline !important;
}

body.reduced-motion,
body.reduced-motion *,
body.reduced-motion *::before,
body.reduced-motion *::after {
    animation: none !important;
    transition: none !important;
}

body.reduced-motion .fb-btn:active {
    transform: none;
}

@media (prefers-reduced-motion: reduce) {
    .fb-btn,
    .a11y-panel,
    .a11y-toggle-btn,
    .a11y-options button {
        transition: none;
    }

    .fb-btn:active {
        transform: none;
    }
}

/* --- Responsywność (za projektem) ---------------------------------------- */
@media (max-width: 820px) {
    .promo-banner {
        padding: 9px 24px;
    }

    .hero {
        grid-template-columns: 1fr;
        padding: 0 24px 24px;
    }

    .how-section,
    .pricing-section,
    .security-section,
    .value-section {
        padding: 40px 24px;
    }

    .compare-section,
    .faq-section,
    .blog-section {
        padding: 8px 24px 40px;
    }

    .how-recording__caption {
        text-align: left;
    }

    .how-step,
    .how-step--flip {
        grid-template-columns: 1fr;
    }

    /* .how-step--flip .how-step__media ma order:1 poza tym media query
       (specyficzność 0,2,0) - trzeba je nadpisać tu wprost, bo sama reguła
       .how-step__media{order:-1} (0,1,0) by przegrała mimo bycia w @media. */
    .how-step__media,
    .how-step--flip .how-step__media {
        order: -1;
    }

    .pricing-grid,
    .security-grid,
    .value-grid {
        grid-template-columns: 1fr;
    }

    .compare-card {
        grid-template-columns: 1fr;
        gap: var(--space-5);
    }

    .final-cta-section {
        padding-left: 24px;
        padding-right: 24px;
    }

    .final-cta-card {
        padding: 40px 20px;
    }

    .landing-footer {
        padding: 14px 24px;
    }
}

/* Zabezpieczenie na bardzo wąskie ekrany: gdyby zdanie licznika minut
   (patrz .minutes-counter__text wyżej) mimo clamp() nie mieściło się już
   w jednej linii, ma się złamać, nie wyjechać poza .hero. */
@media (max-width: 400px) {
    .minutes-counter__text {
        white-space: normal;
    }
}
