:root{--ml-blue: #0090DA;--ml-blue-dark: #0061A0;--ml-blue-light: #5BC4FF;--ml-green: #A4CE4E;--ml-navy: #0A1426;--ml-ink: #1A1F2C;--ml-mute: #62708A;--ml-bg: #FAFBFC;--ml-border: #E6EAF0;--accent: var(--ml-blue);--accent-dark: var(--ml-blue-dark);--accent-light: var(--ml-blue-light);--fg: #E8EAED;--muted: #9AA0AA;--line: rgba(255,255,255,.08);--panel: rgba(16,28,54,.55);--panel-solid: #0D1B33;--bg: #060B16;--ok: var(--ml-green);--warn: #E8A44A;--no: #cf3b3b;--radius: 12px;--mono: "JetBrains Mono", ui-monospace, "SF Mono", Menlo, monospace;--sans: system-ui, -apple-system, "Segoe UI", Roboto, sans-serif}*{scrollbar-width:thin;scrollbar-color:rgba(91,196,255,.25) transparent}::-webkit-scrollbar{width:4px;height:4px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:#5bc4ff47;border-radius:99px}*,*:before,*:after{box-sizing:border-box}body{margin:0;font-family:var(--sans);color:var(--fg);background:var(--bg);min-height:100vh;-webkit-font-smoothing:antialiased}a{color:var(--ml-blue-light)}.topbar{background:linear-gradient(120deg,#0a1426 60%,#0061a0);color:#fff;padding:12px 24px;display:flex;justify-content:space-between;align-items:center;min-height:64px;border-bottom:1px solid rgba(91,196,255,.15);position:sticky;top:0;z-index:100}.topbar-left{display:flex;align-items:center;gap:16px}.topbar-logo{height:32px;width:auto;display:block;flex-shrink:0}.topbar-divider{width:1px;height:36px;background:#fff3;flex-shrink:0}.topbar-titles{display:flex;flex-direction:column;gap:2px}.topbar-app{font-size:.6rem;font-weight:700;letter-spacing:.18em;text-transform:uppercase;font-family:var(--mono);color:var(--ml-blue-light);line-height:1}.topbar-name{font-size:.9rem;font-weight:600;color:#fffffff2;line-height:1.2}.topbar-right{display:flex;align-items:center;gap:10px}.topbar button{background:#ffffff1a;color:#ffffffd9;border:1px solid rgba(255,255,255,.15);padding:6px 14px;border-radius:6px;cursor:pointer;font-size:.85rem;transition:background .15s}.topbar button:hover{background:#ffffff2e}.wrap{max-width:680px;margin:48px auto;padding:0 20px}.card{border:1px solid rgba(91,196,255,.12);border-radius:var(--radius);padding:28px;margin-bottom:20px;background:var(--panel);backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px)}h2{margin-top:0;font-weight:700;letter-spacing:-.01em}h3{margin-top:0;font-weight:600}label{display:block;font-size:.82rem;color:var(--muted);margin:12px 0 4px;letter-spacing:.02em}input[type=email],input[type=password]{width:100%;padding:10px 12px;border:1px solid rgba(255,255,255,.12);border-radius:8px;font-size:1rem;background:#ffffff0f;color:var(--fg);transition:border-color .15s;outline:none}input[type=email]:focus,input[type=password]:focus{border-color:var(--ml-blue);box-shadow:0 0 0 3px #0090da2e}.btn{background:linear-gradient(135deg,var(--ml-blue),var(--ml-blue-light));color:#fff;border:0;padding:11px 22px;border-radius:999px;cursor:pointer;font-size:.95rem;font-weight:600;display:inline-block;text-decoration:none;box-shadow:0 4px 16px #0090da59;transition:transform .15s,box-shadow .15s}.btn:hover{transform:translateY(-1px);box-shadow:0 6px 22px #0090da80}.btn:disabled{opacity:.45;cursor:default;transform:none;box-shadow:none}.btn.ghost{background:transparent;border:1px solid var(--ml-blue);color:var(--ml-blue-light);box-shadow:none}.btn.ghost:hover{background:#0090da1f;box-shadow:none;transform:none}.btn.sm{padding:5px 13px;font-size:.82rem}.mono{font-family:var(--mono);font-variant-numeric:tabular-nums;font-size:.82rem}.error{color:var(--no);margin:10px 0;font-size:.92rem}.muted{color:var(--muted)}.ok-val{color:var(--ok)}.warn-val{color:var(--warn)}.err-val{color:var(--no)}.dropzone{border:2px dashed rgba(91,196,255,.25);border-radius:var(--radius);padding:52px;text-align:center;cursor:pointer;color:var(--muted);transition:border-color .2s,background .2s;font-size:.95rem}.dropzone:hover,.dropzone.over{border-color:var(--ml-blue);background:#0090da12;color:var(--fg)}.dropzone.busy{cursor:default;pointer-events:none;border-style:solid}.upload-progress{display:flex;flex-direction:column;align-items:center;gap:10px;width:100%}.upload-bar{height:4px;background:var(--ml-blue);border-radius:2px;transition:width .3s ease;min-width:2px;align-self:stretch}.job-row{display:flex;justify-content:space-between;align-items:center;padding:11px 0;border-bottom:1px solid var(--line);gap:12px;flex-wrap:wrap}.job-row:last-child{border-bottom:none}.job-row-name{font-size:.92rem}.job-row-actions{display:flex;align-items:center;gap:8px;flex-shrink:0}.badge{font-size:.72rem;padding:2px 9px;border-radius:10px;font-weight:600}.badge.done{background:#a4ce4e26;color:var(--ok)}.badge.error{background:#cf3b3b26;color:var(--no)}.badge.running,.badge.queued{background:#0090da26;color:var(--ml-blue-light)}.workbench{max-width:1100px;margin:0 auto;padding:20px;display:flex;flex-direction:column;gap:0;min-height:calc(100vh - 64px)}.wb-header{padding:18px 0 14px;border-bottom:1px solid var(--line)}.wb-title{display:flex;align-items:baseline;gap:14px;flex-wrap:wrap}.wb-title h2{margin:0;font-size:1.2rem;font-weight:700}.wb-status-badge{font-size:.75rem;font-weight:600;padding:3px 10px;border-radius:999px;letter-spacing:.03em}.wb-status-badge.ok{background:#a4ce4e24;color:var(--ok)}.wb-status-badge.warned{background:#e8a44a24;color:var(--warn)}.wb-status-badge.err{background:#cf3b3b24;color:var(--no)}.wb-status-badge.running{background:#0090da24;color:var(--ml-blue-light)}.wb-reconnecting{font-size:.72rem;color:var(--warn);animation:pulse 1.2s ease-in-out infinite}@keyframes pulse{0%,to{opacity:1}50%{opacity:.4}}.wb-meta{margin-top:6px;display:flex;gap:16px;color:var(--muted);font-size:.8rem}.wb-progress-bar-wrap{position:relative;height:4px;background:var(--line);overflow:hidden}.wb-progress-bar{height:100%;transition:width .6s ease}.wb-progress-bar.running{background:var(--ml-blue-light, #4a9eff);animation:progress-shimmer 1.8s ease-in-out infinite}.wb-progress-bar.done{background:var(--ok, #a4ce4e)}.wb-progress-bar.failed{background:var(--no, #cf3b3b)}@keyframes progress-shimmer{0%,to{opacity:1}50%{opacity:.65}}.wb-progress-label{position:absolute;right:10px;top:50%;transform:translateY(-50%) translateY(-8px);font-size:.7rem;color:var(--muted);pointer-events:none}.wb-summary-bar{display:flex;align-items:center;gap:6px;padding:6px 14px 8px;font-size:.82rem;color:var(--muted);flex-wrap:wrap}.cm-sep{width:1px;height:10px;background:var(--line);flex-shrink:0}.wb-body{display:grid;grid-template-columns:300px 1fr;gap:0;flex:1;border-bottom:1px solid var(--line)}@media (max-width: 700px){.wb-body{grid-template-columns:1fr}}.wb-timeline{border-right:1px solid var(--line);padding:10px 0;overflow-y:auto;scrollbar-gutter:stable}.station-row{display:grid;grid-template-columns:22px 1fr auto auto auto;align-items:start;gap:8px;padding:9px 14px;border:none;background:none;width:100%;text-align:left;cursor:pointer;border-left:3px solid transparent;transition:background .12s}.station-row:hover{background:#0090da12}.station-row.selected{background:#0090da1a;border-left-color:var(--ml-blue)}.station-row.running{border-left-color:var(--ml-blue-light)}.station-info{display:flex;flex-direction:column;gap:2px;min-width:0}.station-label{font-size:.88rem;font-weight:500;color:var(--fg);line-height:1.3}.station-summary,.station-log{font-size:.75rem;color:var(--muted);overflow:hidden;white-space:nowrap;text-overflow:ellipsis;max-width:180px}.station-badge{font-size:.68rem;padding:2px 7px;border-radius:999px;white-space:nowrap;align-self:start;margin-top:2px}.station-badge.passed{background:#a4ce4e24;color:var(--ok)}.station-badge.warned{background:#e8a44a24;color:var(--warn)}.station-badge.failed{background:#cf3b3b24;color:var(--no)}.station-badge.running{background:#0090da24;color:var(--ml-blue-light)}.station-badge.included{background:#5bc4ff1a;color:var(--ml-blue-light)}.station-badge.skipped{background:#ffffff0f;color:var(--muted)}.station-badge.pending{background:transparent;color:var(--muted);border:1px solid var(--line)}.station-warn-count{font-size:.7rem;background:#e8a44a24;color:var(--warn);border-radius:999px;padding:1px 6px;align-self:start;margin-top:2px}.station-group{display:flex;flex-direction:column}.station-subtask{display:flex;align-items:center;gap:8px;padding:5px 14px 5px 42px;border-left:3px solid transparent}.station-subtask .station-label{font-size:.8rem;color:var(--muted);flex:1}.station-subtask .station-badge{font-size:.62rem}.detail-subtask{display:flex;align-items:flex-start;gap:10px;padding:8px 12px;border-radius:8px;background:#a4ce4e0d;border:1px solid rgba(164,206,78,.12);margin-bottom:6px}.detail-subtask-label{font-size:.88rem;font-weight:500;color:var(--fg)}.detail-subtask-note{font-size:.78rem;color:var(--muted);margin-top:2px;line-height:1.4}.station-dur{font-size:.68rem;color:var(--muted);align-self:start;margin-top:3px}.si{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:50%;font-size:.7rem;flex:none;margin-top:2px}.si-pending{border:2px solid var(--line);background:transparent}.si-running{border:2px solid transparent;background:linear-gradient(var(--panel-solid),var(--panel-solid)) padding-box,conic-gradient(from 0deg,var(--ml-blue),var(--ml-blue-light),transparent 75%) border-box;animation:spin .9s linear infinite}.si-passed{background:var(--ok);color:#fff;font-weight:700}.si-warned{background:#e8a44a33;color:var(--warn);font-weight:700}.si-failed{background:var(--no);color:#fff;font-weight:700}.si-included{background:#5bc4ff26;color:var(--ml-blue-light);font-weight:700}.si-skipped{background:#ffffff0f;color:var(--muted);border:1px solid var(--line)}.wb-detail{padding:20px 24px;overflow-y:auto;scrollbar-gutter:stable}.detail-empty{color:var(--muted);font-size:.92rem;margin-top:20px}.detail-panel{display:flex;flex-direction:column;gap:14px}.detail-header{display:flex;align-items:center;gap:10px}.detail-title{font-weight:700;font-size:1rem;flex:1}.detail-dur{color:var(--muted)}.detail-skip{font-size:.88rem;color:var(--muted);background:#ffffff0a;border-radius:8px;padding:10px 14px;margin:0;border:1px solid var(--line)}.detail-summary{font-size:.92rem;color:var(--fg);margin:0;line-height:1.55}.detail-log{font-size:.82rem;padding:8px 12px;background:#0090da14;border-radius:6px;border-left:3px solid var(--ml-blue);color:var(--ml-blue-light);font-family:var(--mono)}.detail-section{display:flex;flex-direction:column;gap:6px}.detail-section-label{font-size:.72rem;font-weight:700;text-transform:uppercase;letter-spacing:.07em;color:var(--muted)}.detail-list{margin:0;padding:0 0 0 16px;font-size:.87rem;line-height:1.6}.warn-list li{color:var(--warn)}.evidence-list{color:var(--muted)}.metrics-row{display:flex;gap:20px;flex-wrap:wrap}.metrics-block{flex:1;min-width:140px}.metrics-label{font-size:.7rem;font-weight:700;text-transform:uppercase;letter-spacing:.07em;color:var(--muted);margin-bottom:6px}.metrics-table{width:100%;border-collapse:collapse;font-size:.84rem}.metrics-table td{padding:3px 0}.metrics-table td:last-child{text-align:right;width:40px}.wb-footer{padding:18px 0;display:flex;flex-direction:column;gap:14px}.completion-metrics{background:#0090da14;border:1px solid rgba(91,196,255,.15);border-radius:10px;padding:12px 16px}.cm-row{display:flex;gap:20px;flex-wrap:wrap;font-size:.88rem}.cm-item{color:var(--fg)}.wb-actions{display:flex;gap:10px;flex-wrap:wrap}.quality{margin-top:6px}.quality summary{cursor:pointer;font-weight:600;font-size:.92rem}.advisory{background:#e8a44a12;border:1px solid rgba(232,164,74,.2);border-radius:8px;padding:10px 14px;font-size:.85rem;margin-top:8px;list-style:none}.advisory li{margin:4px 0;color:var(--warn)}.activity{display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;-webkit-mask-image:linear-gradient(90deg,#000 70%,transparent);mask-image:linear-gradient(90deg,#000 70%,transparent)}.si-running~.station-info .station-log,.detail-log{animation:shimmer 1.4s ease-in-out infinite}@keyframes spin{to{transform:rotate(360deg)}}@keyframes shimmer{0%,to{opacity:.5}50%{opacity:1}}@media (prefers-reduced-motion: reduce){.si-running,.detail-log,.station-log{animation:none}}
