🎉 Fix for JOBS_UNDEFINED and LOG_EXPORT issues, updated documentation 📚 in backend/docs.

This commit is contained in:
2025-06-01 04:04:34 +02:00
parent 45d8d46556
commit 5ee854cbc6
43 changed files with 3053 additions and 118 deletions

View File

@@ -1055,48 +1055,792 @@
/* Benachrichtigungen */
.notification {
@apply fixed top-4 right-4 max-w-md p-4 rounded-lg shadow-lg transform translate-x-full opacity-0 transition-all duration-300 z-50 bg-white dark:bg-slate-800 border-l-4;
@apply fixed top-4 right-4 max-w-md p-4 rounded-2xl shadow-2xl transform translate-x-full opacity-0 transition-all duration-500 z-50;
background: rgba(255, 255, 255, 0.08);
backdrop-filter: blur(40px) saturate(200%) brightness(130%) contrast(110%);
-webkit-backdrop-filter: blur(40px) saturate(200%) brightness(130%) contrast(110%);
border: 1px solid rgba(255, 255, 255, 0.25);
box-shadow:
0 32px 64px rgba(0, 0, 0, 0.25),
0 12px 24px rgba(0, 0, 0, 0.15),
inset 0 1px 0 rgba(255, 255, 255, 0.4),
0 0 0 1px rgba(255, 255, 255, 0.1);
animation: notification-slide-in 0.6s cubic-bezier(0.4, 0, 0.2, 1);
}
.dark .notification {
background: rgba(0, 0, 0, 0.2);
backdrop-filter: blur(40px) saturate(180%) brightness(120%) contrast(115%);
-webkit-backdrop-filter: blur(40px) saturate(180%) brightness(120%) contrast(115%);
border: 1px solid rgba(255, 255, 255, 0.15);
box-shadow:
0 32px 64px rgba(0, 0, 0, 0.6),
0 12px 24px rgba(0, 0, 0, 0.4),
inset 0 1px 0 rgba(255, 255, 255, 0.2),
0 0 0 1px rgba(255, 255, 255, 0.05);
}
.notification.show {
@apply translate-x-0 opacity-100;
}
.notification:hover {
transform: translateY(-2px) scale(1.02);
box-shadow:
0 40px 80px rgba(0, 0, 0, 0.3),
0 16px 32px rgba(0, 0, 0, 0.2),
inset 0 1px 0 rgba(255, 255, 255, 0.5),
0 0 0 1px rgba(255, 255, 255, 0.15);
}
.dark .notification:hover {
box-shadow:
0 40px 80px rgba(0, 0, 0, 0.7),
0 16px 32px rgba(0, 0, 0, 0.5),
inset 0 1px 0 rgba(255, 255, 255, 0.3),
0 0 0 1px rgba(255, 255, 255, 0.1);
}
.notification-success {
@apply border-green-500;
@apply text-green-100;
background: linear-gradient(135deg,
rgba(34, 197, 94, 0.25) 0%,
rgba(134, 239, 172, 0.18) 50%,
rgba(34, 197, 94, 0.12) 100%);
border: 1px solid rgba(34, 197, 94, 0.4);
box-shadow:
0 32px 64px rgba(34, 197, 94, 0.2),
0 12px 24px rgba(34, 197, 94, 0.1),
inset 0 1px 0 rgba(255, 255, 255, 0.4),
0 0 0 1px rgba(34, 197, 94, 0.3);
}
.notification-error {
@apply border-red-500;
@apply text-red-100;
background: linear-gradient(135deg,
rgba(239, 68, 68, 0.25) 0%,
rgba(252, 165, 165, 0.18) 50%,
rgba(239, 68, 68, 0.12) 100%);
border: 1px solid rgba(239, 68, 68, 0.4);
box-shadow:
0 32px 64px rgba(239, 68, 68, 0.2),
0 12px 24px rgba(239, 68, 68, 0.1),
inset 0 1px 0 rgba(255, 255, 255, 0.4),
0 0 0 1px rgba(239, 68, 68, 0.3);
}
.notification-warning {
@apply border-yellow-500;
@apply text-yellow-100;
background: linear-gradient(135deg,
rgba(245, 158, 11, 0.25) 0%,
rgba(252, 211, 77, 0.18) 50%,
rgba(245, 158, 11, 0.12) 100%);
border: 1px solid rgba(245, 158, 11, 0.4);
box-shadow:
0 32px 64px rgba(245, 158, 11, 0.2),
0 12px 24px rgba(245, 158, 11, 0.1),
inset 0 1px 0 rgba(255, 255, 255, 0.4),
0 0 0 1px rgba(245, 158, 11, 0.3);
}
.notification-info {
@apply border-blue-500;
@apply text-blue-100;
background: linear-gradient(135deg,
rgba(59, 130, 246, 0.25) 0%,
rgba(147, 197, 253, 0.18) 50%,
rgba(59, 130, 246, 0.12) 100%);
border: 1px solid rgba(59, 130, 246, 0.4);
box-shadow:
0 32px 64px rgba(59, 130, 246, 0.2),
0 12px 24px rgba(59, 130, 246, 0.1),
inset 0 1px 0 rgba(255, 255, 255, 0.4),
0 0 0 1px rgba(59, 130, 246, 0.3);
}
/* Alerts */
/* Toast-Benachrichtigungen - Einheitlich */
.toast-notification {
@apply fixed z-50 p-4 rounded-2xl shadow-2xl transform transition-all duration-500 text-sm font-medium;
background: rgba(255, 255, 255, 0.08);
backdrop-filter: blur(40px) saturate(200%) brightness(130%) contrast(110%);
-webkit-backdrop-filter: blur(40px) saturate(200%) brightness(130%) contrast(110%);
border: 1px solid rgba(255, 255, 255, 0.25);
box-shadow:
0 32px 64px rgba(0, 0, 0, 0.25),
0 12px 24px rgba(0, 0, 0, 0.15),
inset 0 1px 0 rgba(255, 255, 255, 0.4),
0 0 0 1px rgba(255, 255, 255, 0.1);
}
.dark .toast-notification {
background: rgba(0, 0, 0, 0.2);
backdrop-filter: blur(40px) saturate(180%) brightness(120%) contrast(115%);
-webkit-backdrop-filter: blur(40px) saturate(180%) brightness(120%) contrast(115%);
border: 1px solid rgba(255, 255, 255, 0.15);
box-shadow:
0 32px 64px rgba(0, 0, 0, 0.6),
0 12px 24px rgba(0, 0, 0, 0.4),
inset 0 1px 0 rgba(255, 255, 255, 0.2),
0 0 0 1px rgba(255, 255, 255, 0.05);
}
/* Alert-Benachrichtigungen - Verbessert */
.alert {
@apply p-4 rounded-lg border mb-4;
@apply p-6 rounded-2xl border mb-6 shadow-2xl;
background: rgba(255, 255, 255, 0.12);
backdrop-filter: blur(30px) saturate(200%) brightness(120%) contrast(110%);
-webkit-backdrop-filter: blur(30px) saturate(200%) brightness(120%) contrast(110%);
border: 1px solid rgba(255, 255, 255, 0.25);
box-shadow:
0 25px 50px rgba(0, 0, 0, 0.15),
0 8px 16px rgba(0, 0, 0, 0.1),
inset 0 1px 0 rgba(255, 255, 255, 0.3),
0 0 0 1px rgba(255, 255, 255, 0.1);
animation: alert-fade-in 0.5s ease-out;
}
.dark .alert {
background: rgba(0, 0, 0, 0.3);
backdrop-filter: blur(30px) saturate(180%) brightness(110%) contrast(120%);
-webkit-backdrop-filter: blur(30px) saturate(180%) brightness(110%) contrast(120%);
border: 1px solid rgba(255, 255, 255, 0.15);
box-shadow:
0 25px 50px rgba(0, 0, 0, 0.4),
0 8px 16px rgba(0, 0, 0, 0.3),
inset 0 1px 0 rgba(255, 255, 255, 0.15),
0 0 0 1px rgba(255, 255, 255, 0.05);
}
.alert-success {
@apply bg-green-50 border-green-500 text-green-800 dark:bg-green-900/30 dark:text-green-200;
@apply text-green-900 dark:text-green-100;
background: linear-gradient(135deg,
rgba(34, 197, 94, 0.15) 0%,
rgba(134, 239, 172, 0.1) 50%,
rgba(34, 197, 94, 0.08) 100%);
border: 1px solid rgba(34, 197, 94, 0.3);
}
.alert-error {
@apply bg-red-50 border-red-500 text-red-800 dark:bg-red-900/30 dark:text-red-200;
@apply text-red-900 dark:text-red-100;
background: linear-gradient(135deg,
rgba(239, 68, 68, 0.15) 0%,
rgba(252, 165, 165, 0.1) 50%,
rgba(239, 68, 68, 0.08) 100%);
border: 1px solid rgba(239, 68, 68, 0.3);
}
.alert-warning {
@apply bg-yellow-50 border-yellow-500 text-yellow-800 dark:bg-yellow-900/30 dark:text-yellow-200;
@apply text-yellow-900 dark:text-yellow-100;
background: linear-gradient(135deg,
rgba(245, 158, 11, 0.15) 0%,
rgba(252, 211, 77, 0.1) 50%,
rgba(245, 158, 11, 0.08) 100%);
border: 1px solid rgba(245, 158, 11, 0.3);
}
.alert-info {
@apply bg-blue-50 border-blue-500 text-blue-800 dark:bg-blue-900/30 dark:text-blue-200;
@apply text-blue-900 dark:text-blue-100;
background: linear-gradient(135deg,
rgba(59, 130, 246, 0.15) 0%,
rgba(147, 197, 253, 0.1) 50%,
rgba(59, 130, 246, 0.08) 100%);
border: 1px solid rgba(59, 130, 246, 0.3);
}
/* Browser-Notification-Container */
.browser-notification {
@apply fixed top-4 left-4 max-w-sm p-4 rounded-2xl shadow-2xl z-50;
background: rgba(255, 255, 255, 0.08);
backdrop-filter: blur(40px) saturate(200%) brightness(130%) contrast(110%);
-webkit-backdrop-filter: blur(40px) saturate(200%) brightness(130%) contrast(110%);
border: 1px solid rgba(255, 255, 255, 0.25);
box-shadow:
0 32px 64px rgba(0, 0, 0, 0.25),
0 12px 24px rgba(0, 0, 0, 0.15),
inset 0 1px 0 rgba(255, 255, 255, 0.4),
0 0 0 1px rgba(255, 255, 255, 0.1);
animation: notification-slide-left 0.6s cubic-bezier(0.4, 0, 0.2, 1);
}
.dark .browser-notification {
background: rgba(0, 0, 0, 0.2);
backdrop-filter: blur(40px) saturate(180%) brightness(120%) contrast(115%);
-webkit-backdrop-filter: blur(40px) saturate(180%) brightness(120%) contrast(115%);
border: 1px solid rgba(255, 255, 255, 0.15);
box-shadow:
0 32px 64px rgba(0, 0, 0, 0.6),
0 12px 24px rgba(0, 0, 0, 0.4),
inset 0 1px 0 rgba(255, 255, 255, 0.2),
0 0 0 1px rgba(255, 255, 255, 0.05);
}
/* Notification-Animationen */
@keyframes notification-slide-in {
0% {
opacity: 0;
transform: translateX(100%) translateY(-20px) scale(0.9);
backdrop-filter: blur(0px);
}
50% {
opacity: 0.8;
transform: translateX(20px) translateY(-10px) scale(1.05);
backdrop-filter: blur(20px);
}
100% {
opacity: 1;
transform: translateX(0) translateY(0) scale(1);
backdrop-filter: blur(40px);
}
}
@keyframes notification-slide-out {
0% {
opacity: 1;
transform: translateX(0) translateY(0) scale(1);
}
100% {
opacity: 0;
transform: translateX(100%) translateY(-20px) scale(0.9);
}
}
@keyframes notification-slide-left {
0% {
opacity: 0;
transform: translateX(-100%) translateY(-20px) scale(0.9);
backdrop-filter: blur(0px);
}
50% {
opacity: 0.8;
transform: translateX(-20px) translateY(-10px) scale(1.05);
backdrop-filter: blur(20px);
}
100% {
opacity: 1;
transform: translateX(0) translateY(0) scale(1);
backdrop-filter: blur(40px);
}
}
@keyframes alert-fade-in {
0% {
opacity: 0;
transform: translateY(-20px) scale(0.95);
}
100% {
opacity: 1;
transform: translateY(0) scale(1);
}
}
.notification.hiding {
animation: notification-slide-out 0.4s cubic-bezier(0.4, 0, 0.2, 1) forwards;
}
/* Notification-Icons mit Glassmorphism */
.notification-icon {
@apply flex items-center justify-center w-8 h-8 rounded-full mr-3 flex-shrink-0;
background: rgba(255, 255, 255, 0.2);
backdrop-filter: blur(20px);
-webkit-backdrop-filter: blur(20px);
border: 1px solid rgba(255, 255, 255, 0.3);
box-shadow:
0 8px 16px rgba(0, 0, 0, 0.1),
inset 0 1px 0 rgba(255, 255, 255, 0.4);
}
.notification-content {
@apply flex-1;
}
.notification-title {
@apply font-semibold text-sm mb-1;
}
.notification-message {
@apply text-sm opacity-90;
}
.notification-close {
@apply ml-3 p-1 rounded-lg opacity-70 hover:opacity-100 transition-opacity;
background: rgba(255, 255, 255, 0.1);
backdrop-filter: blur(10px);
-webkit-backdrop-filter: blur(10px);
border: 1px solid rgba(255, 255, 255, 0.2);
}
.notification-close:hover {
background: rgba(255, 255, 255, 0.2);
transform: scale(1.1);
}
/* Multiple Notifications Container */
.notifications-container {
@apply fixed top-4 right-4 z-50 space-y-3 max-w-md;
}
.notifications-container-left {
@apply fixed top-4 left-4 z-50 space-y-3 max-w-sm;
}
/* Flash-Message-Verbesserungen - Vereinheitlicht */
.flash-message-light {
background: linear-gradient(135deg,
rgba(255, 255, 255, 0.95) 0%,
rgba(248, 250, 252, 0.9) 100%);
backdrop-filter: blur(32px) saturate(200%) brightness(120%);
-webkit-backdrop-filter: blur(32px) saturate(200%) brightness(120%);
border: 1px solid rgba(226, 232, 240, 0.6);
box-shadow:
0 25px 50px rgba(0, 0, 0, 0.1),
0 12px 24px rgba(0, 115, 206, 0.05),
inset 0 1px 0 rgba(255, 255, 255, 0.8);
color: var(--color-text-primary);
}
.flash-message-light.success {
border-left: 4px solid #10b981;
background: linear-gradient(135deg,
rgba(236, 253, 245, 0.95) 0%,
rgba(209, 250, 229, 0.9) 100%);
}
.flash-message-light.error {
border-left: 4px solid #ef4444;
background: linear-gradient(135deg,
rgba(254, 242, 242, 0.95) 0%,
rgba(252, 165, 165, 0.9) 100%);
}
.flash-message-light.warning {
border-left: 4px solid #fbbf24;
background: linear-gradient(135deg,
rgba(255, 251, 235, 0.95) 0%,
rgba(254, 243, 199, 0.9) 100%);
}
.flash-message-light.info {
border-left: 4px solid #3b82f6;
background: linear-gradient(135deg,
rgba(239, 246, 255, 0.95) 0%,
rgba(219, 234, 254, 0.9) 100%);
}
/* Premium Table Styles */
.table-enhanced {
background: var(--gradient-card);
border: 1px solid var(--color-border-primary);
border-radius: var(--card-radius);
overflow: hidden;
box-shadow:
0 4px 20px var(--color-shadow),
0 2px 8px rgba(0, 115, 206, 0.04),
inset 0 1px 0 rgba(255, 255, 255, 0.6);
}
.table-enhanced th {
background: linear-gradient(135deg,
var(--color-bg-secondary) 0%,
var(--color-bg-tertiary) 100%);
color: var(--color-text-primary);
font-weight: 600;
padding: 1rem 1.5rem;
border-bottom: 1px solid var(--color-border-primary);
position: relative;
}
.table-enhanced th::after {
content: '';
position: absolute;
bottom: 0;
left: 0;
right: 0;
height: 1px;
background: linear-gradient(90deg,
transparent 0%,
var(--color-border-secondary) 50%,
transparent 100%);
}
.table-enhanced td {
padding: 1rem 1.5rem;
border-bottom: 1px solid var(--color-border-primary);
color: var(--color-text-secondary);
transition: all 0.2s ease;
}
.table-enhanced tbody tr:hover {
background: var(--color-bg-secondary);
transform: scale(1.002);
}
.dark .table-enhanced {
background: rgba(10, 10, 10, 0.8);
border-color: var(--color-border-primary);
}
.dark .table-enhanced th {
background: rgba(26, 26, 26, 0.8);
color: var(--color-text-primary);
}
.dark .table-enhanced tbody tr:hover {
background: rgba(26, 26, 26, 0.6);
}
/* Premium Modal Styles */
.modal-enhanced {
background: linear-gradient(135deg,
rgba(255, 255, 255, 0.98) 0%,
rgba(248, 250, 252, 0.95) 50%,
rgba(255, 255, 255, 0.98) 100%);
backdrop-filter: blur(32px) saturate(220%) brightness(120%);
-webkit-backdrop-filter: blur(32px) saturate(220%) brightness(120%);
border: 1px solid rgba(226, 232, 240, 0.7);
border-radius: 1.5rem;
box-shadow:
0 50px 100px rgba(0, 0, 0, 0.15),
0 20px 40px rgba(0, 115, 206, 0.08),
inset 0 2px 0 rgba(255, 255, 255, 0.9);
position: relative;
overflow: hidden;
}
.modal-enhanced::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
height: 1px;
background: linear-gradient(90deg,
transparent 0%,
rgba(226, 232, 240, 0.8) 50%,
transparent 100%);
}
.dark .modal-enhanced {
background: rgba(0, 0, 0, 0.95);
border-color: rgba(42, 42, 42, 0.7);
box-shadow:
0 50px 100px rgba(0, 0, 0, 0.5),
inset 0 2px 0 rgba(255, 255, 255, 0.05);
}
/* Enhanced Status Badges */
.status-badge-enhanced {
display: inline-flex;
align-items: center;
padding: 0.5rem 1rem;
font-size: 0.75rem;
font-weight: 700;
border-radius: 9999px;
text-transform: uppercase;
letter-spacing: 0.05em;
border: 1px solid transparent;
transition: all 0.2s ease;
position: relative;
overflow: hidden;
}
.status-badge-enhanced::before {
content: '';
position: absolute;
top: 0;
left: -100%;
width: 100%;
height: 100%;
background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.3), transparent);
transition: left 0.5s ease;
}
.status-badge-enhanced:hover::before {
left: 100%;
}
.status-online-enhanced {
background: linear-gradient(135deg, #ecfdf5 0%, #a7f3d0 100%);
color: #065f46;
border-color: rgba(16, 185, 129, 0.3);
}
.status-offline-enhanced {
background: linear-gradient(135deg, #fef2f2 0%, #fca5a5 100%);
color: #991b1b;
border-color: rgba(239, 68, 68, 0.3);
}
.status-printing-enhanced {
background: linear-gradient(135deg, #eff6ff 0%, #bfdbfe 100%);
color: #1e40af;
border-color: rgba(59, 130, 246, 0.3);
}
/* Dark Mode Toggle - Premium Design */
.dark-mode-toggle-new {
position: relative;
display: flex;
cursor: pointer;
align-items: center;
justify-content: center;
border-radius: 9999px;
padding: 0.625rem;
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
background: linear-gradient(135deg,
rgba(248, 250, 252, 0.9) 0%,
rgba(241, 245, 249, 0.8) 100%);
border: 1px solid rgba(226, 232, 240, 0.7);
box-shadow:
0 4px 12px rgba(0, 0, 0, 0.06),
0 2px 4px rgba(0, 115, 206, 0.04),
inset 0 1px 0 rgba(255, 255, 255, 0.8);
color: var(--color-text-secondary);
z-index: 100;
}
.dark-mode-toggle-new:hover {
transform: translateY(-2px) scale(1.05);
background: linear-gradient(135deg,
rgba(248, 250, 252, 0.95) 0%,
rgba(241, 245, 249, 0.85) 100%);
box-shadow:
0 8px 20px rgba(0, 0, 0, 0.1),
0 4px 8px rgba(0, 115, 206, 0.08),
inset 0 1px 0 rgba(255, 255, 255, 0.9);
}
.dark-mode-toggle-new:active {
transform: translateY(-1px) scale(0.98);
transition: transform 0.1s;
}
.dark .dark-mode-toggle-new {
background: rgba(10, 10, 10, 0.8);
border: 1px solid rgba(42, 42, 42, 0.6);
box-shadow:
0 4px 12px rgba(0, 0, 0, 0.3),
inset 0 1px 0 rgba(255, 255, 255, 0.05);
color: var(--color-text-secondary);
}
.dark .dark-mode-toggle-new:hover {
background: rgba(10, 10, 10, 0.9);
box-shadow:
0 8px 20px rgba(0, 0, 0, 0.4),
inset 0 1px 0 rgba(255, 255, 255, 0.08);
}
/* Icon-Animation für Dark Mode Toggle */
.dark-mode-toggle-new .sun-icon,
.dark-mode-toggle-new .moon-icon {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}
.dark-mode-toggle-new .sun-icon:not(.hidden) {
animation: icon-appear 0.5s cubic-bezier(0.25, 1, 0.5, 1) forwards;
}
.dark-mode-toggle-new .moon-icon:not(.hidden) {
animation: icon-appear 0.5s cubic-bezier(0.25, 1, 0.5, 1) forwards;
}
@keyframes icon-appear {
0% {
opacity: 0;
transform: translate(-50%, -50%) scale(0.5) rotate(-20deg);
}
100% {
opacity: 1;
transform: translate(-50%, -50%) scale(1) rotate(0);
}
}
.dark .sun-icon { display: none; }
.dark .moon-icon { display: block; }
.sun-icon { display: block; }
.moon-icon { display: none; }
/* User Menu Button - Premium Design */
.user-menu-button-new {
display: flex;
align-items: center;
gap: 0.5rem;
border-radius: 0.75rem;
padding: 0.5rem;
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
background: linear-gradient(135deg,
rgba(248, 250, 252, 0.8) 0%,
rgba(241, 245, 249, 0.7) 100%);
border: 1px solid rgba(226, 232, 240, 0.6);
box-shadow:
0 2px 8px rgba(0, 0, 0, 0.05),
inset 0 1px 0 rgba(255, 255, 255, 0.7);
}
.user-menu-button-new:hover {
transform: translateY(-1px);
background: linear-gradient(135deg,
rgba(248, 250, 252, 0.9) 0%,
rgba(241, 245, 249, 0.8) 100%);
box-shadow:
0 4px 12px rgba(0, 0, 0, 0.08),
0 2px 4px rgba(0, 115, 206, 0.04),
inset 0 1px 0 rgba(255, 255, 255, 0.8);
}
.dark .user-menu-button-new {
background: rgba(10, 10, 10, 0.7);
border-color: rgba(42, 42, 42, 0.6);
box-shadow:
0 2px 8px rgba(0, 0, 0, 0.2),
inset 0 1px 0 rgba(255, 255, 255, 0.03);
}
.dark .user-menu-button-new:hover {
background: rgba(10, 10, 10, 0.8);
box-shadow:
0 4px 12px rgba(0, 0, 0, 0.3),
inset 0 1px 0 rgba(255, 255, 255, 0.05);
}
/* Enhanced Hover Effects */
.hover-lift-enhanced {
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}
.hover-lift-enhanced:hover {
transform: translateY(-3px) scale(1.01);
box-shadow:
0 12px 30px var(--color-shadow-strong),
0 6px 15px var(--color-shadow-accent);
}
.dark .hover-lift-enhanced:hover {
box-shadow: 0 12px 30px var(--color-shadow);
}
/* Smooth Scrollbar for Light Mode */
::-webkit-scrollbar {
width: 8px;
height: 8px;
}
::-webkit-scrollbar-track {
background: var(--color-bg-secondary);
border-radius: 4px;
}
::-webkit-scrollbar-thumb {
background: linear-gradient(180deg,
var(--color-border-secondary) 0%,
var(--color-border-primary) 100%);
border-radius: 4px;
transition: background 0.2s ease;
}
::-webkit-scrollbar-thumb:hover {
background: linear-gradient(180deg,
var(--color-accent) 0%,
var(--color-accent-hover) 100%);
}
.dark ::-webkit-scrollbar-track {
background: var(--color-bg-secondary);
}
.dark ::-webkit-scrollbar-thumb {
background: var(--color-border-primary);
}
.dark ::-webkit-scrollbar-thumb:hover {
background: #60a5fa;
}
/* Loading States */
.loading-enhanced {
position: relative;
overflow: hidden;
}
.loading-enhanced::after {
content: '';
position: absolute;
top: 0;
left: -100%;
width: 100%;
height: 100%;
background: linear-gradient(90deg,
transparent,
rgba(0, 115, 206, 0.1),
transparent);
animation: loading-shimmer 2s infinite;
}
@keyframes loading-shimmer {
0% { left: -100%; }
100% { left: 100%; }
}
/* Focus States for Accessibility */
.focus-enhanced:focus {
outline: 2px solid var(--color-accent);
outline-offset: 2px;
box-shadow:
0 0 0 4px rgba(0, 115, 206, 0.15),
0 4px 12px var(--color-shadow-accent);
}
.dark .focus-enhanced:focus {
outline-color: #60a5fa;
box-shadow:
0 0 0 4px rgba(96, 165, 250, 0.15),
0 4px 12px rgba(96, 165, 250, 0.2);
}
/* Responsive Design Enhancements */
@media (max-width: 768px) {
.card-enhanced {
padding: 1rem;
border-radius: 0.75rem;
}
.btn-enhanced {
padding: 0.75rem 1.5rem;
font-size: 0.8rem;
}
.modal-enhanced {
border-radius: 1rem;
margin: 1rem;
}
.dark-mode-toggle-new {
padding: 0.5rem;
}
}
/* Reduced Motion Support */
@media (prefers-reduced-motion: reduce) {
* {
transition: none !important;
animation: none !important;
}
}
/* High Contrast Mode Support */
@media (prefers-contrast: high) {
:root {
--color-shadow: rgba(0, 0, 0, 0.2);
--color-shadow-strong: rgba(0, 0, 0, 0.3);
--color-border-primary: #000000;
}
.dark {
--color-border-primary: #ffffff;
}
}
}