OpenNIT

Quelltext des aktuellen Standes

Fassung 1.1.1

orders.css

29 KB
.orders-fullwidth {}

/* Tabs */
.orders-tabs-bar {
    background: var(--color-bg);
    border-bottom: 2px solid var(--color-gray-300);
    padding: 0 1rem;
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: 1rem;
    max-width: 100%;
    overflow-x: auto;
}

.orders-tabs {
    display: flex;
    gap: 0;
}

.tab-dot {
    width: 8px; height: 8px;
    border-radius: 50%;
    display: inline-block;
}
.tab-dot-open { background: var(--red-500); }
.tab-dot-delivered { background: var(--amber-500); }
.tab-dot-abholbereit { background: var(--violet-500); }
.tab-dot-closed { background: var(--green-500); }

.tab-count {
    background: var(--gray-100);
    color: var(--gray-500);
    font-size: 0.75rem;
    font-weight: 600;
    padding: 0.1rem 0.5rem;
    border-radius: 9999px;
}
.subnav-tab.active .tab-count { background: var(--alert-info-bg); color: var(--alert-info-text); }

.orders-filter { flex-shrink: 0; }
.orders-search-input { width: 220px; }

/* Content */
.orders-content { padding: 1.5rem 1rem 3rem; }

/* Status-Tabs als Subnav-Pills in der Filter-Card (Styleguide) */
.orders-subnav { margin-bottom: 0; flex: 1 1 auto; }
.orders-subnav .subnav-tab { display: inline-flex; align-items: center; gap: 0.4rem; }
/* Such-/Sortier-/Filter-Leiste: Suche rückt rechts (Subnav wächst), Selects kompakt */
.orders-search-wrap { flex: 0 1 240px; }
.orders-search-wrap input { width: 100%; }
.orders-filter-select { flex: 0 0 auto; width: auto; }
/* Suchergebnis-Kopfzeile */
.orders-search-head { font-size: 0.85rem; color: var(--gray-500); margin: 0 0 0.6rem 0.25rem; }
.orders-search-head strong { color: var(--gray-900); }

.tab-panel { display: none; }
.tab-panel.active { display: block; }

.section-label {
    font-size: 0.8rem;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.04em;
    color: var(--gray-500);
    margin: 1.5rem 0 0.75rem;
    padding-bottom: 0.5rem;
    border-bottom: 1px solid var(--gray-200);
}
.section-label:first-child { margin-top: 0; }

/* Abstand zwischen mehreren Tabellen (Alle-Tab) */
.tab-panel .orders-table + .section-label { margin-top: 1.75rem; }

/* Empty State */
.empty-state { text-align: center; padding: 3rem 1rem; color: var(--gray-400); }
.empty-state svg { margin-bottom: 1rem; opacity: 0.4; }
.empty-state p { font-size: 0.95rem; margin: 0; }
.empty-mini { color: var(--gray-400); font-size: 0.8rem; padding: 0.5rem 0; }

/* ── Orders-Tabelle ──────────────────────────────────── */
/* Container und Kopfzeile folgen der zentralen Tabellen-Optik
   (.table-wrapper / .data-table th); das Grid mit <details>-Zeilen
   bleibt wegen der Aufklapp-Funktion erhalten. */
.orders-table {
    background: var(--color-bg);
    border: 1px solid var(--color-border);
    border-radius: var(--radius);
    overflow: hidden;
}
.orders-thead {
    display: grid;
    grid-template-columns: 4px 56px 1fr 200px 200px 140px 36px;
    align-items: center;
    background: var(--color-gray-50);
    border-bottom: 2px solid var(--color-border);
}
.orders-thead > div {
    padding: 0.625rem 0.75rem;
    font-size: 0.8125rem; font-weight: 600; text-transform: uppercase;
    letter-spacing: 0.03em; color: var(--color-gray-700); white-space: nowrap;
}
.orders-thead .th-id { text-align: right; padding-right: 1rem; }
.orders-thead > div:first-child, .orders-thead > div:last-child { padding: 0; }

/* Zeile = <details> */
.order-card {
    border-bottom: 1px solid var(--color-border);
    transition: background 0.12s;
}
.order-card:last-child { border-bottom: none; }
.order-card[open] { background: var(--color-gray-50); }

