This commit is contained in:
2025-06-04 10:03:22 +02:00
commit 785a2b6134
14182 changed files with 1764617 additions and 0 deletions

View File

@@ -0,0 +1,84 @@
/**
* Optimized Animations for Raspberry Pi
* All animations removed for performance
*/
/* Keine Animationen - alle entfernt */
/* Placeholder für Animation-Klassen ohne Effekte */
.fade-in,
.fade-out,
.slide-up,
.slide-down,
.slide-left,
.slide-right,
.scale-in,
.scale-out,
.rotate-in,
.rotate-out,
.bounce,
.pulse,
.ping,
.spin,
.wiggle,
.swing,
.rubberBand,
.flash,
.shake,
.flip,
.zoom-in,
.zoom-out {
/* Keine Animation */
}
/* Keine Keyframes definiert */
/* Utility Classes ohne Effekte */
.animate-none { animation: none !important; }
.animate-spin { /* Keine Animation */ }
.animate-ping { /* Keine Animation */ }
.animate-pulse { /* Keine Animation */ }
.animate-bounce { /* Keine Animation */ }
/* Duration Classes - ignoriert */
.duration-75,
.duration-100,
.duration-150,
.duration-200,
.duration-300,
.duration-500,
.duration-700,
.duration-1000 {
/* Keine Duration */
}
/* Delay Classes - ignoriert */
.delay-75,
.delay-100,
.delay-150,
.delay-200,
.delay-300,
.delay-500,
.delay-700,
.delay-1000 {
/* Kein Delay */
}
/* Easing Classes - ignoriert */
.ease-linear,
.ease-in,
.ease-out,
.ease-in-out {
/* Kein Easing */
}
/* Motion-safe - ignoriert */
@media (prefers-reduced-motion: no-preference) {
/* Keine Animationen auch bei no-preference */
}
/* Alle Animationen global deaktiviert */
* {
animation: none !important;
transition: none !important;
}

Binary file not shown.

View File

