/* 样式单源 app.css — 酒店转化平台二期应用壳与十视图（W3-S6-SL4）
 *
 * 来源：openspec/design/walkthrough/demo-template-r6.html 第 8 至 310 行的内联 style 块，
 *       逐行提取、⛔ 顺手改值——形态锚只锁结构不锁像素，像素面靠「单源」从结构上
 *       消灭第二处定义（ADR-5 形态锁定三件套之一，S6-R3 的缓解手段就是这条）。
 *
 * 为什么必须提取出来：CSP 收敛为 default-src 'self' 之后，页面内的 <style> 块与
 * style 属性会被整片挡掉（06 章响应安全头节）。样式留在页面里＝要么 CSP 落不了地，
 * 要么落地即白屏。
 *
 * 纪律：
 *   一、⛔ 在 index.html 或任何 view-*.js 里再写第二处样式定义（AC66 其一逐条机判）；
 *   二、设计系统变量只在本文件的 :root 里定义一次，⛔ 各组件各写一份色值；
 *   三、本文件之外 ⛔ 出现第二张被 index.html 链上的样式表。
 *
 * 追加段（demo 无对应物、二期新增的壳级组件）集中在文件末尾「二期壳追加」一节，
 * 与提取段分开放：下次比对 demo 时能一眼看出哪些是提取的、哪些是新加的。
 */

