/*:root {
    --bg: #f4f6f8;
    --card: #ffffff;
    --text: #17202a;
    --muted: #6b7280;
    --primary: #2563eb;
    --primary-hover: #1d4ed8;
    --danger: #dc2626;
    --danger-bg: #fee2e2;
    --border: #e5e7eb;
    --shadow: 0 8px 24px rgba(15, 23, 42, 0.04);
} */

:root {
    --bg: #f4f6f8;
    --card: #ffffff;
    --text: #17202a;
    --muted: #6b7280;
    --primary: #006e3a;
    --primary-hover: #00562d;
    --danger: #dc2626;
    --danger-bg: #fee2e2;
    --border: #e5e7eb;
    --shadow: 0 8px 24px rgba(15, 23, 42, 0.04);
}

* {
    box-sizing: border-box;
}

/* Platz fuer die Scrollleiste immer freihalten, auch wenn die Seite
   gerade nicht scrollt.

   Sonst aendert sich die nutzbare Breite in dem Moment, in dem Inhalt
   dazukommt oder wegfaellt - und weil .page zentriert ist (margin: 0
   auto), rutscht die gesamte Seite um die halbe Leistenbreite zur
   Seite. Sichtbar wurde das beim Umschalten zwischen automatischen
   Regeln und Karten-Buttons, es betrifft aber jede Liste, die sich
   filtern oder auf- und zuklappen laesst.

   Bewusst auf <html> und damit fuer alle Seiten: die Ursache ist nicht
   diese eine Ansicht, sondern das zentrierte Layout. */
html {
    scrollbar-gutter: stable;
}

body {
    margin: 0;
    font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
    background: var(--bg);
    color: var(--text);
}

.page {
    max-width: 1200px;
    margin: 0 auto;
    padding: 24px;
}

body.kanban-page .page {
    max-width: none;
}

.topbar,
.card,
.sheet-page-card {
    background: var(--card);
    border: 1px solid var(--border);
    border-radius: 16px;
    box-shadow: var(--shadow);
}

.topbar {
    padding: 18px 22px;
    margin-bottom: 24px;
}

.topbar-title {
    font-weight: 700;
}

.topbar-title small {
    display: block;
    margin-top: 2px;
    color: var(--muted);
    font-weight: 600;
    font-size: 0.8rem;
}

.topbar-burger {
    position: relative;
}

.topbar-burger-toggle {
    display: inline-flex;
    align-items: center;
    justify-content: center;

    width: 40px;
    height: 40px;

    border: 1px solid var(--border);
    border-radius: 12px;
    background: white;
    font-size: 1.1rem;
    cursor: pointer;
}

.topbar-burger-toggle:hover {
    border-color: var(--primary);
}

.topbar-burger-panel {
    position: absolute;
    top: calc(100% + 8px);
    right: 0;
    z-index: 20;

    display: flex;
    flex-direction: column;
    min-width: 200px;

    background: white;
    border: 1px solid var(--border);
    border-radius: 14px;
    box-shadow: 0 12px 28px rgba(15, 23, 42, 0.12);
    overflow: hidden;
}

.topbar-burger-panel[hidden] {
    display: none;
}

.topbar-burger-item {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 12px 16px;
    color: var(--text);
    text-decoration: none;
    font-weight: 600;
    font-size: 0.9rem;
    text-align: left;
    border: none;
    background: none;
    width: 100%;
    cursor: pointer;
}

.topbar-burger-item:hover {
    background: #f2f4f7;
}

.topbar-burger-item-icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex: 0 0 18px;
    width: 18px;
    height: 18px;
    color: var(--muted);
}

.topbar-burger-item-icon svg {
    width: 16px;
    height: 16px;
}

.topbar-burger-item-button {
    color: #b91c1c;
}

.card {
    padding: 22px;
    margin-bottom: 20px;
}

.card h1,
.card h2,
.card h3 {
    margin-top: 0;
}

.section-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: 16px;
    margin-bottom: 12px;
}

.btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
    padding: 10px 14px;
    border-radius: 10px;
    border: 1px solid var(--border);
    background: white;
    color: var(--text);
    text-decoration: none;
    cursor: pointer;
    font: inherit;
    font-weight: 600;
}

.btn:hover {
    background: #f9fafb;
}

.btn-primary {
    background: var(--primary);
    color: white;
    border-color: var(--primary);
}

.btn-primary:hover {
    background: var(--primary-hover);
    border-color: var(--primary-hover);
}

.btn-secondary {
    background: white;
    color: var(--text);
    border-color: var(--border);
}

.icon-button {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 34px;
    height: 34px;
    border-radius: 10px;
    border: 1px solid var(--border);
    background: white;
    cursor: pointer;
    line-height: 1;
    font-size: 16px;
}

.icon-button:hover {
    background: #f9fafb;
}

.icon-button.danger {
    color: #ef4444;
}

.icon-button.danger:hover {
    background: #fef2f2;
    border-color: #fecaca;
    color: #dc2626;
}

.icon-button.success {
    color: #16a34a;
}

.icon-button.success:hover {
    background: #dcfce7;
    border-color: #bbf7d0;
}

.trash-svg {
    width: 18px;
    height: 18px;
    fill: none;
    stroke: currentColor;
    stroke-width: 1.9;
    stroke-linecap: round;
    stroke-linejoin: round;
}

form {
    margin: 0;
}

input,
select,
textarea {
    width: 100%;
    padding: 10px;
    border: 1px solid var(--border);
    border-radius: 10px;
    font: inherit;
    background: white;
}

input:focus,
select:focus,
textarea:focus {
    outline: none;
    border-color: var(--primary);
    box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.12);
}

label {
    display: block;
    margin-bottom: 6px;
    font-weight: 600;
}

.muted,
.empty-row {
    color: var(--muted);
}

.messages {
    margin-bottom: 20px;
}

.message {
    padding: 12px 16px;
    border-radius: 12px;
    background: #e0f2fe;
    margin-bottom: 8px;
}

.message.error {
    background: #fee2e2;
}

.message.success {
    background: #dcfce7;
}

.message.warning {
    background: #fef3c7;
}

/* Projekt-Kacheln */

.carousel-controls {
    display: flex;
    gap: 8px;
}

.tile-row-wrapper {
    overflow-x: auto;
    padding-bottom: 12px;
}

.tile-row {
    display: flex;
    gap: 20px;
    scroll-behavior: smooth;
}

.tile-card {
    flex: 0 0 calc((100% - 40px) / 3);
    min-width: calc((100% - 40px) / 3);
    background: var(--card);
    border: 1px solid var(--border);
    border-radius: 16px;
    padding: 20px;
    min-height: 340px;
    box-shadow: var(--shadow);
    display: flex;
    flex-direction: column;
}

.tile-card-header {
    display: flex;
    justify-content: space-between;
    align-items: flex-start;
    gap: 12px;
    margin-bottom: 14px;
}

.tile-title-link {
    color: var(--text);
    text-decoration: none;
    font-weight: 800;
    font-size: 1.35rem;
    line-height: 1.2;
}

.tile-title-link:hover {
    color: var(--primary);
}

.tile-room-list {
    flex: 1;
    max-height: 220px;
    overflow-y: auto;
    padding-right: 6px;
    margin-bottom: 14px;
}

.tile-room-item {
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: 14px;
    padding: 11px 0;
    border-bottom: 1px solid var(--border);
}

.tile-room-item:last-child {
    border-bottom: none;
}

.tile-room-main a {
    color: var(--primary);
    text-decoration: none;
    font-weight: 600;
}

.tile-room-actions {
    display: flex;
    align-items: center;
    gap: 8px;
    white-space: nowrap;
}

.element-count {
    color: var(--muted);
    font-size: 0.95rem;
}

.add-panel {
    margin-top: 18px;
}

.add-panel > summary {
    list-style: none;
    width: fit-content;
}

.add-panel > summary::-webkit-details-marker {
    display: none;
}

.add-panel[open] > summary {
    margin-bottom: 16px;
}

.compact-form {
    border-top: 1px solid var(--border);
    padding-top: 16px;
    display: grid;
    gap: 14px;
}

.button-row {
    display: flex;
    justify-content: flex-end;
    gap: 10px;
}

/* Toggle */

.toggle-card {
    padding: 12px;
}

.modern-toggle {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 10px;
    background: #eef2f7;
    border: 1px solid var(--border);
    border-radius: 18px;
    padding: 6px;
}

.modern-toggle-item {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 14px 16px;
    border-radius: 14px;
    color: var(--muted);
    text-decoration: none;
    transition: background 0.15s ease, color 0.15s ease, box-shadow 0.15s ease;
}

.modern-toggle-item strong {
    display: block;
    color: inherit;
    font-size: 1rem;
}

.modern-toggle-item small {
    display: block;
    margin-top: 2px;
    color: inherit;
    opacity: 0.75;
}

.modern-toggle-item.active {
    background: white;
    color: var(--text);
    box-shadow: 0 8px 20px rgba(15, 23, 42, 0.08);
}

.modern-toggle-flex {
    display: flex;
    flex-wrap: wrap;
    gap: 10px;
    background: #eef2f7;
    border: 1px solid var(--border);
    border-radius: 18px;
    padding: 6px;
}

.modern-toggle-flex .modern-toggle-item {
    flex: 1 1 160px;
    justify-content: center;
}

.toggle-icon {
    width: 42px;
    height: 42px;
    border-radius: 14px;
    background: white;
    border: 1px solid var(--border);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-size: 1.15rem;
    flex-shrink: 0;
}

/* Listen / Detailseiten */

.room-list {
    list-style: none;
    padding: 0;
    margin: 0;
}

.room-list li {
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: 16px;
    border-bottom: 1px solid var(--border);
    padding: 12px 0;
}

.room-list li:last-child {
    border-bottom: none;
}

.room-main {
    min-width: 0;
}

.room-list a {
    color: var(--primary);
    text-decoration: none;
    font-weight: 600;
}

.room-actions {
    display: flex;
    align-items: center;
    gap: 10px;
    white-space: nowrap;
}

.group-navigation,
.bottom-navigation {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 12px;
    margin-top: 18px;
}

.group-navigation > :last-child,
.bottom-navigation > :last-child {
    justify-self: end;
}

/* Kunden-Projektübersicht */

.customer-project-table {
    width: 100%;
    border-collapse: collapse;
    border-spacing: 0;
    table-layout: fixed;
}

.customer-project-table th,
.customer-project-table td {
    text-align: left;
    vertical-align: middle;
    border-bottom: 1px solid var(--border);
    padding: 10px 10px;
}

.customer-project-table th {
    color: var(--muted);
    font-size: 0.9rem;
    font-weight: 800;
}

.customer-project-table td {
    color: var(--text);
    font-size: 0.96rem;
}

.customer-project-table tbody tr:last-child td {
    border-bottom: none;
}

.customer-project-table tbody tr:hover td {
    background: #f8fafc;
}

/* Spaltenbreiten wie im gewünschten Screenshot */

.customer-table-scroll {
    width: 100%;
    max-width: 100%;
}

.customer-project-table th:nth-child(1),
.customer-project-table td:nth-child(1) {
    width: 10%;
}

.customer-project-table th:nth-child(2),
.customer-project-table td:nth-child(2) {
    width: 35%;
}

.customer-project-table th:nth-child(3),
.customer-project-table td:nth-child(3) {
    width: 35%;
}

.customer-project-table th:nth-child(4),
.customer-project-table td:nth-child(4) {
    width: 20%;
}

.muted-link {
    color: var(--text);
}

.table-link {
    color: var(--primary);
    text-decoration: none;
    font-weight: 600;
}

.table-link:hover {
    text-decoration: underline;
}

/* Normale Tabellen in Cards, aber ohne Datenblatt zu beeinflussen */

.card table:not(.heating-sheet) {
    width: 100%;
    border-collapse: collapse;
}

.card table:not(.heating-sheet) th,
.card table:not(.heating-sheet) td {
    border-bottom: 1px solid var(--border);
    padding: 10px 10px;
    text-align: left;
}

.card table:not(.heating-sheet) th {
    color: var(--muted);
    font-size: 0.9rem;
    font-weight: 800;
}

.card table:not(.heating-sheet) tbody tr:last-child td {
    border-bottom: none;
}

.card table:not(.heating-sheet) tbody tr:hover td {
    background: #f8fafc;
}

/* =========================================================
   DATENBLATT – ZEILE MIT GESCHOSS + RAUM + ELEMENT
   ========================================================= */

.sheet-page-card {
    background: white;
    border: 1px solid var(--border);
    border-radius: 16px;
    padding: 28px;
    box-shadow: var(--shadow);
    overflow-x: auto;
}

.room-sheet-block {
    margin: 0 auto 28px;
    max-width: 1180px;
    padding-bottom: 18px;
    border-bottom: 1px solid var(--border);
}

.room-sheet-block:last-child {
    border-bottom: none;
}

.room-elements {
    display: grid;
    gap: 12px;
}

.room-sheet-header {
    display: none;
}

/* Eine komplette Zeile:
   Geschoss | Raum | Element | Slot1 | Slot2 | Slot3 | Slot4 | Slot5 | Löschen
*/
.sheet-row-grid,
.sheet-existing-row.sheet-row-grid,
.add-sheet-row {
    display: grid !important;
    grid-template-columns:
        110px   /* Geschoss */
        170px   /* Raum */
        130px   /* Element */
        95px    /* Slot 1 */
        95px    /* Slot 2 */
        95px    /* Slot 3 */
        110px    /* Slot 4 */
        95px    /* Slot 5 */
        42px;   /* Löschen / Aktion */
    gap: 14px;
    align-items: end;
    width: 100%;
}

.sheet-existing-row.sheet-row-grid {
    margin-bottom: 8px;
}

.sheet-inline-meta {
    display: flex;
    flex-direction: column;
    gap: 4px;
    min-width: 0;
}

.sheet-inline-meta-label {
    font-size: 0.9rem;
    font-weight: 600;
    color: var(--text);
    line-height: 1.1;
    min-height: 18px;
}

.sheet-inline-meta-value {
    height: 34px;
    line-height: 34px;
    font-size: 1rem;
    font-weight: 600;
    color: var(--text);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.sheet-row-form {
    display: contents;
}

.sheet-row-delete-form {
    display: contents;
}

.sheet-delete-button .icon-button {
    grid-column: 9;
}

.sheet-slot {
    display: flex !important;
    flex-direction: column;
    gap: 4px;
    min-width: 0;
    margin: 0;
    font-weight: 600;
}

.sheet-slot-label {
    font-size: 0.6rem !important;
    font-weight: 600 !important;
    color: var(--text);
    line-height: 1.05;
    min-height: 14px;
}

.sheet-slot-input,
.sheet-slot select,
.sheet-slot input {
    width: 100% !important;
    min-width: 0 !important;
    border: none !important;
    border-bottom: 1px solid transparent !important;
    border-radius: 0 !important;
    background: transparent !important;
    box-shadow: none !important;
    padding: 0 !important;
    height: 34px;
    font-size: 1rem !important;
    color: var(--text);
}

.sheet-slot select:focus,
.sheet-slot input:focus,
.sheet-slot-input:focus {
    outline: none !important;
    border-bottom-color: var(--primary) !important;
}

.sheet-slot-input:disabled {
    color: var(--muted);
    opacity: 1;
}

.sheet-add-actions {
    margin-top: 14px;
}

.inline-add-panel {
    margin-top: 14px;
    padding: 18px;
    border: 1px solid var(--border);
    border-radius: 14px;
    background: #f8fafc;
}

.inline-add-panel.is-hidden {
    display: none;
}

.sheet-add-submit {
    grid-column: 9;
    white-space: nowrap;
    padding: 10px 14px;
    align-self: end;
    justify-self: start;
}

.add-sheet-block {
    display: none;
}

/* Responsive erst bei wirklich kleinen Breiten */
@media (max-width: 860px) {
    .sheet-row-grid,
    .sheet-existing-row.sheet-row-grid,
    .add-sheet-row {
        grid-template-columns: 1fr;
        border: 1px solid var(--border);
        border-radius: 14px;
        padding: 14px;
    }

    .sheet-row-form,
    .sheet-row-delete-form {
        display: block;
    }

    .sheet-delete-button .icon-button,
    .sheet-add-submit {
        grid-column: auto;
    }
}

.room-element-table {
    width: 100%;
    border-collapse: collapse;
}

.room-element-table th,
.room-element-table td {
    border-bottom: 1px solid var(--border);
    padding: 10px;
    text-align: left;
}

.room-element-table th {
    color: var(--muted);
    font-size: 0.9rem;
    font-weight: 800;
}

.element-add-toggle {
    display: inline-flex;
    background: #eef2f7;
    border: 1px solid var(--border);
    border-radius: 14px;
    padding: 4px;
    margin-bottom: 18px;
}

.toggle-add-button {
    border: none;
    background: transparent;
    border-radius: 10px;
    padding: 10px 14px;
    font: inherit;
    font-weight: 700;
    color: var(--muted);
    cursor: pointer;
}

.toggle-add-button.active {
    background: white;
    color: var(--text);
    box-shadow: 0 4px 14px rgba(15, 23, 42, 0.08);
}

.element-add-panel.is-hidden {
    display: none;
}

.form-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
    gap: 16px;
    margin-bottom: 18px;
}

/* Raumdetail: Heizkörper-Formular einzeilig im Stil der Flächenheizung */

.radiator-inline-form {
    display: grid;
    grid-template-columns:
        minmax(170px, 1.1fr)
        minmax(120px, 0.8fr)
        minmax(150px, 1fr)
        minmax(150px, 1fr)
        minmax(170px, 1fr)
        minmax(150px, 1fr);
    gap: 14px;
    align-items: start;
    margin-bottom: 14px;
}

.radiator-inline-form .form-field {
    min-width: 0;
}

.radiator-inline-form .form-field > label {
    display: block;
    margin-bottom: 6px;
    font-weight: 700;
    font-size: 0.9rem;
    line-height: 1.2;
    min-height: 0;
}

.radiator-inline-form input,
.radiator-inline-form select {
    min-height: 38px;
    height: 38px;
    padding: 6px 10px;
    line-height: 1.25;
}

.radiator-inline-form select {
    min-width: 0;
    padding-right: 32px;
    text-overflow: ellipsis;
}

.radiator-inline-form .form-field:first-child {
    min-width: 170px;
}

/* Toggle soll optisch wie ein normaler Header + Feld wirken */

.mini-toggle {
    display: inline-flex;
    background: #eef2f7;
    border: 1px solid var(--border);
    border-radius: 10px;
    padding: 3px;
    width: 100%;
    height: 32px;
}

.mini-toggle-as-label {
    margin-bottom: 6px;
    min-height: 27px;
    align-items: center;
}

.toggle-form-field {
    padding-top: 0;
}

.toggle-form-field .mini-toggle-as-label {
    margin-top: 0;
    min-height: 27px;
    margin-bottom: 6px;
}

.toggle-form-field .mini-toggle-as-label {
    transform: translateY(-15px);
}

.radiator-inline-form .form-field:has(.mini-toggle-as-label) {
    padding-top: 0;
}

.radiator-inline-form .form-field:has(.mini-toggle-as-label) .mini-toggle {
    margin-top: 0;
}

.mini-toggle-item {
    flex: 1;
    display: inline-flex !important;
    align-items: center;
    justify-content: center;
    border-radius: 7px;
    padding: 5px 8px;
    margin: 0 !important;
    cursor: pointer;
    color: var(--muted);
    font-size: 0.82rem;
    font-weight: 700;
    line-height: 1;
}

.mini-toggle-item input {
    display: none;
}

.mini-toggle-item.active {
    background: white;
    color: var(--text);
    box-shadow: 0 2px 8px rgba(15, 23, 42, 0.08);
}

.is-hidden {
    display: none !important;
}

@media (max-width: 1100px) {
    .radiator-inline-form {
        grid-template-columns: repeat(2, minmax(220px, 1fr));
    }
}

@media (max-width: 650px) {
    .radiator-inline-form {
        grid-template-columns: 1fr;
    }
}

.toggle-form-field input,
.toggle-form-field select {
    transform: translateY(-15px);
}

/* Topbar Navigation */

.topbar {
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: 16px;
}

.topbar-nav {
    display: flex;
    align-items: center;
    gap: 10px;
    flex-wrap: wrap;
}

.topbar-link {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    padding: 8px 11px;
    border-radius: 10px;
    color: var(--text);
    text-decoration: none;
    font-size: 0.9rem;
    font-weight: 700;
    border: 1px solid var(--border);
    background: white;
}

.topbar-link:hover {
    background: #f9fafb;
}

.topbar-link.disabled {
    color: var(--muted);
    opacity: 0.55;
    cursor: default;
}

/* Raumkopf mit Vorschau */

.room-hero-card {
    padding: 24px;
}

.room-hero {
    display: grid;
    grid-template-columns: minmax(0, 1fr) 320px;
    gap: 28px;
    align-items: center;
}

.eyebrow {
    color: var(--muted);
    font-size: 0.85rem;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 0.04em;
    margin-bottom: 6px;
}

.room-hero-info h1 {
    margin: 0 0 18px;
    font-size: 2rem;
}

.room-meta-list {
    display: flex;
    gap: 14px;
    flex-wrap: wrap;
}

.room-meta-list div {
    min-width: 130px;
    padding: 12px 14px;
    border: 1px solid var(--border);
    border-radius: 14px;
    background: #f8fafc;
}

.room-meta-list span {
    display: block;
    color: var(--muted);
    font-size: 0.82rem;
    font-weight: 700;
    margin-bottom: 4px;
}

.room-meta-list strong {
    font-size: 1.05rem;
}

.room-preview-card {
    border: 1px solid var(--border);
    border-radius: 16px;
    background: #f8fafc;
    padding: 6px;
    text-align: center;
}

.heating-preview-image {
    width: 100%;
    max-height: 180px;
    object-fit: contain;
    display: block;
}

.heating-preview-caption {
    margin-top: 10px;
    color: var(--muted);
    font-size: 0.85rem;
    font-weight: 700;
}

@media (max-width: 850px) {
    .topbar {
        align-items: flex-start;
        flex-direction: column;
    }

    .room-hero {
        grid-template-columns: 1fr;
    }

    .room-preview-card {
        max-width: 360px;
    }
}

.mini-toggle.is-disabled {
    opacity: 0.45;
    pointer-events: none;
}

.mini-toggle-item.is-option-disabled {
    opacity: 0.35;
    cursor: not-allowed;
}

.mini-toggle-item.is-option-disabled:hover {
    background: transparent;
}

.mobile-table-scroll {
    width: 100%;
    max-width: 100%;
}

@media (max-width: 700px) {
    .card {
        overflow: hidden;
    }

    .mobile-table-scroll {
        display: block;
        width: 100%;
        max-width: 100%;
        overflow-x: auto;
        overflow-y: hidden;
        -webkit-overflow-scrolling: touch;
        padding-bottom: 8px;
    }

    .mobile-table-scroll .room-element-table {
        width: max-content !important;
        min-width: 760px;
        max-width: none;
    }

    .mobile-table-scroll .room-element-table th,
    .mobile-table-scroll .room-element-table td {
        white-space: nowrap;
    }
    .mobile-table-scroll-small .room-element-table {
        min-width: 560px;
    }
}
/* Mobile Raumleiste */

.mobile-room-sticky-bar {
    display: none !important;
}

@media (max-width: 700px) {
    .topbar-room-nav {
        display: none !important;
    }

    .mobile-room-sticky-bar {
        position: sticky;
        top: 8px;
        z-index: 50;

        display: grid !important;
        grid-template-columns: 42px minmax(0, 1fr) 42px;
        align-items: center;
        gap: 8px;

        margin: -8px 0 16px;
        padding: 8px;

        background: rgba(255, 255, 255, 0.96);
        border: 1px solid var(--border);
        border-radius: 14px;
        box-shadow: 0 8px 24px rgba(15, 23, 42, 0.10);
        backdrop-filter: blur(8px);
    }

    .mobile-room-sticky-title {
        min-width: 0;
        text-align: center;
        font-size: 0.9rem;
        font-weight: 800;
        white-space: nowrap;
        overflow: hidden;
        text-overflow: ellipsis;
    }

    .mobile-room-nav-button {
        width: 42px;
        height: 36px;
        border-radius: 10px;
        border: 1px solid var(--border);
        background: white;
        color: var(--text);
        text-decoration: none;

        display: inline-flex;
        align-items: center;
        justify-content: center;

        font-size: 1.1rem;
        font-weight: 900;
        line-height: 1;
    }

    .mobile-room-nav-button.primary {
        background: var(--primary);
        border-color: var(--primary);
        color: white;
    }

    .mobile-room-nav-button.disabled {
        opacity: 0.35;
        pointer-events: none;
    }
}

.customer-project-row {
    cursor: pointer;
}

.customer-project-row:hover td {
    background: #f8fafc;
}

@media (max-width: 700px) {

    .customer-project-table {
        table-layout: auto;
    }

    .customer-project-table th,
    .customer-project-table td {
        padding: 12px 10px;
    }

    .customer-project-row {
        cursor: pointer;
    }
}

@media (max-width: 700px) {
    .customer-table-scroll {
        overflow-x: auto;
        overflow-y: hidden;
        -webkit-overflow-scrolling: touch;
        padding-bottom: 8px;
    }

    .customer-table-scroll .customer-project-table {
        width: max-content;
        min-width: 720px;
        max-width: none;
        table-layout: auto;
    }

    .customer-table-scroll .customer-project-table th,
    .customer-table-scroll .customer-project-table td {
        white-space: nowrap;
    }
}

/* Mobile Projektübersicht */

