/* ============ 基础 · MAC 设计令牌 ============ */
:root {
  --pri: #4D6BFE;                 /* 枣红 */
  --pri-d: #3B4FE0;
  --pri-soft: #EEF3FF;
  --bg: #f5f5f7;                  /* 苹果浅灰 */
  --card: #ffffff;
  --ink: #1d1d1f;
  --mut: #6e6e73;
  --line: rgba(0, 0, 0, 0.10);
  --ok: #34c759;
  --ok-soft: #e8f9ef;
  --warn: #ff9f0a;
  --warn-soft: #fff5e3;
  --bad: #ff3b30;
  --bad-soft: #fff0ef;
  --radius: 14px;
  --radius-lg: 20px;
  --shadow: 0 1px 2px rgba(0, 0, 0, .04), 0 8px 20px rgba(0, 0, 0, .06);
  --shadow-lg: 0 4px 12px rgba(0, 0, 0, .06), 0 24px 60px rgba(0, 0, 0, .14);
  --ring: 0 0 0 4px rgba(77, 107, 254, .16);
}
* { box-sizing: border-box; }
[hidden] { display: none !important; }   /* 保证 hidden 属性始终优先于 display 类 */
html, body { margin: 0; padding: 0; }
body {
  font-family: -apple-system, BlinkMacSystemFont, "SF Pro Text", "SF Pro Display",
    "PingFang SC", "Hiragino Sans GB", "Helvetica Neue", "Microsoft YaHei", Roboto, sans-serif;
  background: var(--bg); color: var(--ink); font-size: 14px; line-height: 1.5;
  -webkit-font-smoothing: antialiased; text-rendering: optimizeLegibility;
}
::selection { background: rgba(77, 107, 254, .22); }
main { max-width: 1200px; margin: 0 auto; padding: 16px 18px 40px; }
button { font-family: inherit; }
.muted { color: var(--mut); }
.sm { font-size: 12.5px; }
.hide-file { display: none; }

