:root {
    --csw-primary: #167500;
    --csw-primary-dark: #115b00;
    --csw-primary-soft: rgba(22,117,0,.12);
    --csw-surface: #ffffff;
    --csw-surface-alt: #f8fafc;
    --csw-surface-elevated: rgba(255,255,255,.92);
    --csw-border: #dfe5ec;
    --csw-text: #1f2937;
    --csw-text-muted: #6c757d;
    --csw-shadow: 0 10px 30px rgba(16, 24, 40, 0.08);
    --csw-page-bg: linear-gradient(180deg, #f4f6f8 0%, #eef2f6 100%);
    --csw-login-bg: radial-gradient(circle at top left, rgba(22,117,0,.12), transparent 40%), linear-gradient(180deg, #f8f9fa 0%, #eef3f7 100%);
}

html[data-theme="dark"] {
    --csw-primary: #33a02c;
    --csw-primary-dark: #58b74f;
    --csw-primary-soft: rgba(51,160,44,.18);
    --csw-surface: #4d545d;
    --csw-surface-alt: #0f172a;
    --csw-surface-elevated: rgba(17,24,39,.9);
    --csw-border: #243041;
    --csw-text: #e5edf6;
    --csw-text-muted: #9fb0c3;
    --csw-shadow: 0 14px 34px rgba(2, 6, 23, 0.42);
    --csw-page-bg: linear-gradient(180deg, #0b1220 0%, #111827 100%);
    --csw-login-bg: radial-gradient(circle at top left, rgba(51,160,44,.18), transparent 40%), linear-gradient(180deg, #0b1220 0%, #111827 100%);
}

body {
    min-height: 100vh;
    color: var(--csw-text);
}

.login-shell {
    background: var(--csw-login-bg);
    min-height: 100vh;
}

.app-shell {
    background: var(--csw-page-bg);
    color: var(--csw-text);
}

.app-page {
    min-height: 100vh;
    display: flex;
    flex-direction: column;
}

.app-container {
    width: 100%;
    max-width: 1440px;
    margin: 0 auto;
    padding-left: 20px;
    padding-right: 20px;
}

.app-topbar {
    background: var(--csw-surface-elevated);
    backdrop-filter: blur(8px);
    border-color: var(--csw-border) !important;
    position: sticky;
    top: 0;
    z-index: 1030;
}

.app-brand {
    color: var(--csw-text);
    font-size: 1.15rem;
    font-weight: 700;
    letter-spacing: .02em;
}

.app-user-dot {
    width: 10px;
    height: 10px;
    border-radius: 50%;
    background: var(--csw-primary);
    display: inline-block;
}

.theme-toggle,
.dropdown > .btn,
#sidebarToggle {
    background: var(--csw-surface) !important;
    border-color: var(--csw-border) !important;
    color: var(--csw-text) !important;
}

.theme-toggle:hover,
.dropdown > .btn:hover,
#sidebarToggle:hover {
    background: var(--csw-surface-alt) !important;
}

.theme-toggle-icon {
    font-size: 1rem;
    line-height: 1;
}

.app-layout {
    display: grid;
    grid-template-columns: 280px minmax(0, 1fr);
    gap: 24px;
    align-items: start;
}

.app-sidebar {
    position: sticky;
    top: 92px;
}

.sidebar-card,
.app-content > .card,
.card,
.dropdown-menu,
.alert {
    border-radius: 1rem;
}

.sidebar-card,
.card,
.dropdown-menu,
.alert {
    background: var(--csw-surface);
    color: var(--csw-text);
    border-color: var(--csw-border) !important;
    box-shadow: var(--csw-shadow);
    overflow: hidden;
}

.sidebar-link,
.sidebar-sublink,
.sidebar-collapse-trigger {
    width: 100%;
    text-decoration: none;
    border: 0;
    background: transparent;
    color: var(--csw-text);
    border-radius: .85rem;
    padding: .7rem .85rem;
    display: flex;
    align-items: center;
    justify-content: space-between;
    transition: background-color .15s ease, color .15s ease, transform .15s ease, border-color .15s ease;
}

.sidebar-link:hover,
.sidebar-sublink:hover,
.sidebar-collapse-trigger:hover {
    background: color-mix(in srgb, var(--csw-primary-soft) 80%, transparent);
    color: var(--csw-text);
}

.sidebar-link.active,
.sidebar-sublink.active {
    background: var(--csw-primary-soft);
    color: var(--csw-primary-dark);
    font-weight: 600;
}

.sidebar-collapse-trigger {
    font-weight: 600;
    border: 1px solid transparent;
}

.sidebar-collapse-trigger.active {
    background: var(--csw-primary-soft);
    color: var(--csw-primary-dark);
    border-color: color-mix(in srgb, var(--csw-primary) 28%, var(--csw-border));
}

.sidebar-collapse-trigger.active .sidebar-chevron {
    color: var(--csw-primary-dark);
}

.sidebar-subnav {
    display: grid;
    gap: 6px;
    padding: 6px 0 10px 10px;
}

.sidebar-sublink {
    font-size: .95rem;
}

.sidebar-sublink.disabled {
    opacity: .55;
    pointer-events: none;
}

.sidebar-chevron {
    font-size: 1rem;
    line-height: 1;
    color: var(--csw-text-muted);
    transition: transform .18s ease, color .18s ease;
}

.sidebar-collapse-trigger[aria-expanded="true"] .sidebar-chevron {
    transform: rotate(180deg);
}

.app-content {
    min-width: 0;
}

.card-stat {
    /* bewusst unverändert gelassen */
}

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

.btn-primary:hover,
.btn-primary:focus {
    background-color: var(--csw-primary-dark);
    border-color: var(--csw-primary-dark);
}

.app-footer {
    margin-top: auto;
    background: color-mix(in srgb, var(--csw-surface-elevated) 85%, transparent);
    border-color: var(--csw-border) !important;
}

.text-body-secondary,
.small.text-uppercase,
.app-footer,
.sidebar-chevron {
    color: var(--csw-text-muted) !important;
}

.dropdown-item,
.dropdown-divider,
.form-control,
.form-select,
.list-group-item,
.modal-content,
.table {
    --bs-body-bg: var(--csw-surface);
    --bs-body-color: var(--csw-text);
    --bs-border-color: var(--csw-border);
}

.modal-content,
.table,
.list-group-item,
.form-control,
.form-select {
    background: var(--csw-surface);
    color: var(--csw-text);
    border-color: var(--csw-border);
}

.dropdown-item {
    color: var(--csw-text);
}

.dropdown-item:hover,
.dropdown-item:focus {
    background: var(--csw-primary-soft);
    color: var(--csw-primary-dark);
}

.form-control:focus,
.form-select:focus {
    border-color: color-mix(in srgb, var(--csw-primary) 55%, white);
    box-shadow: 0 0 0 .25rem color-mix(in srgb, var(--csw-primary-soft) 80%, transparent);
}

/* =========================
   DARK MODE FEINSCHLIFF
========================= */

html[data-theme="dark"] .app-content > .card,
html[data-theme="dark"] .card.bg-white,
html[data-theme="dark"] .bg-white,
html[data-theme="dark"] .bg-body,
html[data-theme="dark"] .bg-body-tertiary,
html[data-theme="dark"] .bg-light {
    background: #59626e !important;
    color: var(--csw-text) !important;
    border-color: #3f4a57 !important;
}

html[data-theme="dark"] .card-stat {
    background: #555e6a !important;
    border-color: #3f4a57 !important;
}

html[data-theme="dark"] .text-secondary,
html[data-theme="dark"] .card .text-secondary,
html[data-theme="dark"] .card-stat .text-secondary {
    color: #cfd9e5 !important;
    opacity: 1 !important;
}

html[data-theme="dark"] .card-stat .text-secondary.small,
html[data-theme="dark"] .card-stat .small.text-secondary,
html[data-theme="dark"] .card-stat .small {
    color: #d0e6f9 !important;
    opacity: 1 !important;
}

html[data-theme="dark"] .card .card-header {
    background: #646e7a !important;
    color: #eef4fb !important;
    border-bottom: 1px solid #46515e !important;
    border-top-left-radius: 1rem !important;
    border-top-right-radius: 1rem !important;
    margin: 0 !important;
}

html[data-theme="dark"] .card h1,
html[data-theme="dark"] .card h2,
html[data-theme="dark"] .card h3,
html[data-theme="dark"] .card h4,
html[data-theme="dark"] .card h5,
html[data-theme="dark"] .card h6 {
    color: #eef4fb !important;
    opacity: 1 !important;
}

/* =========================
   BURGER MENU
========================= */

.csw-burger {
    display: inline-block;
    width: 20px;
    height: 14px;
    position: relative;
}

.csw-burger::before,
.csw-burger::after,
.csw-burger span {
    content: "";
    position: absolute;
    left: 0;
    width: 100%;
    height: 2px;
    background: var(--csw-text);
    border-radius: 2px;
    transition: transform .2s ease, opacity .2s ease, top .2s ease, bottom .2s ease;
}

.csw-burger::before {
    top: 0;
}

.csw-burger span {
    top: 6px;
}

.csw-burger::after {
    bottom: 0;
}

/* Wenn Sidebar offen ist: Burger wird zu X */
#sidebarToggle.is-active .csw-burger::before {
    top: 6px;
    transform: rotate(45deg);
}

#sidebarToggle.is-active .csw-burger span {
    opacity: 0;
}

