/* Main application styles */ :root { --primary-color: #0d6efd; --secondary-color: #6c757d; --success-color: #198754; --danger-color: #dc3545; --warning-color: #ffc107; --info-color: #0dcaf0; --light-color: #f8f9fa; --dark-color: #212529; } /* Custom scrollbar */ ::-webkit-scrollbar { width: 8px; } ::-webkit-scrollbar-track { background: #f1f1f1; } ::-webkit-scrollbar-thumb { background: #888; border-radius: 4px; } ::-webkit-scrollbar-thumb:hover { background: #555; } /* Body and layout */ body { font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; line-height: 1.6; } /* Navigation */ .navbar-brand { font-weight: bold; } .navbar-nav .nav-link { padding: 0.5rem 1rem; border-radius: 0.25rem; margin: 0 0.1rem; transition: background-color 0.2s; } .navbar-nav .nav-link:hover { background-color: rgba(255, 255, 255, 0.1); } /* Cards */ .card { border: none; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); transition: box-shadow 0.2s; } .card:hover { box-shadow: 0 4px 8px rgba(0, 0, 0, 0.15); } .card-header { background-color: rgba(0, 0, 0, 0.02); border-bottom: 1px solid rgba(0, 0, 0, 0.1); } /* Buttons */ .btn { border-radius: 0.375rem; font-weight: 500; transition: all 0.2s; } .btn:focus { box-shadow: 0 0 0 0.2rem rgba(13, 110, 253, 0.25); } /* Forms */ .form-control:focus { border-color: var(--primary-color); box-shadow: 0 0 0 0.2rem rgba(13, 110, 253, 0.25); } .input-group-text { background-color: rgba(13, 110, 253, 0.1); border-color: var(--primary-color); color: var(--primary-color); } /* Badges */ .badge { font-weight: 500; } /* Loading animations */ .spinner-border-sm { width: 1rem; height: 1rem; } .loading-dots { position: relative; } .loading-dots::after { content: '...'; animation: dots 1.5s steps(5, end) infinite; } @keyframes dots { 0%, 20% { color: rgba(0, 0, 0, 0); text-shadow: 0.25em 0 0 rgba(0, 0, 0, 0), 0.5em 0 0 rgba(0, 0, 0, 0); } 40% { color: black; text-shadow: 0.25em 0 0 rgba(0, 0, 0, 0), 0.5em 0 0 rgba(0, 0, 0, 0); } 60% { text-shadow: 0.25em 0 0 black, 0.5em 0 0 rgba(0, 0, 0, 0); } 80%, 100% { text-shadow: 0.25em 0 0 black, 0.5em 0 0 black; } } /* Script execution status */ .status-running { color: var(--info-color); } .status-completed { color: var(--success-color); } .status-failed { color: var(--danger-color); } .status-stopped { color: var(--warning-color); } /* Code blocks */ .code-block { background-color: #f8f9fa; border: 1px solid #e9ecef; border-radius: 0.375rem; padding: 1rem; font-family: 'Courier New', monospace; font-size: 0.875rem; overflow-x: auto; } /* Logs */ .log-container { background-color: #000; color: #fff; padding: 1rem; border-radius: 0.375rem; font-family: 'Courier New', monospace; font-size: 0.875rem; max-height: 400px; overflow-y: auto; overflow-x: auto; white-space: nowrap !important; } .log-entry { margin-bottom: 0.25rem; white-space: pre !important; word-wrap: normal !important; overflow-wrap: normal !important; } .log-entry.log-error { color: #ff6b6b; } .log-entry.log-warning { color: #feca57; } .log-entry.log-info { color: #48dbfb; } /* Progress bars */ .progress { height: 0.5rem; } /* Tables */ .table { border-radius: 0.375rem; overflow: hidden; } .table thead th { border-bottom: 2px solid var(--primary-color); color: var(--primary-color); font-weight: 600; } /* Footer */ footer { margin-top: auto; } /* Utility classes */ .text-truncate { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .cursor-pointer { cursor: pointer; } /* Responsive adjustments */ @media (max-width: 768px) { .navbar-nav { text-align: center; } .card-columns { column-count: 1; } .table-responsive { border: none; } } /* Custom components */ .script-parameter { border: 1px solid #dee2e6; border-radius: 0.375rem; padding: 0.75rem; margin-bottom: 0.5rem; background-color: #f8f9fa; } .script-parameter label { font-weight: 600; color: #495057; } .project-selector { background-color: rgba(13, 110, 253, 0.1); border: 1px solid var(--primary-color); border-radius: 0.375rem; padding: 0.5rem; } .conda-env-indicator { display: inline-block; width: 8px; height: 8px; border-radius: 50%; margin-right: 0.5rem; } .conda-env-indicator.available { background-color: var(--success-color); } .conda-env-indicator.unavailable { background-color: var(--danger-color); } /* Advanced notification styles */ .alert .alert-text { display: block; margin-bottom: 0; } .alert .btn-sm { font-size: 0.8rem; padding: 0.25rem 0.75rem; } .alert .btn-outline-info { border-color: rgba(13, 202, 240, 0.5); color: #0dcaf0; } .alert .btn-outline-info:hover { background-color: #0dcaf0; color: white; } /* SIDEL Logo Styles */ .sidel-logo { max-height: 50px; width: auto; filter: brightness(1.1); transition: filter 0.3s ease; content: url('/static/images/SIDEL.png'); } .navbar-brand .sidel-logo { max-height: 40px; } .sidel-logo:hover { filter: brightness(1.3); } /* Theme-specific logo adjustments */ .theme-dark .sidel-logo { content: url('/static/images/SIDELw.png'); filter: brightness(1.0) contrast(1.0); } .theme-light .sidel-logo { content: url('/static/images/SIDEL.png'); filter: brightness(1.0) contrast(1.0); } /* Dashboard Card Styles - Pastel Colors */ .dashboard-card-blue { background: linear-gradient(135deg, #e3f2fd 0%, #bbdefb 100%); color: #1565c0; border: none; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.07); transition: transform 0.2s ease, box-shadow 0.2s ease; } .dashboard-card-blue:hover { transform: translateY(-2px); box-shadow: 0 6px 12px rgba(0, 0, 0, 0.1); } .dashboard-card-green { background: linear-gradient(135deg, #e8f5e8 0%, #c8e6c9 100%); color: #2e7d32; border: none; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.07); transition: transform 0.2s ease, box-shadow 0.2s ease; } .dashboard-card-green:hover { transform: translateY(-2px); box-shadow: 0 6px 12px rgba(0, 0, 0, 0.1); } .dashboard-card-purple { background: linear-gradient(135deg, #f3e5f5 0%, #e1bee7 100%); color: #7b1fa2; border: none; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.07); transition: transform 0.2s ease, box-shadow 0.2s ease; } .dashboard-card-purple:hover { transform: translateY(-2px); box-shadow: 0 6px 12px rgba(0, 0, 0, 0.1); } .dashboard-card-orange { background: linear-gradient(135deg, #fff3e0 0%, #ffcc80 100%); color: #ef6c00; border: none; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.07); transition: transform 0.2s ease, box-shadow 0.2s ease; } .dashboard-card-orange:hover { transform: translateY(-2px); box-shadow: 0 6px 12px rgba(0, 0, 0, 0.1); } /* Dark theme adjustments for dashboard cards */ .theme-dark .dashboard-card-blue { background: linear-gradient(135deg, #1e3a8a 0%, #3b82f6 100%); color: #dbeafe; } .theme-dark .dashboard-card-green { background: linear-gradient(135deg, #166534 0%, #22c55e 100%); color: #dcfce7; } .theme-dark .dashboard-card-purple { background: linear-gradient(135deg, #581c87 0%, #a855f7 100%); color: #f3e8ff; } .theme-dark .dashboard-card-orange { background: linear-gradient(135deg, #9a3412 0%, #f97316 100%); color: #fed7aa; }