@@ -0,0 +1 @@
.fade-in,.fade-out,.slide-up,.slide-down,.slide-left,.slide-right,.scale-in,.scale-out,.rotate-in,.rotate-out,.bounce,.pulse,.ping,.spin,.wiggle,.swing,.rubberBand,.flash,.shake,.flip,.zoom-in,.zoom-out{}.animate-none{animation:none !important;}.animate-spin{}.animate-ping{}.animate-pulse{}.animate-bounce{}.duration-75,.duration-100,.duration-150,.duration-200,.duration-300,.duration-500,.duration-700,.duration-1000{}.delay-75,.delay-100,.delay-150,.delay-200,.delay-300,.delay-500,.delay-700,.delay-1000{}.ease-linear,.ease-in,.ease-out,.ease-in-out{}@media (prefers-reduced-motion:no-preference){}*{animation:none !important;transition:none !important;}

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,31 @@
/* CRITICAL INLINE CSS - Sollte im HTML <head> stehen */
/* Nur die absolut notwendigen Styles für First Paint */
:root{--primary:#0073ce;--bg:#fafbfc;--surface:#fff;--text:#111827;--border:#e5e7eb;--shadow:0 2px 4px rgba(0,0,0,.05)}
*{box-sizing:border-box;margin:0;padding:0;contain:layout style}
body{font-family:system-ui,-apple-system,sans-serif;background:var(--bg);color:var(--text);line-height:1.5;text-rendering:optimizeSpeed;-webkit-font-smoothing:antialiased}
.header{background:var(--surface);border-bottom:1px solid var(--border);padding:1rem;position:sticky;top:0;z-index:1000}
.nav{display:flex;gap:1rem}
.nav-item{padding:.5rem 1rem;border-radius:6px;text-decoration:none;color:#6b7280;transition:background .1s}
.nav-item:hover{background:var(--bg);color:var(--text)}
.nav-item.active{background:var(--primary);color:#fff}
.container{max-width:1200px;margin:0 auto;padding:0 1rem}
.btn{background:var(--primary);color:#fff;border:none;border-radius:6px;padding:.75rem 1.5rem;font-weight:600;cursor:pointer;transition:background .1s}
.btn:hover{background:#005a9f}
.card{background:var(--surface);border:1px solid var(--border);border-radius:8px;padding:1rem;box-shadow:var(--shadow)}
.flex{display:flex}
.grid{display:grid;gap:1rem}
.hidden{display:none}
.w-full{width:100%}
.text-center{text-align:center}
.p-4{padding:1rem}
.mb-4{margin-bottom:1rem}
.status{display:inline-block;padding:.25rem .75rem;border-radius:999px;font-size:.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}
.input{background:var(--surface);border:1px solid var(--border);border-radius:6px;padding:.75rem;width:100%}
.input:focus{outline:none;border-color:var(--primary)}
@media (prefers-color-scheme:dark){:root{--bg:#1e293b;--surface:#334155;--text:#f8fafc;--border:#475569;--shadow:0 2px 4px rgba(0,0,0,.3)}}
@media (max-width:768px){.nav{flex-direction:column;gap:.5rem}}
@media (prefers-reduced-motion:reduce){*{transition:none!important}}

View File

@@ -0,0 +1,498 @@
/* MYP Platform - Kiosk Optimierte CSS Bundle */
/* Generiert am: 2025-06-01 23:40:46 */
/**
* 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;
}
/**
* Minimales Icon-Set für Kiosk-Modus
* SVG-basierte Icons als CSS-Pseudo-Elemente für beste Performance
* Ersetzt FontAwesome für deutlich kleinere Bundle-Größe
*/
/* Icon-Basis-Klasse */
.icon {
display: inline-block;
width: 1rem;
height: 1rem;
background-size: contain;
background-repeat: no-repeat;
background-position: center;
vertical-align: middle;
}
.icon-lg { width: 1.5rem; height: 1.5rem; }
.icon-xl { width: 2rem; height: 2rem; }
/* ===== DRUCKER ICONS ===== */
.icon-printer {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23374151'%3E%3Cpath d='M19 8H5c-1.66 0-3 1.34-3 3v6h4v4h12v-4h4v-6c0-1.66-1.34-3-3-3zm-3 11H8v-5h8v5zm3-7c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm-1-9H6v4h12V3z'/%3E%3C/svg%3E");
}
.icon-print {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23374151'%3E%3Cpath d='M19 8H5c-1.66 0-3 1.34-3 3v6h4v4h12v-4h4v-6c0-1.66-1.34-3-3-3zm-3 11H8v-5h8v5zm3-7c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm-1-9H6v4h12V3z'/%3E%3C/svg%3E");
}
/* ===== STATUS ICONS ===== */
.icon-check {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%2310b981'%3E%3Cpath d='M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z'/%3E%3C/svg%3E");
}
.icon-warning {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23f59e0b'%3E%3Cpath d='M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z'/%3E%3C/svg%3E");
}
.icon-error {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23ef4444'%3E%3Cpath d='M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z'/%3E%3C/svg%3E");
}
.icon-offline {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%236b7280'%3E%3Cpath d='M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z'/%3E%3C/svg%3E");
}
/* ===== NAVIGATION ICONS ===== */
.icon-home {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23374151'%3E%3Cpath d='M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z'/%3E%3C/svg%3E");
}
.icon-settings {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23374151'%3E%3Cpath d='M19.14,12.94c0.04-0.3,0.06-0.61,0.06-0.94c0-0.32-0.02-0.64-0.07-0.94l2.03-1.58c0.18-0.14,0.23-0.41,0.12-0.61 l-1.92-3.32c-0.12-0.22-0.37-0.29-0.59-0.22l-2.39,0.96c-0.5-0.38-1.03-0.7-1.62-0.94L14.4,2.81c-0.04-0.24-0.24-0.41-0.48-0.41 h-3.84c-0.24,0-0.43,0.17-0.47,0.41L9.25,5.35C8.66,5.59,8.12,5.92,7.63,6.29L5.24,5.33c-0.22-0.08-0.47,0-0.59,0.22L2.74,8.87 C2.62,9.08,2.66,9.34,2.86,9.48l2.03,1.58C4.84,11.36,4.8,11.69,4.8,12s0.02,0.64,0.07,0.94l-2.03,1.58 c-0.18,0.14-0.23,0.41-0.12,0.61l1.92,3.32c0.12,0.22,0.37,0.29,0.59,0.22l2.39-0.96c0.5,0.38,1.03,0.7,1.62,0.94l0.36,2.54 c0.05,0.24,0.24,0.41,0.48,0.41h3.84c0.24,0,0.44-0.17,0.47-0.41l0.36-2.54c0.59-0.24,1.13-0.56,1.62-0.94l2.39,0.96 c0.22,0.08,0.47,0,0.59-0.22l1.92-3.32c0.12-0.22,0.07-0.47-0.12-0.61L19.14,12.94z M12,15.6c-1.98,0-3.6-1.62-3.6-3.6 s1.62-3.6,3.6-3.6s3.6,1.62,3.6,3.6S13.98,15.6,12,15.6z'/%3E%3C/svg%3E");
}
.icon-users {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23374151'%3E%3Cpath d='M16 4c0-1.11.89-2 2-2s2 .89 2 2-.89 2-2 2-2-.89-2-2zm4 18v-6h2.5l-2.54-7.63A3.012 3.012 0 0 0 16.43 6c-.68 0-1.3.27-1.77.72L12 8.5l-2.66-1.78C8.87 6.27 8.25 6 7.57 6c-1.31 0-2.42.83-2.83 2L2.5 16H5v6h2v-6h2v6h2zm-6.5-10.5c.83 0 1.5-.67 1.5-1.5s-.67-1.5-1.5-1.5S12 9.17 12 10s.67 1.5 1.5 1.5z'/%3E%3C/svg%3E");
}
.icon-dashboard {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23374151'%3E%3Cpath d='M3 13h8V3H3v10zm0 8h8v-6H3v6zm10 0h8V11h-8v10zm0-18v6h8V3h-8z'/%3E%3C/svg%3E");
}
/* ===== ACTION ICONS ===== */
.icon-plus {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23374151'%3E%3Cpath d='M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z'/%3E%3C/svg%3E");
}
.icon-edit {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23374151'%3E%3Cpath d='M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM20.71 7.04c.39-.39.39-1.02 0-1.41l-2.34-2.34c-.39-.39-1.02-.39-1.41 0l-1.83 1.83 3.75 3.75 1.83-1.83z'/%3E%3C/svg%3E");
}
.icon-delete {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23ef4444'%3E%3Cpath d='M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z'/%3E%3C/svg%3E");
}
.icon-refresh {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23374151'%3E%3Cpath d='M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4l-2.35 2.35z'/%3E%3C/svg%3E");
}
/* ===== POWER/CONNECTION ICONS ===== */
.icon-power {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%2310b981'%3E%3Cpath d='M13 3h-2v10h2V3zm4.83 2.17l-1.42 1.42C17.99 7.86 19 9.81 19 12c0 3.87-3.13 7-7 7s-7-3.13-7-7c0-2.19 1.01-4.14 2.58-5.42L6.17 5.17C4.23 6.82 3 9.26 3 12c0 4.97 4.03 9 9 9s9-4.03 9-9c0-2.74-1.23-5.18-3.17-6.83z'/%3E%3C/svg%3E");
}
.icon-wifi {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%2310b981'%3E%3Cpath d='M1 9l2 2c4.97-4.97 13.03-4.97 18 0l2-2C16.93 2.93 7.07 2.93 1 9zm8 8l3 3 3-3c-1.65-1.66-4.34-1.66-6 0zm-4-4l2 2c2.76-2.76 7.24-2.76 10 0l2-2C15.14 9.14 8.87 9.14 5 13z'/%3E%3C/svg%3E");
}
/* ===== DOKUMENT ICONS ===== */
.icon-file {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23374151'%3E%3Cpath d='M14,2H6A2,2 0 0,0 4,4V20A2,2 0 0,0 6,22H18A2,2 0 0,0 20,20V8L14,2M18,20H6V4H13V9H18V20Z'/%3E%3C/svg%3E");
}
.icon-queue {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23374151'%3E%3Cpath d='M4 6H2v14c0 1.1.9 2 2 2h14v-2H4V6zm16-4H8c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm-1 9H9V9h10v2zm-4 4H9v-2h6v2zm4-8H9V5h10v2z'/%3E%3C/svg%3E");
}
/* ===== INFO ICONS ===== */
.icon-info {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%233b82f6'%3E%3Cpath d='M12,2C6.48,2 2,6.48 2,12C2,17.52 6.48,22 12,22C17.52,22 22,17.52 22,12C22,6.48 17.52,2 12,2M13,17H11V11H13M13,9H11V7H13'/%3E%3C/svg%3E");
}
.icon-time {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23374151'%3E%3Cpath d='M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2M16.2,16.2L11,13V7H12.5V12.2L17,14.7L16.2,16.2Z'/%3E%3C/svg%3E");
}
/* ===== ARROW ICONS ===== */
.icon-arrow-right {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23374151'%3E%3Cpath d='M8.59 16.59L13.17 12 8.59 7.41 10 6l6 6-6 6-1.41-1.41z'/%3E%3C/svg%3E");
}
.icon-arrow-down {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23374151'%3E%3Cpath d='M7.41 8.59L12 13.17l4.59-4.58L18 10l-6 6-6-6 1.41-1.41z'/%3E%3C/svg%3E");
}
/* ===== HOVER-STATES ===== */
.btn:hover .icon,
.nav-item:hover .icon {
opacity: 0.8;
}
/* ===== DARK MODE ===== */
@media (prefers-color-scheme: dark) {
.icon-printer,
.icon-print,
.icon-home,
.icon-settings,
.icon-users,
.icon-dashboard,
.icon-plus,
.icon-edit,
.icon-refresh,
.icon-file,
.icon-queue,
.icon-time,
.icon-arrow-right,
.icon-arrow-down {
filter: brightness(2);
}
}
/* ===== RESPONSIVE ICON-SIZES ===== */
@media (max-width: 768px) {
.icon { width: 1.25rem; height: 1.25rem; }
.icon-lg { width: 1.75rem; height: 1.75rem; }
.icon-xl { width: 2.25rem; height: 2.25rem; }
}

View File

@@ -0,0 +1,498 @@
/* MYP Platform - Kiosk Optimierte CSS Bundle */
/* Generiert am: 2025-06-01 23:40:48 */
/**
* 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;
}
/**
* Minimales Icon-Set für Kiosk-Modus
* SVG-basierte Icons als CSS-Pseudo-Elemente für beste Performance
* Ersetzt FontAwesome für deutlich kleinere Bundle-Größe
*/
/* Icon-Basis-Klasse */
.icon {
display: inline-block;
width: 1rem;
height: 1rem;
background-size: contain;
background-repeat: no-repeat;
background-position: center;
vertical-align: middle;
}
.icon-lg { width: 1.5rem; height: 1.5rem; }
.icon-xl { width: 2rem; height: 2rem; }
/* ===== DRUCKER ICONS ===== */
.icon-printer {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23374151'%3E%3Cpath d='M19 8H5c-1.66 0-3 1.34-3 3v6h4v4h12v-4h4v-6c0-1.66-1.34-3-3-3zm-3 11H8v-5h8v5zm3-7c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm-1-9H6v4h12V3z'/%3E%3C/svg%3E");
}
.icon-print {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23374151'%3E%3Cpath d='M19 8H5c-1.66 0-3 1.34-3 3v6h4v4h12v-4h4v-6c0-1.66-1.34-3-3-3zm-3 11H8v-5h8v5zm3-7c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm-1-9H6v4h12V3z'/%3E%3C/svg%3E");
}
/* ===== STATUS ICONS ===== */
.icon-check {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%2310b981'%3E%3Cpath d='M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z'/%3E%3C/svg%3E");
}
.icon-warning {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23f59e0b'%3E%3Cpath d='M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z'/%3E%3C/svg%3E");
}
.icon-error {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23ef4444'%3E%3Cpath d='M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z'/%3E%3C/svg%3E");
}
.icon-offline {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%236b7280'%3E%3Cpath d='M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z'/%3E%3C/svg%3E");
}
/* ===== NAVIGATION ICONS ===== */
.icon-home {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23374151'%3E%3Cpath d='M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z'/%3E%3C/svg%3E");
}
.icon-settings {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23374151'%3E%3Cpath d='M19.14,12.94c0.04-0.3,0.06-0.61,0.06-0.94c0-0.32-0.02-0.64-0.07-0.94l2.03-1.58c0.18-0.14,0.23-0.41,0.12-0.61 l-1.92-3.32c-0.12-0.22-0.37-0.29-0.59-0.22l-2.39,0.96c-0.5-0.38-1.03-0.7-1.62-0.94L14.4,2.81c-0.04-0.24-0.24-0.41-0.48-0.41 h-3.84c-0.24,0-0.43,0.17-0.47,0.41L9.25,5.35C8.66,5.59,8.12,5.92,7.63,6.29L5.24,5.33c-0.22-0.08-0.47,0-0.59,0.22L2.74,8.87 C2.62,9.08,2.66,9.34,2.86,9.48l2.03,1.58C4.84,11.36,4.8,11.69,4.8,12s0.02,0.64,0.07,0.94l-2.03,1.58 c-0.18,0.14-0.23,0.41-0.12,0.61l1.92,3.32c0.12,0.22,0.37,0.29,0.59,0.22l2.39-0.96c0.5,0.38,1.03,0.7,1.62,0.94l0.36,2.54 c0.05,0.24,0.24,0.41,0.48,0.41h3.84c0.24,0,0.44-0.17,0.47-0.41l0.36-2.54c0.59-0.24,1.13-0.56,1.62-0.94l2.39,0.96 c0.22,0.08,0.47,0,0.59-0.22l1.92-3.32c0.12-0.22,0.07-0.47-0.12-0.61L19.14,12.94z M12,15.6c-1.98,0-3.6-1.62-3.6-3.6 s1.62-3.6,3.6-3.6s3.6,1.62,3.6,3.6S13.98,15.6,12,15.6z'/%3E%3C/svg%3E");
}
.icon-users {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23374151'%3E%3Cpath d='M16 4c0-1.11.89-2 2-2s2 .89 2 2-.89 2-2 2-2-.89-2-2zm4 18v-6h2.5l-2.54-7.63A3.012 3.012 0 0 0 16.43 6c-.68 0-1.3.27-1.77.72L12 8.5l-2.66-1.78C8.87 6.27 8.25 6 7.57 6c-1.31 0-2.42.83-2.83 2L2.5 16H5v6h2v-6h2v6h2zm-6.5-10.5c.83 0 1.5-.67 1.5-1.5s-.67-1.5-1.5-1.5S12 9.17 12 10s.67 1.5 1.5 1.5z'/%3E%3C/svg%3E");
}
.icon-dashboard {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23374151'%3E%3Cpath d='M3 13h8V3H3v10zm0 8h8v-6H3v6zm10 0h8V11h-8v10zm0-18v6h8V3h-8z'/%3E%3C/svg%3E");
}
/* ===== ACTION ICONS ===== */
.icon-plus {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23374151'%3E%3Cpath d='M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z'/%3E%3C/svg%3E");
}
.icon-edit {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23374151'%3E%3Cpath d='M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM20.71 7.04c.39-.39.39-1.02 0-1.41l-2.34-2.34c-.39-.39-1.02-.39-1.41 0l-1.83 1.83 3.75 3.75 1.83-1.83z'/%3E%3C/svg%3E");
}
.icon-delete {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23ef4444'%3E%3Cpath d='M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z'/%3E%3C/svg%3E");
}
.icon-refresh {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23374151'%3E%3Cpath d='M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4l-2.35 2.35z'/%3E%3C/svg%3E");
}
/* ===== POWER/CONNECTION ICONS ===== */
.icon-power {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%2310b981'%3E%3Cpath d='M13 3h-2v10h2V3zm4.83 2.17l-1.42 1.42C17.99 7.86 19 9.81 19 12c0 3.87-3.13 7-7 7s-7-3.13-7-7c0-2.19 1.01-4.14 2.58-5.42L6.17 5.17C4.23 6.82 3 9.26 3 12c0 4.97 4.03 9 9 9s9-4.03 9-9c0-2.74-1.23-5.18-3.17-6.83z'/%3E%3C/svg%3E");
}
.icon-wifi {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%2310b981'%3E%3Cpath d='M1 9l2 2c4.97-4.97 13.03-4.97 18 0l2-2C16.93 2.93 7.07 2.93 1 9zm8 8l3 3 3-3c-1.65-1.66-4.34-1.66-6 0zm-4-4l2 2c2.76-2.76 7.24-2.76 10 0l2-2C15.14 9.14 8.87 9.14 5 13z'/%3E%3C/svg%3E");
}
/* ===== DOKUMENT ICONS ===== */
.icon-file {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23374151'%3E%3Cpath d='M14,2H6A2,2 0 0,0 4,4V20A2,2 0 0,0 6,22H18A2,2 0 0,0 20,20V8L14,2M18,20H6V4H13V9H18V20Z'/%3E%3C/svg%3E");
}
.icon-queue {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23374151'%3E%3Cpath d='M4 6H2v14c0 1.1.9 2 2 2h14v-2H4V6zm16-4H8c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm-1 9H9V9h10v2zm-4 4H9v-2h6v2zm4-8H9V5h10v2z'/%3E%3C/svg%3E");
}
/* ===== INFO ICONS ===== */
.icon-info {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%233b82f6'%3E%3Cpath d='M12,2C6.48,2 2,6.48 2,12C2,17.52 6.48,22 12,22C17.52,22 22,17.52 22,12C22,6.48 17.52,2 12,2M13,17H11V11H13M13,9H11V7H13'/%3E%3C/svg%3E");
}
.icon-time {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23374151'%3E%3Cpath d='M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2M16.2,16.2L11,13V7H12.5V12.2L17,14.7L16.2,16.2Z'/%3E%3C/svg%3E");
}
/* ===== ARROW ICONS ===== */
.icon-arrow-right {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23374151'%3E%3Cpath d='M8.59 16.59L13.17 12 8.59 7.41 10 6l6 6-6 6-1.41-1.41z'/%3E%3C/svg%3E");
}
.icon-arrow-down {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23374151'%3E%3Cpath d='M7.41 8.59L12 13.17l4.59-4.58L18 10l-6 6-6-6 1.41-1.41z'/%3E%3C/svg%3E");
}
/* ===== HOVER-STATES ===== */
.btn:hover .icon,
.nav-item:hover .icon {
opacity: 0.8;
}
/* ===== DARK MODE ===== */
@media (prefers-color-scheme: dark) {
.icon-printer,
.icon-print,
.icon-home,
.icon-settings,
.icon-users,
.icon-dashboard,
.icon-plus,
.icon-edit,
.icon-refresh,
.icon-file,
.icon-queue,
.icon-time,
.icon-arrow-right,
.icon-arrow-down {
filter: brightness(2);
}
}
/* ===== RESPONSIVE ICON-SIZES ===== */
@media (max-width: 768px) {
.icon { width: 1.25rem; height: 1.25rem; }
.icon-lg { width: 1.75rem; height: 1.75rem; }
.icon-xl { width: 2.25rem; height: 2.25rem; }
}

View File

@@ -0,0 +1,497 @@
/* MYP Platform - Kiosk Optimierte CSS Bundle */
/* Generiert am: 2025-06-01 23:40:48 */
/**
* 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;
}
/**
* Minimales Icon-Set für Kiosk-Modus
* SVG-basierte Icons als CSS-Pseudo-Elemente für beste Performance
*/
/* Icon-Basis-Klasse */
.icon {
display: inline-block;
width: 1rem;
height: 1rem;
background-size: contain;
background-repeat: no-repeat;
background-position: center;
vertical-align: middle;
}
.icon-lg { width: 1.5rem; height: 1.5rem; }
.icon-xl { width: 2rem; height: 2rem; }
/* ===== DRUCKER ICONS ===== */
.icon-printer {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23374151'%3E%3Cpath d='M19 8H5c-1.66 0-3 1.34-3 3v6h4v4h12v-4h4v-6c0-1.66-1.34-3-3-3zm-3 11H8v-5h8v5zm3-7c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm-1-9H6v4h12V3z'/%3E%3C/svg%3E");
}
.icon-print {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23374151'%3E%3Cpath d='M19 8H5c-1.66 0-3 1.34-3 3v6h4v4h12v-4h4v-6c0-1.66-1.34-3-3-3zm-3 11H8v-5h8v5zm3-7c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm-1-9H6v4h12V3z'/%3E%3C/svg%3E");
}
/* ===== STATUS ICONS ===== */
.icon-check {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%2310b981'%3E%3Cpath d='M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z'/%3E%3C/svg%3E");
}
.icon-warning {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23f59e0b'%3E%3Cpath d='M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z'/%3E%3C/svg%3E");
}
.icon-error {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23ef4444'%3E%3Cpath d='M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z'/%3E%3C/svg%3E");
}
.icon-offline {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%236b7280'%3E%3Cpath d='M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z'/%3E%3C/svg%3E");
}
/* ===== NAVIGATION ICONS ===== */
.icon-home {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23374151'%3E%3Cpath d='M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z'/%3E%3C/svg%3E");
}
.icon-settings {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23374151'%3E%3Cpath d='M19.14,12.94c0.04-0.3,0.06-0.61,0.06-0.94c0-0.32-0.02-0.64-0.07-0.94l2.03-1.58c0.18-0.14,0.23-0.41,0.12-0.61 l-1.92-3.32c-0.12-0.22-0.37-0.29-0.59-0.22l-2.39,0.96c-0.5-0.38-1.03-0.7-1.62-0.94L14.4,2.81c-0.04-0.24-0.24-0.41-0.48-0.41 h-3.84c-0.24,0-0.43,0.17-0.47,0.41L9.25,5.35C8.66,5.59,8.12,5.92,7.63,6.29L5.24,5.33c-0.22-0.08-0.47,0-0.59,0.22L2.74,8.87 C2.62,9.08,2.66,9.34,2.86,9.48l2.03,1.58C4.84,11.36,4.8,11.69,4.8,12s0.02,0.64,0.07,0.94l-2.03,1.58 c-0.18,0.14-0.23,0.41-0.12,0.61l1.92,3.32c0.12,0.22,0.37,0.29,0.59,0.22l2.39-0.96c0.5,0.38,1.03,0.7,1.62,0.94l0.36,2.54 c0.05,0.24,0.24,0.41,0.48,0.41h3.84c0.24,0,0.44-0.17,0.47-0.41l0.36-2.54c0.59-0.24,1.13-0.56,1.62-0.94l2.39,0.96 c0.22,0.08,0.47,0,0.59-0.22l1.92-3.32c0.12-0.22,0.07-0.47-0.12-0.61L19.14,12.94z M12,15.6c-1.98,0-3.6-1.62-3.6-3.6 s1.62-3.6,3.6-3.6s3.6,1.62,3.6,3.6S13.98,15.6,12,15.6z'/%3E%3C/svg%3E");
}
.icon-users {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23374151'%3E%3Cpath d='M16 4c0-1.11.89-2 2-2s2 .89 2 2-.89 2-2 2-2-.89-2-2zm4 18v-6h2.5l-2.54-7.63A3.012 3.012 0 0 0 16.43 6c-.68 0-1.3.27-1.77.72L12 8.5l-2.66-1.78C8.87 6.27 8.25 6 7.57 6c-1.31 0-2.42.83-2.83 2L2.5 16H5v6h2v-6h2v6h2zm-6.5-10.5c.83 0 1.5-.67 1.5-1.5s-.67-1.5-1.5-1.5S12 9.17 12 10s.67 1.5 1.5 1.5z'/%3E%3C/svg%3E");
}
.icon-dashboard {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23374151'%3E%3Cpath d='M3 13h8V3H3v10zm0 8h8v-6H3v6zm10 0h8V11h-8v10zm0-18v6h8V3h-8z'/%3E%3C/svg%3E");
}
/* ===== ACTION ICONS ===== */
.icon-plus {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23374151'%3E%3Cpath d='M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z'/%3E%3C/svg%3E");
}
.icon-edit {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23374151'%3E%3Cpath d='M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM20.71 7.04c.39-.39.39-1.02 0-1.41l-2.34-2.34c-.39-.39-1.02-.39-1.41 0l-1.83 1.83 3.75 3.75 1.83-1.83z'/%3E%3C/svg%3E");
}
.icon-delete {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23ef4444'%3E%3Cpath d='M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z'/%3E%3C/svg%3E");
}
.icon-refresh {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23374151'%3E%3Cpath d='M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4l-2.35 2.35z'/%3E%3C/svg%3E");
}
/* ===== POWER/CONNECTION ICONS ===== */
.icon-power {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%2310b981'%3E%3Cpath d='M13 3h-2v10h2V3zm4.83 2.17l-1.42 1.42C17.99 7.86 19 9.81 19 12c0 3.87-3.13 7-7 7s-7-3.13-7-7c0-2.19 1.01-4.14 2.58-5.42L6.17 5.17C4.23 6.82 3 9.26 3 12c0 4.97 4.03 9 9 9s9-4.03 9-9c0-2.74-1.23-5.18-3.17-6.83z'/%3E%3C/svg%3E");
}
.icon-wifi {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%2310b981'%3E%3Cpath d='M1 9l2 2c4.97-4.97 13.03-4.97 18 0l2-2C16.93 2.93 7.07 2.93 1 9zm8 8l3 3 3-3c-1.65-1.66-4.34-1.66-6 0zm-4-4l2 2c2.76-2.76 7.24-2.76 10 0l2-2C15.14 9.14 8.87 9.14 5 13z'/%3E%3C/svg%3E");
}
/* ===== DOKUMENT ICONS ===== */
.icon-file {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23374151'%3E%3Cpath d='M14,2H6A2,2 0 0,0 4,4V20A2,2 0 0,0 6,22H18A2,2 0 0,0 20,20V8L14,2M18,20H6V4H13V9H18V20Z'/%3E%3C/svg%3E");
}
.icon-queue {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23374151'%3E%3Cpath d='M4 6H2v14c0 1.1.9 2 2 2h14v-2H4V6zm16-4H8c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm-1 9H9V9h10v2zm-4 4H9v-2h6v2zm4-8H9V5h10v2z'/%3E%3C/svg%3E");
}
/* ===== INFO ICONS ===== */
.icon-info {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%233b82f6'%3E%3Cpath d='M12,2C6.48,2 2,6.48 2,12C2,17.52 6.48,22 12,22C17.52,22 22,17.52 22,12C22,6.48 17.52,2 12,2M13,17H11V11H13M13,9H11V7H13'/%3E%3C/svg%3E");
}
.icon-time {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23374151'%3E%3Cpath d='M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2M16.2,16.2L11,13V7H12.5V12.2L17,14.7L16.2,16.2Z'/%3E%3C/svg%3E");
}
/* ===== ARROW ICONS ===== */
.icon-arrow-right {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23374151'%3E%3Cpath d='M8.59 16.59L13.17 12 8.59 7.41 10 6l6 6-6 6-1.41-1.41z'/%3E%3C/svg%3E");
}
.icon-arrow-down {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23374151'%3E%3Cpath d='M7.41 8.59L12 13.17l4.59-4.58L18 10l-6 6-6-6 1.41-1.41z'/%3E%3C/svg%3E");
}
/* ===== HOVER-STATES ===== */
.btn:hover .icon,
.nav-item:hover .icon {
opacity: 0.8;
}
/* ===== DARK MODE ===== */
@media (prefers-color-scheme: dark) {
.icon-printer,
.icon-print,
.icon-home,
.icon-settings,
.icon-users,
.icon-dashboard,
.icon-plus,
.icon-edit,
.icon-refresh,
.icon-file,
.icon-queue,
.icon-time,
.icon-arrow-right,
.icon-arrow-down {
filter: brightness(2);
}
}
/* ===== RESPONSIVE ICON-SIZES ===== */
@media (max-width: 768px) {
.icon { width: 1.25rem; height: 1.25rem; }
.icon-lg { width: 1.75rem; height: 1.75rem; }
.icon-xl { width: 2.25rem; height: 2.25rem; }
}

View File

@@ -0,0 +1,498 @@
/* MYP Platform - Kiosk Optimierte CSS Bundle */
/* Generiert am: 2025-06-01 23:40:48 */
/**
* 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;
}
/**
* Minimales Icon-Set für Kiosk-Modus
* SVG-basierte Icons als CSS-Pseudo-Elemente für beste Performance
* Ersetzt FontAwesome für deutlich kleinere Bundle-Größe
*/
/* Icon-Basis-Klasse */
.icon {
display: inline-block;
width: 1rem;
height: 1rem;
background-size: contain;
background-repeat: no-repeat;
background-position: center;
vertical-align: middle;
}
.icon-lg { width: 1.5rem; height: 1.5rem; }
.icon-xl { width: 2rem; height: 2rem; }
/* ===== DRUCKER ICONS ===== */
.icon-printer {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23374151'%3E%3Cpath d='M19 8H5c-1.66 0-3 1.34-3 3v6h4v4h12v-4h4v-6c0-1.66-1.34-3-3-3zm-3 11H8v-5h8v5zm3-7c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm-1-9H6v4h12V3z'/%3E%3C/svg%3E");
}
.icon-print {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23374151'%3E%3Cpath d='M19 8H5c-1.66 0-3 1.34-3 3v6h4v4h12v-4h4v-6c0-1.66-1.34-3-3-3zm-3 11H8v-5h8v5zm3-7c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm-1-9H6v4h12V3z'/%3E%3C/svg%3E");
}
/* ===== STATUS ICONS ===== */
.icon-check {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%2310b981'%3E%3Cpath d='M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z'/%3E%3C/svg%3E");
}
.icon-warning {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23f59e0b'%3E%3Cpath d='M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z'/%3E%3C/svg%3E");
}
.icon-error {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23ef4444'%3E%3Cpath d='M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z'/%3E%3C/svg%3E");
}
.icon-offline {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%236b7280'%3E%3Cpath d='M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z'/%3E%3C/svg%3E");
}
/* ===== NAVIGATION ICONS ===== */
.icon-home {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23374151'%3E%3Cpath d='M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z'/%3E%3C/svg%3E");
}
.icon-settings {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23374151'%3E%3Cpath d='M19.14,12.94c0.04-0.3,0.06-0.61,0.06-0.94c0-0.32-0.02-0.64-0.07-0.94l2.03-1.58c0.18-0.14,0.23-0.41,0.12-0.61 l-1.92-3.32c-0.12-0.22-0.37-0.29-0.59-0.22l-2.39,0.96c-0.5-0.38-1.03-0.7-1.62-0.94L14.4,2.81c-0.04-0.24-0.24-0.41-0.48-0.41 h-3.84c-0.24,0-0.43,0.17-0.47,0.41L9.25,5.35C8.66,5.59,8.12,5.92,7.63,6.29L5.24,5.33c-0.22-0.08-0.47,0-0.59,0.22L2.74,8.87 C2.62,9.08,2.66,9.34,2.86,9.48l2.03,1.58C4.84,11.36,4.8,11.69,4.8,12s0.02,0.64,0.07,0.94l-2.03,1.58 c-0.18,0.14-0.23,0.41-0.12,0.61l1.92,3.32c0.12,0.22,0.37,0.29,0.59,0.22l2.39-0.96c0.5,0.38,1.03,0.7,1.62,0.94l0.36,2.54 c0.05,0.24,0.24,0.41,0.48,0.41h3.84c0.24,0,0.44-0.17,0.47-0.41l0.36-2.54c0.59-0.24,1.13-0.56,1.62-0.94l2.39,0.96 c0.22,0.08,0.47,0,0.59-0.22l1.92-3.32c0.12-0.22,0.07-0.47-0.12-0.61L19.14,12.94z M12,15.6c-1.98,0-3.6-1.62-3.6-3.6 s1.62-3.6,3.6-3.6s3.6,1.62,3.6,3.6S13.98,15.6,12,15.6z'/%3E%3C/svg%3E");
}
.icon-users {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23374151'%3E%3Cpath d='M16 4c0-1.11.89-2 2-2s2 .89 2 2-.89 2-2 2-2-.89-2-2zm4 18v-6h2.5l-2.54-7.63A3.012 3.012 0 0 0 16.43 6c-.68 0-1.3.27-1.77.72L12 8.5l-2.66-1.78C8.87 6.27 8.25 6 7.57 6c-1.31 0-2.42.83-2.83 2L2.5 16H5v6h2v-6h2v6h2zm-6.5-10.5c.83 0 1.5-.67 1.5-1.5s-.67-1.5-1.5-1.5S12 9.17 12 10s.67 1.5 1.5 1.5z'/%3E%3C/svg%3E");
}
.icon-dashboard {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23374151'%3E%3Cpath d='M3 13h8V3H3v10zm0 8h8v-6H3v6zm10 0h8V11h-8v10zm0-18v6h8V3h-8z'/%3E%3C/svg%3E");
}
/* ===== ACTION ICONS ===== */
.icon-plus {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23374151'%3E%3Cpath d='M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z'/%3E%3C/svg%3E");
}
.icon-edit {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23374151'%3E%3Cpath d='M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM20.71 7.04c.39-.39.39-1.02 0-1.41l-2.34-2.34c-.39-.39-1.02-.39-1.41 0l-1.83 1.83 3.75 3.75 1.83-1.83z'/%3E%3C/svg%3E");
}
.icon-delete {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23ef4444'%3E%3Cpath d='M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z'/%3E%3C/svg%3E");
}
.icon-refresh {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23374151'%3E%3Cpath d='M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4l-2.35 2.35z'/%3E%3C/svg%3E");
}
/* ===== POWER/CONNECTION ICONS ===== */
.icon-power {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%2310b981'%3E%3Cpath d='M13 3h-2v10h2V3zm4.83 2.17l-1.42 1.42C17.99 7.86 19 9.81 19 12c0 3.87-3.13 7-7 7s-7-3.13-7-7c0-2.19 1.01-4.14 2.58-5.42L6.17 5.17C4.23 6.82 3 9.26 3 12c0 4.97 4.03 9 9 9s9-4.03 9-9c0-2.74-1.23-5.18-3.17-6.83z'/%3E%3C/svg%3E");
}
.icon-wifi {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%2310b981'%3E%3Cpath d='M1 9l2 2c4.97-4.97 13.03-4.97 18 0l2-2C16.93 2.93 7.07 2.93 1 9zm8 8l3 3 3-3c-1.65-1.66-4.34-1.66-6 0zm-4-4l2 2c2.76-2.76 7.24-2.76 10 0l2-2C15.14 9.14 8.87 9.14 5 13z'/%3E%3C/svg%3E");
}
/* ===== DOKUMENT ICONS ===== */
.icon-file {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23374151'%3E%3Cpath d='M14,2H6A2,2 0 0,0 4,4V20A2,2 0 0,0 6,22H18A2,2 0 0,0 20,20V8L14,2M18,20H6V4H13V9H18V20Z'/%3E%3C/svg%3E");
}
.icon-queue {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23374151'%3E%3Cpath d='M4 6H2v14c0 1.1.9 2 2 2h14v-2H4V6zm16-4H8c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm-1 9H9V9h10v2zm-4 4H9v-2h6v2zm4-8H9V5h10v2z'/%3E%3C/svg%3E");
}
/* ===== INFO ICONS ===== */
.icon-info {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%233b82f6'%3E%3Cpath d='M12,2C6.48,2 2,6.48 2,12C2,17.52 6.48,22 12,22C17.52,22 22,17.52 22,12C22,6.48 17.52,2 12,2M13,17H11V11H13M13,9H11V7H13'/%3E%3C/svg%3E");
}
.icon-time {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23374151'%3E%3Cpath d='M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2M16.2,16.2L11,13V7H12.5V12.2L17,14.7L16.2,16.2Z'/%3E%3C/svg%3E");
}
/* ===== ARROW ICONS ===== */
.icon-arrow-right {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23374151'%3E%3Cpath d='M8.59 16.59L13.17 12 8.59 7.41 10 6l6 6-6 6-1.41-1.41z'/%3E%3C/svg%3E");
}
.icon-arrow-down {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23374151'%3E%3Cpath d='M7.41 8.59L12 13.17l4.59-4.58L18 10l-6 6-6-6 1.41-1.41z'/%3E%3C/svg%3E");
}
/* ===== HOVER-STATES ===== */
.btn:hover .icon,
.nav-item:hover .icon {
opacity: 0.8;
}
/* ===== DARK MODE ===== */
@media (prefers-color-scheme: dark) {
.icon-printer,
.icon-print,
.icon-home,
.icon-settings,
.icon-users,
.icon-dashboard,
.icon-plus,
.icon-edit,
.icon-refresh,
.icon-file,
.icon-queue,
.icon-time,
.icon-arrow-right,
.icon-arrow-down {
filter: brightness(2);
}
}
/* ===== RESPONSIVE ICON-SIZES ===== */
@media (max-width: 768px) {
.icon { width: 1.25rem; height: 1.25rem; }
.icon-lg { width: 1.75rem; height: 1.75rem; }
.icon-xl { width: 2.25rem; height: 2.25rem; }
}

View File

@@ -0,0 +1,287 @@
/**
* MYP Platform - CSS Caching-Optimierungen für Raspberry Pi
* Performance-optimierte Styles ohne GPU-intensive Effekte
*/
/* ===== KRITISCHE ABOVE-THE-FOLD STYLES - RASPBERRY PI OPTIMIERT ===== */
/* Diese Styles sollten inline im HTML-Head geladen werden */
.critical-header {
background: rgba(255, 255, 255, 0.98);
position: sticky;
top: 0;
z-index: 1000;
/* Entfernt: backdrop-filter, box-shadow */
}
.critical-nav {
display: flex;
align-items: center;
padding: 1rem;
max-width: 1200px;
margin: 0 auto;
}
.critical-logo {
font-weight: 700;
font-size: 1.25rem;
color: #0073ce;
}
.critical-main {
min-height: 100vh;
background: #fafbfc;
/* Entfernt: gradient für bessere Performance */
}
/* ===== LAZY LOADING PLACEHOLDER - VEREINFACHT ===== */
.lazy-placeholder {
background: #f0f0f0;
border-radius: 4px;
/* Entfernt: gradient und animation */
}
.dark .lazy-placeholder {
background: #374151;
/* Entfernt: gradient und animation */
}
/* ===== PRELOAD HINTS ===== */
.preload-image {
content-visibility: auto;
contain-intrinsic-size: 300px 200px;
}
.preload-component {
content-visibility: auto;
contain-intrinsic-size: 100px;
}
/* ===== CACHE-OPTIMIERTE KOMPONENTEN - RASPBERRY PI OPTIMIERT ===== */
.cache-card {
background: rgba(255, 255, 255, 0.98);
border: 1px solid rgba(229, 231, 235, 0.5);
border-radius: 8px;
padding: 1rem;
margin-bottom: 1rem;
contain: layout style;
/* Entfernt: transition, hover-transform, paint containment */
}
.cache-button {
background: #0073ce;
color: white;
border: none;
border-radius: 6px;
padding: 0.5rem 1rem;
font-weight: 600;
contain: layout style;
/* Entfernt: transition */
}
.cache-button:hover {
background: #005a9f;
}
.cache-input {
background: rgba(255, 255, 255, 0.98);
border: 1px solid rgba(229, 231, 235, 0.8);
border-radius: 4px;
padding: 0.5rem;
contain: layout style;
/* Entfernt: transition, box-shadow */
}
.cache-input:focus {
outline: none;
border-color: #0073ce;
/* Entfernt: box-shadow */
}
/* ===== LAYOUT SHIFT PREVENTION ===== */
.prevent-cls {
min-height: 200px;
contain: layout;
}
.image-container {
aspect-ratio: 16/9;
overflow: hidden;
border-radius: 8px;
background: #f3f4f6;
}
.image-container img {
width: 100%;
height: 100%;
object-fit: cover;
/* Entfernt: transition */
}
.image-container img[loading="lazy"] {
opacity: 0;
}
.image-container img[loading="lazy"].loaded {
opacity: 1;
}
/* ===== OPTIMIERTE TYPOGRAPHY ===== */
.text-heading {
font-weight: 700;
line-height: 1.2;
color: #111827;
contain: layout style;
}
.text-body {
line-height: 1.6;
color: #374151;
contain: layout style;
}
.text-muted {
color: #6b7280;
contain: layout style;
}
/* ===== DARK MODE CACHE OPTIMIZATIONS - VEREINFACHT ===== */
.dark .cache-card {
background: rgba(30, 41, 59, 0.98);
border-color: rgba(100, 116, 139, 0.3);
}
.dark .cache-input {
background: rgba(30, 41, 59, 0.98);
border-color: rgba(100, 116, 139, 0.5);
color: #e2e8f0;
}
.dark .text-heading {
color: #f8fafc;
}
.dark .text-body {
color: #e2e8f0;
}
.dark .text-muted {
color: #94a3b8;
}
.dark .image-container {
background: #374151;
}
/* ===== RESPONSIVE OPTIMIZATIONS ===== */
@media (max-width: 768px) {
.critical-nav {
padding: 0.75rem;
}
.cache-card {
padding: 0.75rem;
margin-bottom: 0.75rem;
}
.cache-button {
padding: 0.75rem 1.25rem;
font-size: 0.875rem;
}
}
/* ===== PRINT OPTIMIZATIONS ===== */
@media print {
.critical-header,
.cache-button {
display: none;
}
.cache-card {
border: 1px solid #000;
break-inside: avoid;
}
}
/* ===== ALLE GPU ACCELERATION ENTFERNT ===== */
/* GPU-Beschleunigung ist auf Raspberry Pi problematisch */
/* ===== NUR FADE-IN OHNE TRANSFORM ===== */
.fade-in-optimized {
opacity: 0;
/* Entfernt: transform und alle transform-Animationen */
}
.fade-in-optimized.visible {
opacity: 1;
/* Nur opacity change */
}
/* ===== CONTAINER QUERIES SUPPORT ===== */
@container (min-width: 300px) {
.cache-card {
display: grid;
grid-template-columns: 1fr auto;
gap: 1rem;
align-items: center;
}
}
/* ===== CONTENT VISIBILITY OPTIMIZATIONS ===== */
.auto-height {
content-visibility: auto;
contain-intrinsic-size: 0 200px;
}
.hidden-content {
content-visibility: hidden;
}
/* ===== REDUCED MOTION PREFERENCES - ERWEITERT ===== */
@media (prefers-reduced-motion: reduce) {
.fade-in-optimized,
.cache-card,
.cache-button,
.cache-input {
transition: none !important;
transform: none !important;
animation: none !important;
}
.lazy-placeholder {
animation: none !important;
background: #f0f0f0 !important;
}
}
/* ===== HIGH CONTRAST MODE ===== */
@media (prefers-contrast: high) {
.cache-card {
border-width: 2px;
border-color: #000;
}
.cache-button {
border: 2px solid #000;
}
.cache-input {
border-width: 2px;
border-color: #000;
}
}
/* ===== RASPBERRY PI SPECIFIC OPTIMIERUNGEN ===== */
.raspberry-pi-optimized {
/* Minimale CSS Properties */
/* Keine will-change */
/* Keine Transforms */
/* Keine Shadows */
/* Nur opacity und color Transitions */
transition: opacity 0.2s ease, color 0.2s ease, background-color 0.2s ease;
}
.performance-critical {
/* Für kritische Bereiche */
contain: layout style;
/* Keine paint containment */
}

Binary file not shown.

View File

@@ -0,0 +1 @@
.critical-header{background:rgba(255,255,255,0.95);backdrop-filter:blur(8px);position:sticky;top:0;z-index:1000;box-shadow:0 2px 8px rgba(0,0,0,0.06)}.critical-nav{display:flex;align-items:center;padding:1rem;max-width:1200px;margin:0 auto}.critical-logo{font-weight:700;font-size:1.25rem;color:#0073ce}.critical-main{min-height:100vh;background:linear-gradient(135deg,#fafbfc 0,#f5f7f9 100%)}.lazy-placeholder{background:linear-gradient(90deg,#f0f0f0 25%,#e0e0e0 50%,#f0f0f0 75%);background-size:200% 100%;animation:skeleton-loading 1.5s infinite ease-in-out;border-radius:4px}@keyframes skeleton-loading{0%{background-position:200% 0}100%{background-position:-200% 0}}.dark .lazy-placeholder{background:linear-gradient(90deg,#374151 25%,#4b5563 50%,#374151 75%);background-size:200% 100%}.preload-image{content-visibility:auto;contain-intrinsic-size:300px 200px}.preload-component{content-visibility:auto;contain-intrinsic-size:100px}.cache-card{background:rgba(255,255,255,0.9);border:1px solid rgba(229,231,235,0.5);border-radius:8px;padding:1rem;margin-bottom:1rem;transition:transform .2s ease;contain:layout style paint}.cache-card:hover{transform:translateY(-1px)}.cache-button{background:#0073ce;color:white;border:0;border-radius:6px;padding:.5rem 1rem;font-weight:600;transition:background-color .2s ease;contain:layout style}.cache-button:hover{background:#005a9f}.cache-input{background:rgba(255,255,255,0.9);border:1px solid rgba(229,231,235,0.8);border-radius:4px;padding:.5rem;transition:border-color .2s ease;contain:layout style}.cache-input:focus{outline:0;border-color:#0073ce;box-shadow:0 0 0 2px rgba(0,115,206,0.1)}.prevent-cls{min-height:200px;contain:layout}.image-container{aspect-ratio:16/9;overflow:hidden;border-radius:8px;background:#f3f4f6}.image-container img{width:100%;height:100%;object-fit:cover;transition:opacity .3s ease}.image-container img[loading="lazy"]{opacity:0}.image-container img[loading="lazy"].loaded{opacity:1}.text-heading{font-weight:700;line-height:1.2;color:#111827;contain:layout style}.text-body{line-height:1.6;color:#374151;contain:layout style}.text-muted{color:#6b7280;contain:layout style}.dark .cache-card{background:rgba(30,41,59,0.9);border-color:rgba(100,116,139,0.3)}.dark .cache-input{background:rgba(30,41,59,0.9);border-color:rgba(100,116,139,0.5);color:#e2e8f0}.dark .text-heading{color:#f8fafc}.dark .text-body{color:#e2e8f0}.dark .text-muted{color:#94a3b8}.dark .image-container{background:#374151}@media(max-width:768px){.critical-nav{padding:.75rem}.cache-card{padding:.75rem;margin-bottom:.75rem}.cache-button{padding:.75rem 1.25rem;font-size:.875rem}}@media print{.critical-header,.cache-button{display:none}.cache-card{box-shadow:none;border:1px solid #000;break-inside:avoid}}.gpu-accelerated{transform:translateZ(0);will-change:transform}.fade-in-optimized{opacity:0;transform:translateY(10px);transition:opacity .3s ease,transform .3s ease}.fade-in-optimized.visible{opacity:1;transform:translateY(0)}@container(min-width:300px){.cache-card{display:grid;grid-template-columns:1fr auto;gap:1rem;align-items:center}}.auto-height{content-visibility:auto;contain-intrinsic-size:0 200px}.hidden-content{content-visibility:hidden}@media(prefers-reduced-motion:reduce){.fade-in-optimized,.cache-card,.cache-button,.cache-input{transition:none !important}.lazy-placeholder{animation:none !important;background:#f0f0f0 !important}}@media(prefers-contrast:high){.cache-card{border-width:2px;border-color:#000}.cache-button{border:2px solid #000}.cache-input{border-width:2px;border-color:#000}}

Binary file not shown.

View File

@@ -0,0 +1,520 @@
/**
* Optimized MYP Platform Components for Raspberry Pi
* All transitions and animations removed for performance
*/
@layer components {
/* Karten und Container - Keine Transitions */
.card {
@apply bg-white dark:bg-slate-900 rounded-xl shadow-lg border border-slate-200 dark:border-slate-700 p-6 m-4;
}
.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;
}
.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;
}
/* Formulare - Keine Transitions */
.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;
}
.form-label {
@apply block text-sm font-semibold text-slate-700 dark:text-slate-300 mb-2;
}
.form-group {
@apply mb-6;
}
.form-help {
@apply mt-1 text-xs text-slate-500 dark:text-slate-400;
}
.form-error {
@apply mt-1 text-xs text-red-600 dark:text-red-400 font-medium;
}
/* Buttons - Keine Transitions */
.btn-icon {
@apply inline-flex items-center justify-center rounded-xl p-3 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 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;
}
/* Badges und Tags - Keine Transitions */
.badge {
@apply inline-flex items-center rounded-full px-3 py-1.5 text-xs font-semibold 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;
}
/* Status Anzeigen - Keine Animation */
.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-[''] 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;
}
/* Tabellen - Keine Transitions */
.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;
}
.table-styled th {
@apply px-6 py-4 font-semibold text-slate-900 dark:text-white;
}
.table-styled tbody tr {
@apply border-t border-slate-200 dark:border-slate-700;
}
.table-styled tbody tr:hover {
@apply bg-slate-50 dark:bg-slate-800/50;
}
.table-styled td {
@apply px-6 py-4;
}
/* Alerts - Keine Transitions */
.alert {
@apply rounded-xl border-2 p-6 mb-4 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;
}
/* Navigation - Keine Transitions */
.nav-tab {
@apply inline-flex items-center gap-2 px-6 py-3 border-b-2 text-sm font-semibold;
}
.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;
}
/* Navigation Links - Keine Transitions */
.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 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;
}
/* Printer Status - Statisch */
.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;
}
/* Job Status - Statisch */
.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;
}
/* Buttons - Keine Transitions */
.btn {
@apply px-6 py-3 rounded-xl 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;
}
/* Mercedes Design-Komponenten - Vereinfacht */
.mercedes-glass {
background: rgba(255, 255, 255, 0.9);
border: 1px solid rgba(255, 255, 255, 0.2);
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);
}
/* Gradients - Statisch */
.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 */
.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;
}
/* Schatten - Statisch */
.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);
}
/* Button Styles - Vereinfacht */
.professional-button {
background: linear-gradient(135deg, #3b82f6 0%, #1d4ed8 100%);
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:hover {
background: linear-gradient(135deg, #1d4ed8 0%, #1e40af 100%);
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);
}
/* Input Fields - Vereinfacht */
.input-field {
background: rgba(255, 255, 255, 0.95);
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 {
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);
}
/* Cards - Vereinfacht */
.professional-card {
border-radius: 1.5rem;
overflow: hidden;
background: rgba(255, 255, 255, 0.98);
border: 1px solid rgba(203, 213, 225, 0.5);
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 {
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);
}
/* Navigation - Vereinfacht */
.nav-item {
position: relative;
border-radius: 0.75rem;
}
.nav-item::after {
content: '';
position: absolute;
bottom: -2px;
left: 50%;
width: 0;
height: 2px;
background: linear-gradient(90deg, #3b82f6, #1d4ed8);
}
.nav-item:hover::after,
.nav-item.active::after {
width: 100%;
}
/* 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);
}
/* Container */
.main-container {
background: rgba(248, 250, 252, 0.8);
}
.dark .main-container {
background: rgba(15, 23, 42, 0.8);
}
/* Status Badges - Vereinfacht */
.status-badge {
display: inline-flex;
align-items: center;
padding: 0.5rem 0.75rem;
font-size: 0.75rem;
font-weight: 700;
border-radius: 9999px;
border: 1px solid transparent;
text-transform: uppercase;
letter-spacing: 0.025em;
}
/* Keine globalen Transitions */
* {
transition: none !important;
animation: none !important;
}
/* Interactive Hover - Vereinfacht */
.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);
}
/* Loading States - Keine Animation */
.loading-shimmer {
background: #f1f5f9;
}
.dark .loading-shimmer {
background: #334155;
}
/* Focus Indicators */
.focus-ring:focus {
outline: 3px solid #3b82f6;
outline-offset: 2px;
}
.dark .focus-ring:focus {
outline: 3px solid #60a5fa;
}
/* 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 Design */
@media (max-width: 768px) {
.professional-shadow {
box-shadow: 0 10px 25px rgba(0, 0, 0, 0.1);
}
.professional-card {
border-radius: 1rem;
}
}
/* Keine Animationen */
.fade-in,
.slide-up {
/* Keine Animation */
}
/* Root Variablen */
: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);
}
}

