/* ===== 客户全流程管理 - 样式（轻奢暖白 · 方案B） ===== */
* { margin:0; padding:0; box-sizing:border-box; }
:root {
  color-scheme: light;
  --primary:#B08D57; --primary-dark:#96743F; --primary-bg:rgba(176,141,87,.14);
  --ok:#3E5C4B; --ok-bg:rgba(62,92,75,.10);
  --warn:#B87A2C; --warn-bg:rgba(184,122,44,.12);
  --danger:#A85A4A; --danger-bg:rgba(168,90,74,.10);
  --blue:#5A6B8C; --blue-bg:rgba(90,107,140,.12);
  --muted:#7A6A58; --text2:#6B5D4D;
  --border:#E4DCCE; --border-light:#EDE5D8;
  --bg:#F5F0E8; --card:#FFFFFF; --card2:#FBF8F3; --panel:#FFFFFF;
  --text:#2D241C; --radius:10px;
  --shadow:0 1px 4px rgba(90,60,30,.08);
}
html,body { height:100%; }
body { font-family:"Microsoft YaHei","PingFang SC",system-ui,-apple-system,sans-serif; background:var(--bg); color:var(--text); font-size:14px; }
.hidden { display:none !important; }
.view { min-height:100vh; }
a { color:var(--primary-dark); text-decoration:none; }

