:root{--bg:#f7f8fa;--card:#fff;--card-2:#fbfbfc;--hover:#f4f4f6;--active-bg:#eef0ff;--text:#18181b;--text-2:#71717a;--text-3:#a1a1aa;--border:#e5e7eb;--border-2:#eff0f2;--indigo:#4f46e5;--indigo-600:#4338ca;--indigo-50:#eef0ff;--run:#3b82f6;--done:#10b981;--queue:#9ca3af;--stop:#f59e0b;--err:#ef4444;--run-bg:#eff6ff;--done-bg:#ecfdf5;--queue-bg:#f3f4f6;--stop-bg:#fffbeb;--err-bg:#fef2f2;--r-card:12px;--r-ctl:8px;--r-pill:999px;--sh-sm:0 1px 2px rgba(16,24,40,.05);--sh-md:0 4px 12px rgba(16,24,40,.06),0 1px 3px rgba(16,24,40,.04);--sh-lg:0 12px 32px rgba(16,24,40,.1),0 4px 8px rgba(16,24,40,.05);--sh-pop:0 8px 28px rgba(16,24,40,.14);--ease:cubic-bezier(.32,.72,0,1);--t-fast:150ms;--t:200ms;--sidebar-w:244px;--topbar-h:60px;--font:"Inter","Noto Sans SC",-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;--mono:"Geist Mono",ui-monospace,"SF Mono","JetBrains Mono",Menlo,monospace}*{box-sizing:border-box}body,html{margin:0;padding:0;height:100%;background:var(--bg);color:var(--text);font-family:var(--font);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}::selection{background:var(--indigo-50);color:var(--indigo-600)}button{cursor:pointer}button,input,select,textarea{font-family:inherit}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-thumb{background:#dddfe3;border-radius:999px;border:3px solid transparent;background-clip:content-box}::-webkit-scrollbar-track{background:transparent}.t-num{font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.mono{font-family:var(--mono)}h1,h2,h3,h4{margin:0;font-weight:600;letter-spacing:-.01em}a{color:inherit;text-decoration:none}.btn{display:inline-flex;align-items:center;gap:8px;height:38px;padding:0 14px;border-radius:var(--r-ctl);border:1px solid var(--border);background:var(--card);color:var(--text);font-size:13.5px;font-weight:530;letter-spacing:-.01em;transition:background var(--t-fast) var(--ease),border-color var(--t-fast),box-shadow var(--t-fast),transform var(--t-fast);white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;user-select:none}.btn:hover{background:var(--hover)}.btn:active{transform:translateY(.5px)}.btn svg{width:16px;height:16px}.btn-primary{background:var(--indigo);border-color:var(--indigo);color:#fff;box-shadow:0 1px 2px rgba(79,70,229,.25)}.btn-primary:hover{background:var(--indigo-600);border-color:var(--indigo-600)}.btn-ghost{background:transparent;border-color:transparent;color:var(--text-2)}.btn-ghost:hover{background:var(--hover);color:var(--text)}.btn-danger{color:var(--err);border-color:var(--border)}.btn-danger:hover{background:var(--err-bg);border-color:#fca5a5}.btn-sm{height:32px;padding:0 11px;font-size:12.5px}.btn-lg{height:44px;padding:0 20px;font-size:14.5px}.btn[disabled]{opacity:.5;pointer-events:none}.icon-btn{display:inline-grid;place-items:center;width:36px;height:36px;border-radius:var(--r-ctl);border:1px solid transparent;background:transparent;color:var(--text-2);transition:background var(--t-fast),color var(--t-fast)}.icon-btn:hover{background:var(--hover);color:var(--text)}.card{background:var(--card);border:1px solid var(--border);border-radius:var(--r-card);box-shadow:var(--sh-sm)}.field{display:flex;flex-direction:column;gap:7px}.field>label{font-size:12.5px;font-weight:530;color:var(--text-2);letter-spacing:-.01em}.input,select.input{height:40px;padding:0 12px;border:1px solid var(--border);border-radius:var(--r-ctl);background:var(--card);color:var(--text);font-size:14px;width:100%;transition:border-color var(--t-fast),box-shadow var(--t-fast)}textarea.input{height:auto;padding:10px 12px;min-height:80px;resize:vertical}.input::placeholder{color:var(--text-3)}.input:focus{outline:none;border-color:var(--indigo);box-shadow:0 0 0 3px var(--indigo-50)}.input.err{border-color:var(--err)}.badge{display:inline-flex;align-items:center;gap:6px;height:23px;padding:0 9px 0 8px;border-radius:var(--r-pill);font-size:12px;font-weight:540;letter-spacing:-.01em;white-space:nowrap}.badge .dot{width:6px;height:6px;border-radius:50%;flex:none}.badge.run{background:var(--run-bg);color:#1d4ed8}.badge.run .dot{background:var(--run)}.badge.done{background:var(--done-bg);color:#047857}.badge.done .dot{background:var(--done)}.badge.queue{background:var(--queue-bg);color:#52525b}.badge.queue .dot{background:var(--queue)}.badge.stop{background:var(--stop-bg);color:#b45309}.badge.stop .dot{background:var(--stop)}.badge.err{background:var(--err-bg);color:#b91c1c}.badge.err .dot{background:var(--err)}.dot.pulse{position:relative}.dot.pulse:after{content:"";position:absolute;inset:-3px;border-radius:50%;background:inherit;opacity:.35;animation:pulse 1.6s var(--ease) infinite}@keyframes pulse{0%{transform:scale(.7);opacity:.5}70%{transform:scale(2.2);opacity:0}to{opacity:0}}.progress{height:6px;border-radius:999px;background:#eef0f2;overflow:hidden}.progress>i{display:block;height:100%;border-radius:999px;transition:width .6s var(--ease);background:var(--run)}.progress.done>i{background:var(--done)}.progress.stop>i{background:var(--stop)}.progress.err>i{background:var(--err)}.progress.indigo>i{background:var(--indigo)}.progress.live>i{background-image:linear-gradient(90deg,hsla(0,0%,100%,.22) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.22) 0,hsla(0,0%,100%,.22) 75%,transparent 0);background-size:16px 16px;animation:stripes .7s linear infinite}@keyframes stripes{to{background-position:16px 0}}.tbl{width:100%;border-collapse:collapse}.tbl th{text-align:left;font-size:11.5px;font-weight:560;color:var(--text-3);text-transform:uppercase;letter-spacing:.03em;padding:10px 14px;border-bottom:1px solid var(--border);background:var(--card)}.tbl td{padding:13px 14px;border-bottom:1px solid var(--border-2);font-size:13.5px}.tbl tr:last-child td{border-bottom:none}.tbl tbody tr:hover{background:var(--card-2)}.seg{display:inline-flex;padding:3px;gap:3px;background:#f1f2f4;border-radius:9px}.seg button{border:none;background:transparent;color:var(--text-2);font-size:12.5px;font-weight:530;padding:6px 12px;border-radius:6px}.seg button.on{background:#fff;color:var(--text);box-shadow:var(--sh-sm)}.chip{display:inline-flex;align-items:center;gap:6px;height:28px;padding:0 10px;border:1px solid var(--border);border-radius:var(--r-pill);font-size:12.5px;color:var(--text-2);background:var(--card)}.chip.on{background:var(--indigo-50);border-color:#c7cbff;color:var(--indigo-600)}.hr{height:1px;background:var(--border);border:none;margin:0}.skel{background:linear-gradient(90deg,#eef0f2 25%,#f6f7f8 37%,#eef0f2 63%);background-size:400% 100%;animation:sk 1.4s ease infinite;border-radius:6px}@keyframes sk{0%{background-position:100% 0}to{background-position:0 0}}.empty{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:56px 24px;gap:6px}.empty .ico{width:52px;height:52px;border-radius:14px;display:grid;place-items:center;background:var(--indigo-50);color:var(--indigo);margin-bottom:8px;font-size:24px}.empty h3{font-size:16px}.empty p{margin:0;color:var(--text-2);font-size:13.5px;max-width:360px;line-height:1.5}.page{padding:28px 32px 64px;max-width:1320px;margin:0 auto}.page-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:22px}.page-head h1{font-size:23px;letter-spacing:-.02em}.page-head .sub{color:var(--text-2);font-size:13.5px;margin-top:3px}.row{gap:10px;align-items:center}.col,.row{display:flex}.col{flex-direction:column}.spacer{flex:1 1}.flag{font-size:15px;line-height:1}.fade-in{animation:fadeIn var(--t) var(--ease)}@keyframes fadeIn{0%{transform:translateY(7px);opacity:.6}to{transform:none;opacity:1}}.overlay{position:fixed;inset:0;background:rgba(24,24,27,.34);-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);display:grid;place-items:center;z-index:100;padding:24px}.modal{background:var(--card);border-radius:16px;box-shadow:var(--sh-lg);border:1px solid var(--border);width:100%;max-width:560px;max-height:92vh;overflow:auto}.app-shell{display:grid;grid-template-columns:var(--sidebar-w) 1fr;height:100vh}.sidebar{border-right:1px solid var(--border);background:var(--card);display:flex;flex-direction:column;padding:14px 12px;gap:4px}.brand{display:flex;align-items:center;gap:10px;padding:6px 8px 14px;font-weight:650;font-size:16px;letter-spacing:-.02em}.brand .logo{display:inline-flex;gap:3px}.brand .logo i{width:3px;height:18px;border-radius:2px;background:var(--indigo);display:block}.brand .logo i:nth-child(2){opacity:.7}.brand .logo i:nth-child(3){opacity:.4}.nav-item{display:flex;align-items:center;gap:11px;height:38px;padding:0 11px;border:none;border-radius:8px;cursor:pointer;background:transparent;color:var(--text-2);font-size:13.5px;font-weight:500;letter-spacing:-.01em;width:100%;text-align:left}.nav-item:hover{background:var(--hover);color:var(--text)}.nav-item.active{background:var(--indigo-50);color:var(--indigo-600);font-weight:560}.sidebar-foot{margin-top:auto;padding:10px 8px;border-top:1px solid var(--border-2);font-size:12px;color:var(--text-3)}.main{overflow:auto;height:100vh;display:flex;flex-direction:column}.topbar{height:var(--topbar-h);border-bottom:1px solid var(--border);background:var(--card);display:flex;align-items:center;gap:14px;padding:0 24px;position:-webkit-sticky;position:sticky;top:0;z-index:5}.topbar .rental-chip{display:inline-flex;align-items:center;gap:7px;height:30px;padding:0 11px;border:1px solid var(--border);border-radius:var(--r-pill);font-size:12.5px;color:var(--text-2)}.topbar .rental-chip.soon{background:var(--stop-bg);border-color:#fcd9a6;color:#b45309}.avatar{width:32px;height:32px;border-radius:50%;background:var(--indigo);color:#fff;display:grid;place-items:center;font-size:13px;font-weight:600}.kpi-grid{display:grid;grid-template-columns:repeat(4,1fr);grid-gap:16px;gap:16px}.kpi-card{padding:18px}.kpi-card .label{color:var(--text-2);font-size:12.5px}.kpi-card .val{font-size:28px;font-weight:640;letter-spacing:-.02em;margin-top:6px}.logs{background:#0b0c0f;border-radius:var(--r-card);padding:10px 0;height:460px;overflow:auto;font-family:var(--mono);font-size:12.5px}.logline{display:grid;grid-template-columns:76px 12px 92px 1fr;grid-gap:10px;gap:10px;align-items:baseline;padding:3px 16px;color:#c4c7ce}.logline:hover{background:hsla(0,0%,100%,.03)}.logline .lts{color:#6b7280}.logline .ldot{width:7px;height:7px;border-radius:50%;align-self:center}.logline .lphase{color:#9ca3af}.logline.info .ldot{background:var(--run)}.logline.ok .ldot{background:var(--done)}.logline.warn .ldot{background:var(--stop)}.logline.err .ldot{background:var(--err)}.logline.ok .lmsg{color:#6ee7b7}.logline.err .lmsg{color:#fca5a5}.logline.warn .lmsg{color:#fcd34d}.toast{position:fixed;bottom:22px;left:50%;transform:translateX(-50%);background:var(--text);color:#fff;padding:10px 16px;border-radius:var(--r-ctl);font-size:13px;box-shadow:var(--sh-lg);z-index:200}.grid-2{grid-template-columns:1fr 1fr;grid-gap:14px}.grid-2,.grid-3{display:grid;gap:14px}.grid-3{grid-template-columns:repeat(3,1fr);grid-gap:14px}:root{--sidebar-w-collapsed:68px}.nav-ico{display:inline-flex;align-items:center;justify-content:center;flex:none}.hov:hover{background:var(--card-2)}@keyframes spin{to{transform:rotate(1turn)}}