/* ==========================================================================
   Booking — warstwa premium
   --------------------------------------------------------------------------
   Nadpisuje legacy CSS formularza rezerwacji (chauffeur-booking-system +
   theme style.css). Legacy celuje selektorami `.booking-page #booking-form
   .vip-booking--steps ...` (1 ID + 3 klasy), więc samo `.vip-booking X`
   przegrywa kaskadę. Stąd jednolity prefiks `.booking-page #booking-form`
   przy regułach nadpisujących — przy równej specyficzności wygrywa ten plik,
   bo ładowany jest jako ostatni. !important tylko tam, gdzie musi
   bić stan globalny (klawiatura ekranowa, prefers-reduced-motion).

   Reguły dla elementów, których legacy nie zna (.booking-segmented,
   .booking-estimate, .booking-mobile-bar, .booking-vehicle-delta), zostają
   bez prefiksu — nie mają z czym kolidować.

   Język wizualny zgodny z redesignem strony głównej (home-premium.css):
   Playfair Display na nagłówkach, Montserrat w UI, złoto #CDB27B.
   ========================================================================== */

/* Zmienne na :root, nie na .vip-booking — pasek mobilny jest doklejany
   do <body>, poza drzewem formularza, i bez tego dostawał niezdefiniowane
   wartości (przycisk: biały tekst na przezroczystym tle). */
:root {
    --bk-gold:        #CDB27B;
    --bk-gold-deep:   #8F7346;   /* akcenty, ikony, ramki */
    --bk-gold-text:   #7A6238;   /* złoto na tekst — 5.7:1 na jasnym tle (AA) */
    --bk-on-gold:     #101010;   /* tekst NA złocie — 9.3:1; ta sama wartość
                                    co btn-primary-lux na stronie głównej.
                                    Biały dawał tu 2.05:1, poniżej progu AA. */
    --bk-ink:         #171D17;
    --bk-ink-soft:    #4A4F4A;
    --bk-muted:       #686764;   /* 5.6:1 — AA także przy 11 px */
    --bk-paper:       #FBFAF8;
    --bk-paper-warm:  #F4F1E9;
    --bk-line:        #E4DFD4;
    --bk-line-soft:   #EFEBE2;
    --bk-radius:      14px;
    --bk-radius-sm:   10px;
    --bk-shadow:      0 1px 2px rgba(23, 29, 23, .04), 0 8px 24px rgba(23, 29, 23, .05);
    --bk-shadow-lift: 0 2px 4px rgba(23, 29, 23, .05), 0 14px 36px rgba(23, 29, 23, .09);
}

/* --------------------------------------------------------------------------
   1. Nagłówek sekcji
   Był: Montserrat 300 / 38px / uppercase — przycinał ogonki (ó, ł, ż),
   bo line-height nie mieścił descenderów. Teraz Playfair z zapasem.
   -------------------------------------------------------------------------- */
.booking-page #booking-form .vip-booking .vip-booking-separator {
    font-family: 'Playfair Display', 'Playfair Fallback', serif;
    font-size: clamp(26px, 2.4vw, 34px);
    font-weight: 400;
    line-height: 1.28;
    letter-spacing: -0.01em;
    text-transform: none;
    color: var(--bk-ink);
    margin: 0 0 22px;
    padding: 0 0 16px;
    border-bottom: 1px solid var(--bk-line-soft);
    overflow: visible;
}

/* --------------------------------------------------------------------------
   2. Etykiety pól
   Były: 11px / tracking 1.54px / #7C7B79 — na granicy czytelności.
   -------------------------------------------------------------------------- */
.booking-page #booking-form .vip-booking .chbs-form-field > label,
.booking-page #booking-form .vip-booking .booking-stops-label {
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-size: 12px;
    font-weight: 500;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: var(--bk-ink-soft);
    margin-bottom: 7px;
    display: block;
}

/* --------------------------------------------------------------------------
   3. Pola formularza — wspólny rytm
   -------------------------------------------------------------------------- */
.booking-page #booking-form .vip-booking .chbs-form-field input[type="text"],
.booking-page #booking-form .vip-booking .chbs-form-field input[type="email"],
.booking-page #booking-form .vip-booking .chbs-form-field input[type="tel"],
.booking-page #booking-form .vip-booking .chbs-form-field select,
.booking-page #booking-form .vip-booking .chbs-form-field textarea {
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-size: 16px;
    color: var(--bk-ink);
    background: #fff;
    border: 1px solid var(--bk-line);
    border-radius: var(--bk-radius-sm);
    padding: 13px 15px;
    height: auto;
    min-height: 52px;
    transition: border-color .18s ease, box-shadow .18s ease, background .18s ease;
}

.booking-page #booking-form .vip-booking .chbs-form-field input:hover:not(:focus),
.booking-page #booking-form .vip-booking .chbs-form-field select:hover:not(:focus) {
    border-color: #D3CBBB;
}

.booking-page #booking-form .vip-booking .chbs-form-field input:focus,
.booking-page #booking-form .vip-booking .chbs-form-field select:focus,
.booking-page #booking-form .vip-booking .chbs-form-field textarea:focus {
    border-color: var(--bk-gold);
    box-shadow: 0 0 0 3px rgba(205, 178, 123, .16);
    outline: none;
}

.booking-page #booking-form .vip-booking .chbs-form-field input::placeholder,
.booking-page #booking-form .vip-booking .chbs-form-field textarea::placeholder {
    color: #A8A5A0;
}

/* Adresy bywają długie ("Lotnisko Chopina Warszawa (Lotnisko Okęcie) (WAW),
   Żwirki i Wigury, Warszawa, Polska") — ucinane były bez żadnego sygnału. */
.booking-page #booking-form .vip-booking .chbs-form-field-location-autocomplete input {
    text-overflow: ellipsis;
    white-space: nowrap;
    overflow: hidden;
}

/* --------------------------------------------------------------------------
   4. Selecty — brakowało strzałki (appearance:none + brak background-image),
   więc nie było jak poznać, że pole jest rozwijane.
   -------------------------------------------------------------------------- */
.booking-page #booking-form .vip-booking .chbs-form-field select {
    appearance: none;
    -webkit-appearance: none;
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8' fill='none'%3E%3Cpath d='M1 1.5L6 6.5L11 1.5' stroke='%238F7346' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
    background-repeat: no-repeat;
    background-position: right 16px center;
    padding-right: 42px;
    cursor: pointer;
}

/* --------------------------------------------------------------------------
   5. Przełącznik segmentowy (typ usługi, kierunek)
   Sterowany z JS; oryginalny <select> zostaje w DOM jako źródło prawdy,
   dzięki czemu logika booking.js działa bez zmian.
   -------------------------------------------------------------------------- */
.booking-segmented {
    display: grid;
    grid-auto-flow: column;
    grid-auto-columns: 1fr;
    gap: 4px;
    padding: 4px;
    background: var(--bk-paper-warm);
    border: 1px solid var(--bk-line-soft);
    border-radius: 12px;
}

.booking-segmented-option {
    appearance: none;
    border: 1px solid transparent;
    background: transparent;
    border-radius: 9px;
    padding: 12px 14px;
    min-height: 44px;
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-size: 14px;
    font-weight: 500;
    color: var(--bk-ink-soft);
    cursor: pointer;
    transition: background .18s ease, color .18s ease, box-shadow .18s ease;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
    line-height: 1.3;
    text-align: center;
}

.booking-segmented-option:hover:not(.is-active) {
    color: var(--bk-ink);
    background: rgba(255, 255, 255, .6);
}

.booking-segmented-option.is-active {
    background: #fff;
    border-color: var(--bk-line);
    color: var(--bk-ink);
    box-shadow: 0 1px 2px rgba(23, 29, 23, .05), 0 2px 8px rgba(23, 29, 23, .06);
}

.booking-segmented-option svg {
    flex-shrink: 0;
    stroke: currentColor;
    opacity: .55;
}

.booking-segmented-option.is-active svg {
    stroke: var(--bk-gold-deep);
    opacity: 1;
}

.booking-segmented-option:focus-visible {
    outline: 2px solid var(--bk-gold);
    outline-offset: 2px;
}

/* Select zastąpiony przełącznikiem zostaje dostępny dla asystujących
   technologii, ale znika wizualnie. */
.booking-page #booking-form .vip-booking .chbs-form-field.has-segmented select {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0 0 0 0);
    white-space: nowrap;
    border: 0;
}