#sidebarToggle.is-active .csw-burger::after {
    bottom: 6px;
    transform: rotate(-45deg);
}

@media (max-width: 991.98px) {
    .app-container {
        padding-left: 16px;
        padding-right: 16px;
    }

    .app-layout {
        grid-template-columns: 1fr;
    }

    .app-sidebar {
        position: fixed;
        top: 0;
        left: 0;
        bottom: 0;
        width: min(320px, 86vw);
        z-index: 1045;
        transform: translateX(-110%);
        transition: transform .2s ease;
        padding: 82px 12px 12px;
        background: rgba(15, 23, 42, 0.08);
        backdrop-filter: blur(4px);
    }

    html[data-theme="dark"] .app-sidebar {
        background: rgba(2, 6, 23, 0.35);
    }

    .app-sidebar.is-open {
        transform: translateX(0);
    }

    .sidebar-card {
        max-height: calc(100vh - 94px);
        overflow: auto;
    }
}

.customers-search-group {
    min-width: 240px;
}

.icon-btn {
    width: 34px;
    height: 34px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    padding: 0;
    line-height: 1;
}

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

.customer-table td:first-child {
    white-space: normal;
    min-width: 220px;
}

#sidebarToggle.is-active .csw-burger::before {
    top: 6px;
    transform: rotate(45deg);
}

