:root{
  --bg:#070b0f; --bg2:#0c1319; --card:#111a22; --card2:#16222c;
  --line:#1e2f3c; --line2:#2a4152;
  --tx:#e6f2f6; --tx2:#8fa8b6; --tx3:#5d7686;
  --cy:#22d3ee; --cy2:#0ea5b7; --cy3:#67e8f9;
  --up:#f05252; --dn:#22c55e;
  --hi:#f0554d; --mid:#f5a524; --lo:#38bdf8;
  --r:12px;
}
*{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%}
body{
  background:var(--bg);color:var(--tx);
  font:14px/1.6 -apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;
  -webkit-font-smoothing:antialiased;
}
#app{display:flex;flex-direction:column;height:100vh;overflow:hidden}
main{flex:1;min-height:0;overflow:hidden;padding:20px}
#view{height:100%;overflow:auto}
.table-view{display:flex;flex-direction:column;height:100%;overflow:hidden}
.table-view .filters{flex-shrink:0;margin-bottom:10px}
.table-view .tbl-wrap{flex:1;min-height:0;max-height:none;border-radius:10px;border:1px solid var(--line);overflow:auto}
.oplog-tbl thead th{position:sticky;top:0;z-index:2;background:#0c171e}
.hidden{display:none !important}
button{font-family:inherit;cursor:pointer;border:0;background:none;color:inherit}
input,select,textarea{font-family:inherit;font-size:13px}
::-webkit-scrollbar{width:9px;height:9px}
::-webkit-scrollbar-thumb{background:#22384a;border-radius:6px}
::-webkit-scrollbar-thumb:hover{background:#2f4d63}
::-webkit-scrollbar-track{background:transparent}

/* ---------- 登录 ---------- */
.login-wrap{min-height:100vh;display:flex;align-items:center;justify-content:center;
  background:radial-gradient(1100px 620px at 50% -10%,#0d2b33 0%,#070b0f 60%)}
.login-card{width:400px;padding:44px 40px;background:var(--card);
  border:1px solid var(--line);border-radius:18px}
.brand{text-align:center;font-size:12px;letter-spacing:3px;color:var(--cy);margin-bottom:20px}
.login-title{text-align:center;font-size:26px;font-weight:700;letter-spacing:1px;
  background:linear-gradient(100deg,#67e8f9,#22d3ee 45%,#0ea5b7);
  -webkit-background-clip:text;background-clip:text;color:transparent}
.login-sub{text-align:center;font-size:12px;color:var(--cy2);margin:8px 0 26px;letter-spacing:1px}
.fld{display:block;margin-bottom:16px}
.fld span{display:block;font-size:12px;color:var(--tx2);margin-bottom:7px}
.fld input,.fld select,.fld textarea{width:100%;padding:11px 13px;background:#0a1218;
  border:1px solid var(--line2);border-radius:9px;color:var(--tx);outline:none;transition:.15s}
.fld input:focus,.fld select:focus,.fld textarea:focus{border-color:var(--cy);background:#0b1a21}
.fld input[type="date"],.fld input[type="month"]{color-scheme:dark;min-height:42px;cursor:pointer}
.btn-primary{width:100%;padding:12px;border-radius:10px;font-size:14px;font-weight:600;color:#04222a;
  background:linear-gradient(100deg,#67e8f9,#22d3ee 50%,#0ea5b7);transition:.15s}
.btn-primary:hover{filter:brightness(1.1)}
.btn-primary em{font-style:normal;margin-left:5px}
.err{color:#f87171;font-size:12px;min-height:18px;margin-bottom:8px}
.login-tip{margin-top:18px;text-align:center;font-size:11px;color:var(--tx3);line-height:1.7}

/* ---------- 顶栏 ---------- */
.topbar{position:sticky;top:0;z-index:40;display:flex;align-items:center;gap:18px;
  padding:0 20px;height:56px;background:rgba(9,15,20,.94);backdrop-filter:blur(12px);
  border-bottom:1px solid var(--line)}
.tb-left{display:flex;align-items:center;gap:10px;flex-shrink:0}
.logo{font-weight:800;font-size:15px;letter-spacing:1px;
  background:linear-gradient(100deg,#67e8f9,#0ea5b7);-webkit-background-clip:text;background-clip:text;color:transparent}
.tb-title{font-size:14px;font-weight:600;color:var(--tx)}
.tb-year{font-size:11px;color:var(--tx3);border:1px solid var(--line2);padding:1px 7px;border-radius:20px}
.tabs{display:flex;gap:2px;flex:1;overflow-x:auto}
.tab{padding:8px 15px;font-size:13px;color:var(--tx2);border-radius:8px;white-space:nowrap;
  border-bottom:2px solid transparent;transition:.15s}
.tab:hover{color:var(--tx);background:#101c25}
.tab.active{color:var(--cy3);border-bottom-color:var(--cy);background:#0d1c24}
.tb-right{display:flex;align-items:center;gap:8px;flex-shrink:0}
.who{font-size:12px;color:var(--tx2)}
.who b{color:var(--cy3);font-weight:600}
.btn-ghost{padding:6px 11px;font-size:12px;color:var(--tx2);border:1px solid var(--line2);border-radius:7px;transition:.15s}
.btn-ghost:hover{color:var(--cy3);border-color:var(--cy2)}

/* ---------- 通用 ---------- */
.grid{display:grid;gap:14px}
.kpis{grid-template-columns:repeat(auto-fit,minmax(178px,1fr))}
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--r);padding:16px}
.card h3{font-size:13px;font-weight:600;color:var(--tx2);margin-bottom:11px;
  display:flex;align-items:center;justify-content:space-between;gap:8px}
.card h3::before{content:"";width:3px;height:14px;border-radius:2px;flex:none;
  background:linear-gradient(180deg,#67e8f9,#0ea5b7)}
.card h3 small{font-size:11px;color:var(--tx3);font-weight:400;margin-left:auto}
.kpi{position:relative;overflow:hidden;transition:.18s}
.kpi::before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;
  background:linear-gradient(180deg,#22d3ee,transparent);opacity:.55}
.kpi:hover{transform:translateY(-2px);border-color:var(--cy2);box-shadow:0 8px 26px rgba(14,165,183,.13)}
.kpi .lab{font-size:12px;color:var(--tx3);margin-bottom:8px;padding-right:44px}
.kpi .val{font-size:25px;font-weight:700;letter-spacing:-.5px;
  background:linear-gradient(100deg,#a5f3fc,#22d3ee);-webkit-background-clip:text;background-clip:text;color:transparent}
.kpi .val.plain{background:none;color:var(--tx);-webkit-text-fill-color:var(--tx)}
.kpi .unit{font-size:12px;color:var(--tx3);margin-left:3px;font-weight:400}
.kpi .sub{font-size:11px;color:var(--tx3);margin-top:6px}
.kpi-ic{position:absolute;right:13px;top:13px;width:32px;height:32px;display:flex;align-items:center;justify-content:center;
  border-radius:9px;background:rgba(34,211,238,.08);border:1px solid rgba(34,211,238,.16);color:var(--cy3)}
.kpi-ic svg{width:16px;height:16px;stroke:var(--cy3)}
.kpi:hover .kpi-ic{background:rgba(34,211,238,.16);border-color:rgba(34,211,238,.3)}

/* ---------- 总览横幅 ---------- */
.hero{position:relative;overflow:hidden;border:1px solid var(--line2);border-radius:16px;
  padding:22px 26px;margin-bottom:16px;display:flex;justify-content:space-between;align-items:center;gap:20px;
  background:linear-gradient(135deg,#0b1a22 0%,#0e2430 55%,#0a1720 100%)}
.hero::before{content:"";position:absolute;inset:0;pointer-events:none;
  background:
    radial-gradient(560px 220px at 88% -30%, rgba(34,211,238,.16), transparent 62%),
    radial-gradient(420px 180px at 8% 130%, rgba(14,165,183,.13), transparent 60%)}
.hero-glow{position:absolute;right:-70px;top:-90px;width:300px;height:300px;border-radius:50%;
  background:radial-gradient(circle,rgba(34,211,238,.14),transparent 65%);filter:blur(12px)}
.hero-left{position:relative;z-index:1}
.hero-kicker{font-size:10.5px;letter-spacing:4px;color:var(--cy3);opacity:.85;margin-bottom:8px}
.hero-title{font-size:25px;font-weight:800;letter-spacing:1.5px;
  background:linear-gradient(100deg,#a5f3fc,#22d3ee 55%,#0ea5b7);
  -webkit-background-clip:text;background-clip:text;color:transparent}
.hero-sub{font-size:12px;color:var(--tx2);margin-top:7px;letter-spacing:.3px}
.hero-right{position:relative;z-index:1;display:flex;gap:36px;align-items:flex-end}
.hero-num{text-align:right}
.hero-num b{display:block;font-size:31px;font-weight:800;letter-spacing:-.5px;color:#eaf6fa;
  font-variant-numeric:tabular-nums;line-height:1.15}
.hero-num b small{font-size:15px;color:var(--cy3);font-weight:600;margin-left:2px}
.hero-num span{font-size:11px;color:var(--tx3);letter-spacing:1px}
.sec{margin-top:16px}
.row{display:flex;gap:14px;flex-wrap:wrap}
.row>*{flex:1;min-width:300px}

/* 总览 6 大卡片：2 列 3 行，行高随内容自适应（同行等高），内容完整展示不内部滚动 */
.dash-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));grid-auto-rows:auto;gap:14px}
.dash-grid .card{display:flex;flex-direction:column;min-height:0}
.dash-grid .card h3{flex:none}
.dash-grid .funnel,.dash-grid .bu-list{flex:1;min-height:0;overflow:visible}
.dash-grid .mbar,.dash-grid .prb{flex:1;min-height:0;height:auto}
.dash-grid .mbar-bars,.dash-grid .prb-bars{height:auto;flex:1;min-height:150px}
.dash-grid .mbar-col,.dash-grid .prb-col{min-height:0}
.dash-grid .mbar-legend,.dash-grid .prb-legend,.dash-grid .pdb-legend{flex:none}

.bar-track{height:6px;background:#16232e;border-radius:4px;overflow:hidden;margin-top:8px}
.bar-fill{height:100%;background:linear-gradient(90deg,#0ea5b7,#22d3ee);border-radius:4px}

.tag{display:inline-block;padding:2px 8px;font-size:11px;border-radius:20px;
  background:#12242e;color:var(--cy3);border:1px solid #1d3d4a;white-space:nowrap}
.tag.hi{background:#2b1414;color:#fca5a5;border-color:#4d1f1f}
.tag.mid{background:#2b2210;color:#fcd34d;border-color:#4d3c14}
.tag.lo{background:#0f2536;color:#7dd3fc;border-color:#1c4059}
.tag.ok{background:#0e2a1d;color:#6ee7b7;border-color:#17452f}
.tag.gray{background:#1a222a;color:var(--tx3);border-color:#25313b}
/* 类别色标：均在青/蓝/teal 冷色族内，与整体风格一致但彼此可区分 */
.tag.cat-new{background:#0e2730;color:#22d3ee;border-color:#155e6b}  /* 新签：亮青 */
.tag.cat-add{background:#1f1635;color:#c4b5fd;border-color:#3b2a5f}  /* 增购：紫 */
.tag.cat-his{background:#2a1f0e;color:#fcd34d;border-color:#4a3618}  /* 历史：琥珀 */

.empty{padding:44px;text-align:center;color:var(--tx3);font-size:13px}

/* ---------- 事业部维护 ---------- */
.bu-name{font-weight:500;color:var(--tx)}
.bu-cnt{color:var(--tx3);font-size:12px;white-space:nowrap}
.muted{color:var(--tx3);font-style:italic}

/* ---------- 基础设置 hub ---------- */
.settings{display:flex;height:100%}
.set-nav{width:172px;flex:none;display:flex;flex-direction:column;gap:4px;padding:16px 10px;border-right:1px solid var(--line);overflow:auto}
.set-item{padding:11px 13px;text-align:left;background:transparent;border:1px solid transparent;border-radius:9px;color:var(--tx2);font-size:13.5px;cursor:pointer;transition:.12s}
.set-item:hover{background:rgba(34,211,238,.07);color:var(--tx)}
.set-item.active{background:rgba(34,211,238,.14);color:var(--cy3);border-color:rgba(34,211,238,.35);font-weight:600}
.set-body{flex:1;min-width:0;display:flex;flex-direction:column;padding:16px 20px;overflow:auto}
.set-body .tbl-wrap{flex:1;max-height:none}
.modal-note{font-size:13px;color:var(--tx2);margin:0 0 14px;line-height:1.6}
.modal-note b{color:var(--cy3)}
.rd{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--tx2);margin-bottom:12px;cursor:pointer}
.rd input{margin:0}
.rd select{margin-left:4px}

/* ---------- 表格 ---------- */
.tbl-wrap{overflow:auto;max-height:calc(100vh - 250px);border-radius:10px;border:1px solid var(--line)}
table{width:100%;border-collapse:collapse;font-size:12.5px}
.grid-tbl{table-layout:fixed;width:auto;min-width:100%}
th{position:sticky;top:0;z-index:2;background:#0f1a22;padding:10px 11px;text-align:left;
  font-weight:600;color:var(--tx2);white-space:nowrap;border-bottom:1px solid var(--line2);cursor:default;user-select:none}
th:hover{color:var(--cy3)}
th.sorted{color:var(--cy3)}
.col-title{cursor:pointer}
.col-grip{cursor:grab;opacity:.45;margin-right:5px;font-size:12px;line-height:1;user-select:none;
  vertical-align:middle;transition:opacity .15s ease;touch-action:none}
.col-grip:hover{opacity:1}
.col-grip:active{cursor:grabbing}
th.dragging{opacity:.4;background:#0c161d}
th.drop-before{box-shadow:inset 3px 0 0 var(--cy2)}
th.drop-after{box-shadow:inset -3px 0 0 var(--cy2)}
.col-resize{position:absolute;top:0;right:0;height:100%;width:8px;cursor:col-resize;z-index:3}
.col-resize:hover{background:rgba(34,211,238,.22)}
.grid-tbl.col-resizing{user-select:none;cursor:col-resize}
.grid-tbl.col-resizing *{cursor:col-resize !important}

/* 合计行：金额类随筛选自动求和，吸底保持可见 */
.grid-tbl tfoot td{position:sticky;bottom:0;z-index:4;background:#0b1a22;border-top:2px solid #155e6b;
  padding:9px 11px;font-size:12.5px;color:#9fe9f5;font-weight:600;white-space:nowrap}
.grid-tbl tfoot .tot-label{color:#67e8f9}
.grid-tbl tfoot .tot-val{color:#22d3ee}

/* 左侧冻结列：横向滚动时前 N 列保持可见（left 由 JS 按实际列宽动态计算） */
.grid-tbl th{z-index:4}
.grid-tbl td.frz{position:relative;z-index:3;background:var(--bg)}
.grid-tbl tbody tr:hover td.frz{background:#0f1c25}
.grid-tbl th.frz{z-index:6}
.grid-tbl tfoot td.frz{z-index:5;background:#0b1a22}
/* 最后一根冻结列右侧的分隔线 + 投影（用 box-shadow，避免被 td 的 overflow:hidden 裁掉） */
.grid-tbl .frz-last{box-shadow:inset -1px 0 0 var(--line2),8px 0 12px -7px rgba(0,0,0,.95)}
/* 拖拽换列时的落点指示线要盖过冻结列的投影 */
.grid-tbl th.drop-before{box-shadow:inset 3px 0 0 var(--cy2)}
.grid-tbl th.drop-after{box-shadow:inset -3px 0 0 var(--cy2)}

/* 套餐多选下拉 */
.msel{position:relative;border:1px solid var(--line2);border-radius:7px;background:#0e1a22;min-width:180px;font-size:12.5px}
.msel>summary{list-style:none;cursor:pointer;padding:8px 30px 8px 11px;color:var(--tx);position:relative;user-select:none}
.msel>summary::-webkit-details-marker{display:none}
.msel>summary::after{content:"▾";position:absolute;right:11px;top:50%;transform:translateY(-50%);color:var(--cy3);font-size:11px}
.msel[open]>summary::after{content:"▴"}
.msel-sum{color:var(--tx)}
.msel-body{max-height:240px;overflow:auto;padding:6px 8px;border-top:1px solid var(--line2);background:#0c171e;border-radius:0 0 7px 7px}
.msel-i{display:flex;align-items:center;gap:8px;padding:6px 6px;border-radius:6px;cursor:pointer;color:var(--tx)}
.msel-i:hover{background:#0f1c25}
.msel-i input{accent-color:var(--cy2);width:15px;height:15px;margin:0}
td{padding:9px 11px;border-bottom:1px solid #16222c;color:var(--tx);vertical-align:middle;overflow:hidden;text-overflow:ellipsis}
tbody tr{transition:.12s}
tbody tr:hover{background:#0f1c25;cursor:pointer}
.num{text-align:right;font-variant-numeric:tabular-nums}
.nowrap{white-space:nowrap}
.pname{max-width:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:500}
.remark{max-width:220px;white-space:normal;word-break:break-word;color:var(--tx3);vertical-align:top}
.prog-cell{padding:0 11px;vertical-align:middle}
.dbar{display:flex;align-items:center;gap:9px;height:28px}
.dbar-track{flex:1;min-width:38px;height:6px;background:#16232e;border-radius:4px;overflow:hidden}
.dbar-fill{height:100%;border-radius:4px;background:linear-gradient(90deg,#0ea5b7,#22d3ee);transition:width .3s ease}
.dbar-fill.low{background:linear-gradient(90deg,#b45309,#f5a524)}
.dbar-fill.done{background:linear-gradient(90deg,#059669,#34d399)}
.dbar-txt{flex:none;min-width:40px;text-align:right;font-size:11.5px;font-weight:600;color:#9fb3c0;
  font-variant-numeric:tabular-nums;letter-spacing:.3px}
.dbar-txt.low{color:#f5a524}
.dbar-txt.done{color:#34d399}

/* ---------- 漏斗/阶段分布 ---------- */
.funnel{display:flex;flex-direction:column;gap:7px}
.fn-row{display:grid;grid-template-columns:118px 1fr 92px;align-items:center;gap:12px;
  padding:7px 9px;border-radius:9px;transition:.15s;cursor:pointer}
.fn-row:hover{background:#101d26}
.fn-name{font-size:12.5px;color:var(--tx2);display:flex;align-items:baseline;gap:7px;white-space:nowrap}
.fn-name em{font-size:10.5px;color:var(--tx3);font-style:normal}
.fn-track{height:8px;background:#16232e;border-radius:5px;overflow:hidden;flex:1}
.fn-track i{display:block;height:100%;border-radius:5px;
  background:linear-gradient(90deg,#0d7d8f,#22d3ee);transition:width .3s ease}
.fn-row:hover .fn-track i{background:linear-gradient(90deg,#22d3ee,#67e8f9)}
.fn-row.done .fn-track i{background:linear-gradient(90deg,#059669,#34d399)}
.fn-row.done:hover .fn-track i{background:linear-gradient(90deg,#34d399,#6ee7b7)}
.fn-meta{font-size:11px;color:var(--tx3);text-align:right;white-space:nowrap;font-variant-numeric:tabular-nums}
.fn-meta b{color:var(--cy3);font-size:13px;font-weight:600}

/* ---------- 需要关注列表 ---------- */
.att-list{display:flex;flex-direction:column;gap:5px;padding-right:2px}
.att-item{display:flex;align-items:center;gap:10px;padding:8px 11px;border-radius:9px;
  background:var(--card2);border:1px solid var(--line);border-left:3px solid var(--mid);
  transition:.15s;cursor:pointer}
.att-item.hi{border-left-color:var(--hi)}
.att-item:hover{transform:translateX(3px);border-color:var(--line2);background:#101d26}
.att-dot{width:7px;height:7px;border-radius:50%;background:var(--mid);flex:none;
  box-shadow:0 0 7px rgba(245,165,36,.55)}
.att-item.hi .att-dot{background:var(--hi);box-shadow:0 0 7px rgba(240,82,82,.55)}
.att-main{flex:1;min-width:0}
.att-name{display:block;font-size:12.5px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.att-meta{font-size:11px;color:var(--tx3);margin-top:2px}
.att-item .tag{flex:none;max-width:44%;overflow:hidden;text-overflow:ellipsis}

/* ---------- 事业部业绩 ---------- */
.bu-list{display:flex;flex-direction:column;gap:3px;padding-right:2px}
.bu-row{display:grid;grid-template-columns:140px 1fr 22px;align-items:center;gap:10px;
  padding:4px 9px;border-radius:8px;transition:.15s;cursor:pointer}
.bu-row:hover{background:#101d26}
.bu-name{font-size:12.5px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--tx);display:flex;align-items:baseline;gap:6px}
.bu-name em{display:inline;font-style:normal;font-size:10.5px;color:var(--tx3);font-weight:400}
.bu-track{position:relative;height:18px;background:#16232e;border-radius:9px;overflow:hidden}
.bu-track i{display:block;height:100%;border-radius:9px;
  background:linear-gradient(90deg,#0ea5b7,#22d3ee);transition:width .3s ease}
.bu-row:hover .bu-track i{background:linear-gradient(90deg,#22d3ee,#67e8f9)}
.bu-track b{position:absolute;top:0;bottom:0;display:flex;align-items:center;font-size:10.5px;font-weight:700;white-space:nowrap;z-index:1}
.bu-track b.in{left:0;padding:0 8px;color:#04222a;letter-spacing:.2px}
.bu-track b.out{left:auto;right:0;padding:0 6px 0 4px;color:var(--cy3)}
.bu-arrow{color:var(--tx3);font-size:16px;transition:.15s;text-align:center}
.bu-row:hover .bu-arrow{color:var(--cy3);transform:translateX(2px)}

/* ---------- 看板 ---------- */
.board{display:flex;gap:11px;overflow-x:auto;padding-bottom:12px;align-items:flex-start}
.col{flex:0 0 244px;background:var(--card);border:1px solid var(--line);border-radius:11px;
  padding:11px;max-height:calc(100vh - 232px);display:flex;flex-direction:column}
.col.over{border-color:var(--cy);background:#0e1f27}
.col-h{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px;flex-shrink:0}
.col-h b{font-size:12.5px;font-weight:600}
.col-h span{font-size:11px;color:var(--tx3)}
.col-body{overflow-y:auto;display:flex;flex-direction:column;gap:8px}
.pcard{background:var(--card2);border:1px solid var(--line);border-left:3px solid var(--cy2);
  border-radius:9px;padding:10px;cursor:grab;transition:.15s}
.pcard:hover{border-color:var(--line2);transform:translateY(-1px)}
.pcard.hi{border-left-color:var(--hi)}
.pcard.mid{border-left-color:var(--mid)}
.pcard.dragging{opacity:.4}
.pc-name{font-size:12.5px;font-weight:500;margin-bottom:7px;line-height:1.45;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.pc-meta{display:flex;justify-content:space-between;font-size:11px;color:var(--tx3)}
.pc-amt{color:var(--cy3);font-weight:600}

/* ---------- 验收看板 ---------- */
.accept-card .tbl-wrap{max-height:calc(100vh - 210px);overflow:auto}
.accept-tbl{width:100%;border-collapse:separate;border-spacing:0;font-size:12px}
.accept-tbl th{position:sticky;top:0;background:#0d1a22;z-index:2;padding:10px 9px;text-align:center;
  font-weight:600;color:var(--tx2);border-bottom:1px solid var(--line2);white-space:nowrap}
.accept-tbl td{padding:9px 9px;border-bottom:1px solid #16222c;vertical-align:middle;white-space:nowrap}
.accept-tbl tbody tr:hover{background:transparent}
.accept-tbl .acc-month-th{width:180px;text-align:left;padding-left:12px}
.accept-tbl .acc-ghead{background:#0b151c;cursor:pointer;transition:.12s}
.accept-tbl .acc-ghead:hover{background:#101d26}
.accept-tbl .acc-ghead.open{background:#0c1a22}
.accept-tbl .acc-ghead td{font-weight:500}
.accept-tbl .acc-proj td{background:transparent;border-bottom:1px solid #13202a}
.accept-tbl .acc-proj:hover td{background:#0f1c25}
.accept-tbl .acc-proj .pname{padding-left:28px;max-width:260px}
.accept-tbl .acc-total{background:#0a1319;font-weight:600}
.accept-tbl .acc-total td{border-top:2px solid var(--line2);border-bottom:none}

/* 验收看板：锁定第1列（所属项目），移动端用 transform 驱动（横向 sticky 在手机失效） */
.accept-tbl .acc-frz{position:relative;z-index:3;background:var(--card)}
.accept-tbl th.acc-frz{position:sticky;top:0;z-index:6;background:#0d1a22}
.accept-tbl .acc-ghead .acc-frz{background:#0b151c}
.accept-tbl .acc-ghead.open .acc-frz{background:#0c1a22}
.accept-tbl .acc-proj .acc-frz{background:var(--card)}
.accept-tbl .acc-proj:hover .acc-frz{background:#0f1c25}
.accept-tbl .acc-total .acc-frz{background:#0a1319}
.accept-tbl .acc-frz{box-shadow:inset -1px 0 0 var(--line2),7px 0 11px -7px rgba(0,0,0,.9)}

.acc-arrow{display:inline-block;width:16px;color:var(--tx3);font-size:10px;transition:.12s}
.acc-tag{display:inline-block;min-width:42px;text-align:center;padding:3px 9px;border-radius:6px;
  font-size:12px;font-weight:600;border:1px solid transparent;margin-right:8px}
.acc-tag.all{background:#22d3ee20;color:#22d3ee;border-color:#22d3ee40}
.acc-cnt{font-size:11.5px;color:var(--tx3);font-weight:400}
.acc-indent{display:inline-block;width:12px}
.acc-blank{font-size:11px;color:var(--tx3)}
.acc-pct{font-size:10.5px;color:var(--tx3);margin-left:6px;background:#16222c;padding:1px 5px;border-radius:4px}

/* ---------- 每月验收数量折线图 ---------- */
.accept-trend{margin-top:16px}
.at-chart{overflow-x:auto;padding:6px 2px 0}
.dash-trend .at-chart{overflow:visible;padding:6px 0 0}
.dash-trend .at-svg,.dash-trend .at-labels{min-width:0;width:100%}
.dash-trend{min-height:360px;display:flex;flex-direction:column}
.dash-trend .at-chart{flex:1;display:flex;flex-direction:column;justify-content:center}
.at-svg{display:block;width:100%;min-width:640px;height:auto}
.at-svg .at-val{font-size:10px;font-weight:600;fill:#9fe9f5}
.at-svg .at-val.zero{fill:#3b5160}
.at-svg .at-val.peak{font-size:11px;font-weight:800;fill:#67e8f9;letter-spacing:.3px}
.at-svg .at-y-lab{font-size:9px;fill:#3b5160;text-anchor:start;font-variant-numeric:tabular-nums;font-weight:500}
.at-svg .at-peak-lab{font-size:9.5px;fill:#22d3ee;text-anchor:end;opacity:.8;font-weight:600;letter-spacing:.3px}
.at-dot{cursor:pointer;transition:.15s}
.at-dot:hover{r:6}
.at-dot.zero:hover{fill:#1c2c38}
.at-dot-peak-bg{pointer-events:none;animation:atPulse 2s ease-in-out infinite}
@keyframes atPulse{0%,100%{opacity:.45}50%{opacity:.85}}
.at-labels{display:flex;width:100%;min-width:640px;padding-top:6px}
.at-lab{flex:1;text-align:center;font-size:10px;color:var(--tx3);cursor:pointer;transition:.12s;font-variant-numeric:tabular-nums;min-width:0;overflow:hidden}
.at-lab:hover{color:var(--cy3)}
.at-lab.zero{color:#33475a}
.at-lab.this{color:var(--cy3);font-weight:700}
.at-lab.peak{color:#67e8f9;font-weight:700}
.acc-empty{color:var(--tx3);font-size:11.5px}

/* ---------- 周柱状 ---------- */
.weeks{display:flex;align-items:flex-end;gap:5px;height:170px;padding:14px 4px 0;overflow-x:auto;position:relative}
.wk{flex:0 0 40px;display:flex;flex-direction:column;align-items:center;gap:5px;cursor:pointer}
.wk-bar{width:100%;background:linear-gradient(180deg,#22d3ee,#0d7d8f);border-radius:4px 4px 0 0;
  min-height:3px;transition:.15s}
.wk:hover .wk-bar{background:linear-gradient(180deg,#67e8f9,#0ea5b7)}
.wk-lab{font-size:9.5px;color:var(--tx3);white-space:nowrap;transform:rotate(-42deg);
  transform-origin:center;margin-top:9px;height:26px}
.wk-val{font-size:9.5px;color:var(--cy3);font-weight:600}
.wk.active .wk-bar{background:linear-gradient(180deg,#a5f3fc,#22d3ee)}
.wk-line{position:absolute;left:4px;top:0;pointer-events:none;z-index:2}
.wk-legend{position:absolute;right:10px;top:6px;display:flex;align-items:center;gap:8px;
  font-size:11px;color:var(--tx3);background:rgba(13,26,34,0.7);padding:4px 10px;border-radius:14px;z-index:3}
.wk-legend-bar{display:inline-block;width:12px;height:8px;border-radius:2px;
  background:linear-gradient(180deg,#22d3ee,#0d7d8f)}
.wk-legend-line{display:inline-block;width:14px;height:0;border-top:2px solid #fbbf24;border-radius:1px}

/* ---------- 抽屉 ---------- */
.drawer{position:fixed;top:0;right:-560px;width:540px;max-width:94vw;height:100vh;z-index:60;
  background:var(--bg2);border-left:1px solid var(--line2);transition:right .22s ease;overflow-y:auto}
.drawer.open{right:0}
.drawer-inner{padding:22px}
.mask{position:fixed;inset:0;background:rgba(0,0,0,.55);z-index:55;opacity:0;pointer-events:none;transition:.2s}
.mask.show{opacity:1;pointer-events:auto}
.dr-h{display:flex;justify-content:space-between;align-items:flex-start;gap:14px;margin-bottom:6px}
.dr-title{font-size:17px;font-weight:600;line-height:1.45}
.dr-close{font-size:22px;color:var(--tx3);line-height:1;padding:0 4px}
.dr-close:hover{color:var(--tx)}
.dr-tags{display:flex;gap:6px;flex-wrap:wrap;margin:12px 0 18px}
.dl{display:grid;grid-template-columns:96px 1fr;gap:9px 12px;font-size:12.5px;margin-bottom:18px}
.dl dt{color:var(--tx3)}
.dl dd{color:var(--tx)}
.dr-sec{margin-top:20px;padding-top:16px;border-top:1px solid var(--line)}
.dr-sec h4{font-size:12.5px;color:var(--tx2);margin-bottom:11px;font-weight:600;
  display:flex;justify-content:space-between;align-items:center}
.log-item{display:flex;justify-content:space-between;align-items:center;padding:8px 10px;
  background:var(--card);border-radius:8px;margin-bottom:6px;font-size:12px}
.log-item .d{color:var(--tx2)}
.log-item .a{color:var(--cy3);font-weight:600}
.log-item .x{color:var(--tx3);padding:0 4px}
.log-item .x:hover{color:#f87171}
.risk-item{padding:9px 11px;border-radius:8px;margin-bottom:6px;font-size:12px;border-left:3px solid}
.risk-item.hi{background:#1e1010;border-color:var(--hi);color:#fca5a5}
.risk-item.mid{background:#1e1808;border-color:var(--mid);color:#fcd34d}
.risk-item.low{background:#0d1c28;border-color:var(--lo);color:#7dd3fc}

.f2{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.btn-sm{padding:6px 13px;font-size:12px;border-radius:7px;background:var(--cy2);color:#04222a;font-weight:600}
.btn-sm:hover{filter:brightness(1.12)}
.btn-sm.ghost{background:none;border:1px solid var(--line2);color:var(--tx2);font-weight:400}
.btn-sm.ghost:hover{border-color:var(--cy2);color:var(--cy3)}
.btn-sm.danger{background:#3a1414;color:#fca5a5}
.btn-sm.danger:hover{background:#4d1a1a}

/* ---------- 筛选 ---------- */
.filters{display:flex;gap:9px;flex-wrap:wrap;align-items:center;margin-bottom:14px}
.filters input,.filters select{padding:7px 11px;background:var(--card);border:1px solid var(--line2);
  border-radius:8px;color:var(--tx);outline:none;min-width:118px}
.filters input:focus,.filters select:focus{border-color:var(--cy)}
.filters .spacer{flex:1}
.count{font-size:12px;color:var(--tx3)}

/* ---------- 模态 ---------- */
.modal{position:fixed;inset:0;z-index:70;background:rgba(0,0,0,.62);display:none;
  align-items:center;justify-content:center;padding:20px}
.modal.show{display:flex}
.modal-card{width:440px;max-width:100%;max-height:88vh;overflow-y:auto;background:var(--card);
  border:1px solid var(--line2);border-radius:15px;padding:26px}
.modal-card h3{font-size:16px;margin-bottom:18px;font-weight:600}
.modal-card h3 small{font-size:12px;color:var(--tx3);font-weight:400;margin-left:6px}
.modal-ft{display:flex;align-items:center;gap:8px;margin-top:20px;padding-top:16px;border-top:1px solid var(--line)}
.modal-ft .spacer{flex:1}
.colset-list{display:grid;grid-template-columns:1fr 1fr;gap:8px 18px;max-height:52vh;overflow-y:auto;padding-right:4px}
.colset-i{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--tx);cursor:pointer;padding:5px 6px;border-radius:7px}
.colset-i:hover{background:#16232e}
.colset-i input{width:15px;height:15px;accent-color:var(--cy2);cursor:pointer}

/* ---------- toast ---------- */
.toast{position:fixed;bottom:26px;left:50%;transform:translateX(-50%) translateY(90px);
  background:#123;border:1px solid var(--cy2);color:var(--cy3);padding:11px 22px;border-radius:10px;
  font-size:13px;z-index:90;transition:.25s;opacity:0}
.toast.show{transform:translateX(-50%) translateY(0);opacity:1}
.toast.bad{border-color:#7f1d1d;color:#fca5a5;background:#1c1010}

/* ---------- 负载条 ---------- */
.load-row{display:grid;grid-template-columns:86px 1fr 74px 74px 60px;align-items:center;gap:11px;
  padding:8px 9px;border-radius:8px;font-size:12.5px;cursor:pointer}
.load-row:hover{background:#101d26}
.load-bar{height:20px;background:#16232e;border-radius:5px;overflow:hidden;display:flex}
.load-seg{height:100%}
.load-seg.a{background:linear-gradient(90deg,#0ea5b7,#22d3ee)}
.load-seg.d{background:#1e3a47}
.load-seg.r{background:#8b2f2f}
.load-seg.s{background:#3a4550}

@media(max-width:900px){
  .tb-title,.tb-year,.who{display:none}
  main{padding:12px}
  .drawer{width:100vw}
}

/* ---------- 账号管理 ---------- */
.vhead{margin:2px 0 10px}
.vhead h2{font-size:18px;margin:0 0 4px;color:var(--tx)}
.vhead-sub{font-size:12.5px;color:var(--tx3);line-height:1.5}
.tag-me{display:inline-block;padding:1px 7px;font-size:10.5px;border-radius:20px;
  background:#0e2a1d;color:#6ee7b7;border:1px solid #17452f;margin-left:6px;vertical-align:middle}
.dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:6px;vertical-align:middle}
.dot.ok{background:#34d399;box-shadow:0 0 6px rgba(52,211,153,.5)}
.dot.off{background:#64748b}
.row-act{white-space:nowrap}
.btn-xs{padding:4px 9px;font-size:11.5px;border-radius:6px;background:var(--cy2);color:#04222a;
  font-weight:600;border:none;cursor:pointer;margin-right:4px}
.btn-xs:hover{filter:brightness(1.12)}
.btn-xs.danger{background:#3a1414;color:#fca5a5;border:1px solid #4d1f1f}
.btn-xs.danger:hover{background:#4d1a1a}
.role-sel{padding:5px 8px;background:#0a1218;border:1px solid var(--line2);border-radius:7px;
  color:var(--tx);outline:none}
.role-sel:focus{border-color:var(--cy)}
.pw-cell{white-space:nowrap}
.pw-mask{display:inline-block;min-width:46px;font-family:ui-monospace,Menlo,Consolas,monospace;letter-spacing:1px;color:var(--tx);margin-right:6px}
.btn-xs.ghost{background:transparent;color:var(--cy);border:1px solid var(--line2)}

/* ---------- 同步中心：自动同步 ---------- */
@keyframes spin{to{transform:rotate(360deg)}}
.sync-warn{background:rgba(245,165,36,.1);border:1px solid rgba(245,165,36,.35);color:#f5b462;
  padding:10px 12px;border-radius:9px;font-size:12.5px;line-height:1.7;margin-bottom:12px}
.sync-row{display:flex;align-items:center;justify-content:space-between;gap:16px;
  padding:14px 0 2px;border-top:1px solid var(--line2);margin-top:12px}
.sync-stat{font-size:13px}
.sync-stat .on{color:#34d399;font-weight:700}
.sync-stat .off{color:#94a3b8;font-weight:700}
.sync-stat .muted{margin-top:3px}
.switch{position:relative;display:inline-block;width:48px;height:26px;flex:none}
.switch input{opacity:0;width:0;height:0}
.switch .slider{position:absolute;cursor:pointer;inset:0;background:#33414d;border-radius:999px;transition:.2s}
.switch .slider:before{content:"";position:absolute;height:20px;width:20px;left:3px;top:3px;
  background:#cbd5e1;border-radius:50%;transition:.2s}
.switch input:checked + .slider{background:linear-gradient(90deg,#0ea5b7,#22d3ee)}
.switch input:checked + .slider:before{transform:translateX(22px);background:#04222a}
.form-2col{display:grid;grid-template-columns:1fr 1fr;gap:12px 16px}
.form-2col .fld{margin:0}
.code{background:#0a1218;border:1px solid var(--line2);border-radius:9px;padding:12px;
  font-family:ui-monospace,Menlo,Consolas,monospace;font-size:11.5px;color:var(--cy);
  white-space:pre-wrap;word-break:break-all;max-height:50vh;overflow:auto;margin:0}

/* ---------- 近12月回款：分类堆叠柱状图 ---------- */
.mbar{display:grid;grid-template-columns:repeat(12,1fr);gap:6px;height:300px;padding:14px 2px 0;width:100%;box-sizing:border-box}
.mbar-col{display:flex;flex-direction:column;align-items:stretch;gap:5px;cursor:pointer;transition:.15s;width:100%;min-width:0;min-height:0}
.mbar-col:hover .mbar-bars{transform:translateY(-3px)}
.mbar-bars{position:relative;width:100%;height:220px;display:flex;flex-direction:column-reverse;
  align-items:stretch;background:#0d1a22;border:1px solid var(--line);border-radius:5px 5px 2px 2px;overflow:hidden;transition:.18s;box-sizing:border-box}
.mbar-col:hover .mbar-bars{border-color:var(--cy2);box-shadow:0 6px 18px rgba(14,165,183,.18)}
.mbar-seg{width:100%;transition:opacity .18s;display:block}
.mbar-seg.cat-new{background:linear-gradient(180deg,#67e8f9,#0ea5b7)}  /* 新签：品牌青 */
.mbar-seg.cat-add{background:linear-gradient(180deg,#c4b5fd,#7e22ce)}  /* 增购：紫 */
.mbar-seg.cat-his{background:linear-gradient(180deg,#fcd34d,#b45309)}  /* 历史：琥珀 */
.mbar-seg.gray{background:#33414d}
.mbar-seg.empty{height:100%;background:transparent;border:0}
.mbar-col.empty{opacity:.5;border:1px dashed #1a2730;border-radius:5px}
.mbar-col.empty:hover{opacity:.75}
.mbar-col.empty .mbar-bars{background:#0a131a;border-style:dashed}
.mbar-val{font-size:9.5px;color:var(--tx3);font-weight:600;height:12px;line-height:12px;font-variant-numeric:tabular-nums;text-align:center;flex:none}
.mbar-lab{font-size:10.5px;color:var(--tx2);white-space:nowrap;text-align:center;flex:none}
.mbar-col.empty{opacity:.5;border:1px dashed #1a2730;border-radius:5px}
.mbar-col.empty:hover{opacity:.75}
.mbar-col.empty .mbar-bars{background:#0a131a;border-style:dashed}
.mbar-legend{display:flex;align-items:center;gap:18px;margin-top:12px;padding-top:10px;border-top:1px solid var(--line);flex-wrap:wrap}
/* 预计交付月份柱状图：绿=已交付(100%)，橙=进行中(<100%)，叠加总数趋势折线 */
.pdb-card{display:flex;flex-direction:column}
.pdb-card .pdb{flex:1;min-height:0;height:auto;padding:14px 2px 0}
.pdb{position:relative;display:grid;grid-template-columns:repeat(12,1fr);gap:0;height:158px;padding:14px 2px 0;width:100%;box-sizing:border-box}
.pdb-col{display:flex;flex-direction:column;align-items:stretch;gap:5px;cursor:pointer;transition:.15s;width:100%;min-width:0;min-height:0;padding:0 4px;box-sizing:border-box}
.pdb-col:hover .pdb-bars{transform:translateY(-3px)}
.pdb-bars{position:relative;flex:1;min-height:140px;display:flex;flex-direction:column-reverse;
  border:1px solid transparent;border-radius:6px;overflow:hidden;transition:.15s}
.pdb-col:hover .pdb-bars{border-color:var(--cy2);box-shadow:0 6px 18px rgba(14,165,183,.18)}
.pdb-seg{width:100%;transition:opacity .18s;display:block}
.pdb-seg.green{background:linear-gradient(180deg,#34d399,#059669)}
.pdb-seg.orange{background:linear-gradient(180deg,#fbbf24,#b45309)}
.pdb-seg.cyan{background:linear-gradient(180deg,#67e8f9,#0d7d8f)}
.pdb-seg.empty{height:100%;background:transparent;border:0}
.pdb-val{font-size:10px;color:var(--tx2);font-weight:600;height:13px;line-height:13px;font-variant-numeric:tabular-nums;text-align:center;flex:none}
.pdb-lab{font-size:11px;color:var(--tx2);white-space:nowrap;text-align:center;flex:none}
.pdb-col.empty{opacity:.5;border:1px dashed #1a2730;border-radius:5px}
.pdb-col.empty:hover{opacity:.75}
.pdb-col.empty .pdb-bars{background:#0a131a;border-style:dashed}
.pdb-line{position:absolute;left:0;right:0;top:14px;bottom:13px;height:auto;pointer-events:none;z-index:2;overflow:visible}
.pdb-line .at-dot{cursor:pointer;pointer-events:auto}
.pdb-val-svg{font-size:10px;font-weight:600;fill:#9fe9f5;font-variant-numeric:tabular-nums}
.pdb-legend{display:flex;align-items:center;gap:18px;margin-top:12px;padding-top:10px;border-top:1px solid var(--line);flex-wrap:wrap}
.pdb-li{font-size:11.5px;color:var(--tx3);display:flex;align-items:center;gap:6px}
.pdb-li.total{font-weight:600;color:var(--tx2)}
.pdb-li.line{display:flex;align-items:center;gap:6px}
.pdb-dot{display:inline-block;width:9px;height:9px;border-radius:3px;flex:none}
.pdb-dot.green{background:linear-gradient(180deg,#34d399,#059669)}
.pdb-dot.orange{background:linear-gradient(180deg,#fbbf24,#b45309)}
.pdb-dot.cyan{background:linear-gradient(180deg,#67e8f9,#0d7d8f)}
.pdb-dot-line{display:inline-block;width:18px;height:0;border-top:1.6px solid #f8fafc;opacity:.92}
/* 预计回款月份柱状图：过去月=实际回款(绿)，未来月=下月目标(青)，叠加金额趋势折线 */
.prb{position:relative;display:grid;grid-template-columns:repeat(12,1fr);gap:0;height:280px;padding:14px 2px 0;width:100%;box-sizing:border-box}
.prb-col{display:flex;flex-direction:column;align-items:stretch;gap:5px;cursor:pointer;transition:.15s;width:100%;min-width:0;min-height:0;padding:0 4px;box-sizing:border-box}
.prb-col:hover .prb-bars{transform:translateY(-3px)}
.prb-bars{position:relative;width:100%;height:210px;display:flex;flex-direction:column-reverse;
  border:1px solid transparent;border-radius:6px;overflow:hidden;transition:.15s}
.prb-col:hover .prb-bars{border-color:var(--cy2);box-shadow:0 6px 18px rgba(14,165,183,.18)}
.prb-seg{width:100%;transition:opacity .18s;display:block;
  background:linear-gradient(180deg,#67e8f9,#0d7d8f)}
.prb-seg.green{background:linear-gradient(180deg,#34d399,#059669)}
/* 已完成＝实际到账：实心绿 */
.prb-seg.done{background:linear-gradient(180deg,#34d399,#059669)}
/* 未完成＝预计回款：半透明青 + 斜纹，与实心绿形成明确区分 */
.prb-seg.todo{background:
    repeating-linear-gradient(135deg,rgba(255,255,255,.10) 0 4px,transparent 4px 9px),
    linear-gradient(180deg,rgba(103,232,249,.46),rgba(13,125,143,.40));
  box-shadow:inset 0 0 0 1px rgba(103,232,249,.5)}
.prb-seg.empty{height:100%;background:transparent;border:0}
/* 本月：柱体描边高亮 + 标签角标 */
.prb-col.cur .prb-bars{border-color:rgba(103,232,249,.55);background:rgba(103,232,249,.05)}
.prb-col.cur .prb-lab{color:var(--cy3);font-weight:600}
.prb-now{display:inline-block;margin-left:4px;padding:0 4px;border-radius:3px;font-style:normal;
  font-size:9.5px;line-height:14px;color:#062028;background:linear-gradient(180deg,#67e8f9,#22b8cf)}
.prb-line{position:absolute;left:0;right:0;top:14px;bottom:13px;height:auto;pointer-events:none;z-index:2;overflow:visible}
.prb-line .at-dot{cursor:pointer;pointer-events:auto}
.prb-li.line{display:flex;align-items:center;gap:6px}
.prb-val{font-size:10px;color:var(--cy3);font-weight:600;height:13px;line-height:13px;font-variant-numeric:tabular-nums;text-align:center;flex:none}
.prb-lab{font-size:11px;color:var(--tx2);white-space:nowrap;text-align:center;flex:none}
.prb-col.empty{opacity:.5;border:1px dashed #1a2730;border-radius:5px}
.prb-col.empty:hover{opacity:.75}
.prb-col.empty .prb-bars{background:#0a131a;border-style:dashed}
.prb-legend{display:flex;align-items:center;gap:18px;margin-top:12px;padding-top:10px;border-top:1px solid var(--line);flex-wrap:wrap}
.prb-li{font-size:11.5px;color:var(--tx3);display:flex;align-items:center;gap:6px}
.prb-li.total{font-weight:600;color:var(--tx2)}
.prb-dot{display:inline-block;width:9px;height:9px;border-radius:3px;flex:none;
  background:linear-gradient(180deg,#67e8f9,#0d7d8f)}
.prb-dot.green{background:linear-gradient(180deg,#34d399,#059669)}
.prb-dot.blue{background:linear-gradient(180deg,#67e8f9,#0d7d8f)}
.prb-dot.todo{background:
    repeating-linear-gradient(135deg,rgba(255,255,255,.14) 0 2px,transparent 2px 5px),
    linear-gradient(180deg,rgba(103,232,249,.46),rgba(13,125,143,.40));
  box-shadow:inset 0 0 0 1px rgba(103,232,249,.6)}
/* 本月回款进度弹窗 */
.rcv-prog{position:relative;height:20px;margin:10px 0 4px;border-radius:10px;overflow:hidden;
  background:#0c1a22;border:1px solid var(--line)}
.rcv-prog-bar{position:absolute;left:0;top:0;bottom:0;border-radius:10px;
  background:linear-gradient(90deg,#059669,#34d399);transition:width .3s}
.rcv-prog-txt{position:absolute;left:0;right:0;top:0;line-height:20px;text-align:center;
  font-size:11px;font-weight:600;color:#eaf7fb;text-shadow:0 1px 2px rgba(0,0,0,.6)}
.rcv-sec{margin-top:14px}
.rcv-sec h4{display:flex;align-items:center;gap:7px;margin:0 0 7px;font-size:12.5px;color:var(--tx2);font-weight:600}
.rcv-sec h4 small{font-weight:400;color:var(--tx3);font-size:11px}
.mbar-li-amt.done{color:#34d399}
.mbar-li-amt.todo{color:#67e8f9}
/* 今年签约类型占比饼图 */
.pie-card{display:flex;flex-direction:column}
.pie-card h3{flex:none}
.pie-wrap{flex:1;min-height:0;display:flex;gap:18px;align-items:center;justify-content:center;padding:6px 8px}
.pie-svg{width:210px;height:210px;flex:none}
.pie-legend{flex:1;min-width:0;display:flex;flex-direction:column;gap:7px}
.pie-li{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--tx2)}
.pie-dot{width:10px;height:10px;border-radius:3px;flex:none}
.pie-name{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pie-val{font-weight:600;color:var(--tx);font-variant-numeric:tabular-nums}
.pie-pct{width:38px;text-align:right;color:var(--cy3);font-weight:600;font-variant-numeric:tabular-nums}
.ml-item{display:flex;align-items:center;gap:7px;font-size:11.5px;color:var(--tx2)}
.ml-dot{width:10px;height:10px;border-radius:3px;display:inline-block}
.ml-dot.cat-new{background:#22d3ee}
.ml-dot.cat-add{background:#a78bfa}
.ml-dot.cat-his{background:#fbbf24}
.ml-dot.gray{background:#64748b}
.ml-total{margin-left:auto;font-size:11.5px;color:var(--tx3)}
.ml-total b{color:var(--cy3);font-size:13px;font-weight:700}

/* 点击柱子弹出的当月明细 */
.mbar-list{display:flex;flex-direction:column;gap:6px;max-height:52vh;overflow-y:auto;padding-right:4px}
.mbar-li{display:flex;align-items:center;gap:10px;padding:9px 11px;border-radius:9px;
  background:var(--card2);border:1px solid var(--line);cursor:pointer;transition:.13s}
.mbar-li:hover{border-color:var(--cy2);background:#101d26;transform:translateX(2px)}
.mbar-li .tag{flex:none}
.mbar-li-name{flex:1;min-width:0;font-size:13px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mbar-li-meta{flex:none;font-size:11.5px;color:var(--tx3)}
.mbar-li-amt{flex:none;font-size:13px;font-weight:700;color:var(--cy3);font-variant-numeric:tabular-nums}

/* ---------- AI 问答 ---------- */
.ai-wrap{display:flex;flex-direction:column;height:calc(100vh - 96px);min-height:420px;gap:10px}
.ai-head{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap}
.ai-head b{font-size:16px;background:linear-gradient(100deg,#a5f3fc,#22d3ee);
  -webkit-background-clip:text;background-clip:text;color:transparent}
.ai-head span{font-size:12px;color:var(--tx3)}
.ai-chips{display:flex;gap:7px;flex-wrap:wrap}
.ai-chip{padding:6px 13px;font-size:12px;border-radius:20px;border:1px solid var(--line2);
  background:#0d1a22;color:var(--tx2);cursor:pointer;transition:.14s;white-space:nowrap}
.ai-chip:hover{border-color:var(--cy2);color:var(--cy3);background:#0f2028}
.ai-body{flex:1;overflow-y:auto;padding:14px 12px;border:1px solid var(--line);border-radius:12px;
  background:linear-gradient(180deg,#080f15,#0a141c);scrollbar-width:thin}
.chat-msg{display:flex;margin-bottom:12px}
.chat-msg.user{justify-content:flex-end}
.chat-msg.ai{justify-content:flex-start}
.chat-bubble{max-width:88%;padding:11px 14px;border-radius:13px;font-size:12.5px;line-height:1.65}
.chat-bubble.user{background:linear-gradient(135deg,#0e7c96,#22d3ee);color:#04151b;font-weight:500;
  border-bottom-right-radius:4px;box-shadow:0 4px 14px rgba(14,165,183,.22)}
.chat-bubble.ai{background:#0e1a22;border:1px solid var(--line);border-bottom-left-radius:4px;color:var(--tx)}
.chat-bubble.ai .ai-h{font-size:13.5px;font-weight:600;color:#9fe9f5;margin:10px 0 8px;
  padding-left:9px;border-left:3px solid var(--cy2)}
.chat-bubble.ai .ai-h:first-child{margin-top:0}
.chat-bubble.ai .ai-h .muted{font-size:11px;color:var(--tx3);font-weight:400}
.chat-bubble.ai table{font-size:12px}
.chat-bubble.ai th,.chat-bubble.ai td{padding:7px 9px}
.ai-tip{margin-top:10px;padding:8px 11px;border-radius:8px;background:#0b1c14;border:1px solid #17452f;
  color:#7ee2b8;font-size:11.5px}
.ai-think{display:flex;align-items:center;gap:4px;color:var(--tx3);font-size:12px}
.ai-think i{width:6px;height:6px;border-radius:50%;background:var(--cy2);animation:aiBlink 1s infinite}
.ai-think i:nth-child(2){animation-delay:.18s}
.ai-think i:nth-child(3){animation-delay:.36s}
@keyframes aiBlink{0%,100%{opacity:.25}50%{opacity:1}}
.ai-welcome{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;
  height:100%;min-height:200px;text-align:center;color:var(--tx3)}
.ai-w-ic{width:58px;height:58px;border-radius:16px;display:flex;align-items:center;justify-content:center;
  background:linear-gradient(135deg,#0e7c96,#0f3f4d);color:#67e8f9;margin-bottom:4px}
.ai-w-ic svg{width:30px;height:30px}
.ai-welcome b{font-size:15px;color:var(--tx2)}
.ai-welcome p{font-size:12.5px;line-height:2;color:var(--tx3)}
.ai-input{display:flex;gap:9px}
.ai-input input{flex:1;padding:11px 14px;border-radius:10px;border:1px solid var(--line2);
  background:#0d1a22;color:var(--tx);font-size:13.5px;outline:none;transition:.15s}
.ai-input input:focus{border-color:var(--cy2);box-shadow:0 0 0 3px rgba(34,211,238,.12)}
.ai-input .btn{padding:11px 22px;font-size:13.5px}
/* AI 输入区：居中大输入框 */
.ai-bar{max-width:780px;width:100%;margin:0 auto;display:flex;flex-direction:column;gap:8px}
/* 空态：欢迎语 + 输入框整体垂直居中 */
.ai-wrap.empty{justify-content:center;align-items:center;text-align:center}
.ai-wrap.empty .ai-head,.ai-wrap.empty .ai-chips{display:none}
.ai-wrap.empty .ai-body{flex:none;overflow:visible;background:transparent;border:0;padding:0;height:auto}
.ai-wrap.empty .ai-welcome{height:auto;min-height:0;margin-bottom:18px;padding:0 20px}
.ai-wrap.empty .ai-bar{margin:0 auto}
.ai-input{padding:8px 8px 8px 6px;background:#0b1820;border:1px solid var(--line2);border-radius:14px;
  display:flex;align-items:center;gap:8px;box-shadow:0 4px 18px rgba(0,0,0,.25);transition:.15s}
.ai-input:focus-within{border-color:var(--cy2);box-shadow:0 0 0 3px rgba(34,211,238,.10)}
.ai-input input{flex:1;min-width:0;padding:9px 6px;border:0;background:transparent;font-size:13.5px;outline:none;color:var(--tx)}
.ai-input input::placeholder{color:#3b5160}
.ai-img-btn{flex:none;width:36px;height:36px;border-radius:9px;display:flex;align-items:center;justify-content:center;
  color:var(--tx3);background:transparent;border:0;cursor:pointer;transition:.15s}
.ai-img-btn:hover{color:var(--cy3);background:#10222b}
.ai-img-btn svg{width:18px;height:18px}
.ai-hint{font-size:11px;color:#33475a;text-align:center}
.ai-preview{position:relative;align-self:flex-start;max-width:220px}
.ai-preview img{display:block;max-width:220px;max-height:120px;border-radius:10px;border:1px solid var(--cy2);object-fit:cover}
.ai-prev-x{position:absolute;top:-8px;right:-8px;width:22px;height:22px;border-radius:50%;
  background:#0f3f4d;color:#a5f3fc;border:1px solid var(--cy2);font-size:13px;line-height:1;cursor:pointer}
.ai-prev-x:hover{background:#155e6b;color:#fff}
.chat-img{margin-top:8px}
.chat-img img{max-width:260px;max-height:180px;border-radius:10px;border:1px solid var(--line2);object-fit:cover}
/* LLM Markdown 渲染 */
.ai-p{margin:6px 0}
.ai-li{margin:4px 0;padding-left:4px}
.ai-ol b{color:var(--cy3);margin-right:4px}
.ai-code{margin:8px 0;padding:10px 12px;background:#0a141c;border:1px solid var(--line);border-radius:9px;
  font-size:12px;line-height:1.6;overflow-x:auto;color:#9fe9f5;white-space:pre}
.ai-code-inline{padding:1px 6px;background:#10222b;border-radius:5px;font-size:11.5px;color:#67e8f9;font-family:Consolas,monospace}
.ai-link{color:var(--cy3);font-weight:600;cursor:pointer;border-bottom:1px dashed #155e6b;transition:.12s}
.ai-link:hover{color:#67e8f9;border-bottom-color:#22d3ee}
.ai-cfg-status{font-size:12px;align-self:center;color:var(--tx3)}
.ai-cfg-status.ok{color:#34d399}
.ai-cfg-status.err{color:#f05252}
.ai-kpis .kpi{padding:11px 13px}
.ai-kpis .kpi .val{font-size:21px}
.ai-tbl-hd{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:4px 2px 8px}
.ai-tbl-hd span{font-size:12px;color:var(--tx3)}
.ai-tbl-hd .ai-exp{font-size:11px;padding:4px 10px;white-space:nowrap}
.ai-tbl-hd .ai-exp:hover{color:var(--cy3);border-color:var(--cy2)}
.bu-name .rk{color:var(--cy3);font-weight:700;margin-right:3px}
.ld-bar{display:inline-block;width:52px;height:5px;border-radius:3px;background:#16232e;
  overflow:hidden;vertical-align:middle;margin-right:6px}
.ld-bar i{display:block;height:100%;background:linear-gradient(90deg,#0ea5b7,#22d3ee);border-radius:3px}

/* ---------- 移动端适配 ---------- */
@media(max-width:768px){
  /* 顶栏两行：第一行 logo+操作，第二行标签横滑 */
  .topbar{flex-wrap:wrap;height:auto;min-height:52px;padding:8px 12px 6px;gap:6px 10px}
  .tabs{order:10;flex:0 0 100%;width:100%;padding:2px 0;scrollbar-width:none}
  .tabs::-webkit-scrollbar{display:none}
  .tab{padding:8px 13px;font-size:12.5px}
  .tb-right{margin-left:auto}
  .who{display:none}
  .btn-ghost{padding:6px 10px;font-size:11.5px}

  /* 主区 */
  main{padding:10px}
  .sec{margin-top:12px}
  .card{padding:13px}
  .row>*{flex:1 1 100%;min-width:0}
  .dash-grid{grid-template-columns:1fr;grid-auto-rows:auto;height:auto}
  .dash-grid .card{min-height:340px}
  .count{font-size:11px}

  /* 登录 */
  .login-card{width:100%;max-width:400px;padding:32px 24px}
  .login-title{font-size:23px}

  /* 总览横幅 */
  .hero{flex-direction:column;align-items:flex-start;gap:14px;padding:18px;border-radius:14px}
  .hero-title{font-size:20px}
  .hero-right{gap:0;width:100%;justify-content:space-between}
  .hero-num b{font-size:23px}
  .hero-num span{font-size:10px}

  /* 阶段/事业部行压缩 */
  .fn-row,.bu-row{grid-template-columns:96px 1fr 18px;gap:8px}
  .bu-track b{font-size:10px}
  .bu-track b.in{padding:0 6px}

  /* KPI 2列 */
  .kpis{grid-template-columns:repeat(2,1fr);gap:10px}
  .kpi .val{font-size:21px}
  .kpi .lab{font-size:11px}

  /* 表格触屏：行高加大、大表横滑 */
  table{font-size:13px}
  th,td{padding:11px 10px}
  .tbl-wrap{-webkit-overflow-scrolling:touch}
  .grid-tbl{min-width:920px}
  .accept-tbl .acc-month-th{width:140px}
  /* 近12月柱状图：手机横滑 */
  .mbar-card{overflow:hidden}
  .mbar{display:grid;grid-template-columns:repeat(12,minmax(44px,1fr));overflow-x:auto;padding-bottom:4px}
  .ml-total{width:100%;margin-left:0;text-align:left;padding-top:4px}
  /* 筛选区 */
  .filters input,.filters select{min-width:0;flex:1 1 42%}
  .filters input[data-f=kw]{min-width:0 !important;flex:1 1 100%}

  /* 表单单列 */
  .f2,.form-2col{grid-template-columns:1fr}

  /* 设置页：导航变顶部横滑 */
  .settings{flex-direction:column}
  .set-nav{width:100%;flex-direction:row;padding:10px 10px 6px;border-right:0;
    border-bottom:1px solid var(--line);overflow-x:auto;scrollbar-width:none}
  .set-nav::-webkit-scrollbar{display:none}
  .set-item{white-space:nowrap;padding:9px 14px}
  .set-body{padding:12px}

  /* 负载/漏斗网格压缩 */
  .load-row{grid-template-columns:70px 1fr 52px 52px 40px;gap:8px;font-size:12px}
  .fn-row{grid-template-columns:90px 1fr 90px;gap:8px}

  /* 模态 */
  .modal{padding:10px}
  .modal-card{padding:18px;border-radius:13px}

  /* 抽屉全宽 */
  .drawer{width:100vw;max-width:100vw}
  .drawer-inner{padding:16px}

  /* toast */
  .toast{bottom:18px;width:calc(100vw - 40px);text-align:center}

  /* AI 问答 */
  .ai-wrap{height:calc(100vh - 132px)}
  .chat-bubble{max-width:96%}
  .ai-input input{font-size:15px}
}
