/* ==========================================================================
   DbSoft CRM — jeden język wizualny dla panelu i oferty.
   Jasne tło, białe karty z zaokrągleniami i miękkim cieniem, zielony akcent,
   dużo powietrza. Panel działa pod `.app-skin`, oferta pod `.offer-skin`.
   ========================================================================== */

:root {
    /* Kolory z logo Digital Bridge Software. */
    --ink: #171F4B;
    --green: #10CE8F;         /* jaskrawa zieleń ze znaku — akcenty, ikony, kropki */
    --green-dark: #0A8055;    /* zieleń przycisków: czytelna z białym napisem */
    --green-deep: #07603F;    /* hover, aktywna pozycja menu */
    --green-soft: #E7F4EC;    /* pastelowe podkłady pod ikonami */

    /* Płaszczyzny biorą wartości z palety MudBlazor, żeby przełącznik trybu ciemnego
       działał sam z siebie. Wartości po przecinku to awaryjne odpowiedniki jasne. */
    --page: var(--mud-palette-background, #F1F4EF);
    --surface: var(--mud-palette-surface, #FFFFFF);
    --sep: var(--mud-palette-lines-default, #E5E9E0);
    --text: var(--mud-palette-text-primary, #16211B);
    --muted: var(--mud-palette-text-secondary, #6B7280);

    /* Odcienie zależne od trybu — nadpisywane w .app-dark. */
    --nav-text: #404B44;
    --nav-hover: rgba(255, 255, 255, .6);
    --nav-label: #909C95;
    --inset: #F7F9F5;
    --inset-line: #EAEEE4;
    --card-hover-line: #C8D6C7;
    --shadow: 0 1px 2px rgba(16, 24, 40, .03), 0 2px 8px rgba(16, 24, 40, .04);
    --shadow-lg: 0 4px 8px rgba(16, 24, 40, .06), 0 12px 32px rgba(16, 24, 40, .08);
    --r-card: 18px;
    --r-pill: 999px;
}

/* ========================= PANEL ========================= */

/* Tryb ciemny. MudBlazor 9 nie wiesza klasy na dokumencie, tylko podmienia zmienne
   palety — klasę dokłada MainLayout, żeby dało się zejść niżej niż same płaszczyzny. */
.app-skin.app-dark {
    --green-soft: #12352A;
    --nav-text: #B4C2BA;
    --nav-hover: rgba(255, 255, 255, .06);
    --nav-label: #6E7E75;
    --inset: #121A16;
    --inset-line: #222D26;
    --card-hover-line: #33443A;
}

.app-skin .mud-main-content { background: var(--page); }

.app-skin .mud-paper {
    box-shadow: var(--shadow) !important;
    border: 1px solid var(--sep);
    border-radius: var(--r-card);
}

.app-skin .mud-paper.mud-elevation-0 { box-shadow: none !important; }

/* Pasek górny zlewa się z tłem. Kreska pod nim dzieliła ekran na pudełka —
   to była główna przyczyna wrażenia „arkusza kalkulacyjnego”. */
.app-skin .mud-appbar {
    box-shadow: none !important;
    border-bottom: none;
    background: var(--page) !important;
}

.app-skin .mud-drawer {
    box-shadow: none !important;
    border-right: none;
    background: var(--page) !important;
}

/* Znak firmowy w pasku: zielony kwadrat z inicjałami + wordmark. */
.app-skin .brand {
    display: flex;
    align-items: center;
    gap: 10px;
    text-decoration: none;
}

.app-skin .brand-mark {
    width: 34px;
    height: 34px;
    border-radius: 11px;
    background: var(--green-dark);
    color: #fff;
    display: grid;
    place-items: center;
    font-weight: 800;
    font-size: .8125rem;
    letter-spacing: -.02em;
    flex: none;
}

/* Logo z Ustawień w miejscu kwadratu z inicjałami. Wysokość stała, szerokość swobodna —
   znaki firmowe bywają szerokie i przycięcie ich do kwadratu psuje proporcje. */
.app-skin .brand-logo {
    height: 30px;
    width: auto;
    max-width: 160px;
    object-fit: contain;
    flex: none;
}

.app-skin .brand-name {
    font-size: 1.0625rem;
    font-weight: 700;
    letter-spacing: -.02em;
    color: var(--text);
    white-space: nowrap;
}

.app-skin .brand-name span { font-weight: 500; color: var(--muted); }

/* Nawigacja: aktywny element to biała pigułka, jak zakładka wyjęta z tła. */
.app-skin .mud-nav-link {
    border-radius: var(--r-pill);
    margin: 2px 12px;
    padding: 10px 16px;
    font-size: .875rem;
    font-weight: 500;
    color: var(--nav-text);
    transition: background-color .15s ease, color .15s ease;
}

.app-skin .mud-nav-link .mud-nav-link-icon { color: var(--nav-text); opacity: .75; }

.app-skin .mud-nav-link:hover { background-color: var(--nav-hover); }

/* MudBlazor ustawia tło aktywnego elementu selektorem
   `.mud-navmenu.mud-navmenu-default .mud-nav-link.active:not(.mud-nav-link-disabled)`.
   Żeby go pobić, powtarzamy tę samą strukturę i dokładamy `.app-skin`. */
.app-skin .mud-navmenu.mud-navmenu-default .mud-nav-link.active:not(.mud-nav-link-disabled) {
    background-color: var(--surface);
    color: var(--green-deep);
    font-weight: 600;
    box-shadow: var(--shadow);
}

.app-skin .mud-nav-link.active .mud-icon-root,
.app-skin .mud-nav-link.active .mud-nav-link-icon { color: var(--green-dark); }

/* Nagłówek sekcji nawigacji, np. ZARZĄDZANIE. */
.app-skin .nav-group-label {
    font-size: .6875rem;
    font-weight: 700;
    letter-spacing: .1em;
    text-transform: uppercase;
    color: var(--nav-label);
    padding: 20px 28px 8px;
}

/* Pola formularzy — wracamy do wyraźnych, zaokrąglonych kontenerów. */
.app-skin .mud-input.mud-input-text .mud-input-slot,
.mud-dialog .mud-input.mud-input-text .mud-input-slot {
    background-color: transparent;
}

.app-skin .mud-input-label,
.mud-dialog .mud-input-label { font-size: .875rem; }

/* Przyciski: pełne pigułki, bez cienia. */
.app-skin .mud-button-root,
.mud-dialog .mud-button-root {
    box-shadow: none !important;
    border-radius: var(--r-pill);
    min-height: 42px;
    padding: 0 22px;
    text-transform: none;
    letter-spacing: 0;
    font-weight: 600;
}

.app-skin .mud-button-filled.mud-button-filled-primary {
    background-color: var(--green-dark);
    color: #fff;
}

.app-skin .mud-button-filled.mud-button-filled-primary:hover {
    background-color: var(--green-deep);
}

/* Przycisk drugoplanowy: biała pigułka z zieloną obwódką („Szczegóły →”). */
.app-skin .mud-button-outlined.mud-button-outlined-primary {
    background-color: var(--surface);
    border-color: #BCDCCB;
    color: var(--green-deep);
}

.app-skin .mud-button-outlined.mud-button-outlined-primary:hover {
    background-color: var(--green-soft);
    border-color: var(--green-dark);
}

.app-skin .mud-icon-button { border-radius: var(--r-pill); }

/* ---- Nagłówek strony: duży tytuł + podtytuł, jak w makiecie ---- */
.app-skin .page-head {
    display: flex;
    align-items: flex-start;
    gap: 16px;
    flex-wrap: wrap;
    margin-bottom: 28px;
}

.app-skin .page-head h1 {
    font-size: 2.125rem;
    font-weight: 800;
    letter-spacing: -.03em;
    line-height: 1.15;
    color: var(--text);
    margin: 0;
}

.app-skin .page-head .page-sub {
    font-size: .9375rem;
    color: var(--muted);
    margin-top: 4px;
}

.app-skin .page-head-actions {
    margin-left: auto;
    display: flex;
    align-items: center;
    gap: 10px;
}

/* ---- Kafelek liczbowy: pastelowa ikona, duża liczba, drobny opis ---- */
.app-skin .stat-strip {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
    gap: 14px;
}

.app-skin .stat-tile {
    display: flex;
    align-items: center;
    gap: 14px;
    background: var(--surface);
    border: 1px solid var(--sep);
    border-radius: 14px;
    padding: 16px 18px;
}

.app-skin .stat-ico {
    width: 42px;
    height: 42px;
    border-radius: 12px;
    display: grid;
    place-items: center;
    flex: none;
    background: var(--green-soft);
    color: var(--green-dark);
}

.app-skin .stat-ico--warn { background: #FEF3C7; color: #B45309; }
.app-skin .stat-ico--alert { background: #FEE2E2; color: #B91C1C; }
.app-skin .stat-ico--info { background: #DBEAFE; color: #1D4ED8; }

.app-skin .stat-value {
    font-size: 1.625rem;
    font-weight: 800;
    letter-spacing: -.03em;
    line-height: 1.1;
    color: var(--text);
}

.app-skin .stat-label { font-size: .8125rem; color: #4B5563; line-height: 1.3; }
.app-skin .stat-note { font-size: .75rem; color: #9CA3AF; }

/* Zakładki. */
.app-skin .mud-tabs-toolbar { border-bottom: 1px solid var(--sep); }

.app-skin .mud-tab {
    text-transform: none;
    letter-spacing: 0;
    font-size: .875rem;
    font-weight: 600;
}

.app-skin .mud-tab-slider { background-color: var(--green); height: 2px; }

/* Tabele — przewiewne, nagłówek w kapitalikach. */
.app-skin .mud-table-head .mud-table-cell,
.app-skin .mud-table-container thead th {
    font-size: .75rem;
    font-weight: 600;
    letter-spacing: .04em;
    text-transform: uppercase;
    color: var(--muted);
    background: transparent;
    border-bottom: 1px solid var(--sep);
    padding: 10px 12px;
    white-space: nowrap;
}

.app-skin .mud-table-cell,
.app-skin .mud-table-container td {
    padding: 12px;
    border-bottom: 1px solid var(--sep);
    font-size: .875rem;
}

.app-skin .mud-table-row:hover { background-color: var(--inset) !important; }

/* ---- Wiersz jako karta ----
   Zestawienia klientów i ofert czyta się kartami, nie gęstą siatką. To ta zmiana
   najmocniej odsuwa panel od wyglądu arkusza. */
.app-skin .rec-list { display: flex; flex-direction: column; gap: 14px; }

.app-skin .rec-card {
    display: flex;
    align-items: center;
    gap: 18px;
    background: var(--surface);
    border: 1px solid var(--sep);
    border-radius: var(--r-card);
    padding: 20px 22px;
    box-shadow: var(--shadow);
    transition: border-color .15s ease, box-shadow .15s ease;
}

.app-skin .rec-card:hover {
    border-color: var(--card-hover-line);
    box-shadow: 0 2px 6px rgba(16, 24, 40, .05), 0 8px 20px rgba(16, 24, 40, .06);
}

.app-skin .rec-avatar {
    width: 52px;
    height: 52px;
    border-radius: 15px;
    display: grid;
    place-items: center;
    flex: none;
    background: var(--green-soft);
    color: var(--green-dark);
    font-weight: 700;
    font-size: .9375rem;
}

.app-skin .rec-body { flex: 1 1 auto; min-width: 0; }

.app-skin .rec-title {
    font-size: 1.0625rem;
    font-weight: 700;
    letter-spacing: -.01em;
    color: var(--text);
}

.app-skin .rec-meta {
    font-size: .8125rem;
    color: var(--muted);
    margin-top: 2px;
}

/* Pasek wskaźników wewnątrz karty — jasne wgłębienie, nie kolejna biała płaszczyzna. */
.app-skin .rec-inset {
    margin-top: 12px;
    background: var(--inset);
    border: 1px solid var(--inset-line);
    border-radius: 12px;
    padding: 10px 14px;
    display: flex;
    align-items: center;
    gap: 18px;
    flex-wrap: wrap;
    font-size: .8125rem;
}

.app-skin .rec-dot {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    color: #4B5563;
}

.app-skin .rec-dot::before {
    content: "";
    width: 7px;
    height: 7px;
    border-radius: 50%;
    background: currentColor;
    flex: none;
}

.app-skin .rec-dot b { color: var(--text); font-weight: 700; }
.app-skin .rec-dot--ok { color: var(--green-dark); }
.app-skin .rec-dot--warn { color: #B45309; }
.app-skin .rec-dot--late { color: #B91C1C; }
.app-skin .rec-dot--info { color: #1D4ED8; }

@media (max-width: 700px) {
    .app-skin .rec-card { align-items: flex-start; flex-wrap: wrap; }
    .app-skin .page-head h1 { font-size: 1.75rem; }
}

/* Kwoty. Trzy klasy w selektorze, żeby pobić `.mud-table-root .mud-table-body .mud-table-cell`. */
.app-skin td.mud-table-cell.bc-amount,
.app-skin .mud-table-cell.bc-amount,
.app-skin td.bc-amount {
    color: var(--text);
    font-weight: 600;
    text-align: right;
    font-variant-numeric: tabular-nums;
}

.app-skin .mud-chip { border-radius: 8px; font-size: .75rem; font-weight: 600; }

.app-skin .mud-alert { border-radius: 12px; }

/* Dialogi — poza layoutem, więc reguły globalne. */
.mud-dialog { border-radius: 16px !important; box-shadow: var(--shadow-lg) !important; }
.mud-dialog-title { border-bottom: 1px solid var(--sep); padding: 18px 24px; }
.mud-dialog-actions { border-top: 1px solid var(--sep); padding: 14px 24px; }
.mud-popover { border-radius: 12px !important; }

/* ========================= OFERTA — dokument dla klienta =========================
   Układ jednokolumnowy, dużo powietrza, ciężka typografia nagłówków, etykiety
   w rozstrzelonych kapitalikach. Blok inwestycji na ciemnym granacie kontrastuje
   z resztą dokumentu, żeby cena była punktem, do którego wraca oko.
   ================================================================================ */

.doc {
    --doc-ink: #101413;
    --doc-muted: #8A8F8C;
    --doc-line: #E6E8E6;
    --doc-navy: #16233F;
    --doc-green: #0CA678;
    --doc-green-dark: #06845F;
    --doc-mint: #F0FAF5;
    --doc-mint-deep: #E2F4EC;

    background: #F7F8F7;
    min-height: 100vh;
    padding-bottom: 120px;
    color: var(--doc-ink);
    font-size: 1rem;
    line-height: 1.6;
}

.doc-wrap { max-width: 880px; margin: 0 auto; padding: 0 24px; }

/* Etykieta sekcji — zielone rozstrzelone kapitaliki nad nagłówkiem. */
.doc-lbl {
    font-size: .6875rem;
    font-weight: 700;
    letter-spacing: .18em;
    text-transform: uppercase;
    color: var(--doc-green-dark);
    display: block;
    margin-bottom: 12px;
}

/* Cienka kreska pod etykietą, tak jak w referencji. */
.doc-lbl--rule { border-bottom: 1px solid var(--doc-line); padding-bottom: 14px; }

/* --- pasek górny --- */
.doc-top {
    display: flex;
    align-items: center;
    justify-content: space-between;
    font-size: .75rem;
    color: var(--doc-muted);
    padding: 26px 0;
}

/* Logo — na tyle duże, żeby marka była widoczna od razu, bez dominowania nad tytułem. */
.doc-logo {
    height: 56px;
    width: auto;
    max-width: 260px;
    object-fit: contain;
    display: block;
}

@media (max-width: 640px) {
    .doc-logo { height: 42px; max-width: 190px; }
}

/* --- hero z miętowym gradientem --- */
.doc-hero {
    background: linear-gradient(160deg, #D6F3E4 0%, #EDF9F2 40%, #FBFCFB 100%);
    padding: 56px 0 44px;
    margin-bottom: 56px;
}

/* Obietnica to całe zdanie, nie hasło — potrzebuje szerszej miary niż typowy nagłówek.
   Przy 16ch łamała się na sześć wierszy i wyglądała jak plakat, nie jak dokument. */
.doc-hero h1 {
    font-size: clamp(1.6rem, 3.2vw, 2.35rem);
    font-weight: 800;
    letter-spacing: -.02em;
    line-height: 1.18;
    margin: 20px 0 0;
    max-width: 30ch;
}

.doc-meta {
    display: flex;
    flex-wrap: wrap;
    gap: 48px;
    margin-top: 52px;
    align-items: flex-start;
}

.doc-meta dt {
    font-size: .625rem;
    font-weight: 600;
    letter-spacing: .16em;
    text-transform: uppercase;
    color: var(--doc-muted);
    margin-bottom: 6px;
}

.doc-meta dd { margin: 0; font-size: .875rem; font-weight: 600; }
.doc-meta dd small { display: block; font-weight: 400; color: var(--doc-muted); }

/* --- okno decyzji ---
   Panele otwierane z przyklejonego paska muszą pojawiać się tam, gdzie klient patrzy.
   Wcześniej były w treści strony, kilka tysięcy pikseli niżej — klikał i nic nie widział. */
.doc-modal {
    position: fixed;
    inset: 0;
    z-index: 1400;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 20px;
    background: rgba(15, 23, 41, .45);
    backdrop-filter: blur(3px);
    overflow-y: auto;
}

.doc-modal-card {
    background: #fff;
    border-radius: 20px;
    padding: 32px;
    width: 100%;
    max-width: 520px;
    max-height: calc(100vh - 40px);
    overflow-y: auto;
    box-shadow: 0 20px 60px rgba(15, 23, 41, .28);
}

.doc-modal-head {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 16px;
    margin-bottom: 18px;
}

.doc-modal-head h3 { margin: 0; font-size: 1.25rem; font-weight: 800; letter-spacing: -.01em; }

.doc-modal-close {
    border: none;
    background: transparent;
    font-size: 1.5rem;
    line-height: 1;
    color: #9CA3AF;
    cursor: pointer;
    padding: 0 4px;
}

.doc-modal-close:hover { color: var(--doc-ink); }

@media (max-width: 520px) {
    .doc-modal { padding: 12px; align-items: flex-end; }
    .doc-modal-card { padding: 24px; border-radius: 18px; }
}

/* --- numer telefonu w panelu „chcę porozmawiać" ---
   Najszybsza droga do rozmowy to telefon, nie formularz — więc numer dostaje
   największy kontrast na stronie i jest klikalny. */
.doc-phone {
    display: inline-flex;
    align-items: center;
    gap: 14px;
    text-decoration: none;
    background: var(--doc-mint);
    border: 1px solid #BFE3D2;
    border-left: 3px solid var(--doc-green);
    border-radius: 4px 14px 14px 4px;
    padding: 16px 24px 16px 20px;
    color: var(--doc-ink);
    transition: transform .12s ease, box-shadow .12s ease;
}

.doc-phone:hover {
    transform: translateY(-1px);
    box-shadow: 0 4px 14px rgba(12, 166, 120, .18);
}

.doc-phone svg { color: var(--doc-green-dark); flex: 0 0 auto; }
.doc-phone b { display: block; font-size: 1.375rem; letter-spacing: -.01em; line-height: 1.2; }
.doc-phone small { display: block; color: var(--doc-green-dark); font-size: .8125rem; margin-top: 2px; }

@media (max-width: 480px) {
    .doc-phone { width: 100%; }
    .doc-phone b { font-size: 1.25rem; }
}

/* --- termin ważności --- */
.doc-deadline {
    display: inline-flex;
    align-items: center;
    gap: 9px;
    margin-top: 26px;
    padding: 9px 16px;
    border-radius: 999px;
    background: rgba(255, 255, 255, .72);
    border: 1px solid var(--doc-line);
    font-size: .875rem;
    color: #4B5563;
}

.doc-deadline svg { flex: 0 0 auto; color: var(--doc-green-dark); }
.doc-deadline b { color: var(--doc-ink); }

/* Ostatni tydzień — ciepły akcent zamiast czerwonego alarmu. */
.doc-deadline--soon {
    background: #FFF8EC;
    border-color: #F0DDB8;
    color: #8A5B12;
}

.doc-deadline--soon svg, .doc-deadline--soon b { color: #A9701A; }

.doc-deadline--gone {
    background: #F3F4F6;
    border-color: #E0E2E5;
    color: #6B7280;
}

.doc-deadline--gone svg, .doc-deadline--gone b { color: #6B7280; }

/* --- sekcje --- */
.doc-sec { margin-bottom: 72px; }

.doc-sec h2 {
    font-size: clamp(1.6rem, 3.6vw, 2.25rem);
    font-weight: 800;
    letter-spacing: -.025em;
    margin: 14px 0 10px;
}

.doc-lead { color: #5B616B; max-width: 62ch; margin: 0 0 32px; }

/* --- numerowana lista bólu --- */
.doc-num { display: flex; gap: 22px; padding: 22px 0; border-top: 1px solid var(--doc-line); }
.doc-num:last-child { border-bottom: 1px solid var(--doc-line); }

.doc-num-idx {
    font-family: ui-monospace, "SFMono-Regular", Menlo, monospace;
    font-size: 1rem;
    color: #B4BEB8;
    flex: 0 0 34px;
    padding-top: 2px;
}

.doc-num h3 { font-size: 1rem; font-weight: 700; margin: 0 0 6px; }
.doc-num p { margin: 0; color: #6B7280; font-size: .9375rem; }

/* Propozycja wartości — wyróżniona, bo to ona uzasadnia cenę. */
.doc-value {
    background: var(--doc-mint);
    border: 1px solid #DCEFE5;
    border-left: 3px solid var(--doc-green);
    border-radius: 4px 16px 16px 4px;
    padding: 28px 32px;
}

/* --- karta etapu: mentolowe tło, zielona belka i kropka po lewej --- */
.doc-stage {
    position: relative;
    background: var(--doc-mint);
    border: 1px solid #DCEFE5;
    border-left: 3px solid var(--doc-green);
    border-radius: 4px 16px 16px 4px;
    padding: 28px 28px 28px 34px;
    margin-bottom: 18px;
}

.doc-stage::before {
    content: "";
    position: absolute;
    left: 16px;
    top: 26px;
    width: 7px;
    height: 7px;
    border-radius: 50%;
    background: var(--doc-green);
}

.doc-stage-head { display: flex; align-items: baseline; justify-content: space-between; gap: 16px; flex-wrap: wrap; }
.doc-stage-head h3 { font-size: 1.0625rem; font-weight: 700; margin: 0; }
.doc-stage-idx { font-family: ui-monospace, monospace; color: var(--doc-green); margin-right: 10px; font-size: .875rem; }
.doc-stage-meta { font-size: .8125rem; color: var(--doc-muted); white-space: nowrap; }

.doc-check { display: flex; gap: 10px; align-items: flex-start; margin-bottom: 8px; font-size: .9375rem; }
.doc-check svg { flex: 0 0 auto; margin-top: 5px; }

.doc-effect {
    background: var(--doc-mint-deep);
    border-radius: 10px;
    padding: 14px 18px;
    margin-top: 18px;
    font-size: .9375rem;
}

/* --- blok wyceny: jasny, z zieloną kartą podsumowania --- */
.doc-invest { margin-bottom: 72px; }

/* Karta z nazwą zakresu, kreską i kwotą po prawej. */
.doc-price-card {
    background: #fff;
    border: 1px solid #CFE9DC;
    border-radius: 14px;
    padding: 24px 26px 0;
    overflow: hidden;
    margin-top: 28px;
}

.doc-price-row {
    display: flex;
    align-items: baseline;
    gap: 18px;
    flex-wrap: wrap;
    padding-bottom: 22px;
}

.doc-price-name { font-weight: 700; font-size: 1rem; }

/* Kreska wypełniająca przestrzeń między nazwą a kwotą. */
.doc-price-fill {
    flex: 1 1 60px;
    height: 2px;
    background: linear-gradient(90deg, var(--doc-green) 0%, #BFE8D5 100%);
    border-radius: 2px;
    min-width: 40px;
}

.doc-price-amount {
    font-size: 1.25rem;
    font-weight: 800;
    letter-spacing: -.02em;
    white-space: nowrap;
}

/* Pasek u dołu karty — wizualne domknięcie kwoty. */
.doc-price-bar {
    height: 5px;
    margin: 0 -26px;
    background: linear-gradient(90deg, var(--doc-green-dark) 0%, var(--doc-green) 60%, #6EDCB0 100%);
}

.doc-price-note { color: #6B7280; font-size: .875rem; margin-top: 14px; }

/* --- fundament: element / fakt / po co --- */
.doc-fund { padding: 14px 0; border-bottom: 1px solid rgba(0, 0, 0, .05); }
.doc-fund:last-of-type { border-bottom: none; }
.doc-fund-head { display: flex; gap: 10px; align-items: flex-start; font-weight: 700; font-size: .9375rem; }
.doc-fund-head svg { flex: 0 0 auto; margin-top: 4px; }
.doc-fund-fact { margin: 6px 0 0 25px; color: #4B5563; font-size: .9375rem; }

/* „Po co” wyróżnione — to ono zamienia listę czynności w powód do zapłaty. */
.doc-fund-why {
    margin: 6px 0 0 25px;
    color: var(--doc-green-dark);
    font-size: .9375rem;
    font-weight: 600;
}

/* --- korzyści: funkcja → obraz → emocja --- */
.doc-benefit {
    background: #fff;
    border: 1px solid var(--doc-line);
    border-radius: 16px;
    padding: 24px 26px;
    margin-bottom: 14px;
}

.doc-benefit h3 { font-size: 1.0625rem; font-weight: 700; margin: 0 0 12px; }
.doc-benefit p { margin: 0 0 8px; font-size: .9375rem; }
.doc-benefit p:last-child { margin-bottom: 0; }
.doc-benefit-fn { color: #6B7280; }
.doc-benefit-img { color: var(--doc-ink); }

.doc-benefit-emo {
    color: var(--doc-green-dark);
    font-weight: 600;
    padding-top: 8px;
    border-top: 1px solid rgba(0, 0, 0, .05);
}

/* --- gwarancje i bonusy --- */
.doc-guarantees, .doc-bonuses {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
    gap: 12px;
}

.doc-guarantee, .doc-bonus {
    display: flex;
    gap: 12px;
    align-items: flex-start;
    background: #fff;
    border: 1px solid var(--doc-line);
    border-radius: 14px;
    padding: 18px 20px;
    font-size: .9375rem;
}

.doc-guarantee { background: var(--doc-mint); border-color: #DCEFE5; }
.doc-guarantee svg, .doc-bonus svg { flex: 0 0 auto; margin-top: 2px; }

/* --- akcja: ograniczona dostępność --- */
.doc-scarcity {
    background: #FFF8EC;
    border: 1px solid #F5E3C0;
    border-left: 3px solid #D9911F;
    border-radius: 4px 16px 16px 4px;
    padding: 26px 30px;
}

.doc-scarcity .doc-lbl { color: #A9701A; }

/* --- obudowa ceny: trywializacja i porównanie --- */
.doc-framing { margin-top: 18px; display: grid; gap: 8px; }

.doc-framing-row {
    background: var(--doc-mint);
    border-radius: 10px;
    padding: 12px 16px;
    font-size: .9375rem;
    font-weight: 600;
    color: var(--doc-green-dark);
}

/* --- harmonogram --- */
.doc-timeline {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(190px, 1fr));
    gap: 14px;
    margin-top: 26px;
}

.doc-milestone {
    background: #fff;
    border: 1px solid var(--doc-line);
    border-radius: 14px;
    padding: 20px;
}

/* Pierwszy punkt to najbliższy termin — wyróżniony, żeby wzrok trafił tam najpierw. */
.doc-milestone--next {
    background: var(--doc-mint);
    border-color: #BFE3D2;
}

.doc-milestone dt {
    font-size: .625rem;
    font-weight: 700;
    letter-spacing: .16em;
    text-transform: uppercase;
    color: var(--doc-muted);
    margin-bottom: 8px;
}

.doc-milestone--next dt { color: var(--doc-green-dark); }
.doc-milestone dd { margin: 0; font-weight: 700; font-size: .9375rem; }

.doc-price {
    font-size: clamp(2.2rem, 6vw, 3.4rem);
    font-weight: 800;
    letter-spacing: -.03em;
    line-height: 1.05;
}

.doc-pill {
    display: inline-block;
    background: rgba(255, 255, 255, .1);
    border: 1px solid rgba(255, 255, 255, .16);
    border-radius: 999px;
    padding: 9px 18px;
    font-size: .8125rem;
    white-space: nowrap;
}

.doc-cols {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
    gap: 12px 48px;
    margin-top: 32px;
    padding-top: 28px;
    border-top: 1px solid var(--doc-line);
}

/* --- karty kolejnych kroków, na białym panelu z delikatną zielenią w rogu --- */
.doc-panel {
    background: #fff;
    background-image: radial-gradient(120% 90% at 100% 0%, #EAF8F1 0%, rgba(255, 255, 255, 0) 55%);
    border: 1px solid var(--doc-line);
    border-radius: 20px;
    padding: 40px;
}

.doc-steps { display: grid; grid-template-columns: repeat(auto-fit, minmax(210px, 1fr)); gap: 16px; }

.doc-step {
    background: #fff;
    border: 1px solid var(--doc-line);
    border-radius: 14px;
    padding: 22px;
}

.doc-step h3 { font-size: .9375rem; font-weight: 700; margin: 10px 0 8px; }
.doc-step p { margin: 0; color: #6B7280; font-size: .875rem; }

/* --- blok domykający --- */
.doc-closing {
    background: #fff;
    border: 1px solid var(--doc-line);
    border-radius: 20px;
    padding: 32px;
    display: flex;
    align-items: center;
    gap: 24px;
    flex-wrap: wrap;
}

/* --- przyklejony pasek decyzji --- */
.doc-dock {
    position: fixed;
    left: 50%;
    bottom: 22px;
    transform: translateX(-50%);
    z-index: 1200;
    display: flex;
    gap: 10px;
    background: rgba(255, 255, 255, .92);
    backdrop-filter: blur(10px);
    border: 1px solid var(--doc-line);
    border-radius: 999px;
    padding: 8px;
    box-shadow: 0 8px 28px rgba(15, 23, 41, .12);
    max-width: calc(100vw - 32px);
}

.doc-btn {
    border: 1px solid transparent;
    border-radius: 999px;
    padding: 12px 22px;
    font: inherit;
    font-size: .9375rem;
    font-weight: 600;
    white-space: nowrap;
    cursor: pointer;
    background: #fff;
    color: var(--doc-ink);
    transition: transform .12s ease, box-shadow .12s ease;
}

.doc-btn:hover:not(:disabled) { transform: translateY(-1px); }
.doc-btn:disabled { opacity: .45; cursor: not-allowed; }

.doc-btn--primary {
    background: linear-gradient(135deg, var(--doc-green) 0%, var(--doc-green-dark) 100%);
    color: #fff;
}

.doc-btn--ghost { border-color: #D8D9E4; }

.doc-faq {
    border-top: 1px solid var(--doc-line);
    padding: 20px 0;
    cursor: pointer;
}

.doc-faq:last-of-type { border-bottom: 1px solid var(--doc-line); }
.doc-faq summary { font-weight: 700; list-style: none; display: flex; justify-content: space-between; gap: 16px; }
.doc-faq summary::-webkit-details-marker { display: none; }
.doc-faq p { color: #5B616B; margin: 12px 0 0; }

.doc-quote {
    background: #fff;
    border-radius: 18px;
    padding: 30px;
    margin-top: 24px;
    font-size: 1.0625rem;
    font-weight: 600;
    line-height: 1.55;
}

@media (max-width: 640px) {
    .doc-hero { padding: 32px 0 28px; }
    .doc-invest { padding: 28px; border-radius: 16px; }
    .doc-meta { gap: 24px; margin-top: 32px; }
    .doc-dock { bottom: 10px; overflow-x: auto; }
    .doc-btn { padding: 11px 16px; font-size: .875rem; }
}

/* ========================= OFERTA (stare klasy pomocnicze) ========================= */

.offer-skin { background: var(--page); }

/* Blok nagłówkowy — ciemna zieleń, biała typografia, duża cena. */
.offer-hero {
    background: linear-gradient(160deg, #202A63 0%, var(--ink) 100%);
    border-radius: 20px;
    padding: 48px;
    color: #fff;
}

.offer-hero h1 {
    font-size: clamp(2rem, 5vw, 3.25rem);
    font-weight: 800;
    letter-spacing: -.025em;
    line-height: 1.05;
    margin: 0 0 8px;
}

.offer-price {
    font-size: clamp(2.25rem, 6vw, 4rem);
    font-weight: 800;
    letter-spacing: -.03em;
    line-height: 1;
}

/* Etykieta w kapitalikach — charakterystyczny element tego stylu. */
.offer-label {
    font-size: .6875rem;
    font-weight: 600;
    letter-spacing: .14em;
    text-transform: uppercase;
    color: rgba(255, 255, 255, .65);
}

.offer-label--dark { color: var(--muted); }

.offer-pill {
    display: inline-block;
    background: rgba(255, 255, 255, .12);
    border: 1px solid rgba(255, 255, 255, .18);
    border-radius: 999px;
    padding: 8px 16px;
    font-size: .875rem;
}

.offer-check {
    display: flex;
    align-items: flex-start;
    gap: 10px;
    margin-bottom: 10px;
    line-height: 1.5;
}

.offer-check svg { flex: 0 0 auto; margin-top: 2px; }

.offer-card {
    background: var(--surface);
    border: 1px solid var(--sep);
    border-radius: 16px;
    padding: 28px;
    box-shadow: var(--shadow);
}

.offer-section-num {
    font-family: ui-monospace, "SFMono-Regular", Menlo, monospace;
    font-size: .8125rem;
    font-weight: 600;
    color: var(--green);
}

/* Pasek decyzji przyklejony do dołu — zawsze w zasięgu kciuka. */
.offer-actions {
    position: sticky;
    bottom: 0;
    z-index: 20;
    display: flex;
    flex-wrap: wrap;
    gap: 12px;
    justify-content: center;
    padding: 16px;
    margin: 0 -16px;
    background: rgba(246, 247, 246, .92);
    backdrop-filter: blur(8px);
    border-top: 1px solid var(--sep);
}

.offer-btn {
    border: none;
    border-radius: 999px;
    padding: 14px 28px;
    font-size: .9375rem;
    font-weight: 600;
    font-family: inherit;
    cursor: pointer;
    transition: transform .12s ease, box-shadow .12s ease;
}

.offer-btn:hover { transform: translateY(-1px); }
.offer-btn:disabled { opacity: .5; cursor: not-allowed; transform: none; }

.offer-btn--primary { background: var(--green); color: #fff; }
.offer-btn--primary:hover { background: var(--green-dark); }

.offer-btn--ghost {
    background: var(--surface);
    color: var(--text);
    border: 1px solid #D1D5DB;
}

.offer-btn--whatsapp { background: #25D366; color: #0B3D22; }

@media (max-width: 600px) {
    .offer-hero { padding: 28px; border-radius: 16px; }
    .offer-card { padding: 20px; }
    .offer-btn { flex: 1 1 100%; }
}

/* ========================= Blazor ========================= */

h1:focus { outline: none; }
.valid.modified:not([type=checkbox]) { outline: 1px solid #26b050; }
.invalid { outline: 1px solid #e50000; }
.validation-message { color: #e50000; }

.blazor-error-boundary {
    background: #DC2626;
    padding: 1rem;
    color: white;
    border-radius: 12px;
}

.blazor-error-boundary::after { content: "Wystąpił błąd." }
