@use '../atoms/variables' as *; @use '../atoms/mixins' as *; // ─── Page ───────────────────────────────────────────────────────────────────── .report-page { @include page-shell; } // ─── Header ────────────────────────────────────────────────────────────────── .report-header { @include section-header; padding: $space-4 $space-6; } .report-header__title { font-size: $font-size-xl; font-weight: $font-weight-bold; color: var(--header-text); } .report-header__right { display: flex; align-items: center; gap: $space-4; } // ─── Account-Name Anzeige ──────────────────────────────────────────────────── .report-account-name { display: inline-flex; align-items: center; gap: $space-2; padding: $space-2 $space-4; font-size: $font-size-sm; font-weight: $font-weight-medium; color: var(--header-text); background: var(--header-overlay); border: 1px solid var(--header-overlay); border-radius: $radius-pill; backdrop-filter: blur(6px); -webkit-backdrop-filter: blur(6px); white-space: nowrap; &__icon { width: 16px; height: 16px; flex-shrink: 0; } } // ─── Disabled Tab ──────────────────────────────────────────────────────────── .account-tab--disabled { opacity: 0.45; pointer-events: none; cursor: default; } // ─── Content ───────────────────────────────────────────────────────────────── .report-content { flex: 1; max-width: 1200px; width: 100%; margin: $space-6 auto; padding: 0 $space-6; } // ─── Karte ─────────────────────────────────────────────────────────────────── .report-card { @include card; overflow: hidden; } // ─── Toolbar ───────────────────────────────────────────────────────────────── .report-toolbar { display: flex; align-items: center; justify-content: space-between; padding: $space-3 $space-5; border-bottom: 1px solid $color-border; } .report-toolbar__left { display: flex; align-items: center; gap: $space-6; } .report-toolbar__right { display: flex; align-items: center; gap: $space-2; } .report-toolbar__export { @include icon-btn(30px, $radius-sm); color: $color-text-light; svg { width: 18px; height: 18px; } &:hover { color: var(--color-primary); background: rgba(var(--color-primary-rgb), 0.08); } } .report-toolbar__separator { width: 1px; height: 18px; background: $color-border; margin: 0 $space-1; } .report-toolbar__action { display: inline-flex; align-items: center; gap: $space-2; font-size: $font-size-sm; font-weight: $font-weight-medium; color: var(--color-primary); cursor: pointer; text-decoration: none; svg { width: $icon-svg-size; height: $icon-svg-size; flex-shrink: 0; } &--disabled { color: $color-text-muted; pointer-events: none; cursor: default; } } // ─── Tabelle ───────────────────────────────────────────────────────────────── .report-table { width: 100%; } .report-table__head, .report-table__row { display: grid; grid-template-columns: 110px // Datum 140px // Kunde 130px // Projekt 120px // Leistung 140px // Benutzer 1fr // Bemerkung 80px // Stunden 100px // Umsatz 88px; // Aktionen align-items: center; border-bottom: 1px solid $color-border; padding: 0 $space-5; } .report-table__head { padding-top: $space-2; padding-bottom: $space-2; .report-table__cell { font-size: $font-size-xs; font-weight: $font-weight-bold; color: $color-text-base; text-transform: uppercase; letter-spacing: 0.03em; line-height: 1.3; } } .report-table__row { padding-top: $space-3; padding-bottom: $space-3; transition: background $transition-fast; &:hover { background: rgba(var(--color-primary-rgb), 0.05); .report-action-btn { opacity: 1; } } &--invoiced .report-table__cell { &--date, &--client, &--project, &--service, &--user, &--note, &--duration, &--revenue { color: $color-text-light; } } &--editing { background: rgba(var(--color-primary-rgb), 0.05); .report-table__cell--actions { visibility: hidden; } } &:last-child { border-bottom: none; } } .report-table__cell { font-size: $font-size-base; color: $color-text-base; padding-right: $space-3; line-height: 1.4; min-width: 0; &--duration, &--revenue { text-align: right; padding-right: $space-4; white-space: nowrap; font-variant-numeric: tabular-nums; } &--actions { display: flex; align-items: center; justify-content: flex-end; gap: $space-1; padding-right: 0; } &--note { color: $color-text-muted; font-size: $font-size-sm; @include text-truncate; } } .report-table__sort-icon { margin-left: 2px; font-size: $font-size-xs; } .report-table__summary { display: block; font-size: $font-size-xs; font-weight: $font-weight-regular; color: $color-text-muted; margin-top: 1px; } .report-table__empty { padding: $space-10 $space-5; text-align: center; color: $color-text-muted; font-size: $font-size-sm; } // ─── Aktions-Buttons (Edit / Delete) ───────────────────────────────────────── .report-action-btn { @include icon-btn(26px, $radius-sm); opacity: 0; color: $color-text-light; svg { width: $icon-svg-size; height: $icon-svg-size; } &:hover { color: $color-text-muted; background: rgba($color-text-dark, 0.06); } &--delete:hover { color: $color-error; background: rgba($color-error, 0.08); } } // ─── Schloss-Button ────────────────────────────────────────────────────────── .report-lock { @include icon-btn(24px, $radius-sm); color: $color-text-light; svg { width: $icon-svg-size; height: $icon-svg-size; } &:hover { color: $color-text-muted; background: rgba($color-text-dark, 0.06); } &--invoiced { color: $color-text-dark; &:hover { color: $color-text-dark; background: rgba($color-text-dark, 0.06); } } } // ─── Inline-Edit-Formular ──────────────────────────────────────────────────── .report-row__edit { grid-column: 1 / -1; padding: $space-4 0; background: rgba(var(--color-primary-rgb), 0.04); border-top: 1px solid $color-border; } .report-row__edit-grid { display: grid; grid-template-columns: 140px 1fr; gap: $space-3 $space-5; align-items: center; max-width: 680px; } .report-row__edit-label { @include form-label; } .report-row__edit-field { display: flex; align-items: center; gap: $space-2; &--selects { gap: $space-3; .select { flex: 1; min-width: 160px; } } .textarea { width: 100%; } } .report-row__edit-actions { grid-column: 2; display: flex; gap: $space-3; padding-top: $space-2; } // ─── Pagination-Footer ──────────────────────────────────────────────────────── .report-pagination { display: grid; grid-template-columns: 1fr 80px 100px 88px; align-items: center; padding: $space-3 $space-5; border-top: 1px solid $color-border; font-size: $font-size-sm; color: $color-text-muted; } .report-pagination__limits { display: flex; align-items: center; gap: $space-2; a { color: var(--color-primary); text-decoration: underline; cursor: pointer; &:hover { color: var(--color-primary-dark); } } strong { color: $color-text-dark; font-weight: $font-weight-bold; } } .report-pagination__duration, .report-pagination__revenue { text-align: right; padding-right: $space-4; font-weight: $font-weight-medium; color: $color-text-muted; font-variant-numeric: tabular-nums; white-space: nowrap; } .report-pagination__lock-spacer { // Platzhalter – hält Spalten-Ausrichtung mit der Tabelle } // ─── Toolbar-Button (klickbar) ──────────────────────────────────────────────── button.report-toolbar__action { background: none; border: none; cursor: pointer; font-family: $font-family-base; padding: $space-1 $space-3; margin: (-$space-1) (-$space-3); border-radius: $radius-pill; transition: background $transition-fast, color $transition-fast; &--active { background: $color-text-dark; color: $color-white; svg path, svg circle { stroke: $color-white; } } } // ─── Filter-Panel ───────────────────────────────────────────────────────────── .report-filter { background: $color-card; border-bottom: 1px solid $color-border; padding: $space-5 $space-5 0; } .report-filter__body { display: flex; gap: $space-10; } .report-filter__col { flex: 1; min-width: 0; max-width: 66%; } .report-filter__heading { font-size: $font-size-xs; font-weight: $font-weight-bold; color: $color-text-muted; text-transform: uppercase; letter-spacing: 0.06em; margin-bottom: $space-3; } // ─── Filter-Row ─────────────────────────────────────────────────────────────── .filter-row { display: grid; grid-template-columns: 160px 1fr; align-items: flex-start; gap: $space-3; padding: $space-2 0; border-bottom: 1px solid rgba($color-border, 0.6); &:last-child { border-bottom: none; } &--inactive { .filter-select, .filter-note-input, .filter-period-select, .filter-radio { opacity: 0.5; } .filter-select, .filter-note-input, .filter-period-select { color: $color-text-muted; } .filter-row__add, .filter-neg { opacity: 0.4; } .filter-neg { pointer-events: none; } } } .filter-row__label { display: flex; align-items: center; gap: $space-2; cursor: pointer; font-size: $font-size-sm; color: $color-text-base; padding-top: 7px; user-select: none; } .filter-row__checkbox { width: 14px; height: 14px; cursor: pointer; flex-shrink: 0; accent-color: var(--color-primary); } // ─── Body: Controls + Meta nebeneinander ──────────────────────────────────── .filter-row__body { display: flex; align-items: flex-start; gap: $space-3; } .filter-row__controls { display: flex; flex-direction: column; gap: $space-2; min-width: 0; flex: 1; } .filter-row__control-group { display: flex; align-items: center; gap: $space-2; .filter-select, .filter-note-input { width: 300px; max-width: 100%; } &--period { flex-direction: column; align-items: flex-start; gap: $space-2; } &--radio { padding-top: 7px; gap: $space-4; } } // ─── Meta: Plus-Button + Negativfilter ────────────────────────────────────── .filter-row__meta { display: flex; align-items: center; gap: $space-3; padding-top: 7px; flex-shrink: 0; white-space: nowrap; &--no-add { padding-left: calc(22px + #{$space-3}); } } // ─── Plus- und Minus-Button ─────────────────────────────────────────────────── .filter-row__add { @include icon-btn(22px, $radius-sm); border: 1px solid $color-input-border; background: $color-white; font-size: $font-size-md; line-height: 1; color: $color-text-muted; &:hover { border-color: var(--color-primary); color: var(--color-primary); } } .filter-row__remove { @include icon-btn(20px, $radius-sm); font-size: $font-size-md; line-height: 1; color: $color-text-light; &:hover { color: $color-error; background: rgba($color-error, 0.08); } } // ─── Zeitraum: Custom-Datumsfelder ─────────────────────────────────────────── .filter-custom-dates { display: flex; flex-direction: column; gap: $space-2; margin-top: $space-2; } .filter-date-group { display: flex; align-items: center; gap: $space-2; } .filter-date-label { font-size: $font-size-sm; color: $color-text-muted; width: 26px; flex-shrink: 0; } .filter-date-select { width: auto; display: inline-block; &--sm { padding-right: $space-6; min-width: 60px; } &--month { padding-right: $space-6; min-width: 100px; } } // ─── Radio-Filter (Abgeschlossen?) ──────────────────────────────────────────── .filter-radio { display: inline-flex; align-items: center; gap: $space-1; font-size: $font-size-sm; color: $color-text-base; cursor: pointer; user-select: none; accent-color: var(--color-primary); } // ─── Filter-Footer ──────────────────────────────────────────────────────────── .report-filter__footer { display: flex; align-items: center; gap: $space-4; padding: $space-4 0; } .filter-footer__link { background: none; border: none; padding: 0; cursor: pointer; font-family: $font-family-base; font-size: $font-size-sm; color: $color-text-muted; text-decoration: underline; text-underline-offset: 2px; transition: color $transition-fast; &:hover { color: $color-text-base; } } // ─── Negativfilter-Checkbox ─────────────────────────────────────────────────── .filter-neg { display: inline-flex; align-items: center; gap: $space-1; font-size: $font-size-sm; color: $color-text-muted; cursor: pointer; user-select: none; white-space: nowrap; input[type="checkbox"] { width: 13px; height: 13px; cursor: pointer; accent-color: $color-warning; flex-shrink: 0; } &:has(input:checked) { color: $color-warning; font-weight: $font-weight-medium; } }