@media (max-width: 700px) {
    /* Toggle: Beschreibung ausblenden */
    .modern-toggle-item small {
        display: none;
    }

    /* Toggle: Bezeichnung über Icon */
    .modern-toggle-item {
        flex-direction: column-reverse;
        justify-content: center;
        align-items: center;
        gap: 6px;
        padding: 10px 8px;
        text-align: center;
        min-width: 0;
    }

    .modern-toggle-item span:not(.toggle-icon) {
        min-width: 0;
        width: 100%;
    }

    .modern-toggle-item strong {
        font-size: 0.9rem;
        line-height: 1.1;
        white-space: normal;
        overflow-wrap: anywhere;
        text-align: center;
    }

    .toggle-icon {
        width: 38px;
        height: 38px;
        font-size: 1rem;
    }

    .modern-toggle {
        grid-template-columns: 1fr 1fr;
        gap: 8px;
    }

    /* Im mobilen Karussell immer nur eine Karte sichtbar */
    .tile-row-wrapper {
        overflow-x: auto;
        -webkit-overflow-scrolling: touch;
        scroll-snap-type: x mandatory;
        padding-bottom: 10px;
    }

    .tile-row {
        gap: 12px;
    }

    .tile-card {
        flex: 0 0 100%;
        min-width: 100%;
        min-height: auto;
        scroll-snap-align: start;
    }

    /* Mobile Projektübersicht: nur Geschoss / Wohneinheit zeigen */
    .tile-card .tile-room-list,
    .tile-card .add-panel,
    .tile-card .tile-room-actions {
        display: none !important;
    }

    /* Mülleimer für Geschoss / Wohneinheit mobil ausblenden */
    .tile-card-header form {
        display: none !important;
    }

    .tile-card-header {
        margin-bottom: 0;
        align-items: center;
    }

    .tile-title-link {
        font-size: 1.35rem;
    }

    /* Pfeile optional mobil etwas größer und gut erreichbar */
    .carousel-controls .icon-button {
        width: 40px;
        height: 40px;
    }
}

/* Mobile Projektübersicht: Geschosse / Wohneinheiten als Liste */

.mobile-group-list {
    display: none;
}

@media (max-width: 700px) {
    .mobile-group-list {
        display: block;
        max-height: 325px;
        overflow-y: auto;
        -webkit-overflow-scrolling: touch;
        padding-right: 4px;
    }

    .mobile-group-item {
        display: flex;
        justify-content: space-between;
        align-items: center;
        gap: 14px;
        padding: 12px 0;
        border-bottom: 1px solid var(--border);
    }

    .mobile-group-item:last-child {
        border-bottom: none;
    }

    .mobile-group-main {
        min-width: 0;
    }

    .mobile-group-main a {
        color: var(--primary);
        text-decoration: none;
        font-weight: 700;
        font-size: 1rem;
    }

    .mobile-group-main a:hover {
        text-decoration: underline;
    }

    .mobile-group-main .muted {
        margin-top: 3px;
        font-size: 0.9rem;
    }

    .mobile-group-item form {
        flex-shrink: 0;
    }

    /* Desktop-Kacheln mobil ausblenden */
    .tile-row-wrapper {
        display: none;
    }

    /* Pfeile für Kachel-Karussell mobil ausblenden */
    .carousel-controls {
        display: none;
    }
}

.topbar-brand {
    display: inline-flex;
    align-items: center;
    gap: 10px;
    min-width: 0;
}

.topbar-logo {
    width: auto;
    height: 40px;
    object-fit: contain;
    flex-shrink: 0;
}

.topbar-title {
    font-weight: 700;
    white-space: nowrap;
}

.project-title-header h1 {
    font-size: 1.45rem;
    line-height: 1.25;
    margin-bottom: 6px;
}

.project-title-header p {
    margin: 0;
    font-size: 0.95rem;
}

@media (max-width: 700px) {
    .project-title-header h1 {
        font-size: 1.2rem;
    }

    .project-title-header p {
        font-size: 0.9rem;
    }
}

.project-module-grid {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 18px;
}

.project-module-card {
    display: flex;
    align-items: flex-start;
    gap: 16px;

    min-height: 130px;
    padding: 22px;

    background: var(--card);
    border: 1px solid var(--border);
    border-radius: 16px;
    box-shadow: var(--shadow);

    color: var(--text);
    text-decoration: none;

    transition: transform 0.15s ease, box-shadow 0.15s ease, border-color 0.15s ease;
}

.project-module-card:hover {
    transform: translateY(-2px);
    border-color: var(--primary);
    box-shadow: 0 12px 28px rgba(15, 23, 42, 0.08);
}

.project-module-icon {
    width: 46px;
    height: 46px;
    flex-shrink: 0;

    display: inline-flex;
    align-items: center;
    justify-content: center;

    border-radius: 14px;
    background: #eef2f7;
    font-size: 1.35rem;
}

.project-module-card h2 {
    margin: 0 0 6px;
    font-size: 1.15rem;
}

.project-module-card p {
    margin: 0;
    color: var(--muted);
    font-size: 0.95rem;
    line-height: 1.4;
}

.project-module-disabled {
    opacity: 0.65;
}

.project-module-disabled:hover {
    transform: none;
    border-color: var(--border);
    box-shadow: var(--shadow);
    cursor: not-allowed;
}

@media (max-width: 700px) {
    .project-module-grid {
        grid-template-columns: 1fr;
        gap: 12px;
    }

    .project-module-card {
        min-height: auto;
        padding: 16px;
    }

    .project-module-icon {
        width: 42px;
        height: 42px;
        font-size: 1.15rem;
    }

    .project-module-card h2 {
        font-size: 1rem;
    }

    .project-module-card p {
        font-size: 0.88rem;
    }
}

.topbar-brand {
    display: inline-flex;
    align-items: center;
    gap: 10px;
    min-width: 0;
    color: var(--text);
    text-decoration: none;
}

.topbar-brand:hover {
    color: var(--text);
    text-decoration: none;
}

.upload-form {
    display: grid;
    gap: 16px;
}

.upload-category-row {
    max-width: 360px;
}

.upload-dropzone {
    display: grid;
    place-items: center;
    gap: 8px;

    min-height: 220px;
    padding: 26px;

    border: 2px dashed var(--border);
    border-radius: 18px;
    background: #f8fafc;

    text-align: center;
    cursor: pointer;
    transition: border-color 0.15s ease, background 0.15s ease;
}

.upload-dropzone:hover,
.upload-dropzone.is-dragover {
    border-color: var(--primary);
    background: rgba(0, 110, 58, 0.06);
}

.upload-dropzone-icon {
    font-size: 2rem;
}

.upload-dropzone strong {
    font-size: 1.1rem;
}

.upload-dropzone span {
    color: var(--muted);
    font-weight: 600;
}

.upload-file-input {
    display: none;
}

.upload-selected-file {
    color: var(--muted);
    font-size: 0.95rem;
    font-weight: 600;
}

@media (max-width: 700px) {
    .upload-dropzone {
        min-height: 130px;
        padding: 18px;
        border-style: solid;
    }

    .upload-dropzone strong {
        font-size: 1rem;
    }

    .upload-dropzone span {
        font-size: 0.88rem;
    }

    .upload-category-row {
        max-width: none;
    }
}

.upload-dropzone small {
    color: var(--muted);
    font-weight: 600;
    font-size: 0.85rem;
}

.upload-selected-files {
    display: grid;
    gap: 8px;
}

.upload-selected-empty {
    color: var(--muted);
    font-size: 0.95rem;
    font-weight: 600;
}

.upload-selected-file-row {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 14px;

    padding: 10px 12px;
    border: 1px solid var(--border);
    border-radius: 12px;
    background: #f8fafc;
}

.upload-selected-file-info {
    min-width: 0;
}

.upload-selected-file-info strong {
    display: block;
    color: var(--text);
    font-size: 0.95rem;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.upload-selected-file-info span {
    display: block;
    margin-top: 2px;
    color: var(--muted);
    font-size: 0.85rem;
    font-weight: 600;
}

.header-actions {
    display: flex;
    align-items: center;
    gap: 10px;
    flex-wrap: wrap;
}

.booking-service-grid {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 18px;
}

.booking-service-card {
    display: flex;
    align-items: flex-start;
    gap: 16px;

    padding: 22px;
    min-height: 170px;

    background: var(--card);
    border: 1px solid var(--border);
    border-radius: 16px;
    box-shadow: var(--shadow);
}

.booking-service-icon {
    width: 48px;
    height: 48px;
    flex-shrink: 0;

    display: inline-flex;
    align-items: center;
    justify-content: center;

    border-radius: 14px;
    background: #eef2f7;
    font-size: 1.4rem;
}

.booking-service-content {
    min-width: 0;
}

.booking-service-content h2 {
    margin: 0 0 8px;
    font-size: 1.15rem;
}

.booking-service-content p {
    margin: 0 0 16px;
    color: var(--muted);
    line-height: 1.4;
}

.booking-coming-soon {
    display: inline-flex;
    padding: 8px 12px;
    border-radius: 999px;
    background: #f3f4f6;
    color: var(--muted);
    font-size: 0.9rem;
    font-weight: 700;
}

.booking-service-disabled {
    opacity: 0.7;
}

@media (max-width: 700px) {
    .customer-overview-header,
    .project-title-header {
        align-items: flex-start;
        flex-direction: column;
    }

    .header-actions {
        width: 100%;
    }

    .header-actions .btn {
        width: 100%;
    }

    .booking-service-grid {
        grid-template-columns: 1fr;
        gap: 12px;
    }

    .booking-service-card {
        padding: 16px;
        min-height: auto;
    }

    .booking-service-icon {
        width: 42px;
        height: 42px;
        font-size: 1.15rem;
    }

    .booking-service-content h2 {
        font-size: 1rem;
    }

    .booking-service-content p {
        font-size: 0.9rem;
    }
}

/* =========================================================
   BUCHUNG HEIZLASTBERECHNUNG – NEUAUFBAU
   ========================================================= */

.booking-stack {
    display: grid;
    gap: 20px;
}

.booking-frame {
    padding: 26px;
}

.booking-frame h2 {
    margin: 0 0 18px;
    font-size: 1.35rem;
}

.booking-building-toggle-card {
    padding: 12px;
    margin-bottom: 22px;
    box-shadow: none;
}

.booking-modern-toggle-item {
    margin: 0;
    cursor: pointer;
}

.booking-modern-toggle-item input {
    display: none;
}

.booking-modern-toggle-item:hover {
    background: rgba(255, 255, 255, 0.65);
}

.booking-modern-toggle-item.active:hover {
    background: white;
}

.booking-question-grid {
    display: grid;
    grid-template-columns: 1fr !important;
    gap: 16px;
    align-items: start;
    margin-bottom: 20px;
}

.booking-field-residential,
.booking-field-non-residential,
.booking-field-address {
    grid-column: 1 / -1 !important;
    grid-row: auto !important;
}

.booking-input-with-unit,
.booking-field-address textarea {
    width: 100%;
    min-height: 44px;
}

.booking-field-address textarea {
    height: 44px;
    line-height: 1.35;
    resize: vertical;
}

.booking-field {
    min-width: 0;
}

.booking-field label {
    margin-bottom: 7px;
    font-size: 0.9rem;
    font-weight: 800;
}

.booking-input-with-unit {
    display: grid;
    grid-template-columns: minmax(0, 1fr) auto;
    align-items: center;

    background: white;
    border: 1px solid var(--border);
    border-radius: 12px;
    overflow: hidden;
}

.booking-input-with-unit input {
    border: none;
    border-radius: 0;
    box-shadow: none;
}

.booking-input-with-unit span {
    padding: 0 12px;
    color: var(--muted);
    font-weight: 800;
}

.booking-service-checklist {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 12px;
}

.booking-service-check {
    display: flex;
    align-items: flex-start;
    gap: 10px;

    padding: 14px;
    border: 1px solid var(--border);
    border-radius: 14px;
    background: #f8fafc;
}

.booking-service-check > span {
    width: 24px;
    height: 24px;
    flex-shrink: 0;

    display: inline-flex;
    align-items: center;
    justify-content: center;

    border-radius: 999px;
    background: rgba(0, 110, 58, 0.10);
    color: var(--primary);
    font-weight: 900;
}

.booking-service-check strong {
    display: block;
    margin-bottom: 3px;
    font-size: 0.95rem;
}

.booking-service-check small {
    display: block;
    color: var(--muted);
    line-height: 1.35;
}

.booking-cart-frame {
    display: grid;
    gap: 18px;
}

.booking-cart-title-row {
    display: flex;
    justify-content: space-between;
    align-items: flex-start;
    gap: 16px;

    padding-bottom: 16px;
    border-bottom: 1px solid var(--border);
}

.booking-cart-title-row h2 {
    margin-bottom: 4px;
}

.booking-cart-title-row p {
    margin: 0;
}

.booking-cart-label {
    white-space: nowrap;
    padding: 6px 10px;
    border-radius: 999px;
    background: rgba(0, 110, 58, 0.08);
    color: var(--primary);
    font-size: 0.78rem;
    font-weight: 900;
}

.booking-cart-table,
.booking-cart-totals {
    display: grid;
}

.booking-cart-row {
    display: flex;
    justify-content: space-between;
    gap: 18px;

    padding: 12px 0;
    border-bottom: 1px solid var(--border);
}

.booking-cart-row span {
    color: var(--muted);
}

.booking-cart-row strong {
    white-space: nowrap;
    color: var(--text);
    font-weight: 800;
}

.booking-express-section {
    padding: 16px;
    border: 1px solid var(--border);
    border-radius: 16px;
    background: #f8fafc;
}

.booking-express-section h3 {
    margin: 0 0 12px;
    font-size: 1rem;
}

.booking-express-choice {
    display: grid;
    grid-template-columns: auto minmax(0, 1fr) auto;
    align-items: center;
    gap: 10px;

    margin: 0 0 8px;
    padding: 10px;

    border: 1px solid transparent;
    border-radius: 12px;
    cursor: pointer;
}

.booking-express-choice:last-child {
    margin-bottom: 0;
}

.booking-express-choice:hover,
.booking-express-choice.active {
    background: white;
    border-color: rgba(0, 110, 58, 0.25);
}

.booking-express-choice input {
    width: auto;
}

.booking-express-choice strong {
    display: block;
    font-size: 0.95rem;
}

.booking-express-choice small {
    display: block;
    margin-top: 2px;
    color: var(--muted);
    font-weight: 600;
}

.booking-express-choice b {
    white-space: nowrap;
    color: var(--muted);
    font-size: 0.85rem;
}

.booking-cart-total {
    border-bottom: none;
    padding-top: 16px;
    font-size: 1.08rem;
}

.booking-cart-total strong {
    color: var(--primary);
    font-size: 1.25rem;
}

.booking-checkout-button {
    width: 100%;
    padding: 13px 16px;
    text-transform: uppercase;
    letter-spacing: 0.08em;
}

.booking-cart-note {
    margin: -4px 0 0;
    color: var(--muted);
    text-align: center;
    font-size: 0.82rem;
    line-height: 1.4;
}

@media (max-width: 700px) {
    .booking-frame {
        padding: 20px;
    }

    .booking-building-toggle {
        grid-template-columns: 1fr;
    }

    .booking-building-toggle-item {
        padding: 13px;
    }

    .booking-question-grid,
    .booking-service-checklist {
        grid-template-columns: 1fr;
    }

    .booking-field-address {
        grid-column: auto;
        grid-row: auto;
    }

    .booking-cart-title-row {
        flex-direction: column;
    }

    .booking-express-choice {
        grid-template-columns: auto minmax(0, 1fr);
    }

    .booking-express-choice b {
        grid-column: 2;
        white-space: normal;
    }
}

/* =========================================================
   CHECKOUT / BUCHUNGSABSCHLUSS
   ========================================================= */

.checkout-layout {
    display: grid;
    grid-template-columns: minmax(0, 1fr) 430px;
    gap: 22px;
    align-items: start;
}

.checkout-frame {
    padding: 26px;
}

.checkout-frame h2 {
    margin: 0 0 18px;
    font-size: 1.35rem;
}

.checkout-billing-frame {
    min-width: 0;
}

.checkout-order-frame {
    position: sticky;
    top: 18px;
}

.checkout-form-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 16px;
}

.checkout-field {
    min-width: 0;
}

.checkout-field-full {
    grid-column: 1 / -1;
}

.checkout-field label {
    margin-bottom: 7px;
    font-size: 0.9rem;
    font-weight: 600;
}

.checkout-order-header {
    display: flex;
    justify-content: space-between;
    align-items: flex-start;
    gap: 14px;

    padding-bottom: 16px;
    margin-bottom: 16px;
    border-bottom: 1px solid var(--border);
}

.checkout-order-header h2 {
    margin: 0 0 4px;
}

.checkout-order-header p {
    margin: 0;
}

.checkout-order-badge {
    white-space: nowrap;
    padding: 6px 10px;
    border-radius: 999px;
    background: rgba(0, 110, 58, 0.08);
    color: var(--primary);
    font-size: 0.78rem;
    font-weight: 900;
}

.checkout-summary-box,
.checkout-total-box,
.checkout-confirm-box {
    border: 1px solid var(--border);
    border-radius: 16px;
    background: #f8fafc;
    padding: 16px;
    margin-bottom: 16px;
}

.checkout-summary-row,
.checkout-total-row {
    display: grid;
    grid-template-columns: minmax(0, 150px) minmax(0, 1fr);
    gap: 14px;
    padding: 11px 0;
    border-bottom: 1px solid var(--border);
}

.checkout-summary-row:first-child,
.checkout-total-row:first-child {
    padding-top: 0;
}

.checkout-summary-row:last-child,
.checkout-total-row:last-child {
    border-bottom: none;
    padding-bottom: 0;
}

.checkout-summary-row span,
.checkout-total-row span {
    color: var(--muted);
}

.checkout-summary-row strong,
.checkout-total-row strong {
    min-width: 0;
    text-align: right;
    font-weight: 600;
    overflow-wrap: anywhere;
}

.checkout-grand-total {
    padding-top: 15px;
    font-size: 1.08rem;
}

.checkout-grand-total strong {
    color: var(--primary);
    font-size: 1.25rem;
}

.checkout-confirm-box {
    display: grid;
    gap: 12px;
    background: white;
}

.checkout-checkbox {
    display: grid;
    grid-template-columns: 22px minmax(0, 1fr);
    gap: 12px;
    align-items: start;

    margin: 0;
    padding: 13px;

    border: 1px solid var(--border);
    border-radius: 14px;
    background: #f8fafc;

    font-weight: 400;
    line-height: 1.45;
    cursor: pointer;
}

.checkout-checkbox:hover {
    border-color: rgba(0, 110, 58, 0.30);
    background: rgba(0, 110, 58, 0.04);
}

.checkout-checkbox input {
    width: 18px;
    height: 18px;
    margin: 2px 0 0;
}

.checkout-checkbox span {
    min-width: 0;
}

.checkout-checkbox a {
    color: var(--primary);
    font-weight: 900;
}

.checkout-submit-button {
    width: 100%;
    padding: 13px 16px;
    text-transform: uppercase;
    letter-spacing: 0.06em;
}

.checkout-note {
    margin: 12px 0 0;
    color: var(--muted);
    text-align: center;
    font-size: 0.85rem;
    line-height: 1.4;
}

.checkout-error-card {
    border-color: #fecaca;
    background: #fff7f7;
}

.checkout-error-card h2 {
    color: #b91c1c;
}

.checkout-error-card ul {
    margin: 0;
    padding-left: 20px;
}

.checkout-success-card {
    max-width: 720px;
    margin: 0 auto;
    text-align: center;
    padding: 34px;
}

.checkout-success-icon {
    width: 54px;
    height: 54px;
    margin: 0 auto 18px;

    display: inline-flex;
    align-items: center;
    justify-content: center;

    border-radius: 999px;
    background: rgba(0, 110, 58, 0.10);
    color: var(--primary);
    font-size: 1.7rem;
    font-weight: 900;
}

.checkout-success-card .checkout-summary-box {
    margin: 22px 0;
    text-align: left;
}

@media (max-width: 950px) {
    .checkout-layout {
        grid-template-columns: 1fr;
    }

    .checkout-order-frame {
        position: static;
    }
}

@media (max-width: 700px) {
    .checkout-frame {
        padding: 20px;
    }

    .checkout-form-grid {
        grid-template-columns: 1fr;
    }

    .checkout-summary-row,
    .checkout-total-row {
        grid-template-columns: 1fr;
        gap: 4px;
    }

    .checkout-summary-row strong,
    .checkout-total-row strong {
        text-align: left;
    }

    .checkout-order-header {
        flex-direction: column;
    }
}

.checkout-summary-card {
    background: #ffffff;
    border: 1px solid var(--border);
    border-radius: 20px;
    padding: 24px;
    box-shadow: 0 10px 30px rgba(15, 23, 42, 0.04);
}

.checkout-summary-head {
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: 12px;
    margin-bottom: 20px;
}

.checkout-summary-head h2 {
    margin: 0;
    font-size: 1.35rem;
    font-weight: 800;
    color: var(--text);
}

.summary-badge {
    display: inline-flex;
    align-items: center;
    padding: 7px 12px;
    border-radius: 999px;
    background: #eef7f1;
    color: #006e3a;
    font-size: 0.82rem;
    font-weight: 700;
    white-space: nowrap;
}

.summary-section,
.summary-totals {
    border-top: 1px solid var(--border);
    padding-top: 14px;
}

.summary-section {
    margin-bottom: 18px;
}

.summary-row {
    display: flex;
    justify-content: space-between;
    align-items: flex-start;
    gap: 20px;
    padding: 14px 0;
    border-bottom: 1px solid #edf0f3;
}

.summary-row:last-child {
    border-bottom: none;
}

.summary-label {
    min-width: 140px;
    color: var(--muted);
    font-size: 0.98rem;
    font-weight: 500;
}

.summary-value {
    flex: 1;
    text-align: right;
    color: var(--text);
    font-size: 1.05rem;
    font-weight: 700;
    line-height: 1.35;
}

.summary-subvalue {
    display: inline-block;
    margin-top: 2px;
    color: var(--muted);
    font-size: 0.9rem;
    font-weight: 600;
}

.summary-address {
    max-width: 280px;
    line-height: 1.5;
}

.summary-totals .summary-label {
    font-size: 1rem;
}

.summary-totals .summary-value {
    font-size: 1.08rem;
}

.summary-row-total {
    margin-top: 4px;
    padding-top: 18px;
    border-top: 1px solid var(--border);
}

.summary-row-total .summary-label {
    color: var(--text);
    font-size: 1.1rem;
    font-weight: 700;
}

.summary-row-total .summary-value {
    color: #006e3a;
    font-size: 1.55rem;
    font-weight: 800;
}

.summary-row-address {
    align-items: flex-start;
}

@media (max-width: 768px) {
    .checkout-summary-head {
        flex-direction: column;
        align-items: flex-start;
    }

    .summary-row {
        flex-direction: column;
        gap: 6px;
    }

    .summary-label {
        min-width: auto;
    }

    .summary-value {
        text-align: left;
        width: 100%;
    }

    .summary-address {
        max-width: none;
    }
}

.checkout-left-column {
    display: grid;
    gap: 20px;
    min-width: 0;
}

.checkout-frame-intro {
    margin: -8px 0 18px;
    line-height: 1.45;
}

.checkout-document-options {
    display: grid;
    gap: 12px;
    margin-bottom: 18px;
}

.checkout-document-option {
    display: grid;
    grid-template-columns: 42px minmax(0, 1fr);
    gap: 12px;
    align-items: center;

    margin: 0;
    padding: 14px;

    border: 1px solid var(--border);
    border-radius: 14px;
    background: #f8fafc;

    cursor: pointer;
    transition: border-color 0.15s ease, background 0.15s ease, box-shadow 0.15s ease;
}

.checkout-document-option:hover {
    border-color: rgba(0, 110, 58, 0.30);
    background: rgba(0, 110, 58, 0.04);
}

.checkout-document-option.active {
    border-color: rgba(0, 110, 58, 0.35);
    background: rgba(0, 110, 58, 0.06);
    box-shadow: 0 0 0 3px rgba(0, 110, 58, 0.08);
}

.checkout-document-option input {
    display: none;
}

.checkout-document-icon {
    width: 42px;
    height: 42px;

    display: inline-flex;
    align-items: center;
    justify-content: center;

    border: 1px solid var(--border);
    border-radius: 14px;
    background: white;
    font-size: 1.1rem;
}

.checkout-document-option strong {
    display: block;
    margin-bottom: 3px;
    color: var(--text);
}

.checkout-document-option small {
    display: block;
    color: var(--muted);
    font-weight: 600;
    line-height: 1.35;
}

.checkout-client-email-field.is-hidden {
    display: none;
}

.energy-data-form {
    display: grid;
    gap: 20px;
}

.energy-frame {
    padding: 26px;
}

.energy-frame h2 {
    margin: 0 0 18px;
    font-size: 1.35rem;
}

.energy-form-grid {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 16px;
}

.energy-field {
    min-width: 0;
}

.energy-field-full {
    grid-column: 1 / -1;
}

.contact-name-fields,
.triple-fields {
    display: grid;
    grid-template-columns: 1fr 1fr 1fr;
    gap: 12px;
}

@media (max-width: 640px) {
    .contact-name-fields,
    .triple-fields {
        grid-template-columns: 1fr;
    }
}

.energy-check-row {
    display: grid;
    grid-template-columns: 22px minmax(0, 1fr);
    gap: 10px;
    align-items: center;

    margin: 0;
    padding: 12px;

    border: 1px solid var(--border);
    border-radius: 12px;
    background: #f8fafc;

    font-weight: 700;
}

.energy-check-row input {
    width: 18px;
    height: 18px;
    margin: 0;
}

.energy-renovation-grid {
    display: grid;
    gap: 12px;
}

