/* ═══════════════════════════════════════════════════
   墨忆 v3.1 — 水墨风样式
   ═══════════════════════════════════════════════════ */
:root{
  --ink:#1a1a1a; --ink-soft:#2c2c2c; --ink-fade:#4a4a4a;
  --ink-mist:#8a8a8a; --ink-ghost:#c5c0b8;
  --paper:#f5f0e8; --paper-2:#ede8de; --paper-3:#e0dbd0;
  --vermilion:#a0291f; --seal:#8b2419;
  --line:#d8d2c6; --shadow:rgba(26,26,26,.08); --shadow-2:rgba(26,26,26,.15);
}
*{margin:0;padding:0;box-sizing:border-box;}
body{font-family:'Noto Serif SC','Source Han Serif SC','Songti SC','SimSun',serif;background:var(--paper);color:var(--ink);min-height:100vh;overflow-x:hidden;}
.hidden{display:none!important;}
.fade-in{animation:fadeIn .4s ease-out;}
@keyframes fadeIn{from{opacity:0;transform:translateY(8px);}to{opacity:1;transform:translateY(0);}}

/* ── 墨晕 ── */
.ink-bloom{position:fixed;top:-200px;right:-200px;width:600px;height:600px;background:radial-gradient(circle,rgba(26,26,26,.06) 0%,rgba(26,26,26,.02) 40%,transparent 70%);border-radius:50%;pointer-events:none;z-index:0;}

/* ── 品牌 ── */
.brand{display:flex;align-items:baseline;gap:14px;}
.brand.center{justify-content:center;margin-bottom:8px;}
.brand-title{font-size:36px;font-weight:700;letter-spacing:.15em;position:relative;}
.brand-title::after{content:'';position:absolute;bottom:4px;right:-10px;width:8px;height:8px;background:var(--vermilion);border-radius:1px;transform:rotate(45deg);}
.brand-sub{font-size:12px;letter-spacing:.3em;color:var(--ink-mist);text-transform:uppercase;}

/* ── 认证页 ── */
.auth-view{display:flex;align-items:center;justify-content:center;min-height:100vh;padding:40px 20px;position:relative;z-index:1;}
.auth-card{width:420px;max-width:100%;background:rgba(255,255,255,.6);border:1px solid var(--line);border-radius:2px;padding:40px 36px;box-shadow:0 4px 24px var(--shadow);}
.auth-desc{font-size:13px;line-height:1.8;color:var(--ink-fade);margin:18px 0 24px;text-align:center;}
.tab-row{display:flex;gap:0;margin-bottom:20px;border-bottom:1px solid var(--line);}
.tab-btn{flex:1;padding:10px;background:none;border:none;font-family:inherit;font-size:14px;color:var(--ink-mist);cursor:pointer;border-bottom:2px solid transparent;transition:all .25s;}
.tab-btn.active{color:var(--ink);border-bottom-color:var(--ink);font-weight:700;}
.auth-input{width:100%;border:1px solid var(--line);border-radius:2px;padding:12px 14px;font-size:14px;font-family:inherit;color:var(--ink);background:var(--paper);outline:none;margin-bottom:14px;transition:border-color .3s;}
.auth-input:focus{border-color:var(--ink-fade);}
.auth-input::placeholder{color:var(--ink-ghost);}
.auth-err{color:var(--vermilion);font-size:13px;margin-top:8px;text-align:center;}
.key-result{margin-top:20px;}
.key-warn{color:var(--vermilion);font-size:12px;margin-bottom:10px;text-align:center;}
.key-box{display:flex;align-items:center;gap:8px;background:var(--paper-2);border:1px solid var(--line);border-radius:2px;padding:10px 12px;margin-bottom:14px;}
.key-box code{flex:1;font-size:12px;word-break:break-all;color:var(--ink);font-family:'Courier New',monospace;}
.key-hint{font-size:12px;color:var(--ink-mist);text-align:center;margin-bottom:12px;}

/* ── 按钮 ── */
.btn{padding:8px 18px;border:1px solid var(--line);border-radius:2px;font-size:13px;font-family:inherit;letter-spacing:.1em;cursor:pointer;transition:all .25s;background:transparent;color:var(--ink-fade);}
.btn-primary{background:var(--ink);color:var(--paper);border-color:var(--ink);}
.btn-primary:hover{background:var(--ink-soft);box-shadow:0 2px 8px var(--shadow-2);}
.btn-ghost{color:var(--ink-fade);border-color:var(--line);}
.btn-ghost:hover{border-color:var(--ink-fade);color:var(--ink);background:var(--paper-2);}
.btn-danger{color:var(--vermilion);border-color:var(--vermilion);}
.btn-danger:hover{background:var(--vermilion);color:var(--paper);}
.btn-sm{padding:6px 14px;font-size:12px;}
.btn.block{width:100%;}
.btn:disabled{opacity:.5;cursor:default;}

