
:root{
  --bg-layout:#f5f6f8; --bg-card:#ffffff; --bg-soft:#f7f8fa;
  --brand:#e85d75; --brand-hover:#d14a62; --brand-soft:#fde8ec; --brand-rgb:232,93,117; --brand-tint:rgba(var(--brand-rgb),.06);
  --text-p:#111827; --text-s:#4b5563; --text-t:#9ca3af;
  --border:#e5e7eb; --border-soft:#f3f4f6; --input:#d1d5db;
  --success:#0d9488; --success-bg:#e7f7f0;
  --doing:#8b5cf6; --doing-bg:#f3e8ff;
  --danger:#ef4444; --danger-bg:#feecf0;
  --warn:#f59e0b; --info:#3b82f6; --info-bg:#edf7ff;
  --radius:12px; --radius-md:8px;
  --sidebar:240px; --header:56px;
  --shadow-card:0 1px 2px rgba(16,24,40,.04),0 1px 3px rgba(16,24,40,.06);
  --shadow-brand:0 4px 14px rgba(var(--brand-rgb),.18);
  --shadow-pop:0 8px 30px rgba(16,24,40,.12);
}
/* ===== 主题切换: 科技蓝 (红/蓝 由 localStorage tasks_theme 控制) ===== */
:root[data-theme="blue"]{
  --brand:#2f6df6; --brand-hover:#224fd4; --brand-soft:#e8efff; --brand-rgb:47,109,246; --brand-tint:rgba(var(--brand-rgb),.07);
  --shadow-brand:0 4px 14px rgba(var(--brand-rgb),.22);
}
:root[data-theme="blue"] .logo .mark{background:linear-gradient(135deg,#2f6df6,#1e4fd6)}
:root[data-theme="blue"] #loginPage .brand{background:linear-gradient(155deg,#1d4ed8 0%,#2563eb 40%,#0ea5e9 78%,#14b8a6 100%)}
:root[data-theme="blue"] #loginPage .btn{background:linear-gradient(135deg,#3b82f6,#2563eb 45%,#1d4ed8)}
.themeToggle{display:inline-flex;align-items:center;justify-content:center;gap:6px;height:34px;padding:0 12px;border-radius:10px;font-size:12.5px;font-weight:600;cursor:pointer;border:1px solid var(--border);background:#fff;color:var(--text-s);transition:all .15s;font-family:inherit}
.themeToggle:hover{border-color:var(--brand);color:var(--brand)}
.themeToggle i{width:14px;height:14px;border-radius:50%;display:inline-block;background:linear-gradient(135deg,#e85d75,#c53e5c);flex:none}
:root[data-theme="blue"] .themeToggle{background:linear-gradient(135deg,#2f6df6,#0ea5e9);color:#fff}
:root[data-theme="blue"] .themeToggle i{background:linear-gradient(135deg,#2f6df6,#0ea5e9)}

/* ===== 主题切换: 暖白 (红/科技蓝/暖白 三态) ===== */
:root[data-theme="warm"]{
  --bg-layout:#f6efe3; --bg-card:#fffdf8; --bg-soft:#f1eadb;
  --text-p:#2a2118; --text-s:#5a4d3c; --text-t:#a3987f;
  --border:#e6dbc7; --border-soft:#efe7d7; --input:#dcd0bb;
  --brand:#dc586f; --brand-hover:#c6475d; --brand-soft:#f9e4e9; --brand-rgb:220,88,111; --brand-tint:rgba(var(--brand-rgb),.06);
  --shadow-brand:0 4px 14px rgba(var(--brand-rgb),.2);
  --shadow-card:0 1px 2px rgba(140,105,60,.06),0 1px 3px rgba(140,105,60,.08);
  --shadow-pop:0 8px 30px rgba(90,60,20,.12);
}
:root[data-theme="warm"] .side{background:var(--bg-card);border-right:1px solid var(--border)}
:root[data-theme="warm"] .themeToggle{background:linear-gradient(135deg,#d9a45b,#c98a3e);color:#fff}
:root[data-theme="warm"] .themeToggle i{background:linear-gradient(135deg,#fff7e6,#f6e3c0)}

/* ===== 任务详情弹窗 (优化显示: 渐变头+信息网格+分区卡片) ===== */
#detailMask>.dlg{width:780px;max-width:94vw;max-height:92vh;display:flex;flex-direction:column;border-radius:18px;overflow:hidden}
#detailMask .dlg .dh{background:linear-gradient(135deg,var(--brand-hover),var(--brand));color:#fff;padding:18px 24px;display:flex;align-items:center;gap:12px;border:none;position:relative}
#detailMask .dlg .dh::after{content:'';position:absolute;right:-20px;top:-30px;width:130px;height:130px;border-radius:50%;background:radial-gradient(circle,rgba(255,255,255,.15),transparent 65%);pointer-events:none}
#detailMask .dlg .dh h3{color:#fff;font-size:19px;font-weight:800;letter-spacing:.4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
#detailMask .tk-sub{font-size:11.5px;opacity:.85;margin-top:3px}
#detailMask .dlg .dh .x{position:relative;z-index:1;width:30px;height:30px;border:none;border-radius:9px;background:rgba(255,255,255,.18);color:#fff;font-size:15px;line-height:1}
#detailMask .dlg .dh .x:hover{background:rgba(255,255,255,.3)}
#detailMask>.dlg>.db{padding:18px 24px;display:flex;flex-direction:column;gap:14px;overflow-y:auto;flex:1 1 auto;min-height:0}
#detailMask .tk-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px}
#detailMask .tk-cell{display:flex;align-items:center;gap:9px;background:#fafbfc;border:1px solid var(--border-soft);border-radius:10px;padding:10px 13px}
#detailMask .tk-cell .ic{width:30px;height:30px;border-radius:8px;background:var(--brand-soft);display:flex;align-items:center;justify-content:center;font-size:15px;flex-shrink:0}
#detailMask .tk-cell .k{font-size:11px;color:var(--text-t)}
#detailMask .tk-cell .v{font-size:13px;font-weight:600;color:var(--text-p);margin-top:1px}
#detailMask .tk-desc{font-size:13.5px;color:var(--text-s);line-height:1.8;background:var(--bg-soft);border:1px solid var(--border-soft);border-radius:10px;padding:12px 14px}
#detailMask .tk-sec{border:1px solid var(--border-soft);border-radius:12px;overflow:hidden;flex:0 0 auto}
#detailMask .tk-sec-h{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:11px 14px;background:#fafbfc;border-bottom:1px solid var(--border-soft);font-weight:700;font-size:13px;color:var(--text-p)}
#detailMask .tk-sec-h .cnt{color:var(--text-t);font-weight:400;font-size:12px}
#detailMask .tk-sec-h .act{font-weight:600;font-size:12px;color:var(--brand);cursor:pointer;background:none;border:none;white-space:nowrap}
#detailMask .tk-sec-b{padding:12px 14px;font-size:13px;color:var(--text-s)}
#detailMask .tk-cmt{background:var(--bg-soft);border-radius:8px;padding:9px 11px;margin-bottom:6px;font-size:13px;color:var(--text)}
#detailMask .tk-cmt b{font-weight:600;margin-right:6px;color:var(--text-p)}
#detailMask .tk-cmt .tm{font-size:11px;color:var(--text-t);margin-top:3px}
#detailMask .tk-cmt-input{min-height:52px;border:1px solid var(--border);border-radius:10px;padding:9px 12px;font-size:13px;font-family:inherit;resize:vertical}
#detailMask .tk-att-up{flex:1;min-width:160px;display:flex;align-items:center;justify-content:center;gap:6px;border:1px dashed var(--border);border-radius:8px;padding:9px;margin-top:9px;font-size:12px;color:var(--text-s);cursor:pointer;background:var(--bg-soft)}
#detailMask>.dlg>.df{border-top:1px solid var(--border-soft);padding:13px 24px;justify-content:flex-end;gap:10px}
@media(max-width:640px){#detailMask .tk-grid{grid-template-columns:1fr}}

*{margin:0;padding:0;box-sizing:border-box}
body{font-family:-apple-system,"PingFang SC","Microsoft YaHei",sans-serif;background:var(--bg-layout);color:var(--text-p);font-size:14px}
button{font-family:inherit;cursor:pointer;border:none;background:none}
a{text-decoration:none;color:inherit}
/* ===== 布局 ===== */
.app{display:flex;min-height:100vh}
/* 侧边栏 */
.side{width:var(--sidebar);background:#fff;border-right:1px solid var(--border);flex-shrink:0;display:flex;flex-direction:column;position:sticky;top:0;height:100vh}
.logo{display:flex;align-items:center;gap:10px;padding:18px 20px 16px;border-bottom:1px solid var(--border-soft)}
.logo .mark{width:34px;height:34px;border-radius:10px;background:linear-gradient(135deg,var(--brand),var(--brand-hover));display:flex;align-items:center;justify-content:center;color:#fff;font-weight:800;font-size:17px;box-shadow:var(--shadow-brand)}
.logo .nm{font-weight:700;font-size:15px}
.logo .sub{font-size:11px;color:var(--text-t)}
.nav{flex:1;padding:14px 12px;display:flex;flex-direction:column;gap:2px}
.nav .grp{font-size:11px;color:var(--text-t);padding:10px 12px 6px;letter-spacing:.5px}
.nav a{display:flex;align-items:center;gap:11px;padding:9px 12px;border-radius:var(--radius-md);font-weight:500;color:var(--text-s);transition:all .15s}
.nav a svg{flex-shrink:0}
.nav a:hover{background:var(--bg-soft)}
.nav a.active{background:var(--brand-soft);color:var(--brand);font-weight:600}
.nav a .cnt{margin-left:auto;background:#eef0f3;color:var(--text-s);font-size:11px;border-radius:10px;padding:1px 8px;font-weight:600}
.nav a.active .cnt{background:#fff;color:var(--brand)}
.nav a.ovd .cnt{background:#feecf0;color:var(--danger)}
.nav .foot{position:absolute;bottom:0;left:0;right:0;padding:14px 16px;border-top:1px solid var(--border-soft);display:flex;align-items:center;gap:10px}
.nav .foot .av{width:30px;height:30px;border-radius:50%;background:linear-gradient(135deg,#4B74FA,#6366F1);display:flex;align-items:center;justify-content:center;color:#fff;font-size:12px;font-weight:700}
.nav .foot .nm{font-size:13px;font-weight:600}
.nav .foot .role{font-size:11px;color:var(--text-t)}
/* 主区 */
.main{flex:1;display:flex;flex-direction:column;min-width:0}
.header{height:var(--header);background:rgba(255,255,255,.95);backdrop-filter:blur(10px);border-bottom:1px solid var(--border);display:flex;align-items:center;padding:0 24px;gap:16px;position:sticky;top:0;z-index:20}
.header .ttl{font-size:16px;font-weight:700}
.header .crumb{color:var(--text-t);font-size:13px}
.header .spacer{flex:1}
.header .search{display:flex;align-items:center;gap:8px;background:var(--bg-soft);border:1px solid var(--border);border-radius:var(--radius-md);padding:6px 12px;width:240px;color:var(--text-t)}
.header .search input{border:none;background:none;outline:none;font-size:13px;width:100%;color:var(--text-p)}
.header .btn-p{background:var(--brand);color:#fff;padding:8px 16px;border-radius:var(--radius-md);font-weight:600;font-size:13px;box-shadow:var(--shadow-brand);display:flex;align-items:center;gap:7px;transition:all .15s}
.header .btn-p:hover{background:var(--brand-hover);transform:translateY(-1px)}
.header .btn-p svg{stroke-width:2.2}
/* 右上角个人中心头像 */
.mob-me-av{width:34px;height:34px;border-radius:50%;background:linear-gradient(135deg,var(--brand),#c74f9e);color:#fff;display:flex;align-items:center;justify-content:center;font-size:14px;font-weight:700;cursor:pointer;flex-shrink:0;box-shadow:0 2px 8px rgba(var(--brand-rgb),.3);user-select:none}
@media(max-width:820px){.mob-me-av{width:32px;height:32px;font-size:13px}}
.header .icon-btn{width:34px;height:34px;border-radius:var(--radius-md);display:flex;align-items:center;justify-content:center;color:var(--text-s);position:relative}
.header .icon-btn:hover{background:var(--bg-soft)}
.header .icon-btn .dot{position:absolute;top:7px;right:8px;width:8px;height:8px;background:var(--danger);border-radius:50%;border:2px solid #fff}
/* 内容 */
.content{padding:22px 24px 40px;max-width:1280px;width:100%;margin:0 auto}
/* 视图切换: opacity 恒为 1 且用 !important (级联中 important 声明优先级高于 animation),
   动画只保留 transform -> 即使合成器/动画被冻结(后台标签页/GPU节流/减弱动态效果), 内容也不可能变透明 */
.view{display:none;opacity:1}
.view.on{display:block;opacity:1!important;animation:fade .25s ease}
@keyframes fade{from{transform:translateY(4px)}to{transform:none}}
@media (prefers-reduced-motion:reduce){.view.on{animation:none}}
/* KPI 条 */
.kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-bottom:20px}
.kpi{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);padding:16px 18px;box-shadow:var(--shadow-card);display:flex;align-items:center;gap:14px}
.kpi .ic{width:42px;height:42px;border-radius:11px;display:flex;align-items:center;justify-content:center;flex-shrink:0}
.kpi .ic.t{background:#eef2ff;color:#4F46E5}
.kpi .ic.d{background:#e7f7f0;color:var(--success)}
.kpi .ic.o{background:#feecf0;color:var(--danger)}
.kpi .ic.f{background:#edf7ff;color:var(--info)}
.kpi .v{font-size:24px;font-weight:800;line-height:1}
.kpi .l{font-size:12px;color:var(--text-s);margin-top:4px}
.kpi .delta{font-size:11px;color:var(--text-t);margin-top:2px}
.kpi .delta.up{color:var(--success)}
.kpi .delta.ov{color:var(--danger)}
/* 面板 */
.panel{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-card);margin-bottom:18px;overflow:hidden}
.panel .ph{display:flex;align-items:center;gap:10px;padding:14px 18px;border-bottom:1px solid var(--border-soft)}
.panel .ph h3{font-size:14px;font-weight:700}
.panel .ph .sub{font-size:12px;color:var(--text-t)}
.panel .ph .spacer{flex:1}
/* 视切 tabs */
.vtabs{display:flex;background:var(--bg-soft);border-radius:var(--radius-md);padding:3px;gap:2px}
.vtabs b{font-weight:500;font-size:12px}
.vtabs button{padding:6px 14px;border-radius:6px;font-size:13px;color:var(--text-s);display:flex;align-items:center;gap:6px}
.vtabs button.on{background:#fff;color:var(--text-p);font-weight:600;box-shadow:0 1px 2px rgba(16,24,40,.08)}
/* 看板 */
.board{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;padding:16px}
.col{background:var(--bg-soft);border-radius:var(--radius);padding:12px;min-height:320px}
.col .ch{display:flex;align-items:center;gap:8px;padding:0 2px 10px}
.col .ch .nm{font-weight:700;font-size:13px;display:flex;align-items:center;gap:7px}
.col .ch .nm .bar{width:9px;height:9px;border-radius:3px}
.col .ch .nm .bar.todo{background:var(--info)}
.col .ch .nm .bar.doing{background:#8b5cf6}
.col .ch .nm .bar.done{background:var(--success)}
.col .ch .nm .bar.ovd{background:var(--danger)}
.col .ch .n{background:#e8eaee;border-radius:10px;font-size:11px;color:var(--text-s);padding:1px 8px;font-weight:600}
.col .ch .add{margin-left:auto;color:var(--text-t);width:24px;height:24px;border-radius:6px;display:flex;align-items:center;justify-content:center}
.col .ch .add:hover{background:#e5e7eb;color:var(--text-p)}
.card{background:#fff;border:1px solid var(--border);border-radius:10px;padding:12px;margin-bottom:10px;box-shadow:var(--shadow-card);cursor:grab;transition:all .15s;position:relative}
.card:hover{box-shadow:0 4px 14px rgba(16,24,40,.1);transform:translateY(-1px)}
.card.ovd{border-color:#fecaca;background:#fff}
.card .tags{display:flex;gap:6px;margin-bottom:9px}
.card .tag{font-size:10.5px;padding:2px 8px;border-radius:6px;font-weight:600}
.card .tag.p{background:var(--brand-soft);color:var(--brand)}
.card .tag.m{background:#fff4e6;color:#d97706}
.card .tag.l{background:#eef2ff;color:#4F46E5}
.card .tag.ovd{background:#feecf0;color:var(--danger)}
.card .tt{font-weight:600;font-size:13px;line-height:1.45;margin-bottom:6px}
.card .ds{font-size:12px;color:var(--text-s);line-height:1.5;margin-bottom:10px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.card .ft{display:flex;align-items:center;gap:10px}
.card .ft .av{width:24px;height:24px;border-radius:50%;display:flex;align-items:center;justify-content:center;color:#fff;font-size:10px;font-weight:700;background:linear-gradient(135deg,#4B74FA,#6366F1)}
.card .ft .av.b{background:linear-gradient(135deg,#0d9488,#10b981)}
.card .ft .av.c{background:linear-gradient(135deg,var(--brand),var(--brand-hover))}
.card .ft .du{font-size:11.5px;color:var(--text-s);display:flex;align-items:center;gap:4px;margin-left:auto}
.card .ft .du.risk{color:var(--danger);font-weight:600}
.card .ft .du.soon{color:var(--warn);font-weight:600}
.card .cmt{background:var(--bg-soft);border-radius:6px;display:flex;align-items:center;justify-content:center;gap:4px;padding:2px 7px;font-size:11px;color:var(--text-s);font-weight:600}
/* 列表 */
.tlist{padding:0}
.tlist table{width:100%;border-collapse:collapse}
.tlist th{font-size:12px;color:var(--text-t);font-weight:600;text-align:left;padding:12px 18px;border-bottom:1px solid var(--border-soft);background:var(--bg-soft)}
.tlist td{padding:13px 18px;border-bottom:1px solid var(--border-soft);vertical-align:middle}
.tlist tr:last-child td{border-bottom:none}
.tlist tr:hover td{background:#fafbfc}
.tlist .tasks{display:flex;align-items:center;gap:9px;font-weight:600;font-size:13.5px}
.tlist .st{border-radius:6px;font-size:11px;padding:3px 9px;font-weight:600;white-space:nowrap}
.tlist .st.todo{background:var(--info-bg);color:var(--info)}
.tlist .st.doing{background:var(--doing-bg);color:var(--doing)}
.tlist .st.done{background:var(--success-bg);color:var(--success)}
.tlist .st.ovd{background:var(--danger-bg);color:var(--danger)}
.tlist .av{width:26px;height:26px;border-radius:50%;display:flex;align-items:center;justify-content:center;color:#fff;font-size:11px;font-weight:700}
.tlist .av.a{background:linear-gradient(135deg,#4B74FA,#6366F1)}
.tlist .av.b{background:linear-gradient(135deg,#0d9488,#10b981)}
.tlist .av.c{background:linear-gradient(135deg,var(--brand),var(--brand-hover))}
.tlist .du{font-size:12.5px;color:var(--text-s)}
.tlist .du.risk{color:var(--danger);font-weight:600}
.tlist .row-acts{display:flex;gap:4px;opacity:0;transition:opacity .15s}
.tlist tr:hover .row-acts{opacity:1}
.tlist .qa{width:30px;height:30px;border-radius:var(--radius-md);display:flex;align-items:center;justify-content:center;color:var(--text-s)}
.tlist .qa:hover{background:var(--bg-soft)}
/* 无任务 */
.empty{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:50px 20px;color:var(--text-t)}
.empty .big{width:64px;height:64px;border-radius:18px;background:var(--bg-soft);display:flex;align-items:center;justify-content:center;margin-bottom:14px}
.empty h4{font-size:15px;color:var(--text-p);margin-bottom:6px;font-weight:600}
.empty p{font-size:13px;margin-bottom:16px}
/* 快速面板 */
.quickcards{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-bottom:18px}
.qc{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);padding:16px;box-shadow:var(--shadow-card);display:flex;align-items:center;gap:13px;transition:all .15s}
.qc:hover{box-shadow:var(--shadow-pop);transform:translateY(-2px)}
.qc .ic{width:40px;height:40px;border-radius:11px;display:flex;align-items:center;justify-content:center;flex-shrink:0}
.qc .nm{font-size:14px;font-weight:600}
.qc .ds{font-size:12px;color:var(--text-s);margin-top:2px}
.qc .arr{margin-left:auto;color:var(--text-t)}
/* 最近任务 */
.recent-list{display:flex;flex-direction:column}
.r-task{display:flex;align-items:center;gap:13px;padding:13px 18px;border-bottom:1px solid var(--border-soft);transition:background .15s}
.r-task:last-child{border-bottom:none}
.r-task:hover{background:#fafbfc}
.r-task .av{width:32px;height:32px;border-radius:9px;display:flex;align-items:center;justify-content:center;flex-shrink:0}
.r-task .bd{flex:1;min-width:0}
.r-task .bd .tt{font-weight:600;font-size:13px}
.r-task .bd .meta{font-size:12px;color:var(--text-t);margin-top:2px}
.r-task .st{border-radius:6px;font-size:11px;padding:3px 9px;font-weight:600}
.r-task .st.todo{background:var(--info-bg);color:var(--info)}
.r-task .st.doing{background:var(--doing-bg);color:var(--doing)}
.r-task .st.done{background:var(--success-bg);color:var(--success)}
.r-task .st.ovd{background:var(--danger-bg);color:var(--danger)}
/* 我的任务 tab 行 */
.mytabs{display:flex;gap:8px;padding:14px 18px;border-bottom:1px solid var(--border-soft);flex-wrap:wrap}
.mytab{padding:6px 14px;border-radius:20px;font-size:12.5px;background:var(--bg-soft);color:var(--text-s);font-weight:500}
.mytab.on{background:var(--brand);color:#fff;font-weight:600}
.mytab.ovd{background:#feecf0;color:var(--danger)}
/* 弹窗 */
.mask{position:fixed;inset:0;background:rgba(15,23,42,.45);backdrop-filter:blur(3px);z-index:100;display:none;align-items:flex-start;justify-content:center;padding-top:9vh}
.mask.on{display:flex}
.dlg{background:#fff;border-radius:14px;width:480px;max-height:82vh;overflow:auto;box-shadow:var(--shadow-pop);opacity:1!important;animation:pop .2s ease}
@keyframes pop{from{transform:scale(.97)}to{transform:none}}
.dlg .dh{display:flex;align-items:center;padding:18px 22px 12px}
.dlg .dh h3{font-size:16px;font-weight:700}
.dlg .dh .x{margin-left:auto;color:var(--text-t);width:30px;height:30px;border-radius:8px;display:flex;align-items:center;justify-content:center}
.dlg .dh .x:hover{background:var(--bg-soft)}
.dlg .db{padding:4px 22px 20px;display:flex;flex-direction:column;gap:14px}
.f-group label{display:block;font-size:12.5px;font-weight:600;color:var(--text-s);margin-bottom:6px}
.f-group input,.f-group textarea,.f-group select{width:100%;border:1px solid var(--input);border-radius:var(--radius-md);padding:9px 12px;font-size:13.5px;font-family:inherit;outline:none;transition:border .15s;background:#fff;color:var(--text-p)}
.f-group input:focus,.f-group textarea:focus,.f-group select:focus{border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-tint)}
.f-group textarea{resize:vertical;min-height:72px}
.f-row{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.f-group .sel{position:relative}
.f-group .sel select{appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='none' stroke='%239ca3af' stroke-width='2'%3E%3Cpath d='m4 6 4 4 4-4'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 11px center;padding-right:34px}
.usr-sugg{position:absolute;top:calc(100%+2px);left:0;right:0;background:#fff;border:1px solid var(--border);border-radius:10px;box-shadow:0 8px 24px rgba(0,0,0,.08);max-height:220px;overflow:auto;z-index:60;display:none}
.usr-sugg-it{padding:9px 12px;font-size:13px;cursor:pointer;color:var(--text)}
.usr-sugg-it:hover,.usr-sugg-it.on{background:var(--brand-tint);color:var(--brand)}
.dlg .df{display:flex;gap:10px;justify-content:flex-end;padding:14px 22px 20px;border-top:1px solid var(--border-soft)}
.dlg .df .btn-c{padding:9px 18px;border-radius:var(--radius-md);color:var(--text-s);font-weight:600;font-size:13.5px;background:var(--bg-soft)}
.dlg .df .btn-c:hover{background:#eaecf0}
.dlg .df .btn-ok{padding:9px 20px;border-radius:var(--radius-md);background:var(--brand);color:#fff;font-weight:600;font-size:13.5px;box-shadow:var(--shadow-brand)}
.dlg .df .btn-ok:hover{background:var(--brand-hover)}
/* toast */
.toast{position:fixed;bottom:30px;left:50%;transform:translateX(-50%) translateY(80px);background:#111827;color:#fff;padding:11px 22px;border-radius:10px;font-size:13px;font-weight:500;opacity:0;transition:all .3s;z-index:200;box-shadow:0 8px 24px rgba(0,0,0,.2)}
.toast.on{opacity:1;transform:translateX(-50%) translateY(0)}
/* 逾期高亮卡片顶部条纹 */
.card.ovd::before{content:"";position:absolute;top:0;left:0;right:0;height:3px;background:var(--danger);border-radius:10px 10px 0 0}
/* 移动端 */
@media(max-width:900px){
  .content{padding:16px}
  .kpis{grid-template-columns:repeat(2,1fr)}
  .board{grid-template-columns:1fr 1fr;overflow-x:auto}
  .quickcards{grid-template-columns:1fr}
}

/* ===== 手机端 (≤768px): 侧栏抽屉 + 单栏堆叠 + 横滚 ===== */
.hamb{display:none}
.side-scrim{display:none}
@media(max-width:768px){
  /* 侧栏改滑出抽屉 */
  .hamb{display:flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:8px;color:var(--text-s);background:var(--bg-soft);flex-shrink:0}
  .side{position:fixed;left:0;top:0;bottom:0;width:var(--sidebar);z-index:95;transform:translateX(-100%);transition:transform .25s ease;box-shadow:var(--shadow-pop)}
  .side.open{transform:translateX(0)}
  .side-scrim{display:block;position:fixed;inset:0;background:rgba(15,23,42,.4);z-index:90;opacity:0;pointer-events:none;transition:opacity .2s}
  .side-scrim.on{opacity:1;pointer-events:auto}
  /* 主区全宽 */
  .app{display:block}
  .main{min-height:100vh}
  .header{padding:0 12px;gap:8px;height:52px}
  .header .ttl{font-size:15px}
  .header .crumb{display:none}
  .header .search{width:auto;flex:1;min-width:0}
  .header .search input{min-width:0}
  .header .btn-p{padding:7px 12px;font-size:12px}
  .header .btn-p b{display:none}
  .content{padding:12px 12px 34px}
  .kpis{grid-template-columns:repeat(2,1fr);gap:10px}
  .kpi{padding:12px 14px}
  .kpi .v{font-size:20px}
  /* 看板横滚 */
  .board{grid-template-columns:none;grid-auto-flow:column;grid-auto-columns:minmax(268px,85vw);gap:12px;padding:14px;overflow-x:auto;-webkit-overflow-scrolling:touch}
  .col{min-height:300px}
  .col .ch .nm{white-space:nowrap}
  /* 面板头换行 */
  .panel .ph{flex-wrap:wrap;gap:8px;padding:12px 14px}
  .panel .ph h3{font-size:13.5px}
  /* 表格横滚 */
  .panel{overflow-x:auto}
  .tlist{min-width:560px}
  .quickcards{grid-template-columns:1fr}
  /* 知识库: 两栏上下堆叠 */
  #v-kb>div{flex-direction:column}
  #kbDetail{max-height:none;min-height:50vh}
  /* 知识库分栏: 移动端隐藏分隔条/折叠按钮(对齐 octop), 左栏始终展开, 树不占位 */
  .kb-split,.kb-tree-divider{display:none!important}
  .kb-layout.kb-side-collapsed .kb-side{display:flex}
  #kbDocTree{display:none!important}
  /* 弹窗接近全屏, 底部sheet */
  .mask{padding-top:0;align-items:flex-end}
  .dlg{width:100%;max-height:92vh;border-radius:16px 16px 0 0;animation:sheet .25s ease}
  @keyframes sheet{from{transform:translateY(40px);opacity:.6}to{transform:none;opacity:1}}
  .f-row{grid-template-columns:1fr}
  /* 预览抽屉近全屏 (覆盖内联 max-width:88vw) */
  #kbDrawer{width:100vw;max-width:100vw!important}
  /* 我的任务 tab 滚动 */
  .mytabs{flex-wrap:nowrap;overflow-x:auto;-webkit-overflow-scrolling:touch}
  .mytab{white-space:nowrap}
  /* 工作日报移动端: 表单纵向 + 全宽 + 触控友好 */
  #v-work .wl-form{flex-direction:column;align-items:stretch;gap:12px}
  /* 列模式下原内联 flex:0 0 150px(flex:1)会变成高度, 撑开日期与内容的大空档 —— 全部改为自适应高度 */
  #v-work .wl-form > div{flex:0 0 auto !important;width:100%;box-sizing:border-box}
  #v-work .wl-date{width:100%;min-height:44px}
  #v-work .wl-ct{flex:none !important;width:100%;align-self:flex-start;min-height:120px !important;font-size:16px !important;line-height:1.6}
  #v-work .wl-btn{align-self:stretch !important;height:44px;font-size:15px}
  #v-work .wl-list-item{flex-direction:column;gap:8px;padding:12px}
  #v-work .wl-list-item .wl-act{padding-top:0;border-top:1px solid var(--border-soft);display:flex;justify-content:flex-end;gap:16px}
  #v-work .wl-list-item button{min-height:36px;padding:0 14px;font-size:14px}
  #v-work .wl-group-tag{font-size:14px}
}

.user-drop{box-shadow:var(--shadow-pop)}
.user-drop div:hover{background:var(--brand-soft);color:var(--brand)}
.user-drop div:hover span{color:inherit}
.user-menu .me-pill:hover{background:var(--bg-soft)}


/* ===== 共用按钮组件 .btn (全站统一, 替代各处内联样式) ===== */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;border:none;border-radius:8px;font-size:13px;font-weight:600;line-height:1;cursor:pointer;padding:8px 16px;transition:transform .1s,background .15s,color .15s,border-color .15s,box-shadow .15s;white-space:nowrap}
.btn:active{transform:scale(.97)}
.btn-primary{background:var(--brand);color:#fff;box-shadow:0 4px 14px rgba(var(--brand-rgb),.2)}
.btn-primary:hover{background:var(--brand-hover);box-shadow:0 4px 16px rgba(var(--brand-rgb),.28)}
.btn-ghost{background:#fff;color:var(--text-s);border:1px solid var(--border)}
.btn-ghost:hover{color:var(--brand);border-color:var(--brand)}
.btn-soft{background:var(--bg-soft);color:var(--text-s);border:1px solid var(--border)}
.btn-soft:hover{color:var(--brand);border-color:var(--brand)}
.btn-pink{background:var(--brand-soft,#fdeef1);color:var(--brand)}
.btn-pink:hover{background:#fcdde4}
.btn-danger{background:var(--danger);color:#fff}
.btn-danger:hover{background:#dc2626}
.btn-danger-ghost{background:#fff;color:var(--danger);border:1px solid var(--brand-soft,#f3c3cc)}
.btn-danger-ghost:hover{border-color:var(--danger);background:#fff5f5}
.btn-link{background:none;color:var(--text-s);padding:4px 8px}
.btn-link:hover{color:var(--brand);background:var(--bg-soft)}
.btn-danger-link{background:none;color:var(--danger);padding:4px 8px}
.btn-danger-link:hover{background:var(--danger-bg)}
.btn-sm{padding:5px 12px;font-size:12px;border-radius:6px}
.btn-md{padding:8px 16px}
.btn-lg{padding:11px 24px}
.btn-block{width:100%}
.btn-rect{width:30px;height:30px;padding:0;border-radius:8px;flex:0 0 auto}
.btn-icon{width:26px;height:26px;padding:0;border-radius:8px;flex:0 0 auto}
.btn-fab{width:40px;height:40px;padding:0;border-radius:50%;flex:0 0 auto}
#loginPage::before{content:'';position:absolute;top:-30%;right:-20%;width:900px;height:900px;border-radius:50%;background:radial-gradient(circle,rgba(var(--brand-rgb),.20),transparent 60%)}
#loginPage::after{content:'';position:absolute;bottom:-35%;left:-15%;width:800px;height:800px;border-radius:50%;background:radial-gradient(circle,rgba(120,90,255,.16),transparent 60%)}
#loginPage .glowdot{position:absolute;border-radius:50%;filter:blur(28px);opacity:.8;animation:lgr 9s ease-in-out infinite alternate}
#loginPage{position:fixed;inset:0;display:flex;overflow:hidden;background:#fff;z-index:60}
#loginPage .shell{display:flex;width:100%;height:100%;min-height:0;border-radius:0;overflow:hidden;background:#fff;position:relative;z-index:2}
#loginPage .brand{flex:1.15;position:relative;display:flex;flex-direction:column;justify-content:space-between;padding:50px 48px;color:#fff;overflow:hidden;background:linear-gradient(155deg,var(--brand) 0%,#e76682 30%,#c74f9e 68%,#9a5ce0 100%);z-index:1}
#loginPage .brand::before{content:'';position:absolute;top:-110px;right:-70px;width:360px;height:360px;border-radius:50%;background:rgba(255,255,255,.10);box-shadow:0 0 60px rgba(255,255,255,.08)}
#loginPage .brand::after{content:'';position:absolute;bottom:-80px;left:-90px;width:300px;height:300px;border-radius:50%;background:rgba(255,255,255,.07)}
#loginPage .brand .ring{position:absolute;border:1.5px solid rgba(255,255,255,.16);border-radius:50%}
#loginPage .brandTop{display:flex;align-items:center;gap:14px;position:relative;z-index:2}
#loginPage .brandMark{width:46px;height:46px;border-radius:13px;background:rgba(255,255,255,.20);border:1px solid rgba(255,255,255,.28);display:flex;align-items:center;justify-content:center;font-size:23px;font-weight:800;backdrop-filter:blur(6px);box-shadow:0 4px 16px rgba(0,0,0,.12)}
#loginPage .brandName{font-size:18px;font-weight:700;letter-spacing:.4px}
#loginPage .brandSub{font-size:11px;opacity:.78;margin-top:3px;letter-spacing:1.2px}
#loginPage .brandBody{position:relative;z-index:2;margin-top:auto;margin-bottom:auto}
#loginPage .brandTitle{font-size:38px;line-height:1.35;font-weight:800;letter-spacing:1px;text-shadow:0 2px 24px rgba(0,0,0,.18)}
#loginPage .brandDesc{font-size:14.5px;line-height:1.9;opacity:.9;margin-top:18px;max-width:320px}
#loginPage .brandPoints{margin-top:42px;display:flex;flex-direction:column;gap:18px;position:relative;z-index:2}
#loginPage .bpoint{display:flex;align-items:center;gap:15px;padding:13px 15px;border-radius:14px;background:rgba(255,255,255,.09);border:1px solid rgba(255,255,255,.12);backdrop-filter:blur(8px);transition:transform .2s}
#loginPage .bpoint:hover{transform:translateX(4px);background:rgba(255,255,255,.14)}
#loginPage .bpointIco{width:42px;height:42px;border-radius:12px;background:rgba(255,255,255,.18);display:flex;align-items:center;justify-content:center;font-size:20px;flex-shrink:0}
#loginPage .bpointC{flex:1;min-width:0}
#loginPage .bpointT{font-size:14px;font-weight:600}
#loginPage .bpointD{font-size:11.5px;opacity:.82;margin-top:2px;line-height:1.5}
#loginPage .brandFoot{position:relative;z-index:2;font-size:11.5px;opacity:.65}
#loginPage .panel{flex:1;padding:56px 52px 44px;display:flex;flex-direction:column;justify-content:center;position:relative}
#loginPage .panel::before{content:'';position:absolute;top:0;right:0;width:200px;height:200px;background:radial-gradient(circle,rgba(var(--brand-rgb),.06),transparent 70%)}
#loginPage .panelTitle{font-size:27px;font-weight:800;color:#111827;letter-spacing:.5px}
#loginPage .panelSub{font-size:13.5px;color:#9ca3af;margin-top:7px}
#loginPage .form{margin-top:30px;display:flex;flex-direction:column;z-index:2}
#loginPage .fld{margin-bottom:15px}
#loginPage .fldLabel{font-size:13px;color:#4b5563;margin-bottom:7px;display:flex;align-items:center;gap:4px;font-weight:500}
#loginPage .fldLabel .req{color:var(--brand)}
#loginPage .inpWrap{display:flex;align-items:center;gap:10px;border:1.5px solid #eef0f3;border-radius:12px;padding:0 15px;height:50px;transition:all .18s;background:#f8f9fb;box-shadow:inset 0 1px 2px rgba(0,0,0,.02)}
#loginPage .inpWrap.focus{border-color:var(--brand);box-shadow:0 0 0 4px rgba(var(--brand-rgb),.12);background:#fff}
#loginPage .inpWrap input{flex:1;border:none;outline:none;background:transparent;font-size:14.5px;color:#111827;font-family:inherit}
#loginPage .inpWrap input::placeholder{color:#b6bcc6}
#loginPage .optRow{display:flex;align-items:center;justify-content:space-between;margin:2px 0 20px}
#loginPage .chk{display:flex;align-items:center;gap:7px;font-size:12.5px;color:#4b5563;cursor:pointer;user-select:none}
#loginPage .chk input{width:15px;height:15px;accent-color:var(--brand);cursor:pointer}
#loginPage .link{font-size:12.5px;color:var(--brand);cursor:pointer;text-decoration:none}
#loginPage .btn{width:100%;height:52px;border:none;border-radius:13px;background:linear-gradient(135deg,var(--brand),var(--brand) 45%,var(--brand-hover));color:#fff;font-size:15px;font-weight:700;cursor:pointer;box-shadow:0 12px 30px rgba(var(--brand-rgb),.35);transition:transform .15s,box-shadow .2s;font-family:inherit;letter-spacing:2px}
#loginPage .btn:hover{transform:translateY(-2px);box-shadow:0 16px 36px rgba(var(--brand-rgb),.42)}
#loginPage .btn:active{transform:translateY(0)}
#loginPage .btn:disabled{opacity:.6;cursor:not-allowed;transform:none}
#loginPage .chip{font-size:11.5px;padding:6px 13px;border-radius:20px;background:#fff;border:1px solid #e5e7eb;color:#4b5563;cursor:pointer;transition:all .15s;font-family:inherit}
#loginPage .chip:hover{border-color:var(--brand);color:var(--brand);box-shadow:0 2px 8px rgba(var(--brand-rgb),.12)}
#loginPage .chip.on{background:var(--brand);color:#fff;border-color:var(--brand);font-weight:600}
#loginPage .foot{margin-top:28px;text-align:center;font-size:11.5px;color:#9ca3af}
#loginPage .err{color:#ef4444;font-size:12.5px;margin:-4px 0 12px;min-height:16px}
/* 登录页: 面板内容限宽(大屏不拉伸), 全屏自适应 */
#loginPage .panelTitle,#loginPage .panelSub,#loginPage .form,#loginPage .foot{max-width:460px}

@media(min-width:821px) and (max-width:1120px){
  #loginPage .brand{padding:38px 34px}
  #loginPage .brandTitle{font-size:30px}
  #loginPage .brandPoints{margin-top:26px;gap:12px}
  #loginPage .panel{padding:44px 34px}
}
@keyframes lgr{from{transform:translate(0,0) scale(1)}to{transform:translate(30px,-20px) scale(1.1)}}
@media(min-width:821px) and (max-height:780px){
  #loginPage .brand{padding:34px 44px 26px}
  #loginPage .brandTitle{font-size:27px}
  #loginPage .brandDesc{margin-top:12px;font-size:12.5px;max-width:300px}
  #loginPage .brandPoints{margin-top:20px;gap:9px}
  #loginPage .bpoint{padding:8px 12px}
  #loginPage .bpointIco{width:32px;height:32px;font-size:16px}
  #loginPage .bpointD{display:none}
}
@media(min-width:821px) and (max-height:640px){
  #loginPage .brandPoints{display:none}
  #loginPage .brandDesc{display:none}
  #loginPage .brand{padding-top:26px}
}

@media(max-width:820px){#loginPage .brand{display:none}#loginPage .shell{width:100%;min-height:0}#loginPage .panel{padding:40px 28px}
  /* 键盘弹起时登录页可纵向滚动, 按钮不被遮 */
  #loginPage{overflow-y:auto;align-items:flex-start;padding:24px 16px 40px}
  #loginPage .shell{margin:auto 0 0}
  #loginPage .form{margin-top:24px}
  #loginPage .panelTitle{font-size:24px}
  #loginPage .inpWrap{height:48px}
  #loginPage .btn{height:50px}}


/* ===== 工作台方向A (wh-) ===== */
#v-home{display:flex;flex-direction:column;gap:16px}
.wh-hero{background:linear-gradient(135deg,#fff 34%,var(--brand-soft));border:1px solid var(--border);border-radius:14px;padding:20px 22px;display:flex;align-items:center;justify-content:space-between;gap:16px;box-shadow:var(--shadow-card)}
.wh-hero-left{min-width:0}
.wh-hi{font-size:12px;color:var(--text-t);margin-bottom:5px}
.wh-title{font-size:20px;font-weight:700;color:var(--text-p)}
.wh-title #heroName{color:var(--brand)}
.wh-sub{font-size:12.5px;color:var(--text-s);margin-top:6px}
.wh-sub b{color:var(--brand);font-weight:600}
.wh-hero-acts{display:flex;gap:9px;flex:none}
.wh-hero-acts button{border:none;border-radius:10px;padding:9px 16px;font-size:12.5px;cursor:pointer;font-weight:500;transition:.15s}
.wh-btn-ghost{background:#fff;border:1px solid var(--border) !important;color:var(--text-s)}
.wh-btn-ghost:hover{background:var(--bg-soft)}
.wh-btn-prim{background:var(--brand);color:#fff;box-shadow:var(--shadow-brand)}
.wh-btn-prim:hover{background:var(--brand-hover)}

.wh-kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:14px}
.wh-kpis .kpi{display:flex;align-items:center;gap:14px;padding:16px 18px}
.wh-ic{width:40px;height:40px;border-radius:11px;display:flex;align-items:center;justify-content:center;flex:none}
.wh-kpis .v{font-size:22px;font-weight:700;line-height:1.1;color:var(--text-p)}
.wh-kpis .l{font-size:11.5px;color:var(--text-t);margin-top:3px}

.wh-3{display:grid;grid-template-columns:1fr 1fr 1.1fr;gap:14px;align-items:start}
.wh-card{background:var(--bg-card);border:1px solid var(--border);border-radius:14px;box-shadow:var(--shadow-card);overflow:hidden}
.wh-card-hd{display:flex;align-items:center;justify-content:space-between;padding:13px 16px;border-bottom:1px solid var(--border-soft)}
.wh-card-hd h3{font-size:13.5px;font-weight:600;color:var(--text-p)}
.wh-all{font-size:11.5px;color:var(--brand);cursor:pointer;font-weight:500}
.wh-all:hover{color:var(--brand-hover)}
.wh-card .r-task{font-size:12.5px}
.wh-card .r-task .tt{font-size:12.5px}
.wh-card .r-task .meta{font-size:11px}
/* 我的工作 mini-wl */
.wh-wl{max-height:264px;overflow-y:auto}
.mini-wl-empty{padding:20px;text-align:center;font-size:13px;color:var(--text-t);line-height:1.7}
.mini-wl-item{display:flex;gap:11px;padding:11px 16px;border-bottom:1px solid var(--border-soft);font-size:12.5px;align-items:center}
.mini-wl-item:last-child{border-bottom:none}
.mini-wl-dot{width:7px;height:7px;border-radius:50%;background:var(--success);flex:none}
.mini-wl-c{font-size:12px;color:var(--text-s);flex:1}
.mini-wl-t{font-size:11px;color:var(--text-t);flex:none}
/* 快捷入口 */
.wh-quick{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;padding:14px 16px}
.wh-q{background:var(--bg-soft);border:1px solid var(--border-soft);border-radius:11px;padding:13px 8px;text-align:center;cursor:pointer;transition:.15s}
.wh-q:hover{border-color:var(--brand);box-shadow:var(--shadow-card)}
.wh-qi{width:34px;height:34px;border-radius:10px;display:flex;align-items:center;justify-content:center;font-size:16px;margin:0 auto 6px}
.wh-qi-prim{background:linear-gradient(135deg,var(--brand),var(--brand-hover));color:#fff}
.wh-qt{font-size:11.5px;color:var(--text-p)}
@media(max-width:1100px){
  .wh-3{grid-template-columns:1fr 1fr}
  .wh-3 .wh-card:nth-child(3){grid-column:1/-1}
}
@media(max-width:900px){
  .wh-kpis{grid-template-columns:repeat(2,1fr)}
  .wh-hero{flex-direction:column;align-items:flex-start}
}
@media(max-width:600px){
  .wh-3{grid-template-columns:1fr}
}

/* ===== 知识库页面 (octop 真实样式对齐版: 三栏布局) ===== */
/* ===== 知识库页面 (octop 真实样式对齐: 页面头+双栏卡片) ===== */
.kb-page-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:16px}
.kb-page-head-main{min-width:0}
.kb-page-title{margin:0 0 4px;font-size:20px;font-weight:600;color:var(--text-p);line-height:1.3}
.kb-page-desc{margin:0;font-size:13px;color:var(--text-s);line-height:1.5}
.kb-mini-ghost{display:inline-flex;align-items:center;gap:5px;height:30px;padding:0 12px;border:1px solid var(--border);border-radius:8px;background:var(--bg-card);color:var(--text-s);font-size:12.5px;cursor:pointer;transition:all .15s;white-space:nowrap}
.kb-mini-ghost:hover{border-color:var(--brand);color:var(--brand)}

.kb-layout{display:flex;gap:0;align-items:stretch;height:calc(100vh - 210px);min-height:440px;background:var(--bg-base)}
.kb-side{display:flex;flex-direction:column;gap:12px;flex-shrink:0;min-height:0;box-sizing:border-box;width:var(--kb-side-w,280px);padding:16px;background:var(--bg-soft);border-right:1px solid var(--border-soft)}
.kb-layout.kb-side-collapsed .kb-side{display:none}
.kb-side-head{display:flex;align-items:center;justify-content:space-between;gap:8px;flex-shrink:0}
.kb-panel-title{font-weight:600;font-size:15px;color:var(--text-p)}
.kb-side-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap;flex-shrink:0}
.kb-list{flex:1;overflow-y:auto;min-height:0;display:block}
.kb-item{display:flex!important;flex-direction:column;width:100%;box-sizing:border-box;padding:12px!important;margin-bottom:10px;border:1px solid var(--border)!important;border-radius:var(--radius-md);background:#fff;cursor:pointer;transition:border-color .15s ease,box-shadow .15s ease,transform .15s ease,background .15s ease}
.kb-item:hover{border-color:color-mix(in srgb,var(--brand) 45%,var(--border-secondary,var(--border)))!important;box-shadow:var(--shadow-sm);transform:translateY(-1px)}
.kb-item.active{border-color:var(--brand);box-shadow:0 0 0 1px var(--brand-soft)}
.kb-item.active::after{content:'';position:absolute;top:14px;right:-1px;width:3px;height:calc(100% - 28px);border-radius:3px 0 0 3px;background:var(--brand)}
.kb-item-name{display:flex;align-items:center;gap:8px;min-width:0;color:var(--text-p);font-weight:600}
.kb-list-icon{display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;width:28px;height:28px;overflow:hidden;border-radius:8px;color:var(--brand);background:color-mix(in srgb,var(--brand) 10%,transparent)}
.kb-item-name-t{font-weight:600;font-size:13px;color:var(--text-p);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.kb-item-desc{display:-webkit-box;min-height:34px;margin:6px 0 10px;overflow:hidden;color:var(--text-t);font-size:12px;line-height:1.45;word-break:break-word;-webkit-box-orient:vertical;-webkit-line-clamp:2}
.kb-item-meta{display:flex;align-items:center;justify-content:space-between;flex-wrap:nowrap;gap:8px;min-width:0;margin-top:auto}
.kb-doc-count{display:inline-flex;align-items:center;height:22px;padding:0 8px;border-radius:6px;font-size:12px;line-height:22px;color:var(--text-t);border:1px solid var(--border);background:var(--bg-soft)}
.kb-item-owner{flex:1;min-width:0;font-size:12px;color:var(--text-t);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.kb-badge{display:inline-flex;align-items:center;height:20px;padding:0 6px;border-radius:4px;font-size:12px;line-height:20px;white-space:nowrap}
.kb-badge-shared{color:#16a34a;background:#f0fdf4}
.kb-badge-open{color:#2563eb;background:#eff6ff}
.kb-more-btn{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:24px;height:24px;margin-left:auto;padding:0;border:none;border-radius:6px;background:transparent;color:var(--text-t);cursor:pointer;transition:background .15s ease,color .15s ease}
.kb-more-btn:hover{background:var(--bg-soft);color:var(--text-p)}
.kb-split{position:relative;flex-shrink:0;align-self:stretch;width:8px;margin:0 -1px;z-index:5;background:transparent}
.kb-layout.kb-side-collapsed .kb-split{width:0;margin:0}
.kb-layout.kb-resizing,.kb-layout.kb-resizing *{user-select:none!important}
.kb-edge-toggle{position:absolute;top:calc(50% + 45px);left:50%;transform:translate(-50%,-50%);z-index:6;display:inline-flex;align-items:center;justify-content:center;width:18px;height:44px;padding:0;border:1px solid var(--border);border-radius:8px;background:#fff;color:var(--text-s);box-shadow:0 1px 4px rgba(15,23,42,.08);cursor:pointer;transition:background .15s,color .15s,border-color .15s}
.kb-edge-toggle:hover{background:var(--bg-soft);color:var(--text-p);border-color:var(--brand)}
.kb-edge-toggle svg{pointer-events:none}
.kb-layout.kb-side-collapsed .kb-edge-toggle{left:8px;transform:translate(0,-50%)}
.kb-edge-toggle-sm{top:50%;width:16px;height:34px;border-radius:7px}
/* 大事记图片/附件: 删除按钮悬停才显示(触屏设备始终显示) */
.ev-media{position:relative;display:inline-block;line-height:0}
.ev-del{opacity:0;transition:opacity .12s}
.ev-media:hover .ev-del,.ev-media:focus-within .ev-del{opacity:1}
@media (hover:none){.ev-del{opacity:1}}
/* 大事记卡片头部操作(编辑/删除/上传): 悬停卡片才显示, 触屏常显 */
.ev-card .ev-actions{opacity:0;pointer-events:none;transition:opacity .15s}
.ev-card:hover .ev-actions,.ev-card:focus-within .ev-actions{opacity:1;pointer-events:auto}
@media (hover:none){.ev-card .ev-actions{opacity:1;pointer-events:auto}}
.kb-resize-handle{position:absolute;inset:0;cursor:col-resize;z-index:1}
.kb-resize-handle::after{content:'';position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:2px;height:36px;border-radius:2px;background:var(--border);opacity:0;transition:opacity .15s,background .15s}
.kb-resize-handle:hover::after{opacity:1;background:var(--text-t)}
.kb-layout.kb-resizing .kb-resize-handle::after{opacity:1;background:var(--text-t)}
.kb-main{position:relative;display:flex;flex:1;flex-direction:column;min-width:0;overflow:hidden;background:#fff}
.kb-detail-body{display:flex;flex:1;flex-direction:column;min-height:0;padding:16px 24px}
.kb-empty-detail{display:flex;flex-direction:column;align-items:center;justify-content:center;flex:1;gap:16px;color:var(--text-t)}
.kb-empty-mascot{font-size:120px;opacity:.4;line-height:1}
.kb-empty-detail p{margin:0;font-size:14px;color:var(--text-s)}
.kb-detail-content{display:flex;flex:1;flex-direction:column;min-height:0}
.kb-docs-toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-shrink:0;min-height:40px;flex-wrap:wrap;row-gap:8px}
.kb-toolbar-start{display:flex;align-items:center;gap:12px;flex:1 1 auto;min-width:0;flex-wrap:wrap}
.kb-breadcrumb{display:flex;flex:0 0 auto;flex-wrap:nowrap;align-items:center;min-width:0;margin:0;overflow:hidden;font-size:12px;font-family:ui-monospace,monospace}
.kb-crumb-seg{display:inline-flex;align-items:center;color:var(--text-s)}
.kb-crumb-sep{margin:0 4px;color:var(--text-t)}
.kb-crumb-link{background:none;border:none;padding:0;cursor:pointer;color:var(--brand);font-family:inherit;font-size:12px}
.kb-crumb-cur{color:var(--text-p);font-weight:600}
.kb-searchbox{display:flex;align-items:center;gap:6px;border:1px solid var(--border);border-radius:var(--radius-md);padding:0 10px;height:30px;background:#fff;color:var(--text-t);width:170px;flex-shrink:0}
.kb-searchbox input{border:none;outline:none;background:transparent;font-size:12.5px;color:var(--text-p);flex:1;min-width:0}
.kb-toolbar-right{display:flex;align-items:center;gap:8px;flex-wrap:wrap;justify-content:flex-end;flex:0 1 auto;min-width:0;max-width:100%}
.kb-seg{display:inline-flex;border:1px solid var(--border);border-radius:8px;overflow:hidden;background:#fff}
.kb-seg button{border:none;background:transparent;padding:0 10px;height:30px;font-size:12px;cursor:pointer;color:var(--text-s);display:inline-flex;align-items:center;gap:4px;transition:all .15s}
.kb-seg button b{font-weight:600}
.kb-seg button.on{background:var(--brand);color:#fff}
.kb-docs-pathrow{display:flex;align-items:center;justify-content:flex-start;gap:16px;flex-shrink:0;margin:4px 0 10px}
.kb-doc-count-text{font-size:13px;color:var(--text-s)}
.kb-upload-hint{font-size:12px;color:var(--text-t)}
.kb-docs-split{display:flex;flex:1;min-width:0;min-height:0;overflow:hidden;border-top:1px solid var(--border-soft)}
.kb-tree{display:flex;flex-direction:column;flex-shrink:0;min-height:0;overflow:hidden;width:var(--kb-tree-w,220px);background:var(--bg-soft)}
.kb-tree-head{box-sizing:border-box;display:flex;align-items:center;gap:6px;flex-shrink:0;height:38px;padding:0 12px;border-bottom:1px solid var(--border-soft);color:var(--text-s);font-size:14px;font-weight:600;line-height:22px}
.kb-tree-scroll{flex:1;overflow-y:auto;padding:6px}
.kb-tree-node{display:flex;align-items:center;gap:6px;padding:6px 10px;font-size:12.5px;color:var(--text-s);cursor:pointer;border-radius:6px;margin:1px 2px}
.kb-tree-node:hover{background:#fff;color:var(--text-p)}
.kb-tree-node.active{background:#fff;color:var(--brand);font-weight:600}
.kb-tree-divider{position:relative;flex-shrink:0;align-self:stretch;width:12px;z-index:4;background:transparent}
.kb-docs-split.kb-tree-collapsed .kb-tree-divider{width:0}
.kb-docs-split.kb-tree-collapsed #kbTreeToggle{left:8px;transform:translate(0,-50%)}
.kb-tree-resize{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;cursor:col-resize;z-index:1}
.kb-tree-resize::after{content:'';width:2px;height:36px;border-radius:2px;background:var(--border);opacity:0;transition:opacity .15s,background .15s}
.kb-tree-resize:hover::after{opacity:1;background:var(--text-t)}
.kb-docs{flex:1;overflow-y:auto;min-width:0;padding:16px;background:#fff}
.kb-doc-card{position:relative;display:flex;flex-direction:column;border:1px solid var(--border);border-radius:10px;background:#fff;cursor:pointer;overflow:hidden;transition:border-color .15s,box-shadow .15s,transform .15s}
.kb-doc-card:hover{border-color:var(--brand);box-shadow:var(--shadow-sm);transform:translateY(-2px)}
.kb-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;flex:1;min-height:200px;gap:6px;color:var(--text-t);text-align:center;padding:40px}
.kb-btn,.kb-pri-btn,.kb-ghost-btn,.kb-mini-btn{display:inline-flex;align-items:center;justify-content:center;gap:5px;border-radius:8px;cursor:pointer;font-size:12.5px;font-weight:600;line-height:1;transition:all .15s;box-sizing:border-box;flex-shrink:0}
.kb-pri-btn{background:var(--brand);color:#fff;border:1px solid var(--brand);padding:7px 14px;box-shadow:0 2px 6px -2px rgba(var(--brand-rgb),.5)}
.kb-pri-btn:hover{background:var(--brand-hover)}
.kb-ghost-btn{background:#fff;border:1px solid var(--border);padding:7px 12px;color:var(--text-s)}
.kb-ghost-btn:hover{border-color:var(--brand);color:var(--brand)}
.kb-mini-btn{background:var(--bg-soft);border:1px solid var(--border);width:30px;height:30px;color:var(--text-s)}
.kb-mini-btn:hover{border-color:var(--brand);color:var(--brand)}/* ===== 移动端底部 Tab 栏 (App级导航) ===== */
.mob-tabbar{display:none}
@media(max-width:768px){
  .mob-tabbar{
    display:flex;position:fixed;left:0;right:0;bottom:0;z-index:120;
    height:56px;padding-bottom:env(safe-area-inset-bottom);
    background:rgba(255,255,255,.96);backdrop-filter:blur(8px);
    border-top:1px solid var(--border);box-shadow:0 -4px 20px rgba(0,0,0,.05);
  }
  .mob-tabbar .mob-tab{
    flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;
    background:none;border:none;cursor:pointer;color:var(--text-t);font-size:10.5px;font-weight:500;
    padding:4px 2px;font-family:inherit;
  }
  .mob-tabbar .mob-tab svg{transition:transform .15s}
  .mob-tabbar .mob-tab.on{color:var(--brand)}
  .mob-tabbar .mob-tab.on svg{transform:translateY(-1px)}
  .mob-tabbar .mob-tab:active svg{transform:scale(.92)}
  /* 主区底部留白, 防内容被 tabbar 遮挡; 弹层/抽屉上移 */
  .main{padding-bottom:64px}
  .mask{padding-bottom:calc(64px + env(safe-area-inset-bottom))}
  /* 登录页不显示 tabbar */
  .loginPageActive .mob-tabbar{display:none}
}


#v-kb, #v-kb .modal-mask{
  --primary:#C8102E; --primary-hover:#A80D24; --primary-soft:#FDECEE;
  --text-1:#1F2937; --text-2:#5B6472; --text-3:#9AA3B0;
  --border:#E6E9EF; --border-2:#DADFE7;
  --success:#16A34A; --warning:#D97706; --danger:#DC2626; --info:#2563EB;
  --radius:10px;
  --shadow:0 1px 2px rgba(16,24,40,.05),0 1px 3px rgba(16,24,40,.06);
  --shadow-lg:0 10px 30px rgba(16,24,40,.12);
  --card:#FFFFFF; --bg:#F3F5F9;
}
#v-kb .page-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}
#v-kb .page-head h3{font-size:17px;color:var(--text-1);margin:0}
#v-kb .page-head .sub{color:var(--text-3);font-size:13px;margin-top:2px}
#v-kb .card{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow)}
#v-kb .kb-shell{padding:0;overflow:hidden;border-radius:14px}
#v-kb .kb-hd{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;padding:18px 22px 0}
#v-kb .kb-hd-l{display:flex;align-items:center;gap:8px}
#v-kb .kb-name{font-size:22px;font-weight:700;color:var(--text-1)}
#v-kb .kb-hd-ico{color:var(--text-3);display:inline-flex}
#v-kb .kb-hd-r{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
#v-kb .kb-seg{display:inline-flex;border:1px solid var(--border-2);border-radius:8px;overflow:hidden;background:#fff}
#v-kb .kb-seg button{height:30px;padding:0 12px;border:none;background:transparent;color:var(--text-2);font-size:12.5px;cursor:pointer}
#v-kb .kb-seg button.on{background:#fff;color:var(--text-1);font-weight:600;box-shadow:0 1px 3px rgba(16,24,40,.10);position:relative;z-index:1}
#v-kb .kb-desc{padding:8px 22px 0;color:var(--text-2);font-size:13px}
#v-kb .kb-meta-row{display:flex;gap:22px;flex-wrap:wrap;padding:10px 22px 0;color:var(--text-3);font-size:12.5px}
#v-kb .kb-meta-row b{color:var(--text-1)}
#v-kb .kb-filter{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;padding:14px 22px 0}
#v-kb .kb-tabs{display:flex;gap:6px;flex-wrap:wrap}
#v-kb .kb-tab{height:28px;padding:0 12px;border:none;border-radius:14px;background:transparent;color:var(--text-2);font-size:12.5px;cursor:pointer;transition:.15s}
#v-kb .kb-tab:hover{background:var(--bg);color:var(--text-1)}
#v-kb .kb-tab.on{background:var(--bg);color:var(--text-1);font-weight:600}
#v-kb .kb-tools{display:flex;align-items:center;gap:10px}
#v-kb .kb-search{display:flex;align-items:center;gap:6px;height:32px;padding:0 10px;border:1px solid var(--border-2);border-radius:8px;color:var(--text-3);background:#fff}
#v-kb .kb-search:focus-within{border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-soft)}
#v-kb .kb-search input{border:none;outline:none;width:180px;font-size:13px;color:var(--text-1);background:transparent}
#v-kb .kb-trash-on{border-color:var(--danger)!important;color:var(--danger)!important}
#v-kb .kb-subbar{display:flex;align-items:center;justify-content:space-between;padding:14px 22px 8px}
#v-kb .kb-subbar-t{font-size:13px;font-weight:600;color:var(--text-1)}
#v-kb .kb-subbar-hint{font-size:12px;color:var(--text-3)}
#v-kb .kb-table{width:100%;border-collapse:collapse}
#v-kb .kb-table th{background:#FAFBFC;text-align:left;font-size:12.5px;font-weight:600;color:var(--text-2);padding:10px 14px;border-bottom:1px solid var(--border);white-space:nowrap}
#v-kb .kb-table th.r,#v-kb .kb-table td.r{text-align:right}
#v-kb .kb-table th.l,#v-kb .kb-table td.l{text-align:left}
#v-kb .kb-table td{padding:0 14px;height:50px;border-bottom:1px solid #F0F2F5;font-size:13px;color:var(--text-1);white-space:nowrap}
#v-kb .kb-table tbody tr{transition:background .12s}
#v-kb .kb-table tbody tr:hover{background:#FAFBFC}
#v-kb .kb-table td.dim{color:var(--text-3)}
#v-kb .kb-table td.fname{cursor:pointer;max-width:420px}
#v-kb .kb-table td.fname:hover .kb-t-name{color:var(--primary)}
#v-kb .kb-t-ico{display:inline-flex;vertical-align:-3px;margin-right:8px;color:#3B82F6}
#v-kb .kb-t-ico.note,#v-kb .kb-t-ico.folder{color:#7C3AED}
#v-kb .kb-t-name{font-weight:500;max-width:320px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:inline-block;vertical-align:-4px}
#v-kb .kb-table td.acts .kb-i{opacity:.55}
#v-kb .kb-table tbody tr:hover td.acts .kb-i{opacity:1}
#v-kb .kb-ext{display:inline-block;margin-left:8px;padding:1px 6px;border-radius:10px;background:#F2F3F5;color:#8A93A2;font-size:11px;font-weight:600;letter-spacing:.02em;vertical-align:1px}
#v-kb .kb-ext.lg{margin-left:0;min-width:44px;line-height:22px;font-size:12px;border-radius:6px}
#v-kb .kb-st{display:inline-block;padding:2px 10px;border-radius:10px;font-size:12px;font-weight:600}
#v-kb .kb-st.ok{background:#F0F9EB;color:#67C23A}
#v-kb .kb-st.warn{background:#FFF4E5;color:#B45309}
#v-kb .kb-pill{display:inline-block;padding:1px 10px;border-radius:10px;font-size:12px}
#v-kb .kb-pill.gray{background:#F2F3F5;color:var(--text-2)}
#v-kb .kb-pill.blue{background:#E8F1FF;color:#3B82F6}
#v-kb .kb-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:14px;padding:6px 22px 20px}
#v-kb .kb-doc{position:relative;display:flex;flex-direction:column;gap:10px;padding:14px;border:1px solid var(--border);border-radius:10px;background:#fff;cursor:pointer;transition:box-shadow .2s ease,border-color .2s ease}
#v-kb .kb-doc:hover{border-color:color-mix(in srgb,var(--primary) 45%,var(--border));box-shadow:var(--shadow)}
#v-kb .kb-doc-hd{display:flex;gap:10px;align-items:flex-start}
#v-kb .kb-doc-ico{flex-shrink:0;width:32px;height:32px;border-radius:8px;background:#F2F3F5;color:var(--text-2);display:inline-flex;align-items:center;justify-content:center}
#v-kb .kb-doc-ico.note{background:#F1ECFA;color:#7C3AED}
#v-kb .kb-doc-ico.folder{background:#FDE8EE;color:#C8102E;font-size:16px}
#v-kb .kb-doc-tb{min-width:0;flex:1}
#v-kb .kb-doc-name{font-weight:600;font-size:13px;line-height:1.35;color:var(--text-1);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
#v-kb .kb-doc-desc{color:var(--text-3);font-size:12px;line-height:1.55;height:37px;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
#v-kb .kb-doc-ft{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:auto}
#v-kb .kb-doc-ft-r{font-size:11.5px;color:var(--text-3);white-space:nowrap}
#v-kb .kb-doc-acts{position:absolute;top:8px;right:8px;display:inline-flex;gap:2px;opacity:0;transition:.15s;background:#fff;border:1px solid var(--border);border-radius:8px;padding:2px}
#v-kb .kb-doc:hover .kb-doc-acts{opacity:1}
#v-kb .kb-i{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border:none;border-radius:6px;background:transparent;color:#8A93A2;cursor:pointer;transition:.12s}
#v-kb .kb-i:hover{background:#F2F3F5;color:var(--text-1)}
#v-kb .kb-i.del:hover{background:#FDECEE;color:var(--danger)}
#v-kb .kb-i.del{color:#C0808C}
#v-kb .kb-dv{border-top:1px solid var(--border)}
#v-kb .kb-dv-hd{display:flex;align-items:center;gap:12px;padding:14px 20px;border-bottom:1px solid var(--border);flex-wrap:wrap}
#v-kb .kb-dv-meta{flex:1;min-width:0;color:var(--text-3);font-size:12.5px}
#v-kb .kb-dv-meta .dot{margin:0 5px}
#v-kb .kb-dv-acts{display:flex;gap:6px;flex-shrink:0}
#v-kb .kb-dv-body{padding:18px 22px;max-height:62vh;overflow:auto}
#v-kb .kb-text{white-space:pre-wrap;word-break:break-word;font-family:inherit;font-size:14px;line-height:1.9;color:var(--text-1);margin:0}
#v-kb .kb-hint{margin-top:14px;padding:9px 12px;border-radius:8px;background:var(--bg);color:var(--text-3);font-size:12.5px}
#v-kb .emptyGuide{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;padding:64px 20px;text-align:center}
#v-kb .eg-ico{font-size:34px;opacity:.5}
#v-kb .eg-t{font-size:14px;font-weight:600;color:var(--text-2)}
#v-kb .eg-h{font-size:12.5px;color:var(--text-3);max-width:360px;line-height:1.7}
#v-kb .kb-frow-tr{cursor:pointer}
#v-kb .kb-frow-tr:hover{background:#FAFBFC!important}
#kbModal{position:fixed;inset:0;background:rgba(15,23,42,.5);align-items:flex-start;justify-content:center;z-index:950;padding:48px 20px;overflow-y:auto;display:none}
#kbModal.on{display:flex}
#v-kb .btn{height:36px;padding:0 16px;border-radius:8px;border:1px solid transparent;font-size:13px;cursor:pointer;display:inline-flex;align-items:center;gap:6px;transition:.15s;font-family:inherit}
#v-kb .btn.sm{height:30px;padding:0 10px;font-size:12px}
#v-kb .btn.pri{background:var(--primary);color:#fff}
#v-kb .btn.pri:hover{background:var(--primary-hover)}
#v-kb .btn.out{border-color:var(--border-2);background:#fff;color:var(--text-1)}
#v-kb .btn.out:hover{border-color:var(--primary);color:var(--primary)}
#v-kb .btn.ghost{color:var(--text-2)}
#v-kb .btn.ghost:hover{color:var(--primary)}
#v-kb .modal{background:#fff;border-radius:12px;width:520px;max-width:100%;box-shadow:var(--shadow-lg)}
#v-kb .modal.wide{width:760px}
#v-kb .modal .m-head{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--border);font-weight:600;color:var(--text-1)}
#v-kb .modal .m-x{cursor:pointer;color:var(--text-3);font-size:18px}
#v-kb .modal .m-body{padding:20px;max-height:64vh;overflow-y:auto}
#v-kb .modal .m-foot{padding:14px 20px;border-top:1px solid var(--border);display:flex;justify-content:flex-end;gap:10px}
#v-kb .frow{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:12px}
#v-kb .frow .full{grid-column:1/-1}
#v-kb .frow label{display:block;font-size:13px;color:var(--text-2);margin-bottom:5px}
#v-kb .frow input,#v-kb .frow select,#v-kb .frow textarea{width:100%;height:38px;border:1px solid var(--border-2);border-radius:8px;padding:0 10px;outline:none;font-size:13px;color:var(--text-1);background:#fff;font-family:inherit}
#v-kb .frow textarea{height:auto;padding:8px 10px;resize:vertical}
#v-kb .frow textarea.kb-ta{height:200px}
#v-kb .frow input:focus,#v-kb .frow select:focus{border-color:var(--primary)}
#v-kb .muted{color:var(--text-3)}
#v-kb .kb-ta{font-family:inherit;line-height:1.7}

.kb-toolbar-pop{display:flex;align-items:center;gap:2px;flex-wrap:wrap;font-size:12.5px;font-family:inherit}
.kb-morseg{display:inline-flex;border:1px solid var(--border);border-radius:8px;overflow:hidden}
.kb-morseg button{background:#fff;border:none;padding:6px 11px;font-size:12.5px;color:var(--text-s);cursor:pointer;font-family:inherit}
.kb-morseg button:hover{background:var(--bg-soft)}
.kb-morseg button.on{background:var(--brand-soft);color:var(--brand-hover);font-weight:600}
.kb-moredot{width:1px;height:16px;background:var(--border);margin:0 6px;flex-shrink:0}
.kb-moreit-b{display:inline-flex;align-items:center;gap:6px;background:#fff;border:1px solid transparent;border-radius:8px;padding:6px 9px;font-size:12.5px;color:var(--text);cursor:pointer;font-family:inherit;white-space:nowrap}
.kb-moreit-b:hover{background:var(--bg-soft);border-color:var(--border)}
/* ---- 知识库工具栏「⋯ 更多」菜单 ---- */
.kb-toolbar-more{display:inline-flex;align-items:center;justify-content:center;width:34px;height:32px;border:1px solid var(--border);background:#fff;border-radius:8px;color:var(--text-s);font-size:16px;line-height:1;cursor:pointer;flex-shrink:0;}
.kb-toolbar-more:hover{border-color:var(--brand);color:var(--brand-hover);}
.kb-moreit{padding:8px 10px;border-radius:8px;cursor:pointer;display:flex;align-items:center;gap:8px;font-size:13px;color:var(--text);}
.kb-moreit:hover{background:var(--bg-soft);}
.kb-moreit.on{background:var(--brand-soft);color:var(--brand-hover);}
/* ---- 新建文档: 文件夹选择浮层 ---- */
.kbpopt{padding:8px 10px;border-radius:8px;cursor:pointer;font-size:13px;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.kbpopt:hover{background:var(--bg-soft);}

/* ===== 知识库 新建/编辑文档弹窗 (美观大气: 渐变头+双栏) ===== */
.kde .kde-dlg{width:780px;max-width:94vw;background:#fff;border-radius:20px;overflow:hidden;box-shadow:0 24px 60px rgba(20,22,30,.28),0 4px 16px rgba(0,0,0,.12);display:flex;flex-direction:column;max-height:94vh}
.kde .kde-hd{background:linear-gradient(135deg,#b33a52 0%,var(--brand-hover) 48%,var(--brand) 100%);padding:20px 26px;display:flex;align-items:center;gap:14px;color:#fff;position:relative;flex-shrink:0}
.kde .kde-hd::after{content:"";position:absolute;right:-26px;top:-30px;width:140px;height:140px;border-radius:50%;background:radial-gradient(circle,rgba(232,184,74,.3),transparent 66%);pointer-events:none}
.kde .kde-hd-ic{width:44px;height:44px;border-radius:13px;background:rgba(255,255,255,.16);display:flex;align-items:center;justify-content:center;font-size:21px;flex:none;box-shadow:inset 0 1px 0 rgba(255,255,255,.25)}
.kde .kde-hd-tx .t{font-size:18px;font-weight:700;letter-spacing:.5px}
.kde .kde-hd-tx .s{font-size:12px;opacity:.85;margin-top:3px;letter-spacing:.4px}
.kde .kde-x{margin-left:auto;width:32px;height:32px;border:none;border-radius:10px;background:rgba(255,255,255,.16);color:#fff;font-size:15px;cursor:pointer;display:flex;align-items:center;justify-content:center;flex:none;z-index:1}
.kde .kde-x:hover{background:rgba(255,255,255,.28)}
.kde .kde-hd{cursor:move;user-select:none}
.kde .kde-hd button{cursor:pointer;user-select:none}
.kde .kde-dlg.kde-fs{position:fixed!important;inset:10px;width:auto!important;max-width:none!important;max-height:none!important;height:calc(100vh - 20px);border-radius:16px}
.kde .kde-bd{display:grid;grid-template-columns:252px 1fr;min-height:340px}
.kde .kde-meta{padding:20px 18px;background:var(--bg-soft);border-right:1px solid var(--border-soft);display:flex;flex-direction:column;gap:16px}
.kde .kde-edit{padding:20px 24px;display:flex;flex-direction:column;gap:12px;min-width:0}
.kde .kde-lab{font-size:12px;color:var(--text-t);font-weight:600;letter-spacing:.3px;margin-bottom:7px}
.kde .kde-fld-row{position:relative}
.kde .kde-fld-pick{width:100%;border:1px dashed var(--border);border-radius:11px;background:#fff;padding:10px 12px;font-size:13px;color:var(--text-s);cursor:pointer;text-align:left;display:flex;align-items:center;justify-content:space-between;gap:8px}
.kde .kde-fld-pick:hover:not(:disabled){border-color:var(--brand);color:var(--brand-hover)}
.kde .kde-fld-pick:disabled{color:var(--text-s);background:var(--bg-soft);border-style:solid;border-color:var(--border-soft);cursor:default}
.kde .kde-fld-cur{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.kde .kde-fld-arr{color:var(--text-t);font-size:11px;flex:none}
.kde .kde-inp{border:1px solid var(--border);border-radius:11px;background:#fff;padding:10px 13px;font-size:14px;color:var(--text);width:100%}
.kde .kde-inp:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px rgba(var(--brand-rgb),.12)}
.kde .kde-inp::placeholder{color:var(--text-t)}
.kde .kde-toolbar{display:flex;align-items:center;gap:8px;font-size:11px;color:var(--text-t);flex-shrink:0}
.kde .kde-toolbar b{color:var(--text-s);font-weight:600}
.kde .kde-sep{flex:1}
.kde .kde-prevtoggle{background:#fff;border:1px solid var(--border);border-radius:8px;color:var(--text-s);font-size:12px;padding:5px 13px;cursor:pointer;font-family:inherit}
.kde .kde-prevtoggle:hover{border-color:var(--brand);color:var(--brand-hover)}
.kde .kde-ta{border:1px solid var(--border);border-radius:12px;flex:1;min-height:240px;padding:14px 16px;font-size:13.5px;line-height:1.8;color:var(--text);resize:none;font-family:ui-monospace,Menlo,Consolas,monospace;background:#fff}
.kde .kde-ta:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px rgba(var(--brand-rgb),.12)}
.kde .kde-prev{border:1px solid var(--border);border-radius:12px;padding:14px 16px;font-size:14px;line-height:1.8;flex:1;overflow-y:auto;background:#fff;min-height:240px}
.kde .kde-ft{border-top:1px solid var(--border-soft);padding:14px 24px;display:flex;justify-content:flex-end;gap:10px;align-items:center;flex-shrink:0}
.kde .kde-btn-c{background:#fff;border:1px solid var(--border);color:var(--text-s);border-radius:11px;padding:10px 22px;font-size:13.5px;cursor:pointer;font-weight:600;font-family:inherit}
.kde .kde-btn-c:hover{border-color:#cfd2d7;color:var(--text)}
.kde .kde-btn-save{background:linear-gradient(135deg,var(--brand-hover),var(--brand));border:none;color:#fff;border-radius:11px;padding:10px 30px;font-size:13.5px;cursor:pointer;font-weight:700;box-shadow:0 6px 16px rgba(var(--brand-rgb),.35);letter-spacing:.5px;font-family:inherit}
.kde .kde-btn-save:hover{filter:brightness(1.05)}
.kde .kde-btn-save:active{transform:translateY(1px)}
@media(max-width:640px){
  .kde .kde-bd{grid-template-columns:1fr;min-height:0}
  .kde .kde-meta{border-right:none;border-bottom:1px solid var(--border-soft);flex-direction:row;flex-wrap:wrap;gap:10px;padding:16px 18px}
  .kde .kde-meta>div{flex:1 1 46%;min-width:150px}
  .kde .kde-hd{padding:14px 18px}
  .kde .kde-hd-tx .t{font-size:16px}
  .kde .kde-edit{padding:16px 18px}
  .kde .kde-ta{min-height:180px}
}

/* ===== 会议纪要 三栏模块 (2026-10-28) ===== */
#v-meetings{display:flex;flex-direction:column;min-height:0}
.meet-wb{display:flex;gap:14px;flex:1;min-height:calc(100vh - 150px)}
.meet-wb .col{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-card);display:flex;flex-direction:column;overflow:hidden}
.mt-side{width:236px;flex-shrink:0}
.mt-side-hd{display:flex;align-items:center;gap:8px;padding:12px 12px 8px}
.mt-filt{display:flex;background:var(--bg-soft);border-radius:8px;padding:2px;font-size:12px;flex:1}
.mt-filt span{flex:1;text-align:center;padding:4px 0;border-radius:6px;color:var(--text-t);cursor:pointer}
.mt-filt span.on{background:#fff;color:var(--brand);font-weight:600;box-shadow:var(--shadow-card)}
.mt-new{margin:0 12px 8px;padding:8px;border:1px dashed var(--brand);color:var(--brand);background:var(--brand-soft);border-radius:8px;text-align:center;font-weight:600;cursor:pointer;font-size:12px}
.mt-new:hover{opacity:.9}
.mt-actions{display:flex;gap:8px;margin:0 12px 8px}
.mt-actions .mt-new{flex:1;margin:0}
.mt-actions .mt-foldernew{color:var(--text-s);border-color:var(--border);background:var(--bg-soft)}
/* 2026-11-01: 新建会议/文件夹合并为下拉 */
.mt-newdrop{position:relative;flex:1;margin:0}
.mt-newdrop .mt-new{width:100%;margin:0}
.mt-drop{position:absolute;top:calc(100% + 4px);left:0;right:0;background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius-md);box-shadow:var(--shadow-pop);z-index:50;overflow:hidden}
.mt-drop div{padding:10px 14px;font-size:13px;font-weight:600;color:var(--text-s);cursor:pointer;display:flex;align-items:center;gap:8px}
.mt-drop div:hover{background:var(--brand-tint);color:var(--brand)}
/* 新建并入标题行 */
.mt-side-hd .mt-newdrop{margin-left:auto;flex:none}
.mt-hdrbtn{border:1px solid var(--brand);color:var(--brand);background:var(--brand-soft);border-radius:7px;padding:5px 11px;font-size:12px;font-weight:600;cursor:pointer;white-space:nowrap;line-height:1.2}
.mt-hdrbtn:hover{background:var(--brand-tint)}
.mt-side-hd .mt-drop{right:0;left:auto;min-width:168px}
/* 实时转写引擎选择 */
.mt-eng{display:flex;align-items:center;gap:4px;margin-left:auto}
.mt-eng label{font-size:11px;color:var(--text-t)}
.mt-eng select{border:1px solid var(--border);border-radius:6px;padding:4px 6px;font-size:12px;color:var(--text-s);background:var(--bg-card);cursor:pointer;outline:none}
.mt-search{padding:6px 10px 2px}
.mt-search input{width:100%;box-sizing:border-box;border:1px solid var(--border);border-radius:7px;padding:6px 9px;font-size:12px;color:var(--text-s);background:var(--bg-card);outline:none}
.mt-search input:focus{border-color:var(--brand)}
.mt-sec{font-size:11px;color:var(--text-t);margin:2px 12px 6px;display:flex;align-items:center;white-space:nowrap}
.mt-sec::after{content:"";flex:1;height:1px;background:var(--border-soft);margin-left:8px}
.mt-folders{display:flex;flex-direction:column;gap:2px;padding:0 10px 8px}
.mt-fd{display:flex;align-items:center;gap:7px;padding:6px 8px;border-radius:8px;cursor:pointer;font-size:13px;color:var(--text-s)}
.mt-fd:hover{background:var(--bg-soft)}
.mt-fd.on{background:var(--brand-soft);color:var(--brand);font-weight:600}
.mt-fd .fstar{font-size:12px;color:var(--text-t);cursor:pointer;flex:0 0 auto;border:none;background:none;padding:0 2px}
.mt-fd .fstar.starred{color:#f5b52e}
.mt-fd .fc{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mt-fd .fc.all{color:var(--text-p);font-weight:600}
.mt-fd .fops{display:flex;gap:1px;opacity:0}
.mt-fd:hover .fops{opacity:1}
.mt-fd .ob{width:22px;height:22px;border:none;background:transparent;font-size:13px;cursor:pointer;border-radius:5px;color:var(--text-s);line-height:1}
.mt-fd .ob:hover{background:rgba(0,0,0,.06)}
.mt-fd .ob.red:hover{color:var(--danger)}
@media(hover:none){.mt-fd .fops{opacity:1;display:flex}}
.mt-folderbar{display:flex;flex-wrap:wrap;gap:6px;padding:0 12px 10px}
.mt-fchip{font-size:11px;padding:4px 11px;border-radius:14px;background:var(--bg-soft);border:1px solid var(--border);color:var(--text-s);cursor:pointer;white-space:nowrap;max-width:150px;overflow:hidden;text-overflow:ellipsis}
.mt-fchip.on{background:var(--brand-soft);color:var(--brand);border-color:var(--brand);font-weight:600}
.mt-rowacts{flex:0 0 auto;display:flex;gap:4px;opacity:0;transition:.15s}
.mt-item:hover .mt-rowacts{opacity:1}
.mt-rac{width:24px;height:24px;border:1px solid var(--border);border-radius:6px;background:#fff;font-size:12px;line-height:1;cursor:pointer;display:inline-flex;align-items:center;justify-content:center}
.mt-rac:hover{background:var(--bg-soft)}
.mt-rac-del:hover{background:var(--danger);color:#fff;border-color:var(--danger)}
@media(hover:none){.mt-rowacts{opacity:1}}
.mt-list{flex:1;overflow:auto;padding:10px 8px 8px;margin-top:4px;border-top:1px solid var(--border-soft)}
.mt-item{display:flex;align-items:flex-start;gap:9px;padding:10px;border-radius:8px;cursor:pointer}
.mt-item:hover{background:var(--bg-soft)}
.mt-item.act{background:var(--brand-soft)}
.mt-dot{width:8px;height:8px;border-radius:50%;background:var(--brand);margin-top:5px;flex-shrink:0}
.mt-it-t{font-weight:600;font-size:12.5px;line-height:1.35}
.mt-it-s{color:var(--text-t);font-size:11px}
.mt-edit{flex:1;min-width:0}
.mt-scroll{flex:1;overflow:auto;padding:16px 18px 10px}
.mt-inp{width:100%;border:1px solid var(--border);border-radius:9px;padding:10px 12px;font-size:14px;font-weight:600;box-sizing:border-box}
.mt-meta{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin:12px 0}
.mt-meta label{font-size:11px;color:var(--text-t);display:block}
.mt-meta input{width:100%;margin-top:4px;border:1px solid var(--border);border-radius:8px;padding:8px 9px;font-size:12.5px;box-sizing:border-box}
.mt-sec{font-size:13px;font-weight:700;margin:16px 0 8px;display:flex;align-items:center;gap:8px}
.mt-sec::before{content:"";width:3px;height:14px;background:var(--brand);border-radius:2px}
.mt-adddec{margin-left:auto;font-size:11px;color:var(--brand);border:1px solid var(--brand);border-radius:6px;padding:2px 9px;background:transparent;cursor:pointer}
.mt-ta{width:100%;min-height:140px;border:1px solid var(--border);border-radius:9px;padding:11px 13px;font-size:13px;line-height:1.7;resize:vertical;box-sizing:border-box;background:var(--bg-soft);color:var(--text-s)}
.mt-dec{display:flex;align-items:center;gap:8px;margin-bottom:7px}
.mt-dec input{flex:1;border:1px solid var(--border);border-radius:8px;padding:8px 10px;font-size:12.5px}
.mt-dec .gp{flex:0 0 auto;display:flex;gap:6px}
.mt-dec .gp button{font-size:11px;border-radius:6px;padding:4px 8px;cursor:pointer;border:1px solid var(--border);background:#fff;color:var(--text-s)}
.mt-dec .gp .t2{color:var(--brand);border-color:var(--brand)}
.mt-dec .gp .del{color:var(--danger);border-color:var(--border)}
.mt-foot{display:flex;align-items:center;gap:10px;padding:12px 18px;border-top:1px solid var(--border-soft)}
.mt-btn{border:0;border-radius:9px;padding:9px 18px;font-size:13px;font-weight:600;cursor:pointer}
.mt-btn-pri{background:var(--brand);color:#fff}
.mt-btn-pri:hover{background:var(--brand-hover)}
.mt-btn-ghost{background:#fff;border:1px solid var(--border);color:var(--text-s)}
.mt-btn-ghost:hover{background:var(--bg-soft)}
.mt-hint{margin-left:auto;color:var(--text-t);font-size:11px}
.mt-asr{width:292px;flex-shrink:0}
.mt-asr-hd{display:flex;align-items:center;gap:10px;padding:13px 12px;border-bottom:1px solid var(--border-soft);font-weight:700;font-size:13px}
.mt-asrmode{display:flex;align-items:center;gap:8px;padding:8px 10px 2px;flex-wrap:wrap}
.mt-asrmode .lbl{font-size:12px;color:var(--text-s)}
.mt-msgrp{display:flex;background:#f2f4f7;border-radius:8px;padding:2px;gap:2px}
.mt-msgrp button{border:0;background:transparent;padding:5px 10px;border-radius:6px;font-size:12px;color:var(--text-s);cursor:pointer;white-space:nowrap}
.mt-msgrp button.on{background:#fff;color:var(--brand);font-weight:600;box-shadow:0 1px 3px rgba(0,0,0,.08)}
.mt-rtbar{display:flex;flex-direction:column;gap:6px;padding:8px 10px 4px}
.mt-reclist{border-top:1px solid var(--border-soft);padding:10px 12px}
.mt-reclist-hd{display:flex;align-items:center;gap:8px;font-weight:700;font-size:13px;margin-bottom:6px}
.mt-reclist-n{color:var(--text-t);font-size:11px;font-weight:600}
.mt-reclist-bd{display:flex;flex-direction:column;gap:6px}
.mt-reci{display:flex;align-items:center;gap:8px;background:var(--brand-soft);border:1px solid var(--border-soft);border-radius:8px;padding:6px 8px}
.mt-recplay{flex:0 0 auto;width:30px;height:30px;border-radius:50%;border:0;background:var(--brand);color:#fff;font-size:13px;cursor:pointer}
.mt-recplay.on{background:var(--brand-soft);color:var(--brand)}
.mt-reci-t{flex:1;min-width:0}
.mt-reci-t .t{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--text)}
.mt-reci-t .fn{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mt-reci-t .s{font-size:11px;color:var(--text-t);margin-top:1px}
.mt-recst{flex:0 0 auto;font-size:10px;color:var(--text-t);background:#f2f4f7;border-radius:4px;padding:1px 5px}
.mt-recst.ok{color:var(--brand);background:var(--brand-soft)}
.mt-recst.err{color:var(--danger);background:#fee2e2}
.mt-reci-ok,.mt-reci-del{flex:0 0 auto;border:0;background:transparent;cursor:pointer;font-size:13px;color:var(--text-s);padding:0 2px}
.mt-reci-del,.mt-reci-del:hover{color:var(--danger)}
.mt-reci-ok:hover{color:var(--brand)}
.mt-mic{margin-left:auto;font-size:12px;font-weight:600;color:#fff;background:var(--brand);border:0;border-radius:7px;padding:6px 12px;cursor:pointer}
.mt-mic.rec{color:var(--danger);background:var(--brand-soft)}
.mt-recp{padding:11px 13px;border-bottom:1px solid var(--border-soft)}
.mt-recs{display:flex;align-items:center;gap:7px;font-size:12px;color:var(--text-s)}
.mt-recs .rd{width:8px;height:8px;border-radius:50%;background:var(--text-t)}
.mt-recs .rd.on{background:var(--danger);box-shadow:0 0 0 3px rgba(220,38,38,.15)}
.mt-recrow{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--text-t);margin-top:9px}
.mt-recrow select{flex:1;border:1px solid var(--border);border-radius:7px;padding:5px 8px;font-size:12px;background:#fff;color:var(--text-s)}
.mt-timer{font-size:15px;font-weight:600;margin-top:7px;font-variant-numeric:tabular-nums;letter-spacing:.5px}
.mt-recalt{margin-top:10px;display:flex;flex-direction:column;gap:7px}
.mt-recalt .mt-note{color:var(--warning,#d97706);font-size:11px;line-height:1.5}
.mt-prog{padding:10px 13px;color:var(--text-s);font-size:12px;display:flex;align-items:center;gap:8px}
.mt-prog .sp{width:12px;height:12px;border:2px solid var(--border);border-top-color:var(--brand);border-radius:50%;animation:mtspin .8s linear infinite}
@keyframes mtspin{to{transform:rotate(360deg)}}
.mt-trans{flex:1;overflow:auto;padding:12px 14px}
.mt-spk{margin-bottom:10px}
.mt-spk .who{display:flex;align-items:center;gap:7px;margin-bottom:3px}
.mt-spk .ava{width:22px;height:22px;border-radius:50%;background:var(--brand-soft);color:var(--brand);font-size:11px;display:flex;align-items:center;justify-content:center}
.mt-spk .who b{font-size:12px;color:var(--text-s)}
.mt-spk .q{font-size:12px;color:#374151;line-height:1.6}
.mt-empty{color:var(--text-t);font-size:12px;padding:18px 6px;text-align:center;line-height:1.8}
.mt-asrfoot{padding:11px 13px;border-top:1px solid var(--border-soft)}
.mt-asrfoot .mt-btn{width:100%;padding:10px}
.mt-note{font-size:11px;color:var(--text-t);text-align:center;margin-top:7px}
.mt-mobnav{display:none}

/* 2026-10-31: 保存/导出移至编辑区右上 */
.mt-edit{display:flex;flex-direction:column}
.mt-top{flex:0 0 auto;display:flex;align-items:center;gap:10px;padding:12px 22px;border-bottom:1px solid var(--border-soft);background:var(--bg-card)}
.mt-top .mt-inp{flex:1;width:auto;min-width:0;padding:8px 12px;font-size:14px}
.mt-top .mt-hint{margin-right:auto;flex:none;white-space:nowrap}
/* 2026-11-01: 会议要点/决议待办 tab 化，让要点框更大 */
.mt-tabs{display:flex;gap:2px;border-bottom:1px solid var(--border);margin:6px 0 0}
.mt-tabs button{background:none;border:none;outline:none;cursor:pointer;padding:9px 16px;font-size:13.5px;font-weight:600;color:var(--text-t);border-bottom:2px solid transparent;margin-bottom:-1px}
.mt-tabs button:hover{color:var(--text-s)}
.mt-tabs button.on{color:var(--brand);border-bottom-color:var(--brand)}
.mt-tabpanel{display:none;padding-top:10px}
.mt-tabpanel.on{display:block}
.mt-tabpanel .mt-ta{min-height:300px}
.mt-dechd{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px;font-size:13px;font-weight:700;color:var(--text-s)}
.mt-dechd .mt-adddec{margin-left:0}
@media(max-width:900px){
  .meet-wb{display:block;min-height:0}
  .mt-mobnav{display:flex;background:var(--bg-card);border:1px solid var(--border);border-radius:10px;overflow:hidden;margin-bottom:12px}
  .mt-mobnav span{flex:1;text-align:center;padding:10px 0;font-size:12px;color:var(--text-t);cursor:pointer}
  .mt-mobnav span.on{background:var(--brand-soft);color:var(--brand);font-weight:600}
  .mt-side,.mt-edit,.mt-asr{width:100%!important;min-height:62vh}
  .meet-wb.m-show-edit .mt-side,.meet-wb.m-show-edit .mt-asr{display:none}
  .meet-wb.m-show-list .mt-edit,.meet-wb.m-show-list .mt-asr{display:none}
  .meet-wb.m-show-asr .mt-side,.meet-wb.m-show-asr .mt-edit{display:none}
}
