@import"https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@400;500;600;700&family=DM+Mono:wght@400;500&display=swap";:root{--c-primary: #1a56db;--c-primary-light: #e8f0fd;--c-primary-dark: #1044b0;--c-bg: #f4f6fb;--c-surface: #ffffff;--c-border: #e2e8f0;--c-border-subtle: #f0f4f8;--c-text-primary: #0f172a;--c-text-secondary:#475569;--c-text-muted: #94a3b8;--c-success: #16a34a;--c-success-light: #dcfce7;--c-warning: #d97706;--c-warning-light: #fef3c7;--c-danger: #dc2626;--c-danger-light: #fee2e2;--c-info: #0891b2;--c-info-light: #cffafe;--c-stage-1: #8b5cf6;--c-stage-2: #3b82f6;--c-stage-3: #06b6d4;--c-stage-4: #10b981;--c-stage-5: #f59e0b;--c-stage-6: #ef4444;--c-stage-7: #6366f1;--c-stage-8: #059669;--sidebar-width: 220px;--header-height: 56px;--radius-sm: 6px;--radius-md: 10px;--radius-lg: 16px;--shadow-sm: 0 1px 3px rgba(0,0,0,.06), 0 1px 2px rgba(0,0,0,.04);--shadow-md: 0 4px 12px rgba(0,0,0,.08);--shadow-lg: 0 12px 32px rgba(0,0,0,.1);--font-sans: "Noto Sans SC", -apple-system, sans-serif;--font-mono: "DM Mono", monospace}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html,body,#app{height:100%;font-family:var(--font-sans);font-size:14px;color:var(--c-text-primary);background:var(--c-bg);-webkit-font-smoothing:antialiased}a{color:inherit;text-decoration:none}::-webkit-scrollbar{width:5px;height:5px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--c-border);border-radius:99px}::-webkit-scrollbar-thumb:hover{background:var(--c-text-muted)}.text-muted{color:var(--c-text-muted)}.text-secondary{color:var(--c-text-secondary)}.mono{font-family:var(--font-mono)}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.badge{display:inline-flex;align-items:center;padding:2px 10px;border-radius:99px;font-size:12px;font-weight:500;white-space:nowrap}.badge-blue{background:var(--c-primary-light);color:var(--c-primary)}.badge-green{background:var(--c-success-light);color:var(--c-success)}.badge-yellow{background:var(--c-warning-light);color:var(--c-warning)}.badge-red{background:var(--c-danger-light);color:var(--c-danger)}.badge-purple{background:#f3f0ff;color:#7c3aed}.badge-gray{background:var(--c-border-subtle);color:var(--c-text-secondary)}.badge-cyan{background:var(--c-info-light);color:var(--c-info)}.btn{display:inline-flex;align-items:center;gap:6px;padding:7px 16px;border-radius:var(--radius-sm);font-size:14px;font-weight:500;font-family:var(--font-sans);cursor:pointer;border:none;transition:all .15s ease;white-space:nowrap;line-height:1.4}.btn:disabled{opacity:.55;cursor:not-allowed}.btn-primary{background:var(--c-primary);color:#fff}.btn-primary:hover:not(:disabled){background:var(--c-primary-dark)}.btn-secondary{background:var(--c-surface);color:var(--c-text-primary);border:1px solid var(--c-border)}.btn-secondary:hover:not(:disabled){background:var(--c-bg)}.btn-danger{background:var(--c-danger);color:#fff}.btn-danger:hover:not(:disabled){background:#b91c1c}.btn-ghost{background:transparent;color:var(--c-text-secondary)}.btn-ghost:hover:not(:disabled){background:var(--c-bg);color:var(--c-text-primary)}.btn-sm{padding:4px 12px;font-size:13px}.btn-icon{padding:7px;border-radius:var(--radius-sm)}.input,.select,.textarea{width:100%;padding:8px 12px;border:1px solid var(--c-border);border-radius:var(--radius-sm);font-size:14px;font-family:var(--font-sans);color:var(--c-text-primary);background:var(--c-surface);transition:border-color .15s,box-shadow .15s;outline:none}.input:focus,.select:focus,.textarea:focus{border-color:var(--c-primary);box-shadow:0 0 0 3px #1a56db1f}.textarea{resize:vertical;min-height:80px}.form-group{display:flex;flex-direction:column;gap:6px}.form-label{font-size:13px;font-weight:500;color:var(--c-text-secondary)}.card{background:var(--c-surface);border-radius:var(--radius-md);border:1px solid var(--c-border);box-shadow:var(--shadow-sm)}.divider{height:1px;background:var(--c-border);margin:12px 0}@keyframes spin{to{transform:rotate(360deg)}}.spinner{width:18px;height:18px;border-radius:50%;border:2px solid var(--c-border);border-top-color:var(--c-primary);animation:spin .6s linear infinite}@keyframes fadeIn{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}.fade-in{animation:fadeIn .2s ease forwards}.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:48px 24px;color:var(--c-text-muted);gap:12px;text-align:center}.empty-state svg{opacity:.4}.empty-state p{font-size:14px}