/* ============ 顶栏 ============ */
.topbar {
  display: flex; align-items: center; justify-content: space-between; gap: 12px;
  padding: 10px 18px; background: #fff; border-bottom: 1px solid var(--line);
  position: sticky; top: 0; z-index: 40; flex-wrap: wrap;
}
.brand { display: flex; align-items: center; gap: 10px; cursor: pointer; user-select: none; }
.logo {
  width: 38px; height: 38px; border-radius: 10px; display: grid; place-items: center;
  background: linear-gradient(135deg, #3B4FE0, #6E8BFF); color: #fff; font-size: 19px; font-weight: 700;
}
.brand-txt strong { display: block; font-size: 16px; }
.brand-txt small { color: var(--mut); font-size: 11.5px; }
.top-actions { display: flex; gap: 8px; flex-wrap: wrap; }

/* ============ 按钮 ============ */
.btn {
  border: 1px solid transparent; border-radius: 8px; padding: 7px 14px; cursor: pointer;
  font-size: 13.5px; transition: .15s; background: #fff; color: var(--ink); white-space: nowrap;
}
.btn.primary { background: var(--pri); color: #fff; }
.btn.primary:hover { background: var(--pri-d); }
.btn.ghost { border-color: var(--line); background: #fff; }
.btn.ghost:hover { border-color: var(--pri); color: var(--pri); }
.btn.danger { background: var(--bad); color: #fff; }
.btn.danger:hover { filter: brightness(.92); }
.btn.sm { padding: 4px 10px; font-size: 12.5px; border-radius: 7px; }
.btn:disabled { opacity: .55; cursor: not-allowed; }

/* ============ 卡片/看板 ============ */
.intro-line {
  background: var(--pri-soft); border: 1px solid #D9E2FF; color: #2C3BC4;
  padding: 9px 14px; border-radius: 10px; margin-bottom: 14px; font-size: 13px;
}
.intro-line b { color: var(--pri); }
.stats { display: grid; grid-template-columns: repeat(4, 1fr); gap: 10px; margin-bottom: 14px; }
.stat {
  background: var(--card); border: 1px solid var(--line); border-radius: var(--radius);
  padding: 12px 16px; display: flex; align-items: center; justify-content: space-between;
}
.stat .num { font-size: 26px; font-weight: 700; color: var(--ink); }
.stat.ok .num { color: var(--ok); }
.stat .lbl { color: var(--mut); font-size: 12.5px; }
.toolbar { display: flex; gap: 8px; margin-bottom: 14px; flex-wrap: wrap; align-items: center; }
.toolbar input[type=search] {
  flex: 1; min-width: 220px; padding: 8px 12px; border: 1px solid var(--line); border-radius: 9px; font-size: 13.5px; background: #fff;
}
.toolbar select { padding: 8px 10px; border: 1px solid var(--line); border-radius: 9px; background: #fff; font-size: 13.5px; }
.toolbar-note { color: var(--mut); font-size: 12.5px; }

.card-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); gap: 12px; }
.card { background: var(--card); border: 1px solid var(--line); border-radius: var(--radius); box-shadow: var(--shadow); }
.order-card { padding: 14px 15px; cursor: pointer; transition: .15s; display: flex; flex-direction: column; gap: 10px; }
.order-card:hover { border-color: var(--pri); box-shadow: 0 4px 16px rgba(107,26,22, .14); transform: translateY(-1px); }
.oc-top { display: flex; align-items: flex-start; justify-content: space-between; gap: 8px; }
.oc-no { font-weight: 700; font-size: 14.5px; letter-spacing: .2px; }
.oc-cust { font-size: 15.5px; font-weight: 600; margin-top: 1px; }
.oc-date { color: var(--mut); font-size: 12px; margin-top: 2px; }
.oc-amt { text-align: right; }
.oc-amt .am { font-weight: 700; color: var(--pri-d); font-size: 15px; }
.oc-amt .tag { display: block; font-size: 11px; color: var(--mut); }
.pill { display: inline-flex; align-items: center; gap: 4px; padding: 2px 9px; border-radius: 999px; font-size: 12px; font-weight: 600; white-space: nowrap; }
.pill.todo { background: #eceff3; color: #5b6777; }
.pill.doing { background: var(--pri-soft); color: var(--pri-d); }
.pill.done { background: var(--ok-soft); color: var(--ok); }
.pill.warn { background: var(--warn-soft); color: var(--warn); }

/* 卡片内 7 步小进度条 */
.mini-steps { display: flex; align-items: center; gap: 3px; margin-top: 2px; }
.ms { flex: 1; height: 8px; border-radius: 4px; background: #e4e9f0; position: relative; overflow: hidden; }
.ms.done { background: var(--ok); }
.ms.cur { background: var(--pri); }
.ms.todo { background: #e4e9f0; }
.ms + .ms { margin-left: 3px; }
.oc-step-txt { font-size: 12px; color: var(--mut); display: flex; justify-content: space-between; }
.oc-step-txt b { color: var(--pri-d); }
.oc-foot { display: flex; justify-content: space-between; color: var(--mut); font-size: 11.5px; border-top: 1px dashed var(--line); padding-top: 8px; }
.empty { text-align: center; padding: 60px 20px; color: var(--mut); }
.empty-ico { font-size: 46px; margin-bottom: 12px; }

/* ============ 详情页 ============ */
.crumb { display: flex; align-items: center; gap: 10px; margin-bottom: 12px; flex-wrap: wrap; }
.crumb-order { font-weight: 600; }
.detail-head { display: flex; justify-content: space-between; align-items: center; padding: 14px 18px; margin-bottom: 12px; gap: 10px; flex-wrap: wrap; }
.dh-title { font-size: 19px; font-weight: 700; }
.dh-sub { color: var(--mut); font-size: 12.5px; margin-top: 2px; }
.detail-grid { display: grid; grid-template-columns: 400px 1fr; gap: 14px; align-items: start; }
@media (max-width: 960px) { .detail-grid { grid-template-columns: 1fr; } }
.col-left, .col-right { display: flex; flex-direction: column; gap: 14px; min-width: 0; }
.block { padding: 14px 16px; }
.block-title { font-weight: 700; font-size: 14.5px; margin-bottom: 10px; display: flex; align-items: baseline; gap: 8px; }

/* 表单 */
.f-row { margin-bottom: 9px; }
.f-row label { display: block; font-size: 12px; color: var(--mut); margin-bottom: 3px; }
.f-row input, .f-row select { width: 100%; }
.f-row2 { display: grid; grid-template-columns: 1fr 1fr; gap: 9px; margin-bottom: 9px; }
.f-cell label { display: block; font-size: 12px; color: var(--mut); margin-bottom: 3px; }
input[type=text], input[type=date], input[type=search], input[type=number], select, textarea {
  border: 1px solid var(--line); border-radius: 8px; padding: 7px 10px; font-size: 13.5px; background: #fff; color: var(--ink); width: 100%;
}
input:focus, select:focus, textarea:focus { outline: none; border-color: var(--pri); box-shadow: 0 0 0 3px rgba(107,26,22,.12); }
.req { color: var(--bad); font-style: normal; }

/* 商品明细表 */
.items-wrap { overflow-x: auto; }
.items-table { width: 100%; border-collapse: collapse; font-size: 12.8px; }
.items-table th {
  text-align: left; color: var(--mut); font-weight: 600; font-size: 11.5px;
  padding: 4px 5px; border-bottom: 1px solid var(--line); white-space: nowrap;
}
.items-table td { padding: 3px 3px; border-bottom: 1px solid #eef1f6; }
.items-table input { border: 1px solid transparent; padding: 4px 5px; background: transparent; font-size: 12.8px; width: 100%; }
.items-table input:hover { border-color: var(--line); background: #fff; }
.items-table input:focus { background: #fff; }
.amount-cell { color: var(--pri-d); font-weight: 600; text-align: right; white-space: nowrap; padding-right: 8px !important; }
.del-cell { text-align: center; }
.del-row { border: none; background: none; color: var(--mut); cursor: pointer; font-size: 15px; padding: 0 4px; border-radius: 5px; }
.del-row:hover { color: var(--bad); background: var(--bad-soft); }
.items-foot { display: flex; align-items: center; justify-content: space-between; margin: 8px 0; }
.item-total { font-size: 13px; color: var(--mut); }
.item-total b { color: var(--pri-d); font-size: 15px; }

/* 步骤条 */
.stepper { display: flex; gap: 0; margin-bottom: 6px; overflow-x: auto; padding-bottom: 4px; }
.step-node {
  flex: 1; min-width: 92px; cursor: pointer; display: flex; flex-direction: column; align-items: center;
  gap: 4px; padding: 6px 2px 4px; border-radius: 10px; transition: .12s; position: relative; border: 1px solid transparent;
}
.step-node:hover { background: #f2f6fc; }
.step-node .dot {
  width: 30px; height: 30px; border-radius: 50%; display: grid; place-items: center; font-size: 12.5px;
  background: #e4e9f0; color: #7a8797; font-weight: 700; border: 2px solid #e4e9f0; position: relative; z-index: 1;
}
.step-node.done .dot { background: var(--ok); border-color: var(--ok); color: #fff; }
.step-node.cur .dot { background: var(--pri); border-color: var(--pri); color: #fff; box-shadow: 0 0 0 4px rgba(107,26,22,.18); }
.step-node .st-name { font-size: 12px; text-align: center; line-height: 1.25; color: var(--ink); }
.step-node .st-extra { font-size: 10px; color: var(--mut); }
.step-node.todo .st-name { color: #7a8797; }
.step-hint { font-size: 12.5px; color: var(--mut); padding: 4px 2px 0; }
.step-hint b { color: var(--pri-d); }

/* 步骤面板 */
.step-panel { min-height: 300px; }
.sp-head { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin-bottom: 6px; flex-wrap: wrap; }
.sp-title { font-size: 16px; font-weight: 700; }
.sp-title .who { font-size: 12px; color: var(--mut); font-weight: 400; margin-left: 6px; }
.sp-desc { color: var(--mut); font-size: 12.8px; margin-bottom: 12px; }
.sp-fields { display: grid; grid-template-columns: 1fr 1fr; gap: 9px; margin-bottom: 6px; }
@media (max-width: 640px) { .sp-fields { grid-template-columns: 1fr; } }
.sp-fields .full { grid-column: 1 / -1; }
.sp-fields label { display: block; font-size: 12px; color: var(--mut); margin-bottom: 3px; }
.sp-done-bar { display: flex; align-items: center; justify-content: space-between; gap: 10px; border-top: 1px dashed var(--line); margin-top: 12px; padding-top: 10px; flex-wrap: wrap; }
.check-done { display: flex; align-items: center; gap: 6px; cursor: pointer; font-size: 13px; font-weight: 600; user-select: none; }
.check-done input { width: 17px; height: 17px; accent-color: var(--ok); }
.upload-hint { font-size: 12px; color: var(--mut); margin: 4px 0 8px; }

/* 上传区 */
.upzone {
  border: 1.6px dashed #b9c6d6; border-radius: 10px; padding: 10px; margin-bottom: 10px; background: #fbfcfe; transition: .15s;
}
.upzone.drag { border-color: var(--pri); background: var(--pri-soft); }
.upzone-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; flex-wrap: wrap; }
.upzone-name { font-size: 13px; font-weight: 600; }
.upzone-cta { font-size: 12.5px; color: var(--pri); cursor: pointer; border: 1px dashed var(--pri); border-radius: 7px; padding: 4px 10px; background: #fff; }
.upzone-cta:hover { background: var(--pri-soft); }
.file-list { margin-top: 8px; display: flex; flex-direction: column; gap: 6px; }
.file-item {
  display: flex; align-items: center; gap: 8px; background: #fff; border: 1px solid var(--line);
  border-radius: 8px; padding: 5px 8px; font-size: 12.5px;
}
.fi-ico { font-size: 16px; }
.fi-name { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.fi-name small { color: var(--mut); margin-left: 6px; }
.fi-act { display: flex; gap: 2px; }
.fi-act button { border: none; background: none; cursor: pointer; color: var(--mut); font-size: 13px; padding: 2px 5px; border-radius: 5px; }
.fi-act button:hover { background: #eef2f7; color: var(--pri); }
.fi-act button.del:hover { color: var(--bad); background: var(--bad-soft); }
.file-item.uploading { opacity: .6; }

/* 协议库内选择 */
.agree-list { display: flex; flex-direction: column; gap: 7px; margin-top: 10px; }
.agree-item { display: flex; align-items: center; gap: 8px; border: 1px solid var(--line); border-radius: 9px; padding: 7px 10px; background: #fff; }
.agree-item.chosen { border-color: var(--ok); background: var(--ok-soft); }
.agree-item .ai-main { flex: 1; min-width: 0; }
.agree-item .ai-title { font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.agree-item .ai-sub { font-size: 11.5px; color: var(--mut); }
.agree-empty { color: var(--mut); text-align: center; padding: 16px 0; font-size: 13px; }
.step-nav { display: flex; justify-content: space-between; align-items: center; gap: 10px; margin-top: 4px; }
.step-nav-state { color: var(--mut); font-size: 12.5px; text-align: center; }
.step-nav-state b { color: var(--pri-d); }

/* ============ 弹窗 ============ */
.modal { position: fixed; inset: 0; display: none; z-index: 100; }
.modal.open { display: flex; align-items: flex-start; justify-content: center; }
.mask { position: absolute; inset: 0; background: rgba(22,44,11, .45); }
.modal-card {
  position: relative; background: #fff; border-radius: 14px; width: 460px; max-width: calc(100vw - 32px);
  margin-top: 9vh; box-shadow: 0 20px 60px rgba(0,0,0,.25); max-height: 82vh; display: flex; flex-direction: column;
}
.modal-card.small { width: 380px; }
.modal-head {
  padding: 13px 18px; font-size: 15.5px; font-weight: 700; border-bottom: 1px solid var(--line);
  display: flex; justify-content: space-between; align-items: center;
}
.modal-head .x { border: none; background: none; font-size: 20px; cursor: pointer; color: var(--mut); line-height: 1; }
.modal-head .x:hover { color: var(--bad); }
.modal-body { padding: 14px 18px; overflow-y: auto; }
.modal-foot { padding: 12px 18px; border-top: 1px solid var(--line); display: flex; justify-content: flex-end; gap: 8px; }

/* 数据区行 */
.data-rows { display: flex; flex-direction: column; gap: 8px; }
.data-row { display: flex; align-items: center; justify-content: space-between; gap: 10px; border: 1px solid var(--line); border-radius: 10px; padding: 10px 12px; }
.data-row b { font-size: 13.5px; }

/* ============ Toast ============ */
.toasts { position: fixed; right: 16px; top: 16px; z-index: 200; display: flex; flex-direction: column; gap: 8px; }
.toast {
  background: #fff; border: 1px solid var(--line); border-left: 4px solid var(--pri);
  border-radius: 9px; padding: 9px 14px; font-size: 13px; box-shadow: var(--shadow);
  animation: slidein .2s ease-out; max-width: 320px;
}
.toast.ok { border-left-color: var(--ok); }
.toast.bad { border-left-color: var(--bad); }
@keyframes slidein { from { transform: translateX(20px); opacity: 0; } to { transform: none; opacity: 1; } }

/* ============================================================
   v1.1 UI 可用性升级
   ============================================================ */

/* 版本标识 */
.ver {
  display: inline-block; margin-left: 2px; padding: 0 6px; border-radius: 6px;
  background: var(--pri-soft); color: var(--pri-d); font-size: 10px; font-weight: 700;
  vertical-align: 1px; line-height: 1.7;
}

/* 键盘可达性与焦点环(无障碍) */
.btn, .step-node, .upzone-cta, .fi-act a, .fi-act button, .x, .del-row { -webkit-tap-highlight-color: transparent; }
:focus-visible { outline: 2px solid var(--pri); outline-offset: 2px; border-radius: 6px; }
.order-card:focus-visible { outline: 2px solid var(--pri); outline-offset: 1px; }
input:focus-visible, select:focus-visible, textarea:focus-visible { outline: none; box-shadow: 0 0 0 3px rgba(107,26,22,.14); }

/* 危险操作: 页面内删除按钮用"描边式"弱化误触恐惧; 确认弹窗内仍是实心 */
.btn.ghost.danger {
  background: #fff; color: var(--bad); border-color: #f2c4c4;
}
.btn.ghost.danger:hover { background: var(--bad-soft); border-color: var(--bad); color: var(--bad); filter: none; }

/* 明细表内下拉与行内输入风格统一 */
.items-table select {
  border: 1px solid transparent; background: transparent; font-size: 12.8px; padding: 4px 2px; color: var(--ink);
}
.items-table select:hover { border-color: var(--line); background: #fff; }
.items-table td input, .items-table td select { min-height: 24px; }
.del-row:focus-visible { outline-offset: 0; }

/* 附件操作: 预览/下载链接呈现为按钮态 */
.fi-act a {
  text-decoration: none; color: var(--mut); font-size: 13px; padding: 2px 5px; border-radius: 5px; line-height: 1.4;
}
.fi-act a:hover { background: #eef2f7; color: var(--pri); }

/* 步骤当前态文字强调 */
.step-node.cur { background: var(--pri-soft); border-color: #D9E2FF; }
.step-node.cur .st-name { color: var(--pri-d); font-weight: 700; }

/* 弹窗入场 + 减动效偏好 */
.modal.open .modal-card { animation: pop .18s ease-out; }
@keyframes pop { from { transform: translateY(8px) scale(.98); opacity: 0; } to { transform: none; opacity: 1; } }
.modal-note { margin-top: 12px; border-top: 1px dashed var(--line); padding-top: 10px; line-height: 1.7; }
/* 矮屏降级: 让登录按钮始终落在首屏内, 无需滚动才能点到 */
@media (max-height: 980px) {
  #loginView .li-hero { margin: 16px 0 14px; }
  #loginView .li-hero h2 { font-size: 25px; margin-bottom: 6px; }
  #loginView .lp-feats { display: none; }
  #loginView .login-card { padding: 24px 26px 16px; border-radius: 26px; }
  #loginView .li-avatar { width: 52px; height: 52px; font-size: 26px; border-radius: 17px; }
  #loginView .li-head { margin-bottom: 15px; }
  #loginView .f-row { margin-bottom: 11px; }
}
@media (max-height: 800px) {
  #loginView .li-hero { display: none; }
}
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation: none !important; transition: none !important; }
}

/* 响应式: 窄屏排版 */
@media (max-width: 720px) {
  .stats { grid-template-columns: repeat(2, 1fr); }
  .topbar { padding: 8px 12px; }
  .logo { width: 34px; height: 34px; font-size: 17px; }
  .top-actions .btn { flex: 1; min-width: 0; padding-left: 8px; padding-right: 8px; }
  .top-actions { width: 100%; }
  main { padding: 12px 12px 84px; }
  .card-grid { grid-template-columns: 1fr; }
  .modal.open { align-items: flex-end; }
  .modal-card { width: 100%; max-width: none; margin-top: 0; border-radius: 16px 16px 0 0; max-height: 92vh; }
  .f-row2 { grid-template-columns: 1fr; }
  .btn { min-height: 34px; }
  .fi-act a, .fi-act button, .del-row { min-width: 26px; min-height: 26px; display: inline-flex; align-items: center; justify-content: center; }
}

/* ============================================================
   v1.2 登录 / 账户 / 权限 UI
   ============================================================ */

/* 登录页 */

/* 顶栏用户区 */
.user-area { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.user-chip {
  display: inline-flex; align-items: center; gap: 7px; background: #f4f7fb;
  border: 1px solid var(--line); border-radius: 999px; padding: 3px 8px 3px 10px; font-size: 12.5px;
}
.user-chip b { font-weight: 600; }
.user-chip i.role { font-style: normal; font-size: 11px; font-weight: 700; border-radius: 999px; padding: 1px 7px; }
.user-chip i.role.admin { background: #3B4FE0; color: #fff; }
.user-chip i.role.business { background: var(--ok-soft); color: var(--ok); }
.user-chip i.role.finance { background: var(--warn-soft); color: var(--warn); }

/* 只读模式(财务) */
body.mode-read #btnNewOrder,
body.mode-read #btnDelOrder,
body.mode-read #btnSaveInfo,
body.mode-read #btnSaveItems,
body.mode-read #btnAddItem,
body.mode-read #btnSaveStep,
body.mode-read .del-cell,
body.mode-read .upzone,
body.mode-read .upload-hint,
body.mode-read .fi-del,
body.mode-read .ag-choose,
body.mode-read #agUploadNew,
body.mode-read #agUnpick,
body.mode-read .check-done,
body.mode-read #btnUploadAgree,
body.mode-read .del-agree,
body.mode-read .upzone-cta { display: none !important; }
body.mode-read input:disabled, body.mode-read select:disabled { background: #f7f9fb; color: var(--mut); }
body.mode-read #detailView .block-title, body.mode-read .pill { cursor: default; }
.readonly-note { display: none; }
body.mode-read .readonly-note {
  display: block; background: var(--warn-soft); color: #8a5a00; border-radius: 8px;
  font-size: 12px; padding: 6px 10px; margin-bottom: 10px;
}

/* 账户管理 */
.modal-card.wide { width: 640px; }
.usr-create { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; padding-bottom: 12px; border-bottom: 1px dashed var(--line); }
.usr-create input, .usr-create select { font-size: 12.8px; }
.usr-create button { grid-column: 1 / -1; justify-self: end; }
.users-list { display: flex; flex-direction: column; gap: 7px; max-height: 46vh; overflow-y: auto; padding-right: 2px; }
.user-row { display: flex; align-items: center; gap: 10px; border: 1px solid var(--line); border-radius: 10px; padding: 8px 10px; flex-wrap: wrap; }
.user-row .ur-main { flex: 1; min-width: 160px; }
.user-row .ur-main b { font-size: 13.5px; }
.user-row .ur-main i { font-style: normal; color: var(--mut); font-size: 12px; margin-left: 6px; }
.user-row .ur-main .tag-me { font-style: normal; font-size: 10.5px; background: var(--pri-soft); color: var(--pri-d); border-radius: 5px; padding: 1px 5px; margin-left: 6px; }
.usr-state { font-size: 11px; color: var(--ok); background: var(--ok-soft); border-radius: 999px; padding: 1px 7px; margin-left: 8px; }
.usr-state.off { color: var(--mut); background: #eceff3; }
.user-row .ur-role { width: auto; min-width: 78px; padding: 4px 6px; font-size: 12.5px; }
.user-row select:disabled { background: #f3f5f8; color: var(--mut); }
.user-row .ur-acts { display: flex; gap: 6px; }
#mPw input { width: 100%; }

/* ============================================================
   v1.3 多端自适应 / 抽屉菜单 / 资料库 / 统计 / 同步
   ============================================================ */
.menu-btn { display: none; }
.wide-only { display: inline-flex; }
@media (max-width: 980px) {
  .wide-only { display: none !important; }
  .menu-btn { display: inline-flex; }
  .user-area { display: none !important; }
  .top-actions { width: auto; margin-left: auto; }
  .top-actions .btn { flex: none; }
  .topbar .brand-txt small { display: none; }
}
@media (max-width: 460px) {
  .top-actions #btnNewOrder { padding: 7px 10px; font-size: 12.5px; }
}

/* 抽屉 */
#navPanel { position: fixed; inset: 0; z-index: 150; }
#navPanel[hidden] { display: none; }
.np-back { position: absolute; inset: 0; background: rgba(22,44,11,.45); opacity: 0; transition: opacity .18s; }
.np-drawer {
  position: absolute; top: 0; right: 0; height: 100%; width: min(320px, 86vw); background: #fff;
  box-shadow: -12px 0 40px rgba(0,0,0,.18); transform: translateX(30px); opacity: 0;
  transition: transform .18s ease, opacity .18s ease; display: flex; flex-direction: column;
}
#navPanel.open .np-back { opacity: 1; }
#navPanel.open .np-drawer { transform: none; opacity: 1; }
.np-head { display: flex; align-items: center; justify-content: space-between; padding: 14px 16px 10px; border-bottom: 1px solid var(--line); }
.np-user { display: flex; align-items: center; justify-content: space-between; gap: 8px; padding: 12px 16px; background: #f7fafd; border-bottom: 1px solid var(--line); }
.np-list { padding: 10px 12px; display: flex; flex-direction: column; gap: 6px; overflow-y: auto; }
.np-item {
  text-align: left; border: 1px solid var(--line); background: #fff; border-radius: 10px;
  padding: 11px 14px; font-size: 14px; cursor: pointer; transition: .12s;
}
.np-item:hover { border-color: var(--pri); color: var(--pri); background: var(--pri-soft); }
.np-item.primary { background: var(--pri); color: #fff; border-color: var(--pri); }
.np-item.primary:hover { background: var(--pri-d); color: #fff; }
.np-item.danger { color: var(--bad); }
.np-item.danger:hover { background: var(--bad-soft); border-color: var(--bad); color: var(--bad); }

/* 客户快捷 chips */
.chipbar { display: flex; flex-wrap: wrap; gap: 5px; margin-top: 6px; }
.chip {
  border: 1px solid var(--line); background: #fff; border-radius: 999px; padding: 3px 10px;
  font-size: 12px; color: var(--pri-d); cursor: pointer; transition: .12s;
}
.chip:hover { background: var(--pri-soft); border-color: var(--pri); }

/* 资料库 tab */
.tabbar { display: flex; gap: 6px; border-bottom: 1px solid var(--line); margin-bottom: 12px; }
.tab { border: none; background: none; padding: 8px 14px; font-size: 13.5px; cursor: pointer; color: var(--mut); border-bottom: 2px solid transparent; }
.tab.on { color: var(--pri-d); font-weight: 700; border-bottom-color: var(--pri); }
.ref-add { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 7px; margin-bottom: 10px; }
.ref-add button { grid-column: 1 / -1; justify-self: end; }
.ref-list { display: flex; flex-direction: column; gap: 6px; max-height: 46vh; overflow-y: auto; }
.ref-row {
  display: flex; align-items: center; gap: 8px; border: 1px solid var(--line); border-radius: 10px;
  padding: 7px 10px; background: #fff; flex-wrap: wrap;
}
.ref-row.pick { cursor: pointer; }
.ref-row.pick:hover { border-color: var(--pri); background: var(--pri-soft); }
.ref-row .rr-main { flex: 1; min-width: 180px; }
.ref-row .rr-main b { font-size: 13px; }
.ref-row .rr-main i, .ref-row .rr-main em, .ref-row .rr-main s {
  font-style: normal; color: var(--mut); font-size: 11.5px; margin-left: 8px; text-decoration: none;
}
.ref-row .rr-main em, .ref-row .rr-main s { display: inline-block; margin-top: 1px; }
.ref-row .rr-sub { color: var(--mut); font-size: 11.5px; white-space: nowrap; }

/* 统计 */
.stats-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 8px; margin-bottom: 14px; }
.stats-tables { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }
@media (max-width: 760px) { .stats-tables { grid-template-columns: 1fr; } .stats-grid { grid-template-columns: repeat(2,1fr); } }
.st-title { font-weight: 700; font-size: 13px; margin-bottom: 6px; }
.st-table { width: 100%; border-collapse: collapse; font-size: 12.5px; }
.st-table th { text-align: left; color: var(--mut); border-bottom: 1px solid var(--line); padding: 4px 6px; }
.st-table td { padding: 4px 6px; border-bottom: 1px solid #eef1f6; }

/* 只读模式追加门控 */
body.mode-read #btnPickProd,
body.mode-read #btnAddCust,
body.mode-read #btnAddProd,
body.mode-read #btnAddFx,
body.mode-read .ref-del,
body.mode-read .ref-add { display: none !important; }
#navPanel .user-chip { padding-left: 4px; }


/* ============================================================
   v1.4.0 MAC 风格视觉系统(覆写层)
   ============================================================ */

/* --- 顶栏毛玻璃 --- */
.topbar {
  background: rgba(250, 250, 252, .78);
  -webkit-backdrop-filter: blur(20px) saturate(1.8);
  backdrop-filter: blur(20px) saturate(1.8);
  border-bottom: 1px solid rgba(0, 0, 0, .08);
  padding: 8px 20px;
}
.brand .logo {
  background: transparent; box-shadow: 0 1px 4px rgba(0,0,0,.12);
  border-radius: 13px; width: 42px; height: 42px; display: grid; place-items: center; padding: 1px;
}
.brand .logo svg { display: block; border-radius: 12px; }
.brand-txt strong { font-size: 16px; font-weight: 600; letter-spacing: .2px; }
.brand-txt small { color: var(--mut); }
.brand { gap: 11px; }

/* --- 按钮 --- */
.btn {
  border-radius: 10px; font-size: 13.5px; padding: 7px 15px;
  transition: all .16s ease; box-shadow: 0 1px 2px rgba(0,0,0,.04);
}
.btn:active { transform: scale(.97); }
.btn.primary { background: var(--pri); color: #fff; box-shadow: 0 1px 3px rgba(77, 107, 254,.35); }
.btn.primary:hover { background: var(--pri-d); }
.btn.ghost { border-color: rgba(0,0,0,.14); background: #fff; }
.btn.ghost:hover { border-color: var(--pri); color: var(--pri); background: #f6faff; }
.btn.ghost.danger { border-color: rgba(255,59,48,.35); color: var(--bad); }
.btn.ghost.danger:hover { background: var(--bad-soft); border-color: var(--bad); }
.btn.sm { border-radius: 8px; }
.btn:disabled { opacity: .5; }

/* --- 输入 --- */
input[type=text], input[type=date], input[type=search], input[type=number], select, textarea {
  border: 1px solid rgba(0,0,0,.14); border-radius: 10px; padding: 8px 11px;
  font-size: 13.5px; background: #fff; transition: border-color .15s, box-shadow .15s;
}
input:focus, select:focus, textarea:focus {
  outline: none; border-color: var(--pri); box-shadow: var(--ring);
}
:focus-visible { outline: 2px solid var(--pri); outline-offset: 2px; }
input:disabled, select:disabled { background: #f2f2f4; color: var(--mut); }

/* --- 卡片 --- */
.card { border-radius: 16px; border: 1px solid rgba(0,0,0,.08); box-shadow: var(--shadow); }
.order-card { padding: 15px 17px; }
.order-card:hover { border-color: rgba(77, 107, 254,.45); box-shadow: 0 4px 18px rgba(77, 107, 254,.16); transform: translateY(-2px); }
.block { padding: 16px 18px; }
.block-title { font-weight: 600; font-size: 14.5px; }

/* --- 提示条/统计卡 --- */
.intro-line {
  background: rgba(77, 107, 254,.07); border: 1px solid rgba(77, 107, 254,.16);
  color: #2C3BC4; border-radius: 12px;
}
.stat { border-radius: 16px; border: 1px solid rgba(0,0,0,.08); box-shadow: var(--shadow); }
.stat .num { font-weight: 600; letter-spacing: -.3px; }
.stat.ok .num { color: var(--ok); }

/* --- 状态胶囊 --- */
.pill { font-weight: 600; border-radius: 999px; }
.pill.todo { background: #eef0f2; color: #51515a; }
.pill.doing { background: var(--pri-soft); color: var(--pri-d); }
.pill.done { background: var(--ok-soft); color: var(--ok); }
.pill.warn { background: var(--warn-soft); color: #a05f00; }
.pill.danger { background: var(--bad-soft); color: var(--bad); }

/* --- 明细表 --- */
.items-table th { color: var(--mut); }
.amount-cell { color: var(--pri-d); }
.item-total b, .oc-amt .am { color: var(--pri-d); }

/* --- 步骤条 --- */
.step-node .dot { background: #e9eaee; color: #83838c; border-color: #e9eaee; }
.step-node.done .dot { background: var(--ok); border-color: var(--ok); }
.step-node.cur .dot { background: var(--pri); border-color: var(--pri); box-shadow: 0 0 0 4px rgba(77, 107, 254,.18); }
.step-node.cur { background: var(--pri-soft); border-color: rgba(77, 107, 254,.28); }
.step-node.cur .st-name { color: var(--pri-d); font-weight: 600; }

/* --- 弹窗(Mac 风格) --- */
.mask { background: rgba(0, 0, 0, .28); -webkit-backdrop-filter: blur(6px); backdrop-filter: blur(6px); }
.modal-card {
  border-radius: var(--radius-lg); box-shadow: var(--shadow-lg);
  border: 1px solid rgba(255,255,255,.6); outline: 1px solid rgba(0,0,0,.06);
}
.modal-card.small { width: 380px; }
.modal-head { padding: 15px 20px; }
.modal-body { padding: 16px 20px; }
.modal-foot { padding: 13px 20px; }

/* --- 上传/文件 --- */
.upzone { border-radius: 12px; background: #fbfbfd; }
.file-item { border-radius: 10px; }
.upzone-cta { color: var(--pri); border-color: rgba(77, 107, 254,.45); border-radius: 8px; background: #fff; }

/* --- Toast --- */
.toast { border-radius: 12px; box-shadow: var(--shadow-lg); }

/* --- 登录页 --- */

/* --- 用户/角色 --- */
.user-chip { background: rgba(240,240,244,.9); border-color: rgba(0,0,0,.09); border-radius: 999px; }
.user-chip i.role { font-style: normal; font-weight: 600; }

/* --- 抽屉 --- */
.np-drawer { background: rgba(252,252,253,.9); -webkit-backdrop-filter: blur(24px) saturate(1.6); backdrop-filter: blur(24px) saturate(1.6); }
.np-item { border-radius: 12px; font-weight: 500; }
.np-item.primary { background: linear-gradient(180deg, #6E8BFF, #4D6BFE); }

/* --- 资料库/统计行 --- */
.ref-row, .data-row, .user-row, .agree-item { border-radius: 12px; }
.tab { border-radius: 10px 10px 0 0; }
.tab.on { color: var(--pri-d); }

/* --- 页脚版权 --- */
main { padding-bottom: 34px; }
.app-foot {
  text-align: center; color: var(--mut); font-size: 11.5px;
  padding: 10px 16px 18px; border-top: 1px solid rgba(0,0,0,.05);
  max-width: 1200px; margin: -10px auto 0;
}

/* 移动端细节 */
@media (max-width: 720px) {
  .topbar { padding: 8px 14px; }
  .modal-card { border-radius: 20px 20px 0 0; }
  }

/* ============================================================
   v1.5.0 协同: 负责人徽章 / 协同动态
   ============================================================ */
.oc-owner {
  display: inline-block; margin-left: 6px; font-size: 11px; font-weight: 600;
  color: var(--pri-d); background: var(--pri-soft); border-radius: 999px; padding: 1px 8px; vertical-align: 1px;
}
.log-card-title { display: flex; align-items: center; gap: 6px; }
.log-list { display: flex; flex-direction: column; gap: 6px; margin-top: 4px; max-height: 300px; overflow-y: auto; }
.log-list .lg-row {
  display: flex; align-items: baseline; gap: 6px; flex-wrap: wrap;
  font-size: 12.3px; border: 1px solid rgba(0,0,0,.07); border-radius: 10px; padding: 6px 10px; background: #fbfbfd;
}
.lg-who { font-weight: 600; white-space: nowrap; }
.lg-who i { font-style: normal; color: var(--mut); font-size: 10.5px; margin-left: 4px; }
.lg-row b { color: var(--ink); }
.lg-tgt { color: var(--mut); flex: 1; min-width: 120px; }
.lg-ts { color: var(--mut); font-size: 11px; white-space: nowrap; }
.lg-no { color: var(--pri-d); font-weight: 600; text-decoration: none; margin-right: 2px; }
.lg-no:hover { text-decoration: underline; }
#logCard { margin-top: 2px; }
@media (max-width: 720px) { .log-list { max-height: 220px; } }

/* ============================================================
   v1.6.0 Spider-fire 视觉(参考 api.dobby.now: 白底 / Lato /
   翡翠绿主色 / 64px 极简顶栏 / hero 双栏登录格局 / 细边框轻阴影)
   ============================================================ */

/* --- 令牌覆写 --- */
:root {
  --pri: #4D6BFE;                /* 枣红主色 */
  --pri-d: #3B4FE0;
  --pri-soft: #EEF3FF;
  --bg: #f8fafc;
  --card: #ffffff;
  --ink: #1c1f23;
  --mut: #6b7280;
  --line: #e5e7eb;
  --ok: #3B4FE0;
  --ok-soft: #e7f9f1;
  --warn: #f59e0b;
  --warn-soft: #fef3c7;
  --bad: #ef4444;
  --bad-soft: #fee2e2;
  --radius: 12px;
  --shadow: 0 1px 2px rgba(24,44,16, .05);
  --shadow-lg: 0 12px 32px rgba(24,44,16, .12);
  --ring: 0 0 0 3px rgba(77, 107, 254, .18);
}
body {
  font-family: "Lato", -apple-system, BlinkMacSystemFont, "Segoe UI",
    "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Arial, sans-serif;
  color: var(--ink); background: var(--bg); letter-spacing: .1px;
}
::selection { background: rgba(77, 107, 254, .18); }
button, input, select, textarea { font-family: inherit; }

/* --- 顶栏: 64px 纯白极简 sticky --- */
.topbar {
  background: rgba(255, 255, 255, .96);
  -webkit-backdrop-filter: none; backdrop-filter: none;
  min-height: 64px; border-bottom: 1px solid var(--line);
  padding: 0 24px;
}
.brand .logo { background: transparent; box-shadow: none; }
.topbar .btn, .user-chip { min-height: 32px; }
.brand-txt strong { font-size: 16px; }
.brand-txt small { font-size: 11.5px; }

/* --- 按钮: Semi 式 --- */
.btn {
  border-radius: 8px; font-weight: 600; border-width: 1px;
  box-shadow: none; padding: 8px 15px;
}
.btn.primary { background: var(--pri); box-shadow: none; }
.btn.primary:hover { background: var(--pri-d); }
.btn.ghost { background: #fff; border-color: var(--line); color: var(--ink); }
.btn.ghost:hover { border-color: var(--pri); color: var(--pri-d); background: #fff; }
.btn.ghost.danger { color: var(--bad); border-color: #fca5a5; }
.btn.ghost.danger:hover { background: var(--bad-soft); border-color: var(--bad); }
.btn:active { transform: none; }

/* --- 输入 --- */
input[type=text], input[type=date], input[type=search], input[type=number], select, textarea {
  border-radius: 8px; border: 1px solid #d1d5db; background: #fff; font-size: 13.5px;
}
input:focus, select:focus, textarea:focus {
  border-color: var(--pri); box-shadow: var(--ring);
}

/* --- 卡片: 细边框 轻阴影 白底 --- */
.card { border-radius: 12px; border: 1px solid var(--line); box-shadow: none; background: #fff; }
.order-card:hover { border-color: var(--pri); box-shadow: 0 4px 14px rgba(77, 107, 254,.14); transform: translateY(-1px); }
.stat { border: 1px solid var(--line); border-radius: 12px; box-shadow: none; }
.intro-line { background: var(--pri-soft); border: 1px solid rgba(77, 107, 254,.2); color: #115e59; }

/* --- 状态 --- */
.pill.doing { background: var(--pri-soft); color: var(--pri-d); }
.pill.done { background: var(--ok-soft); color: var(--ok); }
.amount-cell, .item-total b, .oc-amt .am, .step-node.cur .st-name,
.sp-title, .st-title { color: var(--pri-d); }
.step-node.cur { background: var(--pri-soft); border-color: rgba(77, 107, 254,.3); }
.step-node.cur .dot { background: var(--pri); border-color: var(--pri); box-shadow: 0 0 0 4px rgba(77, 107, 254,.16); }
.upzone-cta { color: var(--pri-d); border-color: rgba(77, 107, 254,.5); }
.upzone.drag { background: var(--pri-soft); border-color: var(--pri); }


/* --- 协同动态点缀 --- */
.lg-row { background: #fff; border-color: var(--line); }
.lg-who i, .oc-owner { background: var(--pri-soft); color: var(--pri-d); }
.oc-owner { background: var(--pri-soft); }

/* --- 抽屉/弹窗极简化 --- */
.np-item { border-radius: 10px; }
.np-item.primary { background: var(--pri); }
.mask { background: rgba(15, 23, 42, .32); -webkit-backdrop-filter: none; backdrop-filter: none; }
.modal-card { border-radius: 14px; border: 1px solid var(--line); outline: none; box-shadow: var(--shadow-lg); }
.toast { border-radius: 10px; box-shadow: var(--shadow-lg); }

/* --- 页脚版权(MAC 层同款保留,细线) --- */
.app-foot { border-top-color: var(--line); }

/* ============================================================
   v1.7.0 iOS(iOS27 液态玻璃)色系层 —— 覆盖 v1.6 翡翠绿
   ============================================================ */
:root {
  --pri: #4D6BFE;                /* 枣红 */
  --pri-d: #3B4FE0;
  --pri-soft: #EEF3FF;
  --bg: #F2F2F7;                 /* iOS 分组背景 */
  --card: #FFFFFF;
  --ink: #1D1D1F;
  --mut: #6E6E73;
  --line: rgba(60, 60, 67, .13);
  --ok: #34C759;
  --ok-soft: #E9F9EE;
  --warn: #FF9F0A;
  --warn-soft: #FFF3E0;
  --bad: #FF3B30;
  --bad-soft: #FFEBEA;
  --radius: 12px;
  --shadow: 0 1px 3px rgba(0,0,0,.06), 0 1px 2px rgba(0,0,0,.03);
  --shadow-lg: 0 12px 40px rgba(0, 0, 0, .12);
  --ring: 0 0 0 3.5px rgba(77, 107, 254, .18);
}
body {
  font-family: -apple-system, BlinkMacSystemFont, "SF Pro Text", "SF Pro Display",
    "PingFang SC", "Hiragino Sans GB", "Helvetica Neue", "Microsoft YaHei", sans-serif;
  background: var(--bg); color: var(--ink);
  -webkit-font-smoothing: antialiased;
}
::selection { background: rgba(77, 107, 254, .2); }

/* --- 液态玻璃表面 --- */
.topbar {
  background: rgba(250, 250, 252, .72);
  -webkit-backdrop-filter: blur(22px) saturate(1.9);
  backdrop-filter: blur(22px) saturate(1.9);
  border-bottom: 1px solid rgba(60, 60, 67, .1);
  min-height: 60px;
}
.modal-card {
  -webkit-backdrop-filter: blur(26px) saturate(1.8);
  backdrop-filter: blur(26px) saturate(1.8);
  background: rgba(255, 255, 255, .82);
  border: 1px solid rgba(255, 255, 255, .75);
  box-shadow: 0 1px 2px rgba(0,0,0,.05), 0 24px 60px rgba(0, 0, 0, .16);
}
.np-drawer { background: rgba(255,255,255,.9); backdrop-filter: blur(30px) saturate(1.8); -webkit-backdrop-filter: blur(30px) saturate(1.8); }
.card { background: rgba(255, 255, 255, .96); border: 1px solid rgba(60,60,67,.12); }
.order-card:hover { border-color: rgba(77, 107, 254,.5); box-shadow: 0 6px 18px rgba(77, 107, 254,.15); }

/* --- 主色相关硬编码覆盖(上一版绿) --- */
.btn.primary { background: linear-gradient(180deg, #6E8BFF 0%, #4D6BFE 100%); }
.btn.primary:hover { background: linear-gradient(180deg, #6E8BFF, #7a221c); }
input:focus, select:focus, textarea:focus { border-color: var(--pri); box-shadow: var(--ring); }
:focus-visible { outline-color: var(--pri); }
.step-node.cur .dot { box-shadow: 0 0 0 4px rgba(77, 107, 254,.18); }
.step-node.cur { background: var(--pri-soft); border-color: rgba(77, 107, 254,.35); }
.intro-line { background: rgba(77, 107, 254,.07); border-color: rgba(77, 107, 254,.22); color: #2C3BC4; }
.upzone.drag { border-color: var(--pri); background: var(--pri-soft); }
.order-card:hover { border-color: rgba(77, 107, 254,.5); box-shadow: 0 6px 18px rgba(77, 107, 254,.15); }
.oc-owner { background: var(--pri-soft); color: var(--pri-d); }
.amount-cell, .item-total b, .oc-amt .am, .step-node.cur .st-name, .st-title { color: var(--pri-d); }

/* --- iOS 细节 --- */
.pill.doing { background: var(--pri-soft); color: var(--pri-d); }
.tab.on { color: var(--pri-d); border-bottom-color: var(--pri); }
.chip:hover { border-color: var(--pri); background: var(--pri-soft); color: var(--pri-d); }
.mask { background: rgba(0, 0, 0, .24); -webkit-backdrop-filter: blur(4px); backdrop-filter: blur(4px); }
.modal-card { border-radius: 18px; }
.toast { border-left-width: 4px; }

/* v1.8.0 步骤字段防丢失: 自动保存中提示态 */
.btn.dirty {
  border-color: #FF9F0A !important; color: #b25e00 !important;
  box-shadow: 0 0 0 3px rgba(255, 159, 10, .16);
}
.sp-autosave-hint {
  display: inline-flex; align-items: center; gap: 5px; font-size: 11.5px; color: #b25e00;
  background: #FFF3E0; border: 1px solid rgba(255,159,10,.35); border-radius: 999px;
  padding: 2px 10px; margin-left: 8px; font-weight: 600;
}
@media (prefers-reduced-motion: no-preference) {
  .btn.dirty { animation: dirtyPulse 1.6s ease-in-out infinite; }
  @keyframes dirtyPulse { 0%,100% { box-shadow: 0 0 0 3px rgba(255,159,10,.16); } 50% { box-shadow: 0 0 0 6px rgba(255,159,10,.07); } }
}

/* ============================================================
   v1.9.0 商品明细 · 卡片式行录入布局(替代 8 列表格,便于快速录入)
   ============================================================ */
.items-tip { margin-bottom: 8px; font-size: 11.5px; line-height: 1.6; }
.items-body { display: flex; flex-direction: column; gap: 9px; }
.item-row {
  border: 1px solid var(--line); border-radius: 12px; padding: 8px 10px 10px;
  background: #fff; transition: border-color .15s, box-shadow .15s;
}
.item-row:hover { border-color: rgba(77, 107, 254, .35); }
.item-row:focus-within { border-color: var(--pri); box-shadow: 0 0 0 3px rgba(77, 107, 254, .10); }
.ir-top { display: flex; align-items: center; gap: 8px; }
.ir-idx {
  flex: 0 0 24px; height: 24px; border-radius: 8px;
  background: var(--pri-soft); color: var(--pri-d);
  font-size: 11.5px; font-weight: 700; display: inline-flex; align-items: center; justify-content: center;
}
.item-row input, .item-row select {
  border: 1px solid #d9dde3; border-radius: 8px; padding: 7px 9px;
  background: #fff; font-size: 13px; color: var(--ink); min-height: 32px; width: 100%;
  transition: border-color .14s, box-shadow .14s, background .14s;
}
.item-row input:hover, .item-row select:hover { border-color: #aab3c0; }
.item-row input:focus, .item-row select:focus {
  outline: none; border-color: var(--pri); box-shadow: var(--ring); background: #fff;
}
.item-row input::placeholder { color: #a6aeb8; font-size: 12.3px; }
.ir-top .it-name { flex: 1 1 60%; font-weight: 600; min-width: 0; }
.ir-top .it-spec { flex: 1 1 40%; min-width: 0; }
.del-row {
  flex: 0 0 auto; border: none; background: none; color: #98a1ad; cursor: pointer;
  font-size: 15px; width: 28px; height: 28px; border-radius: 8px; line-height: 1;
  display: inline-flex; align-items: center; justify-content: center;
}
.del-row:hover { color: var(--bad); background: var(--bad-soft); }
.ir-bot { display: grid; grid-template-columns: 1.6fr .8fr 1fr 1.25fr auto; gap: 7px; margin-top: 8px; align-items: end; }
.ir-cell { min-width: 0; }
.ir-cell-amt { display: flex; flex-direction: column; align-items: flex-end; justify-content: flex-end; gap: 1px; padding: 0 2px 5px 6px; white-space: nowrap; }
.ir-lb { font-size: 10px; color: var(--mut); letter-spacing: .5px; }
.ir-cell-amt .amount-cell { font-size: 13px; font-weight: 700; color: #b6bec9; }
.ir-cell-amt.has-amt .amount-cell { color: var(--pri-d); }
body.mode-read .item-row input, body.mode-read .item-row select { background: #f4f4f6; color: var(--mut); }
body.mode-read .del-row { display: none; }
/* 老表头残留类不再使用, 兜底隐藏 */
.items-table { display: none; }
@media (max-width: 720px) {
  .items-body { gap: 8px; }
  .ir-bot { grid-template-columns: repeat(3, minmax(0, 1fr)) auto; }
  .ir-cell-hs { grid-column: 1 / -1; }
  .item-row { padding: 7px 8px 9px; }
  .ir-top { gap: 6px; }
  .item-row input, .item-row select { padding: 7px 8px; font-size: 13.5px; }  /* 移动端更大触控 */
}

/* v1.10.0 步骤字段分组标题(销售合同企业资料/银行账户等) */
.f-g {
  grid-column: 1 / -1; display: flex; align-items: center; gap: 8px;
  font-size: 12.5px; font-weight: 700; color: var(--pri-d);
  margin: 8px 0 0; letter-spacing: .2px;
}
.f-g::after { content: ''; flex: 1; height: 1px; background: linear-gradient(90deg, rgba(77, 107, 254,.22), rgba(77, 107, 254,0)); }
.f-g + .f-cell, .f-g + .full, .sp-fields > .f-g:first-child { margin-top: 2px; }

/* v1.11.0 项目门禁: 登录卡双态 */
#gatePane .logo {
  background: linear-gradient(160deg, #6E8BFF, #4D6BFE); font-size: 27px;
  box-shadow: 0 4px 14px rgba(77, 107, 254, .28);
}
#gatePane .logo, #gatePane .logo * { border-radius: 14px; }

/* ============================================================
   v1.12.0 登录页水波纹活力动效 + 按钮涟漪
   ============================================================ */
.lw { position: absolute; inset: 0; pointer-events: none; z-index: 0; }
.lw i { position: absolute; display: block; border-radius: 50%; border: 2px solid rgba(77, 107, 254, .16); opacity: 0; }
.lw .r1 { width: 190px; height: 190px; left: -50px; top: 30%; animation: lwWave 8s ease-out infinite; }
.lw .r2 { width: 120px; height: 120px; left: 12%; bottom: 12%; border-color: rgba(194,90,78, .22); animation: lwWave 7s ease-out 2.4s infinite; }
.lw .r3 { width: 150px; height: 150px; right: -40px; top: 12%; border-color: rgba(52, 199, 89, .14); animation: lwWave 9s ease-out 1.2s infinite; }
.lw .r4 { width: 90px; height: 90px; right: 20%; bottom: -26px; border-color: rgba(255, 159, 10, .15); animation: lwWave 7.5s ease-out 3.6s infinite; }
@keyframes lwWave {
  0%   { transform: scale(.25); opacity: 0; }
  12%  { opacity: .6; }
  100% { transform: scale(3.1); opacity: 0; }
}

/* 按钮点击水波纹(全局 .btn) */
.btn { position: relative; overflow: hidden; -webkit-tap-highlight-color: transparent; }
.ripple-ink {
  position: absolute; border-radius: 50%; pointer-events: none;
  background: rgba(255, 255, 255, .55); mix-blend-mode: screen;
  transform: scale(0); animation: btnRipple .55s ease-out forwards;
}
.btn.ghost .ripple-ink { background: rgba(77, 107, 254, .15); mix-blend-mode: normal; }
.btn.danger .ripple-ink, .btn.ghost.danger .ripple-ink { background: rgba(255, 59, 48, .2); mix-blend-mode: normal; }
@keyframes btnRipple { to { transform: scale(2.6); opacity: 0; } }
@media (prefers-reduced-motion: reduce) {
  .lw i { display: none; }
  .ripple-ink { display: none; }
  .btn { overflow: visible; }
}

/* v1.15.0 附件浮动预览窗 + 附件按钮化 */
.viewer-card { width: min(980px, 96vw); }
.vw-name { font-weight: 600; font-size: 14px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0; }
.vw-body { position: relative; height: min(76vh, 900px); background: #eef0f3; display: grid; place-items: center; overflow: auto; padding: 12px; }
.vw-body img { max-width: 100%; max-height: 100%; object-fit: contain; background: #fff; border-radius: 8px; box-shadow: 0 2px 12px rgba(0,0,0,.10); }
.vw-body iframe { width: 100%; height: 100%; border: 0; background: #fff; border-radius: 8px; }
.vw-load { color: var(--mut); }
.vw-msg { color: var(--mut); max-width: 420px; text-align: center; line-height: 1.8; }
.file-item .fi-prev, .file-item .fi-dl {
  border: none; background: none; font-size: 14px; line-height: 1; cursor: pointer;
  padding: 3px 5px; border-radius: 6px; color: var(--mut);
}
.file-item .fi-prev:hover, .file-item .fi-dl:hover { background: var(--pri-soft); color: var(--pri-d); }


/* ============================================================
   v1.17.0 左侧导航 + 登录页 yeepay 商务风 + 按钮规范
   ============================================================ */

/* ---------- 应用骨架: 左侧栏 + 内容 ---------- */
.shell { display: flex; align-items: stretch; max-width: 1500px; margin: 0 auto; }
.side {
  width: 214px; flex: 0 0 214px;
  position: sticky; top: 60px; align-self: flex-start; height: calc(100vh - 60px);
  display: flex; flex-direction: column; gap: 2px;
  padding: 14px 12px 16px; margin-right: 4px;
  background: rgba(246, 247, 251, .8);
  border-right: 1px solid rgba(60, 60, 67, .07);
}
.side-cap {
  font-size: 10.5px; font-weight: 700; letter-spacing: 2px; color: #a3aab8;
  padding: 4px 12px 8px; text-transform: uppercase;
}
.side-nav { display: flex; flex-direction: column; gap: 3px; }
.side-foot {
  margin-top: auto; padding-top: 10px; border-top: 1px solid rgba(60, 60, 67, .09);
  display: flex; flex-direction: column; gap: 3px;
}
.s-item {
  display: flex; align-items: center; gap: 11px;
  border: 0; background: transparent; cursor: pointer;
  font-family: inherit; font-size: 13.5px; font-weight: 600; color: var(--ink);
  text-align: left; padding: 9px 12px; border-radius: 11px;
  transition: background .14s ease, color .14s ease, transform .1s ease;
  position: relative; width: 100%;
}
.s-item b { font-style: normal; font-size: 15px; line-height: 1; }
.s-item span { white-space: nowrap; }
.s-item:hover { background: rgba(77, 107, 254, .08); color: var(--pri-d); }
.s-item:active { transform: scale(.985); }
.s-item.on {
  background: linear-gradient(180deg, #6E8BFF, #4D6BFE);
  color: #fff; box-shadow: 0 6px 16px rgba(77, 107, 254, .26);
}
.s-item.on:hover { color: #fff; }
.s-item.danger { color: #d9534f; }
.s-item.danger:hover { background: rgba(255, 59, 48, .09); color: #c22; }
.shell-main {
  flex: 1; min-width: 0; max-width: 1240px; margin: 0 auto;
  padding: 16px 22px 44px;
}
.app-foot { margin-left: 230px; }

/* 顶部: 新建订单 = 悬浮式主键(胶囊渐变) */
#btnNewOrder {
  border-radius: 999px; font-weight: 600; font-size: 14px; padding: 9px 20px;
  color: #fff; border: 0;
  background: linear-gradient(92deg, #4D6BFE 0%, #3B4FE0 100%);
  box-shadow: 0 6px 18px rgba(77, 107, 254, .32), 0 1px 3px rgba(77, 107, 254, .18);
  transition: transform .15s ease, box-shadow .15s ease;
}
#btnNewOrder:hover { transform: translateY(-1px); box-shadow: 0 10px 24px rgba(77, 107, 254, .40); }
#btnNewOrder:active { transform: translateY(0) scale(.97); }
#btnNewOrder:disabled { opacity: .5; cursor: not-allowed; transform: none; }

/* 顶部栏通用按钮微调(版本化圆角/字重) */
.topbar .btn, .s-item { letter-spacing: .1px; }
.topbar { min-height: 60px; padding: 0 20px; justify-content: flex-start; }
.topbar .brand { padding: 8px 0; }
.top-actions { margin-left: auto; }

/* ---------- 登录页 yeepay 商务风 ---------- */


/* 响应式: 920 以下收侧栏, 抽屉兜底 */
@media (max-width: 920px) {
  .side { display: none; }
  .shell-main { padding: 12px 14px 84px; }
  .app-foot { margin-left: 0; }
  .topbar .brand-txt small { display: none; }
}
@media (prefers-reduced-motion: reduce) {
  .s-item, #btnNewOrder { transition: none; }
}

/* ============================================================
   v1.18.0 KYC 企业档案库
   ============================================================ */
.kyc-card { width: min(940px, 96vw); }
.kyc-card .modal-head { gap: 10px; }
.kyc-tabs { margin-left: auto; display: inline-flex; gap: 6px; }
.kyc-tabs .btn { border-radius: 999px; padding: 5px 13px; font-size: 12.5px; }
.kyc-body { padding: 14px 18px 18px; max-height: min(72vh, 760px); overflow-y: auto; }
.kyc-count-note { color: var(--mut); font-size: 12px; }

/* 状态过滤条 + 列表 */
.kyc-flt { display: flex; gap: 6px; flex-wrap: wrap; margin: 2px 0 10px; align-items: center; }
.kyc-flt button { border: 1px solid var(--line); background: #fff; border-radius: 999px; font-size: 12px; padding: 4px 11px; cursor: pointer; color: var(--ink); }
.kyc-flt button.on { background: var(--pri-soft); border-color: rgba(77, 107, 254,.45); color: var(--pri-d); font-weight: 600; }
.kyc-row {
  border: 1px solid var(--line); border-radius: 12px; background: #fff;
  padding: 10px 12px; margin-bottom: 8px; cursor: pointer;
  transition: border-color .15s ease, box-shadow .15s ease;
}
.kyc-row:hover { border-color: rgba(77, 107, 254,.45); box-shadow: 0 3px 10px rgba(77, 107, 254,.08); }
.kyc-row-head { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.kyc-row-name { font-weight: 600; font-size: 14px; }
.kyc-row-biz { color: var(--mut); font-size: 12px; background: #f2f4f8; padding: 1px 8px; border-radius: 999px; }
.kyc-row-by { color: var(--mut); font-size: 11.5px; margin-left: auto; }
.kyc-row-acts { display: inline-flex; gap: 5px; margin-left: 4px; }
.kyc-row-acts .btn { border-radius: 999px; padding: 3px 10px; font-size: 12px; }
.kyc-pill { font-size: 11px; font-weight: 700; padding: 2px 9px; border-radius: 999px; letter-spacing: .2px; }
.kyc-pill.pending { background: #FFF3E0; color: #B25E00; }
.kyc-pill.approved { background: #E9F9EE; color: #1E7A44; }
.kyc-pill.rejected { background: #FFEBEA; color: #C22; }
.kyc-detail { display: none; margin-top: 9px; padding-top: 9px; border-top: 1px dashed var(--line); font-size: 12.5px; }
.kyc-row.open .kyc-detail { display: block; }
.kyc-dl { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 4px 14px; }
.kyc-dl div { display: flex; gap: 6px; }
.kyc-dl b { color: #8a6f6a; font-weight: 600; min-width: 64px; }
.kyc-dl span { color: var(--ink); word-break: break-all; }
.kyc-reject { background: #FFEBEA; color: #B03; border-radius: 8px; padding: 5px 9px; font-size: 12px; margin-top: 6px; }

/* 证件文件行 */
.kyc-files { display: flex; flex-direction: column; gap: 6px; }
.kyc-slot {
  display: flex; align-items: center; gap: 9px;
  border: 1px dashed #cfd6e0; border-radius: 10px; padding: 6px 10px; background: #fbfcfe;
}
.kyc-slot > b { font-size: 12.5px; width: 108px; flex: 0 0 108px; font-weight: 600; color: #3d4350; }
.kyc-slot .kyc-slot-state { font-size: 12px; color: var(--mut); }
.kyc-slot .file-item {
  background: #fff; border: 1px solid var(--line); border-radius: 8px;
  padding: 3px 6px; max-width: 280px;
}
.kyc-slot .file-item .fi-name { font-size: 12px; }
.kyc-slot .file-item .fi-name small { display: none; }
.kyc-file-in { font-size: 12px; }
.kyc-empty { text-align: center; color: var(--mut); padding: 42px 10px; font-size: 13.5px; line-height: 2; }
.kyc-empty b { font-size: 34px; display: block; }
body.mode-read #kycTabNew,
body.mode-read .kyc-act-write,
body.mode-read #kycFromOrder,
body.mode-read #kycPickOpen { display: none !important; }

/* s1 卖方主体选择行 */
.kyc-pick-row {
  border: 1px solid rgba(77, 107, 254, .28); background: rgba(77, 107, 254, .045);
  border-radius: 12px; padding: 9px 12px; margin: 2px 0 4px;
}
.kyc-pick-row label { font-weight: 600; font-size: 12.5px; color: var(--pri-d); }
.kyc-pick-line { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; margin-top: 6px; }
.kyc-pick-line select { flex: 1; min-width: 200px; }
.kyc-pick-tip { color: var(--mut); font-size: 11.5px; margin-top: 4px; line-height: 1.6; }

/* ============================================================
   v1.19.0 业务询盘档案(线索/往来截图/问答板/汇总打印/客户台)
   ============================================================ */
body.client-mode .side { display: none !important; }
body.client-mode .top-actions { display: none !important; }
body.client-mode .shell-main { padding: 14px 20px 60px; }
.user-chip i.role.client { background: #E9F9EE; color: #1E7A44; }

.inq-body { display: grid; grid-template-columns: 336px 1fr; gap: 14px; align-items: start; }
@media (max-width: 1100px) { .inq-body { grid-template-columns: 1fr; } }
.inq-list { display: flex; flex-direction: column; gap: 8px; max-height: calc(100vh - 150px); overflow-y: auto; padding-right: 2px; }
.inq-card {
  border: 1px solid var(--line); border-radius: 12px; background: #fff; padding: 10px 12px; cursor: pointer;
  transition: border-color .15s ease, box-shadow .15s ease;
}
.inq-card:hover { border-color: rgba(77, 107, 254,.5); }
.inq-card.on { border-color: rgba(77, 107, 254,.7); box-shadow: 0 0 0 1px rgba(77, 107, 254,.35), 0 4px 14px rgba(77, 107, 254,.12); }
.inq-card-head { display: flex; gap: 6px; align-items: center; }
.inq-no { color: var(--pri-d); font-weight: 700; font-size: 12px; }
.inq-title { font-weight: 600; font-size: 13.5px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.inq-meta { color: var(--mut); font-size: 11.5px; margin-top: 5px; display: flex; gap: 8px; flex-wrap: wrap; }
.inq-empty { text-align: center; color: var(--mut); padding: 30px 8px; font-size: 13px; line-height: 2; }
.inq-panel .card { padding: 12px 14px; margin-bottom: 10px; }
.inq-panel-head { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; margin-bottom: 6px; }
.inq-panel-head .inq-title { font-size: 16px; }
.inq-tabs { display: inline-flex; gap: 4px; }
.inq-tabs .tab { padding: 5px 12px; font-size: 12.5px; cursor: pointer; border-radius: 999px; border: 1px solid var(--line); background: #fff; }
.inq-tabs .tab.on { background: var(--pri-soft); color: var(--pri-d); border-color: rgba(77, 107, 254,.4); font-weight: 600; }
.inq-fgrid { display: grid; grid-template-columns: repeat(auto-fill, minmax(230px, 1fr)); gap: 8px 14px; }
.inq-fgrid .f-cell { margin-bottom: 4px; }
.inq-notes { color: var(--mut); font-size: 12px; line-height: 1.7; }

/* 往来截图 */
.inq-ev-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(170px, 1fr)); gap: 10px; }
.inq-ev {
  border: 1px solid var(--line); border-radius: 10px; overflow: hidden; background: #fff;
}
.inq-ev img { width: 100%; height: 108px; object-fit: cover; cursor: zoom-in; display: block; background: #f2f4f8; }
.inq-ev .ev-note { font-size: 11.5px; padding: 4px 7px; color: #3d4350; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.inq-ev .ev-ft { display: flex; align-items: center; gap: 4px; padding: 2px 7px 6px; }
.inq-ev .ev-ft small { color: var(--mut); font-size: 10.5px; flex: 1; }
.inq-upload { border: 1.5px dashed #cfd6e0; border-radius: 12px; padding: 12px; background: #fbfcfe; margin-bottom: 10px; display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }
.inq-upload input[type=text] { width: 220px; }

/* 问答板 */
.qa-thread { display: flex; flex-direction: column; gap: 8px; max-height: 46vh; overflow-y: auto; padding: 4px 2px; }
.qa-msg { max-width: 78%; border-radius: 12px; padding: 7px 11px; font-size: 13px; line-height: 1.65; white-space: pre-wrap; word-break: break-word; }
.qa-msg.me { align-self: flex-end; background: rgba(77, 107, 254,.12); border-top-right-radius: 3px; }
.qa-msg.them { align-self: flex-start; background: #f0f1f5; border-top-left-radius: 3px; }
.qa-msg.cli { align-self: flex-start; background: #E9F9EE; border-top-left-radius: 3px; }
.qa-meta { display: block; font-size: 10.5px; color: var(--mut); margin-top: 2px; }
.qa-compose { display: flex; gap: 8px; margin-top: 10px; }
.qa-compose textarea { flex: 1; min-height: 40px; resize: vertical; }

/* 客户问答台 */
.client-hero {
  border: 1px solid rgba(77, 107, 254,.25); background: linear-gradient(180deg,#fdf3f1,#fff);
  border-radius: 14px; padding: 14px 16px; margin-bottom: 12px;
}
.client-hero h3 { margin: 0 0 4px; font-size: 16px; }
.cl-ev { display: flex; gap: 8px; flex-wrap: wrap; }
.cl-ev img { width: 120px; height: 86px; object-fit: cover; border-radius: 8px; cursor: zoom-in; border: 1px solid var(--line); }

/* 打印 */
.print-sheet { display: none; }
@media print {
  body { background: #fff !important; }
  body.printing > *:not(.print-sheet) { display: none !important; }
  .print-sheet { display: block !important; }
  .print-sheet table { border-collapse: collapse; width: 100%; font-size: 11px; }
  .print-sheet th, .print-sheet td { border: 1px solid #333; padding: 4px 6px; text-align: left; vertical-align: top; }
  .print-sheet th { background: #f0f0f0 !important; -webkit-print-color-adjust: exact; }
  .print-sheet h1 { font-size: 16px; text-align: center; margin: 6px 0 10px; }
  .print-sheet .ps-sub { text-align: center; font-size: 11px; color: #555; margin-bottom: 8px; }
  .print-sheet .ps-stat { font-size: 11px; color: #333; margin-bottom: 6px; }
}

/* ============================================================
   v1.22.0 财务收支 + 经营看板(投资者汇总)
   ============================================================ */
/* ---- 记账弹窗方向切换 ---- */
.cf-dir { display: flex; gap: 8px; margin-bottom: 14px; }
.cf-dir-btn {
  flex: 1; border-radius: 11px; padding: 9px; font-size: 14px; font-weight: 700;
  border: 1px solid var(--line); background: #fff; color: var(--mut); cursor: pointer;
  transition: all .15s ease;
}
.cf-dir-btn.in.on { background: #E9F9EE; border-color: #34C759; color: #1E7A44; }
.cf-dir-btn.out.on { background: #FFF3E0; border-color: #FF9F0A; color: #B25E00; }
#cfSave:disabled { opacity: .55; cursor: not-allowed; }

/* ---- 财务收支视图 ---- */
.fin-toolbar {
  display: flex; gap: 8px; align-items: center; flex-wrap: wrap;
  border: 1px solid var(--line); border-radius: 12px; background: #fff;
  padding: 8px 12px; margin-bottom: 10px;
}
.fin-toolbar .seg { display: inline-flex; border: 1px solid var(--line); border-radius: 999px; overflow: hidden; }
.fin-toolbar .seg button { border: 0; background: #fff; padding: 5px 13px; font-size: 12.5px; cursor: pointer; color: var(--ink); }
.fin-toolbar .seg button.on { background: var(--pri-soft); color: var(--pri-d); font-weight: 700; }
.fin-toolbar input, .fin-toolbar select { font-size: 12.5px; padding: 5px 9px; border: 1px solid var(--line); border-radius: 8px; background: #fff; }
.fin-toolbar .sum { margin-left: auto; font-size: 12.5px; color: var(--mut); }
.fin-toolbar .sum b { color: var(--ok); font-weight: 700; }
.fin-toolbar .sum .out { color: #c0392b; }
.cf-table { width: 100%; border-collapse: collapse; background: #fff; border-radius: 12px; overflow: hidden; border: 1px solid var(--line); font-size: 12.5px; }
.cf-table th { text-align: left; background: #f7f8fb; font-size: 11.5px; color: #8a6f6a; font-weight: 700; padding: 8px 10px; border-bottom: 1px solid var(--line); }
.cf-table td { padding: 7px 10px; border-bottom: 1px solid #f1f3f7; vertical-align: middle; }
.cf-table tr:last-child td { border-bottom: 0; }
.cf-table tr:hover td { background: #fafbff; }
.cf-amt { font-weight: 700; font-variant-numeric: tabular-nums; white-space: nowrap; }
.cf-amt.in { color: #1E7A44; }
.cf-amt.out { color: #c0392b; }
.cf-cat { display: inline-block; border-radius: 999px; padding: 1px 9px; font-size: 11px; background: #f0f2f6; color: #3d4350; }
.cf-dir-tag { font-size: 10.5px; font-weight: 700; border-radius: 6px; padding: 1px 6px; }
.cf-dir-tag.in { background: #E9F9EE; color: #1E7A44; }
.cf-dir-tag.out { background: #FFEBEA; color: #C22; }
.cf-empty { text-align: center; color: var(--mut); padding: 40px 10px; font-size: 13px; border: 1px dashed var(--line); border-radius: 14px; }
body.mode-read.fin-edit .btn-fin-write { display: inline-flex !important; }

/* ---- 经营看板 ---- */
.inv-kpis { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 10px; margin-bottom: 14px; }
.inv-kpi {
  background: #fff; border: 1px solid var(--line); border-radius: 14px; padding: 12px 14px;
  box-shadow: 0 2px 8px rgba(107,26,22, .04);
}
.inv-kpi .l { font-size: 11px; color: var(--mut); font-weight: 600; letter-spacing: .3px; }
.inv-kpi .n { font-size: 21px; font-weight: 800; margin-top: 5px; font-variant-numeric: tabular-nums; line-height: 1.1; }
.inv-kpi .n.sm { font-size: 17px; }
.inv-kpi .s { font-size: 11px; color: var(--mut); margin-top: 3px; }
.inv-kpi.good .n { color: #1E7A44; }
.inv-kpi.bad .n { color: #c0392b; }
.inv-kpi.accent .n { color: var(--pri-d); }
.inv-cols { display: grid; grid-template-columns: repeat(auto-fit, minmax(320px, 1fr)); gap: 10px; }
.inv-card { background: #fff; border: 1px solid var(--line); border-radius: 14px; padding: 12px 14px; }
.inv-card h4 { margin: 0 0 8px; font-size: 13px; }
.inv-card .muted { font-size: 11px; }
.inv-bars { display: flex; align-items: flex-end; gap: 8px; height: 150px; padding: 6px 2px 0; border-bottom: 1px solid var(--line); }
.inv-bar { flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: flex-end; height: 100%; gap: 4px; min-width: 0; }
.inv-bar .b { width: 100%; max-width: 34px; border-radius: 6px 6px 0 0; transition: height .3s ease; }
.inv-bar .b.in { background: linear-gradient(180deg, #34C759, #28A745); }
.inv-bar .b.out { background: linear-gradient(180deg, #FF9F0A, #E8890C); }
.inv-bar .b.amt { background: linear-gradient(180deg, #6E8BFF, #4D6BFE); }
.inv-bar .lb { font-size: 9.5px; color: var(--mut); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 100%; }
.inv-bar .v { font-size: 9.5px; font-weight: 700; color: #8a6f6a; }
.inv-legend { display: flex; gap: 14px; flex-wrap: wrap; margin-top: 6px; font-size: 11px; color: var(--mut); }
.inv-legend i { display: inline-block; width: 10px; height: 10px; border-radius: 3px; margin-right: 4px; vertical-align: -1px; }
.inv-hbar { margin-bottom: 8px; }
.inv-hbar .lb-row { display: flex; justify-content: space-between; font-size: 11.5px; margin-bottom: 3px; }
.inv-hbar .tr { height: 9px; border-radius: 99px; background: #f0f2f6; overflow: hidden; }
.inv-hbar .tr i { display: block; height: 100%; border-radius: 99px; }
.inv-toplist { width: 100%; border-collapse: collapse; font-size: 12px; }
.inv-toplist td { padding: 5px 4px; border-bottom: 1px dashed #f1f3f7; }
.inv-toplist td.r { text-align: right; font-weight: 700; font-variant-numeric: tabular-nums; }
.inv-recent { width: 100%; border-collapse: collapse; font-size: 11.5px; }
.inv-recent th { text-align: left; color: #8a6f6a; font-weight: 600; font-size: 10.5px; padding: 4px; border-bottom: 1px solid var(--line); }
.inv-recent td { padding: 5px 4px; border-bottom: 1px solid #f5f6fa; }
.inv-funnel .step { display: flex; align-items: center; gap: 8px; margin-bottom: 6px; font-size: 12px; }
.inv-funnel .step b { width: 52px; color: var(--mut); font-weight: 600; font-size: 11px; }
.inv-funnel .bar { height: 16px; border-radius: 8px; background: linear-gradient(90deg,#4D6BFE,#3B4FE0); min-width: 3px; }
.inv-funnel .cnt { font-weight: 700; font-size: 12px; margin-left: auto; }
.inv-note { font-size: 11px; color: var(--mut); margin-top: 10px; line-height: 1.7; }
@media (max-width: 720px) { .inv-kpis { grid-template-columns: repeat(2, 1fr); } }
@media print {
  .inv-card h4, .inv-kpi .l, .inv-note { color: #000 !important; }
  .inv-kpi, .inv-card { box-shadow: none; }
}

/* ============================================================
   v1.23.0 工作台 UI 重设计
   —— 环境光背景 · KPI 概览卡 · 一体化搜索条 · 订单卡片精致化
   ============================================================ */
body {
  background:
    radial-gradient(1100px 520px at 88% -12%, rgba(77, 107, 254, .075), transparent 62%),
    radial-gradient(980px 500px at -6% 108%, rgba(107,26,22, .07), transparent 58%),
    var(--bg);
  background-attachment: fixed;
}

/* ---------- 工作台顶部 ---------- */
#boardView .board-top { margin: 2px 0 16px; }
#boardView .board-title h1 {
  margin: 0; font-size: 23px; font-weight: 800; letter-spacing: -.4px; color: var(--ink);
}
#boardView .board-lead {
  margin: 5px 0 0; font-size: 12.5px; line-height: 1.75; color: var(--mut); max-width: 760px;
}
#boardView .board-lead b {
  color: var(--pri-d); font-weight: 700;
  background: linear-gradient(92deg, #4D6BFE 10%, #3B4FE0 90%);
  -webkit-background-clip: text; background-clip: text; color: transparent;
}

/* ---------- KPI 概览卡 ---------- */
#boardView .stats { gap: 12px; margin: 0 0 14px; }
#boardView .stat {
  position: relative; overflow: hidden; margin: 0;
  display: flex; align-items: center; gap: 12px;
  background: linear-gradient(180deg, #ffffff, #fbfcff);
  border: 1px solid rgba(0, 0, 0, .065); border-radius: 16px;
  box-shadow: 0 1px 2px rgba(58,22,18, .03), 0 8px 22px rgba(58,22,18, .05);
  padding: 13px 14px; text-align: left;
  transition: transform .18s ease, box-shadow .18s ease, border-color .18s ease;
}
#boardView .stat:hover { transform: translateY(-2px); border-color: rgba(77, 107, 254, .25); box-shadow: 0 2px 4px rgba(58,22,18,.04), 0 14px 32px rgba(77, 107, 254, .10); }
#boardView .stat .s-grad {
  position: absolute; top: 0; left: 0; right: 0; height: 3px;
  background: linear-gradient(90deg, #6E8BFF, #4D6BFE 55%, #3B4FE0);
  opacity: .95;
}
#boardView .stat.ok .s-grad { background: linear-gradient(90deg, #30D158, #34C759); }
#boardView .stat .s-ico {
  flex: 0 0 40px; width: 40px; height: 40px; border-radius: 13px;
  display: grid; place-items: center; font-size: 19px; font-style: normal;
  background: linear-gradient(140deg, #fcf1ef, #fdf3f1);
  box-shadow: inset 0 0 0 1px rgba(77, 107, 254, .10);
}
#boardView .stat.ok .s-ico { background: linear-gradient(140deg, #EAF9F0, #F0FBF4); box-shadow: inset 0 0 0 1px rgba(52, 199, 89, .16); }
#boardView .stat .s-num { min-width: 0; }
#boardView .stat .num { font-size: 24px; font-weight: 800; letter-spacing: -.5px; line-height: 1.05; font-variant-numeric: tabular-nums; color: var(--ink); }
#boardView .stat.ok .num { color: var(--ok); }
#boardView .stat .lbl { font-size: 11.5px; color: var(--mut); margin-top: 3px; font-weight: 500; }

/* ---------- 一体化搜索条 ---------- */
#boardView .board-tools {
  display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
  background: rgba(255, 255, 255, .92); border: 1px solid rgba(0, 0, 0, .07);
  border-radius: 15px; box-shadow: 0 1px 2px rgba(58,22,18,.03), 0 6px 18px rgba(58,22,18,.05);
  padding: 6px 10px 6px 15px; margin: 0 0 16px;
}
#boardView .bt-search {
  flex: 1 1 250px; display: flex; align-items: center; gap: 9px; min-width: 0;
  background: #f3f5f9; border-radius: 11px; padding: 0 12px;
  transition: box-shadow .15s ease, background .15s ease;
}
#boardView .bt-search:focus-within { background: #fff; box-shadow: 0 0 0 2px rgba(77, 107, 254, .32); }
#boardView .bt-ico { font-size: 18px; line-height: 1; color: #8a6f6a; transform: rotate(-10deg); }
#boardView #searchInput {
  width: 100%; border: 0; outline: 0; background: transparent; font-size: 13.5px;
  padding: 9px 0; -webkit-appearance: none; appearance: none;
}
#boardView #searchInput::-webkit-search-cancel-button { -webkit-appearance: none; }
#boardView .bt-filter select {
  border: 1px solid rgba(0, 0, 0, .08); border-radius: 999px; background: #f7f8fb;
  padding: 7px 12px; font-size: 12.5px; color: var(--ink); cursor: pointer;
  transition: border-color .15s ease, box-shadow .15s ease;
}
#boardView .bt-filter select:focus { outline: none; border-color: rgba(77, 107, 254,.5); box-shadow: 0 0 0 3px rgba(77, 107, 254,.12); }
#boardView .board-note { font-size: 12.5px; color: var(--mut); font-weight: 600; margin-left: auto; padding-left: 8px; }
#boardView .board-hint { font-size: 11px; color: #a7aebb; white-space: nowrap; }
@media (max-width: 760px) { #boardView .board-hint { display: none; } }

/* ---------- 订单卡片精致化 ---------- */
#boardView .card-grid { gap: 14px; }
.order-card {
  position: relative; overflow: hidden;
  border-radius: 17px; padding: 15px 16px 12px; gap: 11px;
  background: linear-gradient(180deg, #ffffff, #fdfdfe);
  border: 1px solid rgba(0, 0, 0, .065);
  box-shadow: 0 1px 2px rgba(58,22,18, .03), 0 7px 20px rgba(58,22,18, .05);
  cursor: pointer;
  transition: transform .18s ease, box-shadow .18s ease, border-color .18s ease, background .18s ease;
}
.order-card .oc-rail {
  position: absolute; left: 0; top: 0; bottom: 0; width: 4px;
  background: #cdd3dc; opacity: .7; transition: opacity .18s ease, background .18s ease;
}
.order-card[data-state="doing"] .oc-rail { background: linear-gradient(180deg, #6E8BFF, #4D6BFE); }
.order-card[data-state="done"] .oc-rail { background: linear-gradient(180deg, #30D158, #34C759); }
.order-card:hover { transform: translateY(-3px); border-color: rgba(77, 107, 254, .42); box-shadow: 0 4px 10px rgba(58,22,18,.05), 0 18px 40px rgba(77, 107, 254, .13); }
.order-card:hover .oc-rail { opacity: 1; }
.order-card:active { transform: translateY(-1px) scale(.995); }
.order-card:focus-visible { outline: 2px solid var(--pri); outline-offset: 2px; }
.order-card .oc-top { gap: 12px; }
.order-card .oc-main { min-width: 0; }
.order-card .oc-no {
  display: inline-flex; align-items: center; font-size: 11px; font-weight: 700;
  letter-spacing: .5px; color: #79828f;
  background: #f1f3f7; border-radius: 7px; padding: 2px 8px;
  font-variant-numeric: tabular-nums;
}
.order-card[data-state="doing"] .oc-no { color: var(--pri-d); background: #EEF3FF; }
.order-card[data-state="done"] .oc-no { color: #1e7a44; background: #e9f9ee; }
.order-card .oc-cust { font-size: 15px; font-weight: 700; letter-spacing: -.2px; margin-top: 6px; display: flex; align-items: center; gap: 6px; flex-wrap: wrap; color: var(--ink); }
.order-card .oc-owner {
  font-size: 10.5px; font-weight: 600; color: #3B4FE0; background: #fdf3f1;
  border-radius: 999px; padding: 1px 8px; white-space: nowrap;
}
.order-card .oc-date { font-size: 11.5px; color: var(--mut); margin-top: 4px; }
.order-card .oc-amt {
  flex: 0 0 auto; min-width: 86px; display: flex; flex-direction: column; align-items: flex-end; justify-content: center; gap: 3px;
  background: linear-gradient(140deg, rgba(77, 107, 254, .05), rgba(107,26,22, .05));
  border: 1px solid rgba(77, 107, 254, .10); border-radius: 12px; padding: 7px 10px 6px;
}
.order-card[data-state="done"] .oc-amt { background: linear-gradient(140deg, rgba(52,199,89,.05), rgba(52,199,89,.02)); border-color: rgba(52, 199, 89, .18); }
.order-card .oc-amt .am { font-size: 15px; font-weight: 800; letter-spacing: -.3px; color: var(--pri-d); font-variant-numeric: tabular-nums; line-height: 1; }
.order-card .oc-amt .am.zero { color: #8a6f6a; font-weight: 700; }
.order-card[data-state="done"] .oc-amt .am { color: #1e7a44; }
.order-card .oc-amt .tag {
  display: inline-block; font-size: 9.5px; font-weight: 800; letter-spacing: .8px;
  color: #3B4FE0; background: rgba(77, 107, 254, .10); border-radius: 999px; padding: 1px 7px; line-height: 1.4;
}
.order-card[data-state="done"] .oc-amt .tag { color: #1e7a44; background: rgba(52, 199, 89, .14); }

/* 流程进度 */
.order-card .mini-steps { display: flex; gap: 4px; }
.order-card .ms { height: 7px; border-radius: 999px; background: #e6ebf2; transition: background .2s ease, box-shadow .2s ease; }
.order-card .ms + .ms { margin-left: 0; }
.order-card .ms.done { background: linear-gradient(90deg, #30D158, #34C759); }
.order-card .ms.cur { background: linear-gradient(90deg, #6E8BFF, #3B4FE0); box-shadow: 0 0 0 3px rgba(77, 107, 254, .13); }
.order-card .oc-step-txt { font-size: 11.5px; color: var(--mut); margin-top: 2px; font-weight: 500; }
.order-card .oc-foot { margin-top: 1px; border-top: 1px solid rgba(0, 0, 0, .055); padding-top: 9px; align-items: center; }

/* 状态胶囊升级(全站统一) */
.pill { position: relative; padding: 2px 10px; }
.pill::before { content: ""; width: 6px; height: 6px; border-radius: 50%; background: currentColor; opacity: .85; flex: 0 0 auto; }
.pill.todo { background: #eef1f5; color: #5b6777; }
.pill.doing { background: rgba(77, 107, 254, .12); color: var(--pri-d); }
.pill.done { background: rgba(52, 199, 89, .14); color: #1e7a44; }

/* ---------- 空状态 ---------- */
#boardView .empty {
  position: relative; overflow: hidden;
  border: 1px dashed rgba(0, 0, 0, .13); border-radius: 20px;
  background: linear-gradient(180deg, #ffffff, #f6f8fd);
  padding: 68px 20px 74px;
}
#boardView .empty .empty-orb {
  position: absolute; width: 360px; height: 360px; border-radius: 50%;
  background: radial-gradient(circle, rgba(77, 107, 254, .10), transparent 62%);
  top: -150px; right: -90px; pointer-events: none;
}
#boardView .empty .empty-orb::after {
  content: ""; position: absolute; width: 300px; height: 300px; border-radius: 50%;
  background: radial-gradient(circle, rgba(107,26,22, .09), transparent 62%);
  top: 60px; right: -160px;
}
#boardView .empty .empty-ico { position: relative; font-size: 56px; animation: ebob 4.5s ease-in-out infinite; }
@keyframes ebob { 0%, 100% { transform: translateY(0) rotate(0); } 50% { transform: translateY(-6px) rotate(-3deg); } }
#boardView .empty .empty-t1 { position: relative; font-size: 17px; font-weight: 800; letter-spacing: -.3px; margin: 16px 0 6px; color: var(--ink); }
#boardView .empty .empty-t2 { position: relative; margin: 0 auto; max-width: 440px; font-size: 13px; line-height: 1.9; color: var(--mut); }
@media (prefers-reduced-motion: reduce) {
  #boardView .empty .empty-ico { animation: none; }
  .order-card, #boardView .stat, #boardView .bt-search, #boardView .bt-filter select { transition: none; }
}

/* ============================================================
   v1.24.0 第三方登录(微信扫码 / Gmail) + 注册申请审批
   ============================================================ */
.oauth-banner {
  background: #fff5e3; color: #8a5a00; border: 1px solid #ffd591;
  border-radius: 10px; padding: 8px 11px; font-size: 12px; line-height: 1.65; margin: 0 0 10px;
}
.oauth-banner.ok { background: #e9f9ee; color: #1e7a44; border-color: #b7e3c5; }
.oauth-div {
  display: flex; align-items: center; gap: 10px; margin: 14px 0 10px; color: #a7aebb; font-size: 11px;
}
.oauth-div::before, .oauth-div::after { content: ""; flex: 1; height: 1px; background: rgba(0, 0, 0, .08); }
.oauth-row { display: flex; gap: 8px; }
.oauth-btn {
  flex: 1; display: inline-flex; align-items: center; justify-content: center; gap: 6px;
  border: 1px solid rgba(0, 0, 0, .1); border-radius: 10px; background: #fff;
  padding: 9px 6px; font-size: 13px; font-weight: 600; color: var(--ink); cursor: pointer;
  transition: border-color .15s ease, box-shadow .15s ease, transform .1s ease;
}
.oauth-btn:hover { transform: translateY(-1px); box-shadow: 0 6px 16px rgba(78,26,21, .10); }
.oauth-btn:active { transform: translateY(0) scale(.98); }
.oauth-btn.oa-wx:hover { border-color: rgba(7, 193, 96, .55); }
.oauth-btn.oa-gl:hover { border-color: rgba(77, 107, 254, .6); }
.oauth-note { font-size: 10.5px; color: #bfaead; text-align: center; margin-top: 8px; line-height: 1.5; }

/* 外部注册申请卡(账户管理) */
.ua-card {
  border: 1px solid rgba(255, 159, 10, .35); background: #fffbf4; border-radius: 12px;
  padding: 9px 12px; margin: 8px 0 10px;
}
.ua-card .ua-title { font-size: 12.5px; font-weight: 700; color: #8a5a00; margin-bottom: 6px; }
.ua-row {
  display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
  border: 1px solid rgba(0, 0, 0, .06); background: #fff; border-radius: 10px;
  padding: 6px 9px; margin-bottom: 6px; font-size: 12px;
}
.ua-row .ua-prov { font-weight: 700; white-space: nowrap; }
.ua-row .ua-who { flex: 1; min-width: 180px; }
.ua-row .ua-who b { display: block; font-size: 12.5px; }
.ua-row .ua-who small { color: var(--mut); }
.ua-row select { font-size: 12px; padding: 4px 6px; border: 1px solid var(--line); border-radius: 8px; }
.ua-row input[type=text] { font-size: 12px; padding: 4px 8px; border: 1px solid var(--line); border-radius: 8px; width: 130px; }
.ua-row .btn { border-radius: 999px; padding: 3px 11px; font-size: 12px; }
.ua-empty { color: var(--mut); font-size: 11.5px; }
@media (max-width: 460px) { .oauth-row { flex-direction: column; } }

/* ============================================================
   v1.91.0 侧栏改为**常驻显示**（撤销 v1.25.0 的「隐藏台」）
   原因：宽屏下左侧「工作台」导航默认 transform: translateX(-100%) 收起、
   要鼠标贴左缘才滑出 —— 功能入口等于被藏起来了（反馈「后台工作台修改不要隐藏」）。
   ⛔ 现在不再覆盖 .side：它回归上面 `.side` 的基础样式（flex: 0 0 214px + position: sticky），
      与内容并排、常驻可见。窄屏仍走右侧抽屉；client 模式仍整条隐藏。
   ⛔ 注意：#sideZone（左缘热区）随之失效，但保留 DOM 无害（无样式即无热区）。
   ============================================================ */

/* ============================================================
   v1.26.0 档案库 #mDocs:物流协议 + KYC 合并单弹窗(双 Tab)
   ============================================================ */
#mDocs .docs-tabbar { padding: 0 18px; margin: 8px 0 0; }
#mDocs .docs-pane { padding: 0 18px 18px; }
#mDocs #docPaneAgree { padding: 12px 18px 18px; }
#mDocs .docs-sub { display: flex; align-items: center; gap: 8px; padding: 12px 0 6px; }
#mDocs .docs-sub .kyc-tabs { margin-left: auto; }
#mDocs .kyc-body { padding: 6px 0 14px; max-height: min(66vh, 700px); }
#mDocs .kyc-body .modal-foot { padding-top: 8px; }

/* ============================================================
   v1.27.0 资料库界面重设计:双栏工作台(快速添加 + 可搜索档案列表)
   ============================================================ */
#mRefs .modal-card.refs-card { width: min(940px, 96vw); }
#mRefs .refs-head-note { color: var(--mut); font-size: 12px; font-weight: 400; letter-spacing: .2px; }
#mRefs .tabbar.refs-tabs { padding: 0 4px; gap: 2px; margin-bottom: 12px; }
#mRefs .tabbar .tab { padding: 9px 16px 11px; font-size: 13.5px; border-radius: 10px 10px 0 0; display: inline-flex; align-items: center; gap: 6px; }
#mRefs .tabbar .tab .tab-cnt {
  min-width: 19px; height: 19px; padding: 0 6px; border-radius: 999px;
  background: rgba(60, 60, 67, .08); color: var(--mut); font-size: 11px; font-weight: 700;
  display: inline-flex; align-items: center; justify-content: center;
}
#mRefs .tabbar .tab.on .tab-cnt { background: rgba(255, 255, 255, .28); color: #fff; }
#mRefs .refs-body { padding: 2px 20px 20px; }

/* 双栏工作台 */
.refs-grid { display: grid; grid-template-columns: 330px minmax(0, 1fr); gap: 16px; align-items: start; }

/* 左:快速添加卡片 */
.refs-form {
  border: 1px solid var(--line); border-radius: 16px;
  background: linear-gradient(180deg, #FDFEFF 0%, #F7FAFD 100%);
  box-shadow: 0 1px 2px rgba(15, 23, 42, .04);
  padding: 14px 14px 16px; display: flex; flex-direction: column; gap: 11px;
}
.rfs-head { display: flex; gap: 10px; align-items: center; padding-bottom: 10px; border-bottom: 1px dashed rgba(60, 60, 67, .12); }
.rfs-ico {
  width: 38px; height: 38px; flex: 0 0 38px; border-radius: 12px;
  display: inline-flex; align-items: center; justify-content: center; font-size: 18px;
  background: linear-gradient(180deg, rgba(77, 107, 254, .14), rgba(107,26,22, .10));
  border: 1px solid rgba(77, 107, 254, .16);
}
.rfs-t b { font-size: 14.5px; }
.rfs-t p { margin: 1px 0 0; line-height: 1.5; }
.rfs-field { display: flex; flex-direction: column; gap: 4px; }
.rfs-field label { font-size: 11.5px; font-weight: 700; color: #7a8797; letter-spacing: .2px; }
.rfs-field input {
  width: 100%; box-sizing: border-box; border: 1px solid var(--line); border-radius: 10px;
  background: #fff; padding: 8px 11px; font-size: 13.5px; color: var(--ink);
  transition: border-color .15s ease, box-shadow .15s ease;
}
.rfs-field input:focus { outline: none; border-color: var(--pri); box-shadow: 0 0 0 3px rgba(77, 107, 254, .12); }
.rfs-field input::placeholder { color: #bfaead; }
.rfs-row2 { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
.rfs-submit { width: 100%; justify-content: center; border-radius: 10px; padding: 10px 16px; margin-top: 2px; box-shadow: 0 6px 16px rgba(77, 107, 254, .22); }
.rfs-submit:hover { transform: translateY(-1px); box-shadow: 0 10px 22px rgba(77, 107, 254, .30); }

/* 右:档案列表 */
.refs-listbox { min-width: 0; border: 1px solid var(--line); border-radius: 16px; background: #fff; box-shadow: 0 1px 2px rgba(15, 23, 42, .04); overflow: hidden; }
.rlb-head {
  display: flex; align-items: center; gap: 7px; flex-wrap: wrap;
  padding: 11px 14px; border-bottom: 1px solid rgba(60, 60, 67, .07);
  background: linear-gradient(180deg, #FBFCFE, #fff);
}
.rlb-count { font-size: 17px; color: var(--pri-d); font-variant-numeric: tabular-nums; }
.rlb-search { margin-left: auto; min-width: 210px; }
.rlb-search input {
  width: 100%; box-sizing: border-box; border: 1px solid var(--line); border-radius: 999px;
  background: #fff; padding: 6px 14px; font-size: 12.5px; color: var(--ink);
  transition: border-color .15s ease, box-shadow .15s ease;
}
.rlb-search input:focus { outline: none; border-color: var(--pri); box-shadow: 0 0 0 3px rgba(77, 107, 254, .12); }
.rlb-search input::placeholder { color: #a9b1bd; }
.rlb-list { padding: 10px 12px 12px; max-height: min(56vh, 540px); }

/* 档案行(资料库 + 商品选用弹窗共用视觉) */
.ref-row {
  display: flex; align-items: center; gap: 10px;
  border: 1px solid var(--line); border-radius: 12px;
  padding: 9px 12px; background: #fff; flex-wrap: wrap;
  transition: border-color .14s ease, box-shadow .14s ease, background .14s ease;
}
.ref-row:hover { border-color: rgba(77, 107, 254, .45); box-shadow: 0 3px 10px rgba(77, 107, 254, .07); }
.ref-row .rr-main { flex: 1; min-width: 200px; display: flex; flex-wrap: wrap; align-items: center; gap: 2px 4px; }
.ref-row .rr-main b { font-size: 13.5px; margin-right: 4px; }
.ref-row .rr-main i, .ref-row .rr-main em, .ref-row .rr-main s {
  font-style: normal; color: var(--mut); font-size: 11.8px;
  margin: 0 2px; text-decoration: none;
  background: #f2f4f8; border-radius: 6px; padding: 1px 7px;
}
.ref-row .rr-main em, .ref-row .rr-main s { display: inline-block; margin-top: 1px; }
.ref-row .rr-main s { background: rgba(107,26,22, .07); color: #3B4FE0; max-width: 340px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ref-row .rr-sub {
  color: var(--mut); font-size: 11px; font-weight: 700; white-space: nowrap;
  background: rgba(77, 107, 254, .08); color: var(--pri-d);
  border-radius: 999px; padding: 2px 9px; margin-left: auto;
}
.ref-row .rr-sub + .btn { margin-left: 6px; }
.ref-row .ref-del { border-radius: 999px; }
.ref-row.pick { cursor: pointer; }
.ref-row.pick:hover { border-color: rgba(77, 107, 254, .55); background: rgba(77, 107, 254, .05); }
#mRefs .refs-listbox .agree-empty, #mRefs .rlb-list .agree-empty {
  color: var(--mut); text-align: center; padding: 40px 12px; font-size: 13px; line-height: 1.9;
}
#mRefs .rlb-list .agree-empty b { font-size: 26px; display: block; margin-bottom: 6px; opacity: .8; }

/* 焦点可达性 */
#mRefs button:focus-visible, #mRefs input:focus-visible { outline: 2px solid var(--pri); outline-offset: 1px; }

/* 窄屏:单栏堆叠 */
@media (max-width: 900px) {
  .refs-grid { grid-template-columns: 1fr; }
  .rlb-search { margin-left: 0; min-width: 100%; }
  #mRefs .refs-head-note { display: none; }
  #mRefs .tabbar .tab { padding: 8px 10px; font-size: 12.5px; }
  .rlb-list { max-height: 42vh; }
}
@media (prefers-reduced-motion: reduce) {
  #mRefs .tab, #mRefs .rfs-submit, .ref-row { transition: none; }
}



/* ============================================================
   v1.34.0 项目夹: 看板订单拖拽分组
   ============================================================ */
#cardGrid.has-folders { display: flex; flex-direction: column; gap: 14px; }
.folder-group .fg-cards { display: grid; grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); gap: 12px; }
.folder-group {
  border: 1px solid var(--line); border-radius: 16px; background: #FCFDFF;
  overflow: hidden; transition: border-color .15s ease, box-shadow .15s ease, background .15s ease;
}
.folder-group .fg-head {
  display: flex; align-items: center; gap: 8px; padding: 9px 12px;
  background: linear-gradient(180deg, #F8FBFF, #F2F7FD); border-bottom: 1px solid rgba(60,60,67,.07);
  cursor: default;
}
.folder-group .fg-ico { font-size: 14px; }
.folder-group .fg-name { font-weight: 700; font-size: 13.5px; color: var(--ink); cursor: pointer; }
.folder-group .fg-count { font-size: 11.5px; color: var(--pri-d); background: rgba(77, 107, 254,.09); border-radius: 999px; padding: 2px 9px; font-weight: 700; }
.folder-group .fg-tools { margin-left: auto; display: inline-flex; gap: 4px; }
.folder-group .fg-btn {
  border: 1px solid var(--line); background: #fff; border-radius: 8px; cursor: pointer;
  padding: 3px 8px; font-size: 12px; color: var(--mut); transition: all .14s ease;
}
.folder-group .fg-btn:hover { color: var(--pri-d); border-color: var(--pri); background: var(--pri-soft); }
.folder-group .fg-toggle {
  border: none; background: none; cursor: pointer; font-size: 12px; color: var(--mut); padding: 2px 4px; border-radius: 6px;
}
.folder-group .fg-toggle:hover { background: rgba(77, 107, 254,.08); color: var(--pri-d); }
.folder-group .fg-cards { padding: 12px; }
.folder-group .fg-cards.fg-plain { padding: 0; display: contents; }
.folder-group .fg-empty { padding: 14px 6px; text-align: center; }
.folder-group.collapsed .fg-cards { display: none; }
.folder-group.collapsed .fg-head { border-bottom: none; }
.folder-group.unassigned { background: #fff; border-style: dashed; }
.folder-group.unassigned .fg-head { background: linear-gradient(180deg, #FBFCFE, #F7F9FC); }
.folder-group.drop-hover, .order-card.drop-hover {
  border-color: var(--pri) !important; box-shadow: 0 0 0 3px rgba(77, 107, 254,.14) !important; background: rgba(77, 107, 254,.035) !important;
}
.order-card.dragging { opacity: .45; transform: scale(.985); }
body.folder-dragging .order-card { cursor: grab; }
body.folder-dragging .folder-group .fg-cards { min-height: 46px; }
.fg-name-input {
  border: 1px solid var(--pri); border-radius: 8px; padding: 3px 8px; font-size: 13.5px; font-weight: 700;
  color: var(--ink); outline: none; box-shadow: 0 0 0 3px rgba(77, 107, 254,.12); max-width: 220px;
}
.oc-move {
  margin-left: auto; border: 1px solid var(--line); background: #fff; border-radius: 8px;
  cursor: pointer; padding: 2px 7px; font-size: 12.5px; line-height: 1.5; transition: all .14s ease;
}
.oc-move:hover { border-color: var(--pri); background: var(--pri-soft); }
.oc-foot { display: flex; align-items: center; gap: 8px; }
.oc-foot > span:nth-child(2) { margin-left: 0; }
/* 移入项目夹弹窗 */
.mf-order { margin-bottom: 8px; }
.mf-list { display: flex; flex-direction: column; gap: 6px; max-height: 42vh; overflow-y: auto; margin-bottom: 10px; }
.mf-item {
  display: flex; align-items: center; gap: 8px; text-align: left; cursor: pointer;
  border: 1px solid var(--line); border-radius: 10px; background: #fff; padding: 9px 11px; font-size: 13px; color: var(--ink);
  transition: all .14s ease;
}
.mf-item em { margin-left: auto; font-style: normal; color: var(--mut); font-size: 11.5px; }
.mf-item:hover { border-color: var(--pri); background: var(--pri-soft); }
.mf-item.on { border-color: var(--pri); background: var(--pri-soft); font-weight: 700; }
.mf-item.out { color: var(--mut); border-style: dashed; }
.mf-new { display: flex; gap: 8px; align-items: center; }
.mf-new input {
  flex: 1; min-width: 0; border: 1px solid var(--line); border-radius: 10px; padding: 8px 11px; font-size: 13px;
}
.mf-new input:focus { outline: none; border-color: var(--pri); box-shadow: 0 0 0 3px rgba(77, 107, 254,.12); }
@media (max-width: 720px) {
  .folder-group .fg-cards { padding: 8px; }
  .folder-group .fg-name-input { max-width: 140px; }
  .mf-new { flex-direction: column; align-items: stretch; }
}


/* v1.35.0 业务询盘步骤(s0)选择区 */
.inq-pick { margin: 4px 0 12px; }
.inq-pick .agree-item { display: flex; align-items: center; gap: 9px; }
.inq-pick .agree-item .ai-main { flex: 1; min-width: 0; }
.inq-pick .agree-item .ai-sub { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.inq-pick-search {
  width: 100%; box-sizing: border-box; border: 1px solid var(--line); border-radius: 10px;
  padding: 8px 11px; font-size: 13px; margin-bottom: 8px; background: #fff; color: var(--ink);
}
.inq-pick-search:focus { outline: none; border-color: var(--pri); box-shadow: 0 0 0 3px rgba(77, 107, 254,.12); }
#mInqPick .mf-item span { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* ============================================================
   v1.36 询盘「贸易背景要素 + 问答板」: 业务/银行/客户三方依据
   ============================================================ */
.qa-head { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin: 6px 0 8px; }
.qa-head b { font-size: 14px; }
.qa-spacer { margin-left: auto; }

/* 贸易背景要素卡 */
.inq-trade { border: 1px solid var(--line); border-radius: 12px; background: linear-gradient(180deg,#FCFDFF,#F7FAFD); padding: 10px 12px 12px; margin: 6px 0 4px; }
.inq-trade .it-head { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; padding-bottom: 8px; margin-bottom: 8px; border-bottom: 1px dashed rgba(60,60,67,.12); }
.inq-trade .it-head b { font-size: 13.5px; }
.inq-trade .it-conf { margin-left: auto; }
.trade-ok { color: var(--ok); font-size: 12px; font-weight: 700; background: rgba(52,199,89,.10); border-radius: 999px; padding: 2px 10px; }
.trade-wait { color: #B25E00; font-size: 12px; font-weight: 700; background: #FFF6E8; border-radius: 999px; padding: 2px 10px; }
.inq-trade .it-grid { grid-template-columns: repeat(4, minmax(0,1fr)); gap: 8px 10px; }
.inq-trade .it-grid .f-cell label { font-size: 11px; }
.inq-trade .it-grid input, .inq-trade .it-grid select { font-size: 12.5px; padding: 6px 9px; }
.inq-trade .it-foot { display: flex; align-items: center; gap: 10px; margin-top: 9px; }

/* 问答板 */
.qa-board { border: 1px solid var(--line); border-radius: 12px; background: #fff; padding: 10px 12px 12px; }
.qa-board .qa-thread { max-height: 40vh; }
.qa-badge { display: inline-block; font-size: 10.5px; font-weight: 700; border-radius: 999px; padding: 1px 8px; margin-bottom: 3px; }
.qa-badge.int { background: #FFF3D6; color: #9A6400; }
.qa-badge.quote { background: rgba(77, 107, 254,.12); color: var(--pri-d); }
.qa-badge.ok { background: rgba(52,199,89,.14); color: #1B7F3B; }
.qa-msg.internal { background: #FFFBF0 !important; border: 1px dashed #EBD9A8; }
.qa-msg.confirmed { border: 1px solid rgba(52,199,89,.45); }
.qa-txt { white-space: pre-wrap; word-break: break-word; }
.qa-quote { margin-top: 6px; border-top: 1px dashed rgba(60,60,67,.15); padding-top: 5px; }
.qa-quote .qq-row { display: flex; gap: 8px; font-size: 12px; line-height: 1.8; }
.qa-quote .qq-row span { color: var(--mut); min-width: 62px; }
.qa-quote .qq-row b { font-weight: 700; }
.qa-compose { flex-direction: column; align-items: stretch; margin-top: 10px; }
.qa-compose .qa-text { width: 100%; box-sizing: border-box; border: 1px solid var(--line); border-radius: 10px; padding: 8px 11px; font-size: 13px; min-height: 46px; resize: vertical; font-family: inherit; }
.qa-compose .qa-text:focus { outline: none; border-color: var(--pri); box-shadow: 0 0 0 3px rgba(77, 107, 254,.12); }
.qa-tools { display: flex; align-items: center; gap: 8px; margin-top: 7px; flex-wrap: wrap; }
.qa-int-lab { font-size: 12px; color: var(--mut); display: inline-flex; align-items: center; gap: 4px; cursor: pointer; user-select: none; }
.qa-int-lab input { accent-color: #F0A500; }
.btn.ok { background: #34C759; color: #fff; border-color: #34C759; }
.btn.ok:hover { background: #2FB350; }
.qa-ok-bar { font-size: 12.5px; color: #1B7F3B; background: rgba(52,199,89,.10); border: 1px solid rgba(52,199,89,.28); border-radius: 10px; padding: 7px 11px; margin-bottom: 8px; }
.qa-wait-bar { font-size: 12.5px; color: #9A6400; background: #FFF8E9; border: 1px solid #F1DFB4; border-radius: 10px; padding: 7px 11px; margin-bottom: 8px; }

/* 客户侧 要素/报价摘要 */
.cl-trade { margin-top: 8px; border: 1px solid var(--line); border-radius: 10px; background: #fff; padding: 8px 11px; }
.cl-trade .cl-row { display: flex; gap: 10px; font-size: 12.5px; line-height: 1.9; }
.cl-trade .cl-row b { min-width: 68px; color: var(--mut); font-weight: 700; }
@media (max-width: 900px) { .inq-trade .it-grid { grid-template-columns: repeat(2, minmax(0,1fr)); } }
@media (max-width: 720px) { .inq-trade .it-grid { grid-template-columns: 1fr; } .qa-tools .btn { flex: 1 1 auto; } }

/* ============================================================
   v1.37.0 Spider-fire 品牌 + 草绿主题(登录页 / 顶栏 / 细节)
   ============================================================ */
#gatePane .logo, .brand .logo svg { background: transparent; box-shadow: none; }
.brand-txt strong { color: #2C3BC4; }
.brand-txt small { color: #7a6461; }
.app-foot { color: #7a6461; }
::selection { background: rgba(176,58,48, .30); }
.oa-wx { border-color: rgba(7, 193, 96, .35) !important; }

/* v1.39.0 导航分组标题(业务/财务/档案/分析/系统) */
.s-cap {
  font-size: 10px; font-weight: 700; letter-spacing: 1.6px; color: #a9b0bd;
  padding: 11px 12px 4px; text-transform: uppercase; user-select: none;
}
.side-nav .s-cap:first-child { padding-top: 4px; }
.side-nav .s-cap + .s-item { margin-top: 1px; }
.np-cap {
  font-size: 10px; font-weight: 700; letter-spacing: 1.6px; color: #a9b0bd;
  padding: 8px 4px 2px; text-transform: uppercase; user-select: none;
}
.np-list .np-cap:first-of-type { padding-top: 4px; }


/* ===== v1.42.0 登录方式切换 / 账号安全 / 邀请码 ===== */
.li-tabs { display: flex; gap: 6px; margin: 12px 0 10px; padding: 4px; background: #f6edea; border-radius: 12px; }
.li-tab { flex: 1; padding: 8px 6px; border: 0; border-radius: 9px; background: transparent; color: #6b4a45; font-size: 13px; cursor: pointer; }
.li-tab.on { background: #fff; color: #4D6BFE; font-weight: 700; box-shadow: 0 2px 8px rgba(77, 107, 254,.12); }
.f-inline { display: flex; gap: 8px; align-items: center; }
.f-inline input { flex: 1; min-width: 0; }
.f-inline .btn { white-space: nowrap; }
.sec-card { padding: 12px; margin-bottom: 12px; border: 1px solid #f0d9d5; border-radius: 12px; background: #fffaf9; }
.sec-t { margin-bottom: 6px; color: #4a3733; font-weight: 700; }
.sec-row { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; margin-top: 8px; }
.sec-row input, .sec-row select { flex: 1 1 140px; min-width: 0; }
.sec-row input[type=number] { flex: 0 0 90px; }
.invite-list { margin-top: 8px; max-height: 220px; overflow: auto; }
.iv-row { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; padding: 8px 10px; margin-bottom: 6px; border: 1px solid #f0d9d5; border-radius: 10px; background: #fff; }
.iv-code { font-family: ui-monospace, Menlo, Consolas, monospace; font-weight: 700; letter-spacing: .5px; }
.iv-meta { flex: 1; min-width: 180px; font-size: 12px; color: #8a6f6a; }
.iv-state { padding: 2px 8px; border-radius: 20px; background: #f4eee9; color: #6b4a45; font-size: 12px; }
.iv-row.ok .iv-state { background: #e8f6e3; color: #2f6b12; }
.iv-row.warn .iv-state { background: #fff6dd; color: #8a6100; }
.iv-row.bad .iv-state { background: #fdeaea; color: #4D6BFE; }
.usr-phone { margin-left: 8px; color: #8a6f6a; font-size: 12px; }
.li-foot { margin-top: 12px; color: var(--mut); line-height: 1.7; }

/* ============================================================
   v1.43.0 订单私密锁 UI(打开密码 / 报价二次密码 / 协同 / 转让密码权)
   ============================================================ */
:root {
  --lk: #3B4FE0;                /* 私密锁主色(沿用品牌枣红) */
  --lk-soft: #EEF3FF;
  --lk-line: rgba(77, 107, 254, .18);
  --money: #b07d00;             /* 报价/金额锁(金铜色) */
  --money-soft: #fff7e6;
  --money-line: rgba(176, 125, 0, .26);
}

/* ---------- 订单卡片角标 ---------- */
.oc-no .oc-lock,
.oc-no .oc-mem { display: inline-flex; align-items: center; gap: 2px; vertical-align: middle; }
.oc-lock {
  margin-left: 6px; padding: 1px 6px; border-radius: 20px; cursor: help;
  background: var(--lk-soft); border: 1px solid var(--lk-line);
  color: var(--lk); font-size: 11px; line-height: 1.5; font-weight: 700;
}
.oc-lock.price { background: var(--money-soft); border-color: var(--money-line); color: var(--money); }
.oc-mem {
  margin-left: 6px; padding: 1px 7px; border-radius: 20px; cursor: help;
  background: #eef3fb; border: 1px solid rgba(48, 90, 160, .22); color: #2c5aa0;
  font-size: 11px; line-height: 1.5; font-weight: 700;
}
.card.order-card[data-state] .oc-lock:not(.price) { box-shadow: none; }
.card.order-card.sealed .oc-rail { background: repeating-linear-gradient(135deg, var(--lk) 0 6px, #f0d9d5 6px 12px); }
.oc-sealed {
  display: inline-block; padding: 1px 8px; border-radius: 8px;
  background: var(--lk-soft); border: 1px dashed var(--lk-line);
  color: var(--lk); font-size: 12px; font-weight: 700; letter-spacing: .3px;
}

/* ---------- 详情页:报价加密提示条 ---------- */
.sec-bar {
  display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
  margin: 10px 0; padding: 10px 14px; border-radius: 12px;
  background: var(--money-soft); border: 1px solid var(--money-line);
  color: #6b4a00; font-size: 13px; line-height: 1.6;
}
.sec-bar b { color: #8a6100; }
.sec-bar .btn.sm { padding: 4px 10px; font-size: 12.5px; }

/* ---------- 表单:被报价密码锁住的字段 ---------- */
.lk-tag {
  display: inline-block; margin-left: 4px; padding: 0 6px; border-radius: 20px;
  background: var(--money-soft); border: 1px solid var(--money-line);
  color: var(--money); font-size: 11px; font-weight: 700; white-space: nowrap;
}
input.lk-inp, .lk-inp {
  background: repeating-linear-gradient(135deg, #fff8ec 0 8px, #fdf1df 8px 16px) !important;
  border-color: var(--money-line) !important;
  color: #9a7a20 !important; font-style: italic; cursor: not-allowed;
}
input.lk-inp::placeholder { color: #b58f2a; opacity: 1; }

/* ---------- 新建订单:私密与协同区 ---------- */
.sec-new {
  margin: 12px 0 4px; padding: 12px 14px; border-radius: 12px;
  background: var(--lk-soft); border: 1px solid var(--lk-line);
}
.sec-new-t { margin-bottom: 10px; color: #4a3733; font-size: 13.5px; font-weight: 700; }
.sec-new-t .muted { font-weight: 400; }
.sec-new .f-row2 { margin-bottom: 8px; }
.sec-new select[multiple] { min-height: 74px; padding: 6px; border-radius: 10px; }
.sec-new .muted.sm { color: #8a6f6a; }

/* ---------- 安全管理弹窗 ---------- */
.sm-card.modal-card { width: min(720px, 94vw); }
.sec-badges { display: flex; gap: 8px; flex-wrap: wrap; margin-bottom: 12px; }
.sec-badges .pill { font-size: 12px; padding: 3px 10px; }
.sec-grp {
  margin-bottom: 12px; padding: 12px 14px; border-radius: 12px;
  background: #fffaf9; border: 1px solid #f0d9d5;
}
.sec-grp-t { margin-bottom: 8px; color: #4a3733; font-size: 13.5px; font-weight: 700; }
.sec-grp .f-row2 { margin-bottom: 6px; }
.sec-btns { display: flex; gap: 8px; flex-wrap: wrap; margin-top: 8px; }
.sec-btns .btn.sm { padding: 5px 12px; font-size: 12.5px; }
.sec-grp .muted.sm { margin-top: 6px; color: #8a6f6a; line-height: 1.7; }
.sec-note {
  margin: 6px 0; padding: 8px 10px; border-radius: 9px;
  background: #fff5e3; border: 1px solid rgba(255, 159, 10, .28);
  color: #8a6100; font-size: 12.5px; line-height: 1.7;
}
.sec-err {
  margin-top: 10px; padding: 9px 12px; border-radius: 10px;
  background: var(--bad-soft); border: 1px solid rgba(255, 59, 48, .26);
  color: var(--bad); font-size: 12.5px; line-height: 1.7; word-break: break-all;
}
.danger-zone { background: #fff6f5; border-color: rgba(255, 59, 48, .22); }
.danger-zone .sec-grp-t { color: #4D6BFE; }

/* ---------- 协作者 chips ---------- */
.sec-mems { display: flex; gap: 8px; flex-wrap: wrap; }
.mem-chip {
  display: inline-flex; align-items: center; gap: 6px;
  padding: 4px 8px 4px 10px; border-radius: 20px;
  background: #eef3fb; border: 1px solid rgba(48, 90, 160, .22);
  color: #1f4c8f; font-size: 12.5px; font-weight: 600;
}
.mem-chip small { color: #6b83a8; font-size: 11px; font-weight: 400; }
.mem-x {
  width: 18px; height: 18px; padding: 0; border: 0; border-radius: 50%;
  background: rgba(48, 90, 160, .12); color: #2c5aa0; cursor: pointer;
  font-size: 11px; line-height: 18px; text-align: center;
}
.mem-x:hover { background: var(--bad); color: #fff; }

/* ---------- 解锁弹窗 ---------- */
.sm-card .modal-body { padding-top: 4px; }
.uk-tip {
  margin-bottom: 10px; padding: 10px 12px; border-radius: 10px;
  background: var(--lk-soft); border: 1px solid var(--lk-line);
  color: #4a3733; font-size: 13px; line-height: 1.8;
}
.uk-tip b { color: var(--lk); }
.uk-tip .muted.sm { color: #8a6f6a; }
.uk-err {
  margin-top: 8px; padding: 8px 11px; border-radius: 9px;
  background: var(--bad-soft); border: 1px solid rgba(255, 59, 48, .26);
  color: var(--bad); font-size: 12.5px; line-height: 1.6;
}
#mUnlock .sm-card.modal-card { width: min(440px, 92vw); }
#mUnlock .f-row input { width: 100%; }

/* ---------- 详情头部安全按钮 ---------- */
#btnOrderSec { border-color: var(--lk-line); color: var(--lk); background: #fff; }
#btnOrderSec:hover { background: var(--lk-soft); }

/* ---------- 移动端 ---------- */
@media (max-width: 720px) {
  .sec-btns .btn.sm { flex: 1 1 auto; }
  .sec-bar { font-size: 12.5px; }
  .sec-bar .btn.sm { width: 100%; }
  .sm-card.modal-card { width: 96vw; }
}



/* ============================================================
   v1.44.0 登录页重做 · macOS / iOS 玻璃质感 (Liquid Glass)
   后置覆盖历史所有 login 样式段, 统一到居中玻璃卡片布局
   ============================================================ */
#loginView {
  position: relative; overflow: hidden; min-height: 100vh; padding: 0; display: block;
  background:
    radial-gradient(1000px 600px at 8% 4%, rgba(194, 90, 78, .30), transparent 58%),
    radial-gradient(880px 560px at 96% 18%, rgba(255, 159, 10, .22), transparent 60%),
    radial-gradient(940px 640px at 62% 112%, rgba(52, 199, 89, .15), transparent 62%),
    linear-gradient(180deg, #fdf4f2 0%, #fbf7f5 46%, #f5f5fb 100%);
}
/* 漂浮光斑(替代旧波纹环) */
#loginView .lw i {
  position: absolute; display: block; border-radius: 50%; border: 0; opacity: .55;
  filter: blur(46px); animation: liFloat 14s ease-in-out infinite;
}
#loginView .lw .r1 { width: 260px; height: 260px; left: -70px; top: 12%; background: rgba(176, 58, 48, .34); }
#loginView .lw .r2 { width: 200px; height: 200px; right: -60px; top: 24%; background: rgba(255, 159, 10, .26); animation-delay: 2.2s; }
#loginView .lw .r3 { width: 240px; height: 240px; left: 18%; bottom: -80px; background: rgba(52, 199, 89, .20); animation-delay: 4.4s; }
#loginView .lw .r4 { width: 180px; height: 180px; right: 16%; bottom: -50px; background: rgba(10, 132, 255, .18); animation-delay: 6.6s; }
@keyframes liFloat {
  0%, 100% { transform: translate(0, 0) scale(1); opacity: .45; }
  33%  { transform: translate(26px, -22px) scale(1.10); opacity: .68; }
  66%  { transform: translate(-18px, 16px) scale(.94); opacity: .40; }
}

#loginView .li-wrap {
  position: relative; z-index: 2; max-width: 528px; margin: 0 auto;
  min-height: 100vh; min-height: 100dvh; padding: 20px 18px 32px;
  display: flex; flex-direction: column; justify-content: center;
}

/* 顶部品牌条: 玻璃 */
#loginView .lp-nav {
  display: flex; align-items: center; justify-content: space-between; gap: 10px;
  padding: 9px 15px; border-radius: 18px;
  background: rgba(255, 255, 255, .58); border: 1px solid rgba(255, 255, 255, .75);
  -webkit-backdrop-filter: blur(22px) saturate(180%); backdrop-filter: blur(22px) saturate(180%);
  box-shadow: 0 6px 20px rgba(58, 20, 16, .08);
}
#loginView .lp-brand { display: flex; align-items: center; gap: 9px; font-size: 14px; font-weight: 700; }
#loginView .lp-brand b { letter-spacing: -.2px; }
#loginView .lp-brand em { font-style: normal; font-size: 11px; color: var(--mut); font-weight: 500; }
#loginView .lp-ver { font-size: 11px; color: var(--mut); }

/* hero 文案居中 */
#loginView .li-hero { text-align: center; margin: 30px 0 24px; }
#loginView .li-hero h2 {
  font-size: 31px; line-height: 1.26; letter-spacing: -.7px; margin: 0 0 10px; color: #1d1b1a;
}
#loginView .li-hero h2 .grad {
  background: linear-gradient(96deg, #7C93FF 0%, #3B4FE0 100%);
  -webkit-background-clip: text; background-clip: text; color: transparent;
}
#loginView .lp-sub { max-width: 440px; margin: 0 auto; font-size: 14px; color: #6f6563; line-height: 1.75; }
#loginView .lp-feats { display: flex; flex-direction: row; flex-wrap: wrap; justify-content: center; gap: 7px; margin-top: 14px; }
#loginView .lp-feats span {
  display: inline-flex; align-items: center; gap: 5px;
  padding: 5px 12px; border-radius: 999px; font-size: 12px; font-weight: 600; color: #4a3f3d;
  background: rgba(255, 255, 255, .60); border: 1px solid rgba(255, 255, 255, .8);
  -webkit-backdrop-filter: blur(14px); backdrop-filter: blur(14px);
  box-shadow: 0 3px 10px rgba(58, 20, 16, .06);
}
#loginView .lp-feats span::before { content: none; }
#loginView .lp-art { display: none; }

/* ---------- 玻璃主卡片 ---------- */
#loginView .login-card {
  position: relative; width: 100%; max-width: 424px; margin: 0 auto; justify-self: auto;
  padding: 28px 30px 20px; border-radius: 30px;
  background: linear-gradient(180deg, rgba(255, 255, 255, .80), rgba(255, 255, 255, .62));
  -webkit-backdrop-filter: blur(30px) saturate(185%); backdrop-filter: blur(30px) saturate(185%);
  border: 1px solid rgba(255, 255, 255, .88);
  box-shadow:
    0 34px 84px rgba(58, 20, 16, .16),
    0 3px 12px rgba(58, 20, 16, .06),
    inset 0 1px 0 rgba(255, 255, 255, .95);
}

/* 卡片头: 头像 + 标题 */
#loginView .li-head { text-align: center; margin-bottom: 20px; }
#loginView .li-avatar {
  display: grid; place-items: center; width: 62px; height: 62px; margin: 0 auto 12px;
  border-radius: 19px; font-size: 31px;
  background: linear-gradient(148deg, #7C93FF 0%, #3B4FE0 100%);
  box-shadow: 0 12px 26px rgba(77, 107, 254, .32), inset 0 1px 0 rgba(255, 255, 255, .34);
}
#loginView .li-head strong { display: block; font-size: 21px; font-weight: 700; letter-spacing: -.35px; color: #1d1b1a; }
#loginView .li-head small { display: block; margin-top: 4px; font-size: 12.5px; color: #8a7d7a; }

/* 分段控件 (iOS segmented control) */
#loginView .li-tabs {
  display: grid; grid-template-columns: 1fr 1fr; gap: 0;
  padding: 3px; margin: 0 0 18px; border-radius: 12px;
  background: rgba(120, 120, 128, .12);
  box-shadow: inset 0 0 0 1px rgba(120, 120, 128, .07);
}
#loginView .li-tab {
  padding: 8px 6px; border: 0; border-radius: 9px; background: transparent;
  font-family: inherit; font-size: 13.5px; font-weight: 600; color: #5b4f4c; cursor: pointer;
  transition: background .18s ease, color .18s ease, box-shadow .18s ease;
}
#loginView .li-tab:hover { color: #4D6BFE; }
#loginView .li-tab.on {
  background: #fff; color: #4D6BFE; font-weight: 700;
  box-shadow: 0 3px 9px rgba(0, 0, 0, .11), 0 1px 1px rgba(0, 0, 0, .04);
}

/* ---------- 字段 ---------- */
#loginView .f-row { margin-bottom: 13px; }
#loginView .f-row > label {
  display: block; margin: 0 0 6px 5px; font-size: 12px; font-weight: 600;
  color: #7d6a66; letter-spacing: .2px;
}
#loginView .f-row input {
  width: 100%; box-sizing: border-box; border-radius: 14px; padding: 12px 14px; font-size: 15px;
  color: #1d1b1a; background: rgba(255, 255, 255, .74);
  border: 1px solid rgba(120, 120, 128, .17);
  box-shadow: inset 0 1px 2px rgba(0, 0, 0, .035);
  transition: border-color .16s ease, box-shadow .16s ease, background .16s ease;
}
#loginView .f-row input:focus {
  outline: none; background: #fff; border-color: rgba(77, 107, 254, .48);
  box-shadow: 0 0 0 4px rgba(77, 107, 254, .13), inset 0 1px 2px rgba(0, 0, 0, .03);
}
#loginView .f-row input::placeholder { color: #A8B2C8; }

/* 密码框 + 眼睛 */
#loginView .li-inp { position: relative; }
#loginView .li-inp input { padding-right: 46px; }
#loginView .li-eye {
  position: absolute; right: 5px; top: 50%; transform: translateY(-50%);
  width: 34px; height: 34px; border: 0; border-radius: 10px; background: transparent;
  font-size: 15px; line-height: 1; cursor: pointer; opacity: .5;
  transition: opacity .15s ease, background .15s ease;
}
#loginView .li-eye:hover { opacity: 1; background: rgba(77, 107, 254, .09); }

/* 验证码行: 输入框自适应 + 按钮不被挤出 */
#loginView .f-inline { display: flex; gap: 8px; align-items: center; }
#loginView .f-inline input { flex: 1 1 auto; min-width: 0; width: auto; }
#loginView .f-inline .btn { flex: 0 0 auto; white-space: nowrap; border-radius: 12px; padding: 11px 14px; }

/* 错误提示: 玻璃红 */
#loginView .login-err {
  border-radius: 12px; padding: 8px 11px; margin-bottom: 12px; font-size: 12.5px;
  background: rgba(255, 59, 48, .10); color: #c0392b; border: 1px solid rgba(255, 59, 48, .20);
}

/* 主按钮: 胶囊渐变 */
#loginView .login-btn {
  width: 100%; margin-top: 4px; border: 0; border-radius: 14px; padding: 13px;
  font-size: 15.5px; font-weight: 600; color: #fff; cursor: pointer;
  background: linear-gradient(180deg, #7C93FF 0%, #4D6BFE 100%);
  box-shadow: 0 10px 24px rgba(77, 107, 254, .30), inset 0 1px 0 rgba(255, 255, 255, .26);
  transition: transform .16s ease, box-shadow .16s ease;
}
#loginView .login-btn:hover { transform: translateY(-1px); box-shadow: 0 14px 30px rgba(77, 107, 254, .38); }
#loginView .login-btn:active { transform: scale(.985); }
#loginView .login-btn:disabled { opacity: .55; cursor: not-allowed; transform: none; }

/* 第三方登录 */
#loginView .oauth-wrap { margin-top: 16px; }
#loginView .oauth-div { display: flex; align-items: center; gap: 10px; color: #a2989a; font-size: 11.5px; margin-bottom: 10px; }
#loginView .oauth-div::before, #loginView .oauth-div::after { content: ""; flex: 1; height: 1px; background: rgba(120, 120, 128, .16); }
#loginView .oauth-row { display: flex; gap: 8px; }
#loginView .oauth-btn {
  flex: 1; border-radius: 13px; padding: 10px 8px; font-size: 13px; font-weight: 600; cursor: pointer;
  background: rgba(255, 255, 255, .72); border: 1px solid rgba(120, 120, 128, .16); color: #3d3735;
  -webkit-backdrop-filter: blur(12px); backdrop-filter: blur(12px);
}
#loginView .oauth-btn:hover { transform: translateY(-1px); box-shadow: 0 7px 16px rgba(58, 20, 16, .10); }
#loginView .oauth-banner { border-radius: 12px; font-size: 12.5px; margin-bottom: 12px; }

/* 脚注 / 版本 */
#loginView .li-foot { margin-top: 14px; text-align: center; font-size: 12px; color: #8a7d7a; line-height: 1.7; }
#loginView .li-foot a { color: #4D6BFE; font-weight: 600; text-decoration: none; }
#loginView .li-note { margin-top: 14px; text-align: center; font-size: 11.5px; color: #8a7d7a; line-height: 1.7; }
#loginView .login-ver {
  margin-top: 16px; padding-top: 12px; text-align: center; font-size: 11px; color: #a2989a;
  border-top: 1px solid rgba(120, 120, 128, .12);
}
#loginView .login-ver span { color: #4D6BFE; margin-right: 2px; }
#loginView .login-brand { display: none; }

/* 响应式 */
@media (max-width: 560px) {
  #loginView .li-wrap { padding: 14px 12px 22px; }
  #loginView .li-hero { margin: 22px 0 18px; }
  #loginView .li-hero h2 { font-size: 25px; }
  #loginView .login-card { padding: 24px 20px 18px; border-radius: 26px; }
  #loginView .li-avatar { width: 54px; height: 54px; font-size: 27px; border-radius: 17px; }
  #loginView .lp-ver { display: none; }
  #loginView .lp-brand em { display: none; }
}
@media (prefers-reduced-motion: reduce) {
  #loginView .lw i { animation: none; }
  #loginView .login-btn, #loginView .oauth-btn, #loginView .li-tab { transition: none; }
}

/* ============================================================
   v1.47.0 登录页 · PC 左右分栏(Hero 广告语 + 玻璃表单)
   后置覆盖 v1.44 居中单列布局
   ============================================================ */
#loginView .li-wrap { max-width: 1240px; padding: 22px 36px 32px; }
#loginView .li-grid {
  flex: 1 1 auto; min-height: 0; display: grid; align-items: center;
  grid-template-columns: minmax(0, 1fr) 428px; gap: 52px;
}

/* ---------- 左栏: 品牌主张 / 广告语 / 业务链路 ---------- */
#loginView .li-side { margin: 0; text-align: left; min-width: 0; }
#loginView .lp-badge {
  display: inline-flex; align-items: center; gap: 7px; margin-bottom: 18px;
  padding: 6px 14px; border-radius: 999px; font-size: 12.5px; font-weight: 700; color: #4D6BFE;
  background: rgba(255, 255, 255, .62); border: 1px solid rgba(255, 255, 255, .86);
  -webkit-backdrop-filter: blur(14px) saturate(180%); backdrop-filter: blur(14px) saturate(180%);
  box-shadow: 0 4px 14px rgba(58, 20, 16, .07);
}
#loginView .lp-badge i {
  width: 7px; height: 7px; border-radius: 50%; display: block;
  background: linear-gradient(180deg, #d25548 0%, #4D6BFE 100%);
  box-shadow: 0 0 0 3px rgba(176, 58, 48, .16);
}
#loginView .li-side .lp-title {
  margin: 0 0 16px; font-size: 46px; line-height: 1.16; letter-spacing: -1.3px; color: #231e1d;
}
#loginView .li-side .lp-title .grad {
  background: linear-gradient(96deg, #7C93FF 0%, #3B4FE0 100%);
  -webkit-background-clip: text; background-clip: text; color: transparent;
}
#loginView .li-side .lp-slogan {
  margin: 0 0 12px; font-size: 18px; font-weight: 600; letter-spacing: -.2px; color: #4a3f3d;
}
#loginView .li-side .lp-sub { max-width: 580px; margin: 0; font-size: 14px; line-height: 1.9; color: #766b69; }

/* 业务链路条 */
#loginView .lp-chain { display: flex; flex-wrap: wrap; gap: 10px; margin: 22px 0 0; }
#loginView .lp-chain span {
  position: relative; display: inline-flex; align-items: center;
  padding: 7px 13px; border-radius: 12px; font-size: 12.5px; font-weight: 600; color: #4a3f3d;
  background: rgba(255, 255, 255, .60); border: 1px solid rgba(255, 255, 255, .82);
  -webkit-backdrop-filter: blur(14px); backdrop-filter: blur(14px);
  box-shadow: 0 3px 10px rgba(58, 20, 16, .06);
}
#loginView .lp-chain span:not(:last-child) { margin-right: 12px; }
#loginView .lp-chain span:not(:last-child)::after {
  content: "\2192"; position: absolute; right: -15px; top: 50%; transform: translateY(-50%);
  font-size: 12px; color: #b79a96; font-weight: 500;
}

/* 三条业务卖点 */
#loginView .lp-points { list-style: none; margin: 22px 0 0; padding: 0; display: grid; gap: 10px; }
#loginView .lp-points li {
  display: grid; grid-template-columns: auto minmax(0, 1fr); gap: 12px; align-items: baseline;
  padding: 11px 15px; border-radius: 16px;
  background: rgba(255, 255, 255, .52); border: 1px solid rgba(255, 255, 255, .8);
  -webkit-backdrop-filter: blur(16px) saturate(180%); backdrop-filter: blur(16px) saturate(180%);
  box-shadow: 0 5px 16px rgba(58, 20, 16, .06);
}
#loginView .lp-points b { font-size: 13.5px; font-weight: 700; color: #231e1d; white-space: nowrap; }
#loginView .lp-points span { font-size: 12.5px; line-height: 1.72; color: #7a6e6c; }

/* 信任条 */
#loginView .lp-trust { display: flex; flex-wrap: wrap; gap: 18px; margin-top: 20px; font-size: 12px; color: #8a7d7a; }
#loginView .lp-trust span { display: inline-flex; align-items: center; gap: 6px; }
#loginView .lp-trust span::before { content: "\2714"; font-size: 11px; color: #2f9e5e; }

/* ---------- 右栏: 表单 ---------- */
#loginView .li-main { min-width: 0; display: flex; justify-content: center; }
#loginView .li-main .login-card { width: 100%; max-width: 428px; margin: 0; padding: 30px 32px 22px; }

/* ---------- 响应式 ---------- */
@media (max-width: 1180px) {
  #loginView .li-wrap { max-width: 1000px; padding: 20px 26px 30px; }
  #loginView .li-grid { grid-template-columns: minmax(0, 1fr) 400px; gap: 34px; }
  #loginView .li-side .lp-title { font-size: 38px; letter-spacing: -1px; }
  #loginView .li-side .lp-slogan { font-size: 16.5px; }
}
/* <= 980px: 上下堆叠, 左栏居中, 形态回到 v1.44 单列 */
@media (max-width: 980px) {
  #loginView .li-wrap { max-width: 528px; padding: 18px 16px 30px; justify-content: flex-start; }
  /* 移动端: 表单优先(卡片在上, 品牌故事在下), 避免长文案把登录框压到第二屏 */
  #loginView .li-grid { display: grid; grid-template-columns: minmax(0, 1fr); gap: 26px; align-items: start; }
  #loginView .li-side { order: 2; margin: 0; text-align: center; }
  #loginView .lp-badge { margin-bottom: 14px; }
  #loginView .li-side .lp-sub { max-width: none; }
  #loginView .li-main { order: 1; }
  #loginView .lp-chain { justify-content: center; }
  #loginView .lp-points { text-align: left; }
  #loginView .lp-trust { justify-content: center; }
  #loginView .li-main .login-card { max-width: 424px; margin: 0 auto; }
  #loginView .li-side .lp-title { font-size: 32px; letter-spacing: -.6px; }
}
@media (max-width: 560px) {
  #loginView .li-side .lp-title { font-size: 27px; }
  #loginView .li-side .lp-slogan { font-size: 15px; }
  #loginView .li-side .lp-sub { font-size: 13px; line-height: 1.8; }
  #loginView .lp-trust { display: none; }
  #loginView .lp-points li { grid-template-columns: minmax(0, 1fr); gap: 4px; }
  #loginView .li-main .login-card { padding: 24px 20px 18px; border-radius: 26px; }
}
/* 矮屏压缩, 保证 1366×768 也能一屏放下 */
@media (min-width: 981px) and (max-height: 760px) {
  #loginView .li-side .lp-title { font-size: 36px; margin-bottom: 12px; }
  #loginView .li-side .lp-slogan { font-size: 16px; margin-bottom: 8px; }
  #loginView .lp-chain { margin-top: 16px; }
  #loginView .lp-points { margin-top: 16px; gap: 8px; }
  #loginView .lp-points li { padding: 9px 13px; }
  #loginView .lp-trust { display: none; }
}
@media (prefers-reduced-motion: reduce) {
  #loginView .lp-badge, #loginView .lp-chain span, #loginView .lp-points li { transition: none; }
}

/* ==================================================================
   v1.48.0 · DeepSeek 风视觉重构（后置覆盖层，不改动任何 HTML / JS 结构）
   设计来源：deepseek.com 设计令牌
     · 页面底 #F7F8FA（米白）  · 品牌蓝 #4D6BFE
     · 大圆角 card 24 / panel 16 / input 10 / pill 100
     · 极浅分隔线 rgba(15,17,21,.09)   · 柔和双层阴影
     · 毛玻璃顶栏 blur(12px) + saturate(180%)
   说明：本段放在文件最末尾，用来覆盖前面 4 个历史 :root 主题段，
        只改颜色 / 圆角 / 阴影 / 字体气质，不动 display / position / 栅格。
   ================================================================== */

/* ---------- 1. 设计令牌 ---------- */
:root {
  --pri: #4D6BFE;                 /* DeepSeek 品牌蓝 */
  --pri-d: #3B4FE0;
  --pri-soft: #EEF3FF;
  --bg: #F7F8FA;                  /* 米白页面底 */
  --card: #FFFFFF;
  --ink: #0F1115;                 /* 近黑的深灰蓝，DeepSeek 正文色 */
  --mut: #61656E;
  --line: rgba(15, 17, 21, .09);  /* 极浅分隔线 */
  --ok: #22C55E;
  --ok-soft: #E9F8EF;
  --warn: #F59E0B;
  --warn-soft: #FEF4E4;
  --bad: #EF4444;
  --bad-soft: #FEEDEC;
  --radius: 16px;
  --radius-lg: 24px;
  --shadow: 0 1px 2px rgba(16, 24, 40, .04), 0 6px 18px rgba(16, 24, 40, .05);
  --shadow-lg: 0 2px 6px rgba(16, 24, 40, .06), 0 18px 48px rgba(16, 24, 40, .12);
  --ring: 0 0 0 4px rgba(77, 107, 254, .18);

  /* DeepSeek 圆角梯度 */
  --ds-radius-sm: 8px;
  --ds-radius-input: 10px;
  --ds-radius-media: 12px;
  --ds-radius-panel: 16px;
  --ds-radius-card: 24px;
  --ds-radius-pill: 100px;
  --ds-blur: 12px;
  --pri-2: #7C93FF;               /* 渐变亮端 */

  /* 私密锁 / 金额：锁改品牌蓝统一气质，金额保留金铜色（财务语义） */
  --lk: #4D6BFE;
  --lk-soft: #EEF3FF;
  --lk-line: rgba(77, 107, 254, .18);
}

/* ---------- 2. 页面底 + 顶部柔光（DeepSeek hero 的呼吸感） ---------- */
body {
  background-color: var(--bg);
  background-image:
    radial-gradient(760px 420px at 16% -6%, rgba(77, 107, 254, .10), rgba(247, 248, 250, 0) 62%),
    radial-gradient(620px 380px at 86% 2%,  rgba(124, 147, 255, .10), rgba(247, 248, 250, 0) 60%),
    radial-gradient(900px 520px at 50% 106%, rgba(77, 107, 254, .05), rgba(247, 248, 250, 0) 62%);
  background-attachment: fixed;
  background-repeat: no-repeat;
  color: var(--ink);
  letter-spacing: .1px;
}
::selection { background: rgba(77, 107, 254, .18); }

/* ---------- 3. 字体气质：标题更紧、更稳 ---------- */
.brand-txt strong,
#loginView .lp-title,
.stat .num,
h1, h2, h3 { letter-spacing: -.4px; }

/* ---------- 4. 顶栏：毛玻璃 ---------- */
.topbar {
  background: rgba(255, 255, 255, .78);
  -webkit-backdrop-filter: saturate(180%) blur(12px);
  backdrop-filter: saturate(180%) blur(12px);
  border-bottom: 1px solid rgba(15, 17, 21, .07);
}

/* ---------- 5. LOGO：新「燃烧的蜘蛛」标，浅蓝底衬托 ---------- */
.logo {
  width: 40px; height: 40px; border-radius: 13px;
  background: linear-gradient(135deg, #F4F7FF, #E6EDFF);
  box-shadow: inset 0 0 0 1px rgba(77, 107, 254, .14), 0 1px 2px rgba(16, 24, 40, .05);
}
.logo svg { width: 27px; height: 27px; display: block; }
.lp-brand svg { width: 30px; height: 30px; display: block; }

/* ---------- 6. 按钮 ---------- */
.btn {
  border-radius: var(--ds-radius-input);
  font-weight: 500;
  transition: background-color .16s, border-color .16s, color .16s, box-shadow .16s;
}
.btn.primary { background: var(--pri); box-shadow: 0 1px 2px rgba(77, 107, 254, .24); }
.btn.primary:hover { background: var(--pri-d); box-shadow: 0 2px 8px rgba(77, 107, 254, .30); }
.btn.ghost:hover { border-color: rgba(77, 107, 254, .45); color: var(--pri); background: #F5F8FF; }
.btn.sm { border-radius: var(--ds-radius-sm); }

/* ---------- 7. 输入控件 + 蓝色聚焦环 ---------- */
input, select, textarea { border-radius: var(--ds-radius-input); }
input:focus, select:focus, textarea:focus, [contenteditable]:focus {
  outline: none;
  border-color: var(--pri);
  box-shadow: var(--ring);
}

/* ---------- 8. 卡片 / 看板：更圆、更轻、悬停微亮 ---------- */
.card, .stat, .panel { border-radius: var(--radius); }
.card {
  border-color: var(--line);
  box-shadow: var(--shadow);
  transition: box-shadow .2s ease, border-color .2s ease;
}
.card:hover {
  box-shadow: var(--shadow-lg);
  border-color: rgba(77, 107, 254, .20);
}
.stat .num { font-weight: 650; }

/* ---------- 9. 徽章 / 标签：全圆角 ---------- */
.chip, .pill { border-radius: var(--ds-radius-pill); }

/* ---------- 10. 登录页：玻璃卡片 + 品牌蓝 CTA ---------- */
#loginView .login-card {
  background: rgba(255, 255, 255, .86);
  -webkit-backdrop-filter: blur(18px) saturate(180%);
  backdrop-filter: blur(18px) saturate(180%);
  border: 1px solid rgba(255, 255, 255, .72);
  box-shadow: 0 2px 6px rgba(16, 24, 40, .05), 0 24px 60px rgba(16, 24, 40, .10);
}
#loginView .lp-badge { background: var(--pri-soft); border-color: rgba(77, 107, 254, .18); color: var(--pri-d); }
#loginView .lp-chain span { border-color: rgba(77, 107, 254, .22); }

/* ---------- 11. 高特异性补齐（v1.48.0）
   历史段里存在 ID 级 / 双类级规则(如 .brand .logo{box-shadow:none}、#loginView .login-btn)，
   会盖掉上面第 5/6/7 节的低特异性声明，这里用同等特异性后置覆盖。 ---------- */
.brand .logo {
  background: linear-gradient(135deg, #F4F7FF, #E6EDFF);
  box-shadow: inset 0 0 0 1px rgba(77, 107, 254, .14), 0 1px 2px rgba(16, 24, 40, .05);
}
#gatePane .logo {
  background: linear-gradient(135deg, #F4F7FF, #E6EDFF);
  box-shadow: inset 0 0 0 1px rgba(77, 107, 254, .14), 0 1px 2px rgba(16, 24, 40, .05);
}
#loginView .login-btn {
  background: linear-gradient(135deg, var(--pri-2), var(--pri));
  box-shadow: 0 6px 18px rgba(77, 107, 254, .26);
  border-radius: var(--ds-radius-input);
}
#loginView .login-btn:hover {
  transform: translateY(-1px);
  box-shadow: 0 14px 30px rgba(77, 107, 254, .34);
}
#loginView .f-inline .btn {
  border-radius: var(--ds-radius-input);
  border-color: rgba(77, 107, 254, .22);
  color: var(--pri);
  background: #F5F8FF;
}
#loginView .f-row input,
#loginView .li-inp input {
  border-radius: var(--ds-radius-input);
  border-color: rgba(15, 17, 21, .12);
}
#loginView .f-row input:focus,
#loginView .li-inp input:focus {
  border-color: var(--pri);
  box-shadow: var(--ring);
}
#loginView .f-row input::placeholder { color: #A8B2C8; }

/* 12. 看板搜索框聚焦环（#boardView #searchInput 是 ID 级规则，需同级别覆盖） */
#searchInput:focus,
#boardView #searchInput:focus,
.toolbar input[type=search]:focus {
  border-color: var(--pri);
  box-shadow: var(--ring);
}
#boardView #searchInput { border-radius: var(--ds-radius-input); }

/* ---------- 13. 角色管理（v1.49 · 账号管理内新增自定义角色 + 权限勾选） ---------- */
.urole-bar {
  display: flex; align-items: center; justify-content: space-between; gap: 10px;
  margin: 12px 0 8px; padding: 10px 12px;
  background: #F7F8FA; border: 1px solid var(--line); border-radius: var(--ds-radius-panel);
}
.urole-bar b { color: var(--pri); font-weight: 600; }

.role-list { display: flex; flex-direction: column; gap: 8px; margin-bottom: 12px; }
.role-row {
  display: grid; grid-template-columns: minmax(120px, 1.1fr) minmax(0, 2fr) auto;
  gap: 10px; align-items: center;
  padding: 10px 12px; background: #fff;
  border: 1px solid var(--line); border-radius: var(--ds-radius-panel);
  transition: box-shadow .18s ease, border-color .18s ease;
}
.role-row:hover { border-color: rgba(77, 107, 254, .22); box-shadow: var(--shadow); }
.rr-main { display: flex; align-items: center; flex-wrap: wrap; gap: 6px; min-width: 0; }
.rr-main b { font-size: 13px; letter-spacing: -.2px; }
.rr-main small { width: 100%; color: var(--mut); font-size: 11px; }
.rr-tag {
  font-style: normal; font-size: 11px; padding: 1px 8px; border-radius: var(--ds-radius-pill);
}
.rr-tag.builtin { background: var(--pri-soft); color: var(--pri-d); }
.rr-tag.custom { background: #FFF4E5; color: #92400E; }
.rr-perms { display: flex; flex-wrap: wrap; gap: 4px; min-width: 0; }
.rp-chip {
  font-size: 11px; line-height: 1.6; padding: 1px 8px; border-radius: var(--ds-radius-sm);
  background: #F7F8FA; border: 1px solid var(--line); color: var(--mut); white-space: nowrap;
}
.rr-acts { display: flex; gap: 6px; justify-content: flex-end; }

/* 新增/编辑角色弹窗 */
.rl-lab { display: block; margin-bottom: 10px; font-size: 12px; color: var(--mut); }
.rl-lab input { display: block; width: 100%; margin-top: 4px; }
.rl-hint { margin: 10px 0 6px; font-weight: 500; color: var(--ink); }
.rl-presets { display: flex; flex-wrap: wrap; gap: 6px; }
.rl-perms { display: flex; flex-direction: column; gap: 8px; max-height: 46vh; overflow: auto; }
.rp-group {
  padding: 8px 10px; border: 1px solid var(--line);
  border-radius: var(--ds-radius-media); background: #FCFCFD;
}
.rp-gt {
  font-size: 12px; font-weight: 500; color: var(--pri-d); margin-bottom: 6px;
  cursor: pointer; user-select: none;
}
.rp-grow { display: flex; flex-wrap: wrap; gap: 6px 14px; }
.rp-item { display: inline-flex; align-items: center; gap: 5px; font-size: 12px; cursor: pointer; }
.rp-item input { width: 15px; height: 15px; accent-color: var(--pri); margin: 0; }
.rl-actions {
  display: flex; align-items: center; justify-content: space-between;
  margin-top: 14px; padding-top: 12px; border-top: 1px solid var(--line);
}
.rl-actions b { color: var(--pri); }

@media (max-width: 720px) {
  .role-row { grid-template-columns: 1fr; gap: 6px; }
  .rr-acts { justify-content: flex-start; }
}

/* 角色弹窗由账户管理弹窗内唤起, 必须压在 mUsers 之上(二者 z-index 同为 100 时父弹窗会拦截点击) */
#mRole { z-index: 200; }

/* ============================================================
   v1.50.0 档案库弹窗: 「新建/编辑档案」要能完整看到(表单内部滚动 + 底部按钮常驻)
   ------------------------------------------------------------
   原症状: 表单自然高度 1480–2058px, 而 .kyc-body 只有 min(66vh,700px) 高且自己滚动,
   底部「取消 / 提交送审」在滚动区里, 打开时永远看不到(必须一路滚到底)。
   做法(只改布局容器, 不动任何 id/类名/字段):
     ① 弹窗卡加宽到 1080px、加高到 92vh —— 两列表单与「④ 进件资料文件」有足够宽度
     ② #kycEditPane 变纵向 flex: 说明/错误/底栏固定, 只有 .sp-fields 滚动
     ③ .kyc-files 之前落在栅格的一列里(仅 329px 宽), 改为通栏
   ============================================================ */
#mDocs .modal-card.kyc-card,
#mDocs .modal-card.wide.kyc-card {
  width: min(1080px, 96vw);
  margin-top: 5vh;
  max-height: min(90vh, 880px);   /* 5vh + 90vh = 95vh, 保证卡片底边不越出视口 */
}
#mDocs .docs-pane { display: flex; flex-direction: column; min-height: 0; flex: 1 1 auto; }

/* 编辑(新建)档案: 纵向弹性布局 —— 只有表单区滚动 */
#mDocs #kycEditPane {
  display: flex; flex-direction: column;
  flex: 1 1 auto; min-height: 0;
  max-height: none; overflow: hidden;
}
#mDocs #kycEditPane[hidden] { display: none !important; }
#mDocs #kycEditPane > .sp-desc { flex: 0 0 auto; margin-bottom: 8px; }
#mDocs #kycEditPane > .sp-fields {
  flex: 1 1 auto; min-height: 0;
  overflow-y: auto; overscroll-behavior: contain;
  padding-right: 8px; margin-bottom: 0;
}
#mDocs #kycEditPane > .login-err { flex: 0 0 auto; margin-top: 8px; }
#mDocs #kycEditPane > .modal-foot {
  flex: 0 0 auto; margin-top: 8px; padding: 12px 0 2px;
  background: #fff; border-top: 1px solid var(--line);
}
/* 进件资料文件列表: 通栏(原先只占栅格一列, 右侧空一大块且文件名被挤断) */
#mDocs #kycEditPane .kyc-files { grid-column: 1 / -1; }
#mDocs #kycEditPane .kyc-slot { padding: 8px 12px; }

/* 档案列表也跟随弹窗高度, 内部滚动 */
#mDocs #kycListPane { max-height: none; }

@media (max-width: 720px) {
  #mDocs .modal-card.kyc-card,
  #mDocs .modal-card.wide.kyc-card { width: 100%; max-height: 94vh; }
  #mDocs #kycEditPane > .sp-fields { padding-right: 0; }
}

/* ============================================================
   v1.51.0 多选人员控件(点选式): 负责人(协作分工) / 邀请协同同事
   ------------------------------------------------------------
   替代原生 <select multiple>(必须按住 Ctrl/⌘, 手机不可用)。
   浮层用 position:fixed 由脚本定位, 避免被弹窗滚动区裁切。
   ============================================================ */
.msel { position: relative; }
.msel-btn {
  width: 100%; display: flex; align-items: center; justify-content: space-between; gap: 8px;
  border: 1px solid var(--line); background: #fff; border-radius: 10px;
  padding: 8px 11px; font-size: 13px; color: var(--ink); cursor: pointer;
  text-align: left; font-family: inherit; transition: border-color .16s ease, box-shadow .16s ease;
}
.msel-btn:hover { border-color: rgba(77, 107, 254, .45); }
.msel-btn:focus-visible { outline: none; border-color: var(--pri); box-shadow: 0 0 0 4px rgba(77, 107, 254, .18); }
.msel-btn[disabled] { opacity: .6; cursor: not-allowed; background: #f7f8fa; }
.msel-btn i { color: var(--mut); font-style: normal; font-size: 11px; }
.msel-n { color: var(--pri); font-weight: 700; }

.msel-pop {
  position: fixed; z-index: 400; min-width: 230px; max-width: 320px;
  max-height: 280px; overflow-y: auto; overscroll-behavior: contain;
  background: #fff; border: 1px solid var(--line); border-radius: 12px;
  box-shadow: 0 20px 60px rgba(15, 17, 21, .18); padding: 6px;
}
.msel-pop label {
  display: flex; align-items: center; gap: 9px;
  padding: 8px 10px; border-radius: 8px; font-size: 13px; cursor: pointer; color: var(--ink);
}
.msel-pop label:hover { background: var(--pri-soft); }
.msel-pop label.on { background: rgba(77, 107, 254, .12); font-weight: 600; }
.msel-pop input { width: 16px; height: 16px; accent-color: var(--pri); margin: 0; }
.msel-pop .msel-empty { color: var(--mut); font-size: 12.5px; padding: 9px 10px; }
.msel-pop .msel-foot {
  display: flex; gap: 6px; justify-content: flex-end;
  padding: 7px 4px 3px; margin-top: 5px; border-top: 1px solid var(--line);
}

.msel-chips { display: flex; flex-wrap: wrap; gap: 5px; margin-top: 7px; }
.msel-chip {
  display: inline-flex; align-items: center; gap: 5px; font-size: 11.5px; font-weight: 600;
  border-radius: 999px; padding: 3px 6px 3px 10px; background: var(--pri-soft); color: var(--pri-d);
}
.msel-chip b { cursor: pointer; font-weight: 700; opacity: .65; padding: 0 2px; }
.msel-chip b:hover { opacity: 1; }

/* ============================================================
   v1.52.0 「可重复明细行」: 转款单可拆多笔, 每笔带备注
   ------------------------------------------------------------
   结构: .rep-block > .rep-head(标题/合计) + .rep-box > .rep-row(第N笔 + 栅格字段 + 删除)
   ============================================================ */
.rep-block {
  border: 1px solid var(--line); border-radius: 12px; background: #fff;
  padding: 10px 12px 8px; margin: 10px 0 4px;
}
.rep-head { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-bottom: 8px; }
.rep-head b { font-size: 13.5px; color: var(--ink); }
.rep-head .rep-total {
  margin-left: auto; font-size: 12.5px; color: var(--mut);
  background: var(--pri-soft); border-radius: 999px; padding: 3px 11px;
}
.rep-head .rep-total b { color: var(--pri-d); font-size: 13px; }
.rep-box { display: flex; flex-direction: column; gap: 6px; }
.rep-row {
  display: grid; grid-template-columns: 62px 1fr 28px; gap: 8px; align-items: start;
  border: 1px dashed var(--line); border-radius: 10px; padding: 8px 8px 6px; background: #fcfdff;
}
.rep-no { font-size: 11.5px; font-weight: 700; color: var(--pri-d); padding-top: 20px; letter-spacing: .2px; }
.rep-cells { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
.rep-cells .rep-cell { min-width: 0; }
.rep-cells .full { grid-column: 1 / -1; }
.rep-cells label { display: block; font-size: 11.5px; color: var(--mut); margin-bottom: 3px; }
.rep-cells input, .rep-cells select {
  width: 100%; box-sizing: border-box; border: 1px solid var(--line); border-radius: 8px;
  padding: 6px 9px; font-size: 12.5px; font-family: inherit; color: var(--ink); background: #fff;
  transition: border-color .16s ease, box-shadow .16s ease;
}
.rep-cells input:focus, .rep-cells select:focus {
  outline: none; border-color: var(--pri); box-shadow: 0 0 0 4px rgba(77, 107, 254, .18);
}
.rep-cells input[disabled] { background: #f7f8fa; color: var(--mut); }
.rep-del {
  border: none; background: none; color: var(--mut); cursor: pointer;
  font-size: 13px; line-height: 1; padding: 6px 4px; border-radius: 8px; margin-top: 16px;
}
.rep-del:hover { color: var(--bad); background: rgba(220, 38, 38, .08); }
.rep-foot { display: flex; align-items: center; gap: 10px; margin-top: 8px; }

@media (max-width: 720px) {
  .rep-row { grid-template-columns: 1fr; }
  .rep-no { padding-top: 0; }
  .rep-del { margin-top: 0; justify-self: end; }
  .rep-cells { grid-template-columns: 1fr; }
}

/* v1.53.0 登录页重设计: 「深空蓝 · 极光网格」
 * ---------------------------------------------------------------------------
 * 参考 deepseek.com 登录页实测令牌(palette): #3964fe/#5686fe 主蓝 · #1d1d1f 主文本
 * · #81858c 次级 · #adb2b8 占位 · #f5f5f7 页面底。
 * 本系统沿用 v1.48 已建立的品牌蓝 #4D6BFE 作为唯一色相来源, 把中性色统一到
 * DeepSeek 的冷灰阶, 并清掉 v1.44 遗留的暖棕灰与红/橙/绿彩色光斑。
 *
 * 设计决策(全部实测对比度, 白底):
 *   主文本 #1D1D1F 16.83:1 ✓ | 次级 #61656E 5.84:1 ✓ | 弱文本 #6B7180 4.88:1 ✓
 *   蓝文本 #3B4FE0 6.21:1 ✓   | CTA 渐变最浅端 #4A66F5 白字 4.66:1 ✓
 *   成功 #047857 5.48:1 ✓     | 错误 #B42318 6.57:1 ✓
 * 只改颜色/圆角/阴影/背景, 不动任何 id / 类名 / 结构 / 栅格。
 * ===========================================================================
 */
#loginView {
  /* ---- 设计令牌 ---- */
  --li-blue: #4D6BFE;          /* 品牌蓝: 描边/装饰/焦点环 */
  --li-blue-ink: #3B4FE0;      /* 蓝色文本(可读性达标 6.21:1) */
  --li-blue-deep: #2C3ECF;     /* 渐变深端 / hover */
  --li-blue-soft: #EEF3FF;     /* 浅蓝底(徽章/胶囊) */
  --li-ink: #1D1D1F;           /* 主文本 */
  --li-mut: #61656E;           /* 次级文本 */
  --li-faint: #6B7180;         /* 弱文本(仍达标 4.88:1) */
  --li-ph: #9AA1AC;            /* 占位符(装饰性, 上方均有 label) */
  --li-surface: #FFFFFF;
  --li-bg: #F5F5F7;            /* DeepSeek 登录页底色 */
  --li-line: rgba(29, 29, 31, .10);
  --li-line-strong: rgba(29, 29, 31, .16);
  --li-ok: #047857;
  --li-bad: #B42318;
  --li-shadow-card: 0 1px 1px rgba(16, 24, 40, .04), 0 24px 64px -24px rgba(16, 24, 40, .20);
  --li-shadow-cta: 0 6px 18px -6px rgba(52, 74, 200, .45);
  --li-radius-card: 24px;
  --li-radius-input: 12px;
  --li-ring: 0 0 0 4px rgba(77, 107, 254, .18);

  background-color: var(--li-bg);
  /* 三层同色系极光(蓝→靛→青), 取代原来的 枣红/橙/绿/蓝 四色光斑 */
  background-image:
    radial-gradient(920px 660px at 8% -6%, rgba(77, 107, 254, .22), transparent 62%),
    radial-gradient(780px 580px at 96% 4%, rgba(124, 147, 255, .24), transparent 60%),
    radial-gradient(860px 700px at 72% 104%, rgba(56, 189, 248, .16), transparent 64%),
    linear-gradient(180deg, #F7F8FC 0%, #F5F5F7 52%, #F2F4F9 100%);
}

/* ---- 科技网格(40px) + 蛛丝光纹: 用伪元素, 不动 HTML ---- */
#loginView::before {
  content: ""; position: absolute; inset: 0; z-index: 0; pointer-events: none;
  background-image:
    repeating-linear-gradient(0deg, rgba(15, 17, 21, .045) 0 1px, transparent 1px 40px),
    repeating-linear-gradient(90deg, rgba(15, 17, 21, .045) 0 1px, transparent 1px 40px);
  -webkit-mask-image: radial-gradient(120% 90% at 50% 0%, #000 0%, rgba(0, 0, 0, .55) 45%, transparent 78%);
  mask-image: radial-gradient(120% 90% at 50% 0%, #000 0%, rgba(0, 0, 0, .55) 45%, transparent 78%);
  opacity: .55;
}
#loginView::after {
  content: ""; position: absolute; right: -6%; top: -10%; width: 62vmin; height: 62vmin; z-index: 0;
  pointer-events: none; opacity: .5;
  background-repeat: no-repeat; background-size: contain; background-position: center;
  /* 蛛丝: 8 条放射 + 3 圈同心弧, 品牌蓝细线, 极低对比不抢焦点 */
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 200 200' fill='none' stroke='%234D6BFE' stroke-opacity='.30' stroke-width='.7'><g><path d='M100 18V182M18 100h164M42 42l116 116M158 42L42 158'/><circle cx='100' cy='100' r='34'/><circle cx='100' cy='100' r='58'/><circle cx='100' cy='100' r='82'/></g></svg>");
}
@media (max-width: 980px) {
  #loginView::after { width: 78vmin; height: 78vmin; right: -18%; top: -6%; opacity: .34; }
}

/* ---- 漂浮光斑: 统一到品牌蓝系, 更柔更淡 ---- */
#loginView .lw i {
  filter: blur(58px); opacity: .40; border: 0;
}
#loginView .lw .r1 { width: 300px; height: 300px; left: -80px; top: 8%; background: rgba(77, 107, 254, .26); }
#loginView .lw .r2 { width: 220px; height: 220px; right: -60px; top: 20%; background: rgba(124, 147, 255, .22); animation-delay: 2.2s; }
#loginView .lw .r3 { width: 260px; height: 260px; left: 14%; bottom: -90px; background: rgba(58, 80, 232, .18); animation-delay: 4.4s; }
#loginView .lw .r4 { width: 200px; height: 200px; right: 12%; bottom: -60px; background: rgba(56, 189, 248, .16); animation-delay: 6.6s; }
#loginView .lw { z-index: 0; }
#loginView .li-wrap { position: relative; z-index: 1; }

/* ---- 顶栏 ---- */
#loginView .lp-brand b { color: var(--li-ink); letter-spacing: -.3px; }
#loginView .lp-brand em { color: var(--li-faint); }
#loginView .lp-ver { color: var(--li-faint); }

/* ---- 左侧品牌区: 去掉暖棕, 统一冷灰 ---- */
#loginView .lp-badge {
  background: var(--li-blue-soft);
  border: 1px solid rgba(77, 107, 254, .20);
  color: var(--li-blue-ink);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .6);
}
#loginView .li-side .lp-title { color: var(--li-ink); letter-spacing: -1.2px; }
#loginView .li-side .lp-title .grad {
  background: linear-gradient(96deg, #4A66F5 0%, #3B4FE0 58%, #3457F0 100%);
  -webkit-background-clip: text; background-clip: text; color: transparent;
}
#loginView .li-side .lp-slogan { color: #34383F; }
#loginView .li-side .lp-sub { color: var(--li-mut); }
#loginView .lp-chain span {
  background: rgba(255, 255, 255, .72);
  border: 1px solid rgba(77, 107, 254, .20);
  color: #34383F;
  box-shadow: 0 1px 2px rgba(16, 24, 40, .04);
}
#loginView .lp-chain span:not(:last-child)::after { background: linear-gradient(90deg, rgba(77, 107, 254, .28), rgba(77, 107, 254, .06)); }
#loginView .lp-points li {
  background: rgba(255, 255, 255, .66);
  border: 1px solid var(--li-line);
  box-shadow: 0 1px 2px rgba(16, 24, 40, .03);
}
#loginView .lp-points b { color: var(--li-ink); }
#loginView .lp-points span { color: var(--li-mut); }
#loginView .lp-trust { color: var(--li-mut); }   /* 4.49→5.84: 半透明底上再留余量 */
#loginView .lp-trust span::before { color: var(--li-ok); }

/* ---- 登录卡: 白瓷玻璃 + 冷色双层阴影 ---- */
#loginView .login-card {
  background: rgba(255, 255, 255, .84);
  -webkit-backdrop-filter: blur(20px) saturate(180%);
  backdrop-filter: blur(20px) saturate(180%);
  border: 1px solid rgba(255, 255, 255, .78);
  border-radius: var(--li-radius-card);
  box-shadow: var(--li-shadow-card);
}
#loginView .li-head strong { color: var(--li-ink); }
#loginView .li-head small { color: var(--li-mut); }
#loginView .li-avatar {
  background: linear-gradient(148deg, #6E86FF 0%, #4D6BFE 55%, #3B4FE0 100%);
  box-shadow: 0 8px 20px -8px rgba(59, 79, 224, .55), inset 0 1px 0 rgba(255, 255, 255, .35);
}

/* ---- 页签: 选中态白底 + 深蓝文本(6.21:1) ---- */
#loginView .li-tabs { background: rgba(120, 120, 128, .10); }
#loginView .li-tab { color: var(--li-mut); }
#loginView .li-tab:hover { color: var(--li-blue-ink); }
#loginView .li-tab.on {
  background: #FFFFFF; color: var(--li-blue-ink);
  box-shadow: 0 1px 2px rgba(16, 24, 40, .10), 0 0 0 1px rgba(29, 29, 31, .05);
}
/* 触摸目标: 桌面 40px, 移动端 44px(WCAG 2.5.5 建议值) */
#loginView .li-tab { min-height: 40px; display: inline-flex; align-items: center; justify-content: center; }
#loginView .li-eye { min-width: 0; }

/* ---- 表单: 46px 高(≥44 触摸目标) + 冷色边 + 品牌聚焦环 ---- */
#loginView .f-row > label { color: var(--li-mut); }
#loginView .f-row input,
#loginView .li-inp input {
  background: #FFFFFF;
  border: 1px solid var(--li-line-strong);
  border-radius: var(--li-radius-input);
  color: var(--li-ink);
  box-shadow: inset 0 1px 2px rgba(16, 24, 40, .04);
}
#loginView .f-row input:hover,
#loginView .li-inp input:hover { border-color: rgba(77, 107, 254, .40); }
#loginView .f-row input:focus,
#loginView .li-inp input:focus {
  border-color: var(--li-blue);
  box-shadow: var(--li-ring), inset 0 1px 2px rgba(16, 24, 40, .02);
}
#loginView .f-row input::placeholder,
#loginView .li-inp input::placeholder { color: var(--li-ph); }
#loginView .li-eye { color: var(--li-faint); border-radius: 9px; }
#loginView .li-eye:hover { color: var(--li-blue-ink); background: rgba(77, 107, 254, .08); opacity: 1; }

/* ---- 主 CTA: 48px / 品牌渐变(白字最浅端 4.66:1) ---- */
#loginView .login-btn {
  height: 48px; border-radius: var(--li-radius-input);
  background: linear-gradient(135deg, #4A66F5 0%, #3A50E8 52%, #2C3ECF 100%);
  color: #FFFFFF; font-size: 15.5px; font-weight: 600; letter-spacing: .2px;
  box-shadow: var(--li-shadow-cta), inset 0 1px 0 rgba(255, 255, 255, .22);
  transition: transform .18s ease, box-shadow .18s ease, filter .18s ease;
}
#loginView .login-btn:hover:not(:disabled) {
  transform: translateY(-1px); filter: brightness(1.05);
  box-shadow: 0 10px 24px -6px rgba(52, 74, 200, .55), inset 0 1px 0 rgba(255, 255, 255, .28);
}
#loginView .login-btn:active:not(:disabled) { transform: translateY(0) scale(.995); }
#loginView .login-btn:focus-visible { outline: none; box-shadow: var(--li-ring), var(--li-shadow-cta); }
#loginView .login-btn:disabled { opacity: .55; }
#loginView .f-inline .btn {
  height: 46px; border-radius: var(--li-radius-input);
  border: 1px solid rgba(77, 107, 254, .24);
  background: var(--li-blue-soft); color: var(--li-blue-ink);
}

/* ---- 反馈: 错误/提示/第三方登录 ---- */
#loginView .login-err {
  background: rgba(180, 35, 24, .07);
  border: 1px solid rgba(180, 35, 24, .18);
  color: var(--li-bad);
  border-radius: var(--li-radius-input);
}
#loginView .oauth-banner {
  background: rgba(77, 107, 254, .07);
  border: 1px solid rgba(77, 107, 254, .20);
  color: var(--li-blue-ink);
  border-radius: var(--li-radius-input);
}
#loginView .oauth-div { color: var(--li-faint); }
#loginView .oauth-div::before, #loginView .oauth-div::after { background: var(--li-line); }
#loginView .oauth-btn {
  background: #FFFFFF; border: 1px solid var(--li-line-strong);
  border-radius: var(--li-radius-input); color: var(--li-ink);
  box-shadow: 0 1px 2px rgba(16, 24, 40, .04);
}
#loginView .oauth-btn:hover { border-color: rgba(77, 107, 254, .38); box-shadow: 0 6px 16px -8px rgba(16, 24, 40, .28); }

/* ---- 页脚: 全部提到 12px + 达标灰 ---- */
#loginView .li-foot { color: var(--li-mut); }
#loginView .li-foot a { color: var(--li-blue-ink); }
#loginView .li-note { color: var(--li-faint); }
#loginView .login-ver { color: var(--li-faint); }
#loginView .login-ver span { color: var(--li-blue-ink); }

/* ---- 移动端(表单优先的单列)微调 ---- */
@media (max-width: 980px) {
  #loginView .li-tab { min-height: 44px; }
  #loginView .li-main .login-card { border-radius: 22px; }
  #loginView .li-side .lp-points li { background: rgba(255, 255, 255, .72); }
}

/* ---- 无障碍: 尊重系统"减少动态效果"(必须写在最后, 否则被上面的动画覆盖) ---- */
@media (prefers-reduced-motion: reduce) {
  #loginView .lw i { animation: none; }
  #loginView .login-btn, #loginView .oauth-btn, #loginView .li-tab { transition: none; }
}



/* v1.56.0 KYC 进件资料 · NNC1 / NAR1 按成立年限区分 */
/* 顶部年限提示 + 本期应传项高亮。用 #mDocs #kycEditPane 前缀保证盖过 v1.50 段的 .kyc-slot 规则 */
.kyc-doc-hint {
  margin: 0 0 9px; padding: 9px 12px; border-radius: 10px; line-height: 1.7;
  background: #F6F7FB; border: 1px solid var(--line); font-size: 12.5px; color: var(--mut);
}
.kyc-doc-hint b { color: var(--ink); }
.kyc-doc-hint.on { background: #EEF3FF; border-color: rgba(77, 107, 254, .24); color: #3B4FE0; }
.kyc-doc-hint.on b { color: #2C3ECF; }
#mDocs #kycEditPane .kyc-slot.need {
  border-color: rgba(77, 107, 254, .44); background: rgba(77, 107, 254, .05);
}
#mDocs #kycEditPane .kyc-slot.alt { opacity: .7; }
.kyc-tag {
  display: inline-block; margin-left: 7px; padding: 1px 8px; border-radius: 999px;
  font-size: 11px; font-weight: 700; font-style: normal; vertical-align: 1px; white-space: nowrap;
  background: linear-gradient(160deg, #4A66F5, #3A50E8 55%, #2C3ECF); color: #fff;
}
.kyc-tag.alt, .kyc-tag.idle { background: #EEF0F4; color: var(--mut); font-weight: 600; }
#mDocs #kycEditPane .kyc-slot > b { flex: 0 0 auto; width: auto; min-width: 108px; }

/* ============================================================
   v1.54.0 登录页「活蛛网」动效层 (canvas 2D)
   ------------------------------------------------------------
   层级(自下而上): 极光底 → 科技网格(::before) → 静态蛛网(::after)
                → canvas 活蛛网 + 蜘蛛(本层) → .li-wrap 内容
   · 丝线永远在轻微摆动; 指针滑过/点击/空闲时产生径向涟漪,
     涟漪波前把丝线"沿径向推开 + 沿切向游走"(像水波抛开丝线)
   · 蜘蛛从顶栏 LOGO 里钻出来, 边爬边吐丝垂到网心, 之后在网上巡逻
   · 登录页任何输入框获得焦点(开始打字)时, 蜘蛛与波纹全部静止
   · 无脚本或系统开启"减少动态效果"时自动回退 v1.53 静态蛛网, 视觉不残缺
   ============================================================ */
#loginView .li-web {
  position: absolute; inset: 0; z-index: 3;
  display: block; width: 100%; height: 100%;
  pointer-events: none;                 /* 纯装饰层, 绝不拦截点击/输入 */
}
/* ★ 为什么放在内容(.li-wrap, z-index 1)之上:
 *   桌面端蛛网覆盖区与右侧登录卡片有重叠, 若放在内容之下, 蜘蛛爬到卡片背后就"消失"了
 *   (实测巡逻坐标 (1075,214) 正落在卡片内)。放到最上层后蜘蛛始终可见, 像爬在玻璃上。
 *   代价是丝线会压在卡片上 —— 丝只有 0.85px 宽、alpha .27, 实测在卡片区覆盖 <1% 面积,
 *   不改变任何文字的对比度(专项 F 段有量化断言)。 */
/* 渐进增强: 脚本真正跑起来后才隐掉静态蛛网, 避免两套丝线重影 */
#loginView.li-web-on::after { opacity: 0; transition: opacity .7s ease; }
@media (prefers-reduced-motion: reduce) {
  #loginView .li-web { display: none; }              /* 整层不显示 */
  #loginView.li-web-on::after { opacity: .5; }       /* 静态蛛网照旧 */
}

/* ==================== v1.65 客户账号联动回执（Uwhats 同步 / 密码 / 邮件） ==================== */
.inq-sync-card { border-left: 3px solid var(--ok, #008069); }
.inq-sync-cred {
  margin-top: 8px; padding: 9px 11px; border: 1px dashed var(--line, #d9d9d9); border-radius: 8px;
  background: rgba(0, 128, 105, .06); font-size: 12.5px; line-height: 1.9; color: var(--ink, #222);
}
.inq-sync-cred b { font-family: ui-monospace, "Cascadia Mono", Consolas, monospace; user-select: all; }

/* ============================================================
   v1.99.0 老手视角（订单详情内的业务体检面板）
   设计意图：把「只有老手才知道的判断」显性化 —— 结论条 + 毛利四格 + 问题卡（含为什么/怎么办）。
   ⛔ 颜色只用既有令牌（--ok/--warn/--bad），不引新色 —— 免得和主题漂移。
   ============================================================ */
.coach-verdict {
  padding: 9px 12px; border-radius: 10px; font-size: 13px; font-weight: 500;
  line-height: 1.5; margin-bottom: 10px;
}
.coach-green { background: var(--ok-soft); color: #0b6b3a; border: 1px solid rgba(52, 199, 89, .3); }
.coach-amber { background: var(--warn-soft); color: #8a5300; border: 1px solid rgba(255, 159, 10, .32); }
.coach-red { background: var(--bad-soft); color: #9d1f18; border: 1px solid rgba(255, 59, 48, .3); }
.coach-gray { background: #f2f3f5; color: var(--mut); border: 1px solid var(--line); }

.coach-money {
  display: grid; grid-template-columns: repeat(4, 1fr); gap: 8px;
  padding: 10px 12px; margin-bottom: 10px;
  background: #fafbfc; border: 1px solid var(--line); border-radius: 10px;
}
.coach-money > div { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.coach-money .lbl { font-size: 11px; color: var(--mut); }
.coach-money b { font-size: 14px; font-weight: 500; font-variant-numeric: tabular-nums; }
.coach-money b.neg { color: var(--bad); }
.coach-money b.pos { color: #0b6b3a; }
.coach-note { font-size: 12px; color: var(--mut); margin: -4px 0 10px; line-height: 1.55; }

.coach-item {
  padding: 9px 11px; margin-bottom: 7px; border-radius: 9px;
  background: #fff; border: 1px solid var(--line); border-left-width: 3px;
}
.coach-block { border-left-color: var(--bad); background: #fffafa; }
.coach-warn { border-left-color: var(--warn); background: #fffdf7; }
.coach-info { border-left-color: var(--pri); background: #fbfcff; }
.coach-head { display: flex; align-items: baseline; gap: 7px; flex-wrap: wrap; }
.coach-tag {
  font-size: 11px; padding: 1px 6px; border-radius: 5px; white-space: nowrap;
  background: #f2f3f5; color: var(--mut);
}
.coach-block .coach-tag { background: var(--bad-soft); color: #9d1f18; }
.coach-warn .coach-tag { background: var(--warn-soft); color: #8a5300; }
.coach-info .coach-tag { background: var(--pri-soft); color: var(--pri-d); }
.coach-title { font-size: 13px; font-weight: 500; color: var(--ink); line-height: 1.5; }
.coach-why { font-size: 12px; color: var(--mut); line-height: 1.62; margin-top: 4px; }
.coach-fix { font-size: 12px; color: var(--pri-d); line-height: 1.6; margin-top: 4px; }
.coach-ok {
  padding: 11px 12px; border-radius: 9px; font-size: 13px; line-height: 1.55;
  background: var(--ok-soft); color: #0b6b3a; border: 1px solid rgba(52, 199, 89, .28);
}
.coach-next { margin-top: 11px; padding-top: 10px; border-top: 1px dashed var(--line); }
.coach-next-t { font-size: 12px; font-weight: 500; color: var(--mut); margin-bottom: 6px; }
.coach-act { margin-bottom: 6px; }
.coach-act b { font-size: 13px; font-weight: 500; color: var(--ink); }
.coach-act .muted { margin-top: 1px; line-height: 1.55; }
@media (max-width: 560px) { .coach-money { grid-template-columns: repeat(2, 1fr); } }