/* ===== 登录（高级感：全屏实景背景 + 极简表单） ===== */
#login-view { position:relative; min-height:100vh; }
#login-view.hidden { display:none; }
.login-bg {
  position:fixed; inset:0; z-index:0;
  background-image:url('_villa_bg_user_4k.jpg?v=20260916d');
  background-size:cover; background-position:center;
  transform:scale(1.04);
}
@media (max-width:768px){
  .login-bg{ background-image:url('_villa_bg_user_m.jpg?v=20260916d'); }
}
.login-bg::after {
  content:""; position:absolute; inset:0;
  background:linear-gradient(180deg, rgba(0,0,0,0) 42%, rgba(0,0,0,.32) 78%, rgba(0,0,0,.55) 100%);
}
.login-stage {
  position:relative; z-index:1;
  min-height:100vh;
  display:flex; align-items:flex-end; justify-content:center;
  padding:0 40px calc(12vh + 30px);
}
.login-zone { width:100%; max-width:430px; text-align:center; }
.login-field {
  display:flex; align-items:center; gap:16px;
  padding:14px 4px 16px;
  border-bottom:1px solid rgba(255,255,255,.38);
  transition:border-color .25s;
}
.login-field:focus-within { border-bottom-color:#fff; }
.login-field svg { width:24px; height:24px; flex:none; stroke:rgba(255,255,255,.92); filter:drop-shadow(0 1px 2px rgba(0,0,0,.35)); }
.login-field input {
  flex:1; border:0; outline:0; background:transparent;
  font-size:17px; color:#fff; font-family:inherit;
  letter-spacing:1px; height:28px;
  text-shadow:0 1px 3px rgba(0,0,0,.4);
}
.login-field input::placeholder { color:rgba(255,255,255,.72); }
.login-field + .login-field { margin-top:22px; }
.login-remember {
  display:flex; align-items:center; justify-content:center; gap:9px;
  margin-top:26px;
  font-size:14px; color:rgba(255,255,255,.92);
  cursor:pointer; user-select:none;
  text-shadow:0 1px 3px rgba(0,0,0,.4);
}
.login-remember input { display:none; }
.login-check {
  width:19px; height:19px; border:1.6px solid rgba(255,255,255,.75); border-radius:6px;
  position:relative; transition:.18s; background:rgba(0,0,0,.12);
}
.login-remember input:checked + .login-check { background:rgba(255,255,255,.92); border-color:rgba(255,255,255,.92); }
.login-remember input:checked + .login-check::after {
  content:""; position:absolute; left:5.5px; top:2.5px; width:5.5px; height:10px;
  border:solid #1d1d1f; border-width:0 2.2px 2.2px 0; transform:rotate(45deg);
}
.login-enter-wrap { margin-top:42px; display:flex; justify-content:center; }
.login-enter {
  width:62px; height:62px; border-radius:50%;
  border:1.4px solid rgba(255,255,255,.85);
  background:rgba(255,255,255,.16);
  backdrop-filter:blur(12px); -webkit-backdrop-filter:blur(12px);
  display:flex; align-items:center; justify-content:center;
  cursor:pointer; color:#fff;
  transition:transform .18s, background .2s;
  box-shadow:0 12px 30px -8px rgba(0,0,0,.4);
}
.login-enter:hover { background:rgba(255,255,255,.28); transform:scale(1.05); }
.login-enter:active { transform:scale(.96); }
.login-enter svg { width:27px; height:27px; stroke:#fff; margin-left:2px; }
.login-err {
  margin-top:18px; font-size:13.5px; color:#ffd7d7; text-align:center; display:none;
  letter-spacing:.5px; text-shadow:0 1px 3px rgba(0,0,0,.5);
}
.login-err.show { display:block; }
.login-setup {
  background:rgba(20,16,12,.72); backdrop-filter:blur(10px); -webkit-backdrop-filter:blur(10px);
  border:1px solid rgba(255,255,255,.18); border-radius:14px;
  padding:16px 18px; margin-bottom:22px; text-align:left;
}
.login-setup h3 { font-size:14px; color:#fff; margin-bottom:12px; }
.login-setup input {
  width:100%; padding:9px 11px; margin-bottom:8px;
  border:1px solid rgba(255,255,255,.25); border-radius:8px;
  background:rgba(255,255,255,.12); color:#fff; font-size:14px; font-family:inherit;
}
.login-setup input::placeholder { color:rgba(255,255,255,.55); }
.login-setup button {
  width:100%; padding:10px; border:0; border-radius:8px;
  background:#fff; color:#1d1d1f; font-size:14px; font-weight:600; cursor:pointer; font-family:inherit;
}
.field { margin-bottom:14px; }
.field label { display:block; margin-bottom:6px; color:var(--text2); font-size:13px; }
.field input,.field select,.field textarea { width:100%; padding:8px 10px; border:1px solid var(--border); border-radius:8px; font-size:14px; background:#fff; color:var(--text); }
.field input:focus,.field select:focus,.field textarea:focus { outline:none; border-color:var(--primary); box-shadow:0 0 0 2px var(--primary-bg); }
.msg { margin-top:12px; font-size:13px; min-height:18px; }
.msg.err { color:var(--danger); }
.msg.ok { color:var(--ok); }

/* ===== 主布局 ===== */
#app-view { display:flex; min-height:100vh; }
#app-view.hidden { display:none; }
.sidebar { width:220px; background:#4A3A2C; color:#EFE5D4; display:flex; flex-direction:column; position:fixed; top:0; bottom:0; left:0; z-index:20; }
.brand { padding:20px 18px; font-size:16px; font-weight:600; color:#F5E9D2; border-bottom:1px solid rgba(255,255,255,.12); letter-spacing:.5px; }
.sidebar nav { padding:12px 0; flex:1; }
.sidebar nav a { display:block; padding:11px 20px; color:#D8C9B2; font-size:14px; border-left:3px solid transparent; }
.sidebar nav a:hover { background:rgba(255,255,255,.08); color:#fff; }
.sidebar nav a.active { background:rgba(176,141,87,.28); border-left-color:#D9B878; color:#fff; }
.sidebar-foot { padding:14px 18px; border-top:1px solid rgba(255,255,255,.12); font-size:12px; }
#me-info { margin-bottom:10px; line-height:1.6; color:#C9B89C; }
#me-info strong { color:#fff; }
.main { flex:1; margin-left:220px; padding:22px 26px; min-width:0; }

/* ===== 通用组件 ===== */
.btn { display:inline-block; padding:7px 14px; border:1px solid var(--border); border-radius:8px; background:#fff; color:var(--text); font-size:13px; cursor:pointer; transition:all .15s; }
.btn:hover { border-color:var(--primary); color:var(--primary-dark); }
.btn.primary { background:var(--primary); border-color:var(--primary); color:#fff; font-weight:600; }
.btn.primary:hover { background:var(--primary-dark); color:#fff; }
.btn.danger { color:var(--danger); border-color:rgba(168,90,74,.45); }
.btn.danger:hover { background:var(--danger-bg); border-color:var(--danger); color:var(--danger); }
.btn.ghost { background:transparent; border-color:rgba(255,255,255,.35); color:#D8C9B2; }
.btn.ghost:hover { color:#fff; border-color:#fff; }
.btn.sm { padding:3px 9px; font-size:12px; }
.btn.block { width:100%; }
.btn:disabled { opacity:.5; cursor:not-allowed; }

.card { background:var(--card); border:1px solid var(--border-light); border-radius:var(--radius); box-shadow:var(--shadow); padding:18px; margin-bottom:16px; }
.card h2 { font-size:16px; margin-bottom:14px; }
.card h3 { font-size:14px; margin-bottom:10px; }
.card-head { display:flex; align-items:center; justify-content:space-between; margin-bottom:14px; }
.card-head h2 { margin:0; }

.page-head { display:flex; align-items:center; justify-content:space-between; margin-bottom:18px; flex-wrap:wrap; gap:10px; }
.page-head h1 { font-size:20px; }

.badge { display:inline-block; padding:2px 9px; border-radius:10px; font-size:12px; white-space:nowrap; }
.badge.gray { background:#F1EAE0; color:#6B5D4D; }
.badge.blue { background:var(--blue-bg); color:#4A5A78; }
.badge.green { background:var(--ok-bg); color:var(--ok); }
.badge.orange { background:var(--warn-bg); color:var(--warn); }
.badge.red { background:var(--danger-bg); color:var(--danger); }

table.tbl { width:100%; border-collapse:collapse; font-size:13px; }
table.tbl th { text-align:left; padding:8px 10px; background:#F5F0E8; border-bottom:1px solid var(--border); color:var(--text2); font-weight:500; white-space:nowrap; }
table.tbl td { padding:8px 10px; border-bottom:1px solid var(--border-light); vertical-align:top; }
table.tbl tr:hover td { background:#FCFAF5; }
table.tbl tr.flow-grp td { background:#FAF6EE; font-weight:600; color:var(--primary-dark); font-size:12px; padding:6px 10px; border-bottom:1px solid var(--border-light); }
table.tbl tr.flow-grp:hover td { background:#FAF6EE; }
table.tbl .flow-sum { float:right; font-weight:500; color:var(--text2); }
.money { font-variant-numeric:tabular-nums; white-space:nowrap; }
.money.in { color:var(--ok); }
.money.out { color:var(--danger); }
.money.profit { color:var(--ok); font-weight:600; }
.money.loss { color:var(--danger); font-weight:600; }

/* 搜索栏 */
.toolbar { display:flex; gap:10px; margin-bottom:16px; flex-wrap:wrap; align-items:center; }
.toolbar input[type=text] { padding:8px 12px; border:1px solid var(--border); border-radius:8px; width:260px; font-size:13px; background:#fff; color:var(--text); }
.toolbar input[type=text]:focus { outline:none; border-color:var(--primary); }
.toolbar select { padding:7px 10px; border:1px solid var(--border); border-radius:8px; background:#fff; color:var(--text); font-size:13px; }

/* 设计师客户统计条（参考飞书数据看板，紧凑展示） */
.cust-stats { display:flex; gap:10px; flex-wrap:wrap; margin-bottom:14px; }
.cs-card { display:flex; align-items:baseline; gap:7px; background:var(--card); border:1px solid var(--border); border-radius:8px; padding:8px 15px; box-shadow:var(--shadow); }
.cs-card .k { font-size:12px; color:var(--muted); }
.cs-card .v { font-size:19px; font-weight:700; color:var(--text); font-variant-numeric:tabular-nums; }
.cs-card .v.blue { color:#4A5A78; }
.cs-card .v.green { color:var(--ok); }
.cs-card .v.orange { color:var(--primary-dark); }
.cs-card .v.red { color:var(--danger); }

/* 客户列表 */
.cust-grid { display:grid; grid-template-columns:repeat(auto-fill,minmax(300px,1fr)); gap:14px; }
.overdue-bar { display:flex; align-items:center; gap:12px; background:#FBF3EE; border:1px solid #E8C9B8; border-radius:10px; padding:10px 14px; margin:12px 0; color:#8A4B2E; }
.overdue-bar .od-ico { font-size:20px; }
.overdue-bar .od-grps { margin-top:4px; display:flex; flex-wrap:wrap; gap:6px; }
.overdue-bar .od-grp { background:#fff; border:1px solid #E8C9B8; border-radius:20px; padding:2px 10px; font-size:12px; color:#8A4B2E; }
.overdue-bar .od-grp b { color:var(--danger); }
.od-tag { margin-left:6px; font-size:11px; }
/* 客资：新分配提醒条 */
.kezi-alert { display:flex; align-items:center; gap:12px; background:#EFF6F3; border:1px solid #C5E0D6; border-radius:10px; padding:10px 14px; margin:0 0 12px; color:#2E6B52; }
.kezi-alert .od-ico { font-size:20px; }
.nav-badge { display:inline-block; min-width:18px; height:18px; line-height:18px; border-radius:9px; background:var(--danger); color:#fff; font-size:11px; text-align:center; padding:0 5px; margin-left:6px; vertical-align:middle; }
.sidebar nav a.has-new { color:#F3C969; }
.appr-grid { display:grid; grid-template-columns:repeat(auto-fill,minmax(280px,1fr)); gap:14px; }
.appr-card { display:flex; align-items:center; gap:14px; background:var(--card); border:1px solid var(--border); border-radius:12px; padding:16px 16px; box-shadow:var(--shadow); text-decoration:none; color:var(--text); transition:transform .12s, box-shadow .12s; }
.appr-card:hover { transform:translateY(-2px); box-shadow:0 6px 16px rgba(0,0,0,.08); }
.appr-ico { width:48px; height:48px; border-radius:12px; display:flex; align-items:center; justify-content:center; font-size:24px; flex:none; }
.appr-ico.blue { background:#E8F0FE; }
.appr-ico.green { background:#E6F4EA; }
.appr-txt { flex:1; display:flex; flex-direction:column; gap:3px; min-width:0; }
.appr-txt b { font-size:15px; }
.appr-txt em { font-style:normal; font-size:12px; color:var(--muted); }
.appr-arrow { color:var(--muted); font-size:20px; flex:none; }
.appr-list { display:flex; flex-direction:column; }
.appr-row { display:flex; align-items:flex-start; gap:12px; padding:12px 6px; border-bottom:1px solid var(--border); }
.appr-row:last-child { border-bottom:none; }
.appr-row-ico { font-size:22px; flex:none; }
.appr-row-main { flex:1; min-width:0; display:flex; flex-direction:column; gap:3px; }
.appr-row-main em { font-style:normal; font-size:12px; color:var(--muted); }
.appr-row-form { display:flex; flex-wrap:wrap; gap:4px 14px; margin-top:2px; }
.appr-row-form span { font-size:12px; color:#555; }
.appr-row-form b { color:var(--muted); font-weight:500; margin-right:3px; }
.appr-status { flex:none; font-size:12px; padding:3px 10px; border-radius:20px; background:#F3F4F6; color:#666; }
.appr-status.ok { background:#E6F4EA; color:#188038; }
.appr-status.no { background:#FDECEA; color:#C5221F; }
.appr-acts { flex:none; display:flex; gap:6px; }
/* 审批中心：待办/已办（飞书风格） */
.appr-tabs { display:flex; gap:8px; }
.appr-tab { border:1px solid var(--border); background:var(--card); color:var(--text); border-radius:20px; padding:6px 16px; font-size:13px; cursor:pointer; transition:all .15s; }
.appr-tab.active { background:var(--primary); border-color:var(--primary); color:#fff; }
.appr-tab b { font-weight:600; margin-left:5px; }
.appr-row { cursor:pointer; transition:background .12s; border-radius:8px; }
.appr-row:hover { background:#faf9f7; }
.appr-detail-head { display:flex; align-items:center; justify-content:space-between; gap:10px; margin-bottom:8px; }
.appr-detail-num { font-size:12px; color:var(--muted); margin-bottom:4px; }
.appr-detail-meta { font-size:12px; color:var(--muted); margin-bottom:4px; }
.appr-detail-sec { font-weight:600; font-size:13px; margin:14px 0 8px; padding-bottom:6px; border-bottom:1px solid var(--border-light); }
.appr-detail-rows { display:flex; flex-direction:column; gap:8px; }
.appr-detail-row { display:flex; font-size:13px; }
.appr-detail-row span { flex:none; width:110px; color:var(--muted); }
.appr-detail-row b { font-weight:500; }
.appr-flow { display:flex; flex-direction:column; gap:8px; }
.appr-flow-item { display:flex; justify-content:space-between; align-items:center; padding:9px 12px; border:1px solid var(--border-light); border-radius:8px; background:var(--card2); }
.appr-flow-item .node { font-size:12px; color:var(--muted); }
.appr-flow-item .val { font-size:13px; font-weight:500; }
.appr-flow-item.ok { border-color:#b7e0c0; background:#E6F4EA; }
.appr-flow-item.no { border-color:#f3c0bb; background:#FDECEA; }
.appr-cmt { flex-basis:100%; font-size:12px; color:var(--muted); font-style:normal; margin-top:6px; padding-top:6px; border-top:1px dashed var(--border-light); }

/* 收款单位记忆下拉 */
.payee-box { position:relative; }
.payee-drop { position:absolute; top:calc(100% + 4px); left:0; right:0; z-index:30; background:#fff; border:1px solid var(--border); border-radius:8px; max-height:220px; overflow:auto; box-shadow:0 6px 18px rgba(0,0,0,.10); }
.payee-item { padding:8px 12px; cursor:pointer; display:flex; flex-direction:column; gap:2px; }
.payee-item:hover { background:#f4f6fa; }
.payee-item b { font-size:13px; color:var(--text); }
.payee-item em { font-size:12px; color:var(--muted); font-style:normal; }
.payee-empty { padding:10px 12px; font-size:12px; color:var(--muted); }
/* 收款报送：明细行与上传区 */
.detail-row { display:grid; grid-template-columns:1fr 1fr 1fr auto; gap:8px; align-items:end; padding:10px; border:1px solid var(--border-light); border-radius:8px; margin-bottom:8px; background:var(--card2); }
.detail-row .k { font-size:12px; color:var(--muted); margin-bottom:4px; }
.detail-row input { padding:8px 10px; }
.detail-acts { display:flex; gap:4px; }
.upload-box { border:1px dashed var(--border); border-radius:8px; padding:14px; text-align:center; color:var(--muted); cursor:pointer; transition:all .15s; }
.upload-box:hover { border-color:var(--primary); background:#faf8f4; }
.upload-box b { color:var(--primary); font-size:22px; display:block; line-height:1; }
.upload-tip { font-size:11px; color:var(--muted); margin-top:4px; }
.file-list { margin-top:8px; display:flex; flex-direction:column; gap:4px; }
.file-item { display:flex; align-items:center; gap:8px; font-size:12px; background:var(--card2); border:1px solid var(--border-light); border-radius:6px; padding:5px 8px; }
.file-item .nm { flex:1; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.file-item .rm { cursor:pointer; color:#C5221F; flex:none; font-weight:700; }
.file-item .up-wrap { display:flex; flex-direction:column; flex:1; min-width:0; gap:3px; }
.file-item .up-top { display:flex; align-items:center; gap:8px; }
.file-item .up-bar { height:6px; border-radius:3px; background:#eee6d8; overflow:hidden; flex:1; }
.file-item .up-fill { height:100%; width:0; border-radius:3px; background:var(--primary); transition:width .2s; }
.file-item .up-pct { font-size:11px; color:var(--primary); font-weight:600; flex:none; width:34px; text-align:right; }
.file-item .up-st { font-size:11px; flex:none; }
.file-item .up-st.ok { color:#2e7d32; }
.file-item .up-st.fail { color:#C5221F; }
.file-item .up-st.busy { color:var(--muted); }
.file-item .up-st .spin { display:inline-block; width:10px; height:10px; border:2px solid var(--border); border-top-color:var(--primary); border-radius:50%; animation:upSpin .8s linear infinite; vertical-align:-1px; margin-right:4px; }
@keyframes upSpin { to { transform: rotate(360deg); } }
@media (max-width:640px) {
  .detail-row { grid-template-columns:1fr 1fr; }
  .detail-acts { grid-column:1/-1; justify-content:flex-end; }
}
.cust-card { background:var(--card); border-radius:var(--radius); box-shadow:var(--shadow); padding:16px; cursor:pointer; border:1px solid var(--border-light); transition:all .15s; }
.cust-card:hover { border-color:var(--primary); box-shadow:0 2px 12px rgba(176,141,87,.16); }
.cust-card .top { display:flex; justify-content:space-between; align-items:center; margin-bottom:8px; }
.cust-card .name { font-size:16px; font-weight:600; color:var(--text); }
.cust-card .meta { color:var(--muted); font-size:12px; line-height:1.9; }
.cust-card .meta b { color:var(--text2); font-weight:500; }
.empty { text-align:center; color:var(--muted); padding:48px 0; }

/* 客户详情 */
.detail-head { display:flex; align-items:center; gap:12px; flex-wrap:wrap; }
.detail-head h1 { font-size:22px; }
.info-grid { display:grid; grid-template-columns:repeat(auto-fill,minmax(220px,1fr)); gap:12px; }
.info-item { background:var(--card2); border:1px solid var(--border-light); border-radius:8px; padding:10px 12px; }
.info-item .k { font-size:12px; color:var(--muted); margin-bottom:4px; }
.info-item .v { font-size:14px; word-break:break-all; }

/* 时间线 */
.timeline { position:relative; padding-left:22px; }
.timeline::before { content:""; position:absolute; left:7px; top:4px; bottom:4px; width:2px; background:var(--border); }
.tl-item { position:relative; margin-bottom:16px; }
.tl-item::before { content:""; position:absolute; left:-21px; top:5px; width:10px; height:10px; border-radius:50%; background:var(--primary); border:2px solid #fff; box-shadow:0 0 0 2px var(--primary-bg); }
.tl-item .date { font-size:12px; color:var(--muted); }
.tl-item .content { margin-top:3px; font-size:14px; line-height:1.7; white-space:pre-wrap; }
.tl-item .who { font-size:12px; color:var(--muted); margin-top:2px; }

/* 订单卡 */
.order-card { border:1px solid var(--border); border-radius:var(--radius); margin-bottom:14px; overflow:hidden; background:var(--card); }
.order-head { display:flex; align-items:center; gap:10px; padding:12px 16px; background:var(--card2); border-bottom:1px solid var(--border); flex-wrap:wrap; }
.order-head .title { font-size:15px; font-weight:600; }
.order-body { padding:14px 16px; }
.section-title { font-size:13px; font-weight:600; color:var(--text2); margin:12px 0 8px; }
.section-title:first-child { margin-top:0; }
.profit-grid { display:grid; grid-template-columns:repeat(auto-fit,minmax(130px,1fr)); gap:10px; margin-top:8px; }
.profit-cell { background:var(--card2); border:1px solid var(--border-light); border-radius:8px; padding:10px 12px; text-align:center; }
.profit-cell .k { font-size:12px; color:var(--muted); }
.profit-cell .v { font-size:16px; font-weight:600; margin-top:4px; }
.profit-note { font-size:12px; color:var(--muted); margin-top:8px; }

/* 统计卡（财务页） */
.stat-grid { display:grid; grid-template-columns:repeat(auto-fit,minmax(160px,1fr)); gap:14px; margin-bottom:18px; }
.stat-card { background:var(--card); border:1px solid var(--border-light); border-radius:var(--radius); box-shadow:var(--shadow); padding:16px; text-align:center; }
.stat-card .k { font-size:12px; color:var(--muted); }
.stat-card .v { font-size:20px; font-weight:700; margin-top:6px; }

/* 弹窗 */
.modal-mask { position:fixed; inset:0; background:rgba(58,44,28,.45); display:flex; align-items:flex-start; justify-content:center; padding:6vh 16px; z-index:100; overflow:auto; }
.modal { background:var(--panel); border-radius:12px; width:560px; max-width:100%; box-shadow:0 16px 50px rgba(60,45,25,.22); }
.modal-head { display:flex; justify-content:space-between; align-items:center; padding:14px 20px; border-bottom:1px solid var(--border); }
.modal-head h3 { font-size:15px; }
.modal-body { padding:18px 20px; max-height:65vh; overflow:auto; }
.modal-foot { padding:12px 20px; border-top:1px solid var(--border); display:flex; justify-content:flex-end; gap:10px; }
.close-x { border:none; background:none; font-size:18px; cursor:pointer; color:var(--muted); line-height:1; }
.form-grid { display:grid; grid-template-columns:1fr 1fr; gap:12px 14px; }
.form-grid .full { grid-column:1 / -1; }
.form-grid label { display:block; font-size:12px; color:var(--text2); margin-bottom:4px; }
.form-grid input,.form-grid select,.form-grid textarea { width:100%; padding:8px 10px; border:1px solid var(--border); border-radius:8px; font-size:14px; background:#fff; color:var(--text); }
.form-grid input:focus,.form-grid select:focus,.form-grid textarea:focus { outline:none; border-color:var(--primary); box-shadow:0 0 0 2px var(--primary-bg); }

/* 按住说话（语音消息） */
.talk-row { display:flex; align-items:center; gap:10px; margin-top:8px; }
.talk-btn { display:inline-flex; align-items:center; gap:6px; padding:8px 18px; border:1px solid var(--primary); border-radius:20px; background:var(--primary-bg); color:var(--primary); font-size:14px; cursor:pointer; touch-action:none; -webkit-user-select:none; user-select:none; -webkit-touch-callout:none; transition:all .15s; }
.talk-btn:hover { background:var(--primary); color:#fff; }
.talk-btn.listening { background:#d93025; border-color:#d93025; color:#fff; animation:talkPulse 1.1s infinite; }
@keyframes talkPulse { 50% { opacity:.6; transform:scale(1.03); } }
.talk-btn { -webkit-user-select:none; user-select:none; -webkit-touch-callout:none; touch-action:none; }
.talk-btn.recording, .btn.recording { background:#c0392b !important; color:#fff !important; animation: recPulse 1s infinite; }
@keyframes recPulse { 0%,100% { opacity:1; } 50% { opacity:.55; } }
.talk-hint { color:var(--muted); font-size:12px; }
.upload-audio-btn { position:relative; overflow:hidden; }
.voice-preview { margin-top:8px; padding:10px 12px; background:#f6f8f4; border:1px dashed var(--primary); border-radius:10px; }
.voice-preview-tip { font-size:12px; color:var(--muted); margin-top:6px; }
/* 微信式语音条 */
.voice-bar { display:flex; align-items:center; gap:8px; max-width:340px; margin:6px 0; padding:8px 12px; background:var(--primary-bg); border-radius:10px; }
.voice-play { width:34px; height:34px; flex:0 0 34px; border-radius:50%; border:none; background:var(--primary); color:#fff; font-size:13px; cursor:pointer; display:inline-flex; align-items:center; justify-content:center; }
.voice-play.playing { background:#d93025; }
.voice-track { flex:1; height:4px; background:#e6dccb; border-radius:2px; overflow:hidden; }
.voice-fill { display:block; height:100%; width:0; background:var(--primary); border-radius:2px; }
.voice-dur { font-size:12px; color:var(--text2); min-width:26px; text-align:right; }
/* AI 谈单整理 */
.ai-status { font-size:12px; color:var(--muted); margin:6px 0 2px; }
.ai-box { margin:8px 0 2px; padding:12px 14px; background:#f6f8f4; border:1px solid var(--border); border-radius:10px; }
.ai-sec { margin-bottom:8px; }
.ai-sec:last-child { margin-bottom:0; }
.ai-sec b { display:block; font-size:12px; color:var(--primary); margin-bottom:4px; }
.ai-sec ul { margin:0; padding-left:18px; font-size:13px; line-height:1.7; color:var(--text); }
.ai-sec li { margin-bottom:2px; }
.ai-sec .ai-kv { display:flex; flex-direction:column; gap:3px; margin-top:2px; }
.ai-sec .ai-kv-row { display:flex; gap:8px; font-size:13px; line-height:1.6; }
.ai-sec .ai-k { flex:0 0 auto; min-width:72px; color:var(--muted); font-weight:600; }
.ai-sec .ai-v { color:var(--text); }

/* toast */
#toast-root { position:fixed; top:20px; left:50%; transform:translateX(-50%); z-index:200; display:flex; flex-direction:column; gap:8px; align-items:center; }
.toast { background:#4A3A2C; color:#fff; padding:9px 18px; border-radius:8px; font-size:13px; box-shadow:0 4px 16px rgba(60,45,25,.22); animation:fadeIn .2s; }
.toast.err { background:var(--danger); }
@keyframes fadeIn { from{opacity:0; transform:translateY(-6px);} to{opacity:1; transform:translateY(0);} }

/* 用户管理 */
.user-row { display:flex; align-items:center; justify-content:space-between; padding:12px 0; border-bottom:1px solid var(--border-light); gap:10px; flex-wrap:wrap; }
.user-row:last-child { border-bottom:none; }
.user-info b { font-size:14px; }
.user-info .sub { font-size:12px; color:var(--muted); margin-top:2px; }

/* ===== 内部文件 ===== */
.files-layout { display:flex; gap:14px; align-items:flex-start; }
.files-tree { flex:0 0 250px; background:var(--card); border:1px solid var(--border); border-radius:12px; padding:10px; }
.files-tree .tree-title { font-size:13px; font-weight:600; color:var(--muted); padding:6px 8px 10px; border-bottom:1px solid var(--border-light); margin-bottom:6px; }
.tree-row { display:flex; align-items:center; gap:6px; padding:7px 8px; border-radius:8px; cursor:pointer; font-size:13px; }
.tree-row:hover { background:var(--bg); }
.tree-row.sel { background:var(--primary-soft, #f3ede5); color:var(--primary); font-weight:600; }
.tree-ico { flex:0 0 auto; }
.tree-name { flex:1 1 auto; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.tree-acts { display:flex; gap:2px; opacity:0; transition:opacity .15s; }
.tree-row:hover .tree-acts { opacity:1; }
button.mini { border:none; background:transparent; cursor:pointer; font-size:13px; padding:2px 3px; border-radius:5px; }
button.mini:hover { background:var(--border-light); }
button.mini.danger:hover { background:#fbe9e7; }
.files-main { flex:1 1 auto; min-width:0; background:var(--card); border:1px solid var(--border); border-radius:12px; padding:14px; }
.file-crumbs { font-size:13px; color:var(--muted); padding:2px 2px 12px; border-bottom:1px solid var(--border-light); margin-bottom:12px; }
.crumb-root, .crumb { cursor:pointer; color:var(--primary); }
.crumb-root:hover, .crumb:hover { text-decoration:underline; }
.crumb-sep { color:var(--border); margin:0 4px; }
.sub-grid { display:grid; grid-template-columns:repeat(auto-fill,minmax(180px,1fr)); gap:10px; margin-bottom:14px; }
.sub-card { border:1px solid var(--border); border-radius:10px; padding:12px; cursor:pointer; display:flex; flex-direction:column; gap:6px; transition:box-shadow .15s, border-color .15s; }
.sub-card:hover { border-color:var(--primary); box-shadow:0 3px 10px rgba(60,45,25,.08); }
.sub-ico { font-size:22px; }
.sub-name { font-size:13px; font-weight:600; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.sub-perm { font-size:11px; color:var(--muted); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.file-head { display:flex; justify-content:space-between; align-items:center; gap:10px; flex-wrap:wrap; font-size:13px; font-weight:600; padding:2px 2px 8px; }
.file-hint { font-size:11px; color:var(--muted); font-weight:400; }
.file-hint b { color:var(--text); }
.file-list { display:flex; flex-direction:column; gap:6px; }
.file-row { display:flex; align-items:center; gap:10px; padding:9px 10px; border:1px solid var(--border-light); border-radius:8px; font-size:13px; }
.file-row:hover { border-color:var(--border); background:var(--bg); }
.file-ico { flex:0 0 auto; font-size:16px; }
.file-name { flex:1 1 auto; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; font-weight:500; }
.file-size { flex:0 0 auto; width:76px; text-align:right; color:var(--muted); font-size:12px; }
.file-time { flex:0 0 auto; width:118px; color:var(--muted); font-size:12px; }
.file-acts { flex:0 0 auto; display:flex; gap:6px; }
.file-tip { font-size:12px; color:var(--muted); align-self:center; }
.file-tip b { color:var(--text); }
.perm-tip { font-size:12px; color:var(--muted); margin-bottom:10px; }
.perm-list { max-height:300px; overflow:auto; display:flex; flex-direction:column; gap:4px; }
.perm-row { display:flex; align-items:center; gap:8px; padding:7px 8px; border-radius:8px; cursor:pointer; font-size:13px; }
.perm-row:hover { background:var(--bg); }
@media (max-width:760px) {
  .files-layout { flex-direction:column; }
  .files-tree { flex:1 1 auto; width:100%; }
  .file-time { display:none; }
  .file-size { width:60px; }
}
.user-ops { display:flex; gap:8px; }

.tag { display:inline-block; padding:1px 8px; border-radius:4px; font-size:12px; background:#F1EAE0; color:#6B5D4D; margin-right:6px; }
.responsive-table { overflow-x:auto; }

/* 输入框通用 */
input,select,textarea { background:#fff; color:var(--text); border:1px solid var(--border); }
input::placeholder,textarea::placeholder { color:#B5A894; }
select:focus,input:focus,textarea:focus { outline:none; border-color:var(--primary); }

/* 移动端汉堡菜单 */
.menu-toggle,.menu-close { display:none; }
@media (max-width:900px){
  .menu-toggle { display:block; position:fixed; top:12px; left:12px; z-index:30; width:42px; height:42px; border:none; border-radius:10px; background:#4A3A2C; color:#F5E9D2; font-size:20px; cursor:pointer; box-shadow:0 2px 10px rgba(0,0,0,.25); }
  .menu-close { display:block; position:absolute; top:10px; right:10px; width:36px; height:36px; border:none; background:rgba(255,255,255,.1); color:#F5E9D2; font-size:22px; line-height:1; border-radius:8px; cursor:pointer; }
  .menu-close:hover { background:rgba(255,255,255,.2); }
  .sidebar { display:flex; transform:translateX(-100%); transition:transform .25s ease; width:250px; z-index:40; box-shadow:0 0 28px rgba(0,0,0,.4); }
  .brand { padding-right:52px; }
  body.menu-open .sidebar { transform:translateX(0); }
  body.menu-open::after { content:''; position:fixed; inset:0; background:rgba(0,0,0,.42); z-index:35; }
  .main { margin-left:0; padding:64px 14px 20px; }
  .menu-toggle:focus { outline:none; }
}
@media (min-width:901px){ .sidebar{ transform:none; } }

/* 状态选项管理 */
.status-opt-list { display:flex; flex-direction:column; gap:6px; margin-top:10px; }
.status-opt-item { display:flex; align-items:center; gap:10px; padding:8px 12px; background:var(--bg); border:1px solid var(--border); border-radius:8px; cursor:grab; }
.status-opt-item.dragging { opacity:.5; border-style:dashed; }
.status-opt-item.drop-before { border-top:2px solid var(--primary); }
.status-opt-item.drop-after { border-bottom:2px solid var(--primary); }
.status-opt-item .drag-handle { color:var(--muted); font-size:16px; cursor:grab; user-select:none; }
.status-opt-item .so-name { flex:1; font-weight:600; font-size:14px; }
.status-opt-item .so-btns { display:flex; gap:6px; }
.status-opt-add { display:flex; gap:8px; margin-top:10px; }
.status-opt-add input { flex:1; padding:8px 10px; border:1px solid var(--border); border-radius:8px; font-size:14px; box-sizing:border-box; }

/* ============================================================
   样式A · 暖橙模块化（客户档案页 + 全局侧栏升级）
   接入时间：2026-09-16
   ============================================================ */
:root{
  --warm-bg:#FAF3E9; --warm-card:#FFFFFF; --warm-ink:#3A2E22;
  --warm-muted:#A89B8A; --warm-line:#EFE4D3; --warm-orange:#E8833A;
  --warm-orange-deep:#C96A24; --warm-amber:#F6E7CE;
}

/* ---- 全局暖底 ---- */
body{ background:linear-gradient(160deg,#FAF3E9 0%,#F5E9D8 55%,#F1E2CC 100%); background-attachment:fixed; }

/* ---- 窄图标侧栏 ---- */
.sidebar{
  width:78px; background:linear-gradient(180deg,#3E3126 0%,#2E251C 100%);
  color:#EFE5D4; display:flex; flex-direction:column; position:fixed;
  top:0; bottom:0; left:0; z-index:20; box-shadow:2px 0 18px rgba(60,40,20,.12);
}
.sidebar .brand{
  padding:20px 0 14px; font-size:0; border-bottom:1px solid rgba(255,255,255,.08);
  text-align:center; letter-spacing:0;
}
.sidebar .brand-logo{
  display:inline-block; font-size:13px; font-weight:800; letter-spacing:1px;
  color:#F5E9D2; background:rgba(255,255,255,.08); border:1px solid rgba(255,255,255,.14);
  padding:6px 8px; border-radius:10px;
}
.sidebar nav{ padding:14px 0; flex:1; display:flex; flex-direction:column; gap:2px; }
.sidebar nav a{
  display:flex; flex-direction:column; align-items:center; gap:5px;
  padding:12px 0 10px; color:#C9B89C; font-size:10.5px; letter-spacing:.3px;
  border-left:3px solid transparent; transition:all .15s; text-decoration:none;
}
.sidebar nav a svg{ width:22px; height:22px; stroke:currentColor; }
.sidebar nav a:hover{ background:rgba(255,255,255,.07); color:#fff; }
.sidebar nav a.active{
  background:linear-gradient(90deg,rgba(232,131,58,.32),rgba(232,131,58,.06));
  border-left-color:#E8833A; color:#FFD9B8;
}
.sidebar nav a .hidden{ display:none; }
.sidebar-foot{ padding:12px 8px; border-top:1px solid rgba(255,255,255,.08); text-align:center; }
.sidebar-foot #me-info{ margin-bottom:10px; line-height:1.6; color:#C9B89C; font-size:11px; }
.sidebar-foot #me-info strong{ color:#fff; display:block; font-size:12px; }
.sidebar-foot .btn{ font-size:11px; padding:6px 10px; width:100%; border-color:rgba(255,255,255,.2); color:#EFE5D4; background:transparent; border-radius:8px; cursor:pointer; }
.main{ flex:1; margin-left:78px; padding:22px 26px; min-width:0; }

/* ---- 页面头 ---- */
.page-head{ display:flex; align-items:center; gap:12px; flex-wrap:wrap; margin-bottom:16px; }
.page-head h1{ font-size:22px; font-weight:800; color:var(--warm-ink); letter-spacing:.3px; }
.page-sub{ font-size:12px; color:var(--warm-muted); letter-spacing:.4px; }
.btn-new{
  margin-left:auto; background:linear-gradient(135deg,#F09A55,#E06A22);
  color:#fff; border:0; border-radius:10px; padding:10px 18px;
  font-size:13.5px; font-weight:700; cursor:pointer; font-family:inherit;
  box-shadow:0 6px 16px rgba(224,106,34,.32); transition:all .15s;
}
.btn-new:hover{ transform:translateY(-1px); box-shadow:0 8px 20px rgba(224,106,34,.42); }

/* ---- 毛玻璃筛选条 ---- */
.filterbar{
  display:flex; align-items:center; gap:10px; flex-wrap:wrap;
  background:rgba(255,255,255,.72); backdrop-filter:blur(14px);
  border:1px solid rgba(255,255,255,.85); border-radius:16px;
  padding:12px 16px; margin-bottom:16px; box-shadow:0 6px 22px rgba(120,80,30,.07);
}
.filterbar .search{
  flex:1; min-width:220px; display:flex; align-items:center; gap:8px;
  background:#fff; border:1px solid var(--warm-line); border-radius:11px; padding:9px 13px;
}
.filterbar .search svg{ width:15px; height:15px; stroke:#B9AB97; flex:none; }
.filterbar .search input{ border:0; outline:0; background:transparent; flex:1; font-size:13px; font-family:inherit; color:var(--warm-ink); }
.filterbar .search input::placeholder{ color:#BFB29D; }
.filterbar .sel{
  border:1px solid var(--warm-line); background:#fff; border-radius:11px;
  padding:9px 13px; font-size:12.5px; color:#6B5D4A; font-family:inherit;
  outline:0; cursor:pointer; min-width:118px;
}
.filterbar .sel:focus{ border-color:#E8833A; }

/* ---- 6宫格统计卡 ---- */
.stats{ display:grid; grid-template-columns:repeat(6,1fr); gap:13px; margin-bottom:16px; }
.stat{
  background:#fff; border-radius:16px; padding:16px 15px 13px;
  box-shadow:0 6px 18px rgba(120,80,30,.06); border:1px solid rgba(255,255,255,.9);
  position:relative; overflow:hidden; transition:all .18s;
}
.stat::before{ content:''; position:absolute; top:0; left:0; right:0; height:3.5px; }
.stat.c1::before{ background:linear-gradient(90deg,#E8833A,#F5B87E); }
.stat.c2::before{ background:linear-gradient(90deg,#57A06B,#8CCB9B); }
.stat.c3::before{ background:linear-gradient(90deg,#4E7CB3,#7FA8D4); }
.stat.c4::before{ background:linear-gradient(90deg,#7A6BB0,#A99BD6); }
.stat.c5::before{ background:linear-gradient(90deg,#B3794E,#D6A87F); }
.stat.c6::before{ background:linear-gradient(90deg,#C0554B,#E08B7E); }
.stat:hover{ transform:translateY(-2px); box-shadow:0 10px 24px rgba(120,80,30,.12); }
.stat .ico{
  width:34px; height:34px; border-radius:10px; display:flex; align-items:center; justify-content:center;
  background:#FBF1E4; margin-bottom:10px;
}
.stat .ico svg{ width:18px; height:18px; stroke:#C96A24; }
.stat.c2 .ico{ background:#EEF6EF; } .stat.c2 .ico svg{ stroke:#3E8A54; }
.stat.c3 .ico{ background:#EDF3FA; } .stat.c3 .ico svg{ stroke:#3D6FA8; }
.stat.c4 .ico{ background:#F1EEF9; } .stat.c4 .ico svg{ stroke:#6A5AA6; }
.stat.c5 .ico{ background:#F8EFE6; } .stat.c5 .ico svg{ stroke:#A06A3E; }
.stat.c6 .ico{ background:#FBEEEC; } .stat.c6 .ico svg{ stroke:#B0483E; }
.stat .lab{ font-size:11.5px; color:var(--warm-muted); margin-bottom:6px; letter-spacing:.3px; }
.stat .num{ font-size:27px; font-weight:800; color:var(--warm-ink); line-height:1; font-variant-numeric:tabular-nums; }
.stat .tag{
  display:inline-block; margin-top:8px; font-size:10.5px; color:#B0895C;
  background:#FCF4E8; border-radius:6px; padding:2px 7px;
}

/* ---- 琥珀预警条 ---- */
.alert{
  background:linear-gradient(90deg,#FFF9EE,#FFF3DF);
  border:1px solid #F3DDB4; border-radius:14px; padding:12px 17px;
  display:flex; align-items:center; gap:12px; flex-wrap:wrap; margin-bottom:16px;
  box-shadow:0 4px 14px rgba(200,140,40,.08);
}
.alert .dot{ width:9px; height:9px; border-radius:50%; background:#E8833A; flex:none; box-shadow:0 0 0 4px rgba(232,131,58,.18); }
.alert .txt{ font-size:13.5px; font-weight:800; color:#9A6A2E; flex:none; }
.alert .list{ display:flex; gap:6px; flex-wrap:wrap; flex:1; }
.alert .chip{
  font-size:11.5px; background:#fff; color:#A8763A; border:1px solid #F1DCB6;
  border-radius:20px; padding:3px 10px; display:inline-flex; align-items:center; gap:3px;
}
.alert .chip b{ font-weight:800; color:#D06A1F; }
.alert .only{
  flex:none; font-size:12px; color:#C96A24; background:#FFF6E8;
  border:1px solid #F0D4A4; border-radius:9px; padding:7px 13px; cursor:pointer;
  font-family:inherit; font-weight:700;
}
.alert .only:hover{ background:#FDEBD0; }

/* ---- 客户卡片网格 ---- */
.grid{ display:grid; grid-template-columns:repeat(auto-fill,minmax(300px,1fr)); gap:14px; }
.cust{
  background:#fff; border-radius:16px; padding:16px 17px 13px; cursor:pointer;
  border:1px solid rgba(255,255,255,.95); box-shadow:0 5px 16px rgba(120,80,30,.06);
  transition:all .18s;
}
.cust:hover{ transform:translateY(-2px); border-color:#F0D9B8; box-shadow:0 10px 24px rgba(120,80,30,.13); }
.cust .row1{ display:flex; align-items:center; justify-content:space-between; margin-bottom:11px; gap:8px; }
.cust .name{ font-size:15.5px; font-weight:800; color:var(--warm-ink); display:flex; align-items:center; gap:7px; }
.cust .name .mark{ font-size:10px; color:#D06A1F; background:#FDEBD0; padding:2px 7px; border-radius:6px; font-weight:700; }
.cust .warn{ font-size:10px; color:#C0554B; background:#FDECEC; padding:2px 7px; border-radius:6px; font-weight:700; }
.cust .row2{ display:flex; flex-direction:column; gap:6px; }
.cust .line{ font-size:12px; color:#8C7E6B; display:flex; align-items:center; gap:7px; }
.cust .line svg{ width:13px; height:13px; stroke:#C9B89C; flex:none; }
.cust .line b{ color:#5C4E3C; font-weight:600; }
.cust .foot{
  margin-top:12px; padding-top:10px; border-top:1px solid #F4EBDC;
  display:flex; align-items:center; justify-content:space-between; font-size:11px; color:#B3A48E;
}
.cust .foot .act{ color:#C96A24; font-weight:700; }

/* ---- 状态徽章（样式A配色，覆盖旧 badge） ---- */
.badge{
  font-size:11px; font-weight:700; padding:3.5px 11px; border-radius:20px;
  display:inline-flex; align-items:center; flex:none;
}
.badge.gray,.badge[data-s="跟踪"],.badge[data-s="重点跟踪"],.badge[data-s="有流失风险"]{ background:#F6F1E9; color:#8A7A63; }
.badge.green,.badge[data-s="定金"]{ background:#EAF4EC; color:#4E8A5C; }
.badge.blue,.badge[data-s="设计合同"]{ background:#EBF1F9; color:#3D6FA8; }
.badge[data-s="施工合同"],.badge[data-s="施工中"],.badge[data-s="已完工"]{ background:#E8F1FB; color:#2F6BA8; }
.badge.red,.badge[data-s="死单"],.badge[data-s="无效"]{ background:#FBE9E7; color:#B8483E; }

/* ---- 当月签单区块 ---- */
#month-signed .card{ background:#fff; border-radius:16px; padding:18px; box-shadow:0 5px 16px rgba(120,80,30,.06); border:1px solid rgba(255,255,255,.9); }
#month-signed .card-head{ display:flex; align-items:baseline; justify-content:space-between; margin-bottom:14px; }
#month-signed .card-head h2{ font-size:15.5px; font-weight:800; color:var(--warm-ink); }

/* ---- 移动端适配 ---- */
@media (max-width:1240px){ .stats{ grid-template-columns:repeat(3,1fr); } }
@media (max-width:900px){
  .sidebar{ width:250px; z-index:40; }
  .sidebar nav a{ flex-direction:row; justify-content:flex-start; padding:13px 20px; font-size:14px; gap:12px; border-left:3px solid transparent; }
  .sidebar nav a svg{ width:20px; height:20px; }
  .sidebar .brand{ font-size:16px; text-align:left; padding:20px 20px 14px; }
  .sidebar .brand-logo{ font-size:15px; }
  .main{ margin-left:0; }
}
@media (max-width:680px){
  .stats{ grid-template-columns:repeat(2,1fr); gap:10px; }
  .filterbar{ padding:11px 13px; }
  .filterbar .search{ min-width:100%; }
  .grid{ grid-template-columns:1fr; }
  .main{ padding:60px 13px 40px; }
}


/* ===== 装修工地监控 ===== */
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(310px,1fr));gap:14px}
.site-card{background:var(--card);border:1px solid var(--line);border-radius:16px;padding:16px 16px 14px;box-shadow:0 2px 14px rgba(80,55,20,.07);cursor:pointer;transition:.2s;position:relative;overflow:hidden}
.site-card:hover{transform:translateY(-2px);box-shadow:0 6px 20px rgba(80,55,20,.12)}
.site-card .top{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px}
.site-card .name{font-size:15.5px;font-weight:800}
.site-card .name small{font-weight:500;color:var(--ink2);font-size:12px;margin-left:4px}
.badge{display:inline-flex;align-items:center;gap:5px;font-size:11.5px;font-weight:700;padding:4px 10px;border-radius:20px}
.badge .dot{width:7px;height:7px;border-radius:50%}
.badge.on{background:rgba(62,155,91,.12);color:#3E9B5B}
.badge.on .dot{background:#3E9B5B;box-shadow:0 0 0 3px rgba(62,155,91,.18);animation:sitePulse 1.6s infinite}
.badge.off{background:rgba(154,148,140,.14);color:#9A948C}
.badge.off .dot{background:#9A948C}
@keyframes sitePulse{0%,100%{opacity:1}50%{opacity:.45}}
.site-card .row{display:flex;justify-content:space-between;align-items:center;font-size:13px;color:var(--ink2);padding:5px 0}
.site-card .row b{color:var(--ink);font-weight:600}
.stage{display:flex;align-items:center;gap:8px;margin-top:8px;background:#FBF7EF;border-radius:10px;padding:8px 10px}
.stage .tag{font-size:12px;font-weight:700;color:var(--primary-dark);background:var(--primary-bg);padding:3px 9px;border-radius:7px;white-space:nowrap}
.stage .bar{flex:1;height:6px;background:#EFE3D0;border-radius:4px;overflow:hidden}
.stage .bar i{display:block;height:100%;border-radius:4px;background:linear-gradient(90deg,#D4B27C,#B08D57);transition:width .5s}
.stage .pct{font-size:13px;font-weight:800;color:var(--primary-dark)}
.site-card .foot{display:flex;justify-content:space-between;align-items:center;margin-top:11px;padding-top:10px;border-top:1px dashed var(--line)}
.site-card .who{font-size:12.5px;color:var(--ink2)}
.site-card .who b{color:var(--ink);font-weight:600}
.site-card .go{font-size:12.5px;font-weight:700;color:var(--primary-dark)}
.site-card.offline .stage .bar i{background:linear-gradient(90deg,#CFC9BF,#B7B0A6)}
.site-toolbar{display:flex;gap:10px;align-items:center;background:var(--card);border:1px solid var(--line);border-radius:14px;padding:12px;margin-bottom:16px;box-shadow:0 2px 14px rgba(80,55,20,.07);flex-wrap:wrap}
.site-toolbar input{flex:1;min-width:180px;border:1px solid var(--line);border-radius:10px;padding:9px 13px;font-size:13.5px;background:#FDFAF4;outline:none;transition:.2s}
.site-toolbar input:focus{border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-bg)}
.site-tabs{display:flex;gap:6px;background:#F3EADC;border-radius:10px;padding:4px}
.site-tabs button{border:none;background:transparent;padding:7px 16px;border-radius:8px;font-size:13px;color:var(--ink2);cursor:pointer;font-weight:600;transition:.2s}
.site-tabs button.active{background:#fff;color:var(--ink);box-shadow:0 1px 6px rgba(80,55,20,.1)}
.site-tabs button .n{font-weight:800;margin-left:3px}
.site-tabs button.active .n{color:var(--primary-dark)}

/* 监控页 */
.monitor-wrap{display:flex;flex-direction:column;gap:14px}
.mon-head{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap}
.mon-head .back{display:inline-flex;align-items:center;gap:6px;border:none;background:var(--card);border:1px solid var(--line);padding:8px 14px;border-radius:10px;cursor:pointer;font-size:13px;font-weight:600;color:var(--ink);box-shadow:0 2px 14px rgba(80,55,20,.07)}
.mon-head .site-switch{display:flex;align-items:center;gap:8px;background:var(--card);border:1px solid var(--line);border-radius:12px;padding:6px 8px;box-shadow:0 2px 14px rgba(80,55,20,.07)}
.mon-head .site-switch button{border:none;background:var(--primary-bg);color:var(--primary-dark);width:34px;height:34px;border-radius:9px;font-size:17px;cursor:pointer;font-weight:800}
.mon-head .site-switch button:disabled{opacity:.35;cursor:not-allowed}
.mon-head .site-switch .cur{font-size:14.5px;font-weight:800;min-width:200px;text-align:center}
.mon-head .site-switch .cur small{display:block;font-size:11px;color:var(--ink2);font-weight:500;margin-top:2px}
.video-box{position:relative;background:#141210;border-radius:18px;overflow:hidden;aspect-ratio:16/10;box-shadow:0 8px 30px rgba(20,10,5,.25)}
.video-box .cam-view{position:absolute;inset:0}
.video-box .cam-view .grid-overlay{position:absolute;inset:0;background-image:linear-gradient(rgba(255,255,255,.05) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.05) 1px,transparent 1px);background-size:60px 60px}
.video-box .cam-view .scene{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;flex-direction:column;gap:10px;color:#D8CDBE}
.video-box .cam-view .scene svg{width:64px;height:64px;color:#8A7A66}
.video-box .cam-view .scene .cam-tag{font-size:15px;font-weight:700;letter-spacing:2px;color:#C9BBA5}
.video-box .cam-view .scene .cam-sub{font-size:12px;color:#7A6F5F}
.video-box .v-meta{position:absolute;top:12px;left:14px;right:14px;display:flex;justify-content:space-between;align-items:center;z-index:5}
.video-box .live{display:inline-flex;align-items:center;gap:6px;background:rgba(10,10,10,.55);backdrop-filter:blur(6px);color:#fff;font-size:11.5px;font-weight:700;padding:5px 11px;border-radius:20px}
.video-box .live .dot{width:8px;height:8px;border-radius:50%;background:#3FBF6E;box-shadow:0 0 0 3px rgba(63,191,110,.3);animation:sitePulse 1.4s infinite}
.video-box .rec{display:inline-flex;align-items:center;gap:6px;background:rgba(10,10,10,.55);backdrop-filter:blur(6px);color:#fff;font-size:11.5px;padding:5px 11px;border-radius:20px}
.video-box .rec .dot{width:8px;height:8px;border-radius:50%;background:#E5484D;animation:sitePulse 1s infinite}
.video-box .v-time{position:absolute;bottom:12px;right:14px;background:rgba(10,10,10,.55);backdrop-filter:blur(6px);color:#fff;font-size:12px;padding:4px 10px;border-radius:8px;font-variant-numeric:tabular-nums;z-index:5}
.video-box .v-badge{position:absolute;bottom:12px;left:14px;z-index:5;font-size:11.5px;color:#E8D9BF;background:rgba(10,10,10,.45);padding:4px 10px;border-radius:8px}
.video-box .fs-btn{position:absolute;top:12px;left:50%;transform:translateX(-50%);z-index:6;display:inline-flex;align-items:center;gap:6px;background:rgba(10,10,10,.55);backdrop-filter:blur(6px);color:#fff;border:none;font-size:12px;font-weight:700;padding:6px 14px;border-radius:20px;cursor:pointer}
.video-box .fs-btn svg{width:14px;height:14px}
.video-box .fs-btn:hover{background:rgba(176,141,87,.75)}
.video-box:fullscreen{border-radius:0;aspect-ratio:auto;height:100vh;width:100vw}
.control-row{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.ctrl-card{background:var(--card);border:1px solid var(--line);border-radius:16px;padding:16px;box-shadow:0 2px 14px rgba(80,55,20,.07)}
.ctrl-card h3{font-size:14px;font-weight:800;margin-bottom:12px;display:flex;align-items:center;gap:7px}
.ctrl-card h3 svg{width:17px;height:17px;color:var(--primary-dark)}
.ptz{display:grid;grid-template-columns:repeat(3,1fr);grid-template-rows:repeat(3,auto);gap:8px;max-width:230px;margin:0 auto}
.ptz button{border:none;background:#F5ECDD;color:var(--primary-dark);border-radius:10px;height:44px;font-size:18px;cursor:pointer;transition:.15s;font-weight:700}
.ptz button:active{background:var(--primary);color:#fff}
.ptz .up{grid-column:2}
.ptz .down{grid-column:2}
.ptz .left{grid-column:1;grid-row:2}
.ptz .right{grid-column:3;grid-row:2}
.ptz .center{grid-column:2;grid-row:2;background:#E7D6BC;font-size:12px}
.ptz button:disabled{opacity:.35}
.call-actions{display:flex;flex-direction:column;gap:10px}
.call-actions .big{display:flex;align-items:center;gap:10px;border:none;border-radius:14px;padding:14px;font-size:14px;font-weight:700;cursor:pointer;transition:.2s;justify-content:center}
.call-actions .big.call{background:linear-gradient(120deg,#3E9B5B,#2F7D46);color:#fff;box-shadow:0 4px 14px rgba(62,155,91,.3)}
.call-actions .big.hang{background:linear-gradient(120deg,#C0452E,#A13422);color:#fff;box-shadow:0 4px 14px rgba(192,69,46,.3)}
.call-actions .big svg{width:20px;height:20px}
.call-actions .hint{font-size:12px;color:var(--ink2);text-align:center;line-height:1.6}
.call-actions .share-row{display:flex;gap:8px}
.call-actions .share-row .btn{flex:1}
.calling-banner{display:none;align-items:center;gap:10px;background:linear-gradient(120deg,rgba(62,155,91,.14),rgba(62,155,91,.06));border:1px solid rgba(62,155,91,.35);border-radius:12px;padding:10px 14px;font-size:13px;font-weight:700;color:#2F7D46}
.calling-banner .dot{width:9px;height:9px;border-radius:50%;background:#3E9B5B;animation:sitePulse 1s infinite}

/* 工地弹窗（作用域限定，避免覆盖通用弹窗） */
.site-modal{position:fixed;inset:0;background:rgba(30,22,14,.5);display:flex;align-items:center;justify-content:center;z-index:200;padding:16px}
.site-modal .modal-card{background:#fff;border-radius:16px;width:100%;max-width:440px;max-height:92vh;overflow-y:auto;box-shadow:0 20px 60px rgba(0,0,0,.25)}
.site-modal .modal-head{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--line)}
.site-modal .modal-head h3{font-size:16px;font-weight:800}
.site-modal .modal-close{border:none;background:var(--primary-bg);color:var(--primary-dark);width:30px;height:30px;border-radius:8px;font-size:18px;cursor:pointer;line-height:1}
.site-modal .modal-body{padding:16px 20px;display:flex;flex-direction:column;gap:8px}
.site-modal .modal-body label{font-size:12.5px;font-weight:700;color:var(--ink2);margin-top:4px}
.site-modal .modal-body input,.site-modal .modal-body select,.site-modal .modal-body textarea{border:1px solid var(--line);border-radius:10px;padding:9px 12px;font-size:13.5px;background:#FDFAF4;outline:none;font-family:inherit}
.site-modal .modal-body input:focus,.site-modal .modal-body select:focus,.site-modal .modal-body textarea:focus{border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-bg)}
.site-modal .modal-foot{display:flex;justify-content:flex-end;gap:10px;padding:14px 20px;border-top:1px solid var(--line)}

@media (max-width:900px){
  .grid{grid-template-columns:1fr}
  .control-row{grid-template-columns:1fr}
  .video-box{aspect-ratio:4/3}
  .mon-head .site-switch{width:100%}
  .mon-head .site-switch .cur{flex:1;min-width:0}
  .site-toolbar input{min-width:120px}
}

.mini-act{border:1px solid var(--line);background:#FBF7EF;color:var(--ink2);font-size:11px;padding:3px 9px;border-radius:7px;cursor:pointer;font-weight:600}
.mini-act:hover{background:var(--primary-bg);color:var(--primary-dark)}
.mini-act.danger:hover{background:rgba(192,69,46,.1);color:#C0452E;border-color:rgba(192,69,46,.3)}

/* ============================================================
   稿2 · 黑金晨曦主题（主界面视觉升级）
   接入时间：2026-09-16
   ============================================================ */
/* ---- 背景光晕层 ---- */
.theme-bg{ position:fixed; inset:0; z-index:0; pointer-events:none;
  background:
    radial-gradient(560px 420px at 12% -6%, rgba(224,178,110,.32), transparent 62%),
    radial-gradient(720px 520px at 88% 12%, rgba(224,178,110,.18), transparent 60%),
    radial-gradient(900px 700px at 50% 118%, rgba(196,154,88,.16), transparent 65%);
}
#app-view{ position:relative; }
#app-view > .sidebar, #app-view > .main{ position:relative; z-index:1; }
body{ background:linear-gradient(160deg,#F8F1E4 0%,#F3E8D4 52%,#EFE0C6 100%); background-attachment:fixed; }

/* ---- 白色毛玻璃侧栏（稿2） ---- */
.sidebar{
  width:236px; background:rgba(255,255,255,.58);
  backdrop-filter:blur(22px); -webkit-backdrop-filter:blur(22px);
  border-right:1px solid rgba(255,255,255,.85);
  box-shadow:2px 0 30px rgba(120,80,30,.10);
  color:#3A2E22; left:12px; top:12px; bottom:12px; border-radius:18px;
  overflow:hidden;
}
.sidebar .brand{
  padding:22px 16px 16px; border-bottom:1px solid rgba(120,80,30,.10);
  text-align:center; font-size:0; display:flex; align-items:center; justify-content:center;
}
.brand-mark-full{ height:72px; width:auto; object-fit:contain; filter:drop-shadow(0 6px 16px rgba(201,168,106,.45)); }
.brand-mark-icon{ display:none; }
.sidebar nav{ padding:14px 10px; }
.sidebar nav a{
  flex-direction:row; justify-content:flex-start; align-items:center; gap:12px;
  padding:11px 14px; color:#5C4E3C; font-size:14px; letter-spacing:.3px;
  border-left:0; border-radius:12px; margin-bottom:2px;
}
.sidebar nav a svg{ width:20px; height:20px; stroke:currentColor; }
.sidebar nav a:hover{ background:rgba(176,141,87,.14); color:#3A2E22; }
.sidebar nav a.active{
  background:linear-gradient(90deg,rgba(176,141,87,.30),rgba(176,141,87,.10));
  color:#7A5A2A; font-weight:700;
  border-left:0; box-shadow:inset 0 0 0 1px rgba(176,141,87,.22);
}
.sidebar nav a.has-new{ color:#B08D57; }
.sidebar-foot{ padding:14px 14px; border-top:1px solid rgba(120,80,30,.10); text-align:left; }
.sidebar-foot #me-info{ color:#7A6A55; font-size:12px; }
.sidebar-foot #me-info strong{ color:#3A2E22; }
.sidebar-foot .btn{ font-size:12px; padding:8px 12px; width:100%; border-color:rgba(120,80,30,.25); color:#6B5A42; background:rgba(255,255,255,.6); border-radius:10px; }
.sidebar-foot .btn:hover{ color:#3A2E22; border-color:#B08D57; background:#fff; }

/* ---- 主区 ---- */
.main{ margin-left:252px; padding:22px 26px 40px; }

/* ---- hero 问候条 ---- */
.app-hero{
  display:flex; align-items:flex-end; justify-content:space-between; gap:14px; flex-wrap:wrap;
  margin:2px 2px 20px; padding:2px 4px 16px; border-bottom:1px solid rgba(120,80,30,.12);
}
.hero-brand{
  font-size:13px; font-weight:800; letter-spacing:4px; color:#C9A86A;
  text-transform:uppercase; line-height:1;
}
.hero-greet{ font-size:25px; font-weight:800; color:#3A2E22; letter-spacing:.5px; margin-top:9px; flex-basis:100%; }
.hero-date{ font-size:13px; color:#A89B8A; letter-spacing:.4px; }

/* ---- 页面标题与卡片质感微调 ---- */
.page-head h1{ color:#3A2E22; }
.card,.stat,.cust,.site-card,.appr-card,.order-card,.stat-card{
  border-color:rgba(255,255,255,.9);
  box-shadow:0 6px 22px rgba(120,80,30,.07);
}

/* ---- 移动端 ---- */
@media (max-width:900px){
  .sidebar{ width:250px; left:0; top:0; bottom:0; border-radius:0; transform:translateX(-100%); }
  body.menu-open .sidebar{ transform:translateX(0) !important; }
  .sidebar .brand{ text-align:center; padding:20px 16px 14px; }
  .brand-mark-full{ display:block; height:56px; width:auto; margin:0 auto; object-fit:contain; }
  .brand-mark-icon{ display:none; }
  .main{ margin-left:0; padding:64px 14px 24px; }
  .app-hero{ margin-top:4px; }
  .hero-greet{ font-size:21px; }
  .menu-toggle{
    background:rgba(255,255,255,.85); color:#3A2E22;
    border:1px solid rgba(120,80,30,.18); backdrop-filter:blur(10px);
  }
}

/* 移动端侧栏滑出 · 顶层兜底（兼容媒体查询环境差异） */
body.menu-open .sidebar{ transform:translateX(0) !important; }

/* ========== 仪表盘·黑金晨曦 2.0（与验收稿 mock-2-final 对齐） ========== */
:root{
  --ink:#26241F; --ink2:#6B5F4E; --ink3:#9B8F7B;
  --gold:#C9A86A; --gold2:#E7CD92; --gold3:#A5824A; --gold-deep:#8A6D42;
  --serif:"Songti SC","STSong","SimSun","Noto Serif SC",serif;
}

/* ---- 顶部栏 ---- */
.topbar{ display:flex; align-items:center; gap:16px; padding:18px 34px 14px; }
.topbar .search{
  flex:1; max-width:440px; display:flex; align-items:center; gap:10px; padding:10px 18px; border-radius:16px;
  background:rgba(255,255,255,.6); border:1px solid rgba(255,255,255,.85); color:var(--ink3); font-size:13.5px;
  backdrop-filter:blur(10px); transition:all .25s; box-shadow:0 8px 20px rgba(120,95,55,.06);
}
.topbar .search:focus-within{ border-color:rgba(201,168,106,.5); color:var(--ink2); }
.topbar .search svg{ width:16px; height:16px; stroke:currentColor; fill:none; stroke-width:1.8; stroke-linecap:round; flex:none; }
.topbar .search input{ border:none; outline:none; background:transparent; flex:1; font-size:13.5px; color:var(--ink); min-width:0; }
.topbar .search input::placeholder{ color:var(--ink3); }
.top-actions{ display:flex; align-items:center; gap:12px; margin-left:auto; }
.topbar .icon-btn{
  position:relative; width:40px; height:40px; border-radius:14px; border:1px solid rgba(255,255,255,.85);
  background:rgba(255,255,255,.6); color:var(--ink2); cursor:pointer; display:flex; align-items:center; justify-content:center;
  backdrop-filter:blur(10px); transition:all .25s; box-shadow:0 8px 20px rgba(120,95,55,.06);
}
.topbar .icon-btn:hover{ color:var(--gold3); transform:translateY(-1px); }
.topbar .icon-btn svg{ width:18px; height:18px; stroke:currentColor; fill:none; stroke-width:1.7; stroke-linecap:round; stroke-linejoin:round; }
.topbar .icon-btn .dot{ position:absolute; top:9px; right:10px; width:8px; height:8px; border-radius:50%; background:var(--gold); border:2px solid #fff; }
.topbar .icon-btn .msg-num{ position:absolute; top:-5px; right:-5px; min-width:18px; height:18px; padding:0 5px; border-radius:10px;
  background:linear-gradient(135deg,#C9A227,#8C6A1F); color:#fff; font-size:11px; font-weight:700; display:none; align-items:center; justify-content:center;
  border:2px solid #fff; box-shadow:0 4px 10px rgba(140,106,31,.35); }
.msg-panel{ max-height:520px; overflow:auto; display:flex; flex-direction:column; gap:6px; padding:2px; }
.msg-group-title{ font-size:12px; color:var(--ink3); font-weight:600; margin:6px 2px 2px; }
.msg-group-title b{ color:var(--gold3); }
.msg-group-title.read{ margin-top:14px; }
.msg-empty{ text-align:center; color:var(--ink3); padding:40px 0; font-size:13px; }
.msg-item{ border:1px solid var(--border); border-radius:12px; padding:10px 12px; cursor:pointer; transition:all .2s; background:rgba(255,255,255,.6); }
.msg-item:hover{ border-color:var(--gold3); box-shadow:0 6px 16px rgba(120,95,55,.1); transform:translateY(-1px); }
.msg-item.read{ opacity:.62; }
.msg-item-head{ display:flex; justify-content:space-between; align-items:center; margin-bottom:4px; }
.msg-item-head i{ font-style:normal; font-size:11px; color:var(--ink3); }
.msg-item-title{ font-size:14px; font-weight:600; color:var(--ink); margin-bottom:3px; }
.msg-item-content{ font-size:12px; color:var(--ink2); line-height:1.5; display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden; }
.top-user{
  display:flex; align-items:center; gap:10px; padding:5px 12px 5px 5px; border-radius:18px;
  background:rgba(255,255,255,.65); border:1px solid rgba(255,255,255,.9); cursor:pointer;
  box-shadow:0 8px 20px rgba(120,95,55,.08);
}
.top-user .avatar{
  width:30px; height:30px; border-radius:50%; flex:none; display:flex; align-items:center; justify-content:center;
  background:linear-gradient(135deg,#3A3428,#6B5A38); color:var(--gold2); font-family:var(--serif); font-size:12px;
  box-shadow:0 5px 14px rgba(60,50,30,.35);
}
.top-user b{ font-size:13px; font-weight:600; color:var(--ink); }
.top-user i{ font-style:normal; font-size:11px; color:var(--ink3); display:block; }
.collapse-btn{
  width:40px; height:40px; border-radius:14px; border:1px solid rgba(255,255,255,.85);
  background:rgba(255,255,255,.6); color:var(--ink2); cursor:pointer; display:flex; align-items:center; justify-content:center;
  backdrop-filter:blur(10px); transition:all .25s; box-shadow:0 8px 20px rgba(120,95,55,.06);
}
.collapse-btn:hover{ color:var(--gold3); transform:translateY(-1px); }
.collapse-btn svg{ width:18px; height:18px; stroke:currentColor; stroke-width:1.9; stroke-linecap:round; }

/* ---- hero 问候条（对齐 mock：左列 brand/greet/todo + 右侧日期） ---- */
.app-hero{ align-items:flex-end; }
.app-hero > div:not(.hero-date){ display:flex; flex-direction:column; }
.hero-brand{
  font-size:11px; font-weight:700; letter-spacing:5px; color:var(--gold3);
  font-family:Georgia,"Times New Roman",serif; margin-bottom:9px; text-transform:uppercase;
}
.hero-greet{ font-size:32px; font-weight:700; letter-spacing:2px; color:var(--ink); margin-top:0; flex-basis:auto; font-family:var(--serif); }
.hero-todo{ font-size:13.5px; color:var(--ink2); margin-top:7px; }
.hero-date{ font-size:13px; color:var(--ink3); line-height:1.7; text-align:right; }

/* ---- 侧栏：分组 / 角标 / 折叠 ---- */
.sidebar nav{ display:flex; flex-direction:column; gap:2px; padding:2px 10px 10px; overflow-y:auto; }
.sidebar nav a{
  display:flex; align-items:center; gap:13px; padding:11px 13px; border-radius:15px;
  color:var(--ink2); font-size:14px; transition:all .25s; white-space:nowrap; margin-bottom:2px; font-weight:500;
}
.sidebar nav a svg{ width:19px; height:19px; flex:none; stroke:currentColor; fill:none; stroke-width:1.7; stroke-linecap:round; stroke-linejoin:round; }
.sidebar nav a:hover{ background:rgba(255,255,255,.65); color:var(--ink); transform:translateX(2px); }
.sidebar nav a.active{
  background:linear-gradient(135deg,#2C2820,#4D422C);
  color:var(--gold2); box-shadow:0 10px 22px rgba(44,40,32,.28);
}
.sidebar nav a.active svg{ stroke:var(--gold2); }
.sidebar nav .nav-group{
  font-size:10px; letter-spacing:3px; color:var(--ink3); padding:15px 13px 6px; font-weight:600; white-space:nowrap;
}
.sidebar nav a .badge{
  margin-left:auto; background:linear-gradient(135deg,var(--gold2),var(--gold)); color:#2C2820;
  font-size:11px; font-weight:700; padding:1px 8px; border-radius:20px; box-shadow:0 3px 8px rgba(201,168,106,.4);
  min-width:20px; text-align:center;
}
.sidebar nav a .badge:empty{ display:none; }
.sidebar nav a.active .badge{ background:rgba(231,205,146,.25); color:var(--gold2); box-shadow:none; }

/* 折叠态 */
.sidebar{ transition:width .35s cubic-bezier(.4,0,.2,1), transform .25s; }
.sidebar.collapsed{ width:86px; }
.sidebar.collapsed .brand{ padding:22px 0 16px; justify-content:center; }
.sidebar.collapsed .brand-mark-full{ display:none; }
.sidebar.collapsed .brand-mark-icon{ display:block; height:40px; width:auto; margin:0 auto; }
.sidebar.collapsed nav .nav-group{ height:6px; padding:8px 0; overflow:hidden; font-size:0; }
.sidebar.collapsed nav a span, .sidebar.collapsed nav a .badge{ display:none; }
.sidebar.collapsed nav a{ justify-content:center; padding:11px 0; }
.sidebar.collapsed .sidebar-foot{ padding:12px 0; }
.sidebar.collapsed .sidebar-foot #me-info{ display:none; }
.sidebar.collapsed .sidebar-foot .btn{ font-size:0; padding:10px 0; }
.sidebar.collapsed + .main{ margin-left:110px; }

/* ---- 仪表盘内容 ---- */
.dash .stats{ display:grid; grid-template-columns:repeat(4,1fr); gap:16px; margin-bottom:26px; }
.dash .stat{
  padding:22px 22px 20px; border-radius:var(--radius); position:relative; overflow:hidden;
  background:var(--card); backdrop-filter:blur(14px); -webkit-backdrop-filter:blur(14px);
  border:1px solid rgba(255,255,255,.85); box-shadow:0 14px 34px rgba(120,95,55,.1);
  transition:transform .3s,box-shadow .3s; cursor:pointer;
}
.dash .stat:hover{ transform:translateY(-5px); box-shadow:0 22px 44px rgba(120,95,55,.16); }
.dash .stat .glow{ position:absolute; top:-34px; right:-34px; width:110px; height:110px; border-radius:50%; opacity:.5; pointer-events:none; }
.dash .stat .lbl{ font-size:12px; color:var(--ink2); letter-spacing:1.5px; font-weight:600; display:flex; align-items:center; gap:8px; }
.dash .stat .lbl svg{ width:15px; height:15px; stroke:var(--gold3); fill:none; stroke-width:1.9; stroke-linecap:round; stroke-linejoin:round; }
.dash .stat .num{
  font-family:var(--serif); font-size:36px; font-weight:800; margin-top:12px;
  background:linear-gradient(120deg,#A5824A,#C9A86A 55%,#8A6D42); -webkit-background-clip:text; background-clip:text; color:transparent;
}
.dash .stat .delta{ font-size:12px; color:var(--ink3); margin-top:8px; }
.dash .stat .delta b{ color:var(--gold-deep); font-weight:700; }
.dash .stat .delta b.down{ color:var(--gold3); }

.dash .modules{ display:grid; grid-template-columns:repeat(3,1fr); gap:16px; margin-bottom:26px; }
.dash .mod{
  position:relative; border-radius:var(--radius); padding:22px 22px 20px; cursor:pointer; overflow:hidden;
  background:var(--card); backdrop-filter:blur(14px); -webkit-backdrop-filter:blur(14px);
  border:1px solid rgba(255,255,255,.85); box-shadow:0 14px 34px rgba(120,95,55,.09);
  transition:transform .3s,box-shadow .3s;
}
.dash .mod:hover{ transform:translateY(-5px) scale(1.005); box-shadow:0 24px 48px rgba(120,95,55,.16); }
.dash .mod .ico{
  width:46px; height:46px; border-radius:15px; display:flex; align-items:center; justify-content:center; margin-bottom:15px;
  background:linear-gradient(135deg,#3A3428,#6B5A38); box-shadow:0 8px 18px rgba(60,50,30,.3), inset 0 1px 0 rgba(255,255,255,.12);
}
.dash .mod .ico svg{ width:22px; height:22px; stroke:var(--gold2); fill:none; stroke-width:1.8; stroke-linecap:round; stroke-linejoin:round; }
.dash .mod .nm{ font-size:15.5px; font-weight:700; letter-spacing:1px; color:var(--ink); }
.dash .mod .ds{ font-size:12px; color:var(--ink2); margin-top:5px; line-height:1.6; }
.dash .mod .st{ display:flex; align-items:center; gap:14px; margin-top:14px; padding-top:13px; border-top:1px dashed rgba(60,50,30,.14); font-size:12px; color:var(--ink3); }
.dash .mod .st b{ color:var(--ink); font-weight:700; }
.dash .mod .go{
  position:absolute; right:18px; bottom:18px; width:30px; height:30px; border-radius:50%;
  display:flex; align-items:center; justify-content:center; color:#2C2820; opacity:0; transform:translateX(-6px);
  transition:all .3s; background:linear-gradient(135deg,var(--gold2),var(--gold));
  box-shadow:0 6px 14px rgba(201,168,106,.4);
}
.dash .mod:hover .go{ opacity:1; transform:translateX(0); }
.dash .mod .go svg{ width:14px; height:14px; stroke:#2C2820; fill:none; stroke-width:2.2; stroke-linecap:round; stroke-linejoin:round; }

.dash .mid{ display:grid; grid-template-columns:1.4fr 1fr; gap:16px; }
.dash .panel{
  border-radius:var(--radius); background:var(--card); backdrop-filter:blur(14px); -webkit-backdrop-filter:blur(14px);
  border:1px solid rgba(255,255,255,.85); box-shadow:0 14px 34px rgba(120,95,55,.09); overflow:hidden;
}
.dash .panel-head{ display:flex; align-items:center; justify-content:space-between; padding:19px 22px 13px; }
.dash .panel-head h3{ font-size:15.5px; font-weight:700; letter-spacing:1px; color:var(--ink); margin:0; }
.dash .panel-head .more{ font-size:12px; color:var(--gold3); cursor:pointer; font-weight:600; }
.dash .appr-item{ display:flex; align-items:center; gap:14px; padding:14px 22px; border-top:1px dashed rgba(60,50,30,.12); transition:background .25s; cursor:pointer; }
.dash .appr-item:hover{ background:rgba(255,255,255,.5); }
.dash .appr-item .t{ font-size:14px; font-weight:600; color:var(--ink); }
.dash .appr-item .s{ font-size:12px; color:var(--ink3); margin-top:2px; }
.dash .appr-item .amt{ margin-left:auto; text-align:right; flex:none; }
.dash .appr-item .amt b{ font-size:15px; font-weight:800; background:linear-gradient(120deg,#A5824A,#C9A86A); -webkit-background-clip:text; background-clip:text; color:transparent; }
.dash .appr-item .amt span{ display:block; font-size:11px; color:var(--ink3); margin-top:2px; }
.dash .appr-ico{ width:42px; height:42px; border-radius:14px; flex:none; display:flex; align-items:center; justify-content:center; font-size:18px; }
.dash .pill{ font-size:11px; padding:3px 10px; border-radius:20px; font-weight:600; letter-spacing:.5px; background:rgba(201,168,106,.16); color:var(--gold-deep); border:1px solid rgba(201,168,106,.35); flex:none; }
.dash .site-card{ padding:15px 20px; border-top:1px dashed rgba(60,50,30,.12); cursor:pointer; transition:background .25s; }
.dash .site-card:hover{ background:rgba(255,255,255,.5); }
.dash .site-card .nm{ font-size:14px; font-weight:700; color:var(--ink); }
.dash .site-card .ad{ font-size:12px; color:var(--ink3); margin-top:3px; }
.dash .site-top{ display:flex; align-items:center; gap:12px; }
.dash .site-live{ width:9px; height:9px; border-radius:50%; background:#3FBF8F; box-shadow:0 0 0 4px rgba(63,191,143,.18); animation:pulse 2s infinite; flex:none; }
.dash .site-stat{ display:flex; gap:16px; margin-top:11px; font-size:12px; color:var(--ink3); flex-wrap:wrap; }
.dash .site-stat b{ color:var(--ink); font-weight:700; }
@keyframes pulse{ 0%,100%{ box-shadow:0 0 0 4px rgba(63,191,143,.18);} 50%{ box-shadow:0 0 0 8px rgba(63,191,143,.06);} }
.dash .empty{ padding:40px 0; text-align:center; color:var(--ink3); }

/* ---- 仪表盘移动端 ---- */
@media (max-width:900px){
  .topbar{ padding:12px 14px 8px; gap:10px; }
  .topbar .search{ display:none; }
  .collapse-btn{ display:none; }
  .top-actions{ gap:8px; }
  .top-user b{ display:none; }
  .top-user i{ display:none; }
  .top-user{ padding:4px; border-radius:50%; }
  .app-hero{ margin-top:4px; }
  .hero-greet{ font-size:24px; }
  .hero-date{ display:none; }
  .dash .stats{ grid-template-columns:repeat(2,1fr); gap:12px; margin-bottom:20px; }
  .dash .modules{ grid-template-columns:repeat(2,1fr); gap:12px; margin-bottom:20px; }
  .dash .mid{ grid-template-columns:1fr; gap:12px; }
  .dash .stat .num{ font-size:30px; }
  .sidebar.collapsed{ width:250px; }
  .sidebar.collapsed + .main{ margin-left:0; }
  .sidebar.collapsed .brand-mark-full{ display:block; }
  .sidebar.collapsed .brand-mark-icon{ display:none; }
  .sidebar.collapsed nav a{ justify-content:flex-start; padding:11px 13px; }
  .sidebar.collapsed nav a span, .sidebar.collapsed nav a .badge{ display:block; }
  .sidebar.collapsed nav .nav-group{ font-size:10px; letter-spacing:3px; padding:15px 13px 6px; height:auto; overflow:visible; }
  .sidebar.collapsed .sidebar-foot{ padding:16px; }
  .sidebar.collapsed .sidebar-foot #me-info{ display:block; }
  .sidebar.collapsed .sidebar-foot .btn{ font-size:14px; padding:8px 12px; }
}
@media (max-width:560px){
  .dash .stats{ grid-template-columns:1fr 1fr; }
  .dash .modules{ grid-template-columns:1fr; }
  .dash .appr-item .amt{ display:none; }
}

/* ============================================================
   1:1 对齐验收稿 mock-2-final（v3 细节修正：字体/背景/侧栏/间距/断点）
   ============================================================ */
:root{
  --ink:#26241F; --ink2:#6F6A5E; --ink3:#A89F8D;
  --gold:#C9A86A; --gold2:#E7CD92; --gold3:#A5824A; --gold-deep:#8A6D42;
  --sans:"PingFang SC","Microsoft YaHei","Noto Sans SC",-apple-system,sans-serif;
  --serif:"Noto Serif SC","Songti SC","STSong",serif;
}
body{ font-family:var(--sans); -webkit-font-smoothing:antialiased; background:#FAF6EE; background-attachment:fixed; }

/* 金橙光晕背景（mock .bg/.blob 等效） */
.theme-bg{
  background:
    radial-gradient(56vw 56vw at 100% -16%, rgba(231,196,135,.52), transparent 70%),
    radial-gradient(46vw 46vw at -8% 106%, rgba(238,217,171,.52), transparent 70%),
    radial-gradient(34vw 34vw at 50% 50%, rgba(241,226,194,.34), transparent 72%),
    radial-gradient(26vw 26vw at 16% 6%, rgba(250,241,218,.55), transparent 72%);
}

/* hero：对齐 mock（无分隔线、kicker 10.5px） */
.app-hero{ margin:2px 2px 26px; padding:2px 4px 0; border-bottom:0; }
.hero-brand{ font-size:10.5px; }

/* 侧栏 nav 细节对齐 mock */
.sidebar nav{ padding:8px 14px; }
.sidebar nav a{ font-weight:400; }
.sidebar nav .nav-group{ padding:16px 13px 7px; }
.sidebar .brand{ border-bottom:0; }
.sidebar-foot{ border-top:0; }

/* 顶部栏搜索对齐 mock */
.topbar .search{ padding:11px 18px; }

/* 仪表盘卡片圆角用 mock 22px */
.dash{ --radius:22px; }

/* mock 断点：1180px 收两列、760px 模块单列 */
@media (max-width:1180px){
  .dash .stats{ grid-template-columns:repeat(2,1fr); }
  .dash .modules{ grid-template-columns:repeat(2,1fr); }
  .dash .mid{ grid-template-columns:1fr; }
}
@media (max-width:760px){
  .dash .modules{ grid-template-columns:1fr; }
}

/* 桌面端（≥901px）侧栏浮动毛玻璃（mock .side）+ 主区让位 */
@media (min-width:901px){
  .sidebar{
    left:16px; top:16px; bottom:16px; border-radius:26px;
    background:rgba(255,255,255,.55); backdrop-filter:blur(24px); -webkit-backdrop-filter:blur(24px);
    border:1px solid rgba(255,255,255,.7); box-shadow:0 18px 50px rgba(120,95,55,.14);
  }
  .main{ margin-left:268px; padding:20px 34px 40px; }
  .sidebar.collapsed + .main{ margin-left:118px; }
  .topbar{ padding:20px 34px 14px; }
}

/* ============================================================
   v4 · mock-2-final 完完全全 1:1 对齐（背景/卡片/hero 结构/颜色）
   ============================================================ */
/* hero：mock 左列竖排 + 日期右侧 */
.app-hero{ align-items:flex-end; justify-content:space-between; gap:12px; flex-wrap:wrap; }
.hero-left{ display:flex; flex-direction:column; align-items:flex-start; min-width:0; }
.hero-brand{
  font-size:10.5px; font-weight:700; letter-spacing:5px; color:var(--gold3);
  font-family:Georgia,"Times New Roman",serif; margin-bottom:9px; text-transform:uppercase;
}
.hero-greet{ font-family:var(--serif); font-size:32px; font-weight:700; letter-spacing:2px; color:#26241F; margin-top:0; }
.hero-todo{ color:var(--ink2); font-size:13.5px; margin-top:7px; }
.hero-date{ font-size:13px; color:var(--ink3); text-align:right; line-height:1.7; }

/* 仪表盘作用域：mock 变量（半透明白卡片 + 22px 圆角 + 线色） */
.dash{
  --card:rgba(255,255,255,.66);
  --line:rgba(60,50,30,.1);
  --ok:#3FBF8F;
  --radius:22px;
}

/* 背景噪点层（mock .grain） */
.theme-bg::after{
  content:""; position:absolute; inset:0; pointer-events:none; opacity:.5; mix-blend-mode:overlay;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='g'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='2'/%3E%3C/filter%3E%3Crect width='160' height='160' filter='url(%23g)' opacity='0.5'/%3E%3C/svg%3E");
}

/* 移动端：mock 手机端保留日期（右对齐换行），hero 字号 24px */
@media (max-width:760px){
  .hero-greet{ font-size:24px; }
  .hero-date{ display:block; }
  .hero-left{ width:100%; }
}

/* ============================================================
   v8 · 空态卡片对齐 mock + 手机端统计卡文字不拆行
   ============================================================ */
.dash .empty-card{
  display:flex; align-items:center; gap:14px; padding:16px 18px; margin-bottom:10px;
  background:var(--card); border:1px solid rgba(255,255,255,.85); border-radius:var(--radius);
  box-shadow:0 14px 34px rgba(120,95,55,.1); cursor:pointer; transition:transform .18s ease, box-shadow .18s ease;
}
.dash .empty-card:hover{ transform:translateY(-2px); box-shadow:0 18px 40px rgba(120,95,55,.16); }
.dash .empty-card .t{ font-size:14px; font-weight:600; color:var(--ink); }
.dash .empty-card .s{ font-size:12px; color:var(--ink3); margin-top:2px; }
.dash .empty-card .pill{ margin-left:auto; }
@media (max-width:760px){
  .dash .stat .lbl{ white-space:nowrap; }
  .dash .stat .delta{ white-space:nowrap; overflow:hidden; text-overflow:ellipsis; font-size:11px; }
  .dash .empty-card{ padding:13px 15px; }
}

/* ============================================================
   v10 · 移动端对齐 mock-2-final：86px 图标条侧栏 + 主区全宽
   （修复 g3 全局 .main margin-left:252px 挤爆手机端问题）
   ============================================================ */
@media (max-width:760px){
  .menu-toggle, .menu-close{ display:none !important; }
  .sidebar{
    transform:none !important; width:86px !important; left:0; top:0; bottom:0; border-radius:0;
    background:rgba(255,255,255,.55); backdrop-filter:blur(24px); -webkit-backdrop-filter:blur(24px);
    border-right:1px solid rgba(255,255,255,.7); box-shadow:none;
  }
  .sidebar .brand{ padding:22px 0 16px; justify-content:center; }
  .sidebar .brand-mark-full{ display:none !important; }
  .sidebar .brand-mark-icon{ display:block; height:40px; width:auto; margin:0 auto; }
  .sidebar nav{ padding:2px 10px 10px; }
  .sidebar nav .nav-group{ height:6px; padding:8px 0; overflow:hidden; font-size:0; }
  .sidebar nav a{ justify-content:center; padding:11px 0; gap:0; }
  .sidebar nav a span, .sidebar nav a .badge{ display:none !important; }
  .sidebar .sidebar-foot{ padding:10px 0; text-align:center; }
  .sidebar .sidebar-foot #me-info{ display:none !important; }
  .sidebar .sidebar-foot .btn{
    font-size:0; width:38px; height:38px; padding:0; margin:0 auto; border-radius:50%;
    display:flex; align-items:center; justify-content:center; border-color:rgba(120,80,30,.25); color:#6B5A42;
    background:rgba(255,255,255,.6);
  }
  .sidebar .sidebar-foot .btn::after{ content:'⏻'; font-size:18px; line-height:1; color:var(--gold3); }
  .main{ margin-left:0 !important; padding:14px 14px 20px !important; }
  .topbar{ padding:14px 14px 10px !important; }
  .topbar .search{ display:none !important; }
  .hero-greet{ font-size:24px !important; }
}

/* ============================================================
   v12 · 去掉侧栏菜单角标小数字（用户要求）
   ============================================================ */
.sidebar nav a .badge{ display:none !important; }

/* ============================================================
   v13 · 手机端：抽屉式导航（三条杠弹完整侧栏）+ 顶栏只留铃铛
   （图一 三条杠弹侧栏 / 图二 hero 保留 / 图三 顶栏只留消息铃铛）
   ============================================================ */
@media (max-width:760px){
  .menu-toggle{
    display:flex !important; position:fixed; top:12px; left:12px; z-index:32;
    width:42px; height:42px; align-items:center; justify-content:center;
    border:1px solid rgba(120,80,30,.16); border-radius:12px; cursor:pointer; font-size:19px; line-height:1;
    color:#4A3A2C; background:rgba(255,255,255,.72);
    backdrop-filter:blur(14px); -webkit-backdrop-filter:blur(14px);
    box-shadow:0 6px 18px rgba(120,80,30,.08);
  }
  .menu-close{
    display:flex !important; position:absolute; top:10px; right:10px;
    width:36px; height:36px; align-items:center; justify-content:center;
    border:none; border-radius:10px; cursor:pointer; font-size:20px; line-height:1;
    color:#6B5A42; background:rgba(255,255,255,.85);
    box-shadow:0 4px 14px rgba(120,80,30,.10);
  }
  .sidebar{
    position:fixed !important;
    transform:translateX(-100%) !important;
    width:236px !important; left:0; top:0; bottom:0; border-radius:0;
    transition:transform .3s cubic-bezier(.4,0,.2,1) !important;
    background:rgba(250,246,238,.94);
    backdrop-filter:blur(26px); -webkit-backdrop-filter:blur(26px);
    border-right:1px solid rgba(255,255,255,.9);
    box-shadow:18px 0 46px rgba(120,80,30,.18);
    z-index:40 !important;
  }
  body.menu-open .sidebar{ transform:translateX(0) !important; }
  body.menu-open::after{ content:''; position:fixed; inset:0; background:rgba(60,42,20,.36); z-index:38; }
  .menu-toggle:focus{ outline:none; }
  .sidebar .brand{ padding:22px 16px 16px; justify-content:center; }
  .sidebar .brand-mark-full{ display:block !important; height:64px; width:auto; margin:0 auto; }
  .sidebar .brand-mark-icon{ display:none !important; }
  .sidebar nav{ padding:14px 10px; }
  .sidebar nav .nav-group{ height:auto; padding:15px 13px 6px; font-size:10px; letter-spacing:3px; overflow:visible; }
  .sidebar nav a{ justify-content:flex-start !important; padding:11px 14px !important; gap:12px !important; font-size:14px !important; }
  .sidebar nav a span{ display:inline !important; }
  .sidebar nav a .badge{ display:none !important; }
  .sidebar .sidebar-foot{ padding:14px 14px; text-align:left; }
  .sidebar .sidebar-foot #me-info{ display:block !important; }
  .sidebar .sidebar-foot .btn{ font-size:12px !important; padding:8px 12px !important; width:100% !important; height:auto !important; border-radius:10px !important; }
  .sidebar .sidebar-foot .btn::after{ content:none !important; }
  .collapse-btn{ display:none !important; }
  .main{ margin-left:0 !important; padding:14px 14px 20px !important; }
  .topbar{ padding:12px 14px 10px !important; }
  .topbar .search{ display:none !important; }
  .top-actions .icon-btn#btn-help{ display:none !important; }
  .top-actions .top-user{ display:none !important; }
  .hero-greet{ font-size:24px !important; }
  .hero-date{ display:none !important; }
}

/* ============================================================
   v15 · 桌面排版/背景完全对齐 mock-2-final（图2）
   1) main 从侧栏右缘 252px 开始（margin-left:16 补齐 left:16 偏移）
   2) 背景 #faf6ee 底 + b1-b4 金橙光晕圆斑（mock 原样）
   ============================================================ */
@media (min-width:901px){
  .main{ margin-left:16px; }
}
body{ background:#faf6ee; }
.theme-bg{
  background:
    radial-gradient(circle at 35% 35%, #f3ddb0, #e7c487 55%, transparent 75%) right -10vw top -16vw / 56vw 56vw no-repeat,
    radial-gradient(circle at 60% 40%, #f5e9cf, #eed9ab 60%, transparent 75%) left -8vw bottom -14vw / 46vw 46vw no-repeat,
    radial-gradient(circle at 50% 50%, #f1e2c2, transparent 70%) 34% 34% / 34vw 34vw no-repeat,
    radial-gradient(circle at 50% 50%, #faf1da, transparent 72%) 16% 6% / 26vw 26vw no-repeat,
    #faf6ee;
}

/* ============================================================
   v16 · 手机端：回归窄条图标侧栏（68d2a90e 用户确认样式）
   + hero 紧凑上移（红框客资往上走）+ 字体优化
   （仅手机端生效，电脑端保持现状）
   ============================================================ */
@media (max-width:760px){
  /* 1) 侧栏：去掉三条杠抽屉，恢复 86px 常驻图标条 */
  .menu-toggle, .menu-close{ display:none !important; }
  body.menu-open .sidebar{ transform:none !important; }
  body.menu-open::after{ display:none !important; }
  .sidebar{
    position:fixed !important; left:0 !important; top:0 !important; bottom:0 !important;
    width:86px !important; transform:none !important; z-index:30 !important;
    border-radius:0 !important;
    background:rgba(255,255,255,.55) !important;
    backdrop-filter:blur(24px) !important; -webkit-backdrop-filter:blur(24px) !important;
    border-right:1px solid rgba(255,255,255,.7) !important;
    box-shadow:none !important;
  }
  .sidebar .brand{ padding:18px 0 14px; justify-content:center; }
  .sidebar .brand-mark-full{ display:none !important; }
  .sidebar .brand-mark-icon{ display:block !important; height:40px; width:auto; margin:0 auto; }
  .sidebar nav{ padding:2px 8px 10px; }
  .sidebar nav .nav-group{ height:6px; padding:8px 0; overflow:hidden; font-size:0; }
  .sidebar nav a{ justify-content:center !important; padding:11px 0 !important; gap:0 !important; font-size:0 !important; }
  .sidebar nav a span, .sidebar nav a .badge{ display:none !important; }
  .sidebar nav a .icon{ margin:0 !important; }
  .sidebar .sidebar-foot{ padding:10px 0; text-align:center; }
  .sidebar .sidebar-foot #me-info{ display:none !important; }
  .sidebar .sidebar-foot .btn{
    font-size:0 !important; width:38px !important; height:38px !important; padding:0 !important;
    margin:0 auto !important; border-radius:50% !important;
    display:flex !important; align-items:center; justify-content:center;
    border-color:rgba(120,80,30,.25) !important; color:#6B5A42 !important;
    background:rgba(255,255,255,.6) !important;
  }
  .sidebar .sidebar-foot .btn::after{ content:'⏻' !important; font-size:18px !important; line-height:1 !important; color:var(--gold3) !important; }
  .collapse-btn{ display:none !important; }

  /* 2) hero 紧凑上移：隐藏 ORIGINAL DESIGN，字号/间距压缩 → 客资内容上提 */
  .hero-brand{ display:none !important; }
  .hero-left{ gap:0 !important; }
  .hero-greet{ font-size:22px !important; font-weight:600 !important; letter-spacing:1px !important; margin-top:0 !important; }
  .hero-todo{ font-size:12px !important; margin-top:4px !important; }
  .app-hero{ margin-bottom:8px !important; padding:2px 2px 6px !important; }
  .dash .stats{ margin-top:0 !important; }
}

/* ============================================================
   v17 · 背景完全复刻 mock-2-final：真实 blob 元素（blur 70px 雾状光晕）
   替代 v15 的多层渐变模拟（无 blur，光晕发硬），视觉与 mock 一致
   ============================================================ */
.theme-bg{ background:#faf6ee !important; }
.blob{ position:absolute; border-radius:50%; filter:blur(70px); opacity:.72; pointer-events:none; }
.blob.b1{ width:56vw; height:56vw; top:-16vw; right:-10vw; background:radial-gradient(circle at 35% 35%,#f3ddb0,#e7c487 55%,transparent 75%) }
.blob.b2{ width:46vw; height:46vw; bottom:-14vw; left:-8vw; background:radial-gradient(circle at 60% 40%,#f5e9cf,#eed9ab 60%,transparent 75%) }
.blob.b3{ width:34vw; height:34vw; top:34%; left:34%; background:radial-gradient(circle at 50% 50%,#f1e2c2,transparent 70%); opacity:.5 }
.blob.b4{ width:26vw; height:26vw; top:6%; left:16%; background:radial-gradient(circle at 50% 50%,#faf1da,transparent 72%); opacity:.6 }

/* ============================================================
   v19 · 手机端：改回三条杠抽屉侧栏（用户最终确认 13ada148）
   （覆盖 v16 的 86px 图标条；hero 紧凑/字体优化保留）
   ============================================================ */
@media (max-width:760px){
  .menu-toggle{
    display:flex !important; position:fixed; top:12px; left:12px; z-index:32;
    width:42px; height:42px; align-items:center; justify-content:center;
    border:1px solid rgba(120,80,30,.16); border-radius:12px; cursor:pointer; font-size:19px; line-height:1;
    color:#4A3A2C; background:rgba(255,255,255,.72);
    backdrop-filter:blur(14px); -webkit-backdrop-filter:blur(14px);
    box-shadow:0 6px 18px rgba(120,80,30,.08);
  }
  .menu-close{
    display:flex !important; position:absolute; top:10px; right:10px;
    width:36px; height:36px; align-items:center; justify-content:center;
    border:none; border-radius:10px; cursor:pointer; font-size:20px; line-height:1;
    color:#6B5A42; background:rgba(255,255,255,.85);
    box-shadow:0 4px 14px rgba(120,80,30,.10);
  }
  .sidebar{
    position:fixed !important;
    transform:translateX(-100%) !important;
    width:236px !important; left:0; top:0; bottom:0; border-radius:0;
    transition:transform .3s cubic-bezier(.4,0,.2,1) !important;
    background:rgba(250,246,238,.94);
    backdrop-filter:blur(26px); -webkit-backdrop-filter:blur(26px);
    border-right:1px solid rgba(255,255,255,.9);
    box-shadow:18px 0 46px rgba(120,80,30,.18);
    z-index:40 !important;
  }
  body.menu-open .sidebar{ transform:translateX(0) !important; }
  body.menu-open::after{ content:''; position:fixed; inset:0; background:rgba(60,42,20,.36); z-index:38; }
  .menu-toggle:focus{ outline:none; }
  .sidebar .brand{ padding:22px 16px 16px; justify-content:center; }
  .sidebar .brand-mark-full{ display:block !important; height:64px; width:auto; margin:0 auto; }
  .sidebar .brand-mark-icon{ display:none !important; }
  .sidebar nav{ padding:14px 10px; }
  .sidebar nav .nav-group{ height:auto; padding:15px 13px 6px; font-size:10px; letter-spacing:3px; overflow:visible; }
  .sidebar nav a{ justify-content:flex-start !important; padding:11px 14px !important; gap:12px !important; font-size:14px !important; }
  .sidebar nav a span{ display:inline !important; }
  .sidebar nav a .badge{ display:none !important; }
  .sidebar .sidebar-foot{ padding:14px 14px; text-align:left; }
  .sidebar .sidebar-foot #me-info{ display:block !important; }
  .sidebar .sidebar-foot .btn{ font-size:12px !important; padding:8px 12px !important; width:100% !important; height:auto !important; border-radius:10px !important; }
  .sidebar .sidebar-foot .btn::after{ content:none !important; }
  .collapse-btn{ display:none !important; }
  /* hero 紧凑保留（v16）：隐藏 ORIGINAL，字体优化 */
  .hero-brand{ display:none !important; }
  .hero-greet{ font-size:22px !important; font-weight:600 !important; letter-spacing:1px !important; }
  .hero-todo{ font-size:12px !important; }
}

/* ============================================================
   v20 · 手机端恢复 ORIGINAL DESIGN 显示（用户截图 34188cfa 确认）
   三条杠抽屉保留（v19）；字体优化保留（600 字重/字距）
   ============================================================ */
@media (max-width:760px){
  .hero-brand{ display:block !important; font-size:10px !important; letter-spacing:4px !important; margin-bottom:6px !important; }
  .hero-greet{ font-size:24px !important; font-weight:600 !important; letter-spacing:1px !important; margin-top:0 !important; }
  .hero-todo{ font-size:12px !important; margin-top:6px !important; }
}

/* ============================================================
   v21 · 手机端：三条杠弹出 86px 图标条侧栏（mock 1:1，用户截图 9e937ff7）
   覆盖 v19/v20 的 236px 文字抽屉；hero（ORIGINAL/下午好/待办）保留
   ============================================================ */
@media (max-width:760px){
  .menu-toggle{
    display:flex !important; position:fixed; top:12px; left:12px; z-index:32;
    width:42px; height:42px; align-items:center; justify-content:center;
    border:1px solid rgba(120,80,30,.16); border-radius:12px; cursor:pointer; font-size:19px; line-height:1;
    color:#4A3A2C; background:rgba(255,255,255,.72);
    backdrop-filter:blur(14px); -webkit-backdrop-filter:blur(14px);
    box-shadow:0 6px 18px rgba(120,80,30,.08);
  }
  .menu-close{ display:none !important; }
  .sidebar{
    position:fixed !important; top:0; bottom:0; left:0; width:170px !important; margin:0 !important;
    transform:translateX(-100%) !important; transition:transform .3s cubic-bezier(.4,0,.2,1) !important;
    border-radius:0 !important; z-index:40 !important;
    background:rgba(250,246,238,.94);
    backdrop-filter:blur(26px); -webkit-backdrop-filter:blur(26px);
    border-right:1px solid rgba(255,255,255,.9);
    box-shadow:18px 0 46px rgba(120,80,30,.18);
  }
  body.menu-open .sidebar{ transform:translateX(0) !important; }
  body.menu-open::after{ content:''; position:fixed; inset:0; background:rgba(60,42,20,.36); z-index:38; }
  .sidebar .brand{ padding:22px 0 4px !important; justify-content:center !important; }
  .sidebar .brand-mark-full{ display:none !important; }
  .sidebar .brand-mark-icon{ display:block !important; width:46px; height:46px; object-fit:contain; }
  .sidebar nav{ padding:8px 0; }
  .sidebar nav .nav-group{ display:none !important; }
  .sidebar nav a{ justify-content:flex-start !important; padding:11px 12px !important; gap:10px !important; }
  .sidebar nav a span{ display:inline !important; font-size:12.5px !important; color:#6B5A42; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
  .sidebar nav a.active span{ color:var(--gold2) !important; font-weight:600; }
  .sidebar nav a .badge{ display:none !important; }
  .sidebar nav a svg{ width:21px; height:21px; flex:none; }
  .sidebar .sidebar-foot{ padding:14px 0 18px !important; text-align:center !important; }
  .sidebar .sidebar-foot #me-info{ display:none !important; }
  .sidebar .sidebar-foot #logout-btn{
    display:flex !important; width:38px !important; height:38px !important; margin:0 auto !important;
    padding:0 !important; border-radius:50% !important; align-items:center !important; justify-content:center !important;
    border:1px solid rgba(120,80,30,.25) !important; background:rgba(255,255,255,.6) !important;
    color:var(--gold3) !important; font-size:0 !important; cursor:pointer !important;
  }
  .sidebar .sidebar-foot #logout-btn::after{ content:'⏻' !important; font-size:18px !important; line-height:1 !important; color:var(--gold3) !important; }
  .collapse-btn{ display:none !important; }
}

/* ===== 工程管理（新模块） ===== */
.eng-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:10px;margin-bottom:16px}
.eng-stat{background:var(--card,#fff);border:1px solid var(--line,#ece3cf);border-radius:14px;padding:12px 14px;box-shadow:0 6px 18px rgba(120,95,40,.06)}
.eng-stat .v{font-size:22px;font-weight:800;line-height:1.2}
.eng-stat .t{font-size:12px;color:var(--ink2,#8a7d66);margin-top:4px}
.eng-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:14px}
.eng-card{background:var(--card,#fff);border:1px solid var(--line,#ece3cf);border-radius:16px;padding:14px 16px;cursor:pointer;transition:transform .12s,box-shadow .12s;box-shadow:0 6px 18px rgba(120,95,40,.06);position:relative}
.eng-card:hover{transform:translateY(-2px);box-shadow:0 10px 26px rgba(120,95,40,.12)}
.eng-card.delayed{border-color:#e05b4d;background:linear-gradient(180deg,#fff8f5,#fff)}
.eng-card.delayed::before{content:'延期';position:absolute;top:-1px;right:-1px;background:#e05b4d;color:#fff;font-size:11px;font-weight:700;padding:3px 12px;border-radius:0 16px 0 12px}
.eng-card.done{opacity:.85}
.eng-card.done::after{content:'已完工';position:absolute;top:10px;right:12px;font-size:11px;font-weight:700;color:#4caf50;background:#e9f7ec;padding:2px 10px;border-radius:12px}
.eng-card-top{display:flex;align-items:center;justify-content:space-between;margin-bottom:6px}
.eng-card-name{font-size:16px;font-weight:800}
.eng-card-name small{font-size:11px;color:#4caf50;font-weight:700;margin-left:6px}
.eng-flag{display:inline-block;font-size:11px;font-weight:700;padding:2px 10px;border-radius:12px;background:#fdf0e6;color:#e07b2f}
.eng-flag.ok{background:#e9f7ec;color:#3d9c50}
.eng-signs{display:flex;flex-wrap:wrap;gap:6px 14px;margin:6px 0 2px}
.eng-sign{display:inline-block;font-size:12px;color:#9a9a9a;background:#f6f4ee;padding:3px 10px;border-radius:10px}
.eng-sign.ok{color:#3d9c50;background:#e9f7ec;font-weight:600}
.eng-card-meta{font-size:12px;color:var(--ink2,#8a7d66);margin-bottom:8px}
.eng-card-row{font-size:12px;color:var(--ink,#2a2419);display:flex;gap:14px;margin-bottom:4px}
.eng-card-foot{display:flex;align-items:center;gap:10px;margin-top:10px;font-size:12px;color:var(--ink2,#8a7d66)}
.eng-prog{flex:1;height:6px;background:var(--line,#ece3cf);border-radius:3px;overflow:hidden}
.eng-prog i{display:block;height:100%;background:linear-gradient(90deg,#c9a24b,#a97f2f);border-radius:3px}
.eng-issues{color:#e07b2f;font-weight:700}
.eng-d-head{background:linear-gradient(135deg,#f8f1e2,#fdf9f0);border:1px solid var(--line,#ece3cf);border-radius:14px;padding:14px 16px;margin-bottom:12px}
.eng-d-title{font-size:19px;font-weight:800;display:flex;align-items:center;gap:10px;margin-bottom:6px}
.eng-d-meta{font-size:12px;color:var(--ink2,#8a7d66);margin-bottom:4px}
.eng-d-ops{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}
.eng-tabs{display:flex;gap:6px;border-bottom:1px solid var(--line,#ece3cf);margin-bottom:12px;overflow-x:auto}
.eng-tabs button{border:none;background:none;padding:9px 16px;font-size:14px;font-weight:700;color:var(--ink2,#8a7d66);cursor:pointer;border-bottom:2px solid transparent;white-space:nowrap}
.eng-tabs button.active{color:#a97f2f;border-bottom-color:#a97f2f}
.eng-d-body{min-height:200px}
.eng-grp{font-size:13px;font-weight:800;color:#a97f2f;margin:16px 0 8px;padding-left:8px;border-left:3px solid #c9a24b}
.eng-phase{display:flex;align-items:center;gap:12px;padding:10px 12px;border:1px solid var(--line,#ece3cf);border-radius:12px;margin-bottom:8px;background:var(--card,#fff)}
.eng-phase.dl{border-color:#e05b4d;background:linear-gradient(90deg,#fff5f2,#fff)}
.eng-ph-seq{width:30px;height:30px;border-radius:50%;background:linear-gradient(135deg,#c9a24b,#a97f2f);color:#fff;font-size:13px;font-weight:800;display:flex;align-items:center;justify-content:center;flex-shrink:0}
.eng-phase.dl .eng-ph-seq{background:#e05b4d}
.eng-ph-main{flex:1;min-width:0}
.eng-ph-name{font-size:14px;font-weight:800;display:flex;align-items:center;gap:8px}
.eng-ph-detail{font-size:12px;color:var(--ink2,#8a7d66);margin-top:3px}
.eng-ph-dates{display:flex;flex-wrap:wrap;gap:12px;font-size:12px;color:var(--ink2,#8a7d66);margin-top:6px}
.eng-ph-st{font-weight:700;color:var(--ink,#2a2419)}
.eng-phase-sum{font-size:13px;font-weight:700;color:var(--ink2,#8a7d66);margin-bottom:10px}
.eng-sec{font-size:14px;font-weight:800;margin:18px 0 8px;color:var(--ink,#2a2419)}
.eng-sec .n{font-size:12px;color:var(--ink2,#8a7d66)}
.eng-issue-form{background:linear-gradient(135deg,#faf5ea,#fdfaf2);border:1px solid var(--line,#ece3cf);border-radius:14px;padding:14px;margin-bottom:14px}
.eng-issue-form-t{font-size:14px;font-weight:800;margin-bottom:10px}
.form-row{display:flex;gap:8px;margin-bottom:10px}
.form-row select{flex:1}
.eng-issue{background:var(--card,#fff);border:1px solid var(--line,#ece3cf);border-radius:12px;padding:12px 14px;margin-bottom:10px}
.eng-issue.solved{opacity:.82}
.eng-issue-top{display:flex;align-items:center;gap:10px;margin-bottom:6px;flex-wrap:wrap}
.eng-role{font-size:13px;font-weight:700}
.eng-time{font-size:11px;color:#b3a688;margin-left:auto}
.eng-issue-ph{font-size:12px;color:#a97f2f;margin-bottom:4px}
.eng-issue-c{font-size:13px;line-height:1.7;color:var(--ink,#2a2419)}
.eng-sol{font-size:13px;color:#3d9c50;background:#f2faf4;border-radius:10px;padding:10px;margin-top:8px;line-height:1.7}
.eng-photos{display:flex;flex-wrap:wrap;gap:8px;margin-top:8px}
.eng-photos img{width:76px;height:76px;object-fit:cover;border-radius:10px;border:1px solid var(--line,#ece3cf);cursor:pointer}
.eng-check{background:var(--card,#fff);border:1px solid var(--line,#ece3cf);border-radius:12px;padding:12px 14px;margin-bottom:10px}
.eng-check-top{display:flex;align-items:center;gap:10px;justify-content:space-between;margin-bottom:6px}
.eng-check-rat{font-size:12px;color:#a97f2f;margin-top:4px}
.eng-check-c{font-size:12px;color:var(--ink2,#8a7d66);margin-top:4px;background:#f8f4ea;border-radius:8px;padding:8px 10px}
.eng-check-ops{display:flex;gap:8px;margin-top:10px}
.eng-upload-row{display:flex;align-items:center;gap:10px;margin-bottom:10px}
.eng-upload-nm{font-size:13px;color:#3d9c50;font-weight:700;margin-bottom:10px}
.eng-sum-box{background:var(--card,#fff);border:1px solid var(--line,#ece3cf);border-radius:14px;padding:16px}
.eng-sum-sec{font-size:13px;font-weight:800;color:#a97f2f;margin:14px 0 6px;padding-left:8px;border-left:3px solid #c9a24b}
.eng-sum-item{font-size:13px;line-height:1.8;color:var(--ink,#2a2419);margin-bottom:6px}
.tip{font-size:12px;color:var(--ink2,#8a7d66);line-height:1.7;margin:6px 0 10px}
@media (max-width:640px){
  .eng-list{grid-template-columns:1fr}
  .eng-stats{grid-template-columns:repeat(2,1fr)}
  .eng-d-ops{flex-wrap:wrap}
}

.file-thumb { flex:0 0 auto; width:44px; height:44px; border-radius:6px; object-fit:cover; border:1px solid var(--border-light); background:#fff; cursor:pointer; }
.file-thumb.vid { display:flex; align-items:center; justify-content:center; background:linear-gradient(135deg,#1b1b1b,#3a3a3a); color:#e8c27a; font-size:14px; cursor:pointer; }
.file-thumb.aud { display:flex; align-items:center; justify-content:center; background:linear-gradient(135deg,#8a5f2a,#c9a24b); color:#fff; font-size:14px; cursor:pointer; }
.file-thumb.vid { position:relative; overflow:hidden; }
.file-thumb.vid .vt { position:absolute; inset:0; width:100%; height:100%; object-fit:cover; border-radius:inherit; background:#000; }
@media (max-width:640px){ .file-thumb { width:40px; height:40px; } }

/* 工程管理 编辑弹窗放大 */
.eng-edit-modal { width:860px !important; }
.eng-edit-grid { gap:20px 24px; }
.eng-edit-grid label { display:block; font-size:13.5px; color:#5A4A33; margin-bottom:8px; font-weight:700; }
.eng-edit-grid input, .eng-edit-grid select, .eng-edit-grid textarea { width:100%; padding:13px 16px; border:1.5px solid var(--border); border-radius:10px; font-size:16px; background:#FFFDF8; color:var(--text); font-family:inherit; outline:none; }
.eng-edit-grid input:focus, .eng-edit-grid select:focus, .eng-edit-grid textarea:focus { border-color:var(--primary); box-shadow:0 0 0 3px var(--primary-bg); }
.eng-edit-grid input::placeholder { color:#B9A98C; }
@media (max-width:640px) {
  .eng-edit-modal { width:100% !important; }
  .eng-edit-grid { grid-template-columns:1fr; gap:14px; }
  .eng-edit-grid input, .eng-edit-grid select, .eng-edit-grid textarea { padding:12px 14px; font-size:16px; }
}

/* 工地问题 上报/解决 弹窗 */
.eng-issue-grid { gap:16px 22px; }
.eng-issue-grid textarea { min-height:120px; resize:vertical; line-height:1.6; }
.eng-issue-grid select { background:#FFFDF8; }
.eng-up-btns { margin-top:2px; }
.eng-up-btns label.btn { display:inline-block; padding:12px 22px; font-size:15px; border-radius:10px; cursor:pointer; }
.eng-photos { display:flex; flex-wrap:wrap; gap:10px; margin-top:2px; }
.eng-photos img { width:96px; height:72px; object-fit:cover; border-radius:8px; border:1px solid var(--border-light); }
@media (max-width:640px) {
  .eng-issue-grid textarea { min-height:140px; }
  .eng-photos img { width:84px; height:63px; }
}

/* 上报问题：语音输入按钮（大号高级感） */
.eng-issue-text-wrap { position:relative; }
.eng-issue-text-wrap textarea { width:100%; box-sizing:border-box; padding-right:58px; }
.eng-voice-btn { position:absolute; top:10px; right:10px; width:48px; height:48px; border-radius:50%; border:none; background:linear-gradient(135deg,#a97f2f,#d4ab57); color:#fff; display:flex; align-items:center; justify-content:center; cursor:pointer; box-shadow:0 4px 12px rgba(169,127,47,.4), inset 0 1px 0 rgba(255,255,255,.35); transition:transform .15s ease, box-shadow .2s ease; z-index:2; }
.eng-voice-btn svg { filter:drop-shadow(0 1px 2px rgba(0,0,0,.18)); }
.eng-voice-btn:active { transform:scale(.9); }
.eng-voice-btn.rec { background:linear-gradient(135deg,#e05b4d,#d23f32); box-shadow:0 4px 12px rgba(224,91,77,.45); animation:engVoicePulse 1.1s infinite; }
@keyframes engVoicePulse { 0%,100% { box-shadow:0 0 0 0 rgba(224,91,77,.5), 0 4px 12px rgba(224,91,77,.4); } 50% { box-shadow:0 0 0 14px rgba(224,91,77,0), 0 4px 12px rgba(224,91,77,.4); } }

/* 验收原文件素材编辑 */
.eng-tpl-tip { font-size:13px; color:#8a7d66; background:#faf5ea; border:1px solid #efe3c8; border-radius:10px; padding:10px 12px; margin-bottom:12px; line-height:1.7; }
.eng-tpl-list { display:flex; flex-direction:column; gap:8px; max-height:60vh; overflow:auto; }
.eng-tpl-row { border:1px solid #efe3c8; border-radius:12px; padding:12px 14px; background:#FFFDF8; cursor:pointer; display:flex; justify-content:space-between; align-items:center; }
.eng-tpl-row:active { background:#f7f0df; }
.eng-tpl-t { font-size:15px; font-weight:800; color:var(--ink,#1a1a1a); }
.eng-tpl-t .n { font-size:12px; color:#a97f2f; margin-left:8px; font-weight:700; }
.eng-tpl-u { font-size:12px; color:#b0a68f; }
.eng-tpl-edit-tip { font-size:13px; color:#8a7d66; background:#faf5ea; border:1px solid #efe3c8; border-radius:10px; padding:10px 12px; margin-bottom:12px; line-height:1.7; }
.eng-tpl-rows { display:flex; flex-direction:column; gap:14px; max-height:58vh; overflow:auto; padding-right:4px; }
.eng-tpl-it { border:1px solid #efe3c8; border-radius:12px; padding:14px 16px; background:#FFFDF8; }
.eng-tpl-it-h { display:flex; justify-content:space-between; align-items:center; margin-bottom:10px; }
.eng-tpl-it-h b { font-size:14px; color:#a97f2f; }
/* 验收项编辑：标签与输入框严格对齐的行式栅格 */
.eng-tpl-row-g { display:grid; grid-template-columns:110px 1fr; gap:8px 14px; align-items:start; margin:7px 0; }
.eng-tpl-row-g > label { font-size:12.5px; color:#8a7d66; line-height:1.6; padding-top:8px; text-align:right; white-space:nowrap; }
.eng-tpl-row-g .inp { width:100%; box-sizing:border-box; }
.eng-tpl-row-g .eng-up-btns { margin-top:2px; }
.eng-tpl-row-g .eng-photos { display:flex; flex-wrap:wrap; gap:8px; margin-top:8px; }
.eng-tpl-it label { display:block; font-size:12.5px; color:#8a7d66; margin:8px 0 4px; }
.eng-tpl-it .inp { width:100%; box-sizing:border-box; }
/* 验收单预览 */
.eng-prev { max-height:70vh; overflow:auto; padding-right:4px; }
.eng-prev-head { text-align:center; border-bottom:2px solid #c8a45c; padding-bottom:10px; margin-bottom:14px; }
.eng-prev-head h3 { margin:0 0 4px; font-size:17px; color:#1a1a1a; }
.eng-prev-head div { font-size:12px; color:#8a7d66; }
.eng-prev-item { border:1px solid #efe3c8; border-radius:10px; padding:10px 12px; margin-bottom:10px; background:#FFFDF8; }
.eng-prev-item h4 { margin:0 0 4px; font-size:14px; color:#a97f2f; }
.eng-prev-item p { margin:0; font-size:13px; color:#555; line-height:1.6; white-space:pre-wrap; }
.eng-prev-media { display:flex; flex-wrap:wrap; gap:8px; margin-top:8px; }
.eng-prev-media img, .eng-prev-media video { width:96px; height:64px; object-fit:cover; border-radius:6px; border:1px solid #eee; }
.eng-tpl-media { position:relative; display:inline-block; }
.eng-tpl-x { position:absolute; top:-6px; right:-6px; width:20px; height:20px; border-radius:50%; border:none; background:#e05b4d; color:#fff; font-size:13px; line-height:1; cursor:pointer; box-shadow:0 1px 3px rgba(0,0,0,.25); }
.btn.danger { background:#fff; color:#e05b4d; border:1px solid #f0c9c4; }
.btn.danger:active { background:#fdeeea; }

/* 确认完工：电子验收单卡片 */
.eng-comp-card { border:1px solid var(--border-light); border-radius:12px; padding:14px 16px; margin-bottom:12px; background:#FFFDF8; }
.eng-comp-t { font-size:15px; font-weight:800; color:var(--ink); }
.eng-comp-st { margin-top:8px; font-size:14px; }
.eng-comp-btn { margin-top:10px; }
.eng-comp-btn .btn { letter-spacing:1px; }

/* 进度计划：操作条 + 工序编辑大弹窗 + PDF 提示 */
.eng-phase-ops { display:flex; gap:10px; flex-wrap:wrap; align-items:center; margin:14px 0 6px; }
.eng-phase-grid { grid-template-columns:1fr 1fr !important; }
.eng-phase-grid .full { grid-column:1/-1; }
.eng-phase-grid label { align-self:center; }
.eng-phase-grid input, .eng-phase-grid select, .eng-phase-grid textarea { width:100%; }
.eng-pdf-done p { margin:6px 0; color:#444; }
.eng-pdf-link { background:#F7F3EA; border:1px dashed #c9a24b; color:#7a5b14; border-radius:8px; padding:10px 12px; font-size:13px; word-break:break-all; margin:10px 0; }
/* PDF 生成用版式 */
.eng-pdf-wrap table { border-collapse:collapse; }
.eng-pdf-wrap td, .eng-pdf-wrap th { border:1px solid #ddd; }
.eng-pdf-wrap tbody tr:nth-child(even) { background:#FBF8F1; }
.eng-pdf-wrap tr.grp td { background:#EFE7D3; font-weight:800; color:#5a4210; padding:7px 10px; }
.eng-pdf-wrap td.c { text-align:center; }

/* 工序拖拽排序 */
.eng-ph-handle { display:flex; align-items:center; justify-content:center; width:46px; min-width:46px; height:46px; color:#8a6d2f; font-size:18px; letter-spacing:-2px; cursor:grab; touch-action:none; user-select:none; border-radius:10px; background:rgba(201,167,92,.16); border:1px solid rgba(201,167,92,.3); }
.eng-ph-handle:hover { background:#F3EBD9; }
.eng-ph-handle:active { cursor:grabbing; background:#EADDBB; }
.eng-ph-seq { cursor:grab; touch-action:none; }
.eng-phase.dragging .eng-ph-seq { cursor:grabbing; }
.eng-phase { position:relative; cursor:grab; }
.eng-comp-zone { margin-top:18px; padding:16px; border-radius:12px; background:linear-gradient(135deg,#f7f0e0,#fdf9ef); border:1px solid #e6d9b8; text-align:center; }
.eng-comp-zone.ok { background:linear-gradient(135deg,#e9f5ea,#f3faf3); border-color:#bfe0c2; }
.eng-comp-go { width:100%; max-width:420px; font-size:16px; padding:12px 0; border-radius:10px; box-shadow:0 4px 14px rgba(61,156,80,.25); }
.eng-comp-tip { margin-top:8px; color:#4c8a56; font-size:13px; }
.eng-comp-wait { cursor:pointer; padding:6px 0; }
.eng-comp-wait b { color:#a97f2f; }
.eng-comp-why { margin-top:6px; color:#8a7d66; font-size:13px; }
.eng-comp-reason-sec { font-weight:700; color:#8a5a2b; margin:10px 0 4px; }
.eng-phase.dragging { box-shadow:0 10px 24px rgba(169,127,47,.25); border-radius:10px; outline:1px solid #c8a75c; opacity:.96; }
.eng-phase.dragging .eng-ph-handle { cursor:grabbing; }
.eng-phase.dragging { background:#FFFDF7; box-shadow:0 6px 18px rgba(0,0,0,.12); opacity:.95; }
.eng-phase.drop-before { box-shadow:0 -3px 0 #e05b4d; }
.eng-phase.drop-after { box-shadow:0 3px 0 #e05b4d; }
.eng-phase.drop-before { box-shadow:0 -3px 0 0 #a97f2f; }
.eng-phase.drop-after { box-shadow:0 3px 0 0 #a97f2f; }

/* 行间插入加号（红色） */
.eng-phase-add { display:flex; align-items:center; justify-content:center; gap:8px; margin:2px 0 8px; padding:3px 0; color:#e05b4d; font-size:16px; font-weight:800; cursor:pointer; user-select:none; border-radius:8px; }
.eng-phase-add::before, .eng-phase-add::after { content:''; flex:1; height:1px; background:linear-gradient(90deg,transparent,#e8c4bd,transparent); }
.eng-phase-add:hover { background:#fdf3f1; }
.eng-phase-add span { width:30px; height:30px; border-radius:50%; background:#e05b4d; color:#fff; display:flex; align-items:center; justify-content:center; font-size:20px; line-height:1; box-shadow:0 2px 6px rgba(224,91,77,.35); }
/* 行尾删除按钮 */
.eng-phase-del { color:#e05b4d !important; border-color:rgba(224,91,77,.35) !important; background:#fff8f6 !important; font-size:16px !important; line-height:1 !important; padding:4px 10px !important; flex:none; }
.eng-phase-del:hover { background:#e05b4d !important; color:#fff !important; }
.eng-phase-tip { font-size:12px; color:var(--muted,#a09278); line-height:1.6; }


/* 上报工地问题：问题描述框最大化 */
.eng-issue-content { width:100%; min-height:180px; box-sizing:border-box; font-size:16px; line-height:1.7; padding:12px; border:1px solid #ddd; border-radius:10px; resize:vertical; }
.eng-issue-form textarea.eng-issue-content { width:100%; }

.eng-del{width:22px;height:22px;border:0;border-radius:50%;background:#fde8e8;color:#e05b4d;font-size:12px;font-weight:800;line-height:1;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;flex:none}
.eng-del:hover{background:#e05b4d;color:#fff}
.cl-table{width:100%;border-collapse:collapse;margin-top:8px;font-size:12px;background:#fff}
.cl-table th{background:#f6f0e2;color:#8a6a26;text-align:left;padding:6px 8px;border:1px solid #e8dcc0;font-weight:700}
.cl-table td{padding:6px 8px;border:1px solid #eee5d0;color:var(--ink,#2a2419);vertical-align:top;line-height:1.6}
.cl-table tr.cl-grp td{background:#fbf6e9;color:#a97f2f;font-weight:800}
.cl-row{display:flex;gap:8px;align-items:center;margin-bottom:8px}
.cl-row input{border:1px solid #e0d2ae;border-radius:8px;padding:8px 10px;font-size:13px;background:#fffdf7}

/* 客户编辑自动保存状态条 */
.autosave-bar { font-size:12px; color:#2e9e5b; background:#eef9f0; border:1px solid #d4ecd9; border-radius:8px; padding:6px 10px; margin-bottom:10px; display:block; }
.autosave-bar.busy { color:#a97f2f; background:#faf5ea; border-color:#efe3c8; }

.cell-edit{cursor:pointer;border-bottom:1px dashed #b8c6d4;padding:1px 2px;border-radius:3px;transition:background .15s;white-space:nowrap}.cell-edit:hover{background:#eef4ff;border-bottom-style:solid}
.note-atts{display:inline-flex;align-items:center;gap:4px;margin-left:4px;vertical-align:middle}.note-thumb{width:30px;height:30px;object-fit:cover;border-radius:4px;border:1px solid #e2e8f0;display:inline-block}.note-file{font-size:11px;background:#f1f5f9;border:1px solid #e2e8f0;border-radius:4px;padding:2px 5px;white-space:nowrap;max-width:110px;overflow:hidden;text-overflow:ellipsis;display:inline-block;vertical-align:middle}.note-modal .nm-item{position:relative;width:84px;height:84px;border:1px solid #e2e8f0;border-radius:8px;overflow:hidden;background:#f8fafc;display:flex;align-items:center;justify-content:center}.note-modal .nm-item img{width:100%;height:100%;object-fit:cover}.note-modal .nm-item .nf{font-size:11px;padding:6px;text-align:center;word-break:break-all;line-height:1.4;color:#475569}.note-modal .nm-del{position:absolute;top:2px;right:2px;width:18px;height:18px;line-height:16px;text-align:center;border:none;border-radius:50%;background:rgba(15,23,42,.55);color:#fff;font-size:13px;cursor:pointer;padding:0}
.pay-proj{display:block;font-size:11px;color:var(--muted);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:150px}
/* 全局搜索结果弹窗 */
.gs-sec{margin:10px 0;padding:10px;background:var(--bg,#faf8f4);border-radius:10px}
.gs-sec h4{margin:0 0 8px;font-size:13px;color:var(--muted,#8a8176)}
.gs-sec h4 b{color:var(--primary,#b7791f)}
.gs-row{display:flex;align-items:center;gap:10px;padding:9px 10px;border-radius:8px;cursor:pointer;background:#fff;margin-bottom:6px;border:1px solid #eee}
.gs-row:hover{background:var(--primary-soft,#f7eeda)}
.gs-row b{flex:0 0 auto;min-width:90px;font-size:14px}
.gs-row em{flex:1;font-style:normal;font-size:12px;color:var(--muted,#8a8176);overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
.gs-empty{padding:14px;text-align:center;color:var(--muted,#8a8176);font-size:12px;background:#fff;border-radius:8px;border:1px dashed #ddd}
/* 审批中心筛选栏 */
.appr-filters{display:flex;align-items:center;gap:10px;padding:10px 0 2px;width:100%}
.appr-filters select,.appr-filters input[type=month]{padding:8px 12px;border:1px solid #ddd;border-radius:8px;background:#fff;font-size:13px;color:var(--text,#3a3428)}
.appr-filters input[type=month]{width:150px}
/* 打卡 */
.hero-right{display:flex;align-items:center;gap:14px}
.hero-punch{display:flex;align-items:center;gap:8px;padding:10px 18px 10px 14px;border:none;border-radius:999px;cursor:pointer;color:#fff;background:linear-gradient(135deg,#c98a2d,#b7791f 55%,#96620f);box-shadow:0 6px 16px rgba(183,121,31,.35);transition:transform .15s ease,box-shadow .15s ease}
.hero-punch:hover{transform:translateY(-1px);box-shadow:0 9px 20px rgba(183,121,31,.45)}
.hero-punch:active{transform:scale(.97)}
.hero-punch svg{width:26px;height:26px;flex:0 0 auto}
.hero-punch i{font-style:normal;font-size:14px;font-weight:600;letter-spacing:.5px;white-space:nowrap}
.hero-punch.done{background:linear-gradient(135deg,#5a9a68,#3f7d4e);box-shadow:0 6px 16px rgba(63,125,78,.3)}
.att-row{display:flex;align-items:center;gap:12px;padding:10px 12px;border-radius:10px;background:#fff;border:1px solid #eee;margin-bottom:8px}
.att-row b{font-size:14px;min-width:64px}
.att-row em{font-style:normal;font-size:12px;color:var(--muted,#8a8176);flex:1}
@media (max-width:640px){.hero-punch{padding:9px 14px 9px 11px}.hero-punch svg{width:22px;height:22px}.hero-punch i{font-size:12px}}
/* 打卡三选项 / 外勤 / 记录增强 */
.punch-title{font-size:14px;font-weight:600;margin-bottom:10px}
.punch-opt{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:14px 16px;border-radius:12px;border:1px solid #eee;background:#fff;margin-bottom:10px;cursor:pointer;transition:border-color .15s,box-shadow .15s,transform .15s}
.punch-opt:hover{border-color:var(--primary,#b7791f);box-shadow:0 4px 14px rgba(183,121,31,.15);transform:translateY(-1px)}
.punch-opt b{font-size:15px;color:#3a342c;white-space:nowrap}
.punch-opt span{font-size:12px;color:var(--muted,#8a8176);text-align:right}
.punch-fw label{display:block;font-size:13px;font-weight:600;margin:10px 0 6px;color:#3a342c}
.punch-fw textarea{width:100%;box-sizing:border-box;padding:10px;border-radius:10px;border:1px solid #ddd;font-size:14px;font-family:inherit;resize:vertical}
.fw-upload{display:flex;align-items:center;justify-content:center;gap:8px;padding:22px 10px;border:1.5px dashed #cbb98f;border-radius:12px;background:#fdf9f0;cursor:pointer;color:#b7791f;font-size:14px}
.fw-upload input{display:none}
.fw-upload i{font-style:normal;font-size:22px;font-weight:600}
.fw-imgs{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}
.fw-img{position:relative;width:88px;height:88px;border-radius:10px;overflow:hidden;border:1px solid #eee}
.fw-img img{width:100%;height:100%;object-fit:cover;display:block}
.fw-img i{position:absolute;top:2px;right:2px;width:20px;height:20px;line-height:20px;text-align:center;background:rgba(0,0,0,.55);color:#fff;border-radius:50%;font-style:normal;cursor:pointer;font-size:12px}
.att-tag{flex:0 0 auto;padding:2px 9px;border-radius:999px;font-size:11px;font-weight:600;font-style:normal}
.att-tag.t-checkin{background:#e8f4ea;color:#3f7d4e}
.att-tag.t-fieldwork{background:#fdf1dd;color:#b7791f}
.att-tag.t-leave{background:#f3e9f7;color:#8a4fa3}
.att-note{width:100%;font-size:12px;color:#6b6357;background:#faf7f0;border-radius:8px;padding:6px 10px;box-sizing:border-box;margin-top:4px;line-height:1.5}
.att-photos{width:100%;display:flex;gap:6px;margin-top:6px;flex-wrap:wrap}
.att-photos img{width:64px;height:64px;object-fit:cover;border-radius:8px;border:1px solid #eee;cursor:zoom-in}
/* 收款报送：选择客户 / 管理类型 */
.btn-cust-pick{background:var(--primary,#b7791f);color:#fff;border:none;border-radius:10px;padding:10px 14px;font-size:13px;cursor:pointer;white-space:nowrap}
.btn-cust-pick:hover{opacity:.9}
.pk-search:focus{border-color:var(--primary,#b7791f)!important;outline:none}
.pk-row{padding:11px 12px;border:1px solid #eee;border-radius:10px;margin-bottom:8px;background:#fff;cursor:pointer;font-size:14px;transition:border-color .15s,box-shadow .15s}
.pk-row:hover{border-color:var(--primary,#b7791f);box-shadow:0 3px 10px rgba(183,121,31,.12)}
.mt-row button{cursor:pointer}

/* 客户状态快速修改 */
.st-edit { cursor: pointer; text-decoration: none; display: inline-block; }
.st-edit:hover { opacity: .8; }
.st-opt { border: 1px solid var(--border); background: #fff; border-radius: 20px; padding: 7px 16px; font-size: 14px; cursor: pointer; color: #333; transition: all .15s; }
.st-opt.on { background: var(--primary, #1f6feb); border-color: var(--primary, #1f6feb); color: #fff; font-weight: 600; }

/* 收款报送：小区地址只读 */
.form-grid input[readonly]{ color:#6b6358; }

.flow-filters{display:flex;align-items:center;gap:8px;padding:10px 0 4px;flex-wrap:wrap;width:100%}
.flow-filters select,.flow-filters input{padding:7px 10px;border:1px solid #ddd;border-radius:8px;background:#fff;font-size:13px;color:var(--text,#3a3428);max-width:150px}
.flow-filters input[type=month]{width:140px}
.flow-filters .btn{margin-left:auto}


/* 数据关联工作流（蓝图画布） */
.wf-page{min-height:calc(100vh - 60px)}
.wf-head{display:flex;align-items:baseline;gap:16px;flex-wrap:wrap}
.wf-tip{font-size:12.5px;color:var(--muted,#9a8f7d)}
.wf-canvas{position:relative;overflow:auto;background:radial-gradient(circle at 20% 30%, rgba(229,215,185,.55), transparent 40%),radial-gradient(circle at 80% 70%, rgba(221,205,170,.5), transparent 45%),#f7f1e3;border:1px solid #e8ddc4;border-radius:16px;margin-top:12px;min-height:560px;box-shadow:inset 0 2px 14px rgba(180,150,90,.12)}
.wf-links{position:absolute;left:0;top:0;pointer-events:none;z-index:1}
.wf-node{position:absolute;z-index:2;width:168px;min-height:104px;background:#fffdf8;border:1.5px solid var(--wfcol,#c9a86a);border-radius:12px;padding:10px 12px;text-align:center;cursor:pointer;box-shadow:0 3px 10px rgba(160,130,70,.15);transition:box-shadow .12s,transform .12s;user-select:none}
.wf-node:hover{box-shadow:0 6px 18px rgba(160,130,70,.28);transform:translateY(-2px)}
.wf-node.wf-drag{opacity:.85;box-shadow:0 10px 24px rgba(160,130,70,.35);cursor:grabbing}
.wf-node::before{content:'';position:absolute;left:0;top:8px;bottom:8px;width:4px;background:var(--wfcol);border-radius:0 4px 4px 0}
.wf-ico{font-size:24px;line-height:1}
.wf-nm{font-size:14px;font-weight:700;color:var(--text,#3a3428);margin-top:5px}
.wf-num{font-size:22px;font-weight:800;color:#b8860b;margin:2px 0 0}
.wf-num em{font-style:normal;font-size:12px;color:var(--muted,#9a8f7d);margin-left:3px}
.wf-sub{font-size:11px;color:var(--muted,#9a8f7d);margin-top:3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.wf-row{display:flex;align-items:center;gap:10px;padding:9px 10px;border:1px solid #eee6d6;border-radius:10px;margin-bottom:6px;cursor:pointer;background:#fffdf8}
.wf-row:hover{border-color:#c9a86a;background:#fdf8ec}
.wf-row b{display:block;font-size:14px;color:var(--text,#3a3428)}
.wf-row em{display:block;font-style:normal;font-size:12px;color:var(--muted,#9a8f7d);margin-top:2px}
.wf-row span{margin-left:auto;font-size:12px;color:#c9a86a;white-space:nowrap}
@media (max-width:760px){.wf-canvas{min-height:420px}.wf-node{width:150px;min-height:96px}}

.wf-row{display:flex;align-items:center;gap:10px;padding:9px 10px;border:1px solid #eee6d6;border-radius:10px;margin-bottom:6px;cursor:pointer;background:#fffdf8}
.wf-row:hover{border-color:#c9a86a;background:#fdf8ec}
.wf-row b{display:block;font-size:14px;color:var(--text,#3a3428)}
.wf-row em{display:block;font-style:normal;font-size:12px;color:var(--muted,#9a8f7d);margin-top:2px}
.wf-row span{margin-left:auto;font-size:12px;color:#c9a86a;white-space:nowrap}
@media (max-width:760px){.wf-node{min-width:104px;max-width:104px;padding:8px 4px}}


/* 个人积分 */
.pt-card{display:flex;align-items:center;gap:14px;margin-top:18px;padding:14px 18px;cursor:pointer;background:linear-gradient(135deg,#fffdf5,#fdf6e3);border:1px solid #ead9b0;border-radius:14px;transition:box-shadow .15s}
.pt-card:hover{box-shadow:0 4px 14px rgba(201,168,106,.3);border-color:#c9a86a}
.pt-icon{font-size:26px}
.pt-info{display:flex;flex-direction:column}
.pt-label{font-size:12px;color:var(--muted,#9a8f7d)}
.pt-balance{font-size:26px;font-weight:800;color:#b8860b;line-height:1.1}
.pt-balance em{font-style:normal;font-size:12px;color:var(--muted,#9a8f7d);margin-left:3px}
.pt-tips{flex:1;text-align:right;overflow:hidden}
.pt-tip{font-size:12.5px;color:#8a6d3b;font-weight:600}
.pt-tip2{font-size:11.5px;color:var(--muted,#9a8f7d);margin-top:2px}
.pt-arrow{font-size:20px;color:#c9a86a}
.pt-hero{text-align:center;padding:6px 0 14px;border-bottom:1px solid #f0e8d8;margin-bottom:12px}
.pt-hero{font-size:44px;font-weight:800;color:#b8860b}
.pt-hero em{font-style:normal;font-size:16px;color:var(--muted,#9a8f7d)}
.pt-hero-sub{font-size:12px;color:var(--muted,#9a8f7d);margin-top:2px}
.pt-sec{font-size:13px;font-weight:700;color:#8a6d3b;margin:12px 0 8px}
.pt-row{display:flex;align-items:center;gap:10px;padding:8px 10px;border:1px solid #eee6d6;border-radius:10px;margin-bottom:6px;background:#fffdf8}
.pt-row b{display:block;font-size:13.5px;color:var(--text,#3a3428)}
.pt-row em{display:block;font-style:normal;font-size:11.5px;color:var(--muted,#9a8f7d);margin-top:2px}
.pt-row span{margin-left:auto;font-weight:700;font-size:15px}
.pt-plus{color:#2e7d32}
.pt-minus{color:#c62828}
.pt-rule{display:flex;align-items:center;gap:8px;padding:8px 10px;border:1px solid #eee6d6;border-radius:10px;margin-bottom:6px;background:#fffdf8;flex-wrap:wrap}
.pt-rule span{font-size:13.5px;font-weight:600;color:var(--text,#3a3428)}
.pt-rule b{font-size:13px;color:#b8860b;margin-left:auto}
.pt-rule em{font-style:normal;font-size:12px;color:var(--muted,#9a8f7d)}
.pt-admin{margin-top:14px;padding:12px;border:1px dashed #d9c89e;border-radius:10px;background:#fdf9ee}
.pt-admin-title{font-size:13px;font-weight:700;color:#8a6d3b;margin-bottom:8px}
.pt-form{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:8px}
.pt-form input{padding:7px 10px;border:1px solid #ddd;border-radius:8px;font-size:13px}
.pt-user{display:flex;align-items:center;gap:8px;padding:5px 8px;border-bottom:1px solid #f3ecdc;font-size:13px}
.pt-user span{font-weight:600}
.pt-user em{font-style:normal;color:var(--muted,#9a8f7d);font-size:11.5px;margin-left:4px}
.pt-user b{margin-left:auto;color:#b8860b}
.pt-del{margin-left:auto;background:#fdecea;color:#c62828;border:1px solid #f5c6c6;border-radius:6px;padding:2px 8px;font-size:12px;cursor:pointer}


/* 合作商家 */
.merch-hint{font-size:12px;color:var(--muted,#9a8f7d);font-weight:400;flex:1}
.merch-zones{display:flex;flex-direction:column;gap:18px;margin-top:16px}
.merch-zone{background:#fffdf6;border:1px solid #eadfc8;border-radius:14px;padding:14px 16px;min-height:150px}
.merch-zone-head{font-size:15px;font-weight:700;color:#8a6d3b;margin-bottom:10px}
.merch-zone-head span{font-size:12px;color:var(--muted,#9a8f7d);margin-left:6px}
.merch-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:12px}
.merch-card{background:#fff;border:1px solid #eadfc8;border-radius:12px;padding:12px 14px;cursor:pointer;transition:box-shadow .12s}
.merch-card:hover{box-shadow:0 4px 14px rgba(160,130,70,.2)}
.merch-card[draggable=true]{cursor:grab}
.merch-top{display:flex;align-items:center;gap:8px}
.merch-top b{font-size:15px;color:var(--text,#3a3428)}
.merch-key{background:#fbe9d0;color:#b06a00;font-size:11px;padding:1px 8px;border-radius:10px;font-weight:600}
.merch-line{font-size:12.5px;color:var(--text,#3a3428);margin-top:5px}
.merch-money{color:#b06a00}
.merch-qr{margin-top:6px;text-align:center}
.merch-qr img{width:64px;height:64px;object-fit:contain;border:1px solid #eee;border-radius:8px;background:#fff}
.merch-sites{font-size:11.5px;color:var(--muted,#9a8f7d);margin-top:6px;line-height:1.5}
.merch-edit{font-size:12px;color:#c9a86a;margin-top:8px;font-weight:600}
.merch-form label{display:block;font-size:12.5px;font-weight:600;color:#8a6d3b;margin-bottom:10px}
.merch-form input,.merch-form select{display:block;width:100%;margin-top:4px;padding:8px 10px;border:1px solid #ddd;border-radius:8px;font-size:13px;font-weight:400;color:var(--text,#3a3428)}
.merch-qr-upload{display:flex;align-items:center;gap:10px;margin-top:4px}
.merch-qr-upload input[type=file]{width:auto}
.merch-qr-preview{width:72px;height:72px;object-fit:contain;border:1px solid #eee;border-radius:8px}
.merch-qr-tip{font-size:12px;color:var(--muted,#9a8f7d);font-weight:400}
.merch-sites-sel{display:flex;flex-wrap:wrap;gap:6px;margin-top:6px;max-height:160px;overflow:auto;padding:8px;border:1px solid #eee;border-radius:8px}
.merch-sites-sel label{font-weight:400;font-size:12px;margin-bottom:0;display:flex;align-items:center;gap:4px;width:calc(50% - 6px)}


/* 时间管理 月视图 */
.tm-tools{display:flex;align-items:center;gap:8px}
.tm-ym{font-size:15px;font-weight:700;color:var(--text,#3a3428);min-width:96px;text-align:center}
.tm-hide{font-size:12.5px;color:var(--muted,#9a8f7d);display:flex;align-items:center;gap:4px;margin-left:4px}
.tm-bar{font-size:12.5px;color:var(--muted,#9a8f7d);margin:10px 0 12px}
.tm-bar b{color:#b06a00}
.tm-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:6px;background:#f5efdf;border-radius:14px;padding:8px}
.tm-wk{text-align:center;font-size:12px;font-weight:700;color:#8a6d3b;padding:4px 0}
.tm-cell{background:#fffdf6;border:1px solid #eadfc8;border-radius:10px;min-height:108px;padding:6px 7px;cursor:pointer;display:flex;flex-direction:column;gap:3px;transition:box-shadow .12s}
.tm-cell:hover{box-shadow:0 2px 10px rgba(160,130,70,.18)}
.tm-cell.tm-today{border-color:#b06a00;box-shadow:0 0 0 2px rgba(176,106,0,.25)}
.tm-cell.tm-empty{background:transparent;border-color:transparent;cursor:default}
.tm-head{display:flex;align-items:baseline;gap:5px;flex-wrap:wrap}
.tm-day{font-size:14px;font-weight:700;color:var(--text,#3a3428)}
.tm-lunar{font-size:10.5px;color:#b5a98e}
.tm-tag{font-size:9.5px;font-weight:600;padding:0 4px;border-radius:6px}
.tm-solar{background:#eef3ff;color:#4c7ef3}
.tm-fest{background:#fdeaea;color:#e0444c}
.tm-holi{background:#f1efe8;color:#9a8f7d}
.tm-evs{display:flex;flex-direction:column;gap:2px;overflow:hidden}
.tm-ev{font-size:12.5px;line-height:1.35;color:#000;background:color-mix(in srgb,var(--c) 15%,#fff);border-left:3px solid var(--c);border-radius:5px;padding:2px 8px;cursor:pointer;display:flex;align-items:center;min-width:0;font-weight:600}
.tm-ev .tm-t{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tm-ev i{font-style:normal;color:var(--c);font-size:10.5px;flex:none}
.tm-dot{display:none}
.tm-ev.tm-done{opacity:1;text-decoration:line-through;color:#aaa;background:#f5f5f5;border-left-color:#ddd}
.tm-more{font-size:10.5px;color:#b06a00;font-weight:700}
.tm-prog{height:3px;background:#eee;border-radius:2px;margin-top:auto;overflow:hidden}
.tm-prog i{display:block;height:100%;background:#b06a00;border-radius:2px}
.tm-form label{display:block;font-size:15px;font-weight:700;color:#222;margin-bottom:10px}
.tm-form input,.tm-form select{display:block;width:100%;margin-top:6px;padding:10px 12px;border:1.5px solid #bbb;border-radius:8px;font-size:16px;font-weight:500;color:#222;background:#fff}
.tm-done-chk{display:flex;align-items:center;gap:6px}
.tm-done-chk input{width:auto;margin-top:0}


/* 时间管理 v2 时光序交互 */
.tm-chk{display:inline-flex;align-items:center;justify-content:center;width:14px;height:14px;border:1.5px solid var(--c);border-radius:50%;font-size:9px;color:#fff;background:transparent;flex:none;cursor:pointer}
.tm-ev.tm-done .tm-chk{background:var(--c)}
.tm-ev.tm-rep{border-style:dashed}
.tm-more{font-size:10.5px;color:#b06a00;font-weight:700;cursor:pointer;text-align:left;background:none;border:none;padding:1px 4px;border-radius:5px}
.tm-more:hover{background:#f5efdf}
.tm-foot{display:flex;align-items:center;gap:5px;margin-top:auto}
.tm-cnt{font-size:9.5px;color:#b06a00;font-weight:700}
.tm-prog{height:3px;background:#f0e8d4;border-radius:2px;flex:1;overflow:hidden;display:block}
.tm-rep-chk,.tm-rep-info{display:flex;align-items:center;gap:6px}
.tm-rep-info{font-size:11.5px;color:#b06a00;background:#fdf6e3;border-radius:6px;padding:5px 8px}
.tm-doneat{font-size:10.5px;color:#9a8f7d;font-weight:400}

/* ===== 手机端日历优化：紧凑彩色标签风格 ===== */
@media (max-width:640px){
  .tm-grid{gap:2px;padding:3px;grid-template-columns:repeat(7,minmax(0,1fr))!important}
  .tm-wk{font-size:10px;padding:1px 0;display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:2px}
  .tm-cell{min-height:58px;padding:2px 3px;border-radius:5px;gap:1px;min-width:0}
  .tm-day{font-size:12px}
  .tm-lunar{font-size:8px}
  .tm-tag{display:none}
  .tm-evs{gap:1px}
  .tm-ev{font-size:9px;line-height:1.3;padding:1px 2px;border-left:none;border-radius:4px;color:#fff;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;background:var(--c)}
  .tm-ev .tm-t{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:1;min-width:0;color:#fff}
  .tm-ev i{color:#fff!important}
  .tm-ev.tm-done{opacity:1;text-decoration:line-through;text-decoration-color:#999;color:#999;background:transparent!important}
  .tm-ev.tm-done .tm-t{color:#999}
  .tm-ev i{display:none}
  .tm-more{font-size:8px;padding:0 2px}
  .tm-prog{height:2px}
}


/* 工作流卡片 */
.wfc-card {
  background:#fff;border-radius:12px;padding:12px 14px;min-width:110px;text-align:center;
  border-top:3px solid var(--wfc,#3f6fb5);box-shadow:0 1px 4px rgba(0,0,0,.08);
  transition:transform .15s;
}
.wfc-card:hover{transform:translateY(-2px);box-shadow:0 4px 12px rgba(0,0,0,.12)}
.wfc-ico{font-size:26px;line-height:1}
.wfc-name{font-size:14px;font-weight:600;margin-top:4px;color:#333}
.wfc-num{font-size:22px;font-weight:700;color:var(--wfc,#3f6fb5);margin-top:2px}
.wfc-num em{font-size:12px;font-weight:400;color:#999;margin-left:2px;font-style:normal}
.wfc-sub{font-size:11px;color:#999;margin-top:2px;max-width:130px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.wfc-arrow{font-size:22px;color:#bbb;font-weight:700;padding:0 2px}
