/* ============================================================
   智盘清源 · 物料端到端闭环管理工作台（重构版 2026-09-20）
   浅色商务风 —— 融合「个人工作台 MVP」模板 + 实时执行台组件
   ============================================================ */
:root{
  --bg:#eef2f7; --card:#ffffff; --ink:#1f2d3d; --sub:#6b7a8d; --line:#e3e9f1;
  --primary:#1f4e79; --primary-2:#2f6fa8; --primary-soft:#e8eef5; --accent:#2f8fd6;
  --teal:#0f9b8e; --teal-soft:#e2f5f2;
  --red:#e23b3b; --red-soft:#fdeaea; --green:#1f9d55; --green-soft:#e7f6ec;
  --amber:#d98b1a; --amber-soft:#fcf3e3; --shadow:0 2px 12px rgba(31,78,121,.08);
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"PingFang SC","Microsoft YaHei",sans-serif;
  background:var(--bg);color:var(--ink);font-size:15px;line-height:1.55;padding-bottom:env(safe-area-inset-bottom)}
svg{display:block}
a{color:var(--primary)}
header{background:linear-gradient(135deg,#163d61,#2f6fa8 70%,#0f9b8e);color:#fff;padding:16px 20px;position:sticky;top:0;z-index:20;box-shadow:0 2px 12px rgba(0,0,0,.18)}
header .htop{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:10px}
header h1{font-size:19px;margin:0;font-weight:800;letter-spacing:.5px}
header .tag{font-size:12.5px;opacity:.9;margin-top:3px}
.hbtns{display:flex;gap:8px;flex-wrap:wrap}
.hbtn{background:rgba(255,255,255,.16);border:1px solid rgba(255,255,255,.35);color:#fff;border-radius:8px;
  padding:7px 12px;font-size:13px;cursor:pointer;min-height:38px;display:inline-flex;align-items:center;text-decoration:none}
.hbtn:hover{background:rgba(255,255,255,.3)}
.wrap{max-width:1200px;margin:0 auto;padding:16px 16px 48px}
.section{margin-bottom:22px}
.sec-title{font-size:15px;font-weight:800;color:var(--primary);margin:0 0 12px;display:flex;align-items:center;gap:8px}
.sec-title svg{width:18px;height:18px;flex:none}
.sec-title .sub{font-size:12px;font-weight:500;color:var(--sub);margin-left:6px}
.card{background:var(--card);border:1px solid var(--line);border-radius:14px;box-shadow:var(--shadow)}
.grid{display:grid;gap:14px}

/* ---------- Hero 价值主张 ---------- */
.hero{padding:20px;background:linear-gradient(135deg,#f4f9ff,#eafaf8);border:1px solid #cfe3f2}
.hero .pos{font-size:22px;font-weight:800;color:var(--primary);letter-spacing:1px}
.hero .pos b{color:var(--teal)}
.hero .desc{margin:10px 0 4px;color:var(--sub);font-size:13.5px;max-width:880px}
.hero .meta{display:flex;flex-wrap:wrap;gap:8px 18px;margin-top:12px;font-size:12.5px;color:var(--ink)}
.hero .meta span{display:inline-flex;align-items:center;gap:5px}
.hero .meta i{width:7px;height:7px;border-radius:50%;background:var(--accent)}
/* 项目信息栏（中性灰，与页面风格一致） */
.hero .meta-bar{display:flex;flex-wrap:wrap;gap:8px 24px;align-items:center;margin:12px 0 2px;padding:9px 14px;border:1px solid var(--line);border-radius:10px;background:var(--bg)}
.hero .meta-bar .mb-i{display:inline-flex;align-items:center;gap:6px;font-size:12.5px;white-space:nowrap}
.hero .meta-bar .mb-i i{font-style:normal;color:var(--sub);font-weight:700}
.hero .meta-bar .mb-i b{font-weight:600;color:var(--ink)}
.pain-wrap{display:grid;grid-template-columns:1fr auto 1fr;gap:10px;align-items:center;margin-top:16px}
.pain-box{border:1px dashed #d7b48a;background:#fff8ef;border-radius:10px;padding:10px 12px}
.pain-box h4{margin:0 0 6px;font-size:13px;color:var(--amber)}
.pain-box .p{font-size:12px;color:#7a5a2a;margin:3px 0}
.arrow-mid{font-size:26px;color:var(--teal);text-align:center;font-weight:800}
@media(max-width:680px){.pain-wrap{grid-template-columns:1fr}.arrow-mid{transform:rotate(90deg)}}

/* ---------- 价值点卡片 ---------- */
.vlist{grid-template-columns:repeat(3,1fr)}
.vcard{padding:14px;border:1px solid var(--line);border-radius:12px;background:#fff;position:relative;overflow:hidden;display:flex;flex-direction:column}
.vcard:before{content:"";position:absolute;left:0;top:0;bottom:0;width:4px;background:var(--primary-2)}
.vcard.t:before{background:var(--teal)}
.vcard .vt{font-size:14px;font-weight:800;color:var(--primary);display:flex;align-items:center;gap:8px}
.vcard .vt svg{width:18px;height:18px;flex:none;color:var(--accent)}
.vcard .vd{font-size:12.5px;color:var(--sub);margin-top:7px;flex:1 1 auto}
.vcard .vbadge{display:inline-block;margin-top:10px;font-size:11px;font-weight:700;color:var(--teal);background:var(--teal-soft);padding:3px 9px;border-radius:20px;align-self:flex-start;white-space:nowrap}
@media(max-width:860px){.vlist{grid-template-columns:repeat(2,1fr)}}
@media(max-width:560px){.vlist{grid-template-columns:1fr}}

/* ---------- 对外商业价值 ---------- */
.biz{margin-top:16px;border:1px solid #e2ecf5;background:linear-gradient(180deg,#f8fbff,#fff);padding:16px}
.biz-h{font-size:15px;font-weight:800;color:var(--primary);display:flex;align-items:center;gap:8px;margin:0 0 12px}
.biz-h svg{width:18px;height:18px;color:var(--accent);flex:none}
.biz-cols{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.biz-col{border-radius:10px;padding:12px 14px}
.biz-col.pain{background:#fff5f2;border:1px solid #f3d3c7}
.biz-col.diff{background:#f0faf6;border:1px solid #bfe6cd}
.biz-col h4{margin:0 0 8px;font-size:13px;color:var(--amber)}
.biz-col.diff h4{color:var(--teal)}
.biz-col ul{margin:0;padding-left:16px}
.biz-col li{font-size:12.5px;line-height:1.75;color:var(--ink)}
.biz-col li b{color:var(--primary)}
@media(max-width:680px){.biz-cols{grid-template-columns:1fr}}

/* ---------- 今天要处理 ---------- */
#todayList{padding:6px 4px}
.today-item{display:flex;align-items:center;gap:12px;padding:11px 12px;border-radius:10px;border:1px solid var(--line);margin:8px 8px;background:#fff}
.today-item.overdue{border-color:#f3c0c0;background:var(--red-soft)}
.today-badge{font-size:11px;font-weight:700;padding:3px 8px;border-radius:20px;flex:none}
.b-over{background:var(--red);color:#fff}.b-warn{background:var(--amber);color:#fff}.b-ok{background:var(--green-soft);color:var(--green)}
.today-main{flex:1;min-width:0}
.today-main .t1{font-weight:600;font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.today-main .t2{font-size:12px;color:var(--sub)}
.today-act{flex:none}
.mini{font-size:12px;padding:6px 12px;border-radius:8px;border:1px solid var(--primary);background:var(--primary);color:#fff;cursor:pointer;min-height:36px}
.mini.ghost{background:#fff;color:var(--primary)}
.empty{color:var(--sub);font-size:13px;padding:18px;text-align:center}

/* ---------- 盘点待处理 · C/D/E 车间 Tab 切换 ---------- */
.today-tabs{display:flex;gap:10px;margin-bottom:14px;flex-wrap:wrap}
.today-tab{display:inline-flex;align-items:center;gap:8px;padding:9px 16px;border-radius:10px;border:1px solid var(--line);background:#fff;font-weight:700;font-size:13.5px;color:var(--sub);cursor:pointer;min-height:40px;transition:all .15s;box-shadow:0 1px 2px rgba(15,23,42,.04)}
.today-tab:hover{border-color:var(--primary);color:var(--primary)}
.today-tab.active{border-color:var(--primary);background:var(--primary);color:#fff;box-shadow:0 3px 10px rgba(37,99,235,.2)}
.today-tab .tab-cnt{font-size:11.5px;font-weight:700;background:#f1f5f9;color:#64748b;border-radius:20px;padding:1px 8px;min-width:20px;text-align:center}
.today-tab.active .tab-cnt{background:rgba(255,255,255,.24);color:#fff}
.today-tab.t-C.active{background:#3b82f6;border-color:#3b82f6;box-shadow:0 3px 10px rgba(59,130,246,.25)}
.today-tab.t-D.active{background:#d98b1a;border-color:#d98b1a;box-shadow:0 3px 10px rgba(217,139,26,.25)}
.today-tab.t-E.active{background:#1f9d55;border-color:#1f9d55;box-shadow:0 3px 10px rgba(31,157,85,.25)}
.zone-tag{width:24px;height:24px;border-radius:7px;display:inline-flex;align-items:center;justify-content:center;font-weight:800;font-size:12.5px;color:#fff;flex:none}
.zone-tag.z-C{background:#3b82f6}
.zone-tag.z-D{background:#d98b1a}
.zone-tag.z-E{background:#1f9d55}
#todayList{padding:6px 4px}
@media(max-width:560px){.today-tabs{gap:8px}.today-tab{padding:8px 12px;font-size:12.5px}}

/* ---------- KPI ---------- */
.kpi-row{grid-template-columns:repeat(5,1fr)}
.kpi{padding:14px}
.kpi .k-label{font-size:12px;color:var(--sub)}
.kpi .k-val{font-size:22px;font-weight:800;margin-top:4px;color:var(--ink)}
.kpi .k-val .k-sep{font-size:13px;color:#aab7c8;font-weight:600;margin:0 4px;vertical-align:middle}
.kpi .k-val.red{color:var(--red)}.kpi .k-val.green{color:var(--green)}.kpi .k-val.teal{color:var(--teal)}
.kpi .k-sub{font-size:11px;color:var(--sub);margin-top:3px}
@media(max-width:880px){.kpi-row{grid-template-columns:repeat(2,1fr)}}

/* ---------- 工作流 ---------- */
.flow{padding:16px}
.steps{display:grid;grid-template-columns:repeat(7,1fr);gap:6px}
.step{border:1px solid var(--line);border-radius:10px;padding:10px 8px;background:#fff;cursor:pointer;transition:.15s;text-align:center;position:relative}
.step:hover{border-color:var(--accent);box-shadow:0 2px 8px rgba(47,143,214,.18)}
.step.active{border-color:var(--teal);background:var(--teal-soft);box-shadow:0 2px 10px rgba(15,155,142,.25)}
.step .num{width:24px;height:24px;border-radius:50%;background:var(--primary);color:#fff;font-size:12px;font-weight:800;display:inline-flex;align-items:center;justify-content:center;margin:0 auto 6px}
.step.active .num{background:var(--teal)}
.step .st{font-size:12px;font-weight:700;color:var(--ink);line-height:1.3}
.step .sa{display:block;font-size:10px;color:var(--sub);margin-top:3px}
.step.done{border-color:#bfe6cd;background:#f3fbf5}
.step.done .num{background:var(--green)}
.step.doing{border-color:var(--teal);background:var(--teal-soft);box-shadow:0 2px 10px rgba(15,155,142,.22)}
.step.doing .num{background:var(--teal)}
.step.doing:after{content:"";position:absolute;right:8px;top:8px;width:8px;height:8px;border-radius:50%;background:var(--teal);animation:dhPulse 1.4s infinite}
.step.todo .num{background:#9aa7b5}
.step .st-state{font-size:10px;margin-top:4px;display:block;font-weight:700;line-height:1}
.step.done .st-state{color:var(--green)} .step.doing .st-state{color:var(--teal)} .step.todo .st-state{color:#9aa7b5}
.loop-note{text-align:center;font-size:12px;color:var(--teal);font-weight:700;margin-top:10px}
.loop-note svg{width:14px;height:14px;display:inline;vertical-align:-2px;margin-right:4px}
.plan-basis{margin-top:14px;border:1px solid #cfe3f2;border-left:4px solid var(--accent);background:linear-gradient(90deg,#f2f9ff,#fff);border-radius:10px;padding:12px 14px;display:flex;flex-direction:column;gap:8px}
.pb-head{font-size:13px;font-weight:800;color:var(--primary);display:flex;align-items:center;gap:7px}
.pb-head svg{width:16px;height:16px;color:var(--accent);flex:none}
.pb-body{display:flex;flex-wrap:wrap;align-items:center;gap:10px}
.pb-formula{font-size:13px;font-weight:800;color:var(--teal);background:var(--teal-soft);border:1px solid #bfe6cd;border-radius:8px;padding:5px 12px;white-space:nowrap}
.pb-desc{font-size:12.5px;color:var(--ink);line-height:1.7;flex:1;min-width:220px}
.pb-desc b{color:var(--accent)}
.step-detail{margin-top:14px;border:1px solid #cfe3f2;background:#f7fbff;border-radius:10px;padding:14px;min-height:96px}
.step-detail h4{margin:0 0 8px;font-size:14px;color:var(--primary);display:flex;align-items:center;gap:8px}
.step-detail .row{display:grid;grid-template-columns:84px 1fr;gap:8px;font-size:12.5px;margin:5px 0}
.step-detail .row .k{color:var(--sub)}
.tag-in{display:inline-block;font-size:11px;background:var(--primary-soft);color:var(--primary);padding:2px 8px;border-radius:6px;margin:2px 4px 2px 0}
.tag-out{display:inline-block;font-size:11px;background:var(--teal-soft);color:var(--teal);padding:2px 8px;border-radius:6px;margin:2px 4px 2px 0}
@media(max-width:760px){.steps{grid-template-columns:repeat(3,1fr)}}
@media(max-width:430px){.steps{grid-template-columns:repeat(2,1fr)}}
/* 三级判定 */
.judge{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-top:14px}
.jcard{border-radius:10px;padding:12px;text-align:center;border:1px solid}
.jcard.n{background:var(--green-soft);border-color:#bfe6cd;color:var(--green)}
.jcard.a{background:var(--amber-soft);border-color:#f0dcb4;color:var(--amber)}
.jcard.o{background:var(--red-soft);border-color:#f3c0c0;color:var(--red)}
.jcard .jt{font-size:14px;font-weight:800}
.jcard .jd{font-size:11.5px;margin-top:5px;color:var(--ink);opacity:.85}
@media(max-width:560px){.judge{grid-template-columns:1fr}}
/* 工作流状态横幅 */
.flow-states{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin:0 0 14px}
.fstate{border:1px solid var(--line);border-radius:12px;padding:12px 14px;display:flex;align-items:center;gap:11px;background:#fff}
.fstate .dot{width:12px;height:12px;border-radius:50%;flex:none}
.fstate .fs-t{font-size:13.5px;font-weight:800;color:var(--ink);line-height:1.2}
.fstate .fs-n{font-size:11px;color:var(--sub);margin-top:3px}
.fstate .fs-c{margin-left:auto;font-size:20px;font-weight:800;line-height:1;font-family:ui-monospace,Consolas,monospace}
.fstate.done{border-color:#bfe6cd;background:var(--green-soft)} .fstate.done .dot{background:var(--green)} .fstate.done .fs-c{color:var(--green)}
.fstate.doing{border-color:#bfe3e0;background:var(--teal-soft)} .fstate.doing .dot{background:var(--teal)} .fstate.doing .fs-c{color:var(--teal)}
.fstate.todo{border-color:#dde3ea;background:#f4f7fb} .fstate.todo .dot{background:#9aa7b5} .fstate.todo .fs-c{color:#9aa7b5}
.flow-legend{display:flex;gap:14px;flex-wrap:wrap;font-size:12px;color:var(--sub);margin:0 0 12px;align-items:center}
.flow-legend i{display:inline-block;width:11px;height:11px;border-radius:3px;margin-right:5px;vertical-align:-1px}
.flow-legend .lk{display:inline-flex;align-items:center}

/* ---------- 图表 ---------- */
.chart-card{padding:14px}
.chart-card h3{font-size:13px;margin:0 0 8px;color:var(--ink);font-weight:700}
.legend{display:flex;flex-wrap:wrap;gap:10px;margin-top:8px;font-size:12px;color:var(--sub)}
.legend i{display:inline-block;width:10px;height:10px;border-radius:3px;margin-right:5px;vertical-align:middle}
.charts2{display:grid;grid-template-columns:repeat(2,1fr);gap:16px}
@media(max-width:1080px){.charts2{grid-template-columns:1fr}}
@media(max-width:760px){.charts2{grid-template-columns:1fr}}
.chart-toggle{display:flex;gap:6px;margin-bottom:8px}
.chart-toggle .tg{font-size:12px;padding:5px 11px;border-radius:7px;border:1px solid var(--line);background:#fff;color:var(--sub);cursor:pointer;min-height:32px}
.chart-toggle .tg.active{background:var(--primary);color:#fff;border-color:var(--primary)}
/* 旭日图容器（ECharts，参照 sunburst-drink：三层下钻需稳定画布尺寸） */
#chartSunburst{width:100%;height:380px}
@media(max-width:1080px){#chartSunburst{height:340px}}
/* 盘点月份单耗关系图容器（ECharts graph 力导布局，参照 graph-label-overlap：稳定画布尺寸） */
#chartRelation{width:100%;height:380px}
@media(max-width:1080px){#chartRelation{height:340px}}
.sun-path{transition:fill-opacity .15s}
.sun-path:hover{fill-opacity:1}
.sankey-node{transition:opacity .15s}
.sankey-node:hover{opacity:.85}

/* ---------- KPI 目标对标 ---------- */
.kgrid{grid-template-columns:repeat(2,1fr)}
.kgoal{padding:13px 14px;border:1px solid var(--line);border-radius:11px}
.kgoal .kh{display:flex;justify-content:space-between;align-items:baseline;gap:8px}
.kgoal .kid{font-size:12px;font-weight:800;color:var(--primary)}
.kgoal .kt{font-size:11px;color:var(--teal);font-weight:700}
.kgoal .kname{font-size:12.5px;color:var(--sub);margin:4px 0 8px}
.bar{height:8px;background:#eef1f5;border-radius:6px;overflow:hidden}
.bar i{display:block;height:100%;background:linear-gradient(90deg,var(--accent),var(--teal));border-radius:6px}
.kgoal .kv{font-size:11.5px;color:var(--sub);margin-top:5px;display:flex;justify-content:space-between}
@media(max-width:680px){.kgrid{grid-template-columns:1fr}}

/* ---------- 行业对标 ---------- */
.bench{grid-template-columns:repeat(4,1fr)}
.bcard{padding:13px;border-radius:11px;background:linear-gradient(135deg,#fbfdff,#f1f8f6);border:1px solid #d9ecdf;text-align:center}
.bcard .bv{font-size:20px;font-weight:800;color:var(--teal)}
.bcard .bl{font-size:11.5px;color:var(--sub);margin-top:3px}
@media(max-width:760px){.bench{grid-template-columns:repeat(2,1fr)}}

/* ---------- 数据源与风险 ---------- */
.ds,.risk{margin-top:14px;padding:16px}
.ds-h{font-size:14px;font-weight:800;color:var(--primary);margin:0 0 12px;display:flex;align-items:center;gap:8px}
.ds-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px}
.ds-item{border:1px solid #e2ecf5;border-radius:10px;padding:11px 12px;background:#fff;position:relative;overflow:hidden}
.ds-item:before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--accent)}
.ds-n{font-size:13px;font-weight:800;color:var(--primary)}
.ds-f{font-size:11.5px;color:var(--sub);margin-top:5px;line-height:1.5}
.ds-m{font-size:11px;color:#94a3b8;margin-top:5px;line-height:1.5}
.ds-scale{display:flex;flex-wrap:wrap;align-items:center;gap:10px 18px;margin-top:14px;padding:11px 14px;background:#f7fbff;border:1px solid #cfe3f2;border-radius:10px}
.ds-scale span{font-size:11.5px;color:var(--sub)}
.ds-scale b{font-size:18px;font-weight:800;color:var(--teal)}
.ds-scale .ds-note{margin-left:auto;font-size:11px;color:#94a3b8}
@media(max-width:560px){.ds-scale .ds-note{margin-left:0;width:100%}}
.risk-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:10px}
.r-item{border:1px solid #f0dcb4;border-radius:10px;padding:12px;background:#fffdf5}
.r-t{font-size:13px;font-weight:800;color:var(--amber);display:flex;align-items:center;gap:6px}
.r-t:before{content:"";width:8px;height:8px;border-radius:50%;background:var(--amber);flex:none}
.r-d{font-size:12px;color:var(--sub);margin-top:6px;line-height:1.6}
.r-c{font-size:12px;color:var(--teal);margin-top:6px;line-height:1.6;padding-left:10px;border-left:2px solid var(--teal-soft)}
@media(max-width:680px){.risk-grid{grid-template-columns:1fr}}

/* ---------- 实施路线 ---------- */
.road{padding:16px}
.ms{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}
.mcard{border:1px solid var(--line);border-radius:11px;padding:12px;background:#fff;position:relative}
.mcard .mp{font-size:11px;font-weight:700;color:#fff;background:var(--primary-2);display:inline-block;padding:2px 8px;border-radius:6px}
.mcard .mt{font-size:13.5px;font-weight:800;color:var(--ink);margin:8px 0 6px}
.mcard .md{font-size:12px;color:var(--sub);margin:0;padding-left:16px}
.mcard .md li{margin:3px 0}
.mcard .bar{margin-top:9px}
.mcard .bar i{background:var(--amber)}
@media(max-width:760px){.ms{grid-template-columns:repeat(2,1fr)}}
@media(max-width:430px){.ms{grid-template-columns:1fr}}

/* ---------- 操作顺序 ---------- */
.ops{padding:16px}
.ops-flow{display:flex;align-items:stretch;gap:6px;flex-wrap:wrap}
.op{flex:1;min-width:140px;text-decoration:none;display:flex;flex-direction:column;gap:3px;border:1px solid var(--line);border-radius:12px;padding:12px 14px;background:#fff;color:var(--ink);transition:.15s}
.op:hover{border-color:var(--accent);box-shadow:0 2px 10px rgba(47,143,214,.18);color:var(--primary)}
.op b{font-size:14px;color:var(--primary)}
.op div{font-size:12px;color:var(--sub)}
.op-ar{display:flex;align-items:center;color:var(--teal);font-size:20px;font-weight:800;flex:none;padding:0 2px}
@media(max-width:680px){.op-ar{transform:rotate(90deg);width:100%;justify-content:center}}

/* ---------- 明细台账 ---------- */
.toolbar{display:flex;flex-wrap:wrap;gap:8px;align-items:center;padding:12px}
.toolbar select,.toolbar input{font-size:14px;padding:8px 10px;border:1px solid var(--line);border-radius:8px;background:#fff;color:var(--ink);min-height:40px}
.toolbar input[type=search]{min-width:150px;flex:1}
.btn{font-size:13px;padding:8px 14px;border-radius:8px;border:1px solid var(--primary);background:var(--primary);color:#fff;cursor:pointer;min-height:40px}
.btn.ghost{background:#fff;color:var(--primary)}
.btn.soft{background:var(--primary-soft);color:var(--primary);border-color:var(--primary-soft)}
table{width:100%;border-collapse:collapse;font-size:12.5px;table-layout:fixed}
th,td{padding:8px 8px;text-align:left;border-bottom:1px solid var(--line);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;vertical-align:middle}
th{background:#f7f9fc;color:var(--sub);font-weight:600;font-size:12px;position:sticky;top:0;z-index:1}
th:last-child,td:last-child{overflow:visible}
tbody tr:hover{background:#fafcff}
.pill{font-size:11px;padding:2px 8px;border-radius:20px;font-weight:600}
.p-normal{background:var(--green-soft);color:var(--green)}
.p-abn{background:var(--amber-soft);color:var(--amber)}
.p-over{background:var(--red-soft);color:var(--red)}
.p-todo{background:#eef1f5;color:#5a6b7d}.p-doing{background:var(--amber-soft);color:var(--amber)}.p-done{background:var(--green-soft);color:var(--green)}
.rowact{display:flex;gap:6px}
.rowact button{font-size:12px;padding:5px 9px;border-radius:7px;border:1px solid var(--line);background:#fff;cursor:pointer;min-height:32px;color:var(--ink)}
.rowact .del{border-color:#f0caca;color:var(--red)}
.table-scroll{overflow-x:auto;padding:0 12px 4px}
/* 台账表格：窄屏压缩列宽，极窄时保留横向滚动兜底 */
@media(max-width:1080px){
  .table-scroll table{min-width:860px}
  .table-scroll th,.table-scroll td{padding:7px 6px;font-size:12px}
}
.imp{padding:16px}
.drop{border:2px dashed var(--line);border-radius:12px;padding:18px;text-align:center;color:var(--sub);cursor:pointer;background:#fbfdff;font-size:14px}
.drop:hover{border-color:var(--accent);color:var(--accent)}
.imp-row{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}
.hint{font-size:12px;color:var(--sub);margin-top:10px;line-height:1.6}
.hint code{background:#eef1f5;padding:1px 5px;border-radius:4px;font-family:ui-monospace,Consolas,monospace}

/* ---------- modal / toast / foot ---------- */
.mask{position:fixed;inset:0;background:rgba(20,40,60,.45);display:none;align-items:flex-start;justify-content:center;z-index:50;padding:30px 14px;overflow:auto}
.mask.show{display:flex}
.modal{background:#fff;border-radius:14px;width:100%;max-width:520px;padding:18px}
.modal h3{margin:0 0 14px;color:var(--primary)}
.fld{margin-bottom:11px}
.fld label{display:block;font-size:12px;color:var(--sub);margin-bottom:4px}
.fld input,.fld select{width:100%;font-size:15px;padding:9px 10px;border:1px solid var(--line);border-radius:8px;background:#fff;color:var(--ink)}
.modal-btns{display:flex;gap:10px;justify-content:flex-end;margin-top:6px}
.toast{position:fixed;left:50%;bottom:30px;transform:translateX(-50%);background:#1f2d3d;color:#fff;padding:10px 18px;border-radius:24px;font-size:13px;z-index:80;opacity:0;transition:.25s;pointer-events:none}
.toast.show{opacity:1}
.toast.ok{background:var(--green)} .toast.warn{background:var(--amber)} .toast.err{background:var(--red)} .toast.loading{background:#1f2d3d}
.toast .tload{display:inline-block;width:13px;height:13px;border:2px solid rgba(255,255,255,.4);border-top-color:#fff;border-radius:50%;vertical-align:-2px;margin-right:7px;animation:spin .8s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
.foot{text-align:center;font-size:11.5px;color:var(--sub);padding:14px 0 0}
.inline-loading{display:flex;align-items:center;justify-content:center;gap:9px;color:var(--sub);font-size:13px;padding:32px 10px}
.inline-loading .spin{width:16px;height:16px;border:2px solid #cdd8e4;border-top-color:var(--accent);border-radius:50%;animation:spin .8s linear infinite}
.state-empty,.state-error{text-align:center;padding:30px 16px;font-size:13px;border-radius:12px;line-height:1.7}
.state-empty{color:var(--sub);background:#f7fafc;border:1px dashed var(--line)}
.state-empty svg{width:42px;height:42px;color:#c4cedb;margin:0 auto 8px;display:block}
.state-error{color:var(--red);background:var(--red-soft);border:1px solid #f3c6c6}
.state-error svg{width:34px;height:34px;margin:0 auto 6px;display:block}
@media(max-width:560px){
  header h1{font-size:16px}
  .hero .pos{font-size:18px}
  .hbtns .hbtn{padding:7px 10px}
  .wrap{padding:12px 10px 48px}
  .sec-title{font-size:14px}
  .sec-title .sub{display:none}
  .exec{padding:12px}
  .params{grid-template-columns:1fr}
  .ctl-row .btn{flex:1 1 45%;min-width:0}
  .steps-horizontal{grid-template-columns:repeat(3,1fr)}
  .log-container{height:230px}
  .hero .meta{gap:6px 12px}
  .kpi .k-val{font-size:19px}
}

/* ---------- 左侧导航 ---------- */
html{scroll-behavior:smooth}
.section{scroll-margin-top:78px}
.nav-brand{display:flex;align-items:center;gap:10px;padding:2px 6px 10px;margin-bottom:4px;border-bottom:1px solid var(--line)}
.nav-brand .logo{width:38px;height:38px;border-radius:10px;background:linear-gradient(135deg,var(--primary),var(--teal));flex:none;display:flex;align-items:center;justify-content:center;overflow:hidden}
.nav-brand .logo img{width:100%;height:100%;object-fit:cover;display:block}
.nav-brand .logo svg{width:22px;height:22px;color:#fff}
.nav-brand .bn{font-size:15px;font-weight:800;color:var(--primary);line-height:1.15}
.nav-brand .bs{font-size:10.5px;color:var(--sub);margin-top:1px}
.nav-progress{margin:2px 4px 12px;padding:10px;border:1px solid var(--line);border-radius:10px;background:var(--primary-soft)}
.nav-progress .pt{font-size:11px;color:var(--sub);display:flex;justify-content:space-between;align-items:center}
.nav-progress .pv{font-size:12px;font-weight:800;color:var(--primary)}
.nav-progress .prow{display:flex;align-items:center;gap:10px;margin-top:6px}
.nav-progress .ptxt{font-size:11px;color:var(--sub);line-height:1.45}
.nav-progress .ptxt b{color:var(--ink)}
.nav-side{position:fixed;top:72px;left:0;bottom:0;width:212px;background:#fff;border-right:1px solid var(--line);
  padding:14px 10px;overflow-y:auto;z-index:15;display:flex;flex-direction:column}
.nav-side .nv,.nav-drawer .nv{display:flex;align-items:center;gap:9px;padding:9px 10px;border-radius:9px;color:var(--sub);
  font-size:13px;font-weight:600;text-decoration:none;cursor:pointer}
.nav-side .nv svg,.nav-drawer .nv svg{width:17px;height:17px;flex:none;color:var(--accent)}
.nav-side .nv:hover,.nav-drawer .nv:hover{background:var(--primary-soft);color:var(--primary)}
.nav-side .nv.active,.nav-drawer .nv.active{background:var(--primary);color:#fff}
.nav-side .nv.active svg,.nav-drawer .nv.active svg{color:#fff}
.nav-hamburger{display:none}
.nav-drawer{display:none}
.nav-drawer-mask{display:none}
@media(min-width:901px){
  .wrap{width:auto;max-width:min(1440px, calc(100vw - 252px));margin-left:228px;margin-right:20px}
  @media(min-width:1600px){.wrap{max-width:calc(100vw - 252px);margin-right:auto}}
}
@media(max-width:900px){
  .nav-side{display:none}
  .nav-hamburger{display:flex;position:fixed;right:16px;bottom:18px;width:54px;height:54px;border-radius:50%;
    background:linear-gradient(135deg,var(--primary),var(--teal));color:#fff;border:none;
    box-shadow:0 4px 16px rgba(31,78,121,.35);align-items:center;justify-content:center;z-index:40;cursor:pointer}
  .nav-hamburger svg{width:26px;height:26px}
  .nav-drawer{display:flex;position:fixed;top:0;left:0;bottom:0;width:min(280px,82vw);background:#fff;z-index:60;
    flex-direction:column;overflow-y:auto;box-shadow:2px 0 18px rgba(0,0,0,.18);padding:14px 12px 28px;
    transform:translateX(-100%);transition:transform .25s ease}
  .nav-drawer.open{transform:translateX(0)}
  .nav-drawer .drawer-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:6px}
  .nav-drawer .closex{background:none;border:none;cursor:pointer;padding:4px 6px;line-height:1;color:var(--sub)}
  .nav-drawer .closex svg{width:22px;height:22px}
  .nav-drawer-mask{display:block;position:fixed;inset:0;background:rgba(20,40,60,.4);z-index:55;
    opacity:0;visibility:hidden;transition:opacity .2s}
  .nav-drawer-mask.show{opacity:1;visibility:visible}
  .wrap{padding-bottom:112px}
}

/* ---------- 帮助向导 ---------- */
.help-q{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;border-radius:50%;
  background:var(--primary-soft);color:var(--primary);font-size:12px;font-weight:800;cursor:help;
  margin-left:6px;flex:none;position:relative;border:1px solid #cfdcec;user-select:none}
.help-q:hover{background:var(--primary);color:#fff;border-color:var(--primary)}
.help-tip{position:absolute;top:24px;left:50%;transform:translateX(-50%);width:264px;max-width:80vw;
  background:#fff;border:1px solid var(--line);border-radius:10px;box-shadow:0 6px 22px rgba(31,78,121,.18);
  padding:11px 13px;font-size:12.5px;line-height:1.6;color:var(--ink);z-index:75;text-align:left;font-weight:400;display:none;white-space:normal}
.help-tip b{color:var(--primary);display:block;margin-bottom:3px;font-size:12.5px}
.help-tip .hv{color:var(--teal);font-weight:700;margin-top:6px;display:block}
.help-tip:before{content:"";position:absolute;top:-6px;left:50%;transform:translateX(-50%) rotate(45deg);
  width:11px;height:11px;background:#fff;border-left:1px solid var(--line);border-top:1px solid var(--line)}
.help-q:hover .help-tip,.help-q.open .help-tip{display:block}
.mod-desc{font-size:12.5px;color:var(--sub);margin:0 0 14px;line-height:1.6;
  background:#f7fafc;border:1px dashed var(--line);border-radius:8px;padding:8px 12px}
.mod-desc b{color:var(--primary)}
.pre-note{display:flex;align-items:flex-start;gap:7px;font-size:12.5px;color:var(--amber);
  background:var(--amber-soft);border:1px solid #f0dcb4;border-radius:8px;padding:8px 12px;margin-bottom:12px;line-height:1.6}
.pre-note svg{width:16px;height:16px;flex:none;margin-top:1px}
.tour-spot{position:fixed;z-index:70;pointer-events:none;border-radius:14px;
  box-shadow:0 0 0 9999px rgba(20,40,60,.55),0 0 0 3px var(--teal) inset,0 0 0 6px rgba(15,155,142,.35);
  transition:left .25s ease,top .25s ease,width .25s ease,height .25s ease;display:none}
.tour-card{position:fixed;z-index:72;width:320px;max-width:calc(100vw - 32px);background:#fff;
  border-radius:14px;box-shadow:0 12px 40px rgba(31,78,121,.28);padding:16px;border:1px solid var(--line);display:none}
.tour-card .tc-step{font-size:11px;font-weight:800;color:var(--teal);letter-spacing:.5px}
.tour-card .tc-title{font-size:15px;font-weight:800;color:var(--primary);margin:4px 0 8px}
.tour-card .tc-text{font-size:13px;color:var(--ink);line-height:1.7}
.tour-card .tc-dots{display:flex;gap:6px;margin:12px 0 2px}
.tour-card .tc-dots i{width:7px;height:7px;border-radius:50%;background:#dde3ea;flex:none;transition:width .2s}
.tour-card .tc-dots i.on{background:var(--teal);width:18px;border-radius:4px}
.tour-card .tc-btns{display:flex;align-items:center;gap:8px;margin-top:10px}
.tour-card .tc-btns .sp{flex:1}
.tour-card .tc-skip{background:none;border:none;color:var(--sub);font-size:12px;cursor:pointer;text-decoration:underline;padding:6px 4px;white-space:nowrap}
.tour-card .tc-prev,.tour-card .tc-next{font-size:13px;padding:8px 16px;border-radius:8px;border:1px solid var(--primary);
  background:var(--primary);color:#fff;cursor:pointer;min-height:38px;white-space:nowrap}
.tour-card .tc-prev{background:#fff;color:var(--primary)}
.help-fab{position:fixed;left:16px;bottom:18px;width:52px;height:52px;border-radius:50%;
  background:linear-gradient(135deg,var(--primary),var(--teal));color:#fff;border:none;
  box-shadow:0 4px 16px rgba(31,78,121,.32);z-index:45;cursor:pointer;display:flex;align-items:center;justify-content:center}
.help-fab svg{width:26px;height:26px}
.help-fab:active{transform:scale(.96)}
.help-panel{position:fixed;left:16px;bottom:80px;width:344px;max-width:calc(100vw - 32px);max-height:calc(100vh - 110px);
  background:#fff;border:1px solid var(--line);border-radius:16px;box-shadow:0 14px 44px rgba(31,78,121,.22);
  z-index:88;display:none;flex-direction:column;overflow:hidden}
.help-panel.open{display:flex}
.help-panel .hp-head{padding:14px 16px;border-bottom:1px solid var(--line);
  background:linear-gradient(135deg,#163d61,#2f6fb8);color:#fff;display:flex;justify-content:space-between;align-items:center;gap:10px}
.help-panel .hp-head .ht{font-size:15px;font-weight:800}
.help-panel .hp-head .hs{font-size:11px;opacity:.85;margin-top:2px}
.help-panel .hp-close{background:rgba(255,255,255,.18);border:none;color:#fff;border-radius:8px;width:30px;height:30px;cursor:pointer;flex:none}
.help-panel .hp-close svg{width:18px;height:18px}
.help-panel .hp-body{overflow-y:auto;padding:10px 14px 4px}
.help-panel .hp-item{border:1px solid var(--line);border-radius:10px;padding:10px 12px;margin-bottom:9px;background:#fff}
.help-panel .hp-item .hp-t{font-size:13.5px;font-weight:800;color:var(--primary)}
.help-panel .hp-item .hp-d{font-size:12px;color:var(--sub);margin-top:4px;line-height:1.6}
.help-panel .hp-item .hp-h{font-size:12px;color:var(--teal);margin-top:5px;line-height:1.55}
.help-panel .hp-replay{margin:4px 14px 14px}
.help-panel .hp-replay button{width:100%;font-size:13px;padding:10px;border-radius:9px;border:1px solid var(--teal);
  background:var(--teal-soft);color:var(--teal);font-weight:700;cursor:pointer;min-height:40px}
@media(max-width:560px){
  .help-fab{width:48px;height:48px}
  .help-panel{left:10px;right:10px;width:auto}
  .tour-card{width:300px}
}

/* ---------- 数字人 AI 助手 ---------- */
.dh-avatar{position:fixed;right:22px;bottom:28px;width:64px;height:64px;border-radius:50%;
  background:var(--card);border:2px solid rgba(255,255,255,.85);box-shadow:0 6px 20px rgba(31,78,121,.22);
  cursor:pointer;z-index:90;overflow:hidden;transition:transform .2s,box-shadow .2s,filter .2s}
.dh-avatar:hover{transform:scale(1.06);box-shadow:0 8px 26px rgba(31,78,121,.3);filter:brightness(1.08)}
.dh-avatar img{width:100%;height:100%;object-fit:cover;display:block}
.dh-chat{position:fixed;right:22px;bottom:104px;width:380px;max-width:calc(100vw - 32px);height:520px;max-height:calc(100vh - 140px);
  background:var(--card);border:1px solid var(--line);border-radius:16px;box-shadow:0 12px 40px rgba(31,78,121,.18);
  display:flex;flex-direction:column;z-index:95;transform:translateY(20px) scale(0.96);opacity:0;visibility:hidden;
  transition:transform .22s ease,opacity .22s,visibility .22s}
.dh-chat.open{transform:translateY(0) scale(1);opacity:1;visibility:visible}
.dh-head{display:flex;align-items:center;justify-content:space-between;padding:14px 16px;border-bottom:1px solid var(--line);
  background:linear-gradient(135deg,#163d61,#2f6fa8);border-radius:16px 16px 0 0;color:#fff}
.dh-head .dh-title{font-size:15px;font-weight:800;display:flex;align-items:center;gap:8px}
.dh-head .dh-title svg{width:18px;height:18px;flex:none}
.dh-head .dh-sub{font-size:11px;opacity:.85;margin-top:2px}
.dh-head .dh-close{background:rgba(255,255,255,.18);border:none;color:#fff;border-radius:8px;width:32px;height:32px;
  cursor:pointer;display:flex;align-items:center;justify-content:center;transition:background .2s}
.dh-head .dh-close:hover{background:rgba(255,255,255,.32)}
.dh-msgs{flex:1;overflow-y:auto;padding:14px 14px 4px;background:#f8fafc}
.dh-msg{display:flex;gap:10px;margin-bottom:14px;align-items:flex-start}
.dh-msg.dh-user{flex-direction:row-reverse}
.dh-ava{width:32px;height:32px;border-radius:50%;overflow:hidden;flex:none;background:#fff;border:1px solid var(--line)}
.dh-ava img{width:100%;height:100%;object-fit:cover}
.dh-bubble{max-width:78%;padding:11px 13px;border-radius:12px;font-size:13.5px;line-height:1.55;word-break:break-word}
.dh-user .dh-bubble{background:var(--primary);color:#fff;border-bottom-right-radius:4px}
.dh-assistant .dh-bubble{background:#fff;border:1px solid var(--line);color:var(--ink);border-bottom-left-radius:4px}
.dh-time{font-size:10px;color:var(--sub);margin-top:4px;text-align:center}
.dh-loading{display:flex;gap:5px;padding:12px 14px;background:#fff;border:1px solid var(--line);border-radius:12px;
  align-items:center;width:fit-content}
.dh-loading span{width:7px;height:7px;border-radius:50%;background:var(--accent);animation:dhPulse 1.2s infinite}
.dh-loading span:nth-child(2){animation-delay:.2s}
.dh-loading span:nth-child(3){animation-delay:.4s}
@keyframes dhPulse{0%,80%,100%{transform:scale(.7);opacity:.5}40%{transform:scale(1);opacity:1}}
.dh-foot{padding:12px 14px;border-top:1px solid var(--line);background:#fff;border-radius:0 0 16px 16px}
.dh-form{display:flex;gap:8px;align-items:center}
.dh-input{flex:1;border:1px solid var(--line);border-radius:10px;padding:10px 12px;font-size:14px;color:var(--ink);
  background:#fff;outline:none;transition:border-color .2s,box-shadow .2s;min-height:40px}
.dh-input:focus{border-color:var(--accent);box-shadow:0 0 0 3px rgba(47,143,214,.12)}
.dh-send{background:var(--primary);color:#fff;border:none;border-radius:10px;padding:10px 16px;font-size:13px;font-weight:700;
  cursor:pointer;min-height:40px;transition:background .2s}
.dh-send:hover{background:var(--primary-2)}
.dh-send:disabled{opacity:.6;cursor:not-allowed}
.dh-error{margin:6px 14px;padding:9px 12px;background:var(--red-soft);color:var(--red);border:1px solid #f5c6c6;
  border-radius:8px;font-size:12.5px;display:none}
.dh-error.show{display:block}
.dh-quicks{margin:0 0 12px;display:flex;flex-wrap:wrap;gap:7px}
.dh-quick{display:inline-flex;align-items:center;gap:5px;max-width:100%;background:#fff;border:1px solid #cfdcec;
  color:var(--primary);font-size:12px;line-height:1.35;border-radius:999px;padding:6px 11px;cursor:pointer;
  transition:all .18s;text-align:left}
.dh-quick:hover{background:var(--primary);color:#fff;border-color:var(--primary);box-shadow:0 2px 8px rgba(31,78,121,.22)}
.dh-quick svg{width:12px;height:12px;flex:none;opacity:.7}
.dh-tip{padding:10px 12px;background:var(--primary-soft);color:var(--primary);border-radius:8px;font-size:12px;margin-bottom:10px;
  display:flex;align-items:flex-start;gap:6px;line-height:1.5}
.dh-tip svg{width:16px;height:16px;flex:none;margin-top:1px}
@media(max-width:640px){
  .dh-chat{right:10px;left:10px;width:auto;bottom:96px;max-height:calc(100vh - 120px)}
  .dh-avatar{right:14px;bottom:18px;width:56px;height:56px}
}

/* ============================================================
   实时执行台（SAP 盘点自动化 6 步流程交互区 · 浅色适配版）
   ============================================================ */
.exec{padding:18px}
.exec-grid{display:grid;grid-template-columns:1.15fr .85fr;gap:16px}
.exec-status-top{margin-bottom:16px}
@media(max-width:1080px){.exec-grid{grid-template-columns:1fr}}
@media(max-width:900px){.exec-grid{grid-template-columns:1fr}}
.exec-panel{border:1px solid var(--line);border-radius:12px;padding:14px;background:#fff}
.exec-panel h4{margin:0 0 12px;font-size:13.5px;font-weight:800;color:var(--primary);display:flex;align-items:center;gap:7px}
.exec-panel h4 svg{width:16px;height:16px;flex:none;color:var(--accent)}
/* AI 盘存分析建议面板 */
.advice-panel{margin-top:16px;border-color:#e3d9f2;background:linear-gradient(180deg,#fdfbff 0%,#fff 60%)}
.advice-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;flex-wrap:wrap}
.advice-head h4{margin:0}
.advice-actions{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.advice-src{font-size:12px;color:var(--sub);max-width:340px;line-height:1.5}
.advice-badge{display:inline-block;padding:2px 10px;border-radius:20px;font-size:11px;font-weight:700;background:#eef2ff;color:var(--primary);margin-left:2px}
.advice-badge.gen{background:var(--primary-soft);color:var(--primary)}
.advice-badge.done{background:#e8f7ee;color:#1f9d55}
.advice-badge.err{background:#fdeaea;color:var(--red)}
.advice-body{margin-top:12px;border-top:1px dashed var(--line);padding-top:12px;min-height:60px;font-size:13px;line-height:1.75;color:var(--ink);max-height:560px;overflow:auto}
.advice-empty{color:#94a3b8;font-size:12.5px;text-align:center;padding:22px 10px}
.advice-loading{display:flex;align-items:center;gap:10px;color:var(--sub);font-size:12.5px;padding:8px 2px}
.advice-loading .spinner{width:15px;height:15px;border:2px solid #d8e0f0;border-top-color:var(--primary);border-radius:50%;animation:spin 0.8s linear infinite;flex:none}
@keyframes spin{to{transform:rotate(360deg)}}
.advice-body .a-sec{margin:12px 0 4px;font-size:13.5px;font-weight:800;color:var(--primary)}
.advice-body .a-sec:first-child{margin-top:0}
.advice-body ul{margin:6px 0 10px;padding-left:20px}
.advice-body li{margin:4px 0}
.advice-body table{border-collapse:collapse;width:100%;margin:8px 0 12px;font-size:12.5px}
.advice-body table th,.advice-body table td{border:1px solid var(--line);padding:6px 8px;text-align:left}
.advice-body table th{background:#f7f9fc;font-weight:700}
.advice-body code{background:#f1f5f9;padding:1px 5px;border-radius:4px;font-size:12px}
.advice-body .a-tag{display:inline-block;padding:1px 8px;border-radius:10px;font-size:11px;font-weight:700;margin-right:4px}
.a-tag.over{background:#fdeaea;color:#e23b3b}
.a-tag.abn{background:#fdf3e2;color:#d98b1a}
.a-tag.new{background:#e8f0fe;color:#2563eb}
.a-tag.rep{background:#f3e8fd;color:#7c3aed}
.advice-body b{color:var(--ink)}
/* 参数表单 */
.params{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
.params .fld{margin:0}
@media(max-width:640px){.params{grid-template-columns:1fr}}
@media(min-width:641px) and (max-width:1080px){.params{grid-template-columns:repeat(2,1fr)}}
.file-display{display:flex;align-items:center;gap:8px;margin-top:12px;padding:10px 12px;background:#f7f9fc;
  border:1px dashed var(--line);border-radius:8px;font-size:12.5px;color:var(--sub);min-height:42px}
.file-display .fname{font-weight:700;color:var(--primary);word-break:break-all}
.file-display.empty::after{content:"（可选：默认从飞书多维表格自动生成上载文件）";color:#94a3b8}
.feishu-hint{margin-top:10px;padding:9px 12px;border-radius:8px;font-size:12.5px;line-height:1.6;display:none}
.feishu-hint.show{display:block}
.feishu-hint.on{background:var(--teal-soft);border:1px solid #bfe6cd;color:var(--teal)}
.feishu-hint.off{background:var(--primary-soft);border:1px solid #cfdcec;color:var(--primary)}
.feishu-hint err{color:var(--red)}
/* 控制按钮 */
.ctl-row{display:flex;flex-wrap:wrap;gap:8px;margin-top:14px}
.ctl-row .btn{flex:1;min-width:96px;display:inline-flex;align-items:center;justify-content:center;gap:6px}
.ctl-row .btn svg{width:15px;height:15px;flex:none}
.btn.danger{background:#fff;color:var(--red);border-color:#f0caca}
.btn.danger:hover{background:var(--red);color:#fff}
.btn.warnbtn{background:#fff;color:var(--amber);border-color:#f0dcb4}
.btn.warnbtn:hover{background:var(--amber);color:#fff}
.btn-resume{background:#fff;color:var(--teal);border-color:#bfe6cd}
.btn-resume:hover{background:var(--teal);color:#fff}
.btn:disabled{opacity:.5;cursor:not-allowed}
/* 按月清除盘点数据（只删所选年月，其他月份不受影响） */
.clear-row{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-top:12px;padding:10px 12px;background:var(--red-soft);border:1px solid #f3d5d5;border-radius:10px}
.clear-row .clear-title{display:inline-flex;align-items:center;gap:6px;font-size:12.5px;font-weight:700;color:var(--red);white-space:nowrap}
.clear-row .clear-title svg{width:15px;height:15px;flex:none}
.clear-row .clear-ym{width:86px;padding:7px 10px;border:1px solid #d8dee8;border-radius:8px;font-size:13px;font-family:ui-monospace,Consolas,monospace;background:#fff;color:var(--text)}
.clear-row .clear-ym:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px rgba(37,99,235,.12)}
.clear-row .btn{min-width:0;padding:7px 12px;font-size:12.5px;display:inline-flex;align-items:center;gap:5px}
.clear-row .btn svg{width:14px;height:14px;flex:none}
.clear-row .clear-tip{flex-basis:100%;font-size:12px;color:var(--sub);line-height:1.6;min-height:16px}
.clear-row .clear-tip.warn{color:var(--red);font-weight:600}
.clear-row .clear-tip.ok{color:var(--teal);font-weight:600}
/* 状态徽标 */
.phase-badge{display:inline-flex;align-items:center;gap:7px;padding:5px 13px;border-radius:20px;font-size:12.5px;font-weight:700;background:#eef1f5;color:#5a6b7d;min-height:32px}
.phase-badge i{width:8px;height:8px;border-radius:50%;background:#9aa7b5}
.phase-badge.running{background:var(--teal-soft);color:var(--teal)}
.phase-badge.running i{background:var(--teal);animation:dhPulse 1.4s infinite}
.phase-badge.done{background:var(--green-soft);color:var(--green)}
.phase-badge.done i{background:var(--green)}
.phase-badge.error,.phase-badge.stopped{background:var(--red-soft);color:var(--red)}
.phase-badge.error i,.phase-badge.stopped i{background:var(--red)}
.phase-badge.paused{background:var(--amber-soft);color:var(--amber)}
.phase-badge.paused i{background:var(--amber)}
/* 执行统计条 */
.exec-meta{display:flex;flex-wrap:wrap;gap:10px 20px;margin-top:12px;font-size:12.5px;color:var(--sub)}
.exec-meta b{color:var(--primary);font-family:ui-monospace,Consolas,monospace}
/* 6 步进度（横向步骤条） */
.steps-horizontal{display:grid;grid-template-columns:repeat(6,1fr);gap:6px;margin-top:14px}
.step-item{border:1px solid var(--line);border-radius:10px;padding:9px 6px;text-align:center;background:#fff;position:relative;transition:.15s}
.step-item .step-num{width:22px;height:22px;border-radius:50%;background:#9aa7b5;color:#fff;font-size:11px;font-weight:800;
  display:inline-flex;align-items:center;justify-content:center;margin:0 auto 5px}
.step-item .step-name{font-size:11.5px;font-weight:700;color:var(--ink);line-height:1.25}
.step-item .step-stat{display:block;font-size:10px;color:var(--sub);margin-top:3px}
.step-item.done{border-color:#bfe6cd;background:#f3fbf5}
.step-item.done .step-num{background:var(--green)}
.step-item.done .step-stat{color:var(--green)}
.step-item.running{border-color:var(--teal);background:var(--teal-soft);box-shadow:0 2px 8px rgba(15,155,142,.2)}
.step-item.running .step-num{background:var(--teal)}
.step-item.running .step-stat{color:var(--teal);font-weight:700}
.step-item.running:after{content:"";position:absolute;right:7px;top:7px;width:7px;height:7px;border-radius:50%;background:var(--teal);animation:dhPulse 1.4s infinite}
.step-item.error{border-color:#f3c0c0;background:var(--red-soft)}
.step-item.error .step-num{background:var(--red)}
.step-item.error .step-stat{color:var(--red);font-weight:700}
.step-item.paused{border-color:#f0dcb4;background:var(--amber-soft)}
.step-item.paused .step-num{background:var(--amber)}
.step-item.paused .step-stat{color:var(--amber)}
@media(max-width:760px){.steps-horizontal{grid-template-columns:repeat(3,1fr)}}
@media(max-width:430px){.steps-horizontal{grid-template-columns:repeat(2,1fr)}}
/* 日志窗口 */
.log-head{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px;flex-wrap:wrap}
.log-head .lg{margin:0;font-size:13px;font-weight:700;color:var(--ink)}
.log-container{height:280px;overflow-y:auto;background:#0f1b2a;border-radius:10px;padding:10px 12px;
  font-family:ui-monospace,Consolas,"Courier New",monospace;font-size:12px;line-height:1.7}
.log-container::-webkit-scrollbar{width:8px}
.log-container::-webkit-scrollbar-thumb{background:#2d4259;border-radius:4px}
.log-line{display:flex;gap:8px;color:#c8d6e4;word-break:break-all}
.log-line .lt{color:#64748b;flex:none}
.log-line.info{color:#c8d6e4}
.log-line.success{color:#4ade80}
.log-line.warn{color:#fbbf24}
.log-line.error{color:#f87171}
.log-line.phase{color:#7fd1ff;font-weight:600}
.log-placeholder{color:#64748b;text-align:center;padding:80px 0;font-style:italic}
/* 台账数据源切换提示 */
.ledger-src{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--sub);margin-bottom:10px;flex-wrap:wrap}
.ledger-src .src-tag{font-size:11px;font-weight:700;padding:3px 9px;border-radius:20px;background:var(--primary-soft);color:var(--primary)}
.ledger-src .src-tag.live{background:var(--teal-soft);color:var(--teal)}
.ledger-src button{font-size:11.5px;padding:4px 10px;border-radius:7px;border:1px solid var(--line);background:#fff;color:var(--sub);cursor:pointer;min-height:30px}
.ledger-src button:hover{color:var(--primary);border-color:var(--primary)}

@media print{
  header,.nav-side,.nav-drawer,.nav-drawer-mask,.nav-hamburger,.help-fab,.help-panel,.dh-avatar,.dh-chat,.tour-spot,.tour-card{display:none!important}
  .wrap{margin:0}
}