/* /Components/Features/Admin/AdminPage.razor.rz.scp.css */
.admin-page[b-cv20wzqdz4] {
    padding: 1.5rem;
    max-width: 680px;
}

.admin-page h1[b-cv20wzqdz4] {
    margin-top: 0;
}

.admin-intro[b-cv20wzqdz4] {
    margin-bottom: 1.5rem;
    color: var(--dxds-color-content-neutral-subdued-rest);
}

/* Eine Spalte gleich breiter Buttons: die Spalte ist so breit wie der längste Text
   braucht (Deckel 30rem), jeder Button füllt sie (stretch) — Icon und Text bleiben links. */
.admin-actions[b-cv20wzqdz4] {
    display: flex;
    flex-direction: column;
    gap: 0.75rem;
    align-items: stretch;
    max-width: 30rem;
}

/* Lange Button-Texte („Kontenstamm-Reparatur (fehlende Konten)" …) dürfen auf
   schmalen Screens umbrechen statt den Viewport zu sprengen (DX-Default nowrap). */
.admin-actions[b-cv20wzqdz4]  .dxbl-btn {
    width: 100%;
    justify-content: flex-start;
    white-space: normal;
    text-align: left;
}

.db-connection[b-cv20wzqdz4] {
    margin-bottom: 1.5rem;
    padding: 0.75rem 1rem;
    border: 1px solid var(--dxds-color-border-neutral-default-rest);
    border-radius: 6px;
    background: var(--dxds-color-surface-neutral-subdued-rest);
    /* nowrap-Zellen (Server-/DB-Namen): auf schmalen Screens intern scrollen
       statt aus der Box auszubrechen */
    overflow-x: auto;
}

.db-connection h2[b-cv20wzqdz4] {
    margin: 0 0 0.5rem;
    font-size: 0.95rem;
    font-weight: 600;
    color: var(--dxds-color-content-neutral-subdued-rest);
}

.db-connection-table[b-cv20wzqdz4] {
    border-collapse: collapse;
    font-size: 0.9rem;
}

.db-connection-table th[b-cv20wzqdz4],
.db-connection-table td[b-cv20wzqdz4] {
    padding: 0.2rem 0.9rem 0.2rem 0;
    text-align: left;
    vertical-align: middle;
    white-space: nowrap;
}

.db-connection-table th[scope="row"][b-cv20wzqdz4] {
    font-weight: 600;
    color: var(--dxds-color-content-neutral-subdued-rest);
}

.db-server[b-cv20wzqdz4] {
    font-family: ui-monospace, monospace;
}

.db-name[b-cv20wzqdz4] {
    font-family: ui-monospace, monospace;
    font-weight: 600;
}

.db-badge[b-cv20wzqdz4] {
    display: inline-block;
    padding: 0.05rem 0.55rem;
    border-radius: 999px;
    font-size: 0.78rem;
    font-weight: 600;
    line-height: 1.5;
    color: #fff;
}

.db-badge-pg[b-cv20wzqdz4] {
    background: #336791; /* PostgreSQL-Blau */
}

.db-badge-mssql[b-cv20wzqdz4] {
    background: #cc2927; /* SQL-Server-Rot */
}

/* Laufzeit-Werte (OS-Beschreibung, RID) sind lang — umbrechen statt scrollen. */
.runtime-info td[b-cv20wzqdz4] {
    white-space: normal;
    overflow-wrap: anywhere;
}

/* Server-Version wird nach dem ersten Render asynchron nachgeladen („…“ bis dahin). */
.db-version[b-cv20wzqdz4] {
    font-family: ui-monospace, monospace;
}
/* /Components/Features/Admin/AuditLogPopup.razor.rz.scp.css */
/* Popup-Body als Flex-Spalte über die volle (fixe) Popup-Höhe: das Grid bekommt den
   Restplatz und scrollt intern, statt den Body mit 50 Zeilen zu sprengen. */
.audit-popup[b-cjjhwtcms5] {
    height: 100%;
    min-height: 0;
    display: flex;
    flex-direction: column;
}

.audit-filters[b-cjjhwtcms5] {
    display: flex;
    gap: 0.5rem;
    align-items: flex-end;
    margin-bottom: 0.75rem;
    flex-wrap: wrap;
}

.audit-info[b-cjjhwtcms5] {
    margin-bottom: 0.5rem;
    font-size: 0.85rem;
    color: var(--dxds-color-content-neutral-subdued-rest);
}

/* Das DxGrid-Root ist direktes Flex-Kind; min-height:0 erlaubt das Schrumpfen unter
   die Inhaltshöhe → DevExpress schaltet auf internes vertikales Scrolling. */
.audit-popup[b-cjjhwtcms5]  .audit-log-grid {
    flex: 1 1 0;
    min-height: 0;
}

/* Ziel-Zelle: Typ+Id oben, darunter die aufgelöste Firma (KlientenNr Name · Stichtag). */
.audit-popup[b-cjjhwtcms5]  .audit-target {
    display: flex;
    flex-direction: column;
}

.audit-popup[b-cjjhwtcms5]  .audit-target-label {
    font-size: 0.85em;
    color: var(--dxds-color-content-neutral-subdued-rest);
}

/* Details: Schlüssel-Wert-Paare statt Roh-JSON; Paare umbrechen als Ganzes. */
.audit-popup[b-cjjhwtcms5]  .audit-details {
    /* Deckel für den AutoFit: ohne max-width misst er die Paare in einer Zeile und
       zieht die Details-Spalte auf mehrere tausend Pixel. */
    max-width: 520px;
    display: flex;
    flex-wrap: wrap;
    column-gap: 0.75rem;
    row-gap: 0.15rem;
    font-size: 0.9em;
    line-height: 1.3;
}