#sidebarToggle.is-active .csw-burger span {
    opacity: 0;
}

#sidebarToggle.is-active .csw-burger::after {
    bottom: 6px;
    transform: rotate(-45deg);
}

.toast-container {
    z-index: 1095;
}

.csw-toast {
    min-width: 320px;
    background: var(--csw-surface);
    color: var(--csw-text);
    box-shadow: var(--csw-shadow);
    border: 1px solid var(--csw-border) !important;
}

.csw-toast .toast-body {
    font-weight: 600;
}

.csw-toast .btn-close {
    filter: none;
    opacity: .8;
}

.csw-toast-success {
    background: #eaf8ea;
    color: #114411;
    border-color: #b7dfb7 !important;
}

.csw-toast-danger {
    background: #fff0f0;
    color: #7a1f1f;
    border-color: #f0b7b7 !important;
}

.csw-toast-warning {
    background: #fff7e8;
    color: #6b4b00;
    border-color: #ead2a0 !important;
}

.csw-toast-info,
.csw-toast-primary {
    background: #eef5ff;
    color: #163b67;
    border-color: #bfd2f0 !important;
}

html[data-theme="dark"] .csw-toast-success {
    background: #18311b;
    color: #d7f4d7;
    border-color: #2d6033 !important;
}

html[data-theme="dark"] .csw-toast-danger {
    background: #391818;
    color: #ffdede;
    border-color: #7c3232 !important;
}

