diff --git a/backend/database/myp.db b/backend/database/myp.db index 440f2f07..15c7774b 100644 Binary files a/backend/database/myp.db and b/backend/database/myp.db differ diff --git a/backend/database/myp.db-wal b/backend/database/myp.db-wal index d8fc0687..12c8ca44 100644 Binary files a/backend/database/myp.db-wal and b/backend/database/myp.db-wal differ diff --git a/backend/logs/app/app.log b/backend/logs/app/app.log index a4e83ea6..ad59ce79 100644 --- a/backend/logs/app/app.log +++ b/backend/logs/app/app.log @@ -3654,3 +3654,7 @@ WHERE jobs.status = ?) AS anon_1] 2025-06-03 23:45:54 - [app] app - [INFO] INFO - 💡 Kiosk-Browser sollte http://127.0.0.1:5000 verwenden 2025-06-03 23:45:54 - [app] app - [INFO] INFO - ✅ IPv6-Probleme behoben durch IPv4-only Binding 2025-06-03 23:45:54 - [app] app - [INFO] INFO - ✅ Performance optimiert für Kiosk-Betrieb +2025-06-03 23:49:52 - [app] app - [INFO] INFO - Admin-Check für Funktion admin_page: User authenticated: True, User ID: 1, Is Admin: True +2025-06-03 23:49:53 - [app] app - [INFO] INFO - Admin-Check für Funktion api_admin_system_health: User authenticated: True, User ID: 1, Is Admin: True +2025-06-03 23:50:23 - [app] app - [INFO] INFO - Admin-Check für Funktion api_admin_error_recovery_status: User authenticated: True, User ID: 1, Is Admin: True +2025-06-03 23:50:23 - [app] app - [INFO] INFO - Admin-Check für Funktion api_admin_system_health: User authenticated: True, User ID: 1, Is Admin: True diff --git a/backend/logs/printer_monitor/printer_monitor.log b/backend/logs/printer_monitor/printer_monitor.log index a627b0bc..18c7f73c 100644 --- a/backend/logs/printer_monitor/printer_monitor.log +++ b/backend/logs/printer_monitor/printer_monitor.log @@ -3729,3 +3729,11 @@ 2025-06-03 23:46:18 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Teste IP 5/6: 192.168.0.102 2025-06-03 23:46:24 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Teste IP 6/6: 192.168.0.105 2025-06-03 23:46:30 - [printer_monitor] printer_monitor - [INFO] INFO - ✅ Steckdosen-Erkennung abgeschlossen: 0/6 Steckdosen gefunden in 36.0s +2025-06-03 23:49:53 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus... +2025-06-03 23:49:53 - [printer_monitor] printer_monitor - [INFO] INFO - ℹ️ Keine aktiven Drucker gefunden +2025-06-03 23:49:53 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus... +2025-06-03 23:49:53 - [printer_monitor] printer_monitor - [INFO] INFO - ℹ️ Keine aktiven Drucker gefunden +2025-06-03 23:50:23 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus... +2025-06-03 23:50:23 - [printer_monitor] printer_monitor - [INFO] INFO - ℹ️ Keine aktiven Drucker gefunden +2025-06-03 23:50:23 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus... +2025-06-03 23:50:23 - [printer_monitor] printer_monitor - [INFO] INFO - ℹ️ Keine aktiven Drucker gefunden diff --git a/backend/logs/queue_manager/queue_manager.log b/backend/logs/queue_manager/queue_manager.log index 563b4be0..d043efdd 100644 --- a/backend/logs/queue_manager/queue_manager.log +++ b/backend/logs/queue_manager/queue_manager.log @@ -190,3 +190,7 @@ 2025-06-03 23:45:54 - [queue_manager] queue_manager - [INFO] INFO - ✅ Queue-Manager erfolgreich gestartet 2025-06-03 23:45:54 - [queue_manager] queue_manager - [INFO] INFO - 🔍 Überprüfe 8 wartende Jobs... 2025-06-03 23:48:34 - [queue_manager] queue_manager - [INFO] INFO - 🔍 Überprüfe 8 wartende Jobs... +2025-06-03 23:51:14 - [queue_manager] queue_manager - [INFO] INFO - 🔍 Überprüfe 8 wartende Jobs... +2025-06-03 23:53:54 - [queue_manager] queue_manager - [INFO] INFO - 🔍 Überprüfe 8 wartende Jobs... +2025-06-03 23:56:34 - [queue_manager] queue_manager - [INFO] INFO - 🔍 Überprüfe 8 wartende Jobs... +2025-06-03 23:59:14 - [queue_manager] queue_manager - [INFO] INFO - 🔍 Überprüfe 8 wartende Jobs... diff --git a/backend/static/css/ui-refinements.css b/backend/static/css/ui-refinements.css new file mode 100644 index 00000000..b293b0ae --- /dev/null +++ b/backend/static/css/ui-refinements.css @@ -0,0 +1,298 @@ +/* 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; +} + +.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; +} \ No newline at end of file diff --git a/backend/templates/base.html b/backend/templates/base.html index 97674c84..faad1113 100644 --- a/backend/templates/base.html +++ b/backend/templates/base.html @@ -301,57 +301,43 @@