/** * MYP Platform Komponenten-Bibliothek * Erweiterte UI-Komponenten basierend auf Tailwind CSS */ @layer components { /* Karten und Container */ .card { @apply bg-white dark:bg-dark-card rounded-xl shadow-sm border border-light-border dark:border-dark-border p-6 m-4 transition-colors duration-300; } .card-hover { @apply hover:shadow-md hover:bg-light-card-hover dark:hover:bg-dark-card-hover transition-all duration-300; } .container-panel { @apply bg-light-bg-secondary dark:bg-dark-bg-secondary rounded-lg p-6 m-4 border border-light-border dark:border-dark-border; } /* Formulare */ .form-input { @apply w-full rounded-lg border border-slate-300 dark:border-slate-600 bg-white dark:bg-slate-800 px-4 py-3 text-slate-900 dark:text-white focus:border-indigo-500 focus:ring-2 focus:ring-indigo-500 focus:ring-opacity-30 transition-colors duration-300; } .form-label { @apply block text-sm font-medium text-light-text dark:text-slate-300 mb-2 transition-colors duration-300; } .form-group { @apply mb-6; } .form-help { @apply mt-1 text-xs text-light-text-muted 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; } /* Buttons */ .btn-icon { @apply inline-flex items-center justify-center rounded-lg p-2 transition-colors duration-300; } .btn-text { @apply inline-flex items-center justify-center gap-2 rounded-lg px-4 py-2 text-sm font-medium transition-colors duration-300; } .btn-rounded { @apply rounded-full; } .btn-sm { @apply px-3 py-1 text-xs; } .btn-lg { @apply px-6 py-3 text-base; } /* Badges und Tags */ .badge { @apply inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium transition-colors duration-300; } .badge-blue { @apply bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-300; } .badge-green { @apply bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-300; } .badge-red { @apply bg-red-100 text-red-800 dark:bg-red-900 dark:text-red-300; } .badge-yellow { @apply bg-yellow-100 text-yellow-800 dark:bg-yellow-900 dark:text-yellow-300; } .badge-purple { @apply bg-purple-100 text-purple-800 dark:bg-purple-900 dark:text-purple-300; } /* Status Anzeigen */ .status-dot { @apply relative flex h-2 w-2 rounded-full; } .status-dot::after { @apply absolute top-0 left-0 h-full w-full rounded-full content-[''] animate-ping opacity-75; } .status-online { @apply bg-status-online; } .status-online::after { @apply bg-status-online; } .status-offline { @apply bg-status-offline; } .status-warning { @apply bg-status-warning; } .status-warning::after { @apply bg-status-warning; } /* Tabellen */ .table-container { @apply w-full overflow-x-auto rounded-lg border border-light-border dark:border-dark-border shadow-sm; } .table-styled { @apply w-full whitespace-nowrap text-left text-sm text-light-text dark:text-slate-200; } .table-styled thead { @apply bg-slate-50 dark:bg-slate-700 transition-colors duration-300; } .table-styled th { @apply px-4 py-3 font-medium transition-colors duration-300; } .table-styled tbody tr { @apply border-t border-light-border dark:border-dark-border transition-colors duration-300; } .table-styled tbody tr:hover { @apply bg-light-hover dark:bg-slate-700/50 transition-colors duration-300; } .table-styled td { @apply px-4 py-3 transition-colors duration-300; } /* Alert und Toast */ .alert { @apply rounded-lg border p-4 mb-4 transition-colors duration-300; } .alert-info { @apply bg-blue-50 dark:bg-blue-900/30 border-blue-200 dark:border-blue-800 text-blue-800 dark:text-blue-300; } .alert-success { @apply bg-green-50 dark:bg-green-900/30 border-green-200 dark:border-green-800 text-green-800 dark:text-green-300; } .alert-warning { @apply bg-yellow-50 dark:bg-yellow-900/30 border-yellow-200 dark:border-yellow-800 text-yellow-800 dark:text-yellow-300; } .alert-error { @apply bg-red-50 dark:bg-red-900/30 border-red-200 dark:border-red-800 text-red-800 dark:text-red-300; } /* Navigation */ .nav-tab { @apply inline-flex items-center gap-2 px-4 py-2 border-b-2 text-sm font-medium transition-colors duration-300; } .nav-tab-active { @apply border-indigo-600 text-indigo-600 dark:text-indigo-400 dark:border-indigo-400; } .nav-tab-inactive { @apply border-transparent text-light-text-muted hover:text-light-text hover:border-light-border dark:text-slate-400 dark:hover:text-slate-300 dark:hover:border-slate-600; } /* Navigation Links */ .nav-link { @apply flex items-center gap-2 px-3 py-2 rounded-lg text-light-text-secondary dark:text-slate-300 hover:bg-light-hover dark:hover:bg-slate-700 transition-colors duration-300; } .nav-link.active { @apply bg-indigo-50 text-indigo-600 dark:bg-indigo-900 dark:text-indigo-300 font-medium; } /* Printer Status */ .printer-status { @apply inline-flex items-center gap-2 px-3 py-1.5 rounded-full text-xs font-medium; } .printer-ready { @apply bg-printer-ready/10 text-printer-ready ring-1 ring-printer-ready/30; } .printer-busy { @apply bg-printer-busy/10 text-printer-busy ring-1 ring-printer-busy/30; } .printer-error { @apply bg-printer-error/10 text-printer-error ring-1 ring-printer-error/30; } .printer-offline { @apply bg-printer-offline/10 text-printer-offline ring-1 ring-printer-offline/30; } .printer-maintenance { @apply bg-printer-maintenance/10 text-printer-maintenance ring-1 ring-printer-maintenance/30; } /* Job Status */ .job-status { @apply inline-flex items-center gap-2 px-3 py-1.5 rounded-full text-xs font-medium; } .job-queued { @apply bg-job-queued/10 text-job-queued ring-1 ring-job-queued/30; } .job-printing { @apply bg-job-printing/10 text-job-printing ring-1 ring-job-printing/30; } .job-completed { @apply bg-job-completed/10 text-job-completed ring-1 ring-job-completed/30; } .job-failed { @apply bg-job-failed/10 text-job-failed ring-1 ring-job-failed/30; } .job-cancelled { @apply bg-job-cancelled/10 text-job-cancelled ring-1 ring-job-cancelled/30; } .job-paused { @apply bg-job-paused/10 text-job-paused ring-1 ring-job-paused/30; } /* Buttons for light/dark mode */ .btn { @apply px-4 py-2 rounded-lg transition-all duration-300 focus:outline-none focus:ring-2 shadow-sm hover:shadow; } .btn-primary { @apply btn bg-indigo-600 hover:bg-indigo-700 text-white focus:ring-indigo-500; } .btn-secondary { @apply btn bg-slate-100 hover:bg-slate-200 text-slate-800 dark:bg-slate-700 dark:hover:bg-slate-600 dark:text-white focus:ring-slate-500; } .btn-danger { @apply btn bg-red-600 hover:bg-red-700 text-white focus:ring-red-500; } .btn-success { @apply btn bg-green-600 hover:bg-green-700 text-white focus:ring-green-500; } /* Light mode specific shadow enhancement */ .light-shadow { @apply shadow-sm hover:shadow-md transition-shadow duration-300; } /* Mercedes-Benz MYP Platform - Professional Components */ /* Professional Glassmorphism Components */ .mercedes-glass { background: rgba(255, 255, 255, 0.95); backdrop-filter: blur(20px); border: 1px solid rgba(255, 255, 255, 0.25); transition: all 0.3s ease; } /* Dark Mode Glassmorphism */ .dark .mercedes-glass { background: rgba(15, 23, 42, 0.95); border: 1px solid rgba(255, 255, 255, 0.1); } /* Professional Gradients */ .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%); } /* Professional Shadows */ .professional-shadow { box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25), 0 0 0 1px rgba(255, 255, 255, 0.05), 0 4px 16px rgba(0, 0, 0, 0.1); } .dark .professional-shadow { box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.5), 0 0 0 1px rgba(255, 255, 255, 0.1), 0 4px 16px rgba(0, 0, 0, 0.2); } /* Professional Button Styles */ .professional-button { background: linear-gradient(135deg, #3b82f6 0%, #1d4ed8 100%); transition: all 0.3s ease; position: relative; overflow: hidden; } .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 -5px rgba(59, 130, 246, 0.4); } /* Professional Input Fields */ .input-field { transition: all 0.3s ease; background: rgba(255, 255, 255, 0.9); backdrop-filter: blur(10px); border: 2px solid transparent; } .dark .input-field { background: rgba(51, 65, 85, 0.9); } .input-field:focus { transform: translateY(-2px); box-shadow: 0 10px 25px -5px rgba(59, 130, 246, 0.3); border-color: #3b82f6; background: rgba(255, 255, 255, 0.95); } .dark .input-field:focus { background: rgba(51, 65, 85, 0.95); } /* Status Badges */ .status-badge { display: inline-flex; align-items: center; padding: 0.5rem 0.75rem; font-size: 0.75rem; font-weight: 600; border-radius: 9999px; transition: all 0.2s ease; } .status-badge:hover { transform: scale(1.05); } /* Professional Cards */ .professional-card { border-radius: 1.5rem; overflow: hidden; background: rgba(255, 255, 255, 0.98); backdrop-filter: blur(20px); border: 1px solid rgba(255, 255, 255, 0.25); transition: all 0.3s ease; } .dark .professional-card { background: rgba(15, 23, 42, 0.98); border: 1px solid rgba(255, 255, 255, 0.1); } .professional-card:hover { transform: translateY(-4px); box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25); } /* Mercedes Pattern Background */ .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; } /* Professional Navigation Improvements */ .nav-item { position: relative; transition: all 0.3s ease; } .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%; } /* Professional Modal Styles */ .professional-modal { backdrop-filter: blur(8px); background: rgba(0, 0, 0, 0.6); } .professional-modal-content { background: rgba(255, 255, 255, 0.98); backdrop-filter: blur(20px); border: 1px solid rgba(255, 255, 255, 0.25); border-radius: 1.5rem; box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25); } .dark .professional-modal-content { background: rgba(15, 23, 42, 0.98); border: 1px solid rgba(255, 255, 255, 0.1); } /* Smooth Transitions for Dark Mode */ * { transition: background-color 0.3s ease, border-color 0.3s ease, color 0.3s ease, box-shadow 0.3s ease; } /* Hover Effects for Interactive Elements */ .interactive-hover { transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); } .interactive-hover:hover { transform: translateY(-2px); box-shadow: 0 10px 25px rgba(0, 0, 0, 0.15); } /* Professional Loading States */ .loading-shimmer { background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%); background-size: 200% 100%; animation: shimmer 2s infinite; } .dark .loading-shimmer { background: linear-gradient(90deg, #374151 25%, #4b5563 50%, #374151 75%); background-size: 200% 100%; } @keyframes shimmer { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } } /* Focus Indicators for Accessibility */ .focus-ring:focus { outline: 2px solid #3b82f6; outline-offset: 2px; } .dark .focus-ring:focus { outline: 2px solid #60a5fa; } /* Professional 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; } /* Responsive Professional Layout */ @media (max-width: 768px) { .professional-shadow { box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.15); } .professional-card { border-radius: 1rem; } .mercedes-glass { backdrop-filter: blur(15px); } } /* Professional Animation Classes */ .fade-in { animation: fadeIn 0.5s ease-out; } .slide-up { animation: slideUp 0.5s ease-out; } @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } @keyframes slideUp { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } } /* Professional Color Scheme */ :root { --professional-primary: #3b82f6; --professional-primary-dark: #1d4ed8; --professional-secondary: #64748b; --professional-success: #10b981; --professional-warning: #f59e0b; --professional-error: #ef4444; --professional-surface: rgba(255, 255, 255, 0.95); --professional-surface-dark: rgba(15, 23, 42, 0.95); } .dark { --professional-surface: rgba(15, 23, 42, 0.95); --professional-primary: #60a5fa; --professional-primary-dark: #3b82f6; } }