/* Status Messages and Notifications */ /* Toast notifications, alerts, and status indicators */ .status-container { position: fixed; top: 20px; right: 20px; z-index: var(--z-toast); max-width: 400px; pointer-events: none; /* Allow clicks to pass through container */ } .status-message { padding: 12px 16px; margin-bottom: 10px; border-radius: var(--border-radius); font-size: var(--font-size-base); animation: slideIn 0.3s ease-out; pointer-events: auto; /* Allow interaction with individual messages */ cursor: pointer; /* Show it's clickable for dismissal */ } .status-message.success { background-color: #d4edda; color: #155724; border: 1px solid #c3e6cb; } .status-message.error { background-color: #f8d7da; color: #721c24; border: 1px solid #f5c6cb; } .status-message.info { background-color: #cce7ff; color: #004085; border: 1px solid #b3d7ff; } .status-message.warning { background-color: #fff3cd; color: #856404; border: 1px solid #ffeeba; } @keyframes slideIn { from { transform: translateX(100%); opacity: 0; } to { transform: translateX(0); opacity: 1; } } /* QR Code Generation Status */ .qr-code-group.generating::after { content: 'Generating QR Code...'; position: absolute; top: 0; right: 0; font-size: var(--font-size-xs); color: var(--primary-color); background: white; padding: 2px 8px; border-radius: 3px; box-shadow: var(--shadow-sm); } /* QR code stored indicator */ .qr-status { font-size: var(--font-size-xs); margin-top: 5px; } .qr-status.stored { color: var(--success-color); } .qr-status.pending { color: var(--warning-color); } /* Loading Messages */ .loading-message, .empty-message { text-align: center; padding: 40px 20px; color: #666; font-style: italic; background-color: #f8f9fa; border-radius: var(--border-radius); margin-top: 15px; } .loading-message { background-color: #e3f2fd; color: #1976d2; } /* Processing Status */ .processing-status { padding: 1rem; background: #f8f9fa; border-radius: var(--border-radius); text-align: center; margin-bottom: 1.5rem; animation: pulse 1.5s ease-in-out infinite; } @keyframes pulse { 0% { opacity: 0.8; } 50% { opacity: 1; } 100% { opacity: 0.8; } } /* Progress Bars */ .progress-bar-container { margin: 1.5rem 0; } .progress-bar { height: 24px; background: #e9ecef; border-radius: 12px; overflow: hidden; } .progress-bar-fill { height: 100%; background: linear-gradient(90deg, var(--primary-color) 0%, #45a049 100%); transition: width 0.3s ease; width: 0%; } .progress-text { text-align: center; margin-top: 0.5rem; font-weight: 500; } /* Status Icons */ .status-icon { display: inline-block; width: 20px; height: 20px; line-height: 20px; text-align: center; border-radius: 50%; font-weight: bold; } .status-icon.success { background: var(--success-color); color: white; } .status-icon.error { background: var(--error-color); color: white; } .status-icon.warning { background: var(--warning-color); color: #212529; } .status-icon.info { background: var(--info-color); color: white; } /* Spinner */ .progress-spinner { display: inline-block; width: 12px; height: 12px; border: 2px solid #f3f3f3; border-top: 2px solid #6c757d; border-radius: 50%; animation: spin 1s linear infinite; } @keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } }