/* ============ 基础 ============ */
*{margin:0;padding:0;box-sizing:border-box}
:root{
  --brand:#0052d9;--brand-hover:#0043b3;--brand-soft:#e8f1ff;--brand-soft2:#f3f8ff;
  --bg:#f3f4f7;--card:#fff;
  --text:#1d2129;--text2:#4e5969;--text3:#86909c;
  --border:#e3e6ed;--line:#f0f1f4;
  --danger:#d54941;--danger-soft:#ffece8;
  --ok:#00a870;
  --radius:6px;
  --top-h:52px;
}
html,body{height:100%}
body{
  font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei","Helvetica Neue",sans-serif;
  color:var(--text);background:var(--bg);font-size:14px;
  height:100vh;overflow:hidden;-webkit-font-smoothing:antialiased;
}
button,input,select,textarea{font-family:inherit;font-size:inherit;color:inherit}
button{cursor:pointer;border:none;background:none}
a{color:var(--brand);text-decoration:none}
::-webkit-scrollbar{width:8px;height:8px}
::-webkit-scrollbar-thumb{background:#d4d7dd;border-radius:4px}
::-webkit-scrollbar-thumb:hover{background:#b8bcc4}
::-webkit-scrollbar-track{background:transparent}

/* ============ 顶栏 ============ */
.top{
  height:var(--top-h);background:var(--card);border-bottom:1px solid var(--border);
  display:flex;align-items:center;padding:0 16px;gap:12px;position:relative;z-index:60;
}
.logo{display:flex;align-items:center;gap:8px;font-size:14px;font-weight:600;flex-shrink:0}
.logo-m{width:26px;height:26px;border-radius:7px;background:var(--brand);
  display:flex;align-items:center;justify-content:center;color:#fff;font-size:12px;font-weight:600}
.logo-t{white-space:nowrap}

.search{flex:0 1 460px;max-width:460px;min-width:180px;position:relative}
.search-ico{position:absolute;left:10px;top:50%;transform:translateY(-50%);color:var(--text3);pointer-events:none}
.search input{
  width:100%;height:32px;border:1px solid var(--border);border-radius:var(--radius);
  padding:0 10px 0 30px;font-size:13px;outline:none;background:var(--bg);transition:.15s;
}
.search input:focus{background:#fff;border-color:var(--brand);box-shadow:0 0 0 2px var(--brand-soft)}

.rs{
  position:absolute;top:38px;left:0;right:0;background:#fff;border:1px solid var(--border);
  border-radius:8px;box-shadow:0 8px 28px rgba(0,0,0,.12);display:none;
  max-height:400px;overflow-y:auto;z-index:70;
}
.rs.show{display:block}
.rs .it{padding:9px 12px;cursor:pointer;border-bottom:1px solid var(--line)}
.rs .it:last-child{border-bottom:none}
.rs .it:hover{background:var(--brand-soft2)}
.rs .it .t{font-size:13px;line-height:1.45;margin-bottom:2px}
.rs .it .s{font-size:11.5px;color:var(--text3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.rs .it .s em{color:var(--brand);font-style:normal;background:#fff3cd;border-radius:2px;padding:0 1px}
.rs .empty{padding:16px;text-align:center;color:var(--text3);font-size:13px}

.btn-primary{background:var(--brand);color:#fff;height:32px;padding:0 14px;border-radius:var(--radius);
  font-size:13px;font-weight:500;white-space:nowrap;transition:.15s}
.btn-primary:hover{background:var(--brand-hover)}
.btn-ghost{height:32px;padding:0 12px;border:1px solid var(--border);border-radius:var(--radius);
  font-size:13px;background:#fff;transition:.15s}
.btn-ghost:hover{border-color:var(--brand);color:var(--brand)}
.btn-danger{color:var(--danger)}
.btn-danger:hover{border-color:var(--danger);background:var(--danger-soft)}

.spacer{flex:1}
.stat{font-size:12px;color:var(--text3);white-space:nowrap}

/* 用户菜单 */
.user{position:relative;flex-shrink:0}
.av{width:28px;height:28px;border-radius:50%;background:var(--brand-soft);color:var(--brand);
  display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:600;cursor:pointer}
.umenu{
  position:absolute;top:36px;right:0;background:#fff;border:1px solid var(--border);
  border-radius:8px;box-shadow:0 8px 28px rgba(0,0,0,.12);display:none;min-width:150px;
  padding:5px;z-index:70;
}
.umenu.show{display:block}
.umenu-name{padding:8px 10px;font-size:12px;color:var(--text3);border-bottom:1px solid var(--line);margin-bottom:4px}
.umenu-item{padding:8px 10px;font-size:13px;border-radius:5px;cursor:pointer}
.umenu-item:hover{background:var(--bg)}

/* ============ 三栏布局 ============ */
.body{display:grid;grid-template-columns:196px 296px minmax(0,1fr);height:calc(100vh - var(--top-h))}

/* ============ 左侧导航 ============ */
.nav{background:var(--card);border-right:1px solid var(--border);overflow-y:auto;padding:10px 8px}
.nav-title{font-size:11px;color:var(--text3);padding:4px 9px 8px;letter-spacing:.5px}
.grp{margin-bottom:2px}
.grp-h{display:flex;align-items:center;gap:5px;padding:7px 9px;border-radius:var(--radius);
  font-size:13px;font-weight:600;cursor:pointer;user-select:none}
.grp-h:hover{background:var(--bg)}
.grp-h .arw{font-size:8px;color:var(--text3);transition:.15s;flex-shrink:0}
.grp.open .arw{transform:rotate(90deg)}
.grp-h .cnt{margin-left:auto;font-size:11px;color:var(--text3);font-weight:400}
.subs{display:none;margin:2px 0 4px}
.grp.open .subs{display:block}
.sub{padding:6px 9px 6px 22px;border-radius:var(--radius);font-size:13px;color:var(--text2);
  cursor:pointer;display:flex;align-items:center;gap:6px;line-height:1.3}
.sub:hover{background:var(--bg)}
.sub.on{background:var(--brand-soft);color:var(--brand);font-weight:500}
.sub .n{margin-left:auto;font-size:11px;color:var(--text3);flex-shrink:0}
.sub.on .n{color:var(--brand)}

/* ============ 第三级：子项（如 话术 / 流程） ============ */
.topics{display:flex;flex-direction:column;margin:1px 0 3px 14px;border-left:2px solid var(--line);padding-left:4px}
.topic{padding:5px 9px 5px 14px;border-radius:var(--radius);font-size:12.5px;color:var(--text2);
  cursor:pointer;display:flex;align-items:center;gap:6px;line-height:1.3}
.topic:hover{background:var(--bg)}
.topic.on{background:var(--brand-soft);color:var(--brand);font-weight:500}
.topic .n{margin-left:auto;font-size:10.5px;color:var(--text3);flex-shrink:0}
.topic.on .n{color:var(--brand)}

/* ============ 中间列表 ============ */
.list{background:var(--card);border-right:1px solid var(--border);overflow-y:auto;display:flex;flex-direction:column}
.lhead{
  padding:11px 14px;font-size:12px;color:var(--text3);border-bottom:1px solid var(--line);
  display:flex;align-items:center;justify-content:space-between;gap:8px;
  position:sticky;top:0;background:var(--card);z-index:5;
}
.lhead .lh-l{font-weight:600;color:var(--text2);font-size:12.5px;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.lhead .lh-r{font-size:11px;color:var(--text3);flex-shrink:0}
.item{padding:11px 14px;border-bottom:1px solid var(--line);cursor:pointer;
  border-left:2px solid transparent;transition:background .1s}
.item:hover{background:var(--bg)}
.item.on{background:var(--brand-soft);border-left-color:var(--brand)}
.item .t{font-size:13px;font-weight:500;line-height:1.45;margin-bottom:5px;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.item.on .t{color:var(--brand)}
.item .m{font-size:11px;color:var(--text3);display:flex;align-items:center;gap:6px}
.item .m .clip{background:var(--bg);padding:1px 5px;border-radius:3px;
  max-width:110px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.item.on .m .clip{background:rgba(255,255,255,.75)}
.item .m .dot{width:2px;height:2px;border-radius:50%;background:currentColor;flex-shrink:0}

/* ============ 右侧正文 ============ */
.read{overflow-y:auto;background:var(--card);position:relative}
.rinner{max-width:780px;margin:0 auto;padding:26px 36px 90px}

/* 阅读态 */
.rhead{margin-bottom:20px}
.rhead h1{font-size:23px;font-weight:600;line-height:1.4;letter-spacing:-.2px;margin-bottom:10px;word-break:break-word}
.rmeta{display:flex;align-items:center;gap:10px;font-size:12px;color:var(--text3);flex-wrap:wrap}
.rmeta .tag{background:var(--brand-soft);color:var(--brand);padding:2px 8px;border-radius:4px;font-weight:500}
.ract{display:flex;gap:8px;padding:12px 0 0;flex-wrap:wrap}

/* 目录条 */
.tocbar{display:flex;gap:6px;flex-wrap:wrap;padding:14px 0 16px;
  border-bottom:1px solid var(--line);margin-bottom:22px}
.tocbar span{font-size:12px;padding:4px 11px;border-radius:14px;background:var(--bg);
  color:var(--text2);cursor:pointer;white-space:nowrap;transition:.15s;max-width:100%;overflow:hidden;text-overflow:ellipsis}
.tocbar span:hover{background:var(--brand-soft);color:var(--brand)}
.tocbar span.on{background:var(--brand);color:#fff}

/* 正文排版 */
.rbody{font-size:15.5px;line-height:1.85;color:#2c3140;word-wrap:break-word}
.rbody h1,.rbody h2,.rbody h3,.rbody h4{color:#111;scroll-margin-top:20px}
.rbody h1{font-size:21px;font-weight:600;margin:30px 0 12px}
.rbody h2{font-size:18px;font-weight:600;margin:26px 0 11px;padding-bottom:6px;border-bottom:1px solid var(--line)}
.rbody h3{font-size:16px;font-weight:600;margin:20px 0 9px}
.rbody h4{font-size:15px;font-weight:600;margin:15px 0 7px}
.rbody p{margin:10px 0}
.rbody ul,.rbody ol{margin:10px 0;padding-left:22px}
.rbody li{margin:5px 0}
.rbody strong{font-weight:600;color:#111}
.rbody a{color:var(--brand)}
.rbody hr{border:none;border-top:1px solid var(--line);margin:22px 0}
.rbody blockquote{background:var(--bg);border-left:3px solid var(--brand);padding:10px 15px;
  margin:13px 0;font-size:14.5px;color:var(--text2);border-radius:0 5px 5px 0}
.rbody blockquote p{margin:3px 0}
.rbody img{max-width:100%;height:auto;border-radius:6px;margin:10px 0}
.rbody code{background:var(--bg);padding:2px 5px;border-radius:3px;font-size:13.5px;
  font-family:"SFMono-Regular",Consolas,monospace}
.rbody pre{background:#f7f8fa;padding:12px 14px;border-radius:6px;overflow-x:auto;margin:12px 0}
.rbody pre code{background:none;padding:0}

/* 表格 */
.tw{overflow-x:auto;margin:14px 0}
.rbody table{border-collapse:collapse;width:100%;font-size:13.5px;background:#fff}
.rbody th,.rbody td{border:1px solid var(--border);padding:8px 11px;text-align:left;vertical-align:top;line-height:1.6}
.rbody th{background:var(--bg);font-weight:600;white-space:nowrap}
.rbody tbody tr:nth-child(even) td{background:#fcfcfd}

/* ===== 知识库长文 · 按栏目作用域主题 =====
   由 main.js 渲染时挂载 .rbody[data-cat="<子栏目>"]，样式不写入正文 HTML，
   因此不依赖正文里的 class/style，也不会被富文本编辑器保存时清掉。
   目前作用于「价值补偿体系」这类结构化长文。 */
.rbody[data-cat="价值补偿体系"] h2{
  margin:32px 0 14px;padding:11px 16px;border:none;border-radius:10px;
  font-size:17px;font-weight:600;color:#fff;letter-spacing:.3px;
  background:linear-gradient(135deg,#64748b,#8595a9);box-shadow:0 3px 8px rgba(15,23,42,.10);
}
.rbody[data-cat="价值补偿体系"] h2:nth-of-type(2){background:linear-gradient(135deg,#e07b26,#f6aa62)}
.rbody[data-cat="价值补偿体系"] h2:nth-of-type(3){background:linear-gradient(135deg,#2f9e6b,#5cc191)}
.rbody[data-cat="价值补偿体系"] h2:nth-of-type(4){background:linear-gradient(135deg,#c0392b,#e0705e)}
.rbody[data-cat="价值补偿体系"] h3{
  margin:24px 0 9px;padding:5px 13px;font-size:15.5px;font-weight:600;color:#243042;
  border-left:4px solid var(--brand);background:var(--brand-soft);border-radius:0 7px 7px 0;
}
.rbody[data-cat="价值补偿体系"] h4{
  margin:17px 0 7px;padding-left:11px;font-size:14.5px;font-weight:600;color:#3c4657;
  border-left:3px solid #d5dae2;
}
.rbody[data-cat="价值补偿体系"] ul{margin:8px 0 13px;padding-left:20px}
.rbody[data-cat="价值补偿体系"] li{margin:6px 0;line-height:1.72}
.rbody[data-cat="价值补偿体系"] li>strong{color:#16202f}
.rbody[data-cat="价值补偿体系"] ul ul{margin:5px 0;padding-left:18px}
.rbody[data-cat="价值补偿体系"] ul ul li{font-size:14.5px;color:#525d6d}
.rbody[data-cat="价值补偿体系"] blockquote{
  margin:13px 0;padding:10px 15px;background:#fff7ee;border-left:4px solid var(--brand);
  border-radius:0 8px 8px 0;color:#8a5a2b;font-size:14.5px;
}
.rbody[data-cat="价值补偿体系"] blockquote strong{color:#b3651f}
.rbody[data-cat="价值补偿体系"] hr{margin:30px 0;border:none;border-top:2px dashed #e6e9ef}
.rbody[data-cat="价值补偿体系"] table{font-size:14px}
.rbody[data-cat="价值补偿体系"] th{white-space:normal;background:#f5f6f8}

/* 附件区（阅读态） */
.files{margin-top:28px;padding-top:18px;border-top:1px solid var(--line)}
.files h4{font-size:13px;font-weight:600;color:var(--text2);margin-bottom:10px}
.file-item{display:flex;align-items:center;gap:9px;padding:8px 11px;border:1px solid var(--border);
  border-radius:var(--radius);margin-bottom:7px;background:#fff;transition:.15s;color:inherit}
.file-item:hover{border-color:var(--brand);background:var(--brand-soft2)}
.file-ico{width:26px;height:26px;border-radius:5px;display:flex;align-items:center;justify-content:center;
  font-size:9px;font-weight:700;color:#fff;flex-shrink:0;letter-spacing:-.3px}
.file-ico.img{background:#00a870}.file-ico.ppt{background:#d54941}.file-ico.doc{background:#0052d9}
.file-ico.xls{background:#0d7a5f}.file-ico.pdf{background:#e37318}.file-ico.zip{background:#7c4dff}
.file-ico.other{background:#86909c}
.file-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13px}
.file-size{font-size:11px;color:var(--text3);flex-shrink:0}

/* 空状态 */
.ph{color:var(--text3);text-align:center;padding:120px 20px;font-size:13.5px;line-height:1.9}
.ph b{display:block;font-size:15px;color:var(--text2);margin-bottom:6px;font-weight:600}

/* ============ 编辑态 ============ */
.edit-wrap{max-width:900px;margin:0 auto;padding:20px 32px 90px}
.edit-bar{display:flex;align-items:center;gap:10px;margin-bottom:14px;flex-wrap:wrap}
.e-title{flex:1;min-width:200px;height:36px;border:1px solid var(--border);border-radius:var(--radius);
  padding:0 12px;font-size:16px;font-weight:600;outline:none;transition:.15s}
.e-title:focus{border-color:var(--brand);box-shadow:0 0 0 2px var(--brand-soft)}
.e-sel{height:32px;border:1px solid var(--border);border-radius:var(--radius);padding:0 8px;
  background:#fff;outline:none;font-size:13px;max-width:150px}
.e-sel:focus{border-color:var(--brand)}
.e-topic{height:32px;border:1px solid var(--border);border-radius:var(--radius);padding:0 8px;
  background:#fff;outline:none;font-size:13px;max-width:170px}
.e-topic:focus{border-color:var(--brand)}

.editor-box{border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;background:#fff}
.editor-box .w-e-toolbar{border-bottom:1px solid var(--border)!important;z-index:20!important;position:relative}
.editor-box .w-e-text-container{height:460px!important;z-index:10!important}

/* 附件区（编辑态） */
.attach{margin-top:16px;border:1px solid var(--border);border-radius:var(--radius);padding:13px 15px;background:#fcfcfd}
.attach-head{font-size:12.5px;font-weight:600;color:var(--text2);margin-bottom:4px}
.attach-hint{font-size:11.5px;color:var(--text3);margin-bottom:10px;line-height:1.6}
.attach-list{margin-bottom:10px}
.attach-item{display:flex;align-items:center;gap:9px;padding:7px 10px;background:#fff;
  border:1px solid var(--border);border-radius:5px;margin-bottom:6px;font-size:13px}
.attach-del{margin-left:auto;color:var(--text3);font-size:16px;line-height:1;padding:0 4px;flex-shrink:0}
.attach-del:hover{color:var(--danger)}
.attach-add{display:inline-flex;align-items:center;gap:5px;height:30px;padding:0 13px;
  border:1px dashed #c9cdd4;border-radius:var(--radius);font-size:13px;color:var(--text2);
  cursor:pointer;background:#fff;transition:.15s}
.attach-add:hover{border-color:var(--brand);color:var(--brand);background:var(--brand-soft2)}
.attach-add.uploading{opacity:.6;pointer-events:none}

.edit-actions{display:flex;gap:9px;margin-top:20px;align-items:center;flex-wrap:wrap}
.edit-actions .spacer{flex:1}
.save-tip{font-size:12px;color:var(--text3)}

/* 上传中遮罩 */
.uploading-mask{
  position:fixed;inset:0;background:rgba(0,0,0,.25);display:none;
  align-items:center;justify-content:center;z-index:200;
}
.uploading-mask.show{display:flex}
.uploading-mask .box{background:#fff;border-radius:8px;padding:20px 28px;font-size:13.5px;
  box-shadow:0 8px 32px rgba(0,0,0,.2)}

/* ============ Toast ============ */
.toast{
  position:fixed;left:50%;bottom:40px;transform:translateX(-50%) translateY(10px);
  background:#1d2129;color:#fff;padding:10px 18px;border-radius:6px;font-size:13px;
  opacity:0;pointer-events:none;transition:.2s;z-index:300;max-width:80vw;
}
.toast.show{opacity:1;transform:translateX(-50%) translateY(0)}
.toast.err{background:var(--danger)}

/* ============ 响应式 ============ */
  .body{grid-template-columns:170px 260px minmax(0,1fr)}
  .rinner{padding:22px 24px 80px}
}
@media (max-width:900px){
  body{overflow:auto}
  .body{grid-template-columns:1fr;height:auto}
  .nav{max-height:220px;border-right:none;border-bottom:1px solid var(--border)}
  .list{max-height:340px;border-right:none;border-bottom:1px solid var(--border)}
  .read{overflow:visible}
  .logo-t{display:none}
  .search{flex:1;max-width:none}
  .stat{display:none}
  .rinner,.edit-wrap{padding:18px 16px 60px}
  .rbody{font-size:15px}
}

/* ============ 通用弹窗 ============ */
.mask{position:fixed;inset:0;background:rgba(0,0,0,.35);display:none;
  align-items:center;justify-content:center;z-index:200}
.mask.show{display:flex}
.dlg{background:#fff;border-radius:10px;box-shadow:0 12px 40px rgba(0,0,0,.18);
  width:420px;max-width:calc(100vw - 32px);max-height:calc(100vh - 60px);overflow:auto;
  padding:20px 22px 16px}
.dlg-t{font-size:15px;font-weight:600;margin-bottom:12px;line-height:1.4}
.dlg-c{font-size:13px;color:var(--text2);line-height:1.7;margin-bottom:12px}
.dlg-desc{background:var(--bg);border-radius:6px;padding:8px 10px;margin-bottom:12px;
  color:var(--text2);font-size:12.5px}
.fld-l{font-size:12px;color:var(--text3);margin:0 0 5px}
.fld{width:100%;height:34px;border:1px solid var(--border);border-radius:6px;padding:0 9px;
  outline:none;margin-bottom:12px;background:#fff;font-size:13px}
.fld:focus{border-color:var(--brand);box-shadow:0 0 0 2px var(--brand-soft)}
.fld-h{font-size:11.5px;color:var(--text3);margin:-6px 0 10px}
.dlg-btns{display:flex;justify-content:flex-end;gap:8px;flex-wrap:wrap;padding-top:4px}
.btn-primary.danger{background:var(--danger)}
.btn-primary.danger:hover{background:#b93a33}
.danger-text{color:var(--danger)}
.danger-text:hover{border-color:var(--danger);background:var(--danger-soft)}
.dis{opacity:.45;pointer-events:none}

/* ============ 悬浮菜单 ============ */
.cmenu{position:fixed;background:#fff;border:1px solid var(--border);border-radius:8px;
  box-shadow:0 8px 28px rgba(0,0,0,.14);padding:5px;display:none;min-width:162px;z-index:300}
.cmenu.show{display:block}
.cm-i{padding:7px 11px;font-size:13px;border-radius:5px;cursor:pointer;white-space:nowrap}
.cm-i:hover{background:var(--bg)}
.cm-i.danger{color:var(--danger)}
.cm-i.danger:hover{background:var(--danger-soft)}
.cm-sep{height:1px;background:var(--line);margin:4px 2px}

/* ============ 分类树管理入口 ============ */
.nav-title{display:flex;align-items:center}
.nav-add{margin-left:auto;width:18px;height:18px;line-height:17px;text-align:center;
  border-radius:4px;color:var(--text3);cursor:pointer;font-size:14px}
.nav-add:hover{background:var(--brand-soft);color:var(--brand)}
.grp-h .nm,.sub .nm{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.more,.imore{display:none;width:16px;height:16px;line-height:14px;text-align:center;
  border-radius:4px;color:var(--text3);font-size:13px;flex-shrink:0;margin-left:4px}
.grp:hover .more,.sub:hover .more,.item:hover .imore{display:block}
.more:hover,.imore:hover{background:#e3e6ed;color:var(--text)}
.sub.add .nm{color:var(--text3);font-size:12px}
.sub.add:hover{background:var(--brand-soft2)}

/* ============ 列表管理（多选 / 移动） ============ */
.lbtn{border:1px solid var(--border);background:#fff;border-radius:4px;font-size:11.5px;
  padding:2px 8px;color:var(--text2)}
.lbtn:hover{border-color:var(--brand);color:var(--brand)}
.lbtn.on{background:var(--brand);border-color:var(--brand);color:#fff}
.item{display:flex;align-items:flex-start;gap:8px}
.item .ib{flex:1;min-width:0}
.ck{width:15px;height:15px;border:1px solid #c9cdd4;border-radius:3px;flex-shrink:0;
  margin-top:2px;position:relative;cursor:pointer;background:#fff}
.ck.on{background:var(--brand);border-color:var(--brand)}
.ck.on::after{content:'';position:absolute;left:4px;top:1px;width:5px;height:9px;
  border:2px solid #fff;border-top:0;border-left:0;transform:rotate(40deg)}
.item.sel{background:var(--brand-soft2)}
.lbar{position:sticky;bottom:0;background:#fff;border-top:1px solid var(--border);
  padding:9px 12px;display:flex;align-items:center;gap:8px}
.lbar-n{font-size:12px;color:var(--text2);flex:1}
.lbar-n b{color:var(--brand)}

/* ============ 正文配图 ============ */
.md-img{max-width:100%;height:auto;border-radius:8px;border:1px solid var(--line);
  display:block;margin:16px 0;background:#fff;cursor:zoom-in}
.md-img:hover{box-shadow:0 2px 12px rgba(0,0,0,.08)}

/* ============ 图片放大预览（Lightbox） ============ */
.lb{position:fixed;inset:0;z-index:400;display:none;flex-direction:column;
  background:rgba(16,18,24,.74);
  -webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);
  opacity:0;transition:opacity .18s ease}
.lb.show{display:flex;opacity:1}

.lb-bar{flex-shrink:0;height:44px;display:flex;align-items:center;gap:6px;padding:0 10px;
  color:#fff;background:rgba(0,0,0,.28);user-select:none}
.lb-name{flex:1;min-width:0;font-size:13px;opacity:.88;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.lb-count{font-size:12px;opacity:.6;flex-shrink:0;font-variant-numeric:tabular-nums}
.lb-zoom{font-size:12px;opacity:.72;min-width:48px;text-align:right;flex-shrink:0;
  font-variant-numeric:tabular-nums}
.lb-btn{width:30px;height:30px;flex-shrink:0;border-radius:6px;color:#fff;font-size:15px;
  line-height:1;display:flex;align-items:center;justify-content:center;
  background:rgba(255,255,255,.12);transition:background .15s}
.lb-btn:hover{background:rgba(255,255,255,.26)}
.lb-btn:focus-visible{outline:2px solid #fff;outline-offset:2px}
.lb-btn.w{width:auto;padding:0 10px;font-size:12.5px}
.lb-btn.lb-close{font-size:14px;margin-left:2px}
.lb-btn.lb-close:hover{background:var(--danger)}

.lb-stage{flex:1;min-height:0;position:relative;display:flex;align-items:center;
  justify-content:center;overflow:hidden;touch-action:none;cursor:zoom-out}
.lb-stage.grab{cursor:grab}
.lb-stage.grabbing{cursor:grabbing}
.lb-img{max-width:100%;max-height:100%;display:block;border-radius:4px;background:#fff;
  transform-origin:center center;will-change:transform;cursor:default;
  image-rendering:auto;        /* 缩小查看时高质量双线性采样，文字保持清晰 */
  box-shadow:0 10px 40px rgba(0,0,0,.45);
  -webkit-user-select:none;user-select:none;-webkit-user-drag:none;
  transition:opacity .2s}
/* 长竖图按宽度适配（避免被 max-height 压成窄条导致文字模糊），用户可拖拽/滚轮查看 */
.lb-img.lb-tall{max-height:none}
.lb-stage.grab .lb-img{cursor:grab}
.lb-stage.grabbing .lb-img{cursor:grabbing}
.lb-img.loading{opacity:.35}

.lb-tip{position:absolute;left:50%;bottom:14px;transform:translateX(-50%);
  color:rgba(255,255,255,.55);font-size:11.5px;pointer-events:none;white-space:nowrap;
  background:rgba(0,0,0,.3);padding:4px 12px;border-radius:20px}
.lb-stage.zoomed .lb-tip{opacity:0}
.lb-tip{transition:opacity .2s}

/* 预览打开时锁定底层滚动（保留滚动条宽度，避免布局跳动） */
.lb-open .read,.lb-open .list,.lb-open .nav{overflow:hidden!important}

@media (max-width:640px){
  .lb-tip{display:none}
  .lb-bar{height:40px;gap:4px;padding:0 6px}
  .lb-name{font-size:12px}
  .lb-btn{width:28px;height:28px}
  .lb-zoom{min-width:42px}
}

/* ============ 顶部摘要：层级缩进 ============ */
.tocbar span.toc-i.lv1{font-weight:600}
.tocbar span.toc-i.lv3{margin-left:10px;font-size:11.5px;opacity:.92}
.tocbar span.toc-i.lv2{margin-left:0}

/* ============ 顶部摘要配置（编辑态） ============ */
.toc-cfg{margin-bottom:14px;border:1px solid var(--border);border-radius:var(--radius);
  padding:12px 14px;background:#fcfcfd}
.toc-cfg-h{font-size:12.5px;font-weight:600;color:var(--text2);margin-bottom:8px}
.toc-cfg-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.toc-cfg-row .e-sel{min-width:220px}
.toc-cfg-tip{font-size:11.5px;color:var(--text3);line-height:1.5;flex:1;min-width:180px}
.toc-items{margin-top:10px}
.ti-empty{font-size:12px;color:var(--text3);padding:8px 0}
.ti-row{display:flex;align-items:center;gap:7px;padding:5px 0}
.ti-n{width:18px;height:18px;line-height:18px;text-align:center;border-radius:4px;
  background:var(--brand-soft);color:var(--brand);font-size:11px;flex-shrink:0}
.ti-lv{flex-shrink:0;font-size:11px;color:var(--text3);width:22px}
.ti-tx{flex:1;min-width:0;height:28px;border:1px solid var(--border);border-radius:5px;
  padding:0 8px;font-size:12.5px;outline:none;background:#fff}
.ti-tx:focus{border-color:var(--brand);box-shadow:0 0 0 2px var(--brand-soft)}
.ti-mv,.ti-rm{width:24px;height:24px;border-radius:4px;font-size:12px;flex-shrink:0;
  color:var(--text2);background:#fff;border:1px solid var(--border)}
.ti-mv:hover:not(:disabled){border-color:var(--brand);color:var(--brand)}
.ti-mv:disabled{opacity:.35;cursor:default}
.ti-rm:hover{color:var(--danger);border-color:var(--danger)}
.ti-add{margin-top:8px;height:28px;font-size:12.5px;max-width:340px}

@media (max-width:640px){
  .toc-cfg-row .e-sel{min-width:100%;width:100%}
  .ti-tx{font-size:12px}
}

/* ============ 局部样式快捷条（只对选中文字生效） ============ */
.inline-style-bar{display:flex;align-items:center;gap:8px;padding:6px 14px;
  border-top:1px solid var(--line);border-bottom:1px solid var(--line);background:#fafbfc}
.isb-label{font-size:12px;color:var(--text3);white-space:nowrap}
.isb-btn{display:inline-flex;align-items:center;gap:5px;padding:4px 11px;font-size:12px;
  border:1px solid var(--border);border-radius:5px;background:#fff;color:var(--text);
  cursor:pointer;transition:.15s;white-space:nowrap}
.isb-btn:hover{border-color:var(--brand);color:var(--brand);background:var(--brand-soft2)}
.isb-btn b{font-size:13px;font-weight:700}
.isb-tip{font-size:11px;color:var(--text3)}
.isb-fs{height:26px;font-size:12px;padding:0 6px;min-width:78px}
.isb-cus{display:inline-flex;align-items:center;gap:5px}
.isb-fsin{width:64px;height:26px;border:1px solid var(--border);border-radius:5px;
  padding:0 6px;font-size:12px;outline:none;background:#fff}
.isb-fsin:focus{border-color:var(--brand)}
.isb-go{height:26px;padding:0 10px;font-size:12px;border:1px solid var(--border);
  border-radius:5px;background:#fff;color:var(--text2);cursor:pointer}
.isb-go:hover{border-color:var(--brand);color:var(--brand)}

/* ============ 正文右键菜单（选区加入摘要 / 局部字号） ============ */
.ctx-menu{position:fixed;z-index:9999;display:none;min-width:168px;padding:5px;
  background:#fff;border:1px solid var(--border);border-radius:8px;
  box-shadow:0 8px 26px rgba(17,24,39,.14);font-size:13px;user-select:none}
.ctx-item{padding:7px 10px;border-radius:5px;cursor:pointer;color:var(--text);white-space:nowrap}
.ctx-item:hover{background:var(--brand-soft);color:var(--brand)}
.ctx-sep{height:1px;background:var(--line);margin:4px 2px}
.ctx-row{display:flex;align-items:center;gap:8px;padding:5px 10px 3px}
.ctx-lb{font-size:12px;color:var(--text3);flex:1}
.ctx-fs{height:26px;font-size:12px;border:1px solid var(--border);border-radius:5px;
  padding:0 4px;background:#fff;color:var(--text);outline:none}
.ctx-cus{display:flex;align-items:center;gap:6px;padding:3px 10px 6px}
.ctx-fsin{width:70px;height:26px;border:1px solid var(--border);border-radius:5px;
  padding:0 6px;font-size:12px;outline:none}
.ctx-fsin:focus{border-color:var(--brand)}
.ctx-go{height:26px;padding:0 10px;font-size:12px;border:1px solid var(--border);
  border-radius:5px;background:#fff;color:var(--text2);cursor:pointer}
.ctx-go:hover{border-color:var(--brand);color:var(--brand)}

/* 选区条目：正文里已定位不到 / 标记为选区来源 */
.ti-row.ti-miss .ti-tx{border-style:dashed;color:var(--text3)}
.ti-lv-sel{color:var(--brand)!important}
.tocbar span.toc-i.toc-miss{opacity:.45;text-decoration:line-through;cursor:not-allowed}

/* 局部字号只改字号，不撑高行距：行内 span 的 line-height 固定为 1，
   小于正文行框高度（15.5px × 1.85），所以同一行其它文字的行高与排版不受影响 */
.rbody [style*="font-size"],.w-e-text-container [style*="font-size"]{line-height:1}

/* ============ 统一导航框架（左侧菜单 + 多入口视图） ============ */
.app{display:flex;height:calc(100vh - var(--top-h))}
.apprail{width:92px;flex-shrink:0;background:var(--card);border-right:1px solid var(--border);
  display:flex;flex-direction:column;padding:10px 0;gap:2px;overflow-y:auto}
.rail-item{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:5px;
  padding:11px 4px;margin:0 6px;border-radius:var(--radius);color:var(--text2);
  text-decoration:none;cursor:pointer;transition:.15s;white-space:nowrap}
.rail-item:hover{background:var(--bg);color:var(--text)}
.rail-item.on{background:var(--brand-soft);color:var(--brand);font-weight:600}
.rail-ico{display:flex;align-items:center;justify-content:center;height:20px}
.rail-tx{font-size:12px;line-height:1.2}
.appmain{flex:1;min-width:0;display:flex;flex-direction:column;overflow:hidden}

/* 视图切换：默认隐藏，命中路由时显示；KB 保持原有 grid 三栏 */
.view{display:none}
.view.active{display:block}
#view-kb.active{display:grid}
#view-demand.active,#view-training.active{overflow-y:auto;background:var(--card)}

/* 非知识库入口时，隐藏顶栏里知识库专属的搜索 / 新建 / 统计 */
body[data-route="demand"] .search,body[data-route="training"] .search,
body[data-route="demand"] #btn-new,body[data-route="training"] #btn-new,
body[data-route="demand"] #stat,body[data-route="training"] #stat{display:none}

/* 首页：全宽（隐藏左侧 rail），自身纵向滚动；顶栏只留 logo 与用户菜单 */
body[data-route="home"] .apprail{display:none}
body[data-route="home"] .appmain{overflow-y:auto;background:var(--bg)}
body[data-route="home"] .search,
body[data-route="home"] #btn-new,
body[data-route="home"] #stat{display:none}
#view-home.active{display:block;min-height:100%}

/* ============ 新页面占位版式（版式待定，先保证接口链路可用） ============ */
.ph{padding:18px 20px 28px;max-width:1180px}
.ph-head{display:flex;align-items:flex-start;gap:12px;flex-wrap:wrap;margin-bottom:12px}
.ph-title{font-size:17px;font-weight:600}
.ph-sub{font-size:12px;color:var(--text3);margin-top:4px}
.ph-ops{margin-left:auto;display:flex;align-items:center;gap:8px}
.ph-ops .e-sel{height:30px;font-size:13px;min-width:120px}
.ph-api{font-size:12px;color:var(--text3);background:var(--bg);border:1px solid var(--line);
  border-radius:var(--radius);padding:7px 10px;margin-bottom:14px;word-break:break-all}
.ph-api.ok{color:var(--text2)}
.ph-api.err{color:var(--danger);background:var(--danger-soft);border-color:#ffccc7}
.ph-tag{display:inline-block;padding:1px 6px;border-radius:3px;font-size:11px;margin-left:4px}
.ph-tag.mock{background:#fff7e8;color:#d97706}
.ph-tag.real{background:#e8fff4;color:var(--ok)}
.ph-loading,.ph-empty,.ph-error{padding:26px 0;text-align:center;color:var(--text3);font-size:13px}
.ph-error{color:var(--danger)}

/* 需求中心：极简表格 */
.ph-table{border:1px solid var(--border);border-radius:var(--radius);overflow:hidden}
.ph-tr{display:grid;grid-template-columns:86px minmax(0,1fr) 78px 64px 84px 100px;
  gap:10px;align-items:center;padding:9px 12px;border-bottom:1px solid var(--line);font-size:13px}
.ph-tr:last-child{border-bottom:none}
.ph-th{background:var(--bg);color:var(--text3);font-size:12px}
.ph-tr:not(.ph-th):hover{background:var(--brand-soft2)}
.ph-tt{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mono{font-family:ui-monospace,Menlo,Consolas,monospace;font-size:12px;color:var(--text2)}
.st,.pr{display:inline-block;padding:1px 7px;border-radius:10px;font-size:11px;font-style:normal}
.st-pending{background:#f2f3f5;color:var(--text2)}
.st-doing{background:var(--brand-soft);color:var(--brand)}
.st-done{background:#e8fff4;color:var(--ok)}
.st-rejected{background:var(--danger-soft);color:var(--danger)}
.pr-high{background:#fff1f0;color:var(--danger)}
.pr-mid{background:#fff7e8;color:#d97706}
.pr-low{background:#f2f3f5;color:var(--text3)}

/* 培训资料：极简卡片 */
.ph-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:12px}
.ph-card{display:flex;gap:12px;padding:12px;border:1px solid var(--border);border-radius:var(--radius)}
.ph-card:hover{border-color:var(--brand);background:var(--brand-soft2)}
.ph-cover{width:52px;height:52px;flex-shrink:0;border-radius:var(--radius);display:flex;
  align-items:center;justify-content:center;font-size:12px;color:#fff;background:#86909c}
.ty-video{background:#0052d9}.ty-ppt{background:#d97706}.ty-doc{background:#00a870}.ty-audio{background:#7c3aed}
.ph-cmain{min-width:0;flex:1}
.ph-ct{font-size:13.5px;font-weight:600;margin-bottom:4px}
.ph-req{font-style:normal;font-size:11px;color:var(--danger);background:var(--danger-soft);
  padding:1px 5px;border-radius:3px;margin-left:4px}
.ph-cs{font-size:12px;color:var(--text2);margin-bottom:6px;display:-webkit-box;
  -webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.ph-cmeta{font-size:11.5px;color:var(--text3);margin-bottom:8px}
.ph-prog{display:flex;align-items:center;gap:8px;font-size:11.5px;color:var(--text3)}
.ph-bar{flex:1;height:5px;background:var(--line);border-radius:3px;overflow:hidden}
.ph-bar i{display:block;height:100%;background:var(--brand);border-radius:3px}

@media (max-width:900px){
  .apprail{width:64px}
  .rail-tx{font-size:11px}
  .ph-tr{grid-template-columns:70px minmax(0,1fr) 70px}
  .ph-tr span:nth-child(n+4){display:none}
}

/* ============ 结构化正文编辑器（订单驳回） ============ */
.se-root{display:flex;flex-direction:column;gap:18px;padding:4px 2px 8px}
.se-board{border-radius:10px;padding:14px 16px 18px;transition:box-shadow .15s}
.se-board:focus-within{box-shadow:0 0 0 2px var(--brand-soft)}
.se-board-title{width:100%;border:none;background:transparent;font-size:18px;font-weight:600;
  color:var(--brand);padding:4px 0;outline:none;border-bottom:1px dashed transparent;margin-bottom:6px}
.se-board-title:focus{border-bottom-color:var(--brand)}
.se-board-intro{width:100%;border:1px dashed var(--border);border-radius:6px;background:rgba(255,255,255,.6);
  padding:6px 10px;font-size:13px;color:var(--text2);resize:none;line-height:1.6;outline:none;min-height:34px;
  overflow:hidden;font-family:inherit}
.se-board-intro:focus{border-style:solid;border-color:var(--brand);background:#fff}

.se-section{margin-top:14px;padding-top:8px;border-top:1px dashed rgba(0,0,0,.08)}
.se-section:first-of-type{margin-top:6px;padding-top:0;border-top:none}
.se-section-title{width:100%;border:none;background:transparent;font-size:15px;font-weight:600;
  color:var(--text);padding:4px 0;outline:none;border-bottom:1px dashed transparent;margin-bottom:8px}
.se-section-title:focus{border-bottom-color:var(--brand)}

.se-card{background:#fff;border:1px solid var(--border);border-radius:8px;padding:10px 12px;
  margin:10px 0;transition:box-shadow .15s}
.se-card:focus-within{box-shadow:0 0 0 2px var(--brand-soft);border-color:var(--brand)}
.se-card-details{border-style:dashed}
.se-card-head{display:flex;align-items:center;gap:8px;margin-bottom:8px}
.se-card-title{flex:1;min-width:0;border:none;background:transparent;font-size:14px;font-weight:600;
  color:var(--text);padding:3px 0;outline:none;border-bottom:1px dashed transparent}
.se-card-title:focus{border-bottom-color:var(--brand)}
.se-card-ops{display:flex;gap:6px;flex-shrink:0}
.se-card-type,.se-card-del{font-size:11.5px;height:24px;padding:0 8px;border:1px solid var(--border);
  border-radius:4px;color:var(--text2);background:#fff;cursor:pointer}
.se-card-type:hover{border-color:var(--brand);color:var(--brand)}
.se-card-del{font-size:14px;color:var(--text3)}
.se-card-del:hover{border-color:var(--danger);color:var(--danger)}

.se-items{display:flex;flex-direction:column;gap:6px;padding-left:6px}
.se-row{display:flex;align-items:flex-start;gap:6px;padding:6px 8px;border:1px solid transparent;
  border-radius:6px;background:#fafbfc;transition:background .12s,border-color .12s}
.se-row:hover{background:#fff;border-color:var(--border)}
.se-row.se-dragging{opacity:.5;background:var(--brand-soft2)}
.se-row.se-over{border-top:2px solid var(--brand)}
.se-handle{cursor:grab;color:var(--text3);font-size:14px;line-height:1.6;padding:0 4px;
  user-select:none;flex-shrink:0}
.se-handle:active{cursor:grabbing}
.se-input{flex:1;min-width:0;border:1px solid var(--border);border-radius:5px;padding:6px 9px;
  font-size:13.5px;line-height:1.55;background:#fff;outline:none;resize:none;overflow:hidden;
  font-family:inherit}
.se-input:focus{border-color:var(--brand);box-shadow:0 0 0 2px var(--brand-soft)}
.se-input.se-text{min-height:30px}
.se-input.se-url{font-size:12px;color:var(--text3);background:#fafbfc}
.se-thumb{width:38px;height:38px;object-fit:cover;border:1px solid var(--border);border-radius:4px;flex-shrink:0}
.se-del{font-size:16px;line-height:1;color:var(--text3);background:transparent;border:none;
  padding:2px 6px;cursor:pointer;flex-shrink:0}
.se-del:hover{color:var(--danger)}

.se-add{display:inline-flex;align-items:center;gap:4px;height:28px;padding:0 12px;
  border:1px dashed #c9cdd4;border-radius:6px;font-size:12.5px;color:var(--text2);
  background:#fff;cursor:pointer;margin-top:6px;transition:.15s}
.se-add:hover{border-color:var(--brand);color:var(--brand);background:var(--brand-soft2)}
.se-add-card{margin-top:4px;margin-left:6px}
.se-add-section{margin-top:8px;align-self:flex-start}

/* ============ 培训资料模块 ============ */
.tr{max-width:1080px;margin:0 auto;padding:22px 24px 40px}
.tr-head{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;margin-bottom:14px}
.tr-title{font-size:22px;font-weight:700;color:var(--text1)}
.tr-sub{font-size:13px;color:var(--text3);margin-top:4px}
.tr-ops{display:flex;gap:10px;flex-shrink:0}
.tr-bar{display:flex;align-items:center;justify-content:space-between;gap:14px;flex-wrap:wrap;
  border-bottom:1px solid var(--line);padding-bottom:12px;margin-bottom:8px}
.tr-tabs{display:flex;gap:8px;flex-wrap:wrap}
.tr-tab{border:1px solid var(--line);background:#fff;color:var(--text2);font-size:13px;
  padding:6px 14px;border-radius:18px;cursor:pointer;transition:.15s}
.tr-tab:hover{border-color:var(--brand);color:var(--brand)}
.tr-tab.on{background:var(--brand);border-color:var(--brand);color:#fff}
.tr-tab .tr-cnt{font-style:normal;font-size:11px;opacity:.8;margin-left:2px}
.tr-filters{display:flex;gap:8px;align-items:center}
.tr-filters .e-in{width:180px}
.tr-body{margin-top:10px}
/* 统一板块图标徽标（所有板块共用，保证视觉一致） */
.tr-ico{display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;
  border-radius:9px;color:#fff;font-size:15px;flex-shrink:0;line-height:1;box-shadow:0 2px 6px rgba(0,0,0,.12)}
/* 单板块视图标题 */
.tr-sec{margin-bottom:22px}
.tr-sec-head{display:flex;align-items:center;gap:10px;margin:10px 0 12px}
.tr-sec-name{font-size:16px;font-weight:600;color:var(--text1);display:flex;align-items:center;gap:8px}
.tr-sec-name .tr-cnt{font-style:normal;font-size:12px;color:var(--text3);margin-left:2px}
.tr-sec-ops{display:flex;gap:8px;flex-shrink:0;margin-left:auto}
/* 全部：紧凑板块网格（多列自适应，更合理适配宽度） */
.tr-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:14px;align-items:start}
.tr-panel{border:1px solid var(--line);border-radius:12px;background:#fff;overflow:hidden;display:flex;flex-direction:column;transition:.15s}
.tr-panel:hover{box-shadow:0 6px 18px rgba(0,0,0,.08);border-color:#d6e0f5}
.tr-panel-h{display:flex;align-items:center;gap:10px;padding:12px 14px;cursor:pointer;
  border-bottom:1px solid var(--line);background:linear-gradient(180deg,#fafbff,#fff);transition:.15s}
.tr-panel-h:hover{background:#f4f7ff}
.tr-pname{font-size:15px;font-weight:600;color:var(--text1);flex:1;min-width:0;display:flex;align-items:center;gap:6px}
.tr-pname .tr-cnt{font-style:normal;font-size:12px;color:var(--text3)}
.tr-drill{font-size:12px;color:var(--brand);flex-shrink:0}
.tr-plist{padding:6px 14px 12px;display:flex;flex-direction:column}
.tr-prow{display:flex;align-items:center;gap:10px;padding:8px 0;border-bottom:1px dashed #eef0f4}
.tr-prow:last-child{border-bottom:none}
.tr-ptag{flex-shrink:0;font-size:11px;font-weight:600;color:#fff;padding:2px 8px;border-radius:6px;min-width:34px;text-align:center}
.tr-pinfo{flex:1;min-width:0}
.tr-ptitle{font-size:13.5px;font-weight:600;color:var(--text1);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tr-req{font-style:normal;font-size:10px;color:#fff;background:var(--danger);border-radius:4px;padding:1px 5px;margin-left:4px;vertical-align:middle}
.tr-pmeta{font-size:11.5px;color:var(--text3);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tr-pdl{flex-shrink:0;font-size:15px;color:var(--brand);text-decoration:none;width:26px;height:26px;display:inline-flex;align-items:center;justify-content:center;border-radius:6px}
.tr-pdl:hover{background:#eef2ff}
.tr-pempty{font-size:12.5px;color:var(--text3);padding:12px 2px}
.tr-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:14px}
.tr-card{position:relative;border:1px solid var(--line);border-radius:10px;background:#fff;overflow:hidden;
  display:flex;flex-direction:column;transition:.15s}
.tr-card:hover{box-shadow:0 6px 18px rgba(0,0,0,.08);border-color:#d6e0f5}
.tr-cover{height:64px;display:flex;align-items:center;justify-content:center;color:#fff;font-size:13px;font-weight:600;letter-spacing:1px}
.ty-video{background:linear-gradient(135deg,#3a7afe,#5b9bff)}
.ty-doc{background:linear-gradient(135deg,#2bb673,#46c98a)}
.ty-ppt{background:linear-gradient(135deg,#f0883e,#f5a35e)}
.ty-audio{background:linear-gradient(135deg,#8b5cf6,#a77bf6)}
.tr-cmain{padding:12px 14px;flex:1}
.tr-ct{font-size:14.5px;font-weight:600;color:var(--text1);line-height:1.4}
.tr-cs{font-size:12.5px;color:var(--text3);margin-top:6px;line-height:1.5;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.tr-cmeta{font-size:11.5px;color:var(--text3);margin-top:8px}
.tr-dl{display:inline-block;margin-top:10px;font-size:12.5px;color:var(--brand);text-decoration:none;font-weight:600}
.tr-dl:hover{text-decoration:underline}
.tr-card-ops{position:absolute;top:8px;right:8px;display:none;gap:6px}
.tr-card:hover .tr-card-ops{display:flex}
.btn-mini{height:26px;padding:0 10px;border:1px solid var(--line);background:rgba(255,255,255,.92);
  border-radius:6px;font-size:12px;color:var(--text2);cursor:pointer}
.btn-mini:hover{border-color:var(--brand);color:var(--brand)}
.btn-mini-p{background:var(--brand);border-color:var(--brand);color:#fff}
.btn-mini-p:hover{opacity:.9;color:#fff}
.btn-mini-d:hover{border-color:var(--danger);color:var(--danger)}

/* 通用弹窗 / toast（培训模块复用） */
.m-mask{position:fixed;inset:0;background:rgba(0,0,0,.4);display:none;align-items:center;justify-content:center;z-index:9999}
.m-mask.show{display:flex}
.m-box{width:440px;max-width:92vw;max-height:88vh;overflow:auto;background:#fff;border-radius:12px;
  box-shadow:0 18px 50px rgba(0,0,0,.25)}
.m-head{display:flex;align-items:center;justify-content:space-between;padding:14px 18px;
  font-size:16px;font-weight:600;border-bottom:1px solid var(--line)}
.m-x{background:transparent;border:none;font-size:22px;line-height:1;color:var(--text3);cursor:pointer}
.m-body{padding:16px 18px}
.m-lb{display:block;font-size:13px;color:var(--text2);margin:12px 0 5px}
.m-lb:first-child{margin-top:0}
.m-in{width:100%;height:34px;padding:0 10px;border:1px solid var(--line);border-radius:7px;font-size:13.5px;
  box-sizing:border-box;outline:none}
.m-in:focus{border-color:var(--brand)}
.m-file{width:100%;margin-top:4px;font-size:13px}
.m-hint{font-size:12px;color:var(--text3);margin-top:6px}
.m-foot{display:flex;justify-content:flex-end;gap:10px;padding:12px 18px;border-top:1px solid var(--line)}
.m-foot .btn-primary,.m-foot .btn-ghost{height:34px;padding:0 18px}
.m-toast{position:fixed;left:50%;bottom:40px;transform:translateX(-50%) translateY(20px);
  background:rgba(30,34,45,.92);color:#fff;padding:10px 18px;border-radius:8px;font-size:13.5px;
  opacity:0;pointer-events:none;transition:.2s;z-index:10000}
.m-toast.show{opacity:1;transform:translateX(-50%) translateY(0)}
.btn-primary{background:var(--brand);border:1px solid var(--brand);color:#fff;border-radius:7px;
  font-size:13.5px;cursor:pointer;transition:.15s}
.btn-primary:hover{opacity:.92}
.btn-primary:disabled{opacity:.55;cursor:default}
.btn-ghost{background:#fff;border:1px solid var(--line);color:var(--text2);border-radius:7px;
  font-size:13.5px;cursor:pointer;transition:.15s}
.btn-ghost:hover{border-color:var(--brand);color:var(--brand)}
