/* ============================================================
   oo-datagrid – Onesown DataGrid Komponente
   ============================================================ */

/* Wrapper-Container */
.oo-datagrid {
    width: 100%;
    color: var(--oo-neutral-on);
    border-radius: var(--oo-radius-md, 6px);
    overflow: hidden;
    background: var(--oo-neutral-lighter, #fff);
    border: 1px solid var(--oo-neutral-light, #e0e0e0);
    position: relative;
}

/* Horizontales Scrollen bei kleinen Viewports */
.oo-datagrid__wrapper {
    overflow-x: auto;
    width: 100%;
}

/* ── Tabelle ── */
.oo-datagrid__table {
    width: 100%;
    /*
     * border-collapse:separate ist PFLICHT für position:sticky.
     * collapse + sticky = bekannter Browser-Bug (Gaps, unsichtbare Borders).
     * border-spacing:0 entfernt den Default-Abstand von separate.
     */
    border-collapse: separate;
    border-spacing: 0;
    table-layout: auto;
}

/* ── Header ── */
.oo-datagrid__thead {
    background: var(--oo-neutral-light, #f5f5f5);
}

.oo-datagrid__th {
    padding: 0;
    text-align: left;
    font-weight: 600;
    white-space: nowrap;
    position: relative;
    user-select: none;
    /* Border-Bottom direkt auf th statt auf tr/thead */
    border-bottom: 2px solid var(--oo-neutral, #e0e0e0);
    background: var(--oo-neutral-light, #f5f5f5);
}

.oo-datagrid__th-inner {
    display: flex;
    align-items: stretch;
    gap: 0;
    padding: 0;
    cursor: default;
    position: relative;
}

.oo-datagrid__th-label {
    flex: 1;
    overflow: hidden;
    text-overflow: ellipsis;
}

/* Sort-Icon (via <Icon>-Komponente) */
.oo-datagrid__th-inner .oo-icon.oo-datagrid__sort-icon {
    font-size: 1.1rem;
    color: var(--oo-neutral-on, #9e9e9e);
    transition: color 0.15s;
    flex-shrink: 0;
    opacity: 0.45;
}

.oo-datagrid__th-inner .oo-icon.oo-datagrid__sort-icon--active {
    color: var(--oo-primary, #1976d2);
    opacity: 1;
}

/* ── Body ── */
.oo-datagrid__tbody .oo-datagrid__row {
    transition: background 0.1s;
}

.oo-datagrid__td {
    padding: 9px 14px;
    vertical-align: middle;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    /* Border direkt auf td, nicht auf tr – sonst sticky-Bug */
    border-bottom: 1px solid var(--oo-neutral-light, #e0e0e0);
}

/* Letzte Zeile: kein unterer Border */
.oo-datagrid__tbody .oo-datagrid__row:last-child .oo-datagrid__td {
    border-bottom: none;
}

/* Shrink-Spalte: kein Umbruch, damit width:1px wirkt */
.oo-datagrid__cell--shrink {
    white-space: nowrap;
    overflow: visible;
    text-overflow: clip;
}

/* ── Hover-Variante ── */
.oo-datagrid--hover .oo-datagrid__row:hover {
    background: var(--oo-primary-lighter, #e3f2fd);
    cursor: default;
}

/* ── Striped-Variante ── */
.oo-datagrid--striped .oo-datagrid__row:nth-child(odd) {
    background: var(--oo-neutral-lighter, #fff);
}

.oo-datagrid--striped .oo-datagrid__row:nth-child(even) {
    background: var(--oo-neutral-light, #f0f0f0);
}

/* ── GridLines-Variante ── */
.oo-datagrid--gridlines .oo-datagrid__td,
.oo-datagrid--gridlines .oo-datagrid__th {
    border-right: 1px solid var(--oo-neutral, #d0d0d0);
}

.oo-datagrid--gridlines .oo-datagrid__td:last-child,
.oo-datagrid--gridlines .oo-datagrid__th:last-child {
    border-right: none;
}

.oo-datagrid--gridlines .oo-datagrid__td {
    border-bottom: 1px solid var(--oo-neutral, #d0d0d0);
}

/* ── Empty-State ── */
.oo-datagrid__empty {
    text-align: center;
    padding: var(--oo-space-4);
    color: var(--oo-neutral-on, #9e9e9e);
    font-style: italic;
}

/* ── Loading-State (Overlay über der Tabelle) ── */
.oo-datagrid__loading {
    position: absolute;
    inset: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: var(--oo-space-2);
    color: var(--oo-neutral-on, #555);
    background: rgba(255, 255, 255, 0.65);
    backdrop-filter: blur(1px);
    -webkit-backdrop-filter: blur(1px);
    z-index: 10;
    border-radius: inherit;
}

.oo-datagrid__loading-icon {
    font-size: 1.5rem;
    animation: oo-datagrid-spin 1.2s linear infinite;
}

@keyframes oo-datagrid-spin {
    from { transform: rotate(0deg); }
    to   { transform: rotate(360deg); }
}

/* ── Toolbar (über der Tabelle, rechts ausgerichtet) ── */
.oo-datagrid__toolbar {
    display: flex;
    align-items: center;
    justify-content: flex-end;
    gap: 4px;
    padding: 4px 8px;
    border-bottom: 1px solid var(--oo-neutral-light, #e0e0e0);
    background: var(--oo-neutral-lighter, #fff);
}

/* ── Pager ── */
.oo-datagrid__pager {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 6px 10px;
    border-top: 1px solid var(--oo-neutral-light, #e0e0e0);
    background: var(--oo-neutral-lighter, #fff);
    flex-wrap: wrap;
    gap: 6px;
}

.oo-datagrid__pager-nav {
    display: flex;
    align-items: center;
    gap: 2px;
}

.oo-datagrid__pager-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 30px;
    height: 30px;
    padding: 0;
    background: none;
    border: none;
    border-radius: var(--oo-radius-md, 4px);
    color: var(--oo-neutral-on, #444);
    cursor: pointer;
    transition: background 0.12s;
}

.oo-datagrid__pager-btn:hover:not(:disabled) {
    background: var(--oo-neutral-light, #ebebeb);
}

.oo-datagrid__pager-btn:disabled {
    opacity: 0.35;
    cursor: default;
}

.oo-datagrid__pager-btn .oo-icon {
    font-size: 1.2rem;
}

.oo-datagrid__pager-size {
    margin-left: 6px;
    height: 30px;
    padding: 0 6px;
    border: 1px solid var(--oo-neutral, #ccc);
    border-radius: var(--oo-radius-md, 4px);
    background: var(--oo-neutral-lighter, #fff);
    color: var(--oo-neutral-on, #444);
    font-size: var(--oo-font-size-sm, 0.875rem);
    cursor: pointer;
}

.oo-datagrid__pager-info {
    font-size: var(--oo-font-size-sm, 0.875rem);
    color: var(--oo-neutral-on, #666);
    white-space: nowrap;
}

/* ── Column-Filter: th-sort-Bereich ── */
.oo-datagrid__th-sort {
    display: flex;
    align-items: center;
    gap: 4px;
    flex: 1;
    overflow: hidden;
    cursor: pointer;
    padding: 10px 14px;
}

.oo-datagrid__th-sort:hover {
    background: var(--oo-neutral, #ebebeb);
}

/* th-inner ohne eigenes Padding, da th-sort es trägt – Definition siehe oben */

/* ── Filter-Icon-Button im Header ── */
.oo-datagrid__filter-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 30px;
    flex-shrink: 0;
    background: none;
    border: none;
    border-left: 1px solid transparent;
    color: var(--oo-neutral-on, #9e9e9e);
    opacity: 0.4;
    cursor: pointer;
    transition: opacity 0.15s, background 0.12s, color 0.12s;
    padding: 0;
}

.oo-datagrid__filter-btn:hover {
    opacity: 1;
    background: var(--oo-neutral, #ebebeb);
    border-left-color: var(--oo-neutral-light, #ddd);
}

.oo-datagrid__filter-btn--active {
    opacity: 1;
    color: var(--oo-primary, #1976d2);
    border-left-color: var(--oo-primary-light, #90caf9);
}

.oo-datagrid__filter-btn .oo-icon {
    font-size: 1rem;
}

/* ── Filter-Overlay ── */
.oo-datagrid__filter-overlay {
    position: fixed;
    z-index: 1050;
    min-width: 300px;
    background: var(--oo-neutral-lighter, #fff);
    border: 1px solid var(--oo-neutral, #d0d0d0);
    border-radius: var(--oo-radius-md, 6px);
    box-shadow: 0 4px 16px rgba(0,0,0,0.12);
    padding: 10px;
    display: flex;
    flex-direction: column;
    gap: 6px;
    font-weight: normal;
}

/* Aktions-Buttons im Overlay nebeneinander */
.oo-datagrid__filter-overlay-actions {
    display: flex;
    gap: 6px;
    flex-wrap: wrap;
    margin-top: 2px;
}

.oo-datagrid__filter-overlay-actions .oo-btn {
    flex: 1;
    min-width: 70px;
    justify-content: center;
}

/* ── Chip-Leiste ── */
.oo-datagrid__filter-chips {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 6px;
    padding: 6px 10px;
    background: color-mix(in srgb, var(--oo-primary, #1976d2) 6%, var(--oo-neutral-lighter, #fff));
    border-bottom: 1px solid var(--oo-neutral-light, #e0e0e0);
}

.oo-datagrid__filter-chip {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    padding: 3px 8px 3px 10px;
    background: color-mix(in srgb, var(--oo-primary, #1976d2) 12%, transparent);
    border: 1px solid color-mix(in srgb, var(--oo-primary, #1976d2) 30%, transparent);
    border-radius: var(--oo-radius-full, 999px);
    font-size: var(--oo-font-size-sm, 0.8rem);
    color: var(--oo-neutral-on, #333);
    white-space: nowrap;
}

.oo-datagrid__filter-chip-remove {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 18px;
    height: 18px;
    background: none;
    border: none;
    cursor: pointer;
    padding: 0;
    color: var(--oo-neutral-on, #666);
    border-radius: 50%;
    transition: background 0.12s;
}

.oo-datagrid__filter-chip-remove:hover {
    background: color-mix(in srgb, var(--oo-danger, #d32f2f) 15%, transparent);
    color: var(--oo-danger, #d32f2f);
}

.oo-datagrid__filter-chip-remove .oo-icon {
    font-size: 0.85rem;
}

.oo-datagrid__filter-chips-clear {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    padding: 3px 10px;
    background: none;
    border: 1px solid var(--oo-neutral, #ccc);
    border-radius: var(--oo-radius-full, 999px);
    font-size: var(--oo-font-size-sm, 0.8rem);
    color: var(--oo-neutral-on, #555);
    cursor: pointer;
    transition: background 0.12s, border-color 0.12s;
    white-space: nowrap;
    margin-left: auto;
}

.oo-datagrid__filter-chips-clear:hover {
    background: var(--oo-neutral-light, #ebebeb);
    border-color: var(--oo-neutral-on, #aaa);
}

.oo-datagrid__filter-chips-clear .oo-icon {
    font-size: 0.95rem;
}

/* ── Zeilen-Selektion ─────────────────────────────────────────────────── */

.oo-datagrid__row--selected > td {
    background: color-mix(in srgb, var(--oo-primary, #1976d2) 10%, transparent) !important;
}

.oo-datagrid--hover .oo-datagrid__row--selected:hover > td {
    background: color-mix(in srgb, var(--oo-primary, #1976d2) 18%, transparent) !important;
}

.oo-datagrid__th--checkbox,
.oo-datagrid__td--checkbox {
    width: 1px;
    white-space: nowrap;
    padding: 0 8px;
    text-align: center;
    vertical-align: middle;
}

.oo-datagrid__checkbox {
    width: 16px;
    height: 16px;
    cursor: pointer;
    accent-color: var(--oo-primary, #1976d2);
}

/* Single-Mode: Zeiger-Cursor auf klickbaren Zeilen */
.oo-datagrid--selectable .oo-datagrid__row {
    cursor: pointer;
}

/* ── TextAlign ────────────────────────────────────────────────────────── */

.oo-datagrid__cell--left {
    text-align: left;
}

.oo-datagrid__cell--center {
    text-align: center;
}

.oo-datagrid__cell--right {
    text-align: right;
}

/* ── Bool-Spalten-Icons ───────────────────────────────────────────────── */

.oo-datagrid__bool-icon--true {
    color: var(--oo-success, #388e3c);
    font-size: 1.1rem;
    vertical-align: middle;
}

.oo-datagrid__bool-icon--false {
    color: var(--oo-neutral-on, #9e9e9e);
    font-size: 1.1rem;
    vertical-align: middle;
}

/* ── Frozen-Spalten ───────────────────────────────────────────────────── */

/*
 * Mit border-collapse:separate funktioniert position:sticky korrekt.
 * border-right direkt auf der Zelle – kein Gap, kein Durchscheinen.
 */
.oo-datagrid__cell--frozen {
    position: sticky;
    left: 0;      /* wird per inline-style überschrieben wenn Offset > 0 */
    z-index: 1;
    background: var(--oo-neutral-lighter, #fff);
    border-right: 2px solid var(--oo-neutral, #d0d0d0) !important;
}

/* Header-Frozen */
.oo-datagrid__thead .oo-datagrid__cell--frozen {
    background: var(--oo-neutral-light, #f5f5f5);
    z-index: 4;
}

/* Striped – gerade Zeilen */
.oo-datagrid--striped .oo-datagrid__row:nth-child(even) .oo-datagrid__cell--frozen {
    background: var(--oo-neutral-light, #f0f0f0);
}

/* Selektierte Zeile */
.oo-datagrid__row--selected > .oo-datagrid__cell--frozen {
    background: color-mix(in srgb, var(--oo-primary, #1976d2) 10%, var(--oo-neutral-lighter, #fff)) !important;
}

/* Sticky-Header-Wrapper: wenn MaxHeight gesetzt ist, klebt der thead am oberen Rand */
.oo-datagrid__wrapper--sticky-header {
    overflow-y: auto;
}

.oo-datagrid__wrapper--sticky-header .oo-datagrid__thead .oo-datagrid__th {
    position: sticky;
    top: 0;
    z-index: 3;
}

.oo-datagrid__wrapper--sticky-header .oo-datagrid__thead .oo-datagrid__cell--frozen {
    z-index: 4;
}