/* --------------------------------------------------------------------------
   6. Kolumna z mapą
   Prawa kolumna kończyła się ~200 px wyżej niż lewa, zostawiając pustkę.
   Mapa rośnie do wysokości formularza, statystyki trasy są zagęszczone.
   -------------------------------------------------------------------------- */
.booking-page #booking-form .vip-booking .booking-step-layout {
    align-items: stretch;
}

.booking-page #booking-form .vip-booking .booking-step-layout-right {
    display: flex;
    flex-direction: column;
    gap: 14px;
}

.booking-page #booking-form .vip-booking .booking-map-wrap {
    flex: 1 1 auto;
    min-height: 420px;
    border-radius: var(--bk-radius);
    overflow: hidden;
    border: 1px solid var(--bk-line-soft);
    box-shadow: var(--bk-shadow);
}

.booking-page #booking-form .vip-booking .booking-map-wrap .booking-map {
    height: 100%;
    min-height: 420px;
}

/* Kafelki dystansu i czasu — było 146 px wysokości na kafelek przy 20 px
   typografii; teraz kompaktowa para z wyraźną hierarchią liczba/etykieta. */
.booking-page #booking-form .vip-booking .booking-route-stats {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 1px;
    background: var(--bk-line-soft);
    border: 1px solid var(--bk-line-soft);
    border-radius: var(--bk-radius);
    overflow: hidden;
    box-shadow: none;
    flex: 0 0 auto;
}

.booking-page #booking-form .vip-booking .booking-route-stats > div {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 2px;
    background: #fff;
    padding: 14px 18px;
    font-size: 13px;
    line-height: 1.35;
}

/* Kolejność w HTML: [ikona] [etykieta] [wartość] */
.booking-page #booking-form .vip-booking .booking-route-stats > div > span:nth-child(2) {
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-size: 11px;
    font-weight: 500;
    letter-spacing: 0.07em;
    text-transform: uppercase;
    color: var(--bk-muted);
    order: 1;
}

.booking-page #booking-form .vip-booking .booking-route-stats > div > span:nth-child(3) {
    font-family: 'Playfair Display', 'Playfair Fallback', serif;
    font-size: 22px;
    font-weight: 500;
    color: var(--bk-ink);
    order: 2;
    letter-spacing: -0.01em;
}

.booking-page #booking-form .vip-booking .booking-route-stats > div > span[class^="chbs-meta-icon"] {
    order: 0;
    opacity: .5;
}

/* --------------------------------------------------------------------------
   7. Szacunek ceny na kroku 1
   Wcześniej pierwszą informacją o cenie był dopiero krok 2 — użytkownik
   przechodził dalej "w ciemno".
   -------------------------------------------------------------------------- */
.booking-estimate {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 16px;
    flex: 0 0 auto;
    padding: 16px 20px;
    border: 1px solid rgba(205, 178, 123, .38);
    border-radius: var(--bk-radius);
    background: linear-gradient(135deg, #FFFDF8 0%, #FBF6EC 100%);
}

.booking-estimate-label {
    display: flex;
    align-items: center;
    gap: 9px;
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-size: 11px;
    font-weight: 500;
    letter-spacing: 0.07em;
    text-transform: uppercase;
    color: var(--bk-gold-text);
}

.booking-estimate-label svg {
    flex-shrink: 0;
}

.booking-estimate-value {
    font-family: 'Playfair Display', 'Playfair Fallback', serif;
    font-size: 26px;
    font-weight: 500;
    color: var(--bk-ink);
    letter-spacing: -0.01em;
    white-space: nowrap;
}

.booking-estimate-note {
    display: block;
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-size: 11px;
    font-weight: 400;
    letter-spacing: 0.02em;
    text-transform: none;
    color: var(--bk-muted);
    margin-top: 3px;
}

.booking-estimate.is-loading .booking-estimate-value {
    color: var(--bk-muted);
}

/* --------------------------------------------------------------------------
   8. Pasek zaufania nad formularzem
   -------------------------------------------------------------------------- */
.booking-page #booking-form .vip-booking .booking-trust-strip {
    display: flex;
    flex-wrap: wrap;
    gap: 8px 22px;
    padding: 14px 18px;
    margin: 0 0 24px;
    background: var(--bk-paper);
    border: 1px solid var(--bk-line-soft);
    border-radius: var(--bk-radius-sm);
}

.booking-page #booking-form .vip-booking .booking-trust-item {
    display: inline-flex;
    align-items: center;
    gap: 9px;
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-size: 13px;
    color: var(--bk-ink-soft);
    line-height: 1.4;
}

.booking-page #booking-form .vip-booking .booking-trust-item svg {
    stroke: var(--bk-gold-deep);
    flex-shrink: 0;
}

/* --------------------------------------------------------------------------
   9. Stepper — brakowało stanu "krok ukończony"
   -------------------------------------------------------------------------- */
.booking-page #booking-form .vip-booking .booking-stepper-item.is-complete .booking-stepper-index {
    background: var(--bk-gold-deep);
    border-color: var(--bk-gold-deep);
    color: #fff;
    font-size: 0;
    position: relative;
}

.booking-page #booking-form .vip-booking .booking-stepper-item.is-complete .booking-stepper-index::after {
    content: "";
    position: absolute;
    inset: 0;
    background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='13' height='13' viewBox='0 0 24 24' fill='none'%3E%3Cpath d='M20 6L9 17l-5-5' stroke='white' stroke-width='2.6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center / 13px no-repeat;
}

.booking-page #booking-form .vip-booking .booking-stepper-item.is-complete .booking-stepper-label {
    color: var(--bk-ink-soft);
}

/* Etykiety kroków jeszcze nieodwiedzonych. Wtyczka daje #8E949F — 3,05:1 na
   bieli, poniżej AA. Stopniowanie ważności zostaje (ciemniejsze niż aktywny
   krok nie jest), ale tekst staje się czytelny: 4,98:1. */
.booking-page #booking-form .vip-booking .booking-stepper-label {
    color: #6B7079;
}

.booking-page #booking-form .vip-booking .booking-stepper-item:not(.is-active):not(.is-complete) {
    cursor: default;
}

/* --------------------------------------------------------------------------
   10. Przyciski nawigacji kroków
   -------------------------------------------------------------------------- */
.booking-page #booking-form .vip-booking .booking-actions {
    display: flex;
    gap: 12px;
    align-items: center;
    margin-top: 26px;
}

.booking-page #booking-form .vip-booking .booking-actions .chbs-button-style-1 {
    background: var(--bk-gold);
    border-radius: 999px;
    padding: 15px 32px;
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-size: 13px;
    font-weight: 600;
    letter-spacing: 0.09em;
    text-transform: uppercase;
    color: var(--bk-on-gold);
    border: 1px solid var(--bk-gold);
    transition: background .2s ease, box-shadow .2s ease, transform .2s ease;
}

.booking-page #booking-form .vip-booking .booking-actions .chbs-button-style-1:hover {
    background: var(--bk-gold-deep);
    border-color: var(--bk-gold-deep);
    box-shadow: 0 6px 18px rgba(143, 115, 70, .26);
}

.booking-page #booking-form .vip-booking .booking-actions .chbs-button-ghost {
    background: transparent;
    border: 1px solid var(--bk-line);
    color: var(--bk-ink-soft);
    border-radius: 999px;
    padding: 15px 26px;
    font-size: 13px;
    font-weight: 500;
    letter-spacing: 0.06em;
    text-transform: uppercase;
}

.booking-page #booking-form .vip-booking .booking-actions .chbs-button-ghost:hover {
    border-color: var(--bk-gold);
    color: var(--bk-ink);
}

/* Przyciski nawigacji mają za etykiety nazwy kroków ("Szczegóły przejazdu",
   "Dane kontaktowe"), przez co cofanie i przechodzenie dalej wyglądały
   tak samo. Strzałki niosą kierunek bez ruszania tekstów w pięciu językach. */
.booking-page #booking-form .vip-booking .booking-actions
    .chbs-button-ghost[data-step-prev]::before {
    content: "\2190";
    margin-right: 9px;
    font-size: 14px;
    line-height: 1;
    opacity: .65;
}

.booking-page #booking-form .vip-booking .booking-actions
    .chbs-button-style-1[data-step-next]::after {
    content: "\2192";
    margin-left: 9px;
    font-size: 14px;
    line-height: 1;
    opacity: .8;
}