html[data-theme="dark"] .csw-toast-warning {
    background: #3f3118;
    color: #ffe8bf;
    border-color: #87632a !important;
}

html[data-theme="dark"] .csw-toast-info,
html[data-theme="dark"] .csw-toast-primary {
    background: #18293f;
    color: #d6e8ff;
    border-color: #31527e !important;
}

.customer-form-fields .position-relative {
    position: relative;
}

.customer-suggest-list {
    position: absolute;
    top: calc(100% + 6px);
    left: 12px;
    right: 12px;
    display: grid;
    gap: 4px;
    padding: 8px;
    border-radius: .9rem;
    background: var(--csw-surface);
    border: 1px solid var(--csw-border);
    box-shadow: var(--csw-shadow);
    z-index: 20;
}

.customer-suggest-item {
    text-align: left;
    border: 0;
    background: transparent;
    color: var(--csw-text);
    padding: .55rem .7rem;
    border-radius: .7rem;
}

.customer-suggest-item:hover {
    background: var(--csw-primary-soft);
}

/* Customer module hardening/fixes 2026-04-24 */
.toast-container {
    z-index: 20000 !important;
    top: 1rem !important;
    right: 1rem !important;
    max-width: min(420px, calc(100vw - 2rem));
}

.csw-toast {
    width: 100%;
    min-width: min(360px, calc(100vw - 2rem));
    color: #111827 !important;
    background: #ffffff !important;
    border: 2px solid #d1d5db !important;
    box-shadow: 0 18px 50px rgba(0, 0, 0, .35) !important;
}

.csw-toast .toast-body {
    color: #111827 !important;
    font-weight: 700;
    line-height: 1.35;
    padding: .85rem 1rem;
}

.csw-toast .btn-close {
    opacity: 1;
    filter: none !important;
}

.csw-toast-success {
    background: #ecfdf3 !important;
    border-color: #16a34a !important;
}

.csw-toast-danger {
    background: #fef2f2 !important;
    border-color: #dc2626 !important;
}

.csw-toast-warning {
    background: #fffbeb !important;
    border-color: #d97706 !important;
}

.csw-toast-info,
.csw-toast-primary {
    background: #eff6ff !important;
    border-color: #2563eb !important;
}

html[data-theme="dark"] .csw-toast,
html[data-theme="dark"] .csw-toast-success,
html[data-theme="dark"] .csw-toast-danger,
html[data-theme="dark"] .csw-toast-warning,
html[data-theme="dark"] .csw-toast-info,
html[data-theme="dark"] .csw-toast-primary {
    color: #111827 !important;
}

html[data-theme="dark"] .csw-toast .toast-body {
    color: #111827 !important;
}

.customer-form-fields .form-control.is-invalid,
.customer-form-fields .form-select.is-invalid {
    border-color: #dc3545 !important;
    box-shadow: 0 0 0 .2rem rgba(220, 53, 69, .18) !important;
}

/* Customer detail + duplicate warning */
.customer-detail-card .card-header {
    border-bottom: 1px solid var(--csw-border) !important;
}

.customer-detail-list {
    display: grid;
    grid-template-columns: minmax(130px, 180px) minmax(0, 1fr);
    gap: .65rem 1rem;
}

.customer-detail-list dt {
    color: var(--csw-text-muted);
    font-weight: 700;
}

.customer-detail-list dd {
    margin: 0;
    min-width: 0;
    overflow-wrap: anywhere;
}

.js-duplicate-warning {
    border-radius: .9rem;
    border: 1px solid #d97706 !important;
    background: #fffbeb !important;
    color: #5f3d00 !important;
    font-weight: 600;
}

html[data-theme="dark"] .js-duplicate-warning {
    background: #4b3715 !important;
    color: #ffe8b8 !important;
    border-color: #d89a24 !important;
}

@media (max-width: 575.98px) {
    .customer-detail-list {
        grid-template-columns: 1fr;
        gap: .2rem .75rem;
    }
}

/* Articles module */
.articles-search-group {
    min-width: 280px;
}

.article-table td,
.article-table th {
    white-space: nowrap;
}

