/* Shared functional components, isolated from the landing page. */
@scope (.portal-ui) {
/* 控件 */
.input, .select, .textarea { width: 100%; background: var(--bg2); border: 1px solid var(--border-hi); border-radius: var(--radius);
  padding: 8px 11px; outline: none; transition: border-color .15s, box-shadow .15s; min-height: 36px; }
.input:focus, .select:focus, .textarea:focus { border-color: var(--accent); box-shadow: 0 0 0 3px rgba(0,212,170,0.12); }
.select { appearance: none; padding-right: 28px; background-image: linear-gradient(45deg, transparent 50%, var(--text3) 50%), linear-gradient(135deg, var(--text3) 50%, transparent 50%);
  background-position: calc(100% - 15px) 52%, calc(100% - 10px) 52%; background-size: 5px 5px; background-repeat: no-repeat; }
.select option { background: var(--bg2); }
.textarea { resize: vertical; line-height: 1.7; }
input[type=date].input { color-scheme: dark; }
.btn { display: inline-flex; align-items: center; justify-content: center; gap: 6px; padding: 7px 14px; border-radius: var(--radius); border: 1px solid var(--border-hi);
  background: var(--bg3); cursor: pointer; white-space: nowrap; min-height: 34px; text-decoration: none !important; color: var(--text); }
.btn:hover { background: var(--bg4); }
.btn:disabled { opacity: .45; cursor: not-allowed; }
.btn.primary { background: var(--accent); border-color: var(--accent); color: #04120f; font-weight: 600; }
.btn.primary:hover { background: var(--accent-d); }
.btn.ghost { background: transparent; }
.btn.danger { color: var(--danger); border-color: rgba(239,68,68,.35); background: transparent; }
.btn.sm { padding: 3px 10px; min-height: 28px; font-size: 13px; }
.icon-btn { background: none; border: none; cursor: pointer; color: var(--text2); font-size: 16px; padding: 4px 8px; border-radius: var(--radius); }
.icon-btn:hover { background: var(--bg3); color: var(--text); }
.link-btn { background: none; border: none; color: var(--accent); cursor: pointer; padding: 0; }
.link-btn:hover { text-decoration: underline; }
.field { display: flex; flex-direction: column; gap: 5px; }
.field > span { white-space: nowrap; font-size: 13px; color: var(--text2); } .field > span em { color: var(--danger); font-style: normal; }
.form-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 14px 16px; }
.form-grid .wide { grid-column: 1 / -1; }
.check { white-space: nowrap; display: inline-flex; align-items: center; gap: 6px; cursor: pointer; color: var(--text2); user-select: none; }
.check input { accent-color: var(--accent); width: 15px; height: 15px; }

/* 卡片与标签 */
.card { background: var(--bg1); border: 1px solid var(--border); border-radius: var(--radius-lg); padding: 18px; }
.card + .card { margin-top: 14px; }
.card-head { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin-bottom: 12px; }
.grid { display: grid; gap: 14px; }
.grid.cols-2 { grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); }
.grid.cols-3 { grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); }
.grid.cols-5 { grid-template-columns: repeat(auto-fill, minmax(170px, 1fr)); }
.tag { display: inline-flex; align-items: center; padding: 1px 8px; border-radius: 999px; font-size: 12px; background: var(--bg3); color: var(--text2); border: 1px solid var(--border); white-space: nowrap; }
.tag.accent { background: var(--accent-bg); color: var(--accent); border-color: rgba(0,212,170,.25); }
.tag.blue { background: rgba(59,130,246,.12); color: #7fb0ff; border-color: rgba(59,130,246,.25); }
.tag.warn { background: rgba(245,158,11,.12); color: var(--warn); border-color: rgba(245,158,11,.25); }
.tag.danger { background: rgba(239,68,68,.12); color: #f87171; border-color: rgba(239,68,68,.25); }
.tag.purple { background: rgba(139,92,246,.14); color: #b9a2ff; border-color: rgba(139,92,246,.25); }
.stat { background: var(--bg1); border: 1px solid var(--border); border-radius: var(--radius-lg); padding: 14px 16px; }
.stat b { display: block; font-size: 22px; font-family: var(--mono); color: var(--text); }
.stat span { color: var(--text3); font-size: 12px; }
.empty { text-align: center; color: var(--text3); padding: 40px 16px; }
.empty h3 { color: var(--text2); margin-bottom: 6px; }
.notice { padding: 10px 14px; border-radius: var(--radius); background: rgba(245,158,11,.08); border: 1px solid rgba(245,158,11,.25); color: #f5c46b; font-size: 13px; }
.notice.info { background: var(--accent-bg); border-color: rgba(0,212,170,.25); color: var(--accent); }
.kv { display: grid; grid-template-columns: 120px 1fr; gap: 8px 14px; font-size: 14px; }
.kv dt { color: var(--text3); } .kv dd { color: var(--text); word-break: break-word; white-space: pre-wrap; }
.progress { height: 6px; background: var(--bg3); border-radius: 999px; overflow: hidden; }
.progress > i { display: block; height: 100%; background: linear-gradient(90deg, var(--accent), var(--blue)); }
.spinner { width: 14px; height: 14px; border: 2px solid var(--border-hi); border-top-color: var(--accent); border-radius: 50%; animation: spin .8s linear infinite; display: inline-block; vertical-align: -2px; }
@keyframes spin { to { transform: rotate(360deg); } }

/* 表格 */
.table-wrap { overflow-x: auto; border: 1px solid var(--border); border-radius: var(--radius-lg); }
table.table { width: 100%; border-collapse: collapse; font-size: 13.5px; }
.table th { text-align: left; font-weight: 500; color: var(--text3); background: var(--bg2); padding: 9px 12px; white-space: nowrap; }
.table td { padding: 9px 12px; border-top: 1px solid var(--border); vertical-align: top; }
.table tr:hover td { background: rgba(255,255,255,0.015); }

/* 标签页 */
.tabs { display: flex; gap: 4px; border-bottom: 1px solid var(--border); margin-bottom: 18px; overflow-x: auto; }
.tabs a, .tabs button { padding: 9px 14px; color: var(--text2); border: none; background: none; cursor: pointer; border-bottom: 2px solid transparent; white-space: nowrap; text-decoration: none !important; }
.tabs .active { color: var(--accent); border-bottom-color: var(--accent); }
.chips { display: flex; gap: 6px; flex-wrap: wrap; }
.chip { padding: 5px 12px; border-radius: 999px; border: 1px solid var(--border-hi); background: var(--bg2); color: var(--text2); cursor: pointer; font-size: 13px; white-space: nowrap; text-decoration: none !important; }
.chip:hover { color: var(--text); border-color: var(--text3); }
.chip.active { background: var(--accent-bg); color: var(--accent); border-color: rgba(0,212,170,.4); }
.chip small { color: var(--text3); margin-left: 4px; font-family: var(--mono); }

/* 首页 */
.hero { padding: 34px 30px; border-radius: 14px; background: radial-gradient(ellipse at top left, rgba(0,212,170,.16), transparent 60%), var(--bg1); border: 1px solid var(--border); margin-bottom: 20px; }
.hero h1 { font-size: 26px; } .hero p { color: var(--text2); margin: 6px 0 18px; }
.hero form { display: flex; gap: 10px; max-width: 680px; } .hero .input { min-height: 44px; font-size: 15px; }
.cat-card { display: flex; flex-direction: column; gap: 4px; padding: 14px 16px; border-radius: var(--radius-lg); background: var(--bg1); border: 1px solid var(--border); color: var(--text); text-decoration: none !important; transition: border-color .15s, transform .15s; }
.cat-card:hover { border-color: rgba(0,212,170,.45); transform: translateY(-1px); }
.cat-card b { font-size: 15px; } .cat-card .num { font-family: var(--mono); font-size: 20px; color: var(--accent); }
.cat-card small { color: var(--text3); font-size: 12px; }
.entry-card { display: flex; gap: 14px; align-items: flex-start; padding: 16px; border-radius: var(--radius-lg); background: var(--bg1); border: 1px solid var(--border); color: var(--text); text-decoration: none !important; }
.entry-card:hover { border-color: rgba(0,212,170,.45); }
.entry-card .ico { font-size: 20px; width: 40px; height: 40px; border-radius: 10px; display: grid; place-items: center; background: var(--accent-bg); color: var(--accent); flex-shrink: 0; }
.entry-card p { color: var(--text2); font-size: 13px; }

/* 资料列表 */
.filters { display: flex; gap: 10px; flex-wrap: wrap; align-items: center; margin-bottom: 14px; }
.filters .input, .filters .select { width: auto; min-width: 130px; }
.filters .grow { flex: 1; min-width: 220px; }
.rec-list { display: flex; flex-direction: column; }
.rec-item { display: block; padding: 13px 16px; border-bottom: 1px solid var(--border); color: var(--text); text-decoration: none !important; }
.rec-item:hover { background: var(--bg1); }
.rec-item .t { font-size: 15px; font-weight: 500; }
.rec-item .m { display: flex; gap: 8px; flex-wrap: wrap; align-items: center; color: var(--text3); font-size: 12.5px; margin-top: 4px; }
.rec-item .s { color: var(--text2); font-size: 13px; margin-top: 4px; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
mark { background: rgba(245,158,11,.28); color: inherit; border-radius: 2px; padding: 0 1px; }
.pager { display: flex; gap: 8px; align-items: center; justify-content: center; margin-top: 16px; color: var(--text2); }
.detail-head h1 { font-size: 21px; line-height: 1.45; margin: 8px 0; }
.detail-meta { display: flex; gap: 10px; flex-wrap: wrap; color: var(--text2); font-size: 13px; align-items: center; }
.content-text { white-space: pre-wrap; line-height: 1.9; color: var(--text); font-size: 14.5px; }
.att-list { display: flex; flex-direction: column; gap: 6px; }
.att { display: flex; align-items: center; gap: 10px; padding: 8px 12px; background: var(--bg2); border-radius: var(--radius); border: 1px solid var(--border); }
.att .name { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.section-title { font-size: 13px; color: var(--text3); letter-spacing: .06em; margin: 20px 0 10px; }

/* 智能问答 */
.qa { display: flex; flex: 1; min-height: 0; }
.qa-side { width: 240px; flex-shrink: 0; border-right: 1px solid var(--border); background: var(--bg1); display: flex; flex-direction: column; }
.qa-side .head { padding: 12px; } .conv-list { flex: 1; overflow-y: auto; padding: 0 8px 12px; }
.conv { display: flex; align-items: center; gap: 6px; padding: 8px 10px; border-radius: var(--radius); color: var(--text2); cursor: pointer; font-size: 13px; }
.conv span { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.conv:hover { background: var(--bg2); } .conv.active { background: var(--accent-bg); color: var(--accent); }
.conv .icon-btn { visibility: hidden; font-size: 12px; } .conv:hover .icon-btn { visibility: visible; }
.qa-main { flex: 1; display: flex; flex-direction: column; min-width: 0; }
.qa-scroll { flex: 1; overflow-y: auto; padding: 22px 0; }
.qa-inner { max-width: 860px; margin: 0 auto; padding: 0 24px; }
.msg { margin-bottom: 22px; }
.msg.user .bubble { margin-left: auto; max-width: 80%; background: var(--bg3); border-radius: 12px 12px 2px 12px; padding: 10px 14px; white-space: pre-wrap; width: fit-content; }
.msg.assistant .bubble { padding: 2px 0; }
.trace { display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 8px; }
.trace .step { font-size: 12px; padding: 2px 10px; border-radius: 999px; background: var(--bg2); border: 1px solid var(--border); color: var(--text2); display: inline-flex; gap: 6px; align-items: center; }
.trace .step.fail { color: #f87171; }
.cite { display: inline-block; font-size: 11px; font-family: var(--mono); padding: 0 5px; margin: 0 1px; border-radius: 4px; background: var(--accent-bg); color: var(--accent); cursor: pointer; vertical-align: 2px; line-height: 1.5; border: none; }
.cite:hover { background: var(--accent); color: #04120f; }
.sources { margin-top: 12px; display: grid; grid-template-columns: repeat(auto-fill, minmax(250px, 1fr)); gap: 8px; }
.source { padding: 9px 12px; border-radius: var(--radius); background: var(--bg1); border: 1px solid var(--border); font-size: 13px; transition: border-color .2s; }
.source.flash { border-color: var(--accent); }
.source .top { display: flex; gap: 6px; align-items: center; margin-bottom: 3px; }
.source .top .id { font-family: var(--mono); color: var(--accent); font-size: 12px; }
.source .title { color: var(--text); display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.source .sub { color: var(--text3); font-size: 12px; margin-top: 2px; }
.msg-actions { display: flex; gap: 6px; margin-top: 8px; }
.msg-actions .icon-btn.on { color: var(--accent); }
.composer { border-top: 1px solid var(--border); padding: 14px 24px 18px; background: var(--bg1); }
.composer .box { max-width: 860px; margin: 0 auto; background: var(--bg2); border: 1px solid var(--border-hi); border-radius: 12px; padding: 10px 12px; }
.composer textarea { width: 100%; border: none; background: none; outline: none; resize: none; min-height: 44px; max-height: 200px; }
.composer .bar { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin-top: 6px; }
.suggest { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 10px; margin-top: 20px; }
.suggest button { text-align: left; padding: 12px 14px; border-radius: var(--radius-lg); border: 1px solid var(--border); background: var(--bg1); color: var(--text2); cursor: pointer; }
.suggest button:hover { border-color: rgba(0,212,170,.45); color: var(--text); }
.caret::after { content: '▍'; animation: blink 1s steps(2) infinite; color: var(--accent); }
@keyframes blink { 50% { opacity: 0; } }

/* Markdown */
.md { line-height: 1.8; word-break: break-word; }
.md > * + * { margin-top: .7em; }
.md h1, .md h2, .md h3, .md h4 { margin-top: 1.1em; } .md h1 { font-size: 19px; } .md h2 { font-size: 17px; } .md h3 { font-size: 15.5px; }
.md ul, .md ol { padding-left: 1.5em; } .md li + li { margin-top: .25em; }
.md code { font-family: var(--mono); background: var(--bg3); padding: 1px 5px; border-radius: 4px; font-size: .92em; }
.md pre { background: var(--bg2); padding: 12px; border-radius: var(--radius); overflow-x: auto; } .md pre code { background: none; padding: 0; }
.md blockquote { border-left: 3px solid var(--border-hi); padding-left: 12px; color: var(--text2); }
.md .table-scroll { overflow-x: auto; }
.md table { border-collapse: collapse; font-size: 13.5px; min-width: 60%; }
.md th, .md td { border: 1px solid var(--border-hi); padding: 6px 10px; vertical-align: top; }
.md th { background: var(--bg2); font-weight: 500; }
.md hr { border: none; border-top: 1px solid var(--border); }
.md .hint-tag { display: inline-block; font-size: 11px; padding: 0 6px; margin-right: 6px; border-radius: 4px; background: rgba(59,130,246,.18); color: #7fb0ff; vertical-align: 1px; }
.md blockquote:has(.hint-tag) { border-left-color: rgba(59,130,246,.6); color: #9fb6d8; font-size: 13px; }
.md .placeholder { background: rgba(245,158,11,.14); color: #f5c46b; border-radius: 3px; padding: 0 3px; }

/* 申报工作台 */
.proj-card { display: block; padding: 16px; border-radius: var(--radius-lg); background: var(--bg1); border: 1px solid var(--border); color: var(--text); text-decoration: none !important; }
.proj-card:hover { border-color: rgba(0,212,170,.45); }
.proj-card .code { font-family: var(--mono); color: var(--text3); font-size: 12px; }
.proj-card h3 { margin: 4px 0 8px; }
.ws { display: flex; flex: 1; min-height: 0; flex-direction: column; }
.ws-head { padding: 14px 24px 0; border-bottom: 1px solid var(--border); background: var(--bg1); }
.ws-head .tabs { border-bottom: none; margin-bottom: 0; }
.ws-body { flex: 1; overflow-y: auto; padding: 20px 24px 40px; min-height: 0; }
.ws-body.split { display: flex; padding: 0; overflow: hidden; }
.tree { width: 330px; flex-shrink: 0; border-right: 1px solid var(--border); overflow-y: auto; background: var(--bg1); padding: 10px 8px 30px; }
.tree .tools { display: flex; gap: 8px; align-items: center; padding: 4px 6px 10px; }
.tree .ch { font-size: 12px; color: var(--text3); padding: 12px 8px 4px; letter-spacing: .04em; display: flex; justify-content: space-between; }
.tree .grp { font-size: 12.5px; color: var(--text2); padding: 6px 8px 2px; font-weight: 500; }
.tree .it { display: flex; align-items: center; gap: 8px; padding: 6px 8px; border-radius: var(--radius); cursor: pointer; font-size: 13px; color: var(--text2); }
.tree .it:hover { background: var(--bg2); color: var(--text); }
.tree .it.active { background: var(--accent-bg); color: var(--accent); }
.tree .it .no { font-family: var(--mono); font-size: 11.5px; color: var(--text3); flex-shrink: 0; min-width: 62px; }
.tree .it .tt { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.dot { width: 8px; height: 8px; border-radius: 50%; flex-shrink: 0; background: var(--bg4); border: 1px solid var(--text3); }
.dot.s-editing { background: var(--warn); border-color: var(--warn); } .dot.s-done { background: var(--accent); border-color: var(--accent); }
.dot.s-missing { background: var(--danger); border-color: var(--danger); } .dot.s-na { background: transparent; border-style: dashed; opacity: .5; }
.editor-pane { flex: 1; overflow-y: auto; padding: 20px 26px 60px; min-width: 0; }
.editor-toolbar { display: flex; gap: 8px; flex-wrap: wrap; align-items: center; margin: 12px 0; }
.editor-area { min-height: 380px; font-family: var(--sans); font-size: 14px; }
.req-box { background: var(--bg2); border: 1px solid var(--border); border-radius: var(--radius); padding: 10px 14px; color: var(--text2); font-size: 13px; white-space: pre-wrap; }
.ai-panel { border: 1px solid rgba(0,212,170,.35); border-radius: var(--radius-lg); background: rgba(0,212,170,.04); padding: 14px 16px; margin: 12px 0; }
.ai-panel .head { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin-bottom: 8px; }
.ai-panel .out { max-height: 520px; overflow-y: auto; }
.preview-box { border: 1px solid var(--border); border-radius: var(--radius); padding: 14px 18px; min-height: 380px; background: var(--bg1); }

/* 弹窗与提示 */
.modal-mask { position: fixed; inset: 0; background: rgba(3,6,14,.65); display: grid; place-items: center; z-index: 900; padding: 16px; }
.modal { width: 520px; max-width: 100%; max-height: 90vh; overflow-y: auto; background: var(--bg1); border: 1px solid var(--border-hi); border-radius: 12px; box-shadow: var(--shadow); padding: 20px 22px; }
.modal.wide { width: 760px; }
.modal h2 { margin-bottom: 14px; }
.modal .foot { display: flex; justify-content: flex-end; gap: 10px; margin-top: 18px; }
.toast-wrap { position: fixed; top: 16px; right: 16px; display: flex; flex-direction: column; gap: 8px; z-index: 1000; }
.toast { padding: 10px 16px; border-radius: var(--radius); background: var(--bg3); border: 1px solid var(--border-hi); box-shadow: var(--shadow); max-width: 380px; font-size: 13.5px; }
.toast.ok { border-color: rgba(0,212,170,.5); } .toast.err { border-color: rgba(239,68,68,.6); color: #fca5a5; }

/* 登录 */
.auth-wrap { min-height: 100%; display: grid; place-items: center; padding: 30px 16px; }
.auth-card { width: 420px; max-width: 100%; background: var(--bg1); border: 1px solid var(--border-hi); border-radius: 14px; padding: 28px; box-shadow: var(--shadow); }
.auth-card h1 { margin-bottom: 4px; } .auth-card p.sub { color: var(--text2); margin-bottom: 18px; }
.auth-card form { display: flex; flex-direction: column; gap: 14px; }

/* 论文 */
.paper { padding: 14px 16px; border-bottom: 1px solid var(--border); }
.paper .title { font-weight: 500; font-size: 15px; color: var(--text); cursor: pointer; background: none; border: none; text-align: left; padding: 0; }
.paper .title:hover { color: var(--accent); }
.paper .meta { color: var(--text3); font-size: 12.5px; }
.paper .authors { color: var(--text2); font-size: 13px; }
.paper .actions { display: flex; gap: 8px; margin-top: 8px; flex-wrap: wrap; }

@media (max-width: 900px) {
  .sidebar { position: fixed; z-index: 800; height: 100%; transform: translateX(-100%); transition: transform .2s; }
  .sidebar.open { transform: none; box-shadow: var(--shadow); }
  .menu-btn { display: inline-block; }
  .top-search { display: none; }
  .view { padding: 16px; }
  .qa-side { display: none; }
  .tree { width: 240px; }
  .kv { grid-template-columns: 90px 1fr; }
}
@media (max-width: 640px) {
  .ws-body.split { flex-direction: column; overflow-y: auto; }
  .tree { width: 100%; max-height: 40vh; border-right: none; border-bottom: 1px solid var(--border); }
  .editor-pane { overflow: visible; }
}

/* ── 资料编制（对齐原型：纸张画布 + 工具栏 + AI 编辑助手） ── */
.ws-body.split { display: grid; grid-template-columns: 270px minmax(0, 1fr) 340px; }
.ws-body.split.ai-closed { grid-template-columns: 270px minmax(0, 1fr) 0; }
.ws-body.split.ai-closed .ed-ai { display: none; }
.ws-body.split .tree { width: auto; }
.ed-main { display: flex; flex-direction: column; min-width: 0; min-height: 0; background: var(--bg0); }
.ed-head { display: flex; align-items: center; justify-content: space-between; gap: 8px 12px; padding: 10px 18px 6px; flex-wrap: wrap; }
.ed-actions .select { min-height: 30px; padding: 3px 26px 3px 8px; font-size: 12.5px; }
.ed-title { display: flex; align-items: center; gap: 10px; min-width: 0; }
.ed-title h2 { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.ed-actions { display: flex; gap: 6px; align-items: center; flex-wrap: wrap; }
.ed-req { margin: 0 18px 8px; font-size: 13px; color: var(--text2); }
.ed-req summary { cursor: pointer; color: var(--text3); }
.ed-req > div { margin-top: 6px; background: var(--bg2); border: 1px solid var(--border); border-radius: var(--radius); padding: 8px 12px; white-space: pre-wrap; max-height: 140px; overflow-y: auto; }
.tpl-bar { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; margin: 0 18px 8px; padding: 5px 10px; border-radius: var(--radius);
  background: rgba(59,130,246,.08); border: 1px solid rgba(59,130,246,.25); color: #9fc2ff; font-size: 13px; }
.ed-toolbar { display: flex; align-items: center; gap: 2px; padding: 6px 14px; background: var(--bg1); border-top: 1px solid var(--border); border-bottom: 1px solid var(--border); flex-wrap: wrap; }
.tool-btn { background: none; border: none; color: var(--text2); padding: 4px 9px; border-radius: 4px; font-size: 12.5px; cursor: pointer; min-width: 28px; }
.tool-btn:hover { background: var(--bg3); color: var(--text); }
.tool-divider { width: 1px; height: 18px; background: var(--border); margin: 0 4px; }
.ed-legend { margin-left: auto; display: flex; gap: 12px; align-items: center; font-size: 11.5px; color: var(--text3); }
.ed-legend .sw { display: inline-block; width: 10px; height: 10px; border-radius: 2px; margin-right: 4px; vertical-align: -1px; }
.ed-legend .sw.field { background: rgba(0,212,170,.35); } .ed-legend .sw.placeholder { background: rgba(245,158,11,.4); }
.save-ind { font-size: 11.5px; } .save-ind.ok { color: var(--accent); } .save-ind.dirty { color: var(--warn); } .save-ind.err { color: var(--danger); }
.ed-canvas { flex: 1; overflow-y: auto; padding: 26px 34px 40px; background: #eef0f4; min-height: 0; }
.paper { background: #fff; max-width: 760px; margin: 0 auto; padding: 46px 56px; border-radius: 4px; box-shadow: 0 4px 18px rgba(0,0,0,.18); color: #2c3038; }
.paper + .paper { margin-top: 16px; padding: 22px 30px; }
.paper .doc { min-height: 420px; outline: none; font-family: var(--sans); font-size: 13.5px; line-height: 1.8; color: #2c3038; }
.paper .doc.is-empty::before { content: '在此编写本目录项内容。可「按模板开始」，或让右侧 AI 起草；也可直接粘贴 Word 内容。'; color: #a0a7b4; }
.paper .doc h1 { font-size: 18px; margin: 18px 0 10px; color: #111; }
.paper .doc h2 { font-size: 15.5px; margin: 18px 0 8px; color: #1a1f2e; padding-bottom: 4px; border-bottom: 1px solid #e4e7ec; }
.paper .doc h3, .paper .doc h4 { font-size: 14px; margin: 14px 0 6px; color: #1a1f2e; }
.paper .doc p { margin: 0 0 8px; }
.paper .doc ul, .paper .doc ol { padding-left: 24px; margin: 6px 0 10px; }
.paper .doc table { width: 100%; border-collapse: collapse; margin: 8px 0 12px; font-size: 12.5px; }
.paper .doc th, .paper .doc td { border: 1px solid #d3d9e3; padding: 5px 9px; text-align: left; vertical-align: top; min-width: 40px; }
.paper .doc th { background: #f3f5f9; font-weight: 600; }
.paper .doc img { max-width: 100%; height: auto; margin: 8px 0; border-radius: 3px; }
.paper .doc blockquote { border-left: 3px solid #d3d9e3; padding-left: 10px; color: #5a6270; }
.paper .doc .field { background: rgba(0,212,170,.18); border-bottom: 1px dashed rgba(0,160,130,.7); padding: 0 3px; border-radius: 2px; }
.paper .doc .placeholder { background: rgba(245,158,11,.2); color: #8a5a00; border-bottom: 1px dashed rgba(245,158,11,.8); padding: 0 3px; border-radius: 2px; cursor: pointer; }
.paper .doc .hint { background: #eef4ff; border-left: 3px solid #6b9cf5; color: #4a6593; font-size: 12px; padding: 6px 10px; margin: 4px 0 10px; border-radius: 0 4px 4px 0; user-select: none; }
.paper .doc .hint::before { content: '编写提示'; font-weight: 600; margin-right: 8px; color: #3d6fd8; }
.paper .doc.hide-hints .hint { display: none; }
.paper .doc sup.cite { color: #00a884; font-size: 10px; }
.paper-files .section-title { color: #6b7387; }
.paper-files .att { background: #f6f8fb; border-color: #e4e7ec; color: #2c3038; }
.upload-zone { margin-top: 10px; border: 2px dashed #c9d1dd; border-radius: 8px; padding: 18px; text-align: center; cursor: pointer; color: #5a6270; }
.upload-zone:hover, .upload-zone.over { border-color: var(--accent); background: #f2fbf8; }
.upload-zone .uz-title { font-weight: 600; color: #2c3038; } .upload-zone .uz-sub { font-size: 12px; margin-top: 2px; }
.ed-foot { display: flex; justify-content: space-between; align-items: center; gap: 10px; padding: 10px 18px; border-top: 1px solid var(--border); background: var(--bg1); }
.ed-ai { border-left: 1px solid var(--border); background: var(--bg1); display: flex; flex-direction: column; min-height: 0; }
.ai-head { display: flex; justify-content: space-between; align-items: center; padding: 12px 14px 6px; }
.ai-head b { color: #c4b5fd; }
.ai-quick { display: flex; gap: 6px; flex-wrap: wrap; padding: 4px 14px 10px; border-bottom: 1px solid var(--border); }
.ai-msgs { flex: 1; overflow-y: auto; padding: 12px 14px; display: flex; flex-direction: column; gap: 12px; min-height: 0; }
.ai-tip { font-size: 12.5px; color: var(--text3); background: var(--bg2); border-radius: var(--radius); padding: 8px 10px; }
.ai-card { border: 1px solid rgba(139,92,246,.3); border-radius: var(--radius-lg); padding: 10px 12px; background: rgba(139,92,246,.05); }
.ai-q { font-size: 12.5px; color: #c4b5fd; margin-bottom: 6px; }
.ai-out { font-size: 13px; max-height: 360px; overflow-y: auto; }
.ai-acts { display: flex; gap: 6px; flex-wrap: wrap; margin-top: 8px; align-items: center; }
.ai-input { display: flex; gap: 8px; padding: 10px 14px 14px; border-top: 1px solid var(--border); align-items: flex-end; }
.ai-input textarea { flex: 1; resize: none; background: var(--bg2); border: 1px solid var(--border-hi); border-radius: var(--radius); padding: 7px 9px; outline: none; font-size: 13px; }
@media (max-width: 1180px) { .ws-body.split { grid-template-columns: 230px minmax(0, 1fr) 0; } .ws-body.split .ed-ai { display: none; } }
@media (max-width: 640px) { .ws-body.split { display: flex; flex-direction: column; } .paper { padding: 24px 18px; } }

}
/* The workspace uses the landing page palette and typography. */
.portal-ui{--bg0:#f7f9f5;--bg1:#fff;--bg2:#f3f6f1;--bg3:#eaf1e9;--bg4:#dfe9df;--border:#e1e8df;--border-hi:#cbd8cb;--text:#152e2b;--text2:#576d63;--text3:#7b8b80;--accent:#087d68;--accent-d:#066653;--accent-bg:#e6f2e9;--blue:#3975a0;--warn:#a37320;--danger:#b54b40;--purple:#766696;--radius:7px;--radius-lg:10px;--sans:-apple-system,BlinkMacSystemFont,'PingFang SC','Microsoft YaHei',sans-serif;--mono:ui-monospace,monospace;--shadow:0 12px 45px #183c2520;font:14px/1.7 var(--sans);color:var(--text)}
.portal-dialog{border:1px solid var(--border);padding:0;width:min(1180px,94vw);height:90dvh;max-height:94dvh;margin:auto;border-radius:16px;background:var(--bg0);box-shadow:0 24px 100px #16372a30;overflow:hidden}.portal-dialog[open]{display:flex;flex-direction:column}.portal-dialog::backdrop{background:#132d2855;backdrop-filter:blur(4px)}.portal-head{display:flex;align-items:flex-start;justify-content:space-between;gap:22px;padding:23px 30px;border-bottom:1px solid var(--border);background:#fff;flex-shrink:0}.portal-head h2{font-size:23px;line-height:1.5;margin:5px 0 0;font-weight:600;letter-spacing:0;max-height:145px;overflow:auto}.portal-eyebrow{font-size:11px;color:var(--accent);letter-spacing:2px}.portal-close{width:36px;height:36px;flex:none;border:1px solid var(--border);border-radius:50%;background:#f5f8f3;color:#536c61;font-size:25px;line-height:1}.portal-close:hover{background:#e7f0e5}.portal-body{overflow:auto;overscroll-behavior:contain;flex:1;min-height:0;padding:28px 30px}.portal-nav{display:flex;gap:26px;padding:12px 30px;border-bottom:1px solid var(--border);background:white;flex-shrink:0}.portal-nav[hidden]{display:none}.portal-nav a{font-size:14px;color:var(--text2);padding:4px 0}.portal-nav a.active{color:var(--accent);box-shadow:0 2px var(--accent)}.portal-ui h1{font-size:25px;letter-spacing:0;line-height:1.4;margin:0}.portal-ui h2{letter-spacing:0}.portal-ui h3{font-size:16px;margin:0 0 10px}.portal-ui .page-head{display:flex;justify-content:space-between;align-items:center;gap:16px;margin-bottom:22px;flex-wrap:wrap}.portal-ui .page-head p{color:var(--text2);margin:8px 0 0}.portal-ui a{color:var(--accent)}.portal-ui .muted{color:var(--text3)}.portal-ui .dim{color:var(--text2)}.portal-ui .card{box-shadow:none}.portal-ui .btn.primary{color:#fff}.portal-ui .btn{cursor:pointer}.portal-ui .content-text{font-size:15px;line-height:1.95}.portal-ui .detail-head{background:#edf4eb}.portal-ui .detail-head .detail-meta{gap:12px}.portal-ui .embedded-view.full{height:100%;display:flex;min-height:450px}.portal-ui .chat-layout{width:100%}.portal-ui .kv{font-size:14px}.portal-ui .modal-mask{position:absolute;background:#17362a40}.portal-ui .modal{background:#fff;max-height:85%;overflow:auto}.portal-ui .modal h2{font-size:21px;margin:0 0 16px}.portal-ui .toast{background:#fff;color:var(--text);box-shadow:var(--shadow)}#toasts{position:fixed;right:24px;bottom:24px;z-index:9999;display:grid;gap:10px}.portal-dialog[data-kind=detail]{width:min(850px,96vw);height:100dvh;max-height:100dvh;margin:0 0 0 auto;border-radius:16px 0 0 16px}.portal-dialog[data-kind=auth]{width:min(470px,94vw);height:auto;max-height:92dvh}.portal-dialog[data-kind=auth] .portal-head{padding:24px 30px 18px}.portal-dialog[data-kind=auth] .portal-body{padding:22px 30px 30px}.auth-intro{color:var(--text2);font-size:14px;margin:0 0 22px}.landing-auth{display:grid;gap:16px}.landing-auth .field{display:grid;gap:7px;margin:0}.landing-auth .input{font-size:15px;min-height:43px;background:white}.landing-auth .button{border:0;min-height:46px;transform:none}.optional-fields{font-size:12px;color:var(--text2)}.optional-fields summary{cursor:pointer}.optional-fields[open] .field{margin-top:14px}.form-error{margin:0;padding:10px 12px;background:#fff0ed;color:#a94437;border-radius:6px;font-size:13px}.auth-foot{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-top:22px;font-size:12px}.portal-ui [hidden]{display:none!important}.portal-ui .empty{padding:45px 15px;text-align:center;color:var(--text2)}
@media(max-width:680px){.portal-dialog,.portal-dialog[data-kind=detail]{width:100%;max-width:100%;height:100dvh;max-height:100dvh;margin:0;border-radius:0}.portal-head{padding:17px 18px}.portal-head h2{font-size:19px;max-height:120px}.portal-body{padding:18px}.portal-nav{padding:10px 18px;gap:20px;overflow-x:auto;white-space:nowrap}.portal-dialog[data-kind=auth]{width:94%;height:auto;margin:auto;border-radius:12px}.portal-dialog[data-kind=auth] .portal-body{padding:20px}.portal-dialog[data-kind=auth] .portal-head{padding:20px}.portal-ui .att{flex-wrap:wrap}.portal-ui .kv{grid-template-columns:100px 1fr}.auth-foot{flex-wrap:wrap}.portal-ui .embedded-view.full{min-height:400px}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}}
.portal-dialog[data-kind=auth]{height:fit-content}.portal-dialog[data-kind=auth] .portal-body{flex:0 1 auto}.portal-ui .tag.purple{color:#786388;background:#f0eaf3;border-color:#d9cbe0}.portal-ui .tag.blue{color:#396983;background:#eaf2f5;border-color:#c9dce6}.portal-ui .tag.warn{color:#936b25}.portal-ui .btn.primary:hover{color:#fff}.portal-ui .table-wrap{max-width:100%;overflow:auto}
#portal-title:focus{outline:none}
.portal-content{display:flex;flex-direction:column;flex:1;min-height:0;overflow:hidden}.portal-toasts{position:absolute;bottom:24px;right:24px;z-index:2000;display:grid;gap:8px;max-width:85%}.portal-ui .pager{display:flex;justify-content:center;gap:20px;align-items:center;margin-top:20px}.portal-ui .stat-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:14px}.portal-ui .stat{background:#fff;border:1px solid var(--border);border-radius:9px;padding:18px}.portal-ui .table td{overflow-wrap:anywhere}.portal-ui .table td.nowrap{overflow-wrap:normal}

/* Personal workspace uses the plugin layout as a full page, not a modal. */
body.user-workspace{overflow:hidden}body.user-workspace>.header,body.user-workspace>main,body.user-workspace>.footer{display:none}.user-workspace-frame{position:fixed;inset:0;width:100%;height:100dvh;border:0;background:#0a0f1c;z-index:20}.user-workspace-frame[hidden]{display:none}

/* Platform management is part of the site, with a persistent top navigation. */
.management-main[hidden]{display:none!important}
body.management-page>main:not(.management-main),body.management-page>.footer{display:none}
.management-page .header{position:sticky;top:0;z-index:40;background:#f7f9f5f5;backdrop-filter:blur(12px);width:100%;max-width:none;margin:0;padding:18px max(28px,calc((100vw - 1320px)/2));border-bottom:1px solid #dce5df;gap:30px}
.management-page .header nav{gap:26px;white-space:nowrap}
.management-page .header nav a{position:relative;font-size:13px;padding:11px 0;color:#6a7d79}
.management-page .header nav a.active{color:#087d68;font-weight:600}
.management-page .header nav a.active:after{content:'';position:absolute;left:0;right:0;bottom:0;height:2px;border-radius:2px;background:#087d68}
.management-page .brand-sub{letter-spacing:1px}
.management-page .header-actions{gap:16px}
.management-main{width:min(1320px,calc(100% - 56px));margin:0 auto;padding:42px 0 70px;min-height:calc(100dvh - 90px)}
.management-main .page-head{margin-bottom:28px;align-items:center}
.management-main h1{font-size:28px;font-weight:600;line-height:1.5}
.management-main h1:focus{outline:none}
.management-main .page-head p{font-size:13px;margin-top:7px}
.management-main .filters{padding:16px;background:#fff;border:1px solid var(--border);border-radius:10px;margin-bottom:20px}
.management-main .table-wrap{background:#fff;border:1px solid var(--border);border-radius:10px}
.management-main .table th{background:#eef3ed;padding:14px 16px;font-weight:500;white-space:nowrap}
.management-main .table td{padding:15px 16px;font-size:13px}
.management-main .table tr:last-child td{border-bottom:0}
.management-main .card{padding:24px;margin-bottom:20px}
.management-main .stat{padding:24px}
.management-main .stat b{font-size:30px;font-weight:600;line-height:1.4}
.management-main .stat span{display:block;font-size:12px;margin-top:8px;color:var(--text2)}
.management-main .chips{gap:10px}
.management-main .chip{padding:8px 13px}
.management-main .modal-mask{position:fixed;inset:0;z-index:100}
.management-main .portal-toasts{position:fixed;z-index:120}
.management-loading{padding-top:10px;font-size:13px;color:#6a7d79}
.management-skeleton{height:310px;margin-top:24px;border:1px solid #e1e8df;border-radius:12px;background:repeating-linear-gradient(#fff 0 48px,#eef3ed 49px 50px);animation:management-pulse 1.2s ease-in-out infinite alternate}
@keyframes management-pulse{to{opacity:.5}}
@media(prefers-reduced-motion:reduce){.management-skeleton{animation:none}}
@media(max-width:1100px){.management-page .header{display:flex;flex-wrap:wrap;gap:12px 24px;padding:16px 24px}.management-page .header .brand{margin-right:auto}.management-page .header nav{order:3;display:flex;width:100%;overflow-x:auto;gap:28px}.management-main{width:calc(100% - 40px);padding-top:28px}.management-page .header .brand-sub{display:inline}}
@media(max-width:680px){.management-page .header{padding:12px 18px}.management-page .header nav{gap:24px}.management-page .header-actions{gap:8px}.management-main{width:calc(100% - 28px)}.management-main h1{font-size:24px}.management-main .card{padding:18px}.management-main .filters{flex-wrap:wrap}.management-main .stat-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.management-main .stat{padding:17px}.management-main .stat b{font-size:24px}}

.management-page .header{height:auto;min-height:86px}

/* Keep site navigation intact; management tools form a second navigation level. */
.header nav a[hidden]{display:none!important}
.header nav a.active{color:#087d68;font-weight:600}
.management-toolbar{display:flex;align-items:center;gap:18px;margin-bottom:20px;color:var(--text3);font-size:13px}
.management-back{color:var(--text2);text-decoration:none;padding:6px 0}
.management-back:hover{color:var(--accent)}
.management-toolbar>span{border-left:1px solid var(--border-hi);padding-left:18px}
.management-tabs{display:flex;gap:28px;overflow-x:auto;white-space:nowrap;border-bottom:1px solid var(--border);margin-bottom:30px}
.management-tabs a{padding:0 0 14px;color:var(--text2);text-decoration:none;border-bottom:2px solid transparent}
.management-tabs a:hover,.management-tabs a.active{color:var(--accent)}
.management-tabs a.active{font-weight:600;border-bottom-color:var(--accent)}
@media(max-width:680px){.management-tabs{gap:24px;margin-bottom:24px}.management-toolbar{margin-bottom:16px}}