.energy-renovation-row {
    display: grid;
    grid-template-columns: 170px 100px 110px minmax(0, 1fr) 110px 130px;
    gap: 12px;
    align-items: end;

    padding: 14px;
    border: 1px solid var(--border);
    border-radius: 14px;
    background: #f8fafc;
}

.energy-renovation-title {
    align-self: center;
}

.document-dropzone-grid {
    display: grid;
    gap: 16px;
    grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
}

.document-dropzone-field {
    padding: 16px;
    border: 1px solid var(--border);
    border-radius: 16px;
    background: #f8fafc;
}

.document-dropzone-field.is-done {
    border-color: rgba(0, 110, 58, 0.3);
    background: rgba(0, 110, 58, 0.05);
}

.document-dropzone-heading {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 8px;
}

.document-dropzone-badge {
    flex-shrink: 0;
    font-size: 0.8rem;
    font-weight: 700;
    color: var(--primary);
    white-space: nowrap;
}

.document-dropzone-reupload-toggle {
    margin-top: 10px;
    background: none;
    border: none;
    padding: 0;
    color: var(--primary);
    font-weight: 700;
    font-size: 0.85rem;
    cursor: pointer;
    text-decoration: underline;
}

.document-dropzone {
    display: grid;
    place-items: center;
    gap: 4px;

    min-height: 0;
    margin-top: 10px;
    padding: 8px;

    border: 2px dashed var(--border);
    border-radius: 14px;
    background: #fff;

    text-align: center;
    cursor: pointer;
    transition: border-color 0.15s ease, background 0.15s ease;
}

.document-dropzone:hover,
.document-dropzone.is-dragover {
    border-color: var(--primary);
    background: rgba(0, 110, 58, 0.06);
}

.document-dropzone-label {
    display: grid;
    place-items: center;
    gap: 6px;
    cursor: pointer;
}

.document-dropzone-icon {
    display: block;
    width: 24px;
    height: 20px;
}

.document-dropzone-hint {
    font-size: 0.8rem;
    font-weight: 600;
    color: var(--muted);
}

.document-dropzone-input {
    display: none;
}

.document-dropzone-filelist {
    list-style: none;
    margin: 8px 0 0;
    padding: 0;
    width: 100%;
    display: grid;
    gap: 6px;
}

.document-dropzone-filelist li {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    padding: 6px 10px;
    border: 1px solid var(--border);
    border-radius: 10px;
    background: #f8fafc;
    font-size: 0.85rem;
    text-align: left;
}

.document-dropzone-remove {
    background: none;
    border: none;
    color: var(--muted);
    font-size: 1.1rem;
    line-height: 1;
    cursor: pointer;
}

.document-dropzone-error {
    margin: 6px 0 0;
    color: #b91c1c;
    font-size: 0.85rem;
    font-weight: 600;
}

.document-dropzone-filelist:empty,
.document-dropzone-error:empty {
    display: none;
}

.document-manual-toggle-list {
    display: grid;
    gap: 6px;
    margin-top: 12px;
}

.document-manual-toggle-row {
    margin: 0;
}

.document-manual-toggle-button {
    background: none;
    border: none;
    padding: 0;
    color: var(--muted);
    font-size: 0.85rem;
    text-decoration: underline;
    cursor: pointer;
}

@media (max-width: 900px) {
    .energy-renovation-row {
        grid-template-columns: 1fr 1fr;
    }

    .energy-renovation-title {
        grid-column: 1 / -1;
    }
}

@media (max-width: 700px) {
    .energy-form-grid {
        grid-template-columns: 1fr;
    }

    .energy-renovation-row {
        grid-template-columns: 1fr;
    }
}

/* =========================================================
   BERECHNUNGSERGEBNISSE
   ========================================================= */

.result-upload-frame,
.result-files-frame {
    padding: 26px;
}

.result-upload-frame h2,
.result-files-frame h2 {
    margin: 0 0 18px;
    font-size: 1.35rem;
}

.result-upload-form {
    display: grid;
    gap: 18px;
}

.result-upload-grid {
    display: grid;
    grid-template-columns: minmax(0, 1.2fr) minmax(0, 1.2fr) auto;
    gap: 16px;
    align-items: end;
}

.result-field {
    min-width: 0;
}

.result-check-row {
    display: grid;
    grid-template-columns: 20px minmax(0, 1fr);
    gap: 9px;
    align-items: center;

    margin: 0;
    padding: 11px 12px;

    border: 1px solid var(--border);
    border-radius: 12px;
    background: #f8fafc;

    font-weight: 700;
}

.result-check-row input {
    width: 18px;
    height: 18px;
    margin: 0;
}

.result-file-list {
    display: grid;
    gap: 12px;
}

.result-file-card {
    display: grid;
    grid-template-columns: 48px minmax(0, 1fr) auto;
    gap: 14px;
    align-items: center;

    padding: 16px;

    border: 1px solid var(--border);
    border-radius: 16px;
    background: #f8fafc;
}

.result-file-icon {
    width: 48px;
    height: 48px;

    display: inline-flex;
    align-items: center;
    justify-content: center;

    border: 1px solid var(--border);
    border-radius: 14px;
    background: white;
    font-size: 1.25rem;
}

.result-file-content {
    min-width: 0;
}

.result-file-content strong {
    display: block;
    margin-bottom: 3px;
    font-size: 1.02rem;
}

.result-file-content span {
    display: block;
    color: var(--text);
    font-weight: 600;
    overflow-wrap: anywhere;
}

.result-file-content small {
    display: block;
    margin-top: 4px;
    color: var(--muted);
    font-weight: 600;
}

.result-file-actions {
    display: flex;
    align-items: center;
    gap: 10px;
}

.empty-result-box {
    padding: 22px;
    border: 1px dashed var(--border);
    border-radius: 16px;
    background: #f8fafc;
    text-align: center;
}

.empty-result-box p {
    margin-bottom: 0;
}

@media (max-width: 850px) {
    .result-upload-grid,
    .result-file-card {
        grid-template-columns: 1fr;
    }

    .result-file-actions {
        width: 100%;
    }

    .result-file-actions .btn {
        flex: 1;
    }
}

.result-dropzone input[type="file"],
.result-file-input,
.upload-file-input {
    display: none !important;
}

.result-dropzone {
    cursor: pointer;
}

/* =========================================================
   BELLO / INTERNER BEREICH
   ========================================================= */

.bello-login-wrapper {
    min-height: 100vh;
    display: grid;
    place-items: center;
}

.bello-login-card {
    width: min(100%, 460px);
    padding: 32px;
}

.bello-login-header {
    margin-bottom: 22px;
}

.bello-login-header h1 {
    margin: 0 0 6px;
    font-size: 2rem;
}

.bello-login-header p {
    margin: 0;
}

.bello-login-form {
    display: grid;
    gap: 16px;
}

.bello-login-button {
    width: 100%;
    margin-top: 4px;
    padding: 13px 16px;
}

.bello-login-card-wide {
    width: min(100%, 640px);
}

.bello-login-chooser-options {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 16px;
}

.bello-login-chooser-logo {
    display: flex;
    align-items: center;
    justify-content: center;
    height: 140px;
    padding: 20px;
    border: 1px solid var(--border);
    border-radius: 14px;
    background: #ffffff;
    transition: border-color 0.15s ease, box-shadow 0.15s ease;
}

.bello-login-chooser-logo:hover {
    border-color: var(--primary);
    box-shadow: 0 6px 18px rgba(0, 110, 58, 0.12);
}

.bello-login-chooser-logo img {
    max-width: 100%;
    max-height: 100%;
    object-fit: contain;
}

@media (max-width: 560px) {
    .bello-login-chooser-options {
        grid-template-columns: 1fr;
    }
}

.bello-module-grid {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 18px;
}

.bello-module-card {
    display: flex;
    align-items: flex-start;
    gap: 16px;

    min-height: 150px;
    padding: 24px;

    background: var(--card);
    border: 1px solid var(--border);
    border-radius: 16px;
    box-shadow: var(--shadow);

    color: var(--text);
    text-decoration: none;

    transition: transform 0.15s ease, border-color 0.15s ease, box-shadow 0.15s ease;
}

.bello-module-card:hover {
    transform: translateY(-2px);
    border-color: var(--primary);
    box-shadow: 0 12px 28px rgba(15, 23, 42, 0.08);
}

.bello-module-icon {
    width: 48px;
    height: 48px;
    flex-shrink: 0;

    display: inline-flex;
    align-items: center;
    justify-content: center;

    border-radius: 14px;
    background: #eef2f7;
    font-size: 1.35rem;
}

.bello-module-card h2 {
    margin: 0 0 6px;
    font-size: 1.15rem;
}

.bello-module-card p {
    margin: 0 0 12px;
    color: var(--muted);
    line-height: 1.4;
}

.bello-module-card strong {
    display: inline-flex;
    padding: 6px 10px;
    border-radius: 999px;
    background: rgba(0, 110, 58, 0.08);
    color: var(--primary);
    font-size: 0.85rem;
}

.bello-module-disabled {
    opacity: 0.65;
    cursor: not-allowed;
}

.bello-module-disabled:hover {
    transform: none;
    border-color: var(--border);
    box-shadow: var(--shadow);
}

.bello-customer-table {
    width: 100%;
    border-collapse: collapse;
}

.bello-customer-table th,
.bello-customer-table td {
    padding: 12px 10px;
    border-bottom: 1px solid var(--border);
    text-align: left;
    vertical-align: middle;
}

.bello-customer-table th {
    color: var(--muted);
    font-size: 0.9rem;
    font-weight: 800;
}

.bello-customer-table tbody tr:last-child td {
    border-bottom: none;
}

.bello-customer-table tbody tr:hover td {
    background: #f8fafc;
}

.bello-customer-table td:last-child {
    text-align: right;
}

@media (max-width: 700px) {
    .bello-module-grid {
        grid-template-columns: 1fr;
        gap: 12px;
    }

    .bello-module-card {
        min-height: auto;
        padding: 16px;
    }

    .bello-module-icon {
        width: 42px;
        height: 42px;
        font-size: 1.15rem;
    }

    .bello-customer-table {
        width: max-content;
        min-width: 620px;
    }
}

/* =========================================================
   Firmen-Logo
   ========================================================= */

.customer-overview-hero {
    padding: 26px;
}

.customer-overview-title {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 24px;
}

.customer-overview-title h1 {
    margin: 0 0 6px;
}

.customer-overview-title p {
    margin: 0;
    color: var(--muted);
    font-weight: 700;
}

.customer-company-logo-box {
    width: 180px;
    height: 72px;
    flex-shrink: 0;

    display: flex;
    align-items: center;
    justify-content: flex-end;
}

.customer-company-logo {
    display: block;
    width: 100% !important;
    height: 100% !important;
    object-fit: contain;
}

@media (max-width: 700px) {
    .customer-company-logo-box {
        width: 82px;
        height: 34px;
        justify-content: flex-start;
    }
}

/* =========================================================
   BELLO KANBAN
   ========================================================= */

.kanban-board {
    display: grid;
    grid-auto-flow: column;
    grid-auto-columns: 310px;
    gap: 18px;

    overflow-x: auto;
    padding-bottom: 18px;
}

.kanban-column {
    display: flex;
    flex-direction: column;

    min-height: 520px;
    max-height: calc(100vh - 210px);

    background: #eef2f7;
    border: 1px solid var(--border);
    border-radius: 18px;
    padding: 14px;
}

.kanban-column-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: 12px;

    padding: 4px 4px 12px;
}

.kanban-column-header h2 {
    margin: 0;
    font-size: 1rem;
}

.kanban-column-header span {
    display: inline-flex;
    align-items: center;
    justify-content: center;

    min-width: 28px;
    height: 28px;
    padding: 0 9px;

    border-radius: 999px;
    background: white;
    color: var(--muted);
    font-weight: 800;
    font-size: 0.85rem;
}

.kanban-card-list {
    display: grid;
    gap: 12px;

    overflow-y: auto;
    padding-right: 4px;
}

.kanban-card {
    display: grid;
    gap: 12px;

    padding: 14px;

    background: white;
    border: 1px solid var(--border);
    border-radius: 15px;
    box-shadow: 0 6px 18px rgba(15, 23, 42, 0.05);
}

.kanban-card > a {
    color: var(--text);
    text-decoration: none;
}

.kanban-card > a strong {
    display: block;
    margin-bottom: 4px;
    color: var(--muted);
    font-size: 0.95rem;
    font-weight: 400;
}

.kanban-card > a span {
    display: block;
    color: var(--text);
    font-size: 0.95rem;
    line-height: 1.35;
    white-space: normal;
    overflow-wrap: anywhere;
}

.kanban-card-meta {
    display: flex;
    align-items: center;
    gap: 8px;
    flex-wrap: wrap;

    color: var(--muted);
    font-size: 0.82rem;
    font-weight: 700;
}

.kanban-priority {
    display: inline-flex;
    padding: 5px 8px;
    border-radius: 999px;
    background: #f3f4f6;
}

.kanban-priority-high,
.kanban-priority-urgent {
    background: #fee2e2;
    color: #b91c1c;
}

.kanban-priority-normal {
    background: #e0f2fe;
    color: #0369a1;
}

.kanban-priority-low {
    background: #dcfce7;
    color: #166534;
}

/* Karten-Labels (crm/models.py::CardLabel) - feste Farbpalette, siehe
   CardLabel.COLOR_CHOICES. */
.kanban-label-chip {
    display: inline-flex;
    align-items: center;
    padding: 3px 10px;
    border-radius: 999px;
    font-size: 0.78rem;
    font-weight: 400;
    color: #1f2937;
}