.order-summary {
    list-style: none;
    cursor: pointer;
    display: grid;
    grid-template-columns: 4px 56px 1fr 200px 200px 140px 36px;
    align-items: center;
}
.order-summary:hover { background: var(--color-gray-100); }
.order-summary::-webkit-details-marker { display: none; }

/* Status-Streifen links */
.order-stripe { align-self: stretch; background: var(--red-500); }
.order-stripe.delivered   { background: var(--amber-500); }
.order-stripe.abholbereit { background: var(--violet-500); }
.order-stripe.closed      { background: var(--green-500); }

/* Zellen */
.os-cell { padding: 0.8rem 0.75rem; min-width: 0; }
.os-id { font-size: 0.78rem; color: var(--gray-400); text-align: right; padding-right: 1rem; font-variant-numeric: tabular-nums; }

.os-title { display: flex; flex-direction: column; gap: 0.15rem; min-width: 0; }
.os-name-row { display: flex; align-items: center; gap: 0.4rem; min-width: 0; }
.os-name { font-weight: 600; font-size: 0.92rem; color: var(--gray-900); flex: 1; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.os-sub { font-size: 0.72rem; color: var(--gray-400); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
/* Empfänger nur auf schmalen Screens in der Sub-Zeile zeigen (Spalte ist dort ausgeblendet) */
.os-sub-recipient { display: none; }

.os-person, .os-supplier { color: var(--gray-700); font-size: 0.83rem; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.os-person.empty, .os-supplier.empty { color: var(--gray-300); }

/* Priorität: kleiner Punkt vor dem Titel (nur wenn != normal) */
.pri-mark { display: inline-block; width: 7px; height: 7px; border-radius: 50%; vertical-align: middle; flex-shrink: 0; }
.pri-mark.low    { background: var(--gray-300); }
.pri-mark.high   { background: var(--amber-500); }
.pri-mark.urgent { background: var(--red-500); }

/* Anhang-/Kommentar-Counts dezent neben dem Titel */
.os-counts { display: inline-flex; gap: 0.5rem; color: var(--gray-400); font-size: 0.68rem; flex-shrink: 0; font-variant-numeric: tabular-nums; }
.os-counts span { white-space: nowrap; }

/* Fortschritt */
.os-progress { display: flex; flex-direction: column; gap: 0.3rem; }
.progress-label { display: flex; justify-content: space-between; font-size: 0.7rem; color: var(--gray-500); font-variant-numeric: tabular-nums; }
.progress-label span:first-child { color: var(--gray-900); font-weight: 600; }
.progress-bar { height: 4px; background: var(--color-gray-100); border-radius: 2px; overflow: hidden; }
.progress-fill { height: 100%; background: var(--color-primary); border-radius: 2px; transition: width 0.3s; }
.progress-fill.complete { background: var(--green-500); }

/* Aktion */
.os-actions { display: flex; justify-content: center; }
.btn-icon-sm {
    width: 26px; height: 26px;
    display: flex; align-items: center; justify-content: center;
    border: none; background: transparent; color: var(--gray-300);
    border-radius: 0.25rem; cursor: pointer; transition: all 0.12s; font-size: 1rem;
    /* Dezent sichtbar (statt nur bei Hover) – auch auf Touch-Geraeten erreichbar. */
    opacity: 0.5;
}
.order-summary:hover .btn-icon-sm { opacity: 1; }
.btn-icon-sm:hover { background: var(--red-100); color: var(--red-500); }

/* Zwei-Spalten-Zeile in Order-Formularen (Modal), bricht schmal auf 1 Spalte um. */
.oc-2col { display: grid; grid-template-columns: 1fr 1fr; gap: 0 0.75rem; }
@media (max-width: 560px) { .oc-2col { grid-template-columns: 1fr; gap: 0; } }

/* Detail View */
.order-detail {
    border-top: 1px solid var(--gray-100);
    background: var(--slate-50);
    padding: 1.25rem;
    display: grid;
    grid-template-columns: 1.7fr 1fr;
    gap: 1.25rem;
}
/* Lade-Platzhalter (Detail wird per Lazy-Load nachgeholt): kein Grid */
.order-detail--lazy { display: block; }

.detail-section-title {
    font-size: 0.7rem;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.05em;
    color: var(--gray-500);
    margin-bottom: 0.75rem;
    display: flex;
    align-items: center;
    gap: 0.5rem;
}


/* Komponenten */
.comp-list { background: transparent; }

/* Fortschritts-Leiste oben im Komponenten-Panel */
.comp-progress {
    display: flex; align-items: center; gap: 0.6rem;
    padding: 0.55rem 1rem; border-bottom: 1px solid var(--slate-100);
}
.comp-progress .cp-bar { flex: 1; height: 6px; background: var(--slate-100); border-radius: 3px; overflow: hidden; }
.comp-progress .cp-fill { height: 100%; background: var(--color-primary); border-radius: 3px; transition: width 0.3s; }
.comp-progress .cp-fill.complete { background: var(--green-500); }
.comp-progress .cp-txt { font-size: 0.74rem; color: var(--gray-500); font-variant-numeric: tabular-nums; white-space: nowrap; }
.comp-progress .cp-txt b { color: var(--gray-900); }

.comp-item {
    display: flex;
    align-items: center;
    gap: 0.7rem;
    padding: 0.55rem 1rem;
    border-bottom: 1px solid var(--slate-100);
    font-size: 0.875rem;
}
.comp-item:last-child { border-bottom: none; }
.comp-item:hover { background: var(--slate-50); }
.comp-item form { display: flex; align-items: center; }

.comp-checkbox { width: 18px; height: 18px; accent-color: var(--color-primary); cursor: pointer; flex-shrink: 0; }

/* Teil-Lieferung: erhaltene-Menge-Pille statt Checkbox (öffnet das Mengen-Modal) */
.comp-recv-btn {
    flex-shrink: 0;
    min-width: 3.1rem;
    padding: 0.12rem 0.5rem;
    border: 1px solid var(--gray-300);
    border-radius: 999px;
    background: var(--color-bg);
    color: var(--gray-600);
    font-size: 0.74rem;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
    cursor: pointer;
    transition: all 0.12s;
}
.comp-recv-btn:hover { border-color: var(--color-primary); color: var(--color-primary); }
.comp-recv-btn.partial { border-color: var(--amber-500); color: var(--amber-700); background: var(--amber-50); }
.comp-recv-btn.done { border-color: var(--green-500); color: var(--color-on-accent); background: var(--green-500); }
.comp-recv-static { flex-shrink: 0; min-width: 3.1rem; font-size: 0.74rem; font-weight: 700; color: var(--gray-500); font-variant-numeric: tabular-nums; }
.comp-recv-static.done { color: var(--green-600); }

/* Teil-Lieferung-Modal (kompakt) */
.modal-card-sm { max-width: 360px; }
.recv-comp-name { font-weight: 600; margin: 0 0 0.6rem; }
.recv-input-row { display: flex; align-items: center; gap: 0.6rem; }
.recv-input-row .form-control { width: 6rem; text-align: center; font-size: 1.1rem; font-weight: 700; }
.recv-of { color: var(--gray-500); font-size: 0.9rem; }

.comp-name { flex: 1; font-weight: 500; color: var(--gray-900); min-width: 0; }
.comp-name.done { color: var(--gray-400); text-decoration: line-through; font-weight: 400; }

.comp-qty { font-size: 0.85rem; color: var(--color-on-accent); background: var(--color-gray-500); border-radius: 4px; padding: 0.12rem 0.5rem; font-weight: 700; margin-left: 0.4rem; vertical-align: middle; }

.comp-meta { font-size: 0.72rem; color: var(--gray-400); text-align: right; white-space: nowrap; line-height: 1.25; }

.comp-delete { background: none; border: none; color: var(--gray-300); cursor: pointer; font-size: 1rem; padding: 0 0.25rem; transition: color 0.15s; opacity: 0; }
.comp-item:hover .comp-delete { opacity: 1; }
.comp-delete:hover { color: var(--red-500); }

/* Komponente bearbeiten */
.comp-row-actions { display: flex; align-items: center; gap: 0.15rem; flex-shrink: 0; }
.comp-edit { background: none; border: none; color: var(--slate-300); cursor: pointer; padding: 0.15rem 0.25rem; display: flex; align-items: center; transition: color 0.15s; opacity: 0; }
.comp-item:hover .comp-edit { opacity: 1; }
.comp-edit:hover { color: var(--color-primary); }
.comp-edit-form { display: flex; align-items: center; gap: 0.5rem; padding: 0.55rem 1rem; border-bottom: 1px solid var(--slate-100); background: var(--slate-50); }
.comp-edit-form[hidden] { display: none; }
.comp-edit-form .comp-edit-name { flex: 1; }
.comp-edit-form .comp-edit-qty { width: 72px; flex: 0 0 auto; text-align: center; }
.comp-edit-cancel { background: none; border: none; color: var(--gray-400); cursor: pointer; font-size: 1.2rem; line-height: 1; padding: 0 0.3rem; transition: color 0.15s; }
.comp-edit-cancel:hover { color: var(--red-500); }

.comp-add {
    display: flex;
    gap: 0.5rem;
    padding: 0.6rem 1rem;
    border-top: 1px solid var(--color-gray-100);
    background: var(--color-gray-50);
    align-items: center;
}
.comp-add-input {
    flex: 1;
    padding: 0.4rem 0.75rem;
    border: 1px solid var(--gray-300);
    border-radius: 0.25rem;
    font-size: 0.8rem;
    outline: none;
}
.comp-add-input:focus { border-color: var(--color-primary); }
.comp-qty-input {
    width: 56px;
    padding: 0.4rem 0.5rem;
    border: 1px solid var(--gray-300);
    border-radius: 0.25rem;
    font-size: 0.8rem;
    outline: none;
    text-align: center;
}
.comp-qty-input:focus { border-color: var(--color-primary); }
.comp-add-btn {
    padding: 0.4rem 0.75rem;
    background: var(--color-primary);
    color: var(--color-on-accent);
    border: none;
    border-radius: 0.25rem;
    font-size: 0.8rem;
    font-weight: 600;
    cursor: pointer;
}
.comp-add-btn:hover { background: var(--color-primary-dark); }

/* Komponenten-Zeilen im Neue-Bestellung-Modal */
.oc-rows { display: flex; flex-direction: column; gap: 0.4rem; }
.oc-row { display: flex; gap: 0.5rem; align-items: center; }
.oc-row .oc-name { flex: 1; }
.oc-row .oc-qty { width: 72px; flex: 0 0 auto; text-align: center; }
.oc-row-remove {
    background: none; border: none; color: var(--gray-300); cursor: pointer;
    font-size: 1.2rem; line-height: 1; padding: 0 0.3rem; transition: color 0.15s;
}
.oc-row-remove:hover { color: var(--red-500); }
.oc-add-row {
    margin-top: 0.5rem; background: none; border: 1px dashed var(--slate-300);
    color: var(--color-primary); border-radius: 0.25rem; padding: 0.35rem 0.7rem;
    font-size: 0.8rem; font-weight: 600; cursor: pointer; transition: border-color 0.15s, background 0.15s;
}
.oc-add-row:hover { border-color: var(--color-primary); background: var(--blue-50); }

/* Comments */
.comments-list { margin-bottom: 0.75rem; }
.comment-item {
    background: var(--color-bg);
    border: 1px solid var(--gray-200);
    border-radius: 0.25rem;
    padding: 0.625rem 0.875rem;
    margin-bottom: 0.5rem;
    font-size: 0.85rem;
}
.comment-meta {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    margin-bottom: 0.375rem;
}
.comment-author { font-weight: 600; color: var(--gray-700); font-size: 0.8rem; }
.comment-time { color: var(--gray-400); font-size: 0.7rem; }
.comment-del-form { display: flex; }
/* Bearbeiten-Stift links neben dem Löschen-Kreuz, beide rechtsbündig */
.comment-meta .comp-edit { margin-left: auto; }
.comment-body { color: var(--gray-700); white-space: pre-wrap; word-break: break-word; }

/* Kommentar-Aktionen wie bei Komponenten auf Hover/Fokus einblenden */
.comment-item:hover .comp-edit,
.comment-item:focus-within .comp-edit,
.comment-item:hover .comp-delete,
.comment-item:focus-within .comp-delete { opacity: 1; }

.comment-edit-form { display: flex; flex-direction: column; gap: 0.4rem; margin-top: 0.4rem; }
.comment-edit-form[hidden] { display: none; }
.comment-edit-actions { display: flex; gap: 0.5rem; align-items: center; }
.btn-link-cancel { background: none; border: none; color: var(--gray-500); font-size: 0.8rem; cursor: pointer; padding: 0; }
.btn-link-cancel:hover { text-decoration: underline; }

.comment-form {
    display: flex;
    flex-direction: column;
    gap: 0.4rem;
}
.comment-input {
    width: 100%;
    padding: 0.5rem 0.75rem;
    border: 1px solid var(--gray-300);
    border-radius: 0.25rem;
    font-size: 0.85rem;
    outline: none;
    resize: vertical;
    font-family: inherit;
}
.comment-input:focus { border-color: var(--color-primary); }

/* Supplier Search (Empfänger-Suche kommt aus person-search.css) */
.supplier-form, .person-form { position: relative; }
.supplier-dropdown {
    position: absolute;
    z-index: 100;
    background: var(--color-bg);
    border: 1px solid var(--gray-200);
    border-radius: 0.25rem;
    box-shadow: 0 4px 8px rgba(0,0,0,0.1);
    max-height: 200px;
    overflow-y: auto;
    width: 100%;
    display: none;
}
.supplier-option {
    padding: 0.5rem 0.875rem;
    font-size: 0.85rem;
    cursor: pointer;
    color: var(--gray-900);
}
.supplier-option:hover { background: var(--gray-100); }
.supplier-no-result { padding: 0.5rem 0.875rem; font-size: 0.8rem; color: var(--gray-400); }

/* Metadaten */
.meta-card {
    background: var(--color-bg);
    border: 1px solid var(--color-gray-300);
    border-radius: 0.25rem;
    padding: 1rem;
    position: relative;
}

.meta-field { margin-bottom: 0.75rem; }
.meta-field:last-child { margin-bottom: 0; }
.meta-field label { display: block; font-size: 0.7rem; font-weight: 600; text-transform: uppercase; color: var(--gray-500); margin-bottom: 0.25rem; }
.meta-field .meta-value { font-size: 0.875rem; color: var(--gray-900); }

.info-save-btn {
    padding: 0.4rem 0.75rem;
    background: var(--color-primary);
    color: var(--color-on-accent);
    border: none;
    border-radius: 0.25rem;
    font-size: 0.8rem;
    font-weight: 500;
    cursor: pointer;
    align-self: flex-end;
}
.info-save-btn:hover { background: var(--color-primary-dark); }

/* Verlauf */
.history-toggle {
    display: inline-flex;
    align-items: center;
    gap: 0.375rem;
    padding: 0.375rem 0.75rem;
    background: var(--gray-100);
    border: 1px solid var(--gray-200);
    border-radius: 0.25rem;
    font-size: 0.75rem;
    color: var(--gray-500);
    cursor: pointer;
    transition: all 0.15s;
    margin-top: 0.75rem;
    width: 100%;
    justify-content: center;
}
.history-toggle:hover { background: var(--gray-200); color: var(--gray-700); }

.history-log {
    margin-top: 0.75rem;
    background: var(--gray-50);
    border: 1px solid var(--gray-200);
    border-radius: 0.25rem;
    padding: 0.75rem;
    max-height: 200px;
    overflow-y: auto;
    font-size: 0.8rem;
}
.log-entry { padding-bottom: 0.5rem; margin-bottom: 0.5rem; border-bottom: 1px dashed var(--gray-200); }
.log-entry:last-child { border-bottom: none; margin-bottom: 0; padding-bottom: 0; }
.log-author { font-weight: 600; color: var(--gray-900); font-size: 0.8rem; }
.log-change { color: var(--gray-500); font-size: 0.75rem; }
.log-field { font-weight: 600; color: var(--gray-700); }
.log-empty { color: var(--gray-400); font-style: italic; }
.log-time { font-size: 0.7rem; color: var(--gray-400); text-align: right; }

/* Abschluss-Formular */
.close-section { margin-top: 1rem; padding-top: 1rem; border-top: 1px solid var(--gray-200); }
.close-form { display: flex; flex-direction: column; gap: 0.5rem; }
.close-form select, .close-form input {
    padding: 0.5rem 0.75rem;
    border: 1px solid var(--gray-300);
    border-radius: 0.25rem;
    font-size: 0.85rem;
    outline: none;
    width: 100%;
}
.close-form select:focus, .close-form input:focus { border-color: var(--color-primary); }
.close-btn {
    padding: 0.5rem 1rem;
    background: var(--green-500);
    color: var(--color-on-accent);
    border: none;
    border-radius: 0.25rem;
    font-size: 0.85rem;
    font-weight: 600;
    cursor: pointer;
    transition: background 0.15s;
    width: 100%;
}
.close-btn:hover { background: var(--green-600); }
.abholbereit-btn { background: var(--violet-500); }
.abholbereit-btn:hover { background: var(--violet-600); }
/* "Assets aus Bestellung anlegen": Navigations-Aktion, daher im App-Blau
   statt im grellen Aktions-Grün; Icon + Text zentriert. */
.assets-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 0.4rem;
    text-decoration: none;
    background: var(--color-primary);
}
.assets-btn:hover { background: var(--color-primary-dark); }
.assets-btn svg { flex-shrink: 0; }

/* "Zurück auf Eingetroffen" (Reaktivieren) */
.reopen-section { margin-top: 0.75rem; }
.close-btn-reopen { background: var(--amber-500); }
.close-btn-reopen:hover { background: var(--amber-600); }

/* Abholbereit-Bestätigung nutzt das zentrale Modal (.modal-overlay/.modal-card).
   Formulare im Footer ohne Außenabstand, damit sie wie Buttons in einer Reihe sitzen. */
.order-detail .modal-footer form { margin: 0; }

.delivery-info { margin-top: 0.75rem; font-size: 0.8rem; color: var(--gray-500); }
.delivery-info--closed { margin-top: 1rem; }
.delivery-info strong { color: var(--gray-900); }

/* Archive Footer */
.archive-footer { text-align: right; margin-top: 1.5rem; padding-top: 1rem; border-top: 1px solid var(--gray-200); }

/* Modal */
/* Modal: Standard-Klassen kommen aus app.css */

/* Form Elements */
.form-group { margin-bottom: 1rem; }
.form-group:last-child { margin-bottom: 0; }
.form-group label { display: block; font-size: 0.8rem; font-weight: 600; color: var(--gray-700); margin-bottom: 0.375rem; }
.form-hint { font-weight: 400; color: var(--gray-400); }
/* Eingabefelder nutzen die zentrale .form-control aus app.css (kein eigenes .form-input). */

/* Responsive */
@media (max-width: 1024px) {
    .orders-thead, .order-summary { grid-template-columns: 4px 48px 1fr 170px 130px 34px; }
    .os-supplier, .th-supplier { display: none; }
}
@media (max-width: 900px) {
    .order-detail { grid-template-columns: 1fr; }
}
@media (max-width: 680px) {
    .orders-thead, .order-summary { grid-template-columns: 4px 1fr 92px 30px; }
    .os-id, .th-id, .os-person, .th-person { display: none; }
    .os-sub-recipient { display: block; }
}
@media (max-width: 600px) {
    /* Filter-Card auf Mobil: Tabs horizontal scrollbar, Suche/Sortierung/Filter
       und Buttons stapeln über die volle Breite. */
    .orders-subnav { flex: 1 1 100%; flex-wrap: nowrap; overflow-x: auto; -webkit-overflow-scrolling: touch; }
    .orders-subnav .subnav-tab { white-space: nowrap; flex: 0 0 auto; }
    .orders-search-wrap { flex: 1 1 100%; }
    .orders-filter-select { flex: 1 1 100%; width: 100%; }
    #ordersFilterForm .btn { flex: 1 1 auto; }
}

/* ── Datei-Upload (Design wie /contracts) ──────────────── */
.cs-upload-form { display: flex; align-items: center; gap: 0.5rem; margin-bottom: 0.75rem; }
.cs-upload-hidden { display: none; }
.cs-upload-drop {
    flex: 1; display: flex; align-items: center; gap: 0.5rem;
    padding: 0.45rem 0.75rem; background: var(--color-bg); border: 1px dashed var(--gray-300);
    border-radius: 0.25rem; cursor: pointer; font-size: 0.8rem; color: var(--gray-400);
    transition: all 0.15s;
}
.cs-upload-drop:hover, .cs-upload-drop.cs-upload-dragging { border-color: var(--color-primary); background: var(--color-primary-pale); color: var(--color-primary); }
.cs-upload-drop.cs-upload-dragging { border-style: solid; }
.cs-upload-drop svg { flex-shrink: 0; }
.cs-upload-name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.cs-btn {
    display: inline-flex; align-items: center; gap: 0.375rem;
    padding: 0.5rem 1rem; border-radius: 0.25rem; font-weight: 500;
    font-size: 0.875rem; border: none; cursor: pointer; text-decoration: none;
    transition: all 0.15s;
}
.cs-btn-sm { padding: 0.4rem 0.85rem; font-size: 0.8rem; }
.cs-btn-primary { background: var(--color-primary); color: var(--color-on-accent); }
.cs-btn-primary:hover { background: var(--color-primary-dark); color: var(--color-on-accent); }
.cs-btn-ghost { background: var(--color-bg); color: var(--gray-500); border: 1px solid var(--gray-300); }
.cs-btn-ghost:hover { background: var(--gray-100); color: var(--gray-700); }
.cs-btn[disabled] { opacity: 0.6; cursor: default; }
.closed-more-wrap { text-align: center; margin: 0.5rem 0 1rem; }

/* Datei-Karten auf weißem Grund (order-detail hat grauen Hintergrund) */
.order-detail .cs-file-row { background: var(--gray-50); border-color: var(--color-gray-100); }

/* ── Strukturierte Detail-Panels ───────────────────────── */
.detail-panel {
    background: var(--color-bg);
    border: 1px solid var(--color-gray-200);
    border-radius: 0.5rem;
    margin-bottom: 1rem;
    box-shadow: 0 1px 2px rgba(0,0,0,0.03);
    overflow: hidden;
}
.detail-panel:last-child { margin-bottom: 0; }
/* Metadaten-Panel: Overflow sichtbar, damit die Autocomplete-Dropdowns
   (Empfänger-/Lieferantensuche) nicht am Panel-Rand abgeschnitten werden. */
.detail-panel.order-meta-panel { overflow: visible; }
.panel-head {
    display: flex; align-items: center; gap: 0.5rem;
    padding: 0.7rem 1rem; border-bottom: 1px solid var(--color-gray-100);
}
.panel-ico { color: var(--color-gray-500); display: flex; align-items: center; flex-shrink: 0; }
.panel-title {
    font-size: 0.72rem; font-weight: 700; text-transform: uppercase;
    letter-spacing: 0.05em; color: var(--gray-500);
}
.panel-count {
    margin-left: auto;
    font-size: 0.7rem; font-weight: 600; color: var(--gray-500);
    background: var(--color-gray-100); border-radius: 999px;
    padding: 0.05rem 0.5rem; min-width: 1.4rem; text-align: center;
}
.head-action {
    margin-left: auto; background: none; border: none; cursor: pointer;
    font-size: 0.7rem; font-weight: 600; color: var(--color-primary); padding: 0;
}
.head-action:hover { text-decoration: underline; }
.panel-body { padding: 0.75rem 1rem; }
.detail-panel .comments-list { margin-bottom: 0.75rem; }
.detail-panel .comment-item { background: var(--gray-50); border-color: var(--color-gray-100); }

/* Metadaten – Lese-Ansicht als Definitionsliste */
.meta-dl { display: grid; grid-template-columns: auto 1fr; gap: 0.5rem 0.9rem; align-items: baseline; margin: 0; }
.meta-dl dt { font-size: 0.7rem; font-weight: 600; color: var(--gray-400); text-transform: uppercase; letter-spacing: 0.03em; }
.meta-dl dd { margin: 0; font-size: 0.86rem; color: var(--gray-900); min-width: 0; }
.meta-link { color: var(--blue-600); text-decoration: none; }
.meta-link:hover { color: var(--blue-700); text-decoration: none; }
/* Links im Bestell-Modul werden generell nicht unterstrichen (auch nicht im Hover). */
.orders-fullwidth a,
.orders-fullwidth a:hover { text-decoration: none; }
.meta-pri { display: inline-block; font-size: 0.7rem; font-weight: 700; padding: 0.08rem 0.5rem; border-radius: 999px; }
.meta-pri.pri-low    { background: var(--gray-100); color: var(--gray-500); }
.meta-pri.pri-normal { background: var(--sky-100); color: var(--sky-800); }
.meta-pri.pri-high   { background: var(--amber-100); color: var(--amber-800); }
.meta-pri.pri-urgent { background: var(--red-100); color: var(--red-800); }
.rcp-name { font-size: 0.86rem; color: var(--gray-900); }
.rcp-chips { display: flex; flex-wrap: wrap; gap: 0.35rem; margin-top: 0.3rem; }
.rcp-chip {
    display: inline-flex; align-items: center; gap: 0.3rem;
    font-size: 0.74rem; color: var(--gray-700); background: var(--slate-100);
    border: 1px solid var(--gray-200); border-radius: 999px; padding: 0.12rem 0.55rem;
    text-decoration: none; transition: all 0.15s; max-width: 100%;
}
.rcp-chip:hover { background: var(--color-primary-pale); border-color: var(--color-primary-muted); color: var(--color-primary-strong); }
.rcp-chip svg { width: 11px; height: 11px; opacity: 0.7; flex-shrink: 0; }
.rcp-chip span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* Verlauf – Timeline */
.order-timeline { position: relative; padding-left: 0.85rem; max-height: 260px; overflow-y: auto; }
.order-timeline::before { content: ''; position: absolute; left: 3px; top: 4px; bottom: 4px; width: 2px; background: var(--slate-100); }
.tl-item { position: relative; padding: 0 0 0.7rem 0.65rem; }
.tl-item:last-child { padding-bottom: 0; }
.tl-item::before { content: ''; position: absolute; left: -0.6rem; top: 5px; width: 8px; height: 8px; border-radius: 50%; background: var(--color-primary); border: 2px solid var(--color-bg); }
.tl-line { font-size: 0.78rem; color: var(--gray-700); line-height: 1.35; }
.tl-line .log-field { font-weight: 600; color: var(--gray-900); }
.tl-meta { font-size: 0.7rem; color: var(--gray-400); margin-top: 0.1rem; }
.log-empty { color: var(--gray-400); font-style: italic; }

/* Aktionen-Panel: gleichmäßige Abstände, keine Doppel-Trennlinien */
.detail-panel--actions .close-section,
.detail-panel--actions > div[style] { margin-top: 0; padding-top: 0; border-top: none; }
.detail-panel--actions .close-section + div[style],
.detail-panel--actions .close-section ~ .delivery-info { margin-top: 0.75rem; }
/* Mehrere Aktions-Abschnitte (z. B. „Assets aus Bestellung anlegen" gefolgt
   vom Abschluss-/Abholbereit-Abschnitt) brauchen wieder Abstand zueinander. */
.detail-panel--actions .close-section + .close-section { margin-top: 0.75rem; }
.detail-panel--actions .delivery-info { margin-top: 0; }

/* Metadaten-Bearbeiten: Formular mit einem Speichern-Button */
.meta-form .meta-field-edit { margin-bottom: 0.6rem; position: relative; }
.meta-form .meta-field-edit label {
    display: flex; align-items: center; justify-content: space-between; gap: 0.5rem;
    font-size: 0.78rem; font-weight: 600; color: var(--gray-500); margin-bottom: 0.2rem;
}
.meta-clear-btn {
    background: none; border: none; padding: 0; cursor: pointer;
    color: var(--red-500); font-size: 0.72rem; font-weight: 600;
}
.meta-clear-btn:hover { text-decoration: underline; }
.meta-actions {
    display: flex; align-items: center; gap: 0.75rem;
    margin-top: 0.75rem;
}
.meta-edit-cancel { background: none; border: none; color: var(--gray-500); font-size: 0.8rem; cursor: pointer; }
.meta-edit-cancel:hover { text-decoration: underline; }
.meta-save-btn { flex: 0 0 auto; }
.meta-save-status { font-size: 0.8rem; font-weight: 600; }
.meta-save-status.meta-save-ok { color: var(--green-600); }
.meta-save-status.meta-save-err { color: var(--red-600); }
@media (max-width: 600px) {
    .cs-upload-form { flex-direction: column; align-items: stretch; }
}