Binary file not shown.

File diff suppressed because one or more lines are too long

Binary file not shown.

604
static/css/components.css Normal file
View File

@@ -0,0 +1,604 @@
/**
* 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);
}
}

Binary file not shown.

1
static/css/components.min.css vendored Normal file

File diff suppressed because one or more lines are too long

Binary file not shown.

View File

@@ -0,0 +1,102 @@
/* Core Utilities CSS - Notification System Styles */
/* ===== NOTIFICATION CONTAINER ===== */
#myp-notifications {
pointer-events: none;
max-width: 400px;
}
#myp-notifications > * {
pointer-events: auto;
}
/* ===== BASE NOTIFICATION STYLES ===== */
.notification {
min-width: 300px;
max-width: 100%;
word-wrap: break-word;
font-size: 0.875rem;
line-height: 1.25rem;
}
/* Glassmorphism effect for notifications */
.notification.glass-navbar {
background: rgba(255, 255, 255, 0.85);
backdrop-filter: blur(10px);
-webkit-backdrop-filter: blur(10px);
border: 1px solid rgba(255, 255, 255, 0.3);
}
.dark .notification.glass-navbar {
background: rgba(15, 23, 42, 0.85);
border: 1px solid rgba(255, 255, 255, 0.1);
}
/* ===== NOTIFICATION TYPES ===== */
.notification-success {
border-left: 4px solid #10b981;
}
.notification-error {
border-left: 4px solid #ef4444;
}
.notification-warning {
border-left: 4px solid #f59e0b;
}
.notification-info {
border-left: 4px solid #3b82f6;
}
/* ===== NOTIFICATION ANIMATIONS ===== */
.notification {
transition: transform 0.3s ease-out, opacity 0.3s ease-out;
}
.notification.translate-x-full {
transform: translateX(100%);
opacity: 0;
}
/* ===== CLOSE BUTTON ===== */
.notification button {
font-size: 1.5rem;
line-height: 1;
background: none;
border: none;
cursor: pointer;
opacity: 0.7;
transition: opacity 0.2s;
}
.notification button:hover {
opacity: 1;
}
/* ===== RESPONSIVE DESIGN ===== */
@media (max-width: 640px) {
#myp-notifications {
left: 1rem;
right: 1rem;
max-width: none;
}
.notification {
min-width: auto;
}
}
/* ===== ACCESSIBILITY ===== */
@media (prefers-reduced-motion: reduce) {
.notification {
transition: none;
}
}
/* ===== PRINT STYLES ===== */
@media print {
#myp-notifications {
display: none;
}
}

Binary file not shown.

1
static/css/core-utilities.min.css vendored Normal file
View File

@@ -0,0 +1 @@
#myp-notifications{pointer-events:none;max-width:400px;}#myp-notifications > *{pointer-events:auto;}.notification{min-width:300px;max-width:100%;word-wrap:break-word;font-size:0.875rem;line-height:1.25rem;}.notification.glass-navbar{background:rgba(255,255,255,0.85);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border:1px solid rgba(255,255,255,0.3);}.dark .notification.glass-navbar{background:rgba(15,23,42,0.85);border:1px solid rgba(255,255,255,0.1);}.notification-success{border-left:4px solid #10b981;}.notification-error{border-left:4px solid #ef4444;}.notification-warning{border-left:4px solid #f59e0b;}.notification-info{border-left:4px solid #3b82f6;}.notification{transition:transform 0.3s ease-out,opacity 0.3s ease-out;}.notification.translate-x-full{transform:translateX(100%);opacity:0;}.notification button{font-size:1.5rem;line-height:1;background:none;border:none;cursor:pointer;opacity:0.7;transition:opacity 0.2s;}.notification button:hover{opacity:1;}@media (max-width:640px){#myp-notifications{left:1rem;right:1rem;max-width:none;}.notification{min-width:auto;}}@media (prefers-reduced-motion:reduce){.notification{transition:none;}}@media print{#myp-notifications{display:none;}}

Binary file not shown.

Binary file not shown.

1
static/css/critical-inline.min.css vendored Normal file
View File

@@ -0,0 +1 @@
*,*::before,*::after{box-sizing:border-box}body{margin:0;font-family:system-ui,-apple-system,sans-serif;line-height:1.6;color:#111827;background:#fafbfc}.critical-header{position:sticky;top:0;z-index:1000;background:rgba(255,255,255,0.95);backdrop-filter:blur(8px);border-bottom:1px solid #e5e7eb}.critical-nav{display:flex;align-items:center;justify-content:space-between;padding:1rem;max-width:1200px;margin:0 auto}.critical-logo{font-weight:700;font-size:1.25rem;color:#0073ce;text-decoration:none}.critical-main{min-height:100vh;padding:2rem 1rem}.critical-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:1.5rem;max-width:1200px;margin:0 auto}.critical-card{background:#fff;border:1px solid #e5e7eb;border-radius:8px;padding:1.5rem;box-shadow:0 1px 3px rgba(0,0,0,0.1)}.btn-primary{background:#0073ce;color:#fff;border:0;border-radius:6px;padding:.75rem 1.5rem;font-weight:600;cursor:pointer;text-decoration:none;display:inline-block}.loading{opacity:.6;pointer-events:none}.hidden{display:none}@media(max-width:768px){.critical-nav{padding:.75rem}.critical-main{padding:1rem}.critical-grid{grid-template-columns:1fr}.critical-card{padding:1rem}}@media(prefers-color-scheme:dark){body{background:#0f172a;color:#f8fafc}.critical-header{background:rgba(15,23,42,0.95);border-bottom-color:#334155}.critical-card{background:#1e293b;border-color:#334155;color:#f8fafc}}

Binary file not shown.

996
static/css/dist/combined-optimized.css vendored Normal file

File diff suppressed because one or more lines are too long

1
static/css/dist/output-optimized.css vendored Normal file

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,74 @@
/**
* Optimized Glassmorphism Effects for Raspberry Pi
* Performance-optimized version with effects only on navbar
*/
/* Glassmorphism nur für Navbar */
.navbar::before,
.glass-nav {
background: rgba(255, 255, 255, 0.85);
border: 1px solid rgba(255, 255, 255, 0.2);
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
}
.dark .navbar::before,
.dark .glass-nav {
background: rgba(15, 23, 42, 0.85);
border: 1px solid rgba(255, 255, 255, 0.1);
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.2);
}
/* Alle anderen Glass-Effekte entfernt für Performance */
.glass-base,
.glass-card,
.glass-btn,
.glass-input,
.glass-dropdown,
.glass-modal,
.glass-sidebar,
.glass-header,
.glass-footer,
.glass-table,
.glass-badge,
.glass-alert,
.glass-tooltip,
.glass-progress,
.glass-tab {
/* Keine Effekte - nur einfache Hintergründe */
background: rgba(255, 255, 255, 0.95);
border: 1px solid rgba(0, 0, 0, 0.1);
}
.dark .glass-base,
.dark .glass-card,
.dark .glass-btn,
.dark .glass-input,
.dark .glass-dropdown,
.dark .glass-modal,
.dark .glass-sidebar,
.dark .glass-header,
.dark .glass-footer,
.dark .glass-table,
.dark .glass-badge,
.dark .glass-alert,
.dark .glass-tooltip,
.dark .glass-progress,
.dark .glass-tab {
background: rgba(15, 23, 42, 0.95);
border: 1px solid rgba(255, 255, 255, 0.1);
}
/* Utility Classes - Keine Effekte */
.glass-light { background: rgba(255, 255, 255, 0.9); }
.glass-dark { background: rgba(0, 0, 0, 0.9); }
.glass-blur-none { /* Kein Blur */ }
.glass-blur-sm { /* Kein Blur */ }
.glass-blur-md { /* Kein Blur */ }
.glass-blur-lg { /* Kein Blur */ }
.glass-blur-xl { /* Kein Blur */ }
/* Border Utilities */
.glass-border-light { border-color: rgba(255, 255, 255, 0.2); }
.glass-border-dark { border-color: rgba(0, 0, 0, 0.2); }
/* Keine Hover-Effekte für Performance */

Binary file not shown.

View File

@@ -0,0 +1 @@
.navbar::before,.glass-nav{background:rgba(255,255,255,0.85);border:1px solid rgba(255,255,255,0.2);box-shadow:0 4px 6px rgba(0,0,0,0.1);}.dark .navbar::before,.dark .glass-nav{background:rgba(15,23,42,0.85);border:1px solid rgba(255,255,255,0.1);box-shadow:0 4px 6px rgba(0,0,0,0.2);}.glass-base,.glass-card,.glass-btn,.glass-input,.glass-dropdown,.glass-modal,.glass-sidebar,.glass-header,.glass-footer,.glass-table,.glass-badge,.glass-alert,.glass-tooltip,.glass-progress,.glass-tab{background:rgba(255,255,255,0.95);border:1px solid rgba(0,0,0,0.1);}.dark .glass-base,.dark .glass-card,.dark .glass-btn,.dark .glass-input,.dark .glass-dropdown,.dark .glass-modal,.dark .glass-sidebar,.dark .glass-header,.dark .glass-footer,.dark .glass-table,.dark .glass-badge,.dark .glass-alert,.dark .glass-tooltip,.dark .glass-progress,.dark .glass-tab{background:rgba(15,23,42,0.95);border:1px solid rgba(255,255,255,0.1);}.glass-light{background:rgba(255,255,255,0.9);}.glass-dark{background:rgba(0,0,0,0.9);}.glass-blur-none{}.glass-blur-sm{}.glass-blur-md{}.glass-blur-lg{}.glass-blur-xl{}.glass-border-light{border-color:rgba(255,255,255,0.2);}.glass-border-dark{border-color:rgba(0,0,0,0.2);}

Binary file not shown.

View File