/* ── 顶栏 ── */
.top-bar{display:flex;align-items:center;justify-content:space-between;padding:28px 48px 20px;border-bottom:1px solid var(--line);position:relative;z-index:1;}
.top-right{display:flex;align-items:center;gap:10px;flex-wrap:wrap;}
.agent-name{font-size:13px;color:var(--ink-fade);padding:4px 10px;background:var(--paper-2);border:1px solid var(--line);border-radius:2px;}

/* ── 统计栏 ── */
.stats-bar{display:flex;align-items:center;gap:10px;padding:16px 48px;font-size:13px;color:var(--ink-fade);border-bottom:1px solid var(--line);}
.stat-item b{font-size:16px;font-weight:700;color:var(--ink);}
.stat-dot{width:8px;height:8px;border-radius:50%;display:inline-block;}
.stat-dot.high{background:var(--vermilion);} .stat-dot.medium{background:var(--ink-fade);} .stat-dot.low{background:var(--ink-ghost);}
.stat-divider{width:1px;height:16px;background:var(--line);margin:0 6px;}

/* ── 布局 ── */
.layout{display:flex;gap:40px;padding:32px 48px;position:relative;z-index:1;max-width:1400px;margin:0 auto;}
.side-panel{width:280px;flex-shrink:0;}
.right-panel{flex:1;min-width:0;}
.block-title{font-size:14px;font-weight:700;letter-spacing:.2em;color:var(--ink-fade);margin-bottom:16px;padding-bottom:10px;border-bottom:1px solid var(--line);}
.mt{margin-top:20px;}

/* ── 搜索/筛选 ── */
.search-row{display:flex;gap:8px;}
.search-input{flex:1;border:1px solid var(--line);border-radius:2px;padding:8px 12px;font-size:13px;font-family:inherit;color:var(--ink);background:var(--paper);outline:none;}
.search-input:focus{border-color:var(--ink-fade);}
.filter-row{display:flex;gap:6px;margin-top:14px;flex-wrap:wrap;}
.filter-btn{padding:5px 14px;border:1px solid var(--line);border-radius:2px;font-size:12px;font-family:inherit;color:var(--ink-mist);background:transparent;cursor:pointer;transition:all .2s;}
.filter-btn:hover{border-color:var(--ink-fade);color:var(--ink);}
.filter-btn.active{background:var(--ink);color:var(--paper);border-color:var(--ink);}

/* ── 搜索透明度 ── */
.search-meta{font-size:11px;color:var(--ink-mist);margin-top:8px;padding:4px 0;letter-spacing:.05em;}

/* ── 视图切换 ── */
.view-toggle{display:flex;gap:6px;}
.view-toggle .btn-sm.active{background:var(--ink);color:var(--paper);border-color:var(--ink);}

/* ── 记忆卡片 ── */
.memory-list{display:flex;flex-direction:column;gap:12px;}
.memory-card{background:rgba(255,255,255,.6);border:1px solid var(--line);border-radius:2px;padding:18px 22px;cursor:pointer;transition:all .25s;position:relative;overflow:hidden;}
.memory-card:hover{border-color:var(--ink-ghost);box-shadow:0 2px 12px var(--shadow-2);transform:translateY(-1px);}
.memory-card .imp-bar{position:absolute;left:0;top:0;bottom:0;width:3px;}
.memory-card .imp-bar.high{background:var(--vermilion);} .memory-card .imp-bar.medium{background:var(--ink-fade);} .memory-card .imp-bar.low{background:var(--ink-ghost);}
.memory-card .card-summary{font-size:14px;line-height:1.7;color:var(--ink);margin-bottom:8px;padding-left:10px;}
.memory-card .card-meta{display:flex;align-items:center;gap:12px;font-size:11px;color:var(--ink-mist);padding-left:10px;flex-wrap:wrap;}
.memory-card .sync-badge{padding:1px 8px;border-radius:2px;font-size:10px;letter-spacing:.1em;}
.memory-card .sync-badge.synced{background:var(--paper-3);color:var(--ink-fade);}
.memory-card .sync-badge.unsynced{background:transparent;color:var(--vermilion);border:1px solid var(--vermilion);}
.memory-card .card-tag{font-size:10px;color:var(--ink-ghost);}
.score-badge{font-size:10px;color:var(--ink-mist);background:var(--paper-3);padding:1px 6px;border-radius:2px;}

/* ── 空状态 ── */
.empty-state{text-align:center;padding:80px 20px;color:var(--ink-ghost);}
.empty-circle{width:60px;height:60px;border:2px solid var(--line);border-radius:50%;margin:0 auto 20px;}

