/* ============================================
   创作工坊样式（novel.css 扩展版）
   工作台：Tab 导航 + 8 大模块面板
   ============================================ */

/* ---------- 工作台整体 ---------- */
.ws-main { min-height: calc(100vh - 62px); }
.container-wide { width: min(1280px, 96%); margin: 0 auto; }

.ws-bar {
  background: var(--paper-deep);
  border-bottom: 1px solid var(--paper-line);
  position: sticky;
  top: 62px;
  z-index: 80;
}
.ws-bar-inner {
  display: flex;
  align-items: center;
  gap: 1rem;
  flex-wrap: wrap;
  padding: .55rem 0;
}
.ws-project {
  display: flex;
  align-items: center;
  gap: .6rem;
  margin-right: auto;
}
.ws-project-name {
  font-family: var(--font-title);
  font-size: 1.05rem;
  letter-spacing: .1em;
  color: var(--ink);
  background: transparent;
  border: none;
  border-bottom: 1px dashed var(--paper-line);
  outline: none;
  padding: .1rem .2rem;
  max-width: 160px;
  transition: border-color .2s var(--ease);
}
.ws-project-name:focus { border-bottom-color: var(--cinnabar); }

.ws-ai-status {
  display: flex;
  align-items: center;
  gap: .35rem;
  font-size: .72rem;
  color: var(--ink-faint);
}

.ws-tabs {
  display: flex;
  gap: .2rem;
  flex-wrap: wrap;
}
.ws-tab {
  font-family: var(--font-title);
  font-size: .88rem;
  letter-spacing: .06em;
  color: var(--ink-soft);
  background: transparent;
  border: none;
  border-bottom: 2px solid transparent;
  padding: .35rem .65rem;
  cursor: pointer;
  transition: all .2s var(--ease);
  white-space: nowrap;
}
.ws-tab:hover { color: var(--cinnabar); }
.ws-tab.active {
  color: var(--cinnabar);
  border-bottom-color: var(--cinnabar);
  font-weight: 600;
}
.ws-tabs.mini .ws-tab { font-size: .8rem; padding: .25rem .5rem; }

.ws-tools { display: flex; gap: .4rem; }
.ws-tool {
  font-family: var(--font-title);
  font-size: .78rem;
  letter-spacing: .05em;
  color: var(--ink-soft);
  background: transparent;
  border: 1px solid var(--paper-line);
  border-radius: 3px;
  padding: .25rem .6rem;
  cursor: pointer;
  transition: all .2s var(--ease);
  white-space: nowrap;
}
.ws-tool:hover { color: var(--cinnabar); border-color: var(--cinnabar); }
.ws-tool.primary {
  color: var(--cinnabar);
  border-color: var(--cinnabar);
  background: var(--cinnabar-soft);
}
.ws-tool.primary:hover { background: var(--cinnabar); color: #f7ead8; }

/* ---------- Tab 面板 ---------- */
.ws-panel { display: none; }
.ws-panel.active { display: block; }

.ws-toolbar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
  flex-wrap: wrap;
  padding: .8rem 1.2rem;
  border-bottom: 1px dashed var(--paper-line);
}
.ws-tip { font-size: .82rem; color: var(--ink-faint); margin: 0; }

/* ---------- 写作面板（三栏：章节 | 编辑 | AI 侧栏） ---------- */
.ws-writing {
  display: grid;
  grid-template-columns: 240px 1fr 300px;
}
.novel-side {
  border-right: 1px solid var(--paper-line);
  background: var(--paper-deep);
  display: flex;
  flex-direction: column;
  max-height: calc(100vh - 130px);
  position: sticky;
  top: 130px;
}
.side-foot {
  padding: .7rem 1rem;
  border-top: 1px solid var(--paper-line);
  font-size: .78rem;
  color: var(--ink-faint);
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: .3rem;
  flex-wrap: wrap;
}
.side-foot b { color: var(--cinnabar); font-weight: 600; }
.side-head {
  display: flex;
  align-items: center;
  gap: .4rem;
  padding: .9rem 1rem;
  border-bottom: 1px solid var(--paper-line);
}
.side-head h2 { font-size: 1rem; letter-spacing: .15em; margin-right: auto; color: var(--ink); }
.side-btn {
  font-family: var(--font-title);
  font-size: .78rem;
  letter-spacing: .05em;
  color: var(--cinnabar);
  background: transparent;
  border: 1px solid var(--cinnabar);
  border-radius: 3px;
  padding: .18rem .5rem;
  cursor: pointer;
  transition: all .2s var(--ease);
  white-space: nowrap;
}
.side-btn:hover { background: var(--cinnabar-soft); }
.side-btn.ghost { color: var(--ink-soft); border-color: var(--paper-line); }
.side-btn.ghost:hover { color: var(--cinnabar); border-color: var(--cinnabar); background: transparent; }

