:root{--font-cjk: "Noto Sans SC", "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Arial, sans-serif;--font-latin: "Manrope", var(--font-cjk);--font-mono: "JetBrains Mono", ui-monospace, "SFMono-Regular", Menlo, Consolas, monospace;--bg: #f4f5f8;--surface: #ffffff;--surface-2: #f8f9fb;--surface-3: #eef0f4;--line: #e2e5eb;--line-2: #eceef2;--ink-1: #1b1f2a;--ink-2: #5b6472;--ink-3: #8a93a2;--ink-4: #b3bac6;--accent: #4356d6;--accent-hover: #3646b8;--accent-pressed: #2f3fb0;--accent-soft: #edf0ff;--accent-ink: #2f3fb0;--ok: #2e9e6b;--ok-soft: #e6f6ee;--ok-ink: #1f7a50;--warn: #d98a1b;--warn-soft: #fdf3e3;--warn-ink: #9a5f0b;--bad: #d2443d;--bad-soft: #fdecec;--bad-ink: #a5302a;--info: #3e7fd6;--info-soft: #e8f0fc;--info-ink: #2a5ca3;--side-bg: #161a23;--side-line: #262c3a;--side-ink: #a7afbf;--side-ink-active: #ffffff;--side-active-bg: #232938;--r-sm: 6px;--r-md: 8px;--r-lg: 12px;--r-pill: 999px;--shadow-1: 0 1px 2px rgba(16, 24, 40, .04), 0 1px 3px rgba(16, 24, 40, .06);--shadow-2: 0 4px 14px rgba(16, 24, 40, .08);--ease: cubic-bezier(.2, .7, .2, 1)}html,body{margin:0;background:var(--bg);color:var(--ink-1)}body{font-family:var(--font-cjk);font-size:13px;line-height:1.5;-webkit-font-smoothing:antialiased}#app{min-height:100vh}.num,.mono{font-family:var(--font-mono);font-variant-numeric:tabular-nums}.latin{font-family:var(--font-latin)}.muted{color:var(--ink-3)}.dim{color:var(--ink-2)}.small{font-size:12px}.xs{font-size:11px}.strong{font-weight:600}.page{animation:page-rise .26s var(--ease) both}@keyframes page-rise{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}@media(prefers-reduced-motion:reduce){.page{animation:none}}.page-head{display:flex;align-items:flex-end;gap:16px;margin-bottom:16px}.page-head .page-title{font-size:20px;font-weight:600;letter-spacing:-.2px;line-height:1.2;color:var(--ink-1)}.page-head .page-sub{color:var(--ink-3);font-size:12px;margin-top:4px}.page-head .page-actions{margin-left:auto;display:flex;gap:8px;align-items:center}.page-head .page-back{color:var(--ink-3);font-size:12px;display:inline-flex;align-items:center;gap:4px;margin-bottom:6px;cursor:pointer}.page-head .page-back:hover{color:var(--accent)}.panel{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-md);box-shadow:var(--shadow-1)}.panel-head{display:flex;align-items:center;gap:10px;padding:14px 18px;border-bottom:1px solid var(--line-2)}.panel-title{font-size:13px;font-weight:600}.panel-body{padding:18px}.panel.hover{transition:box-shadow .18s var(--ease),border-color .18s var(--ease),transform .18s var(--ease)}.panel.hover:hover{box-shadow:var(--shadow-2);border-color:#d5dae3;transform:translateY(-1px)}.stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-bottom:16px}.stat{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-md);padding:16px 18px;box-shadow:var(--shadow-1)}.stat .k{font-size:12px;color:var(--ink-3)}.stat .v{font-family:var(--font-latin);font-size:26px;font-weight:700;letter-spacing:-.5px;margin-top:4px;line-height:1.1;font-variant-numeric:tabular-nums}.stat .d{font-size:11px;color:var(--ink-3);margin-top:6px}.stat .d.up{color:var(--ok-ink)}.stat .d.warn{color:var(--warn-ink)}.table-wrap{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-md);box-shadow:var(--shadow-1);display:flex;flex-direction:column;min-height:0;overflow:hidden}.toolbar{display:flex;align-items:center;gap:8px;padding:12px 16px;border-bottom:1px solid var(--line-2);flex-wrap:wrap}.toolbar .grow{flex:1}.primary-cell{font-weight:600;color:var(--ink-1)}.sub-cell{font-size:11px;color:var(--ink-3);margin-top:1px}.row-actions{display:flex;gap:2px;opacity:.8}tr:hover .row-actions{opacity:1}.pill{display:inline-flex;align-items:center;gap:6px;height:22px;padding:0 9px 0 7px;border-radius:var(--r-pill);font-size:11px;font-weight:600;white-space:nowrap;line-height:1}.pill:before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor;flex:none}.pill.ok{background:var(--ok-soft);color:var(--ok-ink)}.pill.warn{background:var(--warn-soft);color:var(--warn-ink)}.pill.bad{background:var(--bad-soft);color:var(--bad-ink)}.pill.info{background:var(--info-soft);color:var(--info-ink)}.pill.neutral{background:var(--surface-3);color:var(--ink-2)}.pill.accent{background:var(--accent-soft);color:var(--accent-ink)}.pill.run:before{animation:pill-pulse 1.2s ease-in-out infinite}@keyframes pill-pulse{0%,to{opacity:1}50%{opacity:.25}}.pill.sm{height:20px;font-size:11px;padding:0 8px 0 6px}.tag-chip{display:inline-flex;align-items:center;height:20px;padding:0 7px;border-radius:4px;font-size:11px;font-weight:500;background:var(--surface-3);color:var(--ink-2);border:1px solid var(--line);white-space:nowrap}.tag-chip.mono{font-family:var(--font-mono)}.bar{height:6px;border-radius:3px;background:var(--surface-3);overflow:hidden}.bar>i{display:block;height:100%;border-radius:3px;background:var(--accent);transition:width .3s var(--ease)}.bar.ok>i{background:var(--ok)}.bar.warn>i{background:var(--warn)}.bar.bad>i{background:var(--bad)}.bar.run>i{background-image:linear-gradient(90deg,var(--accent) 0 60%,#7d8ae6 60% 100%);background-size:24px 6px;animation:bar-slide .8s linear infinite}@keyframes bar-slide{to{background-position:24px 0}}.desc{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px 24px}.desc.cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.desc.cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.desc .k{font-size:11px;color:var(--ink-3)}.desc .v{font-size:13px;margin-top:3px;font-weight:500}.steps{display:flex;align-items:center}.step{display:flex;align-items:center;gap:10px;flex:1;min-width:0}.step:last-child{flex:none}.step .dot{width:26px;height:26px;border-radius:50%;display:grid;place-items:center;font-family:var(--font-latin);font-weight:700;font-size:12px;border:1.5px solid var(--line);color:var(--ink-3);background:var(--surface);flex:none}.step.done .dot{background:var(--ok);border-color:var(--ok);color:#fff}.step.cur .dot{background:var(--accent);border-color:var(--accent);color:#fff;box-shadow:0 0 0 4px var(--accent-soft)}.step.err .dot{background:var(--bad);border-color:var(--bad);color:#fff}.step .t{font-size:13px;font-weight:600;color:var(--ink-3);white-space:nowrap}.step.done .t,.step.cur .t,.step.err .t{color:var(--ink-1)}.step .s{font-size:11px;color:var(--ink-3);white-space:nowrap}.step .ln{flex:1;height:1.5px;background:var(--line);margin:0 12px}.step.done .ln{background:var(--ok)}.note{display:flex;gap:10px;padding:10px 14px;border-radius:var(--r-sm);font-size:12px;border:1px solid;align-items:flex-start}.note.warn{background:var(--warn-soft);border-color:#f4dcae;color:var(--warn-ink)}.note.info{background:var(--info-soft);border-color:#c9dbf6;color:var(--info-ink)}.note.bad{background:var(--bad-soft);border-color:#f2c2bf;color:var(--bad-ink)}.note.ok{background:var(--ok-soft);border-color:#bfe6d1;color:var(--ok-ink)}.kbd{font-family:var(--font-mono);font-size:10px;padding:0 5px;border:1px solid var(--line);border-radius:4px;background:var(--surface);color:var(--ink-2);line-height:16px}.panel-body.empty-body{display:flex;align-items:center;justify-content:center;flex:1 1 auto;min-height:0}.table-wrap.fill{flex:1 1 auto;min-height:0}.table-wrap.fill>.n-data-table{flex:1 1 auto;min-height:0}.n-data-table--flex-height .n-data-table-base-table-body .n-scrollbar-content:has(>.n-data-table-empty){min-height:100%;display:flex;flex-direction:column}.n-data-table--flex-height .n-data-table-empty{flex:1 1 auto;display:flex;align-items:center;justify-content:center}.row{display:flex;align-items:center;gap:8px}.col{display:flex;flex-direction:column;gap:8px}.grow{flex:1;min-width:0}.divider{height:1px;background:var(--line-2)}.n-data-table .n-data-table-th{letter-spacing:.4px}.n-data-table .n-data-table-td{font-size:13px}.n-button{transition:transform .12s var(--ease),background-color .15s var(--ease),border-color .15s var(--ease),box-shadow .15s var(--ease)!important}.n-button:active:not(.n-button--disabled){transform:scale(.98)}.n-card.panel-card{box-shadow:var(--shadow-1)}.n-page-header .n-page-header__title{font-size:20px;font-weight:600;letter-spacing:-.2px}.n-page-header .n-page-header__subtitle{color:var(--ink-3);font-size:12px}
