:root{--bg: #f4f5fa;--panel: #ffffff;--border: #e5e7f0;--text: #1c1e2b;--text-2: #6b7085;--text-3: #9aa0b5;--primary: #5b5bd6;--primary-dark: #4a48c4;--primary-weak: #eeeefc;--success: #16a34a;--success-weak: #e9f9ef;--warning: #d97706;--warning-weak: #fdf3e3;--danger: #dc2626;--danger-weak: #fdecec;--sidebar: #191a2e;--sidebar-text: #b7b9cc;--radius: 12px;--radius-sm: 8px;--shadow: 0 1px 3px rgba(24, 26, 50, .06), 0 4px 16px rgba(24, 26, 50, .05);--shadow-lg: 0 8px 32px rgba(24, 26, 50, .14)}*{margin:0;padding:0;box-sizing:border-box}html,body,#app{height:100%}body{font-family:-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,sans-serif;background:var(--bg);color:var(--text);font-size:14px;line-height:1.6;-webkit-font-smoothing:antialiased}a{color:inherit;text-decoration:none}button{font-family:inherit;cursor:pointer}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-thumb{background:#d3d5e4;border-radius:4px}::-webkit-scrollbar-track{background:transparent}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;border:1px solid var(--border);background:var(--panel);color:var(--text);border-radius:var(--radius-sm);padding:8px 16px;font-size:14px;font-weight:500;transition:all .15s ease;white-space:nowrap}.btn:hover{border-color:#cdd0e0;background:#fafafd}.btn:disabled{opacity:.55;cursor:not-allowed}.btn-primary{background:var(--primary);border-color:var(--primary);color:#fff}.btn-primary:hover:not(:disabled){background:var(--primary-dark);border-color:var(--primary-dark)}.btn-danger{color:var(--danger);border-color:#f3c7c7;background:#fff}.btn-danger:hover{background:var(--danger-weak)}.btn-ghost{border-color:transparent;background:transparent;color:var(--text-2)}.btn-ghost:hover{background:#787da01a;border-color:transparent}.btn-sm{padding:5px 10px;font-size:13px;border-radius:6px}.btn-block{width:100%}.input,.textarea,.select{width:100%;border:1px solid var(--border);border-radius:var(--radius-sm);padding:9px 12px;font-size:14px;font-family:inherit;color:var(--text);background:#fff;transition:border-color .15s,box-shadow .15s;outline:none}.input:focus,.textarea:focus,.select:focus{border-color:var(--primary);box-shadow:0 0 0 3px #5b5bd61f}.textarea{resize:vertical;min-height:72px;line-height:1.6}.field{margin-bottom:16px}.field-label{display:block;font-size:13px;font-weight:600;color:var(--text-2);margin-bottom:6px}.field-error{color:var(--danger);font-size:13px;margin-top:6px}.field-hint{color:var(--text-3);font-size:12px;margin-top:6px}.card{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow)}.badge{display:inline-flex;align-items:center;padding:1px 8px;border-radius:999px;font-size:12px;font-weight:500;line-height:1.8}.badge-high{color:var(--danger);background:var(--danger-weak)}.badge-medium{color:var(--warning);background:var(--warning-weak)}.badge-low{color:var(--text-2);background:#eef0f6}.badge-primary{color:var(--primary);background:var(--primary-weak)}.badge-success{color:var(--success);background:var(--success-weak)}.badge-category{color:#4b5563;background:#f1f2f7}.modal-mask{position:fixed;top:0;right:0;bottom:0;left:0;background:#1416286b;display:flex;align-items:center;justify-content:center;z-index:100;padding:20px}.modal{background:#fff;border-radius:14px;box-shadow:var(--shadow-lg);width:100%;max-width:520px;max-height:86vh;overflow-y:auto;padding:22px 24px}.modal-lg{max-width:720px}.modal-title{font-size:17px;font-weight:700;margin-bottom:16px}.empty-state{text-align:center;color:var(--text-3);padding:40px 16px;font-size:14px}.spinner{width:16px;height:16px;border:2px solid rgba(91,91,214,.25);border-top-color:var(--primary);border-radius:50%;animation:spin .7s linear infinite;display:inline-block}.spinner-light{border-color:#fff6;border-top-color:#fff}@keyframes spin{to{transform:rotate(360deg)}}.alert{border-radius:var(--radius-sm);padding:10px 14px;font-size:13px;margin-bottom:14px}.alert-error{background:var(--danger-weak);color:var(--danger)}.alert-success{background:var(--success-weak);color:var(--success)}.alert-info{background:var(--primary-weak);color:var(--primary-dark)}.progress-track{height:8px;background:#ecedf5;border-radius:999px;overflow:hidden}.progress-fill{height:100%;border-radius:999px;background:linear-gradient(90deg,#6d6df0,#8b5cf6);transition:width .4s ease}.text-secondary{color:var(--text-2)}.text-muted{color:var(--text-3)}.page{max-width:1100px;margin:0 auto}.page-narrow{max-width:860px;margin:0 auto}.rich-text a{color:var(--primary);text-decoration:none;word-break:break-all}.rich-text a:hover{text-decoration:underline}