@@ -0,0 +1,211 @@
/* Vereinfachte Glassmorphism-Effekte für MYP Application - Raspberry Pi Optimiert */
/* ===== BASIS GLASS EFFEKTE - STARK VEREINFACHT ===== */
.glass-base {
background: rgba(255, 255, 255, 0.95);
border: 1px solid rgba(255, 255, 255, 0.3);
/* Entfernt: backdrop-filter, box-shadow, transition */
}
.glass-strong {
background: rgba(255, 255, 255, 0.98);
border: 1px solid rgba(255, 255, 255, 0.4);
/* Entfernt: backdrop-filter, box-shadow */
}
.glass-subtle {
background: rgba(255, 255, 255, 0.9);
border: 1px solid rgba(255, 255, 255, 0.2);
/* Entfernt: backdrop-filter, box-shadow */
}
/* ===== DARK MODE GLASS - VEREINFACHT ===== */
.dark .glass-base {
background: rgba(15, 23, 42, 0.95);
border: 1px solid rgba(255, 255, 255, 0.1);
/* Entfernt: box-shadow */
}
.dark .glass-strong {
background: rgba(30, 41, 59, 0.98);
border: 1px solid rgba(255, 255, 255, 0.15);
/* Entfernt: box-shadow */
}
.dark .glass-subtle {
background: rgba(15, 23, 42, 0.9);
border: 1px solid rgba(255, 255, 255, 0.08);
/* Entfernt: box-shadow */
}
/* ===== GLASS KARTEN - STARK VEREINFACHT ===== */
.glass-card {
background: rgba(255, 255, 255, 0.98);
border: 1px solid rgba(229, 231, 235, 0.5);
border-radius: 12px;
padding: 1.5rem;
/* Entfernt: backdrop-filter, box-shadow, transition, hover-transform */
}
.dark .glass-card {
background: rgba(30, 41, 59, 0.95);
border: 1px solid rgba(100, 116, 139, 0.3);
/* Entfernt: box-shadow */
}
/* ===== GLASS NAVIGATION - VEREINFACHT ===== */
.glass-nav {
background: rgba(255, 255, 255, 0.98);
border: 1px solid rgba(226, 232, 240, 0.4);
border-bottom: 1px solid rgba(203, 213, 225, 0.5);
/* Entfernt: backdrop-filter, box-shadow */
}
.dark .glass-nav {
background: rgba(15, 23, 42, 0.95);
border: 1px solid rgba(51, 65, 85, 0.5);
/* Entfernt: box-shadow */
}
/* ===== GLASS BUTTONS - STARK VEREINFACHT ===== */
.glass-btn {
background: rgba(255, 255, 255, 0.95);
border: 1px solid rgba(226, 232, 240, 0.5);
border-radius: 8px;
padding: 0.75rem 1.5rem;
color: #0f172a;
font-weight: 600;
/* Entfernt: backdrop-filter, box-shadow, transition, hover-transform */
}
.glass-btn:hover {
background: rgba(255, 255, 255, 0.99);
/* Nur Background-Color Change - keine Transform */
}
.glass-btn-primary {
background: rgba(0, 115, 206, 0.95);
color: white;
/* Entfernt: box-shadow */
}
.glass-btn-primary:hover {
background: rgba(0, 115, 206, 0.99);
/* Nur Background-Color Change */
}
.dark .glass-btn {
background: rgba(30, 41, 59, 0.95);
color: #e2e8f0;
border: 1px solid rgba(100, 116, 139, 0.5);
/* Entfernt: box-shadow */
}
.dark .glass-btn:hover {
background: rgba(30, 41, 59, 0.99);
/* Nur Background-Color Change */
}
/* ===== GLASS MODALS - VEREINFACHT ===== */
.glass-modal {
background: rgba(255, 255, 255, 0.99);
border: 1px solid rgba(226, 232, 240, 0.6);
border-radius: 16px;
/* Entfernt: backdrop-filter, box-shadow */
}
.dark .glass-modal {
background: rgba(15, 23, 42, 0.99);
border: 1px solid rgba(51, 65, 85, 0.6);
/* Entfernt: box-shadow */
}
/* ===== GLASS FORM ELEMENTE - VEREINFACHT ===== */
.glass-input {
background: rgba(255, 255, 255, 0.98);
border: 1px solid rgba(226, 232, 240, 0.5);
border-radius: 6px;
padding: 0.75rem 1rem;
color: #0f172a;
/* Entfernt: backdrop-filter, box-shadow, transition */
}
.glass-input:focus {
outline: none;
border-color: rgba(0, 115, 206, 0.5);
/* Nur Border-Color Change */
}
.dark .glass-input {
background: rgba(30, 41, 59, 0.95);
border: 1px solid rgba(100, 116, 139, 0.5);
color: #e2e8f0;
/* Entfernt: box-shadow */
}
.dark .glass-input:focus {
border-color: rgba(59, 130, 246, 0.5);
/* Nur Border-Color Change */
}
/* ===== GLASS DROPDOWN - VEREINFACHT ===== */
.glass-dropdown {
background: rgba(255, 255, 255, 0.98);
border: 1px solid rgba(255, 255, 255, 0.3);
border-radius: 8px;
/* Entfernt: backdrop-filter, box-shadow */
}
.dark .glass-dropdown {
background: rgba(15, 23, 42, 0.98);
border: 1px solid rgba(255, 255, 255, 0.1);
/* Entfernt: box-shadow */
}
/* ===== UTILITY CLASSES - STARK VEREINFACHT ===== */
.glass-overlay {
background: rgba(255, 255, 255, 0.3);
/* Entfernt: backdrop-filter */
}
.dark .glass-overlay {
background: rgba(0, 0, 0, 0.4);
/* Entfernt: backdrop-filter */
}
/* ===== RESPONSIVE ANPASSUNGEN - VEREINFACHT ===== */
@media (max-width: 768px) {
.glass-card {
padding: 1rem;
border-radius: 8px;
}
.glass-modal {
border-radius: 12px;
}
/* Entfernt: backdrop-filter Reduzierung */
}
/* ===== REDUZIERTE BEWEGUNG - ERWEITERT ===== */
@media (prefers-reduced-motion: reduce) {
.glass-card,
.glass-btn,
.glass-input {
transition: none !important;
transform: none !important;
}
}
/* ===== HOHER KONTRAST MODUS - VEREINFACHT ===== */
@media (prefers-contrast: high) {
.glass-base,
.glass-strong,
.glass-card {
border-width: 2px;
/* Entfernt: backdrop-filter */
}
}
/* ===== PERFORMANCE OPTIMIERUNGEN ENTFERNT ===== */
/* Entfernt: will-change Properties für bessere Performance auf schwacher Hardware */

Binary file not shown.

1
static/css/glassmorphism.min.css vendored Normal file
View File

@@ -0,0 +1 @@
.glass-base{background:rgba(255,255,255,0.85);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border:1px solid rgba(255,255,255,0.3);box-shadow:0 8px 20px rgba(0,0,0,0.1);transition:all .2s ease}.glass-strong{background:rgba(255,255,255,0.9);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border:1px solid rgba(255,255,255,0.4);box-shadow:0 12px 24px rgba(0,0,0,0.12)}.glass-subtle{background:rgba(255,255,255,0.8);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);border:1px solid rgba(255,255,255,0.2);box-shadow:0 4px 12px rgba(0,0,0,0.08)}.dark .glass-base{background:rgba(15,23,42,0.8);border:1px solid rgba(255,255,255,0.1);box-shadow:0 8px 20px rgba(0,0,0,0.3)}.dark .glass-strong{background:rgba(30,41,59,0.85);border:1px solid rgba(255,255,255,0.15);box-shadow:0 12px 24px rgba(0,0,0,0.4)}.dark .glass-subtle{background:rgba(15,23,42,0.7);border:1px solid rgba(255,255,255,0.08);box-shadow:0 4px 12px rgba(0,0,0,0.2)}.glass-card{background:rgba(255,255,255,0.9);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border:1px solid rgba(229,231,235,0.5);border-radius:12px;box-shadow:0 8px 16px rgba(0,0,0,0.08);padding:1.5rem;transition:transform .2s ease,box-shadow .2s ease}.glass-card:hover{transform:translateY(-1px);box-shadow:0 12px 20px rgba(0,0,0,0.12)}.dark .glass-card{background:rgba(30,41,59,0.85);border:1px solid rgba(100,116,139,0.3);box-shadow:0 8px 16px rgba(0,0,0,0.25)}.dark .glass-card:hover{box-shadow:0 12px 20px rgba(0,0,0,0.35)}.glass-nav{background:rgba(255,255,255,0.9);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border:1px solid rgba(226,232,240,0.4);border-bottom:1px solid rgba(203,213,225,0.5);box-shadow:0 4px 12px rgba(0,0,0,0.06)}.dark .glass-nav{background:rgba(15,23,42,0.85);border:1px solid rgba(51,65,85,0.5);box-shadow:0 4px 12px rgba(0,0,0,0.2)}.glass-btn{background:rgba(255,255,255,0.8);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);border:1px solid rgba(226,232,240,0.5);border-radius:8px;padding:.75rem 1.5rem;color:#0f172a;font-weight:600;box-shadow:0 2px 8px rgba(0,0,0,0.06);transition:transform .2s ease,background .2s ease}.glass-btn:hover{transform:translateY(-1px);background:rgba(255,255,255,0.9);box-shadow:0 4px 12px rgba(0,0,0,0.1)}.glass-btn-primary{background:rgba(0,115,206,0.9);color:white;box-shadow:0 2px 8px rgba(0,115,206,0.2)}.glass-btn-primary:hover{background:rgba(0,115,206,0.95);box-shadow:0 4px 12px rgba(0,115,206,0.3)}.dark .glass-btn{background:rgba(30,41,59,0.8);color:#e2e8f0;border:1px solid rgba(100,116,139,0.5);box-shadow:0 2px 8px rgba(0,0,0,0.15)}.dark .glass-btn:hover{background:rgba(30,41,59,0.9);box-shadow:0 4px 12px rgba(0,0,0,0.25)}.glass-modal{background:rgba(255,255,255,0.95);backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);border:1px solid rgba(226,232,240,0.6);border-radius:16px;box-shadow:0 20px 40px rgba(0,0,0,0.12)}.dark .glass-modal{background:rgba(15,23,42,0.95);border:1px solid rgba(51,65,85,0.6);box-shadow:0 20px 40px rgba(0,0,0,0.4)}.glass-input{background:rgba(255,255,255,0.8);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);border:1px solid rgba(226,232,240,0.5);border-radius:6px;padding:.75rem 1rem;color:#0f172a;box-shadow:0 2px 4px rgba(0,0,0,0.04);transition:border-color .2s ease,box-shadow .2s ease}.glass-input:focus{outline:0;border-color:rgba(0,115,206,0.5);box-shadow:0 2px 8px rgba(0,115,206,0.1)}.dark .glass-input{background:rgba(30,41,59,0.8);border:1px solid rgba(100,116,139,0.5);color:#e2e8f0;box-shadow:0 2px 4px rgba(0,0,0,0.15)}.dark .glass-input:focus{border-color:rgba(59,130,246,0.5);box-shadow:0 2px 8px rgba(59,130,246,0.15)}.glass-dropdown{background:rgba(255,255,255,0.9);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border:1px solid rgba(255,255,255,0.3);border-radius:8px;box-shadow:0 8px 20px rgba(0,0,0,0.15)}.dark .glass-dropdown{background:rgba(15,23,42,0.9);border:1px solid rgba(255,255,255,0.1);box-shadow:0 8px 20px rgba(0,0,0,0.3)}.glass-overlay{background:rgba(255,255,255,0.1);backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px)}.dark .glass-overlay{background:rgba(0,0,0,0.2)}@media(max-width:768px){.glass-card{padding:1rem;border-radius:8px}.glass-modal{border-radius:12px}.glass-base,.glass-strong,.glass-subtle{backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}}@media(prefers-reduced-motion:reduce){.glass-card,.glass-btn,.glass-input{transition:none !important}}@media(prefers-contrast:high){.glass-base,.glass-strong,.glass-card{border-width:2px;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px)}}.glass-base,.glass-strong,.glass-subtle,.glass-card,.glass-btn,.glass-modal{will-change:transform}

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because one or more lines are too long

Binary file not shown.

View File

