/* /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);
}

.admin-actions[b-cv20wzqdz4] {
    display: flex;
    flex-direction: column;
    gap: 0.75rem;
    align-items: flex-start;
}

/* 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 {
    max-width: 100%;
    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 */
}
/* /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;
}

.audit-pager[b-cjjhwtcms5] {
    margin-top: 0.75rem;
    display: flex;
    gap: 0.5rem;
    justify-content: flex-end;
}

/* 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/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;
}
/* /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;
}
/* /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 / DxGrid füllen den Flex-Slot ihres Wraps — flex-basis 0
   erzwingt reine Flex-Sizing, min-height: 0 erlaubt das Schrumpfen. */
.bilanz-page[b-2njxauydct]  .bilanz-grid,
.bilanz-page[b-2njxauydct]  .bilanz-unassigned-grid {
    flex: 1 1 0;
    min-height: 0;
}

/* Kontoart-Inline-Edit in der Liste der unzugeordneten Konten: schmales
   Eingabefeld, das die 30px-Art-Zelle ausfüllt. Die Art-Zelle selbst als
   Block, damit die ganze Zellfläche klickbar ist. */
.bilanz-page[b-2njxauydct]  .bilanz-ktoart-cell {
    display: block;
    cursor: pointer;
}

.bilanz-page[b-2njxauydct]  .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;
}

/* 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;
}

.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;
}

/* Rechte Pane: Header + Konten-Grid stapeln. */
.bilanz-page .bilanz-unassigned-wrap[b-2njxauydct] {
    display: flex;
    flex-direction: column;
    height: 100%;
    min-height: 0;
    gap: 0.25rem;
    padding-left: 0.5rem;
}

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

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

.bilanz-page .bilanz-unassigned-empty[b-2njxauydct] {
    color: var(--dxds-color-content-neutral-subdued-rest);
    font-style: italic;
    margin: 0.25rem 0;
}
/* /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;
}

.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/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);
}
/* /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/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%;
}
/* /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%;
}

.ust-page[b-uem15h9vf7]  .ust-cell {
    display: block;
    width: 100%;
    min-height: 1.4em;
    box-sizing: border-box;
    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;
}

/* Grand-Total-Zeile unten anheften — alle Zellen der Zeile. Anker: die LETZTE
   tbody-Zeile (RowTotalsPosition-Default = After, Pivot nicht virtualisiert);
   der :has()-Guard stellt sicher, dass ohne Grand Totals nichts klebt. Bewusst
   NICHT über den Zeilenkopf-th erkannt — dessen Klassen-Belegung ist
   DX-Interna (ein th.dxbl-pivot-table-grand-total-Selektor griff nicht). */
.ust-page[b-uem15h9vf7]  .ust-pivot tbody > tr:last-child:has(.dxbl-pivot-table-grand-total) > * {
    position: sticky;
    bottom: 0;
    z-index: 2;
}

/* Zeilenkopf-Zellen der Grand-Total-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. */
.ust-page[b-uem15h9vf7]  .ust-pivot tbody > tr:last-child:has(.dxbl-pivot-table-grand-total)
    > td.dxbl-pivot-table-row-field-item.dxbl-pivot-table-row-field-item,
.ust-page[b-uem15h9vf7]  .ust-pivot tbody > tr:last-child:has(.dxbl-pivot-table-grand-total)
    > th.dxbl-pivot-table-row-field-item.dxbl-pivot-table-row-field-item {
    z-index: 4 !important;
}

/* Ecke rechts unten: letzte Zelle der Grand-Total-Zeile (sticky rechts UND
   unten — inset-inline-end kommt aus der Spalten-Regel oben). */
.ust-page[b-uem15h9vf7]  .ust-pivot tbody > tr:last-child:has(.dxbl-pivot-table-grand-total)
    > td.dxbl-pivot-table-grand-total.dxbl-pivot-table-grand-total:last-child {
    z-index: 3;
}

/* 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;
}

/* Der Klickbereich der Betrag-Zellen darf mitschrumpfen — er soll die Zelle
   füllen, nicht sie aufspannen. */
.ust-page[b-uem15h9vf7]  .ust-cell {
    min-height: 1.2em;
}
/* /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;
}

.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);
}

.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;
}

/* 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;
}
/* /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);
}

.ilv-popup .ilv-import-input[b-efvgmppyxw] {
    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);
}
/* /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 (80px) 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); }
/* /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-Hinweis-Pille (nicht angemeldet) */
.aw-welcome-pill[b-4bdz7rpdo0] {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    margin-top: 20px;
    padding: 7px 14px;
    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;
}
.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. */
.aw-panel[b-4bdz7rpdo0]  .fibu-tabs {
    flex: 1 1 auto;
    min-height: 0;
    max-height: 100%;
    display: flex;
    flex-direction: column;
    overflow: hidden;
}

.aw-suche-placeholder[b-4bdz7rpdo0] {
    padding: 16px;
    color: var(--dxds-color-content-neutral-subdued-rest);
    font-style: italic;
}
/* /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;
}
/* /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; }

@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: 100vh;
    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;
    }
}

#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;
    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] {
    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);
}


/* /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-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;
}
