/** * MYP Platform - Kiosk-Optimierte CSS * Maximale Performance für Offline-Kiosk-Umgebung * Keine Touch-Events, minimale Animationen, optimierte Rendering-Performance */ /* ===== CRITICAL INLINE STYLES (sollten im HTML-Head stehen) ===== */ :root { /* Reduzierte Farbvariablen für bessere Performance */ --primary: #0073ce; --primary-dark: #005a9f; --bg: #fafbfc; --surface: #ffffff; --text: #111827; --text-muted: #6b7280; --border: #e5e7eb; --shadow: 0 2px 4px rgba(0,0,0,0.05); } /* CSS Containment für bessere Performance */ * { contain: layout style; } /* Basis-Reset ohne aufwendige Normalisierung */ * { box-sizing: border-box; margin: 0; padding: 0; } body { font-family: system-ui, -apple-system, sans-serif; background: var(--bg); color: var(--text); line-height: 1.5; contain: layout style paint; /* Optimiert für Kiosk-Rendering */ text-rendering: optimizeSpeed; -webkit-font-smoothing: antialiased; } /* ===== LAYOUT OPTIMIERUNGEN ===== */ .header { background: var(--surface); border-bottom: 1px solid var(--border); padding: 1rem; contain: layout style; } .nav { display: flex; gap: 1rem; contain: layout; } .nav-item { padding: 0.5rem 1rem; border-radius: 6px; text-decoration: none; color: var(--text-muted); transition: background-color 0.1s ease; /* Minimale Transition */ } .nav-item:hover { background: var(--bg); color: var(--text); } .nav-item.active { background: var(--primary); color: white; } /* ===== OPTIMIERTE KARTEN ===== */ .card { background: var(--surface); border: 1px solid var(--border); border-radius: 8px; padding: 1rem; box-shadow: var(--shadow); contain: layout style paint; } .card:hover { transform: translateY(-1px); /* Minimaler Hover-Effekt */ } /* ===== BUTTONS OHNE KOMPLEXE ANIMATIONEN ===== */ .btn { background: var(--primary); color: white; border: none; border-radius: 6px; padding: 0.75rem 1.5rem; font-weight: 600; cursor: pointer; transition: background-color 0.1s ease; contain: layout style; } .btn:hover { background: var(--primary-dark); } .btn-secondary { background: var(--surface); color: var(--text); border: 1px solid var(--border); } .btn-secondary:hover { background: var(--bg); } /* ===== INPUTS OPTIMIERT ===== */ .input { background: var(--surface); border: 1px solid var(--border); border-radius: 6px; padding: 0.75rem; width: 100%; transition: border-color 0.1s ease; contain: layout style; } .input:focus { outline: none; border-color: var(--primary); } /* ===== TABELLEN OHNE KOMPLEXE EFFEKTE ===== */ .table { width: 100%; border-collapse: collapse; background: var(--surface); border-radius: 8px; overflow: hidden; contain: layout; } .table th { background: var(--bg); padding: 1rem; text-align: left; font-weight: 600; border-bottom: 1px solid var(--border); } .table td { padding: 1rem; border-bottom: 1px solid var(--border); } .table tr:hover { background: var(--bg); } /* ===== STATUS BADGES VEREINFACHT ===== */ .status { display: inline-block; padding: 0.25rem 0.75rem; border-radius: 999px; font-size: 0.75rem; font-weight: 600; text-transform: uppercase; } .status-online { background: #d1fae5; color: #065f46; } .status-offline { background: #fee2e2; color: #991b1b; } .status-printing { background: #dbeafe; color: #1e40af; } /* ===== GRID LAYOUTS OPTIMIERT ===== */ .grid { display: grid; gap: 1rem; contain: layout; } .grid-2 { grid-template-columns: repeat(2, 1fr); } .grid-3 { grid-template-columns: repeat(3, 1fr); } .grid-4 { grid-template-columns: repeat(4, 1fr); } /* ===== UTILITIES MINIMAL ===== */ .flex { display: flex; contain: layout; } .flex-col { flex-direction: column; } .items-center { align-items: center; } .justify-between { justify-content: space-between; } .gap-1 { gap: 0.25rem; } .gap-2 { gap: 0.5rem; } .gap-4 { gap: 1rem; } .p-1 { padding: 0.25rem; } .p-2 { padding: 0.5rem; } .p-4 { padding: 1rem; } .p-6 { padding: 1.5rem; } .m-1 { margin: 0.25rem; } .m-2 { margin: 0.5rem; } .m-4 { margin: 1rem; } .mb-2 { margin-bottom: 0.5rem; } .mb-4 { margin-bottom: 1rem; } .mb-6 { margin-bottom: 1.5rem; } .text-sm { font-size: 0.875rem; } .text-lg { font-size: 1.125rem; } .text-xl { font-size: 1.25rem; } .text-2xl { font-size: 1.5rem; } .font-semibold { font-weight: 600; } .font-bold { font-weight: 700; } .text-center { text-align: center; } .text-right { text-align: right; } .w-full { width: 100%; } .h-full { height: 100%; } .rounded { border-radius: 6px; } .rounded-lg { border-radius: 8px; } .border { border: 1px solid var(--border); } .border-t { border-top: 1px solid var(--border); } .border-b { border-bottom: 1px solid var(--border); } .bg-white { background: var(--surface); } .bg-gray-50 { background: var(--bg); } .text-gray-600 { color: var(--text-muted); } .text-blue-600 { color: var(--primary); } /* ===== DARK MODE MINIMAL ===== */ @media (prefers-color-scheme: dark) { :root { --bg: #1e293b; --surface: #334155; --text: #f8fafc; --text-muted: #94a3b8; --border: #475569; --shadow: 0 2px 4px rgba(0,0,0,0.3); } } /* ===== RESPONSIVE FÜR KIOSK-DISPLAYS ===== */ @media (max-width: 1024px) { .grid-4 { grid-template-columns: repeat(2, 1fr); } .grid-3 { grid-template-columns: repeat(2, 1fr); } } @media (max-width: 768px) { .grid-4, .grid-3, .grid-2 { grid-template-columns: 1fr; } .nav { flex-direction: column; gap: 0.5rem; } } /* ===== PERFORMANCE OPTIMIERUNGEN ===== */ /* Deaktivierung nicht benötigter Features für Kiosk */ * { /* Keine Touch-Events */ touch-action: none; -webkit-touch-callout: none; -webkit-user-select: none; user-select: none; } /* Nur notwendige Elemente selektierbar */ input, textarea { -webkit-user-select: text; user-select: text; touch-action: manipulation; } /* Optimierte Scrolling-Performance */ * { -webkit-overflow-scrolling: touch; scroll-behavior: smooth; } /* GPU-Acceleration nur wo nötig */ .card:hover, .btn:hover { will-change: transform; } /* Minimale Animationen für bessere Performance */ @media (prefers-reduced-motion: reduce) { * { transition: none !important; animation: none !important; } } /* Print-Optimierung (falls Kiosk drucken kann) */ @media print { .nav, .btn { display: none; } .card { box-shadow: none; border: 1px solid #000; } } /* ===== LAYOUT SHIFT PREVENTION ===== */ img { height: auto; max-width: 100%; vertical-align: middle; } /* Container für stabile Layouts */ .container { max-width: 1200px; margin: 0 auto; padding: 0 1rem; contain: layout; } /* ===== KIOSK-SPEZIFISCHE OPTIMIERUNGEN ===== */ /* Vollbildmodus-Unterstützung */ html, body { height: 100%; overflow-x: hidden; } /* Fokus-Management für Keyboard-Navigation */ :focus { outline: 2px solid var(--primary); outline-offset: 2px; } /* Kein Selection-Highlighting */ ::selection { background: transparent; } /* Optimierte Font-Loading */ @font-face { font-family: 'system-ui'; font-display: swap; }