/* ── 弹窗 ── */
.modal{position:fixed;inset:0;z-index:100;display:flex;align-items:center;justify-content:center;}
.modal-backdrop{position:absolute;inset:0;background:rgba(26,26,26,.3);backdrop-filter:blur(4px);}
.modal-content{position:relative;width:600px;max-width:90vw;max-height:80vh;background:var(--paper);border:1px solid var(--ink-ghost);border-radius:2px;padding:28px 32px;box-shadow:0 12px 40px rgba(26,26,26,.25);display:flex;flex-direction:column;overflow:hidden;}
.modal-content.modal-wide{width:800px;}
.modal-header{display:flex;align-items:center;gap:14px;padding-bottom:16px;border-bottom:1px solid var(--line);}
.modal-close{margin-left:auto;background:none;border:none;font-size:24px;color:var(--ink-mist);cursor:pointer;line-height:1;}
.modal-close:hover{color:var(--ink);}
.importance-badge{padding:3px 12px;border-radius:2px;font-size:12px;letter-spacing:.1em;}
.importance-badge.high{background:var(--vermilion);color:var(--paper);}
.importance-badge.medium{background:var(--ink-fade);color:var(--paper);}
.importance-badge.low{background:var(--paper-3);color:var(--ink-mist);}
.detail-time{font-size:12px;color:var(--ink-mist);}
.sync-badge{font-size:11px;padding:2px 8px;border-radius:2px;}
.sync-badge.synced{background:var(--paper-3);color:var(--ink-fade);}
.sync-badge.unsynced{background:transparent;color:var(--vermilion);border:1px solid var(--vermilion);}
.detail-content{flex:1;overflow-y:auto;padding:20px 0;font-size:15px;line-height:2;color:var(--ink);white-space:pre-wrap;}
.detail-tags{display:flex;gap:6px;flex-wrap:wrap;padding-bottom:16px;}
.tag-chip{display:inline-block;padding:2px 10px;margin:2px 4px 2px 0;border:1px solid var(--line);border-radius:2px;font-size:12px;color:var(--ink-mist);background:var(--paper);}
.detail-vitality{font-size:12px;color:var(--ink-mist);padding:8px 0;border-top:1px solid var(--line);}
.detail-vitality.has-data{color:var(--ink-fade);}
.modal-footer{display:flex;justify-content:space-between;align-items:center;padding-top:16px;border-top:1px solid var(--line);}
.detail-meta{font-size:11px;color:var(--ink-ghost);}