.audit-popup[b-cjjhwtcms5]  .audit-detail-pair {
    max-width: 100%;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.audit-popup[b-cjjhwtcms5]  .audit-detail-key {
    color: var(--dxds-color-content-neutral-subdued-rest);
}

/* Footer: destruktive Aktion links, Export daneben, „Schließen" rechts abgesetzt. */
.audit-footer[b-cjjhwtcms5] {
    display: flex;
    gap: 0.5rem;
    width: 100%;
}

.audit-footer[b-cjjhwtcms5]  .dxbl-btn:last-child {
    margin-left: auto;
}
/* /Components/Features/Admin/DbErrorOverviewPage.razor.rz.scp.css */
.dbrepair-page[b-8s6btcp19x] {
    padding: 1rem 1.5rem;
    height: 100%;
    display: flex;
    flex-direction: column;
    gap: 0.75rem;
}

.dbrepair-toolbar[b-8s6btcp19x] {
    display: flex;
    align-items: center;
    gap: 0.75rem;
    flex-wrap: wrap;
}

.dbrepair-info[b-8s6btcp19x] {
    margin-left: auto;
    color: var(--dxds-color-content-neutral-subdued-rest);
    font-size: 0.9em;
}

.dbrepair-summary[b-8s6btcp19x] {
    flex: 0 0 auto;
    color: var(--dxds-color-content-neutral-subdued-rest);
}

/* CssClass landet auf dem Grid-Root (DevExpress-Kind-Komponente) — ohne ::deep
   greift der scoped Selektor nicht. Begrenzte Höhe (flex:1 1 0; min-height:0)
   => der Datenbereich scrollt innerhalb der Seite, der Pager bleibt unten sichtbar. */
.dbrepair-page[b-8s6btcp19x]  .dbrepair-grid {
    flex: 1 1 0;
    min-height: 0;
}

.dbrepair-scan-errors[b-8s6btcp19x] {
    margin: 0.35rem 0 0;
    padding-left: 1.2rem;
}

.action-buttons[b-8s6btcp19x] {
    display: flex;
    gap: 0.25rem;
    flex-wrap: wrap;
}

.badge[b-8s6btcp19x] {
    display: inline-block;
    margin-left: 0.4rem;
    padding: 0.05rem 0.45rem;
    border-radius: 0.75rem;
    font-size: 0.72em;
    font-weight: 600;
    line-height: 1.4;
    vertical-align: middle;
}

.badge-null[b-8s6btcp19x] {
    background: var(--dxds-color-surface-warning-subdued-rest);
    color: var(--dxds-color-content-warning-default-rest);
}

.badge-info[b-8s6btcp19x] {
    background: var(--dxds-color-surface-info-subdued-rest);
    color: var(--dxds-color-content-info-default-rest);
}

.sample-keys[b-8s6btcp19x] {
    display: inline-block;
    max-width: 100%;
    overflow: hidden;
    white-space: nowrap;
    text-overflow: ellipsis;
    font-family: var(--dx-font-family-monospace, monospace);
    font-size: 0.88em;
}
/* /Components/Features/Admin/DbRepairPage.razor.rz.scp.css */
.dbrepair-page[b-9qpftnrv69] {
    padding: 1rem 1.5rem;
    height: 100%;
    display: flex;
    flex-direction: column;
    gap: 0.75rem;
}

.dbrepair-toolbar[b-9qpftnrv69] {
    display: flex;
    align-items: center;
    gap: 0.75rem;
    flex-wrap: wrap;
}

.dbrepair-info[b-9qpftnrv69] {
    margin-left: auto;
    color: var(--dxds-color-content-neutral-subdued-rest);
    font-size: 0.9em;
}

.dbrepair-split[b-9qpftnrv69] {
    flex: 1 1 auto;
    min-height: 0;
}

.dbrepair-errors[b-9qpftnrv69],
.dbrepair-firmen[b-9qpftnrv69] {
    flex: 1 1 0;
    min-height: 0;
    display: flex;
    flex-direction: column;
}

.dbrepair-firmen-title[b-9qpftnrv69] {
    flex: 0 0 auto;
    margin: 0 0 0.5rem;
}

/* Flex-Wrap, der dem Grid eine definierte (flex-begrenzte) Höhe gibt. */
.dbrepair-firmen-grid-wrap[b-9qpftnrv69] {
    flex: 1 1 auto;
    min-height: 0;
    display: flex;
    flex-direction: column;
}

/* CssClass landet auf dem Grid-Root (DevExpress-Kind-Komponente) — ohne ::deep
   greift der scoped Selektor nicht. Begrenzte Höhe (flex:1 1 0; min-height:0)
   => der Datenbereich scrollt innerhalb der Seite, der Pager bleibt unten
   sichtbar (klassisches Paging, kein Virtual Scrolling). */
.dbrepair-page[b-9qpftnrv69]  .dbrepair-grid,
.dbrepair-page[b-9qpftnrv69]  .dbrepair-firmen-grid {
    flex: 1 1 0;
    min-height: 0;
}

.action-buttons[b-9qpftnrv69] {
    display: flex;
    gap: 0.25rem;
    flex-wrap: wrap;
}

/* Synthetische "Nicht zuordenbar"-Zeile in der Firmen-Liste hervorheben. */
.scope-unattributed[b-9qpftnrv69] {
    font-style: italic;
    color: var(--dxds-color-content-neutral-subdued-rest);
}

.dbrepair-scan-errors[b-9qpftnrv69] {
    margin: 0.35rem 0 0;
    padding-left: 1.2rem;
}

.badge[b-9qpftnrv69] {
    display: inline-block;
    margin-left: 0.4rem;
    padding: 0.05rem 0.45rem;
    border-radius: 0.75rem;
    font-size: 0.72em;
    font-weight: 600;
    line-height: 1.4;
    vertical-align: middle;
}

.badge-null[b-9qpftnrv69] {
    background: var(--dxds-color-surface-warning-subdued-rest);
    color: var(--dxds-color-content-warning-default-rest);
}

.badge-info[b-9qpftnrv69] {
    background: var(--dxds-color-surface-info-subdued-rest);
    color: var(--dxds-color-content-info-default-rest);
}

.sample-keys[b-9qpftnrv69] {
    display: inline-block;
    max-width: 100%;
    overflow: hidden;
    white-space: nowrap;
    text-overflow: ellipsis;
    font-family: var(--dx-font-family-monospace, monospace);
    font-size: 0.88em;
}
/* /Components/Features/Admin/GegenkontenAendernPopup.razor.rz.scp.css */
.ga-vorlage[b-9pkzttqtmh] { font-size: 0.85em; color: var(--dxds-color-content-neutral-subdued-rest); }
.ga-picker[b-9pkzttqtmh] { min-width: 320px; }
.ga-bez[b-9pkzttqtmh] { margin-top: 0.35rem; }
.ga-summary[b-9pkzttqtmh] { margin-right: auto; color: var(--dxds-color-content-neutral-subdued-rest); }
/* Body als Flex-Column, damit das DxGrid die Resthöhe zwischen Kopf und Fuß
   absorbiert und INTERN scrollt (Virtual Scrolling) — Popup wächst nicht mit
   der Zeilenzahl. Muster wie KoreDetailPopup. */
.ga-popup[b-9pkzttqtmh] {
    display: flex;
    flex-direction: column;
    height: 100%;
    gap: 0.5rem;
    overflow: hidden;
}

.ga-popup[b-9pkzttqtmh]  .ga-grid {
    flex: 1 1 0;
    min-height: 0;
    height: 100%;
}
/* /Components/Features/Admin/KontenReparaturPage.razor.rz.scp.css */
.kontrep-page[b-6v8vqtucwm] {
    padding: 1rem 1.5rem;
    height: 100%;
    display: flex;
    flex-direction: column;
    gap: 0.75rem;
}

.kontrep-toolbar[b-6v8vqtucwm] {
    display: flex;
    align-items: center;
    gap: 0.75rem;
    flex-wrap: wrap;
}

.kontrep-info[b-6v8vqtucwm] {
    margin-left: auto;
    color: var(--dxds-color-content-neutral-subdued-rest);
    font-size: 0.9em;
}

/* CssClass landet auf dem Grid-Root (DevExpress-Kind-Komponente) — ohne ::deep
   greift der scoped Selektor nicht. Flex-begrenzte Höhe => Datenbereich scrollt
   innerhalb der Seite (Virtual Scrolling). */
.kontrep-page[b-6v8vqtucwm]  .kontrep-grid {
    flex: 1 1 0;
    min-height: 0;
}

.badge[b-6v8vqtucwm] {
    display: inline-block;
    padding: 0.05rem 0.45rem;
    border-radius: 0.75rem;
    font-size: 0.72em;
    font-weight: 600;
    line-height: 1.4;
    vertical-align: middle;
}

.badge-clone[b-6v8vqtucwm] {
    background: var(--dxds-color-surface-success-subdued-rest);
    color: var(--dxds-color-content-success-default-rest);
}

.kontrep-noclone[b-6v8vqtucwm] {
    font-style: italic;
    color: var(--dxds-color-content-neutral-subdued-rest);
}
/* /Components/Features/Admin/KtonrFormelPopup.razor.rz.scp.css */
/* Body als Flex-Column: Kopf (Formel) fix, Vorschau-Grid füllt den Rest und scrollt intern
   (Virtual Scrolling) — Popup wächst nicht mit der Zeilenzahl. Muster wie GegenkontenAendernPopup. */
.ktf-popup[b-d7l5c8b3qc] {
    display: flex;
    flex-direction: column;
    height: 100%;
    gap: 0.6rem;
    overflow: hidden;
}

.ktf-busy[b-d7l5c8b3qc] {
    display: flex;
    align-items: center;
    gap: 0.6rem;
    padding: 1rem 0.25rem;
    color: var(--dxds-color-content-neutral-subdued-rest);
}

.ktf-head[b-d7l5c8b3qc] {
    flex: 0 0 auto;
    display: flex;
    flex-direction: column;
    gap: 0.3rem;
}

.ktf-formula[b-d7l5c8b3qc] {
    display: flex;
    align-items: center;
    gap: 0.5rem;
}

.ktf-popup[b-d7l5c8b3qc]  .ktf-input {
    min-width: 320px;
}

.ktf-hint[b-d7l5c8b3qc] {
    font-size: 0.85em;
    color: var(--dxds-color-content-neutral-subdued-rest);
}

.ktf-errs[b-d7l5c8b3qc] {
    margin: 0;
    padding-left: 1.2rem;
}

.ktf-summary[b-d7l5c8b3qc] {
    margin-right: auto;
    color: var(--dxds-color-content-neutral-subdued-rest);
}

.ktf-popup[b-d7l5c8b3qc]  .ktf-grid {
    flex: 1 1 0;
    min-height: 0;
    height: 100%;
}

/* Ktonr-0-Reparatur-Sektion: fester Block über dem Partner-Grid — das Grid bekommt via
   Wrapper eine definite Pixel-Höhe (ZeroGridHeightPx, zeilenzahl-basiert, gedeckelt) und
   scrollt intern; das Partner-Grid behält den Rest der Höhe (flex). */
.ktf-zero[b-d7l5c8b3qc] {
    flex: 0 0 auto;
    display: flex;
    flex-direction: column;
    gap: 0.3rem;
}

.ktf-zero-title[b-d7l5c8b3qc] {
    font-weight: 600;
}

.ktf-zero-gridwrap[b-d7l5c8b3qc] {
    flex: 0 0 auto;
    overflow: hidden;
}

.ktf-popup[b-d7l5c8b3qc]  .ktf-grid-zero {
    height: 100%;
}

.ktf-popup[b-d7l5c8b3qc]  .badge {
    display: inline-block;
    margin-left: 0.4rem;
    padding: 0.05rem 0.45rem;
    border-radius: 0.75rem;
    font-size: 0.75em;
    font-weight: 600;
    line-height: 1.4;
    vertical-align: middle;
}

.ktf-popup[b-d7l5c8b3qc]  .badge-ok {
    background: var(--dxds-color-surface-success-subdued-rest);
    color: var(--dxds-color-content-success-default-rest);
}

.ktf-popup[b-d7l5c8b3qc]  .badge-warn {
    background: var(--dxds-color-surface-warning-subdued-rest);
    color: var(--dxds-color-content-warning-default-rest);
}

.ktf-popup[b-d7l5c8b3qc]  .badge-info {
    background: var(--dxds-color-surface-info-subdued-rest);
    color: var(--dxds-color-content-info-default-rest);
}

.ktf-popup[b-d7l5c8b3qc]  .badge-mismatch {
    background: var(--dxds-color-surface-danger-subdued-rest);
    color: var(--dxds-color-content-danger-default-rest);
    font-weight: 600;
}

.ktf-popup[b-d7l5c8b3qc]  .badge-ust {
    background: var(--dxds-color-surface-warning-subdued-rest);
    color: var(--dxds-color-content-warning-default-rest);
}
/* /Components/Features/Admin/OrphanReferencesPopup.razor.rz.scp.css */
/* Body als Flex-Column: Hinweise fix, das Grid füllt den Rest und scrollt intern (Virtual Scrolling
   Rows+Columns für viele/ breite Spalten). Muster wie KtonrFormelPopup. */
.orphanrefs[b-1o77nx5n7w] {
    display: flex;
    flex-direction: column;
    height: 100%;
    gap: 0.6rem;
    overflow: hidden;
}

.orphanrefs-busy[b-1o77nx5n7w] {
    display: flex;
    align-items: center;
    gap: 0.6rem;
    padding: 1rem 0.25rem;
    color: var(--dxds-color-content-neutral-subdued-rest);
}

.orphanrefs[b-1o77nx5n7w]  .orphanrefs-grid {
    flex: 1 1 0;
    min-height: 0;
    height: 100%;
}
/* /Components/Features/Admin/PartnerEvidencePopup.razor.rz.scp.css */
/* Body als Flex-Column: Hinweise fix, das Grid füllt den Rest und scrollt intern, statt die
   verfügbare Popup-Höhe zu überschreiten. Muster wie OrphanReferencesPopup/KtonrFormelPopup:
   Container mit height:100% + overflow:hidden; das Grid via ::deep (sein Root liegt in der
   DxGrid-Kind-Scope, daher pierct die Regel vom Container aus) mit flex:1 1 0 / min-height:0 /
   height:100%. */
.partnerev[b-3ua3895ko1] {
    display: flex;
    flex-direction: column;
    height: 100%;
    gap: 0.5rem;
    overflow: hidden;
}

.partnerev-busy[b-3ua3895ko1] {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    padding: 0.5rem;
}

.partnerev[b-3ua3895ko1]  .partnerev-grid {
    flex: 1 1 0;
    min-height: 0;
    height: 100%;
}

.partnerev[b-3ua3895ko1]  tr.partnerev-chosen td {
    background: var(--dxds-color-surface-success-subdued-rest);
    font-weight: 600;
}
/* /Components/Features/Admin/SteuercodesPopup.razor.rz.scp.css */
/* Popup-Body als Flex-Spalte über die volle Popup-Höhe (AuditLogPopup-Muster):
   das Grid bekommt den Restplatz und scrollt intern. */
.stc-popup[b-6pqmdxsan3] {
    height: 100%;
    min-height: 0;
    display: flex;
    flex-direction: column;
}

.stc-actions[b-6pqmdxsan3] {
    display: flex;
    gap: 0.75rem;
    align-items: center;
    margin-bottom: 0.5rem;
    flex-wrap: wrap;
}

.stc-popup[b-6pqmdxsan3]  .stc-grid {
    flex: 1 1 0;
    min-height: 0;
}
/* /Components/Features/Auth/PasskeysPopup.razor.rz.scp.css */
.passkeys-intro[b-6dgbzc84db] {
    margin: 0 0 0.75rem;
    opacity: 0.85;
}

.passkeys-empty[b-6dgbzc84db] {
    opacity: 0.7;
}

.passkeys-table[b-6dgbzc84db] {
    width: 100%;
    border-collapse: collapse;
    margin-bottom: 1rem;
}

.passkeys-table th[b-6dgbzc84db],
.passkeys-table td[b-6dgbzc84db] {
    text-align: left;
    padding: 0.35rem 0.5rem;
    border-bottom: 1px solid var(--dxds-color-border-neutral-default-rest);
    white-space: nowrap;
    vertical-align: middle;
}

.passkeys-table th[b-6dgbzc84db] {
    font-weight: 600;
    opacity: 0.8;
}

.passkeys-table td:first-child[b-6dgbzc84db] {
    width: 45%;
}

.passkeys-actions[b-6dgbzc84db] {
    text-align: right;
    white-space: nowrap;
}

.passkeys-actions > *[b-6dgbzc84db] {
    margin-left: 0.25rem;
}

.passkeys-name-text[b-6dgbzc84db] {
    display: inline-block;
    max-width: 16rem;
    overflow: hidden;
    text-overflow: ellipsis;
    vertical-align: middle;
}

.passkeys-add[b-6dgbzc84db] {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    margin-top: 0.5rem;
}

/* Editor-Breite in Flex-Leiste: ::deep + fixe Breite (siehe Memory devexpress-editor-flex-width). */
[b-6dgbzc84db] .passkeys-newname {
    width: 16rem;
}

[b-6dgbzc84db] .passkeys-name {
    width: 100%;
}
/* /Components/Features/Auth/UserManagementPopup.razor.rz.scp.css */
/* Popup-Body als Flex-Spalte: Button-Leiste und Fehlermeldung bleiben auto-hoch,
   das Grid bekommt die Resthöhe und scrollt INTERN — sonst sprengen mehrere
   Benutzer den Body (die Aktionen-Spalte macht Zeilen zwei- bis dreizeilig).
   Die Höhe kommt aus der globalen Kette .aw-popup-flex .dxbl-modal-body (app.css),
   damit sie beim Ziehen an der Popup-Kante mitwächst statt am Viewport zu hängen. */
.usermgmt-body[b-wnkf7yvc7y] {
    display: flex;
    flex-direction: column;
    flex: 1 1 0;
    min-height: 0;
    overflow: hidden;
}

/* Das DxGrid-Root ist direktes Flex-Kind; min-height:0 erlaubt das Schrumpfen unter
   die Inhaltshöhe → DevExpress schaltet auf internes vertikales Scrolling. */
.usermgmt-body[b-wnkf7yvc7y]  .usermgmt-grid {
    flex: 1 1 0;
    min-height: 0;
}

/* nowrap statt wrap: die Zeilenhöhe soll nicht mehr von der Zellbreite abhängen.
   Reicht die Spalte nicht, ist die MinWidth (132) zu niedrig — nicht der Umbruch
   die Lösung. */
.usermgmt-actions[b-wnkf7yvc7y] {
    display: flex;
    flex-wrap: nowrap;
    gap: 0.25rem;
}

.usermgmt-muted[b-wnkf7yvc7y] {
    opacity: 0.55;
}

.usermgmt-failed[b-wnkf7yvc7y] {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    white-space: nowrap;
}

.usermgmt-failed-count[b-wnkf7yvc7y] {
    font-weight: 600;
    color: #b3261e;
}

.usermgmt-locked[b-wnkf7yvc7y] {
    color: #b3261e;
}
/* /Components/Features/Bilanz/AbschlussDruckPopup.razor.rz.scp.css */
.kabschluss-form[b-mkjhv38nsa] {
    display: flex;
    flex-direction: column;
    gap: 0.75rem;
}

.kabschluss-firma[b-mkjhv38nsa] {
    font-weight: 600;
}

.kabschluss-group[b-mkjhv38nsa] {
    display: flex;
    flex-direction: column;
    gap: 0.35rem;
    border: 1px solid var(--dxbl-border-color, #d0d0d0);
    border-radius: 4px;
    padding: 0.5rem 0.75rem 0.75rem;
    margin: 0;
}

.kabschluss-group legend[b-mkjhv38nsa] {
    font-size: 0.85em;
    font-weight: 600;
    padding: 0 0.25rem;
    float: none;
    width: auto;
    margin-bottom: 0;
}

.kabschluss-anhang[b-mkjhv38nsa] {
    display: flex;
    align-items: center;
    gap: 0.5rem;
}

.kabschluss-anhang-name[b-mkjhv38nsa] {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.kabschluss-anhang-hinweis[b-mkjhv38nsa] {
    font-size: 0.85em;
    color: var(--dxbl-text-secondary-color, #666);
}

.kabschluss-anhang-fehler[b-mkjhv38nsa] {
    color: var(--bs-danger, #dc3545);
}
/* /Components/Features/Bilanz/BilanzEditor.razor.rz.scp.css */
.bilanz-page[b-2njxauydct] {
    display: flex;
    flex-direction: column;
    height: 100%;
    padding: 0.75rem 1rem;
    gap: 0.5rem;
    overflow: hidden;
}

.bilanz-page .bilanz-header[b-2njxauydct] {
    display: flex;
    flex-direction: column;
    gap: 0.5rem;
    flex: 0 0 auto;
}

.bilanz-page .bilanz-tabs-row[b-2njxauydct] {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.5rem;
}

/* Aktionsleiste rechts neben den Kreis-Tabs, mit zweistufigem Umbruchverhalten:
   1) Reicht der Platz neben den Tabs nicht, bricht die GANZE Leiste (als ein Flex-
      Item) unter die Tabs — Flexbox bildet die Zeilen anhand der max-content-Breite
      (flex-basis: auto) VOR dem flex-shrink, daher wandert sie als Block.
   2) Ist sie auch in ihrer eigenen Zeile noch zu breit, brechen die Buttons intern
      um (flex-wrap an der Leiste selbst).
   WICHTIG: flex bleibt 0 1 auto — kein flex:1 / flex-basis:0, sonst kollabiert die
   Leiste sofort und wrapt intern, statt zuerst als Ganzes umzubrechen. */
.bilanz-page .bilanz-tabs-row > .bilanz-actions[b-2njxauydct] {
    margin-left: auto;
    flex: 0 1 auto;
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.3rem 0.6rem;
}

/* Wrap der Tree-List + Loading-Overlay; füllt die Splitter-Pane vollständig.
   Das interne DxTreeList füllt den Rest. */
.bilanz-page .bilanz-grid-wrap[b-2njxauydct] {
    height: 100%;
    min-height: 0;
    position: relative;
    display: flex;
    flex-direction: column;
}

.bilanz-page .bilanz-empty[b-2njxauydct] {
    color: var(--dxds-color-content-neutral-subdued-rest);
    font-style: italic;
    margin: 0.5rem 0;
}

/* Drag-Handle auf Nicht-Konto-Zeilen ausblenden — visibility statt display,
   damit die Spaltenbreite des Drag-Anchors erhalten bleibt. Nur den INHALT
   verstecken, nicht die Zelle: eine unsichtbare Zelle malt auch keinen
   Hintergrund mehr (Durchscheinen im fixierten Konzern-Bereich). */
.bilanz-page[b-2njxauydct]  .bilanz-no-drag > * {
    visibility: hidden;
}

.bilanz-page[b-2njxauydct]  .bilanz-no-drag {
    pointer-events: none;
}

/* Spaltenheader-Inhalt (alle HeaderCaptionTemplates): width:0 + min-width:100%
   entkoppelt den Header von der Breitenmessung — er folgt der Spaltenbreite,
   statt sie zu bestimmen. Dadurch ignoriert Auto-Fit die Header (nur die
   Wertzellen zählen) und der Text bricht bei schmalen Spalten um, obwohl
   TextWrapEnabled=false die Datenzellen einzeilig hält. */
.bilanz-page[b-2njxauydct]  .bilanz-colhead {
    white-space: normal;
    overflow-wrap: anywhere;
    width: 0;
    min-width: 100%;
}

/* Konzern: Die Drag-Anchor-Spalte liegt im links fixierten Bereich, bekommt
   vom Theme aber keinen deckenden Hintergrund — beim horizontalen Scrollen
   schieben sich die Firmen-Werte sonst sichtbar darunter. */
.bilanz-page[b-2njxauydct]  .bilanz-grid-konzern .bilanz-drag-anchor {
    background-color: var(--dxds-color-surface-neutral-default-rest, #fff);
}

/* Drop-Indikator auf ungültigen Drop-Targets unterdrücken. DevExpress
   rendert den Indikator als Sub-Element mit "drop-target"/"drag-target"
   im Klassennamen. Falls der Selektor nicht greift, im DOM nachsehen. */
.bilanz-page[b-2njxauydct]  .bilanz-no-drop [class*="drop-target"],
.bilanz-page[b-2njxauydct]  .bilanz-no-drop [class*="drag-target"] {
    display: none !important;
}

/* DxTreeList füllt den Flex-Slot seines Wraps — flex-basis 0 erzwingt reine
   Flex-Sizing, min-height: 0 erlaubt das Schrumpfen. (Die rechte Pane samt
   Kontoart-Inline-Edit hat ihr eigenes CSS: UnassignedKontenPanel.razor.css.) */
.bilanz-page[b-2njxauydct]  .bilanz-grid {
    flex: 1 1 0;
    min-height: 0;
}

/* Während ein Collapsed-Snapshot pending ist (Tab-Wechsel, Drag-Drop), den
   Tree per visibility ausblenden, damit der voll aufgeklappte Initial-Render
   nicht aufblitzt. Layout bleibt erhalten — kein Sprung beim Sichtbarwerden. */
.bilanz-page[b-2njxauydct]  .bilanz-grid-hidden {
    visibility: hidden;
}

.bilanz-page .bilanz-loading-overlay[b-2njxauydct] {
    position: absolute;
    inset: 0;
    background: color-mix(in srgb, var(--dxds-color-surface-neutral-default-rest) 60%, transparent);
    display: flex;
    align-items: center;
    justify-content: center;
    font-weight: 600;
    z-index: 10;
}

/* Cell-Klassen liegen innerhalb der DxTreeList-Zellen → ::deep. */
.bilanz-page[b-2njxauydct]  .bilanz-davon {
    font-style: italic;
    color: var(--dxds-color-content-neutral-subdued-rest);
}

/* Teilbetrag-Zeilen (zusätzliche davon-Ausweise aus KontenDavon): wie davon-
   Zeilen kursiv/gedämpft, zusätzlich leicht abgesetzt. */
.bilanz-page[b-2njxauydct]  .bilanz-davon-zusatz {
    font-style: italic;
    color: var(--dxds-color-content-neutral-subdued-rest);
    opacity: 0.9;
}

/* Voll-Saldo-davon-Zeilen (KontenDavon.Betrag NULL): das Konto steht hier mit
   seinem ganzen Saldo — nur kursiv, nicht gedämpft (es sind die früheren
   „Hauptzuordnung auf davon"-Zeilen, die weiterhin wie normale Konten lesbar
   sein sollen). */
.bilanz-page[b-2njxauydct]  .bilanz-davon-voll {
    font-style: italic;
}

.bilanz-page[b-2njxauydct]  .bilanz-summenkopf {
    font-weight: 600;
}

/* DxTreeList: Leaf-Rows ohne sichtbare Children bekommen einen Placeholder
   anstelle des Expand-Pfeils. Standard-Breite ist 0 → Geschwister sind
   unterschiedlich eingerückt. Auf die Breite des echten Pfeils setzen, damit
   alle Tree-Geschwister auf gleicher Indent-Linie stehen. */
.bilanz-page[b-2njxauydct]  .dxbl-grid-tree-node-expand-button-placeholder {
    width: 1rem;
    min-width: 1rem;
    display: inline-block;
}

/* Pro Baum-Ebene rückt DevExpress standardmäßig 20px ein — für die tiefe
   Bilanzgliederung zu breit. Auf 12px reduzieren, damit mehr Platz für die
   Bezeichnungsspalte bleibt. */
.bilanz-page[b-2njxauydct]  .dxbl-grid-tree-node-indent {
    width: 12px;
    min-width: 12px;
}

/* Splitter füllt den Restraum unter dem Header. */
.bilanz-page[b-2njxauydct]  .bilanz-split {
    flex: 1 1 0;
    min-height: 0;
}


/* Panel-Pane: am Handy steht „Zur Gliederung“ über dem Panel; das Panel füllt den Rest. */
.bilanz-panel-wrap[b-2njxauydct] {
    height: 100%;
    min-height: 0;
    display: flex;
    flex-direction: column;
}

.bilanz-panel-zurueck[b-2njxauydct] {
    flex: none;
    padding: 0.25rem 0;
}

.bilanz-panel-wrap[b-2njxauydct] >  .bilanz-unassigned-wrap {
    flex: 1 1 auto;
    min-height: 0;
}

/* „Zuordnen zu…“-Popup */
.bilanz-zuordnen[b-2njxauydct] {
    display: flex;
    flex-direction: column;
    gap: 0.5rem;
}
/* /Components/Features/Bilanz/KontoDavonPopup.razor.rz.scp.css */
/* Flex-Spalte über die volle (fixe) Popup-Höhe: Hinweis/Fehler/Buttons bleiben
   auto-hoch, die Zeilenliste bekommt den Rest und scrollt intern
   (AuditLogPopup-Muster). */
.davon-popup[b-5pfvej1l12] {
    height: 100%;
    display: flex;
    flex-direction: column;
    gap: 0.6rem;
}

.davon-hint[b-5pfvej1l12] {
    font-size: 0.85em;
    color: var(--dxds-color-content-neutral-subdued-rest);
}

.davon-rows[b-5pfvej1l12] {
    flex: 1;
    min-height: 0;
    overflow-y: auto;
    display: flex;
    flex-direction: column;
    gap: 0.4rem;
}

/* Ein Block je übergeordnetem Posten: Kopfzeile, Zeilen, Hinzufügen-Button. */
.davon-posten[b-5pfvej1l12] {
    display: flex;
    flex-direction: column;
    gap: 0.4rem;
    padding-bottom: 0.4rem;
    border-bottom: 1px solid var(--dxds-color-border-neutral-subdued-rest, #e0e0e0);
}

.davon-posten:last-child[b-5pfvej1l12] {
    border-bottom: none;
}

.davon-posten-kopf[b-5pfvej1l12] {
    font-weight: 600;
}

.davon-haupt[b-5pfvej1l12] {
    margin-left: 0.5rem;
    font-weight: 400;
    font-size: 0.8em;
    color: var(--dxds-color-content-neutral-subdued-rest);
}

.davon-row[b-5pfvej1l12] {
    display: flex;
    align-items: center;
    gap: 0.4rem;
}

/* Doppelklasse + ::deep gegen das Theme-CSS (DevExpress-Editor-Breite in
   Flex-Leiste): Position nimmt den Rest, Betrag bleibt fix. */
.davon-row[b-5pfvej1l12]  .davon-pos.davon-pos {
    flex: 1;
    min-width: 0;
}

.davon-row[b-5pfvej1l12]  .davon-betrag.davon-betrag {
    width: 130px;
    flex: none;
}

.davon-row[b-5pfvej1l12]  .davon-betrag input {
    text-align: right;
}

.davon-empty[b-5pfvej1l12] {
    font-style: italic;
    color: var(--dxds-color-content-neutral-subdued-rest);
    padding: 0.4rem 0;
}
/* /Components/Features/Bilanz/UnassignedKontenPanel.razor.rz.scp.css */
/* Rechte Pane des BilanzEditor: Header + Konten-Grid stapeln. */
.bilanz-unassigned-wrap[b-7bkgvm7ef2] {
    display: flex;
    flex-direction: column;
    height: 100%;
    min-height: 0;
    gap: 0.25rem;
    padding-left: 0.5rem;
}

.bilanz-unassigned-title[b-7bkgvm7ef2] {
    font-weight: 600;
    font-size: 0.95em;
    padding: 0.25rem 0;
}

/* Filter-Hinweis neben der Überschrift. */
.bilanz-unassigned-hint[b-7bkgvm7ef2] {
    font-weight: 400;
    font-size: 0.9em;
    color: var(--dxds-color-content-neutral-subdued-rest);
}

/* DxGrid füllt den Flex-Slot des Wraps — flex-basis 0 erzwingt reine
   Flex-Sizing, min-height: 0 erlaubt das Schrumpfen. */
.bilanz-unassigned-wrap[b-7bkgvm7ef2]  .bilanz-unassigned-grid {
    flex: 1 1 0;
    min-height: 0;
}

/* Kontoart-Inline-Edit: schmales Eingabefeld, das die 30px-Art-Zelle ausfüllt.
   Die Art-Zelle selbst als Block, damit die ganze Zellfläche klickbar ist. */
.bilanz-unassigned-wrap[b-7bkgvm7ef2]  .bilanz-ktoart-cell {
    display: block;
    cursor: pointer;
}

.bilanz-unassigned-wrap[b-7bkgvm7ef2]  .bilanz-ktoart-input {
    width: 100%;
    box-sizing: border-box;
    padding: 0 2px;
    border: 1px solid var(--dxds-color-border-accent-emphasized-rest, #7a5c46);
    font: inherit;
}
/* /Components/Features/Buchungen/BuchungsPopup.razor.rz.scp.css */
.buchungs-popup-info[b-vwq65ll28k] {
    display: flex;
    flex-direction: column;
    gap: 0.25rem;
    margin-bottom: 0.75rem;
}

.buchungs-popup-jahresergebnis[b-vwq65ll28k] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 1rem;
    background: var(--dxds-color-surface-neutral-subdued-rest);
    padding: 0.25rem 0.5rem 0.25rem;
    margin-top: 0.25rem;
    font-size: 0.75rem;
}

.buchungs-popup-loading[b-vwq65ll28k] {
    color: var(--dxds-color-content-neutral-subdued-rest);
    font-style: italic;
    padding: 1rem 0;
}

.buchungs-popup-error[b-vwq65ll28k] {
    color: var(--dxds-color-content-danger-default-rest);
    padding: 0.5rem 0;
}

/* Höhe kommt aus der Flex-Kette des Popups (aw-popup-flex in app.css), nicht mehr
   aus dem Viewport: das Popup ist größenveränderbar, und eine vh-Rechnung bekäme
   vom Ziehen an der Kante nichts mit. Die Umstellung muss HIER stehen — scoped CSS
   hat dieselbe Spezifität wie die globale Regel und lädt später. */
.buchungs-popup-grid-wrapper[b-vwq65ll28k] {
    flex: 1 1 0;
    min-height: 0;
}

.buchungs-popup-grid-wrapper[b-vwq65ll28k]  .buchungs-popup-grid {
    height: 100%;
}

.buchungs-form[b-vwq65ll28k] {
    display: flex;
    flex-direction: column;
    gap: 0.4rem;
    margin-top: 0.6rem;
    padding: 0.5rem;
    background: var(--dxds-color-surface-neutral-subdued-rest);
    border-radius: 4px;
}

.buchungs-form-row[b-vwq65ll28k] {
    display: flex;
    flex-wrap: wrap;
    align-items: flex-end;
    gap: 0.4rem;
}

.buchungs-form-field[b-vwq65ll28k] {
    display: flex;
    flex-direction: column;
    gap: 0.15rem;
}

.buchungs-form-field-grow[b-vwq65ll28k] {
    flex: 1 1 240px;
}

.buchungs-form-field label[b-vwq65ll28k] {
    font-size: 0.75rem;
    color: var(--dxds-color-content-neutral-subdued-rest);
}

.buchungs-form-actions[b-vwq65ll28k] {
    display: flex;
    align-items: flex-end;
    gap: 0.4rem;
    margin-left: auto;
}

.buchungs-form-info[b-vwq65ll28k] {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 0.25rem 2rem;
    margin-top: 0.4rem;
    font-size: 0.85rem;
    color: var(--dxds-color-content-neutral-subdued-rest);
    min-height: 1.2rem;
}

.buchungs-form-info-col[b-vwq65ll28k] {
    display: grid;
    grid-template-columns: max-content 1fr;
    gap: 0.15rem 0.5rem;
    align-content: start;
}

.buchungs-form-info-label[b-vwq65ll28k] {
    color: var(--dxds-color-content-neutral-subdued-rest);
}

.buchungs-form-info-body[b-vwq65ll28k] {
    white-space: nowrap;
}

[b-vwq65ll28k] .buchungs-field-datum { width: 110px; }
[b-vwq65ll28k] .buchungs-field-bk { width: 60px; }
[b-vwq65ll28k] .buchungs-field-belegnr { width: 110px; }
[b-vwq65ll28k] .buchungs-field-konto { width: 220px; }
[b-vwq65ll28k] .buchungs-field-kako { width: 140px; }
/* USt: Das Feld muss den Code neben ZWEI Buttons unterbringen — sobald ein Wert
   gesetzt ist, steht der Clear-Button neben dem Dropdown-Pfeil und die beiden
   nehmen zusammen ~41px. Bei den ursprünglichen 70px blieben dem Text 22px,
   der längste Code (EUST83) braucht bei SizeMode Small aber 42px.
   Bewusst großzügig auf 120px statt knapp auf den Messwert: das deckt auch
   größere SizeModes und Browser-Zoom ab, wo Schrift UND Buttons mitwachsen.
   Bleibt schmaler als die Nachbarfelder (KA/KS 140, Betrag 130). */
[b-vwq65ll28k] .buchungs-field-ust { width: 120px; }
[b-vwq65ll28k] .buchungs-field-betrag { width: 130px; }

/* Offene-Anzahlungen-Auswahl bei Schlussrechnungs-/Auflösungscodes:
   kompakte Zeilenliste unter der Buchungszeile (Checkbox + Info + Teilbetrag). */
.buchungs-anz-panel[b-vwq65ll28k] {
    margin-top: 0.5rem;
    padding: 0.5rem 0.75rem;
    border: 1px solid var(--dxds-color-border-neutral-subdued-rest, #d0d0d0);
    border-radius: 4px;
    max-height: 180px;
    overflow-y: auto;
}

.buchungs-anz-title[b-vwq65ll28k] {
    font-weight: 600;
    margin-bottom: 0.35rem;
}

.buchungs-anz-row[b-vwq65ll28k] {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    padding: 0.15rem 0;
}

.buchungs-anz-info[b-vwq65ll28k] {
    flex: 1 1 auto;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.buchungs-anz-leer[b-vwq65ll28k] {
    color: var(--dxds-color-content-neutral-subdued-rest);
}

[b-vwq65ll28k] .buchungs-anz-betrag { width: 130px; }

/* Automatisch erzeugte Unterzeilen (nur bei eingeblendeter Anzeige sichtbar):
   kursiv und gedämpft, damit sie sich von den manuellen Buchungen abheben. */
[b-vwq65ll28k] .buchungs-auto-row {
    font-style: italic;
    color: var(--dxds-color-content-neutral-subdued-rest);
}

/* Handy (gleiche Query wie wwwroot/js/viewport.js): Eingabe einspaltig. Das Popup ist dort
   bildschirmfüllend und sein Body scrollt als Ganzes (app.css). Das Journal-Grid bekommt
   deshalb eine feste Höhe statt der Resthöhe — sonst bliebe neben elf untereinander
   stehenden Feldern für das Grid nichts übrig. Desktop/Tablet unverändert. */
@media (max-width: 767px), (max-height: 500px) and (pointer: coarse) {
    .buchungs-popup-grid-wrapper[b-vwq65ll28k] {
        flex: 0 0 auto;
        height: 40dvh;
    }

    .buchungs-form-row[b-vwq65ll28k] {
        flex-direction: column;
        flex-wrap: nowrap;
        align-items: stretch;
    }

    .buchungs-form-field-grow[b-vwq65ll28k] {
        flex: 0 0 auto;
    }

    [b-vwq65ll28k] .buchungs-field-datum,
    [b-vwq65ll28k] .buchungs-field-bk,
    [b-vwq65ll28k] .buchungs-field-belegnr,
    [b-vwq65ll28k] .buchungs-field-konto,
    [b-vwq65ll28k] .buchungs-field-kako,
    [b-vwq65ll28k] .buchungs-field-ust,
    [b-vwq65ll28k] .buchungs-field-betrag {
        width: 100%;
    }

    .buchungs-form-actions[b-vwq65ll28k] {
        margin-left: 0;
        margin-top: 0.3rem;
    }

    .buchungs-form-actions[b-vwq65ll28k]  .dxbl-btn {
        flex: 1 1 0;
    }

    .buchungs-form-info[b-vwq65ll28k] {
        grid-template-columns: 1fr;
    }

    .buchungs-form-info-body[b-vwq65ll28k] {
        white-space: normal;
    }

    .buchungs-anz-panel[b-vwq65ll28k] {
        max-height: none;
    }

    .buchungs-anz-row[b-vwq65ll28k] {
        flex-wrap: wrap;
    }

    .buchungs-anz-info[b-vwq65ll28k] {
        flex: 1 1 calc(100% - 2rem);
        white-space: normal;
    }
}

/* Handy quer (Teilmenge der Handy-Query: niedrig + Touch + breit genug). Einspaltig standen
   „Buchen“/„Ändern“ erst nach ~10 Feldern unter dem 390px hohen Rand; zweispaltig blieb es bei
   ~180px Scrollweg. Mit vier Spalten und den Knöpfen in der freien Hälfte der dritten Zeile
   (Datum|BK|Beleg|Soll, Haben|KA|KS|USt, Betrag|Text|Buchen+Ändern) plus etwas niedrigerem
   Journal-Grid passt das Formular auf 844×390 ohne Scrollen. Muss NACH dem Handy-Block stehen. */
@media (max-height: 500px) and (pointer: coarse) and (min-width: 600px) {
    .buchungs-popup-grid-wrapper[b-vwq65ll28k] {
        height: 28dvh;
    }

    .buchungs-form-row[b-vwq65ll28k] {
        display: grid;
        grid-template-columns: repeat(4, 1fr);
        gap: 0.3rem 0.8rem;
        align-items: end;
    }

    .buchungs-form-actions[b-vwq65ll28k] {
        grid-column: span 2;
        margin-top: 0;
    }

    .buchungs-form-info[b-vwq65ll28k] {
        grid-template-columns: 1fr 1fr;
    }
}
/* /Components/Features/Buchungen/BuchungSuche.razor.rz.scp.css */
/* BuchungSuche.razor.css — Suchpanel-Layout.
   Farben kommen ausschließlich aus dem aktiven DevExpress-Theme
   (--dxds-color-* Tokens), daher Theme- und Light/Dark-adaptiv. */

.buchung-suche[b-8to3qbkjbg] {
    height: 100%;
    min-height: 0;
    display: flex;
    flex-direction: column;
    padding: 12px 16px 14px;
    overflow: hidden;
}

/* Toolbar in einer Fluent-Fläche; bricht um statt rechts zu clippen
   (z. B. Betrag-„zwischen" mit zwei Betragsfeldern in schmalem Panel). */
.bs-toolbar[b-8to3qbkjbg] {
    flex: none;
    display: flex;
    align-items: center;
    gap: 10px;
    flex-wrap: wrap;
    background: var(--dxds-color-surface-neutral-default-rest);
    border: 1px solid var(--dxds-color-border-neutral-default-rest);
    border-radius: 4px;
    padding: 9px 12px;
    box-shadow: 0 1.6px 3.6px var(--dxds-color-shadow-ambient), 0 .3px .9px var(--dxds-color-shadow-key);
}

/* Alle Toolbar-Kinder behalten ihre feste Breite (eine Reihe);
   nur das Freitext-Feld (.bs-grow) darf wachsen/schrumpfen. */
.bs-toolbar > *[b-8to3qbkjbg] { flex: 0 0 auto; }

.bs-label[b-8to3qbkjbg] {
    font-size: 13px;
    color: var(--dxds-color-content-neutral-subdued-rest);
    white-space: nowrap;
}

.bs-dash[b-8to3qbkjbg], .bs-suffix[b-8to3qbkjbg] {
    color: var(--dxds-color-content-neutral-subdued-rest);
    font-size: 13px;
}

.bs-divider[b-8to3qbkjbg] {
    width: 1px;
    align-self: stretch;
    background: var(--dxds-color-border-neutral-default-rest);
    margin: 0 2px;
}

/* Freitext-Editor nimmt den Rest der Breite und schrumpft bei Bedarf */
.bs-grow[b-8to3qbkjbg] {
    flex: 1 1 140px;
    min-width: 0;
}

/* Wrapper ums Freitext-Feld faengt Enter ab (@onkeydown -> Suche);
   der Editor darin fuellt die volle Breite. */
.bs-search-wrap[b-8to3qbkjbg] { display: flex; }
.buchung-suche[b-8to3qbkjbg]  .bs-search-input {
    flex: 1 1 auto;
    min-width: 0;
}

/* Toolbar-Editoren mit fester Breite. DevExpress-Editoren sind sonst
   width:100% und der scoped .bs-toolbar>* greift nicht am Komponenten-Root,
   daher per ::deep + width fixieren (Width-Param haelt in Flex nicht). */
.buchung-suche[b-8to3qbkjbg]  .bs-field-select { flex: 0 0 auto; width: 180px; }
.buchung-suche[b-8to3qbkjbg]  .bs-date         { flex: 0 0 auto; width: 140px; }
.buchung-suche[b-8to3qbkjbg]  .bs-operator     { flex: 0 0 auto; width: 150px; }
.buchung-suche[b-8to3qbkjbg]  .bs-amount       { flex: 0 0 auto; width: 120px; }

/* Rechte Gruppe: Trefferzahl + Aktionsbuttons, immer rechtsbündig */
.bs-right[b-8to3qbkjbg] {
    margin-left: auto;
    display: flex;
    align-items: center;
    gap: 12px;
}

.bs-actions[b-8to3qbkjbg] {
    display: flex;
    align-items: center;
    gap: 6px;
}

.bs-count[b-8to3qbkjbg] {
    white-space: nowrap;
    font-size: 13px;
    color: var(--dxds-color-content-neutral-subdued-rest);
}
.bs-count b[b-8to3qbkjbg] { color: var(--dxds-color-content-primary-default-rest); }
.bs-hint[b-8to3qbkjbg] { color: var(--dxds-color-content-neutral-subdued-rest); }

.bs-state[b-8to3qbkjbg] {
    flex: 1;
    min-height: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    text-align: center;
    padding: 24px;
    color: var(--dxds-color-content-neutral-subdued-rest);
    font-size: 14px;
}

.bs-error[b-8to3qbkjbg] {
    color: var(--dxds-color-content-danger-default-rest);
}

/* Grid füllt den Rest und scrollt intern. */
.buchung-suche[b-8to3qbkjbg]  .bs-grid {
    flex: 1 1 0;
    min-height: 0;
    border-radius: 4px;
}
/* /Components/Features/Buchungen/KontoblaetterPage.razor.rz.scp.css */
.kontoblaetter-page[b-qsatro3hbc] {
    display: flex;
    flex-direction: column;
    height: 100%;
    padding: 0.75rem 1rem;
    gap: 0.5rem;
    overflow: hidden;
}

.kontoblaetter-page .kontoblaetter-header[b-qsatro3hbc] {
    display: flex;
    flex-direction: column;
    gap: 0.5rem;
    flex: 0 0 auto;
}

.kontoblaetter-page .kontoblaetter-actions[b-qsatro3hbc] {
    flex: 0 0 auto;
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.3rem 0.6rem;
}

/* Label + DateEdit als eine zusammenhängende, mittig ausgerichtete Einheit, die
   beim Umbruch nicht getrennt wird. */
.kontoblaetter-page .kontoblaetter-stichtag[b-qsatro3hbc] {
    display: inline-flex;
    align-items: center;
    gap: 0.4rem;
}

.kontoblaetter-page .kontoblaetter-viewer-wrap[b-qsatro3hbc] {
    flex: 1 1 0;
    min-height: 0;
    display: flex;
    flex-direction: column;
    /* DxReportViewer braucht eine explizite Höhe — der Tab-Body ist ein
       flex-Container, der Wrapper füllt den Rest, der Viewer 100% davon. */
}

.kontoblaetter-page[b-qsatro3hbc]  .kontoblaetter-viewer {
    flex: 1 1 0;
    min-height: 0;
    height: 100%;
    width: 100%;
}
/* /Components/Features/Buchungen/KontoEigenschaftenPopup.razor.rz.scp.css */
.konto-eig[b-hk6uoaugd3] {
    display: flex;
    flex-direction: column;
    gap: 0.6rem;
}

.konto-eig-kopf[b-hk6uoaugd3] {
    display: flex;
    gap: 0.6rem;
    align-items: baseline;
    font-weight: 600;
}

.konto-eig-art[b-hk6uoaugd3] {
    font-weight: normal;
    color: var(--dxds-color-content-neutral-subdued-rest);
}

/* Zeilen brechen auf schmalen Screens um — Felder wachsen mit. */
.konto-eig-row[b-hk6uoaugd3] {
    display: flex;
    flex-wrap: wrap;
    gap: 0.6rem;
}

.konto-eig-field[b-hk6uoaugd3] {
    display: flex;
    flex-direction: column;
    gap: 0.15rem;
    min-width: 0;
}

/* Basis nur in den Zeilen: in der senkrechten .konto-eig wäre sie eine Höhe. */
.konto-eig-row > .konto-eig-field[b-hk6uoaugd3] {
    flex: 1 1 160px;
}

.konto-eig-field label[b-hk6uoaugd3] {
    font-size: 0.8rem;
    color: var(--dxds-color-content-neutral-subdued-rest);
}

.konto-eig-row > .konto-eig-nr-feld[b-hk6uoaugd3] {
    flex: 0 1 90px;
}

.konto-eig-info[b-hk6uoaugd3] {
    overflow-wrap: anywhere;
}
/* /Components/Features/Buchungen/KontoPage.razor.rz.scp.css */
.konto-page[b-0mnjufr06k] {
    height: 100%;
    min-height: 0;
    display: flex;
    flex-direction: column;
    overflow: hidden;
    padding: 10px 12px 12px;
    background: var(--dxds-color-surface-neutral-subdued-rest);
}

/* Mint-Card umschließt Titelleiste + Grid (Design-Handoff Firma-Tabs). */
.kd-card[b-0mnjufr06k] {
    flex: 1 1 0;
    min-height: 0;
    display: flex;
    flex-direction: column;
    border: 1px solid var(--dxds-color-border-neutral-default-rest);
    border-radius: 6px;
    overflow: hidden;
    background: var(--dxds-color-surface-neutral-default-rest);
    box-shadow: 0 1.6px 3.6px var(--dxds-color-shadow-ambient), 0 .3px .9px var(--dxds-color-shadow-key);
}

.tab-header[b-0mnjufr06k] {
    flex: 0 0 auto;
    padding: 11px 16px;
    font-weight: 700;
    font-size: 15px;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    background: var(--dxds-color-surface-primary-default-rest);
    color: var(--dxds-color-content-neutral-default-inverted-rest);
}

.tab-loading[b-0mnjufr06k] {
    padding: 1rem;
    color: var(--dxds-color-content-neutral-subdued-rest);
    font-style: italic;
}

/* DxGrid fills remaining space in its flex parent; flex-basis 0 forces
   pure flex sizing so the grid doesn't overflow .tab-header, and min-height: 0
   lets it shrink to its allotted box. */
.konto-page[b-0mnjufr06k]  .fibu-grid {
    flex: 1 1 0;
    min-height: 0;
}

.kp-popup[b-0mnjufr06k] {
    display: flex;
    flex-direction: column;
    gap: 0.5rem;
    padding: 0.25rem 0;
}

.kp-popup-label[b-0mnjufr06k] {
    font-size: 0.85rem;
    color: var(--dxds-color-content-neutral-subdued-rest);
}

.kp-popup[b-0mnjufr06k]  .kp-popup-picker {
    width: 100%;
}

/* Handy (Query wie in wwwroot/js/viewport.js). Im Querformat blieben neben Titelbalken,
   Gruppierleiste und Filterzeile nur ~2 Buchungszeilen sichtbar. Die Gruppierleiste
   entfällt dort (ShowGroupPanel, KontoPage.razor), Rand und Titelbalken werden schmaler. */
@media (max-width: 767px), (max-height: 500px) and (pointer: coarse) {
    .konto-page[b-0mnjufr06k] {
        padding: 4px;
    }

    .tab-header[b-0mnjufr06k] {
        padding: 4px 10px;
        font-size: 13px;
    }
}

/* /Components/Features/Buchungen/StammdatenQuickPopup.razor.rz.scp.css */
.stamm-quick[b-9cmwnvzmc7] {
    display: flex;
    flex-direction: column;
    gap: 0.6rem;
}

/* Zeilen brechen auf schmalen Screens um (responsiv) — Felder wachsen mit. */
.stamm-quick-row[b-9cmwnvzmc7] {
    display: flex;
    flex-wrap: wrap;
    gap: 0.6rem;
}

.stamm-quick-field[b-9cmwnvzmc7] {
    display: flex;
    flex-direction: column;
    gap: 0.15rem;
    flex: 1 1 160px;
    min-width: 0;
}

.stamm-quick-field label[b-9cmwnvzmc7] {
    font-size: 0.8rem;
    color: var(--dxds-color-content-neutral-subdued-rest);
}

.stamm-quick-nr[b-9cmwnvzmc7] {
    flex: 0 1 120px;
}

/* Zeigt den bisher am Konto hinterlegten Wert, wenn der Vorschlag ihn
   überschreiben würde (Bearbeiten-Modus Steuerkategorie). */
.stamm-quick-hint[b-9cmwnvzmc7] {
    font-size: 0.8rem;
    color: var(--dxds-color-content-neutral-subdued-rest);
}
/* /Components/Features/Buchungen/UstUebersichtPage.razor.rz.scp.css */
.ust-page[b-uem15h9vf7] {
    display: flex;
    flex-direction: column;
    height: 100%;
    padding: 0.75rem 1rem;
    gap: 0.5rem;
    overflow: hidden;
}

.ust-page .ust-header[b-uem15h9vf7] {
    display: flex;
    flex-direction: column;
    gap: 0.5rem;
    flex: 0 0 auto;
}

/* Schlichte Flex-Wrap-Leiste (statt DxToolbar): bricht bei Platzmangel um,
   statt überlaufende Items abzuschneiden. */
.ust-page .ust-actions[b-uem15h9vf7] {
    flex: 0 0 auto;
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.3rem 0.6rem;
}

.ust-page .ust-pivot-wrap[b-uem15h9vf7] {
    flex: 1 1 0;
    min-height: 0;
    display: flex;
    flex-direction: column;
}

.ust-page[b-uem15h9vf7]  .ust-pivot {
    flex: 1 1 0;
    min-height: 0;
    height: 100%;
}

/* Datenzellen sind per Doppelklick drillbar (ust-pivot-drill.js) — Zeiger nur
   dort, nicht auf den Zeilenköpfen. Kein eigenes Span mehr pro Zelle. */
.ust-page[b-uem15h9vf7]  .ust-pivot table.dxbl-pivot-table-data tbody td:not(.dxbl-pivot-table-row-field-item) {
    cursor: pointer;
}

/* .ust-drill-wrap / .ust-drill-grid leben in app.css (global), weil
   DxPopup seinen Body via JS aus dem Page-Subtree raus-teleportiert —
   scoped CSS mit ::deep würde dann nicht mehr matchen. Gleicher Grund,
   warum .stamm-tab in app.css steht. */

/* ---- Grand-Total-Spalte und -Zeile beim Scrollen fixieren ----
   Muster wie im KORE-BAB (BabPage.razor.css, dort ausführlich): DxPivotTable
   kennt kein FixedPosition, das Theme fixiert aber selbst thead (z2) und
   Zeilenköpfe (links, z3) per sticky. Hier sind es die NATIVEN Grand Totals:
   die Spalte ist die :last-child-Zelle jeder Zeile, die Zeile erkennt man am
   Zeilenkopf-th mit .dxbl-pivot-table-grand-total. Deckende Hintergründe
   liefert das Theme (--dxbl-pivot-table-total-bg). Doppelklassen, weil das
   per DxResourceManager registrierte Theme NACH dem Scoped-CSS lädt. */

/* Grand-Total-Spalte rechts anheften (Daten- wie Kopfzellen). */
.ust-page[b-uem15h9vf7]  .ust-pivot td.dxbl-pivot-table-grand-total.dxbl-pivot-table-grand-total:last-child,
.ust-page[b-uem15h9vf7]  .ust-pivot th.dxbl-pivot-table-grand-total.dxbl-pivot-table-grand-total:last-child {
    position: sticky;
    inset-inline-end: 0;
    z-index: 2;
}

/* Grand-Total-Kopfzelle (thead): über den sticky-links-Kopfzellen (z3) halten. */
.ust-page[b-uem15h9vf7]  .ust-pivot thead .dxbl-pivot-table-grand-total.dxbl-pivot-table-grand-total:last-child {
    z-index: 4;
}

/* Der thead selbst (Theme: sticky oben, z-index 2) ist ein eigener Stacking-Kontext —
   das z4 der Kopfzelle zählt nur darin. Gegen die sticky Gesamt-DATENZELLEN (z2, oben)
   steht der thead mit gleichem z2 und verliert per DOM-Reihenfolge: beim Scrollen nach
   unten schoben sich die Zellen über den „Gesamt"-Kopf (gemessen 2026-09-06). Darum
   thead über alle sticky tbody-Zellen (Zeilenköpfe z1, Gesamt-Spalte z2) heben. */
.ust-page[b-uem15h9vf7]  .ust-pivot table.dxbl-pivot-table-data > thead {
    z-index: 3;
}

/* Die Gesamt-ZEILE gibt es nicht mehr (ShowRowGrandTotals=false) — bei Virtualisierung
   wäre sie erst ganz unten im DOM. Ersatz ist die Summenleiste .ust-totals unten. */

/* ScrollViewer-Scrollbars (absolute Overlays ohne z-index) über die
   Sticky-Ebenen heben — sonst verdeckt die Summenspalte den vertikalen
   Scrollbar (gleiche Falle wie im KORE-BAB). */
.ust-page[b-uem15h9vf7]  .ust-pivot > .dxbl-scroll-viewer > .dxbl-scroll-viewer-vert-scroll-bar,
.ust-page[b-uem15h9vf7]  .ust-pivot > .dxbl-scroll-viewer > .dxbl-scroll-viewer-hor-scroll-bar {
    z-index: 5;
}

/* ---- Kompaktere Zeilen -------------------------------------------------
   Die Zeilenhöhe kam nicht vom Text (line-height 14px bei 10.5px Schrift),
   sondern vom Aufklapp-Button der ersten Spalte: 18px hoch, dazu je ~3px
   Zell-Padding oben und unten — macht 25px pro Zeile. Gemessen am
   gerenderten DOM, nicht geschätzt.
   Das Padding NICHT direkt setzen: das Theme adressiert die Zellen über
   .dxbl-pivot-table > .dxbl-scroll-viewer > … > tbody > tr > td und schlägt
   damit jede vernünftige eigene Regel. Es speist den Wert aber aus CSS-
   Variablen — die erben, lassen sich also am Container überschreiben. Das ist
   der vorgesehene Weg und robuster als ein Spezifitäts-Wettrüsten. */
.ust-page[b-uem15h9vf7]  .ust-pivot {
    --dxbl-pivot-table-cell-padding-y: 0.0625rem;                       /* 2.6px → 1px */
    --dxbl-pivot-table-expandable-container-cell-padding-y: 0.0625rem;
}

/* NUR den Pfeil verkleinern, nicht seinen Container: .dxbl-pivot-table-expand-button
   ist trotz des Namens kein Button, sondern ein Wrapper, der den Pfeil UND den
   Zellwert enthält. Wer ihm eine Breite gibt, quetscht den Text weg (genau das ist
   beim ersten Versuch passiert — die Spalten mit Aufklapp-Pfeil waren leer).
   Der eigentliche Pfeil ist das innere button.dxbl-btn: 18x18 durch 1.75px Padding
   um ein 14x14-SVG; ohne Padding ist er so hoch wie die Textzeile. */
.ust-page[b-uem15h9vf7]  .ust-pivot.ust-pivot .dxbl-pivot-table-expand-button > button.dxbl-btn {
    padding: 0;
    height: 14px;
    width: 14px;
}

/* ---- Summenleiste unter dem Pivot ----------------------------------------
   Zellen absolut an den Kopfzellen ausgerichtet (ust-pivot-drill.js registerTotals/
   align), der Track folgt dem Horizontal-Scroll per translateX; „Gesamt"-Label links
   und Gesamt-Spalte rechts liegen fix darüber wie die sticky Zellen im Pivot. Schrift
   kopiert align() vom Pivot (die DX-CSS-Variablen erben nicht auf das Geschwister). */
.ust-page .ust-totals[b-uem15h9vf7] {
    flex: 0 0 auto;
    position: relative;
    height: 1.7rem;
    overflow: hidden;
    border-top: 2px solid var(--dxbl-pivot-table-border-color, #c9c9c9);
    background: var(--dxbl-pivot-table-total-bg, #f4f4f3);
    font-weight: 600;
}

.ust-page .ust-totals-label[b-uem15h9vf7],
.ust-page .ust-totals-cell[b-uem15h9vf7] {
    position: absolute;
    top: 0;
    height: 100%;
    display: flex;
    align-items: center;
    padding: 0 0.35rem;
    box-sizing: border-box;
    white-space: nowrap;
    overflow: hidden;
}

.ust-page .ust-totals-label[b-uem15h9vf7] {
    left: 0;
    z-index: 2;
    background: var(--dxbl-pivot-table-total-bg, #f4f4f3);
    justify-content: flex-start;
}

.ust-page .ust-totals-track[b-uem15h9vf7] {
    position: absolute;
    inset: 0 auto 0 0;
    will-change: transform;
}

.ust-page .ust-totals-cell[b-uem15h9vf7] {
    justify-content: flex-end;
}

.ust-page .ust-totals-grand[b-uem15h9vf7] {
    z-index: 2;
    background: var(--dxbl-pivot-table-total-bg, #f4f4f3);
    border-left: 1px solid var(--dxbl-pivot-table-border-color, #c9c9c9);
}

.ust-page .ust-totals-hint[b-uem15h9vf7] {
    position: absolute;
    right: 0.5rem;
    top: 0;
    height: 100%;
    display: flex;
    align-items: center;
    z-index: 3;
    font-weight: 400;
    color: #a33;
    background: var(--dxbl-pivot-table-total-bg, #f4f4f3);
    padding: 0 0.35rem;
}

/* ---- Handy (gleiche Query wie wwwroot/js/viewport.js): nichts waagrecht anheften ----
   Zeilenköpfe (KtoArt/KtoNr/Bezeichnung, vom Theme sticky links) plus Gesamt-Spalte
   (sticky rechts, oben) waren zusammen breiter als das Handy und deckten alle Wertspalten
   zu. Hier nur den waagrechten Versatz aufheben: position bleibt sticky, der thead bleibt
   oben angeheftet. Das „Gesamt"-Label der Summenleiste ist auf die Breite der Zeilenköpfe
   fixiert und deckte dann die ersten Summen zu — am Handy weg. */
@media (max-width: 767px), (max-height: 500px) and (pointer: coarse) {
    .ust-page[b-uem15h9vf7]  .ust-pivot .dxbl-pivot-table-fixed-cell.dxbl-pivot-table-fixed-cell,
    .ust-page[b-uem15h9vf7]  .ust-pivot td.dxbl-pivot-table-grand-total.dxbl-pivot-table-grand-total:last-child,
    .ust-page[b-uem15h9vf7]  .ust-pivot th.dxbl-pivot-table-grand-total.dxbl-pivot-table-grand-total:last-child {
        left: auto !important;
        right: auto !important;
        inset-inline-start: auto !important;
        inset-inline-end: auto !important;
    }

    .ust-page .ust-totals-label[b-uem15h9vf7] {
        display: none;
    }

    /* Kopfzeile mit dem Datenfeld „Saldo“ und den Spaltenfeld-Chips (UStSatz/UStKto) wie in
       der BAB weg — sie kostete am Handy samt Leerfläche ~60px. */
    .ust-page[b-uem15h9vf7]  tr.dxbl-pivot-table-data-headers-column-headers-row {
        display: none;
    }
}
/* /Components/Features/Erfolgsrechnung/ErfolgsDruckPopup.razor.rz.scp.css */
.erdruck-form[b-82rjihu6y2] {
    display: flex;
    flex-direction: column;
    gap: 0.75rem;
}

.erdruck-firma[b-82rjihu6y2] {
    font-weight: 600;
}

.erdruck-monat[b-82rjihu6y2] {
    display: flex;
    align-items: center;
    gap: 0.5rem;
}

.erdruck-monat-label[b-82rjihu6y2] {
    font-size: 0.85em;
    font-weight: 600;
    white-space: nowrap;
}

.erdruck-monat[b-82rjihu6y2]  .erdruck-monat-combo {
    flex: 1;
}

.erdruck-group[b-82rjihu6y2] {
    display: flex;
    flex-direction: column;
    gap: 0.35rem;
    border: 1px solid var(--dxbl-border-color, #d0d0d0);
    border-radius: 4px;
    padding: 0.5rem 0.75rem 0.75rem;
    margin: 0;
}

.erdruck-group legend[b-82rjihu6y2] {
    font-size: 0.85em;
    font-weight: 600;
    padding: 0 0.25rem;
    float: none;
    width: auto;
    margin-bottom: 0;
}

.erdruck-anhang[b-82rjihu6y2] {
    display: flex;
    align-items: center;
    gap: 0.5rem;
}

.erdruck-anhang-name[b-82rjihu6y2] {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.erdruck-anhang-hinweis[b-82rjihu6y2] {
    font-size: 0.85em;
    color: var(--dxbl-text-secondary-color, #666);
}

.erdruck-anhang-fehler[b-82rjihu6y2] {
    color: var(--bs-danger, #dc3545);
}
/* /Components/Features/Erfolgsrechnung/ErfolgsrechnungPage.razor.rz.scp.css */
.er-page[b-1n3p1yzvfs] {
    display: flex;
    flex-direction: column;
    height: 100%;
    min-height: 0;
}

.er-header[b-1n3p1yzvfs] {
    padding: 6px 8px;
}

/* Flex-Wrap-Leiste statt DxToolbar (Hausmuster, vgl. .kore-bab-actions) */
.er-actions[b-1n3p1yzvfs] {
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
    align-items: center;
}

/* Fixe Breite gegen Theme-CSS: Doppelklasse (vgl. DevExpress-Editor-Breite in Flex-Leiste) */
.er-actions[b-1n3p1yzvfs]  .er-monat-combo.er-monat-combo {
    width: 180px;
}

.er-error[b-1n3p1yzvfs] { color: var(--dxds-color-content-danger-default-rest); margin-top: 6px; }
.er-info[b-1n3p1yzvfs]  { color: var(--dxds-color-content-info-default-rest); margin-top: 6px; }

.er-loading[b-1n3p1yzvfs] { padding: 16px; color: var(--dxds-color-content-neutral-subdued-rest); }

.er-scroll[b-1n3p1yzvfs] {
    flex: 1;
    min-height: 0;
    overflow: auto;
}

.er-table[b-1n3p1yzvfs] {
    border-collapse: collapse;
    font-size: 12px;
    white-space: nowrap;
}

.er-table thead th[b-1n3p1yzvfs] {
    position: sticky;
    background: var(--dxds-color-surface-neutral-subdued-rest);
    z-index: 1;
    text-align: right;
    padding: 3px 8px;
    border-bottom: 1px solid var(--dxds-color-border-neutral-default-rest);
}

/* Gestaffelte Sticky-Offsets: feste Kopfzeilenhöhe, damit Zeile 2/3 unter
   Zeile 1 kleben statt sie zu überdecken (3 Kopfzeilen im Profitcenter). */
.er-table thead th[b-1n3p1yzvfs] {
    height: 24px;
    box-sizing: border-box;
}
.er-table thead tr:nth-child(1) th[b-1n3p1yzvfs] { top: 0; }
.er-table thead tr:nth-child(2) th[b-1n3p1yzvfs] { top: 24px; }
.er-table thead tr:nth-child(3) th[b-1n3p1yzvfs] { top: 48px; }

.er-table thead .er-titelzeile th[b-1n3p1yzvfs] {
    text-align: left;
    font-size: 13px;
}

.er-table td[b-1n3p1yzvfs] {
    padding: 1px 8px;
}

.er-label[b-1n3p1yzvfs] {
    text-align: left;
    min-width: 220px;
    position: sticky;
    left: 0;
    background: var(--dxds-color-surface-neutral-default-rest);
}

.er-table thead .er-label[b-1n3p1yzvfs] { background: var(--dxds-color-surface-neutral-subdued-rest); z-index: 2; }

.er-betrag[b-1n3p1yzvfs] { text-align: right; min-width: 90px; }
.er-prozent[b-1n3p1yzvfs] { text-align: right; min-width: 44px; color: var(--dxds-color-content-neutral-subdued-rest); }

.er-zwischensumme td[b-1n3p1yzvfs] { font-weight: 600; border-top: 1px solid var(--dxds-color-border-neutral-default-rest); }
.er-ergebnis td[b-1n3p1yzvfs] { font-weight: 700; border-top: 1px double var(--dxds-color-border-neutral-accessible-rest); background: var(--dxds-color-surface-neutral-subdued-rest); }
.er-ergebnis td.er-label[b-1n3p1yzvfs] { background: var(--dxds-color-surface-neutral-subdued-rest); }
.er-abstand td[b-1n3p1yzvfs] { padding-top: 10px; }

/* Fixe Breite gegen Theme-CSS: Doppelklasse (vgl. .er-monat-combo) */
.er-actions[b-1n3p1yzvfs]  .er-pcks-combo.er-pcks-combo {
    width: 200px;
}

.er-table thead .er-blockzeile th.er-block[b-1n3p1yzvfs] {
    text-align: center;
    font-weight: 600;
    border-bottom: none;
}

/* Blocktitel bleibt im sichtbaren Scroll-Ausschnitt: sticky rechts neben
   der fixierten Label-Spalte (deren z-index 2 ihn ggf. überdeckt). */
.er-blockzeile th.er-block .er-block-titel[b-1n3p1yzvfs] {
    position: sticky;
    left: 240px;
    display: inline-block;
}

.er-blockstart[b-1n3p1yzvfs] { border-left: 2px solid var(--dxds-color-border-neutral-default-rest); }

/* Label-Kopf („Leistung/Kosten", „Fertigung") in allen Tabellen linksbündig,
   PC-Spaltenköpfe zentriert (Spezifität muss .er-table thead th mit
   text-align:right schlagen) */
.er-table thead th.er-label[b-1n3p1yzvfs] { text-align: left; }
.er-table.er-pc thead th.er-betrag[b-1n3p1yzvfs] { text-align: center; }

/* Matrixtitel sitzt im sticky Label-Kopf; absolut positioniert, damit der
   lange Titel die 220px-Label-Spalte nicht aufweitet (sticky-th ist
   Containing Block, z-index 2 hebt ihn über die Nachbarzelle). */
.er-titelzeile .er-tabellentitel[b-1n3p1yzvfs] {
    position: absolute;
    left: 8px;
    top: 50%;
    transform: translateY(-50%);
    white-space: nowrap;
}

/* Speichern-Bestätigung (Planung): rechts neben dem Tabellentitel statt
   als eigene Alert-Zeile im Header */
.er-titelzeile .er-titel-info[b-1n3p1yzvfs] {
    margin-left: 24px;
    font-weight: 400;
    color: var(--dxds-color-content-info-default-rest);
}

/* Toggle-Checkbox der einklappbaren Monatsspalten: rechtsbündig im Kopf
   der Summenspalte (SOLL/Vorjahr/IST), klappt die dahinter liegenden
   12 Monatsspalten auf/zu. (sticky-th ist Containing Block für absolute) */
.er-pc thead th.er-kopf-mit-check[b-1n3p1yzvfs] { padding-right: 24px; }
.er-block-check[b-1n3p1yzvfs] {
    position: absolute;
    right: 6px;
    top: 50%;
    transform: translateY(-50%);
    margin: 0;
    cursor: pointer;
}

/* Kalkulation: Satz-Spalten + SOLL-Eingabe */
.er-satz[b-1n3p1yzvfs] {
    text-align: right;
    min-width: 64px;
    white-space: nowrap;
    color: var(--dxds-color-content-neutral-subdued-rest);
}

.er-kalk .er-prozent[b-1n3p1yzvfs] {
    min-width: 56px;
}

/* Fixe Breite gegen Theme-CSS: Doppelklasse (vgl. .er-monat-combo) */
.er-kalk[b-1n3p1yzvfs]  .er-soll-input.er-soll-input {
    width: 72px;
    display: inline-flex;
}

.er-kalk[b-1n3p1yzvfs]  .er-soll-input input {
    text-align: right;
}

/* Stunden: Blockköpfe + WJ-Zeilen */
.er-stunden-kopf td[b-1n3p1yzvfs] {
    font-weight: 600;
    padding-top: 10px;
    border-bottom: 1px solid var(--dxds-color-border-neutral-default-rest);
}

.er-stunden .er-stunden-wj[b-1n3p1yzvfs] {
    padding-left: 24px;
    font-weight: 400;
}

/* Planung-Editor: native Inputs (≈500 Zellen — DX-Editoren wären zu schwer) */
.er-planung .er-plan-input[b-1n3p1yzvfs] {
    width: 78px;
    text-align: right;
    border: 1px solid var(--dxds-color-border-neutral-default-rest);
    border-radius: 3px;
    padding: 1px 4px;
    font: inherit;
    color: var(--dxds-color-content-neutral-default-rest);
    background: var(--dxds-color-surface-neutral-default-rest);
}

/* Vorschau: fixierte Ist-Monate — als Wert lesbar, nicht als Eingabefeld */
.er-planung .er-plan-input.er-plan-ist[b-1n3p1yzvfs] {
    border-color: transparent;
    background: transparent;
    color: inherit;
}

.er-planung .er-plan-pct[b-1n3p1yzvfs] {
    width: 52px;
    text-align: right;
    border: 1px solid var(--dxds-color-border-neutral-default-rest);
    border-radius: 3px;
    padding: 1px 4px;
    font: inherit;
    color: var(--dxds-color-content-neutral-default-rest);
    background: var(--dxds-color-surface-neutral-default-rest);
}

/* Korrekturbetrag (+/−): breit genug für zweistellige Millionenbeträge */
.er-planung .er-plan-korr[b-1n3p1yzvfs] {
    width: 96px;
    text-align: right;
    border: 1px solid var(--dxds-color-border-neutral-default-rest);
    border-radius: 3px;
    padding: 1px 4px;
    font: inherit;
    color: var(--dxds-color-content-neutral-default-rest);
    background: var(--dxds-color-surface-neutral-default-rest);
}

/* Editierbarer Jahreszielwert — gleiche Optik wie das Korrekturfeld */
.er-planung .er-plan-ziel[b-1n3p1yzvfs] {
    width: 96px;
    text-align: right;
    border: 1px solid var(--dxds-color-border-neutral-default-rest);
    border-radius: 3px;
    padding: 1px 4px;
    font: inherit;
    color: var(--dxds-color-content-neutral-default-rest);
    background: var(--dxds-color-surface-neutral-default-rest);
}

.er-plan-btn[b-1n3p1yzvfs] {
    font: inherit;
    font-size: 11px;
    padding: 1px 8px;
    border: 1px solid var(--dxds-color-border-neutral-default-rest);
    border-radius: 3px;
    color: var(--dxds-color-content-neutral-default-rest);
    background: var(--dxds-color-surface-neutral-subdued-rest);
    cursor: pointer;
}

/* Zeilen-Buttons (✗ = % VJ Ø VJ) nebeneinander, ohne Umbruch */
.er-planung .er-plan-btns[b-1n3p1yzvfs] {
    white-space: nowrap;
}

.er-planung .er-plan-btns .er-plan-btn + .er-plan-btn[b-1n3p1yzvfs] {
    margin-left: 4px;
}

.er-plan-btn.er-plan-x[b-1n3p1yzvfs],
.er-plan-btn.er-plan-eq[b-1n3p1yzvfs],
.er-plan-btn.er-plan-pctfill[b-1n3p1yzvfs],
.er-plan-btn.er-plan-avg[b-1n3p1yzvfs] {
    padding: 1px 5px;
}

.er-plan-btn:hover:not(:disabled)[b-1n3p1yzvfs] { background: var(--dxds-color-surface-neutral-alpha-hovered); }

.er-plan-btn:disabled[b-1n3p1yzvfs] {
    opacity: .4;
    cursor: default;
}

/* Referenz-%-Zellen als unauffällige Buttons: Optik wie der Text drumherum,
   erst der Hover verrät die Klickbarkeit (Anteil × Ziel-BL → Jahresziel). */
.er-plan-pctbtn[b-1n3p1yzvfs] {
    font: inherit;
    padding: 0;
    border: none;
    background: none;
    color: inherit;
    cursor: pointer;
}

.er-plan-pctbtn:hover[b-1n3p1yzvfs] {
    color: var(--dxds-color-content-neutral-default-rest);
    text-decoration: underline;
}

/* Grafik-Sicht: je Panel (Summe/KS) drei Charts nebeneinander,
   auf schmalen Fenstern umbrechend */
.er-grafik-panel[b-1n3p1yzvfs] {
    padding: 8px 8px 0;
}

.er-grafik-titel[b-1n3p1yzvfs] {
    font-size: 14px;
    font-weight: 700;
    padding: 4px 0;
    border-bottom: 1px solid var(--dxds-color-border-neutral-default-rest);
    margin-bottom: 4px;
}

.er-grafik-charts[b-1n3p1yzvfs] {
    display: flex;
    flex-wrap: wrap;
    gap: 12px;
}

.er-grafik-chart[b-1n3p1yzvfs] {
    flex: 1 1 340px;
    min-width: 340px;
    max-width: 640px;
}

.er-grafik-chart-titel[b-1n3p1yzvfs] {
    font-size: 12px;
    font-weight: 600;
    text-align: center;
    padding: 2px 0;
}

/* Stunden-Ansicht: je KS Tabelle links (vertikal zentriert zum Chart),
   StundenDiag-Chart rechts daneben */
.er-stunden-block[b-1n3p1yzvfs] {
    display: flex;
    align-items: center;
    gap: 24px;
    margin-bottom: 8px;
}

.er-stunden-block .er-stunden-chart[b-1n3p1yzvfs] {
    width: 420px;
    flex: 0 0 auto;
}

/* Handy (Query wie in wwwroot/js/viewport.js). Die klebende Bezeichnungsspalte war 245px
   breit — neben ihr passte nur eine Wertspalte, und deren Kopf („Teilefertigung“) wurde
   beim seitlichen Scrollen links abgeschnitten. Dort schmal und umbrechend; der Titel
   bekommt zwei Zeilen statt rechts aus dem Bild zu laufen. */
@media (max-width: 767px), (max-height: 500px) and (pointer: coarse) {
    .er-actions[b-1n3p1yzvfs]  .er-monat-combo.er-monat-combo {
        width: 150px;
    }

    .er-actions[b-1n3p1yzvfs]  .er-ansicht-combo.er-ansicht-combo {
        width: 130px;
    }

    .er-label[b-1n3p1yzvfs] {
        min-width: 0;
        width: 9.5rem;
        white-space: normal;
        hyphens: auto;
    }

    .er-prozent[b-1n3p1yzvfs] {
        min-width: 34px;
    }

    /* Titelzeile zweizeilig: die gestaffelten Sticky-Offsets der Folgezeilen rücken mit. */
    .er-table thead tr:nth-child(1) th[b-1n3p1yzvfs] { height: 40px; }
    .er-table thead tr:nth-child(2) th[b-1n3p1yzvfs] { top: 40px; }
    .er-table thead tr:nth-child(3) th[b-1n3p1yzvfs] { top: 64px; }

    .er-titelzeile .er-tabellentitel[b-1n3p1yzvfs] {
        white-space: normal;
        width: calc(100vw - 32px);
    }

    /* Blocktitel (Profitcenter) linksbündig rechts neben der schmaleren Bezeichnungsspalte —
       mittig im ~700px breiten Block lag er außerhalb des Bildschirms. */
    .er-table thead .er-blockzeile th.er-block[b-1n3p1yzvfs] {
        text-align: left;
    }

    .er-blockzeile th.er-block .er-block-titel[b-1n3p1yzvfs] {
        left: calc(9.5rem + 24px);
    }

    .er-grafik-chart[b-1n3p1yzvfs] {
        min-width: 0;
        flex-basis: 100%;
    }

    .er-stunden-block[b-1n3p1yzvfs] {
        flex-wrap: wrap;
    }

    .er-stunden-block .er-stunden-chart[b-1n3p1yzvfs] {
        width: 100%;
    }
}
/* /Components/Features/Firmen/FirmaJobProgressInline.razor.rz.scp.css */
/* Abbrechen-Affordance im Footer des Firma-Editors (heller Popup-Hintergrund): je Job
   eine Zeile (Titel + „Abbrechen"). Den Fortschritt zeigt der App-FooterBar; hier wird er
   bewusst NICHT gedoppelt. Mehrere Jobs (1 laufend + ggf. wartende) stapeln sich vertikal
   über den Block-Flow des umgebenden .popup-footer-progress. */

.op-progress[b-uo59y7qnm4] {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    min-width: 0;
    font-size: 0.8rem;
    color: var(--dxds-color-content-neutral-default-rest);
}

.op-progress + .op-progress[b-uo59y7qnm4] {
    margin-top: 0.25rem;
}

.op-progress-title[b-uo59y7qnm4] {
    font-weight: 600;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
/* /Components/Features/Konsolidierung/AddTochterPopup.razor.rz.scp.css */
/* Styles für .add-tochter-body / .add-tochter-grid leben in app.css (global),
   weil DxPopup seinen Body via JS aus dem Page-Subtree raus-teleportiert —
   scoped CSS mit ::deep würde dann nicht matchen. */
/* /Components/Features/Konsolidierung/KonsolidierungPage.razor.rz.scp.css */
.kons-page[b-k7dr2lfv71] {
    display: flex;
    flex-direction: column;
    height: 100%;
    padding: 0.75rem 1rem;
    gap: 0.5rem;
    overflow: hidden;
}

.kons-page .kons-header[b-k7dr2lfv71] {
    display: flex;
    flex-direction: column;
    gap: 0.5rem;
    flex: 0 0 auto;
}

.kons-tool-row[b-k7dr2lfv71] {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    flex: 0 0 auto;
}

.kons-tool-row[b-k7dr2lfv71] >  .kons-actions {
    flex: 0 0 auto;
}

.kons-tool-row[b-k7dr2lfv71] >  .kons-filter {
    flex: 1 1 auto;
    min-width: 0;
}

.kons-page .kons-pivot-wrap[b-k7dr2lfv71] {
    flex: 1 1 0;
    min-height: 0;
    display: flex;
    flex-direction: column;
}

.kons-page[b-k7dr2lfv71]  .kons-grid {
    flex: 1 1 0;
    min-height: 0;
    height: 100%;
}

/* Spaltenheader-Inhalt: width:0 + min-width:100% entkoppelt den Header von der
   Breitenmessung — er folgt der Spaltenbreite, statt sie zu bestimmen. Dadurch
   ignoriert AutoFit die (teils langen) Firmennamen-Header (nur die Wertzellen
   zählen) und der Text bricht bei schmalen Spalten um. Analog .bilanz-colhead. */
.kons-page[b-k7dr2lfv71]  .kons-colhead {
    white-space: normal;
    overflow-wrap: anywhere;
    width: 0;
    min-width: 100%;
}

/* Header ab Spalte Summe (Summe + Firmenspalten) zentriert; KtoNr/Bezeichnung
   bleiben linksbündig. */
.kons-page[b-k7dr2lfv71]  .kons-colhead-center {
    text-align: center;
}

/* Die Saldo-Zellen füllen ihre Grid-Zelle; das Zellen-Padding trägt der Span.
   !important, weil die DevExpress-Standard-Zellpadding-Regel (mit sehr hoher
   Spezifität durch viele :not(...)) sonst gewinnt — dann käme das Padding
   doppelt (td + Span) und die Zeile würde höher als der Grid-Standard. */
.kons-page[b-k7dr2lfv71]  .kons-grid td:has(> .kons-cell) {
    padding: 0 !important;
}

/* Kontonummer kommt in ihrer Kontoart-Gruppe (0–2 bzw. 3–4) mehrfach vor: ganze Zeile
   im Warn-Ton. Auch die links fixierten Zellen (KtoNr/Bezeichnung/Summe/Mutter) —
   die tragen sonst den Grid-Hintergrund, damit sie beim Scrollen decken. */
.kons-page[b-k7dr2lfv71]  .kons-grid tr.kons-row-mehrfach > td {
    background-color: var(--dxds-color-surface-warning-subdued-rest);
}

.kons-page[b-k7dr2lfv71]  .kons-ktobez-cell {
    display: inline-block;
    width: 100%;
    cursor: pointer;
}

.kons-page[b-k7dr2lfv71]  .kons-cell {
    display: block;
    width: 100%;
    box-sizing: border-box;
    cursor: grab;
    /* Vertikal auf das DevExpress-Standard-Zellpadding (Small) setzen, damit die
       Zeilenhöhe der Saldenliste entspricht; horizontal wie gehabt. */
    padding: var(--dxbl-grid-text-cell-padding-y) 4px;
}

.kons-page[b-k7dr2lfv71]  .kons-cell:active {
    cursor: grabbing;
}

.kons-page[b-k7dr2lfv71]  .kons-cell:hover {
    background: var(--dxds-color-surface-primary-subdued-rest);
}

/* Gemerkte Quelle von „Umbuchen von hier…“ (Touch-Ersatz fürs Ziehen). */
.kons-page[b-k7dr2lfv71]  .kons-cell.kons-cell-quelle {
    outline: 2px solid var(--dxds-color-content-primary-default-rest);
    outline-offset: -2px;
}

.kons-page[b-k7dr2lfv71]  .kons-cell.kons-cell-dragover {
    background: var(--dxds-color-surface-primary-default-rest);
    outline: 2px dashed var(--dxds-color-content-primary-default-rest);
    outline-offset: -2px;
}
/* /Components/Features/Kostenrechnung/BabPage.razor.rz.scp.css */
.kore-bab-page[b-hgys5xhy7o] {
    display: flex;
    flex-direction: column;
    height: 100%;
    padding: 0.75rem 1rem;
    gap: 0.5rem;
    overflow: hidden;
}

.kore-bab-page .kore-bab-header[b-hgys5xhy7o] {
    display: flex;
    flex-direction: column;
    gap: 0.5rem;
    flex: 0 0 auto;
}

/* Schlichte Flex-Wrap-Leiste (statt DxToolbar): bricht bei Platzmangel um,
   statt überlaufende Items abzuschneiden. */
.kore-bab-page .kore-bab-actions[b-hgys5xhy7o] {
    flex: 0 0 auto;
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.3rem 0.6rem;
}

/* Ansichts-Toggles (YTD/Umlage) nach rechts absetzen: margin-left:auto am ersten
   Toggle schiebt ihn samt folgendem Button an den rechten Rand. ::deep, weil die
   CssClass auf dem von DevExpress gerenderten <button> sitzt (ohne Scope-Attribut). */
.kore-bab-page[b-hgys5xhy7o]  .kore-bab-toggle-start {
    margin-left: auto;
}

.kore-bab-page[b-hgys5xhy7o] >  .kore-bab-period-tabs {
    flex: 0 0 auto;
}

.kore-bab-page .kore-bab-pivot-wrap[b-hgys5xhy7o] {
    flex: 1 1 0;
    min-height: 0;
    display: flex;
    flex-direction: column;
}

.kore-bab-page[b-hgys5xhy7o]  .kore-bab-pivot {
    flex: 1 1 0;
    min-height: 0;
    height: 100%;
}

/* Make Betrag data cells visually selectable so the user discovers the
   double-click drilldown. Span fills the cell so the click area is the
   whole rectangle, not just the rendered text. */
.kore-bab-page[b-hgys5xhy7o]  .kore-bab-cell {
    display: block;
    width: 100%;
    min-height: 1.4em;
    box-sizing: border-box;
    cursor: grab;
    padding: 2px 4px;
}

.kore-bab-page[b-hgys5xhy7o]  .kore-bab-cell:active {
    cursor: grabbing;
}

.kore-bab-page[b-hgys5xhy7o]  .kore-bab-cell:hover {
    background: var(--dxds-color-surface-primary-subdued-rest);
}

/* Active drop-target highlight while dragging — :hover is unreliable during
   HTML5 drag, so a class is toggled from the C# dragenter handler instead. */
.kore-bab-page[b-hgys5xhy7o]  .kore-bab-cell.kore-bab-cell-dragover {
    background: var(--dxds-color-surface-primary-default-rest);
    outline: 2px dashed var(--dxds-color-content-primary-default-rest);
    outline-offset: -2px;
}

/* Summen-Footerzeile hervorheben: fett + Hintergrund über die GANZE Zeile.
   Der Marker-Span sitzt in der Kategorie-Headerzelle (ValueTemplate, textbasiert auf
   "4.Summe" — kein RowIndex, daher trifft es nur die echte Summe-Zeile); :has() hebt
   alle Zellen derselben <tr> an — inkl. der leeren KA-/Bezeichnungszellen UND der
   Datenzellen (DxPivotTable rendert die Zeile als eine <tr>). Hintergrund =
   Theme-Token der Grand-Total-Spalte, damit die fixierte Zeile durchgängig wie
   die fixierte Summenspalte aussieht; Doppel-Seitenklasse + !important, weil das
   Theme auf den sticky-links Zeilenkopf-Zellen einen eigenen deckenden
   Hintergrund setzt (die Kopfzellen blieben sonst weiß). */
.kore-bab-page.kore-bab-page[b-hgys5xhy7o]  tr:has(.kore-bab-summe-marker) > * {
    background: var(--dxbl-pivot-table-total-bg) !important;
}

/* Fett für die gesamte Zeile — Zellen UND ihre inneren Elemente (Datenzell-Spans,
   Zahlen), falls DevExpress dort ein eigenes font-weight setzt, das die Vererbung
   überschreiben würde. */
.kore-bab-page[b-hgys5xhy7o]  tr:has(.kore-bab-summe-marker) > *,
.kore-bab-page[b-hgys5xhy7o]  tr:has(.kore-bab-summe-marker) > * * {
    font-weight: 700;
}

/* ---- Summenspalte (Grand Total) und Summenzeile beim Scrollen fixieren ----
   DxPivotTable kennt kein FixedPosition (anders als DxGrid) — das Fluent-Theme
   fixiert aber selbst schon thead (sticky oben, z-index 2) und die Zeilenkopf-
   Zellen (sticky links, z-index 3). Dasselbe Muster hier für die Grand-Total-
   Spalte (rechts) und die „4.Summe"-Zeile (unten). Doppelklassen: das per
   DxResourceManager registrierte Theme lädt NACH dem Scoped-CSS und setzt
   z. B. z-index:0 auf Grand-Total-Zellen — gleiche Spezifität verlöre.
   Deckende Hintergründe kommen vom Theme (--dxbl-pivot-table-total-bg) bzw.
   der Summe-Zeilen-Hervorhebung oben. */

/* Grand-Total-Spalte rechts anheften (Daten- wie Kopfzellen). */
.kore-bab-page[b-hgys5xhy7o]  .dxbl-pivot-table td.dxbl-pivot-table-grand-total.dxbl-pivot-table-grand-total,
.kore-bab-page[b-hgys5xhy7o]  .dxbl-pivot-table th.dxbl-pivot-table-grand-total.dxbl-pivot-table-grand-total {
    position: sticky;
    inset-inline-end: 0;
    z-index: 2;
}

/* Grand-Total-Kopfzelle (thead): über den sticky-links-Kopfzellen (z3) halten. */
.kore-bab-page[b-hgys5xhy7o]  .dxbl-pivot-table thead .dxbl-pivot-table-grand-total.dxbl-pivot-table-grand-total {
    z-index: 4;
}

/* thead (Theme: sticky, z2) ist ein eigener Stacking-Kontext; gegen die sticky
   Gesamt-Datenzellen (ebenfalls z2, später im DOM) verlor er beim Scrollen nach
   unten — der „Gesamt"-Kopf wurde zugedeckt. Gleicher Fix wie in der UST-Übersicht. */
.kore-bab-page[b-hgys5xhy7o]  .dxbl-pivot-table table.dxbl-pivot-table-data > thead {
    z-index: 3;
}

/* Summe-Zeile unten anheften — alle Zellen der (einen) <tr>; die Datenzellen
   liegen mit z2 über den normalen Zellen. Doppelte Seitenklasse: das Theme setzt
   position:relative auf alle Datenzellen (…tbody > tr > td, Spezifität 0,3,4)
   und gewänne sonst genau das position — bottom/z-index kamen an, die Zeile
   scrollte in den Kostenstellenspalten trotzdem mit. */
.kore-bab-page.kore-bab-page[b-hgys5xhy7o]  tr:has(.kore-bab-summe-marker) > * {
    position: sticky;
    bottom: 0;
    z-index: 2;
}

/* Zeilenkopf-Zellen der Summe-Zeile (vom Theme sticky links): Ecke links
   unten — über den sticky Datenzellen (z2), sonst schieben die sich beim
   Horizontal-Scrollen darüber. Die Zellen sind td (nicht th!), und das Theme
   setzt dort z-index:1 !important — ohne eigenes !important verlöre z4. */
.kore-bab-page[b-hgys5xhy7o]  tr:has(.kore-bab-summe-marker) > td.dxbl-pivot-table-row-field-item.dxbl-pivot-table-row-field-item,
.kore-bab-page[b-hgys5xhy7o]  tr:has(.kore-bab-summe-marker) > th.dxbl-pivot-table-row-field-item.dxbl-pivot-table-row-field-item {
    z-index: 4 !important;
}

/* Ecke rechts unten: Grand-Total-Zelle der Summe-Zeile (sticky rechts UND
   unten — inset-inline-end kommt aus der Spalten-Regel oben). */
.kore-bab-page[b-hgys5xhy7o]  tr:has(.kore-bab-summe-marker) > td.dxbl-pivot-table-grand-total.dxbl-pivot-table-grand-total {
    z-index: 3;
}

/* Die ScrollViewer-Scrollbars sind absolute Overlays am rechten/unteren Rand
   OHNE eigenen z-index — die sticky Summenspalte/-zeile (z2–4) deckte sie zu
   (vertikaler Scrollbar „verschwand"). Über alle Sticky-Ebenen heben; als
   Overlay lagen sie schon immer über dem Inhalt. */
.kore-bab-page[b-hgys5xhy7o]  .dxbl-scroll-viewer > .dxbl-scroll-viewer-vert-scroll-bar,
.kore-bab-page[b-hgys5xhy7o]  .dxbl-scroll-viewer > .dxbl-scroll-viewer-hor-scroll-bar {
    z-index: 5;
}

/* Inline-Fortschritt der ILV-Läufe (unter der Aktionsleiste): Balken-Optik wie die
   Footer-Jobs, aber in Seitenfarben (currentColor-Mix statt static-dark). Ohne
   Prozentwert (unbestimmt) pendelt ein Teil-Balken per Animation. */
.kore-bab-page .kore-bab-progress[b-hgys5xhy7o] {
    display: flex;
    align-items: center;
    gap: 0.6rem;
    font-size: 0.85rem;
}

.kore-bab-page .kore-bab-progress-meter[b-hgys5xhy7o] {
    position: relative;
    width: 240px;
    height: 14px;
    flex-shrink: 0;
    background: color-mix(in srgb, currentColor 12%, transparent);
    border: 1px solid color-mix(in srgb, currentColor 30%, transparent);
    border-radius: 7px;
    overflow: hidden;
}

.kore-bab-page .kore-bab-progress-fill[b-hgys5xhy7o] {
    height: 100%;
    background: linear-gradient(90deg,
        var(--dxds-color-surface-warning-default-rest) 0%,
        var(--dxds-color-surface-warning-default-hovered) 100%);
    transition: width 200ms ease-out;
    border-radius: inherit;
}

.kore-bab-page .kore-bab-progress-percent[b-hgys5xhy7o] {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    font-size: 0.72rem;
    font-weight: 700;
    line-height: 1;
    pointer-events: none;
}

.kore-bab-page .kore-bab-progress-indeterminate[b-hgys5xhy7o] {
    width: 40%;
    animation: kore-bab-progress-slide-b-hgys5xhy7o 1.2s ease-in-out infinite;
}

@keyframes kore-bab-progress-slide-b-hgys5xhy7o {
    0%   { margin-left: 0; }
    50%  { margin-left: 60%; }
    100% { margin-left: 0; }
}

/* ---- Kompaktere Zeilen -------------------------------------------------
   Wie im UST-Pivot: die Höhe kommt vom Aufklapp-Button (18px) plus je ~3px
   Zell-Padding, nicht vom Text. Das Padding kommt aus CSS-Variablen des Themes;
   die werden hier am Container überschrieben, weil der Theme-Selektor
   (.dxbl-pivot-table > .dxbl-scroll-viewer > … > td) jede eigene Regel schlägt. */
.kore-bab-page[b-hgys5xhy7o]  .kore-bab-pivot {
    --dxbl-pivot-table-cell-padding-y: 0.0625rem;                       /* 2.6px → 1px */
    --dxbl-pivot-table-expandable-container-cell-padding-y: 0.0625rem;
}

/* NUR den Pfeil, nicht den Container: .dxbl-pivot-table-expand-button umschließt
   trotz des Namens auch den Zellwert — eine Breite darauf lässt den Text
   verschwinden. Verkleinert wird das innere button.dxbl-btn (18x18 = 14x14-SVG
   plus 1.75px Padding). */
.kore-bab-page[b-hgys5xhy7o]  .kore-bab-pivot.kore-bab-pivot .dxbl-pivot-table-expand-button > button.dxbl-btn {
    padding: 0;
    height: 14px;
    width: 14px;
}

.kore-bab-page[b-hgys5xhy7o]  .kore-bab-cell {
    min-height: 1.2em;
}

/* ---- Handy (gleiche Query wie wwwroot/js/viewport.js): nichts waagrecht anheften ----
   Zeilenköpfe (Theme, sticky links) plus Summenspalte (sticky rechts, oben) waren breiter
   als das Handy und deckten alle Kostenstellen-Spalten zu — damit waren auch Detail,
   Umbuchung und Auflösen per Zelle unerreichbar. Nur der waagrechte Versatz wird
   aufgehoben: thead (oben) und Summe-Zeile (unten) bleiben angeheftet. */
@media (max-width: 767px), (max-height: 500px) and (pointer: coarse) {
    .kore-bab-page[b-hgys5xhy7o]  .dxbl-pivot-table .dxbl-pivot-table-fixed-cell.dxbl-pivot-table-fixed-cell,
    .kore-bab-page[b-hgys5xhy7o]  .dxbl-pivot-table td.dxbl-pivot-table-grand-total.dxbl-pivot-table-grand-total,
    .kore-bab-page[b-hgys5xhy7o]  .dxbl-pivot-table th.dxbl-pivot-table-grand-total.dxbl-pivot-table-grand-total {
        left: auto !important;
        right: auto !important;
        inset-inline-start: auto !important;
        inset-inline-end: auto !important;
    }

    /* Die Kopfzeile mit dem Datenfeld „Betrag“ und den Spaltenfeld-Chips (KS/Bezeichnung)
       kostete 23px — im Querformat blieben so nur ~4 Datenzeilen. Am Handy geht Platz vor
       Sortieren/Filtern über diese Chips (bewusst so belassen, 2026-10-13); die klebenden
       Kopfzeilen darunter rücken nach (gemessen, auch beim vertikalen Scrollen). */
    .kore-bab-page[b-hgys5xhy7o]  tr.dxbl-pivot-table-data-headers-column-headers-row {
        display: none;
    }
}
/* /Components/Features/Kostenrechnung/BdsKostenstellenPage.razor.rz.scp.css */
.bds-page[b-ghn4yuxo82] {
    display: flex;
    flex-direction: column;
    height: 100%;
    padding: 0.75rem 1rem;
    gap: 0.5rem;
    overflow: hidden;
}

.bds-page .bds-header[b-ghn4yuxo82] {
    display: flex;
    flex-direction: column;
    gap: 0.5rem;
    flex: 0 0 auto;
}

.bds-page[b-ghn4yuxo82] >  .bds-actions {
    flex: 0 0 auto;
}

.bds-page .bds-grid-wrap[b-ghn4yuxo82] {
    flex: 1 1 0;
    min-height: 0;
    display: flex;
    flex-direction: column;
}

.bds-page[b-ghn4yuxo82]  .bds-grid {
    flex: 1 1 0;
    min-height: 0;
    height: 100%;
}

.bds-page[b-ghn4yuxo82]  .bds-detail {
    padding: 0.4rem 0.6rem;
    background: var(--dxds-color-surface-neutral-subdued-rest);
}

.bds-page[b-ghn4yuxo82]  .bds-detail-grid {
    width: 100%;
}
/* /Components/Features/Kostenrechnung/IlvPopup.razor.rz.scp.css */
/* The DxPopup BodyContentTemplate is a block element with the popup body's
   inner height. Make the page-root flex-column and the matrix wrap absorb
   leftover height so the table fills the entire popup. */
.ilv-popup[b-efvgmppyxw] {
    display: flex;
    flex-direction: column;
    height: 100%;
    gap: 0.5rem;
    overflow: hidden;
}

.ilv-popup[b-efvgmppyxw] >  .ilv-period-tabs,
.ilv-popup .ilv-toolbar[b-efvgmppyxw] {
    flex: 0 0 auto;
}

.ilv-popup .ilv-toolbar[b-efvgmppyxw] {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    flex-wrap: wrap;
}

.ilv-popup .ilv-toolbar .ilv-spacer[b-efvgmppyxw] {
    flex: 1 1 auto;
}

.ilv-popup .ilv-toolbar .ilv-hint[b-efvgmppyxw] {
    color: var(--dxds-color-content-neutral-subdued-rest);
    font-style: italic;
}

/* Kumuliert-Schalter: optisch von den Buttons abgesetzt (Separator rechts). */
.ilv-popup .ilv-toolbar .ilv-scope-toggle[b-efvgmppyxw] {
    display: inline-flex;
    align-items: center;
    padding-right: 0.5rem;
    margin-right: 0.25rem;
    border-right: 1px solid var(--dxds-color-border-neutral-default-rest);
    white-space: nowrap;
}

.ilv-popup .ilv-import-label[b-efvgmppyxw] {
    display: inline-flex;
    align-items: center;
    gap: var(--dxds-spacing-40, 0.25rem);
    padding: var(--dxds-spacing-30, 0.1875rem) var(--dxds-spacing-80, 0.5rem);
    border: 1px solid var(--dxds-color-border-neutral-default-rest);
    border-radius: 3px;
    cursor: pointer;
    background: var(--dxds-color-surface-neutral-subdued-rest);
    font-size: var(--dxds-font-size-base-sm, 0.75rem);
    font-weight: var(--dxds-font-weight-base-default, 400);
    line-height: var(--dxds-line-height-base-sm, 1rem);
}

.ilv-popup .ilv-import-label:hover[b-efvgmppyxw] {
    background: var(--dxds-color-surface-neutral-subdued-hovered);
}

/* ::deep, weil InputFile eine Kindkomponente ist und das Scope-Attribut nicht trägt — ohne
   stand das native Dateifeld („Datei auswählen / Keine ausgewählt“) neben dem Label. */
.ilv-popup[b-efvgmppyxw]  .ilv-import-input {
    display: none;
}

.ilv-popup .ilv-import-icon[b-efvgmppyxw] {
    width: 0.875rem;
    height: 0.875rem;
    flex: none;
}

.ilv-popup .ilv-sort-caret[b-efvgmppyxw] {
    font-size: 0.75em;
}

.ilv-popup .ilv-andere-firma-wrap[b-efvgmppyxw] {
    position: relative;
}

.ilv-popup .ilv-firma-picker[b-efvgmppyxw] {
    position: absolute;
    top: calc(100% + 0.25rem);
    left: 0;
    display: flex;
    align-items: center;
    gap: 0.5rem;
    padding: 0.5rem 0.75rem;
    background: var(--dxds-color-surface-neutral-default-rest);
    border: 1px solid var(--dxds-color-border-neutral-default-rest);
    border-radius: 4px;
    box-shadow: 0 4px 12px var(--dxds-color-shadow-ambient);
    z-index: 10;
    white-space: nowrap;
}

.ilv-popup .ilv-firma-picker[b-efvgmppyxw]  .ilv-firma-combo {
    min-width: 320px;
}

.ilv-popup .ilv-pivot-wrap[b-efvgmppyxw] {
    flex: 1 1 0;
    min-height: 0;
    display: flex;
    flex-direction: column;
}

/* Scroll container: only this scrolls (both axes); sticky headers anchor to it. */
.ilv-popup .ilv-matrix-scroll[b-efvgmppyxw] {
    flex: 1 1 0;
    min-height: 0;
    overflow: auto;
    background: var(--dxds-color-surface-neutral-default-rest);
}

.ilv-popup .ilv-matrix[b-efvgmppyxw] {
    border-collapse: separate;
    border-spacing: 0;
    table-layout: fixed;
    font-size: var(--dxds-font-size-base-sm, 0.75rem);
    line-height: var(--dxds-line-height-base-sm, 1rem);
    font-weight: var(--dxds-font-weight-base-default, 400);
    font-family: var(--dxds-font-family-base, inherit);
}

.ilv-popup .ilv-matrix th[b-efvgmppyxw],
.ilv-popup .ilv-matrix td[b-efvgmppyxw] {
    border-right: 1px solid var(--dxds-color-border-neutral-default-rest);
    border-bottom: 1px solid var(--dxds-color-border-neutral-default-rest);
    padding: 2px 4px;
    background: var(--dxds-color-surface-neutral-default-rest);
    vertical-align: middle;
}

.ilv-popup .ilv-matrix th[b-efvgmppyxw] {
    font-weight: 600;
}

/* Sticky top header row */
.ilv-popup .ilv-matrix thead th[b-efvgmppyxw] {
    position: sticky;
    top: 0;
    z-index: 2;
    background: var(--dxds-color-surface-neutral-subdued-rest);
    user-select: none;
}

.ilv-popup .ilv-matrix thead .ilv-col-header[b-efvgmppyxw] {
    cursor: pointer;
}

.ilv-popup .ilv-matrix thead .ilv-col-header:hover[b-efvgmppyxw] {
    background: var(--dxds-color-surface-neutral-default-hovered);
}

/* Sticky left column (row headers + bottom-left total) */
.ilv-popup .ilv-matrix .ilv-row-header[b-efvgmppyxw] {
    position: sticky;
    left: 0;
    z-index: 1;
    background: var(--dxds-color-surface-neutral-subdued-rest);
    text-align: left;
    white-space: nowrap;
    max-width: 18rem;
    overflow: hidden;
    text-overflow: ellipsis;
}

/* Top-left corner — sticky on both axes, must beat both row & column headers */
.ilv-popup .ilv-matrix .ilv-corner[b-efvgmppyxw] {
    left: 0;
    z-index: 3;
    background: var(--dxds-color-surface-neutral-default-rest);
    text-align: center;
    white-space: nowrap;
    min-width: 12rem;
}

.ilv-popup .ilv-matrix .ilv-corner[b-efvgmppyxw] {
    cursor: default;
}

.ilv-popup .ilv-matrix .ilv-corner-axis[b-efvgmppyxw] {
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: 0.25rem;
    padding: 1px 4px;
    cursor: pointer;
}

.ilv-popup .ilv-matrix .ilv-corner-axis:hover[b-efvgmppyxw] {
    background: var(--dxds-color-surface-neutral-default-hovered);
}

.ilv-popup .ilv-matrix .ilv-corner-axis-lks[b-efvgmppyxw] {
    border-bottom: 1px solid var(--dxds-color-border-neutral-default-rest);
}

/* Column header with stacked ID + Bezeichnung */
.ilv-popup .ilv-matrix .ilv-col-header[b-efvgmppyxw] {
    min-width: 7rem;
    max-width: 9rem;
}

.ilv-popup .ilv-matrix .ilv-ks-header[b-efvgmppyxw] {
    display: flex;
    flex-direction: column;
    align-items: center;
    text-align: center;
    line-height: 1.2;
}

.ilv-popup .ilv-matrix .ilv-ks-header .ilv-ks-id[b-efvgmppyxw] {
    font-weight: 600;
}

.ilv-popup .ilv-matrix .ilv-ks-header .ilv-ks-text[b-efvgmppyxw] {
    font-size: 0.85em;
    color: var(--dxds-color-content-neutral-subdued-rest);
    white-space: normal;
    overflow-wrap: break-word;
    font-weight: 400;
}

/* Data cells */
.ilv-popup .ilv-matrix .ilv-cell[b-efvgmppyxw] {
    text-align: right;
    padding: 0;
}

.ilv-popup .ilv-matrix .ilv-cell-active[b-efvgmppyxw] {
    outline: 2px solid var(--dxds-color-content-primary-default-rest);
    outline-offset: -2px;
    position: relative;
    z-index: 1;
}

.ilv-popup .ilv-matrix-scroll:focus[b-efvgmppyxw] {
    outline: none;
}

.ilv-popup .ilv-matrix-scroll:focus-visible[b-efvgmppyxw] {
    outline: none;
}

.ilv-popup .ilv-matrix .ilv-cell-missing[b-efvgmppyxw] {
    background: var(--dxds-color-surface-neutral-default-disabled);
}

.ilv-popup .ilv-matrix .ilv-cell-display[b-efvgmppyxw] {
    display: block;
    width: 100%;
    min-height: 1.25rem;
    cursor: text;
    text-align: right;
    padding: 2px 4px;
}

.ilv-popup .ilv-matrix .ilv-cell-display:hover[b-efvgmppyxw] {
    background: var(--dxds-color-surface-primary-subdued-rest);
}

.ilv-popup .ilv-matrix .ilv-cell-disabled[b-efvgmppyxw] {
    display: block;
    width: 100%;
    min-height: 1.25rem;
    background-color: var(--dxds-color-surface-neutral-default-disabled);
    cursor: not-allowed;
    pointer-events: none;
    text-align: right;
    padding: 2px 4px;
}

.ilv-popup .ilv-matrix .ilv-cell-edit-wrap[b-efvgmppyxw] {
    width: 100%;
}

.ilv-popup .ilv-matrix .ilv-cell-edit[b-efvgmppyxw] {
    width: 100%;
    box-sizing: border-box;
    text-align: right;
    padding: 2px 4px;
    border: 1px solid var(--dxds-color-content-primary-default-rest);
    background: var(--dxds-color-surface-neutral-default-rest);
    font: inherit;
    color: inherit;
    outline: none;
}

.ilv-popup .ilv-matrix .ilv-col-total[b-efvgmppyxw] {
    text-align: right;
}

/* Right grand-total column — sticky on the right edge so it stays visible
   while horizontally scrolling. Mirrors the old DxPivotTable behavior. */
.ilv-popup .ilv-matrix .ilv-col-total-header[b-efvgmppyxw],
.ilv-popup .ilv-matrix .ilv-row-total-cell[b-efvgmppyxw] {
    position: sticky;
    right: 0;
    background: var(--dxds-color-surface-neutral-subdued-rest);
    font-weight: 600;
    text-align: right;
}

.ilv-popup .ilv-matrix .ilv-row-total-cell[b-efvgmppyxw] {
    z-index: 2;
}

/* Top-right corner: sticky top + right; beats plain top-headers (z=2) */
.ilv-popup .ilv-matrix .ilv-col-total-header[b-efvgmppyxw] {
    z-index: 3;
}

/* Sticky bottom total row (Spaltensummen) — bleibt beim vertikalen Scrollen sichtbar.
   Sticky wird wie bei thead auf die Zellen gesetzt (nicht auf <tr>/<tfoot>). */
.ilv-popup .ilv-matrix tfoot th[b-efvgmppyxw],
.ilv-popup .ilv-matrix tfoot td[b-efvgmppyxw] {
    position: sticky;
    bottom: 0;
    z-index: 2;
    background: var(--dxds-color-surface-neutral-subdued-rest);
    font-weight: 600;
    text-align: right;
}

/* Bottom-left-Ecke der Total-Zeile: sticky unten + links (schlägt Fuß- und Kopfzeile) */
.ilv-popup .ilv-matrix tfoot .ilv-foot-corner[b-efvgmppyxw] {
    left: 0;
    z-index: 3;
    text-align: left;
    white-space: nowrap;
}

/* Bottom-right Gesamtsumme: sticky unten + rechts (schlägt alles) */
.ilv-popup .ilv-matrix tfoot .ilv-foot-grand[b-efvgmppyxw] {
    right: 0;
    z-index: 4;
}

.ilv-popup .ilv-status[b-efvgmppyxw] {
    flex: 0 0 auto;
    display: flex;
    align-items: center;
    gap: 0.75rem;
    font-size: 0.875rem;
    color: var(--dxds-color-content-neutral-subdued-rest);
    padding: 0.25rem 0;
}

.ilv-popup .ilv-status[b-efvgmppyxw]  .ilv-save-button {
    margin-left: auto;
}

.ilv-popup .ilv-status .ilv-dirty[b-efvgmppyxw] {
    color: var(--dxds-color-content-warning-default-rest);
    font-weight: 600;
}

.ilv-popup .ilv-status .ilv-info[b-efvgmppyxw] {
    color: var(--dxds-color-content-success-default-rest);
}

/* Handy (Query wie in wwwroot/js/viewport.js). Die beiden klebenden Spalten — Lks links
   bis 18rem, Total rechts — ließen auf 390px kaum Platz und das Total verdeckte die
   Werte. Am Handy klebt nur die schmalere Lks-Spalte; das Total scrollt mit. */
@media (max-width: 767px), (max-height: 500px) and (pointer: coarse) {
    .ilv-popup .ilv-matrix .ilv-row-header[b-efvgmppyxw] {
        max-width: 9rem;
    }

    .ilv-popup .ilv-matrix .ilv-corner[b-efvgmppyxw] {
        min-width: 0;
        max-width: 9rem;
        white-space: normal;
    }

    .ilv-popup .ilv-matrix .ilv-col-total-header[b-efvgmppyxw],
    .ilv-popup .ilv-matrix .ilv-row-total-cell[b-efvgmppyxw],
    .ilv-popup .ilv-matrix tfoot .ilv-foot-grand[b-efvgmppyxw] {
        right: auto;
    }

    /* Der Firma-Picker hängt am Handy nicht unter einem Knopf (der steckt in „Weitere“),
       sondern steht als eigene volle Zeile in der Leiste. */
    .ilv-popup .ilv-andere-firma-wrap[b-efvgmppyxw] {
        flex: 1 1 100%;
        min-width: 0;
    }

    .ilv-popup .ilv-firma-picker[b-efvgmppyxw] {
        position: static;
        flex-wrap: wrap;
        white-space: normal;
        box-shadow: none;
    }

    .ilv-popup .ilv-firma-picker[b-efvgmppyxw]  .ilv-firma-combo {
        min-width: 0;
        flex: 1 1 12rem;
    }
}
/* /Components/Features/Kostenrechnung/KoreDetailPopup.razor.rz.scp.css */
/* DxPopup BodyContentTemplate is a block element with the popup body's inner
   height. Make the root flex-column so the DxGrid can absorb the leftover
   height between the filter toolbar and the popup's bottom edge. */
.kore-detail-popup[b-8puv4b06da] {
    display: flex;
    flex-direction: column;
    height: 100%;
    gap: 0.5rem;
    overflow: hidden;
}

.kore-detail-popup .kore-detail-filters[b-8puv4b06da] {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    flex-wrap: wrap;
    flex: 0 0 auto;
}

.kore-detail-popup[b-8puv4b06da]  .kore-detail-combo {
    min-width: 14rem;
}

.kore-detail-popup[b-8puv4b06da]  .kore-detail-grid {
    flex: 1 1 0;
    min-height: 0;
    height: 100%;
}
/* /Components/Features/Kostenrechnung/KostenartenAnzeigePage.razor.rz.scp.css */
.kostenarten-page[b-8zwry023eq] {
    display: flex;
    flex-direction: column;
    height: 100%;
    padding: 0.75rem 1rem;
    gap: 0.5rem;
    overflow: hidden;
}

.kostenarten-page .kostenarten-header[b-8zwry023eq] {
    display: flex;
    flex-direction: column;
    gap: 0.5rem;
    flex: 0 0 auto;
}

.kostenarten-page .kostenarten-actions[b-8zwry023eq] {
    flex: 0 0 auto;
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.3rem 0.6rem;
}

/* Label + ComboBox als eine zusammenhängende, mittig ausgerichtete Einheit, die
   beim Umbruch nicht getrennt wird. */
.kostenarten-page .kostenarten-periode[b-8zwry023eq] {
    display: inline-flex;
    align-items: center;
    gap: 0.4rem;
}

.kostenarten-page .kostenarten-grid-wrap[b-8zwry023eq] {
    flex: 1 1 0;
    min-height: 0;
    display: flex;
    flex-direction: column;
    /* Size-Container: macht `cqh` weiter unten relativ zur TATSÄCHLICHEN Höhe dieses
       Grid-Bereichs. Nötig, weil die Seite im Workspace-Splitter kleiner als der Viewport
       ist — viewport-relatives `vh` überschoss und zwang die Master-Grid zum Scrollen. */
    container-type: size;
}

.kostenarten-page[b-8zwry023eq]  .kostenarten-grid {
    flex: 1 1 0;
    min-height: 0;
    height: 100%;
}

/* DevExpress rahmt die DetailRow-<td> per Default großzügig (Variable
   --dxbl-grid-detail-cell-padding-* = 1.5rem). Das ist der eigentliche „Rand" um das
   Detail-Grid — hier auf 0 setzen (idiomatisch über die DX-Variablen), damit das Grid
   den vollen Platz nutzt. */
.kostenarten-page[b-8zwry023eq]  .dxbl-grid-detail-cell {
    --dxbl-grid-detail-cell-padding-x: 0px;
    --dxbl-grid-detail-cell-padding-y: 0px;
}

.kostenarten-page[b-8zwry023eq]  .kostenarten-detail {
    /* Minimaler Innenabstand — nur ein Hauch, damit die abgesetzte Fläche sichtbar bleibt. */
    padding: 0.15rem;
    background: var(--dxds-color-surface-neutral-subdued-rest);
    /* Höhenfenster PANEL-relativ (80cqh = 80% der Höhe von .kostenarten-grid-wrap, dem
       Size-Container oben) statt viewport-relativ. Die DetailRow-<td> der Master-DxGrid
       propagiert Prozenthöhen nicht, daher kein `%`; `cqh` liefert die real verfügbare
       Grid-Höhe und lässt ~20% für Kopf/Zeilen der Master-Grid, damit diese nicht scrollt.
       Als Flex-Spalte, damit das innere Grid die Höhe ausfüllt und selbst (virtuell) scrollt. */
    height: 80cqh;
    box-sizing: border-box;
    display: flex;
    flex-direction: column;
    overflow: hidden;
}

.kostenarten-page[b-8zwry023eq]  .kostenarten-detail-grid {
    flex: 1 1 0;
    min-height: 0;
    height: 100%;
    width: 100%;
}
/* /Components/Features/Kostenrechnung/UmbuchenPopup.razor.rz.scp.css */
.umbuchen-popup[b-06zizjkxlf] {
    display: flex;
    flex-direction: column;
    gap: 0.5rem;
}

.umbuchen-popup .umbuchen-hint[b-06zizjkxlf] {
    margin: 0;
    font-size: 0.8125rem;
    color: var(--dxds-color-content-neutral-subdued-rest);
}

.umbuchen-popup .umbuchen-grid[b-06zizjkxlf] {
    display: grid;
    grid-template-columns: 1fr auto 1fr;
    align-items: start;
    gap: 0.5rem;
}

.umbuchen-popup .umbuchen-col[b-06zizjkxlf] {
    display: grid;
    grid-template-columns: auto 1fr;
    column-gap: 0.5rem;
    row-gap: 0.35rem;
    align-items: center;
}

.umbuchen-popup .umbuchen-col h4[b-06zizjkxlf] {
    grid-column: 1 / -1;
    margin: 0 0 0.15rem 0;
    font-size: 0.875rem;
    font-weight: 600;
    color: var(--dxds-color-content-neutral-subdued-rest);
}

.umbuchen-popup .umbuchen-col label[b-06zizjkxlf] {
    font-size: 0.8125rem;
    color: var(--dxds-color-content-neutral-subdued-rest);
    white-space: nowrap;
}

.umbuchen-popup .umbuchen-arrow[b-06zizjkxlf] {
    align-self: center;
    padding-top: 1.25rem;
    font-size: 1.25rem;
    color: var(--dxds-color-content-neutral-subdued-rest);
}

.umbuchen-popup .umbuchen-betrag[b-06zizjkxlf] {
    display: grid;
    grid-template-columns: auto 1fr;
    column-gap: 0.5rem;
    align-items: center;
    width: 180px;
    margin: 0 auto;
}

.umbuchen-popup .umbuchen-betrag label[b-06zizjkxlf] {
    font-size: 0.8125rem;
    color: var(--dxds-color-content-neutral-subdued-rest);
}
/* /Components/Features/Meldungen/IntrastatPage.razor.rz.scp.css */
/* Meldeseiten (UVA/ZM/Intrastat): Flex-Spalte über die volle Tab-Höhe,
   Aktionsleiste als Flex-Wrap (kein DxToolbar — bricht nicht um), Grid
   bekommt den Rest und scrollt intern. */
.meld-page[b-tagfd0fqmb] {
    height: 100%;
    min-height: 0;
    display: flex;
    flex-direction: column;
    padding: 0.5rem;
}

.meld-actions[b-tagfd0fqmb] {
    display: flex;
    gap: 0.5rem;
    align-items: center;
    flex-wrap: wrap;
    margin-bottom: 0.5rem;
}

.meld-xml[b-tagfd0fqmb] {
    display: inline-flex;
    gap: 0.35rem;
    align-items: center;
}

.meld-page[b-tagfd0fqmb]  .meld-stnr { width: 170px; }

.meld-zeitraum[b-tagfd0fqmb] {
    display: inline-flex;
    gap: 0.35rem;
    align-items: center;
}

.meld-page[b-tagfd0fqmb]  .meld-modus { width: 140px; }
.meld-page[b-tagfd0fqmb]  .meld-nr { width: 64px; }
.meld-page[b-tagfd0fqmb]  .meld-jahr { width: 84px; }

.meld-grid-wrap[b-tagfd0fqmb] {
    flex: 1 1 0;
    min-height: 0;
    display: flex;
    flex-direction: column;
}

.meld-grid-wrap[b-tagfd0fqmb]  .meld-grid {
    flex: 1 1 0;
    min-height: 0;
}

.meld-zahllast[b-tagfd0fqmb] {
    margin-top: 0.5rem;
    text-align: right;
    font-size: 1.05rem;
}
/* /Components/Features/Meldungen/MeldungenZeitraum.razor.rz.scp.css */
/* Zeitraum-Wähler: kompakte Inline-Leiste. */
.meld-zeitraum[b-8q0pp7qsri] {
    display: inline-flex;
    gap: 0.35rem;
    align-items: center;
}

.meld-zeitraum[b-8q0pp7qsri]  .meld-modus { width: 140px; }
.meld-zeitraum[b-8q0pp7qsri]  .meld-nr { width: 64px; }
.meld-zeitraum[b-8q0pp7qsri]  .meld-jahr { width: 84px; }
/* /Components/Features/Meldungen/UvaPage.razor.rz.scp.css */
/* Meldeseiten (UVA/ZM/Intrastat): Flex-Spalte über die volle Tab-Höhe,
   Aktionsleiste als Flex-Wrap (kein DxToolbar — bricht nicht um), Grid
   bekommt den Rest und scrollt intern. */
.meld-page[b-rtcqcsaaw8] {
    height: 100%;
    min-height: 0;
    display: flex;
    flex-direction: column;
    padding: 0.5rem;
}

.meld-actions[b-rtcqcsaaw8] {
    display: flex;
    gap: 0.5rem;
    align-items: center;
    flex-wrap: wrap;
    margin-bottom: 0.5rem;
}

.meld-xml[b-rtcqcsaaw8] {
    display: inline-flex;
    gap: 0.35rem;
    align-items: center;
}

.meld-page[b-rtcqcsaaw8]  .meld-stnr { width: 170px; }

.meld-zeitraum[b-rtcqcsaaw8] {
    display: inline-flex;
    gap: 0.35rem;
    align-items: center;
}

.meld-page[b-rtcqcsaaw8]  .meld-modus { width: 140px; }
.meld-page[b-rtcqcsaaw8]  .meld-nr { width: 64px; }
.meld-page[b-rtcqcsaaw8]  .meld-jahr { width: 84px; }

.meld-grid-wrap[b-rtcqcsaaw8] {
    flex: 1 1 0;
    min-height: 0;
    display: flex;
    flex-direction: column;
}

.meld-grid-wrap[b-rtcqcsaaw8]  .meld-grid {
    flex: 1 1 0;
    min-height: 0;
}

.meld-zahllast[b-rtcqcsaaw8] {
    margin-top: 0.5rem;
    text-align: right;
    font-size: 1.05rem;
}
/* /Components/Features/Meldungen/ZmPage.razor.rz.scp.css */
/* Meldeseiten (UVA/ZM/Intrastat): Flex-Spalte über die volle Tab-Höhe,
   Aktionsleiste als Flex-Wrap (kein DxToolbar — bricht nicht um), Grid
   bekommt den Rest und scrollt intern. */
.meld-page[b-5zyrwkl21f] {
    height: 100%;
    min-height: 0;
    display: flex;
    flex-direction: column;
    padding: 0.5rem;
}

.meld-actions[b-5zyrwkl21f] {
    display: flex;
    gap: 0.5rem;
    align-items: center;
    flex-wrap: wrap;
    margin-bottom: 0.5rem;
}

.meld-xml[b-5zyrwkl21f] {
    display: inline-flex;
    gap: 0.35rem;
    align-items: center;
}

.meld-page[b-5zyrwkl21f]  .meld-stnr { width: 170px; }

.meld-zeitraum[b-5zyrwkl21f] {
    display: inline-flex;
    gap: 0.35rem;
    align-items: center;
}

.meld-page[b-5zyrwkl21f]  .meld-modus { width: 140px; }
.meld-page[b-5zyrwkl21f]  .meld-nr { width: 64px; }
.meld-page[b-5zyrwkl21f]  .meld-jahr { width: 84px; }

.meld-grid-wrap[b-5zyrwkl21f] {
    flex: 1 1 0;
    min-height: 0;
    display: flex;
    flex-direction: column;
}

.meld-grid-wrap[b-5zyrwkl21f]  .meld-grid {
    flex: 1 1 0;
    min-height: 0;
}

.meld-zahllast[b-5zyrwkl21f] {
    margin-top: 0.5rem;
    text-align: right;
    font-size: 1.05rem;
}
/* /Components/Features/Saldenliste/SaldenlistePage.razor.rz.scp.css */
.saldenliste-page[b-r5u51k1cj9] {
    display: flex;
    flex-direction: column;
    height: 100%;
    padding: 0.75rem 1rem;
    gap: 0.5rem;
    overflow: hidden;
}

.saldenliste-page .saldenliste-header[b-r5u51k1cj9] {
    display: flex;
    flex-direction: column;
    gap: 0.5rem;
    flex: 0 0 auto;
}

/* Schlichte Flex-Wrap-Leiste (statt DxToolbar): bricht bei Platzmangel um,
   statt überlaufende Items abzuschneiden. */
.saldenliste-page .saldenliste-actions[b-r5u51k1cj9] {
    flex: 0 0 auto;
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.3rem 0.6rem;
}

/* Label + ComboBox als eine zusammenhängende, mittig ausgerichtete Einheit, die
   beim Umbruch nicht getrennt wird (analog .kostenarten-periode). */
.saldenliste-page .saldenliste-periode[b-r5u51k1cj9] {
    display: inline-flex;
    align-items: center;
    gap: 0.4rem;
}

/* DevExpress-Editoren sind in Flex Default width:100% — feste Breite muss über
   ::deep an den Komponenten-Root, das Width-Attribut greift hier nicht. */
.saldenliste-page[b-r5u51k1cj9]  .saldenliste-periode-combo {
    width: 160px;
    flex: 0 0 auto;
}

.saldenliste-page .saldenliste-grid-wrap[b-r5u51k1cj9] {
    flex: 1 1 0;
    min-height: 0;
    display: flex;
    flex-direction: column;
}

.saldenliste-page[b-r5u51k1cj9]  .saldenliste-grid {
    flex: 1 1 0;
    min-height: 0;
}

.saldenliste-page[b-r5u51k1cj9]  .saldenliste-group {
    font-weight: 600;
}

.saldenliste-page[b-r5u51k1cj9]  .saldenliste-group-kennung {
    font-weight: 400;
    color: var(--dxds-color-content-neutral-subdued-rest);
    margin-left: 0.5rem;
}

/* Group-Header-Layout: linke Spalte (Label) flex-1, vier Summen-Spalten
   à 120px rechtsbündig — matched die Breite der Wert-Spalten EB/Soll/
   Haben/Saldo, damit die Summen direkt unter den jeweiligen Spalten-
   Headern stehen. Die KtoNr-Spalte (90px) fällt in den Label-Bereich.
   translateX kompensiert visuell, dass die Group-Row-Zelle einen anderen
   right-Padding/Scrollbar-Gutter hat als die Detail-Zellen — negative
   margins werden von DxGrid's Overflow-Container abgeschnitten. */
.saldenliste-page[b-r5u51k1cj9]  .saldenliste-group-row {
    display: flex;
    align-items: center;
    width: 100%;
    gap: 0;
    transform: translateX(0.5rem);
}

/* Hintergrund auf die Group-Row-Zelle: subtile Hervorhebung der
   Kontoart-Header-Zeilen. :has() trifft das umgebende <td>, damit
   die Färbung über die volle Spaltenbreite reicht — die
   transform-Verschiebung des inneren Layouts bleibt davon unberührt.
   Wir verwenden das öffentliche Fluent-Design-Token
   --dxds-color-surface-primary-subdued-rest, das den aktuellen Accent
   (Rust) als zart getönte Fläche aufgreift. */
.saldenliste-page[b-r5u51k1cj9]  td:has(> .saldenliste-group-row) {
    background-color: var(--dxds-color-surface-primary-subdued-rest);
}

.saldenliste-page[b-r5u51k1cj9]  .saldenliste-group-label {
    flex: 1 1 auto;
    font-weight: 600;
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

/* Die flex-basis kommt aus CSS-Variablen, die js/saldenliste-groupsum.js am
   .saldenliste-grid-wrap aus den echten Kopfzellen spiegelt — eine feste Breite
   stand nach einem Spalten-Resize neben ihrer Spalte. Die 120px sind nur noch
   Fallback für den Fall, dass das JS-Modul nicht greift; sie müssen mit dem
   Width-Attribut der vier Wertspalten übereinstimmen. */
.saldenliste-page[b-r5u51k1cj9]  .saldenliste-group-sum {
    flex: 0 0 120px;
    text-align: right;
    font-weight: 600;
    /* Flex-Items haben min-width: auto und wachsen damit auf ihre Inhaltsbreite —
       ein langer Betrag sprengte die gespiegelte Spaltenbreite und verschob alle
       Summen links davon (gemessen: Basis 50px, tatsächlich 74px). Wie die echte
       Zelle darunter wird deshalb abgeschnitten statt aufgeweitet. */
    min-width: 0;
    overflow: hidden;
    white-space: nowrap;
    /* Matches --dxbl-grid-text-cell-padding-x for SizeMode.Small so the
       sums align horizontally with the right-aligned detail values. */
    padding-right: 0.4375rem;
}

.saldenliste-page[b-r5u51k1cj9]  .saldenliste-group-sum-eb    { flex-basis: var(--sl-w-eb, 120px); }
.saldenliste-page[b-r5u51k1cj9]  .saldenliste-group-sum-soll  { flex-basis: var(--sl-w-soll, 120px); }
.saldenliste-page[b-r5u51k1cj9]  .saldenliste-group-sum-haben { flex-basis: var(--sl-w-haben, 120px); }
.saldenliste-page[b-r5u51k1cj9]  .saldenliste-group-sum-saldo { flex-basis: var(--sl-w-saldo, 120px); }

/* Drag-Griff in der KtoNr-Zelle (Kontoart-Wechsel per Drag auf eine Gruppenzeile,
   js/saldenliste-dnd.js). Griff links, Nummer rechtsbündig wie zuvor. */
.saldenliste-page[b-r5u51k1cj9]  .saldenliste-ktonr {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 0.25rem;
}

.saldenliste-page[b-r5u51k1cj9]  .saldenliste-drag {
    flex: 0 0 auto;
    cursor: grab;
    user-select: none;
    color: var(--dxds-color-content-neutral-subdued-rest);
}

.saldenliste-page[b-r5u51k1cj9]  .saldenliste-drag:active {
    cursor: grabbing;
}

/* Hervorhebung des Drop-Ziels = die ganze Ziel-Kontoart als Block: Gruppenzeile mit
   gestricheltem Rahmen (auf die Zelle gelegt wie der Gruppen-Hintergrund), alle
   Kontozeilen darunter nur getönt — ein Rahmen je Zeile sähe nach Einzelkonto aus. */
.saldenliste-page[b-r5u51k1cj9]  td:has(> .saldenliste-group-row.saldenliste-group-row-dragover) {
    background-color: var(--dxds-color-surface-primary-default-rest);
    outline: 2px dashed var(--dxds-color-content-primary-default-rest);
    outline-offset: -2px;
}

.saldenliste-page[b-r5u51k1cj9]  tr.saldenliste-row-dragover > td {
    background-color: var(--dxds-color-surface-primary-subdued-rest);
}

/* Drag-Bild „KtoNr Bezeichnung“ (js/saldenliste-dnd.js): hängt im Grid-Wrap, damit das
   scoped CSS greift, und steht außerhalb des Sichtbereichs — setDragImage braucht ein
   gerendertes Element. */
.saldenliste-page[b-r5u51k1cj9]  .saldenliste-drag-ghost {
    position: fixed;
    top: -1000px;
    left: -1000px;
    padding: 0.2rem 0.6rem;
    white-space: nowrap;
    font-weight: 600;
    color: var(--dxds-color-content-neutral-default-rest);
    background: var(--dxds-color-surface-neutral-default-rest, #fff);
    border: 1px solid var(--dxds-color-border-neutral-default-rest, #ccc);
    border-radius: 4px;
    box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);
}

/* „In Kontoart verschieben…“-Popup */
.saldenliste-verschieben[b-r5u51k1cj9] {
    display: flex;
    flex-direction: column;
    gap: 0.5rem;
}
/* /Components/Layout/AnalyzerWorkspace.razor.rz.scp.css */
/* AnalyzerWorkspace.razor.css — vertikaler Firma-Panel-Stack.
   Farben kommen ausschließlich aus dem aktiven DevExpress-Theme
   (--dxds-color-* Tokens), daher Theme- und Light/Dark-adaptiv. */

.aw-root[b-4bdz7rpdo0] {
    display: flex;
    flex-direction: column;
    height: 100%;
    min-height: 0;
    background: var(--dxds-color-surface-neutral-subdued-rest);
    overflow: hidden;
}

/* ---- Leerzustand / Willkommen ---- */
.aw-welcome[b-4bdz7rpdo0] {
    flex: 1;
    min-height: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 24px;
    overflow: auto;
}
.aw-welcome-card[b-4bdz7rpdo0] {
    max-width: 520px;
    width: 100%;
    text-align: center;
    padding: 8px;
}
.aw-welcome-icon[b-4bdz7rpdo0] {
    width: 64px;
    height: 64px;
    margin: 0 auto 18px;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 32px;
    line-height: 1;
    border-radius: 50%;
    background: var(--dxds-color-surface-primary-subdued-rest);
}
.aw-welcome-title[b-4bdz7rpdo0] {
    margin: 0 0 14px;
    font-size: 22px;
    font-weight: 700;
    color: var(--dxds-color-content-neutral-default-rest);
}
/* FocusOnNavigate (Selector="h1") fokussiert die Überschrift programmatisch –
   sie ist nicht interaktiv, daher keinen Fokus-Ring zeigen. */
.aw-welcome-title:focus[b-4bdz7rpdo0],
.aw-welcome-title:focus-visible[b-4bdz7rpdo0] { outline: none; }
.aw-welcome-lead[b-4bdz7rpdo0] {
    margin: 0;
    font-size: 14px;
    line-height: 1.55;
    color: var(--dxds-color-content-neutral-subdued-rest);
}
.aw-welcome-lead strong[b-4bdz7rpdo0] { color: var(--dxds-color-content-primary-default-rest); font-weight: 700; }

/* Login-Button (nicht angemeldet) — Pill-Optik, öffnet das Login-Popup.
   font/cursor explizit, weil das Element jetzt ein echter <button> ist. */
.aw-welcome-pill[b-4bdz7rpdo0] {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    margin-top: 20px;
    padding: 7px 14px;
    font-family: inherit;
    font-size: 12.5px;
    font-weight: 600;
    color: var(--dxds-color-content-primary-default-rest);
    background: var(--dxds-color-surface-primary-subdued-rest);
    border: 1px solid var(--dxds-color-border-primary-default-rest);
    border-radius: 999px;
    cursor: pointer;
}
.aw-welcome-pill:hover[b-4bdz7rpdo0] {
    background: var(--dxds-color-surface-primary-subdued-hovered);
}
.aw-welcome-pill-arrow[b-4bdz7rpdo0] { font-size: 15px; line-height: 1; }

/* Hinweisliste (angemeldet) */
.aw-welcome-hints[b-4bdz7rpdo0] {
    margin: 6px 0 0;
    padding: 0;
    list-style: none;
    display: flex;
    flex-direction: column;
    gap: 12px;
    text-align: left;
}
.aw-welcome-hints li[b-4bdz7rpdo0] {
    display: flex;
    align-items: flex-start;
    gap: 12px;
    padding: 12px 14px;
    background: var(--dxds-color-surface-neutral-subdued-rest);
    border: 1px solid var(--dxds-color-border-neutral-default-rest);
    border-radius: 9px;
    font-size: 13.5px;
    line-height: 1.5;
    color: var(--dxds-color-content-neutral-default-rest);
}
.aw-welcome-hint-icon[b-4bdz7rpdo0] {
    flex: none;
    font-size: 17px;
    line-height: 1.4;
}
.aw-welcome-hints strong[b-4bdz7rpdo0] { color: var(--dxds-color-content-primary-default-rest); font-weight: 700; }

/* ---- Splitter füllt die Höhe; ein Pane je Firma ---- */
.aw-root[b-4bdz7rpdo0]  .aw-splitter { flex: 1 1 auto; min-height: 0; height: 100%; }

/* ---- Firma-„Mutter-Panel" ---- */
.aw-panel[b-4bdz7rpdo0] {
    height: 100%;
    min-height: 0;
    display: flex;
    flex-direction: column;
    overflow: hidden;
    /* Anker für das absolut positionierte Drop-Zonen-Overlay. */
    position: relative;
}

/* ---- Andocken: Drop-Zonen an den vier Panelkanten ----
   Nur während eines Panel-Drags im DOM. Die Mitte bleibt frei, damit ein Drop
   dort ins Leere geht statt eine willkürliche Kante zu treffen. */
.aw-dropzones[b-4bdz7rpdo0] {
    position: absolute;
    inset: 0;
    z-index: 5;
    pointer-events: none;
}
.aw-dz[b-4bdz7rpdo0] {
    position: absolute;
    pointer-events: auto;
    transition: background-color 80ms linear;
}
.aw-dz-oben[b-4bdz7rpdo0]   { top: 0; left: 0; right: 0; height: 28%; }
.aw-dz-unten[b-4bdz7rpdo0]  { bottom: 0; left: 0; right: 0; height: 28%; }
.aw-dz-links[b-4bdz7rpdo0]  { top: 28%; bottom: 28%; left: 0; width: 28%; }
.aw-dz-rechts[b-4bdz7rpdo0] { top: 28%; bottom: 28%; right: 0; width: 28%; }

.aw-dz-aktiv[b-4bdz7rpdo0] {
    background: var(--dxds-color-surface-primary-subdued-rest);
    outline: 2px dashed var(--dxds-color-content-primary-default-rest);
    outline-offset: -2px;
}

.aw-firmahead[b-4bdz7rpdo0] {
    flex: none;
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 8px 12px;
    background: var(--dxds-color-surface-neutral-subdued-rest);
    border-bottom: 1px solid var(--dxds-color-border-neutral-default-rest);
}

/* Drag-Fläche: alles ausser dem Schliessen-Button, inklusive des Leerraums bis
   dorthin (flex: 1). user-select: none, weil ein draggable-Element ohnehin keine
   Textauswahl mehr zulässt — so bleibt wenigstens die Darstellung konsistent
   (kein halb angerissener Auswahlbalken). */
.aw-firmahead-drag[b-4bdz7rpdo0] {
    flex: 1 1 auto;
    min-width: 0;
    display: flex;
    align-items: center;
    gap: 10px;
    cursor: grab;
    user-select: none;
}
.aw-firmahead-drag:active[b-4bdz7rpdo0] { cursor: grabbing; }

/* Nur noch optischer Hinweis — die Drag-Fläche ist die Kopfzeile. */
.aw-grip[b-4bdz7rpdo0] {
    flex: none;
    color: var(--dxds-color-content-neutral-subdued-rest);
    font-size: 14px;
    line-height: 1;
}
.aw-badge[b-4bdz7rpdo0] {
    flex: none;
    font-size: 11px;
    font-weight: 700;
    color: var(--dxds-color-content-primary-default-rest);
    background: var(--dxds-color-surface-primary-subdued-rest);
    padding: 3px 7px;
    border-radius: 4px;
    font-variant-numeric: tabular-nums;
}
.aw-firmahead-text[b-4bdz7rpdo0] {
    display: flex;
    align-items: baseline;
    gap: 8px;
    min-width: 0;
    line-height: 1.15;
}
.aw-firmahead-name[b-4bdz7rpdo0] {
    font-size: 13.5px;
    font-weight: 700;
    color: var(--dxds-color-content-neutral-default-rest);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
.aw-firmahead-date[b-4bdz7rpdo0] { font-size: 11px; color: var(--dxds-color-content-neutral-subdued-rest); white-space: nowrap; }

.aw-close[b-4bdz7rpdo0] {
    flex: none;
    width: 18px;
    height: 18px;
    margin-left: auto;
    display: flex;
    align-items: center;
    justify-content: center;
    border-radius: 4px;
    font-size: 11px;
    color: var(--dxds-color-content-neutral-subdued-rest);
    cursor: pointer;
    user-select: none;
}
.aw-close:hover[b-4bdz7rpdo0] {
    background: var(--dxds-color-surface-neutral-alpha-hovered);
    color: var(--dxds-color-content-neutral-default-rest);
}

/* ---- Sub-Tab-Köpfe (Titel + Schließen) ---- */
.tab-title[b-4bdz7rpdo0] { font-weight: 500; }
.tab-close[b-4bdz7rpdo0] {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 18px;
    height: 18px;
    margin-left: 0.5rem;
    border-radius: 50%;
    font-size: 1rem;
    line-height: 1;
    color: var(--dxds-color-content-neutral-subdued-rest);
    cursor: pointer;
    user-select: none;
}
.tab-close:hover[b-4bdz7rpdo0] {
    background: var(--dxds-color-surface-neutral-alpha-hovered);
    color: var(--dxds-color-content-neutral-default-rest);
}

/* DxTabs füllt den Panel-Rest; Inhalt scrollt intern.
   Ohne die beiden Regeln darunter reißt die Höhenweitergabe innerhalb des
   DxTabs-Markups (Body → dxbl-tabs-content-panel → dxbl-tabs-content) ab und
   hoher Inhalt wird abgeschnitten statt zu scrollen — gleiches Muster wie
   .firmen-tabs (FirmenMenu.razor.css) und .stamm-popup (app.css). */
.aw-panel[b-4bdz7rpdo0]  .fibu-tabs {
    flex: 1 1 auto;
    min-height: 0;
    max-height: 100%;
    display: flex;
    flex-direction: column;
    overflow: hidden;
}

.aw-panel[b-4bdz7rpdo0]  .fibu-tabs .dxbl-tabs-content-panel {
    min-height: 0;
    overflow: hidden;
}

.aw-panel[b-4bdz7rpdo0]  .fibu-tabs .dxbl-tabs-content.dxbl-active {
    min-height: 0;
    display: flex;
    flex-direction: column;
}

.aw-suche-placeholder[b-4bdz7rpdo0] {
    padding: 16px;
    color: var(--dxds-color-content-neutral-subdued-rest);
    font-style: italic;
}
/* ---- Handy (gleiche Query wie wwwroot/js/viewport.js): eine Firma, Umschaltleiste ---- */
.aw-handy-firmen[b-4bdz7rpdo0] {
    flex: none;
    display: flex;
    gap: 0.35rem;
    padding: 0.15rem 0.5rem;
    overflow-x: auto;
    border-bottom: 1px solid var(--dxds-color-border-neutral-default-rest);
    background: var(--dxds-color-surface-neutral-default-rest);
}

/* Chip = Auswahl-Button + ✕-Button in einer gemeinsamen Pille. */
.aw-handy-firma[b-4bdz7rpdo0] {
    flex: none;
    display: inline-flex;
    align-items: center;
    max-width: 75vw;
    border: 1px solid var(--dxds-color-border-neutral-default-rest);
    border-radius: 999px;
}

.aw-handy-firma.aktiv[b-4bdz7rpdo0] {
    border-color: var(--dxds-color-surface-primary-default-rest);
    background: var(--dxds-color-surface-primary-subdued-rest);
    font-weight: 600;
}

.aw-handy-firma-wahl[b-4bdz7rpdo0] {
    display: inline-flex;
    align-items: center;
    gap: 0.35rem;
    min-width: 0;
    padding: 0 0.15rem 0 0.6rem;
    border: none;
    background: transparent;
    color: inherit;
    font: inherit;
    cursor: pointer;
}

.aw-handy-firma-name[b-4bdz7rpdo0] {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.aw-handy-firma-datum[b-4bdz7rpdo0] {
    flex: none;
    font-size: 11px;
    font-weight: 400;
    color: var(--dxds-color-content-neutral-subdued-rest);
}

/* Tippfläche 26px — die Leiste ersetzt am Handy den 37px-Firmenkopf und soll flacher
   sein als er, sonst spart sie bei nur einer Firma nichts. */
.aw-handy-firma-zu[b-4bdz7rpdo0] {
    flex: none;
    width: 26px;
    height: 24px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    border: none;
    border-radius: 999px;
    background: transparent;
    color: var(--dxds-color-content-neutral-subdued-rest);
    font-size: 11px;
    cursor: pointer;
}

.aw-handy-firma-zu:hover[b-4bdz7rpdo0] {
    background: var(--dxds-color-surface-neutral-alpha-hovered);
    color: var(--dxds-color-content-neutral-default-rest);
}

/* Das einzelne Panel ist dann direktes Kind von .aw-root und teilt sich die Höhe mit der
   Leiste — height:100% liefe sonst um die Leistenhöhe über. */
.aw-root > .aw-panel[b-4bdz7rpdo0] {
    flex: 1 1 auto;
    height: auto;
}
/* /Components/Layout/FirmenMenu.razor.rz.scp.css */
.firmen-tree-container[b-qzjnh997eh] {
    display: flex;
    flex-direction: column;
    height: 100%;
    overflow: hidden;
}

.firmen-filters[b-qzjnh997eh] {
    display: grid;
    grid-template-columns: auto 1fr;
    column-gap: 0.5rem;
    row-gap: 0.4rem;
    align-items: center;
    padding: 0.5rem;
    flex-shrink: 0;
    background-color: var(--dxds-color-surface-neutral-subdued-rest);
    border-bottom: 1px solid var(--dxds-color-border-neutral-default-rest);
}

.firmen-filter-label[b-qzjnh997eh] {
    white-space: nowrap;
}

.tree-view-scroll[b-qzjnh997eh] {
    flex: 1;
    min-height: 0;
    overflow: auto;
}

.firmen-combo[b-qzjnh997eh] {
    width: 100%;
    min-width: 0;
}

[b-qzjnh997eh] .tree-col {
    overflow: hidden;
    text-overflow: ellipsis;
}

[b-qzjnh997eh] .tree-col.klientennr {
    flex-shrink: 0;
    min-width: 2rem;
}

[b-qzjnh997eh] .tree-col.name {
    flex: 1;
    min-width: 0;
}

[b-qzjnh997eh] .tree-col.stichtag {
    flex-shrink: 0;
    font-size: 0.7rem;
    opacity: 0.7;
}

[b-qzjnh997eh] .tree-col.art {
    flex-shrink: 0;
    min-width: 1.5rem;
}

[b-qzjnh997eh] .tree-col.beschreibung {
    flex: 1;
    min-width: 0;
}

[b-qzjnh997eh] .tree-col.kennung {
    flex-shrink: 0;
    font-size: 0.7rem;
    opacity: 0.7;
}

[b-qzjnh997eh] .tree-col.ktonr {
    flex-shrink: 0;
    min-width: 2.5rem;
}

[b-qzjnh997eh] .tree-col.ktobez {
    flex: 1;
    min-width: 0;
}

.firmen-loading[b-qzjnh997eh] {
    padding: 0.5rem;
    color: var(--dxds-color-content-neutral-subdued-rest);
    font-size: 0.8rem;
}

[b-qzjnh997eh] .tree-loading {
    list-style: none;
    padding: 0.5rem;
    color: var(--dxds-color-content-neutral-subdued-rest);
    font-size: 0.8rem;
}

.firmen-empty[b-qzjnh997eh] {
    padding: 0.5rem;
    color: var(--dxds-color-content-neutral-subdued-rest);
    font-size: 0.8rem;
    text-align: center;
}

.firmen-load-error[b-qzjnh997eh] {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 0.6rem;
    padding: 1rem 0.5rem;
    text-align: center;
}

.firmen-load-error-text[b-qzjnh997eh] {
    color: var(--dxds-color-content-danger-rest, #b3261e);
    font-size: 0.8rem;
}

[b-qzjnh997eh] .firmen-tabs {
    --dxbl-tabs-height: 100%;
    flex: 1;
    min-height: 0;
}

[b-qzjnh997eh] .firmen-tabs .dxbl-tabs-content-panel {
    min-height: 0;
    overflow: hidden;
}

[b-qzjnh997eh] .firmen-tabs .dxbl-tabs-content {
    min-height: 0;
    overflow: hidden;
    display: flex;
    flex-direction: column;
}
/* /Components/Layout/FooterBar.razor.rz.scp.css */
.footer-bar[b-e43hkd4d49] {
    height: 1.6rem;               /* fix: das Layout (DxSplitter-Höhe) reserviert genau 1.6rem */
    position: relative;           /* Anker für den schwebenden Operations-Stapel */
    background-color: var(--dxds-color-surface-primary-default-rest);
    color: var(--dxds-color-content-neutral-default-static-dark-rest);
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 0 0.75rem;
    font-size: 0.8rem;
    flex-shrink: 0;
}

/* Stapel mehrerer gleichzeitiger Hintergrund-Operationen: schwebt RECHTSBÜNDIG nach OBEN über
   die Footer-Leiste (Toast-Stil). Bewusst aus dem Layout-Fluss genommen (position:absolute) —
   der Footer darf nicht nach unten wachsen, sonst schiebt er sich aus dem 100vh-Bereich
   (.dx-page hat overflow:hidden, DxSplitter-Höhe geht von 1.6rem Footer aus). */
.footer-progress-stack[b-e43hkd4d49] {
    position: absolute;
    right: 0.5rem;
    bottom: calc(100% + 2px);
    display: flex;
    flex-direction: column;
    align-items: flex-end;
    gap: 4px;
    max-height: 60vh;             /* sehr viele Jobs -> scrollbar statt über den Bildschirm */
    overflow-y: auto;
    z-index: 100;                 /* über dem Content rendern */
    pointer-events: none;         /* leeres Panel fängt keine Klicks ab */
}

/* Jede Operation als eigenständiger Chip (eigener Hintergrund, da über Content schwebend). */
.footer-progress-stack > .footer-progress[b-e43hkd4d49],
.footer-progress-stack > .footer-progress-error[b-e43hkd4d49],
.footer-progress-stack > .footer-progress-info[b-e43hkd4d49],
.footer-progress-stack > .footer-progress-download[b-e43hkd4d49] {
    flex: 0 0 auto;
    width: auto;
    pointer-events: auto;
    background-color: var(--dxds-color-surface-primary-default-rest);
    padding: 3px 0.75rem;
    border-radius: 5px;
    box-shadow: 0 2px 6px rgba(0, 0, 0, 0.35);
}

/* „Download bereit" hebt sich grün ab (Export fertig, abholbereit). */
.footer-progress-stack > .footer-progress-download[b-e43hkd4d49] {
    background-color: var(--dxds-color-surface-success-default-rest);
}

.footer-firma[b-e43hkd4d49] {
    display: flex;
    gap: 1rem;
    align-items: center;
    overflow: hidden;
    min-width: 0;
}

.footer-firma-name[b-e43hkd4d49],
.footer-konto-bez[b-e43hkd4d49] {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.footer-konto-sep[b-e43hkd4d49] {
    opacity: 0.5;
}

.footer-copyright[b-e43hkd4d49] {
    white-space: nowrap;
    opacity: 0.85;
}

.footer-progress[b-e43hkd4d49] {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    flex: 1;
    justify-content: flex-end;
    min-width: 0;
    padding: 0 1rem;
}

.footer-progress-title[b-e43hkd4d49] {
    font-weight: 600;
    white-space: nowrap;
}

/* Eigener Bar (statt DxProgressBar): kontrastiert sicher gegen den Footer-
   Hintergrund (Fluent-Theme primary surface — kann je nach Theme blau oder
   rust sein). Track = halbtransparentes Weiß, Fill = Fluent-Warning-Amber. */
.footer-progress-meter[b-e43hkd4d49] {
    position: relative;
    width: 240px;
    height: 14px;
    flex-shrink: 0;
    background: color-mix(in srgb, var(--dxds-color-content-neutral-default-static-dark-rest) 22%, transparent);
    border: 1px solid color-mix(in srgb, var(--dxds-color-content-neutral-default-static-dark-rest) 45%, transparent);
    border-radius: 7px;
    overflow: hidden;
}

.footer-progress-fill[b-e43hkd4d49] {
    height: 100%;
    background: linear-gradient(90deg,
        var(--dxds-color-surface-warning-default-rest) 0%,
        var(--dxds-color-surface-warning-default-hovered) 100%);
    transition: width 200ms ease-out;
    border-radius: inherit;
    box-shadow: 0 0 6px color-mix(in srgb, var(--dxds-color-surface-warning-default-rest) 55%, transparent);
}

.footer-progress-percent[b-e43hkd4d49] {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    font-size: 0.72rem;
    font-weight: 700;
    color: var(--dxds-color-content-neutral-default-static-light-rest);
    text-shadow: 0 0 2px color-mix(in srgb, var(--dxds-color-content-neutral-default-static-dark-rest) 60%, transparent);
    pointer-events: none;
    line-height: 1;
}

.footer-progress-text[b-e43hkd4d49] {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    opacity: 0.95;
    max-width: 24rem;
}

.footer-progress-error[b-e43hkd4d49] {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    flex: 1;
    justify-content: flex-end;
    color: #fff3a5;
}

/* Neutralere Info-Variante für User-Abbrüche — kein Warn-/Error-Look. */
.footer-progress-info[b-e43hkd4d49] {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    flex: 1;
    justify-content: flex-end;
    color: color-mix(in srgb, var(--dxds-color-content-neutral-default-static-dark-rest) 92%, transparent);
    font-style: italic;
}

/* Handy (gleiche Query wie wwwroot/js/viewport.js): nur Firmenname + Stichtag. */
@media (max-width: 767px), (max-height: 500px) and (pointer: coarse) {
    .footer-firma-id[b-e43hkd4d49],
    .footer-firma-knr[b-e43hkd4d49],
    .footer-konto-sep[b-e43hkd4d49],
    .footer-konto-nr[b-e43hkd4d49],
    .footer-konto-bez[b-e43hkd4d49],
    .footer-copyright[b-e43hkd4d49] {
        display: none;
    }
}
/* /Components/Layout/HilfeLayout.razor.rz.scp.css */
/* Hilfeseiten: eigener, ruhiger Lesekontext im separaten Browser-Tab.
   Die Inhaltsregeln stehen als ::deep hier, damit alle Hilfeseiten dasselbe
   Schriftbild teilen und es nicht in jeder Seite wiederholt werden muss. */

.hilfe-shell[b-6dt94ynjvb] {
    display: flex;
    flex-direction: column;
    height: 100vh;
    background: var(--dxbl-body-bg);
    color: var(--dxbl-body-color);
}

.hilfe-topbar[b-6dt94ynjvb] {
    display: flex;
    align-items: center;
    gap: 24px;
    padding: 10px 24px;
    border-bottom: 1px solid var(--dxbl-border-color);
    background: var(--dxbl-tertiary-bg, var(--dxbl-body-bg));
    flex: 0 0 auto;
}

.hilfe-brand[b-6dt94ynjvb] {
    font-weight: 600;
    font-size: 1.05rem;
    text-decoration: none;
    color: inherit;
}

.hilfe-nav[b-6dt94ynjvb] {
    display: flex;
    gap: 18px;
    font-size: .9rem;
}

.hilfe-nav a[b-6dt94ynjvb] {
    text-decoration: none;
    color: var(--dxbl-link-color, inherit);
}

.hilfe-nav a:hover[b-6dt94ynjvb] { text-decoration: underline; }

.hilfe-main[b-6dt94ynjvb] {
    flex: 1 1 auto;
    min-height: 0;
    overflow-y: auto;
    padding: 28px 24px 80px;
}

/* ── Inhaltstypografie (gilt für alle Hilfeseiten) ───────────────── */

[b-6dt94ynjvb] .hilfe-doc {
    max-width: 62rem;
    margin: 0 auto;
    line-height: 1.6;
}

[b-6dt94ynjvb] .hilfe-doc h1 {
    font-size: 1.7rem;
    margin: 0 0 .3em;
}

[b-6dt94ynjvb] .hilfe-doc h2 {
    font-size: 1.25rem;
    margin: 2em 0 .6em;
    padding-bottom: .25em;
    border-bottom: 1px solid var(--dxbl-border-color);
}

[b-6dt94ynjvb] .hilfe-doc h3 {
    font-size: 1.05rem;
    margin: 1.6em 0 .4em;
}

[b-6dt94ynjvb] .hilfe-doc p { margin: .6em 0; }

[b-6dt94ynjvb] .hilfe-doc table {
    border-collapse: collapse;
    width: 100%;
    margin: 1em 0;
    font-size: .92rem;
}

[b-6dt94ynjvb] .hilfe-doc th,
[b-6dt94ynjvb] .hilfe-doc td {
    border: 1px solid var(--dxbl-border-color);
    padding: 6px 10px;
    text-align: left;
    vertical-align: top;
}

[b-6dt94ynjvb] .hilfe-doc th {
    background: var(--dxbl-tertiary-bg, rgba(128, 128, 128, .12));
    font-weight: 600;
}

/* Breite Tabellen scrollen in sich, die Seite nie horizontal. */
[b-6dt94ynjvb] .hilfe-tabelle { overflow-x: auto; }

[b-6dt94ynjvb] .hilfe-doc code {
    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
    font-size: .88em;
    padding: 1px 5px;
    border-radius: 3px;
    background: var(--dxbl-tertiary-bg, rgba(128, 128, 128, .16));
    white-space: nowrap;
}

[b-6dt94ynjvb] .hilfe-doc .hilfe-lead {
    font-size: 1.02rem;
    color: var(--dxds-color-content-neutral-subdued-rest, inherit);
}

/* Hinweiskasten — für Merksätze und Warnungen. */
[b-6dt94ynjvb] .hilfe-hinweis {
    border-left: 3px solid var(--dxbl-primary, #a33);
    background: var(--dxbl-tertiary-bg, rgba(128, 128, 128, .1));
    padding: 10px 14px;
    margin: 1.1em 0;
    border-radius: 0 4px 4px 0;
}

[b-6dt94ynjvb] .hilfe-hinweis p:first-child { margin-top: 0; }
[b-6dt94ynjvb] .hilfe-hinweis p:last-child { margin-bottom: 0; }

/* Inhaltsverzeichnis */
[b-6dt94ynjvb] .hilfe-toc {
    margin: 1.4em 0 2em;
    padding: 12px 18px;
    border: 1px solid var(--dxbl-border-color);
    border-radius: 4px;
}

[b-6dt94ynjvb] .hilfe-toc ol { margin: .3em 0 0; padding-left: 1.3em; }
[b-6dt94ynjvb] .hilfe-toc li { margin: .25em 0; }

/* Eingabe-Rezepte: was der Anwender in welches Feld tippt. */
[b-6dt94ynjvb] .hilfe-eingabe th { width: 30%; white-space: nowrap; }

/* Screenshots */
[b-6dt94ynjvb] .hilfe-bild {
    max-width: 100%;
    border: 1px solid var(--dxbl-border-color);
    border-radius: 4px;
    margin: 1em 0;
}

@media print {
    .hilfe-topbar[b-6dt94ynjvb] { display: none; }
    .hilfe-main[b-6dt94ynjvb] { overflow: visible; padding: 0; }
}
/* /Components/Layout/MainLayout.razor.rz.scp.css */
.dx-page[b-87de77c5bv] {
    position: relative;
    display: flex;
    flex-direction: column;
    height: 100dvh;   /* dvh: siehe Kommentar am DxSplitter in MainLayout.razor */
    overflow: hidden;
}

main[b-87de77c5bv] {
    flex: 1;
    margin-left: 0.5rem;
    height: 100%;
    display: flex;
    flex-direction: column;
    overflow: hidden;
}

.dx-content[b-87de77c5bv] {
    flex: 1;
    min-height: 0;
    display: flex;
    flex-direction: column;
    overflow: hidden;
}

.dx-top-row[b-87de77c5bv] {
    background-color: var(--dxds-color-surface-primary-default-rest);
    border-bottom: 1px solid var(--dxds-color-surface-primary-default-rest);
    justify-content: flex-end;
    height: 3.0rem;
    display: flex;
    align-items: center;
    color: var(--dxds-color-content-neutral-default-static-dark-rest);
}

    .dx-top-row[b-87de77c5bv]  a, .dx-top-row[b-87de77c5bv]  .btn-link {
        white-space: nowrap;
        margin-left: 0.5rem;
        text-decoration: none;
    }

    .dx-top-row[b-87de77c5bv]  a:hover, .dx-top-row[b-87de77c5bv]  .btn-link:hover {
        text-decoration: underline;
    }

    .dx-top-row[b-87de77c5bv]  a:first-child {
        overflow: hidden;
        text-overflow: ellipsis;
    }

@media (max-width: 641px) {
    .dx-top-row[b-87de77c5bv] {
        justify-content: space-between;
    }

    .dx-top-row[b-87de77c5bv]  a, .dx-top-row[b-87de77c5bv]  .btn-link {
        margin-left: 0;
    }
}

@media (min-width: 641px) {
    .dx-top-row[b-87de77c5bv] {
        position: sticky;
        top: 0;
        z-index: 1;
    }

    .dx-top-row.auth[b-87de77c5bv]  a:first-child {
        flex: 1;
        text-align: right;
        width: 0;
    }
}

/* Handy (ViewportState): Firmenmenü als Schublade von links über dem Inhalt, zwischen
   TopBar (3rem) und FooterBar (1.6rem). visibility nimmt die geschlossene Schublade aus der
   Tab-Reihenfolge; beim Schließen erst nach der Slide-Animation. Unter den DX-Popups/-Menüs,
   damit Kontextmenü und Dialoge aus dem Firmenmenü darüber erscheinen. */
.handy-schublade[b-87de77c5bv] {
    position: fixed;
    top: 3rem;
    bottom: 1.6rem;
    left: 0;
    width: min(85vw, 340px);
    z-index: 900;
    background-color: var(--dxds-color-surface-neutral-default-rest);
    box-shadow: 2px 0 8px rgba(0, 0, 0, 0.3);
    transform: translateX(-100%);
    visibility: hidden;
    transition: transform 200ms ease-out, visibility 0s linear 200ms;
}

.handy-schublade.offen[b-87de77c5bv] {
    transform: none;
    visibility: visible;
    transition: transform 200ms ease-out;
}

.handy-schublade-hintergrund[b-87de77c5bv] {
    position: fixed;
    inset: 3rem 0 1.6rem 0;
    z-index: 899;
    background: rgba(0, 0, 0, 0.35);
}

/* Handy (gleiche Query wie wwwroot/js/viewport.js): kein Splitter-Griff links, also auch kein
   Abstand dazu — sonst bleibt links ein weißer Streifen des Splitter-Hintergrunds. */
@media (max-width: 767px), (max-height: 500px) and (pointer: coarse) {
    main[b-87de77c5bv] {
        margin-left: 0;
    }
}

#blazor-error-ui[b-87de77c5bv] {
    color-scheme: light only;
    background: lightyellow;
    bottom: 0;
    box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2);
    box-sizing: border-box;
    display: none;
    left: 0;
    padding: 0.6rem 1.25rem 0.7rem 1.25rem;
    position: fixed;
    width: 100%;
    z-index: 1000;
}

    #blazor-error-ui .dx-dismiss[b-87de77c5bv] {
        cursor: pointer;
        position: absolute;
        right: 0.75rem;
        top: 0.5rem;
    }
/* /Components/Layout/TopBar.razor.rz.scp.css */
.dx-topbar-header[b-ifwtj8m0yz] {
    display: flex;
    min-width: 0;   /* am Handy darf der Markenname per Ellipsis schrumpfen statt die Buttons zu verdrängen */
    justify-content: flex-start;
    align-items: center;
    /* padding-left: 0.5rem; */
    padding-right: 0.5rem;
}

.dx-topbar-brand[b-ifwtj8m0yz] {
    font-size: 1.1rem;
    font-weight: var(--dxds-font-weight-caption-stronger);
    color: var(--dxds-color-content-neutral-default-static-dark-rest);
    text-decoration: none;
    flex-grow: 1;
    text-align: left;
    /*margin-left: 2.5rem; !* Balance the toggler width on the right *!*/
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

/* Hamburger links in der Leiste — gleiche Optik wie .user-avatar-btn, aber eckig. */
.topbar-hamburger[b-ifwtj8m0yz] {
    background: none;
    color: var(--dxds-color-content-neutral-default-static-dark-rest);
    border: none;
    border-radius: 4px;
    width: 30px;
    height: 30px;
    cursor: pointer;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    padding: 0;
    flex: none;
    margin-right: 0.5rem;
    transition: background-color 0.2s;
}

.topbar-hamburger:hover[b-ifwtj8m0yz] {
    background-color: color-mix(in srgb, var(--dxds-color-content-neutral-default-static-dark-rest) 15%, transparent);
}

.user-avatar-btn[b-ifwtj8m0yz] {
    position: relative;
    background: none;
    color: var(--dxds-color-content-neutral-default-static-dark-rest);
    border: 2px solid color-mix(in srgb, var(--dxds-color-content-neutral-default-static-dark-rest) 60%, transparent);
    border-radius: 50%;
    width: 30px;
    height: 30px;
    cursor: pointer;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    padding: 0;
    margin-left: 0.5rem;
    margin-right: 0.5rem;
    transition: background-color 0.2s;
}

.user-avatar-btn:hover[b-ifwtj8m0yz] {
    background-color: color-mix(in srgb, var(--dxds-color-content-neutral-default-static-dark-rest) 15%, transparent);
}

.user-avatar-loggedout[b-ifwtj8m0yz] {
    border-color: color-mix(in srgb, var(--dxds-color-content-neutral-default-static-dark-rest) 30%, transparent);
    opacity: 0.6;
}

.user-avatar-loggedout:hover[b-ifwtj8m0yz] {
    opacity: 0.9;
}

[b-ifwtj8m0yz] .topbar-switcher {
    margin-right: 0.25rem;
    color: var(--dxds-color-content-neutral-default-static-dark-rest);
}

[b-ifwtj8m0yz] .topbar-switcher .dxbl-btn {
    color: color-mix(in srgb, var(--dxds-color-content-neutral-default-static-dark-rest) 85%, transparent);
}

[b-ifwtj8m0yz] .topbar-switcher .dxbl-btn:hover {
    background-color: color-mix(in srgb, var(--dxds-color-content-neutral-default-static-dark-rest) 15%, transparent);
    color: var(--dxds-color-content-neutral-default-static-dark-rest);
}



/* Roter Punkt am Avatar: es gab Fehlversuche seit der vorherigen Anmeldung. */
.user-avatar-alert[b-ifwtj8m0yz] {
    position: absolute;
    top: -3px;
    right: -3px;
    width: 10px;
    height: 10px;
    border-radius: 50%;
    background: #d13438;
    border: 2px solid var(--dxds-color-background-neutral-default-static-dark-rest, #fff);
}

/* Benutzermenü-Inhalt (.user-dropdown-menu, .user-menu-warning) ist in wwwroot/app.css: DxDropDown
   rendert außerhalb des TopBar-Scopes, ::deep greift dort nicht. */

/* Handy (gleiche Query wie wwwroot/js/viewport.js): 38px-Tippflächen mit 22px-Icons.
   Per CSS statt SizeMode.Large — DX skaliert das Icon mit der Wurzel-Schriftgröße (14px)
   und bliebe auch in Large bei 14px. */
@media (max-width: 767px), (max-height: 500px) and (pointer: coarse) {
    .topbar-hamburger[b-ifwtj8m0yz],
    .user-avatar-btn[b-ifwtj8m0yz] {
        width: 38px;
        height: 38px;
    }

    .topbar-hamburger svg[b-ifwtj8m0yz],
    .user-avatar-btn svg[b-ifwtj8m0yz] {
        width: 24px;
        height: 24px;
    }

    [b-ifwtj8m0yz] .topbar-switcher.dxbl-btn {
        width: 38px;
        height: 38px;
        padding: 0;
        margin-right: 0;
        justify-content: center;
    }

    [b-ifwtj8m0yz] .topbar-switcher .dxbl-btn-icon {
        width: 22px;
        height: 22px;
    }
}
/* /Components/Pages/Home.razor.rz.scp.css */
.tabmanager-page[b-3uogkcchqw] {
    height: 100%;
    min-height: 0;
    display: flex;
    flex-direction: column;
    overflow: hidden;
}
/* /Components/Shared/ReportHost.razor.rz.scp.css */
.report-host[b-spxrq0ujj3] {
    display: flex;
    flex-direction: column;
    height: 100%;
    overflow: hidden;
}

.report-host-state[b-spxrq0ujj3] {
    padding: 1rem;
}

.report-host-viewer-wrap[b-spxrq0ujj3] {
    flex: 1 1 0;
    min-height: 0;
    display: flex;
    flex-direction: column;
    /* DxReportViewer braucht eine explizite Höhe — der Tab-Body ist ein
       flex-Container, der Wrapper füllt den Rest, der Viewer 100% davon. */
}

.report-host[b-spxrq0ujj3]  .report-host-viewer {
    flex: 1 1 0;
    min-height: 0;
    height: 100%;
    width: 100%;
}
/* /Components/Shared/TreeNode.razor.rz.scp.css */
.tree-node[b-klehbh9mta] {
    display: flex;
    align-items: center;
    padding: 0.3rem 0.4rem;
    cursor: pointer;
    font-size: 0.8rem;
    border-radius: 4px;
    gap: 0.3rem;
    white-space: nowrap;
    overflow: hidden;
}

.tree-node:hover[b-klehbh9mta] {
    background-color: var(--dxds-color-surface-primary-subdued-hovered);
}

.tree-node.expanded[b-klehbh9mta] {
    background-color: var(--dxds-color-surface-primary-deep-active);
}

.tree-node.active[b-klehbh9mta] {
    background-color: var(--dxds-color-surface-primary-deep-selected);
    font-weight: 700;
}

.tree-node.ktonr-konflikt[b-klehbh9mta] {
    color: var(--dxds-color-content-danger-default-rest);
}

.tree-icon[b-klehbh9mta] {
    flex-shrink: 0;
    width: 0.8rem;
    font-size: 0.7rem;
    text-align: center;
}

.level-parent[b-klehbh9mta] {
    font-weight: 700;
}

.level-branch[b-klehbh9mta] {
    font-weight: 700;
}

.level-leaf[b-klehbh9mta] {
    font-weight: 400;
    cursor: default;
}

.level-leaf:hover[b-klehbh9mta] {
    background-color: var(--dxds-color-surface-primary-subdued-hovered);
}


/* /Components/Shared/TreeView.razor.rz.scp.css */
.tree-view[b-wntwa8nlq8] {
    flex: 1;
    overflow-y: auto;
    overflow-x: hidden;
    min-height: 0;
}

.tree-root[b-wntwa8nlq8] {
    list-style: none;
    margin: 0;
    padding: 0;
}