/* --------------------------------------------------------------------------
   11. Przystanki po drodze
   -------------------------------------------------------------------------- */
.booking-page #booking-form .vip-booking .booking-stops-section {
    margin: 0 0 18px;
}

.booking-page #booking-form .vip-booking .booking-stops-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    margin-bottom: 8px;
}

.booking-page #booking-form .vip-booking .booking-stops-add-btn {
    border: 1px dashed rgba(205, 178, 123, .6);
    background: transparent;
    color: #7A6238;
    border-radius: 999px;
    padding: 8px 16px;
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-size: 12px;
    font-weight: 500;
    letter-spacing: 0.03em;
    cursor: pointer;
    transition: background .18s ease, border-color .18s ease;
}

.booking-page #booking-form .vip-booking .booking-stops-add-btn:hover {
    background: rgba(205, 178, 123, .1);
    border-style: solid;
}

/* --------------------------------------------------------------------------
   12. Mobile
   Na wąskim ekranie mapa i statystyki trasy lądowały POD przyciskiem
   "Wybierz pojazd" — potwierdzenie trasy pojawiało się już po wezwaniu
   do działania. Kolejność odwrócona.
   -------------------------------------------------------------------------- */
@media (max-width: 991px) {
    /* Kolumny znikają jako pudełka (display:contents), więc ich zawartość
       staje się bezpośrednimi dziećmi siatki i można ułożyć ją w kolejności
       zadania: wypełnij → zobacz trasę i cenę → przejdź dalej.
       Wcześniej mapa i statystyki trafiały POD przycisk "Wybierz pojazd". */
    .booking-page #booking-form .vip-booking--steps .booking-step-layout {
        display: flex;
        flex-direction: column;
        gap: 0;
    }

    .booking-page #booking-form .vip-booking .booking-step-layout > .booking-step-layout-left,
    .booking-page #booking-form .vip-booking .booking-step-layout > .booking-step-layout-right {
        display: contents;
    }

    .booking-page #booking-form .vip-booking .booking-step-layout .vip-booking-separator { order: 1; }
    .booking-page #booking-form .vip-booking .booking-step-layout .booking-trust-strip   { order: 2; }
    .booking-page #booking-form .vip-booking .booking-step-layout .chbs-layout-100       { order: 3; }
    .booking-page #booking-form .vip-booking .booking-step-layout .booking-map-wrap      { order: 4; margin-bottom: 12px; }
    .booking-page #booking-form .vip-booking .booking-step-layout .booking-route-stats   { order: 5; margin-bottom: 12px; }
    .booking-page #booking-form .vip-booking .booking-step-layout .booking-estimate      { order: 6; margin-bottom: 4px; }
    .booking-page #booking-form .vip-booking .booking-step-layout .booking-actions       { order: 7; }

    .booking-page #booking-form .vip-booking .booking-map-wrap,
    .booking-page #booking-form .vip-booking .booking-map-wrap .booking-map {
        min-height: 240px;
        height: 240px;
    }

    /* Dystans i czas obok siebie — pionowo zabierały pół ekranu */
    .booking-page #booking-form .vip-booking--steps .booking-route-stats {
        grid-template-columns: 1fr 1fr;
    }

    /* "2 godz. 54 min" nie mieściło się w jednej linii przy dwóch kolumnach */
    .booking-page #booking-form .vip-booking--steps
        .booking-route-stats > div > span:nth-child(3) {
        font-size: 17px;
    }

    .booking-page #booking-form .vip-booking .vip-booking-separator {
        font-size: 24px;
        padding-bottom: 13px;
        margin-bottom: 18px;
    }

    .booking-page #booking-form .vip-booking .booking-route-stats > div {
        padding: 12px 14px;
    }

    .booking-page #booking-form .vip-booking .booking-route-stats > div > span:nth-child(3) {
        font-size: 19px;
    }

    .booking-estimate {
        padding: 14px 16px;
    }

    .booking-estimate-value {
        font-size: 22px;
    }

    .booking-page #booking-form .vip-booking .booking-actions {
        flex-direction: column-reverse;
        align-items: stretch;
    }

    .booking-page #booking-form .vip-booking .booking-actions .chbs-button {
        width: 100%;
        text-align: center;
    }

    /* iOS: font < 16px na inpucie wymusza zoom przy fokusie */
    .booking-page #booking-form .vip-booking .chbs-form-field input,
    .booking-page #booking-form .vip-booking .chbs-form-field select,
    .booking-page #booking-form .vip-booking .chbs-form-field textarea {
        font-size: 16px;
    }
}

/* Mobile — krok 2: podsumowanie trasy nad listą aut, a nie na końcu strony */
@media (max-width: 991px) {
    .booking-page #booking-form .vip-booking--steps .booking-step-layout-step2 {
        display: flex;
        flex-direction: column;
        gap: 0;
    }

    /* Kolejność kolumn na mobile zostaje jak w legacy (lista aut przed
       podsumowaniem, wymuszone przez `order: 2 !important`) — jest sensowna:
       po wpisaniu trasy użytkownik chce zobaczyć auta, nie powtórkę danych.
       Kwota, której wcześniej brakowało w zasięgu wzroku, jest teraz
       w pasku przyklejonym do dołu. */
    .booking-page #booking-form .vip-booking .booking-step-layout-step2 .booking-side-summary {
        margin-top: 22px;
    }

    .booking-mobile-bar.is-visible {
        display: flex;
    }

    /* miejsce na pasek, żeby nie zakrywał ostatnich elementów */
    body.booking-has-mobile-bar .booking-page {
        padding-bottom: 84px;
    }

    body.booking-has-mobile-bar .whatsapp-float {
        bottom: 96px;
    }

    /* Klawiatura ekranowa zasłania pasek i psuje układ pola z fokusem */
    body.keyboard-open .booking-mobile-bar {
        display: none !important;
    }

    .booking-page #booking-form .vip-booking .booking-vehicle-price {
        align-items: flex-start;
    }

    .booking-page #booking-form .vip-booking .booking-addons-grid {
        grid-template-columns: 1fr;
    }
}

@media (max-width: 575px) {
    .booking-segmented {
        grid-auto-flow: row;
    }

    .booking-mobile-bar-amount { font-size: 19px; }
    .booking-mobile-bar-btn    { padding: 12px 20px; font-size: 11px; }

    .booking-estimate {
        flex-direction: column;
        align-items: flex-start;
        gap: 6px;
    }
}

/* ==========================================================================
   KROK 2 — wybór pojazdu i dodatki
   ========================================================================== */

/* --------------------------------------------------------------------------
   K2.1 Karta pojazdu
   -------------------------------------------------------------------------- */
.booking-page #booking-form .vip-booking .booking-vehicle-card {
    border: 1px solid var(--bk-line-soft);
    border-radius: var(--bk-radius);
    background: #fff;
    transition: border-color .2s ease, box-shadow .2s ease, transform .2s ease;
}

.booking-page #booking-form .vip-booking .booking-vehicle-card:hover:not(.is-selected) {
    border-color: #D8CFBC;
    box-shadow: var(--bk-shadow);
}

.booking-page #booking-form .vip-booking .booking-vehicle-card.is-selected {
    border-color: var(--bk-gold);
    box-shadow: 0 0 0 1px var(--bk-gold), var(--bk-shadow-lift);
}

.booking-page #booking-form .vip-booking .booking-vehicle-tier {
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-size: 10px;
    font-weight: 600;
    letter-spacing: 0.16em;
    text-transform: uppercase;
    color: var(--bk-gold-text);
}

.booking-page #booking-form .vip-booking .booking-vehicle-head h5 {
    font-family: 'Playfair Display', 'Playfair Fallback', serif;
    font-size: 21px;
    font-weight: 500;
    letter-spacing: -0.01em;
    color: var(--bk-ink);
    text-transform: none;
}

/* Cena: kwota po rabacie prowadzi, cena sprzed rabatu schodzi na drugi plan.
   Wcześniej obie miały ten sam ciężar i zlewały się w jeden ciąg cyfr. */
.booking-page #booking-form .vip-booking .booking-vehicle-price {
    display: flex;
    flex-direction: column;
    align-items: flex-end;
    gap: 1px;
    font-family: 'Playfair Display', 'Playfair Fallback', serif;
    font-size: 23px;
    font-weight: 500;
    color: var(--bk-ink);
    letter-spacing: -0.01em;
    white-space: nowrap;
}