/* ── MCP 配置 ── */
.mcp-body{padding:20px 0;overflow-y:auto;}
.mcp-desc{font-size:13px;color:var(--ink-fade);margin-bottom:14px;line-height:1.7;}
.mcp-config{background:var(--ink);color:#d4d0c8;padding:16px;border-radius:2px;font-size:12px;line-height:1.6;overflow-x:auto;margin-bottom:14px;font-family:'Courier New',monospace;}
.mcp-hint{font-size:12px;color:var(--ink-mist);margin-top:8px;}
.mcp-hint code{color:var(--ink-fade);}

/* ── 角色徽章 ── */
.role-badge{display:inline-block;padding:2px 10px;margin-left:6px;border:1px solid var(--vermilion);border-radius:2px;font-size:11px;color:var(--vermilion);letter-spacing:.1em;}
.agents-toolbar{display:flex;gap:8px;margin-bottom:14px;}
.agent-row{display:flex;justify-content:space-between;align-items:center;padding:14px 16px;background:rgba(255,255,255,.6);border:1px solid var(--line);border-radius:2px;}
.agent-info{display:flex;align-items:center;gap:10px;flex-wrap:wrap;}
.agent-nm{font-size:14px;font-weight:700;color:var(--ink);}
.agent-cnt,.agent-date{font-size:11px;color:var(--ink-mist);}
.agent-actions{display:flex;gap:8px;align-items:center;}
.agent-self{font-size:11px;color:var(--ink-ghost);}
.empty-hint{text-align:center;color:var(--ink-ghost);padding:40px 0;font-size:13px;}

/* ── 墨格（图谱）── */
.graph-container{position:relative;min-height:300px;border:1px solid var(--line);border-radius:2px;background:rgba(255,255,255,.4);}
.graph-svg{width:100%;height:auto;display:block;}
.graph-node{cursor:pointer;transition:r .2s;}
.graph-node:hover{filter:brightness(1.2);}
.graph-node.high{fill:var(--vermilion);}
.graph-node.medium{fill:var(--ink-fade);}
.graph-node.low{fill:var(--ink-ghost);}
.graph-edge{cursor:help;}
.graph-tooltip{position:fixed;z-index:200;background:var(--paper);border:1px solid var(--ink-ghost);border-radius:2px;padding:10px 14px;font-size:12px;line-height:1.6;color:var(--ink);max-width:280px;box-shadow:0 4px 16px var(--shadow-2);pointer-events:none;}
.graph-tooltip .btn{pointer-events:auto;margin-top:6px;}
.graph-back{padding:8px 12px;}
.isolated-section{margin-top:24px;}
.isolated-list{display:flex;flex-direction:column;gap:8px;}
.isolated-card{display:flex;align-items:center;gap:10px;padding:10px 14px;background:rgba(255,255,255,.5);border:1px solid var(--line);border-radius:2px;cursor:pointer;position:relative;overflow:hidden;}
.isolated-card:hover{border-color:var(--ink-ghost);box-shadow:0 1px 6px var(--shadow);}
.isolated-card .imp-bar{position:absolute;left:0;top:0;bottom:0;width:3px;}
.isolated-card .imp-bar.high{background:var(--vermilion);} .isolated-card .imp-bar.medium{background:var(--ink-fade);} .isolated-card .imp-bar.low{background:var(--ink-ghost);}
.isolated-card .card-summary{flex:1;font-size:13px;color:var(--ink);padding-left:8px;}

/* ── 衰减体检 ── */
.decay-summary{display:flex;gap:20px;flex-wrap:wrap;margin-bottom:20px;padding:14px;background:var(--paper-2);border:1px solid var(--line);border-radius:2px;}
.decay-stat-row{display:flex;flex-direction:column;align-items:center;gap:4px;min-width:80px;}
.decay-stat-row span{font-size:11px;color:var(--ink-mist);}
.decay-stat-row b{font-size:18px;color:var(--ink);}
.decay-list{display:flex;flex-direction:column;gap:8px;margin-bottom:20px;}
.decay-card{padding:12px 16px;background:rgba(255,255,255,.5);border:1px solid var(--line);border-radius:2px;}
.decay-card-summary{font-size:13px;color:var(--ink);margin-bottom:6px;line-height:1.6;}
.decay-card-meta{display:flex;gap:10px;flex-wrap:wrap;font-size:11px;color:var(--ink-mist);align-items:center;}
.decay-note{font-size:12px;color:var(--ink-mist);margin:10px 0;line-height:1.6;}
.decay-apply-section{margin-top:24px;padding-top:16px;border-top:1px solid var(--line);}
.decay-confirm-text{font-size:13px;color:var(--ink);margin-bottom:12px;line-height:1.7;}
.decay-confirm-btns{display:flex;gap:10px;}
.decay-done{font-size:13px;color:var(--ink);padding:10px 0;}

/* ── 审计簿 ── */
.audit-warning{background:var(--paper-2);border:1px solid var(--vermilion);border-radius:2px;padding:12px 16px;font-size:12px;color:var(--vermilion);line-height:1.7;margin-bottom:16px;}
.audit-table{width:100%;border-collapse:collapse;font-size:12px;}
.audit-table th{text-align:left;padding:8px 10px;border-bottom:2px solid var(--line);color:var(--ink-fade);font-weight:700;letter-spacing:.1em;}
.audit-table td{padding:6px 10px;border-bottom:1px solid var(--line);color:var(--ink);vertical-align:top;word-break:break-all;}
.audit-table tr:hover td{background:var(--paper-2);}

/* ── 滚动条 ── */
::-webkit-scrollbar{width:6px;height:6px;}
::-webkit-scrollbar-track{background:transparent;}
::-webkit-scrollbar-thumb{background:var(--ink-ghost);border-radius:3px;}
::-webkit-scrollbar-thumb:hover{background:var(--ink-mist);}

@media(max-width:960px){
  .top-bar{padding:20px 24px 16px;flex-wrap:wrap;gap:12px;}
  .stats-bar{padding:12px 24px;flex-wrap:wrap;}
  .layout{flex-direction:column;padding:24px;gap:24px;}
  .side-panel{width:100%;}
}

@media(max-width:720px){
  .top-bar{padding:16px 16px 12px;}
  .stats-bar{padding:10px 16px;}
  .layout{padding:16px;gap:16px;}
  .side-panel{width:100%;}
  .modal-content{padding:20px 16px;max-width:95vw;}
  .modal-content.modal-wide{width:95vw;}
  .graph-container{min-height:200px;}
  .graph-svg{max-height:50vh;}
  .decay-summary{gap:10px;}
  .decay-stat-row{min-width:60px;}
  .audit-table{font-size:11px;}
  .audit-table th,.audit-table td{padding:4px 6px;}
  .top-right{gap:6px;}
  .top-right .btn-sm{padding:4px 8px;font-size:11px;}
}
