@use '../atoms/variables' as *; // ─── Page ───────────────────────────────────────────────────────────────────── .report-page { min-height: 100vh; background: $color-bg; display: flex; flex-direction: column; } // ─── Header ────────────────────────────────────────────────────────────────── .report-header { background: linear-gradient(135deg, $color-header-from 0%, $color-header-to 100%); padding: $space-4 $space-6; display: flex; align-items: center; justify-content: space-between; gap: $space-6; box-shadow: $shadow-header; } .report-header__title { font-size: $font-size-xl; font-weight: $font-weight-bold; color: $color-white; } .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: rgba($color-white, 0.9); background: rgba($color-white, 0.15); border: 1px solid rgba($color-white, 0.25); 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 { background: $color-card-white; border-radius: $radius-lg; box-shadow: $shadow-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__action { display: inline-flex; align-items: center; gap: $space-2; font-size: $font-size-sm; font-weight: $font-weight-medium; color: $color-primary; cursor: pointer; text-decoration: none; svg { width: 14px; height: 14px; 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 (Edit + Delete + Schloss) align-items: center; border-bottom: 1px solid $color-border; padding: 0 $space-5; } .report-table__head { padding-top: $space-2; padding-bottom: $space-2; background: transparent; .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($color-primary, 0.035); } &:hover .report-action-btn { opacity: 1; } &--invoiced { .report-table__cell--date { color: $color-text-light; } .report-table__cell--client { color: $color-text-light; } .report-table__cell--project { color: $color-text-light; } .report-table__cell--service { color: $color-text-light; } .report-table__cell--user { color: $color-text-light; } .report-table__cell--note { color: $color-text-light; } .report-table__cell--duration { color: $color-text-light; } .report-table__cell--revenue { color: $color-text-light; } } &--editing { background: rgba($color-primary, 0.04); .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; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } } .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 { display: inline-flex; align-items: center; justify-content: center; width: 26px; height: 26px; border: none; background: none; cursor: pointer; color: $color-text-light; border-radius: $radius-sm; opacity: 0; transition: opacity $transition-fast, color $transition-fast, background $transition-fast; svg { width: 14px; height: 14px; } &: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 { display: inline-flex; align-items: center; justify-content: center; width: 24px; height: 24px; border: none; background: none; cursor: pointer; color: $color-text-light; border-radius: $radius-sm; transition: color $transition-fast, background $transition-fast; svg { width: 14px; height: 14px; } &: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($color-primary, 0.025); 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 { font-size: $font-size-sm; color: $color-text-muted; text-align: right; padding-right: $space-2; white-space: nowrap; } .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: $color-primary; text-decoration: underline; cursor: pointer; &:hover { color: $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 für die Aktions-Spalte – hält die Ausrichtung } // ─── 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; } .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 28px; 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; } // Ausgegraut wenn inaktiv – aber klickbar! &--inactive { .filter-select, .filter-note-input, .filter-period-select { opacity: 0.5; color: $color-text-muted; } .filter-row__add { opacity: 0.4; } .filter-radio { opacity: 0.5; } } } .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; // optisch mit den Selects ausrichten user-select: none; } .filter-row__checkbox { width: 14px; height: 14px; cursor: pointer; flex-shrink: 0; accent-color: $color-primary; } .filter-row__controls { display: flex; flex-direction: column; gap: $space-2; min-width: 0; } .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; } } // ─── Plus- und Minus-Button ─────────────────────────────────────────────────── .filter-row__add { width: 22px; height: 22px; margin-top: 7px; border: 1px solid $color-input-border; background: $color-white; border-radius: $radius-sm; cursor: pointer; font-size: $font-size-md; line-height: 1; color: $color-text-muted; display: flex; align-items: center; justify-content: center; flex-shrink: 0; transition: border-color $transition-fast, color $transition-fast; &:hover { border-color: $color-primary; color: $color-primary; } } .filter-row__remove { width: 20px; height: 20px; border: none; background: none; cursor: pointer; font-size: $font-size-md; line-height: 1; color: $color-text-light; display: flex; align-items: center; justify-content: center; border-radius: $radius-sm; flex-shrink: 0; transition: color $transition-fast, background $transition-fast; &: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: $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; } }