.booking-page #booking-form .vip-booking .booking-vehicle-original-strike {
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-size: 13px;
    font-weight: 400;
    color: #A8A5A0;
    text-decoration: line-through;
    letter-spacing: 0;
}

/* Promocja była zwykłym pogrubionym akapitem pod nazwą — czytało się jak
   podtytuł pojazdu, nie jak wyróżnienie oferty. */
.booking-page #booking-form .vip-booking p.booking-vehicle-promo-note {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    margin: 6px 0 0;
    padding: 4px 11px;
    border-radius: 999px;
    background: linear-gradient(135deg, #FBF3E2 0%, #F5E8CE 100%);
    border: 1px solid rgba(205, 178, 123, .5);
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-size: 11px;
    font-weight: 600;
    letter-spacing: 0.04em;
    color: #7A6238;
    text-transform: none;
    line-height: 1.3;
}

.booking-page #booking-form .vip-booking p.booking-vehicle-promo-note::before {
    content: "";
    width: 12px;
    height: 12px;
    flex-shrink: 0;
    background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%237A6238' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20.6 13.4l-7.2 7.2a2 2 0 0 1-2.8 0L2 12V2h10l8.6 8.6a2 2 0 0 1 0 2.8z'/%3E%3Ccircle cx='7' cy='7' r='1'/%3E%3C/svg%3E") center / contain no-repeat;
}

.booking-page #booking-form .vip-booking .booking-vehicle-price-col {
    display: flex;
    flex-direction: column;
    align-items: flex-end;
    flex-shrink: 0;
}

/* Dopisek "w obie strony" pod ceną renderował się jak zwykły akapit karty
   (15 px, uppercase, szary) i czytał się jak urwane zdanie nad opisem auta.
   To informacja o zakresie ceny, więc należy do kolumny z kwotą. */
.booking-page #booking-form .vip-booking p.booking-vehicle-price-meta {
    display: block;
    margin: 2px 0 0;
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-size: 11px;
    font-weight: 500;
    letter-spacing: 0.02em;
    text-transform: none;
    color: var(--bk-muted);
    text-align: right;
    line-height: 1.35;
}

.booking-page #booking-form .vip-booking p.booking-vehicle-price-meta:empty {
    display: none;
}

/* Różnica ceny względem wybranego pojazdu — dopisywana przez
   booking-premium.js, żeby porównanie klas nie wymagało liczenia w pamięci. */
.booking-vehicle-delta {
    display: block;
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-size: 12px;
    font-weight: 500;
    letter-spacing: 0.01em;
    color: var(--bk-muted);
    white-space: nowrap;
    margin-top: 2px;
}

.booking-vehicle-delta.is-cheaper { color: #4E7A52; }
.booking-vehicle-delta.is-current { color: var(--bk-gold-deep); }

.booking-page #booking-form .vip-booking .booking-vehicle-meta {
    display: flex;
    gap: 16px;
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-size: 13px;
    color: var(--bk-ink-soft);
}

/* Przycisk wyboru był szarą płytką (#F2F3F6 na #616772) — czytał się jak
   element wyłączony, a to główna akcja tego kroku. */
.booking-page #booking-form .vip-booking .booking-vehicle-select-btn {
    background: #fff;
    border: 1px solid var(--bk-gold);
    color: var(--bk-gold-deep);
    border-radius: 999px;
    padding: 11px 24px;
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-size: 12px;
    font-weight: 600;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    cursor: pointer;
    transition: background .18s ease, color .18s ease, box-shadow .18s ease;
}

.booking-page #booking-form .vip-booking .booking-vehicle-select-btn:hover {
    background: rgba(205, 178, 123, .12);
}

.booking-page #booking-form .vip-booking .booking-vehicle-select-btn.is-selected,
.booking-page #booking-form .vip-booking .booking-vehicle-card.is-selected .booking-vehicle-select-btn {
    background: var(--bk-gold);
    border-color: var(--bk-gold);
    color: var(--bk-on-gold);
    box-shadow: 0 4px 14px rgba(205, 178, 123, .32);
}

.booking-page #booking-form .vip-booking .booking-vehicle-badge {
    background: linear-gradient(135deg, var(--bk-gold) 0%, var(--bk-gold-deep) 100%);
    letter-spacing: 0.1em;
    box-shadow: 0 2px 10px rgba(143, 115, 70, .32);
}

/* Stepper ilości (tryb kilku aut) był blokiem, więc "−", liczba i "+"
   układały się jedno pod drugim (98 px wysokości zamiast rzędu). */
.booking-page #booking-form .vip-booking .booking-vehicle-action {
    display: flex;
    flex-direction: column;
    align-items: stretch;
    gap: 10px;
}

.booking-page #booking-form .vip-booking .booking-vehicle-qty[style]:not([style*="none"]) {
    display: flex !important;
}

.booking-page #booking-form .vip-booking .booking-vehicle-qty {
    display: flex;
    flex-direction: row;
    align-items: center;
    justify-content: center;
    gap: 4px;
}

.booking-page #booking-form .vip-booking .booking-vehicle-qty-btn {
    flex: 0 0 auto;
    width: 34px;
    height: 34px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    border-radius: 50%;
    border: 1px solid var(--bk-line);
    background: #fff;
    color: var(--bk-gold-text);
    font-size: 16px;
    line-height: 1;
    cursor: pointer;
    transition: border-color .15s ease, background .15s ease;
}

.booking-page #booking-form .vip-booking .booking-vehicle-qty-btn:hover {
    border-color: var(--bk-gold);
    background: rgba(205, 178, 123, .1);
}

.booking-page #booking-form .vip-booking .booking-vehicle-qty-value {
    flex: 0 0 auto;
    min-width: 28px;
    text-align: center;
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-size: 15px;
    font-weight: 600;
    color: var(--bk-ink);
}

/* --------------------------------------------------------------------------
   K2.2 Boczne podsumowanie
   -------------------------------------------------------------------------- */
.booking-page #booking-form .vip-booking .booking-side-summary {
    border: 1px solid var(--bk-line-soft);
    border-radius: var(--bk-radius);
    background: #fff;
    box-shadow: var(--bk-shadow);
}

.booking-page #booking-form .vip-booking .bss-header-label {
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-size: 10px;
    font-weight: 600;
    letter-spacing: 0.16em;
    text-transform: uppercase;
    color: var(--bk-gold-text);
}

/* Pełne adresy z Google Places bywają czteroliniowe. Do dwóch linii z
   wielokropkiem — pełna treść zostaje w tooltipie (title). */
.booking-page #booking-form .vip-booking .bss-route {
    display: -webkit-box;
    -webkit-line-clamp: 3;
    -webkit-box-orient: vertical;
    overflow: hidden;
    font-size: 13px;
    line-height: 1.45;
    color: var(--bk-ink);
}

.booking-page #booking-form .vip-booking .bss-total {
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    align-items: baseline;
}

.booking-page #booking-form .vip-booking .bss-total > span:last-child {
    font-family: 'Playfair Display', 'Playfair Fallback', serif;
    font-size: 25px;
    font-weight: 500;
    color: var(--bk-ink);
    letter-spacing: -0.01em;
}

/* --------------------------------------------------------------------------
   K2.3 Dodatki
   Nazwy typu "Szampan Moët & Chandon" łamały się na trzy linie, bo kolumna
   tekstu dzieliła miejsce ze zdjęciem i stepperem ilości.
   -------------------------------------------------------------------------- */
.booking-page #booking-form .vip-booking .booking-addons-box {
    border-radius: var(--bk-radius);
    border-color: var(--bk-line-soft);
    background: var(--bk-paper);
}

.booking-page #booking-form .vip-booking .booking-addons-box h5 {
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-size: 11px;
    letter-spacing: 0.14em;
    color: var(--bk-ink-soft);
}

.booking-page #booking-form .vip-booking .booking-addons-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
    gap: 10px;
}

.booking-page #booking-form .vip-booking .booking-addon-item {
    border-radius: 12px;
    border-color: var(--bk-line-soft);
    align-items: center;
    gap: 13px;
    padding: 13px 15px;
}

.booking-page #booking-form .vip-booking .booking-addon-item.is-active {
    border-color: var(--bk-gold);
    background: #FDFAF3;
    box-shadow: 0 0 0 1px rgba(205, 178, 123, .2);
}

