:root{--bg: #f5f7fa;--surface: #ffffff;--surface-2: #f0f2f5;--border: #e4e7ed;--text: #1f2937;--text-dim: #6b7280;--primary: #4f8cff;--primary-hover: #3d7bf0;--danger: #ef4444;--success: #10b981;--radius: 10px;--page-max-width: 1200px;--page-padding: 24px;--section-gap: 24px;--card-gap: 20px;--header-height: 56px}*{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);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;height:var(--header-height);padding:0 var(--page-padding);border-bottom:1px solid var(--border);background:var(--surface);box-shadow:0 1px 2px #0000000a}.brand{font-weight:700;font-size:16px;letter-spacing:.3px;color:var(--text)}.brand span{color:var(--primary)}.container{max-width:var(--page-max-width);margin:0 auto;padding:var(--page-padding)}.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:#047857;border-color:#a7f3d0;background:#ecfdf5}.badge.err{color:#b91c1c;border-color:#fecaca;background:#fef2f2}.badge.run{color:#1d4ed8;border-color:#bfdbfe;background:#eff6ff}tr.log-launch td{background:#10b9810f}.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:#0f172a59;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:#fde68a;background:#fffbeb}.admin-topbar .brand span{color:#d97706}.admin-label{margin-left:10px;font-size:13px;font-weight:500;color:#d97706;letter-spacing:.02em}.admin-login-page{min-height:100%;display:flex;align-items:center;justify-content:center;padding:24px;background:var(--bg)}.admin-login-card{width:400px;max-width:92vw}.page-back{margin-bottom:8px}.stat-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:12px}.section-gap{margin-bottom:var(--section-gap)}.table-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch}.table-scroll :deep(table){min-width:720px}.table-scroll :deep(.cell-ellipsis){max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@media(max-width:768px){:root{--page-padding: 16px;--section-gap: 20px}}