.kanban-label-green { background: #bbf7d0; }
.kanban-label-yellow { background: #fef08a; }
.kanban-label-orange { background: #fed7aa; }
.kanban-label-red { background: #fecaca; }
.kanban-label-purple { background: #e9d5ff; }
.kanban-label-blue { background: #bfdbfe; }
.kanban-label-sky { background: #bae6fd; }
.kanban-label-lime { background: #d9f99d; }
.kanban-label-pink { background: #fbcfe8; }
.kanban-label-black { background: #d1d5db; }

.kanban-card-labels {
    display: flex;
    flex-wrap: wrap;
    gap: 4px;
}

.kanban-detail-labels {
    position: relative;
    /* Hoeher als .kanban-map-field-header (z-index: 130, siehe
       bello_kanban_card_detail.html) - beide liegen im selben
       Stacking-Context (.kanban-detail-topbar), das Popover muss darueber
       liegen koennen. */
    z-index: 200;
    display: flex;
    align-items: center;
    gap: 8px;
    flex-wrap: wrap;
    margin-top: 6px;
}

.kanban-detail-labels-edit-btn {
    border: none;
    background: none;
    color: var(--muted);
    font-size: 0.78rem;
    font-weight: 700;
    text-decoration: underline;
    cursor: pointer;
    padding: 0;
}

/* [hidden] hat dieselbe Spezifitaet wie die Klassenregel unten (author-CSS
   schlaegt sonst das UA-Default [hidden]{display:none}, siehe die
   analogen [hidden]-Regeln in bello_kanban_card_detail.html) und muss
   deshalb hier explizit erzwungen werden. */
.kanban-labels-popover[hidden],
.kanban-labels-row[hidden],
.kanban-labels-show-more[hidden] {
    display: none;
}

.kanban-labels-popover {
    position: absolute;
    top: 100%;
    left: 0;
    z-index: 500;
    margin-top: 6px;
    padding: 14px;
    display: flex;
    flex-direction: column;
    gap: 10px;
    width: 300px;
    max-height: 70vh;
    overflow-y: auto;
    background: #fff;
    border: 1px solid var(--border);
    border-radius: 10px;
    box-shadow: 0 8px 24px rgba(0, 0, 0, 0.16);
    font-weight: 400;
}

.kanban-labels-popover-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
}

.kanban-labels-popover-title {
    font-weight: 700;
    color: #1d2939;
}

.kanban-labels-popover-icon-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 26px;
    height: 26px;
    border: none;
    border-radius: 6px;
    background: none;
    color: #6b7280;
    cursor: pointer;
}

.kanban-labels-popover-icon-btn:hover {
    background: #eef1f6;
}

.kanban-labels-popover-icon-btn svg {
    width: 16px;
    height: 16px;
    fill: none;
    stroke: currentColor;
    stroke-width: 2;
    stroke-linecap: round;
    stroke-linejoin: round;
}

.kanban-labels-search {
    width: 100%;
    padding: 8px 10px;
    border: 1px solid var(--border);
    border-radius: 6px;
    font-size: 13px;
}

.kanban-labels-list {
    display: flex;
    flex-direction: column;
    gap: 6px;
}

.kanban-labels-row {
    display: flex;
    align-items: center;
    gap: 6px;
}

.kanban-label-row-btn {
    flex: 1;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 8px;
    padding: 10px 12px;
    border: none;
    border-radius: 6px;
    font-size: 13px;
    font-weight: 700;
    color: #1f2937;
    cursor: pointer;
    text-align: left;
}

.kanban-label-row-check {
    display: none;
    width: 16px;
    height: 16px;
    flex: none;
    fill: none;
    stroke: currentColor;
    stroke-width: 2.5;
    stroke-linecap: round;
    stroke-linejoin: round;
}

.kanban-label-row-btn.is-selected .kanban-label-row-check {
    display: block;
}

.kanban-label-row-edit {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex: none;
    width: 32px;
    height: 32px;
    border-radius: 6px;
    color: #6b7280;
}

.kanban-label-row-edit:hover {
    background: #eef1f6;
}

.kanban-label-row-edit svg {
    width: 16px;
    height: 16px;
    fill: none;
    stroke: currentColor;
    stroke-width: 2;
    stroke-linecap: round;
    stroke-linejoin: round;
}

.kanban-labels-show-more,
.kanban-labels-create-btn {
    display: block;
    width: 100%;
    padding: 9px;
    border: 1px solid var(--border);
    border-radius: 6px;
    background: #f8f9fb;
    color: #1d2939;
    font-size: 13px;
    text-align: center;
    text-decoration: none;
    cursor: pointer;
}

.kanban-labels-show-more:hover,
.kanban-labels-create-btn:hover {
    background: #eef1f6;
}

/* ---- Label anlegen/bearbeiten (bello_label_form.html) ------------------ */
.label-preview {
    justify-content: center;
    margin-bottom: 20px;
    padding: 18px;
    font-size: 15px;
}

.label-color-swatches {
    display: flex;
    flex-wrap: wrap;
    gap: 10px;
    margin-top: 6px;
}

.label-color-swatch {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 40px;
    height: 40px;
    border: 2px solid transparent;
    border-radius: 8px;
    cursor: pointer;
}

.label-color-swatch.is-selected {
    border-color: #1d2939;
}

.label-color-swatch-check {
    display: none;
    width: 18px;
    height: 18px;
    fill: none;
    stroke: currentColor;
    stroke-width: 3;
    stroke-linecap: round;
    stroke-linejoin: round;
    color: #1f2937;
}

.label-color-swatch.is-selected .label-color-swatch-check {
    display: block;
}

.kanban-empty {
    padding: 18px;
    border: 1px dashed var(--border);
    border-radius: 14px;
    background: rgba(255, 255, 255, 0.6);
    color: var(--muted);
    text-align: center;
    font-weight: 700;
}

@media (max-width: 700px) {
    .kanban-board {
        grid-auto-columns: 86vw;
    }

    .kanban-column {
        max-height: none;
    }
}

.kanban-comment-form {
    display: grid;
    gap: 12px;
    margin-top: 18px;
}

.kanban-checklist-list {
    display: grid;
    gap: 16px;
}

.kanban-checklist {
    padding: 16px;
    border: 1px solid var(--border);
    border-radius: 14px;
    background: #f8fafc;
}

.kanban-checklist h3 {
    margin: 0 0 12px;
}

.kanban-checklist-item {
    display: grid;
    grid-template-columns: 34px minmax(0, 1fr);
    gap: 10px;
    align-items: center;
    padding: 8px 0;
}

.kanban-checklist-toggle {
    width: 28px;
    height: 28px;
    border-radius: 999px;
    border: 1px solid var(--border);
    background: white;
    cursor: pointer;
    font-weight: 900;
}

.kanban-checklist-toggle.is-done {
    background: rgba(0, 110, 58, 0.10);
    color: var(--primary);
    border-color: rgba(0, 110, 58, 0.35);
}

.kanban-checklist-item span.is-done {
    color: var(--muted);
    text-decoration: line-through;
}

.kanban-add-column-form {
    display: grid;
    grid-template-columns: minmax(240px, 360px) auto;
    gap: 12px;
    align-items: center;
    margin-top: 18px;
}

@media (max-width: 700px) {
    .kanban-add-column-form {
        grid-template-columns: 1fr;
    }

    .kanban-add-column-form .btn {
        width: 100%;
    }
}

.kanban-add-column {
    display: flex;
    flex-direction: column;
    align-items: stretch;
    padding-top: 4px;
}

.kanban-add-column-toggle {
    display: inline-flex;
    align-items: center;
    gap: 8px;

    padding: 12px 14px;
    border: 1px dashed var(--border);
    border-radius: 14px;
    background: transparent;

    color: var(--muted);
    font-weight: 600;
    font-size: 0.95rem;
    cursor: pointer;
    transition: border-color 0.15s ease, color 0.15s ease, background 0.15s ease;
}

.kanban-card-list .kanban-add-column-toggle {
    width: 100%;
    box-sizing: border-box;
    justify-content: center;
}

.kanban-add-column-toggle span {
    font-size: 1.1rem;
    line-height: 1;
}

.kanban-add-column-toggle:hover {
    border-color: var(--primary);
    color: var(--primary);
    background: rgba(0, 110, 58, 0.05);
}

.kanban-add-column-toggle[hidden] {
    display: none;
}

.kanban-add-column-form-inline {
    display: grid;
    gap: 10px;

    padding: 14px;
    border: 1px solid var(--border);
    border-radius: 14px;
    background: #fff;
}

.kanban-add-column-form-inline[hidden] {
    display: none;
}

.kanban-add-column-form-inline input[type="text"] {
    width: 100%;
    box-sizing: border-box;
    padding: 10px 12px;
    border: 1px solid var(--border);
    border-radius: 10px;
    font-size: 0.95rem;
}

.kanban-add-column-actions {
    display: flex;
    gap: 8px;
}

/* =========================================================
   KANBAN DETAIL - LINKS INHALT, RECHTS KOMMENTARE
   ========================================================= */

.kanban-detail-layout {
    display: grid;
    grid-template-columns: minmax(0, 1fr) 380px;
    gap: 22px;
    align-items: start;

    height: calc(100vh - 190px);
    min-height: 520px;
}

.kanban-detail-main {
    display: grid;
    gap: 20px;
    min-width: 0;
    min-height: 0;

    max-height: 100%;
    overflow-y: auto;
    padding-right: 6px;
}

.kanban-comment-sidebar {
    min-height: 0;
    max-height: 100%;
    overflow-y: auto;

    position: sticky;
    top: 0;
}

.kanban-sidebar-toggle {
    display: flex;
    gap: 6px;
    margin-bottom: 16px;
    padding: 4px;

    background: #eef2f7;
    border-radius: 12px;
}

.kanban-sidebar-toggle-item {
    flex: 1 1 0;

    padding: 9px 12px;
    border: none;
    border-radius: 9px;
    background: none;

    color: var(--muted);
    font-weight: 700;
    font-size: 0.85rem;
    cursor: pointer;
    transition: background 0.15s ease, color 0.15s ease, box-shadow 0.15s ease;
}

.kanban-sidebar-toggle-item.is-active {
    background: white;
    color: var(--text);
    box-shadow: 0 6px 16px rgba(15, 23, 42, 0.08);
}

.kanban-sidebar-panel {
    display: none;
}

.kanban-sidebar-panel.is-active {
    display: block;
}

.kanban-comment-form {
    display: grid;
    gap: 12px;

    margin-bottom: 22px;
    padding-bottom: 18px;
    border-bottom: 1px solid var(--border);
}

.kanban-comment-form textarea {
    resize: vertical;
    min-height: 110px;
}

.kanban-comment-form .btn {
    justify-self: start;
}

.kanban-comment-list {
    display: grid;
    gap: 12px;
}

.kanban-comment {
    padding: 13px;
    border: 1px solid var(--border);
    border-radius: 14px;
    background: #f8fafc;
}

.kanban-comment-head {
    display: flex;
    justify-content: space-between;
    gap: 10px;
    margin-bottom: 8px;
}

.kanban-comment-head strong {
    font-size: 0.95rem;
}

.kanban-comment-head small {
    color: var(--muted);
    font-size: 0.8rem;
    white-space: nowrap;
}

.kanban-comment p {
    margin: 0;
    color: var(--text);
    line-height: 1.45;
}

@media (max-width: 950px) {
    .kanban-detail-layout {
        grid-template-columns: 1fr;
        height: auto;
        min-height: 0;
    }

    .kanban-detail-main,
    .kanban-comment-sidebar {
        max-height: none;
        overflow: visible;
        padding-right: 0;
    }

    .kanban-comment-sidebar {
        position: static;
    }
}

.kanban-description-form,
.kanban-custom-field-form,
.kanban-add-checklist-form,
.kanban-add-checklist-item-form {
    display: grid;
    gap: 12px;
}

.kanban-description-form textarea {
    min-height: 130px;
    resize: vertical;
}

.kanban-custom-field-list {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 14px;
    margin-bottom: 14px;
}

.kanban-custom-field {
    display: grid;
    gap: 6px;
}

.kanban-custom-field label {
    color: var(--muted);
    font-size: 0.88rem;
    font-weight: 800;
}

.kanban-add-checklist-form {
    grid-template-columns: minmax(0, 1fr) auto;
    margin-bottom: 18px;
}

.kanban-add-checklist-item-form {
    grid-template-columns: minmax(0, 1fr) auto;
    margin-top: 12px;
}

@media (max-width: 850px) {
    .kanban-custom-field-list,
    .kanban-add-checklist-form,
    .kanban-add-checklist-item-form {
        grid-template-columns: 1fr;
    }
}

.kanban-editor-toolbar {
    display: flex;
    align-items: center;
    gap: 6px;
    flex-wrap: wrap;
    margin-bottom: -4px;
}

.kanban-editor-button {
    min-width: 34px;
    height: 34px;
    padding: 0 10px;

    border: 1px solid var(--border);
    border-radius: 9px;
    background: white;
    color: var(--text);

    font: inherit;
    font-weight: 900;
    cursor: pointer;
}

.kanban-editor-button:hover {
    background: #f8fafc;
    border-color: rgba(0, 110, 58, 0.35);
}

.kanban-editor-button-italic {
    font-style: italic;
}

.kanban-editor-toolbar {
    display: flex;
    align-items: center;
    gap: 6px;
    flex-wrap: wrap;
}

.kanban-editor-button {
    min-width: 34px;
    height: 34px;
    padding: 0 10px;

    border: 1px solid var(--border);
    border-radius: 9px;
    background: white;
    color: var(--text);

    font: inherit;
    font-weight: 900;
    cursor: pointer;
}

.kanban-editor-button:hover {
    background: #f8fafc;
    border-color: rgba(0, 110, 58, 0.35);
}

.kanban-editor-button-italic {
    font-style: italic;
}

.kanban-rich-editor {
    min-height: 120px;
    padding: 10px;

    border: 1px solid var(--border);
    border-radius: 10px;
    background: white;

    font: inherit;
    line-height: 1.45;
    outline: none;
}

.kanban-rich-editor:focus {
    border-color: var(--primary);
    box-shadow: 0 0 0 3px rgba(0, 110, 58, 0.12);
}

.kanban-rich-editor ul {
    margin: 8px 0 8px 22px;
    padding: 0;
}

.kanban-rich-editor p {
    margin: 0 0 8px;
}

.kanban-comment-text ul {
    margin: 8px 0 8px 22px;
    padding: 0;
}

.kanban-comment-text p {
    margin: 0 0 8px;
}

/* Kommentar-Schrift kleiner */
.kanban-comment,
.kanban-comment-text,
.kanban-comment-text p,
.kanban-comment-text li {
    font-size: 0.88rem;
    line-height: 1.45;
}

.kanban-comment-meta {
    font-size: 0.78rem;
}

.kanban-comment-meta span,
.kanban-comment-head small {
    font-size: 0.72rem;
}

/* Kommentar-Editor eingeklappt */

.kanban-comment-form-collapsed {
    display: block;
}

.kanban-comment-collapsed-input {
    width: 100%;
    min-height: 42px;
    padding: 10px 12px;

    display: flex;
    align-items: center;

    border: 1px solid var(--border);
    border-radius: 10px;
    background: white;
    color: var(--muted);

    font-size: 0.9rem;
    cursor: text;
}

.kanban-comment-collapsed-input:hover {
    border-color: rgba(0, 110, 58, 0.35);
}

.kanban-comment-expanded {
    display: none;
}

.kanban-comment-form-collapsed.is-expanded .kanban-comment-collapsed-input {
    display: none;
}

.kanban-comment-form-collapsed.is-expanded .kanban-comment-expanded {
    display: grid;
    gap: 12px;
}

.kanban-comment-actions {
    display: flex;
    align-items: center;
    gap: 10px;
    flex-wrap: wrap;
}

.kanban-comment-actions .btn {
    width: auto;
}

/* =========================================================
   KANBAN DETAIL - KOMPAKTERE SCHRIFT / BUTTONS / FELDER
   Breite bleibt unverändert
   ========================================================= */

.kanban-detail-page {
    font-size: 0.9rem;
}

/* Header der Karte kompakter, aber nicht entfernen */
.kanban-detail-page .section-header {
    align-items: flex-start;
    gap: 12px;
    margin-bottom: 8px;
}

.kanban-detail-page .section-header h1 {
    font-size: 1.2rem;
    line-height: 1.25;
    margin: 0 0 2px;
}

.kanban-detail-page .section-header p {
    font-size: 0.82rem;
}

/* Cards kompakter */
.kanban-detail-page .card {
    padding: 14px;
    margin-bottom: 12px;
    border-radius: 12px;
}

.kanban-detail-page .card h2 {
    font-size: 0.98rem;
    margin: 0 0 10px;
}

.kanban-detail-page .card h3 {
    font-size: 0.88rem;
    margin: 0 0 8px;
}

/* Layoutbreite bleibt wie vorher, nur Abstände kleiner */
.kanban-detail-page .kanban-detail-layout {
    grid-template-columns: minmax(0, 1fr) 380px;
    gap: 14px;
    height: calc(100vh - 170px);
    min-height: 0;
    overflow: hidden;
}

.kanban-detail-page .kanban-detail-main {
    gap: 12px;
    padding-right: 4px;
}

.kanban-detail-page .kanban-comment-sidebar {
    padding-right: 4px;
}

/* Labels kleiner */
.kanban-detail-page label {
    margin-bottom: 4px;
    font-size: 0.76rem;
    font-weight: 700;
}

/* Inputs / Selects / Textareas kompakter */
.kanban-detail-page input,
.kanban-detail-page select,
.kanban-detail-page textarea {
    min-height: 32px;
    padding: 6px 8px;
    border-radius: 8px;
    font-size: 0.82rem;
}

/* Buttons kompakter */
.kanban-detail-page .btn {
    min-height: 32px;
    padding: 6px 10px;
    border-radius: 8px;
    font-size: 0.8rem;
    gap: 6px;
}

/* Beschreibung kompakter */
.kanban-detail-page .kanban-description-form {
    gap: 8px;
}

.kanban-detail-page .kanban-description-form textarea {
    min-height: 82px;
    rows: 3;
}

/* Felder kompakter */
.kanban-detail-page .kanban-custom-field-form {
    gap: 8px;
}

.kanban-detail-page .kanban-custom-field-list {
    gap: 9px;
    margin-bottom: 10px;
}

.kanban-detail-page .kanban-custom-field {
    gap: 4px;
}

.kanban-detail-page .kanban-custom-field label {
    font-size: 0.74rem;
}

/* Checklisten kompakter */
.kanban-detail-page .kanban-add-checklist-form {
    gap: 8px;
    margin-bottom: 10px;
}

.kanban-detail-page .kanban-checklist-list {
    gap: 9px;
}

.kanban-detail-page .kanban-checklist {
    padding: 10px;
    border-radius: 10px;
}

.kanban-detail-page .kanban-checklist-item {
    grid-template-columns: 24px minmax(0, 1fr);
    gap: 7px;
    padding: 4px 0;
    font-size: 0.8rem;
}

.kanban-detail-page .kanban-checklist-toggle {
    width: 21px;
    height: 21px;
    font-size: 0.72rem;
}

.kanban-detail-page .kanban-add-checklist-item-form {
    gap: 8px;
    margin-top: 8px;
}

/* Kommentarbereich kompakter */
.kanban-detail-page .kanban-comment-sidebar h2 {
    font-size: 0.98rem;
    margin-bottom: 10px;
}

.kanban-detail-page .kanban-comment-form {
    gap: 8px;
    margin: 0 0 12px;
    padding-bottom: 12px;
}

.kanban-detail-page .kanban-comment-collapsed-input {
    min-height: 32px;
    padding: 6px 9px;
    border-radius: 8px;
    font-size: 0.82rem;
}

.kanban-detail-page .kanban-editor-toolbar {
    gap: 5px;
}

.kanban-detail-page .kanban-editor-button {
    min-width: 29px;
    height: 29px;
    padding: 0 8px;
    border-radius: 7px;
    font-size: 0.78rem;
}

.kanban-detail-page .kanban-rich-editor {
    min-height: 76px;
    padding: 7px 8px;
    border-radius: 8px;
    font-size: 0.82rem;
    line-height: 1.35;
}

.kanban-detail-page .kanban-comment-actions {
    gap: 8px;
}

.kanban-detail-page .kanban-comment-list {
    gap: 8px;
}

.kanban-detail-page .kanban-comment {
    padding: 9px;
    border-radius: 10px;
}

.kanban-detail-page .kanban-comment-head {
    margin-bottom: 5px;
    gap: 8px;
}

.kanban-detail-page .kanban-comment-head strong {
    font-size: 0.78rem;
}

.kanban-detail-page .kanban-comment-head small {
    font-size: 0.68rem;
}

.kanban-detail-page .kanban-comment-text,
.kanban-detail-page .kanban-comment-text p,
.kanban-detail-page .kanban-comment-text li {
    font-size: 0.78rem;
    line-height: 1.35;
}

.kanban-detail-page .kanban-comment-text p {
    margin-bottom: 5px;
}

.kanban-detail-page .kanban-comment-text ul {
    margin: 5px 0 5px 18px;
}

.kanban-detail-page .topbar {
    display: none !important;
}

/* Mobil unverändert gut nutzbar */
@media (max-width: 950px) {
    .kanban-detail-page .kanban-detail-layout {
        grid-template-columns: 1fr;
        height: auto;
        overflow: visible;
    }

    .kanban-detail-page .kanban-detail-main,
    .kanban-detail-page .kanban-comment-sidebar {
        max-height: none;
        overflow: visible;
        padding-right: 0;
    }
}

/* =========================================================
   KANBAN DETAIL - GRUPPIERTE FELDER
   ========================================================= */

.kanban-field-card {
    padding: 16px !important;
}

.kanban-field-card-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 14px;
    margin-bottom: 14px;
}

.kanban-field-card-header h2 {
    margin: 0 !important;
}

.kanban-field-group-list {
    display: grid;
    gap: 14px;
}

.kanban-field-group {
    border: 1px solid var(--border);
    border-radius: 14px;
    background: #f8fafc;
    overflow: hidden;
    transition: box-shadow 0.15s ease;
}

.kanban-field-group:hover {
    box-shadow: 0 4px 14px rgba(15, 23, 42, 0.06);
}

.kanban-field-group > summary {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    padding: 14px 16px 12px;
    cursor: pointer;
    list-style: none;
    font-weight: 850;
    font-size: 0.95rem;
}

.kanban-field-group > summary::-webkit-details-marker {
    display: none;
}

.kanban-field-group > summary::after {
    content: "▾";
    flex-shrink: 0;
    color: var(--muted);
    font-size: 0.8rem;
    transition: transform 0.15s ease;
}

.kanban-field-group:not([open]) > summary::after {
    transform: rotate(-90deg);
}

.kanban-field-group-title {
    display: inline-flex;
    align-items: center;
    gap: 8px;
}

.kanban-field-group-icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;

    width: 26px;
    height: 26px;
    border-radius: 8px;
    background: white;
    border: 1px solid var(--border);

    font-size: 0.9rem;
    flex-shrink: 0;
}

.kanban-field-group > summary small {
    color: var(--muted);
    font-size: 0.78rem;
    font-weight: 750;
}

.kanban-field-grid {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 16px 14px;
    padding: 4px 16px 16px;
}

.kanban-field-grid .kanban-custom-field {
    display: grid;
    gap: 6px;
    min-width: 0;
}

.kanban-field-grid .kanban-custom-field label {
    margin: 0;
    color: var(--muted);
    font-size: 0.74rem;
    font-weight: 500;
    color: var(--muted);
    line-height: 1.15;
}

.kanban-field-grid input,
.kanban-field-grid select,
.kanban-field-grid textarea {
    width: 100%;
    min-height: 40px;
    padding: 9px 12px;
    border-radius: 10px;
    font-size: 0.88rem;
    line-height: 1.35;
    border: 1px solid var(--border);
    background: #fff;
    box-sizing: border-box;
}

.kanban-field-grid textarea {
    min-height: 72px;
    resize: vertical;
}

.kanban-custom-field-wide {
    grid-column: 1 / -1;
}

.kanban-compact-checkbox {
    display: inline-flex !important;
    align-items: center;
    gap: 8px;
    min-height: 40px;
    margin: 0 !important;
    padding: 9px 12px;
    border: 1px solid var(--border);
    border-radius: 10px;
    background: white;
    font-size: 0.88rem !important;
    font-weight: 700 !important;
}

.kanban-compact-checkbox input {
    width: 16px !important;
    height: 16px !important;
    min-height: 0 !important;
    padding: 0 !important;
}

@media (max-width: 1100px) {
    .kanban-field-grid {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }
}

@media (max-width: 700px) {
    .kanban-field-card {
        padding: 12px !important;
    }

    .kanban-field-group > summary {
        padding: 12px 14px 10px;
    }

    .kanban-field-grid {
        grid-template-columns: 1fr;
        gap: 12px;
        padding: 4px 14px 14px;
    }
}

/* =========================================================
   KANBAN DETAIL - AUTOSAVE BESCHREIBUNG / FELDER
   ========================================================= */

.kanban-description-card .kanban-description-form {
    display: none !important;
}

.kanban-description-card.is-editing .kanban-description-form {
    display: grid !important;
}

.kanban-description-card.is-editing .kanban-description-read {
    display: none;
}

.kanban-description-read {
    min-height: 42px;
    padding: 8px 10px;
    border: 1px solid transparent;
    border-radius: 9px;
    background: #f8fafc;
    cursor: text;
    font-size: 0.86rem;
    line-height: 1.4;
}

.kanban-description-read:hover {
    border-color: var(--border);
    background: white;
}

.kanban-description-form textarea {
    min-height: 90px;
}

.kanban-description-form small,
.kanban-field-autosave-status {
    font-size: 0.74rem;
}

.kanban-custom-field-form > .btn {
    display: none !important;
}

/* =========================================================
   KANBAN DETAIL - KOMMENTARE BREITER + GLEICHE SCHRIFT WIE FELDER
   ========================================================= */

/* Mehr Anteil für die Kommentarspalte */
.kanban-detail-page .kanban-detail-layout {
    grid-template-columns: minmax(0, 1fr) 470px;
}

/* Kommentartexte wie Feldereinträge */
.kanban-detail-page .kanban-comment-text,
.kanban-detail-page .kanban-comment-text p,
.kanban-detail-page .kanban-comment-text li,
.kanban-detail-page .kanban-comment-text div {
    font-family: inherit;
    font-size: 0.88rem;
    line-height: 1.35;
    font-weight: 400;
    color: var(--text);
}

/* Kommentarboxen etwas luftiger, passend zur größeren Spalte */
.kanban-detail-page .kanban-comment {
    padding: 11px 12px;
}

/* Name/Zeit etwas dezenter lassen */
.kanban-detail-page .kanban-comment-head strong {
    font-size: 0.78rem;
    font-weight: 700;
}

.kanban-detail-page .kanban-comment-head small {
    font-size: 0.72rem;
}

/* Eingabefeld für neue Kommentare ebenfalls an Feldereinträge angleichen */
.kanban-detail-page .kanban-rich-editor,
.kanban-detail-page .kanban-comment-collapsed-input {
    font-family: inherit;
    font-size: 0.88rem;
    line-height: 1.35;
}

/* Bei etwas kleineren Bildschirmen Kommentarspalte nicht zu breit werden lassen */
@media (max-width: 1200px) {
    .kanban-detail-page .kanban-detail-layout {
        grid-template-columns: minmax(0, 1fr) 430px;
    }
}

@media (max-width: 950px) {
    .kanban-detail-page .kanban-detail-layout {
        grid-template-columns: 1fr;
    }
}

/* =========================================================
   KANBAN DETAIL - DIENSTLEISTUNGS-CHECKBOXEN
   ========================================================= */

.kanban-field-group[data-field-group="dienstleistungen"] .kanban-field-grid {
    grid-template-columns: repeat(5, minmax(0, 1fr));
}

.kanban-field-group[data-field-group="dienstleistungen"] .kanban-custom-field {
    gap: 0;
}

.kanban-field-group[data-field-group="dienstleistungen"] .kanban-custom-field > label:first-child {
    display: none;
}

.kanban-compact-checkbox {
    display: flex !important;
    align-items: center;
    justify-content: flex-start;
    gap: 8px;

    min-height: 38px;
    margin: 0 !important;
    padding: 8px 10px;

    border: 1px solid var(--border);
    border-radius: 10px;
    background: white;

    color: var(--text);
    font-size: 0.86rem !important;
    font-weight: 600 !important;

    cursor: pointer;
}

.kanban-compact-checkbox:hover {
    border-color: rgba(0, 110, 58, 0.35);
    background: rgba(0, 110, 58, 0.04);
}

.kanban-compact-checkbox input {
    width: 15px !important;
    height: 15px !important;
    min-height: 0 !important;
    padding: 0 !important;
    margin: 0 !important;
}

.kanban-compact-checkbox:has(input:checked) {
    border-color: rgba(0, 110, 58, 0.40);
    background: rgba(0, 110, 58, 0.08);
    color: var(--primary);
}

/* =========================================================
   KANBAN DETAIL - DIENSTLEISTUNGEN IM HEADER
   ========================================================= */

.kanban-header-service-card {
    display: grid;
    gap: 8px;
    align-content: start;

    width: 360px;
    max-width: 100%;
    padding: 10px 12px;
    border: 1px solid var(--border);
    border-radius: 14px;
    background: #fafbfc;
}

.kanban-header-service-title {
    font-size: 0.76rem;
    font-weight: 700;
    color: var(--text);
}

.kanban-header-service-areas {
    display: flex;
    gap: 6px;
    flex-wrap: wrap;
}

.kanban-header-service-area {
    display: inline-flex;
    align-items: center;
    gap: 5px;

    padding: 4px 10px;
    border: 1px solid var(--border);
    border-radius: 999px;
    background: white;

    font-size: 0.74rem;
    font-weight: 600;
    color: var(--text);
    cursor: pointer;
    transition: border-color 0.15s ease, background 0.15s ease, color 0.15s ease;
}

.kanban-header-service-area:has(input:checked) {
    border-color: rgba(0, 110, 58, 0.45);
    background: rgba(0, 110, 58, 0.08);
    color: var(--primary);
}

.kanban-header-service-grid {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 5px;
}

.kanban-header-service-chip {
    display: inline-flex;
    align-items: center;
    gap: 4px;

    padding: 4px 6px;
    border: 1px solid var(--border);
    border-radius: 8px;
    background: white;

    font-size: 0.68rem;
    font-weight: 600;
    color: var(--muted);
    cursor: pointer;
    white-space: nowrap;
    transition: border-color 0.15s ease, background 0.15s ease, color 0.15s ease;
}

.kanban-header-service-chip:has(input:checked) {
    border-color: rgba(0, 110, 58, 0.45);
    background: rgba(0, 110, 58, 0.08);
    color: var(--primary);
}

.kanban-header-service-area input,
.kanban-header-service-chip input {
    width: 13px;
    height: 13px;
    flex-shrink: 0;
    accent-color: var(--primary);
}

@media (max-width: 900px) {
    .kanban-header-service-card {
        width: 100%;
    }
}

/* =========================================================
   KANBAN DETAIL - WEITERE FUNKTIONEN MENÜ
   ========================================================= */

.kanban-header-menu {
    position: relative;
}

.kanban-header-menu-toggle {
    display: inline-flex;
    align-items: center;
    justify-content: center;

    width: 40px;
    height: 40px;

    border: 1px solid var(--border);
    border-radius: 12px;
    background: white;
    font-size: 1.2rem;
    line-height: 1;
    cursor: pointer;
}

.kanban-header-menu-toggle:hover {
    border-color: var(--primary);
}

.kanban-header-menu-panel {
    position: absolute;
    top: calc(100% + 8px);
    right: 0;
    z-index: 20;

    display: flex;
    flex-direction: column;
    min-width: 220px;

    background: white;
    border: 1px solid var(--border);
    border-radius: 14px;
    box-shadow: 0 12px 28px rgba(15, 23, 42, 0.12);
    overflow: hidden;
}

.kanban-header-menu-panel[hidden] {
    display: none;
}

.kanban-header-menu-item {
    display: flex;
    align-items: center;
    gap: 8px;

    padding: 12px 16px;
    color: var(--text);
    text-decoration: none;
    font-weight: 600;
    font-size: 0.88rem;
}

.kanban-header-menu-item:hover {
    background: #f2f4f7;
}

.kanban-header-menu-item.has-data {
    color: var(--primary);
}

/* =========================================================
   KANBAN DETAIL - HEADER ACTIONS
   ========================================================= */

.kanban-detail-meta-row {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 8px;
    margin: 8px 0 10px;
}

.kanban-detail-assignee {
    display: inline-flex;
    align-items: center;
    gap: 6px;

    padding: 5px 10px 5px 5px;
    border-radius: 999px;
    background: #f3f4f6;

    font-size: 0.82rem;
    font-weight: 700;
    color: var(--text);
}

.kanban-detail-assignee-avatar {
    display: inline-flex;
    align-items: center;
    justify-content: center;

    width: 22px;
    height: 22px;
    border-radius: 50%;
    background: var(--primary);

    color: white;
    font-size: 0.72rem;
    font-weight: 800;
}

.kanban-detail-type-badge {
    display: inline-flex;
    align-items: center;
    gap: 6px;

    padding: 5px 10px;
    border-radius: 999px;
    background: #f3f4f6;

    font-size: 0.82rem;
    font-weight: 700;
    color: var(--muted);
}

.kanban-detail-type-badge-pi {
    background: #ede9fe;
    color: #6d28d9;
}

.kanban-detail-type-badge-cop {
    background: #dbeafe;
    color: #1d4ed8;
}

.kanban-detail-type-badge a,
.kanban-partner-link {
    color: inherit;
    font-weight: 700;
    text-decoration: none;
}

.kanban-detail-type-badge a:hover {
    text-decoration: underline;
}

.kanban-partner-link {
    color: var(--primary);
}

.kanban-partner-link {
    display: inline-block;
    padding: 10px 0;
}

.kanban-partner-picker {
    position: relative;
}

.kanban-partner-picker-input {
    width: 100%;
    box-sizing: border-box;
}

.kanban-partner-picker-results {
    position: absolute;
    top: calc(100% + 4px);
    left: 0;
    right: 0;
    z-index: 15;

    max-height: 220px;
    overflow-y: auto;

    display: flex;
    flex-direction: column;

    background: white;
    border: 1px solid var(--border);
    border-radius: 12px;
    box-shadow: 0 12px 28px rgba(15, 23, 42, 0.12);
}

.kanban-partner-picker-results[hidden] {
    display: none;
}

.kanban-partner-picker-option {
    display: block;
    width: 100%;
    padding: 10px 14px;
    border: none;
    background: none;
    text-align: left;
    font-size: 0.9rem;
    font-weight: 600;
    color: var(--text);
    cursor: pointer;
}

.kanban-partner-picker-option:hover {
    background: #f2f4f7;
}

.kanban-partner-picker-option[hidden] {
    display: none;
}

.kanban-partner-picker-clear {
    color: var(--muted);
    border-top: 1px solid var(--border);
}

.kanban-detail-move-form {
    margin-top: 8px;
}

.kanban-detail-move-form select {
    min-width: 200px;
}

.kanban-detail-header-actions {
    display: flex;
    align-items: center;
    justify-content: flex-end;
    gap: 8px;
    flex-wrap: wrap;
}

.kanban-detail-header-actions .btn {
    white-space: nowrap;
}

@media (max-width: 800px) {
    .kanban-detail-header-card .section-header {
        align-items: flex-start;
        flex-direction: column;
    }

    .kanban-detail-header-actions {
        width: 100%;
        justify-content: flex-start;
    }
}

/* =========================================================
   KANBAN DETAIL - HEADER TABS MIT DATENSTATUS
   ========================================================= */

.kanban-header-tab {
    position: relative;
}

.kanban-header-tab.has-data {
    border-color: rgba(0, 110, 58, 0.45);
    background: rgba(0, 110, 58, 0.08);
    color: var(--primary);
}

.kanban-header-tab.has-data:hover {
    background: rgba(0, 110, 58, 0.12);
}

.kanban-tab-status-dot {
    width: 7px;
    height: 7px;
    border-radius: 999px;
    background: var(--primary);
    display: inline-block;
}

/* =========================================================
   COP - ÜBERSICHT - SUCHE
   ========================================================= */

/* Customer overview: Seite fixieren, nur Projekte scrollen */

.customer-overview-page {
    overflow: hidden;
}

.customer-overview-page .page {
    height: calc(100vh - 72px);
    overflow: hidden;
    display: flex;
    flex-direction: column;
    gap: 18px;
}

.customer-overview-page .customer-overview-hero,
.customer-overview-page .customer-booking-card {
    flex: 0 0 auto;
}

.customer-project-list-card {
    flex: 1 1 auto;
    min-height: 0;
    display: flex;
    flex-direction: column;
    gap: 16px;
}

.customer-project-list-header {
    flex: 0 0 auto;
    display: flex;
    align-items: flex-end;
    justify-content: space-between;
    gap: 18px;
}

.customer-project-list-header h2 {
    margin: 0;
}

.customer-table-scroll {
    flex: 1 1 auto;
    min-height: 0;
    max-height: none;
    overflow-y: auto;
    overflow-x: auto;
    border: 1px solid var(--border);
    border-radius: 16px;
}

.customer-project-table {
    width: 100%;
    margin: 0;
    border-collapse: collapse;
}

.customer-project-table thead th {
    position: sticky;
    top: 0;
    z-index: 2;
    background: #f8fafc;
}

.customer-project-row[style*="display: none"] {
    display: none !important;
}

/* Suche direkt in der bestehenden Topbar */

.topbar {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 18px;
}

.topbar-brand {
    flex: 0 0 auto;
}

.topbar-project-search {
    margin-left: auto;
    display: flex;
    align-items: center;
    justify-content: flex-end;
    gap: 8px;
}

.topbar-project-search-button {
    width: 38px;
    height: 38px;
    border: 1px solid var(--border);
    border-radius: 999px;
    background: #ffffff;
    color: var(--text);
    cursor: pointer;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    box-shadow: 0 8px 18px rgba(15, 23, 42, 0.08);
}

.topbar-project-search-input {
    width: 0;
    min-width: 0;
    height: 38px;
    padding: 0;
    border: 0;
    opacity: 0;
    pointer-events: none;
    border-radius: 999px;
    background: #ffffff;
    color: var(--text);
    font-size: 0.92rem;
    box-shadow: 0 8px 18px rgba(15, 23, 42, 0.08);
    transition: width 0.18s ease, opacity 0.18s ease, padding 0.18s ease;
}

.topbar-project-search.is-open .topbar-project-search-input {
    width: 260px;
    padding: 0 14px;
    border: 1px solid var(--border);
    opacity: 1;
    pointer-events: auto;
}

.topbar-project-search-input:focus {
    outline: none;
    border-color: rgba(0, 110, 58, 0.45);
    box-shadow: 0 0 0 4px rgba(0, 110, 58, 0.08);
}

/* Customer overview: Seite fixieren, nur Projektliste scrollt */

body.customer-overview-page {
    height: 100vh;
    overflow: hidden;
}

.customer-overview-page .page {
    height: 100vh;
    overflow: hidden;
    display: flex;
    flex-direction: column;
}

.customer-overview-page .topbar {
    flex: 0 0 auto;
}

.customer-overview-page main {
    flex: 1 1 auto;
    min-height: 0;
    overflow: hidden;
    display: grid;
    grid-template-rows: auto auto minmax(0, 1fr);
    gap: 18px;
}

.customer-overview-page .customer-overview-hero,
.customer-overview-page .customer-booking-card {
    min-height: 0;
}

.customer-overview-page .customer-project-list-card {
    min-height: 0;
    overflow: hidden;
    display: flex;
    flex-direction: column;
    gap: 16px;
}

.customer-overview-page .customer-project-list-header {
    flex: 0 0 auto;
}

.customer-overview-page .customer-table-scroll {
    flex: 1 1 auto;
    min-height: 0;
    height: auto;
    max-height: none;
    overflow-y: auto;
    overflow-x: auto;
    border: 1px solid var(--border);
    border-radius: 16px;
}

.customer-overview-page .customer-project-table {
    width: 100%;
    margin: 0;
    border-collapse: collapse;
}

.customer-overview-page .customer-project-table thead th {
    position: sticky;
    top: 0;
    z-index: 2;
    background: #f8fafc;
}

/* =========================================================
   PARTNER LOGIN
   ========================================================= */

.partner-login-card {
    max-width: 460px;
    margin: 70px auto 0;
    padding: 32px;
}

.partner-login-header {
    margin-bottom: 24px;
}

.partner-login-header h1 {
    margin: 0 0 8px;
    font-size: 2rem;
}

.partner-login-header p {
    margin: 0;
}

.partner-login-form {
    display: grid;
    gap: 18px;
}

.partner-login-button {
    width: 100%;
    padding: 13px 16px;
}

@media (max-width: 700px) {
    .partner-login-card {
        margin-top: 24px;
        padding: 24px;
    }
}

/* =========================================================
   PARTNER LOGOUT
   ========================================================= */

.topbar-right {
    margin-left: auto;
    display: flex;
    align-items: center;
    justify-content: flex-end;
    gap: 10px;
}

.topbar-logout-form {
    margin: 0;
}

.topbar-logout-button {
    height: 38px;
    padding: 0 14px;
    border: 1px solid var(--border);
    border-radius: 999px;
    background: #ffffff;
    color: var(--text);
    font: inherit;
    font-size: 0.9rem;
    font-weight: 700;
    cursor: pointer;
    box-shadow: 0 8px 18px rgba(15, 23, 42, 0.08);
}

.topbar-logout-button:hover {
    background: #f8fafc;
    border-color: rgba(0, 110, 58, 0.35);
}

/* =========================================================
   TOPBAR - NUR FIRMENLOGO FÜR ENDKUNDEN
   ========================================================= */

.topbar-company-only {
    justify-content: center;
    min-height: 78px;
}

.topbar-company-only .topbar-brand-static {
    margin: 0 auto;
    cursor: default;
}

.topbar-company-logo {
    display: block;
    max-width: 220px;
    max-height: 58px;
    width: auto;
    height: auto;
    object-fit: contain;
}

@media (max-width: 700px) {
    .topbar-company-only {
        min-height: 66px;
    }

    .topbar-company-logo {
        max-width: 170px;
        max-height: 46px;
    }
}

/* =========================================================
   BESTELLUNG - COP-DATEN
   ========================================================= */

.checkout-partner-contact-box {
    margin: 0 0 22px;
    padding: 18px;
    border: 1px solid var(--border);
    border-radius: 16px;
    background: #f8fafc;
}

.checkout-partner-contact-box h3 {
    margin: 0 0 14px;
    font-size: 1rem;
}

.checkout-partner-contact-row {
    display: grid;
    grid-template-columns: 0.75fr 1fr 1fr;
    gap: 14px;
}

.checkout-partner-contact-row .checkout-field:nth-child(4),
.checkout-partner-contact-row .checkout-field:nth-child(5) {
    grid-column: span 1;
}

@media (min-width: 900px) {
    .checkout-partner-contact-row {
        grid-template-columns: 0.7fr 1fr 1fr 1.2fr 1fr;
    }
}

@media (max-width: 700px) {
    .checkout-partner-contact-row {
        grid-template-columns: 1fr;
    }
}

/* =========================================================
   Partner-/Kundendaten-Formulare

   Trotz des Namens auch von den Kundenseiten benutzt
   (crm/bello_kunde_profile.html, customers/kunde_profile.html).
   Die Partnerseite selbst bringt ihre eigenen Regeln mit (siehe
   Abschnitt PARTNERSEITE am Ende) - die sind auf .partner-page
   eingegrenzt und lassen diese hier unberuehrt.
   ========================================================= */

.partner-profile-form {
    display: flex;
    flex-direction: column;
    gap: 26px;
}

.partner-profile-section {
    padding-bottom: 22px;
    border-bottom: 1px solid var(--border);
}

.partner-profile-section:last-of-type {
    border-bottom: 0;
    padding-bottom: 0;
}

.partner-profile-section h2 {
    margin: 0 0 16px;
}

.partner-profile-grid {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 16px;
}

.form-field {
    display: flex;
    flex-direction: column;
    gap: 7px;
}

.form-field-full {
    grid-column: 1 / -1;
}

.form-field label {
    font-weight: 700;
    color: var(--text);
}

.form-field input,
.form-field select,
.form-field textarea {
    width: 100%;
    min-height: 42px;
    border: 1px solid var(--border);
    border-radius: 12px;
    padding: 9px 11px;
    font: inherit;
    color: var(--text);
    background: #ffffff;
}

/* Checkbox-Feld - Checkbox + Label nebeneinander statt der
   sonst uebliche label-oben/input-volle-Breite-Anordnung, sonst wuerde die
   Checkbox durch .form-field input { width:100%; ... } zu einer riesigen
   Box verzerrt. */
.form-field-checkbox {
    flex-direction: row;
    align-items: center;
    gap: 9px;
}

.form-field-checkbox input[type="checkbox"] {
    width: auto;
    min-height: 0;
    border-radius: 4px;
    padding: 0;
    accent-color: var(--primary);
}

.form-field-checkbox label {
    margin: 0;
}

.form-field textarea {
    min-height: 120px;
    resize: vertical;
}

.partner-logo-preview {
    margin-bottom: 14px;
    padding: 14px;
    border: 1px solid var(--border);
    border-radius: 16px;
    background: #f8fafc;
    display: inline-flex;
    align-items: center;
    justify-content: center;
}

.partner-logo-preview img {
    display: block;
    max-width: 220px;
    max-height: 90px;
    width: auto;
    height: auto;
    object-fit: contain;
}

.form-actions {
    display: flex;
    justify-content: flex-end;
}

@media (max-width: 800px) {
    .partner-profile-grid {
        grid-template-columns: 1fr;
    }

    .form-actions {
        justify-content: stretch;
    }

    .form-actions .btn {
        width: 100%;
    }
}

.partner-logo-editor {
    position: relative;
    display: inline-flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 12px;
}

.partner-logo-preview-box {
    width: 140px;
    height: 140px;
    border: 1px solid var(--border);
    border-radius: 18px;
    background: #f8fafc;
    display: flex;
    align-items: center;
    justify-content: center;
    overflow: hidden;
}

.partner-logo-preview-box.is-dragover {
    border-color: rgba(0, 110, 58, 0.65);
    background: rgba(0, 110, 58, 0.06);
}

.partner-logo-preview-image {
    display: block;
    max-width: 100%;
    max-height: 100%;
    width: auto;
    height: auto;
    object-fit: contain;
}

.partner-logo-placeholder {
    padding: 14px;
    text-align: center;
    color: var(--muted);
    font-weight: 700;
    font-size: 0.9rem;
}

.partner-logo-file-input {
    display: none;
}

.partner-logo-edit-button {
    min-height: 38px;
    padding: 0 16px;
    border: 1px solid var(--border);
    border-radius: 999px;
    background: #ffffff;
    color: var(--text);
    font: inherit;
    font-weight: 700;
    cursor: pointer;
    box-shadow: 0 8px 18px rgba(15, 23, 42, 0.08);
}

.partner-logo-edit-button:hover {
    background: #f8fafc;
    border-color: rgba(0, 110, 58, 0.35);
}

.partner-logo-menu {
    position: absolute;
    top: 190px;
    left: 0;
    z-index: 20;
    min-width: 230px;
    padding: 8px;
    border: 1px solid var(--border);
    border-radius: 16px;
    background: #ffffff;
    box-shadow: 0 18px 40px rgba(15, 23, 42, 0.16);
}

.partner-logo-menu-item {
    width: 100%;
    min-height: 40px;
    padding: 8px 10px;
    border: 0;
    border-radius: 10px;
    background: transparent;
    color: var(--text);
    font: inherit;
    font-weight: 700;
    text-align: left;
    cursor: pointer;
}

.partner-logo-menu-item:hover {
    background: #f8fafc;
}

.partner-logo-menu-danger {
    color: #b91c1c;
}

.partner-logo-menu-danger:hover {
    background: #fef2f2;
}

.partner-logo-drop-hint {
    margin: 0;
    color: var(--muted);
    font-size: 0.88rem;
}

/* ---------- Microsoft 365 Verbindungsstatus ---------- */

.msgraph-status-wrapper {
    display: grid;
    place-items: start center;
    padding-top: 40px;
}

.msgraph-status-card {
    width: min(100%, 480px);
}

.msgraph-status-connected {
    margin: 16px 0;
    padding: 14px 16px;
    border: 1px solid var(--border);
    border-radius: 10px;
    background: #f8fafc;
}

.msgraph-status-connected p {
    margin: 0 0 4px;
}

.msgraph-status-error {
    color: var(--danger);
}

.msgraph-status-hint {
    margin-top: 14px;
    font-size: 0.85rem;
}

.mail-template-header-actions {
    display: flex;
    gap: 10px;
    flex-wrap: wrap;
}

.mail-oft-import-row {
    display: flex;
    align-items: center;
    gap: 10px;
    flex-wrap: wrap;
    margin-top: 6px;
}

.mail-oft-import-status {
    margin: 8px 0 0;
    font-size: 0.85rem;
    color: var(--muted);
}

/* ---------- Tiptap-Editor (Mailvorlagen, Signaturen, Mail-Composer) ---------- */
/* Selbst gehostetes Tiptap-Bundle (core/static/vendor/tiptap), siehe
   core/static/js/mail_editor.js. Bewusst kleine, eigene Toolbar statt einer
   fremden Fertig-UI, damit sie sich optisch nicht von Bello unterscheidet. */

.mail-editor-wrapper {
    width: 100%;
    max-width: none;
    box-sizing: border-box;
    border: 1px solid var(--border);
    border-radius: 10px;
    overflow: hidden;
    background: var(--card);
}

.mail-editor-toolbar {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 2px;
    padding: 6px;
    background: #f8fafc;
    border-bottom: 1px solid var(--border);
}

.mail-editor-btn {
    min-width: 28px;
    height: 28px;
    padding: 0 6px;
    border: 1px solid transparent;
    border-radius: 6px;
    background: transparent;
    color: var(--text);
    font-size: 13px;
    cursor: pointer;
}

.mail-editor-btn:hover {
    background: #eef2f7;
}

.mail-editor-btn.is-active {
    background: #dbeafe;
    border-color: #bfdbfe;
}

.mail-editor-sep {
    width: 1px;
    height: 20px;
    margin: 0 4px;
    background: var(--border);
}

.mail-editor-dropdown {
    position: relative;
    display: inline-flex;
}

.mail-editor-dropdown-panel {
    position: absolute;
    top: calc(100% + 4px);
    left: 0;
    z-index: 40;
    min-width: 160px;
    padding: 8px;
    border: 1px solid var(--border);
    border-radius: 8px;
    background: var(--card);
    box-shadow: var(--shadow);
}

/* :not([hidden]) statt eines unbedingten display:flex - eine Regel ohne
   diese Absicherung wuerde (gleiche Spezifitaet, spaeter im Stylesheet als
   der Browser-Standard fuer [hidden]) das Ausblenden per hidden-Attribut
   aushebeln und die Farbpalette dauerhaft sichtbar lassen - derselbe Fehler
   wie zuvor bei .kanban-mail-panel. */
.mail-editor-color-panel:not([hidden]) {
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
    min-width: auto;
}

.mail-editor-color-swatch {
    width: 22px;
    height: 22px;
    border: 1px solid var(--border);
    border-radius: 999px;
    cursor: pointer;
    padding: 0;
}

.mail-editor-color-swatch-none {
    background: repeating-linear-gradient(45deg, #fff, #fff 3px, #f3f4f6 3px, #f3f4f6 6px) !important;
}

.mail-editor-variable-panel {
    max-height: 320px;
    overflow-y: auto;
}

.mail-editor-variable-group + .mail-editor-variable-group {
    margin-top: 8px;
    padding-top: 8px;
    border-top: 1px solid var(--border);
}

.mail-editor-variable-group-label {
    margin-bottom: 4px;
    font-size: 11px;
    font-weight: 700;
    color: var(--muted);
    text-transform: uppercase;
}

.mail-editor-variable-item {
    display: block;
    width: 100%;
    padding: 5px 6px;
    border: none;
    border-radius: 6px;
    background: transparent;
    text-align: left;
    font-size: 12.5px;
    cursor: pointer;
    white-space: nowrap;
}

.mail-editor-variable-item:hover {
    background: #eef2f7;
}

.mail-editor-fontsize-control {
    align-items: center;
}

.mail-editor-fontsize-input {
    width: 44px;
    height: 28px;
    padding: 0 4px;
    border: 1px solid var(--border);
    border-radius: 6px 0 0 6px;
    background: var(--card);
    color: var(--text);
    font-size: 13px;
    text-align: center;
}

.mail-editor-fontsize-input::-webkit-outer-spin-button,
.mail-editor-fontsize-input::-webkit-inner-spin-button {
    -webkit-appearance: none;
    margin: 0;
}

.mail-editor-fontsize-caret {
    min-width: 20px;
    margin-left: -1px;
    border-radius: 0 6px 6px 0;
}

/* Bild mit Ziehgriff (siehe mail_editor.js::createResizableImageExtension) -
   der Griff ist nur bei Hover/Auswahl sichtbar, damit ein eingefuegtes Logo
   im Ruhezustand wie gewoehnlicher Mailinhalt wirkt. */
.mail-editor-image-wrap {
    position: relative;
    display: inline-block;
    line-height: 0;
}

.mail-editor-image-wrap img {
    display: block;
    max-width: 100%;
    height: auto;
}

.mail-editor-image-wrap.is-selected {
    outline: 2px solid #1D4ED8;
    outline-offset: 2px;
}

.mail-editor-image-resize-handle {
    position: absolute;
    right: -5px;
    bottom: -5px;
    width: 12px;
    height: 12px;
    border: 2px solid #fff;
    border-radius: 999px;
    background: #1D4ED8;
    cursor: nwse-resize;
    opacity: 0;
    transition: opacity .1s ease;
}

.mail-editor-image-wrap:hover .mail-editor-image-resize-handle,
.mail-editor-image-wrap.is-selected .mail-editor-image-resize-handle {
    opacity: 1;
}

.mail-editor-content {
    /* Bewusst KEINE feste Breite (frueher 640px, passend zur tatsaechlichen
       Mailbreite inkl. Zellenpadding) - der Editor soll den kompletten
       verfuegbaren Rahmen ausnutzen. Der reale Zeilenumbruch der
       versendeten Mail bleibt trotzdem bei 608px Text (siehe
       crm/mail_html.py::MAIL_TEXT_WIDTH_PX/wrap_mail_html). */
    width: 100%;
    padding: 8px;

    box-sizing: border-box;

    font-family: Calibri, Arial, Helvetica, sans-serif;
    font-size: 11pt;
    line-height: normal;
    color: #1f2933;

    max-height: 60vh;
    overflow-y: auto;
}

.mail-editor-content.ProseMirror,
.mail-editor-content .ProseMirror {
    width: 100%;
    max-width: none;
    box-sizing: border-box;

    margin: 0;
    padding: 6px 0;

    outline: none;

    font-family: Calibri, Arial, Helvetica, sans-serif;
    font-size: 11pt;
    line-height: normal;
}

.mail-editor-content p {
    margin: 0;
    padding: 0;
    line-height: normal;
}

/* Calibri Light zieht ein Leerzeichen, das direkt vor einem
   Bindestrich steht, per Kerning auf etwa ein Fuenftel zusammen (0,6px
   statt 3px bei 10pt) - in einer Signaturzeile wie "INFENSA - Institut
   fuer ..." sieht es dann aus, als fehlte das Leerzeichen ganz. Nur der
   Bindestrich ist betroffen, Gedanken- und Geviertstrich nicht.

   Outlook macht das nicht: die versendete Mail zeigt den Abstand
   normal. Diese Regel gleicht deshalb nur die ANZEIGE an das an, was
   beim Empfaenger ankommt - sie steht in app.css und wird nie
   mitgesendet.

   Bewusst nur dort, wo Calibri Light ausdruecklich gesetzt ist: ueberall
   sonst bleibt das Kerning an, damit der Editor weiter so umbricht wie
   die Mail. */
.mail-editor-content [style*="Calibri Light"] {
    font-kerning: none;
}

.mail-editor-content ul,
.mail-editor-content ol {
    /* Dieselben Werte, die im versendeten HTML gelten: dort steht am <ul>
       keine eigene Angabe, es zaehlen die Standardwerte des Browsers
       (40px Einzug, 1em Abstand oben/unten) - der Editor soll zeigen, was
       beim Empfaenger ankommt.

       Vorher standen hier 6px. Die Aufzaehlungszeichen sitzen im Einzug,
       bei 6px lagen sie ausserhalb des sichtbaren Bereichs und wurden
       abgeschnitten. */
    margin: 1em 0;
    padding-left: 40px;
}

.mail-editor-content hr {
    border: none;
    border-top: 1px solid var(--border);
    margin: 0;
}

/* Kompakte Metadaten-Zeilen im Mail-Composer. Die passenden Felder werden
   von mail_editor.js anhand ihrer Beschriftung markiert, damit diese Regeln
   unabhaengig von der umgebenden Template-Struktur funktionieren. */
.mail-composer-form--compact .mail-composer-compact-field {
    min-height: 0 !important;
    margin-top: 0 !important;
    margin-bottom: 6px !important;
    padding-top: 0 !important;
    padding-bottom: 0 !important;
    gap: 3px !important;
}

.mail-composer-form--compact .mail-composer-compact-label {
    margin: 0 0 2px !important;
    font-size: 11px !important;
    line-height: 1.15 !important;
}

.mail-composer-form--compact .mail-composer-compact-control {
    min-height: 30px !important;
    height: 30px !important;
    padding-top: 4px !important;
    padding-bottom: 4px !important;
    font-size: 13px !important;
    line-height: 20px !important;
}

.mail-composer-form--compact .mail-composer-compact-action {
    min-height: 28px !important;
    padding-top: 3px !important;
    padding-bottom: 3px !important;
    line-height: 20px !important;
}

.mail-variable-chip {
    display: inline-block;
    padding: 0 4px;
    border-radius: 4px;
    background: #eef2ff;
    color: #3730a3;
    font-weight: 600;
    white-space: nowrap;
}

.mail-composer-primary-field--from,
.mail-composer-primary-field--to,
.mail-composer-primary-field--template {
    width: 100%;
}


/* =========================================================
   CHECKLISTENVORLAGEN

   Gleiche Bildsprache wie eine Checkliste auf der Karte
   (Nutzerwunsch), aber bewusst mit eigenem Klassenpraefix:
   die .kanban-checklist-*-Regeln leben in den <style>-Bloecken
   von bello_kanban_card_detail.html, sind dort mit !important
   auf den dortigen Rahmen zugeschnitten und stehen hier gar
   nicht zur Verfuegung. Wiederverwenden hiesse, sie erst aus
   einem Dickicht von Ueberschreibungen herauszuloesen - das
   Risiko fuer die Kartenseite waere groesser als der Nutzen.
   ========================================================= */

.checklist-template-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));
    gap: 16px;
}

.checklist-template-card {
    display: flex;
    flex-direction: column;

    border: 1px solid #e3e8e5;
    border-radius: 14px;
    background: #fff;
    box-shadow: 0 1px 2px rgba(15, 23, 42, .04);

    overflow: hidden;
}

.checklist-template-head {
    display: flex;
    align-items: center;
    gap: 10px;

    padding: 12px 14px 10px;
    border-bottom: 1px solid #f0f3f1;
}

.checklist-template-name {
    flex: 1 1 auto;
    min-width: 0;
    margin: 0;

    color: #1d2b24;
    font-size: 14px;
    font-weight: 700;
    line-height: 1.3;

    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.checklist-template-count {
    flex: 0 0 auto;

    padding: 2px 8px;

    border-radius: 999px;
    background: #e6f4ec;

    color: #0c6b41;
    font-size: 10.5px;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
}

.checklist-template-count.is-empty {
    background: #f1f4f2;
    color: #78837e;
}

.checklist-template-items {
    flex: 1 1 auto;
    padding: 10px 14px 12px;
}

.checklist-template-item,
.checklist-template-row {
    display: flex;
    align-items: flex-start;
    gap: 9px;

    padding: 4px 0;
}

/* Griff zum Verschieben - erscheint beim Überfahren der Zeile, damit
   die Liste im Ruhezustand ruhig bleibt. Beim Tabben ist er trotzdem
   sofort da (:focus-visible), sonst waere er ohne Maus unauffindbar. */
.checklist-template-row-grip {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex: none;

    width: 20px;
    height: 24px;
    margin-top: 1px;
    padding: 0;

    border: 0;
    border-radius: 5px;
    background: transparent;

    color: #b6c0ba;
    cursor: grab;

    opacity: 0;
    transition: opacity .12s ease, color .12s ease, background-color .12s ease;
}

.checklist-template-row:hover .checklist-template-row-grip,
.checklist-template-row-grip:focus-visible {
    opacity: 1;
}

.checklist-template-row-grip:hover {
    background: #f2f6f4;
    color: #5d6a64;
}

.checklist-template-row-grip svg {
    width: 15px;
    height: 15px;
    fill: currentColor;
    stroke: none;
}

.checklist-template-row.is-dragging {
    opacity: .45;
    cursor: grabbing;
}

.checklist-template-row.is-dragging .checklist-template-row-grip {
    cursor: grabbing;
}

.checklist-template-item .checklist-template-box {
    margin-top: 2px;
}

/* Das Kaestchen ist hier rein dekorativ - in einer Vorlage gibt es
   nichts abzuhaken, den Zustand tragen erst die Kopien auf den
   Karten. Optisch aber bewusst identisch zum offenen Punkt auf der
   Karte, damit erkennbar ist, was daraus wird. */
.checklist-template-box {
    flex: 0 0 auto;

    width: 17px;
    height: 17px;

    border: 1.5px solid #c2cdc7;
    border-radius: 5px;
    background: #fff;
}

.checklist-template-text {
    flex: 1 1 auto;
    min-width: 0;

    color: #2a3833;
    font-size: 12.5px;
    line-height: 1.45;

    overflow-wrap: anywhere;
}

.checklist-template-text strong {
    font-weight: 700;
    color: #16241e;
}

.checklist-template-empty {
    margin: 0;

    color: #9aa5a0;
    font-size: 12px;
    font-style: italic;
}

.checklist-template-actions {
    display: flex;
    align-items: center;
    gap: 8px;

    padding: 10px 14px;
    border-top: 1px solid #f0f3f1;
    background: #fbfcfb;
}

/* Beide Aktionen stehen nebeneinander. Das Loeschen liegt in einem
   eigenen <form> (POST + CSRF) - ohne diese Regel waere das ein
   Blockelement und die Knoepfe stuenden untereinander. */
.checklist-template-actions form {
    display: inline-flex;
    margin: 0;
}

.checklist-template-actions .btn {
    padding: 5px 12px;
    font-size: 12px;
}

.checklist-template-delete-btn:hover {
    border-color: #e0b4ae;
    background: #fdeceb;
    color: #c0392b;
}


/* ---------- Bearbeiten ---------- */

/* "Punkte" klebte direkt unter dem Namensfeld - der Abschnitt setzt sich
   jetzt sichtbar ab. */
.checklist-template-points {
    margin-top: 22px;
}

.checklist-template-points > label {
    margin-bottom: 8px;
}

.checklist-template-editor {
    margin-top: 4px;
    padding: 8px 10px;

    border: 1px solid #e3e8e5;
    border-radius: 12px;
    background: #fff;
}

/* Mit .form-field davor, weil die generische Regel
   ".form-field input { width:100%; min-height:42px; border-radius:12px }"
   sonst gewinnt (gleiche Klassenzahl, aber zusaetzlich ein Elementtyp) -
   die Zeilen wuerden dadurch so hoch wie ein normales Eingabefeld und
   saehen nicht mehr nach Checklistenpunkten aus. */
.form-field .checklist-template-input {
    flex: 1 1 auto;
    width: auto;
    min-width: 0;

    min-height: 32px;
    padding: 5px 9px;

    border: 1px solid transparent;
    border-radius: 7px;
    background: transparent;

    color: #2a3833;
    font: inherit;
    font-size: 12.5px;
    line-height: 1.45;

    /* Ein <textarea>, damit ein Punkt mehrzeilig sein darf. Es waechst
       per JS mit seinem Inhalt (autoGrow), deshalb kein Anfasser zum
       Ziehen und keine eigene Bildlaufleiste - beides wuerde nur mit der
       automatischen Hoehe konkurrieren. */
    resize: none;
    overflow: hidden;
}

/* Die Zeile richtet sich oben aus, sobald ein Punkt mehrzeilig wird -
   sonst rutschten Kaestchen und Papierkorb in die Mitte des Textes. */
.checklist-template-row {
    align-items: flex-start;
}

/* Eingabefeld und Vorschau liegen uebereinander in derselben Spalte.
   Immer nur eines von beiden ist sichtbar (siehe das <script> in
   bello_checklist_template_form.html) - sichtbar ist standardmaessig das
   Eingabefeld, damit die Seite ohne JavaScript benutzbar bleibt. */
.checklist-template-field {
    flex: 1 1 auto;
    min-width: 0;
}

.checklist-template-field.is-preview .checklist-template-input {
    display: none;
}

/* Exakt dieselben Innenabstaende und Schriftmasse wie das Eingabefeld,
   damit der Text beim Umschalten nicht springt. */
.checklist-template-preview {
    min-height: 32px;
    padding: 5px 10px;

    border: 1px solid transparent;
    border-radius: 7px;

    color: #2a3833;
    font-size: 12.5px;
    line-height: 1.45;

    cursor: text;
    overflow-wrap: anywhere;
}

.checklist-template-preview:hover {
    border-color: #e6ebe8;
}

.checklist-template-preview strong {
    font-weight: 700;
    color: #16241e;
}

.checklist-template-row .checklist-template-box,
.checklist-template-row .checklist-template-row-remove {
    margin-top: 3px;
}

.form-field .checklist-template-input:hover {
    border-color: #e6ebe8;
}

.form-field .checklist-template-input:focus {
    border-color: #6faa8c;
    background: #fff;
    outline: none;
}

.checklist-template-row-remove {
    flex: 0 0 auto;

    display: inline-flex;
    align-items: center;
    justify-content: center;

    width: 26px;
    height: 26px;
    padding: 0;

    border: 0;
    border-radius: 6px;
    background: transparent;

    color: #b4bdb8;

    cursor: pointer;
    opacity: 0;
    transition: opacity .12s ease, color .12s ease, background-color .12s ease;
}

.checklist-template-row:hover .checklist-template-row-remove,
.checklist-template-row-remove:focus-visible {
    opacity: 1;
}

.checklist-template-row-remove:hover {
    background: #fdeceb;
    color: #c0392b;
}

.checklist-template-row-remove svg {
    width: 14px;
    height: 14px;

    fill: none;
    stroke: currentColor;
    stroke-width: 1.7;
    stroke-linecap: round;
    stroke-linejoin: round;
}

/* .form-field ist eine Flex-Spalte - ohne align-self zoege der Knopf
   sich ueber die gesamte Formularbreite. */
.checklist-template-add {
    align-self: flex-start;

    margin-top: 8px;
    padding: 5px 12px;
    font-size: 12px;
}


/* =========================================================
   AUTOMATISIERUNGEN – ÜBERSICHT

   Statt Tabellenspalten ("Auslösung: Leistung hinzugefügt",
   "Aktionen: 2") je Automation der ausformulierte Ablauf:
   erst die Wenn-Zeile, darunter je Aktion eine Dann-Zeile.
   Erst damit sieht man einer Regel an, was sie tut, ohne sie
   zu öffnen.
   ========================================================= */

.automation-overview {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(420px, 1fr));
    gap: 16px;
}

.automation-overview-card {
    display: flex;
    flex-direction: column;

    border: 1px solid #e3e8e5;
    border-radius: 14px;
    background: #fff;
    box-shadow: 0 1px 2px rgba(15, 23, 42, .04);
}

/* Kein "overflow: hidden" an der Karte: es hielt zwar die farbigen
   Flaechen von Kopf und Fuss in den runden Ecken, schnitt aber auch die
   aufgeklappte Board-Auswahl ab, die ueber den Kartenrand hinausragt.
   Stattdessen runden Kopf und Fuss ihre eigenen aeusseren Ecken. */
.automation-overview-head {
    border-radius: 13px 13px 0 0;
}

.automation-overview-actions {
    border-radius: 0 0 13px 13px;
}

.automation-overview-card.is-inactive {
    background: #fbfbfa;
}

.automation-overview-head {
    display: flex;
    align-items: center;
    gap: 10px;

    padding: 12px 14px 10px;
    border-bottom: 1px solid #f0f3f1;
}

.automation-overview-name {
    flex: 1 1 auto;
    min-width: 0;

    color: #1d2b24;
    font-size: 14px;
    font-weight: 700;
    text-decoration: none;

    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.automation-overview-name:hover {
    color: #036b3a;
}

.automation-overview-badge {
    flex: 0 0 auto;

    padding: 2px 8px;

    border-radius: 999px;
    background: #f1f4f2;

    color: #78837e;
    font-size: 10.5px;
    font-weight: 700;
}

.automation-overview-flow {
    flex: 1 1 auto;
    padding: 10px 14px 12px;
}

.automation-overview-step {
    display: flex;
    align-items: baseline;
    gap: 9px;

    padding: 3px 0;
}

/* Feste Breite, damit "Wenn" und "Dann" untereinander fluchten und der
   Ablauf als Spalte lesbar bleibt. */
.automation-overview-kind {
    flex: 0 0 38px;

    color: #78837e;
    font-size: 10.5px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: .03em;
}

.automation-overview-text {
    flex: 1 1 auto;
    min-width: 0;

    color: #2a3833;
    font-size: 12.5px;
    line-height: 1.45;

    overflow-wrap: anywhere;
}

.automation-overview-actions {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 8px;

    padding: 10px 14px;
    border-top: 1px solid #f0f3f1;
    background: #fbfcfb;
}

.automation-overview-actions form {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    margin: 0;
}

.automation-overview-actions .btn {
    padding: 5px 12px;
    font-size: 12px;
}

/* Ohne feste Breite fiel die Auswahl auf die Breite ihres Pfeils
   zusammen: .form-control bringt "width: 100%" mit, und in der
   Flex-Zeile neben dem Knopf schrumpft das bis auf den Inhalt herunter.
   Deshalb hier ausdruecklich nicht schrumpfen lassen. */
.automation-overview-copy select {
    flex: 0 0 auto;
    width: auto;
    min-width: 200px;
    max-width: 280px;

    min-height: 32px;
    padding: 5px 9px;

    border: 1px solid #e0e6e3;
    border-radius: 8px;

    font-size: 12.5px;
}

.automation-overview-delete:hover {
    border-color: #e0b4ae;
    background: #fdeceb;
    color: #c0392b;
}


/* ---------- Automatisierungen: Regeln vs. Buttons ---------- */

/* Eine Segmentleiste statt zweier freistehender Pillen: die beiden
   Bereiche schliessen sich gegenseitig aus, das soll man der Form
   ansehen. Der Rahmen umschliesst beide, das aktive Segment hebt sich
   weiss darin ab. */
.automation-kind-switch {
    display: inline-flex;
    gap: 3px;

    margin-top: 16px;
    padding: 3px;

    border: 1px solid #e3e8e5;
    border-radius: 999px;
    background: #f3f6f4;
}

.automation-kind-btn {
    display: inline-flex;
    align-items: center;
    gap: 8px;

    padding: 6px 15px;

    border: 0;
    border-radius: 999px;
    background: transparent;

    color: #6b7671;
    font: inherit;
    font-size: 13px;
    font-weight: 600;

    cursor: pointer;
    transition: background-color .15s ease, color .15s ease, box-shadow .15s ease;
}

.automation-kind-btn:hover {
    color: #2a3833;
}

.automation-kind-btn.is-active {
    background: #fff;
    color: #036b3a;
    box-shadow: 0 1px 2px rgba(15, 23, 42, .10);
}

.automation-kind-btn:focus-visible {
    outline: 2px solid #6faa8c;
    outline-offset: 1px;
}

.automation-kind-count {
    min-width: 20px;
    padding: 1px 6px;

    border-radius: 999px;
    background: #e6eae8;

    color: #78837e;
    font-size: 11px;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
    text-align: center;
}

.automation-kind-btn.is-active .automation-kind-count {
    background: #e6f4ec;
    color: #0c6b41;
}


/* Gemeinsamer Rahmen der beiden Bereiche - seine Höhe wird beim
   Umschalten animiert (siehe Skript in bello_automation_list.html).

   Abgeschnitten wird NUR waehrend des Gleitens: dauerhaft gesetzt
   verschwand die aufgeklappte Board-Auswahl am unteren Rand, weil sie
   ueber den Rahmen hinausragt. */
.automation-kind-panels.is-animating {
    overflow: hidden;
}

[data-automation-kind-panel][hidden] {
    display: none;
}


/* ---------- Schiebeschalter ----------

   Die Spur wird an zwei Stellen gebraucht: im Baukasten um eine echte
   Checkbox herum (automation_builder.css) und hier in der Übersicht als
   Knopf, der direkt umschaltet. Deshalb steht das gemeinsame Aussehen
   hier - app.css lädt auf beiden Seiten. */

.automation-switch-track {
    position: relative;

    flex: 0 0 auto;
    display: block;
    width: 38px;
    height: 22px;

    border-radius: 999px;
    background: #d8ded9;

    transition: background-color .15s ease;
}

.automation-switch-track::after {
    content: "";

    position: absolute;
    top: 3px;
    left: 3px;

    width: 16px;
    height: 16px;

    border-radius: 50%;
    background: #fff;
    box-shadow: 0 1px 2px rgba(15, 23, 42, .25);

    transition: transform .15s ease;
}


/* Übersicht: der Schalter IST der Knopf - ein Klick schaltet sofort um,
   kein Formular zum Ausfüllen dahinter. */
.automation-switch-button {
    display: inline-flex;
    align-items: center;

    padding: 0;

    border: 0;
    background: none;

    cursor: pointer;
}

.automation-switch-button.is-on .automation-switch-track {
    background: #0c8a4f;
}

.automation-switch-button.is-on .automation-switch-track::after {
    transform: translateX(16px);
}

.automation-switch-button:focus-visible .automation-switch-track {
    outline: 2px solid #6faa8c;
    outline-offset: 2px;
}

.automation-overview-active {
    display: inline-flex;
    margin: 0;
}


/* ---------- Kopieren: Zielboard erst auf Klick ---------- */

.automation-overview-copy {
    position: relative;
}

/* Die Karte mit der offenen Auswahl legt sich ueber ihre Nachbarn -
   ohne das schoebe sich die naechste Karte im Raster darueber. */
.automation-overview-copy[open] {
    z-index: 30;
}

.automation-overview-copy > summary {
    display: inline-flex;
    align-items: center;
    justify-content: center;

    padding: 5px 12px;

    font-size: 12px;

    list-style: none;
    cursor: pointer;
}

/* Das Standard-Dreieck von <details> würde den Knopf verunstalten. */
.automation-overview-copy > summary::-webkit-details-marker {
    display: none;
}

.automation-overview-copy[open] > summary {
    border-color: #6faa8c;
    background: #eef6f1;
    color: #036b3a;
}

/* Über den anderen Knöpfen aufklappen statt sie zu verschieben - sonst
   springt die ganze Zeile, sobald man die Auswahl öffnet. */
.automation-overview-copy-form {
    position: absolute;
    z-index: 20;
    top: calc(100% + 6px);
    left: 0;

    display: flex;
    align-items: center;
    gap: 6px;

    padding: 8px;

    border: 1px solid #dbe2de;
    border-radius: 10px;
    background: #fff;
    box-shadow: 0 6px 18px rgba(15, 23, 42, .12);

    white-space: nowrap;
}


/* =========================================================
   LOG (Karte und Board)
   ========================================================= */

/* Schalter ueber der Liste: Zeitraum, auf der Profilseite zusaetzlich
   das Board. */
.activity-log-filters {
    display: flex;
    flex-direction: column;
    gap: 6px;

    margin-bottom: 10px;
}

.activity-log-filter {
    display: flex;
    flex-wrap: wrap;
    gap: 4px;
}

/* Die Boardzeile tritt hinter die Zeitraumzeile zurueck: der Zeitraum ist
   die haeufigere Frage, das Board die genauere. */
.activity-log-filter--boards .activity-log-filter-option {
    border-style: dashed;
}

.activity-log-filter--boards .activity-log-filter-option.is-active {
    border-style: solid;
}

.activity-log-filter-option {
    padding: 4px 9px;

    border: 1px solid #e2e8e4;
    border-radius: 999px;
    background: #fff;

    color: #5d6a64;
    font-size: 11.5px;
    font-weight: 600;
    text-decoration: none;
    white-space: nowrap;
}

.activity-log-filter-option:hover {
    border-color: #b9d2c5;
    color: #036b3a;
}

.activity-log-filter-option.is-active {
    border-color: #036b3a;
    background: #036b3a;
    color: #fff;
}

/* Tagesblock */
.activity-log-day + .activity-log-day {
    margin-top: 14px;
}

.activity-log-day-head {
    display: flex;
    align-items: baseline;
    gap: 8px;

    margin: 0 0 2px;
    padding-bottom: 4px;
    border-bottom: 1px solid #e8ece9;

    color: #3c4a44;
    font-size: 11.5px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: .03em;
}

.activity-log-day-week {
    color: #9aa5a0;
    font-size: 10.5px;
    font-weight: 600;
    letter-spacing: 0;
    text-transform: none;
}

.activity-log {
    margin: 0;
    padding: 0;
    list-style: none;
}

.activity-log-entry {
    padding: 9px 0;
    border-bottom: 1px solid #f0f3f1;
}

.activity-log-entry:last-child {
    border-bottom: 0;
}

.activity-log-meta {
    display: flex;
    align-items: baseline;
    gap: 8px;

    margin-bottom: 2px;

    color: #78837e;
    font-size: 11px;
    font-variant-numeric: tabular-nums;
}

/* Der Name fuehrt auf die Profilseite der Person. Bewusst ohne
   Link-Optik in Ruhe: die Zeile ist eine Kopfzeile, kein Fliesstext, und
   ein blauer Unterstrich je Eintrag machte die Liste unruhig. */
.activity-log-actor {
    color: inherit;
    font-weight: 700;
    text-decoration: none;
}

a.activity-log-actor:hover {
    color: #036b3a;
    text-decoration: underline;
}

.activity-log-action {
    color: #2a3833;
    font-size: 13px;
    line-height: 1.45;

    overflow-wrap: anywhere;
}

/* Board und Karte nebeneinander: auf der Profilseite geht die Liste ueber
   alle Boards, dort sagt erst beides zusammen, wo der Eintrag hingehoert. */
.activity-log-refs {
    display: flex;
    flex-wrap: wrap;
    align-items: baseline;
    gap: 4px 10px;

    margin-top: 3px;
}

.activity-log-card,
.activity-log-board {
    display: inline-block;

    color: #036b3a;
    font-size: 11.5px;
    text-decoration: none;
}

.activity-log-card:hover,
.activity-log-board:hover {
    text-decoration: underline;
}

/* Das Board tritt hinter die Karte zurueck - gesucht wird meistens die
   Karte, das Board ordnet sie nur ein. */
.activity-log-board {
    color: #78837e;
}


/* ---------- Profilseite einer Person ---------- */

/* Kopf und Liste in EINER Karte - die Zahl im Kopf gehoert zu genau der
   Liste darunter. Getrennt wird mit einer Linie, nicht mit einem zweiten
   Rahmen. */
.user-profile {
    padding: 0;
    overflow: hidden;
}

.user-profile-head {
    display: flex;
    align-items: center;
    gap: 14px;

    padding: 18px 20px;
    border-bottom: 1px solid #edf1ef;
    background: linear-gradient(180deg, #fbfcfb 0%, #ffffff 100%);
}

.user-profile-title {
    min-width: 0;
    flex: 1 1 auto;
}

.user-profile-title h1 {
    margin: 0;

    font-size: 20px;
    line-height: 1.25;

    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.user-profile-self {
    display: inline-block;
    vertical-align: 2px;

    margin-left: 6px;
    padding: 2px 8px;

    border-radius: 999px;
    background: #eef2f0;

    color: #68736d;
    font-size: 11px;
    font-weight: 600;
}

.user-profile-subline {
    display: flex;
    align-items: baseline;
    flex-wrap: wrap;
    gap: 6px;

    margin: 3px 0 0;

    color: #78837e;
    font-size: 12px;
}

.user-profile-dot {
    color: #c3ccc7;
}

/* Dasselbe Kuerzel wie auf den Karten, nur groesser - man soll die Seite
   als die des Kuerzels wiedererkennen, das man eben angeklickt hat. Der
   helle Ring hebt es von der Kopfflaeche ab, ohne es zu umranden. */
.user-profile-avatar {
    display: inline-flex;
    align-items: center;
    justify-content: center;

    width: 52px;
    height: 52px;
    flex: 0 0 52px;

    border-radius: 50%;
    background: #1f2933;
    box-shadow: 0 0 0 4px #eef2f0;

    color: #fff;
    font-size: 17px;
    font-weight: 700;
    letter-spacing: .03em;
}

.user-profile-back {
    flex: none;
}

.user-profile-log {
    padding: 14px 20px 18px;
}

/* Die Eintraege als Zeitstrahl: ein feiner Strich mit einem Punkt je
   Eintrag macht auf einen Blick sichtbar, dass es eine Abfolge ist - in
   den anderen Log-Ansichten bleibt es bewusst die schlichte Liste. */
.user-profile-log .activity-log {
    position: relative;

    margin-left: 6px;
    padding-left: 18px;
}

.user-profile-log .activity-log::before {
    content: "";

    position: absolute;
    left: 0;
    top: 14px;
    bottom: 14px;

    width: 2px;
    border-radius: 2px;
    background: #e3e9e6;
}

.user-profile-log .activity-log-entry {
    position: relative;
    border-bottom: 0;
    padding: 7px 0;
}

.user-profile-log .activity-log-entry::before {
    content: "";

    position: absolute;
    /* Mittig auf dem Strich: der beginnt am linken Rand der Liste, die
       Einträge stehen 18px weiter rechts. */
    left: -20px;
    top: 13px;

    width: 7px;
    height: 7px;

    border-radius: 50%;
    background: #cfd8d3;
    /* Der weiße Ring schneidet den Strich am Punkt sauber ab. */
    box-shadow: 0 0 0 3px #fff;
}

/* Der jüngste Eintrag ist der, den man sucht.

   :first-of-type, nicht :first-child - vor den Tagesblöcken steht die
   Filterleiste, das erste Kind des Bereichs ist also nie ein Tagesblock. */
.user-profile-log .activity-log-day:first-of-type
.activity-log-entry:first-child::before {
    background: #036b3a;
}

.user-profile-log .activity-log-action {
    font-size: 13.5px;
}

.user-profile-log .activity-log-day-head {
    border-bottom: 0;
    margin-bottom: 0;
}

.user-profile-log .activity-log-day + .activity-log-day {
    margin-top: 18px;
}

/* Board und Karte als kleine Marken statt als Linkzeile - sie beantworten
   "wo war das", nicht "was war das", und sollen den Satz darueber nicht
   um Aufmerksamkeit bringen. */
.user-profile-log .activity-log-refs {
    gap: 4px 6px;
    margin-top: 4px;
}

.user-profile-log .activity-log-board,
.user-profile-log .activity-log-card {
    padding: 2px 8px;

    border: 1px solid #e6ebe8;
    border-radius: 999px;
    background: #fafbfa;

    font-size: 11px;
}

.user-profile-log .activity-log-board:hover,
.user-profile-log .activity-log-card:hover {
    border-color: #b9d2c5;
    background: #f2f8f5;
    text-decoration: none;
}

@media (max-width: 620px) {
    .user-profile-head {
        flex-wrap: wrap;
    }

    .user-profile-back {
        order: 3;
        width: 100%;
    }
}

.activity-log-empty {
    margin: 0;

    color: #9aa5a0;
    font-size: 12.5px;
    font-style: italic;
}


/* ---------- Karte: Knopf unten rechts ---------- */

/* Erscheint erst beim Darüberzeigen - das Log ist Nachschlagewerk, kein
   ständiger Begleiter. Über die Tastatur bleibt er trotzdem erreichbar
   (:focus-within am Rahmen). */
.kanban-log-open {
    position: fixed;
    z-index: 60;
    right: 22px;
    bottom: 18px;

    display: inline-flex;
    align-items: center;
    gap: 7px;

    padding: 7px 13px;

    border: 1px solid #dbe2de;
    border-radius: 999px;
    background: rgba(255, 255, 255, .96);
    box-shadow: 0 4px 14px rgba(15, 23, 42, .12);

    color: #52615a;
    font: inherit;
    font-size: 12.5px;
    font-weight: 600;

    cursor: pointer;
    opacity: 0;
    transition: opacity .15s ease, color .15s ease, border-color .15s ease;
}

.kanban-detail-page:hover .kanban-log-open,
.kanban-log-open:focus-visible {
    opacity: 1;
}

.kanban-log-open:hover {
    border-color: #6faa8c;
    color: #036b3a;
}

.kanban-log-open svg {
    width: 15px;
    height: 15px;

    fill: none;
    stroke: currentColor;
    stroke-width: 1.7;
    stroke-linecap: round;
    stroke-linejoin: round;
}


/* ---------- Karte: verschiebbares Fenster ---------- */

/* position: fixed und KEIN Hintergrund davor: die Karte bleibt sichtbar
   und bedienbar, während das Log offen steht. */
.kanban-log-window {
    position: fixed;
    z-index: 70;
    right: 22px;
    bottom: 62px;

    display: flex;
    flex-direction: column;

    width: min(420px, calc(100vw - 44px));
    max-height: min(520px, calc(100vh - 120px));

    border: 1px solid #dbe2de;
    border-radius: 14px;
    background: #fff;
    box-shadow: 0 12px 38px rgba(15, 23, 42, .22);

    overflow: hidden;
}

.kanban-log-window[hidden] {
    display: none;
}

.kanban-log-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;

    padding: 10px 12px;

    border-bottom: 1px solid #f0f3f1;
    background: #f7f8fa;

    cursor: grab;
    user-select: none;
}

.kanban-log-window.is-dragging .kanban-log-head {
    cursor: grabbing;
}

.kanban-log-title {
    color: #1d2b24;
    font-size: 13px;
    font-weight: 700;
}

.kanban-log-close {
    display: inline-flex;
    align-items: center;
    justify-content: center;

    width: 24px;
    height: 24px;
    padding: 0;

    border: 0;
    border-radius: 6px;
    background: transparent;

    color: #78837e;
    font-size: 17px;
    line-height: 1;

    cursor: pointer;
}

.kanban-log-close:hover {
    background: #e9edea;
    color: #2a3833;
}

.kanban-log-body {
    flex: 1 1 auto;
    min-height: 0;

    padding: 4px 14px 12px;

    overflow-y: auto;
    overscroll-behavior: contain;
}

.kanban-log-popout {
    display: inline-flex;
    align-items: center;
    justify-content: center;

    width: 24px;
    height: 24px;
    margin-left: auto;
    padding: 0;

    border: 0;
    border-radius: 6px;
    background: transparent;

    color: #78837e;
    font-size: 13px;
    line-height: 1;

    cursor: pointer;
}

.kanban-log-popout:hover {
    background: #e9edea;
    color: #2a3833;
}


/* Zurücksetzen der eigenen Bereichs-Auswahl (Projektdaten). Sitzt hinter
   der Reiterleiste und erscheint nur, solange eine Auswahl aktiv ist. */
.kanban-project-view-reset {
    order: 99;

    padding: 4px 10px;

    border: 1px solid #dbe2de;
    border-radius: 999px;
    background: #fff;

    color: #6b7671;
    font: inherit;
    font-size: 11px;
    font-weight: 600;

    cursor: pointer;
}

.kanban-project-view-reset:hover {
    border-color: #6faa8c;
    color: #036b3a;
}

.kanban-project-view-reset[hidden] {
    display: none;
}


/* =========================================================
   PARTNERSEITE
   partners/templates/partners/_partner_page.html - geteilt von
   der Partner- und der Mitarbeitendenansicht.
   ========================================================= */

.partner-page {
    display: flex;
    flex-direction: column;
    gap: 16px;
}

.partner-page-actions {
    display: flex;
    justify-content: flex-end;

    margin-bottom: 12px;
}

/* Überschrift eines Abschnitts - Titel plus, wo nötig, eine Zeile
   dazu, was hier eigentlich gepflegt wird. */
.partner-card-head {
    margin-bottom: 18px;
}

.partner-card-head h2 {
    display: flex;
    align-items: center;
    gap: 9px;

    margin: 0;

    color: #17202a;
    font-size: 15.5px;
    font-weight: 700;
    letter-spacing: -.01em;
}

.partner-card-head p {
    margin: 4px 0 0;

    max-width: 62ch;

    color: #79847e;
    font-size: 12.5px;
    line-height: 1.5;
}


/* ---------- Kopfbereich ---------- */

.partner-hero {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: 24px;

    padding: 22px 24px;
}

.partner-hero-identity {
    display: flex;
    align-items: center;
    gap: 18px;

    min-width: 0;
}

.partner-hero-name h1 {
    margin: 0;

    color: #121a15;
    font-size: 23px;
    font-weight: 700;
    line-height: 1.15;
    letter-spacing: -.015em;
}

.partner-hero-subline {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 8px;

    margin: 4px 0 0;

    color: #79847e;
    font-size: 12.5px;
}

.partner-hero-logo-caption {
    padding: 2px 8px;

    border-radius: 999px;
    background: #fdecec;
    color: #97341f;

    font-size: 10.5px;
    font-weight: 700;
}

.partner-hero-logo-caption[hidden] {
    display: none;
}


/* ---------- Logo: wird dort getauscht, wo es steht ---------- */

.partner-hero-logo-editor {
    position: relative;
    flex: none;
}

/* Wie die Fläche in der Kopfkarte: feste Höhe, Breite nach dem Logo.
   Ein quadratisches Logo (oder der Anfangsbuchstabe, solange keines
   hinterlegt ist) behält das Quadrat von 76 px - ein breiter Schriftzug
   darf sich strecken, statt auf Briefmarkengröße zu schrumpfen. Genau
   hier tauscht man das Logo aus und muss deshalb sehen, was man hat. */
.partner-hero-logo {
    display: flex;
    align-items: center;
    justify-content: center;

    width: auto;
    min-width: 76px;
    max-width: 240px;
    height: 76px;

    border: 1px solid #e4eae7;
    border-radius: 18px;
    background: #fff;

    overflow: hidden;
    transition: border-color .14s ease, box-shadow .14s ease;
}

.partner-hero-logo.is-dragover {
    border-color: var(--primary);
    box-shadow: 0 0 0 4px rgba(0, 110, 58, .1);
}

/* Nur max-height statt height: ein kleines Logo bleibt in seiner
   eigenen Größe, statt hochgerechnet und unscharf zu werden. */
.partner-hero-logo-image {
    width: auto;
    height: auto;

    max-width: 226px;
    max-height: 100%;

    object-fit: contain;
    padding: 7px;
}

.partner-hero-logo-initial {
    color: #98a49e;
    font-size: 30px;
    font-weight: 700;
    line-height: 1;
}

/* Der Knopf sitzt an der Ecke des Logos und kommt beim Überfahren
   hervor - solange niemand hinschaut, bleibt das Logo ein Logo. */
.partner-hero-logo-button {
    position: absolute;
    right: -6px;
    bottom: -6px;

    display: inline-flex;
    align-items: center;
    justify-content: center;

    width: 30px;
    height: 30px;

    padding: 0;

    border: 1px solid #dfe5e2;
    border-radius: 50%;
    background: #fff;
    box-shadow: 0 4px 12px rgba(15, 23, 42, .12);

    color: #4d5a54;
    cursor: pointer;

    opacity: 0;
    transform: scale(.9);
    transition: opacity .14s ease, transform .14s ease, border-color .14s ease, color .14s ease;
}

.partner-hero-logo-editor:hover .partner-hero-logo-button,
.partner-hero-logo-button:focus-visible {
    opacity: 1;
    transform: scale(1);
}

.partner-hero-logo-button:hover {
    border-color: var(--primary);
    color: var(--primary);
}

.partner-hero-logo-button svg {
    width: 15px;
    height: 15px;

    fill: none;
    stroke: currentColor;
    stroke-width: 1.7;
    stroke-linecap: round;
    stroke-linejoin: round;
}

.partner-page .partner-logo-file-input {
    display: none;
}

.partner-page .partner-logo-menu {
    position: absolute;
    top: calc(100% + 10px);
    left: 0;
    z-index: 40;

    display: flex;
    flex-direction: column;

    min-width: 170px;
    padding: 5px;

    border: 1px solid #dfe5e2;
    border-radius: 11px;
    background: #fff;
    box-shadow: 0 14px 30px rgba(15, 23, 42, .15);
}

.partner-page .partner-logo-menu[hidden] {
    display: none;
}

.partner-page .partner-logo-menu-item {
    padding: 8px 10px;

    border: 0;
    border-radius: 7px;
    background: transparent;

    color: #3c4a44;
    font: inherit;
    font-size: 12.5px;
    font-weight: 600;
    text-align: left;

    cursor: pointer;
}

.partner-page .partner-logo-menu-item:hover {
    background: #f2f6f4;
    color: var(--primary);
}

.partner-page .partner-logo-menu-danger:hover {
    background: #fdecec;
    color: #97341f;
}


/* ---------- Stufe, Punkte, Konditionen ---------- */

.partner-hero-program {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 22px;
}

.partner-tier-badge-wrap {
    position: relative;
}

.partner-tier-badge {
    display: inline-flex;
    align-items: center;

    padding: 8px 18px;

    border-radius: 999px;
    background: linear-gradient(135deg, #036b3a, #0a8f50);
    box-shadow: 0 6px 16px rgba(3, 107, 58, .22);

    color: #fff;
    font-size: 14px;
    font-weight: 700;
    letter-spacing: .01em;

    cursor: default;
}

.partner-tier-badge-none {
    background: #eef1f0;
    box-shadow: none;
    color: #79847e;
}

/* Die Konditionen liegen hinter der Stufe und kommen beim Überfahren
   hervor - auch per Tastatur erreichbar (die Stufe ist fokussierbar). */
.partner-tier-conditions {
    position: absolute;
    top: calc(100% + 9px);
    left: 0;
    z-index: 30;

    display: flex;
    flex-direction: column;
    gap: 6px;

    min-width: 240px;
    padding: 12px 14px;

    border: 1px solid #e2e8e5;
    border-radius: 12px;
    background: #fff;
    box-shadow: 0 16px 34px rgba(15, 23, 42, .16);

    opacity: 0;
    pointer-events: none;
    transform: translateY(-4px);
    transition: opacity .13s ease, transform .13s ease;
}

.partner-tier-badge-wrap:hover .partner-tier-conditions,
.partner-tier-badge:focus + .partner-tier-conditions {
    opacity: 1;
    transform: translateY(0);
}

.partner-tier-conditions-title + * {
    margin-top: 0;
}

.partner-tier-conditions-row + .partner-tier-conditions-title {
    margin-top: 5px;
    padding-top: 7px;
    border-top: 1px solid #f0f3f1;
}

.partner-tier-conditions-title {
    color: #9aa5a0;
    font-size: 10px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: .07em;
}

.partner-tier-conditions-row {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 14px;

    color: #4d5a54;
    font-size: 12.5px;
}

.partner-tier-conditions-row strong {
    color: #121a15;
    font-size: 14px;
    white-space: nowrap;
}

.partner-points {
    display: flex;
    align-items: baseline;
    gap: 6px;
}

.partner-points-value {
    color: #121a15;
    font-size: 32px;
    font-weight: 700;
    line-height: 1;
    letter-spacing: -.02em;
    font-variant-numeric: tabular-nums;
}

.partner-points-label {
    color: #79847e;
    font-size: 12.5px;
    font-weight: 600;
}

.partner-points-next {
    min-width: 200px;
}

.partner-points-next-text {
    margin-bottom: 7px;

    color: #4d5a54;
    font-size: 12.5px;
}

.partner-points-next-text strong {
    color: #121a15;
}

.partner-progress {
    height: 6px;

    border-radius: 999px;
    background: #e8eeea;
    overflow: hidden;
}

.partner-progress-bar {
    display: block;
    height: 100%;

    border-radius: 999px;
    background: linear-gradient(90deg, #0a8f50, #036b3a);
}


/* ---------- Stufenleiter ---------- */

.partner-tier-ladder-card,
.partner-form-card {
    padding: 22px 24px;
}

.partner-tier-ladder {
    display: flex;
    flex-direction: column;

    margin: 0;
    padding: 0;

    list-style: none;
}

.partner-tier-step {
    position: relative;

    display: grid;
    grid-template-columns: 22px minmax(90px, 1fr) minmax(110px, 1fr) minmax(140px, 1.3fr) 82px;
    align-items: center;
    gap: 14px;

    padding: 13px 14px 13px 4px;
}

.partner-tier-step + .partner-tier-step {
    border-top: 1px solid #f0f3f1;
}

/* Die Leiter ist eine Linie mit Punkten darauf - erreichte Stufen
   gefüllt, kommende offen. Das liest sich schneller als fünf Kästen. */
.partner-tier-step-marker {
    position: relative;

    width: 11px;
    height: 11px;
    margin-left: 5px;

    border: 2px solid #036b3a;
    border-radius: 50%;
    background: #036b3a;
}

.partner-tier-step-marker::before {
    content: "";

    position: absolute;
    left: 50%;
    top: 11px;

    width: 2px;
    height: calc(100% + 30px);

    background: #dde5e1;
    transform: translateX(-50%);
}

.partner-tier-step:last-child .partner-tier-step-marker::before {
    display: none;
}

.partner-tier-step.is-locked .partner-tier-step-marker {
    border-color: #ccd6d1;
    background: #fff;
}

.partner-tier-step.is-current {
    background: linear-gradient(90deg, rgba(3, 107, 58, .06), rgba(3, 107, 58, 0));
    border-radius: 10px;
}

.partner-tier-step.is-current .partner-tier-step-marker {
    box-shadow: 0 0 0 4px rgba(3, 107, 58, .14);
}

.partner-tier-step-name {
    color: #121a15;
    font-size: 14px;
    font-weight: 700;
}

.partner-tier-step-points {
    color: #79847e;
    font-size: 12.5px;
    font-variant-numeric: tabular-nums;
}

.partner-tier-step-price {
    color: #2a3833;
    font-size: 14px;
    font-weight: 600;
    font-variant-numeric: tabular-nums;
}

.partner-tier-step-price-unit {
    color: #98a49e;
    font-size: 11.5px;
    font-weight: 500;
}

.partner-tier-step.is-locked .partner-tier-step-name,
.partner-tier-step.is-locked .partner-tier-step-price {
    color: #8b958f;
}

/* Die firmenweiten Sätze einmal unter der Leiter */
.partner-tier-ladder-note {
    margin: 14px 0 0;
    padding-top: 12px;
    border-top: 1px solid #f0f3f1;

    color: #79847e;
    font-size: 12px;
}

.partner-tier-ladder-note strong {
    color: #2a3833;
}

.partner-tier-step-tag {
    justify-self: end;

    padding: 3px 10px;

    border-radius: 999px;
    background: #036b3a;
    color: #fff;

    font-size: 10px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: .04em;
    white-space: nowrap;
}

.partner-tier-step-tag-next {
    background: #eef1f0;
    color: #6b766f;
}


/* ---------- Formular ---------- */

/* Die ungescopte Grundform weiter oben (auch von den Kundenseiten
   genutzt) trennt mit einer Linie UNTER jedem Abschnitt. Hier trennt die
   Linie UEBER dem naechsten - ohne das staenden zwei Linien zwischen
   zwei Abschnitten. */
.partner-page .partner-profile-section {
    padding-bottom: 0;
    border-bottom: 0;
}

.partner-page .partner-profile-section + .partner-profile-section {
    margin-top: 26px;
    padding-top: 26px;
    border-top: 1px solid #f0f3f1;
}

.partner-page .partner-profile-grid {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 16px 18px;
}

.partner-page .form-field {
    display: flex;
    flex-direction: column;
    gap: 6px;

    min-width: 0;
}

.partner-page .form-field-full {
    grid-column: 1 / -1;
}

/* Ein Feld, das dem Raster folgt (z. B. die Notiz unter dem Hersteller),
   braucht denselben Abstand wie eine weitere Rasterzeile. */
.partner-page .partner-profile-grid + .form-field {
    margin-top: 16px;
}

/* Beschriftungen tragen die Bedeutung, nicht das Gewicht - klein,
   ruhig, über dem Feld. Sonst steht über jeder Eingabe eine fette
   Zeile, die lauter ist als der Inhalt darunter. */
.partner-page .form-field label {
    color: #79847e;
    font-size: 11px;
    font-weight: 600;
    letter-spacing: .02em;
    text-transform: uppercase;
}

.partner-page .form-field input,
.partner-page .form-field select,
.partner-page .form-field textarea {
    width: 100%;
    min-height: 40px;
    padding: 9px 12px;

    border: 1px solid #e2e8e5;
    border-radius: 10px;
    background: #fdfefe;

    color: #121a15;
    font: inherit;
    font-size: 13.5px;

    transition: border-color .13s ease, box-shadow .13s ease, background-color .13s ease;
}

.partner-page .form-field textarea {
    min-height: 96px;
    line-height: 1.55;
    resize: vertical;
}

.partner-page .form-field input:hover,
.partner-page .form-field select:hover,
.partner-page .form-field textarea:hover {
    border-color: #ccd6d1;
}

.partner-page .form-field input:focus,
.partner-page .form-field select:focus,
.partner-page .form-field textarea:focus {
    outline: none;

    border-color: var(--primary);
    background: #fff;
    box-shadow: 0 0 0 4px rgba(0, 110, 58, .09);
}

.partner-page .form-field ul.errorlist {
    margin: 0;
    padding: 0;

    list-style: none;
    color: #97341f;
    font-size: 11.5px;
}

.partner-form-actions {
    display: flex;
    justify-content: flex-end;

    margin-top: 26px;
    padding-top: 20px;
    border-top: 1px solid #f0f3f1;
}


/* ---------- Nur für Mitarbeitende ---------- */

/* Die internen Abschnitte sind deutlich als solche markiert - wer sie
   ausfüllt, soll sehen, dass der Partner sie nicht zu Gesicht bekommt. */
.partner-internal-tag {
    padding: 2px 8px;

    border-radius: 999px;
    background: #fff3d6;
    color: #6b5615;

    font-size: 9.5px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: .05em;
}


@media (max-width: 1000px) {
    .partner-page .partner-profile-grid {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }
}

@media (max-width: 760px) {
    .partner-hero {
        align-items: flex-start;
    }

    .partner-hero-program {
        align-items: flex-start;
        width: 100%;
    }

    .partner-page .partner-profile-grid {
        grid-template-columns: 1fr;
    }

    .partner-tier-step {
        grid-template-columns: 22px 1fr auto;
        row-gap: 4px;
    }

    .partner-tier-step-price {
        grid-column: 2 / -1;
    }
}


/* =========================================================
   PARTNERBEREICH (INFENSA)

   Eigener Praefix "partner-dash-", bewusst getrennt von:
   - "customer-*"  (Uebersicht von Partner UND Kunde - wird weiter genutzt,
                    die DGNA-Partnerseite haengt daran)
   - "partner-*"   (Formular- und Logo-Bausteine, die sich die Kundenseiten
                    teilen, sowie der .partner-page-Block weiter unten)

   Der Bereich ist ein Arbeitsplatz, keine Broschuere: viel Weissraum,
   wenige Farben, und die Projekte bekommen den meisten Platz.
   ========================================================= */

.partner-dash-page .page {
    max-width: 1180px;
}

/* Alle Symbole als Linienzeichnung in der Textfarbe ihrer Umgebung -
   deshalb currentColor und kein fester Wert: ein Symbol im aktiven
   Reiter ist weiß, dasselbe daneben grau, ohne zweite Regel. */
.partner-icon {
    width: 1.15em;
    height: 1.15em;
    flex: none;

    fill: none;
    stroke: currentColor;
    stroke-width: 1.8;
    stroke-linecap: round;
    stroke-linejoin: round;

    /* Auf der Grundlinie statt mittig: neben Text sieht mittig immer
       aus, als rutsche das Symbol nach oben. */
    vertical-align: -0.18em;
}

/* In leeren Zuständen darf es größer und ruhiger sein - es trägt die
   Aussage, nicht der Satz darunter. */
.partner-icon-empty {
    display: block;
    width: 28px;
    height: 28px;

    margin: 0 auto 8px;

    color: #c3ccc7;
    stroke-width: 1.5;
}

/* Überschriften mit Symbol: Abstand kommt aus der Lücke, nicht aus
   einem Rand am Symbol - so stimmt er auch, wenn keines da ist. */
.partner-dash-page h1,
.partner-dash-page h2 {
    display: flex;
    align-items: center;
    gap: 8px;
}

.partner-dash-page h1 .partner-icon,
.partner-dash-page h2 .partner-icon {
    color: var(--primary);
}

/* ---------- Reiterzeile ---------- */

.partner-dash-nav {
    display: flex;
    gap: 4px;

    margin-bottom: 16px;
    padding: 4px;

    border: 1px solid var(--border);
    border-radius: 12px;
    background: #fff;

    /* Auf schmalen Geraeten schiebt sich die Zeile zur Seite, statt
       umzubrechen - vier Reiter sollen vier Reiter bleiben. */
    overflow-x: auto;
    scrollbar-width: none;
}

.partner-dash-nav::-webkit-scrollbar {
    display: none;
}

.partner-dash-nav-item {
    /* Breite nach Inhalt, nicht gleichmaessig verteilt: gleich breite
       Sechstel saehen aus wie eine Werkzeugleiste, nicht wie eine
       Navigation. */
    flex: 0 0 auto;

    display: inline-flex;
    align-items: center;
    gap: 7px;

    padding: 9px 14px;

    border-radius: 9px;

    color: #5d6a64;
    font-size: 14px;
    font-weight: 600;
    text-decoration: none;
    white-space: nowrap;

    transition: background-color .15s ease, color .15s ease;
}

.partner-dash-nav-item:hover {
    background: #f3f6f4;
    color: var(--primary);
}

.partner-dash-nav-item.is-active {
    background: var(--primary);
    color: #fff;
}

/* Tastaturbedienung sichtbar machen - ohne das ist nicht zu erkennen,
   wo man beim Durchtabben gerade steht. */
.partner-dash-nav-item:focus-visible,
.partner-dash-shortcut-list a:focus-visible,
.partner-dash-status-option:focus-visible,
.partner-dash-project-link:focus-visible,
.partner-dash-download:focus-visible {
    outline: 2px solid var(--primary);
    outline-offset: 2px;
}

/* ---------- Kopfzeile ---------- */

.partner-dash-head {
    display: flex;
    align-items: center;
    gap: 18px;

    margin-bottom: 16px;
    padding: 20px 22px;
}

/* Die Höhe steht fest, die Breite richtet sich nach dem Logo.

   Vorher war die Fläche fest 96x72: ein breites Logo (Schriftzug neben
   Bildmarke, oft 3:1 oder flacher) musste sich da hineinquetschen und kam
   auf 78x23 heraus - ein Drittel der verfügbaren Höhe, der Rest blieb
   weiß. Mit auto-Breite füllt dasselbe Logo die Höhe aus; ein
   quadratisches Logo bleibt quadratisch, die Fläche schrumpft dann mit.

   Ohne Rahmen und ohne eigene Füllfarbe (Nutzerwunsch): die Kopfkarte ist
   ohnehin weiß, ein Kasten um das Logo herum war nur eine zweite Kante
   neben der Kartenkante - und er kostete Platz, der jetzt dem Logo
   gehört. */
.partner-dash-logo {
    display: flex;
    align-items: center;
    justify-content: center;

    /* Die Fläche legt sich um das Logo, die Grenze traegt das Bild selbst
       (unten, in absoluten Pixeln). Andersherum - Grenze an der Flaeche,
       Bild auf 100% - beziehen sich beide aufeinander, und der Browser
       rechnet die Flaeche klein. Kein min-width mehr: das hielt die
       weisse Flaeche in Form, und die gibt es jetzt nicht mehr. */
    width: auto;
    /* 72 statt 88: seit die Kennzeichen auf der Informationsseite stehen,
       traegt die Kopfkarte nur noch Logo und Logout und darf flacher sein
       (Nutzerwunsch). */
    height: 72px;
    flex: 0 0 auto;
    min-width: 0;
}

/* Nur max-height, kein height: ein kleines Logo soll nicht hochgerechnet
   und dadurch unscharf werden - es bleibt in seiner eigenen Größe. */
.partner-dash-logo img {
    width: auto;
    height: auto;
    max-width: 300px;
    max-height: 100%;
    object-fit: contain;
}

.partner-dash-identity {
    flex: 1 1 auto;
    min-width: 0;
}

.partner-dash-identity h1 {
    margin: 0;

    font-size: 24px;
    line-height: 1.2;
}

.partner-dash-identity .muted {
    margin: 4px 0 0;
    font-size: 13.5px;
}

.partner-dash-labels {
    display: flex;
    flex-wrap: wrap;
    gap: 6px;

    margin-top: 8px;
}

.partner-dash-label {
    padding: 3px 10px;

    border: 1px solid var(--border);
    border-radius: 999px;
    background: #f7f9f8;

    color: #5d6a64;
    font-size: 11.5px;
    font-weight: 600;
    white-space: nowrap;
}

/* Die Einstiegskondition ist die einzige, die einen Hinweis wert ist -
   alle weiteren Kennzeichen bleiben ruhig. Bewusst golden statt gruen:
   gruen benutzt die Seite ohnehin ueberall (aktiver Reiter, Marken,
   Haken) - als "Kennzeichen unter vielen" ginge PROFI-START darin
   unter. Gold liest sich als eigene, positive Auszeichnung. */
.partner-dash-label.is-highlight {
    border-color: #eecb86;
    background: linear-gradient(135deg, #fff6e0 0%, #fbe8c0 100%);
    color: #8a5a08;
    font-weight: 700;
}

.partner-dash-customer-number {
    margin: 8px 0 0;

    color: var(--muted);
    font-size: 12.5px;
}

.partner-dash-head-link {
    flex: none;

    color: var(--primary);
    font-size: 13.5px;
    font-weight: 600;
    text-decoration: none;
    white-space: nowrap;
}

.partner-dash-head-link:hover {
    text-decoration: underline;
}

/* ---------- Zweispaltiges Raster ---------- */

.partner-dash-grid {
    display: grid;
    grid-template-columns: minmax(0, 2.1fr) minmax(280px, 1fr);
    gap: 16px;

    align-items: start;
}

.partner-dash-main,
.partner-dash-side {
    display: grid;
    gap: 16px;

    min-width: 0;
}

.partner-dash-grid .card {
    margin: 0;
}

/* ---------- Kennzahlen ---------- */

.partner-dash-program {
    padding: 20px 22px;
}

.partner-dash-program-grid {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 18px;
}

.partner-dash-metric {
    display: flex;
    flex-direction: column;
    gap: 3px;

    min-width: 0;
}

/* Trennlinien statt Kaesten: drei Kaesten in einer Karte waeren eine
   Karte zu viel. */
.partner-dash-metric + .partner-dash-metric {
    padding-left: 18px;
    border-left: 1px solid #eef1ef;
}

.partner-dash-metric-label {
    display: flex;
    align-items: center;
    gap: 6px;

    color: var(--muted);
    font-size: 12px;
    font-weight: 600;
}

.partner-dash-metric-label .partner-icon {
    color: #9aa5a0;
}

.partner-dash-metric-value {
    font-size: 22px;
    font-weight: 700;
    line-height: 1.15;

    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.partner-dash-metric-note {
    color: var(--muted);
    font-size: 12.5px;
    line-height: 1.4;
}

.partner-dash-progress {
    height: 7px;
    margin: 7px 0 5px;

    border-radius: 999px;
    background: #eef1ef;

    overflow: hidden;
}

.partner-dash-progress > span {
    display: block;
    height: 100%;

    border-radius: 999px;
    /* Ein Hauch Verlauf statt einer flachen Fläche - der Balken ist das
       einzige Element der Seite, das etwas feiern darf. */
    background: linear-gradient(90deg, #0a8a4b 0%, var(--primary) 100%);

    /* Wächst beim Laden auf seinen Wert. Kurz und einmalig: es soll
       auffallen, dass sich etwas bewegt hat, nicht die Seite beleben. */
    animation: partner-progress-grow .7s ease-out;
}

@keyframes partner-progress-grow {
    from { width: 0 !important; }
}

/* Wer Bewegung abbestellt hat, bekommt keine. */
@media (prefers-reduced-motion: reduce) {
    .partner-dash-progress > span {
        animation: none;
    }

    .partner-dash-nav-item,
    .partner-dash-shortcut-list a,
    .partner-dash-row {
        transition: none;
    }
}

/* ---------- Kartenkopf ---------- */

.partner-dash-card-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    flex-wrap: wrap;

    margin-bottom: 12px;
}

.partner-dash-card-head h1,
.partner-dash-card-head h2 {
    margin: 0;
    font-size: 17px;
}

.partner-dash-card-head h1 {
    font-size: 21px;
}

.partner-dash-card-link {
    color: var(--primary);
    font-size: 13px;
    font-weight: 600;
    text-decoration: none;
    white-space: nowrap;
}

.partner-dash-card-link:hover {
    text-decoration: underline;
}

.partner-dash-program .partner-dash-card-link {
    display: inline-block;
    margin-top: 16px;
}

.partner-dash-lead {
    margin: -4px 0 14px;

    color: var(--muted);
    font-size: 13px;
    line-height: 1.5;
}

/* ---------- Projekttabelle ---------- */

.partner-dash-projects {
    padding: 20px 22px;
}

.partner-dash-table-scroll {
    overflow-x: auto;
}

.partner-dash-table {
    width: 100%;
    border-collapse: collapse;
}

/* Einzige Stelle fuer Tabellenkoepfe im Partnerbereich (Projekte,
   Dokumente, Preisstaffel bei den Konditionen) - vorher ueberschrieb
   .partner-dash-projects th diese Regel zusaetzlich mit eigenen, leicht
   abweichenden Werten (kleiner, schwerer, weiter gesperrt), wodurch die
   Projekttabelle anders aussah als die uebrigen. Bewusst kein
   GROSSBUCHSTABEN-Header mehr: die Labels sind ohnehin schon lesbare
   deutsche Woerter ("Bauvorhaben", "Projektnummer") - in Versalien mit
   weiter Sperrung wirkten sie schreiend statt einladend. */
.partner-dash-table th {
    padding: 0 10px 10px;
    border-bottom: 1px solid var(--border);

    color: var(--muted);
    font-size: 12.5px;
    font-weight: 600;
    letter-spacing: .01em;
    text-align: left;
    white-space: nowrap;
}

.partner-dash-table td {
    padding: 11px 10px;
    border-bottom: 1px solid #f1f4f2;

    font-size: 13.5px;
    vertical-align: middle;
}

.partner-dash-table tr:last-child td {
    border-bottom: 0;
}

.partner-dash-table th:first-child,
.partner-dash-table td:first-child {
    padding-left: 0;
}

.partner-dash-table th:last-child,
.partner-dash-table td:last-child {
    padding-right: 0;
}

.partner-dash-row:hover td {
    background: #fafbfa;
}

.partner-dash-project-link {
    color: var(--text);
    font-weight: 600;
    text-decoration: none;
}

.partner-dash-project-link:hover {
    color: var(--primary);
    text-decoration: underline;
}

/* Der naechste Schritt steht als zweite Zeile unter dem Projektnamen -
   leiser als der Name, aber lesbar: er sagt, ob man selbst am Zug ist. */
.partner-dash-next-step {
    display: flex;
    align-items: baseline;
    gap: 5px;

    margin-top: 3px;

    color: #8a6d2f;
    font-size: 12px;
    font-weight: 500;
    line-height: 1.35;
}

.partner-dash-next-step .partner-icon {
    color: #e8b04b;
    stroke-width: 2;
}

/* Der Stand kommt aus dem Spaltennamen des Boards und ist damit freier
   Text - eine Farbe je Stand liesse sich nicht verlaesslich zuordnen,
   deshalb bleibt es eine ruhige Marke. */
.partner-dash-status {
    display: inline-flex;
    align-items: center;
    gap: 5px;

    padding: 3px 10px;

    border: 1px solid var(--border);
    border-radius: 999px;
    background: #f7f9f8;

    color: #47524d;
    font-size: 12px;
    font-weight: 600;
    white-space: nowrap;
}

/* Abgeschlossene Projekte stehen unten und treten zurueck - sie sind
   Archiv, kein Schreibtisch. Bewusst nur blasser, nicht ausgeblendet:
   der Fachbetrieb soll sie finden. */
.partner-dash-row.is-done td {
    color: var(--muted);
}

.partner-dash-row.is-done .partner-dash-status {
    border-color: #cfe6da;
    background: #f1f8f4;
    color: #2f6b4c;
}

/* Die einzige warme Farbe der Seite, und sie hat einen Grund: hier
   wartet etwas auf den Fachbetrieb. Ein schmaler Streifen links, keine
   eingefaerbte Zeile - es ist ein Hinweis, keine Warnung. */
.partner-dash-row.needs-you td:first-child {
    box-shadow: inset 3px 0 0 #e8b04b;
    padding-left: 11px;
}

.partner-dash-row {
    transition: background-color .12s ease;
}

.partner-dash-row.is-done .partner-dash-project-link {
    color: #5d6a64;
    font-weight: 500;
}

/* ---------- Zeilenmenue ---------- */

.partner-dash-actions-cell {
    width: 34px;
    text-align: right;
}

.partner-dash-row-menu {
    width: 28px;
    height: 28px;
    padding: 0;

    border: 1px solid transparent;
    border-radius: 8px;
    background: transparent;

    color: var(--muted);
    font-size: 15px;
    line-height: 1;

    cursor: pointer;
}

.partner-dash-row-menu:hover,
.partner-dash-row-menu[aria-expanded="true"] {
    border-color: var(--border);
    background: #fff;
    color: var(--text);
}

/* Das Menue haengt am <body> und liegt fest ueber der Seite - die
   Tabelle scrollt seitwaerts und wuerde es sonst abschneiden (siehe
   core/static/js/partner_project_menu.js). */
.partner-dash-menu {
    position: fixed;
    z-index: 4000;

    display: flex;
    flex-direction: column;

    min-width: 200px;
    padding: 4px;

    border: 1px solid var(--border);
    border-radius: 10px;
    background: #fff;
    box-shadow: 0 10px 24px rgba(16, 24, 40, .14);
}

.partner-dash-menu[hidden] {
    display: none;
}

.partner-dash-menu-item {
    padding: 8px 10px;

    border-radius: 7px;

    color: var(--text);
    font-size: 13.5px;
    text-decoration: none;
    white-space: nowrap;
}

.partner-dash-menu-item:hover {
    background: #f3f6f4;
    color: var(--primary);
}

.partner-dash-empty {
    padding: 22px 0;

    color: var(--muted);
    font-size: 13px;
    text-align: center;
}

.partner-dash-no-match[hidden] {
    display: none;
}

/* ---------- Suche und Filter ---------- */

.partner-dash-filters {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 10px;

    margin-bottom: 14px;
}

.partner-dash-search {
    flex: 1 1 260px;
    min-width: 0;
}

/* Beschriftung nur fuer Vorlesesoftware - sichtbar sagt der Platzhalter
   schon, was das Feld tut. */
.sr-only {
    position: absolute;

    width: 1px;
    height: 1px;
    margin: -1px;
    padding: 0;

    border: 0;
    clip-path: inset(50%);
    overflow: hidden;
    white-space: nowrap;
}

.partner-dash-search input {
    width: 100%;
    padding: 9px 12px;

    box-sizing: border-box;
    border: 1px solid var(--border);
    border-radius: 10px;

    font-size: 13.5px;
}

.partner-dash-search input:focus {
    outline: none;
    border-color: var(--primary);
}

.partner-dash-status-filter {
    display: flex;
    flex-wrap: wrap;
    gap: 5px;
}

.partner-dash-status-option {
    padding: 6px 11px;

    border: 1px solid var(--border);
    border-radius: 999px;
    background: #fff;

    color: #5d6a64;
    font-size: 12.5px;
    font-weight: 600;
    text-decoration: none;
    white-space: nowrap;
}

.partner-dash-status-option:hover {
    border-color: #b9d2c5;
    color: var(--primary);
}

.partner-dash-status-option.is-active {
    border-color: var(--primary);
    background: var(--primary);
    color: #fff;
}

/* ---------- Ansprechpartner ---------- */

.partner-dash-contact h2,
.partner-dash-shortcuts h2,
.partner-dash-status-card h2,
.partner-dash-points-card h2 {
    margin: 0 0 12px;
    font-size: 15px;
}

.partner-dash-contact-person {
    display: flex;
    align-items: center;
    gap: 12px;
}

.partner-dash-contact-photo {
    width: 52px;
    height: 52px;
    flex: 0 0 52px;

    border-radius: 50%;
    object-fit: cover;
}

.partner-dash-contact-person strong {
    display: block;
    font-size: 14.5px;
}

.partner-dash-contact-role {
    color: var(--muted);
    font-size: 12.5px;
}

.partner-dash-contact-list {
    margin: 14px 0 0;
    padding: 0;

    list-style: none;

    display: grid;
    gap: 7px;
}

.partner-dash-contact-list a {
    display: flex;
    align-items: center;
    gap: 8px;

    /* Volle Zeile und 40px hoch: auf dem Telefon ist das die Flaeche,
       die man mit dem Daumen sicher trifft. */
    min-height: 40px;
    padding: 4px 8px;
    margin-left: -8px;

    border-radius: 8px;

    color: var(--text);
    font-size: 13.5px;
    text-decoration: none;

    overflow-wrap: anywhere;
}

.partner-dash-contact-list a .partner-icon {
    color: var(--primary);
}

.partner-dash-contact-list a:hover {
    background: #f3f6f4;
    color: var(--primary);
}

/* ---------- Schnellzugriff ---------- */

.partner-dash-shortcut-list {
    margin: 0;
    padding: 0;

    list-style: none;

    display: grid;
    gap: 2px;
}

.partner-dash-shortcut-list a {
    display: flex;
    align-items: center;
    gap: 10px;

    padding: 10px 12px;

    border-radius: 10px;

    color: var(--text);
    font-size: 13.5px;
    font-weight: 600;
    text-decoration: none;

    transition: background-color .15s ease, color .15s ease;
}

.partner-dash-shortcut-list a .partner-icon {
    color: var(--primary);
}

/* Der Text schiebt den Pfeil an den rechten Rand. */
.partner-dash-shortcut-list a span {
    flex: 1 1 auto;
}

/* Der Pfeil steht im Stylesheet und nicht im Markup: er ist Dekoration
   und hat in einer Vorlesesoftware nichts zu suchen. */
.partner-dash-shortcut-list a::after {
    content: "→";

    color: var(--muted);
    font-weight: 400;
}

.partner-dash-shortcut-list a:hover {
    background: #f3f6f4;
    color: var(--primary);
}

/* Der Pfeil rückt beim Überfahren ein Stück mit - der einzige Hinweis,
   dass es weitergeht, ohne dass ein Wort dafür nötig wäre. */
.partner-dash-shortcut-list a::after {
    transition: transform .15s ease, color .15s ease;
}

.partner-dash-shortcut-list a:hover::after {
    transform: translateX(3px);
}

.partner-dash-shortcut-list a:hover::after {
    color: var(--primary);
}

/* Kennzeichnung, wenn der Preis nicht von der Stufe kommt - sonst
   wundert sich ein Fachbetrieb, warum seine Stufe etwas anderes sagt. */
.partner-dash-price-hint {
    display: inline-block;
    margin-left: 4px;
    padding: 1px 7px;

    border-radius: 999px;
    background: #eef2f0;

    color: #5d6a64;
    font-size: 10.5px;
    font-weight: 600;
}

.partner-dash-maker {
    display: flex;
    flex-wrap: wrap;
    align-items: baseline;
    gap: 6px 20px;
}

.partner-dash-maker-price {
    display: block;

    color: var(--primary);
    font-size: 24px;
    line-height: 1.15;
}

.partner-dash-maker .partner-dash-lead {
    flex: 1 1 220px;
    margin: 0;
}

/* ---------- Dokumente ---------- */

.partner-dash-download {
    display: inline-flex;
    align-items: center;
    gap: 5px;

    padding: 5px 11px;

    border: 1px solid var(--border);
    border-radius: 999px;
    background: #fff;

    color: var(--primary);
    font-size: 12px;
    font-weight: 600;
    text-decoration: none;
    white-space: nowrap;
}

.partner-dash-download:hover {
    border-color: #b9d2c5;
    background: #f2f8f5;
}

/* ---------- Informationen ---------- */

.partner-dash-news,
.partner-dash-faq {
    margin: 0;
    padding: 0;

    list-style: none;

    display: grid;
    gap: 2px;
}

.partner-dash-news-item {
    padding: 14px 0;
    border-bottom: 1px solid #f1f4f2;
}

.partner-dash-news-item:last-child {
    border-bottom: 0;
}

.partner-dash-news-head {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 14px;
}

.partner-dash-news-head h2 {
    margin: 0;
    font-size: 15px;
    line-height: 1.35;
}

.partner-dash-news-head time {
    flex: none;

    color: var(--muted);
    font-size: 12px;
    font-variant-numeric: tabular-nums;
}

.partner-dash-news-body,
.partner-dash-answer {
    color: #47524d;
    font-size: 13.5px;
    line-height: 1.55;
}

.partner-dash-news-body p,
.partner-dash-answer p {
    margin: 6px 0 0;
}

/* Fragen stehen zugeklappt: man ueberblickt die Liste und oeffnet die
   eine, die man gesucht hat. <details> statt eigener Schalter - das
   Auf- und Zuklappen kann der Browser selbst, samt Tastaturbedienung. */
.partner-dash-question {
    padding: 4px 0;
    border-bottom: 1px solid #f1f4f2;
}

.partner-dash-question:last-child {
    border-bottom: 0;
}

.partner-dash-question > summary {
    padding: 10px 0;

    font-size: 14px;
    font-weight: 600;
    list-style: none;

    cursor: pointer;
}

.partner-dash-question > summary::-webkit-details-marker {
    display: none;
}

.partner-dash-question > summary::before {
    content: "+";

    display: inline-block;
    width: 18px;

    color: var(--muted);
    font-weight: 400;
}

.partner-dash-question[open] > summary::before {
    content: "–";
}

.partner-dash-question > summary:hover {
    color: var(--primary);
}

.partner-dash-question .partner-dash-answer {
    padding: 0 0 12px 18px;
}

/* ---------- Meldungen auf der Startseite ---------- */

.partner-dash-news-teasers {
    margin: 0;
    padding: 0;

    list-style: none;

    display: grid;
    gap: 2px;
}

.partner-dash-news-teasers a {
    display: block;
    padding: 9px 12px;

    border-radius: 10px;

    color: var(--text);
    text-decoration: none;
}

.partner-dash-news-teasers a:hover {
    background: #f3f6f4;
    color: var(--primary);
}

.partner-dash-news-title {
    display: block;

    font-size: 13.5px;
    font-weight: 600;
    line-height: 1.35;
}

.partner-dash-news-date {
    display: block;
    margin-top: 2px;

    color: var(--muted);
    font-size: 11.5px;
}

.partner-dash-news-card .partner-dash-card-head h2 {
    font-size: 15px;
}

/* ---------- Konditionen ---------- */

.partner-dash-head--plain {
    padding: 18px 22px;
}

.partner-dash-tier-table tr.is-current td {
    background: #f3f9f5;
}

.partner-dash-tier-table tr.is-current td:first-child {
    font-weight: 700;
}

.partner-dash-tier-tag {
    display: inline-block;
    margin-left: 7px;
    padding: 2px 8px;

    border-radius: 999px;
    background: var(--primary);

    color: #fff;
    font-size: 10.5px;
    font-weight: 700;
    vertical-align: 1px;
}

.partner-dash-rules {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
    gap: 12px;
}

.partner-dash-rule {
    display: flex;
    flex-direction: column;
    gap: 2px;

    padding: 16px;

    border: 1px solid var(--border);
    border-radius: 12px;
    background: #fafbfa;
}

.partner-dash-rule strong {
    font-size: 26px;
    line-height: 1.1;
}

.partner-dash-rule span {
    color: var(--muted);
    font-size: 12.5px;
    line-height: 1.4;
}

.partner-dash-extra-list,
.partner-dash-points-list {
    margin: 0;
    padding: 0;

    list-style: none;
}

.partner-dash-extra-list li,
.partner-dash-points-list li {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 12px;

    padding: 9px 0;
    border-bottom: 1px solid #f1f4f2;

    font-size: 13.5px;
}

.partner-dash-extra-list li:last-child,
.partner-dash-points-list li:last-child {
    border-bottom: 0;
}

.partner-dash-points-list span,
.partner-dash-extra-list span {
    color: #47524d;
}

.partner-dash-status-tier {
    display: flex;
    flex-direction: column;
    gap: 2px;

    margin-bottom: 12px;
}

.partner-dash-status-tier strong {
    font-size: 20px;
}

.partner-dash-status-price {
    color: var(--primary);
    font-size: 17px;
    font-weight: 700;
}

.partner-dash-points-card .partner-dash-metric-note {
    display: block;
    margin-top: 10px;
}

/* =========================================================
   PARTNERBEREICH - schmale Bildschirme
   ========================================================= */

@media (max-width: 950px) {

    /* Eine Spalte: die Seitenspalte rutscht unter die Projekte, nicht
       darueber - die Projekte sind der Grund, warum jemand die Seite
       aufruft. */
    .partner-dash-grid {
        grid-template-columns: minmax(0, 1fr);
    }

    .partner-dash-program-grid {
        grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
        gap: 14px;
    }

    .partner-dash-metric + .partner-dash-metric {
        padding-left: 0;
        border-left: 0;
    }
}

@media (max-width: 700px) {

    /* Weniger Rand, mehr Inhalt: 24px links und rechts sind auf einem
       Telefon ein Zehntel der Breite. */
    .partner-dash-page .page {
        padding: 12px;
    }

    .partner-dash-head {
        flex-wrap: wrap;
        gap: 14px;
    }

    /* Auf dem Telefon bricht die Kopfzeile um, das Logo steht also in
       einer eigenen Zeile und darf sie ausnutzen. Vorher waren hier feste
       72 px - darin wurde ein breites Logo auf Streichholzgröße gestaucht
       (72 x 11 px), und mit der alten festen Bildbreite ragte es
       stattdessen aus der Karte heraus und wurde abgeschnitten. */
    .partner-dash-logo {
        width: auto;
        max-width: 100%;
        height: 56px;
        flex: 0 1 auto;
    }

    .partner-dash-logo img {
        max-width: 100%;
    }

    .partner-dash-head-link {
        order: 3;
        width: 100%;
    }

    .partner-dash-identity h1 {
        font-size: 20px;
    }

    .partner-dash-program,
    .partner-dash-projects,
    .partner-dash-head {
        padding: 16px;
    }

    .partner-dash-program-grid {
        grid-template-columns: minmax(0, 1fr);
        gap: 14px;
    }

    .partner-dash-metric + .partner-dash-metric {
        padding-top: 14px;
        border-top: 1px solid #eef1ef;
    }

    /* Die Tabelle wird zur Liste: vier Spalten nebeneinander sind auf
       einem Telefon entweder winzig oder muessen seitwaerts geschoben
       werden - beides ist schlechter als Karten untereinander. Die
       Beschriftung kommt aus data-label am <td>. */
    .partner-dash-table,
    .partner-dash-table tbody,
    .partner-dash-table tr,
    .partner-dash-table td {
        display: block;
        width: 100%;
    }

    .partner-dash-table thead {
        display: none;
    }

    .partner-dash-table tr.partner-dash-row {
        padding: 12px 0;
        border-bottom: 1px solid #f1f4f2;
    }

    .partner-dash-table tr.partner-dash-row:last-child {
        border-bottom: 0;
    }

    .partner-dash-table td {
        display: flex;
        align-items: baseline;
        justify-content: space-between;
        gap: 12px;

        padding: 3px 0;
        border-bottom: 0;
    }

    .partner-dash-table td::before {
        content: attr(data-label);

        flex: none;

        color: var(--muted);
        font-size: 11.5px;
        font-weight: 600;
    }

    /* Der Projektname traegt die Zeile - er steht allein und gross, der
       Hinweis darunter. Bewusst kein Flex: der Menueknopf liegt
       absolut am rechten Rand, und nebeneinander draengten sich Name
       und Hinweis auf einer Zeile. */
    .partner-dash-table td:first-child {
        display: block;

        margin-bottom: 4px;
        padding-right: 36px;
    }

    .partner-dash-table td:first-child::before {
        display: none;
    }

    .partner-dash-table tr.partner-dash-row {
        position: relative;
    }

    .partner-dash-table td.partner-dash-actions-cell {
        position: absolute;
        right: 0;
        top: 10px;

        width: auto;
        padding: 0;
    }

    .partner-dash-table td.partner-dash-actions-cell::before {
        display: none;
    }

    .partner-dash-project-link {
        font-size: 15px;
    }

    .partner-dash-next-step {
        margin-top: 5px;
    }

    .partner-dash-row:hover td {
        background: transparent;
    }

    /* Die Reiterzeile wird zur Symbolleiste: sechs Ziele passen nicht
       nebeneinander, aber sechs Symbole schon. Der aktive Reiter behält
       seine Beschriftung - er sagt, wo man ist. */
    .partner-dash-nav {
        gap: 2px;
        padding: 3px;
    }

    .partner-dash-nav-item {
        flex: 1 1 auto;
        justify-content: center;

        /* 44px: die Fläche, die ein Daumen sicher trifft. */
        min-height: 44px;
        padding: 6px 8px;

        font-size: 12px;
    }

    .partner-dash-nav-item span {
        display: none;
    }

    .partner-dash-nav-item.is-active span {
        display: inline;
    }

    .partner-dash-nav-item .partner-icon {
        width: 20px;
        height: 20px;
        vertical-align: middle;
    }

    /* Genug Platz zum Antippen, ohne die Nachbarzeile zu erwischen. */
    .partner-dash-status-option,
    .partner-dash-download,
    .partner-dash-shortcut-list a {
        min-height: 40px;
        display: inline-flex;
        align-items: center;
    }

    .partner-dash-shortcut-list a {
        display: flex;
    }

    /* Die Suche und der Filter untereinander - nebeneinander bleibt für
       beide zu wenig. */
    .partner-dash-filters {
        gap: 12px;
    }

    .partner-dash-search {
        flex: 1 1 100%;
    }

    .partner-dash-search input {
        /* 16px: darunter zoomt iOS beim Hineintippen in das Feld. */
        font-size: 16px;
        min-height: 44px;
    }

    /* Der Herunterladen-Knopf trägt auf dem Telefon sein Wort - als
       reines Symbol am Zeilenende wäre nicht klar, was passiert. */
    .partner-dash-download {
        width: 100%;
        justify-content: center;
    }

    /* Überschriften eine Spur kleiner, damit sie nicht umbrechen. */
    .partner-dash-card-head h1 {
        font-size: 18px;
    }

    .partner-dash-card-head h2 {
        font-size: 16px;
    }

    /* Die Kennzahl darf umbrechen statt abgeschnitten zu werden - auf
       einem schmalen Gerät ist "Stufe 2" sonst "Stufe …". */
    .partner-dash-metric-value {
        white-space: normal;
    }

    /* Preisstaffel und Dokumente werden zu Listen (siehe die
       Projekttabelle darüber) - der Umbruch gilt für alle
       .partner-dash-table, die Regeln oben greifen also mit. */
    .partner-dash-tier-table tr.is-current td {
        background: transparent;
    }

    .partner-dash-tier-table tr.is-current {
        border-left: 3px solid var(--primary);
        padding-left: 10px;
    }

    .partner-dash-rule strong {
        font-size: 22px;
    }

    .partner-dash-maker-price {
        font-size: 21px;
    }

    /* Der Formularsatz der Ansprechpersonen: eine Spalte, sonst stehen
       Vor- und Nachname nebeneinander in je 40 Pixel. */
    .partner-contact-row .partner-profile-grid {
        grid-template-columns: minmax(0, 1fr);
    }
}


/* Ganz schmale Geräte: die Reiterleiste bekommt sonst Schlagseite. */
@media (max-width: 380px) {

    .partner-dash-nav-item {
        padding: 6px 4px;
    }

    .partner-dash-nav-item.is-active span {
        display: none;
    }
}


/* =========================================================
   PARTNERSEITE - Protokoll der Stammdatenänderungen
   ========================================================= */

.partner-change-log {
    margin: 0;
    padding: 0;

    list-style: none;

    max-height: 320px;
    overflow-y: auto;
}

.partner-change-entry {
    padding: 9px 0;
    border-bottom: 1px solid #f1f4f2;
}

.partner-change-entry:last-child {
    border-bottom: 0;
}

.partner-change-meta {
    display: flex;
    align-items: baseline;
    gap: 8px;

    color: var(--muted);
    font-size: 11px;
    font-variant-numeric: tabular-nums;
}

.partner-change-field {
    margin-top: 1px;

    font-size: 13px;
    font-weight: 600;
}

.partner-change-values {
    display: flex;
    flex-wrap: wrap;
    align-items: baseline;
    gap: 6px;

    margin-top: 2px;

    font-size: 12.5px;
    overflow-wrap: anywhere;
}

/* Der alte Wert tritt zurueck, der neue steht da - gelesen wird von
   links nach rechts, und rechts steht, was jetzt gilt. */
.partner-change-old {
    color: var(--muted);
    text-decoration: line-through;
}

.partner-change-new {
    color: #2a3833;
}


/* Hinweis, wenn jemand aus dem Haus ein fremdes Konto bearbeitet -
   deutlich genug, dass man ihn nicht uebersieht, ruhig genug, dass er
   nicht nach Fehler aussieht. */
.partner-foreign-account {
    margin-bottom: 16px;
    padding: 10px 14px;

    border: 1px solid #e4d9b8;
    border-radius: 10px;
    background: #fdf8e9;

    color: #6b5a24;
    font-size: 13.5px;
}


/* =========================================================
   PARTNERSEITE - weitere Ansprechpersonen

   Die Zeilen stehen im selben Raster wie die uebrigen Stammdaten, nur
   durch eine feine Linie getrennt: es sind mehrere gleichartige
   Eintraege, keine eigenen Abschnitte.
   ========================================================= */

/* Dieselbe Luft wie unter den Ueberschriften der anderen Abschnitte -
   sonst klebt die erste Zeile an der Erklaerung darueber. */
.partner-contacts-section .partner-card-head {
    margin-bottom: 16px;
}

.partner-contacts-section .partner-card-head .muted {
    margin: 2px 0 0;
    font-size: 12.5px;
}

.partner-contact-row + .partner-contact-row {
    margin-top: 14px;
    padding-top: 14px;
    border-top: 1px solid #eef1ef;
}

.partner-contact-delete {
    display: inline-flex;
    align-items: center;
    gap: 6px;

    margin-top: 8px;

    color: #a05252;
    font-size: 12px;

    cursor: pointer;
    user-select: none;
}

.partner-contact-delete input {
    width: 13px;
    height: 13px;
    margin: 0;

    accent-color: #a05252;
}

.partner-contact-add {
    margin-top: 14px;
    padding: 7px 13px;

    border: 1px dashed var(--border);
    border-radius: 999px;
    background: transparent;

    color: #5d6a64;
    font: inherit;
    font-size: 13px;
    font-weight: 600;

    cursor: pointer;
}

.partner-contact-add:hover {
    border-color: var(--primary);
    color: var(--primary);
}