.booking-page #booking-form .vip-booking .booking-addon-text {
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-size: 14px;
    font-weight: 500;
    color: var(--bk-ink);
    line-height: 1.35;
}

.booking-page #booking-form .vip-booking .booking-addon-description {
    font-size: 12px;
    color: var(--bk-muted);
    line-height: 1.4;
}

.booking-page #booking-form .vip-booking .booking-addon-price {
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-size: 13px;
    font-weight: 600;
    color: var(--bk-ink);
}

/* Kolumna z nazwą dostaje pierwszeństwo przed kontrolkami: bez tego
   "Szampan Moët & Chandon" dostawał 81 px i łamał się na trzy linie. */
.booking-page #booking-form .vip-booking .booking-addon-info {
    flex: 1 1 130px;
}

.booking-page #booking-form .vip-booking .booking-addon-qty,
.booking-page #booking-form .vip-booking .booking-addon-item .addon-qty-btn {
    flex-shrink: 0;
}

.booking-page #booking-form .vip-booking .booking-addon-item .addon-qty-btn {
    width: 26px;
    height: 26px;
}

.booking-page #booking-form .vip-booking .booking-addon-item .addon-qty-display {
    min-width: 18px;
}

.booking-page #booking-form .vip-booking .booking-addon-img {
    width: 38px !important;
    min-width: 38px !important;
    height: 46px !important;
    min-height: 46px !important;
}

/* Etykieta "najczęściej wybierany" łamała się na dwa wiersze i rozpychała
   kartę — teraz nie zawija się i zwęża tracking. */
.booking-page #booking-form .vip-booking .booking-addon-badge,
.booking-page #booking-form .vip-booking .booking-addon-item .booking-addon-tag {
    white-space: nowrap;
    letter-spacing: 0.02em;
    font-size: 10px;
}

.booking-page #booking-form .vip-booking .booking-addon-img {
    border-radius: 8px;
    background: #fff;
    border: 1px solid var(--bk-line-soft);
    padding: 2px;
}

/* Wariant dodatku — rozwija się dopiero po dodaniu go do rezerwacji.
   Fotelik dziecięcy to jedna pozycja w katalogu, ale fizycznie cztery różne
   urządzenia; rozbicie katalogu zaśmiecałoby listę wszystkim, którzy fotelika
   nie potrzebują. */
.booking-addon-variants {
    flex: 0 0 100%;
    margin-top: 12px;
    padding-top: 12px;
    border-top: 1px dashed rgba(205, 178, 123, .45);
    display: flex;
    flex-direction: column;
    gap: 9px;
}

.booking-addon-variants-hint {
    margin: 0;
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-size: 11.5px;
    line-height: 1.4;
    color: var(--bk-muted);
}

.booking-addon-variant-row {
    display: flex;
    align-items: center;
    gap: 10px;
    flex-wrap: wrap;
}

.booking-addon-variant-label {
    flex: 0 0 auto;
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-size: 11px;
    font-weight: 600;
    letter-spacing: 0.07em;
    text-transform: uppercase;
    color: var(--bk-ink-soft);
}

.booking-addon-variant-select {
    flex: 1 1 220px;
    min-width: 0;
    min-height: 44px;
    padding: 10px 38px 10px 13px;
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-size: 14px;
    color: var(--bk-ink);
    background-color: #fff;
    border: 1px solid var(--bk-line);
    border-radius: var(--bk-radius-sm);
    appearance: none;
    -webkit-appearance: none;
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8' fill='none'%3E%3Cpath d='M1 1.5L6 6.5L11 1.5' stroke='%238F7346' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
    background-repeat: no-repeat;
    background-position: right 13px center;
    cursor: pointer;
    transition: border-color .18s ease, box-shadow .18s ease;
}

.booking-addon-variant-select:focus {
    border-color: var(--bk-gold);
    box-shadow: 0 0 0 3px rgba(205, 178, 123, .16);
    outline: none;
}

.booking-addon-variant-select.is-invalid {
    border-color: #D98A82;
    background-color: #FFFBFA;
}

.booking-addon-variants-error {
    margin: 0;
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-size: 12px;
    color: #B4453A;
}

@media (max-width: 575px) {
    .booking-addon-variant-row { flex-direction: column; align-items: stretch; gap: 5px; }
    .booking-addon-variant-select { flex: 1 1 auto; }
}

/* --------------------------------------------------------------------------
   K2.4 Mobilny pasek z ceną
   Na wąskim ekranie podsumowanie z kwotą leżało po 4 600 px scrolla — i to
   ZA przyciskami nawigacji. Pasek trzyma kwotę i akcję w zasięgu wzroku.
   -------------------------------------------------------------------------- */
.booking-mobile-bar {
    display: none;
    position: fixed;
    left: 0;
    right: 0;
    bottom: 0;
    z-index: 60;
    align-items: center;
    justify-content: space-between;
    gap: 14px;
    padding: 11px 16px calc(11px + env(safe-area-inset-bottom));
    background: rgba(255, 255, 255, .97);
    backdrop-filter: blur(10px);
    border-top: 1px solid var(--bk-line);
    box-shadow: 0 -4px 20px rgba(23, 29, 23, .09);
}

.booking-mobile-bar-price {
    display: flex;
    flex-direction: column;
    line-height: 1.15;
    min-width: 0;
}

.booking-mobile-bar-label {
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-size: 10px;
    font-weight: 500;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: var(--bk-muted);
}

.booking-mobile-bar-amount {
    font-family: 'Playfair Display', 'Playfair Fallback', serif;
    font-size: 21px;
    font-weight: 500;
    color: var(--bk-ink);
    letter-spacing: -0.01em;
    white-space: nowrap;
}

.booking-mobile-bar-btn {
    flex-shrink: 0;
    background: var(--bk-gold);
    border: 1px solid var(--bk-gold);
    color: var(--bk-on-gold);
    border-radius: 999px;
    padding: 13px 26px;
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-size: 12px;
    font-weight: 600;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    cursor: pointer;
}

.booking-mobile-bar-btn:active {
    background: var(--bk-gold-deep);
}

/* ==========================================================================
   KROK 3 — dane kontaktowe
   ========================================================================== */

/* Pasek z trasą i kwotą. Na tym kroku nie było dotąd żadnej informacji
   o zamówieniu — klient wypełniał dane, nie widząc za co płaci. */
.booking-recap {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 20px;
    flex-wrap: wrap;
    margin: 0 0 26px;
    padding: 15px 20px;
    border: 1px solid var(--bk-line-soft);
    border-radius: var(--bk-radius);
    background: linear-gradient(135deg, #FFFDF8 0%, #FAF7F1 100%);
}

.booking-recap-main {
    display: flex;
    flex-direction: column;
    gap: 3px;
    min-width: 0;
    flex: 1 1 260px;
}

.booking-recap-route {
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-size: 14px;
    font-weight: 500;
    color: var(--bk-ink);
    line-height: 1.4;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
}

.booking-recap-meta {
    display: flex;
    align-items: center;
    gap: 8px;
    flex-wrap: wrap;
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-size: 12px;
    color: var(--bk-muted);
}

.booking-recap-sep { opacity: .5; }

.booking-recap-price {
    display: flex;
    flex-direction: column;
    align-items: flex-end;
    flex-shrink: 0;
    line-height: 1.15;
}

.booking-recap-price-label {
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-size: 10px;
    font-weight: 500;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: var(--bk-muted);
}

.booking-recap-price-value {
    font-family: 'Playfair Display', 'Playfair Fallback', serif;
    font-size: 24px;
    font-weight: 500;
    color: var(--bk-ink);
    letter-spacing: -0.01em;
    white-space: nowrap;
}

/* Powrót w pasku kroku 3 — przy rezerwacji w obie strony sam termin odbioru
   nie mówi wszystkiego. */
.booking-recap-return {
    display: none;
    align-items: center;
    gap: 7px;
    margin-top: 5px;
    padding: 4px 10px 4px 8px;
    align-self: flex-start;
    border-radius: 999px;
    background: rgba(205, 178, 123, .14);
    border: 1px solid rgba(205, 178, 123, .4);
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-size: 12px;
    color: var(--bk-gold-text);
    max-width: 100%;
}

/* booking.js pokazuje ten element przez jQuery .show(), które wstawia inline
   `display: block` — bez tego pigułka rozjechałaby się na blok. */
.booking-recap-return[style]:not([style*="none"]) {
    display: inline-flex !important;
}

.booking-recap-return svg { flex-shrink: 0; }

.booking-recap-return-label {
    font-weight: 600;
    letter-spacing: 0.04em;
    text-transform: uppercase;
    font-size: 10px;
}

.booking-recap-return-value {
    font-weight: 500;
    color: var(--bk-ink);
    white-space: nowrap;
}

/* Powrót w podsumowaniu kroku 4 — wyglądał jak każde inne pole obok numeru lotu */
.booking-page #booking-form .vip-booking .booking-invoice-cell--return {
    padding: 11px 14px;
    border-radius: var(--bk-radius-sm);
    background: linear-gradient(135deg, #FFFDF8 0%, #FAF4E9 100%);
    border: 1px solid rgba(205, 178, 123, .42);
}

.booking-page #booking-form .vip-booking .booking-invoice-cell--return .booking-invoice-cell-label {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    color: var(--bk-gold-text);
}

