/* ===== PlotPilot 风格主题系统 ===== */
/* 默认深蓝主题 */
:root, [data-theme="dark-blue"] {
    --bg-dark: #0f172a;
    --bg-panel: #1e293b;
    --bg-card: #283548;
    --bg-input: #1a2332;
    --bg-hover: #334155;
    --border: #334155;
    --border-light: #475569;
    --text-primary: #e2e8f0;
    --text-secondary: #94a3b8;
    --text-muted: #64748b;
    --accent-blue: #3b82f6;
    --accent-green: #10b981;
    --accent-purple: #8b5cf6;
    --accent-orange: #f59e0b;
    --accent-red: #ef4444;
    --accent-cyan: #06b6d4;
}
/* 综合绿主题 */
[data-theme="dark-green"] {
    --bg-dark: #0d1117;
    --bg-panel: #161b22;
    --bg-card: #21262d;
    --bg-input: #0d1117;
    --bg-hover: #30363d;
    --border: #30363d;
    --border-light: #484f58;
    --text-primary: #c9d1d9;
    --text-secondary: #8b949e;
    --text-muted: #6e7681;
    --accent-blue: #58a6ff;
    --accent-green: #3fb950;
    --accent-purple: #bc8cff;
    --accent-orange: #d29922;
    --accent-red: #f85149;
    --accent-cyan: #39d2c0;
}
/* 暖棕主题 */
[data-theme="dark-warm"] {
    --bg-dark: #1a1412;
    --bg-panel: #231c18;
    --bg-card: #2e2520;
    --bg-input: #1a1412;
    --bg-hover: #3a302a;
    --border: #3a302a;
    --border-light: #524840;
    --text-primary: #e8ddd4;
    --text-secondary: #b8a898;
    --text-muted: #887868;
    --accent-blue: #6aa8e8;
    --accent-green: #8bc48a;
    --accent-purple: #c49bff;
    --accent-orange: #e8a840;
    --accent-red: #e86050;
    --accent-cyan: #70c8c0;
}
/* 亮色主题 */
[data-theme="light"] {
    --bg-dark: #f8fafc;
    --bg-panel: #ffffff;
    --bg-card: #f1f5f9;
    --bg-input: #f8fafc;
    --bg-hover: #e2e8f0;
    --border: #e2e8f0;
    --border-light: #cbd5e1;
    --text-primary: #1e293b;
    --text-secondary: #475569;
    --text-muted: #94a3b8;
    --accent-blue: #2563eb;
    --accent-green: #059669;
    --accent-purple: #7c3aed;
    --accent-orange: #d97706;
    --accent-red: #dc2626;
    --accent-cyan: #0891b2;
}
* { margin:0; padding:0; box-sizing:border-box; font-family:'Segoe UI',Roboto,system-ui,sans-serif; }
body { background:var(--bg-dark); color:var(--text-primary); height:100vh; display:flex; flex-direction:column; overflow:hidden; }

/* 顶部统计栏 */
.top-stats-bar { background:var(--bg-panel); border-bottom:1px solid var(--border); height:44px; display:flex; align-items:center; justify-content:space-between; padding:0 16px; flex-shrink:0; }
.stats-left { display:flex; align-items:center; gap:12px; }
.logo-icon { color:var(--accent-green); font-size:1.2rem; }
.app-title { font-weight:600; font-size:1rem; color:var(--text-primary); }
.nav-back { color:var(--accent-orange); text-decoration:none; font-size:0.8rem; margin-left:8px; }
.stats-center { display:flex; gap:32px; }
.stat-item { text-align:center; }
.stat-label { font-size:0.65rem; color:var(--text-muted); text-transform:uppercase; letter-spacing:0.5px; }
.stat-value { font-size:1rem; font-weight:700; color:var(--text-primary); font-variant-numeric:tabular-nums; }
.stats-right { display:flex; align-items:center; gap:8px; }
.btn-icon { background:none; border:1px solid var(--border); color:var(--text-secondary); width:36px; height:36px; border-radius:8px; cursor:pointer; display:flex; align-items:center; justify-content:center; transition:all 0.25s ease; }
.btn-icon:hover { background:var(--bg-hover); color:var(--text-primary); transform:translateY(-1px); box-shadow:0 3px 10px rgba(0,0,0,0.2); }
.user-info { display:flex; align-items:center; gap:6px; margin-left:8px; }
.avatar { background:var(--accent-blue); width:28px; height:28px; border-radius:50%; display:flex; align-items:center; justify-content:center; font-weight:bold; font-size:0.75rem; }
#userNickname { font-size:0.8rem; color:var(--text-secondary); }
.btn-logout { color:var(--accent-red); text-decoration:none; font-size:0.85rem; }

/* 主题切换器 */
.theme-switcher { display:flex; gap:4px; align-items:center; margin-right:4px; }
.theme-btn { width:22px; height:22px; border-radius:50%; border:2px solid var(--border); background:none; cursor:pointer; padding:0; display:flex; align-items:center; justify-content:center; transition:all 0.2s; }
.theme-btn span { width:14px; height:14px; border-radius:50%; display:block; }
.theme-btn:hover { border-color:var(--accent-blue); transform:scale(1.15); }
.theme-btn.active { border-color:var(--accent-green); box-shadow:0 0 6px rgba(16,185,129,0.5); }

/* 小说选择栏 */
.novel-selector-bar { background:var(--bg-panel); border-bottom:1px solid var(--border); height:36px; display:flex; align-items:center; justify-content:space-between; padding:0 16px; flex-shrink:0; }
.novel-selector-left { display:flex; align-items:center; gap:8px; }
.novel-label { color:var(--text-muted); font-size:0.8rem; }
.novel-select { background:var(--bg-input); border:1px solid var(--border); color:var(--text-primary); padding:4px 8px; border-radius:6px; font-size:0.8rem; min-width:200px; }
.novel-title-input { background:var(--bg-input); border:1px solid var(--accent-blue); color:var(--text-primary); padding:4px 8px; border-radius:6px; font-size:0.8rem; width:200px; }
.novel-selector-right { display:flex; align-items:center; gap:8px; }

/* 通用按钮 */
.btn-sm { padding:6px 14px; border-radius:8px; border:1px solid var(--border); background:var(--bg-card); color:var(--text-secondary); font-size:0.85rem; cursor:pointer; display:inline-flex; align-items:center; gap:5px; transition:all 0.25s ease; }
.btn-sm:hover { background:var(--bg-hover); color:var(--text-primary); transform:translateY(-1px); box-shadow:0 4px 12px rgba(0,0,0,0.3); }
.btn-sm:active { transform:translateY(0); box-shadow:none; }
.btn-primary { background:var(--accent-blue)!important; color:white!important; border-color:var(--accent-blue)!important; }
.btn-primary:hover { background:#2563eb!important; box-shadow:0 4px 15px rgba(59,130,246,0.4); }
.btn-success { background:var(--accent-green)!important; color:white!important; border-color:var(--accent-green)!important; }
.btn-success:hover { box-shadow:0 4px 15px rgba(16,185,129,0.4); }
.btn-danger { background:var(--accent-red)!important; color:white!important; border-color:var(--accent-red)!important; }
.btn-danger:hover { box-shadow:0 4px 15px rgba(239,68,68,0.4); }
.btn-warning { background:var(--accent-orange)!important; color:white!important; border-color:var(--accent-orange)!important; }
.btn-warning:hover { box-shadow:0 4px 15px rgba(245,158,11,0.4); }
.btn-purple { background:var(--accent-purple)!important; color:white!important; border-color:var(--accent-purple)!important; }
.btn-purple:hover { box-shadow:0 4px 15px rgba(139,92,246,0.4); }

/* 开关 */
.auto-write-toggle { display:flex; align-items:center; gap:6px; }
.toggle-switch { position:relative; display:inline-block; width:42px; height:24px; }
.toggle-switch input { opacity:0; width:0; height:0; }
.toggle-slider { position:absolute; inset:0; background:var(--bg-card); border:1px solid var(--border); border-radius:20px; cursor:pointer; transition:0.3s; }
.toggle-slider:before { content:""; position:absolute; height:18px; width:18px; left:2px; bottom:2px; background:var(--text-muted); border-radius:50%; transition:0.3s; }
input:checked + .toggle-slider { background:var(--accent-green); border-color:var(--accent-green); }
input:checked + .toggle-slider:before { transform:translateX(18px); background:white; }
.toggle-label { font-size:0.8rem; color:var(--text-secondary); }

/* 全托管进度条 */
.auto-write-progress { background:var(--bg-panel); border-bottom:1px solid var(--border); padding:6px 16px; flex-shrink:0; }
.progress-info { display:flex; justify-content:space-between; font-size:0.78rem; color:var(--text-secondary); margin-bottom:4px; }
.progress-bar-track { height:4px; background:var(--bg-card); border-radius:2px; overflow:hidden; }
.progress-bar-fill { height:100%; background:linear-gradient(90deg,var(--accent-blue),var(--accent-green)); transition:width 0.3s; border-radius:2px; }

/* 主布局 - 用grid实现右侧面板跨行 */
.main-layout { display:grid; grid-template-columns:240px minmax(0,1fr) auto; grid-template-rows:1fr auto; flex:1; overflow:hidden; }
.chapter-panel { grid-column:1; grid-row:1; width:240px; background:var(--bg-panel); border-right:1px solid var(--border); display:flex; flex-direction:column; flex-shrink:0; overflow:hidden; }
.panel-header { padding:10px 12px; font-size:0.85rem; font-weight:600; color:var(--text-primary); display:flex; justify-content:space-between; align-items:center; border-bottom:1px solid var(--border); }
.panel-actions { display:flex; gap:8px; }
.panel-actions i { cursor:pointer; color:var(--text-muted); font-size:0.85rem; transition:color 0.15s; }
.panel-actions i:hover { color:var(--text-primary); }
.search-box { padding:8px 12px; }
.search-box { display:flex; align-items:center; gap:6px; background:var(--bg-input); border-radius:6px; padding:6px 10px; margin:6px 10px; }
.search-box i { color:var(--text-muted); font-size:0.8rem; }
.search-box input { background:none; border:none; color:var(--text-primary); outline:none; width:100%; font-size:0.8rem; }
.chapter-list { flex:1; overflow-y:auto; padding:4px 8px; }
.chapter-item { display:flex; align-items:center; gap:6px; padding:8px 10px; border-radius:6px; cursor:pointer; font-size:0.82rem; color:var(--text-secondary); transition:background 0.1s; margin-bottom:2px; }
.chapter-item:hover { background:var(--bg-hover); }
.chapter-item.active { background:rgba(59,130,246,0.15); color:var(--accent-blue); font-weight:500; }
.chapter-item .ch-status { width:8px; height:8px; border-radius:50%; flex-shrink:0; }
.ch-status.draft { background:var(--text-muted); }
.ch-status.writing { background:var(--accent-orange); animation:pulse 1s infinite; }
.ch-status.done { background:var(--accent-green); }
.ch-status.final { background:var(--accent-blue); }
@keyframes pulse { 0%,100%{opacity:1} 50%{opacity:0.4} }
.chapter-item .ch-title { flex:1; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.chapter-item .ch-words { font-size:0.7rem; color:var(--text-muted); }
.chapter-item .ch-rename { opacity:0; font-size:0.7rem; color:var(--text-muted); cursor:pointer; padding:2px; }
.chapter-item:hover .ch-rename { opacity:1; }
.chapter-item .ch-rename:hover { color:var(--accent-blue); }
.chapter-item .ch-delete { opacity:0; font-size:0.7rem; color:var(--text-muted); cursor:pointer; padding:2px; flex-shrink:0; transition:all 0.15s; }
.chapter-item:hover .ch-delete { opacity:0.6; }
.chapter-item .ch-delete:hover { opacity:1; color:var(--accent-red); transform:scale(1.2); }

/* 中间内容区 */
.content-panel { grid-column:2; grid-row:1; flex:1; background:var(--bg-dark); display:flex; flex-direction:column; overflow:hidden; min-width:0; }
.content-header { padding:10px 16px; border-bottom:1px solid var(--border); display:flex; justify-content:space-between; align-items:center; background:var(--bg-panel); flex-shrink:0; }
.header-left { display:flex; flex-direction:column; gap:2px; }
.chapter-title { font-size:1.1rem; font-weight:600; }
.chapter-meta { font-size:0.75rem; color:var(--text-muted); display:flex; gap:12px; }
.header-actions { display:flex; gap:4px; }
.btn-tool { padding:6px 12px; border-radius:8px; border:1px solid var(--border); background:var(--bg-card); color:var(--text-secondary); font-size:0.82rem; cursor:pointer; display:flex; align-items:center; gap:4px; transition:all 0.25s ease; }
.btn-tool:hover { background:var(--bg-hover); color:var(--text-primary); transform:translateY(-1px); box-shadow:0 3px 10px rgba(0,0,0,0.25); }
.btn-tool:active { transform:translateY(0); }
.btn-tool.btn-blue { background:var(--bg-card)!important; color:var(--accent-blue)!important; border-color:rgba(59,130,246,0.3)!important; }
.btn-tool.btn-purple { background:var(--bg-card)!important; color:var(--accent-purple)!important; border-color:rgba(139,92,246,0.3)!important; }
.btn-tool.btn-green { background:var(--bg-card)!important; color:var(--accent-green)!important; border-color:rgba(16,185,129,0.3)!important; }
.btn-tool.btn-orange { background:var(--bg-card)!important; color:var(--accent-orange)!important; border-color:rgba(245,158,11,0.3)!important; }

/* 实时日志 */
.realtime-log-panel { background:var(--bg-panel); border-bottom:1px solid var(--border); flex-shrink:0; }
.log-header { padding:6px 16px; display:flex; justify-content:space-between; align-items:center; cursor:pointer; font-size:0.8rem; color:var(--text-secondary); }
.log-header:hover { background:var(--bg-hover); }
.log-stats { display:flex; gap:12px; align-items:center; }
.log-body { max-height:150px; overflow-y:auto; padding:0 16px 8px; }
.log-entries { font-family:'Cascadia Code','Fira Code',monospace; font-size:0.75rem; line-height:1.6; }
.log-entry { color:var(--text-muted); padding:1px 0; }
.log-entry.info { color:var(--accent-blue); }
.log-entry.success { color:var(--accent-green); }
.log-entry.warning { color:var(--accent-orange); }
.log-entry.error { color:var(--accent-red); }
.log-entry .log-time { color:var(--text-muted); margin-right:8px; }

/* 章节内容 */
.content-body { flex:1; overflow-y:auto; padding:28px 40px; line-height:2; font-size:1rem; color:var(--text-primary); background:var(--bg-dark); }
.content-body p { margin-bottom:1.2rem; text-indent:2em; }
.empty-state { text-align:center; padding:80px 20px; color:var(--text-muted); }
.empty-state i { font-size:3rem; margin-bottom:16px; display:block; color:var(--border); }

/* 右侧面板 */
.right-panel { grid-column:3; grid-row:1/3; width:680px; min-width:580px; background:var(--bg-panel); border-left:1px solid var(--border); display:flex; flex-direction:column; overflow:hidden; }
.guide-bar { display:flex; align-items:center; gap:6px; padding:8px 12px; background:linear-gradient(90deg, rgba(59,130,246,0.15), rgba(16,185,129,0.1)); border-bottom:1px solid rgba(59,130,246,0.25); font-size:0.78rem; flex-shrink:0; flex-wrap:wrap; }
.guide-bar > i:first-child { color:var(--accent-orange); font-size:0.9rem; }
.guide-bar > span:first-of-type { color:var(--text-secondary); font-weight:600; }
.guide-step { color:var(--accent-blue); font-weight:600; white-space:nowrap; }
.guide-arrow { color:var(--text-muted); font-size:0.6rem; }
.right-tabs { display:flex; flex-wrap:wrap; border-bottom:1px solid var(--border); padding:4px 4px 0; gap:2px; }
.rtab { background:none; border:none; padding:8px 12px; font-size:0.82rem; color:var(--text-muted); cursor:pointer; border-radius:8px 8px 0 0; transition:all 0.25s ease; display:flex; align-items:center; gap:4px; }
.rtab:hover { color:var(--text-secondary); background:var(--bg-hover); transform:translateY(-1px); }
.rtab.active { color:var(--accent-blue); background:var(--bg-card); }
.step-num { display:inline-flex; align-items:center; justify-content:center; width:22px; height:22px; border-radius:50%; background:var(--accent-blue); color:white; font-size:0.75rem; font-weight:700; flex-shrink:0; box-shadow:0 0 8px rgba(59,130,246,0.6); }
.rtab.active .step-num { background:var(--accent-green); box-shadow:0 0 8px rgba(16,185,129,0.6); }
.rtab i { font-size:0.9rem; }
.right-tab-content { flex:1; overflow-y:auto; min-height:0; }

/* 文风指纹面板 */
.fingerprint-panel { margin-bottom: 12px; }

.fp-drift-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 6px; padding: 8px; }
.fp-drift-item { background: var(--bg-card); border: 1px solid var(--border); border-radius: 6px; padding: 8px; }
.fp-drift-label { font-size: 11px; color: var(--text-muted); margin-bottom: 2px; }
.fp-drift-value { font-size: 16px; font-weight: 600; color: var(--text-primary); }
.fp-drift-base { font-size: 10px; color: var(--text-muted); }
.fp-drift-pct { font-size: 11px; font-weight: 500; margin-top: 2px; }

.fp-legend { display: flex; justify-content: center; gap: 16px; padding: 6px 0; font-size: 11px; color: var(--text-muted); }

/* 文风监控面板 */
.style-monitor-panel { border-top:1px solid var(--border); padding:8px 10px; flex-shrink:0; }
.style-monitor-panel .bottom-section-header { font-size:0.82rem; font-weight:600; color:var(--text-primary); margin-bottom:4px; display:flex; align-items:center; gap:6px; }
.style-monitor-panel .bottom-section-header span:first-child { display:flex; align-items:center; gap:5px; }
.style-score { margin-left:auto; font-weight:600; font-size:0.78rem; }
.style-monitor-body { font-size:0.75rem; }
.style-baseline-info { display:flex; justify-content:space-between; align-items:center; color:var(--text-muted); margin-bottom:4px; }
.style-issues { max-height:60px; overflow-y:auto; }
.style-issue-item { padding:2px 0; color:var(--accent-orange); font-size:0.73rem; }
.style-issue-item.critical { color:var(--accent-red); }

/* 知识库常驻区 - 缩小一点 */
.knowledge-fixed-panel { border-top:1px solid var(--border); flex:1; display:flex; flex-direction:column; overflow:hidden; min-height:0; }
.knowledge-fixed-header { display:flex; align-items:center; justify-content:space-between; padding:6px 10px; background:var(--bg-card); border-bottom:1px solid var(--border); flex-shrink:0; }
.knowledge-fixed-header > span { font-size:0.82rem; font-weight:600; color:var(--accent-cyan); display:flex; align-items:center; gap:5px; }
.knowledge-fixed-panel .knowledge-content { flex:1; overflow-y:auto; padding:6px; min-height:0; display:flex; flex-direction:column; }
.knowledge-fixed-panel .graph-container { width:100%; flex:1; min-height:200px; background:var(--bg-input); border:1px solid var(--border); border-radius:6px; }
.knowledge-fixed-panel .kpane { display:none; flex:1; flex-direction:column; min-height:0; }
.knowledge-fixed-panel .kpane.active { display:flex; }
.knowledge-fixed-panel .kpane .pane-textarea { flex:1; min-height:150px; resize:none; }
.knowledge-fixed-panel .kpane .triplet-list { flex:1; max-height:none; overflow-y:auto; }
.tab-pane { display:none; padding:10px; }
.tab-pane.active { display:block; }
.pane-toolbar { display:flex; justify-content:space-between; align-items:center; margin-bottom:8px; gap:6px; }
.pane-title { font-size:0.82rem; font-weight:600; color:var(--text-primary); }
.pane-section { margin-bottom:10px; }
.pane-section label { font-size:0.75rem; color:var(--text-muted); display:block; margin-bottom:4px; font-weight:500; }
.pane-textarea { width:100%; background:var(--bg-input); border:1px solid var(--border); color:var(--text-primary); border-radius:6px; padding:8px; font-size:0.8rem; resize:vertical; outline:none; line-height:1.5; }
.pane-textarea:focus { border-color:var(--accent-blue); }
.code-editor { font-family:'Cascadia Code','Fira Code',monospace; font-size:0.75rem; }

/* 大纲卷 */
.outline-volumes { display:flex; flex-direction:column; gap:8px; }
.volume-card { background:var(--bg-card); border:1px solid var(--border); border-radius:8px; padding:8px; }
.volume-header { display:flex; justify-content:space-between; align-items:center; margin-bottom:6px; }
.volume-title-input { background:var(--bg-input); border:1px solid var(--border); color:var(--accent-orange); padding:3px 6px; border-radius:4px; font-size:0.78rem; font-weight:600; width:60%; }
.chapter-outline-item { display:flex; gap:4px; align-items:center; margin-bottom:3px; font-size:0.75rem; }
.chapter-outline-item span { color:var(--text-muted); white-space:nowrap; }
.chapter-outline-item input { flex:1; background:var(--bg-input); border:1px solid transparent; color:var(--text-secondary); padding:2px 4px; border-radius:3px; font-size:0.73rem; }
.chapter-outline-item input:focus { border-color:var(--accent-blue); }

/* 故事脉络 */
.timeline-list { display:flex; flex-direction:column; gap:6px; }
.timeline-item { background:var(--bg-card); border-left:3px solid var(--accent-blue); padding:6px 8px; border-radius:0 6px 6px 0; font-size:0.78rem; }
.timeline-item .tl-chapter { color:var(--accent-blue); font-weight:600; }
.timeline-item .tl-event { color:var(--text-primary); margin-top:2px; }

/* 资产迷你面板 */
.asset-tabs-mini { display:flex; gap:2px; margin-bottom:6px; }
.atab { background:none; border:1px solid var(--border); padding:3px 8px; font-size:0.72rem; color:var(--text-muted); cursor:pointer; border-radius:4px; }
.atab.active { background:var(--accent-blue); color:white; border-color:var(--accent-blue); }
.asset-list-mini { max-height:350px; overflow-y:auto; }
.asset-mini-item { background:var(--bg-card); border-left:3px solid var(--accent-cyan); padding:6px 8px; border-radius:0 6px 6px 0; margin-bottom:4px; font-size:0.78rem; cursor:pointer; transition:background 0.15s; }
.asset-mini-item:hover { background:var(--bg-hover); }
.asset-header-row { display:flex; justify-content:space-between; align-items:center; }
.asset-actions { display:flex; gap:8px; align-items:center; }
.asset-copy-btn { color:var(--text-muted); cursor:pointer; font-size:0.75rem; padding:2px; transition:color 0.15s; }
.asset-copy-btn:hover { color:var(--accent-blue); }
.asset-expand-btn { color:var(--text-muted); cursor:pointer; font-size:0.7rem; transition:transform 0.2s; }
.asset-expand-btn:hover { color:var(--text-primary); }
.asset-mini-name { font-weight:600; color:var(--text-primary); }
.asset-mini-badge { background:rgba(59,130,246,0.2); color:var(--accent-blue); font-size:0.65rem; padding:1px 6px; border-radius:10px; margin-left:4px; }
.asset-mini-desc { color:var(--text-muted); font-size:0.72rem; margin-top:2px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.asset-detail { margin-top:6px; padding:6px 8px; background:var(--bg-input); border:1px solid var(--border); border-radius:4px; }
.asset-detail-text { font-family:inherit; font-size:0.75rem; color:var(--text-secondary); line-height:1.6; white-space:pre-wrap; word-break:break-all; margin:0; }

/* 知识库 */
.knowledge-tabs { display:flex; gap:2px; padding:0 0 6px; border-bottom:1px solid var(--border); margin-bottom:8px; }
.ktab { background:none; border:none; padding:4px 10px; font-size:0.78rem; color:var(--text-muted); cursor:pointer; border-radius:4px; }
.ktab.active { background:var(--accent-blue); color:white; }
.kpane { display:none; }
.kpane.active { display:block; }
[data-theme="light"] .graph-container { background:#f0f4f8; border-color:#cbd5e1; }
.search-input-sm { background:var(--bg-input); border:1px solid var(--border); color:var(--text-primary); padding:4px 8px; border-radius:4px; font-size:0.78rem; flex:1; outline:none; }
.triplet-list { max-height:250px; overflow-y:auto; display:flex; flex-direction:column; gap:4px; margin-top:6px; }
.triplet-item { display:flex; align-items:center; gap:4px; background:var(--bg-card); padding:4px 8px; border-radius:4px; font-size:0.75rem; }
.triplet-item .tp-subject { color:var(--accent-cyan); font-weight:600; }
.triplet-item .tp-relation { color:var(--accent-orange); padding:1px 6px; background:rgba(245,158,11,0.15); border-radius:8px; }
.triplet-item .tp-object { color:var(--accent-green); font-weight:600; }
.triplet-item .tp-delete { color:var(--text-muted); cursor:pointer; margin-left:auto; }
.triplet-item .tp-delete:hover { color:var(--accent-red); }

/* 底部面板 */
.bottom-panel { grid-column:1/3; grid-row:2; height:260px; flex-shrink:0; display:flex; border-top:1px solid var(--border); background:var(--bg-panel); overflow:hidden; min-width:0; }
.bottom-left { flex:3; padding:10px 16px; border-right:1px solid var(--border); display:flex; flex-direction:column; position:relative; overflow:hidden; min-width:0; }
.bottom-right { flex:1; padding:10px 12px; display:flex; flex-direction:column; min-width:180px; max-width:250px; }
.bottom-section-header { font-size:0.85rem; font-weight:600; color:var(--text-primary); margin-bottom:8px; display:flex; align-items:center; gap:8px; }
.bottom-section-header i { font-size:1rem; }
.tension-toolbar { margin-left:auto; }
/* 手动图例已删除，使用 Chart.js 内置图例 */
.tension-y-label { position:absolute; left:2px; top:50%; transform:rotate(-90deg) translateX(-50%); font-size:0.65rem; color:var(--text-muted); letter-spacing:1px; transform-origin:left center; }
.tension-chart-container { flex:1; position:relative; min-height:0; background:var(--bg-dark); border-radius:8px; overflow:hidden; border:1px solid var(--border); }
.tension-chart-container::before { content:''; position:absolute; inset:0; background-image:linear-gradient(var(--border) 1px, transparent 1px),linear-gradient(90deg, var(--border) 1px, transparent 1px); background-size:20px 20px; opacity:0.3; pointer-events:none; z-index:1; }
.tension-chart-container canvas { position:relative; z-index:2; width:100% !important; max-width:100%; }
.log-count { margin-left:auto; font-size:0.72rem; color:var(--text-muted); }
.log-count b { color:var(--accent-green); }
.realtime-log-list { flex:1; overflow-y:auto; display:flex; flex-direction:column; gap:4px; }
.log-entry { padding:6px 8px; background:var(--bg-card); border-radius:6px; border-left:3px solid var(--accent-blue); font-size:0.75rem; color:var(--text-secondary); }
.log-entry.warning { border-left-color:var(--accent-orange); }
.log-entry.error { border-left-color:var(--accent-red); }
.log-entry .log-time { color:var(--text-muted); font-size:0.68rem; margin-right:6px; }

.empty-hint { color:var(--text-muted); font-size:0.78rem; text-align:center; padding:20px 0; }

/* ===== 弹窗 ===== */
.backdrop { position:fixed; inset:0; background:rgba(0,0,0,0.5); z-index:999; display:none; }
.backdrop.show { display:block; }
.modal { position:fixed; top:50%; left:50%; transform:translate(-50%,-50%); width:500px; max-height:85vh; background:var(--bg-panel); border:1px solid var(--border); border-radius:12px; box-shadow:0 25px 50px rgba(0,0,0,0.5); z-index:1000; padding:20px; display:none; overflow-y:auto; }
.modal.show { display:block; }
.modal-lg { width:700px; }
.modal-lg.show { display:flex; flex-direction:column; }
.modal h3 { font-size:1rem; margin-bottom:16px; color:var(--text-primary); display:flex; align-items:center; gap:8px; }
.modal h3 i { color:var(--accent-blue); }
.form-group { margin-bottom:12px; }
.form-group label { font-size:0.8rem; color:var(--text-secondary); display:block; margin-bottom:4px; font-weight:500; }
.sub-label { font-size:0.72rem!important; color:var(--text-muted)!important; }
.form-group input:not([type="checkbox"]):not([type="radio"]), .form-group select, .form-group textarea { width:100%; background:var(--bg-input); border:1px solid var(--border); color:var(--text-primary); padding:8px; border-radius:6px; font-size:0.85rem; outline:none; }
.form-group input:not([type="checkbox"]):not([type="radio"]):focus, .form-group select:focus, .form-group textarea:focus { border-color:var(--accent-blue); }
.form-group input[type="checkbox"], .form-group input[type="radio"] { width:auto; flex-shrink:0; }
.radio-group { display:flex; gap:16px; }
.radio-group label { display:flex; align-items:center; gap:6px; cursor:pointer; font-size:0.85rem; color:var(--text-primary); white-space:nowrap; }
.checkbox-row { display:flex; gap:16px; flex-wrap:wrap; margin-bottom:10px; }
.checkbox-row label { display:flex; align-items:center; gap:6px; font-size:0.8rem; color:var(--text-secondary); cursor:pointer; white-space:nowrap; }
.modal-actions { display:flex; justify-content:flex-end; gap:8px; margin-top:16px; padding-top:12px; border-top:1px solid var(--border); }

/* 导入 */
.drop-zone { border:2px dashed var(--border); border-radius:12px; padding:24px; text-align:center; margin-bottom:16px; }
.drop-zone i { font-size:2rem; color:var(--accent-blue); margin-bottom:8px; display:block; }
.drop-zone p { color:var(--text-muted); margin-bottom:8px; }
.drop-zone.dragover { border-color:var(--accent-blue); background:rgba(59,130,246,0.05); }

/* 导出 */
.export-options { display:flex; flex-direction:column; gap:8px; }
.export-option { display:flex; align-items:center; gap:12px; padding:12px; background:var(--bg-card); border:1px solid var(--border); border-radius:8px; cursor:pointer; color:var(--text-primary); font-size:0.85rem; text-align:left; transition:all 0.15s; }
.export-option:hover { background:var(--bg-hover); border-color:var(--accent-blue); }
.export-option i { font-size:1.2rem; color:var(--accent-blue); width:24px; text-align:center; }

/* 写作弹窗 */
.write-body { flex:1; overflow-y:auto; }
.write-status { margin:10px 0; padding:8px 12px; background:var(--bg-card); border-radius:8px; }
.write-status-row { display:flex; align-items:center; gap:8px; font-size:0.8rem; color:var(--text-secondary); margin-bottom:6px; }
.write-status-row span:last-child { margin-left:auto; }
.write-complete { padding:10px; background:rgba(16,185,129,0.15); border:1px solid var(--accent-green); border-radius:8px; color:var(--accent-green); font-size:0.85rem; margin:8px 0; }
.write-output-header { display:flex; justify-content:space-between; align-items:center; margin-bottom:6px; font-size:0.85rem; }
.write-output-content { max-height:200px; overflow-y:auto; padding:12px; background:var(--bg-input); border:1px solid var(--border); border-radius:8px; font-size:0.85rem; line-height:1.8; white-space:pre-wrap; }

/* 高亮 */
.highlight { background:rgba(245,158,11,0.25); border-radius:2px; padding:0 2px; border-bottom:2px solid var(--accent-orange); }

/* 滚动条 */
::-webkit-scrollbar { width:6px; height:6px; }
::-webkit-scrollbar-track { background:transparent; }
::-webkit-scrollbar-thumb { background:var(--border); border-radius:3px; }
::-webkit-scrollbar-thumb:hover { background:var(--border-light); }

/* 章节编辑器 */
#chapterEditor { width:100%; height:100%; min-height:300px; border:none; outline:none; resize:none; font-family:inherit; font-size:0.95rem; line-height:1.8; background:transparent; color:var(--text-primary); padding:10px; }

/* 伏笔台账 */
.foreshadow-list { display: flex; flex-direction: column; gap: 8px; }
.foreshadow-item { background: var(--bg-card); border-radius: 8px; padding: 10px 12px; border-left: 3px solid var(--accent-blue); }
.foreshadow-item.resolved { opacity: 0.6; border-left-color: var(--accent-green); }
.foreshadow-item.overdue { border-left-color: var(--accent-red); }
.foreshadow-hint { font-size: 13px; margin-bottom: 6px; }
.foreshadow-meta { font-size: 11px; color: var(--text-muted); display: flex; gap: 8px; flex-wrap: wrap; align-items: center; }
.foreshadow-meta .badge { font-size: 10px; padding: 1px 6px; border-radius: 4px; }
.foreshadow-meta .badge.high { background: rgba(239,68,68,0.2); color: var(--accent-red); }
.foreshadow-meta .badge.medium { background: rgba(245,158,11,0.2); color: var(--accent-orange); }
.foreshadow-meta .badge.low { background: rgba(59,130,246,0.2); color: var(--accent-blue); }
.foreshadow-meta .overdue-tag { color: var(--accent-red); font-weight: bold; }
.foreshadow-actions { margin-top: 6px; display: flex; gap: 6px; }
.foreshadow-actions button { font-size: 11px; padding: 2px 8px; border-radius: 4px; border: 1px solid var(--border); background: transparent; color: var(--text-secondary); cursor: pointer; }
.foreshadow-actions button:hover { background: var(--bg-hover); }
.foreshadow-group-title { font-size: 12px; color: var(--text-muted); margin-top: 8px; padding-bottom: 4px; border-bottom: 1px solid var(--border); }

/* 节拍放大器 */
.beat-progress-track { height: 4px; background: var(--bg-card); border-radius: 2px; overflow: hidden; }
.beat-progress-bar { height: 100%; background: linear-gradient(90deg, var(--accent-blue), var(--accent-purple)); border-radius: 2px; transition: width 0.3s; }

/* 一致性检查 */
.consistency-panel { margin-top: 8px; background: var(--bg-card); border-radius: 8px; overflow: hidden; }
.consistency-header { padding: 8px 12px; cursor: pointer; display: flex; justify-content: space-between; align-items: center; font-size: 13px; color: var(--text-secondary); }
.consistency-header:hover { background: var(--bg-hover); }
.consistency-body { padding: 12px; }
.consistency-overall { text-align: center; margin-bottom: 12px; }
.consistency-overall .score { font-size: 36px; font-weight: bold; }
.consistency-overall .score.good { color: var(--accent-green); }
.consistency-overall .score.warn { color: var(--accent-orange); }
.consistency-overall .score.bad { color: var(--accent-red); }
.consistency-overall .label { font-size: 12px; color: var(--text-muted); }
.consistency-dims { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
.consistency-dim { background: var(--bg-input); border-radius: 6px; padding: 8px 10px; }
.consistency-dim .dim-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 6px; font-size: 12px; }
.consistency-dim .dim-name { color: var(--text-primary); }
.consistency-dim .dim-score { font-weight: bold; }
.consistency-dim .dim-issues { font-size: 11px; color: var(--text-muted); }
.consistency-dim .issue-item { padding: 2px 0; }
.consistency-dim .issue-item::before { content: '⚠ '; color: var(--accent-orange); }

/* 张力统计 */
.tension-stats { padding: 4px 8px; font-size: 11px; color: var(--text-muted); display: flex; gap: 8px; align-items: center; flex-wrap: wrap; background: var(--bg-card); border-radius: 4px; margin-bottom: 6px; }
.tension-stats b { color: var(--text-primary); font-weight: 600; }

/* 低张力警告 */
.tension-alert { padding: 6px 10px; margin-top: 4px; font-size: 11px; color: #f0a020; background: rgba(240,160,32,0.1); border-radius: 6px; border-left: 3px solid #f0a020; display: flex; align-items: center; gap: 6px; }
.tension-alert i { font-size: 12px; }

/* 警戒线标签 */
.tension-threshold-label { font-size: 10px; color: #f0a020; }
