*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}body{font-family:system-ui,-apple-system,sans-serif;background:#f1f5f9;color:#1e293b;font-size:14px;line-height:1.5}.page-center{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:16px}.card{background:#fff;border:1px solid #e2e8f0;border-radius:8px;padding:28px 24px;width:100%;max-width:400px;box-shadow:0 1px 4px #0000000f}.card h1{font-size:1.3rem;margin-bottom:22px}.form-group{margin-bottom:14px}.form-group label{display:block;font-weight:500;font-size:13px;margin-bottom:4px;color:#334155}.form-group input,.form-group select,.form-group textarea{width:100%;padding:7px 10px;border:1px solid #cbd5e1;border-radius:5px;font-size:14px;font-family:inherit;background:#fff;color:#1e293b;outline:none;transition:border-color .15s}.form-group input:focus,.form-group select:focus{border-color:#3b82f6}.form-group.checkbox{display:flex;align-items:center;gap:8px}.form-group.checkbox label{margin-bottom:0;font-weight:400}.form-group input[type=checkbox]{width:auto;cursor:pointer}button{padding:8px 16px;border:none;border-radius:5px;cursor:pointer;font-size:13px;font-family:inherit;font-weight:500;transition:background .15s}.btn-primary{background:#2563eb;color:#fff}.btn-primary:hover:not(:disabled){background:#1d4ed8}.btn-primary:disabled{background:#93c5fd;cursor:not-allowed}.btn-secondary{background:#e2e8f0;color:#334155}.btn-secondary:hover:not(:disabled){background:#cbd5e1}.btn-secondary:disabled{opacity:.6;cursor:not-allowed}.btn-danger{background:#dc2626;color:#fff}.btn-danger:hover{background:#b91c1c}.btn-sm{padding:4px 10px;font-size:12px}.btn-link{background:none;border:none;color:#2563eb;padding:0;cursor:pointer;font-size:13px;text-decoration:underline;font-weight:400}.error{color:#dc2626;font-size:13px}.success{color:#16a34a;font-size:13px}.info{color:#2563eb;font-size:13px}.text-muted{color:#64748b;font-size:12px}.text-mono{font-family:Consolas,Monaco,monospace;font-size:12px}.flex{display:flex}.flex-col{flex-direction:column}.gap-8{gap:8px}.gap-12{gap:12px}.align-center{align-items:center}.justify-between{justify-content:space-between}.mt-8{margin-top:8px}.mt-12{margin-top:12px}.mt-16{margin-top:16px}.mb-8{margin-bottom:8px}.mb-12{margin-bottom:12px}.full-width{width:100%}.dashboard{min-height:100vh;display:flex;flex-direction:column}.topbar{background:#0f172a;color:#fff;padding:0 20px;height:48px;display:flex;align-items:center;justify-content:space-between;flex-shrink:0}.topbar h1{font-size:1rem;color:#fff;letter-spacing:.02em}.topbar .user-info{display:flex;align-items:center;gap:12px}.topbar .user-email{font-size:13px;color:#94a3b8}.dashboard-body{flex:1;display:flex;gap:16px;padding:16px;max-width:1400px;width:100%;margin:0 auto;align-items:flex-start}.panel{background:#fff;border:1px solid #e2e8f0;border-radius:8px;padding:16px;box-shadow:0 1px 3px #0000000a}.panel h2{font-size:.95rem;font-weight:600;margin-bottom:14px}.panel h3{font-size:.85rem;font-weight:600;margin-bottom:8px;color:#475569}.panel-submit{width:320px;flex-shrink:0}.panel-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:16px}.job-table{width:100%;border-collapse:collapse;font-size:13px}.job-table th{text-align:left;padding:6px 10px;border-bottom:2px solid #e2e8f0;color:#64748b;font-weight:600;font-size:12px;text-transform:uppercase;letter-spacing:.04em}.job-table td{padding:7px 10px;border-bottom:1px solid #f1f5f9;vertical-align:middle}.job-table tbody tr{cursor:pointer}.job-table tbody tr:hover td{background:#f8fafc}.job-table tbody tr.selected td{background:#eff6ff}.id-cell{font-family:Consolas,Monaco,monospace;font-size:11px;color:#475569}.job-pagination{display:flex;align-items:center;justify-content:space-between;padding:8px 2px 0;margin-top:4px}.state{display:inline-block;padding:2px 8px;border-radius:10px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.03em}.state-queued{background:#fef3c7;color:#92400e}.state-running{background:#dbeafe;color:#1e40af}.state-success{background:#dcfce7;color:#166534}.state-partial{background:#fef9c3;color:#854d0e}.state-failed{background:#fee2e2;color:#991b1b}.run-item{padding:8px 10px;border:1px solid #e2e8f0;border-radius:5px;margin-bottom:6px;font-size:13px}.run-item-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:3px}.detail-grid{display:grid;grid-template-columns:1fr 1fr;gap:6px 12px;font-size:13px;margin-bottom:14px}.detail-grid .full{grid-column:1 / -1}.detail-grid b{color:#475569;font-weight:600}.detail-tabs{display:flex;gap:0;border-bottom:2px solid #e2e8f0;margin-bottom:14px}.detail-tab{background:none;border:none;border-bottom:2px solid transparent;margin-bottom:-2px;padding:8px 16px;font-size:13px;font-weight:600;color:#64748b;cursor:pointer;border-radius:0;display:flex;align-items:center;gap:6px;transition:color .15s,border-color .15s}.detail-tab:hover{color:#334155}.detail-tab.active{color:#2563eb;border-bottom-color:#2563eb}.tab-badge{display:inline-flex;align-items:center;justify-content:center;min-width:18px;height:18px;padding:0 5px;border-radius:9px;background:#e2e8f0;color:#475569;font-size:11px;font-weight:700;line-height:1}.detail-tab.active .tab-badge{background:#dbeafe;color:#1e40af}.log-box{background:#0f172a;color:#e2e8f0;font-family:Consolas,Monaco,monospace;font-size:12px;line-height:1.6;padding:12px 14px;border-radius:5px;overflow-y:auto;max-height:420px;white-space:pre-wrap;word-break:break-all}.form-section{border-top:1px solid #e2e8f0;padding-top:12px;margin-top:10px;margin-bottom:14px}.form-section-label{display:block;font-weight:600;font-size:13px;margin-bottom:8px;color:#334155}.collapsible-toggle{background:none;border:none;padding:0;font-size:13px;font-weight:600;color:#475569;cursor:pointer;margin-bottom:8px}.collapsible-toggle:hover{color:#1e293b}.collapsible-body{padding-left:6px}.form-hint{font-size:12px;color:#64748b;margin-top:4px}.banner-error{background:#fef2f2;border:1px solid #fecaca;color:#991b1b;font-size:13px;padding:8px 12px;border-radius:5px;margin-bottom:10px;display:flex;align-items:center;justify-content:space-between;gap:8px}.banner-dismiss{background:none;border:none;color:#991b1b;font-size:18px;cursor:pointer;padding:0 2px;line-height:1;flex-shrink:0}.banner-dismiss:hover{color:#7f1d1d}.artifact-list{display:flex;flex-direction:column;gap:4px;margin-bottom:12px}.artifact-item{display:flex;align-items:center;justify-content:space-between;padding:6px 10px;background:#f8fafc;border:1px solid #e2e8f0;border-radius:4px;font-size:13px}.artifact-link{background:none;border:none;color:#2563eb;cursor:pointer;font-size:13px;padding:0;text-align:left;word-break:break-all}.artifact-link:hover{text-decoration:underline;color:#1d4ed8}.artifact-dir{cursor:pointer;font-size:13px;font-weight:600;padding:4px 0;color:#334155;-webkit-user-select:none;user-select:none}.artifact-dir:hover{color:#1e293b}.upload-progress{display:flex;flex-direction:column;gap:4px;margin-top:6px}.upload-progress-bar{width:100%;height:6px;border-radius:3px;overflow:hidden;-moz-appearance:none;appearance:none;-webkit-appearance:none;border:none;background:#e2e8f0}.upload-progress-bar::-webkit-progress-bar{background:#e2e8f0;border-radius:3px}.upload-progress-bar::-webkit-progress-value{background:#2563eb;border-radius:3px;transition:width .2s ease}.upload-progress-bar::-moz-progress-bar{background:#2563eb;border-radius:3px}.upload-actions{display:flex;gap:8px;align-items:center;margin-top:6px;flex-wrap:wrap}.btn-file{cursor:pointer}.btn-file input[hidden]{display:none}.btn-cancel{color:#dc2626;border-color:#dc2626}.btn-cancel:hover{background:#fef2f2}.upload-summary{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-top:8px;padding:6px 10px;background:#f1f5f9;border-radius:6px;font-size:13px;color:#475569}.upload-file-list{margin-top:8px;max-height:200px;overflow-y:auto;border:1px solid #e2e8f0;border-radius:6px}.upload-file-item{display:flex;justify-content:space-between;align-items:center;padding:4px 10px;font-size:12px;border-bottom:1px solid #f1f5f9}.upload-file-item:last-child{border-bottom:none}.upload-file-name{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin-right:10px;color:#334155}.upload-file-status{white-space:nowrap;font-size:11px}.status-waiting .upload-file-status{color:#94a3b8}.status-uploading .upload-file-status{color:#2563eb}.status-done .upload-file-status{color:#16a34a}.status-error .upload-file-status{color:#dc2626}.status-submitting .upload-file-status{color:#2563eb}.status-submitted .upload-file-status{color:#16a34a}.status-submit_error .upload-file-status{color:#dc2626}
