@import '_content/Blazor.Bootstrap/Blazor.Bootstrap.olwso25aue.bundle.scp.css';

/* /Components/Account/Shared/AccountLayout.razor.rz.scp.css */
.account-layout[b-jtwjhwl052] {
    min-height: 100dvh;
    height: auto;
}

.public-topbar[b-jtwjhwl052] {
    width: min(1180px, calc(100% - 4rem));
    margin: 2rem auto 0;
    display: grid;
    grid-template-columns: auto 1fr auto;
    align-items: center;
    gap: 2rem;
    position: relative;
    z-index: 10;
}

.public-logo[b-jtwjhwl052] {
    display: inline-flex;
    align-items: center;
}

    .public-logo img[b-jtwjhwl052] {
        height: 54px;
        width: auto;
        object-fit: contain;
        display: block;
    }

.public-tabs[b-jtwjhwl052] {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 0.5rem;
    padding: 0.45rem;
    border: 1px solid #e2e8f0;
    border-radius: 1rem;
    background: rgba(255, 255, 255, 0.92);
    box-shadow: 0 12px 35px rgba(15, 23, 42, 0.08);
}

    .public-tabs a[b-jtwjhwl052] {
        color: #475569;
        text-decoration: none;
        text-transform: uppercase;
        font-size: 0.78rem;
        font-weight: 800;
        letter-spacing: 0.06em;
        padding: 0.8rem 1rem;
        border-radius: 1rem;
        white-space: nowrap;
        transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out;
    }

        .public-tabs a:hover[b-jtwjhwl052],
        .public-tabs a:focus[b-jtwjhwl052] {
            color: #ff5a0a;
            background: #fff7ed;
        }

.public-contact-button[b-jtwjhwl052] {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-height: 44px;
    padding: 0.75rem 1.3rem;
    border-radius: 1rem;
    background: #ff5a0a;
    color: #fff;
    text-decoration: none;
    text-transform: uppercase;
    font-size: 0.78rem;
    font-weight: 900;
    letter-spacing: 0.08em;
    box-shadow: 0 14px 28px rgba(255, 90, 10, 0.22);
    transition: background-color 0.15s ease-in-out, transform 0.15s ease-in-out;
}

    .public-contact-button[b-jtwjhwl052]::-webkit-details-marker {
        display: none;
    }

    .public-contact-button:hover[b-jtwjhwl052],
    .public-contact-button:focus[b-jtwjhwl052] {
        background: #e94f05;
        color: #fff;
        transform: translateY(-1px);
    }

.public-contact[b-jtwjhwl052] {
    position: relative;
}

    .public-contact summary[b-jtwjhwl052] {
        list-style: none;
        cursor: pointer;
    }

.public-contact-popup[b-jtwjhwl052] {
    position: absolute;
    top: calc(100% + 0.85rem);
    right: 0;
    width: min(360px, calc(100vw - 2rem));
    padding: 1.15rem;
    border: 1px solid #e2e8f0;
    border-radius: 1.4rem;
    background: rgba(255, 255, 255, 0.98);
    box-shadow: 0 24px 60px rgba(15, 23, 42, 0.18);
    color: #0f172a;
    z-index: 30;
}

    .public-contact-popup[b-jtwjhwl052]::before {
        content: "";
        position: absolute;
        top: -0.45rem;
        right: 2rem;
        width: 0.9rem;
        height: 0.9rem;
        border-left: 1px solid #e2e8f0;
        border-top: 1px solid #e2e8f0;
        background: #fff;
        transform: rotate(45deg);
    }

.public-contact-popup-header[b-jtwjhwl052] {
    display: grid;
    gap: 0.25rem;
    padding-bottom: 0.9rem;
    margin-bottom: 0.9rem;
    border-bottom: 1px solid #f1f5f9;
}

    .public-contact-popup-header span[b-jtwjhwl052],
    .public-contact-row span[b-jtwjhwl052],
    .public-contact-hours > span[b-jtwjhwl052] {
        color: #64748b;
        font-size: 0.76rem;
        font-weight: 900;
        letter-spacing: 0.08em;
        text-transform: uppercase;
    }

    .public-contact-popup-header strong[b-jtwjhwl052] {
        font-size: 1.1rem;
        font-weight: 900;
    }

.public-contact-row[b-jtwjhwl052] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 1rem;
    padding: 0.55rem 0;
}

    .public-contact-row a[b-jtwjhwl052] {
        color: #ff5a0a;
        font-weight: 900;
        text-decoration: none;
    }

.public-contact-hours[b-jtwjhwl052] {
    display: grid;
    gap: 0.65rem;
    padding-top: 0.9rem;
    margin-top: 0.75rem;
    border-top: 1px solid #f1f5f9;
}

    .public-contact-hours dl[b-jtwjhwl052] {
        display: grid;
        gap: 0.4rem;
        margin: 0;
    }

    .public-contact-hours dl > div[b-jtwjhwl052] {
        display: flex;
        justify-content: space-between;
        gap: 1rem;
    }

    .public-contact-hours dt[b-jtwjhwl052],
    .public-contact-hours dd[b-jtwjhwl052] {
        margin: 0;
        font-size: 0.9rem;
    }

    .public-contact-hours dt[b-jtwjhwl052] {
        color: #475569;
        font-weight: 800;
    }

    .public-contact-hours dd[b-jtwjhwl052] {
        color: #0f172a;
        font-weight: 900;
    }

.public-content[b-jtwjhwl052] {
    padding: 1.2rem 2rem 2rem;
}

@media (max-width: 992px) {
    .public-topbar[b-jtwjhwl052] {
        width: min(100% - 2rem, 720px);
        grid-template-columns: 1fr;
        justify-items: center;
        gap: 1rem;
    }

    .public-tabs[b-jtwjhwl052] {
        flex-wrap: wrap;
        border-radius: 1.5rem;
    }

    .public-actions[b-jtwjhwl052] {
        justify-content: center;
    }
}

@media (max-width: 576px) {
    .public-culture-selector[b-jtwjhwl052] {
        right: 1rem;
        bottom: 1rem;
    }

    .public-content[b-jtwjhwl052] {
        padding: 1rem;
    }

    .public-tabs a[b-jtwjhwl052] {
        font-size: 0.7rem;
        padding: 0.65rem 0.75rem;
    }
}
/* /Components/Pages/Analytics/Analytics.razor.rz.scp.css */
/* /Components/Pages/Analytics/StatBars.razor.rz.scp.css */
.stat-bars[b-lnazyi9cik] {
    display: flex;
    flex-direction: column;
    gap: 10px;
}

.stat-bar-row[b-lnazyi9cik] {
    display: grid;
    grid-template-columns: 150px 1fr 44px;
    align-items: center;
    gap: 10px;
}

.stat-bar-label[b-lnazyi9cik] {
    font-size: 0.8rem;
    color: #374151;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.stat-bar-track[b-lnazyi9cik] {
    position: relative;
    height: 12px;
    background: #f1f3f5;
    border-radius: 6px;
    overflow: hidden;
}

.stat-bar-fill[b-lnazyi9cik] {
    display: block;
    height: 100%;
    border-radius: 6px;
    background: #3b82f6;
    transition: width 0.35s ease;
    min-width: 0;
}

.stat-bar-value[b-lnazyi9cik] {
    font-size: 0.8rem;
    font-weight: 600;
    color: #111827;
    text-align: right;
    font-variant-numeric: tabular-nums;
}

.stat-bars-empty[b-lnazyi9cik] {
    color: #9ca3af;
    font-size: 0.85rem;
    padding: 8px 0;
}

/* Kolory wg statusu zgłoszenia (spójne z pigułkami na liście zgłoszeń). */
.stat-bar-fill.bar-new[b-lnazyi9cik] { background: #3b82f6; }
.stat-bar-fill.bar-progress[b-lnazyi9cik] { background: #f59e0b; }
.stat-bar-fill.bar-waiting[b-lnazyi9cik] { background: #a855f7; }
.stat-bar-fill.bar-closed[b-lnazyi9cik] { background: #6b7280; }

/* Kolory wg priorytetu. */
.stat-bar-fill.bar-low[b-lnazyi9cik] { background: #9ca3af; }
.stat-bar-fill.bar-normal[b-lnazyi9cik] { background: #3b82f6; }
.stat-bar-fill.bar-high[b-lnazyi9cik] { background: #f59e0b; }
.stat-bar-fill.bar-critical[b-lnazyi9cik] { background: #ef4444; }

/* Neutralny (produkt / pracownik / grupa). */
.stat-bar-fill.bar-neutral[b-lnazyi9cik] { background: #0ea5e9; }

@media (max-width: 576px) {
    .stat-bar-row[b-lnazyi9cik] {
        grid-template-columns: 110px 1fr 36px;
        gap: 8px;
    }
}
/* /Components/Pages/Analytics/Statistics.razor.rz.scp.css */
.stats-page[b-fnnrj7312f] {
    display: flex;
    flex-direction: column;
    gap: 16px;
    padding: 4px;
    /* Oddech pod ostatnią kartą — bez tego dolny wiersz kafelków kończy się
       dokładnie na krawędzi okna i przy przewinięciu do końca wygląda na ucięty. */
    padding-bottom: 24px;
}

/* === Pasek kontrolek === */
.stats-controls[b-fnnrj7312f] {
    display: flex;
    align-items: center;
    gap: 14px;
    flex-wrap: wrap;
    justify-content: space-between;
}

/* Lewa strona paska: przełącznik widoku + skróty + wybór użytkownika — jeden rząd. */
.stats-left[b-fnnrj7312f] {
    display: flex;
    align-items: center;
    gap: 10px;
    flex-wrap: wrap;
}

/* Combobox ma wtopić się w rząd przełączników: wąski i bez rozpychania.
   !important, bo DevExpress narzuca własną szerokość i sam `width` przegrywa. */
.stats-client-combo[b-fnnrj7312f] {
    width: 160px !important;
    min-width: 160px !important;
    max-width: 160px !important;
    flex: 0 0 160px;
}

[b-fnnrj7312f] .stats-client-combo {
    width: 160px !important;
    max-width: 160px !important;
}

.stats-toggle[b-fnnrj7312f] {
    display: inline-flex;
    background: #f1f3f5;
    border-radius: 8px;
    padding: 3px;
    gap: 2px;
}

.stats-toggle-btn[b-fnnrj7312f] {
    border: none;
    background: transparent;
    padding: 6px 14px;
    border-radius: 6px;
    font-size: 0.85rem;
    color: #4b5563;
    cursor: pointer;
    display: inline-flex;
    align-items: center;
    gap: 6px;
    transition: background 0.15s ease, color 0.15s ease;
}

.stats-toggle-btn:hover[b-fnnrj7312f] {
    color: #111827;
}

.stats-toggle-btn.active[b-fnnrj7312f] {
    background: #fff;
    color: #111827;
    font-weight: 600;
    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.08);
}

/* === Filtr zakresu dat === */
.stats-range[b-fnnrj7312f] {
    display: flex;
    align-items: center;
    gap: 10px;
    flex-wrap: wrap;
}

.stats-range-presets[b-fnnrj7312f] {
    display: inline-flex;
    background: #f1f3f5;
    border-radius: 8px;
    padding: 3px;
    gap: 2px;
    flex-wrap: wrap;
}

/* Przełącznik archiwum stoi obok presetów zakresu — oba zawężają ten sam zbiór danych. */
.stats-range-archive[b-fnnrj7312f] {
    display: inline-flex;
    align-items: center;
    white-space: nowrap;
}

.stats-range-btn[b-fnnrj7312f] {
    border: none;
    background: transparent;
    padding: 5px 10px;
    border-radius: 6px;
    font-size: 0.8rem;
    color: #4b5563;
    cursor: pointer;
    transition: background 0.15s ease, color 0.15s ease;
}

.stats-range-btn:hover[b-fnnrj7312f] {
    color: #111827;
}

.stats-range-btn.active[b-fnnrj7312f] {
    background: #fff;
    color: #111827;
    font-weight: 600;
    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.08);
}

/* === Kafelki KPI (styl dashboardu FlowHub) === */
.stats-kpis[b-fnnrj7312f] {
    display: grid;
    gap: 14px;
}

.stats-kpis-3[b-fnnrj7312f] { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.stats-kpis-4[b-fnnrj7312f] { grid-template-columns: repeat(4, minmax(0, 1fr)); }
.stats-kpis-5[b-fnnrj7312f] { grid-template-columns: repeat(5, minmax(0, 1fr)); }

/* Style samego kafelka KPI są w komponencie Shared/Components/KpiTile.razor.css. */

/* === Widok ogólny: środkowy rząd (trend + boki) === */
.dash-mid[b-fnnrj7312f] {
    display: grid;
    grid-template-columns: 2fr 1fr;
    gap: 12px;
    align-items: stretch;
}

/* Lewa kolumna: trend tygodniowy + wydajność agentów pod nim. */
.dash-main[b-fnnrj7312f] {
    display: flex;
    flex-direction: column;
    gap: 12px;
    min-width: 0;
}

.dash-side[b-fnnrj7312f] {
    display: flex;
    flex-direction: column;
    gap: 12px;
}

.dash-chart[b-fnnrj7312f] {
    height: 250px;
    width: 100%;
}

.stats-empty-mini[b-fnnrj7312f] {
    color: #9ca3af;
    font-size: 0.85rem;
    padding: 14px 0;
}

/* Objaśnienie pod wykresem — jak liczony jest wskaźnik. */
.stats-card-hint[b-fnnrj7312f] {
    margin-top: 10px;
    padding-top: 10px;
    border-top: 1px solid #f3f4f6;
    color: #9ca3af;
    font-size: 0.75rem;
    line-height: 1.5;
}

/* === Wydajność agentów === */
.agents-table[b-fnnrj7312f] {
    display: flex;
    flex-direction: column;
}

.agents-head[b-fnnrj7312f],
.agents-row[b-fnnrj7312f] {
    display: grid;
    grid-template-columns: 2fr 0.8fr 0.9fr 0.7fr 2fr;
    align-items: center;
    gap: 10px;
    padding: 9px 4px;
}

.agents-head[b-fnnrj7312f] {
    font-size: 0.7rem;
    font-weight: 600;
    letter-spacing: 0.03em;
    text-transform: uppercase;
    color: #9ca3af;
    border-bottom: 1px solid #eef0f2;
}

.agents-num-col[b-fnnrj7312f] {
    text-align: right;
}

.agents-row[b-fnnrj7312f] {
    border-bottom: 1px solid #f3f4f6;
    font-size: 0.88rem;
}

.agent-name[b-fnnrj7312f] {
    font-weight: 500;
    color: #111827;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.agent-num[b-fnnrj7312f] {
    color: #374151;
    font-variant-numeric: tabular-nums;
}

.agent-rate[b-fnnrj7312f] {
    display: flex;
    align-items: center;
    gap: 8px;
}

.agent-rate-track[b-fnnrj7312f] {
    flex: 1;
    height: 8px;
    background: #f1f3f5;
    border-radius: 5px;
    overflow: hidden;
}

.agent-rate-fill[b-fnnrj7312f] {
    display: block;
    height: 100%;
    background: #22c55e;
    border-radius: 5px;
}

.agent-rate-pct[b-fnnrj7312f] {
    font-size: 0.78rem;
    font-weight: 600;
    color: #111827;
    min-width: 34px;
    text-align: right;
    font-variant-numeric: tabular-nums;
}

/* === Metryki (druga linia) === */
.stats-metrics[b-fnnrj7312f] {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 12px;
}

.metric[b-fnnrj7312f] {
    background: #fff;
    border: 1px solid #e5e7eb;
    border-radius: 10px;
    padding: 14px 16px;
    display: grid;
    grid-template-columns: auto 1fr;
    grid-template-rows: auto auto;
    column-gap: 12px;
    align-items: center;
}

.metric-icon[b-fnnrj7312f] {
    grid-row: 1 / 3;
    background: #eff6ff;
    color: #3b82f6;
    border-radius: 8px;
    padding: 8px;
}

.metric-value[b-fnnrj7312f] {
    font-size: 1.25rem;
    font-weight: 700;
    color: #111827;
    font-variant-numeric: tabular-nums;
}

.metric-label[b-fnnrj7312f] {
    font-size: 0.78rem;
    color: #6b7280;
}

/* === Siatka kart === */
.stats-grid[b-fnnrj7312f] {
    display: grid;
    gap: 12px;
}

.stats-grid-2[b-fnnrj7312f] {
    grid-template-columns: repeat(2, 1fr);
}

.stats-card[b-fnnrj7312f] {
    background: #fff;
    border: 1px solid #e5e7eb;
    border-radius: 10px;
    padding: 16px 18px;
}

.stats-card h3[b-fnnrj7312f] {
    margin: 0 0 14px;
    font-size: 0.72rem;
    font-weight: 600;
    letter-spacing: 0.05em;
    text-transform: uppercase;
    color: #9ca3af;
}

/* === Wykres trendu (kolumnowy) === */
.trend-chart[b-fnnrj7312f] {
    display: flex;
    align-items: flex-end;
    gap: 6px;
    height: 180px;
}

.trend-col[b-fnnrj7312f] {
    flex: 1 1 0;
    display: flex;
    flex-direction: column;
    align-items: center;
    height: 100%;
    min-width: 0;
}

.trend-col-value[b-fnnrj7312f] {
    font-size: 0.72rem;
    font-weight: 600;
    color: #374151;
    height: 16px;
    line-height: 16px;
}

.trend-bar-wrap[b-fnnrj7312f] {
    flex: 1;
    width: 100%;
    display: flex;
    align-items: flex-end;
    justify-content: center;
}

.trend-bar[b-fnnrj7312f] {
    width: 60%;
    max-width: 28px;
    min-height: 0;
    background: linear-gradient(180deg, #60a5fa 0%, #3b82f6 100%);
    border-radius: 4px 4px 0 0;
    transition: height 0.35s ease;
}

.trend-col-label[b-fnnrj7312f] {
    margin-top: 6px;
    font-size: 0.68rem;
    color: #9ca3af;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    max-width: 100%;
}

/* === Responsywność === */
@media (max-width: 1200px) {
    .stats-kpis-3[b-fnnrj7312f],
    .stats-kpis-4[b-fnnrj7312f],
    .stats-kpis-5[b-fnnrj7312f] { grid-template-columns: repeat(2, minmax(0, 1fr)); }
    .stats-metrics[b-fnnrj7312f] { grid-template-columns: repeat(2, 1fr); }
    .stats-controls[b-fnnrj7312f] { justify-content: flex-start; }
}

@media (max-width: 992px) {
    .stats-grid-2[b-fnnrj7312f] { grid-template-columns: 1fr; }
    .dash-mid[b-fnnrj7312f] { grid-template-columns: 1fr; }
}

@media (max-width: 576px) {
    .stats-kpis-3[b-fnnrj7312f],
    .stats-kpis-4[b-fnnrj7312f],
    .stats-kpis-5[b-fnnrj7312f],
    .stats-metrics[b-fnnrj7312f] { grid-template-columns: 1fr; }
    .trend-col-label[b-fnnrj7312f] { font-size: 0.6rem; }
    .agents-head[b-fnnrj7312f],
    .agents-row[b-fnnrj7312f] { grid-template-columns: 1.6fr 0.7fr 0.7fr 1.4fr; }
    .agents-head span:nth-child(4)[b-fnnrj7312f],
    .agents-row span:nth-child(4)[b-fnnrj7312f] { display: none; }
}
/* /Components/Pages/Index/AccountManagerPanel.razor.rz.scp.css */
/* Karta opiekuna konta — ta sama powierzchnia co pozostałe kafle pulpitu (biała, 1rem, cień). */
.am-card[b-bl9pirvcgh] {
    background: #ffffff;
    border: 1px solid #e5e7eb;
    border-radius: 1rem;
    box-shadow: 0 10px 30px rgba(15, 23, 42, 0.06);
    padding: 14px 16px;
    display: flex;
    flex-direction: column;
    gap: 12px;
    width: 100%;
    min-width: 0;
}

.am-person[b-bl9pirvcgh] {
    display: flex;
    align-items: center;
    gap: 12px;
    min-width: 0;
}

/* Kulka z inicjałami w kolorze grupy opiekuna — ta sama konwencja co na kartach Kanbana
   i w wiadomościach zgłoszenia (kolor wstrzykiwany inline z TicketVisuals). */
.am-avatar[b-bl9pirvcgh] {
    width: 40px;
    height: 40px;
    border-radius: 50%;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    font-size: 14px;
    font-weight: 700;
    line-height: 1;
    color: #fff;
    letter-spacing: 0.02em;
}

.am-person-text[b-bl9pirvcgh] {
    display: flex;
    flex-direction: column;
    min-width: 0;
}

.am-label[b-bl9pirvcgh] {
    font-size: 12px;
    color: #6b7280;
    line-height: 1.3;
}

.am-name[b-bl9pirvcgh] {
    font-size: 14px;
    font-weight: 600;
    color: #111827;
    line-height: 1.3;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

/* Kontakty jeden pod drugim — kafel stoi w wąskiej kolumnie pulpitu, w rzędzie e-mail
   nie zmieściłby się obok telefonu bez ucinania adresu. */
.am-contacts[b-bl9pirvcgh] {
    display: flex;
    flex-direction: column;
    gap: 6px;
    min-width: 0;
}

.am-contact[b-bl9pirvcgh] {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    min-width: 0;
    font-size: 13px;
    color: #374151;
    text-decoration: none;
}

    .am-contact:hover[b-bl9pirvcgh] {
        color: var(--main-color);
        text-decoration: underline;
    }

.am-contact-text[b-bl9pirvcgh] {
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

/* Ikony maską na czarnym SVG (jak w Kanbanie) — biorą currentColor, więc idą za kolorem
   linku i w motywie ciemnym nie trzeba ich osobno odwracać. */
.am-contact-icon[b-bl9pirvcgh] {
    width: 13px;
    height: 13px;
    display: block;
    flex-shrink: 0;
    background-color: currentColor;
}

/* Dwie kolumny: opiekun z lewej, infolinia dopchnięta do prawej krawędzi karty.
   flex-wrap sprawia, że w wąskiej kolumnie pulpitu prawa strona schodzi pod spód — ale dalej
   trzyma się prawej, a nie wraca pod e-mail. */
.am-body[b-bl9pirvcgh] {
    display: flex;
    flex-wrap: wrap;
    align-items: flex-start;
    justify-content: space-between;
    gap: 14px 16px;
    min-width: 0;
}

.am-side[b-bl9pirvcgh] {
    display: flex;
    flex-direction: column;
    gap: 10px;
    min-width: 0;
}

/* Prawa strona jest lustrem lewej: podpis idzie PRZED logo, wszystko wyrównane do prawej. */
.am-side-right[b-bl9pirvcgh] {
    margin-left: auto;
    align-items: flex-end;
    text-align: right;
}

    .am-side-right .am-person-text[b-bl9pirvcgh] {
        align-items: flex-end;
    }

/* Znak firmowy zamiast kulki z inicjałami — w kółku o tej samej średnicy, żeby obie strony
   stały równo. Tło półprzezroczystą szarością, a nie konkretnym kolorem: na białej karcie
   wychodzi jasnoszare kółko, na ciemnej przygaszone, więc nie trzeba osobnego nadpisania
   w motywie ciemnym. */
.am-logo[b-bl9pirvcgh] {
    width: 40px;
    height: 40px;
    border-radius: 50%;
    background: rgba(127, 127, 127, 0.16);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
}

/* Własna klasa, nie selektor potomka — rozmiar obrazka nie może zależeć od zagnieżdżenia. */
.am-logo-img[b-bl9pirvcgh] {
    width: 24px;
    height: 24px;
    object-fit: contain;
    display: block;
}

.am-icon-mail[b-bl9pirvcgh] {
    -webkit-mask: url('/images/bootstrap-icons/envelope.svg') no-repeat center / contain;
    mask: url('/images/bootstrap-icons/envelope.svg') no-repeat center / contain;
}

.am-icon-phone[b-bl9pirvcgh] {
    -webkit-mask: url('/images/bootstrap-icons/telephone.svg') no-repeat center / contain;
    mask: url('/images/bootstrap-icons/telephone.svg') no-repeat center / contain;
}

/* === Wariant pionowy (Stacked) — dolny rząd pulpitu klienta ===
   Kolory jawne w obu motywach: theme-dark.css nadpisuje tylko klasy bazowe karty (.am-card,
   .am-name, .am-label, .am-contact), a te nowe są wyłącznie tutaj. Reguły z html[data-theme]
   działają w pliku izolowanym — atrybut zakresu trafia na ostatni selektor. */
.am-stacked[b-bl9pirvcgh] {
    height: 100%;
    padding: 18px 20px;
    gap: 16px;
}

.am-st-head[b-bl9pirvcgh] {
    display: flex;
    align-items: center;
    gap: 8px;
    font-size: 15px;
    font-weight: 700;
    color: #111827;
    padding-bottom: 12px;
    border-bottom: 1px solid #e5e7eb;
}

.am-st-head-icon[b-bl9pirvcgh] {
    width: 16px;
    height: 16px;
    display: block;
    flex-shrink: 0;
    background-color: currentColor;
    -webkit-mask: url('/images/bootstrap-icons/person-badge.svg') no-repeat center / contain;
    mask: url('/images/bootstrap-icons/person-badge.svg') no-repeat center / contain;
}

.am-st-avatar[b-bl9pirvcgh] {
    width: 52px;
    height: 52px;
    font-size: 17px;
}

.am-st-name[b-bl9pirvcgh] {
    font-size: 17px;
    font-weight: 700;
}

.am-st-contacts[b-bl9pirvcgh] {
    display: flex;
    flex-direction: column;
    gap: 8px;
    min-width: 0;
}

.am-st-contact[b-bl9pirvcgh] {
    padding: 9px 12px;
    border-radius: 10px;
    background: #f7f7f8;
    border: 1px solid #eef0f2;
}

.am-st-hotline[b-bl9pirvcgh] {
    margin-top: auto;
    padding-top: 14px;
    border-top: 1px solid #e5e7eb;
    display: flex;
    flex-direction: column;
    gap: 10px;
    min-width: 0;
}

html[data-theme="dark"] .am-st-head[b-bl9pirvcgh] {
    color: #ece9e2;
    border-bottom-color: #3a3936;
}

html[data-theme="dark"] .am-st-contact[b-bl9pirvcgh] {
    background: #2f2e2c;
    border-color: #3a3936;
}

html[data-theme="dark"] .am-st-hotline[b-bl9pirvcgh] {
    border-top-color: #3a3936;
}
/* /Components/Pages/Index/Carousel.razor.rz.scp.css */
.carousel-wrapper-card[b-xvneur712o] {
    background: #ffffff;
    border-radius: 1rem;
    border: 1px solid #e5e7eb;
    overflow: hidden;
}

[b-xvneur712o] .products-carousel {
    border-radius: 1rem;
    overflow: hidden;
    background: #ffffff !important;
}

[b-xvneur712o] .products-carousel .dxbl-carousel,
[b-xvneur712o] .products-carousel .dxbl-carousel-viewport,
[b-xvneur712o] .products-carousel .dxbl-carousel-slide {
    background: #ffffff !important;
}

/* Slajd ma wypełnić wysokość karuzeli (parametr Height) — inaczej przy niższej
   karuzeli treść wystaje poza kadr i wygląda na przesuniętą. */
[b-xvneur712o] .products-carousel .dxbl-carousel-slide {
    height: 100%;
}

.product-slide[b-xvneur712o] {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 10px;
    width: 100%;
    height: 100%;
    min-height: 0;
    padding: 16px 24px;
    cursor: pointer;
    user-select: none;
    transition: filter 0.2s;
}

    .product-slide:hover[b-xvneur712o] {
        filter: brightness(0.96);
    }

/* Logo skaluje się w dół, gdy karuzela jest niższa (stąd flex: 0 1 auto zamiast flex-shrink: 0). */
.product-slide-img[b-xvneur712o] {
    width: 100%;
    max-width: 200px;
    height: auto;
    max-height: 80px;
    min-height: 0;
    object-fit: contain;
    flex: 0 1 auto;
}

/* Ikona SVG jest rysowana inline (brak pliku logo), więc trzyma proporcje sama —
   wystarczy zawęzić ją do szerokości zbliżonej do pozostałych logotypów. */
.product-slide-snake-icon[b-xvneur712o] {
    max-width: 170px;
}

.product-slide-info[b-xvneur712o] {
    display: flex;
    flex-direction: column;
    align-items: center;
    text-align: center;
}

.product-slide-desc[b-xvneur712o] {
    font-size: 1rem;
    opacity: 1;
    font-weight: 500;
    color: black;
}

.product-slide-badge[b-xvneur712o] {
    display: inline-block;
    border-radius: 20px;
    padding: 2px 12px;
    font-size: 0.72rem;
    font-weight: 600;
    margin-top: 4px;
    width: fit-content;
}

.product-slide-link[b-xvneur712o] {
    display: inline-block;
    border-radius: 20px;
    padding: 2px 12px;
    font-size: 0.72rem;
    font-weight: 600;
    margin-top: 4px;
    margin-bottom: 16px;
    width: fit-content;
    transition: background 0.15s;
}

/* /Components/Pages/Index/ClientCaseTiles.razor.rz.scp.css */
/* Kafelki spraw. Kolory z tokenów --cd-* (ClientDashboard.razor.css). */

.ct[b-zwad6bka40] {
    min-width: 0;
}

.ct-head[b-zwad6bka40] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px 16px;
    flex-wrap: wrap;
    padding: 0 2px;
    margin-bottom: 12px;
}

.ct-title[b-zwad6bka40] {
    margin: 0;
    font-size: 12px;
    font-weight: 700;
    letter-spacing: 0.14em;
    text-transform: uppercase;
    color: var(--cd-muted);
}

.ct-actions[b-zwad6bka40] {
    display: flex;
    align-items: center;
    gap: 14px;
}

.ct-all-link[b-zwad6bka40] {
    font-size: 13px;
    font-weight: 600;
    color: var(--cd-orange-text);
    text-decoration: none;
    white-space: nowrap;
}

    .ct-all-link:hover[b-zwad6bka40] {
        text-decoration: underline;
    }

.ct-grid[b-zwad6bka40] {
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: 12px;
}

.ct-empty[b-zwad6bka40] {
    grid-column: span 3;
    display: flex;
    align-items: center;
    padding: 14px 16px;
    border-radius: 14px;
    border: 1px dashed var(--cd-border-strong);
    font-size: 13.5px;
    color: var(--cd-muted);
}

.ct-tile[b-zwad6bka40] {
    display: flex;
    flex-direction: column;
    gap: 8px;
    min-width: 0;
    padding: 14px 16px 13px;
    border-radius: 14px;
    background: var(--cd-surface);
    border: 1px solid var(--cd-border);
    box-shadow: var(--cd-shadow);
    color: inherit;
    text-decoration: none;
    transition: border-color 0.15s ease, transform 0.15s ease;
}

    .ct-tile:hover[b-zwad6bka40] {
        border-color: var(--cd-border-strong);
        transform: translateY(-2px);
    }

    .ct-tile:focus-visible[b-zwad6bka40] {
        outline: 2px solid var(--cd-orange);
        outline-offset: 2px;
    }

    .ct-tile.is-you[b-zwad6bka40] {
        border-color: var(--cd-orange-border);
        background: linear-gradient(180deg, var(--cd-orange-soft), transparent 70%), var(--cd-surface);
    }

.ct-tile-top[b-zwad6bka40] {
    display: flex;
    align-items: center;
    gap: 8px;
    font-size: 11px;
    font-weight: 700;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    color: var(--cd-muted);
}

.ct-tile.is-you .ct-tile-top[b-zwad6bka40] {
    color: var(--cd-orange-text);
}

.ct-led[b-zwad6bka40] {
    width: 8px;
    height: 8px;
    border-radius: 2px;
    display: block;
    flex-shrink: 0;
    background: var(--cd-amber);
}

.ct-tile.is-you .ct-led[b-zwad6bka40] { background: var(--cd-orange); }
.ct-tile.is-new .ct-led[b-zwad6bka40] { background: var(--cd-blue); }

.ct-tile-title[b-zwad6bka40] {
    font-size: 14.5px;
    font-weight: 600;
    color: var(--cd-text);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.ct-tile-foot[b-zwad6bka40] {
    display: flex;
    align-items: center;
    gap: 10px;
    font-size: 12px;
    color: var(--cd-muted);
    min-width: 0;
}

.ct-tile-num[b-zwad6bka40] {
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    font-variant-numeric: tabular-nums;
}

.ct-tile-age[b-zwad6bka40] {
    margin-left: auto;
    white-space: nowrap;
    font-variant-numeric: tabular-nums;
}

.ct-mini[b-zwad6bka40] {
    width: 22px;
    height: 22px;
    border-radius: 50%;
    flex-shrink: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 9px;
    font-weight: 700;
    color: #fff;
}

    .ct-mini.is-empty[b-zwad6bka40] {
        background: transparent;
        border: 1px dashed var(--cd-border-strong);
        color: var(--cd-muted);
    }

.ct-all[b-zwad6bka40] {
    justify-content: center;
    gap: 4px;
    background: transparent;
    border: 1px dashed var(--cd-border-strong);
    box-shadow: none;
}

.ct-all-title[b-zwad6bka40] {
    font-size: 14.5px;
    font-weight: 600;
    color: var(--cd-text);
}

.ct-all-sub[b-zwad6bka40] {
    font-size: 12px;
    color: var(--cd-muted);
}

@media (max-width: 1200px) {
    .ct-grid[b-zwad6bka40] {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }

    .ct-empty[b-zwad6bka40] {
        grid-column: 1 / -1;
    }
}

@media (max-width: 576px) {
    .ct-grid[b-zwad6bka40] {
        grid-template-columns: minmax(0, 1fr);
    }
}

@media (prefers-reduced-motion: reduce) {
    .ct-tile[b-zwad6bka40] {
        transition: none;
    }

        .ct-tile:hover[b-zwad6bka40] {
            transform: none;
        }
}
/* /Components/Pages/Index/ClientDashboard.razor.rz.scp.css */
/* =====================================================================
   Pulpit klienta — TOKENY dla całej gałęzi.
   Zmienne żyją na .cd i dziedziczą się w DOM, więc komponenty-dzieci (bohater, kafelki, tempo)
   biorą z nich kolory mimo osobnych plików izolowanych. Motyw ciemny redefiniuje wyłącznie
   tokeny — reguła z html[data-theme] działa w pliku izolowanym, bo atrybut zakresu trafia na
   ostatni selektor (tak samo w AppLauncher.razor.css). Paleta ciemna = theme-dark.css.
   ===================================================================== */
.cd[b-3496dfbgik] {
    --cd-surface: #ffffff;
    --cd-surface-2: #f7f7f8;
    --cd-border: #e5e7eb;
    --cd-border-strong: #d1d5db;
    --cd-text: #111827;
    --cd-text-2: #374151;
    --cd-muted: #6b7280;
    --cd-shadow: 0 10px 25px rgba(15, 23, 42, 0.06);
    --cd-orange: #ff5a0a;
    --cd-orange-text: #c2410c;
    --cd-orange-soft: rgba(255, 90, 10, 0.07);
    --cd-orange-border: rgba(255, 90, 10, 0.38);
    --cd-hero-glow: rgba(255, 90, 10, 0.10);
    --cd-hero-side: #fafaf9;
    --cd-bubble: #f3f4f6;
    --cd-input: #ffffff;
    --cd-line: #d1d5db;
    --cd-ok: #16a34a;
    --cd-ok-soft: rgba(34, 197, 94, 0.12);
    --cd-amber: #f59e0b;
    --cd-blue: #3b82f6;
    --cd-beta-bg: #fef3c7;
    --cd-beta-text: #92400e;
    --cd-beta-border: #fde68a;

    display: flex;
    flex-direction: column;
    gap: 18px;
    min-width: 0;
    padding-bottom: 8px;
}

html[data-theme="dark"] .cd[b-3496dfbgik] {
    --cd-surface: #262624;
    --cd-surface-2: #2f2e2c;
    --cd-border: #3a3936;
    --cd-border-strong: #4a4844;
    --cd-text: #ece9e2;
    --cd-text-2: #d6d1c8;
    --cd-muted: #a6a29a;
    --cd-shadow: 0 8px 25px rgba(0, 0, 0, 0.45);
    --cd-orange-text: #ff8c47;
    --cd-orange-soft: rgba(255, 90, 10, 0.09);
    --cd-orange-border: rgba(255, 90, 10, 0.40);
    --cd-hero-glow: rgba(255, 90, 10, 0.14);
    --cd-hero-side: rgba(0, 0, 0, 0.16);
    --cd-bubble: #2f2e2c;
    --cd-input: #1f1e1c;
    --cd-line: #4a4844;
    --cd-ok: #4ade80;
    --cd-ok-soft: rgba(34, 197, 94, 0.14);
    --cd-blue: #5797ff;
    --cd-beta-bg: #3a2f14;
    --cd-beta-text: #f0d69a;
    --cd-beta-border: #5c4a1c;
}

/* --- powitanie + pigułki stanu --- */
.cd-greet[b-3496dfbgik] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 16px 24px;
    flex-wrap: wrap;
    padding: 2px 2px 0;
}

.cd-greet-text[b-3496dfbgik] {
    min-width: 0;
}

.cd-hello[b-3496dfbgik] {
    display: flex;
    align-items: center;
    gap: 10px;
}

.cd-hello-title[b-3496dfbgik] {
    font-size: 1.4rem;
    font-weight: 700;
    letter-spacing: -0.01em;
    line-height: 1.2;
    color: var(--cd-text);
}

.cd-beta[b-3496dfbgik] {
    font-size: 10.5px;
    font-weight: 600;
    letter-spacing: 0.08em;
    padding: 3px 7px;
    border-radius: 4px;
    background: var(--cd-beta-bg);
    color: var(--cd-beta-text);
    border: 1px solid var(--cd-beta-border);
    cursor: help;
}

.cd-org[b-3496dfbgik] {
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
    margin-top: 4px;
    font-size: 0.85rem;
    color: var(--cd-muted);
}

.cd-pills[b-3496dfbgik] {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
}

.cd-pill[b-3496dfbgik] {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    padding: 6px 12px;
    border-radius: 999px;
    background: var(--cd-surface);
    border: 1px solid var(--cd-border);
    font-size: 13px;
    color: var(--cd-muted);
    white-space: nowrap;
}

    .cd-pill i[b-3496dfbgik] {
        width: 8px;
        height: 8px;
        border-radius: 2px;
        display: block;
    }

    .cd-pill b[b-3496dfbgik] {
        color: var(--cd-text);
        font-weight: 700;
        font-variant-numeric: tabular-nums;
    }

    .cd-pill.is-you[b-3496dfbgik] {
        border-color: var(--cd-orange-border);
        background: var(--cd-orange-soft);
        color: var(--cd-orange-text);
    }

        .cd-pill.is-you i[b-3496dfbgik] { background: var(--cd-orange); }
        .cd-pill.is-you b[b-3496dfbgik] { color: var(--cd-orange-text); }

    .cd-pill.is-us i[b-3496dfbgik] { background: var(--cd-amber); }
    .cd-pill.is-new i[b-3496dfbgik] { background: var(--cd-blue); }

/* --- dolny rząd: aktywność · tempo · opiekun --- */
.cd-bottom[b-3496dfbgik] {
    display: grid;
    grid-template-columns: minmax(0, 1.5fr) minmax(0, 1fr) minmax(0, 1fr);
    gap: 16px;
    align-items: stretch;
    margin-bottom: 16px;
}

    .cd-bottom.no-manager[b-3496dfbgik] {
        grid-template-columns: minmax(0, 1.5fr) minmax(0, 1fr);
    }

    /* Feed na pulpicie pracownika rośnie do 700 px; tu stoi w rzędzie, więc ma wysokość rzędu
       i przewija się w środku, zamiast rozpychać sąsiadów. */
    .cd-bottom[b-3496dfbgik] >  .live-activity-card {
        height: 100%;
        max-height: 460px;
        margin: 0;
        min-width: 0;
    }

@media (max-width: 1200px) {
    .cd-bottom[b-3496dfbgik],
    .cd-bottom.no-manager[b-3496dfbgik] {
        grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
    }

        .cd-bottom[b-3496dfbgik] >  .live-activity-card {
            grid-column: 1 / -1;
        }
}

@media (max-width: 768px) {
    .cd-bottom[b-3496dfbgik],
    .cd-bottom.no-manager[b-3496dfbgik] {
        grid-template-columns: minmax(0, 1fr);
    }

    .cd-greet[b-3496dfbgik] {
        align-items: flex-start;
    }
}
/* /Components/Pages/Index/ClientKpiTiles.razor.rz.scp.css */
/* Wysokość wiersza = wysokość karuzeli obok (150px), żeby górny rząd był równy.
   KpiTile ma height:100%, więc wypełnia kafelek. */
.ckpi-grid[b-q96ry6j9m1] {
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    grid-auto-rows: 150px;
    gap: 12px;
    width: 100%;
    align-content: start;
}

@media (max-width: 1200px) {
    .ckpi-grid[b-q96ry6j9m1] {
        grid-template-columns: repeat(2, minmax(0, 1fr));
        grid-auto-rows: auto;
    }
}

@media (max-width: 576px) {
    .ckpi-grid[b-q96ry6j9m1] {
        grid-template-columns: 1fr;
    }
}
/* /Components/Pages/Index/ClientPacePanel.razor.rz.scp.css */
/* Panel tempa obsługi. Kolory z tokenów --cd-* (ClientDashboard.razor.css). */

.pp[b-wb8q22sssd] {
    height: 100%;
    display: flex;
    flex-direction: column;
    min-width: 0;
    padding: 18px 20px;
    border-radius: 16px;
    background: var(--cd-surface);
    border: 1px solid var(--cd-border);
    box-shadow: var(--cd-shadow);
}

.pp-head[b-wb8q22sssd] {
    box-sizing: border-box;
    height: 32px;
    margin: 0;
    display: flex;
    align-items: center;
    gap: 8px;
    padding-bottom: 12px;
    border-bottom: 1px solid var(--cd-border);
    font-size: 15px;
    font-weight: 700;
    color: var(--cd-text);
}

    .pp-head svg[b-wb8q22sssd] {
        width: 16px;
        height: 16px;
        color: var(--cd-muted);
        flex-shrink: 0;
    }

.pp-value[b-wb8q22sssd] {
    display: flex;
    align-items: baseline;
    flex-wrap: wrap;
    gap: 0 6px;
    margin-top: 18px;
    line-height: 1;
    color: var(--cd-text);
}

.pp-num[b-wb8q22sssd] {
    font-size: 2.4rem;
    font-weight: 800;
    letter-spacing: -0.03em;
    font-variant-numeric: tabular-nums;
}

.pp-value small[b-wb8q22sssd] {
    font-size: 1.15rem;
    font-weight: 700;
    color: var(--cd-muted);
    margin-right: 6px;
}

.pp-sub[b-wb8q22sssd] {
    margin-top: 8px;
    font-size: 12.5px;
    line-height: 1.45;
    color: var(--cd-muted);
}

.pp-up[b-wb8q22sssd] {
    color: var(--cd-ok);
    font-weight: 600;
}

.pp-down[b-wb8q22sssd] {
    color: var(--cd-muted);
    font-weight: 600;
}

.pp-spark[b-wb8q22sssd] {
    display: block;
    width: 100%;
    height: 74px;
    margin-top: 14px;
    overflow: visible;
}

.pp-base[b-wb8q22sssd] {
    stroke: var(--cd-border);
    stroke-width: 1;
}

.pp-area[b-wb8q22sssd] {
    fill: var(--cd-text);
    fill-opacity: 0.08;
}

.pp-line[b-wb8q22sssd] {
    fill: none;
    stroke: var(--cd-text-2);
    stroke-width: 2;
    stroke-linejoin: round;
    stroke-linecap: round;
}

.pp-axis[b-wb8q22sssd] {
    display: flex;
    justify-content: space-between;
    margin-top: 4px;
    font-size: 10.5px;
    letter-spacing: 0.04em;
    color: var(--cd-muted);
}

.pp-empty[b-wb8q22sssd] {
    margin: 18px 0 0;
    font-size: 13.5px;
    line-height: 1.5;
    color: var(--cd-muted);
}

.pp-foot[b-wb8q22sssd] {
    display: grid;
    grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
    gap: 12px;
    margin-top: auto;
    padding-top: 14px;
    border-top: 1px solid var(--cd-border);
}

    .pp-foot b[b-wb8q22sssd] {
        display: block;
        font-size: 17px;
        font-weight: 700;
        color: var(--cd-text);
        font-variant-numeric: tabular-nums;
    }

    .pp-foot span[b-wb8q22sssd] {
        display: block;
        margin-top: 2px;
        font-size: 11.5px;
        line-height: 1.3;
        color: var(--cd-muted);
    }

/* Pusty panel bez wykresu ma stopkę pod wartością, a nie przyklejoną do dołu z dziurą pośrodku. */
.pp-empty + .pp-foot[b-wb8q22sssd] {
    margin-top: 18px;
}
/* /Components/Pages/Index/ClientWaitingHero.razor.rz.scp.css */
/* Bohater pulpitu klienta. Kolory wyłącznie z tokenów --cd-* (ClientDashboard.razor.css),
   więc oba motywy obsługuje jedna reguła. */

.wh[b-exz7cnifyj] {
    display: grid;
    grid-template-columns: minmax(0, 1.72fr) minmax(0, 1fr);
    border: 1px solid var(--cd-orange-border);
    border-radius: 20px;
    overflow: hidden;
    background:
        radial-gradient(1100px 380px at 0% 0%, var(--cd-hero-glow), transparent 62%),
        var(--cd-surface);
    box-shadow: var(--cd-shadow);
}

.wh-main[b-exz7cnifyj] {
    padding: 26px 30px 24px;
    min-width: 0;
}

.wh-kicker[b-exz7cnifyj] {
    display: inline-flex;
    align-items: center;
    gap: 10px;
    font-size: 11.5px;
    font-weight: 700;
    letter-spacing: 0.15em;
    text-transform: uppercase;
    color: var(--cd-orange-text);
}

    .wh-kicker em[b-exz7cnifyj] {
        font-style: normal;
        font-weight: 600;
        letter-spacing: 0.1em;
        color: var(--cd-muted);
    }

.wh-dot[b-exz7cnifyj] {
    position: relative;
    width: 9px;
    height: 9px;
    display: block;
    flex-shrink: 0;
}

    .wh-dot[b-exz7cnifyj]::before,
    .wh-dot[b-exz7cnifyj]::after {
        content: "";
        position: absolute;
        inset: 0;
        border-radius: 50%;
        background: var(--cd-orange);
    }

    .wh-dot[b-exz7cnifyj]::after {
        animation: wh-ping-b-exz7cnifyj 1.8s cubic-bezier(0, 0, 0.2, 1) infinite;
    }

/* --- kontrolka „check engine" (zamiast kropki) --- */
.wh-cel[b-exz7cnifyj] {
    box-sizing: border-box;
    display: inline-flex;
    width: 22px;
    min-width: 22px;
    height: 22px;
    line-height: 0;
    padding: 0;
    margin: 0;
    border: 0;
    border-radius: 5px;
    background: transparent;
    color: var(--cd-orange);
    cursor: pointer;
    flex-shrink: 0;
    animation: wh-lamp-pulse-b-exz7cnifyj 2s ease-in-out infinite;
    transition: transform 0.15s ease;
}

    .wh-cel:hover[b-exz7cnifyj] { transform: scale(1.15); }
    .wh-cel:focus-visible[b-exz7cnifyj] { outline: 2px solid var(--cd-orange); outline-offset: 2px; }

.wh-cel.is-ignite[b-exz7cnifyj] { animation: wh-lamp-ignite-b-exz7cnifyj 1.2s ease-out 1; }

@keyframes wh-lamp-pulse-b-exz7cnifyj {
    0%, 100% { opacity: 0.5; filter: none; }
    50% { opacity: 1; filter: drop-shadow(0 0 5px var(--cd-orange)); }
}

@keyframes wh-lamp-ignite-b-exz7cnifyj {
    0% { color: #e5484d; transform: scale(1.3); filter: drop-shadow(0 0 8px #e5484d); }
    30% { color: #f5a524; filter: drop-shadow(0 0 8px #f5a524); }
    60% { color: #30a46c; filter: drop-shadow(0 0 8px #30a46c); }
    100% { transform: scale(1); filter: none; }
}

@keyframes wh-ping-b-exz7cnifyj {
    0% { transform: scale(1); opacity: 0.7; }
    80%, 100% { transform: scale(2.8); opacity: 0; }
}

.wh-title[b-exz7cnifyj] {
    display: block;
    margin-top: 12px;
    font-size: 1.85rem;
    font-weight: 700;
    letter-spacing: -0.02em;
    line-height: 1.18;
    color: var(--cd-text);
    text-decoration: none;
    overflow-wrap: anywhere;
}

    .wh-title:hover[b-exz7cnifyj] {
        text-decoration: underline;
        text-decoration-thickness: 2px;
        text-underline-offset: 4px;
    }

.wh-meta[b-exz7cnifyj] {
    display: flex;
    flex-wrap: wrap;
    gap: 6px 18px;
    margin-top: 9px;
    font-size: 13px;
    color: var(--cd-muted);
}

    .wh-meta b[b-exz7cnifyj] {
        color: var(--cd-orange-text);
        font-weight: 700;
    }

.wh-num[b-exz7cnifyj] {
    font-variant-numeric: tabular-nums;
}

/* --- pytanie od wsparcia --- */
.wh-msg[b-exz7cnifyj] {
    display: flex;
    gap: 14px;
    margin-top: 20px;
}

.wh-ava[b-exz7cnifyj] {
    width: 40px;
    height: 40px;
    border-radius: 50%;
    flex-shrink: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 13px;
    font-weight: 700;
    color: #fff;
    background: var(--cd-border);
}

.wh-bubble[b-exz7cnifyj] {
    flex: 1 1 auto;
    min-width: 0;
    background: var(--cd-bubble);
    border: 1px solid var(--cd-border);
    border-radius: 4px 16px 16px 16px;
    padding: 12px 16px 14px;
}

.wh-who[b-exz7cnifyj] {
    font-size: 12.5px;
    color: var(--cd-muted);
    margin-bottom: 6px;
}

    .wh-who b[b-exz7cnifyj] {
        color: var(--cd-text);
        font-weight: 600;
    }

.wh-body[b-exz7cnifyj] {
    font-size: 15px;
    line-height: 1.58;
    color: var(--cd-text-2);
    overflow-wrap: anywhere;
}

.wh-noq[b-exz7cnifyj] {
    margin: 18px 0 0;
    font-size: 14px;
    color: var(--cd-muted);
}

.wh-skel[b-exz7cnifyj] {
    display: block;
    height: 11px;
    border-radius: 6px;
    background: var(--cd-border);
    margin: 6px 0 10px;
    width: 92%;
}

    .wh-skel.short[b-exz7cnifyj] {
        width: 55%;
        margin-bottom: 2px;
    }

/* --- odpowiedź --- */
.wh-reply[b-exz7cnifyj] {
    margin-top: 16px;
    background: var(--cd-input);
    border: 1px solid var(--cd-border-strong);
    border-radius: 14px;
    transition: box-shadow 0.15s ease, border-color 0.15s ease;
}

    .wh-reply:focus-within[b-exz7cnifyj] {
        border-color: var(--cd-orange-border);
        box-shadow: 0 0 0 4px var(--cd-orange-soft);
    }

.wh-area[b-exz7cnifyj] {
    display: block;
    width: 100%;
    min-height: 66px;
    resize: vertical;
    border: 0;
    outline: none;
    background: transparent;
    padding: 13px 17px 6px;
    font: inherit;
    font-size: 15px;
    line-height: 1.5;
    color: var(--cd-text);
}

    .wh-area[b-exz7cnifyj]::placeholder {
        color: var(--cd-muted);
    }

.wh-bar[b-exz7cnifyj] {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 6px 10px 10px 12px;
}

.wh-tool[b-exz7cnifyj] {
    width: 32px;
    height: 32px;
    border-radius: 8px;
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--cd-muted);
    flex-shrink: 0;
}

    .wh-tool:hover[b-exz7cnifyj] {
        background: var(--cd-surface-2);
        color: var(--cd-text);
    }

    .wh-tool svg[b-exz7cnifyj] {
        width: 17px;
        height: 17px;
    }

.wh-hint[b-exz7cnifyj] {
    min-width: 0;
    font-size: 12px;
    color: var(--cd-muted);
}

.wh-send[b-exz7cnifyj] {
    margin-left: auto;
    flex-shrink: 0;
    display: inline-flex;
    align-items: center;
    gap: 9px;
    border: 0;
    border-radius: 9px;
    padding: 10px 18px;
    background: var(--cd-orange);
    color: #fff;
    font: inherit;
    font-size: 14px;
    font-weight: 600;
    cursor: pointer;
    box-shadow: 0 6px 18px rgba(255, 90, 10, 0.30);
}

    .wh-send svg[b-exz7cnifyj] {
        width: 15px;
        height: 15px;
    }

    .wh-send:hover:not(:disabled)[b-exz7cnifyj] {
        filter: brightness(1.06);
    }

    .wh-send:disabled[b-exz7cnifyj] {
        opacity: 0.45;
        cursor: default;
        box-shadow: none;
    }

    .wh-send:focus-visible[b-exz7cnifyj],
    .wh-next-go:focus-visible[b-exz7cnifyj],
    .wh-tool:focus-visible[b-exz7cnifyj],
    .wh-title:focus-visible[b-exz7cnifyj] {
        outline: 2px solid var(--cd-orange);
        outline-offset: 2px;
    }

.wh-open[b-exz7cnifyj] {
    margin-top: 12px;
    font-size: 13px;
    color: var(--cd-muted);
}

    .wh-open a[b-exz7cnifyj] {
        color: var(--cd-text);
        font-weight: 500;
        text-decoration: none;
    }

        .wh-open a:hover[b-exz7cnifyj] {
            text-decoration: underline;
        }

/* --- historia sprawy --- */
.wh-side[b-exz7cnifyj] {
    padding: 24px 24px 20px;
    border-left: 1px solid var(--cd-border);
    background: var(--cd-hero-side);
    display: flex;
    flex-direction: column;
    min-width: 0;
}

.wh-side-label[b-exz7cnifyj] {
    font-size: 11px;
    font-weight: 700;
    letter-spacing: 0.14em;
    text-transform: uppercase;
    color: var(--cd-muted);
    margin-bottom: 16px;
}

.wh-steps[b-exz7cnifyj] {
    position: relative;
    list-style: none;
    margin: 0;
    padding: 0 0 0 22px;
    display: flex;
    flex-direction: column;
    gap: 14px;
}

    .wh-steps[b-exz7cnifyj]::before {
        content: "";
        position: absolute;
        left: 5px;
        top: 8px;
        bottom: 26px;
        width: 2px;
        border-radius: 1px;
        background: var(--cd-line);
    }

.wh-step[b-exz7cnifyj] {
    position: relative;
    display: flex;
    flex-direction: column;
    gap: 2px;
    min-width: 0;
}

    .wh-step[b-exz7cnifyj]::before {
        content: "";
        position: absolute;
        left: -22px;
        top: 4px;
        width: 12px;
        height: 12px;
        border-radius: 50%;
        background: var(--cd-surface);
        border: 2px solid var(--cd-line);
        box-sizing: border-box;
    }

    .wh-step b[b-exz7cnifyj] {
        font-size: 13.5px;
        font-weight: 600;
        color: var(--cd-text);
    }

    .wh-step span[b-exz7cnifyj] {
        font-size: 12px;
        color: var(--cd-muted);
        overflow-wrap: anywhere;
    }

    .wh-step.is-reply[b-exz7cnifyj]::before {
        border-color: var(--cd-blue);
    }

    .wh-step.is-dim b[b-exz7cnifyj] {
        font-weight: 500;
        color: var(--cd-muted);
    }

    .wh-step.is-now[b-exz7cnifyj]::before {
        border-color: var(--cd-orange);
        background: var(--cd-orange);
        box-shadow: 0 0 0 4px var(--cd-orange-soft);
    }

    .wh-step.is-now b[b-exz7cnifyj] {
        color: var(--cd-orange-text);
    }

.wh-next[b-exz7cnifyj] {
    margin-top: auto;
    padding-top: 16px;
    border-top: 1px solid var(--cd-border);
    display: flex;
    align-items: center;
    gap: 12px;
}

.wh-next-txt[b-exz7cnifyj] {
    flex: 1 1 auto;
    min-width: 0;
}

    .wh-next-txt span[b-exz7cnifyj] {
        display: block;
        font-size: 11px;
        font-weight: 700;
        letter-spacing: 0.12em;
        text-transform: uppercase;
        color: var(--cd-muted);
    }

    .wh-next-txt b[b-exz7cnifyj] {
        display: block;
        margin-top: 3px;
        font-size: 14px;
        font-weight: 600;
        color: var(--cd-text);
        white-space: nowrap;
        overflow: hidden;
        text-overflow: ellipsis;
    }

.wh-next-go[b-exz7cnifyj] {
    flex-shrink: 0;
    border: 1px solid var(--cd-orange-border);
    background: transparent;
    color: var(--cd-orange-text);
    border-radius: 9px;
    padding: 8px 13px;
    font: inherit;
    font-size: 13px;
    font-weight: 600;
    cursor: pointer;
}

    .wh-next-go:hover[b-exz7cnifyj] {
        background: var(--cd-orange-soft);
    }

/* --- stan spokojny --- */
.wh-calm[b-exz7cnifyj] {
    display: flex;
    align-items: center;
    gap: 18px;
    padding: 20px 26px;
    border-radius: 20px;
    background:
        radial-gradient(900px 260px at 0% 0%, var(--cd-ok-soft), transparent 60%),
        var(--cd-surface);
    border: 1px solid var(--cd-border);
    box-shadow: var(--cd-shadow);
}

.wh-calm-ico[b-exz7cnifyj] {
    width: 48px;
    height: 48px;
    border-radius: 14px;
    flex-shrink: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    background: var(--cd-ok-soft);
    color: var(--cd-ok);
}

    .wh-calm-ico svg[b-exz7cnifyj] {
        width: 24px;
        height: 24px;
    }

.wh-calm-text[b-exz7cnifyj] {
    min-width: 0;
}

    .wh-calm-text b[b-exz7cnifyj] {
        display: block;
        font-size: 1.2rem;
        font-weight: 700;
        letter-spacing: -0.01em;
        color: var(--cd-text);
    }

    .wh-calm-text span[b-exz7cnifyj] {
        display: block;
        margin-top: 4px;
        font-size: 14px;
        color: var(--cd-muted);
    }

@media (max-width: 1100px) {
    .wh[b-exz7cnifyj] {
        grid-template-columns: minmax(0, 1fr);
    }

    .wh-side[b-exz7cnifyj] {
        border-left: 0;
        border-top: 1px solid var(--cd-border);
    }
}

@media (max-width: 576px) {
    .wh-main[b-exz7cnifyj] {
        padding: 20px 18px;
    }

    .wh-title[b-exz7cnifyj] {
        font-size: 1.45rem;
    }

    .wh-hint[b-exz7cnifyj] {
        display: none;
    }
}

@media (prefers-reduced-motion: reduce) {
    .wh-dot[b-exz7cnifyj]::after {
        animation: none;
        opacity: 0;
    }

    .wh-cel[b-exz7cnifyj],
    .wh-cel.is-ignite[b-exz7cnifyj] {
        animation: none;
        opacity: 1;
    }
}
/* /Components/Pages/Index/ClientWelcome.razor.rz.scp.css */
.cw-header[b-8tdmefleg5] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 16px;
    flex-wrap: wrap;
    padding: 4px 2px 4px;
    /* Tyle samo, ile dzieli rząd kafelków od rzędu ze zgłoszeniami (margines karuzeli), żeby
       powitanie nie kleiło się do kafelków. */
    margin-bottom: 16px;
}

.cw-text[b-8tdmefleg5] {
    min-width: 0;
}

.cw-title[b-8tdmefleg5] {
    font-size: 1.35rem;
    font-weight: 700;
    color: #0f172a;
    line-height: 1.2;
}

.cw-sub[b-8tdmefleg5] {
    margin-top: 4px;
    font-size: 0.85rem;
    color: #9ca3af;
}

/* Kolor bierze się z motywu (DxButton RenderStyle="Primary") — nie nadpisujemy tła. */
.cw-btn[b-8tdmefleg5] {
    white-space: nowrap;
    flex-shrink: 0;
}

@media (max-width: 576px) {
    .cw-header[b-8tdmefleg5] {
        align-items: flex-start;
    }

    .cw-btn[b-8tdmefleg5] {
        width: 100%;
    }
}
/* /Components/Pages/Index/EngineLamp.razor.rz.scp.css */
.engine-lamp[b-2cieuvsh6t] {
    display: block;
    width: 100%;
    height: 100%;
    flex: none;
    overflow: visible;
}
/* /Components/Pages/Index/Home.razor.rz.scp.css */
.dashboard-rows[b-me6ovrho46] {
    display: flex;
    flex-direction: column;
    padding-bottom: 24px;
}

/* =====================================================================
   Pulpit pracownika — TOKENY. Dziedziczą się w DOM, więc komponenty-dzieci
   (StaffUrgentPanel, StaffQueueStrip, StaffTodayPanel) biorą z nich kolory.
   Zasada kolorów: pomarańcz = czeka na CIEBIE, czerwień = czas minął,
   bursztyn = termin dziś, szarość = stoi.
   ===================================================================== */
.sd[b-me6ovrho46] {
    --sd-surface: #ffffff;
    --sd-surface-2: #f5f6f7;
    --sd-border: #e5e7eb;
    --sd-border-strong: #d1d5db;
    --sd-text: #111827;
    --sd-text-2: #374151;
    --sd-muted: #6b7280;
    --sd-track: #e5e7eb;
    --sd-bubble: #f3f4f6;
    --sd-shadow: 0 12px 30px rgba(15, 23, 42, 0.07);
    --sd-shadow-soft: 0 10px 25px rgba(15, 23, 42, 0.05);
    --sd-hero-glow: rgba(255, 90, 10, 0.09);
    --sd-red-glow: rgba(239, 68, 68, 0.09);
    --sd-orange: #ff5a0a;
    --sd-orange-text: #c2410c;
    --sd-orange-soft: rgba(255, 90, 10, 0.07);
    --sd-orange-border: rgba(255, 90, 10, 0.38);
    --sd-red: #ef4444;
    --sd-red-text: #b91c1c;
    --sd-red-soft: rgba(239, 68, 68, 0.07);
    --sd-red-border: rgba(239, 68, 68, 0.38);
    --sd-amber: #f59e0b;
    --sd-amber-text: #b45309;
    --sd-amber-soft: rgba(245, 158, 11, 0.09);
    --sd-amber-border: rgba(245, 158, 11, 0.4);
    --sd-blue: #3b82f6;
    --sd-ok: #16a34a;
    --sd-ok-soft: rgba(34, 197, 94, 0.12);

    gap: 16px;
    min-width: 0;
}

html[data-theme="dark"] .sd[b-me6ovrho46] {
    --sd-surface: #262624;
    --sd-surface-2: #2f2e2c;
    --sd-border: #3a3936;
    --sd-border-strong: #4a4844;
    --sd-text: #ece9e2;
    --sd-text-2: #d6d1c8;
    --sd-muted: #a6a29a;
    --sd-track: #3a3936;
    --sd-bubble: #2f2e2c;
    --sd-shadow: 0 16px 40px rgba(0, 0, 0, 0.45);
    --sd-shadow-soft: 0 8px 25px rgba(0, 0, 0, 0.35);
    --sd-hero-glow: rgba(255, 90, 10, 0.14);
    --sd-red-glow: rgba(239, 68, 68, 0.14);
    --sd-orange-text: #ff8c47;
    --sd-orange-soft: rgba(255, 90, 10, 0.09);
    --sd-orange-border: rgba(255, 90, 10, 0.4);
    --sd-red-text: #f87171;
    --sd-red-soft: rgba(239, 68, 68, 0.1);
    --sd-red-border: rgba(239, 68, 68, 0.4);
    --sd-amber-text: #fbbf24;
    --sd-amber-soft: rgba(245, 158, 11, 0.12);
    --sd-amber-border: rgba(245, 158, 11, 0.35);
    --sd-blue: #5797ff;
    --sd-ok: #4ade80;
    --sd-ok-soft: rgba(34, 197, 94, 0.14);
}

.sd-greet[b-me6ovrho46] {
    display: flex;
    align-items: center;
    gap: 16px;
    padding: 2px 2px 0;
}

.sd-greet-main[b-me6ovrho46] {
    display: flex;
    flex-direction: column;
    gap: 4px;
    min-width: 0;
}

.sd-greet-meta[b-me6ovrho46] {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 8px 12px;
}

.sd-greet-actions[b-me6ovrho46] {
    margin-left: auto;
    display: flex;
    align-items: center;
    gap: 12px;
}

.sd-hello[b-me6ovrho46] {
    font-size: 1.4rem;
    font-weight: 700;
    letter-spacing: -0.01em;
    color: var(--sd-text);
}

.sd-date[b-me6ovrho46] {
    font-size: 13.5px;
    color: var(--sd-muted);
}

    .sd-date[b-me6ovrho46]::first-letter {
        text-transform: uppercase;
    }

/* Przełącznik „Moje / Wszyscy" — prawy górny róg pulpitu. */
.sd-greet-right[b-me6ovrho46] {
    display: flex;
    align-items: center;
}

.sd-pill[b-me6ovrho46] {
    align-self: center;
    padding: 3px 10px;
    border-radius: 999px;
    font-size: 12.5px;
    font-weight: 700;
    background: var(--sd-orange-soft);
    color: var(--sd-orange-text);
    border: 1px solid var(--sd-orange-border);
}

/* Pulpit pracownika: prawa kolumna mieści trzy panele (Dziś, notatki, aktywność), więc wiersz
   z tablicą jest wyższy niż u klienta. Aktywność ma minimum — jej lista trzyma min-height 240px
   (site.css) i przy ściśniętej karcie wypływała poza ramkę. */
.sd .dashboard-grid-kanban[b-me6ovrho46],
.sd .dashboard-grid-activity[b-me6ovrho46] {
    max-height: 840px;
}

    .sd .dashboard-grid-kanban[b-me6ovrho46] >  .kanban-wrapper-card,
    .sd .dashboard-grid-kanban[b-me6ovrho46] >  .mtl-card,
    .sd .dashboard-grid-activity[b-me6ovrho46] >  .live-activity-card {
        max-height: 840px;
    }

/* „Dziś" ma wysokość treści, jak notatki. */
.dashboard-grid-side[b-me6ovrho46] >  .st {
    flex: 0 0 auto;
}

.dashboard-grid[b-me6ovrho46] {
    display: grid;
    align-items: stretch;
}

/* Wiersz 1 klienta: kafelki KPI i karuzela. */
.dashboard-grid-top[b-me6ovrho46] {
    grid-template-columns: minmax(0, 10fr) minmax(0, 3fr);
    align-items: start;
}

/* Wiersz 2: Kanban — oryginalne proporcje */
.dashboard-grid-main[b-me6ovrho46] {
    grid-template-columns: minmax(0, 8fr) minmax(0, 4fr);
    height: 840px;
    max-height: 840px;
}

.dashboard-grid-timecell[b-me6ovrho46] {
    display: flex;
    min-width: 0;
}

.dashboard-grid-kanban[b-me6ovrho46],
.dashboard-grid-activity[b-me6ovrho46] {
    display: flex;
    min-width: 0;
    height: 100%;
    max-height: 700px;
}

    .dashboard-grid-kanban[b-me6ovrho46] >  .kanban-wrapper-card,
    .dashboard-grid-kanban[b-me6ovrho46] >  .mtl-card,
    .dashboard-grid-activity[b-me6ovrho46] >  .team-notes-card {
        flex: 1 1 auto;
        width: 100%;
        height: 100%;
        max-height: 700px;
        margin-bottom: 0;
        display: flex;
        flex-direction: column;
    }

    .dashboard-grid-activity[b-me6ovrho46] >  .live-activity-card {
        flex: 1 1 auto;
        width: 100%;
        height: auto;
        max-height: none;
        margin: 0;
        display: flex;
        flex-direction: column;
    }

/* Prawa kolumna pulpitu mieści dwa panele jeden pod drugim: aktywność i tablicę zespołu. */
.dashboard-grid-side[b-me6ovrho46] {
    flex-direction: column;
    gap: 12px;
}

    /* Aktywność bierze resztę wysokości, notatki mają sufit — inaczej przy dłuższej
       liście notatek feed skurczyłby się do zera. */
    .dashboard-grid-side[b-me6ovrho46] >  .live-activity-card {
        flex: 1 1 auto;
        min-height: 0;
    }

    .dashboard-grid-activity[b-me6ovrho46]  .live-activity-header {
        justify-content: flex-start !important;
        gap: 6px;
        font-weight: 500;
    }

.dashboard-team-board[b-me6ovrho46] {
    height: 300px;
    min-height: 300px;
    display: flex;
}

    .dashboard-team-board[b-me6ovrho46] >  .team-notes-card {
        width: 100%;
        height: 100%;
        padding-bottom: 16px;
    }

.dashboard-account-manager[b-me6ovrho46] {
    margin-top: 16px;
}

@media (max-width: 1200px) {
    .dashboard-grid-top[b-me6ovrho46],
    .dashboard-grid-main[b-me6ovrho46] {
        grid-template-columns: minmax(0, 1fr);
        height: auto;
        max-height: none;
    }
}
/* /Components/Pages/Index/KanbanBoard.razor.rz.scp.css */
.kanban-wrapper-card[b-ezr4q9saw9] {
    background: #ffffff;
    border-radius: 1rem;
    /* Oddech od krawędzi karty — jak w panelu "Najnowsza aktywność" (16px 18px). */
    padding: 16px 18px 8px;
    border: 1px solid #e5e7eb;
    box-shadow: 0 10px 30px rgba(15, 23, 42, 0.06);
    margin-bottom: 20px;
    z-index: 100 !important;
    position: relative !important;
    display: flex;
    flex-direction: column;
    height: 100%;
}

.kanban-wrapper-title[b-ezr4q9saw9] {
    /* Ta sama grubość co tytuł listy zgłoszeń (.mtl-title) — to jeden i ten sam kafel
       w dwóch widokach, więc nagłówek nie może zmieniać wagi przy przełączeniu. */
    font-weight: 500;
    font-size: 16px;
    color: #111827;
    gap: 6px;
}

.kanban-wrapper-header[b-ezr4q9saw9] {
    /* Bez bocznych paddingów — odstęp od krawędzi daje już karta, a kreska ma iść równo.
       Pion dokładnie jak w nagłówku listy zgłoszeń (.mtl-header, padding-bottom: 12px):
       to jeden kafel w dwóch widokach, więc po przełączeniu ani tytuł, ani kreska nie mogą
       drgnąć. Wcześniejsze 8px równało kreskę z panelem „Najnowsza aktywność", ale rozjeżdżało
       ją z listą — a różnicę widać dopiero przy przełączaniu, więc to lista jest wzorcem. */
    padding: 0 0 12px;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    /* Tytuł, filtr statusów i przełączniki — przy wąskim kaflu wolno im zejść do drugiego
       wiersza zamiast rozpychać nagłówek (tak samo jak w nagłówku listy zgłoszeń). */
    flex-wrap: wrap;
    color: #111827;
    /* Jawny kolor (jak w panelu "Najnowsza aktywność") — przy var(--bs-border-color)
       niezdefiniowana zmienna unieważnia cały skrót border-bottom i kreska znika. */
    border-bottom: 1px solid #e5e7eb;
    margin-bottom: 10px;
}

/* Prawy róg nagłówka to teraz sam przełącznik zakresu (moje/wszyscy) — widok przeniósł się
   do `.kanban-wrapper-title`, więc wspólne pudełko `.kanban-header-actions` nie ma już czego
   grupować, a `TicketsScopeToggle` niesie własne `flex-shrink: 0`. */

.kanban-wrapper-body[b-ezr4q9saw9] {
    overflow-x: auto;
    overflow-y: hidden;
    padding-bottom: 8px;
    flex: 1 1 auto;
    min-height: 0;
}

.kanban-board[b-ezr4q9saw9] {
    display: flex;
    gap: 14px;
    z-index: 100 !important;
    position: relative !important;
    border-radius: 1rem;
    width: 100%;
    min-height: 500px;
    height: 100%;
    align-items: stretch;
}

/* Kolumna: bardzo delikatne tło, żeby karty (białe) czytały się jako osobna warstwa,
   a cała tablica nie wyglądała jak karta w karcie. */
/* Geometria całej tablicy jest „kwadratowa" — małe promienie (8px kolumna, 6px karta,
   4px pastylki), zamiast zaokrągleń pod pełny okrąg. */
.kanban-column[b-ezr4q9saw9] {
    background: #f7f8fa;
    border-radius: 8px;
    padding: 10px 8px 8px;
    /* +10% względem 240/280 — statusów i zgłoszeń jest na tyle mało, że kolumny mogą oddychać. */
    min-width: 264px;
    max-width: 308px;
    flex: 1 1 0;
    display: flex;
    flex-direction: column;
    height: 100%;
    min-height: 0;
}

/* Nagłówek kolumny bez kreski i bez własnego tła — dzieli je z kolumną, jak w nowoczesnych
   tablicach (Linear/Plane): kropka statusu, nazwa, licznik w pastylce. */
.kanban-column-header[b-ezr4q9saw9] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 8px;
    padding: 0 6px 2px;
}

.kanban-column-title[b-ezr4q9saw9] {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    min-width: 0;
}

.kanban-status-dot[b-ezr4q9saw9] {
    width: 8px;
    height: 8px;
    border-radius: 2px;
    display: inline-block;
    flex-shrink: 0;
}

.kanban-status-title[b-ezr4q9saw9] {
    display: inline-block;
    font-weight: 600;
    color: #111827;
    font-size: 14px;
    letter-spacing: -0.01em;
    max-width: 190px;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

/* Licznik przejmuje kolor statusu (tło = ten sam kolor z alfą, liczone w komponencie),
   więc nagłówek kolumny czyta się jako jedna całość. */
.kanban-column-count[b-ezr4q9saw9] {
    font-size: 12px;
    font-weight: 600;
    line-height: 1;
    padding: 4px 8px;
    border-radius: 8px;
    flex-shrink: 0;
    font-variant-numeric: tabular-nums;
}

.kanban-column-body[b-ezr4q9saw9] {
    margin-top: 10px;
    display: flex;
    flex-direction: column;
    gap: 10px;
    overflow-y: auto;
    padding: 2px 4px 4px;
    scrollbar-width: thin;
    scrollbar-color: #d1d5db transparent;
}

    .kanban-column-body[b-ezr4q9saw9]::-webkit-scrollbar {
        width: 6px;
    }

    .kanban-column-body[b-ezr4q9saw9]::-webkit-scrollbar-thumb {
        background: #d1d5db;
        border-radius: 2px;
    }

.kanban-card[b-ezr4q9saw9] {
    background: #ffffff;
    border-radius: 12px;
    /* Lewy padding równy prawemu — nie ma już paska priorytetu, pod który trzymaliśmy miejsce. */
    padding: 11px 12px;
    border: 1px solid #e8eaed;
    cursor: pointer;
    transition: transform 0.12s ease, box-shadow 0.12s ease, border-color 0.12s ease;
    position: relative;
    overflow: hidden;
    flex: 0 0 auto;
    white-space: normal;
    box-sizing: border-box;
    box-shadow: 0 1px 2px rgba(15, 23, 42, 0.06);
}

    .kanban-card:hover[b-ezr4q9saw9] {
        transform: translateY(-1px);
        border-color: #d8dbe0;
        box-shadow: 0 10px 24px rgba(15, 23, 42, 0.12);
    }

    /* Pilność (pulpit pracownika). Ciemny motyw: theme-dark.css, bo tam ramka ma !important. */
    .kanban-card.is-late[b-ezr4q9saw9],
    .kanban-card.is-late:hover[b-ezr4q9saw9] {
        border-color: rgba(239, 68, 68, 0.55);
    }

    .kanban-card.is-hot[b-ezr4q9saw9],
    .kanban-card.is-hot:hover[b-ezr4q9saw9] {
        border-color: rgba(255, 90, 10, 0.5);
    }

.kanban-urgency[b-ezr4q9saw9] {
    display: inline-flex;
    align-self: flex-start;
    margin: 2px 0 8px;
    padding: 2px 7px;
    border-radius: 6px;
    font-size: 11px;
    font-weight: 700;
    white-space: nowrap;
    font-variant-numeric: tabular-nums;
    background: #f3f4f6;
    color: #6b7280;
    border: 1px solid #e5e7eb;
}

    .kanban-urgency.is-late[b-ezr4q9saw9] {
        background: rgba(239, 68, 68, 0.1);
        color: #b91c1c;
        border-color: rgba(239, 68, 68, 0.35);
    }

    .kanban-urgency.is-soon[b-ezr4q9saw9],
    .kanban-urgency.is-waiting[b-ezr4q9saw9] {
        background: rgba(255, 90, 10, 0.08);
        color: #c2410c;
        border-color: rgba(255, 90, 10, 0.35);
    }

html[data-theme="dark"] .kanban-urgency[b-ezr4q9saw9] {
    background: #2f2e2c;
    color: #a6a29a;
    border-color: #3a3936;
}

    html[data-theme="dark"] .kanban-urgency.is-late[b-ezr4q9saw9] {
        background: rgba(239, 68, 68, 0.14);
        color: #f87171;
        border-color: rgba(239, 68, 68, 0.35);
    }

    html[data-theme="dark"] .kanban-urgency.is-soon[b-ezr4q9saw9],
    html[data-theme="dark"] .kanban-urgency.is-waiting[b-ezr4q9saw9] {
        background: rgba(255, 90, 10, 0.12);
        color: #ff8c47;
        border-color: rgba(255, 90, 10, 0.35);
    }

.kanban-card-top[b-ezr4q9saw9] {
    display: flex;
    align-items: flex-start;
    gap: 6px;
    min-width: 0;
}

/* Strzałka priorytetu — maska na czarnym SVG, kolor wstrzykiwany inline z komponentu.
   margin-top wyrównuje ją do pierwszej linii tagów (wiersz jest align-items: flex-start,
   żeby przy zawinięciu drugiego tagu strzałka została u góry). */
.kanban-prio[b-ezr4q9saw9] {
    width: 13px;
    height: 13px;
    display: block;
    flex-shrink: 0;
    margin-top: 3px;
}

.kanban-prio-critical[b-ezr4q9saw9] {
    -webkit-mask: url('/images/bootstrap-icons/chevron-double-up.svg') no-repeat center / contain;
    mask: url('/images/bootstrap-icons/chevron-double-up.svg') no-repeat center / contain;
}

.kanban-prio-high[b-ezr4q9saw9] {
    -webkit-mask: url('/images/bootstrap-icons/chevron-up.svg') no-repeat center / contain;
    mask: url('/images/bootstrap-icons/chevron-up.svg') no-repeat center / contain;
}

.kanban-prio-normal[b-ezr4q9saw9] {
    -webkit-mask: url('/images/bootstrap-icons/dash.svg') no-repeat center / contain;
    mask: url('/images/bootstrap-icons/dash.svg') no-repeat center / contain;
}

.kanban-prio-low[b-ezr4q9saw9] {
    -webkit-mask: url('/images/bootstrap-icons/chevron-down.svg') no-repeat center / contain;
    mask: url('/images/bootstrap-icons/chevron-down.svg') no-repeat center / contain;
}

/* Tagi (produkt, grupa) — jasna pastylka z kolorową kropką, jak w tablicach zadań.
   Kolor niesie kropka, nie całe tło, więc kilka tagów obok siebie nie krzyczy.
   flex-wrap: nazwy grup bywają długie („Unique Logistics") — lepiej, żeby drugi tag
   zeskoczył do nowej linii, niż żeby oba zostały wielokropkami. */
.kanban-tags[b-ezr4q9saw9] {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 4px;
    min-width: 0;
    flex: 1 1 auto;
}

.kanban-tag[b-ezr4q9saw9] {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    font-size: 11px;
    font-weight: 500;
    line-height: 1;
    padding: 3px 7px;
    border-radius: 4px;
    border: 1px solid #e5e7eb;
    background: #fbfbfc;
    color: #4b5563;
    min-width: 0;
}

/* min-width: 0 jest tu konieczne — bez niego element flex nie schodzi poniżej szerokości
   tekstu i długa nazwa grupy rozpycha wiersz zamiast dostać wielokropek. */
.kanban-tag-text[b-ezr4q9saw9] {
    max-width: 132px;
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.kanban-tag-dot[b-ezr4q9saw9] {
    width: 7px;
    height: 7px;
    border-radius: 2px;
    flex-shrink: 0;
}

/* Produkt trzyma kolor akcentu aplikacji — to on ma być pierwszym punktem zaczepienia. */
.kanban-tag-dot-product[b-ezr4q9saw9] {
    background: var(--main-color);
}

/* === Wiersz projektu (nad priorytetem i tagami) ===
   Osobny wiersz na samej górze karty: projekt mówi, do czego sprawa należy, więc stoi wyżej
   niż produkt czy grupa. W rzędzie tagów zawijał się pod nie i lądował w drugiej linii.
   Wiersz istnieje tylko przy zgłoszeniach podpiętych pod projekt (warunek w KanbanBoard.razor),
   więc nie rezerwuje wysokości na zapas. */
.kanban-card-project[b-ezr4q9saw9] {
    display: flex;
    min-width: 0;
    margin-bottom: 6px;
}

/* Pastylka projektu (komponent ProjectTag) dostaje kształt pozostałych tagów — karta ma być
   jednorodna, inaczej projekt wyglądałby jak wklejony z innego ekranu. ::deep, bo reguła
   celuje w cudzy komponent, a bez niego dostałaby atrybut zakresu tego pliku i nie trafiła
   w nic. Kolor niesie sama ikonka, więc pastylka zostaje szara jak reszta. */
.kanban-card-project[b-ezr4q9saw9]  .project-tag.kanban-project {
    padding: 3px 7px;
    border-radius: 4px;
    border: 1px solid #e5e7eb;
    background: #fbfbfc;
    font-weight: 500;
    line-height: 1;
    color: #4b5563;
    /* Własny wiersz = cała szerokość karty do dyspozycji; nadmiar i tak ucina wielokropek. */
    max-width: 100%;
}

.kanban-card-project[b-ezr4q9saw9]  .project-tag.kanban-project:hover {
    color: #111827;
}

.kanban-card-title[b-ezr4q9saw9] {
    /* Odstęp od tagów daje już wiersz z numerem, dlatego u góry tylko 3px. */
    margin: 3px 0 10px;
    font-size: 14px;
    font-weight: 600;
    line-height: 1.35;
    color: #111827;
    letter-spacing: -0.01em;
    white-space: normal;
    overflow: hidden;
    text-overflow: ellipsis;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    /* Tytuł bez spacji nie miał gdzie się złamać i zajmował jedną uciętą linijkę
       zamiast dozwolonych dwóch. */
    overflow-wrap: anywhere;
    word-break: break-word;
}

/* Gdy zaraz pod tytułem stoi etykieta czasu reakcji, nie zostawiamy nad nią
   standardowych 10 px. Odstęp jest potrzebny pod etykietą, przed stopką karty. */
.kanban-card-title:has(+ .kanban-urgency)[b-ezr4q9saw9] {
    margin-bottom: 2px;
}

/* Pasek postępu checklisty — pokazywany tylko na kartach, które mają zadania. */
.kanban-progress[b-ezr4q9saw9] {
    display: flex;
    align-items: center;
    gap: 8px;
    margin: 0 0 10px;
}

.kanban-progress-track[b-ezr4q9saw9] {
    flex: 1 1 auto;
    min-width: 0;
    height: 5px;
    border-radius: 2px;
    background: #eceef1;
    overflow: hidden;
}

.kanban-progress-fill[b-ezr4q9saw9] {
    display: block;
    height: 100%;
    border-radius: 2px;
    background: var(--main-color);
}

    /* Wszystko odhaczone — zielony, żeby „gotowe" dało się zobaczyć bez czytania liczb. */
    .kanban-progress-fill.is-complete[b-ezr4q9saw9] {
        background: #22c55e;
    }

.kanban-progress-label[b-ezr4q9saw9] {
    font-size: 11px;
    font-weight: 600;
    color: #6b7280;
    font-variant-numeric: tabular-nums;
    flex-shrink: 0;
}

.kanban-card-foot[b-ezr4q9saw9] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 8px;
    min-width: 0;
}

/* Numer zgłoszenia — osobny wiersz między tagami a tytułem. Nie skraca się: to jedyny
   identyfikator, po którym ktoś szuka sprawy. */
.kanban-card-id[b-ezr4q9saw9] {
    display: block;
    margin-top: 8px;
    font-size: 11px;
    font-weight: 600;
    color: #9ca3af;
    letter-spacing: 0.03em;
    font-variant-numeric: tabular-nums;
}

.kanban-foot-right[b-ezr4q9saw9] {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    min-width: 0;
}

/* Stos kulek: każda kolejna wchodzi kilka px na poprzednią, a obwódka w kolorze karty
   robi między nimi widoczną szczelinę. Kolejne rodzeństwo rysuje się nad poprzednim samo
   (kolejność w drzewie), więc nachodzenie czyta się jak talia kart — bez z-indexów. */
.kanban-avatars[b-ezr4q9saw9] {
    display: inline-flex;
    align-items: center;
    min-width: 0;
}

    .kanban-avatars .kanban-avatar + .kanban-avatar[b-ezr4q9saw9] {
        margin-left: -6px;
    }

/* Awatar zamiast nazwiska — pełna nazwa (zgłaszający/prowadzący, dopisani do rozmowy) jest
   w tooltipie. Wersja z podpisem zabierała ~120px, czyli dokładnie tyle, ile brakowało tagom.
   Kółko, nie kwadrat: to jedyny okrągły element karty, bo oznacza osobę. */
.kanban-avatar[b-ezr4q9saw9] {
    width: 22px;
    height: 22px;
    border-radius: 50%;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    font-size: 10px;
    font-weight: 700;
    line-height: 1;
    color: #fff;
    letter-spacing: 0.02em;
    border: 2px solid #ffffff;
    box-sizing: content-box;
}

/* „+N" — reszta uczestników. Neutralne tło, bo nie reprezentuje jednej osoby. */
.kanban-avatar-more[b-ezr4q9saw9] {
    background: #9ca3af;
    font-size: 9px;
}

/* Licznik wiadomości — przed datą, tylko gdy rozmowa się zaczęła. */
.kanban-msgs[b-ezr4q9saw9] {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    font-size: 11px;
    font-weight: 500;
    color: #6b7280;
    font-variant-numeric: tabular-nums;
    flex-shrink: 0;
}

.kanban-msgs-icon[b-ezr4q9saw9] {
    width: 11px;
    height: 11px;
    display: block;
    flex-shrink: 0;
    background-color: currentColor;
    -webkit-mask: url('/images/bootstrap-icons/chat.svg') no-repeat center / contain;
    mask: url('/images/bootstrap-icons/chat.svg') no-repeat center / contain;
}

.kanban-date[b-ezr4q9saw9] {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    font-size: 11px;
    font-weight: 500;
    color: #6b7280;
    font-variant-numeric: tabular-nums;
    flex-shrink: 0;
}

.kanban-date-icon[b-ezr4q9saw9] {
    width: 11px;
    height: 11px;
    display: block;
    flex-shrink: 0;
    background-color: currentColor;
    -webkit-mask: url('/images/bootstrap-icons/calendar-event.svg') no-repeat center / contain;
    mask: url('/images/bootstrap-icons/calendar-event.svg') no-repeat center / contain;
}

/* Przekroczony termin — jedyny czerwony element na karcie, więc widać go od razu. */
.kanban-date.is-overdue[b-ezr4q9saw9] {
    color: #dc2626;
    font-weight: 600;
}

.kanban-empty[b-ezr4q9saw9] {
    min-height: 400px;
    position: absolute;
    inset: 0;
    display: flex;
    justify-content: center;
    align-items: center;
    gap: .5rem;
    padding: 1.5rem;
    color: #6b7280;
    text-align: center;
}

@media (max-width: 1200px) {
    .kanban-column[b-ezr4q9saw9] {
        min-width: 264px;
        max-width: 264px;
    }
}
/* /Components/Pages/Index/LiveActivityPanel.razor.rz.scp.css */
/* Panel "Najnowsza aktywność" — feed zdarzeń zgłoszeń.
   Klasy .live-activity-card/-header/-list zostają (Home.razor.css podpina się pod nie przez ::deep);
   style poniżej (scoped) nadpisują globalne z site.css. */

.live-activity-card[b-7ma0cdby68] {
    padding: 16px 18px;
}

/* Kreska oddzielająca nagłówek od listy. Jawny kolor — globalne
   `border-bottom: 1px solid var(--bs-border-color)` z site.css potrafi zniknąć,
   gdy zmienna nie jest zdefiniowana (cały skrót staje się nieprawidłowy). */
.live-activity-header[b-7ma0cdby68] {
    font-size: 1rem;
    font-weight: 600;
    color: #111827;
    padding-bottom: 12px;
    margin-bottom: 2px;
    border-bottom: 1px solid #e5e7eb;
}

/* Ikona + tytuł w jednym pojemniku — nagłówek ma z site.css justify-content: space-between,
   więc luzem rozjechałyby się na przeciwne końce paska. */
.la-header-title[b-7ma0cdby68] {
    display: flex;
    align-items: center;
    gap: 6px;
    min-width: 0;
}

/* Ta sama konwencja co w "Tablicy Kanban" i "Tablicy zespołu": maska na czarnym SVG
   wypełniona kolorem — globalna inwersja ikon obejmuje tylko klasy icon-bs-*. */
.la-header-icon[b-7ma0cdby68] {
    width: 16px;
    height: 16px;
    display: block;
    flex-shrink: 0;
    background-color: black;
    -webkit-mask: url('/images/bootstrap-icons/activity.svg') no-repeat center / contain;
    mask: url('/images/bootstrap-icons/activity.svg') no-repeat center / contain;
}

.live-activity-list[b-7ma0cdby68] {
    gap: 0;
}

/* === Wpis === */
.la-item[b-7ma0cdby68] {
    display: flex;
    align-items: flex-start;
    gap: 12px;
    padding: 13px 2px;
    border-bottom: 1px solid #f1f3f5;
}

    .la-item:last-child[b-7ma0cdby68] {
        border-bottom: none;
    }

/* === Ikona w kolorowym kółku === */
.la-icon[b-7ma0cdby68] {
    width: 34px;
    height: 34px;
    border-radius: 12px;
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    background: var(--la-bg);
    color: var(--la-fg);
}

/* Glif = maska na czarnym SVG, wypełniona kolorem akcentu. */
.la-icon-glyph[b-7ma0cdby68] {
    width: 16px;
    height: 16px;
    display: block;
    background-color: currentColor;
    -webkit-mask: var(--i) no-repeat center / contain;
    mask: var(--i) no-repeat center / contain;
}

.la-c-blue[b-7ma0cdby68] { --la-bg: #dbeafe; --la-fg: #3b82f6; }
.la-c-amber[b-7ma0cdby68] { --la-bg: #fdeecd; --la-fg: #f59e0b; }
.la-c-purple[b-7ma0cdby68] { --la-bg: #ede9fe; --la-fg: #8b5cf6; }
.la-c-green[b-7ma0cdby68] { --la-bg: #d7f5df; --la-fg: #22c55e; }
.la-c-red[b-7ma0cdby68] { --la-bg: #fde0e0; --la-fg: #ef4444; }
.la-c-gray[b-7ma0cdby68] { --la-bg: #eef0f2; --la-fg: #6b7280; }

/* === Treść wpisu === */
.la-body[b-7ma0cdby68] {
    flex: 1;
    min-width: 0;
    display: flex;
    flex-direction: column;
    gap: 3px;
}

.la-row1[b-7ma0cdby68] {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 8px;
}

.la-title[b-7ma0cdby68] {
    font-size: 0.86rem;
    font-weight: 600;
    color: #1e293b;
    text-decoration: none;
}

    .la-title:hover[b-7ma0cdby68] {
        text-decoration: underline;
    }

.la-ref[b-7ma0cdby68] {
    font-size: 0.7rem;
    color: #9ca3af;
    font-variant-numeric: tabular-nums;
    white-space: nowrap;
    flex-shrink: 0;
}

.la-desc[b-7ma0cdby68] {
    font-size: 0.82rem;
    line-height: 1.45;
    color: #4b5563;
    overflow-wrap: anywhere;
}

.la-meta[b-7ma0cdby68] {
    display: flex;
    align-items: center;
    gap: 6px;
    margin-top: 2px;
    font-size: 0.75rem;
    color: #9ca3af;
}

.la-author[b-7ma0cdby68] {
    font-weight: 500;
    color: #6b7280;
}

.la-dot[b-7ma0cdby68] {
    color: #d1d5db;
}

.la-time[b-7ma0cdby68] {
    font-variant-numeric: tabular-nums;
}

.la-empty[b-7ma0cdby68] {
    list-style: none;
    text-align: center;
    padding: 1.5rem 0;
    color: #6b7280;
}
/* /Components/Pages/Index/MyTicketsList.razor.rz.scp.css */
.mtl-card[b-ae20tj3gs8] {
    background: #fff;
    border: 1px solid #e5e7eb;
    border-radius: 16px;
    box-shadow: 0 10px 25px rgba(15, 23, 42, 0.06);
    padding: 16px 18px 8px;
    display: flex;
    flex-direction: column;
    flex: 1 1 auto;
    width: 100%;
    min-width: 0;
    max-height: 700px;
}

.mtl-header[b-ae20tj3gs8] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    flex-wrap: wrap;
    padding-bottom: 12px;
    border-bottom: 1px solid #e5e7eb;
}

/* Lewy róg nagłówka: przełącznik widoku (lista/Kanban) i tytuł kafla, sklejone w jedno
   pudełko. Odstęp 6px jak w tytule Kanbana (.kanban-wrapper-title) — ten sam nagłówek
   w dwóch widokach nie może drgnąć przy przełączeniu. */
.mtl-heading[b-ae20tj3gs8] {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    flex-shrink: 0;
}

.mtl-title[b-ae20tj3gs8] {
    font-size: 1rem;
    /* Tytuł kafla ma być najmocniejszym tekstem w tym wierszu — obok stoją teraz dwa segmenty
       przełączników pisane półgrubym 12px i przy 600 nagłówek się z nimi zlewał. */
    font-weight: 500;
    color: #111827;
}

/* Prawy róg nagłówka to teraz sam przełącznik zakresu (moje/wszyscy) — widok przeniósł się
   do `.mtl-heading`, więc wspólne pudełko `.mtl-actions` nie ma już czego grupować,
   a `TicketsScopeToggle` niesie własne `flex-shrink: 0`. */

/* Filtr statusów przeniósł się do wspólnego komponentu TicketsStatusFilter (ten sam pasek
   stoi teraz również w nagłówku tablicy Kanban), więc jego style siedzą przy nim. */

/* === Tabela === */
.mtl-body[b-ae20tj3gs8] {
    flex: 1 1 auto;
    overflow-y: auto;
    min-height: 0;
}

.mtl-table[b-ae20tj3gs8] {
    display: flex;
    flex-direction: column;
}

/* Kolumny: ID | Tytuł | Produkt | Moduł | Priorytet | Status | Aktualizacja */
.mtl-row[b-ae20tj3gs8] {
    display: grid;
    grid-template-columns: 110px minmax(0, 2fr) 1fr 1fr 0.9fr 1.1fr 1fr;
    align-items: center;
    gap: 10px;
    padding: 11px 4px;
}

.mtl-head[b-ae20tj3gs8] {
    font-size: 0.7rem;
    font-weight: 600;
    letter-spacing: 0.04em;
    text-transform: uppercase;
    color: #9ca3af;
    border-bottom: 1px solid #eef0f2;
    position: sticky;
    top: 0;
    background: #fff;
    z-index: 1;
}

.mtl-item[b-ae20tj3gs8] {
    border-bottom: 1px solid #f3f4f6;
    font-size: 0.84rem;
    cursor: pointer;
    transition: background 0.15s ease;
}

    .mtl-item:hover[b-ae20tj3gs8] {
        background: #f8f9fa;
    }

    .mtl-item:last-child[b-ae20tj3gs8] {
        border-bottom: none;
    }

.mtl-id[b-ae20tj3gs8] {
    font-size: 0.72rem;
    color: #9ca3af;
    font-variant-numeric: tabular-nums;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

/* Komórka tytułu: sam tytuł + opcjonalna pastylka projektu obok. Flex, bo przycięcie
   wielokropkiem działa tylko na elemencie z tekstem — po dołożeniu pastylki tytuł musiał
   dostać własny wrapper. */
/* Pastylka projektu NAD tytułem, nie obok — obok dzieliły jedną szerokość i przy dłuższych
   nazwach ucinały się nawzajem. Teraz każda dostaje cały wiersz komórki. */
.mtl-subject[b-ae20tj3gs8] {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    justify-content: center;
    gap: 1px;
    min-width: 0;
    font-weight: 500;
    color: #111827;
}

.mtl-subject-text[b-ae20tj3gs8] {
    /* Własny wiersz, więc tytuł dostaje pełną szerokość komórki; wielokropek zostaje na
       wypadek naprawdę długich tematów (pełny jest w tooltipie). */
    max-width: 100%;
    min-width: 0;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

/* Pastylka stoi teraz w osobnym wierszu nad tytułem — nie musi mu już ustępować, ale nie
   może wyjść poza komórkę (za przycięcie nazwy odpowiada sam ProjectTag).
   ::deep, bo pastylka to osobny komponent. */
.mtl-subject[b-ae20tj3gs8]  .project-tag {
    max-width: 100%;
    font-size: 0.72rem;
    font-weight: 500;
    color: #6b7280;
}

.mtl-cat[b-ae20tj3gs8] {
    color: #6b7280;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.mtl-time[b-ae20tj3gs8] {
    color: #9ca3af;
    white-space: nowrap;
}

/* === Priorytet === */
.mtl-prio[b-ae20tj3gs8] {
    font-weight: 600;
    white-space: nowrap;
}

.mtl-prio.prio-low[b-ae20tj3gs8] { color: #9ca3af; }
.mtl-prio.prio-normal[b-ae20tj3gs8] { color: #f59e0b; }
.mtl-prio.prio-high[b-ae20tj3gs8] { color: #ef4444; }
.mtl-prio.prio-critical[b-ae20tj3gs8] { color: #b91c1c; }

/* === Pigułka statusu === */
.mtl-pill[b-ae20tj3gs8] {
    display: inline-block;
    padding: 2px 10px;
    border-radius: 8px;
    font-size: 0.72rem;
    font-weight: 600;
    border: 1px solid transparent;
    white-space: nowrap;
}

.mtl-pill.pill-new[b-ae20tj3gs8] { background: #dbeafe; color: #1d4ed8; border-color: #bfdbfe; }
.mtl-pill.pill-progress[b-ae20tj3gs8] { background: #fef3c7; color: #b45309; border-color: #fde68a; }
.mtl-pill.pill-waiting[b-ae20tj3gs8] { background: #f3e8ff; color: #7e22ce; border-color: #e9d5ff; }
.mtl-pill.pill-closed[b-ae20tj3gs8] { background: #e5e7eb; color: #374151; border-color: #d1d5db; }
.mtl-pill.pill-default[b-ae20tj3gs8] { background: #f3f4f6; color: #374151; border-color: #e5e7eb; }

.mtl-empty[b-ae20tj3gs8] {
    color: #9ca3af;
    font-size: 0.85rem;
    text-align: center;
    padding: 2rem 0;
}

/* === Responsywność: chowamy kolejno mniej istotne kolumny === */
/* Moduł */
@media (max-width: 1500px) {
    .mtl-row[b-ae20tj3gs8] {
        grid-template-columns: 100px minmax(0, 2fr) 1fr 0.9fr 1.1fr 1fr;
    }

    .mtl-row > :nth-child(4)[b-ae20tj3gs8] {
        display: none;
    }
}

/* + Produkt */
@media (max-width: 1200px) {
    .mtl-row[b-ae20tj3gs8] {
        grid-template-columns: 100px minmax(0, 2fr) 0.9fr 1.1fr 1fr;
    }

    .mtl-row > :nth-child(3)[b-ae20tj3gs8] {
        display: none;
    }
}

/* + ID i Priorytet */
@media (max-width: 768px) {
    .mtl-row[b-ae20tj3gs8] {
        grid-template-columns: minmax(0, 2fr) 1.1fr 1fr;
    }

    .mtl-row > :nth-child(1)[b-ae20tj3gs8],
    .mtl-row > :nth-child(5)[b-ae20tj3gs8] {
        display: none;
    }
}
/* /Components/Pages/Index/StaffQueueStrip.razor.rz.scp.css */
.sq[b-c7b0dsiou6] {
    display: flex;
    align-items: stretch;
    gap: 12px;
    min-width: 0;
}

.sq-strip[b-c7b0dsiou6] {
    flex: 1 1 auto;
    display: flex;
    min-width: 0;
    border: 1px solid var(--sd-border);
    border-radius: 14px;
    overflow: hidden;
    background: var(--sd-surface);
}

.sq-seg[b-c7b0dsiou6] {
    appearance: none;
    flex: 1 1 0;
    min-width: 150px;
    padding: 12px 16px 13px;
    border: 0;
    border-left: 1px solid var(--sd-border);
    background: transparent;
    position: relative;
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 2px;
    font: inherit;
    color: var(--sd-text);
    text-align: left;
    cursor: pointer;
    transition: background-color 0.15s ease, flex-grow 0.4s ease;
}

    .sq-seg:first-child[b-c7b0dsiou6] {
        border-left: 0;
    }

    .sq-seg[b-c7b0dsiou6]::before {
        content: "";
        position: absolute;
        top: 0;
        left: 0;
        right: 0;
        height: 3px;
        background: var(--sig, var(--sd-track));
    }

    .sq-seg:hover[b-c7b0dsiou6] {
        background: var(--sd-surface-2);
    }

    .sq-seg.active[b-c7b0dsiou6] {
        background: var(--sd-surface-2);
        box-shadow: inset 0 -2px 0 var(--sig, var(--sd-track));
    }

    .sq-seg.empty b[b-c7b0dsiou6] {
        color: var(--sd-muted);
    }

    .sq-seg b[b-c7b0dsiou6],
    .sq-plate b[b-c7b0dsiou6] {
        font-size: 26px;
        font-weight: 700;
        letter-spacing: -0.02em;
        line-height: 1.1;
        font-variant-numeric: tabular-nums;
    }

.sq-label[b-c7b0dsiou6] {
    font-size: 10.5px;
    font-weight: 700;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: var(--sd-muted);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    max-width: 100%;
}

.sq-seg.is-us[b-c7b0dsiou6] {
    --sig: var(--sd-orange);
    background: var(--sd-orange-soft);
}

    .sq-seg.is-us .sq-label[b-c7b0dsiou6],
    .sq-seg.is-us b[b-c7b0dsiou6] {
        color: var(--sd-orange-text);
    }

.sq-seg.is-work[b-c7b0dsiou6] { --sig: var(--sd-amber); }
.sq-seg.is-client[b-c7b0dsiou6] { --sig: #8c52ff; }
.sq-seg.is-dev[b-c7b0dsiou6] { --sig: var(--sd-blue); }

.sq-plate[b-c7b0dsiou6] {
    appearance: none;
    flex: 0 0 180px;
    padding: 12px 16px;
    border-radius: 14px;
    display: flex;
    flex-direction: column;
    justify-content: center;
    align-items: flex-start;
    gap: 2px;
    background: var(--sd-surface);
    border: 1px solid var(--sd-border);
    font: inherit;
    color: var(--sd-text);
    text-align: left;
}

    .sq-plate em[b-c7b0dsiou6] {
        font-style: normal;
        font-size: 12px;
        color: var(--sd-muted);
    }

    .sq-plate.is-late[b-c7b0dsiou6] {
        border-color: var(--sd-red-border);
        background: var(--sd-red-soft);
    }

        .sq-plate.is-late .sq-label[b-c7b0dsiou6],
        .sq-plate.is-late b[b-c7b0dsiou6] {
            color: var(--sd-red-text);
        }

    .sq-plate.is-free[b-c7b0dsiou6] {
        border-style: dashed;
        border-color: var(--sd-border-strong);
    }

    button.sq-plate[b-c7b0dsiou6] {
        cursor: pointer;
    }

        button.sq-plate:hover[b-c7b0dsiou6] {
            background: var(--sd-surface-2);
        }

        button.sq-plate em[b-c7b0dsiou6] {
            color: var(--sd-orange-text);
            font-weight: 600;
        }

@media (max-width: 1100px) {
    .sq[b-c7b0dsiou6] {
        flex-wrap: wrap;
    }

    .sq-strip[b-c7b0dsiou6] {
        flex-basis: 100%;
        flex-wrap: wrap;
    }

    .sq-plate[b-c7b0dsiou6] {
        flex: 1 1 160px;
    }
}

@media (prefers-reduced-motion: reduce) {
    .sq-seg[b-c7b0dsiou6] {
        transition: none;
    }
}
/* /Components/Pages/Index/StaffTodayPanel.razor.rz.scp.css */
.st[b-j9fzj8ayp2] {
    padding: 16px 18px 12px;
    border-radius: 16px;
    border: 1px solid var(--sd-border);
    background: var(--sd-surface);
    box-shadow: var(--sd-shadow-soft);
    display: flex;
    flex-direction: column;
    max-height: 400px;
    overflow: hidden;
}

.st-head[b-j9fzj8ayp2] {
    display: flex;
    align-items: center;
    gap: 8px;
    padding-bottom: 10px;
    border-bottom: 1px solid var(--sd-border);
    font-size: 15px;
    font-weight: 700;
    color: var(--sd-text);
}

    .st-head a[b-j9fzj8ayp2] {
        margin-left: auto;
        font-size: 12.5px;
        font-weight: 600;
        color: var(--sd-muted);
        text-decoration: none;
    }

        .st-head a:hover[b-j9fzj8ayp2] {
            color: var(--sd-text);
        }

.st-title[b-j9fzj8ayp2] {
    display: inline-flex;
    align-items: center;
    gap: 7px;
    min-width: 0;
}

.st-title-icon[b-j9fzj8ayp2] {
    width: 16px;
    height: 16px;
    display: block;
    flex-shrink: 0;
    background-color: var(--sd-text);
    -webkit-mask: url('/images/bootstrap-icons/calendar-check.svg') no-repeat center / contain;
    mask: url('/images/bootstrap-icons/calendar-check.svg') no-repeat center / contain;
}

.st-empty[b-j9fzj8ayp2] {
    margin: 12px 0 4px;
    font-size: 13.5px;
    color: var(--sd-muted);
}

.st-list[b-j9fzj8ayp2] {
    list-style: none;
    margin: 6px 0 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    min-height: 0;
    overflow-y: auto;
    scrollbar-width: thin;
    scrollbar-color: var(--sd-border-strong) transparent;
}

    .st-list[b-j9fzj8ayp2]::-webkit-scrollbar {
        width: 6px;
    }

    .st-list[b-j9fzj8ayp2]::-webkit-scrollbar-thumb {
        background: var(--sd-border-strong);
        border-radius: 3px;
    }

    .st-list li[b-j9fzj8ayp2] {
        position: relative;
        display: grid;
        grid-template-columns: 46px 12px minmax(0, 1fr);
        gap: 10px;
        align-items: start;
        padding: 8px 0;
    }

    .st-list time[b-j9fzj8ayp2] {
        font-size: 13px;
        font-weight: 700;
        font-variant-numeric: tabular-nums;
        color: var(--sd-text);
        padding-top: 1px;
    }

.st-dot[b-j9fzj8ayp2] {
    width: 10px;
    height: 10px;
    border-radius: 50%;
    margin-top: 4px;
    display: block;
    background: var(--sd-blue);
}

.is-reaction .st-dot[b-j9fzj8ayp2] { background: var(--sd-orange); }
.is-due .st-dot[b-j9fzj8ayp2] { background: var(--sd-amber); }

.st-body[b-j9fzj8ayp2] {
    min-width: 0;
}

    .st-body b[b-j9fzj8ayp2],
    .st-body a[b-j9fzj8ayp2] {
        display: block;
        font-size: 13.5px;
        font-weight: 600;
        color: var(--sd-text);
        white-space: nowrap;
        overflow: hidden;
        text-overflow: ellipsis;
        text-decoration: none;
    }

        .st-body a:hover[b-j9fzj8ayp2] {
            text-decoration: underline;
        }

    .st-body span[b-j9fzj8ayp2] {
        display: block;
        font-size: 12px;
        color: var(--sd-muted);
        margin-top: 1px;
    }

.st-list li.past time[b-j9fzj8ayp2],
.st-list li.past .st-body b[b-j9fzj8ayp2],
.st-list li.past .st-body a[b-j9fzj8ayp2] {
    color: var(--sd-muted);
}

.st-list li.past .st-dot[b-j9fzj8ayp2] {
    opacity: 0.45;
}

.st-list li.now[b-j9fzj8ayp2]::before {
    content: "";
    position: absolute;
    left: 0;
    right: 0;
    top: -1px;
    height: 1px;
    background: var(--sd-orange-border);
}

.st-list li.now[b-j9fzj8ayp2]::after {
    content: attr(data-now);
    position: absolute;
    right: 0;
    top: -8px;
    font-size: 10px;
    font-weight: 700;
    letter-spacing: 0.08em;
    color: var(--sd-orange-text);
    background: var(--sd-surface);
    padding: 0 4px;
}
/* /Components/Pages/Index/StaffUrgentPanel.razor.rz.scp.css */
/* „Najpilniejsze" + „Kolejne pilne". Kolory z tokenów --sd-* (Home.razor.css), a odcień
   znacznika z --tone, które ustawia klasa is-late/is-soon/is-due/is-waiting/is-calm. */

.su[b-t5d4hpu75g] {
    display: grid;
    grid-template-columns: minmax(0, 1.55fr) minmax(0, 1fr);
    gap: 16px;
    align-items: stretch;
    min-width: 0;
}

.is-late[b-t5d4hpu75g] { --tone: var(--sd-red); --tone-text: var(--sd-red-text); --tone-soft: var(--sd-red-soft); --tone-border: var(--sd-red-border); }
.is-soon[b-t5d4hpu75g] { --tone: var(--sd-orange); --tone-text: var(--sd-orange-text); --tone-soft: var(--sd-orange-soft); --tone-border: var(--sd-orange-border); }
.is-due[b-t5d4hpu75g] { --tone: var(--sd-amber); --tone-text: var(--sd-amber-text); --tone-soft: var(--sd-amber-soft); --tone-border: var(--sd-amber-border); }
.is-waiting[b-t5d4hpu75g] { --tone: var(--sd-orange); --tone-text: var(--sd-orange-text); --tone-soft: var(--sd-orange-soft); --tone-border: var(--sd-orange-border); }
.is-calm[b-t5d4hpu75g] { --tone: var(--sd-muted); --tone-text: var(--sd-muted); --tone-soft: var(--sd-surface-2); --tone-border: var(--sd-border); }

/* bohater zawsze jest „nasz" — spokojny odcień dostaje pomarańczowy pierścień, nie szary */
.su-hero.is-calm[b-t5d4hpu75g] { --tone: var(--sd-orange); --tone-text: var(--sd-orange-text); --tone-border: var(--sd-orange-border); }

/* --- bohater --- */
.su-hero[b-t5d4hpu75g] {
    display: grid;
    grid-template-columns: minmax(0, 1fr) 150px;
    gap: 24px;
    padding: 24px 28px 22px;
    border-radius: 20px;
    border: 1px solid var(--tone-border);
    background:
        radial-gradient(1000px 340px at 0% 0%, var(--sd-hero-glow), transparent 62%),
        var(--sd-surface);
    box-shadow: var(--sd-shadow);
    min-width: 0;
}

    .su-hero.is-late[b-t5d4hpu75g] {
        background:
            radial-gradient(1000px 340px at 0% 0%, var(--sd-red-glow), transparent 62%),
            var(--sd-surface);
    }

.su-hero-main[b-t5d4hpu75g] {
    min-width: 0;
}

.su-kicker[b-t5d4hpu75g] {
    display: inline-flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 4px 10px;
    font-size: 11.5px;
    font-weight: 700;
    letter-spacing: 0.15em;
    text-transform: uppercase;
    color: var(--tone-text);
}

    .su-kicker em[b-t5d4hpu75g] {
        font-style: normal;
        font-weight: 600;
        letter-spacing: 0.1em;
        color: var(--sd-muted);
    }

.su-dot[b-t5d4hpu75g] {
    position: relative;
    width: 9px;
    height: 9px;
    display: block;
    flex-shrink: 0;
}

    .su-dot[b-t5d4hpu75g]::before,
    .su-dot[b-t5d4hpu75g]::after {
        content: "";
        position: absolute;
        inset: 0;
        border-radius: 50%;
        background: var(--tone);
    }

    .su-dot[b-t5d4hpu75g]::after {
        animation: su-ping-b-t5d4hpu75g 1.8s cubic-bezier(0, 0, 0.2, 1) infinite;
    }

@keyframes su-ping-b-t5d4hpu75g {
    0% { transform: scale(1); opacity: 0.7; }
    80%, 100% { transform: scale(2.8); opacity: 0; }
}

.su-title[b-t5d4hpu75g] {
    display: block;
    margin-top: 11px;
    font-size: 1.75rem;
    font-weight: 700;
    letter-spacing: -0.02em;
    line-height: 1.18;
    color: var(--sd-text);
    text-decoration: none;
    overflow-wrap: anywhere;
}

    .su-title:hover[b-t5d4hpu75g] {
        text-decoration: underline;
        text-decoration-thickness: 2px;
        text-underline-offset: 4px;
    }

.su-meta[b-t5d4hpu75g] {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 6px 16px;
    margin-top: 8px;
    font-size: 13px;
    color: var(--sd-muted);
}

.su-num[b-t5d4hpu75g] {
    font-variant-numeric: tabular-nums;
}

.su-tag[b-t5d4hpu75g] {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 1px 8px;
    border-radius: 6px;
    background: var(--sd-surface-2);
    border: 1px solid var(--sd-border);
    color: var(--sd-text-2);
    font-size: 12px;
}

    .su-tag i[b-t5d4hpu75g] {
        width: 7px;
        height: 7px;
        border-radius: 50%;
        display: block;
    }

/* --- cytat klienta --- */
.su-msg[b-t5d4hpu75g] {
    display: flex;
    gap: 12px;
    margin-top: 18px;
}

.su-ava[b-t5d4hpu75g] {
    width: 38px;
    height: 38px;
    border-radius: 50%;
    flex-shrink: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 12.5px;
    font-weight: 700;
    color: #fff;
    background: var(--sd-border);
}

.su-bubble[b-t5d4hpu75g] {
    flex: 1 1 auto;
    min-width: 0;
    background: var(--sd-bubble);
    border: 1px solid var(--sd-border);
    border-radius: 4px 16px 16px 16px;
    padding: 11px 15px 12px;
}

.su-who[b-t5d4hpu75g] {
    font-size: 12.5px;
    color: var(--sd-muted);
    margin-bottom: 5px;
}

    .su-who b[b-t5d4hpu75g] {
        color: var(--sd-text);
        font-weight: 600;
    }

.su-body[b-t5d4hpu75g] {
    font-size: 14.5px;
    line-height: 1.55;
    color: var(--sd-text-2);
    overflow-wrap: anywhere;
    display: -webkit-box;
    -webkit-line-clamp: 4;
    -webkit-box-orient: vertical;
    overflow: hidden;
}

.su-nomsg[b-t5d4hpu75g] {
    margin: 18px 0 0;
    font-size: 14px;
    color: var(--sd-muted);
}

.su-skel[b-t5d4hpu75g] {
    display: block;
    height: 11px;
    border-radius: 6px;
    background: var(--sd-border);
    margin: 6px 0 10px;
    width: 92%;
}

    .su-skel.short[b-t5d4hpu75g] {
        width: 55%;
        margin-bottom: 2px;
    }

/* --- akcje --- */
.su-actions[b-t5d4hpu75g] {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 10px;
    margin-top: 18px;
}

.su-btn[b-t5d4hpu75g] {
    appearance: none;
    display: inline-flex;
    align-items: center;
    gap: 8px;
    border-radius: 9px;
    padding: 9px 17px;
    font: inherit;
    font-size: 14px;
    font-weight: 600;
    white-space: nowrap;
    text-decoration: none;
    cursor: pointer;
    border: 1px solid transparent;
    transition: filter 0.15s ease, background-color 0.15s ease;
}

    .su-btn svg[b-t5d4hpu75g] {
        width: 15px;
        height: 15px;
        display: block;
        flex: 0 0 15px;
    }

    .su-btn .icon-bs-chat-dots[b-t5d4hpu75g] {
        width: 15px;
        height: 15px;
        display: block;
        flex: 0 0 15px;
        background-size: 15px;
    }

    .su-btn.primary[b-t5d4hpu75g] {
        background: var(--sd-orange);
        color: #fff;
        box-shadow: 0 6px 18px rgba(255, 90, 10, 0.3);
    }

        .su-btn.primary .icon-bs-chat-dots[b-t5d4hpu75g] {
            filter: invert(1) !important;
        }

        .su-btn.primary:hover[b-t5d4hpu75g] {
            filter: brightness(1.06);
            color: #fff;
        }

        .su-btn.primary:disabled[b-t5d4hpu75g] {
            opacity: 0.65;
            cursor: progress;
        }

    .su-btn.ghost[b-t5d4hpu75g] {
        border-color: var(--sd-border-strong);
        color: var(--sd-text);
        background: transparent;
    }

        .su-btn.ghost:hover[b-t5d4hpu75g] {
            background: var(--sd-surface-2);
        }

.su-link[b-t5d4hpu75g] {
    margin-left: 4px;
    font-size: 13px;
    color: var(--sd-muted);
    text-decoration: none;
}

    .su-link:hover[b-t5d4hpu75g] {
        color: var(--sd-text);
        text-decoration: underline;
    }

/* --- pierścień / statystyka --- */
.su-side[b-t5d4hpu75g] {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 10px;
    min-width: 0;
}

.su-ring[b-t5d4hpu75g] {
    position: relative;
    width: 132px;
    height: 132px;
}

    .su-ring svg[b-t5d4hpu75g] {
        width: 132px;
        height: 132px;
        transform: rotate(-90deg);
        display: block;
    }

.su-ring-track[b-t5d4hpu75g] {
    fill: none;
    stroke: var(--sd-track);
    stroke-width: 10;
}

.su-ring-val[b-t5d4hpu75g] {
    fill: none;
    stroke: var(--tone);
    stroke-width: 10;
    stroke-linecap: round;
    transition: stroke-dasharray 0.6s ease;
}

.su-ring-center[b-t5d4hpu75g] {
    position: absolute;
    inset: 0;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    text-align: center;
}

    .su-ring-center b[b-t5d4hpu75g] {
        font-size: 30px;
        font-weight: 800;
        letter-spacing: -0.03em;
        line-height: 1;
        color: var(--sd-text);
        font-variant-numeric: tabular-nums;
    }

    .su-ring-center small[b-t5d4hpu75g] {
        font-size: 11px;
        color: var(--sd-muted);
        margin-top: 4px;
        max-width: 74px;
        line-height: 1.2;
    }

.su-hero.is-late .su-ring-center b[b-t5d4hpu75g] {
    color: var(--tone-text);
}

.su-ring-cap[b-t5d4hpu75g] {
    font-size: 11.5px;
    color: var(--sd-muted);
    text-align: center;
    line-height: 1.4;
}

.su-stat[b-t5d4hpu75g] {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 6px;
    text-align: center;
    padding: 18px 10px;
    border-radius: 16px;
    background: var(--tone-soft, var(--sd-surface-2));
    border: 1px solid var(--tone-border);
    width: 100%;
}

    .su-stat b[b-t5d4hpu75g] {
        font-size: 1.6rem;
        font-weight: 800;
        letter-spacing: -0.02em;
        line-height: 1.1;
        color: var(--tone-text);
        font-variant-numeric: tabular-nums;
        overflow-wrap: anywhere;
    }

    .su-stat span[b-t5d4hpu75g] {
        font-size: 11px;
        font-weight: 700;
        letter-spacing: 0.1em;
        text-transform: uppercase;
        color: var(--sd-muted);
    }

/* --- kolejne pilne --- */
.su-list[b-t5d4hpu75g] {
    display: flex;
    flex-direction: column;
    padding: 18px 20px 12px;
    border-radius: 16px;
    border: 1px solid var(--sd-border);
    background: var(--sd-surface);
    box-shadow: var(--sd-shadow-soft);
    min-width: 0;
}

.su-list-head[b-t5d4hpu75g] {
    display: flex;
    align-items: center;
    gap: 8px;
    padding-bottom: 11px;
    border-bottom: 1px solid var(--sd-border);
    font-size: 15px;
    font-weight: 700;
    color: var(--sd-text);
}

    .su-list-head a[b-t5d4hpu75g] {
        margin-left: auto;
        font-size: 12.5px;
        font-weight: 600;
        color: var(--sd-muted);
        text-decoration: none;
        white-space: nowrap;
    }

        .su-list-head a:hover[b-t5d4hpu75g] {
            color: var(--sd-text);
        }

.su-count[b-t5d4hpu75g] {
    font-size: 12px;
    font-weight: 700;
    color: var(--sd-muted);
    background: var(--sd-surface-2);
    border: 1px solid var(--sd-border);
    padding: 1px 7px;
    border-radius: 999px;
}

.su-list-empty[b-t5d4hpu75g] {
    margin: 14px 2px 4px;
    font-size: 13.5px;
    color: var(--sd-muted);
}

.su-row[b-t5d4hpu75g] {
    display: flex;
    align-items: center;
    gap: 14px;
    padding: 11px 4px;
    border-bottom: 1px solid var(--sd-border);
    color: inherit;
    text-decoration: none;
    border-radius: 6px;
}

    .su-row:last-child[b-t5d4hpu75g] {
        border-bottom: 0;
    }

    .su-row:hover[b-t5d4hpu75g] {
        background: var(--sd-surface-2);
    }

.su-row-body[b-t5d4hpu75g] {
    flex: 1 1 auto;
    min-width: 0;
    display: flex;
    flex-direction: column;
    gap: 3px;
}

.su-why[b-t5d4hpu75g] {
    font-size: 10.5px;
    font-weight: 700;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: var(--tone-text);
}

.su-row-title[b-t5d4hpu75g] {
    font-size: 14px;
    font-weight: 600;
    color: var(--sd-text);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.su-row-meta[b-t5d4hpu75g] {
    font-size: 12px;
    color: var(--sd-muted);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    font-variant-numeric: tabular-nums;
}

.su-chip[b-t5d4hpu75g] {
    flex-shrink: 0;
    padding: 4px 9px;
    border-radius: 8px;
    font-size: 12.5px;
    font-weight: 700;
    white-space: nowrap;
    font-variant-numeric: tabular-nums;
    background: var(--tone-soft);
    color: var(--tone-text);
    border: 1px solid var(--tone-border);
}

/* --- nic pilnego --- */
.su-calm[b-t5d4hpu75g] {
    grid-column: 1 / -1;
    display: flex;
    align-items: center;
    gap: 16px;
    padding: 20px 24px;
    border-radius: 18px;
    border: 1px solid var(--sd-border);
    background: var(--sd-surface);
    box-shadow: var(--sd-shadow-soft);
}

    .su-calm b[b-t5d4hpu75g] {
        display: block;
        font-size: 1.1rem;
        font-weight: 700;
        color: var(--sd-text);
    }

    .su-calm span[b-t5d4hpu75g] {
        display: block;
        font-size: 13.5px;
        color: var(--sd-muted);
        margin-top: 2px;
    }

.su-calm-ico[b-t5d4hpu75g] {
    width: 42px;
    height: 42px;
    border-radius: 50%;
    flex-shrink: 0;
    display: flex !important;
    align-items: center;
    justify-content: center;
    background: var(--sd-ok-soft);
    color: var(--sd-ok);
    margin: 0 !important;
}

    .su-calm-ico svg[b-t5d4hpu75g] {
        width: 22px;
        height: 22px;
    }

@media (max-width: 1200px) {
    .su[b-t5d4hpu75g] {
        grid-template-columns: minmax(0, 1fr);
    }
}

@media (max-width: 640px) {
    .su-hero[b-t5d4hpu75g] {
        grid-template-columns: minmax(0, 1fr);
        padding: 20px 18px;
    }

    .su-title[b-t5d4hpu75g] {
        font-size: 1.4rem;
    }

    .su-side[b-t5d4hpu75g] {
        flex-direction: row;
        justify-content: flex-start;
    }
}

/* --- kontrolka „check engine" (zastępuje kropkę w nagłówku bohatera) --- */
.su-cel[b-t5d4hpu75g] {
    /* sztywny, kwadratowy box — globalne style przycisków nie mogą go rozciągać */
    box-sizing: border-box;
    display: inline-flex;
    width: 22px;
    min-width: 22px;
    height: 22px;
    line-height: 0;
    padding: 0;
    margin: 0;
    border: 0;
    background: transparent;
    color: var(--tone);
    cursor: pointer;
    flex-shrink: 0;
    border-radius: 5px;
    transition: transform 0.15s ease, opacity 0.2s ease;
}

    .su-cel:hover[b-t5d4hpu75g] { transform: scale(1.15); }
    .su-cel:focus-visible[b-t5d4hpu75g] { outline: 2px solid var(--tone); outline-offset: 2px; }

.su-cel.lamp-dim[b-t5d4hpu75g] { color: var(--sd-muted); opacity: 0.55; }
.su-cel.lamp-on[b-t5d4hpu75g] { filter: drop-shadow(0 0 4px var(--tone)); }
.su-cel.lamp-warn[b-t5d4hpu75g] { color: var(--sd-amber); animation: su-lamp-pulse-b-t5d4hpu75g 2s ease-in-out infinite; }
.su-cel.lamp-alert[b-t5d4hpu75g] { color: var(--sd-red); animation: su-lamp-blink-b-t5d4hpu75g 0.9s steps(2, jump-none) infinite; }

/* „przekręcenie kluczyka" — lampka przelatuje przez wszystkie kolory i gaśnie do swojego stanu */
.su-cel.is-ignite[b-t5d4hpu75g] { animation: su-lamp-ignite-b-t5d4hpu75g 1.2s ease-out 1; opacity: 1; }

@keyframes su-lamp-pulse-b-t5d4hpu75g {
    0%, 100% { opacity: 0.45; filter: none; }
    50% { opacity: 1; filter: drop-shadow(0 0 5px var(--sd-amber)); }
}

@keyframes su-lamp-blink-b-t5d4hpu75g {
    0% { opacity: 1; filter: drop-shadow(0 0 6px var(--sd-red)); }
    100% { opacity: 0.3; filter: none; }
}

@keyframes su-lamp-ignite-b-t5d4hpu75g {
    0% { color: var(--sd-red); transform: scale(1.3); filter: drop-shadow(0 0 8px var(--sd-red)); }
    30% { color: var(--sd-amber); filter: drop-shadow(0 0 8px var(--sd-amber)); }
    60% { color: var(--sd-ok); filter: drop-shadow(0 0 8px var(--sd-ok)); }
    100% { transform: scale(1); filter: none; }
}

.su-calm-ico.is-off[b-t5d4hpu75g] {
    background: var(--sd-surface-2);
    color: var(--sd-muted);
    opacity: 0.8;
    padding: 9px;
}

@media (prefers-reduced-motion: reduce) {
    .su-dot[b-t5d4hpu75g]::after {
        animation: none;
        opacity: 0;
    }

    .su-cel.lamp-warn[b-t5d4hpu75g],
    .su-cel.lamp-alert[b-t5d4hpu75g],
    .su-cel.is-ignite[b-t5d4hpu75g] {
        animation: none;
    }

    .su-ring-val[b-t5d4hpu75g] {
        transition: none;
    }
}
/* /Components/Pages/Index/TeamNotesPanel.razor.rz.scp.css */
/* Skrót tablicy zespołu na pulpicie. Wygląd celowo bliźniaczy do panelu aktywności
   (.live-activity-card), żeby prawa kolumna pulpitu czytała się jako jedna całość.
   Motyw ciemny — globalnie w wwwroot/css/theme-dark.css. */

.team-notes-card[b-i4oen69km6] {
    background: #ffffff;
    border-radius: 16px;
    padding: 16px 18px 6px;
    box-shadow: 0 10px 25px rgba(15, 23, 42, 0.06);
    border: 1px solid #e5e7eb;
    display: flex;
    flex-direction: column;
    position: relative;
}

.team-notes-header[b-i4oen69km6] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 8px;
    font-size: 1rem;
    font-weight: 600;
    color: #111827;
    padding-bottom: 12px;
    margin-bottom: 2px;
    border-bottom: 1px solid #e5e7eb;
}

.tnp-header-title[b-i4oen69km6] {
    display: flex;
    align-items: center;
    gap: 6px;
    min-width: 0;
}

.tnp-header-icon[b-i4oen69km6] {
    width: 16px;
    height: 16px;
    display: block;
    flex-shrink: 0;
    background-color: black;
    -webkit-mask: url('/images/bootstrap-icons/sticky.svg') no-repeat center / contain;
    mask: url('/images/bootstrap-icons/sticky.svg') no-repeat center / contain;
}

.tnp-unread-badge[b-i4oen69km6] {
    min-width: 20px;
    padding: 1px 6px;
    border-radius: 7px;
    background: #f97316; /* firmowy pomarańcz — ten sam co .tile-orange w ustawieniach */
    color: #ffffff;
    font-size: 0.7rem;
    font-weight: 700;
    line-height: 1.5;
    text-align: center;
}

.tnp-more[b-i4oen69km6] {
    font-size: 0.75rem;
    font-weight: 500;
    color: #6b7280;
    text-decoration: none;
    white-space: nowrap;
}

    .tnp-more:hover[b-i4oen69km6] {
        text-decoration: underline;
    }

.team-notes-list[b-i4oen69km6] {
    list-style: none;
    padding: 0;
    margin: 0;
    display: flex;
    flex-direction: column;
    gap: 0;
    overflow-y: auto;
    flex: 1 1 auto;
    min-height: 0;
    align-items: stretch;
}

/* === Wpis === */
.tnp-item[b-i4oen69km6] {
    display: flex;
    align-items: flex-start;
    gap: 12px;
    padding: 12px 2px;
    border-bottom: 1px solid #f1f3f5;
}

    .tnp-item:last-child[b-i4oen69km6] {
        border-bottom: none;
    }

.tnp-item-unread .tnp-title[b-i4oen69km6] {
    font-weight: 700;
}

/* === Ikona w kolorowym kółku === */
.tnp-icon[b-i4oen69km6] {
    width: 30px;
    height: 30px;
    border-radius: 10px;
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    background: var(--tnp-bg);
    color: var(--tnp-fg);
}

.tnp-icon-glyph[b-i4oen69km6] {
    width: 15px;
    height: 15px;
    display: block;
    background-color: currentColor;
    -webkit-mask: var(--i) no-repeat center / contain;
    mask: var(--i) no-repeat center / contain;
}

.tnp-c-blue[b-i4oen69km6] { --tnp-bg: #dbeafe; --tnp-fg: #3b82f6; }
.tnp-c-amber[b-i4oen69km6] { --tnp-bg: #fdeecd; --tnp-fg: #f59e0b; }
.tnp-c-red[b-i4oen69km6] { --tnp-bg: #fde0e0; --tnp-fg: #ef4444; }

/* === Treść === */
.tnp-body[b-i4oen69km6] {
    flex: 1;
    min-width: 0;
    display: flex;
    flex-direction: column;
    gap: 3px;
}

.tnp-row1[b-i4oen69km6] {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 8px;
}

.tnp-title[b-i4oen69km6] {
    font-size: 0.86rem;
    font-weight: 600;
    color: #1e293b;
    text-decoration: none;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

    .tnp-title:hover[b-i4oen69km6] {
        text-decoration: underline;
    }

.tnp-pin[b-i4oen69km6] {
    width: 13px;
    height: 13px;
    display: block;
    flex-shrink: 0;
    background-color: #f59e0b;
    -webkit-mask: url('/images/bootstrap-icons/pin-angle-fill.svg') no-repeat center / contain;
    mask: url('/images/bootstrap-icons/pin-angle-fill.svg') no-repeat center / contain;
}

.tnp-desc[b-i4oen69km6] {
    font-size: 0.8rem;
    line-height: 1.4;
    color: #4b5563;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
    overflow-wrap: anywhere;
}

.tnp-meta[b-i4oen69km6] {
    display: flex;
    align-items: center;
    gap: 6px;
    margin-top: 2px;
    font-size: 0.73rem;
    color: #9ca3af;
}

.tnp-author[b-i4oen69km6] {
    font-weight: 500;
    color: #6b7280;
}

.tnp-dot[b-i4oen69km6] {
    color: #d1d5db;
}

.tnp-time[b-i4oen69km6] {
    font-variant-numeric: tabular-nums;
}

.tnp-empty[b-i4oen69km6] {
    list-style: none;
    text-align: center;
    padding: 1.5rem 0;
    color: #6b7280;
}
/* /Components/Pages/Index/TicketsScopeToggle.razor.rz.scp.css */
/* Segment „moje / wszyscy" w nagłówku kafla ze zgłoszeniami. Paleta i kształt jak w
   `.views-scope` na liście zgłoszeń (/tickets) — ten sam wybór ma wyglądać tak samo
   w obu miejscach. Style stoją tutaj, a nie tam, bo tamten plik jest izolowany
   (CSS isolation) i jego klasy nie działają poza Tickets.razor. */
.tickets-scope-toggle[b-i08jk8fclr] {
    display: inline-flex;
    gap: 2px;
    padding: 2px;
    border-radius: 8px;
    background: #f3f4f6;
    /* Nagłówek kafla zawija się przy wąskim ekranie — przełącznik ma zostać w całości. */
    flex-shrink: 0;
}

.tickets-scope-toggle .tst-btn[b-i08jk8fclr] {
    appearance: none;
    border: 0;
    background: transparent;
    border-radius: 6px;
    /* Ciaśniej niż na liście zgłoszeń: tam segment ma całą szerokość kolumny widoków,
       tu dzieli wiersz nagłówka z tytułem, chipsami filtrów i przełącznikiem widoku. */
    padding: 4px 8px;
    font-size: 12px;
    font-weight: 600;
    line-height: 1.4;
    color: #6b7280;
    cursor: pointer;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 5px;
    min-width: 0;
}

/* Ikona zostaje zawsze — to ona odróżnia segmenty, gdy wąski kafel przytnie etykietę.
   Dlatego kurczy się WYŁĄCZNIE tekst. */
.tickets-scope-toggle .tst-btn > .icon-bs-black-xsmall[b-i08jk8fclr] {
    flex-shrink: 0;
}

.tickets-scope-toggle .tst-btn-text[b-i08jk8fclr] {
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.tickets-scope-toggle .tst-btn:hover[b-i08jk8fclr] {
    color: #374151;
}

.tickets-scope-toggle .tst-btn.active[b-i08jk8fclr] {
    background: #fff;
    color: #c2410c;
    box-shadow: 0 1px 2px rgba(15, 23, 42, 0.08);
}

/* Bardzo wąski kafel (jedna kolumna dashboardu na telefonie): zostają same ikony —
   dwa napisy plus tytuł kafla nie mieszczą się w wierszu, a ikony wystarczą do wyboru. */
@media (max-width: 480px) {
    .tickets-scope-toggle .tst-btn-text[b-i08jk8fclr] {
        display: none;
    }

    .tickets-scope-toggle .tst-btn[b-i08jk8fclr] {
        padding: 4px 7px;
    }
}
/* /Components/Pages/Index/TicketsStatusFilter.razor.rz.scp.css */
/* Segment filtra statusów — ten sam kształt i paleta co TicketsScopeToggle obok.
   Oba paski stoją w jednym wierszu nagłówka i oba odpowiadają na „co teraz widzę",
   więc różnica w wyglądzie czytałaby się jak różnica w roli. */
.tickets-status-filter[b-waic6h8zs6] {
    display: inline-flex;
    gap: 2px;
    padding: 2px;
    border-radius: 8px;
    background: #f3f4f6;
    /* Pięć segmentów bywa szersze niż wolne miejsce w nagłówku — wtedy zawijają się WEWNĄTRZ
       rowka, zamiast rozpychać kafel. */
    flex-wrap: wrap;
}

.tickets-status-filter .tsf-btn[b-waic6h8zs6] {
    appearance: none;
    border: 0;
    background: transparent;
    border-radius: 6px;
    padding: 4px 10px;
    font-size: 12px;
    font-weight: 600;
    line-height: 1.4;
    color: #6b7280;
    cursor: pointer;
    white-space: nowrap;
    transition: background 0.15s ease, color 0.15s ease;
}

.tickets-status-filter .tsf-btn:hover[b-waic6h8zs6] {
    color: #374151;
}

/* Aktywny segment w tej samej pomarańczy co przełącznik zakresu i aktywna zakładka na
   liście zgłoszeń — „gdzie jestem" ma mieć jeden kolor w całej aplikacji. */
.tickets-status-filter .tsf-btn.active[b-waic6h8zs6] {
    background: #fff;
    color: #c2410c;
    box-shadow: 0 1px 2px rgba(15, 23, 42, 0.08);
}
/* /Components/Pages/Index/TicketsViewToggle.razor.rz.scp.css */
/* Ikona przy przełączniku widoku (Kanban / lista) — rysowana MASKĄ na kolorze tła, tak samo
   jak pozostałe ikony nagłówków kafli pulpitu (.tnp-header-icon w notatkach zespołu,
   .la-header-icon w „Najnowszej aktywności"). Wcześniej to jedyne dwie ikony na pulpicie
   szły starą drogą: `background-image` z SVG + `filter: invert(...)` na przemalowanie czerni
   na szarość. Filtr trzeba było dobierać liczbami pod każdy odcień i nie dawał się przestawić
   w ciemnym motywie, maska bierze kolor wprost z `background-color`. */
.tvt-icon[b-rzd0e4p67a] {
    width: 16px;
    height: 16px;
    display: block;
    flex-shrink: 0;
    background-color: black;
}

.tvt-icon-kanban[b-rzd0e4p67a] {
    -webkit-mask: url('/images/bootstrap-icons/kanban.svg') no-repeat center / contain;
    mask: url('/images/bootstrap-icons/kanban.svg') no-repeat center / contain;
}

.tvt-icon-list[b-rzd0e4p67a] {
    -webkit-mask: url('/images/bootstrap-icons/list-ul.svg') no-repeat center / contain;
    mask: url('/images/bootstrap-icons/list-ul.svg') no-repeat center / contain;
}
/* /Components/Pages/Index/TimeCell.razor.rz.scp.css */
.timecell-wrapper-card[b-t7ic7pwbkp] {
    background: #ffffff;
    border-radius: 1rem;
    border: 1px solid #e5e7eb;
    box-shadow: 0 10px 30px rgba(15, 23, 42, 0.06);
    overflow: hidden;
    max-height: 220px;
    display: flex;
    flex-direction: column;
}

.timecell-loading[b-t7ic7pwbkp] {
    padding: 24px;
    text-align: center;
    color: #6c757d;
    font-size: 0.9rem;
}

[b-t7ic7pwbkp] .timecell-scheduler {
    border-radius: 0;
    border: none;
    max-height: 220px;
    overflow: hidden;
}

/* Bloki appointmentów */
.tc-appt-block[b-t7ic7pwbkp] {
    width: 100%;
    padding: 1px 5px;
    border-radius: 4px;
    cursor: pointer;
    overflow: hidden;
    white-space: nowrap;
    text-overflow: ellipsis;
}

.tc-appt-label[b-t7ic7pwbkp] {
    font-size: 0.72rem;
    font-weight: 600;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

/* kolory wg priorytetu */
.tc-priority-high[b-t7ic7pwbkp] {
    background: #fee2e2;
    color: #dc2626;
    border-left: 3px solid #dc2626;
}

.tc-priority-normal[b-t7ic7pwbkp] {
    background: #fef3c7;
    color: #b45309;
    border-left: 3px solid #f59e0b;
}

.tc-priority-low[b-t7ic7pwbkp] {
    background: #f3f4f6;
    color: #6b7280;
    border-left: 3px solid #9ca3af;
}
/* /Components/Pages/LogsAdmin/LogsAdmin.razor.rz.scp.css */
.logs-admin-toolbar[b-bzpn9rm56q] {
    background: #fff;
}

.logs-admin-grid-wrapper[b-bzpn9rm56q] {
    height: calc(100vh - 130px);
    overflow: hidden;
}

[b-bzpn9rm56q] .logs-admin-grid-wrapper .dxbl-grid {
    height: 100%;
}
/* /Components/Pages/Meetings/Meetings.razor.rz.scp.css */
.meetings-page[b-gyebp2a8hj] {
    display: flex;
    flex-direction: column;
    gap: 8px;
    height: 100%;
}

.meetings-page .toolbar[b-gyebp2a8hj] {
    padding: 4px 8px;
}

.meetings-toolbar-row[b-gyebp2a8hj] {
    display: flex;
    align-items: center;
    gap: 12px;
}

.meetings-toolbar-actions[b-gyebp2a8hj] {
    flex: 1 1 auto;
    min-width: 0;
}

@media (max-width: 640px) {
    .meetings-toolbar-row[b-gyebp2a8hj] {
        align-items: stretch;
        flex-direction: column;
    }
}

.meetings-page .scheduler-wrapper[b-gyebp2a8hj] {
    flex: 1 1 auto;
    min-height: 600px;
}

.meeting-form[b-gyebp2a8hj] {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 12px;
    min-width: 720px;
    max-width: 100%;
    padding: 8px;
}

.meeting-form .full[b-gyebp2a8hj] {
    grid-column: 1 / -1;
}

.meeting-form .meeting-link-row[b-gyebp2a8hj] {
    display: flex;
    gap: 8px;
    align-items: end;
}

.meeting-form .meeting-link-row .link-input[b-gyebp2a8hj] {
    flex: 1 1 auto;
}

.meeting-form .participants-list[b-gyebp2a8hj] {
    display: flex;
    flex-direction: column;
    gap: 4px;
    max-height: 200px;
    overflow-y: auto;
    border: 1px solid var(--dxbl-form-control-border-color, #ced4da);
    border-radius: 4px;
    padding: 6px;
    background: var(--dxbl-form-control-bg, #fff);
}

.meeting-form .participant-row[b-gyebp2a8hj] {
    display: grid;
    grid-template-columns: 1fr 1fr auto auto;
    gap: 6px;
    align-items: center;
}

.meeting-form .form-section-title[b-gyebp2a8hj] {
    font-weight: 600;
    margin-top: 8px;
    grid-column: 1 / -1;
}

.meetings-empty[b-gyebp2a8hj] {
    padding: 24px;
    color: var(--dxbl-secondary-text-color, #6c757d);
    text-align: center;
}
/* /Components/Pages/ProfileDropdown/Account/Account.razor.rz.scp.css */
/* ===== Karta profilu (hero) ===== */
.account-hero[b-iurpnym225] {
    display: flex;
    align-items: center;
    gap: 1.5rem;
    padding: 1.5rem 1.75rem;
    /* margines rozdzielający kartę profilu od panelu z zakładkami */
    margin-bottom: 1rem;
}

/* Awatar w kółku — tło z koloru grupy (wstrzykiwane inline z komponentu), tak samo jak kulka
   w prawym górnym rogu i kulki z inicjałami na zgłoszeniach. Litera konta jest pod spodem;
   logo grupy (jeśli jest) przykrywa kółko. Cień neutralny, bo tło nie zawsze jest pomarańczowe. */
.account-hero-avatar[b-iurpnym225] {
    position: relative;
    width: 72px;
    height: 72px;
    border-radius: 50%;
    flex-shrink: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    background: var(--main-color);
    box-shadow: 0 8px 20px rgba(15, 23, 42, 0.18);
}

.account-hero-avatar-img[b-iurpnym225] {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
    border-radius: 50%;
}

.account-hero-initials[b-iurpnym225] {
    color: #fff;
    font-weight: 700;
    font-size: 1.7rem;
    letter-spacing: 0.02em;
}

.account-hero-status[b-iurpnym225] {
    position: absolute;
    right: -3px;
    bottom: -3px;
    width: 16px;
    height: 16px;
    border-radius: 50%;
    background: #22c55e;
    border: 3px solid #fff;
    z-index: 2;
}

.account-hero-main[b-iurpnym225] {
    min-width: 0;
    flex: 1 1 auto;
}

.account-hero-name[b-iurpnym225] {
    margin: 0;
    font-size: 1.4rem;
    font-weight: 700;
    color: #111827;
    line-height: 1.2;
}

.account-hero-email[b-iurpnym225] {
    color: #9ca3af;
    font-size: 0.9rem;
    margin-top: 2px;
}

.account-hero-badges[b-iurpnym225] {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 8px;
    margin-top: 12px;
}

    /* Odznaki (te same co w menu profilu) — jednolita wysokość/odstępy */
    .account-hero-badges .badge[b-iurpnym225] {
        font-size: 0.78rem;
        padding: 0.4em 0.75em;
    }

/* ===== Panel z zakładkami ===== */
.account-panel[b-iurpnym225] {
    padding: 1.25rem 1.5rem 1.5rem;
}

/* ===== Nagłówek zakładki (przycisk edycji) ===== */
.account-panel-head[b-iurpnym225] {
    display: flex;
    justify-content: flex-end;
    align-items: center;
    min-height: 40px;
    margin: 0.5rem 0 1.25rem;
}

.account-edit-btn[b-iurpnym225] {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    padding: 8px 18px;
    border: 1px solid #e5e7eb;
    border-radius: 10px;
    background: #fff;
    color: #374151;
    font-weight: 600;
    font-size: 0.9rem;
    cursor: pointer;
    transition: background 0.15s ease, border-color 0.15s ease;
}

    .account-edit-btn:hover[b-iurpnym225] {
        background: #f8f9fa;
        border-color: #d1d5db;
    }

.account-edit-actions[b-iurpnym225] {
    display: flex;
    gap: 8px;
}

/* ===== Pola danych (etykieta + wartość) ===== */
.acc-fields[b-iurpnym225] {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 1.4rem 2.5rem;
}

.acc-field[b-iurpnym225] {
    display: flex;
    flex-direction: column;
    gap: 8px;
    padding-bottom: 10px;
    border-bottom: 1px solid #eef0f2;
    min-width: 0;
}

.acc-field-full[b-iurpnym225] {
    grid-column: 1 / -1;
}

.acc-label[b-iurpnym225] {
    font-size: 0.72rem;
    font-weight: 600;
    letter-spacing: 0.05em;
    text-transform: uppercase;
    color: #9ca3af;
}

.acc-value[b-iurpnym225] {
    font-size: 0.95rem;
    color: #111827;
    word-break: break-word;
    min-height: 1.4rem;
}

/* ===== Formularz zmiany hasła (styl jak „Dane konta") ===== */
.account-form-narrow[b-iurpnym225] {
    max-width: 640px;
}

.acc-fields.acc-fields-1col[b-iurpnym225] {
    grid-template-columns: 1fr;
}

.acc-pw-reqs[b-iurpnym225] {
    list-style: none;
    padding: 0;
    margin: 1rem 0 0;
    display: flex;
    flex-direction: column;
    gap: 6px;
}

    .acc-pw-reqs li[b-iurpnym225] {
        font-size: 0.82rem;
        color: #ef4444;
        display: flex;
        align-items: center;
        gap: 8px;
    }

        .acc-pw-reqs li[b-iurpnym225]::before {
            content: "";
            width: 6px;
            height: 6px;
            border-radius: 50%;
            background: currentColor;
            flex-shrink: 0;
        }

.account-panel-head-end[b-iurpnym225] {
    margin: 1.5rem 0 0;
}

@media (max-width: 768px) {
    .acc-fields[b-iurpnym225] {
        grid-template-columns: 1fr;
    }

    .account-hero[b-iurpnym225] {
        flex-wrap: wrap;
    }
}

/* ===== Przypisany pracownik (opiekun konta) ===== */
.acc-assigned[b-iurpnym225] {
    display: flex;
    align-items: center;
    gap: 12px;
    margin-top: 1.6rem;
    padding: 12px 16px;
    background: #f8fafc;
    border: 1px solid #eef0f2;
    border-radius: 12px;
}

.acc-assigned-icon[b-iurpnym225] {
    opacity: 0.65;
    flex-shrink: 0;
}

.acc-assigned-label[b-iurpnym225] {
    font-size: 0.72rem;
    font-weight: 600;
    letter-spacing: 0.05em;
    text-transform: uppercase;
    color: #9ca3af;
}

.acc-assigned-name[b-iurpnym225] {
    font-size: 0.95rem;
    font-weight: 500;
    color: #111827;
    margin-top: 1px;
}

/* ===== Parametry — sekcje z wierszami ustawień ===== */
.param-page[b-iurpnym225] {
    margin-top: 8px;
    padding-top: 0.25rem;
}

.param-intro[b-iurpnym225] {
    color: #9ca3af;
    font-size: 0.9rem;
    margin: 0 0 1.5rem;
}

.param-section[b-iurpnym225] {
    margin-bottom: 1.75rem;
}

    .param-section:last-child[b-iurpnym225] {
        margin-bottom: 0;
    }

.param-section-title[b-iurpnym225] {
    font-size: 0.72rem;
    font-weight: 700;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: #9ca3af;
    margin: 0 0 0.6rem 0.25rem;
}

.param-card[b-iurpnym225] {
    border: 1px solid #eef0f2;
    border-radius: 14px;
    overflow: hidden;
    box-shadow: 0 1px 2px rgba(15, 23, 42, 0.03);
}

.param-row[b-iurpnym225] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 1.5rem;
    padding: 1rem 1.25rem;
    border-bottom: 1px solid #f1f3f5;
}

    .param-row:last-child[b-iurpnym225] {
        border-bottom: none;
    }

.param-row-info[b-iurpnym225] {
    min-width: 0;
}

.param-row-title[b-iurpnym225] {
    font-size: 0.95rem;
    font-weight: 500;
    color: #111827;
}

.param-row-desc[b-iurpnym225] {
    font-size: 0.82rem;
    color: #9ca3af;
    margin-top: 3px;
}

.param-row-control[b-iurpnym225] {
    flex-shrink: 0;
    min-width: 240px;
    max-width: 260px;
    display: flex;
    justify-content: flex-end;
}

    .param-row-control .param-combo[b-iurpnym225] {
        width: 100%;
    }

@media (max-width: 640px) {
    .param-row[b-iurpnym225] {
        flex-direction: column;
        align-items: stretch;
        gap: 0.75rem;
    }

    .param-row-control[b-iurpnym225] {
        min-width: 0;
        max-width: none;
        justify-content: flex-start;
    }
}

/* ===== Pusty stan (Powiadomienia) ===== */
.account-empty[b-iurpnym225] {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 12px;
    padding: 3rem 1rem;
    color: #9ca3af;
    text-align: center;
}

.account-empty-icon[b-iurpnym225] {
    opacity: 0.4;
}

.account-empty p[b-iurpnym225] {
    margin: 0;
    font-size: 0.95rem;
}
/* /Components/Pages/Projects/Detail.razor.rz.scp.css */
.proj-page[b-fpez0eit9x] {
    /* Padding poziomy siedzi na .proj-page-wrap (obejmuje też logi), tutaj zostaje sam pionowy —
       inaczej treść dostawałaby go dwa razy. */
    padding: 1rem 0;
    width: 100%;
    max-width: 100%;
    box-sizing: border-box;
    overflow-x: hidden;
}

/* DxFormLayoutItem to element siatki (CSS grid); domyslnie min-width: auto,
   przez co nie kurczy sie ponizej szerokosci swojej zawartosci (np. wykresu
   Gantta). Wymuszamy min-width: 0, aby wewnetrzny overflow-x: auto dzialal. */
.proj-page[b-fpez0eit9x]  .proj-flitem {
    min-width: 0;
    max-width: 100%;
}

/* === Nagłówek strony ===
   Wartości przepisane ze szczegółów zgłoszenia (Tickets/Detail.razor.css, .ticket-summary-*).
   Izolacja CSS nie pozwala tych reguł współdzielić, więc liczby są powtórzone i zmienia się
   je w obu plikach naraz — tak samo jak przy banerze archiwum niżej. */
/* Nagłówek stoi WEWNĄTRZ pierwszej karty lewej kolumny (jak w zgłoszeniu), więc odcina się
   od sekcji „Opis" pod spodem linią, a nie marginesem na gołym tle. */
.proj-head[b-fpez0eit9x] {
    margin-bottom: 0.75rem;
    padding-bottom: 0.7rem;
    border-bottom: 1px solid #f1f2f4;
}

.proj-head-top[b-fpez0eit9x] {
    display: flex;
    align-items: center;
    gap: 0.6rem;
    flex-wrap: wrap;
}

/* Numer projektu — 1:1 z .ticket-summary-number ze zgłoszenia. */
.proj-number[b-fpez0eit9x] {
    background: #f3f4f6;
    border-radius: 999px;
    padding: 0.1rem 0.6rem;
    color: #1f2328;
    font-size: 0.8rem;
    font-weight: 600;
    flex-shrink: 0;
}

/* Tytuł zawija się na tyle wierszy, ile trzeba — 1:1 z .ticket-summary-subject ze zgłoszenia. */
.proj-title[b-fpez0eit9x] {
    font-weight: 600;
    font-size: 1.05rem;
    color: #1f2328;
    flex: 1 1 auto;
    min-width: 0;
    overflow-wrap: anywhere;
    word-break: break-word;
}

/* Strzałka powrotu — ten sam zmniejszony przycisk co w zgłoszeniu (.ticket-summary-back).
   Bez tego DxButton brał domyślne wypełnienie i strzałka była wyraźnie większa niż tam. */
.proj-page[b-fpez0eit9x]  .proj-back .dxbl-btn,
.proj-page[b-fpez0eit9x]  .proj-refresh .dxbl-btn {
    padding: 0.2rem 0.4rem !important;
    color: #57606a !important;
}

/* Zamknięcie projektu na czerwono — jak .ticket-action-close w zgłoszeniu. */
.proj-page[b-fpez0eit9x]  .proj-action-close .dxbl-btn {
    color: #b91c1c !important;
}

/* Akcje przy prawej krawędzi — jak pasek ikon nad rozmową w zgłoszeniu. */
.proj-head-actions[b-fpez0eit9x] {
    display: inline-flex;
    align-items: center;
    gap: 2px;
    margin-left: auto;
    flex-shrink: 0;
}

.proj-head-meta[b-fpez0eit9x] {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 14px;
    margin-top: 8px;
}

/* Status bez badge'a: kropka w kolorze statusu plus nazwa. Ten sam zapis co na liście
   projektów i w szczegółach zgłoszenia. */
.status-tag[b-fpez0eit9x] {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    font-size: 0.78rem;
    font-weight: 600;
    color: #374151;
    white-space: nowrap;
}

.status-tag-dot[b-fpez0eit9x] {
    width: 7px;
    height: 7px;
    border-radius: 2px;
    display: inline-block;
    flex-shrink: 0;
}

/* Pasek archiwum — wygląd 1:1 z banerem nad rozmową w zarchiwizowanym zgłoszeniu
   (Tickets/Detail.razor.css, .ticket-archived-banner). Izolacja CSS nie pozwala tych
   reguł współdzielić, więc wartości są powtórzone i zmienia się je w obu plikach naraz. */
.proj-archived-banner[b-fpez0eit9x] {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    padding: 0.6rem 0.9rem;
    margin-bottom: 0.75rem;
    background: #fff8e1;
    border: 1px solid #f2d98a;
    border-radius: 8px;
    color: #7a5c00;
    font-size: 0.9rem;
    width: 100%;
}

.proj-archived-text[b-fpez0eit9x] {
    flex: 1 1 auto;
}

.proj-archived-restore[b-fpez0eit9x] {
    flex: 0 0 auto;
}

.proj-layout[b-fpez0eit9x] {
    display: flex;
    gap: 0.9rem;
    align-items: stretch;
    min-width: 0;
    max-width: 100%;
}

.proj-main[b-fpez0eit9x] {
    flex: 1 1 auto;
    min-width: 0;
    display: flex;
    flex-direction: column;
    gap: 0.75rem;
}

.proj-aside[b-fpez0eit9x] {
    /* 336px zamiast 320: w polu właścicieli stoją pastylki z pełnymi adresami e-mail
       (kkrysiak@wms24.eu), które przy 320 nie mieściły się obok krzyżyka usunięcia i łamały
       się po jednej na wiersz. Kolumna główna oddaje te kilkanaście pikseli sama — ma
       flex: 1 1 auto, więc bierze to, co zostanie. */
    flex: 0 0 336px;
    max-width: 336px;
    display: flex;
    flex-direction: column;
    /* Ten sam odstęp między kartami co w kolumnie głównej (.proj-main). Bez niego karty
       panelu bocznego — metryczka, uczestnicy — stykały się krawędziami, a ostatnia
       dochodziła bez marginesu do sekcji pod spodem. */
    gap: 0.75rem;
}

/* Karta wypełniająca całą wysokość kolumny (prawy panel "Informacje o projekcie") */
.proj-card-fill[b-fpez0eit9x] {
    flex: 1 1 auto;
}

.proj-card[b-fpez0eit9x] {
    background: #fff;
    border: 1px solid #e6e8eb;
    border-radius: 12px;
    padding: 0.85rem 1rem;
    min-width: 0;
    max-width: 100%;
}

/* === Nagłówki kart ===
   Zgłoszenie używa DWÓCH stylów i projekt idzie za tym samym podziałem:
   • karty kolumny głównej (opis, załączniki, zgłoszenia) — jak .ticket-tasks-header:
     zwykłą wielkością liter, w kolorze tekstu, bo to sekcje czytanej treści;
   • karty panelu bocznego — jak .details-card-header (reguła niżej): wersaliki, bo to
     etykiety metryczki, które mają ustąpić pierwszeństwa danym obok. */
.proj-card-header[b-fpez0eit9x] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 0.5rem;
    font-size: 0.85rem;
    font-weight: 600;
    color: #1f2328;
}

/* Panel boczny — 1:1 z .details-card-header ze szczegółów zgłoszenia. */
.proj-aside .proj-card-header[b-fpez0eit9x] {
    gap: 0.25rem;
    font-size: 0.78rem;
    font-weight: 700;
    color: #6e7781;
    text-transform: uppercase;
    letter-spacing: 0.04em;
}

    /* Tytuł zabiera wolną szerokość, akcje zbijają się w prawym rogu — przy dwóch przyciskach
       w jednym nagłówku samo space-between rozrzucało je po całej karcie. */
    .proj-aside .proj-card-header > span:first-child[b-fpez0eit9x] {
        margin-right: auto;
        min-width: 0;
    }

.proj-hint[b-fpez0eit9x] {
    font-weight: 500;
    text-transform: none;
    letter-spacing: normal;
    color: #9aa0a6;
    font-size: 0.72rem;
}

.proj-card-body[b-fpez0eit9x] {
    margin-top: 0.7rem;
    min-width: 0;
    max-width: 100%;
}

.proj-overflow-x[b-fpez0eit9x] {
    width: 100%;
    max-width: 100%;
    overflow-x: auto;
}

/* Opis jest dziś Markdownem renderowanym do HTML-a (klasa .md-content z markdown.css),
   więc BEZ white-space: pre-wrap — inaczej wszystkie znaki końca wiersza z wygenerowanego
   znacznika zamieniłyby się w puste linie między akapitami. */
.proj-desc[b-fpez0eit9x] {
    color: #1f2328;
    font-size: 0.9rem;
}

.proj-row[b-fpez0eit9x] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 0.28rem 0;
    font-size: 0.85rem;
    border-bottom: 1px solid #f1f2f4;
}

.proj-row:last-child[b-fpez0eit9x] {
    border-bottom: none;
}

.proj-row .lbl[b-fpez0eit9x] {
    color: #57606a;
}

.proj-row .val[b-fpez0eit9x] {
    font-weight: 500;
    color: #1f2328;
}

/* === Metryczka w trybie edycji ===
   W trybie odczytu wiersz rozpycha etykietę i wartość do krawędzi (space-between) i to jest
   dobre: krótkie wartości siadają równo przy prawej. W edycji wartością jest kontrolka, więc
   ten sam zapis dawał bałagan — każde pole zaczynało się w innym miejscu (bo etykiety mają
   różną długość), a wysoki TagBox z produktami rozpychał wiersz i wypychał etykietę na środek.
   Dlatego na czas edycji wiersz staje się siatką: stała kolumna etykiet, kontrolki równo pod
   sobą i wyrównane do GÓRY, żeby etykieta trzymała się pierwszej linii wysokiego pola. */
.proj-card-body.is-editing .proj-row[b-fpez0eit9x] {
    /* Etykieta NAD polem, nie obok. Panel ma 336 px, więc na dwie kolumny zostawało dla
       kontrolki ~200 px — pastylka z pełnym adresem e-mail (jpaternoga@wms24.eu) się w tym
       nie mieściła i wychodziła poza kartę, a długie etykiety („Łączny rzeczywisty czas
       pracy") łamały się na trzy linie. W pionie każde pole ma całą szerokość panelu. */
    display: flex;
    flex-direction: column;
    align-items: stretch;
    gap: 0.25rem;
    padding: 0.4rem 0;
}

    .proj-card-body.is-editing .proj-row .lbl[b-fpez0eit9x] {
        line-height: 1.3;
    }

    /* Kluczowe dla pól z pastylkami (właściciele, produkty): bez min-width: 0 element flex
       nie kurczy się poniżej swojej zawartości, więc długa pastylka rozpychała wiersz
       i wystawała poza krawędź karty. */
    .proj-card-body.is-editing .proj-row .val[b-fpez0eit9x] {
        min-width: 0;
        max-width: 100%;
        overflow: hidden;
    }

/* Kontrolki DevExpress renderują się w zagnieżdżonych elementach bez atrybutu izolacji CSS,
   więc szerokość ustawiamy przez ::deep — inaczej każda brałaby swoją naturalną. */
.proj-page[b-fpez0eit9x]  .proj-card-body.is-editing .proj-row .val > * {
    width: 100%;
    max-width: 100%;
    min-width: 0;
}

/* Pastylki w polach wielokrotnego wyboru (właściciele, produkty).

   TO JEST właściwa przyczyna wychodzenia poza kartę: globalny devexpress.css ustawia
   `.dxbl-tag { max-width: max-content !important }`, więc pastylka nigdy nie kurczy się
   poniżej swojej treści — a „jpaternoga@wms24.eu" jest szersze niż panel na 336 px.
   Nadpisujemy to WYŁĄCZNIE w metryczce projektu (globalnej reguły nie ruszamy, bo
   w szerokich formularzach max-content jest w porządku), stąd konieczne !important. */
.proj-page[b-fpez0eit9x]  .proj-card-body.is-editing .proj-row .val .dxbl-tag {
    max-width: 100% !important;
    overflow: hidden;
    text-overflow: ellipsis;
}

@media (max-width: 992px) {
    .proj-layout[b-fpez0eit9x] {
        flex-direction: column;
    }

    .proj-aside[b-fpez0eit9x] {
        flex-basis: auto;
        max-width: none;
        width: 100%;
    }
}

/* Wykres Gantta w trybie pełnoekranowym (popup) */
.gantt-overlay[b-fpez0eit9x] {
    position: fixed;
    inset: 0;
    z-index: 1080;
    background: #fff;
    display: flex;
    flex-direction: column;
    padding: 1rem 1.25rem;
    box-sizing: border-box;
}

.gantt-overlay-bar[b-fpez0eit9x] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 1rem;
    margin-bottom: 0.75rem;
}

.gantt-overlay-title[b-fpez0eit9x] {
    font-weight: 600;
    font-size: 1.05rem;
    color: #1f2328;
}

.gantt-overlay-right[b-fpez0eit9x] {
    display: flex;
    align-items: center;
    gap: 1rem;
}

.gantt-overlay-close[b-fpez0eit9x] {
    border: none;
    background: transparent;
    font-size: 1.25rem;
    line-height: 1;
    cursor: pointer;
    padding: 0.25rem 0.5rem;
    color: #57606a;
    border-radius: 0.375rem;
}

.gantt-overlay-close:hover[b-fpez0eit9x] {
    background: #f0f1f3;
    color: #1f2328;
}

.gantt-overlay-body[b-fpez0eit9x] {
    flex: 1 1 auto;
    min-height: 0;
    overflow: auto;
}

/* Przycisk otwierający wykres Gantta w nagłówku sekcji "Zgłoszenia" */
.proj-page[b-fpez0eit9x]  .proj-gantt-btn {
    white-space: nowrap;
}

/* Edycja informacji o projekcie */
.proj-page[b-fpez0eit9x]  .proj-combo {
    min-width: 160px;
}

/* Kontener strony — odpowiednik .ticket-page ze zgłoszenia: kolumna flex, w której logi są
   ostatnim dzieckiem. Padding poziomy siedzi tutaj (a nie na .proj-logs), żeby sekcja logów
   miała dokładnie tę samą szerokość co karty nad nią. */
.proj-page-wrap[b-fpez0eit9x] {
    display: flex;
    flex-direction: column;
    width: 100%;
    max-width: 100%;
    box-sizing: border-box;
    padding: 0 1.25rem;
}

/* Sam odstęp — resztą (szerokość, wyrównanie) zajmuje się kontener wyżej. W ZGŁOSZENIU
   odstęp nad logami daje gap .ticket-page i dlatego .ticket-logs nie ma już własnego;
   tutaj .proj-page-wrap gapa NIE ma, więc odstęp musi zostać na tej klasie. */
.proj-logs[b-fpez0eit9x] {
    margin-top: 1rem;
    padding-top: 1rem;
    width: 100%;
    max-width: 100%;
    box-sizing: border-box;
}

/* Logi nie mają już własnej karty — ramkę i zaokrąglenie rysuje DxFormLayoutGroup w komponencie
   Logs, a nakładanie na to .proj-card dawało pudełko w pudełku. Zniknęła z tym potrzeba
   zdejmowania ramki z siatki w środku. */

/* Zgłaszający projektu — lista osób po stronie klienta. Ten sam rytm co wiersze metryczki
   (.proj-row): kropka w kolorze grupy, nazwisko, adres i krzyżyk usunięcia po prawej. */
.proj-participants[b-fpez0eit9x] {
    display: flex;
    flex-direction: column;
}

.proj-participant[b-fpez0eit9x] {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    padding: 0.28rem 0;
    font-size: 0.85rem;
    border-bottom: 1px solid #f1f2f4;
}

.proj-participant:last-child[b-fpez0eit9x] {
    border-bottom: none;
}

.proj-participant-dot[b-fpez0eit9x] {
    width: 8px;
    height: 8px;
    border-radius: 50%;
    flex: 0 0 auto;
}

.proj-participant-name[b-fpez0eit9x] {
    font-weight: 500;
    color: #1f2328;
}

/* Adres schodzi na drugi plan i ustępuje miejsca, gdy nazwisko jest długie. */
.proj-participant-mail[b-fpez0eit9x] {
    color: #57606a;
    margin-left: auto;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.proj-page[b-fpez0eit9x]  .proj-participant-remove {
    padding: 0 0.15rem;
}

/* Zdanie o tym, że lista niczego nie nadaje — drobne i wyszarzone, bo to przypis do karty,
   a nie jej treść. Odstęp u góry oddziela je od ostatniego nazwiska. */
.proj-participants-hint[b-fpez0eit9x] {
    margin: 0.55rem 0 0;
    font-size: 0.72rem;
    line-height: 1.35;
    color: #6b7280;
}

/* =====================================================================
   OPIS PROJEKTU (Markdown)
   ===================================================================== */

/* Nagłówek karty jest przyciskiem zwijania — ten sam zapis co w opisie zgłoszenia:
   cały wiersz klikalny, strzałka obraca się w miejscu zamiast drugiego pliku SVG. */
.proj-desc-toggle[b-fpez0eit9x] {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    background: none;
    border: none;
    padding: 0;
    cursor: pointer;
    font: inherit;
    color: inherit;
    text-transform: inherit;
    letter-spacing: inherit;
}

.proj-desc-chevron[b-fpez0eit9x] {
    width: 12px;
    height: 12px;
    display: block;
    flex-shrink: 0;
    background-color: #6b7280;
    transition: transform 0.12s ease;
    -webkit-mask: url('/images/bootstrap-icons/chevron-down.svg') no-repeat center / contain;
    mask: url('/images/bootstrap-icons/chevron-down.svg') no-repeat center / contain;
}

    .proj-desc-chevron.is-collapsed[b-fpez0eit9x] {
        transform: rotate(-90deg);
    }

/* Drobna podpowiedź pod polem — dziś już tylko przy załącznikach (opis ma własny edytor). */
.proj-desc-hint[b-fpez0eit9x] {
    margin-top: 0.4rem;
    font-size: 0.76rem;
    color: #6b7280;
}

/* Zwinięcie długiego opisu — ta sama zasada co przy wiadomościach w zgłoszeniu: przycinamy
   wysokość i dokładamy „Pokaż więcej", zamiast oddawać pół ekranu jednej karcie. */
.proj-desc.is-clamped[b-fpez0eit9x] {
    max-height: 18rem;
    overflow: hidden;
    -webkit-mask-image: linear-gradient(to bottom, #000 72%, transparent 100%);
    mask-image: linear-gradient(to bottom, #000 72%, transparent 100%);
}

.proj-desc-more[b-fpez0eit9x] {
    background: transparent;
    border: none;
    padding: 0.35rem 0 0 0;
    font-size: 0.78rem;
    font-weight: 600;
    color: #c2410c;
    cursor: pointer;
}

    .proj-desc-more:hover[b-fpez0eit9x] {
        text-decoration: underline;
    }


/* =====================================================================
   ZAŁĄCZNIKI PROJEKTU
   ===================================================================== */
.proj-attachments[b-fpez0eit9x] {
    display: flex;
    flex-direction: column;
}

.proj-attachment[b-fpez0eit9x] {
    display: flex;
    align-items: center;
    gap: 0.65rem;
    padding: 0.45rem 0;
    border-bottom: 1px solid #f1f2f4;
    min-width: 0;
}

    .proj-attachment:last-child[b-fpez0eit9x] {
        border-bottom: none;
    }

/* Miniatura jest przyciskiem podglądu, nie odnośnikiem — plik otwiera się na wierzchu
   strony, a nie w nowej karcie, więc nie ma dokąd nawigować. */
.proj-attachment-thumb[b-fpez0eit9x] {
    width: 42px;
    height: 42px;
    flex: 0 0 auto;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 0;
    border: 1px solid #e5e7eb;
    border-radius: 6px;
    background: #f3f4f6;
    overflow: hidden;
    cursor: pointer;
}

    .proj-attachment-thumb img[b-fpez0eit9x] {
        width: 100%;
        height: 100%;
        object-fit: cover;
    }

    .proj-attachment-thumb:hover[b-fpez0eit9x] {
        border-color: #f97316;
    }

.proj-attachment-meta[b-fpez0eit9x] {
    display: flex;
    flex-direction: column;
    min-width: 0;
    gap: 1px;
}

.proj-attachment-name[b-fpez0eit9x] {
    background: none;
    border: none;
    padding: 0;
    text-align: left;
    font-size: 0.85rem;
    font-weight: 500;
    color: #1f2328;
    cursor: pointer;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

    .proj-attachment-name:hover[b-fpez0eit9x] {
        color: #f97316;
        text-decoration: underline;
    }

.proj-attachment-info[b-fpez0eit9x] {
    font-size: 0.72rem;
    color: #6b7280;
}

.proj-attachment-desc[b-fpez0eit9x] {
    font-size: 0.76rem;
    color: #57606a;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.proj-attachment-actions[b-fpez0eit9x] {
    margin-left: auto;
    display: inline-flex;
    align-items: center;
    flex-shrink: 0;
}

.proj-page[b-fpez0eit9x]  .proj-attachment-actions .dxbl-btn {
    padding: 0 0.15rem;
}

/* =====================================================================
   WŁAŚCICIELE PROJEKTU
   ===================================================================== */

/* Wiersz „piętrowy": etykieta u góry, wartość pod nią na całej szerokości. Ani lista wyboru,
   ani kilka nazwisk nie mieszczą się obok etykiety w panelu szerokim na 320 px. */
.proj-row-stack[b-fpez0eit9x] {
    display: flex;
    flex-direction: column;
    align-items: stretch;
    gap: 0.3rem;
}

    .proj-row-stack .val[b-fpez0eit9x] {
        font-weight: 500;
    }

.proj-owners[b-fpez0eit9x] {
    display: flex;
    flex-direction: column;
    gap: 0.3rem;
}

.proj-owner[b-fpez0eit9x] {
    display: inline-flex;
    align-items: center;
    gap: 0.4rem;
    min-width: 0;
}

.proj-owner-name[b-fpez0eit9x] {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

/* Właściciel główny wyróżniony obwódką kulki — kolejność sama tego nie mówi, a to on stoi
   w filtrach i w kolumnie „Właściciel". */
.proj-owner.is-main .tl-avatar[b-fpez0eit9x] {
    box-shadow: 0 0 0 2px #fff, 0 0 0 3px #f97316;
}

.proj-owner.is-main .proj-owner-name[b-fpez0eit9x] {
    font-weight: 600;
}

.proj-owners-hint[b-fpez0eit9x] {
    display: block;
    margin-top: 0.25rem;
    font-size: 0.72rem;
    color: #6b7280;
}

/* Kulka z inicjałami — ten sam rozmiar i krój co na liście projektów i na Kanbanie. */
.tl-avatar[b-fpez0eit9x] {
    width: 22px;
    height: 22px;
    border-radius: 50%;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    font-size: 10px;
    font-weight: 700;
    line-height: 1;
    color: #fff;
    letter-spacing: 0.02em;
}

/* Akcja w nagłówku karty to SAMA ikonka (opis w tooltipie) — panel boczny jest wąski,
   a etykieta tekstowa łamała się na dwie linie i wychodziła poza kartę. */
.proj-page[b-fpez0eit9x]  .proj-card-action .dxbl-btn {
    padding: 0.1rem 0.25rem !important;
    min-width: 0 !important;
}

/* Stopka popupów w szczegółach projektu — ten sam układ co na liście projektów
   (.topics-popup-footer). Same DxButtony w FooterContentTemplate stykają się bokami. */
.proj-popup-footer[b-fpez0eit9x] {
    display: flex;
    justify-content: flex-end;
    gap: 8px;
}


/* === Notatki zespołu projektu ===
   Wygląd wzięty z listy wpisów na tablicy zespołu: pastylka z rodzajem po lewej, treść obok,
   autor i data pod spodem. Izolacja CSS nie pozwala tamtych reguł współdzielić. */
.proj-notes[b-fpez0eit9x] {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: 10px;
}

.proj-note[b-fpez0eit9x] {
    display: flex;
    align-items: flex-start;
    gap: 8px;
}

.proj-note-kind[b-fpez0eit9x] {
    flex-shrink: 0;
    padding: 1px 7px;
    border-radius: 10px;
    font-size: 0.68rem;
    font-weight: 600;
    line-height: 1.6;
    white-space: nowrap;
}

.proj-note-kind-note[b-fpez0eit9x] {
    background: #dbeafe;
    color: #1d4ed8;
}

.proj-note-kind-handover[b-fpez0eit9x] {
    background: #fdeecd;
    color: #92400e;
}

.proj-note-kind-alert[b-fpez0eit9x] {
    background: #fde0e0;
    color: #b91c1c;
}

.proj-note-body[b-fpez0eit9x] {
    min-width: 0;
    flex: 1 1 auto;
}

.proj-note-title[b-fpez0eit9x] {
    font-weight: 600;
    font-size: 0.82rem;
    color: #111827;
}

/* Notatka bywa wklejona z edytora razem z akapitami — bez zdjęcia marginesów
   pierwszy i ostatni odstają od reszty wiersza. */
.proj-note-text[b-fpez0eit9x] {
    font-size: 0.82rem;
    color: #374151;
    overflow-wrap: anywhere;
}

    .proj-note-text[b-fpez0eit9x]  p:first-child {
        margin-top: 0;
    }

    .proj-note-text[b-fpez0eit9x]  p:last-child {
        margin-bottom: 0;
    }

.proj-note-meta[b-fpez0eit9x] {
    margin-top: 2px;
    font-size: 0.7rem;
    color: #6b7280;
}

.proj-note-dot[b-fpez0eit9x] {
    margin: 0 4px;
}

/* Odnośnik do pełnej tablicy w nagłówku karty — dosunięty do prawej, jak akcje
   w nagłówkach pozostałych kart projektu. */
.proj-notes-all[b-fpez0eit9x] {
    margin-left: auto;
    font-size: 0.72rem;
    font-weight: 600;
    color: #c2410c;
    text-decoration: none;
}

    .proj-notes-all:hover[b-fpez0eit9x] {
        text-decoration: underline;
    }

.proj-note-add[b-fpez0eit9x] {
    display: flex;
    align-items: center;
    gap: 6px;
    margin-top: 10px;
}

.proj-note-add-input[b-fpez0eit9x] {
    flex: 1 1 auto;
    min-width: 0;
}

/* === Odnośniki projektu ===
   Lista pionowa, jeden odnośnik na wiersz: ikona rodzaju, podpis, po prawej kłódka
   (link wewnętrzny) i akcje. Podpis dostaje wielokropek — adresy bywają długie,
   a prawa kolumna jest wąska. */
.proj-links[b-fpez0eit9x] {
    display: flex;
    flex-direction: column;
    gap: 2px;
}

.proj-link[b-fpez0eit9x] {
    display: flex;
    align-items: center;
    gap: 6px;
    min-width: 0;
    padding: 2px 0;
}

.proj-link-main[b-fpez0eit9x] {
    display: inline-flex;
    align-items: center;
    gap: 7px;
    min-width: 0;
    flex: 1 1 auto;
    color: #1f2937;
    text-decoration: none;
    font-size: 0.82rem;
}

    .proj-link-main:hover[b-fpez0eit9x] {
        color: #c2410c;
        text-decoration: underline;
    }

/* Ikona przez maskę, jak .date-icon na kartach listy — bierze kolor tekstu obok,
   więc podświetla się razem z odnośnikiem i sama działa w motywie ciemnym.
   Konkretny plik podstawia atrybut style (TopicVisuals.LinkIcon). */
.proj-link-icon[b-fpez0eit9x] {
    width: 14px;
    height: 14px;
    display: block;
    flex-shrink: 0;
    background-color: currentColor;
    -webkit-mask-repeat: no-repeat;
    mask-repeat: no-repeat;
    -webkit-mask-position: center;
    mask-position: center;
    -webkit-mask-size: contain;
    mask-size: contain;
}

.proj-link-label[b-fpez0eit9x] {
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

/* Kłódka „tego klient nie zobaczy" — ta sama maska co ikony odnośników, tylko przygaszona:
   to znacznik stanu, a nie akcja, więc nie ma konkurować z podpisem. */
.proj-link-internal[b-fpez0eit9x] {
    width: 12px;
    height: 12px;
    flex-shrink: 0;
    background-color: #9ca3af;
    -webkit-mask: url('/images/bootstrap-icons/lock.svg') no-repeat center / contain;
    mask: url('/images/bootstrap-icons/lock.svg') no-repeat center / contain;
}

/* Akcje pojawiają się dopiero pod kursorem — przy sześciu odnośnikach dwa przyciski
   przy każdym zamieniały listę w gąszcz ikon. Fokus klawiaturą pokazuje je tak samo,
   inaczej nie dałoby się ich dosięgnąć bez myszy. */
.proj-link-actions[b-fpez0eit9x] {
    display: inline-flex;
    align-items: center;
    gap: 2px;
    flex-shrink: 0;
    opacity: 0;
    transition: opacity 0.12s ease-in-out;
}

.proj-link:hover .proj-link-actions[b-fpez0eit9x],
.proj-link:focus-within .proj-link-actions[b-fpez0eit9x] {
    opacity: 1;
}

.proj-link-hint[b-fpez0eit9x] {
    margin: 8px 0 0 0;
    font-size: 0.72rem;
    color: #6b7280;
}

/* === Wspólna lista zgłoszeń i zadań === */

/* Ikona rodzaju wiersza — zadanie nie ma numeru, więc bez niej pusta komórka „#"
   wyglądałaby na brakujące dane, a nie na inny rodzaj wiersza. Przez maskę, jak
   pozostałe ikony w projekcie, żeby brała kolor z tekstu obok. */
.proj-item-ref[b-fpez0eit9x] {
    display: inline-flex;
    align-items: center;
    gap: 6px;
}

.proj-item-icon[b-fpez0eit9x] {
    width: 13px;
    height: 13px;
    display: block;
    flex-shrink: 0;
    background-color: #9ca3af;
    -webkit-mask-repeat: no-repeat;
    mask-repeat: no-repeat;
    -webkit-mask-position: center;
    mask-position: center;
    -webkit-mask-size: contain;
    mask-size: contain;
}

.proj-item-icon.is-ticket[b-fpez0eit9x] {
    -webkit-mask-image: url('/images/bootstrap-icons/ticket-detailed.svg');
    mask-image: url('/images/bootstrap-icons/ticket-detailed.svg');
}

.proj-item-icon.is-task[b-fpez0eit9x] {
    -webkit-mask-image: url('/images/bootstrap-icons/list-task.svg');
    mask-image: url('/images/bootstrap-icons/list-task.svg');
}

/* Pastylka wersji. Kolor przychodzi z TopicVisuals.VersionColor — rodzinę niesie wersja
   główna, odcień podwersja. Szerokość stała, żeby kolumna nie skakała między „1.5" a „10.0". */
.proj-version-tag[b-fpez0eit9x] {
    display: inline-block;
    min-width: 2.6rem;
    padding: 1px 8px;
    border-radius: 10px;
    font-size: 0.72rem;
    font-weight: 700;
    line-height: 1.5;
    text-align: center;
    color: #fff;
    white-space: nowrap;
    font-variant-numeric: tabular-nums;
}

/* „Bez wersji" nie dostaje koloru — to brak przypisania, a nie jeszcze jedno wydanie. */
.proj-version-tag.is-none[b-fpez0eit9x] {
    background: transparent;
    border: 1px dashed #d1d5db;
    color: #6b7280;
    font-weight: 600;
}

.proj-group-head[b-fpez0eit9x] {
    display: inline-flex;
    align-items: center;
    gap: 8px;
}

/* Licznik przy nagłówku grupy — ta sama pastylka co liczniki przy zakładkach panelu. */
.proj-group-count[b-fpez0eit9x] {
    display: inline-block;
    min-width: 1.25rem;
    padding: 0 6px;
    border-radius: 9px;
    background: #eef0f4;
    color: #4b5563;
    font-size: 0.68rem;
    font-weight: 700;
    line-height: 1.55;
    text-align: center;
}

/* Lista wyboru wersji siedzi w komórce tabeli — bez zwężenia rozpycha kolumnę. */
.proj-version-combo[b-fpez0eit9x] {
    max-width: 108px;
}

/* Grupa akcji w nagłówku karty — dwa przyciski obok siebie, dosunięte do prawej krawędzi.
   Bez wspólnego opakowania space-between z .proj-card-header rozrzucał je po całej szerokości
   nagłówka, zamiast trzymać razem naprzeciw tytułu. */
.proj-card-actions[b-fpez0eit9x] {
    display: inline-flex;
    align-items: center;
    gap: 2px;
    flex-shrink: 0;
    margin-left: auto;
}

/* === Pasek postępu w metryczce projektu ===
   Wygląd 1:1 z paskiem w panelu obok listy projektów (.d-progress-* w Projects.razor.css)
   i na kartach listy — izolacja CSS nie pozwala tych reguł współdzielić, więc wartości są
   powtórzone i zmienia się je we wszystkich miejscach naraz. Kolor wypełnienia przychodzi
   z TopicVisuals.ProgressColor w atrybucie style. */
.proj-progress-row[b-fpez0eit9x] {
    display: flex;
    align-items: center;
    gap: 10px;
    width: 100%;
}

.proj-progress-track[b-fpez0eit9x] {
    flex: 1 1 auto;
    height: 8px;
    border-radius: 999px;
    background: #eef0f4;
    overflow: hidden;
}

.proj-progress-bar[b-fpez0eit9x] {
    display: block;
    height: 100%;
    border-radius: 999px;
    transition: width 0.2s ease, background-color 0.2s ease;
}

.proj-progress-label[b-fpez0eit9x] {
    flex: 0 0 auto;
    font-size: 12px;
    font-weight: 600;
    color: #374151;
    font-variant-numeric: tabular-nums;
}

/* === Zajętość przy zmianie wersji ===
   Zapis leci do bazy i pociąga przeładowanie całej listy. Bez śladu zajętości wygląda to jak
   kliknięcie, które przepadło — i kusi, żeby kliknąć drugi raz, zanim pierwsza zmiana wróci. */
.proj-items-wrap[b-fpez0eit9x] {
    position: relative;
}

.proj-items-wrap.is-busy[b-fpez0eit9x] {
    /* Blokada kliknięć na czas zapisu — ta sama zmiana puszczona dwa razy rozjeżdża kolejność. */
    pointer-events: none;
}

.proj-items-busy[b-fpez0eit9x] {
    position: absolute;
    inset: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    background: rgba(255, 255, 255, 0.55);
    z-index: 5;
}

.proj-items-spinner[b-fpez0eit9x] {
    width: 26px;
    height: 26px;
    border: 3px solid rgba(249, 115, 22, 0.25);
    border-top-color: #f97316;
    border-radius: 50%;
    animation: proj-items-spin-b-fpez0eit9x 0.7s linear infinite;
}

@keyframes proj-items-spin-b-fpez0eit9x {
    to {
        transform: rotate(360deg);
    }
}
/* /Components/Pages/Projects/Grid.razor.rz.scp.css */
.toolbar[b-fmteclycps] {
    margin-bottom: 8px;
}

.topics-tree[b-fmteclycps] {
    width: 100%;
}

.topics-icon[b-fmteclycps] {
    margin-right: 6px;
    vertical-align: middle;
}

.topics-empty[b-fmteclycps] {
    padding: 24px;
    color: #888;
    text-align: center;
}

.topics-link-info[b-fmteclycps] {
    margin-bottom: 8px;
    color: #555;
}

.topics-link-listbox[b-fmteclycps] {
    height: 360px;
    width: 100%;
}

.topics-cmd-cell[b-fmteclycps] {
    display: flex;
    justify-content: flex-start;
    align-items: center;
    gap: 4px;
}

.topics-detail-empty[b-fmteclycps] {
    padding: 12px 16px;
    color: #888;
    font-style: italic;
}

.topics-grid[b-fmteclycps]  .dxbl-grid-detail-cell {
    padding: 8px 16px;
    background-color: #fafafa;
}

.topics-tree-wrapper[b-fmteclycps] {
    margin-top: 16px;
}

.topics-tree-header[b-fmteclycps] {
    margin: 8px 0;
    font-weight: 600;
    color: #444;
}

/* Produkty projektu jako pastylki z kodem — projekt bywa międzyproduktowy, więc w jednej
   komórce mieści się ich kilka. Wygląd 1:1 z tablicą projektów (Projects.razor.css)
   i z tagami na Kanbanie (KanbanBoard.razor.css) — izolacja CSS nie pozwala tych reguł
   współdzielić, więc wartości są powtórzone i zmienia się je we wszystkich trzech naraz. */
.pl-tags[b-fmteclycps] {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    flex-wrap: wrap;
    min-width: 0;
}

.pl-tag[b-fmteclycps] {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    font-size: 11px;
    font-weight: 500;
    line-height: 1;
    padding: 3px 7px;
    border-radius: 4px;
    border: 1px solid #e5e7eb;
    background: #fbfbfc;
    color: #4b5563;
    min-width: 0;
}

.pl-tag-text[b-fmteclycps] {
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.pl-tag-dot[b-fmteclycps] {
    width: 7px;
    height: 7px;
    border-radius: 2px;
    flex-shrink: 0;
}

.pl-tag-dot-product[b-fmteclycps] {
    background: var(--main-color);
}

/* Stopka popupu — DxPopup wstawia przyciski jeden przy drugim, bez żadnego odstępu,
   więc „Anuluj" i przycisk zatwierdzający się sklejały. Ten sam zapis co
   .proj-popup-footer w szczegółach projektu i .topics-popup-footer na tablicy. */
.proj-grid-popup-footer[b-fmteclycps] {
    display: flex;
    justify-content: flex-end;
    gap: 8px;
}

/* /Components/Pages/Projects/GridArchived.razor.rz.scp.css */
/* Archiwum projektów — wygląd 1:1 z siatką projektów (Grid.razor.css). Izolacja CSS
   nie pozwala tych reguł współdzielić, więc wartości są powtórzone i zmienia się je
   w obu plikach naraz. */

.toolbar[b-hpzsn2u75m] {
    margin-bottom: 8px;
}

.topics-empty[b-hpzsn2u75m] {
    padding: 24px;
    color: #888;
    text-align: center;
}

.topics-cmd-cell[b-hpzsn2u75m] {
    display: flex;
    justify-content: flex-start;
    align-items: center;
    gap: 4px;
}

/* === Status ===
   Bez pastylki — sam kolor kropki i nazwa. Pastylki (.pl-tag) niosą produkty, więc
   gdyby status też był pastylką, wiersz byłby ścianą ramek. */
.status-tag[b-hpzsn2u75m] {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    font-size: 11px;
    font-weight: 600;
    line-height: 1.4;
    color: #374151;
    white-space: nowrap;
}

.status-tag-dot[b-hpzsn2u75m] {
    width: 7px;
    height: 7px;
    border-radius: 2px;
    display: inline-block;
    flex-shrink: 0;
}

/* Produkty projektu jako pastylki z kodem — projekt bywa międzyproduktowy, więc
   w jednej komórce mieści się ich kilka. */
.pl-tags[b-hpzsn2u75m] {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    flex-wrap: wrap;
    min-width: 0;
}

.pl-tag[b-hpzsn2u75m] {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    font-size: 11px;
    font-weight: 500;
    line-height: 1;
    padding: 3px 7px;
    border-radius: 4px;
    border: 1px solid #e5e7eb;
    background: #fbfbfc;
    color: #4b5563;
    min-width: 0;
}

.pl-tag-text[b-hpzsn2u75m] {
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.pl-tag-dot[b-hpzsn2u75m] {
    width: 7px;
    height: 7px;
    border-radius: 2px;
    flex-shrink: 0;
}

.pl-tag-dot-product[b-hpzsn2u75m] {
    background: var(--main-color);
}
/* /Components/Pages/Projects/GridTrash.razor.rz.scp.css */
/* Kosz projektów — wygląd 1:1 z archiwum projektów (GridArchived.razor.css) i siatką
   projektów (Grid.razor.css). Izolacja CSS nie pozwala tych reguł współdzielić, więc
   wartości są powtórzone i zmienia się je we wszystkich plikach naraz. */

.toolbar[b-hwn69zob8p] {
    margin-bottom: 8px;
}

.topics-empty[b-hwn69zob8p] {
    padding: 24px;
    color: #888;
    text-align: center;
}

.topics-cmd-cell[b-hwn69zob8p] {
    display: flex;
    justify-content: flex-start;
    align-items: center;
    gap: 4px;
}

/* === Status ===
   Bez pastylki — sam kolor kropki i nazwa. Pastylki (.pl-tag) niosą produkty, więc
   gdyby status też był pastylką, wiersz byłby ścianą ramek. */
.status-tag[b-hwn69zob8p] {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    font-size: 11px;
    font-weight: 600;
    line-height: 1.4;
    color: #374151;
    white-space: nowrap;
}

.status-tag-dot[b-hwn69zob8p] {
    width: 7px;
    height: 7px;
    border-radius: 2px;
    display: inline-block;
    flex-shrink: 0;
}

/* Produkty projektu jako pastylki z kodem — projekt bywa międzyproduktowy, więc
   w jednej komórce mieści się ich kilka. */
.pl-tags[b-hwn69zob8p] {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    flex-wrap: wrap;
    min-width: 0;
}

.pl-tag[b-hwn69zob8p] {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    font-size: 11px;
    font-weight: 500;
    line-height: 1;
    padding: 3px 7px;
    border-radius: 4px;
    border: 1px solid #e5e7eb;
    background: #fbfbfc;
    color: #4b5563;
    min-width: 0;
}

.pl-tag-text[b-hwn69zob8p] {
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.pl-tag-dot[b-hwn69zob8p] {
    width: 7px;
    height: 7px;
    border-radius: 2px;
    flex-shrink: 0;
}

.pl-tag-dot-product[b-hwn69zob8p] {
    background: var(--main-color);
}
/* /Components/Pages/Projects/Projects.razor.rz.scp.css */
/* === Tablica projektów ===
   Ten sam układ co lista zgłoszeń (/tickets), tylko bez kolumny widoków: lista po lewej,
   panel szczegółów po prawej. Klasy struktury nazywają się tak samo jak tam (col, col-header,
   details-panel), bo motyw ciemny stroi je globalnie — patrz theme-dark.css. */
.toolbar[b-78f6bbl6i9] {
    margin-bottom: 8px;
}

/* === Kolumna strony ===
   Toolbar plus tablica w jednej kolumnie o wysokości obszaru treści — wysokość tablicy
   nie jest zgadywana ze stałej „100vh minus pasek nawigacji plus toolbar”, tylko
   zostaje jej to, co po nich zostanie. Padding na dole to margines pod tablicą.
   100% odnosi się do obszaru treści layoutu (wiersz siatki o znanej wysokości); calc
   jest awaryjny, gdyby procent nie miał się do czego odnieść — 3.5rem to pasek. */
.projects-page[b-78f6bbl6i9] {
    display: flex;
    flex-direction: column;
    box-sizing: border-box;
    height: calc(100dvh - 3.5rem);
    max-height: 100%;
    padding-bottom: 12px;
}

.projects-board[b-78f6bbl6i9] {
    --col-list: 380px;
    display: grid;
    grid-template-columns: var(--col-list) 1fr;
    gap: 12px;
    /* Baza 0, więc tablica nigdy nie rozpycha kolumny strony — dostaje resztę miejsca. */
    flex: 1 1 0;
    min-height: 500px;
    border-radius: 12px;
}

.projects-board .col[b-78f6bbl6i9] {
    background: #fff;
    border: 1px solid #e6e8ee;
    border-radius: 8px;
    display: flex;
    flex-direction: column;
    overflow: hidden;
}

.projects-board .col-header[b-78f6bbl6i9] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 12px 14px;
    border-bottom: 1px solid #eef0f4;
    font-weight: 600;
    color: #1f2937;
}

.projects-board .col-body[b-78f6bbl6i9] {
    flex: 1 1 auto;
    overflow-y: auto;
}

.projects-board .col-header .d-actions[b-78f6bbl6i9] {
    margin-top: 0;
}

/* Zwinięta lista zostaje wąskim paskiem, a miejsce bierze panel szczegółów. Treść chowa
   CSS, nie warunek w markupie — dzięki temu pozycja przewinięcia przeżywa zwinięcie. */
.projects-board.list-collapsed[b-78f6bbl6i9] {
    --col-list: 40px;
}

.col-collapse[b-78f6bbl6i9] {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex: 0 0 auto;
    width: 24px;
    height: 24px;
    margin-left: auto;
    padding: 0;
    border: none;
    border-radius: 6px;
    background: transparent;
    color: #6b7280;
    cursor: pointer;
}

    .col-collapse:hover[b-78f6bbl6i9] {
        background: #f3f4f6;
    }

.col-collapsed-title[b-78f6bbl6i9] {
    display: none;
}

.projects-board.list-collapsed .col-list .col-header[b-78f6bbl6i9] {
    justify-content: center;
    padding: 8px 4px;
}

    .projects-board.list-collapsed .col-list .col-header > span[b-78f6bbl6i9] {
        display: none;
    }

.projects-board.list-collapsed .col-list .col-collapse[b-78f6bbl6i9] {
    margin-left: 0;
}

.projects-board.list-collapsed .col-list .col-body[b-78f6bbl6i9] {
    display: none;
}

.projects-board.list-collapsed .col-list .col-collapsed-title[b-78f6bbl6i9] {
    display: flex;
    align-items: center;
    justify-content: center;
    flex: 1 1 auto;
    padding: 8px 0;
    writing-mode: vertical-rl;
    transform: rotate(180deg);
    font-size: 12px;
    font-weight: 600;
    color: #6b7280;
    white-space: nowrap;
    overflow: hidden;
    cursor: pointer;
    user-select: none;
}

/* === Lista projektów === */
.projects-list[b-78f6bbl6i9] {
    display: flex;
    flex-direction: column;
}

.projects-list .project-item[b-78f6bbl6i9] {
    padding: 12px 14px;
    border-bottom: 1px solid #f1f3f7;
    cursor: pointer;
    display: flex;
    flex-direction: column;
    gap: 4px;
}

    .projects-list .project-item:hover[b-78f6bbl6i9] {
        background: #f8fafc;
    }

    .projects-list .project-item.active[b-78f6bbl6i9] {
        background: #fff7ed;
        border-left: 3px solid #f97316;
        padding-left: 11px;
    }

    .projects-list .project-item .line1[b-78f6bbl6i9] {
        display: flex;
        justify-content: space-between;
        align-items: flex-start;
        gap: 6px;
    }

    /* Nazwa projektu jest pierwsza i najmocniejsza — po niej się go szuka. */
    .projects-list .project-item .pl-title[b-78f6bbl6i9] {
        font-size: 13.5px;
        font-weight: 600;
        color: #111827;
        line-height: 1.3;
        flex: 1 1 auto;
        min-width: 0;
        overflow: hidden;
        text-overflow: ellipsis;
        display: -webkit-box;
        -webkit-line-clamp: 2;
        -webkit-box-orient: vertical;
        /* Nazwa bez spacji nie miała gdzie się złamać i zajmowała jedną uciętą linijkę
           zamiast dozwolonych dwóch. */
        overflow-wrap: anywhere;
        word-break: break-word;
    }

.tl-avatar[b-78f6bbl6i9] {
    width: 22px;
    height: 22px;
    border-radius: 50%;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    font-size: 10px;
    font-weight: 700;
    line-height: 1;
    color: #fff;
    letter-spacing: 0.02em;
}

.projects-list .project-item .number[b-78f6bbl6i9] {
    font-size: 12px;
    color: #6b7280;
    flex-shrink: 0;
    font-variant-numeric: tabular-nums;
}

/* flex-start, nie center: tagi się zawijają (kilka produktów + długa nazwa klienta),
   a licznik zgłoszeń ma zostać u góry — równo pod numerem projektu z wiersza wyżej. */
.projects-list .project-item .line2[b-78f6bbl6i9] {
    display: flex;
    align-items: flex-start;
    gap: 8px;
    min-width: 0;
}

/* === Tagi (produkt, klient) ===
   Wspólne dla kart listy i panelu szczegółów — dlatego selektor sięga `.projects-board`,
   a nie pojedynczej karty. Wygląd 1:1 z pastylkami na kartach Kanbana
   (KanbanBoard.razor.css, .kanban-tag): jasna pastylka, kolor niesie kropka, nie całe tło.
   Reguł nie da się współdzielić — izolacja CSS zamyka tamte selektory w komponencie
   tablicy — więc wartości są powtórzone i trzeba je zmieniać w obu miejscach naraz. */
.projects-board .pl-tags[b-78f6bbl6i9] {
    display: inline-flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 4px;
    min-width: 0;
    flex: 1 1 auto;
}

.projects-board .pl-tag[b-78f6bbl6i9] {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    font-size: 11px;
    font-weight: 500;
    line-height: 1;
    padding: 3px 7px;
    border-radius: 4px;
    border: 1px solid #e5e7eb;
    background: #fbfbfc;
    color: #4b5563;
    min-width: 0;
}

/* min-width: 0 jest konieczne — bez niego długa nazwa klienta rozpycha wiersz,
   zamiast dostać wielokropek. */
.projects-board .pl-tag-text[b-78f6bbl6i9] {
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

/* Na wąskiej liście nazwa musi się w końcu urwać; w panelu szczegółów jest miejsce
   na pełną, więc tam limitu nie ma. */
.projects-list .project-item .pl-tag-text[b-78f6bbl6i9] {
    max-width: 132px;
}

.projects-board .pl-tag-dot[b-78f6bbl6i9] {
    width: 7px;
    height: 7px;
    border-radius: 2px;
    flex-shrink: 0;
}

/* Produkt trzyma kolor akcentu aplikacji — jak na Kanbanie. */
.projects-board .pl-tag-dot-product[b-78f6bbl6i9] {
    background: var(--main-color);
}

/* Ikona daty — ta sama maska co w stopce karty na Kanbanie, w kolorze tekstu obok.
   Wspólna dla karty na liście, metryczki projektu i terminów przy zgłoszeniach. */
.projects-board .date-icon[b-78f6bbl6i9] {
    width: 11px;
    height: 11px;
    display: block;
    flex-shrink: 0;
    background-color: currentColor;
    -webkit-mask: url('/images/bootstrap-icons/calendar-event.svg') no-repeat center / contain;
    mask: url('/images/bootstrap-icons/calendar-event.svg') no-repeat center / contain;
}

.projects-list .project-item .pl-owner[b-78f6bbl6i9] {
    display: inline-flex;
    align-items: center;
    flex-shrink: 0;
}

    .projects-list .project-item .pl-owner .tl-avatar[b-78f6bbl6i9] {
        width: 18px;
        height: 18px;
        font-size: 9px;
    }

/* Licznik zgłoszeń — prawy górny róg karty, pod numerem projektu. margin-top ustawia go
   w osi pierwszego rzędu tagów (pastylka jest o kilka px wyższa od samego tekstu). */
.projects-list .project-item .project-badge[b-78f6bbl6i9] {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    margin-top: 3px;
    font-size: 11px;
    font-weight: 500;
    color: #6b7280;
    white-space: nowrap;
    flex-shrink: 0;
    font-variant-numeric: tabular-nums;
}

/* Ikona jako maska w kolorze tekstu, a nie tło-SVG z bootstrap-icons: ta druga jest
   czarna i w ciemnym motywie musiałaby być odwracana filtrem (theme-dark.css), przez co
   świeciłaby bielą zamiast trzymać przygaszony kolor liczby. Tak samo robią to liczniki
   w stopce karty na Kanbanie. */
.projects-list .project-item .project-badge-icon[b-78f6bbl6i9] {
    width: 12px;
    height: 12px;
    display: block;
    flex-shrink: 0;
    background-color: currentColor;
    -webkit-mask: url('/images/bootstrap-icons/ticket.svg') no-repeat center / contain;
    mask: url('/images/bootstrap-icons/ticket.svg') no-repeat center / contain;
}

.projects-list .project-item .line3[b-78f6bbl6i9] {
    display: flex;
    align-items: center;
    gap: 8px;
    font-size: 11px;
    color: #6b7280;
    min-width: 0;
}

/* Wiersz rozpycha status, a nie data: dzięki temu data siedzi przy prawej krawędzi także
   na projektach bez prowadzącego (wtedy kulki w ogóle nie ma, więc nie ma czego przesuwać).

   Status musi też umieć się urwać: data niesie teraz godzinę, więc jest o kilkanaście
   pikseli szersza i w wąskiej liście (320/360 px) wypychałaby ją poza kartę. Tor daty ma
   flex-shrink: 0, więc to status oddaje miejsce — tak samo jak w liście zgłoszeń. */
.projects-list .project-item .line3 .status-tag[b-78f6bbl6i9] {
    margin-right: auto;
    min-width: 0;
    overflow: hidden;
}

/* Data z ikoną kalendarza — ostatnia rzecz w wierszu, tak jak w stopce karty na Kanbanie.
   Ikona bierze kolor tekstu (maska), więc nie wymaga osobnej wersji na ciemny motyw. */
.projects-list .project-item .line3 .date[b-78f6bbl6i9] {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    font-weight: 500;
    color: #374151;
    flex-shrink: 0;
    font-variant-numeric: tabular-nums;
}

/* Pasek postępu = udział zgłoszeń domkniętych. Liczy się sam, więc nie zdąży skłamać. */
.pl-progress[b-78f6bbl6i9] {
    height: 4px;
    border-radius: 999px;
    background: #eef0f4;
    overflow: hidden;
    margin-top: 2px;
}

/* Kolor wstrzykiwany inline z TopicVisuals.ProgressColor (czerwień → zieleń wg procentu),
   tak samo jak kropki statusu i strzałki priorytetu. Pomarańcz zostaje jako wartość
   awaryjna, gdyby styl wbudowany kiedyś nie dojechał. */
.pl-progress-bar[b-78f6bbl6i9] {
    height: 100%;
    background: #f97316;
    border-radius: 999px;
    transition: width 0.2s ease, background-color 0.2s ease;
}

/* === Status ===
   Bez pastylki — sam kolor kropki i nazwa. Pastylki (.pl-tag) niosą produkt i klienta,
   więc gdyby status też był pastylką, wiersz byłby ścianą ramek. */
.status-tag[b-78f6bbl6i9] {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    font-size: 11px;
    font-weight: 600;
    line-height: 1.4;
    color: #374151;
    white-space: nowrap;
}

.status-tag-dot[b-78f6bbl6i9] {
    width: 7px;
    height: 7px;
    border-radius: 2px;
    display: inline-block;
    flex-shrink: 0;
}

/* === Panel szczegółów === */
.details-empty[b-78f6bbl6i9] {
    flex: 1 1 auto;
    display: flex;
    align-items: center;
    justify-content: center;
    color: #9ca3af;
    font-size: 13px;
    padding: 24px;
    text-align: center;
}

.details-panel[b-78f6bbl6i9] {
    padding: 16px 18px;
    display: flex;
    flex-direction: column;
    gap: 14px;
    overflow-y: auto;
    flex: 1 1 auto;
}

    /* Tytuł zawija się w panelu, zamiast z niego wyjeżdżać — tak samo jak .d-title na liście
       zgłoszeń. Bez overflow-wrap nazwa bez spacji nie miała gdzie się złamać. */
    .details-panel .d-title[b-78f6bbl6i9] {
        font-size: 18px;
        font-weight: 600;
        color: #111827;
        min-width: 0;
        overflow-wrap: anywhere;
        word-break: break-word;
    }

    .details-panel .d-meta[b-78f6bbl6i9] {
        display: flex;
        gap: 12px;
        flex-wrap: wrap;
        align-items: center;
        font-size: 12px;
        color: #6b7280;
    }

        /* Data utworzenia projektu — chip z ikoną, jak data na kartach. */
        .details-panel .d-meta .d-date[b-78f6bbl6i9] {
            display: inline-flex;
            align-items: center;
            gap: 4px;
            font-variant-numeric: tabular-nums;
        }

    .details-panel .d-section[b-78f6bbl6i9] {
        background: #fff;
        border: 1px solid #eef0f4;
        border-radius: 6px;
        padding: 10px 12px;
        font-size: 12.5px;
        color: #1f2937;
        line-height: 1.4;
        min-width: 0;
    }

        .details-panel .d-section > div[b-78f6bbl6i9] {
            font-size: 12.5px;
        }

        .details-panel .d-section h4[b-78f6bbl6i9] {
            margin: 0 0 8px;
            font-size: 12px;
            color: #6b7280;
            font-weight: 600;
            text-transform: uppercase;
            letter-spacing: .04em;
        }

    /* Nagłówek sekcji z akcją po prawej (np. „Dodaj zgłoszenia"). */
    .details-panel .d-section-head[b-78f6bbl6i9] {
        display: flex;
        align-items: center;
        justify-content: space-between;
        gap: 10px;
        margin-bottom: 8px;
    }

        .details-panel .d-section-head h4[b-78f6bbl6i9] {
            margin: 0;
        }

/* Akcja w nagłówku sekcji to sama ikonka (opis siedzi w podpowiedzi) — panel obok listy jest
   wąski, więc przycisk nie może brać domyślnego wypełnienia DxButtona. Ten sam zapis co
   .details-card-action w szczegółach zgłoszenia. */
[b-78f6bbl6i9] .d-section-action .dxbl-btn {
    padding: 0.1rem 0.25rem !important;
    min-width: 0 !important;
}

    .details-panel .d-module[b-78f6bbl6i9] {
        margin-left: 6px;
        font-size: 11px;
        color: #6b7280;
    }

    .details-panel .d-grid-3[b-78f6bbl6i9] {
        display: grid;
        grid-template-columns: 1fr 1fr 1fr;
        gap: 14px;
    }

    .details-panel .d-actions[b-78f6bbl6i9] {
        display: flex;
        gap: 8px;
        flex-wrap: wrap;
    }

/* ===== Zakładki panelu: opis / lista zgłoszeń / załączniki =====
   Ten sam wzór co na tablicy automatyzacji (.ab-tabs) i w panelu zgłoszeń: podkreślenie
   aktywnej zamiast ramek, bo panel jest wąski i pudełka zabierałyby w nim za dużo miejsca. */
.details-panel .d-tabs[b-78f6bbl6i9] {
    display: flex;
    gap: 4px;
    border-bottom: 1px solid #eef0f2;
}

.details-panel .d-tab[b-78f6bbl6i9] {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 6px 12px;
    border: 0;
    border-bottom: 2px solid transparent;
    background: transparent;
    color: #6b7280;
    font: inherit;
    font-size: 13px;
    cursor: pointer;
    white-space: nowrap;
}

.details-panel .d-tab:hover[b-78f6bbl6i9] {
    color: #1f2937;
}

.details-panel .d-tab.is-active[b-78f6bbl6i9] {
    color: #9a3412;
    border-bottom-color: #f97316;
    font-weight: 600;
}

.details-panel .d-tab-count[b-78f6bbl6i9] {
    min-width: 18px;
    padding: 0 5px;
    border-radius: 9px;
    background: #f3f4f6;
    color: #4b5563;
    font-size: 11px;
    font-weight: 600;
    line-height: 18px;
    text-align: center;
}

.details-panel .d-tab.is-active .d-tab-count[b-78f6bbl6i9] {
    background: #ffedd5;
    color: #c2410c;
}

/* Nagłówek sekcji bez tytułu — tytuł mówi zakładka wyżej, zostaje sama akcja („+"),
   więc space-between nie ma czego rozepchnąć i przycisk wylądowałby po lewej. */
.details-panel .d-section-head-action-only[b-78f6bbl6i9] {
    justify-content: flex-end;
}

/* ===== Załączniki w panelu ===== */
.details-panel .d-attachment-list[b-78f6bbl6i9] {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: 8px;
}

.details-panel .d-attachment[b-78f6bbl6i9] {
    display: flex;
    align-items: center;
    gap: 10px;
    min-width: 0;
}

/* Miniatura jest PRZYCISKIEM (otwiera podgląd), więc zdejmujemy z niej domyślny
   wygląd <button>: obramowanie, tło i krój pisma. */
.details-panel .d-attachment-thumb[b-78f6bbl6i9] {
    width: 40px;
    height: 40px;
    flex: 0 0 auto;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 0;
    overflow: hidden;
    border: 1px solid #e5e7eb;
    border-radius: 6px;
    background: #f9fafb;
    color: #6b7280;
    cursor: pointer;
}

.details-panel .d-attachment-thumb:hover[b-78f6bbl6i9] {
    border-color: #f97316;
}

.details-panel .d-attachment-thumb img[b-78f6bbl6i9] {
    width: 100%;
    height: 100%;
    object-fit: cover;
}

.details-panel .d-attachment-meta[b-78f6bbl6i9] {
    display: flex;
    flex-direction: column;
    min-width: 0;
}

.details-panel .d-attachment-name[b-78f6bbl6i9] {
    padding: 0;
    border: none;
    background: none;
    font: inherit;
    font-weight: 500;
    text-align: left;
    color: #1f2937;
    cursor: pointer;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.details-panel .d-attachment-name:hover[b-78f6bbl6i9] {
    color: #f97316;
    text-decoration: underline;
}

.details-panel .d-attachment-info[b-78f6bbl6i9] {
    font-size: 12px;
    color: #6b7280;
}

/* Opis wchodzi przez MarkupString — bez ::deep selektor nie trafiłby w nic. */
.details-panel .d-summary-desc > div[b-78f6bbl6i9] {
    overflow-wrap: anywhere;
    word-break: break-word;
}

.details-panel .d-summary-desc[b-78f6bbl6i9]  img {
    max-width: 100%;
    height: auto;
    display: block;
    border-radius: 4px;
}

.details-panel .d-summary-desc[b-78f6bbl6i9]  table {
    display: block;
    width: auto !important;
    max-width: 100%;
    overflow-x: auto;
    border-collapse: collapse;
    margin: 0.5rem 0;
    font-size: 0.8rem;
}

/* === Postęp w panelu === */
.d-progress-row[b-78f6bbl6i9] {
    display: flex;
    align-items: center;
    gap: 10px;
}

.d-progress-track[b-78f6bbl6i9] {
    flex: 1 1 auto;
    height: 8px;
    border-radius: 999px;
    background: #eef0f4;
    overflow: hidden;
}

.d-progress-bar[b-78f6bbl6i9] {
    height: 100%;
    background: #f97316;
    border-radius: 999px;
    transition: width 0.2s ease, background-color 0.2s ease;
}

.d-progress-label[b-78f6bbl6i9] {
    flex: 0 0 auto;
    font-size: 12px;
    font-weight: 600;
    color: #374151;
    font-variant-numeric: tabular-nums;
}

/* === Zgłoszenia projektu === */
.pt-list[b-78f6bbl6i9] {
    display: flex;
    flex-direction: column;
    gap: 4px;
    max-height: 420px;
    overflow-y: auto;
}

.pt-item[b-78f6bbl6i9] {
    display: flex;
    align-items: center;
    gap: 8px;
    border: 1px solid #eef0f4;
    border-radius: 6px;
    padding: 7px 9px;
    background: #fff;
}

    .pt-item:hover[b-78f6bbl6i9] {
        background: #f8fafc;
    }

.pt-main[b-78f6bbl6i9] {
    display: flex;
    flex-direction: column;
    gap: 3px;
    min-width: 0;
    flex: 1 1 auto;
    text-decoration: none;
    color: inherit;
}

.pt-line1[b-78f6bbl6i9] {
    display: flex;
    align-items: baseline;
    gap: 8px;
    min-width: 0;
}

.pt-number[b-78f6bbl6i9] {
    font-size: 11.5px;
    font-weight: 700;
    color: #6b7280;
    font-variant-numeric: tabular-nums;
    flex: 0 0 auto;
}

.pt-subject[b-78f6bbl6i9] {
    font-size: 12.5px;
    color: #111827;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    min-width: 0;
}

.pt-line2[b-78f6bbl6i9] {
    display: flex;
    align-items: center;
    gap: 10px;
    font-size: 11px;
    color: #6b7280;
    flex-wrap: wrap;
    min-width: 0;
}

/* Termin zgłoszenia — ten sam chip z kalendarzem co daty wyżej; bez niego w wierszu
   były dwie gołe liczby (numer i data) i nie było widać, która jest którą. */
.pt-due[b-78f6bbl6i9] {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    font-variant-numeric: tabular-nums;
}

.pt-unlink[b-78f6bbl6i9] {
    flex: 0 0 auto;
    border: none;
    background: transparent;
    color: #9ca3af;
    cursor: pointer;
    border-radius: 6px;
    width: 22px;
    height: 22px;
    line-height: 1;
    font-size: 11px;
}

    .pt-unlink:hover[b-78f6bbl6i9] {
        background: #fee2e2;
        color: #b91c1c;
    }

.d-msg-empty[b-78f6bbl6i9] {
    font-size: 12px;
    color: #9ca3af;
    padding: 6px 0;
}

.projects-empty[b-78f6bbl6i9],
.topics-empty[b-78f6bbl6i9] {
    padding: 24px;
    color: #9ca3af;
    text-align: center;
    font-size: 13px;
}

/* === Popupy === */
.topics-popup-footer[b-78f6bbl6i9] {
    display: flex;
    justify-content: flex-end;
    gap: 8px;
}

.topics-merge-hint[b-78f6bbl6i9] {
    margin-top: 10px;
    font-size: 12px;
    color: #6b7280;
}

[b-78f6bbl6i9] .topics-toolbar-search {
    min-width: 220px;
}

@media (max-width: 1200px) {
    .projects-board[b-78f6bbl6i9] {
        --col-list: 320px;
    }
}

@media (max-width: 900px) {
    /* Układ jednokolumnowy: strona rośnie z treścią, a nie do wysokości ekranu —
       lista i szczegóły ustawione jedno pod drugim nie zmieściłyby się na jednym ekranie. */
    .projects-page[b-78f6bbl6i9] {
        height: auto;
        max-height: none;
    }

    .projects-board[b-78f6bbl6i9] {
        grid-template-columns: 1fr;
        flex: 0 0 auto;
    }

    /* Jedna kolumna — zwijanie nie ma czego poszerzyć, więc chevron znika. */
    .projects-board.list-collapsed .col-list .col-body[b-78f6bbl6i9] {
        display: block;
    }

    .projects-board.list-collapsed .col-list .col-header[b-78f6bbl6i9] {
        justify-content: space-between;
        padding: 12px 14px;
    }

        .projects-board.list-collapsed .col-list .col-header > span[b-78f6bbl6i9] {
            display: inline;
        }

    .projects-board.list-collapsed .col-list .col-collapsed-title[b-78f6bbl6i9] {
        display: none;
    }

    .col-collapse[b-78f6bbl6i9] {
        display: none;
    }

    .details-panel .d-grid-3[b-78f6bbl6i9] {
        grid-template-columns: 1fr;
    }
}

/* =====================================================================
   WŁAŚCICIELE PROJEKTU
   ===================================================================== */

/* Stos kulek prowadzących: każda kolejna wchodzi kilka px na poprzednią, a obwódka w kolorze
   karty robi między nimi widoczną szczelinę. Kolejne rodzeństwo rysuje się nad poprzednim
   samo (kolejność w drzewie), więc nachodzenie czyta się jak talia kart — bez z-indexów.
   Dokładnie ten sam zapis co uczestnicy na kartach Kanbana z pulpitu. */
.projects-list .project-item .pl-owners[b-78f6bbl6i9] {
    display: inline-flex;
    align-items: center;
    flex-shrink: 0;
    min-width: 0;
}

    .projects-list .project-item .pl-owners .tl-avatar[b-78f6bbl6i9] {
        width: 18px;
        height: 18px;
        font-size: 9px;
        border: 2px solid #fff;
        box-sizing: content-box;
    }

    .projects-list .project-item .pl-owners .tl-avatar + .tl-avatar[b-78f6bbl6i9] {
        margin-left: -6px;
    }

/* Karta wybranego projektu ma inne tło niż biel — obwódka kulki musi za nim pójść, inaczej
   szczelina między kulkami znika akurat na tej jednej karcie. */
.projects-list .project-item.active .pl-owners .tl-avatar[b-78f6bbl6i9] {
    border-color: #fff7ed;
}

/* „+N" — reszta prowadzących. Neutralne tło, bo nie reprezentuje jednej osoby. */
.tl-avatar-more[b-78f6bbl6i9] {
    background: #9ca3af;
    font-size: 9px;
}

/* Właściciele w panelu szczegółów — tu jest miejsce na nazwiska, więc kulki nie nachodzą
   na siebie, tylko stoją w kolumnie z podpisem. */
.d-owners[b-78f6bbl6i9] {
    display: flex;
    flex-direction: column;
    gap: 0.3rem;
}

.d-owner[b-78f6bbl6i9] {
    display: inline-flex;
    align-items: center;
    gap: 0.4rem;
    min-width: 0;
}

.d-owner-name[b-78f6bbl6i9] {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

/* Właściciel główny — obwódka kulki i pogrubione nazwisko. Kolejność sama tego nie mówi,
   a to on stoi w filtrach i w kolumnie „Właściciel". */
.d-owner.is-main .tl-avatar[b-78f6bbl6i9] {
    box-shadow: 0 0 0 2px #fff, 0 0 0 3px #f97316;
}

.d-owner.is-main .d-owner-name[b-78f6bbl6i9] {
    font-weight: 600;
}

/* Podpowiedź pod listą właścicieli w formularzu — pierwsza osoba jest główna. */
.topics-owners-hint[b-78f6bbl6i9] {
    margin-top: 0.25rem;
    font-size: 0.72rem;
    color: #6b7280;
}

/* Opis w panelu obok listy. Klasa wchodzi WYŁĄCZNIE na opis uznany za długi i tylko dopóki
   jest zwinięty (patrz HtmlText.IsLong) — wcześniej siedziała na każdym, więc gradient wygaszał
   ostatnią linię nawet krótkiego opisu i wyglądała jak tekst nieaktywny.

   Wysokość ta sama co w panelu zgłoszeń (.d-desc-body.collapsed): oba panele są tej samej
   szerokości, więc zwinięty opis ma w nich sięgać tak samo daleko. Wygaszenie dolnej krawędzi
   zostaje — mówi, że treść się nie skończyła, zanim wzrok trafi na przycisk pod spodem. */
.d-desc-clamp[b-78f6bbl6i9] {
    max-height: 400px;
    overflow: hidden;
    -webkit-mask-image: linear-gradient(to bottom, #000 76%, transparent 100%);
    mask-image: linear-gradient(to bottom, #000 76%, transparent 100%);
}

/* Przycisk „Pokaż więcej / mniej" pod opisem — wygląd 1:1 z panelem zgłoszeń
   (.d-desc-toggle w Tickets.razor.css); style scoped nie przechodzą między stronami. */
.d-desc-toggle[b-78f6bbl6i9] {
    background: transparent;
    border: none;
    padding: 2px 0 0 0;
    margin-top: 4px;
    font-size: 11px;
    font-weight: 600;
    color: #c2410c;
    cursor: pointer;
    align-self: flex-start;
}

.d-desc-toggle:hover[b-78f6bbl6i9] {
    text-decoration: underline;
}


/* === Zakres projektu w formularzu: zadania i zgłoszenia ===
   Dwie listy w jednym bloku pod resztą pól. Ramka i tło oddzielają je od zwykłych pól
   formularza: to nie jest jedna wartość do wpisania, tylko lista pozycji do zebrania. */
.topics-scope[b-78f6bbl6i9] {
    border: 1px solid #e6e8ee;
    border-radius: 8px;
    padding: 10px 12px 12px;
    background: #fbfbfc;
}

.topics-scope-head[b-78f6bbl6i9] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 8px;
    margin-bottom: 6px;
}

.topics-scope-head-second[b-78f6bbl6i9] {
    margin-top: 14px;
    padding-top: 12px;
    border-top: 1px solid #eef0f4;
}

.topics-scope-title[b-78f6bbl6i9] {
    font-size: 0.8rem;
    font-weight: 600;
    color: #374151;
}

.topics-scope-list[b-78f6bbl6i9] {
    display: flex;
    flex-direction: column;
    gap: 4px;
}

.topics-scope-row[b-78f6bbl6i9] {
    display: flex;
    align-items: center;
    gap: 6px;
    min-width: 0;
}

/* Przeciągany wiersz przygaszamy, żeby było widać, co się rusza — sam kursor „grabbing"
   siedzi nad uchwytem i przy szybkim ruchu myszy nie nadąża za wzrokiem. */
.topics-scope-row.is-dragged[b-78f6bbl6i9] {
    opacity: 0.45;
}

/* Uchwyt przeciągania jest OSOBNY od wiersza: w wierszu stoi pole tekstowe, a wiersz
   przeciągalny w całości nie dawałby się kliknąć, żeby coś w nim napisać. */
.topics-scope-handle[b-78f6bbl6i9] {
    width: 14px;
    height: 14px;
    flex-shrink: 0;
    cursor: grab;
    background-color: #9ca3af;
    -webkit-mask: url('/images/bootstrap-icons/grip-vertical.svg') no-repeat center / contain;
    mask: url('/images/bootstrap-icons/grip-vertical.svg') no-repeat center / contain;
}

    .topics-scope-handle:active[b-78f6bbl6i9] {
        cursor: grabbing;
    }

.topics-scope-title-input[b-78f6bbl6i9] {
    flex: 1 1 auto;
    min-width: 0;
}

/* Opakowanie pola wersji — jeden gabaryt dla listy zadań i listy zgłoszeń.
   Szerokość musi siedzieć TUTAJ, a nie na klasie DxComboBoksa: komponent renderuje się
   jako kilka zagnieżdżonych elementów i szerokość podana na jego klasie nie powstrzymywała
   go przed zajęciem całej wolnej przestrzeni wiersza (przy zgłoszeniu, gdzie temat da się
   skrócić wielokropkiem, wychodziło z tego pole dwa razy szersze niż przy zadaniu). */
.topics-scope-version[b-78f6bbl6i9] {
    display: block;
    width: 104px;
    flex: 0 0 104px;
}

    .topics-scope-version[b-78f6bbl6i9]  .dxbl-combobox {
        width: 100%;
    }

.topics-scope-number[b-78f6bbl6i9] {
    flex-shrink: 0;
    font-size: 0.78rem;
    font-weight: 600;
    color: #6b7280;
    font-variant-numeric: tabular-nums;
}

.topics-scope-subject[b-78f6bbl6i9] {
    flex: 1 1 auto;
    min-width: 0;
    font-size: 0.82rem;
    color: #374151;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.topics-scope-empty[b-78f6bbl6i9] {
    font-size: 0.78rem;
    color: #9ca3af;
    padding: 2px 0;
}

.topics-scope-hint[b-78f6bbl6i9] {
    margin-top: 6px;
    font-size: 0.72rem;
    color: #6b7280;
}

/* === Odnośniki w panelu obok listy ===
   Skrót listy ze szczegółów projektu: ikona rodzaju, podpis, kłódka przy wewnętrznych.
   Bez akcji — dodaje się i edytuje na /projects/{id}, panel jest do zerknięcia. */
.d-link-list[b-78f6bbl6i9] {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: 2px;
}

.d-link[b-78f6bbl6i9] {
    display: flex;
    align-items: center;
    gap: 6px;
    min-width: 0;
}

.d-link-main[b-78f6bbl6i9] {
    display: inline-flex;
    align-items: center;
    gap: 7px;
    min-width: 0;
    flex: 1 1 auto;
    font-size: 12px;
    color: #1f2937;
    text-decoration: none;
}

    .d-link-main:hover[b-78f6bbl6i9] {
        color: #c2410c;
        text-decoration: underline;
    }

/* Ikona przez maskę — bierze kolor tekstu obok, więc podświetla się razem z odnośnikiem
   i sama działa w motywie ciemnym. Konkretny plik podstawia atrybut style. */
.d-link-icon[b-78f6bbl6i9] {
    width: 13px;
    height: 13px;
    display: block;
    flex-shrink: 0;
    background-color: currentColor;
    -webkit-mask-repeat: no-repeat;
    mask-repeat: no-repeat;
    -webkit-mask-position: center;
    mask-position: center;
    -webkit-mask-size: contain;
    mask-size: contain;
}

.d-link-label[b-78f6bbl6i9] {
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.d-link-internal[b-78f6bbl6i9] {
    width: 11px;
    height: 11px;
    flex-shrink: 0;
    background-color: #9ca3af;
    -webkit-mask: url('/images/bootstrap-icons/lock.svg') no-repeat center / contain;
    mask: url('/images/bootstrap-icons/lock.svg') no-repeat center / contain;
}

/* === Ikona rodzaju pozycji na liście w panelu ===
   Zgłoszenie kontra zadanie. Ta sama maska co w tabeli na /projects/{id}
   (.proj-item-icon w Detail.razor.css) — wartości powtórzone, bo izolacja CSS nie pozwala
   ich współdzielić. */
.proj-item-icon[b-78f6bbl6i9] {
    width: 12px;
    height: 12px;
    display: inline-block;
    flex-shrink: 0;
    background-color: #9ca3af;
    -webkit-mask-repeat: no-repeat;
    mask-repeat: no-repeat;
    -webkit-mask-position: center;
    mask-position: center;
    -webkit-mask-size: contain;
    mask-size: contain;
}

.proj-item-icon.is-ticket[b-78f6bbl6i9] {
    -webkit-mask-image: url('/images/bootstrap-icons/ticket-detailed.svg');
    mask-image: url('/images/bootstrap-icons/ticket-detailed.svg');
}

.proj-item-icon.is-task[b-78f6bbl6i9] {
    -webkit-mask-image: url('/images/bootstrap-icons/list-task.svg');
    mask-image: url('/images/bootstrap-icons/list-task.svg');
}

/* Pastylka wersji przy pozycji w panelu — mniejsza niż w tabeli, bo stoi w linii
   ze statusem i osobą; kolor przychodzi z TopicVisuals.VersionColor. */
.proj-version-tag[b-78f6bbl6i9] {
    display: inline-block;
    padding: 0 6px;
    border-radius: 6px;
    font-size: 10px;
    font-weight: 700;
    line-height: 1.6;
    color: #fff;
    white-space: nowrap;
    font-variant-numeric: tabular-nums;
}
/* /Components/Pages/Projects/Tasks.razor.rz.scp.css */
/* === Lista zadań wszystkich projektów ===
   Strona używa tych samych pastylek co tabela w szczegółach projektu, ale izolacja CSS
   zamyka tamte reguły w Detail.razor — bez kopii tutaj status i wersja renderowały się
   jako goły tekst na kolorowym tle wstawionym atrybutem style, czyli ciasny, nieczytelny
   prostokąt. Wartości są celowo takie same jak w Detail.razor.css i zmienia się je
   w obu plikach naraz. */

.toolbar[b-r23jlw2cr9] {
    margin-bottom: 8px;
}

/* Status i priorytet: kolor niesie kropka, nie całe tło — tak samo jak na liście projektów
   i w tabeli pozycji. Dzięki temu dwie sąsiednie kolumny nie zamieniają się w pas plam. */
.status-tag[b-r23jlw2cr9] {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    font-size: 0.78rem;
    font-weight: 600;
    color: #374151;
    white-space: nowrap;
}

.status-tag-dot[b-r23jlw2cr9] {
    width: 7px;
    height: 7px;
    border-radius: 2px;
    display: inline-block;
    flex-shrink: 0;
}

/* Pastylka wersji — TU kolor wypełnia całe tło (przychodzi z TopicVisuals.VersionColor),
   bo wersja jest etykietą przynależności, a nie stanem. Stała szerokość minimalna trzyma
   kolumnę równo między „0.1" a „5.0". */
.proj-version-tag[b-r23jlw2cr9] {
    display: inline-block;
    min-width: 2.6rem;
    padding: 1px 8px;
    border-radius: 6px;
    font-size: 0.72rem;
    font-weight: 700;
    line-height: 1.5;
    text-align: center;
    color: #fff;
    white-space: nowrap;
    font-variant-numeric: tabular-nums;
}

.topics-empty[b-r23jlw2cr9] {
    padding: 16px;
    color: #6b7280;
}
/* /Components/Pages/Settings/Automations/Automations.razor.rz.scp.css */
/* === Kolumna „Wysyła" ===
   Nazwy szablonów e-mail wyprowadzone z akcji reguły. Jedna reguła potrafi wysyłać
   kilka szablonów (do zgłaszającego i do prowadzących), więc lista jest pionowa. */
.automation-sends[b-a5iuv1m1zf] {
    display: flex;
    flex-direction: column;
    gap: 0.15rem;
    padding: 0.15rem 0;
}

.automation-sends-item[b-a5iuv1m1zf] {
    font-size: 0.8rem;
    color: #374151;
    overflow-wrap: anywhere;
}

/* === Kolumna „Co robi" ===
   Dwie linie: warunek (przygaszony — to kontekst) i akcja (mocniejsza — to skutek).
   Pełna treść reguły siedzi w podpowiedzi, więc komórka nie musi się rozpychać. */
.automation-summary[b-a5iuv1m1zf] {
    display: flex;
    flex-direction: column;
    gap: 0.05rem;
    padding: 0.15rem 0;
    min-width: 0;
}

.automation-summary-when[b-a5iuv1m1zf] {
    font-size: 0.76rem;
    color: #6b7280;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.automation-summary-then[b-a5iuv1m1zf] {
    font-size: 0.82rem;
    color: #1f2937;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
/* /Components/Pages/Settings/Automations/AutomationsBoard.razor.rz.scp.css */
/* === Tablica reguł automatyzacji ===
   Układ ten sam co na liście zgłoszeń: kolumna strony (toolbar + treść) o wysokości obszaru
   treści, a w środku lista po lewej i panel po prawej. Obie kolumny przewijają się osobno,
   żeby długi łańcuch reguł nie spychał panelu poza ekran. */
.ab-page[b-cetnfzxs5p] {
    display: flex;
    flex-direction: column;
    box-sizing: border-box;
    height: calc(100dvh - 3.5rem);
    max-height: 100%;
    padding-bottom: 12px;
}

.ab-layout[b-cetnfzxs5p] {
    display: grid;
    grid-template-columns: 360px 1fr;
    gap: 12px;
    flex: 1 1 0;
    min-height: 0;
    margin-top: 8px;
}

/* ---------- Lewa kolumna: łańcuchy reguł ---------- */
.ab-list[b-cetnfzxs5p] {
    display: flex;
    flex-direction: column;
    min-height: 0;
    background: #fff;
    border: 1px solid #e6e8ee;
    border-radius: 8px;
    overflow: hidden;
}

.ab-search[b-cetnfzxs5p] {
    padding: 10px 10px 6px;
}

.ab-search-box[b-cetnfzxs5p] {
    width: 100%;
}

/* Pudełko wejścia rysuje DevExpress, więc rogi i tło dociągamy przez ::deep — tak samo
   wygląda wyszukiwarka w Ustawieniach (custom.css, .settings-search). */
[b-cetnfzxs5p] .ab-search-box.dxbl-text-edit,
[b-cetnfzxs5p] .ab-search-box .dxbl-text-edit {
    border-radius: 8px;
    background-color: #f9fafb;
}

/* Przełącznik zakresu — ten sam segmentowy wzorzec, co „moje / wszyscy" na liście
   zgłoszeń (.views-scope). Jedna aplikacja, jeden sposób przełączania widoku. */
.ab-filters[b-cetnfzxs5p] {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 2px;
    margin: 0 10px 10px;
    padding: 2px;
    border-radius: 8px;
    background: #f3f4f6;
}

/* Segment przełącznika — wygląd 1:1 z .views-scope.scope-btn na liście zgłoszeń. */
.ab-filter[b-cetnfzxs5p] {
    appearance: none;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 6px;
    min-width: 0;
    padding: 6px 8px;
    border: 0;
    border-radius: 6px;
    background: transparent;
    color: #6b7280;
    font: inherit;
    font-size: 12px;
    font-weight: 600;
    line-height: 1.4;
    cursor: pointer;
}

.ab-filter:hover[b-cetnfzxs5p] {
    color: #374151;
}

.ab-filter.is-active[b-cetnfzxs5p] {
    background: #fff;
    color: #c2410c;
    box-shadow: 0 1px 2px rgba(15, 23, 42, 0.08);
}

.ab-filter-count[b-cetnfzxs5p] {
    font-variant-numeric: tabular-nums;
    opacity: 0.75;
}

.ab-groups[b-cetnfzxs5p] {
    flex: 1 1 auto;
    min-height: 0;
    overflow-y: auto;
    border-top: 1px solid #eef0f2;
}

.ab-group + .ab-group[b-cetnfzxs5p] {
    margin-top: 6px;
}

/* Nagłówek łańcucha — reguły jednego zdarzenia wykonują się po kolei, w tej kolejności. */
.ab-group-head[b-cetnfzxs5p] {
    display: flex;
    align-items: center;
    gap: 6px;
    padding: 10px 14px 6px;
    background: #fbfcfd;
    border-bottom: 1px solid #f1f3f7;
}

.ab-group-name[b-cetnfzxs5p] {
    font-size: 11px;
    font-weight: 700;
    letter-spacing: 0.04em;
    text-transform: uppercase;
    color: #9ca3af;
}

.ab-group-count[b-cetnfzxs5p] {
    font-size: 11px;
    color: #b6bcc4;
    font-variant-numeric: tabular-nums;
}

/* Wiersz listy, nie kafelek: bez ramki i bez akcentu z lewej, rozdzielony kreską —
   tak jak lista projektów (.projects-list .project-item). */
.ab-card[b-cetnfzxs5p] {
    display: block;
    width: 100%;
    text-align: left;
    padding: 12px 14px;
    margin: 0;
    border: 0;
    border-bottom: 1px solid #f1f3f7;
    border-radius: 0;
    background: #fff;
    cursor: pointer;
    font: inherit;
}

.ab-card:hover[b-cetnfzxs5p] {
    background: #f8fafc;
}

/* Zaznaczenie jak na liście projektów: tło plus pasek z lewej, a padding zbity o jego
   grubość, żeby treść nie drgnęła przy zmianie wyboru. */
.ab-card.is-selected[b-cetnfzxs5p] {
    background: #fff7ed;
    border-left: 3px solid #f97316;
    padding-left: 11px;
}

/* Reguła wyłączona nie pracuje — karta ma to mówić bez czytania pastylki. */
.ab-card.is-off .ab-card-name[b-cetnfzxs5p],
.ab-card.is-off .ab-card-desc[b-cetnfzxs5p] {
    color: #9ca3af;
}

.ab-card-head[b-cetnfzxs5p] {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 8px;
}

.ab-card-name[b-cetnfzxs5p] {
    font-size: 13px;
    font-weight: 600;
    color: #1f2937;
    overflow-wrap: anywhere;
}

/* Opis ma prawo zająć DWA wiersze — jednolinijkowy ucinał zdanie w połowie i karta
   nie mówiła nic ponad nazwę. Trzeci wiersz już zamieniałby listę w ścianę tekstu. */
.ab-card-desc[b-cetnfzxs5p] {
    margin-top: 6px;
    font-size: 12px;
    line-height: 1.35;
    color: #6b7280;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
    white-space: normal;
    overflow-wrap: anywhere;
}

.ab-card-meta[b-cetnfzxs5p] {
    display: flex;
    align-items: center;
    gap: 6px;
    margin-top: 6px;
    font-size: 11px;
    color: #9ca3af;
}

.ab-card-index[b-cetnfzxs5p] {
    margin-left: auto;
    font-variant-numeric: tabular-nums;
}

/* Znacznik stanu w tej samej formie, co tagi na kartach Kanbana (.kanban-tag):
   lekko zaokrąglony prostokąt z obwódką, a nie pastylka. */
.ab-status[b-cetnfzxs5p] {
    flex: 0 0 auto;
    display: inline-flex;
    align-items: center;
    padding: 3px 7px;
    border: 1px solid #e5e7eb;
    border-radius: 4px;
    background: #fbfbfc;
    font-size: 11px;
    font-weight: 500;
    line-height: 1;
    white-space: nowrap;
}

.ab-status.is-on[b-cetnfzxs5p] {
    background: #ecfdf5;
    border-color: #a7f3d0;
    color: #047857;
}

.ab-status.is-off[b-cetnfzxs5p] {
    background: #f3f4f6;
    border-color: #e5e7eb;
    color: #6b7280;
}

.ab-stop-pill[b-cetnfzxs5p] {
    padding: 1px 6px;
    border-radius: 4px;
    background: #fef2f2;
    color: #b91c1c;
    font-size: 10px;
    font-weight: 600;
    text-transform: uppercase;
}

.ab-empty[b-cetnfzxs5p],
.ab-detail-empty[b-cetnfzxs5p] {
    padding: 18px;
    color: #9ca3af;
    font-size: 13px;
    text-align: center;
}

/* ---------- Prawa kolumna: przebieg reguły ---------- */
.ab-detail[b-cetnfzxs5p] {
    display: flex;
    flex-direction: column;
    min-height: 0;
    overflow-y: auto;
    overflow-x: hidden;
    background: #fff;
    border: 1px solid #e6e8ee;
    border-radius: 8px;
    padding: 16px 18px;
}

/* Rząd pod tytułem karty: po lewej pastylki (stan, firma właściciela), po prawej liczniki
   kroków — jeden pas informacji zamiast dwóch osobnych wierszy. */
.ab-card-tags[b-cetnfzxs5p] {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 6px;
    margin-top: 5px;
}

.ab-card-tags .ab-card-counts[b-cetnfzxs5p] {
    margin-left: auto;
    font-size: 11px;
    color: #9ca3af;
    white-space: nowrap;
}

/* Pastylki w pasku panelu — stan i priorytet obok siebie. */
.ab-detail-badges[b-cetnfzxs5p] {
    display: flex;
    align-items: center;
    gap: 8px;
}

/* Firma właściciela — kształt i kolor kropki jak pastylka klienta w /projects (.pl-tag). */
.ab-owner-tag[b-cetnfzxs5p] {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    min-width: 0;
    max-width: 240px;
    padding: 3px 7px;
    border: 1px solid #e5e7eb;
    border-radius: 4px;
    background: #fbfbfc;
    color: #4b5563;
    font-size: 11px;
    font-weight: 500;
    line-height: 1;
}

.ab-owner-dot[b-cetnfzxs5p] {
    width: 7px;
    height: 7px;
    border-radius: 2px;
    flex-shrink: 0;
}

.ab-owner-text[b-cetnfzxs5p] {
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

/* Identyfikator w prawym górnym rogu karty — porządkowy, więc przygaszony. */
.ab-card-id[b-cetnfzxs5p] {
    flex: 0 0 auto;
    font-size: 11px;
    color: #9ca3af;
    font-variant-numeric: tabular-nums;
}

.ab-detail-index[b-cetnfzxs5p] {
    font-size: 12px;
    color: #9ca3af;
}

.ab-detail-name[b-cetnfzxs5p] {
    margin: 0;
    font-size: 20px;
    font-weight: 700;
    color: #1f2937;
    /* Nazwa bywa jednym długim ciągiem bez spacji — bez łamania rozpychała panel
       i pojawiał się poziomy pasek przewijania na całej tablicy (jak przy .ab-detail-desc). */
    overflow-wrap: anywhere;
    word-break: break-word;
}

.ab-detail-desc[b-cetnfzxs5p] {
    margin-top: 4px;
    font-size: 13px;
    color: #6b7280;
    /* Opis bywa jednym długim ciągiem bez spacji — bez łamania rozpychał panel
       i zjawiał się poziomy pasek przewijania na całej tablicy. */
    overflow-wrap: anywhere;
    word-break: break-word;
}

/* Metryczka: każda pozycja w OSOBNYM kontenerze z ramką, tak jak karty informacji
   w szczegółach zgłoszenia (.details-card w Tickets/Detail.razor.css — ta sama ramka,
   promień i tło). Wcześniej był to płaski rząd etykiet bez obramowania, przez co
   cztery pola zlewały się w jeden pasek.

   Pozycje rozciągają się równo na szerokość (flex: 1 1 170px) i zawijają na wąskim
   ekranie — bez tego kontenery miały szerokość swojej treści i rząd wychodził
   poszarpany, bo „Po utworzeniu zgłoszenia" jest trzy razy dłuższe niż data. */
.ab-meta[b-cetnfzxs5p] {
    display: flex;
    flex-wrap: wrap;
    gap: 14px;
    margin: 14px 0 16px;
}

/* Kontener 1:1 z .details-panel .d-section (Tickets.razor.css) — ramka, promień, padding
   i odstęp siatki przepisane co do wartości, żeby metryczka reguły wyglądała identycznie
   jak karty produktu/faktury/RBH w panelu zgłoszenia. NIE zaokrąglać na 12 px ani nie
   pogrubiać ramki „na oko": karty zgłoszenia są celowo płaskie (6 px, #eef0f4). */
.ab-meta-item[b-cetnfzxs5p] {
    display: flex;
    flex: 1 1 170px;
    flex-direction: column;
    gap: 8px;
    min-width: 0;
    padding: 10px 12px;
    background: #fff;
    border: 1px solid #eef0f4;
    border-radius: 6px;
    line-height: 1.4;
}

/* Etykieta 1:1 z .d-section h4, wartość 1:1 z .d-section — łącznie z rozmiarem 12,5 px,
   który wygląda na literówkę, a nie jest nią. */
.ab-meta-label[b-cetnfzxs5p] {
    font-size: 12px;
    font-weight: 600;
    letter-spacing: 0.04em;
    text-transform: uppercase;
    color: #6b7280;
}

.ab-meta-value[b-cetnfzxs5p] {
    font-size: 12.5px;
    color: #1f2937;
}

.ab-flow[b-cetnfzxs5p] {
    display: flex;
    flex-direction: column;
    gap: 16px;
}

.ab-flow-section[b-cetnfzxs5p] {
    display: flex;
    flex-direction: column;
    gap: 6px;
}

.ab-flow-label[b-cetnfzxs5p] {
    display: flex;
    align-items: baseline;
    gap: 8px;
    font-size: 10px;
    font-weight: 700;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: #9ca3af;
}

.ab-flow-hint[b-cetnfzxs5p] {
    font-size: 10px;
    font-weight: 500;
    letter-spacing: 0;
    text-transform: none;
    color: #b6bcc4;
}

/* Kroki przebiegu. Wyzwalacz i akcje są mocniejsze (to, co się dzieje), warunki spokojniejsze
   (to, co musi zajść). Wartości wyróżniamy, bo to po nich poznaje się regułę. */
/* Krok przebiegu w takiej oprawie, jak pozycje w panelu projektu (.pt-item):
   cienka ramka, mały promień, białe tło. */
.ab-node[b-cetnfzxs5p] {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 8px 10px;
    border: 1px solid #eef0f4;
    border-radius: 6px;
    background: #fff;
    font-size: 13px;
    color: #374151;
    overflow-wrap: anywhere;
}

.ab-node-trigger[b-cetnfzxs5p] {
    background: #fff7ed;
    border-color: #fed7aa;
}

.ab-node-condition[b-cetnfzxs5p] {
    background: #f9fafb;
}

.ab-node-action[b-cetnfzxs5p] {
    background: #f8fafc;
    border-color: #dbe3ea;
}

.ab-node-empty[b-cetnfzxs5p] {
    background: #fff;
    color: #9ca3af;
    font-style: italic;
}

.ab-node-field[b-cetnfzxs5p] {
    font-weight: 600;
    color: #1f2937;
}

/* Symbol operatora — monospace, żeby „=" i „≠" nie skakały w pionie. */
.ab-node-op[b-cetnfzxs5p] {
    color: #6b7280;
    font-family: Consolas, "Courier New", monospace;
    font-weight: 600;
}

/* Wartość warunku/akcji w akcencie aplikacji — to ona niesie treść reguły, więc ma być
   pierwszą rzeczą, którą oko łapie w wierszu. */
.ab-node-value[b-cetnfzxs5p] {
    padding: 1px 6px;
    border-radius: 4px;
    background: #fff7ed;
    color: #9a3412;
    font-weight: 600;
}

.ab-node-arrow[b-cetnfzxs5p] {
    color: #9ca3af;
}

.ab-node-order[b-cetnfzxs5p] {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex: 0 0 auto;
    width: 20px;
    height: 20px;
    border-radius: 50%;
    background: #f97316;
    color: #fff;
    font-size: 11px;
    font-weight: 700;
}

/* Spójnik między warunkami — reguła łączy je zawsze przez AND. */
.ab-and[b-cetnfzxs5p] {
    align-self: flex-start;
    margin-left: 12px;
    padding: 0 6px;
    border-radius: 4px;
    background: #eef2ff;
    color: #4338ca;
    font-size: 10px;
    font-weight: 700;
    letter-spacing: 0.06em;
}

.ab-stop[b-cetnfzxs5p] {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 9px 12px;
    border: 1px dashed #fecaca;
    border-radius: 8px;
    background: #fef2f2;
    color: #b91c1c;
    font-size: 12px;
}

/* Pasek panelu — odpowiednik .col-header z /projects: identyfikator po lewej, akcje po
   prawej, białe tło i kreska pod spodem. Ujemne marginesy rozciągają go na całą szerokość,
   bo panel ma własny padding. */
.ab-detail-bar[b-cetnfzxs5p] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 8px;
    margin: -16px -18px 12px;
    padding: 12px 14px;
    border-bottom: 1px solid #eef0f4;
}

.ab-detail-actions[b-cetnfzxs5p] {
    display: flex;
    align-items: center;
    gap: 8px;
    flex-wrap: wrap;
}

/* Wąski ekran: panel schodzi pod listę, obie części dostają własną wysokość. */
@media (max-width: 1200px) {
    .ab-layout[b-cetnfzxs5p] {
        grid-template-columns: 1fr;
        grid-template-rows: minmax(220px, 40%) 1fr;
    }
}

/* === Zakładki panelu (Diagram / Historia) === */
.ab-tabs[b-cetnfzxs5p] {
    display: flex;
    gap: 4px;
    margin-bottom: 14px;
    border-bottom: 1px solid #eef0f2;
}

.ab-tab[b-cetnfzxs5p] {
    padding: 6px 12px;
    border: 0;
    border-bottom: 2px solid transparent;
    background: transparent;
    color: #6b7280;
    font: inherit;
    font-size: 13px;
    cursor: pointer;
}

.ab-tab:hover[b-cetnfzxs5p] {
    color: #1f2937;
}

.ab-tab.is-active[b-cetnfzxs5p] {
    color: #9a3412;
    border-bottom-color: #f97316;
    font-weight: 600;
}

/* === Spinacze JEŚLI / TO ===
   Wcięcie i pionowa kreska po lewej wiążą sekcje w jeden łańcuch — bez tego wyzwalacz,
   warunki i akcje wyglądały jak trzy niezależne listy pod sobą. */
.ab-connector[b-cetnfzxs5p] {
    display: flex;
    align-items: center;
    gap: 8px;
    margin-left: 14px;
    padding-left: 14px;
    border-left: 2px solid #e6e8eb;
    min-height: 26px;
}

.ab-connector-badge[b-cetnfzxs5p] {
    padding: 1px 8px;
    border-radius: 4px;
    background: #eef2ff;
    color: #3730a3;
    font-size: 10px;
    font-weight: 700;
    letter-spacing: 0.08em;
}

.ab-connector-badge.is-then[b-cetnfzxs5p] {
    background: #fff7ed;
    color: #9a3412;
}

.ab-connector-count[b-cetnfzxs5p] {
    font-size: 11px;
    color: #9ca3af;
}

/* === Historia uruchomień (na razie sam znacznik ostatniego zadziałania) === */
.ab-history[b-cetnfzxs5p] {
    display: flex;
    flex-direction: column;
    gap: 10px;
}

.ab-history-last[b-cetnfzxs5p] {
    display: flex;
    flex-direction: column;
    gap: 3px;
    padding: 12px 14px;
    border: 1px solid #e6e8ee;
    border-radius: 8px;
    background: #f9fafb;
}

.ab-history-value[b-cetnfzxs5p] {
    font-size: 15px;
    font-weight: 600;
    color: #1f2937;
}

.ab-history-note[b-cetnfzxs5p] {
    font-size: 12px;
    line-height: 1.45;
    color: #6b7280;
}

/* === Historia uruchomień === */
.ab-history-summary[b-cetnfzxs5p] {
    font-size: 11px;
    font-weight: 700;
    letter-spacing: 0.04em;
    text-transform: uppercase;
    color: #9ca3af;
}

.ab-runs[b-cetnfzxs5p] {
    display: flex;
    flex-direction: column;
}

/* Wiersz dziennika: kiedy, na czym, ile akcji — rozdzielone kreską jak lista po lewej. */
.ab-run[b-cetnfzxs5p] {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 8px 2px;
    border-bottom: 1px solid #f1f3f7;
    font-size: 12.5px;
    color: #374151;
}

.ab-run:last-child[b-cetnfzxs5p] {
    border-bottom: 0;
}

.ab-run-date[b-cetnfzxs5p] {
    flex: 0 0 auto;
    color: #6b7280;
    font-variant-numeric: tabular-nums;
}

.ab-run-ticket[b-cetnfzxs5p] {
    flex: 1 1 auto;
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    color: #c2410c;
    text-decoration: none;
}

.ab-run-ticket:hover[b-cetnfzxs5p] {
    text-decoration: underline;
}

/* Zgłoszenie skasowane — numer zostaje, ale to już tylko ślad w dzienniku. */
.ab-run-ticket.is-gone[b-cetnfzxs5p] {
    color: #9ca3af;
}

.ab-run-actions[b-cetnfzxs5p] {
    flex: 0 0 auto;
    color: #9ca3af;
    white-space: nowrap;
}
/* /Components/Pages/Settings/Billing/Billing.razor.rz.scp.css */
/* === Strona rozliczeń ===
   Układ i język wizualny wzięte ze statystyk (karty + kafelki KPI), żeby moduł nie wyglądał
   jak formularz doklejony obok reszty aplikacji. Kolory statusów okresów są te same, co
   kolory stanu faktury na zgłoszeniu — obie skale opisują tę samą drogę dokumentu. */
.billing-page[b-p7m7rk0j6e] {
    display: flex;
    flex-direction: column;
    gap: 16px;
    padding: 4px;
}

/* === Pasek powrotu przy wybranym płatniku ===
   Strona nie ma własnego tytułu ani opisu, więc pasek trzyma się prawej krawędzi — tam,
   gdzie wybór płatnika stał, gdy nagłówek zajmował lewą stronę. W przeglądzie tego paska
   nie ma w ogóle: wybór płatnika siedzi wtedy w .billing-head-actions. */
.billing-head[b-p7m7rk0j6e] {
    display: flex;
    align-items: flex-end;
    justify-content: flex-end;
    gap: 16px;
    flex-wrap: wrap;
}

/* Prawa strona nagłówka karty przeglądu: wybór płatnika i zbiorcza zmiana ustaleń w jednej
   linii. Wyrównane do dołu, żeby przycisk siadał na tej samej podstawie co pole listy. */
.billing-head-actions[b-p7m7rk0j6e] {
    display: flex;
    align-items: flex-end;
    gap: 10px;
    flex-wrap: wrap;
}

/* Jedna szerokość dla przycisków akcji nagłówka — szerszy wariant jest czytelniejszy
   przy polskich etykietach. */
[b-p7m7rk0j6e] .billing-head-action-button,
[b-p7m7rk0j6e] .billing-fakturownia-button {
    width: 180px;
    justify-content: center;
    white-space: nowrap;
}

.billing-owner-pick[b-p7m7rk0j6e] {
    display: flex;
    align-items: center;
    gap: 10px;
}

/* Inicjały płatnika — ta sama zasada co awatary grup na liście zgłoszeń:
   ten sam podmiot dostaje zawsze ten sam kolor. */
.billing-owner-avatar[b-p7m7rk0j6e] {
    width: 34px;
    height: 34px;
    border-radius: 9px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    color: #fff;
    font-size: 0.78rem;
    font-weight: 600;
    flex-shrink: 0;
    letter-spacing: .02em;
}

[b-p7m7rk0j6e] .billing-owner-combo {
    width: 320px !important;
    max-width: 320px !important;
}

/* === Kafelki KPI === */
.billing-kpis[b-p7m7rk0j6e] {
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: 14px;
}

/* === Karta sekcji === */
.billing-card[b-p7m7rk0j6e] {
    background: #fff;
    border: 1px solid #e5e7eb;
    border-radius: 10px;
    padding: 16px 18px;
}

.billing-card-head[b-p7m7rk0j6e] {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 14px;
    flex-wrap: wrap;
    margin-bottom: 14px;
}

.billing-card-head h3[b-p7m7rk0j6e] {
    margin: 0;
    font-size: 0.72rem;
    font-weight: 600;
    letter-spacing: 0.05em;
    text-transform: uppercase;
    color: #9ca3af;
}

/* Podpowiedź pod tytułem karty — jedno zdanie o tym, co dana sekcja właściwie robi.
   Bez tego „Okresy rozliczeniowe" nie mówi, że zmiana statusu rusza zgłoszenia. */
.billing-card-hint[b-p7m7rk0j6e] {
    margin-top: 5px;
    font-size: 0.78rem;
    color: #9ca3af;
    max-width: 78ch;
    line-height: 1.45;
}

/* Nagłówek zwijanej karty — kliknięcie w cały pasek, nie w samą strzałkę: łatwiej trafić,
   a nagłówek i tak nie niesie innych akcji poza przyciskiem, który zatrzymuje zdarzenie. */
.billing-card-toggle[b-p7m7rk0j6e] {
    cursor: pointer;
    user-select: none;
    margin-bottom: 0;
}

.billing-card-toggle:hover h3[b-p7m7rk0j6e] {
    color: #4b5563;
}

.billing-chevron[b-p7m7rk0j6e] {
    margin-right: 6px;
    opacity: .55;
    vertical-align: -2px;
}

/* Licznik przy tytule zwiniętej karty — ile miesięcy w środku, bez rozwijania. */
.billing-count[b-p7m7rk0j6e] {
    display: inline-block;
    margin-left: 6px;
    padding: 0 7px;
    border-radius: 999px;
    background: #f1f3f5;
    color: #6b7280;
    font-size: 0.7rem;
    font-weight: 600;
}

/* Skrót planu w nagłówku karty — model i stawki bez czytania formularza. */
.billing-plan-chip[b-p7m7rk0j6e] {
    background: #f3f4f6;
    border-radius: 999px;
    padding: 4px 12px;
    font-size: 0.78rem;
    font-weight: 500;
    color: #374151;
}

.billing-card-foot[b-p7m7rk0j6e] {
    margin-top: 14px;
    display: flex;
    justify-content: flex-end;
}

/* === Wybór okresu do zamknięcia === */
.billing-period-pick[b-p7m7rk0j6e] {
    display: flex;
    align-items: flex-end;
    gap: 12px;
    flex-wrap: wrap;
    margin-bottom: 12px;
}

.billing-field[b-p7m7rk0j6e] {
    display: flex;
    flex-direction: column;
    gap: 4px;
}

.billing-field label[b-p7m7rk0j6e] {
    font-size: 0.72rem;
    font-weight: 600;
    letter-spacing: .03em;
    text-transform: uppercase;
    color: #9ca3af;
}

[b-p7m7rk0j6e] .billing-month-combo {
    width: 160px !important;
}

[b-p7m7rk0j6e] .billing-year-spin {
    width: 110px !important;
}

/* Skróty „poprzedni / bieżący miesiąc" — segmentowany przełącznik jak w statystykach. */
.billing-presets[b-p7m7rk0j6e] {
    display: inline-flex;
    background: #f1f3f5;
    border-radius: 8px;
    padding: 3px;
    gap: 2px;
}

.billing-preset[b-p7m7rk0j6e] {
    border: none;
    background: transparent;
    padding: 6px 12px;
    border-radius: 6px;
    font-size: 0.8rem;
    color: #4b5563;
    cursor: pointer;
    white-space: nowrap;
    transition: background 0.15s ease, color 0.15s ease;
}

.billing-preset:hover[b-p7m7rk0j6e] {
    color: #111827;
}

.billing-preset.active[b-p7m7rk0j6e] {
    background: #fff;
    color: #111827;
    font-weight: 600;
    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.08);
}

.billing-period-actions[b-p7m7rk0j6e] {
    display: flex;
    gap: 8px;
    margin-left: auto;
}

/* === Ostrzeżenie (brak planu) === */
.billing-warning[b-p7m7rk0j6e] {
    display: flex;
    align-items: center;
    gap: 8px;
    background: #fffbeb;
    border: 1px solid #fde68a;
    color: #92400e;
    border-radius: 8px;
    padding: 9px 12px;
    font-size: 0.82rem;
    margin-bottom: 12px;
}

/* === Pasek sumy === */
.billing-summary[b-p7m7rk0j6e] {
    display: flex;
    gap: 10px;
    flex-wrap: wrap;
    margin-bottom: 12px;
}

.billing-summary-item[b-p7m7rk0j6e] {
    display: flex;
    flex-direction: column;
    gap: 2px;
    background: #f9fafb;
    border: 1px solid #eef0f4;
    border-radius: 8px;
    padding: 8px 14px;
    min-width: 120px;
}

.billing-summary-item .bs-label[b-p7m7rk0j6e] {
    font-size: 0.68rem;
    font-weight: 600;
    letter-spacing: .04em;
    text-transform: uppercase;
    color: #9ca3af;
}

.billing-summary-item .bs-value[b-p7m7rk0j6e] {
    font-size: 1rem;
    font-weight: 600;
    color: #111827;
    font-variant-numeric: tabular-nums;
}

/* Kwota końcowa wyróżniona — to jest liczba, po którą się tu przychodzi. */
.billing-summary-total[b-p7m7rk0j6e] {
    background: #eff6ff;
    border-color: #bfdbfe;
}

.billing-summary-total .bs-value[b-p7m7rk0j6e] {
    color: #1d4ed8;
}

.billing-summary-popup[b-p7m7rk0j6e] {
    margin-bottom: 14px;
}

/* === Lista okresów ===
   Wiersze zamiast siatki: okres to kilka liczb i zestaw akcji, a nie tabela do sortowania.
   Duży numer miesiąca po lewej robi za oś czasu. */
.billing-periods[b-p7m7rk0j6e] {
    display: flex;
    flex-direction: column;
    gap: 8px;
}

.billing-period-row[b-p7m7rk0j6e] {
    display: flex;
    align-items: center;
    gap: 14px;
    border: 1px solid #eef0f4;
    border-radius: 10px;
    padding: 10px 14px;
    transition: border-color 0.15s ease, box-shadow 0.15s ease;
}

.billing-period-row:hover[b-p7m7rk0j6e] {
    border-color: #d7dbe2;
    box-shadow: 0 2px 10px rgba(15, 23, 42, 0.05);
}

.bp-month[b-p7m7rk0j6e] {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    width: 54px;
    flex-shrink: 0;
    background: #f9fafb;
    border-radius: 8px;
    padding: 6px 0;
}

/* === Pory roku na kafelku miesiąca ===
   Barwy z palety kafelków ustawień (custom_yard.css), rozjaśnione do tła: kafelek ma nieść
   miesiąc, a nie krzyczeć kolorem. Zima niebieska (blue/sky/indigo), wiosna zielona
   (lime/green/mint), lato bursztynowe (amber/gold/orange), jesień brązowa (bronze/brown/olive).
   Dzięki temu przewijając rok widać, gdzie kończy się sezon, bez czytania numerów. */
.bp-month.season-winter[b-p7m7rk0j6e] {
    background: #e0edfd;
    box-shadow: inset 0 0 0 1px #bfdbfe;
}

.bp-month.season-winter .bp-month-num[b-p7m7rk0j6e] {
    color: #1d4ed8;
}

.bp-month.season-spring[b-p7m7rk0j6e] {
    background: #e6f7e3;
    box-shadow: inset 0 0 0 1px #bbf7d0;
}

.bp-month.season-spring .bp-month-num[b-p7m7rk0j6e] {
    color: #15803d;
}

.bp-month.season-summer[b-p7m7rk0j6e] {
    background: #fdf2d8;
    box-shadow: inset 0 0 0 1px #fde68a;
}

.bp-month.season-summer .bp-month-num[b-p7m7rk0j6e] {
    color: #b45309;
}

.bp-month.season-autumn[b-p7m7rk0j6e] {
    background: #f6e8db;
    box-shadow: inset 0 0 0 1px #e7cdb0;
}

.bp-month.season-autumn .bp-month-num[b-p7m7rk0j6e] {
    color: #92400e;
}

/* Miesiąc bez ruchu zostaje szary — kolor sezonu ma wyróżniać to, w czym coś się dzieje. */
.bm-idle .bp-month[b-p7m7rk0j6e] {
    background: #f9fafb;
    box-shadow: none;
}

.bp-month-num[b-p7m7rk0j6e] {
    font-size: 1.15rem;
    font-weight: 700;
    line-height: 1;
    color: #111827;
    font-variant-numeric: tabular-nums;
}

.bp-month-year[b-p7m7rk0j6e] {
    font-size: 0.68rem;
    color: #9ca3af;
    font-variant-numeric: tabular-nums;
}

.bp-main[b-p7m7rk0j6e] {
    flex: 1 1 auto;
    min-width: 0;
}

.bp-line1[b-p7m7rk0j6e] {
    display: flex;
    align-items: center;
    gap: 8px;
    flex-wrap: wrap;
    font-size: 0.8rem;
    color: #374151;
}

.bp-line2[b-p7m7rk0j6e] {
    margin-top: 3px;
    font-size: 0.74rem;
    color: #9ca3af;
}

.bp-sep[b-p7m7rk0j6e] {
    color: #d1d5db;
}

/* === Spółka wystawiająca fakturę za okres ===
   Trzecia linia wiersza, a nie kolejna kolumna: przy kilku kontach Fakturownii nazwa spółki
   bywa dłuższa niż kwota i w osobnej kolumnie rozpychała wiersz na całej liście. */
.bp-account[b-p7m7rk0j6e] {
    display: flex;
    align-items: center;
    gap: 6px;
    margin-top: 5px;
    font-size: 0.74rem;
    color: #9ca3af;
}

.bp-account-value[b-p7m7rk0j6e] {
    color: #4b5563;
}

[b-p7m7rk0j6e] .bp-account-combo {
    min-width: 180px;
    max-width: 260px;
}

/* Numer wystawionej faktury — link do podglądu w Fakturowni, jeśli go oddała. */
.bp-invoice-number[b-p7m7rk0j6e] {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    font-weight: 600;
    color: #4b5563;
    text-decoration: none;
}

a.bp-invoice-number:hover[b-p7m7rk0j6e] {
    color: #111827;
    text-decoration: underline;
}

/* Błąd wystawiania przy dokumencie produktów — sam znacznik, treść w podpowiedzi:
   odpowiedź Fakturownii bywa długa i rozpychałaby wiersz. */
.bp-issue-error[b-p7m7rk0j6e] {
    color: #b91c1c;
    font-weight: 600;
    cursor: help;
}

/* Źródło pozycji produktowej (OK-API, YARD) w szczegółach dokumentu — pastylka jak typ pozycji okresu. */
.bl-type-product[b-p7m7rk0j6e] {
    background: #ecfeff;
    color: #155e75;
    font-family: ui-monospace, monospace;
    letter-spacing: .04em;
}

/* Znacznik „dane niekompletne” na karcie nabywcy — bez NIP-u faktura nie wyjdzie,
   więc ma być widać to od wejścia, a nie dopiero po kliknięciu „Wystaw”. */
.billing-chip-warn[b-p7m7rk0j6e] {
    background: #fef3c7;
    color: #92400e;
}

.bp-hours[b-p7m7rk0j6e],
.bp-lines[b-p7m7rk0j6e] {
    font-variant-numeric: tabular-nums;
}

.bp-amounts[b-p7m7rk0j6e] {
    display: flex;
    align-items: flex-end;
    gap: 18px;
    flex-shrink: 0;
}

.bp-amount[b-p7m7rk0j6e] {
    display: flex;
    flex-direction: column;
    align-items: flex-end;
    flex-shrink: 0;
}

.bp-amount-label[b-p7m7rk0j6e] {
    font-size: 0.6rem;
    font-weight: 600;
    line-height: 1.1;
    letter-spacing: .04em;
    text-transform: uppercase;
    color: #9ca3af;
}

.bp-amount-value[b-p7m7rk0j6e] {
    font-size: 1.05rem;
    font-weight: 600;
    color: #111827;
    font-variant-numeric: tabular-nums;
}

.bp-amount-cur[b-p7m7rk0j6e] {
    font-size: 0.74rem;
    color: #9ca3af;
}

.bp-actions[b-p7m7rk0j6e] {
    display: flex;
    gap: 6px;
    flex-shrink: 0;
}

/* Status okresu — ta sama pastylka co status zgłoszenia (kropka + nazwa). */
.status-tag[b-p7m7rk0j6e] {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    font-size: 0.8rem;
    font-weight: 600;
    color: #374151;
    white-space: nowrap;
}

.status-tag-dot[b-p7m7rk0j6e] {
    width: 8px;
    height: 8px;
    border-radius: 2px;
    display: inline-block;
    flex-shrink: 0;
}

/* Pastylka stanu faktury w siatce „do rozliczenia" — jak na liście zgłoszeń. */
.invoice-tag[b-p7m7rk0j6e] {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    font-size: 12px;
    font-weight: 600;
    color: #374151;
    white-space: nowrap;
}

.invoice-tag-icon[b-p7m7rk0j6e] {
    width: 13px;
    height: 13px;
    display: inline-block;
    flex-shrink: 0;
    -webkit-mask: url('/images/bootstrap-icons/receipt.svg') no-repeat center / contain;
    mask: url('/images/bootstrap-icons/receipt.svg') no-repeat center / contain;
}

/* === Tabela pozycji okresu (popup) === */
.billing-lines[b-p7m7rk0j6e] {
    width: 100%;
    border-collapse: collapse;
    font-size: 0.85rem;
}

.billing-lines th[b-p7m7rk0j6e],
.billing-lines td[b-p7m7rk0j6e] {
    padding: 8px 10px;
    border-bottom: 1px solid #eef0f4;
}

.billing-lines thead th[b-p7m7rk0j6e] {
    font-size: 0.7rem;
    font-weight: 600;
    letter-spacing: .04em;
    text-transform: uppercase;
    color: #9ca3af;
    border-bottom: 1px solid #e5e7eb;
}

.billing-lines tbody td[b-p7m7rk0j6e] {
    color: #1f2937;
    font-variant-numeric: tabular-nums;
}

.billing-lines tfoot th[b-p7m7rk0j6e] {
    border-bottom: none;
    border-top: 2px solid #e5e7eb;
    color: #111827;
    font-variant-numeric: tabular-nums;
}

.bl-negative[b-p7m7rk0j6e] {
    color: #dc2626;
}

/* Zgłaszający przy pozycji: informacja towarzysząca opisowi, a nie liczba — stoi
   ciszej niż godziny i kwoty, żeby nie konkurowała z tym, po co się w zestawienie
   zagląda. */
.bl-reporter[b-p7m7rk0j6e] {
    color: #6b7280;
}

/* Wejście w zgłoszenie z pozycji okresu. Rozmiarem i kształtem to samo, co pastylka typu
   obok której stoi — wiersz ma zostać jedną linią, a nie urosnąć o przycisk. */
.bl-open[b-p7m7rk0j6e] {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    margin-right: 6px;
    padding: 1px 8px;
    border: 1px solid #e5e7eb;
    border-radius: 999px;
    font-size: 0.68rem;
    font-weight: 600;
    letter-spacing: .02em;
    color: #4b5563;
    text-decoration: none;
    vertical-align: middle;
    white-space: nowrap;
}

    .bl-open:hover[b-p7m7rk0j6e] {
        border-color: #d1d5db;
        background: #f9fafb;
        color: #111827;
    }

/* Typ pozycji: kolor niesie informację (abonament / godziny / nadwyżka / korekta),
   bo w długim okresie sam opis jest za mało kontrastowy. */
.bl-type[b-p7m7rk0j6e] {
    display: inline-block;
    border-radius: 999px;
    padding: 1px 8px;
    margin-right: 6px;
    font-size: 0.68rem;
    font-weight: 600;
    letter-spacing: .02em;
}

.bl-type-tickethours[b-p7m7rk0j6e] {
    background: rgba(59, 130, 246, 0.12);
    color: #1d4ed8;
}

.bl-type-subscription[b-p7m7rk0j6e] {
    background: rgba(139, 92, 246, 0.12);
    color: #6d28d9;
}

.bl-type-overage[b-p7m7rk0j6e] {
    background: rgba(245, 158, 11, 0.15);
    color: #b45309;
}

.bl-type-adjustment[b-p7m7rk0j6e] {
    background: rgba(107, 114, 128, 0.14);
    color: #4b5563;
}

.billing-adjustment[b-p7m7rk0j6e] {
    display: flex;
    align-items: flex-end;
    gap: 10px;
    flex-wrap: wrap;
    margin-top: 14px;
    padding-top: 14px;
    border-top: 1px dashed #e5e7eb;
}

/* === Puste stany === */
.billing-empty[b-p7m7rk0j6e] {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 6px;
    padding: 48px 20px;
    background: #fff;
    border: 1px dashed #e5e7eb;
    border-radius: 10px;
    text-align: center;
}

.billing-empty-inline[b-p7m7rk0j6e] {
    padding: 28px 16px;
    background: transparent;
}

.billing-empty-icon[b-p7m7rk0j6e] {
    width: 32px;
    height: 32px;
    display: block;
    opacity: .35;
    margin-bottom: 4px;
}

.billing-empty-title[b-p7m7rk0j6e] {
    font-size: 1rem;
    font-weight: 600;
    color: #374151;
}

.billing-empty-sub[b-p7m7rk0j6e] {
    font-size: 0.85rem;
    color: #9ca3af;
    max-width: 52ch;
}

/* === Wąskie ekrany === */
@media (max-width: 1200px) {
    .billing-kpis[b-p7m7rk0j6e] {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }
}

@media (max-width: 768px) {
    .billing-kpis[b-p7m7rk0j6e] {
        grid-template-columns: minmax(0, 1fr);
    }

    .billing-period-actions[b-p7m7rk0j6e] {
        margin-left: 0;
    }

    .billing-period-row[b-p7m7rk0j6e] {
        flex-wrap: wrap;
    }

    .bp-amounts[b-p7m7rk0j6e] {
        margin-left: auto;
    }

    [b-p7m7rk0j6e] .billing-owner-combo {
        width: 100% !important;
        max-width: 100% !important;
    }
}

/* === Pasek stanu okresu ===
   Neutralny, nie alarmowy: „ten miesiąc jest już zamknięty" to normalna sytuacja,
   a nie błąd — inaczej niż żółte ostrzeżenie o braku planu. */
.billing-notice[b-p7m7rk0j6e] {
    display: flex;
    align-items: flex-start;
    gap: 9px;
    background: #f0f9ff;
    border: 1px solid #bae6fd;
    border-radius: 8px;
    padding: 10px 13px;
    margin-bottom: 12px;
}

.billing-notice-title[b-p7m7rk0j6e] {
    font-size: 0.84rem;
    font-weight: 600;
    color: #0c4a6e;
}

.billing-notice-sub[b-p7m7rk0j6e] {
    margin-top: 3px;
    font-size: 0.79rem;
    line-height: 1.45;
    color: #0369a1;
    max-width: 88ch;
}

/* === Wykluczone z rozliczeń ===
   Zwinięte domyślnie: to lista wyjątków, a nie codzienna robota. Ma jednak istnieć,
   bo bez niej wykluczenie było operacją bez odwrotu. */
.billing-excluded[b-p7m7rk0j6e] {
    margin-top: 14px;
    padding-top: 12px;
    border-top: 1px dashed #e5e7eb;
}

.billing-excluded-toggle[b-p7m7rk0j6e] {
    display: inline-flex;
    align-items: center;
    gap: 7px;
    border: none;
    background: transparent;
    padding: 2px 0;
    font-size: 0.8rem;
    font-weight: 600;
    color: #6b7280;
    cursor: pointer;
}

.billing-excluded-toggle:hover[b-p7m7rk0j6e] {
    color: #111827;
}

.billing-excluded-list[b-p7m7rk0j6e] {
    display: flex;
    flex-direction: column;
    gap: 4px;
    margin-top: 8px;
}

.billing-excluded-row[b-p7m7rk0j6e] {
    display: flex;
    align-items: center;
    gap: 12px;
    border: 1px solid #eef0f4;
    border-radius: 8px;
    padding: 7px 12px;
    font-size: 0.82rem;
}

.billing-excluded-row .be-number[b-p7m7rk0j6e] {
    font-weight: 600;
    color: #374151;
    flex-shrink: 0;
    font-variant-numeric: tabular-nums;
}

.billing-excluded-row .be-subject[b-p7m7rk0j6e] {
    flex: 1 1 auto;
    min-width: 0;
    color: #6b7280;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.billing-excluded-row .be-rbh[b-p7m7rk0j6e] {
    flex-shrink: 0;
    color: #9ca3af;
    font-variant-numeric: tabular-nums;
}

/* Skrót w pasku stanu okresu — wygląda jak link, ale jest przyciskiem (akcja, nie nawigacja). */
.billing-notice-link[b-p7m7rk0j6e] {
    margin-top: 6px;
    border: none;
    background: transparent;
    padding: 0;
    font-size: 0.79rem;
    font-weight: 600;
    color: #0284c7;
    cursor: pointer;
    text-decoration: underline;
    text-underline-offset: 2px;
}

.billing-notice-link:hover[b-p7m7rk0j6e] {
    color: #0c4a6e;
}

/* === Powrót do przeglądu === */
.billing-back[b-p7m7rk0j6e] {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    border: 1px solid #e5e7eb;
    background: #fff;
    border-radius: 8px;
    padding: 7px 12px;
    font-size: 0.82rem;
    font-weight: 600;
    color: #4b5563;
    cursor: pointer;
    white-space: nowrap;
}

.billing-back:hover[b-p7m7rk0j6e] {
    border-color: #d1d5db;
    color: #111827;
}

/* === Lista miesięcy na wejściu ===
   Ten sam wiersz co okres płatnika, ale z dwoma torami obok siebie: zgłoszenia i produkty.
   Wybrany miesiąc ma akcent po lewej — pod listą stoi jego tabela płatników. */
.bm-row[b-p7m7rk0j6e] {
    cursor: pointer;
    transition: border-color 0.15s ease, box-shadow 0.15s ease;
}

.bm-row:hover[b-p7m7rk0j6e] {
    border-color: #d7dbe2;
    box-shadow: 0 2px 10px rgba(15, 23, 42, 0.05);
}

.bm-selected[b-p7m7rk0j6e] {
    border-left: 3px solid #f97316;
    background: #fff7ed;
}

.bm-idle[b-p7m7rk0j6e] {
    opacity: .6;
}

.bm-idle .bp-month-num[b-p7m7rk0j6e] {
    color: #9ca3af;
}

.bm-lane[b-p7m7rk0j6e] {
    flex: 1 1 260px;
    min-width: 0;
    display: flex;
    flex-direction: column;
    gap: 2px;
}

.bm-lane-label[b-p7m7rk0j6e] {
    font-size: 0.66rem;
    font-weight: 600;
    letter-spacing: .05em;
    text-transform: uppercase;
    color: #9ca3af;
}

.bm-figures[b-p7m7rk0j6e] {
    display: flex;
    align-items: center;
    gap: 6px;
    flex-wrap: wrap;
    font-size: 0.8rem;
    color: #6b7280;
}

.bm-amount[b-p7m7rk0j6e] {
    font-weight: 600;
    color: #111827;
    font-variant-numeric: tabular-nums;
}

.bm-amount small[b-p7m7rk0j6e] {
    font-size: 0.7rem;
    color: #9ca3af;
    font-weight: 500;
}

.bm-none[b-p7m7rk0j6e] {
    font-size: 0.8rem;
    color: #b0b7c3;
}

.bm-dots[b-p7m7rk0j6e] {
    display: flex;
    gap: 10px;
    font-size: 0.72rem;
    color: #6b7280;
}

.bm-dot-group[b-p7m7rk0j6e] {
    display: inline-flex;
    align-items: center;
    gap: 4px;
}

.bm-chevron[b-p7m7rk0j6e] {
    flex-shrink: 0;
    opacity: .5;
}

.bm-older[b-p7m7rk0j6e] {
    margin-top: 8px;
}

/* === Pozycje miesiąca (okno) ===
   Trzy sekcje po etapie: do policzenia, do wyfakturowania, wyfakturowane. Wiersz jest jedną
   pozycją — okresem zgłoszeń albo dokumentem produktów — więc ten sam płatnik potrafi stać
   w dwóch, i o to chodzi: to dwie osobne faktury tego samego miesiąca. */
.me-section + .me-section[b-p7m7rk0j6e] {
    margin-top: 18px;
}

.me-section-head[b-p7m7rk0j6e] {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 12px;
    padding-bottom: 6px;
    margin-bottom: 8px;
    border-bottom: 1px solid #eef0f4;
}

.me-section-title[b-p7m7rk0j6e] {
    font-size: 0.72rem;
    font-weight: 700;
    letter-spacing: .05em;
    text-transform: uppercase;
    color: #6b7280;
}

.me-section-sum[b-p7m7rk0j6e] {
    font-size: 0.85rem;
    font-weight: 600;
    color: #111827;
    font-variant-numeric: tabular-nums;
}

.me-section-totals[b-p7m7rk0j6e] {
    display: flex;
    align-items: flex-end;
    gap: 24px;
    font-size: 0.85rem;
    font-weight: 600;
    color: #111827;
    font-variant-numeric: tabular-nums;
}

.me-section-totals > span[b-p7m7rk0j6e] {
    display: flex;
    flex-direction: column;
    align-items: flex-end;
}

.me-section-totals small[b-p7m7rk0j6e],
.me-amount small[b-p7m7rk0j6e] {
    font-size: 0.6rem;
    font-weight: 600;
    line-height: 1.1;
    letter-spacing: .04em;
    text-transform: uppercase;
    color: #9ca3af;
}

.me-row[b-p7m7rk0j6e] {
    display: grid;
    grid-template-columns: 30px minmax(0, 1.6fr) 92px minmax(0, 1.2fr) 150px 105px 115px 130px;
    align-items: center;
    gap: 10px;
    padding: 7px 10px;
    border: 1px solid #f1f3f5;
    border-radius: 9px;
    font-size: 0.84rem;
    color: #374151;
    cursor: pointer;
    transition: border-color 0.15s ease, box-shadow 0.15s ease;
}

.me-row + .me-row[b-p7m7rk0j6e] {
    margin-top: 5px;
}

.me-row:hover[b-p7m7rk0j6e] {
    border-color: #d7dbe2;
    box-shadow: 0 2px 10px rgba(15, 23, 42, 0.05);
}

.me-avatar[b-p7m7rk0j6e] {
    width: 26px;
    height: 26px;
    border-radius: 7px;
    font-size: 0.62rem;
}

.me-owner[b-p7m7rk0j6e] {
    font-weight: 600;
    color: #111827;
    min-width: 0;
    /* Dwie linie: nazwa płatnika i pod nią konto z NIP-em — stąd nowrap schodzi na dzieci. */
    overflow: hidden;
    text-overflow: ellipsis;
}

.me-owner > :not(.me-owner-sub)[b-p7m7rk0j6e] {
    white-space: nowrap;
}

/* Rodzaj pozycji: po tym odróżnia się fakturę za pracę od faktury za abonamenty. */
.me-kind[b-p7m7rk0j6e] {
    justify-self: start;
    padding: 1px 8px;
    border-radius: 999px;
    font-size: 0.68rem;
    font-weight: 600;
    letter-spacing: .03em;
    text-transform: uppercase;
}

.me-kind-tickets[b-p7m7rk0j6e] {
    background: #eff6ff;
    color: #1d4ed8;
}

.me-kind-products[b-p7m7rk0j6e] {
    background: #ecfdf5;
    color: #047857;
}

.me-details[b-p7m7rk0j6e] {
    font-size: 0.78rem;
    color: #9ca3af;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.me-status[b-p7m7rk0j6e] {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    font-size: 0.78rem;
    color: #4b5563;
}

.me-amount[b-p7m7rk0j6e] {
    display: flex;
    flex-direction: column;
    align-items: flex-end;
    text-align: right;
    font-weight: 600;
    color: #111827;
    font-variant-numeric: tabular-nums;
}

.me-action[b-p7m7rk0j6e] {
    display: flex;
    justify-content: flex-end;
}

@media (max-width: 900px) {
    .me-row[b-p7m7rk0j6e] {
        grid-template-columns: 30px minmax(0, 1fr) 92px 130px;
    }

    .me-kind[b-p7m7rk0j6e],
    .me-details[b-p7m7rk0j6e],
    .me-status[b-p7m7rk0j6e],
    .me-amount-net[b-p7m7rk0j6e] {
        display: none;
    }
}


/* === Kontrola wycieków ===
   Bursztyn, nie czerwień: to nie awaria, tylko „sprawdź zanim zamkniesz". Zwinięte domyślnie,
   ale nagłówek z licznikiem jest widoczny zawsze, więc pominąć się tego nie da. */
.billing-leaks[b-p7m7rk0j6e] {
    border: 1px solid #fde68a;
    background: #fffbeb;
    border-radius: 8px;
    padding: 9px 13px;
    margin-bottom: 12px;
}

.billing-leaks-toggle[b-p7m7rk0j6e] {
    display: inline-flex;
    align-items: center;
    gap: 7px;
    border: none;
    background: transparent;
    padding: 0;
    font-size: 0.84rem;
    font-weight: 600;
    color: #92400e;
    cursor: pointer;
}

.billing-leaks-group[b-p7m7rk0j6e] {
    margin-top: 10px;
}

.bl-group-title[b-p7m7rk0j6e] {
    font-size: 0.78rem;
    font-weight: 600;
    color: #92400e;
}

.billing-leaks .billing-card-hint[b-p7m7rk0j6e] {
    margin-top: 2px;
    margin-bottom: 6px;
    color: #a16207;
}

.billing-leaks .billing-excluded-row[b-p7m7rk0j6e] {
    background: #fff;
    border-color: #fde68a;
}

.be-rbh-edit[b-p7m7rk0j6e] {
    flex-shrink: 0;
    width: 110px;
}

[b-p7m7rk0j6e] .billing-rbh-spin {
    width: 100% !important;
}

[b-p7m7rk0j6e] .billing-rbh-spin .dxbl-edit-inline {
    text-align: right;
}

/* Podpowiedź karty przeglądu miesięcy — jedno zdanie, które ma się zmieścić w linii.
   Domyślne 78ch to limit czytelności akapitu; tutaj łamał tekst w połowie karty. */
.billing-card-hint-wide[b-p7m7rk0j6e] {
    max-width: none;
}

/* Druga linia pod nazwą płatnika: konto u nadawcy i NIP. Przy kilku rozliczeniach
   tej samej firmy to jedyne, co odróżnia wiersze od siebie. */
.me-owner-sub[b-p7m7rk0j6e] {
    display: block;
    font-size: 0.72rem;
    color: #6b7280;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
/* /Components/Pages/Settings/Billing/ProductBilling.razor.rz.scp.css */
/* === Rozliczenia produktów ===
   Ten sam język wizualny co rozliczenia zgłoszeń (Billing.razor.css): karty, pastylki stanów,
   wiersze dokumentów. Style zdublowane celowo — arkusze komponentów są izolowane i nie da się
   ich współdzielić bez wyniesienia do globalnego CSS. */
.pb-page[b-8do6197lyv] {
    display: flex;
    flex-direction: column;
    gap: 16px;
    padding: 4px;
}

.pb-card[b-8do6197lyv] {
    background: #fff;
    border: 1px solid #e5e7eb;
    border-radius: 10px;
    padding: 16px 18px;
}

/* Karta z klientami do powiązania — ma się rzucać w oczy: bez powiązania faktura nie wyjdzie. */
.pb-card-warn[b-8do6197lyv] {
    border-color: #fcd34d;
    background: #fffbeb;
}

.pb-card-head[b-8do6197lyv] {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 14px;
    flex-wrap: wrap;
    margin-bottom: 14px;
}

.pb-card-head h3[b-8do6197lyv] {
    margin: 0;
    font-size: 0.82rem;
    font-weight: 700;
    letter-spacing: .04em;
    text-transform: uppercase;
    color: #374151;
}

.pb-card-hint[b-8do6197lyv] {
    margin-top: 3px;
    font-size: 0.8rem;
    color: #9ca3af;
}

.pb-count[b-8do6197lyv] {
    display: inline-block;
    min-width: 1.4rem;
    padding: 0 6px;
    border-radius: 999px;
    background: #f59e0b;
    color: #fff;
    font-size: 0.72rem;
    text-align: center;
    margin-left: 4px;
}

.pb-head-actions[b-8do6197lyv] {
    display: flex;
    align-items: center;
    gap: 8px;
    flex-wrap: wrap;
}

/* Akcje nagłówka mają jednakową, szerszą szerokość — dzięki temu przyciski nie zmieniają
   rozmiaru zależnie od długości etykiety. */
[b-8do6197lyv] .pb-head-action-button {
    width: 180px;
    justify-content: center;
    white-space: nowrap;
}

[b-8do6197lyv] .pb-owner-combo { width: 260px !important; }
[b-8do6197lyv] .pb-account-combo { min-width: 170px; max-width: 230px; }

.pb-empty[b-8do6197lyv] {
    padding: 28px 16px;
    text-align: center;
    font-size: 0.85rem;
    color: #9ca3af;
}

/* Wiersze (klienci do powiązania, dokumenty) */
.pb-rows[b-8do6197lyv] {
    display: flex;
    flex-direction: column;
    gap: 8px;
}

.pb-row[b-8do6197lyv] {
    display: flex;
    align-items: center;
    gap: 14px;
    padding: 10px 12px;
    border: 1px solid #e5e7eb;
    border-radius: 8px;
    background: #fff;
    flex-wrap: wrap;
}

.pb-row-main[b-8do6197lyv] {
    flex: 1 1 auto;
    min-width: 0;
    display: flex;
    flex-direction: column;
    gap: 3px;
    font-size: 0.86rem;
}

.pb-row-actions[b-8do6197lyv] {
    display: flex;
    align-items: center;
    gap: 6px;
    flex-shrink: 0;
}

.pb-source[b-8do6197lyv] {
    font-family: ui-monospace, monospace;
    font-size: 0.72rem;
    letter-spacing: .04em;
    color: #6b7280;
    margin-right: 4px;
}

.pb-muted[b-8do6197lyv] {
    font-size: 0.78rem;
    color: #9ca3af;
}

.pb-unlinked[b-8do6197lyv] {
    color: #b45309;
    font-style: italic;
}

/* Dokument = okres + płatnik + kwota, jak wiersz okresu w rozliczeniach zgłoszeń. */
.pb-doc-period[b-8do6197lyv] {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    width: 54px;
    flex-shrink: 0;
    background: #f9fafb;
    border-radius: 8px;
    padding: 6px 0;
}

/* === Pory roku na kafelku miesiąca ===
   Ta sama skala co w rozliczeniach zgłoszeń (Billing.razor.css) — barwy z palety kafelków
   ustawień, rozjaśnione do tła. Zdublowane, bo arkusze komponentów są izolowane. */
.pb-doc-period.season-winter[b-8do6197lyv] {
    background: #e0edfd;
    box-shadow: inset 0 0 0 1px #bfdbfe;
}

.pb-doc-period.season-winter .pb-doc-month[b-8do6197lyv] {
    color: #1d4ed8;
}

.pb-doc-period.season-spring[b-8do6197lyv] {
    background: #e6f7e3;
    box-shadow: inset 0 0 0 1px #bbf7d0;
}

.pb-doc-period.season-spring .pb-doc-month[b-8do6197lyv] {
    color: #15803d;
}

.pb-doc-period.season-summer[b-8do6197lyv] {
    background: #fdf2d8;
    box-shadow: inset 0 0 0 1px #fde68a;
}

.pb-doc-period.season-summer .pb-doc-month[b-8do6197lyv] {
    color: #b45309;
}

.pb-doc-period.season-autumn[b-8do6197lyv] {
    background: #f6e8db;
    box-shadow: inset 0 0 0 1px #e7cdb0;
}

.pb-doc-period.season-autumn .pb-doc-month[b-8do6197lyv] {
    color: #92400e;
}

/* Miesiąc bez ruchu zostaje szary — kolor sezonu wyróżnia to, w czym coś się dzieje. */
.pb-idle .pb-doc-period[b-8do6197lyv] {
    background: #f9fafb;
    box-shadow: none;
}

.pb-doc-month[b-8do6197lyv] {
    font-size: 1.3rem;
    font-weight: 700;
    line-height: 1;
    color: #111827;
}

.pb-doc-year[b-8do6197lyv] {
    font-size: 0.7rem;
    color: #9ca3af;
}

.pb-doc-line2[b-8do6197lyv] {
    display: flex;
    align-items: center;
    gap: 6px;
    flex-wrap: wrap;
    font-size: 0.76rem;
    color: #6b7280;
}

.pb-doc-amount[b-8do6197lyv] {
    display: flex;
    flex-direction: column;
    align-items: flex-end;
    flex-shrink: 0;
    font-variant-numeric: tabular-nums;
}

.pb-doc-net[b-8do6197lyv] {
    font-size: 1.05rem;
    font-weight: 600;
    color: #111827;
}

.pb-doc-net small[b-8do6197lyv] {
    font-size: 0.72rem;
    color: #9ca3af;
    margin-left: 2px;
}

.pb-invoice[b-8do6197lyv] {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    margin-left: 8px;
    font-weight: 600;
    color: #4b5563;
    text-decoration: none;
}

a.pb-invoice:hover[b-8do6197lyv] { text-decoration: underline; }

.pb-error[b-8do6197lyv] {
    font-size: 0.78rem;
    color: #b91c1c;
}

/* Pastylki stanów — te same barwy, co statusy okresów: szkic/czeka bursztyn,
   wystawiony/rozliczony niebieski, opłacony zielony, odłożony/anulowany szary. */
.pb-pill[b-8do6197lyv] {
    display: inline-block;
    padding: 1px 8px;
    border-radius: 999px;
    font-size: 0.72rem;
    font-weight: 600;
    margin-left: 6px;
    white-space: nowrap;
}

.pb-pill-pending[b-8do6197lyv], .pb-pill-draft[b-8do6197lyv] { background: #fef3c7; color: #92400e; }
.pb-pill-billed[b-8do6197lyv], .pb-pill-issued[b-8do6197lyv] { background: #dbeafe; color: #1e40af; }
.pb-pill-paid[b-8do6197lyv] { background: #dcfce7; color: #166534; }
.pb-pill-excluded[b-8do6197lyv], .pb-pill-cancelled[b-8do6197lyv] { background: #f3f4f6; color: #6b7280; }

.pb-badge[b-8do6197lyv] {
    display: inline-block;
    margin-left: 6px;
    padding: 0 6px;
    border-radius: 4px;
    font-size: 0.72rem;
    font-weight: 700;
}

.pb-badge-warn[b-8do6197lyv] { background: #fef3c7; color: #92400e; }

/* === Lista miesięcy ===
   Ten sam wiersz co po stronie płatnika: kafelek miesiąca, dwa tory (co czeka na policzenie
   i co jest na dokumentach), kwota. Szczegóły otwiera okno, nie rozwinięcie pod listą. */
.pb-month-row[b-8do6197lyv] {
    cursor: pointer;
}

.pb-selected[b-8do6197lyv] {
    border-left: 3px solid #f97316;
    background: #fff7ed;
}

.pb-idle[b-8do6197lyv] {
    opacity: .6;
}

.pb-idle .pb-doc-month[b-8do6197lyv] {
    color: #9ca3af;
}

.pb-lane[b-8do6197lyv] {
    flex: 1 1 260px;
    min-width: 0;
    display: flex;
    flex-direction: column;
    gap: 2px;
}

.pb-lane-label[b-8do6197lyv] {
    font-size: 0.66rem;
    font-weight: 600;
    letter-spacing: .05em;
    text-transform: uppercase;
    color: #9ca3af;
}

.pb-figures[b-8do6197lyv] {
    display: flex;
    align-items: center;
    gap: 6px;
    flex-wrap: wrap;
    font-size: 0.8rem;
    color: #6b7280;
}

.pb-lane-amount[b-8do6197lyv] {
    font-weight: 600;
    color: #111827;
    font-variant-numeric: tabular-nums;
}

.pb-lane-amount small[b-8do6197lyv] {
    font-size: 0.7rem;
    color: #9ca3af;
    font-weight: 500;
}

.pb-sep[b-8do6197lyv] {
    color: #d1d5db;
}

.pb-none[b-8do6197lyv] {
    font-size: 0.8rem;
    color: #b0b7c3;
}

.pb-dots[b-8do6197lyv] {
    display: flex;
    gap: 10px;
    font-size: 0.72rem;
    color: #6b7280;
}

.pb-dot-group[b-8do6197lyv] {
    display: inline-flex;
    align-items: center;
    gap: 4px;
}

.pb-chevron[b-8do6197lyv] {
    flex-shrink: 0;
    opacity: .5;
}

.pb-older[b-8do6197lyv] {
    display: inline-flex;
    align-items: center;
    gap: 7px;
    margin-top: 8px;
    border: none;
    background: transparent;
    padding: 4px 0;
    font-size: 0.8rem;
    color: #6b7280;
    cursor: pointer;
}

.pb-older:hover[b-8do6197lyv] {
    color: #111827;
}

/* === Pozycje miesiąca (okno) ===
   Wiersz = jedna pozycja: grupa pozycji klienta albo dokument. Ten sam układ co w oknie
   miesiąca po stronie płatnika, żeby oba ekrany czytało się tak samo. */
.me-section + .me-section[b-8do6197lyv] {
    margin-top: 18px;
}

.me-section-head[b-8do6197lyv] {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 12px;
    padding-bottom: 6px;
    margin-bottom: 8px;
    border-bottom: 1px solid #eef0f4;
}

.me-section-title[b-8do6197lyv] {
    font-size: 0.72rem;
    font-weight: 700;
    letter-spacing: .05em;
    text-transform: uppercase;
    color: #6b7280;
}

.me-section-sum[b-8do6197lyv] {
    font-size: 0.85rem;
    font-weight: 600;
    color: #111827;
    font-variant-numeric: tabular-nums;
}

.me-section-totals[b-8do6197lyv] {
    display: flex;
    align-items: flex-end;
    gap: 24px;
    font-size: 0.85rem;
    font-weight: 600;
    color: #111827;
    font-variant-numeric: tabular-nums;
}

.me-section-totals > span[b-8do6197lyv] {
    display: flex;
    flex-direction: column;
    align-items: flex-end;
}

.me-section-totals small[b-8do6197lyv],
.me-amount small[b-8do6197lyv] {
    font-size: 0.6rem;
    font-weight: 600;
    line-height: 1.1;
    letter-spacing: .04em;
    text-transform: uppercase;
    color: #9ca3af;
}

.me-row[b-8do6197lyv] {
    display: grid;
    grid-template-columns: 30px minmax(0, 1.3fr) 95px minmax(0, 1fr) 120px 100px 110px 400px;
    align-items: center;
    gap: 10px;
    padding: 7px 10px;
    border: 1px solid #f1f3f5;
    border-radius: 9px;
    font-size: 0.84rem;
    color: #374151;
}

.me-row + .me-row[b-8do6197lyv] {
    margin-top: 5px;
}

/* Wiersz w tym oknie nie prowadzi nigdzie — akcje są na przyciskach, więc bez kursora „ręka”. */
.me-row-static[b-8do6197lyv] {
    cursor: default;
}

/* Awatar płatnika. Pełna definicja, a NIE samo dociążenie rozmiaru: .billing-owner-avatar
   żyje w arkuszu strony rozliczeń zgłoszeń, a arkusze komponentów są izolowane — stamtąd
   nic tu nie dociera i litera zostawała nieśrodkowana i czarna na kolorowym tle. */
.me-avatar[b-8do6197lyv] {
    width: 26px;
    height: 26px;
    border-radius: 7px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    color: #fff;
    font-size: 0.62rem;
    font-weight: 600;
    letter-spacing: .02em;
    flex-shrink: 0;
}

.me-owner[b-8do6197lyv] {
    font-weight: 600;
    color: #111827;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.me-kind[b-8do6197lyv] {
    justify-self: start;
    padding: 1px 8px;
    border-radius: 999px;
    font-size: 0.68rem;
    font-weight: 600;
    letter-spacing: .03em;
}

.me-kind-products[b-8do6197lyv] {
    background: #ecfdf5;
    color: #047857;
    font-family: ui-monospace, monospace;
}

.me-details[b-8do6197lyv] {
    font-size: 0.78rem;
    color: #9ca3af;
    min-width: 0;
}

.me-status[b-8do6197lyv] {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    font-size: 0.78rem;
    color: #4b5563;
}

/* Nazwa konta u nadawcy pod płatnikiem: przy kilku kontach jednej spółki to jedyne,
   co odróżnia rozliczenia — nabywca, NIP i mail są w nich identyczne. */
.pb-account[b-8do6197lyv] {
    display: block;
    font-size: 0.72rem;
    color: #6b7280;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.me-amount[b-8do6197lyv] {
    display: flex;
    flex-direction: column;
    align-items: flex-end;
    text-align: right;
    font-weight: 600;
    color: #111827;
    font-variant-numeric: tabular-nums;
    white-space: nowrap;
}

.me-action[b-8do6197lyv] {
    display: flex;
    justify-content: flex-end;
    align-items: center;
    gap: 5px;
    min-width: 0;
    overflow: hidden;
}

/* Przycisk ma zostać w jednej linii: łamanie napisu rozpycha cały wiersz na dwie. */
.me-action[b-8do6197lyv]  .dxbl-btn,
.me-sub-actions[b-8do6197lyv]  .dxbl-btn {
    white-space: nowrap;
}

/* Rozwinięte pozycje grupy — wcięte pod wierszem klienta, bez ramek: to szczegół, nie druga lista. */
.me-sub[b-8do6197lyv] {
    margin: 2px 0 6px 40px;
    padding-left: 12px;
    border-left: 2px solid #eef0f4;
    display: flex;
    flex-direction: column;
    gap: 3px;
}

.me-sub-row[b-8do6197lyv] {
    display: grid;
    grid-template-columns: minmax(0, 2fr) 90px 90px 90px 60px 100px;
    align-items: center;
    gap: 10px;
    font-size: 0.78rem;
    color: #4b5563;
}

.me-sub-name[b-8do6197lyv] {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.me-sub-kind[b-8do6197lyv] {
    color: #9ca3af;
}

.me-sub-num[b-8do6197lyv] {
    text-align: right;
    font-variant-numeric: tabular-nums;
}

@media (max-width: 900px) {
    .me-row[b-8do6197lyv] {
        grid-template-columns: 30px minmax(0, 1fr) 110px 130px;
    }

    .me-kind[b-8do6197lyv],
    .me-details[b-8do6197lyv],
    .me-status[b-8do6197lyv],
    .me-amount-net[b-8do6197lyv] {
        display: none;
    }
}

/* ===== Szczegóły jednego rozliczenia ===== */

.pb-doc-summary[b-8do6197lyv] {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
    gap: 8px 18px;
    padding: 10px 12px 12px;
    margin-bottom: 12px;
    border: 1px solid #e5e7eb;
    border-radius: 8px;
    background: #f9fafb;
    font-size: 0.82rem;
}

.pb-doc-label[b-8do6197lyv] {
    display: block;
    color: #9ca3af;
    font-size: 0.72rem;
    text-transform: uppercase;
    letter-spacing: .04em;
}

.pb-doc-value[b-8do6197lyv] {
    color: #374151;
    font-weight: 500;
}

.pb-doc-error[b-8do6197lyv] {
    grid-column: 1 / -1;
    color: #b91c1c;
}

/* Wiersz pozycji ma jedną kolumnę więcej niż w widoku miesiąca: brutto i przyciski. */
.pb-item-row[b-8do6197lyv] {
    grid-template-columns: minmax(0, 2fr) 90px 90px 90px 60px 90px 170px;
    padding: 4px 0;
    border-bottom: 1px solid #f3f4f6;
}

.me-sub-actions[b-8do6197lyv] {
    display: flex;
    gap: 6px;
    justify-content: flex-end;
}

.pb-item-form[b-8do6197lyv] {
    padding: 10px 12px;
    margin: 6px 0;
    border: 1px solid #d1d5db;
    border-radius: 8px;
    background: #fff;
}

.pb-item-form-foot[b-8do6197lyv] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    margin-top: 10px;
}

.pb-doc-add[b-8do6197lyv] {
    margin-top: 10px;
}

@media (max-width: 900px) {
    .pb-item-row[b-8do6197lyv] {
        grid-template-columns: minmax(0, 1fr) 90px 170px;
    }

    .pb-item-row .me-sub-kind[b-8do6197lyv],
    .pb-item-row .me-sub-num:nth-of-type(1)[b-8do6197lyv],
    .pb-item-row .me-sub-num:nth-of-type(3)[b-8do6197lyv] {
        display: none;
    }
}

/* Wiersz pozycji ma teraz kolumnę produktu — kind jest szerszy, bo mieści nazwę z katalogu. */
.pb-item-row[b-8do6197lyv] {
    grid-template-columns: minmax(0, 1.7fr) minmax(0, 1fr) 90px 90px 60px 90px 170px;
}

/* Formatka pozycji: etykieta NAD polem, sześć równych kolumn na drobiazgi.
   DxFormLayout trzymał etykietę obok pola i dzielił wiersz na dwanaście kolumn,
   przez co „Ilość" czy „VAT %" dostawały pole szerokie na kilkanaście pikseli. */
.pb-form[b-8do6197lyv] {
    display: grid;
    grid-template-columns: repeat(6, minmax(0, 1fr));
    gap: 10px 12px;
}

.pb-fld[b-8do6197lyv] {
    display: flex;
    flex-direction: column;
    gap: 4px;
    min-width: 0;
    margin: 0;
}

.pb-fld-wide[b-8do6197lyv] {
    grid-column: 1 / -1;
}

.pb-fld-2[b-8do6197lyv] {
    grid-column: span 2;
}

.pb-fld-label[b-8do6197lyv] {
    font-size: 0.72rem;
    color: #6b7280;
    text-transform: uppercase;
    letter-spacing: .04em;
}

.pb-form-gross[b-8do6197lyv] {
    font-size: 0.82rem;
    color: #4b5563;
}

@media (max-width: 900px) {
    .pb-form[b-8do6197lyv] {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }

    .pb-fld-2[b-8do6197lyv] {
        grid-column: span 2;
    }
}

/* Kwadracik stanu. Definicja MUSI być tutaj: arkusze .razor.css są izolowane, a ta klasa
   żyje w kilku innych komponentach (Projects, Billing) — bez własnej kopii element wychodził
   bez rozmiaru, czyli niewidocznie, mimo ustawionego tła. */
.status-tag-dot[b-8do6197lyv] {
    width: 8px;
    height: 8px;
    border-radius: 2px;
    display: inline-block;
    flex-shrink: 0;
}
/* /Components/Pages/Settings/Email/Templates.razor.rz.scp.css */
/* === Podgląd szablonu e-mail ===
   Treść pochodzi z edytora i niesie własne style (tabele, obrazki, stopki), więc kontener
   robi za „kartkę maila": biała powierzchnia, ramka i własne przewijanie. Wysokość jest
   ograniczona, bo szablony potrafią mieć kilka ekranów treści, a popup nie ma rosnąć poza okno. */
.template-preview[b-2m2lvplewq] {
    display: flex;
    flex-direction: column;
    gap: 0.6rem;
}

.template-preview-subject[b-2m2lvplewq] {
    display: flex;
    align-items: baseline;
    gap: 0.5rem;
    flex-wrap: wrap;
    padding-bottom: 0.5rem;
    border-bottom: 1px solid #e6e8eb;
}

.template-preview-label[b-2m2lvplewq] {
    font-size: 0.75rem;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.03em;
    color: #6b7280;
}

.template-preview-subject-text[b-2m2lvplewq] {
    font-size: 0.95rem;
    font-weight: 600;
    color: #1f2937;
    overflow-wrap: anywhere;
}

.template-preview-body[b-2m2lvplewq] {
    max-height: 60vh;
    overflow: auto;
    padding: 1rem 1.1rem;
    background: #fff;
    border: 1px solid #e6e8eb;
    border-radius: 8px;
    color: #1f2937;
    font-size: 0.9rem;
    line-height: 1.5;
    overflow-wrap: anywhere;
}

/* Treść maila bywa szersza niż popup — obrazki i tabele mają się zmieścić, a nie rozpychać okna. */
.template-preview-body[b-2m2lvplewq]  img {
    max-width: 100%;
    height: auto;
}

.template-preview-body[b-2m2lvplewq]  table {
    max-width: 100%;
}

/* === Kolumna „Używany przez" ===
   Trzy stany w jednej komórce: opis systemowy (woła go kod), lista reguł automatyzacji
   i znacznik „nieużywany". Układ pionowy, bo reguł bywa kilka. */
.tpl-usage[b-2m2lvplewq] {
    display: flex;
    flex-direction: column;
    gap: 0.15rem;
    padding: 0.15rem 0;
}

.tpl-usage-system[b-2m2lvplewq] {
    font-size: 0.8rem;
    color: #1f2937;
    overflow-wrap: anywhere;
}

.tpl-usage-rule[b-2m2lvplewq] {
    font-size: 0.8rem;
    color: #374151;
    overflow-wrap: anywhere;
}

/* Reguła wyłączona nie wysyła nic — nazwa zostaje, ale przygaszona. */
.tpl-usage-rule.is-disabled[b-2m2lvplewq] {
    color: #9ca3af;
}

.tpl-usage-off[b-2m2lvplewq] {
    font-size: 0.72rem;
    color: #9ca3af;
}

.tpl-usage-none[b-2m2lvplewq] {
    align-self: flex-start;
    padding: 0.05rem 0.4rem;
    border: 1px solid #fed7aa;
    border-radius: 999px;
    background: #fff7ed;
    color: #9a3412;
    font-size: 0.72rem;
    white-space: nowrap;
}

/* === Kolumna „Wysyłki" ===
   Licznik jako wartość główna, data ostatniej wysyłki jako podpis. Zero wysyłek jest
   przygaszone — ma wyglądać na brak sygnału, a nie na wynik wart uwagi. */
.tpl-sends[b-2m2lvplewq] {
    display: flex;
    flex-direction: column;
    gap: 0.05rem;
    padding: 0.15rem 0;
}

.tpl-sends-count[b-2m2lvplewq] {
    font-size: 0.85rem;
    font-weight: 600;
    color: #1f2937;
}

.tpl-sends-count.is-zero[b-2m2lvplewq] {
    font-weight: 500;
    color: #9ca3af;
}

.tpl-sends-last[b-2m2lvplewq] {
    font-size: 0.72rem;
    color: #6b7280;
    white-space: nowrap;
}
/* /Components/Pages/Settings/Users/Clients.razor.rz.scp.css */
.users-master-detail[b-6ja9s5dgwb] {
    display: flex;
    gap: 16px;
    align-items: stretch;
    width: 100%;
    min-height: 0;
}

.users-master[b-6ja9s5dgwb] {
    flex: 1 1 auto;
    min-width: 0;
}

.users-master-detail.panel-open .users-master[b-6ja9s5dgwb] {
    flex: 1 1 60%;
}

.users-detail[b-6ja9s5dgwb] {
    flex: 0 0 380px;
    max-width: 420px;
    min-width: 320px;
    background: var(--bs-body-bg, #fff);
    border: 1px solid var(--bs-border-color, #dee2e6);
    border-radius: 8px;
    padding: 16px;
    display: flex;
    flex-direction: column;
    gap: 16px;
    box-shadow: 0 2px 6px rgba(0, 0, 0, 0.05);
}

.users-detail__header[b-6ja9s5dgwb] {
    display: flex;
    align-items: center;
    gap: 12px;
}

.users-detail__avatar[b-6ja9s5dgwb] {
    width: 56px;
    height: 56px;
    border-radius: 50%;
    overflow: hidden;
    background: var(--bs-secondary-bg, #e9ecef);
    display: flex;
    align-items: center;
    justify-content: center;
    flex: 0 0 56px;
}

.users-detail__avatar img[b-6ja9s5dgwb] {
    width: 100%;
    height: 100%;
    object-fit: cover;
}

.users-detail__avatar-initials[b-6ja9s5dgwb] {
    font-weight: 600;
    font-size: 1.1rem;
    color: var(--bs-secondary-color, #6c757d);
}

.users-detail__title[b-6ja9s5dgwb] {
    flex: 1 1 auto;
    min-width: 0;
}

.users-detail__name[b-6ja9s5dgwb] {
    font-weight: 600;
    font-size: 1.05rem;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.users-detail__sub[b-6ja9s5dgwb] {
    color: var(--bs-secondary-color, #6c757d);
    font-size: 0.875rem;
}

.users-detail__close[b-6ja9s5dgwb] {
    flex: 0 0 auto;
}

.users-detail__actions[b-6ja9s5dgwb] {
    display: flex;
    gap: 8px;
}

.users-detail__info[b-6ja9s5dgwb] {
    display: flex;
    flex-direction: column;
    gap: 6px;
    font-size: 0.9rem;
}

.users-detail__row[b-6ja9s5dgwb] {
    display: flex;
    justify-content: space-between;
    gap: 8px;
    min-width: 0;
}

.users-detail__row > span:first-child[b-6ja9s5dgwb] {
    color: var(--bs-secondary-color, #6c757d);
    flex: 0 0 auto;
}

.users-detail__row > span:last-child[b-6ja9s5dgwb] {
    min-width: 0;
    overflow-wrap: anywhere;
    word-break: break-word;
    white-space: normal;
    text-align: right;
}

.users-detail__row--block[b-6ja9s5dgwb] {
    flex-direction: column;
}

.users-detail__row--block > span:last-child[b-6ja9s5dgwb] {
    text-align: left;
}

.users-detail__section-title[b-6ja9s5dgwb] {
    font-weight: 600;
    margin-bottom: 6px;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 8px;
}

.users-detail__tickets[b-6ja9s5dgwb] {
    max-height: 260px;
}

/* Pełny ekran listy zgłoszeń — panel boczny ma ~380px, co przy tytułach zgłoszeń
   jest nie do czytania. Sekcja wychodzi z panelu i przykrywa stronę. */
.users-detail__section--fullscreen[b-6ja9s5dgwb] {
    position: fixed;
    inset: 0;
    z-index: 1050;
    margin: 0;
    padding: 16px;
    background: var(--bs-body-bg, #fff);
    display: flex;
    flex-direction: column;
    overflow: auto;
}

    .users-detail__section--fullscreen[b-6ja9s5dgwb]  .users-detail__tickets {
        max-height: none;
        flex: 1 1 auto;
    }

.users-detail__placeholder[b-6ja9s5dgwb] {
    color: var(--bs-secondary-color, #6c757d);
    font-style: italic;
    font-size: 0.875rem;
}

@media (max-width: 992px) {
    .users-master-detail[b-6ja9s5dgwb] {
        flex-direction: column;
    }

    .users-detail[b-6ja9s5dgwb] {
        flex: 1 1 auto;
        max-width: 100%;
    }
}

.users-master[b-6ja9s5dgwb]  .dxbl-grid-focused-row,
.users-master[b-6ja9s5dgwb]  .dxbl-grid-focused-row .dxbl-grid-command-cell {
    background-color: var(--main-color-hover, #f6ded3) !important;
    color: #fff !important;
}

.clients-detail-row[b-6ja9s5dgwb] {
    padding: 12px 16px;
    background: var(--bs-light, #fafafa);
}

.clients-detail-row__title[b-6ja9s5dgwb] {
    font-weight: 600;
    margin-bottom: 8px;
}

.clients-detail-row__empty[b-6ja9s5dgwb] {
    color: var(--bs-secondary, #6c757d);
    font-style: italic;
}

.clients-detail-row__tickets[b-6ja9s5dgwb] {
    max-height: 320px;
}

/* /Components/Pages/Settings/Users/Users.razor.rz.scp.css */
.users-master-detail[b-p3ledqc9z9] {
    display: flex;
    gap: 16px;
    align-items: stretch;
    width: 100%;
    min-height: 0;
}

.users-master[b-p3ledqc9z9] {
    flex: 1 1 auto;
    min-width: 0;
}

.users-master-detail.panel-open .users-master[b-p3ledqc9z9] {
    flex: 1 1 60%;
}

.users-detail[b-p3ledqc9z9] {
    flex: 0 0 380px;
    max-width: 420px;
    min-width: 320px;
    background: var(--bs-body-bg, #fff);
    border: 1px solid var(--bs-border-color, #dee2e6);
    border-radius: 8px;
    padding: 16px;
    display: flex;
    flex-direction: column;
    gap: 16px;
    box-shadow: 0 2px 6px rgba(0, 0, 0, 0.05);
}

.users-detail__header[b-p3ledqc9z9] {
    display: flex;
    align-items: center;
    gap: 12px;
}

.users-detail__avatar[b-p3ledqc9z9] {
    width: 56px;
    height: 56px;
    border-radius: 50%;
    overflow: hidden;
    background: var(--bs-secondary-bg, #e9ecef);
    display: flex;
    align-items: center;
    justify-content: center;
    flex: 0 0 56px;
}

.users-detail__avatar img[b-p3ledqc9z9] {
    width: 100%;
    height: 100%;
    object-fit: cover;
}

.users-detail__avatar-initials[b-p3ledqc9z9] {
    font-weight: 600;
    font-size: 1.1rem;
    color: #fff;
    text-shadow: 0 1px 2px rgba(0, 0, 0, 0.25);
}

.users-detail__title[b-p3ledqc9z9] {
    flex: 1 1 auto;
    min-width: 0;
}

.users-detail__name[b-p3ledqc9z9] {
    font-weight: 600;
    font-size: 1.05rem;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.users-detail__sub[b-p3ledqc9z9] {
    color: var(--bs-secondary-color, #6c757d);
    font-size: 0.875rem;
}

.users-detail__close[b-p3ledqc9z9] {
    flex: 0 0 auto;
}

.users-detail__actions[b-p3ledqc9z9] {
    display: flex;
    gap: 8px;
}

.users-detail__info[b-p3ledqc9z9] {
    display: flex;
    flex-direction: column;
    gap: 6px;
    font-size: 0.9rem;
}

.users-detail__row[b-p3ledqc9z9] {
    display: flex;
    justify-content: space-between;
    gap: 8px;
    min-width: 0;
}

.users-detail__row > span:first-child[b-p3ledqc9z9] {
    color: var(--bs-secondary-color, #6c757d);
    flex: 0 0 auto;
}

.users-detail__row > span:last-child[b-p3ledqc9z9] {
    min-width: 0;
    overflow-wrap: anywhere;
    word-break: break-word;
    white-space: normal;
    text-align: right;
}

.users-detail__row--block[b-p3ledqc9z9] {
    flex-direction: column;
}

.users-detail__row--block > span:last-child[b-p3ledqc9z9] {
    text-align: left;
}

.users-detail__section-title[b-p3ledqc9z9] {
    font-weight: 600;
    margin-bottom: 6px;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 8px;
}

.users-detail__tickets[b-p3ledqc9z9] {
    max-height: 320px;
}

.users-detail__account-status[b-p3ledqc9z9] {
    min-width: 72px;
    font-size: 0.75rem;
}

.users-detail__ticket-status[b-p3ledqc9z9] {
    display: inline-flex;
    max-width: 100%;
    padding: 2px 7px;
    border-radius: 999px;
    font-size: 0.72rem;
    font-weight: 600;
    line-height: 1.25;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.users-detail__activities[b-p3ledqc9z9] {
    max-height: 330px;
}

.users-detail__activities[b-p3ledqc9z9]  .badge {
    min-width: 58px;
    font-size: 0.68rem;
}

/* Wejście w zgłoszenie z panelu użytkownika — numer jako link otwierany w nowej karcie.
   Wygląd jak przy pozycjach okresu rozliczeniowego (.bl-open): ta sama czynność, ten sam
   znacznik, więc nie ma powodu robić dwóch różnych. */
.users-detail__ticket-open[b-p3ledqc9z9] {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    font-size: 0.72rem;
    font-weight: 600;
    /* Kolor z motywu, nie na sztywno: panel nie ma własnych reguł w motywie ciemnym,
       więc wpisany szary byłby tam nieczytelny. */
    color: var(--bs-body-color, #4b5563);
    text-decoration: none;
    white-space: nowrap;
}

    .users-detail__ticket-open:hover[b-p3ledqc9z9] {
        text-decoration: underline;
    }

/* Pełny ekran listy zgłoszeń — panel boczny ma ~380px, co przy tytułach zgłoszeń
   jest nie do czytania. Sekcja wychodzi z panelu i przykrywa stronę.
   To samo dotyczy aktywności: tam nie mieści się treść wpisu. */
.users-detail__section--fullscreen[b-p3ledqc9z9] {
    position: fixed;
    inset: 0;
    z-index: 1050;
    margin: 0;
    padding: 16px;
    background: var(--bs-body-bg, #fff);
    display: flex;
    flex-direction: column;
    overflow: auto;
}

    .users-detail__section--fullscreen[b-p3ledqc9z9]  .users-detail__tickets,
    .users-detail__section--fullscreen[b-p3ledqc9z9]  .users-detail__activities {
        max-height: none;
        flex: 1 1 auto;
    }

.users-detail__placeholder[b-p3ledqc9z9] {
    color: var(--bs-secondary-color, #6c757d);
    font-style: italic;
    font-size: 0.875rem;
}

@media (max-width: 992px) {
    .users-master-detail[b-p3ledqc9z9] {
        flex-direction: column;
    }

    .users-detail[b-p3ledqc9z9] {
        flex: 1 1 auto;
        max-width: 100%;
    }
}

.users-master[b-p3ledqc9z9]  .dxbl-grid-focused-row,
.users-master[b-p3ledqc9z9]  .dxbl-grid-focused-row .dxbl-grid-command-cell {
    background-color: var(--main-color-hover, #fda479) !important;
    color: #fff !important;
}

/* /Components/Pages/Settings/Workers/WorkerAssignments.razor.rz.scp.css */
.wa-detail[b-7m7ltjzskv] {
    display: flex;
    gap: 1rem;
    flex-wrap: wrap;
    padding: 0.5rem 0;
}

.wa-panel[b-7m7ltjzskv] {
    flex: 1 1 320px;
    min-width: 280px;
    background: #fff;
    border: 1px solid #e6e8eb;
    border-radius: 10px;
    padding: 0.75rem 0.9rem;
}

.wa-panel-title[b-7m7ltjzskv] {
    font-size: 0.75rem;
    font-weight: 700;
    color: #6e7781;
    text-transform: uppercase;
    letter-spacing: 0.04em;
    margin-bottom: 0.5rem;
}

.wa-chips[b-7m7ltjzskv] {
    display: flex;
    flex-wrap: wrap;
    gap: 0.4rem;
    margin-bottom: 0.6rem;
}

.wa-chip[b-7m7ltjzskv] {
    display: inline-flex;
    align-items: center;
    gap: 0.35rem;
    background: #eef2ff;
    color: #3730a3;
    border: 1px solid #c7d2fe;
    border-radius: 999px;
    padding: 0.15rem 0.6rem;
    font-size: 0.8rem;
}

.wa-chip-x[b-7m7ltjzskv] {
    border: none;
    background: transparent;
    color: #6366f1;
    cursor: pointer;
    font-size: 1rem;
    line-height: 1;
    padding: 0;
}

.wa-chip-x:hover[b-7m7ltjzskv] {
    color: #3730a3;
}

.wa-empty[b-7m7ltjzskv] {
    color: #9aa0a6;
    font-size: 0.82rem;
}

.wa-add[b-7m7ltjzskv] {
    display: flex;
    align-items: center;
    gap: 0.5rem;
}

.wa-add[b-7m7ltjzskv]  .wa-combo {
    flex: 1 1 auto;
    min-width: 160px;
}
/* /Components/Pages/Tasks/Tasks.razor.rz.scp.css */
.toolbar[b-neg2n5f9an] {
    margin-bottom: 8px;
}

.tasks-empty[b-neg2n5f9an] {
    padding: 24px;
    color: #888;
    text-align: center;
}
/* /Components/Pages/TeamNotes/TeamNotes.razor.rz.scp.css */
/* Tablica zespołu — oś czasu wewnętrznych notatek pracowników.
   Wyłącznie motyw jasny; wariant ciemny jest globalnie w wwwroot/css/theme-dark.css
   (konwencja projektu: żaden .razor.css nie odwołuje się do data-theme).
   Kolory podane wprost — skróty na var(--bs-*) potrafią zniknąć, gdy zmienna nie jest zdefiniowana. */

.tn-page[b-6nswsp48ff] {
    display: flex;
    flex-direction: column;
    padding-bottom: 1rem;
}

.toolbar[b-6nswsp48ff] {
    margin-bottom: 8px;
}

/* === Pasek filtrów === */
.tn-filters[b-6nswsp48ff] {
    display: flex;
    flex-direction: column;
    gap: 10px;
    padding: 10px 12px;
    margin-bottom: 12px;
    background: #f8f9fa;
    border: 1px solid #e5e7eb;
    border-radius: 12px;
}

.tn-filters-row[b-6nswsp48ff] {
    display: flex;
    align-items: center;
    gap: 10px;
    flex-wrap: wrap;
}

/* Wyszukiwarka i oba filtry mają iść w jednym rzędzie. Edytory DevExpress niosą własną
   szerokość, więc bez flex-basis: 0 i min-width: 0 rozpychają się i łamią wiersz —
   same min-width tego nie powstrzymuje. */
.tn-filters-inputs[b-6nswsp48ff] {
    flex-wrap: nowrap;
}

.tn-filter-search[b-6nswsp48ff] {
    flex: 2 1 0;
    min-width: 0;
}

[b-6nswsp48ff] .tn-filter-combo {
    flex: 1 1 0;
    min-width: 0;
}

/* „Filtruj" dosuwamy do prawej krawędzi paska — automatyczny margines zjada całe
   wolne miejsce między przełącznikami a przyciskiem. */
[b-6nswsp48ff] .tn-filter-apply {
    margin-left: auto;
}

/* Na wąskim ekranie rząd może się już złamać — inaczej pola robią się nieczytelnie wąskie. */
@media (max-width: 992px) {
    .tn-filters-inputs[b-6nswsp48ff] {
        flex-wrap: wrap;
    }

    .tn-filter-search[b-6nswsp48ff],
    [b-6nswsp48ff] .tn-filter-combo {
        flex: 1 1 220px;
    }
}

/* === Lista === */
.tn-list[b-6nswsp48ff] {
    display: flex;
    flex-direction: column;
    gap: 12px;
}

.tn-card[b-6nswsp48ff] {
    background: #ffffff;
    border: 1px solid #e5e7eb;
    border-radius: 16px;
    padding: 14px 16px 8px;
    box-shadow: 0 10px 25px rgba(15, 23, 42, 0.05);
}

/* Przypięte wyróżniamy paskiem z lewej, żeby były widoczne przy skanowaniu wzrokiem. */
.tn-pinned[b-6nswsp48ff] {
    border-left: 3px solid #f59e0b;
}

/* Nieprzeczytane — delikatny akcent, bez krzyczenia kolorem. */
.tn-unread[b-6nswsp48ff] {
    background: #fbfdff;
    border-color: #bfdbfe;
}

.tn-card-main[b-6nswsp48ff] {
    display: flex;
    align-items: flex-start;
    gap: 12px;
}

/* === Ikona w kolorowym kółku (jak w panelu aktywności) === */
.tn-icon[b-6nswsp48ff] {
    width: 34px;
    height: 34px;
    border-radius: 12px;
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    background: var(--tn-bg);
    color: var(--tn-fg);
}

/* Glif = maska na czarnym SVG, wypełniona kolorem akcentu. */
.tn-icon-glyph[b-6nswsp48ff] {
    width: 16px;
    height: 16px;
    display: block;
    background-color: currentColor;
    -webkit-mask: var(--i) no-repeat center / contain;
    mask: var(--i) no-repeat center / contain;
}

.tn-c-blue[b-6nswsp48ff] { --tn-bg: #dbeafe; --tn-fg: #3b82f6; }
.tn-c-amber[b-6nswsp48ff] { --tn-bg: #fdeecd; --tn-fg: #f59e0b; }
.tn-c-red[b-6nswsp48ff] { --tn-bg: #fde0e0; --tn-fg: #ef4444; }

/* === Treść wpisu === */
.tn-body[b-6nswsp48ff] {
    flex: 1;
    min-width: 0;
    display: flex;
    flex-direction: column;
    gap: 4px;
}

.tn-row1[b-6nswsp48ff] {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 8px;
}

.tn-title[b-6nswsp48ff] {
    font-size: 0.95rem;
    font-weight: 600;
    color: #1e293b;
    overflow-wrap: anywhere;
}

.tn-badges[b-6nswsp48ff] {
    display: flex;
    align-items: center;
    gap: 6px;
    flex-shrink: 0;
}

.tn-badge[b-6nswsp48ff] {
    font-size: 0.68rem;
    font-weight: 600;
    line-height: 1;
    padding: 4px 8px;
    border-radius: 999px;
    white-space: nowrap;
}

.tn-badge-pin[b-6nswsp48ff] {
    background: #fdeecd;
    color: #92400e;
}

.tn-badge-private[b-6nswsp48ff] {
    background: #ede9fe;
    color: #5b21b6;
    cursor: help;
}

.tn-badge-archived[b-6nswsp48ff] {
    background: #eef0f2;
    color: #4b5563;
}

.tn-text[b-6nswsp48ff] {
    font-size: 0.87rem;
    line-height: 1.5;
    color: #374151;
    overflow-wrap: anywhere;
}

    /* Treść pochodzi z edytora HTML — trzeba przyciąć jego domyślne marginesy. */
    .tn-text p[b-6nswsp48ff] {
        margin: 0 0 0.4rem;
    }

        .tn-text p:last-child[b-6nswsp48ff] {
            margin-bottom: 0;
        }

    .tn-text ul[b-6nswsp48ff],
    .tn-text ol[b-6nswsp48ff] {
        margin: 0 0 0.4rem;
        padding-left: 1.2rem;
    }

    .tn-text img[b-6nswsp48ff] {
        max-width: 100%;
        height: auto;
        border-radius: 8px;
    }

/* === Kontekst (zgłoszenie / klient / projekt / produkt) === */
.tn-context[b-6nswsp48ff] {
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
    margin-top: 2px;
}

.tn-chip[b-6nswsp48ff] {
    display: inline-flex;
    align-items: baseline;
    gap: 5px;
    max-width: 100%;
    padding: 3px 9px;
    border-radius: 999px;
    background: #f1f5f9;
    border: 1px solid #e2e8f0;
    font-size: 0.74rem;
    color: #475569;
    text-decoration: none;
}

.tn-chip-link:hover[b-6nswsp48ff] {
    background: #e2e8f0;
    text-decoration: none;
}

.tn-chip-label[b-6nswsp48ff] {
    font-weight: 600;
    color: #64748b;
    white-space: nowrap;
}

.tn-chip-text[b-6nswsp48ff] {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    max-width: 260px;
}

/* === Stopka wpisu === */
.tn-meta[b-6nswsp48ff] {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 6px;
    margin-top: 4px;
    font-size: 0.75rem;
    color: #9ca3af;
}

.tn-author[b-6nswsp48ff] {
    font-weight: 500;
    color: #6b7280;
}

.tn-dot[b-6nswsp48ff] {
    color: #d1d5db;
}

.tn-time[b-6nswsp48ff],
.tn-expires[b-6nswsp48ff] {
    font-variant-numeric: tabular-nums;
}

.tn-expires[b-6nswsp48ff] {
    color: #b45309;
}

.tn-edited[b-6nswsp48ff] {
    font-style: italic;
}

.tn-reads[b-6nswsp48ff] {
    cursor: help;
}

/* === Akcje === */
.tn-actions[b-6nswsp48ff] {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 2px;
    margin-top: 6px;
    padding-left: 46px; /* równo z treścią, obok ikony */
}

    [b-6nswsp48ff] .tn-actions .dxbl-btn {
        padding: 0.15rem 0.45rem !important;
        font-size: 0.76rem !important;
    }

/* === Komentarze === */
.tn-comments[b-6nswsp48ff] {
    margin: 8px 0 4px 46px;
    padding-top: 8px;
    border-top: 1px dashed #e5e7eb;
    display: flex;
    flex-direction: column;
    gap: 8px;
}

.tn-comments-empty[b-6nswsp48ff] {
    font-size: 0.78rem;
    color: #9ca3af;
}

.tn-comment[b-6nswsp48ff] {
    display: flex;
    flex-direction: column;
    gap: 2px;
}

.tn-comment-head[b-6nswsp48ff] {
    display: flex;
    align-items: center;
    gap: 6px;
    font-size: 0.72rem;
    color: #9ca3af;
}

.tn-comment-author[b-6nswsp48ff] {
    font-weight: 600;
    color: #6b7280;
}

[b-6nswsp48ff] .tn-comment-remove .dxbl-btn {
    padding: 0 0.25rem !important;
}

.tn-comment-body[b-6nswsp48ff] {
    font-size: 0.84rem;
    color: #374151;
    overflow-wrap: anywhere;
    white-space: pre-wrap;
}

.tn-comment-add[b-6nswsp48ff] {
    display: flex;
    align-items: center;
    gap: 6px;
    margin-top: 2px;
}

[b-6nswsp48ff] .tn-comment-input {
    flex: 1 1 auto;
}

/* === Stan pusty === */
.tn-empty[b-6nswsp48ff] {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 10px;
    padding: 48px 24px;
    color: #6b7280;
    text-align: center;
}

.tn-empty-icon[b-6nswsp48ff] {
    width: 34px;
    height: 34px;
    display: block;
    background-color: #cbd5e1;
    -webkit-mask: url('/images/bootstrap-icons/sticky.svg') no-repeat center / contain;
    mask: url('/images/bootstrap-icons/sticky.svg') no-repeat center / contain;
}

/* === Edytor === */
[b-6nswsp48ff] .tn-editor-popup .tn-form {
    padding-top: 4px;
}

.tn-editor-footer[b-6nswsp48ff] {
    display: flex;
    justify-content: flex-end;
    gap: 8px;
    width: 100%;
}

@media (max-width: 576px) {
    .tn-actions[b-6nswsp48ff],
    .tn-comments[b-6nswsp48ff] {
        padding-left: 0;
        margin-left: 0;
    }
}
/* /Components/Pages/TicketCalendar.razor.rz.scp.css */
/* /Components/Pages/Tickets/Detail.razor.rz.scp.css */
/* Ticket Detail – układ oparty o flexbox */

.ticket-page[b-hyyjz6k1pc] {
    display: flex;
    flex-direction: column;
    gap: 1.5rem;
    padding: 0 0.5rem;
}

.ticket-layout[b-hyyjz6k1pc] {
    display: flex;
    flex-direction: row;
    align-items: flex-start;
    gap: 1.5rem;
}

.ticket-main-cell[b-hyyjz6k1pc] {
    flex: 1 1 auto;
    min-width: 0;
}

.details-cell[b-hyyjz6k1pc] {
    flex: 0 0 340px;
    max-width: 340px;
}

/* ===== Pasek podsumowujący ===== */
.ticket-summary[b-hyyjz6k1pc] {
    background: #fff;
    border-bottom: 1px solid #eef0f2;
    padding: 0.85rem 1rem 0.9rem 1rem;
}

.ticket-summary-top[b-hyyjz6k1pc] {
    display: flex;
    align-items: center;
    gap: 0.6rem;
    flex-wrap: wrap;
}

[b-hyyjz6k1pc] .ticket-summary-back .dxbl-btn,
[b-hyyjz6k1pc] .ticket-summary-refresh .dxbl-btn {
    padding: 0.2rem 0.4rem !important;
    color: #57606a !important;
}

.ticket-summary-number[b-hyyjz6k1pc] {
    background: #f3f4f6;
    border-radius: 10px;
    padding: 0.1rem 0.6rem;
    color: #1f2328;
    font-size: 0.8rem;
    font-weight: 600;
}

/* Tytuł zawija się na tyle wierszy, ile trzeba — nagłówek ma pokazać CAŁY temat, a nie jego
   pierwsze kilkadziesiąt znaków z wielokropkiem. overflow-wrap łamie też ciąg bez spacji
   (temat z maila bywa jednym długim słowem), który inaczej rozpychałby nagłówek poza stronę. */
.ticket-summary-subject[b-hyyjz6k1pc] {
    font-weight: 600;
    font-size: 1.05rem;
    color: #1f2328;
    flex: 1 1 auto;
    min-width: 0;
    overflow-wrap: anywhere;
    word-break: break-word;
}

/* Ołówek przy temacie — te same zasady co ołówek przy wiadomości: wychodzi z ukrycia przy
   najechaniu na temat (i przy fokusie z klawiatury), bo stale widoczny czytałby się jak część
   nagłówka, a nie jak narzędzie. Na ekranie dotykowym hoveru nie ma, więc zostaje widoczny. */
.ticket-summary-subject .subject-edit-btn[b-hyyjz6k1pc] {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 1.15rem;
    height: 1.15rem;
    margin-left: 0.25rem;
    padding: 0;
    border: 0;
    border-radius: 50%;
    background: transparent;
    cursor: pointer;
    vertical-align: middle;
    opacity: 0;
    transition: opacity 0.12s ease, background-color 0.12s ease;
}

.ticket-summary-subject:hover .subject-edit-btn[b-hyyjz6k1pc],
.ticket-summary-subject .subject-edit-btn:focus-visible[b-hyyjz6k1pc] {
    opacity: 0.7;
}

.ticket-summary-subject .subject-edit-btn:hover[b-hyyjz6k1pc] {
    opacity: 1;
    background: rgba(0, 0, 0, 0.06);
}

@media (hover: none) {
    .ticket-summary-subject .subject-edit-btn[b-hyyjz6k1pc] {
        opacity: 0.7;
    }
}

.ticket-summary-subject .subject-edit-btn .icon-bs-pen[b-hyyjz6k1pc] {
    width: 0.7rem;
    height: 0.7rem;
    top: 0;
    margin: 0;
}

/* Tryb edycji tematu zajmuje dokładnie to miejsce, co sam temat — pasek akcji zgłoszenia ma
   zostać tam, gdzie był, żeby nagłówek nie przeskakiwał przy wejściu w edycję. */
.ticket-summary-subject-edit[b-hyyjz6k1pc] {
    display: flex;
    align-items: center;
    gap: 0.4rem;
    flex: 1 1 auto;
    min-width: 0;
}

[b-hyyjz6k1pc] .ticket-summary-subject-input {
    flex: 1 1 auto;
    min-width: 0;
}

/* Pasek akcji zgłoszenia (edycja, zadania, zgłaszający, eksport, zamknięcie) — same ikony,
   dociśnięte do prawej krawędzi nagłówka. */
.ticket-summary-actions[b-hyyjz6k1pc] {
    display: inline-flex;
    align-items: center;
    gap: 2px;
    margin-left: auto;
    flex-shrink: 0;
}

[b-hyyjz6k1pc] .ticket-action-close .dxbl-btn {
    color: #b91c1c !important;
}

/* Usunięcie do kosza — ta sama czerwień co domknięcie, bo obie akcje kończą sprawę
   i obie stoją na końcu paska. */
[b-hyyjz6k1pc] .ticket-action-delete .dxbl-btn {
    color: #b91c1c !important;
}

/* Status i priorytet pod tytułem — bez badge'ów, dokładnie jak na liście zgłoszeń
   i w nagłówku kolumny Kanbana. */
.ticket-summary-meta[b-hyyjz6k1pc] {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 14px;
    margin-top: 8px;
    /* Linia oddzielająca nagłówek (tytuł + status) od opisu — tak jak na stronie projektu.
       Wcześniej rozdzielało je samo tło sekcji opisu; po jego zdjęciu (niżej) nagłówek
       zlewałby się z treścią. */
    padding-bottom: 0.7rem;
    border-bottom: 1px solid #f1f2f4;
}

.status-tag[b-hyyjz6k1pc],
.prio-tag[b-hyyjz6k1pc],
.invoice-tag[b-hyyjz6k1pc] {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    font-size: 0.78rem;
    font-weight: 600;
    color: #374151;
    white-space: nowrap;
}

/* Ikonka paragonu przy stanie faktury — maska na czarnym SVG, kolor wstrzykiwany inline
   z TicketVisuals.InvoiceStatusColor (tak samo jak strzałka priorytetu niżej). */
.invoice-tag-icon[b-hyyjz6k1pc] {
    width: 13px;
    height: 13px;
    display: inline-block;
    flex-shrink: 0;
    -webkit-mask: url('/images/bootstrap-icons/receipt.svg') no-repeat center / contain;
    mask: url('/images/bootstrap-icons/receipt.svg') no-repeat center / contain;
}

.status-tag-dot[b-hyyjz6k1pc] {
    width: 8px;
    height: 8px;
    border-radius: 2px;
    display: inline-block;
    flex-shrink: 0;
}

/* Strzałka priorytetu — ta sama maska i paleta co na kartach Kanbana i na liście;
   kolor wstrzykiwany inline z TicketVisuals.PriorityColor. */
.tl-prio[b-hyyjz6k1pc] {
    width: 14px;
    height: 14px;
    display: inline-block;
    flex-shrink: 0;
}

.tl-prio-critical[b-hyyjz6k1pc] {
    -webkit-mask: url('/images/bootstrap-icons/chevron-double-up.svg') no-repeat center / contain;
    mask: url('/images/bootstrap-icons/chevron-double-up.svg') no-repeat center / contain;
}

.tl-prio-high[b-hyyjz6k1pc] {
    -webkit-mask: url('/images/bootstrap-icons/chevron-up.svg') no-repeat center / contain;
    mask: url('/images/bootstrap-icons/chevron-up.svg') no-repeat center / contain;
}

.tl-prio-normal[b-hyyjz6k1pc] {
    -webkit-mask: url('/images/bootstrap-icons/dash.svg') no-repeat center / contain;
    mask: url('/images/bootstrap-icons/dash.svg') no-repeat center / contain;
}

.tl-prio-low[b-hyyjz6k1pc] {
    -webkit-mask: url('/images/bootstrap-icons/chevron-down.svg') no-repeat center / contain;
    mask: url('/images/bootstrap-icons/chevron-down.svg') no-repeat center / contain;
}

/* Ikona źródła przed statusem — te same maski co w wierszu listy zgłoszeń (Tickets.razor.css),
   sama ikona bez etykiety, nazwa źródła w tooltipie. currentColor, więc w motywie ciemnym
   wystarczy kolor tekstu pastylki. */
.source-tag[b-hyyjz6k1pc] {
    display: inline-flex;
    align-items: center;
    color: #6b7280;
}

.tl-source[b-hyyjz6k1pc] {
    width: 14px;
    height: 14px;
    display: inline-block;
    flex-shrink: 0;
    background-color: currentColor;
}

.tl-source-manual[b-hyyjz6k1pc] {
    -webkit-mask: url('/images/bootstrap-icons/pencil.svg') no-repeat center / contain;
    mask: url('/images/bootstrap-icons/pencil.svg') no-repeat center / contain;
}

.tl-source-email[b-hyyjz6k1pc] {
    -webkit-mask: url('/images/bootstrap-icons/envelope.svg') no-repeat center / contain;
    mask: url('/images/bootstrap-icons/envelope.svg') no-repeat center / contain;
}

.tl-source-chat[b-hyyjz6k1pc] {
    -webkit-mask: url('/images/bootstrap-icons/chat-left-text.svg') no-repeat center / contain;
    mask: url('/images/bootstrap-icons/chat-left-text.svg') no-repeat center / contain;
}

.tl-source-phone[b-hyyjz6k1pc] {
    -webkit-mask: url('/images/bootstrap-icons/telephone.svg') no-repeat center / contain;
    mask: url('/images/bootstrap-icons/telephone.svg') no-repeat center / contain;
}

.tl-source-hubapi[b-hyyjz6k1pc] {
    -webkit-mask: url('/images/bootstrap-icons/plug.svg') no-repeat center / contain;
    mask: url('/images/bootstrap-icons/plug.svg') no-repeat center / contain;
}

.tl-source-systemerror[b-hyyjz6k1pc] {
    -webkit-mask: url('/images/bootstrap-icons/exclamation-triangle.svg') no-repeat center / contain;
    mask: url('/images/bootstrap-icons/exclamation-triangle.svg') no-repeat center / contain;
}

.tl-source-ai[b-hyyjz6k1pc] {
    -webkit-mask: url('/images/bootstrap-icons/stars.svg') no-repeat center / contain;
    mask: url('/images/bootstrap-icons/stars.svg') no-repeat center / contain;
}

/* Nagłówek opisu jako przycisk zwijania — cały wiersz klikalny, strzałka obraca się w miejscu. */
.ticket-desc-toggle[b-hyyjz6k1pc] {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    background: none;
    border: none;
    padding: 0;
    cursor: pointer;
}

    .ticket-desc-toggle .ticket-tasks-header[b-hyyjz6k1pc] {
        margin-bottom: 0;
    }

.ticket-desc-chevron[b-hyyjz6k1pc] {
    width: 12px;
    height: 12px;
    display: block;
    flex-shrink: 0;
    background-color: #6b7280;
    transition: transform 0.12s ease;
    -webkit-mask: url('/images/bootstrap-icons/chevron-down.svg') no-repeat center / contain;
    mask: url('/images/bootstrap-icons/chevron-down.svg') no-repeat center / contain;
}

    /* Zwinięty = strzałka w prawo (obrót zamiast drugiego pliku SVG). */
    .ticket-desc-chevron.is-collapsed[b-hyyjz6k1pc] {
        transform: rotate(-90deg);
    }

.ticket-summary-description[b-hyyjz6k1pc] {
    margin-top: 0.6rem;
    color: #374151;
    font-size: 0.9rem;
    line-height: 1.45;
    overflow-wrap: anywhere;
}

/* ===== Opis, pod nim Zadania ===== */
/* Bloki układają się jeden pod drugim; odstęp między nimi daje margin-top .ticket-tasks. */
.ticket-summary-body[b-hyyjz6k1pc] {
    display: block;
}

.ticket-summary-desc-col[b-hyyjz6k1pc] {
    min-width: 0;
}

.ticket-summary-tasks-col[b-hyyjz6k1pc] {
    min-width: 0;
}

/* Pudełko listy zadań — używane w POPUPIE zadań, gdzie tło oddziela listę od tła okna. */
.ticket-tasks[b-hyyjz6k1pc] {
    margin-top: 0.6rem;
    background: #f9fafb;
    border: 1px solid #eef0f2;
    border-radius: 8px;
    padding: 0.6rem 0.75rem;
}

/* Sekcja opisu w nagłówku zgłoszenia — BEZ własnego pudełka, tak jak na stronie projektu:
   treść siedzi wprost na białym tle panelu, a od nagłówka oddziela ją linia pod statusem
   (patrz .ticket-summary-meta). Wcześniej dzieliła styl z listą zadań i przez to dostawała
   szare tło z ramką, czyli pudełko w pudełku. */
.ticket-desc-section[b-hyyjz6k1pc] {
    margin-top: 0.7rem;
}

.ticket-tasks-header[b-hyyjz6k1pc] {
    font-weight: 600;
    font-size: 0.85rem;
    color: #1f2328;
    margin-bottom: 0.45rem;
}

.ticket-tasks-empty[b-hyyjz6k1pc] {
    color: #9ca3af;
    font-size: 0.82rem;
    margin-bottom: 0.45rem;
}

.ticket-tasks-list[b-hyyjz6k1pc] {
    list-style: none;
    margin: 0 0 0.5rem 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: 0.25rem;
}

.ticket-task-row[b-hyyjz6k1pc] {
    display: flex;
    align-items: center;
    gap: 0.45rem;
}

/* Tytuł zadania i podpis wykonawcy stoją w kolumnie, dlatego wiersz z checkboxem
   wyrównujemy do góry — inaczej ptaszek odjeżdżał na środek dwuliniowej pozycji. */
.ticket-task-row:has(.ticket-task-meta)[b-hyyjz6k1pc] {
    align-items: flex-start;
}

.ticket-task-text[b-hyyjz6k1pc] {
    flex: 1 1 auto;
    min-width: 0;
    display: flex;
    flex-direction: column;
    gap: 0.05rem;
}

.ticket-task-label[b-hyyjz6k1pc] {
    flex: 1 1 auto;
    min-width: 0;
    font-size: 0.86rem;
    color: #374151;
    overflow-wrap: anywhere;
}

.ticket-task-meta[b-hyyjz6k1pc] {
    font-size: 0.74rem;
    color: #9ca3af;
    overflow-wrap: anywhere;
}

.ticket-task-done .ticket-task-label[b-hyyjz6k1pc] {
    text-decoration: line-through;
    color: #9ca3af;
}

[b-hyyjz6k1pc] .ticket-task-remove .dxbl-btn {
    padding: 0.1rem 0.3rem !important;
    color: #b0b7be !important;
}

.ticket-task-add[b-hyyjz6k1pc] {
    display: flex;
    align-items: center;
    gap: 0.4rem;
}

    .ticket-task-add .ticket-task-add-input[b-hyyjz6k1pc] {
        flex: 1 1 auto;
    }

/* === Treść z maila nie ma prawa uciec z panelu ===
   To samo, co w Tickets.razor.css: stopki maili pozycjonują swoje ikonki absolutnie, a taki
   element kotwiczy się w całej stronie zamiast w treści zgłoszenia — nie tnie go żaden
   overflow po drodze i rozciąga dokument daleko poza ekran. Blok odniesienia na kontenerze
   plus przywrócenie potomków do przepływu zamyka temat (position: fixed też). */
.ticket-summary-description[b-hyyjz6k1pc],
.msg-body[b-hyyjz6k1pc] {
    position: relative;
}

.ticket-summary-description[b-hyyjz6k1pc]  *,
.msg-body[b-hyyjz6k1pc]  * {
    position: static !important;
}

/* Treść opisu i wiadomości wstrzykiwana jest przez MarkupString, więc jej elementy NIE
   dostają atrybutu zakresu CSS. Bez ::deep selektory kompilują się do "img[b-xxx]"
   i nie trafiają w nic — reguła poniżej przez lata nie działała. */
.ticket-summary-description[b-hyyjz6k1pc]  img,
.msg-body[b-hyyjz6k1pc]  img {
    max-width: 100%;
    height: auto;
    display: block;
    border-radius: 4px;
}

/* ===== Tabele w treści przychodzącej z e-maili =====
   Zgłoszenia generowane automatycznie (raporty błędnych stanów) potrafią zawierać
   szerokie tabele HTML. Bez tego renderują się jako słupek poklejonych liczb.
   display:block + overflow-x daje tabeli własny pasek przewijania, zamiast rozpychać
   stronę; nowrap w komórkach powstrzymuje łamanie liczb w połowie. */
.ticket-summary-description[b-hyyjz6k1pc]  table,
.msg-body[b-hyyjz6k1pc]  table {
    display: block;
    /* Outlook wkleja tabeli sztywną szerokość (width="..."), przez co blok był ucinany
       i przewijany mimo wolnego miejsca obok. */
    width: auto !important;
    max-width: 100%;
    overflow-x: auto;
    border-collapse: collapse;
    margin: 0.5rem 0;
    font-size: 0.82rem;
    line-height: 1.35;
    white-space: normal;
}

    .ticket-summary-description[b-hyyjz6k1pc]  table th,
    .ticket-summary-description[b-hyyjz6k1pc]  table td,
    .msg-body[b-hyyjz6k1pc]  table th,
    .msg-body[b-hyyjz6k1pc]  table td {
        border: 1px solid #d0d7de;
        padding: 0.25rem 0.5rem;
        text-align: left;
        vertical-align: top;
        white-space: nowrap;
    }

    .ticket-summary-description[b-hyyjz6k1pc]  table th,
    .msg-body[b-hyyjz6k1pc]  table th {
        background: #f3f4f6;
        font-weight: 600;
        position: sticky;
        top: 0;
    }

    .ticket-summary-description[b-hyyjz6k1pc]  table tr:nth-child(even) td,
    .msg-body[b-hyyjz6k1pc]  table tr:nth-child(even) td {
        background: #fafafa;
    }

/* Pastylki statusu i priorytetu wyleciały — status/priorytet rysują teraz kropka i strzałka
   (.status-tag / .prio-tag wyżej), tak samo jak na liście zgłoszeń i tablicy Kanban. */

/* ===== Badge roli autora ===== */
.badge-role[b-hyyjz6k1pc] {
    background: #e0e7ff;
    color: #3730a3;
    border-radius: 999px;
    padding: 0 0.5rem;
    font-size: 0.7rem;
    font-weight: 600;
}

.details-header-actions[b-hyyjz6k1pc] {
    display: inline-flex;
    gap: 0.25rem;
    align-items: center;
}

.msg .msg-head-left[b-hyyjz6k1pc] {
    display: inline-flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 0.25rem;
    margin-right: 6px;
}

/* Awatar autora wiadomości — kółko z inicjałami w kolorze jego grupy, jak na liście zgłoszeń
   i na kartach Kanbana. Kolor wstrzykuje komponent inline (TicketVisuals.UserGroupColor). */
.msg-avatar[b-hyyjz6k1pc] {
    width: 20px;
    height: 20px;
    border-radius: 50%;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    margin-right: 2px;
    font-size: 9px;
    font-weight: 700;
    line-height: 1;
    color: #fff;
    letter-spacing: 0.02em;
}

/* Nad logami NIE ma już własnego odstępu — daje go wyłącznie gap kontenera strony
   (.ticket-page, 1.5rem), tak samo jak między pozostałymi sekcjami. Wcześniej stały tu
   margin-top: 1rem i padding-top: 1rem, które sumowały się z tym gapem do 56 px, a sam
   padding był przy tym nieodróżnialny od marginesu, bo .ticket-logs nie ma ani tła, ani ramki.

   Klasa ZOSTAJE w znaczniku — celują w nią custom.css i theme-dark.css
   (`.ticket-logs .dxbl-group`, ramka grupy logów). */
@media (max-width: 1100px) {
    .ticket-layout[b-hyyjz6k1pc] {
        flex-direction: column;
    }
    .details-cell[b-hyyjz6k1pc] {
        flex: 1 1 auto;
        max-width: 100%;
        width: 100%;
    }
}

/* ===== Konwersacja ===== */
.ticket-main[b-hyyjz6k1pc] {
    display: flex;
    flex-direction: column;
    background: #fff;
    border: 1px solid #e6e8eb;
    border-radius: 12px;
    overflow: hidden;
    min-height: 70vh;
}

/* Pasek tytułu (DxToolbar) */
[b-hyyjz6k1pc] .ticket-header-toolbar {
    border-bottom: 1px solid #eef0f2;
    background: #fafbfc;
}

[b-hyyjz6k1pc] .ticket-header-toolbar .ticket-title-item .dxbl-toolbar-item-text {
    font-weight: 600;
    font-size: 1.05rem;
    color: #1f2328;
}

[b-hyyjz6k1pc] .ticket-header-toolbar .ticket-number-item {
    background: #f3f4f6;
    border-radius: 999px;
    padding: 0.1rem 0.6rem !important;
    color: #1f2328;
    font-size: 0.78rem;
}

/* Pasek akcji (DxToolbar) */
[b-hyyjz6k1pc] .ticket-actions-toolbar {
    border-bottom: 1px solid #eef0f2;
    background: #fff;
}

[b-hyyjz6k1pc] .ticket-actions-toolbar .ai-active .dxbl-btn,
[b-hyyjz6k1pc] .ticket-actions-toolbar .ai-active .dxbl-toolbar-item-btn {
    background: #ede9fe !important;
    color: #6d28d9 !important;
    border-color: #ddd6fe !important;
    border-radius: 8px;
}

/* ===== Wiadomości ===== */
.messages[b-hyyjz6k1pc] {
    flex: 1;
    padding: 1rem 1.25rem;
    overflow-y: auto;
    background: #f7f8fa;
    display: flex;
    flex-direction: column;
    gap: 0.75rem;
}

.msg[b-hyyjz6k1pc] {
    max-width: 78%;
    min-width: 0;
    border-radius: 10px;
    background: #fff;
    border: 1px solid #e6e8eb;
    padding: 0.6rem 0.85rem;
    box-shadow: 0 1px 1px rgba(0,0,0,.02);
    overflow-wrap: anywhere;
    word-break: break-word;
}

.msg .msg-head[b-hyyjz6k1pc] {
    display: flex;
    justify-content: space-between;
    font-size: 0.78rem;
    color: #6e7781;
    margin-bottom: 0.25rem;
}

.msg .msg-head strong[b-hyyjz6k1pc] {
    color: #1f2328;
    margin-right: 0.35rem;
}

/* Prawa strona nagłówka wiadomości: znacznik „edytowano", data i ołówek edycji. */
.msg .msg-head-right[b-hyyjz6k1pc] {
    display: inline-flex;
    align-items: center;
    gap: 0.35rem;
    flex: 0 0 auto;
    white-space: nowrap;
}

.msg .msg-edited[b-hyyjz6k1pc] {
    font-style: italic;
    opacity: 0.75;
    cursor: help;
}

/* Ołówek pokazuje się dopiero pod kursorem — w spoczynku wątek ma zostać czystą rozmową,
   a nie paskiem narzędzi przy każdym wpisie. Na dotyku (brak hovera) stoi widoczny. */
.msg .msg-edit-btn[b-hyyjz6k1pc] {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 1.15rem;
    height: 1.15rem;
    padding: 0;
    border: 0;
    border-radius: 50%;
    background: transparent;
    cursor: pointer;
    opacity: 0;
    transition: opacity 0.12s ease, background-color 0.12s ease;
}

.msg:hover .msg-edit-btn[b-hyyjz6k1pc],
.msg .msg-edit-btn:focus-visible[b-hyyjz6k1pc] {
    opacity: 0.7;
}

.msg .msg-edit-btn:hover[b-hyyjz6k1pc] {
    opacity: 1;
    background: rgba(0, 0, 0, 0.06);
}

@media (hover: none) {
    .msg .msg-edit-btn[b-hyyjz6k1pc] {
        opacity: 0.7;
    }
}

.msg .msg-edit-btn .icon-bs-pen[b-hyyjz6k1pc] {
    width: 0.7rem;
    height: 0.7rem;
    top: 0;
    margin: 0;
}

.msg .msg-edit[b-hyyjz6k1pc] {
    display: flex;
    flex-direction: column;
    gap: 0.4rem;
}

.msg .msg-edit-actions[b-hyyjz6k1pc] {
    display: flex;
    gap: 0.35rem;
}

.msg .msg-body[b-hyyjz6k1pc] {
    white-space: pre-wrap;
    color: #1f2328;
    margin: 0;
    font-size: 0.92rem;
    line-height: 1.4;
    overflow-wrap: anywhere;
    word-break: break-word;
    min-width: 0;
}

.msg .msg-body.collapsed[b-hyyjz6k1pc] {
    display: -webkit-box;
    -webkit-line-clamp: 6;
    -webkit-box-orient: vertical;
    overflow: hidden;
    max-height: 8.4em;
}

.msg .msg-toggle[b-hyyjz6k1pc] {
    background: transparent;
    border: none;
    padding: 4px 0 0 0;
    font-size: 0.78rem;
    font-weight: 600;
    color: #c2410c;
    cursor: pointer;
    align-self: flex-start;
}

.msg .msg-toggle:hover[b-hyyjz6k1pc] {
    text-decoration: underline;
}

.msg.own .msg-toggle[b-hyyjz6k1pc] {
    color: #7c2d12;
}

.msg.other[b-hyyjz6k1pc] {
    align-self: flex-start;
    background: #eff6ff;
    border-color: #bfdbfe;
    color: #1e3a8a;
}

.msg.other .msg-head[b-hyyjz6k1pc] { color: #1d4ed8; }
.msg.other .msg-head strong[b-hyyjz6k1pc] { color: #1e3a8a; }
.msg.other .msg-body[b-hyyjz6k1pc] { color: #1e3a8a; }
.msg.other .msg-toggle[b-hyyjz6k1pc] { color: #1d4ed8; }

.msg.own[b-hyyjz6k1pc] {
    align-self: flex-end;
    background: #fff7ed;
    border-color: #fed7aa;
    color: #7c2d12;
}

.msg.own .msg-head[b-hyyjz6k1pc] { color: #9a3412; }
.msg.own .msg-head strong[b-hyyjz6k1pc] { color: #7c2d12; }
.msg.own .msg-body[b-hyyjz6k1pc] { color: #7c2d12; }

.msg.internal[b-hyyjz6k1pc] {
    align-self: stretch;
    max-width: 100%;
    background: #fef2f2;
    border-color: #fecaca;
}

.msg.system[b-hyyjz6k1pc] {
    align-self: center;
    max-width: 100%;
    background: transparent;
    border: none;
    box-shadow: none;
    color: #6e7781;
    font-size: 0.8rem;
    text-align: center;
}

.msg .badge-internal[b-hyyjz6k1pc] {
    background: #ef4444;
    color: #fff;
    border-radius: 999px;
    padding: 0 0.5rem;
    font-size: 0.7rem;
    margin-left: 0.35rem;
}

/* ===== Composer ===== */
.composer[b-hyyjz6k1pc] {
    border-top: 1px solid #eef0f2;
    background: #fff;
    padding: 0.75rem 1rem;
    position: relative;
}

[b-hyyjz6k1pc] .composer-loader {
    position: absolute;
    inset: 0;
    z-index: 10;
    border-radius: 0;
    background: rgba(255,255,255,0.7);
}

[b-hyyjz6k1pc] .composer-memo {
    border: 1px solid #d0d7de !important;
    border-radius: 10px !important;
    background: #fff;
}

/* Pasek narzędzi kompozytora + „Wyślij" w jednym rzędzie. Przycisk wysyłki stoi POZA
   DxToolbarem (patrz komentarz w znaczniku), więc to ten rząd trzyma go po prawej —
   wcześniej robiło to ToolbarItemAlignment.Right. Pasek dostaje `min-width: 0`, żeby
   to on się kurczył i chował swoje pozycje do „…", a nie żeby wypychał przycisk poza kadr. */
.composer-actions[b-hyyjz6k1pc] {
    display: flex;
    align-items: center;
    gap: 0.5rem;
}

[b-hyyjz6k1pc] .composer-toolbar {
    background: transparent;
    border: none;
    margin-top: 0.5rem;
    flex: 1 1 auto;
    min-width: 0;
}

/* Nie kurczy się i nie zawija — to jedyna akcja, bez której formularz nie ma sensu. */
[b-hyyjz6k1pc] .composer-submit {
    flex: 0 0 auto;
    margin-top: 0.5rem;
    white-space: nowrap;
}

.composer-status[b-hyyjz6k1pc] {
    display: inline-flex;
    align-items: center;
    gap: 0.5rem;
    font-size: 0.85rem;
    color: #57606a;
}

[b-hyyjz6k1pc] .composer-status-combo {
    min-width: 140px;
}

/* ===== Panel detali ===== */
.details-panel[b-hyyjz6k1pc] {
    display: flex;
    flex-direction: column;
    gap: 0.75rem;
}

.details-card[b-hyyjz6k1pc] {
    background: #fff;
    border: 1px solid #e6e8eb;
    border-radius: 12px;
    padding: 0.85rem 1rem;
}

.details-card-header[b-hyyjz6k1pc] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 0.25rem;
    font-size: 0.78rem;
    font-weight: 700;
    color: #6e7781;
    text-transform: uppercase;
    letter-spacing: 0.04em;
    margin-bottom: 0.6rem;
}

/* Tytuł zabiera całą wolną szerokość, akcje zbijają się w prawym rogu. Przy dwóch
   przyciskach w jednym nagłówku samo space-between rozrzucało je po całej karcie. */
.details-card-header > span:first-child[b-hyyjz6k1pc] {
    margin-right: auto;
    min-width: 0;
}

/* Akcje nagłówka to SAME ikonki (opis siedzi w tooltipie). Panel boczny ma stałą, wąską
   szerokość — etykiety tekstowe łamały się na dwie linie i wychodziły poza kartę. */
[b-hyyjz6k1pc] .details-card-action .dxbl-btn {
    padding: 0.1rem 0.25rem !important;
    min-width: 0 !important;
}

.details-section-title[b-hyyjz6k1pc] {
    margin-top: 0.85rem;
    margin-bottom: 0.35rem;
    font-size: 0.78rem;
    font-weight: 700;
    color: #6e7781;
    text-transform: uppercase;
    letter-spacing: 0.04em;
}

.details-subheader[b-hyyjz6k1pc] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    margin-top: 0.5rem;
    margin-bottom: 0.25rem;
    font-size: 0.82rem;
}

.details-subheader .lbl[b-hyyjz6k1pc] { color: #57606a; }

[b-hyyjz6k1pc] .details-form .dxbl-flcc {
    color: #57606a;
    font-size: 0.85rem;
}

.val[b-hyyjz6k1pc] {
    font-weight: 500;
    color: #1f2328;
    font-size: 0.88rem;
}

[b-hyyjz6k1pc] .details-combo { width: 100%; }

/* Pole, na którym zatrzymał się zapis. Czerwień ta sama, co przy akcjach kończących sprawę
   (.ticket-action-close / .ticket-action-delete), żeby „coś jest nie tak" wyglądało w całym
   zgłoszeniu jednakowo. Ramkę niesie KORZEŃ edytora DevExpressa (<dxbl-tag-box> z klasą
   .dxbl-text-edit), a tam trafia nasza klasa z CssClass — stąd bez zagnieżdżeń. */
[b-hyyjz6k1pc] .details-field-missing {
    border-color: #b91c1c !important;
    box-shadow: 0 0 0 1px #b91c1c;
}

.details-field-error[b-hyyjz6k1pc] {
    margin-top: 4px;
    color: #b91c1c;
    font-size: 0.78rem;
    line-height: 1.3;
}

.person[b-hyyjz6k1pc] {
    display: flex;
    align-items: center;
    gap: 0.6rem;
    padding: 0.35rem 0;
}

/* Kółko, nie kwadrat, i tło z grupy osoby (wstrzykiwane inline z TicketVisuals) — tak samo jak
   kulki na kartach Kanbana i w wiadomościach. Pomarańcz zostaje tylko jako awaryjne tło, gdy
   komponent nie podał koloru. */
.person .avatar[b-hyyjz6k1pc],
.person .avatar.avatar-static[b-hyyjz6k1pc] {
    width: 36px;
    height: 36px;
    border-radius: 50%;
    background: var(--main-color);
    color: #fff;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-weight: 600;
    font-size: 0.9rem;
    animation: none !important;
}

.person .meta[b-hyyjz6k1pc] {
    display: flex;
    flex-direction: column;
    line-height: 1.15;
}

.person .meta .name[b-hyyjz6k1pc] {
    font-size: 0.9rem;
    font-weight: 600;
    color: #1f2328;
}

.person .meta .sub[b-hyyjz6k1pc] {
    font-size: 0.78rem;
    color: #6e7781;
}

/* Tagi */
.tag-list[b-hyyjz6k1pc] {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.35rem;
}

.tag-list .tag[b-hyyjz6k1pc] {
    background: #fef3c7;
    color: #92400e;
    border-radius: 999px;
    padding: 0.1rem 0.55rem;
    font-size: 0.78rem;
}

/* Attachments section */
.attachments-list[b-hyyjz6k1pc] { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 0.5rem; padding: 0.5rem 0.75rem; }
.attachment-row[b-hyyjz6k1pc] { display: flex; align-items: center; gap: 0.6rem; }

/* Karta „Załączniki" stoi także przy zerze plików (spinacz do dołożenia pierwszego musi mieć
   gdzie stanąć) — wtedy zamiast listy jest jedno zdanie. */
.attachments-empty[b-hyyjz6k1pc] {
    padding: 1.25rem 0.25rem;
    color: #6b7280;
    font-size: 0.85rem;
    text-align: center;
}
/* Miniatura i nazwa są PRZYCISKAMI (otwierają podgląd na wierzchu strony), a nie
   odnośnikami — stąd zdejmowanie domyślnego wyglądu <button>: obramowania, tła i kroju. */
.attachment-thumb[b-hyyjz6k1pc] { width: 40px; height: 40px; border-radius: 4px; overflow: hidden; flex: 0 0 auto; display: flex; align-items: center; justify-content: center; background: #f3f4f6; border: 1px solid #e5e7eb; padding: 0; cursor: pointer; }
.attachment-thumb:hover[b-hyyjz6k1pc] { border-color: #f97316; }
.attachment-thumb img[b-hyyjz6k1pc] { width: 100%; height: 100%; object-fit: cover; }
.attachment-thumb-icon[b-hyyjz6k1pc] { color: #6b7280; }
.attachment-meta[b-hyyjz6k1pc] { display: flex; flex-direction: column; flex: 1 1 auto; min-width: 0; }
.attachment-name[b-hyyjz6k1pc] { background: none; border: none; padding: 0; font: inherit; text-align: left; cursor: pointer; color: #1f2937; font-weight: 500; text-decoration: none; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.attachment-name:hover[b-hyyjz6k1pc] { color: #f97316; text-decoration: underline; }
.attachment-info[b-hyyjz6k1pc] { font-size: 0.75rem; color: #6b7280; }

/* Strzałka „na dysk" przy każdym pliku. Blada, dopóki nie najedzie się na wiersz: pierwszym
   ruchem ma być podgląd (miniatura i nazwa), pobranie to droga na skróty dla tych, którzy
   wiedzą, czego chcą. Na dotyku :hover nie istnieje, więc tam zostaje widoczna na stałe. */
.attachment-dl[b-hyyjz6k1pc] {
    flex: 0 0 auto;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 26px;
    height: 26px;
    border-radius: 6px;
    color: #6b7280;
    text-decoration: none;
    opacity: 0;
    transition: opacity 0.12s ease, background-color 0.12s ease;
}

.attachment-row:hover .attachment-dl[b-hyyjz6k1pc],
.attachment-dl:focus-visible[b-hyyjz6k1pc] {
    opacity: 1;
}

.attachment-dl:hover[b-hyyjz6k1pc] {
    background: #ffedd5;
}

.attachment-dl:focus-visible[b-hyyjz6k1pc] {
    outline: 2px solid #f97316;
    outline-offset: 1px;
}

@media (hover: none) {
    .attachment-dl[b-hyyjz6k1pc] {
        opacity: 1;
    }
}

/* === Wersja robocza w pasku kompozytora ===
   Przycisk zapisu, znacznik „zapisano o…" i kosz stoją w jednej grupie, żeby pasek nie rozbił
   ich na trzy osobne pozycje toolbara — to jedna sprawa, nie trzy. Znacznik jest wyszarzony
   i mniejszy: to potwierdzenie, a nie polecenie. */
.composer-draft[b-hyyjz6k1pc] { display: inline-flex; align-items: center; gap: 0.25rem; }
.composer-draft-saved[b-hyyjz6k1pc] { font-size: 0.75rem; color: #6b7280; white-space: nowrap; }
/* === Strefa na pliki w kompozytorze ===
   Wygląd samej strefy stoi w AttachmentUploader.razor.css (izolowanym do komponentu) —
   tutaj zostaje tylko to, co zależy od sąsiadów: odstęp od edytora i od paska akcji. */
.composer[b-hyyjz6k1pc]  .att-drop {
    margin-top: 0.5rem;
}

.composer[b-hyyjz6k1pc]  .att-picked {
    margin-bottom: 0.15rem;
}

/* Listy osób pod kartą — dodatkowi zgłaszający i dodatkowi odpowiedzialni. Obie wyglądają
   tak samo (podnagłówek, wiersz z kulką i akcją po prawej), więc dzielą te same klasy. */
.participants-list[b-hyyjz6k1pc] {
    margin-top: 0.6rem;
    padding-top: 0.5rem;
    border-top: 1px solid #eef0f2;
    display: flex;
    flex-direction: column;
    gap: 0.15rem;
}

.participants-subheader[b-hyyjz6k1pc] {
    font-size: 0.75rem;
    font-weight: 700;
    color: #6e7781;
    text-transform: uppercase;
    letter-spacing: 0.04em;
    margin-bottom: 0.3rem;
}

.participant-row[b-hyyjz6k1pc] {
    align-items: center;
    justify-content: space-between;
}

.participant-row .meta[b-hyyjz6k1pc] {
    flex: 1 1 auto;
    min-width: 0;
}

.participant-remove[b-hyyjz6k1pc] {
    flex: 0 0 auto;
    color: #6e7781 !important;
}

.participant-remove:hover[b-hyyjz6k1pc] {
    color: #c0392b !important;
}

.participant-option[b-hyyjz6k1pc] {
    display: flex;
    align-items: baseline;
    gap: 0.25rem;
}

/* Baner zarchiwizowanego zgłoszenia */
.ticket-archived-banner[b-hyyjz6k1pc] {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    padding: 0.6rem 0.9rem;
    margin-bottom: 0.75rem;
    background: #fff8e1;
    border: 1px solid #f2d98a;
    border-radius: 8px;
    color: #7a5c00;
    font-size: 0.9rem;
}

/* Kosz — ten sam kształt co baner archiwum, inna barwa. Archiwum jest decyzją („odłożone"),
   kosz ostrzeżeniem („zaraz zniknie"), więc czerwień zamiast bursztynu. Nadpisuje tło, ramkę
   i kolor tekstu z .ticket-archived-banner, resztę (układ, odstępy) dziedziczy. */
.ticket-trashed-banner[b-hyyjz6k1pc] {
    background: #fdecea;
    border-color: #f2b8b1;
    color: #8a2c22;
}

.ticket-archived-text[b-hyyjz6k1pc] {
    flex: 1 1 auto;
}

.ticket-archived-restore[b-hyyjz6k1pc] {
    flex: 0 0 auto;
}

/* Kompozytor zablokowany dla zarchiwizowanych */
.composer-archived[b-hyyjz6k1pc] {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 0.5rem;
    padding: 1rem;
    color: #6e7781;
    background: #f6f8fa;
    border: 1px dashed #d0d7de;
    border-radius: 8px;
    font-size: 0.9rem;
}

/* Zwinięty kompozytor — sam przycisk „Odpowiedz” pod wątkiem. Ten sam wyśrodkowany układ
   i wypełnienie co komunikaty dla spraw zamkniętych i zarchiwizowanych (.composer-archived),
   żeby miejsce pod rozmową nie skakało w zależności od stanu zgłoszenia. Bez ramki i tła:
   tam jest komunikat „nie da się nic zrobić”, tutaj stoi akcja do kliknięcia. */
/* Zwinięty kompozytor: „Odpowiedz" + strefa na pliki w jednym rzędzie. Przycisk trzyma swoją
   szerokość, strefa bierze resztę — na wąskim ekranie oba spadają pod siebie. */
.composer-collapsed[b-hyyjz6k1pc] {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 0.75rem;
    padding: 1rem;
    flex-wrap: wrap;
}

.composer-collapsed[b-hyyjz6k1pc]  .att-drop {
    flex: 1 1 260px;
    min-width: 0;
}

/* Pastylka faktury prowadząca do okresu rozliczeniowego — klikalna, ale bez podkreślenia:
   ma wyglądać jak reszta pastylek w panelu, a nie jak link w tekście. */
.invoice-tag-link[b-hyyjz6k1pc] {
    text-decoration: none;
    color: inherit;
}

.invoice-tag-link:hover[b-hyyjz6k1pc] {
    text-decoration: underline;
    text-underline-offset: 2px;
}

.invoice-tag-period[b-hyyjz6k1pc] {
    margin-left: 4px;
    font-weight: 500;
    color: #6b7280;
    font-variant-numeric: tabular-nums;
}

/* Stopka popupów w szczegółach zgłoszenia — ten sam układ co na liście zgłoszeń
   (.ticket-popup-footer) i projektów. Same DxButtony w FooterContentTemplate stoją
   bez odstępu i stykają się bokami. */
.details-popup-footer[b-hyyjz6k1pc] {
    display: flex;
    justify-content: flex-end;
    gap: 8px;
}

/* =====================================================================
   GOTOWE ODPOWIEDZI — rząd chipów nad edytorem
   =====================================================================
   Rząd stoi NAD edytorem (wzorem szybkich odpowiedzi w Teams), bo formułkę wybiera
   się przed pisaniem. Zawija się zamiast przewijać w poziomie: chip przesunięty poza
   kadr jest chipem, którego nie ma — a rząd i tak jest skrócony do kilku pozycji
   (QuickReplyCollapsedCount) z przyciskiem „+N". */
/* Rząd nad edytorem: po lewej gotowce (zawijają się), po prawej redakcja AI (nie zawija się
   i nie kurczy). Dwie grupy zamiast jednej listy z `margin-left: auto` — przy zawiniętych chipach
   automatyczny margines zepchnąłby przycisk na OSTATNIĄ linię, czyli raz pod chipy, raz obok nich,
   zależnie od tego, ile formułek akurat ma użytkownik. */
.composer-quick-replies[b-hyyjz6k1pc] {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 0.5rem;
    margin-bottom: 0.5rem;
}

.quick-reply-list[b-hyyjz6k1pc] {
    display: flex;
    flex-wrap: wrap;
    gap: 0.35rem;
    /* Bez min-width: 0 długi chip rozpycha grupę i wypycha przycisk AI poza kadr. */
    min-width: 0;
}

.composer-inline-actions[b-hyyjz6k1pc] {
    flex: 0 0 auto;
}

/* Redakcja AI — kształt chipa jak gotowce, wyróżniona kolorem akcentu i ikoną. Bez max-width
   z .quick-reply-chip: nazwa formułki bywa długa i musi się uciąć, a etykieta akcji jest krótka
   i uciąć się nie może. */
.composer-polish-btn[b-hyyjz6k1pc] {
    max-width: none;
    border-color: var(--main-color);
    color: var(--main-color);
    background: transparent;
}

.composer-polish-btn:hover:not(:disabled)[b-hyyjz6k1pc] {
    background: rgba(255, 90, 10, 0.1);
    border-color: var(--main-color);
}

.quick-reply-chip[b-hyyjz6k1pc] {
    display: inline-flex;
    align-items: center;
    gap: 0.35rem;
    max-width: 260px;
    padding: 0.2rem 0.7rem;
    border: 1px solid #d0d7de;
    border-radius: 8px;
    background: #f6f8fa;
    color: #24292f;
    font-size: 0.8rem;
    line-height: 1.6;
    /* Długa nazwa ucina się wielokropkiem, zamiast rozpychać rząd na całą szerokość. */
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    cursor: pointer;
    transition: background-color 0.15s, border-color 0.15s;
}

.quick-reply-chip:hover:not(:disabled)[b-hyyjz6k1pc] {
    background: #eaeef2;
    border-color: #afb8c1;
}

.quick-reply-chip:disabled[b-hyyjz6k1pc] {
    opacity: 0.5;
    cursor: default;
}

.quick-reply-chip:focus-visible[b-hyyjz6k1pc] {
    outline: 2px solid var(--main-color);
    outline-offset: 1px;
}

/* Wspólne formułki zespołu — obwódka i lekkie tło w kolorze akcentu, bez ikony. Ikona w chipie
   zjadałaby miejsce na nazwę, a rozróżnienie jest drugorzędne: liczy się treść, nie właściciel.
   Pełna informacja („moja" / „zespołu") siedzi w tooltipie.

   NIE `border-left: 3px`: gruba krawędź z jednej strony rysuje się na zaokrągleniu jako
   pomarańczowy sierp i wygląda na błąd renderowania, a nie na oznaczenie. Obwódka dookoła
   zostaje 1-pikselowa, więc chip nie zmienia rozmiaru względem prywatnego. */
.quick-reply-chip-shared[b-hyyjz6k1pc] {
    border-color: var(--main-color);
    background: rgba(255, 90, 10, 0.08);
}

.quick-reply-chip-shared:hover:not(:disabled)[b-hyyjz6k1pc] {
    background: rgba(255, 90, 10, 0.16);
    border-color: var(--main-color);
}

.quick-reply-chip-more[b-hyyjz6k1pc] {
    background: transparent;
    border-style: dashed;
    color: #57606a;
}

/* =====================================================================
   REDAKCJA AI — podgląd przed podmianą
   =====================================================================
   Dwie kolumny obok siebie, bo decyzja brzmi „czy ta wersja jest lepsza", a nie
   „jak brzmi ta wersja". Na wąskim ekranie kolumny wchodzą jedna pod drugą. */
.polish-compare[b-hyyjz6k1pc] {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 0.75rem;
}

@media (max-width: 720px) {
    .polish-compare[b-hyyjz6k1pc] {
        grid-template-columns: 1fr;
    }
}

.polish-pane[b-hyyjz6k1pc] {
    border: 1px solid #d0d7de;
    border-radius: 8px;
    overflow: hidden;
}

.polish-pane-header[b-hyyjz6k1pc] {
    padding: 0.35rem 0.6rem;
    background: #f6f8fa;
    border-bottom: 1px solid #d0d7de;
    font-size: 0.75rem;
    font-weight: 600;
    color: #57606a;
    text-transform: uppercase;
    letter-spacing: 0.03em;
}

/* Wersja po redakcji dostaje akcent — to ona jest propozycją do przyjęcia. */
.polish-pane-after .polish-pane-header[b-hyyjz6k1pc] {
    color: var(--main-color);
}

.polish-pane-body[b-hyyjz6k1pc] {
    max-height: 320px;
    overflow-y: auto;
    padding: 0.6rem;
    font-size: 0.875rem;
}

.polish-pane-body :last-child[b-hyyjz6k1pc] {
    margin-bottom: 0;
}

.polish-summary[b-hyyjz6k1pc] {
    margin-top: 0.6rem;
    font-size: 0.75rem;
    color: #6b7280;
}

/* Podpowiedź pod strefą w oknie „Dodaj załącznik" — co wolno wrzucić i jaki jest limit. */
.attachment-popup-hint[b-hyyjz6k1pc] {
    margin-top: 0.6rem;
    font-size: 0.78rem;
    color: #6b7280;
    line-height: 1.4;
}

/* "zapisuje..." - autozapis w toku; przygaszone, zeby migotanie co poltorej sekundy nie ciagnelo wzroku. */
.composer-draft-saved[b-hyyjz6k1pc] { display: inline-flex; align-items: center; gap: 0.2rem; }
.composer-draft-saving[b-hyyjz6k1pc] { opacity: 0.7; font-style: italic; }

/* Zamkniete zgloszenie u klienta: komunikat i pod nim przycisk "Popros o otwarcie" - w kolumnie,
   zeby przycisk nie rozpychal komunikatu na boki i zostal w tym samym miejscu, co "Odpowiedz". */
.composer-closed[b-hyyjz6k1pc] {
    flex-direction: column;
    gap: 0.75rem;
}

.composer-closed-notice[b-hyyjz6k1pc] {
    display: flex;
    align-items: center;
    gap: 0.5rem;
}

/* "Prosba o otwarcie czeka" - ten sam wiersz co przycisk, ale bez akcji: tylko stan sprawy. */
.composer-reopen-pending[b-hyyjz6k1pc] {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 0.4rem;
    text-align: center;
}
/* /Components/Pages/Tickets/Grid.razor.rz.scp.css */
/* === Zadania ticketa (detail row w gridzie) === */
.grid-tasks[b-9juc7y0yac] {
    padding: 10px 14px 14px;
    background: #f9fafb;
    border-radius: 6px;
}

.grid-tasks-header[b-9juc7y0yac] {
    font-size: 12px;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: .04em;
    color: #6b7280;
    margin-bottom: 8px;
}

.grid-tasks-empty[b-9juc7y0yac] {
    font-size: 12.5px;
    color: #9ca3af;
    padding: 2px 0 8px;
}

.grid-task-done[b-9juc7y0yac] {
    text-decoration: line-through;
    color: #9ca3af;
}

/* Podpis „Wykonane przez X · data" pod tytułem zadania. */
.grid-task-meta[b-9juc7y0yac] {
    display: block;
    font-size: 11px;
    color: #9ca3af;
    overflow-wrap: anywhere;
}

[b-9juc7y0yac] .grid-task-remove .dxbl-btn {
    padding: 1px 4px !important;
    color: #b0b7be !important;
}

.grid-task-add[b-9juc7y0yac] {
    display: flex;
    align-items: center;
    gap: 6px;
    margin-top: 8px;
    max-width: 520px;
}

    .grid-task-add .grid-task-add-input[b-9juc7y0yac] {
        flex: 1 1 auto;
    }

/* === Faktura ===
   Ta sama pastylka co na liście zgłoszeń i w szczegółach: ikonka paragonu w kolorze stanu
   (wstrzykiwanym inline z TicketVisuals.InvoiceStatusColor) plus nazwa. */
.invoice-tag[b-9juc7y0yac] {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    font-size: 12px;
    font-weight: 600;
    line-height: 1.4;
    color: #374151;
    white-space: nowrap;
}

.invoice-tag-icon[b-9juc7y0yac] {
    width: 13px;
    height: 13px;
    display: inline-block;
    flex-shrink: 0;
    -webkit-mask: url('/images/bootstrap-icons/receipt.svg') no-repeat center / contain;
    mask: url('/images/bootstrap-icons/receipt.svg') no-repeat center / contain;
}
/* /Components/Pages/Tickets/TicketCalendar.razor.rz.scp.css */
.ticket-calendar-page[b-3mruwjqw83] {
    display: flex;
    flex-direction: column;
    height: calc(100vh - 80px);
    padding: 1.25rem;
    gap: 1rem;
}

.ticket-calendar-header[b-3mruwjqw83] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: 0.75rem;
}

.ticket-calendar-title[b-3mruwjqw83] {
    display: flex;
    align-items: center;
    font-size: 1.1rem;
    font-weight: 700;
    color: #1e293b;
}

.ticket-calendar-legend[b-3mruwjqw83] {
    display: flex;
    align-items: center;
    gap: 0.75rem;
    font-size: 0.8rem;
    color: #64748b;
}

.tc-legend-dot[b-3mruwjqw83] {
    display: inline-block;
    width: 10px;
    height: 10px;
    border-radius: 50%;
    flex-shrink: 0;
}

.tc-legend-label[b-3mruwjqw83] {
    margin-right: 0.5rem;
}

.tc-legend-dot.tc-priority-critical[b-3mruwjqw83] {
    background: #be185d;
}

.tc-legend-dot.tc-priority-high[b-3mruwjqw83] {
    background: #dc2626;
}

.tc-legend-dot.tc-priority-normal[b-3mruwjqw83] {
    background: #f59e0b;
}

.tc-legend-dot.tc-priority-low[b-3mruwjqw83] {
    background: #9ca3af;
}

.ticket-calendar-loading[b-3mruwjqw83] {
    padding: 24px;
    text-align: center;
    color: #6c757d;
    font-size: 0.9rem;
}

[b-3mruwjqw83] .ticket-calendar-scheduler {
    flex: 1;
    border-radius: 1rem;
    border: 1px solid #e5e7eb;
    box-shadow: 0 10px 30px rgba(15, 23, 42, 0.06);
    overflow: hidden;
    height: 100%;
}

/* Bloki appointmentów */
[b-3mruwjqw83] .tc-appt-block {
    width: 100%;
    padding: 1px 5px;
    border-radius: 4px;
    cursor: pointer;
    overflow: hidden;
    white-space: nowrap;
    text-overflow: ellipsis;
}

[b-3mruwjqw83] .tc-appt-label {
    font-size: 0.75rem;
    font-weight: 600;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

/* Kolory wg priorytetu */
[b-3mruwjqw83] .tc-priority-critical {
    background: #fce7f3;
    color: #9d174d;
    border-left: 3px solid #be185d;
}

[b-3mruwjqw83] .tc-priority-high {
    background: #fee2e2;
    color: #dc2626;
    border-left: 3px solid #dc2626;
}

[b-3mruwjqw83] .tc-priority-normal {
    background: #fef3c7;
    color: #b45309;
    border-left: 3px solid #f59e0b;
}

[b-3mruwjqw83] .tc-priority-low {
    background: #f3f4f6;
    color: #6b7280;
    border-left: 3px solid #9ca3af;
}

/* Tooltip */
.tc-tooltip-header[b-3mruwjqw83] {
    padding: 6px 12px;
    border-radius: 4px 4px 0 0;
    font-weight: 700;
    font-size: 0.85rem;
}

.tc-tooltip-body[b-3mruwjqw83] {
    padding: 8px 12px;
    display: flex;
    flex-direction: column;
    gap: 4px;
}

.tc-tooltip-subject[b-3mruwjqw83] {
    font-weight: 600;
    font-size: 0.85rem;
    color: #1e293b;
}

.tc-tooltip-due[b-3mruwjqw83] {
    font-size: 0.78rem;
    color: #64748b;
}

.tc-tooltip-btn[b-3mruwjqw83] {
    margin-top: 6px;
    padding: 4px 10px;
    border: none;
    border-radius: 6px;
    background: #3b82f6;
    color: #fff;
    font-size: 0.78rem;
    cursor: pointer;
    align-self: flex-start;
}

    .tc-tooltip-btn:hover[b-3mruwjqw83] {
        background: #2563eb;
    }
/* /Components/Pages/Tickets/Tickets.razor.rz.scp.css */
/* === Kolumna strony ===
   Toolbar (i filtr produktów, gdy rozwinięty) plus plansza w jednej kolumnie o wysokości
   obszaru treści. Dzięki temu wysokość planszy nie jest zgadywana ze stałej „100vh minus
   pasek nawigacji plus toolbar” — plansza bierze dokładnie to, co po nich zostanie, a
   padding na dole zostawia margines między nią a krawędzią ekranu.
   100% odnosi się do obszaru treści layoutu (wiersz siatki o znanej wysokości); calc jest
   awaryjny, gdyby procent nie miał się do czego odnieść — 3.5rem to pasek nawigacji. */
.tickets-page[b-d38y0ghce7] {
    display: flex;
    flex-direction: column;
    box-sizing: border-box;
    height: calc(100dvh - 3.5rem);
    max-height: 100%;
    padding-bottom: 12px;
}

/* === Tickets board layout ===
   Szerokości bocznych kolumn w zmiennych — zwijanie podmienia samą zmienną, więc nie
   trzeba wypisywać siatki dla każdej kombinacji (widoki / lista / obie zwinięte). */
.tickets-board[b-d38y0ghce7] {
    /* Szerokość ustawiona myszą siedzi w OSOBNEJ zmiennej (--col-views-user), a nie wprost
       w --col-views: wartość z JS-a ląduje w stylu inline, a ten wygrałby z regułą zwijania
       i zwinięta kolumna zostałaby szeroka. Tak zwijanie nadal podmienia --col-views, a
       szerokość użytkownika wraca po rozwinięciu. */
    --col-views: var(--col-views-user, 280px);
    --col-list: var(--col-list-user, 360px);
    display: grid;
    /* Ścieżki po 12px między kolumnami to dawna przerwa (gap) — teraz siedzą w nich uchwyty
       zmiany szerokości, więc łapie się je dokładnie tam, gdzie kończy się jedna kolumna. */
    grid-template-columns: var(--col-views) 12px var(--col-list) 12px 1fr;
    gap: 0;
    /* Baza 0, więc plansza nigdy nie rozpycha kolumny strony — dostaje resztę miejsca. */
    flex: 1 1 0;
    min-height: 500px;
    border-radius: 12px;
    margin-top: 6px;
}

.tickets-board .col[b-d38y0ghce7] {
    /* Bez tego kolumna 1fr (szczegóły) nie zejdzie poniżej szerokości swojej treści i szeroko
       rozciągnięta lista wypchnęłaby planszę poza ekran. */
    min-width: 0;
    background: #fff;
    border: 1px solid #e6e8ee;
    border-radius: 8px;
    display: flex;
    flex-direction: column;
    overflow: hidden;
}

.tickets-board .col-header[b-d38y0ghce7] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 12px 14px;
    border-bottom: 1px solid #eef0f4;
    font-weight: 600;
    color: #1f2937;
}

.tickets-board .col-header .sub[b-d38y0ghce7] {
    font-size: 12px;
    color: #6b7280;
    font-weight: 400;
}

.tickets-board .col-body[b-d38y0ghce7] {
    flex: 1 1 auto;
    overflow-y: auto;
}

/* === Zwijanie kolumn (widoki, lista zgłoszeń) ===
   Zwinięta kolumna zostaje wąskim paskiem (40px), a zwolnione miejsce bierze panel
   szczegółów — to jedyna kolumna na 1fr. Treść kolumny chowa się CSS-em, nie warunkiem
   w markupie: dzięki temu pozycja przewinięcia listy przeżywa zwinięcie i rozwinięcie. */
.tickets-board.views-collapsed[b-d38y0ghce7] {
    --col-views: 40px;
}

.tickets-board.list-collapsed[b-d38y0ghce7] {
    --col-list: 40px;
}

/* === Uchwyty zmiany szerokości kolumn ===
   Pasek wypełnia całą ścieżkę siatki (łatwo trafić), ale widoczna jest tylko kreska w środku
   — i to dopiero pod kursorem, żeby w spoczynku plansza wyglądała jak wcześniej. */
.col-resizer[b-d38y0ghce7] {
    position: relative;
    cursor: col-resize;
    touch-action: none;
    border-radius: 3px;
}

    .col-resizer[b-d38y0ghce7]::before {
        content: "";
        position: absolute;
        top: 8px;
        bottom: 8px;
        left: 50%;
        width: 3px;
        transform: translateX(-50%);
        border-radius: 3px;
        background: transparent;
        transition: background-color .12s ease;
    }

    .col-resizer:hover[b-d38y0ghce7]::before,
    .col-resizer:focus-visible[b-d38y0ghce7]::before,
    .col-resizer.resizing[b-d38y0ghce7]::before {
        background: #93a3c0;
    }

    .col-resizer:focus-visible[b-d38y0ghce7] {
        outline: none;
    }

/* Zwinięta kolumna ma stałe 40px — nie ma czego przeciągać, więc uchwyt znika
   (ścieżka 12px zostaje i pracuje jak zwykła przerwa między kolumnami).
   NIE display: none — element wypadłby z auto-rozmieszczenia siatki i każda kolejna
   kolumna przesunęłaby się o jedną ścieżkę (lista w 12px, szczegóły w 12px, 1fr puste). */
.tickets-board.views-collapsed .col-resizer-views[b-d38y0ghce7],
.tickets-board.list-collapsed .col-resizer-list[b-d38y0ghce7] {
    visibility: hidden;
    pointer-events: none;
}

.col-collapse[b-d38y0ghce7] {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex: 0 0 auto;
    width: 24px;
    height: 24px;
    margin-left: auto;
    padding: 0;
    border: none;
    border-radius: 6px;
    background: transparent;
    color: #6b7280;
    cursor: pointer;
}

    .col-collapse:hover[b-d38y0ghce7] {
        background: #f3f4f6;
    }

/* Akcja nagłówka listy („Opróżnij kosz") — ten sam kształt co chevron zwijania obok,
   bo stoją w jednym rzędzie i wszystko inne wyglądałoby przy nim jak wstawka.
   Prawy margines automatyczny przenosi się TUTAJ, a chevron swój traci (reguła niżej):
   dwa auto-marginesy rozdzieliłyby wolne miejsce po równo i przycisk wylądowałby
   na środku nagłówka zamiast przy krawędzi. */
.col-header-action[b-d38y0ghce7] {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex: 0 0 auto;
    width: 24px;
    height: 24px;
    margin-left: auto;
    padding: 0;
    border: none;
    border-radius: 6px;
    background: transparent;
    color: #6b7280;
    cursor: pointer;
}

    /* Czerwień dopiero pod kursorem — operacja jest nieodwracalna, ale przycisk stoi
       w nagłówku, gdzie stała czerwona plama krzyczałaby na każdym wejściu do kosza. */
    .col-header-action:hover[b-d38y0ghce7] {
        background: #fdecea;
        color: #b42318;
    }

.col-header-action + .col-collapse[b-d38y0ghce7] {
    margin-left: 4px;
}

/* Etykieta paska — widoczna dopiero po zwinięciu, patrz reguły niżej. */
.col-collapsed-title[b-d38y0ghce7] {
    display: none;
}

.tickets-board.views-collapsed .col-views .col-header[b-d38y0ghce7],
.tickets-board.list-collapsed .col-list .col-header[b-d38y0ghce7] {
    justify-content: center;
    padding: 8px 4px;
}

    .tickets-board.views-collapsed .col-views .col-header > span[b-d38y0ghce7],
    .tickets-board.list-collapsed .col-list .col-header > span[b-d38y0ghce7] {
        display: none;
    }

.tickets-board.views-collapsed .col-views .col-collapse[b-d38y0ghce7],
.tickets-board.list-collapsed .col-list .col-collapse[b-d38y0ghce7] {
    margin-left: 0;
}

/* W zwiniętym pasku (40px) mieści się sam chevron — akcja nagłówka znika razem z tytułem.
   Kosz opróżnia się z rozwiniętej listy, gdzie widać, co się kasuje. */
.tickets-board.list-collapsed .col-list .col-header-action[b-d38y0ghce7] {
    display: none;
}

.tickets-board.views-collapsed .col-views .col-body[b-d38y0ghce7],
.tickets-board.list-collapsed .col-list .col-body[b-d38y0ghce7] {
    display: none;
}

.tickets-board.views-collapsed .col-views .col-collapsed-title[b-d38y0ghce7],
.tickets-board.list-collapsed .col-list .col-collapsed-title[b-d38y0ghce7] {
    display: flex;
    align-items: center;
    justify-content: center;
    flex: 1 1 auto;
    padding: 8px 0;
    /* Obrót o 180° po vertical-rl: tekst biegnie z dołu do góry, czyli tak, jak czyta się
       pionowe zakładki — bez tego litery „wchodzą" w głąb ekranu. */
    writing-mode: vertical-rl;
    transform: rotate(180deg);
    font-size: 12px;
    font-weight: 600;
    color: #6b7280;
    white-space: nowrap;
    overflow: hidden;
    cursor: pointer;
    user-select: none;
}

/* === Przełącznik zakresu: moje / wszyscy ===
   Stoi NAD listą widoków, bo nakłada się na każdą zakładkę — kolejna pozycja na liście
   sugerowałaby, że to siódmy filtr obok pozostałych.
   Dwa równe tory (1fr 1fr), a nie auto: nazwy mają różną długość, więc przy `auto` aktywny
   segment skakałby na szerokość po każdym przełączeniu. */
.views-scope[b-d38y0ghce7] {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 2px;
    margin: 6px 6px 0;
    padding: 2px;
    border-radius: 8px;
    background: #f3f4f6;
}

.views-scope .scope-btn[b-d38y0ghce7] {
    appearance: none;
    border: 0;
    background: transparent;
    border-radius: 6px;
    padding: 6px 8px;
    font-size: 12px;
    font-weight: 600;
    line-height: 1.4;
    color: #6b7280;
    cursor: pointer;
    /* Ikona + etykieta w jednym rzędzie, wyśrodkowane w segmencie. */
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 6px;
    min-width: 0;
}

/* Ikona zostaje zawsze — to ona odróżnia segmenty, gdy w wąskiej kolumnie etykieta zostanie
   przycięta. Dlatego kurczy się WYŁĄCZNIE tekst (flex-shrink: 0 na ikonie). */
.views-scope .scope-btn > .icon-bs-black-xsmall[b-d38y0ghce7] {
    flex-shrink: 0;
}

.views-scope .scope-btn-text[b-d38y0ghce7] {
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.views-scope .scope-btn:hover[b-d38y0ghce7] {
    color: #374151;
}

/* Aktywny segment w tej samej palecie co aktywna zakładka niżej (`.view-item.active`) —
   „gdzie jestem" ma wyglądać tak samo w obu miejscach. */
.views-scope .scope-btn.active[b-d38y0ghce7] {
    background: #fff;
    color: #c2410c;
    box-shadow: 0 1px 2px rgba(15, 23, 42, 0.08);
}

/* === Views (lewa kolumna) === */
.views-list[b-d38y0ghce7] {
    padding: 6px;
    display: flex;
    flex-direction: column;
    gap: 2px;
}

.views-list .view-item[b-d38y0ghce7] {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 10px 12px;
    border-radius: 6px;
    cursor: pointer;
    color: #374151;
    user-select: none;
}

.views-list .view-item:hover[b-d38y0ghce7] {
    background: #f3f4f6;
}

.views-list .view-item.active[b-d38y0ghce7] {
    background: #fff7ed;
    color: #c2410c;
}

.views-list .view-item .v-icon[b-d38y0ghce7] {
    width: 28px;
    height: 28px;
    border-radius: 6px;
    background: #f3f4f6;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    color: #6b7280;
    flex: 0 0 28px;
}

.views-list .view-item.active .v-icon[b-d38y0ghce7] {
    background: #ffedd5;
    color: #c2410c;
}

.views-list .view-item .v-text[b-d38y0ghce7] {
    display: flex;
    flex-direction: column;
    line-height: 1.15;
    flex: 1 1 auto;
    min-width: 0;
}

.views-list .view-item .v-text .v-title[b-d38y0ghce7] {
    font-weight: 600;
    font-size: 13px;
}

.views-list .view-item .v-text .v-sub[b-d38y0ghce7] {
    font-size: 11px;
    color: #6b7280;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.views-list .view-item .v-count[b-d38y0ghce7] {
    background: #e5e7eb;
    color: #374151;
    font-size: 11px;
    font-weight: 600;
    /* 8px — wspólny promień zaokrągleń w aplikacji (jak chipy gotowych odpowiedzi). */
    border-radius: 8px;
    padding: 1px 8px;
    min-width: 22px;
    text-align: center;
}

.views-list .view-item.active .v-count[b-d38y0ghce7] {
    background: #f97316;
    color: #fff;
}

/* === Tickets list (środek) === */
.tickets-list[b-d38y0ghce7] {
    display: flex;
    flex-direction: column;
    /* Kontener zapytań kontenerowych: linia 3 pyta o szerokość TEJ kolumny, nie okna —
       lista raz ma 360px, raz 320px, a poniżej 900px rozpycha się na całą stronę. */
    container-type: inline-size;
}

.tickets-list .ticket-item[b-d38y0ghce7] {
    padding: 12px 14px;
    border-bottom: 1px solid #f1f3f7;
    cursor: pointer;
    display: flex;
    flex-direction: column;
    gap: 4px;
}

.tickets-list .ticket-item:hover[b-d38y0ghce7] {
    background: #f8fafc;
}

.tickets-list .ticket-item.active[b-d38y0ghce7] {
    background: #fff7ed;
    border-left: 3px solid #f97316;
    padding-left: 11px;
}

.tickets-list .ticket-item .line1[b-d38y0ghce7] {
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: 6px;
}

/* === Linia 0: projekt ===
   Osobny wiersz NAD zgłaszającym — pastylka ma całą szerokość karty dla siebie, więc nie
   walczy o miejsce z nazwiskiem ani numerem i mieści dłuższe nazwy projektów. Wiersz
   pojawia się tylko przy zgłoszeniach podpiętych pod projekt (warunek w Tickets.razor),
   dlatego nie ma tu nic, co rezerwowałoby wysokość na zapas. */
.tickets-list .ticket-item .line0[b-d38y0ghce7] {
    display: flex;
    align-items: center;
    min-width: 0;
}

/* ::deep, bo pastylka to osobny komponent (ProjectTag) — bez tego reguła dostałaby atrybut
   zakresu TEGO pliku i nie trafiłaby w nic. Cała szerokość wiersza, a nadmiar i tak ucina
   wielokropek w samym komponencie. */
.tickets-list .ticket-item .line0[b-d38y0ghce7]  .project-tag {
    max-width: 100%;
}

/* Osoba zgłaszająca: okrągły awatar z inicjałami w kolorze grupy — ten sam element co na
   kartach Kanbana (kolor liczy TicketVisuals). Kółko, bo oznacza człowieka. */
.tickets-list .ticket-item .tl-person[b-d38y0ghce7] {
    display: inline-flex;
    align-items: center;
    gap: 7px;
    min-width: 0;
}

.tl-avatar[b-d38y0ghce7] {
    width: 22px;
    height: 22px;
    border-radius: 50%;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    font-size: 10px;
    font-weight: 700;
    line-height: 1;
    color: #fff;
    letter-spacing: 0.02em;
}

.tickets-list .ticket-item .author[b-d38y0ghce7] {
    font-weight: 600;
    color: #111827;
    font-size: 13px;
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.tickets-list .ticket-item .number[b-d38y0ghce7] {
    font-size: 12px;
    color: #6b7280;
    flex-shrink: 0;
}

/* Wiersz z tytułem: tytuł zajmuje resztę szerokości i łamie się do DWÓCH linii z
   wielokropkiem, liczniki stoją obok jako osobny element — dlatego tekst nigdy nie wchodzi
   pod nie. min-width: 0 jest konieczne, żeby długi tytuł mógł się skrócić, a nie rozepchać. */
.tickets-list .ticket-item .line2[b-d38y0ghce7] {
    display: flex;
    align-items: flex-start;
    gap: 8px;
}

.tickets-list .ticket-item .subject[b-d38y0ghce7] {
    font-size: 13px;
    line-height: 1.35;
    color: #374151;
    flex: 1 1 auto;
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    /* Temat bez spacji (jeden długi ciąg z maila) nie miał gdzie się złamać i zajmował
       jedną uciętą linijkę zamiast dozwolonych dwóch. */
    overflow-wrap: anywhere;
    word-break: break-word;
}

.tickets-list .ticket-item .line2 .ticket-badges[b-d38y0ghce7] {
    display: flex;
    align-items: center;
    gap: 4px;
    flex-shrink: 0;
}

.tickets-list .ticket-item .line2 .ticket-badge[b-d38y0ghce7] {
    display: inline-flex;
    align-items: center;
    gap: 2px;
    font-size: 11px;
    color: #6b7280;
    white-space: nowrap;
}

/* === Linia 3: priorytet | status | faktura | data ===
   Siatka, nie flex: przy flexie każdy element startował tam, gdzie skończył się poprzedni,
   więc dłuższy status („Oczekuje – Wsparcie") przesuwał fakturę i datę, a w ciasnym wierszu
   data łamała się na dwie linijki. Tory mają stałe udziały (ułamki i piksele, nigdy auto) —
   każdy .line3 to osobna siatka, więc tylko szerokość niezależna od treści daje ten sam
   podział we wszystkich wierszach. Pusty tor w wierszu bez faktury jest zamierzony: to on
   trzyma kolumnę. */
.tickets-list .ticket-item .line3[b-d38y0ghce7] {
    display: grid;
    grid-template-columns: 13px minmax(0, 1fr) 14px max-content;
    align-items: center;
    column-gap: 8px;
    font-size: 11px;
    color: #6b7280;
}

.tickets-list .ticket-item .line3 .tl-prio[b-d38y0ghce7] {
    grid-column: 1;
}

.tickets-list .ticket-item .line3 .status-tag[b-d38y0ghce7] {
    grid-column: 2;
}

.tickets-list .ticket-item .line3 .invoice-tag[b-d38y0ghce7] {
    grid-column: 3;
}

/* Data zawsze w ostatnim torze — także wtedy, gdy toru faktury w ogóle nie ma. */
.tickets-list .ticket-item .line3 .date[b-d38y0ghce7] {
    grid-column: -2 / -1;
    justify-self: end;
    font-weight: 500;
    color: #374151;
    display: inline-flex;
    align-items: center;
    gap: 4px;
    white-space: nowrap;
    font-variant-numeric: tabular-nums;
}

/* Wąska lista (domyślne 360/320 px kolumny) nie pomieści dwóch pełnych etykiet obok daty,
   więc faktura zostaje samą ikoną paragonu — kolor i tak niesie stan, a pełna nazwa jest
   w tooltipie. Tor 14 px, żeby ikona stała w tym samym miejscu w każdym wierszu. */
.tickets-list .ticket-item .line3 .invoice-tag .tag-text[b-d38y0ghce7] {
    display: none;
}

/* Gdy lista dostanie miejsce (układ jednokolumnowy poniżej 900 px, szerszy ekran) —
   etykieta faktury wraca i dostaje własny, równy tor. */
@container (min-width: 430px) {
    .tickets-list .ticket-item .line3[b-d38y0ghce7] {
        grid-template-columns: 13px minmax(0, 1fr) minmax(0, 1fr) max-content;
    }

    .tickets-list .ticket-item .line3 .invoice-tag .tag-text[b-d38y0ghce7] {
        display: block;
    }
}

/* Klient nie ma ani priorytetu, ani stanu faktury — bez pustych torów status dostaje ich
   miejsce, a data zostaje na końcu. */
.tickets-list.no-invoice-col .ticket-item .line3[b-d38y0ghce7] {
    grid-template-columns: minmax(0, 1fr) max-content;
}

.tickets-list.no-invoice-col .ticket-item .line3 .status-tag[b-d38y0ghce7] {
    grid-column: 1;
}

/* Za długa etykieta przycina się wielokropkiem zamiast rozpychać tor. */
.tickets-list .ticket-item .line3 .status-tag[b-d38y0ghce7],
.tickets-list .ticket-item .line3 .invoice-tag[b-d38y0ghce7] {
    min-width: 0;
    overflow: hidden;
}

.tickets-list .ticket-item .line3 .tag-text[b-d38y0ghce7] {
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

/* Ikona kalendarza przy dacie — maska na czarnym SVG, jak na kartach Kanbana (bierze
   currentColor, więc chodzi za kolorem tekstu i w motywie ciemnym też). */
.tl-date-icon[b-d38y0ghce7] {
    width: 11px;
    height: 11px;
    display: block;
    flex-shrink: 0;
    background-color: currentColor;
    -webkit-mask: url('/images/bootstrap-icons/calendar-event.svg') no-repeat center / contain;
    mask: url('/images/bootstrap-icons/calendar-event.svg') no-repeat center / contain;
}

/* Strzałka priorytetu zamiast kropki — dokładnie ta sama ikona i paleta co na kartach
   Kanbana; kolor wstrzykuje komponent inline z TicketVisuals.PriorityColor. */
.tl-prio[b-d38y0ghce7] {
    width: 13px;
    height: 13px;
    display: inline-block;
    flex-shrink: 0;
}

.tl-prio-critical[b-d38y0ghce7] {
    -webkit-mask: url('/images/bootstrap-icons/chevron-double-up.svg') no-repeat center / contain;
    mask: url('/images/bootstrap-icons/chevron-double-up.svg') no-repeat center / contain;
}

.tl-prio-high[b-d38y0ghce7] {
    -webkit-mask: url('/images/bootstrap-icons/chevron-up.svg') no-repeat center / contain;
    mask: url('/images/bootstrap-icons/chevron-up.svg') no-repeat center / contain;
}

.tl-prio-normal[b-d38y0ghce7] {
    -webkit-mask: url('/images/bootstrap-icons/dash.svg') no-repeat center / contain;
    mask: url('/images/bootstrap-icons/dash.svg') no-repeat center / contain;
}

.tl-prio-low[b-d38y0ghce7] {
    -webkit-mask: url('/images/bootstrap-icons/chevron-down.svg') no-repeat center / contain;
    mask: url('/images/bootstrap-icons/chevron-down.svg') no-repeat center / contain;
}

/* === Źródło zgłoszenia ===
   Ikona zamiast etykiety, tuż przed statusem w PANELU SZCZEGÓŁÓW obok listy — kształt mówi,
   którędy sprawa weszła (koperta, słuchawka…). W samych wierszach listy ikony celowo nie ma:
   wiersz jest ciasny, a ikona przy strzałce priorytetu czytała się jak druga, obca akcja.
   Maska na czarnym SVG w currentColor, jak ikona kalendarza przy dacie: chodzi za kolorem
   tekstu, więc motyw ciemny nie potrzebuje osobnej reguły. Sufiks klasy daje
   TicketVisuals.SourceIconSuffix. */
.tl-source[b-d38y0ghce7] {
    width: 13px;
    height: 13px;
    display: inline-block;
    flex-shrink: 0;
    background-color: currentColor;
}

.tl-source-manual[b-d38y0ghce7] {
    -webkit-mask: url('/images/bootstrap-icons/pencil.svg') no-repeat center / contain;
    mask: url('/images/bootstrap-icons/pencil.svg') no-repeat center / contain;
}

.tl-source-email[b-d38y0ghce7] {
    -webkit-mask: url('/images/bootstrap-icons/envelope.svg') no-repeat center / contain;
    mask: url('/images/bootstrap-icons/envelope.svg') no-repeat center / contain;
}

.tl-source-chat[b-d38y0ghce7] {
    -webkit-mask: url('/images/bootstrap-icons/chat-left-text.svg') no-repeat center / contain;
    mask: url('/images/bootstrap-icons/chat-left-text.svg') no-repeat center / contain;
}

.tl-source-phone[b-d38y0ghce7] {
    -webkit-mask: url('/images/bootstrap-icons/telephone.svg') no-repeat center / contain;
    mask: url('/images/bootstrap-icons/telephone.svg') no-repeat center / contain;
}

.tl-source-hubapi[b-d38y0ghce7] {
    -webkit-mask: url('/images/bootstrap-icons/plug.svg') no-repeat center / contain;
    mask: url('/images/bootstrap-icons/plug.svg') no-repeat center / contain;
}

.tl-source-systemerror[b-d38y0ghce7] {
    -webkit-mask: url('/images/bootstrap-icons/exclamation-triangle.svg') no-repeat center / contain;
    mask: url('/images/bootstrap-icons/exclamation-triangle.svg') no-repeat center / contain;
}

.tl-source-ai[b-d38y0ghce7] {
    -webkit-mask: url('/images/bootstrap-icons/stars.svg') no-repeat center / contain;
    mask: url('/images/bootstrap-icons/stars.svg') no-repeat center / contain;
}

/* Ikona źródła w panelu szczegółów — ten sam rytm co strzałka priorytetu obok. */
.details-panel .d-source[b-d38y0ghce7] {
    display: inline-flex;
    align-items: center;
}

.tickets-list .ticket-item .line3 .last-msg[b-d38y0ghce7] {
    font-size: 10px;
    text-transform: uppercase;
    letter-spacing: .04em;
    color: #9ca3af;
}

/* === Status ===
   Bez tła i obwódki: kropka w kolorze statusu plus nazwa — dokładnie jak nagłówek kolumny na
   tablicy Kanban. Kolor kropki wstrzykuje komponent z TicketVisuals.StatusColor, dlatego nie
   ma tu klas per status (i nie może się rozjechać z paletą tablicy). */
.status-tag[b-d38y0ghce7] {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    font-size: 11px;
    font-weight: 600;
    line-height: 1.4;
    color: #374151;
    white-space: nowrap;
}

.status-tag-dot[b-d38y0ghce7] {
    width: 7px;
    height: 7px;
    border-radius: 2px;
    display: inline-block;
    flex-shrink: 0;
}

/* === Faktura ===
   Ta sama waga i ten sam rytm co status obok, ale ikonka paragonu zamiast kropki — dwie
   pastylki w jednej linii muszą się różnić kształtem, nie tylko kolorem. Kolor ikony
   wstrzykuje komponent inline z TicketVisuals.InvoiceStatusColor. */
.invoice-tag[b-d38y0ghce7] {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    font-size: 11px;
    font-weight: 600;
    line-height: 1.4;
    color: #374151;
    white-space: nowrap;
}

.invoice-tag-icon[b-d38y0ghce7] {
    width: 12px;
    height: 12px;
    display: inline-block;
    flex-shrink: 0;
    -webkit-mask: url('/images/bootstrap-icons/receipt.svg') no-repeat center / contain;
    mask: url('/images/bootstrap-icons/receipt.svg') no-repeat center / contain;
}

/* Priorytet w panelu szczegółów — strzałka plus nazwa. */
.details-panel .d-prio[b-d38y0ghce7] {
    display: inline-flex;
    align-items: center;
    gap: 6px;
}

/* === Details (prawa kolumna) === */
.details-panel[b-d38y0ghce7] {
    padding: 16px 18px;
    display: flex;
    flex-direction: column;
    gap: 14px;
    overflow-y: auto;
    flex: 1 1 auto;
}

/* Pasek „masz tu niewysłaną odpowiedź". Stoi NAD tematem, w kolorze akcentu — ma być
   pierwszą rzeczą, którą widać po zaznaczeniu zgłoszenia, bo mówi o czymś, co czeka na
   dokończenie. Ta sama pomarańczowa paleta co aktywna zakładka po lewej. */
.details-panel .d-draft-banner[b-d38y0ghce7] {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 8px 12px;
    border-radius: 8px;
    background: #fff7ed;
    border: 1px solid #fed7aa;
    color: #c2410c;
    font-size: 13px;
}

.details-panel .d-draft-banner .d-draft-text[b-d38y0ghce7] {
    flex: 1 1 auto;
    min-width: 0;
}

/* Tytuł zawija się w panelu, zamiast z niego wyjeżdżać. Bez overflow-wrap temat będący
   jednym długim ciągiem bez spacji nie miał gdzie się złamać i rozpychał całą kolumnę. */
.details-panel .d-title[b-d38y0ghce7] {
    font-size: 18px;
    font-weight: 600;
    color: #111827;
    min-width: 0;
    overflow-wrap: anywhere;
    word-break: break-word;
}

.details-panel .d-meta[b-d38y0ghce7] {
    display: flex;
    gap: 12px;
    flex-wrap: wrap;
    font-size: 12px;
    color: #6b7280;
}

.details-panel .d-section[b-d38y0ghce7] {
    background: #fff;
    border: 1px solid #eef0f4;
    border-radius: 6px;
    padding: 10px 12px;
    font-size: 12.5px;
    color: #1f2937;
    line-height: 1.4;
}

.details-panel .d-section > div[b-d38y0ghce7] {
    font-size: 12.5px;
}

.details-panel .d-grid-2[b-d38y0ghce7] {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 14px;
}

.details-panel .d-grid-2 .d-section[b-d38y0ghce7] {
    min-width: 0;
}

.details-panel .d-grid-3[b-d38y0ghce7] {
    display: grid;
    grid-template-columns: 1fr 1fr 1fr;
    gap: 14px;
}

.details-panel .d-grid-3 .d-section[b-d38y0ghce7] {
    min-width: 0;
}

.details-panel .d-section h4[b-d38y0ghce7] {
    margin: 0 0 8px;
    font-size: 12px;
    color: #6b7280;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: .04em;
}

/* Pozycja listy kont w polu „Odpowiedzialni” — nazwisko wytłuszczone, adres obok wyszarzony.
   Ta sama pozycja co na liście zgłaszających w szczegółach zgłoszenia (Detail.razor.css);
   izolacja CSS nie pozwala tej reguły współdzielić, więc stoi w obu plikach. */
.participant-option[b-d38y0ghce7] {
    display: flex;
    align-items: baseline;
    gap: 0.25rem;
}

/* === Osoby na kartach panelu (zgłaszający, odpowiedzialni) ===
   Kulka z inicjałami ta sama co na liście (.tl-avatar) i na Kanbanie (.kanban-avatar) —
   ten sam rozmiar, ten sam krój, kolor z grupy osoby. Wartości powtórzone, bo izolacja
   CSS nie pozwala tych reguł współdzielić; zmienia się je we wszystkich trzech naraz. */
.details-panel .d-person[b-d38y0ghce7] {
    display: flex;
    align-items: center;
    gap: 7px;
    min-width: 0;
}

.details-panel .d-avatar[b-d38y0ghce7] {
    width: 22px;
    height: 22px;
    border-radius: 50%;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    font-size: 10px;
    font-weight: 700;
    line-height: 1;
    color: #fff;
    letter-spacing: 0.02em;
}

/* Dopisani są drugoplanowi — mniejsza kulka odróżnia ich od osoby głównej bez podpisu. */
.details-panel .d-avatar-sm[b-d38y0ghce7] {
    width: 18px;
    height: 18px;
    font-size: 9px;
}

.details-panel .d-person-name[b-d38y0ghce7] {
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.details-panel .d-person-mail[b-d38y0ghce7] {
    margin-top: 3px;
    padding-left: 29px;
    font-size: 11.5px;
    color: #6b7280;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

/* Dopisani jeden pod drugim, a nie w rzędzie nachodzących kulek: karta ma 1/3 szerokości
   panelu, więc same kulki z tooltipem znaczyłyby „najedź, żeby dowiedzieć się kto" —
   w szczegółach jest miejsce, żeby po prostu napisać. */
.details-panel .d-people[b-d38y0ghce7] {
    display: flex;
    flex-direction: column;
    gap: 4px;
    margin-top: 8px;
    padding-top: 8px;
    border-top: 1px solid #eef0f4;
    min-width: 0;
}

.details-panel .d-people-label[b-d38y0ghce7] {
    font-size: 10.5px;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: .04em;
    color: #9ca3af;
}

.details-panel .d-person-chip[b-d38y0ghce7] {
    display: flex;
    align-items: center;
    gap: 6px;
    min-width: 0;
}

.details-panel .d-person-extra[b-d38y0ghce7] {
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    color: #4b5563;
}

.details-panel .d-actions[b-d38y0ghce7] {
    display: flex;
    gap: 8px;
    margin-top: 6px;
    flex-wrap: wrap;
}

.tickets-board .col-header .d-actions[b-d38y0ghce7] {
    margin-top: 0;
}

.details-empty[b-d38y0ghce7] {
    flex: 1 1 auto;
    display: flex;
    align-items: center;
    justify-content: center;
    color: #9ca3af;
    font-size: 13px;
}

.tickets-toolbar[b-d38y0ghce7] {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 8px 4px 0 4px;
}

@media (max-width: 1200px) {
    /* Same zmienne — reguły zwijania (0,2,0) nadal wygrywają nad tą deklaracją. */
    .tickets-board[b-d38y0ghce7] {
        --col-views: var(--col-views-user, 220px);
        --col-list: var(--col-list-user, 320px);
    }
}

@media (max-width: 900px) {
    /* Układ jednokolumnowy: strona rośnie z treścią, a nie do wysokości ekranu —
       lista i szczegóły ustawione jedno pod drugim nie zmieściłyby się na jednym ekranie. */
    .tickets-page[b-d38y0ghce7] {
        height: auto;
        max-height: none;
    }

    .tickets-board[b-d38y0ghce7] {
        grid-template-columns: 1fr;
        gap: 12px;
        flex: 0 0 auto;
    }

    /* Jedna kolumna na całą szerokość — nie ma sąsiada, któremu można oddać piksele. */
    .col-resizer[b-d38y0ghce7] {
        display: none;
    }

    /* Jedna kolumna — zwinięcie nie ma czego poszerzyć, a schowałoby treść bez zysku.
       Dlatego na wąskim ekranie kolumny wracają do pełnej postaci, a chevrony znikają. */
    .tickets-board.views-collapsed .col-views .col-body[b-d38y0ghce7],
    .tickets-board.list-collapsed .col-list .col-body[b-d38y0ghce7] {
        display: block;
    }

    .tickets-board.views-collapsed .col-views .col-header[b-d38y0ghce7],
    .tickets-board.list-collapsed .col-list .col-header[b-d38y0ghce7] {
        justify-content: space-between;
        padding: 12px 14px;
    }

        .tickets-board.views-collapsed .col-views .col-header > span[b-d38y0ghce7],
        .tickets-board.list-collapsed .col-list .col-header > span[b-d38y0ghce7] {
            display: inline;
        }

    .tickets-board.views-collapsed .col-views .col-collapsed-title[b-d38y0ghce7],
    .tickets-board.list-collapsed .col-list .col-collapsed-title[b-d38y0ghce7] {
        display: none;
    }

    .col-collapse[b-d38y0ghce7] {
        display: none;
    }
}

[b-d38y0ghce7] .tickets-toolbar-search {
    min-width: 220px;
}

/* === Ostatnie wiadomości w panelu szczegółów === */
.details-panel .d-messages[b-d38y0ghce7] {
    background: #fff;
}

.d-msg-empty[b-d38y0ghce7] {
    font-size: 12px;
    color: #9ca3af;
    padding: 6px 0;
}

/* ===== Zakładki panelu: opis / ostatnie wiadomości / załączniki =====
   Ten sam wzór co na tablicy automatyzacji (.ab-tabs): podkreślenie aktywnej zamiast
   ramek, bo panel jest wąski i pudełka zabierałyby w nim za dużo miejsca. */
.details-panel .d-tabs[b-d38y0ghce7] {
    display: flex;
    gap: 4px;
    border-bottom: 1px solid #eef0f2;
}

.details-panel .d-tab[b-d38y0ghce7] {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 6px 12px;
    border: 0;
    border-bottom: 2px solid transparent;
    background: transparent;
    color: #6b7280;
    font: inherit;
    font-size: 13px;
    cursor: pointer;
    white-space: nowrap;
}

.details-panel .d-tab:hover[b-d38y0ghce7] {
    color: #1f2937;
}

.details-panel .d-tab.is-active[b-d38y0ghce7] {
    color: #9a3412;
    border-bottom-color: #f97316;
    font-weight: 600;
}

/* Liczba załączników przy zakładce — po niej widać, czy warto tam w ogóle zaglądać,
   bez klikania. Przy zerze pastylki nie ma (patrz warunek w znaczniku). */
.details-panel .d-tab-count[b-d38y0ghce7] {
    min-width: 18px;
    padding: 0 5px;
    border-radius: 9px;
    background: #f3f4f6;
    color: #4b5563;
    font-size: 11px;
    font-weight: 600;
    line-height: 18px;
    text-align: center;
}

.details-panel .d-tab.is-active .d-tab-count[b-d38y0ghce7] {
    background: #ffedd5;
    color: #c2410c;
}

/* ===== Załączniki w panelu ===== */

.details-panel .d-attachment-list[b-d38y0ghce7] {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: 8px;
}

.details-panel .d-attachment[b-d38y0ghce7] {
    display: flex;
    align-items: center;
    gap: 10px;
    min-width: 0;
}

/* Miniatura jest PRZYCISKIEM (otwiera podgląd), więc zdejmujemy z niej domyślny
   wygląd <button>: obramowanie, tło i krój pisma. */
.details-panel .d-attachment-thumb[b-d38y0ghce7] {
    width: 40px;
    height: 40px;
    flex: 0 0 auto;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 0;
    overflow: hidden;
    border: 1px solid #e5e7eb;
    border-radius: 6px;
    background: #f9fafb;
    color: #6b7280;
    cursor: pointer;
}

.details-panel .d-attachment-thumb:hover[b-d38y0ghce7] {
    border-color: #f97316;
}

.details-panel .d-attachment-thumb img[b-d38y0ghce7] {
    width: 100%;
    height: 100%;
    object-fit: cover;
}

.details-panel .d-attachment-meta[b-d38y0ghce7] {
    display: flex;
    flex-direction: column;
    flex: 1 1 auto;
    min-width: 0;
}

/* Strzałka „na dysk" — blada, dopóki nie najedzie się na wiersz: pierwszym ruchem ma być
   podgląd (miniatura i nazwa), pobranie to droga na skróty. Na dotyku :hover nie istnieje,
   więc tam zostaje widoczna na stałe. */
.details-panel .d-attachment-dl[b-d38y0ghce7] {
    flex: 0 0 auto;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 26px;
    height: 26px;
    border-radius: 6px;
    color: #6b7280;
    text-decoration: none;
    opacity: 0;
    transition: opacity 0.12s ease, background-color 0.12s ease;
}

.details-panel .d-attachment:hover .d-attachment-dl[b-d38y0ghce7],
.details-panel .d-attachment-dl:focus-visible[b-d38y0ghce7] {
    opacity: 1;
}

.details-panel .d-attachment-dl:hover[b-d38y0ghce7] {
    background: #ffedd5;
}

.details-panel .d-attachment-dl:focus-visible[b-d38y0ghce7] {
    outline: 2px solid #f97316;
    outline-offset: 1px;
}

@media (hover: none) {
    .details-panel .d-attachment-dl[b-d38y0ghce7] {
        opacity: 1;
    }
}

.details-panel .d-attachment-name[b-d38y0ghce7] {
    padding: 0;
    border: none;
    background: none;
    font: inherit;
    font-weight: 500;
    text-align: left;
    color: #1f2937;
    cursor: pointer;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.details-panel .d-attachment-name:hover[b-d38y0ghce7] {
    color: #f97316;
    text-decoration: underline;
}

.details-panel .d-attachment-info[b-d38y0ghce7] {
    font-size: 12px;
    color: #6b7280;
}

/* ===== Opis ===== */
.details-panel .d-summary-desc > div[b-d38y0ghce7] {
    overflow-wrap: anywhere;
    word-break: break-word;
}

/* Zwinięty opis — przycięcie wysokością, a nie liczbą linii jak w wiadomościach:
   opis z maila bywa tabelą, zrzutem ekranu albo stopką z ikonkami, a -webkit-line-clamp
   liczy linie tekstu i takiej treści nie przytnie. 400px to mniej więcej tyle, ile
   mieści się w panelu bez spychania metadanych i wiadomości poza ekran. */
.details-panel .d-summary-desc .d-desc-body.collapsed[b-d38y0ghce7] {
    max-height: 400px;
    overflow: hidden;
}

/* === Treść z maila nie ma prawa uciec z panelu ===
   Stopki maili potrafią pozycjonować swoje elementy absolutnie (ikonki social mediów).
   Taki element nie kotwiczy się w panelu, tylko w całej stronie — nie tnie go żaden
   overflow po drodze i rozciąga dokument: pusty pas pod planszą, strona dłuższa niż
   ekran, gdzieś na dole samotna ikonka Instagrama. Zwinięty opis to przycinał, po
   rozwinięciu wracało. Dlatego: opis i wiadomość są blokiem odniesienia, a wszystko,
   co w nich siedzi, wraca do przepływu — position: fixed łapie się tu tak samo. */
.details-panel .d-summary-desc .d-desc-body[b-d38y0ghce7],
.details-panel .d-msg-body[b-d38y0ghce7] {
    position: relative;
}

.details-panel .d-summary-desc .d-desc-body[b-d38y0ghce7]  *,
.details-panel .d-msg-body[b-d38y0ghce7]  * {
    position: static !important;
}

/* Opis wchodzi przez MarkupString, więc bez ::deep selektor nie trafia w nic (to samo co
   w Detail.razor.css). Obrazki i tabele z maili muszą mieścić się w wąskim panelu. */
.details-panel .d-summary-desc[b-d38y0ghce7]  img {
    max-width: 100%;
    height: auto;
    display: block;
    border-radius: 4px;
}

.details-panel .d-summary-desc[b-d38y0ghce7]  table {
    display: block;
    width: auto !important;
    max-width: 100%;
    overflow-x: auto;
    border-collapse: collapse;
    margin: 0.5rem 0;
    font-size: 0.8rem;
    line-height: 1.35;
}

    .details-panel .d-summary-desc[b-d38y0ghce7]  table th,
    .details-panel .d-summary-desc[b-d38y0ghce7]  table td {
        border: 1px solid #d0d7de;
        padding: 0.2rem 0.45rem;
        text-align: left;
        vertical-align: top;
        white-space: nowrap;
    }

    .details-panel .d-summary-desc[b-d38y0ghce7]  table th {
        background: #f3f4f6;
        font-weight: 600;
    }

/* ===== Zadania ticketa ===== */
.d-tasks-empty[b-d38y0ghce7] {
    font-size: 12px;
    color: #9ca3af;
    padding: 4px 0 8px;
}

.d-tasks-list[b-d38y0ghce7] {
    list-style: none;
    margin: 0 0 8px 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: 4px;
}

.d-task-row[b-d38y0ghce7] {
    display: flex;
    align-items: center;
    gap: 7px;
}

/* Pozycja z podpisem wykonawcy jest dwuliniowa — checkbox trzymamy przy tytule. */
.d-task-row:has(.d-task-meta)[b-d38y0ghce7] {
    align-items: flex-start;
}

.d-task-text[b-d38y0ghce7] {
    flex: 1 1 auto;
    min-width: 0;
    display: flex;
    flex-direction: column;
    gap: 1px;
}

.d-task-label[b-d38y0ghce7] {
    flex: 1 1 auto;
    min-width: 0;
    font-size: 12.5px;
    color: #1f2937;
    overflow-wrap: anywhere;
}

.d-task-meta[b-d38y0ghce7] {
    font-size: 11px;
    color: #9ca3af;
    overflow-wrap: anywhere;
}

.d-task-done .d-task-label[b-d38y0ghce7] {
    text-decoration: line-through;
    color: #9ca3af;
}

.d-msg-list[b-d38y0ghce7] {
    display: flex;
    flex-direction: column;
    gap: 8px;
    max-height: 360px;
    overflow-y: auto;
    overflow-x: hidden;
    padding-right: 4px;
    min-width: 0;
}

.d-msg[b-d38y0ghce7] {
    border: 1px solid #e6e8eb;
    border-radius: 8px;
    padding: 8px 10px;
    background: #fff;
    max-width: 92%;
    min-width: 0;
    overflow-wrap: anywhere;
    word-break: break-word;
}

/* Strony wątku liczą się WZGLĘDEM PATRZĄCEGO (own / other), a nie względem roli autora —
   ta sama zasada co w szczegółach zgłoszenia. Wcześniej stały tu klasy customer/support
   i konto klienckie widziało panel odbity lustrzanie wobec szczegółów. */
.d-msg.other[b-d38y0ghce7] {
    align-self: flex-start;
    background: #f9fafb;
}

.d-msg.own[b-d38y0ghce7] {
    align-self: flex-end;
    background: #fff7ed;
    border-color: #fed7aa;
}

.d-msg.internal[b-d38y0ghce7] {
    align-self: stretch;
    max-width: 100%;
    background: #fef2f2;
    border-color: #fecaca;
}

.d-msg.system[b-d38y0ghce7] {
    align-self: center;
    max-width: 100%;
    background: transparent;
    border: none;
    color: #6b7280;
    font-size: 11px;
    text-align: center;
}

.d-msg-head[b-d38y0ghce7] {
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: 8px;
    font-size: 11px;
    color: #6b7280;
    margin-bottom: 4px;
}

.d-msg-author[b-d38y0ghce7] {
    font-weight: 600;
    color: #1f2937;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.d-msg-date[b-d38y0ghce7] {
    flex-shrink: 0;
}

/* Notatka wewnętrzna w SWOJEJ zakładce. Nie ma tu pastylki „Notatka wewnętrzna" przy każdym
   wpisie ani krawędzi po lewej — cała zakładka jest z notatek, więc oznaczanie każdej z nich
   z osobna to szum. Zostaje samo różowe tło: mówi „treść, której klient nie zobaczy", nie
   robiąc z listy pasiaka. Bąbelek idzie na całą szerokość — notatka nie jest niczyją
   odpowiedzią, więc nie ma strony wątku. */
.d-msg.d-note[b-d38y0ghce7] {
    max-width: 100%;
    background: #fef2f2;
}

.d-msg-internal[b-d38y0ghce7] {
    background: #ef4444;
    color: #fff;
    border-radius: 999px;
    padding: 1px 6px;
    font-size: 10px;
    margin-left: 6px;
}

.d-msg-body[b-d38y0ghce7] {
    white-space: pre-wrap;
    color: #1f2937;
    font-size: 12.5px;
    line-height: 1.4;
    overflow-wrap: anywhere;
    word-break: break-word;
    min-width: 0;
}

.d-msg-body img[b-d38y0ghce7] {
    max-width: 100%;
    height: auto;
    display: block;
    border-radius: 4px;
}

.d-msg-body.collapsed[b-d38y0ghce7] {
    display: -webkit-box;
    -webkit-line-clamp: 4;
    -webkit-box-orient: vertical;
    overflow: hidden;
    max-height: 5.6em;
    position: relative;
}

.d-msg-toggle[b-d38y0ghce7],
.d-desc-toggle[b-d38y0ghce7] {
    background: transparent;
    border: none;
    padding: 2px 0 0 0;
    margin-top: 4px;
    font-size: 11px;
    font-weight: 600;
    color: #c2410c;
    cursor: pointer;
    align-self: flex-start;
}

.d-msg-toggle:hover[b-d38y0ghce7],
.d-desc-toggle:hover[b-d38y0ghce7] {
    text-decoration: underline;
}

/* Stopka popupu — Anuluj / Zapisz nie mogą się sklejać. */
.ticket-popup-footer[b-d38y0ghce7] {
    display: flex;
    justify-content: flex-end;
    gap: 8px;
}
/* /Components/Shared/AppLauncher.razor.rz.scp.css */
/* Skrót do pozostałych aplikacji — dziewięć kropek w nagłówku, panel jak w Google.

   Wszystko siedzi w CSS-ie zakresowym tego komponentu, razem z motywem ciemnym: reguła
   `html[data-theme="dark"] .app-launcher-panel` po kompilacji dostaje atrybut zakresu na
   OSTATNIM selektorze, więc trafia dokładnie w te elementy i nie trzeba dokładać niczego
   do theme-dark.css. */

.app-launcher[b-4dky7fq2d6] {
    position: relative;
    display: flex;
    align-items: center;
    /* Odstęp od kulki profilu po prawej — przy 8px kropki i awatar czytały się jako
       jedna para przycisków. */
    margin-right: 16px;
}

/* Kulka w nagłówku trzyma metryki awatara profilu (40x40), żeby oba stały w jednym
   rzędzie i miały tę samą wysokość. Okrągła — sąsiaduje z okrągłym awatarem. */
.app-launcher-button[b-4dky7fq2d6] {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 40px;
    height: 40px;
    padding: 0;
    border: none;
    border-radius: 50%;
    background: transparent;
    cursor: pointer;
    transition: background 0.15s ease;
}

    .app-launcher-button:hover[b-4dky7fq2d6],
    .app-launcher-button.is-open[b-4dky7fq2d6] {
        background: rgba(15, 23, 42, 0.08);
    }

        /* Pod kursorem ikona ciemnieje — ten sam sygnał, co przygaszenie hamburgera. */
        .app-launcher-button:hover > span[b-4dky7fq2d6],
        .app-launcher-button.is-open > span[b-4dky7fq2d6] {
            opacity: 0.75;
        }

    .app-launcher-button > span[b-4dky7fq2d6] {
        width: 20px;
        height: 20px;
        /* Szara, jak hamburger po lewej stronie nagłówka. Hamburger bierze kolor z pliku
           (list.svg ma wpisane fill="gray"), ale grid-3x3-gap.svg ma fill="currentColor",
           a SVG wciągnięty jako tło nie zna koloru strony i renderuje się na czarno.
           Nie podmieniamy pliku z paczki bootstrap-icons, bo jej aktualizacja cofnęłaby
           zmianę — czerń przykrywamy kryciem. Na białym tle czarne 50% daje dokładnie
           #808080, czyli CSS-owy „gray".

           Krycie, a NIE filter: w motywie ciemnym globalna reguła odwracająca ikony
           (theme-dark.css) ustawia filter z !important i każdy własny filtr by skasowała.
           Tam ikona robi się biała, a to samo 50% daje na ciemnym tle ten sam szary ton. */
        opacity: 0.5;
    }

/* Przezroczysta warstwa na całą stronę — łapie kliknięcie poza panelem i zamyka go.
   Leży POD panelem, nad resztą strony. */
.app-launcher-backdrop[b-4dky7fq2d6] {
    position: fixed;
    inset: 0;
    z-index: 1040;
    background: transparent;
}

.app-launcher-panel[b-4dky7fq2d6] {
    position: absolute;
    top: calc(100% + 10px);
    /* Wyrównanie do PRAWEJ krawędzi kulki: panel jest szerszy od niej i rozwijany przy
       prawym brzegu okna — zaczepiony lewą krawędzią wyjechałby poza ekran. */
    right: 0;
    z-index: 1050;
    width: 320px;
    max-height: min(70vh, 520px);
    overflow-y: auto;
    padding: 16px;
    border-radius: 16px;
    background: #ffffff;
    border: 1px solid #e5e7eb;
    box-shadow: 0 18px 45px rgba(15, 23, 42, 0.18);
}

.app-launcher-panel-title[b-4dky7fq2d6] {
    margin: 0 4px 12px 4px;
    font-size: 15px;
    font-weight: 600;
    color: #111827;
}

.app-launcher-grid[b-4dky7fq2d6] {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 4px;
}

.app-launcher-tile[b-4dky7fq2d6] {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 8px;
    padding: 12px 6px;
    border-radius: 12px;
    text-decoration: none;
    color: #374151;
    transition: background 0.15s ease;
}

    .app-launcher-tile:hover[b-4dky7fq2d6] {
        background: #f3f4f6;
        color: #111827;
        text-decoration: none;
    }

.app-launcher-icon[b-4dky7fq2d6] {
    width: 48px;
    height: 48px;
    border-radius: 12px;
    /* Delikatny kontur, bo nie każda ikona ma kolorowe tło — OK-API jest białe i bez tego
       ginie na białym panelu (widać sam napis, bez kafelka). Przy ikonach kolorowych
       kontur jest praktycznie niewidoczny. */
    border: 1px solid rgba(15, 23, 42, 0.10);
    /* Ikony aplikacji bywają kwadratowe, ale nie muszą być idealnie — contain zostawia
       proporcje, zamiast rozciągać znak. */
    object-fit: contain;
    flex: 0 0 auto;
}

/* Kafelek zastępczy, dopóki nie ma pliku ikony (AppLauncherEntry.Icon). */
.app-launcher-icon-fallback[b-4dky7fq2d6] {
    display: flex;
    align-items: center;
    justify-content: center;
    color: #ffffff;
    font-size: 16px;
    font-weight: 700;
    letter-spacing: 0.02em;
}

.app-launcher-label[b-4dky7fq2d6] {
    font-size: 12px;
    line-height: 1.3;
    /* Dwie linie ZAWSZE, także przy krótkiej nazwie: bez tego "OK-API" (jedna linia) stoi
       wyżej niż "WMS24 Control" (dwie) i drugi rząd siatki rozjeżdża się w pionie. */
    min-height: 2.6em;
    text-align: center;
    /* Dwie linie na podpis, dalej wielokropek — "WMS24 FlowHub" ma się mieścić bez
       rozpychania kolumny siatki. */
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
    word-break: break-word;
}

/* ===================== MOTYW CIEMNY ===================== */
html[data-theme="dark"] .app-launcher-button:hover[b-4dky7fq2d6],
html[data-theme="dark"] .app-launcher-button.is-open[b-4dky7fq2d6] {
    background: var(--ld-surface-3);
}

html[data-theme="dark"] .app-launcher-panel[b-4dky7fq2d6] {
    background: var(--ld-surface);
    border-color: var(--ld-border);
    box-shadow: 0 18px 45px rgba(0, 0, 0, 0.6);
}

html[data-theme="dark"] .app-launcher-panel-title[b-4dky7fq2d6] {
    color: var(--ld-text);
}

html[data-theme="dark"] .app-launcher-icon[b-4dky7fq2d6] {
    border-color: rgba(255, 255, 255, 0.12);
}

html[data-theme="dark"] .app-launcher-tile[b-4dky7fq2d6] {
    color: var(--ld-text-muted);
}

    html[data-theme="dark"] .app-launcher-tile:hover[b-4dky7fq2d6] {
        background: var(--ld-surface-3);
        color: var(--ld-text);
    }
/* /Components/Shared/Components/AttachmentGroup.razor.rz.scp.css */
/* Nagłówek podsekcji jest <button>-em — zdejmujemy domyślny wygląd przycisku i zostawiamy
   wąski, wersalikowy podtytuł w stylu nagłówków kart bocznych. */
.att-group[b-2qqp65yts0] {
    display: flex;
    align-items: center;
    gap: 0.4rem;
    width: 100%;
    margin: 0;
    padding: 0.55rem 0.75rem 0.2rem;
    background: none;
    border: none;
    font: inherit;
    font-size: 0.72rem;
    font-weight: 600;
    letter-spacing: 0.03em;
    text-transform: uppercase;
    color: #6e7781;
    text-align: left;
    cursor: pointer;
}

.att-group:hover[b-2qqp65yts0] {
    color: #f97316;
}

.att-group:focus-visible[b-2qqp65yts0] {
    outline: 2px solid #f97316;
    outline-offset: -2px;
    border-radius: 6px;
}

.att-group-label[b-2qqp65yts0] {
    flex: 1 1 auto;
    min-width: 0;
}

/* Zestaw ikon ma tylko chevron-left/right, więc stan „rozwinięte" robi obrót strzałki. */
.att-group-chevron[b-2qqp65yts0] {
    flex: 0 0 auto;
    transition: transform 0.12s ease;
}

.att-group.is-open .att-group-chevron[b-2qqp65yts0] {
    transform: rotate(90deg);
}

.att-group-count[b-2qqp65yts0] {
    flex: 0 0 auto;
    min-width: 1.15rem;
    padding: 0 0.35rem;
    border-radius: 999px;
    background: #f3f4f6;
    color: #6b7280;
    font-size: 0.7rem;
    line-height: 1.15rem;
    text-align: center;
    letter-spacing: 0;
}
/* /Components/Shared/Components/AttachmentUploader.razor.rz.scp.css */
/* ===== Strefa „przeciągnij albo kliknij" =====
   Cała strefa jest jednym przyciskiem: przezroczysty <input type="file"> leży na wierzchu
   (z-index 2), a ikona i napisy pod nim (z-index 1, bez łapania kursora). Stąd brak :hover
   na samych napisach — stan wizualny trzyma obwoluta. */
.att-drop[b-dyqr2qmsth] {
    position: relative;
    display: flex;
    align-items: center;
    gap: 0.85rem;
    padding: 1.05rem 1.15rem;
    border: 1.5px dashed #d4d7dd;
    border-radius: 12px;
    background: #fafbfc;
    transition: border-color 0.15s ease, background-color 0.15s ease, box-shadow 0.15s ease;
}

.att-drop:hover[b-dyqr2qmsth] {
    border-color: #fbb474;
    background: #fffaf5;
}

.att-drop.is-dragover[b-dyqr2qmsth] {
    border-color: #f97316;
    border-style: solid;
    background: #fff4ea;
    box-shadow: 0 0 0 4px rgba(249, 115, 22, 0.12);
}

/* ::deep JEST TU KONIECZNE. <InputFile> to KOMPONENT, a izolacja CSS nadaje atrybut zakresu
   wyłącznie elementom wypisanym wprost w znaczniku tego komponentu — nie temu, co wyrenderuje
   komponent potomny. Bez ::deep reguła nie łapała niczego i w strefie sterczał natywny
   przycisk „Choose Files / No file chosen". */
.att-drop[b-dyqr2qmsth]  .att-drop-input {
    position: absolute;
    inset: 0;
    z-index: 2;
    width: 100%;
    height: 100%;
    opacity: 0;
    cursor: pointer;
    /* Bez tego Chrome liczy pole po tekście przycisku „Wybierz pliki" i strefa rośnie. */
    font-size: 0;
}

.att-drop-icon[b-dyqr2qmsth],
.att-drop-texts[b-dyqr2qmsth] {
    position: relative;
    z-index: 1;
    pointer-events: none;
}

.att-drop-icon[b-dyqr2qmsth] {
    flex: 0 0 auto;
    width: 1.5rem;
    height: 1.5rem;
    opacity: 0.6;
}

.att-drop.is-dragover .att-drop-icon[b-dyqr2qmsth] {
    opacity: 1;
}

/* Wariant spoczynkowy i „upuść teraz" stoją w kodzie OBOK SIEBIE, a przełącza je klasa
   dorzucana z JS-a (wwwroot/js/dropzone.js). Przerysowanie po stronie serwera w trakcie
   przeciągania jest za wolne — przeglądarka zdążyłaby uznać upuszczenie za niedozwolone. */
.att-drop-active[b-dyqr2qmsth] {
    display: none;
}

.att-drop.is-dragover .att-drop-idle[b-dyqr2qmsth] {
    display: none;
}

.att-drop.is-dragover span.att-drop-active[b-dyqr2qmsth] {
    display: inline-block;
}

.att-drop-texts[b-dyqr2qmsth] {
    display: flex;
    flex-direction: column;
    gap: 2px;
    min-width: 0;
}

.att-drop-title[b-dyqr2qmsth] {
    font-size: 0.88rem;
    font-weight: 600;
    color: #374151;
}

.att-drop.is-dragover .att-drop-title[b-dyqr2qmsth] {
    color: #c2410c;
}

.att-drop-hint[b-dyqr2qmsth] {
    font-size: 0.75rem;
    color: #6b7280;
}

/* Wariant do kompozytora odpowiedzi — jeden wąski pasek pod edytorem. Pełna kafla zabierała
   tam wysokość okna rozmowy, a strefa ma tylko przyjmować pliki, nie dominować formularza. */
.att-drop.is-compact[b-dyqr2qmsth] {
    gap: 0.55rem;
    padding: 0.5rem 0.75rem;
    border-radius: 10px;
}

    .att-drop.is-compact .att-drop-icon[b-dyqr2qmsth] {
        width: 1.1rem;
        height: 1.1rem;
    }

    .att-drop.is-compact .att-drop-title[b-dyqr2qmsth] {
        font-size: 0.82rem;
        font-weight: 500;
    }

    .att-drop.is-compact .att-drop-hint[b-dyqr2qmsth] {
        display: none;
    }

/* Strefa „na żądanie": w spoczynku jej nie ma, wychodzi dopiero, gdy nad stroną jedzie plik
   (klasę na <html> dokłada wwwroot/js/dropzone.js). Stoi tak pod zwiniętym wątkiem zgłoszenia,
   gdzie pasek na stałe byłby elementem, o który nikt nie prosił — a upuszczenie i tak musi
   mieć gdzie trafić. */
.att-drop.is-ondemand[b-dyqr2qmsth] {
    display: none;
}

html.is-file-drag .att-drop.is-ondemand[b-dyqr2qmsth] {
    display: flex;
}

/* ===== Lista wybranych plików ===== */
.att-picked[b-dyqr2qmsth] {
    list-style: none;
    margin: 0.6rem 0 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: 0.35rem;
}

.att-picked-item[b-dyqr2qmsth] {
    display: flex;
    align-items: center;
    gap: 0.55rem;
    padding: 0.4rem 0.5rem 0.4rem 0.6rem;
    border: 1px solid #e5e7eb;
    border-radius: 8px;
    background: #fff;
    font-size: 0.82rem;
}

.att-picked-item:hover[b-dyqr2qmsth] {
    border-color: #d1d5db;
}

.att-picked-icon[b-dyqr2qmsth] {
    flex: 0 0 auto;
    opacity: 0.7;
}

.att-picked-name[b-dyqr2qmsth] {
    flex: 1 1 auto;
    min-width: 0;
    font-weight: 500;
    color: #1f2937;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.att-picked-size[b-dyqr2qmsth] {
    flex: 0 0 auto;
    font-size: 0.72rem;
    color: #6b7280;
    white-space: nowrap;
}

.att-picked-remove[b-dyqr2qmsth] {
    flex: 0 0 auto;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 22px;
    height: 22px;
    padding: 0;
    border: none;
    border-radius: 6px;
    background: transparent;
    cursor: pointer;
    line-height: 0;
}

.att-picked-remove:hover[b-dyqr2qmsth] {
    background: #fee2e2;
}

.att-picked-remove:focus-visible[b-dyqr2qmsth] {
    outline: 2px solid #f97316;
    outline-offset: 1px;
}
/* /Components/Shared/Components/AttachmentViewerPopup.razor.rz.scp.css */
/* ===== Podgląd załącznika na wierzchu strony =====
   Wyszarzone tło + karta na środku. z-index ponad nakładką Gantta (1080), bo podgląd pliku
   otwiera się także z ekranów, na których ta nakładka już stoi. */
.att-viewer[b-b0ki5c4xci] {
    /* Miejsce, jakie zostaje na sam plik: szerokość karty bez wyściółki i wysokość okna bez
       nagłówka, stopki i wyściółki. Obrócony obrazek nie może się opierać na `100%` — stoi
       poza flow, więc procent liczyłby się od pudełka, którego już tam nie ma. */
    --av-w: calc(min(1100px, 100vw - 2.5rem) - 1.8rem);
    --av-h: calc(100vh - 15rem);
    position: fixed;
    inset: 0;
    z-index: 1200;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 2rem 1.25rem;
    box-sizing: border-box;
    background: rgba(17, 20, 24, 0.68);
    backdrop-filter: blur(3px);
    -webkit-backdrop-filter: blur(3px);
    /* tabindex="-1" daje ognisko dla Escape; obwódka ogniska byłaby tu tylko szumem */
    outline: none;
    animation: att-viewer-in-b-b0ki5c4xci 0.14s ease-out;
}

@keyframes att-viewer-in-b-b0ki5c4xci {
    from {
        opacity: 0;
    }

    to {
        opacity: 1;
    }
}

.att-viewer-card[b-b0ki5c4xci] {
    display: flex;
    flex-direction: column;
    max-width: min(1100px, 100%);
    max-height: 100%;
    min-width: 0;
    background: #fff;
    border-radius: 14px;
    box-shadow: 0 24px 60px rgba(0, 0, 0, 0.45);
    overflow: hidden;
    animation: att-viewer-card-in-b-b0ki5c4xci 0.16s ease-out;
}

@keyframes att-viewer-card-in-b-b0ki5c4xci {
    from {
        transform: translateY(8px) scale(0.985);
    }

    to {
        transform: none;
    }
}

/* ===== Nagłówek: nazwa pliku + metryczka + krzyżyk ===== */
.att-viewer-head[b-b0ki5c4xci] {
    display: flex;
    align-items: center;
    gap: 1rem;
    padding: 0.7rem 0.9rem 0.7rem 1rem;
    border-bottom: 1px solid #e6e8eb;
}

.att-viewer-titles[b-b0ki5c4xci] {
    display: flex;
    flex-direction: column;
    min-width: 0;
    gap: 2px;
}

.att-viewer-name[b-b0ki5c4xci] {
    font-weight: 600;
    font-size: 0.92rem;
    color: #1f2328;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.att-viewer-info[b-b0ki5c4xci] {
    font-size: 0.75rem;
    color: #6b7280;
}

/* Obrót w lewo/prawo — te same wymiary co krzyżyk, żeby nagłówek nie skakał. */
.att-viewer-rot[b-b0ki5c4xci] {
    border: none;
    background: transparent;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 30px;
    height: 30px;
    border-radius: 8px;
    cursor: pointer;
    flex-shrink: 0;
}

    .att-viewer-rot:first-of-type[b-b0ki5c4xci] {
        margin-left: auto;
    }

    .att-viewer-rot:hover[b-b0ki5c4xci] {
        background: #f0f1f3;
    }

.att-viewer-x[b-b0ki5c4xci] {
    margin-left: auto;
    border: none;
    background: transparent;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 30px;
    height: 30px;
    border-radius: 8px;
    cursor: pointer;
    flex-shrink: 0;
}

    .att-viewer-x:hover[b-b0ki5c4xci] {
        background: #f0f1f3;
    }

/* ===== Treść ===== */
.att-viewer-body[b-b0ki5c4xci] {
    flex: 1 1 auto;
    min-height: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 0.9rem;
    background: #f7f8fa;
    overflow: auto;
    /* punkt odniesienia dla obróconego obrazka, który jest wyjęty z flow */
    position: relative;
}

/* Obrócony o 90/270 obrazek stoi poza flow, więc kontener nie ma się od czego rozepchać —
   bez własnych wymiarów karta zapadłaby się do zera. Bierze więc całe dostępne miejsce,
   a obrazek siedzi na jego środku. */
.att-viewer-body-sideways[b-b0ki5c4xci] {
    overflow: hidden;
    box-sizing: border-box;
    width: calc(var(--av-w) + 1.8rem);
    height: calc(var(--av-h) + 1.8rem);
}

/* Kratka pod obrazkiem — bez niej zrzut ekranu z białym tłem (a takie są prawie wszystkie)
   zlewa się z kartą i nie widać, gdzie kończy się plik. */
.att-viewer-img[b-b0ki5c4xci] {
    max-width: 100%;
    max-height: var(--av-h);
    transition: transform 0.15s ease-out;
    object-fit: contain;
    border-radius: 8px;
    background-color: #fff;
    background-image: linear-gradient(45deg, #eceef1 25%, transparent 25%),
                      linear-gradient(-45deg, #eceef1 25%, transparent 25%),
                      linear-gradient(45deg, transparent 75%, #eceef1 75%),
                      linear-gradient(-45deg, transparent 75%, #eceef1 75%);
    background-size: 16px 16px;
    background-position: 0 0, 0 8px, 8px -8px, -8px 0;
    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12);
}

/* Obrót jest czysto wizualny: `transform` nie rusza pudełka układu, więc obrócony o 90°
   szeroki zrzut ekranu dalej rezerwuje swoją pierwotną wysokość — kontener dostawał od tego
   pasek przewijania, a ograniczenia rozmiaru liczyły się do złej osi. Przy 90/270 wyjmujemy
   go więc z flow (position: absolute) i podajemy wymiary zamienione miejscami: to, co po
   obrocie jest wysokością, przeglądarka widzi jako szerokość. */
.att-viewer-img-rot-180[b-b0ki5c4xci] {
    transform: rotate(180deg);
}

.att-viewer-img-rot-90[b-b0ki5c4xci],
.att-viewer-img-rot-270[b-b0ki5c4xci] {
    position: absolute;
    top: 50%;
    left: 50%;
    max-width: var(--av-h);
    max-height: var(--av-w);
}

.att-viewer-img-rot-90[b-b0ki5c4xci] {
    transform: translate(-50%, -50%) rotate(90deg);
}

.att-viewer-img-rot-270[b-b0ki5c4xci] {
    transform: translate(-50%, -50%) rotate(270deg);
}

.att-viewer-frame[b-b0ki5c4xci] {
    width: min(900px, 82vw);
    height: var(--av-h);
    min-height: 320px;
    border: 1px solid #e6e8eb;
    border-radius: 8px;
    background: #fff;
}

/* Plik bez podglądu — ikona, nazwa i jedno zdanie wyjaśnienia zamiast pustej ramki. */
.att-viewer-nopreview[b-b0ki5c4xci] {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 0.45rem;
    padding: 3rem 2.5rem;
    text-align: center;
}

.att-viewer-nopreview-icon[b-b0ki5c4xci] {
    width: 40px;
    height: 40px;
    opacity: 0.55;
}

.att-viewer-nopreview-name[b-b0ki5c4xci] {
    font-weight: 600;
    color: #1f2328;
    overflow-wrap: anywhere;
}

.att-viewer-nopreview-hint[b-b0ki5c4xci] {
    font-size: 0.82rem;
    color: #6b7280;
}

/* ===== Stopka: Pobierz / Zamknij ===== */
.att-viewer-foot[b-b0ki5c4xci] {
    display: flex;
    align-items: center;
    justify-content: flex-end;
    gap: 0.5rem;
    padding: 0.7rem 0.9rem;
    border-top: 1px solid #e6e8eb;
    background: #fff;
}

.att-viewer[b-b0ki5c4xci]  .att-viewer-btn {
    min-width: 108px;
}

@media (max-width: 576px) {
    .att-viewer[b-b0ki5c4xci] {
        /* Na telefonie karta zajmuje cały ekran, więc dostępne miejsce liczy się inaczej. */
        --av-w: calc(100vw - 1.8rem);
        --av-h: calc(100vh - 9.5rem);
        padding: 0;
    }

    .att-viewer-card[b-b0ki5c4xci] {
        max-width: 100%;
        width: 100%;
        height: 100%;
        max-height: 100%;
        border-radius: 0;
    }

    .att-viewer-foot[b-b0ki5c4xci] {
        justify-content: stretch;
    }

    .att-viewer[b-b0ki5c4xci]  .att-viewer-btn {
        flex: 1 1 0;
    }
}
/* /Components/Shared/Components/BillingPlanBulkPopup.razor.rz.scp.css */
/* === Zbiorcza zmiana ustaleń rozliczeń ===
   Dwie sekcje jedna pod drugą: najpierw CO się zmienia, potem KOMU. Pola nieaktywne są
   wygaszone — tylko zaznaczone „zmień" pójdzie do zapisu i to musi być widać na pierwszy rzut oka. */
/* Treść mieści się w oknie, żeby stopka z „Zastosuj" nie zjechała pod krawędź ekranu —
   przy 29 płatnikach okno bez tego limitu jest wyższe niż laptopowy ekran. */
.pb-body[b-iiobzmt6b8] {
    display: flex;
    flex-direction: column;
    gap: 12px;
    max-height: calc(100vh - 172px);
    overflow-y: auto;
}

.pb-hint[b-iiobzmt6b8] {
    font-size: 12px;
    color: #6b7280;
    line-height: 1.45;
}

.pb-section[b-iiobzmt6b8] {
    display: flex;
    flex-direction: column;
    gap: 8px;
    flex: 0 0 auto;
}

/* Sekcja płatników zjada całą wolną wysokość, a przewija się w środku sama lista.
   Dzięki temu przy niskim ekranie kurczy się lista, a nie pola do zmiany. */
.pb-section-owners[b-iiobzmt6b8] {
    flex: 1 1 auto;
    min-height: 0;
}

.pb-section-title[b-iiobzmt6b8] {
    display: flex;
    align-items: center;
    gap: 7px;
    font-size: 11px;
    font-weight: 600;
    letter-spacing: .05em;
    text-transform: uppercase;
    color: #9ca3af;
}

.pb-counter[b-iiobzmt6b8] {
    margin-left: auto;
    text-transform: none;
    letter-spacing: 0;
    font-size: 12px;
    color: #6b7280;
}

/* === Co ustawić === */
.pb-fields[b-iiobzmt6b8] {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 6px 16px;
}

.pb-field[b-iiobzmt6b8] {
    display: grid;
    grid-template-columns: minmax(0, 1fr) 150px;
    align-items: center;
    gap: 10px;
    padding: 4px 10px;
    border: 1px solid #eef0f4;
    border-radius: 8px;
    background: #fbfbfd;
}

    /* Zaznaczone pole zmienia tło — inaczej po zwinięciu wzroku nie widać, co pójdzie do zapisu. */
    .pb-field.on[b-iiobzmt6b8] {
        background: #fff;
        border-color: #d7dbe2;
        box-shadow: inset 3px 0 0 #f97316;
    }

.pb-field-toggle[b-iiobzmt6b8] {
    display: flex;
    align-items: center;
    gap: 8px;
    min-width: 0;
    margin: 0;
    font-size: 13px;
    color: #6b7280;
    cursor: pointer;
}

.pb-field.on .pb-field-toggle[b-iiobzmt6b8] {
    color: #111827;
    font-weight: 600;
}

.pb-field-toggle span[b-iiobzmt6b8] {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.pb-switch[b-iiobzmt6b8] {
    justify-self: start;
}

.pb-fields-note[b-iiobzmt6b8] {
    font-size: 12px;
    color: #6b7280;
}

/* === Komu ustawić === */
.pb-owners-bar[b-iiobzmt6b8] {
    display: flex;
    align-items: center;
    gap: 10px;
    flex-wrap: wrap;
}

.pb-search[b-iiobzmt6b8] {
    flex: 1 1 220px;
    min-width: 180px;
}

.pb-picks[b-iiobzmt6b8] {
    display: inline-flex;
    background: #f1f3f5;
    border-radius: 8px;
    padding: 3px;
    gap: 2px;
}

.pb-pick[b-iiobzmt6b8] {
    border: none;
    background: transparent;
    padding: 5px 11px;
    border-radius: 6px;
    font-size: 12px;
    color: #4b5563;
    cursor: pointer;
    white-space: nowrap;
    transition: background 0.15s ease, color 0.15s ease;
}

    .pb-pick:hover[b-iiobzmt6b8] {
        background: #fff;
        color: #111827;
    }

.pb-list[b-iiobzmt6b8] {
    flex: 1 1 auto;
    min-height: 190px;
    max-height: 340px;
    overflow-y: auto;
    border: 1px solid #e6e8ee;
    border-radius: 8px;
}

.pb-item[b-iiobzmt6b8] {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 8px 12px;
    margin: 0;
    border-bottom: 1px solid #f1f3f7;
    cursor: pointer;
}

    .pb-item:last-child[b-iiobzmt6b8] {
        border-bottom: none;
    }

    .pb-item:hover[b-iiobzmt6b8] {
        background: #f8fafc;
    }

    .pb-item.picked[b-iiobzmt6b8] {
        background: #fff7ed;
        box-shadow: inset 3px 0 0 #f97316;
    }

.pb-item-name[b-iiobzmt6b8] {
    font-size: 13px;
    font-weight: 600;
    color: #111827;
    flex: 0 1 auto;
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

/* Dzisiejsze ustalenia po prawej — to jest ta wartość, którą zapis nadpisze. */
.pb-item-plan[b-iiobzmt6b8] {
    margin-left: auto;
    font-size: 12px;
    color: #6b7280;
    text-align: right;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.pb-item-noplan[b-iiobzmt6b8] {
    margin-left: auto;
    font-size: 11px;
    color: #b45309;
    background: rgba(245, 158, 11, 0.12);
    border-radius: 999px;
    padding: 2px 9px;
    white-space: nowrap;
}

.pb-empty[b-iiobzmt6b8] {
    font-size: 12px;
    color: #6b7280;
    padding: 14px;
    text-align: center;
    border: 1px dashed #e6e8ee;
    border-radius: 8px;
}

.pb-progress[b-iiobzmt6b8] {
    font-size: 12px;
    font-weight: 600;
    color: #c2410c;
}

.pb-footer[b-iiobzmt6b8] {
    display: flex;
    align-items: center;
    gap: 8px;
    width: 100%;
}

/* Podsumowanie zmiany stoi w stopce, tuż przy przycisku — ostatnia szansa, żeby zobaczyć,
   co za chwilę pójdzie na kilkadziesiąt firm naraz. */
.pb-footer-summary[b-iiobzmt6b8] {
    flex: 1 1 auto;
    min-width: 0;
    font-size: 12px;
    color: #4b5563;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

@media (max-width: 760px) {
    .pb-fields[b-iiobzmt6b8] {
        grid-template-columns: minmax(0, 1fr);
    }

    .pb-footer-summary[b-iiobzmt6b8] {
        display: none;
    }
}
/* /Components/Shared/Components/KpiTile.razor.rz.scp.css */
/* Kafelek KPI — style przeniesione ze statystyk, żeby dało się użyć wzoru także na stronie głównej. */

.kpi-tile[b-8guc3y7nxg] {
    background: #fff;
    border: 1px solid #e5e7eb;
    border-radius: 1rem;
    box-shadow: 0 8px 25px rgba(15, 23, 42, 0.06);
    padding: 1.15rem 1.25rem;
    transition: transform 0.35s cubic-bezier(.22, .61, .36, 1), box-shadow 0.35s cubic-bezier(.22, .61, .36, 1);
    will-change: transform;
    height: 100%;
    /* Gdy kafelek dostaje narzuconą wysokość (dashboard), treść ma być wyśrodkowana,
       a nie przyklejona do góry. Przy wysokości z treści (statystyki) bez efektu. */
    display: flex;
    flex-direction: column;
    justify-content: center;
}

    .kpi-tile:hover[b-8guc3y7nxg] {
        transform: translateY(-4px);
        box-shadow: 0 18px 45px rgba(0, 0, 0, 0.16);
    }

.kpi-tile-top[b-8guc3y7nxg] {
    display: flex;
    justify-content: space-between;
    align-items: flex-start;
    gap: 10px;
}

.kpi-tile-info[b-8guc3y7nxg] {
    display: flex;
    flex-direction: column;
    gap: 2px;
    min-width: 0;
}

.kpi-tile-title[b-8guc3y7nxg] {
    font-size: 0.8rem;
    color: #6b7280;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.kpi-tile-value[b-8guc3y7nxg] {
    font-size: 1.9rem;
    font-weight: 600;
    line-height: 1.1;
    color: #0f172a;
    font-variant-numeric: tabular-nums;
}

    .kpi-tile-value.danger[b-8guc3y7nxg] {
        color: #ef4444;
    }

/* Dopisek pod wartością — kontekst liczby (ile zgłoszeń, ile okresów). */
.kpi-tile-sub[b-8guc3y7nxg] {
    font-size: 0.75rem;
    color: #9ca3af;
    margin-top: 2px;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.kpi-icon-wrapper[b-8guc3y7nxg] {
    flex-shrink: 0;
    padding: 0.7rem;
    border-radius: 0.8rem;
    color: #fff;
    font-size: 1.5rem;
    display: flex;
    align-items: center;
    justify-content: center;
    box-shadow: 0 10px 25px rgba(15, 23, 42, 0.18);
    transition: transform 0.25s ease;
}

.kpi-tile:hover .kpi-icon-wrapper[b-8guc3y7nxg] {
    transform: scale(1.1) rotate(6deg);
}

/* Paleta kafelków (kolory z dashboardu FlowHub). */
.kpi-c-purple[b-8guc3y7nxg] { background: #8C52FF; }
.kpi-c-indigo[b-8guc3y7nxg] { background: #7175FF; }
.kpi-c-blue[b-8guc3y7nxg] { background: #5797FF; }
.kpi-c-sky[b-8guc3y7nxg] { background: #3CB8FF; }
.kpi-c-cyan[b-8guc3y7nxg] { background: #1BDAFF; }
.kpi-c-green[b-8guc3y7nxg] { background: #22c55e; }
.kpi-c-amber[b-8guc3y7nxg] { background: #f59e0b; }
.kpi-c-red[b-8guc3y7nxg] { background: #ef4444; }
.kpi-c-gray[b-8guc3y7nxg] { background: #6b7280; }

.kpi-trend[b-8guc3y7nxg] {
    display: flex;
    align-items: center;
    gap: 5px;
    margin-top: 10px;
    font-size: 0.78rem;
}

.kpi-trend-arrow[b-8guc3y7nxg],
.kpi-trend-pct[b-8guc3y7nxg] {
    font-weight: 600;
}

.kpi-trend .up[b-8guc3y7nxg] { color: #16a34a; }
.kpi-trend .down[b-8guc3y7nxg] { color: #dc2626; }
.kpi-trend .neutral[b-8guc3y7nxg] { color: #0ea5e9; }

.kpi-trend-note[b-8guc3y7nxg] {
    color: #9ca3af;
}
/* /Components/Shared/Components/ListSortBar.razor.rz.scp.css */
/* === Pasek szybkiego sortowania ===
   Przyklejony do góry przewijanej listy (`position: sticky`), a nie wstawiony w nagłówek
   kolumny: nagłówek trzyma tytuł widoku, licznik i chevron zwijania, więc czwarty element
   rozpychałby go na dwie linie. Przyklejenie daje to samo co nagłówek — pasek zostaje
   widoczny po przewinięciu listy — a przy zwiniętej kolumnie znika razem z jej treścią
   (reguła `display: none` na `.col-body`), bez osobnego warunku w markupie.

   Nieprzezroczyste tło jest wymogiem przyklejenia: bez niego wiersze listy przejeżdżałyby
   pod paskiem i widać by je było przez napisy. */
.list-sort[b-n75ibnmh3j] {
    position: sticky;
    top: 0;
    z-index: 2;
    display: flex;
    align-items: center;
    /* Zawijanie zamiast przycinania: przy wąskiej kolumnie i długich podpisach (np. „Priorytet")
       klawisze przechodzą do drugiego rzędu — żaden nie znika i żaden nie gubi napisu. */
    flex-wrap: wrap;
    gap: 4px;
    padding: 6px 8px;
    background: #fff;
    border-bottom: 1px solid #eef0f4;
}

/* Ikona-etykieta paska. Bez niej rząd samych słów czyta się jak kolejne zakładki filtrów,
   a nie jak sortowanie — kierunek pokazuje dopiero strzałka przy AKTYWNYM kryterium. */
.list-sort-icon[b-n75ibnmh3j] {
    flex-shrink: 0;
    opacity: 0.55;
    margin-right: 2px;
}

.list-sort .sort-btn[b-n75ibnmh3j] {
    appearance: none;
    border: 0;
    background: transparent;
    border-radius: 6px;
    padding: 4px 6px;
    display: inline-flex;
    align-items: center;
    gap: 2px;
    font-size: 11px;
    font-weight: 600;
    line-height: 1.4;
    color: #6b7280;
    white-space: nowrap;
    cursor: pointer;
    user-select: none;
}

.list-sort .sort-btn:hover[b-n75ibnmh3j] {
    background: #f3f4f6;
    color: #374151;
}

/* Aktywne kryterium w tej samej pomarańczy co aktywna zakładka widoku (`.view-item.active`)
   — „na czym stoję" ma wyglądać tak samo w obu miejscach. */
.list-sort .sort-btn.active[b-n75ibnmh3j] {
    background: #fff7ed;
    color: #c2410c;
}

/* Strzałka kierunku — tylko przy aktywnym kryterium (patrz komentarz w komponencie).
   Lekki ujemny margines ściąga ją do napisu: ikona ma własny wewnętrzny odstęp i bez tego
   klawisz wyglądałby, jakby miał puste miejsce po prawej. */
.list-sort .sort-dir[b-n75ibnmh3j] {
    flex-shrink: 0;
    margin-left: -1px;
}
/* /Components/Shared/Components/Loader.razor.rz.scp.css */
/* Wskaźnik ładowania strony — zajmuje miejsce treści, która się jeszcze nie pojawiła. */
.loader-inline[b-l3pozlytms] {
    height: calc(100vh - 56px);
}

/* Wskaźnik operacji w toku — nakładka na całą stronę, NAD okienkami edycji (DxPopup).
   Bez tego wskaźnik trafiał na koniec strony i przy otwartym popupie był niewidoczny,
   a zapis trwający kilka sekund wyglądał, jakby nic się nie działo.
   Nakładka przechwytuje też kliknięcia, więc nie da się wysłać formularza dwa razy. */
.loader-overlay[b-l3pozlytms] {
    position: fixed;
    inset: 0;
    z-index: 11000;
    background: rgba(15, 23, 42, 0.35);
}
/* /Components/Shared/Components/LogDetailsPopup.razor.rz.scp.css */
/* Szczegóły wpisu dziennika. Kolory z motywu (zmienne --bs-*), żeby okno wyglądało tak samo
   w trybie jasnym i ciemnym — patrz theme-dark.css. */

.ld-message[b-azxvak1l9r] {
    font-weight: 600;
    margin-bottom: .75rem;
    padding-bottom: .5rem;
    border-bottom: 1px solid var(--bs-border-color);
    word-break: break-word;
}

.ld-section-title[b-azxvak1l9r] {
    font-size: .8rem;
    text-transform: uppercase;
    letter-spacing: .03em;
    opacity: .7;
    margin: .9rem 0 .35rem;
}

.ld-section-title:first-of-type[b-azxvak1l9r] {
    margin-top: 0;
}

.ld-table[b-azxvak1l9r] {
    width: 100%;
    border-collapse: collapse;
    font-size: .875rem;
    table-layout: fixed;
}

.ld-table th[b-azxvak1l9r] {
    text-align: left;
    font-weight: 600;
    font-size: .8rem;
    text-transform: uppercase;
    letter-spacing: .03em;
    opacity: .7;
    padding: .3rem .5rem;
    border-bottom: 1px solid var(--bs-border-color);
}

.ld-table td[b-azxvak1l9r] {
    padding: .35rem .5rem;
    border-bottom: 1px solid var(--bs-border-color);
    vertical-align: top;
    /* Wartości bywają długie i bez spacji (identyfikatory, adresy) — mają się zawijać,
       a nie rozpychać okna w poziomie. */
    overflow-wrap: anywhere;
    white-space: pre-wrap;
}

.ld-col-field[b-azxvak1l9r] {
    width: 32%;
    font-weight: 600;
    opacity: .85;
}

/* Przed/po odróżnione kolorem tła, a nie samym położeniem — przy jednym wierszu
   nagłówek bywa poza polem widzenia. */
.ld-before[b-azxvak1l9r] {
    background-color: rgba(220, 53, 69, .08);
}

.ld-after[b-azxvak1l9r] {
    background-color: rgba(25, 135, 84, .10);
}

.ld-raw[b-azxvak1l9r] {
    font-family: var(--bs-font-monospace, monospace);
    font-size: .8rem;
    background-color: var(--bs-tertiary-bg, rgba(0, 0, 0, .04));
    border: 1px solid var(--bs-border-color);
    border-radius: .25rem;
    padding: .5rem;
    /* Bez tego bardzo długi wpis rozciąga okno w nieskończoność. */
    max-height: 45vh;
    overflow: auto;
    white-space: pre-wrap;
    overflow-wrap: anywhere;
    margin: 0;
}

.ld-empty[b-azxvak1l9r] {
    opacity: .7;
    padding: 1rem 0;
}
/* /Components/Shared/Components/NoAccess.razor.rz.scp.css */
.no-access[b-ffobalnp84] {
    display: flex;
    align-items: center;
    justify-content: center;
    min-height: min(70vh, 640px);
    padding: 2rem 1rem;
}

.no-access-card[b-ffobalnp84] {
    display: flex;
    flex-direction: column;
    align-items: center;
    max-width: 440px;
    padding: 2.25rem 2rem 2rem;
    border: 1px solid #e6e8eb;
    border-radius: 16px;
    background: #fff;
    box-shadow: 0 10px 30px rgba(15, 23, 42, 0.06);
    text-align: center;
}

.no-access-icon[b-ffobalnp84] {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 64px;
    height: 64px;
    margin-bottom: 1.1rem;
    border-radius: 50%;
    background: #fff7ed;
    color: #f97316;
    box-shadow: 0 0 0 8px rgba(249, 115, 22, 0.06);
}

.no-access-title[b-ffobalnp84] {
    margin: 0 0 0.4rem;
    font-size: 1.25rem;
    font-weight: 700;
    color: #1f2937;
}

.no-access-text[b-ffobalnp84] {
    margin: 0 0 0.35rem;
    font-size: 0.9rem;
    color: #374151;
}

.no-access-hint[b-ffobalnp84] {
    margin: 0 0 1.5rem;
    font-size: 0.8rem;
    line-height: 1.45;
    color: #9ca3af;
}

.no-access-actions[b-ffobalnp84] {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    gap: 0.5rem;
}

.no-access-btn[b-ffobalnp84] {
    display: inline-flex;
    align-items: center;
    gap: 0.45rem;
    height: 36px;
    padding: 0 0.95rem;
    border: 1px solid #e5e7eb;
    border-radius: 9px;
    background: #fff;
    color: #1f2937;
    font-size: 0.8125rem;
    font-weight: 600;
    text-decoration: none;
    cursor: pointer;
    transition: background 0.15s ease, border-color 0.15s ease;
}

    .no-access-btn:hover[b-ffobalnp84] {
        background: #f9fafb;
        color: #1f2937;
    }

    .no-access-btn > span[b-ffobalnp84] {
        opacity: 0.6;
    }

    .no-access-btn.is-primary[b-ffobalnp84] {
        border-color: #f97316;
        background: #f97316;
        color: #fff;
    }

        .no-access-btn.is-primary:hover[b-ffobalnp84] {
            border-color: #ea580c;
            background: #ea580c;
            color: #fff;
        }

        .no-access-btn.is-primary > span[b-ffobalnp84] {
            opacity: 1;
        }

/* ===== Motyw ciemny ===== */
html[data-theme="dark"] .no-access-card[b-ffobalnp84] {
    border-color: var(--ld-border);
    background: var(--ld-surface);
    box-shadow: 0 10px 30px rgba(0, 0, 0, 0.4);
}

html[data-theme="dark"] .no-access-icon[b-ffobalnp84] {
    background: rgba(249, 115, 22, 0.14);
    color: #fb923c;
    box-shadow: 0 0 0 8px rgba(249, 115, 22, 0.06);
}

html[data-theme="dark"] .no-access-title[b-ffobalnp84] {
    color: var(--ld-text);
}

html[data-theme="dark"] .no-access-text[b-ffobalnp84] {
    color: var(--ld-text);
    opacity: 0.85;
}

html[data-theme="dark"] .no-access-hint[b-ffobalnp84] {
    color: var(--ld-text-muted);
}

html[data-theme="dark"] .no-access-btn[b-ffobalnp84] {
    border-color: var(--ld-border);
    background: var(--ld-surface-2);
    color: var(--ld-text);
}

    html[data-theme="dark"] .no-access-btn:hover[b-ffobalnp84] {
        background: var(--ld-surface-3);
    }

    html[data-theme="dark"] .no-access-btn.is-primary[b-ffobalnp84] {
        border-color: #f97316;
        background: #f97316;
        color: #fff;
    }
/* /Components/Shared/Components/PermissionMatrix.razor.rz.scp.css */
/* Zmienne --ld-* definiuje wyłącznie theme-dark.css na html[data-theme="dark"], więc fallback
   w var() jest wartością trybu jasnego. Dzięki temu komponent obsługuje oba motywy bez ::deep
   i bez dopisywania reguł do theme-dark.css. */
.pm[b-91ph26r3eo] {
    --pm-surface: var(--ld-surface, #fff);
    --pm-surface-2: var(--ld-surface-2, #f7f8fa);
    --pm-border: var(--ld-border, #e6e8eb);
    --pm-text: var(--ld-text, #1f2328);
    --pm-muted: var(--ld-text-muted, #6b7280);
    --pm-hover: var(--ld-surface-3, #f2f4f7);

    max-height: 46vh;
    overflow-y: auto;
    border: 1px solid var(--pm-border);
    border-radius: 8px;
    background: var(--pm-surface);
    color: var(--pm-text);
    font-size: 0.85rem;
}

.pm-off[b-91ph26r3eo] {
    opacity: 0.55;
}

/* ===== Pasek narzędzi ===== */
.pm-toolbar[b-91ph26r3eo] {
    position: sticky;
    top: 0;
    z-index: 2;
    display: flex;
    align-items: center;
    gap: 0.6rem;
    padding: 0.55rem 0.7rem;
    background: var(--pm-surface);
    border-bottom: 1px solid var(--pm-border);
}

.pm-search[b-91ph26r3eo] {
    flex: 1 1 auto;
    min-width: 0;
    height: 30px;
    padding: 0 0.55rem;
    border: 1px solid var(--pm-border);
    border-radius: 6px;
    background: var(--pm-surface);
    color: var(--pm-text);
    font-size: 0.85rem;
}

    .pm-search:focus[b-91ph26r3eo] {
        outline: none;
        border-color: var(--main-color);
    }

.pm-toggle[b-91ph26r3eo] {
    display: flex;
    align-items: center;
    gap: 0.35rem;
    white-space: nowrap;
    color: var(--pm-muted);
    cursor: pointer;
    margin: 0;
}

.pm-count[b-91ph26r3eo] {
    white-space: nowrap;
    font-weight: 600;
    color: var(--pm-muted);
}

/* ===== Nagłówek kolumn ===== */
.pm-head[b-91ph26r3eo],
.pm-row[b-91ph26r3eo] {
    display: grid;
    grid-template-columns: 1fr 5.5rem 5.5rem 6.5rem;
    align-items: center;
    gap: 0.4rem;
}

.pm-head[b-91ph26r3eo] {
    position: sticky;
    top: 45px;
    z-index: 1;
    padding: 0.35rem 0.7rem;
    background: var(--pm-surface-2);
    border-bottom: 1px solid var(--pm-border);
    font-size: 0.75rem;
    text-transform: uppercase;
    letter-spacing: 0.03em;
    color: var(--pm-muted);
}

/* Bez paska filtrów nagłówek kolumn przykleja się do samej góry kontenera. */
.pm-no-toolbar .pm-head[b-91ph26r3eo] {
    top: 0;
}

.pm-head-level[b-91ph26r3eo] {
    text-align: center;
}

/* ===== Sekcje ===== */
.pm-section-head[b-91ph26r3eo] {
    display: flex;
    align-items: center;
    gap: 0.45rem;
    padding: 0.4rem 0.7rem;
    background: var(--pm-surface-2);
    border-top: 1px solid var(--pm-border);
}

.pm-section-title[b-91ph26r3eo] {
    flex: 1 1 auto;
    display: flex;
    align-items: center;
    gap: 0.35rem;
    padding: 0;
    border: 0;
    background: none;
    color: var(--pm-text);
    font-weight: 600;
    font-size: 0.82rem;
    text-align: left;
    cursor: pointer;
}

.pm-section-count[b-91ph26r3eo] {
    font-size: 0.75rem;
    color: var(--pm-muted);
}

.pm-chevron[b-91ph26r3eo] {
    width: 0;
    height: 0;
    border-left: 4px solid transparent;
    border-right: 4px solid transparent;
    border-top: 5px solid var(--pm-muted);
    transition: transform 0.12s ease;
}

.pm-chevron-closed[b-91ph26r3eo] {
    transform: rotate(-90deg);
}

/* ===== Wiersze ===== */
.pm-row[b-91ph26r3eo] {
    padding: 0.3rem 0.7rem;
    border-top: 1px solid var(--pm-border);
}

    .pm-row:hover[b-91ph26r3eo] {
        background: var(--pm-hover);
    }

.pm-row-name[b-91ph26r3eo] {
    min-width: 0;
    overflow-wrap: anywhere;
}

.pm-cell[b-91ph26r3eo] {
    display: flex;
    justify-content: center;
}

.pm-empty[b-91ph26r3eo] {
    color: var(--pm-muted);
    opacity: 0.5;
}

/* ===== Checkbox =====
   appearance:none daje pełną kontrolę nad stanem pośrednim sekcji (kreska zamiast ptaszka),
   którego natywny checkbox nie umie pokazać bez JS-owego indeterminate. */
.pm-cb[b-91ph26r3eo] {
    appearance: none;
    -webkit-appearance: none;
    width: 15px;
    height: 15px;
    margin: 0;
    border: 1px solid var(--pm-border);
    border-radius: 3px;
    background: var(--pm-surface);
    cursor: pointer;
    position: relative;
    flex: none;
}

    .pm-cb:hover:not(:disabled)[b-91ph26r3eo] {
        border-color: var(--main-color);
    }

    .pm-cb:checked[b-91ph26r3eo] {
        background: var(--main-color);
        border-color: var(--main-color);
    }

        .pm-cb:checked[b-91ph26r3eo]::after {
            content: "";
            position: absolute;
            left: 4px;
            top: 1px;
            width: 4px;
            height: 8px;
            border: solid #fff;
            border-width: 0 2px 2px 0;
            transform: rotate(45deg);
        }

    .pm-cb.pm-cb-partial:not(:checked)[b-91ph26r3eo] {
        background: var(--main-color);
        border-color: var(--main-color);
    }

        .pm-cb.pm-cb-partial:not(:checked)[b-91ph26r3eo]::after {
            content: "";
            position: absolute;
            left: 2px;
            top: 6px;
            width: 9px;
            height: 2px;
            background: #fff;
        }

    .pm-cb:disabled[b-91ph26r3eo] {
        cursor: default;
    }

/* ===== Komunikaty ===== */
.pm-note[b-91ph26r3eo] {
    margin: 0.5rem 0.7rem;
    padding: 0.35rem 0.55rem;
    border-radius: 6px;
    background: var(--main-color-subtle);
    /* W trybie ciemnym --main-color-subtle to ciemny brąz, więc tekst musi iść za motywem,
       inaczej granatowo-brązowe na brązowym jest nieczytelne. */
    color: var(--ld-text, #7a2e00);
    font-size: 0.78rem;
}

.pm-note-off[b-91ph26r3eo] {
    background: var(--pm-surface-2);
    color: var(--pm-muted);
}

.pm-empty-state[b-91ph26r3eo] {
    padding: 0.9rem 0.7rem;
    color: var(--pm-muted);
    text-align: center;
}
/* /Components/Shared/Components/ProjectPickerPopup.razor.rz.scp.css */
/* === Picker projektu ===
   Lista rysowana ręcznie, a nie DxListBox: pozycja ma dwa poziomy (nazwa + metryczka)
   i znacznik „bieżący", czego listbox nie unosi bez szablonu i tak. */
.pp-body[b-f5dbgbsipp] {
    display: flex;
    flex-direction: column;
    gap: 10px;
}

.pp-toggle[b-f5dbgbsipp] {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    font-size: 12.5px;
    color: #4b5563;
    cursor: pointer;
    user-select: none;
    margin: 0;
}

.pp-list[b-f5dbgbsipp] {
    max-height: 340px;
    overflow-y: auto;
    border: 1px solid #e6e8ee;
    border-radius: 8px;
}

.pp-item[b-f5dbgbsipp] {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 9px 12px;
    border-bottom: 1px solid #f1f3f7;
    cursor: pointer;
}

    .pp-item:last-child[b-f5dbgbsipp] {
        border-bottom: none;
    }

    .pp-item:hover[b-f5dbgbsipp] {
        background: #f8fafc;
    }

    /* Klawiatura musi widzieć to samo co mysz — lista jest sterowalna Tab/Enter. */
    .pp-item:focus-visible[b-f5dbgbsipp] {
        outline: 2px solid #f97316;
        outline-offset: -2px;
    }

    .pp-item.picked[b-f5dbgbsipp] {
        background: #fff7ed;
        box-shadow: inset 3px 0 0 #f97316;
    }

.pp-status[b-f5dbgbsipp] {
    width: 8px;
    height: 8px;
    border-radius: 2px;
    flex: 0 0 8px;
}

.pp-text[b-f5dbgbsipp] {
    display: flex;
    flex-direction: column;
    gap: 2px;
    min-width: 0;
    flex: 1 1 auto;
}

.pp-title[b-f5dbgbsipp] {
    font-size: 13px;
    font-weight: 600;
    color: #111827;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.pp-sub[b-f5dbgbsipp] {
    display: flex;
    align-items: center;
    gap: 8px;
    font-size: 11px;
    color: #6b7280;
    overflow: hidden;
    white-space: nowrap;
}

.pp-id[b-f5dbgbsipp] {
    font-variant-numeric: tabular-nums;
    color: #9ca3af;
}

.pp-group[b-f5dbgbsipp] {
    margin-left: auto;
}

.pp-current-tag[b-f5dbgbsipp] {
    flex: 0 0 auto;
    font-size: 10px;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: .04em;
    color: #c2410c;
    background: #ffedd5;
    border-radius: 999px;
    padding: 2px 8px;
}

.pp-empty[b-f5dbgbsipp] {
    padding: 24px 8px;
    text-align: center;
    color: #9ca3af;
    font-size: 13px;
}

.pp-hint[b-f5dbgbsipp] {
    font-size: 12px;
    color: #6b7280;
}

.pp-footer[b-f5dbgbsipp] {
    display: flex;
    align-items: center;
    gap: 8px;
    width: 100%;
}

.pp-footer-spacer[b-f5dbgbsipp] {
    flex: 1 1 auto;
}

[b-f5dbgbsipp] .pp-search {
    width: 100%;
}
/* /Components/Shared/Components/ProjectTag.razor.rz.scp.css */
/* Pastylka projektu — ten sam rytm co `.status-tag` i `.invoice-tag` na liście zgłoszeń:
   mała ikonka plus nazwa, bez tła i obwódki. Kolor ikony wstrzykuje komponent
   (TopicVisuals.Color), więc nie ma tu klas per projekt i paleta nie może się rozjechać. */
.project-tag[b-xl992ctmut] {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    /* Oba potrzebne, żeby pastylka kurczyła się razem z wierszem zamiast go rozpychać:
       min-width pozwala zejść poniżej długości tekstu, max-width trzyma ją w rodzicu. */
    min-width: 0;
    max-width: 100%;
    font-size: 11px;
    font-weight: 600;
    line-height: 1.4;
    color: #374151;
    text-decoration: none;
    white-space: nowrap;
}

.project-tag:hover[b-xl992ctmut] {
    color: #111827;
    text-decoration: underline;
}

/* Ikona schematu jako maska na czarnym SVG — bierze kolor projektu z inline style, dokładnie
   jak paragon przy stanie faktury. Ta sama ikona co akcja „podepnij do projektu"
   w szczegółach zgłoszenia, żeby jedno pojęcie miało jeden znak. */
.project-tag-icon[b-xl992ctmut] {
    width: 12px;
    height: 12px;
    display: inline-block;
    flex-shrink: 0;
    -webkit-mask: url('/images/bootstrap-icons/diagram-3.svg') no-repeat center / contain;
    mask: url('/images/bootstrap-icons/diagram-3.svg') no-repeat center / contain;
}

/* Za długa nazwa przycina się wielokropkiem — nigdy nie łamie wiersza ani nie wypycha
   sąsiadów (numeru zgłoszenia, daty). Pełna nazwa zostaje w tooltipie linku. */
.project-tag-text[b-xl992ctmut] {
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

/* Ciasne miejsca (karta Kanbana obok innych tagów, wąska lista) — zostaje sama ikonka
   w kolorze projektu. Kolor niesie „który projekt", nazwa jest w tooltipie. */
.project-tag.compact[b-xl992ctmut] {
    gap: 0;
}

.project-tag.compact .project-tag-text[b-xl992ctmut] {
    display: none;
}
/* /Components/Shared/Components/RepresentativeContactHint.razor.rz.scp.css */
/* Zmienne --ld-* są definiowane tylko przez theme-dark.css, więc fallback w var() to tryb jasny. */
.rep-hint[b-l2y8uc84x7] {
    --rh-border: var(--ld-border, #ffd9c2);
    --rh-bg: var(--main-color-subtle, #fff4ec);
    --rh-text: var(--ld-text, #7a3d13);
    --rh-muted: var(--ld-text-muted, #8a5a35);

    margin-bottom: 0.75rem;
    padding: 0.6rem 0.8rem;
    border: 1px solid var(--rh-border);
    border-radius: 8px;
    background: var(--rh-bg);
    color: var(--rh-text);
    font-size: 0.85rem;
}

.rep-hint-title[b-l2y8uc84x7] {
    font-weight: 600;
    margin-bottom: 0.15rem;
}

.rep-hint-text[b-l2y8uc84x7] {
    color: var(--rh-muted);
    margin-bottom: 0.45rem;
}

.rep-hint-list[b-l2y8uc84x7] {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: 0.25rem;
}

.rep-hint-item[b-l2y8uc84x7] {
    display: flex;
    flex-wrap: wrap;
    align-items: baseline;
    gap: 0.25rem 0.9rem;
}

.rep-hint-name[b-l2y8uc84x7] {
    font-weight: 600;
}

.rep-hint-contact[b-l2y8uc84x7] {
    color: inherit;
    text-decoration: underline;
}

    .rep-hint-contact:hover[b-l2y8uc84x7] {
        color: var(--main-color);
    }
/* /Components/Shared/Components/TicketDock.razor.rz.scp.css */
/* Zakładki opuszczonych zgłoszeń — przyklejone do dolnej krawędzi okna, przy prawym rogu.
   Wygląd „zakładki" dosłownie: zaokrąglone tylko górne rogi, dolna krawędź wtopiona w brzeg
   ekranu, jak karta wystająca zza dolnej belki. Rząd rośnie w lewo od prawego marginesu. */
.ticket-dock[b-rtv3a5ked3] {
    position: fixed;
    right: 1.25rem;
    bottom: 0;
    /* Nad treścią i nad paskiem nawigacji po wiadomościach (900), pod oknami DevExpress
       (te mają 11000) — okno edycji ma zasłaniać zakładki, a nie odwrotnie. */
    z-index: 950;
    display: flex;
    align-items: flex-end;
    gap: 0.375rem;
    max-width: calc(100vw - 2.5rem);
    pointer-events: none;
}

.ticket-dock-tab[b-rtv3a5ked3] {
    pointer-events: auto;
    display: inline-flex;
    align-items: center;
    gap: 0.15rem;
    max-width: 17rem;
    padding: 0.4rem 0.45rem 0.45rem 0.65rem;
    background: #fff;
    color: #212529;
    border: 1px solid #dee2e6;
    border-bottom: none;
    border-radius: 10px 10px 0 0;
    box-shadow: 0 -4px 16px rgba(0, 0, 0, 0.10);
    font-size: 0.8rem;
    line-height: 1.2;
    white-space: nowrap;
    transition: transform 0.12s ease, box-shadow 0.12s ease, background 0.12s ease;
}

.ticket-dock-tab:hover[b-rtv3a5ked3],
.ticket-dock-tab:focus-within[b-rtv3a5ked3] {
    background: #fff7f2;
    transform: translateY(-2px);
    box-shadow: 0 -6px 20px rgba(0, 0, 0, 0.14);
}

/* Sam link — wypełnia zakładkę poza krzyżykiem, żeby całe pole tekstu prowadziło do zgłoszenia. */
.ticket-dock-link[b-rtv3a5ked3] {
    display: inline-flex;
    align-items: center;
    gap: 0.4rem;
    min-width: 0;
    color: inherit;
    text-decoration: none;
}

.ticket-dock-link:hover[b-rtv3a5ked3],
.ticket-dock-link:focus-visible[b-rtv3a5ked3] {
    color: inherit;
    text-decoration: none;
    outline: none;
}

/* Zakładka z niewysłaną odpowiedzią — cienka kreska w kolorze akcentu u góry, żeby ołówek
   nie był jedyną różnicą. */
.ticket-dock-tab-draft[b-rtv3a5ked3] {
    border-top: 2px solid #d9480f;
}

.ticket-dock-icon[b-rtv3a5ked3] {
    flex: 0 0 auto;
}

.ticket-dock-number[b-rtv3a5ked3] {
    flex: 0 0 auto;
    font-weight: 600;
    font-variant-numeric: tabular-nums;
}

.ticket-dock-subject[b-rtv3a5ked3] {
    flex: 1 1 auto;
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    color: #6b7280;
}

/* Krzyżyk: wygląda jak część zakładki, dopiero po najechaniu dostaje własne tło. */
.ticket-dock-close[b-rtv3a5ked3] {
    flex: 0 0 auto;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 1.35rem;
    height: 1.35rem;
    margin-left: 0.15rem;
    padding: 0;
    border: none;
    border-radius: 999px;
    background: transparent;
    cursor: pointer;
    opacity: 0.6;
}

.ticket-dock-close:hover[b-rtv3a5ked3],
.ticket-dock-close:focus-visible[b-rtv3a5ked3] {
    background: rgba(0, 0, 0, 0.08);
    opacity: 1;
    outline: none;
}

/* Wąski ekran: sam numer, temat by nie zmieścił się obok paska akcji list. */
@media (max-width: 575.98px) {
    .ticket-dock[b-rtv3a5ked3] {
        right: 0.5rem;
    }

    .ticket-dock-subject[b-rtv3a5ked3] {
        display: none;
    }
}
/* /Components/Shared/Components/TicketLinkPopup.razor.rz.scp.css */
/* === Wyszukiwarka zgłoszeń do podpięcia pod projekt === */
.tl-body[b-ghto2dzcr6] {
    display: flex;
    flex-direction: column;
    gap: 10px;
}

.tl-filters[b-ghto2dzcr6] {
    display: flex;
    align-items: center;
    gap: 18px;
    flex-wrap: wrap;
}

.tl-toggle[b-ghto2dzcr6] {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    font-size: 12.5px;
    color: #4b5563;
    cursor: pointer;
    user-select: none;
    margin: 0;
}

/* Wybrane zgłoszenia jako pastylki — po zwinięciu wyników wciąż widać, co poleci do zapisu. */
.tl-chips[b-ghto2dzcr6] {
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
}

.tl-chip[b-ghto2dzcr6] {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    background: #ffedd5;
    color: #c2410c;
    border-radius: 999px;
    padding: 3px 6px 3px 10px;
    font-size: 11.5px;
    font-weight: 600;
    font-variant-numeric: tabular-nums;
}

.tl-chip-x[b-ghto2dzcr6] {
    border: none;
    background: transparent;
    color: inherit;
    cursor: pointer;
    line-height: 1;
    padding: 0 4px;
    font-size: 11px;
    border-radius: 999px;
}

    .tl-chip-x:hover[b-ghto2dzcr6] {
        background: rgba(194, 65, 12, .15);
    }

/* Podpis nad domyślną listą — mówi, CZYJE zgłoszenia są na ekranie. Celowo cichy: to
   objaśnienie listy, a nie kolejny nagłówek nad nią. */
.tl-hint[b-ghto2dzcr6] {
    color: #6b7280;
    font-size: 12px;
    margin: 2px 2px 6px;
}

.tl-list[b-ghto2dzcr6] {
    max-height: 320px;
    overflow-y: auto;
    border: 1px solid #e6e8ee;
    border-radius: 8px;
}

.tl-item[b-ghto2dzcr6] {
    display: flex;
    align-items: flex-start;
    gap: 10px;
    padding: 9px 12px;
    border-bottom: 1px solid #f1f3f7;
    cursor: pointer;
}

    .tl-item:last-child[b-ghto2dzcr6] {
        border-bottom: none;
    }

    .tl-item:hover[b-ghto2dzcr6] {
        background: #f8fafc;
    }

    .tl-item:focus-visible[b-ghto2dzcr6] {
        outline: 2px solid #f97316;
        outline-offset: -2px;
    }

    .tl-item.picked[b-ghto2dzcr6] {
        background: #fff7ed;
        box-shadow: inset 3px 0 0 #f97316;
    }

    /* Zgłoszenie już stojące w TYM projekcie — zostaje na liście (żeby było widać, że jest),
       ale nie da się go wybrać po raz drugi. */
    .tl-item.disabled[b-ghto2dzcr6] {
        opacity: .55;
        cursor: default;
    }

.tl-check[b-ghto2dzcr6] {
    flex: 0 0 16px;
    width: 16px;
    height: 16px;
    border: 1px solid #cbd5e1;
    border-radius: 4px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-size: 11px;
    line-height: 1;
    color: #c2410c;
    background: #fff;
    margin-top: 2px;
}

.tl-item.picked .tl-check[b-ghto2dzcr6] {
    border-color: #f97316;
    background: #ffedd5;
}

.tl-text[b-ghto2dzcr6] {
    display: flex;
    flex-direction: column;
    gap: 3px;
    min-width: 0;
    flex: 1 1 auto;
}

.tl-line1[b-ghto2dzcr6] {
    display: flex;
    align-items: baseline;
    gap: 8px;
    min-width: 0;
}

.tl-number[b-ghto2dzcr6] {
    font-size: 12px;
    font-weight: 700;
    color: #6b7280;
    font-variant-numeric: tabular-nums;
    flex: 0 0 auto;
}

.tl-subject[b-ghto2dzcr6] {
    font-size: 13px;
    color: #111827;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    min-width: 0;
}

.tl-line2[b-ghto2dzcr6] {
    display: flex;
    align-items: center;
    gap: 10px;
    font-size: 11px;
    color: #6b7280;
    min-width: 0;
    flex-wrap: wrap;
}

.tl-date[b-ghto2dzcr6] {
    font-variant-numeric: tabular-nums;
}

.tl-intopic[b-ghto2dzcr6] {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    margin-left: auto;
    color: #c2410c;
    max-width: 45%;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.tl-empty[b-ghto2dzcr6] {
    padding: 24px 8px;
    text-align: center;
    color: #9ca3af;
    font-size: 13px;
}

.tl-footer[b-ghto2dzcr6] {
    display: flex;
    align-items: center;
    gap: 8px;
    width: 100%;
}

.tl-count[b-ghto2dzcr6] {
    flex: 1 1 auto;
    font-size: 12px;
    color: #6b7280;
}

[b-ghto2dzcr6] .tl-search {
    width: 100%;
}

/* Status w wynikach — te same pastylki co na liście zgłoszeń. */
.status-tag[b-ghto2dzcr6] {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    font-size: 11px;
    font-weight: 600;
    line-height: 1.4;
    color: #374151;
    white-space: nowrap;
}

.status-tag-dot[b-ghto2dzcr6] {
    width: 7px;
    height: 7px;
    border-radius: 2px;
    display: inline-block;
    flex-shrink: 0;
}
/* /Components/Shared/Components/TicketMergePopup.razor.rz.scp.css */
/* === Łączenie zgłoszeń ===
   Ta sama konstrukcja listy co w pickerze projektu (dwa poziomy tekstu + znacznik po prawej),
   tylko znacznik niesie tu skutek operacji: „główne" zostaje, „wchłaniane" zniknie. */
.tm-body[b-vkbc2cn38r] {
    display: flex;
    flex-direction: column;
    gap: 10px;
}

.tm-lead[b-vkbc2cn38r] {
    font-size: 13px;
    color: #374151;
}

.tm-list[b-vkbc2cn38r] {
    max-height: 340px;
    overflow-y: auto;
    border: 1px solid #e6e8ee;
    border-radius: 8px;
}

.tm-item[b-vkbc2cn38r] {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 9px 12px;
    border-bottom: 1px solid #f1f3f7;
    cursor: pointer;
}

    .tm-item:last-child[b-vkbc2cn38r] {
        border-bottom: none;
    }

    .tm-item:hover[b-vkbc2cn38r] {
        background: #f8fafc;
    }

    .tm-item:focus-visible[b-vkbc2cn38r] {
        outline: 2px solid #f97316;
        outline-offset: -2px;
    }

    .tm-item.picked[b-vkbc2cn38r] {
        background: #fff7ed;
        box-shadow: inset 3px 0 0 #f97316;
    }

.tm-status[b-vkbc2cn38r] {
    width: 8px;
    height: 8px;
    border-radius: 2px;
    flex: 0 0 8px;
}

.tm-text[b-vkbc2cn38r] {
    display: flex;
    flex-direction: column;
    gap: 2px;
    min-width: 0;
    flex: 1 1 auto;
}

.tm-title[b-vkbc2cn38r] {
    font-size: 13px;
    font-weight: 600;
    color: #111827;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.tm-sub[b-vkbc2cn38r] {
    display: flex;
    align-items: center;
    gap: 8px;
    font-size: 11px;
    color: #6b7280;
    overflow: hidden;
    white-space: nowrap;
}

.tm-number[b-vkbc2cn38r] {
    font-variant-numeric: tabular-nums;
    color: #9ca3af;
}

.tm-group[b-vkbc2cn38r] {
    margin-left: auto;
}

.tm-tag[b-vkbc2cn38r] {
    flex: 0 0 auto;
    font-size: 10px;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: .04em;
    border-radius: 999px;
    padding: 2px 8px;
}

    .tm-tag.master[b-vkbc2cn38r] {
        color: #c2410c;
        background: #ffedd5;
    }

    .tm-tag.absorbed[b-vkbc2cn38r] {
        color: #b91c1c;
        background: #fee2e2;
    }

.tm-warn[b-vkbc2cn38r] {
    font-size: 12px;
    color: #92400e;
    background: #fffbeb;
    border: 1px solid #fde68a;
    border-radius: 8px;
    padding: 8px 10px;
}

.tm-progress[b-vkbc2cn38r] {
    font-size: 12px;
    font-weight: 600;
    color: #c2410c;
}

.tm-footer[b-vkbc2cn38r] {
    display: flex;
    align-items: center;
    gap: 8px;
    width: 100%;
}

.tm-footer-spacer[b-vkbc2cn38r] {
    flex: 1 1 auto;
}
/* /Components/Shared/Components/TicketMessageNav.razor.rz.scp.css */
/* Pasek nawigacji po wiadomościach: przyklejony do prawej krawędzi, wyśrodkowany w pionie.
   Zwinięty to sam pasek kresek (wąski), po najechaniu rozwija się w kartę z listą. */
.tmn[b-s42x935ycr] {
    position: fixed;
    right: 10px;
    top: 50%;
    transform: translateY(-50%);
    /* Nad treścią, ale POD okienkami edycji i nakładką ładowania (te mają 11000). */
    z-index: 900;
    display: flex;
    justify-content: flex-end;
}

.tmn-inner[b-s42x935ycr] {
    background: transparent;
    border: 1px solid transparent;
    border-radius: 10px;
    padding: 8px 6px;
    max-height: 70vh;
    overflow: hidden auto;
    transition: background 0.15s ease, border-color 0.15s ease, box-shadow 0.15s ease, padding 0.15s ease;
    scrollbar-width: thin;
}

.tmn:hover .tmn-inner[b-s42x935ycr],
.tmn:focus-within .tmn-inner[b-s42x935ycr] {
    background: #fff;
    border-color: #dee2e6;
    box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12);
    padding: 10px 12px;
}

/* Nagłówek („Wiadomości (12)") pojawia się dopiero po rozwinięciu. */
.tmn-title[b-s42x935ycr] {
    display: none;
    font-size: 0.72rem;
    text-transform: uppercase;
    letter-spacing: 0.04em;
    color: #6c757d;
    margin-bottom: 6px;
    white-space: nowrap;
}

.tmn:hover .tmn-title[b-s42x935ycr],
.tmn:focus-within .tmn-title[b-s42x935ycr] {
    display: block;
}

.tmn-list[b-s42x935ycr] {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: 2px;
}

.tmn-item[b-s42x935ycr] {
    display: flex;
    align-items: center;
    gap: 8px;
    width: 100%;
    border: none;
    background: transparent;
    padding: 3px 4px;
    border-radius: 6px;
    cursor: pointer;
    text-align: left;
    color: #4b5563;
}

    .tmn-item:hover[b-s42x935ycr] {
        background: #f1f3f5;
        color: #111827;
    }

/* Kreska = wiadomość. W stanie zwiniętym to jedyny widoczny element. */
.tmn-dash[b-s42x935ycr] {
    flex: 0 0 auto;
    width: 14px;
    height: 2px;
    border-radius: 2px;
    background: #adb5bd;
    transition: width 0.15s ease, background 0.15s ease;
}

.tmn-item:hover .tmn-dash[b-s42x935ycr] {
    background: #6c757d;
}

/* Wiadomość aktualnie widoczna w oknie — dłuższa i wyraźniejsza kreska. */
.tmn-item.active .tmn-dash[b-s42x935ycr] {
    width: 22px;
    background: #f97316;
}

.tmn-item.active .tmn-author[b-s42x935ycr] {
    color: #111827;
    font-weight: 600;
}

/* Podpisy (autor + początek treści) tylko po rozwinięciu. */
.tmn-text[b-s42x935ycr] {
    display: none;
    min-width: 0;
    flex-direction: column;
    line-height: 1.2;
}

.tmn:hover .tmn-text[b-s42x935ycr],
.tmn:focus-within .tmn-text[b-s42x935ycr] {
    display: flex;
}

.tmn-author[b-s42x935ycr] {
    font-size: 0.8rem;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    max-width: 220px;
}

.tmn-preview[b-s42x935ycr] {
    font-size: 0.72rem;
    color: #6c757d;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    max-width: 220px;
}

/* Na wąskich ekranach pasek zasłaniałby treść — tam go nie pokazujemy. */
@media (max-width: 991px) {
    .tmn[b-s42x935ycr] {
        display: none;
    }
}
/* /Components/Shared/Components/TicketStatusBulkPopup.razor.rz.scp.css */
/* === Zbiorcza zmiana statusu ===
   Lista rysowana ręcznie (jak w pickerze projektu), bo pozycja niesie kolor statusu
   i znacznik „bieżący" — sam DxListBox i tak wymagałby szablonu. */
.sb-body[b-r7o7wn3ajb] {
    display: flex;
    flex-direction: column;
    gap: 10px;
}

.sb-list[b-r7o7wn3ajb] {
    overflow-y: auto;
    border: 1px solid #e6e8ee;
    border-radius: 8px;
}

.sb-item[b-r7o7wn3ajb] {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 10px 12px;
    border-bottom: 1px solid #f1f3f7;
    cursor: pointer;
}

    .sb-item:last-child[b-r7o7wn3ajb] {
        border-bottom: none;
    }

    .sb-item:hover[b-r7o7wn3ajb] {
        background: #f8fafc;
    }

    /* Klawiatura musi widzieć to samo co mysz — lista jest sterowalna Tab/Enter. */
    .sb-item:focus-visible[b-r7o7wn3ajb] {
        outline: 2px solid #f97316;
        outline-offset: -2px;
    }

    .sb-item.picked[b-r7o7wn3ajb] {
        background: #fff7ed;
        box-shadow: inset 3px 0 0 #f97316;
    }

.sb-dot[b-r7o7wn3ajb] {
    width: 8px;
    height: 8px;
    border-radius: 999px;
    flex: 0 0 8px;
}

.sb-title[b-r7o7wn3ajb] {
    font-size: 13px;
    font-weight: 600;
    color: #111827;
    flex: 1 1 auto;
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.sb-current-tag[b-r7o7wn3ajb] {
    flex: 0 0 auto;
    font-size: 10px;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: .04em;
    color: #c2410c;
    background: #ffedd5;
    border-radius: 999px;
    padding: 2px 8px;
}

.sb-hint[b-r7o7wn3ajb] {
    font-size: 12px;
    color: #6b7280;
}

.sb-warn[b-r7o7wn3ajb] {
    font-size: 12px;
    color: #92400e;
    background: #fffbeb;
    border: 1px solid #fde68a;
    border-radius: 8px;
    padding: 8px 10px;
}

.sb-progress[b-r7o7wn3ajb] {
    font-size: 12px;
    font-weight: 600;
    color: #c2410c;
}

.sb-footer[b-r7o7wn3ajb] {
    display: flex;
    align-items: center;
    gap: 8px;
    width: 100%;
}

.sb-footer-spacer[b-r7o7wn3ajb] {
    flex: 1 1 auto;
}
/* /Components/Shared/Components/TicketTeamNotes.razor.rz.scp.css */
/* Karta „Tablica zespołu" w szczegółach zgłoszenia. Otoczka (.details-card) jest stylowana
   przez Detail.razor.css i theme-dark.css — tutaj tylko zawartość listy. */

.ttn-more[b-zzgl6lwbkh] {
    font-size: 0.72rem;
    font-weight: 500;
    color: #6b7280;
    text-decoration: none;
    text-transform: none;
    letter-spacing: 0;
}

    .ttn-more:hover[b-zzgl6lwbkh] {
        text-decoration: underline;
    }

.ttn-empty[b-zzgl6lwbkh] {
    font-size: 0.8rem;
    color: #9ca3af;
    padding: 2px 0 6px;
}

.ttn-list[b-zzgl6lwbkh] {
    list-style: none;
    padding: 0;
    margin: 0 0 6px;
    display: flex;
    flex-direction: column;
    gap: 8px;
    max-height: 260px;
    overflow-y: auto;
}

.ttn-item[b-zzgl6lwbkh] {
    display: flex;
    align-items: flex-start;
    gap: 8px;
    padding-bottom: 8px;
    border-bottom: 1px solid #f1f3f5;
}

    .ttn-item:last-child[b-zzgl6lwbkh] {
        border-bottom: none;
        padding-bottom: 0;
    }

.ttn-kind[b-zzgl6lwbkh] {
    flex-shrink: 0;
    font-size: 0.64rem;
    font-weight: 700;
    line-height: 1;
    padding: 4px 7px;
    border-radius: 999px;
    white-space: nowrap;
}

.ttn-kind-note[b-zzgl6lwbkh] {
    background: #dbeafe;
    color: #1d4ed8;
}

.ttn-kind-handover[b-zzgl6lwbkh] {
    background: #fdeecd;
    color: #92400e;
}

.ttn-kind-alert[b-zzgl6lwbkh] {
    background: #fde0e0;
    color: #b91c1c;
}

.ttn-body[b-zzgl6lwbkh] {
    min-width: 0;
    flex: 1;
}

.ttn-title[b-zzgl6lwbkh] {
    font-size: 0.82rem;
    font-weight: 600;
    color: #1e293b;
    overflow-wrap: anywhere;
}

.ttn-text[b-zzgl6lwbkh] {
    font-size: 0.8rem;
    line-height: 1.45;
    color: #374151;
    overflow-wrap: anywhere;
}

    .ttn-text p[b-zzgl6lwbkh] {
        margin: 0 0 0.3rem;
    }

        .ttn-text p:last-child[b-zzgl6lwbkh] {
            margin-bottom: 0;
        }

    .ttn-text img[b-zzgl6lwbkh] {
        max-width: 100%;
        height: auto;
        border-radius: 6px;
    }

.ttn-meta[b-zzgl6lwbkh] {
    display: flex;
    align-items: center;
    gap: 5px;
    margin-top: 3px;
    font-size: 0.7rem;
    color: #9ca3af;
}

.ttn-dot[b-zzgl6lwbkh] {
    color: #d1d5db;
}

.ttn-add[b-zzgl6lwbkh] {
    display: flex;
    align-items: center;
    gap: 6px;
    margin-top: 4px;
}

[b-zzgl6lwbkh] .ttn-add-input {
    flex: 1 1 auto;
}
/* /Components/Shared/GanttChart.razor.rz.scp.css */
.logdesk-gantt[b-5w8wdsoslp] {
    width: 100%;
    max-width: 100%;
    min-width: 0;
    overflow-x: auto;
    overflow-y: hidden;
}

/* Tryb tylko-do-odczytu (np. /analytics): slupki bez interakcji przeciagania */
.logdesk-gantt.gantt-readonly[b-5w8wdsoslp]  .bar-wrapper,
.logdesk-gantt.gantt-readonly[b-5w8wdsoslp]  .handle {
    pointer-events: none;
}
/* /Components/Shared/GlobalSearch.razor.rz.scp.css */
/* ===== Pasek wyszukiwania w nagłówku =====
   [typ ⌄] | lupka + fraza | [zakres ⌄] [Ctrl + K], wyniki rozwijane pod spodem. */

/* Warstwa łapiąca klik poza paskiem — ta sama sztuczka co w AppLauncherze. */
.gsb-backdrop[b-vodw3farll] {
    position: fixed;
    inset: 0;
    z-index: 1040;
}

/* Środek NAGŁÓWKA, nie środek wolnego miejsca między breadcrumbem a ikonami — inaczej
   pasek ucieka w lewo o szerokość logo. Szerokość zostawia miejsce na obie strony. */
.gsb[b-vodw3farll] {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    width: min(620px, calc(100vw - 720px));
    min-width: 340px;
    z-index: 1041;
}

.gsb-bar[b-vodw3farll] {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    height: 40px;
    padding: 0 0.35rem 0 0.25rem;
    border: 1px solid #e5e7eb;
    border-radius: 10px;
    background: #f9fafb;
    transition: border-color 0.15s ease, box-shadow 0.15s ease, background 0.15s ease;
}

    .gsb-bar:focus-within[b-vodw3farll],
    .gsb.has-panel .gsb-bar[b-vodw3farll] {
        border-color: #fdba74;
        background: #fff;
        box-shadow: 0 0 0 3px rgba(249, 115, 22, 0.12);
    }

.gsb-sep[b-vodw3farll] {
    flex-shrink: 0;
    width: 1px;
    height: 20px;
    background: #e5e7eb;
}

/* Ikony z paczki bootstrap-icons są czarne — przygaszamy kryciem, nie filtrem
   (w motywie ciemnym globalna reguła nadpisuje filter z !important). */
.gsb-icon[b-vodw3farll],
.gsb-chevron[b-vodw3farll],
.gsb-scope-icon[b-vodw3farll],
.gsb-collapsed > span[b-vodw3farll] {
    flex-shrink: 0;
    opacity: 0.5;
}

/* Klient ma tylko zgłoszenia, więc nie ma przełącznika typu — wtedy lupka otwiera pasek
   i bez odstępu przykleja się do jego krawędzi. */
.gsb-bar > .gsb-icon:first-child[b-vodw3farll] {
    margin-left: 0.4rem;
}

.gsb-chevron[b-vodw3farll] {
    width: 10px;
    height: 10px;
    background-size: 10px;
}

.gsb-input[b-vodw3farll] {
    flex: 1 1 auto;
    min-width: 0;
    height: 100%;
    padding: 0;
    border: none;
    outline: none;
    background: transparent;
    color: #1f2937;
    font-size: 0.875rem;
}

    .gsb-input[b-vodw3farll]::placeholder {
        color: #9ca3af;
    }

    /* Własny „×" przeglądarki nie pasuje do paska; czyszczenie to Esc/zaznacz+usuń. */
    .gsb-input[b-vodw3farll]::-webkit-search-cancel-button {
        -webkit-appearance: none;
    }

.gsb-drop[b-vodw3farll] {
    position: relative;
    flex-shrink: 0;
}

.gsb-type[b-vodw3farll],
.gsb-scope[b-vodw3farll] {
    display: flex;
    align-items: center;
    gap: 0.35rem;
    height: 30px;
    padding: 0 0.55rem;
    border: none;
    border-radius: 7px;
    background: transparent;
    color: #1f2937;
    font-size: 0.8125rem;
    font-weight: 600;
    white-space: nowrap;
    cursor: pointer;
}

.gsb-scope[b-vodw3farll] {
    border: 1px solid #e5e7eb;
    background: #fff;
    font-weight: 500;
}

    .gsb-type:hover[b-vodw3farll],
    .gsb-type[aria-expanded="true"][b-vodw3farll],
    .gsb-scope:hover[b-vodw3farll],
    .gsb-scope[aria-expanded="true"][b-vodw3farll] {
        background: rgba(15, 23, 42, 0.06);
    }

.gsb-kbd[b-vodw3farll] {
    flex-shrink: 0;
    padding: 2px 6px;
    border: 1px solid #e5e7eb;
    border-radius: 5px;
    background: #fff;
    box-shadow: none;
    color: #6b7280;
    font-family: inherit;
    font-size: 0.6875rem;
    font-weight: 600;
    white-space: nowrap;
}

.gsb-menu[b-vodw3farll] {
    position: absolute;
    top: calc(100% + 6px);
    left: 0;
    min-width: 170px;
    padding: 4px;
    border: 1px solid #e5e7eb;
    border-radius: 10px;
    background: #fff;
    box-shadow: 0 12px 32px rgba(15, 23, 42, 0.14);
    z-index: 2;
}

.gsb-menu-right[b-vodw3farll] {
    left: auto;
    right: 0;
}

.gsb-menu-item[b-vodw3farll] {
    display: block;
    width: 100%;
    padding: 6px 10px;
    border: none;
    border-radius: 6px;
    background: transparent;
    color: #1f2937;
    font-size: 0.8125rem;
    text-align: left;
    white-space: nowrap;
    cursor: pointer;
}

    .gsb-menu-item:hover[b-vodw3farll] {
        background: #f3f4f6;
    }

    .gsb-menu-item.is-active[b-vodw3farll] {
        color: #ea580c;
        font-weight: 600;
    }

/* ===== Lista wyników ===== */
.gsb-panel[b-vodw3farll] {
    position: absolute;
    top: calc(100% + 6px);
    left: 0;
    right: 0;
    display: flex;
    flex-direction: column;
    border: 1px solid #e5e7eb;
    border-radius: 12px;
    background: #fff;
    box-shadow: 0 18px 45px rgba(15, 23, 42, 0.18);
    overflow: hidden;
}

.gsb-state[b-vodw3farll] {
    padding: 1rem;
    text-align: center;
    font-size: 0.8125rem;
    color: #6b7280;
}

.gsb-results[b-vodw3farll] {
    display: flex;
    flex-direction: column;
    gap: 2px;
    max-height: min(65vh, 560px);
    overflow-y: auto;
    padding: 0 0.5rem 0.5rem;
    transition: opacity 0.15s ease;
}

    .gsb-results.is-stale[b-vodw3farll] {
        opacity: 0.55;
    }

.gsb-group[b-vodw3farll] {
    position: sticky;
    top: 0;
    z-index: 1;
    display: flex;
    align-items: center;
    gap: 0.4rem;
    padding: 0.6rem 0.4rem 0.3rem;
    background: #fff;
    font-size: 0.6875rem;
    font-weight: 600;
    letter-spacing: 0.03em;
    text-transform: uppercase;
    color: #6b7280;
}

.gsb-count[b-vodw3farll] {
    padding: 0 6px;
    border-radius: 999px;
    background: #f3f4f6;
    font-size: 0.625rem;
    line-height: 1rem;
}

.gsb-item[b-vodw3farll] {
    display: flex;
    align-items: flex-start;
    gap: 0.6rem;
    padding: 0.5rem 0.6rem;
    border-radius: 8px;
    color: inherit;
    text-decoration: none;
    min-width: 0;
}

    .gsb-item.is-current[b-vodw3farll] {
        background: #fff7ed;
    }

.gsb-item-icon[b-vodw3farll] {
    flex-shrink: 0;
    margin-top: 2px;
    opacity: 0.45;
}

.gsb-item-main[b-vodw3farll] {
    display: flex;
    flex-direction: column;
    gap: 2px;
    flex: 1 1 auto;
    min-width: 0;
}

.gsb-item-title[b-vodw3farll] {
    display: flex;
    align-items: baseline;
    gap: 0.5rem;
    min-width: 0;
    font-size: 0.8125rem;
}

.gsb-item-number[b-vodw3farll] {
    flex-shrink: 0;
    font-weight: 600;
    color: #ea580c;
    font-variant-numeric: tabular-nums;
}

.gsb-item-text[b-vodw3farll] {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    color: #1f2937;
}

.gsb-item-snippet[b-vodw3farll] {
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
    overflow-wrap: anywhere;
    font-size: 0.75rem;
    line-height: 1.35;
    color: #4b5563;
}

    .gsb-item-snippet mark[b-vodw3farll] {
        padding: 0 1px;
        border-radius: 2px;
        background: #fed7aa;
        color: inherit;
    }

.gsb-item-meta[b-vodw3farll] {
    display: flex;
    align-items: center;
    gap: 0.35rem;
    min-width: 0;
    font-size: 0.6875rem;
    color: #9ca3af;
}

.gsb-dot[b-vodw3farll] {
    opacity: 0.7;
}

.gsb-item-tags[b-vodw3farll] {
    display: flex;
    flex-direction: column;
    align-items: flex-end;
    gap: 3px;
    flex-shrink: 0;
}

.gsb-tag[b-vodw3farll] {
    padding: 1px 7px;
    border-radius: 999px;
    background: #ffedd5;
    color: #c2410c;
    font-size: 0.625rem;
    line-height: 1rem;
    white-space: nowrap;
}

    .gsb-tag.is-muted[b-vodw3farll] {
        background: #f3f4f6;
        color: #6b7280;
    }

.gsb-limit[b-vodw3farll] {
    padding: 0.5rem 0 0.25rem;
    font-size: 0.6875rem;
}

.gsb-footer[b-vodw3farll] {
    padding: 0.4rem 0.9rem;
    border-top: 1px solid #f0f1f3;
    background: #fafafa;
    font-size: 0.6875rem;
    color: #9ca3af;
}

/* ===== Wąskie ekrany: sama lupka, pasek rozwija się na całą szerokość nagłówka ===== */
.gsb-collapsed[b-vodw3farll] {
    display: none;
    align-items: center;
    justify-content: center;
    width: 40px;
    height: 40px;
    padding: 0;
    border: none;
    border-radius: 50%;
    background: transparent;
    cursor: pointer;
}

    .gsb-collapsed:hover[b-vodw3farll] {
        background: rgba(15, 23, 42, 0.08);
    }

@media (max-width: 1099.98px) {
    .gsb[b-vodw3farll] {
        position: static;
        transform: none;
        width: auto;
        min-width: 0;
        flex: 0 0 auto;
        margin: 0 0 0 auto;
    }

    .gsb-collapsed[b-vodw3farll] {
        display: flex;
    }

    .gsb-bar[b-vodw3farll] {
        display: none;
    }

    .gsb.is-expanded .gsb-collapsed[b-vodw3farll] {
        display: none;
    }

    .gsb.is-expanded .gsb-bar[b-vodw3farll] {
        display: flex;
        position: absolute;
        top: 50%;
        left: 0.5rem;
        right: 0.5rem;
        transform: translateY(-50%);
        z-index: 1041;
        background: #fff;
    }

    .gsb-panel[b-vodw3farll] {
        position: absolute;
        top: calc(100% - 4px);
        left: 0.5rem;
        right: 0.5rem;
        z-index: 1041;
    }

    .gsb-type > span:first-child[b-vodw3farll],
    .gsb-scope > span:nth-child(2)[b-vodw3farll] {
        display: none;
    }
}

/* ===== Motyw ciemny ===== */
html[data-theme="dark"] .gsb-bar[b-vodw3farll] {
    border-color: var(--ld-border);
    background: var(--ld-surface-2);
}

    html[data-theme="dark"] .gsb-bar:focus-within[b-vodw3farll],
    html[data-theme="dark"] .gsb.has-panel .gsb-bar[b-vodw3farll] {
        border-color: rgba(249, 115, 22, 0.55);
        background: var(--ld-surface);
        box-shadow: 0 0 0 3px rgba(249, 115, 22, 0.18);
    }

html[data-theme="dark"] .gsb-sep[b-vodw3farll] {
    background: var(--ld-border);
}

html[data-theme="dark"] .gsb-input[b-vodw3farll],
html[data-theme="dark"] .gsb-type[b-vodw3farll],
html[data-theme="dark"] .gsb-scope[b-vodw3farll],
html[data-theme="dark"] .gsb-menu-item[b-vodw3farll],
html[data-theme="dark"] .gsb-item-text[b-vodw3farll] {
    color: var(--ld-text);
}

html[data-theme="dark"] .gsb-input[b-vodw3farll]::placeholder {
    color: var(--ld-text-muted);
}

html[data-theme="dark"] .gsb-scope[b-vodw3farll],
html[data-theme="dark"] .gsb-kbd[b-vodw3farll] {
    border-color: var(--ld-border);
    background: var(--ld-surface-3);
    color: var(--ld-text-muted);
}

html[data-theme="dark"] .gsb-scope[b-vodw3farll] {
    color: var(--ld-text);
}

    html[data-theme="dark"] .gsb-type:hover[b-vodw3farll],
    html[data-theme="dark"] .gsb-type[aria-expanded="true"][b-vodw3farll],
    html[data-theme="dark"] .gsb-scope:hover[b-vodw3farll],
    html[data-theme="dark"] .gsb-scope[aria-expanded="true"][b-vodw3farll],
    html[data-theme="dark"] .gsb-collapsed:hover[b-vodw3farll] {
        background: var(--ld-surface-3);
    }

html[data-theme="dark"] .gsb-menu[b-vodw3farll],
html[data-theme="dark"] .gsb-panel[b-vodw3farll] {
    border-color: var(--ld-border);
    background: var(--ld-surface);
    box-shadow: 0 18px 45px rgba(0, 0, 0, 0.6);
}

html[data-theme="dark"] .gsb-menu-item:hover[b-vodw3farll] {
    background: var(--ld-surface-2);
}

html[data-theme="dark"] .gsb-menu-item.is-active[b-vodw3farll],
html[data-theme="dark"] .gsb-item-number[b-vodw3farll] {
    color: #fb923c;
}

html[data-theme="dark"] .gsb-group[b-vodw3farll] {
    background: var(--ld-surface);
}

html[data-theme="dark"] .gsb-group[b-vodw3farll],
html[data-theme="dark"] .gsb-state[b-vodw3farll],
html[data-theme="dark"] .gsb-item-meta[b-vodw3farll],
html[data-theme="dark"] .gsb-item-snippet[b-vodw3farll],
html[data-theme="dark"] .gsb-footer[b-vodw3farll] {
    color: var(--ld-text-muted);
}

html[data-theme="dark"] .gsb-count[b-vodw3farll],
html[data-theme="dark"] .gsb-tag.is-muted[b-vodw3farll] {
    background: var(--ld-surface-3);
    color: var(--ld-text-muted);
}

html[data-theme="dark"] .gsb-item.is-current[b-vodw3farll] {
    background: var(--ld-surface-2);
}

html[data-theme="dark"] .gsb-item-snippet mark[b-vodw3farll] {
    background: rgba(249, 115, 22, 0.35);
}

html[data-theme="dark"] .gsb-tag[b-vodw3farll] {
    background: rgba(249, 115, 22, 0.18);
    color: #fdba74;
}

html[data-theme="dark"] .gsb-footer[b-vodw3farll] {
    border-top-color: var(--ld-border);
    background: var(--ld-surface-2);
}

@media (max-width: 1099.98px) {
    html[data-theme="dark"] .gsb.is-expanded .gsb-bar[b-vodw3farll] {
        background: var(--ld-surface);
    }
}
/* /Components/Shared/Header.razor.rz.scp.css */
.navbar[b-tnr3da1rlp] {
    flex-grow: 0;
    flex-wrap: nowrap;
    border: none;
    background-color: white;
    border-radius: 0;
    height: 3.5rem;
    min-height: 3.5rem;
    box-shadow: 0px 2px 6px 0px rgba(0, 0, 0, 0.12);
    justify-content: flex-start;
    z-index: 1000;
    position: relative;
}

    .navbar .navbar-toggler[b-tnr3da1rlp] {
        outline: none;
        border-radius: 0;
        padding-left: .75rem;
        padding-right: .75rem;
        box-shadow: none;
        align-self: stretch;
    }

        .navbar .navbar-toggler .navbar-toggler-icon[b-tnr3da1rlp] {
            background-image: url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255,255,255, 1)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 8h24M4 16h24M4 24h24'/%3E%3C/svg%3E");
            background-color: transparent !important;
            height: 2rem;
            width: 2rem;
        }

.header-hamburger[b-tnr3da1rlp] {
    width: 40px;
    height: 40px;
    padding: 0;
    margin-left: 26px !important;
    display: flex;
    align-items: center;
    justify-content: center;
    background: transparent;
    border-radius: 10px;
    cursor: pointer;
    color: black;
}

.header-logo-img[b-tnr3da1rlp] {
    margin-left: 8px !important;
    height: 62px;
    width: auto;
    object-fit: contain;
    display: block;
}

/* Wariant logo dla trybu ciemnego domyślnie ukryty; motyw ciemny go pokazuje
   i ukrywa wariant jasny (patrz css/theme-dark.css). */
.header-logo-dark[b-tnr3da1rlp] {
    display: none;
}

@media (max-width: 768px) {
    .header-logo-img[b-tnr3da1rlp] {
        height: 28px;
    }

    .header-hamburger .icon[b-tnr3da1rlp] {
        font-size: 18px;
        position: relative;
        top: 1px;
    }
}

.header-announcement[b-tnr3da1rlp] {
    background: #f59e0b;
    color: #fff;
    border-radius: 999px;
    padding: 2px 8px;
    font-size: 0.75rem;
    white-space: nowrap;
}


.header-breadcrumb[b-tnr3da1rlp] {
    margin-left: 1.5rem;
    gap: 1rem;
    font-size: 0.8rem;
    min-width: 0;
    overflow: hidden;
}

/* Pasek wyszukiwania (GlobalSearch) stoi na środku nagłówka, więc breadcrumb dostaje tylko
   miejsce na lewo od niego: połowa ekranu − połowa paska − odstęp − logo z hamburgerem
   (~250px). Szerokość paska liczona tak samo jak w GlobalSearch.razor.css. */
@media (min-width: 1100px) {
    .header-breadcrumb[b-tnr3da1rlp] {
        max-width: calc(50vw - max(170px, min(310px, 50vw - 360px)) - 262px);
    }
}

.header-breadcrumb-item[b-tnr3da1rlp] {
    white-space: nowrap;
    text-decoration: none;
    color: #6b7280;
    transition: color 0.15s ease;
}

a.header-breadcrumb-item:hover[b-tnr3da1rlp] {
    /* Kolor marki, nie fiolet z szablonu, z którego breadcrumb tu trafił. */
    color: var(--main-color);
    text-decoration: underline;
}

.header-breadcrumb-current[b-tnr3da1rlp] {
    color: #111827;
    font-weight: 600;
    overflow: hidden;
    text-overflow: ellipsis;
}

.header-breadcrumb-sep[b-tnr3da1rlp] {
    color: #9ca3af;
    font-size: 0.65rem;
    display: inline-flex;
    align-items: center;
}


/*disabled 11.04.2024*/
/*@media (max-width: 768px) {
    .navbar {
        height: 4.5rem;
    }

        .navbar .navbar-toggler {
            width: 4.5rem;
        }

            .navbar .navbar-toggler .navbar-toggler-icon {
                height: 2.75rem;
                width: 2.75rem;
            }
}*/
/* /Components/Shared/MainLayout.razor.rz.scp.css */
.page[b-qj51jp0jvj] {
    min-height: 100dvh;
    height: 100vh;
    overflow-x: hidden;
    overflow-y: auto;
    background-image: url('/images/background-yard.png');
    background-repeat: no-repeat;
    background-size: cover;
    background-position: center;
}

[b-qj51jp0jvj] .page-layout,
[b-qj51jp0jvj] .page-layout > .dx-gridlayout-root {
    height: 100%;
    min-height: 100%;
}

/* Elementy DxGridLayout (header/sidebar/content) to itemy siatki CSS Grid.
   Domyslnie maja min-width: auto, wiec nie kurcza sie ponizej szerokosci
   swojej zawartosci (np. szerokiego wykresu Gantta na stronie szczegolow
   projektu) i rozpychaja cala strone w prawo. Wymuszamy min-width: 0, aby
   kolumna "content" trzymala sie szerokosci przydzielonej przez grid,
   a nadmiar zawartosci scrollowal sie lokalnie (overflow-x: auto) zamiast
   rozpychac caly layout. Dotyczy to wszystkich szerokosci ekranu, nie
   tylko ponizej 1199.98px.*/
[b-qj51jp0jvj] .page-layout > .dx-gridlayout-root > * {
    min-width: 0;
}

@media (max-width: 1199.98px) {
    [b-qj51jp0jvj] .page-layout > .dx-gridlayout-root {
        grid-template-columns: minmax(0, 1fr) !important;
    }
}

[b-qj51jp0jvj] .fit-width {
    max-width: 100%;
}

[b-qj51jp0jvj] .mw-1100 {
    max-width: 1100px;
}

[b-qj51jp0jvj] .content .content-wrapper {
    position: absolute;
    right: 0;
}

[b-qj51jp0jvj] .content {
    overflow: auto;
    min-height: 0;
}

[b-qj51jp0jvj] .content .content-background {
    position: fixed;
    inset: 0;
    pointer-events: none;
}


    [b-qj51jp0jvj] .content .content-background.content-background--sidebar-expanded {
        left: calc(50% + 150px);
    }

@media (max-width: 576px) {
    [b-qj51jp0jvj] .content .content-background {
        transform: translate(-50%, -50%) scale(0.45);
        font-size: 11rem;
    }
}

@media (min-width: 576px) and (max-width: 768px) {
    [b-qj51jp0jvj] .content .content-background {
        transform: translate(-50%, -50%) scale(0.5);
    }
}

@media (min-width: 768px) and (max-width: 992px) {
    [b-qj51jp0jvj] .content .content-background {
        transform: translate(-50%, -50%) scale(0.75);
    }
}

.demo-drawer .dxbl-drawer-content[b-qj51jp0jvj] {
    font-size: var(--dxbl-drawer-panel-font-size);
    line-height: var(--dxbl-drawer-panel-line-height);
    overflow: auto;
    padding: var(--dxbl-drawer-panel-padding-y) var(--dxbl-drawer-panel-padding-x);
}

.demo-drawer:has(.demo-drawer-menu)[b-qj51jp0jvj] {
    --dxbl-drawer-panel-body-padding-x: 0;
    --dxbl-drawer-panel-body-padding-y: 0;
}

.dxbl-menu.demo-drawer-menu[b-qj51jp0jvj] {
    --dxbl-menu-item-padding-x: 0.9375rem;
    --dxbl-menu-top-left-border-radius: 0;
    --dxbl-menu-top-right-border-radius: 0;
    --dxbl-menu-bottom-left-border-radius: 0;
    --dxbl-menu-bottom-right-border-radius: 0;
}

.dxbl-sm .dxbl-menu.demo-drawer-menu[b-qj51jp0jvj] {
    --dxbl-menu-item-padding-x: 0.8125rem;
}

.dxbl-lg .dxbl-menu.demo-drawer-menu[b-qj51jp0jvj] {
    --dxbl-menu-item-padding-x: 1.0625rem;
}

.theme-fluent-light .dxbl-menu.demo-drawer-menu[b-qj51jp0jvj],
.theme-fluent-dark .dxbl-menu.demo-drawer-menu[b-qj51jp0jvj] {
    --dxbl-menu-item-padding-y-s: var(--DS-sizing-xs);
}

.theme-fluent-light .dxbl-btn-toolbar .dxbl-btn.demo-drawer-toggle-button[b-qj51jp0jvj],
.theme-fluent-dark .dxbl-btn-toolbar .dxbl-btn.demo-drawer-toggle-button[b-qj51jp0jvj] {
    --dxbl-btn-padding-x-s: var(--DS-sizing-s);
    --dxbl-btn-padding-x-m: var(--DS-sizing-m);
    --dxbl-btn-padding-x-l: var(--DS-sizing-l);
}
/* /Components/Shared/NavMenu.razor.rz.scp.css */
.navbar-toggler[b-wpcflvsrsk] {
    appearance: none;
    cursor: pointer;
    width: 3.5rem;
    height: 2.5rem;
    color: white;
    position: absolute;
    top: 0.5rem;
    right: 1rem;
    border: 1px solid rgba(255, 255, 255, 0.1);
    background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e") no-repeat center/1.75rem rgba(255, 255, 255, 0.1);
}

.navbar-toggler:checked[b-wpcflvsrsk] {
    background-color: rgba(255, 255, 255, 0.5);
}

.top-row[b-wpcflvsrsk] {
    min-height: 3.5rem;
    background-color: rgba(0,0,0,0.4);
}

.navbar-brand[b-wpcflvsrsk] {
    font-size: 1.1rem;
}

.bi[b-wpcflvsrsk] {
    display: inline-block;
    position: relative;
    width: 1.25rem;
    height: 1.25rem;
    margin-right: 0.75rem;
    top: -1px;
    background-size: cover;
}

.bi-house-door-fill-nav-menu[b-wpcflvsrsk] {
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-house-door-fill' viewBox='0 0 16 16'%3E%3Cpath d='M6.5 14.5v-3.505c0-.245.25-.495.5-.495h2c.25 0 .5.25.5.5v3.5a.5.5 0 0 0 .5.5h4a.5.5 0 0 0 .5-.5v-7a.5.5 0 0 0-.146-.354L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293L8.354 1.146a.5.5 0 0 0-.708 0l-6 6A.5.5 0 0 0 1.5 7.5v7a.5.5 0 0 0 .5.5h4a.5.5 0 0 0 .5-.5Z'/%3E%3C/svg%3E");
}

.bi-plus-square-fill-nav-menu[b-wpcflvsrsk] {
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-plus-square-fill' viewBox='0 0 16 16'%3E%3Cpath d='M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2zm6.5 4.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3a.5.5 0 0 1 1 0z'/%3E%3C/svg%3E");
}

.bi-list-nested-nav-menu[b-wpcflvsrsk] {
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-list-nested' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M4.5 11.5A.5.5 0 0 1 5 11h10a.5.5 0 0 1 0 1H5a.5.5 0 0 1-.5-.5zm-2-4A.5.5 0 0 1 3 7h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm-2-4A.5.5 0 0 1 1 3h10a.5.5 0 0 1 0 1H1a.5.5 0 0 1-.5-.5z'/%3E%3C/svg%3E");
}

.nav-item[b-wpcflvsrsk] {
    font-size: 0.9rem;
    padding-bottom: 0.5rem;
}

    .nav-item:first-of-type[b-wpcflvsrsk] {
        padding-top: 1rem;
    }

    .nav-item:last-of-type[b-wpcflvsrsk] {
        padding-bottom: 1rem;
    }

    .nav-item[b-wpcflvsrsk]  .nav-link {
        color: #d7d7d7;
        background: none;
        border: none;
        border-radius: 4px;
        height: 3rem;
        display: flex;
        align-items: center;
        line-height: 3rem;
        width: 100%;
    }

.nav-item[b-wpcflvsrsk]  a.active {
    background-color: rgba(255,255,255,0.37);
    color: white;
}

.nav-item[b-wpcflvsrsk]  .nav-link:hover {
    background-color: rgba(255,255,255,0.1);
    color: white;
}

.nav-scrollable[b-wpcflvsrsk] {
    display: none;
}

.navbar-toggler:checked ~ .nav-scrollable[b-wpcflvsrsk] {
    display: block;
}

@media (min-width: 641px) {
    .navbar-toggler[b-wpcflvsrsk] {
        display: none;
    }

    .nav-scrollable[b-wpcflvsrsk] {
        /* Never collapse the sidebar for wide screens */
        display: block;

        /* Allow sidebar to scroll for tall menus */
        height: calc(100vh - 3.5rem);
        overflow-y: auto;
    }
}
