1303 lines
32 KiB
CSS
1303 lines
32 KiB
CSS
/**
|
|
* MYP Platform Komponenten-Bibliothek
|
|
* Erweiterte UI-Komponenten basierend auf Tailwind CSS
|
|
*/
|
|
|
|
@layer components {
|
|
/* Professionelle Mercedes-Benz Karten und Container */
|
|
.card {
|
|
@apply bg-white dark:bg-slate-900 rounded-xl shadow-lg border border-slate-200 dark:border-slate-700 p-6 m-4 transition-all duration-300;
|
|
}
|
|
|
|
.card-hover {
|
|
@apply hover:shadow-xl hover:shadow-slate-300/50 dark:hover:shadow-slate-900/50 hover:bg-slate-50 dark:hover:bg-slate-800 transform hover:-translate-y-1 transition-all duration-300;
|
|
}
|
|
|
|
.container-panel {
|
|
@apply bg-slate-50 dark:bg-slate-800 rounded-xl p-6 m-4 border border-slate-200 dark:border-slate-700 shadow-sm;
|
|
}
|
|
|
|
/* Professionelle Formulare */
|
|
.form-input {
|
|
@apply w-full rounded-xl border-2 border-slate-300 dark:border-slate-600 bg-white dark:bg-slate-800 px-4 py-3 text-slate-900 dark:text-white placeholder-slate-500 dark:placeholder-slate-400 focus:border-blue-500 dark:focus:border-blue-400 focus:ring-4 focus:ring-blue-500/20 dark:focus:ring-blue-400/20 transition-all duration-300;
|
|
}
|
|
|
|
.form-label {
|
|
@apply block text-sm font-semibold text-slate-700 dark:text-slate-300 mb-2 transition-colors duration-300;
|
|
}
|
|
|
|
.form-group {
|
|
@apply mb-6;
|
|
}
|
|
|
|
.form-help {
|
|
@apply mt-1 text-xs text-slate-500 dark:text-slate-400 transition-colors duration-300;
|
|
}
|
|
|
|
.form-error {
|
|
@apply mt-1 text-xs text-red-600 dark:text-red-400 font-medium transition-colors duration-300;
|
|
}
|
|
|
|
/* Professionelle Buttons */
|
|
.btn-icon {
|
|
@apply inline-flex items-center justify-center rounded-xl p-3 transition-all duration-300 shadow-md hover:shadow-lg;
|
|
}
|
|
|
|
.btn-text {
|
|
@apply inline-flex items-center justify-center gap-2 rounded-xl px-6 py-3 text-sm font-semibold transition-all duration-300 shadow-md hover:shadow-lg;
|
|
}
|
|
|
|
.btn-rounded {
|
|
@apply rounded-full;
|
|
}
|
|
|
|
.btn-sm {
|
|
@apply px-4 py-2 text-xs;
|
|
}
|
|
|
|
.btn-lg {
|
|
@apply px-8 py-4 text-base;
|
|
}
|
|
|
|
/* Professionelle Badges und Tags */
|
|
.badge {
|
|
@apply inline-flex items-center rounded-full px-3 py-1.5 text-xs font-semibold transition-all duration-300 shadow-sm;
|
|
}
|
|
|
|
.badge-blue {
|
|
@apply bg-blue-100 text-blue-800 border border-blue-200 dark:bg-blue-900/30 dark:text-blue-300 dark:border-blue-700;
|
|
}
|
|
|
|
.badge-green {
|
|
@apply bg-green-100 text-green-800 border border-green-200 dark:bg-green-900/30 dark:text-green-300 dark:border-green-700;
|
|
}
|
|
|
|
.badge-red {
|
|
@apply bg-red-100 text-red-800 border border-red-200 dark:bg-red-900/30 dark:text-red-300 dark:border-red-700;
|
|
}
|
|
|
|
.badge-yellow {
|
|
@apply bg-yellow-100 text-yellow-800 border border-yellow-200 dark:bg-yellow-900/30 dark:text-yellow-300 dark:border-yellow-700;
|
|
}
|
|
|
|
.badge-purple {
|
|
@apply bg-purple-100 text-purple-800 border border-purple-200 dark:bg-purple-900/30 dark:text-purple-300 dark:border-purple-700;
|
|
}
|
|
|
|
/* Erweiterte Status Anzeigen */
|
|
.status-dot {
|
|
@apply relative flex h-3 w-3 rounded-full shadow-sm;
|
|
}
|
|
|
|
.status-dot::after {
|
|
@apply absolute top-0 left-0 h-full w-full rounded-full content-[''] animate-ping opacity-75;
|
|
}
|
|
|
|
.status-online {
|
|
@apply bg-green-500 dark:bg-green-400;
|
|
}
|
|
|
|
.status-online::after {
|
|
@apply bg-green-500 dark:bg-green-400;
|
|
}
|
|
|
|
.status-offline {
|
|
@apply bg-red-500 dark:bg-red-400;
|
|
}
|
|
|
|
.status-warning {
|
|
@apply bg-yellow-500 dark:bg-yellow-400;
|
|
}
|
|
|
|
.status-warning::after {
|
|
@apply bg-yellow-500 dark:bg-yellow-400;
|
|
}
|
|
|
|
/* Professionelle Tabellen */
|
|
.table-container {
|
|
@apply w-full overflow-x-auto rounded-xl border border-slate-200 dark:border-slate-700 shadow-lg bg-white dark:bg-slate-900;
|
|
}
|
|
|
|
.table-styled {
|
|
@apply w-full whitespace-nowrap text-left text-sm text-slate-700 dark:text-slate-300;
|
|
}
|
|
|
|
.table-styled thead {
|
|
@apply bg-slate-100 dark:bg-slate-800 transition-colors duration-300;
|
|
}
|
|
|
|
.table-styled th {
|
|
@apply px-6 py-4 font-semibold text-slate-900 dark:text-white transition-colors duration-300;
|
|
}
|
|
|
|
.table-styled tbody tr {
|
|
@apply border-t border-slate-200 dark:border-slate-700 transition-colors duration-300;
|
|
}
|
|
|
|
.table-styled tbody tr:hover {
|
|
@apply bg-slate-50 dark:bg-slate-800/50 transition-colors duration-300;
|
|
}
|
|
|
|
.table-styled td {
|
|
@apply px-6 py-4 transition-colors duration-300;
|
|
}
|
|
|
|
/* Professionelle Alert und Toast */
|
|
.alert {
|
|
@apply rounded-xl border-2 p-6 mb-4 transition-all duration-300 shadow-lg;
|
|
}
|
|
|
|
.alert-info {
|
|
@apply bg-blue-50 dark:bg-blue-900/20 border-blue-300 dark:border-blue-600 text-blue-900 dark:text-blue-200;
|
|
}
|
|
|
|
.alert-success {
|
|
@apply bg-green-50 dark:bg-green-900/20 border-green-300 dark:border-green-600 text-green-900 dark:text-green-200;
|
|
}
|
|
|
|
.alert-warning {
|
|
@apply bg-yellow-50 dark:bg-yellow-900/20 border-yellow-300 dark:border-yellow-600 text-yellow-900 dark:text-yellow-200;
|
|
}
|
|
|
|
.alert-error {
|
|
@apply bg-red-50 dark:bg-red-900/20 border-red-300 dark:border-red-600 text-red-900 dark:text-red-200;
|
|
}
|
|
|
|
/* Professionelle Navigation */
|
|
.nav-tab {
|
|
@apply inline-flex items-center gap-2 px-6 py-3 border-b-2 text-sm font-semibold transition-all duration-300;
|
|
}
|
|
|
|
.nav-tab-active {
|
|
@apply border-blue-600 dark:border-blue-400 text-blue-600 dark:text-blue-400 bg-blue-50 dark:bg-blue-900/20 rounded-t-lg;
|
|
}
|
|
|
|
.nav-tab-inactive {
|
|
@apply border-transparent text-slate-600 dark:text-slate-400 hover:text-slate-900 dark:hover:text-slate-200 hover:border-slate-300 dark:hover:border-slate-600 hover:bg-slate-50 dark:hover:bg-slate-800 rounded-t-lg;
|
|
}
|
|
|
|
/* Professionelle Navigation Links */
|
|
.nav-link {
|
|
@apply flex items-center gap-3 px-4 py-3 rounded-xl text-slate-700 dark:text-slate-300 hover:bg-slate-100 dark:hover:bg-slate-800 hover:text-slate-900 dark:hover:text-white transition-all duration-300 font-medium;
|
|
}
|
|
|
|
.nav-link.active {
|
|
@apply bg-blue-100 dark:bg-blue-900/30 text-blue-700 dark:text-blue-300 font-semibold shadow-sm;
|
|
}
|
|
|
|
/* Erweiterte Printer Status */
|
|
.printer-status {
|
|
@apply inline-flex items-center gap-2 px-4 py-2 rounded-full text-xs font-semibold shadow-sm border;
|
|
}
|
|
|
|
.printer-ready {
|
|
@apply bg-green-100 dark:bg-green-900/30 text-green-800 dark:text-green-300 border-green-200 dark:border-green-700;
|
|
}
|
|
|
|
.printer-busy {
|
|
@apply bg-orange-100 dark:bg-orange-900/30 text-orange-800 dark:text-orange-300 border-orange-200 dark:border-orange-700;
|
|
}
|
|
|
|
.printer-error {
|
|
@apply bg-red-100 dark:bg-red-900/30 text-red-800 dark:text-red-300 border-red-200 dark:border-red-700;
|
|
}
|
|
|
|
.printer-offline {
|
|
@apply bg-slate-100 dark:bg-slate-800 text-slate-700 dark:text-slate-300 border-slate-200 dark:border-slate-600;
|
|
}
|
|
|
|
.printer-maintenance {
|
|
@apply bg-purple-100 dark:bg-purple-900/30 text-purple-800 dark:text-purple-300 border-purple-200 dark:border-purple-700;
|
|
}
|
|
|
|
/* Erweiterte Job Status */
|
|
.job-status {
|
|
@apply inline-flex items-center gap-2 px-4 py-2 rounded-full text-xs font-semibold shadow-sm border;
|
|
}
|
|
|
|
.job-queued {
|
|
@apply bg-slate-100 dark:bg-slate-800 text-slate-700 dark:text-slate-300 border-slate-200 dark:border-slate-600;
|
|
}
|
|
|
|
.job-printing {
|
|
@apply bg-blue-100 dark:bg-blue-900/30 text-blue-800 dark:text-blue-300 border-blue-200 dark:border-blue-700;
|
|
}
|
|
|
|
.job-completed {
|
|
@apply bg-green-100 dark:bg-green-900/30 text-green-800 dark:text-green-300 border-green-200 dark:border-green-700;
|
|
}
|
|
|
|
.job-failed {
|
|
@apply bg-red-100 dark:bg-red-900/30 text-red-800 dark:text-red-300 border-red-200 dark:border-red-700;
|
|
}
|
|
|
|
.job-cancelled {
|
|
@apply bg-yellow-100 dark:bg-yellow-900/30 text-yellow-800 dark:text-yellow-300 border-yellow-200 dark:border-yellow-700;
|
|
}
|
|
|
|
.job-paused {
|
|
@apply bg-purple-100 dark:bg-purple-900/30 text-purple-800 dark:text-purple-300 border-purple-200 dark:border-purple-700;
|
|
}
|
|
|
|
/* Professionelle Buttons für beide Modi */
|
|
.btn {
|
|
@apply px-6 py-3 rounded-xl transition-all duration-300 focus:outline-none focus:ring-4 shadow-lg hover:shadow-xl font-semibold;
|
|
}
|
|
|
|
.btn-primary {
|
|
@apply btn bg-blue-600 hover:bg-blue-700 text-white focus:ring-blue-500/50 shadow-blue-500/25;
|
|
}
|
|
|
|
.btn-secondary {
|
|
@apply btn bg-slate-200 hover:bg-slate-300 text-slate-800 dark:bg-slate-700 dark:hover:bg-slate-600 dark:text-white focus:ring-slate-500/50;
|
|
}
|
|
|
|
.btn-danger {
|
|
@apply btn bg-red-600 hover:bg-red-700 text-white focus:ring-red-500/50 shadow-red-500/25;
|
|
}
|
|
|
|
.btn-success {
|
|
@apply btn bg-green-600 hover:bg-green-700 text-white focus:ring-green-500/50 shadow-green-500/25;
|
|
}
|
|
|
|
/* Professionelle Mercedes-Benz Design-Komponenten */
|
|
|
|
/* Glassmorphism - Verbessert für beide Modi */
|
|
.mercedes-glass {
|
|
background: rgba(255, 255, 255, 0.9);
|
|
backdrop-filter: blur(20px);
|
|
border: 1px solid rgba(255, 255, 255, 0.2);
|
|
transition: all 0.3s ease;
|
|
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1);
|
|
}
|
|
|
|
.dark .mercedes-glass {
|
|
background: rgba(15, 23, 42, 0.9);
|
|
border: 1px solid rgba(255, 255, 255, 0.1);
|
|
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3);
|
|
}
|
|
|
|
/* Professionelle Gradients - Strikt getrennt */
|
|
.professional-gradient {
|
|
background: linear-gradient(135deg, #f8fafc 0%, #e2e8f0 25%, #cbd5e1 50%, #94a3b8 75%, #64748b 100%);
|
|
}
|
|
|
|
.dark .professional-gradient {
|
|
background: linear-gradient(135deg, #0f172a 0%, #1e293b 25%, #334155 50%, #475569 75%, #64748b 100%);
|
|
}
|
|
|
|
/* Mercedes-Pattern - Verbessert */
|
|
.mercedes-pattern {
|
|
background-image:
|
|
radial-gradient(circle at 25% 25%, rgba(255,255,255,0.1) 2px, transparent 2px),
|
|
radial-gradient(circle at 75% 75%, rgba(255,255,255,0.1) 2px, transparent 2px);
|
|
background-size: 60px 60px;
|
|
}
|
|
|
|
.dark .mercedes-pattern {
|
|
background-image:
|
|
radial-gradient(circle at 25% 25%, rgba(255,255,255,0.05) 2px, transparent 2px),
|
|
radial-gradient(circle at 75% 75%, rgba(255,255,255,0.05) 2px, transparent 2px);
|
|
background-size: 60px 60px;
|
|
}
|
|
|
|
/* Professionelle Schatten - Kontextabhängig */
|
|
.professional-shadow {
|
|
box-shadow:
|
|
0 25px 50px -12px rgba(0, 0, 0, 0.15),
|
|
0 8px 16px rgba(0, 0, 0, 0.1),
|
|
0 0 0 1px rgba(255, 255, 255, 0.05);
|
|
}
|
|
|
|
.dark .professional-shadow {
|
|
box-shadow:
|
|
0 25px 50px -12px rgba(0, 0, 0, 0.5),
|
|
0 8px 16px rgba(0, 0, 0, 0.3),
|
|
0 0 0 1px rgba(255, 255, 255, 0.1);
|
|
}
|
|
|
|
/* Professionelle Button Styles - Erweitert */
|
|
.professional-button {
|
|
background: linear-gradient(135deg, #3b82f6 0%, #1d4ed8 100%);
|
|
transition: all 0.3s ease;
|
|
position: relative;
|
|
overflow: hidden;
|
|
box-shadow: 0 4px 15px rgba(59, 130, 246, 0.3);
|
|
}
|
|
|
|
.dark .professional-button {
|
|
background: linear-gradient(135deg, #3b82f6 0%, #2563eb 100%);
|
|
box-shadow: 0 4px 15px rgba(59, 130, 246, 0.2);
|
|
}
|
|
|
|
.professional-button::before {
|
|
content: '';
|
|
position: absolute;
|
|
top: 0;
|
|
left: -100%;
|
|
width: 100%;
|
|
height: 100%;
|
|
background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent);
|
|
transition: left 0.5s;
|
|
}
|
|
|
|
.professional-button:hover::before {
|
|
left: 100%;
|
|
}
|
|
|
|
.professional-button:hover {
|
|
background: linear-gradient(135deg, #1d4ed8 0%, #1e40af 100%);
|
|
transform: translateY(-2px);
|
|
box-shadow: 0 15px 35px rgba(59, 130, 246, 0.4);
|
|
}
|
|
|
|
.dark .professional-button:hover {
|
|
background: linear-gradient(135deg, #2563eb 0%, #1d4ed8 100%);
|
|
box-shadow: 0 15px 35px rgba(59, 130, 246, 0.3);
|
|
}
|
|
|
|
/* Professionelle Input Fields - Erweitert */
|
|
.input-field {
|
|
transition: all 0.3s ease;
|
|
background: rgba(255, 255, 255, 0.95);
|
|
backdrop-filter: blur(10px);
|
|
border: 2px solid rgba(203, 213, 225, 0.8);
|
|
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.05);
|
|
}
|
|
|
|
.dark .input-field {
|
|
background: rgba(51, 65, 85, 0.95);
|
|
border: 2px solid rgba(71, 85, 105, 0.8);
|
|
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
|
|
}
|
|
|
|
.input-field:focus {
|
|
transform: translateY(-2px);
|
|
box-shadow: 0 10px 25px rgba(59, 130, 246, 0.15);
|
|
border-color: #3b82f6;
|
|
background: rgba(255, 255, 255, 1);
|
|
}
|
|
|
|
.dark .input-field:focus {
|
|
background: rgba(51, 65, 85, 1);
|
|
box-shadow: 0 10px 25px rgba(59, 130, 246, 0.2);
|
|
}
|
|
|
|
/* Professionelle Cards - Erweitert */
|
|
.professional-card {
|
|
border-radius: 1.5rem;
|
|
overflow: hidden;
|
|
background: rgba(255, 255, 255, 0.98);
|
|
backdrop-filter: blur(20px);
|
|
border: 1px solid rgba(203, 213, 225, 0.5);
|
|
transition: all 0.3s ease;
|
|
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08);
|
|
}
|
|
|
|
.dark .professional-card {
|
|
background: rgba(15, 23, 42, 0.98);
|
|
border: 1px solid rgba(71, 85, 105, 0.5);
|
|
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.2);
|
|
}
|
|
|
|
.professional-card:hover {
|
|
transform: translateY(-4px);
|
|
box-shadow: 0 25px 50px rgba(0, 0, 0, 0.15);
|
|
}
|
|
|
|
.dark .professional-card:hover {
|
|
box-shadow: 0 25px 50px rgba(0, 0, 0, 0.3);
|
|
}
|
|
|
|
/* Professionelle Navigation Verbesserungen */
|
|
.nav-item {
|
|
position: relative;
|
|
transition: all 0.3s ease;
|
|
border-radius: 0.75rem;
|
|
}
|
|
|
|
.nav-item::after {
|
|
content: '';
|
|
position: absolute;
|
|
bottom: -2px;
|
|
left: 50%;
|
|
width: 0;
|
|
height: 2px;
|
|
background: linear-gradient(90deg, #3b82f6, #1d4ed8);
|
|
transition: all 0.3s ease;
|
|
transform: translateX(-50%);
|
|
}
|
|
|
|
.nav-item:hover::after,
|
|
.nav-item.active::after {
|
|
width: 100%;
|
|
}
|
|
|
|
/* Verbesserte Header-Stile */
|
|
.hero-header {
|
|
background: linear-gradient(135deg, #f8fafc 0%, #e2e8f0 100%);
|
|
border: 1px solid rgba(203, 213, 225, 0.5);
|
|
}
|
|
|
|
.dark .hero-header {
|
|
background: linear-gradient(135deg, #0f172a 0%, #1e293b 100%);
|
|
border: 1px solid rgba(71, 85, 105, 0.5);
|
|
}
|
|
|
|
/* Verbesserte Container */
|
|
.main-container {
|
|
background: rgba(248, 250, 252, 0.8);
|
|
backdrop-filter: blur(10px);
|
|
}
|
|
|
|
.dark .main-container {
|
|
background: rgba(15, 23, 42, 0.8);
|
|
}
|
|
|
|
/* Professionelle Status Badges - Erweitert */
|
|
.status-badge {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
padding: 0.5rem 0.75rem;
|
|
font-size: 0.75rem;
|
|
font-weight: 700;
|
|
border-radius: 9999px;
|
|
transition: all 0.2s ease;
|
|
border: 1px solid transparent;
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.025em;
|
|
}
|
|
|
|
.status-badge:hover {
|
|
transform: scale(1.05);
|
|
}
|
|
|
|
/* Smooth Transitions für alle Elemente */
|
|
* {
|
|
transition:
|
|
background-color 0.3s ease,
|
|
border-color 0.3s ease,
|
|
color 0.3s ease,
|
|
box-shadow 0.3s ease,
|
|
transform 0.3s ease;
|
|
}
|
|
|
|
/* Interactive Hover Effects */
|
|
.interactive-hover {
|
|
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
|
|
}
|
|
|
|
.interactive-hover:hover {
|
|
transform: translateY(-2px);
|
|
}
|
|
|
|
/* Light Mode spezifische Hover-Effekte */
|
|
.interactive-hover:hover {
|
|
box-shadow: 0 10px 25px rgba(0, 0, 0, 0.15);
|
|
}
|
|
|
|
.dark .interactive-hover:hover {
|
|
box-shadow: 0 10px 25px rgba(0, 0, 0, 0.3);
|
|
}
|
|
|
|
/* Professional Loading States */
|
|
.loading-shimmer {
|
|
background: linear-gradient(90deg, #f1f5f9 25%, #e2e8f0 50%, #f1f5f9 75%);
|
|
background-size: 200% 100%;
|
|
animation: shimmer 2s infinite;
|
|
}
|
|
|
|
.dark .loading-shimmer {
|
|
background: linear-gradient(90deg, #334155 25%, #475569 50%, #334155 75%);
|
|
background-size: 200% 100%;
|
|
}
|
|
|
|
@keyframes shimmer {
|
|
0% { background-position: 200% 0; }
|
|
100% { background-position: -200% 0; }
|
|
}
|
|
|
|
/* Focus Indicators für Accessibility */
|
|
.focus-ring:focus {
|
|
outline: 3px solid #3b82f6;
|
|
outline-offset: 2px;
|
|
}
|
|
|
|
.dark .focus-ring:focus {
|
|
outline: 3px solid #60a5fa;
|
|
}
|
|
|
|
/* Professionelle Typography */
|
|
.professional-title {
|
|
background: linear-gradient(135deg, #1e293b 0%, #475569 100%);
|
|
background-clip: text;
|
|
-webkit-background-clip: text;
|
|
-webkit-text-fill-color: transparent;
|
|
font-weight: 700;
|
|
letter-spacing: -0.025em;
|
|
}
|
|
|
|
.dark .professional-title {
|
|
background: linear-gradient(135deg, #f8fafc 0%, #e2e8f0 100%);
|
|
background-clip: text;
|
|
-webkit-background-clip: text;
|
|
-webkit-text-fill-color: transparent;
|
|
}
|
|
|
|
/* Responsives Design für kleine Bildschirme */
|
|
@media (max-width: 768px) {
|
|
.professional-shadow {
|
|
box-shadow: 0 10px 25px rgba(0, 0, 0, 0.1);
|
|
}
|
|
|
|
.professional-card {
|
|
border-radius: 1rem;
|
|
}
|
|
|
|
.mercedes-glass {
|
|
backdrop-filter: blur(15px);
|
|
}
|
|
}
|
|
|
|
/* Animationen für bessere UX */
|
|
.fade-in {
|
|
animation: fadeIn 0.5s ease-in-out;
|
|
}
|
|
|
|
.slide-up {
|
|
animation: slideUp 0.5s ease-in-out;
|
|
}
|
|
|
|
@keyframes fadeIn {
|
|
from {
|
|
opacity: 0;
|
|
}
|
|
to {
|
|
opacity: 1;
|
|
}
|
|
}
|
|
|
|
@keyframes slideUp {
|
|
from {
|
|
opacity: 0;
|
|
transform: translateY(30px);
|
|
}
|
|
to {
|
|
opacity: 1;
|
|
transform: translateY(0);
|
|
}
|
|
}
|
|
|
|
/* Root Variablen für konsistente Farben */
|
|
:root {
|
|
--mercedes-primary: #3b82f6;
|
|
--mercedes-secondary: #64748b;
|
|
--mercedes-accent: #1d4ed8;
|
|
--shadow-light: rgba(0, 0, 0, 0.1);
|
|
--shadow-dark: rgba(0, 0, 0, 0.3);
|
|
}
|
|
|
|
.dark {
|
|
--shadow-light: rgba(0, 0, 0, 0.2);
|
|
--shadow-dark: rgba(0, 0, 0, 0.5);
|
|
}
|
|
}
|
|
|
|
/* ===== MERCEDES-BENZ MYP PLATFORM - ENHANCED UI COMPONENTS ===== */
|
|
|
|
/* CSS Custom Properties für erweiterte Designkontrolle */
|
|
:root {
|
|
/* Animation Timing */
|
|
--transition-fast: 0.15s ease-out;
|
|
--transition-medium: 0.3s cubic-bezier(0.4, 0, 0.2, 1);
|
|
--transition-slow: 0.5s cubic-bezier(0.4, 0, 0.2, 1);
|
|
|
|
/* Spacing System */
|
|
--space-xs: 0.25rem;
|
|
--space-sm: 0.5rem;
|
|
--space-md: 1rem;
|
|
--space-lg: 1.5rem;
|
|
--space-xl: 2rem;
|
|
--space-2xl: 3rem;
|
|
|
|
/* Border Radius System */
|
|
--radius-sm: 0.375rem;
|
|
--radius-md: 0.5rem;
|
|
--radius-lg: 0.75rem;
|
|
--radius-xl: 1rem;
|
|
--radius-2xl: 1.5rem;
|
|
|
|
/* Shadow System */
|
|
--shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
|
|
--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
|
|
--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
|
|
--shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
|
|
--shadow-2xl: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
|
|
|
|
/* Glassmorphism */
|
|
--glass-bg: rgba(255, 255, 255, 0.05);
|
|
--glass-border: rgba(255, 255, 255, 0.1);
|
|
--glass-backdrop: blur(20px) saturate(180%) brightness(120%);
|
|
}
|
|
|
|
.dark {
|
|
--glass-bg: rgba(0, 0, 0, 0.1);
|
|
--glass-border: rgba(255, 255, 255, 0.05);
|
|
}
|
|
|
|
/* ===== ERWEITERTE BUTTON-SYSTEME ===== */
|
|
|
|
.btn {
|
|
@apply inline-flex items-center justify-center px-4 py-2 text-sm font-medium transition-all duration-300 focus:outline-none focus:ring-2 focus:ring-offset-2 disabled:opacity-50 disabled:cursor-not-allowed;
|
|
border-radius: var(--radius-lg);
|
|
position: relative;
|
|
overflow: hidden;
|
|
transform: translateZ(0); /* Hardware acceleration */
|
|
}
|
|
|
|
.btn::before {
|
|
content: '';
|
|
position: absolute;
|
|
top: 0;
|
|
left: -100%;
|
|
width: 100%;
|
|
height: 100%;
|
|
background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent);
|
|
transition: left var(--transition-medium);
|
|
z-index: 1;
|
|
}
|
|
|
|
.btn:hover::before {
|
|
left: 100%;
|
|
}
|
|
|
|
.btn-primary {
|
|
@apply bg-black text-white hover:bg-gray-800 focus:ring-black dark:bg-white dark:text-black dark:hover:bg-gray-100 dark:focus:ring-white;
|
|
box-shadow: var(--shadow-md);
|
|
}
|
|
|
|
.btn-primary:hover {
|
|
transform: translateY(-1px);
|
|
box-shadow: var(--shadow-lg);
|
|
}
|
|
|
|
.btn-secondary {
|
|
@apply bg-white text-gray-900 border border-gray-300 hover:bg-gray-50 focus:ring-gray-500 dark:bg-gray-800 dark:text-white dark:border-gray-600 dark:hover:bg-gray-700;
|
|
box-shadow: var(--shadow-sm);
|
|
}
|
|
|
|
.btn-success {
|
|
@apply bg-green-600 text-white hover:bg-green-700 focus:ring-green-500;
|
|
box-shadow: 0 4px 14px 0 rgba(34, 197, 94, 0.39);
|
|
}
|
|
|
|
.btn-success:hover {
|
|
transform: translateY(-1px);
|
|
box-shadow: 0 8px 25px 0 rgba(34, 197, 94, 0.5);
|
|
}
|
|
|
|
.btn-danger {
|
|
@apply bg-red-600 text-white hover:bg-red-700 focus:ring-red-500;
|
|
box-shadow: 0 4px 14px 0 rgba(239, 68, 68, 0.39);
|
|
}
|
|
|
|
.btn-warning {
|
|
@apply bg-amber-500 text-white hover:bg-amber-600 focus:ring-amber-500;
|
|
box-shadow: 0 4px 14px 0 rgba(245, 158, 11, 0.39);
|
|
}
|
|
|
|
.btn-glass {
|
|
background: var(--glass-bg);
|
|
border: 1px solid var(--glass-border);
|
|
backdrop-filter: var(--glass-backdrop);
|
|
-webkit-backdrop-filter: var(--glass-backdrop);
|
|
@apply text-gray-900 dark:text-white;
|
|
box-shadow: var(--shadow-lg);
|
|
}
|
|
|
|
.btn-floating {
|
|
@apply w-14 h-14 rounded-full shadow-xl bg-black text-white dark:bg-white dark:text-black;
|
|
position: fixed;
|
|
bottom: 2rem;
|
|
right: 2rem;
|
|
z-index: 50;
|
|
transition: all var(--transition-medium);
|
|
}
|
|
|
|
.btn-floating:hover {
|
|
transform: scale(1.1) translateY(-2px);
|
|
box-shadow: var(--shadow-2xl);
|
|
}
|
|
|
|
/* Button Loading State */
|
|
.btn-loading {
|
|
@apply cursor-not-allowed;
|
|
position: relative;
|
|
}
|
|
|
|
.btn-loading::after {
|
|
content: '';
|
|
position: absolute;
|
|
width: 16px;
|
|
height: 16px;
|
|
margin: auto;
|
|
border: 2px solid currentColor;
|
|
border-radius: 50%;
|
|
border-top-color: transparent;
|
|
animation: spin 1s linear infinite;
|
|
}
|
|
|
|
/* ===== ERWEITERTE CARD-SYSTEME ===== */
|
|
|
|
.card {
|
|
@apply bg-white dark:bg-gray-900 rounded-xl shadow-md border border-gray-200 dark:border-gray-700 transition-all duration-300;
|
|
position: relative;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.card:hover {
|
|
transform: translateY(-2px);
|
|
box-shadow: var(--shadow-xl);
|
|
}
|
|
|
|
.card-glass {
|
|
background: var(--glass-bg);
|
|
border: 1px solid var(--glass-border);
|
|
backdrop-filter: var(--glass-backdrop);
|
|
-webkit-backdrop-filter: var(--glass-backdrop);
|
|
border-radius: var(--radius-xl);
|
|
box-shadow: var(--shadow-xl);
|
|
}
|
|
|
|
.card-gradient {
|
|
background: linear-gradient(135deg, #ffffff 0%, #f8fafc 100%);
|
|
@apply dark:from-gray-900 dark:to-gray-800;
|
|
}
|
|
|
|
.card-elevated {
|
|
box-shadow:
|
|
0 20px 40px -12px rgba(0, 0, 0, 0.1),
|
|
0 8px 16px -4px rgba(0, 0, 0, 0.05),
|
|
inset 0 1px 0 rgba(255, 255, 255, 0.1);
|
|
}
|
|
|
|
.card-interactive {
|
|
@apply cursor-pointer transition-all duration-300;
|
|
transform: translateZ(0);
|
|
}
|
|
|
|
.card-interactive:hover {
|
|
transform: translateY(-4px) scale(1.02);
|
|
box-shadow: var(--shadow-2xl);
|
|
}
|
|
|
|
.card-interactive:active {
|
|
transform: translateY(-2px) scale(1.01);
|
|
}
|
|
|
|
/* ===== DASHBOARD-KOMPONENTEN ===== */
|
|
|
|
.dashboard-card {
|
|
@apply card p-6;
|
|
background: rgba(255, 255, 255, 0.8);
|
|
backdrop-filter: blur(20px) saturate(180%);
|
|
-webkit-backdrop-filter: blur(20px) saturate(180%);
|
|
border: 1px solid rgba(255, 255, 255, 0.2);
|
|
}
|
|
|
|
.dark .dashboard-card {
|
|
background: rgba(30, 41, 59, 0.8);
|
|
border-color: rgba(71, 85, 105, 0.3);
|
|
}
|
|
|
|
.stats-card {
|
|
@apply dashboard-card text-center;
|
|
position: relative;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.stats-card::before {
|
|
content: '';
|
|
position: absolute;
|
|
top: -50%;
|
|
left: -50%;
|
|
width: 200%;
|
|
height: 200%;
|
|
background: conic-gradient(from 0deg at 50% 50%, transparent 0deg, rgba(0, 115, 206, 0.1) 60deg, transparent 120deg);
|
|
animation: rotate 8s linear infinite;
|
|
z-index: -1;
|
|
}
|
|
|
|
.stats-number {
|
|
@apply text-4xl font-bold mb-2;
|
|
background: linear-gradient(135deg, #000000 0%, #374151 100%);
|
|
-webkit-background-clip: text;
|
|
-webkit-text-fill-color: transparent;
|
|
background-clip: text;
|
|
animation: pulse 2s ease-in-out infinite;
|
|
}
|
|
|
|
.dark .stats-number {
|
|
background: linear-gradient(135deg, #ffffff 0%, #e5e7eb 100%);
|
|
-webkit-background-clip: text;
|
|
-webkit-text-fill-color: transparent;
|
|
background-clip: text;
|
|
}
|
|
|
|
/* ===== FORMULARE ===== */
|
|
|
|
.form-group {
|
|
@apply mb-6;
|
|
}
|
|
|
|
.form-label {
|
|
@apply block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2;
|
|
display: flex;
|
|
align-items: center;
|
|
gap: var(--space-sm);
|
|
}
|
|
|
|
.form-input {
|
|
@apply w-full px-4 py-3 border border-gray-300 dark:border-gray-600 rounded-lg bg-white dark:bg-gray-800 text-gray-900 dark:text-white placeholder-gray-500 dark:placeholder-gray-400 focus:ring-2 focus:ring-black dark:focus:ring-white focus:border-transparent transition-all duration-300;
|
|
box-shadow: var(--shadow-sm);
|
|
}
|
|
|
|
.form-input:focus {
|
|
transform: translateY(-1px);
|
|
box-shadow: var(--shadow-md);
|
|
}
|
|
|
|
.form-input-error {
|
|
@apply border-red-500 focus:ring-red-500;
|
|
}
|
|
|
|
.form-select {
|
|
@apply form-input appearance-none;
|
|
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3e%3c/svg%3e");
|
|
background-position: right 0.5rem center;
|
|
background-repeat: no-repeat;
|
|
background-size: 1.5em 1.5em;
|
|
padding-right: 2.5rem;
|
|
}
|
|
|
|
.form-textarea {
|
|
@apply form-input resize-none;
|
|
min-height: 100px;
|
|
}
|
|
|
|
.form-checkbox {
|
|
@apply w-4 h-4 text-black bg-white border-gray-300 rounded focus:ring-black dark:focus:ring-white dark:ring-offset-gray-800 dark:bg-gray-700 dark:border-gray-600;
|
|
}
|
|
|
|
/* ===== STATUS-BADGES ===== */
|
|
|
|
.status-badge {
|
|
@apply inline-flex items-center px-3 py-1 rounded-full text-xs font-medium;
|
|
position: relative;
|
|
overflow: hidden;
|
|
animation: fadeInScale 0.3s ease-out;
|
|
}
|
|
|
|
.status-badge::before {
|
|
content: '';
|
|
position: absolute;
|
|
top: 50%;
|
|
left: 8px;
|
|
width: 6px;
|
|
height: 6px;
|
|
border-radius: 50%;
|
|
animation: pulse 2s ease-in-out infinite;
|
|
}
|
|
|
|
.status-online {
|
|
@apply bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-400;
|
|
}
|
|
|
|
.status-online::before {
|
|
background-color: #22c55e;
|
|
}
|
|
|
|
.status-offline {
|
|
@apply bg-gray-100 text-gray-800 dark:bg-gray-800/30 dark:text-gray-400;
|
|
}
|
|
|
|
.status-offline::before {
|
|
background-color: #6b7280;
|
|
}
|
|
|
|
.status-printing {
|
|
@apply bg-blue-100 text-blue-800 dark:bg-blue-900/30 dark:text-blue-400;
|
|
}
|
|
|
|
.status-printing::before {
|
|
background-color: #3b82f6;
|
|
animation: pulse 1s ease-in-out infinite;
|
|
}
|
|
|
|
.status-warning {
|
|
@apply bg-yellow-100 text-yellow-800 dark:bg-yellow-900/30 dark:text-yellow-400;
|
|
}
|
|
|
|
.status-warning::before {
|
|
background-color: #eab308;
|
|
animation: pulse 1.5s ease-in-out infinite;
|
|
}
|
|
|
|
.status-error {
|
|
@apply bg-red-100 text-red-800 dark:bg-red-900/30 dark:text-red-400;
|
|
}
|
|
|
|
.status-error::before {
|
|
background-color: #ef4444;
|
|
animation: pulse 1s ease-in-out infinite;
|
|
}
|
|
|
|
/* ===== ERWEITERTE TABELLEN ===== */
|
|
|
|
.table-container {
|
|
@apply overflow-hidden rounded-xl border border-gray-200 dark:border-gray-700;
|
|
box-shadow: var(--shadow-lg);
|
|
}
|
|
|
|
.table {
|
|
@apply w-full divide-y divide-gray-200 dark:divide-gray-700;
|
|
}
|
|
|
|
.table-header {
|
|
@apply bg-gray-50 dark:bg-gray-800;
|
|
}
|
|
|
|
.table-header-cell {
|
|
@apply px-6 py-4 text-left text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider;
|
|
position: sticky;
|
|
top: 0;
|
|
z-index: 10;
|
|
backdrop-filter: blur(10px);
|
|
}
|
|
|
|
.table-row {
|
|
@apply bg-white dark:bg-gray-900 hover:bg-gray-50 dark:hover:bg-gray-800 transition-colors duration-200;
|
|
}
|
|
|
|
.table-cell {
|
|
@apply px-6 py-4 whitespace-nowrap text-sm text-gray-900 dark:text-gray-100;
|
|
}
|
|
|
|
.table-row-interactive {
|
|
@apply cursor-pointer;
|
|
transition: all var(--transition-medium);
|
|
}
|
|
|
|
.table-row-interactive:hover {
|
|
transform: translateX(4px);
|
|
box-shadow: inset 4px 0 0 0 #000000;
|
|
}
|
|
|
|
.dark .table-row-interactive:hover {
|
|
box-shadow: inset 4px 0 0 0 #ffffff;
|
|
}
|
|
|
|
/* ===== NAVIGATION ===== */
|
|
|
|
.nav-item {
|
|
@apply relative flex items-center px-4 py-2 text-sm font-medium rounded-lg transition-all duration-300;
|
|
position: relative;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.nav-item::before {
|
|
content: '';
|
|
position: absolute;
|
|
top: 0;
|
|
left: -100%;
|
|
width: 100%;
|
|
height: 100%;
|
|
background: linear-gradient(90deg, transparent, rgba(0, 0, 0, 0.1), transparent);
|
|
transition: left var(--transition-medium);
|
|
}
|
|
|
|
.nav-item:hover::before {
|
|
left: 100%;
|
|
}
|
|
|
|
.nav-item-active {
|
|
@apply bg-black text-white dark:bg-white dark:text-black;
|
|
box-shadow: var(--shadow-lg);
|
|
}
|
|
|
|
.nav-item-inactive {
|
|
@apply text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-800;
|
|
}
|
|
|
|
/* ===== MODALS ===== */
|
|
|
|
.modal-overlay {
|
|
@apply fixed inset-0 bg-black bg-opacity-50 backdrop-blur-sm z-50;
|
|
animation: fadeIn 0.3s ease-out;
|
|
}
|
|
|
|
.modal-container {
|
|
@apply flex min-h-full items-center justify-center p-4;
|
|
}
|
|
|
|
.modal-content {
|
|
@apply bg-white dark:bg-gray-900 rounded-2xl shadow-2xl max-w-lg w-full p-6;
|
|
animation: slideInScale 0.3s ease-out;
|
|
backdrop-filter: blur(20px);
|
|
border: 1px solid rgba(255, 255, 255, 0.1);
|
|
}
|
|
|
|
.modal-header {
|
|
@apply flex items-center justify-between mb-4;
|
|
}
|
|
|
|
.modal-title {
|
|
@apply text-lg font-semibold text-gray-900 dark:text-white;
|
|
}
|
|
|
|
.modal-close {
|
|
@apply text-gray-400 hover:text-gray-600 dark:hover:text-gray-300 transition-colors;
|
|
}
|
|
|
|
/* ===== TOOLTIPS ===== */
|
|
|
|
.tooltip {
|
|
@apply absolute z-50 px-3 py-2 text-sm text-white bg-black rounded-lg shadow-lg opacity-0 pointer-events-none transition-all duration-300;
|
|
backdrop-filter: blur(10px);
|
|
}
|
|
|
|
.tooltip.show {
|
|
@apply opacity-100 pointer-events-auto;
|
|
}
|
|
|
|
.tooltip-arrow {
|
|
@apply absolute w-2 h-2 bg-black transform rotate-45;
|
|
}
|
|
|
|
/* ===== NOTIFICATIONS/TOAST ===== */
|
|
|
|
.notification {
|
|
@apply fixed top-4 right-4 max-w-sm w-full p-4 rounded-xl shadow-xl transform transition-all duration-300 z-50;
|
|
background: var(--glass-bg);
|
|
border: 1px solid var(--glass-border);
|
|
backdrop-filter: var(--glass-backdrop);
|
|
-webkit-backdrop-filter: var(--glass-backdrop);
|
|
animation: slideInRight 0.3s ease-out;
|
|
}
|
|
|
|
.notification-success {
|
|
@apply border-green-500 text-green-800 dark:text-green-200;
|
|
background: rgba(34, 197, 94, 0.1);
|
|
}
|
|
|
|
.notification-error {
|
|
@apply border-red-500 text-red-800 dark:text-red-200;
|
|
background: rgba(239, 68, 68, 0.1);
|
|
}
|
|
|
|
.notification-info {
|
|
@apply border-blue-500 text-blue-800 dark:text-blue-200;
|
|
background: rgba(59, 130, 246, 0.1);
|
|
}
|
|
|
|
.notification-warning {
|
|
@apply border-yellow-500 text-yellow-800 dark:text-yellow-200;
|
|
background: rgba(245, 158, 11, 0.1);
|
|
}
|
|
|
|
/* ===== LOADING STATES ===== */
|
|
|
|
.loading-skeleton {
|
|
@apply bg-gray-200 dark:bg-gray-700 rounded animate-pulse;
|
|
}
|
|
|
|
.loading-spinner {
|
|
@apply w-8 h-8 border-4 border-gray-200 border-t-black rounded-full animate-spin;
|
|
}
|
|
|
|
.dark .loading-spinner {
|
|
@apply border-gray-700 border-t-white;
|
|
}
|
|
|
|
.loading-overlay {
|
|
@apply fixed inset-0 bg-white bg-opacity-80 dark:bg-black dark:bg-opacity-80 flex items-center justify-center z-50;
|
|
backdrop-filter: blur(5px);
|
|
}
|
|
|
|
/* ===== PROGRESS BARS ===== */
|
|
|
|
.progress-container {
|
|
@apply w-full h-2 bg-gray-200 dark:bg-gray-700 rounded-full overflow-hidden;
|
|
}
|
|
|
|
.progress-bar {
|
|
@apply h-full bg-black dark:bg-white rounded-full transition-all duration-300;
|
|
background: linear-gradient(90deg, #000000, #374151, #000000);
|
|
background-size: 200% 100%;
|
|
animation: shimmer 2s ease-in-out infinite;
|
|
}
|
|
|
|
.progress-bar-success {
|
|
@apply bg-green-500;
|
|
}
|
|
|
|
.progress-bar-warning {
|
|
@apply bg-yellow-500;
|
|
}
|
|
|
|
.progress-bar-error {
|
|
@apply bg-red-500;
|
|
}
|
|
|
|
/* ===== MICRO-INTERACTIONS ===== */
|
|
|
|
.hover-lift {
|
|
transition: transform var(--transition-medium);
|
|
}
|
|
|
|
.hover-lift:hover {
|
|
transform: translateY(-2px);
|
|
}
|
|
|
|
.hover-scale {
|
|
transition: transform var(--transition-medium);
|
|
}
|
|
|
|
.hover-scale:hover {
|
|
transform: scale(1.05);
|
|
}
|
|
|
|
.hover-glow {
|
|
transition: box-shadow var(--transition-medium);
|
|
}
|
|
|
|
.hover-glow:hover {
|
|
box-shadow: 0 0 20px rgba(0, 0, 0, 0.3);
|
|
}
|
|
|
|
.dark .hover-glow:hover {
|
|
box-shadow: 0 0 20px rgba(255, 255, 255, 0.3);
|
|
}
|
|
|
|
.click-shrink {
|
|
transition: transform var(--transition-fast);
|
|
}
|
|
|
|
.click-shrink:active {
|
|
transform: scale(0.95);
|
|
}
|
|
|
|
/* ===== ANIMATIONEN ===== */
|
|
|
|
@keyframes fadeIn {
|
|
from { opacity: 0; }
|
|
to { opacity: 1; }
|
|
}
|
|
|
|
@keyframes fadeInScale {
|
|
from {
|
|
opacity: 0;
|
|
transform: scale(0.8);
|
|
}
|
|
to {
|
|
opacity: 1;
|
|
transform: scale(1);
|
|
}
|
|
}
|
|
|
|
@keyframes slideInRight {
|
|
from {
|
|
opacity: 0;
|
|
transform: translateX(100%);
|
|
}
|
|
to {
|
|
opacity: 1;
|
|
transform: translateX(0);
|
|
}
|
|
}
|
|
|
|
@keyframes slideInScale {
|
|
from {
|
|
opacity: 0;
|
|
transform: scale(0.9) translateY(10px);
|
|
}
|
|
to {
|
|
opacity: 1;
|
|
transform: scale(1) translateY(0);
|
|
}
|
|
}
|
|
|
|
@keyframes spin {
|
|
from { transform: rotate(0deg); }
|
|
to { transform: rotate(360deg); }
|
|
}
|
|
|
|
@keyframes pulse {
|
|
0%, 100% {
|
|
opacity: 1;
|
|
transform: scale(1);
|
|
}
|
|
50% {
|
|
opacity: 0.7;
|
|
transform: scale(1.1);
|
|
}
|
|
}
|
|
|
|
@keyframes rotate {
|
|
from { transform: rotate(0deg); }
|
|
to { transform: rotate(360deg); }
|
|
}
|
|
|
|
@keyframes shimmer {
|
|
0% { background-position: -200% 0; }
|
|
100% { background-position: 200% 0; }
|
|
}
|
|
|
|
/* ===== RESPONSIVE DESIGN ===== */
|
|
|
|
@media (max-width: 640px) {
|
|
.card {
|
|
@apply mx-4 rounded-lg;
|
|
}
|
|
|
|
.modal-content {
|
|
@apply mx-4 p-4;
|
|
}
|
|
|
|
.btn {
|
|
@apply w-full justify-center;
|
|
}
|
|
|
|
.stats-number {
|
|
@apply text-2xl;
|
|
}
|
|
}
|
|
|
|
/* ===== ACCESSIBILITY ===== */
|
|
|
|
@media (prefers-reduced-motion: reduce) {
|
|
*,
|
|
*::before,
|
|
*::after {
|
|
animation-duration: 0.01ms !important;
|
|
animation-iteration-count: 1 !important;
|
|
transition-duration: 0.01ms !important;
|
|
}
|
|
}
|
|
|
|
.focus-visible {
|
|
@apply outline-none ring-2 ring-offset-2 ring-black dark:ring-white;
|
|
}
|
|
|
|
/* ===== PRINT STYLES ===== */
|
|
|
|
@media print {
|
|
.no-print {
|
|
display: none !important;
|
|
}
|
|
|
|
.card {
|
|
box-shadow: none !important;
|
|
border: 1px solid #000 !important;
|
|
}
|
|
} |