/* ============================================================
   墨舟 · AI 小说创作工作台 —— 深色护眼主题
   ============================================================ */
:root{
  --bg:#0a0d12;
  --bg-2:#0f141b;
  --panel:#141a23;
  --panel-2:#19212c;
  --panel-3:#1f2937;
  --line:#243040;
  --line-soft:#1c2532;
  --text:#e8eef6;
  --muted:#8b9aad;
  --muted-2:#65758a;
  --accent:#5eead4;
  --accent-2:#7c8cff;
  --warn:#fbbf24;
  --danger:#f87171;
  --ok:#34d399;
  --purple:#c084fc;
  --radius:12px;
  --shadow:0 12px 32px rgba(0,0,0,.35);
}
*{box-sizing:border-box}
html,body{height:100%}
body{
  margin:0;
  background:
    radial-gradient(1100px 560px at 8% -12%, #16232f 0%, transparent 60%),
    radial-gradient(900px 500px at 100% 0%, #1a1a30 0%, transparent 55%),
    var(--bg);
  color:var(--text);
  font:14px/1.65 "Microsoft YaHei","PingFang SC","Segoe UI",system-ui,sans-serif;
  -webkit-font-smoothing:antialiased;
}
::-webkit-scrollbar{width:9px;height:9px}
::-webkit-scrollbar-thumb{background:#2a3646;border-radius:6px}
::-webkit-scrollbar-thumb:hover{background:#37475c}
::-webkit-scrollbar-track{background:transparent}

#app{display:flex;height:100vh;overflow:hidden}

/* ---------------- 侧边栏 ---------------- */
.sidebar{
  width:230px;flex:0 0 230px;
  display:flex;flex-direction:column;
  background:linear-gradient(180deg,#0e1319,#0a0e14);
  border-right:1px solid var(--line);
}
.brand{display:flex;gap:12px;align-items:center;justify-content:center;padding:22px 14px 12px}
.brand-logo{
  width:40px;height:40px;flex:0 0 auto;border-radius:11px;display:grid;place-items:center;
  color:#062b26;
  background:linear-gradient(135deg,var(--accent),#38bdf8);
  box-shadow:0 6px 18px rgba(94,234,212,.25);
}
.brand-logo svg{width:25px;height:25px;display:block}
.brand-text{display:flex;flex-direction:column;justify-content:center;gap:6px;min-width:0}
.brand-text strong{font-size:15px;line-height:1.15;letter-spacing:.5px}
.brand-text span{
  font-size:10px;line-height:1.15;color:var(--muted-2);letter-spacing:.3px;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}

.book-switch{padding:0 10px 10px;margin-top:12px}
.book-switch-label{
  display:flex;align-items:center;gap:6px;
  padding:0 8px;margin:0 0 7px;
  font-size:10.5px;letter-spacing:1px;color:var(--muted-2);
}
.book-switch-label::before{
  content:'';width:3px;height:3px;border-radius:50%;flex:0 0 auto;
  background:color-mix(in srgb,var(--accent) 72%,transparent);
  box-shadow:0 0 6px color-mix(in srgb,var(--accent) 55%,transparent);
}
.book-pick-wrap{position:relative}
.book-pick{
  width:100%;height:46px;padding:0 24px 0 8px;border-radius:10px;position:relative;
  display:flex;align-items:center;gap:9px;
  border:1px solid var(--line);
  background:var(--input-bg);
  color:var(--text);font-family:inherit;cursor:pointer;text-align:left;
  transition:border-color .16s, background .16s, box-shadow .16s;
}
.bp-cover{
  width:26px;height:34px;flex:0 0 26px;border-radius:4px;
  object-fit:cover;display:grid;place-items:center;
  font-size:12px;font-weight:600;line-height:1;
  color:color-mix(in srgb,var(--accent) 76%,var(--text));
  background:
    linear-gradient(150deg,color-mix(in srgb,var(--accent) 20%,transparent),color-mix(in srgb,var(--accent-2) 12%,transparent)),
    var(--panel-2);
  border:1px solid color-mix(in srgb,var(--accent) 22%,var(--line));
  overflow:hidden;
}
.bp-cover.is-empty{color:color-mix(in srgb,var(--accent) 65%,var(--muted));font-size:11px}
.book-pick-meta{display:flex;flex-direction:column;gap:3px;min-width:0;flex:1}
.book-pick-txt{
  min-width:0;display:block;
  font-size:12.5px;font-weight:600;line-height:1.2;color:var(--text);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
.book-pick-sub{
  font-size:10px;line-height:1.2;color:var(--muted-2);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
.book-menu{
  position:absolute;left:0;top:calc(100% + 6px);width:100%;z-index:80;
  display:none;padding:5px;max-height:280px;overflow:auto;
  border-radius:11px;background:var(--panel);
  border:1px solid var(--line);
  box-shadow:0 16px 36px rgba(0,0,0,.42), inset 0 1px 0 rgba(255,255,255,.04);
}
.book-menu.open{display:block}
.book-menu-item{
  display:flex;align-items:center;gap:8px;
  padding:6px 8px;border-radius:8px;cursor:pointer;
  font-size:12.5px;color:var(--text-soft);white-space:nowrap;
}
.bm-cover{
  width:18px;height:24px;flex:0 0 18px;border-radius:3px;
  object-fit:cover;display:grid;place-items:center;
  font-size:9.5px;font-weight:600;line-height:1;
  color:color-mix(in srgb,var(--accent) 70%,var(--muted));
  background:var(--panel-2);border:1px solid var(--line-soft);
  overflow:hidden;
}
.book-menu-item b{
  font-weight:600;min-width:0;flex:1;
  overflow:hidden;text-overflow:ellipsis;display:block;color:var(--text);
}
.book-menu-item > span{font-size:10px;color:var(--muted-2);flex:0 0 auto}
.book-menu-item:hover{background:var(--hover-bg)}
.book-menu-item.on{background:color-mix(in srgb,var(--accent) 13%,transparent)}
.book-menu-item.on b{color:color-mix(in srgb,var(--accent) 88%,var(--text))}
.book-menu-item.on > span{color:color-mix(in srgb,var(--accent) 60%,var(--muted-2))}
.book-menu-empty{padding:14px 10px;font-size:11.5px;color:var(--muted-2);text-align:center}
.book-pick:hover{
  border-color:color-mix(in srgb,var(--accent) 34%,var(--line));
  background:var(--hover-bg);
}
.book-pick[aria-expanded="true"]{
  border-color:color-mix(in srgb,var(--accent) 46%,var(--line));
  box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 10%,transparent);
}
.book-pick:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 2px color-mix(in srgb,var(--accent) 18%,transparent)}
.book-pick-caret{
  position:absolute;right:10px;top:50%;transform:translateY(-50%);
  pointer-events:none;color:var(--muted-2);font-size:9px;line-height:1;
  transition:transform .16s,color .16s;
}
.book-pick[aria-expanded="true"] .book-pick-caret{transform:translateY(-50%) rotate(180deg);color:var(--accent)}
.book-actions{display:flex;gap:7px;margin-top:7px}
.book-actions .btn{flex:1;height:30px;font-size:12px}

.nav{flex:1;min-height:0;overflow-y:auto;padding:6px 10px 10px;scrollbar-width:thin;scrollbar-color:color-mix(in srgb,var(--accent) 34%,transparent) transparent}
.nav::-webkit-scrollbar{width:6px}
.nav::-webkit-scrollbar-track{background:transparent}
.nav::-webkit-scrollbar-thumb{background:color-mix(in srgb,var(--accent) 30%,transparent);border-radius:3px}
.nav::-webkit-scrollbar-thumb:hover{background:color-mix(in srgb,var(--accent) 50%,transparent)}
.nav-group{font-size:10.5px;letter-spacing:1px;color:var(--muted-2);padding:12px 8px 4px}
.nav-item{
  display:flex;align-items:center;gap:9px;
  padding:9px 10px;margin:2px 0;border-radius:9px;
  color:#b9c6d6;font-size:13px;cursor:pointer;border:1px solid transparent;
  user-select:none;transition:background .15s,color .15s;
}
.nav-item:hover{background:#141c26;color:#e6eef8}
.nav-item.active{
  background:linear-gradient(90deg,rgba(94,234,212,.14),rgba(124,140,255,.08));
  border-color:rgba(94,234,212,.28);color:#eafffb;font-weight:600;
}
.nav-item .ico{width:18px;text-align:center;font-size:14px;opacity:.95}
.nav-item .count{
  margin-left:auto;font-size:11px;background:#243140;color:#9fb0c4;
  padding:0 6px;border-radius:20px;min-width:20px;text-align:center;
}
.nav-item .count.hot{background:rgba(248,113,113,.18);color:#fca5a5}

.sidebar-foot{padding:10px 12px 14px;border-top:1px solid var(--line-soft)}
.save-state{font-size:11px;color:var(--muted-2);margin-bottom:8px;text-align:center}

/* ---------------- 主区 ---------------- */
.main{flex:1;display:flex;flex-direction:column;min-width:0}
.topbar{
  display:flex;align-items:flex-end;justify-content:space-between;gap:16px;
  padding:18px 26px 14px;border-bottom:1px solid var(--line-soft);
  background:rgba(10,13,18,.55);backdrop-filter:blur(6px);
}
.topbar h1{margin:0;font-size:20px;letter-spacing:.4px}
.topbar p{margin:3px 0 0;font-size:12.5px}
.topbar-actions{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.view{flex:1;overflow-y:auto;padding:20px 26px 32px}

/* ---------------- 通用组件 ---------------- */
.muted{color:var(--muted)}
.tiny{font-size:11.5px}
.center{text-align:center}
.row{display:flex;gap:10px;align-items:center}
.row-between{display:flex;justify-content:space-between;align-items:center;gap:10px}
.wrap{flex-wrap:wrap}
.grow{flex:1}
.mt8{margin-top:8px}.mt12{margin-top:12px}.mt16{margin-top:16px}.mt24{margin-top:24px}
.mb8{margin-bottom:8px}.mb12{margin-bottom:12px}
.nowrap{white-space:nowrap}
.hidden{display:none!important}

.panel{
  background:linear-gradient(180deg,var(--panel),#121821);
  border:1px solid var(--line);border-radius:var(--radius);
  box-shadow:var(--shadow);padding:16px;
}
.panel-head{display:flex;justify-content:space-between;align-items:center;gap:10px;margin-bottom:12px}
.panel-head h3{margin:0;font-size:14px;letter-spacing:.3px}
.panel-head .hint{font-size:11.5px;color:var(--muted-2)}
.panel-actions{display:flex;gap:6px;align-items:center}

.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:6px;
  padding:8px 13px;border-radius:9px;border:1px solid var(--line);
  background:var(--panel-2);color:#dbe6f2;font-size:13px;cursor:pointer;
  font-family:inherit;transition:.16s;white-space:nowrap;
}
.btn:hover{background:var(--panel-3);border-color:#31415a}
.btn:active{transform:translateY(1px)}
.btn:disabled{opacity:.5;cursor:not-allowed;transform:none}
.btn-primary{
  background:linear-gradient(135deg,#2dd4bf,#38bdf8);color:#06262b;border-color:transparent;font-weight:700;
  box-shadow:0 6px 18px rgba(45,212,191,.22);
}
.btn-primary:hover{filter:brightness(1.07);background:linear-gradient(135deg,#2dd4bf,#38bdf8)}
.btn-accent{background:linear-gradient(135deg,#7c8cff,#a78bfa);color:#0b0d1a;border-color:transparent;font-weight:700}
.btn-danger{background:rgba(248,113,113,.12);border-color:rgba(248,113,113,.35);color:#fca5a5}
.btn-danger:hover{background:rgba(248,113,113,.2)}
.btn-ghost{background:transparent}
.btn-block{width:100%}
.btn-sm{padding:5px 9px;font-size:12px;border-radius:7px}
.btn-xs{padding:3px 7px;font-size:11px;border-radius:6px}
.icon-btn{
  border:none;background:transparent;color:var(--muted);cursor:pointer;
  font-size:15px;padding:4px 7px;border-radius:7px;line-height:1;
}
.icon-btn:hover{background:#202a36;color:#e6eef8}

.badge{
  display:inline-flex;align-items:center;gap:4px;
  padding:2px 8px;border-radius:20px;font-size:11px;line-height:1.6;
  background:#1e2836;color:#a8b8ca;white-space:nowrap;
}
.badge.queue{background:rgba(148,163,184,.14);color:#a9b6c7}
.badge.planning{background:rgba(56,189,248,.15);color:#7dd3fc}
.badge.draft{background:rgba(192,132,252,.15);color:#d8b4fe}
.badge.delivered{background:rgba(52,211,153,.14);color:#6ee7b7}
.badge.warn{background:rgba(251,191,36,.14);color:#fcd34d}
.badge.danger{background:rgba(248,113,113,.14);color:#fca5a5}
.badge.ok{background:rgba(52,211,153,.14);color:#6ee7b7}
.badge.mute{background:#1a222d;color:#7f8fa2}

.chip{
  display:inline-flex;align-items:center;gap:5px;padding:4px 9px;border-radius:20px;
  background:#1b2430;border:1px solid var(--line);font-size:12px;color:#b9c7d8;
}
.chip .x{
  cursor:pointer;color:var(--muted-2);font-size:14px;line-height:1;
  opacity:.55;padding:0 1px;transition:color .15s, opacity .15s;
}
.chip .x:hover{color:var(--danger);opacity:1}
.chip .w{white-space:nowrap}
.chip .rep{
  white-space:nowrap;font-size:11.5px;color:var(--ok);
  padding-left:9px;position:relative;
}
.chip .rep::before{
  content:"→";position:absolute;left:1px;top:50%;transform:translateY(-50%);
  font-size:10px;color:var(--muted-2);
}
.bw-add{display:flex;align-items:flex-end;gap:8px;margin-top:12px;flex-wrap:wrap}
.bw-add .field{flex:1;min-width:140px;margin:0}
.bw-add .bw-arrow{padding-bottom:9px;color:var(--muted-2);font-size:12px}
.bw-add .btn{height:34px;flex:0 0 auto}
.style-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:16px;align-items:stretch}
.style-side{display:flex;flex-direction:column}
.style-side .divider:last-of-type{margin-top:auto}
.cr-list{display:flex;flex-direction:column;gap:6px;margin-top:10px}
.cr-item{
  display:flex;align-items:center;gap:8px;padding:6px 10px;border-radius:8px;
  background:var(--input-bg);border:1px solid var(--line-soft);
}
.cr-item .switch{flex:1;min-width:0;margin:0;font-size:12px;line-height:1.5}
.cr-item .x{
  flex:0 0 auto;cursor:pointer;color:var(--muted-2);font-size:14px;line-height:1;opacity:.55;
  transition:color .15s, opacity .15s;
}
.cr-item .x:hover{color:var(--danger);opacity:1}
.cr-add{display:flex;gap:8px;margin-top:10px}
.cr-add input{flex:1;min-width:0}
.cr-add .btn{flex:0 0 auto}

/* 技能库 */
.sk-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:14px}
.sk-card{
  display:flex;flex-direction:column;gap:8px;padding:14px 15px;border-radius:14px;
  background:linear-gradient(160deg,var(--panel-2),var(--panel));
  border:1px solid var(--line);
  transition:border-color .18s ease, transform .18s ease;
}
.sk-card:hover{border-color:color-mix(in srgb,var(--accent) 38%,var(--line));transform:translateY(-2px)}
.sk-card.on{border-color:color-mix(in srgb,var(--accent) 30%,var(--line))}
.sk-head{display:flex;align-items:center;gap:8px}
.sk-head b{font-size:13px;font-weight:600;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sk-head .badge{font-size:10px;flex:0 0 auto}
.sk-switch{margin-left:auto;display:flex;align-items:center;gap:4px;font-size:11px;color:var(--muted);flex:0 0 auto}
.sk-desc{font-size:12px;color:var(--muted)}
.sk-prompt{
  flex:1;font-size:11.5px;line-height:1.65;color:var(--text-soft);
  background:var(--input-bg);border:1px solid var(--line-soft);border-radius:8px;
  padding:8px 10px;
  display:-webkit-box;-webkit-line-clamp:4;-webkit-box-orient:vertical;overflow:hidden;
}
.sk-foot{display:flex;gap:10px;justify-content:flex-end;align-items:center}
.sk-tabs{display:flex;gap:6px;margin-bottom:14px}
.sk-tab{
  padding:7px 14px;border-radius:9px;cursor:pointer;font-family:inherit;
  border:1px solid var(--line);background:var(--panel-2);color:var(--muted);font-size:12.5px;
  transition:color .15s, border-color .15s, background .15s;
}
.sk-tab:hover{color:var(--text)}
.sk-tab.active{
  color:var(--accent);
  border-color:color-mix(in srgb,var(--accent) 34%,transparent);
  background:color-mix(in srgb,var(--accent) 14%,transparent);
}
.sk-loading{padding:24px 0;text-align:center}

/* 工作流广场 */
.wf-sort{display:flex;gap:6px}
.wf-search input{
  width:230px;max-width:42vw;padding:7px 11px;border-radius:9px;
  border:1px solid var(--line);background:var(--input-bg);color:var(--text);font-family:inherit;font-size:12.5px;
}
.wf-search input:focus{outline:none;border-color:color-mix(in srgb,var(--accent) 42%,var(--line))}
.wf-sort-item{
  padding:5px 11px;border-radius:8px;border:1px solid var(--line);background:var(--panel-2);
  color:var(--muted);font-size:12px;cursor:pointer;transition:color .15s,border-color .15s,background .15s;
}
.wf-sort-item:hover{color:var(--text)}
.wf-sort-item.on{
  color:var(--accent);border-color:color-mix(in srgb,var(--accent) 40%,transparent);
  background:color-mix(in srgb,var(--accent) 13%,transparent);
}
.wf-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:14px}
.wf-card{
  display:flex;flex-direction:column;gap:9px;padding:15px 16px;border-radius:14px;
  background:linear-gradient(160deg,var(--panel-2),var(--panel));
  border:1px solid var(--line);
  transition:border-color .18s ease, transform .18s ease;
}
.wf-card:hover{border-color:color-mix(in srgb,var(--accent) 38%,var(--line));transform:translateY(-2px)}
.wf-top{display:flex;align-items:center;gap:7px;font-size:11.5px;color:var(--muted)}
.wf-star{color:var(--accent);font-size:12px}
.wf-top b{font-size:12.5px;font-weight:600;color:var(--text)}
.wf-uses{color:var(--muted-2)}
.wf-title{
  font-size:13.5px;font-weight:600;line-height:1.55;color:var(--text);
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;
}
.wf-desc{
  flex:1;font-size:12px;line-height:1.7;color:var(--muted);
  display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;
}
.wf-tags{display:flex;gap:6px;flex-wrap:wrap}
.wf-tags .badge{font-size:10px}
.wf-foot{
  display:flex;align-items:center;gap:8px;flex-wrap:wrap;
  border-top:1px solid var(--line-soft);padding-top:10px;margin-top:2px;
}
.wf-author{font-size:11.5px;color:var(--text-soft)}
.wf-date{font-size:11px;color:var(--muted-2)}
.wf-steps{display:flex;flex-direction:column;gap:10px}
.wf-step{border:1px solid var(--line);border-radius:10px;background:var(--panel-2);padding:10px 12px}
.wf-step h5{margin:0 0 6px;font-size:12.5px;color:var(--text)}
.wf-step pre{
  margin:0;white-space:pre-wrap;word-break:break-word;font-family:inherit;
  font-size:11.5px;line-height:1.7;color:var(--text-soft);
}

/* 运行抽屉：分步执行 */
.skr-chips{display:flex;flex-wrap:wrap;gap:7px;margin-bottom:10px}
.skr-chip{
  padding:5px 11px;border-radius:8px;font-size:11.5px;cursor:pointer;
  border:1px solid var(--line);background:var(--panel-2);color:var(--muted);
  transition:color .15s,border-color .15s,background .15s;
}
.skr-chip:hover{color:var(--text)}
.skr-chip.ok{color:var(--text-soft);border-color:color-mix(in srgb,var(--accent) 26%,var(--line))}
.skr-chip.live{color:var(--accent);border-color:color-mix(in srgb,var(--accent) 45%,transparent)}
.skr-chip.on{background:color-mix(in srgb,var(--accent) 15%,transparent);color:var(--accent);border-color:color-mix(in srgb,var(--accent) 42%,transparent)}
.skr-stage{
  border:1px solid var(--line);border-radius:10px;background:var(--input-bg);
  padding:10px 12px;display:flex;flex-direction:column;gap:8px;
}
.skr-stage-head{display:flex;align-items:center;gap:10px;font-size:12.5px;color:var(--text)}
.skr-stage-head b{font-weight:600}
.skr-stage .skr-text{margin:0;max-height:340px;overflow:auto}
.skr-edit{
  width:100%;box-sizing:border-box;border:1px solid var(--line);border-radius:8px;
  background:var(--panel);color:var(--text);padding:10px 11px;font-family:inherit;
  font-size:12px;line-height:1.75;resize:vertical;max-height:420px;
}
.skr-stage .skr-tools{display:flex;align-items:center;gap:8px;flex-wrap:wrap}

/* 运行历史 */
.skr-hist-list{display:flex;flex-direction:column;gap:12px}.skr-hist{border:1px solid var(--line);border-radius:10px;background:var(--panel-2);padding:10px 12px}
.skr-hist-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:8px}
.skr-hist-head b{font-size:12.5px;color:var(--text);font-weight:600}
.skr-hist-text{
  margin:0 0 8px;max-height:200px;overflow:auto;white-space:pre-wrap;word-break:break-word;
  font-family:inherit;font-size:11.5px;line-height:1.7;color:var(--text-soft);
}
.skr-hist .skr-tools{display:flex;align-items:center;gap:8px}

/* 提示词库 */
.pm-cats{display:flex;flex-wrap:wrap;gap:6px;margin:4px 0 14px}
.pm-cat{
  padding:5px 10px;border-radius:8px;font-size:11.5px;cursor:pointer;
  border:1px solid var(--line);background:var(--panel-2);color:var(--muted);
  transition:color .15s,border-color .15s,background .15s;
}
.pm-cat:hover{color:var(--text)}
.pm-cat.on{
  color:var(--accent);border-color:color-mix(in srgb,var(--accent) 40%,transparent);
  background:color-mix(in srgb,var(--accent) 13%,transparent);
}
.pm-cat.empty{opacity:.55}
.pm-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(310px,1fr));gap:14px}
.pm-card{
  display:flex;flex-direction:column;gap:8px;padding:14px 15px;border-radius:14px;
  background:linear-gradient(160deg,var(--panel-2),var(--panel));
  border:1px solid var(--line);
  transition:border-color .18s ease, transform .18s ease;
}
.pm-card:hover{border-color:color-mix(in srgb,var(--accent) 36%,var(--line));transform:translateY(-2px)}
.pm-card.own{border-color:color-mix(in srgb,var(--accent) 24%,var(--line))}
.pm-top{display:flex;align-items:center;gap:6px}
.pm-top .badge{font-size:10px}
.pm-uses{font-size:11px;color:var(--muted-2)}
.pm-title{
  font-size:13.5px;font-weight:600;line-height:1.5;color:var(--text);
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;
}
.pm-desc{
  font-size:12px;line-height:1.65;color:var(--muted);
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;
}
.pm-prompt{
  font-size:11.5px;line-height:1.7;color:var(--text-soft);
  background:var(--input-bg);border:1px solid var(--line-soft);border-radius:8px;padding:8px 10px;
  display:-webkit-box;-webkit-line-clamp:4;-webkit-box-orient:vertical;overflow:hidden;
}
.pm-tags{display:flex;gap:6px;flex-wrap:wrap}
.pm-tags .badge{font-size:10px}
.pm-foot{display:flex;align-items:center;gap:8px;flex-wrap:wrap;border-top:1px solid var(--line-soft);padding-top:9px;margin-top:2px}
.pm-meta{font-size:11px;color:var(--muted-2)}

/* 世界观与设定 */
.w-head{display:flex;align-items:flex-end;gap:12px;flex-wrap:wrap;margin-bottom:2px}
.w-head .tabs{flex:1;min-width:260px;border-bottom:none;margin-bottom:0}
.w-head .wf-search input{width:210px}
.w-note{font-size:11.5px;line-height:1.7;color:var(--muted-2);margin:8px 0 14px}
.w-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:14px}
.w-card{
  display:flex;flex-direction:column;gap:9px;min-height:122px;padding:15px 16px;border-radius:14px;
  background:linear-gradient(160deg,var(--panel-2),var(--panel));
  border:1px solid var(--line);cursor:pointer;
  transition:border-color .18s ease, transform .18s ease, box-shadow .18s ease;
}
.w-card:hover{
  border-color:color-mix(in srgb,var(--accent) 42%,var(--line));
  transform:translateY(-2px);
  box-shadow:0 10px 26px color-mix(in srgb,var(--accent) 10%,transparent);
}
.w-card-head{display:flex;align-items:center;gap:8px}
.w-card-head h4{
  margin:0;font-size:15px;font-weight:600;line-height:1.4;color:var(--text);
  min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
.w-card-head .badge{flex:0 0 auto;font-size:10px}
.w-card-desc{
  flex:1;font-size:12.5px;line-height:1.75;color:var(--muted);
  display:-webkit-box;-webkit-line-clamp:4;-webkit-box-orient:vertical;overflow:hidden;
  overflow-wrap:anywhere;
}
.w-card-kw{display:flex;gap:6px;flex-wrap:wrap}
.w-card-kw .badge{font-size:10px}
.w-card-foot{
  display:flex;justify-content:flex-end;align-items:center;
  border-top:1px solid var(--line-soft);padding-top:8px;margin-top:2px;
}
.w-log{
  margin-top:18px;padding:0 14px;border:1px solid var(--line-soft);border-radius:12px;
  background:var(--panel-a,var(--panel));
}
.w-log summary{
  display:flex;align-items:center;gap:8px;cursor:pointer;list-style:none;
  padding:11px 0;font-size:12.5px;color:var(--muted);
}
.w-log summary::-webkit-details-marker{display:none}
.w-log summary .badge{font-size:10px}
.w-log summary .tiny{margin-left:auto}
.w-log[open] summary{border-bottom:1px solid var(--line-soft);margin-bottom:8px}
.w-log-empty{padding:10px 0}
.w-log .scroll{max-height:240px}
.w-range{display:flex;align-items:center;gap:6px;font-size:12.5px;color:var(--muted)}
.w-range input{
  width:66px;padding:6px 8px;border-radius:8px;font-family:inherit;font-size:12.5px;
  border:1px solid var(--line);background:var(--input-bg);color:var(--text);
}
.w-range input:focus{outline:none;border-color:color-mix(in srgb,var(--accent) 42%,var(--line))}
.w-card-head .badge.warn{
  color:var(--warn);border-color:color-mix(in srgb,var(--warn) 42%,transparent);
  background:color-mix(in srgb,var(--warn) 12%,transparent);
}
@media (max-width:1200px){
  .w-head{gap:8px}
  .w-head .tabs{flex:1 1 100%;min-width:0}
  .w-head .spacer{display:none}
  .w-head .wf-search{flex:1;min-width:0;margin-left:0}
  .w-head .wf-search input{width:100%;max-width:none}
}

/* 知识卡 */
.kc-linked-tip{margin-left:auto;font-size:11.5px;color:var(--muted);display:flex;align-items:center;gap:6px}
.kc-linked-tip b{color:var(--accent)}
.kc-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:14px}
.kc-card{
  display:flex;flex-direction:column;gap:8px;padding:14px 15px;border-radius:14px;
  background:linear-gradient(160deg,var(--panel-2),var(--panel));
  border:1px solid var(--line);
  transition:border-color .18s ease, transform .18s ease;
}
.kc-card:hover{border-color:color-mix(in srgb,var(--accent) 36%,var(--line));transform:translateY(-2px)}
.kc-card.on{border-color:color-mix(in srgb,var(--accent) 52%,var(--line));box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--accent) 18%,transparent)}
.kc-top{display:flex;align-items:center;gap:6px}
.kc-top .badge{font-size:10px}
.kc-uses{font-size:11px;color:var(--muted-2)}
.kc-title{
  font-size:13.5px;font-weight:600;line-height:1.5;color:var(--text);
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;
}
.kc-desc{font-size:12px;line-height:1.65;color:var(--muted);
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.kc-scene{font-size:11px;color:var(--muted-2)}
.kc-body{
  font-size:11.5px;line-height:1.7;color:var(--text-soft);
  background:var(--input-bg);border:1px solid var(--line-soft);border-radius:8px;padding:8px 10px;
  display:-webkit-box;-webkit-line-clamp:4;-webkit-box-orient:vertical;overflow:hidden;
}
.kc-tags{display:flex;gap:6px;flex-wrap:wrap}
.kc-tags .badge{font-size:10px}
.kc-foot{display:flex;align-items:center;gap:8px;flex-wrap:wrap;border-top:1px solid var(--line-soft);padding-top:9px;margin-top:2px}
.kc-meta{font-size:11px;color:var(--muted-2)}
.kc-full{
  margin:0;white-space:pre-wrap;word-break:break-word;font-family:inherit;
  font-size:12px;line-height:1.8;color:var(--text-soft);
  background:var(--input-bg);border:1px solid var(--line-soft);border-radius:10px;padding:12px 14px;
  max-height:52vh;overflow:auto;
}

/* 技能：步骤 / 参数编辑 + 运行抽屉 */
.sk-meta{font-size:11px;color:var(--muted-2);letter-spacing:.2px}
.sk-foot .sk-run{margin-right:auto}
.sksec{margin-top:16px;border-top:1px solid var(--line-soft);padding-top:12px}
.sksec-head{display:flex;align-items:center;gap:10px;margin-bottom:10px;flex-wrap:wrap}
.sksec-head b{font-size:13px;flex:0 0 auto}
.sksec-head .btn{margin-left:auto;flex:0 0 auto}
.skst{border:1px solid var(--line);border-radius:10px;background:var(--panel-2);padding:10px;margin-bottom:10px}
.skst-head{display:flex;align-items:center;gap:8px;margin-bottom:8px}
.skst-no{
  width:22px;height:22px;border-radius:6px;flex:0 0 auto;
  background:color-mix(in srgb,var(--accent) 18%,transparent);color:var(--accent);
  font-size:11px;display:grid;place-items:center;
}
.skst-name{flex:1;min-width:0}
.skst .skst-prompt{width:100%;box-sizing:border-box}
.skp{display:flex;align-items:center;gap:8px;margin-bottom:8px}
.skp .skp-type{width:112px;flex:0 0 auto}
.skp .skp-label{flex:1;min-width:0}
.skp .skp-key{
  width:104px;flex:0 0 auto;
  font-family:ui-monospace,Consolas,monospace;font-size:12px;
}
.skp-req-lbl{display:flex;align-items:center;gap:4px;font-size:12px;color:var(--muted);flex:0 0 auto}
.skph{margin-top:8px;font-size:11.5px;color:var(--muted-2);line-height:1.75}
.skrow{display:grid;grid-template-columns:1.4fr .8fr 1.4fr;gap:10px;margin-top:12px}
@media (max-width:720px){.skrow{grid-template-columns:1fr}}
.skchk{display:flex;align-items:center;gap:8px;font-size:12.5px;color:var(--text-soft);margin-top:14px;cursor:pointer}
.req{color:var(--danger);font-style:normal}

/* 技能运行抽屉 */
.modal-run{width:920px;max-width:calc(100vw - 32px)}
.btn[hidden]{display:none}
.skr-top{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.skr-desc{margin-left:4px;min-width:0}
.skr-sec{margin-top:14px;padding:14px;border:1px solid var(--line);border-radius:12px;background:var(--panel-2)}
.skr-sec > h4{margin:0 0 10px;font-size:13px}
.skr-sec label.field{margin-bottom:12px}
.skr-lock{
  padding:10px 12px;border:1px dashed var(--line);border-radius:9px;
  font-size:12px;color:var(--muted);background:var(--input-bg);
}
.skr-field{margin-bottom:12px}
.skr-field > .lbl{
  display:flex;align-items:center;gap:8px;
  font-size:12px;color:var(--muted);margin-bottom:6px;
}
.skr-tools{margin-left:auto;display:flex;gap:10px}
.skr-pick{
  max-height:168px;overflow:auto;
  border:1px solid var(--line-soft);border-radius:9px;
  background:var(--input-bg);padding:6px;
}
.skr-opt{display:flex;align-items:center;gap:8px;padding:5px 6px;border-radius:6px;font-size:12.5px;cursor:pointer}
.skr-opt:hover{background:var(--row-hover)}
.skr-opt .t{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.skr-opt .n{margin-left:auto;font-size:11px;color:var(--muted-2);flex:0 0 auto}
.skr-warn{
  margin-top:10px;padding:9px 12px;border-radius:9px;font-size:12.5px;
  border:1px solid color-mix(in srgb,var(--warn) 40%,var(--line));
  background:color-mix(in srgb,var(--warn) 12%,transparent);color:var(--warn);
}
.skr-modes{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.skr-mode{
  display:flex;align-items:flex-start;gap:9px;padding:11px 12px;
  border:1px solid var(--line);border-radius:10px;cursor:pointer;background:var(--panel);
}
.skr-mode.on{
  border-color:color-mix(in srgb,var(--accent) 45%,var(--line));
  background:color-mix(in srgb,var(--accent) 8%,var(--panel));
}
.skr-mode.off{opacity:.55;cursor:not-allowed}
.skr-mode span{display:flex;flex-direction:column;gap:3px;min-width:0}
.skr-mode b{font-size:12.5px}
.skr-mode em{font-style:normal;font-size:11.5px;color:var(--muted);line-height:1.5}
.skr-step{margin-top:10px;border:1px solid var(--line-soft);border-radius:10px;background:var(--panel);overflow:hidden}
.skr-step-head{display:flex;align-items:center;gap:10px;padding:9px 12px;border-bottom:1px solid var(--line-soft)}
.skr-step-head b{font-size:12.5px}
.skr-state{margin-left:auto;font-size:11.5px;color:var(--muted)}
.skr-state.live{color:var(--accent)}
.skr-state.ok{color:var(--ok)}
.skr-text{
  margin:0;padding:12px;max-height:320px;overflow:auto;
  font-family:inherit;font-size:12.5px;line-height:1.75;
  white-space:pre-wrap;word-break:break-word;color:var(--text-soft);
}
.skr-tools{display:flex;align-items:center;gap:8px;margin-top:12px}

/* AI 扫榜 */
.rk-bar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:12px}
.rk-seg{display:flex;gap:4px;padding:4px;border:1px solid var(--line);border-radius:11px;background:var(--panel-2)}
.rk-seg-item{
  padding:6px 14px;border:0;border-radius:8px;background:transparent;color:var(--muted);
  font-family:inherit;font-size:12.5px;cursor:pointer;transition:color .15s,background .15s;
}
.rk-seg-item:hover{color:var(--text)}
.rk-seg-item.on{background:color-mix(in srgb,var(--accent) 16%,transparent);color:var(--accent)}
.rk-sub{display:flex;flex-direction:column;gap:8px;margin-bottom:14px}
.rk-chips{display:flex;gap:6px;flex-wrap:wrap}
.rk-chip{
  padding:5px 12px;border-radius:8px;border:1px solid var(--line);
  background:var(--panel-2);color:var(--muted);font-size:12.5px;cursor:pointer;
  transition:color .15s,border-color .15s,background .15s;
}
.rk-chip:hover{color:var(--text)}
.rk-chip.sm{font-size:12px;padding:4px 10px}
.rk-chip.on{
  color:var(--accent);
  border-color:color-mix(in srgb,var(--accent) 40%,transparent);
  background:color-mix(in srgb,var(--accent) 12%,transparent);
}
.rk-headline{display:flex;align-items:center;gap:10px;margin-bottom:10px;flex-wrap:wrap}
.rk-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:12px}
.rk-card{
  position:relative;display:flex;gap:12px;padding:12px;border-radius:13px;
  background:linear-gradient(160deg,var(--panel-2),var(--panel));
  border:1px solid var(--line);cursor:pointer;
  transition:border-color .18s,transform .18s;
}
.rk-card:hover{border-color:color-mix(in srgb,var(--accent) 38%,var(--line));transform:translateY(-2px)}
.rk-cover{
  position:relative;flex:0 0 auto;width:76px;height:104px;border-radius:9px;
  display:grid;place-items:center;overflow:hidden;
  box-shadow:0 6px 16px rgba(0,0,0,.28);
}
.rk-cover .rk-ini{font-size:22px;font-weight:600;color:rgba(255,255,255,.82);letter-spacing:1px}
.rk-cover img{width:100%;height:100%;object-fit:cover;display:block;border-radius:9px}
.rk-cover .rk-rank{
  position:absolute;top:6px;left:6px;min-width:18px;height:18px;padding:0 4px;
  border-radius:5px;background:rgba(0,0,0,.55);color:#fff;font-size:11px;
  display:grid;place-items:center;font-weight:600;
}
.rk-cover.lg{width:104px;height:144px}
.rk-cover.lg .rk-ini{font-size:30px}
.rk-main{min-width:0;display:flex;flex-direction:column;gap:6px;flex:1;padding-right:18px}
.rk-title{font-size:14px;font-weight:600;line-height:1.35;color:var(--text)}
.rk-meta{font-size:11.5px;color:var(--muted);line-height:1.5}
.rk-meta b{color:var(--accent);font-weight:600}
.rk-desc{
  font-size:12px;line-height:1.65;color:var(--text-soft);
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;
}
.rk-tags{display:flex;gap:6px;flex-wrap:wrap;margin-top:auto}
.rk-open{margin-left:auto;font-size:11px;color:var(--accent);text-decoration:none;white-space:nowrap}
.rk-open:hover{text-decoration:underline}
.rk-tags .badge{font-size:10.5px}
.rk-del{position:absolute;top:8px;right:8px;opacity:.45}
.rk-del:hover{opacity:1;color:var(--danger)}
.rk-note{margin-top:16px;font-size:11.5px;line-height:1.8;color:var(--muted-2)}
.rk-actions{display:flex;gap:10px;justify-content:center;margin-top:12px}
/* 扫榜详情 */
.modal-rank{width:900px;max-width:calc(100vw - 32px)}
.rk-detail{display:flex;gap:14px;align-items:flex-start}
.rk-dinfo{min-width:0;display:flex;flex-direction:column;gap:7px}
.rk-dtitle{display:flex;align-items:center;gap:8px;font-size:16px;font-weight:600}
.rk-ddesc{font-size:12.5px;line-height:1.7;color:var(--text-soft)}
.rk-tabs{
  display:flex;gap:6px;flex-wrap:wrap;margin:16px 0 0;
  border-bottom:1px solid var(--line-soft);padding-bottom:10px;
}
.rk-tab{
  padding:6px 12px;border-radius:8px;border:0;background:transparent;
  color:var(--muted);font-family:inherit;font-size:12.5px;cursor:pointer;
}
.rk-tab:hover{color:var(--text)}
.rk-tab.on{background:color-mix(in srgb,var(--accent) 14%,transparent);color:var(--accent)}
.rk-tab:disabled{opacity:.55;cursor:default}
.rk-pane{margin-top:12px;min-height:120px}
.rk-pane-head{display:flex;align-items:center;gap:8px;margin-bottom:8px}
.rk-text p{margin:0 0 10px;font-size:13px;line-height:1.8;color:var(--text-soft)}
.rk-pane-loading{padding:20px 0;font-size:12.5px;color:var(--muted)}
.rk-pane-empty{display:flex;flex-direction:column;gap:10px;align-items:flex-start;padding:8px 0}
.rk-extra{margin-top:14px;padding:12px 14px;border:1px solid var(--line);border-radius:11px;background:var(--panel-2)}
.rk-extra-head{display:flex;align-items:center;gap:10px;margin-bottom:8px}
.rk-extra-head b{font-size:12.5px;color:var(--accent)}

/* ---------------- 创作论坛 ---------------- */
.fr-wrap{max-width:1080px;margin:0 auto}
.pt-list{display:flex;flex-direction:column;gap:10px}
.pt{
  background:var(--panel);border:1px solid var(--line);border-radius:12px;
  padding:14px 16px;cursor:pointer;
  transition:border-color .15s, background .15s, transform .15s;
}
.pt:hover{
  border-color:color-mix(in srgb,var(--accent) 34%,var(--line));
  background:var(--panel-2);transform:translateY(-1px);
}
.pt-top{display:flex;align-items:center;gap:10px;min-width:0}
.pt-tag{
  flex:0 0 auto;font-size:11px;padding:2px 8px;border-radius:6px;
  color:var(--accent);
  background:color-mix(in srgb,var(--accent) 12%,transparent);
  border:1px solid color-mix(in srgb,var(--accent) 24%,transparent);
}
.pt-title{
  font-size:14.5px;font-weight:600;line-height:1.5;min-width:0;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
.pt-body{
  margin-top:8px;font-size:12.8px;line-height:1.75;color:var(--muted);
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;
  overflow:hidden;word-break:break-word;
}
.pt-foot{
  display:flex;align-items:center;gap:12px;margin-top:10px;
  font-size:11.5px;color:var(--muted-2);
}
.pt-who{color:var(--muted)}
.pt-act{cursor:pointer;font-size:12px;color:var(--muted);transition:color .15s;white-space:nowrap}
.pt-act:hover{color:var(--accent)}
.pt-act.on{color:#fb7185}

.pt-detail{max-width:100%}
.pt-bar{display:flex;align-items:center;gap:10px;margin-bottom:14px}
.pt-main{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:20px 22px}
.pt-h1{margin:0;font-size:18px;font-weight:650;line-height:1.5}
.pt-full{
  margin-top:6px;font-size:13.5px;line-height:1.95;color:var(--text);
  white-space:pre-wrap;word-break:break-word;
}
.pt-cm{
  margin-top:14px;background:var(--panel);border:1px solid var(--line);
  border-radius:12px;padding:16px 20px;
}
.pt-cm-h{
  font-size:12.5px;font-weight:600;color:var(--text);
  padding-bottom:10px;border-bottom:1px solid var(--line);
}
.cm{display:flex;gap:10px;padding:12px 0;border-bottom:1px solid var(--line-soft)}
.cm:last-of-type{border-bottom:none}
.cm-av{
  flex:0 0 auto;width:26px;height:26px;border-radius:8px;display:grid;place-items:center;
  font-size:12px;color:var(--accent);
  background:color-mix(in srgb,var(--accent) 14%,transparent);
  border:1px solid color-mix(in srgb,var(--accent) 24%,transparent);
}
.cm-b{min-width:0;flex:1}
.cm-meta{display:flex;align-items:baseline;gap:8px}
.cm-meta b{font-size:12.5px;color:var(--text)}
.cm-text{
  margin-top:3px;font-size:12.8px;line-height:1.8;color:var(--muted);
  white-space:pre-wrap;word-break:break-word;
}
.cm-form{display:flex;gap:10px;align-items:flex-start;margin-top:14px}
.cm-form textarea{flex:1;min-height:74px;resize:vertical}
.cm-send{flex:0 0 auto;text-align:right}
.fr-row{display:flex;gap:12px}
.fr-row .field{flex:1;min-width:0}
.fr-liked{color:#fb7185 !important}

/* ---------------- 续写导入 ---------------- */
.ci-wrap{max-width:1080px;margin:0 auto}
.ci-steps{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin-bottom:14px}
.ci-step{
  display:flex;gap:10px;align-items:center;padding:12px 14px;
  border-radius:12px;background:var(--panel);border:1px solid var(--line);
}
.ci-step i{
  flex:0 0 auto;width:22px;height:22px;border-radius:7px;display:grid;place-items:center;
  font-style:normal;font-size:11.5px;font-weight:700;color:var(--accent);
  background:color-mix(in srgb,var(--accent) 13%,transparent);
  border:1px solid color-mix(in srgb,var(--accent) 26%,transparent);
}
.ci-step b{display:block;font-size:12.5px;line-height:1.4}
.ci-step span{display:block;font-size:11.5px;color:var(--muted-2);line-height:1.4}
.ci-input{padding:16px 18px}
.ci-head{display:flex;align-items:center;gap:10px;margin-bottom:12px;flex-wrap:wrap}
.ci-head .spacer,.ci-actions .spacer{flex:1}
.ci-head b{font-size:14px}
.ci-input textarea{width:100%;min-height:230px;resize:vertical;font-size:13px;line-height:1.85}
.ci-input textarea.drag{
  border-color:var(--accent);
  background:color-mix(in srgb,var(--accent) 6%,var(--panel-2));
}
.ci-preview{margin-top:14px;padding:16px 18px}
.ci-form{display:grid;grid-template-columns:1.5fr 1fr 1fr .8fr;gap:12px}
.ci-stat{
  display:flex;flex-wrap:wrap;gap:16px;align-items:center;
  margin:14px 0 6px;font-size:12px;color:var(--muted);
}
.ci-stat b{color:var(--text);font-weight:600}
.ci-ai-ok{color:var(--ok)}
.ci-list{margin-top:8px;border-top:1px solid var(--line);padding-top:6px;max-height:300px;overflow-y:auto}
.ci-row{
  display:flex;align-items:baseline;gap:10px;padding:7px 0;
  border-bottom:1px solid var(--line-soft);font-size:12.5px;
}
.ci-row .no{flex:0 0 26px;text-align:right;color:var(--muted-2);font-variant-numeric:tabular-nums}
.ci-row .ti{
  flex:0 0 auto;max-width:180px;color:var(--text);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
.ci-row .wc{flex:0 0 auto;font-size:11.5px;color:var(--muted-2)}
.ci-row .sm{flex:1;min-width:0;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ci-recap{
  margin-top:14px;padding:12px 14px;border-radius:10px;
  background:var(--panel-2);border:1px solid var(--line);
  font-size:12.5px;line-height:1.85;color:var(--muted);
}
.ci-recap .lbl{display:block;margin-bottom:6px;font-size:11.5px;color:var(--accent)}
.ci-actions{display:flex;align-items:center;gap:10px;margin-top:16px}
@media (max-width:980px){
  .ci-form{grid-template-columns:1fr 1fr}
  .ci-steps{grid-template-columns:1fr}
}

/* ---------------- 人物关系图 ---------------- */
.rel-panel{padding:16px 18px 14px}
.rel-head{display:flex;align-items:center;gap:12px;margin-bottom:14px}
.rel-title{display:flex;flex-direction:column;gap:3px;min-width:0}
.rel-title h3{margin:0;font-size:15px;font-weight:600}
.rel-pick{width:auto;max-width:220px;margin-left:auto}
.rel-panel .rel-graph{
  width:100%;height:auto;display:block;overflow:hidden;
  border:1px solid var(--line);border-radius:14px;background:var(--panel);
}
.rel-canvas{overflow-x:auto;overflow-y:hidden}
.rel-canvas .rel-graph{min-width:520px}
.rel-node{cursor:pointer}
.rel-node .halo{opacity:.13;transition:opacity .18s}
.rel-node:hover .halo{opacity:.26}
.rel-node .body{stroke-width:1.6;transition:stroke-width .18s}
.rel-node.dead .body{stroke-dasharray:5 4}
.rel-node.dead{opacity:.72}
.rel-node .nm{
  font-size:13px;font-weight:600;fill:var(--text);
  text-anchor:middle;dominant-baseline:middle;pointer-events:none;
}
.rel-node .rl{
  font-size:11px;fill:var(--muted-2);
  text-anchor:middle;dominant-baseline:middle;pointer-events:none;
}
.rel-center .nm{font-size:15px;fill:var(--accent)}
.rel-center .rl{font-size:11px;fill:color-mix(in srgb,var(--accent) 62%,var(--muted))}
.rel-edge .line{fill:none;stroke-width:1.5;opacity:.5;transition:opacity .18s,stroke-width .18s}
.rel-edge .tag-bg{fill:var(--panel-2);stroke:currentColor;stroke-width:1;opacity:.94}
.rel-edge .tag-tx{fill:currentColor;font-size:11px;text-anchor:middle;dominant-baseline:middle}
.rel-graph.dim .rel-node{opacity:.32}
.rel-graph.dim .rel-node.hi{opacity:1}
.rel-graph.dim .rel-node.hi .halo{opacity:.3}
.rel-graph.dim .rel-edge{opacity:.22}
.rel-graph.dim .rel-edge.hi{opacity:1}
.rel-graph.dim .rel-edge.hi .line{stroke-width:2.6;opacity:1}
.rel-legend{
  display:flex;flex-wrap:wrap;align-items:center;gap:14px;
  margin-top:12px;font-size:11.5px;color:var(--muted);
}
.rel-lg{display:inline-flex;align-items:center;gap:6px}
.rel-lg i{width:8px;height:8px;border-radius:3px;display:inline-block}
.rel-lg i.bar{width:15px;height:3px;border-radius:2px}
.rel-sep{width:1px;height:12px;background:var(--line)}
.rel-hint{margin-left:auto;font-size:11px;color:var(--muted-2)}
.rel-empty{font-size:12px;fill:var(--muted-2);text-anchor:middle}
.chips{display:flex;flex-wrap:wrap;gap:6px}

/* 表单 */
label.field{display:block;margin-bottom:11px}
label.field > span.lbl{display:block;font-size:12px;color:var(--muted);margin-bottom:5px}
input[type=text],input[type=password],input[type=number],input[type=date],input[type=url],select,textarea{
  width:100%;padding:8px 10px;border-radius:9px;border:1px solid var(--line);
  background:#0e141c;color:var(--text);font:inherit;font-size:13px;
}
input:focus,select:focus,textarea:focus{outline:none;border-color:rgba(94,234,212,.55);box-shadow:0 0 0 3px rgba(94,234,212,.08)}
textarea{resize:vertical;line-height:1.75}
input[type=range]{width:100%;accent-color:var(--accent)}
input[type=checkbox]{accent-color:var(--accent);width:15px;height:15px;vertical-align:-2px}
.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:0 14px}
.form-grid .full{grid-column:1/-1}
.hint{font-size:11.5px;color:var(--muted-2);margin-top:4px}
.switch{display:inline-flex;align-items:center;gap:7px;font-size:12.5px;color:#c6d3e2;cursor:pointer;user-select:none}

/* 统计卡 */
.stat-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-bottom:16px}
.stat-card{
  position:relative;overflow:hidden;padding:15px 16px;border-radius:var(--radius);
  border:1px solid var(--line);background:linear-gradient(160deg,var(--panel-2),#111721);
}
.stat-card::after{
  content:"";position:absolute;right:-30px;top:-40px;width:110px;height:110px;border-radius:50%;
  background:radial-gradient(circle,rgba(94,234,212,.16),transparent 65%);
}
.stat-card .k{font-size:12px;color:var(--muted)}
.stat-card .v{font-size:27px;font-weight:700;letter-spacing:.5px;margin:4px 0 2px;font-variant-numeric:tabular-nums}
.stat-card .s{font-size:11.5px;color:var(--muted-2)}
.stat-card .s .up{color:var(--ok)}
.stat-card .s .down{color:var(--danger)}

/* 驾驶舱 */
.cockpit-grid{display:grid;grid-template-columns:minmax(0,1.55fr) minmax(0,1fr);gap:16px;align-items:start}
.kanban{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}
.kcol{background:#10161e;border:1px solid var(--line-soft);border-radius:10px;display:flex;flex-direction:column;min-height:390px}
.kcol-head{display:flex;align-items:center;gap:6px;padding:9px 10px;border-bottom:1px solid var(--line-soft);font-size:12.5px;font-weight:600}
.kcol-head .dot{width:7px;height:7px;border-radius:50%}
.kcol-head .count{margin-left:auto;font-size:11px;color:var(--muted-2)}
.kcol-body{flex:1;padding:8px;display:flex;flex-direction:column;gap:8px;overflow-y:auto;max-height:520px}
.kcol-body.dragover{background:rgba(94,234,212,.05);outline:1px dashed rgba(94,234,212,.4);outline-offset:-4px;border-radius:8px}
.kcard{
  background:linear-gradient(160deg,#1a2330,#161d28);border:1px solid #26323f;border-radius:9px;
  padding:9px 10px;cursor:pointer;transition:.15s;
}
.kcard:hover{border-color:rgba(94,234,212,.45);transform:translateY(-1px)}
.kcard.dragging{opacity:.45}
.kcard-title{font-size:12.5px;font-weight:600;margin-bottom:3px;line-height:1.45}
.kcard-sum{font-size:11.5px;color:var(--muted);line-height:1.5;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;min-height:32px}
.kcard-meta{display:flex;align-items:center;gap:6px;margin-top:6px;font-size:10.5px;color:var(--muted-2);flex-wrap:wrap}
.kempty{font-size:11.5px;color:#465468;text-align:center;padding:18px 6px;border:1px dashed #243040;border-radius:8px}

/* 热力图 */
.heat-wrap{overflow-x:auto;padding-bottom:4px}
.heat{
  display:grid;grid-auto-flow:column;grid-template-rows:repeat(7,13px);
  gap:3px;width:max-content;
}
.heat i{width:13px;height:13px;border-radius:3px;background:#151d27;display:block}
.heat i.l1{background:#1c4a45}
.heat i.l2{background:#2a7d72}
.heat i.l3{background:#3fbfae}
.heat i.l4{background:#7df0dd}
.heat i.future{background:transparent}
.heat-legend{display:flex;align-items:center;gap:5px;font-size:10.5px;color:var(--muted-2);margin-top:8px}
.heat-legend i{width:10px;height:10px;border-radius:2px;display:block;background:#151d27}
.heat-legend i.l1{background:#1c4a45}
.heat-legend i.l2{background:#2a7d72}
.heat-legend i.l3{background:#3fbfae}
.heat-legend i.l4{background:#7df0dd}

/* 进度条 */
.bar{height:7px;border-radius:20px;background:#1a2331;overflow:hidden;margin:8px 0 4px}
.bar > span{display:block;height:100%;border-radius:20px;background:linear-gradient(90deg,#2dd4bf,#7c8cff)}
.kv{display:flex;justify-content:space-between;font-size:12px;padding:4px 0;border-bottom:1px dashed #1d2734}
.kv:last-child{border-bottom:none}
.kv b{font-weight:600}

/* 表格 */
.table-wrap,.table-scroll{overflow-x:auto}
.table{width:100%;border-collapse:collapse;font-size:12.5px;min-width:720px}
.table th{
  text-align:left;font-weight:600;color:var(--muted);font-size:11.5px;
  padding:8px 9px;border-bottom:1px solid var(--line);white-space:nowrap;
}
.table td{padding:9px;border-bottom:1px solid var(--line-soft);vertical-align:middle}
.table tr:hover td{background:rgba(255,255,255,.015)}
.table .t-title{font-weight:600}
.table .t-sub{font-size:11px;color:var(--muted-2)}
.toolbar{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-bottom:14px}
.toolbar input[type=text]{width:min(280px,34vw)}
.toolbar select{width:auto;min-width:110px}
.toolbar .spacer{flex:1}

/* 写作台 */
.studio{display:grid;grid-template-columns:330px minmax(0,1fr);gap:16px;align-items:start;height:100%}
.studio-left{max-height:calc(100vh - 150px);overflow-y:auto}
.studio-right{display:flex;flex-direction:column;height:calc(100vh - 150px);min-height:420px}
.studio-toolbar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding-bottom:10px;border-bottom:1px solid var(--line-soft);margin-bottom:10px}
.studio-toolbar select{width:auto;max-width:230px}
.wc{font-size:11.5px;color:var(--muted-2);margin-left:auto;font-variant-numeric:tabular-nums}
#content{flex:1;min-height:320px;background:#0c1117;border:1px solid var(--line);border-radius:10px;padding:20px 24px;font-size:15px;line-height:2;font-family:"Source Han Serif SC","Songti SC",Georgia,"Microsoft YaHei",serif;letter-spacing:.3px}
#content:read-only{background:#0a0e13;color:#b9c6d5}
.locked-banner{display:flex;align-items:center;gap:10px;background:rgba(52,211,153,.08);border:1px solid rgba(52,211,153,.25);color:#a7f3d0;padding:8px 12px;border-radius:9px;font-size:12px;margin-bottom:10px}
.constraint-box{background:#0e141c;border:1px solid var(--line-soft);border-radius:9px;padding:10px;font-size:11.5px;color:#a9b8c9;line-height:1.7}
.constraint-box b{color:#dbe7f3;font-weight:600}
.section-title{font-size:11px;letter-spacing:1px;color:var(--muted-2);margin:14px 0 6px}

/* AI 生成 */
.ai-step{display:flex;gap:9px;align-items:flex-start;padding:10px 0;border-bottom:1px dashed #1d2734}
.ai-step:last-child{border-bottom:none}
.ai-num{width:21px;height:21px;border-radius:50%;background:#1c2634;color:#8fa3b8;display:grid;place-items:center;font-size:11px;flex:0 0 21px;margin-top:2px}
.ai-step.on .ai-num{background:rgba(94,234,212,.16);color:#5eead4;border:1px solid rgba(94,234,212,.4)}
.ai-step h4{margin:0 0 2px;font-size:13px}
.ai-step p{margin:0;font-size:11.5px;color:var(--muted-2)}
.ai-out{
  white-space:pre-wrap;word-break:break-word;background:#0c1117;border:1px solid var(--line);
  border-radius:10px;padding:16px 18px;min-height:260px;max-height:44vh;overflow-y:auto;
  font-size:14.5px;line-height:1.95;font-family:"Source Han Serif SC","Songti SC",Georgia,"Microsoft YaHei",serif;
}
.ai-out:empty::before{content:"生成结果会显示在这里…";color:#44536a}
.params-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:0 12px}

/* 扫描结果 */
.scan-summary{display:flex;gap:16px;align-items:center;margin-bottom:14px;flex-wrap:wrap}
.score-ring{
  width:86px;height:86px;border-radius:50%;display:grid;place-items:center;flex:0 0 86px;
  background:conic-gradient(var(--ring-color) calc(var(--pct) * 1%), #1b2532 0);
  position:relative;
}
.score-ring::before{content:"";position:absolute;inset:8px;border-radius:50%;background:#111822}
.score-ring span{position:relative;font-size:21px;font-weight:700;font-variant-numeric:tabular-nums}
.score-ring small{position:relative;font-size:10px;color:var(--muted-2);display:block;text-align:center;margin-top:-3px}
.issue{
  display:grid;grid-template-columns:92px 1fr;gap:10px;
  padding:10px 11px;border:1px solid var(--line-soft);border-radius:9px;margin-bottom:8px;background:#0e141c;
}
.issue .tag{font-size:11px;color:#fcd34d;background:rgba(251,191,36,.1);border-radius:6px;padding:2px 7px;height:fit-content;text-align:center}
.issue.lv-high .tag{color:#fca5a5;background:rgba(248,113,113,.12)}
.issue.lv-low .tag{color:#93c5fd;background:rgba(96,165,250,.12)}
.issue .txt{font-size:12.5px;line-height:1.65}
.issue .snippet{color:#cbd5e1;background:#131b25;border-left:2px solid #334155;padding:4px 8px;margin:5px 0;border-radius:0 6px 6px 0;font-size:12px;word-break:break-all}
.issue .advice{color:#7dd3fc;font-size:11.5px}
.issue .ops{display:flex;gap:6px;margin-top:6px;flex-wrap:wrap}

/* 模态框 */
#modal-root{position:relative;z-index:50}
.mask{
  position:fixed;inset:0;background:rgba(3,6,10,.72);backdrop-filter:blur(3px);
  display:flex;align-items:flex-start;justify-content:center;padding:5vh 16px;overflow-y:auto;z-index:60;
}
.modal{
  width:640px;max-width:100%;background:linear-gradient(180deg,#161d27,#111720);
  border:1px solid #2a3646;border-radius:14px;box-shadow:0 24px 60px rgba(0,0,0,.55);
  animation:pop .16s ease-out;
}
@keyframes pop{from{transform:translateY(8px);opacity:.6}to{transform:none;opacity:1}}
.modal-lg{width:860px}
.modal-xl{width:1040px}
.modal-head{display:flex;align-items:center;justify-content:space-between;padding:14px 18px;border-bottom:1px solid var(--line)}
.modal-head h3{margin:0;font-size:15px}
.modal-body{padding:16px 18px;max-height:70vh;overflow-y:auto}
.modal-foot{display:flex;justify-content:flex-end;gap:8px;padding:12px 18px;border-top:1px solid var(--line);background:#121821;border-radius:0 0 14px 14px}
.modal-foot .left{margin-right:auto}

/* Toast */
#toast-root{position:fixed;right:18px;bottom:18px;display:flex;flex-direction:column;gap:8px;z-index:100}
.toast{
  min-width:180px;max-width:360px;padding:10px 14px;border-radius:10px;font-size:12.5px;
  background:#1c2532;border:1px solid #31405a;color:#e2ebf5;box-shadow:0 10px 30px rgba(0,0,0,.4);
  animation:slide .2s ease-out;
}
@keyframes slide{from{transform:translateX(16px);opacity:0}to{transform:none;opacity:1}}
.toast.ok{border-color:rgba(52,211,153,.4);background:#12251f;color:#a7f3d0}
.toast.error{border-color:rgba(248,113,113,.45);background:#261416;color:#fecaca}
.toast.warn{border-color:rgba(251,191,36,.4);background:#241d10;color:#fde68a}

/* 灵感开局 */
.ko-wrap{max-width:1600px;display:flex;flex-direction:column;gap:14px}
.ko-layout{display:grid;grid-template-columns:minmax(0,1fr) 360px;gap:16px;align-items:start}
.ko-main{display:flex;flex-direction:column;gap:14px;min-width:0}
.ko-side{position:sticky;top:12px;min-width:0}
.ko-side .ko-chat.open{display:flex;flex-direction:column;height:calc(100vh - 150px);min-height:380px}
.ko-side .ko-chat.open .ko-chat-body{display:flex;flex-direction:column;flex:1;min-height:0}
.ko-side .ko-chat.open .ko-chat-log{flex:1;max-height:none;min-height:120px}
@media (max-width:1320px){
  .ko-layout{grid-template-columns:1fr}
  .ko-side{position:static}
  .ko-side .ko-chat.open{height:auto;min-height:0}
  .ko-side .ko-chat.open .ko-chat-body{display:block}
  .ko-side .ko-chat.open .ko-chat-log{max-height:300px}
}
.ko-idea textarea{
  min-height:150px;max-height:320px;overflow:auto;resize:vertical;line-height:1.85;
}
.ko-idea-foot{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:7px}
.ko-idea-foot .hint{font-size:11.5px}
.ko-chars{font-size:11px;color:var(--muted-2);white-space:nowrap}
.ko-divider{height:1px;background:var(--line-soft);margin:14px 0 0;opacity:.85}
.ko-samples{display:flex;flex-wrap:wrap;gap:6px;margin-top:9px}
.ko-samples .chip{cursor:pointer;opacity:.85}
.ko-samples .chip:hover{opacity:1}
/* 和 AI 聊想法 */
.ko-chat{border:1px solid var(--line-soft);border-radius:12px;background:var(--panel-a);overflow:hidden}
.ko-chat-head{display:flex;align-items:center;gap:9px;padding:12px 14px;cursor:pointer;user-select:none}
.ko-chat-head:hover{background:color-mix(in srgb,var(--accent) 4%,transparent)}
.ko-chat-ic{color:var(--accent);font-size:12px}
.ko-chat-head b{font-size:13px;color:var(--text);font-weight:600}
.ko-chat-sub{font-size:11.5px;color:var(--muted);flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ko-chat-count{font-size:11px;color:var(--muted-2)}
.ko-chat-arrow{color:var(--muted);font-size:11px;transition:transform .18s}
.ko-chat.open .ko-chat-arrow{transform:rotate(180deg)}
.ko-chat-body{display:none;padding:0 14px 14px}
.ko-chat.open .ko-chat-body{display:block}
.ko-chat-log{display:flex;flex-direction:column;gap:8px;max-height:300px;overflow:auto;padding:2px 0 8px}
.ko-msg{
  max-width:88%;padding:9px 11px;border-radius:10px;font-size:12.5px;line-height:1.75;
  white-space:pre-wrap;overflow-wrap:anywhere;border:1px solid transparent;
}
.ko-msg.user{
  align-self:flex-end;background:color-mix(in srgb,var(--accent) 14%,transparent);
  border-color:color-mix(in srgb,var(--accent) 26%,transparent);color:var(--text);
}
.ko-msg.ai{align-self:flex-start;background:var(--input-bg);border-color:var(--line-soft);color:var(--text)}
.ko-msg.err{
  align-self:flex-start;background:color-mix(in srgb,var(--danger) 12%,transparent);
  border-color:color-mix(in srgb,var(--danger) 38%,transparent);color:var(--danger);
}
.ko-msg.busy{color:var(--muted)}
.ko-msg.sys{
  align-self:stretch;max-width:100%;
  background:transparent;border:1px dashed var(--line-soft);
  color:var(--muted-2);font-size:11.5px;line-height:1.7;
}
.ko-chat-flag{
  font-size:10px;padding:1px 7px;border-radius:20px;white-space:nowrap;
  border:1px solid color-mix(in srgb,var(--accent) 35%,transparent);
  color:var(--accent);background:color-mix(in srgb,var(--accent) 10%,transparent);
}
/* 灵感开局 · 小墨给的多方案卡片 */
.ko-tpl-wrap{display:flex;flex-direction:column;align-items:flex-start;gap:2px}
.ko-tpl.collapsed{max-height:66px;overflow:hidden}
.ko-tpl-more{color:var(--muted-2);cursor:pointer;user-select:none}
.ko-tpl-more:hover{color:var(--accent)}
.ko-msg.ai.has-opts{align-self:stretch;max-width:100%}
.ko-opts{display:flex;flex-direction:column;gap:8px;margin-top:9px}
.ko-opt{
  border:1px solid var(--line-soft);border-radius:8px;background:var(--panel-2);
  padding:9px 10px;
}
.ko-opt.used{
  border-color:color-mix(in srgb,var(--accent) 45%,var(--line));
  background:color-mix(in srgb,var(--accent) 6%,var(--panel-2));
}
.ko-opt-head{display:flex;align-items:center;gap:7px;margin-bottom:4px}
.ko-opt-head b{font-size:12px;font-weight:600;color:var(--text)}
.ko-opt-flag{
  font-size:9.5px;line-height:1.6;padding:0 5px;border-radius:2px;color:var(--accent);
  border:1px solid color-mix(in srgb,var(--accent) 40%,transparent);
}
.ko-opt-why{font-size:11px;line-height:1.65;color:var(--muted);margin-bottom:5px}
.ko-opt-idea{
  font-size:11.5px;line-height:1.8;color:var(--text-soft);white-space:pre-wrap;
  display:-webkit-box;-webkit-line-clamp:5;-webkit-box-orient:vertical;overflow:hidden;
  padding:6px 8px;border-radius:5px;background:var(--input-bg);
  font-family:"Songti SC","Source Han Serif SC",Georgia,serif;
}
.ko-opt-act{display:flex;gap:6px;margin-top:7px}
.ko-opt-act .btn{height:24px;font-size:11px;padding:0 9px}

/* ---- 题材标签（照番茄的阅读标签：主题 / 角色 / 情节） ---- */
.ko-tagrow{display:flex;align-items:center;gap:9px;flex-wrap:wrap;margin-top:10px}
.ko-taglist{display:flex;flex-wrap:wrap;gap:5px;align-items:center}
.ko-tag{
  font-size:11px;line-height:1.7;padding:1px 8px;border-radius:3px;
  background:color-mix(in srgb,var(--accent) 12%,transparent);
  border:1px solid color-mix(in srgb,var(--accent) 30%,transparent);
  color:var(--text-soft);
}
.bk-tagrow{display:flex;align-items:center;gap:9px;flex-wrap:wrap;min-height:26px}

.gt-wrap{display:flex;flex-direction:column}
.gt-tip{font-size:11.5px;line-height:1.7;color:var(--muted);margin-bottom:9px}
.gt-tip b{color:var(--text);font-weight:600}
.gt-search{
  width:100%;height:32px;margin-bottom:10px;padding:0 10px;border-radius:6px;outline:none;
  border:1px solid var(--line);background:var(--input-bg);color:var(--text);font-size:12px;
}
.gt-search:focus{border-color:var(--line-strong)}
.gt-groups{max-height:min(56vh,460px);overflow:auto;padding-right:3px}
.gt-group{margin-bottom:14px}
.gt-head{display:flex;align-items:baseline;gap:8px;margin-bottom:7px}
.gt-head b{font-size:12px;font-weight:600;color:var(--text)}
.gt-head span{font-size:10.5px;color:var(--muted-2)}
.gt-chips{display:flex;flex-wrap:wrap;gap:6px}
.gt-chip{
  font-size:11.5px;line-height:1.7;padding:3px 11px;border-radius:4px;cursor:pointer;
  background:var(--input-bg);border:1px solid transparent;color:var(--text-soft);
}
.gt-chip:hover{border-color:var(--line-strong);color:var(--text)}
.gt-chip.on{
  background:color-mix(in srgb,var(--accent) 22%,transparent);
  border-color:color-mix(in srgb,var(--accent) 62%,transparent);
  color:var(--text);font-weight:600;
}
.gt-count{flex:1;align-self:center;font-size:11px;color:var(--muted)}

.ko-msg-actions{display:flex;flex-wrap:wrap;gap:6px;margin-top:7px}
.ko-chat-chips{display:flex;flex-wrap:wrap;gap:6px;margin:4px 0 8px}
.ko-chat-chips .chip{cursor:pointer;font-size:11px;opacity:.8}
.ko-chat-chips .chip:hover{opacity:1}
.ko-chat-input{display:flex;gap:8px;align-items:flex-end}
.ko-chat-input textarea{
  flex:1;min-width:0;min-height:34px;max-height:96px;resize:none;overflow:auto;
  line-height:1.6;padding:7px 10px;
}
.ko-chat-input .btn{flex:0 0 auto}
.ko-params{display:grid;grid-template-columns:104px 82px 112px 96px 104px;gap:14px 10px;margin-top:14px}
.ko-params .field{margin-bottom:0}
.ko-plan{margin-top:10px;font-size:11.5px;color:var(--muted)}
.ko-plan b{color:var(--text);font-weight:600}
.ko-num{
  display:inline-grid;place-items:center;width:20px;height:20px;border-radius:50%;
  background:rgba(94,234,212,.14);color:#5eead4;font-size:11px;margin-right:7px;
  vertical-align:1px;font-weight:700;
}
.ko-num.ghost{background:transparent;color:var(--muted-2);font-weight:400}
.ko-novel.done{border-color:rgba(52,211,153,.25)}
.ko-novel.loading{border-color:rgba(251,191,36,.35)}
.ko-novel.error{border-color:rgba(248,113,113,.4)}
.ko-step .panel-head h3{display:flex;align-items:center}
.ko-step.loading{border-color:rgba(251,191,36,.35)}
.ko-step.done{border-color:rgba(52,211,153,.25)}
.ko-step.error{border-color:rgba(248,113,113,.4)}
.ko-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:10px}
.ko-block{background:#0e141c;border:1px solid var(--line-soft);border-radius:9px;padding:9px 10px;min-width:0}
.ko-label{font-size:11px;letter-spacing:.5px;color:var(--muted-2);margin-bottom:6px}
.ko-block-hint{font-size:11px;color:var(--muted-2);opacity:.75;margin:-3px 0 7px}
.ko-row{
  display:block;font-size:12px;line-height:1.8;
  padding:4px 0;border-bottom:1px dashed #1b2431;min-width:0;
}
.ko-row:last-child{border-bottom:none}
.ko-row b{
  display:inline;color:#dbe7f3;font-weight:600;
  overflow-wrap:anywhere;
}
.ko-row b::after{content:"：";font-weight:400;color:var(--muted-2)}
.ko-row span{
  display:inline;color:#8fa0b5;
  white-space:normal;overflow-wrap:anywhere;
}
.ko-row em{display:inline-block;font-style:normal;margin-left:6px;vertical-align:1px}
.ko-chips{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:8px}
.ko-syn{
  background:var(--input-bg);border:1px solid var(--line-soft);
  border-left:2px solid color-mix(in srgb,var(--accent) 55%,transparent);
  border-radius:10px;padding:12px 14px;margin-bottom:12px;
}
.ko-syn b{display:block;font-size:13px;font-weight:600;color:var(--text);margin-bottom:7px}
.ko-syn p{margin:0;font-size:12.5px;line-height:1.9;color:var(--text)}
.ko-syn-meta{
  display:flex;flex-direction:column;gap:5px;margin-top:10px;padding-top:9px;
  border-top:1px dashed var(--line-soft);font-size:12px;color:var(--muted);
}
.ko-syn-meta em{font-style:normal;color:var(--muted-2);margin-right:7px;letter-spacing:.5px}
.ko-gf{
  margin-top:10px;padding-top:9px;border-top:1px dashed var(--line-soft);
  font-size:12.5px;line-height:1.7;display:flex;gap:8px;align-items:baseline;flex-wrap:wrap;
}
.ko-gf em{
  font-style:normal;font-size:10.5px;letter-spacing:.5px;color:var(--accent);
  border:1px solid color-mix(in srgb,var(--accent) 35%,transparent);
  background:color-mix(in srgb,var(--accent) 10%,transparent);
  padding:1px 7px;border-radius:20px;white-space:nowrap;
}
.ko-gf b{font-weight:600;color:var(--text)}
.ko-gf span{color:var(--muted)}
.ko-list{display:flex;flex-direction:column}
.ko-otable{max-height:460px;overflow:auto;border:1px solid var(--line-soft);border-radius:9px}
.ko-orow{
  display:grid;grid-template-columns:36px 120px minmax(0,1fr) minmax(0,1fr);gap:8px;
  padding:8px 10px;border-bottom:1px solid #171f2a;font-size:12px;align-items:start;
}
.ko-orow.head{position:sticky;top:0;background:#131a24;color:var(--muted);font-size:11px;z-index:1}
.ko-orow .no{color:#7c8cff;text-align:center;padding-top:1px}
.ko-orow .t{font-weight:600;white-space:normal;overflow-wrap:anywhere}
.ko-orow .s,.ko-orow .c{color:#8fa0b5;white-space:normal;overflow-wrap:anywhere}
.ko-apply{border-color:rgba(94,234,212,.25)}
@media (max-width:860px){
  .ko-params{grid-template-columns:1fr}
  .ko-orow{grid-template-columns:32px minmax(0,1fr)}
  .ko-orow .s,.ko-orow .c{grid-column:2;padding-top:2px}
  .ko-orow.head .s,.ko-orow.head .c{display:none}
}

/* 我的书库 */
.lib-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(176px,1fr));gap:12px}
.lib-card{
  background:linear-gradient(160deg,#161e28,#111721);border:1px solid var(--line);
  border-radius:14px;overflow:hidden;display:flex;flex-direction:column;
  box-shadow:0 6px 18px rgba(0,0,0,.18);
  transition:transform .18s, border-color .18s, box-shadow .18s;
}
.lib-card:hover{
  transform:translateY(-4px);border-color:rgba(94,234,212,.45);
  box-shadow:0 18px 40px rgba(0,0,0,.34);
}
.lib-cover{
  position:relative;aspect-ratio:3/4;background:#0c1117;cursor:pointer;overflow:hidden;
  border-bottom:1px solid var(--line-soft);
}
.lib-cover img{
  width:100%;height:100%;object-fit:cover;display:block;
  transition:transform .4s ease;
}
.lib-card:hover .lib-cover img{transform:scale(1.045)}
.lib-cover::after{
  content:'';position:absolute;inset:0;pointer-events:none;
  background:linear-gradient(180deg,rgba(0,0,0,.16),transparent 30%,transparent 66%,rgba(0,0,0,.42));
}
.lib-ph{
  width:100%;height:100%;display:flex;align-items:center;justify-content:center;
  background:
    radial-gradient(120% 90% at 70% 10%, color-mix(in srgb,var(--accent) 14%,transparent) 0%, transparent 62%),
    var(--panel-2);
}
.lib-ph-frame{
  width:calc(100% - 28px);height:calc(100% - 28px);
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;
  border:1px solid color-mix(in srgb,var(--accent) 18%,var(--line));border-radius:4px;
  padding:12px;
}
.lib-ph-frame small{
  font-size:9.5px;letter-spacing:2.4px;color:color-mix(in srgb,var(--accent) 48%,var(--muted));
}
.lib-ph-frame span{
  font-size:42px;line-height:1;font-weight:700;color:var(--accent);opacity:.85;
  font-family:"Songti SC","Source Han Serif SC",serif;
  text-shadow:0 6px 24px rgba(0,0,0,.45);
}
.lib-ph-frame em{
  font-style:normal;font-size:11px;line-height:1.45;color:var(--muted);
  text-align:center;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
.lib-active{
  position:absolute;top:8px;left:8px;z-index:2;
  font-size:9.5px;font-weight:700;letter-spacing:.4px;
  background:color-mix(in srgb,var(--accent) 92%,transparent);color:var(--accent-ink);
  padding:2px 7px;border-radius:20px;
  box-shadow:0 4px 12px rgba(0,0,0,.3);
}
.lib-cover-tip{
  position:absolute;left:0;right:0;bottom:0;z-index:2;padding:20px 0 8px;text-align:center;
  font-size:10.5px;letter-spacing:.5px;color:#e8eef5;
  background:linear-gradient(transparent,rgba(0,0,0,.72));
  opacity:0;transition:opacity .18s;
}
.lib-cover:hover .lib-cover-tip{opacity:1}
.lib-body{padding:10px 12px 11px;display:flex;flex-direction:column;gap:5px;flex:1}
.lib-title{
  font-size:13.5px;font-weight:600;line-height:1.35;cursor:pointer;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
.lib-title:hover{color:var(--accent)}
.lib-sub{display:flex;align-items:center;gap:6px;flex-wrap:nowrap;min-height:16px;overflow:hidden}
.lib-genre{
  font-size:9.5px;padding:1px 7px;border-radius:20px;flex:0 0 auto;
  border:1px solid var(--line-soft);color:var(--muted);background:var(--input-bg);
}
.lib-pen{font-size:10px;color:var(--muted-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.lib-meta{display:flex;align-items:center;gap:8px;flex-wrap:nowrap;font-size:10.5px;color:var(--muted-2);overflow:hidden}
.lib-meta b{color:var(--text-soft);font-weight:600}
.lib-gf{
  font-size:11px;color:var(--accent);opacity:.9;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.lib-progress-row{display:flex;align-items:center;gap:7px;margin:1px 0}
.lib-progress{
  flex:1;height:3px;border-radius:2px;background:var(--line-soft);overflow:hidden;
}
.lib-progress i{display:block;height:100%;border-radius:2px;background:linear-gradient(90deg,var(--accent),var(--accent-2,var(--accent)))}
.lib-pct{font-size:9.5px;color:var(--muted-2);font-variant-numeric:tabular-nums;min-width:24px;text-align:right}
.lib-desc{
  font-size:11.5px;color:#9fb0c4;line-height:1.65;cursor:pointer;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;
}
.lib-actions{display:flex;gap:6px;margin-top:auto;padding-top:8px}
.lib-actions .btn{flex:1;height:27px;font-size:11.5px;padding:0 6px}

/* 平铺 / 列表切换 */
.lib-mode{
  display:inline-flex;gap:2px;padding:2px;flex:0 0 auto;
  border:1px solid var(--line);border-radius:9px;background:var(--input-bg);
}
.lib-mode button{
  width:28px;height:26px;display:grid;place-items:center;
  border:0;border-radius:7px;background:transparent;color:var(--muted-2);
  cursor:pointer;padding:0;transition:background .15s,color .15s;
}
.lib-mode button svg{width:14px;height:14px;display:block}
.lib-mode button:hover{color:var(--text);background:var(--hover-bg)}
.lib-mode button.on{
  color:color-mix(in srgb,var(--accent) 88%,var(--text));
  background:color-mix(in srgb,var(--accent) 16%,transparent);
}
.lib-mode button:focus-visible{outline:none;box-shadow:0 0 0 2px color-mix(in srgb,var(--accent) 24%,transparent)}

/* 列表视图 */
.lib-list{display:flex;flex-direction:column;gap:6px}
.lib-list .lib-card{flex-direction:row;align-items:stretch;border-radius:10px;min-height:60px;position:relative}
.lib-list .lib-card:hover{transform:translateY(-1px)}
.lib-list .lib-card.is-active{
  border-color:color-mix(in srgb,var(--accent) 34%,var(--line));
  box-shadow:inset 2px 0 0 var(--accent), 0 6px 18px rgba(0,0,0,.2);
}
.lib-list .lib-cover{
  width:44px;flex:0 0 44px;aspect-ratio:auto;
  border-bottom:0;border-right:1px solid var(--line-soft);
  border-radius:9px 0 0 9px;
}
.lib-list .lib-cover::after{background:linear-gradient(90deg,transparent,rgba(0,0,0,.14))}
.lib-list .lib-ph-frame{width:100%;height:100%;border:0;border-radius:0;padding:0;gap:0}
.lib-list .lib-ph-frame small,.lib-list .lib-ph-frame em{display:none}
.lib-list .lib-ph-frame span{font-size:16px}
.lib-list .lib-active{
  top:3px;left:3px;font-size:0;letter-spacing:0;
  width:6px;height:6px;padding:0;border-radius:50%;
  background:var(--accent);box-shadow:0 0 0 2px color-mix(in srgb,var(--accent) 22%,transparent);
}
.lib-list .lib-cover-tip{display:none}

.lib-list .lib-body{
  display:grid;align-items:center;flex:1;min-width:0;
  grid-template-columns:minmax(150px,240px) minmax(110px,1fr) auto auto;
  grid-template-areas:
    "title  prog meta actions"
    "sub    prog meta actions";
  column-gap:20px;row-gap:5px;padding:8px 12px;
}
.lib-list .lib-title{grid-area:title;font-size:13.5px;max-width:none;min-width:0}
.lib-list .lib-sub{grid-area:sub;min-height:0;gap:6px}
.lib-list .lib-genre{
  border:0;background:transparent;padding:0;font-size:10.5px;color:var(--muted);
}
.lib-list .lib-pen{font-size:10.5px;color:var(--muted-2)}
.lib-list .lib-pen::before{content:'\00B7';margin-right:5px;color:var(--muted-2)}
.lib-list .lib-meta{
  grid-area:meta;justify-self:end;gap:0;font-size:10.5px;
  font-variant-numeric:tabular-nums;white-space:nowrap;
}
.lib-list .lib-meta > span + span::before{
  content:'\00B7';margin:0 7px;color:color-mix(in srgb,var(--muted-2) 60%,transparent);
}
.lib-list .lib-meta b{font-weight:600;color:var(--text-soft)}
.lib-list .lib-progress-row{grid-area:prog;margin:0;gap:9px;width:100%;max-width:none}
.lib-list .lib-progress{height:5px;background:var(--line)}
.lib-list .lib-desc{display:none}
.lib-list .lib-actions{grid-area:actions;margin:0;padding:0;gap:6px;align-self:center}
.lib-list .lib-actions .btn{height:26px;min-width:56px;padding:0 11px;font-size:11.5px}

@media (max-width:860px){
  .lib-list .lib-card{min-height:56px}
  .lib-list .lib-cover{width:40px;flex-basis:40px}
  .lib-list .lib-body{
    grid-template-columns:minmax(0,1fr) auto;
    grid-template-areas:
      "title   actions"
      "sub     prog"
      "meta    prog";
    column-gap:12px;row-gap:4px;padding:7px 10px;
  }
  .lib-list .lib-meta{justify-self:start}
  .lib-list .lib-progress-row{width:96px;align-self:center}
}

/* 书籍信息弹窗：封面区 */
.cover-edit{display:flex;gap:16px;align-items:flex-start}
.cover-edit-preview{
  position:relative;width:152px;flex:0 0 auto;aspect-ratio:8/11;
  display:grid;place-items:center;overflow:hidden;
  border:1px dashed var(--line);border-radius:10px;background:var(--editor-bg);
}
.cover-edit-preview.has{border-style:solid;border-color:var(--line-soft);cursor:zoom-in}
.cover-edit-preview img{width:100%;height:100%;object-fit:cover;display:block}
.cover-edit-preview img[src=""],.cover-edit-preview img:not([src]){display:none}
.cover-edit-preview.has .cover-edit-empty{display:none}
.cover-edit-empty{font-size:11.5px;color:var(--muted-2);letter-spacing:.5px}
.cover-edit-side{flex:1;min-width:0;display:flex;flex-direction:column;gap:9px;padding-top:2px}
.cover-edit-actions{display:flex;flex-wrap:wrap;gap:8px}
.cover-edit-side .hint{font-size:11.5px;line-height:1.75;max-width:440px}

/* 封面工坊 */
.cv-wrap{display:grid;grid-template-columns:250px minmax(0,1fr);gap:18px;align-items:start}
.cv-preview img{width:100%;display:block;border-radius:10px;border:1px solid var(--line);box-shadow:0 10px 26px rgba(0,0,0,.4)}
.cv-side{min-width:0}
.cv-line{display:flex;gap:8px;font-size:12px;padding:5px 0;border-bottom:1px dashed #1d2734}
.cv-line b{color:#8b9aad;font-weight:600;flex:0 0 42px}
.cv-line span{color:#dbe7f3;flex:1;min-width:0;overflow-wrap:anywhere}
.cv-swatches{display:flex;gap:6px}
.cv-swatches i{width:16px;height:16px;border-radius:4px;display:block;border:1px solid rgba(255,255,255,.16)}
@media (max-width:860px){
  .cv-wrap{grid-template-columns:1fr}
  .cv-preview{max-width:220px}
}

/* 人物关系图 */
.rel-graph{width:100%;height:440px;background:#0c1117;border:1px solid var(--line);border-radius:10px}
.rel-node text{fill:#dbe7f3;font-size:11px;pointer-events:none}
.rel-edge line{stroke:#334155;stroke-width:1.2}
.rel-edge text{fill:#7f90a5;font-size:10px}

/* 卡片网格 */
.card-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:12px}
.mini-card{
  background:linear-gradient(160deg,#18212c,#131a24);border:1px solid var(--line);
  border-radius:10px;padding:12px 13px;cursor:pointer;transition:.15s;
}
.mini-card:hover{border-color:rgba(94,234,212,.4);transform:translateY(-1px)}
.mini-card h4{margin:0 0 3px;font-size:13.5px}
.mini-card .sub{font-size:11.5px;color:var(--muted)}
.mini-card .desc{font-size:11.5px;color:var(--muted-2);margin-top:7px;line-height:1.6;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
.avatar{
  width:34px;height:34px;border-radius:9px;display:grid;place-items:center;font-size:13px;font-weight:700;
  background:linear-gradient(135deg,#334155,#1e293b);color:#cbd5e1;flex:0 0 34px;
}
.mini-card.dead{opacity:.55}

/* Tabs */
.tabs{display:flex;gap:4px;border-bottom:1px solid var(--line);margin-bottom:14px;flex-wrap:wrap}
.tab{
  padding:8px 13px;font-size:13px;color:var(--muted);cursor:pointer;border:1px solid transparent;
  border-bottom:none;border-radius:8px 8px 0 0;
}
.tab:hover{color:#e2ebf5}
.tab.active{color:#5eead4;border-color:var(--line);background:#141b25;margin-bottom:-1px}
.tab .count{font-size:10.5px;color:var(--muted-2);margin-left:4px}

/* 空状态 */
.empty{
  text-align:center;padding:52px 20px;color:var(--muted-2);border:1px dashed #253243;
  border-radius:12px;background:rgba(255,255,255,.008);
}
.empty h3{color:#b9c7d8;margin:0 0 6px;font-size:15px}
.empty p{margin:0 0 14px;font-size:12.5px}

/* 滚动区域 */
.scroll{max-height:420px;overflow-y:auto;padding-right:4px}
.divider{height:1px;background:var(--line-soft);margin:12px 0}
.pill-row{display:flex;gap:6px;flex-wrap:wrap}
.warn-box{
  background:rgba(251,191,36,.08);border:1px solid rgba(251,191,36,.28);
  color:#fde68a;padding:9px 12px;border-radius:9px;font-size:12px;margin-bottom:10px;
}
.info-box{
  background:rgba(56,189,248,.07);border:1px solid rgba(56,189,248,.24);
  color:#bae6fd;padding:9px 12px;border-radius:9px;font-size:12px;margin-bottom:10px;
}
.danger-box{
  background:rgba(248,113,113,.07);border:1px solid rgba(248,113,113,.26);
  color:#fecaca;padding:9px 12px;border-radius:9px;font-size:12px;margin-bottom:10px;
}
.link{color:#5eead4;cursor:pointer;text-decoration:underline dotted}
.link:hover{color:#99f6e4}

@media (max-width:1180px){
  .cockpit-grid{grid-template-columns:1fr}
  .stat-grid{grid-template-columns:repeat(2,1fr)}
  .studio{grid-template-columns:1fr}
  .studio-left{max-height:none}
  .studio-right{height:70vh}
  .params-grid{grid-template-columns:1fr 1fr}
}

/* 窄屏：侧栏收成图标栏，保留全部导航能力 */
@media (max-width:980px){
  .sidebar{width:64px;flex:0 0 64px}
  .brand{justify-content:center;padding:14px 0 10px}
  .brand-text{display:none}
  .book-switch{display:none}
  .book-pick{display:none}
  .book-actions{flex-direction:column;gap:6px}
  .btn-txt{display:none}
  .btn-ico{font-size:14px}
  .nav{padding:6px}
  .nav-group{display:none}
  .nav-item{justify-content:center;padding:10px 0;position:relative}
  .nav-label{display:none}
  .nav-item .ico{font-size:16px;width:auto}
  .nav-item .count{position:absolute;top:2px;right:6px;font-size:9px;padding:0 4px;min-width:0}
  .sidebar-foot{padding:8px 6px}
  .save-state{display:none}
  #btnQuickBackup{font-size:0;padding:8px 0}
  #btnQuickBackup::before{content:"⇩";font-size:14px}
  .topbar{padding:14px 16px 12px}
  .view{padding:14px 16px 30px}
  .studio-right{height:auto;min-height:60vh}
  #content{min-height:52vh}
}

@media (max-width:860px){
  .kanban{grid-template-columns:1fr 1fr}
  .form-grid{grid-template-columns:1fr}
  .params-grid{grid-template-columns:1fr}
  .stat-grid{grid-template-columns:1fr 1fr}
  .topbar{flex-direction:column;align-items:flex-start}
}

/* ============================================================
   主题系统（深色 / 浅色两套）
   ------------------------------------------------------------
   切换 html[data-theme] 即可；所有表面统一由 CSS 变量驱动。
   这里放在文件末尾，用相同选择器覆盖前面的固定色值。
   ============================================================ */
:root{
  --glow-1:#16232f; --glow-2:#1a1a30;
  --sidebar-a:#0e1319; --sidebar-b:#0a0e14;
  --panel-a:#141a23; --panel-b:#121821;
  --card-a:#161e28; --card-b:#111721;
  --ink-panel:#10161e;
  --line-strong:#2a3646;
  --input-bg:#0e141c; --editor-bg:#0c1117; --editor-locked:#0a0e13;
  --hover-bg:#141c26; --row-hover:rgba(255,255,255,.015);
  --topbar:rgba(10,13,18,.55);
  --toast-bg:#1c2532; --mask:rgba(3,6,10,.72);
  --scroll-1:#2a3646; --scroll-2:#37475c;
  --heat-1:#1c4a45; --heat-2:#2a7d72; --heat-3:#3fbfae; --heat-4:#7df0dd;
  --text-soft:#b9c6d6;
}




/* 石墨：中性灰 + 琥珀 */


/* ---------------- 由变量驱动的表面 ---------------- */
body{
  background:
    radial-gradient(1100px 560px at 8% -12%, var(--glow-1) 0%, transparent 60%),
    radial-gradient(900px 500px at 100% 0%, var(--glow-2) 0%, transparent 55%),
    var(--bg);
  color:var(--text);
}
.sidebar{background:linear-gradient(180deg,var(--sidebar-a),var(--sidebar-b));border-right-color:var(--line)}
.sidebar-foot{border-top-color:var(--line-soft)}
.brand-logo{
  background:linear-gradient(135deg,var(--accent),var(--accent-2));
  color:var(--accent-ink);
  box-shadow:0 6px 18px color-mix(in srgb,var(--accent) 25%,transparent);
}
.book-pick,.book-actions .btn{color:var(--text)}
.book-actions .btn{background:var(--input-bg);border-color:var(--line)}
.nav-item{color:var(--text-soft)}
.nav-item:hover{background:var(--hover-bg);color:var(--text)}
.nav-item.active{
  background:linear-gradient(90deg,color-mix(in srgb,var(--accent) 14%,transparent),color-mix(in srgb,var(--accent-2) 9%,transparent));
  border-color:color-mix(in srgb,var(--accent) 30%,transparent);
  color:var(--text);
}
.nav-item .count{background:var(--panel-3);color:var(--muted)}
.topbar{background:var(--topbar);border-bottom-color:var(--line-soft)}
.panel{
  background:linear-gradient(180deg,var(--panel-a),var(--panel-b));
  border-color:var(--line);
  box-shadow:var(--shadow);
}
.btn{background:var(--panel-2);border-color:var(--line);color:var(--text-soft)}
.btn:hover{background:var(--panel-3);border-color:var(--line-strong);color:var(--text)}
.btn-primary{
  background:linear-gradient(135deg,var(--accent),var(--accent-2));
  color:var(--accent-ink);border-color:transparent;
  box-shadow:0 6px 18px color-mix(in srgb,var(--accent) 22%,transparent);
}
.btn-primary:hover{filter:brightness(1.08)}
.btn-accent{background:linear-gradient(135deg,var(--accent-2),var(--accent));color:var(--accent-ink)}
.icon-btn:hover{background:var(--panel-3);color:var(--text)}
.badge{background:var(--panel-2);color:var(--text-soft)}
.chip{background:var(--panel-2);border-color:var(--line);color:var(--text-soft)}
input[type=text],input[type=password],input[type=number],input[type=date],input[type=url],select,textarea{
  background:var(--input-bg);border-color:var(--line);color:var(--text);
}
input:focus,select:focus,textarea:focus{border-color:color-mix(in srgb,var(--accent) 55%,transparent)}
.stat-card{background:linear-gradient(160deg,var(--panel-2),var(--panel-b));border-color:var(--line)}
.stat-card::after{background:radial-gradient(circle,color-mix(in srgb,var(--accent) 16%,transparent),transparent 65%)}
.kcol{background:var(--ink-panel);border-color:var(--line-soft)}
.kcard{background:linear-gradient(160deg,var(--card-a),var(--card-b));border-color:var(--line-soft)}
.kcard:hover{border-color:color-mix(in srgb,var(--accent) 45%,transparent)}
.kempty{border-color:var(--line)}
.heat i{background:var(--panel-b)}
.heat i.l1{background:var(--heat-1)}
.heat i.l2{background:var(--heat-2)}
.heat i.l3{background:var(--heat-3)}
.heat i.l4{background:var(--heat-4)}
.heat-legend i{background:var(--panel-b)}
.heat-legend i.l1{background:var(--heat-1)}
.heat-legend i.l2{background:var(--heat-2)}
.heat-legend i.l3{background:var(--heat-3)}
.heat-legend i.l4{background:var(--heat-4)}
.bar{background:var(--panel-3)}
.table th{border-bottom-color:var(--line);color:var(--muted)}
.table td{border-bottom-color:var(--line-soft)}
.table tr:hover td{background:var(--row-hover)}
#content{background:var(--editor-bg);border-color:var(--line)}
#content:read-only{background:var(--editor-locked);color:var(--text-soft)}
.studio-toolbar{border-bottom-color:var(--line-soft)}
.constraint-box{background:var(--input-bg);border-color:var(--line-soft);color:var(--text-soft)}
.ai-out{background:var(--editor-bg);border-color:var(--line)}
.issue{background:var(--input-bg);border-color:var(--line-soft)}
.issue .snippet{background:var(--panel-2);border-left-color:var(--line-strong);color:var(--text-soft)}
.mask{background:var(--mask)}
.modal{background:linear-gradient(180deg,var(--panel-2),var(--panel-b));border-color:var(--line-strong)}
.modal-head{border-bottom-color:var(--line)}
.modal-foot{background:var(--panel-b);border-top-color:var(--line)}
.toast{background:var(--toast-bg);border-color:var(--line-strong);color:var(--text)}
.mini-card{background:linear-gradient(160deg,var(--card-a),var(--card-b));border-color:var(--line)}
.mini-card:hover{border-color:color-mix(in srgb,var(--accent) 42%,transparent)}
.avatar{background:linear-gradient(135deg,var(--panel-3),var(--panel-2));color:var(--text-soft)}
.tab.active{background:var(--panel-a);border-color:var(--line);color:var(--accent)}
.empty{border-color:var(--line);background:var(--row-hover)}
.rel-graph{background:var(--editor-bg);border-color:var(--line)}
.ko-block{background:var(--input-bg);border-color:var(--line-soft)}
.ko-otable{border-color:var(--line-soft)}
.ko-orow{border-bottom-color:var(--line-soft)}
.ko-orow.head{background:var(--panel-a);color:var(--muted)}
.ko-num{background:color-mix(in srgb,var(--accent) 14%,transparent);color:var(--accent)}
.lib-card{background:linear-gradient(160deg,var(--card-a),var(--card-b));border-color:var(--line)}
.lib-cover{background:var(--editor-bg)}
.lib-ph{background:radial-gradient(120% 90% at 70% 10%,var(--panel-3) 0%,var(--panel-b) 62%)}
.lib-ph span{color:var(--accent)}
.lib-active{background:color-mix(in srgb,var(--accent) 92%,#000);color:var(--accent-ink)}
.lib-desc{color:var(--text-soft)}
.cv-preview img{border-color:var(--line)}
.cv-line{border-bottom-color:var(--line-soft)}
.score-ring{background:conic-gradient(var(--ring-color) calc(var(--pct) * 1%),var(--panel-3) 0)}
.score-ring::before{background:var(--panel-b)}
.link{color:var(--accent)}
.link:hover{color:color-mix(in srgb,var(--accent) 70%,#fff)}
.nav-item.active .ico{color:var(--accent)}
.brand-text strong{color:var(--text)}
::-webkit-scrollbar-thumb{background:var(--scroll-1)}
::-webkit-scrollbar-thumb:hover{background:var(--scroll-2)}
.topbar-actions .btn{background:var(--input-bg)}
.ai-step.on .ai-num{background:color-mix(in srgb,var(--accent) 16%,transparent);color:var(--accent);border-color:color-mix(in srgb,var(--accent) 40%,transparent)}
.kcol-body.dragover{background:color-mix(in srgb,var(--accent) 6%,transparent);outline-color:color-mix(in srgb,var(--accent) 42%,transparent)}
.lib-card:hover{border-color:color-mix(in srgb,var(--accent) 40%,transparent)}
.empty h3{color:var(--text-soft)}
.issue .advice{color:color-mix(in srgb,var(--accent) 62%,#fff)}
.heat-legend{color:var(--muted-2)}

/* 主题选择菜单 */
.theme-menu{
  position:fixed;z-index:90;width:300px;display:none;padding:10px;
  max-height:calc(100vh - 24px);overflow-y:auto;
  background:linear-gradient(180deg,var(--panel-2),var(--panel-b));
  border:1px solid var(--line-strong);border-radius:13px;
  box-shadow:0 22px 55px rgba(0,0,0,.55);
}
.theme-menu.open{display:block;animation:pop .16s ease-out}
.tm-head{display:flex;justify-content:space-between;align-items:baseline;padding:4px 6px 9px;color:var(--text);font-size:13px}
.tm-head .tiny{color:var(--muted-2)}
.tm-list{display:flex;flex-direction:column;gap:2px}
.tm-item{
  display:flex;align-items:center;gap:10px;width:100%;padding:8px 8px;border-radius:9px;
  background:transparent;border:1px solid transparent;cursor:pointer;text-align:left;font-family:inherit;
}
.tm-item:hover{background:var(--hover-bg)}
.tm-item.active{border-color:color-mix(in srgb,var(--accent) 42%,transparent);background:color-mix(in srgb,var(--accent) 10%,transparent)}
.tm-swatch{display:flex;gap:3px;flex:0 0 auto}
.tm-swatch i{display:block;width:12px;height:24px;border-radius:3px;border:1px solid rgba(255,255,255,.08)}
.tm-text{display:flex;flex-direction:column;line-height:1.35;min-width:0}
.tm-name{font-size:12.5px;font-weight:600;color:var(--text)}
.tm-desc{font-size:10.5px;color:var(--muted-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tm-check{margin-left:auto;color:var(--accent);font-size:13px;opacity:0}
.tm-item.active .tm-check{opacity:1}
.tm-foot{display:flex;align-items:center;justify-content:space-between;padding:9px 6px 2px;border-top:1px solid var(--line-soft);margin-top:7px}
.tm-foot .tiny{color:var(--muted-2)}

/* ============================================================
   最终主题：只有「黑」「白」两套
   ============================================================ */
:root{
  --bg:#08090a; --bg-2:#0d0f11;
  --glow-1:#14181c; --glow-2:#101216;
  --sidebar-a:#0b0d0f; --sidebar-b:#070809;
  --panel:#131619; --panel-a:#131619; --panel-b:#0f1214;
  --panel-2:#191d21; --panel-3:#23282d;
  --card-a:#161a1e; --card-b:#101315; --ink-panel:#0e1113;
  --line:#262b31; --line-soft:#1a1f23; --line-strong:#343b43;
  --text:#f2f4f6; --text-soft:#c3c9cf; --muted:#8d959d; --muted-2:#646d76;
  --accent:#e8ebee; --accent-2:#9aa4ae; --accent-ink:#0a0b0c;
  --ok:#34d399; --warn:#fbbf24; --danger:#f87171; --purple:#c084fc;
  --input-bg:#0e1113; --editor-bg:#0b0d0f; --editor-locked:#080a0b;
  --hover-bg:#151a1e; --row-hover:rgba(255,255,255,.02);
  --topbar:rgba(8,9,10,.62); --toast-bg:#1b2025; --mask:rgba(4,5,6,.75);
  --scroll-1:#2b3239; --scroll-2:#3b444d;
  --heat-1:#2a2f34; --heat-2:#4b535b; --heat-3:#7d8892; --heat-4:#d7dde3;
  --shadow:0 12px 32px rgba(0,0,0,.45);
}


/* 两套主题共用的文字色修正（基础样式里有固定浅色） */
#content{color:var(--text)}
.constraint-box b{color:var(--text)}
.ko-row b{color:var(--text)}
.ko-row span{color:var(--muted)}
.cv-line span{color:var(--text)}
.table .t-title{color:var(--text)}
.score-ring small{color:var(--muted-2)}
.rel-node text{fill:var(--text-soft)}
.rel-node circle{fill:var(--card-a)}
.rel-edge line{stroke:var(--line-strong)}
.rel-edge text{fill:var(--muted-2)}
.rel-graph marker path{fill:var(--line-strong)}
textarea::placeholder,input::placeholder{color:var(--muted-2)}
input:focus,select:focus,textarea:focus{
  box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 10%,transparent);
}

/* 白色主题下的语义色调整（保证对比度） */
html[data-theme="light"] .badge{background:var(--panel-2);color:var(--text-soft)}
html[data-theme="light"] .badge.queue{background:#eef0f2;color:#4b5563}
html[data-theme="light"] .badge.planning{background:#e8f1fb;color:#1d6fb8}
html[data-theme="light"] .badge.draft{background:#f3ecfd;color:#7c3aed}
html[data-theme="light"] .badge.delivered{background:#e9f7ef;color:#197a4b}
html[data-theme="light"] .badge.warn{background:#fdf3d8;color:#8a6100}
html[data-theme="light"] .badge.danger{background:#fdecec;color:#b42318}
html[data-theme="light"] .badge.ok{background:#e9f7ef;color:#197a4b}
html[data-theme="light"] .badge.mute{background:#f1f0ec;color:#6b6b66}
html[data-theme="light"] .nav-item .count.hot{background:#fdecec;color:#b42318}
html[data-theme="light"] .warn-box{background:#fdf6e3;border-color:#f0dca8;color:#7a5b00}
html[data-theme="light"] .info-box{background:#eef6fd;border-color:#cfe3f5;color:#1f5f8b}
html[data-theme="light"] .danger-box{background:#fdeeee;border-color:#f6cccc;color:#a32626}
html[data-theme="light"] .locked-banner{background:#eaf7f0;border-color:#bfe4cf;color:#17663f}
html[data-theme="light"] .toast.ok{background:#eaf7f0;border-color:#bfe4cf;color:#17663f}
html[data-theme="light"] .toast.error{background:#fdeeee;border-color:#f6cccc;color:#a32626}
html[data-theme="light"] .toast.warn{background:#fdf6e3;border-color:#f0dca8;color:#7a5b00}
html[data-theme="light"] .issue .tag{background:#fdf3d8;color:#8a6100}
html[data-theme="light"] .issue.lv-high .tag{background:#fdecec;color:#b42318}
html[data-theme="light"] .issue.lv-low .tag{background:#e8f1fb;color:#1d6fb8}
html[data-theme="light"] .tm-swatch i{border-color:rgba(0,0,0,.12)}
html[data-theme="light"] .cv-swatches i{border-color:rgba(0,0,0,.15)}
html[data-theme="light"] .theme-menu{box-shadow:0 22px 55px rgba(30,28,24,.16)}
html[data-theme="light"] .lib-active{color:#fff}
html[data-theme="light"] .empty h3{color:#4b4d4f}

/* ---------------- 整体观感优化 ---------------- */
body{
  background:
    radial-gradient(1100px 620px at 6% -12%, var(--glow-1), transparent 62%),
    radial-gradient(1000px 640px at 100% 0%, var(--glow-2), transparent 58%),
    radial-gradient(900px 600px at 50% 118%, color-mix(in srgb,var(--accent) 7%,transparent), transparent 62%),
    var(--bg);
  background-attachment:fixed;
}
.panel{
  background:
    radial-gradient(130% 100% at 0% 0%, color-mix(in srgb,var(--accent) 7%,transparent), transparent 58%),
    linear-gradient(180deg,var(--panel-a),var(--panel-b));
  box-shadow:var(--shadow), inset 0 1px 0 rgba(255,255,255,.045);
}
.stat-card{
  background:
    radial-gradient(120% 120% at 100% 0%, color-mix(in srgb,var(--accent) 13%,transparent), transparent 62%),
    linear-gradient(160deg,var(--panel-2),var(--panel-b));
  box-shadow:inset 0 1px 0 rgba(255,255,255,.05), 0 10px 26px rgba(0,0,0,.18);
}
.stat-card::after{background:radial-gradient(circle,color-mix(in srgb,var(--accent) 30%,transparent),transparent 68%)}
.kcard:hover,.mini-card:hover{box-shadow:0 12px 30px color-mix(in srgb,var(--accent) 14%,transparent)}
.lib-card:hover{box-shadow:0 16px 40px color-mix(in srgb,var(--accent) 16%,transparent)}
.nav-item.active{
  box-shadow:
    inset 0 0 0 1px color-mix(in srgb,var(--accent) 20%,transparent),
    0 8px 22px color-mix(in srgb,var(--accent) 12%,transparent);
}
.btn{border-radius:10px}
input[type=text],input[type=password],input[type=number],input[type=date],input[type=url],select,textarea{border-radius:10px}
.modal{border-radius:18px;box-shadow:0 30px 80px rgba(0,0,0,.55)}
.theme-menu{border-radius:16px}
.brand-logo{border-radius:12px}

html[data-theme="light"] .panel{box-shadow:var(--shadow)}
html[data-theme="light"] .stat-card{box-shadow:0 8px 20px rgba(30,28,24,.06)}
html[data-theme="light"] .kcard:hover,
html[data-theme="light"] .mini-card:hover{box-shadow:0 12px 26px rgba(30,28,24,.10)}
html[data-theme="light"] .lib-card:hover{box-shadow:0 16px 34px rgba(30,28,24,.12)}
html[data-theme="light"] .modal{box-shadow:0 30px 70px rgba(30,28,24,.18)}
html[data-theme="light"] .nav-item.active{box-shadow:inset 0 0 0 1px rgba(0,0,0,.08)}

/* ============================================================
   高级感主题（低饱和 / 哑光 / 杂志感）
   - 每个主题只保留一个主色，不再满屏霓虹。
   - 深色底偏炭黑，面板靠层次与细边线拉开，不靠高饱和
   ============================================================ */
html[data-theme="dark"]{
  --bg:#0b0b0c; --bg-2:#101012;
  --glow-1:#14151a; --glow-2:#1a1712;
  --sidebar-a:#0e0e10; --sidebar-b:#09090a;
  --panel:#141416; --panel-a:#141416; --panel-b:#101012;
  --panel-2:#1a1a1d; --panel-3:#232327;
  --card-a:#17171a; --card-b:#111113; --ink-panel:#121214;
  --line:#29292d; --line-soft:#1d1d21; --line-strong:#3a3a40;
  --text:#f0efec; --text-soft:#c4c2bd; --muted:#8d8b86; --muted-2:#6a6863;
  --accent:#c8b18a; --accent-2:#9c8a6e; --accent-ink:#1a150d;
  --ok:#5cb88a; --warn:#d3a24a; --danger:#cf7a72; --purple:#a99bc0;
  --input-bg:#111113; --editor-bg:#0e0e10; --editor-locked:#0b0b0c;
  --hover-bg:#17171a;
  --topbar:rgba(11,11,12,.65); --toast-bg:#1c1c1f; --mask:rgba(4,4,5,.78);
  --scroll-1:#2d2d32; --scroll-2:#3d3d43;
  --heat-1:#33302a; --heat-2:#575046; --heat-3:#857a68; --heat-4:#d8cbb4;
  --shadow:0 18px 44px rgba(0,0,0,.55);
}





html[data-theme="light"]{
  --bg:#f6f4ef; --bg-2:#efece4;
  --glow-1:#ece6d8; --glow-2:#e7e9ec;
  --sidebar-a:#fbf9f4; --sidebar-b:#f2efe7;
  --panel:#ffffff; --panel-a:#ffffff; --panel-b:#fbf9f5;
  --panel-2:#f4f1ea; --panel-3:#e9e5dc;
  --card-a:#ffffff; --card-b:#f7f5f0; --ink-panel:#f2efe8;
  --line:#e2ddd3; --line-soft:#eeeae1; --line-strong:#d2cbbc;
  --text:#201f1c; --text-soft:#4a4842; --muted:#7a776f; --muted-2:#97938a;
  --accent:#2a2925; --accent-2:#8d7c63; --accent-ink:#ffffff;
  --ok:#0f7a4f; --warn:#8a6100; --danger:#b42318; --purple:#7c3aed;
  --input-bg:#ffffff; --editor-bg:#fffefa; --editor-locked:#f6f4ef;
  --hover-bg:#f3f0e9; --row-hover:rgba(0,0,0,.025);
  --topbar:rgba(246,244,239,.8); --toast-bg:#ffffff; --mask:rgba(24,24,22,.35);
  --scroll-1:#d8d3c9; --scroll-2:#c4beb2;
  --heat-1:#e9e4d9; --heat-2:#cec6b7; --heat-3:#9a8f7c; --heat-4:#4a443a;
  --shadow:0 12px 30px rgba(30,28,24,.10);
}

/* ---------------- 高级感细节 ---------------- */
.brand-text strong{
  font-family:"Songti SC","Source Han Serif SC","Noto Serif SC",Georgia,serif;
  letter-spacing:1px;
}
.topbar h1{
  font-family:"Microsoft YaHei","PingFang SC","Segoe UI",system-ui,sans-serif;
  font-weight:700;letter-spacing:.5px;
}

.panel{
  background:
    radial-gradient(120% 90% at 0% 0%, color-mix(in srgb,var(--accent) 5%,transparent), transparent 56%),
    linear-gradient(180deg,var(--panel-a),var(--panel-b));
  box-shadow:var(--shadow), inset 0 1px 0 rgba(255,255,255,.03);
}
.stat-card{
  background:
    radial-gradient(120% 120% at 100% 0%, color-mix(in srgb,var(--accent) 7%,transparent), transparent 64%),
    linear-gradient(160deg,var(--panel-2),var(--panel-b));
  box-shadow:inset 0 1px 0 rgba(255,255,255,.04), 0 10px 26px rgba(0,0,0,.16);
}
.stat-card::after{background:radial-gradient(circle,color-mix(in srgb,var(--accent) 14%,transparent),transparent 70%)}
.btn-primary{
  background:linear-gradient(135deg,var(--accent),var(--accent-2));
  box-shadow:0 8px 20px rgba(0,0,0,.32), inset 0 1px 0 rgba(255,255,255,.22);
}
.btn-primary:hover{filter:brightness(1.06)}
.nav-item.active{
  box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--accent) 16%,transparent);
}
.kcard:hover,.mini-card:hover{
  border-color:color-mix(in srgb,var(--accent) 34%,transparent);
  box-shadow:0 10px 24px rgba(0,0,0,.28);
}
.lib-card:hover{
  border-color:color-mix(in srgb,var(--accent) 34%,transparent);
  box-shadow:0 14px 32px rgba(0,0,0,.30);
}
html[data-theme="light"] .btn-primary{
  box-shadow:0 8px 20px rgba(30,28,24,.16), inset 0 1px 0 rgba(255,255,255,.4);
}
html[data-theme="light"] .kcard:hover,
html[data-theme="light"] .mini-card:hover{box-shadow:0 10px 24px rgba(30,28,24,.09)}
html[data-theme="light"] .lib-card:hover{box-shadow:0 14px 32px rgba(30,28,24,.11)}
html[data-theme="light"] .panel{box-shadow:var(--shadow), inset 0 1px 0 rgba(255,255,255,.7)}
html[data-theme="light"] .stat-card{box-shadow:inset 0 1px 0 rgba(255,255,255,.8), 0 8px 20px rgba(30,28,24,.05)}

/* 极细颗粒，增加纸质哑光质感 */
body::after{
  content:"";position:fixed;inset:0;pointer-events:none;z-index:9999;
  opacity:.018;mix-blend-mode:overlay;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='140' height='140' filter='url(%23n)'/%3E%3C/svg%3E");
  background-size:140px 140px;
}
html[data-theme="light"] body::after{opacity:.012;mix-blend-mode:multiply}

/* 深色主题下把语义色也压暗一点，避免和低饱和主色打架 */
html:not([data-theme="light"]) .badge.queue{background:rgba(160,158,152,.12);color:#a9a7a1}
html:not([data-theme="light"]) .badge.planning{background:rgba(143,168,200,.14);color:#a9c1dd}
html:not([data-theme="light"]) .badge.draft{background:rgba(185,163,208,.14);color:#cbb8df}
html:not([data-theme="light"]) .badge.delivered{background:rgba(159,184,164,.14);color:#b7cdbb}
html:not([data-theme="light"]) .badge.warn{background:rgba(211,162,74,.14);color:#e0bc80}
html:not([data-theme="light"]) .badge.danger{background:rgba(201,139,139,.14);color:#d9a8a8}
html:not([data-theme="light"]) .badge.ok{background:rgba(159,184,164,.14);color:#b7cdbb}
html:not([data-theme="light"]) .badge.mute{background:rgba(160,158,152,.1);color:#8d8b86}
html:not([data-theme="light"]) .kcol-head .dot{filter:saturate(.5) brightness(1.05)}
.bar > span{background:linear-gradient(90deg,var(--accent),var(--accent-2))}

/* ============================================================
   驾驶舱 v2
   ============================================================ */
.ck-stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px;margin-bottom:24px}
.ck-stat{
  display:flex;gap:12px;align-items:flex-start;padding:15px 16px 14px;
  border-radius:14px;position:relative;overflow:hidden;
  background:linear-gradient(160deg,var(--panel-2),var(--panel));
  border:1px solid var(--line);
  transition:border-color .18s ease, transform .18s ease;
}
.ck-stat:hover{
  border-color:color-mix(in srgb,var(--tone,var(--accent)) 40%,var(--line));
  transform:translateY(-2px);
}
.ck-stat::after{
  content:"";position:absolute;right:-34px;top:-46px;width:130px;height:130px;border-radius:50%;
  pointer-events:none;
  background:radial-gradient(circle,color-mix(in srgb,var(--tone,var(--accent)) 20%,transparent),transparent 70%);
}
.ck-stat-ico{
  width:32px;height:32px;flex:0 0 32px;border-radius:9px;display:grid;place-items:center;
  font-size:14px;line-height:1;color:var(--tone,var(--accent));
  background:color-mix(in srgb,var(--tone,var(--accent)) 14%,transparent);
  border:1px solid color-mix(in srgb,var(--tone,var(--accent)) 26%,transparent);
}
.ck-stat-k{font-size:11.5px;letter-spacing:.4px;color:var(--muted)}
.ck-stat-v{
  font-size:25px;font-weight:700;line-height:1.2;margin:3px 0 2px;
  font-variant-numeric:tabular-nums;color:var(--text);
}
.ck-stat-s{font-size:11px;line-height:1.5;color:var(--muted-2)}
.ck-stat-s .up{color:var(--ok)}
.ck-stat-s .down{color:var(--danger)}

.ck-main{
  display:grid;grid-template-columns:minmax(0,1.6fr) minmax(0,1fr);gap:16px;align-items:stretch;
  height:calc(100vh - 266px);min-height:520px;margin-top:8px;
}
.ck-side{display:flex;flex-direction:column;gap:14px;overflow:visible;min-height:0}
.ck-side .panel{padding:14px 16px 16px;flex:0 0 auto}
.ck-side .panel:last-child{flex:1 1 auto;min-height:0}

.ck-ring-row{display:flex;align-items:center;gap:14px}
.ck-pct{
  font-size:30px;font-weight:700;line-height:1;color:var(--accent);
  font-variant-numeric:tabular-nums;flex:0 0 auto;
}
.ck-pct small{font-size:12px;font-weight:400;color:var(--muted-2);margin-left:1px}
.ck-bar{
  height:9px;border-radius:20px;overflow:hidden;margin-top:9px;
  background:color-mix(in srgb,var(--muted) 16%,transparent);
}
.ck-bar i{
  display:block;height:100%;border-radius:20px;
  background:linear-gradient(90deg,var(--accent),var(--accent-2));
  transition:width .3s ease;
}
.ck-node{margin-top:11px;font-size:11.5px;color:var(--muted)}
.ck-node b{color:var(--text);font-weight:600}

.ck-continue{
  display:flex;align-items:center;justify-content:space-between;gap:10px;
  margin-top:12px;padding:10px 12px;border-radius:11px;
  background:color-mix(in srgb,var(--accent) 8%,transparent);
  border:1px solid color-mix(in srgb,var(--accent) 22%,transparent);
}
.ck-continue .lbl{font-size:11px;color:var(--muted);letter-spacing:.4px}
.ck-continue b{display:block;font-size:12.5px;margin-top:2px;color:var(--text)}

.ck-debt{
  display:flex;gap:8px;align-items:flex-start;padding:7px 0;
  border-bottom:1px dashed color-mix(in srgb,var(--line) 70%,transparent);
  font-size:11.5px;
}
.ck-debt:last-child{border-bottom:none}
.ck-debt .t{
  flex:1;min-width:0;line-height:1.5;color:var(--text);
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;
}
.ck-debt .no{font-size:10.5px;color:var(--muted-2);white-space:nowrap;padding-top:1px}
.ck-debt .badge{flex:0 0 auto}

.ck-board .kcol{min-height:0}
.ck-board .kcard{padding:10px 11px}
.ck-board{display:flex;flex-direction:column;min-height:0}
.ck-board .kanban{flex:1;min-height:0}
.ck-board .kcol-body{max-height:none;flex:1;overflow-y:auto;overscroll-behavior:contain}
.ck-board .kcol-body > .kempty{margin:auto}
.ck-side .heat{
  display:grid;grid-auto-flow:column;
  grid-template-columns:repeat(13,minmax(0,1fr));
  grid-template-rows:repeat(7,14px);
  gap:4px;width:100%;
}
.ck-side .heat i{width:100%;height:14px;border-radius:3px;border:1px solid color-mix(in srgb,var(--line) 55%,transparent)}
.ck-side .heat i.l4{border-color:color-mix(in srgb,var(--accent) 42%,transparent)}
.ck-side .kempty,
.ck-board .kempty{color:var(--muted-2)}

@media (max-width:1320px){
  .ck-main{grid-template-columns:1fr;height:auto;min-height:0}
  .ck-side{overflow:visible}
}
@media (max-width:1100px){
  .ck-stats{grid-template-columns:1fr 1fr}
}

html[data-theme="light"] .ck-stat{box-shadow:inset 0 1px 0 rgba(255,255,255,.8), 0 8px 20px rgba(30,28,24,.05)}

/* ============================================================
   主题切换按钮（太阳 / 月亮）
   ============================================================ */
.theme-toggle{
  display:inline-flex;align-items:center;justify-content:center;gap:6px;
  width:32px;height:32px;padding:0;border-radius:50%;
  background:var(--input-bg);border:1px solid var(--line);
  color:var(--text-soft);cursor:pointer;line-height:1;
  transition:color .18s,border-color .18s,background .18s,transform .18s,box-shadow .18s;
}
.theme-toggle:hover{
  color:var(--text);border-color:var(--line-strong);
  background:var(--hover-bg);
  box-shadow:0 4px 14px color-mix(in srgb,var(--accent) 16%,transparent);
}
.theme-toggle:active{transform:scale(.94)}
.theme-toggle .tt-icon{display:flex;align-items:center;justify-content:center;width:17px;height:17px}
.theme-toggle .tt-icon svg{width:100%;height:100%;display:block}
.theme-toggle .tt-label{font-size:12px;font-weight:500}
.theme-toggle .tt-label:empty{display:none}
.theme-toggle[data-label]{width:auto;height:30px;padding:0 11px;border-radius:999px}
/* 深色时图标是太阳（暖金），浅色时是月亮（冷灰蓝） */
.theme-toggle[data-state="dark"] .tt-icon{color:#e6c98a}
.theme-toggle[data-state="light"] .tt-icon{color:#5b6472}
.theme-toggle[data-state="dark"]:hover .tt-icon{transform:rotate(24deg)}
.theme-toggle .tt-icon{transition:transform .28s ease}

/* ============================================================
   浅色主题精修（暖纸质感 / 清晰层级）
   ============================================================ */
html[data-theme="light"]{
  --glow-1:#f0e9d8; --glow-2:#e8edf3;
}
html[data-theme="light"] body{
  background:
    radial-gradient(1100px 620px at 8% -10%, var(--glow-1), transparent 60%),
    radial-gradient(980px 620px at 100% 0%, var(--glow-2), transparent 56%),
    linear-gradient(180deg,#f8f6f1,#f2efe8 62%,#eeeae2);
  background-attachment:fixed;
}
html[data-theme="light"] .panel{
  background:linear-gradient(180deg,#ffffff,#fdfbf7);
  border-color:#e6e1d7;
  box-shadow:0 1px 2px rgba(38,34,26,.04), 0 10px 26px rgba(38,34,26,.05);
}
html[data-theme="light"] .sidebar{
  background:linear-gradient(180deg,#fdfbf7,#f5f2ec);
  box-shadow:inset -1px 0 0 #e8e3d9;
}
html[data-theme="light"] .topbar{
  background:rgba(250,248,244,.82);
  backdrop-filter:blur(10px);
  border-bottom-color:#e8e3d9;
}
html[data-theme="light"] .topbar h1{color:#1c1b19}
html[data-theme="light"] .btn{
  background:#fff;border-color:#e2ddd2;color:#4a4842;
  box-shadow:0 1px 1px rgba(38,34,26,.03);
}
html[data-theme="light"] .btn:hover{background:#f7f4ee;border-color:#cfc8ba;color:#1c1b19}
html[data-theme="light"] .btn-primary{
  background:linear-gradient(135deg,#2f2d28,#5c5344);
  color:#fdfbf7;border-color:transparent;
  box-shadow:0 6px 16px rgba(38,34,26,.18), inset 0 1px 0 rgba(255,255,255,.14);
}
html[data-theme="light"] .btn-primary:hover{filter:brightness(1.08)}
html[data-theme="light"] .nav-item{color:#54514a}
html[data-theme="light"] .nav-item:hover{background:#f1ede5;color:#1c1b19}
html[data-theme="light"] .nav-item.active{
  background:linear-gradient(135deg,rgba(42,41,37,.09),rgba(141,124,99,.10));
  color:#171614;box-shadow:inset 0 0 0 1px rgba(42,41,37,.10);
}
html[data-theme="light"] .nav-item.active .ico{color:#8d7c63}
html[data-theme="light"] .theme-toggle{background:#fff;border-color:#e2ddd2}
html[data-theme="light"] .theme-toggle:hover{background:#f7f4ee;border-color:#cfc8ba}
html[data-theme="light"] input[type=text],
html[data-theme="light"] input[type=password],
html[data-theme="light"] input[type=number],
html[data-theme="light"] input[type=date],
html[data-theme="light"] input[type=url],
html[data-theme="light"] select,
html[data-theme="light"] textarea{
  background:#fff;border-color:#e2ddd2;color:#1c1b19;
}
html[data-theme="light"] input:focus,
html[data-theme="light"] select:focus,
html[data-theme="light"] textarea:focus{
  border-color:#b7ac96;
  box-shadow:0 0 0 3px rgba(141,124,99,.14);
}
html[data-theme="light"] .badge{border-color:transparent;font-weight:500}
html[data-theme="light"] .modal{
  background:linear-gradient(180deg,#ffffff,#fdfbf7);
  border-color:#e6e1d7;
}
html[data-theme="light"] .modal-foot{background:#faf8f3;border-top-color:#ebe6dc}
html[data-theme="light"] .modal-head{border-bottom-color:#ebe6dc}
html[data-theme="light"] ::-webkit-scrollbar-thumb{background:#d5cfc3}
html[data-theme="light"] ::-webkit-scrollbar-thumb:hover{background:#c3bcae}

/* 统计卡：浅色下去掉彩色光斑，避免糊成脏灰块 */
html[data-theme="light"] .stat-card{
  background:linear-gradient(180deg,#ffffff,#fdfbf7);
  border-color:#e8e3d8;
  box-shadow:0 1px 2px rgba(38,34,26,.05), 0 10px 22px rgba(38,34,26,.06);
}
html[data-theme="light"] .stat-card::after{opacity:0}
html[data-theme="light"] .ck-stat{
  background:linear-gradient(180deg,#ffffff,#fdfbf7);
  border-color:#e8e3d8;
  box-shadow:0 1px 2px rgba(38,34,26,.04), 0 8px 18px rgba(38,34,26,.05);
}
html[data-theme="light"] .ck-stat::after{opacity:.28}
html[data-theme="light"] .ck-stat-ico{background:#f5f1e8;border-color:#e6e0d3}
html[data-theme="light"] .ck-stat:hover{border-color:#cfc8ba}
/* 深色下把光斑收一点，更含蓄 */
html[data-theme="dark"] .stat-card::after{opacity:.45}

/* ============================================================
   品牌区（Logo + 墨舟字标）
   ============================================================ */
.brand{
  position:relative;display:flex;align-items:center;justify-content:flex-start;
  gap:11px;padding:20px 16px 16px;
}
.brand::after{
  content:"";position:absolute;left:16px;right:16px;bottom:0;height:1px;
  background:linear-gradient(90deg,color-mix(in srgb,var(--accent) 30%,transparent),transparent 76%);
}
.brand-logo{
  width:38px;height:38px;flex:0 0 auto;border-radius:11px;
  display:grid;place-items:center;
  color:var(--accent);
  background:
    radial-gradient(130% 120% at 28% -10%, color-mix(in srgb,var(--accent) 20%,transparent), transparent 62%),
    linear-gradient(160deg,var(--panel-2),var(--panel-b));
  border:1px solid color-mix(in srgb,var(--accent) 26%,var(--line));
  box-shadow:
    inset 0 1px 0 color-mix(in srgb,#ffffff 7%,transparent),
    0 6px 16px rgba(0,0,0,.26);
  transition:transform .22s ease, box-shadow .22s ease, border-color .22s ease;
}
.brand-logo svg{width:23px;height:23px;display:block;overflow:visible}
.brand-logo:hover{
  transform:translateY(-1px);
  border-color:color-mix(in srgb,var(--accent) 44%,var(--line));
  box-shadow:
    inset 0 1px 0 color-mix(in srgb,#ffffff 10%,transparent),
    0 8px 20px color-mix(in srgb,var(--accent) 22%,transparent);
}

.brand-text{display:flex;flex-direction:column;justify-content:center;gap:5px;min-width:0;flex:1}
.brand-name{display:flex;align-items:center;gap:11px;min-width:0}
.brand-name strong{
  font-family:"HarmonyOS Sans SC","PingFang SC","Microsoft YaHei UI","Microsoft YaHei",system-ui,sans-serif;
  font-size:21px;line-height:1.1;font-weight:600;letter-spacing:8px;
  margin-right:-8px;white-space:nowrap;
  background:linear-gradient(180deg,#fdfaf4 4%,color-mix(in srgb,var(--accent) 92%,#fff) 52%,var(--accent-2) 100%);
  -webkit-background-clip:text;background-clip:text;
  -webkit-text-fill-color:transparent;color:transparent;
}
.brand-rule{
  flex:1;height:1px;min-width:6px;border:0;margin-top:1px;
  background:linear-gradient(90deg,color-mix(in srgb,var(--accent) 32%,transparent),color-mix(in srgb,var(--accent) 5%,transparent) 58%,transparent);
}
.brand-text span{
  font-size:9.5px;line-height:1.1;font-weight:500;
  letter-spacing:.3em;margin-right:-.3em;
  color:color-mix(in srgb,var(--accent) 52%,var(--muted-2));
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}

/* 浅色：字标改成墨色渐变，副标题跟墨棕走 */
html[data-theme="light"] .brand-logo{
  color:var(--accent);
  background:
    radial-gradient(130% 120% at 28% -10%, rgba(141,124,99,.16), transparent 62%),
    linear-gradient(160deg,#ffffff,#faf7f1);
  border-color:#e0d9cb;
  box-shadow:inset 0 1px 0 #fff, 0 4px 12px rgba(38,34,26,.07);
}
html[data-theme="light"] .brand-logo:hover{
  border-color:#c9bfa9;
  box-shadow:inset 0 1px 0 #fff, 0 6px 16px rgba(38,34,26,.10);
}
html[data-theme="light"] .brand-text strong{
  background:linear-gradient(180deg,#2b2a26 6%,#544b3c 62%,#8d7c63 100%);
  -webkit-background-clip:text;background-clip:text;
  -webkit-text-fill-color:transparent;color:transparent;
}
html[data-theme="light"] .brand-rule{
  background:linear-gradient(90deg,rgba(141,124,99,.5),rgba(141,124,99,.12) 62%,transparent);
}
html[data-theme="light"] .brand-text span{color:#8a8377}
html[data-theme="light"] .brand::after{
  background:linear-gradient(90deg,rgba(141,124,99,.42),transparent 76%);
}

/* 窄屏侧栏收成图标栏时，品牌区只留 Logo 并居中 */
@media (max-width:980px){
  .brand{padding:14px 0 10px;justify-content:center;gap:0}
  .brand::after{left:12px;right:12px}
  .brand-logo{width:36px;height:36px;border-radius:10px}
  .brand-text{display:none !important}
}

/* ============================================================
   context / memory modal
   ============================================================ */
.ctx-note{
  font-size:11.5px;line-height:1.8;color:var(--muted);
  padding:9px 11px;margin-bottom:12px;border-radius:9px;
  background:color-mix(in srgb,var(--accent) 7%,transparent);
  border:1px solid color-mix(in srgb,var(--accent) 18%,var(--line));
}
.ctx-note b{color:var(--text-soft)}
.ctx-head{display:flex;align-items:baseline;justify-content:space-between;gap:10px;margin:0 0 7px}
.ctx-head b{font-size:12.5px;font-weight:600;color:var(--text)}
.ctx-pack{display:flex;flex-direction:column;gap:6px}
.ctx-block{
  border:1px solid var(--line);border-radius:9px;background:var(--input-bg);
  overflow:hidden;
}
.ctx-block summary{
  display:flex;align-items:center;gap:8px;cursor:pointer;
  padding:8px 11px;font-size:12px;color:var(--text-soft);list-style:none;
}
.ctx-block summary::-webkit-details-marker{display:none}
.ctx-block summary::before{
  content:'\25B8';color:var(--muted-2);font-size:10px;transition:transform .15s;
}
.ctx-block[open] summary::before{transform:rotate(90deg)}
.ctx-block summary:hover{background:var(--hover-bg)}
.ctx-label{font-weight:600;color:var(--text)}
.ctx-count{margin-left:auto;font-size:10.5px;color:var(--muted-2);font-variant-numeric:tabular-nums}
.ctx-text{
  margin:0;padding:10px 12px 12px;max-height:320px;overflow:auto;
  font-family:ui-monospace,Menlo,Consolas,monospace;font-size:11px;line-height:1.75;
  color:var(--muted);white-space:pre-wrap;word-break:break-word;
  border-top:1px solid var(--line-soft);background:var(--editor-bg);
}
.ctx-card{
  padding:10px 12px;border-radius:9px;
  border:1px solid color-mix(in srgb,var(--accent) 20%,var(--line));
  background:color-mix(in srgb,var(--accent) 6%,transparent);
}
.ctx-digest{font-size:12.5px;line-height:1.8;color:var(--text-soft)}
.ctx-beats{display:flex;flex-wrap:wrap;gap:5px;margin-top:8px}
.ctx-chars{font-size:11px;line-height:1.7;color:var(--muted);margin-top:7px}
.ctx-empty{
  padding:18px 12px;text-align:center;font-size:11.5px;color:var(--muted-2);
  border:1px dashed var(--line);border-radius:9px;
}
.ctx-list{display:flex;flex-direction:column;gap:4px;max-height:220px;overflow:auto}
.ctx-row{display:flex;gap:9px;align-items:baseline;padding:5px 8px;border-radius:7px;font-size:11.5px}
.ctx-row:hover{background:var(--hover-bg)}
.ctx-no{flex:0 0 52px;color:color-mix(in srgb,var(--accent) 62%,var(--muted));font-size:10.5px}
.ctx-txt{color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* ============================================================
   studio chat drawer
   ============================================================ */
.chat-drawer{
  position:fixed;right:0;top:0;bottom:0;width:400px;max-width:94vw;z-index:70;
  display:flex;flex-direction:column;
  background:linear-gradient(180deg,var(--panel-2),var(--panel-b));
  border-left:1px solid var(--line-strong);
  box-shadow:-18px 0 55px rgba(0,0,0,.42);
  animation:chatIn .18s ease-out;
}
@keyframes chatIn{from{transform:translateX(24px);opacity:.55}to{transform:none;opacity:1}}
.chat-head{
  display:flex;align-items:center;gap:8px;padding:11px 13px;
  border-bottom:1px solid var(--line);flex:0 0 auto;
}
.chat-head b{font-size:13px;font-weight:600;color:var(--text)}
.chat-scope{
  font-size:10.5px;line-height:1.6;padding:1px 8px;border-radius:20px;
  color:color-mix(in srgb,var(--accent) 80%,var(--text));
  border:1px solid color-mix(in srgb,var(--accent) 30%,var(--line));
  background:color-mix(in srgb,var(--accent) 10%,transparent);
}
.chat-head .spacer{flex:1}
.chat-log{
  flex:1;min-height:0;overflow-y:auto;padding:14px 13px;
  display:flex;flex-direction:column;gap:11px;
}
.chat-msg{display:flex;flex-direction:column;gap:4px;max-width:100%}
.chat-msg.me{align-items:flex-end}
.chat-who{font-size:10px;color:var(--muted-2);letter-spacing:.4px}
.chat-bubble{
  font-size:12.5px;line-height:1.85;white-space:pre-wrap;word-break:break-word;
  padding:9px 11px;border-radius:10px;max-height:46vh;overflow:auto;
  background:var(--input-bg);border:1px solid var(--line);color:var(--text-soft);
}
.chat-msg.me .chat-bubble{
  background:color-mix(in srgb,var(--accent) 13%,transparent);
  border-color:color-mix(in srgb,var(--accent) 28%,transparent);
  color:var(--text);
}
.chat-msg.sys .chat-bubble{
  background:transparent;border:0;padding:0;
  font-size:11px;line-height:1.75;color:var(--muted-2);
}
.chat-msg.err .chat-bubble{
  border-color:color-mix(in srgb,var(--danger) 42%,transparent);color:var(--danger);
}
.chat-act{display:flex;gap:6px;flex-wrap:wrap;margin-top:3px}
.chat-foot{
  flex:0 0 auto;padding:10px 13px 12px;
  border-top:1px solid var(--line);background:var(--panel-b);
}
.chat-foot textarea{
  width:100%;min-height:62px;resize:vertical;font-size:12.5px;line-height:1.7;
  font-family:inherit;
}
.chat-act-row{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:7px}
.studio-toolbar .btn.on{
  color:color-mix(in srgb,var(--accent) 85%,var(--text));
  border-color:color-mix(in srgb,var(--accent) 42%,var(--line));
  background:color-mix(in srgb,var(--accent) 12%,transparent);
}
@media (max-width:900px){
  .chat-drawer{width:100%;max-width:100%;box-shadow:none}
}

/* ============================================================
   降噪层：去「AI 味」
   ------------------------------------------------------------
   全部是减法，不加新装饰：
   1) 背景不再铺径向光晕 —— 纯色 + 极弱竖向渐变，文字对比更实
   2) 卡片去掉右上角光斑与彩色投影，只靠 1px 细边线分层
   3) 渐变一律取消：面板 / 卡片 / 按钮 / 品牌字标都是纯色
   4) 强调色只留在三处：导航当前项的竖条、主按钮、焦点边线
   5) 圆角收到 10 / 8，阴影压到 1~2px 级别
   放在文件最末尾，用 html[data-theme] 前缀拿到与主题覆盖同级的特异性
   ============================================================ */
html[data-theme="dark"]{--shadow:0 1px 2px rgba(0,0,0,.5)}
html[data-theme="light"]{--shadow:0 1px 2px rgba(30,28,24,.06)}

/* 1) 背景与外壳：去掉光晕、毛玻璃、侧栏渐变 */
html[data-theme] body{
  background:linear-gradient(180deg,var(--bg-2),var(--bg) 260px);
  background-attachment:fixed;
}
html[data-theme] .sidebar{background:var(--bg-2);border-right-color:var(--line-soft)}
html[data-theme] .topbar{
  background:var(--bg);
  -webkit-backdrop-filter:none;backdrop-filter:none;
  border-bottom-color:var(--line-soft);
}

/* 2) 面板：纯色 + 细边线，不再有渐变光与外投影 */
html[data-theme] .panel{
  background:var(--panel);
  border-color:var(--line-soft);
  border-radius:10px;
  box-shadow:none;
}

/* 3) 卡片：纯色、去光斑；hover 只提亮边线，不上浮不发光 */
.ck-stat::after,.stat-card::after{display:none}
html[data-theme] .ck-stat,
html[data-theme] .stat-card,
html[data-theme] .kcard,
html[data-theme] .mini-card,
html[data-theme] .lib-card{
  background:var(--card-a);
  border-color:var(--line-soft);
  box-shadow:none;
}
html[data-theme] .ck-stat,
html[data-theme] .stat-card{border-radius:10px}
html[data-theme] .kcard,
html[data-theme] .mini-card{border-radius:8px}
html[data-theme] .ck-stat:hover,
html[data-theme] .kcard:hover,
html[data-theme] .mini-card:hover,
html[data-theme] .lib-card:hover{
  background:var(--panel-2);
  border-color:var(--line-strong);
  box-shadow:none;
  transform:none;
}
html[data-theme] .lib-ph{background:var(--panel-2)}
html[data-theme] .avatar{background:var(--panel-3);color:var(--text-soft)}

/* 4) 侧栏导航：当前项用左侧竖条标记，不再整块渐变高亮 */
html[data-theme] .nav-item{
  position:relative;
  border-color:transparent;
  border-radius:8px;
}
html[data-theme] .nav-item:hover{background:var(--hover-bg)}
html[data-theme] .nav-item.active{
  background:var(--panel-2);
  border-color:var(--line-soft);
  box-shadow:none;
  color:var(--text);
  font-weight:600;
}
html[data-theme] .nav-item.active::before{
  content:"";position:absolute;left:0;top:9px;bottom:9px;width:2px;
  border-radius:0 2px 2px 0;background:var(--accent);
}

/* 5) 按钮 / 输入框：主按钮改实心单色，取消渐变与内高光 */
html[data-theme] .btn{border-radius:8px}
html[data-theme] input[type=text],
html[data-theme] input[type=password],
html[data-theme] input[type=number],
html[data-theme] input[type=date],
html[data-theme] input[type=url],
html[data-theme] select,
html[data-theme] textarea{border-radius:8px}
html[data-theme] .btn-primary,
html[data-theme] .btn-accent{
  background:var(--accent);
  color:var(--accent-ink);
  border-color:transparent;
  box-shadow:none;
}
html[data-theme] .btn-primary:hover,
html[data-theme] .btn-accent:hover{
  background:color-mix(in srgb,var(--accent) 86%,var(--text));
  filter:none;
}

/* 6) 品牌区：字标取消渐变文字，logo 取消光晕 */
html[data-theme] .brand-logo{
  background:transparent;
  border:1px solid var(--line-strong);
  box-shadow:none;
  color:var(--accent);
}
html[data-theme] .brand-logo:hover{
  transform:none;
  border-color:color-mix(in srgb,var(--accent) 48%,var(--line));
  box-shadow:none;
}
html[data-theme] .brand-text strong{
  background:none;
  -webkit-text-fill-color:currentColor;
  color:var(--text);
  letter-spacing:6px;margin-right:-6px;
}
html[data-theme] .brand-text span{color:var(--muted-2)}

/* 7) 其余渐变与重阴影收敛 */
html[data-theme] .bar>span{background:var(--accent)}
html[data-theme] .modal{
  border-radius:14px;
  box-shadow:0 24px 60px rgba(0,0,0,.55);
}
html[data-theme="light"] .modal{box-shadow:0 20px 50px rgba(30,28,24,.16)}
html[data-theme] .theme-menu{
  border-radius:10px;
  box-shadow:0 18px 44px rgba(0,0,0,.5);
}
html[data-theme="light"] .theme-menu{box-shadow:0 18px 40px rgba(30,28,24,.14)}

/* 8) 指标卡：图标统一中性，彩色不再占满一排 */
html[data-theme] .ck-stat-ico{
  color:var(--muted);
  background:var(--panel-3);
  border-color:transparent;
  border-radius:7px;
}
/* 9) 看板列：改成凹陷底，砍掉「面板 > 列 > 卡片」的第三层描边 */
html[data-theme] .kcol{
  background:var(--ink-panel);
  border-color:transparent;
  border-radius:8px;
}
html[data-theme] .kcol-head{
  border-bottom-color:var(--line-soft);
  color:var(--text-soft);
}
/* 10) 状态标签：取消彩色底，只留文字色 */
html[data-theme] .badge{
  background:transparent;
  border:1px solid var(--line);
  color:var(--muted);
  font-weight:400;
}
html[data-theme] .badge.queue{color:#a9a7a1}
html[data-theme] .badge.planning{color:#a9c1dd}
html[data-theme] .badge.draft{color:#cbb8df}
html[data-theme] .badge.delivered{color:#b7cdbb}
html[data-theme] .badge.warn{color:#e0bc80;border-color:rgba(211,162,74,.4)}
html[data-theme] .badge.danger{color:#d9a8a8;border-color:rgba(201,139,139,.4)}
html[data-theme] .badge.ok{color:#b7cdbb}
html[data-theme] .badge.mute{color:var(--muted-2)}
html[data-theme="light"] .badge.queue{color:#4b5563}
html[data-theme="light"] .badge.planning{color:#1d6fb8}
html[data-theme="light"] .badge.draft{color:#7c3aed}
html[data-theme="light"] .badge.delivered{color:#197a4b}
html[data-theme="light"] .badge.warn{color:#8a6100;border-color:#f0dca8}
html[data-theme="light"] .badge.danger{color:#b42318;border-color:#f6cccc}
html[data-theme="light"] .badge.ok{color:#197a4b}
html[data-theme="light"] .badge.mute{color:#6b6b66}

/* 11) 提示块：去掉整块彩色底，改成左侧一条竖线的引用式提示 */
html[data-theme] .info-box,
html[data-theme] .warn-box,
html[data-theme] .danger-box,
html[data-theme] .locked-banner{
  background:var(--panel-2);
  border-color:var(--line);
  border-left-width:2px;
  color:var(--text-soft);
  border-radius:8px;
}
html[data-theme] .info-box{border-left-color:color-mix(in srgb,var(--accent-2) 70%,var(--line))}
html[data-theme] .warn-box{border-left-color:color-mix(in srgb,var(--warn) 70%,var(--line))}
html[data-theme] .danger-box{border-left-color:color-mix(in srgb,var(--danger) 70%,var(--line))}
html[data-theme] .locked-banner{border-left-color:color-mix(in srgb,var(--ok) 60%,var(--line))}
html[data-theme] .info-box b,
html[data-theme] .warn-box b,
html[data-theme] .danger-box b{color:var(--text)}
html[data-theme] .locked-banner{color:color-mix(in srgb,var(--ok) 55%,var(--text))}
html[data-theme="light"] .info-box{background:#faf8f3;border-color:#eeeae1;color:#4a4842}
html[data-theme="light"] .warn-box{background:#fdfaf2;border-color:#f0e6cf;color:#7a5b00}
html[data-theme="light"] .danger-box{background:#fdf7f6;border-color:#f3dedb;color:#a32626}
html[data-theme="light"] .locked-banner{background:#f7faf8;border-color:#dfeae4;color:#17663f}

/* 12) 当前种子书的角标：与状态标签统一成细描边 */
html[data-theme] .lib-active{
  background:var(--panel-2);
  color:color-mix(in srgb,var(--accent) 80%,var(--text));
  border:1px solid color-mix(in srgb,var(--accent) 45%,var(--line));
  font-weight:500;
}

/* 13) 窄屏写作台：.studio 的 height:100% + 右栏 70vh 会把两栏挤进同一个可视高，
       左栏又带 overflow:auto，min-content 塌成 0 → 大纲文字压到正文上。 */
@media (max-width:1180px){
  html[data-theme] .studio{grid-template-columns:1fr;height:auto}
  html[data-theme] .studio-left{max-height:none;overflow:visible}
}

/* ============================================================
   书库卡片：做成「一本书」
   ------------------------------------------------------------
   - 封面本身当书：左侧书脊压痕 + 右侧纸页堆叠 + 落影，不再是「盒子里的图片」
   - 卡片去掉外框 / 背景 / 内投影，文字直接排在书封下方（书封 + 版权页的感觉）
   - 信息顺序：书名 → 题材·作者 → 简介 → 章数·字数 → 进度 → 操作
     只作用于 .lib-grid（列表模式 .lib-list 保持原样）
   ============================================================ */
html[data-theme] .lib-grid{
  grid-template-columns:repeat(auto-fill,minmax(188px,1fr));
  gap:28px 18px;
  align-items:start;
}
html[data-theme] .lib-grid .lib-card{
  background:transparent;
  border:0;
  border-radius:0;
  box-shadow:none;
  overflow:visible;
  transition:transform .2s ease;
}
html[data-theme] .lib-grid .lib-card:hover{
  transform:translateY(-4px);
  border-color:transparent;
  box-shadow:none;
}

/* 书封：圆角只留一点，右侧露出两层「纸页」，底部一层落影 */
html[data-theme] .lib-grid .lib-cover{
  border-bottom:0;
  border-radius:2px 5px 5px 2px;
  box-shadow:
    3px 2px 0 -1px color-mix(in srgb,var(--panel-3) 82%,var(--bg)),
    4px 3px 0 -1px color-mix(in srgb,var(--line) 92%,var(--bg)),
    0 18px 30px -16px rgba(0,0,0,.8);
  transition:box-shadow .2s ease;
}
html[data-theme] .lib-grid .lib-card:hover .lib-cover{
  box-shadow:
    4px 3px 0 -1px color-mix(in srgb,var(--panel-3) 82%,var(--bg)),
    6px 5px 0 -1px color-mix(in srgb,var(--line) 92%,var(--bg)),
    0 24px 38px -18px rgba(0,0,0,.88);
}
/* 浅色下书封与纸底太接近，补一层细边 + 更淡的落影 */
html[data-theme="light"] .lib-grid .lib-cover{
  box-shadow:
    3px 2px 0 -1px #ddd8cc,
    4px 3px 0 -1px #cbc4b5,
    0 16px 24px -16px rgba(30,28,24,.38);
  border:1px solid #e3ddd1;
}
html[data-theme="light"] .lib-grid .lib-card:hover .lib-cover{
  box-shadow:
    4px 3px 0 -1px #ddd8cc,
    6px 5px 0 -1px #cbc4b5,
    0 22px 32px -18px rgba(30,28,24,.44);
}
html[data-theme="light"] .lib-grid .lib-ph-frame{
  border-color:#ddd6c6;
}
/* 书脊：左暗 → 中间一道高光 → 右暗，做出圆柱压痕 */
html[data-theme] .lib-grid .lib-cover::before{
  content:"";position:absolute;left:0;top:0;bottom:0;width:11px;z-index:3;pointer-events:none;
  background:linear-gradient(90deg,
    rgba(0,0,0,.58) 0%,
    rgba(0,0,0,.34) 52%,
    rgba(255,255,255,.09) 76%,
    rgba(0,0,0,.18) 100%);
}
/* 蒙版跟着书脊走，右侧不再压暗，留给纸页 */
html[data-theme] .lib-grid .lib-cover::after{
  background:
    linear-gradient(90deg,rgba(0,0,0,.26),transparent 13%),
    linear-gradient(180deg,rgba(0,0,0,.14),transparent 26%,transparent 72%,rgba(0,0,0,.32));
}
html[data-theme] .lib-grid .lib-card:hover .lib-cover img{transform:none}
html[data-theme] .lib-grid .lib-ph{padding-left:10px}
html[data-theme] .lib-grid .lib-active{
  left:auto;right:9px;top:9px;
  border-radius:2px;
  font-weight:500;letter-spacing:.5px;
  background:var(--panel-2);
  color:color-mix(in srgb,var(--accent) 85%,var(--text));
  border:1px solid color-mix(in srgb,var(--accent) 40%,var(--line));
  box-shadow:none;
}

/* 书封下方：像版权页，纯文字排版 */
html[data-theme] .lib-grid .lib-body{padding:14px 1px 0;gap:0}
html[data-theme] .lib-grid .lib-title{
  font-family:"Songti SC","Source Han Serif SC","Noto Serif SC",Georgia,serif;
  font-size:15.5px;font-weight:600;line-height:1.45;letter-spacing:.4px;
  white-space:normal;margin-bottom:6px;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;
}
html[data-theme] .lib-grid .lib-title:hover{color:var(--accent)}
html[data-theme] .lib-grid .lib-sub{margin-bottom:9px;min-height:0}
html[data-theme] .lib-grid .lib-genre{
  font-size:9.5px;line-height:1.7;padding:0 6px;border-radius:2px;
  background:transparent;border-color:var(--line);color:var(--muted);
}
html[data-theme] .lib-grid .lib-pen{font-size:10.5px;color:var(--muted-2)}
html[data-theme] .lib-grid .lib-desc{
  font-size:11.5px;line-height:1.75;color:var(--muted);
  -webkit-line-clamp:3;margin-bottom:11px;min-height:0;
}
html[data-theme] .lib-grid .lib-meta{
  font-size:10.5px;color:var(--muted-2);gap:0;
  padding-top:9px;border-top:1px solid var(--line-soft);margin-bottom:7px;
}
html[data-theme] .lib-grid .lib-meta > span + span::before{
  content:'\00B7';margin:0 7px;color:var(--muted-2);
}
html[data-theme] .lib-grid .lib-meta b{color:var(--text-soft);font-weight:600}
html[data-theme] .lib-grid .lib-progress-row{margin:0 0 11px}
html[data-theme] .lib-grid .lib-progress{height:3px;border-radius:0;background:var(--line-soft)}
html[data-theme] .lib-grid .lib-progress i{background:var(--accent);border-radius:0}
html[data-theme] .lib-grid .lib-pct{font-size:10px}
html[data-theme] .lib-grid .lib-actions{padding-top:0;gap:6px}
html[data-theme] .lib-grid .lib-actions .btn{height:28px;border-radius:6px;font-size:11.5px}

/* ============================================================
   灵感开局 · 故事前提编辑框
   ============================================================ */
.ko-premise-edit{
  width:100%;
  min-height:186px;
  padding:12px 14px;
  font-family:"Songti SC","Source Han Serif SC","Noto Serif SC",Georgia,"Microsoft YaHei",serif;
  font-size:12.5px;
  line-height:1.95;
  letter-spacing:.2px;
  resize:vertical;
}
.ko-premise-edit:focus{outline:none;border-color:color-mix(in srgb,var(--accent) 45%,var(--line))}

/* ============================================================
   文风档案 / 自检原文引用
   ============================================================ */
.pf-row{
  display:flex;gap:10px;align-items:flex-start;
  padding:5px 0;border-bottom:1px solid var(--line-soft);
  font-size:11.5px;line-height:1.7;
}
.pf-row:last-of-type{border-bottom:0}
.pf-row > span{flex:0 0 62px;color:var(--muted-2)}
.pf-row > b{flex:1;min-width:0;font-weight:400;color:var(--text-soft)}
.pf-li{font-size:11.5px;line-height:1.75;padding:2px 0}
.pf-li.ok{color:color-mix(in srgb,var(--ok) 70%,var(--text))}
.pf-li.bad{color:color-mix(in srgb,var(--danger) 72%,var(--text))}
.issue-quote{
  margin:5px 0 0;padding:6px 9px;border-radius:4px;
  border-left:2px solid color-mix(in srgb,var(--warn) 55%,var(--line));
  background:var(--input-bg);
  font-size:11.5px;line-height:1.75;color:var(--muted);
  font-family:"Songti SC","Source Han Serif SC",Georgia,serif;
}

/* ============================================================
   和小墨聊 · 模式切换 + 工具调用痕迹
   ============================================================ */
.chat-mode{
  display:flex;gap:2px;padding:2px;flex:0 0 auto;
  border-radius:7px;background:var(--input-bg);border:1px solid var(--line-soft);
}
.chat-mode button{
  padding:3px 9px;border:0;border-radius:5px;background:transparent;cursor:pointer;
  font-family:inherit;font-size:11.5px;line-height:1.6;color:var(--muted);
}
.chat-mode button:hover{color:var(--text)}
.chat-mode button.on{background:var(--panel-2);color:var(--text)}
.chat-trace{
  font-size:10.5px;line-height:1.7;color:var(--muted-2);
  padding:4px 9px;margin-top:3px;border-left:2px solid var(--line);
  word-break:break-word;
}

/* ============================================================
   灵感开局 · 人物勾选
   ============================================================ */
.ko-char{display:flex;gap:9px;align-items:flex-start}
.ko-char-pick{flex:0 0 auto;display:flex;align-items:center;padding-top:2px;cursor:pointer}
.ko-char-pick input{width:14px;height:14px;accent-color:var(--accent);cursor:pointer;margin:0}
.ko-char b{flex:0 0 auto;min-width:56px;color:var(--text)}
.ko-char b i{
  font-style:normal;font-size:10px;font-weight:400;color:var(--muted-2);
  margin-left:6px;padding:0 5px;border-radius:2px;border:1px solid var(--line-soft);
}
.ko-char.off b,
.ko-char.off span{opacity:.42;text-decoration:line-through}

/* 灵感开局 · 题材模板那一行 */
.ko-tpl{margin-top:6px;align-items:center}
.ko-samples-label{
  flex:0 0 auto;font-size:10.5px;letter-spacing:.5px;color:var(--muted-2);
  margin-right:2px;
}

/* ============================================================
   下拉框美化（题材 / 题材标签等所有 select）
   —— 原生 select 的展开列表由系统渲染，能美化的只有闭合态：
   自定义箭头、hover / focus 反馈、深色主题下让弹层也跟着变深。
   ============================================================ */
html[data-theme] select{
  -webkit-appearance:none;-moz-appearance:none;appearance:none;
  padding:8px 30px 8px 11px;
  font-size:12.5px;line-height:1.55;text-overflow:ellipsis;
  cursor:pointer;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M1 1l4 4 4-4' fill='none' stroke='%238f97a4' stroke-width='1.4' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
  background-repeat:no-repeat;
  background-position:right 11px center;
  background-size:10px 6px;
  transition:border-color .14s ease,background-color .14s ease,box-shadow .14s ease;
}
html[data-theme] select:hover{border-color:var(--line-strong);background-color:var(--panel-2)}
html[data-theme] select:focus{
  border-color:color-mix(in srgb,var(--accent) 52%,transparent);
  box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 12%,transparent);
}
/* 展开后的分组标题（部分浏览器可用） */
html[data-theme] select optgroup{font-style:normal;font-weight:600}
html[data-theme] select option{padding:4px 8px}
/* 让原生弹层跟随主题（深色主题下不再是一块白板） */
html[data-theme="dark"] select{
  color-scheme:dark;
  background-color:var(--panel-2);
  border-color:var(--line-strong);
}
html[data-theme="dark"] select:hover{background-color:var(--panel-3)}
html[data-theme="light"] select{
  color-scheme:light;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M1 1l4 4 4-4' fill='none' stroke='%238d7c63' stroke-width='1.4' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
}
/* 灵感开局的参数行：下拉框高度统一、标签字更轻 */
.ko-params select{height:34px}
.ko-params .field > .lbl{
  font-size:11px;letter-spacing:.2px;color:var(--muted-2);margin-bottom:6px;
}

/* ============================================================
   自绘下拉面板（列表长的才用，比如题材 37 项）
   U.enhanceSelect() 把原生 select 隐藏掉，改用 .dd-btn + .dd-panel 渲染
   ============================================================ */
.dd{position:relative;display:block;flex:0 0 auto;max-width:100%;vertical-align:middle}
.dd > select.dd-native{display:none}
.dd-btn{
  position:relative;width:100%;height:34px;display:flex;align-items:center;gap:8px;
  padding:0 30px 0 11px;border-radius:8px;cursor:pointer;text-align:left;
  border:1px solid var(--line-strong);background:var(--panel-2);color:var(--text);
  font:inherit;font-size:12.5px;
  transition:border-color .14s ease,background-color .14s ease,box-shadow .14s ease;
}
.dd-btn:disabled{opacity:.45;cursor:not-allowed;background:var(--panel-2)}
.dd-btn:hover{background:var(--panel-3);border-color:color-mix(in srgb,var(--accent) 32%,var(--line-strong))}
.dd-btn:disabled:hover{background:var(--panel-2);border-color:var(--line-strong)}
.dd-btn:focus{outline:none;border-color:color-mix(in srgb,var(--accent) 55%,transparent)}
.dd.open .dd-btn{
  background:var(--panel-3);
  border-color:color-mix(in srgb,var(--accent) 60%,transparent);
  box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 12%,transparent);
}
.dd-cur{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.dd-arrow{
  position:absolute;right:12px;top:50%;width:7px;height:7px;margin-top:-5px;
  border-right:1.5px solid var(--muted);border-bottom:1.5px solid var(--muted);
  transform:rotate(45deg);transition:transform .16s ease,margin-top .16s ease,border-color .14s ease;
}
.dd.open .dd-arrow{transform:rotate(-135deg);margin-top:-2px;border-color:var(--accent)}

.dd-panel{
  display:none;position:fixed;z-index:900;padding:5px;overflow:auto;
  max-height:min(320px,62vh);border-radius:10px;
  border:1px solid var(--line-strong);background:var(--panel);
  box-shadow:0 16px 36px rgba(0,0,0,.5),0 2px 8px rgba(0,0,0,.35);
}
.dd-group{
  display:flex;align-items:center;gap:8px;
  font-size:12.5px;font-weight:600;letter-spacing:1.2px;color:var(--text);
  padding:12px 9px 7px;user-select:none;
}
.dd-group::before{
  content:'';flex:0 0 auto;width:2px;height:12px;border-radius:1px;
  background:var(--accent);
}
.dd-group::after{
  content:'';flex:1 1 auto;height:1px;margin-left:2px;
  background:linear-gradient(90deg,var(--line-strong),transparent);
}
.dd-item{
  display:flex;align-items:center;height:29px;padding:0 9px;border-radius:6px;
  font-size:12.5px;color:var(--text-soft);cursor:pointer;
}
.dd-item .dd-txt{flex:1 1 auto;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.dd-item:hover{background:var(--panel-2);color:var(--text)}
.dd-item.on{
  background:color-mix(in srgb,var(--accent) 15%,transparent);
  color:var(--text);font-weight:600;
}
.dd-ck{
  flex:0 0 auto;width:9px;height:5px;margin-left:8px;margin-top:-3px;
  border-left:1.5px solid var(--accent);border-bottom:1.5px solid var(--accent);
  transform:rotate(-45deg);visibility:hidden;
}
.dd-item.on .dd-ck{visibility:visible}

html[data-theme="light"] .dd-btn{background:#fff;border-color:#e2ddd2}
html[data-theme="light"] .dd-btn:hover{background:#faf8f3}
html[data-theme="light"] .dd.open .dd-btn{background:#fff}
html[data-theme="light"] .dd-panel{
  background:#fff;border-color:#e2ddd2;
  box-shadow:0 16px 36px rgba(74,62,44,.16),0 2px 8px rgba(74,62,44,.08);
}
html[data-theme="light"] .dd-item:hover{background:#f4f1ea}
html[data-theme="light"] .dd-item.on{background:rgba(141,124,99,.13)}
html[data-theme="light"] .dd-group{color:#1c1b19}
html[data-theme="light"] .dd-group::before{background:#8d7c63}
html[data-theme="light"] .dd-group::after{background:linear-gradient(90deg,#d2cbbc,transparent)}

/* ============================================================
   手机 / 小平板（≤600px）：真的按手机版排
   —— 侧栏收成底部标签栏，顶栏只留标题，页面内边距收紧
   ============================================================ */

/* 底部标签栏（桌面不显示） */
.mnav{display:none}
/* 章节行的「⋯」按钮：桌面隐藏（桌面直接摆四个按钮），手机上才出现 */
html[data-theme] .ch-more{display:none}
html[data-theme] .row-menu{display:flex;flex-direction:column;gap:8px}
html[data-theme] .row-menu-item{
  display:flex;flex-direction:column;align-items:flex-start;gap:3px;
  padding:12px 14px;border-radius:10px;cursor:pointer;text-align:left;
  border:1px solid var(--line-soft);background:var(--panel-2);color:var(--text);font-family:inherit;
  transition:border-color .14s,background .14s;
}
html[data-theme] .row-menu-item b{font-size:13.5px;font-weight:600}
html[data-theme] .row-menu-item span{font-size:11.5px;color:var(--muted)}
html[data-theme] .row-menu-item:hover{border-color:var(--line-strong);background:var(--panel-3)}
html[data-theme] .row-menu-item.danger b{color:var(--danger)}
html[data-theme] .row-menu-item.danger:hover{border-color:color-mix(in srgb,var(--danger) 40%,transparent)}
/* 表格里的要点摘要最多两行，别把行撑高（章节大纲在 390px 下曾一行 220px） */
html[data-theme] .table .t-sub{
  display:-webkit-box;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;
  overflow:hidden;overflow-wrap:anywhere;
}
.msheet-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}
.msheet-item{
  position:relative;display:flex;flex-direction:column;align-items:center;gap:6px;
  padding:13px 6px 11px;border:1px solid var(--line-soft);border-radius:11px;
  background:var(--panel-2);color:var(--text-soft);font-family:inherit;font-size:11.5px;
  cursor:pointer;transition:border-color .14s,background .14s,color .14s;
}
.msheet-item .si{font-size:17px;line-height:1;color:var(--accent)}
.msheet-item:hover{border-color:var(--line-strong);color:var(--text)}
.msheet-item.on{
  border-color:color-mix(in srgb,var(--accent) 45%,transparent);
  background:color-mix(in srgb,var(--accent) 10%,transparent);color:var(--text);
}
.msheet-badge{
  position:absolute;top:5px;right:6px;font-style:normal;font-size:9.5px;line-height:1.6;
  padding:0 5px;border-radius:20px;background:var(--panel-3);color:var(--muted);
}
.msheet-badge.hot{background:color-mix(in srgb,var(--danger) 22%,transparent);color:var(--danger)}

@media (max-width:600px){
  /* ---- 外壳：单列 + 底部标签栏 ---- */
  #app{flex-direction:column;height:100vh;height:100dvh}
  .sidebar{display:none}
  .main{height:100%}
  .mnav{
    position:fixed;left:0;right:0;bottom:0;z-index:40;
    display:flex;gap:2px;
    min-height:56px;
    padding:6px 6px calc(9px + env(safe-area-inset-bottom));
    /* 不要用 backdrop-filter + 半透明：部分环境合成异常会整条变白，直接给实色最稳 */
    background:var(--panel);
    border-top:1px solid var(--line);
  }
  .mnav-item{
    flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;
    border:0;background:transparent;color:var(--muted);font-family:inherit;cursor:pointer;
    border-radius:10px;padding:4px 0;transition:color .14s,background .14s;
  }
  .mnav-item .mi{font-size:15px;line-height:1}
  .mnav-item .mt{font-size:10px;letter-spacing:.2px;white-space:nowrap}
  .mnav-item.on{color:var(--accent);background:color-mix(in srgb,var(--accent) 9%,transparent)}
  /* 底部弹层贴底 */
  .modal-sheet{
    position:fixed;left:0;right:0;bottom:0;width:100% !important;max-width:100%;
    border-radius:16px 16px 0 0;
    box-shadow:0 -12px 40px rgba(0,0,0,.5);
    animation:sheetUp .2s ease-out;
  }
  .modal-sheet .modal-body{padding:14px 14px 6px;max-height:60vh}
  .modal-sheet .modal-foot{border-radius:0;padding:10px 14px calc(10px + env(safe-area-inset-bottom))}

  /* ---- 顶栏：只留标题和主题按钮（860px 断点会把它改成竖排，这里改回一行） ---- */
  /* 手机上不要半透明：body 顶部有一层亮渐变，透出来就是“雾蒙蒙”一条 */
  html[data-theme]{
    background:var(--bg);   /* html 自己也要上色，否则状态栏/橡皮筋区域露白 */
  }
  html[data-theme] body{
    background:var(--bg);
    background-attachment:scroll;
  }
  html[data-theme] .topbar{
    flex-direction:row;align-items:center;justify-content:space-between;
    flex-wrap:nowrap;
    /* 主屏幕全屏时顶部会被状态栏/系统遮罩占住，标题要再往下让一点 */
    padding:calc(25px + env(safe-area-inset-top)) 14px 10px;
    gap:10px;
    background:var(--bg);
  }
  html[data-theme] .topbar h1{font-size:17px;letter-spacing:.2px}
  html[data-theme] .topbar p{display:none}
  html[data-theme] .topbar-actions .btn{height:30px;padding:0 10px}
  html[data-theme] .view{padding:12px 12px calc(80px + env(safe-area-inset-bottom))}

  /* ---- 通用收紧 ---- */
  html[data-theme] .panel{padding:13px;border-radius:11px}
  html[data-theme] .panel-head{margin-bottom:9px;gap:8px}
  html[data-theme] .panel-head h3{font-size:13.5px}
  html[data-theme] .empty{padding:36px 14px;border-radius:11px}
  html[data-theme] .empty h3{font-size:14px}
  html[data-theme] .tabs{gap:3px;margin-bottom:10px;overflow-x:auto;flex-wrap:nowrap}
  html[data-theme] .tab{flex:0 0 auto;padding:7px 11px;font-size:12.5px}
  html[data-theme] .section-title{margin:10px 0 5px}
  /* 驾驶舱三列看板在手机上会挤成一条，改成纵向堆叠 */
  html[data-theme] .kanban{grid-template-columns:1fr;gap:9px}
  html[data-theme] .kcol{min-height:0}
  html[data-theme] .stat-grid{gap:9px;margin-bottom:12px}
  /* 写作台：正文优先，并把正文撑满剩下的屏幕高度
     （140 = 顶栏 52 + view 上内边距 12 + 底部 Tab 58 + 余量 18） */
  html[data-theme] .studio-right{
    order:1;height:calc(100dvh - 140px);min-height:440px;
  }
  html[data-theme] .studio-left{order:2;max-height:none}
  /* 工具条一行横滑，不要占掉四行把正文挤没 */
  html[data-theme] .studio{grid-template-columns:minmax(0,1fr)}
  html[data-theme] .studio-right,
  html[data-theme] .studio-left{min-width:0}
  html[data-theme] .studio-toolbar{
    flex-wrap:nowrap;overflow-x:auto;overflow-y:hidden;gap:6px;
    padding-bottom:8px;-webkit-overflow-scrolling:touch;
    min-width:0;max-width:100%;
    /* 注意：这里千万不能加 mask-image —— 它会让工具栏里自绘下拉的 fixed 面板被裁掉，点了看不到 */
  }
  html[data-theme] .studio-toolbar > *{flex:0 0 auto}
  html[data-theme] .studio-toolbar::-webkit-scrollbar{height:0}
  html[data-theme] .studio-toolbar .btn{height:30px;font-size:12px;padding:0 10px}
  html[data-theme] .studio-toolbar .wc{margin-left:6px}
  html[data-theme] #content{
    flex:1;min-height:0;height:auto;padding:14px 15px;font-size:15px;line-height:1.95;
  }
  html[data-theme] .locked-banner{font-size:11.5px;padding:7px 10px;gap:7px}
  html[data-theme] .constraint-box{font-size:11px}

  /* 章节大纲：7 列表格在 390px 下会把要点压成竖排（一行 220px 高）→ 改成卡片 */
  html[data-theme] .ch-table{display:block;min-width:0}
  html[data-theme] .ch-table thead{display:none}
  html[data-theme] .ch-table tbody{display:block}
  html[data-theme] .ch-table tr{
    display:flex;flex-wrap:wrap;align-items:center;gap:3px 9px;
    padding:11px 13px 10px 31px;   /* 左边给章号留位 */
    border-bottom:1px solid var(--line-soft);
    position:relative;   /* 章号、操作按钮都被绝对定位 */
  }
  html[data-theme] .ch-table td{display:block;padding:0;border:0;min-width:0}
  html[data-theme] .ch-table td:nth-child(1){
    position:absolute;left:11px;top:11px;width:16px;
    color:var(--muted-2);font-size:11.5px;text-align:center;
  }
  html[data-theme] .ch-table td:nth-child(3){order:4;flex:0 0 auto}
  /* 节奏类型这一行手机上先不要，留白省下来 */
  html[data-theme] .ch-table td:nth-child(3) .t-sub{display:none}
  /* 章名 + 要点独占整行，不再被旁边的元信息挤压 */
  html[data-theme] .ch-table td:nth-child(2){order:2;flex:1 1 100%;min-width:0}
  /* 章名单行，右边留出「写作 + ⋯」的位置 */
  html[data-theme] .ch-table td:nth-child(2) .t-title{
    font-size:14px;line-height:1.45;padding-right:92px;
    white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
  }
  /* 要点只留一行，想读全文点「编辑」 */
  html[data-theme] .ch-table td:nth-child(2) .t-sub{
    margin-top:3px;font-size:11.5px;line-height:1.55;
    -webkit-line-clamp:1;line-clamp:1;
  }
  html[data-theme] .ch-table td:nth-child(4),
  html[data-theme] .ch-table td:nth-child(5),
  html[data-theme] .ch-table td:nth-child(6){order:5;font-size:11px;color:var(--muted-2)}
  /* 操作按钮：贴到每章章名右侧，不独占一行（原来占满整行，太碎） */
  html[data-theme] .ch-table td:nth-child(7){
    position:absolute;right:12px;top:7px;
    display:flex;gap:5px;align-items:center;
  }  html[data-theme] .ch-table td:nth-child(7) .btn{
    flex:0 0 auto;height:26px;font-size:11.5px;padding:0 11px;
  }
  /* 手机上只留「写作」+「⋯」，编辑 / 交付 / 删除 收进「⋯」 */
  html[data-theme] .ch-table td:nth-child(7) [data-act="edit"],
  html[data-theme] .ch-table td:nth-child(7) [data-act="next"],
  html[data-theme] .ch-table td:nth-child(7) [data-act="del"]{display:none}
  html[data-theme] .ch-table td:nth-child(7) .ch-more{
    display:inline-flex;flex:0 0 30px;height:26px;padding:0;justify-content:center;
    align-items:center;font-size:13px;line-height:1;
    color:var(--muted);border-color:var(--line-soft);background:transparent;
  }
  /* 关系图 / 热力图这类宽图保持横滑，不要撑破页面 */
  html[data-theme] .rel-canvas{overflow-x:auto}
  html[data-theme] .heat-wrap{overflow-x:auto}

  /* ---- 书库：横向列表（封面在左，书名/简介/数据在右），比竖卡片好扫读 ---- */
  /* 列表视图的封面原来只有 40px，而书封是 480×660（≈3:4），40×83 会把左右裁掉三分之一 */
  html[data-theme] .lib-list .lib-cover{width:60px;flex:0 0 60px}
  html[data-theme] .lib-list .lib-ph-frame span{font-size:18px}
  html[data-theme] .lib-list .lib-card{min-height:0}

  html[data-theme] .lib-grid{grid-template-columns:minmax(0,1fr);gap:10px}
  html[data-theme] .lib-grid .lib-card{
    flex-direction:row;align-items:stretch;gap:12px;
    padding:10px;border:1px solid var(--line-soft);border-radius:12px;
    background:var(--panel);overflow:hidden;box-shadow:none;
  }
  html[data-theme] .lib-grid .lib-card:hover{
    transform:none;border-color:var(--line-soft);box-shadow:none;
  }
  html[data-theme] .lib-grid .lib-cover{
    width:76px;flex:0 0 76px;height:104px;aspect-ratio:auto;align-self:flex-start;
    border-radius:3px;
    border:1px solid var(--line);
    box-shadow:none !important;
  }
  html[data-theme] .lib-grid .lib-cover::before{width:4px}
  html[data-theme] .lib-grid .lib-cover-tip{display:none}
  /* 封面只有 62px 宽：题材 / 首字 / 书名都留着，只是把字号压到能放下的程度 */
  html[data-theme] .lib-grid .lib-ph{padding-left:4px}
  html[data-theme] .lib-grid .lib-ph-frame{
    width:calc(100% - 10px);height:calc(100% - 10px);
    border:1px solid color-mix(in srgb,var(--accent) 22%,var(--line));
    border-radius:3px;padding:5px 3px;gap:2px;
  }
  html[data-theme] .lib-grid .lib-ph-frame small{
    font-size:7.5px;letter-spacing:0;line-height:1.2;
    white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;
  }
  html[data-theme] .lib-grid .lib-ph-frame span{font-size:20px;text-shadow:none}
  html[data-theme] .lib-grid .lib-ph-frame em{
    display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;
    font-size:7.5px;line-height:1.25;white-space:normal;max-width:100%;
  }
  html[data-theme] .lib-grid .lib-active{display:none}
  html[data-theme] .lib-grid .lib-body{
    flex:1 1 0;min-width:0;padding:1px 0 0;
    display:flex;flex-direction:column;
  }
  html[data-theme] .lib-grid .lib-title{
    font-size:14.5px;line-height:1.4;margin-bottom:3px;letter-spacing:0;
    -webkit-line-clamp:1;line-clamp:1;
  }
  html[data-theme] .lib-grid .lib-sub{flex-wrap:wrap;gap:5px;margin-bottom:5px}
  html[data-theme] .lib-grid .lib-desc{
    font-size:11px;line-height:1.6;margin-bottom:7px;
    -webkit-line-clamp:2;line-clamp:2;
  }
  html[data-theme] .lib-grid .lib-meta{
    flex-wrap:wrap;white-space:normal;font-size:10.5px;gap:0 6px;
    padding-top:0;border-top:0;margin-bottom:0;
  }
  html[data-theme] .lib-grid .lib-meta > span + span::before{content:'\00B7';margin:0 6px}
  html[data-theme] .lib-grid .lib-progress-row{margin:7px 0 0}
  html[data-theme] .lib-grid .lib-actions{flex-wrap:nowrap;gap:6px;margin-top:8px;padding-top:0}
  html[data-theme] .lib-grid .lib-actions .btn{height:29px;font-size:12px;flex:0 0 auto;padding:0 16px}

  /* ---- 扫榜：卡片一列，筛选条压成一行横滑 ---- */
  html[data-theme] .rk-grid{grid-template-columns:1fr}
  html[data-theme] .rk-bar{flex-wrap:nowrap;gap:8px;align-items:center;overflow:hidden}
  html[data-theme] .rk-seg,
  html[data-theme] .rk-chips{
    display:flex;flex-wrap:nowrap;overflow-x:auto;overflow-y:hidden;
    gap:6px;padding-bottom:4px;
  }
  html[data-theme] .rk-seg{flex:1 1 auto;min-width:0}
  html[data-theme] .rk-seg-item,
  html[data-theme] .rk-chips > *{flex:0 0 auto}
  html[data-theme] .rk-seg::-webkit-scrollbar,
  html[data-theme] .rk-chips::-webkit-scrollbar{height:0}
  html[data-theme] .rk-bar .spacer{display:none}

  /* ---- 弹窗铺满 ---- */
  html[data-theme] .mask{padding:10px 8px}
  html[data-theme] .modal{width:100% !important;max-width:100%;border-radius:12px}
  html[data-theme] .modal-lg{width:100% !important}
  html[data-theme] .modal-body{max-height:66vh;padding:14px 14px}
  html[data-theme] .modal-head{padding:12px 14px}
  html[data-theme] .modal-foot{flex-wrap:wrap;gap:6px;justify-content:flex-end;padding:10px 14px}
  html[data-theme] .modal-foot .btn{height:30px;font-size:12px}
  html[data-theme] .form-grid{grid-template-columns:1fr}

  /* ---- 工具栏换行，别把搜索框压成一条线 ---- */
  html[data-theme] .toolbar{flex-wrap:wrap;gap:8px}
  html[data-theme] .toolbar input[type=text]{max-width:none;flex:1 1 100%}
  html[data-theme] .toolbar .btn{flex:0 0 auto}
}

@keyframes sheetUp{from{transform:translateY(28px);opacity:.5}to{transform:none;opacity:1}}











