Verwaltung: alle Kisten deutlich aufgewertet ("speziell speziell speziell")

Jede der 6 Kisten (Bestellstatus, Kennzahlen, Bestseller je Kategorie, Herkunft,
Stammkundschaft, Alle Bestellungen) bekommt jetzt:
- einen schimmernden Aurora-Rand in der eigenen Box-Farbe (derselbe Verlaufs-
  Trick wie beim Hero-Kopf, nur pro Kiste individuell eingefärbt)
- ihr eigenes Icon riesig und ganz dezent als Wasserzeichen im Hintergrund
- einen "Radar-Ping"-Ring, der leise vom Icon-Abzeichen ausgeht
- eine kleine farbige Eyebrow-Kennzeichnung über dem Titel (z.B. "TOP-VERKÄUFE",
  "GEOGRAFIE", "TREUE & WIEDERKEHR")

Die Kennzahlen-Kacheln bekommen zusätzlich einen Lichtstreif, der beim Hover
einmal quer durchläuft. Alles respektiert prefers-reduced-motion.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
This commit is contained in:
qcigano
2026-08-03 23:50:45 +02:00
co-authored by Claude Sonnet 5
parent ac9f3771f2
commit c8f699034f
2 changed files with 111 additions and 23 deletions
+81 -11
View File
@@ -2870,23 +2870,34 @@ a:focus-visible, button:focus-visible {
/* "Kisten" — jede zusammengehörige Gruppe (Bestellstatus, Kennzahlen, Bestellliste, Bestseller,
Herkunft, Stammkundschaft) bekommt ihre eigene, klar abgegrenzte Box mit eigener Akzentfarbe
(--box-color, pro Kiste per inline style gesetzt) statt lose auf der Seite zu stehen — auf
Wunsch ("alles was zueinander passt in einer Kiste, richtig geil speziell") deutlich
eigenständiger gestaltet als eine normale .card: eigener farbiger Eckenschein, eigenes
Icon-Abzeichen vor dem Titel, dezent pulsierender Rand. */
(--box-color, pro Kiste per inline style gesetzt) statt lose auf der Seite zu stehen. Auf
Wunsch ("alle Kisten sollen speziell speziell speziell sein, überrasch mich") noch eine Stufe
weiter aufgewertet: der Rand schimmert jetzt wie eine Aurora in der jeweiligen Box-Farbe
(derselbe Verlaufs-Trick wie beim Hero-Kopf oben auf der Seite, siehe .verwaltung-hero), jede
Box trägt ihr eigenes Icon zusätzlich riesig und ganz dezent als Wasserzeichen im Hintergrund
(per data-icon-Attribut, kein Bild nötig), und das Icon-Abzeichen sendet einen leisen
"Radar-Ping"-Ring aus — zusammen wirkt jede Kiste wie eine eigenständige kleine Instrumenten-
Kachel statt einer austauschbaren grauen Box. */
.verwaltung-box {
position: relative;
overflow: hidden;
border-radius: var(--radius-l);
border: 1.5px solid color-mix(in srgb, var(--box-color, var(--c-accent)) 38%, transparent);
background: linear-gradient(155deg, color-mix(in srgb, var(--box-color, var(--c-accent)) 9%, var(--c-anthracite-light)), var(--c-anthracite));
border: 1.5px solid transparent;
background:
linear-gradient(155deg, color-mix(in srgb, var(--box-color, var(--c-accent)) 9%, var(--c-anthracite-light)), var(--c-anthracite)) padding-box,
linear-gradient(120deg, var(--box-color, var(--c-accent)), color-mix(in srgb, var(--box-color, var(--c-accent)) 35%, white), var(--box-color, var(--c-accent))) border-box;
background-size: 100% 100%, 300% 100%;
padding: 1.6rem 1.7rem;
margin: 1.4rem 0;
animation: verwaltung-box-glow 3.4s ease-in-out infinite;
animation: verwaltung-box-border-shift 9s ease-in-out infinite, verwaltung-box-glow 3.4s ease-in-out infinite;
}
@keyframes verwaltung-box-border-shift {
0%, 100% { background-position: 0 0, 0% 50%; }
50% { background-position: 0 0, 100% 50%; }
}
@keyframes verwaltung-box-glow {
0%, 100% { box-shadow: 0 0 0 1px color-mix(in srgb, var(--box-color, var(--c-accent)) 22%, transparent); }
50% { box-shadow: 0 0 22px -8px color-mix(in srgb, var(--box-color, var(--c-accent)) 55%, transparent); }
50% { box-shadow: 0 0 26px -6px color-mix(in srgb, var(--box-color, var(--c-accent)) 60%, transparent); }
}
.verwaltung-box::before {
content: "";
@@ -2898,6 +2909,21 @@ a:focus-visible, button:focus-visible {
background: radial-gradient(circle, color-mix(in srgb, var(--box-color, var(--c-accent)) 30%, transparent), transparent 70%);
pointer-events: none;
}
/* Riesiges, kaum sichtbares Icon-Wasserzeichen — nutzt dasselbe Icon wie das Abzeichen (über
data-icon), damit jede Kiste eine eigene "Textur" bekommt, ganz ohne zusätzliche Bilddateien. */
.verwaltung-box::after {
content: attr(data-icon);
position: absolute;
right: -1rem;
bottom: -2.2rem;
font-size: 8.5rem;
line-height: 1;
opacity: 0.06;
transform: rotate(-10deg);
filter: grayscale(0.4);
pointer-events: none;
z-index: 0;
}
.verwaltung-box-head {
display: flex;
align-items: center;
@@ -2906,6 +2932,15 @@ a:focus-visible, button:focus-visible {
position: relative;
z-index: 1;
}
.verwaltung-box-headtext { display: flex; flex-direction: column; gap: 0.15rem; min-width: 0; }
.verwaltung-box-kicker {
font-size: 0.72rem;
font-weight: 700;
letter-spacing: 0.08em;
text-transform: uppercase;
color: color-mix(in srgb, var(--box-color, var(--c-accent)) 80%, white);
opacity: 0.85;
}
.verwaltung-box-icon {
display: flex;
align-items: center;
@@ -2917,10 +2952,27 @@ a:focus-visible, button:focus-visible {
font-size: 1.3rem;
background: color-mix(in srgb, var(--box-color, var(--c-accent)) 24%, transparent);
border: 1px solid color-mix(in srgb, var(--box-color, var(--c-accent)) 55%, transparent);
position: relative;
}
.verwaltung-box-head h2 { margin: 0; font-size: 1.3rem; }
.verwaltung-box-icon::before {
content: "";
position: absolute;
inset: -6px;
border-radius: 50%;
border: 1.5px solid color-mix(in srgb, var(--box-color, var(--c-accent)) 65%, transparent);
animation: verwaltung-box-icon-ping 2.8s ease-out infinite;
pointer-events: none;
}
@keyframes verwaltung-box-icon-ping {
0% { transform: scale(0.75); opacity: 0.75; }
70%, 100% { transform: scale(1.4); opacity: 0; }
}
.verwaltung-box-head h2, .verwaltung-box-headtext h2 { margin: 0; font-size: 1.3rem; }
.verwaltung-box-body { position: relative; z-index: 1; }
@media (prefers-reduced-motion: reduce) { .verwaltung-box { animation: none; } }
@media (prefers-reduced-motion: reduce) {
.verwaltung-box,
.verwaltung-box-icon::before { animation: none; }
}
/* Leerzustände innerhalb einer Kiste — großes Icon + kurzer, freundlicher Text statt nacktem
Fließtext, damit auch "noch nichts da" nicht trostlos wirkt. */
@@ -2970,7 +3022,7 @@ a:focus-visible, button:focus-visible {
text-align: left;
cursor: pointer;
}
.verwaltung-box-head-btn h2 { flex: 1; }
.verwaltung-box-head-btn .verwaltung-box-headtext { flex: 1; }
.verwaltung-box-chevron {
flex-shrink: 0;
font-size: 1.1rem;
@@ -3028,6 +3080,8 @@ a:focus-visible, button:focus-visible {
}
@media (prefers-reduced-motion: reduce) { #stat-attention-tile { animation: none; } }
.verwaltung-stat-tile {
position: relative;
overflow: hidden;
display: flex;
flex-direction: column;
align-items: flex-start;
@@ -3041,6 +3095,22 @@ a:focus-visible, button:focus-visible {
color: inherit;
}
.verwaltung-stat-tile:hover { transform: translateY(-3px); border-color: var(--c-accent); }
/* Kleiner Lichtstreif, der beim Hover einmal quer über die Kachel läuft — dezente "Premium"-
Mikro-Interaktion statt einer starren Karte. */
.verwaltung-stat-tile::after {
content: "";
position: absolute;
top: 0;
left: -60%;
width: 40%;
height: 100%;
background: linear-gradient(120deg, transparent, rgba(255, 255, 255, 0.16), transparent);
transform: skewX(-20deg);
transition: left 0.6s var(--ease);
pointer-events: none;
}
.verwaltung-stat-tile:hover::after { left: 120%; }
@media (prefers-reduced-motion: reduce) { .verwaltung-stat-tile::after { transition: none; display: none; } }
.verwaltung-stat-tile-highlight { border-color: color-mix(in srgb, #e3b23c 45%, transparent); background: color-mix(in srgb, #e3b23c 10%, var(--c-anthracite-light)); cursor: default; }
.verwaltung-stat-tile-highlight:hover { transform: none; border-color: color-mix(in srgb, #e3b23c 45%, transparent); }
.verwaltung-stat-icon { font-size: 1.6rem; }