.article-table td:nth-child(2) {
    white-space: normal;
    min-width: 260px;
}

.article-description-preview {
    max-width: 520px;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.article-form-fields .form-control.is-invalid,
.article-form-fields .form-select.is-invalid {
    border-color: #dc3545 !important;
    box-shadow: 0 0 0 .2rem rgba(220, 53, 69, .18) !important;
}

.orders-search-group { max-width: 520px; }
.order-customer-results {
    position: absolute;
    top: calc(100% - 0.25rem);
    left: 0.75rem;
    right: 0.75rem;
    z-index: 1080;
    max-height: 260px;
    overflow: auto;
}
.order-customer-results:empty { display: none; }
.order-info-preview { max-width: 520px; }

.order-article-results {
    max-height: 260px;
    overflow-y: auto;
    z-index: 1080;
}

.order-article-results:empty {
    display: none;
}

.invoice-preview-description {
    max-height: 9rem;
    overflow: auto;
    padding: .75rem;
    border-radius: .75rem;
    background: var(--bs-tertiary-bg);
    border: 1px solid var(--bs-border-color);
}

/* Invoice template accordion theme fix 2026-05-01
   Bootstrap-Accordions bringen eigene helle Hintergründe mit. Diese Regeln hängen sie wieder an das App-Theme an,
   damit die Rechnungsvorlagen im Dark Mode nicht wie ein frisch gestrichener Kühlschrank explodieren. */
.accordion {
    --bs-accordion-bg: var(--csw-surface);
    --bs-accordion-color: var(--csw-text);
    --bs-accordion-border-color: var(--csw-border);
    --bs-accordion-btn-bg: var(--csw-surface);
    --bs-accordion-btn-color: var(--csw-text);
    --bs-accordion-active-bg: var(--csw-primary-soft);
    --bs-accordion-active-color: var(--csw-text);
    --bs-accordion-btn-focus-border-color: color-mix(in srgb, var(--csw-primary) 45%, var(--csw-border));
    --bs-accordion-btn-focus-box-shadow: 0 0 0 .2rem color-mix(in srgb, var(--csw-primary-soft) 80%, transparent);
}

.accordion-item,
.accordion-button,
.accordion-body {
    background: var(--csw-surface) !important;
    color: var(--csw-text) !important;
    border-color: var(--csw-border) !important;
}

.accordion-button:not(.collapsed) {
    background: var(--csw-primary-soft) !important;
    color: var(--csw-text) !important;
    box-shadow: inset 0 -1px 0 var(--csw-border) !important;
}

.accordion-button .text-secondary,
.accordion-body .text-secondary,
.accordion-body label,
.accordion-body .form-label {
    color: var(--csw-text-muted) !important;
    opacity: 1 !important;
}

html[data-theme="dark"] .accordion {
    --bs-accordion-bg: #4d545d;
    --bs-accordion-color: #e5edf6;
    --bs-accordion-border-color: #3f4a57;
    --bs-accordion-btn-bg: #4d545d;
    --bs-accordion-btn-color: #eef4fb;
    --bs-accordion-active-bg: #59626e;
    --bs-accordion-active-color: #eef4fb;
}

html[data-theme="dark"] .accordion-item,
html[data-theme="dark"] .accordion-button,
html[data-theme="dark"] .accordion-body {
    background: #4d545d !important;
    color: #eef4fb !important;
    border-color: #3f4a57 !important;
}

html[data-theme="dark"] .accordion-button:not(.collapsed) {
    background: #59626e !important;
    color: #eef4fb !important;
}

html[data-theme="dark"] .accordion-button::after {
    filter: invert(1) grayscale(1) brightness(1.7);
}

html[data-theme="dark"] .accordion-button .badge.text-bg-primary {
    color: #ffffff !important;
}

html[data-theme="dark"] .accordion-button .text-secondary,
html[data-theme="dark"] .accordion-body .text-secondary,
html[data-theme="dark"] .accordion-body label,
html[data-theme="dark"] .accordion-body .form-label {
    color: #dbeafe !important;
    opacity: 1 !important;
}
