:root{--bg: #0b0e14;--surface: #151a23;--surface-2: #1c232f;--border: #29313f;--text: #e6e9ef;--text-dim: #9aa4b2;--primary: #4f8cff;--primary-hover: #3d7bf0;--danger: #ff5c5c;--success: #34d399;--radius: 10px}*{box-sizing:border-box}html,body,#app{height:100%;margin:0}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Microsoft YaHei,sans-serif;background:var(--bg);color:var(--text);font-size:14px;line-height:1.5}a{color:var(--primary);text-decoration:none}.btn{display:inline-flex;align-items:center;gap:6px;background:var(--primary);color:#fff;border:none;padding:8px 16px;border-radius:var(--radius);font-size:14px;cursor:pointer;transition:background .15s}.btn:hover{background:var(--primary-hover)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-ghost{background:transparent;border:1px solid var(--border);color:var(--text)}.btn-ghost:hover{background:var(--surface-2)}.btn-danger{background:var(--danger)}.btn-sm{padding:5px 10px;font-size:13px}.input,textarea.input,select.input{width:100%;background:var(--surface-2);border:1px solid var(--border);color:var(--text);padding:9px 12px;border-radius:var(--radius);font-size:14px;outline:none;transition:border-color .15s}.input:focus{border-color:var(--primary)}label{display:block;margin-bottom:6px;color:var(--text-dim);font-size:13px}.field{margin-bottom:14px}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:18px}.topbar{display:flex;align-items:center;justify-content:space-between;padding:12px 24px;border-bottom:1px solid var(--border);background:var(--surface)}.brand{font-weight:700;font-size:16px;letter-spacing:.3px}.brand span{color:var(--primary)}.container{max-width:1000px;margin:0 auto;padding:28px 24px}.row{display:flex;align-items:center;gap:12px}.between{justify-content:space-between}.muted{color:var(--text-dim)}.mono{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px}.badge{display:inline-block;padding:2px 9px;border-radius:999px;font-size:12px;border:1px solid var(--border);color:var(--text-dim)}.badge.ok{color:var(--success);border-color:#1f6b52;background:#10241d}.badge.err{color:var(--danger);border-color:#6b2020;background:#241010}.badge.run{color:var(--primary);border-color:#26456b;background:#101a28}tr.log-launch td{background:#34d3990f}.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:14px}table{width:100%;border-collapse:collapse}th,td{text-align:left;padding:9px 10px;border-bottom:1px solid var(--border)}th{color:var(--text-dim);font-weight:500;font-size:13px}.error-text{color:var(--danger);font-size:13px;margin-top:8px}.empty{text-align:center;color:var(--text-dim);padding:40px 0}.modal-mask{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:50}.modal{width:420px;max-width:92vw}.tabs{display:flex;gap:4px;border-bottom:1px solid var(--border);margin-bottom:18px}.tab{padding:9px 14px;cursor:pointer;color:var(--text-dim);border-bottom:2px solid transparent}.tab.active{color:var(--text);border-bottom-color:var(--primary)}.admin-shell{min-height:100%}.admin-topbar{border-bottom-color:#3d3520;background:#12100c}.admin-topbar .brand span{color:#e8b84a}.admin-label{margin-left:10px;font-size:13px;font-weight:500;color:#e8b84a;letter-spacing:.02em}.admin-login-page{min-height:100%;display:flex;align-items:center;justify-content:center;padding:24px;background:#0a0908}.admin-login-card{width:400px;max-width:92vw;border-color:#3d3520}