@@ -0,0 +1,606 @@
@tailwind base;
@tailwind components;
@tailwind utilities;
/* Custom Styles für Light und Dark Mode - Raspberry Pi Optimiert */
@layer base {
:root {
/* Light Mode Farben - Mercedes-Benz Professional - VERBESSERT für optimale Lesbarkeit */
--color-bg-primary: #ffffff;
--color-bg-secondary: #fafbfc;
--color-bg-tertiary: #f3f5f7;
--color-bg-accent: #fbfcfd;
--color-text-primary: #111827;
--color-text-secondary: #374151;
--color-text-muted: #6b7280;
--color-text-accent: #0073ce;
--color-border-primary: #e5e7eb;
--color-border-secondary: #d1d5db;
--color-accent: #0073ce;
--color-accent-hover: #005a9f;
--color-accent-light: #eff6ff;
--color-accent-text: #ffffff;
--color-shadow: rgba(0, 0, 0, 0.06);
--color-shadow-strong: rgba(0, 0, 0, 0.1);
--color-shadow-accent: rgba(0, 115, 206, 0.12);
--card-radius: 1rem;
/* Light Mode Gradients - VEREINFACHT für Performance */
--gradient-primary: #fafbfc;
--gradient-card: #ffffff;
--gradient-hero: #f3f5f7;
--gradient-accent: linear-gradient(135deg, #0073ce 0%, #005a9f 100%);
--gradient-surface: #fbfcfd;
/* Optimierte Light Mode Glassmorphism-Variablen */
--glass-bg: rgba(255, 255, 255, 0.92);
--glass-border: rgba(255, 255, 255, 0.3);
--glass-shadow: 0 4px 16px rgba(0, 0, 0, 0.04);
--glass-blur: blur(10px);
}
.dark {
/* Dark Mode Farben - Noch dunkler und eleganter - UNVERÄNDERT */
--color-bg-primary: #000000;
--color-bg-secondary: #0a0a0a;
--color-bg-tertiary: #1a1a1a;
--color-text-primary: #ffffff;
--color-text-secondary: #e2e8f0;
--color-text-muted: #94a3b8;
--color-border-primary: #1a1a1a;
--color-border-secondary: #2a2a2a;
--color-accent: #ffffff;
--color-accent-hover: #f0f0f0;
--color-accent-light: #1e3a8a;
--color-accent-text: #000000;
--color-shadow: rgba(0, 0, 0, 0.8);
--color-shadow-strong: rgba(0, 0, 0, 0.9);
--mb-black: #000000;
}
body {
@apply bg-white dark:bg-black text-slate-900 dark:text-white transition-colors duration-300;
position: relative;
min-height: 100vh;
background: var(--gradient-primary);
font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
font-feature-settings: 'cv02', 'cv03', 'cv04', 'cv11';
line-height: 1.65;
font-size: 15px;
}
.dark body {
background: #000000;
}
/* Vereinfachte Body Background - PERFORMANCE OPTIMIERT */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: radial-gradient(circle at 50% 50%, rgba(0, 115, 206, 0.01) 0%, transparent 50%);
pointer-events: none;
z-index: -1;
}
.dark body::before {
background: radial-gradient(circle at 50% 50%, rgba(59, 130, 246, 0.02) 0%, transparent 50%);
}
/* Navbar Styles - Premium Glassmorphism - UNVERÄNDERT WIE GEWÜNSCHT */
nav {
@apply backdrop-blur-xl border-b transition-all duration-300;
background: linear-gradient(135deg,
rgba(255, 255, 255, 0.95) 0%,
rgba(250, 251, 252, 0.92) 30%,
rgba(248, 250, 252, 0.9) 70%,
rgba(255, 255, 255, 0.95) 100%);
border-bottom: 1px solid rgba(229, 231, 235, 0.7);
backdrop-filter: blur(28px) saturate(200%) brightness(110%);
-webkit-backdrop-filter: blur(28px) saturate(200%) brightness(110%);
box-shadow:
0 4px 20px rgba(0, 0, 0, 0.04),
0 2px 8px rgba(0, 115, 206, 0.02),
inset 0 1px 0 rgba(255, 255, 255, 0.9);
}
.dark nav {
background: rgba(0, 0, 0, 0.85);
border-bottom-color: rgba(255, 255, 255, 0.1);
box-shadow:
0 8px 32px rgba(0, 0, 0, 0.3),
inset 0 1px 0 rgba(255, 255, 255, 0.05);
}
/* Vereinfachte Card Styles - PERFORMANCE OPTIMIERT */
.card-enhanced {
background: var(--gradient-card);
border: 1px solid var(--color-border-primary);
border-radius: var(--card-radius);
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.03);
transition: transform 0.2s ease, box-shadow 0.2s ease;
position: relative;
overflow: hidden;
}
.card-enhanced:hover {
transform: translateY(-2px);
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.06);
}
.dark .card-enhanced {
background: rgba(10, 10, 10, 0.8);
border-color: var(--color-border-primary);
box-shadow: 0 4px 20px var(--color-shadow);
}
/* Vereinfachte Button Styles - PERFORMANCE OPTIMIERT */
.btn-enhanced {
background: var(--gradient-accent);
color: var(--color-accent-text);
border: none;
border-radius: 0.5rem;
padding: 0.75rem 1.75rem;
font-weight: 600;
font-size: 0.875rem;
text-transform: uppercase;
letter-spacing: 0.05em;
box-shadow: 0 2px 8px rgba(0, 115, 206, 0.2);
transition: transform 0.2s ease, box-shadow 0.2s ease;
position: relative;
overflow: hidden;
}
.btn-enhanced:hover {
transform: translateY(-1px);
box-shadow: 0 4px 12px rgba(0, 115, 206, 0.3);
}
.btn-enhanced:active {
transform: translateY(0);
}
.btn-secondary {
background: var(--gradient-surface);
color: var(--color-text-primary);
border: 1px solid var(--color-border-primary);
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.03);
}
.btn-secondary:hover {
background: var(--color-bg-secondary);
border-color: var(--color-accent);
color: var(--color-accent);
box-shadow: 0 2px 8px rgba(0, 115, 206, 0.08);
}
/* Vereinfachte Form Elements - PERFORMANCE OPTIMIERT */
.input-enhanced {
background: rgba(255, 255, 255, 0.95);
border: 1px solid var(--color-border-primary);
border-radius: 0.5rem;
padding: 0.75rem 1rem;
color: var(--color-text-primary);
font-size: 0.9rem;
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.02);
transition: border-color 0.2s ease, box-shadow 0.2s ease;
}
.input-enhanced:focus {
outline: none;
border-color: var(--color-accent);
box-shadow: 0 0 0 3px rgba(0, 115, 206, 0.05);
background: rgba(255, 255, 255, 0.98);
}
.input-enhanced::placeholder {
color: var(--color-text-muted);
opacity: 0.8;
}
.dark .input-enhanced {
background: rgba(10, 10, 10, 0.8);
border-color: var(--color-border-primary);
color: var(--color-text-primary);
box-shadow: 0 2px 8px var(--color-shadow);
}
.dark .input-enhanced:focus {
border-color: #60a5fa;
box-shadow: 0 0 0 3px rgba(96, 165, 250, 0.1);
}
/* Vereinfachte Alert Styles */
.alert-enhanced {
border-radius: 1rem;
padding: 1.25rem;
border: 1px solid transparent;
position: relative;
overflow: hidden;
}
.alert-enhanced::before {
content: '';
position: absolute;
top: 0;
left: 0;
bottom: 0;
width: 4px;
}
.alert-info-enhanced {
background: rgba(239, 246, 255, 0.95);
border-color: rgba(59, 130, 246, 0.2);
color: #1e40af;
}
.alert-info-enhanced::before {
background: var(--gradient-accent);
}
.alert-success-enhanced {
background: rgba(236, 253, 245, 0.95);
border-color: rgba(16, 185, 129, 0.2);
color: #065f46;
}
.alert-success-enhanced::before {
background: linear-gradient(180deg, #10b981 0%, #059669 100%);
}
.alert-warning-enhanced {
background: rgba(255, 251, 235, 0.95);
border-color: rgba(251, 191, 36, 0.2);
color: #92400e;
}
.alert-warning-enhanced::before {
background: linear-gradient(180deg, #fbbf24 0%, #f59e0b 100%);
}
.alert-error-enhanced {
background: rgba(254, 242, 242, 0.95);
border-color: rgba(239, 68, 68, 0.2);
color: #991b1b;
}
.alert-error-enhanced::before {
background: linear-gradient(180deg, #ef4444 0%, #dc2626 100%);
}
/* Vereinfachte Flash Messages */
.flash-message-light {
background: rgba(255, 255, 255, 0.95);
backdrop-filter: blur(16px);
-webkit-backdrop-filter: blur(16px);
border: 1px solid rgba(226, 232, 240, 0.6);
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.1);
color: var(--color-text-primary);
}
.flash-message-light.success {
border-left: 4px solid #10b981;
background: rgba(236, 253, 245, 0.95);
}
.flash-message-light.error {
border-left: 4px solid #ef4444;
background: rgba(254, 242, 242, 0.95);
}
.flash-message-light.warning {
border-left: 4px solid #fbbf24;
background: rgba(255, 251, 235, 0.95);
}
.flash-message-light.info {
border-left: 4px solid #3b82f6;
background: rgba(239, 246, 255, 0.95);
}
/* Vereinfachte 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 2px 8px var(--color-shadow);
}
.table-enhanced th {
background: var(--color-bg-secondary);
color: var(--color-text-primary);
font-weight: 600;
padding: 1rem 1.5rem;
border-bottom: 1px solid var(--color-border-primary);
}
.table-enhanced td {
padding: 1rem 1.5rem;
border-bottom: 1px solid var(--color-border-primary);
color: var(--color-text-secondary);
transition: background-color 0.2s ease;
}
.table-enhanced tbody tr:hover {
background: var(--color-bg-secondary);
}
.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);
}
/* Vereinfachte Modal Styles */
.modal-enhanced {
background: rgba(255, 255, 255, 0.98);
backdrop-filter: blur(16px);
-webkit-backdrop-filter: blur(16px);
border: 1px solid rgba(226, 232, 240, 0.7);
border-radius: 1.5rem;
box-shadow: 0 25px 50px rgba(0, 0, 0, 0.15);
position: relative;
overflow: hidden;
}
.dark .modal-enhanced {
background: rgba(0, 0, 0, 0.95);
border-color: rgba(42, 42, 42, 0.7);
box-shadow: 0 25px 50px rgba(0, 0, 0, 0.5);
}
/* Vereinfachte 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: transform 0.2s ease;
}
.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 - Vereinfacht aber funktional */
.dark-mode-toggle-new {
position: relative;
display: flex;
cursor: pointer;
align-items: center;
justify-content: center;
border-radius: 9999px;
padding: 0.625rem;
transition: transform 0.2s ease;
background: rgba(248, 250, 252, 0.9);
border: 1px solid rgba(226, 232, 240, 0.7);
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
color: var(--color-text-secondary);
z-index: 100;
}
.dark-mode-toggle-new:hover {
transform: translateY(-2px) scale(1.05);
background: rgba(248, 250, 252, 0.95);
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
}
.dark-mode-toggle-new:active {
transform: translateY(-1px) scale(0.98);
}
.dark .dark-mode-toggle-new {
background: rgba(10, 10, 10, 0.8);
border: 1px solid rgba(42, 42, 42, 0.6);
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
color: var(--color-text-secondary);
}
.dark .dark-mode-toggle-new:hover {
background: rgba(10, 10, 10, 0.9);
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.4);
}
/* 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: opacity 0.2s ease, transform 0.2s ease;
}
.dark .sun-icon { display: none; }
.dark .moon-icon { display: block; }
.sun-icon { display: block; }
.moon-icon { display: none; }
/* User Menu Button - Vereinfacht */
.user-menu-button-new {
display: flex;
align-items: center;
gap: 0.5rem;
border-radius: 0.75rem;
padding: 0.5rem;
transition: transform 0.2s ease;
background: rgba(248, 250, 252, 0.8);
border: 1px solid rgba(226, 232, 240, 0.6);
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
}
.user-menu-button-new:hover {
transform: translateY(-1px);
background: rgba(248, 250, 252, 0.9);
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
}
.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);
}
.dark .user-menu-button-new:hover {
background: rgba(10, 10, 10, 0.8);
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
}
/* Vereinfachte Hover Effects */
.hover-lift-enhanced {
transition: transform 0.2s ease, box-shadow 0.2s ease;
}
.hover-lift-enhanced:hover {
transform: translateY(-3px);
box-shadow: 0 8px 20px var(--color-shadow-strong);
}
.dark .hover-lift-enhanced:hover {
box-shadow: 0 8px 20px var(--color-shadow);
}
/* Smooth Scrollbar */
::-webkit-scrollbar {
width: 8px;
height: 8px;
}
::-webkit-scrollbar-track {
background: var(--color-bg-secondary);
border-radius: 4px;
}
::-webkit-scrollbar-thumb {
background: var(--color-border-secondary);
border-radius: 4px;
transition: background 0.2s ease;
}
::-webkit-scrollbar-thumb:hover {
background: var(--color-accent);
}
.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;
}
/* Vereinfachte 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);
}
.dark .focus-enhanced:focus {
outline-color: #60a5fa;
box-shadow: 0 0 0 4px rgba(96, 165, 250, 0.15);
}
/* 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;
}
}
}

Binary file not shown.

File diff suppressed because one or more lines are too long

Binary file not shown.

View File

@@ -0,0 +1,661 @@
@tailwind base;
@tailwind components;
@tailwind utilities;
/**
* MYP Platform - Raspberry Pi Optimierte Styles
* Alle performance-kritischen Glassmorphism-Effekte, backdrop-filter und komplexe Animationen entfernt
* Design bleibt unverändert, aber Performance ist deutlich besser
*/
@layer base {
:root {
/* Light Mode Farben - Mercedes-Benz Professional - UNVERÄNDERT */
--color-bg-primary: #ffffff;
--color-bg-secondary: #fafbfc;
--color-bg-tertiary: #f3f5f7;
--color-bg-accent: #fbfcfd;
--color-text-primary: #111827;
--color-text-secondary: #374151;
--color-text-muted: #6b7280;
--color-text-accent: #0073ce;
--color-border-primary: #e5e7eb;
--color-border-secondary: #d1d5db;
--color-accent: #0073ce;
--color-accent-hover: #005a9f;
--color-accent-light: #eff6ff;
--color-accent-text: #ffffff;
--color-shadow: rgba(0, 0, 0, 0.04);
--color-shadow-strong: rgba(0, 0, 0, 0.08);
--color-shadow-accent: rgba(0, 115, 206, 0.08);
--card-radius: 1rem;
/* Vereinfachte Gradients - Raspberry Pi optimiert */
--gradient-primary: linear-gradient(135deg, #ffffff 0%, #fafbfc 100%);
--gradient-card: var(--color-bg-primary);
--gradient-hero: var(--color-bg-secondary);
--gradient-accent: var(--color-accent);
--gradient-surface: var(--color-bg-primary);
}
.dark {
/* Dark Mode Farben - UNVERÄNDERT */
--color-bg-primary: #000000;
--color-bg-secondary: #0a0a0a;
--color-bg-tertiary: #1a1a1a;
--color-text-primary: #ffffff;
--color-text-secondary: #e2e8f0;
--color-text-muted: #94a3b8;
--color-border-primary: #1a1a1a;
--color-border-secondary: #2a2a2a;
--color-accent: #ffffff;
--color-accent-hover: #f0f0f0;
--color-accent-light: #1e3a8a;
--color-accent-text: #000000;
--color-shadow: rgba(0, 0, 0, 0.6);
--color-shadow-strong: rgba(0, 0, 0, 0.8);
--mb-black: #000000;
}
body {
@apply bg-white dark:bg-black text-slate-900 dark:text-white;
background: var(--gradient-primary);
font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
line-height: 1.65;
font-size: 15px;
transition: background-color 0.2s ease, color 0.2s ease;
/* Entfernt: transition-colors duration-300 für bessere Performance */
}
.dark body {
background: linear-gradient(135deg, #000000 0%, #0a0a0a 100%);
}
/* Body Background - STARK VEREINFACHT */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: radial-gradient(circle at 50% 50%, rgba(0, 115, 206, 0.01) 0%, transparent 70%);
pointer-events: none;
z-index: -1;
}
.dark body::before {
background: radial-gradient(circle at 50% 50%, rgba(59, 130, 246, 0.02) 0%, transparent 70%);
}
/* Navbar - RASPBERRY PI OPTIMIERT */
nav {
background: rgba(255, 255, 255, 0.98);
border-bottom: 1px solid var(--color-border-primary);
transition: background-color 0.2s ease;
/* ENTFERNT: backdrop-filter, komplexe box-shadows, cubic-bezier */
}
.dark nav {
background: rgba(0, 0, 0, 0.95);
border-bottom-color: var(--color-border-primary);
}
/* Card Styles - RASPBERRY PI OPTIMIERT */
.card-enhanced {
background: var(--color-bg-primary);
border: 1px solid var(--color-border-primary);
border-radius: var(--card-radius);
transition: background-color 0.2s ease, border-color 0.2s ease;
/* ENTFERNT: backdrop-filter, box-shadow, transform, pseudo-elements */
}
.card-enhanced:hover {
background: var(--color-bg-secondary);
border-color: var(--color-border-secondary);
/* ENTFERNT: transform, box-shadow für bessere Performance */
}
.dark .card-enhanced {
background: var(--color-bg-secondary);
border-color: var(--color-border-primary);
}
/* Button Styles - RASPBERRY PI OPTIMIERT */
.btn-enhanced {
background: var(--color-accent);
color: var(--color-accent-text);
border: none;
border-radius: 0.5rem;
padding: 0.75rem 1.75rem;
font-weight: 600;
font-size: 0.875rem;
text-transform: uppercase;
letter-spacing: 0.05em;
transition: background-color 0.2s ease;
/* ENTFERNT: gradient, box-shadow, pseudo-elements, transform */
}
.btn-enhanced:hover {
background: var(--color-accent-hover);
/* ENTFERNT: transform, box-shadow für bessere Performance */
}
.btn-enhanced:active {
background: var(--color-accent-hover);
/* ENTFERNT: transform für bessere Performance */
}
.btn-secondary {
background: var(--color-bg-primary);
color: var(--color-text-primary);
border: 1px solid var(--color-border-primary);
}
.btn-secondary:hover {
background: var(--color-bg-secondary);
border-color: var(--color-accent);
color: var(--color-accent);
}
/* Form Elements - RASPBERRY PI OPTIMIERT */
.input-enhanced {
background: rgba(255, 255, 255, 0.98);
border: 1px solid var(--color-border-primary);
border-radius: 0.5rem;
padding: 0.75rem 1rem;
color: var(--color-text-primary);
font-size: 0.9rem;
transition: border-color 0.2s ease, background-color 0.2s ease;
/* ENTFERNT: backdrop-filter, box-shadow für bessere Performance */
}
.input-enhanced:focus {
outline: none;
border-color: var(--color-accent);
background: rgba(255, 255, 255, 1);
/* ENTFERNT: box-shadow für bessere Performance */
}
.input-enhanced::placeholder {
color: var(--color-text-muted);
opacity: 0.8;
}
.dark .input-enhanced {
background: rgba(26, 26, 26, 0.9);
border-color: var(--color-border-primary);
color: var(--color-text-primary);
}
.dark .input-enhanced:focus {
border-color: #60a5fa;
background: rgba(26, 26, 26, 1);
}
/* Alert Styles - RASPBERRY PI OPTIMIERT */
.alert-enhanced {
border-radius: 1rem;
padding: 1.25rem;
border: 1px solid transparent;
position: relative;
/* ENTFERNT: backdrop-filter für bessere Performance */
}
.alert-enhanced::before {
content: '';
position: absolute;
top: 0;
left: 0;
bottom: 0;
width: 4px;
}
.alert-info-enhanced {
background: rgba(239, 246, 255, 0.95);
border-color: rgba(59, 130, 246, 0.2);
color: #1e40af;
}
.alert-info-enhanced::before {
background: var(--color-accent);
}
.alert-success-enhanced {
background: rgba(236, 253, 245, 0.95);
border-color: rgba(16, 185, 129, 0.2);
color: #065f46;
}
.alert-success-enhanced::before {
background: #10b981;
}
.alert-warning-enhanced {
background: rgba(255, 251, 235, 0.95);
border-color: rgba(251, 191, 36, 0.2);
color: #92400e;
}
.alert-warning-enhanced::before {
background: #fbbf24;
}
.alert-error-enhanced {
background: rgba(254, 242, 242, 0.95);
border-color: rgba(239, 68, 68, 0.2);
color: #991b1b;
}
.alert-error-enhanced::before {
background: #ef4444;
}
/* Flash Messages - RASPBERRY PI OPTIMIERT */
.flash-message-light {
background: rgba(255, 255, 255, 0.98);
border: 1px solid rgba(226, 232, 240, 0.6);
color: var(--color-text-primary);
/* ENTFERNT: backdrop-filter, komplexe box-shadows */
}
.flash-message-light.success {
border-left: 4px solid #10b981;
background: rgba(236, 253, 245, 0.95);
}
.flash-message-light.error {
border-left: 4px solid #ef4444;
background: rgba(254, 242, 242, 0.95);
}
.flash-message-light.warning {
border-left: 4px solid #fbbf24;
background: rgba(255, 251, 235, 0.95);
}
.flash-message-light.info {
border-left: 4px solid #3b82f6;
background: rgba(239, 246, 255, 0.95);
}
/* Table Styles - RASPBERRY PI OPTIMIERT */
.table-enhanced {
background: var(--color-bg-primary);
border: 1px solid var(--color-border-primary);
border-radius: var(--card-radius);
overflow: hidden;
/* ENTFERNT: box-shadow für bessere Performance */
}
.table-enhanced th {
background: var(--color-bg-secondary);
color: var(--color-text-primary);
font-weight: 600;
padding: 1rem 1.5rem;
border-bottom: 1px solid var(--color-border-primary);
}
.table-enhanced td {
padding: 1rem 1.5rem;
border-bottom: 1px solid var(--color-border-primary);
color: var(--color-text-secondary);
transition: background-color 0.2s ease;
}
.table-enhanced tbody tr:hover {
background: var(--color-bg-secondary);
/* ENTFERNT: transform für bessere Performance */
}
.dark .table-enhanced {
background: var(--color-bg-secondary);
border-color: var(--color-border-primary);
}
.dark .table-enhanced th {
background: var(--color-bg-tertiary);
color: var(--color-text-primary);
}
.dark .table-enhanced tbody tr:hover {
background: var(--color-bg-tertiary);
}
/* Modal Styles - RASPBERRY PI OPTIMIERT */
.modal-enhanced {
background: rgba(255, 255, 255, 0.98);
border: 1px solid rgba(226, 232, 240, 0.7);
border-radius: 1.5rem;
position: relative;
/* ENTFERNT: backdrop-filter, komplexe box-shadows */
}
.dark .modal-enhanced {
background: rgba(10, 10, 10, 0.98);
border-color: rgba(42, 42, 42, 0.7);
}
/* Status Badges - RASPBERRY PI OPTIMIERT */
.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: background-color 0.2s ease;
}
.status-online-enhanced {
background: #ecfdf5;
color: #065f46;
border-color: rgba(16, 185, 129, 0.2);
}
.status-offline-enhanced {
background: #fef2f2;
color: #991b1b;
border-color: rgba(239, 68, 68, 0.2);
}
.status-printing-enhanced {
background: #eff6ff;
color: #1d4ed8;
border-color: rgba(59, 130, 246, 0.2);
}
/* Dark Mode Toggle - RASPBERRY PI OPTIMIERT */
.dark-mode-toggle-new {
background: rgba(255, 255, 255, 0.95);
border: 1px solid var(--color-border-primary);
border-radius: 0.75rem;
padding: 0.5rem;
transition: background-color 0.2s ease, border-color 0.2s ease;
/* ENTFERNT: box-shadow, transform für bessere Performance */
}
.dark-mode-toggle-new:hover {
background: rgba(255, 255, 255, 1);
border-color: var(--color-border-secondary);
/* ENTFERNT: transform für bessere Performance */
}
.dark .dark-mode-toggle-new {
background: rgba(26, 26, 26, 0.95);
border-color: var(--color-border-primary);
}
.dark .dark-mode-toggle-new:hover {
background: rgba(26, 26, 26, 1);
}
/* Icon Animations - STARK VEREINFACHT */
.dark-mode-toggle-new .sun-icon,
.dark-mode-toggle-new .moon-icon {
transition: opacity 0.2s ease;
/* ENTFERNT: komplexe transform animations */
}
.dark .sun-icon { display: none; }
.dark .moon-icon { display: block; }
.sun-icon { display: block; }
.moon-icon { display: none; }
/* User Menu Button - RASPBERRY PI OPTIMIERT */
.user-menu-button-new {
background: rgba(255, 255, 255, 0.95);
border: 1px solid var(--color-border-primary);
border-radius: 0.75rem;
padding: 0.5rem;
transition: background-color 0.2s ease;
/* ENTFERNT: box-shadow, transform für bessere Performance */
}
.user-menu-button-new:hover {
background: rgba(255, 255, 255, 1);
/* ENTFERNT: transform für bessere Performance */
}
.dark .user-menu-button-new {
background: rgba(26, 26, 26, 0.95);
border-color: var(--color-border-primary);
}
.dark .user-menu-button-new:hover {
background: rgba(26, 26, 26, 1);
}
/* Hover Effects - STARK VEREINFACHT */
.hover-lift-enhanced {
transition: background-color 0.2s ease;
/* ENTFERNT: cubic-bezier transition für bessere Performance */
}
.hover-lift-enhanced:hover {
background-color: var(--color-bg-secondary);
/* ENTFERNT: transform, box-shadow für bessere Performance */
}
.dark .hover-lift-enhanced:hover {
background-color: var(--color-bg-tertiary);
}
/* Scrollbar Styles - UNVERÄNDERT */
::-webkit-scrollbar {
width: 8px;
height: 8px;
}
::-webkit-scrollbar-track {
background: var(--color-bg-secondary);
border-radius: 4px;
}
::-webkit-scrollbar-thumb {
background: var(--color-border-secondary);
border-radius: 4px;
}
::-webkit-scrollbar-thumb:hover {
background: var(--color-text-muted);
}
.dark ::-webkit-scrollbar-track {
background: var(--color-bg-tertiary);
}
.dark ::-webkit-scrollbar-thumb {
background: var(--color-border-secondary);
}
.dark ::-webkit-scrollbar-thumb:hover {
background: var(--color-text-muted);
}
/* Loading Animation - VEREINFACHT */
.loading-enhanced {
background: var(--color-bg-secondary);
border-radius: 0.5rem;
overflow: hidden;
}
.loading-enhanced::after {
content: '';
position: absolute;
top: 0;
left: -100%;
width: 100%;
height: 100%;
background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent);
animation: loading-shimmer 1.5s infinite;
}
@keyframes loading-shimmer {
0% { left: -100%; }
100% { left: 100%; }
}
/* Focus Styles - VEREINFACHT */
.focus-enhanced:focus {
outline: 2px solid var(--color-accent);
outline-offset: 2px;
/* ENTFERNT: box-shadow für bessere Performance */
}
.dark .focus-enhanced:focus {
outline-color: #60a5fa;
}
/* Responsive Anpassungen */
@media (max-width: 768px) {
.card-enhanced {
border-radius: 0.75rem;
padding: 1rem;
}
.btn-enhanced {
padding: 0.625rem 1.25rem;
font-size: 0.8rem;
}
.modal-enhanced {
border-radius: 1rem;
margin: 1rem;
}
.dark-mode-toggle-new {
padding: 0.4rem;
}
}
/* Reduced Motion Support - ERWEITERT */
@media (prefers-reduced-motion: reduce) {
* {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
transform: none !important;
}
}
/* High Contrast Support */
@media (prefers-contrast: high) {
:root {
--color-border-primary: #000000;
--color-border-secondary: #000000;
--color-shadow: rgba(0, 0, 0, 0.2);
}
.dark {
--color-border-primary: #ffffff;
--color-border-secondary: #ffffff;
}
}
/* Weitere optimierte Komponenten folgen... */
/* Notification Styles - RASPBERRY PI OPTIMIERT */
.notification {
background: rgba(255, 255, 255, 0.98);
border: 1px solid var(--color-border-primary);
border-radius: 0.75rem;
padding: 1rem;
/* ENTFERNT: backdrop-filter, komplexe box-shadows */
}
.dark .notification {
background: rgba(26, 26, 26, 0.95);
border-color: var(--color-border-primary);
}
.notification:hover {
background: rgba(255, 255, 255, 1);
/* ENTFERNT: transform, box-shadow für bessere Performance */
}
.dark .notification:hover {
background: rgba(26, 26, 26, 1);
}
/* Status Dot - VEREINFACHT */
.status-dot {
width: 0.75rem;
height: 0.75rem;
border-radius: 50%;
display: inline-block;
}
.status-dot.online {
background: #10b981;
}
.status-dot.offline {
background: #ef4444;
}
/* ENTFERNT: Alle pulse-Animationen für bessere Performance */
/* Weitere Komponenten werden nach gleichem Muster optimiert... */
}
/* Flash Messages - RASPBERRY PI OPTIMIERT */
.flash-message {
background: rgba(255, 255, 255, 0.98);
border: 1px solid var(--color-border-primary);
border-radius: 0.75rem;
padding: 1rem 1.25rem;
margin-bottom: 1rem;
/* ENTFERNT: backdrop-filter, box-shadow */
}
.dark .flash-message {
background: rgba(26, 26, 26, 0.95);
border-color: var(--color-border-primary);
}
.flash-message:hover {
background: rgba(255, 255, 255, 1);
/* ENTFERNT: transform für bessere Performance */
}
.dark .flash-message:hover {
background: rgba(26, 26, 26, 1);
}
.flash-message.info {
border-left: 4px solid #3b82f6;
background: rgba(239, 246, 255, 0.95);
}
.flash-message.success {
border-left: 4px solid #10b981;
background: rgba(236, 253, 245, 0.95);
}
.flash-message.warning {
border-left: 4px solid #fbbf24;
background: rgba(255, 251, 235, 0.95);
}
.flash-message.error {
border-left: 4px solid #ef4444;
background: rgba(254, 242, 242, 0.95);
}
/* Einfache Animationen - NUR OPACITY */
@keyframes flash-fade-in {
from { opacity: 0; }
to { opacity: 1; }
}
/* Alle weiteren Komponenten folgen dem gleichen Optimierungsmuster:
- Entfernung von backdrop-filter
- Entfernung von komplexen box-shadows
- Entfernung von transform-Animationen
- Vereinfachung von transitions zu opacity/background-color only
- Beibehaltung des visuellen Designs
*/

Binary file not shown.

File diff suppressed because one or more lines are too long

Binary file not shown.

3385
static/css/input.css Normal file

File diff suppressed because it is too large Load Diff

BIN
static/css/input.css.gz Normal file

Binary file not shown.

1
static/css/input.min.css vendored Normal file

File diff suppressed because one or more lines are too long

BIN
static/css/input.min.css.gz Normal file

Binary file not shown.

View File

