/* 智库统一工作台 · 零构建样式（无 Tailwind / 无 npm） */
:root{
  --bg:#f5f7fb; --card:#fff; --line:#e6eaf2; --text:#1b2333; --muted:#7a869c;
  --accent:#2f5cff; --accent-soft:#eef2ff; --ok:#12a06a; --warn:#e08a12; --err:#dc3c4b;
  --s1:#3b82f6; --s2:#8b5cf6; --s3:#10b981; --s4:#f59e0b; --s5:#ef4444;
  --shadow:0 1px 2px rgba(20,30,60,.04),0 6px 20px rgba(20,30,60,.05);
  --radius:12px;
}
*{box-sizing:border-box}
html,body{margin:0;padding:0;height:100%}
body{background:var(--bg);color:var(--text);font:14px/1.55 -apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei","Noto Sans CJK SC",sans-serif}
a{color:inherit;text-decoration:none}
button,input,select,textarea{font:inherit}
button{cursor:pointer}
code{background:#f0f3f9;padding:1px 5px;border-radius:4px;font-size:12px}

/* ---------- 布局 ---------- */
#app{display:flex;min-height:100vh}
.side{width:238px;flex:0 0 238px;background:#101a30;color:#c9d4ea;display:flex;flex-direction:column;padding:20px 14px;position:sticky;top:0;height:100vh}
.brand{font-size:20px;font-weight:700;color:#fff;letter-spacing:.5px;padding:0 8px}
.brand span{display:block;font-size:12px;font-weight:500;color:#7f94bb;letter-spacing:2px;margin-top:2px}
.brand-sub{font-size:11px;color:#66799f;padding:12px 8px 18px;border-bottom:1px solid #22304d;margin-bottom:14px}
#nav{display:flex;flex-direction:column;gap:3px}
#nav a{display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:8px;font-size:13.5px;color:#b7c5de;transition:.15s}
#nav a b{font-size:15px;width:18px;text-align:center;color:#6f86b0;font-weight:400}
#nav a:hover{background:#1a2946;color:#fff}
#nav a.on{background:var(--accent);color:#fff;box-shadow:0 4px 14px rgba(47,92,255,.35)}
#nav a.on b{color:#fff}
.side-foot{margin-top:auto;border-top:1px solid #22304d;padding-top:16px;font-size:11.5px;color:#7f90b0;line-height:1.7}
.side-title{color:#5f739a;font-weight:600;margin:10px 0 4px;letter-spacing:.5px}
.side-foot p{margin:0 0 8px}
.side-foot b{color:#a9bcdf}
.main{flex:1;min-width:0;display:flex;flex-direction:column}
.top{height:70px;flex:0 0 70px;background:#fff;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;padding:0 26px;position:sticky;top:0;z-index:20}
.crumb{font-size:17px;font-weight:650}
.crumb-sub{font-size:12px;color:var(--muted);margin-top:1px}
.top-right{display:flex;align-items:center;gap:8px}
.top-right select{border:1px solid var(--line);background:#fff;border-radius:8px;padding:7px 9px;color:var(--text);font-size:12.5px}
#views{padding:22px 26px 50px;flex:1}
.view{display:none}
.view.on{display:block;animation:fade .18s ease}
@keyframes fade{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}

/* ---------- 通用组件 ---------- */
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);padding:18px}
.card h3{margin:0 0 14px;font-size:15px;font-weight:650;display:flex;align-items:center;justify-content:space-between}
.card h3 small{font-weight:400;color:var(--muted);font-size:12px}
.grid{display:grid;gap:16px}
.g2{grid-template-columns:repeat(2,minmax(0,1fr))}
.g3{grid-template-columns:repeat(3,minmax(0,1fr))}
.g5{grid-template-columns:repeat(5,minmax(0,1fr))}
.g-main{grid-template-columns:minmax(0,1.55fr) minmax(0,1fr)}
.row{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.spread{display:flex;align-items:center;justify-content:space-between;gap:10px}
.muted{color:var(--muted)}
.small{font-size:12px}
.mono{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px}
.mt{margin-top:16px}
.mb{margin-bottom:16px}
.hr{height:1px;background:var(--line);margin:14px 0}
.empty{padding:28px;text-align:center;color:var(--muted);font-size:13px}

.btn{border:1px solid var(--line);background:#fff;color:var(--text);border-radius:8px;padding:7px 13px;font-size:12.5px;transition:.15s;white-space:nowrap}
.btn:hover{border-color:#b9c6e8;background:#f8faff}
.btn.primary{background:var(--accent);border-color:var(--accent);color:#fff}
.btn.primary:hover{background:#244ae0}
.btn.ghost{background:transparent}
.btn.sm{padding:4px 9px;font-size:11.5px}
.btn.danger{color:var(--err);border-color:#f3c9ce}
.btn:disabled{opacity:.45;cursor:not-allowed}
.btn.block{width:100%;padding:11px;font-size:14px}
[hidden]{display:none!important}
.chip{display:inline-flex;align-items:center;gap:5px;padding:2px 9px;border-radius:20px;font-size:11.5px;background:#f0f3f9;color:#5b6880;white-space:nowrap}
.chip.demo{background:#fff3d6;color:#946200;font-weight:600}
.chip.ok{background:#e4f7ee;color:#0b7c52}
.chip.warn{background:#fff1dc;color:#9a5c00}
.chip.err{background:#fde9ec;color:#b32535}
.chip.info{background:var(--accent-soft);color:#2b49c4}
.tag{display:inline-block;padding:2px 8px;border-radius:6px;background:#f1f4fa;color:#5f6b83;font-size:11.5px;margin:2px 4px 2px 0}
.dot{width:8px;height:8px;border-radius:50%;display:inline-block;flex:0 0 8px}
.dot.online{background:var(--ok);box-shadow:0 0 0 3px rgba(18,160,106,.13)}
.dot.degraded{background:var(--warn);box-shadow:0 0 0 3px rgba(224,138,18,.13)}
.dot.offline,.dot.disabled{background:#b6bfcd}
.dot.unknown{background:#9aa7bd}
input[type=text],input[type=password],input[type=search],textarea,select{
  border:1px solid var(--line);border-radius:8px;padding:8px 11px;background:#fff;color:var(--text);outline:none;width:100%
}
input:focus,textarea:focus,select:focus{border-color:var(--accent);box-shadow:0 0 0 3px rgba(47,92,255,.09)}
textarea{resize:vertical;min-height:70px}
label.field{display:block;font-size:12px;color:var(--muted);margin-bottom:10px}
label.field span{display:block;margin-bottom:5px}
table{width:100%;border-collapse:collapse;font-size:13px}
th,td{text-align:left;padding:9px 10px;border-bottom:1px solid var(--line);vertical-align:top}
th{color:var(--muted);font-weight:600;font-size:12px;background:#fafbfe}
tr:last-child td{border-bottom:none}

/* ---------- 统计卡 ---------- */
.stat{background:#fff;border:1px solid var(--line);border-radius:var(--radius);padding:16px 18px;box-shadow:var(--shadow)}
.stat .k{font-size:12px;color:var(--muted)}
.stat .v{font-size:26px;font-weight:700;margin-top:6px;letter-spacing:-.5px}
.stat .d{font-size:11.5px;color:var(--muted);margin-top:4px}
.stat.accent .v{color:var(--accent)}

/* ---------- 漏斗 / 阶段条 ---------- */
.funnel{display:flex;gap:6px;margin-top:6px}
.funnel .seg{height:10px;border-radius:5px;min-width:4px}
.legend{display:flex;gap:14px;flex-wrap:wrap;font-size:11.5px;color:var(--muted);margin-top:10px}
.legend i{width:9px;height:9px;border-radius:3px;display:inline-block;margin-right:5px}

/* ---------- 待办 ---------- */
.todo{display:flex;align-items:flex-start;gap:10px;padding:10px 2px;border-bottom:1px solid #f0f2f7}
.todo:last-child{border-bottom:none}
.todo input[type=checkbox]{margin-top:4px;width:15px;height:15px;accent-color:var(--accent);cursor:pointer}
.todo .t{flex:1;min-width:0}
.todo .t .title{font-size:13px;word-break:break-word}
.todo.done .title{text-decoration:line-through;color:var(--muted)}
.todo .meta{font-size:11px;color:var(--muted);margin-top:3px;display:flex;gap:8px;flex-wrap:wrap}
.todo .del{opacity:0;transition:.15s}
.todo:hover .del{opacity:1}

/* ---------- 看板 ---------- */
.board{display:grid;grid-template-columns:repeat(5,minmax(200px,1fr));gap:12px;align-items:start}
.board .col{background:#eef1f7;border-radius:10px;padding:10px;min-height:220px}
.board .col h4{margin:2px 4px 10px;font-size:13px;display:flex;justify-content:space-between;align-items:center}
.board .col h4 .n{background:#fff;border-radius:20px;padding:1px 8px;font-size:11px;color:var(--muted)}
.board .col .bar{height:3px;border-radius:3px;margin:-6px 4px 10px}
.mini{background:#fff;border:1px solid var(--line);border-radius:8px;padding:10px;margin-bottom:8px;box-shadow:0 1px 2px rgba(20,30,60,.03)}
.mini .nm{font-size:13px;font-weight:600}
.mini .sub{font-size:11px;color:var(--muted);margin-top:3px}
.mini .act{margin-top:8px;display:flex;justify-content:flex-end}

/* ---------- 系统卡片 ---------- */
.syscard{display:flex;flex-direction:column;gap:8px}
.syscard .hd{display:flex;align-items:center;gap:8px}
.syscard .nm{font-weight:650;font-size:14px}
.syscard .purpose{font-size:12px;color:var(--muted);min-height:34px}
.syscard .note{font-size:11px;color:#8a94a8;background:#f7f9fc;border-radius:6px;padding:7px 8px;line-height:1.5}

/* ---------- 时间轴 ---------- */
.tl{border-left:2px solid #e6eaf2;margin-left:8px;padding-left:16px}
.tl .item{position:relative;padding:0 0 16px}
.tl .item::before{content:"";position:absolute;left:-22px;top:5px;width:9px;height:9px;border-radius:50%;background:#fff;border:2px solid var(--accent)}
.tl .item .ttl{font-size:13px;font-weight:600}
.tl .item .at{font-size:11px;color:var(--muted)}
.tl .item .dt{font-size:12px;color:#5b6880;margin-top:3px;word-break:break-word}

/* ---------- 抽屉 / 弹窗 ---------- */
.drawer,.modal{position:fixed;inset:0;z-index:60}
.drawer-mask,.modal-mask{position:absolute;inset:0;background:rgba(12,20,38,.38)}
.drawer-body{position:absolute;right:0;top:0;bottom:0;width:min(620px,94vw);background:var(--bg);overflow:auto;padding:22px;box-shadow:-8px 0 30px rgba(10,20,40,.18)}
.modal-body{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:min(460px,92vw);background:#fff;border-radius:14px;padding:22px;box-shadow:0 20px 60px rgba(10,20,40,.25)}
.close{float:right;border:0;background:transparent;font-size:22px;line-height:1;color:var(--muted)}

/* ---------- AI 对话 ---------- */
.chatbox{height:420px;overflow:auto;background:#fafbfe;border:1px solid var(--line);border-radius:10px;padding:16px}
.msg{max-width:82%;padding:10px 13px;border-radius:12px;margin-bottom:12px;font-size:13px;white-space:pre-wrap;word-break:break-word;line-height:1.65}
.msg.me{background:var(--accent);color:#fff;margin-left:auto;border-bottom-right-radius:3px}
.msg.ai{background:#fff;border:1px solid var(--line);border-bottom-left-radius:3px}
.msg .src{display:block;font-size:11px;opacity:.65;margin-top:6px}

/* ---------- 登录 ---------- */
.login-wrap{min-height:100vh;display:flex;align-items:center;justify-content:center;background:radial-gradient(1000px 600px at 50% -10%,#2b47a0 0%,#101a30 62%)}
.login-card{width:min(400px,92vw);background:#fff;border-radius:16px;padding:32px;box-shadow:0 24px 70px rgba(0,0,0,.28)}
.login-brand{font-size:24px;font-weight:700}
.login-brand span{display:block;font-size:12px;color:var(--muted);letter-spacing:2px;margin-top:3px;font-weight:500}
.login-sub{color:var(--muted);font-size:13px;margin:14px 0 20px}
.login-card form label{display:block;font-size:12px;color:var(--muted);margin-bottom:14px}
.login-card form label input{margin-top:6px}
.hint{font-size:12px;border-radius:8px;padding:9px 11px;margin-bottom:14px}
.hint.demo{background:#fff6e2;color:#8a5c00}
.hint.warn{background:#fde9ec;color:#a52332}
.err{color:var(--err);font-size:12.5px;min-height:20px;margin-top:10px}
.login-tip{margin-top:16px;font-size:11.5px;color:var(--muted);line-height:1.7}
.login-foot{margin-top:18px;padding-top:14px;border-top:1px solid var(--line);font-size:11px;color:#a0aabd;text-align:center}

.toast{position:fixed;left:50%;bottom:28px;transform:translate(-50%,20px);background:#1b2333;color:#fff;padding:10px 18px;border-radius:9px;font-size:13px;opacity:0;pointer-events:none;transition:.22s;z-index:100;max-width:80vw;text-align:center}
.toast.on{opacity:1;transform:translate(-50%,0)}
.toast.bad{background:#b32535}

@media(max-width:1200px){.g5{grid-template-columns:repeat(3,minmax(0,1fr))}.board{grid-template-columns:repeat(3,minmax(200px,1fr))}}
@media(max-width:900px){.side{width:64px;flex-basis:64px;padding:16px 8px}.brand,.brand-sub,.side-foot,#nav a{font-size:0}#nav a{justify-content:center;padding:11px 0}#nav a b{font-size:17px}.g-main,.g2,.g3{grid-template-columns:1fr}.top{padding:0 14px}.top-right .btn.ghost{display:none}#views{padding:16px}}
