/* ============================================================
 * 组件库 · 高级感重构：细边框卡片 / 描边按钮 / 墨金徽章
 * ============================================================ */

/* ---------- 卡片（细边框 + 极轻投影，纸感）---------- */
.card { background: var(--card); border: var(--hairline); border-radius: var(--radius); box-shadow: var(--shadow-sm); }
.card-pad { padding: 22px; }
.card-title {
  display: flex; align-items: center; gap: 10px; padding: 17px 22px 0;
  font: 600 14.5px/1.2 var(--font); color: var(--ink-900); letter-spacing: -0.01em;
}

/* ---------- V1.46p UI 走查 P2/P3 组件 ----------
   ① .seg 模式级切换条（同表单互斥模式：国产/进口等）——与页面级 tab（btn 组）拉开
      视觉档位：小号、连体、轻底；页面级导航 tab 永远用 btn 组
   ② .help-tip 字段级帮助徽标（?）：悬停 title 解释，替代把业务规则埋输入框下方小字 */
.seg {
  display: inline-flex; padding: 3px; gap: 2px; border-radius: 10px;
  background: var(--ink-50, #eef3f9); border: 1px solid var(--line);
}
.seg .seg-btn {
  border: none; background: transparent; cursor: pointer; border-radius: 8px;
  padding: 5px 14px; font: 600 12.5px/1.3 var(--font); color: var(--ink-500);
  transition: all .15s; white-space: nowrap;
}
.seg .seg-btn:hover { color: var(--ink-800); }
.seg .seg-btn.on { background: var(--card); color: var(--ink-900); box-shadow: 0 1px 3px rgba(10,18,36,.12); }
.seg .seg-btn.on.seg-gold { color: var(--gold-800); box-shadow: inset 0 0 0 1.5px var(--gold-400, #e6c26b); }
.help-tip {
  display: inline-flex; align-items: center; justify-content: center;
  width: 15px; height: 15px; border-radius: 50%; margin-left: 5px;
  background: var(--ink-100, #d8e1ee); color: var(--ink-500); cursor: help;
  font: 700 10.5px/1 var(--font); user-select: none; vertical-align: middle;
}
.help-tip:hover { background: var(--gold-200, #f4e3b8); color: var(--gold-800); }

/* ---------- 空态升级（P3）：图标 + 文案 + 行动按钮 ---------- */
.empty-cta { text-align: center; padding: 46px 16px; }
.empty-cta .ec-icon { font-size: 44px; opacity: .5; }
.empty-cta .ec-title { font-weight: 700; margin-top: 10px; color: var(--ink-700); }
.empty-cta .ec-sub { margin: 6px 0 16px; }
.empty-cta .ec-actions { display: flex; gap: 10px; justify-content: center; flex-wrap: wrap; }

/* ---------- 认证中心布局（LLLL 批结构收敛：唯一定义，双类冲突/内联样式/属性选择器 hack 全部清除） ---------- */
/* 三步卡横列：卡顶 3px 状态色条（绿=完成 金=进行中 灰=待办）——信息性设计，无动画装饰 */
.pw-steps-row { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; margin-bottom: 24px; }
.pw-steps-row .card { margin-bottom: 0; }
/* R18b 待办工作台形态：认证三步卡缩小下移（快捷办理区占据顶部主位） */
.pw-steps-row.pw-mini { gap: 10px; margin: 14px 0 18px; }
.pw-steps-row.pw-mini .pw-step .card-title { font-size: 13px; padding-top: 10px; gap: 6px; }
.pw-steps-row.pw-mini .pw-step-no { width: 20px; height: 20px; font-size: 10.5px; }
.pw-steps-row.pw-mini .pw-step-no svg { width: 10px; height: 10px; }
.pw-steps-row.pw-mini .pw-step-body { min-height: 0; gap: 8px; padding-top: 8px; padding-bottom: 10px; }
.pw-steps-row.pw-mini .pw-step-desc { font-size: 12px; line-height: 1.5; }
.pw-steps-row.pw-mini .pw-acct-main { font-size: 13px; }
.pw-steps-row.pw-mini .pw-acct-sub { font-size: 11.5px; }
.pw-steps-row.pw-mini .pw-step-act .btn { padding: 4px 10px; font-size: 12px; }
.pw-steps-row.pw-mini .badge { font-size: 10.5px; }
/* R18b 四格快捷办理区（员工加入/签章授权/合同签署/工作台待办）
   R18b-2 穿模修复：minmax(0,1fr) 杜绝网格单元被最小内容宽撑爆（grid 默认
   min-width:auto——不可收缩的按钮会把 1fr 撑出卡片边框压相邻卡）；
   断点 1100→1280 提前降两列（门户壳有侧栏，主区 4 列在 1280 下已不足单按钮+图标+标题） */
/* R18b-3/R18b-4：auto-fit 自适应列（管理员 5 卡/成员 4 卡统一布局；minmax(0) 防撑爆） */
.pw-quick {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(230px, 1fr)); gap: 14px; margin-bottom: 4px;
}
.pw-q-card {
  display: flex; align-items: center; gap: 12px; padding: 16px 16px; min-width: 0; flex-wrap: wrap; position: relative;
  border: 1px solid var(--line-soft); border-radius: 14px; background: var(--paper, #fff);
  transition: border-color .15s, box-shadow .15s;
}
.pw-q-card:hover { border-color: var(--brand-500, #0e9f6e); box-shadow: 0 6px 18px rgba(14,159,110,.08); }
.pw-q-ico {
  flex: none; width: 42px; height: 42px; border-radius: 12px;
  display: flex; align-items: center; justify-content: center;
  background: linear-gradient(160deg, rgba(14,159,110,.12), rgba(14,159,110,.04));
  color: var(--brand-600, #0e9f6e);
}
.pw-q-ico svg { width: 21px; height: 21px; }
.pw-q-main { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 3px; }
.pw-q-main b { font-size: 14.5px; font-weight: 700; line-height: 1.3; color: var(--ink-800, #17252a); }
.pw-q-main small { font-size: 12px; color: var(--ink-400); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
/* 「全部待办」副标题行内链接（R18b-2：替代卡内第二按钮） */
.pw-q-more { font: 600 12px/1.4 var(--font); color: var(--brand-700, #047857); cursor: pointer; }
.pw-q-more:hover { text-decoration: underline; text-underline-offset: 3px; }
.pw-q-card .btn { flex: none; }
.pw-q-todo { border-color: rgba(217,119,6,.35); background: linear-gradient(160deg, rgba(217,119,6,.06), var(--paper, #fff) 55%); }
.pw-q-todo .pw-q-ico { background: linear-gradient(160deg, rgba(217,119,6,.16), rgba(217,119,6,.05)); color: var(--gold-700, #b45309); }
/* R18b-3 待办提醒：有待办=红点徽标+红描边+图标转红；停留期间新增=脉冲扩散 */
.pw-q-card.has-todo { border-color: rgba(220,38,38,.45); }
.pw-q-card.has-todo .pw-q-ico {
  background: linear-gradient(160deg, rgba(220,38,38,.14), rgba(220,38,38,.04));
  color: #dc2626;
}
.pw-q-badge {
  position: absolute; top: -7px; right: -7px; z-index: 2;
  min-width: 18px; height: 18px; border-radius: 9px; padding: 0 5px;
  background: #dc2626; color: #fff;
  font: 700 11px/18px var(--font); text-align: center;
  box-shadow: 0 0 0 3px var(--paper, #fff);
}
.pw-q-card.new-todo { animation: pwqPulse 1.1s ease-in-out 3; }
@keyframes pwqPulse {
  0%, 100% { box-shadow: 0 0 0 0 rgba(220,38,38,0); }
  50% { box-shadow: 0 0 0 7px rgba(220,38,38,.20); }
}
@media (max-width: 640px) { .pw-quick { grid-template-columns: minmax(0, 1fr); } .pw-q-main small { white-space: normal; } }
/* R18b-5：认证完成卡收敛——剩余单卡整行铺满；右上角头像可点态 */
.pw-steps-row.solo { grid-template-columns: 1fr; }
#pt-profile:hover .avatar { box-shadow: 0 0 0 3px rgba(14,159,110,.28); }
#pt-profile .avatar { transition: box-shadow .15s; }
/* R18b-6：待办工作台形态印章卡隐藏——星火点卡单列铺满 */
.pw-main.solo-points { grid-template-columns: 1fr; }
/* R18b-7：待办卡主体可点=全板块明细弹窗 */
#pw-q-todo { cursor: pointer; }
#pw-q-todo button, #pw-q-todo a { cursor: pointer; }
/* 明细弹窗内复用待办条目样式（弹窗内单列更宽松） */
.modal .pw-todo-item { margin-bottom: 6px; border-radius: 10px; }
/* R19 工作流建设独立页：双栏（配置 + 实时预览）窄屏并单列 */
@media (max-width: 960px) { .wfb-grid { grid-template-columns: minmax(0, 1fr) !important; } }
.pw-steps-row .pw-step { position: relative; overflow: hidden; border-radius: 16px; border: 1px solid var(--line-soft); }
.pw-steps-row .pw-step::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 3px; background: var(--line); }
.pw-step.is-done::before { background: var(--jade-500, #0e9f6e); }
.pw-step.is-now::before { background: var(--gold-500, #d97706); }
.pw-step .card-title { font-size: var(--fs-md); font-weight: 650; padding-top: 15px; }
/* 步骤序号圆点：灰=待办 / 实心绿=完成 / 金环=进行中 */
.pw-step-no { width: 26px; height: 26px; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center; font: 600 12px/1 var(--font); background: var(--paper-2); color: var(--ink-400); border: 1.5px solid var(--line); flex: none; }
.pw-step-no svg { width: 12px; height: 12px; }
.pw-step-no.done { background: var(--jade-600, #2e7d32); border-color: var(--jade-600, #2e7d32); color: #fff; }
.pw-step-no.now { background: #fff; border-color: var(--gold-500, #d97706); color: var(--gold-700, #b45309); box-shadow: 0 0 0 3px rgba(217,119,6,.12); }
.pw-step-body { display: flex; flex-direction: column; gap: 12px; min-height: 112px; }
.pw-step-desc { flex: 1; font-size: var(--fs-sm); color: var(--ink-sub); line-height: 1.6; }
.pw-step-act { display: flex; gap: 8px; flex-wrap: wrap; }
.pw-mods { margin-bottom: 6px; display: flex; gap: 6px; flex-wrap: wrap; }
.pw-step-state { margin-left: auto; }
/* 主区双列（印章托管 / 星火点）——SSSS 批栅格对齐：2fr:1fr 与三步卡 1/3 列边界重合，
   上下两排卡片左右边缘对齐，消除"大小不一"的参差感（原 1.9fr 边界 66% 与三等分 66.7% 错位） */
.pw-main { grid-template-columns: 2fr 1fr; align-items: stretch; }
@media (max-width: 1000px) { .pw-steps-row { grid-template-columns: 1fr; } }
@media (max-width: 900px) { .pw-main { grid-template-columns: 1fr; } }
/* 账号管理信息行（姓名/手机号/邮箱） */
.pw-acct { display: flex; flex-direction: column; gap: 8px; }
.pw-acct-row { display: flex; align-items: center; gap: 10px; min-height: 22px; }
.pw-acct-row .k { flex: none; width: 48px; font: 500 12.5px/1 var(--font); color: var(--ink-400); }
.pw-acct-row .v { font: 600 13.5px/1.3 var(--font); color: var(--ink-700, #1f2937); }
/* 印章托管槽：结构类化（label/图/状态行/操作），清除全部内联样式 */
.pw-seal-slots { display: flex; gap: 16px; flex-wrap: wrap; }
.pw-seal-slot { flex: 1; min-width: 200px; border: 1px solid var(--line-soft); background: var(--paper-2, #f7f9f7); border-radius: 10px; padding: 16px 12px; text-align: center; }
.pw-seal-label { margin-bottom: 8px; }
.pw-seal-img { height: 92px; max-width: 100%; object-fit: contain; background: #fff; border-radius: 8px; }
.pw-seal-none { height: 92px; display: flex; align-items: center; justify-content: center; }
.pw-seal-meta { margin-top: 6px; font-size: 12px; }
.pw-seal-slot .btn { width: 100%; justify-content: center; margin-top: 8px; }
.pw-seal-slot.pw-seal-empty { display: flex; align-items: center; justify-content: center; min-height: 148px; }
.pw-seal-note { margin-top: 12px; }
.pw-points .card-body { text-align: center; }
.pw-pt-bal { display: flex; align-items: baseline; justify-content: center; gap: 6px; padding-top: 6px; }
.pw-pt-bal b { font: 800 40px/1.1 var(--font); color: var(--gold-700); letter-spacing: -.01em; font-variant-numeric: tabular-nums; }
.pw-pt-bal span { font: 600 14px/1 var(--font); color: var(--ink-400); }
.pw-pt-more {
  display: block; margin-top: 12px; font: 600 12.5px/1 var(--font);
  color: var(--ink-500); cursor: pointer; letter-spacing: .02em;
}
.pw-pt-more:hover { color: var(--gold-700); }
/* 待办事项条（认证中心顶部一排直达卡）：三色克制——墨炭标题/香槟金悬停/逾期点 danger 红边 */
.pw-todo-card { margin-bottom: 16px; }
.pw-todo-row { display: grid; grid-template-columns: repeat(auto-fit, minmax(230px, 1fr)); gap: 10px; }
.pw-todo-item {
  display: flex; align-items: center; gap: 10px; min-width: 0;
  border: 1px solid var(--line-soft); border-radius: 10px; padding: 11px 13px;
  background: var(--paper, #fff); cursor: pointer;
  transition: border-color .15s, background .15s;
}
.pw-todo-item:hover { border-color: var(--gold-500); background: var(--gold-50); }
.pw-todo-main { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 3px; }
.pw-todo-main b { font: 600 13px/1.35 var(--font); color: var(--ink-900); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.pw-todo-main small { font-size: 12px; line-height: 1.35; color: var(--ink-400); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.pw-todo-arrow { flex: none; font: 600 18px/1 var(--font); color: var(--ink-300); transition: color .15s, transform .15s; }
.pw-todo-item:hover .pw-todo-arrow { color: var(--gold-700); transform: translateX(2px); }
.pw-todo-danger { border-color: rgba(201, 58, 86, .38); }
.pw-todo-danger:hover { border-color: var(--danger); background: var(--danger-bg); }
/* ---- S2 任务层（工作台设计方案 2.2）：焦点带 + 业务线——墨炭/香槟金/玉青三色克制 ---- */
.tl-focus-row { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 10px; }
.tl-focus-item {
  display: flex; align-items: center; gap: 10px; min-width: 0;
  border: 1px solid var(--line-soft); border-radius: 10px; padding: 10px 12px;
  background: var(--paper, #fff); cursor: pointer; transition: border-color .15s, background .15s;
}
.tl-focus-item:hover { border-color: var(--gold-500); background: var(--gold-50); }
.tl-focus-main { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 3px; }
.tl-focus-main b { font: 600 13px/1.35 var(--font); color: var(--ink-900); }
.tl-focus-main small { font-size: 12px; line-height: 1.35; color: var(--ink-400); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.tl-arrow { flex: none; font: 600 18px/1 var(--font); color: var(--ink-300); }
.tl-focus-item:hover .tl-arrow { color: var(--gold-700); }
.tl-overdue { border-color: rgba(201, 58, 86, .38); }
.tl-overdue:hover { border-color: var(--danger); background: var(--danger-bg); }
.tl-line-row { display: flex; align-items: center; gap: 14px; padding: 10px 0; border-bottom: 1px dashed var(--line-soft); flex-wrap: wrap; }
.tl-line-row:last-child { border-bottom: none; }
.tl-line-name { flex: none; display: flex; align-items: center; gap: 8px; min-width: 150px; max-width: 240px; }
.tl-line-name b { font: 650 13.5px/1.3 var(--font); color: var(--ink-900); }
.tl-line-steps { flex: 1; min-width: 260px; display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.tl-sep { color: var(--ink-300); font-size: 11px; }
.tl-step {
  display: inline-flex; align-items: center; gap: 5px; border: 1px solid var(--line-soft);
  border-radius: 8px; padding: 5px 9px; font: 600 12px/1 var(--font); color: var(--ink-800, #1f2937);
  background: var(--paper-2, #f6f8f7); cursor: pointer; transition: border-color .15s, background .15s;
}
.tl-step b { font-weight: 700; color: var(--ink-900); font-variant-numeric: tabular-nums; }
.tl-step i { font-style: normal; background: var(--gold-500); color: #fff; border-radius: 7px; padding: 2px 5px; font-size: 10.5px; }
.tl-step em { font-style: normal; color: var(--gold-700); font-size: 10px; }
.tl-step:hover { border-color: var(--gold-500); background: var(--gold-50); }
.tl-step-hot { border-color: var(--gold-500); background: var(--gold-50); }
.tl-step-focus { box-shadow: 0 0 0 2px rgba(212, 169, 78, .25); }
.tl-step-off { opacity: .5; cursor: default; background: transparent; }
.tl-step-off:hover { border-color: var(--line-soft); background: transparent; }
.card-title svg { color: var(--gold-600); width: 17px; height: 17px; }
.card-title .ct-more { margin-left: auto; font: 600 12.5px/1 var(--font); color: var(--ink-500); cursor: pointer; letter-spacing: .02em; }
.card-title .ct-more:hover { color: var(--gold-700); }
.card-body { padding: 15px 22px 22px; }

.grid { display: grid; gap: 16px; }
.grid-2 { grid-template-columns: repeat(2, 1fr); }
.grid-3 { grid-template-columns: repeat(3, 1fr); }
.grid-4 { grid-template-columns: repeat(4, 1fr); }
@media (max-width: 1180px) { .grid-4 { grid-template-columns: repeat(2, 1fr); } .grid-3 { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 720px)  { .grid-2, .grid-3, .grid-4 { grid-template-columns: 1fr; } }

/* ---------- 数据条（替代彩色 KPI 卡：数字排版为主角）---------- */
.statband {
  display: grid; grid-template-columns: repeat(4, 1fr);
  background: var(--card); border: var(--hairline); border-radius: var(--radius);
  box-shadow: var(--shadow-sm); overflow: hidden;
}
.statband .sb-cell {
  padding: 22px 24px; position: relative; cursor: pointer;
  transition: background .15s;
}
.statband .sb-cell:hover { background: var(--gold-50); }
.statband .sb-cell + .sb-cell { border-left: var(--hairline); }
/* BBBB3：多行 statband 行首格不画左边线（4 列栅格换行后的竖线破口） */
.statband .sb-cell:nth-child(4n+1) { border-left: none; }
.sb-label { font: 600 12px/1 var(--font); letter-spacing: .1em; color: var(--ink-500); }
.sb-num { font: 600 32px/1.15 var(--font); color: var(--ink-900); font-variant-numeric: tabular-nums; letter-spacing: -0.02em; margin-top: 10px; }
.sb-num small { font: 500 13px/1 var(--font); color: var(--ink-400); margin-left: 3px; letter-spacing: 0; }
.sb-sub { font-size: 12px; color: var(--ink-500); margin-top: 5px; }
.sb-cell .sb-gold { color: var(--gold-700); }
@media (max-width: 900px) { .statband { grid-template-columns: repeat(2, 1fr); } .statband .sb-cell:nth-child(3) { border-left: none; } .statband .sb-cell:nth-child(n+3) { border-top: var(--hairline); } }

/* 兼容旧 KPI 卡（降级为统一墨金风格） */
.kpi { display: flex; align-items: center; gap: 14px; padding: 19px 22px; }
.kpi-icon {
  width: 44px; height: 44px; border-radius: 12px; flex-shrink: 0;
  display: flex; align-items: center; justify-content: center;
  background: var(--ink-50); color: var(--ink-600); border: 1px solid var(--ink-100);
}
.kpi-icon svg { width: 21px; height: 21px; }
.kpi-num { font: 600 24px/1.15 var(--font); color: var(--ink-900); font-variant-numeric: tabular-nums; letter-spacing: -0.02em; }
.kpi-num small { font: 500 12.5px/1 var(--font); color: var(--ink-400); margin-left: 2px; }
.kpi-label { font: 600 12px/1.3 var(--font); color: var(--ink-500); letter-spacing: .04em; margin-top: 3px; }
.kpi.k-click { cursor: pointer; transition: transform .15s, box-shadow .15s; }
.kpi.k-click:hover { transform: translateY(-2px); box-shadow: var(--shadow); }

/* ---------- 按钮（描边墨金系：浅底深字）---------- */
.btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 7px;
  height: 38px; padding: 0 17px; border-radius: 10px; font: 600 13.5px/1 var(--font);
  cursor: pointer; border: 1px solid transparent; font-family: var(--font); letter-spacing: .02em;
  transition: all .15s; white-space: nowrap;
}
.btn:active { transform: scale(.985); }
.btn svg { width: 16px; height: 16px; }
.btn-primary { background: var(--ink-900); color: #ece5d3; border-color: var(--ink-900); }
.btn-primary:hover { background: #1f2b25; box-shadow: inset 0 0 0 1px rgba(201,169,97,.5); }
.btn-gold { background: var(--gold-500); color: #14130c; border-color: var(--gold-600); }
.btn-gold:hover { background: var(--gold-400); }
.btn-danger { background: var(--card); color: var(--danger); border-color: #dcbcbc; }
.btn-danger:hover { background: var(--danger-bg); }
.btn-ghost { background: var(--card); color: var(--ink-600); border-color: var(--line); }
.btn-ghost:hover { border-color: var(--ink-300); background: var(--ink-50); }
.btn-sm { height: 30px; padding: 0 12px; font-size: 12px; border-radius: 8px; }
.btn-lg { height: 46px; padding: 0 28px; font-size: 14.5px; border-radius: 12px; }
.btn-block { width: 100%; }
.btn[disabled] { opacity: .45; cursor: not-allowed; }

/* ---------- 表格（杂志式：细线 + 充足留白）---------- */
.tbl-wrap { overflow-x: auto; border-radius: var(--radius-sm); border: 1px solid var(--line-soft); }
table.tbl { width: 100%; border-collapse: collapse; font-size: 13px; background: var(--card); min-width: 640px; }
.tbl th {
  text-align: left; padding: 11px 16px; background: var(--ink-50); color: var(--ink-500);
  font: 600 11.5px/1.3 var(--font); white-space: nowrap; letter-spacing: .06em;
  border-bottom: 1px solid var(--line);
}
.tbl td { padding: 12px 16px; border-bottom: 1px solid var(--line-soft); vertical-align: middle; color: var(--ink-700); }
.tbl tr:last-child td { border-bottom: none; }
.tbl tbody tr { transition: background .12s; }
.tbl tbody tr.clickable { cursor: pointer; }
.tbl tbody tr:hover { background: var(--gold-50); }
.tbl .num { font-variant-numeric: tabular-nums; font-weight: 600; color: var(--ink-900); }
.tbl .sub { font-size: 12px; color: var(--ink-500); }
.tbl-empty { text-align: center; padding: 40px 10px; color: var(--ink-400); font-size: 12.5px; }

/* ---------- 徽章（墨底金边 / 中性底，克制）---------- */
.badge {
  display: inline-flex; align-items: center; gap: 5px; padding: 3px 9px; border-radius: 6px;
  font: 600 11px/1.5 var(--font); white-space: nowrap; letter-spacing: .02em;
}
.badge .bd-dot { width: 5px; height: 5px; border-radius: 50%; background: currentColor; }
.b-ok { background: var(--jade-50); color: var(--jade-700); box-shadow: inset 0 0 0 1px var(--jade-200); }
.b-warn { background: var(--gold-50); color: var(--gold-800); box-shadow: inset 0 0 0 1px var(--gold-200); }
.b-danger { background: var(--danger-bg); color: var(--danger); box-shadow: inset 0 0 0 1px #e3c9c9; }
.b-info { background: var(--info-bg); color: var(--info); box-shadow: inset 0 0 0 1px #d3dde5; }
.b-purple { background: var(--purple-bg); color: var(--purple); box-shadow: inset 0 0 0 1px #ddd6e4; }
.b-gold { background: var(--ink-900); color: var(--gold-400); box-shadow: inset 0 0 0 1px rgba(201,169,97,.45); }
.b-gray { background: var(--ink-50); color: var(--ink-500); box-shadow: inset 0 0 0 1px var(--ink-100); }
.b-brand { background: var(--jade-50); color: var(--jade-700); box-shadow: inset 0 0 0 1px var(--jade-200); }

/* 哈希胶囊（链上存证可视：金箔质感） */
.hash-chip { cursor: pointer; /* R42aa：点击复制哈希（旧版无绑定也无手势） */
  font: 500 11px/1.5 var(--mono); background: var(--gold-50); color: var(--gold-800);
  border: 1px dashed var(--gold-400); border-radius: 6px; padding: 2px 8px; cursor: pointer;
  display: inline-flex; align-items: center; gap: 5px; max-width: 220px; overflow: hidden;
}
.hash-chip svg { width: 11px; height: 11px; flex-shrink: 0; }
.hash-chip span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.hash-chip:hover { background: var(--gold-100); }

/* ---------- 溯源时间轴（玉金主轴）---------- */
.timeline { position: relative; padding-left: 6px; }
.timeline::before {
  content: ''; position: absolute; left: 16px; top: 16px; bottom: 16px; width: 1.5px;
  background: linear-gradient(180deg, var(--gold-500), var(--line)); border-radius: 2px;
}
.tl-item { position: relative; padding: 0 0 22px 42px; }
.tl-item:last-child { padding-bottom: 4px; }
.tl-dot {
  position: absolute; left: 5px; top: 5px; width: 23px; height: 23px; border-radius: 50%;
  display: flex; align-items: center; justify-content: center; color: #fff;
  box-shadow: 0 0 0 4px var(--paper), 0 2px 6px rgba(19,26,23,.18); z-index: 1;
}
.tl-dot svg { width: 12px; height: 12px; }
.tl-stage { display: flex; align-items: center; gap: 9px; flex-wrap: wrap; }
.tl-title { font: 600 13.5px/1.4 var(--font); color: var(--ink-900); }
.tl-detail { font-size: 13px; color: var(--ink-600); margin-top: 3px; line-height: 1.7; }
.tl-meta { display: flex; gap: 12px; flex-wrap: wrap; margin-top: 6px; font-size: 12px; color: var(--ink-500); align-items: center; }
.tl-meta .who { display: inline-flex; align-items: center; gap: 5px; }
.tl-meta .who::before { content: ''; width: 5px; height: 5px; border-radius: 50%; background: var(--gold-600); }

/* ---------- 全链路流程图 ---------- */
.flowmap { display: flex; align-items: stretch; gap: 0; overflow-x: auto; padding: 8px 2px 12px; }
.fm-node { flex: 1; min-width: 104px; text-align: center; position: relative; padding: 0 4px; }
.fm-node .fm-icon {
  width: 44px; height: 44px; margin: 0 auto 8px; border-radius: 13px;
  display: flex; align-items: center; justify-content: center; color: #fff;
  box-shadow: 0 6px 16px rgba(11,16,14,.14), inset 0 1px 0 rgba(255,255,255,.22); position: relative; z-index: 1;
}
.fm-node .fm-icon svg { width: 21px; height: 21px; }
.fm-node .fm-name { font: 600 12px/1.3 var(--font); color: var(--ink-700); }
.fm-node .fm-count { font: 600 17px/1.3 var(--font); color: var(--ink-900); font-variant-numeric: tabular-nums; }
.fm-node .fm-count small { font: 500 10.5px/1 var(--font); color: var(--ink-400); }
.fm-node::after {
  content: ''; position: absolute; right: -11%; top: 21px; width: 22%; height: 1.5px;
  background: repeating-linear-gradient(90deg, var(--ink-200) 0 5px, transparent 5px 9px);
}
.fm-node:last-child::after { display: none; }
.fm-node.clickable { cursor: pointer; }
.fm-node.clickable:hover .fm-icon { transform: translateY(-2px); transition: transform .15s; }

/* ---------- 仓库平面图 ---------- */
.wh-map { display: flex; flex-direction: column; gap: 13px; }
.wh-area-title { font: 600 12px/1 var(--font); color: var(--ink-600); margin-bottom: 7px; display: flex; gap: 8px; align-items: center; letter-spacing: .08em; }
.wh-area-title::before { content: ''; width: 7px; height: 7px; border-radius: 2px; background: var(--jade-600); }
.wh-cells { display: grid; grid-template-columns: repeat(6, 1fr); gap: 7px; }
.wh-cell {
  aspect-ratio: 1.15; border-radius: 9px; border: 1px solid var(--line-soft); background: var(--ink-50);
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  font-size: 12px; color: var(--ink-400); cursor: pointer; transition: all .13s; padding: 2px; text-align: center;
}
.wh-cell:hover { border-color: var(--gold-500); transform: translateY(-1px); box-shadow: var(--shadow-sm); }
.wh-cell .wc-code { font: 600 10.5px/1.3 var(--mono); color: var(--ink-600); }
.wh-cell .wc-vol { font-size: 12px; }
.wh-cell.occupied { background: var(--jade-50); border-color: var(--jade-200); }
.wh-cell.occupied .wc-code { color: var(--jade-800); }
.wh-legend { display: flex; gap: 16px; flex-wrap: wrap; font-size: 12px; color: var(--ink-400); margin-top: 11px; }
.wh-legend span { display: inline-flex; align-items: center; gap: 6px; }
.wh-legend i { width: 11px; height: 11px; border-radius: 4px; display: inline-block; border: 1px solid var(--line); }

/* ---------- 双码卡 ---------- */
.dualcode { display: flex; gap: 14px; align-items: stretch; }
.dualcode .dc-item {
  flex: 1; border: 1px dashed var(--ink-200); border-radius: 12px; padding: 13px; text-align: center; background: var(--ink-50);
}
.dualcode .dc-qr { width: 72px; height: 72px; margin: 0 auto 8px; border-radius: 8px; background: #fff; border: 1.5px solid var(--ink-900); position: relative; overflow: hidden; }
.dualcode .dc-qr::before {
  content: ''; position: absolute; inset: 8px; border-radius: 4px;
  background:
    linear-gradient(90deg, var(--ink-900) 25%, transparent 25%) 0 0/12px 12px,
    linear-gradient(90deg, var(--ink-900) 25%, transparent 25%) 0 6px/12px 12px;
  opacity: .8;
}
.dualcode .dc-label { font: 600 12px/1.3 var(--font); color: var(--ink-700); }
.dualcode .dc-code { font: 500 11px/1.4 var(--mono); color: var(--ink-400); margin-top: 2px; }
.dualcode .dc-bind { align-self: center; font: 600 19px/1 var(--font); color: var(--gold-600); flex-shrink: 0; }

/* ---------- 弹窗 ---------- */
.modal-mask { position: fixed; inset: 0; background: rgba(11,16,14,.55); backdrop-filter: blur(4px); z-index: 90; display: flex; align-items: center; justify-content: center; padding: 18px; }
.modal {
  background: var(--card); border-radius: 18px; box-shadow: var(--shadow-lg);
  width: min(680px, 96vw); max-height: 88vh; display: flex; flex-direction: column; animation: pop .18s ease;
  border: 1px solid rgba(255,255,255,.6);
}
.modal.wide { width: min(880px, 96vw); }
@keyframes pop { from { transform: scale(.97); opacity: 0; } }
.modal-head { display: flex; align-items: center; gap: 10px; padding: 17px 22px; border-bottom: var(--hairline); }
.modal-head h3 { flex: 1; font: 600 16px/1.3 var(--font); color: var(--ink-900); }
.modal-close { width: 32px; height: 32px; border-radius: 9px; border: 1px solid var(--line); background: var(--card); cursor: pointer; color: var(--ink-500); font-size: 15px; }
.modal-close:hover { background: var(--ink-50); }
.modal-body { padding: 20px 22px; overflow-y: auto; }
.modal-foot { display: flex; justify-content: flex-end; gap: 10px; padding: 15px 22px; border-top: var(--hairline); }

/* ---------- 表单 · 高级感体系 ---------- */
.form-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 20px 22px; }
.form-grid .full { grid-column: 1 / -1; }
@media (max-width: 640px) { .form-grid { grid-template-columns: 1fr; gap: 16px; } }

/* 表单分组（视觉层级：金色竖标 + 组标题 + 说明） */
.form-section { margin-bottom: 26px; }
.form-section:last-child { margin-bottom: 0; }
.form-section-title {
  display: flex; align-items: baseline; gap: 9px; margin-bottom: 15px;
  font: 600 14px/1.2 var(--font); color: var(--ink-900);
}
.form-section-title::before {
  content: ''; align-self: center; width: 3px; height: 15px;
  background: linear-gradient(180deg, var(--gold-500), var(--gold-700)); border-radius: 2px;
}
.form-section-title small { font: 400 12px/1 var(--font); color: var(--ink-400); margin-left: auto; }

.field label {
  display: block; font: 600 13px/1.3 var(--font); color: var(--ink-700);
  margin-bottom: 7px; letter-spacing: .02em;
}
.field label .req { color: var(--gold-600); margin-left: 2px; font-weight: 700; }
.field input, .field select, .field textarea {
  width: 100%; height: 44px; border: 1px solid var(--line); border-radius: 11px;
  padding: 0 15px; font: 400 14.5px/1.2 var(--font); background: var(--card);
  color: var(--ink-900); outline: none; font-family: var(--font);
  transition: border-color .16s, box-shadow .16s, background .16s;
}
.field input::placeholder, .field textarea::placeholder { color: var(--ink-300); }
.field textarea { height: 92px; padding: 11px 15px; resize: vertical; line-height: 1.6; }
.field input:hover, .field select:hover, .field textarea:hover { border-color: var(--ink-300); }
.field input:focus, .field select:focus, .field textarea:focus {
  border-color: var(--gold-500); box-shadow: 0 0 0 3.5px rgba(201,169,97,.15); background: var(--gold-50);
}
.field .hint { font-size: 12px; color: var(--ink-400); margin-top: 6px; line-height: 1.55; }
.field-inline { display: flex; gap: 10px; align-items: center; }

/* ---------- 勾选卡（替代原生小方框：大触控区 + 状态可视） ---------- */
.check-card {
  display: flex; align-items: center; gap: 11px;
  border: 1px solid var(--line); border-radius: 11px; padding: 12px 15px;
  cursor: pointer; transition: all .15s; background: var(--card); user-select: none;
  position: relative; overflow: hidden;
}
.check-card:hover { border-color: var(--gold-400); background: var(--gold-50); }
.check-card.on { border-color: var(--jade-600); background: var(--jade-50); box-shadow: inset 0 0 0 1px var(--jade-400); }
.check-card .cc-box {
  width: 20px; height: 20px; border-radius: 6px; flex-shrink: 0;
  border: 1.5px solid var(--ink-200); background: var(--card);
  display: flex; align-items: center; justify-content: center;
  transition: all .15s; color: transparent;
}
.check-card .cc-box svg { width: 13px; height: 13px; }
.check-card.on .cc-box { background: var(--jade-600); border-color: var(--jade-600); color: #fff; }
.check-card .cc-text { font: 600 13.5px/1.3 var(--font); color: var(--ink-700); letter-spacing: .01em; }
.check-card.on .cc-text { color: var(--jade-800); }
.check-card .cc-sub { font: 400 11.5px/1.3 var(--font); color: var(--ink-400); margin-top: 2px; }
.check-card .cc-check { position: absolute; opacity: 0; pointer-events: none; }
.check-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(185px, 1fr)); gap: 10px; }

/* ---------- 木链通平台门户（布局参照 e-contract 后台：顶栏 + 左侧功能菜单 + 右侧内容） ---------- */
.portal-shell { min-height: 100vh; display: flex; flex-direction: column; background: #fff; }
.portal-top { display: flex; align-items: center; justify-content: flex-start; gap: 16px; padding: 14px 28px; background: #fff; border-bottom: var(--hairline); flex-wrap: wrap; position: static; z-index: 40; }
.pt-brand { display: flex; align-items: center; gap: 12px; }
.pt-name { font: 800 19px/1.2 var(--font); color: var(--ink-800); letter-spacing: .04em; }
.pt-sub { font-size: 11.5px; color: var(--ink-400); margin-top: 2px; }
.pt-right { display: flex; align-items: center; gap: 14px; margin-left: auto; }
.pt-user { display: flex; align-items: center; gap: 8px; font-size: 13px; color: var(--ink-700); }
.pt-user small { display: block; color: var(--ink-400); font-size: 12px; }
.pt-user .avatar { width: 32px; height: 32px; border-radius: 50%; background: var(--jade-600); color: #fff; display: flex; align-items: center; justify-content: center; font-weight: 700; }
.pt-logout { cursor: pointer; color: var(--ink-400); font-size: 13px; }
.pt-logout:hover { color: var(--danger); }
.portal-body { flex: 1; display: flex; align-items: stretch; min-height: 0; }
/* 左侧功能菜单（e-contract el-menu 式：分组标题 + 块级菜单项 + 激活高亮） */
.portal-nav { width: 232px; flex: none; background: #fff; border-right: var(--hairline); padding: 10px 12px 24px; overflow-y: auto; position: sticky; top: 62px; height: calc(100vh - 62px); }
/* MMMM 批：分组标题统一（原 370 与 1465 两处覆盖打架合并）——12px/600/0.1em，ink-500 提对比度 */
.portal-nav .ps-group { padding: 15px 12px 6px; font: 600 12px/1 var(--font); color: var(--ink-500); letter-spacing: .1em; }
.portal-nav .ps-group:first-child { padding-top: 6px; }
.portal-nav a { display: flex; align-items: center; gap: 10px; padding: 10px 13px; margin: 2px 0; border-radius: 9px; font-size: 14.5px; font-weight: 600; color: var(--ink-600); cursor: pointer; position: relative; }
.portal-nav a svg { width: 16px; height: 16px; flex: none; }
.portal-nav a:hover { background: #f6f7f6; color: var(--ink-900); }
.portal-nav a.on { background: #f4f6f4; color: var(--ink-900); }
.portal-nav a.on::before { content: ''; position: absolute; left: 0; top: 8px; bottom: 8px; width: 3px; border-radius: 3px; background: var(--jade-600, #0e9f6e); }
.portal-nav a.ps-act { color: var(--ink-600); }
.portal-nav a.ps-act.on, .portal-nav a.ps-act:hover { background: #f4f6f4; color: var(--ink-900); }
.portal-nav a.ps-act.on::before { background: var(--jade-600, #0e9f6e); }
.portal-nav .ps-side-foot { margin-top: 18px; padding: 12px 12px 0; border-top: 1px dashed var(--line-soft); font-size: 11.5px; color: var(--ink-500); line-height: 1.7; }
.portal-main { flex: 1; width: 100%; max-width: none; margin: 0 auto; padding: 22px 28px 48px; min-width: 0; }
@media (max-width: 900px) {
  .portal-body { flex-direction: column; }
  .portal-nav { width: 100%; position: static; height: auto; display: flex; flex-wrap: wrap; gap: 2px 6px; border-right: none; border-bottom: var(--hairline); padding: 8px 14px; }
  .portal-nav .ps-group { display: none; }
  .portal-nav a { padding: 8px 12px; background: var(--paper-2); border-radius: 999px; }
  .portal-nav a.on::before { display: none; }
  .portal-nav .ps-side-foot { display: none; }
}
/* 平台功能入口卡（首页五宫格） */
/* 业务板块大卡 */
.pi-bizs { display: grid; grid-template-columns: repeat(2, 1fr); gap: 16px; }
.pi-bizs-one { grid-template-columns: 1fr; max-width: 640px; }
.pi-biz { position: relative; padding: 22px 22px 18px; border-radius: 16px; border: 1.5px solid var(--line-soft); background: linear-gradient(135deg, #fff 55%, var(--paper-2)); cursor: pointer; transition: all .18s ease; overflow: hidden; }
.pi-biz:hover { transform: translateY(-3px); box-shadow: 0 10px 26px rgba(26, 122, 82, .14); border-color: var(--brand-500); }
.pi-biz-main { border-color: var(--brand-500); background: linear-gradient(135deg, #fff 40%, var(--jade-50)); }
.pi-biz.off { opacity: .62; cursor: not-allowed; }
.pb-icon { width: 46px; height: 46px; border-radius: 13px; background: var(--jade-50); color: var(--jade-700); display: flex; align-items: center; justify-content: center; margin-bottom: 12px; }
.pb-icon svg { width: 26px; height: 26px; }
/* 横版 logo（如木链通 691×166）：图标位改为通栏胶囊条，logo 等比缩放完整显示 */
.pb-icon.wide-logo { width: auto; max-width: 100%; height: 42px; padding: 0 14px; }
.pb-icon.wide-logo img { height: 26px; width: auto; max-width: 200px; object-fit: contain; }
.pi-biz:not(.pi-biz-main) .pb-icon { background: var(--purple-bg); color: var(--purple); }
.pb-name { display: flex; align-items: center; gap: 8px; font: 800 17px/1.3 var(--font); color: var(--ink-800); margin-bottom: 6px; }
.pb-sub { font-size: 12.5px; color: var(--ink-500); line-height: 1.7; margin-bottom: 12px; }
.pb-foot { font-size: 12.5px; font-weight: 700; color: var(--brand-700); }
.pi-biz.off .pb-foot { color: var(--ink-400); }
/* 业务系统侧栏返回门户 */
.back-portal { display: flex; align-items: center; gap: 8px; margin: 10px 12px 4px; padding: 9px 12px; border-radius: 10px; background: var(--gold-50); color: var(--gold-800); font-size: 12.5px; font-weight: 700; cursor: pointer; }
.back-portal:hover { background: var(--gold-100); }
.back-portal svg { width: 14px; height: 14px; }
/* 农产品溯源系统（Web 端） */
.agri-lanes { display: grid; grid-template-columns: repeat(6, 1fr); gap: 10px; overflow-x: auto; }
.agri-lane { min-width: 128px; background: var(--paper-2); border-radius: 12px; padding: 10px; }
.al-head { margin-bottom: 8px; }
.al-items { display: flex; flex-direction: column; gap: 6px; min-height: 64px; }
.al-item { background: #fff; border: 1px solid var(--line-soft); border-radius: 9px; padding: 7px 9px; cursor: pointer; transition: all .15s ease; }
.al-item:hover { border-color: var(--brand-500); transform: translateY(-1px); }
.al-item b { display: block; font-size: 12px; color: var(--ink-800); }
.al-item span { display: block; font: 400 10px/1.4 var(--mono); color: var(--ink-400); }
.agri-meta { display: flex; gap: 18px; flex-wrap: wrap; font-size: 12.5px; color: var(--ink-600); margin-bottom: 16px; }
.agri-timeline { position: relative; padding-left: 22px; border-left: 2px solid var(--line); margin-left: 6px; }
.atl-item { position: relative; padding: 0 0 18px 14px; }
.atl-item:last-child { padding-bottom: 2px; }
.atl-dot { position: absolute; left: -29px; top: 4px; width: 12px; height: 12px; border-radius: 50%; background: var(--brand-600); box-shadow: 0 0 0 3px rgba(42,154,104,.15); }
.atl-title { font: 650 13.5px/1.4 var(--font); color: var(--ink-800); }
.atl-detail { font-size: 12.5px; color: var(--ink-600); margin: 3px 0; }

/* 农产大屏 */
.am-funnel { display: flex; flex-direction: column; gap: 9px; }
.am-f-row { display: flex; align-items: center; gap: 10px; }
.am-f-name { width: 72px; font-size: 12px; color: var(--ink-600); text-align: right; flex: none; }
.am-f-bar { flex: 1; height: 16px; background: var(--paper-2); border-radius: 8px; overflow: hidden; }
.am-f-bar i { display: block; height: 100%; border-radius: 8px; transition: width .6s ease; }
.am-f-row b { width: 30px; font-size: 13px; }
.am-days { display: flex; align-items: flex-end; gap: 8px; height: 150px; padding-top: 8px; }
.am-day { flex: 1; display: flex; flex-direction: column; align-items: center; gap: 5px; height: 100%; }
.am-day span { font: 700 12px/1 var(--font); color: var(--brand-700); }
.am-d-bar { flex: 1; width: 100%; max-width: 34px; background: var(--paper-2); border-radius: 6px 6px 2px 2px; display: flex; align-items: flex-end; overflow: hidden; }
.am-d-bar i { display: block; width: 100%; background: linear-gradient(180deg, #2a9a68, #1e7a52); border-radius: 6px 6px 0 0; }
.am-day small { font-size: 12px; color: var(--ink-400); }
.am-ent { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 8px 0; border-bottom: 1px dashed var(--line-soft); flex-wrap: wrap; }
.am-ent:last-child { border-bottom: none; }
.am-ent b { font-size: 13px; color: var(--ink-800); }
.am-ent > span { display: flex; gap: 5px; flex-wrap: wrap; }
.am-events { display: flex; flex-direction: column; gap: 10px; max-height: 300px; overflow-y: auto; }
.am-ev { display: flex; gap: 10px; align-items: flex-start; }
/* 合格证（打印友好） */
.agri-cert-card { max-width: 640px; background: #fff; border: 2px solid var(--ink-900); border-radius: 10px; padding: 22px 26px; }
.cert-head { display: flex; justify-content: space-between; align-items: center; border-bottom: 2px solid var(--ink-900); padding-bottom: 10px; margin-bottom: 14px; }
.cert-head b { font-size: 19px; letter-spacing: .18em; color: var(--ink-900); }
.cert-head span { font-family: var(--mono); font-size: 12px; color: var(--ink-600); }
.cert-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 10px 18px; }
.cert-grid > div { display: flex; flex-direction: column; gap: 2px; }
.cert-grid label { font-size: 12px; color: var(--ink-400); }
.cert-grid b, .cert-grid span { font-size: 13.5px; color: var(--ink-800); }
.cert-full { grid-column: 1 / -1; }
.cert-foot { margin-top: 14px; padding-top: 10px; border-top: 1px dashed var(--line); font-size: 12px; color: var(--ink-500); }
@media print {
  .no-print, .sidebar, .topbar, .m-bottombar, .portal-nav, .portal-top { display: none !important; }
  .agri-cert-card { border-color: #000; }
  .content, .portal-main { padding: 0 !important; max-width: none !important; }
}

/* 农产品溯源系统承载页（手机壳居中内嵌） */
.sst-shell { display: flex; justify-content: center; padding: 8px 0 28px; }
.sst-phone {
  width: min(430px, 100%); height: calc(100vh - 210px); min-height: 560px;
  border-radius: 26px; overflow: hidden; position: relative;
  border: 1px solid rgba(255,143,77,.25);
  box-shadow: 0 30px 80px rgba(0,0,0,.5), 0 0 40px rgba(255,143,77,.08), inset 0 0 0 6px #0b1220;
  background: #05080f;
}
.sst-phone iframe { width: 100%; height: 100%; border: none; display: block; }
@media (max-width: 1000px) { .pi-bizs { grid-template-columns: 1fr; } .portal-main { padding: 16px 14px 40px; } .portal-top, .portal-nav { padding-left: 14px; padding-right: 14px; } }

/* 业务板块两级权限分配弹窗 */
.biz-block { border: 1.5px solid var(--line-soft); border-radius: 14px; padding: 12px; background: #fff; }
.biz-head { border: none; padding: 12px 14px; background: var(--paper-2); border-radius: 10px; cursor: pointer; }
.biz-head.on { background: var(--jade-50); box-shadow: inset 0 0 0 1.5px var(--jade-500); }
.biz-head .cc-text { display: flex; align-items: center; font-size: 14.5px; }
.biz-head .cc-text svg { width: 17px; height: 17px; margin-right: 4px; }
.biz-body { margin: 12px 2px 2px; padding: 12px; border-radius: 10px; background: var(--paper); border: 1px dashed var(--line-soft); }

/* ---------- 星火签认证工作台（专属认证页面样式；三步卡布局已收敛至文件头部 .pw-steps-row 唯一定义） ---------- */
/* 完成态英雄卡 */
.pw-done-hero { display: flex; align-items: center; gap: 16px; padding: 26px 24px; border-radius: 14px; background: var(--jade-50); border: 1px solid var(--jade-200); }
.pw-done-hero svg { width: 44px; height: 44px; color: var(--jade-600); flex: none; }
.pwd-title { font: 700 17px/1.4 var(--font); color: var(--ink-800); }
.pw-next { margin-top: 14px; font-size: 13px; color: var(--ink-500); }
.pw-link { color: var(--brand-700); font-weight: 600; cursor: pointer; text-decoration: underline; text-underline-offset: 3px; margin-right: 6px; }
/* 认证流程页 */
.pw-flow { max-width: 720px; }
.pw-flow-steps { display: flex; gap: 10px; margin-bottom: 20px; flex-wrap: wrap; }
.pw-fs { flex: 1; min-width: 120px; text-align: center; padding: 9px 10px; border-radius: 10px; background: var(--paper-2); color: var(--ink-400); font: 600 12.5px/1.3 var(--font); }
.pw-fs.done { background: var(--jade-50); color: var(--jade-700); }
.pw-fs.doing { background: var(--gold-50); color: var(--gold-800); box-shadow: inset 0 0 0 1px var(--gold-200); }
.pw-intro { padding: 16px 18px; border-radius: 12px; background: var(--paper-2); margin-bottom: 18px; }
.pw-intro p { font-size: 13.5px; line-height: 1.9; color: var(--ink-600); }
.pw-form-foot { display: flex; align-items: center; gap: 14px; margin-top: 18px; flex-wrap: wrap; }
.pw-url-row { display: flex; gap: 8px; align-items: center; }
.pw-url-row input { flex: 1; }

/* ---------- 认证页 v2（布局参照安信星火签 web 端：居中卡片 + el-steps 步骤条 + 块级大按钮；
            V1.52 合并历次 padding/宽度补丁为单一定义：720px 宽 + 紧凑内距） ---------- */
.pw-card { max-width: 720px; margin: 8px auto 0; background: #fff; border: 1px solid var(--line-soft); border-radius: 14px; padding: 26px 30px 22px; box-shadow: 0 1px 4px rgba(11,16,14,.05); }
.pw-card-head { text-align: center; margin-bottom: 24px; }
.pw-card-head .pwc-icon { width: 52px; height: 52px; border-radius: 13px; display: inline-flex; align-items: center; justify-content: center; background: #eef7f2; color: var(--jade-700, #0b7a55); margin-bottom: 10px; }
.pw-card-head .pwc-icon svg { width: 26px; height: 26px; }
.pw-card-head h2 { font: 700 19px/1.4 var(--font); color: var(--ink-900); margin: 0 0 4px; }
.pw-card-head .pwc-sub { font-size: 13px; color: var(--ink-500); }
/* el-steps 式步骤条：圆形节点 + 连接线 */
.pw-stepper { display: flex; align-items: flex-start; margin: 2px 0 18px; }
.pw-step-item { flex: 1; display: flex; flex-direction: column; align-items: center; position: relative; min-width: 0; }
.pw-step-dot { width: 30px; height: 30px; border-radius: 50%; display: flex; align-items: center; justify-content: center; font: 600 13px/1 var(--font); background: var(--paper-2); color: var(--ink-400); border: 2px solid var(--line); position: relative; z-index: 1; }
.pw-step-item.done .pw-step-dot { background: var(--jade-600, #2e7d32); border-color: var(--jade-600, #2e7d32); color: #fff; }
.pw-step-item.doing .pw-step-dot { background: var(--jade-600, #0e9f6e); border-color: var(--jade-600, #0e9f6e); color: #fff; box-shadow: 0 0 0 4px rgba(14,159,110,.14); }
.pw-step-item:not(:first-child)::before { content: ''; position: absolute; top: 15px; right: calc(50% + 20px); left: calc(-50% + 20px); height: 2px; background: var(--line); }
.pw-step-item.done:not(:first-child)::before, .pw-step-item.doing:not(:first-child)::before { background: var(--jade-500, #0e9f6e); }
.pw-step-label { margin-top: 8px; font: 600 12.5px/1.35 var(--font); color: var(--ink-400); text-align: center; }
.pw-step-item.done .pw-step-label { color: var(--jade-700); }
.pw-step-item.doing .pw-step-label { color: var(--jade-700, #0b7a55); }
/* 块级大按钮（登录/认证提交） */
.btn-block-lg { width: 100%; height: 46px; font-size: 15px; font-weight: 700; border-radius: 10px; letter-spacing: 2px; margin-top: 6px; }
.pw-card .field { margin-bottom: 16px; }
.pw-card .notice { margin-bottom: 16px; }
.pw-card-foot { text-align: center; font-size: 12.5px; color: var(--ink-400); margin-top: 18px; }
.pw-card-foot .pw-link { margin: 0 4px; }
@media (max-width: 640px) { .pw-card { padding: 24px 18px; } }

/* ---------- 门户首页 v2（布局参照 e-contract 控制台：居中容器 + el-tabs 页签 + 工具行 + 内容面板） ---------- */
.pi-wrap { max-width: 1200px; margin: 0 auto; }
.pi-biz.is-dim { display: none; }
/* V1.53 全站排版语义类（批次收编：替代高频内联样式） */
.mono { font-family: var(--mono); }
.code-link { font-family: var(--mono); cursor: pointer; color: var(--brand-700); }
.t-ellip { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
/* 前置条件门卡 */
.pw-gate { display: flex; gap: 12px; align-items: flex-start; padding: 18px 20px; border-radius: 12px; background: #fff; border: 1px solid var(--line-soft); border-left: 3px solid var(--jade-600, #0e9f6e); margin-bottom: 16px; max-width: 720px; }
.pw-gate svg { width: 22px; height: 22px; color: var(--jade-600, #0e9f6e); flex: none; margin-top: 2px; }
.pw-gate b { font-size: 14.5px; color: var(--ink-800); display: block; margin-bottom: 3px; }
/* 企业详情只读表单 */
.pw-ent-detail { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; margin-top: 16px; max-width: 900px; }
@media (max-width: 1100px) { .pw-ent-detail { grid-template-columns: 1fr; } }

/* ---------- 提示条 ---------- */
.notice { display: flex; gap: 10px; padding: 13px 17px; border-radius: 12px; font-size: 13px; align-items: flex-start; margin-bottom: 14px; line-height: 1.65; }
.notice svg { width: 16px; height: 16px; flex-shrink: 0; margin-top: 1.5px; }
.n-info { background: var(--info-bg); color: var(--info); }
.n-ok { background: var(--jade-50); color: var(--jade-700); }
.n-warn { background: var(--gold-50); color: var(--gold-800); }
.n-danger { background: var(--danger-bg); color: var(--danger); }

/* ---------- Toast ---------- */
#toast-root { position: fixed; top: 18px; left: 50%; transform: translateX(-50%); z-index: 120; display: flex; flex-direction: column; gap: 8px; align-items: center; }
.toast {
  display: flex; align-items: center; gap: 9px; background: var(--ink-900); color: #ede8da;
  border-radius: 11px; padding: 11px 19px; font: 500 13px/1.4 var(--font); box-shadow: var(--shadow-lg); animation: slide .22s ease;
  max-width: min(480px, 90vw); box-shadow: 0 12px 40px rgba(11,16,14,.4), inset 0 0 0 1px rgba(201,169,97,.28);
}
.toast svg { width: 15px; height: 15px; flex-shrink: 0; color: var(--gold-500); }
.toast.t-err svg { color: #d99a9a; }
@keyframes slide { from { transform: translateY(-12px); opacity: 0; } }

/* ---------- 图表 ---------- */
.chart-box { width: 100%; }
.chart-box svg { display: block; width: 100%; height: auto; }
.chart-legend { display: flex; gap: 16px; flex-wrap: wrap; font-size: 12px; color: var(--ink-500); margin-top: 9px; }
.chart-legend span { display: inline-flex; gap: 6px; align-items: center; }
.chart-legend i { width: 10px; height: 10px; border-radius: 3px; }

/* ---------- RAC 引擎可视化 ---------- */
.rac-layers { display: flex; flex-direction: column; gap: 9px; }
.rac-layer { border: 1px solid var(--line-soft); border-radius: 11px; overflow: hidden; }
.rac-layer-head { display: flex; align-items: center; gap: 10px; padding: 10px 14px; background: var(--ink-50); }
.rac-layer-head .rl-tag { font: 700 11px/1 var(--mono); color: #fff; background: var(--ink-800); border-radius: 6px; padding: 3px 8px; }
.rac-layer-head .rl-name { font: 600 13px/1.2 var(--font); color: var(--ink-900); }
.rac-layer-head .rl-mods { margin-left: auto; display: flex; gap: 6px; flex-wrap: wrap; }
.rl-mod { font: 600 10px/1.4 var(--font); padding: 2px 8px; border-radius: 999px; background: var(--card); border: 1px solid var(--line); color: var(--ink-400); white-space: nowrap; }
.rac-node-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(205px, 1fr)); gap: 10px; }
.rac-node { border: 1px solid var(--line-soft); border-radius: 11px; padding: 12px 14px; background: var(--card); }
.rac-node .rn-head { display: flex; align-items: center; gap: 8px; margin-bottom: 9px; }
.rac-node .rn-name { font: 600 12.5px/1.2 var(--font); color: var(--ink-900); flex: 1; }
.meter { height: 6px; border-radius: 5px; background: var(--ink-100); overflow: hidden; margin: 3px 0 8px; }
.meter i { display: block; height: 100%; border-radius: 5px; background: linear-gradient(90deg, var(--jade-500), var(--jade-700)); transition: width .3s; }
.meter.m-warn i { background: linear-gradient(90deg, var(--gold-500), var(--gold-700)); }
.meter.m-danger i { background: linear-gradient(90deg, #c58080, var(--danger)); }
.meter-row { display: flex; justify-content: space-between; font: 500 10.5px/1.4 var(--mono); color: var(--ink-400); }
.decision-stream { max-height: 320px; overflow-y: auto; }
.decision-item {
  display: flex; gap: 10px; align-items: center; padding: 8px 10px; border-bottom: 1px solid var(--line-soft);
  font: 500 11.5px/1.4 var(--mono);
}
.decision-item:last-child { border-bottom: none; }
.decision-item .di-req { color: var(--ink-300); font-size: 12px; }
.decision-item .di-src { font-weight: 600; color: var(--ink-700); }
.decision-item .di-node { color: var(--gold-700); font-weight: 600; }
.decision-item .di-lat { margin-left: auto; color: var(--ink-400); }
.decision-item.ok .di-lat { color: var(--jade-600); }
.decision-item.fail .di-src { color: var(--danger); }

/* ---------- 步骤条 ---------- */
.steps { display: flex; gap: 0; margin: 14px 0; flex-wrap: wrap; }
.step { flex: 1; min-width: 88px; text-align: center; position: relative; padding: 0 6px; }
.step .st-dot {
  width: 29px; height: 29px; border-radius: 50%; margin: 0 auto 6px; display: flex; align-items: center;
  justify-content: center; font: 700 12px/1 var(--font); background: var(--ink-50); color: var(--ink-400);
  border: 1.5px solid var(--line); position: relative; z-index: 1;
}
.step.done .st-dot { background: var(--jade-50); color: var(--jade-700); border-color: var(--jade-400); }
.step.active .st-dot { background: var(--ink-900); color: var(--gold-400); border-color: var(--ink-900); box-shadow: 0 0 0 5px var(--gold-100); }
.step .st-label { font: 600 12px/1.3 var(--font); color: var(--ink-500); letter-spacing: .03em; }
.step.active .st-label { color: var(--ink-800); }
.step::after { content: ''; position: absolute; left: calc(-50% + 19px); right: calc(50% + 13px); top: 14px; height: 1.5px; background: var(--line); }
.step:first-child::after { display: none; }
.step.done::after, .step.active::after { background: var(--gold-500); }

/* ---------- 空状态 / 骨架 ---------- */
.empty { text-align: center; padding: 46px 16px; color: var(--ink-300); font-size: 12.5px; }
.empty svg { width: 40px; height: 40px; opacity: .35; margin-bottom: 8px; }
.skeleton { height: 90px; border-radius: var(--radius-sm); background: linear-gradient(90deg, var(--ink-50) 25%, var(--paper) 50%, var(--ink-50) 75%); background-size: 200% 100%; animation: shimmer 1.2s infinite; }
@keyframes shimmer { to { background-position: -200% 0; } }

/* ---------- 详情键值 ---------- */
.kv { display: grid; grid-template-columns: 128px 1fr; gap: 9px 14px; font-size: 13px; }
.kv dt { color: var(--ink-400); }
.kv dd { color: var(--ink-800); font-weight: 500; }
.kv dd .sub { font-weight: 400; }

/* ---------- 角色专属工作台元素 ---------- */
/* 角色横幅（登录后身份展示） */
.role-hero {
  position: relative; overflow: hidden; border-radius: var(--radius);
  background: var(--side-grad); color: #d8ddd6; padding: 26px 28px;
  border: 1px solid rgba(255,255,255,.06); box-shadow: var(--shadow);
}
.role-hero::after {
  content: ''; position: absolute; right: -60px; top: -70px; width: 260px; height: 260px; border-radius: 50%;
  border: 30px solid rgba(201,169,97,.07);
}
.role-hero .rh-eyebrow { font: 600 12px/1 var(--font); letter-spacing: .1em; color: rgba(216,221,214,.65); }
.role-hero .rh-title { font: 500 24px/1.25 var(--font); color: #f2efe5; margin-top: 8px; letter-spacing: -0.01em; }
.role-hero .rh-sub { font-size: 13px; color: rgba(216,221,214,.7); margin-top: 6px; }
.role-hero .rh-role {
  position: absolute; right: 26px; top: 26px; text-align: right;
}
.role-hero .rh-role .rhr-tag {
  display: inline-flex; align-items: center; gap: 7px;
  font: 700 12px/1 var(--font); letter-spacing: .14em; color: var(--gold-400);
  border: 1px solid rgba(201,169,97,.4); border-radius: 8px; padding: 7px 13px;
  background: rgba(201,169,97,.08);
}
.role-hero .rh-role .rhr-dot { width: 6px; height: 6px; border-radius: 50%; background: var(--gold-500); box-shadow: 0 0 0 3px rgba(201,169,97,.25); }

/* 大数字行动卡（仓储/加工厂作业入口） */
.action-tile {
  position: relative; border: var(--hairline); border-radius: var(--radius); background: var(--card);
  padding: 22px; cursor: pointer; overflow: hidden; box-shadow: var(--shadow-sm);
  transition: transform .16s, box-shadow .16s;
}
.action-tile:hover { transform: translateY(-3px); box-shadow: var(--shadow); }
.action-tile::before { content: ''; position: absolute; left: 0; top: 0; bottom: 0; width: 3px; background: var(--gold-500); opacity: 0; transition: opacity .16s; }
.action-tile:hover::before { opacity: 1; }
.action-tile .at-icon {
  width: 46px; height: 46px; border-radius: 13px; display: flex; align-items: center; justify-content: center;
  background: var(--ink-50); color: var(--ink-600); border: 1px solid var(--ink-100); margin-bottom: 13px;
}
.action-tile .at-icon svg { width: 22px; height: 22px; }
.action-tile .at-name { font: 600 15px/1.3 var(--font); color: var(--ink-900); }
.action-tile .at-desc { font-size: 12.5px; color: var(--ink-500); margin-top: 4px; line-height: 1.6; }
.action-tile .at-badge { position: absolute; right: 18px; top: 20px; }

/* 交易卡片（贸易商货权确认） */
.deal-card {
  display: flex; gap: 14px; align-items: center; flex-wrap: wrap;
  border: 1px solid var(--gold-200); background: linear-gradient(135deg, var(--gold-50), var(--card) 60%);
  border-radius: var(--radius); padding: 18px 20px; box-shadow: var(--shadow-sm);
}
.deal-card .dc-batch { font: 600 15px/1.3 var(--mono); color: var(--ink-900); }
.deal-card .dc-meta { font-size: 12px; color: var(--ink-500); margin-top: 3px; }

/* 暗色监管面板 */
.dark-panel {
  background: var(--side-grad); border-radius: var(--radius); border: 1px solid rgba(255,255,255,.06);
  color: #c9d2cc; padding: 24px 26px; box-shadow: var(--shadow);
}
.dark-panel h3 { color: #eee9dc; }
.dark-panel .dp-stat { display: flex; flex-direction: column; gap: 4px; }
.dark-panel .dp-num { font: 600 26px/1.15 var(--font); color: #f2efe5; font-variant-numeric: tabular-nums; letter-spacing: -0.02em; }
.dark-panel .dp-num small { font: 500 12px/1 var(--font); color: rgba(201,169,97,.7); }
.dark-panel .dp-label { font: 600 12px/1.3 var(--font); letter-spacing: .08em; color: rgba(216,191,133,.85); }
.dark-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 0; }
.dark-grid .dg-cell { padding: 6px 18px 6px 0; }
.dark-grid .dg-cell + .dg-cell { border-left: 1px solid rgba(255,255,255,.08); padding-left: 18px; }
@media (max-width: 900px) { .dark-grid { grid-template-columns: repeat(2, 1fr); } .dark-grid .dg-cell:nth-child(3) { border-left: none; padding-left: 0; } .dark-grid .dg-cell { padding-top: 14px; } }
/* M5（对比度修复）：监管驾驶舱头部行/链状态/白玻璃按钮——类化双主题口径
   （此前 home.js 内联写死浅色字，工作台 .shell 白底皮肤翻白面板后白底浅字重叠模糊） */
.dark-panel .dp-eyebrow { font: 600 12px/1 var(--font); letter-spacing: .1em; color: rgba(216,221,214,.65); }
.dark-panel .dp-title { font: 500 22px/1.25 var(--font); color: #f2efe5; margin-top: 4px; }
.dark-panel .dp-sub { font-size: 13px; color: rgba(216,221,214,.7); margin-top: 3px; }
.dark-panel .dp-chain { font: 500 12px/1 var(--mono); color: #d8bf85; }
.dark-panel .dp-danger { color: #d99a9a; }
.dark-panel .rhr-tag { display: inline-flex; align-items: center; gap: 7px; font: 700 12px/1 var(--font); letter-spacing: .1em; color: var(--gold-400); border: 1px solid rgba(201,169,97,.4); border-radius: 8px; padding: 7px 13px; background: rgba(201,169,97,.08); }
.dark-panel .btn-dp { background: rgba(255,255,255,.06) !important; color: #c9d2cc !important; border-color: rgba(255,255,255,.14) !important; }

/* 风险列表（监管） */
.risk-row { display: flex; gap: 12px; align-items: flex-start; padding: 12px 14px; border-radius: 11px; background: rgba(255,255,255,.04); margin-bottom: 8px; border: 1px solid rgba(255,255,255,.06); }
.risk-row .rr-msg { font-size: 12.5px; color: #c9d2cc; line-height: 1.6; flex: 1; }
.risk-row .rr-time { font: 500 10.5px/1 var(--mono); color: rgba(201,169,97,.5); white-space: nowrap; margin-top: 3px; }

/* ---------- 淘宝式商品卡 / 购物车行 ---------- */
.goods-card { background: var(--card); border: var(--hairline); border-radius: var(--radius); overflow: hidden; box-shadow: var(--shadow-sm); cursor: pointer; transition: transform .16s, box-shadow .16s; }
.goods-card:hover { transform: translateY(-3px); box-shadow: var(--shadow); }
.goods-card .gc-img {
  height: 150px; background-size: cover; background-position: center; position: relative;
  background-color: var(--ink-50);
}
.goods-card .gc-tag { position: absolute; right: 10px; top: 10px; backdrop-filter: blur(4px); }
.goods-card .gc-body { padding: 13px 15px 15px; }
.goods-card .gc-name { font: 600 14.5px/1.3 var(--font); color: var(--ink-900); }
.goods-card .gc-meta { font-size: 12px; color: var(--ink-500); margin-top: 4px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* ---------- 商城首页（淘宝式） ---------- */
.mall-hero {
  border-radius: 14px; padding: 30px 28px 22px; margin-bottom: 18px;
  background: linear-gradient(135deg, #241d16, #141009 70%);
  border: 1px solid rgba(201,169,97,.26); position: relative; overflow: hidden;
}
.mall-hero::after {
  content: ''; position: absolute; right: -60px; top: -80px; width: 280px; height: 280px; border-radius: 50%;
  background: radial-gradient(circle, rgba(201,169,97,.16), transparent 65%); pointer-events: none;
}
.mh-eyebrow { font: 700 11px/1 var(--font); letter-spacing: .24em; color: var(--gold-500); }
.mh-title { font: 700 26px/1.25 var(--font); color: #f2efe5; margin: 10px 0 6px; }
.mh-sub { font-size: 12.5px; color: rgba(236,223,192,.62); margin-bottom: 18px; }
.mh-search { display: flex; gap: 10px; max-width: 620px; }
.mh-search input {
  flex: 1; height: 46px; border: 1px solid rgba(201,169,97,.35); border-radius: 12px;
  background: rgba(255,255,255,.96); padding: 0 16px; font-size: 14px; outline: none;
}
.mh-search input:focus { box-shadow: 0 0 0 3px rgba(201,169,97,.22); }
.mh-cats { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-top: 16px; position: relative; z-index: 1; }
.mh-cat {
  height: 30px; padding: 0 14px; border-radius: 15px; border: 1px solid rgba(201,169,97,.3);
  background: rgba(255,255,255,.05); color: rgba(236,223,192,.8); font-size: 12.5px; cursor: pointer; transition: all .15s;
}
.mh-cat:hover { border-color: rgba(201,169,97,.55); color: #f2efe5; }
.mh-cat.active { background: linear-gradient(120deg, #a1813f, #c9a961); color: #131a17; font-weight: 600; border-color: transparent; }
.mh-cat-sep { width: 1px; height: 18px; background: rgba(201,169,97,.25); margin: 0 4px; }
.mall-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(252px, 1fr)); gap: 16px; }
.mall-card .gc-img { height: 176px; }
.mh-price { display: flex; align-items: baseline; gap: 5px; margin-top: 8px; }
.mh-price b { font: 700 21px/1 var(--font); color: var(--gold-700); font-variant-numeric: tabular-nums; }
.mh-price span { font-size: 12px; color: var(--ink-500); }
.mh-price em { font: 500 11.5px/1 var(--font); font-style: normal; color: var(--ink-400); margin-left: auto; }
.mh-shop { display: flex; align-items: center; gap: 6px; margin-top: 8px; font-size: 12px; color: var(--ink-600); }
.mh-shop svg { width: 13px; height: 13px; color: var(--gold-600); flex-shrink: 0; }

.cart-row {
  display: flex; gap: 12px; align-items: center; padding: 12px 0;
  border-bottom: 1px solid var(--line-soft);
}
.cart-row.invalid { opacity: .55; background: var(--paper-2); border-radius: 10px; padding: 12px; margin: 4px 0; }
.cart-row .cr-img { width: 64px; height: 64px; border-radius: 10px; background-size: cover; background-position: center; flex-shrink: 0; background-color: var(--ink-50); border: 1px solid var(--line); }

/* ============================================================
 * HUD 深空主题覆写（登录页同源：电光青 × 星紫 × 星尘金）
 * tokens 已全局换肤，此处仅覆写写死的浅色 + 增强 HUD 质感
 * ============================================================ */

/* ---- 全局画布：深空底 + 微网格 ---- */
body {
  background:
    radial-gradient(900px 480px at 85% -10%, rgba(8,44,110,.22), transparent 60%),
    radial-gradient(760px 420px at 5% 110%, rgba(84,52,150,.16), transparent 60%),
    repeating-linear-gradient(0deg, transparent 0 47px, rgba(255,143,77,.017) 47px 48px),
    repeating-linear-gradient(90deg, transparent 0 47px, rgba(255,143,77,.017) 47px 48px),
    var(--paper);
  color: var(--ink-100);
}

/* ---- 卡片：HUD 数据面板 ---- */
.card { background: var(--hud-panel); border: var(--hud-edge); box-shadow: var(--shadow); position: relative; }
.card::before { content: ''; position: absolute; top: 0; left: 14px; right: 14px; height: 1px;
  background: linear-gradient(90deg, transparent, rgba(255,143,77,.35), transparent); pointer-events: none; }
.card-title { color: var(--ink-50); }
.card-title svg { color: var(--neon-dim); }

/* ---- 顶栏 / 门户顶栏：深色玻璃 + 青色底线 ---- */
.topbar { background: rgba(8,16,32,.85); backdrop-filter: blur(14px); border-bottom: 1px solid rgba(255,143,77,.12); }
.topbar-title { color: var(--ink-50); }
.topbar-sub { color: var(--ink-300); }
.portal-top { background: rgba(8,16,32,.9); backdrop-filter: blur(16px); border-bottom: 1px solid rgba(255,143,77,.14); }
.portal-top::after { content: ''; position: absolute; left: 0; right: 0; bottom: -1px; height: 1px;
  background: linear-gradient(90deg, transparent 5%, rgba(255,143,77,.5), rgba(180,140,255,.4), transparent 95%); }
.portal-top { position: relative; }
.pt-name { color: #eaf6ff; text-shadow: 0 0 16px rgba(255,143,77,.3); }
.portal-nav { background: rgba(6,11,24,.92); border-bottom: 1px solid rgba(255,143,77,.1); }
.portal-nav a { color: var(--ink-200); }
.portal-nav a:hover { color: var(--neon); }
.portal-nav a.active { color: var(--neon); border-bottom-color: var(--neon); text-shadow: var(--hud-glow); }
.pt-user b { color: var(--ink-50); }
.pt-logout:hover { color: var(--danger); }

/* ---- 侧栏导航：霓虹激活 ---- */
.nav-item { color: var(--ink-200); border: 1px solid transparent; }
.nav-item:hover { color: var(--neon); background: rgba(255,143,77,.05); }
.nav-item.active { color: var(--neon); background: rgba(255,143,77,.08); border-color: rgba(255,143,77,.2);
  box-shadow: inset 3px 0 0 var(--neon), 0 0 18px rgba(255,143,77,.1); }
.nav-group-title { color: var(--ink-300); border-top: 1px solid var(--line-soft); }
.nav-group-title .bar { background: linear-gradient(180deg, var(--neon), var(--purple)); box-shadow: var(--hud-glow); }
.brand-name { color: #eaf6ff; }
.brand-sub, .su-role { color: var(--ink-300); }
.su-name { color: var(--ink-50); }
.su-ent { color: var(--ink-400); }
.side-links a { color: var(--ink-300); }
.side-links a:hover { color: var(--danger); }
.chip-online { border: 1px solid rgba(45,216,160,.3); background: rgba(45,216,160,.08); }
.chip-online .dot { background: var(--ok); box-shadow: 0 0 8px var(--ok); }
.chip-online.offline { border-color: rgba(240,184,73,.3); background: var(--warn-bg); }
.chip-online.offline .dot { background: var(--warn); box-shadow: 0 0 8px var(--warn); }
#mode-text, #pt-mode-text { color: var(--ink-200); }
.role-chip { border: 1px solid rgba(255,143,77,.25); background: rgba(255,143,77,.07); color: var(--neon); }
.rc-dot { background: var(--neon); box-shadow: 0 0 8px var(--neon); }
.back-portal { background: rgba(255,143,77,.07); border: 1px solid rgba(255,143,77,.25); color: var(--neon); }
.back-portal:hover { background: rgba(255,143,77,.14); }

/* ---- 数据条 statband：HUD 数字面板 ---- */
.statband { background: var(--hud-panel); border: var(--hud-edge); box-shadow: var(--shadow-sm); }
.sb-cell { border-right: 1px solid var(--line); }
.sb-cell:hover { background: rgba(255,143,77,.05); }
.sb-label { color: var(--ink-300); }
.sb-num { color: var(--neon); font-family: var(--mono); text-shadow: 0 0 12px rgba(255,143,77,.35); letter-spacing: .02em; }
.sb-num small { color: var(--ink-300); }
.sb-num.sb-gold { color: var(--gold-500); text-shadow: 0 0 12px rgba(224,188,99,.35); }
.sb-sub { color: var(--ink-400); }

/* ---- KPI 卡（home/monitor 用）---- */
.kpi { background: var(--hud-panel); border: var(--hud-edge); }
.kpi-num { color: var(--ink-50); font-family: var(--mono); }
.kpi-label { color: var(--ink-300); }

/* ---- 表格 ---- */
.tbl thead th { color: var(--ink-300); border-bottom: 1px solid rgba(255,143,77,.2);
  background: rgba(255,143,77,.03); font-family: var(--mono); font-size: 12px; letter-spacing: .06em; }
.tbl tbody td { color: var(--ink-100); border-bottom: 1px solid var(--line-soft); }
.tbl tbody tr:hover td { background: rgba(255,143,77,.045); }
.tbl tbody b { color: var(--ink-50); }
.sub { color: var(--ink-400) !important; }
.page-head h1 { color: #eaf6ff; }
.ph-sub { color: var(--ink-300); }

/* ---- 表单 / 输入 ---- */
input, textarea, select { background: rgba(4,8,16,.7) !important; border: 1.5px solid var(--line) !important;
  color: var(--ink-50) !important; border-radius: 10px; }
input::placeholder, textarea::placeholder { color: var(--ink-500) !important; }
input:focus, textarea:focus, select:focus { border-color: rgba(255,143,77,.6) !important;
  box-shadow: 0 0 0 3px rgba(255,143,77,.12), 0 0 16px rgba(255,143,77,.1) !important; }
input:read-only { background: rgba(10,19,34,.6) !important; }
label { color: var(--ink-200); }
.field label { color: var(--ink-200); }
.hint { color: var(--ink-400); }
option { background: var(--ink-800); color: var(--ink-50); }

/* ---- 按钮 ---- */
.btn-primary { background: linear-gradient(135deg, #f2531a, #c23a00); border: 1px solid rgba(255,143,77,.4);
  color: #eaf9ff; box-shadow: 0 6px 20px rgba(230,62,0,.35), inset 0 1px 0 rgba(255,255,255,.12); }
.btn-primary:hover { filter: brightness(1.15); box-shadow: 0 8px 26px rgba(230,62,0,.5), 0 0 18px rgba(255,143,77,.25); }
.btn-primary:disabled { background: var(--ink-700); color: var(--ink-400); }
.btn-ghost { background: rgba(255,255,255,.04); border: 1px solid var(--line); color: var(--ink-100); }
.btn-ghost:hover { border-color: rgba(255,143,77,.4); color: var(--neon); background: rgba(255,143,77,.06); }
.btn-danger { background: linear-gradient(135deg, #a03050, #7a1f3d); border-color: rgba(255,93,122,.4); color: #ffe9ee; }
.btn-danger:hover { box-shadow: 0 0 16px rgba(255,93,122,.3); }

/* ---- 徽章：霓虹发光 ---- */
.badge { border: 1px solid transparent; }
.b-brand { background: rgba(255,143,77,.1); color: var(--neon); border-color: rgba(255,143,77,.3); }
.b-ok { background: var(--ok-bg); color: var(--ok); border-color: rgba(45,216,160,.3); }
.b-warn { background: var(--warn-bg); color: var(--warn); border-color: rgba(240,184,73,.3); }
.b-danger { background: var(--danger-bg); color: var(--danger); border-color: rgba(255,93,122,.35); box-shadow: inset 0 0 0 1px rgba(255,93,122,.2); }
.b-info { background: var(--info-bg); color: var(--info); border-color: rgba(74,168,255,.3); }
.b-gold { background: rgba(224,188,99,.1); color: var(--gold-500); border-color: rgba(224,188,99,.35); }
.b-purple { background: var(--purple-bg); color: var(--purple); border-color: rgba(180,140,255,.3); }
.b-gray { background: rgba(100,120,152,.12); color: var(--ink-300); border-color: var(--line); }

/* ---- 弹窗 / 确认框 / Toast：深色玻璃 ---- */
.modal-mask { background: rgba(2,4,10,.7); backdrop-filter: blur(8px); }
.modal { background: linear-gradient(165deg, #0c1730, #081020); border: 1px solid rgba(255,143,77,.2);
  box-shadow: 0 30px 90px rgba(0,0,0,.7), 0 0 40px rgba(255,143,77,.06); }
.modal::before { content: ''; position: absolute; top: 0; left: 18px; right: 18px; height: 1px;
  background: linear-gradient(90deg, transparent, rgba(255,143,77,.5), transparent); }
.modal-title { color: #eaf6ff; }
.modal-close { background: rgba(255,255,255,.05); color: var(--ink-300); border: 1px solid var(--line); }
.modal-close:hover { color: var(--danger); border-color: rgba(255,93,122,.4); }
.modal-foot { border-top: 1px solid var(--line); }
#toast-root .toast { background: rgba(10,19,36,.95); border: 1px solid rgba(255,143,77,.3); color: var(--ink-50);
  box-shadow: 0 12px 40px rgba(0,0,0,.6), 0 0 20px rgba(255,143,77,.1); }

/* ---- 通知条 ---- */
.notice { border-radius: 11px; border: 1px solid; }
.n-info { background: rgba(74,168,255,.08); color: var(--info); border-color: rgba(74,168,255,.25); }
.n-ok { background: var(--ok-bg); color: var(--ok); border-color: rgba(45,216,160,.25); }
.n-warn { background: var(--warn-bg); color: var(--warn); border-color: rgba(240,184,73,.25); }
.n-danger { background: var(--danger-bg); color: var(--danger); border-color: rgba(255,93,122,.3); }

/* ---- 勾选卡 / 业务板块分配 ---- */
.check-card { background: rgba(255,255,255,.03); border: 1px solid var(--line); }
.check-card:hover { border-color: rgba(255,143,77,.4); background: rgba(255,143,77,.05); }
.check-card.on { border-color: rgba(45,216,160,.5); background: rgba(45,216,160,.07); box-shadow: inset 0 0 0 1px rgba(45,216,160,.3), 0 0 16px rgba(45,216,160,.08); }
.cc-text { color: var(--ink-100); }
.cc-sub { color: var(--ink-400); }
.cc-box { border: 1.5px solid var(--line); }
.check-card.on .cc-box { background: var(--ok); border-color: var(--ok); color: #031018; box-shadow: 0 0 10px rgba(45,216,160,.4); }
.biz-block { background: rgba(255,255,255,.02); border: 1px solid var(--line); }
.biz-head { background: rgba(255,143,77,.04); }
.biz-head.on { background: rgba(45,216,160,.08); box-shadow: inset 0 0 0 1.5px rgba(45,216,160,.5); }
.biz-body { background: rgba(4,8,16,.5); border: 1px dashed var(--line); }

/* ---- 门户首页功能卡 / 业务卡 ---- */
.pi-biz { background: var(--hud-panel); border: 1px solid var(--line); }
.pi-biz-main { border-color: rgba(255,143,77,.35);
  background: linear-gradient(135deg, rgba(10,26,40,.8) 40%, rgba(7,32,42,.6)); }
.pi-biz:hover { box-shadow: 0 14px 36px rgba(0,0,0,.5), 0 0 26px rgba(255,143,77,.14); border-color: rgba(255,143,77,.5); }
.pb-icon { background: rgba(255,143,77,.08); color: var(--neon); box-shadow: inset 0 0 0 1px rgba(255,143,77,.2); }
.pi-biz:not(.pi-biz-main) .pb-icon { background: var(--purple-bg); color: var(--purple); box-shadow: inset 0 0 0 1px rgba(180,140,255,.25); }
.pb-name { color: #eaf6ff; }
.pb-sub { color: var(--ink-300); }
.pb-foot { color: var(--neon); }
.lp-endorse { background: rgba(255,143,77,.05); border: 1px solid rgba(255,143,77,.25); }

/* ---- 农产品组件（深色适配）---- */
.agri-lane { background: rgba(255,255,255,.03); }
.al-item { background: rgba(10,19,36,.8); border: 1px solid var(--line); }
.al-item:hover { border-color: rgba(255,143,77,.4); }
.al-item b { color: var(--ink-50); }
.agri-timeline { border-left: 2px solid rgba(255,143,77,.25); }
.atl-dot { background: var(--neon); box-shadow: 0 0 0 3px rgba(255,143,77,.15), 0 0 10px rgba(255,143,77,.5); }
.atl-title { color: var(--ink-50); }
.am-f-bar { background: rgba(255,255,255,.04); }
.am-day span { color: var(--neon); }
.am-d-bar { background: rgba(255,255,255,.04); }
.am-d-bar i { background: linear-gradient(180deg, var(--neon), #c23a00); }
.am-ent b { color: var(--ink-50); }
.am-ev b { color: var(--ink-50); }
.agri-cert-card { background: #f4f6fa; border: 2px solid #0a1224; } /* 合格证保持浅色（打印件） */
.st2-t-bar { background: rgba(255,255,255,.05); }
.an2-item b { color: var(--ink-50); }

/* ---- 首页 hero / 大屏深色件（原已暗色，统一色温）---- */
.dark-panel, .role-hero { background: var(--side-grad); border: 1px solid rgba(255,143,77,.14); }
.rh-title, .dp-num, .mh-title { color: #eaf6ff !important; }
.mh-search input { background: rgba(4,8,16,.8) !important; color: var(--ink-50) !important; border: 1px solid rgba(255,143,77,.3) !important; }

/* ---- 角色状态条（role-theme 浅色覆写）---- */
.tb-strip-wh { background: linear-gradient(90deg, rgba(255,143,77,.06), transparent 60%); }
.tb-strip-pf { background: linear-gradient(90deg, rgba(255,143,77,.08), transparent 55%); }
.tb-strip-mall { background: linear-gradient(90deg, rgba(224,188,99,.08), transparent 55%); }
.tb-strip { border-bottom: 1px solid var(--line); }
.ts-item { color: var(--ink-300); }
.ts-item b { color: var(--ink-50); font-family: var(--mono); }
.ts-ok b { color: var(--ok); }

/* ---- 时间轴 / 流程 ---- */
.step-dot { background: var(--ink-600); }
.step-dot.on { background: var(--neon); box-shadow: 0 0 10px rgba(255,143,77,.5); }
.timeline-item .tl-dot { box-shadow: 0 0 8px rgba(255,143,77,.4); }

/* ---- 移动端底栏已暂时封存（2026-10-29）：原文见 mobile-sealed/mobile-nav.sealed.css【C2】 ---- */

/* ---- 通用杂项 ---- */
.divider { border-top: 1px solid var(--line); }
.empty { color: var(--ink-400); }
.loading-dots i { background: var(--neon); }
.meter { background: rgba(255,255,255,.05); }
.req { color: var(--danger); }
a { color: var(--neon); }

/* ============================================================
 * HUD 精修层：节奏 · 字距 · 过渡 · 细节质感
 * ============================================================ */

/* ---- 页头（JJJJ2 布局排版批：h1 升 fs-h1 档 24px/750，副标题信息层级，竖条品牌橙单一语言）---- */
.page-head { margin-bottom: 24px; }
.page-head h1 { font: 750 var(--fs-h1)/1.25 var(--font); letter-spacing: .01em; display: flex; align-items: center; gap: 12px; }
.page-head h1::before { content: ''; width: 4px; height: 22px; border-radius: 2px; flex: none;
  background: linear-gradient(180deg, var(--brand-500), var(--brand-700)); }
.ph-sub { font-size: var(--fs-sm); color: var(--ink-sub); letter-spacing: .01em; margin-top: 6px; padding-left: 16px; }
.page-actions .btn { border-radius: 10px; font-weight: 600; letter-spacing: .02em; }

/* ---- 卡片：呼吸与浮起 ---- */
.card { border-radius: var(--radius); transition: border-color .25s ease, box-shadow .25s ease, transform .25s ease; }
.card:hover { border-color: rgba(255,143,77,.24); }
.card-title { font-size: 13.5px; font-weight: 650; letter-spacing: .05em; display: flex; align-items: center; gap: 9px;
  padding-bottom: 12px; border-bottom: 1px solid var(--line-soft); margin-bottom: 14px; }
.card-title svg { filter: drop-shadow(0 0 5px rgba(255,143,77,.35)); }
.card-body { font-size: 13px; line-height: 1.75; }
.card + .card { margin-top: 16px; }

/* ---- statband：数字主视觉 ---- */
.sb-cell { padding: 16px 18px 14px; transition: background .2s ease; }
.sb-label { font-size: 12px; letter-spacing: .14em; text-transform: uppercase; }
.sb-num { font-size: 30px; font-weight: 700; letter-spacing: -.01em; margin-top: 7px; }
.sb-num small { font-size: 12px; font-weight: 500; margin-left: 3px; letter-spacing: 0; }
.sb-sub { font-size: 12px; margin-top: 5px; letter-spacing: .03em; }
.statband { border-radius: 14px; overflow: hidden; }

/* ---- 表格：密度与呼吸 ---- */
.tbl { font-size: 13px; }
.tbl thead th { padding: 11px 14px; letter-spacing: .1em; text-transform: uppercase; font-size: 12px; }
.tbl tbody td { padding: 13px 14px; line-height: 1.6; }
.tbl tbody tr { transition: background .16s ease; }
.tbl tbody tr:nth-child(even) td { background: rgba(255,255,255,.012); }
.tbl tbody b { font-weight: 650; }
.tbl .btn-sm { border-radius: 8px; font-size: 12px; padding: 5px 11px; }

/* ---- 按钮统一 ---- */
.btn { border-radius: 10px; font-weight: 600; letter-spacing: .02em; transition: all .2s cubic-bezier(.3,.85,.3,1); }
.btn-sm { height: 30px; padding: 0 12px; }
.btn-lg { border-radius: 12px; }
.btn-primary { text-shadow: 0 1px 2px rgba(0,30,40,.4); }

/* ---- 徽章 ---- */
.badge { border-radius: 7px; font-size: 12px; padding: 3px 9px; font-weight: 600; letter-spacing: .02em; }

/* ---- 弹窗精修 ---- */
.modal { border-radius: 18px; overflow: hidden; }
.modal-title { font-size: 15.5px; font-weight: 650; letter-spacing: .03em; padding: 20px 24px 14px; }
.modal-body { padding: 4px 24px 18px; font-size: 13px; line-height: 1.75; }
.modal-foot { padding: 14px 24px; display: flex; align-items: center; gap: 12px; background: rgba(4,8,16,.4); }
.form-grid { gap: 12px 14px; }
.field label { font-size: 12px; letter-spacing: .03em; margin-bottom: 6px; }
.field input, .field select { height: 42px; border-radius: 10px; font-size: 13.5px; transition: all .18s ease; }

/* ---- 导航细节 ---- */
.nav-item { border-radius: 10px; margin: 2px 10px; padding: 10px 13px; font-size: 13.5px; font-weight: 550;
  transition: all .18s cubic-bezier(.3,.85,.3,1); }
.nav-item .ni-icon { transition: all .18s ease; }
.nav-item:hover .ni-icon { color: var(--neon); transform: translateX(1px); }
.nav-group-title { font-size: 10.5px; letter-spacing: .18em; text-transform: uppercase; }
.nav-group { margin-bottom: 4px; }

/* ---- 顶栏 ---- */
.topbar-title { font-weight: 650; letter-spacing: .04em; font-size: 15.5px; }
.topbar-sub { font-size: 12px; letter-spacing: .05em; }

/* ---- 门户精修 ---- */
.portal-top { padding: 16px 32px; }
.pt-name { font-size: 20px; font-weight: 800; letter-spacing: .16em; }
.pt-sub { font-size: 10.5px; letter-spacing: .22em; margin-top: 3px; color: var(--ink-400); text-transform: uppercase; }
.portal-nav a { padding: 13px 18px; font-size: 13.5px; font-weight: 600; letter-spacing: .03em; }
.portal-main { padding: 26px 32px 56px; }
.pi-biz { border-radius: 18px; }
.pb-name { font-size: 18px; font-weight: 750; letter-spacing: .03em; }
.pb-sub { font-size: 12.5px; line-height: 1.8; letter-spacing: .01em; }
.pb-foot { font-size: 12.5px; font-weight: 700; letter-spacing: .05em; }

/* ---- 空态 / Loading ---- */
.empty { padding: 36px 16px; font-size: 12.5px; letter-spacing: .06em; text-align: center; opacity: .75; }
.loading-dots { gap: 7px; padding: 36px 0; }
.loading-dots i { width: 7px; height: 7px; animation-delay: calc(var(--i, 0) * .16s); }

/* ---- 时间轴 / 泳道精修 ---- */
.agri-lane { border-radius: 14px; padding: 12px; border: 1px solid var(--line-soft); }
.al-head { padding: 2px 2px 10px; }
.atl-item { padding-left: 18px; }
.atl-dot { width: 11px; height: 11px; }
.agri-meta { font-size: 12px; letter-spacing: .02em; }

/* ---- 大屏精修 ---- */
.am-funnel { gap: 12px; }
.am-f-row b { font-family: var(--mono); font-size: 15px; color: var(--neon); }
.am-day span { font-family: var(--mono); font-size: 13px; }
.am-ev { padding: 10px 12px; border-radius: 10px; background: rgba(255,255,255,.02);
  border: 1px solid var(--line-soft); transition: all .18s ease; }
.am-ev:hover { border-color: rgba(255,143,77,.25); }

/* ---- 通知条 ---- */
.notice { padding: 14px 18px; border-radius: 12px; font-size: 13px; letter-spacing: .01em; line-height: 1.7; }
.notice svg { filter: drop-shadow(0 0 5px currentColor); }

/* ---- 勾选卡 ---- */
.check-card { border-radius: 12px; padding: 13px 15px; transition: all .2s cubic-bezier(.3,.85,.3,1); }
.check-card:hover { transform: translateY(-1px); }
.cc-text { font-size: 13.5px; font-weight: 600; letter-spacing: .01em; }
.cc-sub { font-size: 12px; letter-spacing: .02em; margin-top: 3px; }

/* ---- 滚动区渐隐（表格容器/动态流边缘）---- */
.card-body { scrollbar-width: thin; scrollbar-color: #1a2a45 transparent; }

/* ---- 移动底栏已暂时封存（2026-10-29）：原文见 mobile-sealed/mobile-nav.sealed.css【C3】 ---- */

/* ============================================================
 * 内容回归层：白纸内容 × 框架深空（登录页同源的克制点缀）
 * 框架（侧栏/顶栏/门户导航/登录）保持深空；一切内容白色精修
 * ============================================================ */

/* ---- 画布：浅纸 + 极淡网格（科技底纹，弱到几乎不可见）---- */
body {
  background:
    radial-gradient(900px 460px at 88% -8%, rgba(255,106,0,.06), transparent 60%),
    radial-gradient(760px 420px at 4% 108%, rgba(122,95,201,.04), transparent 60%),
    repeating-linear-gradient(0deg, transparent 0 47px, rgba(255,80,0,.018) 47px 48px),
    repeating-linear-gradient(90deg, transparent 0 47px, rgba(255,80,0,.018) 47px 48px),
    var(--paper);
  color: var(--ink-700);
}

/* ---- 卡片：白面板 + 顶部淡橙光线（登录页流光的克制版）---- */
.card { background: #fff; border: 1px solid var(--line); box-shadow: var(--shadow); }
.card::before { background: linear-gradient(90deg, transparent, rgba(255,80,0,.22), transparent); }
.card:hover { border-color: var(--line); box-shadow: var(--shadow), 0 0 0 1px rgba(255,80,0,.06); }
.card-title { color: var(--ink-800); }
.card-title svg { color: var(--brand-600); filter: none; }

/* ---- 数据条：白面板 · 品牌青数字 ---- */
.statband { background: #fff; border: 1px solid var(--line); box-shadow: var(--shadow-sm); }
.sb-cell:hover { background: var(--brand-50); }
.sb-label { color: var(--ink-400); }
.sb-num { color: var(--brand-700); text-shadow: none; }
.sb-num small { color: var(--ink-400); }
.sb-num.sb-gold { color: var(--gold-700); text-shadow: none; }
.sb-sub { color: var(--ink-400); }
.kpi { background: #fff; border: 1px solid var(--line); }
.kpi-num { color: var(--ink-900); }

/* ---- 表格 ---- */
.tbl thead th { color: var(--ink-500); border-bottom: 1px solid var(--line); background: var(--paper-2); }
.tbl tbody td { color: var(--ink-700); border-bottom: 1px solid var(--line-soft); }
.tbl tbody tr:hover td { background: var(--brand-50); }
.tbl tbody tr:nth-child(even) td { background: rgba(255,80,0,.015); }
.tbl tbody b { color: var(--ink-900); }
/* MMMM 批（视觉规范收敛）：.sub 唯一定义——辅助文字 ink-400→ink-500（白底对比度 4.0→5.9:1，AA），
   消除发灰发虚；重复定义（原 840/1129 两处 !important 打架）合并至此 */
.sub { color: var(--ink-500) !important; font-size: 13px; }
.page-head h1 { color: var(--ink-900); }
a { color: var(--brand-700); }

/* ---- 表单：白底深字 · 青聚焦 ---- */
input, textarea, select { background: #fff !important; border: 1.5px solid var(--line) !important; color: var(--ink-800) !important; }
input::placeholder, textarea::placeholder { color: var(--ink-300) !important; }
input:focus, textarea:focus, select:focus { border-color: var(--brand-500) !important;
  box-shadow: 0 0 0 3.5px rgba(255,106,0,.14) !important; }
input:read-only { background: var(--paper-2) !important; }
label, .field label { color: var(--ink-600); }
.hint { color: var(--ink-400); }
option { background: #fff; color: var(--ink-800); }
.req { color: var(--danger); }

/* ---- 按钮 ---- */
.btn-primary { background: linear-gradient(135deg, #ff6a00, #e63e00); border: 1px solid rgba(230,62,0,.5);
  color: #fff; text-shadow: 0 1px 2px rgba(90,20,0,.3);
  box-shadow: 0 6px 18px rgba(255,80,0,.28), inset 0 1px 0 rgba(255,255,255,.25); }
.btn-primary:hover { filter: brightness(1.08); box-shadow: 0 8px 24px rgba(255,80,0,.4), 0 0 16px rgba(255,106,0,.22); }
.btn-primary:disabled { background: var(--ink-200); border-color: var(--ink-200); color: var(--ink-400); }
.btn-ghost { background: #fff; border: 1px solid var(--line); color: var(--ink-600); }
.btn-ghost:hover { border-color: var(--brand-500); color: var(--brand-700); background: var(--brand-50); }
.btn-danger { background: linear-gradient(135deg, #d9536f, #b02c48); border-color: rgba(201,58,86,.5); color: #fff; }

/* ---- 徽章（浅底彩色）---- */
.b-brand { background: var(--brand-100); color: var(--brand-800); border-color: rgba(230,62,0,.25); }
.b-ok { background: var(--ok-bg); color: var(--ok); border-color: rgba(13,138,95,.22); }
.b-warn { background: var(--warn-bg); color: var(--warn); border-color: rgba(169,126,46,.25); }
.b-danger { background: var(--danger-bg); color: var(--danger); border-color: rgba(201,58,86,.25); box-shadow: none; }
.b-info { background: var(--info-bg); color: var(--info); border-color: rgba(45,111,176,.22); }
.b-gold { background: var(--gold-100); color: var(--gold-800); border-color: rgba(169,126,46,.28); }
.b-purple { background: var(--purple-bg); color: var(--purple); border-color: rgba(122,95,201,.25); }
.b-gray { background: var(--paper-2); color: var(--ink-500); border-color: var(--line); }

/* ---- 弹窗 / Toast：白玻璃 + 顶部橙线 ---- */
.modal-mask { background: rgba(6,11,24,.55); backdrop-filter: blur(6px); }
.modal { background: linear-gradient(170deg, #ffffff, #f7fafc); border: 1px solid var(--line);
  box-shadow: 0 30px 80px rgba(6,11,24,.3); }
.modal::before { background: linear-gradient(90deg, transparent, rgba(255,80,0,.4), transparent); }
.modal-title { color: var(--ink-900); }
.modal-close { background: #fff; color: var(--ink-400); border: 1px solid var(--line); }
.modal-close:hover { color: var(--danger); border-color: rgba(201,58,86,.4); background: var(--danger-bg); }
.modal-foot { background: var(--paper-2); border-top: 1px solid var(--line); }
#toast-root .toast { background: #fff; border: 1px solid var(--line); color: var(--ink-800);
  box-shadow: 0 14px 40px rgba(6,11,24,.18); border-left: 3px solid var(--brand-500); }

/* ---- 通知条 ---- */
.notice { border-radius: 12px; }
.n-info { background: var(--info-bg); color: var(--info); border-color: rgba(45,111,176,.22); }
.n-ok { background: var(--ok-bg); color: var(--ok); border-color: rgba(13,138,95,.22); }
.n-warn { background: var(--warn-bg); color: var(--warn); border-color: rgba(169,126,46,.25); }
.n-danger { background: var(--danger-bg); color: var(--danger); border-color: rgba(201,58,86,.28); }

/* ---- 勾选卡 / 分配弹窗 ---- */
.check-card { background: #fff; border: 1.5px solid var(--line); }
.check-card:hover { border-color: var(--brand-400); background: var(--brand-50); }
.check-card.on { border-color: var(--brand-600); background: var(--brand-50);
  box-shadow: inset 0 0 0 1px var(--brand-400), 0 4px 14px rgba(255,80,0,.1); }
.cc-text { color: var(--ink-800); }
.cc-sub { color: var(--ink-400); }
.cc-box { border: 1.5px solid var(--line); background: #fff; }
.check-card.on .cc-box { background: var(--brand-600); border-color: var(--brand-600); color: #fff; box-shadow: 0 2px 8px rgba(255,80,0,.3); }
.biz-block { background: #fff; border: 1.5px solid var(--line); }
.biz-head { background: var(--paper-2); }
.biz-head.on { background: var(--brand-50); box-shadow: inset 0 0 0 1.5px var(--brand-500); }
.biz-body { background: var(--paper); border: 1px dashed var(--line); }

/* ---- 门户内容卡 ---- */
.pi-biz { background: linear-gradient(135deg, #fff 55%, var(--paper-2)); border: 1.5px solid var(--line); }
.pi-biz-main { border-color: rgba(230,62,0,.35); background: linear-gradient(135deg, #fff 40%, var(--jade-50)); }
.pi-biz:hover { box-shadow: 0 16px 40px rgba(255,80,0,.14); border-color: var(--brand-500); }
.pb-icon { background: var(--jade-50); color: var(--brand-700); box-shadow: inset 0 0 0 1px rgba(230,62,0,.18); }
.pi-biz:not(.pi-biz-main) .pb-icon { background: var(--purple-bg); color: var(--purple); box-shadow: inset 0 0 0 1px rgba(122,95,201,.2); }
.pb-name { color: var(--ink-900); }
.pb-sub { color: var(--ink-500); }
.pb-foot { color: var(--brand-700); }
.lp-endorse { background: var(--brand-50); border: 1px solid rgba(230,62,0,.25); }
.lp-endorse b { background: linear-gradient(120deg, var(--ink-900) 15%, var(--brand-700) 55%, var(--purple) 90%); }
.lp-endorse svg { color: var(--brand-700); filter: none; }

/* ---- 农产品组件 ---- */
.agri-lane { background: var(--paper-2); border: 1px solid var(--line-soft); }
.al-item { background: #fff; border: 1px solid var(--line); }
.al-item:hover { border-color: var(--brand-500); }
.al-item b { color: var(--ink-800); }
.agri-timeline { border-left: 2px solid var(--line); }
.atl-dot { background: var(--brand-600); box-shadow: 0 0 0 3px rgba(255,80,0,.14); }
.atl-title { color: var(--ink-900); }
.atl-detail { color: var(--ink-600); }
.am-f-bar { background: var(--paper-2); }
.am-f-row b { color: var(--brand-700); }
.am-day span { color: var(--brand-700); }
.am-d-bar { background: var(--paper-2); }
.am-d-bar i { background: linear-gradient(180deg, var(--brand-500), var(--brand-700)); }
.am-ent b { color: var(--ink-800); }
.am-ev { background: #fff; border: 1px solid var(--line-soft); }
.am-ev:hover { border-color: rgba(230,62,0,.25); }
.am-ev b { color: var(--ink-800); }
.an2-item b { color: var(--ink-800); }
.st2-t-bar { background: var(--paper-2); }
.agri-meta { color: var(--ink-600); }
.mh-search input { background: #fff !important; color: var(--ink-800) !important; border: 1px solid var(--line) !important; }

/* ---- 空态 / Loading ---- */
.empty { color: var(--ink-300); }
.loading-dots i { background: var(--brand-500); }

/* ---- 时间轴 ---- */
.step-dot.on { background: var(--brand-600); box-shadow: 0 0 8px rgba(255,80,0,.35); }
.timeline-item .tl-dot { box-shadow: 0 0 6px rgba(255,80,0,.25); }

/* ---- 侧栏内（深空框架）文字沿用浅色变量例外 ---- */
.sidebar, .sidebar * { color-scheme: dark; }
.brand-name { color: #eaf6ff; }
.brand-sub, .su-role, .su-ent, .side-links a { color: var(--ink-300); }
.su-name { color: var(--ink-50); }
.nav-item { color: var(--ink-200); }
.nav-item:hover { color: var(--neon); background: rgba(255,143,77,.06); }
.nav-item.active { color: var(--neon); background: rgba(255,143,77,.1); border-color: rgba(255,143,77,.22);
  box-shadow: inset 3px 0 0 var(--neon), 0 0 16px rgba(255,143,77,.08); }
.nav-item.active .ni-icon { color: var(--neon); filter: drop-shadow(0 0 5px rgba(255,143,77,.5)); }
.nav-item .ni-icon { color: var(--ink-300); }
.nav-group-title { color: var(--ink-400); border-top: 1px solid rgba(255,255,255,.06); }
.nav-group-title .bar { background: linear-gradient(180deg, var(--neon), var(--purple)); box-shadow: var(--hud-glow); }
.nav-item .ni-badge { background: rgba(255,143,77,.18); color: var(--neon); border: 1px solid rgba(255,143,77,.3); }
.topbar-title { color: #eaf6ff; }
.topbar-sub { color: var(--ink-300); }
.chip-online { border: 1px solid rgba(45,216,160,.3); background: rgba(45,216,160,.08); }
.chip-online .dot { background: #2dd8a0; box-shadow: 0 0 8px #2dd8a0; }
.chip-online.offline { border-color: rgba(240,184,73,.3); background: rgba(240,184,73,.08); }
.chip-online.offline .dot { background: #f0b849; box-shadow: 0 0 8px #f0b849; }
#mode-text, #pt-mode-text { color: var(--ink-200); }
.role-chip { border: 1px solid rgba(255,143,77,.3); background: rgba(255,143,77,.08); color: var(--neon); }
.rc-dot { background: var(--neon); box-shadow: 0 0 8px var(--neon); }
.back-portal { background: rgba(255,143,77,.08); border: 1px solid rgba(255,143,77,.3); color: var(--neon); }
.back-portal:hover { background: rgba(255,143,77,.16); }
.avatar { background: linear-gradient(140deg, #ff8f4d, #e63e00); color: #fff; box-shadow: 0 0 14px rgba(255,106,0,.35); }
.ts-item { color: var(--ink-300); }
.ts-item b { color: var(--ink-50); font-family: var(--mono); }
.tb-strip-wh .ts-item b, .tb-strip-pf .ts-item b, .tb-strip-mall .ts-item b { color: var(--neon) !important; }
.side-stat { background: rgba(255,143,77,.05) !important; border: 1px solid rgba(255,143,77,.16) !important; }
.side-stat .ss-row b { color: var(--neon) !important; font-family: var(--mono); }

/* ---- 门户框架（深空）内文字 ---- */
.pt-name { color: #eaf6ff; text-shadow: 0 0 16px rgba(255,143,77,.3); }
.pt-sub { color: var(--ink-400); }
.pt-user b { color: var(--ink-50); }
.pt-user small { color: var(--ink-400); }
.pt-logout { color: var(--ink-300); }
.portal-nav a { color: var(--ink-200); }
.portal-nav a:hover { color: var(--neon); }
.portal-nav a.active { color: var(--neon); border-bottom-color: var(--neon); text-shadow: var(--hud-glow); }

/* ============ 垂直行业工作台（六行业同构页面） ============ */
.vv-lane { border:1px solid var(--line-soft); border-radius:12px; padding:14px 8px; text-align:center; background:var(--paper); }
.vv-lane b { display:block; font:700 22px/1.3 var(--mono); color:var(--ink-800); }
.vv-lane span { display:block; font-size:12px; color:var(--ink-500); margin-top:4px; }
.vv-lane.on { border-color:var(--va, rgba(255,106,0,.4)); background:var(--va-soft, rgba(255,106,0,.05)); }
.vv-lane.on b { color:var(--brand-600); }
.vv-reg { padding:8px 0; border-bottom:1px dashed var(--line-soft); }
.vv-reg:last-child { border-bottom:none; }
.vv-reg b { display:block; font-size:13px; color:var(--ink-800); }
.vv-reg .sub { margin-top:2px; }
.vv-steps { display:flex; flex-wrap:wrap; gap:6px; align-items:center; }
.vv-step { display:inline-flex; align-items:center; padding:4px 10px; border-radius:999px; border:1px solid var(--line); font-size:12px; color:var(--ink-500); background:var(--paper); }
.vv-step.done { border-color:rgba(255,106,0,.45); color:var(--brand-600); background:rgba(255,106,0,.06); }
.vv-step.cur { border-color:var(--brand-600); background:var(--brand-600); color:#fff; font-weight:700; }
.vv-steps i { font-style:normal; color:var(--ink-300); font-size:12px; }
.vv-feed { display:flex; align-items:center; gap:10px; padding:9px 0; border-bottom:1px dashed var(--line-soft); }
.vv-feed:last-child { border-bottom:none; }
.vv-feed .sub { margin-top:2px; }
@media (max-width:900px){ .vv-2col { grid-template-columns:1fr !important; } }

/* 权限分配受限项（企业管理员权限范围外模块） */
.check-card.cc-disabled { opacity: .45; cursor: not-allowed; }
.check-card.cc-disabled .cc-box { background: var(--line-soft); border-color: var(--line); }

/* ============ 行业专属视觉（六行业差异化设计语言） ============ */
/* 行业徽标（侧栏品牌位）：行业 emoji 圆标 */
.brand-logo.vert-emoji { display:flex; align-items:center; justify-content:center; font-size:22px; border-radius:12px; }
/* 行业 Hero 横幅：行业渐变 + 专属纹样层 + 口号 */
.vert-hero {
  position:relative; overflow:hidden; display:flex; align-items:center; gap:16px;
  padding:18px 22px; border-radius:16px; color:#eef6ff;
  background: linear-gradient(120deg, var(--va) 0%, var(--va2) 190%);
  box-shadow: 0 10px 34px -12px var(--va);
}
.vert-hero::before { /* 纹样层（行业专属图案） */
  content:''; position:absolute; inset:0; opacity:.16; pointer-events:none;
}
.vert-hero[data-pat="leaf"]::before  { background: radial-gradient(circle at 12% 120%, #fff 0 6%, transparent 7%), radial-gradient(circle at 30% 160%, #fff 0 9%, transparent 10%), radial-gradient(circle at 55% 200%, #fff 0 12%, transparent 13%); }
.vert-hero[data-pat="wave"]::before  { background: repeating-radial-gradient(circle at 85% -30%, transparent 0 26px, #fff 26px 28px, transparent 28px 54px, #fff 54px 55px); }
.vert-hero[data-pat="dot"]::before   { background: radial-gradient(#fff 22%, transparent 24%) 0 0/26px 26px, radial-gradient(#fff 22%, transparent 24%) 13px 13px/26px 26px; }
.vert-hero[data-pat="grid"]::before  { background: linear-gradient(#fff 1.5px, transparent 1.5px) 0 0/26px 26px, linear-gradient(90deg, #fff 1.5px, transparent 1.5px) 0 0/26px 26px; }
.vert-hero[data-pat="diag"]::before  { background: repeating-linear-gradient(-45deg, #fff 0 3px, transparent 3px 18px); }
.vert-hero[data-pat="chart"]::before { background: linear-gradient(transparent 68%, #fff 69% 70.5%, transparent 71%) 0 100%/34px 100%, linear-gradient(105deg, transparent 62%, #fff 63% 64%, transparent 65%); }
.vh-emoji { width:54px; height:54px; flex:none; display:flex; align-items:center; justify-content:center;
  font-size:30px; border-radius:14px; background:rgba(255,255,255,.18); backdrop-filter:blur(4px);
  border:1px solid rgba(255,255,255,.25); z-index:1; }
.vh-text { min-width:0; flex:1; z-index:1; }
.vh-name { font-size:18px; font-weight:800; letter-spacing:.5px; text-shadow:0 1px 8px rgba(0,0,0,.18); }
.vh-slogan { font-size:12.5px; opacity:.92; margin-top:4px; letter-spacing:.6px; }
.vh-tags { display:flex; gap:10px; z-index:1; }
.vh-tags span { display:flex; flex-direction:column; align-items:center; padding:6px 12px; border-radius:12px;
  background:rgba(255,255,255,.16); border:1px solid rgba(255,255,255,.22); font-size:12px; }
.vh-tags b { font-size:16px; font-family:var(--mono); }
@media (max-width:640px) { .vh-tags { display:none; } .vh-name { font-size:15px; } }
/* 行业 shell 内组件随行业色（泳道/卡片顶光线/环节步骤已用 --va/--brand-600 变量自动跟随） */
.vert-shell .card { border-top: 2px solid var(--va); }
.vert-shell .nav-item.active { box-shadow: inset 2px 0 0 var(--neon); }
.vert-shell .badge.b-brand { background: var(--va-soft); color: var(--va); }

/* ============ 行业 KPI 仪表骨架（六套差异化） ============ */
.vk-row { display:grid; gap:12px; }
.vk-rings, .vk-gauges, .vk-panels, .vk-tickers, .vk-bigs { grid-template-columns:repeat(4,1fr); }
@media (max-width:900px){ .vk-rings,.vk-gauges,.vk-panels,.vk-tickers,.vk-bigs { grid-template-columns:repeat(2,1fr); } }

/* ① 生态环形仪表（特色种植） */
.vk-ring { position:relative; background:#fff; border:1px solid var(--line); border-radius:16px; padding:14px 10px 12px; text-align:center; box-shadow:var(--shadow-sm); }
.vk-ring svg { width:84px; height:84px; }
.vk-ring .vr-bg { fill:none; stroke:var(--paper,#eef3f8); stroke-width:7; }
.vk-ring .vr-fg { fill:none; stroke:var(--va); stroke-width:7; stroke-linecap:round; filter:drop-shadow(0 0 5px var(--va-soft)); transition:stroke-dasharray .8s ease; }
.vr-num { position:absolute; top:44px; left:0; right:0; font:700 20px/1 var(--mono); color:var(--ink-900); }
.vr-num small { font-size:12px; color:var(--ink-500); margin-left:2px; }
.vr-k { margin-top:6px; font-size:12px; color:var(--ink-500); }

/* ② 海洋半圆仪表（水产） */
.vk-gauge { position:relative; background:linear-gradient(180deg,#fff, #f7fbfe); border:1px solid var(--line); border-radius:16px; padding:14px 10px 12px; text-align:center; box-shadow:var(--shadow-sm); overflow:hidden; }
.vk-gauge::after { content:''; position:absolute; left:0; right:0; bottom:0; height:38%;
  background:repeating-radial-gradient(circle at 50% 130%, transparent 0 9px, var(--va-soft) 9px 11px); pointer-events:none; }
.vk-gauge svg { width:110px; height:62px; }
.vk-gauge .vg-bg { fill:none; stroke:#e8f0f7; stroke-width:8; }
.vk-gauge .vg-fg { fill:none; stroke:var(--va); stroke-width:8; stroke-linecap:round; filter:drop-shadow(0 0 5px var(--va-soft)); transition:stroke-dasharray .8s ease; }
.vg-num { margin-top:-18px; font:700 21px/1 var(--mono); color:var(--ink-900); }
.vg-num small { font-size:12px; color:var(--ink-500); margin-left:2px; }
.vg-k { margin-top:6px; font-size:12px; color:var(--ink-500); }

/* ③ 透明工厂传送带（食品加工） */
.vk-conveyor { position:relative; display:flex; justify-content:space-between; padding:26px 8px 6px; }
.vc-belt { position:absolute; left:4%; right:4%; top:44px; height:8px; border-radius:8px;
  background:repeating-linear-gradient(90deg, #d7dde6 0 14px, #eef2f7 14px 28px); box-shadow:inset 0 1px 2px rgba(0,0,0,.12); }
.vc-belt::after { content:''; position:absolute; inset:0; border-radius:8px; background:linear-gradient(90deg, transparent, var(--va-soft), transparent);
  background-size:200% 100%; animation:belt-run 2.6s linear infinite; }
@keyframes belt-run { from { background-position:200% 0; } to { background-position:-200% 0; } }
.vc-node { position:relative; z-index:1; flex:1; text-align:center; }
.vc-dot { width:44px; height:44px; margin:0 auto; border-radius:50%; display:flex; align-items:center; justify-content:center;
  background:#fff; border:3px solid #d7dde6; font:700 15px var(--mono); color:var(--ink-400); }
.vc-node.on .vc-dot { border-color:var(--va); color:var(--va); box-shadow:0 0 0 5px var(--va-soft), 0 4px 14px -4px var(--va); }
.vc-node.last.on .vc-dot { background:var(--va); color:#fff; }
.vc-name { margin-top:8px; font-size:12px; color:var(--ink-600); }

/* ④ 工业数码面板（工业品）：深色内嵌仪表 */
.vk-panel { background:linear-gradient(180deg,#14181f,#0e1218); border:1px solid #262c37; border-radius:14px; padding:14px 16px 12px; position:relative; overflow:hidden; box-shadow:inset 0 1px 0 rgba(255,255,255,.05), 0 6px 18px -8px rgba(0,0,0,.5); }
.vk-panel::before, .vk-panel::after { content:''; position:absolute; width:7px; height:7px; border-radius:50%; background:#2c3442; box-shadow:inset 0 1px 1px rgba(0,0,0,.6); top:8px; }
.vk-panel::before { left:8px; } .vk-panel::after { right:8px; }
.vp-l { font-size:12px; color:#8b95a5; letter-spacing:.14em; }
.vp-v { margin-top:6px; font:700 27px/1.1 var(--mono); color:var(--va); text-shadow:0 0 14px var(--va-soft), 0 0 3px var(--va-soft); letter-spacing:.06em; }
.vp-v span { font-size:12px; color:#8b95a5; margin-left:4px; text-shadow:none; }
.vp-bar { margin-top:10px; height:4px; border-radius:3px; background:#1d232d; overflow:hidden; }
.vp-bar i { display:block; height:100%; background:linear-gradient(90deg, var(--va), var(--va2)); border-radius:3px; box-shadow:0 0 8px var(--va-soft); }
.vp-tick { margin-top:6px; display:flex; justify-content:space-between; }
.vp-tick::before { content:'0'; } .vp-tick::after { content:'MAX'; font-size:8px; margin-top:2px; }
.vp-tick { font:400 8px var(--mono); color:#5b6575; }

/* ⑤ 金融终端行情卡（金融服务） */
.vk-ticker { background:#fff; border:1px solid var(--line); border-left:3px solid var(--va); border-radius:12px; padding:12px 14px; box-shadow:var(--shadow-sm); position:relative; overflow:hidden; }
.vk-ticker::after { content:''; position:absolute; right:-16px; top:-16px; width:56px; height:56px; border-radius:50%; background:radial-gradient(circle, var(--va2) 0%, transparent 70%); opacity:.14; }
.tk-l { font-size:12px; color:var(--ink-500); }
.tk-v { margin-top:4px; font:700 24px/1.1 var(--mono); color:var(--ink-900); }
.tk-v span { font-size:12px; color:var(--ink-500); margin-left:3px; }
.tk-note { margin-top:4px; font-size:12px; color:var(--ink-400); }
.tk-note.up { color:var(--va); }
.tk-line { margin-top:8px; height:3px; border-radius:2px; background:var(--paper,#eef3f8); overflow:hidden; }
.tk-line i { display:block; height:100%; background:linear-gradient(90deg, var(--va2), var(--va)); }

/* ⑥ 大数字简洁卡（水果/默认） */
.vk-big { background:#fff; border:1px solid var(--line); border-radius:16px; padding:14px 16px; box-shadow:var(--shadow-sm); overflow:hidden; position:relative; }
.vk-big::before { content:''; position:absolute; right:-22px; bottom:-22px; width:88px; height:88px; border-radius:50%; background:var(--va-soft); }
.vb-k { font-size:12px; color:var(--ink-500); }
.vb-v { margin-top:6px; font:800 32px/1.05 var(--mono); color:var(--va); }
.vb-v small { font-size:12px; color:var(--ink-500); font-weight:500; margin-left:3px; }
.vb-bar { display:block; margin-top:10px; height:3px; border-radius:2px; background:linear-gradient(90deg, var(--va), var(--va2)); }

/* Hero 扫光动效（科技感：光带缓慢扫过横幅） */
.vert-hero::after { content:''; position:absolute; top:0; bottom:0; width:36%; left:-50%;
  background:linear-gradient(100deg, transparent, rgba(255,255,255,.22), transparent); animation:hero-sweep 4.5s ease-in-out infinite; z-index:0; }
@keyframes hero-sweep { 0% { left:-50%; } 55% { left:120%; } 100% { left:120%; } }

/* 行业内容区微纹理（工业=工程网格 / 金融=细线上扬），其余保持简洁白底 */
.vert-shell[data-vert="ind"] .content { background-image:linear-gradient(rgba(124,141,166,.05) 1px, transparent 1px), linear-gradient(90deg, rgba(124,141,166,.05) 1px, transparent 1px); background-size:36px 36px; }
.vert-shell[data-vert="fin"] .content { background-image:linear-gradient(105deg, transparent 49.6%, rgba(62,111,232,.05) 49.8%, rgba(62,111,232,.05) 50%, transparent 50.2%); background-size:56px 56px; }

/* ============ 行业批次视图（农业类卡片网格 / 台账类专属表格行） ============ */
#vb-list.vb-grid { display:grid; grid-template-columns:repeat(auto-fill,minmax(272px,1fr)); gap:12px; }
.vb-card { background:#fff; border:1px solid var(--line); border-radius:14px; padding:14px 14px 12px; box-shadow:var(--shadow-sm); position:relative; overflow:hidden; transition:transform .2s ease, box-shadow .2s ease; }
.vb-card:hover { transform:translateY(-2px); box-shadow:0 10px 26px -10px var(--va); }
.vb-card::before { content:''; position:absolute; left:0; top:0; bottom:0; width:3px; background:linear-gradient(180deg, var(--va), var(--va2)); }
.vbc-head { display:flex; align-items:flex-start; gap:10px; }
.vbc-emoji { width:36px; height:36px; flex:none; display:flex; align-items:center; justify-content:center; font-size:19px; border-radius:10px; background:var(--va-soft); }
.vbc-tt { min-width:0; flex:1; }
.vbc-tt b { display:block; font-size:14px; }
.vbc-tt .sub { display:block; font-size:12px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.vbc-code { margin-top:8px; font:600 12px var(--mono); color:var(--ink-500); }
.vbc-code b { color:var(--va); font-size:14px; }
.vbc-micro { display:flex; align-items:center; gap:3px; margin-top:10px; }
.vbc-micro i { flex:1; height:5px; border-radius:3px; background:var(--paper,#eef3f8); }
.vbc-micro i.done { background:var(--va-soft); }
.vbc-micro i.cur { background:var(--va); box-shadow:0 0 7px var(--va); animation:micro-pulse 1.8s ease-in-out infinite; }
@keyframes micro-pulse { 0%,100% { opacity:1; } 50% { opacity:.55; } }
.vbc-micro span { font:600 10px var(--mono); color:var(--ink-400); margin-left:6px; }
.vbc-ops { display:flex; gap:6px; margin-top:12px; flex-wrap:wrap; }

/* 台账类行业表格行专属风格 */
/* 工业品：序列号面板行（深色码值+工程边） */
.vert-shell[data-vert="ind"] .card-body table tbody tr td:first-child { position:relative; }
.vert-shell[data-vert="ind"] .card-body table tbody tr { border-bottom:1px dashed #d5dbe4; }
.vert-shell[data-vert="ind"] .card-body table tbody tr td b { color:var(--va); text-shadow:0 0 10px var(--va-soft); }
/* 金融服务：行情列表行（左色线+悬浮高亮） */
.vert-shell[data-vert="fin"] .card-body table tbody tr { position:relative; }
.vert-shell[data-vert="fin"] .card-body table tbody tr::before { content:''; position:absolute; left:0; top:8px; bottom:8px; width:2px; background:linear-gradient(180deg,var(--va),transparent); opacity:0; transition:opacity .18s; }
.vert-shell[data-vert="fin"] .card-body table tbody tr:hover::before { opacity:1; }
/* 食品加工：工序表格（表头烘焙金底） */
.vert-shell[data-vert="food"] .card-body table thead th { background:linear-gradient(180deg, rgba(217,119,6,.14), rgba(217,119,6,.07)); border-bottom:2px solid var(--va); }

/* V1.37 合同起草：相对方企业搜索联想下拉 + 条款正文块 */
.ent-drop{position:absolute;top:100%;left:0;right:0;z-index:30;background:#fff;border:1px solid var(--line);border-radius:10px;box-shadow:0 8px 24px rgba(15,23,42,.12);max-height:240px;overflow:auto;display:none;margin-top:4px}
.ent-opt{padding:9px 12px;cursor:pointer;font-size:13px;display:flex;align-items:center;gap:6px}
.ent-opt:hover{background:rgba(191,144,64,.10)}
.ct-body{white-space:pre-wrap;word-break:break-word;background:var(--bg-2,#f8fafc);border:1px solid var(--line);border-radius:10px;padding:16px 18px;font-size:14px;line-height:1.95;max-height:440px;overflow:auto;margin:0}

/* ================= V1.40 门户紧凑纯白（.portal-shell 作用域，不影响业务系统） ================= */
.portal-shell { background: #fff; }
.portal-top { padding: 10px 20px; }
.portal-nav { width: 214px; padding: 6px 10px 18px; }
/* MMMM 批：ps-group 紧凑态只调间距，字号/色/字距统一由主定义（370 行）控制，避免两套规格打架 */
.portal-nav .ps-group { padding: 12px 10px 5px; }
.portal-nav a { padding: 9px 12px; margin: 1px 0; font-size: 14.5px; gap: 9px; }
.portal-nav a svg { width: 15px; height: 15px; }
.portal-nav .ps-side-foot { margin-top: 12px; padding: 10px 10px 0; }
.portal-main { padding: 14px 20px 26px; max-width: none; }
/* 卡片：纯白、去投影、边线统一浅灰、标题图标墨色（去金）、间距收紧 */
.portal-shell .card { background: #fff; box-shadow: none; border: 1px solid var(--line-soft); border-radius: 10px; }
.portal-shell .card-title { padding: 11px 16px 0; font-size: 13.5px; gap: 8px; }
.portal-shell .card-title svg { color: var(--ink-500); width: 15px; height: 15px; }
.portal-shell .card-body { padding: 10px 16px 14px; }
.portal-shell .card-pad { padding: 16px; }
.portal-shell .grid { gap: 16px; }
/* 页头（JJJJ2：撤销历史压缩层——档位回归全局令牌 h1 24px/sub 13px，区块间距 20px） */
.portal-shell .page-head { margin-bottom: 20px; gap: 10px; }
.portal-shell .page-actions .btn { height: 34px; font-size: 13px; padding: 0 14px; }
/* 数据条：去投影、收紧、hover 去金底 */
.portal-shell .statband { box-shadow: none; border: 1px solid var(--line-soft); border-radius: 10px; }
.portal-shell .statband .sb-cell { padding: 13px 16px; }
.portal-shell .statband .sb-cell:hover { background: #f6f8f6; }
/* 门户首页 hero / 页签 / 面板收紧 */
.pi-wrap { max-width: 1280px; }
/* 认证卡 / 门卡收紧（V1.52：pw-card/pw-stepper 已合并至基础定义，见 L448 段） */
.pw-gate { padding: 14px 16px; margin-bottom:  12px; }
/* 门户首页（工作台）卡区间距 */
#pi-axx .card { margin: 0; }
@media (max-width: 900px) { .portal-main { padding: 12px 12px 22px; } }

/* ================= V1.43 门户侧栏收缩（图标模式 + 记忆状态） ================= */
.pt-nav-fold { display: inline-flex; align-items: center; justify-content: center; width: 34px; height: 34px; border-radius: 8px; color: var(--ink-500); cursor: pointer; flex: none; }
.pt-nav-fold:hover { background: #f4f6f4; color: var(--ink-900); }
.pt-nav-fold svg { width: 18px; height: 18px; }
/* 折叠态：窄条仅图标，分组标题成细分隔线，悬浮显示完整名称 */
.portal-nav.collapsed { width: 56px; padding: 6px 6px 14px; }
.portal-nav.collapsed a { justify-content: center; padding: 9px 0; gap: 0; position: relative; }
.portal-nav.collapsed a .pn-t { display: none; }
.portal-nav.collapsed .ps-group { padding: 10px 0 6px; font-size: 0; text-align: center; }
.portal-nav.collapsed .ps-group::after { content: ''; display: block; height: 1px; background: var(--line-soft); }
.portal-nav.collapsed .ps-side-foot { display: none; }
.portal-nav.collapsed a:hover::after {
  content: attr(data-tip); position: absolute; left: calc(100% + 10px); top: 50%; transform: translateY(-50%);
  background: var(--ink-900, #1f2937); color: #fff; font-size: 12px; font-weight: 600; padding: 5px 10px; border-radius: 6px;
  white-space: nowrap; z-index: 60; pointer-events: none;
}
@media (max-width: 900px) { .pt-nav-fold { display: none; } .portal-nav.collapsed { width: 100%; } .portal-nav.collapsed a .pn-t { display: inline; } .portal-nav.collapsed a { justify-content: flex-start; padding: 8px 12px; } .portal-nav.collapsed .ps-group { font-size: 11.5px; } .portal-nav.collapsed .ps-group::after { display: none; } }

/* ================= V1.44 分组级折叠（点击分组标题收起/展开该组） ================= */
.ps-group.ps-foldable { cursor: pointer; user-select: none; display: flex; align-items: center; }
.ps-group.ps-foldable::after { content: '▾'; margin-left: auto; font-size: 10px; color: var(--ink-400); transition: transform .15s; line-height: 1; }
.ps-group.ps-foldable:hover::after { color: var(--ink-700); }
.ps-group.ps-folded::after { transform: rotate(-90deg); }
.portal-nav.collapsed .ps-group.ps-foldable::after { display: none; }
@media (max-width: 900px) { .ps-group.ps-foldable::after { display: none; } }

/* ================= V1.47 门户纯白收口 =================
   历史暗色 HUD 皮肤段（上方 L718-732）无条件把门户顶栏/侧栏染成深蓝黑玻璃，
   覆盖了此前的白色规则——本段置于文件末尾（最高优先级）将门户外壳彻底摘出暗色皮肤；
   业务系统外壳（.topbar/.nav-item 等）保留 HUD 风格不受影响。 */
.portal-top { background: #fff !important; border-bottom: 1px solid var(--line-soft) !important; backdrop-filter: none !important; }
.portal-top::after { display: none !important; }
.pt-name { color: var(--ink-800) !important; text-shadow: none !important; }
.pt-sub { color: var(--ink-400) !important; }
.pt-user b { color: var(--ink-800) !important; }
#pt-mode-text { color: var(--ink-500) !important; }
.portal-top .chip-online { background: #fff !important; border: 1px solid var(--line) !important; box-shadow: none; }
.portal-top .chip-online .dot { box-shadow: 0 0 0 3px rgba(14,159,110,.12) !important; }
.pt-nav-fold { color: var(--ink-500); }
.portal-nav { background: #fff !important; border-bottom: none !important; border-right: 1px solid var(--line-soft); }
.portal-nav a, .portal-nav a:hover { color: var(--ink-600) !important; text-shadow: none !important; }
.portal-nav a:hover { color: var(--ink-900) !important; }
.portal-nav a.on { color: var(--ink-900) !important; }
.portal-nav .ps-group { color: var(--ink-400) !important; }
.portal-shell { background: var(--paper) !important; }  /* JJJJ2：撤销白底 !important 对 PPPP 层的误压——壳浅灰 + 白卡浮起层次（shadcn 表面层级规范） */

/* ================= V1.48 门户排版收口 · JJJJ2 对齐令牌 =================
   ① 功能卡片标题与内容区加分割线（此前名称区无分割，内容贴着标题）
   ② 功能/系统网格自适应填满（固定 5 列/2 列在行尾留大片空白）
   ③ 居中表单卡放宽（560px 在大屏两侧空白过大）
   JJJJ2：title/body 内边距由压缩值（11/16/10 与 2/16/14）对齐设计令牌
   pad-card-x=20 + 4px 基线（标题区 14-12，内容区 14-18） */
.portal-shell .card-title { padding: 14px var(--pad-card-x) 12px; border-bottom: 1px solid var(--line-soft); margin-bottom: 12px; }
.portal-shell .card-body { padding: 14px var(--pad-card-x) 18px; }
.portal-shell .card-title:only-child, .portal-shell .card-title:last-child { margin-bottom: 0; }
.pi-bizs { grid-template-columns: repeat(auto-fill, minmax(340px, 1fr)) !important; }
/* 工作台待办四格：名称与数字紧凑分割 */
#pi-axx .axx-todo { border: 1px solid var(--line-soft); }
/* 页头与首个内容块间距收口 */
.portal-shell .page-head + * { margin-top: 0 !important; }
.portal-shell .card + .card { margin-top: 12px; }

/* ================= V1.52 portal-home（我的认证）排版重构 =================
   ① 身份条并入页头右侧（正文去横条，pw-me-bar 类已随四代旧定义一并删除）
   ② 步骤序号统一圆点语言（对齐账号认证页 stepper；去全角 ①②③ 字符）
   ③ 印章卡去孤例蓝框与 API 编号文案；印章槽实线浅底（去草稿感虚线）
   ④ 区内卡距统一 16px（8 倍数体系；徽章三语义：绿=完成 / 金=进行中 / 灰=信息） */
#pw-body .pw-steps-row + .grid, #pw-body .card + .card { margin-top: 16px; }
#pw-head-side { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; justify-content: flex-end; }

/* ================= V1.53 业务 shell 白底 + 品牌色点缀（全站视觉统一） =================
   病灶：卡片虽白（--hud-panel 已覆盖为 #fff），但侧栏/顶栏仍是深空玻璃、neon 荧光
   （#00c8e0 + 发光）在白底上对比度不足、role-hero/dark-panel 暗渐变——两套皮肤杂交。
   本段以 .shell 作用域统一为白底 + 品牌色点缀；点缀色走 var(--neon)（.shell 内
   重定义为深青 #0891b2 保证白底可读；垂直行业经 inline --neon 注入行业色，
   换肤能力保留——仅去发光、提对比、去暗底）。 */
.shell { --neon: #0891b2; --neon-dim: rgba(8,145,178,.6); --hud-glow: none; background: var(--paper, #f6f8f7); }
/* 顶栏：白底细边（去深空玻璃与青色底线） */
.shell .topbar { background: #fff; backdrop-filter: none; border-bottom: 1px solid var(--line-soft); box-shadow: 0 1px 3px rgba(11,16,14,.04); }
.shell .topbar::after { display: none; }
.shell .topbar-title { color: var(--ink-900, #16202c); }
.shell .topbar-sub { color: var(--ink-400); }
.shell .avatar { background: var(--jade-600, #0e9f6e); color: #fff; box-shadow: none; }
.shell .chip-online { border-color: var(--line); background: #fff; }
/* 侧栏：纸白渐层 + 品牌色选中（去深空渐变与 color-scheme:dark） */
.shell .sidebar { background: linear-gradient(180deg, #fbfdfc, #f3f7f5); border-right: 1px solid var(--line-soft); }
.shell .sidebar, .shell .sidebar * { color-scheme: light; }
.shell .brand-name { color: var(--ink-900); text-shadow: none; }
.shell .brand-sub, .shell .su-role, .shell .su-ent, .shell .side-links a { color: var(--ink-400); }
.shell .su-name { color: var(--ink-800); }
.shell .nav-item { color: var(--ink-600); }
.shell .nav-item:hover { color: var(--ink-900); background: rgba(14,159,110,.06); }
.shell .nav-item.active { color: var(--ink-900); background: rgba(14,159,110,.10); border-color: transparent; box-shadow: inset 3px 0 0 var(--neon); }
.shell .nav-item.active .ni-icon { color: var(--neon); filter: none; }
.shell .nav-item .ni-icon { color: var(--ink-400); }
.shell .nav-item .ni-badge { background: rgba(8,145,178,.1); color: var(--neon); border: 1px solid rgba(8,145,178,.25); }
.shell .nav-group-title { color: var(--ink-400); border-top: 1px solid var(--line-soft); }
.shell .nav-group-title .bar { background: var(--neon); box-shadow: none; }
.shell .back-portal { background: #fff; border: 1px solid var(--line); color: var(--ink-600); }
.shell .back-portal:hover { background: #f2f6f4; }
.shell .role-chip { background: rgba(8,145,178,.07); border-color: rgba(8,145,178,.3); color: var(--neon); }
.shell .rc-dot { background: var(--neon); box-shadow: none; }
.shell .side-stat { background: #fff !important; border: 1px solid var(--line-soft) !important; }
.shell .side-stat .ss-row b { color: var(--ink-900) !important; }
.shell .ts-item { color: var(--ink-500); }
.shell .ts-item b { color: var(--ink-800); }
/* 驾驶舱头图 / 深色面板：白底 + 品牌色点缀 */
.role-hero { background: linear-gradient(135deg, #fff 55%, var(--jade-50, #ecf7f1)); border: 1px solid var(--line-soft); box-shadow: none; color: var(--ink-700); }
.role-hero::after { display: none; }
.role-hero .rh-eyebrow { color: var(--jade-700, #0b7a55); }
.role-hero .rh-title { color: var(--ink-900); }
.role-hero .rh-sub { color: var(--ink-500); }
.role-hero .rh-role .rhr-tag { color: var(--gold-700, #b45309); border: 1px solid var(--gold-200, #ead9b0); background: var(--gold-50, #fdf8ec); }
.dark-panel { background: #fff; border: 1px solid var(--line-soft); color: var(--ink-700); box-shadow: none; }
.dark-panel h3 { color: var(--ink-900); }
.dark-panel .dp-num { color: var(--ink-900); }
.dark-panel .dp-num small { color: var(--ink-400); }
.dark-panel .dp-label { color: var(--ink-500); }
/* M5（对比度修复）：白底皮肤下的驾驶舱头部/徽章/按钮深色口径 */
.dark-panel .dp-eyebrow { color: var(--ink-500); }
.dark-panel .dp-title { color: var(--ink-900); }
.dark-panel .dp-sub { color: var(--ink-500); }
.dark-panel .dp-chain { color: var(--gold-700, #b45309); }
.dark-panel .dp-danger { color: var(--danger, #c62828); }
.dark-panel .rhr-tag { color: var(--gold-700, #b45309); border: 1px solid var(--gold-200, #ead9b0); background: var(--gold-50, #fdf8ec); }
.dark-panel .btn-dp { background: #fff !important; color: var(--ink-600) !important; border-color: var(--line) !important; }
.dark-panel .btn-dp:hover { color: var(--neon) !important; border-color: rgba(8,145,178,.4) !important; background: rgba(8,145,178,.05) !important; }
/* 数据数字 / 图标 / 徽章：回白底友好口径（HUD 段曾以 neon 发光覆盖基础定义） */
.shell .sb-num { color: var(--ink-900); text-shadow: none; font-family: var(--font); }
.shell .card-title svg { color: var(--gold-600); }
.shell .b-brand { background: var(--jade-50); color: var(--jade-700); box-shadow: inset 0 0 0 1px var(--jade-200); border-color: transparent; }
.shell .btn-ghost:hover { border-color: rgba(8,145,178,.4); color: var(--neon); background: rgba(8,145,178,.05); }
.shell .kpi { background: #fff; border: 1px solid var(--line-soft); }
.shell .statband { background: #fff; border: 1px solid var(--line-soft); box-shadow: none; }
/* 输入系 / 标签 / 移动底栏翻白（HUD 段曾以全局 !important 强制黑底与荧光聚焦） */
input, textarea, select { background: #fff !important; color: var(--ink-800, #1f2937) !important; border: 1.5px solid var(--line) !important; }
input::placeholder, textarea::placeholder { color: var(--ink-400) !important; }
input:focus, textarea:focus, select:focus { border-color: var(--brand-600, #0891b2) !important; box-shadow: 0 0 0 3px rgba(8,145,178,.12) !important; }
input:read-only { background: var(--paper-2, #f4f7f5) !important; }
label, .field label { color: var(--ink-700, #334155); }
/* .m-bottombar 白底覆盖已暂时封存（2026-10-29）：原文见 mobile-sealed/mobile-nav.sealed.css【C4】 */
/* 顶栏角色状态条（role-theme 各角色暗条）→ 白底细边 */
.shell .tb-strip, .shell .tb-strip-bank, .shell [class*="tb-strip"] { background: var(--paper-2, #f4f7f5) !important; border-bottom: 1px solid var(--line-soft); }
.shell .tb-strip .ts-item b { color: var(--ink-800) !important; }
.shell .side-stat { background: #fff !important; }
/* 顶栏白底终极保险（历史五代皮肤含 [data-role] 同级规则，!important 一次定音） */
.shell .topbar, .portal-shell .portal-top { background: #fff !important; border-bottom: 1px solid var(--line-soft) !important; }

/* ================= V1.53b 对比度修复（白底化后残留的"浅字浅底"清单式收口） =================
   注：mh-*（商城暗色横幅）与 .vert-hero（行业色渐变）为自洽深底浅字，不在本段处理 */
/* 驾驶舱/暗面板标题：反杀 L880 的 #eaf6ff !important */
.shell .rh-title, .shell .dp-num { color: var(--ink-900) !important; text-shadow: none !important; }
.shell .kpi-num { color: var(--ink-900) !important; }
/* 门户业务系统卡（pi-biz 内部浅字/荧光图标） */
.pi-biz .pb-name { color: var(--ink-900) !important; }
.pi-biz .pb-sub { color: var(--ink-500) !important; }
.pi-biz .pb-foot { color: var(--ink-500) !important; }
.pi-biz .pb-icon { background: var(--jade-50, #ecf7f1) !important; color: var(--jade-700, #0b7a55) !important; box-shadow: inset 0 0 0 1px var(--jade-200, #c8e8d8) !important; }
.pi-biz:not(.pi-biz-main) .pb-icon { background: var(--paper-2, #e8edf4) !important; color: var(--ink-700) !important; box-shadow: inset 0 0 0 1px var(--line) !important; }
/* 侧栏分组小字 / 顶栏状态条 / 侧栏统计条（role-theme 浅字残留） */
.shell .nav-group-title small { color: var(--ink-400); }
.shell .tb-strip .ts-item, .shell .tb-strip-bank .ts-item { color: var(--ink-500); }
.shell .side-stat .ss-t { color: var(--ink-500); }
.shell .side-stat .ss-row { color: var(--ink-600); }
.shell .side-stat .ss-row .ss-warn { color: var(--gold-700) !important; }
/* HUD 列表/日历/审批浅字（ink-50 系 → 深字） */
.shell .al-item b, .shell .atl-title, .shell .am-ent b, .shell .am-ev b, .shell .an2-item b { color: var(--ink-900); }
.shell .cc-text { color: var(--ink-600); }
.shell .am-day span { color: var(--ink-500); }
.shell .am-f-row b { color: var(--ink-800); }
.shell .mh-cat:hover { color: var(--gold-700); }
/* 门户内链接色（全局 a=neon 浅青在白底不可读 → 品牌青绿） */
.portal-shell a { color: var(--jade-700, #0b7a55); }
.portal-shell .pt-mode, .portal-shell #pt-mode-text { color: var(--ink-500) !important; }

/* ============ V1.40b 业务侧栏功能分组：默认收起 + 点击折叠 + 标题字体放大 ============ */
.shell .nav-group-title {
  font: 700 13px/1.25 var(--font); letter-spacing: .05em; color: var(--ink-700);
  padding: 7px 10px; border-radius: 9px; cursor: pointer; user-select: none;
}
.shell .nav-group-title:hover { background: #f2f4f3; }
.shell .nav-group-title .bar { height: 12px; }
.shell .nav-group-title small {
  margin-left: auto; font: 500 11.5px/1.3 var(--font); color: var(--ink-400);
  letter-spacing: 0; text-align: right; text-transform: none;
}
.shell .nav-group-title .ng-arrow {
  flex: none; margin-left: 6px; font-size: 12px; color: var(--ink-400);
  transition: transform .18s ease;
}
.nav-group.collapsed .nav-item { display: none; }
.nav-group.collapsed .ng-arrow { transform: rotate(-90deg); margin-left: auto; }
.nav-group.collapsed .nav-group-title small { display: none; }
/* 收起态组间距收紧（连续多组收起时更紧凑） */
.nav-group.collapsed { margin-top: 4px; }
/* 门户分组头同步放大（V1.44 折叠已就绪，仅字号提升） */
.portal-nav .ps-group { font: 700 13.5px/1 var(--font); }
.portal-nav .pn-t { font-size: 15px; }

/* ============ V1.40c 侧栏底部用户区翻白（暗色残留：黑透灰底+浅字 → 白底深字） ============ */
.shell .side-user { background: transparent; border-top: 1px solid var(--line-soft); }
.shell .side-user .su-name { color: var(--ink-900); }
.shell .side-user .su-role {
  color: var(--gold-700, #b45309); border: 1px solid var(--gold-200, #ead9b0);
  background: var(--gold-50, #fdf8ec);
}
.shell .side-user .su-ent { color: var(--ink-500); }
.shell .side-links a { background: #fff; color: var(--ink-600); border: 1px solid var(--line-soft); }
.shell .side-links a:hover { background: #f3f6f4; color: var(--ink-900); }
/* 返回门户按钮：荧光暗底残留 → 白底品牌描边 */
.shell .back-portal {
  background: #fff; border: 1px solid var(--line-soft); color: var(--ink-700);
}
.shell .back-portal:hover { background: #f3f6f4; color: var(--ink-900); }

/* ---------- V1.46x 淘宝式商城首页：品牌条/广告条/三栏/轮播/金刚区/右栏 ---------- */
.tb-brand { display:flex; gap:18px; align-items:center; margin-bottom:12px; flex-wrap:wrap; }
.tb-logo { display:flex; gap:10px; align-items:center; }
.tb-logo svg { width:34px; height:34px; color:var(--brand-600); }
.tb-logo b { font:800 22px/1.1 var(--font); color:var(--ink-900); display:flex; align-items:baseline; gap:6px; }
.tb-logo i { font-style:normal; font-size:13px; color:var(--gold-700,#a8842f); background:linear-gradient(135deg,var(--gold-50,#fdf8ec),var(--gold-100,#faf1dc)); border:1px solid var(--gold-200,#f4e3b8); padding:2px 8px; border-radius:8px; }
.tb-search { flex:1; min-width:280px; display:flex; gap:0; border:2.5px solid var(--brand-600); border-radius:12px; overflow:hidden; background:var(--card); }
.tb-search input { flex:1; border:0; outline:0; padding:10px 14px; font-size:13.5px; background:transparent; }
.tb-search .btn { border-radius:0; }
.tb-cartops { display:flex; gap:8px; }
.tb-cartops a { display:flex; gap:6px; align-items:center; padding:8px 14px; border:1.5px solid var(--line); border-radius:10px; cursor:pointer; font-size:13px; color:var(--ink-700); background:var(--card); }
.tb-cartops a:hover { border-color:var(--brand-500); color:var(--brand-700); }
.tb-cartops svg { width:16px; height:16px; }
.tb-cart-a { position:relative; }
.tb-cart-n { position:absolute; top:-7px; right:2px; background:var(--danger,#c62828); color:#fff; border-radius:8px; font-size:10px; line-height:1; padding:2px 5px; min-width:14px; text-align:center; font-weight:700; font-style:normal; }
.tb-n-badge { margin-left:auto; background:var(--danger,#c62828); color:#fff; border-radius:8px; font-size:10px; line-height:1; padding:2px 6px; font-weight:700; }
.tb-adstrip { display:flex; gap:10px; align-items:center; background:linear-gradient(90deg,var(--gold-50,#fdf8ec),var(--card)); border:1px solid var(--gold-200,#f4e3b8); border-radius:10px; padding:7px 12px; margin-bottom:14px; font-size:12.5px; overflow:hidden; }
.tb-ad-dot { background:var(--gold-600,#c9a24a); color:#fff; font-size:10px; padding:1px 6px; border-radius:4px; flex-shrink:0; }
.tb-ad-roll { display:flex; gap:28px; overflow:hidden; white-space:nowrap; color:var(--ink-600); animation:tbroll 18s linear infinite; }
@keyframes tbroll { 0%,28%{transform:translateX(0)} 33%,61%{transform:translateX(-100%)} 66%,94%{transform:translateX(-200%)} 100%{transform:translateX(0)} }
.tb-ad-go { margin-left:auto; color:var(--gold-700,#a8842f); cursor:pointer; flex-shrink:0; font-weight:600; }
.tb-3col { display:grid; grid-template-columns:190px minmax(0,1fr) 260px; gap:14px; align-items:start; }
/* V1.46ak 商城右栏「我的交易」快捷卡（订单/购物车/付款/合同直达） */
.tb-me .me-grid { display:grid; grid-template-columns:repeat(4,1fr); }
.tb-me .me-grid a { display:flex; flex-direction:column; gap:4px; align-items:center; padding:11px 2px 9px; font-size: 12px; color:var(--ink-600); cursor:pointer; transition:.15s; }
.tb-me .me-grid a:hover { color:var(--brand-700,var(--brand)); background:var(--brand-50,#fff6ef); }
.tb-me .me-grid a + a { border-left:1px solid var(--line-soft,var(--line)); }
.tb-me .me-grid i { font-style:normal; font-size:18px; }
/* V1.46ae 尺寸修复：弹性列 minmax(0) 防 ad-roll/deals nowrap 内容撑破（横向溢出根因） */
.tb-main, .tb-side, .tb-right { min-width:0; }
.tb-hot { overflow:hidden; }
.tb-floor-h { flex-wrap:wrap; }
.tb-side { background:var(--card); border:1px solid var(--line); border-radius:12px; padding:10px 8px; position:sticky; top:10px; }
.tb-side-h { font-size:12px; font-weight:700; color:var(--ink-400); padding:6px 10px 4px; }
.tb-side a { display:block; padding:7px 10px; border-radius:8px; font-size:13px; color:var(--ink-700); cursor:pointer; }
.tb-side a:hover, .tb-side a.on { background:var(--brand-50,#fff6ef); color:var(--brand-700); font-weight:600; }
.tb-carousel { position:relative; height:250px; border-radius:12px; overflow:hidden; margin-bottom:12px; }
.tb-slide { position:absolute; inset:0; display:flex; flex-direction:column; justify-content:center; padding:0 48px; opacity:0; transition:opacity .6s; cursor:pointer; background:var(--brand-600); color:#fff; background-size:cover; background-position:center; }
.tb-slide.on { opacity:1; }
.tb-slide.c1 { background:linear-gradient(120deg,#e63e00,#ff8f4d); }
.tb-slide.c2 { background:linear-gradient(120deg,#8a6d2b,#c9a24a); }
.tb-slide.c3 { background:linear-gradient(120deg,#2d6fb0,#4a90d9); }
.tb-slide-t { font:800 26px/1.3 var(--font); text-shadow:0 2px 8px rgba(0,0,0,.25); }
.tb-slide-s { margin-top:8px; font-size:14px; opacity:.92; }
.tb-dots { position:absolute; bottom:12px; left:48px; display:flex; gap:7px; }
.tb-dots i { width:22px; height:4px; border-radius:2px; background:rgba(255,255,255,.45); cursor:pointer; transition:all .3s; }
.tb-dots i.on { background:#fff; width:32px; }
.tb-king { display:grid; grid-template-columns:repeat(8,1fr); gap:8px; margin-bottom:14px; }
.tb-king.c6 { grid-template-columns:repeat(6,1fr); }
.tb-king a { display:flex; flex-direction:column; gap:7px; align-items:center; padding:6px 2px; cursor:pointer; font-size:12px; color:var(--ink-700); transition:all .15s; }
.tb-king a:hover { color:var(--brand-700); transform:translateY(-2px); }
/* V1.46ah 金刚区圆底彩色图标（与官网一致） */
.tb-king span { width:46px; height:46px; border-radius:14px; display:flex; align-items:center; justify-content:center; font-size:23px; background:linear-gradient(135deg,var(--brand-50,#fff6ef),var(--brand-100,#ffefe4)); border:1px solid var(--brand-100,#ffefe4); }
.tb-king a:nth-child(even) span { background:linear-gradient(135deg,var(--gold-100,#faf1dc),#fdf8ec); border-color:#f0e2bc; }
.tb-king a:nth-child(3n) span { background:linear-gradient(135deg,#eef3f9,#e5edf7); border-color:var(--line-soft,#d8e1ee); }
.tb-floor-h { display:flex; gap:12px; align-items:baseline; margin-bottom:12px; }
.tb-floor-h b { font:800 17px/1 var(--font); color:var(--ink-900); border-left:4px solid var(--brand-600); padding-left:10px; }
.tb-floor-h span { font-size:12px; color:var(--ink-400); }
.tb-right { display:flex; flex-direction:column; gap:12px; position:sticky; top:10px; }
.tb-r-card { background:var(--card); border:1px solid var(--line); border-radius:12px; overflow:hidden; }
.tb-r-h { font-size:13.5px; font-weight:700; color:var(--ink-800); padding:10px 12px 8px; border-bottom:1px solid var(--line-soft); display:flex; align-items:center; }
.tb-r-more { margin-left:auto; font-size: 12px; color:var(--brand-600); cursor:pointer; font-weight:400; }
.tb-q-list { padding:6px 12px 10px; }
.tb-q-i { display:flex; gap:8px; align-items:baseline; padding:5px 0; font-size:12.5px; border-bottom:1px dashed var(--line-soft); }
.tb-q-i:last-child { border:0; }
.tb-q-i span { flex:1; color:var(--ink-600); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.tb-q-i b { font-weight:700; color:var(--ink-800); }
.tb-q-i em { font-style:normal; font-size: 12px; width:52px; text-align:right; }
.tb-q-i .up { color:var(--danger,#c62828); } .tb-q-i .dn { color:#0d8a5f; }
.tb-n-list { padding:6px 12px 10px; display:flex; flex-direction:column; gap:2px; }
.tb-n-list a { display:flex; gap:6px; font-size:12.5px; color:var(--ink-600); padding:5px 0; cursor:pointer; overflow:hidden; }
.tb-n-list a:hover { color:var(--brand-700); }
.tb-n-list i { color:var(--gold-600,#c9a24a); font-style:normal; }
.tb-svc-i { display:flex; gap:10px; align-items:center; padding:9px 12px; border-bottom:1px dashed var(--line-soft); }
.tb-svc-i:last-child { border:0; }
.tb-svc-i svg { width:18px; height:18px; color:var(--brand-600); flex-shrink:0; }
.tb-svc-i b { font-size:12.5px; }
@media (max-width:1180px) { .tb-3col { grid-template-columns:1fr; } .tb-side,.tb-right { position:static; } .tb-king,.tb-king.c6 { grid-template-columns:repeat(4,1fr); } }
.tb-hot { display:flex; gap:10px; align-items:center; font-size:12px; width:100%; padding-top:2px; }
.tb-hot i { font-style:normal; color:var(--gold-700,#a8842f); font-weight:700; }
.tb-hot a { color:var(--ink-500); cursor:pointer; }
.tb-hot a:hover { color:var(--brand-700); }

/* ============================================================
 * OOOO 批·设计规范收敛层（卡片 / 标题 / 徽章 / 辅助文字 统一规格）
 * 依据 tokens.css 排版令牌：字号 6 级阶梯 + 文字色 4 级 + 卡片三件套。
 * 本层为终态规范——历史多层主题定义（.card×4 / .card-title×4 / .badge×3 层叠）
 * 的最终生效值以此为准；后续新样式一律引用 --fs-*/--ink-*/--radius-* 令牌。
 * ============================================================ */
.card { background: var(--card); border: 1px solid var(--line-soft); border-radius: var(--radius-card); box-shadow: var(--shadow-sm); }
.card-title { font: 600 var(--fs-lg)/1.4 var(--font); color: var(--ink-title); letter-spacing: 0; display: flex; align-items: center; gap: 8px; padding: 15px var(--pad-card-x) 0; }
.card-title svg { width: 16px; height: 16px; }
.card-body { padding: 16px var(--pad-card-x) 20px; font-size: var(--fs-md); color: var(--ink-body); }
.badge { font: 600 var(--fs-xs)/1 var(--font); padding: 3.5px 9px; border-radius: 6px; letter-spacing: .01em; }
.sub { font-size: var(--fs-sm) !important; color: var(--ink-sub) !important; }
.ph-sub { font-size: var(--fs-sm); color: var(--ink-sub); }
/* 门户三步卡对齐规范 */
.pw-step .card-title { font-size: var(--fs-lg); }
.pw-step-desc { font-size: var(--fs-sm); }
.pw-acct-row .v { font-size: var(--fs-md); }
.pw-seal-meta { font-size: var(--fs-xs); color: var(--ink-faint); }
.pw-seal-label { font-size: var(--fs-sm); }
.pw-pt-bal b { font: 800 36px/1.1 var(--font); }

/* ============================================================
 * PPPP 批·可感知视觉升级（修复 V1.40 平面化覆盖：.portal-shell .card
 * 特异性压过 OOOO 收敛层致其未生效——门户壳白底白卡无阴影无层次）
 * 壳浅灰底 + 白卡浮起 + 标题/序号加大跨过可感知阈值
 * ============================================================ */
.portal-shell { background: var(--paper); }
.portal-shell .card {
  background: var(--card); border: 1px solid var(--line-soft);
  border-radius: var(--radius-card);
  box-shadow: 0 1px 2px rgba(10,18,36,.04), 0 10px 28px rgba(10,18,36,.06);
}
.card-title { font: 650 16px/1.4 var(--font); }
.card-title svg { width: 17px; height: 17px; }
.pw-step-no { width: 30px; height: 30px; font-size: 13px; }
.pw-step-no svg { width: 14px; height: 14px; }
.portal-main { padding: 24px 28px 48px; }
.badge { padding: 4px 10px; }

/* ============================================================
 * QQQQ 批·布局规范（卡片大小不一 / 大片空白 根治）
 * ① 三步卡内容同构：主行（15px/650）+ 次行（13px 辅助）——行数一致高度自然对齐
 * ② 主区双卡等高：去 align-items:start（grid 默认 stretch），
 *    星火点卡内容垂直居中分布（矮卡空白变呼吸感而非尾部留白）
 * ③ 步骤卡 min-height 收窄（同构后无需大预留）
 * ============================================================ */
.pw-acct-main { font: 650 15px/1.35 var(--font); color: var(--ink-title); }
.pw-acct-sub { font-size: var(--fs-sm); color: var(--ink-sub); margin-top: 4px; word-break: break-all; }
.pw-main { align-items: stretch; }
.pw-points .card-body { display: flex; flex-direction: column; justify-content: center; min-height: 190px; }
.pw-step-body { min-height: 96px; }

/* ============================================================
 * UUUU2 批·账号认证卡收紧 + JJJJ2 档位定版：
 * 次行 nowrap+ellipsis；步骤卡 min-height 68 内容定高；
 * 档位层级：卡标题 14/650（功能标签）→ 内容主行 15/650（信息主角）→ 次行 13（说明）
 * ============================================================ */
.pw-acct-sub { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.pw-step-body { min-height: 68px; gap: 10px; }
.pw-acct { min-width: 0; }
.pw-step-act:empty { display: none; }

/* ============================================================
 * KKKK2 批·门户顶栏排版收敛（B 端顶栏规范：品牌 / 全局状态 / 用户 三区一行）
 * ① 品牌区单行：logo + 名称（16/700），分系统名内联小字（12/faint）
 * ② 营销口号全撤（原 pt-sub 长口号与侧栏 ps-side-foot 重复，JS 已删）
 * ③ 用户区紧凑：30px 头像 + 名/企业名超长省略；退出 hover 弱红底
 * ④ 状态 chip 胶囊化（12px），顶栏密度整体一档
 * ============================================================ */
.pt-brand { gap: 10px; }
.pt-name { font: 700 16px/1.2 var(--font); color: var(--ink-900); display: flex; align-items: baseline; gap: 8px; }
.pt-name .pt-sub { font: 400 12px/1 var(--font); color: var(--ink-faint); margin: 0; padding: 0; border: none; }
.pt-right { gap: 12px; }
.pt-user { gap: 10px; }
.pt-user .avatar { width: 30px; height: 30px; font-size: 13px; }
.pt-user > span:not(.avatar) { max-width: 200px; min-width: 0; }
.pt-user b { font-size: 13px; font-weight: 650; max-width: 120px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pt-user small { max-width: 160px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pt-logout { padding: 5px 10px; border-radius: 8px; font-size: 12.5px; }
.pt-logout:hover { background: var(--danger-bg); }
.portal-top .chip-online { padding: 4px 10px; border-radius: 999px; font-size: 12px; gap: 6px; }

/* ============================================================
 * WWWW 批·三卡等高根治（完整规则链定位）
 * 根因：卡2 操作行三元素（两按钮+再认证文字链）在 1/3 卡宽 flex-wrap 换行成两行
 * → 卡2 最高 → stretch 等高把空白灌进内容最少的卡1。
 * 修复：① JS 删「再认证一家」文字链（恢复 FFFF 批两按钮，「扫码认证」已认证态
 * 点击即走再认证流程，功能不丢）；② 操作行强制单行——任何状态恒一行高，
 * 三卡操作行等高，desc 行数同构 → 整卡严格等高零空白。
 * ============================================================ */
.pw-step-act { flex-wrap: nowrap; }
.pw-step-act .btn { flex: none; white-space: nowrap; }

/* ============================================================
 * XXXX 批·三卡等高真凶修复（本地逐块实测定位）
 * 元凶：#pw-body .card + .card { margin-top:16px }（L1563 相邻兄弟选择器）
 * 在 .pw-steps-row / .pw-main grid 内错杀：卡2/卡3 各获 margin-top:16px
 * → 下推 16px、底部 stretch 拉齐 → 卡1 视觉高出 16px 且顶部参差
 * （本地实测：卡1 204 / 卡2 188 / 卡3 188，mt=0/16/16 铁证）
 * 修复：grid 容器内卡片一律清零 margin-top（特异性 0,1,2,1 压过原 0,1,1,1）
 * ============================================================ */
#pw-body .pw-steps-row .card { margin-top: 0; }
#pw-body .pw-main .card { margin-top: 0; }

/* ============================================================
 * YYYY 批·同类问题根治（相邻兄弟 margin 错杀 grid/flex 容器内卡片）
 * 全面排查发现同类规则 3 条：
 *   L994  .card + .card { margin-top:16px }        ← 裸全局，未防！
 *   L1556 .portal-shell .card + .card { 12px }     ← 门户壳内，未防！
 *   L1563 #pw-body .card + .card { 16px }          ← XXXX 批已防
 * 错杀面：全站 .grid/.grid-2/3/4 与内联 grid 容器内的第 2+ 张卡
 * 全部获得 margin-top → 无法 stretch/顶部下垂——与认证中心三卡同款错乱。
 * 原规则本意是"纵向流式堆叠卡间距"——grid/flex 容器内间距应由容器 gap 管理。
 * 根治：枚举 grid 容器 + 属性选择器兜底（内联 style grid），直接子代卡 margin-top 清零。
 * ============================================================ */
.grid > .card, .grid-2 > .card, .grid-3 > .card, .grid-4 > .card,
.pw-steps-row > .card, .pw-main > .card,
#pw-body [style*="grid-template-columns"] > .card,
.portal-shell [style*="grid-template-columns"] > .card { margin-top: 0; }

/* ============ R42 流转总览：六环节状态链 ============ */
.fo-chain{display:flex;gap:8px;margin-top:14px;flex-wrap:wrap;align-items:stretch}
.fo-step{display:flex;flex-direction:column;gap:3px;align-items:flex-start;padding:9px 12px;border:1px solid var(--line-soft);border-radius:10px;background:var(--bg,#faf9f6);min-width:118px;cursor:pointer;transition:box-shadow .15s,transform .15s;text-align:left}
.fo-step:not([disabled]):hover{box-shadow:0 2px 10px rgba(0,0,0,.08);transform:translateY(-1px)}
.fo-step[disabled]{cursor:default;opacity:.55}
.fo-step .fo-ic{font-size:15px}
.fo-step .fo-name{font:600 11.5px var(--font);color:var(--ink-500)}
.fo-step .fo-st{font:600 12px var(--font);color:var(--ink-700)}
.fo-step.ok{border-color:rgba(34,140,74,.45);background:rgba(34,140,74,.07)}
.fo-step.ok .fo-st{color:var(--ok,#228c4a)}
.fo-step.ing{border-color:rgba(190,140,32,.45);background:rgba(240,180,50,.09)}
.fo-step.ing .fo-st{color:var(--gold-700,#8a6414)}
.fo-step.off .fo-st{color:var(--ink-400,#999)}
.fo-card{margin-bottom:12px}
.fo-cancelled{opacity:.62;filter:saturate(.4)}
.fo-chain .fo-step+.fo-step{position:relative}
@media(max-width:900px){.fo-chain{gap:6px}.fo-step{min-width:calc(50% - 6px)}}
/* R42b 订单中心：产品明细行 + 磋商徽章 */
.fo-items{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px}
.fo-item{font-size:12.5px;padding:5px 10px;border-radius:8px;background:rgba(240,180,50,.08);border:1px solid rgba(190,140,32,.25);color:var(--ink-700)}
.fo-chat{cursor:pointer;border:none;font:600 11.5px var(--font)}
.fo-chat:hover{filter:brightness(1.06)}
/* R42d 订单中心：下一步行动引导条 */
.fo-next{display:flex;gap:10px;align-items:center;flex-wrap:wrap;padding:8px 12px;margin:-4px 0 10px;border-radius:9px;background:rgba(240,180,50,.10);border:1px dashed rgba(190,140,32,.45);font-size:13px;color:var(--ink-700)}
.fo-next b{color:var(--gold-700,#8a6414)}
.fo-next .fo-next-go{flex:none}
.fo-next.done{background:rgba(34,140,74,.08);border:1px solid rgba(34,140,74,.3);color:var(--ok,#228c4a)}
/* R42e 订单中心：控制条（搜索 / 状态筛选 / 一键刷新） */
.fo-bar{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-bottom:14px}
@media (max-width:760px){.fo-bar .input{max-width:100%!important;flex:1 1 100%}}
/* R42w 工作台三层重构：经营驾驶舱折叠区（普通员工默认收起，管理员默认展开，选择记忆本机） */
.hm-fold{border:1.5px solid var(--line-soft);border-radius:14px;background:var(--paper,#fff);margin-bottom:16px;overflow:hidden}
.hm-fold>summary{list-style:none;cursor:pointer;display:flex;align-items:center;gap:10px;padding:14px 18px;font-weight:700;font-size:14.5px;color:var(--ink-800);user-select:none}
.hm-fold>summary::-webkit-details-marker{display:none}
.hm-fold>summary:hover{background:rgba(148,163,184,.06)}
.hm-fold>summary .hm-fold-arrow{margin-left:auto;color:var(--ink-400);transition:transform .18s;font-size:12px}
.hm-fold[open]>summary .hm-fold-arrow{transform:rotate(90deg)}
.hm-fold>summary .hm-fold-hint{font-weight:400;font-size:12px;color:var(--ink-400)}
.hm-fold .hm-fold-body{padding:2px 18px 16px}
/* R42w 快捷入口横带（第二层·常显） */
.hm-quick{display:flex;gap:10px;flex-wrap:wrap;align-items:center;margin-bottom:16px}
.hm-quick .btn{flex:0 0 auto}
@media (max-width:760px){.hm-quick .btn{flex:1 1 44%}}
/* R42x 工作台紧凑标题行（role-hero 收敛版）：角色徽章独立样式（.rhr-tag 原嵌套于 .role-hero/.dark-panel 作用域，裸用不生效） */
.hm-hero-bar .rhr-tag { display: inline-flex; align-items: center; gap: 7px; font: 700 12px/1 var(--font); letter-spacing: .08em; color: var(--gold-700,#b45309); border: 1px solid var(--gold-200,#ead9b0); background: var(--gold-50,#fdf8ec); border-radius: 8px; padding: 6px 12px; }
.hm-hero-bar .rhr-dot { width: 6px; height: 6px; border-radius: 50%; background: var(--gold-500); box-shadow: 0 0 0 3px rgba(201,169,97,.25); }
@media (max-width:760px){ .hm-hero-bar .sub { display: none } }