.booking-page #booking-form .vip-booking .booking-invoice-cell--return .booking-invoice-cell-value {
    color: var(--bk-ink);
    font-weight: 600;
}

/* Komunikat przy polu — booking.js zaznaczał błąd samą czerwoną ramką,
   bez informacji, co poprawić. */
.booking-field-error {
    display: block;
    margin-top: 6px;
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-size: 12px;
    line-height: 1.35;
    color: #B4453A;
}

.booking-field-error::before {
    content: "";
    display: inline-block;
    width: 12px;
    height: 12px;
    margin-right: 6px;
    vertical-align: -2px;
    background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23B4453A' stroke-width='2' stroke-linecap='round'%3E%3Ccircle cx='12' cy='12' r='10'/%3E%3Cpath d='M12 8v5'/%3E%3Cpath d='M12 16h.01'/%3E%3C/svg%3E") center / contain no-repeat;
}

.booking-page #booking-form .vip-booking .chbs-form-field input.is-invalid,
.booking-page #booking-form .vip-booking .chbs-form-field select.is-invalid,
.booking-page #booking-form .vip-booking .chbs-form-field textarea.is-invalid {
    border-color: #D98A82;
    background: #FFFBFA;
}

.booking-page #booking-form .vip-booking .chbs-form-field input.is-invalid:focus {
    border-color: #B4453A;
    box-shadow: 0 0 0 3px rgba(180, 69, 58, .13);
}

/* jQuery .show() wstawia inline `display: block`, co bije siatkę z arkusza —
   pola faktury szły wtedy na pełną szerokość (1094 px zamiast 533).
   Stąd !important: przebijamy styl inline, nie regułę. */
.booking-page #booking-form .vip-booking .booking-invoice-fields[style]:not([style*="none"]) {
    display: grid !important;
}

/* Pole NIP z pobieraniem danych z rejestru GUS */
.booking-nip-row {
    display: flex;
    gap: 8px;
    align-items: stretch;
}

.booking-nip-row input {
    flex: 1 1 auto;
    min-width: 0;
}

.booking-nip-btn {
    flex: 0 0 auto;
    min-height: 52px;
    padding: 0 18px;
    border: 1px solid var(--bk-gold);
    border-radius: var(--bk-radius-sm);
    background: #fff;
    color: var(--bk-gold-text);
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-size: 12px;
    font-weight: 600;
    letter-spacing: 0.05em;
    text-transform: uppercase;
    white-space: nowrap;
    cursor: pointer;
    transition: background .18s ease, border-color .18s ease, opacity .18s ease;
}

.booking-nip-btn:hover:not(:disabled) {
    background: rgba(205, 178, 123, .12);
}

.booking-nip-btn:disabled {
    opacity: .55;
    cursor: default;
}

.booking-nip-btn[hidden] {
    display: none;
}

.booking-nip-msg {
    display: block;
    margin-top: 6px;
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-size: 12px;
    line-height: 1.4;
}

.booking-nip-msg[hidden] { display: none; }
.booking-nip-msg.is-ok    { color: #4E7A52; }
.booking-nip-msg.is-error { color: #B4453A; }
.booking-nip-msg.is-info  { color: var(--bk-muted); }

@media (max-width: 575px) {
    .booking-nip-row { flex-direction: column; }
    .booking-nip-btn { width: 100%; min-height: 46px; }
}

/* Nagłówki sekcji kroku 3 */
/* Nagłówek sekcji kroku 3. Znacznik to h3 (po h2 z nagłówka strony) —
   line-height pinujemy tutaj, bo motyw daje h3 wartość 1, a h4 miało 1.2. */
.booking-page #booking-form .vip-booking .booking-form-section-title {
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-size: 12px;
    font-weight: 600;
    line-height: 1.2;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: var(--bk-ink-soft);
}

/* Podpowiedź o kodzie polecającym była zapisana złotem (#6b5a2e inline),
   większym stopniem niż etykiety pól wymaganych, i przyciągała wzrok bardziej
   niż one. Inline style zdjęty w szablonie, więc obywa się bez !important. */
.booking-page #booking-form .vip-booking .booking-field-hint {
    display: block;
    margin-top: 6px;
    color: var(--bk-muted);
    font-size: 12px;
    line-height: 1.45;
}

.booking-page #booking-form .vip-booking
    .chbs-form-field:has(#referral_code) {
    max-width: 520px;
}

@media (max-width: 991px) {
    .booking-recap {
        padding: 13px 15px;
        gap: 12px;
    }

    .booking-recap-price {
        align-items: flex-start;
    }

    .booking-recap-price-value { font-size: 20px; }
}

/* ==========================================================================
   KROK 4 — podsumowanie i płatność
   ========================================================================== */

/* Karty metod płatności miały 161 / 107 / 209 px — różnicę robiła długość
   opisu. Wspólna siatka i wyrównany opis porządkują kolumnę wyboru. */
/* Legacy trzyma tu display:flex, więc zamiast walczyć o grid pozwalamy
   logotypom zawinąć się do drugiego wiersza. W jednym rzędzie zabierały tyle
   miejsca, że opis "Karta, BLIK, szybki przelew (Przelewy24)…" schodził
   na sześć linii przy 146 px szerokości. */
.booking-page #booking-form .vip-booking .booking-payment-option {
    flex-wrap: wrap;
    align-items: flex-start;
    gap: 6px 12px;
    padding: 16px 18px;
    border-radius: var(--bk-radius-sm);
    border-color: var(--bk-line-soft);
    transition: border-color .18s ease, background .18s ease, box-shadow .18s ease;
}

.booking-page #booking-form .vip-booking .booking-payment-option-body {
    flex: 1 1 200px;
    min-width: 0;
}

.booking-page #booking-form .vip-booking .booking-payment-option-logos {
    flex: 0 0 100%;
    padding-left: 46px;
}

.booking-page #booking-form .vip-booking .booking-payment-option.is-selected {
    border-color: var(--bk-gold);
    background: #FDFAF3;
    box-shadow: 0 0 0 1px rgba(205, 178, 123, .2);
}

.booking-page #booking-form .vip-booking .booking-payment-option-body strong {
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-size: 14px;
    font-weight: 600;
    color: var(--bk-ink);
}

.booking-page #booking-form .vip-booking .booking-payment-option-body span {
    font-size: 12.5px;
    line-height: 1.45;
    color: var(--bk-muted);
}

.booking-page #booking-form .vip-booking .booking-payment-option-logos > * {
    flex-shrink: 0;
}

.booking-page #booking-form .vip-booking .booking-payment-option-radio,
.booking-page #booking-form .vip-booking .booking-payment-option-icon {
    align-self: center;
}

/* Nagłówek podsumowania */
.booking-page #booking-form .vip-booking .booking-invoice-title {
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    letter-spacing: 0.14em;
    font-size: 11px;
}

.booking-page #booking-form .vip-booking .booking-invoice-route-content {
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-size: 15px;
    line-height: 1.5;
    color: var(--bk-ink);
}

.booking-page #booking-form .vip-booking .booking-invoice-total > span:last-child,
.booking-page #booking-form .vip-booking .booking-rail-total-value {
    font-family: 'Playfair Display', 'Playfair Fallback', serif;
    font-size: 27px;
    font-weight: 500;
    letter-spacing: -0.01em;
    color: var(--bk-ink);
}

.booking-page #booking-form .vip-booking .booking-checkout-header span {
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-size: 14px;
    font-weight: 600;
    letter-spacing: 0.02em;
    color: var(--bk-ink);
}

