:root{--ink-900: #16191d;--ink-700: #39414a;--ink-500: #5c6570;--ink-400: #6f7883;--ink-300: #9aa2ab;--line: #e6e8eb;--line-strong: #d6dadf;--bg: #f7f8fa;--sidebar: #f1f3f5;--surface: #ffffff;--subtle: #fafbfc;--hover: #eceff2;--accent: #0f7686;--accent-hover: #138798;--accent-soft: #e8f4f6;--accent-ring: rgba(15, 118, 134, .28);--success: #1a8a50;--success-dot: #23a25f;--success-soft: #e9f6ee;--danger: #cf4238;--danger-soft: #fcedeb;--warning: #b97508;--warning-dot: #df9a1b;--warning-soft: #fcf3e2;--mono: "SF Mono", "JetBrains Mono", ui-monospace, Menlo, Consolas, monospace;--ease: cubic-bezier(.2, .8, .2, 1);--shadow-panel: 0 1px 2px rgba(20, 25, 31, .04);--sidebar-w: 232px}html,body,#root{height:100%;margin:0}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI Variable,Segoe UI,PingFang SC,Hiragino Sans GB,Microsoft YaHei,sans-serif;background:var(--bg);color:var(--ink-900);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility}::selection{background:#0f76862e;color:inherit}:focus-visible{outline:2px solid var(--accent-ring);outline-offset:2px}*{scrollbar-width:thin;scrollbar-color:var(--line-strong) transparent}*::-webkit-scrollbar{width:10px;height:10px}*::-webkit-scrollbar-thumb{background:var(--line-strong);border-radius:10px;border:3px solid transparent;background-clip:content-box}*::-webkit-scrollbar-thumb:hover{background-color:var(--ink-300)}*::-webkit-scrollbar-track{background:transparent}code,kbd,.mono{font-family:var(--mono);font-size:.92em}.num{font-variant-numeric:tabular-nums}.muted{color:var(--ink-500)}.faint{color:var(--ink-400)}.shell{display:flex;min-height:100vh}.sidebar{position:sticky;top:0;flex:0 0 var(--sidebar-w);width:var(--sidebar-w);height:100vh;display:flex;flex-direction:column;background:var(--sidebar);border-right:1px solid var(--line);box-sizing:border-box}.sidebar-drawer .ant-drawer-body{padding:0;background:var(--sidebar)}.sidebar-drawer .sidebar{position:static;width:100%;height:100%;border-right:0}.brand{display:flex;align-items:center;gap:10px;padding:18px 18px 14px}.brand-mark{width:26px;height:26px;flex:none;border-radius:7px;background:var(--accent);color:#fff;display:grid;place-items:center}.brand-name{font-size:15px;font-weight:650;letter-spacing:-.01em;line-height:1.2}.brand-org{font-size:12px;color:var(--ink-400);line-height:1.3;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:160px}.nav{flex:1;overflow-y:auto;padding:4px 10px 12px}.nav-group+.nav-group{margin-top:18px}.nav-group-label{padding:0 10px 6px;font-size:12px;color:var(--ink-400)}.nav-item{position:relative;display:flex;align-items:center;gap:10px;width:100%;height:34px;padding:0 10px;border:0;border-radius:6px;background:transparent;color:var(--ink-700);font:inherit;font-size:14px;text-align:left;cursor:pointer;transition:background-color .15s var(--ease),color .15s var(--ease)}.nav-item+.nav-item{margin-top:2px}.nav-item svg{flex:none;color:var(--ink-400);transition:color .15s var(--ease)}.nav-item:hover{background:var(--hover);color:var(--ink-900)}.nav-item:hover svg{color:var(--ink-700)}.nav-item.active{background:var(--surface);color:var(--ink-900);font-weight:550;box-shadow:0 1px 2px #14191f0f,0 0 0 1px #14191f0a}.nav-item.active svg{color:var(--accent)}.account{margin:8px 10px 12px}.account-btn{display:flex;align-items:center;gap:10px;width:100%;padding:8px 10px;border:0;border-radius:8px;background:transparent;font:inherit;text-align:left;cursor:pointer;transition:background-color .15s var(--ease)}.account-btn:hover{background:var(--hover)}.avatar{width:28px;height:28px;flex:none;border-radius:50%;background:var(--accent-soft);color:var(--accent);font-size:13px;font-weight:600;display:grid;place-items:center}.account-name{font-size:13px;font-weight:550;color:var(--ink-900);line-height:1.3}.account-role{font-size:12px;color:var(--ink-400);line-height:1.3}.main{flex:1;min-width:0;display:flex;flex-direction:column}.topbar{display:none}.content{flex:1;padding:28px 32px 48px;min-width:0}@media(max-width:991px){.shell>.sidebar{display:none}.topbar{position:sticky;top:0;z-index:20;display:flex;align-items:center;gap:10px;height:52px;padding:0 12px;background:#f7f8fae6;-webkit-backdrop-filter:saturate(1.4) blur(10px);backdrop-filter:saturate(1.4) blur(10px);border-bottom:1px solid var(--line)}.content{padding:20px 16px 40px}}.page-header{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;flex-wrap:wrap;margin-bottom:20px}.page-title{margin:0;font-size:20px;font-weight:650;line-height:28px;letter-spacing:-.01em;color:var(--ink-900);display:flex;align-items:center;gap:10px;flex-wrap:wrap}.page-desc{margin-top:4px;font-size:13px;color:var(--ink-500)}.page-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.page-back{display:inline-flex;align-items:center;gap:4px;margin-bottom:8px;padding:0;border:0;background:none;font:inherit;font-size:13px;color:var(--ink-500);cursor:pointer;transition:color .15s var(--ease)}.page-back:hover{color:var(--ink-900)}.panel{background:var(--surface);border:1px solid var(--line);border-radius:10px;box-shadow:var(--shadow-panel);overflow:hidden}.panel+.panel,.section+.section{margin-top:20px}.panel-head{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:48px;padding:0 16px;border-bottom:1px solid var(--line)}.panel-title{font-size:14px;font-weight:600;color:var(--ink-900);display:flex;align-items:center;gap:8px}.panel-body{padding:16px}.panel .ant-table-wrapper .ant-table,.panel .ant-table-wrapper .ant-table-container{border-radius:0}.panel .ant-table-wrapper tr:last-child>td{border-bottom:0}.count-pill{display:inline-flex;align-items:center;justify-content:center;min-width:20px;height:20px;padding:0 6px;border-radius:10px;background:var(--hover);color:var(--ink-500);font-size:12px;font-weight:500;font-variant-numeric:tabular-nums}.toolbar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:12px}.toolbar-spacer{flex:1}.row-link{cursor:pointer}.row-actions{display:inline-flex;align-items:center;gap:2px;justify-content:flex-end}@media(hover:hover){.ant-table-tbody>tr .row-actions .row-action-quiet{opacity:.55;transition:opacity .15s var(--ease)}.ant-table-tbody>tr:hover .row-actions .row-action-quiet,.row-actions .row-action-quiet:focus-visible{opacity:1}}.cell-title{font-weight:550;color:var(--ink-900)}.cell-sub{font-size:12px;color:var(--ink-400);margin-top:2px}.id-cell{font-family:var(--mono);font-size:12.5px;color:var(--ink-500);font-variant-numeric:tabular-nums}.ant-table-wrapper .ant-table-thead>tr>th{font-weight:500;font-size:13px}.ant-table-wrapper .ant-table-tbody>tr>td{font-variant-numeric:tabular-nums;transition:background-color .15s var(--ease)}.status{display:inline-flex;align-items:center;gap:7px;height:22px;padding:0 8px 0 7px;border-radius:11px;font-size:12.5px;font-weight:500;line-height:1;white-space:nowrap;background:var(--hover);color:var(--ink-700)}.status-dot{position:relative;width:7px;height:7px;border-radius:50%;background:var(--ink-300);flex:none}.status--success{background:var(--success-soft);color:var(--success)}.status--success .status-dot{background:var(--success-dot)}.status--failed{background:var(--danger-soft);color:var(--danger)}.status--failed .status-dot{background:var(--danger)}.status--running{background:var(--accent-soft);color:var(--accent)}.status--running .status-dot{background:var(--accent)}.status--running .status-dot:after{content:"";position:absolute;top:-3px;right:-3px;bottom:-3px;left:-3px;border-radius:50%;border:1.5px solid var(--accent);opacity:0;animation:status-pulse 1.6s var(--ease) infinite}.status--warning{background:var(--warning-soft);color:var(--warning)}.status--warning .status-dot{background:var(--warning-dot)}.status--waiting .status-dot{background:transparent;box-shadow:inset 0 0 0 1.5px var(--ink-300)}.status--muted{color:var(--ink-500)}@keyframes status-pulse{0%{transform:scale(.6);opacity:.7}to{transform:scale(1.5);opacity:0}}.live{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--ink-400);font-weight:400}.live-dot{width:6px;height:6px;border-radius:50%;background:var(--success-dot);box-shadow:0 0 0 3px #23a25f26}.live--off .live-dot{background:var(--ink-300);box-shadow:none}.stats{display:grid;grid-template-columns:repeat(5,minmax(0,1fr))}.stat{padding:16px 18px;border-left:1px solid var(--line);text-align:left;background:transparent;border-top:0;border-right:0;border-bottom:0;font:inherit;color:inherit}.stat:first-child{border-left:0}button.stat{cursor:pointer;transition:background-color .15s var(--ease)}button.stat:hover{background:var(--subtle)}.stat-label{font-size:13px;color:var(--ink-500);display:flex;align-items:center;gap:6px}.stat-value{margin-top:6px;font-size:26px;font-weight:600;letter-spacing:-.02em;line-height:32px;font-variant-numeric:tabular-nums;color:var(--ink-900)}.stat-value.is-danger{color:var(--danger)}@media(max-width:767px){.stats{grid-template-columns:repeat(2,minmax(0,1fr))}.stat{border-left:0;border-top:1px solid var(--line)}.stat:nth-child(-n+2){border-top:0}.stat:nth-child(2n){border-left:1px solid var(--line)}}.meta{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:14px 24px}.meta-label{font-size:12px;color:var(--ink-400);margin-bottom:4px}.meta-value{font-size:14px;color:var(--ink-900);word-break:break-word}.meta--stack{grid-template-columns:repeat(auto-fill,minmax(140px,1fr))}.empty{padding:36px 16px;text-align:center}.empty-icon{width:40px;height:40px;margin:0 auto 12px;border-radius:10px;background:var(--hover);color:var(--ink-400);display:grid;place-items:center}.empty-title{font-size:14px;font-weight:550;color:var(--ink-700)}.empty-desc{margin-top:4px;font-size:13px;color:var(--ink-400)}.empty-action{margin-top:14px}.log{margin:0;height:340px;overflow:auto;padding:12px 0;border-radius:8px;background:#15191e;color:#d5dbe1;font-family:var(--mono);font-size:12px;line-height:1.65}.log-line{display:grid;grid-template-columns:auto auto 1fr;gap:10px;padding:0 14px;white-space:pre-wrap;word-break:break-word}.log-line:hover{background:#ffffff0a}.log-ts{color:#7d8894}.log-level{color:#8fb7bf}.log-line--warn .log-level,.log-line--warn .log-msg{color:#f0c36a}.log-line--error .log-level,.log-line--error .log-msg{color:#ff8a80}.log-empty{padding:0 14px;color:#7d8894}.error-box{padding:10px 12px;border-radius:8px;background:var(--danger-soft);color:#a3342c;font-family:var(--mono);font-size:12.5px;line-height:1.6;white-space:pre-wrap;word-break:break-word}.login{min-height:100vh;display:grid;place-items:center;padding:24px;background:radial-gradient(1200px 600px at 50% -10%,#e4f1f3,#e4f1f300 60%),var(--bg)}.login-card{width:100%;max-width:360px}.login-brand{display:flex;align-items:center;gap:10px;margin-bottom:24px}.login-title{margin:0 0 4px;font-size:20px;font-weight:650;letter-spacing:-.01em}.login-sub{margin:0 0 24px;font-size:13px;color:var(--ink-500)}.login-panel{padding:24px;background:var(--surface);border:1px solid var(--line);border-radius:12px;box-shadow:0 1px 2px #14191f0a,0 12px 32px -12px #14191f1f}.ant-btn{transition-timing-function:var(--ease)}.ant-drawer .ant-drawer-header{border-bottom-color:var(--line)}.ant-modal .ant-modal-content{box-shadow:0 1px 2px #14191f0a,0 24px 48px -12px #14191f3d}.ant-form-item .ant-form-item-extra{font-size:12.5px;margin-top:2px}.ant-descriptions .ant-descriptions-item-label{color:var(--ink-500)}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important}}.dag-canvas{border:1px solid var(--line);border-radius:10px;background:var(--subtle);overflow:hidden}.dag-canvas--locked .react-flow__handle.dag-handle{opacity:0}.dag-node{width:200px;padding:10px 12px;box-sizing:border-box;background:var(--surface);border:1px solid var(--line-strong);border-radius:8px;box-shadow:0 1px 2px #14191f0d;transition:border-color .15s var(--ease),box-shadow .15s var(--ease)}.react-flow__node:hover .dag-node{border-color:var(--ink-300);box-shadow:0 2px 8px -2px #14191f1f}.dag-node--selected,.react-flow__node:hover .dag-node--selected{border-color:var(--accent);box-shadow:0 0 0 3px #0f768624}.dag-node--failed{border-color:#cf42388c}.dag-node--running{border-color:#0f76868c}.dag-node-title{font-size:13px;font-weight:600;color:var(--ink-900);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.dag-node-key{margin-top:2px;font-family:var(--mono);font-size:11.5px;color:var(--ink-400);display:flex;align-items:center;gap:6px}.dag-node-flag{font-family:inherit;padding:0 5px;border-radius:4px;background:var(--hover);color:var(--ink-500);font-size:11px;line-height:16px}.react-flow__handle.dag-handle{width:9px;height:9px;background:var(--surface);border:1.5px solid var(--ink-300);transition:border-color .15s var(--ease),transform .15s var(--ease)}.react-flow__handle.dag-handle:hover{border-color:var(--accent);transform:scale(1.25)}.react-flow__controls{box-shadow:0 1px 2px #14191f0f,0 0 0 1px var(--line);border-radius:6px;overflow:hidden}.react-flow__controls-button{border-bottom-color:var(--line)}.react-flow__node{cursor:pointer}.form-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));column-gap:20px}.form-grid--3{grid-template-columns:repeat(auto-fit,minmax(160px,1fr))}.form-section{display:flex;align-items:center;gap:12px;margin:8px 0 14px;font-size:13px;font-weight:600;color:var(--ink-700)}.form-section:after{content:"";flex:1;height:1px;background:var(--line)}.ant-form>.form-section:first-child{margin-top:0}.sql-editor{border:1px solid var(--line-strong);border-radius:8px;overflow:hidden;transition:border-color .15s var(--ease),box-shadow .15s var(--ease)}.sql-editor:focus-within{border-color:var(--accent);box-shadow:0 0 0 3px #0f768624}.sql-editor--readonly,.sql-editor--readonly:focus-within{background:var(--subtle);border-color:var(--line);box-shadow:none}.source-line{display:flex;align-items:center;flex-wrap:wrap;gap:6px;margin-top:12px;padding:8px 12px;border-radius:8px;background:var(--subtle);border:1px solid var(--line);font-size:13px;color:var(--ink-700)}.source-line>svg{color:var(--ink-400)}.key-box{padding:12px 14px;border-radius:8px;background:var(--subtle);border:1px solid var(--line);font-family:var(--mono);font-size:12.5px;line-height:1.6;word-break:break-all;-webkit-user-select:all;user-select:all}.steps{margin:16px 0 0;padding-left:20px;color:var(--ink-700);font-size:13px;line-height:1.8}@media(max-width:767px){.toolbar>.ant-select,.toolbar>.ant-picker{flex:1 1 calc(50% - 4px);width:auto!important;min-width:0}.toolbar>.ant-picker-range{flex-basis:100%}.page-title{font-size:18px}}.tag-list{display:inline-flex;flex-wrap:wrap;gap:4px}.tag-list .tag-chip{margin:0;cursor:pointer;transition:background-color .15s var(--ease),color .15s var(--ease)}.tag-list .tag-chip:hover{background:var(--line)}.tag-list .tag-chip.is-active{background:var(--accent-soft);color:var(--accent)}
