/* ============ 基础 ============ */
:root{
  --bg:#f5f7fa;
  --surface:#ffffff;
  --line:#eaecf1;
  --line-2:#dcdfe6;
  --ink:#101828;
  --ink-2:#545d70;
  --ink-3:#8b93a3;
  --primary:#2f6bff;
  --primary-d:#1e50d8;
  --primary-soft:#eef3ff;
  --danger:#df4a50;
  --danger-soft:#fdeeee;
  --warn:#d98712;
  --warn-soft:#fdf4e3;
  --ok:#0f9d58;
  --ok-soft:#e9f7ef;
  --teal:#0d8f86;
  --radius:14px;
  --shadow:0 1px 2px rgba(16,24,40,.04), 0 6px 20px -8px rgba(16,24,40,.10);
}

*{box-sizing:border-box}
html,body{margin:0;padding:0}
body{
  background:
    radial-gradient(1100px 520px at 78% -12%, #eef3ff 0%, rgba(238,243,255,0) 62%),
    var(--bg);
  background-attachment:fixed;
  color:var(--ink);
  font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;
  font-size:14px;
  line-height:1.6;
  -webkit-font-smoothing:antialiased;
  -moz-osx-font-smoothing:grayscale;
}
a{color:inherit;text-decoration:none}
h1,h2,h3{margin:0;font-weight:650;letter-spacing:-.012em}
h1{font-size:22px}
h2{font-size:15px}
p{margin:0}
.muted{color:var(--ink-3)}
.small{font-size:12.5px}
b{font-weight:600}
::selection{background:#d9e6ff}

/* ============ 布局 ============ */
.layout{display:flex;min-height:100vh}
.sidebar{
  width:224px;flex:0 0 224px;position:sticky;top:0;height:100vh;
  background:linear-gradient(180deg,#ffffff 0%,#fcfdff 100%);
  border-right:1px solid var(--line);
  display:flex;flex-direction:column;padding:22px 14px 14px;
}
.main{flex:1;min-width:0;padding:32px 40px 64px;max-width:1380px}

/* ============ 侧栏 ============ */
.brand{display:flex;align-items:center;gap:11px;padding:0 6px 22px}
.brand-mark{
  width:34px;height:34px;border-radius:9px;flex:0 0 34px;
  background:linear-gradient(150deg,#4a80ff,#2050dc);
  color:#fff;display:grid;place-items:center;font-weight:700;font-size:16px;
  box-shadow:0 2px 8px rgba(47,107,255,.28), inset 0 1px 0 rgba(255,255,255,.24);
}
.brand-mark.lg{width:40px;height:40px;font-size:17.5px;border-radius:11px}
.brand-mark svg{width:19px;height:19px;fill:none;stroke:#fff;stroke-width:2.1;
  stroke-linecap:round;stroke-linejoin:round}
.brand-text{display:flex;flex-direction:column;line-height:1.28}
.brand-text strong{font-size:14.5px;letter-spacing:-.005em}
.brand-text span{font-size:11.5px;color:var(--ink-3)}

.nav{display:flex;flex-direction:column;gap:2px;margin-top:2px}
.nav-item{
  position:relative;
  display:flex;align-items:center;gap:10px;
  padding:9px 11px;border-radius:9px;color:var(--ink-2);
  font-size:13.8px;transition:background .16s,color .16s;
}
.nav-item svg{width:17px;height:17px;fill:none;stroke:currentColor;stroke-width:1.7;
  stroke-linecap:round;stroke-linejoin:round;flex:0 0 17px}
.nav-item:hover{background:#f5f7fb;color:var(--ink)}
.nav-item.on{background:linear-gradient(90deg,#eef3ff,#f5f8ff);color:var(--primary-d);font-weight:600}
.nav-item.on svg{stroke-width:1.9}
.nav-item.on::before{
  content:"";position:absolute;left:-9px;top:50%;transform:translateY(-50%);
  width:3px;height:17px;border-radius:3px;background:var(--primary);
}

.side-cta{
  margin:16px 2px 0;display:flex;align-items:center;justify-content:center;gap:7px;
  padding:9px;border-radius:9px;
  background:linear-gradient(180deg,#3f79ff,#2b64f2);color:#fff;
  font-size:13.5px;font-weight:600;transition:filter .15s,box-shadow .15s;
  box-shadow:0 1px 2px rgba(47,107,255,.3), 0 8px 18px -8px rgba(47,107,255,.65);
}
.side-cta svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:2.2;stroke-linecap:round}
.side-cta:hover{filter:brightness(1.04)}

.sidebar-foot{margin-top:auto;padding-top:14px;border-top:1px solid var(--line);
  display:flex;align-items:center;justify-content:space-between;gap:8px}
.me{display:flex;align-items:center;gap:9px;min-width:0}
.avatar{
  width:30px;height:30px;border-radius:50%;flex:0 0 30px;display:grid;place-items:center;
  background:linear-gradient(150deg,#e8eefb,#dbe4f6);color:#40527a;
  font-weight:600;font-size:13px;box-shadow:inset 0 0 0 1px rgba(64,82,122,.06);
}
.avatar.sm{width:26px;height:26px;flex:0 0 26px;font-size:12px}
.me-info{display:flex;flex-direction:column;line-height:1.25;min-width:0}
.me-info strong{font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.me-info span{font-size:11px;color:var(--ink-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.logout{font-size:12.5px;color:var(--ink-3);transition:color .15s}
.logout:hover{color:var(--danger)}

/* ============ 页头 ============ */
.page-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:24px}
.page-head.tight{margin-bottom:18px}
.page-head h1{font-size:21px;letter-spacing:-.02em}
.page-head .muted{font-size:13px;margin-top:5px}
.crumbs{font-size:12.5px;color:var(--ink-3);margin-bottom:10px}
.crumbs a:hover{color:var(--primary)}
.detail-title{display:flex;align-items:center;gap:10px;font-size:20px;line-height:1.45}
.meta-line{display:flex;flex-wrap:wrap;align-items:center;gap:8px 14px;margin-top:10px;
  font-size:12.8px;color:var(--ink-2)}

/* ============ 按钮 ============ */
.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:6px;
  padding:8px 15px;border-radius:8px;border:1px solid transparent;
  font-size:13.5px;font-weight:550;cursor:pointer;font-family:inherit;
  transition:background .15s,border-color .15s,color .15s,box-shadow .15s;
  white-space:nowrap;
}
.btn.primary{
  background:linear-gradient(180deg,#3d78ff,#2a63f0);color:#fff;
  box-shadow:0 1px 2px rgba(47,107,255,.32), 0 8px 18px -10px rgba(47,107,255,.7);
}
.btn.primary:hover{background:linear-gradient(180deg,#3570fb,#2159e8)}
.btn.primary:active{box-shadow:0 1px 2px rgba(47,107,255,.3)}
.btn.ghost{background:#fff;border-color:var(--line-2);color:var(--ink-2)}
.btn.ghost:hover{border-color:#c3c9d4;color:var(--ink);background:#fafbfd}
.btn.danger-ghost{background:#fff;border-color:#f0d6d7;color:var(--danger)}
.btn.danger-ghost:hover{background:var(--danger-soft)}
.btn.small{padding:5px 10px;font-size:12.5px;border-radius:7px}
.btn.block{width:100%}
.btn:focus-visible{outline:none;box-shadow:0 0 0 3px rgba(47,107,255,.22)}

/* ============ 卡片 ============ */
.panel{
  background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);
  box-shadow:var(--shadow);padding:19px 21px;margin-bottom:18px;
}
.panel-head{display:flex;align-items:center;gap:10px;margin-bottom:15px}
.panel-head h2{font-size:14.5px}
.count{
  font-size:11.5px;color:var(--ink-3);background:#f3f5f9;
  padding:1px 8px;border-radius:20px;font-weight:600;
}

/* ============ 统计卡 ============ */
.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:15px;margin-bottom:22px}
.stat{
  background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);
  padding:15px 18px 16px;box-shadow:var(--shadow);
  display:flex;flex-direction:column;gap:3px;
  transition:border-color .16s,box-shadow .16s,transform .16s;
}
.stat:hover{border-color:#dde4ef;box-shadow:0 2px 4px rgba(16,24,40,.04),0 12px 26px -12px rgba(16,24,40,.16);transform:translateY(-1px)}
.stat-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:4px}
.stat-label{font-size:12.5px;color:var(--ink-3)}
.stat-num{font-size:29px;font-weight:680;letter-spacing:-.025em;line-height:1.15;
  font-variant-numeric:tabular-nums}
.stat-foot{font-size:11.5px;color:var(--ink-3)}
.stat.alarm{border-color:#f2d8d9;background:linear-gradient(180deg,#fffafa,#fff)}
.stat.alarm .stat-num{color:var(--danger)}
a.stat{cursor:pointer}
a.stat:hover .stat-label{color:var(--primary-d)}
a.stat:hover .stat-num{color:var(--primary-d)}
a.stat.alarm:hover .stat-num{color:var(--danger)}
a.stat:focus-visible{outline:2px solid var(--primary);outline-offset:2px}
.stat-ic{
  width:28px;height:28px;border-radius:8px;display:grid;place-items:center;
  background:#f2f5fa;color:#6b7891;flex:0 0 28px;
}
.stat-ic svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:1.8;
  stroke-linecap:round;stroke-linejoin:round}
.stat-ic.blue{background:#eef3ff;color:#2f6bff}
.stat-ic.violet{background:#f3f0ff;color:#6a51d0}
.stat-ic.red{background:#fdeeee;color:#d84850}
.stat-ic.green{background:#e9f7ef;color:#0f9d58}

/* ============ 两栏 ============ */
.two-col{display:grid;grid-template-columns:1fr 1fr;gap:18px;align-items:start}
.two-col.uneven{grid-template-columns:1.95fr 1fr}

/* ============ 任务行 ============ */
.task-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:2px}
.task-row{
  display:flex;align-items:center;gap:14px;padding:11px 12px 11px 14px;
  border-radius:9px;border-left:3px solid transparent;transition:background .14s;
}
.task-row:hover{background:#f7f9fc}
.task-row.pri-1{border-left-color:#e8626a}
.task-row.pri-2{border-left-color:#7aa6f5}
.task-row.pri-3{border-left-color:#d7dbe2}
.tr-main{flex:1;min-width:0}
.tr-title{font-size:13.8px;font-weight:550;line-height:1.45;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.tr-meta{display:flex;gap:10px;align-items:center;margin-top:4px;font-size:12px;color:var(--ink-3)}
.tr-meta .who{color:var(--ink-2);font-weight:550}
.tr-right{display:flex;flex-direction:column;align-items:flex-end;gap:5px;flex:0 0 auto}

.tag{
  display:inline-block;font-size:11.5px;color:var(--ink-2);background:#f3f5f9;
  border-radius:5px;padding:1px 7px;white-space:nowrap;
}

/* ============ 状态 ============ */
.pill{
  display:inline-block;font-size:11.5px;font-weight:600;border-radius:20px;padding:2px 10px;
  white-space:nowrap;
}
.pill.pending{background:#f1f3f7;color:#5f6878}
.pill.doing{background:var(--primary-soft);color:var(--primary-d)}
.pill.done{background:var(--ok-soft);color:#0b7a45}
.pill.cancelled{background:#f2f2f4;color:#8b8f98}
.pill.returned{background:#faece7;color:#993c1d}
.pill.archived{background:#eceff4;color:#495366;border:1px solid #dde2ea}
.sum-acts{display:flex;gap:8px}
.sum-acts .btn{flex:1 1 0}
.mem-pick{border:1px solid var(--line);border-radius:10px;padding:10px 12px;max-height:232px;overflow:auto;background:#fbfcfe}
.mem-dept{font-size:11.5px;color:var(--ink-3);margin:4px 0 6px}
.mem-row{display:flex;flex-wrap:wrap;gap:8px 26px;margin-bottom:4px}
.mem-item{display:inline-flex;align-items:center;gap:6px;font-size:13px;cursor:pointer;white-space:nowrap;flex:0 0 auto}
.mem-item input{flex:0 0 auto;margin:0}
.field .mem-item input[type=checkbox]{
  width:14px;height:14px;flex:0 0 14px;padding:0;border:0;border-radius:3px;
  accent-color:var(--primary);
}
.mem-list{list-style:none;margin:0;padding:0}
.mem-list li{display:flex;justify-content:space-between;align-items:center;padding:9px 0;border-bottom:1px dashed var(--line);font-size:13.5px}
.mem-list li:last-child{border-bottom:0}
.mem-list li.on .mem-state{color:var(--ok)}
.mem-list .mem-name em{font-style:normal;margin-left:8px;font-size:11px;padding:1px 6px;border-radius:999px;background:var(--primary-soft);color:var(--primary-d)}
.mem-list .mem-state{font-size:12.5px;color:var(--ink-3)}
.star-btn{
  border:0;background:none;padding:0;margin-right:5px;cursor:pointer;
  color:#c3cad6;vertical-align:-2px;line-height:0;transition:color .12s;
}
.star-btn svg{width:13px;height:13px;display:block;fill:none;stroke:currentColor;
  stroke-width:1.7;stroke-linejoin:round}
.star-btn:hover{color:#e2ad3c}
.star-btn.on{color:#f0a92b}
.star-btn.on svg{fill:currentColor}
.star-btn.lg svg{width:16px;height:16px}
.star-btn.lg{vertical-align:-3px}
.tpager{
  display:flex;align-items:center;justify-content:space-between;gap:12px;
  padding:13px 2px 2px;margin-top:8px;border-top:1px solid var(--line);
}
.tp-info{font-size:12.5px;color:var(--ink-3)}
.tp-btns{display:flex;gap:8px;flex:0 0 auto}
.tp-btn{
  font-size:12.8px;color:var(--ink-2);border:1px solid var(--line);border-radius:7px;
  padding:5px 13px;background:#fff;text-decoration:none;white-space:nowrap;flex:0 0 auto;
  transition:border-color .12s,color .12s;
}
.tp-btn:hover{border-color:var(--primary);color:var(--primary-d)}
.tp-btn.off{color:#c2c8d2;background:#fafbfd;cursor:default}
.tp-btn.off:hover{border-color:var(--line);color:#c2c8d2}
.dept-pill{gap:4px;padding:3px 5px 3px 9px}
.dept-pill>span{padding-right:2px}
.dept-pill form{display:inline;margin:0}
.dept-mv{
  border:0;background:none;cursor:pointer;color:#7a8698;font-size:13px;font-weight:500;
  line-height:1;padding:3px 5px;border-radius:4px;
}
.dept-mv:hover:not(:disabled){background:#eef2f8;color:var(--primary-d)}
.dept-mv:disabled{color:#d6dbe3;cursor:default}
.dept-mv.del:hover:not(:disabled){background:#fdeeee;color:#b4382e}
.dept-pill .dept-n{
  font-style:normal;font-size:10.5px;color:var(--ink-3);background:#eef1f6;
  border-radius:20px;padding:0 5px;margin-left:-1px;
}
.mem-warn{
  font-size:12.2px;line-height:1.6;color:#a33a2a;background:#fdf2ef;
  border:1px solid #f0d5cd;border-radius:7px;padding:7px 9px;margin:8px 0 0;
}
.mem-group.is-same-dept{opacity:.45}
.mem-group.is-same-dept .mem-dept::after{content:" 同部门，不能选";color:#a33a2a;font-size:11px}
.panel-head + .timeline{margin-top:14px}
.flow-tip{
  font-size:12.2px;line-height:1.65;color:var(--ink-3);background:#fafbfd;
  border:1px dashed var(--line-2);border-radius:8px;padding:9px 11px;margin:0 0 14px;
}
.summary-body{
  font-size:13.6px;line-height:1.85;color:var(--ink);white-space:pre-wrap;
  background:#f7faf8;border:1px solid #dcebe2;border-radius:9px;padding:12px 14px;
}
.blocked-box{
  background:#fdf5f1;border:1px solid #f0d8cc;border-radius:8px;
  padding:9px 11px;margin:8px 0 6px;font-size:12.6px;line-height:1.6;color:#7c3a1e;
}
.blocked-box b{font-weight:500;display:block}
.blocked-box em{font-style:normal;color:#a06a4e;font-size:11.8px}
.act-box{border:1px solid var(--line);border-radius:10px;padding:8px 10px;
  background:#fcfcfd;margin-top:8px}
.act-box summary{cursor:pointer;font-size:13px;color:var(--ink-2);font-weight:600}
.act-box[open] summary{margin-bottom:8px}
.req-box{border:1px solid #f0d8cc;background:#fdf7f4;border-radius:9px;
  padding:10px 12px;margin-bottom:10px;font-size:13px;line-height:1.6;color:#6d4a37}
.req-box b{font-weight:500;color:#8a4622;display:block}
.req-box em{font-style:normal;color:#a2683f;font-size:12px}
.req-box p{margin:5px 0 0;color:#5d4a40}
.req-acts{display:flex;gap:8px;margin-top:9px}
.req-acts form{flex:1 1 0}
.pill.role-gm{background:#fdf0e6;color:#b96a14}
.pill.role-vp{background:#eef0fb;color:#4a4fa8}
.pill.role-head{background:var(--primary-soft);color:var(--primary-d)}
.pill.role-staff{background:#f1f3f7;color:#5f6878}

.due{font-size:11.5px;font-weight:600;color:var(--ink-3);white-space:nowrap}
.due.soon{color:var(--warn)}
.due.over{color:var(--danger)}
.due.none{color:var(--ink-3)}

/* ============ 表格 ============ */
.grid{width:100%;border-collapse:collapse;font-size:13.4px}
.grid th{
  text-align:left;font-size:11.5px;font-weight:600;color:var(--ink-3);
  padding:9px 10px;background:#f6f8fc;border-bottom:1px solid var(--line);
  white-space:nowrap;letter-spacing:.02em;
}
.grid th:first-child{border-radius:8px 0 0 8px}
.grid th:last-child{border-radius:0 8px 8px 0}
.grid td{padding:12px 10px;border-bottom:1px solid #f2f4f7;vertical-align:middle}
.grid tbody tr:last-child td{border-bottom:none}
.grid.compact td{padding:9px 8px}
.clickable{cursor:pointer;transition:background .14s}
.clickable:hover{background:#f8fafd}
.c-pri{width:22px;padding-right:0!important}
.c-dept{width:132px}
.c-who{width:78px}
.c-due{width:88px}
.c-status{width:86px}
.cell-title{font-weight:550;line-height:1.45}
.cell-sub{font-size:11.8px;color:var(--ink-3);margin-top:2px;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:520px}
.pri-dot{display:inline-block;width:7px;height:7px;border-radius:50%;background:#d7dbe2;vertical-align:middle}
.pri-dot.p1{background:#e8626a}
.pri-dot.p2{background:#7aa6f5}
.pri-dot.p3{background:#d7dbe2}

/* ============ 工具条 ============ */
.toolbar{display:flex;align-items:center;justify-content:space-between;gap:14px;
  margin:-2px 0 16px;flex-wrap:wrap}
.tabs{display:flex;gap:2px;background:#f3f5f9;border-radius:9px;padding:3px}
.tab{padding:5px 13px;border-radius:7px;font-size:13px;color:var(--ink-2);transition:.13s}
.tab:hover{color:var(--ink)}
.tab.on{background:#fff;color:var(--primary-d);font-weight:600;box-shadow:0 1px 3px rgba(16,24,40,.09)}
.search{display:flex;gap:8px}
.search input{
  width:210px;padding:7px 11px;border:1px solid var(--line-2);border-radius:8px;
  font-size:13px;font-family:inherit;outline:none;background:#fff;color:var(--ink);
  transition:border-color .14s,box-shadow .14s;
}
.search input:focus{border-color:#a9c2ff;box-shadow:0 0 0 3px rgba(47,107,255,.1)}

/* ============ 详情 ============ */
.detail-grid{display:grid;grid-template-columns:1fr 290px;gap:18px;align-items:start}
.prose{font-size:13.8px;line-height:1.85;color:var(--ink-2);white-space:pre-wrap}
.progress-box{
  background:#f8fafc;border:1px solid var(--line);border-left:3px solid var(--primary);
  border-radius:8px;padding:11px 14px;font-size:13.5px;color:var(--ink-2);
  white-space:pre-wrap;margin-bottom:12px;
}
.progress-box.empty-box{border-left-color:#dfe3ea;color:var(--ink-3);font-style:normal}

.inline-form{display:flex;gap:10px;align-items:flex-end;margin-top:6px}
.inline-form textarea{
  flex:1;padding:9px 12px;border:1px solid var(--line-2);border-radius:8px;
  font-family:inherit;font-size:13.2px;resize:vertical;outline:none;background:#fff;
  transition:border-color .14s,box-shadow .14s;
}
.inline-form textarea:focus{border-color:#a9c2ff;box-shadow:0 0 0 3px rgba(47,107,255,.1)}

.timeline{list-style:none;margin:0 0 16px;padding:0 0 0 4px}
.timeline li{display:flex;gap:12px;padding-bottom:14px;position:relative}
.timeline li:not(:last-child)::before{
  content:"";position:absolute;left:4px;top:14px;bottom:0;width:1px;background:var(--line);
}
.tl-dot{width:9px;height:9px;border-radius:50%;margin-top:5px;flex:0 0 9px;
  background:#cbd2dd;border:2px solid #fff;box-shadow:0 0 0 1px var(--line)}
.tl-dot.create{background:var(--primary)}
.tl-dot.status{background:var(--ok)}
.tl-dot.progress{background:var(--warn)}
.tl-head{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;font-size:13px}
.tl-head b{font-weight:600}
.tl-act{color:var(--ink-3);font-size:12.5px}
.tl-head time{color:#aab1bc;font-size:11.5px;margin-left:auto}
.tl-note{font-size:13px;color:var(--ink-2);margin-top:3px;line-height:1.7;white-space:pre-wrap}

.actions{display:flex;flex-direction:column;gap:8px}
.kv{margin:0;display:grid;grid-template-columns:78px 1fr;gap:9px 10px;font-size:13px}
.kv dt{color:var(--ink-3);font-size:12.5px}
.kv dd{margin:0;color:var(--ink);text-align:right}
.two-col.solo{grid-template-columns:1fr}
.panel-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(430px,1fr));gap:18px;align-items:start;margin-bottom:18px}
.panel-grid > .panel{margin-bottom:0}
.panel-grid > .panel:last-child:nth-child(odd){grid-column:1/-1}

/* 转派与动态可见范围 */
.route{color:var(--ink-3);font-size:12px}
.route b{color:var(--ink-2);font-weight:600}
.task-row .route{font-size:11.5px}
.scope-tip{
  display:flex;gap:9px;align-items:flex-start;margin:0 0 14px;
  padding:10px 12px;border-radius:8px;background:#fffaf0;border:1px solid #f4e2bd;
  font-size:12.5px;color:#8a6320;line-height:1.6;
}
.scope-tip svg{width:15px;height:15px;flex:0 0 15px;margin-top:2px;fill:none;
  stroke:#c08a2a;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}
.timeline.has-form{margin-top:18px}
.timeline li.is-private .tl-note{
  background:#fafbfd;border:1px dashed #dfe4ec;border-radius:7px;padding:8px 10px;margin-top:5px;
}
.tl-flags{display:flex;align-items:center;gap:8px;margin-top:6px;flex-wrap:wrap}
.tl-flags form{margin:0}
.scope-tag{font-size:11.5px;color:#96702a;background:#fdf6e6;border:1px solid #f2e3c2;
  border-radius:5px;padding:1px 7px}
.scope-tag.ok{color:#2f7a52;background:#f1faf4;border-color:#cfe9d9}
.btn.tiny{padding:2px 9px;font-size:11.5px;border-radius:6px;background:#fff;
  border:1px solid var(--line-2);color:var(--ink-2)}
.btn.tiny:hover{border-color:#bcc6d6;color:var(--ink)}
.tl-dot.delegate{background:#8b6cf0}
.tl-dot.forward{background:var(--primary)}
.delegate-now{display:flex;flex-direction:column;gap:3px;margin-bottom:10px;
  padding:10px 12px;border-radius:8px;background:#f8fafc;border:1px solid var(--line)}
.delegate-now span{font-size:11.5px;color:var(--ink-3)}
.delegate-now strong{font-size:14px;font-weight:600}
.delegate-now em{font-size:11.5px;color:var(--ink-3);font-style:normal}
.hint{margin:10px 0 0;font-size:11.8px;color:var(--ink-3);line-height:1.7}
.select.wide{width:100%}

/* ============ 表单 ============ */
.form-panel{max-width:760px}
.field{display:flex;flex-direction:column;gap:6px;margin-bottom:16px}
.field > span{font-size:12.5px;color:var(--ink-2);font-weight:550}
.field > span i{color:var(--danger);font-style:normal}
.field input,.field select,.field textarea{
  width:100%;padding:9px 12px;border:1px solid var(--line-2);border-radius:8px;
  font-size:13.5px;font-family:inherit;outline:none;background:#fff;color:var(--ink);
  transition:border-color .14s,box-shadow .14s;
}
.field input:focus,.field select:focus,.field textarea:focus{
  border-color:#a9c2ff;box-shadow:0 0 0 3px rgba(47,107,255,.1);
}
.field textarea{resize:vertical;line-height:1.7}
.field-row{display:grid;grid-template-columns:1.6fr 1fr .8fr;gap:14px}
.form-foot{display:flex;justify-content:flex-end;gap:10px;padding-top:6px;
  border-top:1px solid var(--line);margin-top:4px;padding-top:16px}
.stack-form .field{margin-bottom:13px}
.field-row .field{margin-bottom:0}

/* 横向表单（人员添加） */
.form-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:0 18px;align-items:start}
.form-grid .field{margin-bottom:14px}
.form-actions{grid-column:1/-1;display:flex;align-items:center;gap:14px;padding-top:2px}
.form-actions .btn{padding:9px 24px}
.form-actions .muted{font-size:12px}

/* 首页安静提示 */
.quiet-note{display:flex;align-items:center;gap:8px;font-size:12.8px;color:var(--ink-3);
  padding:0 3px 12px}
.qn-dot{width:6px;height:6px;border-radius:50%;background:#c9d2e2;flex:0 0 6px}

/* ============ 上传 ============ */
.upload-panel{padding:16px 18px}
.upload-form{display:grid;grid-template-columns:1fr 190px;gap:16px;align-items:stretch}
.dropzone{
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;
  border:1.5px dashed #cfd6e2;border-radius:10px;padding:22px 16px;cursor:pointer;
  background:#fbfcfe;transition:border-color .15s,background .15s;text-align:center;
}
.dropzone:hover{border-color:#a9c2ff;background:#f7faff}
.dropzone input{display:none}
.dropzone svg{width:22px;height:22px;fill:none;stroke:#8fa4c9;stroke-width:1.6;
  stroke-linecap:round;stroke-linejoin:round}
.dz-name{font-size:13.4px;font-weight:550;color:var(--ink-2)}
.dropzone em{font-size:11.5px;color:var(--ink-3);font-style:normal}
.upload-side{display:flex;flex-direction:column;justify-content:center;gap:10px}
.upload-side .field{margin:0}

/* ============ 文件列表 ============ */
.file-list{list-style:none;margin:0;padding:0}
.file-row{display:flex;align-items:center;gap:13px;padding:11px 8px;border-radius:9px;
  transition:background .14s;border-bottom:1px solid #f4f6f9}
.file-row:last-child{border-bottom:none}
.file-row:hover{background:#f8fafd}
.file-icon{
  width:38px;height:38px;flex:0 0 38px;border-radius:9px;display:grid;place-items:center;
  font-size:9.5px;font-weight:700;letter-spacing:.03em;
  background:#eef2f8;color:#5a6a86;
}
.file-icon.pdf{background:#fdeeee;color:#c44b50}
.file-icon.xls,.file-icon.xlsx,.file-icon.csv{background:#e9f7ef;color:#0b7a45}
.file-icon.doc,.file-icon.docx{background:#eaf1fd;color:#2a5bc4}
.file-icon.ppt,.file-icon.pptx{background:#fdf0e9;color:#c26a2c}
.file-icon.zip,.file-icon.rar,.file-icon.7z{background:#f3f0fb;color:#6a51b8}
.file-main{flex:1;min-width:0}
.file-name{font-size:13.6px;font-weight:550;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.file-meta{display:flex;gap:12px;font-size:11.8px;color:var(--ink-3);margin-top:3px;flex-wrap:wrap}
.vis{padding:0 6px;border-radius:4px;background:#f2f4f7}
.vis.company{background:#eaf1fd;color:#2a5bc4}
.vis.private{background:#f6f0fb;color:#7a4fbf}
.file-act{display:flex;gap:6px;align-items:center;flex:0 0 auto}
.file-act form{margin:0}

/* ============ 提示与空态 ============ */
.flash-stack{display:flex;flex-direction:column;gap:8px;margin-bottom:16px}
.flash{padding:9px 13px;border-radius:8px;font-size:13px;border:1px solid transparent}
.flash.ok{background:var(--ok-soft);color:#0b7a45;border-color:#cdebdb}
.flash.error{background:var(--danger-soft);color:#b3363b;border-color:#f5d3d5}

.empty{padding:34px 10px;text-align:center;display:flex;flex-direction:column;
  align-items:center;justify-content:center;gap:3px;min-height:150px}
.empty p{font-size:13.5px;color:var(--ink-2);font-weight:550}
.empty span{font-size:12.5px;color:var(--ink-3)}
.empty-ic{width:42px;height:42px;fill:none;stroke:#c6cedd;stroke-width:1.9;
  stroke-linecap:round;stroke-linejoin:round;margin-bottom:9px}

/* ============ 人员 ============ */
.user-cell{display:flex;align-items:center;gap:10px}
.user-cell > div{min-width:0}
.users-grid th:nth-child(1),.users-grid td:first-child{width:230px;min-width:230px}
.users-grid th:nth-child(2),.users-grid td:nth-child(2){width:170px}
.users-grid th:nth-child(3),.users-grid td:nth-child(3){width:110px}
.users-grid th:nth-child(4),.users-grid td:nth-child(4){width:80px}
.users-grid .cell-sub{max-width:200px}
.row-act{display:flex;gap:6px;justify-content:flex-end;align-items:center}
.row-act form{margin:0}
form.mini{display:flex;gap:5px}
form.mini input{width:88px;padding:5px 8px;border:1px solid var(--line-2);border-radius:7px;
  font-size:12.5px;font-family:inherit;outline:none}
form.mini input:focus{border-color:#a9c2ff}
.dot-ok{font-size:12px;color:var(--ok);font-weight:600}
.dot-off{font-size:12px;color:var(--ink-3)}

/* ============ 错误页 ============ */
.error-page{padding:80px 20px;text-align:center}
.error-code{font-size:56px;font-weight:700;color:#dfe4ec;letter-spacing:-.03em}
.error-page p{font-size:14.5px;color:var(--ink-2);margin:6px 0 20px}
.error-act{display:flex;gap:10px;justify-content:center}

/* ============ 部门概览 ============ */
.dept-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}
.dept-card{
  border:1px solid var(--line);border-radius:11px;padding:14px 16px;background:#fcfdff;
  transition:border-color .16s,box-shadow .16s;
}
.dept-card:hover{border-color:#d3dcf0;box-shadow:0 2px 10px -2px rgba(16,24,40,.08)}
a.dept-card{display:block;color:inherit;text-decoration:none;cursor:pointer}
a.dept-card:hover{border-color:#cfdcf7;background:#f8fbff;box-shadow:0 2px 10px -2px rgba(16,24,40,.08)}
a.dept-card:hover .dc-top strong{color:var(--primary-d)}
a.dept-card:hover .dc-pct{color:var(--primary)}
a.dept-card:focus-visible{outline:2px solid var(--primary);outline-offset:2px}
.dc-top{display:flex;align-items:baseline;justify-content:space-between;gap:8px}
.dc-top strong{font-size:13.4px;font-weight:600}
.dc-pct{font-size:12.5px;font-weight:650;color:var(--primary-d)}
.dc-bar{height:5px;border-radius:3px;background:#edf0f6;margin:9px 0 9px;overflow:hidden}
.dc-bar i{display:block;height:100%;border-radius:3px;
  background:linear-gradient(90deg,#4d84ff,#2f6bff);transition:width .4s}
.dc-foot{display:flex;gap:14px;font-size:11.8px;color:var(--ink-3)}
.dc-foot b{color:var(--ink-2);font-weight:650}
.dc-foot .is-over b{color:var(--danger)}

/* ============ 筛选与排序 ============ */
.filters{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.select{
  appearance:none;-webkit-appearance:none;
  padding:7px 29px 7px 11px;border:1px solid var(--line-2);border-radius:8px;
  font-size:12.8px;font-family:inherit;color:var(--ink);background-color:#fff;
  background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%236b7891' stroke-width='2' stroke-linecap='round'%3E%3Cpath d='m6 9.5 6 6 6-6'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right 8px center;background-size:13px;
  cursor:pointer;transition:border-color .14s,box-shadow .14s;max-width:200px;
}
.select:hover{border-color:#c6d2e6}
.select:focus{outline:none;border-color:#a9c2ff;box-shadow:0 0 0 3px rgba(47,107,255,.1)}
.filter-bar{
  display:flex;align-items:center;gap:7px;flex-wrap:wrap;
  margin:-4px 0 14px;padding:8px 12px;border-radius:9px;
  background:#f7f9fd;border:1px solid #eaeff8;
}
.fb-label{font-size:11.5px;color:var(--ink-3);margin-right:2px}
.fb-chip{
  font-size:11.8px;font-weight:600;color:var(--primary-d);background:#fff;
  border:1px solid #d9e4fb;border-radius:20px;padding:1px 10px;
}
.fb-clear{font-size:12px;color:var(--ink-3);margin-left:auto;border-bottom:1px dashed #c9d1de}
.fb-clear:hover{color:var(--danger);border-bottom-color:var(--danger)}
.grid tr.is-done .cell-title{color:var(--ink-3);font-weight:500}
.grid tr.is-done .c-who,.grid tr.is-done .tag{opacity:.7}
.panel-more{margin-left:auto;font-size:12px;color:var(--ink-3);white-space:nowrap}
.panel-more:hover{color:var(--primary-d)}

/* 移动端底部导航 */
.mobile-nav{display:none}
@media (max-width:900px){
  .mobile-nav{
    display:flex;position:fixed;left:0;right:0;bottom:0;z-index:50;
    background:rgba(255,255,255,.97);backdrop-filter:blur(14px);
    border-top:1px solid var(--line);
    padding:5px 6px calc(5px + env(safe-area-inset-bottom));
  }
  .mobile-nav a{
    flex:1;display:flex;flex-direction:column;align-items:center;gap:3px;
    padding:6px 2px;font-size:10.5px;color:var(--ink-3);border-radius:8px;
  }
  .mobile-nav a.on{color:var(--primary-d);background:var(--primary-soft)}
  .mobile-nav svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:1.7;
    stroke-linecap:round;stroke-linejoin:round}
  .main{padding-bottom:86px}
}

/* ============ 响应式 ============ */
@media (max-width:1180px){
  .stats{grid-template-columns:repeat(2,1fr)}
  .panel-grid{grid-template-columns:1fr}
  .two-col,.two-col.uneven{grid-template-columns:1fr}
  .detail-grid{grid-template-columns:1fr}
  .dept-grid{grid-template-columns:1fr}
  .form-grid{grid-template-columns:1fr 1fr}
}
@media (max-width:900px){
  .sidebar{display:none}
  .main{padding:22px 18px 50px}
  .field-row{grid-template-columns:1fr}
  .upload-form{grid-template-columns:1fr}
  .form-grid{grid-template-columns:1fr}
  .c-dept,.c-who{display:none}
  .grid{table-layout:fixed}
  .page-head > div{min-width:0}
}
@media (max-width:640px){
  .page-head{flex-wrap:wrap;gap:12px;margin-bottom:18px}
  .page-head h1{font-size:18px;line-height:1.5}
  .page-head .btn{padding:8px 14px}
  .stats{gap:10px;margin-bottom:18px}
  .stat{padding:13px 14px}
  .stat-num{font-size:23px}
  .panel{padding:15px 14px;border-radius:12px}
  .toolbar{flex-direction:column;align-items:stretch;gap:10px}
  .tabs{overflow-x:auto}
  .search input{width:100%}
  .filters{width:100%}
  .select{flex:1 1 0;max-width:none;min-width:0}
  .filters .search{width:100%}
  .filters .search input{flex:1 1 auto;min-width:0;width:auto}
  .filter-bar{gap:6px}
  .fb-clear{margin-left:0}
  .grid th,.grid td{padding:9px 7px}
  .cell-sub{max-width:180px}
  .detail-grid{gap:14px}
  .kv{grid-template-columns:88px 1fr}
  .upload-panel{padding:13px}
  .file-row{gap:10px}
  .file-icon{width:34px;height:34px;flex:0 0 34px}
}
@media (max-width:520px){
  .stats{grid-template-columns:1fr 1fr;gap:10px}
  .stat-num{font-size:22px}
  .login-card{padding:28px 22px 22px}
  .users-grid th:nth-child(1),.users-grid td:first-child{width:auto;min-width:0}
  .users-grid th:nth-child(2),.users-grid td:nth-child(2),
  .users-grid th:nth-child(3),.users-grid td:nth-child(3),
  .users-grid th:nth-child(4),.users-grid td:nth-child(4){width:auto}
  .users-grid .row-act{flex-wrap:wrap;gap:4px}
  .users-grid form.mini input{width:70px}
}

/* ============ 日历看板 ============ */
.cal-layout{display:grid;grid-template-columns:232px 1fr;gap:18px;align-items:start}
.cal-layout > *{min-width:0}
.cal-side{display:flex;flex-direction:column;gap:13px;position:sticky;top:20px}

.mini-cal{background:#fff;border:1px solid var(--line);border-radius:12px;padding:13px 13px 11px;box-shadow:var(--shadow)}
.mini-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}
.mini-head strong{font-size:12.8px;font-weight:600}
.mini-nav{display:flex;gap:2px}
.mini-nav a{width:20px;height:20px;display:grid;place-items:center;border-radius:5px;
  color:var(--ink-3);font-size:14px;line-height:1}
.mini-nav a:hover{background:#f1f4fa;color:var(--ink)}
.mini-grid{display:grid;grid-template-columns:repeat(7,1fr);row-gap:1px;text-align:center}
.mini-dow{font-size:10.5px;color:var(--ink-3);padding:2px 0 5px}
.mini-day{position:relative;height:24px;display:grid;place-items:center;font-size:11.5px;
  color:var(--ink-2);border-radius:6px;transition:background .13s}
.mini-day:hover{background:#f1f4fa}
.mini-day.out{color:#c4cbd8}
.mini-day.has::after{content:"";position:absolute;bottom:1px;left:50%;transform:translateX(-50%);
  width:3px;height:3px;border-radius:50%;background:var(--primary);opacity:.75}
.mini-day.today{color:var(--primary-d);font-weight:700}
.mini-day.sel{background:var(--primary);color:#fff;font-weight:600}
.mini-day.sel.has::after{background:#fff;opacity:1}

.cal-side-block{background:#fff;border:1px solid var(--line);border-radius:12px;
  padding:12px 13px;box-shadow:var(--shadow)}
.csb-title{font-size:11.2px;color:var(--ink-3);font-weight:600;letter-spacing:.04em;margin-bottom:7px}
.csb-list{display:flex;flex-direction:column;gap:1px}
.csb-item{display:flex;align-items:center;gap:8px;padding:6px 8px;border-radius:7px;
  font-size:12.8px;color:var(--ink-2);transition:background .13s,color .13s}
.csb-item:hover{background:#f5f7fb;color:var(--ink)}
.csb-item.on{background:var(--primary-soft);color:var(--primary-d);font-weight:600}
.csb-dot{width:7px;height:7px;border-radius:50%;background:#c3cbda;flex:0 0 7px}
.csb-dot.mine{background:var(--primary)}
.csb-dot.sent{background:#8b6cf0}
.cal-legend{display:flex;flex-direction:column;gap:5px;font-size:12.2px;color:var(--ink-2)}
.cal-legend span{display:flex;align-items:center;gap:7px}
.lg{width:9px;height:9px;border-radius:3px;flex:0 0 9px;background:#b9c2d1}
.lg.pending{background:#b9c2d1}
.lg.doing{background:var(--primary)}
.lg.done{background:#4cb782}
.lg.over{background:var(--danger)}
.cal-pick .select{width:100%;max-width:none}

.cal-main{padding:16px 16px 14px}
.cal-bar{display:flex;align-items:center;justify-content:space-between;gap:12px;
  flex-wrap:wrap;margin-bottom:12px}
.cal-nav{display:flex;align-items:center;gap:7px}
.cn-btn{width:26px;height:26px;display:grid;place-items:center;border:1px solid var(--line-2);
  border-radius:7px;background:#fff;color:var(--ink-2);font-size:15px;line-height:1;
  transition:border-color .13s,background .13s,color .13s}
.cn-btn:hover{border-color:#c3c9d4;color:var(--ink);background:#fafbfd}
.cal-label{font-size:14px;font-weight:650;margin-left:4px;letter-spacing:-.01em}
.cal-tools{display:flex;align-items:center;gap:13px}
.cal-toggle{font-size:12px;color:var(--ink-3);border-bottom:1px dashed #ccd4e0;padding-bottom:1px}
.cal-toggle:hover{color:var(--primary-d);border-bottom-color:var(--primary)}
.seg{display:flex;gap:2px;background:#f3f5f9;border-radius:8px;padding:3px}
.seg-i{padding:3px 12px;border-radius:6px;font-size:12.5px;color:var(--ink-2);transition:.13s}
.seg-i:hover{color:var(--ink)}
.seg-i.on{background:#fff;color:var(--primary-d);font-weight:600;box-shadow:0 1px 3px rgba(16,24,40,.09)}

/* 月 */
.month-grid{display:grid;grid-template-columns:repeat(7,1fr);
  border-top:1px solid var(--line);border-left:1px solid var(--line);
  border-radius:9px;overflow:hidden;background:#fff}
.mg-dow{background:#f6f8fc;font-size:11.3px;color:var(--ink-3);font-weight:600;
  text-align:center;padding:7px 0;border-right:1px solid var(--line);border-bottom:1px solid var(--line)}
.mg-day{min-height:106px;border-right:1px solid var(--line);border-bottom:1px solid var(--line);
  padding:5px 5px 6px;background:#fff;display:flex;flex-direction:column;gap:3px;min-width:0}
.mg-day.out{background:#fcfdff}
.mg-day.sel{background:#f8fbff}
.mg-top{display:flex;align-items:center;justify-content:space-between;gap:4px}
.mg-num{font-size:11.8px;color:var(--ink-2);width:19px;height:19px;display:grid;
  place-items:center;border-radius:50%;font-variant-numeric:tabular-nums}
.mg-num:hover{background:#eef3ff;color:var(--primary-d)}
.mg-day.out .mg-num{color:#bcc4d2}
.mg-day.today .mg-num{background:var(--primary);color:#fff;font-weight:600}
.mg-n{font-size:10.3px;color:var(--ink-3);background:#f2f4f8;border-radius:20px;
  padding:0 5px;font-weight:600}
.mg-items{display:flex;flex-direction:column;gap:2px;min-width:0;overflow:hidden}
.cal-chip{display:flex;align-items:center;gap:4px;font-size:11.2px;line-height:1.55;
  color:var(--ink-2);padding:1px 4px;border-radius:4px;background:#f5f7fb;min-width:0}
.cal-chip > span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cal-chip:hover{background:#e9effb;color:var(--primary-d)}
.chip-dot{width:5px;height:5px;border-radius:50%;flex:0 0 5px;background:#b9c2d1}
.cal-chip.doing{background:#eef3ff;color:#274a94}
.cal-chip.doing .chip-dot{background:var(--primary)}
.cal-chip.done{background:#f1faf5;color:#5a7a6a}
.cal-chip.done .chip-dot{background:#4cb782}
.cal-chip.over,.cal-card.over{background:#fdeeee;color:#ab3539}
.cal-chip.over .chip-dot,.cal-card.over .chip-dot{background:var(--danger)}
.mg-more{font-size:10.8px;color:var(--ink-3);padding:0 4px}
.mg-more:hover{color:var(--primary-d)}

/* 周 */
.week-grid{display:grid;grid-template-columns:repeat(7,1fr);
  border:1px solid var(--line);border-radius:9px;overflow:hidden;background:#fff}
.wk-col{border-right:1px solid var(--line);min-height:430px;display:flex;flex-direction:column;min-width:0}
.wk-col:last-child{border-right:none}
.wk-col.today{background:#f9fcff}
.wk-head{display:flex;align-items:baseline;gap:6px;padding:8px 8px 6px;
  border-bottom:1px solid var(--line);background:#fafbfd}
.wk-head span{font-size:10.8px;color:var(--ink-3)}
.wk-date{font-size:13px;font-weight:650;color:var(--ink)}
.wk-date:hover{color:var(--primary-d)}
.wk-body{padding:6px;display:flex;flex-direction:column;gap:5px;flex:1}
.cal-card{display:flex;flex-direction:column;gap:3px;padding:6px 7px;border-radius:6px;
  background:#f5f7fb;min-width:0;transition:box-shadow .14s}
.cal-card:hover{box-shadow:0 2px 9px -2px rgba(16,24,40,.2)}
.cal-card.doing{background:#eef3ff}
.cal-card.done{background:#f1faf5}
.cc-title{font-size:11.6px;line-height:1.5;color:var(--ink);
  display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
.cal-card.done .cc-title{color:#6c8074}
.cc-meta{display:flex;align-items:center;gap:5px;font-size:10.7px;color:var(--ink-3);flex-wrap:wrap}
.cc-meta em{font-style:normal;color:#96702a;background:#fdf6e6;border-radius:4px;padding:0 4px}
.wk-empty{font-size:12px;color:#d8dde6;text-align:center;padding-top:8px}

/* 日 */
.day-view{padding:2px}
.dv-head{display:flex;align-items:baseline;gap:10px;padding:0 2px 12px;
  border-bottom:1px solid var(--line);margin-bottom:13px}
.dv-head strong{font-size:15px;letter-spacing:-.01em}
.dv-head span{font-size:12px;color:var(--ink-3)}
.dv-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px}
.cal-card.wide{padding:11px 13px;background:#fbfcfe;border:1px solid var(--line)}
.cal-card.wide.doing{background:#f7faff;border-color:#dbe6fb}
.cal-card.wide.done{background:#f8fcf9}
.cal-card.wide .cc-title{font-size:13.4px;-webkit-line-clamp:2;font-weight:550}
.cal-card.wide .cc-meta{font-size:11.5px;margin-top:2px}
.cc-note{font-size:11.8px;color:var(--ink-3);margin-top:3px;line-height:1.6}

/* ============ 成员在手 ============ */
.member-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(238px,1fr));gap:10px}
.member-card{display:flex;align-items:center;gap:9px;border:1px solid var(--line);
  border-radius:10px;padding:9px 11px;background:#fcfdff;
  transition:border-color .15s,box-shadow .15s,background .15s}
.member-card:hover{border-color:#cfdcf7;background:#f8fbff;box-shadow:0 2px 10px -2px rgba(16,24,40,.08)}
.member-card.is-me{background:#f7faff;border-color:#dbe6fb}
.mc-main{flex:1;min-width:0;display:flex;flex-direction:column;line-height:1.3}
.mc-main strong{font-size:13px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mc-main strong i{font-style:normal;font-size:10px;color:var(--primary-d);background:var(--primary-soft);
  border-radius:4px;padding:0 4px;margin-left:4px}
.mc-main span{font-size:11px;color:var(--ink-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mc-nums{display:flex;gap:8px;font-size:10.4px;color:var(--ink-3);flex:0 0 auto}
.mc-nums b{font-size:13.5px;font-weight:650;color:var(--ink);margin-right:1px;
  font-variant-numeric:tabular-nums}
.mc-nums .over b{color:var(--danger)}

/* ============ 其它补充 ============ */
.self-mark{font-size:10.4px;font-weight:600;color:#96702a;background:#fdf6e6;
  border:1px solid #f2e3c2;border-radius:4px;padding:0 5px;margin-right:6px;vertical-align:1px}
.tab-n{font-size:10.5px;color:var(--ink-3);margin-left:5px;font-weight:600;
  font-variant-numeric:tabular-nums}
.tab.on .tab-n{color:var(--primary-d)}
.locked-field{display:flex;align-items:center;gap:9px;padding:6px 11px;
  border:1px solid var(--line);border-radius:8px;background:#f8fafc;min-height:37px}
.locked-field strong{font-size:13.5px;font-weight:600;display:block;line-height:1.3}
.locked-field em{font-style:normal;font-size:11.5px;color:var(--ink-3)}

@media (max-width:1180px){
  .cal-layout{grid-template-columns:1fr}
  .cal-side{position:static;display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));
    gap:12px;align-items:start}
  .mini-cal{display:none}
}
@media (max-width:760px){
  .cal-side{grid-template-columns:1fr}
  .cal-legend{flex-direction:row;flex-wrap:wrap;gap:5px 14px}
  .month-grid .mg-day{min-height:70px;padding:4px 3px}
  .mg-items{flex-direction:row;flex-wrap:wrap;gap:3px;align-items:center}
  .mg-items .cal-chip{background:none;padding:0}
  .mg-items .cal-chip > span{display:none}
  .chip-dot{width:6px;height:6px;flex:0 0 6px}
  .mg-more{font-size:10px}
  .week-grid{grid-template-columns:1fr}
  .wk-col{min-height:0;border-right:none;border-bottom:1px solid var(--line)}
  .wk-col:last-child{border-bottom:none}
  .cal-tools{width:100%;justify-content:space-between}
}

/* ============ 列表 / 日历 切换 ============ */
.head-acts{display:flex;align-items:center;gap:12px;flex:0 0 auto}
.head-acts .seg{padding:3px}
.head-acts .seg-i{padding:5px 15px;font-size:13px}

/* ============ 资料库 · 上传 ============ */
.dropzone{position:relative;overflow:hidden}
.dz-input{position:absolute;inset:0;width:100%;height:100%;opacity:0;cursor:pointer;z-index:2}
.dropzone.over{border-color:var(--primary);background:var(--primary-soft)}
.dropzone.over .dz-name{color:var(--primary-d)}

/* ============ 资料库 · 文件夹 ============ */
.folder-bar{display:flex;flex-wrap:wrap;align-items:center;gap:8px;
  padding:13px 16px 14px;border-bottom:1px solid var(--line)}
.fchip{display:inline-flex;align-items:center;gap:6px;padding:6px 11px;
  border:1px solid var(--line-2);border-radius:8px;background:#fff;
  font-size:12.8px;color:var(--ink-2);line-height:1.4;transition:.13s;cursor:pointer}
.fchip svg{width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:1.6;
  stroke-linecap:round;stroke-linejoin:round;flex:0 0 14px}
.fchip b{font-size:11px;font-weight:600;color:var(--ink-3);background:#f2f4f8;
  border-radius:5px;padding:0 5px}
.fchip:hover{border-color:#b9c8e6;color:var(--ink);background:#fafcff}
.fchip.on{border-color:var(--primary);background:var(--primary-soft);color:var(--primary-d);font-weight:600}
.fchip.on b{background:#dfe9ff;color:var(--primary-d)}
.fchip.new{border-style:dashed;color:var(--ink-3);font-family:inherit}
.fchip.new:hover{color:var(--primary-d);border-color:var(--primary)}

.folder-form{display:flex;gap:8px;align-items:center;flex-wrap:wrap;
  padding:12px 16px;border-bottom:1px solid var(--line);background:#fafbfe}
.folder-form input[type=text],.folder-form input:not([type]){
  flex:1 1 260px;min-width:0;padding:8px 11px;border:1px solid var(--line-2);
  border-radius:8px;font-size:13.4px;font-family:inherit;background:#fff;color:var(--ink)}
.folder-form input:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-soft)}
.folder-form select{padding:8px 10px;border:1px solid var(--line-2);border-radius:8px;
  font-size:13.2px;font-family:inherit;background:#fff;color:var(--ink)}

.folder-head{display:flex;align-items:center;justify-content:space-between;gap:12px;
  padding:12px 16px;background:#f8faff;border-bottom:1px solid var(--line);flex-wrap:wrap}
.folder-head strong{font-size:14.5px;margin-right:8px}

.f-tag{color:var(--primary-d);background:var(--primary-soft);border-radius:5px;padding:0 6px}
.mv-form select{padding:4px 6px;border:1px solid var(--line);border-radius:7px;
  font-size:11.8px;font-family:inherit;color:var(--ink-2);background:#fff;max-width:110px}

@media (max-width:760px){
  .head-acts{width:100%;justify-content:space-between}
  .head-acts .btn{flex:1 1 auto;text-align:center}
  .folder-bar{padding:11px 12px}
  .fchip{font-size:12.2px;padding:5px 9px}
  .file-act{flex-wrap:wrap;justify-content:flex-end}
  .mv-form select{max-width:92px}
}

/* hidden 必须真的隐藏（display:flex 会覆盖 UA 的 [hidden]） */
[hidden]{display:none !important}
.folder-head > div{display:flex;align-items:center;gap:9px;flex-wrap:wrap}
.fb-cap{font-size:11.8px;color:var(--ink-3);margin-right:2px}
.head-acts .seg{box-shadow:inset 0 0 0 1px var(--line)}

/* 窄屏：文件行两段式，标签不再被挤成竖排 */
@media (max-width:760px){
  .tabs .tab{flex:0 0 auto;white-space:nowrap}
  .file-row{display:grid;grid-template-columns:auto minmax(0,1fr);gap:10px;align-items:center}
  .file-main{grid-column:2}
  .file-name{white-space:normal;overflow:visible;text-overflow:clip;word-break:break-word}
  .file-act{grid-column:1/-1;justify-content:flex-start;padding-left:44px}
  .file-meta{gap:8px}
}

/* ============ 日历里直接新增 ============ */
.mg-add{margin-left:auto;width:18px;height:18px;border-radius:5px;display:grid;
  place-items:center;font-size:12px;line-height:1;color:#9aa5b8;
  opacity:.45;transition:.12s;text-decoration:none}
.mg-day:hover .mg-add{opacity:1;color:var(--primary-d);background:#eef3ff}
.mg-add:hover{background:var(--primary);color:#fff;opacity:1}
.wk-add{margin-left:auto;width:17px;height:17px;border-radius:5px;display:grid;
  place-items:center;font-size:11.5px;color:#9aa5b8;opacity:.45;transition:.12s}
.wk-col:hover .wk-add{opacity:1;color:var(--primary-d);background:#eef3ff}
.wk-add:hover{background:var(--primary);color:#fff;opacity:1}
.dv-head{justify-content:space-between;align-items:center}
.dv-head > div{display:flex;align-items:baseline;gap:10px}

dialog.qa{border:none;border-radius:14px;padding:0;width:min(520px,calc(100vw - 32px));
  box-shadow:0 24px 60px -12px rgba(16,24,40,.32);color:var(--ink);background:#fff}
dialog.qa::backdrop{background:rgba(16,24,40,.38);backdrop-filter:blur(2px)}
.qa-form{padding:20px 22px 16px;display:flex;flex-direction:column;gap:13px}
.qa-head{display:flex;align-items:center;justify-content:space-between;gap:12px}
.qa-head strong{font-size:15.5px}
.qa-x{border:none;background:none;font-size:20px;line-height:1;color:var(--ink-3);
  cursor:pointer;padding:0 2px}
.qa-x:hover{color:var(--ink)}
.qa-form .field{margin:0}
.qa-form .field-row{gap:10px}
.qa-foot{display:flex;align-items:center;justify-content:space-between;gap:10px;
  padding-top:4px;border-top:1px solid var(--line);margin-top:2px;padding-top:13px}
.qa-foot .btn{min-width:92px;justify-content:center}

@media (max-width:760px){
  .mg-add,.wk-add{opacity:1}
  .qa-form .field-row{flex-direction:column;gap:10px}
  .qa-foot .btn{flex:1}
}

/* ============ 资料库 · 库列表 ============ */
.lib-new{display:flex;gap:9px;align-items:center;flex-wrap:wrap;padding:14px 16px;margin-bottom:16px}
.lib-new input:not([type=hidden]){flex:1 1 280px;min-width:0;padding:8px 11px;border:1px solid var(--line-2);
  border-radius:8px;font-size:13.4px;font-family:inherit;background:#fff;color:var(--ink)}
.lib-new input:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-soft)}
.lib-new select{padding:8px 10px;border:1px solid var(--line-2);border-radius:8px;font-size:13.2px;
  font-family:inherit;background:#fff;color:var(--ink)}

.lib-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(292px,1fr));gap:12px}
.lib-card{display:flex;align-items:center;gap:12px;padding:14px 15px;background:var(--surface);
  border:1px solid var(--line);border-radius:12px;transition:.14s;min-width:0}
.lib-card:hover{border-color:#c3d3f5;box-shadow:0 4px 16px -8px rgba(16,24,40,.22);transform:translateY(-1px)}
.lib-ic{width:34px;height:34px;flex:0 0 34px;border-radius:9px;display:grid;place-items:center;
  background:var(--primary-soft);color:var(--primary-d)}
.lib-ic svg{width:19px;height:19px;fill:none;stroke:currentColor;stroke-width:1.6;
  stroke-linecap:round;stroke-linejoin:round}
.lib-body{flex:1;min-width:0}
.lib-body strong{display:block;font-size:13.8px;font-weight:600;white-space:nowrap;
  overflow:hidden;text-overflow:ellipsis}
.lib-meta{display:flex;align-items:center;gap:9px;font-size:11.8px;color:var(--ink-3);margin-top:3px}
.lib-time{font-size:11.3px;color:var(--ink-3);margin-top:2px}
.lib-go{width:15px;height:15px;flex:0 0 15px;fill:none;stroke:#c3cbd9;stroke-width:1.8;
  stroke-linecap:round;stroke-linejoin:round}

/* ============ 资料库 · 库内 ============ */
.upbar{display:grid;grid-template-columns:1fr auto;gap:14px;align-items:center;
  padding:12px 14px;margin-bottom:14px}
.updrop{position:relative;display:flex;align-items:center;gap:10px;flex-wrap:wrap;
  padding:11px 14px;border:1.5px dashed #cfd6e2;border-radius:10px;background:#fbfcfe;
  cursor:pointer;transition:.14s;overflow:hidden}
.updrop:hover{border-color:#a9c2ff;background:#f7faff}
.updrop.over{border-color:var(--primary);background:var(--primary-soft)}
.updrop svg{width:18px;height:18px;flex:0 0 18px;fill:none;stroke:#7f93b8;stroke-width:1.7;
  stroke-linecap:round;stroke-linejoin:round}
.updrop span{font-size:13.4px;font-weight:550;color:var(--ink-2)}
.updrop em{font-size:11.4px;color:var(--ink-3);font-style:normal;flex:1 1 100%;padding-left:28px}
.upinput{position:absolute;inset:0;width:100%;height:100%;opacity:0;cursor:pointer;z-index:2}
.up-opts{display:flex;align-items:center;gap:8px}
.up-opts select{padding:7px 9px;border:1px solid var(--line-2);border-radius:8px;
  font-size:12.6px;font-family:inherit;background:#fff;color:var(--ink);max-width:132px}

.lib-bar{display:flex;align-items:center;justify-content:space-between;gap:12px;
  padding:12px 14px;border-bottom:1px solid var(--line);flex-wrap:wrap}
.lib-search{display:flex;align-items:center;gap:7px;flex:1 1 300px;min-width:0}
.lib-search input{flex:1 1 auto;min-width:0;max-width:320px;padding:7px 11px;
  border:1px solid var(--line-2);border-radius:8px;font-size:13px;font-family:inherit;
  background:#fff;color:var(--ink)}
.lib-search input:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-soft)}
.lib-acts{display:flex;align-items:center;gap:8px}
.import{position:relative}
.import-menu{position:absolute;right:0;top:calc(100% + 6px);z-index:20;min-width:158px;
  background:#fff;border:1px solid var(--line);border-radius:10px;padding:5px;
  box-shadow:0 12px 32px -12px rgba(16,24,40,.3);display:flex;flex-direction:column}
.import-menu button{border:none;background:none;text-align:left;padding:8px 10px;border-radius:7px;
  font-size:13px;font-family:inherit;color:var(--ink-2);cursor:pointer}
.import-menu button:hover{background:var(--primary-soft);color:var(--primary-d)}

.tbl-wrap{overflow-x:auto}
.file-tbl{width:100%;border-collapse:collapse;font-size:13px}
.file-tbl th{text-align:left;font-weight:500;font-size:11.8px;color:var(--ink-3);
  padding:9px 10px;background:#fafbfd;border-bottom:1px solid var(--line);white-space:nowrap}
.file-tbl td{padding:9px 10px;border-bottom:1px solid var(--line);vertical-align:middle}
.file-tbl tr:last-child td{border-bottom:none}
.file-tbl tbody tr:hover{background:#f9fbff}
.file-tbl .c-chk{width:34px;padding-right:0}
.file-tbl .c-chk input{width:14px;height:14px;accent-color:var(--primary);cursor:pointer}
.file-tbl .c-size{width:82px;white-space:nowrap}
.file-tbl .c-who{width:96px;white-space:nowrap}
.file-tbl .c-vis{width:92px;white-space:nowrap}
.file-tbl .c-time{width:96px;white-space:nowrap}
.file-tbl .c-act{width:118px;white-space:nowrap;text-align:right}

.fname{display:flex;align-items:center;gap:9px;min-width:0}
.fn-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fname:hover .fn-text{color:var(--primary-d)}
.fi{width:30px;height:30px;flex:0 0 30px;border-radius:7px;display:grid;place-items:center;
  background:#f2f4f7;color:var(--ink-3);font-size:9.2px;font-weight:700;letter-spacing:.02em}
.fi.pdf{background:#fdeeee;color:#c44b50}
.fi.xls,.fi.xlsx,.fi.csv{background:#e9f7ef;color:#0b7a45}
.fi.doc,.fi.docx{background:#eaf1fd;color:#2a5bc4}
.fi.ppt,.fi.pptx{background:#fdf0e9;color:#c26a2c}
.fi.zip,.fi.rar,.fi.7z{background:#f3f0fb;color:#6a51b8}
.fi.png,.fi.jpg,.fi.jpeg,.fi.gif{background:#fdf5e9;color:#a97a1c}
.fi.folder{background:#eef3ff;color:var(--primary-d)}
.fi.folder svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:1.7;
  stroke-linecap:round;stroke-linejoin:round}

.link{color:var(--primary-d);font-size:12.5px}
.link:hover{text-decoration:underline}
.link-danger{border:none;background:none;padding:0;color:var(--danger);font-size:12.5px;
  font-family:inherit;cursor:pointer;margin-left:10px}
.link-danger:hover{text-decoration:underline}
.c-act form{display:inline}

.tbl-foot{display:flex;align-items:center;justify-content:space-between;gap:12px;
  padding:12px 14px;border-top:1px solid var(--line);flex-wrap:wrap}
.pager{display:flex;align-items:center;gap:6px}
.per-pick{padding:5px 8px;border:1px solid var(--line-2);border-radius:7px;font-size:12.4px;
  font-family:inherit;background:#fff;color:var(--ink-2)}
.pg{width:26px;height:26px;display:grid;place-items:center;border:1px solid var(--line-2);
  border-radius:7px;font-size:14px;color:var(--ink-2);background:#fff}
.pg:hover{border-color:var(--primary);color:var(--primary-d)}
.pg.off{color:#cfd6e2;border-color:var(--line)}
.batchbar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;
  padding:11px 14px;background:#f4f8ff;border-top:1px solid #dce8ff;font-size:13px}
.batchbar b{color:var(--primary-d)}
.batchbar select{padding:5px 8px;border:1px solid var(--line-2);border-radius:7px;
  font-size:12.4px;font-family:inherit;background:#fff;color:var(--ink-2)}

@media (max-width:900px){
  .file-tbl .c-size,.file-tbl .c-who{display:none}
}
@media (max-width:760px){
  .file-tbl .c-vis{display:none}
  .file-tbl .c-chk{width:28px}
  .file-tbl th,.file-tbl td{padding:8px 7px}
  .fi{width:26px;height:26px;flex:0 0 26px}
  .upbar{grid-template-columns:1fr;gap:10px}
  .up-opts{flex-wrap:wrap}
  .updrop em{padding-left:0}
  .file-tbl .c-time{display:none}
  .file-tbl .c-act{width:auto}
  .lib-search input{max-width:none}
  .lib-acts{width:100%;justify-content:flex-end}
  .batchbar{gap:8px}
}

/* ============ 工作台 · 顶部横幅（无人机） ============ */
.hero{
  position:relative;overflow:hidden;border:1px solid #dbe6fb;border-radius:16px;
  background:linear-gradient(112deg,#eff5ff 0%,#f8fbff 48%,#e9f0ff 100%);
  padding:25px 28px 24px;margin-bottom:20px;
  box-shadow:0 1px 2px rgba(16,24,40,.04),0 12px 34px -22px rgba(47,107,255,.55);
}
.hero::before{
  content:"";position:absolute;inset:0;pointer-events:none;
  background-image:radial-gradient(#bed3f7 1.1px,transparent 1.1px);
  background-size:23px 23px;opacity:.5;
  -webkit-mask-image:radial-gradient(130% 100% at 92% 45%,#000 0%,transparent 72%);
  mask-image:radial-gradient(130% 100% at 92% 45%,#000 0%,transparent 72%);
}
.hero-body{position:relative;z-index:1;max-width:660px;padding-right:274px}
.hero-date{font-size:12px;color:#6b83b0;letter-spacing:.06em}
.hero h1{font-size:25px;letter-spacing:-.025em;margin:7px 0 8px;color:#16233c}
.hero-sub{display:flex;align-items:center;flex-wrap:wrap;gap:4px 12px;font-size:13px;color:#5d6e8c}
.hero-sub b{font-weight:600}
.hero-sub .hero-warn{color:var(--danger)}
.hero-sub .hero-today{color:var(--warn)}
.hero-sep{width:1px;height:11px;background:#c9d6ec;display:inline-block}
.hero-acts{display:flex;gap:9px;margin-top:17px}
.hero-acts .btn svg{width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:2;
  stroke-linecap:round;stroke-linejoin:round}
.hero-drone{
  position:absolute;right:18px;top:50%;width:252px;height:177px;
  transform:translateY(-50%);pointer-events:none;
  animation:droneFloat 7s ease-in-out infinite;
}
.hero-drone .hd-blade{fill:#fbfdff;stroke:#a3bde6;stroke-width:1.6}
.hero-drone .hd-motor{fill:#a9c0e5}
.hero-drone .hd-arm{fill:none;stroke:#9db6e0;stroke-width:3.2;stroke-linecap:round}
.hero-drone .hd-hull{fill:#dee9fb;stroke:#7c99d3;stroke-width:2}
.hero-drone .hd-cam{fill:#f8fbff;stroke:#7c99d3;stroke-width:1.9}
.hero-drone .hd-lens{fill:#7c99d3}
.hero-drone .hd-grip{fill:none;stroke:#9ab2da;stroke-width:1.9;stroke-linecap:round}
.hero-drone .hd-shadow{fill:#b9cfee;opacity:.55}
.hero-drone .hd-track{fill:none;stroke:#bcd1f1;stroke-width:1.6;stroke-dasharray:4 8;stroke-linecap:round}
.hero-drone .hd-dot{fill:#b3c9ec}
@keyframes droneFloat{
  0%,100%{transform:translateY(-50%)}
  50%{transform:translateY(calc(-50% - 7px))}
}

/* ============ 工作台 · 四个数字 ============ */
.stat-row{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-bottom:20px}
.s-card{
  display:flex;flex-direction:column;padding:15px 17px 16px;
  background:var(--surface);border:1px solid var(--line);border-radius:12px;
  box-shadow:var(--shadow);transition:border-color .15s,box-shadow .15s,transform .15s;
}
.s-card:hover{border-color:#d9e2f1;box-shadow:0 2px 4px rgba(16,24,40,.04),0 12px 26px -14px rgba(16,24,40,.18);
  transform:translateY(-1px)}
.s-top{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:7px}
.s-label{font-size:12.5px;color:var(--ink-3)}
.s-mid{display:flex;align-items:baseline;gap:3px}
.s-num{font-size:30px;font-weight:680;letter-spacing:-.03em;line-height:1.1;
  font-variant-numeric:tabular-nums}
.s-unit{font-size:11.5px;color:var(--ink-3)}
.s-note{font-size:11.5px;color:var(--ink-3);margin-top:3px}
.s-card.alarm{border-color:#f4d9da;background:linear-gradient(180deg,#fffafa,#fff)}
.s-card.alarm .s-num{color:var(--danger)}
a.s-card:hover .s-label,a.s-card:hover .s-num{color:var(--primary-d)}
a.s-card.alarm:hover .s-num{color:var(--danger)}
.s-ic{width:28px;height:28px;border-radius:8px;display:grid;place-items:center;flex:0 0 28px}
.s-ic svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:1.8;
  stroke-linecap:round;stroke-linejoin:round}
.s-ic.blue{background:#eef3ff;color:#2f6bff}
.s-ic.violet{background:#f3f0ff;color:#6a51d0}
.s-ic.red{background:#fdeeee;color:#d84850}
.s-ic.green{background:#e9f7ef;color:#0f9d58}

/* ============ 工作台 · 部门 / 成员 ============ */
.dept-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}
.dc-foot{display:flex;gap:16px;font-size:12px;color:var(--ink-3);margin-top:2px}
.dc-foot b{margin-left:3px;font-size:12.5px;color:var(--ink);font-weight:650;
  font-variant-numeric:tabular-nums}
.dc-foot em{font-style:normal;color:var(--ink-3)}
.dc-foot .is-over b{color:var(--danger)}
.dc-pct{font-size:13px;font-weight:650;color:var(--primary-d);font-variant-numeric:tabular-nums}
.dc-pct i{font-style:normal;font-size:10.5px;font-weight:600;margin-left:1px}

.member-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(198px,1fr));gap:10px}
.member-card{
  display:flex;flex-direction:column;align-items:stretch;gap:0;
  border:1px solid var(--line);border-radius:11px;padding:12px 13px 10px;
  background:#fff;transition:border-color .14s,box-shadow .14s,background .14s;
}
.mc-top{display:flex;align-items:center;gap:9px;min-width:0}
.mc-nums{display:flex;gap:13px;margin-top:9px;padding-top:8px;border-top:1px dashed var(--line);
  font-size:11.5px;color:var(--ink-3)}
.mc-nums b{font-size:13px;font-weight:650;color:var(--ink);margin-right:2px;
  font-variant-numeric:tabular-nums}
.mc-nums .over b{color:var(--danger)}
.mc-nums .out b{color:var(--warn)}

/* ============ 弹窗（通用） ============ */
dialog.dlg{
  border:none;padding:0;border-radius:16px;width:min(470px,calc(100vw - 26px));
  background:#fff;color:var(--ink);box-shadow:0 30px 72px -22px rgba(16,24,40,.42);
}
dialog.dlg::backdrop{background:rgba(16,24,40,.36)}
.dlg-form{padding:22px 22px 18px;display:flex;flex-direction:column;gap:14px}
.dlg-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}
.dlg-head strong{font-size:16px;letter-spacing:-.012em}
.dlg-head p{font-size:12.3px;color:var(--ink-3);margin-top:3px;line-height:1.5}
.dlg-x{border:none;background:none;font-size:21px;line-height:1;color:#b6bfcd;
  cursor:pointer;padding:0 2px;margin:-3px -2px 0 0}
.dlg-x:hover{color:var(--ink-2)}
.dlg-field{display:flex;flex-direction:column;gap:6px;margin:0}
.dlg-field > span{font-size:12.5px;color:var(--ink-2);font-weight:550}
.dlg-field input:not([type=radio]),.dlg-field select{
  width:100%;padding:9px 12px;border:1px solid var(--line-2);border-radius:9px;
  font-size:13.5px;font-family:inherit;background:#fff;color:var(--ink);
}
.dlg-field input:focus,.dlg-field select:focus{
  outline:none;border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-soft);
}
.dlg-foot{display:flex;justify-content:flex-end;gap:9px;margin-top:3px}
.dlg-foot .btn{min-width:80px}
.btn.danger{background:linear-gradient(180deg,#ef5b60,#dc3f46);color:#fff;
  box-shadow:0 1px 2px rgba(220,63,70,.32),0 8px 18px -10px rgba(220,63,70,.75)}
.btn.danger:hover{background:linear-gradient(180deg,#e95358,#d1373e)}

/* 可见范围四选 */
.vis-choice{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.vc{position:relative;display:block;padding:10px 11px 10px 33px;border:1px solid var(--line-2);
  border-radius:10px;cursor:pointer;transition:.13s;background:#fff}
.vc input{position:absolute;left:11px;top:12px;margin:0;width:14px;height:14px;
  accent-color:var(--primary)}
.vc b{display:block;font-size:13.2px;font-weight:600;line-height:1.4}
.vc em{display:block;font-style:normal;font-size:11.4px;color:var(--ink-3);line-height:1.5}
.vc:hover{border-color:#b9c8e6;background:#fafcff}
.vc:has(input:checked){border-color:var(--primary);background:var(--primary-soft)}
.vc:has(input:checked) b{color:var(--primary-d)}

/* 删除确认 */
.cf-head{display:flex;gap:13px;align-items:flex-start}
.cf-ic{width:38px;height:38px;flex:0 0 38px;border-radius:11px;display:grid;place-items:center;
  background:var(--danger-soft);color:var(--danger)}
.cf-ic svg{width:19px;height:19px;fill:none;stroke:currentColor;stroke-width:1.7;
  stroke-linecap:round;stroke-linejoin:round}
.cf-head strong{font-size:15.5px}
.cf-msg{font-size:13px;color:var(--ink-2);line-height:1.62;margin-top:5px}

/* ============ 资料库 · 上传条 ============ */
.upbar{grid-template-columns:1fr;gap:11px}
.up-opts{display:flex;align-items:center;gap:9px;flex-wrap:wrap}
.opt{display:inline-flex;align-items:center;gap:6px}
.opt > span{font-size:12px;color:var(--ink-3);white-space:nowrap}
.opt select{padding:6px 9px;border:1px solid var(--line-2);border-radius:8px;
  font-size:12.6px;font-family:inherit;background:#fff;color:var(--ink);max-width:176px}
.up-opts > .btn{margin-left:auto}

/* 文件行里的文字按钮 */
.c-act .link,.c-act .link-danger{border:none;background:none;padding:0;
  font-family:inherit;cursor:pointer}
.c-act .link{color:var(--primary-d);font-size:12.5px}
.c-act .link:hover{text-decoration:underline}
.c-act > * + *{margin-left:9px}

@media (max-width:1180px){
  .stat-row{grid-template-columns:repeat(2,1fr)}
  .hero-body{padding-right:214px}
  .hero-drone{width:200px;right:8px}
}
@media (max-width:900px){
  .dept-grid{grid-template-columns:1fr}
}
@media (max-width:760px){
  .hero{padding:20px 18px}
  .hero-body{padding-right:0;max-width:none}
  .hero h1{font-size:21px}
  .hero-drone{display:none}
  .stat-row{grid-template-columns:repeat(2,1fr);gap:10px}
  .s-card{padding:13px 14px}
  .s-num{font-size:26px}
  .member-grid{grid-template-columns:1fr 1fr;gap:9px}
  .member-card{padding:11px 11px 9px}
  .dlg-form{padding:19px 17px 15px}
  .vis-choice{grid-template-columns:1fr}
  .up-opts .opt{flex:1 1 auto}
  .up-opts .opt select{max-width:none;width:100%}
  .up-opts > .btn{margin-left:0;width:100%}
}

/* 按钮里的图标 */
.btn svg{width:14.5px;height:14.5px;fill:none;stroke:currentColor;stroke-width:2;
  stroke-linecap:round;stroke-linejoin:round;flex:0 0 14.5px}

/* 可见范围四种颜色 */
.vis.dept{background:#e9f7ef;color:#0b7a45}
.vis.person{background:#fdf4e3;color:#9a6410}
.lib-ic.company{background:var(--primary-soft);color:var(--primary-d)}
.lib-ic.dept{background:#e9f7ef;color:#0b7a45}
.lib-ic.private{background:#f6f0fb;color:#7a4fbf}
.lib-ic.person{background:#fdf4e3;color:#9a6410}

/* 选中态：:has() 在部分 Chromium 上不刷新，用 JS 打的 .on 兜底 */
.vc.on{border-color:var(--primary);background:var(--primary-soft)}
.vc.on b{color:var(--primary-d)}

.up-opts{gap:14px}

/* 手机上表格只留「名称 + 操作」，名字允许折行 */
@media (max-width:760px){
  .file-tbl .fn-text{white-space:normal;word-break:break-word;line-height:1.4}
  .file-tbl .fname{align-items:flex-start}
  .file-tbl .fi{margin-top:1px}
  .file-tbl .c-act{white-space:nowrap}
  .file-tbl .c-chk{width:26px;padding-right:4px}
}

/* ============ 资料库 · 上传卡片 ============ */
.uploader{display:flex;align-items:center;gap:16px;padding:12px 14px;margin-bottom:14px}
.up-pick{position:relative;display:flex;align-items:center;gap:12px;flex:1 1 auto;min-width:0;
  padding:10px 14px;border:1.5px dashed #d3dae6;border-radius:10px;
  background:linear-gradient(180deg,#fbfcff,#f8fafd);cursor:pointer;transition:.15s}
.up-pick:hover{border-color:#a9c2ff;background:#f7faff}
.up-pick.over{border-color:var(--primary);background:var(--primary-soft)}
.up-pick.has{border-style:solid;border-color:#c9dcff;background:#f6faff}
.up-ic{width:30px;height:30px;flex:0 0 30px;border-radius:8px;display:grid;place-items:center;
  background:#eef3ff;color:var(--primary-d)}
.up-pick.has .up-ic{background:var(--primary);color:#fff}
.up-ic svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:1.9;
  stroke-linecap:round;stroke-linejoin:round}
.up-txt{display:flex;flex-direction:column;min-width:0;line-height:1.45}
.up-txt b{font-size:13.4px;font-weight:600}
.up-txt em{font-style:normal;font-size:11.6px;color:var(--ink-3);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.up-side{display:flex;align-items:center;gap:10px;flex:0 0 auto}
.up-opt{display:inline-flex;flex-direction:column;gap:2px}
.up-opt > span{font-size:10.6px;color:var(--ink-3);letter-spacing:.02em;padding-left:2px}
.up-opt select{padding:6px 8px;border:1px solid var(--line-2);border-radius:8px;
  font-size:12.4px;font-family:inherit;background:#fff;color:var(--ink);max-width:158px}
.up-go{min-width:82px}

/* 指定范围勾选 */
.scope-wrap{margin-top:10px}
.scope-rows{display:flex;flex-direction:column;gap:8px;padding:10px 11px;
  border:1px solid var(--line);border-radius:10px;background:#fafbfe}
.scope-row{display:flex;gap:9px;align-items:flex-start}
.scope-lb{flex:0 0 32px;font-size:11.6px;color:var(--ink-3);padding-top:5px}
.chips{display:flex;flex-wrap:wrap;gap:6px;flex:1 1 auto}
.chip{position:relative;display:inline-flex;align-items:center;cursor:pointer}
.chip input{position:absolute;opacity:0;width:0;height:0;pointer-events:none}
.chip span{display:inline-block;padding:4px 10px;border:1px solid var(--line-2);border-radius:20px;
  font-size:12.2px;color:var(--ink-2);background:#fff;transition:.13s;line-height:1.5}
.chip:hover span{border-color:#b9c8e6;background:#fbfcff}
.chip input:checked + span{border-color:var(--primary);background:var(--primary-soft);
  color:var(--primary-d);font-weight:550}
.chip input:focus-visible + span{box-shadow:0 0 0 3px rgba(47,107,255,.16)}
.scope-none{font-size:12px;color:var(--ink-3)}
.dlg-check{display:flex;align-items:center;gap:8px;margin-top:11px;cursor:pointer;
  font-size:12.6px;color:var(--ink-2)}
.dlg-check input{accent-color:var(--primary);width:14px;height:14px;margin:0}

/* 可见范围徽标补充 */
.vis.custom{background:#fdf4e3;color:#9a6410}
.lib-ic.custom{background:#fdf4e3;color:#9a6410}
.pill.role-sa{background:#fdeeee;color:#b3363b}
.vc.on{border-color:var(--primary);background:var(--primary-soft)}
.vc.on b{color:var(--primary-d)}

/* ============ 权限配置 ============ */
.notice{display:flex;gap:9px;align-items:flex-start;padding:11px 13px;margin-bottom:16px;
  border:1px solid #dbe6ff;background:#f5f9ff;border-radius:10px;font-size:12.8px;
  color:#3c5170;line-height:1.6}
.notice svg{width:16px;height:16px;flex:0 0 16px;margin-top:1px;fill:none;stroke:#5b7fc4;
  stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.role-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;align-items:start}
.role-card{padding:0;display:flex;flex-direction:column}
.role-card .panel-head{padding:13px 15px;border-bottom:1px solid var(--line);margin:0}
.mode-list{display:flex;flex-direction:column;gap:2px;padding:10px 12px}
.mode-item{position:relative;display:block;padding:8px 10px 8px 32px;border-radius:9px;
  cursor:pointer;transition:.12s}
.mode-item:hover{background:#f7f9fd}
.mode-item input{position:absolute;left:10px;top:12px;margin:0;width:14px;height:14px;
  accent-color:var(--primary)}
.mode-item b{display:block;font-size:13px;font-weight:600}
.mode-item em{display:block;font-style:normal;font-size:11.4px;color:var(--ink-3);line-height:1.5}
.mode-item.on{background:var(--primary-soft)}
.mode-item.on b{color:var(--primary-d)}
.role-scope{margin:0 12px 12px}
.role-foot{display:flex;align-items:center;justify-content:space-between;gap:10px;
  padding:11px 14px;border-top:1px solid var(--line);margin-top:auto}
.role-tip{margin-top:14px}
.dept-chips{display:flex;flex-wrap:wrap;align-items:center;gap:8px;padding:4px 2px 2px}
.dept-add{margin-left:auto}

@media (max-width:1100px){ .role-grid{grid-template-columns:1fr} }
@media (max-width:760px){
  .uploader{flex-direction:column;align-items:stretch;gap:10px}
  .up-side{flex-wrap:wrap;gap:8px}
  .up-opt{flex:1 1 42%}
  .up-opt select{max-width:none;width:100%}
  .up-go{width:100%}
  .role-grid{gap:11px}
}

/* 关闭按钮用 SVG，避免字体缺字 */
.dlg-x{display:grid;place-items:center;width:26px;height:26px;border-radius:7px}
.dlg-x svg{width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:2;
  stroke-linecap:round}
.dlg-x:hover{background:#f2f4f8}

/* 三选（超管/总经理没有「本部门」）时最后一项占满一行 */
.vis-choice .vc:last-child:nth-child(odd){grid-column:1 / -1}

/* 上传区：下拉与按钮底部对齐 */
.up-side{align-items:flex-end}
.up-opt select{height:32px}
.up-go{height:32px;padding:0 16px;font-size:12.8px;border-radius:8px}
.up-go:disabled{opacity:.42;cursor:not-allowed;box-shadow:none}
/* ============ 收尾修饰 ============ */
/* 上传按钮禁用态：明显的灰，而不是淡蓝 */
.up-go:disabled{background:#eef1f7;color:#a8b2c2;border:1px solid #e2e7f0;
  box-shadow:none;opacity:1}
/* 桌面端把「放到 / 可见」与选择区隔开 */
@media (min-width:761px){
  .up-side{padding-left:16px;border-left:1px solid var(--line)}
}
/* 手机端表格操作列允许换行，别把文件名挤成一字一行 */
@media (max-width:760px){
  .file-tbl .c-act{white-space:normal;max-width:116px;text-align:left}
  .file-tbl .c-act > *{display:inline-block;margin:0 0 3px 7px}
  .file-tbl .c-act > form{display:inline-block;margin:0 0 3px 7px}
}

/* ============ 登录页 · 深色 ============ */
.login-body{
  min-height:100vh;margin:0;display:grid;place-items:center;padding:44px 20px;
  color:#e9f0f9;
  background:
    radial-gradient(1080px 560px at 16% -12%, #13376a 0%, rgba(19,55,106,0) 62%),
    radial-gradient(880px 520px at 92% 112%, #0b3c54 0%, rgba(11,60,84,0) 60%),
    linear-gradient(180deg,#0a1a2b,#081420);
}
.login-body::before{
  content:"";position:fixed;inset:0;pointer-events:none;z-index:0;
  background-image:
    linear-gradient(rgba(255,255,255,.05) 1px, transparent 1px),
    linear-gradient(90deg, rgba(255,255,255,.05) 1px, transparent 1px);
  background-size:62px 62px;
  -webkit-mask-image:radial-gradient(circle at 50% 40%, #000 0%, rgba(0,0,0,.4) 60%, transparent 84%);
  mask-image:radial-gradient(circle at 50% 40%, #000 0%, rgba(0,0,0,.4) 60%, transparent 84%);
}
.login-body::after{
  content:"";position:fixed;left:50%;top:-180px;width:640px;height:440px;
  transform:translateX(-50%);pointer-events:none;z-index:0;
  background:radial-gradient(closest-side, rgba(47,107,255,.28), transparent);
}

.lg-brand{position:fixed;left:34px;top:28px;display:flex;align-items:center;gap:11px;z-index:3}
.lg-mark{width:34px;height:34px;flex:0 0 34px;border-radius:10px;display:grid;place-items:center;
  background:linear-gradient(180deg,#3d78ff,#2456e0);
  box-shadow:0 10px 22px -10px rgba(47,107,255,.9)}
.lg-mark svg{width:19px;height:19px;fill:none;stroke:#fff;stroke-width:1.6;
  stroke-linecap:round;stroke-linejoin:round}
.lg-brand-text{display:flex;flex-direction:column;line-height:1.25}
.lg-brand-text strong{font-size:14.5px;font-weight:600;letter-spacing:-.01em;color:#fff}
.lg-brand-text span{font-size:11px;color:#8399b3}

.lg-deco{position:fixed;right:26px;bottom:14px;width:320px;height:225px;
  z-index:1;pointer-events:none;animation:lgFloat 9s ease-in-out infinite}
@keyframes lgFloat{0%,100%{transform:translateY(0)}50%{transform:translateY(-10px)}}
.lg-deco .lgd-arm{fill:none;stroke:rgba(140,175,225,.5);stroke-width:1.8}
.lg-deco .lgd-blade{fill:none;stroke:rgba(150,185,235,.38);stroke-width:1.3}
.lg-deco .lgd-motor{fill:rgba(165,198,240,.6);stroke:none}
.lg-deco .lgd-hull{fill:none;stroke:rgba(165,198,240,.55);stroke-width:1.8}
.lg-deco .lgd-cam{fill:none;stroke:rgba(165,198,240,.45);stroke-width:1.4}
.lg-deco .lgd-lens{fill:rgba(120,175,255,.75);stroke:none}
.lg-deco .lgd-grip{fill:none;stroke:rgba(165,198,240,.45);stroke-width:1.6}
.lg-deco .lgd-track{fill:none;stroke:rgba(120,165,235,.4);stroke-width:1.4;stroke-dasharray:4 6}
.lg-deco .lgd-dot{fill:rgba(120,165,235,.5);stroke:none}
.lg-deco .lgd-shadow{fill:rgba(120,165,235,.07);stroke:none}

.login-shell{position:relative;z-index:2;width:100%;max-width:404px;
  display:flex;flex-direction:column;gap:18px}
.lg-card{
  border-radius:18px;padding:30px 30px 24px;
  background:linear-gradient(180deg, rgba(255,255,255,.09), rgba(255,255,255,.045));
  border:1px solid rgba(255,255,255,.14);
  box-shadow:0 30px 70px -28px rgba(0,0,0,.8), inset 0 1px 0 rgba(255,255,255,.09);
  -webkit-backdrop-filter:blur(16px) saturate(120%);
  backdrop-filter:blur(16px) saturate(120%);
}
.lg-head{margin-bottom:20px}
.lg-head h1{font-size:20px;font-weight:600;letter-spacing:-.01em;color:#fff}
.lg-head p{font-size:12.3px;color:#93a9c2;margin-top:5px}
.lg-flash{margin-bottom:14px}
.lg-flash .flash{border-radius:9px;font-size:12.5px}
.lg-flash .flash.error{background:rgba(223,74,80,.15);color:#ffb6b9;
  border-color:rgba(223,74,80,.36)}
.lg-flash .flash.ok{background:rgba(15,157,88,.15);color:#8fe3b6;
  border-color:rgba(15,157,88,.34)}

.lg-field{display:block;margin-bottom:14px}
.lg-field > span{display:block;font-size:12px;color:#a9bdd4;font-weight:550;margin-bottom:6px}
.lg-input{position:relative}
.lg-input > svg{
  position:absolute;left:13px;top:50%;transform:translateY(-50%);
  width:16px;height:16px;fill:none;stroke:#7f93ab;stroke-width:1.7;
  stroke-linecap:round;stroke-linejoin:round;pointer-events:none;
}
.lg-input input{
  width:100%;padding:12px 40px 12px 38px;border-radius:10px;font-size:14px;
  font-family:inherit;color:#eaf1fa;background:rgba(255,255,255,.07);
  border:1px solid rgba(255,255,255,.16);outline:none;
  transition:border-color .15s, box-shadow .15s, background .15s;
}
.lg-input input::placeholder{color:#6b809a}
.lg-input input:focus{border-color:#4d86ff;background:rgba(47,107,255,.12);
  box-shadow:0 0 0 3.5px rgba(47,107,255,.16)}
.lg-eye{position:absolute;right:6px;top:50%;transform:translateY(-50%);
  width:30px;height:30px;display:grid;place-items:center;border:none;background:none;
  border-radius:7px;cursor:pointer;color:#7f93ab}
.lg-eye:hover{color:#c9d8e9;background:rgba(255,255,255,.07)}
.lg-eye svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:1.7;
  stroke-linecap:round;stroke-linejoin:round}
.lg-captcha input{padding-right:114px}
.lg-cap{position:absolute;right:8px;top:50%;transform:translateY(-50%);padding:0;border:1px solid rgba(255,255,255,.16);border-radius:8px;background:rgba(255,255,255,.06);line-height:0;cursor:pointer;overflow:hidden}
.lg-cap svg{display:block;width:92px;height:36px}
.lg-cap:hover{border-color:rgba(255,255,255,.45);background:rgba(255,255,255,.12)}
.lg-cap:hover{background:rgba(47,107,255,.18);color:#fff}

.lg-submit{width:100%;margin-top:6px;padding:12px;border:none;border-radius:10px;
  background:linear-gradient(180deg,#3d78ff,#2456e0);color:#fff;
  font-size:14.5px;font-weight:600;font-family:inherit;letter-spacing:.02em;
  cursor:pointer;box-shadow:0 14px 28px -14px rgba(47,107,255,.95);
  transition:background .16s, transform .1s}
.lg-submit:hover{background:linear-gradient(180deg,#4a83ff,#2a5dea)}
.lg-submit:active{transform:translateY(1px)}
.lg-help{margin-top:16px;text-align:center;font-size:11.8px;color:#7b90a9}
.lg-copy{text-align:center;font-size:11.3px;color:#5f748c;letter-spacing:.01em}

@media (max-width:860px){
  .lg-deco{display:none}
}
@media (max-width:760px){
  .login-body{padding:30px 18px}
  .lg-brand{position:static;justify-content:center;margin-bottom:22px}
  .lg-card{padding:26px 22px 20px;border-radius:16px}
  .lg-head h1{font-size:19px}
}

/* ============ 权限配置：按账号 ============ */
.head-meta{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.tabs2{display:flex;gap:4px;margin:0 0 14px;padding:4px;background:#eef2f9;border-radius:10px;
  width:max-content;max-width:100%}
.tabs2 a{padding:7px 15px;border-radius:8px;font-size:13px;color:var(--ink-2);
  text-decoration:none;font-weight:550;transition:.13s}
.tabs2 a:hover{color:var(--ink)}
.tabs2 a.on{background:#fff;color:var(--primary-d);box-shadow:0 1px 3px rgba(20,40,80,.12)}

.bulk-set{border:1px solid var(--line);border-radius:12px;background:#fff;margin-bottom:16px}
.bulk-set>summary{display:flex;align-items:center;gap:8px;padding:12px 15px;cursor:pointer;
  font-size:13.4px;font-weight:600;list-style:none}
.bulk-set>summary::-webkit-details-marker{display:none}
.bulk-set>summary svg{width:16px;height:16px;stroke:var(--ink-3);fill:none;stroke-width:1.7;
  flex:0 0 16px}
.bulk-set>summary .muted{font-weight:400}
.bulk-set[open]>summary{border-bottom:1px solid var(--line)}
.bulk-set form{padding:12px 15px 0}
.bulk-set .mode-list{padding:10px 0 0}
.bulk-set .bscope{margin:10px 0 0}

.mode-list.mode-grid{display:grid;grid-template-columns:1fr 1fr;gap:4px}
.mode-list.mode-grid .mode-item{padding:8px 10px 8px 30px}
.mode-list.mode-grid .mode-item em{display:none}

.ugroup{margin-bottom:15px}
.ugroup-h{display:flex;align-items:center;gap:8px;font-size:12.4px;color:var(--ink-3);
  font-weight:600;margin:0 0 7px;padding-left:2px;letter-spacing:.02em}
.ugroup-h .count{background:#eef2f9;border-radius:20px;padding:1px 7px;font-size:11px;
  color:var(--ink-3);font-weight:500}
.ulist{list-style:none;margin:0;padding:0;border:1px solid var(--line);border-radius:12px;
  background:#fff;overflow:hidden}
.uitem+.uitem{border-top:1px solid var(--line)}
.udet>summary{display:grid;grid-template-columns:34px minmax(0,1fr) auto auto 52px;gap:12px;
  align-items:center;padding:11px 14px;cursor:pointer;list-style:none;transition:.12s}
.udet>summary::-webkit-details-marker{display:none}
.udet>summary:hover{background:#fafbfe}
.udet[open]>summary{background:#f7f9fd;border-bottom:1px dashed var(--line)}
.uava{width:32px;height:32px;border-radius:50%;background:linear-gradient(135deg,#e9effe,#d7e3ff);
  color:var(--primary-d);display:flex;align-items:center;justify-content:center;
  font-size:13px;font-weight:600}
.umain{display:flex;flex-direction:column;gap:1px;min-width:0}
.umain b{font-size:13.4px;font-weight:600;color:var(--ink)}
.umain em{font-style:normal;font-size:11.6px;color:var(--ink-3);overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap}
.utag{font-size:11.8px;padding:3px 9px;border-radius:20px;background:#f1f4fa;color:var(--ink-2);
  white-space:nowrap}
.utag.own{background:var(--primary-soft);color:var(--primary-d);font-weight:550}
.usrc{font-size:11.4px;color:var(--ink-3);white-space:nowrap}
.usrc.own{color:var(--primary-d)}
.uact{font-size:12.2px;color:var(--primary-d);text-align:right;font-weight:550}
.upanel{background:#fbfcfe}
.upanel .mode-list{padding:8px 12px}
.upanel .udescope{margin:0 12px 10px}

@media (max-width:760px){
  .udet>summary{grid-template-columns:30px minmax(0,1fr) auto;gap:9px;padding:10px 11px}
  .usrc,.uact{display:none}
  .mode-list.mode-grid{grid-template-columns:1fr}
  .mode-list.mode-grid .mode-item em{display:block}
  .tabs2{width:100%}
  .tabs2 a{flex:1;text-align:center;padding:7px 8px}
  .bulk-set form{padding:10px 11px 0}
}
.chips-scroll{max-height:136px;overflow:auto;padding-right:4px}

/* ============ 资料库三级权限 ============ */
.perm-tag{display:inline-block;vertical-align:middle;margin-left:8px;font-size:11.4px;
  font-weight:550;padding:2px 8px;border-radius:20px;letter-spacing:.02em;
  background:#f1f4fa;color:#5b6b82;position:relative;top:-2px}
.perm-tag.edit{background:#eaf1ff;color:var(--primary-d)}
.perm-tag.full{background:#fdf1e3;color:#9a6410}

.mine{font-size:11.4px;padding:1px 7px;border-radius:20px;background:#f1f4fa;color:#5b6b82}
.mine.edit{background:#eaf1ff;color:var(--primary-d)}
.mine.full{background:#fdf1e3;color:#9a6410}

.ro-note{display:flex;align-items:center;gap:9px;padding:13px 16px;font-size:12.8px;
  color:var(--ink-2);background:#f7f9fd;border-style:dashed}
.ro-note svg{width:16px;height:16px;flex:0 0 16px;stroke:var(--ink-3);fill:none;stroke-width:1.7}

.perm-box{margin-top:10px;border:1px solid var(--line);border-radius:10px;
  background:#fafbfe;padding:8px 11px}
.perm-line{display:grid;grid-template-columns:38px minmax(0,1fr) auto;gap:8px;
  align-items:center;padding:4px 0}
.perm-line+.perm-line{border-top:1px dashed var(--line)}
.perm-kind{font-size:11px;color:var(--ink-3);background:#eef2f9;border-radius:5px;
  padding:1px 0;text-align:center}
.perm-nm{font-size:12.4px;color:var(--ink);overflow:hidden;text-overflow:ellipsis;
  white-space:nowrap}
.perm-line select{font-size:12.2px;padding:3px 6px;border:1px solid var(--line-2);
  border-radius:6px;background:#fff;color:var(--ink)}
.field-emo{display:block;font-style:normal;font-size:11.4px;color:var(--ink-3);margin-top:5px}

@media (max-width:760px){
  .perm-line{grid-template-columns:34px minmax(0,1fr) auto}
  .perm-tag{margin-left:6px}
}

/* 权限说明行 + 卡片标签换行 */
.scope-note{margin:11px 0 0;font-size:12.2px;color:var(--ink-3);line-height:1.6}
.scope-note+.scope-wrap{margin-top:7px}
.lib-meta{flex-wrap:wrap;row-gap:3px}
.lib-meta span{white-space:nowrap}
.lib-meta .mine{flex:0 0 auto}

/* ============ 在线表格 ============ */
.sheet-head{margin-bottom:12px}
.sheet-wrap{overflow:auto;max-height:calc(100vh - 300px);padding:0;border-radius:12px}
table.sheet{border-collapse:separate;border-spacing:0;font-size:12.8px;
  width:max-content;min-width:100%;table-layout:fixed}
table.sheet th,table.sheet td{border-right:1px solid var(--line);border-bottom:1px solid var(--line);
  padding:5px 8px;height:30px;min-width:104px;max-width:260px;overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap;vertical-align:middle}
table.sheet thead th{position:sticky;top:0;z-index:3;background:#f2f6fc;font-weight:550;
  color:var(--ink-3);font-size:11.4px;text-align:center;height:28px}
table.sheet th.rn{position:sticky;left:0;z-index:2;background:#f2f6fc;width:46px;
  min-width:46px;max-width:46px;text-align:center;font-size:11.2px;color:var(--ink-3);
  font-weight:500;border-right:1px solid var(--line-2)}
table.sheet thead th.rn{z-index:4}
table.sheet tbody td{background:#fff;cursor:cell}
table.sheet tbody tr:first-child td{background:#f8fbff;font-weight:550;color:var(--ink)}
table.sheet td:focus{outline:2px solid var(--primary);outline-offset:-2px;background:#fbfdff;
  overflow:visible;white-space:pre-wrap;word-break:break-all}
table.sheet td.ro{cursor:default;color:var(--ink-2)}
table.sheet tfoot td,table.sheet tfoot th{position:sticky;bottom:0;z-index:2;
  background:#f5f8fd;color:var(--ink-2);font-size:11.8px;font-weight:550;height:28px}
table.sheet tfoot th.rn{text-align:center;font-size:11.2px;color:var(--ink-3)}
.sheet-tip{margin-top:9px}
#syncState{color:var(--ink-3)}
#syncState.warn{color:#a4630f}

/* 库内：在线表格列表 */
.sheet-list{padding:0;margin-bottom:14px}
.sheet-list-head{display:flex;align-items:center;gap:10px;padding:12px 15px;
  border-bottom:1px solid var(--line)}
.sheet-list-head h2{font-size:13.4px;font-weight:600;margin:0;display:flex;align-items:center;gap:7px}
.sheet-list-head .count{background:#eef2f9;border-radius:20px;padding:1px 7px;
  font-size:11px;color:var(--ink-3);font-weight:500}
.sg-grid{display:flex;flex-wrap:wrap;gap:10px;padding:12px 15px;background:#fff}
.sg-card{display:flex;align-items:center;gap:10px;padding:10px 13px;background:#fff;
  border:1px solid var(--line);border-radius:10px;text-decoration:none;color:inherit;
  transition:.12s;min-width:0;flex:0 1 296px}
.sg-card:hover{border-color:#c3d3f5;background:#fbfdff}
.sg-ic{width:30px;height:30px;flex:0 0 30px;border-radius:8px;background:#eaf6ee;
  color:#2b7a52;display:grid;place-items:center}
.sg-ic svg{width:17px;height:17px;fill:none;stroke:currentColor;stroke-width:1.6;
  stroke-linecap:round;stroke-linejoin:round}
.sg-body{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1 1 auto}
.sg-body b{font-size:13px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sg-body em{font-style:normal;font-size:11.3px;color:var(--ink-3);overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap}
.sg-time{font-size:11px;color:var(--ink-3);flex:0 0 auto}

@media (max-width:760px){
  .sheet-wrap{max-height:calc(100vh - 340px)}
  table.sheet th,table.sheet td{min-width:88px;max-width:150px;padding:4px 6px}
  .sg-card{flex:1 1 100%}
}
/* ============ 手机端适配修正 ============ */
@media (max-width:760px){
  /* 页头：标题一行、操作另起一行，按钮等宽排布 */
  .page-head{flex-direction:column;align-items:stretch;gap:11px}
  .page-head h1{font-size:19.5px;line-height:1.4}
  .page-head .muted{font-size:12.5px;line-height:1.65}
  .head-acts{width:100%;flex-wrap:wrap;gap:8px}
  .head-acts > .btn,.head-acts > form{flex:1 1 auto;min-width:0}
  .head-acts > form{display:flex}
  .head-acts > form .btn{width:100%}
  .head-acts .btn{justify-content:center;padding:8px 11px;font-size:13px}

  /* 任务页：状态页签横向滑动，筛选器两列 */
  .toolbar{gap:9px}
  .tabs{width:100%;overflow-x:auto;scrollbar-width:none;-webkit-overflow-scrolling:touch}
  .tabs::-webkit-scrollbar{display:none}
  .filters{display:grid;width:100%;grid-template-columns:1fr 1fr;gap:8px}
  .filters .select{width:100%;max-width:none}
  .filters .search{grid-column:1/-1;display:flex;gap:8px}
  .filters .search input{width:auto;flex:1 1 auto;min-width:0}
  .filters .search .btn{flex:0 0 auto}

  /* 日历：日期居中、任务点居中横排 */
  .mg-day{min-height:54px;padding:4px 2px 5px;align-items:center;gap:2px}
  .mg-num{width:22px;height:22px;font-size:11.4px}
  .mg-items{justify-content:center;width:100%}

  /* 资料库：操作列两行两列，不再被裁 */
  .file-tbl .c-act{max-width:none;width:108px;white-space:normal;text-align:right}
  .file-tbl .c-act > *{display:inline-block;margin:0 0 2px 7px}
  .file-tbl .c-act > form{display:inline-block;margin:0 0 2px 7px}
  .file-tbl .fn-text{line-height:1.35}
  .lib-meta{gap:6px 9px}

  /* 在线表格工具条 */
  .sheet-head .head-acts{gap:7px}
  .sheet-head .head-acts .btn{font-size:12.4px;padding:7px 9px}
  .sheet-tip{font-size:11.8px;line-height:1.7}
}
@media (max-width:520px){
  .member-grid{grid-template-columns:1fr}
}

/* 本月排期清单：桌面隐藏，手机端显示 */
.mg-agenda{display:none}

/* ============ 手机端适配 v2 ============ */
@media (max-width:760px){

  /* —— 日历：日历主体在前，筛选侧栏挪到下方 —— */
  .cal-layout{display:flex;flex-direction:column;gap:12px}
  .cal-main{order:1;width:100%;padding:12px 10px 10px}
  .cal-side{order:2;position:static;width:100%;gap:10px}
  .cal-side .mini-cal{display:none}
  .cal-side-block{background:#fff;border:1px solid var(--line);border-radius:11px;padding:10px 11px}
  .csb-title{margin-bottom:7px}

  .cal-bar{gap:8px;margin-bottom:10px}
  .cal-nav{gap:6px;flex-wrap:wrap}
  .cal-label{font-size:13.2px}
  .cal-tools{gap:7px}
  .cal-toggle{font-size:12px}

  /* 月视图：格子里只留日期 + 状态圆点 */
  .month-grid{border-radius:8px}
  .mg-dow{padding:6px 0;font-size:10.8px}
  .mg-day{min-height:50px;padding:3px 1px 2px;align-items:center;gap:0}
  .mg-top{justify-content:center;gap:2px;width:100%}
  .mg-num{width:27px;height:27px;font-size:12.2px;font-weight:500}
  .mg-n{display:none}
  .mg-add{display:none}
  .mg-items{flex-direction:row;justify-content:center;gap:3px;flex-wrap:nowrap;
    max-height:9px;overflow:hidden;width:100%}
  .cal-chip{width:6px;height:6px;flex:0 0 6px;padding:0;border-radius:50%;
    background:transparent!important;overflow:hidden}
  .cal-chip > span{display:none}
  .cal-chip .chip-dot{width:6px;height:6px;flex:0 0 6px}
  .mg-more{display:none}

  /* 本月排期清单（桌面隐藏） */
  .mg-agenda{display:block;margin-top:13px;border-top:1px solid var(--line);padding-top:11px}
  .mga-day{display:flex;gap:9px;padding:7px 0;border-bottom:1px dashed var(--line)}
  .mga-day:last-child{border-bottom:none}
  .mga-date{flex:0 0 40px;display:flex;flex-direction:column;align-items:center;gap:1px}
  .mga-date b{font-size:15px;font-weight:600;color:var(--ink);line-height:1.1;
    font-variant-numeric:tabular-nums}
  .mga-date span{font-size:10.4px;color:var(--ink-3)}
  .mga-date.today b{color:#fff;background:var(--primary);width:24px;height:24px;
    border-radius:50%;display:grid;place-items:center;font-size:13px}
  .mga-items{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;gap:5px}
  .mga-items .cal-card{padding:7px 9px}
  .mga-empty{margin:14px 0 4px;text-align:center;font-size:12.6px;color:var(--ink-3)}

  /* 周视图：七列在手机上立不起来，改成按天竖排 */
  .week-grid{display:block;border:none;background:transparent;border-radius:0}
  .wk-col{min-height:0;border:1px solid var(--line);border-radius:10px;
    margin-bottom:9px;background:#fff;overflow:hidden}
  .wk-col:last-child{margin-bottom:0}
  .wk-col.today{border-color:#bcd2ff;background:#f9fcff}
  .wk-head{padding:8px 10px 7px;align-items:center;background:#fafbfd}
  .wk-head span{font-size:11.4px}
  .wk-date{font-size:14px}
  .wk-add{margin-left:auto;font-size:15px;padding:0 6px}
  .wk-body{padding:8px;gap:6px;min-height:0}
  .wk-empty{display:none}

  /* —— 任务页：筛选器排列收紧 —— */
  .filters{grid-template-columns:1fr 1fr;gap:8px}
  .filters > .select{height:36px;font-size:13px}
  .filters > .select:nth-of-type(3){grid-column:1/-1}
  .filters .search input{height:36px}
  .filters .search .btn{height:36px;padding:0 15px}
  .tabs .tab{padding:6px 12px;white-space:nowrap}

  /* —— 资料库内页：手机上没有拖拽 —— */
  .up-pick{flex-direction:column;align-items:flex-start;gap:6px;padding:12px 13px;text-align:left}
  .up-txt em{white-space:normal;line-height:1.5}
  .up-side{flex-wrap:wrap;gap:8px;width:100%}
  .up-opt{flex:1 1 46%}
  .up-opt select{width:100%;max-width:none}
  .up-go{flex:0 0 100%;width:100%;height:36px}

  /* —— 在线表格：格子收窄，一屏能多看一列 —— */
  .sheet-wrap{max-height:calc(100vh - 260px);border-radius:10px}
  table.sheet{font-size:12.2px}
  table.sheet th,table.sheet td{padding:4px 6px;min-width:88px;max-width:200px;height:32px}
  table.sheet th.rn{width:38px;min-width:38px;max-width:38px}
  .sheet-tip{font-size:11.6px;line-height:1.75}

  /* —— 工作台：成员卡、部门卡铺满 —— */
  .member-grid{grid-template-columns:1fr}
  .stat-row{gap:10px}
}

/* ============ 手机端适配 v3 ============ */
/* 手机顶栏：默认不显示 */
.m-head{display:none}

@media (max-width:900px){
  .m-head{
    display:flex;align-items:center;justify-content:space-between;gap:10px;
    position:sticky;top:0;z-index:40;margin:-22px -18px 14px;padding:9px 16px;
    background:rgba(255,255,255,.95);backdrop-filter:blur(12px);
    border-bottom:1px solid var(--line);
  }
  .mh-brand{display:flex;align-items:center;gap:8px;text-decoration:none;color:var(--ink);min-width:0}
  .mh-mark{width:26px;height:26px;border-radius:7px;flex:0 0 26px;display:grid;place-items:center;
    background:linear-gradient(150deg,#4a80ff,#2050dc);
    box-shadow:0 2px 7px rgba(47,107,255,.3),inset 0 1px 0 rgba(255,255,255,.24)}
  .mh-mark svg{width:16px;height:16px;fill:none;stroke:#fff;stroke-width:1.5;
    stroke-linecap:round;stroke-linejoin:round}
  .mh-brand b{font-size:14px;font-weight:650;letter-spacing:.01em;white-space:nowrap}
  .mh-right{display:flex;align-items:center;gap:9px;flex:0 0 auto}
  .mh-me{font-size:12.4px;color:var(--ink-2);max-width:90px;overflow:hidden;
    text-overflow:ellipsis;white-space:nowrap}
  .mh-pwd{font-size:12.2px;color:var(--ink-3);padding:3px 9px;border:1px solid var(--line-2);
    border-radius:7px;text-decoration:none;transition:color .15s, border-color .15s}
  .mh-pwd:hover{color:var(--primary-d);border-color:var(--primary)}
  .mh-out{font-size:12.2px;color:var(--ink-3);padding:3px 9px;border:1px solid var(--line-2);
    border-radius:20px;line-height:1.5}
  .mh-out:hover{color:var(--danger);border-color:#f0c9c9}
}

@media (max-width:760px){
  /* 周视图：没有任务的那天只留日期一行 */
  .wk-body:has(.wk-empty){display:none}

  /* 任务列表：把宽度让给标题 */
  .grid .c-due{width:64px}
  .grid .c-status{width:66px}
  .grid .c-status .pill{font-size:10.8px;padding:2px 5px}
  .grid .cell-title{font-size:13.2px;line-height:1.45}
  .grid .self-mark{font-size:10px;padding:0 4px}

  /* 资料库文件行：操作列收窄 */
  .file-tbl .c-act{max-width:98px;font-size:11.8px}
  .file-tbl .c-act > *{margin:0 0 1px 6px}
  .file-tbl .c-act > form{display:inline-block;margin:0 0 1px 6px}
  .link,.link-danger{font-size:11.8px}
}

/* ============ 手机端适配 v4 ============ */
/* 人员卡片列表：桌面隐藏 */
.u-list{display:none}

@media (max-width:760px){
  /* 人员管理：表格换成卡片 */
  .users-grid{display:none}
  .u-list{display:flex;flex-direction:column;gap:9px}
  .u-card{border:1px solid var(--line);border-radius:11px;padding:11px 12px;background:#fff}
  .u-top{display:flex;align-items:center;gap:9px}
  .u-top .avatar.sm{flex:0 0 auto}
  .u-id{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;line-height:1.35}
  .u-id strong{font-size:14px;font-weight:600}
  .u-id span{font-size:11.6px;color:var(--ink-3);overflow:hidden;
    text-overflow:ellipsis;white-space:nowrap}
  .u-top .pill{flex:0 0 auto;font-size:11px;padding:2px 7px}
  .u-meta{display:flex;align-items:center;flex-wrap:wrap;gap:6px 9px;margin:8px 0 0;font-size:12px}
  .u-act{display:flex;align-items:center;gap:8px;margin-top:9px;padding-top:9px;
    border-top:1px dashed var(--line)}
  .u-act form{display:flex;align-items:center;gap:6px;min-width:0}
  .u-act form.mini{flex:1 1 auto}
  .u-act input{flex:1 1 auto;min-width:0;height:32px;padding:0 9px;font-size:12.6px;
    border:1px solid var(--line-2);border-radius:8px;font-family:inherit}
  .u-act .btn{height:32px;padding:0 11px;font-size:12.4px;white-space:nowrap}

  /* 资料库上传区：手机上不靠拖拽，收成一行 */
  .up-pick{flex-direction:row;align-items:center;gap:11px;padding:12px 13px}
  .up-txt em{display:none}
  .up-txt::after{content:"支持多选，选好再点上传";font-size:11.6px;color:var(--ink-3);margin-top:1px}
  .up-txt b{font-size:13.6px}

  /* 文件行操作：右对齐、按需换行 */
  .file-tbl .c-act{width:80px;max-width:80px;display:flex;flex-wrap:wrap;
    justify-content:flex-end;gap:2px 6px}
  .file-tbl .c-act > *{margin:0}
  .file-tbl .c-act > form{display:inline-flex;margin:0}

  /* 月视图格子再收一点 */
  .mg-day{min-height:46px}
}

/* 月视图行高：压过 .month-grid .mg-day 的 70px */
@media (max-width:760px){
  .month-grid .mg-day{min-height:56px}
}

/* iOS 聚焦时输入框自动放大：把这些常用输入框提到 16px */
@media (max-width:760px){
  .field input,.field select,.field textarea,
  .filters .search input,.up-opt select,.lib-search input,
  .cal-pick select,.qa input,.qa select,.qa textarea{font-size:16px}
}

/* 侧栏底部：退出按钮别被挤成两行 */
.sidebar-foot .me{flex:1 1 auto}
.logout{flex:0 0 auto;white-space:nowrap;padding:2px 0}
.me-links{flex:0 0 auto;display:flex;flex-direction:column;align-items:flex-end;gap:2px}

/* ============ AI 助手 ============ */
.ai-wrap{display:flex;gap:14px;height:calc(100vh - 132px);min-height:480px}
.ai-side{
  width:256px;flex:0 0 256px;display:flex;flex-direction:column;
  background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);
  padding:12px 10px;overflow:hidden;
}
.ai-new{margin-bottom:10px}
.ai-new .btn{width:100%;justify-content:center}
.ai-find input{
  width:100%;padding:7px 10px;font-size:13px;border:1px solid var(--line-2);
  border-radius:9px;background:#fafbfd;color:var(--ink);outline:none;
}
.ai-find input:focus{border-color:var(--primary);background:#fff;box-shadow:0 0 0 3px rgba(47,107,255,.12)}
.ai-list{flex:1;overflow-y:auto;margin-top:8px;padding-right:2px}
.ai-grp{margin-bottom:10px}
.ai-grp-t{font-size:11.5px;color:var(--ink-3);padding:4px 6px}
.ai-item{
  display:flex;align-items:center;gap:4px;padding:7px 8px;border-radius:9px;
  color:var(--ink-2);font-size:13px;cursor:pointer;
}
.ai-item:hover{background:#f4f6fa}
.ai-item.on{background:var(--primary-soft);color:var(--primary-d);font-weight:550}
.ai-item-t{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ai-item-x{
  flex:0 0 auto;width:22px;height:22px;display:flex;align-items:center;justify-content:center;
  border:0;background:transparent;border-radius:6px;cursor:pointer;opacity:0;transition:opacity .12s;
}
.ai-item:hover .ai-item-x{opacity:1}
.ai-item-x:hover{background:#e7ebf3}
.ai-item-x svg{width:14px;height:14px;fill:currentColor;stroke:none}
.ai-list-empty{padding:18px 8px;text-align:center;font-size:12.5px;color:var(--ink-3)}
/* ---------- 会话重命名：名称原地变输入框 ---------- */
.ai-item{position:relative}
/* 原名用 visibility 隐藏而不是 display:none，保证行高和行宽一点都不变，
   输入框用绝对定位精确盖在原位置，视觉上就是"文字变成了输入框" */
.ai-item-input{
  position:absolute;left:3px;right:2px;top:50%;transform:translateY(-50%);
  height:26px;box-sizing:border-box;
  font:inherit;font-size:13px;line-height:24px;color:var(--ink);
  background:var(--surface);border:1px solid var(--primary);border-radius:6px;
  padding:0 3px;outline:none;
  box-shadow:0 0 0 3px var(--primary-soft);
}
.ai-item-input::selection{background:rgba(47,107,255,.18)}
.ai-item.editing .ai-item-t{visibility:hidden}
.ai-item.editing{cursor:default}
.ai-item.editing .ai-item-x{display:none}

/* ---------- 会话操作菜单（替代浏览器 prompt） ---------- */
.ai-menu{
  position:fixed;z-index:9000;min-width:112px;padding:4px;
  background:var(--surface);border:1px solid var(--line-2);border-radius:10px;
  box-shadow:0 12px 30px -12px rgba(16,24,40,.30), 0 2px 6px rgba(16,24,40,.06);
  display:flex;flex-direction:column;gap:1px;
}
.ai-menu button{
  border:0;background:transparent;text-align:left;font:inherit;
  font-size:13px;color:var(--ink-2);padding:7px 10px;border-radius:6px;cursor:pointer;
  white-space:nowrap;
}
.ai-menu button:hover{background:#f4f6fa;color:var(--ink)}
.ai-menu button.danger{color:var(--danger)}
.ai-menu button.danger:hover{background:var(--danger-soft)}
.ai-side-foot{
  border-top:1px solid var(--line);padding:9px 6px 2px;display:flex;gap:6px;
  align-items:center;font-size:12px;color:var(--ink-3);
}
.ai-side-foot b{color:var(--ink-2);font-weight:600}
.ai-drawer-x{display:none}

.ai-main{
  flex:1;min-width:0;display:flex;flex-direction:column;overflow:hidden;
  background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);
}
.ai-head{
  display:flex;align-items:center;gap:10px;padding:9px 14px;
  border-bottom:1px solid var(--line);background:#fcfdff;
}
.ai-drawer-btn{
  display:none;border:1px solid var(--line-2);background:#fff;border-radius:8px;
  width:32px;height:30px;align-items:center;justify-content:center;cursor:pointer;
}
.ai-drawer-btn svg{width:16px;height:16px;fill:none;stroke:var(--ink-2);stroke-width:1.8;stroke-linecap:round}
.ai-tabs{display:flex;gap:6px;flex-wrap:wrap;min-width:0}
.ai-tab-f{display:inline}
.ai-tab{
  border:1px solid var(--line-2);background:#fff;color:var(--ink-2);
  padding:5px 11px;border-radius:999px;font-size:12.5px;cursor:pointer;font-family:inherit;
}
.ai-tab:hover{border-color:#c3c9d4;color:var(--ink)}
.ai-tab.on{background:var(--primary);border-color:var(--primary);color:#fff;font-weight:550}
.ai-tab i{
  font-style:normal;font-size:11px;margin-left:5px;opacity:.75;
  background:rgba(255,255,255,.25);border-radius:6px;padding:0 4px;
}
.ai-tab:not(.on) i{background:#eef1f7;color:var(--ink-3)}
.ai-state{margin-left:auto;display:flex;align-items:center;gap:8px}
.ai-off{font-size:12px;color:var(--danger);background:var(--danger-soft);padding:2px 8px;border-radius:6px}
.ai-icon{
  border:1px solid var(--line-2);background:#fff;border-radius:8px;width:30px;height:30px;
  display:flex;align-items:center;justify-content:center;cursor:pointer;
}
.ai-icon:hover{border-color:#c3c9d4}
.ai-icon svg{width:15px;height:15px;fill:none;stroke:var(--ink-2);stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}

.ai-msgs{flex:1;overflow-y:auto;padding:20px 22px;display:flex;flex-direction:column;gap:16px}
.ai-row{display:flex;gap:9px;align-items:flex-start;max-width:100%}
.ai-row.me{flex-direction:row;justify-content:flex-end}
.ai-av{
  flex:0 0 auto;width:28px;height:28px;border-radius:9px;display:flex;align-items:center;
  justify-content:center;font-size:12.5px;font-weight:600;background:#e8edf7;color:#44506a;
}
.ai-av.bot{background:var(--primary-soft);color:var(--primary-d)}
.ai-av.bot svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round}
.ai-col{min-width:0;max-width:78%}
.ai-bubble{
  background:#f6f8fc;border:1px solid #eef1f7;border-radius:12px;padding:10px 13px;
  font-size:13.5px;line-height:1.75;word-break:break-word;
}
.ai-bubble p{margin:0 0 6px}
.ai-bubble p:last-child{margin-bottom:0}
.ai-bubble h3{font-size:14px;margin:8px 0 4px}
.ai-bubble h4{font-size:13.5px;margin:8px 0 4px}
.ai-bubble code{background:#e9eef8;border-radius:4px;padding:1px 4px;font-size:12.5px}
.ai-bubble .ai-code{
  background:#0f172a;color:#e6edf7;border-radius:8px;padding:10px 12px;overflow-x:auto;
  font-size:12.5px;line-height:1.6;margin:8px 0;white-space:pre-wrap;
}
.ai-bubble .ai-li{padding-left:2px}
.ai-bubble.bad{background:var(--danger-soft);border-color:#f6dcde;color:#9c3136}
.ai-row.me .ai-bubble{background:var(--primary);border-color:var(--primary);color:#fff}
.ai-bubble.wait{display:flex;align-items:center;gap:8px;color:var(--ink-2)}
.ai-wait-t{font-size:12.5px}
.ai-dots{display:inline-flex;gap:3px}
.ai-dots i{width:5px;height:5px;border-radius:50%;background:var(--primary);opacity:.35;animation:aiDot 1.1s infinite}
.ai-dots i:nth-child(2){animation-delay:.16s}
.ai-dots i:nth-child(3){animation-delay:.32s}
@keyframes aiDot{0%,100%{opacity:.25;transform:translateY(0)}45%{opacity:1;transform:translateY(-2px)}}
.ai-meta{font-size:11.5px;color:var(--ink-3);margin-top:4px;padding-left:2px}

.ai-blank{margin:auto;text-align:center;padding:20px;max-width:520px}
.ai-blank-ic{
  width:46px;height:46px;margin:0 auto 12px;border-radius:14px;background:var(--primary-soft);
  display:flex;align-items:center;justify-content:center;
}
.ai-blank-ic svg{width:22px;height:22px;fill:none;stroke:var(--primary-d);stroke-width:1.6;stroke-linecap:round}
.ai-blank h2{font-size:16px;margin-bottom:4px}
.ai-blank p{font-size:12.5px;margin-bottom:16px}
.ai-chips{display:flex;flex-direction:column;gap:8px}
.ai-chip{
  border:1px solid var(--line-2);background:#fff;border-radius:10px;padding:9px 12px;
  font-size:12.5px;color:var(--ink-2);cursor:pointer;text-align:left;font-family:inherit;
}
.ai-chip:hover{border-color:var(--primary);color:var(--primary-d);background:var(--primary-soft)}

.ai-compose{padding:12px 16px 10px;border-top:1px solid var(--line);background:#fff}
.ai-box{
  display:flex;align-items:flex-end;gap:8px;border:1px solid var(--line-2);border-radius:12px;
  padding:7px 8px 7px 7px;background:#fff;
}
.ai-box:focus-within{border-color:var(--primary);box-shadow:0 0 0 3px rgba(47,107,255,.10)}
.ai-box textarea{
  flex:1;border:0;outline:none;resize:none;font-size:13.5px;line-height:1.7;
  font-family:inherit;color:var(--ink);max-height:160px;padding:4px 0;background:transparent;
}
.ai-send{
  flex:0 0 auto;width:32px;height:32px;border-radius:9px;border:0;background:var(--primary);
  display:flex;align-items:center;justify-content:center;cursor:pointer;
}
.ai-send svg{width:17px;height:17px;fill:none;stroke:#fff;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.ai-send:hover{background:var(--primary-d)}
.ai-send[disabled]{opacity:.5;cursor:default}
.ai-hint{
  display:flex;justify-content:space-between;gap:10px;font-size:11.5px;
  color:var(--ink-3);padding:6px 4px 0;
}

/* ---- 对话框附件 ---- */
.ai-files{display:none;flex-wrap:wrap;gap:6px;padding:0 2px 8px}
.ai-files.on{display:flex}
.ai-file{
  display:inline-flex;align-items:center;gap:5px;max-width:250px;
  border:1px solid var(--line-2);background:#fff;border-radius:8px;
  padding:4px 6px 4px 7px;font-size:12px;color:var(--ink-2);gap:6px;
}
.ai-file svg{width:13px;height:13px;flex:0 0 auto;fill:none;stroke:var(--ink-3);stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
.ai-file-n{max-width:150px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--ink)}
.ai-file-s{color:var(--ink-3);font-size:11px;flex:0 0 auto}
.ai-file.wait{opacity:.7}
.ai-file-x{
  flex:0 0 auto;width:16px;height:16px;border:0;border-radius:4px;background:transparent;
  color:var(--ink-3);font-size:14px;line-height:1;cursor:pointer;padding:0;
}
.ai-file-x:hover{background:#eef1f7;color:var(--ink)}
.ai-plus{
  flex:0 0 auto;width:32px;height:32px;border-radius:9px;border:1px solid var(--line-2);
  background:#fff;color:var(--ink-2);display:flex;align-items:center;justify-content:center;
  cursor:pointer;transition:border-color .12s,color .12s,background .12s;
}
.ai-plus svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
.ai-plus:hover{border-color:var(--primary);color:var(--primary-d);background:var(--primary-soft)}
.ai-compose.drag .ai-box{
  border-color:var(--primary);border-style:dashed;background:var(--primary-soft);
  box-shadow:0 0 0 3px rgba(47,107,255,.10);
}
.ai-bfiles{display:flex;flex-wrap:wrap;gap:5px;margin-bottom:6px}
.ai-bfile{
  display:inline-flex;align-items:center;gap:4px;max-width:100%;
  background:rgba(255,255,255,.20);border-radius:6px;padding:2px 7px;font-size:12px;line-height:1.6;
}
.ai-bfile svg{width:12px;height:12px;flex:0 0 auto;fill:none;stroke:currentColor;stroke-width:1.7;opacity:.9}
.ai-bfile b{font-weight:500;max-width:170px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ai-bfile i{font-style:normal;opacity:.75;font-size:11px;flex:0 0 auto;margin-left:3px}
/* AI 回复里回传的成果附件（浅色区域，可点击下载） */
.ai-outfiles{margin-top:6px}
.ai-outfiles .ai-bfile{
  background:var(--surface);border:1px solid var(--line);color:var(--ink);text-decoration:none;
  cursor:pointer;transition:border-color .15s, background .15s;
}
.ai-outfiles .ai-bfile:hover{border-color:var(--primary);background:var(--primary-soft)}
.ai-outfiles .ai-bfile svg{stroke:var(--primary)}
.ai-mask{display:none}

/* ============ AI 后台 ============ */
.ai-cfg-form{display:flex;flex-wrap:wrap;align-items:flex-end;gap:14px}
.ai-cfg-form .field{margin-bottom:0;min-width:120px}
.ai-cfg-form .field input{width:100%}
.ai-switch{display:inline-flex;align-items:center;gap:7px;font-size:13px;color:var(--ink-2);cursor:pointer}
.ai-switch input{width:16px;height:16px;accent-color:var(--primary)}
.ai-switch.sm{font-size:12px;margin-left:auto}
.ai-tabbar{display:flex;gap:6px;margin:18px 0 14px}
.ai-tabbar a{
  padding:6px 14px;border-radius:999px;font-size:13px;color:var(--ink-2);
  background:#fff;border:1px solid var(--line-2);
}
.ai-tabbar a.on{background:var(--primary);border-color:var(--primary);color:#fff;font-weight:550}
.ai-agents-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(420px,1fr));gap:16px;align-items:start}
.ai-agent-card{margin-bottom:0}
.ai-agent-body{padding-top:2px}
.ai-agent-foot{display:flex;align-items:center;gap:10px;flex-wrap:wrap;border-top:1px solid var(--line);padding-top:12px}
.ai-agent-foot .btn.primary{margin-left:auto}
.ai-test-out{font-size:12px;color:var(--ink-3);flex:1;min-width:120px}
.ai-test-out.ok{color:var(--ok)}
.ai-test-out.bad{color:var(--danger)}
.field-row2{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.ai-perm-table td{vertical-align:middle}
.ai-perm-cell{display:flex;align-items:center;gap:6px;justify-content:center}
.ai-perm-cell input[type=checkbox]{width:15px;height:15px;accent-color:var(--primary)}
.ai-quota-in{width:52px;padding:3px 6px;font-size:12px;border:1px solid var(--line-2);border-radius:6px;text-align:center}
.ai-perm-used{font-size:11px;color:var(--ink-3);white-space:nowrap}
.ai-perm-foot{margin-top:14px;display:flex;justify-content:flex-end}
.ai-stat-grid{display:grid;grid-template-columns:repeat(6,1fr);gap:12px;margin-bottom:16px}
.ai-stat{
  background:var(--surface);border:1px solid var(--line);border-radius:12px;
  padding:13px 14px;display:flex;flex-direction:column;gap:2px;
}
.ai-stat b{font-size:20px;letter-spacing:-.02em}
.ai-stat span{font-size:12px;color:var(--ink-3)}
.ai-recent{display:flex;flex-direction:column;gap:10px;max-height:520px;overflow-y:auto}
.ai-rec-item{border:1px solid var(--line);border-radius:10px;padding:10px 12px}
.ai-rec-item.bad{border-color:#f6dcde;background:#fefafa}
.ai-rec-top{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:4px}
.ai-rec-top b{font-size:12.5px}
.ai-rec-text{font-size:12.5px;color:var(--ink-2);line-height:1.65;white-space:pre-wrap}

@media (max-width:1180px){
  .ai-stat-grid{grid-template-columns:repeat(3,1fr)}
  .ai-agents-grid{grid-template-columns:1fr}
}
@media (max-width:760px){
  .ai-wrap{height:auto;min-height:0;display:block}
  .ai-side{
    position:fixed;left:0;top:0;bottom:0;width:282px;z-index:80;border-radius:0;
    transform:translateX(-105%);transition:transform .22s ease;box-shadow:0 0 40px rgba(16,24,40,.18);
  }
  .ai-side.open{transform:none}
  .ai-drawer-x{
    display:inline-block;border:1px solid var(--line-2);background:#fff;border-radius:6px;
    font-size:11.5px;padding:2px 8px;color:var(--ink-2);cursor:pointer;margin-right:2px;
  }
  .ai-mask{position:fixed;inset:0;background:rgba(16,24,40,.36);z-index:70;display:none}
  .ai-mask.on{display:block}
  .ai-main{height:calc(100vh - 148px);min-height:420px}
  .ai-drawer-btn{display:flex}
  .ai-msgs{padding:14px 12px;gap:13px}
  .ai-col{max-width:86%}
  .ai-bubble{font-size:13.5px;padding:9px 11px}
  .ai-box textarea{font-size:16px}
  .ai-cfg-form{gap:10px}
  .ai-cfg-form .field{min-width:0;flex:1 1 46%}
  .ai-stat-grid{grid-template-columns:repeat(2,1fr)}
  .ai-perm-table .ai-perm-cell{flex-direction:column;gap:2px}
  .field-row2{grid-template-columns:1fr}
}

/* 7 项底部导航的收口（超管多了 AI 入口） */
@media (max-width:900px){
  .mobile-nav{gap:2px}
  .mobile-nav a{flex:1 1 0;min-width:0;padding:6px 1px;font-size:10px}
  .mobile-nav a span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}
  .mobile-nav svg{width:19px;height:19px}
}

/* 手机端 AI 配置细节 */
.ai-perm-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch}
.ai-perm-table{min-width:520px}
@media (max-width:760px){
  .ai-cfg-form{display:grid;grid-template-columns:1fr 1fr;align-items:end;gap:10px}
  .ai-cfg-form .ai-switch{grid-column:1/-1}
  .ai-cfg-form .field{min-width:0}
  .ai-cfg-form .btn{grid-column:1/-1;width:100%}
  .ai-perm-table{min-width:560px}
  .ai-perm-cell{gap:4px}
}

@media (max-width:760px){
  .ai-perm-wrap{overflow-x:visible}
  .ai-perm-table{min-width:0}
  .ai-perm-table .ai-perm-used{display:none}
  .ai-perm-table .avatar{display:none}
  .ai-perm-table .cell-sub{display:none}
  .ai-perm-table th,.ai-perm-table td{padding:7px 3px;font-size:12.5px}
  .ai-perm-table .cell-title{font-size:12.5px}
  .ai-perm-cell{gap:3px}
  .ai-quota-in{width:38px;padding:2px 2px;font-size:11.5px}
}
/* ---------- 任务：状态锁 / 核实 / 删除审计 ---------- */
.tag.warn{background:var(--warn-soft);color:#8a5a0c}
.tag.ok{background:var(--ok-soft);color:#0b7a45}
.lock-tip{
  font-size:12.2px;line-height:1.65;color:var(--ink-3);background:#fafbfd;
  border:1px dashed var(--line-2);border-radius:8px;padding:8px 10px;margin:6px 0 0;
}
.lock-tip.ok{background:#f3fbf7;border-color:#d6eadf;color:#2b6b4c}
.return-note{
  background:#fdf5f1;border:1px solid #f0d8cc;border-radius:8px;
  padding:9px 11px;margin:0 0 10px;font-size:12.6px;line-height:1.6;color:#7c3a1e;
}
.return-note b{font-weight:500;display:block;margin-bottom:2px}
.return-note em{font-style:normal;color:#a06a4e;font-size:11.8px}
.return-note p{margin:5px 0 0;color:#5d4a40}
.cell-sub.warn{color:#9a6413}
.head-acts{display:flex;gap:8px;flex-wrap:wrap;justify-content:flex-end}
.table-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch}
.audit-grid .c-act{width:80px;text-align:right}
.audit-grid .c-due{width:96px}
.mono{
  font-family:ui-monospace,SFMono-Regular,Menlo,monospace;
  font-variant-numeric:tabular-nums;font-size:12px;color:var(--ink-3);
}
@media (max-width:760px){
  .audit-grid{min-width:600px}
  .lock-tip{font-size:12.6px}
  .actions .btn{font-size:14px}
}

.audit-grid .c-who,.audit-grid .c-due{white-space:nowrap}
.audit-grid th.c-act{text-align:right}


/* ============ 消息 / 子项 / 附件 ============ */
.nav-badge{
  margin-left:auto; min-width:18px; height:18px; padding:0 5px; border-radius:9px;
  background:var(--danger); color:#fff; font-size:11px; font-weight:600; line-height:18px;
  text-align:center;
}
.mh-bell{position:relative; display:inline-flex; align-items:center; justify-content:center;
  width:34px; height:34px; border-radius:10px; color:var(--ink-2)}
.mh-bell svg{width:19px; height:19px; fill:none; stroke:currentColor; stroke-width:1.6;
  stroke-linecap:round; stroke-linejoin:round}
.mh-bell i{position:absolute; top:2px; right:2px; min-width:15px; height:15px; padding:0 4px;
  border-radius:8px; background:var(--danger); color:#fff; font-size:10px; font-style:normal;
  line-height:15px; text-align:center}

.notice-list{list-style:none; margin:0; padding:0}
.notice-list li{border-bottom:1px solid var(--line)}
.notice-list li:last-child{border-bottom:0}
.notice-list li>a{display:flex; align-items:center; gap:12px; padding:13px 16px}
.notice-list li>a:hover{background:#fafbfd}
.notice-list li.unread>a{background:var(--primary-soft)}
.notice-list time{color:var(--ink-3); font-size:12px; white-space:nowrap}
.notice-body{flex:1; min-width:0}
.notice-title{font-weight:600; overflow:hidden; text-overflow:ellipsis; white-space:nowrap}
.notice-sub{color:var(--ink-3); font-size:12.5px; margin-top:2px}
.notice-kind{flex:none; font-size:11.5px; padding:2px 8px; border-radius:6px;
  background:#eef1f6; color:var(--ink-2)}
.notice-kind.k-assign{background:var(--primary-soft); color:var(--primary-d)}
.notice-kind.k-verify{background:var(--warn-soft); color:var(--warn)}
.notice-kind.k-overdue{background:var(--danger-soft); color:var(--danger)}
.notice-kind.k-fire_due{background:#fef0e0; color:#b54708}
.notice-kind.k-fire_over{background:var(--danger-soft); color:var(--danger)}
.notice-kind.k-due{background:var(--warn-soft); color:var(--warn)}
.notice-kind.k-done{background:var(--ok-soft); color:var(--ok)}
.notice-kind.k-return{background:var(--danger-soft); color:var(--danger)}
.notice-kind.k-urge{background:#f3eaff; color:#6b3fb8}

.steps{list-style:none; margin:0 0 10px; padding:0}
.steps li{display:flex; align-items:center; gap:10px; padding:7px 0;
  border-bottom:1px dashed var(--line)}
.steps li:last-child{border-bottom:0}
.steps li.done .step-title{color:var(--ink-3); text-decoration:line-through}
.step-box{width:18px; height:18px; border-radius:5px; border:1.5px solid var(--line-2);
  background:#fff; display:inline-flex; align-items:center; justify-content:center;
  cursor:pointer; padding:0}
.step-box.on{background:var(--primary); border-color:var(--primary)}
.step-box svg{width:12px; height:12px; fill:none; stroke:#fff; stroke-width:2.4;
  stroke-linecap:round; stroke-linejoin:round}
.step-title{flex:1; min-width:0}
.step-del{opacity:0; transition:opacity .12s}
.steps li:hover .step-del{opacity:1}

.tfiles{list-style:none; margin:0 0 12px; padding:0}
.tfiles li{display:flex; align-items:center; gap:10px; padding:9px 0;
  border-bottom:1px solid var(--line)}
.tfiles li:last-child{border-bottom:0}
.tf-ic{width:18px; height:18px; flex:none; fill:none; stroke:var(--ink-3); stroke-width:1.6;
  stroke-linecap:round; stroke-linejoin:round}
.tf-main{flex:1; min-width:0; display:flex; flex-direction:column}
.tf-main a{font-weight:600; overflow:hidden; text-overflow:ellipsis; white-space:nowrap}
.tf-main a:hover{color:var(--primary)}
.tf-sub{color:var(--ink-3); font-size:12px}
.tf-up{display:flex; gap:10px; align-items:center; flex-wrap:wrap}
.tf-up input[type=file]{flex:1; min-width:180px; font-size:12.5px}

.danger-box{border:1px solid var(--line); border-radius:10px; padding:8px 10px;
  background:#fcfcfd}
.danger-box summary{cursor:pointer; font-size:13px; color:var(--ink-2); font-weight:600}
.danger-box[open] summary{margin-bottom:8px}
.tpl-bar{margin-bottom:14px}
.tpl-list{display:flex; flex-wrap:wrap; gap:8px; padding:2px 0 4px}
.tpl-chip{display:inline-flex; align-items:center; gap:2px; padding:4px 4px 4px 11px;
  border:1px solid var(--line-2); border-radius:999px; background:#fff; font-size:13px}
.tpl-chip.on{border-color:var(--primary); background:var(--primary-soft)}
.tpl-chip a{padding-right:4px}
.tpl-chip form{display:flex}
.tpl-x{border:0; background:none; color:var(--ink-3); font-size:15px; line-height:1;
  padding:2px 6px; border-radius:999px; cursor:pointer}
.tpl-x:hover{background:var(--danger-soft); color:var(--danger)}

/* ============ 周报 ============ */
.wr-nav{display:flex;align-items:center;gap:8px;margin:-8px 0 18px;flex-wrap:wrap}
.wr-now{font-size:13px;font-weight:600;color:var(--ink-2);padding:0 6px}
.wr-card{display:flex;align-items:center;gap:16px;padding:16px 18px;border:1px solid var(--line-2);
  border-radius:12px;background:#fbfcfe}
.wr-card-main{flex:1;min-width:0}
.wr-card-main h3{font-size:15px;margin-bottom:5px}
.wr-card-main p{font-size:12.5px;color:var(--ink-3);line-height:1.6}
.wr-sub{font-size:12.5px;color:var(--ink-3);line-height:1.7}
.wr-right{margin-left:auto;display:flex;align-items:center}
.wr-lead{font-size:13px;color:var(--ink-2);line-height:1.8;padding:11px 14px;background:#f7f9fc;
  border-radius:9px;margin-bottom:12px;white-space:pre-wrap}
.wr-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:11px}
.wr-dept{border:1px solid var(--line-2);border-radius:10px;padding:12px 14px}
.wr-dept-h{display:flex;align-items:center;gap:8px;justify-content:space-between;margin-bottom:6px}
.wr-dept-h strong{font-size:13.5px;font-weight:600}
.wr-item{display:flex;gap:11px;padding:11px 0;border-top:1px dashed var(--line-2)}
.wr-item:first-of-type{border-top:0}
.wr-item-t{flex:1;min-width:0}
.wr-item-t strong{display:block;font-size:13.5px;font-weight:600;line-height:1.5}
.wr-item-t > span{font-size:12px;color:var(--ink-3)}
.wr-item-t p{font-size:12.5px;color:var(--ink-2);margin-top:5px;line-height:1.7;white-space:pre-wrap}
.wr-idx{flex:0 0 20px;font-size:12px;color:var(--ink-3);text-align:right;padding-top:2px}
.wr-tag{margin-left:7px;font-style:normal;font-size:11px;font-weight:600;color:var(--primary-d);
  background:var(--primary-soft);border-radius:5px;padding:1px 6px;vertical-align:1px}
.wr-sum{display:block;font-style:normal;font-size:12.5px;color:var(--ink-2);line-height:1.7;
  margin-top:6px;padding-left:9px;border-left:2px solid var(--line-2);white-space:pre-wrap}
.wr-pick{display:flex;gap:10px;align-items:flex-start;padding:9px 10px;border-radius:9px;
  border:1px solid transparent}
.wr-pick:hover{background:#f7f9fc}
.wr-pick.on{background:var(--primary-soft);border-color:#cfdcff}
.wr-pick > input[type=checkbox]{width:15px;height:15px;flex:0 0 15px;margin-top:2px;accent-color:#2f6bff}
.wr-pick .t{flex:1;min-width:0}
.wr-pick .t b{display:block;font-size:13.5px;font-weight:600;line-height:1.5;cursor:pointer}
.wr-pick .t > span{font-size:12px;color:var(--ink-3)}
.wr-pick .pg{display:none;width:100%;margin-top:7px;font-size:12.5px;padding:6px 9px;
  border:1px solid var(--line-2);border-radius:7px;background:#fff}
.wr-pick.on .pg{display:block}
.wr-acts{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-top:4px}
.wr-hint{font-size:12.5px;color:var(--ink-3);margin-left:auto}
.wr-hint b{color:var(--primary-d)}
/* 整块可点：label 铺一层透明覆盖，点标题、点描述、点空白都算选中 */
.wr-tip{padding:8px 11px;background:#f5f7fb;border-radius:8px;margin:7px 0 2px}
table.grid td.nowrap,table.grid th.nowrap{white-space:nowrap}
.wr-pick{position:relative}
.wr-hit{display:block;cursor:pointer}
.wr-hit::after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;border-radius:9px;z-index:1}
.wr-pick > input[type=checkbox]{position:relative;z-index:2}
.wr-pick > .wr-idx{position:relative;z-index:2;color:var(--ok,#12a150)}
.wr-pick .pg{position:relative;z-index:2}
.wr-pick.lock{opacity:.62}
.wr-pick.lock .wr-hit{cursor:default}
.wr-jump{font-size:12.5px;padding:5px 8px;border:1px solid var(--line-2);border-radius:8px;
  background:#fff;color:var(--ink-2);max-width:190px}
.wr-jump:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px rgba(47,107,255,.12)}
.wr-inline{display:inline}
.wr-add{display:grid;grid-template-columns:1.5fr .6fr .9fr .7fr 1.2fr auto;gap:9px;margin-top:12px;
  padding-top:13px;border-top:1px solid var(--line-2)}
.wr-add input,.wr-add select{font-size:13px;padding:7px 10px;border:1px solid var(--line-2);
  border-radius:8px;background:#fff;min-width:0}
.wr-add input:focus,.wr-add select:focus{outline:none;border-color:var(--primary);
  box-shadow:0 0 0 3px rgba(47,107,255,.12)}
.wr-time{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.wr-hm{display:flex;align-items:center;gap:7px}
.wr-hm select{flex:1 1 0;min-width:0}
.wr-hm em{font-style:normal;color:var(--ink-3);font-weight:600}
.wr-people{max-height:420px;overflow:auto;margin:-4px -6px 0;padding:0 6px}
.wr-blk{margin-bottom:16px}
.wr-note p{font-size:13px;color:var(--ink-2);line-height:1.8;white-space:pre-wrap}
@media (max-width:640px){
  .wr-add{grid-template-columns:1fr}
  .wr-card{flex-direction:column;align-items:stretch}
  .wr-card .btn{width:100%}
  .wr-people{max-height:none}
  .wr-time{grid-template-columns:1fr}
}

/* ============ 周报 AI 总结 ============ */
.pill.warn{background:var(--warn-soft);color:#a3660a}
.wr-ai{margin-top:12px}
.wr-ai-sum{margin:2px 0 10px;line-height:1.85}
.wr-ai-acts{display:flex;align-items:center;gap:9px;flex-wrap:wrap}
.wr-ai-when{font-size:12.5px}
.wr-tabs{display:flex;gap:6px;margin:14px 0 0}
.wr-tab{border:1px solid var(--line-2);background:#fff;color:var(--ink-2);border-radius:9px;
  padding:6px 13px;font-size:13px;cursor:pointer}
.wr-tab:hover{border-color:var(--primary);color:var(--primary-d)}
.wr-tab.on{background:var(--primary-soft);border-color:#c9d9ff;color:var(--primary-d);font-weight:600}
.wr-ai-pane{margin-top:10px}
.wr-ai-frame{width:100%;height:min(76vh,880px);border:1px solid var(--line-2);
  border-radius:10px;background:#fff}
.wr-ai-line{display:grid;grid-template-columns:46px 1fr;gap:10px;align-items:start;margin:0 0 9px}
.wr-ai-no{font-size:11.5px;color:var(--ink-3);text-align:right;padding-top:9px}
.wr-ai-line input,.wr-ai-line textarea{width:100%;font:inherit;font-size:13.5px;line-height:1.75;
  padding:7px 10px;border:1px solid var(--line-2);border-radius:8px;background:#fff;resize:vertical}
.wr-ai-line input:focus,.wr-ai-line textarea:focus{outline:none;border-color:var(--primary);
  box-shadow:0 0 0 3px rgba(47,107,255,.12)}
.wr-ai-save{display:flex;align-items:center;gap:12px;margin-top:14px;flex-wrap:wrap}
.wr-token{display:flex;align-items:center;gap:9px;flex-wrap:wrap;margin:8px 0 6px}
.wr-token code{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12.5px;
  background:#f5f7fb;border:1px solid var(--line);padding:7px 11px;border-radius:8px;word-break:break-all}


/* ---- AI 回复附件卡片 ---- */
.ai-outfiles{flex-direction:column;gap:8px;margin-bottom:2px}
.ai-bfile{align-items:center;gap:11px;padding:0;text-decoration:none}
.ai-outfiles .ai-bfile{
  display:flex;width:100%;box-sizing:border-box;background:var(--surface,#f5f6f8);
  border:1px solid var(--line-2,#e6e8ec);border-radius:12px;padding:11px 14px;
  transition:border-color .15s,background .15s}
.ai-outfiles .ai-bfile:hover{border-color:var(--primary)}
.ai-fico{width:26px;height:26px;flex:0 0 auto;fill:none;stroke:var(--primary);stroke-width:1.7}
.ai-bmeta{display:flex;flex-direction:column;min-width:0;line-height:1.3}
.ai-bmeta b{font-size:13px;font-weight:600;color:var(--ink);max-width:340px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ai-bmeta i{font-style:normal;font-size:11.5px;color:var(--ink-3)}

/* ---- 个人中心 ---- */
.me-wrap{max-width:640px;margin:0 auto}
.me-card{background:var(--surface);border:1px solid var(--line-2);border-radius:14px;padding:26px 30px}
.me-head{display:flex;align-items:center;gap:14px;padding-bottom:18px;border-bottom:1px solid var(--line-2)}
.me-avatar{width:52px;height:52px;border-radius:50%;background:var(--primary);color:#fff;
  display:flex;align-items:center;justify-content:center;font-size:22px;font-weight:700;flex:0 0 auto}
.me-name{font-size:16px;font-weight:600}
.me-rows{padding-top:8px}
.me-row{display:flex;align-items:baseline;padding:13px 0;border-bottom:1px solid var(--line-2);font-size:14px}
.me-row:last-child{border-bottom:none}
.me-label{flex:0 0 110px;color:var(--ink-3)}
.me-row b{font-weight:500;color:var(--ink);word-break:break-all}
.me-edit{color:var(--primary);text-decoration:none;font-size:13.5px}
.me-edit:hover{text-decoration:underline}
/* 侧栏 .me 现在是链接 */
a.me{color:inherit;text-decoration:none}
a.me:hover .me-info strong{color:var(--primary)}


/* ---- 个人中心：修改密码弹窗 ---- */
.dlg-mask{position:fixed;inset:0;background:rgba(15,23,42,.45);z-index:90;
  display:flex;align-items:flex-start;justify-content:center;padding-top:14vh}
.dlg{width:440px;max-width:calc(100vw - 40px);background:#fff;border-radius:10px;
  box-shadow:0 18px 50px rgba(15,23,42,.28);overflow:hidden;color:var(--ink)}
.dlg-head{display:flex;align-items:center;justify-content:space-between;
  padding:15px 18px 13px;border-bottom:1px solid #eef0f3}
.dlg-head b{font-size:15.5px;font-weight:600}
.dlg-x{border:none;background:none;font-size:20px;line-height:1;color:#9aa3af;
  cursor:pointer;padding:2px 6px;border-radius:6px}
.dlg-x:hover{color:var(--ink);background:#f2f4f7}
.dlg-body{padding:22px 26px 20px}
.dlg-row{display:flex;align-items:center;gap:12px;margin-bottom:16px}
.dlg-label{flex:0 0 92px;text-align:right;font-size:13.5px;color:var(--ink)}
.dlg-label i{color:#e0533d;font-style:normal;margin-right:2px}
.dlg-row input{flex:1;min-width:0;height:36px;padding:0 11px;font-size:13.5px;
  border:1px solid #d9dee5;border-radius:7px;outline:none;background:#fff;color:var(--ink)}
.dlg-row input:focus{border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-soft)}
.dlg-row input::placeholder{color:#b3bac4}
.dlg-foot{display:flex;justify-content:flex-end;gap:10px;margin-top:22px}
.dlg-btn{height:34px;padding:0 20px;font-size:13.5px;border-radius:7px;cursor:pointer;
  border:1px solid #d9dee5;background:#fff;color:var(--ink)}
.dlg-btn:hover{border-color:var(--primary);color:var(--primary)}
.dlg-primary{background:var(--primary);border-color:var(--primary);color:#fff}
.dlg-primary:hover{background:var(--primary-d);border-color:var(--primary-d);color:#fff}


/* ---------------- 消防器材板块 ---------------- */
.panel-t{font-size:14px;font-weight:650;margin:0 0 14px;display:flex;gap:8px;align-items:baseline}
.panel-t .muted{font-weight:400;font-size:12.5px}
.fire-stats{display:grid;grid-template-columns:repeat(5,1fr);gap:10px;margin-bottom:14px}
.fire-stat{display:flex;flex-direction:column;gap:2px;padding:13px 15px;border-radius:12px;
  background:var(--surface);border:1px solid var(--line-2);text-decoration:none;color:var(--ink);
  transition:border-color .15s,box-shadow .15s}
.fire-stat:hover{border-color:#c3c9d4}
.fire-stat b{font-size:22px;font-weight:700;line-height:1.15}
.fire-stat span{font-size:12.5px;color:var(--ink-3)}
.fire-stat.on{border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-soft)}
.fire-stat.lv-over b{color:#b42318}
.fire-stat.lv-red b{color:#d92d20}
.fire-stat.lv-orange b{color:#b54708}
.fire-stat.lv-blue b{color:#1d4ed8}
.fire-stat.lv-ok b{color:#067647}

.fire-filter{display:flex;gap:9px;align-items:center;margin-bottom:12px;flex-wrap:wrap}
.fire-filter input,.fire-filter select{height:34px;padding:0 11px;font-size:13px;border-radius:8px;
  border:1px solid var(--line-2);background:#fff;color:var(--ink);outline:none}
.fire-filter input[name=q]{width:240px}
.fire-filter input:focus,.fire-filter select:focus{border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-soft)}

.fire-bar{display:flex;align-items:center;gap:14px;padding:2px 2px 12px;font-size:13px}
.fire-check{display:flex;align-items:center;gap:6px;color:var(--ink-2);cursor:pointer}
.fire-grid .c-ck{width:34px}
.fire-grid .c-code,.fire-grid .c-cat,.fire-grid .c-date{white-space:nowrap;color:var(--ink-2)}
.fire-grid .c-left{width:104px}
.fire-grid .c-loc{max-width:220px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fire-name{color:var(--ink);font-weight:550;text-decoration:none}
.fire-name:hover{color:var(--primary)}

.fire-pill{display:inline-block;padding:2px 9px;border-radius:999px;font-size:12px;font-weight:600;white-space:nowrap}
.fire-pill.lv-over{background:#fdeceb;color:#b42318}
.fire-pill.lv-red{background:#fde2e1;color:#c0392b}
.fire-pill.lv-orange{background:#fef0e0;color:#b54708}
.fire-pill.lv-blue{background:#e6efff;color:#1d4ed8}
.fire-pill.lv-ok{background:#e7f6ec;color:#067647}

.fire-form .field textarea{resize:vertical;min-height:68px}
.fire-form .field span i.req{color:#d92d20;font-style:normal;margin-left:2px}

.fire-detail{display:grid;grid-template-columns:1fr 260px;gap:14px;align-items:start}
.fire-kv{width:100%;border-collapse:collapse;font-size:13.4px}
.fire-kv th{width:88px;text-align:left;color:var(--ink-3);font-weight:400;padding:9px 8px;
  border-bottom:1px solid #f2f4f7}
.fire-kv td{padding:9px 8px;border-bottom:1px solid #f2f4f7;color:var(--ink)}
.fire-qr-panel{text-align:center}
.fire-qr-img{width:180px;height:180px;display:block;margin:0 auto 8px;
  border:1px solid var(--line-2);border-radius:10px;padding:6px;background:#fff}
.fire-qr-tip{font-size:12.5px;margin:0 0 8px}
.fire-qr-url{display:block;font-size:11px;color:var(--ink-3);word-break:break-all;line-height:1.45}

.fire-check-form{display:flex;gap:12px;align-items:flex-end;flex-wrap:wrap;margin-bottom:10px}
.fire-check-form .field{margin-bottom:0;flex:0 0 auto}
.fire-check-note{flex:1 1 220px}

.fire-picks{display:grid;grid-template-columns:repeat(auto-fill,minmax(165px,1fr));gap:8px}
.fire-pick{display:flex;align-items:center;gap:8px;padding:7px 10px;border:1px solid var(--line-2);
  border-radius:9px;cursor:pointer;font-size:13px;background:#fff}
.fire-pick:hover{border-color:#c3c9d4}
.fire-pick input{accent-color:var(--primary)}
.fire-pick span{display:flex;flex-direction:column;line-height:1.3;min-width:0}
.fire-pick span i{font-style:normal;font-size:11.5px;color:var(--ink-3)}
.fire-scope{display:grid;grid-template-columns:1fr 1fr;gap:18px}
.fire-scope-col h3{font-size:13px;font-weight:600;margin:0 0 9px;color:var(--ink-2)}
.fire-scope-col .fire-picks{margin-bottom:10px}

@media (max-width:900px){
  .fire-stats{grid-template-columns:repeat(2,1fr)}
  .fire-detail{grid-template-columns:1fr}
  .fire-scope{grid-template-columns:1fr}
  .fire-filter input[name=q]{width:100%}
  .fire-grid .c-cat,.fire-grid .c-date{display:none}
}

/* ---- 消防器材：照片与灯箱 ---- */
.fire-grid .c-pic{width:66px}
.fire-thumb{position:relative;display:inline-block;width:44px;height:44px;border-radius:8px;
  overflow:hidden;border:1px solid var(--line-2);background:#f2f4f7;text-decoration:none}
.fire-thumb img{width:100%;height:100%;object-fit:cover;display:block}
.fire-thumb i{position:absolute;right:2px;bottom:2px;background:rgba(17,24,39,.72);color:#fff;
  font-style:normal;font-size:10.5px;line-height:1;padding:3px 4px;border-radius:5px}
.fire-thumb-lg{width:104px;height:104px}
.fire-thumb:hover{border-color:var(--primary)}
.fire-photos{display:grid;grid-template-columns:repeat(auto-fill,minmax(104px,1fr));gap:10px;margin-bottom:12px}
.fire-photo{position:relative}
.fire-photo-x{position:absolute;top:-6px;right:-6px;width:20px;height:20px;border-radius:50%;
  border:none;background:rgba(17,24,39,.72);color:#fff;font-size:13px;line-height:1;cursor:pointer;
  display:flex;align-items:center;justify-content:center;padding:0}
.fire-photo-x:hover{background:var(--danger)}
.fire-upload{display:flex;align-items:center;gap:10px;flex-wrap:wrap;font-size:13px}
.fire-upload input[type=file]{font-size:12.5px;max-width:260px}
.fire-lb{position:fixed;inset:0;background:rgba(9,14,24,.86);z-index:120;display:flex;
  align-items:center;justify-content:center;padding:24px;cursor:zoom-out}
.fire-lb img{max-width:92vw;max-height:88vh;border-radius:10px;box-shadow:0 20px 60px rgba(0,0,0,.5)}
@media (max-width:900px){
  .fire-grid .c-pic{width:54px}
  .fire-thumb{width:38px;height:38px}
}

/* ===== 设施设备点检（device_*） ===== */
.dev-timeline { padding: 6px 14px 14px; }
.dev-rec { border: 1px solid var(--line, #e6e9ef); border-radius: 8px; margin-bottom: 10px; background: #fff; }
.dev-rec > summary { cursor: pointer; padding: 10px 12px; display: flex; gap: 10px; align-items: center; flex-wrap: wrap; }
.dev-rec > summary b { font-size: 14px; }
.dev-note { padding: 0 12px 8px; color: #555; }
.dev-recs { margin: 0 12px 10px; }
.dev-recs tr.bad td { background: #fff6f5; }
.dev-rec-act { padding: 0 12px 12px; display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }
.dev-rec-act form { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }

.dev-check-form .panel { margin-bottom: 14px; }
.dev-check-top { display: flex; gap: 18px; align-items: center; flex-wrap: wrap; padding: 12px 14px; }
.dev-grp { font-size: 14px; color: #1a4d8f; margin: 14px 14px 8px; padding-bottom: 4px; border-bottom: 1px dashed #dde3ec; }
.dev-row { display: flex; gap: 14px; align-items: center; justify-content: space-between;
           padding: 9px 14px; border-bottom: 1px solid #f1f3f7; flex-wrap: wrap; }
.dev-row:last-child { border-bottom: none; }
.dev-row-l { flex: 1 1 220px; min-width: 180px; }
.dev-row-r { display: flex; gap: 12px; align-items: center; flex-wrap: wrap; }
.dev-opt { display: inline-flex; gap: 5px; align-items: center; font-size: 13px; color: #444; }
.dev-req { color: #d9534f; margin-left: 3px; }
.dev-remark { min-width: 160px; }
.dev-submit { display: flex; gap: 14px; align-items: center; padding: 12px 14px; flex-wrap: wrap; }

.dev-forms-grid { display: grid; grid-template-columns: minmax(280px, 360px) 1fr; gap: 16px; align-items: start; }
@media (max-width: 900px) { .dev-forms-grid { grid-template-columns: 1fr; } }
.dev-pick { display: grid; grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); gap: 6px 12px; margin: 4px 0 12px; }
.dev-pick-i { display: flex; gap: 6px; align-items: center; font-size: 13px; }
.c-acts { white-space: nowrap; }

.pfr { padding: 6px 0; border-bottom: 1px dashed #e6e9ef; }
.pfr summary { cursor: pointer; display: flex; justify-content: space-between; gap: 8px; padding: 4px 0; }
.pfr-t { width: 100%; font-size: 12px; border-collapse: collapse; margin: 6px 0; }
.pfr-t td { padding: 3px 6px; border-bottom: 1px solid #f2f4f7; }
.pfr-t tr.bad td { background: #fff6f5; }
.pfr-n { font-size: 12px; color: #666; margin: 4px 0 0; }
/* ===== 设施设备点检 v2：记录卡片 / 照片 / 改派页 ===== */
.dev-empty { text-align: center; color: #8a94a6; padding: 26px 12px; margin: 0; }
.dev-badge { margin-left: 10px; font-size: 12px; font-weight: normal; color: #c8842a;
             background: #fdf6ec; border: 1px solid #f0dcc0; border-radius: 10px; padding: 1px 8px; }

.dev-card { margin: 0 14px 12px; border: 1px solid #e6e9ef; border-radius: 10px; background: #fff; overflow: hidden; }
.dev-card-h { display: flex; align-items: center; justify-content: space-between; gap: 10px;
              padding: 10px 12px; background: #fafbfd; border-bottom: 1px solid #eef1f6; }
.dev-card-main { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.dev-date { font-size: 14px; color: #1a1a1a; }
.dev-who { font-size: 13px; color: #444; }
.dev-actual { font-size: 12px; color: #6b7a90; background: #f2f6fb; border-radius: 4px; padding: 1px 6px; }
.dev-time { font-size: 12px; color: #9aa4b2; }
.dev-toggle { border: 1px solid #d8dee9; background: #fff; color: #3d4b5c; border-radius: 6px;
              font-size: 12px; padding: 3px 10px; cursor: pointer; }
.dev-toggle:hover { background: #f5f7fb; }
.dev-card-b { padding: 0 0 10px; }
.dev-note { margin: 10px 12px 6px; font-size: 13px; color: #555; }

.dev-items { width: 100%; border-collapse: collapse; font-size: 13px; }
.dev-items td { padding: 7px 10px; border-bottom: 1px solid #f2f4f7; vertical-align: top; }
.dev-items tr:last-child td { border-bottom: none; }
.dev-items tr.bad td { background: #fff7f6; }
.dev-grp-c { width: 108px; color: #6b7a90; font-size: 12px; }
.dev-res { width: 66px; white-space: nowrap; }
.dev-res .ok { color: #1f7a4d; }
.dev-res .bad { color: #c0392b; font-weight: 600; }
.dev-res .na { color: #9aa4b2; }
.dev-remark-c { color: #444; }

.dev-photos { display: flex; gap: 8px; flex-wrap: wrap; padding: 10px 12px 0; }
.dev-photos img { width: 76px; height: 76px; object-fit: cover; border-radius: 6px;
                  border: 1px solid #e6e9ef; display: block; }

.dev-undo { display: flex; gap: 8px; align-items: center; padding: 10px 12px 0; flex-wrap: wrap; }
.dev-undo .input { min-width: 240px; }

.dev-check-top { display: flex; gap: 22px; align-items: flex-end; flex-wrap: wrap; padding: 12px 14px 4px; }
.dev-meta-piece { display: flex; flex-direction: column; gap: 3px; }
.dev-meta-k { font-size: 12px; color: #8a94a6; }
.dev-meta-piece b { font-size: 14px; }
.dev-tip { margin: 0; padding: 8px 14px 12px; font-size: 12.5px; color: #6b7a90; }

.dev-inline { display: inline-flex; gap: 8px; align-items: center; font-size: 13px; }
.dev-addform { border-top: 1px solid #e6e9ef; padding: 12px 14px 16px; }
.dev-addrow { display: flex; gap: 14px; flex-wrap: wrap; align-items: flex-end; margin-bottom: 10px; }
.dev-addrow .field { margin: 0; }
.dev-addrow .hint { display: block; margin-top: 3px; font-size: 11.5px; color: #8a94a6; }

.dev-assign .panel { margin-bottom: 14px; }
@media (max-width: 720px) {
  .dev-card-h { flex-direction: column; align-items: flex-start; }
  .dev-card-main { gap: 7px; }
  .dev-items { font-size: 12px; }
  .dev-grp-c { display: none; }
  .dev-remark-c { font-size: 12px; }
  .dev-undo .input { min-width: 0; flex: 1 1 100%; }
}
/* ===== v3 修补：上下布局 / 空状态 / 勾选框宽度 / 规则块 ===== */
/* 详情与设置页改上下通栏，不再挤右窄栏 */
.dev-stack { display: block; }
.dev-stack > .panel { margin-bottom: 14px; }
.dev-stack .dev-card { margin: 0 0 12px; }

/* 表格为空时的居中空状态（不能复用整页的 .empty，它会让文字竖排） */
.grid-empty { padding: 46px 20px; text-align: center; }
.grid-empty p { margin: 0 0 6px; font-size: 14px; font-weight: 550; color: #3d4b5c; }
.grid-empty span { font-size: 12.5px; color: #8a94a6; }

/* 勾选框：修 .field input{width:100%} 把 checkbox 拉满整行的问题 */
.field label.dev-inline { display: inline-flex; width: auto; align-items: center; gap: 8px; }
.field label.dev-inline input[type=checkbox],
.field label.dev-inline input[type=radio] {
  width: 15px; height: 15px; flex: 0 0 15px; margin: 0; padding: 0;
  accent-color: var(--primary); border: 0;
}
.field.dev-field-inline { flex-direction: column; align-items: flex-start; }

/* 提醒规则块 */
.dev-rule-box { border: 1px solid #e6e9ef; border-radius: 10px; padding: 12px 14px 2px;
                margin: 0 0 16px; background: #fafbfd; }
.dev-rule-box > b { font-size: 13px; color: #1a4d8f; }
.dev-rule-box > .hint { display: block; margin: 4px 0 10px; font-size: 12px; color: #8a94a6; }
.dev-rule-row { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }
@media (max-width: 760px) { .dev-rule-row { grid-template-columns: 1fr; } }
.dev-rule-row .field { margin-bottom: 12px; }

/* 改派页：设备表格与人员选择 */
.dev-pick { display: grid; grid-template-columns: repeat(auto-fill, minmax(170px, 1fr)); gap: 8px 12px; }
.dev-pick-i { display: inline-flex; align-items: center; gap: 7px; font-size: 13px; }
.dev-pick-i input[type=checkbox] { width: 15px; height: 15px; flex: 0 0 15px; accent-color: var(--primary); }
#devTable tbody tr:hover { background: #fafbfd; }

/* 记录区通栏后，逐项表列宽更舒展 */
.dev-stack .dev-items { table-layout: auto; }
.dev-stack .dev-grp-c { width: 120px; }
.dev-stack .dev-res { width: 74px; }
/* ===== 点检人下拉选择器（picker） ===== */
.picker { position: relative; max-width: 520px; }
.picker-btn {
  display: flex; align-items: center; justify-content: space-between; gap: 10px;
  width: 100%; min-height: 38px; padding: 7px 12px; background: #fff;
  border: 1px solid var(--line-2, #d8dee9); border-radius: 8px;
  font-size: 13.5px; color: #1a1a1a; cursor: pointer; text-align: left;
}
.picker-btn:hover { border-color: #b9c4d6; }
.picker-label { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: #1a1a1a; }
.picker-caret { color: #8a94a6; font-style: normal; font-size: 11px; }
.picker-panel {
  position: absolute; z-index: 30; left: 0; right: 0; top: calc(100% + 4px);
  background: #fff; border: 1px solid #d8dee9; border-radius: 9px;
  box-shadow: 0 8px 24px rgba(20, 40, 80, .12); padding: 8px;
}
.picker-search { width: 100%; margin-bottom: 6px; }
.picker-list { max-height: 240px; overflow: auto; }
.picker-item {
  display: flex; align-items: center; gap: 8px; padding: 6px 8px;
  border-radius: 6px; font-size: 13px; cursor: pointer;
}
.picker-item:hover { background: #f5f7fb; }
.picker-item input[type=checkbox] {
  width: 15px; height: 15px; flex: 0 0 15px; accent-color: var(--primary, #1a4d8f);
}
.picker-item em { font-style: normal; font-size: 12px; }

/* 详情页点检人旁的「修改」 */
.dev-checker-cell { margin-right: 8px; }
.dev-edit-checker { display: inline-block; }
.dev-edit-checker > summary {
  display: inline-block; font-size: 12.5px; color: #1a4d8f; cursor: pointer;
  border: 1px solid #cfdcf0; background: #f2f6fb; border-radius: 6px; padding: 1px 8px;
}
.dev-edit-checker > summary::-webkit-details-marker { display: none; }
.dev-edit-checker[open] > summary { background: #e6eefb; }
.dev-edit-checker-form {
  display: flex; gap: 8px; align-items: flex-start; margin-top: 8px; flex-wrap: wrap;
}
.dev-edit-checker-form .picker { min-width: 260px; }
.dev-warn { color: #8a5a00; background: #fdf6ec; border: 1px solid #f0dcc0;
            border-radius: 8px; padding: 8px 10px; font-size: 12.5px; margin: 0; }
/* ===== 点检人「修改」浮层：不改变布局，点一下浮出 ===== */
.dev-ck-cell { margin-right: 8px; }
.dev-ck-edit { position: relative; display: inline-block; }
.dev-ck-btn {
  font-size: 12.5px; color: #1a4d8f; cursor: pointer;
  border: 1px solid #cfdcf0; background: #f2f6fb; border-radius: 6px; padding: 1px 9px;
}
.dev-ck-btn:hover { background: #e6eefb; }
.dev-ck-pop {
  position: absolute; z-index: 50; top: calc(100% + 4px); left: 0;
  width: 240px; background: #fff; border: 1px solid #d8dee9; border-radius: 9px;
  box-shadow: 0 10px 26px rgba(20, 40, 80, .14); padding: 6px;
}
.dev-ck-list { max-height: 210px; overflow: auto; }
.dev-ck-list .picker-item { padding: 5px 7px; }
.dev-ck-actions { padding: 6px 4px 2px; border-top: 1px solid #f0f3f8; margin-top: 4px; text-align: right; }
.dev-ck-tip { font-size: 12px; color: #8a94a6; }

/* 自动编号说明块 */
.dev-auto { margin: 0; font-size: 13px; color: #3d4b5c; background: #f5f8fc;
            border: 1px dashed #d8e2f0; border-radius: 8px; padding: 8px 11px; }
.dev-auto b { color: #1a4d8f; }

/* 面板内空状态：横排居中 */
.panel-empty { margin: 0; padding: 34px 16px; text-align: center;
               font-size: 13.5px; color: #8a94a6; }

/* 设备照片（详情页） */
.dev-photo-item { position: relative; }
.dev-photo-item img { width: 92px; height: 92px; object-fit: cover; border-radius: 8px;
                      border: 1px solid #e6e9ef; display: block; }
.dev-photo-x { position: absolute; top: -6px; right: -6px; width: 20px; height: 20px;
               border: 0; border-radius: 50%; background: rgba(20, 30, 50, .72); color: #fff;
               font-size: 13px; line-height: 1; cursor: pointer; }
.dev-photo-up { display: flex; gap: 10px; align-items: center; flex-wrap: wrap;
                padding: 10px 14px 14px; border-top: 1px dashed #e6e9ef; }

/* 扫码页：记录照片 */
.pf-rec-photos { display: flex; gap: 6px; flex-wrap: wrap; margin: 6px 0 2px; }
.pf-rec-photos img { width: 68px; height: 68px; object-fit: cover; border-radius: 6px;
                     border: 1px solid #e6e9ef; display: block; }

/* 任务列表：派发人列 */
.c-creator { width: 92px; font-size: 13px; color: #4a5869; }
@media (max-width: 960px) { .c-creator { display: none; } }

/* 部门 chip：改名按钮 */
.dept-mv.edit { color: #1a4d8f; }
.dept-mv.edit:hover { background: #e6eefb; }

/* 企微待绑定 */
.bind-todo { padding: 4px 18px 14px; }
.bind-todo-t { margin: 0 0 10px; font-size: 13px; color: #4a5869; }
.bind-todo-t b { color: #b4541e; }
.bind-row { display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
            padding: 8px 0; border-top: 1px dashed #e6e9ef; }
.bind-uid { background: #eef2f8; padding: 2px 8px; border-radius: 4px; font-size: 13px; }
.bind-row select { min-width: 190px; }

/* 企微绑定：表格内一键 */
.sug-wrap { display: inline-flex; align-items: center; gap: 6px; }
.sug-uid { font-size: 12px; color: #8a94a3; font-family: ui-monospace, Menlo, monospace; }
.btn.tiny { padding: 2px 8px; font-size: 12px; line-height: 1.5; }
.dot-wait { display: inline-flex; align-items: center; gap: 4px; font-size: 12px; color: #b4541e; }
.dot-wait::before { content: ""; width: 6px; height: 6px; border-radius: 50%; background: #e08a3c; }
.unk-line { padding: 0 18px 16px; display: flex; flex-wrap: wrap; align-items: center; gap: 8px; font-size: 13px; }
.unk-item { background: #f2f4f7; border-radius: 4px; padding: 1px 7px; font-size: 12px; color: #4a5869; }


/* ================= 合同管理 ================= */
.mono { font-family: ui-monospace, Menlo, Consolas, monospace; font-size: 12px; }

.ft-form { padding: 6px 18px 0; }
.ft-row { display: grid; grid-template-columns: 130px 1fr; gap: 12px;
          align-items: center; padding: 10px 0; border-bottom: 0.5px solid var(--line); }
.ft-row > span:first-child { font-size: 13px; color: #465062; }
.ft-row .input, .ft-row textarea { width: 100%; }
.ft-row em { font-style: normal; }
.req { color: #c0392b; font-weight: 500; }
.ft-foot { display: flex; gap: 10px; padding: 16px 18px 18px; }
.ct-two { display: grid; grid-template-columns: 1fr 160px; gap: 10px; }
.ct-side { display: flex; align-items: center; gap: 14px; flex-wrap: wrap; }
.ct-radio { display: inline-flex; align-items: center; gap: 6px; font-size: 13px; }

.ct-flow { display: grid; grid-template-columns: repeat(5, 1fr); gap: 0;
           margin: 0 0 14px; background: #fff; border: 0.5px solid var(--line);
           border-radius: 10px; overflow: hidden; }
.ct-step { padding: 12px 10px; position: relative; border-right: 0.5px solid var(--line); }
.ct-step:last-child { border-right: 0; }
.ct-step b { display: block; font-size: 13px; font-weight: 500; color: #8b93a1; }
.ct-step i { display: block; font-style: normal; font-size: 11px; color: #b3b9c4; margin-top: 3px; }
.ct-step.done b { color: #2e7d52; }
.ct-step.done { background: #f4faf6; }
.ct-step.on { background: #eef4fd; }
.ct-step.on b { color: #1a4d8f; }

.ct-banner { border-radius: 8px; padding: 10px 14px; font-size: 13px; margin-bottom: 14px; }
.ct-banner.info { background: #eef4fd; color: #1a4d8f; }
.ct-banner.warn { background: #fdf6ec; color: #8a5a12; }
.ct-banner.ok { background: #f1f9f4; color: #2e7d52; }

.ct-ver { padding: 12px 18px; border-bottom: 0.5px solid var(--line); }
.ct-ver:last-child { border-bottom: 0; }
.ct-ver-h { display: flex; align-items: center; gap: 10px; }
.ct-ver-h b { font-size: 13px; font-weight: 500; }
.ct-files { display: flex; flex-direction: column; gap: 6px; margin-top: 8px; }
.ct-file { display: flex; align-items: center; gap: 10px; padding: 7px 10px;
           border: 0.5px solid var(--line); border-radius: 7px; text-decoration: none;
           color: inherit; background: #fcfcfd; }
.ct-file:hover { background: #f4f7fb; }
.ct-file-n { font-size: 13px; flex: 1; }

.ct-up { display: grid; grid-template-columns: 200px 1fr 90px; gap: 10px;
         padding: 0 18px 18px; align-items: center; }

.ct-timeline { padding: 4px 18px 18px; }
.ct-tl { display: flex; gap: 10px; padding: 8px 0; }
.ct-tl-dot { width: 7px; height: 7px; border-radius: 50%; background: #c9d2de;
             margin-top: 7px; flex: none; }
.ct-tl b { font-size: 13px; font-weight: 500; }

@media (max-width: 720px) {
  .ft-row { grid-template-columns: 1fr; gap: 6px; }
  .ct-two { grid-template-columns: 1fr; }
  .ct-flow { grid-template-columns: 1fr; }
  .ct-step { border-right: 0; border-bottom: 0.5px solid var(--line); }
  .ct-up { grid-template-columns: 1fr; }
}


/* 合同表单与设置 */
.ct-body { padding: 4px 18px 16px; }
.ct-row-2 { grid-template-columns: 1fr 1fr; }
.ct-row-3 { grid-template-columns: 1fr 1fr 1fr; }
.ct-hint { font-size: 12px; color: #8b93a1; margin: 8px 0 0; }
.ct-save { padding: 0 18px 18px; }
.ct-check { display: inline-flex; align-items: center; gap: 8px; font-size: 13px; margin-top: 4px; }

.ct-sides { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
.ct-side-card { display: flex; align-items: flex-start; gap: 10px; padding: 14px 16px;
                border: 0.5px solid var(--line); border-radius: 10px; cursor: pointer;
                background: #fcfcfd; transition: border-color .15s, background .15s; }
.ct-side-card:hover { border-color: #c3d3e8; background: #f7fafd; }
.ct-side-card input[type=radio] { margin-top: 3px; accent-color: var(--primary); }
.ct-side-card:has(input:checked) { border-color: var(--primary); background: #f2f7fd;
                                  box-shadow: inset 0 0 0 0.5px var(--primary); }
.ct-sc-main b { display: block; font-size: 13.5px; font-weight: 500; margin-bottom: 3px; }
.ct-sc-main em { font-style: normal; font-size: 12px; color: #8b93a1; }

.ct-drop-wrap { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
.ct-drop { display: flex; flex-direction: column; align-items: center; justify-content: center;
           gap: 5px; padding: 22px 16px; border: 1px dashed #cfd6e2; border-radius: 10px;
           background: #fbfcfd; cursor: pointer; text-align: center;
           transition: border-color .15s, background .15s; }
.ct-drop:hover { border-color: var(--primary); background: #f6faff; }
.ct-drop.picked { border-style: solid; border-color: #6aa06a; background: #f5faf5; }
.ct-drop input[type=file] { display: none; }
.ct-drop-ic { width: 24px; height: 24px; fill: none; stroke: #9aa4b2; stroke-width: 1.6;
              stroke-linecap: round; stroke-linejoin: round; }
.ct-drop.picked .ct-drop-ic { stroke: #5b8c5b; }
.ct-drop b { font-size: 13px; font-weight: 500; }
.ct-drop em { font-style: normal; font-size: 11.5px; color: #9aa4b2; }
.ct-drop-name { font-size: 11.5px; color: #b3b9c4; max-width: 100%; overflow: hidden;
                text-overflow: ellipsis; white-space: nowrap; }
.ct-drop-name.on { color: #3d7a3d; }

@media (max-width: 720px) {
  .ct-sides, .ct-drop-wrap, .ct-row-2, .ct-row-3 { grid-template-columns: 1fr; }
}


/* 合同上传区（行式） */
.ct-up-list { display: flex; flex-direction: column; gap: 10px; }
.ct-up-item { display: grid; grid-template-columns: 34px 1fr auto auto;
              gap: 14px; align-items: center; padding: 13px 16px;
              border: 0.5px solid var(--line); border-radius: 10px;
              background: #fcfcfd; cursor: pointer;
              transition: border-color .15s, background .15s; }
.ct-up-item:hover { border-color: #c3d3e8; background: #f8fbfe; }
.ct-up-item.picked { border-color: #7aa87a; background: #f5faf5; }
.ct-up-item input[type=file] { display: none; }
.ct-up-ic svg { width: 20px; height: 20px; fill: none; stroke: #9aa4b2;
                stroke-width: 1.5; stroke-linecap: round; stroke-linejoin: round; }
.ct-up-item.picked .ct-up-ic svg { stroke: #5b8c5b; }
.ct-up-text b { display: block; font-size: 13px; font-weight: 500; }
.ct-up-text em { font-style: normal; font-size: 11.5px; color: #9aa4b2; }
.ct-up-file { font-size: 12px; color: #b3b9c4; max-width: 180px;
              overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ct-up-file.on { color: #3d7a3d; }
.ct-up-btn { font-size: 12.5px; padding: 5px 12px; border-radius: 6px;
             border: 0.5px solid var(--line); background: #fff; color: #465062; }
.ct-up-item:hover .ct-up-btn { border-color: #b9c9dc; }

@media (max-width: 640px) {
  .ct-up-item { grid-template-columns: 28px 1fr; row-gap: 6px; }
  .ct-up-file, .ct-up-btn { grid-column: 2; }
}


/* 上传区（紧凑单行，覆盖上一版） */
.ct-up-list { gap: 8px; }
.ct-up-item { grid-template-columns: 18px auto 1fr auto; gap: 10px;
              padding: 8px 12px; border-radius: 8px; }
.ct-up-ic { width: 18px; height: 18px; fill: none; stroke: #9aa4b2;
            stroke-width: 1.5; stroke-linecap: round; stroke-linejoin: round; }
.ct-up-item.picked .ct-up-ic { stroke: #5b8c5b; }
.ct-up-title { font-size: 13px; font-weight: 500; white-space: nowrap; }
.ct-up-note { font-size: 11.5px; color: #9aa4b2; text-align: right;
              overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ct-up-note.on { color: #3d7a3d; }
.ct-up-btn { font-size: 12px; padding: 3px 10px; border-radius: 6px;
             border: 0.5px solid var(--line); background: #fff; color: #465062;
             white-space: nowrap; }
.ct-up-item:hover .ct-up-btn { border-color: #b9c9dc; }

@media (max-width: 640px) {
  .ct-up-item { grid-template-columns: 18px 1fr auto; row-gap: 4px; }
  .ct-up-note { grid-column: 2 / 4; text-align: left; }
}

/* 合同：法务判定 */
.ct-judge { display: flex; flex-wrap: wrap; align-items: center; gap: 12px; }
.ct-judge p { margin: 0; font-size: 13px; }
.ct-judge form { display: flex; gap: 8px; }


/* 合同：卡住提示 */
.ct-stuck { display: flex; flex-wrap: wrap; align-items: center; gap: 8px;
            padding: 10px 14px; margin-bottom: 12px; border-radius: 8px;
            background: #fdf6ec; border: 0.5px solid #f0dcc0; }
.ct-stuck-t { font-size: 13px; color: #8a5a12; font-weight: 500; }
.ct-stuck-i { display: inline-flex; align-items: baseline; gap: 6px; font-size: 12.5px;
              padding: 2px 9px; border-radius: 6px; background: #fff;
              border: 0.5px solid #f0dcc0; color: #6b4a1c; text-decoration: none; }
.ct-stuck-i:hover { border-color: #e0c49a; }
.ct-stuck-i em { font-style: normal; color: #a07a3c; font-size: 11.5px; }


/* 合同：hermes 整理结果 */
.ct-hermes { padding: 10px 12px; border-radius: 8px; background: #f7f9fc;
             border: 0.5px solid var(--line); }
.ct-hermes b { font-size: 13px; font-weight: 500; }
.ct-hermes p { margin: 6px 0 8px; font-size: 12.5px; color: #4a5869; line-height: 1.65; }
.ct-kw { display: flex; flex-wrap: wrap; gap: 5px; margin-bottom: 6px; }

/* 合同：在线预览 */
.ct-preview { background: #fff; border: 0.5px solid var(--line); border-radius: 10px;
              overflow: hidden; height: calc(100vh - 190px); min-height: 420px; }
.ct-preview iframe { width: 100%; height: 100%; border: 0; display: block; }
.ct-preview img { max-width: 100%; display: block; margin: 0 auto; }
.ct-file-pv { font-size: 11.5px; color: #4a6b96; text-decoration: none;
              padding: 2px 7px; border-radius: 5px; border: 0.5px solid #d8e2ef; }
.ct-file-pv:hover { background: #f2f7fd; }


/* 合同：归档材料清单 */
.ct-mats { display: flex; flex-direction: column; gap: 6px; padding: 4px 18px 16px; }
.ct-mat { display: grid; grid-template-columns: 20px 150px 1fr auto auto;
          gap: 10px; align-items: center; padding: 8px 12px; border-radius: 8px;
          background: #f8fafc; border: 0.5px solid var(--line); }
.ct-mat.miss { background: #fdf8f3; border-color: #f0dcc0; }
.ct-mat-ic { width: 18px; height: 18px; border-radius: 50%; display: inline-flex;
             align-items: center; justify-content: center; font-size: 11px;
             background: #e6f0e6; color: #3d7a3d; font-weight: 500; }
.ct-mat.miss .ct-mat-ic { background: #f7e3cc; color: #a5691a; }
.ct-mat-name { font-size: 13px; font-weight: 500; }
.ct-mat-miss { font-size: 12px; color: #a5691a; }

@media (max-width: 720px) {
  .ct-mat { grid-template-columns: 20px 1fr auto; row-gap: 4px; }
  .ct-mat .muted { grid-column: 2 / 4; }
}


/* 合同：下一步指引 */
.ct-next { display: flex; align-items: center; gap: 10px; padding: 11px 14px;
           border-radius: 9px; margin-bottom: 12px; border: 0.5px solid transparent; }
.ct-next-label { font-size: 12px; padding: 2px 8px; border-radius: 5px;
                 background: rgba(0,0,0,.06); white-space: nowrap; font-weight: 500; }
.ct-next-text { font-size: 13px; line-height: 1.6; }
.ct-next.owner { background: #eef4fd; color: #1a4d8f; border-color: #cfdff5; }
.ct-next.owner .ct-next-label { background: #d8e7fa; }
.ct-next.warn { background: #fdf6ec; color: #8a5a12; border-color: #f0dcc0; }
.ct-next.warn .ct-next-label { background: #f7e3cc; }
.ct-next.info { background: #f4f6f9; color: #4a5869; border-color: #e2e7ee; }
.ct-next.ok { background: #f1f9f4; color: #2e7d52; border-color: #d5ecdd; }


/* 合同：附件判定区块 */
.ct-judge-panel { border-color: #f0dcc0; }
.ct-judge-panel .panel-head h2 { color: #8a5a12; }


/* 合同：历史折叠 + 上传提示 */
.ct-more { margin: 0 18px 14px; }
.ct-more summary { font-size: 12.5px; color: #6b7684; cursor: pointer; padding: 4px 0; }
.ct-more[open] summary { margin-bottom: 6px; }
.ct-more .ct-files { padding: 0; }
.ct-up-hint { font-size: 12px; color: #8b93a1; grid-column: 1 / 2; }
.ct-up { grid-template-columns: 1fr auto auto; }
@media (max-width: 720px) { .ct-up { grid-template-columns: 1fr; } }


/* 合同：极简上传区 */
.ct-up2 { display: flex; align-items: center; gap: 8px; padding: 0 18px 16px; }
.ct-file-real { position: absolute; width: 1px; height: 1px; opacity: 0; pointer-events: none; }
.ct-pick { flex: 1; display: flex; align-items: center; gap: 9px;
           padding: 9px 13px; border: 1px dashed #cfd6e2; border-radius: 8px;
           background: #fbfcfd; cursor: pointer; transition: all .15s; }
.ct-pick:hover { border-color: var(--primary); background: #f6faff; }
.ct-pick.picked { border-style: solid; border-color: #7aa87a; background: #f5faf5; }
.ct-pick-plus { font-size: 15px; color: #9aa4b2; line-height: 1; }
.ct-pick.picked .ct-pick-plus { display: none; }
.ct-pick-tx { font-size: 12.5px; color: #6b7684; overflow: hidden;
              text-overflow: ellipsis; white-space: nowrap; }
.ct-pick.picked .ct-pick-tx { color: #2f6b2f; }
.ct-go { flex: none; }


/* 合同：一键上传 */
.ct-up3 { padding: 0 18px 16px; }
.ct-up3 .btn { cursor: pointer; }


/* 合同：标题栏上传按钮 + 徽章 */
.ct-headup { margin: 0; display: flex; align-items: center; }
.ct-upbtn { display: inline-block; font-size: 12.5px; padding: 5px 14px; border-radius: 7px;
            cursor: pointer; white-space: nowrap; background: #fff;
            border: 0.5px solid var(--line-2); color: var(--ink-2);
            transition: background .15s, border-color .15s; }
.ct-upbtn:hover { border-color: #b9c9dc; background: #f8fbfe; }
.ct-upbtn.primary { background: var(--primary); color: #fff; border-color: var(--primary-d); }
.ct-upbtn.primary:hover { background: var(--primary-d); }
.ct-badge { display: inline-block; font-size: 11.5px; font-weight: 400;
            padding: 1px 7px; border-radius: 5px; margin-left: 6px;
            background: #f1f3f6; color: #6b7684; vertical-align: 1px; }


/* 合同：上传按钮（右下角、统一蓝色） */
.ct-upfoot { margin: 0; display: flex; justify-content: flex-end; padding: 0 18px 14px; }
.ct-upbtn { display: inline-block; font-size: 12.5px; padding: 5px 16px; border-radius: 7px;
            cursor: pointer; white-space: nowrap; background: var(--primary); color: #fff;
            border: 0.5px solid var(--primary-d); transition: background .15s; }
.ct-upbtn:hover { background: var(--primary-d); }


/* 新建合同：必填提示 */
.ct-form-tip { display: none; padding: 9px 13px; margin-bottom: 12px; border-radius: 8px;
               background: #fdeeee; color: #b3363b; border: 0.5px solid #f5d3d5;
               font-size: 13px; line-height: 1.6; }
.ct-miss { outline: 2px solid #df4a50; outline-offset: 1px; border-radius: 6px;
           transition: outline-color .2s; }


/* 合同：主操作按钮统一右对齐 */
.ct-save { display: flex; justify-content: flex-end; gap: 8px; }

/* ---- 招标信息看板 ---- */
.bid-grid .c-plat{width:92px;white-space:nowrap;color:var(--ink-2);font-size:12.5px}
.bid-grid .c-money{width:104px;white-space:nowrap}
.bid-grid .c-dl{width:96px;white-space:nowrap}
.bid-grid .c-pub{width:62px;white-space:nowrap;color:var(--ink-3);font-size:12.5px}
.bid-grid .c-doc{width:50px;text-align:center}
.bid-grid .c-st{width:92px}
.bid-grid .c-star{width:34px;text-align:center}
.bid-grid .c-dl.warn{color:#b42318;font-weight:600}
.bid-yes{color:#0b7a45;font-size:12.5px}
.bid-star{border:0;background:none;cursor:pointer;font-size:15px;color:#c3c9d4;
  padding:0 4px;line-height:1}
.bid-star.on{color:#e8a33d}
.bid-star:hover{color:#e8a33d}

.pill.bid-open{background:#e8f6ee;color:#0b7a45}
.pill.bid-closing{background:#fdecea;color:#b42318}
.pill.bid-closed{background:#f1f3f7;color:#5f6878}
.pill.bid-opened{background:#eef2ff;color:#2f4bb8}
.pill.bid-unknown{background:#fdf3e3;color:#b54708}
.pill.bid-nodl{background:#f7f7f8;color:#a0a5ad}
.bid-clean{padding:2px 18px 16px;display:flex;flex-direction:column;gap:14px}
.bid-clean-row{display:flex;align-items:center;gap:16px;justify-content:space-between;
  padding:12px 0;border-bottom:1px solid #f1f3f7}
.bid-clean-row:last-child{border-bottom:0}
.bid-clean-tx{min-width:0}
.bid-clean-tx b{font-size:14px}
.bid-clean-tx p{margin:4px 0 0;max-width:640px;line-height:1.6}
.pill.bid-done{background:#e8f6ee;color:#0b7a45}
.pill.bid-partial{background:#fdf3e3;color:#b54708}
.pill.bid-fail{background:#fdecea;color:#b42318}
.pill.bid-running,.pill.bid-queued{background:#eef2ff;color:#2f4bb8}

.tag-ok{background:#e8f6ee;color:#0b7a45;border-color:transparent}
.tag-warn{background:#fdf3e3;color:#b54708;border-color:transparent}

.bid-kv{display:grid;grid-template-columns:96px 1fr 96px 1fr;gap:0;margin:0;padding:8px 18px 14px}
.bid-kv dt{font-size:12.5px;color:var(--ink-3);padding:7px 0}
.bid-kv dd{margin:0;padding:7px 12px 7px 0;font-size:13.5px}
.bid-kv dd.warn{color:#b42318;font-weight:600}

.bid-summary{padding:4px 18px 16px;font-size:13.5px;line-height:1.8;color:var(--ink-2);
  white-space:pre-wrap}
.bid-body{margin-top:8px;padding:12px 14px;background:#f7f8fa;border-radius:8px;
  font-size:13px;line-height:1.8;color:var(--ink-2);white-space:pre-wrap;
  max-height:360px;overflow:auto}
.bid-more summary{cursor:pointer;font-size:12.5px;color:var(--primary);list-style:none}
.bid-more summary::-webkit-details-marker{display:none}

.bid-meta{display:flex;flex-wrap:wrap;gap:16px;padding:0 18px 16px;font-size:12.5px;
  color:var(--ink-3)}
.bid-ext{font-size:11px;padding:2px 6px;border-radius:4px;background:#eef2ff;
  color:#2f4bb8;flex-shrink:0}

.bid-note{margin:0 0 14px;padding:10px 14px;border-radius:10px;background:#f5f8ff;
  border:1px solid #dbe4ff;font-size:13px;color:#2f4bb8;line-height:1.7}
.bid-note code{font-family:ui-monospace,Menlo,monospace;font-size:12px;background:#fff;
  padding:1px 5px;border-radius:4px}

.bid-plat-tb .c-on,.bid-plat-tb .c-nb,.bid-plat-tb .c-pg,
.bid-plat-tb .c-ok,.bid-plat-tb .c-fail{width:76px;white-space:nowrap}
.bid-plat-tb tr.bid-bad td{background:#fff8f7}
.bid-inline{display:flex;gap:6px;align-items:center}
.bid-inline .input{flex:1;min-width:0}
.bid-inline .bid-pages{flex:0 0 64px;width:64px}

.bid-people{display:flex;flex-wrap:wrap;gap:8px;padding:2px 18px 12px}
.bid-person{display:flex;align-items:center;gap:6px;background:#f7f8fa;
  border-radius:999px;padding:4px 6px 4px 12px;font-size:13px}
.bid-x{border:0;background:none;cursor:pointer;color:#98a2b3;font-size:15px;
  line-height:1;padding:0 4px}
.bid-x:hover{color:#b42318}
.bid-add{display:flex;gap:8px;padding:0 18px 16px}

@media (max-width:900px){
  .bid-grid .c-plat,.bid-grid .c-pub{display:none}
  .bid-kv{grid-template-columns:84px 1fr}
  .bid-kv dd{padding-right:0}
}

/* 招标看板：关注词 / 命中标记 / 公司重点 */
.bid-kws{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin:0 0 14px}
.bid-kws-lb{font-size:12px;color:#98a2b3;margin-right:2px}
.bid-kw{display:inline-flex;align-items:center;gap:4px;padding:5px 12px;border-radius:999px;
  background:#f4f5f8;border:1px solid transparent;color:#475467;font-size:13px;
  text-decoration:none;line-height:1.2}
.bid-kw b{font-weight:500;color:#98a2b3;font-size:12px}
.bid-kw:hover{background:#eceef3;color:#1c2436}
.bid-kw.on{background:#e8f2ff;border-color:#bcd7fb;color:#0d5aa7}
.bid-kw.on b{color:#0d5aa7}
.bid-kw.plain{border-style:dashed;border-color:#d7dbe3;background:transparent}
.bid-hitword{display:inline-block;padding:1px 6px;margin-right:4px;border-radius:4px;
  background:#eef6ff;color:#1763c0;font-size:11px;line-height:16px;vertical-align:1px}
.bid-key-badge{display:inline-block;padding:1px 6px;margin-right:6px;border-radius:4px;
  background:#fdf0e2;color:#b54708;font-size:11px;line-height:16px;vertical-align:1px;font-weight:500}
.tag-key{background:#fdf0e2;color:#b54708;border-color:transparent}
.bid-kwlist{display:flex;flex-wrap:wrap;gap:8px;padding:2px 18px 12px}
.bid-kwrow{display:flex;align-items:center;gap:6px;background:#f7f8fa;border:1px solid #eef0f4;
  border-radius:8px;padding:5px 6px 5px 12px}
.bid-kwrow.off{opacity:.5}
.bid-kw-name{font-size:13px;color:#1c2436;min-width:52px}
.bid-kwrow .bid-mode{flex:0 0 auto;width:auto;padding:3px 6px;font-size:12px}

@media (max-width:900px){
  .bid-kws{gap:6px}
  .bid-kw{padding:4px 10px;font-size:12px}
}

/* 公司重点：列表行内直接标记，不用进详情页 */
.bid-keybtn{border:1px solid #e3e7ee;background:#fff;border-radius:6px;cursor:pointer;
  font-size:11px;line-height:1;color:#8a93a5;padding:3px 6px;margin-top:3px;
  transition:all .15s ease}
.bid-keybtn:hover{color:#b54708;border-color:#f6c99b;background:#fdf7f0}
.bid-keybtn.on{background:#b54708;border-color:#b54708;color:#fff}
.bid-star{display:block;margin:0 auto}
.c-star{width:64px;white-space:nowrap}
.bid-city{display:inline-block;background:#eef4ff;color:#2f5fa8;border-radius:4px;
  padding:0 5px;margin-right:6px;font-size:11px;line-height:16px}
/* ============ 招标看板 P5：筛选/排序分离、清理弹窗、关注词页、接口 Key ============ */

/* 筛选条：左边是筛选，右边是排序，中间一条竖线隔开 */
.bid-filter{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:12px;
  background:#fff;border:1px solid var(--line);border-radius:12px;padding:10px 12px}
.bf-filters{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.bid-filter .input,.bid-filter select{height:34px;font-size:13px;border-radius:8px}
.bid-filter .input:focus,.bid-filter select:focus{border-color:var(--primary);
  box-shadow:0 0 0 3px var(--primary-soft);outline:none}
.bf-in{position:relative;display:inline-flex}
.bf-in input{width:248px;padding-right:34px}
.bf-go{position:absolute;right:3px;top:3px;width:28px;height:28px;border:0;background:transparent;
  border-radius:6px;cursor:pointer;display:flex;align-items:center;justify-content:center;
  color:var(--ink-3);padding:0}
.bf-go:hover{background:var(--primary-soft);color:var(--primary)}
.bf-go svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:1.8;
  stroke-linecap:round}
.bf-sort{display:flex;align-items:center;gap:6px;margin-left:auto;padding-left:12px;
  border-left:1px solid var(--line)}
.bf-sort-lb{font-size:12px;color:var(--ink-3);white-space:nowrap}
.bf-sort select{font-weight:550}
.bf-clear{font-size:12.5px;color:var(--ink-3);text-decoration:none;white-space:nowrap}
.bf-clear:hover{color:var(--primary)}

/* 数据清理卡片 + 弹窗 */
.clean-card{display:flex;align-items:center;gap:20px;padding:4px 18px 18px;flex-wrap:wrap}
.clean-figure{display:flex;flex-direction:column;align-items:center;justify-content:center;
  min-width:126px;padding:14px 16px;border-radius:12px;background:#f7f8fa;
  border:1px solid #eef0f4}
.clean-figure b{font-size:27px;line-height:1.1;color:var(--ink);font-variant-numeric:tabular-nums}
.clean-figure span{font-size:11.5px;color:var(--ink-3);margin-top:5px;text-align:center;
  line-height:1.4}
.clean-copy{flex:1 1 320px;min-width:220px}
.clean-copy p{margin:0 0 5px;font-size:13px;color:var(--ink-2);line-height:1.7}
.clean-copy p.small{font-size:12.5px;color:var(--ink-3)}

.clean-dlg{border:0;border-radius:16px;padding:0;width:min(452px,92vw);
  box-shadow:0 24px 64px rgba(16,24,40,.22);color:var(--ink);background:#fff}
.clean-dlg::backdrop{background:rgba(16,24,40,.42)}
.clean-dlg form{padding:20px 20px 16px}
.clean-dlg h3{margin:0 0 6px;font-size:16.5px;color:var(--ink)}
.clean-dlg p{margin:0 0 14px;font-size:12.5px;color:var(--ink-3);line-height:1.65}
.clean-opts{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-bottom:10px}
.clean-opt{display:flex;flex-direction:column;gap:2px;padding:9px 12px;border-radius:10px;
  border:1px solid var(--line-2);cursor:pointer;transition:border-color .15s,background .15s}
.clean-opt:hover{border-color:#c8d0e0}
.clean-opt.on{border-color:var(--primary);background:var(--primary-soft)}
.clean-opt input{accent-color:var(--primary);margin:0 0 2px;width:14px;height:14px}
.clean-opt .co-d{font-size:13px;font-weight:600;color:var(--ink)}
.clean-opt .co-n{font-size:12px;color:var(--ink-3);font-variant-numeric:tabular-nums}
.clean-warn{margin:0 0 10px;font-size:12.5px;color:#b54708}
.clean-foot{display:flex;justify-content:flex-end;gap:8px;margin-top:8px}

/* 接口 Key */
.api-key{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.api-key code{font-family:ui-monospace,Menlo,monospace;font-size:12.5px;background:#f7f8fa;
  border:1px solid var(--line);padding:3px 8px;border-radius:6px;letter-spacing:.4px}
.api-reset{display:flex;align-items:center;gap:10px;padding:0 18px 16px;flex-wrap:wrap}

/* 关注词页 */
.kw-add{display:flex;gap:8px;padding:0 18px 12px;flex-wrap:wrap}
.kw-add .input[name=word]{flex:1 1 260px;min-width:180px}
.kw-preview{margin:0 18px 16px;padding:9px 12px;border-radius:9px;background:#f5f8ff;
  border:1px solid #dbe4ff;font-size:13px;color:#2f4bb8;line-height:1.6}
.kw-preview.dead{background:#fff8f2;border-color:#fbe0c8;color:#b54708}
.kw-preview b{font-weight:700}
.kw-list{padding:0 18px 16px;display:flex;flex-direction:column;gap:8px}
.kw-row{display:flex;align-items:center;gap:10px;padding:9px 12px;border-radius:10px;
  border:1px solid var(--line);background:#fff;flex-wrap:wrap}
.kw-row.off{opacity:.55}
.kw-name{flex:1 1 auto;min-width:130px;display:flex;align-items:center;gap:7px}
.kw-name b{font-size:14px;color:var(--ink)}
.kw-tag{font-size:11px;padding:1px 7px;border-radius:999px;background:#f2f4f7;color:var(--ink-3);
  white-space:nowrap}
.kw-tag.dead{background:#fff4e8;color:#b54708}
.kw-num{width:76px;text-align:center;display:flex;flex-direction:column;gap:1px}
.kw-num b{font-size:15px;color:var(--ink);font-variant-numeric:tabular-nums}
.kw-num span{font-size:11px;color:var(--ink-3)}
.kw-num.dim b{color:#b0b7c3}
.kw-row .bid-mode{width:auto;padding:3px 6px;font-size:12px;height:30px}
.kw-empty{padding:24px;text-align:center;color:var(--ink-3)}
.kw-empty p{margin:0 0 4px;font-size:13.5px;color:var(--ink-2)}
.kw-empty span{font-size:12.5px}
.kw-log .c-time{width:110px;color:var(--ink-3);font-variant-numeric:tabular-nums;white-space:nowrap}
.kw-log .c-act{width:126px}
.kw-log .c-who{width:110px;color:var(--ink-2)}
.kw-act{font-size:12px;padding:1px 8px;border-radius:999px;background:#f2f4f7;color:var(--ink-2);
  white-space:nowrap}
.kw-act.add{background:var(--ok-soft);color:#0b7a45}
.kw-act.del{background:#fdeceb;color:#b42318}

@media (max-width:900px){
  .bid-filter{gap:8px}
  .bf-in,.bf-in input{width:100%}
  .bf-filters{width:100%}
  .bf-sort{margin-left:0;padding-left:0;border-left:0;border-top:1px solid var(--line);
    padding-top:8px;width:100%}
  .bf-clear{margin-left:auto}
  .clean-card{gap:12px}
  .clean-figure{min-width:0;flex:1 1 100%;flex-direction:row;gap:8px}
  .clean-figure b{font-size:22px}
  .clean-figure span{margin-top:0}
  .kw-num{width:64px}
  .kw-row .kw-name{flex:1 1 100%}
}
/* ===== P5b 筛选条（方案三·极简三件套）：搜索 + 平台 + 排序 ===== */
.bid-filter{gap:8px;padding:9px 10px;border-radius:12px;border:1px solid var(--line);
  background:#fff}
.bid-filter .bf-in{position:relative;display:inline-flex}
.bid-filter .bf-in input{width:290px;height:34px;padding:0 34px 0 12px;border:0;
  border-radius:9px;background:#f2f4f7;font-size:13px;color:var(--ink)}
.bid-filter .bf-in input::placeholder{color:#9aa3b2}
.bid-filter .bf-in input:focus{background:#fff;box-shadow:0 0 0 2px var(--primary-soft);
  border:0}
.bf-go{right:4px;top:4px;width:26px;height:26px;color:#98a2b3;border-radius:7px}
.bf-go:hover{background:#e8ecf3;color:var(--primary)}
.bid-filter .bf-plat{height:34px;border:0;border-radius:9px;font-size:13px;color:#3a4250;
  padding:0 32px 0 12px;appearance:none;-webkit-appearance:none;background-color:#f2f4f7;
  background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M1 1l4 4 4-4' fill='none' stroke='%2398a2b3' stroke-width='1.5' stroke-linecap='round'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right 12px center}
.bid-filter .bf-plat:focus{background-color:#fff;border:0;
  box-shadow:0 0 0 2px var(--primary-soft)}
.bf-sort{margin-left:auto;border-left:1px solid var(--line);padding-left:14px;gap:2px;
  display:flex;align-items:center}
.bf-sort-lb{font-size:12.5px;color:#9aa3b2}
.bf-sel{position:relative;display:inline-flex;align-items:center}
.bf-sel::after{content:"";position:absolute;right:3px;top:50%;transform:translateY(-30%);
  border-left:4px solid transparent;border-right:4px solid transparent;
  border-top:5px solid #98a2b3;pointer-events:none}
.bf-sort-sel{appearance:none;-webkit-appearance:none;border:0;background:transparent;
  font-size:13px;font-weight:600;color:var(--ink);height:30px;padding:0 17px 0 3px;
  cursor:pointer;outline:none;font-family:inherit}
.bf-sort-sel:hover{color:var(--primary)}
.bf-clear{padding-left:12px;border-left:1px solid var(--line);font-size:12.5px;
  color:var(--ink-3);text-decoration:none;white-space:nowrap}
.bf-clear:hover{color:var(--primary)}

@media (max-width:900px){
  .bid-filter{gap:8px;padding:8px}
  .bid-filter .bf-in{width:100%}
  .bid-filter .bf-in input{width:100%}
  .bf-sort{margin-left:0;padding-left:0;border-left:0;width:100%;
    border-top:1px solid var(--line);padding-top:8px}
  .bf-clear{margin-left:auto;border-left:0}
}

/* ===== P6：排序去标签 + 导出按钮 + 每日推送面板 ===== */
.bf-sort{padding-left:12px;padding-right:2px}
.bf-export{display:inline-flex;align-items:center;gap:5px;height:30px;padding:0 9px;
  margin-left:2px;border-radius:8px;font-size:12.5px;color:var(--ink-3);
  text-decoration:none;white-space:nowrap;transition:background .15s,color .15s}
.bf-export svg{width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:1.8;
  stroke-linecap:round;stroke-linejoin:round}
.bf-export:hover{color:var(--primary);background:var(--primary-soft)}
.bf-export:active{transform:translateY(1px)}

.bid-push-set{display:flex;align-items:center;gap:14px;flex-wrap:wrap;padding:2px 0 14px}
.bid-switch{display:inline-flex;align-items:center;gap:7px;font-size:13px;
  color:var(--ink);cursor:pointer;user-select:none}
.bid-switch input{width:16px;height:16px;accent-color:var(--primary);cursor:pointer;margin:0}
.bid-push-at{display:inline-flex;align-items:center;gap:6px;font-size:13px;color:var(--ink-3)}
.bid-push-at .input{height:32px;font-size:13px;border-radius:8px;padding:0 8px;
  border:1px solid var(--line);background:#fff}
.bid-push-set .btn{height:32px;padding:0 14px;font-size:13px;border-radius:8px}
.bid-push-log{margin-top:4px}
.bid-push-log th{font-size:11.5px;font-weight:600;color:var(--ink-3);
  background:#f7f8fa;border-bottom:1px solid var(--line)}
.bid-push-log td{font-size:12.5px;border-bottom:1px solid #f2f4f7}

@media (max-width:900px){
  .bf-sort{padding-left:0;padding-right:0;border-left:0;width:auto;border-top:0;
    padding-top:0;margin-left:auto}
  .bf-export{margin-left:0}
  .bid-push-set{gap:10px}
  .bid-push-set .btn{flex:1 1 auto}
}

/* 招标看板有 6 张统计卡，设备点检那套是 5 列，这里单独覆盖 */
.bid-stats{grid-template-columns:repeat(5,1fr)}
@media (max-width:1280px){ .bid-stats{grid-template-columns:repeat(3,1fr)} }
@media (max-width:760px){ .bid-stats{grid-template-columns:repeat(2,1fr)} }

/* ===== P7：平台探测列 + 地址来源弹窗 + 新增地址 ===== */
/* 固定布局：地址列吃掉剩余宽度，不然 URL 被压成一小截，看不出是哪个站 */
.bid-plat-tb{table-layout:fixed}
.bid-plat-tb td{overflow:hidden}
/* 列宽统一由 <colgroup> 决定，这里只负责对齐，避免两处宽度打架 */
.c-probe,.c-on{text-align:center}
.c-info{text-align:center;padding-left:0;padding-right:0}
/* 「上次成功」右留气口，否则时间戳和右边「连续失败」的 0 粘在一起 */
.bid-plat-tb td.c-ok{padding-right:12px}
/* 末列：ⓘ 看详情 + × 直接移除，两枚小按钮并排 */
.bid-ops{display:flex;align-items:center;justify-content:center;gap:3px}
.bid-ops form{display:flex;margin:0;padding:0}
.bid-ops .bid-x{font-size:14px;line-height:1;padding:0 1px}

.bid-plat-tb .bid-inline{display:flex;align-items:center;gap:6px;flex-wrap:nowrap}
.bid-plat-tb .bid-inline .input{min-width:0;flex:1 1 auto;height:30px;font-size:12.5px}
/* 「页数」是数字输入框，必须压回小尺寸，否则会被上面那条 .input 规则撑大 */
.bid-plat-tb .bid-inline .bid-pages{flex:0 0 34px;width:34px;text-align:center;padding:0}
.bid-plat-tb .bid-pg-lb{flex:0 0 auto;font-size:11px;color:#98a2b3;margin-left:-2px}
.bid-plat-tb .btn.small{height:30px;padding:0 9px;font-size:12px;white-space:nowrap}
/* 最近错误 / 平台 key 这类次要文字截断，把宽度让给地址输入框 */
.bid-plat-tb td.cell-sub{max-width:190px;overflow:hidden;text-overflow:ellipsis;
  white-space:nowrap;color:var(--ink-3)}
.bid-plat-tb .tag{white-space:nowrap}

.bid-info{width:20px;height:20px;border-radius:50%;border:1px solid var(--line-2);
  background:#fff;color:#98a2b3;font-size:11px;font-style:italic;font-weight:700;
  line-height:1;display:inline-grid;place-items:center;cursor:pointer;
  font-family:Georgia,"Times New Roman",serif;transition:.13s;padding:0}
.bid-info:hover{border-color:var(--primary);color:var(--primary);
  background:var(--primary-soft);box-shadow:0 0 0 3px var(--primary-soft)}

.tag.bad{background:#fdecec;color:#c93a3f;border-color:#f8d6d7}
.tag.mute{background:#f4f5f7;color:#8b95a5;border-color:#e6e8ec}

.bid-plat-add{margin-top:14px;padding-top:14px;border-top:1px dashed var(--line)}
.bid-plat-add .input{flex:1 1 0;min-width:0}
.bid-plat-add .input:nth-child(1){flex:0 0 210px}
.bid-plat-tip{margin-top:9px;line-height:1.65}
.bid-plat-tip b{color:var(--ink-2);font-weight:600}

.bid-dlg{width:min(540px,calc(100vw - 28px))}
.bid-kv{display:grid;grid-template-columns:88px 1fr;gap:0;margin:0;
  border:1px solid var(--line);border-radius:10px;overflow:hidden}
.bid-kv dt{padding:9px 12px;font-size:12.3px;color:var(--ink-3);background:#f8f9fb;
  border-bottom:1px solid var(--line);font-weight:550}
.bid-kv dd{padding:9px 12px;font-size:12.8px;color:var(--ink);margin:0;
  border-bottom:1px solid var(--line);word-break:break-all;line-height:1.55}
.bid-kv dd:last-of-type{border-bottom:none}
.bid-del-form{margin-right:auto}
.bid-del-btn{min-width:0;padding:0 12px;color:#c93a3f;border-color:#f2d3d4}
.bid-del-btn:hover{background:#fdecec;color:#b32f34;border-color:#eebfc1}

@media (max-width:900px){
  .bid-plat-tb .cell-sub{display:none}
  .bid-plat-tb .bid-inline{flex-wrap:wrap}
  .bid-plat-tb .bid-inline .input{flex:1 1 100%}
  .bid-plat-add{flex-wrap:wrap}
  .bid-plat-add .input{flex:1 1 100%}
  .bid-kv{grid-template-columns:1fr}
  .bid-kv dt{padding-bottom:2px;border-bottom:none;background:none;font-size:11.5px}
  .bid-kv dd{padding-top:2px}
}

/* ===== P8：聚合站（乙方宝）线索回查 ===== */
.bid-agg{margin-top:16px;padding-top:14px;border-top:1px dashed var(--line)}
.bid-agg-hd{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap}
.bid-agg-hd b{font-size:13.5px;color:var(--ink)}
.bid-agg-num{display:flex;gap:26px;margin:12px 0 2px;font-size:12.5px;color:var(--ink-3)}
.bid-agg-num i{font-style:normal;font-size:19px;font-weight:700;color:var(--ink);
  margin-right:5px;line-height:1}
.bid-agg-num .ok i{color:#12805c}
.bid-agg-num .warn i{color:#b25e09}
.bid-agg-num .bad i{color:#c93a3f}
.bid-agg-ops{display:flex;align-items:center;gap:10px;margin-top:12px;flex-wrap:wrap}
.bid-agg-ops form{display:flex;align-items:center;gap:8px;margin:0}
.bid-agg-ops .input{height:32px;font-size:12.5px;width:auto;min-width:112px;padding:0 8px}
.bid-agg-tip{margin-top:11px;line-height:1.7;max-width:860px}
.bid-agg-tip b{color:var(--ink-2);font-weight:600}

/* ===== P9：噪音过滤 + 人工核验 ===== */
/* 看板顶部那条「已过滤 N 条」的提示。默认是一行灰字 + 一个「查看」，
   切到已过滤视图才变成一排分组 chip，不占常态空间。 */
.bid-noisebar{display:flex;align-items:center;gap:9px;flex-wrap:wrap;
  margin:0 0 12px;padding:7px 12px;border-radius:8px;
  background:var(--bg-2);border:1px solid var(--line);font-size:12.5px;color:var(--ink-3)}
.bid-noisebar.on{background:#fdf7e8;border-color:#f3e2b8}
.bid-nb-lb{color:var(--ink-3);font-weight:600}
.bid-nb-txt b{color:var(--ink);font-weight:700;margin:0 1px}
.bid-nb-a{margin-left:auto;color:var(--primary);font-weight:600;white-space:nowrap}
.bid-nb-a:hover{text-decoration:underline}
.bid-nb-chip{padding:3px 9px;border-radius:20px;background:#fff;border:1px solid var(--line);
  color:var(--ink-2);white-space:nowrap;line-height:1.5}
.bid-nb-chip b{font-weight:700;margin-left:2px;color:var(--ink)}
.bid-nb-chip:hover{border-color:var(--primary);color:var(--primary)}
.bid-nb-chip.on{background:var(--primary);border-color:var(--primary);color:#fff}
.bid-nb-chip.on b{color:#fff}
.bid-nb-back{margin-left:auto;color:var(--ink-3);white-space:nowrap}
.bid-nb-back:hover{color:var(--primary)}
/* 列表行里的「为什么被过滤」标签 */
.bid-noise-tag{display:inline-block;padding:0 6px;margin-right:5px;border-radius:4px;
  background:#fdecec;color:#c93a3f;border:1px solid #f8d6d7;font-size:11.5px;line-height:17px}

/* 详情页人工核验 */
.bid-vf{padding:2px 18px 16px}
.bid-vf-now{margin:0 0 12px;font-size:13px;color:var(--ink-2);line-height:1.7}
.bid-vf-row{margin-bottom:9px}
.bid-vf-row .input{width:100%;height:34px;font-size:13px}
.bid-vf-acts{display:flex;gap:9px;flex-wrap:wrap;margin-top:2px}
.bid-vf-acts .btn{height:34px}
.bid-vf-tip{margin-top:11px;line-height:1.7;max-width:760px}

/* 采集管理页的噪音规则表 */
.bid-nrule{margin-top:14px}
.bid-nrule td,.bid-nrule th{font-size:12.5px;padding-top:7px;padding-bottom:7px;vertical-align:middle}
.bid-nrule tr.nr-off td{opacity:.45}
.bid-nrule .nr-grp{color:var(--ink);font-weight:600;white-space:nowrap}
.bid-nrule .nr-word{color:var(--ink-2);font-size:12px;line-height:1.6;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.bid-nrule .nr-req{font-size:11.5px;line-height:1.65;color:var(--ink-3)}
.bid-nrule .nr-req span{display:block}
.bid-nrule .nr-req span.bad{color:#c93a3f}
.bid-nrule .nr-note{font-size:11.5px;color:var(--ink-3);line-height:1.6;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.bid-nrule form{margin:0}
.bid-sw{width:34px;height:22px;border-radius:11px;border:1px solid var(--line);
  background:var(--bg-2);color:var(--ink-3);font-size:11px;line-height:1;
  padding:0;cursor:pointer;transition:background .15s}
.bid-sw.on{background:#12805c;border-color:#12805c;color:#fff}
.bid-sw:hover{border-color:var(--primary)}
.bid-nr-add{display:flex;gap:8px;align-items:center;flex-wrap:wrap;
  margin-top:13px;padding-top:13px;border-top:1px dashed var(--line)}
.bid-nr-add .input{height:32px;font-size:12.5px;width:auto}
.bid-nr-add select.input{min-width:118px}
.bid-nr-add .nr-w{min-width:250px;flex:1 1 250px}
.bid-nr-add .nr-w2{min-width:126px;flex:0 1 150px}
.bid-nr-add .nr-w3{min-width:150px;flex:0 1 180px}
.bid-nr-add .btn{height:32px;white-space:nowrap}

/* ===== P10：核验弹窗 + 线索沉底 ===== */
/* 「确实查不到 / 跟我们无关」两个不可逆判定从主面板收进弹窗，
   面板上只留一行浅色入口，避免手滑误标。 */
.bid-vf-other{margin:11px 0 0;font-size:12.5px;color:var(--ink-3)}
.linkish{background:none;border:none;padding:0;margin-left:4px;font:inherit;
  color:var(--primary);cursor:pointer;text-decoration:underline;text-underline-offset:2px}
.linkish:hover{opacity:.8}
.bid-vf-dlg{max-width:520px}
.bid-vf-dlg .bid-vf-dlg-t{margin:0 0 13px;font-size:13px;line-height:1.65;color:var(--ink-2)}
.bid-vf-dlg .bid-vf-dlg-t span{font-size:12.5px}
.bid-vf-opt{display:flex;gap:10px;align-items:flex-start;padding:10px 12px;margin-bottom:9px;
  border:1px solid var(--line);border-radius:8px;cursor:pointer;background:var(--bg-2)}
.bid-vf-opt:hover{border-color:var(--primary)}
.bid-vf-opt input{margin-top:3px;flex:0 0 auto;accent-color:var(--primary)}
.bid-vf-opt b{display:block;font-size:13px;color:var(--ink);font-weight:600;margin-bottom:2px}
.bid-vf-opt em{display:block;font-style:normal;font-size:12px;line-height:1.6;color:var(--ink-3)}
.bid-vf-opt:has(input:checked){border-color:var(--primary);background:#eef4ff}
.bid-vf-opt:has(input:checked) b{color:var(--primary)}
.bid-vf-dlg .input{width:100%;margin-top:2px}

/* ===== P11：每页条数 + 统计卡回 5 列 ===== */
/* 分页器尾部「每页 10 20 30 条」选择 */
.tp-per{margin-left:auto;display:inline-flex;align-items:center;gap:5px;
  color:var(--ink-3);font-size:12.5px}
.tp-per .tp-btn{padding:2px 8px;border-radius:6px}
.tp-per .tp-btn.on{background:var(--primary);color:#fff;border-color:var(--primary)}

/* ===== P12：分页器 A1（居中聚拢）===== */
/* 整条固定 32px 高、内容聚在正中，竖线分段。行数变了也不位移。 */
.tpager{display:flex;align-items:center;justify-content:center;gap:10px;
  min-height:32px;margin:14px 0 0;font-size:13px}
.tpager .tp-info{white-space:nowrap}
.tp-sep{width:1px;height:16px;background:var(--line);flex:0 0 auto}
.tpager .tp-btn{min-width:30px;padding:0 9px;height:30px;line-height:1;
  display:inline-flex;align-items:center;justify-content:center}
.tp-sel select{height:30px;font-size:13px;padding:0 22px 0 8px;
  border:0.5px solid var(--line);border-radius:6px;background:var(--bg,#fff);
  color:var(--ink);cursor:pointer}
.tp-sel select:hover{border-color:var(--primary)}

/* 列表行固定高度：摘要长短不一行就不齐，分页器会跟着上下跑 */
.bid-grid tbody td{height:52px;box-sizing:border-box}
.bid-grid .c-vf{width:64px;text-align:center}

/* 详情页按钮：主按钮在最左、返回在最右（去掉箭头） */
.bid-dacts{justify-content:flex-start;flex-wrap:wrap;gap:8px}
.bid-dacts .btn,.bid-dacts > form{height:34px}
.bid-dacts > form{display:flex}
.bid-dacts > a:last-child{margin-left:auto}
