/* CAE Mesh Generator - Main Styles */ :root { --primary-color: #0d6efd; --secondary-color: #6c757d; --success-color: #198754; --warning-color: #ffc107; --danger-color: #dc3545; --info-color: #0dcaf0; --light-color: #f8f9fa; --dark-color: #212529; --sidebar-width: 280px; --header-height: 60px; } /* Global Styles */ body { font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; background-color: #f5f6fa; line-height: 1.6; } .container-fluid { padding: 0; } /* Navigation */ .navbar { box-shadow: 0 2px 4px rgba(0,0,0,0.1); z-index: 1000; } .navbar-brand { font-weight: 600; font-size: 1.25rem; } /* Sidebar */ .sidebar { background: white; min-height: calc(100vh - 56px); border-right: 1px solid #dee2e6; padding: 0; position: sticky; top: 56px; } .sidebar-content { padding: 1.5rem; } .sidebar-title { color: var(--dark-color); font-weight: 600; margin-bottom: 1.5rem; padding-bottom: 0.5rem; border-bottom: 2px solid var(--primary-color); } /* Process Steps */ .process-steps { margin-bottom: 2rem; } .step-item { display: flex; align-items: flex-start; margin-bottom: 1.5rem; padding: 1rem; border-radius: 8px; transition: all 0.3s ease; cursor: pointer; } .step-item:hover { background-color: #f8f9fa; transform: translateX(5px); } .step-item.active { background-color: #e3f2fd; border-left: 4px solid var(--primary-color); } .step-item.completed { background-color: #e8f5e8; border-left: 4px solid var(--success-color); } .step-icon { width: 40px; height: 40px; border-radius: 50%; background-color: var(--light-color); display: flex; align-items: center; justify-content: center; margin-right: 1rem; flex-shrink: 0; transition: all 0.3s ease; } .step-item.active .step-icon { background-color: var(--primary-color); color: white; } .step-item.completed .step-icon { background-color: var(--success-color); color: white; } .step-content h6 { margin-bottom: 0.25rem; font-weight: 600; } .step-content p { margin-bottom: 0; font-size: 0.875rem; } /* System Status */ .system-status { background-color: #f8f9fa; padding: 1rem; border-radius: 8px; border: 1px solid #dee2e6; } .status-item { display: flex; justify-content: space-between; align-items: center; margin-bottom: 0.5rem; } .status-item:last-child { margin-bottom: 0; } .status-label { font-size: 0.875rem; color: var(--secondary-color); } .status-value { font-size: 0.875rem; font-weight: 500; } /* Main Content */ .main-content { padding: 2rem; background-color: #f5f6fa; } .content-header { margin-bottom: 2rem; } .content-header h2 { color: var(--dark-color); font-weight: 600; margin-bottom: 0.5rem; } .content-section { margin-bottom: 2rem; } /* Cards */ .card { border: none; border-radius: 12px; box-shadow: 0 2px 8px rgba(0,0,0,0.08); transition: all 0.3s ease; } .card:hover { box-shadow: 0 4px 16px rgba(0,0,0,0.12); } .card-header { background-color: white; border-bottom: 1px solid #f0f0f0; border-radius: 12px 12px 0 0 !important; padding: 1.25rem 1.5rem; } .card-header h5 { color: var(--dark-color); font-weight: 600; } .card-body { padding: 1.5rem; } /* Upload Area */ .upload-area { border: 2px dashed #dee2e6; border-radius: 12px; padding: 3rem 2rem; text-align: center; transition: all 0.3s ease; cursor: pointer; } .upload-area:hover { border-color: var(--primary-color); background-color: #f8f9ff; } .upload-area.dragover { border-color: var(--primary-color); background-color: #e3f2fd; transform: scale(1.02); } .upload-icon { font-size: 3rem; color: var(--primary-color); margin-bottom: 1rem; } .upload-content h6 { color: var(--dark-color); font-weight: 600; margin-bottom: 0.5rem; } /* File Info */ .file-info { background-color: #f8f9fa; padding: 1rem; border-radius: 8px; border: 1px solid #dee2e6; } /* Progress */ .progress-container { margin-bottom: 1.5rem; } .progress { height: 12px; border-radius: 6px; background-color: #f0f0f0; } .progress-bar { border-radius: 6px; font-size: 0.75rem; line-height: 12px; } .progress-info { font-size: 0.875rem; } /* Processing Log */ .processing-log { margin-top: 1.5rem; } .log-container { background-color: #1e1e1e; color: #ffffff; padding: 1rem; border-radius: 8px; height: 200px; overflow-y: auto; font-family: 'Courier New', monospace; font-size: 0.875rem; line-height: 1.4; } .log-entry { margin-bottom: 0.25rem; padding: 0.25rem 0; } .log-entry.info { color: #4fc3f7; } .log-entry.success { color: #81c784; } .log-entry.warning { color: #ffb74d; } .log-entry.error { color: #e57373; } .log-timestamp { color: #9e9e9e; margin-right: 0.5rem; } /* Processing Controls */ .processing-controls { display: flex; gap: 0.5rem; } .processing-controls .btn { flex: 1; max-width: 150px; } /* Statistics Grid */ .stats-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 1.5rem; } .stat-item { text-align: center; padding: 1rem; background-color: #f8f9fa; border-radius: 8px; border: 1px solid #dee2e6; transition: all 0.3s ease; } .stat-item:hover { transform: translateY(-2px); box-shadow: 0 4px 12px rgba(0,0,0,0.1); } .stat-value { font-size: 2rem; font-weight: 700; color: var(--primary-color); margin-bottom: 0.5rem; } .stat-label { font-size: 0.875rem; color: var(--secondary-color); font-weight: 500; } /* Quality Status */ .quality-status { text-align: center; margin-bottom: 1rem; } .quality-badge .badge { font-size: 1rem; padding: 0.5rem 1rem; border-radius: 20px; } .quality-details { font-size: 0.875rem; } .quality-metric { display: flex; justify-content: space-between; align-items: center; padding: 0.5rem 0; border-bottom: 1px solid #f0f0f0; } .quality-metric:last-child { border-bottom: none; } .metric-label { color: var(--secondary-color); } .metric-value { font-weight: 600; } .metric-value.good { color: var(--success-color); } .metric-value.warning { color: var(--warning-color); } .metric-value.danger { color: var(--danger-color); } /* Visualization */ .visualization-container { position: relative; min-height: 400px; } .mesh-visualization { width: 100%; height: 400px; border: 1px solid #dee2e6; border-radius: 8px; background-color: #f8f9fa; display: flex; align-items: center; justify-content: center; overflow: hidden; } .visualization-placeholder { text-align: center; color: var(--secondary-color); } .visualization-placeholder-icon { font-size: 4rem; margin-bottom: 1rem; opacity: 0.5; } /* Export Options */ .export-options { margin-top: 1rem; } .export-options .btn { margin-bottom: 0.5rem; } /* Footer */ .footer { background-color: white; border-top: 1px solid #dee2e6; padding: 2rem 0; margin-top: auto; } .footer p { margin-bottom: 0; color: var(--secondary-color); font-size: 0.875rem; } /* Responsive Design */ @media (max-width: 768px) { .sidebar { position: static; min-height: auto; border-right: none; border-bottom: 1px solid #dee2e6; } .main-content { padding: 1rem; } .stats-grid { grid-template-columns: 1fr; } .processing-controls { flex-direction: column; } .processing-controls .btn { max-width: none; margin-bottom: 0.5rem; } .export-options .row > div { margin-bottom: 0.5rem; } } @media (max-width: 576px) { .content-header h2 { font-size: 1.5rem; } .upload-area { padding: 2rem 1rem; } .upload-icon { font-size: 2rem; } .stat-value { font-size: 1.5rem; } .mesh-visualization { height: 300px; } } /* Animation Classes */ .fade-in { animation: fadeIn 0.5s ease-in; } @keyframes fadeIn { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } } .slide-in { animation: slideIn 0.3s ease-out; } @keyframes slideIn { from { transform: translateX(-100%); } to { transform: translateX(0); } } /* Loading States */ .loading { position: relative; overflow: hidden; } .loading::after { content: ''; position: absolute; top: 0; left: -100%; width: 100%; height: 100%; background: linear-gradient(90deg, transparent, rgba(255,255,255,0.4), transparent); animation: loading 1.5s infinite; } @keyframes loading { 0% { left: -100%; } 100% { left: 100%; } } /* Utility Classes */ .text-truncate { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .shadow-sm { box-shadow: 0 2px 4px rgba(0,0,0,0.1) !important; } .shadow { box-shadow: 0 4px 8px rgba(0,0,0,0.15) !important; } .shadow-lg { box-shadow: 0 8px 16px rgba(0,0,0,0.2) !important; }