Browse Source

Redesign von Tina übernommen

gc-server3 4 weeks ago
parent
commit
878e4b1e93

+ 1181 - 0
static/assets/css/redesign.css

@@ -0,0 +1,1181 @@
+:root {
+    --gc-bg: #f4f6fb;
+    --gc-surface: #ffffff;
+    --gc-surface-soft: #f8fafc;
+    --gc-border: #e5e7eb;
+    --gc-text: #111827;
+    --gc-muted: #6b7280;
+    --gc-primary: #475569;
+    --gc-primary-dark: #334155;
+    --gc-primary-soft: #eef2f7;
+    --gc-danger: #dc2626;
+    --gc-warning: #d97706;
+    --gc-success: #16a34a;
+    --gc-radius-sm: 10px;
+    --gc-radius-md: 16px;
+    --gc-radius-lg: 22px;
+    --gc-shadow-sm: 0 4px 14px rgba(15, 23, 42, .06);
+    --gc-shadow-md: 0 18px 45px rgba(15, 23, 42, .10);
+    --gc-topbar-height: 72px;
+  }
+  
+  /* Basis */
+  
+  html,
+  body {
+    min-height: 100%;
+    background: var(--gc-bg);
+    color: var(--gc-text);
+  }
+  
+  body {
+    overflow-y: auto;
+    overflow-x: auto;
+    font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
+  }
+  
+  /* App Shell */
+  
+  .gc-shell {
+    height: 100vh;
+    display: flex;
+    flex-direction: column;
+    background:
+      radial-gradient(circle at top left, rgba(100, 116, 139, .10), transparent 34rem),
+      linear-gradient(180deg, #f8fafc 0%, #eef2f7 100%);
+  }
+  
+  .gc-topbar {
+    height: var(--gc-topbar-height);
+    flex: 0 0 var(--gc-topbar-height);
+    display: flex;
+    align-items: center;
+    padding: 0 1.5rem;
+    background: rgba(255, 255, 255, .86);
+    backdrop-filter: blur(18px);
+    border-bottom: 1px solid rgba(226, 232, 240, .9);
+    z-index: 1000;
+  }
+  
+  .gc-logo {
+    height: 38px;
+    width: auto;
+    object-fit: contain;
+  }
+  
+  .gc-brand {
+    font-size: 1rem;
+    font-weight: 800;
+    letter-spacing: -.02em;
+    color: var(--gc-text);
+  }
+  
+  .gc-nav-link {
+    display: inline-flex;
+    align-items: center;
+    min-height: 38px;
+    padding: .45rem .8rem;
+    border-radius: 999px;
+    color: var(--gc-muted);
+    font-weight: 700;
+    text-decoration: none;
+    transition: all .18s ease;
+  }
+  
+  .gc-nav-link:hover {
+    color: #334155;
+    background: #eef2f7;
+    text-decoration: none;
+  }
+  
+  .gc-page {
+    flex: 1;
+    width: 100%;
+    max-width: 1840px;
+    margin: 0 auto;
+    padding: 1.25rem;
+    overflow: hidden;
+    display: flex;
+    flex-direction: column;
+    gap: 1rem;
+  }
+  
+  /* Cards */
+  
+  .gc-card {
+    background: rgba(255, 255, 255, .95);
+    border: 1px solid rgba(226, 232, 240, .95);
+    border-radius: var(--gc-radius-lg);
+    box-shadow: var(--gc-shadow-sm);
+  }
+  
+  /* Filter */
+  
+  .gc-filterbar {
+    padding: 1rem;
+  }
+  
+  .gc-filterbar .form-label {
+    font-size: .74rem;
+    font-weight: 800;
+    text-transform: uppercase;
+    color: var(--gc-muted);
+    letter-spacing: .04em;
+  }
+  
+  .gc-filterbar .form-control,
+  .gc-filterbar .form-select {
+    border-radius: 12px;
+    border-color: var(--gc-border);
+    font-weight: 600;
+  }
+  
+  .gc-filterbar .form-control:focus,
+  .gc-filterbar .form-select:focus {
+    border-color: #94a3b8;
+    box-shadow: 0 0 0 .2rem rgba(100, 116, 139, .12);
+  }
+  
+  /* Tabelle */
+  
+  .gc-table-wrap {
+    flex: 1;
+    overflow: auto;
+    border-radius: var(--gc-radius-lg);
+    padding-top: 0 !important;
+  }
+  
+  .gc-table {
+    width: 100%;
+    min-width: 1450px;
+    margin: 0 !important;
+    border-collapse: separate !important;
+    border-spacing: 0 !important;
+    table-layout: auto !important;
+    font-size: .88rem;
+  }
+  
+  .gc-table thead {
+    position: static !important;
+    z-index: auto !important;
+  }
+  
+  .gc-table thead th {
+    position: static !important;
+    top: auto !important;
+    z-index: auto !important;
+    background: #f3f4f6 !important;
+    color: #667085;
+    font-size: .7rem;
+    font-weight: 900;
+    text-transform: uppercase;
+    letter-spacing: .055em;
+    padding: .85rem .8rem !important;
+    border-top: 0 !important;
+    border-bottom: 1px solid #d7dde5 !important;
+    box-shadow: none !important;
+    white-space: nowrap;
+    vertical-align: bottom;
+  }
+  
+  .gc-table tbody td {
+    background: #ffffff;
+    padding: .85rem .8rem !important;
+    border-top: 1px solid #edf2f7;
+    vertical-align: top;
+  }
+  
+  .gc-table tbody tr {
+    transition: background .15s ease;
+  }
+  
+  .gc-table tbody tr:hover td {
+    background: #fafbfc;
+  }
+  
+  /* Spalten */
+  
+  .gc-table th:nth-child(2),
+  .gc-table td:nth-child(2) {
+    width: 120px;
+    white-space: normal !important;
+  }
+  
+  .gc-table th:nth-child(3),
+  .gc-table td:nth-child(3) {
+    padding-left: 14px !important;
+  }
+  
+  .gc-table th:nth-child(8),
+  .gc-table td:nth-child(8),
+  .gc-table td:nth-child(8) *,
+  .gc-table th:nth-child(9),
+  .gc-table td:nth-child(9),
+  .gc-table td:nth-child(9) * {
+    white-space: nowrap !important;
+  }
+  
+  /* Tabellenlinks neutral/grau */
+  
+  .gc-table a {
+    color: #4b5563 !important;
+    text-decoration: none;
+    font-weight: 600;
+  }
+  
+  .gc-table a:hover {
+    color: #1f2937 !important;
+    text-decoration: underline;
+  }
+  
+  /* Typografie */
+  
+  .gc-title {
+    color: var(--gc-text);
+    font-weight: 750;
+    line-height: 1.25;
+  }
+  
+  .gc-subtitle {
+    margin-top: .15rem;
+    color: var(--gc-muted);
+    font-size: .78rem;
+    line-height: 1.35;
+  }
+  
+  .gc-main-cell {
+    min-width: 290px;
+  }
+  
+  .gc-money {
+    font-variant-numeric: tabular-nums;
+    font-weight: 400;
+    white-space: nowrap;
+  }
+  /* Offen / Kunde ges. weiterhin fett */
+.gc-table td:nth-child(8) .gc-money {
+    font-weight: 800 !important;
+  }
+  
+  /* Buttons */
+  
+  .gc-action-btn {
+    border-radius: 10px;
+    font-weight: 700;
+    background: #7b8ea3 !important;
+    border-color: #7b8ea3 !important;
+    color: #ffffff !important;
+    box-shadow: none !important;
+  }
+  
+  .gc-action-btn:hover {
+    background: #66788c !important;
+    border-color: #66788c !important;
+    color: #ffffff !important;
+  }
+  
+  /* Badges */
+  
+  .gc-badge {
+    display: inline-flex;
+    align-items: center;
+    justify-content: center;
+    gap: .3rem;
+    min-height: 24px;
+    padding: .22rem .55rem;
+    border-radius: 999px;
+    font-size: .7rem;
+    font-weight: 800;
+    border: 1px solid transparent;
+    white-space: nowrap;
+  }
+  
+  .gc-badge-info {
+    background: #edf2f7;
+    color: #475569;
+    border-color: #dbe3ee;
+  }
+  
+  .gc-badge-warning {
+    background: #f6ecd2;
+    color: #8a6a1f;
+    border-color: #ead9a7;
+  }
+  
+  .gc-badge-danger {
+    background: #fee2e2;
+    color: #991b1b;
+    border-color: #fecaca;
+  }
+  
+  .gc-badge-success {
+    background: #dcfce7;
+    color: #166534;
+    border-color: #bbf7d0;
+  }
+  
+  /* Mahnstufen */
+  
+  .gc-mahnstufe-1 {
+    background: #fee2e2 !important;
+    color: #991b1b !important;
+    border-color: #fecaca !important;
+  }
+  
+  .gc-mahnstufe-2 {
+    background: #fecaca !important;
+    color: #7f1d1d !important;
+    border-color: #fca5a5 !important;
+  }
+  
+  .gc-mahnstufe-3 {
+    background: #dc2626 !important;
+    color: #ffffff !important;
+    border-color: #991b1b !important;
+  }
+  
+  /* Wiedervorlage */
+  
+  .gc-wv-overdue {
+    background: #fee2e2 !important;
+    color: #991b1b !important;
+    border-color: #fecaca !important;
+  }
+  
+  .gc-wv-today {
+    background: #f6ecd2 !important;
+    color: #8a6a1f !important;
+    border-color: #ead9a7 !important;
+  }
+  
+  .gc-wv-future {
+    background: #dcfce7 !important;
+    color: #166534 !important;
+    border-color: #bbf7d0 !important;
+  }
+  
+  /* Infinite Scroll */
+  
+  .gc-load-sentinel,
+  .gc-load-sentinel td {
+    height: 1px !important;
+    padding: 0 !important;
+    border: 0 !important;
+    background: transparent !important;
+  }
+  
+  /* Detailseite Layout */
+  
+  .gc-case-header,
+  .gc-panel,
+  .gc-case-summary {
+    padding: 1.25rem;
+  }
+  
+  .gc-case-summary .gc-panel-title {
+    margin-bottom: 1rem;
+    font-size: .85rem;
+    font-weight: 800;
+    color: #334155;
+  }
+  
+  .gc-summary-section {
+    margin-bottom: 1rem;
+  }
+  
+  .gc-summary-label {
+    font-size: .72rem;
+    font-weight: 800;
+    color: #64748b;
+    text-transform: uppercase;
+    letter-spacing: .05em;
+    margin-bottom: .15rem;
+  }
+  
+  .gc-summary-main {
+    font-size: .98rem;
+    font-weight: 700;
+    color: #172033;
+    line-height: 1.25;
+  }
+  
+  .gc-summary-sub {
+    font-size: .85rem;
+    color: #64748b;
+    margin-top: .15rem;
+  }
+  
+  .gc-summary-grid {
+    display: grid;
+    grid-template-columns: 1fr 1fr;
+    gap: .75rem;
+    margin-bottom: 1rem;
+  }
+  
+  .gc-summary-value {
+    font-size: .98rem;
+    font-weight: 700;
+    color: #172033;
+  }
+  
+  .gc-case-summary hr {
+    margin: 1.25rem 0;
+    border-color: #e6eaf0;
+    opacity: 1;
+  }
+  
+  .gc-detail-grid {
+    display: grid !important;
+    grid-template-columns: 320px minmax(600px, 1fr) 360px !important;
+    gap: 1rem !important;
+    align-items: start !important;
+    width: 100% !important;
+  }
+  
+  .gc-detail-grid > .gc-case-summary {
+    grid-column: 1 !important;
+    width: 100% !important;
+  }
+  
+  .gc-detail-grid > .gc-detail-main {
+    grid-column: 2 !important;
+    min-width: 0 !important;
+    width: 100% !important;
+  }
+  
+  .gc-detail-grid > .gc-action-panel {
+    grid-column: 3 !important;
+    width: 100% !important;
+    position: sticky !important;
+    top: calc(var(--gc-topbar-height) + 1rem) !important;
+  }
+  
+  .gc-accordion-clean .accordion-item {
+    border: 1px solid var(--gc-border);
+    border-radius: var(--gc-radius-md) !important;
+    overflow: hidden;
+    margin-bottom: .75rem;
+  }
+  
+  /* Chat / Timeline */
+  
+  .gc-detail-main .chat-container {
+    height: calc(100vh - var(--gc-topbar-height) - 15rem);
+    max-height: 620px;
+    min-height: 420px;
+    display: flex;
+    flex-direction: column;
+    background: #ffffff;
+    border: 1px solid rgba(226, 232, 240, .95);
+    border-radius: var(--gc-radius-lg);
+    box-shadow: var(--gc-shadow-sm);
+    overflow: hidden;
+  }
+  
+  .chat-container .header {
+    flex: 0 0 auto;
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+    padding: .85rem 1rem;
+    background: #ffffff;
+    border-bottom: 1px solid #e5e7eb;
+  }
+  
+  .chat-container .header-left {
+    display: flex;
+    align-items: center;
+    gap: .75rem;
+    min-width: 0;
+  }
+  
+  .chat-container .avatar {
+    width: 32px;
+    height: 32px;
+    flex: 0 0 32px;
+    border-radius: 999px;
+    background: #e5e7eb;
+    color: #ffffff;
+    display: inline-flex;
+    align-items: center;
+    justify-content: center;
+    font-size: .72rem;
+    font-weight: 900;
+    overflow: hidden;
+  }
+  
+  .chat-container .course-title {
+    font-size: .95rem;
+    font-weight: 850;
+    color: #111827;
+    line-height: 1.25;
+    white-space: nowrap;
+    overflow: hidden;
+    text-overflow: ellipsis;
+  }
+  
+  .chat-container .course-participants {
+    margin-top: .1rem;
+    font-size: .76rem;
+    color: #64748b;
+  }
+  
+  .chat-container .header-actions {
+    display: flex;
+    align-items: center;
+    gap: .35rem;
+  }
+  
+  .chat-container .icon-button {
+    width: 32px;
+    height: 32px;
+    border: 1px solid #e5e7eb;
+    border-radius: 10px;
+    background: #f8fafc;
+    color: #64748b;
+    display: inline-flex;
+    align-items: center;
+    justify-content: center;
+  }
+  
+  .chat-container .icon-button:hover {
+    background: #eef2f7;
+    color: #334155;
+    border-color: #cbd5e1;
+  }
+  
+  .chat-container .tabs {
+    flex: 0 0 auto;
+    display: flex;
+    gap: .35rem;
+    padding: .65rem .85rem;
+    background: #f8fafc;
+    border-bottom: 1px solid #e5e7eb;
+    overflow-x: auto;
+  }
+  
+  .chat-container .tab {
+    padding: .38rem .65rem;
+    border-radius: 999px;
+    font-size: .75rem;
+    font-weight: 800;
+    color: #64748b;
+    white-space: nowrap;
+  }
+  
+  .chat-container .tab.active {
+    background: #64748b;
+    color: #ffffff;
+  }
+  
+  .chat-container .chat-content {
+    flex: 1;
+    min-height: 0;
+    overflow-y: auto;
+    padding: 1rem;
+    background: linear-gradient(180deg, #ffffff 0%, #f8fafc 100%);
+  }
+  
+  .chat-container .date-divider {
+    display: flex;
+    align-items: center;
+    gap: .75rem;
+    margin: .4rem 0 1rem;
+  }
+  
+  .chat-container .divider-line {
+    flex: 1;
+    height: 1px;
+    background: #e5e7eb;
+  }
+  
+  .chat-container .divider-text {
+    font-size: .7rem;
+    font-weight: 850;
+    color: #64748b;
+    text-transform: uppercase;
+    letter-spacing: .04em;
+  }
+  
+  .chat-container .message {
+    max-width: 78%;
+    margin-bottom: .85rem;
+  }
+  
+  .chat-container .message.teacher,
+  .chat-container .message.Fibu,
+  .chat-container .message.fibu {
+    margin-right: auto;
+  }
+  
+  .chat-container .message.student,
+  .chat-container .message.Abteilung,
+  .chat-container .message.abteilung {
+    margin-left: auto;
+  }
+  
+  .chat-container .message-header {
+    display: flex;
+    align-items: center;
+    gap: .45rem;
+    margin-bottom: .3rem;
+  }
+  
+  .chat-container .sender-name {
+    font-size: .76rem;
+    font-weight: 850;
+    color: #334155;
+  }
+  
+  .chat-container .timestamp {
+    font-size: .7rem;
+    color: #94a3b8;
+    margin-left: .25rem;
+  }
+  
+  .chat-container .message-bubble {
+    display: inline-block;
+    padding: .65rem .85rem;
+    border-radius: 15px;
+    font-size: .86rem;
+    line-height: 1.42;
+    background: #f1f5f9;
+    color: #172033;
+    border: 1px solid #e2e8f0;
+    box-shadow: 0 3px 10px rgba(15, 23, 42, .04);
+  }
+  
+  .chat-container .message.student .message-bubble,
+  .chat-container .message.Abteilung .message-bubble,
+  .chat-container .message.abteilung .message-bubble {
+    background: #f8fafc;
+    color: #172033;
+    border-color: #cbd5e1;
+  }
+  
+  .chat-container .message.teacher .message-bubble,
+  .chat-container .message.Fibu .message-bubble,
+  .chat-container .message.fibu .message-bubble {
+    background: #ffffff;
+    color: #172033;
+    border-color: #e2e8f0;
+  }
+  
+  .chat-container .input-area {
+    flex: 0 0 auto;
+    min-height: 46px;
+    padding: .6rem .85rem;
+    background: #ffffff;
+    border-top: 1px solid #e5e7eb;
+  }
+  
+  .chat-container .toolbar {
+    display: flex;
+    align-items: center;
+    gap: .5rem;
+  }
+  
+  .chat-container .tool-button {
+    width: 32px;
+    height: 32px;
+    border-radius: 10px;
+    border: 1px dashed #cbd5e1;
+    background: #f8fafc;
+  }
+  
+  /* Responsive */
+  
+  @media (max-width: 1200px) {
+    .gc-detail-grid {
+      grid-template-columns: 1fr !important;
+    }
+  
+    .gc-detail-grid > .gc-case-summary,
+    .gc-detail-grid > .gc-detail-main,
+    .gc-detail-grid > .gc-action-panel {
+      grid-column: auto !important;
+    }
+  
+    .gc-detail-grid > .gc-action-panel {
+      position: static !important;
+    }
+  
+    .gc-detail-main .chat-container {
+      height: auto;
+      min-height: 520px;
+      max-height: none;
+    }
+  }
+  
+  @media (max-width: 992px) {
+    body {
+      overflow: auto;
+    }
+  
+    .gc-shell {
+      min-height: 100vh;
+      height: auto;
+    }
+  
+    .gc-page {
+      overflow: visible;
+    }
+  
+    .gc-table-wrap {
+      overflow-x: auto;
+    }
+  }
+  /* =========================================================
+   HAUPTSEITE: SINNVOLLERE SPALTENBREITEN
+========================================================= */
+
+.gc-table {
+    min-width: 1380px;
+  }
+  
+  /* Aktion */
+  .gc-table th:nth-child(1),
+  .gc-table td:nth-child(1) {
+    width: 54px;
+  }
+  
+  /* Filiale / Bereich */
+  .gc-table th:nth-child(2),
+  .gc-table td:nth-child(2) {
+    width: 115px;
+    max-width: 115px;
+    white-space: normal !important;
+  }
+  
+  /* Kunde */
+  .gc-table th:nth-child(3),
+  .gc-table td:nth-child(3) {
+    width: 230px;
+    min-width: 230px;
+    padding-left: 8px !important;
+  }
+  
+  /* Verursacher */
+  .gc-table th:nth-child(4),
+  .gc-table td:nth-child(4) {
+    width: 145px;
+    min-width: 145px;
+    padding-left: 6px !important;
+  }
+  
+  /* RG-Nr. */
+  .gc-table th:nth-child(5),
+  .gc-table td:nth-child(5) {
+    width: 118px;
+  }
+  
+  /* RG-Datum / Fällig */
+  .gc-table th:nth-child(6),
+  .gc-table td:nth-child(6) {
+    width: 120px;
+  }
+  
+  /* RG-Betrag */
+  .gc-table th:nth-child(7),
+  .gc-table td:nth-child(7) {
+    width: 105px;
+  }
+  
+  /* offen / Kunde ges. */
+  .gc-table th:nth-child(8),
+  .gc-table td:nth-child(8) {
+    width: 155px;
+  }
+  
+  /* Mahnstufe / Staffel */
+  .gc-table th:nth-child(9),
+  .gc-table td:nth-child(9) {
+    width: 125px;
+  }
+  
+  /* Abw. */
+  .gc-table th:nth-child(10),
+  .gc-table td:nth-child(10) {
+    width: 80px;
+  }
+  
+  /* Kommentar Fibu */
+  .gc-table th:nth-child(11),
+  .gc-table td:nth-child(11) {
+    width: 165px;
+  }
+  
+  /* Kommentar Abteilung */
+  .gc-table th:nth-child(12),
+  .gc-table td:nth-child(12) {
+    width: 165px;
+  }
+  
+  /* Wiedervorlage */
+  .gc-table th:nth-child(13),
+  .gc-table td:nth-child(13) {
+    width: 120px;
+  }
+  
+  /* Abw. wieder im alten Gelb */
+  .gc-table td:nth-child(10) .gc-badge-warning {
+    background: #fef3c7 !important;
+    color: #92400e !important;
+    border-color: #fde68a !important;
+    text-align: left;
+  }
+  /* =========================================================
+   EDIT BUTTON LINKS HELLER
+========================================================= */
+
+.gc-table td:first-child button,
+.gc-table td:first-child .btn,
+.gc-table td:first-child a {
+  width: 34px;
+  height: 34px;
+  border-radius: 12px !important;
+  border: 1px solid #d6dee8 !important;
+
+  background: linear-gradient(
+    180deg,
+    #9db0c2 0%,
+    #879caf 100%
+  ) !important;
+
+  color: #ffffff !important;
+
+  box-shadow:
+    inset 0 1px 0 rgba(255,255,255,.28),
+    0 2px 6px rgba(15,23,42,.08);
+
+  transition: all .18s ease;
+}
+
+/* Hover */
+.gc-table td:first-child button:hover,
+.gc-table td:first-child .btn:hover,
+.gc-table td:first-child a:hover {
+  background: linear-gradient(
+    180deg,
+    #a8b9c9 0%,
+    #92a6b8 100%
+  ) !important;
+
+  transform: translateY(-1px);
+}
+
+/* Icon */
+.gc-table td:first-child i,
+.gc-table td:first-child svg {
+  color: #ffffff !important;
+  font-size: .9rem;
+}
+/* =========================================================
+   DETAILSEITE: CHATVERLAUF OPTISCH AUFWERTEN
+========================================================= */
+
+.chat-container {
+    background: #ffffff !important;
+    border-radius: 22px !important;
+    overflow: hidden;
+  }
+  
+  .chat-container .chat-content {
+    background:
+      radial-gradient(circle at top left, rgba(148, 163, 184, .16), transparent 22rem),
+      linear-gradient(180deg, #f8fafc 0%, #f1f5f9 100%) !important;
+    padding: 1.25rem 1.5rem !important;
+  }
+  
+  .chat-container .date-divider {
+    margin: 1.25rem 0 1.5rem !important;
+  }
+  
+  .chat-container .divider-line {
+    background: #cbd5e1 !important;
+  }
+  
+  .chat-container .divider-text {
+    color: #64748b !important;
+    font-weight: 900 !important;
+    font-size: .76rem !important;
+  }
+  
+  .chat-container .message {
+    margin-bottom: 1.15rem !important;
+  }
+  
+  .chat-container .message-header {
+    margin-bottom: .4rem !important;
+  }
+  
+  .chat-container .message-header .avatar {
+    width: 34px !important;
+    height: 34px !important;
+    min-width: 34px !important;
+    background: linear-gradient(180deg, #cbd5e1 0%, #94a3b8 100%) !important;
+    color: #ffffff !important;
+    border: 2px solid #ffffff !important;
+    box-shadow: 0 3px 10px rgba(15, 23, 42, .10) !important;
+    font-size: .68rem !important;
+    text-transform: uppercase;
+  }
+  
+  .chat-container .sender-name {
+    color: #172033 !important;
+    font-weight: 850 !important;
+    font-size: .86rem !important;
+  }
+  
+  .chat-container .timestamp {
+    color: #94a3b8 !important;
+    font-size: .72rem !important;
+  }
+  
+  .chat-container .message-bubble {
+    background: #ffffff !important;
+    color: #1e293b !important;
+    border: 1px solid #dbe3ee !important;
+    border-radius: 16px 16px 16px 6px !important;
+    padding: .72rem .95rem !important;
+    box-shadow: 0 4px 14px rgba(15, 23, 42, .06) !important;
+    line-height: 1.45 !important;
+  }
+  
+  .chat-container .message-bubble:hover {
+    border-color: #cbd5e1 !important;
+    box-shadow: 0 8px 22px rgba(15, 23, 42, .09) !important;
+  }
+  
+  /* Nachrichten rechts / Abteilung etwas anders einfärben */
+  .chat-container .message.student .message-bubble,
+  .chat-container .message.Abteilung .message-bubble,
+  .chat-container .message.abteilung .message-bubble {
+    background: #f8fafc;
+    border-color: #e2e8f0;
+    border-radius: 16px 16px 6px 16px !important;
+  }
+  
+  /* Fibu / Standard links */
+  .chat-container .message.teacher .message-bubble,
+  .chat-container .message.Fibu .message-bubble,
+  .chat-container .message.fibu .message-bubble {
+    background: #ffffff !important;
+  }
+  
+  /* Tabs schöner */
+  .chat-container .tabs {
+    background: #f8fafc !important;
+    border-bottom: 1px solid #e2e8f0 !important;
+  }
+  
+  .chat-container .tab {
+    color: #64748b !important;
+    font-weight: 850 !important;
+  }
+  
+  .chat-container .tab.active {
+    background: #64748b !important;
+    color: #ffffff !important;
+    box-shadow: 0 4px 10px rgba(15, 23, 42, .10) !important;
+  }
+  /* =========================================================
+   BUTTONS: KEIN ZEILENUMBRUCH
+========================================================= */
+
+.gc-action-btn,
+.gc-action-btn span,
+.gc-action-btn button,
+.btn {
+  white-space: nowrap !important;
+}
+/* =========================================================
+   RECHTE WORKFLOW-SPALTE:
+   KEINE ZEILENUMBRÜCHE
+========================================================= */
+
+.gc-action-panel button,
+.gc-action-panel .btn,
+.gc-action-panel .gc-badge,
+.gc-action-panel label,
+.gc-action-panel .form-label,
+.gc-action-panel .form-check-label,
+.gc-action-panel select,
+.gc-action-panel option {
+  white-space: nowrap !important;
+}
+
+/* Buttons breiter */
+.gc-action-panel .btn {
+  min-width: 150px;
+}
+
+/* Labels links etwas breiter */
+.gc-action-panel .row > div:first-child,
+.gc-action-panel .col-form-label {
+  min-width: 125px;
+}
+
+/* Eingabefelder sauber ausrichten */
+.gc-action-panel .form-control,
+.gc-action-panel .form-select {
+  min-width: 110px;
+}
+.gc-action-panel .btn:last-child {
+    min-width: auto !important;
+    width: auto !important;
+    padding: .45rem .8rem !important;
+    font-size: .92rem !important;
+  }
+
+  /* =========================================================
+   BETRAGS-BUTTON RECHTS – EDLER
+========================================================= */
+
+.gc-action-panel .btn-primary,
+.gc-action-panel .btn-success,
+.gc-action-panel .btn-purple {
+  background: linear-gradient(
+    180deg,
+    #64748b 0%,
+    #475569 100%
+  ) !important;
+
+  border: 1px solid #475569 !important;
+  color: #ffffff !important;
+
+  box-shadow:
+    0 4px 12px rgba(15,23,42,.12),
+    inset 0 1px 0 rgba(255,255,255,.12);
+
+  min-width: auto !important;
+  width: auto !important;
+
+  padding: .45rem .8rem !important;
+  font-size: .92rem !important;
+  border-radius: 10px !important;
+}
+
+/* Hover */
+.gc-action-panel .btn-primary:hover,
+.gc-action-panel .btn-success:hover,
+.gc-action-panel .btn-purple:hover {
+  background: linear-gradient(
+    180deg,
+    #718197 0%,
+    #526174 100%
+  ) !important;
+
+  transform: translateY(-1px);
+}
+
+/* =========================================================
+   DETAILSEITE: SEITE BEI AUFGEKLAPPTEN BOXEN SCROLLBAR
+========================================================= */
+
+body {
+    overflow-y: auto !important;
+    overflow-x: hidden !important;
+  }
+  
+  .gc-shell {
+    min-height: 100vh !important;
+    height: auto !important;
+  }
+  
+  .gc-page {
+    min-height: calc(100vh - var(--gc-topbar-height)) !important;
+    height: auto !important;
+    overflow: visible !important;
+  }
+  
+  .gc-detail-grid {
+    align-items: start !important;
+    overflow: visible !important;
+  }
+  
+  .gc-detail-main,
+  .gc-case-summary,
+  .gc-action-panel {
+    overflow: visible !important;
+  }
+  
+  /* Falls Accordion/Boxen innen abgeschnitten werden */
+  .accordion,
+  .accordion-item,
+  .accordion-collapse,
+  .accordion-body,
+  .collapse,
+  .show {
+    overflow: visible !important;
+  }
+  
+  /* Chat bleibt trotzdem intern scrollbar */
+  .gc-detail-main .chat-container {
+    overflow: hidden !important;
+  }
+  
+  .gc-detail-main .chat-content {
+    overflow-y: auto !important;
+  }
+
+/* =========================================================
+   DETAILSEITE – ALLE AUFKLAPPBAREN BOXEN WIE "MAHNUNGEN"
+   Inhalt bleibt in der Box, horizontaler Scroll erlaubt
+========================================================= */
+
+.gc-detail-main .accordion-item,
+.gc-detail-main .accordion-collapse,
+.gc-detail-main .accordion-body {
+  max-width: 100% !important;
+  overflow: hidden !important;
+}
+
+.gc-detail-main .accordion-body {
+  overflow-x: auto !important;
+  overflow-y: visible !important;
+  padding: 1rem !important;
+}
+
+/* Tabellen dürfen breiter sein, aber sprengen nicht mehr die Box */
+.gc-detail-main .accordion-body table {
+  width: max-content !important;
+  min-width: 100% !important;
+  max-width: none !important;
+  table-layout: auto !important;
+  white-space: nowrap;
+}
+
+/* Zellen kompakt */
+.gc-detail-main .accordion-body table th,
+.gc-detail-main .accordion-body table td {
+  padding: .55rem .65rem !important;
+  vertical-align: top !important;
+  white-space: nowrap;
+}
+
+/* Lange Beschreibungen dürfen umbrechen */
+.gc-detail-main .accordion-body table td:nth-child(4) {
+  white-space: normal !important;
+  min-width: 180px;
+  max-width: 260px;
+}
+
+/* Horizontaler Scroll optisch sauber */
+.gc-detail-main .accordion-body::-webkit-scrollbar {
+  height: 10px;
+}
+
+.gc-detail-main .accordion-body::-webkit-scrollbar-track {
+  background: #eef2f7;
+  border-radius: 999px;
+}
+
+.gc-detail-main .accordion-body::-webkit-scrollbar-thumb {
+  background: #cbd5e1;
+  border-radius: 999px;
+}
+
+.gc-detail-main .accordion-body::-webkit-scrollbar-thumb:hover {
+  background: #94a3b8;
+}

+ 10 - 15
templates/base/base.html

@@ -19,6 +19,7 @@
   <script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.8/dist/umd/popper.min.js"></script>
 
   <link href="/static/assets/css/main.css" rel="stylesheet">
+  <link href="/static/assets/css/redesign.css" rel="stylesheet">
 
   <!-- Favicon icon -->
   <link rel="icon" href="/static/assets/images/favicon.ico" type="image/x-icon">
@@ -135,14 +136,8 @@
         </ul>
       </div>
     </header>
-    <main role="main" class="container-xxl">
-      <div class="container-fluid px-6">
-        <img src="/static/assets/images/Reisacher.png">
-        <!--<strong>Forderungsmanagement</strong>-->
-      </div>
-      <div class="container-fluid px-6">
-        {% block content %}{% endblock %}
-      </div>
+    <main role="main" class="gc-page">
+      {% block content %}{% endblock %}
     </main>
   </div>
 
@@ -154,14 +149,14 @@
           Datensätze: {{ summary.Anzahl }}
         </div>
         <div class="col-sm-6">
-          Filter: 
-           {% for f in filter_config  %}
-  
-           {% if f.filter_type != 'hidden' and f.current_value != f.default_value %}
-            {{ f.text }} = '{{ f.current_value }}' |
-           {% endif %} 
+          Filter:
+          {% for f in filter_config %}
+
+          {% if f.filter_type != 'hidden' and f.current_value != f.default_value %}
+          {{ f.text }} = '{{ f.current_value }}' |
+          {% endif %}
 
-           {% endfor %}
+          {% endfor %}
         </div>
         <div class="col-sm-3 text-end">
           Gesamt: <strong>{{ summary.offen|number_format }}</strong>

+ 58 - 11
templates/base/liste.html

@@ -1,17 +1,64 @@
 {% extends "base/base.html" %}
+
 {% block content %}
 
-{%include 'base/liste_filter.html' %}
-
-<div  id="liste-content">
-<table class="table table-striped table-bordered table-sm">
-  <thead>
-    {%include 'forderungen/liste/liste_kopfzeile.html' %}    
-  </thead>
-  <tbody>
-    {%include 'base/liste_tabelle.html' %}
-  </tbody>
-</table>
+
+
+{# =========================================================
+FILTERBEREICH
+---------------------------------------------------------
+Oberer Bereich mit:
+- Dropdowns
+- Suchfeldern
+- Datumsfiltern
+- Bereichsfiltern
+========================================================= #}
+<div class="gc-card gc-filterbar">
+
+  {% include 'base/liste_filter.html' %}
+
+</div>
+
+
+
+{# =========================================================
+TABELLEN-CONTAINER
+---------------------------------------------------------
+Enthält die komplette Forderungsliste.
+
+Klassen:
+- gc-card → Kartenlayout
+- gc-table-wrap → Scroll-/Tabellencontainer
+========================================================= #}
+<div class="gc-card gc-table-wrap">
+
+  <table class="table gc-table table-hover align-middle">
+
+    {# =====================================================
+    TABELLENKOPF
+    -----------------------------------------------------
+    Enthält:
+    - Spaltenüberschriften
+    - Sticky Header
+    ====================================================== #}
+    <thead>
+
+      {% include 'forderungen/liste/liste_kopfzeile.html' %}
+
+    </thead>
+
+
+    {# =====================================================
+    TABELLENINHALT
+    -----------------------------------------------------
+    Enthält alle Datensätze / Tabellenzeilen
+    ====================================================== #}
+    <tbody>
+
+      {% include 'base/liste_tabelle.html' %}
+
+    </tbody>
+  </table>
 </div>
 
 {% endblock %}

+ 83 - 47
templates/forderungen/liste/liste_zeile.html

@@ -1,48 +1,84 @@
+<tr>
+  <td>
+    <a href="/app/forderungen/details/{{ row.Client_DB }}_{{ row.Document_No }}"
+      class="btn btn-sm btn-primary gc-action-btn">
+      <i class="icon cil-pencil"></i>
+    </a>
+  </td>
 
-    <tr>
-      <td>
-        <a href="/app/forderungen/details/{{ row.Client_DB }}_{{ row.Document_No }}" class="btn btn-sm btn-primary"><i class="icon cil-pencil"></i></a>
-      </td>
-      <td>
-        {{ row.Standort_Name }}<br>
-        {{ row.Bereich }}
-      </td>
-      <td>
-        <a href="/app/forderungen/liste?Kunde={{ row.Kunde|urlencode }}">{{ row.Kunde }}</a>
-        {% if row.Kunde_Email %}
-        <a href="mailto:{{ row.Kunde_Email }}?subject={{ row.Document_No }}" class="btn btn-sm btn-outline-secondary" hx-disable="true">
-            <i class="cil-at"></i>
-        </a>
-        {% endif %}
-      </td>
-      <td>
-        <a href="/app/forderungen/liste?Verursacher={{ row.Verursacher|urlencode }}">{{ row.Verursacher }}</a>
-        {% if row.Verursacher == 'N.N.' %}
-        <a class="btn btn-sm btn-outline-secondary">
-            <i class="cil-user-follow"></i>
-        </a>
-        {% endif %}
-      </td>
-      <td>{{ row.Document_No }}</td>
-      <td>
-        {{ row.Invoice_Date|date_format }}<br>
-        {{ row.Fällig_Datum|date_format }}
-      </td>
-      <td class="text-end">{{ row.offen|number_format }}</td>
-      <td class="text-end">
-        {{ row.offen|number_format }}<br>
-        {{ row.offen_Kunde_gesamt|number_format }}
-      </td>
-      <td class="text-end">
-        {{ row.Mahnstufe }}<br>
-        {{ row.Staffel }}
-      </td>
-      <td class="text-end">{{ row.Abwarten }}</td>
-      <td>
-        {{ row.Kommentar_Fibu or '' }}
-      </td>
-      <td>
-        {{ row.Kommentar_Abteilung or '' }}
-      </td>
-      <td class="text-end">{{ row.Wiedervorlage|date_format }}</td>
-    </tr>
+  <td>
+    <div class="gc-title">{{ row.Standort_Name }}</div>
+    <div class="gc-subtitle">{{ row.Bereich }}</div>
+  </td>
+
+  <td class="gc-main-cell">
+    <a class="gc-title text-decoration-none" href="/app/forderungen/liste?Kunde={{ row.Kunde|urlencode }}">
+      {{ row.Kunde }}
+    </a>
+    <div class="gc-subtitle">
+      {{ row.Document_No }}
+      {% if row.Kunde_Email %}
+      · <a href="mailto:{{ row.Kunde_Email }}?subject={{ row.Document_No }}" hx-disable="true">E-Mail</a>
+      {% endif %}
+    </div>
+  </td>
+
+  <td>
+    <a href="/app/forderungen/liste?Verursacher={{ row.Verursacher|urlencode }}"
+      class="text-decoration-none fw-semibold">
+      {{ row.Verursacher }}
+    </a>
+    {% if row.Verursacher == 'N.N.' %}
+    <span class="gc-badge gc-badge-warning ms-1">offen</span>
+    {% endif %}
+  </td>
+
+  <td>
+    <span class="gc-badge gc-badge-info">{{ row.Document_No }}</span>
+  </td>
+
+  <td>
+    <div>{{ row.Invoice_Date|date_format }}</div>
+    <div class="gc-subtitle">fällig {{ row.Fällig_Datum|date_format }}</div>
+  </td>
+
+  <td class="text-end align-top">
+    <div class="gc-money">{{ row.offen|number_format }} €</div>
+  </td>
+
+  <td class="text-end">
+    <div class="gc-money">{{ row.offen|number_format }} €</div>
+    <div class="gc-subtitle">Kunde {{ row.offen_Kunde_gesamt|number_format }} €</div>
+  </td>
+
+  <td class="text-end">
+    {% set mahnstufe = row.Mahnstufe or row.Stufe %}
+
+    {% if mahnstufe and mahnstufe|string != '0' %}
+    <span class="gc-badge gc-badge-danger gc-mahnstufe-{{ mahnstufe }}">
+      M{{ mahnstufe }}
+    </span>
+    {% endif %}
+    <div class="gc-subtitle">Staffel {{ row.Staffel }}</div>
+  </td>
+
+  <td class="text-end">
+    {% if row.Abwarten %}
+    <span class="gc-badge gc-badge-warning">{{ row.Abwarten }}</span>
+    {% endif %}
+  </td>
+
+  <td>
+    <div class="gc-subtitle">{{ row.Kommentar_Fibu or '' }}</div>
+  </td>
+
+  <td>
+    <div class="gc-subtitle">{{ row.Kommentar_Abteilung or '' }}</div>
+  </td>
+
+  <td class="text-end">
+    {% if row.Wiedervorlage %}
+    <span class="gc-badge gc-badge-success">{{ row.Wiedervorlage|date_format }}</span>
+    {% endif %}
+  </td>
+</tr>