:root { /* Core */ --bg-color: #000000; --surface: #000000; --card-bg: #000000; --text-color: #e6eef6; --muted-text: #9aa4ad; /* Accent / interactive */ --primary-color: #ffffff; --secondary-color: #2b2b2b; --primary-hover: #ffffff3d; --success-color: #26c281; --error-color: #ff6b6b; --cancel-color: #f39c12; /* Orange for cancelled */ /* Borders / dividers */ --border-color: rgba(255, 255, 255, 0.1); --divider-color: rgba(255, 255, 255, 0.06); --font-family: 'Inter', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; } /* Page */ html { box-sizing: border-box; } *, *:before, *:after { box-sizing: inherit; } body { font-family: var(--font-family); background-color: var(--bg-color); color: var(--text-color); margin: 0; line-height: 1.5; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } /* --- START: Login View Styles --- */ #login-container { display: flex; /* Initially hidden/shown by JS */ flex-direction: column; justify-content: center; align-items: center; height: 100vh; text-align: center; padding: 1rem; } .login-box { background: var(--card-bg); padding: 2.5rem 3rem; border-radius: 10px; border: 1px solid var(--border-color); } #login-container h1 { font-family: serif; font-weight: lighter; font-size: 3rem; margin: 0 0 0.5rem 0; } #login-container p { font-size: 1.1rem; color: var(--muted-text); margin-bottom: 2rem; } .login-button-style { background-color: var(--primary-color); color: var(--bg-color); border: 1px solid var(--primary-color); padding: 0.7rem 2.5rem; font-size: 1rem; font-weight: 600; border-radius: 5px; cursor: pointer; transition: background-color 0.15s ease, color 0.15s ease, transform 0.1s ease; } .login-button-style:hover { background-color: transparent; color: var(--primary-color); transform: scale(1.03); } /* --- END: Login View Styles --- */ /* Container */ .container { width: 100%; max-width: 92vw; margin: 0 auto; background: var(--card-bg); border-radius: 10px; padding: 1.5rem; border: 1px solid var(--border-color); margin-top: 1em; } @media (max-width: 768px) { .container { padding: 1rem; border: none; border-radius: 0; } } /* Header */ header { text-align: center; margin-bottom: 1.5rem; padding-bottom: 1rem; border-bottom: 1px solid var(--divider-color); } header h1 { margin: 0 0 0.25rem 0; font-size: 3rem; font-family: serif; font-weight: lighter; } header p { margin: 0; color: var(--muted-text); font-size: 1rem; } .header-actions { position: absolute; top: 1.5rem; right: 1.5rem; display: flex; align-items: center; gap: 1rem; } .header-actions div { position: fixed; left: 0; bottom: 0em; width: 100vw; padding: 2em; padding-top: 5em; text-align: center; background-color: rgb(0, 0, 0); background: linear-gradient(0deg, rgb(0, 0, 0) 30%, rgba(0, 0, 0, 0) 100%); } .user-info { font-size: 0.9rem; color: var(--muted-text); } .settings-link { font-size: 0.9rem; margin-left: 0.5em; text-decoration: none; color: var(--muted-text); transition: color 0.2s ease; } .settings-link:hover { color: var(--text-color); } /* --- Form and Input Styles --- */ .processor-section { margin-bottom: 2rem; } .upload-form fieldset { border: 1px solid var(--border-color); border-radius: 8px; padding: 1.5rem; margin: 0; background: transparent; } .upload-form legend { padding: 0 0.5rem; font-weight: 500; color: var(--primary-color); } .upload-form legend h2 { margin: 0; font-size: 1.25rem; } /* File input */ .file-input-wrapper { position: relative; display: flex; align-items: center; gap: 1rem; margin-top: 1rem; } input[type="file"] { opacity: 0; position: absolute; width: 100%; height: 100%; cursor: pointer; inset: 0; } .file-input-label { background-color: rgba(255,255,255,0.05); color: var(--muted-text); padding: 0.5rem 1rem; border-radius: 5px; cursor: pointer; transition: background-color 0.15s ease; font-weight: 500; border: 1px solid rgba(255,255,255,0.1); white-space: nowrap; } .file-input-label:hover { background-color: rgba(255,255,255,0.1); } .file-name { font-size: 0.9rem; font-style: italic; color: var(--muted-text); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0; max-width: 15em; } /* Form Controls (for dropdowns) */ .form-control { margin-bottom: 1rem; } .form-control label { display: block; font-size: 0.9rem; font-weight: 500; color: var(--muted-text); margin-bottom: 0.4rem; } .form-control select { width: 100%; background-color: rgba(255,255,255,0.05); color: var(--text-color); padding: 0.5rem 0.8rem; border-radius: 5px; border: 1px solid var(--border-color); font-family: inherit; font-size: 0.95rem; -webkit-appearance: none; -moz-appearance: none; appearance: none; background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%239aa4ad' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"); background-repeat: no-repeat; background-position: right 0.7rem center; background-size: 1em; cursor: pointer; transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } .form-control select:focus { outline: none; border-color: var(--primary-color); box-shadow: 0 0 0 2px rgba(0, 180, 255, 0.2); } .actions-group { display: grid; grid-template-columns: repeat(4, 1fr); /* 3 columns for wide screens */ gap: 1.5rem; margin-top: 1.5rem; } .action-fieldset { /* Inherits border/padding from the generic fieldset style */ display: flex; flex-direction: column; } .action-description { color: var(--muted-text); font-size: 0.9rem; margin-bottom: 1rem; flex-grow: 1; /* Helps align buttons if one section has more text */ } .main-action-button { display: block; width: 100%; background: transparent; border: 1px solid var(--border-color); color: var(--text-color); padding: 0.65rem 1rem; font-size: 1rem; font-weight: 600; border-radius: 5px; cursor: pointer; transition: background-color 0.15s ease, border-color 0.15s ease; margin-top: auto; /* Pushes button to the bottom of the flex container (fieldset) */ } .main-action-button:hover { background: var(--primary-hover); border-color: var(--primary-hover); } .main-action-button:disabled { background-color: var(--muted-text); border-color: var(--muted-text); cursor: not-allowed; opacity: 0.5; } /* History Section */ #job-history h2 { text-align: center; color: var(--muted-text); font-size: 1.25rem; margin: 0; text-align: left; } .history-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 1rem; border-top: 1px solid var(--divider-color); padding-top: 2rem; } .table-wrapper { overflow-x: auto; border: 1px solid var(--border-color); border-radius: 8px; background-color: var(--surface); margin-bottom: 6em; } #job-table { width: 100%; border-collapse: collapse; font-size: 0.9rem; margin-bottom: 2em; } #job-table th, #job-table td { padding: 0.75rem; text-align: left; vertical-align: middle; border-bottom: 1px solid var(--divider-color); } #job-table tbody tr:last-child td { border-bottom: none; } #job-table th { color: var(--muted-text); font-weight: 500; text-transform: uppercase; font-size: 0.75rem; letter-spacing: 0.5px; white-space: nowrap; } .cell-value { display: flex; align-items: center; max-width: 20em; overflow: hidden; text-overflow: ellipsis; } .status-cell-value { flex-direction: column; align-items: flex-start; gap: 4px; } .file-cell-content { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } #job-table td[data-label="File"], #job-table td[data-label="Task"] { text-overflow: ellipsis; } .action-col { text-align: center; width: 120px; } #job-table td.action-col { text-align: center; } /* Status Badge */ .job-status-badge { padding: 0.2rem 0.6rem; border-radius: 12px; font-size: 0.75rem; font-weight: 600; text-transform: capitalize; display: inline-block; white-space: nowrap; } .status-pending, .status-processing { background-color: rgba(0,180,255,0.15); color: var(--primary-hover); } .status-completed { background-color: rgba(38,194,129,0.15); color: var(--success-color); } .status-failed { background-color: rgba(255,107,107,0.15); color: var(--error-color); } .status-cancelled { background-color: rgba(243, 156, 18, 0.15); color: var(--cancel-color); } .error-text { color: var(--error-color); cursor: help; } /* Progress Bar */ .progress-bar-container { height: 6px; width: 100%; background-color: rgba(255,255,255,0.1); border-radius: 3px; margin-top: 6px; overflow: hidden; } .progress-bar { height: 100%; background-color: var(--primary-color); border-radius: 3px; transition: width 0.5s ease-in-out; } .select-col { width: 20px; text-align: center; } .progress-bar.indeterminate { width: 100%; background: linear-gradient( 90deg, rgba(0,180,255,0.4) 25%, rgba(0,180,255,1) 50%, rgba(0,180,255,0.4) 75% ); background-size: 200% 100%; animation: indeterminate-scroll 2s linear infinite; } @keyframes indeterminate-scroll { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } } /* Action items */ .download-button, .cancel-button { padding: 0.3rem 0.8rem; text-decoration: none; border-radius: 5px; font-weight: 600; font-size: 0.85rem; display: inline-block; transition: transform 0.1s ease, background-color 0.15s ease; border: none; cursor: pointer; } #download-selected-btn { width: auto; white-space: nowrap; } .download-button { background-color: var(--success-color); color: #00160b; } .download-button:hover { transform: scale(1.05); } .cancel-button { background-color: var(--error-color); color: #1a0000; } .cancel-button:hover { background-color: #ff8f8f; } /* --- Dark theme for Choices.js --- */ .choices { font-size: 0.95rem; } .choices__inner { background-color: rgba(255, 255, 255, 0.05); border: 1px solid var(--border-color); border-radius: 5px; padding: 0.35rem 0.75rem; color: var(--text-color); min-height: auto; } .is-open .choices__inner { border-radius: 5px 5px 0 0; border-color: var(--primary-color); } .is-focused .choices__inner { border-color: var(--primary-color); box-shadow: 0 0 0 2px rgba(0, 180, 255, 0.2); } .choices__list--dropdown, .choices__list[aria-expanded] { background-color: var(--surface); border: 1px solid var(--primary-color); border-top: none; border-radius: 0 0 5px 5px; } .choices__list--dropdown .choices__item--selectable.is-highlighted, .choices__list[aria-expanded] .choices__item--selectable.is-highlighted { background-color: var(--secondary-color); color: var(--text-color) } .choices__list--dropdown .choices__item, .choices__list[aria-expanded] .choices__item { padding: 0.5rem 0.8rem; font-size: 0.9rem; } .choices__group { background-color: rgba(0,0,0,0.2); border-bottom: 1px solid var(--divider-color); } .choices__group .choices__heading { color: var(--primary-hover); font-size: 0.75rem; font-weight: 700; border-bottom: none; padding: 0.5rem 0.8rem; } .choices__input { color: var(--text-color); background-color: #000000; font-size: 0.95rem; } .choices[data-type*="select-one"] .choices__input { background-color: #000000; } /* --- Drag and Drop and Dialog Styles --- */ .drag-overlay { position: fixed; inset: 0; z-index: 9999; display: none; /* Hidden by default */ justify-content: center; align-items: center; background-color: rgba(0, 0, 0, 0.7); backdrop-filter: blur(5px); } body.dragging .drag-overlay { display: flex; /* Shown when body has .dragging class */ } .drag-overlay-content { border: 3px dashed var(--primary-color); border-radius: 12px; padding: 2rem 4rem; text-align: center; background-color: rgba(0, 0, 0, 0.2); } .drag-overlay-content p { margin: 0; font-size: 1.5rem; font-weight: 500; color: var(--primary-color); } .dialog-overlay { position: fixed; inset: 0; z-index: 10000; display: none; /* Hidden by default */ justify-content: center; align-items: center; background-color: rgba(0, 0, 0, 0.7); backdrop-filter: blur(5px); } .dialog-overlay.visible { display: flex; /* Show when .visible class is added */ } .dialog-box { background: var(--card-bg); border: 1px solid var(--border-color); border-radius: 8px; padding: 1.5rem; width: 100%; max-width: 450px; text-align: center; box-shadow: 0 10px 30px rgba(0,0,0,0.5); } .dialog-box h2 { margin-top: 0; font-size: 1.5rem; } .dialog-box p { color: var(--muted-text); margin-bottom: 1.5rem; } .dialog-actions { display: grid; grid-template-columns: 1fr; gap: 0.75rem; margin-bottom: 1rem; } .dialog-actions button { display: block; width: 100%; background: transparent; border: 1px solid var(--border-color); color: var(--text-color); padding: 0.65rem 1rem; font-size: 1rem; font-weight: 600; border-radius: 5px; cursor: pointer; transition: background-color 0.15s ease, border-color 0.15s ease; } .dialog-actions button:hover { background: var(--primary-hover); border-color: var(--primary-hover); } .dialog-secondary-action { background-color: transparent !important; border: 1px solid var(--border-color) !important; } .dialog-secondary-action:hover { background-color: rgba(255, 255, 255, 0.05) !important; } .dialog-cancel { background: none; border: none; color: var(--muted-text); cursor: pointer; font-size: 0.9rem; padding: 0.5rem; } .dialog-cancel:hover { color: var(--text-color); } /* Spinner */ .spinner-small { border: 3px solid rgba(255,255,255,0.1); border-top: 3px solid var(--primary-color); border-radius: 50%; width: 20px; height: 20px; animation: spin 1s linear infinite; margin: 0 auto; } @keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } /* --- Mobile --- */ @media (max-width: 992px) { .actions-group { grid-template-columns: 1fr; /* Stack to 1 column on tablet and smaller */ } } @media (max-width: 768px) { .table-wrapper { border: none; background-color: transparent; } #job-table thead { display: none; } #job-table, #job-table tbody, #job-table tr, #job-table td { display: block; width: 100%; } #job-table tr { margin-bottom: 1rem; border: 1px solid var(--border-color); border-radius: 8px; background-color: var(--surface); } #job-table td { display: flex; justify-content: space-between; align-items: center; padding: 0.75rem 1rem; border-bottom: 1px solid var(--divider-color); white-space: normal; } #job-table tr td:last-child { border-bottom: none; } #job-table td::before { content: attr(data-label); font-weight: 500; color: var(--muted-text); padding-right: 1rem; flex-shrink: 0; } .cell-value { text-align: right; min-width: 0; word-break: break-all; } .cell-value, .file-cell-content { min-width: 0; max-width: 50vw; /* Adjust for smaller screens */ } } /* --- Collapsible Job Rows --- */ tr.parent-job { cursor: pointer; } .expander-arrow { content: ''; display: inline-block; margin-right: 0.7em; transition: transform 0.2s ease-in-out; width: 0.7em; height: 0.7em; background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%239aa4ad' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"); background-repeat: no-repeat; background-position: center; background-size: contain; transform: rotate(-90deg); flex-shrink: 0; } tr.parent-job.sub-jobs-visible .expander-arrow { transform: rotate(0deg); } tr.sub-job { display: none; /* Initially hidden */ background-color: rgba(255, 255, 255, 0.03); } tr.sub-job.is-visible { display: table-row; /* Show on desktop */ } tr.sub-job td[data-label="File"] .cell-value { padding-left: 1.7em; } @media (max-width: 768px) { tr.sub-job.is-visible { display: block; /* Show on mobile */ } }