/* Zgoda na regulamin — pole obowiązkowe, więc nie powinno ginąć w tle */
.booking-page #booking-form .vip-booking .booking-consent-label {
    font-size: 12.5px;
    line-height: 1.5;
    color: var(--bk-ink-soft);
}

.booking-page #booking-form .vip-booking .booking-consent-label a {
    color: var(--bk-gold-deep);
    text-decoration: underline;
    text-underline-offset: 2px;
}

@media (max-width: 991px) {
    .booking-page #booking-form .vip-booking .booking-payment-option-icon {
        display: none;
    }

    .booking-page #booking-form .vip-booking .booking-payment-option-logos {
        padding-left: 34px;
    }
}

/* --------------------------------------------------------------------------
   13. Nadpisania legacy o wyższej specyficzności
   Reguły z chauffeur-booking-system celują selektorem
   `.booking-page #booking-form .vip-booking--steps ...` (1 ID + 3 klasy),
   więc zwykłe `.vip-booking X` przegrywa kaskadę. Poniżej tylko te
   właściwości, które faktycznie kolidują — reszta pliku zostaje płaska.
   -------------------------------------------------------------------------- */
.booking-page #booking-form .vip-booking--steps .vip-booking-separator {
    font-size: clamp(26px, 2.4vw, 34px);
    /* Playfair mixed-case zgodnie z konwencją redesignu strony głównej:
       wielkie litery są tam zarezerwowane dla etykiet w Montserrat. */
    text-transform: none;
    line-height: 1.28;
    letter-spacing: -0.01em;
}

/* Legacy ustawia align-items:start, przez co prawa kolumna kończyła się
   ~200 px wyżej niż lewa. Stretch pozwala mapie wypełnić wysokość. */
.booking-page #booking-form .vip-booking--steps .booking-step-layout {
    align-items: stretch;
}

@media (max-width: 991px) {
    .booking-page #booking-form .vip-booking--steps .vip-booking-separator {
        font-size: 24px;
    }
}

/* --------------------------------------------------------------------------
   14. Dostępność
   -------------------------------------------------------------------------- */
.booking-page #booking-form .vip-booking :focus-visible {
    outline: 2px solid var(--bk-gold-deep);
    outline-offset: 2px;
}

@media (prefers-reduced-motion: reduce) {
    .booking-page #booking-form .vip-booking *,
    .booking-page #booking-form .vip-booking *::before,
    .booking-page #booking-form .vip-booking *::after {
        transition-duration: .01ms !important;
        animation-duration: .01ms !important;
    }
}

/* --------------------------------------------------------------------------
   15. Nagłówek strony (bk-hero)
   Było: generyczny .innr-banner 600 px + osobny blok .book-hdr (h2 + akapit
   + plakietki) — razem 1043 px do pierwszego pola formularza przy oknie
   900 px. Formularz, czyli sedno tej strony, zaczynał się poza ekranem,
   a nagłówek powtarzał treść H1 („Rezerwacja Transferu VIP Online" /
   „ZAREZERWUJ SWÓJ PRZEJAZD").

   Teraz: jeden zwarty nagłówek, plakietki zaufania w nim, a karta
   formularza wchodzi na zdjęcie. Typografia jak na stronie głównej —
   Playfair Display, złoto, kość słoniowa.
   -------------------------------------------------------------------------- */
.booking-page .bk-hero {
    position: relative;
    z-index: 1;
    display: flex;
    align-items: flex-end;
    padding: 148px 0 104px;
    background: #0A0C10;
    overflow: hidden;
}

.booking-page .bk-hero__media {
    position: absolute;
    inset: 0;
    z-index: -1;
}

.booking-page .bk-hero__media img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    object-position: 64% 52%;
    display: block;
}

/* Dwie warstwy: pozioma trzyma kontrast pod tekstem (lewa strona),
   pionowa przyciemnia pas pod header i dół, z którego wynurza się karta. */
.booking-page .bk-hero__media::after {
    content: '';
    position: absolute;
    inset: 0;
    background:
        linear-gradient(90deg, rgba(8, 10, 13, .94) 0%, rgba(8, 10, 13, .86) 40%, rgba(8, 10, 13, .38) 74%, rgba(8, 10, 13, .20) 100%),
        linear-gradient(180deg, rgba(8, 10, 13, .58) 0%, rgba(8, 10, 13, 0) 32%, rgba(8, 10, 13, .46) 100%);
}

.booking-page .bk-hero__inner {
    max-width: 760px;
}

.booking-page .bk-hero__crumb {
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-size: 12px;
    font-weight: 500;
    letter-spacing: 0.16em;
    text-transform: uppercase;
    color: rgba(244, 241, 233, .62);
    margin: 0 0 18px;
}

.booking-page .bk-hero__crumb a {
    color: rgba(244, 241, 233, .62);
    text-decoration: none;
    transition: color .2s ease;
}

.booking-page .bk-hero__crumb a:hover {
    color: var(--bk-gold);
}

.booking-page .bk-hero__crumb-sep {
    margin: 0 8px;
    color: rgba(244, 241, 233, .32);
}

.booking-page .bk-hero__title {
    font-family: 'Playfair Display', 'Playfair Fallback', serif;
    font-size: clamp(30px, 3.6vw, 50px);
    font-weight: 500;
    line-height: 1.14;
    letter-spacing: -0.015em;
    color: #F4F1E9;
    margin: 0 0 12px;
}

.booking-page .bk-hero__lede {
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-size: clamp(15px, 1.2vw, 17px);
    font-weight: 300;
    line-height: 1.5;
    letter-spacing: 0.01em;
    color: rgba(244, 241, 233, .74);
    margin: 0 0 26px;
}

.booking-page .bk-hero__rule {
    display: block;
    width: 56px;
    height: 1px;
    background: linear-gradient(90deg, var(--bk-gold), rgba(205, 178, 123, 0));
    margin: 0 0 26px;
}

.booking-page .bk-hero__trust {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    flex-wrap: wrap;
    gap: 12px 30px;
    color: rgba(244, 241, 233, .88); /* także na ul — motyw daje listom #111 */
}

.booking-page .bk-hero__trust li {
    display: flex;
    align-items: center;
    gap: 9px;
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-size: 13px;
    font-weight: 400;
    letter-spacing: 0.02em;
    color: rgba(244, 241, 233, .88);
}

.booking-page .bk-hero__trust svg {
    flex: none;
    color: var(--bk-gold);
}

.booking-page .bk-hero__trust a {
    color: inherit;
    text-decoration: none;
    border-bottom: 1px solid rgba(205, 178, 123, .42);
    padding-bottom: 1px;
    transition: color .2s ease, border-color .2s ease;
}

.booking-page .bk-hero__trust a:hover {
    color: var(--bk-gold);
    border-bottom-color: var(--bk-gold);
}

/* --------------------------------------------------------------------------
   16. Karta formularza wchodzi na zdjęcie
   Kasuje pas pustego bieli między nagłówkiem a formularzem i daje
   warstwowość, po której strona czyta się drożej niż płaski stos sekcji.
   -------------------------------------------------------------------------- */
.booking-page .bk-hero + .book-sec {
    position: relative;
    z-index: 2;
    padding-top: 0;
    margin-top: -76px;
    background: transparent;
}

/* Sekcja i karta mają własne odstępy z legacy (24 px paddingu z mobile-ux
   + 36 px marginesu karty). Przy nachodzeniu na zdjęcie muszą zejść do zera,
   inaczej karta ląduje pod nagłówkiem zamiast na nim. */
.booking-page .bk-hero + .book-sec.common-gap {
    padding-top: 0 !important;
}

.booking-page .bk-hero + .book-sec > .container > .vip-booking {
    margin-top: 0 !important;
}

.booking-page #booking-form .vip-booking {
    position: relative;
    z-index: 2;
    box-shadow: 0 30px 72px -30px rgba(9, 12, 16, .42), 0 2px 6px rgba(9, 12, 16, .05);
}

.booking-page #booking-form .vip-booking::before {
    content: '';
    position: absolute;
    inset: 0 0 auto;
    height: 2px;
    border-radius: var(--bk-radius) var(--bk-radius) 0 0;
    background: linear-gradient(90deg, rgba(205, 178, 123, 0), var(--bk-gold) 42%, #E5D2A8 58%, rgba(205, 178, 123, 0));
    pointer-events: none;
}