@@ -0,0 +1,102 @@
/**
* MYP Platform - Minimale Animationen für Raspberry Pi
* Nur essentielle Fade-In Animationen für optimale Performance
*/
/* ===== NUR FADE-IN ANIMATION - MINIMAL ===== */
@keyframes fade-in {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
.animate-fade-in {
animation: fade-in 0.2s ease-out;
}
/* ===== ALLE TRANSFORM-ANIMATIONEN ENTFERNT ===== */
/* Entfernt: slide-up, scale-in und alle transform-basierten Animationen */
/* ===== EINFACHER HOVER-EFFEKT - NUR OPACITY ===== */
.animate-hover-lift {
transition: opacity 0.2s ease;
}
.animate-hover-lift:hover {
opacity: 0.8;
/* Entfernt: transform - nur opacity change */
}
/* ===== EINFACHE SUCCESS INDICATION - NUR OPACITY ===== */
@keyframes simple-success {
0% {
opacity: 0;
}
100% {
opacity: 1;
}
}
.animate-success {
animation: simple-success 0.2s ease-out;
}
/* ===== EINFACHER PULSE FÜR LOADING - REDUZIERT ===== */
@keyframes simple-pulse {
0%, 100% {
opacity: 1;
}
50% {
opacity: 0.7;
}
}
.animate-pulse-simple {
animation: simple-pulse 2s infinite ease-in-out;
}
/* ===== EINFACHER PROGRESS BAR - NUR WIDTH ===== */
.progress-fill {
transition: width 0.5s ease-out;
/* Reduzierte Dauer für bessere Performance */
}
/* ===== UTILITY CLASSES - MINIMAL ===== */
.animate-smooth {
transition: opacity 0.2s ease;
/* Nur opacity transition */
}
.animate-smooth-fast {
transition: opacity 0.1s ease;
/* Nur opacity transition */
}
/* ===== RESPONSIVE ANPASSUNGEN - MINIMAL ===== */
@media (max-width: 768px) {
.animate-fade-in {
animation-duration: 0.1s;
/* Noch schneller auf mobilen Geräten */
}
}
/* ===== REDUZIERTE BEWEGUNG UNTERSTÜTZUNG - ERWEITERT ===== */
@media (prefers-reduced-motion: reduce) {
* {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
transform: none !important;
}
.animate-hover-lift:hover {
opacity: 1 !important;
/* Keine Hover-Effekte bei reduzierter Bewegung */
}
}
/* ===== ALLE WILL-CHANGE PROPERTIES ENTFERNT ===== */
/* will-change Properties können auf schwacher Hardware mehr schaden als nutzen */

Binary file not shown.

View File

@@ -0,0 +1 @@
@keyframes fade-in{from{opacity:0}to{opacity:1}}.animate-fade-in{animation:fade-in .2s ease-out}@keyframes slide-up{from{opacity:0;transform:translateY(15px)}to{opacity:1;transform:translateY(0)}}.animate-slide-up{animation:slide-up .3s ease-out}.animate-slide-up-delay{animation:slide-up .3s ease-out;animation-delay:.1s;animation-fill-mode:both}.animate-slide-up-delay-2{animation:slide-up .3s ease-out;animation-delay:.2s;animation-fill-mode:both}.animate-hover-lift{transition:transform .2s ease}.animate-hover-lift:hover{transform:translateY(-2px)}@keyframes simple-success{0%{opacity:0;transform:scale(0.9)}100%{opacity:1;transform:scale(1)}}.animate-success{animation:simple-success .3s ease-out}@keyframes simple-pulse{0%,100%{opacity:1}50%{opacity:.6}}.animate-pulse-simple{animation:simple-pulse 2s infinite ease-in-out}.progress-fill{transition:width 1s ease-out}.animate-fade-in,.animate-slide-up,.animate-slide-up-delay,.animate-slide-up-delay-2{will-change:transform,opacity}.animate-hover-lift{will-change:transform}.animate-smooth{transition:all .2s ease}.animate-smooth-fast{transition:all .1s ease}@media(max-width:768px){.animate-fade-in,.animate-slide-up,.animate-slide-up-delay,.animate-slide-up-delay-2{animation-duration:.2s}}@media(prefers-reduced-motion:reduce){*{animation-duration:.01ms !important;animation-iteration-count:1 !important;transition-duration:.01ms !important}.animate-hover-lift:hover{transform:none}}

Binary file not shown.

9972
static/css/output.css Normal file

File diff suppressed because it is too large Load Diff

BIN
static/css/output.css.gz Normal file

Binary file not shown.

1
static/css/output.min.css vendored Normal file

File diff suppressed because one or more lines are too long

Binary file not shown.

View File

@@ -0,0 +1,230 @@
/* Performance-optimized CSS for MYP Application - Fast Rendering Focus */
/* ===== OPTIMIZED GLASSMORPHISM FOR NAVBAR - FASTER LOADING ===== */
.glass-navbar {
background: rgba(255, 255, 255, 0.92);
/* Removed backdrop-filter for better performance */
border: 1px solid rgba(255, 255, 255, 0.3);
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);
}
.dark .glass-navbar {
background: rgba(15, 23, 42, 0.92);
border: 1px solid rgba(255, 255, 255, 0.1);
}
/* Optional: Add backdrop-filter only for high-performance devices */
@media (min-width: 1024px) and (prefers-reduced-motion: no-preference) {
@supports (backdrop-filter: blur(10px)) {
.glass-navbar {
background: rgba(255, 255, 255, 0.85);
backdrop-filter: blur(8px);
-webkit-backdrop-filter: blur(8px);
}
.dark .glass-navbar {
background: rgba(15, 23, 42, 0.85);
}
}
}
/* ===== SIMPLIFIED GLASS EFFECTS - NO ANIMATIONS ===== */
.glass-base {
background: rgba(255, 255, 255, 0.95);
border: 1px solid rgba(255, 255, 255, 0.3);
}
.glass-strong {
background: rgba(255, 255, 255, 0.98);
border: 1px solid rgba(255, 255, 255, 0.4);
}
.glass-subtle {
background: rgba(255, 255, 255, 0.9);
border: 1px solid rgba(255, 255, 255, 0.2);
}
/* Dark mode variants */
.dark .glass-base {
background: rgba(15, 23, 42, 0.95);
border: 1px solid rgba(255, 255, 255, 0.1);
}
.dark .glass-strong {
background: rgba(30, 41, 59, 0.98);
border: 1px solid rgba(255, 255, 255, 0.15);
}
.dark .glass-subtle {
background: rgba(15, 23, 42, 0.9);
border: 1px solid rgba(255, 255, 255, 0.08);
}
/* ===== SIMPLIFIED CARDS - NO SHADOWS OR TRANSITIONS ===== */
.glass-card {
background: rgba(255, 255, 255, 0.98);
border: 1px solid rgba(229, 231, 235, 0.5);
border-radius: 12px;
padding: 1.5rem;
}
.dark .glass-card {
background: rgba(30, 41, 59, 0.98);
border: 1px solid rgba(255, 255, 255, 0.1);
}
/* ===== BUTTONS - INSTANT FEEDBACK ===== */
.btn-primary {
background-color: #1a1a1a;
color: white;
padding: 0.5rem 1rem;
border-radius: 0.375rem;
font-weight: 500;
}
.btn-primary:hover {
background-color: #333333;
}
.btn-secondary {
background-color: #e5e7eb;
color: #374151;
padding: 0.5rem 1rem;
border-radius: 0.375rem;
font-weight: 500;
}
.btn-secondary:hover {
background-color: #d1d5db;
}
/* ===== FORMS - SIMPLIFIED FOCUS STATES ===== */
input:focus,
textarea:focus,
select:focus {
outline: 2px solid #3b82f6;
outline-offset: -2px;
}
/* ===== MODAL OVERLAYS - INSTANT APPEARANCE ===== */
.modal-backdrop {
background-color: rgba(0, 0, 0, 0.5);
position: fixed;
inset: 0;
}
.modal-content {
background: white;
border-radius: 0.5rem;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
}
.dark .modal-content {
background: #1f2937;
}
/* ===== TOOLTIPS - SIMPLIFIED ===== */
.tooltip {
background: #1f2937;
color: white;
padding: 0.25rem 0.5rem;
border-radius: 0.25rem;
font-size: 0.875rem;
}
/* ===== LOADING STATES - STATIC ===== */
.spinner {
display: inline-block;
width: 1.5rem;
height: 1.5rem;
border: 2px solid #f3f4f6;
border-top-color: #3b82f6;
border-radius: 50%;
}
/* Loading dots instead of spinner for better performance */
.loading-dots {
display: inline-flex;
gap: 0.25rem;
}
.loading-dots span {
width: 0.5rem;
height: 0.5rem;
background: #3b82f6;
border-radius: 50%;
opacity: 0.3;
}
.loading-dots span:nth-child(2) { opacity: 0.6; }
.loading-dots span:nth-child(3) { opacity: 1; }
/* ===== PERFORMANCE UTILITIES ===== */
.will-change-auto { will-change: auto; }
.no-transitions * { transition: none !important; }
.no-animations * { animation: none !important; }
.no-transforms * { transform: none !important; }
/* Disable all motion effects */
.reduce-motion * {
animation: none !important;
transition: none !important;
transform: none !important;
}
/* ===== REDUCED MOTION PREFERENCE ===== */
@media (prefers-reduced-motion: reduce) {
*,
*::before,
*::after {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
scroll-behavior: auto !important;
}
}
/* ===== OPTIMIZED GRID LAYOUTS ===== */
.grid-optimized {
display: grid;
contain: layout;
}
/* ===== SIMPLIFIED BADGES ===== */
.badge {
display: inline-flex;
align-items: center;
padding: 0.125rem 0.625rem;
font-size: 0.75rem;
font-weight: 500;
border-radius: 9999px;
}
.badge-success {
background-color: #10b981;
color: white;
}
.badge-warning {
background-color: #f59e0b;
color: white;
}
.badge-error {
background-color: #ef4444;
color: white;
}
/* ===== OPTIMIZE PAINT AREAS ===== */
.contain-paint { contain: paint; }
.contain-layout { contain: layout; }
.contain-strict { contain: strict; }
/* ===== CRITICAL RENDERING PATH OPTIMIZATION ===== */
.above-fold {
content-visibility: visible;
}
.below-fold {
content-visibility: auto;
contain-intrinsic-size: 0 500px;
}

Binary file not shown.

View File