:root{
  --ink:#23262b;--paper:#f6f4ef;--card:#fffefb;--line:#e8e6e1;
  --brass:#3370ff;--seal:#f53f3f;--pine:#00b42a;--amber:#ff7d00;
  --txt:#23262b;--txt-2:#5d636b;--txt-3:#7c828b;
  --sans:'PingFang SC','Hiragino Sans GB',-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;
  --sh1:0 1px 2px rgba(60,50,30,.05),0 1px 3px rgba(60,50,30,.04);
  --sh3:0 8px 24px rgba(60,50,30,.10),0 2px 6px rgba(60,50,30,.06);
}
*{box-sizing:border-box;margin:0;padding:0}
body{font-family:var(--sans);background:var(--paper);color:var(--txt);line-height:1.55;font-size:14px}
button{font-family:inherit;cursor:pointer}
input,select,textarea{font-family:inherit;font-size:13px;color:var(--txt)}
.num{font-variant-numeric:tabular-nums;font-feature-settings:"tnum";white-space:nowrap}
.hd{background:var(--card);border-bottom:1px solid var(--line);padding:0 22px;display:flex;align-items:center;gap:18px;height:58px;position:sticky;top:0;z-index:40;box-shadow:var(--sh1)}
.brand{font-weight:650;font-size:17px;letter-spacing:.02em;white-space:nowrap}
.hd-right{margin-left:auto;display:flex;align-items:center;gap:14px}
.stamps{text-align:right;font-size:11px;color:var(--txt-3);line-height:1.5}
.stamps b{color:var(--txt-2);font-weight:500}
.user-chip{display:flex;align-items:center;gap:7px;font-size:13px;border:1px solid var(--line);border-radius:999px;padding:4px 12px 4px 5px;background:var(--paper)}
.user-chip .avatar{width:24px;height:24px;border-radius:50%;background:var(--brass);color:#fff;font-size:11px;display:flex;align-items:center;justify-content:center;font-weight:600}
.btn{border:1px solid var(--brass);background:var(--brass);color:#fff;border-radius:9px;padding:6px 14px;font-size:13px}
.btn.ghost{background:var(--card);color:var(--brass)}
.btn.sm{padding:3px 10px;font-size:12px}
.btn.danger{border-color:var(--seal);background:var(--seal)}
.btn.ghost.on{background:#eef3ff;border-color:var(--brass);color:var(--brass);font-weight:600}
.btn:disabled{opacity:.45;cursor:not-allowed}
.shell{display:flex;min-height:calc(100vh - 58px)}
.side{width:216px;background:var(--card);border-right:1px solid var(--line);padding:14px 10px;flex-shrink:0}
.side .grp{display:flex;align-items:center;gap:8px;padding:9px 12px;margin-bottom:2px;border-radius:9px;font-size:13px;font-weight:600;color:var(--txt);cursor:pointer;user-select:none}
.side .grp:hover{background:var(--paper)}
.side .grp:focus-visible,.side a:focus-visible{outline:2px solid var(--brass);outline-offset:-2px}
.side .grp .caret{width:12px;flex-shrink:0;font-size:11px;color:var(--txt-2);transition:transform .15s ease}
.side .grp.open .caret{transform:rotate(90deg)}
.side .grp .tail{margin-left:auto;display:flex;align-items:center;font-size:11px;font-weight:400;color:var(--txt-3)}
.side .grp .tail i{width:6px;height:6px;border-radius:50%;background:var(--brass)}
.side .sub{display:none;margin-bottom:8px}
.side .grp.open+.sub{display:block}
.side a{display:block;padding:8px 12px 8px 30px;border-radius:9px;color:var(--txt-2);text-decoration:none;font-size:13px;cursor:pointer;margin-bottom:2px}
.side a:hover{background:var(--paper)}
.side a.on{background:#eef3ff;color:var(--brass);font-weight:600}
/* 侧栏角标（改动8·W4-S2）：待授权申请计数>0 时挂在「人员授权」链接文本之后。 */
.side .sub a .badge{display:inline-block;margin-left:6px;padding:0 6px;min-width:16px;border-radius:999px;background:var(--seal);color:#fff;font-size:11px;line-height:16px;text-align:center;font-weight:600}
@media (prefers-reduced-motion:reduce){.side .grp .caret{transition:none}}
.content{flex:1;padding:22px 26px;min-width:0}
.page h2{font-size:18px;margin-bottom:4px}
.page .sub{color:var(--txt-3);font-size:12px;margin-bottom:16px}
.card{background:var(--card);border:1px solid var(--line);border-radius:12px;box-shadow:var(--sh1);padding:16px 18px;margin-bottom:16px}
.card h3{font-size:14px;margin-bottom:10px}
.card h3 .cnt{color:var(--txt-3);font-weight:400;font-variant-numeric:tabular-nums;margin-left:6px}
.card h3 .sub{display:inline;margin:0 0 0 8px;font-size:12px;color:var(--txt-3);font-weight:400}
.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:12px;margin-bottom:16px}
.kpi{background:var(--card);border:1px solid var(--line);border-radius:12px;box-shadow:var(--sh1);padding:14px 16px}
.kpi .lab{font-size:12px;color:var(--txt-3)}
.kpi .val{font-size:22px;font-weight:650;margin-top:4px}
.kpi .val.up{color:var(--pine)}.kpi .val.down{color:var(--seal)}
.kpi .note{font-size:11px;color:var(--txt-3);margin-top:2px}
/* 表格骨架单源：经营总览的 table.tb 是基准；.tbl-wrap 内的表一律继承同一套
   （行密度 7px 8px、表头 12px 灰、行 hover、数字列 .r／.num 右对齐、单元格垂直居中）。
   ⛔ 各视图再给自己的表另写一套 th/td——那正是「一页一种密度、按钮跟文字不同轴」的来源。 */
.tbl-wrap{overflow-x:auto}
table.tb,.tbl-wrap>table{width:100%;border-collapse:collapse;font-size:13px}
table.tb th,.tbl-wrap>table th{text-align:left;font-weight:500;color:var(--txt-3);font-size:12px;padding:7px 8px;border-bottom:1px solid var(--line);white-space:nowrap}
table.tb td,.tbl-wrap>table td{padding:7px 8px;border-bottom:1px solid #f0eee9;vertical-align:middle}
table.tb tbody tr:hover td,.tbl-wrap>table tbody tr:hover td{background:#faf9f5}
table.tb th.r,table.tb td.r,.tbl-wrap>table th.r,.tbl-wrap>table td.r,table th.num,table td.num,table.tb th.num,table.tb td.num,.tbl-wrap>table th.num,.tbl-wrap>table td.num{text-align:right}
table.tb td.rk,.tbl-wrap>table td.rk{color:var(--txt-3);font-size:12px;text-align:right;width:1%;white-space:nowrap}
/* 行内动作：按钮与同行文字同轴、多个按钮等距，⛔ 把 td 改成 flex 容器 */
table.tb td .btn,.tbl-wrap>table td .btn{vertical-align:middle}
table.tb td .btn+.btn,.tbl-wrap>table td .btn+.btn{margin-left:6px}
/* 表内空态（列数由调用方 colspan 撑满）与块级空态：同一副面孔，只差密度 */
.empty-tip,table.tb td>.empty,.tbl-wrap>table td>.empty{color:var(--txt-3);font-size:12.5px;padding:14px 8px;text-align:center}
.empty-state{color:var(--txt-3);font-size:13px;padding:18px 12px;text-align:center}
.dim{color:var(--txt-3)}
.flat-tag{display:inline-block;margin-left:6px;font-size:10px;color:var(--brass)}
/* 日维工作区明细表（日期为列，指标×商品类型为行） */
.dzp{overflow-x:auto;margin-top:4px}
.dzp table{border-collapse:collapse;font-size:13px;white-space:nowrap;min-width:100%}
.dzp th{font-weight:500;color:var(--txt-3);font-size:11.5px;padding:4px 6px;border-bottom:1px solid var(--line);text-align:right}
.dzp td{padding:3px 7px;border-bottom:1px solid #f0eee9;text-align:right;font-variant-numeric:tabular-nums}
.dzp th.met,.dzp td.met,.dzp th.cat,.dzp td.cat{text-align:left}
/* 左侧维度列定宽＋横滚吸附：日列再多，指标／客户与行标签始终在场 */
.dzp th.met,.dzp td.met{position:sticky;left:0;z-index:2;background:var(--card);width:86px;min-width:86px;max-width:86px}
.dzp td.met{vertical-align:top;font-weight:600;background:#faf9f5}
.dzp th.cat,.dzp td.cat{position:sticky;left:86px;z-index:2;background:var(--card);width:118px;min-width:118px;box-shadow:inset -1px 0 0 var(--line)}
.dzp table.dz2 th.met,.dzp table.dz2 td.met{width:216px;min-width:216px;max-width:216px;background:var(--card);vertical-align:middle;overflow:hidden}
.dzp table.dz2 td.met a{display:inline-block;max-width:118px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:bottom}
.dzp table.dz2 th.cat,.dzp table.dz2 td.cat{left:216px;width:128px;min-width:128px}
.dzp td.met .unit{font-weight:400;font-size:11px;color:var(--txt-3)}
.dzp .rk2{display:inline-block;min-width:18px;color:var(--txt-3);font-weight:400;font-size:11.5px}
.dzp th.we{color:#b3a98f}
.dzp td.we{background:#faf8f2}
.dzp th.lastd,.dzp td.lastd{background:#f6efdd}
.dzp th.bmk,.dzp td.bmk{border-left:1px solid var(--line)}
.dzp tr.sumrow td{font-weight:600;border-top:1px solid var(--line)}
.dzp td.dimc{color:var(--txt-3)}
.dzp table.dz2 tr.dz2s td{background:#fbfaf5}
.dzp table.dz2 tr.dz2s td.lastd{background:#f6efdd}
.dzp table.dz2 tr.dz2g td{background:#eae6da;color:#5d5745;font-weight:600;font-size:12px;padding:4px 8px}
.dzp tbody tr:hover td,.dzp tbody tr:hover td.met,.dzp tbody tr:hover td.cat{background:#f2f0e9}
/* 经营总览日维表 · 方案一：完整细网格、统一数字轴、独立滚动区 */
#view-mgmt-cockpit .daily-zone-card{padding:0 0 18px;overflow:hidden}
#view-mgmt-cockpit .daily-zone-title,
#view-mgmt-cockpit .daily-rank-title{display:flex;align-items:center;gap:9px;margin:0;padding:16px 18px 10px}
#view-mgmt-cockpit .daily-zone-title::before,
#view-mgmt-cockpit .daily-rank-title::before{content:'';width:3px;height:14px;border-radius:999px;background:var(--brass);flex:0 0 auto}
#view-mgmt-cockpit .daily-rank-title{margin-top:16px;padding-top:16px;border-top:1px solid var(--line)}
#view-mgmt-cockpit .daily-zone-card>.note-disc:not(.daily-zone-foot){margin:0 18px 10px}
#view-mgmt-cockpit .daily-zone-foot{margin:8px 18px 0;line-height:1.55}
#view-mgmt-cockpit .dzp-grid{width:calc(100% - 36px);margin:0 18px;border:1px solid #d9dee5;border-radius:9px;overflow:auto;overscroll-behavior:contain;background:var(--card);scrollbar-color:#c9ced6 transparent;scrollbar-width:thin}
#view-mgmt-cockpit .dzp-grid:focus-visible{outline:2px solid var(--brass);outline-offset:2px}
#view-mgmt-cockpit .dzp-detail{max-height:590px}
#view-mgmt-cockpit .dzp-rank{max-height:480px}
#view-mgmt-cockpit .dzp-grid table.tb{border-collapse:separate;border-spacing:0;min-width:100%;font-size:12.5px;table-layout:fixed}
#view-mgmt-cockpit .dzp-grid table.dz1{min-width:1610px}
#view-mgmt-cockpit .dzp-grid table.dz2{min-width:1720px}
#view-mgmt-cockpit .dzp-grid table.tb th,
#view-mgmt-cockpit .dzp-grid table.tb td{height:32px;padding:5px 9px;overflow:hidden;border-right:1px solid #e8ebef;border-bottom:1px solid #e8ebef;text-align:right;text-overflow:ellipsis;white-space:nowrap;font-variant-numeric:tabular-nums;font-feature-settings:'tnum'}
#view-mgmt-cockpit .dzp-grid table.tb th{position:sticky;top:0;z-index:4;height:38px;background:#f1f3f5;color:var(--txt-2);font-size:11.5px;font-weight:650;box-shadow:inset 0 -1px #d8dde4}
/* 名册外客户行（止血限流·台账 L-97）：日粒度格全「—」，整行降灰提示「不是零，是不在名册」 */
#view-mgmt-cockpit .dzp-grid table.dz2 tr.dz2-uncovered td{color:var(--txt-3)}
#view-mgmt-cockpit .dzp-grid table.tb th:last-child,
#view-mgmt-cockpit .dzp-grid table.tb td:last-child{border-right:0}
#view-mgmt-cockpit .dzp-grid table.tb tbody tr:last-child td{border-bottom:0}
#view-mgmt-cockpit .dzp-grid table.tb th.met,
#view-mgmt-cockpit .dzp-grid table.tb td.met,
#view-mgmt-cockpit .dzp-grid table.tb th.cat,
#view-mgmt-cockpit .dzp-grid table.tb td.cat{text-align:left}
#view-mgmt-cockpit .dzp-grid table.tb th.bmk,
#view-mgmt-cockpit .dzp-grid table.tb td.bmk{width:112px;min-width:112px;background:#f8f9fb}
#view-mgmt-cockpit .dzp-grid table.dz2 th.bmk,
#view-mgmt-cockpit .dzp-grid table.dz2 td.bmk{width:108px;min-width:108px}
#view-mgmt-cockpit .dzp-grid table.tb th.we{color:#5d5745}
#view-mgmt-cockpit .dzp-grid table.tb td.we{background:#faf8f2}
#view-mgmt-cockpit .dzp-grid table.tb th.lastd,
#view-mgmt-cockpit .dzp-grid table.tb td.lastd{background:#fff7e8}
#view-mgmt-cockpit .dzp-grid table.tb th.day,
#view-mgmt-cockpit .dzp-grid table.tb td.day{width:79px;min-width:79px}
/* 基准区与逐日区用较强竖线分开，读者横向扫数时不容易串列。 */
#view-mgmt-cockpit .dzp-grid table.dz1 :is(th,td):nth-child(7),
#view-mgmt-cockpit .dzp-grid table.dz2 :is(th,td):nth-child(6){border-left:2px solid #b9c1cc}
/* 左侧维度列同时吸附表头与正文；第二列右缘作为全表阅读锚点。 */
#view-mgmt-cockpit .dzp-grid table.tb th.met,
#view-mgmt-cockpit .dzp-grid table.tb th.cat{z-index:7;background:#f1f3f5}
#view-mgmt-cockpit .dzp-grid table.dz1 th.met,
#view-mgmt-cockpit .dzp-grid table.dz1 td.met{left:0;width:96px;min-width:96px;max-width:96px}
#view-mgmt-cockpit .dzp-grid table.dz1 th.cat,
#view-mgmt-cockpit .dzp-grid table.dz1 td.cat{left:96px;width:132px;min-width:132px}
#view-mgmt-cockpit .dzp-grid table.dz2 th.met,
#view-mgmt-cockpit .dzp-grid table.dz2 td.met{left:0;width:232px;min-width:232px;max-width:232px}
#view-mgmt-cockpit .dzp-grid table.dz2 th.cat,
#view-mgmt-cockpit .dzp-grid table.dz2 td.cat{left:232px;width:150px;min-width:150px}
#view-mgmt-cockpit .dzp-grid table.tb td.met{background:#fcfcfd}
#view-mgmt-cockpit .dzp-grid table.tb td.cat{background:#fcfcfd;box-shadow:inset -1px 0 #d3d8df,3px 0 0 rgba(31,35,41,.035)}
#view-mgmt-cockpit .dzp-grid table.dz2 td.met a{max-width:174px}
/* 每个指标的合计行形成浅蓝分组带，内容与顺序保持不变。 */
#view-mgmt-cockpit .dzp-grid table.dz1 tr.sumrow td{background:#eef3ff;color:#182033;font-weight:650;border-top:2px solid #aeb8c5}
#view-mgmt-cockpit .dzp-grid table.dz1 tr.sumrow td.met,
#view-mgmt-cockpit .dzp-grid table.dz1 tr.sumrow td.cat{background:#e7efff}
#view-mgmt-cockpit .dzp-grid table.dz2 tr.dz2s td{background:#fff;font-weight:500}
#view-mgmt-cockpit .dzp-grid table.dz2 tr.dz2s td.met,
#view-mgmt-cockpit .dzp-grid table.dz2 tr.dz2s td.cat{background:#fcfcfd}
#view-mgmt-cockpit .dzp-grid table.dz2 tr.dz2s td.bmk{background:#f8f9fb}
#view-mgmt-cockpit .dzp-grid table.dz2 tr.dz2s td.lastd{background:#fff7e8}
#view-mgmt-cockpit .dzp-grid table.dz2 tr.dz2g td{height:31px;padding:4px 8px;background:#e8ecf2;color:#38445a;font-weight:650}
#view-mgmt-cockpit .dzp-grid table.dz2 tr.dz2d td.cat{padding-left:28px;color:var(--txt-2)}
#view-mgmt-cockpit .dzp-grid table.tb tbody tr:hover td,
#view-mgmt-cockpit .dzp-grid table.tb tbody tr:hover td{background:#edf4ff}
#view-mgmt-cockpit .dzp-grid table.tb tbody tr:hover td.met,
#view-mgmt-cockpit .dzp-grid table.tb tbody tr:hover td.cat{background:#e6f0ff}
/* 指标填报（单客户·方案一定稿）：左侧阶段轨引导一条流；蓝底行=可填、ƒ灰行=派生、素行=参考 */
.tgp{padding:0;overflow:hidden}
.tgstage{position:relative;padding:16px 20px 18px 58px}
.tgstage+.tgstage{border-top:1px solid var(--line)}
.tgstage::before{content:'';position:absolute;left:32px;top:0;bottom:0;width:2px;background:var(--line)}
.tgstage:first-child::before{top:16px}
.tgstage:last-child::before{height:16px;bottom:auto}
.tgbadge{position:absolute;left:21px;top:13px;width:24px;height:24px;border-radius:50%;background:var(--card);border:2px solid #d8d4ca;color:var(--txt-3);display:flex;align-items:center;justify-content:center;font-size:12.5px;font-weight:600;z-index:1;transition:background .25s,border-color .25s,color .25s}
.tgstage.now .tgbadge{background:var(--brass);border-color:var(--brass);color:#fff}
.tgstage.done .tgbadge{background:var(--pine);border-color:var(--pine);color:#fff}
.tghead{display:flex;align-items:baseline;gap:10px;margin-bottom:12px;flex-wrap:wrap}
.tghead .t{font-size:15px;font-weight:600}
.tghead .d{font-size:12px;color:var(--txt-3)}
/* 年度指标卡 */
.tgmc-row{display:flex;gap:14px;flex-wrap:wrap}
.tgmc{flex:1;min-width:330px;border:1px solid var(--line);border-radius:12px;background:#fff;overflow:hidden}
.tgmc .mh{display:flex;align-items:center;gap:8px;padding:9px 14px;background:#f7f4ed;border-bottom:1px solid var(--line)}
.tgmc .mh .nm{font-size:13.5px;font-weight:600}
.tgmc .mh .drvtx{margin-left:auto}
.tgmc .mb{padding:10px 14px 12px}
.tgprev{font-size:12px;color:var(--txt-3)}
.tgprev b{font-size:14px;color:var(--txt);font-weight:600;font-variant-numeric:tabular-nums}
.tgmain{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;margin:8px 0 12px}
.tgmain label{font-size:12px;color:var(--txt-2)}
.tgin{border:0;border-bottom:2px solid #d8d4ca;border-radius:0;background:transparent;font:inherit;font-variant-numeric:tabular-nums;text-align:right;padding:1px 4px;transition:border-color .15s}
.tgin:focus-visible{outline:none;border-bottom-color:var(--brass)}
.tgin.big{font-size:20px;font-weight:600;width:132px}
.tgin.sm{font-size:13.5px;width:64px}
.tgmain .u{font-size:12px;color:var(--txt-3)}
.tgmain .lk2{color:#b8b2a6;font-size:13px}
.tgsug{display:flex;align-items:center;gap:6px;flex-wrap:wrap;font-size:12px;color:var(--txt-3)}
.chip{border:1px solid var(--line);border-radius:999px;padding:2px 10px;font-size:12px;cursor:pointer;background:var(--card);color:var(--txt-2);transition:border-color .15s,color .15s}
.chip:hover{border-color:var(--brass);color:var(--brass)}
.chip.off{opacity:.4;cursor:not-allowed}
.chip.on{border-color:var(--brass);background:#eef3ff;color:var(--brass);font-weight:600}
.drvtx{color:var(--txt-2);background:#f0ede5;border-radius:999px;padding:2px 9px;font-size:12px}
/* 阶段二工具行 / 图例 / 一致性 */
.tgbar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:10px;font-size:12.5px}
.tgbar .sep{flex:1}
.tglegend{display:flex;gap:12px;font-size:11.5px;color:var(--txt-3);align-items:center}
.tglegend i{display:inline-block;width:10px;height:10px;border-radius:3px;margin-right:4px;vertical-align:-1px;border:1px solid var(--line)}
.tglegend .le{background:#d8e5fa;border-color:#b9cff2}
.tglegend .ld{background:#eae6da;border-color:#d5cfbd}
.tglegend .lr{background:#fff;border-color:#d8d4ca}
.tgcons{display:inline-flex;align-items:center;gap:6px;font-size:12px;border-radius:999px;padding:3px 10px}
.tgcons.ok{color:var(--pine);background:#eef7ee}
.tgcons.warn{color:#8a5a00;background:#fdf3e5}
.tghint{font-size:12px;color:#8a5a00;background:#fdf3e5;border-radius:6px;padding:3px 10px}
/* 月度分解表 */
.tgp .dzp th.cat,.tgp .dzp td.cat{left:0;width:150px;min-width:150px}
.tgp .dzp th.bmk,.tgp .dzp td.bmk{position:sticky;left:150px;z-index:2;background:var(--card);border-left:none;border-right:1px solid #d8d4ca;font-weight:600}
.tgp .dzp thead th.bmk{z-index:4}
.tgp .dzp tr.tgg td{background:#eae6da;color:#5d5745;font-weight:600;font-size:12px;padding:4px 8px}
.tgp .dzp tr.edit td{background:#eef4ff}
.tgp .dzp tr.edit td.cat,.tgp .dzp tr.edit td.bmk{background:#e6eefc;font-weight:600}
.tgp .dzp tr.edit:hover td{background:#e6eefc}
.tgp .dzp tr.edit td.lk{background:#efece3}
.tgp .dzp td.bmk.bad{background:#fdf3e5}
.tgp .dzp tr.edit td .dot{display:inline-block;width:7px;height:7px;border-radius:50%;background:var(--brass);margin-right:6px;vertical-align:1px}
.tgp .dzp input[data-mg],.tgp .dzp input[data-mn]{width:100%;min-width:56px;font:inherit;font-size:12.5px;font-variant-numeric:tabular-nums;text-align:right;padding:2px 4px;border:0;border-radius:4px;background:transparent}
.tgp .dzp input[data-mg]:hover,.tgp .dzp input[data-mn]:hover{background:#fff}
.tgp .dzp input[data-mg]:focus-visible,.tgp .dzp input[data-mn]:focus-visible{outline:2px solid var(--brass);background:#fff}
.tgp .dzp input:disabled{background:transparent;color:var(--txt-3)}
.tgp .dzp td.drv{background:#f4f2ec;color:var(--txt-2)}
.tgp .dzp td.bmk.drv{background:#f4f2ec}
.tgp .dzp tr.ref td{color:var(--txt-2);font-size:12.5px}
.tgp .dzp th.mlk{font-weight:400;font-size:10.5px;color:var(--txt-3);padding-top:0}
/* 阶段三清单与提交 */
.tgchk{display:flex;flex-direction:column;gap:5px;font-size:12.5px;margin-bottom:10px}
.tgsubmit{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.tgsubmit input{flex:1;min-width:220px;max-width:460px;border:0;border-bottom:2px solid #d8d4ca;background:transparent;font:inherit;font-size:13px;padding:3px 4px}
.tgsubmit input:focus-visible{outline:none;border-bottom-color:var(--brass)}
@media (prefers-reduced-motion:reduce){.tgbadge,.tgin,.chip{transition:none}}
.dz2x{font:inherit;font-size:12px;line-height:1;padding:2px 7px;border:1px solid var(--line);border-radius:5px;background:var(--card);cursor:pointer;color:var(--txt-2)}
.dz2x:hover{border-color:var(--brass);color:var(--brass)}
.dz2x:focus-visible{outline:2px solid var(--brass);outline-offset:1px}
.dz2x:disabled{opacity:.35;cursor:not-allowed}
/* 日维度看板 */
.db-filters{display:flex;align-items:center;gap:8px;margin:8px 0 12px;font-size:12px;color:var(--txt-3);flex-wrap:wrap}
.db-filters select{font:inherit;font-size:12px;padding:4px 8px;border:1px solid var(--line);border-radius:4px;background:#f4f2ed;color:#a8a296;cursor:not-allowed}
svg.spark{width:140px;height:26px;display:block}
/* 横轴刻度左右内缩对齐 ckLineSvg 的绘图区（viewBox 720 宽，左留白 52、右留白 12） */
.db-x{display:flex;padding:2px 1.67% 0 7.22%;font-size:10px;color:var(--txt-3);line-height:1.4}
.db-x span{flex:1 1 0;text-align:center;white-space:nowrap;overflow:hidden}
.pareto{font-size:12px;color:var(--txt-2);margin:-2px 0 12px}
.pareto b{color:var(--txt);font-variant-numeric:tabular-nums}
.pareto .note{color:var(--txt-3)}
/* 已纳管却没指负责人＝漏管，行内下拉持续高亮，不靠人自己发现 */
select.need-owner{border-color:var(--amber);background:#fff4e5}
.gapbar{display:flex;align-items:center;gap:10px;font-size:12px;margin-bottom:10px}
.gapbar .n{font-weight:600;color:var(--amber);font-variant-numeric:tabular-nums}
.gapbar button{border:1px solid var(--line);background:var(--card);border-radius:7px;padding:3px 10px;font-size:12px;color:var(--txt-2)}
.gapbar button.on{border-color:var(--amber);background:#fff4e5;color:var(--amber)}
/* ---- 我的客户工作台 ---- */
/* bullet 条（Few 规范·带预测段）：深色＝已实际，浅色＝按当前速度的期末预测，黑标＝今日进度目标，灰标＝期末目标 */
.blt{position:relative;height:20px;background:#f0eee9;border-radius:4px;min-width:120px}
.blt .act{position:absolute;top:5px;bottom:5px;left:0;background:var(--brass);border-radius:3px 0 0 3px}
.blt .proj{position:absolute;top:5px;bottom:5px;background:#b9cdfb;border-radius:0 3px 3px 0}
.blt .mk{position:absolute;top:0;bottom:0;width:2px;background:#1d1f23}
.blt .mk2{position:absolute;top:4px;bottom:4px;width:2px;background:rgba(29,31,35,.4)}
.blt.behind .act{background:var(--seal)}
.blt.ahead .act{background:var(--pine)}
.blt.notgt{display:flex;align-items:center;justify-content:center;background:repeating-linear-gradient(45deg,#f6f4ef,#f6f4ef 5px,#efece5 5px,#efece5 10px)}
.blt .na{font-size:11px;color:var(--txt-3)}
.blt .over{position:absolute;right:3px;top:50%;transform:translateY(-50%);font-size:10px;color:var(--brass)}
.sdot.x{background:transparent;border:1.5px dashed #c3bfb6}
.mcsum{background:var(--card);border:1px solid var(--line);border-radius:12px;box-shadow:var(--sh1);padding:16px 18px;margin-bottom:16px}
.mcsum .lead{font-size:17px;font-weight:650;line-height:1.5}
.mcsum .lead b{font-variant-numeric:tabular-nums}
.mcsum .lead .down{color:var(--seal)}.mcsum .lead .up{color:var(--pine)}
.mcsum .pace{margin-top:6px;font-size:13px;color:var(--txt-2)}
.mcsum .pace b{color:var(--txt);font-variant-numeric:tabular-nums}
.mcsum .note2{color:var(--txt-3);font-size:11px}
/* 我的客户 · 达成工作台：范围选择、执行判定药丸、列组表头、行内展开区 */
.mcsel{font:inherit;font-size:12.5px;padding:4px 10px;border:1px solid var(--line);border-radius:6px;background:#fff;color:var(--txt)}
.vdp{display:inline-flex;align-items:center;border-radius:999px;padding:2px 9px;font-size:12px;white-space:nowrap}
.vdp.keep{color:var(--pine);background:#eef7ee}
.vdp.push{color:#8a5a00;background:#fdf3e5}
.vdp.hit{color:var(--brass);background:#eef4ff}
.vdp.na{color:var(--txt-3);background:#f2f0eb}
table.tb tr.gh th{font-size:11px;color:var(--txt-3);padding-bottom:2px;letter-spacing:.04em}
tr.mcx>td{background:#fbfaf5;padding:10px 14px}
.mcx .mini{display:flex;gap:18px;flex-wrap:wrap;align-items:flex-start}
.mcx .mini>div{flex:1;min-width:360px}
.mcx h5{font-size:12px;color:var(--txt-2);margin:0 0 6px;font-weight:600}
.bltrow{display:grid;grid-template-columns:74px 1fr 210px;gap:12px;align-items:center;margin-top:10px;font-size:12px}
.bltrow .nm{color:var(--txt-2)}
.bltrow .fig{color:var(--txt-3);text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}
.bltrow .fig b{color:var(--txt)}
.triage{display:flex;gap:8px;align-items:center;font-size:12px;margin-bottom:10px;flex-wrap:wrap}
.triage button{border:1px solid var(--line);background:var(--card);border-radius:999px;padding:3px 12px;font-size:12px;color:var(--txt-2)}
.triage button.on{border-color:var(--brass);background:#eef3ff;color:var(--brass)}
.sdot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:7px;vertical-align:1px}
.sdot.b{background:var(--seal)}
.sdot.n{background:transparent;border:1.5px solid #c3bfb6}
.sdot.o{background:var(--pine)}
.spark{display:block}
.chartwrap{position:relative}
.chartwrap svg{display:block;width:100%;height:auto}
.lgd{display:flex;gap:16px;flex-wrap:wrap;font-size:11px;color:var(--txt-3);margin-top:8px}
.lgd i{display:inline-block;width:14px;height:3px;border-radius:2px;margin-right:5px;vertical-align:3px}
.lgd .sq{width:8px;height:10px;border-radius:1px;vertical-align:0}
.tag{display:inline-block;font-size:11px;border-radius:6px;padding:1px 7px;background:#eef3ff;color:var(--brass)}
.tag.g{background:#e8f7ee;color:var(--pine)}
.tag.r{background:#fdeaea;color:var(--seal)}
.tag.y{background:#fff4e5;color:var(--amber)}
.tag.x{background:#f0eee9;color:var(--txt-3)}
.banner{border-radius:10px;padding:10px 14px;font-size:13px;margin-bottom:14px}
.banner.y{background:#fff4e5;color:#7a4a00;border:1px solid #ffd9a8}
.banner.b{background:#eef3ff;color:#1d4ecf;border:1px solid #c2d4ff}
.banner.r{background:#fdeaea;color:#a11515;border:1px solid #f3b9b9}
.form-row{display:flex;gap:12px;flex-wrap:wrap;align-items:flex-end;margin-bottom:12px}
.fld{display:flex;flex-direction:column;gap:4px}
.fld label{font-size:12px;color:var(--txt-2)}
.fld label .req{color:var(--seal);margin-left:2px}
.fld input,.fld select,.fld textarea{border:1px solid var(--line);border-radius:8px;padding:6px 10px;background:#fff}
.fld .err{color:var(--seal);font-size:11px;min-height:14px}
.fld input.bad,.fld select.bad{border-color:var(--seal)}
.tabs{display:flex;gap:6px;margin-bottom:14px;flex-wrap:wrap}
.tabs button{border:1px solid var(--line);background:var(--card);border-radius:8px;padding:5px 12px;font-size:12px;color:var(--txt-2)}
.tabs button.on{background:var(--brass);border-color:var(--brass);color:#fff}
#toast{position:fixed;top:70px;left:50%;transform:translateX(-50%);z-index:99;display:flex;flex-direction:column;gap:8px;align-items:center}
.toast-item{background:#23262b;color:#fff;border-radius:9px;padding:9px 18px;font-size:13px;box-shadow:var(--sh3);animation:tin .18s ease-out}
.toast-item.ok{background:#0d7a3f}.toast-item.err{background:#b3271e}
@keyframes tin{from{opacity:0;transform:translateY(-6px)}to{opacity:1}}
.skel{border-radius:8px;background:linear-gradient(90deg,#efede8 25%,#f7f5f0 50%,#efede8 75%);background-size:200% 100%;animation:sk 1.1s infinite}
@keyframes sk{from{background-position:200% 0}to{background-position:-200% 0}}
.empty{padding:38px 16px;text-align:center;color:var(--txt-3);font-size:13px}
.empty .act{margin-top:10px}
.bars{display:flex;align-items:flex-end;gap:3px;height:120px;padding-top:6px}
.bars .b{flex:1;background:var(--brass);border-radius:3px 3px 0 0;min-height:2px;position:relative;opacity:.85}
.bars .b.dim{opacity:.35}
.bars .b:hover{opacity:1}
.bars-x{display:flex;gap:3px;font-size:10px;color:var(--txt-3);margin-top:4px}
.bars-x span{flex:1;text-align:center;overflow:hidden;white-space:nowrap}
.legend{display:flex;gap:14px;font-size:11px;color:var(--txt-3);margin-top:8px}
.legend i{display:inline-block;width:10px;height:10px;border-radius:2px;margin-right:4px;vertical-align:-1px}
.hbar{display:flex;align-items:center;gap:8px;margin-bottom:8px;font-size:12px}
.hbar .nm{width:120px;text-align:right;color:var(--txt-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.hbar .track{flex:1;background:#f0eee9;border-radius:5px;height:14px;position:relative}
.hbar .fill{position:absolute;left:0;top:0;bottom:0;background:var(--brass);border-radius:5px}
.hbar .marker{position:absolute;top:-3px;bottom:-3px;width:2px;background:var(--seal)}
.hbar .vv{width:150px;font-size:12px;color:var(--txt-2)}
.modal-mask{position:fixed;inset:0;background:rgba(30,28,25,.45);z-index:80;display:flex;align-items:center;justify-content:center}
.modal{background:var(--card);border-radius:14px;box-shadow:var(--sh3);padding:26px 30px;max-width:420px;text-align:center}
.modal h3{font-size:17px;margin-bottom:10px}
.modal p{font-size:13px;color:var(--txt-2);margin-bottom:18px}
.login-wrap{min-height:100vh;display:flex;flex-direction:column;align-items:center;justify-content:center;background:linear-gradient(160deg,#eef3ff 0%,#f6f4ef 55%)}
.login-card{background:var(--card);border:1px solid var(--line);border-radius:16px;box-shadow:var(--sh3);padding:34px 38px;width:400px}
.login-card .lg-brand{text-align:center;margin-bottom:6px}
.login-card .lg-brand .logo{width:46px;height:46px;border-radius:12px;background:var(--brass);color:#fff;font-size:20px;font-weight:700;display:inline-flex;align-items:center;justify-content:center}
.login-card .lg-brand h1{font-size:19px;margin-top:10px}
.login-card .lg-sub{text-align:center;font-size:12px;color:var(--txt-3);margin-bottom:20px}
.acct{display:flex;align-items:center;gap:12px;border:1px solid var(--line);border-radius:11px;padding:11px 14px;margin-bottom:10px;cursor:pointer;background:#fff;transition:border-color .12s}
.acct:hover{border-color:var(--brass)}
.acct .avatar{width:34px;height:34px;border-radius:50%;background:var(--brass);color:#fff;display:flex;align-items:center;justify-content:center;font-weight:600;font-size:13px}
.acct.guest .avatar{background:#9aa0a8}
.acct .who b{font-size:14px}
.acct .who .ro{font-size:11px;color:var(--txt-3)}
.acct .go{margin-left:auto;color:var(--brass);font-size:12px}
.login-foot{margin-top:22px;text-align:center;font-size:11px;color:var(--txt-3);line-height:1.8}
.gsearch{position:relative}
.gsearch input{border:1px solid var(--line);border-radius:9px;padding:6px 12px;width:240px;background:#fff}
.gs-drop{position:absolute;top:38px;left:0;width:340px;background:var(--card);border:1px solid var(--line);border-radius:10px;box-shadow:var(--sh3);z-index:60;max-height:320px;overflow:auto}
.gs-drop .it{padding:8px 12px;cursor:pointer;font-size:13px;display:flex;gap:8px;align-items:center}
.gs-drop .it:hover{background:#eef3ff}
.gs-drop .none{padding:12px;font-size:12px;color:var(--txt-3)}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:16px}
@media(max-width:1100px){.grid2{grid-template-columns:1fr}}
.crumb{font-size:12px;color:var(--txt-3);margin-bottom:10px}
.crumb b{color:var(--txt-2)}
.note-disc{font-size:11px;color:var(--txt-3);margin-top:8px;line-height:1.6}
.pager{display:flex;gap:8px;align-items:center;justify-content:flex-end;font-size:12px;color:var(--txt-3);margin-top:10px}
.pager button{border:1px solid var(--line);background:var(--card);border-radius:7px;padding:3px 10px;font-size:12px}
.split{display:flex;gap:16px}
.split .left{width:300px;flex-shrink:0}
.split .right{flex:1;min-width:0}
.pick-item{padding:8px 12px;border-radius:8px;cursor:pointer;font-size:13px;display:flex;justify-content:space-between;gap:8px}
.pick-item:hover{background:#f3f1ea}
.pick-item.on{background:#eef3ff;color:var(--brass);font-weight:600}
textarea.csv{width:100%;min-height:90px;border:1px solid var(--line);border-radius:8px;padding:8px 10px;font-family:ui-monospace,Menlo,monospace;font-size:12px}
.ro-banner{position:sticky;top:58px;z-index:30}

/* ════════════════ 二期壳追加（demo 无对应物）════════════════
   只放「应用壳」这一层真正缺的几件；视图内组件一律归各视图 Story 追加。 */

/* 隐藏态统一由 [hidden] 兜底：本文件多处用 display:flex／grid，
   而 [hidden] 的浏览器默认样式是 display:none，特异性输给类选择器，
   于是「明明 hidden=true 却还显示着」。⛔ 靠各处自己再写一遍 display:none。 */
[hidden]{display:none !important}

/* 登录屏（form-anchors L-01 至 L-05）：demo 的登录卡是账号选择替身，
   生产站只留「品牌块＋副标题＋单一登录动作区」，故卡内布局在此重定义。 */
.login-screen{min-height:100vh;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:18px;padding:24px}
.login-card{background:var(--card);border:1px solid var(--line);border-radius:16px;box-shadow:var(--sh3);padding:34px 40px;width:min(420px,100%);display:flex;flex-direction:column;align-items:center;gap:14px}
.login-actions{width:100%;display:flex;flex-direction:column;gap:10px;margin-top:6px}
.login-actions .btn{width:100%;padding:10px 14px;font-size:14px}
.login-error{font-size:12px;color:var(--seal);text-align:center;min-height:16px}
.login-foot{font-size:11px;color:var(--txt-3);text-align:center;line-height:1.7}

/* 批次能力提示条：与只读横幅同族的通栏位（页头之下、侧栏之上），
   中性信息色，⛔ 用告警色——「这个批次没有日粒度」是事实声明不是故障。 */
.info-banner{background:#eef3ff;color:var(--txt-2);border-bottom:1px solid var(--line);padding:8px 22px;font-size:12px;line-height:1.6}

/* 页头搜索下拉（G-13）：本体样式已在上方提取段（.gs-drop 一族），
   这里只补 demo 没有的类型标签间距，⛔ 重写一遍 .gs-drop 本体（那就是第二处定义）。 */
.gs-drop .it .tag{margin-right:6px}

/* 视图容器：一视图一层 data-view，未选中的整棵子树 hidden。 */
.view{display:block}
.view-error{padding:14px 16px;color:var(--seal);font-size:13px}

/* 取数失败提示条（一期件，自 main.css 迁入 —— index.html 只链一张表，
   留在 main.css 里它就会掉样式）。它的写入口还有一期视图在用，⛔ 删。
   显隐由 .show 类控制（一期约定），⛔ 改成 hidden 属性——
   改了之后一期的 banner.classList.add('show') 就不再让它出现。 */
.fail-banner{display:none;border:1px solid #ffd7ad;border-radius:9px;padding:8px 14px;
             font-size:12px;line-height:1.6;background:#fff3e8;color:#c75a00;margin-bottom:14px}
.fail-banner.show{display:block}

/* 图表悬浮提示浮层（W2-S2 交付的壳级元素，自 main.css 迁入 —— index.html 只链一张表，
   留在 main.css 里就会在壳重建后掉样式）。
   ⚠️ 外层 #dtip-layer 是【定位上下文】：#dtip 是 position:absolute，
   而全仓没有别的 position:relative 祖先，absolute 会解析到页面原点，
   浮层落点偏掉约「一个侧栏宽 + 一个页头高」。本层 position:fixed 铺满视口，
   故 clientX / clientY 可直接当坐标用。 */
#dtip-layer{position:fixed;inset:0;pointer-events:none;z-index:50}
#dtip{position:absolute;pointer-events:none;background:var(--card);color:var(--txt);
      border:1px solid var(--line);border-radius:12px;box-shadow:var(--sh3);
      padding:8px 12px;font-size:12px;line-height:1.6;display:none;z-index:50;min-width:190px}
#dtip .tt-h{color:var(--txt);font-weight:600;margin-bottom:3px;font-variant-numeric:tabular-nums}
#dtip .tt-r{display:flex;justify-content:space-between;gap:14px;color:var(--txt-2);font-variant-numeric:tabular-nums}
#dtip .tt-r span:last-child{color:var(--txt)}
#dtip .tt-neg{color:var(--seal)}

/* ══════════════ 一期件迁入段（编排位收口·台账 L-88）══════════════════════
 * index.html 只链 app.css 一张表（AC66「样式单源」＋ 本文件头注释第三条），
 * 而下列 class 的规则此前只在 assets/css/main.css 里——那张表**没有被链上**，
 * 于是十视图里凡用到它们的地方一律掉样式（浏览器实跑截图可见）。
 * 处置沿本文件既有先例：把仍在被消费的一期规则**逐字迁入**，⛔ 改写、⛔ 重画。
 * （文件内此前已迁过两件：取数失败提示条、图表悬浮提示浮层，理由同此。）
 * ⛔ 把 main.css 链回 index.html —— 那就是「第二张表」，破 AC66。
 * ⚠️ 本段此前留有三个孤立「}」（合并残迹）：CSS 语法上一个顶层「}」会把**紧随其后
 * 的整条规则**当成无效前奏吞掉——.toolbar 的 flex 布局与 .ckcard .big 就是这样丢的。
 * ══════════════════════════════════════════════════════════════════════ */

/* 数字等宽走 tnum（B 版三个字体栈统一为 PingFang 系统栈，⛔ 用等宽栈）—— demo:232 */
.stamps,.corp-no,.pf-kpi .val,.kpi .val{font-variant-numeric:tabular-nums;font-feature-settings:"tnum";white-space:nowrap}

/* 工具行三件套统一：.toolbar（筛选行）／.frow（表单行）／.fld（带标签字段）同一密度 */
.toolbar{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin-bottom:14px}
.toolbar input[type=text],.toolbar select,.frow input,.frow select,.frow textarea{border:1px solid #dcdad4;border-radius:9px;padding:6px 10px;background:var(--card);font-size:13px}
.toolbar input[type=text]:focus,.frow input:focus{border-color:#3370ff;box-shadow:0 0 0 3px #eef3ff;background:#fff;outline:none}
.frow{display:flex;gap:10px;align-items:flex-end;flex-wrap:wrap;margin-bottom:12px}
.frow input.w-s{width:90px}
.field{display:flex;flex-direction:column;gap:3px}
.field label{font-size:12px;color:var(--txt-2)}
.field-err{min-height:18px;color:var(--seal);font-size:11px}
.req{color:var(--seal);margin-left:3px}
/* 分段切换（.seg）与页签（.tabs）同一族：描边胶囊，选中态品牌蓝 */
.seg{display:inline-flex;gap:0;border:1px solid var(--line);border-radius:8px;overflow:hidden}
.seg button{border:0;border-right:1px solid var(--line);background:var(--card);padding:5px 12px;font-size:12px;color:var(--txt-2)}
.seg button:last-child{border-right:0}
.seg button.on{background:#3370ff;color:#fff}
.tab-body{margin-top:4px}
/* 间距/宽度工具类：替代视图里的 style="margin-top:…"／style="width:…"（AC66 无内联样式） */
.mt-8{margin-top:8px}.mt-12{margin-top:12px}.mb-6{margin-bottom:6px}.mb-10{margin-bottom:10px}
.w-m{width:260px}.w-l{width:280px}
.spacer{flex:1}
th.sortable:hover{color:#3370ff}
.neg{color:#cb2a2a}
.corp-no{font-size:12px;color:var(--txt-2)}
.hint{font-size:12px;color:var(--txt-3);line-height:1.7;margin:6px 0 10px}
.inline-msg{font-size:12.5px;color:#c75a00;background:#fff3e8;border:none;border-radius:9px;padding:7px 12px;margin-bottom:12px}
.inline-msg.warn{color:#c75a00;background:#fff3e8;border:none}
.inline-msg:empty{display:none}
.cust-link{color:#3370ff;cursor:pointer}
.cust-link:hover{color:#2b5dd4;text-decoration:underline}
/* 客户清单页签（原写死 #view-customers 作用域，内容早已挂到 #view-target-clients，整段落空） */
tr.subtotal-row:hover td{background:#f6f4ef}
.note-cell:hover{color:#3370ff}
.note-cell.empty{color:var(--txt-3);padding:0;font-size:inherit;text-align:inherit}
.mini-empty{color:var(--txt-3);font-size:12.5px;padding:12px 0}
.pend-raw{font-size:11.5px;color:var(--txt-2);max-width:260px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pend-candidates{font-size:11.5px;color:var(--txt-3)}
.pend-pick{border:1px solid #dcdad4;border-radius:9px;padding:4px 8px;background:var(--card);max-width:220px}
.ano-reason{color:var(--txt-2);font-size:12px}
.modal-box h4{font-size:16px;color:#23262b;font-weight:650;margin-bottom:12px}
.modal-box textarea{width:100%;min-height:120px;border:1px solid #dcdad4;border-radius:9px;padding:10px;font-size:12px;line-height:1.7}
.modal-box .m-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:14px}
.ck-grid .card{margin-bottom:0}
.ck5{grid-column:span 5}
.ck6{grid-column:span 6}

/* ── 读数卡：品牌蓝只留给唯一主读数（本期达成），其余用深墨 ── demo:328-333 */
.ckcard .big{font-size:26px;font-weight:700;color:#3370ff;font-variant-numeric:tabular-nums}
.ckcard .big.ink{color:#23262b}
.ckcard .big.neg{color:#cb2a2a}
.ck-state{display:inline-block;font-size:11px;padding:1px 8px;border-radius:999px;
          margin-left:8px;vertical-align:3px}
.ck-state.pos{background:#eaf8ec;color:#00781b}
.ck-state.neg{background:#feecec;color:#cb2a2a}
.ck-state.mid{background:#f0f0ec;color:#5d636b}
.ck-sub{font-size:12px;color:#5d636b;line-height:1.7}
.ck-note{font-size:11px;color:#7c828b;margin-top:6px}
.ck-caps{display:flex;gap:18px;font-size:12px;color:#5d636b;margin-top:8px;flex-wrap:wrap}
.ck-caps b{font-variant-numeric:tabular-nums;color:#23262b}
.ck-foot{display:flex;gap:10px;margin-top:10px}
.ckb-rail{position:absolute;left:0;right:0;top:4px;bottom:4px;background:#ece7dd;border-radius:4px}
.ckb-bar{position:absolute;top:4px;bottom:4px;left:0;background:#23262b;
         border-radius:4px;min-width:2px}
.ckb-bar.ok{background:#00b42a}
.ckb-bar.bad{background:#f53f3f}
.ckb-t{position:absolute;top:0;bottom:0;width:2px;background:#23262b;box-shadow:0 0 0 2px #fffefb}
.ckb-p{position:absolute;top:-2px;bottom:-2px;width:0;border-left:2px dashed #7c828b}
.ckcrew-row:hover{background:#f6f4ef}
.ckcrew-row:last-child{border-bottom:none}
.ckcrew-name{width:170px;flex:none;font-size:13px}
.ckcrew-mid{flex:1;min-width:0}
.ckcrew-val{width:138px;flex:none;text-align:right;font-size:13px;font-variant-numeric:tabular-nums}
.ckcrew-val .neg{color:#cb2a2a}
.alert-badge{display:inline-block;margin-left:6px;font-size:11px;background:#fff3e8;
             color:#c75a00;border-radius:999px;padding:0 7px}
.ckal-row:hover{background:#f6f4ef}
.ckal-row:last-child{border-bottom:none}
.ckal-row:hover .ckal-go{color:#3370ff}
.ckal-sev{width:4px;align-self:stretch;border-radius:2px;flex:none}
.ckal-name{width:200px;flex:none;font-size:13px}
.ckal-owner{width:64px;flex:none;font-size:12px;color:#5d636b}
.ckal-why{flex:1;min-width:0;font-size:12px;color:#454b53}
.ckal-why .tag{display:inline-block;background:#f0ede6;border-radius:4px;padding:0 6px;margin:1px 4px 1px 0}
.ckal-num{width:118px;flex:none;text-align:right;font-size:12px;
          font-variant-numeric:tabular-nums;line-height:1.5}
.ckal-spark{width:96px;flex:none}
.ckal-go{width:16px;flex:none;color:#7c828b;font-size:15px}
.ledger .seal-tag{border:none;background:#fff3e8;color:#c75a00}
.crumbs b{color:#23262b;font-family:var(--serif)}
.profile .pf-name{font-size:20px;font-weight:650;color:#23262b;font-family:var(--serif)}
.pf-kpis{display:flex;flex-wrap:wrap;gap:0;margin-top:12px}
.pf-kpi{display:flex;flex-direction:column;padding:2px 22px;border-left:1px solid var(--line)}
.pf-kpi .lab{font-size:11px;color:var(--txt-3);letter-spacing:.08em;white-space:nowrap}
.pf-kpi .val{font-size:22px;font-weight:600;color:#23262b;margin-top:3px}
.pnl{border:1px solid var(--line);border-radius:12px;background:var(--card);padding:10px 12px 6px;box-shadow:var(--sh1)}
.pnl-h .dlt{font-weight:400;color:var(--txt-2);font-variant-numeric:tabular-nums;font-size:11.5px;font-family:var(--mono)}
.pnl-h .dlt .pos{color:#009a23}
.pnl-h .dlt .neg{color:#cb2a2a}
.chips{display:inline-flex;flex-wrap:wrap;gap:6px}
.chart-note{font-size:11.5px;color:var(--txt-3);margin-top:6px}
.mini-list{list-style:none;margin-top:8px;font-size:12.5px}
.mini-list li{padding:6px 2px;border-bottom:1px dashed var(--line);
              display:flex;align-items:center;gap:8px;flex-wrap:wrap;list-style:none}
.mini-list li:last-child{border-bottom:none}
.seal-tag{display:inline-block;border:none;background:#fff3e8;color:#c75a00;border-radius:999px;
          padding:1px 8px;font-size:10.5px;font-weight:600;margin-left:4px;white-space:nowrap}
.pnl-na .na-tag{font-size:11px;background:#f0ede8;color:#7c828b;
                border-radius:999px;padding:1px 9px;font-weight:500}
.pnl-na .na-body{font-size:12px;color:#7c828b;line-height:1.85;margin-top:6px}
.total-row td{border-top:1.5px solid #dcdad4;font-weight:600}
#view-customer-analysis .cust-pill:hover{color:#3370ff}
#view-customer-analysis .legend .li{display:inline-flex;align-items:center;gap:6px}
#view-customer-analysis .legend .sw{width:10px;height:10px;border-radius:2px;display:inline-block}

/* 人员授权：表格与表单一律走上方骨架（table.tb／.frow／.field），这里只留本视图专属细节。 */
#view-users-admin .frow{align-items:flex-start;margin-top:14px}
#view-users-admin .u-tmc-state{white-space:nowrap}
#view-users-admin .u-tmc-mask{font-size:11px;white-space:nowrap}

/* 鉴权拦截页直接复用 app.css，保证 CSP 下不依赖旧 main.css。 */
.blocked{max-width:560px;margin:15vh auto 0;padding:28px;background:var(--card);
  border:1px solid var(--line);border-radius:12px;box-shadow:var(--sh3);text-align:center}
.blocked h1{font-size:22px;margin-bottom:12px}
.blocked p{color:var(--txt-2);line-height:1.8;margin-bottom:20px}
.blocked .btn{display:inline-block;text-decoration:none}
