/* Gedeelde stijlen voor de platform-brede super-admin-schermen (.sa-*), bewust globaal i.p.v.
   component-scoped: gedeeld door dashboard/bedrijven/gebruikers/licenties/facturen/audit
   (patroon marketing.css). Kleuren uitsluitend via design-tokens (WCAG 2.2 AAA, 7:1). */

.sa-state { padding: 20px; font-size: 15.5px; color: var(--ink2); margin-bottom: 14px; }

.sa-h2 { font-size: 16px; font-weight: 700; margin: 0 0 12px; }

/* ---- KPI-tegels ---- */
.sa-kpi-grid {
    display: grid;
    gap: 14px;
    grid-template-columns: repeat(auto-fit, minmax(170px, 1fr));
    margin-bottom: 20px;
}

.sa-kpi { padding: 18px; }

.sa-kpi-n {
    font-size: 28px;
    font-weight: 800;
    letter-spacing: -0.5px;
    font-variant-numeric: tabular-nums;
}

.sa-kpi-lbl {
    font-size: 13.5px;
    font-weight: 600;
    color: var(--ink3);
    margin-top: 4px;
}

.sa-kpi-warning .sa-kpi-n { color: var(--tamber3); }
.sa-kpi-danger .sa-kpi-n { color: var(--accent-ink, var(--accent)); }

/* ---- Secties/kaarten ---- */
.sa-section { padding: 20px; margin-bottom: 18px; }

/* Meerdere smalle formulier-/infokaarten naast elkaar i.p.v. gestapeld in één kolom
   (gebruikersmelding 2026-08-16 "kan toch langs elkaar, nu veel scrollwerk" over /beheer/email).
   flex-wrap laat de kaarten vanzelf stapelen zodra de viewport te smal wordt — geen aparte
   media query nodig. align-items:flex-start voorkomt dat een korte kaart meerekt tot de hoogte
   van zijn buurman (zelfde overweging als .catd-grid's align-items:start). */
.sa-cardrow {
    display: flex;
    flex-wrap: wrap;
    gap: 18px;
    align-items: flex-start;
    margin-bottom: 18px;
}

.sa-cardrow > .sa-section {
    flex: 1 1 420px;
    max-width: 640px;
    margin-bottom: 0;
}

/* Twee veldenblokken naast elkaar binnen één bredere formulierkaart (sticker-prijzen:
   basisprijzen links, hoeveelheidsstaffel rechts). Op smalle schermen weer één kolom. */
.sa-formcols {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 4px 28px;
    align-items: start;
}

@media (max-width: 900px) {
    .sa-formcols {
        grid-template-columns: 1fr;
    }
}

.sa-toolbar {
    display: flex;
    align-items: center;
    gap: 10px;
    flex-wrap: wrap;
    margin-bottom: 14px;
}

/* Label+klein-invoerveld-anti-patroon (CLAUDE.md-precedent .catd-field-row/.inst-field-row):
   "Bewaartermijn (dagen)" is twee woorden en het langste woord is >12 tekens — op zeer smalle
   mobiele breedtes (<~300px) kan dit binnen de .sa-toolbar-rij op de spatie wrappen terwijl
   align-items:center het invoerveld dan halverwege het tweeregelige label centreert. Boven
   ~480px blijft dit gewoon een horizontale rij (geen visuele wijziging op desktop/tablet). */
.sa-retention-field {
    display: flex;
    align-items: center;
    gap: 6px;
}

@media (max-width: 480px) {
    .sa-retention-field {
        flex-direction: column;
        align-items: flex-start;
    }
}

/* height:var(--control-height) i.p.v. alleen min-width (audit-bevinding 2026-07-20): .field
   heeft in tokens.css alleen min-height:44px, wat naast de 34px-.btn-secondary-knoppen in
   dezelfde .sa-toolbar-rij zichtbaar hoger uitvalt — zelfde fix als .cat-search/.geb-search. */
.sa-toolbar .field {
    min-width: 220px;
    height: var(--control-height);
}

/* --accent-fg i.p.v. vast wit (heraudit 2026-09-05): de bedrijfs-huisstijl kan --accent overschrijven,
   CompanyAccentCss leidt dan zelf de leesbare voorgrondkleur af. */