@@ -0,0 +1 @@
.glass-navbar{background:rgba(255,255,255,0.92);border:1px solid rgba(255,255,255,0.3);box-shadow:0 1px 3px rgba(0,0,0,0.05);}.dark .glass-navbar{background:rgba(15,23,42,0.92);border:1px solid rgba(255,255,255,0.1);}@media (min-width:1024px) and (prefers-reduced-motion:no-preference){@supports (backdrop-filter:blur(10px)){.glass-navbar{background:rgba(255,255,255,0.85);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);}.dark .glass-navbar{background:rgba(15,23,42,0.85);}}}.glass-base{background:rgba(255,255,255,0.95);border:1px solid rgba(255,255,255,0.3);}.glass-strong{background:rgba(255,255,255,0.98);border:1px solid rgba(255,255,255,0.4);}.glass-subtle{background:rgba(255,255,255,0.9);border:1px solid rgba(255,255,255,0.2);}.dark .glass-base{background:rgba(15,23,42,0.95);border:1px solid rgba(255,255,255,0.1);}.dark .glass-strong{background:rgba(30,41,59,0.98);border:1px solid rgba(255,255,255,0.15);}.dark .glass-subtle{background:rgba(15,23,42,0.9);border:1px solid rgba(255,255,255,0.08);}.glass-card{background:rgba(255,255,255,0.98);border:1px solid rgba(229,231,235,0.5);border-radius:12px;padding:1.5rem;}.dark .glass-card{background:rgba(30,41,59,0.98);border:1px solid rgba(255,255,255,0.1);}.btn-primary{background-color:#1a1a1a;color:white;padding:0.5rem 1rem;border-radius:0.375rem;font-weight:500;}.btn-primary:hover{background-color:#333333;}.btn-secondary{background-color:#e5e7eb;color:#374151;padding:0.5rem 1rem;border-radius:0.375rem;font-weight:500;}.btn-secondary:hover{background-color:#d1d5db;}input:focus,textarea:focus,select:focus{outline:2px solid #3b82f6;outline-offset:-2px;}.modal-backdrop{background-color:rgba(0,0,0,0.5);position:fixed;inset:0;}.modal-content{background:white;border-radius:0.5rem;box-shadow:0 4px 6px rgba(0,0,0,0.1);}.dark .modal-content{background:#1f2937;}.tooltip{background:#1f2937;color:white;padding:0.25rem 0.5rem;border-radius:0.25rem;font-size:0.875rem;}.spinner{display:inline-block;width:1.5rem;height:1.5rem;border:2px solid #f3f4f6;border-top-color:#3b82f6;border-radius:50%;}.loading-dots{display:inline-flex;gap:0.25rem;}.loading-dots span{width:0.5rem;height:0.5rem;background:#3b82f6;border-radius:50%;opacity:0.3;}.loading-dots span:nth-child(2){opacity:0.6;}.loading-dots span:nth-child(3){opacity:1;}.will-change-auto{will-change:auto;}.no-transitions *{transition:none !important;}.no-animations *{animation:none !important;}.no-transforms *{transform:none !important;}.reduce-motion *{animation:none !important;transition:none !important;transform:none !important;}@media (prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:0.01ms !important;animation-iteration-count:1 !important;transition-duration:0.01ms !important;scroll-behavior:auto !important;}}.grid-optimized{display:grid;contain:layout;}.badge{display:inline-flex;align-items:center;padding:0.125rem 0.625rem;font-size:0.75rem;font-weight:500;border-radius:9999px;}.badge-success{background-color:#10b981;color:white;}.badge-warning{background-color:#f59e0b;color:white;}.badge-error{background-color:#ef4444;color:white;}.contain-paint{contain:paint;}.contain-layout{contain:layout;}.contain-strict{contain:strict;}.above-fold{content-visibility:visible;}.below-fold{content-visibility:auto;contain-intrinsic-size:0 500px;}

Binary file not shown.

177
static/css/printers.css Normal file
View File

@@ -0,0 +1,177 @@
/* Erweiterte Drucker-Styles für MYP Platform */
/* Filter-Button-Styles */
.filter-btn {
transition: all 0.2s ease-in-out;
}
.filter-btn.active {
background-color: white;
box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06);
color: #374151;
}
.dark .filter-btn.active {
background-color: #475569;
color: #f1f5f9;
}
/* Online-Drucker-Hervorhebung */
.printer-card-online {
background: linear-gradient(135deg, #f0fdf4 0%, #ffffff 100%);
border-color: #bbf7d0;
box-shadow: 0 1px 3px 0 rgba(34, 197, 94, 0.1), 0 1px 2px 0 rgba(34, 197, 94, 0.06);
}
.dark .printer-card-online {
background: linear-gradient(135deg, rgba(34, 197, 94, 0.1) 0%, #1e293b 100%);
border-color: #166534;
box-shadow: 0 1px 3px 0 rgba(34, 197, 94, 0.2), 0 1px 2px 0 rgba(34, 197, 94, 0.1);
}
.printer-card-online:hover {
box-shadow: 0 4px 6px -1px rgba(34, 197, 94, 0.2), 0 2px 4px -1px rgba(34, 197, 94, 0.1);
}
.dark .printer-card-online:hover {
box-shadow: 0 4px 6px -1px rgba(34, 197, 94, 0.3), 0 2px 4px -1px rgba(34, 197, 94, 0.2);
}
/* Online-Indikator-Animation */
.online-indicator {
animation: pulse-green 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
}
@keyframes pulse-green {
0%, 100% {
opacity: 1;
box-shadow: 0 0 0 0 rgba(34, 197, 94, 0.7);
}
50% {
opacity: .8;
box-shadow: 0 0 0 4px rgba(34, 197, 94, 0);
}
}
/* Status-Übersicht-Animationen */
.status-count-change {
animation: count-change 0.5s ease-in-out;
}
@keyframes count-change {
0% { transform: scale(1); }
50% { transform: scale(1.1); }
100% { transform: scale(1); }
}
/* Auto-Refresh-Button-Animationen */
.auto-refresh-active {
background: linear-gradient(45deg, #10b981, #059669);
animation: gradient-shift 3s ease-in-out infinite;
}
@keyframes gradient-shift {
0%, 100% { background-position: 0% 50%; }
50% { background-position: 100% 50%; }
}
/* Drucker-Karten-Übergangseffekte */
.printer-card {
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}
.printer-card:hover {
transform: translateY(-2px);
}
/* Loading-Spinner für Live-Updates */
.live-update-spinner {
animation: spin 1s linear infinite;
}
@keyframes spin {
from { transform: rotate(0deg); }
to { transform: rotate(360deg); }
}
/* Responsive Verbesserungen */
@media (max-width: 640px) {
.filter-btn {
padding: 0.375rem 0.75rem;
font-size: 0.75rem;
}
.status-overview {
flex-direction: column;
gap: 0.5rem;
}
.printer-card {
padding: 1rem;
}
}
/* Dark Mode Verbesserungen */
.dark .printer-card {
background-color: #1e293b;
border-color: #334155;
}
.dark .printer-card:hover {
background-color: #334155;
}
/* Accessibility Verbesserungen */
.filter-btn:focus {
outline: 2px solid #3b82f6;
outline-offset: 2px;
}
.printer-card:focus-within {
outline: 2px solid #3b82f6;
outline-offset: 2px;
}
/* Print-Styles */
@media print {
.filter-btn,
.auto-refresh-btn,
.printer-detail-btn,
.delete-printer-btn {
display: none;
}
.printer-card {
break-inside: avoid;
box-shadow: none;
border: 1px solid #000;
}
}
/* High Contrast Mode */
@media (prefers-contrast: high) {
.printer-card-online {
border: 2px solid #059669;
}
.online-indicator {
border: 1px solid #000;
}
}
/* Reduced Motion */
@media (prefers-reduced-motion: reduce) {
.online-indicator,
.auto-refresh-active,
.live-update-spinner {
animation: none;
}
.printer-card {
transition: none;
}
.printer-card:hover {
transform: none;
}
}

BIN
static/css/printers.css.gz Normal file

Binary file not shown.

1
static/css/printers.min.css vendored Normal file
View File

@@ -0,0 +1 @@
.filter-btn{transition:all .2s ease-in-out}.filter-btn.active{background-color:white;box-shadow:0 1px 3px 0 rgba(0,0,0,0.1),0 1px 2px 0 rgba(0,0,0,0.06);color:#374151}.dark .filter-btn.active{background-color:#475569;color:#f1f5f9}.printer-card-online{background:linear-gradient(135deg,#f0fdf4 0,#fff 100%);border-color:#bbf7d0;box-shadow:0 1px 3px 0 rgba(34,197,94,0.1),0 1px 2px 0 rgba(34,197,94,0.06)}.dark .printer-card-online{background:linear-gradient(135deg,rgba(34,197,94,0.1) 0,#1e293b 100%);border-color:#166534;box-shadow:0 1px 3px 0 rgba(34,197,94,0.2),0 1px 2px 0 rgba(34,197,94,0.1)}.printer-card-online:hover{box-shadow:0 4px 6px -1px rgba(34,197,94,0.2),0 2px 4px -1px rgba(34,197,94,0.1)}.dark .printer-card-online:hover{box-shadow:0 4px 6px -1px rgba(34,197,94,0.3),0 2px 4px -1px rgba(34,197,94,0.2)}.online-indicator{animation:pulse-green 2s cubic-bezier(0.4,0,0.6,1) infinite}@keyframes pulse-green{0%,100%{opacity:1;box-shadow:0 0 0 0 rgba(34,197,94,0.7)}50%{opacity:.8;box-shadow:0 0 0 4px rgba(34,197,94,0)}}.status-count-change{animation:count-change .5s ease-in-out}@keyframes count-change{0%{transform:scale(1)}50%{transform:scale(1.1)}100%{transform:scale(1)}}.auto-refresh-active{background:linear-gradient(45deg,#10b981,#059669);animation:gradient-shift 3s ease-in-out infinite}@keyframes gradient-shift{0%,100%{background-position:0 50%}50%{background-position:100% 50%}}.printer-card{transition:all .3s cubic-bezier(0.4,0,0.2,1)}.printer-card:hover{transform:translateY(-2px)}.live-update-spinner{animation:spin 1s linear infinite}@keyframes spin{from{transform:rotate(0)}to{transform:rotate(360deg)}}@media(max-width:640px){.filter-btn{padding:.375rem .75rem;font-size:.75rem}.status-overview{flex-direction:column;gap:.5rem}.printer-card{padding:1rem}}.dark .printer-card{background-color:#1e293b;border-color:#334155}.dark .printer-card:hover{background-color:#334155}.filter-btn:focus{outline:2px solid #3b82f6;outline-offset:2px}.printer-card:focus-within{outline:2px solid #3b82f6;outline-offset:2px}@media print{.filter-btn,.auto-refresh-btn,.printer-detail-btn,.delete-printer-btn{display:none}.printer-card{break-inside:avoid;box-shadow:none;border:1px solid #000}}@media(prefers-contrast:high){.printer-card-online{border:2px solid #059669}.online-indicator{border:1px solid #000}}@media(prefers-reduced-motion:reduce){.online-indicator,.auto-refresh-active,.live-update-spinner{animation:none}.printer-card{transition:none}.printer-card:hover{transform:none}}

Binary file not shown.

View File

@@ -0,0 +1,310 @@
/**
* Optimized Professional Theme for Raspberry Pi
* All transitions and hover effects removed for performance
*/
:root {
/* Mercedes-Benz Farben */
--mercedes-black: #000000;
--mercedes-silver: #C0C0C0;
--mercedes-dark-gray: #1a1a1a;
--mercedes-light-gray: #f5f5f5;
/* Theme Farben */
--primary-color: #3b82f6;
--secondary-color: #64748b;
--accent-color: #1d4ed8;
--success-color: #10b981;
--warning-color: #f59e0b;
--error-color: #ef4444;
/* Light Mode */
--bg-primary: #ffffff;
--bg-secondary: #f8fafc;
--text-primary: #1a202c;
--text-secondary: #4a5568;
--border-color: #e2e8f0;
}
.dark {
/* Dark Mode */
--bg-primary: #0f172a;
--bg-secondary: #1e293b;
--text-primary: #f8fafc;
--text-secondary: #cbd5e1;
--border-color: #334155;
}
/* Base Styles - Keine Transitions */
body {
background-color: var(--bg-primary);
color: var(--text-primary);
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
}
/* Typography - Keine Hover-Effekte */
h1, h2, h3, h4, h5, h6 {
color: var(--text-primary);
font-weight: 700;
letter-spacing: -0.025em;
}
/* Links - Keine Hover-Animation */
a {
color: var(--primary-color);
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
/* Buttons - Keine Transitions oder Hover-Effekte */
.btn {
padding: 0.75rem 1.5rem;
border-radius: 0.5rem;
font-weight: 600;
cursor: pointer;
border: none;
outline: none;
}
.btn-primary {
background-color: var(--primary-color);
color: white;
}
.btn-secondary {
background-color: var(--secondary-color);
color: white;
}
/* Cards - Keine Schatten-Animationen */
.card {
background-color: var(--bg-secondary);
border: 1px solid var(--border-color);
border-radius: 0.75rem;
padding: 1.5rem;
}
/* Forms - Keine Focus-Animationen */
.form-input,
.form-select,
.form-textarea {
width: 100%;
padding: 0.75rem;
border: 2px solid var(--border-color);
border-radius: 0.5rem;
background-color: var(--bg-primary);
color: var(--text-primary);
}
.form-input:focus,
.form-select:focus,
.form-textarea:focus {
border-color: var(--primary-color);
outline: none;
}
/* Tables - Keine Hover-Effekte */
.table {
width: 100%;
border-collapse: collapse;
}
.table th,
.table td {
padding: 0.75rem;
border-bottom: 1px solid var(--border-color);
}
.table th {
font-weight: 600;
text-align: left;
}
/* Navigation - Keine Hover-Animationen */
.nav-link {
padding: 0.5rem 1rem;
color: var(--text-secondary);
display: inline-block;
}
.nav-link:hover {
color: var(--text-primary);
background-color: var(--bg-secondary);
}
.nav-link.active {
color: var(--primary-color);
font-weight: 600;
}
/* Badges - Statisch */
.badge {
display: inline-flex;
align-items: center;
padding: 0.25rem 0.75rem;
font-size: 0.875rem;
font-weight: 600;
border-radius: 9999px;
}
.badge-success {
background-color: #d1fae5;
color: #065f46;
}
.badge-warning {
background-color: #fef3c7;
color: #92400e;
}
.badge-error {
background-color: #fee2e2;
color: #991b1b;
}
/* Dark Mode Badges */
.dark .badge-success {
background-color: #064e3b;
color: #6ee7b7;
}
.dark .badge-warning {
background-color: #78350f;
color: #fcd34d;
}
.dark .badge-error {
background-color: #7f1d1d;
color: #fca5a5;
}
/* Alerts - Statisch */
.alert {
padding: 1rem;
border-radius: 0.5rem;
margin-bottom: 1rem;
}
.alert-info {
background-color: #dbeafe;
color: #1e40af;
border: 1px solid #93c5fd;
}
.alert-success {
background-color: #d1fae5;
color: #065f46;
border: 1px solid #6ee7b7;
}
.alert-warning {
background-color: #fef3c7;
color: #92400e;
border: 1px solid #fcd34d;
}
.alert-error {
background-color: #fee2e2;
color: #991b1b;
border: 1px solid #fca5a5;
}
/* Dark Mode Alerts */
.dark .alert-info {
background-color: #1e3a8a;
color: #93c5fd;
border-color: #3b82f6;
}
.dark .alert-success {
background-color: #064e3b;
color: #6ee7b7;
border-color: #10b981;
}
.dark .alert-warning {
background-color: #78350f;
color: #fcd34d;
border-color: #f59e0b;
}
.dark .alert-error {
background-color: #7f1d1d;
color: #fca5a5;
border-color: #ef4444;
}
/* Utility Classes - Keine Animationen */
.shadow-sm { box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); }
.shadow { box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); }
.shadow-md { box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); }
.shadow-lg { box-shadow: 0 10px 15px rgba(0, 0, 0, 0.1); }
.shadow-xl { box-shadow: 0 20px 25px rgba(0, 0, 0, 0.1); }
/* Keine Transitions */
* {
transition: none !important;
animation: none !important;
}
/* Keine Transform-Effekte */
.transform,
.translate-x-0,
.translate-y-0,
.rotate-0,
.scale-100 {
transform: none !important;
}
/* Scrollbar Styling */
::-webkit-scrollbar {
width: 8px;
height: 8px;
}
::-webkit-scrollbar-track {
background: var(--bg-secondary);
}
::-webkit-scrollbar-thumb {
background: var(--border-color);
border-radius: 4px;
}
::-webkit-scrollbar-thumb:hover {
background: var(--text-secondary);
}
/* Print Styles */
@media print {
body {
background: white;
color: black;
}
.no-print {
display: none !important;
}
}
/* Accessibility */
.sr-only {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border-width: 0;
}
/* Focus Visible - Einfacher Stil */
:focus-visible {
outline: 2px solid var(--primary-color);
outline-offset: 2px;
}

Binary file not shown.

View File

@@ -0,0 +1 @@
:root{--mercedes-black:#000000;--mercedes-silver:#C0C0C0;--mercedes-dark-gray:#1a1a1a;--mercedes-light-gray:#f5f5f5;--primary-color:#3b82f6;--secondary-color:#64748b;--accent-color:#1d4ed8;--success-color:#10b981;--warning-color:#f59e0b;--error-color:#ef4444;--bg-primary:#ffffff;--bg-secondary:#f8fafc;--text-primary:#1a202c;--text-secondary:#4a5568;--border-color:#e2e8f0;}.dark{--bg-primary:#0f172a;--bg-secondary:#1e293b;--text-primary:#f8fafc;--text-secondary:#cbd5e1;--border-color:#334155;}body{background-color:var(--bg-primary);color:var(--text-primary);font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;}h1,h2,h3,h4,h5,h6{color:var(--text-primary);font-weight:700;letter-spacing:-0.025em;}a{color:var(--primary-color);text-decoration:none;}a:hover{text-decoration:underline;}.btn{padding:0.75rem 1.5rem;border-radius:0.5rem;font-weight:600;cursor:pointer;border:none;outline:none;}.btn-primary{background-color:var(--primary-color);color:white;}.btn-secondary{background-color:var(--secondary-color);color:white;}.card{background-color:var(--bg-secondary);border:1px solid var(--border-color);border-radius:0.75rem;padding:1.5rem;}.form-input,.form-select,.form-textarea{width:100%;padding:0.75rem;border:2px solid var(--border-color);border-radius:0.5rem;background-color:var(--bg-primary);color:var(--text-primary);}.form-input:focus,.form-select:focus,.form-textarea:focus{border-color:var(--primary-color);outline:none;}.table{width:100%;border-collapse:collapse;}.table th,.table td{padding:0.75rem;border-bottom:1px solid var(--border-color);}.table th{font-weight:600;text-align:left;}.nav-link{padding:0.5rem 1rem;color:var(--text-secondary);display:inline-block;}.nav-link:hover{color:var(--text-primary);background-color:var(--bg-secondary);}.nav-link.active{color:var(--primary-color);font-weight:600;}.badge{display:inline-flex;align-items:center;padding:0.25rem 0.75rem;font-size:0.875rem;font-weight:600;border-radius:9999px;}.badge-success{background-color:#d1fae5;color:#065f46;}.badge-warning{background-color:#fef3c7;color:#92400e;}.badge-error{background-color:#fee2e2;color:#991b1b;}.dark .badge-success{background-color:#064e3b;color:#6ee7b7;}.dark .badge-warning{background-color:#78350f;color:#fcd34d;}.dark .badge-error{background-color:#7f1d1d;color:#fca5a5;}.alert{padding:1rem;border-radius:0.5rem;margin-bottom:1rem;}.alert-info{background-color:#dbeafe;color:#1e40af;border:1px solid #93c5fd;}.alert-success{background-color:#d1fae5;color:#065f46;border:1px solid #6ee7b7;}.alert-warning{background-color:#fef3c7;color:#92400e;border:1px solid #fcd34d;}.alert-error{background-color:#fee2e2;color:#991b1b;border:1px solid #fca5a5;}.dark .alert-info{background-color:#1e3a8a;color:#93c5fd;border-color:#3b82f6;}.dark .alert-success{background-color:#064e3b;color:#6ee7b7;border-color:#10b981;}.dark .alert-warning{background-color:#78350f;color:#fcd34d;border-color:#f59e0b;}.dark .alert-error{background-color:#7f1d1d;color:#fca5a5;border-color:#ef4444;}.shadow-sm{box-shadow:0 1px 2px rgba(0,0,0,0.05);}.shadow{box-shadow:0 1px 3px rgba(0,0,0,0.1);}.shadow-md{box-shadow:0 4px 6px rgba(0,0,0,0.1);}.shadow-lg{box-shadow:0 10px 15px rgba(0,0,0,0.1);}.shadow-xl{box-shadow:0 20px 25px rgba(0,0,0,0.1);}*{transition:none !important;animation:none !important;}.transform,.translate-x-0,.translate-y-0,.rotate-0,.scale-100{transform:none !important;}::-webkit-scrollbar{width:8px;height:8px;}::-webkit-scrollbar-track{background:var(--bg-secondary);}::-webkit-scrollbar-thumb{background:var(--border-color);border-radius:4px;}::-webkit-scrollbar-thumb:hover{background:var(--text-secondary);}@media print{body{background:white;color:black;}.no-print{display:none !important;}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0;}:focus-visible{outline:2px solid var(--primary-color);outline-offset:2px;}

Binary file not shown.

View File

@@ -0,0 +1,898 @@
/**
* Mercedes-Benz MYP Platform - Optimierte Professional Theme
* Vereinfachte Light/Dark Mode Implementierung für bessere Performance
*/
/* Globale CSS-Variablen für konsistente Theming */
:root {
/* Mercedes-Benz Markenfarben */
--mb-primary: #0073ce;
--mb-primary-dark: #005a9f;
--mb-secondary: #64748b;
--mb-accent: #0ea5e9;
--mb-black: #000000;
--mb-silver: #c0c0c0;
/* Light Mode Farbpalette */
--light-bg-primary: #ffffff;
--light-bg-secondary: #fafbfc;
--light-bg-tertiary: #f3f5f7;
--light-surface: #ffffff;
--light-surface-hover: #fafbfc;
--light-text-primary: #111827;
--light-text-secondary: #374151;
--light-text-muted: #6b7280;
--light-text-accent: #0073ce;
--light-border: #e5e7eb;
--light-border-strong: #d1d5db;
--light-shadow: rgba(0, 0, 0, 0.04);
--light-shadow-strong: rgba(0, 0, 0, 0.08);
/* Dark Mode Farbpalette */
--dark-bg-primary: #0f172a;
--dark-bg-secondary: #1e293b;
--dark-bg-tertiary: #334155;
--dark-surface: #1e293b;
--dark-surface-hover: #334155;
--dark-text-primary: #f8fafc;
--dark-text-secondary: #e2e8f0;
--dark-text-muted: #94a3b8;
--dark-border: #334155;
--dark-border-strong: #475569;
--dark-shadow: rgba(0, 0, 0, 0.3);
--dark-shadow-strong: rgba(0, 0, 0, 0.5);
}
/* Vereinfachte Hero-Header - Raspberry Pi Optimiert */
.professional-hero {
position: relative;
overflow: hidden;
border-radius: 1rem;
margin: 1.5rem;
margin-bottom: 2rem;
background: var(--light-bg-secondary);
border: 1px solid var(--light-border);
/* Entfernt: box-shadow, transition, hover-transform */
}
.dark .professional-hero {
background: var(--dark-bg-secondary);
border: 1px solid var(--dark-border);
/* Entfernt: box-shadow */
}
/* Vereinfachte Container - Raspberry Pi Optimiert */
.professional-container {
background: var(--light-surface);
border: 1px solid var(--light-border);
border-radius: 0.75rem;
/* Entfernt: box-shadow, transition, hover-transform */
}
.dark .professional-container {
background: var(--dark-surface);
border: 1px solid var(--dark-border);
/* Entfernt: box-shadow, hover-effects */
}
/* Vereinfachte Glassmorphism-Effekte - Raspberry Pi Optimiert */
.mb-glass {
background: rgba(255, 255, 255, 0.98);
border: 1px solid rgba(229, 231, 235, 0.4);
/* Entfernt: backdrop-filter, box-shadow, transition, hover-transform */
}
.dark .mb-glass {
background: rgba(15, 23, 42, 0.95);
border: 1px solid rgba(255, 255, 255, 0.1);
/* Entfernt: box-shadow, hover-effects */
}
/* Vereinfachte Buttons - Raspberry Pi Optimiert */
.btn-professional {
background: var(--mb-primary);
color: white;
border: none;
border-radius: 0.5rem;
padding: 0.75rem 1.5rem;
font-weight: 600;
font-size: 0.875rem;
text-transform: uppercase;
letter-spacing: 0.025em;
/* Entfernt: gradient, transition, box-shadow, hover-transform */
}
.btn-professional:hover {
background: var(--mb-primary-dark);
/* Nur Background-Color Change */
}
/* Secondary Button - Raspberry Pi Optimiert */
.btn-secondary-professional {
background: var(--light-surface);
color: var(--light-text-primary);
border: 1px solid var(--light-border-strong);
border-radius: 0.5rem;
padding: 0.75rem 1.5rem;
font-weight: 600;
font-size: 0.875rem;
/* Entfernt: transition, box-shadow, hover-transform */
}
.dark .btn-secondary-professional {
background: var(--dark-surface);
color: var(--dark-text-primary);
border-color: var(--dark-border-strong);
/* Entfernt: box-shadow */
}
.btn-secondary-professional:hover {
background: var(--light-surface-hover);
border-color: var(--mb-primary);
/* Nur Background und Border-Color Change */
}
.dark .btn-secondary-professional:hover {
background: var(--dark-surface-hover);
}
/* Vereinfachte Input Fields - Raspberry Pi Optimiert */
.input-professional {
background: var(--light-surface);
border: 1px solid var(--light-border);
border-radius: 0.5rem;
padding: 0.75rem 1rem;
color: var(--light-text-primary);
font-size: 0.875rem;
/* Entfernt: transition, box-shadow, focus-transform */
}
.dark .input-professional {
background: var(--dark-surface);
border-color: var(--dark-border);
color: var(--dark-text-primary);
/* Entfernt: box-shadow */
}
.input-professional:focus {
border-color: var(--mb-primary);
/* Nur Border-Color Change */
}
.input-professional::placeholder {
color: var(--light-text-muted);
}
.dark .input-professional::placeholder {
color: var(--dark-text-muted);
}
/* Vereinfachte Cards - Raspberry Pi Optimiert */
.card-professional {
background: var(--light-surface);
border: 1px solid var(--light-border);
border-radius: 0.75rem;
padding: 1.5rem;
/* Entfernt: box-shadow, transition, hover-transform */
}
.dark .card-professional {
background: var(--dark-surface);
border-color: var(--dark-border);
/* Entfernt: box-shadow, hover-effects */
}
/* Vereinfachte Statistics Cards - Raspberry Pi Optimiert */
.stat-card {
background: var(--light-surface);
border: 1px solid var(--light-border);
border-radius: 0.75rem;
padding: 1.5rem;
text-align: center;
/* Entfernt: transition, box-shadow, hover-transform */
}
.dark .stat-card {
background: var(--dark-surface);
border-color: var(--dark-border);
/* Entfernt: box-shadow, hover-effects */
}
.stat-number {
font-size: 2.25rem;
font-weight: 700;
color: var(--light-text-primary);
line-height: 1;
margin-bottom: 0.5rem;
}
.dark .stat-number {
color: var(--dark-text-primary);
}
.stat-label {
font-size: 0.875rem;
font-weight: 500;
color: var(--light-text-muted);
text-transform: uppercase;
letter-spacing: 0.05em;
}
.dark .stat-label {
color: var(--dark-text-muted);
}
/* Vereinfachte Status Badges - Raspberry Pi Optimiert */
.status-professional {
display: inline-flex;
align-items: center;
gap: 0.5rem;
padding: 0.5rem 1rem;
border-radius: 9999px;
font-size: 0.75rem;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.05em;
border: 1px solid transparent;
/* Entfernt: transition, hover-scale */
}
/* Status Indicators */
.status-online {
background: #ecfdf5;
color: #065f46;
border: 1px solid rgba(16, 185, 129, 0.2);
}
.dark .status-online {
background: rgba(16, 185, 129, 0.15);
color: #10b981;
border-color: rgba(16, 185, 129, 0.3);
}
.status-offline {
background: #fef2f2;
color: #991b1b;
border: 1px solid rgba(239, 68, 68, 0.2);
}
.dark .status-offline {
background: rgba(239, 68, 68, 0.15);
color: #ef4444;
border-color: rgba(239, 68, 68, 0.3);
}
.status-printing {
background: #eff6ff;
color: #1d4ed8;
border: 1px solid rgba(59, 130, 246, 0.2);
}
.dark .status-printing {
background: rgba(59, 130, 246, 0.15);
color: #3b82f6;
border-color: rgba(59, 130, 246, 0.3);
}
/* Vereinfachte Typography */
.title-professional {
color: var(--light-text-primary);
font-weight: 700;
letter-spacing: -0.025em;
line-height: 1.1;
}
.dark .title-professional {
color: var(--dark-text-primary);
}
.subtitle-professional {
color: var(--light-text-muted);
font-size: 1.125rem;
line-height: 1.6;
font-weight: 400;
opacity: 0.9;
}
.dark .subtitle-professional {
color: var(--dark-text-muted);
}
/* Professional Navigation - Raspberry Pi Optimiert */
.nav-professional {
background: var(--light-bg-secondary);
border: 1px solid var(--light-border);
border-radius: 0.75rem;
padding: 0.5rem;
/* Entfernt: box-shadow */
}
.dark .nav-professional {
background: var(--dark-bg-secondary);
border-color: var(--dark-border);
/* Entfernt: box-shadow */
}
.nav-item-professional {
display: flex;
align-items: center;
gap: 0.75rem;
padding: 0.75rem 1rem;
border-radius: 0.5rem;
color: var(--light-text-secondary);
text-decoration: none;
font-weight: 500;
position: relative;
background: transparent;
/* Entfernt: transition, hover-transform, box-shadow */
}
.dark .nav-item-professional {
color: var(--dark-text-secondary);
}
.nav-item-professional:hover {
background: var(--light-surface-hover);
color: var(--light-text-primary);
/* Nur Background und Color Change */
}
.dark .nav-item-professional:hover {
background: var(--dark-surface-hover);
color: var(--dark-text-primary);
}
.nav-item-professional.active {
background: rgba(0, 115, 206, 0.1);
color: var(--mb-primary);
font-weight: 600;
border: 1px solid var(--light-border-strong);
/* Entfernt: gradient, box-shadow */
}
.dark .nav-item-professional.active {
background: rgba(59, 130, 246, 0.2);
}
/* Professional Tables - Raspberry Pi Optimiert */
.table-professional {
width: 100%;
border-collapse: collapse;
background: var(--light-bg-secondary);
border-radius: 0.75rem;
overflow: hidden;
border: 1px solid var(--light-border);
/* Entfernt: box-shadow */
}
.dark .table-professional {
background: var(--dark-bg-secondary);
/* Entfernt: box-shadow */
}
.table-professional th {
background: var(--light-bg-tertiary);
color: var(--light-text-primary);
font-weight: 600;
text-align: left;
padding: 1rem 1.5rem;
border-bottom: 1px solid var(--light-border);
/* Entfernt: gradient, ::after pseudo-element */
}
.dark .table-professional th {
background: var(--dark-bg-tertiary);
color: var(--dark-text-primary);
border-bottom-color: var(--dark-border);
}
.table-professional td {
padding: 1rem 1.5rem;
border-bottom: 1px solid var(--light-border);
color: var(--light-text-secondary);
/* Entfernt: transition */
}
.dark .table-professional td {
border-bottom-color: var(--dark-border);
color: var(--dark-text-secondary);
}
.table-professional tbody tr:hover {
background: var(--light-surface-hover);
/* Entfernt: transform, box-shadow */
}
.dark .table-professional tbody tr:hover {
background: var(--dark-surface-hover);
}
/* Professional Alerts - Raspberry Pi Optimiert */
.alert-professional {
border-radius: 1rem;
padding: 1.5rem;
border: 1px solid transparent;
display: flex;
align-items: flex-start;
gap: 1rem;
margin-bottom: 1rem;
position: relative;
/* Entfernt: box-shadow, overflow */
}
.alert-professional::before {
content: '';
position: absolute;
top: 0;
left: 0;
bottom: 0;
width: 4px;
}
.alert-info {
background: linear-gradient(135deg, rgba(59, 130, 246, 0.08) 0%, rgba(59, 130, 246, 0.03) 100%);
border-color: rgba(59, 130, 246, 0.2);
color: #1e40af;
}
.alert-info::before {
background: linear-gradient(180deg, #3b82f6 0%, #1d4ed8 100%);
}
.dark .alert-info {
background: rgba(59, 130, 246, 0.2);
color: #60a5fa;
}
.alert-success {
background: linear-gradient(135deg, rgba(16, 185, 129, 0.08) 0%, rgba(16, 185, 129, 0.03) 100%);
border-color: rgba(16, 185, 129, 0.2);
color: #065f46;
}
.alert-success::before {
background: linear-gradient(180deg, #10b981 0%, #059669 100%);
}
.dark .alert-success {
background: rgba(16, 185, 129, 0.2);
color: #10b981;
}
.alert-warning {
background: linear-gradient(135deg, rgba(251, 191, 36, 0.08) 0%, rgba(251, 191, 36, 0.03) 100%);
border-color: rgba(251, 191, 36, 0.2);
color: #92400e;
}
.alert-warning::before {
background: linear-gradient(180deg, #fbbf24 0%, #f59e0b 100%);
}
.dark .alert-warning {
background: rgba(251, 191, 36, 0.2);
color: #fbbf24;
}
.alert-error {
background: linear-gradient(135deg, rgba(239, 68, 68, 0.08) 0%, rgba(239, 68, 68, 0.03) 100%);
border-color: rgba(239, 68, 68, 0.2);
color: #991b1b;
}
.alert-error::before {
background: linear-gradient(180deg, #ef4444 0%, #dc2626 100%);
}
.dark .alert-error {
background: rgba(239, 68, 68, 0.2);
color: #ef4444;
}
/* Background Gradients für verschiedene Seiten */
.bg-professional {
background: var(--light-bg-secondary);
min-height: 100vh;
position: relative;
}
.bg-professional::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
radial-gradient(circle at 20% 50%, rgba(0, 115, 206, 0.03) 0%, transparent 50%),
radial-gradient(circle at 80% 20%, rgba(0, 115, 206, 0.02) 0%, transparent 50%),
radial-gradient(circle at 40% 80%, rgba(0, 115, 206, 0.01) 0%, transparent 50%);
pointer-events: none;
z-index: -1;
}
.dark .bg-professional {
background: linear-gradient(135deg, var(--dark-bg-primary) 0%, var(--dark-bg-secondary) 50%, var(--dark-bg-tertiary) 100%);
}
/* Utilities */
.text-professional-primary {
color: var(--light-text-primary);
font-weight: 600;
}
.dark .text-professional-primary {
color: var(--dark-text-primary);
}
.text-professional-secondary {
color: var(--light-text-secondary);
font-weight: 500;
}
.dark .text-professional-secondary {
color: var(--dark-text-secondary);
}
.text-professional-muted {
color: var(--light-text-muted);
font-weight: 400;
}
.dark .text-professional-muted {
color: var(--dark-text-muted);
}
.text-professional-accent {
color: var(--light-text-accent);
font-weight: 600;
}
.dark .text-professional-accent {
color: #60a5fa;
}
/* Censored Text for Privacy Protection */
.censored-text {
font-family: monospace;
background: linear-gradient(45deg, var(--light-text-secondary), var(--light-text-muted));
background-clip: text;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
font-weight: 500;
position: relative;
}
.censored-text::after {
content: '';
position: absolute;
top: 50%;
left: 0;
right: 0;
height: 1px;
background: currentColor;
opacity: 0.3;
}
/* Smooth transitions für alle professionellen Komponenten - OPTIMIERT */
.professional-hero,
.professional-container,
.mb-glass,
.btn-professional,
.btn-secondary-professional,
.input-professional,
.card-professional,
.stat-card,
.status-professional,
.nav-professional,
.nav-item-professional,
.table-professional,
.alert-professional {
transition: background-color 0.2s ease, border-color 0.2s ease, opacity 0.2s ease;
/* Entfernt: cubic-bezier und 'all' transitions für bessere Performance */
}
/* Responsive Design */
@media (max-width: 768px) {
.professional-hero {
margin: 1rem;
border-radius: 1.5rem;
}
.card-professional {
padding: 1rem;
}
.nav-professional {
padding: 0.25rem;
}
.nav-item-professional {
padding: 0.5rem 0.75rem;
}
.stat-number {
font-size: 2rem;
}
.btn-professional,
.btn-secondary-professional {
padding: 0.625rem 1.5rem;
font-size: 0.8rem;
}
}
/* Animation-Klassen - RASPBERRY PI OPTIMIERT */
.animate-fade-in {
animation: fadeInProfessional 0.3s ease-out;
/* Reduzierte Dauer von 0.6s auf 0.3s */
}
.animate-slide-up {
animation: fadeInProfessional 0.3s ease-out;
/* Ersetzt slideUpProfessional durch einfaches fade-in */
}
.animate-scale-in {
animation: fadeInProfessional 0.3s ease-out;
/* Ersetzt scaleInProfessional durch einfaches fade-in */
}
@keyframes fadeInProfessional {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
/* Professional Mini Button Styles */
.btn-professional-mini {
background: rgba(59, 130, 246, 0.1);
color: var(--mb-primary);
border: 1px solid rgba(59, 130, 246, 0.2);
border-radius: 0.75rem;
padding: 0.5rem 1rem;
font-weight: 500;
font-size: 0.75rem;
text-transform: uppercase;
letter-spacing: 0.025em;
transition: background-color 0.2s ease, border-color 0.2s ease;
/* Entfernt: 'all 0.3s ease' für bessere Performance */
display: inline-flex;
align-items: center;
justify-content: center;
cursor: pointer;
}
.dark .btn-professional-mini {
background: rgba(59, 130, 246, 0.2);
border-color: rgba(59, 130, 246, 0.3);
}
.btn-professional-mini:hover {
background: rgba(59, 130, 246, 0.2);
border-color: var(--mb-primary);
/* Entfernt: transform: translateY(-1px) für bessere Performance */
}
.dark .btn-professional-mini:hover {
background: rgba(59, 130, 246, 0.3);
}
/* Danger Mini Button */
.btn-danger-professional-mini {
background: rgba(239, 68, 68, 0.1);
color: #dc2626;
border: 1px solid rgba(239, 68, 68, 0.2);
border-radius: 0.5rem;
padding: 0.5rem;
font-weight: 500;
font-size: 0.75rem;
transition: background-color 0.2s ease, border-color 0.2s ease;
/* Entfernt: 'all 0.3s ease' für bessere Performance */
display: inline-flex;
align-items: center;
justify-content: center;
cursor: pointer;
}
.dark .btn-danger-professional-mini {
background: rgba(239, 68, 68, 0.2);
color: #ef4444;
border-color: rgba(239, 68, 68, 0.3);
}
.btn-danger-professional-mini:hover {
background: rgba(239, 68, 68, 0.2);
border-color: #dc2626;
/* Entfernt: transform: translateY(-1px) scale(1.05) für bessere Performance */
}
.dark .btn-danger-professional-mini:hover {
background: rgba(239, 68, 68, 0.3);
border-color: #ef4444;
}
/* Success Button - RASPBERRY PI OPTIMIERT */
.btn-success-professional {
background: #10b981;
color: white;
border: none;
border-radius: 1rem;
padding: 0.75rem 2rem;
font-weight: 600;
font-size: 0.875rem;
letter-spacing: 0.025em;
text-transform: uppercase;
transition: background-color 0.2s ease;
/* Entfernt: gradient, box-shadow, overflow, position, before-pseudo für Performance */
display: inline-flex;
align-items: center;
justify-content: center;
cursor: pointer;
}
.btn-success-professional:hover {
background: #059669;
/* Entfernt: gradient, transform, box-shadow für bessere Performance */
}
.btn-success-professional:active {
background: #047857;
/* Entfernt: transform für bessere Performance */
}
/* Danger Button - RASPBERRY PI OPTIMIERT */
.btn-danger-professional {
background: #ef4444;
color: white;
border: none;
border-radius: 1rem;
padding: 0.75rem 2rem;
font-weight: 600;
font-size: 0.875rem;
letter-spacing: 0.025em;
text-transform: uppercase;
transition: background-color 0.2s ease;
/* Entfernt: gradient, box-shadow, overflow, position, before-pseudo für Performance */
display: inline-flex;
align-items: center;
justify-content: center;
cursor: pointer;
}
.btn-danger-professional:hover {
background: #dc2626;
/* Entfernt: gradient, transform, box-shadow für bessere Performance */
}
.btn-danger-professional:active {
background: #b91c1c;
/* Entfernt: transform für bessere Performance */
}
/* Filter Button Mercedes */
.filter-btn-mercedes {
background: transparent;
color: var(--light-text-muted);
border: none;
border-radius: 0.75rem;
padding: 0.5rem 1rem;
font-weight: 500;
font-size: 0.875rem;
transition: color 0.2s ease, background-color 0.2s ease;
/* Entfernt: 'all 0.3s ease' für bessere Performance */
cursor: pointer;
position: relative;
}
.dark .filter-btn-mercedes {
color: var(--dark-text-muted);
}
.filter-btn-mercedes:hover {
color: var(--light-text-primary);
background: rgba(255, 255, 255, 0.1);
}
.dark .filter-btn-mercedes:hover {
color: var(--dark-text-primary);
background: rgba(255, 255, 255, 0.05);
}
.filter-btn-mercedes.active {
background: var(--mb-primary);
color: white;
/* Entfernt: box-shadow für bessere Performance */
}
/* Status Dots - RASPBERRY PI OPTIMIERT */
.status-dot {
width: 0.75rem;
height: 0.75rem;
border-radius: 50%;
display: inline-block;
position: relative;
}
.status-dot.status-online {
background: #10b981;
/* Entfernt: box-shadow für bessere Performance */
}
.status-dot.status-offline {
background: #ef4444;
/* Entfernt: box-shadow für bessere Performance */
}
/* Professional Accent Colors */
.bg-professional-accent {
background-color: var(--mb-accent);
}
/* Animate Spin Slow - RASPBERRY PI OPTIMIERT */
.animate-spin-slow {
animation: spin 4s linear infinite;
/* Verlangsamte Animation von 3s auf 4s für weniger CPU-Last */
}
@keyframes spin {
from {
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
}
/* GLASSMORPHISM KOMPLETT ENTFERNT FÜR RASPBERRY PI PERFORMANCE */
.glass-professional {
background: rgba(255, 255, 255, 0.98);
border: 1px solid rgba(255, 255, 255, 0.3);
border-radius: 1rem;
/* ENTFERNT: backdrop-filter, -webkit-backdrop-filter, box-shadow für Performance */
}
.dark .glass-professional {
background: rgba(30, 41, 59, 0.95);
border-color: rgba(255, 255, 255, 0.1);
/* ENTFERNT: box-shadow für Performance */
}
/* Enhanced Hover States - RASPBERRY PI OPTIMIERT */
.hover-lift {
transition: background-color 0.2s ease;
/* Entfernt: cubic-bezier transition für bessere Performance */
}
.hover-lift:hover {
background-color: var(--light-surface-hover);
/* Entfernt: transform, box-shadow für bessere Performance */
}
.dark .hover-lift:hover {
background-color: var(--dark-surface-hover);
/* Entfernt: box-shadow für bessere Performance */
}
/* Accessibility Enhancements */
@media (prefers-reduced-motion: reduce) {
* {
transition: none !important;
animation: none !important;
}
}
/* Focus States */
.focus-professional:focus {
outline: 2px solid var(--light-text-accent);
outline-offset: 2px;
box-shadow: 0 0 0 4px rgba(0, 115, 206, 0.15);
}
.dark .focus-professional:focus {
outline-color: #60a5fa;
box-shadow: 0 0 0 4px rgba(96, 165, 250, 0.15);
}

Binary file not shown.

1
static/css/professional-theme.min.css vendored Normal file

File diff suppressed because one or more lines are too long

Binary file not shown.

1
static/css/tailwind.min.css vendored Normal file

File diff suppressed because one or more lines are too long

Binary file not shown.

View File

@@ -0,0 +1,300 @@
/* UI Refinements - Subtle animations and improved components */
/* ===== DARK MODE TOGGLE - REFINED ===== */
.dark-mode-toggle {
position: relative;
width: 44px;
height: 24px;
padding: 0;
background: #e2e8f0;
border: none;
border-radius: 12px;
cursor: pointer;
transition: background-color 0.3s ease;
overflow: hidden;
flex-shrink: 0;
z-index: 10;
}
.dark .dark-mode-toggle {
background: #1e293b;
}
.dark-mode-toggle:hover {
background: #cbd5e1;
}
.dark .dark-mode-toggle:hover {
background: #334155;
}
.dark-mode-toggle-slider {
position: absolute;
top: 2px;
left: 2px;
width: 20px;
height: 20px;
background: white;
border-radius: 50%;
transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
display: flex;
align-items: center;
justify-content: center;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
}
.dark .dark-mode-toggle-slider {
transform: translateX(20px);
background: #475569;
}
.dark-mode-toggle-icon {
font-size: 12px;
color: #f59e0b;
transition: opacity 0.2s ease;
}
.dark .dark-mode-toggle-icon.sun {
opacity: 0;
}
.dark .dark-mode-toggle-icon.moon {
opacity: 1;
color: #60a5fa;
}
/* ===== SIMPLE NOTIFICATIONS ===== */
.notification-simple {
background: white;
border: 1px solid #e5e7eb;
border-radius: 8px;
padding: 12px 16px;
margin-bottom: 8px;
display: flex;
align-items: center;
justify-content: space-between;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
transition: opacity 0.2s ease, transform 0.2s ease;
}
.dark .notification-simple {
background: #1f2937;
border-color: #374151;
}
.notification-simple.notification-enter {
opacity: 0;
transform: translateX(100%);
}
.notification-simple.notification-enter-active {
opacity: 1;
transform: translateX(0);
}
.notification-simple.notification-exit {
opacity: 0;
transform: translateX(100%);
}
.notification-content {
display: flex;
align-items: center;
gap: 12px;
flex: 1;
}
.notification-icon {
font-size: 18px;
width: 20px;
text-align: center;
}
.notification-icon.success { color: #10b981; }
.notification-icon.error { color: #ef4444; }
.notification-icon.warning { color: #f59e0b; }
.notification-icon.info { color: #3b82f6; }
.notification-message {
font-size: 14px;
color: #374151;
}
.dark .notification-message {
color: #e5e7eb;
}
.notification-close {
background: none;
border: none;
color: #9ca3af;
cursor: pointer;
font-size: 20px;
line-height: 1;
padding: 0;
width: 24px;
height: 24px;
display: flex;
align-items: center;
justify-content: center;
border-radius: 4px;
transition: background-color 0.2s ease;
}
.notification-close:hover {
background-color: #f3f4f6;
color: #6b7280;
}
.dark .notification-close:hover {
background-color: #374151;
color: #d1d5db;
}
/* ===== SIMPLE LOADING SPINNER ===== */
.loading-spinner {
display: inline-block;
width: 20px;
height: 20px;
border: 2px solid #e5e7eb;
border-top-color: #3b82f6;
border-radius: 50%;
animation: simple-spin 0.8s linear infinite;
}
@keyframes simple-spin {
to { transform: rotate(360deg); }
}
/* ===== SKELETON LOADER ===== */
.skeleton {
background: #f3f4f6;
background-image: linear-gradient(90deg, #f3f4f6 0%, #e5e7eb 50%, #f3f4f6 100%);
background-size: 200% 100%;
animation: skeleton-shimmer 1.5s ease-in-out infinite;
border-radius: 4px;
}
.dark .skeleton {
background: #374151;
background-image: linear-gradient(90deg, #374151 0%, #4b5563 50%, #374151 100%);
}
@keyframes skeleton-shimmer {
0% { background-position: 200% 0; }
100% { background-position: -200% 0; }
}
.skeleton-text {
height: 16px;
margin-bottom: 8px;
border-radius: 4px;
}
.skeleton-title {
height: 24px;
width: 60%;
margin-bottom: 12px;
border-radius: 4px;
}
.skeleton-button {
height: 40px;
width: 120px;
border-radius: 6px;
}
/* ===== SUBTLE HOVER ANIMATIONS ===== */
.hover-lift {
transition: transform 0.2s ease, box-shadow 0.2s ease;
}
.hover-lift:hover {
transform: translateY(-2px);
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
}
.hover-scale {
transition: transform 0.2s ease;
}
.hover-scale:hover {
transform: scale(1.02);
}
/* ===== FADE IN ANIMATION ===== */
.fade-in {
animation: fadeIn 0.3s ease-in;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
/* ===== BUTTON PRESS EFFECT ===== */
.btn-press {
transition: transform 0.1s ease;
}
.btn-press:active {
transform: scale(0.98);
}
/* ===== SUBTLE PULSE FOR ACTIVE STATUS ===== */
.status-pulse {
position: relative;
}
.status-pulse::before {
content: '';
position: absolute;
top: 50%;
left: 50%;
width: 100%;
height: 100%;
border-radius: 50%;
background: currentColor;
opacity: 0.3;
transform: translate(-50%, -50%);
animation: subtle-pulse 2s ease-in-out infinite;
}
@keyframes subtle-pulse {
0%, 100% { transform: translate(-50%, -50%) scale(1); opacity: 0.3; }
50% { transform: translate(-50%, -50%) scale(1.2); opacity: 0; }
}
/* ===== SIMPLE PROGRESS BAR ===== */
.progress-bar {
height: 4px;
background: #e5e7eb;
border-radius: 2px;
overflow: hidden;
}
.progress-bar-fill {
height: 100%;
background: #3b82f6;
transition: width 0.3s ease;
}
/* ===== NAVBAR ICON ADJUSTMENTS ===== */
.nav-item i {
font-size: 18px;
width: 20px;
height: 20px;
display: inline-flex;
align-items: center;
justify-content: center;
}
/* Mobile Menu Icons */
.mobile-nav-item i {
font-size: 18px;
width: 20px;
height: 20px;
display: inline-flex;
align-items: center;
justify-content: center;
}

Binary file not shown.

300
static/css/ui-refinements.min.css vendored Normal file
View File

@@ -0,0 +1,300 @@
/* UI Refinements - Subtle animations and improved components */
/* ===== DARK MODE TOGGLE - REFINED ===== */
.dark-mode-toggle {
position: relative;
width: 44px;
height: 24px;
padding: 0;
background: #e2e8f0;
border: none;
border-radius: 12px;
cursor: pointer;
transition: background-color 0.3s ease;
overflow: hidden;
flex-shrink: 0;
z-index: 10;
}
.dark .dark-mode-toggle {
background: #1e293b;
}
.dark-mode-toggle:hover {
background: #cbd5e1;
}
.dark .dark-mode-toggle:hover {
background: #334155;
}
.dark-mode-toggle-slider {
position: absolute;
top: 2px;
left: 2px;
width: 20px;
height: 20px;
background: white;
border-radius: 50%;
transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
display: flex;
align-items: center;
justify-content: center;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
}
.dark .dark-mode-toggle-slider {
transform: translateX(20px);
background: #475569;
}
.dark-mode-toggle-icon {
font-size: 12px;
color: #f59e0b;
transition: opacity 0.2s ease;
}
.dark .dark-mode-toggle-icon.sun {
opacity: 0;
}
.dark .dark-mode-toggle-icon.moon {
opacity: 1;
color: #60a5fa;
}
/* ===== SIMPLE NOTIFICATIONS ===== */
.notification-simple {
background: white;
border: 1px solid #e5e7eb;
border-radius: 8px;
padding: 12px 16px;
margin-bottom: 8px;
display: flex;
align-items: center;
justify-content: space-between;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
transition: opacity 0.2s ease, transform 0.2s ease;
}
.dark .notification-simple {
background: #1f2937;
border-color: #374151;
}
.notification-simple.notification-enter {
opacity: 0;
transform: translateX(100%);
}
.notification-simple.notification-enter-active {
opacity: 1;
transform: translateX(0);
}
.notification-simple.notification-exit {
opacity: 0;
transform: translateX(100%);
}
.notification-content {
display: flex;
align-items: center;
gap: 12px;
flex: 1;
}
.notification-icon {
font-size: 18px;
width: 20px;
text-align: center;
}
.notification-icon.success { color: #10b981; }
.notification-icon.error { color: #ef4444; }
.notification-icon.warning { color: #f59e0b; }
.notification-icon.info { color: #3b82f6; }
.notification-message {
font-size: 14px;
color: #374151;
}
.dark .notification-message {
color: #e5e7eb;
}
.notification-close {
background: none;
border: none;
color: #9ca3af;
cursor: pointer;
font-size: 20px;
line-height: 1;
padding: 0;
width: 24px;
height: 24px;
display: flex;
align-items: center;
justify-content: center;
border-radius: 4px;
transition: background-color 0.2s ease;
}
.notification-close:hover {
background-color: #f3f4f6;
color: #6b7280;
}
.dark .notification-close:hover {
background-color: #374151;
color: #d1d5db;
}
/* ===== SIMPLE LOADING SPINNER ===== */
.loading-spinner {
display: inline-block;
width: 20px;
height: 20px;
border: 2px solid #e5e7eb;
border-top-color: #3b82f6;
border-radius: 50%;
animation: simple-spin 0.8s linear infinite;
}
@keyframes simple-spin {
to { transform: rotate(360deg); }
}
/* ===== SKELETON LOADER ===== */
.skeleton {
background: #f3f4f6;
background-image: linear-gradient(90deg, #f3f4f6 0%, #e5e7eb 50%, #f3f4f6 100%);
background-size: 200% 100%;
animation: skeleton-shimmer 1.5s ease-in-out infinite;
border-radius: 4px;
}
.dark .skeleton {
background: #374151;
background-image: linear-gradient(90deg, #374151 0%, #4b5563 50%, #374151 100%);
}
@keyframes skeleton-shimmer {
0% { background-position: 200% 0; }
100% { background-position: -200% 0; }
}
.skeleton-text {
height: 16px;
margin-bottom: 8px;
border-radius: 4px;
}
.skeleton-title {
height: 24px;
width: 60%;
margin-bottom: 12px;
border-radius: 4px;
}
.skeleton-button {
height: 40px;
width: 120px;
border-radius: 6px;
}
/* ===== SUBTLE HOVER ANIMATIONS ===== */
.hover-lift {
transition: transform 0.2s ease, box-shadow 0.2s ease;
}
.hover-lift:hover {
transform: translateY(-2px);
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
}
.hover-scale {
transition: transform 0.2s ease;
}
.hover-scale:hover {
transform: scale(1.02);
}
/* ===== FADE IN ANIMATION ===== */
.fade-in {
animation: fadeIn 0.3s ease-in;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
/* ===== BUTTON PRESS EFFECT ===== */
.btn-press {
transition: transform 0.1s ease;
}
.btn-press:active {
transform: scale(0.98);
}
/* ===== SUBTLE PULSE FOR ACTIVE STATUS ===== */
.status-pulse {
position: relative;
}
.status-pulse::before {
content: '';
position: absolute;
top: 50%;
left: 50%;
width: 100%;
height: 100%;
border-radius: 50%;
background: currentColor;
opacity: 0.3;
transform: translate(-50%, -50%);
animation: subtle-pulse 2s ease-in-out infinite;
}
@keyframes subtle-pulse {
0%, 100% { transform: translate(-50%, -50%) scale(1); opacity: 0.3; }
50% { transform: translate(-50%, -50%) scale(1.2); opacity: 0; }
}
/* ===== SIMPLE PROGRESS BAR ===== */
.progress-bar {
height: 4px;
background: #e5e7eb;
border-radius: 2px;
overflow: hidden;
}
.progress-bar-fill {
height: 100%;
background: #3b82f6;
transition: width 0.3s ease;
}
/* ===== NAVBAR ICON ADJUSTMENTS ===== */
.nav-item i {
font-size: 18px;
width: 20px;
height: 20px;
display: inline-flex;
align-items: center;
justify-content: center;
}
/* Mobile Menu Icons */
.mobile-nav-item i {
font-size: 18px;
width: 20px;
height: 20px;
display: inline-flex;
align-items: center;
justify-content: center;
}

Binary file not shown.