@media (max-width: 991px) {
    .booking-page .bk-hero {
        padding: 132px 0 84px;
    }
    .booking-page .bk-hero + .book-sec {
        margin-top: -60px;
    }
}

@media (max-width: 767px) {
    .booking-page .bk-hero {
        padding: 116px 0 62px;
    }
    .booking-page .bk-hero__media img {
        object-position: 62% 50%;
    }
    /* Tekst idzie na całą szerokość, więc poziomy gradient przestaje
       wystarczać — przyciemniamy równomiernie. */
    .booking-page .bk-hero__media::after {
        background: linear-gradient(180deg, rgba(8, 10, 13, .88) 0%, rgba(8, 10, 13, .70) 46%, rgba(8, 10, 13, .82) 100%);
    }
    .booking-page .bk-hero__crumb {
        font-size: 11px;
        margin-bottom: 12px;
    }
    .booking-page .bk-hero__title {
        font-size: 27px;
        line-height: 1.18;
        margin-bottom: 8px;
    }
    .booking-page .bk-hero__lede {
        font-size: 14px;
        margin-bottom: 18px;
    }
    .booking-page .bk-hero__rule {
        margin-bottom: 18px;
    }
    .booking-page .bk-hero__trust {
        gap: 9px 20px;
    }
    .booking-page .bk-hero__trust li {
        font-size: 12px;
        gap: 7px;
    }
    .booking-page .bk-hero__trust svg {
        width: 13px;
        height: 13px;
    }
    .booking-page .bk-hero + .book-sec {
        margin-top: -44px;
    }
}

/* --------------------------------------------------------------------------
   17. Okno wyjścia — zniżka na tę rezerwację
   Było: jasna karta z kuponem (ramka kreskowana, kod 24 px/800) i wodnym
   znakiem „10%" o 96 px, który wychodził poza kartę i był ucinany tuż pod
   krzyżykiem. Do tego biały tekst na złotym CTA — 2,05:1, poniżej AA.

   Teraz ciemna karta w języku reszty serwisu, bez estetyki kuponu: kod
   podaje nota pod przyciskiem, bo i tak zakłada go sam przycisk.
   Cały komponent trzymany pod .vip-exit-overlay — okno wyjścia z
   partials/exit-intent.blade.php używa tych samych nazw klas, ale innego
   przodka (.vip-exit-intent), więc oba są rozłączne.
   -------------------------------------------------------------------------- */
.vip-exit-overlay {
    position: fixed;
    inset: 0;
    z-index: 99999;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: clamp(16px, 3vw, 32px);
    background:
        radial-gradient(120% 80% at 50% 0%, rgba(205, 178, 123, .10), transparent 58%),
        rgba(6, 8, 11, .78);
    backdrop-filter: blur(12px);
    -webkit-backdrop-filter: blur(12px);
    animation: bkOfferFade .28s ease both;
}

.vip-exit-overlay .vip-exit-card {
    position: relative;
    width: min(92vw, 440px);
    padding: 44px 40px 30px;
    text-align: center;
    background: #0E1014;
    border: 1px solid rgba(205, 178, 123, .22);
    border-radius: 18px;
    box-shadow: 0 40px 90px -30px rgba(0, 0, 0, .72);
    animation: bkOfferRise .42s cubic-bezier(.22, 1, .36, 1) both;
}

/* Włos złota zamiast 6-px paska — ten sam gest co na karcie formularza. */
.vip-exit-overlay .vip-exit-card::before {
    content: '';
    position: absolute;
    top: 0;
    left: 50%;
    transform: translateX(-50%);
    width: 140px;
    height: 1px;
    background: linear-gradient(90deg, transparent, var(--bk-gold), transparent);
}

.vip-exit-overlay .vip-exit-close {
    position: absolute;
    top: 14px;
    right: 14px;
    width: 36px;
    height: 36px;
    display: flex;
    align-items: center;
    justify-content: center;
    background: transparent;
    border: none;
    border-radius: 999px;
    color: rgba(244, 241, 233, .55);
    cursor: pointer;
    transition: color .2s ease, background .2s ease;
}

.vip-exit-overlay .vip-exit-close:hover {
    color: var(--bk-gold);
    background: rgba(205, 178, 123, .10);
}

.vip-exit-overlay .vip-exit-kicker {
    display: block;
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-size: 10px;
    font-weight: 600;
    letter-spacing: 0.24em;
    text-transform: uppercase;
    color: var(--bk-gold);
    margin: 0 0 14px;
}

/* Bez wyważenia łamania tytuł zostawia sierotę w drugim wierszu
   („Dziesięć procent na ten / transfer"); max-width to zapas dla
   przeglądarek bez text-wrap: balance. */
.vip-exit-overlay .vip-exit-title {
    font-family: 'Playfair Display', 'Playfair Fallback', serif;
    font-size: clamp(25px, 2.6vw, 31px);
    font-weight: 500;
    line-height: 1.18;
    letter-spacing: -0.012em;
    color: #F4F1E9;
    max-width: 310px;
    margin: 0 auto 14px;
    text-wrap: balance;
}

.vip-exit-overlay .vip-exit-text {
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-size: 15px;
    font-weight: 300;
    line-height: 1.62;
    color: rgba(244, 241, 233, .70);
    max-width: 330px;
    margin: 0 auto 26px;
}

.vip-exit-overlay .vip-exit-cta {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 100%;
    min-height: 56px;
    padding: 15px 22px;
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-size: 15px;
    font-weight: 600;
    letter-spacing: 0.015em;
    color: var(--bk-on-gold);
    background: linear-gradient(180deg, #D8BE87 0%, #C2A469 100%);
    border: none;
    border-radius: 12px;
    cursor: pointer;
    margin: 0 0 14px;
    box-shadow: 0 12px 26px -16px rgba(205, 178, 123, .40);
    transition: transform .2s ease, box-shadow .2s ease, filter .2s ease;
}

.vip-exit-overlay .vip-exit-cta:hover {
    transform: translateY(-1px);
    filter: brightness(1.05);
    box-shadow: 0 16px 32px -16px rgba(205, 178, 123, .52);
}

.vip-exit-overlay .vip-exit-note {
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-size: 11.5px;
    font-weight: 400;
    letter-spacing: 0.07em;
    color: rgba(244, 241, 233, .58);
    margin: 0 0 6px;
}

.vip-exit-overlay .vip-exit-dismiss {
    display: block;
    width: 100%;
    min-height: 44px;
    background: none;
    border: none;
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-size: 13px;
    color: rgba(244, 241, 233, .62);
    cursor: pointer;
    text-decoration: underline;
    text-underline-offset: 3px;
    text-decoration-color: rgba(244, 241, 233, .24);
    transition: color .2s ease, text-decoration-color .2s ease;
}

.vip-exit-overlay .vip-exit-dismiss:hover {
    color: #F4F1E9;
    text-decoration-color: rgba(244, 241, 233, .5);
}

.vip-exit-overlay :focus-visible {
    outline: 2px solid var(--bk-gold);
    outline-offset: 3px;
}

@keyframes bkOfferFade {
    from { opacity: 0; }
    to   { opacity: 1; }
}

@keyframes bkOfferRise {
    from { opacity: 0; transform: translateY(18px) scale(.985); }
    to   { opacity: 1; transform: none; }
}

@media (max-width: 767px) {
    .vip-exit-overlay .vip-exit-card {
        padding: 38px 26px 24px;
        border-radius: 16px;
    }
    .vip-exit-overlay .vip-exit-text {
        font-size: 14.5px;
        margin-bottom: 22px;
    }
}

@media (prefers-reduced-motion: reduce) {
    .vip-exit-overlay,
    .vip-exit-overlay .vip-exit-card {
        animation: none;
    }
}

/* Karta potwierdzenia / anulowania płatności wchodzi na zdjęcie tak samo
   jak karta formularza — te strony domykają ten sam lejek. */
.booking-page .bk-hero + .book-sec .booking-status-card {
    position: relative;
    z-index: 2;
    box-shadow: 0 30px 72px -30px rgba(9, 12, 16, .42), 0 2px 6px rgba(9, 12, 16, .05);
}

/* Biały tekst na złocie #CDB27B to 2,05:1 — ten sam błąd, który usunęliśmy
   z CTA formularza i okna wyjścia. Tu domykamy ostatni przycisk w lejku. */
.booking-page .booking-status-btn,
.booking-page .booking-status-btn:hover {
    color: var(--bk-on-gold);
}
