gruene-seele/resources/views/admin/inventory/partials/wawi-ui.blade.php
Kevin Adametz a8f6fef38e Warenwirtschaft: einheitliches UI-Design (AP-19)
- Zentrale, wiederverwendbare Design-Partial wawi-ui.blade.php (gescoptes Inline-CSS, kein Build noetig)
- Bausteine: Seitenkopf, Kennzahlen-Kacheln, Karten, Toolbar/Suche, aufgeraeumte Tabellen, Status-Pills, Datenblatt-Definitionsliste, Name-Zelle mit fester Icon-Spalte, Leer-Zustaende
- Umgestellt: alle Uebersicht-/Listen- und Detailseiten unter admin/inventory
- Responsive: Detail-Datenblaetter brechen unter 768px gestapelt um (Label oben, Wert linksbuendig); Icon-Spalte verhindert Versatz bei Zeilenumbruch
- Entwicklungsplan um AP-19 + UI-Konvention ergaenzt

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-03 13:09:55 +00:00

283 lines
10 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

@once
<style>
/* =====================================================================
Warenwirtschaft einheitliches UI (Vorschlag / Prototyp)
Alles auf ".wawi-page" gescoped, damit nichts anderes beeinflusst wird.
===================================================================== */
.wawi-page {
--wawi-accent: #6b8e5a;
--wawi-accent-soft: rgba(107, 142, 90, .12);
--wawi-radius: .625rem;
--wawi-border: rgba(24, 28, 33, .08);
--wawi-shadow: 0 1px 2px rgba(24, 28, 33, .04), 0 2px 8px rgba(24, 28, 33, .04);
--wawi-muted: #8a909d;
}
/* --- Seitenkopf -------------------------------------------------- */
.wawi-page-head {
display: flex;
flex-wrap: wrap;
align-items: flex-end;
justify-content: space-between;
gap: 1rem;
margin-bottom: 1.25rem;
}
.wawi-page-head__title {
margin: 0;
font-size: 1.375rem;
font-weight: 600;
line-height: 1.2;
}
.wawi-page-head__subtitle {
margin: .35rem 0 0;
color: var(--wawi-muted);
font-size: .875rem;
}
.wawi-page-head__actions {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: .5rem;
}
/* --- Kennzahlen-Kacheln ------------------------------------------ */
.wawi-stats {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(190px, 1fr));
gap: 1rem;
margin-bottom: 1.25rem;
}
.wawi-stat {
position: relative;
display: flex;
align-items: center;
gap: .9rem;
padding: 1rem 1.1rem;
background: #fff;
border: 1px solid var(--wawi-border);
border-radius: var(--wawi-radius);
box-shadow: var(--wawi-shadow);
}
.wawi-stat__icon {
display: flex;
align-items: center;
justify-content: center;
flex: 0 0 auto;
width: 2.75rem;
height: 2.75rem;
border-radius: .55rem;
font-size: 1.1rem;
background: var(--wawi-accent-soft);
color: var(--wawi-accent);
}
.wawi-stat__body { min-width: 0; }
.wawi-stat__value {
font-size: 1.4rem;
font-weight: 600;
line-height: 1.1;
}
.wawi-stat__label {
color: var(--wawi-muted);
font-size: .8rem;
text-transform: uppercase;
letter-spacing: .03em;
}
.wawi-stat--ok .wawi-stat__icon { background: rgba(40, 199, 111, .14); color: #28c76f; }
.wawi-stat--warning .wawi-stat__icon { background: rgba(255, 171, 0, .16); color: #ff9f00; }
.wawi-stat--danger .wawi-stat__icon { background: rgba(255, 91, 92, .14); color: #ff5b5c; }
.wawi-stat.is-clickable { cursor: pointer; transition: box-shadow .15s ease, transform .15s ease; }
.wawi-stat.is-clickable:hover { transform: translateY(-1px); box-shadow: 0 4px 14px rgba(24,28,33,.1); }
.wawi-stat.is-active { border-color: var(--wawi-accent); box-shadow: 0 0 0 1px var(--wawi-accent); }
/* --- Karte + Toolbar --------------------------------------------- */
.wawi-card {
background: #fff;
border: 1px solid var(--wawi-border);
border-radius: var(--wawi-radius);
box-shadow: var(--wawi-shadow);
overflow: hidden;
}
.wawi-toolbar {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: .75rem;
padding: 1rem 1.25rem;
border-bottom: 1px solid var(--wawi-border);
}
.wawi-search {
position: relative;
flex: 1 1 260px;
max-width: 360px;
}
.wawi-search .fas {
position: absolute;
top: 50%;
left: .85rem;
transform: translateY(-50%);
color: var(--wawi-muted);
font-size: .85rem;
pointer-events: none;
}
.wawi-search .form-control {
padding-left: 2.25rem;
border-radius: 2rem;
}
.wawi-toolbar__spacer { flex: 1 1 auto; }
.wawi-card__header {
display: flex;
flex-wrap: wrap;
align-items: center;
justify-content: space-between;
gap: .5rem;
padding: .9rem 1.25rem;
border-bottom: 1px solid var(--wawi-border);
font-weight: 600;
}
.wawi-card__footer {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: .5rem;
padding: .85rem 1.25rem;
border-top: 1px solid var(--wawi-border);
background: rgba(24, 28, 33, .015);
}
.wawi-card + .wawi-card { margin-top: 1.25rem; }
/* --- Tabelle ----------------------------------------------------- */
.wawi-page .wawi-table { margin-bottom: 0; }
.wawi-page .wawi-table thead th {
border-top: 0;
border-bottom: 1px solid var(--wawi-border);
background: rgba(24, 28, 33, .02);
color: var(--wawi-muted);
font-size: .72rem;
font-weight: 600;
text-transform: uppercase;
letter-spacing: .04em;
padding-top: .8rem;
padding-bottom: .8rem;
white-space: nowrap;
}
.wawi-page .wawi-table tbody td {
vertical-align: middle;
padding-top: .7rem;
padding-bottom: .7rem;
border-top: 1px solid var(--wawi-border);
}
.wawi-page .wawi-table tbody tr { transition: background-color .12s ease; }
.wawi-page .wawi-table tbody tr:hover { background-color: rgba(24, 28, 33, .025); }
/* Status nur über schmale Akzent-Leiste links statt komplettem Zeilen-Rot */
.wawi-page .wawi-table tbody tr.is-warning td:first-child { box-shadow: inset .25rem 0 0 #ff9f00; }
.wawi-page .wawi-table tbody tr.is-danger td:first-child { box-shadow: inset .25rem 0 0 #ff5b5c; }
.wawi-thumb {
width: 42px;
height: 42px;
border-radius: .5rem;
object-fit: cover;
background: rgba(24, 28, 33, .03);
border: 1px solid var(--wawi-border);
}
.wawi-thumb--empty {
display: flex;
align-items: center;
justify-content: center;
color: var(--wawi-muted);
}
.wawi-item-name { font-weight: 600; }
.wawi-item-sub { color: var(--wawi-muted); font-size: .8rem; }
/* Name-Zelle mit fester Icon-Spalte, damit umgebrochener Text nicht unter das Icon rutscht */
.wawi-name-cell {
display: flex;
align-items: flex-start;
gap: .5rem;
}
.wawi-name-cell__icon {
flex: 0 0 auto;
margin-top: .15rem;
}
/* --- Status-Pills ------------------------------------------------ */
.wawi-pill {
display: inline-flex;
align-items: center;
gap: .35rem;
padding: .2rem .6rem;
border-radius: 2rem;
font-size: .75rem;
font-weight: 600;
line-height: 1.4;
}
.wawi-pill::before {
content: "";
width: .5rem;
height: .5rem;
border-radius: 50%;
background: currentColor;
}
.wawi-pill--ok { background: rgba(40, 199, 111, .14); color: #1f9d57; }
.wawi-pill--warning { background: rgba(255, 171, 0, .16); color: #c77d00; }
.wawi-pill--danger { background: rgba(255, 91, 92, .14); color: #d63031; }
/* --- Aktionen ---------------------------------------------------- */
.wawi-actions {
display: inline-flex;
align-items: center;
gap: .35rem;
white-space: nowrap;
}
.wawi-actions .btn { margin: 0; }
/* --- Datenblatt / Definitionsliste ------------------------------- */
.wawi-deflist {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 0 2.5rem;
margin: 0;
}
.wawi-deflist__item {
display: flex;
align-items: baseline;
justify-content: space-between;
gap: 1rem;
padding: .7rem 0;
border-bottom: 1px solid var(--wawi-border);
}
.wawi-deflist__label {
flex: 0 0 auto;
color: var(--wawi-muted);
font-size: .8rem;
font-weight: 600;
text-transform: uppercase;
letter-spacing: .03em;
}
.wawi-deflist__value {
text-align: right;
font-weight: 500;
}
.wawi-deflist__value .text-muted { font-weight: 400; }
/* Volle Breite erzwingen (z. B. Notizen) */
.wawi-deflist__item--wide { grid-column: 1 / -1; }
@media (max-width: 767.98px) {
.wawi-deflist { grid-template-columns: minmax(0, 1fr); }
.wawi-deflist__item {
flex-direction: column;
align-items: flex-start;
gap: .15rem;
padding: .55rem 0;
}
.wawi-deflist__label { font-size: .72rem; }
.wawi-deflist__value { text-align: left; }
}
/* --- Leerer Zustand ---------------------------------------------- */
.wawi-empty {
padding: 3rem 1rem;
text-align: center;
color: var(--wawi-muted);
}
.wawi-empty .fas { font-size: 1.75rem; opacity: .5; margin-bottom: .5rem; }
</style>
@endonce