/* 天泰建筑 · 移动端样式（品牌蓝 #1B4F8F） */
* { margin:0; padding:0; box-sizing:border-box; -webkit-tap-highlight-color:transparent; }
html { font-size:16px; }
body { font-family:-apple-system,"PingFang SC","Microsoft YaHei",sans-serif; background:#f4f6f9; color:#2b333d; }
button { font-family:inherit; cursor:pointer; }
input,select,textarea { font-family:inherit; font-size:15px; }

/* ---------- 登录页 ---------- */
.login-wrap { min-height:100vh; display:flex; flex-direction:column; align-items:center; padding:48px 20px; }
.card { background:#fff; border-radius:14px; box-shadow:0 2px 12px rgba(0,0,0,.06); padding:28px 24px; width:100%; max-width:420px; text-align:center; }
.logo { width:84px; height:84px; border-radius:18px; margin-bottom:14px; }
.card h1 { font-size:20px; color:#1B4F8F; margin-bottom:4px; }
.sub { font-size:12px; color:#98a1ab; margin-bottom:22px; }
.status { font-size:14px; color:#555; line-height:1.9; text-align:left; background:#f8fafc; border-radius:10px; padding:14px 16px; word-break:break-all; white-space:pre-wrap; }
.ok { color:#0a8a3a; } .err { color:#d4380d; } .run { color:#b07d10; }

/* ---------- 应用框架（顶部蓝条已取消，标题交给钉钉原生导航；非 tab 页用悬浮返回钮） ---------- */
.backfab { position:fixed; top:10px; left:10px; width:34px; height:34px; border-radius:50%; background:rgba(255,255,255,.94); border:1px solid #e2e8f0; color:#1B4F8F; font-size:19px; line-height:32px; text-align:center; z-index:120; box-shadow:0 2px 8px rgba(20,40,80,.15); }
.page { padding:14px 12px 72px; max-width:640px; margin:0 auto; }
.tabbar { position:fixed; bottom:0; left:0; right:0; height:56px; background:#fff; display:flex; border-top:1px solid #e8ebef; z-index:100; padding-bottom:env(safe-area-inset-bottom); }
.tabbar a { flex:1; display:flex; flex-direction:column; align-items:center; justify-content:center; text-decoration:none; color:#8a94a0; font-size:11px; gap:2px; }
.tabbar a.on { color:#1B4F8F; font-weight:600; }
.tabbar .ico { font-size:20px; line-height:1; }

/* ---------- 指标卡 ---------- */
.kpi-grid { display:grid; grid-template-columns:1fr 1fr; gap:10px; margin-bottom:12px; }
.kpi { background:#fff; border-radius:12px; padding:14px 14px 12px; box-shadow:0 1px 4px rgba(20,40,80,.05); }
.kpi .t { font-size:12px; color:#8a94a0; margin-bottom:6px; }
.kpi .v { font-size:19px; font-weight:700; color:#1B4F8F; font-variant-numeric:tabular-nums; }
.kpi .v.red { color:#d4380d; } .kpi .v.green { color:#0a8a3a; }
.kpi .s { font-size:11px; color:#aab2bc; margin-top:4px; }
.sec-title { font-size:13px; color:#8a94a0; margin:14px 2px 8px; font-weight:600; }

/* ---------- 九宫格 ---------- */
.grid9 { display:grid; grid-template-columns:repeat(4,1fr); gap:8px; }
.grid9 a { background:#fff; border-radius:12px; padding:14px 4px 10px; text-align:center; text-decoration:none; color:#2b333d; font-size:12px; box-shadow:0 1px 4px rgba(20,40,80,.05); }
.grid9 .ico { font-size:24px; display:block; margin-bottom:6px; }

/* ---------- 列表 ---------- */
.item { background:#fff; border-radius:12px; padding:13px 14px; margin-bottom:9px; box-shadow:0 1px 4px rgba(20,40,80,.05); }
.item .l1 { display:flex; justify-content:space-between; align-items:center; gap:8px; }
.item .l1 .ti { font-size:15px; font-weight:600; flex:1; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.item .l1 .amt { font-size:16px; font-weight:700; color:#1B4F8F; font-variant-numeric:tabular-nums; white-space:nowrap; }
.item .l1 .amt.out { color:#c0392b; } .item .l1 .amt.in { color:#0a8a3a; }
.item .l2 { display:flex; justify-content:space-between; margin-top:6px; font-size:12px; color:#8a94a0; }
.badge { display:inline-block; font-size:11px; border-radius:5px; padding:1px 7px; background:#eef3fa; color:#1B4F8F; }
.badge.pj { background:#eef2ff; color:#4f46e5; }
.badge.g { background:#e7f6ec; color:#0a8a3a; } .badge.o { background:#fdf1e7; color:#c0392b; } .badge.y { background:#fff8e6; color:#b07d10; }
.empty { text-align:center; color:#aab2bc; font-size:13px; padding:36px 0; }
.more { display:block; width:100%; background:#fff; border:1px solid #e2e8f0; border-radius:10px; padding:10px; color:#1B4F8F; font-size:14px; margin-bottom:10px; }

/* ---------- 子页签 ---------- */
.subtabs { display:flex; background:#fff; border-radius:10px; padding:4px; margin-bottom:12px; box-shadow:0 1px 4px rgba(20,40,80,.05); }
.subtabs a { flex:1; text-align:center; padding:8px 0; font-size:14px; color:#8a94a0; text-decoration:none; border-radius:8px; }
.subtabs a.on { background:#1B4F8F; color:#fff; font-weight:600; }

/* ---------- 表单 ---------- */
.form { background:#fff; border-radius:12px; padding:6px 14px; box-shadow:0 1px 4px rgba(20,40,80,.05); }
.frow { display:flex; align-items:center; padding:12px 0; border-bottom:1px solid #f0f2f5; gap:10px; }
.frow:last-child { border-bottom:none; }
.frow label { width:78px; flex-shrink:0; font-size:14px; color:#555; }
.frow label .req { color:#d4380d; }
.frow input,.frow select,.frow textarea { flex:1; border:none; outline:none; background:transparent; color:#2b333d; padding:2px 0; min-width:0; }
.frow textarea { resize:none; }
.frow .hint { font-size:11px; color:#aab2bc; }
.btnbar { margin-top:16px; display:flex; gap:10px; }
.btn { flex:1; background:#1B4F8F; color:#fff; border:none; border-radius:10px; padding:13px 0; font-size:16px; font-weight:600; }
.btn:disabled { background:#a9bdd6; }
.btn.ghost { background:#fff; color:#1B4F8F; border:1px solid #c8d6e8; }
.toast { position:fixed; top:46%; left:50%; transform:translate(-50%,-50%); background:rgba(0,0,0,.78); color:#fff; padding:12px 20px; border-radius:10px; font-size:14px; z-index:999; max-width:78%; text-align:center; line-height:1.6; }
.fab { position:fixed; right:16px; bottom:72px; width:52px; height:52px; border-radius:50%; background:#1B4F8F; color:#fff; border:none; font-size:28px; box-shadow:0 4px 12px rgba(27,79,143,.4); z-index:90; }

/* ---------- 搜索 ---------- */
.search { display:flex; gap:8px; margin-bottom:12px; }
.search input { flex:1; background:#fff; border:1px solid #e2e8f0; border-radius:10px; padding:10px 12px; outline:none; }
.search select { flex:0 0 auto; max-width:140px; background:#fff; border:1px solid #e2e8f0; border-radius:10px; padding:10px 8px; outline:none; color:#2b333d; }
.search button { background:#1B4F8F; color:#fff; border:none; border-radius:10px; padding:0 16px; font-size:14px; }

/* ---------- 我的 ---------- */
.me-head { background:linear-gradient(135deg,#1B4F8F,#2f6bc0); border-radius:14px; color:#fff; padding:22px 18px; display:flex; align-items:center; gap:14px; }
.me-head .avatar { width:54px; height:54px; border-radius:50%; background:rgba(255,255,255,.2); display:flex; align-items:center; justify-content:center; font-size:22px; font-weight:700; }
.me-head .nm { font-size:18px; font-weight:700; }
.me-head .rl { font-size:12px; opacity:.85; margin-top:4px; }
.pool { background:#fff; border-radius:12px; padding:4px 14px; box-shadow:0 1px 4px rgba(20,40,80,.05); }
.pool .prow { display:flex; justify-content:space-between; padding:11px 0; border-bottom:1px solid #f0f2f5; font-size:14px; }
.pool .prow:last-child { border:none; }
.pool .prow .tag { font-size:11px; border-radius:5px; padding:1px 7px; margin-left:6px; }
a.fab { display:flex; align-items:center; justify-content:center; text-decoration:none; }

/* ---------- 批次A：12模块宫格 ---------- */
.grid-mod { display:grid; grid-template-columns:repeat(4,1fr); gap:8px; }
.grid-mod a { background:transparent; border-radius:12px; padding:14px 4px 10px; text-align:center; text-decoration:none; color:#2b333d; display:flex; flex-direction:column; align-items:center; gap:6px; }
.grid-mod .mi { font-size:24px; line-height:1; }
.grid-mod .mn { font-size:12px; }

/* ---------- 模块菜单（二级功能） ---------- */
.modmenu { background:#fff; border-radius:12px; padding:0 14px; box-shadow:0 1px 4px rgba(20,40,80,.05); }
.mrow { display:flex; align-items:center; padding:15px 0; border-bottom:1px solid #f0f2f5; text-decoration:none; color:#2b333d; gap:8px; }
.mrow:last-child { border-bottom:none; }
.mrow .mt { flex:1; font-size:15px; }
.mrow .arr { color:#c4ccd6; font-size:18px; }
.mrow .mb { font-size:11px; border-radius:5px; padding:2px 8px; background:#f4f6f9; color:#aab2bc; }
.mrow.off { color:#aab2bc; }
.mrow.off .mt { color:#b9c1cb; }

/* ---------- 状态徽标（审批流） ---------- */
.st { font-size:11px; border-radius:5px; padding:1px 7px; }
.st-draft { background:#f4f6f9; color:#8a94a0; }
.st-pending { background:#fff8e6; color:#b07d10; }
.st-approved { background:#e7f6ec; color:#0a8a3a; }
.st-rejected { background:#fdece8; color:#d4380d; }
.reject-reason { color:#d4380d; }

/* ---------- 单据操作条（通过/驳回/提交） ---------- */
.opbar { display:flex; gap:8px; margin-top:10px; padding-top:10px; border-top:1px dashed #f0f2f5; }
.obtn { flex:1; border:1px solid #c8d6e8; background:#fff; color:#1B4F8F; border-radius:8px; padding:7px 0; font-size:13px; }
.obtn.ok { background:#0a8a3a; border-color:#0a8a3a; color:#fff; }
.obtn.no { background:#fff; border-color:#e8b4a8; color:#d4380d; }

/* ---------- 动态流 ---------- */
.feedrow { display:flex; gap:10px; padding:12px 4px; border-bottom:1px solid #eef1f5; }
.fdot { width:9px; height:9px; border-radius:50%; background:#1B4F8F; margin-top:7px; flex-shrink:0; }
.fdot.g { background:#0a8a3a; } .fdot.r { background:#d4380d; }
.fbody { flex:1; min-width:0; }
.fline { font-size:14px; color:#2b333d; }
.fdetail { font-size:13px; color:#6a7683; margin-top:3px; line-height:1.5; }
.ftime { font-size:11px; color:#aab2bc; margin-top:4px; }

/* ---------- 设置页 ---------- */
.rolesel { border:1px solid #e2e8f0; border-radius:6px; padding:3px 6px; font-size:13px; color:#1B4F8F; background:#fff; }
.dim { color:#aab2bc; font-size:12px; }
.tip { padding:12px 0 24px; }

/* ================= 批次A+：首页七区 ================= */
/* ① 问候区 + 预警铃 */
.greet { display:flex; align-items:center; gap:12px; padding:6px 2px 12px; }
.greet .avatar { width:46px; height:46px; border-radius:50%; background:linear-gradient(135deg,#1B4F8F,#2f6bc0); color:#fff; display:flex; align-items:center; justify-content:center; font-size:17px; font-weight:700; }
.greet .gname { flex:1; font-size:17px; font-weight:600; }
.greet .bell { position:relative; text-decoration:none; font-size:22px; text-align:center; color:#2b333d; }
.greet .bell .bdg { position:absolute; top:-4px; right:-2px; background:#d4380d; color:#fff; font-size:10px; border-radius:8px; padding:0 5px; line-height:15px; min-width:15px; }
.greet .bell .blabel { font-size:10px; color:#8a94a0; margin-top:1px; }

/* ② 审批三格卡 */
.appr-card { position:relative; background:#fff; border-radius:12px; box-shadow:0 1px 4px rgba(20,40,80,.05); display:flex; padding:18px 0 12px; margin-bottom:4px; }
.appr-card .appr-tag { position:absolute; top:0; left:14px; background:#1B4F8F; color:#fff; font-size:11px; border-radius:0 0 6px 6px; padding:2px 10px; }
.appr-card .acell { flex:1; text-align:center; text-decoration:none; color:#2b333d; }
.appr-card .acell + .acell { border-left:1px solid #f0f2f5; }
.appr-card .anum { font-size:22px; font-weight:700; color:#1B4F8F; font-variant-numeric:tabular-nums; }
.appr-card .alabel { font-size:12px; color:#8a94a0; margin-top:3px; }

/* ③ 经营概览六宫格 / ⑤ 风险项目三卡 */
.ov-grid { display:grid; grid-template-columns:repeat(3,1fr); gap:8px; }
.risk-grid { display:grid; grid-template-columns:repeat(3,1fr); gap:8px; }
.ov-cell,.rk-cell { background:#fff; border-radius:12px; padding:12px 8px 10px; text-align:center; box-shadow:0 1px 4px rgba(20,40,80,.05); }
.ov-cell .ot,.rk-cell .ot { font-size:11px; color:#8a94a0; margin-bottom:6px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.ov-cell .ov,.rk-cell .ov { font-size:16px; font-weight:700; color:#1B4F8F; font-variant-numeric:tabular-nums; }
.ov-cell .ov.neg,.rk-cell .ov.neg { color:#d4380d; }

/* ④ 风险提醒条 */
.ai-alert { background:#fff8e6; border:1px solid #f5e3b3; border-radius:12px; padding:12px 14px; font-size:13px; color:#7a5b10; line-height:1.6; margin-top:12px; }
.ai-alert b { display:block; margin-bottom:4px; }
.ai-alert.ok { background:#e7f6ec; border-color:#c3e6cf; color:#0a6e31; }

/* ⑥ 业务流程组合条 */
.flow-bar { display:flex; gap:8px; overflow-x:auto; padding-bottom:4px; }
.flow-chip { flex-shrink:0; background:#eef3fa; color:#1B4F8F; border-radius:18px; padding:9px 16px; font-size:13px; font-weight:600; text-decoration:none; }

/* ⑦ 常用应用 */
.sec-act { float:right; font-size:12px; color:#1B4F8F; text-decoration:none; font-weight:400; }
.mi.mall { color:#8a94a0; }
.cell-off { background:#f8fafc; border-radius:12px; padding:14px 4px 10px; text-align:center; color:#b9c1cb; display:flex; flex-direction:column; align-items:center; gap:6px; }
.cell-off .mi.off { font-size:24px; line-height:1; opacity:.5; }
.cell-off .mn { font-size:12px; }
.mn .mb { display:block; font-size:10px; color:#c4ccd6; font-style:normal; margin-top:2px; }

/* ---------- 小按钮 ---------- */
.mini { background:#eef3fa; color:#1B4F8F; border:none; border-radius:6px; padding:5px 12px; font-size:12px; flex-shrink:0; }
.mini.warn { background:#fdece8; color:#d4380d; }
.mini:disabled { background:#f4f6f9; color:#c4ccd6; }
.btn.sec { background:#fff; color:#1B4F8F; border:1px solid #c8d6e8; }

/* ---------- 业务流程链 ---------- */
.flchain { background:#fff; border-radius:12px; padding:18px 14px; box-shadow:0 1px 4px rgba(20,40,80,.05); }
.flstep { display:flex; align-items:center; gap:10px; background:#eef3fa; color:#1B4F8F; border-radius:10px; padding:13px 14px; font-size:15px; font-weight:600; text-decoration:none; }
.flstep .flno { width:22px; height:22px; border-radius:50%; background:#1B4F8F; color:#fff; font-size:12px; display:flex; align-items:center; justify-content:center; flex-shrink:0; }
.flstep.off { background:#f4f6f9; color:#aab2bc; }
.flstep.off .flno { background:#c4ccd6; }
.flstep .mb { margin-left:auto; font-size:10px; color:#c4ccd6; font-style:normal; }
.flarrow { text-align:center; color:#c4ccd6; font-size:14px; line-height:1.4; }

/* ---------- 职位详情：页签 / 勾选树 ---------- */
.tabbar2 { display:flex; background:#fff; border-radius:10px; padding:4px; margin-bottom:12px; box-shadow:0 1px 4px rgba(20,40,80,.05); }
.tabbar2 button { flex:1; border:none; background:transparent; padding:9px 0; font-size:14px; color:#8a94a0; border-radius:8px; }
.tabbar2 button.on { background:#1B4F8F; color:#fff; font-weight:600; }
.ckrow { display:flex; align-items:center; gap:8px; padding:10px 4px; font-size:14px; border-bottom:1px solid #f5f7fa; }
.ckrow.all { background:#fff; border-radius:10px; padding:12px 14px; margin-bottom:10px; box-shadow:0 1px 4px rgba(20,40,80,.05); }
.ckgrid { background:#fff; border-radius:12px; padding:4px 14px; box-shadow:0 1px 4px rgba(20,40,80,.05); }
.ckrow input[type=checkbox] { width:17px; height:17px; accent-color:#1B4F8F; }
.pmod { background:#fff; border-radius:12px; margin-bottom:10px; box-shadow:0 1px 4px rgba(20,40,80,.05); overflow:hidden; }
.pmod .pmhead { display:flex; align-items:center; gap:8px; padding:13px 14px; font-size:15px; }
.pmod .pmhead .arr { margin-left:auto; color:#c4ccd6; }
.pmod .pmhead input[type=checkbox] { width:17px; height:17px; accent-color:#1B4F8F; }
.pmfuncs { border-top:1px solid #f0f2f5; padding:4px 14px 8px; }
.pfrow { padding:9px 0 7px; border-bottom:1px solid #f5f7fa; }
.pfrow:last-child { border-bottom:none; }
.pfname { display:flex; align-items:center; gap:8px; font-size:14px; }
.pfname input[type=checkbox] { width:16px; height:16px; accent-color:#1B4F8F; }
.pacts { display:flex; flex-wrap:wrap; gap:4px 14px; margin:6px 0 2px 24px; }
.pacts label { display:flex; align-items:center; gap:4px; font-size:12px; color:#6a7683; }
.pacts input[type=checkbox] { width:14px; height:14px; accent-color:#1B4F8F; }
.mrow input[type=checkbox] { width:18px; height:18px; accent-color:#1B4F8F; }
.mrow.link { color:#1B4F8F; }

/* ================= 批次B0：审批流引擎 ================= */
/* 时间线 */
.wftl { background:#fff; border-radius:12px; padding:16px 14px 6px; box-shadow:0 1px 4px rgba(20,40,80,.05); }
.wfnode { display:flex; gap:12px; position:relative; padding-bottom:18px; }
.wfnode:not(:last-child)::before { content:''; position:absolute; left:6px; top:16px; bottom:0; width:2px; background:#e8ebef; }
.wfdot { width:14px; height:14px; border-radius:50%; background:#c4ccd6; margin-top:3px; flex-shrink:0; z-index:1; }
.wfdot.ok { background:#0a8a3a; }
.wfdot.no { background:#d4380d; }
.wfdot.cur { background:#b07d10; box-shadow:0 0 0 4px rgba(176,125,16,.18); }
.wfbody { flex:1; min-width:0; }
.wfl1 { display:flex; justify-content:space-between; align-items:center; font-size:14px; }
.wfl1 .wfst { font-size:11px; border-radius:5px; padding:1px 7px; background:#f4f6f9; color:#8a94a0; }
.wfl1 .wfst.ok { background:#e7f6ec; color:#0a8a3a; }
.wfl1 .wfst.no { background:#fdece8; color:#d4380d; }
.wfl1 .wfst.cur { background:#fff8e6; color:#b07d10; }
.wfl2 { font-size:12px; color:#8a94a0; margin-top:3px; }
.wfcmt { font-size:12px; color:#6a7683; background:#f8fafc; border-radius:8px; padding:6px 10px; margin-top:6px; }

/* 评论区 */
.cmtlist { background:#fff; border-radius:12px; padding:4px 14px; box-shadow:0 1px 4px rgba(20,40,80,.05); }
.cmtrow { padding:11px 0; border-bottom:1px solid #f0f2f5; }
.cmtrow:last-child { border-bottom:none; }
.cmthead { display:flex; justify-content:space-between; font-size:13px; color:#2b333d; }
.cmthead span { color:#aab2bc; font-size:11px; }
.cmtbody { font-size:14px; color:#2b333d; margin-top:5px; line-height:1.6; word-break:break-all; }
.attrow { display:flex; flex-wrap:wrap; gap:8px; margin-top:8px; }
.attimg { width:72px; height:72px; object-fit:cover; border-radius:8px; border:1px solid #eef1f5; }
.attfile { display:inline-block; background:#f4f6f9; color:#1B4F8F; border-radius:8px; padding:7px 10px; font-size:12px; text-decoration:none; max-width:100%; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.filechips { display:flex; flex-wrap:wrap; gap:6px; flex:1; }
.filechip { background:#eef3fa; color:#1B4F8F; border-radius:6px; padding:4px 9px; font-size:12px; }
.filechip b { cursor:pointer; margin-left:4px; color:#d4380d; }

/* 流程配置 */
.wfnode-edit { margin-bottom:12px; }
.wne-head { display:flex; justify-content:space-between; align-items:center; padding:8px 2px; font-size:14px; color:#2b333d; }
.wne-head span { display:flex; gap:6px; }

/* ---------- 我的项目（首页） ---------- */
.projrow { display:flex; align-items:center; gap:12px; background:#fff; border-radius:12px; padding:12px 14px; margin-bottom:9px; box-shadow:0 1px 4px rgba(20,40,80,.05); }
.pj-badge { width:42px; height:42px; border-radius:10px; background:#e8f0fb; color:#1B4F8F; font-size:17px; font-weight:700; display:flex; align-items:center; justify-content:center; flex:none; }
.pj-name { font-size:15px; font-weight:600; }
.pj-sub { font-size:12px; color:#8a94a0; margin-top:3px; }

/* ---------- AI 预审结果框 ---------- */
.ai-box { border-radius:10px; padding:10px 12px; margin:10px 0; font-size:13px; line-height:1.7; }
.ai-box.ok { background:#e7f6ec; color:#0a8a3a; }
.ai-box.warn { background:#fff8e6; color:#8a6100; }
.ai-box.err { background:#fdecea; color:#c0392b; }
.ai-box .ai-line { display:flex; gap:6px; }
.ai-box .ai-tag { flex:none; font-weight:700; }

/* ---------- 状态页签（五态，可横滑） ---------- */
.sttabs { display:flex; gap:6px; overflow-x:auto; margin-bottom:10px; -webkit-overflow-scrolling:touch; }
.sttabs a { flex:none; padding:6px 12px; font-size:13px; border-radius:16px; background:#fff; color:#8a94a0; text-decoration:none; border:1px solid #e2e8f0; }
.sttabs a.on { background:#1B4F8F; color:#fff; border-color:#1B4F8F; }

/* ---------- 批次 B1-C：考勤/文档/单据 ---------- */
.att-head { padding:14px 16px; }
.att-name { font-size:17px; font-weight:700; }
.att-sub { font-size:13px; color:#5a6472; margin-top:6px; }
.att-loc { font-size:12px; color:#8a94a0; margin-top:8px; }
.att-loc.ok { color:#0a8a3a; }
.att-btns { display:flex; gap:10px; margin:12px 0; }
.att-btn { flex:1; border:none; border-radius:14px; padding:18px 0; color:#fff; display:flex; flex-direction:column; gap:6px; align-items:center; }
.att-btn b { font-size:18px; }
.att-btn span { font-size:12px; opacity:.85; }
.att-btn.in { background:#1B4F8F; }
.att-btn.out { background:#0a8a3a; }
.att-btn:disabled { background:#c3cbd5; }
.linkrow { display:flex; gap:16px; justify-content:center; margin:14px 0; }
.linkrow a { color:#1B4F8F; font-size:14px; }
.sum-bar { background:#fff8e6; color:#8a6100; border-radius:10px; padding:12px 14px; font-size:14px; margin-top:10px; }
.badge.warn { background:#fdecea; color:#c0392b; }
.st.pending { color:#b26a00; } .st.approved, .st.closed { color:#0a8a3a; }
.st.rejected { color:#c0392b; } .st.cancelled, .st.draft { color:#8a94a0; }
.ckline { display:flex; gap:14px; align-items:center; font-size:13px; flex-wrap:wrap; }
.cfgbar { display:flex; justify-content:space-between; align-items:center; background:#eef4fb; border-radius:10px; padding:8px 12px; font-size:12px; color:#3c5a80; margin-bottom:10px; }
.cfgbar a, .cfglink { color:#1B4F8F; }
.sheet { position:fixed; inset:0; background:rgba(15,25,40,.45); z-index:200; display:flex; align-items:flex-end; }
.sheet-body { background:#f4f6f9; width:100%; max-height:86vh; overflow-y:auto; border-radius:16px 16px 0 0; padding:16px 14px 24px; }
.doc-tree { background:#fff; border-radius:12px; padding:6px 0; margin-bottom:10px; }
.doc-node { display:flex; justify-content:space-between; align-items:center; padding:10px 12px; font-size:14px; border-bottom:1px solid #f0f3f7; }
.doc-node.on { background:#eef4fb; color:#1B4F8F; font-weight:600; }
.doc-cfg { color:#8a94a0; padding:0 6px; }
.upbtn { float:right; color:#1B4F8F; font-weight:400; }
.wm-grid { display:grid; grid-template-columns:1fr 1fr; gap:8px; }
.wm-cell img { width:100%; border-radius:10px; display:block; }
.picklist .item.sel { outline:2px solid #1B4F8F; }
.frow-line { display:flex; gap:10px; align-items:center; margin:10px 0; }
.btn.sm { padding:7px 14px; font-size:13px; width:auto; }

/* ---------- C2 项目经营概览宫格 ---------- */
.ovgrid { display:grid; grid-template-columns:repeat(3,1fr); gap:8px; margin-bottom:10px; }
.ovcell { background:#fff; border-radius:12px; padding:14px 6px; text-align:center; box-shadow:0 1px 4px rgba(20,40,80,.05); }
.ovnum { font-size:16px; font-weight:700; color:#1B4F8F; }
.ovlab { font-size:12px; color:#8a94a0; margin-top:4px; }

/* ---- v1.0.0 统计分析报表 ---- */
.fltbar{display:flex;gap:8px;flex-wrap:wrap;padding:10px 12px;background:#fff;border-bottom:1px solid #eef0f3;position:sticky;top:0;z-index:5}
.fltbar select,.fltbar input{flex:1;min-width:120px;padding:7px 8px;border:1px solid #dde1e6;border-radius:8px;font-size:13px;background:#f8f9fb;color:#2a3038}
.tblwrap{overflow-x:auto;padding:8px 10px}
.tbl{width:100%;border-collapse:collapse;font-size:13px;background:#fff;border-radius:10px;overflow:hidden;box-shadow:0 1px 3px rgba(20,30,50,.06)}
.tbl th{background:#f2f5f9;color:#4a5568;font-weight:600;padding:9px 8px;text-align:left;white-space:nowrap;border-bottom:1px solid #e6eaef}
.tbl td{padding:8px;color:#2a3038;border-bottom:1px solid #f0f2f5;white-space:nowrap;max-width:220px;overflow:hidden;text-overflow:ellipsis}
.tbl .num,.tbl th.num{text-align:right;font-variant-numeric:tabular-nums}
.tbl tr.bhead td{background:#e8f0fe;font-weight:600;color:#1a56c4}
.tbl tr.bsum td{background:#fff7e0;font-weight:700;border-top:2px solid #ecd27a}
.sec-ti{padding:12px 14px 4px;font-weight:600;color:#4a5568;font-size:14px}

/* ============ v1.9.0 项目列表对标斗栱云 ============ */
.pj-topbar{display:flex;gap:8px;align-items:center;padding:10px 12px;background:#fff}
.pj-search{flex:1;display:flex;align-items:center;background:#f2f4f7;border-radius:8px;padding:0 10px}
.pj-search input{flex:1;border:none;background:transparent;height:36px;outline:none;font-size:14px}
.pj-ficon{font-size:16px;color:#8a94a6;padding:0 2px;text-decoration:none}
.pj-share{width:34px;height:34px;border:1px solid #e2e8f0;border-radius:50%;display:flex;align-items:center;justify-content:center;color:#4a5568;text-decoration:none;font-size:15px;background:#fff}
.pj-catrow{display:flex;align-items:center;gap:4px;padding:8px 12px;background:#fff;border-top:1px solid #f0f2f5;font-size:13px}
.pj-catcur{color:#2a3038;font-weight:600;text-decoration:none;margin-left:4px}
.pj-catmgr{color:#4a5568;text-decoration:none;font-size:13px}
.pj-card{position:relative}
.pj-tags{display:flex;gap:6px;flex-wrap:wrap;padding:2px 0 4px}
.pj-dots{color:#8a94a6;text-decoration:none;font-size:16px;padding:0 4px}
.pj-mgr{color:#2f6bff;text-decoration:none;font-size:12px;padding:2px 8px;border:1px solid #2f6bff;border-radius:4px;margin-left:6px;white-space:nowrap}
.pj-menu{position:absolute;right:10px;top:34px;background:#fff;border:1px solid #e2e8f0;border-radius:8px;box-shadow:0 4px 16px rgba(0,0,0,.12);z-index:30;display:flex;flex-direction:column;min-width:110px}
.pj-menu a{padding:10px 14px;color:#2a3038;text-decoration:none;font-size:14px;border-bottom:1px solid #f0f2f5}
.pj-menu a:last-child{border-bottom:none}
.pj-flthead{display:flex;justify-content:space-between;align-items:center;padding:4px 0 10px}
.pj-flthead a{color:#4a5568;text-decoration:none}
.pj-reset{color:#c0392b!important}
.pj-catitem{display:flex;gap:10px;align-items:center;padding:10px 2px;border-bottom:1px solid #f0f2f5;font-size:14px}
.pj-pickval{color:#1B4F8F;text-decoration:none;flex:1}
.pj-formbody{max-height:88vh;overflow-y:auto}
.pj-sharebody{text-align:left}

/* ============ v1.12 图标体系（V6 · 对标斗栱云真身：彩色圆角磁贴 + 白色粗壮图形） ============
   斗栱云高清截图实证配方：图标 = 纯色圆角方形磁贴（约27%圆角）+ 白色 glyph（粗线+浅面），
   磁贴多彩错色（蓝/橙/绿/红轮转），格子容器透明（V5 已定案）。
   V6 配方：.mi 44px 磁贴 / glyph 26px·2.2 线宽 / 封闭形状 22% 白面填充。 */
.mi{width:44px;height:44px;border-radius:12px;display:flex;align-items:center;justify-content:center;flex:none;background:#2563EB;color:#fff}
.mi-ic{width:26px;height:26px;fill:none;stroke:currentColor;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round}
/* glyph 封闭形状浅白填充：粗白线+浅白面，磁贴上的实感细节（.fa=脚本预标注闭合面） */
.mi-ic :is(circle,rect,ellipse),.mi-ic .fa{fill:currentColor;fill-opacity:.22;stroke:currentColor}
/* v4.3 业务语义色磁贴：in 收入绿 / out 支出橙 / warn 警示红 / ai 智能紫 / apply 申请蓝 / record 登记靛蓝 / archive 档案灰 / stats 统计青 / site 施工天青 */
.mi.t-in{background:#22C55E}
.mi.t-out{background:#FF9432}
.mi.t-warn{background:#FF5A5F}
.mi.t-ai{background:#A855F7}
.mi.t-apply{background:#2563EB}
.mi.t-record{background:#6366F1}
.mi.t-archive{background:#8A94A0}
.mi.t-stats{background:#14B8A6}
.mi.t-site{background:#0EA5E9}
.mi.mall{background:#C3CEDA!important;color:#fff!important;border:none!important;box-shadow:none}
.mi.off{background:#D9E1EA!important;color:#fff!important;border:none!important;box-shadow:none}
.mi.off .mi-ic{stroke-width:2;opacity:.92}
.grid-mod .mi{font-size:inherit;line-height:inherit}
.cell-off .mi.off{font-size:inherit;opacity:1;box-shadow:none}
.tb-ic{width:21px;height:21px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}
.bell-ic{width:23px;height:23px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}

/* ---------- v1.12.0 项目详情（对标斗栱云：横幅+经营概览卡+常用卡片/常用页签） ---------- */
.pd-banner { background:linear-gradient(135deg,#1B4F8F,#2f6bc0); border-radius:12px; color:#fff; padding:16px 14px; display:flex; align-items:center; gap:10px; margin-bottom:10px; }
.pd-banner .pd-bname { flex:1; font-size:19px; font-weight:700; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.pd-banner .pd-bshare { width:30px; height:30px; border-radius:50%; background:rgba(255,255,255,.18); color:#fff; display:flex; align-items:center; justify-content:center; flex:none; }
.pd-ovcard { background:#fff; border-radius:12px; padding:12px 12px 12px; margin-bottom:10px; box-shadow:0 1px 4px rgba(20,40,80,.05); }
.pd-ovhead { display:flex; align-items:center; justify-content:space-between; padding:0 2px 8px; }
.pd-ovtitle { font-size:15px; font-weight:700; color:#2b333d; }
.pd-ovarr { color:#c4ccd6; font-size:14px; transition:transform .15s; display:inline-block; }
.pd-ovarr.up { transform:rotate(180deg); }
.pd-ovtabs { display:flex; gap:2px; overflow-x:auto; border-bottom:1px solid #f0f2f5; }
.pd-ovtabs a { flex:none; padding:8px 10px 9px; font-size:14px; color:#8a94a0; text-decoration:none; border-bottom:2px solid transparent; }
.pd-ovtabs a.on { color:#1B4F8F; font-weight:700; border-bottom-color:#1B4F8F; }
.pd-morebtn { flex:none; width:30px; height:30px; margin:4px 0 4px 4px; border-radius:7px; background:#f4f6f9; color:#556; display:flex; align-items:center; justify-content:center; font-size:15px; text-decoration:none; align-self:center; }
.pd-fund { background:linear-gradient(150deg,#fff5f2,#fdeeea); border-radius:10px; padding:14px 14px; margin-top:10px; }
.pd-fundtop { display:flex; justify-content:space-between; align-items:flex-start; }
.pd-flab { font-size:12px; color:#8a6a5e; }
.pd-fbal { font-size:26px; font-weight:800; color:#b84a33; font-variant-numeric:tabular-nums; margin-top:2px; }
.pd-fundtag { font-size:13px; font-weight:700; color:#b84a33; display:flex; align-items:center; gap:4px; }
.pd-fundico { width:20px; height:20px; border-radius:50%; background:#b84a33; color:#fff; font-size:12px; display:inline-flex; align-items:center; justify-content:center; }
.pd-fundrow { display:flex; margin-top:12px; gap:34px; }
.pd-fio { font-size:17px; font-weight:700; color:#7a4a3d; font-variant-numeric:tabular-nums; margin-top:2px; }
.pd-kpibody { background:#f8fafc; border-radius:10px; padding:14px; margin-top:10px; }
.pd-kpibody .pd-flab { color:#8a94a0; }
.pd-kpibody .pd-fbal { color:#1B4F8F; }
.pd-kpisub { font-size:12px; color:#aab2bc; margin-top:4px; }
.pd-tabs { background:#fff; border-radius:12px; padding:4px 8px; margin-bottom:10px; display:flex; align-items:center; box-shadow:0 1px 4px rgba(20,40,80,.05); }
.pd-tabscroll { display:flex; overflow-x:auto; flex:1; gap:2px; }
.pd-tabscroll a { flex:none; padding:9px 11px; font-size:14px; color:#8a94a0; text-decoration:none; border-bottom:2px solid transparent; }
.pd-tabscroll a.on { color:#1B4F8F; font-weight:700; border-bottom-color:#1B4F8F; }
.pd-dates { background:#fff; border-radius:12px; padding:14px; display:flex; justify-content:space-between; margin-bottom:10px; box-shadow:0 1px 4px rgba(20,40,80,.05); }
.pd-dlab { font-size:12px; color:#8a94a0; }
.pd-dval { font-size:20px; font-weight:700; color:#2b333d; margin-top:4px; font-variant-numeric:tabular-nums; }
.pd-info { background:#fff; border-radius:12px; padding:2px 14px; margin-bottom:10px; box-shadow:0 1px 4px rgba(20,40,80,.05); }
.pd-irow { display:flex; padding:11px 0; border-bottom:1px solid #f4f6f9; font-size:14px; }
.pd-irow:last-child { border-bottom:none; }
.pd-ilab { width:92px; flex:none; color:#8a94a0; }
.pd-ival { flex:1; color:#2b333d; word-break:break-all; }
.pd-ival.dim { color:#c4ccd6; }
.pd-card { background:#fff; border-radius:12px; padding:13px 14px; margin-bottom:10px; box-shadow:0 1px 4px rgba(20,40,80,.05); }
.pd-ctitle { font-size:15px; font-weight:700; color:#2b333d; margin-bottom:8px; }
.pd-cempty { font-size:13px; color:#aab2bc; padding:8px 0; }
.pd-ctext { font-size:14px; color:#555; line-height:1.7; white-space:pre-wrap; word-break:break-all; }
.pd-frow2 { padding:7px 0; font-size:14px; border-bottom:1px solid #f4f6f9; }
.pd-frow2:last-child { border-bottom:none; }
.pd-frow2 a { color:#1B4F8F; text-decoration:none; word-break:break-all; }
.pd-pm { background:#fff; border-radius:12px; padding:4px 14px; margin-bottom:10px; box-shadow:0 1px 4px rgba(20,40,80,.05); }
.pd-pmrow { display:flex; align-items:center; padding:12px 0; border-bottom:1px solid #f0f2f5; font-size:14px; }
.pd-pmrow:last-child { border-bottom:none; }
.pd-pmlab { width:92px; flex:none; color:#8a94a0; }
.pd-pmval { flex:1; display:flex; align-items:center; gap:8px; flex-wrap:wrap; color:#2b333d; }
.pd-avatar { width:26px; height:26px; border-radius:50%; background:#2f6bc0; color:#fff; font-size:13px; display:inline-flex; align-items:center; justify-content:center; }
.pd-mchip { background:#eef3fa; color:#1B4F8F; border-radius:6px; padding:3px 9px; font-size:13px; }
.pd-phead { display:flex; justify-content:space-between; align-items:center; padding:4px 2px 12px; font-size:16px; }
.pd-plink { color:#1B4F8F; font-size:14px; text-decoration:none; }
.pd-pgrid { display:grid; grid-template-columns:repeat(3,1fr); gap:9px; margin-bottom:8px; }
.pd-pgrid a { background:#f4f6f9; border:1px solid transparent; border-radius:9px; padding:13px 4px; text-align:center; font-size:14px; color:#2b333d; text-decoration:none; word-break:break-all; }
.pd-pgrid a.on { background:#e8f0fb; border-color:#9fc0ea; color:#1B4F8F; font-weight:700; }
.pd-pgrid a.lock { opacity:.75; }
.pd-psec { font-size:14px; font-weight:700; color:#2b333d; padding:10px 2px 2px; }
.pj-memlist { display:flex; flex-wrap:wrap; gap:6px; padding:6px 0; }
.pj-mem { display:inline-flex; align-items:center; gap:5px; font-size:13px; color:#2b333d; background:#f4f6f9; border:1px solid #e4e8ee; border-radius:13px; padding:3px 10px; }
.pj-mem a { color:#c0392b; text-decoration:none; font-weight:700; }
.pj-mem.on { background:#eaf4ff; border-color:#3b82f6; color:#2563eb; cursor:pointer; }
.pd-plist { display:flex; flex-direction:column; gap:7px; margin-bottom:6px; }
.pd-pitem { display:flex; align-items:center; gap:8px; background:#f4f6f9; border:1px solid #e3e8ee; border-radius:9px; padding:9px 10px; }
.pd-pord { flex:none; width:20px; height:20px; border-radius:50%; background:#1B4F8F; color:#fff; font-size:12px; display:flex; align-items:center; justify-content:center; }
.pd-pcn { flex:1; font-size:14px; color:#2b333d; }
.pd-pmv { flex:none; display:flex; gap:4px; }
.pd-pmv a, .pd-px { flex:none; width:26px; height:26px; border-radius:6px; background:#fff; border:1px solid #dde3ea; color:#556; display:flex; align-items:center; justify-content:center; font-size:14px; text-decoration:none; }
.pd-pmv a.dim { opacity:.35; pointer-events:none; }
.pd-px { color:#e0525a; }
/* ==== v1.13.0 项目预算单据（对标斗栱云 L3：列表卡片+新增表单） ==== */
.badge.r { background:#fdecea; color:#d84343; }
.bud-tabs { display:flex; gap:6px; overflow-x:auto; padding:10px 0 2px; -webkit-overflow-scrolling:touch; }
.bud-tabs a { flex:none; font-size:13px; color:#5a6a7a; background:#e9edf3; border-radius:8px; padding:7px 14px; text-decoration:none; }
.bud-tabs a.on { color:#fff; background:#3D7EFF; }
.bud-card .bud-time { font-size:11px; flex:none; }
.bud-main { display:flex; gap:12px; margin-top:8px; align-items:flex-start; }
.bud-total { flex:none; min-width:104px; }
.bud-total b { display:block; font-size:19px; color:#F2802E; font-weight:600; }
.bud-total span { font-size:12px; color:#8a94a0; }
.bud-cats { flex:1; display:grid; grid-template-columns:1fr; gap:3px; }
.bud-cat { display:flex; justify-content:space-between; gap:8px; font-size:12.5px; color:#5a6a7a; }
.bud-cat b { font-weight:400; color:#2b333d; }
.bud-chead { display:flex; justify-content:space-between; align-items:center; font-size:13.5px; font-weight:500; color:#2b333d; margin:12px 0 8px; }
.bud-chead a { font-size:12px; color:#8a94a0; text-decoration:none; }
.bud-catgrid { display:grid; grid-template-columns:1fr 1fr; gap:8px; }
.bud-catcard { background:#eceff4; border-radius:8px; padding:10px 12px; display:flex; flex-direction:column; gap:2px; }
.bud-catcard b { font-size:13px; font-weight:500; color:#2b333d; }
.bud-catcard span { font-size:14px; color:#2b333d; }
.bud-catcard i { font-style:normal; font-size:11px; color:#aab2bc; }
.bud-itemrow { display:flex; gap:6px; align-items:center; margin:6px 0; }
.bud-itemrow select { width:84px; flex:none; }
.bud-itemrow input[type=number] { width:96px; flex:none; }
.bud-itemrow input:not([type=number]) { flex:1; min-width:0; }
.bud-item { display:flex; gap:8px; align-items:center; font-size:13px; padding:7px 0; border-bottom:1px solid #e8ecf2; }
.bud-itemname { flex:1; color:#42506a; }
.bud-form .frow input, .bud-form .frow select { text-align:left; }

/* ---------- v1.14.0 对标 DGY：列表 chips / 表单提示 / 物资明细行 / 审批流程区 ---------- */
.sttabs-dgy a { background:#f2f4f7; border-color:#f2f4f7; color:#5a6472; }
.sttabs-dgy a.on { background:#1B4F8F; border-color:#1B4F8F; color:#fff; }
.frow .hint { flex:1; font-size:13px; color:#9aa4b2; line-height:36px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.mat-quick { display:flex; flex-wrap:wrap; gap:6px; padding:2px 14px 6px; }
.mat-quick a { font-size:12px; padding:4px 10px; border-radius:14px; background:#eef3fb; color:#1B4F8F; text-decoration:none; }
.mat-row { margin:0 14px 8px; border:1px solid #e6ebf2; border-radius:10px; padding:8px 10px; background:#fbfcfe; }
.mat-row .mat-l1 { display:flex; align-items:center; gap:8px; }
.mat-row .mat-l1 input { flex:1; border:none; background:transparent; height:32px; outline:none; font-size:14px; font-weight:600; }
.mat-row .mat-rm { color:#c0392b; text-decoration:none; font-size:14px; padding:4px; }
.mat-row .mat-l2 { display:flex; gap:6px; margin-top:4px; }
.mat-row .mat-l2 input { flex:1; min-width:0; border:none; background:transparent; height:30px; outline:none; font-size:13px; border-top:1px solid #f0f2f5; }
.mat-add { display:inline-block; margin:0 14px; font-size:13px; color:#1B4F8F; text-decoration:none; padding:6px 0; }
/* v1.17.0 报销/其他支出：费用明细行（说明+金额+类别） */
.det-row { margin:0 14px 8px; border:1px solid #e6ebf2; border-radius:10px; padding:8px 10px; background:#fbfcfe; }
.det-row .det-l1 { display:flex; align-items:center; gap:8px; }
.det-row .det-l1 input { flex:1; border:none; background:transparent; height:32px; outline:none; font-size:14px; font-weight:600; }
.det-row .det-l2 { display:flex; gap:6px; margin-top:4px; }
.det-row .det-l2 input { flex:1; min-width:0; border:none; background:transparent; height:30px; outline:none; font-size:13px; border-top:1px solid #f0f2f5; }
.det-row .det-l2 select { flex:1; min-width:0; border:none; background:transparent; height:30px; outline:none; font-size:13px; border-top:1px solid #f0f2f5; color:#333; }
.wf-block { margin:10px 14px; border-top:1px solid #f0f2f5; padding-top:10px; }
.wf-block .wf-title { font-size:14px; font-weight:700; margin-bottom:8px; }
.wf-block .wf-row { font-size:13px; color:#5a6472; padding-left:14px; position:relative; margin-bottom:6px; }
.wf-block .wf-row .wf-dot { position:absolute; left:0; top:7px; width:8px; height:8px; border-radius:50%; background:#c9d4e3; }

/* ---------- v1.16.0 费用管理 L3 磁贴页 + L4 品牌头部条（对标斗栱云） ---------- */
.tp-hero { background:linear-gradient(135deg,#1B4F8F,#2f6bc0); border-radius:12px; color:#fff; padding:14px; margin-bottom:10px; }
.tp-hname { font-size:18px; font-weight:700; margin-bottom:10px; }
.tp-hrow { display:flex; gap:8px; }
.tp-hcell { flex:1; background:rgba(255,255,255,.14); border-radius:9px; padding:8px 10px; }
.tp-hlab { font-size:11px; opacity:.82; }
.tp-hval { font-size:17px; font-weight:800; margin-top:2px; font-variant-numeric:tabular-nums; }
.tp-hval.warn { color:#ffd28a; }
.tp-grid { display:grid; grid-template-columns:1fr 1fr; gap:10px; }
.tp-tile { position:relative; background:#fff; border-radius:13px; padding:14px 12px 12px; display:flex; flex-direction:column; align-items:flex-start; gap:6px; text-decoration:none; box-shadow:0 1px 4px rgba(20,40,80,.06); }
.tp-tico { width:42px; height:42px; border-radius:12px; display:flex; align-items:center; justify-content:center; color:#fff; }
.tp-tsvg { width:22px; height:22px; }
.tp-tname { font-size:15px; font-weight:700; color:#2b333d; }
.tp-tmeta { font-size:12px; color:#8a94a0; }
.tp-tmeta b { font-size:14px; color:#2b333d; }
.tp-tamt { font-size:13px; font-weight:700; color:#e8820c; font-variant-numeric:tabular-nums; }
.tp-tamt.dim2 { color:#c4ccd6; font-weight:400; }
.tp-tpend { position:absolute; top:10px; right:10px; background:#FF5A5F; color:#fff; border-radius:8px; font-size:11px; padding:2px 7px; }
.sd-hero { display:flex; align-items:center; gap:10px; border-radius:12px; color:#fff; padding:13px 14px; margin-bottom:10px; }
.sd-hico { width:38px; height:38px; border-radius:10px; background:rgba(255,255,255,.2); display:flex; align-items:center; justify-content:center; flex:none; }
.sd-hsvg { width:20px; height:20px; }
.sd-htxt { display:flex; flex-direction:column; line-height:1.35; }
.sd-htxt b { font-size:16px; font-weight:700; }
.sd-htxt span { font-size:12px; opacity:.82; }

/* ============ v1.17.0 双形态布局壳（PC/手机断点 768px） ============ */
.app-shell { min-height:100vh; background:#f4f6f9; }
/* ---------- 手机模式：顶部导航 + 单列 + 底部 tabBar ---------- */
.mo-topbar { position:sticky; top:0; z-index:100; height:48px; background:#fff; display:flex; align-items:center; gap:8px; padding:0 12px; border-bottom:1px solid #eef1f5; }
.mo-back { width:32px; height:32px; display:flex; align-items:center; justify-content:center; color:#1B4F8F; font-size:22px; text-decoration:none; }
.mo-title { font-size:17px; font-weight:700; color:#2b333d; }
.page.has-topbar { padding-top:8px; }
/* ---------- PC 模式：左侧深色侧栏 + 顶部页签 + 内容区 ---------- */
.app-shell.pc { display:flex; flex-direction:row; height:100vh; overflow:hidden; }
.app-shell.pc .page { padding:0; max-width:none; margin:0; }
.pc-side { width:232px; flex:0 0 232px; background:#1F2733; display:flex; flex-direction:column; overflow-y:auto; }
.pc-brand { display:flex; align-items:center; gap:10px; padding:16px 16px 12px; }
.pc-logo { width:34px; height:34px; border-radius:8px; }
.pc-brand-name { color:#fff; font-size:16px; font-weight:700; }
.pc-brand-sub { color:#7a8699; font-size:11px; margin-top:2px; }
.pc-menu { flex:1; padding:0 10px 16px; }
.pc-item { display:flex; align-items:center; gap:10px; padding:11px 12px; border-radius:10px; color:#c6cedb; font-size:14px; cursor:pointer; text-decoration:none; margin-bottom:2px; }
.pc-item:hover { background:rgba(255,255,255,.06); }
.pc-item.on { background:rgba(61,126,255,.18); color:#fff; }
.pc-item .mi { width:24px; height:24px; border-radius:6px; background:transparent !important; color:#8fa3bd; }
.pc-item .mi-ic { width:16px; height:16px; }
/* V-019：提权重压过 .app-shell.pc .mi（64px 应用宫格磁贴），侧栏专属小图标 */
.app-shell.pc .pc-item .mi { width:24px; height:24px; border-radius:6px; background:transparent !important; color:#8fa3bd; }
.app-shell.pc .pc-item .mi-ic { width:16px; height:16px; }
.pc-item.on .mi { color:#fff; background:rgba(61,126,255,.35) !important; }
.pc-item-t { flex:1; }
.pc-arrow { color:#4a5568; font-size:16px; }
.pc-main { flex:1; display:flex; flex-direction:column; min-width:0; }
.pc-topbar { height:52px; background:#fff; border-bottom:1px solid #e8ebef; display:flex; align-items:center; justify-content:space-between; padding:0 20px; flex-shrink:0; }
.pc-top-l { display:flex; align-items:center; gap:18px; min-width:0; }
.pc-fold { width:32px; height:32px; display:flex; align-items:center; justify-content:center; border-radius:8px; color:#5b6b7d; font-size:16px; flex-shrink:0; cursor:pointer; }
.pc-fold:hover { background:#eef2f7; }
.pc-tabs { display:flex; align-items:center; gap:6px; }
.pc-tabs a { font-size:13px; color:#5b6b7d; padding:5px 14px; border-radius:15px; cursor:pointer; text-decoration:none; }
.pc-tabs a.on { color:#fff; background:#2b6de5; font-weight:500; }
.pc-title { font-size:16px; font-weight:700; color:#2b333d; }
.pc-top-r { font-size:13px; color:#5b6b7d; }
.pc-content { flex:1; overflow-y:auto; padding:20px 24px 32px; }
.pc-content .page { max-width:1280px; margin:0 auto; padding:0; }
/* PC 下 widened cards / grids */
.app-shell.pc .kpi-grid { grid-template-columns:repeat(4,1fr); }
.app-shell.pc .grid-mod { grid-template-columns:repeat(6,1fr); gap:16px; }
.app-shell.pc .mi { width:64px; height:64px; }
.app-shell.pc .mi-ic { width:34px; height:34px; }
.app-shell.pc .mn { font-size:13px; }
.app-shell.pc .ov-grid,
.app-shell.pc .risk-grid { grid-template-columns:repeat(6,1fr); }
/* PC 下 tabBar 与 mo-topbar 隐藏 */
.app-shell.pc .tabbar,
.app-shell.pc .mo-topbar { display:none !important; }
/* 表单在 PC 下居中卡片 */
.app-shell.pc .form { max-width:900px; margin:0 auto; }
.app-shell.pc .search { max-width:900px; margin:0 auto 12px; }

/* ============ v1.18.0 双形态逐页排版对齐（批2：8类页面PC/手机双分支） ============ */

/* ---------- 通用 PC 内容容器 ---------- */
.app-shell.pc .page { max-width:1280px; margin:0 auto; padding:0; }
.app-shell.pc .pc-hero { display:block; }
.app-shell.pc .empty,
.app-shell.pc .more { max-width:1280px; margin-left:auto; margin-right:auto; }
.app-shell.pc .btnbar { max-width:900px; margin-left:auto; margin-right:auto; }

/* ---------- 工作台 PC：横幅 + 宫格加宽 + 项目卡片双栏 ---------- */
.pc-hero { display:none; background:linear-gradient(135deg,#1B4F8F,#2f6bc0); border-radius:12px; color:#fff; padding:18px 22px; margin-bottom:14px; }
.pc-hero-txt { display:flex; align-items:center; gap:16px; }
.pc-hero-txt b { font-size:18px; font-weight:700; }
.pc-hero-txt span { font-size:13px; opacity:.86; }
.app-shell.pc .greet { padding:10px 2px 14px; }
.app-shell.pc .appr-card { max-width:none; }
.app-shell.pc .ov-grid,
.app-shell.pc .risk-grid { grid-template-columns:repeat(6,1fr); gap:12px; }
.app-shell.pc .grid-mod { grid-template-columns:repeat(8,1fr); gap:14px; }
.app-shell.pc .projrow { display:flex; gap:16px; flex-wrap:wrap; max-width:1280px; margin-left:auto; margin-right:auto; }
.app-shell.pc .projrow > div { flex:1; min-width:260px; }
.app-shell.pc .flow-bar { flex-wrap:wrap; }

/* ---------- 列表 PC：顶部 tab + 筛选行 + 卡片表格化 ---------- */
.app-shell.pc .pj-topbar,
.app-shell.pc .search,
.app-shell.pc .fltbar { max-width:1280px; margin:0 auto 12px; }
.app-shell.pc .subtabs,
.app-shell.pc .sttabs { max-width:1280px; margin:0 auto 12px; }
.app-shell.pc .item { max-width:1280px; margin-left:auto; margin-right:auto; }
.app-shell.pc .pj-card { display:grid; grid-template-columns:1.2fr .8fr; gap:8px 16px; align-items:center; }
.app-shell.pc .pj-card .l1 { grid-column:1; }
.app-shell.pc .pj-card .l2 { grid-column:1; }
.app-shell.pc .pj-card .pj-tags { grid-column:2; grid-row:1/3; justify-content:flex-end; }

/* ---------- 表单 PC：居中卡片 + 底部双按钮 ---------- */
.app-shell.pc .form { max-width:900px; margin:0 auto 14px; border-radius:12px; padding:8px 18px; }
.app-shell.pc .frow { padding:14px 0; gap:16px; }
.app-shell.pc .frow label { width:96px; font-size:14px; color:#555; }
.app-shell.pc .btnbar { max-width:900px; margin:14px auto 0; display:flex; gap:12px; }
.app-shell.pc .btn { max-width:none; flex:1; }
.app-shell.pc .sheet { align-items:center; }
.app-shell.pc .sheet-body { max-width:720px; margin:0 auto; border-radius:12px; max-height:86vh; }

/* ---------- 详情 PC：双栏布局 ---------- */
.app-shell.pc .pd-banner { max-width:1280px; margin:0 auto 14px; border-radius:12px; padding:20px 22px; }
.app-shell.pc .pd-ovcard,
.app-shell.pc .pd-info,
.app-shell.pc .pd-dates,
.app-shell.pc .pd-card,
.app-shell.pc .pd-pm { max-width:1280px; margin-left:auto; margin-right:auto; }
.app-shell.pc .pd-pgrid { grid-template-columns:repeat(6,1fr); }
.app-shell.pc .ovgrid { grid-template-columns:repeat(6,1fr); gap:12px; max-width:1280px; margin-left:auto; margin-right:auto; }

/* ---------- 报表 PC：KPI卡 + 表格全宽 ---------- */
.app-shell.pc .kpi-grid { grid-template-columns:repeat(4,1fr); gap:14px; max-width:1280px; margin-left:auto; margin-right:auto; }
.app-shell.pc .kpi { padding:18px; }
.app-shell.pc .tblwrap { max-width:1280px; margin:0 auto; }
.app-shell.pc .sec-ti { max-width:1280px; margin:0 auto; padding:16px 0 8px; }

/* ---------- 资金账户 PC：大蓝卡 + 统计卡 + 表格 ---------- */
.app-shell.pc .me-head { max-width:1280px; margin:0 auto 14px; }
.app-shell.pc .pool { max-width:1280px; margin:0 auto 14px; }

/* ---------- 设置 PC：权限矩阵/审批流横向展开 ---------- */
.app-shell.pc .adm-shell { min-height:calc(100vh - 52px); }
.app-shell.pc .adm-main { padding:20px 24px; max-width:1280px; margin:0 auto; }

/* ---------- 动态 PC：时间线居中 + 卡片 ---------- */
.app-shell.pc .feedrow { max-width:900px; margin:0 auto 10px; background:#fff; border-radius:12px; padding:14px 16px; box-shadow:0 1px 4px rgba(20,40,80,.05); }
.app-shell.pc .feedrow .fdot { margin-top:6px; }

/* ---------- 手机模式：隐藏 PC 横幅，恢复单列 ---------- */
.app-shell:not(.pc) .pc-hero { display:none !important; }
.app-shell:not(.pc) .page { padding:14px 12px 72px; max-width:640px; }
.app-shell:not(.pc) .form { margin:0 0 12px; }
.app-shell:not(.pc) .btnbar { margin:16px 12px 0; }
.app-shell:not(.pc) .sheet { align-items:flex-end; }
.app-shell:not(.pc) .sheet-body { max-width:none; margin:0; border-radius:16px 16px 0 0; }

/* ============ v1.19.0 批2落实：8类页面双端逐页对齐（录屏对标） ============ */

/* ---------- ① 工作台首页 ---------- */
/* 手机：顶部蓝色渐变头 + KPI 三卡（录屏手机钉钉工作台） */
.mo-hero { background:linear-gradient(135deg,#1B4F8F,#2f6bc0); border-radius:14px; color:#fff; padding:16px 16px 14px; margin-bottom:12px; }
.mo-hero-top { display:flex; justify-content:space-between; align-items:center; margin-bottom:12px; }
.mo-hero-hi { font-size:17px; font-weight:700; }
.mo-hero-bell { color:#fff; font-size:12px; text-decoration:none; background:rgba(255,255,255,.18); border-radius:12px; padding:3px 10px; }
.mo-hero-kpi { display:grid; grid-template-columns:repeat(3,1fr); gap:8px; }
.mhk { background:rgba(255,255,255,.14); border-radius:10px; padding:9px 6px 7px; text-align:center; }
.mhk-v { font-size:17px; font-weight:700; font-variant-numeric:tabular-nums; }
.mhk-v.neg { color:#ffd9a8; }
.mhk-t { font-size:11px; opacity:.85; margin-top:3px; }
/* 手机端：mo-hero 已含问候/预警/审批三格，隐藏重复问候区（V-047：risk-sec 恢复显示） */
.app-shell:not(.pc) .home-page .greet { display:none; }
/* V-046：手机端隐藏独立审批卡（蓝头三格已承接审批数，页面仅一套审批三格） */
.app-shell:not(.pc) .home-page .appr-card { display:none; }
/* V-046：蓝头审批三格为链接态 */
a.mhk { text-decoration:none; color:inherit; display:block; }
/* PC 端：隐藏手机渐变头 */
.app-shell.pc .mo-hero { display:none !important; }
/* PC：快捷入口彩色圆角图标网格 4-5 列（录屏口径取 5 列） */
.app-shell.pc .home-page .grid-mod { grid-template-columns:repeat(5,1fr); }
/* PC：数字统计区/风险三卡 6 列已在 v1.18.0 生效，此处锁定项目卡片双栏 */
.app-shell.pc .home-page .projrow { background:#fff; border-radius:12px; padding:14px 16px; box-shadow:0 1px 4px rgba(20,40,80,.05); }

/* ---------- ② 应用中心：PC 左侧分组 tab + 右侧全屏图标网格 ---------- */
.apps-rail { display:none; }
.app-shell.pc .apps-wrap { display:flex; gap:18px; max-width:1280px; margin:0 auto; align-items:flex-start; }
.app-shell.pc .apps-rail { display:flex; flex-direction:column; flex:0 0 180px; background:#fff; border-radius:12px; padding:8px; box-shadow:0 1px 4px rgba(20,40,80,.05); position:sticky; top:0; }
.app-shell.pc .apps-rail a { padding:10px 12px; border-radius:8px; font-size:13px; color:#5b6b7d; text-decoration:none; cursor:pointer; }
.app-shell.pc .apps-rail a:hover { background:#f2f6fb; }
.app-shell.pc .apps-rail a.on { background:#2b6de5; color:#fff; font-weight:600; }
.app-shell.pc .apps-main { flex:1; min-width:0; }
.app-shell.pc .apps-sec.off { display:none; }
.app-shell.pc .apps-main .grid-mod { grid-template-columns:repeat(8,1fr); }

/* ---------- ③ 单据列表：PC 顶部横向 tab + 筛选行 + 表格化行（单号蓝链/金额右对齐） ---------- */
.app-shell.pc .subtabs,
.app-shell.pc .sttabs { background:transparent; box-shadow:none; padding:0; gap:4px; border-bottom:1px solid #e8ebef; border-radius:0; }
.app-shell.pc .subtabs a,
.app-shell.pc .sttabs a { flex:none; padding:9px 18px; border-radius:0; border-bottom:2px solid transparent; font-size:14px; }
.app-shell.pc .subtabs a.on,
.app-shell.pc .sttabs a.on { background:transparent; color:#2b6de5; border-bottom-color:#2b6de5; font-weight:600; }
.app-shell.pc .item { display:flex; flex-wrap:wrap; align-items:center; column-gap:22px; row-gap:4px; padding:12px 18px; border-radius:10px; margin-bottom:6px; }
.app-shell.pc .item .l1 { flex:1 1 36%; margin:0; }
.app-shell.pc .item .l2 { flex:1 1 26%; margin:0; }
.app-shell.pc .item .l1 .amt { margin-left:auto; text-align:right; font-variant-numeric:tabular-nums; }
/* 单号蓝链样式（普通灰徽标在 PC 列表中视为单号链接） */
.app-shell.pc .item .badge:not(.g):not(.o):not(.y) { color:#2b6de5; background:#eaf1fe; }
/* 手机端保持卡片列表：金额红字/单号灰字/状态徽标（原有 .item/.amt.out/.badge 体系不变） */

/* ---------- ⑤ 详情页：蓝色头部（合同/投标/审批详情共用，双端显示） ---------- */
.d-hero { background:linear-gradient(135deg,#1B4F8F,#2f6bc0); border-radius:12px; color:#fff; padding:18px 20px; margin-bottom:12px; }
.dh-l1 { display:flex; gap:10px; align-items:center; margin-bottom:8px; }
.dh-no { font-size:12px; background:rgba(255,255,255,.18); border-radius:6px; padding:2px 8px; font-variant-numeric:tabular-nums; }
.dh-cat { font-size:12px; background:rgba(255,255,255,.28); border-radius:6px; padding:2px 8px; font-weight:600; }
.dh-name { font-size:18px; font-weight:700; line-height:1.4; }
.dh-sub { font-size:12px; opacity:.85; margin-top:4px; }
.dh-kpis { display:flex; gap:26px; margin-top:14px; flex-wrap:wrap; }
.dhk-v { font-size:17px; font-weight:700; font-variant-numeric:tabular-nums; }
.dhk-t { font-size:11px; opacity:.82; margin-top:3px; }
.app-shell.pc .d-hero { max-width:1280px; margin:0 auto 14px; padding:22px 26px; }

/* ---------- ⑥ 报表统计分析：蓝色渐变页头（标题+项目筛选+导出） + KPI 数字卡 ---------- */
.sh-hero { background:linear-gradient(135deg,#1B4F8F,#2f6bc0); border-radius:12px; color:#fff; padding:16px 18px; margin-bottom:12px; display:flex; align-items:center; justify-content:space-between; gap:12px; flex-wrap:wrap; }
.sh-hero-l b { font-size:17px; font-weight:700; display:block; }
.sh-hero-l span { font-size:12px; opacity:.82; display:block; margin-top:3px; }
.sh-hero-r { display:flex; gap:8px; align-items:center; flex-wrap:wrap; }
.sh-sel { background:rgba(255,255,255,.16); color:#fff; border:1px solid rgba(255,255,255,.35); border-radius:8px; padding:7px 10px; font-size:13px; max-width:200px; }
.sh-sel option { color:#2b333d; }
.sh-exp { background:#fff; color:#1B4F8F; border:none; border-radius:8px; padding:8px 14px; font-size:13px; font-weight:600; }
.sh-kpis { margin-bottom:12px; }
.app-shell.pc .sh-hero { max-width:1280px; margin:0 auto 14px; padding:20px 24px; }
.app-shell.pc .sh-kpis { margin-bottom:14px; }

/* ---------- ⑦ 资金账户：蓝色渐变大卡（总余额大数字） + 统计卡 + 四色账户卡流 ---------- */
.acct-top { display:flex; flex-direction:column; gap:10px; margin-bottom:12px; }
.acct-hero { background:linear-gradient(135deg,#1B4F8F,#2f6bc0); border-radius:14px; color:#fff; padding:20px 22px; }
.ah-t { font-size:12px; opacity:.85; }
.ah-v { font-size:32px; font-weight:700; font-variant-numeric:tabular-nums; margin-top:6px; letter-spacing:.5px; }
.ah-s { font-size:11px; opacity:.78; margin-top:8px; }
.acct-stats { display:grid; grid-template-columns:repeat(3,1fr); gap:10px; }
.as-card { background:#fff; border-radius:12px; padding:13px 10px 11px; text-align:center; box-shadow:0 1px 4px rgba(20,40,80,.05); }
.as-v { font-size:19px; font-weight:700; color:#1B4F8F; font-variant-numeric:tabular-nums; }
.as-v.red { color:#d4380d; }
.as-t { font-size:11px; color:#8a94a0; margin-top:4px; }
.app-shell.pc .acct-top { flex-direction:row; max-width:1280px; margin:0 auto 14px; align-items:stretch; }
.app-shell.pc .acct-hero { flex:1.4; display:flex; flex-direction:column; justify-content:center; }
.app-shell.pc .acct-stats { flex:1; grid-template-columns:repeat(3,1fr); }
.acct-grid { display:block; }
.app-shell.pc .acct-grid { display:grid; grid-template-columns:repeat(3,1fr); gap:12px; max-width:1280px; margin:0 auto; }
.app-shell.pc .acct-grid .item { display:block; margin-bottom:0; }
/* 四色分类账户卡（一人资金池蓝/甲方绿/过账橙/其他灰）：左色条 */
.acct-card { border-left:4px solid #c4ccd6; }
.acct-card.pool-self { border-left-color:#1B4F8F; }
.acct-card.pool-client { border-left-color:#2FBF71; }
.acct-card.pool-pass { border-left-color:#FF9F43; }
.acct-card.pool-other { border-left-color:#8a94a0; }

/* ---------- ⑧ 设置 + 动态：PC 顶部横向 tab / 分组多列 / 权限矩阵横向展开 ---------- */
.app-shell.pc .tabbar2 { max-width:1280px; margin:0 auto 14px; display:flex; gap:4px; border-bottom:1px solid #e8ebef; }
.app-shell.pc .tabbar2 button { border:none; background:transparent; padding:10px 20px; font-size:14px; color:#5b6b7d; border-bottom:2px solid transparent; }
.app-shell.pc .tabbar2 button.on { color:#2b6de5; border-bottom-color:#2b6de5; font-weight:600; }
.app-shell.pc .pmod { max-width:1280px; margin:0 auto 10px; background:#fff; border-radius:12px; box-shadow:0 1px 4px rgba(20,40,80,.05); overflow:hidden; }
.app-shell.pc .pfrow { display:grid; grid-template-columns:240px 1fr; align-items:center; gap:10px; }
.app-shell.pc .modmenu { display:grid; grid-template-columns:repeat(2,1fr); gap:10px; max-width:1280px; margin:0 auto 12px; }
.app-shell.pc .modmenu .mrow { margin-bottom:0; }
.app-shell.pc .ckrow.all { max-width:1280px; margin:0 auto 10px; display:block; }
.app-shell.pc .pool { max-width:1280px; margin:0 auto 14px; }
/* 动态：PC 左菜单由 adm-shell/侧栏承担，时间线事件流居中（v1.18.0 已生效），手机保持单列事件流 */

/* ============ v1.19.1 批2收口：单据列表模块内顶部横向 tab（材料计划/采购申请…） ============ */
/* 手机：胶囊横滑 tab 条 */
.kindtabs { display:flex; gap:4px; overflow-x:auto; background:#fff; border-radius:10px; padding:4px; margin-bottom:10px; box-shadow:0 1px 4px rgba(20,40,80,.05); -webkit-overflow-scrolling:touch; }
.kindtabs a { flex:none; padding:8px 14px; font-size:13px; color:#5b6b7d; text-decoration:none; border-radius:8px; white-space:nowrap; }
.kindtabs a.on { background:#1B4F8F; color:#fff; font-weight:600; }
/* 电脑：下划线横向 tab（与单据列表 PC tab 体系一致） */
.app-shell.pc .kindtabs { background:transparent; box-shadow:none; padding:0; border-bottom:1px solid #e8ebef; border-radius:0; max-width:1280px; margin:0 auto 12px; }
.app-shell.pc .kindtabs a { border-radius:0; border-bottom:2px solid transparent; padding:9px 16px; font-size:14px; }
.app-shell.pc .kindtabs a.on { background:transparent; color:#2b6de5; border-bottom-color:#2b6de5; font-weight:600; }

/* ============ v1.20.0 批6 表单设计器（控件库+拖拽画布+属性配置三栏） ============ */
.fd-shell { max-width:1280px; margin:0 auto; }
.fd-top { display:flex; gap:10px; align-items:center; margin-bottom:10px; flex-wrap:wrap; }
.fd-name { flex:1; min-width:180px; background:#fff; border:1px solid #e2e8f0; border-radius:10px; padding:10px 12px; font-size:15px; font-weight:600; }
.fd-topbtns { display:flex; gap:6px; flex-wrap:wrap; }
.fd-io { background:#fff; border-radius:12px; padding:12px; margin-bottom:10px; box-shadow:0 1px 4px rgba(20,40,80,.05); }
.fd-io textarea { width:100%; border:1px solid #e2e8f0; border-radius:8px; padding:8px; font-size:12px; font-family:monospace; }
.fd-saved { margin-bottom:10px; font-size:13px; display:flex; gap:10px; flex-wrap:wrap; align-items:center; }
.fd-saved a { color:#2b6de5; text-decoration:none; }
/* v1.26.0 V-009：引擎表单 chip + 删除钮 */
.fd-svchip { display:inline-flex; align-items:center; gap:2px; background:#eef4ff; border:1px solid #d6e4ff; border-radius:14px; padding:2px 6px 2px 10px; }
.fd-svchip .fd-svdel { color:#98a1ad; font-size:11px; padding:0 3px; }
.fd-svchip .fd-svdel:hover { color:#d4380d; }
.fd-motabs { display:flex; background:#fff; border-radius:10px; padding:4px; margin-bottom:10px; box-shadow:0 1px 4px rgba(20,40,80,.05); }
.fd-motabs a { flex:1; text-align:center; padding:8px 0; font-size:13px; color:#8a94a0; border-radius:8px; cursor:pointer; }
.fd-motabs a.on { background:#1B4F8F; color:#fff; font-weight:600; }
.fd-body { display:block; }
/* 控件库 */
.fd-palette { background:#fff; border-radius:12px; padding:12px; margin-bottom:10px; box-shadow:0 1px 4px rgba(20,40,80,.05); }
.fd-ptitle { font-size:13px; font-weight:600; color:#8a94a0; margin:10px 2px 8px; }
.fd-pgrid { display:grid; grid-template-columns:repeat(3,1fr); gap:8px; }
.fd-pcell { border:1px solid #e8ebef; border-radius:10px; padding:10px 4px; text-align:center; cursor:grab; background:#fafbfc; user-select:none; }
.fd-pcell:active { cursor:grabbing; }
.fd-pcell:hover { border-color:#2b6de5; background:#f2f7ff; }
.fd-pcell.adv { border-style:dashed; }
.fd-pico { display:block; font-size:18px; margin-bottom:4px; }
.fd-pcn { font-size:12px; color:#2b333d; }
.fd-phint { font-size:11px; color:#aab2bc; margin-top:10px; }
/* 画布 */
.fd-canvas { background:#f4f6f9; border-radius:12px; padding:12px; min-height:300px; }
.fd-cvtitle { font-size:15px; font-weight:700; margin-bottom:10px; }
.fd-cvtitle .dim { font-weight:400; font-size:12px; margin-left:8px; }
.fd-cvempty { border:2px dashed #d5dce6; border-radius:12px; text-align:center; color:#aab2bc; padding:48px 0; font-size:13px; }
.fd-cvempty.hot { border-color:#2b6de5; color:#2b6de5; }
.fd-dropline { height:8px; border-radius:4px; transition:background .12s; }
.fd-dropline.hot { background:#2b6de5; height:4px; margin:2px 0; }
.fd-field { background:#fff; border:1px solid #e8ebef; border-radius:10px; padding:10px 12px; cursor:pointer; }
.fd-field.sel { border-color:#2b6de5; box-shadow:0 0 0 2px rgba(43,109,229,.15); }
.fd-fl1 { display:flex; align-items:center; gap:6px; }
.fd-freq { color:#d4380d; font-weight:700; }
.fd-flabel { font-size:14px; font-weight:600; flex:1; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.fd-ftype { font-size:11px; color:#8a94a0; background:#f0f2f5; border-radius:5px; padding:1px 7px; }
.fd-fops { display:flex; gap:8px; }
.fd-fops a { color:#8a94a0; text-decoration:none; font-size:13px; }
.fd-fmock { margin-top:6px; }
.fd-mock { background:#f8fafc; border:1px solid #eef1f5; border-radius:8px; padding:8px 10px; font-size:12px; color:#aab2bc; }
.fd-mock.ta { min-height:44px; }
.fd-mock.tbl { color:#5b6b7d; }
/* 属性面板 */
.fd-props { background:#fff; border-radius:12px; padding:12px; box-shadow:0 1px 4px rgba(20,40,80,.05); }
.fd-prow { display:flex; align-items:flex-start; gap:10px; padding:9px 0; border-bottom:1px solid #f0f2f5; }
.fd-prow:last-child { border-bottom:none; }
.fd-prow label { width:80px; flex-shrink:0; font-size:13px; color:#555; padding-top:7px; }
.fd-prow input,.fd-prow select,.fd-prow textarea { flex:1; border:1px solid #e2e8f0; border-radius:8px; padding:7px 10px; font-size:13px; }
.fd-pempty { text-align:center; color:#aab2bc; font-size:13px; padding:36px 0; }
/* 预览 */
.fd-preview .fd-pvhead { font-size:16px; font-weight:700; margin-bottom:10px; }
.fd-preview .fd-pvhead .dim { font-size:12px; font-weight:400; margin-left:8px; }
/* PC：三栏同屏 */
.app-shell.pc .fd-body { display:grid; grid-template-columns:250px 1fr 290px; gap:14px; align-items:start; }
.app-shell.pc .fd-motabs { display:none; }
.app-shell.pc .fd-palette,.app-shell.pc .fd-props { margin-bottom:0; position:sticky; top:0; max-height:calc(100vh - 140px); overflow-y:auto; }
.app-shell.pc .fd-pgrid { grid-template-columns:repeat(2,1fr); }
.app-shell.pc .fd-canvas { min-height:calc(100vh - 140px); }
.app-shell.pc .fd-preview { max-width:900px; margin:0 auto; }

/* ============ v1.21.0 批9 AI 三助手（入口+结果卡） ============ */
.ai-tabs { display:flex; gap:8px; margin-bottom:12px; }
.ai-tabs a { flex:1; text-align:center; background:#fff; border-radius:12px; padding:13px 0; font-size:14px; font-weight:600; color:#5b6b7d; text-decoration:none; box-shadow:0 1px 4px rgba(20,40,80,.05); }
.ai-tabs a.on { background:linear-gradient(135deg,#1B4F8F,#2f6bc0); color:#fff; }
.ai-capgrid { display:grid; grid-template-columns:1fr; gap:10px; margin-bottom:12px; }
.app-shell.pc .ai-capgrid { grid-template-columns:repeat(3,1fr); max-width:1280px; margin:0 auto 14px; }
.ai-cap { background:#fff; border-radius:12px; padding:16px 14px; box-shadow:0 1px 4px rgba(20,40,80,.05); display:flex; flex-direction:column; gap:8px; }
.ai-capico { font-size:26px; }
.ai-capt { font-size:15px; font-weight:700; }
.ai-capd { font-size:12px; color:#8a94a0; line-height:1.5; flex:1; }
.ai-cap .btn { align-self:flex-start; }
.ai-capbtns { display:flex; gap:8px; }
.ai-capbtns .btn { text-decoration:none; text-align:center; }
.ai-sel { border:1px solid #e2e8f0; border-radius:8px; padding:8px 10px; font-size:13px; width:100%; }
/* 结果卡 */
.ai-card { background:#fff; border-radius:12px; padding:14px 16px; margin-bottom:10px; box-shadow:0 1px 4px rgba(20,40,80,.05); border-left:4px solid #2FBF71; }
.ai-card.warn { border-left-color:#FF9F43; }
.ai-card.err { border-left-color:#d4380d; }
.app-shell.pc .ai-card { max-width:1280px; margin-left:auto; margin-right:auto; }
.ai-chead { display:flex; justify-content:space-between; align-items:center; gap:10px; margin-bottom:8px; }
.ai-chead b { font-size:15px; }
.ai-verdict { font-size:12px; font-weight:600; border-radius:6px; padding:2px 10px; background:#e7f6ec; color:#0a8a3a; white-space:nowrap; }
.ai-verdict.warn { background:#fff3e3; color:#b07d10; }
.ai-verdict.err { background:#fdecea; color:#d4380d; }
.ai-cline { font-size:13px; color:#2b333d; line-height:1.7; }
.ai-cbasis { margin-top:8px; background:#f8fafc; border-radius:8px; padding:8px 10px; font-size:12px; color:#8a94a0; line-height:1.6; }
.ai-cfoot { display:flex; justify-content:space-between; margin-top:8px; font-size:11px; color:#aab2bc; }
.ai-cfoot a { color:#2b6de5; text-decoration:none; font-size:12px; }

/* ============ v1.22.0 批10 平台能力（OpenAPI/OCR/智慧大屏） ============ */
.oa-doc { background:linear-gradient(135deg,#1B4F8F,#2f6bc0); color:#fff; border-radius:12px; padding:14px 16px; margin-bottom:12px; font-size:13px; line-height:1.7; }
.oa-doc code { background:rgba(255,255,255,.18); border-radius:5px; padding:1px 6px; font-size:12px; }
.oa-doc .dim { color:rgba(255,255,255,.75); font-size:12px; }
.oa-newkey { background:#fff8e6; border:1px solid #ffe1a1; border-radius:12px; padding:14px 16px; margin-bottom:12px; font-size:13px; }
.oa-keytxt { font-family:monospace; font-size:14px; background:#fff; border:1px dashed #e8b04a; border-radius:8px; padding:10px 12px; margin:8px 0; word-break:break-all; cursor:pointer; color:#1B4F8F; font-weight:600; }
.app-shell.pc .oa-doc,.app-shell.pc .oa-newkey { max-width:1280px; margin-left:auto; margin-right:auto; }
/* OCR */
.ocr-shot { margin-bottom:10px; }
.ocr-shot img { width:100%; max-width:480px; border-radius:12px; display:block; }
.ocr-card { background:#fff; border-radius:12px; padding:14px; margin-bottom:12px; box-shadow:0 1px 4px rgba(20,40,80,.05); }
.ocr-chead { display:flex; justify-content:space-between; align-items:center; margin-bottom:10px; }
.ocr-chead b { font-size:15px; }
.ocr-badges { display:flex; gap:8px; margin:10px 0; flex-wrap:wrap; }
.app-shell.pc .ocr-card { max-width:900px; margin:0 auto 14px; }
/* 智慧大屏（暗色，双端自适应） */
.screen-shell { background:#0b1526; color:#dfe8f5; border-radius:14px; padding:18px 16px 12px; min-height:80vh; }
.app-shell.pc .screen-shell { max-width:1440px; margin:0 auto; padding:24px 28px 16px; }
.sc-head { display:flex; justify-content:space-between; align-items:center; border-bottom:1px solid rgba(120,160,220,.18); padding-bottom:12px; margin-bottom:14px; flex-wrap:wrap; gap:6px; }
.sc-title { font-size:17px; font-weight:700; letter-spacing:1px; color:#7fb3ff; }
.app-shell.pc .sc-title { font-size:22px; }
.sc-clock { font-size:13px; color:#5f7ba6; font-variant-numeric:tabular-nums; }
.sc-kpis { display:grid; grid-template-columns:repeat(3,1fr); gap:10px; margin-bottom:14px; }
.app-shell.pc .sc-kpis { grid-template-columns:repeat(6,1fr); }
.sc-kpi { background:rgba(38,78,140,.22); border:1px solid rgba(96,140,210,.22); border-radius:10px; padding:12px 8px; text-align:center; }
.sc-kv { font-size:19px; font-weight:700; color:#7fb3ff; font-variant-numeric:tabular-nums; }
.app-shell.pc .sc-kv { font-size:24px; }
.sc-kv.g { color:#3ddc97; } .sc-kv.o { color:#ffb054; } .sc-kv.b { color:#58a6ff; } .sc-kv.y { color:#ffd966; }
.sc-kt { font-size:11px; color:#7d93b8; margin-top:4px; }
.sc-grid { display:grid; grid-template-columns:1fr; gap:12px; }
.app-shell.pc .sc-grid { grid-template-columns:1fr 1fr; }
.sc-panel { background:rgba(28,58,108,.20); border:1px solid rgba(96,140,210,.18); border-radius:12px; padding:14px; }
.sc-ptitle { font-size:13px; font-weight:600; color:#7fb3ff; margin-bottom:10px; }
.sc-poolrow { display:flex; align-items:center; gap:10px; font-size:13px; padding:6px 0; }
.sc-poolrow span { width:76px; flex:none; color:#9db4d6; }
.sc-poolrow b { width:90px; flex:none; text-align:right; font-variant-numeric:tabular-nums; }
.sc-bar { flex:1; height:8px; background:rgba(96,140,210,.15); border-radius:4px; overflow:hidden; }
.sc-bar i { display:block; height:100%; background:linear-gradient(90deg,#2f6bc0,#58a6ff); border-radius:4px; }
.sc-feedrow,.sc-prow { font-size:12px; color:#9db4d6; padding:5px 0; border-bottom:1px dashed rgba(120,160,220,.12); line-height:1.5; }
.sc-feedrow b { color:#dfe8f5; }
.sc-prow { display:flex; justify-content:space-between; }
.sc-pname { color:#dfe8f5; }
.sc-dim { color:#5f7ba6; font-size:11px; }
.sc-warnrow { display:flex; align-items:center; gap:8px; font-size:12px; padding:6px 0; border-bottom:1px dashed rgba(120,160,220,.12); }
.sc-wtype { flex:none; font-size:11px; border-radius:5px; padding:1px 7px; }
.sc-wtype.r { background:rgba(255,90,95,.2); color:#ff8a8e; }
.sc-wtype.o { background:rgba(255,159,67,.2); color:#ffb054; }
.sc-wtype.y { background:rgba(255,217,102,.18); color:#ffd966; }
.sc-wtitle { flex:1; color:#dfe8f5; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.sc-wamt { color:#ffb054; font-variant-numeric:tabular-nums; }
.sc-ok { color:#3ddc97; font-size:13px; padding:16px 0; text-align:center; }
.sc-foot { text-align:center; font-size:11px; color:#4d6588; margin-top:14px; }

/* ============ v1.23.0 批4 字段脱敏 + 主子项目树视图 ============ */
.mask-eye { text-decoration:none; font-size:12px; margin-left:4px; opacity:.75; }
.mask-eye:active { opacity:1; }
.pj-treehead { display:flex; justify-content:space-between; align-items:center; padding:10px 12px; font-size:12px; }
.pj-treehead .dim { color:#8a94a0; }
.pj-treeall { color:#2b6de5; text-decoration:none; font-size:12px; flex:none; margin-left:10px; }
.pj-treerow { display:flex; align-items:center; gap:6px; background:#fff; border-bottom:1px solid #f0f2f5; padding:11px 12px 11px 12px; cursor:pointer; flex-wrap:wrap; }
.pj-treerow:active { background:#f6f8fb; }
.pj-treearr { width:16px; flex:none; color:#2b6de5; font-size:13px; text-decoration:none; text-align:center; }
.pj-treearr.leaf { color:#c4ccd6; }
.pj-treename { font-size:14px; font-weight:600; color:#2b333d; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; max-width:46%; }
.pj-treename.root { color:#1B4F8F; }
.pj-treenum { margin-left:auto; display:flex; flex-direction:column; align-items:flex-end; font-size:11px; color:#5b6b7d; line-height:1.5; }
.pj-treenum .dim { color:#aab2bc; }
.pj-treeagg { color:#1B4F8F; font-weight:600; }
.app-shell.pc .pj-treerow { max-width:1100px; margin:0 auto; }
.app-shell.pc .pj-treehead { max-width:1100px; margin:0 auto; }

/* ============ v1.24.0 批9 经营管理AI（驾驶舱/问答/报告） ============ */
.ck-shell { max-width:1280px; margin:0 auto; }
.ck-head { display:flex; justify-content:space-between; align-items:flex-start; margin-bottom:12px; gap:10px; }
.ck-title { font-size:19px; font-weight:700; color:#1B4F8F; }
.ck-sub { font-size:12px; color:#8a94a0; margin-top:3px; }
.ck-kpis { display:grid; grid-template-columns:repeat(2,1fr); gap:10px; margin-bottom:12px; }
.app-shell.pc .ck-kpis { grid-template-columns:repeat(4,1fr); }
.ck-kpi { background:linear-gradient(135deg,#1B4F8F,#2f6bc0); border-radius:12px; padding:14px 12px; text-align:center; color:#fff; }
.ck-kv { font-size:20px; font-weight:700; font-variant-numeric:tabular-nums; }
.ck-kv.neg { color:#ffb3ab; }
.ck-kt { font-size:11px; opacity:.8; margin-top:4px; }
/* 智能问答框 */
.ck-qa { background:#fff; border-radius:12px; padding:14px; margin-bottom:12px; box-shadow:0 1px 4px rgba(20,40,80,.05); }
.ck-qatitle { font-size:15px; font-weight:700; margin-bottom:10px; }
.ck-qatitle .ck-dim { font-size:11px; color:#aab2bc; font-weight:400; margin-left:8px; }
.ck-qalist { max-height:360px; overflow-y:auto; margin-bottom:10px; }
.ck-qamsg { display:flex; margin-bottom:8px; }
.ck-qamsg.user { justify-content:flex-end; }
.ck-qabubble { max-width:88%; border-radius:12px; padding:10px 12px; background:#f2f5f9; }
.ck-qamsg.user .ck-qabubble { background:#dcebff; }
.ck-qatext { font-size:13px; line-height:1.7; color:#2b333d; white-space:pre-wrap; }
.ck-qadata { margin-top:6px; background:#fff; border-radius:8px; padding:8px 10px; font-size:12px; color:#5b6b7d; line-height:1.7; }
.ck-qafoot { margin-top:6px; font-size:10px; color:#aab2bc; }
.ck-qachips { display:flex; gap:6px; flex-wrap:wrap; margin-bottom:10px; }
.ck-qachips a { font-size:12px; color:#2b6de5; background:#eef4fd; border-radius:14px; padding:4px 12px; text-decoration:none; }
.ck-qainput { display:flex; gap:8px; }
.ck-qainput input { flex:1; border:1px solid #e2e8f0; border-radius:10px; padding:10px 12px; font-size:14px; }
/* AI 三卡 */
.ck-grid { display:grid; grid-template-columns:1fr; gap:12px; }
.app-shell.pc .ck-grid { grid-template-columns:repeat(3,1fr); }
.ck-card { background:#fff; border-radius:12px; padding:14px; box-shadow:0 1px 4px rgba(20,40,80,.05); }
.ck-ctitle { font-size:14px; font-weight:700; margin-bottom:8px; display:flex; align-items:center; gap:8px; }
.ck-engine { font-size:10px; font-weight:400; color:#0a8a3a; background:#e7f6ec; border-radius:5px; padding:1px 7px; }
.ck-aitext { font-size:13px; color:#2b333d; line-height:1.7; white-space:pre-wrap; margin-bottom:8px; }
.ck-rows { border-top:1px dashed #eef1f5; padding-top:8px; }
.ck-row { display:flex; justify-content:space-between; gap:8px; font-size:12px; color:#5b6b7d; padding:4px 0; align-items:center; }
.ck-rname { flex:1; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.ck-neg { color:#d4380d; }
.ck-rb { font-size:10px; border-radius:5px; padding:1px 7px; background:#f0f2f5; color:#5b6b7d; flex:none; }
.ck-rb.high { background:#fdecea; color:#d4380d; }
.ck-rb.mid { background:#fff3e3; color:#b07d10; }
.ck-riskstat { display:flex; gap:8px; margin-bottom:8px; }
.ck-trend { display:flex; gap:6px; align-items:flex-end; padding-top:10px; }
.ck-tcell { flex:1; display:flex; flex-direction:column; align-items:center; gap:3px; }
.ck-tcell i { width:100%; max-width:26px; background:#2f6bc0; border-radius:3px 3px 0 0; display:block; }
.ck-tcell i.neg { background:#d4380d; }
.ck-tcell em { font-size:10px; color:#aab2bc; font-style:normal; }
/* 经营报告 */
.ck-note { background:#fff8e6; border:1px solid #ffe1a1; border-radius:10px; padding:12px 14px; font-size:12px; color:#7a6210; margin-bottom:12px; line-height:1.6; }
.ck-rptsec { background:#fff; border-radius:12px; padding:14px 16px; margin-bottom:12px; box-shadow:0 1px 4px rgba(20,40,80,.05); }
.ck-rpttitle { font-size:15px; font-weight:700; color:#1B4F8F; margin-bottom:8px; }
.ck-rptline { font-size:13px; color:#2b333d; line-height:1.8; }

/* ============ v1.25.0 批10 IoT 页 + 大屏项目级穿透 ============ */
.iot-shell { max-width:1100px; margin:0 auto; }
.iot-tabs { display:flex; gap:8px; margin-bottom:12px; }
.iot-tabs a { flex:1; text-align:center; background:#fff; border-radius:12px; padding:12px 0; font-size:14px; font-weight:600; color:#5b6b7d; text-decoration:none; box-shadow:0 1px 4px rgba(20,40,80,.05); }
.iot-tabs a.on { background:linear-gradient(135deg,#1B4F8F,#2f6bc0); color:#fff; }
.iot-stat { display:grid; grid-template-columns:repeat(4,1fr); gap:10px; margin-bottom:12px; }
.iot-scell { background:#fff; border-radius:12px; padding:14px 6px; text-align:center; box-shadow:0 1px 4px rgba(20,40,80,.05); }
.iot-sv { font-size:20px; font-weight:700; color:#1B4F8F; font-variant-numeric:tabular-nums; }
.iot-st { font-size:11px; color:#8a94a0; margin-top:4px; }
.iot-card { background:#fff; border-radius:12px; padding:14px 16px; margin-bottom:10px; box-shadow:0 1px 4px rgba(20,40,80,.05); }
.iot-chead { display:flex; justify-content:space-between; align-items:center; margin-bottom:8px; }
.iot-chead b { font-size:15px; }
.iot-crow { display:flex; justify-content:space-between; gap:10px; font-size:13px; color:#5b6b7d; padding:5px 0; border-bottom:1px dashed #f0f2f5; }
.iot-crow:last-child { border-bottom:none; }
.iot-crow .dim { color:#aab2bc; font-size:12px; }
.iot-pending { border:1px dashed #e8b04a; background:#fffdf6; }
.iot-grouprow { display:flex; align-items:center; gap:10px; font-size:13px; padding:6px 0; }
.iot-gname { width:90px; flex:none; color:#5b6b7d; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.iot-gbar { flex:1; height:8px; background:#f0f2f5; border-radius:4px; overflow:hidden; }
.iot-gbar i { display:block; height:100%; background:linear-gradient(90deg,#2f6bc0,#58a6ff); border-radius:4px; }
.iot-envgrid { display:grid; grid-template-columns:repeat(3,1fr); gap:10px; }
.app-shell.pc .iot-envgrid { grid-template-columns:repeat(6,1fr); }
.iot-envcell { background:#fff; border-radius:12px; padding:16px 8px; text-align:center; box-shadow:0 1px 4px rgba(20,40,80,.05); }
.iot-ev { font-size:20px; font-weight:700; color:#c4ccd6; }
.iot-ek { font-size:12px; color:#5b6b7d; margin-top:4px; }
.iot-eu { font-size:10px; color:#aab2bc; margin-top:2px; }
/* 大屏穿透 */
.sc-prow.sc-link { cursor:pointer; }
.sc-prow.sc-link:hover { background:rgba(96,140,210,.12); border-radius:6px; }
.sc-back { color:#7fb3ff; text-decoration:none; font-size:13px; }
.sc-engine { font-size:10px; font-weight:400; color:#3ddc97; background:rgba(61,220,151,.12); border-radius:5px; padding:1px 7px; margin-left:8px; }
.sc-aitext { font-size:13px; color:#c8d6ea; line-height:1.8; white-space:pre-wrap; }
.sc-cam { display:grid; grid-template-columns:repeat(2,1fr); gap:8px; }
.sc-camcell { background:rgba(20,44,84,.5); border:1px solid rgba(96,140,210,.18); border-radius:8px; padding:16px 8px; text-align:center; }
.sc-camoff { font-size:22px; opacity:.4; }
.sc-camtxt { font-size:11px; color:#5f7ba6; margin-top:6px; }
.sc-envrow { display:flex; justify-content:space-between; gap:10px; font-size:12px; color:#9db4d6; padding:6px 0; border-bottom:1px dashed rgba(120,160,220,.12); }

/* ============ v1.26.0 批3+批7：快捷推单/审批超时催办/资金批复/自定义中心二期 ============ */
/* 批3① 合同详情快捷推单条 */
.qpush { display:grid; grid-template-columns:repeat(4,1fr); gap:8px; margin-bottom:12px; }
.qpush a { background:#fff; border-radius:10px; padding:12px 4px; text-align:center; font-size:13px;
  font-weight:600; color:#1B4F8F; text-decoration:none; box-shadow:0 1px 4px rgba(20,40,80,.05);
  border:1px solid #e6eefb; }
.qpush a:active { background:#f2f7ff; }
.app-shell.pc .qpush { max-width:900px; margin:0 auto 14px; }
.exec-focus { outline:2px solid #2b6de5; outline-offset:2px; border-radius:12px;
  animation: execpulse 1.2s ease-in-out 2; }
@keyframes execpulse { 50% { outline-color:#9dc0f5; } }
/* 批3② 审批超时/转办/催办展示 */
.wfk { font-size:10px; color:#2b6de5; background:#eef4fd; border-radius:5px; padding:1px 7px; margin-left:6px; }
.wfk.transfer { color:#b07d10; background:#fff3e3; }
.wfstayline { margin-top:4px; }
.wfstay { font-size:12px; color:#8a94a0; }
.wfstay.lv1 { color:#b07d10; font-weight:600; }
.wfstay.lv2 { color:#d4380d; font-weight:700; }
.wfurge { text-align:center; font-size:12px; color:#8a94a0; margin:-6px 0 10px; }
.wfurge .dim { color:#aab2bc; }
/* 批3③ 资金计划批复面板 */
.fpappr-info { background:#f8fafc; border-radius:10px; padding:10px 12px; margin-bottom:10px; }
.fpi-row { display:flex; justify-content:space-between; gap:10px; font-size:13px; padding:4px 0; }
.fpi-row .dim { color:#8a94a0; flex:none; }
.fpi-row b { text-align:right; }
/* 批7 自定义中心二期共用 */
.cd7-shell { max-width:1100px; margin:0 auto; }
.cd7-hero { background:linear-gradient(135deg,#1B4F8F,#2f6bc0); color:#fff; border-radius:12px;
  padding:14px 16px; margin-bottom:12px; }
.cd7-title { font-size:17px; font-weight:700; }
.cd7-sub { font-size:12px; opacity:.8; margin-top:3px; }
.cd7-bar { display:flex; gap:8px; margin-bottom:12px; align-items:center; flex-wrap:wrap; }
.cd7-bar select { flex:1; min-width:200px; border:1px solid #e2e8f0; border-radius:10px;
  padding:10px 12px; font-size:14px; background:#fff; }
.cd7-grid2 { display:grid; grid-template-columns:1fr; gap:12px; }
.app-shell.pc .cd7-grid2 { grid-template-columns:1fr 1fr; }
.cd7-panel { background:#fff; border-radius:12px; padding:14px; box-shadow:0 1px 4px rgba(20,40,80,.05); }
.cd7-ptitle { font-size:14px; font-weight:700; margin-bottom:10px; }
.cd7-row { display:flex; align-items:center; gap:8px; padding:7px 0; border-bottom:1px solid #f5f7fa; flex-wrap:wrap; }
.cd7-row:last-child { border-bottom:none; }
.cd7-fname { font-size:13px; color:#2b333d; }
.cd7-inp { flex:1; min-width:120px; border:1px solid #e2e8f0; border-radius:8px; padding:8px 10px; font-size:13px; }
.cd7-opsel { border:1px solid #e2e8f0; border-radius:8px; padding:6px 8px; font-size:12px; background:#fff; }
.cd7-qbar { display:flex; gap:8px; flex-wrap:wrap; margin-bottom:10px; }
.cd7-qcell { background:#eef4fd; color:#1B4F8F; border-radius:8px; padding:6px 12px; font-size:12px; }
.cd7-table { border:1px solid #eef1f5; border-radius:10px; overflow:hidden; }
.cd7-tr { display:flex; }
.cd7-tr span { flex:1; padding:9px 10px; font-size:13px; border-bottom:1px solid #f5f7fa;
  overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.cd7-tr.head span { background:#f8fafc; font-weight:700; color:#5b6b7d; font-size:12px; }
.cd7-tr:last-child span { border-bottom:none; }
/* 流程节点链 */
.cd7-flownode { display:flex; gap:10px; margin-bottom:10px; }
.cd7-fnseq { width:28px; height:28px; flex:none; border-radius:50%; background:#1B4F8F; color:#fff;
  display:flex; align-items:center; justify-content:center; font-size:13px; font-weight:700; margin-top:6px; }
.cd7-fnbody { flex:1; background:#f8fafc; border-radius:10px; padding:8px 10px; }
.cd7-flowline { display:flex; align-items:center; gap:6px; flex-wrap:wrap; }
.cd7-flowline i { color:#aab2bc; font-style:normal; }
.cd7-fchip { background:#eef4fd; color:#1B4F8F; border-radius:8px; padding:7px 12px; font-size:12px; font-weight:600; }
.cd7-fchip em { font-style:normal; font-weight:400; color:#8a94a0; margin-left:5px; font-size:11px; }
.cd7-fchip.start { background:#e7f6ec; color:#0a8a3a; }
.cd7-fchip.end { background:#f0f2f5; color:#5b6b7d; }
/* 报表预览 */
.cd7-bars { display:flex; align-items:flex-end; gap:14px; height:140px; padding:10px 20px 0; }
.cd7-bar2 { flex:1; display:flex; flex-direction:column; align-items:center; gap:4px; height:100%; justify-content:flex-end; }
.cd7-bar2 i { width:100%; max-width:44px; background:linear-gradient(180deg,#58a6ff,#2f6bc0); border-radius:4px 4px 0 0; display:block; }
.cd7-bar2 em { font-size:11px; color:#8a94a0; font-style:normal; }
.cd7-pie { padding:10px; }
.cd7-piecircle { width:120px; height:120px; border-radius:50%; margin:6px auto 10px;
  background:conic-gradient(#2f6bc0 0 40%, #58a6ff 40% 65%, #9dc0f5 65% 85%, #dbe9fb 85% 100%); }

/* ================= v1.26.0 批8：模板中心 / 打印设计 / 移动端设置 / 帮助中心 ================= */
/* —— 模板中心 —— */
.tc-bar { display:flex; gap:8px; margin-bottom:8px; }
.tc-q { flex:1; background:#fff; border:1px solid #e2e8f0; border-radius:10px; padding:10px 12px; font-size:14px; }
.tc-cat { background:#fff; border:1px solid #e2e8f0; border-radius:10px; padding:0 10px; font-size:13px; }
.tc-grid { display:grid; grid-template-columns:1fr; gap:10px; }
.tc-card { background:#fff; border-radius:12px; padding:12px; box-shadow:0 1px 4px rgba(20,40,80,.05); }
.tc-chead { display:flex; gap:10px; align-items:center; }
.tc-ico { font-size:26px; }
.tc-ct { flex:1; display:flex; flex-direction:column; }
.tc-ct b { font-size:15px; }
.tc-ct .dim { font-size:12px; }
.tc-cdesc { font-size:13px; color:#5b6672; margin:8px 0; }
.tc-fields { display:flex; flex-wrap:wrap; gap:6px; margin-bottom:8px; }
.tc-fchip { background:#f2f6fc; border-radius:10px; padding:2px 8px; font-size:12px; color:#33465e; }
.tc-fchip i { color:#d4380d; font-style:normal; }
.tc-cops { display:flex; justify-content:space-between; align-items:center; }
.tc-cops a { color:#2b6de5; font-size:13px; text-decoration:none; }
/* —— 打印模板设计器 —— */
.pd-shell { display:block; }
.pd-conf { background:#fff; border-radius:12px; padding:12px; margin-bottom:10px; box-shadow:0 1px 4px rgba(20,40,80,.05); }
.pd-fchips { display:flex; flex-wrap:wrap; gap:6px; margin-bottom:8px; }
.pd-fchips a { background:#eef4ff; border:1px solid #d6e4ff; color:#2b6de5; border-radius:12px; padding:3px 10px; font-size:12px; text-decoration:none; }
.pd-fchips a.off { background:#f4f5f7; border-color:#e2e8f0; color:#98a1ad; text-decoration:line-through; }
.pd-sheet { background:#e8edf4; border-radius:12px; padding:16px; overflow-x:auto; }
.pd-paper { background:#fff; width:100%; max-width:794px; margin:0 auto; padding:32px 36px; box-shadow:0 2px 12px rgba(20,40,80,.15); color:#111; font-size:13px; }
.pd-ptitle { text-align:center; font-size:22px; font-weight:700; margin-bottom:4px; }
.pd-psub { text-align:center; font-size:13px; color:#555; margin-bottom:14px; }
.pd-pno { text-align:right; font-size:12px; color:#555; margin-bottom:6px; }
.pd-grid { width:100%; border-collapse:collapse; margin-bottom:8px; }
.pd-grid th, .pd-grid td { border:1px solid #333; padding:6px 8px; text-align:left; font-weight:normal; font-size:12.5px; }
.pd-grid th { background:#f2f2f2; width:16%; color:#000; }
.pd-subtbl { margin-top:12px; }
.pd-stt { font-weight:700; margin-bottom:4px; }
.pd-pfooter { margin-top:26px; font-size:13px; }
.pd-empty { background:#fff; border-radius:12px; padding:60px 20px; text-align:center; color:#98a1ad; }
/* —— 移动端设置 —— */
.ms-shell { display:block; }
.ms-conf { background:#fff; border-radius:12px; padding:12px; margin-bottom:10px; box-shadow:0 1px 4px rgba(20,40,80,.05); }
.ms-frow { display:flex; align-items:center; padding:8px 4px; border-bottom:1px solid #f0f3f8; font-size:14px; }
.ms-frow.off { opacity:.45; }
.ms-fl { flex:1; }
.ms-fops { display:flex; gap:8px; }
.ms-fops a { color:#2b6de5; text-decoration:none; font-size:13px; min-width:20px; text-align:center; }
.ms-fops a.on { background:#1B4F8F; color:#fff; border-radius:6px; padding:0 4px; }
.ms-group { border:1px dashed #d6e4ff; border-radius:10px; padding:10px; margin-bottom:8px; }
.ms-ghead { display:flex; gap:10px; align-items:center; margin-bottom:8px; font-size:14px; }
.ms-ghead a { margin-left:auto; font-size:13px; text-decoration:none; }
.ms-preview { display:flex; justify-content:center; }
.ms-phone { width:300px; background:#fff; border:8px solid #22314a; border-radius:28px; overflow:hidden; box-shadow:0 4px 16px rgba(20,40,80,.2); }
.ms-phead { background:#1B4F8F; color:#fff; text-align:center; padding:10px; font-size:14px; font-weight:600; }
.ms-pbody { max-height:420px; overflow-y:auto; padding:10px; }
.ms-pfield { margin-bottom:10px; }
.ms-pfield label { font-size:12px; color:#5b6672; display:block; margin-bottom:2px; }
.ms-pfield.ro label::after { content:"（只读）"; color:#98a1ad; font-size:11px; }
.ms-pmock { background:#f6f8fb; border-radius:6px; padding:7px 8px; font-size:12px; color:#98a1ad; }
.ms-phone.compact .ms-pfield { margin-bottom:4px; }
.ms-phone.compact .ms-pmock { padding:4px 8px; }
.ms-ttag { background:#fff7e6; color:#b25d09; font-size:10px; border-radius:4px; padding:0 4px; margin-left:4px; }
.ms-pgroup { border-top:1px solid #eef1f6; margin-top:8px; padding-top:6px; }
.ms-pgt { font-size:12px; font-weight:600; color:#33465e; margin-bottom:6px; }
.ms-pfoot { background:#1B4F8F; color:#fff; text-align:center; padding:10px; font-size:14px; }
/* —— 帮助中心 —— */
.hp-search { display:flex; gap:8px; margin-bottom:12px; }
.hp-search input { flex:1; background:#fff; border:1px solid #e2e8f0; border-radius:10px; padding:10px 12px; font-size:14px; }
.hp-shell { display:block; }
.hp-cats { display:flex; gap:8px; overflow-x:auto; margin-bottom:10px; }
.hp-cats a { background:#fff; border-radius:10px; padding:10px 14px; font-size:14px; color:#33465e; text-decoration:none; white-space:nowrap; box-shadow:0 1px 4px rgba(20,40,80,.05); display:flex; gap:8px; align-items:center; }
.hp-cats a.on { background:#1B4F8F; color:#fff; }
.hp-cats a.on .dim { color:#cfe0f5; }
.hp-art { background:#fff; border-radius:12px; padding:16px; box-shadow:0 1px 4px rgba(20,40,80,.05); }
.hp-ahead { display:flex; gap:12px; align-items:center; margin-bottom:8px; }
.hp-ahead a { color:#2b6de5; text-decoration:none; font-size:14px; }
.hp-ahead b { font-size:17px; }
.hp-acontent { font-size:14px; line-height:1.8; color:#2b3440; }
.hp-acontent h3 { font-size:16px; margin:12px 0 8px; }
.hp-acontent ol, .hp-acontent ul { padding-left:20px; }
/* —— PC 双栏（≥768px） —— */
@media (min-width:768px) {
  .tc-grid { grid-template-columns:repeat(2,1fr); }
  .pd-shell { display:grid; grid-template-columns:340px 1fr; gap:12px; }
  .pd-conf { margin-bottom:0; }
  .ms-shell { display:grid; grid-template-columns:1fr 340px; gap:12px; }
  .ms-conf { margin-bottom:0; }
  .hp-shell { display:grid; grid-template-columns:220px 1fr; gap:12px; }
  .hp-cats { flex-direction:column; overflow-x:visible; }
}
@media (min-width:1200px) {
  .tc-grid { grid-template-columns:repeat(3,1fr); }
}

/* ================= v1.27.0 第八批：13条排版清零（钉钉双端，.app-shell.pc 口径） ================= */

/* —— V-002 双端详情页：.d-hero 与 .pd-banner 归一单一蓝头规格（同渐变/同圆角/同 padding） —— */
.d-hero, .pd-banner { background:linear-gradient(135deg,#1B4F8F,#2f6bc0); border-radius:12px; color:#fff; padding:16px; margin-bottom:12px; }
.app-shell.pc .d-hero, .app-shell.pc .pd-banner { max-width:1280px; margin:0 auto 14px; padding:22px 26px; border-radius:12px; }

/* —— V-003 手机工作台/单据页：kindtabs 胶囊条与 sd-hero 品牌色条层级分离（仅手机端，PC 下划线 tab 风格不受影响） —— */
.app-shell:not(.pc) .sd-page .kindtabs { margin-bottom:12px; border:1px solid #e8edf4; box-shadow:0 2px 6px rgba(20,40,80,.08); }
.app-shell:not(.pc) .sd-page .sd-hero { margin-top:2px; box-shadow:0 2px 8px rgba(27,79,143,.25); }

/* —— V-001 电脑单据列表：行内金额独立右列，视觉重心平衡 —— */
.app-shell.pc .sd-page { max-width:1280px; margin:0 auto; }
.app-shell.pc .sd-page .item { display:grid; grid-template-columns:1fr 150px; column-gap:16px; align-items:start; max-width:none; transition:background .15s; }
.app-shell.pc .sd-page .item:hover { background:#f7fafd; }
.app-shell.pc .sd-page .item:not(:has(.amt)) { grid-template-columns:1fr; }
.app-shell.pc .sd-page .item .l1 { display:contents; }
.app-shell.pc .sd-page .item .l1 .ti { grid-column:1; grid-row:1; padding-top:2px; font-weight:600; font-size:14.5px; }
.app-shell.pc .sd-page .item .l1 .amt { grid-column:2; grid-row:1/5; align-self:center; text-align:right; font-size:17px; font-weight:700; color:#c0392b; white-space:nowrap; }
.app-shell.pc .sd-page .item .l2 { grid-column:1; }
.app-shell.pc .sd-page .sttabs, .app-shell.pc .sd-page .search, .app-shell.pc .sd-page .fltbar { max-width:none; }

/* —— V-004 电脑模块落地页：横幅压缩为窄条 + 瓦片变顶部横向 tab 条 —— */
.app-shell.pc .tp-hero { max-width:1280px; margin:0 auto 12px; padding:12px 20px; display:flex; align-items:center; gap:26px; }
.app-shell.pc .tp-hero .tp-hname { font-size:17px; margin-bottom:0; flex:none; }
.app-shell.pc .tp-hero .tp-hrow { flex:1; display:flex; gap:26px; margin-top:0; }
.app-shell.pc .tp-hero .tp-hcell { display:flex; align-items:baseline; gap:8px; }
.app-shell.pc .tp-hero .tp-hlab { font-size:12px; opacity:.75; }
.app-shell.pc .tp-hero .tp-hval { font-size:18px; font-weight:700; }
.app-shell.pc .tp-grid { max-width:1280px; margin:0 auto; display:flex; flex-wrap:wrap; gap:8px; }
.app-shell.pc .tp-tile { flex-direction:row; align-items:center; gap:10px; padding:10px 16px; border-radius:10px; min-width:220px; flex:0 1 auto; }
.app-shell.pc .tp-tile .tp-tico { width:32px; height:32px; }
.app-shell.pc .tp-tile .tp-tname { font-size:14px; }
.app-shell.pc .tp-tile .tp-tmeta, .app-shell.pc .tp-tile .tp-tamt { font-size:12px; }

/* —— V-005 电脑审批列表：顶部表头 + 行表格化 + 状态徽标列 —— */
.app-shell.pc .appr-page { max-width:1280px; margin:0 auto; }
.appr-thead { display:none; }
.app-shell.pc .appr-thead { display:grid; grid-template-columns:90px 1.6fr 1.2fr 110px 90px; gap:10px; padding:10px 16px; font-size:12px; font-weight:700; color:#5b6b7d; background:#f8fafc; border-radius:10px 10px 0 0; border:1px solid #eef1f5; border-bottom:none; }
.app-shell.pc .appr-thead .r { text-align:right; }
.app-shell.pc .appr-thead .c { text-align:center; }
.app-shell.pc .appr-page .item.link { display:grid; grid-template-columns:90px 1.6fr 1.2fr 110px 90px; gap:10px; align-items:center; max-width:none; border-radius:0; border:1px solid #eef1f5; border-top:none; padding:11px 16px; transition:background .15s; }
.app-shell.pc .appr-page .item.link:hover { background:#f7fafd; }
.app-shell.pc .appr-page .item.link:last-of-type { border-radius:0 0 10px 10px; }
.app-shell.pc .appr-page .item .l1 { display:contents; }
.app-shell.pc .appr-page .item .l1 .ti { grid-column:1/3; display:flex; align-items:center; gap:8px; font-weight:600; min-width:0; }
.app-shell.pc .appr-page .item .l1 .ti .badge { flex:none; }
.app-shell.pc .appr-page .item .l1 .amt { grid-column:4; grid-row:1; text-align:right; font-weight:700; color:#c0392b; }
.app-shell.pc .appr-page .item .l2 { display:contents; }
.app-shell.pc .appr-page .item .l2 > span:first-child { grid-column:3; grid-row:1; font-size:12.5px; color:#5b6b7d; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.app-shell.pc .appr-page .item .l2 .st { grid-column:5; grid-row:1; justify-self:center; }

/* —— V-006 电脑预警中心：双栏桌面版式，消除大面积留白 —— */
.app-shell.pc .alerts-page { max-width:1280px; margin:0 auto; display:grid; grid-template-columns:1.4fr 1fr; gap:14px; align-items:start; }
.app-shell.pc .al-col { background:#fff; border-radius:12px; padding:16px 18px; box-shadow:0 1px 4px rgba(20,40,80,.05); min-height:180px; }
.app-shell.pc .al-col .sec-title { margin-top:0; }
.app-shell.pc .al-col .ai-alert { margin-top:0; }
.app-shell.pc .al-col .mrow { border:1px solid #eef1f5; border-radius:10px; }

/* —— V-007 电脑业务流程链：横向步骤条限宽居中，宽屏不失衡 —— */
.app-shell.pc .flchain { max-width:960px; margin:24px auto; display:flex; align-items:center; gap:6px; padding:20px 22px; }
.app-shell.pc .flchain .flstep { flex:0 1 auto; padding:11px 16px; font-size:14px; }
.app-shell.pc .flchain .flarrow { flex:none; transform:rotate(-90deg); font-size:16px; padding:0 2px; }

/* —— V-008 电脑动态/消息：左菜单分组 + 中间时间线 —— */
.feed-page { display:block; }
.feed-side { display:flex; gap:6px; overflow-x:auto; margin-bottom:10px; -webkit-overflow-scrolling:touch; }
.feed-side a { flex:none; background:#fff; border-radius:10px; padding:8px 12px; font-size:13px; color:#5b6b7d; text-decoration:none; box-shadow:0 1px 4px rgba(20,40,80,.05); white-space:nowrap; }
.feed-side a.on { background:#1B4F8F; color:#fff; font-weight:600; }
.feed-side a.on .feed-gn { color:#cfe0f5; }
.feed-gn { font-size:11px; color:#aab2bc; margin-left:5px; }
.app-shell.pc .feed-page { max-width:1280px; margin:0 auto; display:grid; grid-template-columns:210px 1fr; gap:14px; align-items:start; }
.app-shell.pc .feed-side { flex-direction:column; overflow-x:visible; margin-bottom:0; background:#fff; border-radius:12px; padding:10px; box-shadow:0 1px 4px rgba(20,40,80,.05); position:sticky; top:0; }
.app-shell.pc .feed-side a { box-shadow:none; border-radius:8px; display:flex; justify-content:space-between; align-items:center; }
.app-shell.pc .feed-main .feedrow { max-width:none; }

/* —— V-011 电脑驾驶舱问答区 / 经营报告 / IoT —— */
.app-shell.pc .ck-qa { max-width:1280px; margin:0 auto 14px; padding:18px 22px; }
.app-shell.pc .ck-qalist { max-height:460px; }
.app-shell.pc .ck-qabubble { max-width:62%; }
.app-shell.pc .ck-qainput { max-width:860px; }
.app-shell.pc .airep-shell { max-width:960px; }
.app-shell.pc .airep-shell .ck-head { padding:6px 4px; }
.app-shell.pc .ck-rptsec { padding:16px 22px; }
.app-shell.pc .iot-shell { max-width:1280px; margin:0 auto; }
.app-shell.pc .iot-stat { display:grid; grid-template-columns:repeat(4,1fr); gap:12px; }
.app-shell.pc .iot-cards { display:grid; grid-template-columns:repeat(2,1fr); gap:12px; align-items:start; }
.app-shell.pc .iot-card { max-width:none; }

/* —— V-013 电脑批7五页设计器：cd7-* 桌面版式 —— */
.app-shell.pc .cd7-shell { max-width:1280px; }
.app-shell.pc .cd7-bar select { flex:none; width:360px; }
.app-shell.pc .cd7-grid2 { grid-template-columns:1fr 1fr; align-items:start; }
.app-shell.pc .cd7-panel { padding:18px; }
.app-shell.pc .cd7-hero { max-width:1280px; padding:18px 22px; }
.app-shell.pc .cd7-flowline { flex-wrap:nowrap; overflow-x:auto; padding:6px 2px; }
.app-shell.pc .cd7-table { max-width:none; }
.app-shell.pc .cd7-qbar { flex-wrap:wrap; }

/* —— V-014 电脑批8四新页：pd/tc/ms/hp .app-shell.pc 规则（验收口径） —— */
.app-shell.pc .tc-grid { display:grid; grid-template-columns:repeat(3,1fr); gap:12px; }
.app-shell.pc .tc-bar { max-width:1280px; }
.app-shell.pc .tc-q { flex:none; width:340px; }
.app-shell.pc .pd-shell { display:grid; grid-template-columns:340px 1fr; gap:14px; align-items:start; max-width:1360px; margin:0 auto; }
.app-shell.pc .pd-conf { margin-bottom:0; position:sticky; top:0; max-height:calc(100vh - 120px); overflow-y:auto; }
.app-shell.pc .pd-paper { max-width:794px; }
.app-shell.pc .ms-shell { display:grid; grid-template-columns:1fr 340px; gap:14px; align-items:start; max-width:1280px; margin:0 auto; }
.app-shell.pc .ms-conf { margin-bottom:0; }
.app-shell.pc .ms-preview { position:sticky; top:0; }
.app-shell.pc .hp-shell { display:grid; grid-template-columns:220px 1fr; gap:14px; align-items:start; max-width:1280px; margin:0 auto; }
.app-shell.pc .hp-cats { flex-direction:column; overflow-x:visible; }
.app-shell.pc .hp-cats a { white-space:normal; }
.app-shell.pc .hp-search { max-width:1280px; }
.app-shell.pc .hp-art { padding:22px 26px; }

/* ================= v1.27.1 第八批扫尾：钉钉双端视觉精修 ================= */
/* 新建浮动按钮 PC 端对齐 1280 内容区右缘（不再贴屏幕边缘） */
.app-shell.pc .fab { right:calc(50% - 614px); bottom:28px; }
/* 手机端单据页行点击反馈统一 */
.app-shell:not(.pc) .sd-page .item:active { background:#f2f6fc; }
/* PC 端预警/流程链/动态三页顶部与内容区节奏统一 */
.app-shell.pc .alerts-page, .app-shell.pc .feed-page { margin-top:4px; }

/* ================= v1.29.0 第九批：工作台重构（V-027~V-032） ================= */

/* —— V-027 PC 双栏骨架：主列 1fr + 右栏 300px「我的项目」，≤1024px 回落单列 —— */
.app-shell.pc .home-page { display:grid; grid-template-columns:1fr 300px; gap:16px; align-items:start; }
.app-shell.pc .home-page .pc-hero { grid-column:1 / -1; }
.app-shell.pc .home-main { min-width:0; }
.app-shell.pc .home-rail { position:sticky; top:0; }
@media (max-width:1024px) {
  .app-shell.pc .home-page { grid-template-columns:1fr; }
}

/* —— V-028 审批三格卡：40px 彩圈图标 + 数字同行 + 标签在下 + 非 0 红角标 —— */
.appr-card { padding:16px 0 14px; }
.appr-card .arow { display:flex; align-items:center; justify-content:center; gap:8px; }
.appr-card .aico { position:relative; width:40px; height:40px; border-radius:50%; display:inline-flex; align-items:center; justify-content:center; color:#fff; flex:none; }
.appr-card .aico.c-blue { background:#3D7EFF; }
.appr-card .aico.c-orange { background:#FF9F43; }
.appr-card .aico.c-green { background:#2FBF71; }
.aico-ic { width:20px; height:20px; fill:none; stroke:currentColor; stroke-width:1.8; stroke-linecap:round; stroke-linejoin:round; }
.aico-ic :is(circle,rect,ellipse), .aico-ic .fa { fill:currentColor; fill-opacity:.22; stroke:currentColor; }
.appr-card .abdg { position:absolute; top:-4px; right:-6px; background:#f5222d; color:#fff; font-size:10px; font-style:normal; border-radius:8px; padding:0 5px; line-height:15px; min-width:15px; text-align:center; box-shadow:0 0 0 2px #fff; }
.appr-card .anum { font-size:22px; font-weight:700; color:#1B4F8F; font-variant-numeric:tabular-nums; }
.appr-card .alabel { font-size:12px; color:#8a94a0; margin-top:6px; }

/* —— V-029 业务流程图大卡：蓝渐变头条 + tab 行 + 横向节点图 + 折叠 —— */
.flowboard { background:#fff; border-radius:12px; box-shadow:0 1px 4px rgba(20,40,80,.05); margin-top:12px; overflow:hidden; }
.fb-head { display:flex; align-items:center; justify-content:space-between; background:linear-gradient(135deg,#3D7EFF,#1B4F8F); color:#fff; padding:13px 16px; }
.fb-title b { font-size:15px; font-weight:700; }
.fb-title .fb-sep { margin:0 8px; opacity:.5; }
.fb-title span:last-child { font-size:13px; opacity:.88; }
.fb-fold { background:rgba(255,255,255,.16); border:none; color:#fff; font-size:12px; border-radius:14px; padding:5px 14px; flex:none; }
.fb-fold:hover { background:rgba(255,255,255,.28); }
.fb-tabs { display:flex; gap:18px; padding:0 16px; border-bottom:1px solid #eef1f5; overflow-x:auto; }
.fb-tabs a { padding:10px 2px; font-size:13px; color:#5b6b7d; cursor:pointer; border-bottom:2px solid transparent; white-space:nowrap; }
.fb-tabs a.on { color:#2b6de5; border-bottom-color:#2b6de5; font-weight:600; }
.fb-body { overflow:hidden; max-height:420px; opacity:1; transition:max-height .28s ease, opacity .22s ease; }
.fb-body.fold { max-height:0; opacity:0; }
.fbchain { display:flex; align-items:center; gap:6px; overflow-x:auto; padding:16px; }
.fbchain .flstep { flex:none; padding:10px 14px; font-size:13px; border-radius:10px; }
.fbchain .flstep .flno { width:20px; height:20px; font-size:11px; }
.fbarrow { color:#c4ccd6; flex:none; font-size:14px; }

/* —— V-030 常用应用：白卡包裹 + PC 紧凑居中网格（磁贴 56px / gap 18x12） —— */
.apps-card { background:#fff; border-radius:12px; padding:16px; box-shadow:0 1px 4px rgba(20,40,80,.05); margin-top:12px; }
.apps-card .sec-title { margin-top:0; }
.apps-card .empty { padding:18px 0 6px; }
.app-shell.pc .apps-card .grid-mod { grid-template-columns:repeat(auto-fill,minmax(88px,96px)); justify-content:center; gap:18px 12px; }
.app-shell.pc .apps-card .mi { width:56px; height:56px; border-radius:14px; }
.app-shell.pc .apps-card .mi-ic { width:28px; height:28px; }
.apps-card .mn { font-size:13px; }

/* —— V-031 任务统计四格 + 我的任务/任务通知双栏 —— */
.tstat-grid { display:grid; grid-template-columns:repeat(4,1fr); gap:8px; }
.tstat-cell { background:#fff; border-radius:12px; padding:14px 8px 12px; text-align:center; box-shadow:0 1px 4px rgba(20,40,80,.05); }
.tstat-cell .tsv { font-size:20px; font-weight:700; font-variant-numeric:tabular-nums; }
.tstat-cell .tsv.c-grey { color:#8a94a0; }
.tstat-cell .tsv.c-blue { color:#3D7EFF; }
.tstat-cell .tsv.c-red { color:#f5222d; }
.tstat-cell .tsv.c-green { color:#2FBF71; }
.tstat-cell .tst { font-size:12px; color:#8a94a0; margin-top:4px; }
.app-shell.pc .task-cols { display:grid; grid-template-columns:2fr 1fr; gap:14px; align-items:start; margin-top:12px; }
/* 来源=前端功能问题全量排查报告_20261005 P1-④a：手机端 task-cols 补 margin-top，避免与 tstat-grid 挤叠 */
.app-shell:not(.pc) .task-cols { margin-top:12px; }
.task-card { background:#fff; border-radius:12px; padding:14px 16px; box-shadow:0 1px 4px rgba(20,40,80,.05); margin-bottom:12px; }
.app-shell.pc .task-card { margin-bottom:0; }
.tk-head { display:flex; align-items:center; justify-content:space-between; margin-bottom:4px; }
.tk-head b { font-size:15px; }
.tk-acts a { font-size:12px; color:#1B4F8F; text-decoration:none; margin-left:12px; }
.tk-row { display:flex; align-items:flex-start; gap:10px; padding:10px 0; border-bottom:1px solid #f0f2f5; }
.tk-row:last-child { border-bottom:none; }
.tk-star { color:#c4ccd6; cursor:pointer; font-size:15px; line-height:1.4; flex:none; user-select:none; }
.tk-star.on { color:#F2A93B; }
.tk-main { flex:1; min-width:0; }
.tk-l1 b { font-size:14px; font-weight:600; }
.tk-od { color:#f5222d; font-size:11px; font-style:normal; margin-left:6px; }
.tk-l2 { font-size:12px; color:#8a94a0; margin-top:3px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.tk-time { font-size:11px; color:#aab2bc; flex:none; margin-top:2px; }
.tn-row { padding:9px 0; border-bottom:1px solid #f0f2f5; }
.tn-row:last-child { border-bottom:none; }
.tn-txt { font-size:13px; color:#2b333d; line-height:1.5; }
.tn-date { font-size:11px; color:#aab2bc; margin-top:2px; }

/* —— V-032 右栏「我的项目」竖卡：蓝链项目名 + 状态 tag 组（隐藏金额行） —— */
/* 来源=前端功能问题全量排查报告_20261005 P1-④b：rail-card 补 margin-bottom，避免上下贴死 */
.rail-card { background:#fff; border-radius:12px; padding:14px 16px; box-shadow:0 1px 4px rgba(20,40,80,.05); margin-bottom:12px; }
.rc-head { display:flex; align-items:center; justify-content:space-between; margin-bottom:6px; }
.rc-head b { font-size:15px; }
.rc-head a { font-size:12px; color:#1B4F8F; text-decoration:none; }
.rc-item { padding:10px 0; border-bottom:1px solid #f0f2f5; }
.rc-item:last-child { border-bottom:none; }
.rc-name { font-size:13px; font-weight:600; color:#1B4F8F; text-decoration:none; }
.rc-name:hover { text-decoration:underline; }
.rc-tags { margin-top:6px; display:flex; flex-wrap:wrap; gap:4px; }
.rc-tag { padding:1px 8px; border-radius:4px; font-size:11px; font-style:normal; }
.rc-tag.tg-green { background:#e7f6ec; color:#2FBF71; }
.rc-tag.tg-blue { background:#e8f0fe; color:#3D7EFF; }
.rc-tag.tg-grey { background:#f0f2f5; color:#8a94a0; }

/* ================= v1.30.0 第十批：V-033~V-041 ================= */

/* —— V-033 PC 侧栏宽度过渡折叠 + 半胶囊展开把手 —— */
.pc-side { transition:margin-left .25s ease; }
.pc-side.fold { margin-left:-232px; }
.pc-side-handle { position:fixed; left:0; top:50%; transform:translateY(-50%); width:22px; height:64px; border-radius:0 12px 12px 0; background:#1B4F8F; color:#fff; display:flex; align-items:center; justify-content:center; cursor:pointer; z-index:130; box-shadow:2px 0 8px rgba(20,40,80,.25); font-size:15px; transition:width .15s ease, background .15s ease; }
.pc-side-handle:hover { background:#2f6bc0; width:28px; }

/* —— V-034 动态页：双 tab + 项目筛选 + 周期分组周报卡 —— */
.feed-head { display:flex; align-items:center; justify-content:space-between; gap:10px; flex-wrap:wrap; margin-bottom:12px; }
.feed-tabs { display:flex; gap:4px; border-bottom:1px solid #e8ebef; }
.feed-tabs a { padding:9px 20px; font-size:14px; color:#5b6b7d; cursor:pointer; border-bottom:2px solid transparent; }
.feed-tabs a.on { color:#2b6de5; border-bottom-color:#2b6de5; font-weight:600; }
.feed-acts { display:flex; align-items:center; gap:8px; flex-wrap:wrap; }
.feed-projsel { border:1px solid #d7dce3; border-radius:8px; padding:7px 10px; font-size:13px; background:#fff; max-width:200px; color:#2b333d; }
.feed-setbtn { background:#fff; border:1px solid #d7dce3; border-radius:8px; padding:7px 12px; font-size:13px; color:#5b6b7d; }
.feed-setbtn:hover { color:#2b6de5; border-color:#2b6de5; }
.feed-body { display:flex; gap:14px; align-items:flex-start; }
.feed-cards { flex:1; min-width:0; }
.wk-card { background:#fff; border-radius:12px; box-shadow:0 1px 4px rgba(20,40,80,.05); margin-bottom:10px; overflow:hidden; }
.wk-head { display:flex; align-items:center; gap:10px; padding:13px 16px; cursor:pointer; }
.wk-head:hover { background:#fafbfd; }
.wk-badge { background:#3D7EFF; color:#fff; font-size:11px; border-radius:4px; padding:2px 8px; flex:none; }
.wk-range { font-size:14px; font-weight:600; color:#2b333d; }
.wk-count { font-size:12px; color:#aab2bc; margin-left:auto; flex:none; }
.wk-view { font-size:12px; color:#2b6de5; margin-left:auto; flex:none; }
.wk-arrow { color:#c4ccd6; font-size:15px; transition:transform .2s; flex:none; }
.wk-arrow.open { transform:rotate(90deg); }
.wk-items { border-top:1px solid #f0f2f5; }
.wk-item { display:flex; align-items:flex-start; gap:10px; padding:10px 16px; }
.wk-item:hover { background:#fdf6e3; }
.wk-dot { width:8px; height:8px; border-radius:50%; background:#3D7EFF; margin-top:7px; flex:none; }
.wk-dot.g { background:#2FBF71; } .wk-dot.r { background:#f5222d; }
.wk-itxt { flex:1; min-width:0; }
.wk-l1 { font-size:13px; color:#2b333d; }
.wk-l2 { font-size:12px; color:#8a94a0; margin-top:2px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.wk-time { font-size:11px; color:#aab2bc; flex:none; margin-top:2px; }
.wk-end { text-align:center; color:#aab2bc; font-size:12px; padding:18px 0; }
.feed-sublist { max-width:860px; }
/* 订阅设置弹窗 */
.wk-mask { position:fixed; inset:0; background:rgba(20,30,45,.45); z-index:200; }
.subset-pop { position:fixed; left:50%; top:50%; transform:translate(-50%,-50%); background:#fff; border-radius:14px; padding:18px 20px; width:min(360px,88vw); z-index:201; box-shadow:0 8px 32px rgba(20,40,80,.2); }
.ssp-head { display:flex; justify-content:space-between; align-items:center; font-size:15px; margin-bottom:10px; }
.ssp-x { cursor:pointer; color:#aab2bc; font-size:18px; }
.ssp-row { display:flex; align-items:center; gap:8px; padding:9px 0; font-size:14px; color:#2b333d; }
.ssp-row.off { color:#aab2bc; }
.ssp-row .mb { font-size:10px; background:#f0f2f5; border-radius:4px; padding:1px 6px; margin-left:4px; }
.ssp-tip { font-size:12px; color:#aab2bc; background:#f8fafc; border-radius:8px; padding:8px 10px; margin-top:8px; }
.ssp-ops { display:flex; gap:8px; margin-top:12px; }
.ssp-btn { flex:1; height:36px; border:none; border-radius:8px; background:#2b6de5; color:#fff; font-size:14px; cursor:pointer; }
.ssp-btn.ghost { background:#eef3ff; color:#2b6de5; }
.ssp-btn:active { opacity:.85; }
.approver-name { color:#2b333d; font-size:13px; flex:none; max-width:320px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }

/* —— V-035 公司周报抽屉 —— */
.wk-drawer { position:fixed; top:0; right:0; bottom:0; width:min(720px,60vw); background:#f5f7fa; z-index:202; transform:translateX(100%); transition:transform .25s ease; box-shadow:-4px 0 24px rgba(20,40,80,.18); }
.wk-drawer.on { transform:translateX(0); }
@media (max-width:900px) { .wk-drawer { width:100vw; } }
.wkd-scroll { height:100%; overflow-y:auto; padding:0 0 24px; }
.wkd-head { position:relative; background:linear-gradient(135deg,#2f8af5,#1B4F8F); color:#fff; padding:20px 24px 18px; text-align:center; }
.wkd-art { position:absolute; left:20px; top:16px; font-size:20px; font-weight:800; font-style:italic; letter-spacing:2px; text-shadow:0 2px 6px rgba(0,0,0,.25); }
.wkd-title { font-size:19px; font-weight:700; }
.wkd-range { font-size:12px; opacity:.88; margin-top:6px; }
.wkd-export { position:absolute; right:48px; top:16px; background:rgba(255,255,255,.18); border:none; color:#fff; font-size:12px; border-radius:14px; padding:6px 14px; }
.wkd-export:hover { background:rgba(255,255,255,.3); }
.wkd-export:disabled { opacity:.6; }
.wkd-x { position:absolute; right:16px; top:14px; font-size:20px; cursor:pointer; opacity:.85; }
.wkd-sec { background:#fff; border-radius:12px; margin:12px 14px 0; padding:14px 16px; box-shadow:0 1px 4px rgba(20,40,80,.05); }
.wkd-sechead { display:flex; align-items:center; gap:8px; font-size:15px; margin-bottom:10px; }
.wkd-ico { width:28px; height:28px; border-radius:50%; display:inline-flex; align-items:center; justify-content:center; color:#fff; flex:none; }
.wkd-ico.c-blue { background:#3D7EFF; } .wkd-ico.c-green { background:#2FBF71; }
.wkd-ico.c-orange { background:#FF9F43; } .wkd-ico.c-purple { background:#9b59b6; }
.wkd-ico.c-teal { background:#18B5C4; } .wkd-ico.c-red { background:#FF5A5F; }
.wkd-icosvg { width:16px; height:16px; fill:none; stroke:currentColor; stroke-width:1.8; stroke-linecap:round; stroke-linejoin:round; }
.wkd-icosvg :is(circle,rect,ellipse), .wkd-icosvg .fa { fill:currentColor; fill-opacity:.22; stroke:currentColor; }
.wkd-help { width:16px; height:16px; border-radius:50%; background:#3D7EFF; color:#fff; font-size:11px; display:inline-flex; align-items:center; justify-content:center; cursor:pointer; flex:none; }
.wkd-risk4 { display:grid; grid-template-columns:repeat(auto-fit,minmax(140px,1fr)); gap:10px; }
.wkd-rcell { position:relative; border-radius:10px; padding:14px 12px 12px; overflow:hidden; }
.wkd-rcell.bg-blue { background:#eaf1fe; } .wkd-rcell.bg-orange { background:#fff4e5; }
.wkd-rcell.bg-red { background:#fdecea; } .wkd-rcell.bg-green { background:#e7f6ec; }
.wkd-rv { font-size:22px; font-weight:700; color:#2b333d; }
.wkd-rt { font-size:12px; color:#5b6b7d; margin-top:4px; }
.wkd-rgo { position:absolute; right:10px; top:10px; font-size:11px; color:#3D7EFF; text-decoration:none; }
.wkd-rows .wkd-row { display:flex; justify-content:space-between; padding:9px 0; border-bottom:1px solid #f0f2f5; font-size:13px; color:#5b6b7d; }
.wkd-rows .wkd-row:last-child { border-bottom:none; }
.wkd-row b { color:#2b333d; font-variant-numeric:tabular-nums; }
.neg { color:#f5222d !important; }
.wkd-grid2 { display:grid; grid-template-columns:repeat(auto-fit,minmax(140px,1fr)); gap:8px; }
.wkd-gcell { background:#f8fafc; border-radius:8px; padding:10px 12px; }
.wkd-gcell span { font-size:12px; color:#8a94a0; display:block; }
.wkd-gcell b { font-size:15px; color:#2b333d; margin-top:3px; display:block; font-variant-numeric:tabular-nums; }
.wkd-foot { text-align:center; color:#aab2bc; font-size:12px; padding:16px 20px 4px; }

/* —— V-036 看板双 tab + 项目卡 —— */
.bd-tabs { display:flex; gap:4px; border-bottom:1px solid #e8ebef; margin-bottom:14px; }
.bd-tabs a { padding:10px 22px; font-size:15px; color:#5b6b7d; cursor:pointer; border-bottom:2px solid transparent; }
.bd-tabs a.on { color:#2b6de5; border-bottom-color:#2b6de5; font-weight:600; }
.bd-filter { display:flex; align-items:center; gap:12px; flex-wrap:wrap; margin-bottom:10px; }
.bd-seg { display:flex; background:#fff; border-radius:8px; padding:3px; box-shadow:0 1px 4px rgba(20,40,80,.05); }
.bd-seg a { padding:6px 16px; font-size:13px; color:#5b6b7d; border-radius:6px; cursor:pointer; }
.bd-seg a.on { background:#2b6de5; color:#fff; }
.bd-search { border:1px solid #d7dce3; border-radius:8px; padding:7px 12px; font-size:13px; width:220px; max-width:60vw; }
.bd-adv { font-size:13px; color:#2b6de5; cursor:pointer; }
.bd-sub { display:flex; align-items:center; gap:6px; font-size:13px; color:#5b6b7d; margin-left:auto; cursor:pointer; }
.bd-advarea { display:flex; align-items:center; gap:8px; flex-wrap:wrap; background:#fff; border-radius:10px; padding:10px 14px; margin-bottom:10px; box-shadow:0 1px 4px rgba(20,40,80,.05); }
.bd-ipt { border:1px solid #d7dce3; border-radius:6px; padding:6px 10px; font-size:13px; background:#fff; }
.bd-tilde { color:#aab2bc; }
.bd-banner { display:flex; justify-content:space-between; align-items:center; background:#eaf1fe; color:#1B4F8F; border-radius:10px; padding:10px 14px; font-size:13px; margin-bottom:12px; }
.bd-banner-a { color:#2b6de5; font-weight:600; text-decoration:none; margin-left:4px; }
.bd-banner-x { cursor:pointer; color:#8fa3bd; font-size:16px; padding:0 4px; }
.bd-cards { display:grid; grid-template-columns:repeat(auto-fill,minmax(320px,1fr)); gap:12px; }
.bd-card { background:#fff; border-radius:12px; padding:14px 16px; box-shadow:0 1px 4px rgba(20,40,80,.05); cursor:pointer; transition:box-shadow .15s; }
.bd-card:hover { box-shadow:0 4px 14px rgba(20,40,80,.12); }
.bdc-l1 { display:flex; align-items:center; gap:8px; font-size:15px; }
.bdc-l1 b { flex:1; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.bd-tag { font-size:11px; border-radius:4px; padding:1px 8px; flex:none; }
.bd-tag.tg-blue { background:#e8f0fe; color:#3D7EFF; }
.bd-tag.tg-grey { background:#f0f2f5; color:#8a94a0; }
.bd-tag.tg-orange { background:#fff4e5; color:#FF9F43; }
.bdc-code { font-size:12px; color:#8a94a0; margin-top:4px; }
.bdc-main { display:flex; align-items:center; gap:14px; margin-top:12px; }
.bdc-row { display:flex; gap:18px; flex:1; }
.bdc-cell { text-align:center; }
.bdc-cell b { font-size:15px; color:#2b333d; display:block; }
.bdc-cell span { font-size:11px; color:#aab2bc; }
.bdc-prog { flex:1; min-width:120px; }
.bdc-plabel { font-size:11px; color:#aab2bc; }
.bdc-pbar { height:6px; border-radius:3px; background:#eef1f5; margin:5px 0 3px; overflow:hidden; }
.bdc-pbar i { display:block; height:100%; border-radius:3px; background:linear-gradient(90deg,#3D7EFF,#2f8af5); }
.bdc-ppct { font-size:11px; color:#3D7EFF; font-weight:600; }

/* —— V-041 公司看板视觉统一 —— */
.bd-corp-head { display:flex; justify-content:space-between; align-items:center; margin-bottom:12px; }
.bd-corp-title { font-size:15px; font-weight:600; }
.bd-kpi .kpi { border-radius:12px; box-shadow:0 1px 4px rgba(20,40,80,.05); }
.bd-pooltiles { display:grid; grid-template-columns:repeat(auto-fill,minmax(150px,1fr)); gap:10px; margin-bottom:14px; }
.bd-pendcard { background:#fff; border-radius:12px; padding:6px 12px; box-shadow:0 1px 4px rgba(20,40,80,.05); }
/* 渐变金额磁贴（资金分析/资金池共用规格） */
.ftile-grid { display:grid; grid-template-columns:repeat(auto-fill,minmax(160px,1fr)); gap:10px; }
.ftile { position:relative; border-radius:10px; padding:12px 14px; color:#fff; }
.ftile.c-orange { background:linear-gradient(135deg,#FF9F43,#e8820c); }
.ftile.c-blue { background:linear-gradient(135deg,#3D7EFF,#1B4F8F); }
.ftile.c-purple { background:linear-gradient(135deg,#9b59b6,#7d3f96); }
.ftile.c-green { background:linear-gradient(135deg,#2FBF71,#1f9e58); }
.ftile.c-teal { background:linear-gradient(135deg,#18B5C4,#0f8a97); }
.ft-n { font-size:12px; opacity:.92; display:block; }
.ft-v { font-size:17px; font-weight:700; display:block; margin-top:5px; font-variant-numeric:tabular-nums; }
.ft-arr { position:absolute; right:12px; top:50%; transform:translateY(-50%); opacity:.7; }

/* —— V-037~V-040 项目看板详情 —— */
.bpd-page { padding-bottom:40px; }
.bpd-hero { background:linear-gradient(135deg,#2f8af5,#1B4F8F); border-radius:12px; color:#fff; padding:18px 22px; margin-bottom:12px; }
.bpd-hl1 { display:flex; align-items:center; gap:10px; font-size:18px; }
.bpd-tag { background:rgba(255,255,255,.2); font-size:11px; border-radius:4px; padding:2px 8px; }
.bpd-hcode { font-size:12px; opacity:.85; margin-top:5px; }
.bpd-hrow { display:flex; gap:36px; margin-top:14px; flex-wrap:wrap; }
.bpd-hcell span { font-size:11px; opacity:.85; display:block; }
.bpd-hcell b { font-size:16px; display:block; margin-top:3px; }
.bpd-hprog { flex:1; min-width:180px; }
.bpd-hbar { height:7px; border-radius:4px; background:rgba(255,255,255,.25); margin-top:7px; overflow:hidden; }
.bpd-hbar i { display:block; height:100%; border-radius:4px; background:#fff; }
.bpd-tabs { position:sticky; top:0; z-index:60; display:flex; align-items:center; gap:2px; background:#fff; border-radius:10px; box-shadow:0 1px 4px rgba(20,40,80,.08); padding:4px 8px; margin-bottom:12px; overflow-x:auto; }
.bpd-tabs a { padding:9px 14px; font-size:13px; color:#5b6b7d; cursor:pointer; border-bottom:2px solid transparent; white-space:nowrap; }
.bpd-tabs a.on { color:#2b6de5; border-bottom-color:#2b6de5; font-weight:600; }
.bpd-tabs.fold a:not(.on) { display:none; }
.bpd-tabsfold { margin-left:auto; color:#aab2bc; cursor:pointer; padding:6px 8px; flex:none; }
.bpd-card { background:#fff; border-radius:12px; padding:16px 18px; box-shadow:0 1px 4px rgba(20,40,80,.05); margin-bottom:12px; }
.bpd-secline { display:flex; align-items:center; gap:14px; flex-wrap:wrap; font-size:14px; margin-bottom:12px; }
.bpd-more { margin-left:auto; font-size:12px; color:#2b6de5; text-decoration:none; }
.bpd-period { border:1px solid #d7dce3; border-radius:6px; padding:6px 10px; font-size:13px; background:#fff; }
.bpd-bal { font-size:13px; color:#5b6b7d; }
.bpd-bal b { font-variant-numeric:tabular-nums; }
.c-blue-t { color:#3D7EFF; }
.bpd-ptop { display:flex; gap:24px; flex-wrap:wrap; }
.bpd-pring-wrap { display:flex; align-items:center; gap:18px; }
.bpd-pdates { font-size:13px; color:#5b6b7d; line-height:2; }
.bpd-bignum { font-size:24px; color:#FF9F43; font-weight:700; }
.bpd-pbars { flex:1; min-width:260px; }
.ring { width:120px; height:120px; border-radius:50%; display:flex; align-items:center; justify-content:center; flex:none; }
.ring-in { width:88px; height:88px; border-radius:50%; background:#fff; display:flex; flex-direction:column; align-items:center; justify-content:center; }
.ring-in b { font-size:18px; color:#2b333d; }
.ring-in span { font-size:11px; color:#8a94a0; margin-top:2px; }
.hbar-row { display:flex; align-items:center; gap:10px; margin-bottom:10px; }
.hbar-name { width:76px; flex:none; font-size:12px; color:#5b6b7d; }
.hbar { flex:1; height:10px; border-radius:5px; background:#eef1f5; overflow:hidden; }
.hbar i { display:block; height:100%; border-radius:5px; }
.hbc0 { background:#3D7EFF; } .hbc1 { background:#FF9F43; } .hbc2 { background:#9b59b6; }
.hbc3 { background:#2FBF71; } .hbc4 { background:#18B5C4; } .hbc5 { background:#FF5A5F; }
.hbar-pct { width:76px; flex:none; font-size:12px; color:#2b333d; text-align:right; font-variant-numeric:tabular-nums; }
.chart-box { min-height:180px; }
.cap-switch { display:inline-flex; background:#f0f2f5; border-radius:16px; padding:3px; }
.cap-switch a { padding:6px 16px; font-size:12px; color:#5b6b7d; border-radius:13px; cursor:pointer; }
.cap-switch a.on { background:#fff; color:#2b6de5; font-weight:600; box-shadow:0 1px 3px rgba(20,40,80,.1); }
.cap-switch.sm a { padding:4px 12px; font-size:11px; }
.cbudget { margin:12px 0; }
.cbudget-bar { position:relative; height:14px; border-radius:7px; background:#eef1f5; margin:26px 0 6px; }
.cbudget-bar > i { display:block; height:100%; border-radius:7px; background:linear-gradient(90deg,#3D7EFF,#2f8af5); }
.cbudget-bar .bg-orange-i { background:linear-gradient(90deg,#FF9F43,#e8820c); }
.cbudget-bubble { position:absolute; top:-24px; transform:translateX(-50%); background:#FF9F43; color:#fff; font-size:11px; border-radius:10px; padding:2px 10px; white-space:nowrap; }
.cbudget-ends { display:flex; justify-content:space-between; font-size:12px; color:#5b6b7d; }
.cbudget-ends.sm { color:#aab2bc; margin-top:4px; }
.duo-bar { display:flex; height:10px; border-radius:5px; overflow:hidden; margin-top:8px; }
.duo-bar i { display:block; height:100%; }
.bg-blue-i { background:#3D7EFF; }
.bpd-kpi9 { display:grid; grid-template-columns:repeat(auto-fill,minmax(130px,1fr)); gap:10px; margin-bottom:14px; }
.k9 { background:#f8fafc; border-radius:10px; padding:10px 12px; }
.k9-n { font-size:11px; color:#8a94a0; display:block; }
.k9 b { font-size:15px; color:#2b333d; margin-top:3px; display:block; font-variant-numeric:tabular-nums; }
.bpd-duo { display:flex; gap:24px; flex-wrap:wrap; margin-top:14px; }
.bpd-ringbox { display:flex; align-items:center; gap:20px; flex:1; min-width:280px; }
.legend { flex:1; min-width:140px; }
.lg-row { display:flex; align-items:center; gap:8px; font-size:12px; color:#5b6b7d; padding:3px 0; }
.lg-row b { margin-left:auto; color:#2b333d; }
.lgc { width:10px; height:10px; border-radius:3px; flex:none; }
.lg0 { background:#3D7EFF; } .lg1 { background:#FF9F43; } .lg2 { background:#9b59b6; }
.lg3 { background:#2FBF71; } .lg4 { background:#18B5C4; } .lg5 { background:#8a94a0; }
.lg6 { background:#FF5A5F; } .lg7 { background:#F2A93B; }
.bpd-gaugebox { display:flex; flex-direction:column; align-items:center; gap:12px; padding:8px 0; }
.bpd-two { display:flex; gap:24px; font-size:13px; color:#5b6b7d; flex-wrap:wrap; }
.hbars6 { margin-top:14px; }
.bpd-trio { display:grid; grid-template-columns:repeat(auto-fit,minmax(150px,1fr)); gap:10px; margin-bottom:14px; }
.bpd-trio.duo2 { grid-template-columns:repeat(auto-fit,minmax(200px,1fr)); }
.bpd-five { display:grid; grid-template-columns:repeat(auto-fit,minmax(120px,1fr)); gap:10px; }
.f5 { background:#f8fafc; border-radius:10px; padding:10px 12px; text-align:center; }
.f5 span { font-size:11px; color:#8a94a0; display:block; }
.f5 b { font-size:14px; color:#2b333d; margin-top:3px; display:block; font-variant-numeric:tabular-nums; }
/* V-040 悬浮工具列 + 回顶 */
.bpd-float { position:fixed; right:16px; top:40%; z-index:120; display:flex; flex-direction:column; gap:10px; }
.bpd-ftag { writing-mode:vertical-lr; letter-spacing:2px; font-size:12px; border-radius:10px; padding:14px 8px; cursor:pointer; box-shadow:0 2px 10px rgba(20,40,80,.15); }
.bpd-ftag.grad { background:linear-gradient(180deg,#9b59b6,#6c3fa0); color:#fff; }
.bpd-ftag.line { background:#fff; color:#5b6b7d; border:1px solid #d7dce3; }
.bpd-ftag:hover { filter:brightness(1.08); }
.bpd-top { position:fixed; right:20px; bottom:28px; width:40px; height:40px; border-radius:50%; background:#fff; color:#3D7EFF; border:1px solid #d7dce3; display:flex; align-items:center; justify-content:center; font-size:18px; cursor:pointer; z-index:120; box-shadow:0 2px 10px rgba(20,40,80,.15); }
@media (max-width:1100px) { .bpd-float { display:none; } }
@media (max-width:768px) {
  .ring { width:100px; height:100px; }
  .ring-in { width:74px; height:74px; }
  .bpd-hrow { gap:20px; }
}

/* —— V-034 结构修正：新版动态页改为页头+体内双栏，覆盖 V-008 旧外层 grid —— */
.app-shell.pc .feed-page { grid-template-columns:1fr; }
.app-shell:not(.pc) .feed-body { flex-direction:column; }
.app-shell.pc .feed-side { flex:0 0 200px; }

/* —— 修正：duo-bar/cbudget 双色条橙色提为全局（收入合同金额占比条） —— */
.duo-bar .bg-orange-i, .cbudget-bar .bg-orange-i { background:linear-gradient(90deg,#FF9F43,#e8820c); }

/* ================= 窗口B·第十一批 v1.31.0（V-042~V-062 手机同步+工作台纠错） ================= */
/* —— V-047：AI 提醒左侧 28px 紫渐变圆徽标 —— */
.ai-alert.has-badge { display:flex; gap:10px; align-items:flex-start; }
.ai-alert.has-badge .ai-body { flex:1; min-width:0; }
.ai-badge { width:28px; height:28px; border-radius:50%; flex:none; display:inline-flex; align-items:center; justify-content:center; background:linear-gradient(135deg,#7b5cff,#a78bfa); color:#fff; font-size:12px; font-weight:700; letter-spacing:.5px; }
/* —— V-045：手机端右栏（我的项目）间距【方案①保留底部收尾；备选支② display:none 待司寇裁定】 —— */
.app-shell:not(.pc) .home-rail { margin-top:14px; }

/* —— V-042：手机动态页同步（胶囊双tab/周报卡全宽/抽屉全屏/筛选横滑） —— */
.app-shell:not(.pc) .feed-head { flex-direction:column; align-items:stretch; gap:8px; }
.app-shell:not(.pc) .feed-tabs { border-bottom:none; background:#fff; border-radius:22px; padding:4px; box-shadow:0 1px 4px rgba(20,40,80,.05); }
.app-shell:not(.pc) .feed-tabs a { flex:1; text-align:center; padding:8px 0; border-bottom:none; border-radius:18px; font-size:13px; }
.app-shell:not(.pc) .feed-tabs a.on { background:#2b6de5; color:#fff; }
.app-shell:not(.pc) .feed-acts { flex-wrap:nowrap; overflow-x:auto; -webkit-overflow-scrolling:touch; padding-bottom:2px; }
.app-shell:not(.pc) .feed-acts > * { flex:none; }
.app-shell:not(.pc) .feed-projsel { max-width:148px; }
.app-shell:not(.pc) .feed-cards, .app-shell:not(.pc) .wk-card { width:100%; }
.app-shell:not(.pc) .wk-drawer { left:0; width:auto; box-shadow:none; }
.app-shell:not(.pc) .wkd-risk4 { grid-template-columns:repeat(2,1fr); }
.app-shell:not(.pc) .wkd-grid2 { grid-template-columns:repeat(2,1fr); }
.app-shell:not(.pc) .wkd-head { padding-right:44px; }

/* —— V-043：手机智能看板同步（胶囊双tab/项目卡单列/详情tab吸顶横滑已具备） —— */
.app-shell:not(.pc) .bd-tabs { border-bottom:none; background:#fff; border-radius:22px; padding:4px; box-shadow:0 1px 4px rgba(20,40,80,.05); margin-bottom:10px; }
.app-shell:not(.pc) .bd-tabs a { flex:1; text-align:center; padding:8px 0; border-bottom:none; border-radius:18px; font-size:13px; }
.app-shell:not(.pc) .bd-tabs a.on { background:#2b6de5; color:#fff; }
.app-shell:not(.pc) .bd-cards { grid-template-columns:1fr; }
.app-shell:not(.pc) .bd-filter { gap:8px; }
.app-shell:not(.pc) .bd-filter .bd-search { flex:1 1 100%; }

/* —— V-044：手机图表响应式 + 悬浮列隐藏 + 页内工具钮 —— */
.app-shell:not(.pc) .bpd-float { display:none; }
.bpd-mtools { display:none; }
.app-shell:not(.pc) .bpd-mtools { display:flex; gap:8px; margin-bottom:10px; }
.bpd-mt { flex:1; text-align:center; font-size:12px; padding:8px 0; border-radius:16px; cursor:pointer; }
.bpd-mt.grad { background:linear-gradient(135deg,#7b5cff,#a78bfa); color:#fff; }
.bpd-mt.line { border:1px solid #d7dce3; color:#5b6b7d; background:#fff; }
.app-shell:not(.pc) .ring { width:140px; height:140px; }
.app-shell:not(.pc) .ring-in { width:104px; height:104px; }
.app-shell:not(.pc) .bpd-pring-wrap { justify-content:center; flex-wrap:wrap; }
.app-shell:not(.pc) .bpd-gaugebox { align-items:center; }
.app-shell:not(.pc) .chart-box { width:100%; min-height:160px; }
.app-shell:not(.pc) .chart-box svg, .app-shell:not(.pc) .chart-box canvas { max-width:100%; }

/* —— V-051：手机端列表新增收敛到搜索行右端 + 全局隐藏浮动 fab（各页已补 mo-add 入口） —— */
.mo-add { display:none; }
.mo-addbar { display:none; }
.app-shell:not(.pc) .mo-add { display:inline-flex; align-items:center; justify-content:center; background:#2b6de5; color:#fff; border:none; border-radius:8px; padding:0 12px; height:34px; font-size:13px; text-decoration:none; white-space:nowrap; cursor:pointer; flex:none; }
.app-shell:not(.pc) .mo-addbar { display:flex; margin-bottom:8px; }
/* 线2冒烟 C1：手机端隐藏「紧邻 mo-add 分体钮的一体钮」，杜绝 .btn.sm 与 .mo-add 双钮同屏（仅命中 tpl-projects，tpl-seal/tpl-stamps/预算页的裸 .btn.sm 不受影响） */
.app-shell:not(.pc) .btn.sm:has(+ .mo-add) { display:none; }
.app-shell:not(.pc) .fab { display:none; }

/* —— V-052：表单三键固定底栏（AI紫胶囊|暂存描边|提交蓝底） + 明细行操作链 —— */
.btnbar.fbar { position:sticky; bottom:0; z-index:40; background:#fff; border-top:1px solid #e8ebef; padding:10px 0; margin:14px -12px 0; padding-left:12px; padding-right:12px; display:flex; gap:10px; box-shadow:0 -2px 10px rgba(20,40,80,.06); }
.btnbar.fbar .btn { flex:1; text-align:center; }
.btn-ai { background:linear-gradient(135deg,#7b5cff,#a78bfa) !important; color:#fff !important; border:none !important; border-radius:20px !important; }
.row-ops { display:inline-flex; gap:10px; flex:none; }
.row-ops a { font-size:12px; color:#2b6de5; text-decoration:none; white-space:nowrap; }

/* —— V-055：资金计划管控横幅（黄提示/橙超支，仅提示不拦截） —— */
.fc-banner { display:flex; align-items:center; justify-content:space-between; gap:10px; background:#fff8e6; border:1px solid #f5e3b3; color:#7a5b10; border-radius:10px; padding:9px 12px; font-size:12px; margin-bottom:10px; }
.fc-banner a { color:#2b6de5; text-decoration:none; flex:none; font-size:12px; }
.fc-over { background:#fff3e8; border:1px solid #ffd9b3; color:#c2590c; border-radius:10px; padding:9px 12px; font-size:12px; margin-bottom:10px; }

/* —— V-049：业务流程手机降级（标题+横滑白底胶囊 chips，PC 大卡不动） —— */
.app-shell:not(.pc) .flowboard { background:transparent; box-shadow:none; }
.app-shell:not(.pc) .flowboard .fb-head { background:none; padding:6px 2px; }
.app-shell:not(.pc) .flowboard .fb-title { color:#2b333d; font-size:14px; }
.app-shell:not(.pc) .flowboard .fb-title .fb-sep, .app-shell:not(.pc) .flowboard .fb-title span:last-child { display:none; }
.app-shell:not(.pc) .flowboard .fb-fold { display:none; }
.app-shell:not(.pc) .flowboard .fb-tabs { gap:8px; padding:4px 2px; border-bottom:none; }
.app-shell:not(.pc) .flowboard .fb-tabs a { background:#fff; border-radius:16px; padding:7px 14px; border-bottom:none; box-shadow:0 1px 4px rgba(20,40,80,.05); font-size:12px; }
.app-shell:not(.pc) .flowboard .fb-tabs a.on { background:#2b6de5; color:#fff; border-bottom:none; }
.app-shell:not(.pc) .flowboard .fb-body { background:#fff; border-radius:12px; box-shadow:0 1px 4px rgba(20,40,80,.05); }

/* —— V-050：经营概览手机 3列×2行 白卡规范（名称灰12px/金额16px粗/负值红） —— */
.app-shell:not(.pc) .ov-cell .ot { font-size:12px; }

/* —— V-053：详情页底部固定「编辑|打印|记录」三 icon 操作栏 —— */
.dt-ops { position:fixed; left:0; right:0; bottom:0; z-index:110; display:flex; background:#fff; border-top:1px solid #e8ebef; box-shadow:0 -2px 10px rgba(20,40,80,.06); }
.dt-ops a { flex:1; display:flex; flex-direction:column; align-items:center; gap:2px; padding:8px 0 10px; font-size:11px; color:#5b6b7d; text-decoration:none; }
.dt-ops a:active { color:#2b6de5; }
.dt-ops .dt-ic { font-size:17px; line-height:1; }
.app-shell.pc .dt-ops { left:232px; }
.app-shell.pc .pc-side.fold ~ .pc-main .dt-ops { left:0; }

/* —— V-054：手机端 AI 助手紫渐变浮钮（48px，PC 不放） —— */
.ai-fab { display:none; }
.app-shell:not(.pc) .ai-fab { display:flex; position:fixed; right:16px; bottom:86px; width:48px; height:48px; border-radius:50%; background:linear-gradient(135deg,#7b5cff,#a78bfa); color:#fff; font-size:14px; font-weight:700; align-items:center; justify-content:center; text-decoration:none; z-index:110; box-shadow:0 4px 14px rgba(123,92,255,.4); }

/* —— V-056：任务页底部深色浮条（手机端） —— */
.tk-dock { display:none; }
.app-shell:not(.pc) .tk-dock { display:flex; position:fixed; left:16px; right:16px; bottom:70px; z-index:110; background:#2b3644; border-radius:24px; padding:5px; box-shadow:0 4px 16px rgba(20,40,80,.3); }
.app-shell:not(.pc) .tk-dock a { flex:1; text-align:center; padding:8px 0; font-size:12px; color:#aeb9c6; border-radius:19px; cursor:pointer; }
.app-shell:not(.pc) .tk-dock a.on { background:#3D7EFF; color:#fff; }

/* —— V-057：发票识别四步进度条 + 手机底部半屏弹层 —— */
.ocr-steps { display:flex; gap:6px; margin-bottom:12px; }
.ocr-steps .ost { flex:1; display:flex; align-items:center; gap:5px; font-size:11px; color:#aab2bc; white-space:nowrap; }
.ocr-steps .ost i { width:18px; height:18px; border-radius:50%; background:#e8ebef; color:#8a94a0; font-size:11px; font-style:normal; display:inline-flex; align-items:center; justify-content:center; flex:none; }
.ocr-steps .ost.on { color:#2b6de5; font-weight:600; }
.ocr-steps .ost.on i { background:#2b6de5; color:#fff; }
.ocr-mask { display:none; }
.app-shell:not(.pc) .ocr-mask { display:block; position:fixed; inset:0; background:rgba(20,30,50,.4); z-index:149; }
.app-shell:not(.pc) .ocr-card { position:fixed; left:0; right:0; bottom:0; z-index:150; max-height:62vh; overflow-y:auto; border-radius:16px 16px 0 0; box-shadow:0 -4px 24px rgba(20,40,80,.18); }

/* —— V-058：数据概览 12 格 + AI 数据解读钮 —— */
.dv-sec { background:#fff; border-radius:12px; box-shadow:0 1px 4px rgba(20,40,80,.05); padding:14px; margin-bottom:12px; }
.dv-head { display:flex; align-items:center; justify-content:space-between; margin-bottom:10px; }
.dv-head b { font-size:14px; color:#2b333d; }
.dv-ai { background:linear-gradient(135deg,#7b5cff,#a78bfa); color:#fff; border-radius:16px; padding:5px 12px; font-size:12px; text-decoration:none; }
.dv-grid { display:grid; grid-template-columns:repeat(4,1fr); gap:8px; }
.app-shell:not(.pc) .dv-grid { grid-template-columns:repeat(3,1fr); }
.dv-cell { background:#f7f9fc; border-radius:8px; padding:9px 10px; }
.dv-t { font-size:11px; color:#8a94a0; margin-bottom:4px; }
.dv-v { font-size:15px; font-weight:700; color:#1B4F8F; font-variant-numeric:tabular-nums; }
.dv-v.red { color:#d4380d; }
.dv-v.green { color:#0a6e31; }

/* —— V-061：右栏快捷推单链接组 —— */
.rc-links { display:grid; grid-template-columns:1fr 1fr; gap:8px; }
.rc-link { background:#eef3fa; color:#1B4F8F; border-radius:8px; padding:9px 0; text-align:center; font-size:12px; font-weight:600; text-decoration:none; }
.rc-link:hover { background:#e0eaf8; }

/* —— V-062：数据预警条（红/绿双态） —— */
.warn-bar { display:flex; align-items:center; gap:8px; background:#fdecea; border:1px solid #f5c6c0; color:#c0392b; border-radius:10px; padding:9px 12px; font-size:12px; text-decoration:none; margin-bottom:10px; }
.warn-bar.ok { background:#e7f6ec; border-color:#c3e6cf; color:#0a6e31; }
.warn-bar .wb-txt { flex:1; }
.warn-bar .wb-go { flex:none; opacity:.8; }

/* ===== B执法 移动端 P0 整改 2026-10-04 ===== */
/* A1 审批列表：去下划线裸链接 */
.item.link { text-decoration:none; }
.item .l1 .ti { color:#2b333d; }

/* A2 首页头部：深蓝→浅蓝（明暗反转） */
.mo-hero { background:linear-gradient(180deg,#e9f1fd,#f6f9ff); color:#1a1f26; }
.mo-hero-hi { color:#1a1f26; font-weight:600; }
.mo-hero-bell { color:#2b333d; background:rgba(27,79,143,.08); }

/* A3 表单骨架：左右 label → 上下白条 */
.app-shell:not(.pc) .form { background:transparent; box-shadow:none; padding:0; }
.app-shell:not(.pc) .frow { flex-direction:column; align-items:stretch; background:#fff; border-radius:10px; padding:12px 14px; margin-bottom:8px; gap:6px; border-bottom:none; box-shadow:0 1px 4px rgba(20,40,80,.05); }
.app-shell:not(.pc) .frow:last-child { margin-bottom:0; }
.app-shell:not(.pc) .frow label { width:auto; font-size:15px; font-weight:600; color:#2b333d; }
.app-shell:not(.pc) .frow input, .app-shell:not(.pc) .frow select, .app-shell:not(.pc) .frow textarea { font-size:16px; width:100%; }
.app-shell:not(.pc) .frow .hint { font-size:12px; color:#2b6de5; }


/* ================= B执法 移动端 P1/P2 整改 2026-10-04（来源=手机端排版对标清单 二/三节） ================= */

/* —— 来源=手机端排版清单 B1：内页 mo-topbar 蓝底白字（首页/应用中心不加 .blue 保留白底） —— */
.mo-topbar.blue { background:linear-gradient(135deg,#1B4F8F,#2f6bc0); border-bottom:none; }
.mo-topbar.blue .mo-back, .mo-topbar.blue .mo-title { color:#fff; }

/* —— 来源=手机端排版清单 B2：磁贴 56px/圆角14px（PC 断点 .app-shell.pc .mi 64px 覆写不受影响） —— */
.mi { width:56px; height:56px; border-radius:14px; position:relative; }
.mi-ic { width:30px; height:30px; stroke-width:2.4; }
/* 来源=手机端排版清单 B2：特殊功能底部渐变角标 pill（AI紫/表单蓝/OCR青/水印相机） */
.mi-badge { position:absolute; left:50%; bottom:-7px; transform:translateX(-50%); font-size:9px; font-style:normal; color:#fff; padding:1px 6px; border-radius:8px; white-space:nowrap; line-height:1.4; background:linear-gradient(135deg,#8C6FEF,#5B7FE8); }
.mi-badge.b-form { background:#3D7EFF; }
.mi-badge.b-ocr { background:#18B5C4; }
.mi-badge.b-cam { background:linear-gradient(135deg,#2FBF71,#18B5C4); }

/* —— 来源=手机端排版清单 B4：经营概览子卡浅灰底去投影、数值深黑（rk-cell 风险格不动） —— */
.ov-cell { background:#f5f7fa; box-shadow:none; }
.ov-cell .ov { color:#1a1f26; }
.ov-cell .ov.neg { color:#d4380d; }

/* —— v4.3：经营概览指标卡加语义色图标底色（左图标块 + 名称 + 数值） —— */
.app-shell:not(.pc) .ov-cell { display:flex; align-items:center; gap:10px; padding:12px; text-align:left; }
.app-shell:not(.pc) .ov-cell .ot { margin-bottom:3px; }
.app-shell:not(.pc) .ov-cell .ov { white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.ov-ic { width:40px; height:40px; border-radius:10px; flex:none; display:flex; align-items:center; justify-content:center; color:#fff; font-size:15px; font-weight:700; background:#2563EB; }
.app-shell.pc .ov-ic { width:44px; height:44px; font-size:16px; }
.app-shell:not(.pc) .ov-ic { width:34px; height:34px; font-size:13px; }
.app-shell:not(.pc) .ov-cell { gap:8px; padding:10px; }
/* —— B执法 修复 2026-10-07 v2：手机端经营概览改纵向布局，名称/金额完整显示不省略 —— */
.app-shell:not(.pc) .ov-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.app-shell:not(.pc) .ov-cell { flex-direction: column; align-items: center; gap: 6px; text-align: center; }
.app-shell:not(.pc) .ov-cell .ot { flex: none; margin-bottom: 0; white-space: nowrap; overflow: visible; text-overflow: clip; }
.app-shell:not(.pc) .ov-cell .ov { flex: none; white-space: nowrap; overflow: visible; text-overflow: clip; }
/* —— B执法 修复 2026-10-08：PC 端经营概览恢复竖排居中 + 响应式列数，杜绝电脑钉钉超宽 —— */
.app-shell.pc .ov-cell { display:flex; flex-direction:column; align-items:center; justify-content:center; gap:7px; padding:14px 8px 12px; text-align:center; }
.app-shell.pc .ov-cell .ot { margin-bottom:0; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; max-width:100%; }
.app-shell.pc .ov-cell .ov { white-space:nowrap; overflow:hidden; text-overflow:ellipsis; max-width:100%; font-size:15px; }
.app-shell.pc .ov-grid,
.app-shell.pc .risk-grid { grid-template-columns:repeat(auto-fill, minmax(168px, 1fr)); gap:12px; }


/* —— 来源=手机端排版清单 B5：搜索三件套——删「搜索」长按钮（回车即搜）/新增改方钮白+蓝字/34px 圆形分享钮 —— */
.app-shell:not(.pc) .search > button:not(.mo-add):not(.share-btn) { display:none; }
.app-shell:not(.pc) .mo-add { background:transparent; color:#1677ff; padding:0; height:auto; gap:6px; }
.app-shell:not(.pc) .mo-add i { width:40px; height:40px; border-radius:10px; background:#1677ff; color:#fff; font-style:normal; font-size:22px; font-weight:400; display:inline-flex; align-items:center; justify-content:center; }
.app-shell:not(.pc) .mo-addbar .mo-add i { width:36px; height:36px; }
.share-btn { display:none; }
.app-shell:not(.pc) .share-btn { display:inline-flex; align-items:center; justify-content:center; width:34px; height:34px; border-radius:50%; border:1px solid #e2e8f0; background:#fff; color:#5a6472; font-size:15px; cursor:pointer; flex:none; }

/* —— 来源=手机端排版清单 B6：列表卡金额橙红 #f2802e（.amt.in 绿/.amt.out 红 收支语义不变） —— */
.item .l1 .amt { font-size:19px; color:#f2802e; }
.item .l1 .amt.out { color:#c0392b; } .item .l1 .amt.in { color:#0a8a3a; }

/* —— 来源=手机端排版清单 B7：移动端 sd-hero 橙色大横幅压缩为一行式模块条（PC 不受影响） —— */
.app-shell:not(.pc) .sd-hero { padding:8px 12px; margin-bottom:8px; border-radius:10px; gap:8px; }
.app-shell:not(.pc) .sd-hero .sd-hico { width:28px; height:28px; border-radius:8px; }
.app-shell:not(.pc) .sd-hero .sd-htxt b { font-size:14px; }
.app-shell:not(.pc) .sd-hero .sd-htxt span { font-size:11px; }

/* —— 来源=手机端排版清单 B9：报表移动端无边框行式（tabular-nums 右对齐/蓝值可点/红值预警） —— */
.rpt-list { display:none; }
.rpt-dots { display:flex; gap:4px; justify-content:center; padding:6px 0; }
.rpt-dots i { width:5px; height:5px; border-radius:3px; background:#d7dce3; }
.rpt-dots i.on { width:6px; height:6px; background:#1677ff; }
.app-shell:not(.pc) .stats-page .tblwrap { display:none; }
.app-shell:not(.pc) .rpt-list { display:block; }
.rpt-item { background:#fff; border-radius:10px; padding:10px 12px; margin-bottom:9px; box-shadow:0 1px 4px rgba(20,40,80,.05); }
.rpt-item.bsum { border:1px solid #e8f0fb; }
.rpt-title { font-size:14px; font-weight:600; color:#2b333d; padding-bottom:6px; border-bottom:1px solid #f0f2f5; margin-bottom:2px; }
.rpt-row { display:flex; justify-content:space-between; align-items:center; padding:9px 2px; border-bottom:1px solid #f0f2f5; font-size:13px; }
.rpt-row:last-child { border-bottom:none; }
.rpt-k { color:#8a94a0; }
.rpt-v { font-variant-numeric:tabular-nums; text-align:right; color:#2b333d; font-weight:600; }
.rpt-v.link { color:#1677ff; }
.rpt-v.warn { color:#f53f3f; font-weight:600; }

/* —— 来源=手机端排版清单 B10：业务分类标签橙 tinted（状态类保持蓝 tinted .badge 基样式） —— */
.badge.cat { background:#fff3e8; color:#ff7d1a; }

/* —— 来源=手机端排版清单 B12：进度胶囊 + 展开/收起工具行 + 条目头像间距 —— */
.pg-tools { display:flex; justify-content:space-between; align-items:center; margin:4px 0 8px; font-size:12px; }
.pg-tools a { color:#1677ff; text-decoration:none; margin-left:12px; font-size:12px; }
.pg-liner { display:flex; align-items:center; gap:8px; margin:6px 0; }
.pg-pill { flex:1; height:16px; border-radius:8px; background:#f0f2f5; overflow:hidden; display:block; }
.pg-pill i { display:block; height:100%; border-radius:8px; transition:width .3s; }
.pg-pct { font-size:12px; color:#2b333d; font-variant-numeric:tabular-nums; flex:none; }
.pg-pct.red { color:#f53f3f; }
.tpl-plan .pd-avatar, .item .l1 .pd-avatar { margin-right:8px; flex:none; }

/* —— 来源=手机端排版清单 C1：状态 chips 未选中态浅灰底无边框（即原 .sttabs-dgy 全局启用） —— */
.sttabs a { background:#f2f4f7; border-color:#f2f4f7; color:#5a6472; }
.sttabs a.on { background:#1B4F8F; border-color:#1B4F8F; color:#fff; }

/* —— 来源=手机端排版清单 C2：专属加载卡（白卡+品牌蓝闪电+居中） —— */
.load-card { width:180px; margin:30vh auto 0; background:#fff; border-radius:12px; padding:22px 0; text-align:center; font-size:13px; color:#5a6472; box-shadow:0 2px 12px rgba(0,0,0,.06); }
.load-card .lc-ic { display:block; font-size:26px; margin-bottom:8px; color:#1677ff; }

/* —— 来源=手机端排版清单 C3：ActionSheet 操作块白底圆角 + 8px 灰缝分隔 —— */
.sheet-body .btnbar { background:#fff; border-radius:14px; padding:10px 12px; margin-top:8px; }
.sheet-body .form { border-radius:14px; overflow:hidden; }

/* —— 来源=手机端排版清单 C4：常用应用编辑态宫格白卡 + 红−/蓝+ 圆点角标 —— */
.grid-mod.editing a { position:relative; background:#fff; border-radius:12px; box-shadow:0 1px 4px rgba(20,40,80,.05); }
.grid-mod.editing .ed { position:absolute; top:4px; right:4px; width:16px; height:16px; border-radius:50%; color:#fff; font-size:12px; line-height:16px; text-align:center; z-index:2; }
.grid-mod.editing .ed.rm { background:#ff5a5f; }
.grid-mod.editing .ed.add { background:#1677ff; }
/* 来源=终审裁定 C4：上移角标保留（左上灰点），与红−移除/蓝+添加并存，互不冲突 */
.grid-mod.editing .ed.up { left:4px; right:auto; background:#7A8699; }
/* 来源=前端功能问题全量排查报告_20261005 P2-⑥：下移箭头错开并排（left:24px 与上移 left:4px 错开） */
.grid-mod.editing .ed.down { left:24px; right:auto; background:#7A8699; }

/* ================= B执法 PC 梯队② 排版整改 2026-10-05（来源=电脑钉钉端排版对标清单 第九节） ================= */
/* 设计令牌：主交互件 #2b6de5；控件高 32px/圆角4px；卡片圆角8px；徽标圆角10px；金额 #e6504a 右对齐 tabular-nums */

/* ---------- 框架层 P0-1：侧栏两级树（二级功能点 + 箭头展开态） ---------- */
.pc-mod { margin-bottom:2px; }
.pc-submenu { padding:2px 0 5px; }
.pc-subitem { display:flex; align-items:center; gap:6px; padding:8px 12px 8px 46px; font-size:13px; color:#aeb8c7; border-radius:6px; cursor:pointer; margin-bottom:1px; text-decoration:none; }
.pc-subitem:hover { color:#fff; background:rgba(255,255,255,.06); }
.pc-subitem.on { background:#3a4a5f; color:#fff; }
.pc-subitem-t { flex:1; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.pc-subitem-b { font-size:10px; color:#8fa3bd; background:rgba(255,255,255,.08); border-radius:8px; padding:0 6px; line-height:16px; flex:none; }
.pc-subitem.on .pc-subitem-b { color:#c6cedb; }
.pc-arrow { transition:transform .18s ease; }
.pc-arrow.open { transform:rotate(90deg); }

/* ---------- 框架层 P0-2：面包屑导航（‹返回 + 工作台/模块/当前） ---------- */
.crumb { max-width:1280px; margin:0 auto 12px; height:40px; display:flex; align-items:center; gap:8px; font-size:14px; color:#8a94a0; }
.crumb-back { color:#5b6b7d; font-size:18px; text-decoration:none; cursor:pointer; width:24px; text-align:center; flex:none; line-height:1; }
.crumb-back:hover { color:#2b6de5; }
.crumb-link { color:#8a94a0; text-decoration:none; cursor:pointer; }
.crumb-link:hover { color:#2b6de5; }
.crumb-cur { color:#2b333d; font-weight:600; }
.crumb-sep { color:#c4ccd6; }

/* ---------- 框架层 P1-3：右上角用户区（头像 + 下拉） ---------- */
.pc-top-r { position:relative; }
.pc-user { display:flex; align-items:center; gap:8px; cursor:pointer; padding:4px 6px; border-radius:6px; }
.pc-user:hover { background:#f2f6fb; }
.pc-avatar { width:30px; height:30px; border-radius:50%; background:#2b6de5; color:#fff; font-size:13px; display:inline-flex; align-items:center; justify-content:center; flex:none; }
.pc-username { font-size:13px; color:#5b6b7d; max-width:120px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.pc-caret { color:#8a94a0; font-size:11px; }
.pc-user-menu { position:absolute; right:0; top:40px; min-width:120px; background:#fff; border-radius:8px; box-shadow:0 4px 16px rgba(20,40,80,.12); padding:4px 0; z-index:300; }
.pc-user-menu a { display:block; padding:9px 16px; font-size:13px; color:#2b333d; text-decoration:none; cursor:pointer; }
.pc-user-menu a:hover { background:#f2f6fb; color:#2b6de5; }

/* ---------- 框架层 P2-1：侧栏底部版本号 + 设置入口 ---------- */
.pc-side-foot { margin-top:auto; display:flex; align-items:center; justify-content:space-between; padding:12px 16px; border-top:1px solid rgba(255,255,255,.06); font-size:12px; color:#7a8699; }
.pc-side-set { color:#7a8699; text-decoration:none; cursor:pointer; }
.pc-side-set:hover { color:#2b6de5; }
.pc-side-ver { color:#5a6779; font-variant-numeric:tabular-nums; }

/* ---------- 表单层 P0-6：表单纵排（label 上置 + 全宽控件 + 靠左 960px） ---------- */
.app-shell.pc .form { max-width:960px; margin:0 0 14px; border-radius:8px; padding:8px 20px; }
.app-shell.pc .frow { display:block; padding:10px 0; }
.app-shell.pc .frow label { display:block; width:auto; font-size:13px; color:#5b6b7d; margin-bottom:6px; }
.app-shell.pc .frow input,
.app-shell.pc .frow select,
.app-shell.pc .frow textarea { width:100%; height:32px; border:1px solid #dcdfe6; border-radius:4px; font-size:13px; padding:0 10px; background:#fff; color:#2b333d; }
.app-shell.pc .frow textarea { height:auto; min-height:64px; padding:8px 10px; resize:vertical; }
.app-shell.pc .frow input:focus,
.app-shell.pc .frow select:focus,
.app-shell.pc .frow textarea:focus { border-color:#2b6de5; box-shadow:0 0 0 2px rgba(43,109,229,.12); outline:none; }
.app-shell.pc .frow .hint { display:block; width:auto; flex:none; font-size:12px; color:#8a94a0; line-height:1.6; margin-top:6px; white-space:normal; }

/* ---------- 表单层 P0-8：审批人/抄送人选择区 + 底部固定操作栏 ---------- */
.approver-row { display:flex; align-items:center; gap:10px; padding:12px 0; font-size:13px; color:#5b6b7d; max-width:960px; }
.approver-label { color:#5b6b7d; }
.approver-add { width:28px; height:28px; border-radius:50%; border:1px dashed #c0c4cc; color:#8a94a0; display:inline-flex; align-items:center; justify-content:center; font-size:16px; cursor:pointer; flex:none; }
.approver-add:hover { color:#2b6de5; border-color:#2b6de5; }
/* 底部固定操作栏：三钮居中（暂存 ghost / AI预审白底蓝字 / 提交 primary） */
.form-footer { position:sticky; bottom:0; background:#fff; padding:12px 0; display:flex; justify-content:center; gap:12px; border-top:1px solid #f0f2f5; }
.app-shell.pc .btnbar.fbar { justify-content:center; gap:12px; }
/* 来源=电脑端排版清单 P0-8：PC 长表单滚动时三钮固定底部（sticky 覆写，不动 justify-content:center） */
.app-shell.pc .btnbar.fbar { position: sticky; bottom: 0; background: #fff; z-index: 10; border-top: 1px solid #f0f2f5; margin-top: 12px; }
.app-shell.pc .btnbar.fbar .btn { flex:none; min-width:96px; }

/* ---------- 表单层 P1-7：灰底提示条 + 灰底只读计算字段 ---------- */
.app-shell.pc .hint-bar { background:#f5f7fa; color:#8a94a0; font-size:12px; padding:8px 12px; border-radius:4px; margin-bottom:12px; }
.app-shell.pc .calc-input { background:#f5f7fa; color:#8a94a0; cursor:not-allowed; }
.app-shell.pc .frow input[readonly] { background:#f5f7fa; color:#8a94a0; cursor:not-allowed; }

/* ---------- 表单层 P1-8：上传件（蓝链 + 灰字限制 + 64px 缩略图网格带删除角标） ---------- */
.up-box { max-width:960px; }
.upload-link { color:#2b6de5; font-size:13px; cursor:pointer; display:inline-flex; align-items:center; gap:4px; }
.upload-link:hover { text-decoration:underline; }
.upload-tip { font-size:12px; color:#b0b8c3; margin-top:4px; }
.up-list { display:flex; flex-wrap:wrap; gap:8px; margin-top:8px; }
.up-item { position:relative; width:64px; height:64px; border:1px solid #e2e8f0; border-radius:4px; background:#f8fafc; display:flex; align-items:center; justify-content:center; }
.up-item-name { font-size:10px; color:#5b6b7d; text-align:center; padding:0 4px; overflow:hidden; word-break:break-all; display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; }
.up-item-del { position:absolute; top:-6px; right:-6px; width:18px; height:18px; border-radius:50%; background:#ff5a5f; color:#fff; font-size:12px; line-height:18px; text-align:center; cursor:pointer; box-shadow:0 0 0 2px #fff; }

/* ---------- 弹窗层 P1-9：白底圆角弹窗（标题行 + 警示条 + 右下双钮） ---------- */
.app-shell.pc .sheet-body { background:#fff; border-radius:8px; padding:0; }
.dlg-head { display:flex; justify-content:space-between; align-items:center; padding:14px 16px; font-size:15px; font-weight:600; color:#2b333d; border-bottom:1px solid #f0f2f5; }
.dlg-head .x { color:#909399; cursor:pointer; font-size:18px; line-height:1; }
.dlg-head .x:hover { color:#2b6de5; }
.dlg-warn { background:#fdf6ec; color:#e6a23c; font-size:12px; padding:8px 16px; border-bottom:1px solid #faecd8; }
.dlg-foot { display:flex; justify-content:flex-end; gap:10px; padding:12px 16px; border-top:1px solid #f0f2f5; }
.dlg-foot .btn { flex:none; min-width:80px; }

/* ---------- 徽标层 P1-10：状态徽标浅底胶囊（点式 + 连字符式双兼容） ---------- */
.app-shell.pc .st,
.app-shell.pc .st-tag { font-size:12px; padding:2px 10px; border-radius:10px; display:inline-block; line-height:1.6; }
.app-shell.pc .st.approved,
.app-shell.pc .st.closed,
.app-shell.pc .st-approved { background:#e8f7ef; color:#00b578; }
.app-shell.pc .st.pending,
.app-shell.pc .st-pending { background:#fff4e6; color:#ff8800; }
.app-shell.pc .st.rejected,
.app-shell.pc .st-rejected { background:#fdecec; color:#e5484d; }
.app-shell.pc .st.draft,
.app-shell.pc .st.cancelled,
.app-shell.pc .st-draft { background:#f2f3f5; color:#8a94a0; }

/* ---------- 通用层 P1-5：按钮紧凑规格 + 文字钮（主交互件 #2b6de5） ---------- */
.app-shell.pc .btn { flex:none; padding:0 16px; height:32px; line-height:32px; font-size:13px; border-radius:4px; font-weight:500; background:#2b6de5; }
.app-shell.pc .btn:disabled { background:#a9bdd6; }
.app-shell.pc .btn.ghost,
.app-shell.pc .btn.sec { border:1px solid #c8d6e8; background:#fff; color:#1B4F8F; }
.app-shell.pc .btn.ghost:disabled,
.app-shell.pc .btn.sec:disabled { background:#f4f6f9; color:#c4ccd6; }
.app-shell.pc .btn-txt { background:none; border:none; color:#2b6de5; font-size:13px; padding:0 4px; height:auto; line-height:1.5; cursor:pointer; }
.app-shell.pc .btn-txt:hover { text-decoration:underline; }

/* 统计层 P1-12：既有统计页 KPI 卡对齐指标卡规格（label 虚线下划线 + 数值 20px 蓝可下钻） */
.app-shell.pc .sh-kpis .kpi .t { font-size:13px; color:#8a94a0; border-bottom:1px dashed #dcdfe6; display:inline-block; padding-bottom:2px; }
.app-shell.pc .sh-kpis .kpi .v { font-size:20px; font-weight:700; color:#2b6de5; cursor:pointer; }

/* ---------- 通用层 P1-11：空态并入表格居中 + 加载态 spinner ---------- */
.app-shell.pc td[colspan] { text-align:center; padding:48px 0; color:#a9b3bf; }
.loading { display:flex; flex-direction:column; align-items:center; gap:8px; padding:48px 0; color:#8a94a0; font-size:13px; }
.loading::before { content:''; width:24px; height:24px; border:2px solid #d7dce3; border-top-color:#2b6de5; border-radius:50%; animation:pcspin .7s linear infinite; }
@keyframes pcspin { to { transform:rotate(360deg); } }

/* ---------- 统计层 P1-12：渐变横幅 + 筛选卡 + 指标卡组 ---------- */
.app-shell.pc .rpt-hero { background:linear-gradient(90deg,#1B4F8F,#2f6bc0); border-radius:8px 8px 0 0; color:#fff; padding:14px 20px; display:flex; justify-content:space-between; align-items:center; }
.app-shell.pc .rpt-filter { background:#fff; padding:16px 20px; display:grid; grid-template-columns:repeat(3,1fr); gap:12px 24px; border:1px solid #f0f2f5; }
.app-shell.pc .rpt-filter label { width:72px; text-align:right; font-size:13px; color:#5b6b7d; }
.app-shell.pc .stat-kpi { flex:1; }
.app-shell.pc .stat-kpi .k { font-size:13px; color:#8a94a0; border-bottom:1px dashed #dcdfe6; display:inline-block; }
.app-shell.pc .stat-kpi .v { font-size:20px; font-weight:700; color:#2b6de5; cursor:pointer; font-variant-numeric:tabular-nums; }

/* ---------- 设置层 P2-2：宽表横向滚动 + 冻结首列 ---------- */
.app-shell.pc .pc-table-wrap { overflow-x:auto; }
.app-shell.pc .pc-table-wrap table { min-width:1200px; }
.app-shell.pc .pc-table-wrap th:first-child,
.app-shell.pc .pc-table-wrap td:first-child { position:sticky; left:0; background:#fff; z-index:1; }
.app-shell.pc .pc-table-wrap th:first-child { background:#f5f7fa; z-index:2; }

/* ---------- 设置层 P2-3：设置中心左栏竖排 + 数量徽标 ---------- */
.app-shell.pc .set-nav { width:200px; border-right:1px solid #f0f2f5; flex:none; }
.app-shell.pc .set-nav a { display:block; padding:10px 16px; font-size:13px; color:#5b6b7d; text-decoration:none; cursor:pointer; }
.app-shell.pc .set-nav a.on { color:#2b6de5; background:#f0f6ff; border-right:2px solid #2b6de5; }
.app-shell.pc .set-nav .cnt { color:#8a94a0; font-size:12px; margin-left:6px; }