.sa-tab-active { background: var(--accent); border-color: var(--accent); color: var(--accent-fg, #fff); }

/* Statusfilter-chips (gebruikersverzoek UI-uitbreiding super-admin-schermen) — 1-op-1 kopie van
   de globale .filter-chip/.filter-chip-on in tokens.css (voorheen Uitleningen.razor.css' .uit-chip) (component-scoped CSS lekt niet tussen pagina's,
   patroon Kaart.razor.css), hier eenmalig globaal omdat meerdere super-admin-pagina's dit delen. */
.sa-chip {
    font-size: 13.5px;
    font-weight: 600;
    font-family: inherit;
    padding: 7px 14px;
    border-radius: 8px;
    cursor: pointer;
    white-space: nowrap;
    background: var(--card);
    color: var(--ink2);
    border: 1px solid var(--bd3);
    /* Alleen de drie daadwerkelijk wisselende eigenschappen (heraudit 2026-09-05), geen `all`. */
    transition: background-color .15s, color .15s, border-color .15s;
    position: relative;
}

.sa-chip::before {
    content: "";
    position: absolute;
    inset: -6px -4px;
}

.sa-chip-on {
    background: #262d34;
    color: #fff;
    border-color: #262d34;
}

/* margin-bottom (niet alleen padding): .route-fade (tokens.css) wrapt @Body maar is zelf geen
   flex-container, dus de flex-gap van .admin-content bereikt dit niveau nooit (precedent:
   Categorieen.razor.css) — zonder eigen margin-bottom raakte deze regel (vaak de introtekst
   bovenaan een super-admin-pagina) de eerstvolgende toolbar/tabel/sectie zonder enige ruimte. */
.sa-empty { padding: 16px 0; color: var(--ink2); font-size: 15.5px; margin-bottom: 14px; }

/* Opgeslagen-filters-dialoog (gebruikersverzoek 2026-07-23) — dialoogpatroon identiek aan de
   overige overlays (role="dialog" + aria-modal + focus-naar-dialoog + Escape sluit). */
.sa-savefilter-backdrop {
    position: fixed;
    inset: 0;
    background: rgba(20, 20, 20, .35);
    display: flex;
    align-items: center;
    justify-content: center;
    z-index: 50;
}

.sa-savefilter-dialog {
    width: 380px;
    max-width: calc(100vw - 40px);
    max-height: calc(100vh - 40px);
    overflow-y: auto;
    padding: 22px;
    display: flex;
    flex-direction: column;
    gap: 8px;
}

.sa-savefilter-title {
    font-size: 16px;
    font-weight: 700;
    margin-bottom: 6px;
}

.sa-savefilter-label {
    font-size: 12.5px;
    font-weight: 600;
    color: var(--mut);
}

.sa-savefilter-existing {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 6px;
    margin-top: 6px;
    font-size: 13.5px;
}

.sa-savefilter-actions {
    display: flex;
    justify-content: flex-end;
    gap: 8px;
    margin-top: 12px;
}

/* Neutrale statustekst (bv. testmail-succes, licentie-impact-melding zonder overschrijding) —
   vervangt het per ongeluk hergebruikte, component-scoped .inst-hint uit Instellingen.razor.css
   (matcht daarbuiten nooit, CLAUDE.md §2b). */
.sa-hint-neutral { font-size: 15px; color: var(--ink2); }

/* Korte toelichtingstekst binnen een .sa-dialog — vervangt het misbruik van .sa-empty
   (bedoeld voor "lege lijst") met een inline style="padding:0"-override op elke gebruiksplek. */
.sa-dialog-text { color: var(--ink2); font-size: 15px; }

/* .sa-dialog h2 staat altijd bovenaan de dialoog, dus geen eigen margin-bottom nodig —
   vervangt de herhaalde inline style="margin:0" op elke dialoogtitel. */
.sa-dialog h2.sa-h2 { margin: 0; }

/* Gecentreerde tabelcel (bv. module-matrix ✓/—) zonder de publieke-site-klasse .mkt-center
   (marketing.css) in een super-admin-tabel te hoeven hergebruiken. */
.sa-center { text-align: center; }

/* ---- Tabellen ---- */
/* .card levert background/border/border-radius (tokens.css) — zonder deze klasse zweefden
   de super-admin-tabellen kleurloos op de paginagradient (browserverificatie 2026-07-21).
   padding:0 (patroon globale .tablewrap, tokens.css): th/td dragen hun eigen padding. */
.sa-table-wrap { padding: 0; overflow-x: auto; margin-bottom: 18px; }

/* mkt-alert-error (marketing.css, gedeeld ver buiten dit bestand) draagt zelf geen margin —
   hier bewust alleen de combinatie met super-admin-eigen klassen afgevangen i.p.v. het gedeelde
   bestand aan te raken (zelfde route-fade-oorzaak, zie .sa-empty hierboven). */
.mkt-alert-error + .sa-toolbar,
.mkt-alert-error + .sa-table-wrap,
.mkt-alert-error + .sa-section {
    margin-top: 14px;
}

.sa-table {
    width: 100%;
    border-collapse: collapse;
    font-size: 15px;
    min-width: 560px;
}

.sa-table th, .sa-table td {
    border-bottom: 1px solid var(--bd3);
    padding: 10px 12px;
    text-align: left;
    vertical-align: middle;
}

.sa-table thead th {
    font-size: 12.5px;
    text-transform: uppercase;
    letter-spacing: 0.5px;
    color: var(--theadink, var(--ink3));
    /* Sticky kolomkoppen (gebruikersverzoek, item 37): blijven zichtbaar bij het scrollen door
       lange tabellen. position:sticky verankert op de dichtstbijzijnde scrollbare voorouder
       (de content-area onder de vaste topbar), dus geen aparte top-offset nodig. Solide
       achtergrond (i.p.v. transparant) is vereist, anders schemeren onderliggende rijen door. */
    position: sticky;
    top: 0;
    z-index: 1;
    background: var(--card);
}

.sa-table tbody tr:hover { background: var(--card-h, var(--thead)); }

.sa-table tbody tr:last-child td { border-bottom: none; }

/* Item 22 — LogEntry-rij met een CorrelationId (front-end-fout met sessie-koppeling) is
   klikbaar/toetsenbordbedienbaar om de bijbehorende PageView-detailregel uit te klappen. */
.sa-log-row-clickable { cursor: pointer; }

.sa-log-row-clickable:focus-visible { outline-offset: -2px; }

.sa-log-detail {
    background: var(--thead);
    padding: 10px 16px 14px;
    font-size: 13.5px;
}

.sa-log-detail-title {
    font-size: 11.5px;
    letter-spacing: .5px;
    text-transform: uppercase;
    color: var(--mut);
    margin-bottom: 6px;
}

.sa-log-detail-list {
    margin: 0;
    padding-left: 18px;
    display: flex;
    flex-direction: column;
    gap: 3px;
}

/* Actie-kolommen met meerdere knoppen (Bedrijven/Licenties: blokkeren + anonimiseren/bewerken)
   stapelden voorheen met flex-wrap: bij twee ongelijk brede knoppen in een smalle kolom gaf dat
   een rafelige rij. Vaste kolombreedte + verticale stapeling (patroon Schades.razor.css
   .schd-actions) geeft nette, gelijk uitgelijnde knoppen. */
.sa-table td.sa-actions-cell {
    display: flex;
    flex-direction: column;
    align-items: stretch;
    gap: 6px;
    max-width: 190px;
}

/* Geen eigen padding/font-size meer (spacing-audit 2026-09-13, precedent Schades.razor.css
   .schd-actions .btn-secondary): de override drukte deze knoppen naar 6px/10px padding zonder
   eigen height, waardoor ze compacter oogden dan de standaard .btn-secondary (34px
   --control-height, padding 0 15px) elders in de app. */

/* Sorteerbare kolomkop-knop binnen een echte <th> (i.p.v. het div-grid-patroon van
   Categorieen.razor/Gebruikers.razor) — hergebruikt de globale .sortable-th-basisstijl
   (tokens.css), alleen het <th>-omhulsel is hier specifiek. */
.sa-table th.sa-th-sortable { padding: 0; }

.sa-table th.sa-th-sortable button.sortable-th {
    display: block;
    width: 100%;
    padding: 10px 12px;
}

/* Mobiel (<760px): kaartweergave i.p.v. horizontaal scrollende tabel — zelfde patroon als
   Categorieen.razor.css/Gebruikers.razor.css, hier toegepast op de <table>-gebaseerde
   super-admin-schermen (data-label op elke <td>, gebruikersverzoek 2026-07-21). */
@media (max-width: 760px) {
    .sa-table-wrap { overflow-x: visible; }

    /* min-width: 0 (heraudit 2026-09-05): zonder reset blijft de kaartweergave de desktop-
       min-width van 560px houden en knipt .admin-content (overflow-x: hidden) de rechterkant —
       juist de waardekolom — af op alle 14 sa-table-pagina's; zelfde fix als Sets.razor.css. */
    .sa-table, .sa-table thead, .sa-table tbody, .sa-table tr { display: block; width: 100%; min-width: 0; }

    .sa-table thead { display: none; }

    .sa-table tr {
        border: 1px solid var(--bd2);
        border-radius: 10px;
        margin-bottom: 8px;
        padding: 4px 0;
    }

    .sa-table td {
        display: flex;
        align-items: center;
        justify-content: space-between;
        gap: 10px;
        border-bottom: none;
    }

    .sa-table td[data-label]::before {
        content: attr(data-label);
        font-size: 11.5px;
        font-weight: 600;
        letter-spacing: .5px;
        text-transform: uppercase;
        color: var(--mut);
        flex: none;
    }

    .sa-table td.sa-actions-cell {
        justify-content: flex-start;
        max-width: none;
    }
}

/* ---- Paginering (patroon globale .table-footer + .prj-pager, Projecten.razor.css) ---- */
.sa-footer {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    padding: 12px 4px 0;
}

.sa-pager {
    display: flex;
    align-items: center;
    gap: 8px;
}

/* Geen eigen padding/font-size/line-height meer (spacing-audit 2026-09-13, precedent
   Schades.razor.css .schd-pager): de override drukte deze ‹/›-knoppen naar 4px/10px padding
   en had de font-size nooit meegekregen van de leesbaarheidsaudit 2026-08-23 (stond nog op
   het oude 15px), waardoor ze zowel krapper als groter tekstueel oogden dan elke andere
   .btn-secondary. */

@media (max-width: 560px) {
    .sa-footer { flex-wrap: wrap; }
}

/* ---- Dialoog (patroon Categorieen.razor: role=dialog + aria-modal + focus + Escape) ---- */
.sa-overlay {
    position: fixed;
    inset: 0;
    background: rgba(0, 0, 0, 0.45);
    display: flex;
    align-items: center;
    justify-content: center;
    z-index: 80;
    padding: 20px;
}

.sa-dialog {
    background: var(--card);
    border-radius: 14px;
    padding: 24px;
    max-width: 460px;
    width: 100%;
    max-height: calc(100vh - 40px);
    overflow-y: auto;
    box-shadow: var(--shadow-overlay, 0 24px 60px rgba(0, 0, 0, 0.3));
    display: flex;
    flex-direction: column;
    gap: 12px;
}

.sa-dialog-actions {
    display: flex;
    gap: 10px;
    justify-content: flex-end;
    margin-top: 6px;
}

/* ---- Plan-CRUD-formulier (SuperAdminLicenties.razor) ---- */
.sa-checkbox-row {
    display: flex;
    align-items: center;
    gap: 8px;
    min-height: 44px;
}

.sa-field-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 10px;
}

/* ---- Afhankelijkheden (SuperAdminAfhankelijkheden.razor) ---- */
.sa-deps-panel {
    padding: 18px 20px;
    margin-bottom: 14px;
}

.sa-deps-panel-title {
    font-size: 15.5px;
    font-weight: 700;
    margin: 0 0 12px;
}

.sa-deps-panel-row {
    display: flex;
    align-items: center;
    gap: 10px;
    flex-wrap: wrap;
}

/* Geaccepteerde advisory: markering via een linker rand i.p.v. opacity (heraudit 2026-09-05) —
   opacity .65 dimde tekst én link tot ≈4,7:1 (AAA vraagt 7:1); de status staat toch al
   tekstueel in de "geaccepteerd"-pil, dus een kleur-onafhankelijke rand volstaat. */
.sa-deps-advisory-accepted {
    border-left: 3px solid var(--bd2);
    padding-left: 8px;
}

.sa-deps-accept-form {
    display: flex;
    align-items: center;
    gap: 8px;
    margin-top: 4px;
    flex-wrap: wrap;
}

.sa-deps-accept-form .field {
    min-width: 240px;
    height: var(--control-height);
}

/* Verticale veldenstack voor formulieren met lange labels (bv. SuperAdminStickerPrijzen.razor) —
   een 3-koloms grid knijpt lange NL-labels ("Basisbedrag per bestelling (€)") stuk. */
.sa-field-stack {
    display: flex;
    flex-direction: column;
    gap: 16px;
}

.sa-field-stack label {
    display: flex;
    flex-direction: column;
    gap: 6px;
}

.sa-field-stack label > span {
    font-size: 15px;
    font-weight: 700;
}

.sa-module-edit-grid {
    display: flex;
    flex-direction: column;
    gap: 8px;
    max-height: 320px;
    overflow-y: auto;
    padding-right: 4px;
}

.sa-module-edit-row {
    display: grid;
    grid-template-columns: minmax(0, 1fr) 150px;
    gap: 8px;
    align-items: center;
}

.sa-module-edit-row:has(.sa-module-edit-price) {
    grid-template-columns: minmax(0, 1fr) 150px 110px;
}

.sa-module-edit-label {
    font-size: 15px;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

@media (max-width: 560px) {
    .sa-field-grid {
        grid-template-columns: 1fr;
    }

    .sa-module-edit-row,
    .sa-module-edit-row:has(.sa-module-edit-price) {
        grid-template-columns: 1fr;
    }
}

/* .sa-toast is vervallen (heraudit 2026-09-05): de super-admin-pagina's gebruiken nu de globale
   .toast/.toast-hide uit tokens.css (fixed, met toastIn/toastOut) — de inline variant schoof de
   pagina-inhoud omlaag bij verschijnen en verdween abrupt. */