.side-list { flex: 1; overflow-y: auto; padding: .6rem; }
.volume-group { margin-bottom: .8rem; }
.volume-head {
  display: flex;
  align-items: center;
  gap: .3rem;
  font-family: var(--font-title);
  font-size: .88rem;
  color: var(--ink);
  padding: .3rem .4rem;
  cursor: pointer;
  border-radius: 3px;
  user-select: none;
}
.volume-head:hover { background: var(--paper); }
.volume-head .v-caret { font-size: .6rem; color: var(--gold); transition: transform .2s var(--ease); }
.volume-head.collapsed .v-caret { transform: rotate(-90deg); }
.volume-head .v-del { margin-left: auto; opacity: 0; border: none; background: none; color: var(--ink-faint); cursor: pointer; font-size: .75rem; }
.volume-head:hover .v-del { opacity: 1; }
.volume-head .v-del:hover { color: var(--cinnabar); }

.chapter-item {
  display: flex;
  align-items: center;
  gap: .35rem;
  padding: .38rem .5rem .38rem 1.1rem;
  font-size: .86rem;
  color: var(--ink-soft);
  border-radius: 3px;
  cursor: pointer;
  border-left: 2px solid transparent;
  transition: all .15s var(--ease);
}
.chapter-item:hover { background: var(--paper); color: var(--ink); }
.chapter-item.active { background: var(--cinnabar-soft); color: var(--cinnabar-deep); border-left-color: var(--cinnabar); font-weight: 600; }
.chapter-item .c-title { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.chapter-item .c-del { opacity: 0; border: none; background: none; color: var(--ink-faint); cursor: pointer; font-size: .72rem; }
.chapter-item:hover .c-del { opacity: 1; }
.chapter-item .c-del:hover { color: var(--cinnabar); }

.novel-editor { display: flex; flex-direction: column; min-height: calc(100vh - 130px); }
.editor-empty { flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: .8rem; color: var(--ink-faint); }
.editor-empty .ph-icon { font-size: 2.6rem; }
.editor-box { flex: 1; display: flex; flex-direction: column; padding: 1.6rem 2rem 1rem; max-width: 780px; margin: 0 auto; width: 100%; }
.editor-title {
  font-family: var(--font-title);
  font-size: 1.5rem;
  letter-spacing: .08em;
  color: var(--ink);
  background: transparent;
  border: none;
  border-bottom: 1px solid var(--paper-line);
  padding: .4rem 0 .7rem;
  outline: none;
  transition: border-color .2s var(--ease);
}
.editor-title:focus { border-bottom-color: var(--cinnabar); }
.editor-body {
  flex: 1;
  min-height: 320px;
  margin-top: .9rem;
  font-family: var(--font-body);
  font-size: 1.02rem;
  line-height: 2;
  color: var(--ink);
  background: transparent;
  border: none;
  outline: none;
  resize: none;
  padding: .4rem 0;
}
.editor-status { display: flex; align-items: center; gap: .5rem; padding: .5rem 0 .3rem; font-size: .78rem; color: var(--ink-faint); border-top: 1px dashed var(--paper-line); margin-top: .6rem; }

.status-dot { width: 7px; height: 7px; border-radius: 50%; display: inline-block; background: var(--ink-faint); }
.status-dot.ok { background: #5c8a4a; }
.status-dot.busy { background: var(--gold); }
.status-dot.err { background: var(--cinnabar); }

/* ---------- 素材 / 人物 面板 ---------- */
.mat-layout {
  display: grid;
  grid-template-columns: 1fr 380px;
  gap: 1rem;
  padding: 1rem 1.2rem;
}
.mat-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(190px, 1fr));
  gap: .8rem;
  align-content: start;
}
.mat-card {
  background: var(--paper-deep);
  border: 1px solid var(--paper-line);
  border-radius: var(--radius-card);
  padding: .9rem 1rem;
  cursor: pointer;
  transition: all .2s var(--ease);
  position: relative;
}
.mat-card:hover { transform: translateY(-2px); border-color: var(--gold); box-shadow: var(--shadow-2); }
.mat-card h4 {
  font-size: .98rem;
  color: var(--ink);
  margin-bottom: .3rem;
  padding-right: 1.4rem;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.mat-card .mat-tags { font-size: .72rem; color: var(--ink-faint); margin-bottom: .35rem; }
.mat-card .mat-preview {
  font-size: .78rem;
  color: var(--ink-soft);
  line-height: 1.7;
  display: -webkit-box;
  -webkit-line-clamp: 3;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
.mat-card .mat-del {
  position: absolute;
  top: .4rem;
  right: .45rem;
  border: none;
  background: none;
  color: var(--ink-faint);
  cursor: pointer;
  font-size: .7rem;
  opacity: 0;
  transition: opacity .15s;
}
.mat-card:hover .mat-del { opacity: 1; }
.mat-card .mat-del:hover { color: var(--cinnabar); }

.mat-editor {
  background: var(--paper-deep);
  border: 1px solid var(--paper-line);
  border-radius: var(--radius-card);
  padding: 1rem 1.2rem;
  align-self: start;
  position: sticky;
  top: 130px;
  max-height: calc(100vh - 150px);
  overflow-y: auto;
}
.me-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: .8rem; border-bottom: 1px dashed var(--paper-line); padding-bottom: .6rem; }
.me-head h3 { font-size: 1.05rem; color: var(--ink); letter-spacing: .08em; }
.me-body { display: flex; flex-direction: column; gap: .6rem; }
.me-body label { font-size: .78rem; color: var(--ink-faint); letter-spacing: .1em; }
.me-body input[type="text"], .me-body textarea, .me-body select {
  font-family: var(--font-body);
  font-size: .9rem;
  color: var(--ink);
  background: var(--paper);
  border: 1px solid var(--paper-line);
  border-radius: 3px;
  padding: .4rem .55rem;
  outline: none;
  width: 100%;
  transition: border-color .2s var(--ease);
}
.me-body input[type="text"]:focus, .me-body textarea:focus, .me-body select:focus { border-color: var(--cinnabar); }
.me-body textarea { min-height: 70px; resize: vertical; line-height: 1.7; }
.me-body .me-field { display: flex; flex-direction: column; gap: .25rem; }
.me-body .me-actions { display: flex; gap: .5rem; margin-top: .5rem; }
.me-body .me-actions .ws-tool { flex: 1; padding: .4rem 0; }
.me-body .me-del {
  color: var(--cinnabar);
  border-color: var(--cinnabar);
  background: none;
}
.me-empty { text-align: center; color: var(--ink-faint); padding: 2rem 0; font-size: .88rem; }

/* ---------- 关系面板 ---------- */
.rel-layout { display: grid; grid-template-columns: 1fr 380px; gap: 1rem; padding: 1rem 1.2rem; }
.rel-canvas {
  min-height: 420px;
  position: relative;
  overflow: hidden;
  display: flex;
  align-items: center;
  justify-content: center;
}
.rel-empty { color: var(--ink-faint); font-size: .88rem; text-align: center; padding: 1.5rem; }
.rel-table { padding: 1rem 1.2rem; max-height: calc(100vh - 150px); overflow-y: auto; }
.rel-table h3 { font-size: .95rem; margin-bottom: .6rem; color: var(--ink); letter-spacing: .1em; }
.rel-row {
  display: grid;
  grid-template-columns: 1fr auto 1fr;
  align-items: center;
  gap: .4rem;
  font-size: .82rem;
  color: var(--ink-soft);
  padding: .3rem 0;
  border-bottom: 1px dashed var(--paper-line);
}
.rel-row .rel-rel { color: var(--cinnabar); font-size: .75rem; text-align: center; letter-spacing: .05em; }
.rel-row .rel-del { border: none; background: none; color: var(--ink-faint); cursor: pointer; font-size: .7rem; }
.rel-row .rel-del:hover { color: var(--cinnabar); }
.rel-node {
  position: absolute;
  transform: translate(-50%, -50%);
  background: var(--paper);
  border: 1px solid var(--gold);
  border-radius: 50%;
  width: 74px;
  height: 74px;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  font-size: .68rem;
  color: var(--ink);
  cursor: default;
  box-shadow: var(--shadow-1);
  text-align: center;
  padding: .3rem;
  overflow: hidden;
}
.rel-node .n-name { font-family: var(--font-title); font-size: .78rem; font-weight: 600; max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.rel-node .n-rel { font-size: .62rem; color: var(--ink-faint); max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.rel-node.core { background: var(--cinnabar); border-color: var(--cinnabar-deep); color: #f7ead8; }
.rel-node.core .n-rel { color: rgba(247, 234, 216, .8); }

/* ---------- 大纲 / 伏笔 / 时间线 列表 ---------- */
.list-editor-layout { display: grid; grid-template-columns: 1fr 420px; gap: 1rem; padding: 1rem 1.2rem; }
.ws-list { display: flex; flex-direction: column; gap: .6rem; padding: 1rem 1.2rem; }
.ws-item {
  background: var(--paper-deep);
  border: 1px solid var(--paper-line);
  border-left: 3px solid var(--gold);
  border-radius: 0 var(--radius) var(--radius) 0;
  padding: .8rem 1rem;
  cursor: pointer;
  transition: all .2s var(--ease);
}
.ws-item:hover { border-left-color: var(--cinnabar); box-shadow: var(--shadow-1); transform: translateX(2px); }
.ws-item h4 { font-size: .95rem; color: var(--ink); margin-bottom: .2rem; }
.ws-item .ws-item-meta { font-size: .72rem; color: var(--ink-faint); margin-bottom: .25rem; letter-spacing: .05em; }
.ws-item .ws-item-meta .tag { color: var(--gold); border: 1px solid var(--gold-soft); padding: 0 .35rem; border-radius: 2px; margin-left: .3rem; font-size: .66rem; }
.ws-item p { font-size: .84rem; color: var(--ink-soft); line-height: 1.8; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; }

.fs-list { padding: 1rem 1.2rem; }
.fs-item .fs-status { display: inline-block; font-size: .68rem; border-radius: 2px; padding: 0 .4rem; margin-left: .4rem; letter-spacing: .1em; }
.fs-item .fs-status.planted { color: var(--gold); border: 1px solid var(--gold-soft); }
.fs-item .fs-status.payed { color: #5c8a4a; border: 1px solid rgba(92, 138, 74, .5); }

/* ---------- 时间线 ---------- */
.tl-wrap { position: relative; padding: 1.5rem 1.2rem 1rem 2.2rem; }
.tl-wrap::before {
  content: "";
  position: absolute;
  left: 16px;
  top: 10px;
  bottom: 10px;
  width: 1px;
  background: linear-gradient(180deg, var(--gold), var(--paper-line));
}
.tl-item { position: relative; padding: 0 0 1.2rem 1.2rem; cursor: pointer; }
.tl-item::before {
  content: "";
  position: absolute;
  left: -1.55rem;
  top: .45rem;
  width: 11px;
  height: 11px;
  border-radius: 50%;
  background: var(--paper);
  border: 2px solid var(--gold);
}
.tl-item h4 { font-size: .95rem; color: var(--ink); }
.tl-item .tl-time { font-size: .72rem; color: var(--cinnabar); letter-spacing: .08em; margin-bottom: .2rem; }
.tl-item p { font-size: .84rem; color: var(--ink-soft); line-height: 1.8; }

/* ---------- AI 工坊面板 ---------- */
.ai-workshop { max-width: 720px; margin: 0 auto; padding: 2rem 1.2rem; display: flex; flex-direction: column; gap: .9rem; }
.ai-ws-head { text-align: center; }
.ai-ws-head h2 { font-size: 1.5rem; color: var(--ink); letter-spacing: .12em; margin-bottom: .4rem; }
.ai-ws-quick { display: grid; grid-template-columns: repeat(3, 1fr); gap: .5rem; }
.ai-qbtn {
  font-family: var(--font-title);
  font-size: .85rem;
  letter-spacing: .06em;
  color: var(--ink-soft);
  background: var(--paper-deep);
  border: 1px solid var(--paper-line);
  border-radius: 4px;
  padding: .55rem .4rem;
  cursor: pointer;
  transition: all .2s var(--ease);
}
.ai-qbtn:hover { color: var(--cinnabar); border-color: var(--cinnabar); background: var(--cinnabar-soft); }
.ai-ws-input textarea {
  width: 100%;
  font-family: var(--font-body);
  font-size: .92rem;
  line-height: 1.8;
  color: var(--ink);
  background: var(--paper-deep);
  border: 1px solid var(--paper-line);
  border-radius: 4px;
  padding: .7rem .8rem;
  outline: none;
  resize: vertical;
  transition: border-color .2s var(--ease);
}
.ai-ws-input textarea:focus { border-color: var(--cinnabar); }

/* ---------- 模块 + 右侧 AI 栏 ---------- */
.mod-shell { display: grid; grid-template-columns: 1fr 300px; gap: 1rem; align-items: start; }
.mod-shell > .mod-main { min-width: 0; }
.mod-side {
  border-left: 1px solid var(--paper-line);
  border-radius: 0 var(--radius-card) var(--radius-card) 0;
  /* 延伸到底：铺满视口剩余高度，内容超出时栏内滚动 */
  max-height: none;
  height: calc(100vh - 130px);
}
.mod-side .ai-drawer-input { min-height: 72px; }
.mod-side .ai-drawer-result-body { min-height: 90px; }

/* AI 设置浮层（全局） */
.ai-settings.floating {
  position: fixed;
  top: 76px;
  right: 16px;
  width: 340px;
  max-width: calc(100vw - 32px);
  max-height: calc(100vh - 96px);
  overflow-y: auto;
  z-index: 300;
  box-shadow: var(--shadow-2);
}
.ai-test-msg { font-size: .78rem; color: var(--ink-soft); background: var(--paper); border: 1px dashed var(--paper-line); border-radius: 4px; padding: .5rem .6rem; white-space: pre-wrap; word-break: break-word; line-height: 1.7; margin: 0; }
.ai-test-msg[hidden] { display: none; }
.ai-test-msg.ok { color: var(--gold); border-color: var(--gold); }
.ai-test-msg.err { color: var(--cinnabar); border-color: var(--cinnabar); }

/* ---------- AI 设置面板 ---------- */
.ai-settings {
  background: var(--paper-deep);
  border: 1px solid var(--paper-line);
  border-radius: var(--radius-card);
  padding: 1rem 1.2rem;
  text-align: left;
}
.ai-settings-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  border-bottom: 1px dashed var(--paper-line);
  padding-bottom: .6rem;
  margin-bottom: .8rem;
}
.ai-settings-head h3 { font-size: 1rem; color: var(--ink); letter-spacing: .1em; }
.ai-settings-body { display: flex; flex-direction: column; gap: .65rem; }
.ai-settings-body select, .ai-settings-body input[type="text"], .ai-settings-body input[type="password"] {
  font-family: var(--font-body);
  font-size: .9rem;
  color: var(--ink);
  background: var(--paper);
  border: 1px solid var(--paper-line);
  border-radius: 3px;
  padding: .4rem .55rem;
  outline: none;
  width: 100%;
  box-sizing: border-box;
  transition: border-color .2s var(--ease);
}
.ai-settings-body select:focus, .ai-settings-body input:focus { border-color: var(--cinnabar); }
.set-model-row { display: flex; gap: .4rem; }
.set-model-row select { flex: 1; }
.set-model-row input { flex: 1; }
.ai-current {
  font-size: .8rem;
  color: var(--ink-soft);
  background: var(--paper);
  border: 1px dashed var(--paper-line);
  border-radius: 3px;
  padding: .4rem .6rem;
}
.ai-settings .me-actions { margin-top: .3rem; }
.ai-send {
  font-family: var(--font-title);
  font-size: .98rem;
  letter-spacing: .25em;
  color: #f7ead8;
  background: var(--cinnabar);
  border: 1px solid var(--cinnabar-deep);
  border-radius: 4px;
  padding: .6rem 0;
  cursor: pointer;
  transition: all .2s var(--ease);
  box-shadow: var(--shadow-seal);
}
.ai-send:hover:not(:disabled) { background: var(--cinnabar-deep); }
.ai-send:disabled { opacity: .55; cursor: not-allowed; }
.ai-result {
  border: 1px solid var(--paper-line);
  border-radius: 4px;
  background: var(--paper-deep);
  display: flex;
  flex-direction: column;
  max-height: 55vh;
  overflow: hidden;
}
.ai-result-head { display: flex; align-items: center; gap: .4rem; padding: .45rem .6rem; font-size: .78rem; color: var(--ink-soft); border-bottom: 1px dashed var(--paper-line); }
.ai-result-head span { margin-right: auto; }
.ai-result-head button { font-size: .72rem; color: var(--ink-soft); background: none; border: 1px solid var(--paper-line); border-radius: 3px; padding: .1rem .4rem; cursor: pointer; transition: all .15s var(--ease); }
.ai-result-head button:hover { color: var(--cinnabar); border-color: var(--cinnabar); }
.ai-result-body { flex: 1; overflow-y: auto; padding: .7rem .8rem; font-size: .88rem; line-height: 1.9; color: var(--ink); white-space: pre-wrap; word-break: break-word; }
.ai-result[hidden] { display: none; }
.ai-drawer-result[hidden] { display: none; }
.ai-hint { font-size: .72rem; color: var(--ink-faint); text-align: center; }

/* ---------- 写作页 AI 侧栏 ---------- */
.ai-drawer {
  border-left: 1px solid var(--paper-line);
  background: var(--paper-deep);
  display: flex;
  flex-direction: column;
  gap: .6rem;
  padding: .9rem .9rem;
  max-height: calc(100vh - 130px);
  position: sticky;
  top: 130px;
  overflow-y: auto;
}
.ai-drawer-head { display: flex; align-items: center; justify-content: space-between; }
.ai-drawer-head h3 { font-size: .98rem; color: var(--ink); letter-spacing: .12em; }
.ai-drawer .ai-status { display: flex; align-items: center; gap: .35rem; font-size: .72rem; color: var(--ink-faint); }
.ai-drawer-quick { display: grid; grid-template-columns: repeat(3, 1fr); gap: .4rem; }
.ai-drawer .ai-qbtn {
  font-family: var(--font-title);
  font-size: .8rem;
  letter-spacing: .15em;
  color: var(--ink-soft);
  background: var(--paper);
  border: 1px solid var(--paper-line);
  border-radius: 3px;
  padding: .38rem 0;
  cursor: pointer;
  transition: all .2s var(--ease);
}
.ai-drawer .ai-qbtn:hover { color: var(--cinnabar); border-color: var(--cinnabar); background: var(--cinnabar-soft); }
.ai-drawer-input {
  width: 100%;
  font-family: var(--font-body);
  font-size: .85rem;
  line-height: 1.7;
  color: var(--ink);
  background: var(--paper);
  border: 1px solid var(--paper-line);
  border-radius: 4px;
  padding: .5rem .6rem;
  outline: none;
  resize: vertical;
  min-height: 64px;
  transition: border-color .2s var(--ease);
  box-sizing: border-box;
}
.ai-drawer-input:focus { border-color: var(--cinnabar); }
.ai-drawer-send {
  font-family: var(--font-title);
  font-size: .9rem;
  letter-spacing: .2em;
  color: #f7ead8;
  background: var(--cinnabar);
  border: 1px solid var(--cinnabar-deep);
  border-radius: 4px;
  padding: .5rem 0;
  cursor: pointer;
  transition: all .2s var(--ease);
  box-shadow: var(--shadow-seal);
}
.ai-drawer-send:hover:not(:disabled) { background: var(--cinnabar-deep); }
.ai-drawer-send:disabled { opacity: .55; cursor: not-allowed; }
.ai-drawer-result {
  border: 1px solid var(--paper-line);
  border-radius: 4px;
  background: var(--paper);
  display: flex;
  flex-direction: column;
  max-height: 44vh;
  overflow: hidden;
}
.ai-drawer-result-head {
  display: flex;
  align-items: center;
  gap: .35rem;
  padding: .4rem .5rem;
  font-size: .76rem;
  color: var(--ink-soft);
  border-bottom: 1px dashed var(--paper-line);
}
.ai-drawer-result-head span { margin-right: auto; }
.ai-drawer-result-head .ws-tool { font-size: .68rem; padding: .08rem .35rem; }
.ai-drawer-result-body {
  flex: 1;
  overflow-y: auto;
  padding: .6rem .7rem;
  font-size: .84rem;
  line-height: 1.85;
  color: var(--ink);
  white-space: pre-wrap;
  word-break: break-word;
}

/* 章节重命名输入框 */
.c-rename-input {
  flex: 1;
  min-width: 0;
  font-family: var(--font-body);
  font-size: .82rem;
  color: var(--ink);
  background: var(--paper);
  border: 1px solid var(--cinnabar);
  border-radius: 3px;
  padding: .1rem .3rem;
  outline: none;
}

/* ---------- 登录覆盖层 ---------- */
.auth-overlay {
  position: fixed;
  inset: 0;
  background: var(--paper);
  z-index: 200;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 1rem;
}
.auth-overlay.hidden { display: none; }
.auth-card {
  width: min(400px, 94%);
  background: var(--paper-deep);
  border: 1px solid var(--paper-line);
  border-radius: var(--radius-lg);
  padding: 2.2rem 2rem;
  text-align: center;
  box-shadow: var(--shadow-2);
}
.auth-logo {
  width: 56px;
  height: 56px;
  margin: 0 auto .8rem;
  border-radius: 50%;
  background: var(--cinnabar);
  color: #f7ead8;
  font-size: 1.4rem;
  display: flex;
  align-items: center;
  justify-content: center;
  box-shadow: var(--shadow-seal);
}
.auth-card h2 { font-size: 1.3rem; color: var(--ink); letter-spacing: .12em; margin-bottom: .3rem; }
.auth-sub { font-size: .82rem; color: var(--ink-faint); margin-bottom: 1.3rem; }
.auth-field { margin-bottom: .8rem; }
.auth-field input {
  width: 100%;
  box-sizing: border-box;
  font-family: var(--font-body);
  font-size: .92rem;
  color: var(--ink);
  background: var(--paper);
  border: 1px solid var(--paper-line);
  border-radius: 4px;
  padding: .6rem .8rem;
  outline: none;
  transition: border-color .2s var(--ease);
}
.auth-field input:focus { border-color: var(--cinnabar); }
.auth-err {
  min-height: 1.1rem;
  font-size: .78rem;
  color: var(--cinnabar);
  margin-bottom: .4rem;
}
.auth-btn { width: 100%; padding: .65rem 0; }
.auth-switch { font-size: .82rem; color: var(--ink-faint); margin-top: 1rem; }
.auth-toggle {
  background: none;
  border: none;
  color: var(--cinnabar);
  font-size: .84rem;
  cursor: pointer;
  font-family: var(--font-title);
  letter-spacing: .05em;
}
.auth-hint {
  font-size: .7rem;
  color: var(--ink-faint);
  margin-top: 1.2rem;
  line-height: 1.7;
}
.ws-user {
  display: flex;
  align-items: center;
  gap: .45rem;
  font-size: .8rem;
  color: var(--ink-soft);
}
.ws-user b { color: var(--cinnabar); font-weight: 600; }
.ws-user button {
  font-size: .72rem;
  color: var(--ink-faint);
  background: none;
  border: 1px solid var(--paper-line);
  border-radius: 3px;
  padding: .12rem .4rem;
  cursor: pointer;
  transition: all .15s var(--ease);
}
.ws-user button:hover { color: var(--cinnabar); border-color: var(--cinnabar); }

/* ---------- 书籍管理 ---------- */
.ws-book { position: relative; }
.ws-book-btn {
  font-family: var(--font-title);
  font-size: .95rem;
  letter-spacing: .06em;
  color: var(--ink);
  background: var(--paper);
  border: 1px solid var(--paper-line);
  border-radius: 4px;
  padding: .35rem .7rem;
  cursor: pointer;
  transition: all .2s var(--ease);
  white-space: nowrap;
}
.ws-book-btn:hover { border-color: var(--cinnabar); color: var(--cinnabar); }
.ws-book-btn .book-caret { font-size: .6rem; color: var(--gold); margin-left: .2rem; }
.book-panel {
  position: absolute;
  left: 0;
  top: calc(100% + 6px);
  width: 280px;
  background: var(--paper-deep);
  border: 1px solid var(--paper-line);
  border-radius: var(--radius-card);
  box-shadow: var(--shadow-2);
  padding: .8rem .9rem;
  z-index: 120;
  display: flex;
  flex-direction: column;
  gap: .6rem;
}
.book-panel[hidden] { display: none; }
.book-panel-head { display: flex; align-items: center; justify-content: space-between; }
.book-panel-head h4 { font-size: .92rem; color: var(--ink); letter-spacing: .1em; }
.book-list { display: flex; flex-direction: column; gap: .3rem; max-height: 300px; overflow-y: auto; }
.book-item {
  display: flex;
  align-items: center;
  gap: .4rem;
  padding: .42rem .55rem;
  font-size: .88rem;
  color: var(--ink-soft);
  border: 1px solid var(--paper-line);
  border-radius: 3px;
  cursor: pointer;
  transition: all .15s var(--ease);
}
.book-item:hover { border-color: var(--gold); color: var(--ink); }
.book-item.active {
  background: var(--cinnabar-soft);
  border-color: var(--cinnabar);
  color: var(--cinnabar-deep);
  font-weight: 600;
}
.book-item .b-name { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.book-item .b-del {
  border: none;
  background: none;
  color: var(--ink-faint);
  cursor: pointer;
  font-size: .72rem;
  opacity: 0;
}
.book-item:hover .b-del { opacity: 1; }
.book-item .b-del:hover { color: var(--cinnabar); }
.book-new { display: flex; gap: .4rem; }
.book-new input {
  flex: 1;
  min-width: 0;
  font-family: var(--font-body);
  font-size: .84rem;
  color: var(--ink);
  background: var(--paper);
  border: 1px solid var(--paper-line);
  border-radius: 3px;
  padding: .35rem .5rem;
  outline: none;
  box-sizing: border-box;
  transition: border-color .2s var(--ease);
}
.book-new input:focus { border-color: var(--cinnabar); }
.book-hint { font-size: .68rem; color: var(--ink-faint); text-align: center; margin: 0; }

/* ---------- 批量删除模式 ---------- */
.mat-card.batch, .ws-item.batch, .tl-item.batch { cursor: pointer; }
.mat-card.batch.selected, .ws-item.batch.selected, .tl-item.batch.selected {
  border-color: var(--cinnabar);
  background: var(--cinnabar-soft);
  box-shadow: 0 0 0 1px var(--cinnabar) inset;
}
.mat-card.batch::before, .ws-item.batch::before, .tl-item.batch::before {
  content: "";
  position: absolute;
  right: .5rem;
  top: .5rem;
  width: 15px;
  height: 15px;
  border: 1px solid var(--cinnabar);
  border-radius: 50%;
  background: var(--paper);
}
.mat-card.batch.selected::before, .ws-item.batch.selected::before, .tl-item.batch.selected::before {
  content: "✓";
  font-size: 11px;
  line-height: 15px;
  text-align: center;
  color: #f7ead8;
  background: var(--cinnabar);
}
.ws-item.batch, .tl-item.batch { position: relative; }
.tl-item.batch { border: 1px solid var(--paper-line); border-radius: 4px; padding: .4rem .8rem .4rem 1.6rem; margin-bottom: .5rem; }
.tl-item.batch::before { left: .5rem; right: auto; top: .5rem; }

/* ---------- 响应式 ---------- */
@media (max-width: 1200px) {
  .ws-writing { grid-template-columns: 210px 1fr; }
  .ai-drawer {
    position: fixed;
    right: 0;
    top: 130px;
    bottom: 0;
    width: 300px;
    transform: translateX(100%);
    transition: transform .3s var(--ease);
    box-shadow: -6px 0 20px rgba(43, 42, 38, .12);
    z-index: 90;
    max-height: none;
  }
  .ai-drawer.open { transform: translateX(0); }
  .ai-fab {
    position: fixed;
    right: 1rem;
    bottom: 1.2rem;
    z-index: 95;
    width: 52px;
    height: 52px;
    border-radius: 50%;
    background: var(--cinnabar);
    color: #f7ead8;
    font-family: var(--font-title);
    font-size: 1rem;
    letter-spacing: .1em;
    border: 1px solid var(--cinnabar-deep);
    box-shadow: var(--shadow-seal);
    cursor: pointer;
  }
  /* 模块右侧 AI 栏：窄屏改为静态堆叠，不被写作页抽屉规则影响 */
  .mod-shell { grid-template-columns: 1fr; }
  .mod-shell > .mod-side {
    position: static;
    transform: none;
    width: auto;
    max-height: none;
    height: auto;
    box-shadow: none;
    border-left: none;
    border-top: 1px solid var(--paper-line);
    border-radius: 0;
  }
}
@media (max-width: 1100px) {
  .mat-layout, .rel-layout, .list-editor-layout { grid-template-columns: 1fr; }
  .mat-editor { position: static; max-height: none; }
}
@media (max-width: 720px) {
  .ws-writing { grid-template-columns: 1fr; }
  .novel-side { position: static; max-height: 34vh; border-right: none; border-bottom: 1px solid var(--paper-line); }
  .editor-box { padding: 1rem 1.1rem; }
  .ai-ws-quick { grid-template-columns: repeat(2, 1fr); }
}
