/* ============================================================
   Booo CHU
   配色：Taurus 纸感森绿 — 暖白底 × 翠绿 × 赭金
   ============================================================ */

:root {
  /* 暖底：纸感米白 */
  --bg:        #F1EFE9;
  --surface:   #FFFFFF;
  --surface-2: #FAF9F6;
  --surface-3: #EFEDE8;

  --border:    #E8E5E0;
  --border-2:  #DCD8D1;

  --text:      #2C2C2C;
  --text-2:    #5A5A5A;
  --text-3:    #999999;

  /* 主色：翠绿 */
  --accent:    #5F8D4E;
  --accent-2:  #7BA36A;
  --accent-3:  #4A6F3B;
  --accent-bg: #E8F0E3;
  --accent-bg-2: #D4E4D3;
  --accent-grad: linear-gradient(135deg, #5F8D4E 0%, #7BA36A 100%);

  /* 次强调：赭金 */
  --gold:      #A98249;
  --gold-2:    #C49A5A;
  --gold-bg:   #F5EFE6;
  --gold-bg-2: #EBE1D2;

  /* 状态 */
  --danger:    #B0453A;
  --danger-bg: #F9EAE8;
  --ok:        #5F8D4E;
  --ok-bg:     #E8F0E3;
  --info:      #5A7A8A;
  --info-bg:   #EAF1F4;

  /* 轻薄荷：hover/标签底 */
  --mint:      #C5D9C9;
  --mint-bg:   #EDF4F0;
  --mint-bg-2: #D8E8E0;

  --r-s: 6px;
  --r-m: 10px;
  --r-l: 14px;
  --r-xl: 18px;

  /* 运营协议指标行距（临时可调） */
  --kpi-row-pad-y: 14px;
  --kpi-row-lh: 1.6;

  --sh-1: 0 1px 3px rgba(44, 44, 44, 0.04), 0 1px 2px rgba(44, 44, 44, 0.03);
  --sh-2: 0 3px 8px rgba(44, 44, 44, 0.06);
  --sh-3: 0 6px 18px rgba(44, 44, 44, 0.08);
}

/* ---------- reset ---------- */
*, *::before, *::after { box-sizing: border-box; }
html, body { margin: 0; padding: 0; height: 100%; }
body {
  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans SC", "PingFang SC", "Microsoft YaHei", sans-serif;
  font-size: 14px; line-height: 1.55; color: var(--text); background: var(--bg);
  -webkit-font-smoothing: antialiased;
}
button, input, textarea, select { font: inherit; color: inherit; }
button { cursor: pointer; background: none; border: none; }
a { color: var(--accent); text-decoration: none; }
a:hover { text-decoration: underline; }
pre { margin: 0; font-family: inherit; white-space: pre-wrap; }
ul, ol { margin: 0; padding-left: 18px; }
mark { background: #F0E6CB; padding: 0 2px; border-radius: 3px; }
code { font-family: "SF Mono", Consolas, monospace; font-size: 12px; background: var(--surface-2); padding: 1px 4px; border-radius: 4px; }

/* ---------- layout ---------- */
.app { display: flex; height: 100vh; overflow: hidden; }
.sidebar {
  width: 220px; flex-shrink: 0; background: var(--bg); border-right: 1px solid var(--border);
  display: flex; flex-direction: column; overflow: hidden;
}
.main { flex: 1; display: flex; flex-direction: column; min-width: 0; overflow: hidden; }
.view-wrap { flex: 1; overflow: auto; padding: 22px 26px 34px; }

/* ---------- sidebar ---------- */
.brand { display: flex; align-items: center; gap: 12px; padding: 18px 18px 14px; }
.brand-mark {
  width: 40px; height: 40px; border-radius: var(--r-m); background: var(--accent);
  display: flex; align-items: center; justify-content: center; color: #fff; font-size: 18px; font-weight: 800;
  box-shadow: var(--sh-1);
}
.brand-name { font-size: 16px; font-weight: 800; letter-spacing: 1px; color: var(--text); }
.brand-sub { font-size: 12px; font-weight: 600; color: var(--text-2); margin-top: 1px; letter-spacing: .3px; }
.nav { flex: 1; overflow-y: auto; padding: 4px 12px 12px; scrollbar-width: thin; }
.nav::-webkit-scrollbar { width: 4px; }
.nav::-webkit-scrollbar-track { background: transparent; }
.nav::-webkit-scrollbar-thumb { background: rgba(0,0,0,.08); border-radius: 999px; }
.nav::-webkit-scrollbar-thumb:hover { background: rgba(0,0,0,.18); }
.nav-group-title {
  font-size: 10px; font-weight: 800; color: var(--accent); text-transform: uppercase; letter-spacing: .5px;
  padding: 8px 8px 4px; user-select: none; margin-bottom: 6px;
}
.nav-item {
  display: flex; align-items: center; gap: 9px; padding: 8px 10px; border-radius: var(--r-s);
  font-size: 13px; color: var(--text-2); cursor: pointer; transition: background .12s, color .12s;
  user-select: none; position: relative; width: 100%;
}
.nav-item:hover { background: var(--surface-2); color: var(--text); }
.nav-item.on { background: var(--accent-bg); color: var(--accent-3); font-weight: 700; }
.nav-ico { width: 18px; text-align: center; font-size: 14px; }
.nav-badge {
  min-width: 18px; height: 18px; padding: 0 5px; border-radius: 999px;
  background: var(--gold-bg); color: var(--gold); font-size: 10px; font-weight: 700;
  display: flex; align-items: center; justify-content: center;
}
.nav-badge:empty { display: none; }
.nav-right { margin-left: auto; display: flex; align-items: center; gap: 4px; }
.nav-handle {
  width: 18px; height: 18px; display: flex; align-items: center; justify-content: center;
  font-size: 13px; color: var(--text-3); cursor: pointer; border-radius: var(--r-s);
}
.nav-handle:hover { color: var(--text); background: var(--surface-3); }
.nav-hidden { opacity: .55; filter: grayscale(.35); }
.nav-hidden-badge {
  font-size: 10px; color: var(--text-3); background: var(--surface-2);
  border-radius: 999px; padding: 1px 6px; margin-left: 6px; vertical-align: middle;
}
.nav-unhide {
  font-size: 10.5px; color: var(--accent); cursor: pointer; border-radius: 999px;
  padding: 1px 7px; background: var(--accent-bg); white-space: nowrap;
}
.nav-unhide:hover { background: var(--accent); color: #fff; }
.nav-hidden-toggle { padding: 8px 10px; text-align: center; }
.sidebar-foot { padding: 8px 12px 12px; border-top: 1px solid var(--border); }
.sidebar-foot .ghost-btn {
  display: flex; align-items: center; width: 100%;
  border: none; background: transparent; padding: 7px 10px; border-radius: var(--r-s);
  font-size: 13px; color: var(--text-2); text-align: left; margin-bottom: 2px;
}
.sidebar-foot .ghost-btn:hover { background: var(--surface-2); color: var(--text); }
.foot-note { font-size: 10px; color: var(--text-3); margin-top: 8px; line-height: 1.45; padding: 0 10px; }
.nav-ctx {
  position: fixed; z-index: 1000; background: var(--surface); border: 1px solid var(--border);
  border-radius: var(--r-m); box-shadow: var(--sh-2); padding: 6px 0; min-width: 140px;
  display: flex; flex-direction: column;
}
.nav-ctx-item { padding: 8px 14px; font-size: 13px; color: var(--text-2); cursor: pointer; white-space: nowrap; }
.nav-ctx-item:hover { background: var(--surface-2); color: var(--text); }
.nav-ctx-close { border-top: 1px solid var(--border); color: var(--text-3); margin-top: 4px; }

/* ---------- topbar ---------- */
.topbar {
  height: 58px; border-bottom: 1px solid var(--border); background: var(--surface); padding: 0 22px;
  display: flex; align-items: center; gap: 12px; flex-shrink: 0;
}
.cmd-wrap {
  flex: 1; max-width: 520px; display: flex; align-items: center; gap: 10px;
  background: var(--surface-2); border: 1px solid var(--border); border-radius: 999px; padding: 5px 6px 5px 14px;
}
.cmd-ico { font-size: 15px; color: var(--text-3); }
.cmd-input {
  flex: 1; border: none; background: transparent; outline: none; font-size: 13px; min-width: 0;
}
.cmd-help {
  width: 24px; height: 24px; border-radius: 50%; background: var(--accent-bg); color: var(--accent);
  font-weight: 700; font-size: 12px; display: flex; align-items: center; justify-content: center;
}
.cmd-hint { display: none; }
.today-chip {
  font-size: 15px; font-weight: 600; color: var(--text); background: var(--surface-2);
  padding: 7px 14px; border-radius: 999px; white-space: nowrap;
  font-family: inherit;
}
.today-chip small { font-size: 12px; font-weight: 500; color: var(--text-2); margin-left: 4px; }

/* ---------- global search results ---------- */
.search-group { margin-bottom: 14px; }
.search-group-title { font-size: 12px; font-weight: 700; color: var(--text-2); margin-bottom: 6px; padding-left: 8px; border-left: 2px solid var(--accent); }
.search-result { padding: 10px 12px; border-radius: var(--r-m); background: var(--surface); border: 1px solid var(--border); margin-bottom: 6px; cursor: pointer; transition: background .15s, border-color .15s; }
.search-result:hover { background: var(--surface-2); border-color: var(--accent); }
.search-result.archived { opacity: .75; }
.search-result-title { font-size: 13px; font-weight: 600; color: var(--text); line-height: 1.4; }
.search-result-snippet { font-size: 12px; color: var(--text-2); margin-top: 4px; line-height: 1.5; white-space: pre-wrap; word-break: break-all; }

.cmd-wrap { max-width: 520px !important; }
.topbar { gap: 12px; }

/* ---------- typography helpers ---------- */
.sm { font-size: 12.5px; }
.xs { font-size: 11.5px; }
.txt-2 { color: var(--text-2); }
.txt-3 { color: var(--text-3); }
.mono { font-family: "SF Mono", Consolas, monospace; }
.muted { color: var(--text-3); }
.hidden { display: none !important; }

/* ---------- page head ---------- */
.page-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; margin-bottom: 22px; }
.page-title { font-size: 22px; font-weight: 800; color: var(--text); letter-spacing: -.2px; padding-left: 12px; border-left: 4px solid var(--accent); line-height: 1.3; }
.travel-subtitle { font-size: 22px; font-weight: 800; color: var(--accent); margin-left: 12px; vertical-align: baseline; }
.page-motto { font-size: 22px; font-weight: 800; color: var(--accent-3); margin-left: 10px; vertical-align: baseline; cursor: help; }
.page-desc { font-size: 12.5px; color: var(--text-2); margin-top: 6px; line-height: 1.55; }
.page-actions { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }

/* ---------- buttons ---------- */
.btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 5px;
  padding: 8px 14px; border-radius: var(--r-s); font-size: 13px; font-weight: 600;
  background: var(--surface); color: var(--text); border: 1px solid var(--border-2);
  transition: background .12s, border-color .12s, transform .12s; white-space: nowrap;
}
.btn:hover { background: var(--surface-2); border-color: var(--border); }
.btn.primary { background: var(--accent); color: #fff; border-color: var(--accent); }
.btn.primary:hover { background: var(--accent-3); }
.btn.on { background: var(--accent-bg); border-color: var(--accent); color: var(--accent-3); }
.btn.sm { padding: 5px 11px; font-size: 12px; border-radius: 7px; }
.btn.ghost, .ghost-btn {
  background: transparent; border: 1px dashed var(--border-2); color: var(--text-2);
  padding: 7px 12px; border-radius: var(--r-s); font-size: 12.5px; cursor: pointer;
}
.ghost-btn { display: block; width: 100%; margin-bottom: 6px; }
.ghost-btn:hover { background: var(--surface-2); }
.icon-btn {
  width: 28px; height: 28px; border-radius: 6px; display: inline-flex; align-items: center; justify-content: center;
  color: var(--text-2); font-size: 14px; transition: background .12s;
}
.icon-btn:hover { background: var(--surface-2); color: var(--text); }
.icon-btn.del { color: var(--danger); }
.icon-btn.del:hover { background: var(--danger-bg); }
.icon-btn.xs { width: 22px; height: 22px; font-size: 11px; }
.link-btn { color: var(--accent); font-size: 12px; cursor: pointer; }
.link-btn:hover { text-decoration: underline; }

/* ---------- dropdown ---------- */
.dropdown { position: relative; display: inline-block; }
.dropdown-menu {
  position: absolute; top: calc(100% + 6px); right: 0;
  min-width: 220px; max-width: 90vw;
  background: var(--surface); border: 1px solid var(--border); border-radius: 10px;
  box-shadow: 0 8px 22px rgba(44,44,44,0.10);
  display: none; z-index: 100; overflow: hidden;
}
.dropdown-menu.show { display: block; }
.dropdown-item {
  padding: 8px 13px; font-size: 12.5px; color: var(--text);
  cursor: pointer; transition: background .10s; white-space: nowrap;
}
.dropdown-item:hover { background: var(--accent-bg); color: var(--accent-3); }
.dropdown-divider { border-top: 1px solid var(--border); margin: 4px 0; }

/* ---------- chips / tags ---------- */
.chip {
  display: inline-flex; align-items: center; gap: 4px; padding: 5px 10px; border-radius: 999px;
  background: var(--surface); border: 1px solid var(--border); font-size: 12px; color: var(--text-2);
  cursor: pointer; transition: background .12s, border-color .12s; white-space: nowrap;
}
.chip:hover { background: var(--surface-2); }
.chip.on { background: var(--accent-bg); border-color: var(--accent); color: var(--accent-3); font-weight: 600; }
.chip:disabled, .chip.disabled { opacity: .45; cursor: not-allowed; pointer-events: none; background: var(--surface); border-color: var(--border); color: var(--text-3); }
.tag {
  display: inline-flex; align-items: center; flex-wrap: wrap; padding: 2px 8px; border-radius: 999px;
  font-size: 11px; font-weight: 600; background: var(--surface-3); color: var(--text-2);
  white-space: normal;
}
.tag-soft { background: var(--surface-2); color: var(--text-3); border: 1px dashed var(--border-2); font-weight: 500; }
.tag.ok { background: var(--ok-bg); color: var(--ok); }
.tag.gold { background: var(--gold-bg); color: #8a6e1b; }
.tag.info { background: var(--info-bg); color: var(--info); }
.tag.danger { background: var(--danger-bg); color: var(--danger); }
.tag.accent { background: var(--accent-bg-2); color: var(--accent-3); }
.tag.warn { background: #fff4e0; color: #c78a2b; }
.tag.seed-gold { background: var(--gold-bg); color: #8a6e1b; }
.tag.seed-silver { background: #eef0f2; color: #5b6670; }
.tag.ent-other { background: var(--mint-bg); color: var(--accent-3); }
.tag.region { background: var(--surface-2); color: var(--text-2); }
.tag.muted { background: var(--surface-2); color: var(--text-3); }
.tag.link { background: var(--accent-bg); color: var(--accent-3); text-decoration: none; }

/* ---------- cards ---------- */
.card {
  background: var(--surface); border: 1px solid var(--border); border-radius: var(--r-m);
  box-shadow: var(--sh-1);
}
.card-pad { padding: 18px 20px; }
.section-title { font-size: 15px; font-weight: 700; color: var(--text); margin-bottom: 14px; padding-left: 10px; border-left: 3px solid var(--accent); }
.empty { text-align: center; padding: 32px 20px; color: var(--text-3); }
.empty-ico { font-size: 34px; margin-bottom: 8px; }

/* ---------- stat grid ---------- */
.stat-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 10px; margin-bottom: 16px; }
.stat {
  background: var(--surface); border: 1px solid var(--border); border-top: 3px solid var(--accent); border-radius: var(--r-m);
  padding: 11px 13px; box-shadow: var(--sh-1); cursor: pointer; transition: transform .12s, box-shadow .12s;
}
.stat:hover { transform: translateY(-2px); box-shadow: var(--sh-2); }
.stat-label { font-size: 11.5px; color: var(--text-3); margin-bottom: 4px; }
.stat-value { font-size: 22px; font-weight: 800; color: var(--accent); line-height: 1.1; }
.stat-value small { font-size: 11.5px; font-weight: 600; color: var(--accent-2); margin-left: 3px; }
.stat-sub { font-size: 11px; color: var(--text-2); margin-top: 5px; line-height: 1.4; }

/* ---------- filter bar ---------- */
.filter-bar {
  display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-bottom: 18px; line-height: 1.6;
}
.filter-bar .chip { font-size: 11px; padding: 4px 9px; }
.search-box {
  display: flex; align-items: center; gap: 6px; background: var(--surface); border: 1px solid var(--border);
  border-radius: 999px; padding: 5px 10px 5px 12px; min-width: 220px; flex: 1; max-width: 420px;
}
.search-box input { border: none; background: transparent; outline: none; flex: 1; font-size: 13px; min-width: 0; }
.spacer { flex: 1; }

/* ---------- forms ---------- */
.form-row { margin-bottom: 14px; }
.form-label { font-size: 12.5px; font-weight: 700; color: var(--text-2); margin-bottom: 6px; }
.req { color: var(--danger); }
.inp, .ta, select.inp {
  width: 100%; padding: 9px 12px; border: 1px solid var(--border-2); border-radius: 8px;
  background: var(--surface); outline: none; transition: border-color .12s, box-shadow .12s;
}
.inp:focus, .ta:focus, select.inp:focus { border-color: var(--accent); box-shadow: 0 0 0 3px var(--accent-bg); }
.ta { min-height: 90px; resize: vertical; line-height: 1.6; }
.inp.sm, .ta.sm { padding: 6px 9px; font-size: 12.5px; }
.form-2 { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }

/* ---------- tables ---------- */
.tbl-wrap { overflow: auto; border: 1px solid var(--border); border-radius: var(--r-m); background: var(--surface); box-shadow: var(--sh-1); resize: both; min-height: 120px; max-width: 100%; }
table { width: 100%; border-collapse: collapse; font-size: 13px; }
th, td { padding: 10px 12px; border-bottom: 1px solid var(--border); text-align: left; vertical-align: top; }
th { background: var(--surface-2); font-size: 12px; font-weight: 700; color: var(--text-2); position: relative; }
/* 表头把手可伸出表格外，避免窄列时拖不到；body 单元格仍截断文本 */
.resizable th { overflow: visible; position: relative; }
.resizable td { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; position: relative; }
/* 列宽拖拽把手：加宽并把命中区跨到两侧列边界，hover 时才显示竖线 */
.resize-handle { position: absolute; right: -5px; top: 0; bottom: 0; width: 12px; cursor: col-resize; z-index: 10; }
.resize-handle::after { display: none; }
.resize-handle:hover { background: rgba(95,141,78,.12); }
.resize-handle:active { background: rgba(95,141,78,.22); }
table.resizable.is-resizing { user-select: none; }
.ent-table th:nth-child(3),
.ent-table td:nth-child(3) { white-space: normal; overflow: visible; text-overflow: clip; }
.tbl-act { display: flex; gap: 4px; justify-content: center; }

/* ---------- modal / toast ---------- */
.modal-mask { position: fixed; inset: 0; background: rgba(46, 42, 38, .45); z-index: 900; display: none; align-items: center; justify-content: center; padding: 20px; }
.modal-mask.show { display: flex; }
.modal {
  background: var(--surface); border: 1px solid var(--border); border-radius: var(--r-l);
  box-shadow: var(--sh-3); width: 100%; max-width: 560px; max-height: 90vh; overflow: hidden;
  display: flex; flex-direction: column;
}
.modal.wide { max-width: 760px; }
.modal-head { display: flex; align-items: center; justify-content: space-between; padding: 16px 20px; border-bottom: 1px solid var(--border); }
.modal-title { font-size: 16px; font-weight: 700; color: var(--text); }
.modal-close { width: 28px; height: 28px; border-radius: 50%; font-size: 18px; color: var(--text-3); }
.modal-close:hover { background: var(--surface-2); color: var(--text); }
.modal-body { padding: 18px 20px; overflow-y: auto; flex: 1; }
.modal-foot { padding: 12px 20px 18px; border-top: 1px solid var(--border); display: flex; justify-content: center; flex-wrap: wrap; gap: 10px; }
.toast {
  position: fixed; bottom: 28px; left: 50%; transform: translateX(-50%) translateY(20px);
  background: rgba(46, 42, 38, .88); color: #fff; padding: 9px 18px; border-radius: 999px;
  font-size: 13px; opacity: 0; pointer-events: none; transition: opacity .2s, transform .2s; z-index: 950;
}
.toast.show { opacity: 1; transform: translateX(-50%) translateY(0); }

/* ---------- dashboard ---------- */
.dash-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
.focus-item {
  display: flex; align-items: flex-start; gap: 10px;
  background: var(--surface); border: 1px solid var(--border); border-radius: var(--r-m);
  padding: 12px 14px; box-shadow: var(--sh-1); margin-bottom: 10px;
}
.focus-body { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 5px; }
.focus-line { display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; }
.focus-dot { width: 8px; height: 8px; border-radius: 50%; background: var(--danger); flex-shrink: 0; margin-top: 5px; }
.focus-dot.gold { background: var(--gold); }
.focus-dot.accent { background: var(--accent); }
.focus-title { font-weight: 700; font-size: 13px; color: var(--text); line-height: 1.4; }
.focus-meta { font-size: 11.5px; color: var(--text-3); white-space: nowrap; }
.focus-deadline { align-self: flex-start; width: fit-content; margin-top: 2px; }
.focus-tag-row { display: flex; gap: 6px; flex-wrap: wrap; }
.todo-group-label { font-size: 12px; font-weight: 700; color: var(--text-2); margin: 10px 0 8px; padding-left: 8px; border-left: 2px solid var(--border-2); }
.todo-group-label:first-of-type { margin-top: 2px; }
.dash-todo-acts { display: flex; align-items: center; gap: 4px; margin-left: auto; opacity: 0; transition: opacity .15s; }
.focus-item:hover .dash-todo-acts { opacity: 1; }
@media (hover: none) { .dash-todo-acts { opacity: 1; } }
.week-bar { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; margin-bottom: 18px; }
.week-label { font-size: 15px; font-weight: 700; color: var(--text); }
.week-prog { flex: 1; min-width: 200px; }
.week-prog-label { display: flex; align-items: center; gap: 6px; font-size: 11px; color: var(--text-3); margin-bottom: 3px; }
.week-prog-label .mono { color: var(--accent); font-weight: 700; }
.week-prog .bar { height: 6px; background: var(--surface-3); border-radius: 999px; overflow: hidden; }
.week-prog .bar > i { display: block; height: 100%; border-radius: 999px; background: var(--accent); }

/* ---------- todo / week grid ---------- */
.week-grid { display: grid; grid-template-columns: repeat(7, minmax(130px, 1fr)); gap: 10px; overflow-x: auto; padding-bottom: 4px; }
.day-col { background: var(--surface); border: 1px solid var(--border); border-radius: var(--r-m); box-shadow: var(--sh-1); overflow: hidden; display: flex; flex-direction: column; min-height: 160px; }
.day-head { padding: 7px 9px; background: var(--surface-2); border-bottom: 1px solid var(--border); font-size: 11.5px; font-weight: 700; color: var(--text-2); display: flex; justify-content: space-between; align-items: center; flex-shrink: 0; }
.day-name { color: var(--text-3); font-weight: 500; }
.day-num { font-size: 12px; color: var(--text); }
.day-body { padding: 8px; flex: 1; display: flex; flex-direction: column; }
.day-add { font-size: 10.5px; color: var(--accent); cursor: pointer; margin-top: 4px; }
.day-add:hover { text-decoration: underline; }
.day-cnt { font-size: 10.5px; color: var(--text-3); }
.task {
  display: flex; align-items: center; gap: 6px; padding: 7px 6px; border-radius: 5px; background: var(--surface-2);
  margin-bottom: 5px; cursor: pointer; transition: background .12s; flex-shrink: 0;
}
.task:hover { background: var(--mint-bg); }
.task-ck {
  width: 13px; height: 13px; flex-shrink: 0; border: 1.5px solid var(--text-3); border-radius: 3px;
  background: var(--surface); display: flex; align-items: center; justify-content: center; cursor: pointer;
  transition: border-color .12s, background .12s;
}
.task-ck:hover { border-color: var(--accent); }
.task-ck.checked { border-color: transparent; background: transparent; }
.task-ck.checked::after {
  content: '✓'; font-size: 13px; font-weight: 800; color: var(--accent); line-height: 1;
}
.task-txt { flex: 1; font-size: 11px; line-height: 1.45; min-width: 0; }
.task.done .task-txt { text-decoration: line-through; color: var(--text-3); }
.task-time { font-size: 9.5px; font-weight: 700; color: var(--accent); background: var(--mint-bg); border-radius: 4px; padding: 1px 4px; margin-right: 5px; flex-shrink: 0; }
.task.done .task-time { color: var(--text-3); background: var(--surface-3); }
.task-repeat { font-size: 9px; color: var(--gold); background: var(--gold-bg); border-radius: 4px; padding: 1px 3px; }
.task-postpone {
  flex-shrink: 0; width: 18px; height: 18px; border: none; background: transparent;
  color: var(--text-3); font-size: 13px; line-height: 1; border-radius: 4px;
  cursor: pointer; padding: 0; opacity: 0; transition: opacity .12s, background .12s, color .12s;
}
.task:hover .task-postpone { opacity: 1; }
.task-postpone:hover { background: var(--accent); color: #fff; }
.task.overdue { border-left: 2px solid var(--danger); padding-left: 4px; }
.day-col.is-overdue .day-head { background: rgba(165,40,27,.06); }
.overdue-link { cursor: pointer; }
.overdue-link:hover { text-decoration: underline; }

/* 逾期视图 */
.overdue-list { display: flex; flex-direction: column; gap: 8px; padding: 4px 0; }
.overdue-row {
  display: flex; align-items: center; gap: 12px; padding: 12px 14px;
  background: var(--surface); border: 1px solid var(--border); border-radius: var(--r-m);
  box-shadow: var(--sh-1); transition: border-color .12s;
}
.overdue-row:hover { border-color: var(--danger); }
.overdue-row.p1 .overdue-bar { background: var(--danger); }
.overdue-row.p2 .overdue-bar { background: var(--gold); }
.overdue-bar { width: 3px; align-self: stretch; background: var(--accent); border-radius: 2px; flex-shrink: 0; }
.overdue-main { flex: 1; min-width: 0; }
.overdue-text { font-size: 14px; font-weight: 600; color: var(--text); cursor: pointer; }
.overdue-text:hover { color: var(--accent); }
.overdue-meta { font-size: 11.5px; color: var(--text-3); margin-top: 3px; }
.overdue-acts { display: flex; gap: 6px; flex-shrink: 0; }

/* ---------- report ---------- */
.rep-grid { display: grid; grid-template-columns: 280px minmax(0, 1fr) minmax(0, 1fr); gap: 16px; align-items: start; }
.rep-side { display: flex; flex-direction: column; gap: 14px; min-width: 0; }
.rep-mid { min-width: 0; }
.rep-mid .ta { font-size: 12px; line-height: 1.55; }
.rep-item { background: var(--surface); border: 1px solid var(--border); border-radius: var(--r-m); padding: 12px 14px; cursor: pointer; transition: background .12s, border-color .12s; }
.rep-item:hover { background: var(--surface-2); }
.rep-item.on { background: var(--accent-bg); border-left: 3px solid var(--accent); padding-left: 11px; }
.rep-list { display: flex; flex-direction: column; gap: 8px; }
.rep-d { display: flex; align-items: center; gap: 6px; font-size: 12px; color: var(--text-2); margin-bottom: 5px; }
.dot-ok { width: 7px; height: 7px; border-radius: 50%; background: var(--ok); flex-shrink: 0; }
.dot-no { width: 7px; height: 7px; border-radius: 50%; background: var(--surface-3); flex-shrink: 0; }
.rep-p { font-size: 12.5px; line-height: 1.5; color: var(--text); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.rep-preview-body { display: flex; flex-direction: column; gap: 16px; }
.rep-preview-col { display: flex; flex-direction: column; gap: 14px; }
.rep-preview-sec { display: flex; flex-direction: column; gap: 6px; }
.rep-preview-label { font-size: 13px; font-weight: 700; color: var(--accent); }
.rep-preview-text { font-size: 13px; line-height: 1.7; white-space: pre-wrap; color: var(--text); }

/* 日报月历 */
.rep-cal-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; }
.rep-cal-title { font-size: 15px; font-weight: 700; color: var(--text); }
.rep-cal-weekdays {
  display: grid; grid-template-columns: repeat(7, 1fr); gap: 6px;
  font-size: 11px; color: var(--text-3); text-align: center; font-weight: 600;
}
.rep-cal-weekdays .weekend { color: var(--text-3); opacity: .7; }
.rep-cal-grid {
  display: grid; grid-template-columns: repeat(7, 1fr); gap: 6px;
}
.rep-cal-cell {
  aspect-ratio: 1 / .95;
  border: 1px solid var(--border); border-radius: 8px;
  background: var(--surface);
  display: flex; align-items: center; justify-content: center;
  cursor: pointer; position: relative;
  transition: background .12s, border-color .12s, transform .12s;
}
.rep-cal-cell:hover { background: var(--surface-2); transform: translateY(-1px); }
.rep-cal-cell.weekend { background: var(--surface-2); cursor: pointer; opacity: .85; }
.rep-cal-cell.weekend:hover { background: var(--surface-2); }
.rep-cal-cell.weekend.filled { opacity: 1; }
.rep-cal-cell.weekend.filled:hover { background: var(--accent-bg); }
.rep-cal-cell.pad { border-color: transparent; background: transparent; cursor: default; pointer-events: none; }
.rep-cal-cell.filled { background: var(--accent-bg); border-color: var(--accent); }
.rep-cal-cell.filled .rep-cal-d { color: var(--accent); font-weight: 700; }
.rep-cal-cell.on { box-shadow: 0 0 0 2px var(--accent); }
.rep-cal-d { font-size: 15px; color: var(--text); line-height: 1; text-align: center; }
.rep-cal-dot {
  position: absolute;
  bottom: 5px;
  right: 5px;
  width: 5px;
  height: 5px;
  border-radius: 50%;
  background: var(--accent);
}

/* 日报/周报预览卡片等宽统一 */
.rep-preview-col { display: flex; flex-direction: column; gap: 14px; min-height: 100%; }
.rep-preview-col .section-title { margin-bottom: 0; }
.rep-preview-col .section-title.row { display: flex; align-items: center; gap: 8px; }
.rep-preview-col .empty { flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center; }
.rep-week-preview .rep-preview-body { flex: 1; }
.weekly-edit-area { width: 100%; min-height: 220px; font-size: 12.5px; line-height: 1.65; }
.md-out { white-space: pre-wrap; font-size: 13px; line-height: 1.7; color: var(--text); }

/* 月度绩效 · 三列卡片网格 */
.perf-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; }
.perf-card-sm {
  background: var(--surface); border: 1px solid var(--border); border-radius: var(--r-m); box-shadow: var(--sh-1);
  padding: 16px; cursor: pointer; transition: transform .08s, box-shadow .12s, border-color .12s;
  display: flex; flex-direction: column; min-height: 205px;
}
.perf-card-sm:hover { transform: translateY(-2px); box-shadow: var(--sh-2); border-color: var(--accent-2); }
.perf-card-sm-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-bottom: 10px; }
.perf-month-sm { font-size: 15px; font-weight: 700; color: var(--text); }
.perf-view-hint { font-size: 11px; color: var(--text-3); opacity: 0; transition: opacity .12s; }
.perf-card-sm:hover .perf-view-hint { opacity: 1; }
.perf-excerpt {
  flex: 1; font-size: 12.5px; line-height: 1.6; color: var(--text-2);
  display: -webkit-box; -webkit-line-clamp: 5; -webkit-box-orient: vertical; overflow: hidden;
  margin-bottom: 12px; white-space: pre-line;
}
.perf-scores-sm { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; border-top: 1px dashed var(--border); padding-top: 12px; }
.perf-score-sm { text-align: center; }
.perf-score-sm-label { font-size: 11px; color: var(--text-3); margin-bottom: 2px; }
.perf-score-sm-num { font-size: 22px; font-weight: 800; line-height: 1.1; }
.perf-score-sm.self .perf-score-sm-num { color: var(--accent); }
.perf-score-sm.lead .perf-score-sm-num { color: var(--gold); }

/* 月度绩效 · 详情弹窗 */
.perf-view-head { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin-bottom: 14px; }
.perf-view-title { font-size: 17px; font-weight: 700; color: var(--text); }
.perf-view-scores { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; margin-bottom: 16px; }
.perf-view-score { background: var(--surface-2); border-radius: 8px; padding: 10px 12px; text-align: center; }
.perf-view-score-label { font-size: 12px; color: var(--text-3); }
.perf-view-score-num { font-size: 28px; font-weight: 800; line-height: 1.1; }
.perf-view-score.self .perf-view-score-num { color: var(--accent); }
.perf-view-score.lead .perf-view-score-num { color: var(--gold); }
.perf-view-body { background: var(--surface-2); border-radius: var(--r-m); padding: 14px 16px; font-size: 13px; line-height: 1.75; white-space: pre-wrap; color: var(--text); max-height: 320px; overflow-y: auto; }
.perf-view-review { margin-top: 12px; font-size: 12.5px; line-height: 1.65; color: var(--text-2); }

/* ---------- schedule ---------- */
.sched-grid { display: grid; grid-template-columns: repeat(5, 1fr); gap: 12px; }
.sched-day { background: var(--surface); border: 1px solid var(--border); border-radius: var(--r-m); box-shadow: var(--sh-1); min-height: 180px; }
.sched-day-head { padding: 8px 10px; background: var(--surface-2); border-bottom: 1px solid var(--border); font-size: 12px; font-weight: 700; display: flex; justify-content: space-between; }
.sched-wd { margin-right: 5px; }
.sched-today { color: var(--danger); margin-left: 5px; }
.sched-items { padding: 8px; }
.sched-empty { font-size: 12px; color: var(--text-3); padding: 16px; text-align: center; }
.sched-item { background: var(--surface-2); border: 1px solid var(--border); border-radius: 8px; padding: 8px 9px; margin-bottom: 7px; transition: border-color .12s, background .12s; }
.sched-item:hover { border-color: var(--accent); background: var(--surface); }
.sched-item-top { display: flex; gap: 7px; align-items: baseline; }
.sched-time { font-size: 11.5px; font-weight: 700; color: var(--gold); white-space: nowrap; }
.sched-title { font-size: 13px; font-weight: 600; color: var(--text); line-height: 1.45; flex: 1; min-width: 0; }
.sched-title-link { cursor: pointer; transition: color .12s; }
.sched-title-link:hover { color: var(--accent-3); text-decoration: underline; text-underline-offset: 2px; }
.sched-item-foot { display: flex; align-items: center; gap: 10px; margin-top: 6px; }
.sched-edit-link { color: var(--text-3); font-size: 11.5px; cursor: pointer; background: transparent; border: none; padding: 0; }
.sched-edit-link:hover { color: var(--text-2); text-decoration: underline; text-underline-offset: 2px; }
.sched-attendees { font-size: 11px; color: var(--accent); line-height: 1.35; margin-top: 3px; }
.sched-weekbar { display: flex; align-items: center; gap: 10px; margin-bottom: 14px; }
.sched-range { font-size: 13px; font-weight: 700; color: var(--text); }
.sched-nav { display: flex; gap: 6px; }
.sched-rep { margin-top: 22px; }
.sched-rep-bar { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; margin: 4px 0 10px; }
.sched-rep-body { background: var(--surface); border: 1px solid var(--border); border-radius: var(--r-m); padding: 16px 20px; font-size: 13px; line-height: 1.85; white-space: pre-wrap; margin: 0; max-height: 460px; overflow: auto; }
.sched-edit-box { background: var(--surface); border: 1px solid var(--border); border-radius: var(--r-m); padding: 14px; box-shadow: var(--sh-1); }
.sched-rep-edit { width: 100%; min-height: 280px; font-family: inherit; line-height: 1.8; }
.sched-edit-foot { display: flex; gap: 8px; margin-top: 10px; }
.sched-view-meta { display: flex; gap: 14px; align-items: baseline; margin-bottom: 12px; color: var(--text-2); font-size: 12.5px; flex-wrap: wrap; }
.sched-view-date { color: var(--gold); font-weight: 700; }
.sched-view-title { font-size: 16px; font-weight: 600; color: var(--text); line-height: 1.4; margin-bottom: 8px; }
.sched-view-note { background: var(--surface-2); border: 1px solid var(--border); border-radius: 8px; padding: 12px 14px; font-size: 13.5px; line-height: 1.7; white-space: pre-wrap; word-break: break-word; min-height: 56px; }
.sched-view-note.is-empty { color: var(--text-3); font-style: italic; }
.plan-box { background: var(--surface); border: 1px solid var(--border); border-radius: var(--r-m); padding: 12px 14px; }
.plan-list { display: flex; flex-direction: column; gap: 8px; }
.plan-row { display: flex; align-items: center; gap: 8px; background: var(--surface-2); border: 1px solid var(--border); border-radius: 7px; padding: 8px 11px; }
.plan-dot { color: var(--accent); font-size: 9px; }
.plan-text { font-size: 13px; color: var(--text); flex: 1; min-width: 0; }
.plan-day { font-size: 11.5px; color: var(--gold); background: var(--gold-bg); border-radius: 10px; padding: 1px 8px; }

/* ---------- assets ---------- */
.asset-card { background: var(--surface); border: 1px solid var(--border); border-radius: var(--r-m); padding: 14px 16px; box-shadow: var(--sh-1); display: flex; flex-direction: column; position: relative; }
.asset-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; }
.asset-quick-del { position: absolute; top: 8px; right: 8px; width: 26px; height: 26px; opacity: 0; transition: opacity .15s; padding: 0; font-size: 13px; background: var(--surface); border: 1px solid var(--border); border-radius: 999px; }
.asset-card:hover .asset-quick-del { opacity: 1; }
.asset-card:hover .asset-quick-del:hover { background: var(--danger-bg); color: var(--danger); }
@media (hover: none) { .asset-quick-del { opacity: .85; } }
.asset-title { font-size: 14.5px; font-weight: 800; color: #000; cursor: pointer; padding-right: 32px; }
.asset-title a { color: #000; }
.asset-title-link:hover { color: #000; text-decoration: underline; }
.asset-date { font-size: 11px; color: var(--text-3); margin-top: 3px; }
.asset-body { font-size: 13px; line-height: 1.65; color: var(--text-2); margin-top: 8px; display: -webkit-box; -webkit-line-clamp: 5; -webkit-box-orient: vertical; overflow: hidden; }
.asset-note { font-size: 12px; color: var(--gold); margin-top: 6px; }
.asset-foot { display: flex; gap: 8px; margin-top: 10px; flex-wrap: wrap; }
.asset-links a { font-size: 12px; }

/* ---------- KPI ---------- */
.kpi-progress-wrap { max-width: 100%; }
.kpi-table { font-size: 12.5px; width: 100%; table-layout: fixed; }
.kpi-table td { padding: 12px 10px; vertical-align: middle; line-height: 1.55; }
.kpi-table th { padding: 10px; text-align: center; font-weight: 700; color: var(--text-2); background: var(--surface-2); }
.kpi-table.resizable td { white-space: normal; overflow: visible; text-overflow: clip; }
.kpi-grp-td { vertical-align: middle; text-align: center; }
.kpi-grp-cell { font-size: 12.5px; color: var(--text-2); line-height: 1.55; word-break: break-word; white-space: normal; }
.kpi-grp-name { font-weight: 600; color: var(--text); line-height: 1.55; word-break: break-word; white-space: normal; }
.kpi-grp-no { color: var(--text-3); }
.kpi-grp-score { font-weight: 700; color: var(--accent); }
.kpi-name-cell { line-height: 1.55; word-break: break-word; white-space: normal; }
.kpi-note-cell {
  line-height: 1.6;
  word-break: break-word;
  white-space: pre-line;
}
.kpi-progress-cell { text-align: center; }
.kpi-progress-stack {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 5px;
}
.kpi-progress-top {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
}
.kpi-bar {
  width: 90px;
  height: 10px;
  cursor: default;
  position: relative;
  flex-shrink: 0;
}
.kpi-pct {
  font-size: 12px;
  font-weight: 700;
  color: var(--text);
  width: 36px;
  text-align: right;
  flex-shrink: 0;
}
.kpi-step-btns { display: flex; flex-shrink: 0; justify-content: center; }
.owner-cell { word-break: break-word; white-space: normal; line-height: 1.5; }
.kpi-add5 {
  border: 1px solid var(--border-2); background: var(--surface-2); color: var(--text-2);
  border-radius: 0; padding: 1px 5px; font-size: 11px; cursor: pointer; line-height: 1;
}
.kpi-add5:first-child { border-radius: 5px 0 0 5px; border-right: none; }
.kpi-add5:last-child { border-radius: 0 5px 5px 0; }
.kpi-add5:hover { background: var(--accent-bg); color: var(--accent-3); border-color: var(--accent); }
.kpi-add5:active { background: var(--accent); color: #fff; }
.kpi-act-cell { text-align: center; }
.bar { height: 8px; background: var(--surface-3); border-radius: 999px; overflow: hidden; }
.row { display: flex; align-items: center; gap: 8px; }
.bar > div { height: 100%; border-radius: 999px; background: var(--accent); }
.bar.danger > div { background: var(--danger); }
.bar.warn > div { background: var(--gold); }
.bar.ok > div { background: var(--ok); }

/* ---------- project ---------- */
.proj-list { display: flex; flex-direction: column; gap: 12px; }
.proj-card { background: var(--surface); border: 1px solid var(--border); border-radius: var(--r-m); padding: 14px 16px; box-shadow: var(--sh-1); }
.proj-top { display: flex; justify-content: space-between; align-items: flex-start; gap: 10px; }
.proj-name { font-size: 15px; font-weight: 700; color: var(--text); }
.proj-party { font-size: 12px; color: var(--text-2); margin-top: 4px; }
.proj-meta { display: flex; gap: 8px; margin-top: 8px; flex-wrap: wrap; }
.progress-box { background: var(--surface-2); border: 1px solid var(--border); border-radius: 8px; padding: 10px 12px; margin-top: 10px; font-size: 12.5px; color: var(--text); }
.block-box { background: var(--danger-bg); border: 1px solid #f0d4d1; border-radius: 8px; padding: 10px 12px; margin-top: 8px; font-size: 12.5px; color: var(--danger); }
.next-box { background: var(--accent-bg); border: 1px solid #c8e0d1; border-radius: 8px; padding: 10px 12px; margin-top: 8px; font-size: 12.5px; color: var(--accent-3); }
.progress-box b, .block-box b, .next-box b { display: block; margin-bottom: 4px; font-size: 12px; }
.timeline { margin-top: 10px; border-left: 2px solid var(--border); padding-left: 12px; }
.tl-item { position: relative; padding-bottom: 10px; }
.tl-item::before { content: ""; position: absolute; left: -17px; top: 5px; width: 8px; height: 8px; border-radius: 50%; background: var(--border-2); }
.tl-date { font-size: 11px; color: var(--text-3); margin-bottom: 2px; }
.tl-txt { font-size: 12.5px; color: var(--text-2); }
.tl-toggle { font-size: 12px; color: var(--accent); cursor: pointer; margin-top: 4px; }

/* ---------- bids ---------- */
.bid-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 14px; }
.bid-card { background: var(--surface); border: 1px solid var(--border); border-radius: var(--r-m); padding: 14px 16px; box-shadow: var(--sh-1); cursor: pointer; transition: border-color .12s, box-shadow .12s; }
.bid-card:hover { border-color: var(--accent); box-shadow: var(--sh-2); }
.bid-card.near { border-left: 3px solid var(--gold); }
.bid-card.over { opacity: .65; border-left: 3px solid var(--danger); }
.bid-top { display: flex; flex-direction: column; gap: 8px; margin-bottom: 8px; }
.bid-title { font-size: 14.5px; font-weight: 700; color: var(--text); }
.bid-dept { display: flex; gap: 5px; flex-wrap: wrap; justify-content: flex-start; }
.bid-req { font-size: 12.5px; color: var(--text-2); line-height: 1.6; margin-bottom: 10px; }
.bid-req b { color: var(--text); font-weight: 600; display: block; margin-bottom: 2px; }
.bid-meta { display: grid; grid-template-columns: repeat(2, 1fr); gap: 6px 12px; font-size: 12px; color: var(--text-2); margin-bottom: 10px; }
.bid-meta b { color: var(--text-3); font-weight: 500; margin-right: 4px; }
.bid-links { margin-bottom: 8px; }
.bid-note { font-size: 12px; color: var(--text-2); background: var(--surface-2); border-radius: var(--r-s); padding: 8px 10px; line-height: 1.5; }
/* 投标匹配度按钮组 */
.bid-match-row { display: flex; gap: 8px; margin-top: 10px; padding-top: 10px; border-top: 1px dashed var(--border); }
.bid-match-row .btn-match,
.bid-match-row .btn-dismiss { flex: 1; font-size: 12.5px; padding: 6px 10px; border-radius: var(--r-s); border: 1px solid var(--border); background: var(--surface-2); color: var(--text-2); cursor: pointer; transition: all .12s; }
.bid-match-row .btn-match:hover { background: var(--ok-bg); color: var(--ok); border-color: var(--ok); }
.bid-match-row .btn-match.on { background: var(--ok-bg); color: var(--ok); border-color: var(--ok); font-weight: 600; }
.bid-match-row .btn-dismiss:hover { background: var(--surface); color: var(--text-3); border-color: var(--text-3); }
/* 已匹配卡片：左侧浅绿边 + 微淡绿底 */
.bid-card.matched { border-color: var(--ok); border-left: 3px solid var(--ok); background: linear-gradient(0deg, var(--ok-bg) 0%, var(--surface) 60%); }
.bid-card.matched:hover { border-color: var(--ok); }

/* ---------- invest ---------- */
.kanban { display: grid; grid-template-columns: repeat(var(--kanban-cols, 6), 1fr); gap: 10px; }
.kb-col { background: var(--surface-2); border: 1px solid var(--border); border-radius: var(--r-m); padding: 10px; min-height: 160px; }
.kb-head { font-size: 12px; font-weight: 700; color: var(--text-2); margin-bottom: 8px; }
.kb-card { background: var(--surface); border: 1px solid var(--border); border-radius: 8px; padding: 9px; margin-bottom: 8px; cursor: pointer; }
.kb-name { font-size: 12.5px; font-weight: 700; color: var(--text); }
.kb-info { font-size: 11px; color: var(--text-3); margin-top: 3px; }
.kb-amt { font-size: 11px; color: var(--gold); font-weight: 700; margin-top: 4px; }
.invest-table { font-size: 12.5px; }
.invest-table th { text-align: center !important; }
/* 商机项目页不显示列宽拖拽竖线，保持界面干净；把手仍可拖动 */
.invest-table .resize-handle::after { display: none; }
/* 「下一步」列：左文字 + 右编辑按钮，撑满单元格 */
.next-cell { display: flex; align-items: flex-start; justify-content: space-between; gap: 10px; width: 100%; }
.next-cell .next-text { flex: 1; min-width: 0; word-break: break-word; line-height: 1.5; }
.next-cell .icon-btn { flex-shrink: 0; }
.invest-table td.next-cell-wrap { cursor: pointer; transition: background .15s; border-radius: 4px; }
.invest-table td.next-cell-wrap:hover { background: var(--accent-bg); }
.invest-table td.next-cell-wrap .next-text:empty::before,
.invest-table td.next-cell-wrap .next-text { white-space: pre-wrap; }

/* ---------- info ---------- */
.info-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 12px; }
.info-card {
  background: var(--surface); border: 1px solid var(--border); border-radius: var(--r-m); padding: 14px;
  box-shadow: var(--sh-1); height: 180px; display: flex; flex-direction: column; cursor: pointer;
  transition: box-shadow .12s, border-color .12s;
}
.info-card:hover { box-shadow: var(--sh-2); border-color: var(--border-2); }
.info-top { display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 8px; flex-shrink: 0; }
.info-name { font-size: 14px; font-weight: 700; color: var(--text); flex-shrink: 0; }
.info-body { flex: 1; overflow: hidden; position: relative; font-size: 12px; color: var(--text-2); margin-top: 8px; line-height: 1.55; }
.info-body::after {
  content: ''; position: absolute; bottom: 0; left: 0; right: 0; height: 28px;
  background: linear-gradient(to bottom, transparent, var(--surface)); pointer-events: none;
}
.info-row { display: flex; gap: 6px; margin-top: 4px; font-size: 12.5px; }
.info-k { color: var(--text-3); flex-shrink: 0; }
.info-v { color: var(--text); word-break: break-all; }
.info-note { font-size: 12px; color: var(--text-2); margin-top: 8px; line-height: 1.5; }

/* ---------- enterprise ---------- */
.ent-table { font-size: 12.5px; }
.ent-center { text-align: center; }
.ent-left { text-align: left; }
.ent-name-cell { text-align: left; }
.ent-name { font-weight: 700; color: var(--text); cursor: pointer; }
.ent-name:hover { color: var(--accent-3); text-decoration: underline; }
.ent-important { color: #8B5A2B; }
.ent-important:hover { color: #A06A35; }
.ent-service-cell { cursor: pointer; line-height: 1.5; }
.ent-service-cell:hover { background: var(--surface-2); border-radius: 6px; }
.ent-service-preview { font-size: 12px; color: var(--text-2); white-space: pre-wrap; }
.ent-service-placeholder { font-size: 12px; color: var(--text-3); }
.ent-honor { font-size: 10.5px; padding: 1px 5px; }
.ent-honors-cell { display: flex; flex-wrap: wrap; align-items: center; gap: 4px; justify-content: flex-start; text-align: left; }
.ent-table th,
.ent-table td { border: none; padding: 6px 8px; }
.ent-table thead th { border: none; }
.invest-table th,
.invest-table td { border-bottom: none; }
.invest-table thead th { border-bottom: 1px solid var(--border-2); }
.seq-cell { position: relative; }
.seq-num { font-weight: 700; }
.seq-mv { display: flex; justify-content: center; gap: 2px; opacity: 0; }
.ent-row:hover .seq-mv { opacity: 1; }

/* ---------- mentors（V53 专家导师）---------- */
.mentor-table { font-size: 12.5px; }
.mentor-table th,
.mentor-table td { border: none; padding: 7px 8px; vertical-align: middle; }
.mentor-table thead th { color: var(--text-3); font-weight: 600; border-bottom: 1px solid var(--border-2); }
.mentor-center { text-align: center; }
.mentor-name { font-weight: 700; color: var(--text); cursor: pointer; }
.mentor-name:hover { color: var(--accent-3); text-decoration: underline; }
.mentor-important { color: #8B5A2B; }
.mentor-important:hover { color: #A06A35; }
.mentor-row { border-bottom: 1px solid var(--border-2); }
.mentor-row:hover { background: var(--surface-2); }
.mentor-intro-preview { font-size: 11.5px; color: var(--text-3); margin-top: 3px; line-height: 1.4; max-width: 220px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.tag.info { background: #E8F0F4; color: #2D5871; padding: 2px 7px; border-radius: 4px; font-size: 11.5px; display: inline-block; }

/* ---------- photos ---------- */
.photo-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(170px, 1fr)); gap: 10px; }
.photo-card { background: var(--surface); border: 1px solid var(--border); border-radius: var(--r-m); overflow: hidden; box-shadow: var(--sh-1); padding: 10px 10px 34px; position: relative; }
.photo-card .card-del { position: absolute; bottom: 8px; right: 8px; width: 22px; height: 22px; font-size: 12px; }
.photo-link-icon { font-size: 11px; margin-left: 6px; text-decoration: none; }
.photo-link-icon:hover { opacity: .7; }
.photo-name { font-size: 13px; font-weight: 700; line-height: 1.45; }
.photo-meta { display: flex; align-items: center; margin-top: 5px; }
.photo-date { font-size: 11px; color: var(--text-3); }
.photo-note { font-size: 11.5px; color: var(--text-2); margin-top: 6px; line-height: 1.5; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.empty-preview { background: var(--surface-2); display: flex; align-items: center; justify-content: center; color: var(--text-3); font-size: 12px; }

/* ---------- news ---------- */
.news-bar { display: flex; flex-direction: column; gap: 10px; margin-bottom: 18px; line-height: 1.6; }
.news-stat { font-size: 12.5px; color: var(--text-2); }
.news-chips { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.news-list { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; }
.news-card { background: var(--surface); border: 1px solid var(--border); border-radius: var(--r-m); padding: 12px; box-shadow: var(--sh-1); display: flex; flex-direction: column; gap: 6px; }
.news-card.is-read { opacity: .82; background: var(--surface-2); border-left: 3px solid var(--border); }
.news-top { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.news-title { font-size: 13.5px; font-weight: 700; color: var(--text); line-height: 1.45; }
.news-title a { color: var(--text); text-decoration: none; }
.news-title a:hover { color: var(--text); text-decoration: underline; text-underline-offset: 2px; }
.news-card.is-read .news-title,
.news-card.is-read .news-title a { color: var(--text-3); }
.news-summary { font-size: 12px; color: var(--text-2); line-height: 1.55; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; }
.news-date { font-size: 11px; color: var(--text-3); }
.news-acts { display: flex; gap: 6px; margin-top: auto; padding-top: 4px; }
.unread-dot { width: 7px; height: 7px; border-radius: 50%; background: var(--accent); }
.read-flag { font-size: 11px; color: var(--text-3); }

/* ---------- life · books ---------- */
.book-list { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 16px; }
.book-card {
  background: var(--surface); border: 1px solid var(--border); border-radius: var(--r-m);
  padding: 14px 12px 16px; box-shadow: var(--sh-1); display: flex; flex-direction: column;
  align-items: center; text-align: center; position: relative;
}
.book-cover {
  width: 90px; height: 128px; border-radius: 6px; flex-shrink: 0;
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  text-align: center; padding: 8px; box-shadow: inset 0 0 0 999px rgba(0,0,0,.04);
  position: relative; overflow: hidden;
}
.book-cover.has-cover { padding: 0; }
.book-cover-img {
  position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover;
  display: block; border-radius: inherit; z-index: 0;
}
.book-spine { position: absolute; left: 0; top: 0; bottom: 0; width: 3px; background: rgba(0,0,0,.08); z-index: 1; }
.book-cover-title { position: relative; z-index: 1; font-size: 11px; font-weight: 700; line-height: 1.35; color: #fff; text-shadow: 0 1px 2px rgba(0,0,0,.2); }
.book-cover-author { position: relative; z-index: 1; font-size: 9px; color: rgba(255,255,255,.9); margin-top: 4px; }
.book-info { width: 100%; margin-top: 12px; }
.book-title { font-size: 13.5px; font-weight: 700; color: var(--text); line-height: 1.35; }
.book-author { font-size: 11.5px; color: var(--text-2); margin-top: 4px; }
.book-progress-bar { height: 5px; background: var(--surface-3); border-radius: 999px; margin-top: 10px; overflow: hidden; }
.book-progress-bar > i { display: block; height: 100%; background: var(--accent); border-radius: 999px; }
.book-progress-text { font-size: 11px; color: var(--text-3); margin-top: 5px; }
.book-actions { position: absolute; top: 8px; right: 8px; display: flex; gap: 2px; opacity: 0; transition: opacity .14s; }
.book-card:hover .book-actions { opacity: 1; }
.book-wx-badge { display: none; }

/* ---------- life · podcasts ---------- */
.podcast-list { display: flex; flex-direction: column; gap: 10px; }
.podcast-card { background: var(--surface); border: 1px solid var(--border); border-radius: var(--r-m); padding: 12px 14px; box-shadow: var(--sh-1); }
.podcast-main { display: flex; gap: 10px; }
.podcast-title { font-size: 14px; font-weight: 700; }
.podcast-show { font-size: 12px; color: var(--text-2); }
.podcast-foot { font-size: 11px; color: var(--text-3); margin-top: 6px; }
.podcast-note { font-size: 12.5px; color: var(--text-2); margin-top: 8px; line-height: 1.5; }

/* ---------- life · anniversaries ---------- */
.anni-list { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; }
.anni-card { background: var(--surface); border: 1px solid var(--border); border-radius: var(--r-m); padding: 14px 14px 12px; box-shadow: var(--sh-1); display: flex; flex-direction: column; gap: 10px; }
.anni-left { flex: 1; min-width: 0; }
.anni-title { font-size: 14px; font-weight: 700; color: var(--text); }
.anni-title.birthday { color: var(--accent); font-weight: 800; font-size: 15px; line-height: 1.35; }
.anni-meta { font-size: 11.5px; color: var(--text-2); margin-top: 6px; line-height: 22px; display: flex; flex-wrap: nowrap; align-items: center; gap: 4px 6px; min-height: 22px; }
.anni-meta .tag { font-size: 11px; padding: 1px 6px; flex: 0 0 auto; }
.anni-age { font-weight: 600; color: var(--accent); }
.anni-date { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; min-height: 22px; line-height: 22px; margin-top: 4px; font-size: 11.5px; color: var(--text-2); }
.anni-right { display: flex; align-items: flex-end; justify-content: space-between; gap: 8px; margin-top: auto; padding-top: 8px; border-top: 1px solid var(--border); }
.anni-days { display: inline-flex; align-items: baseline; gap: 3px; }
.anni-days-num { font-size: 22px; font-weight: 800; color: var(--accent); }
.anni-days-word { font-size: 22px; font-weight: 800; color: var(--accent); line-height: 1; }
.anni-days-prefix,
.anni-days-suffix { font-size: 12px; color: var(--gold); }
.anni-edit-link { color: var(--text-3); font-size: 11px; cursor: pointer; background: transparent; border: none; padding: 0; }
.anni-edit-link:hover { color: var(--text-2); text-decoration: underline; text-underline-offset: 2px; }
.anni-move { display: inline-flex; gap: 2px; }
.anni-move .icon-btn { width: 20px; height: 20px; font-size: 9px; }
.anni-note { font-size: 11.5px; color: var(--text-2); margin-top: 6px; line-height: 1.5; }
.anni-sort-sel { width: auto; min-width: 112px; cursor: pointer; }
.anni-manual-tip { font-size: 12px; color: var(--gold); background: var(--gold-bg); border-radius: var(--r-s); padding: 6px 12px; margin-bottom: 12px; }

/* ---------- import panel ---------- */
.imp-panel { display: flex; flex-direction: column; gap: 10px; }
.import-tabs { display: flex; gap: 6px; }
.imp-tab { padding: 6px 10px; border-radius: 6px; font-size: 12px; border: 1px solid var(--border); cursor: pointer; }
.imp-tab.on { background: var(--accent-bg); border-color: var(--accent); color: var(--accent-3); }

/* ---------- misc helpers ---------- */
.danger { color: var(--danger); }
.warn { color: var(--gold); }
.ok { color: var(--ok); }
.info { color: var(--info); }
.gold { color: var(--gold); }
.btn.danger { color: var(--danger); border-color: var(--danger); background: transparent; }
.btn.danger:hover { background: var(--danger); color: #fff; }

/* ---------- 企业库 · 培育梯度资质卡片 ---------- */
.qual-grid { display: grid; grid-template-columns: repeat(5, 1fr); gap: 12px; }
.qual-card {
  border: 1px solid var(--border); border-radius: var(--r-m); background: var(--surface);
  padding: 14px; cursor: pointer; transition: transform .12s, box-shadow .12s, border-color .12s;
  display: flex; flex-direction: column; gap: 8px; min-height: 154px;
}
.qual-card:hover { transform: translateY(-2px); border-color: var(--accent); box-shadow: var(--sh-1); }
.qual-level {
  align-self: flex-start; font-size: 11px; font-weight: 700; color: var(--accent);
  background: var(--accent-bg); border-radius: 999px; padding: 2px 10px;
}
.qual-title { font-size: 15px; font-weight: 700; color: var(--text); }
.qual-summary { font-size: 12.5px; line-height: 1.6; color: var(--text-2); display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; min-height: calc(12.5px * 1.6 * 3); }
.qual-detail { min-width: 0; }
.qual-detail-head { display: flex; justify-content: space-between; align-items: flex-start; gap: 12px; margin-bottom: 10px; }
.qual-detail-title { font-size: 17px; font-weight: 700; color: var(--text); }
.qual-detail-level { font-size: 12px; color: var(--accent); margin-top: 4px; }
.qual-detail-summary { font-size: 13.5px; line-height: 1.7; color: var(--text-2); background: var(--surface-2); border-radius: var(--r-m); padding: 12px 14px; margin-bottom: 16px; }
.qual-detail-section { font-size: 13px; font-weight: 700; color: var(--text); margin: 12px 0 8px; }
.qual-detail-list { margin: 0; padding-left: 18px; color: var(--text-2); font-size: 13px; line-height: 1.8; }
.qual-detail-list li { margin-bottom: 6px; }
.qual-detail-platform { font-size: 12.5px; color: var(--text-3); word-break: break-all; }
.qual-detail-platform a { color: var(--accent); text-decoration: underline; }

/* ---------- 企业库 · 6 大板块翻面卡片墙 v16.38（v16.37 新增瞪羚卡 → v16.38 撤销，改回 6 板块） ---------- */
/* 桌面 7 列 1 行（瞪羚企业加入后），中等 3 列、手机 2 列 */
/* 江夏资源板块（一排，简洁平铺，点击交给 entResourcesOpen 弹大窗展示全名单） */
.ehd-wall { display: grid; grid-template-columns: repeat(6, 1fr); gap: 10px; margin-top: 6px; }
.ehd-cell {
  position: relative;
  border: 1px solid var(--line, #e5e0d3);
  border-radius: 12px;
  background: #fff;
  padding: 18px 12px 14px;
  text-align: center;
  cursor: pointer;
  display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 5px;
  min-width: 0;
  box-shadow: 0 1px 0 rgba(0,0,0,.02);
  transition: border-color .18s, box-shadow .18s, transform .18s;
}
.ehd-cell:hover { border-color: var(--accent, #5F8D4E); box-shadow: var(--sh-1); transform: translateY(-1px); }
.ehd-cell:hover .ehd-tip { color: var(--text-2); }
.ehd-cell .ehd-icon { font-size: 28px; line-height: 1; opacity: .9; margin-bottom: 2px; }
.ehd-cell .ehd-name { font-size: 14.5px; font-weight: 700; color: var(--text); letter-spacing: .02em; line-height: 1.3; }
.ehd-cell .ehd-count { font-size: 28px; font-weight: 700; color: var(--accent, #5F8D4E); margin-top: 2px; line-height: 1; }
.ehd-cell .ehd-count small { font-size: 12px; color: var(--text-3); margin-left: 3px; font-weight: 500; }
.ehd-cell .ehd-tip { font-size: 11.5px; color: var(--text-3); margin-top: 6px; line-height: 1.45; max-height: 32px; overflow: hidden; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; transition: color .18s; }

/* 大窗内部的名单样式 */
.ent-rs-body { max-height: 64vh; overflow-y: auto; padding-right: 6px; }
.ent-rs-body::-webkit-scrollbar { width: 6px; }
.ent-rs-body::-webkit-scrollbar-thumb { background: var(--line, #d9d2c2); border-radius: 3px; }
.ent-rs-body::-webkit-scrollbar-track { background: transparent; }

@media (max-width: 1180px) { .ehd-wall { grid-template-columns: repeat(3, 1fr); } }
@media (max-width: 640px)  { .ehd-wall { grid-template-columns: repeat(2, 1fr); gap: 10px; } .ehd-cell { padding: 14px 8px 12px; } .ehd-cell .ehd-icon { font-size: 22px; } .ehd-cell .ehd-count { font-size: 22px; } .ehd-cell .ehd-name { font-size: 13px; } }

/* ---------- 企业培育梯度 · 一排 5 个，上下对齐 ---------- */
.qual-grid { display: grid; grid-template-columns: repeat(5, 1fr); gap: 12px; }
.qual-card { padding: 10px 10px; min-height: 96px; gap: 5px; }
.qual-level { font-size: 10px; padding: 2px 7px; }
.qual-title { font-size: 13px; line-height: 1.3; }
.qual-summary { font-size: 11px; line-height: 1.55; -webkit-line-clamp: 4; min-height: calc(11px * 1.55 * 4); }
@media (max-width: 1100px) { .qual-grid { grid-template-columns: repeat(4, 1fr); } }

/* ---------- 生活 · 旅行 · SVG 地图 ---------- */
.travel-map-container { position: relative; width: 100%; max-width: 900px; margin: 0 auto; }
.travel-map-svg { width: 100%; height: auto; display: block; border-radius: var(--r-m); box-shadow: var(--sh-1); background: #E8E3DA; }
.prov-map-path {
  fill: var(--surface-2); stroke: #BFC8C6; stroke-width: 1; cursor: default;
  transition: fill .15s, stroke .15s, filter .15s;
}
.prov-map-path:hover { filter: brightness(0.97); }
.prov-map-path.visited { fill: var(--accent-bg); stroke: var(--accent); cursor: pointer; }
.prov-map-path.visited:hover { fill: var(--accent-bg-2); }
.prov-map-path.sel { fill: #C5D8D0; stroke: var(--accent-3); stroke-width: 2; }
.prov-map-path.jd { fill: none; stroke: #9CACA4; stroke-width: 1.5; stroke-dasharray: 4 4; cursor: default; }
.city-dot { fill: var(--accent); stroke: #fff; stroke-width: 1.5; cursor: pointer; transition: r .15s, fill .15s; }
.city-dot:hover { fill: var(--accent-3); }
.city-dot.sel { fill: var(--accent-3); r: 6; }
.nanhai-inset { overflow: visible; }
.nanhai-inset .prov-map-path { stroke: var(--border-2); stroke-width: 1; }
.nanhai-label { font-size: 12px; fill: var(--text-2); font-family: var(--sans); }
.travel-map-legend {
  display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
  font-size: 12px; color: var(--text-2); margin-top: 10px; padding-left: 6px;
}
.legend-dot { display: inline-block; width: 14px; height: 14px; border-radius: 3px; border: 1px solid; margin-right: 2px; }
.legend-count { margin-left: auto; font-weight: 600; color: var(--accent); }
.travel-cities { display: flex; flex-direction: column; gap: 8px; }
.travel-city { display: flex; align-items: center; gap: 10px; padding: 9px 11px; border: 1px solid var(--border); border-radius: 8px; background: var(--surface); }
.travel-city-name { font-weight: 600; font-size: 14px; }
.travel-city-main { flex: 1; min-width: 0; }

/* 旅行地图（ECharts） */
.travel-map-root { margin-top: 12px; }
.travel-map-search {
  display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
  margin-bottom: 12px;
}
.travel-search-wrap {
  position: relative; flex: 1; min-width: 220px; max-width: 420px;
}
.travel-search-ico {
  position: absolute; left: 10px; top: 50%; transform: translateY(-50%);
  font-size: 13px; color: var(--text-3); pointer-events: none;
}
.travel-search-wrap .inp { padding-left: 30px; width: 100%; }
.travel-map-wrap {
  position: relative;
  border: 1px solid var(--border); border-radius: var(--r-m);
  background: var(--surface); box-shadow: var(--sh-1); overflow: hidden;
}
.travel-chart { width: 100%; height: 520px; }
.travel-map-legend {
  position: absolute; left: 12px; bottom: 12px;
  display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
  font-size: 12px; color: var(--text-2);
  background: rgba(255,255,255,0.85); backdrop-filter: blur(2px);
  padding: 6px 10px; border-radius: 8px; border: 1px solid var(--border);
}
.travel-detail-card { margin-top: 16px; }
.travel-detail-list { display: flex; flex-direction: column; gap: 10px; }

.travel-year-list { margin-top: 18px; display: flex; flex-direction: column; gap: 18px; }
.travel-year-section {}
.travel-year-title {
  font-size: 16px; font-weight: 700; color: var(--accent);
  margin-bottom: 10px; padding-bottom: 6px; border-bottom: 1px solid var(--border);
}
.travel-year-cards { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 12px; }
.travel-place-card {
  border: 1px solid var(--border); border-radius: var(--r-m);
  background: var(--surface); box-shadow: var(--sh-1); padding: 13px 15px;
  display: flex; flex-direction: column; gap: 10px;
}
.travel-card-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 8px; }
.travel-card-head > div:first-child { display: flex; flex-direction: column; gap: 3px; }
.travel-card-city { font-size: 15px; font-weight: 700; color: var(--text); }
.travel-card-imgs { display: flex; gap: 8px; flex-wrap: wrap; }
.travel-card-img {
  width: 84px; height: 84px; object-fit: cover; border-radius: 8px;
  border: 1px solid var(--border); background: var(--surface-2);
}
.travel-card-row { font-size: 13px; line-height: 1.6; color: var(--text-2); }
.travel-card-row b { color: var(--text); margin-right: 6px; }

.travel-photo-box { display: flex; flex-direction: column; gap: 10px; }
.travel-photo-list { display: flex; gap: 10px; flex-wrap: wrap; }
.travel-photo-thumb {
  position: relative; width: 72px; height: 72px; border-radius: 8px; overflow: hidden;
  border: 1px solid var(--border); background: var(--surface-2);
}
.travel-photo-thumb img { width: 100%; height: 100%; object-fit: cover; }
.travel-photo-del {
  position: absolute; top: 2px; right: 2px;
  width: 18px; height: 18px; border-radius: 50%; border: none;
  background: var(--danger); color: #fff; font-size: 12px; line-height: 18px;
  text-align: center; cursor: pointer; padding: 0;
}

/* 旅行 · 攻略 / 私藏 */
.guide-card, .private-card {
  display: flex; align-items: flex-start; gap: 12px;
  padding: 13px 15px; border: 1px solid var(--border); border-radius: 10px;
  background: var(--surface); box-shadow: var(--sh-1);
  margin-bottom: 10px;
}
.guide-main, .private-main { flex: 1; min-width: 0; }
.guide-title, .private-title { font-size: 14.5px; font-weight: 600; }
.guide-meta, .private-meta { display: flex; gap: 6px; align-items: center; flex-wrap: wrap; margin: 5px 0; }
.guide-content { font-size: 13px; line-height: 1.7; color: var(--text-2); white-space: pre-wrap; margin-top: 6px; }
.private-note { font-size: 12.5px; color: var(--text-2); margin-top: 6px; line-height: 1.6; }
.guide-actions, .private-actions { display: flex; gap: 4px; flex-shrink: 0; }

/* 打卡 */
.checkin-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 12px; }
.checkin-card {
  border: 1px solid var(--border); border-radius: 10px;
  background: var(--surface); box-shadow: var(--sh-1);
  padding: 14px; display: flex; flex-direction: column; gap: 12px;
  transition: transform .14s, box-shadow .14s;
}
.checkin-card:hover { transform: translateY(-2px); box-shadow: var(--sh-2); }
.checkin-card.done { border-color: var(--accent); background: linear-gradient(135deg, #fff 0%, var(--accent-bg) 100%); }
.checkin-top { display: flex; align-items: center; gap: 10px; }
.checkin-ico { font-size: 22px; }
.checkin-name { font-weight: 600; font-size: 14.5px; flex: 1; }
.checkin-btn {
  border: 1px solid var(--accent); color: var(--accent); background: transparent;
  border-radius: 999px; padding: 4px 14px; font-size: 12.5px; font-weight: 600; cursor: pointer;
  transition: background .14s, color .14s;
}
.checkin-btn:hover { background: var(--accent-bg); }
.checkin-btn.on { background: var(--accent); color: #fff; }
.checkin-stats { display: flex; gap: 10px; }
.ck-stat { flex: 1; text-align: center; background: var(--surface-2); border-radius: 8px; padding: 8px 0; }
.ck-stat b { display: block; font-size: 20px; font-weight: 800; color: var(--accent); font-variant-numeric: tabular-nums; }
.ck-stat span { font-size: 11px; color: var(--text-3); }
.checkin-actions { display: flex; gap: 4px; justify-content: flex-end; }

/* 生活 · 摄影参数 */
.photo-param-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 12px; }
.photo-param-card {
  background: var(--surface); border: 1px solid var(--border); border-radius: var(--r-m);
  padding: 14px; box-shadow: var(--sh-1); transition: transform .12s, box-shadow .12s;
}
.photo-param-card:hover { transform: translateY(-2px); box-shadow: var(--sh-2); }
.photo-param-card.archived { opacity: .75; }
.photo-param-top { display: flex; justify-content: space-between; align-items: flex-start; gap: 10px; margin-bottom: 10px; }
.photo-param-name { font-size: 15px; font-weight: 700; color: var(--text); }
.photo-param-filter { font-size: 12px; color: var(--text-3); margin-top: 2px; }
.photo-param-actions { display: flex; gap: 4px; }
.photo-param-fields { display: grid; grid-template-columns: repeat(2, 1fr); gap: 6px; margin-bottom: 10px; }
.photo-param-field { display: flex; justify-content: space-between; gap: 6px; background: var(--surface-2); border-radius: 6px; padding: 5px 8px; font-size: 12px; }
.photo-param-k { color: var(--text-3); }
.photo-param-v { font-weight: 600; color: var(--text); }
.photo-param-note { font-size: 12.5px; color: var(--text-2); line-height: 1.5; margin-bottom: 8px; }
.photo-param-tags { display: flex; gap: 5px; flex-wrap: wrap; }

/* 阅读 · 灵感储存区 */
.quote-wall { display: grid; grid-template-columns: repeat(auto-fill, minmax(160px, 1fr)); gap: 10px; }
.quote-card {
  border: 1px solid var(--border); border-left: 3px solid var(--gold);
  border-radius: var(--r-m); background: var(--surface-2);
  padding: 10px 11px; position: relative; cursor: pointer;
  display: flex; flex-direction: column; gap: 6px;
  min-height: 72px;
}
.quote-card:hover { background: var(--surface); border-color: var(--accent); }
.quote-text { font-size: 12px; line-height: 1.55; color: var(--text); display: -webkit-box; -webkit-line-clamp: 4; -webkit-box-orient: vertical; overflow: hidden; }
.quote-source { font-size: 10.5px; color: var(--text-3); font-style: italic; margin-top: auto; }
.quote-actions { position: absolute; top: 6px; right: 6px; display: flex; gap: 2px; opacity: 0; transition: opacity .14s; }
.quote-card:hover .quote-actions { opacity: 1; }
.quote-view-text { font-size: 16px; line-height: 1.8; color: var(--text); white-space: pre-wrap; }
.quote-view-source { font-size: 13px; color: var(--text-3); font-style: italic; margin-top: 14px; }
.quote-view-note { font-size: 12.5px; color: var(--text-2); margin-top: 12px; padding-top: 12px; border-top: 1px dashed var(--border); line-height: 1.6; white-space: pre-wrap; }

/* ---------- mobile nav (hamburger + drawer) ---------- */
.hamburger {
  display: none; align-items: center; justify-content: center;
  width: 34px; height: 34px; flex-shrink: 0; border-radius: 8px;
  font-size: 18px; color: var(--text-2); cursor: pointer;
  border: 1px solid var(--border); background: var(--surface-2);
}
.hamburger:hover { color: var(--text); background: var(--surface-3); }
.nav-mask { display: none; }

/* ---------- responsive ---------- */
@media (max-width: 920px) {
  .sidebar { width: 180px; }
  .stat-grid { grid-template-columns: repeat(2, 1fr); }
  .sched-grid { grid-template-columns: repeat(3, 1fr); }
  .rep-grid { grid-template-columns: 1fr; }
  .kanban { grid-template-columns: repeat(3, 1fr); }
  .qual-grid { grid-template-columns: repeat(3, 1fr); }
  .news-list { grid-template-columns: repeat(2, 1fr); }
  .asset-grid { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 820px) {
  /* 侧边栏改为抽屉，避免挤占主区（电脑端不受影响） */
  .hamburger { display: inline-flex; }
  .sidebar {
    position: fixed; top: 0; left: 0; bottom: 0; z-index: 80;
    width: 82vw; max-width: 340px;
    transform: translateX(-100%);
    transition: transform .25s ease;
    box-shadow: 0 0 50px rgba(46,42,38,.32);
  }
  .sidebar.open { transform: translateX(0); }
  .nav-mask {
    display: block; position: fixed; inset: 0; z-index: 70;
    background: rgba(46,42,38,.42); opacity: 0; pointer-events: none;
    transition: opacity .25s ease;
  }
  .nav-mask.show { opacity: 1; pointer-events: auto; }
  .topbar { padding-left: 8px; gap: 8px; }
  .cmd-wrap { max-width: none; }
  .nav-item { padding: 13px 12px; font-size: 15px; }
  .view-wrap { padding: 14px 14px 96px; }
}
@media (max-width: 640px) {
  .topbar { padding: 0 10px; }
  .view-wrap { padding: 12px 12px 96px; }
  .page-head { flex-direction: column; gap: 10px; }
  .stat-grid, .sched-grid, .kanban, .qual-grid, .news-list, .asset-grid { grid-template-columns: 1fr; }
  .week-grid { grid-template-columns: repeat(7, minmax(120px, 1fr)); }
  .form-2 { grid-template-columns: 1fr; }
  .exp-grid { grid-template-columns: 1fr; }
  .imp-stat-grid { grid-template-columns: repeat(3, 1fr); }
}

/* ---------- export / backup modal ---------- */
.exp-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; margin-top: 6px; }
.exp-card {
  background: var(--surface); border: 1px solid var(--border); border-radius: var(--r-m);
  padding: 22px 14px 18px; text-align: center; cursor: pointer;
  transition: transform .12s ease, box-shadow .12s ease, border-color .12s ease;
  box-shadow: var(--sh-1);
}
.exp-card:hover {
  border-color: var(--accent-2);
  box-shadow: var(--sh-2);
  transform: translateY(-2px);
}
.exp-ico { font-size: 32px; line-height: 1; margin-bottom: 10px; }
.exp-t { font-size: 14px; font-weight: 700; color: var(--text); margin-bottom: 4px; }
.exp-s { font-size: 11.5px; color: var(--text-3); line-height: 1.45; }

/* ---------- import / reset modal ---------- */
.imp-desc-grid { display: flex; flex-direction: column; gap: 10px; }
.imp-desc-card {
  display: flex; align-items: flex-start; gap: 12px;
  background: var(--surface-2); border: 1px solid var(--border); border-radius: var(--r-m);
  padding: 12px 14px;
}
.imp-desc-ico { font-size: 24px; line-height: 1; flex-shrink: 0; margin-top: 1px; }
.imp-desc-txt { flex: 1; min-width: 0; }
.imp-desc-title { font-size: 13px; font-weight: 700; color: var(--text); margin-bottom: 3px; }
.imp-desc-sub { font-size: 12px; color: var(--text-2); line-height: 1.55; }
.imp-stat-title { font-size: 12px; font-weight: 700; color: var(--text-2); margin: 18px 0 8px; }
.imp-stat-grid { display: grid; grid-template-columns: repeat(5, 1fr); gap: 8px; }
.imp-stat {
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  background: var(--surface-2); border: 1px solid var(--border); border-radius: var(--r-s);
  padding: 8px 4px;
}
.imp-stat-n { font-size: 15px; font-weight: 800; color: var(--accent); }
.imp-stat-k { font-size: 11px; color: var(--text-3); margin-top: 1px; }

.ck-row { display: flex; align-items: center; gap: 8px; font-size: 13px; color: var(--text); cursor: pointer; }
.ck-row input { width: 16px; height: 16px; accent-color: var(--accent); }
.f-row { display: flex; align-items: center; gap: 10px; margin: 10px 0; }
.f-lab { font-size: 12.5px; color: var(--text-2); width: 92px; flex-shrink: 0; }
.f-in { flex: 1; min-width: 0; padding: 7px 10px; border: 1px solid var(--border-2); border-radius: 7px; font-size: 12.5px; background: var(--surface); color: var(--text); }
.f-in:focus { outline: none; border-color: var(--accent); }

/* 微信周报快捷粘贴框（日报周报页） */
.wx-paste { border-left: 3px solid var(--accent); background: var(--surface-2); }
.wx-paste .ta { min-height: 88px; }
.wx-paste .row { align-items: center; }

/* ================== 行业百词 左右布局 v16.35 ================== */
.baici-head { max-width: 1180px; margin: 0 auto; padding-bottom: 8px; }
.baici-top { max-width: 1180px; margin: 14px auto; background: var(--bg-2, #f5f5f3); }
.baici-top-row { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }
.baici-top-row > .inp { flex: 1 1 200px; }
.baici-search { display: flex; gap: 4px; align-items: center; background: #fff; border: 1px solid var(--line, #e5e0d3); border-radius: 8px; padding: 0 8px; height: 36px; min-width: 180px; flex: 0 1 220px; }
.baici-search input { border: none; background: transparent; outline: none; flex: 1; font-size: 13px; min-width: 0; }
.baici-top-tip { margin-top: 8px; }

.baici-layout { display: flex; gap: 22px; max-width: 1180px; margin: 8px auto 40px; align-items: flex-start; }
.baici-side { flex: 0 0 240px; max-width: 280px; padding: 4px; border-radius: 10px; }
.baici-side-head { font-weight: 600; font-size: 12.5px; color: var(--text-3); margin: 0 0 8px; padding-left: 4px; letter-spacing: .04em; }
.baici-side-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 5px; }
.baici-side-cell { padding: 7px 10px; cursor: pointer; border: 1px solid var(--line, #e5e0d3); border-radius: 8px; background: #fff; transition: background .12s, border-color .12s; }
.baici-side-cell:hover { border-color: var(--green-soft, #d6e3c9); background: #fafaf7; }
.baici-side-cell.is-cur { border-color: var(--green, #5F8D4E); background: var(--green-soft, #eaf2e3); }
.baici-side-term { font-weight: 600; font-size: 13.5px; line-height: 1.3; }
.baici-side-meta { display: none; }   /* 桌面也隐藏 meta 行，统一紧凑（cat 信息已在 chip 上体现） */

/* 顶部 cat 分类 chip 行（横向 wrap） */
.baici-chips { display: flex; flex-wrap: wrap; gap: 6px; max-width: 1180px; margin: 4px auto 8px; padding: 0 4px; }
.baici-chip { font-size: 12.5px; padding: 5px 12px; border-radius: 999px; border: 1px solid var(--line, #e5e0d3); background: #fff; color: var(--text-2); cursor: pointer; transition: all .12s; }
.baici-chip:hover { border-color: var(--green-soft, #d6e3c9); background: #fafaf7; }
.baici-chip.is-cur { background: var(--green-soft, #eaf2e3); border-color: var(--green, #5F8D4E); color: var(--green, #3F5A33); font-weight: 600; }

.baici-main { flex: 1; min-width: 0; }

@media (max-width: 760px) {
  .baici-layout { flex-direction: column-reverse; gap: 14px; }
  .baici-side { position: static; flex: 1 1 auto; max-width: none; max-height: none; border: 1px solid var(--line, #e5e0d3); padding: 8px 10px; }
  .baici-side-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 5px; }
  .baici-side-cell { padding: 7px 10px; }
  .baici-side-term { font-size: 13.5px; font-weight: 600; }
  .baici-side-head { padding-left: 0; font-size: 12.5px; margin-bottom: 6px; }
  .baici-chips { padding: 0 10px; gap: 5px; }
  .baici-chip { font-size: 12px; padding: 4px 10px; }
  .baici-top-row { flex-direction: column; align-items: stretch; }
  .baici-search { flex: 1 1 auto; }
}

/* ---------- 手机速录（云端中转） ---------- */
.q-card { padding: 16px 18px; margin-bottom: 14px; }
.q-sec-title { font-size: 14px; font-weight: 700; color: var(--text); margin-bottom: 12px; padding-left: 10px; border-left: 3px solid var(--accent); }
.q-row { display: flex; align-items: center; gap: 10px; margin-bottom: 10px; }
.q-row:last-child { margin-bottom: 0; }
.q-between { justify-content: space-between; }
.q-end { justify-content: flex-end; }
.q-input {
  flex: 1; min-width: 0; padding: 8px 11px; border: 1px solid var(--border-2); border-radius: var(--r-s);
  background: var(--surface-2); color: var(--text); font-size: 13px; outline: none;
}
.q-input:focus { border-color: var(--accent); background: var(--surface); }
.q-hint { font-size: 12px; color: var(--text-2); line-height: 1.6; margin-bottom: 10px; }
.q-status { font-size: 12px; color: var(--text-2); }
.q-check { font-size: 12.5px; color: var(--text-2); display: inline-flex; align-items: center; gap: 6px; cursor: pointer; }
.q-check input { accent-color: var(--accent); }
.q-chips { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 12px; }
.q-ta {
  width: 100%; min-height: 120px; font-size: 15px; line-height: 1.6; padding: 12px 14px;
  border: 1px solid var(--border-2); border-radius: var(--r-m); background: var(--surface-2);
  color: var(--text); resize: vertical; outline: none; margin-bottom: 12px;
}
.q-ta:focus { border-color: var(--accent); background: var(--surface); }
.q-inbox-item { border: 1px solid var(--border); border-radius: var(--r-m); padding: 12px; margin-bottom: 10px; background: var(--surface-2); }
.q-inbox-item:last-child { margin-bottom: 0; }
.q-inbox-meta { font-size: 11.5px; color: var(--text-3); margin-bottom: 7px; }
.q-inbox-ta { width: 100%; min-height: 64px; font-size: 13px; line-height: 1.5; padding: 8px 10px; border: 1px solid var(--border-2); border-radius: var(--r-s); background: var(--surface); color: var(--text); resize: vertical; outline: none; margin-bottom: 8px; }
.q-inbox-ta:focus { border-color: var(--accent); }
.q-relay { background: rgba(95,141,78,.10); border-color: rgba(95,141,78,.35); }
.q-relay-text { font-size: 13px; line-height: 1.5; color: var(--text-2); margin: 2px 0 8px; word-break: break-all; }
.q-tip { font-size: 12px; color: var(--text-3); line-height: 1.7; margin-top: 4px; }



/* ================= AI 对话 ================= */
.ai-status { font-size: 12px; color: var(--text-3); display: flex; align-items: center; gap: 6px; }
.ai-dot { width: 7px; height: 7px; border-radius: 50%; display: inline-block; }
.ai-dot.on  { background: var(--accent); }
.ai-dot.off { background: var(--text-3); opacity: .5; }

.ai-body {
  height: 46vh; min-height: 260px; overflow-y: auto;
  padding: 14px 16px; background: var(--surface-2);
  border: 1px solid var(--border); border-radius: var(--r-m, 10px);
  margin-bottom: 12px;
}
.ai-row { display: flex; margin-bottom: 12px; }
.ai-row.me { justify-content: flex-end; }
.ai-bub {
  max-width: 78%; padding: 9px 13px; border-radius: 12px;
  background: var(--surface); border: 1px solid var(--border);
  font-size: 13.5px; line-height: 1.65; color: var(--text);
  white-space: pre-wrap; word-break: break-word;
}
.ai-row.me .ai-bub {
  background: var(--accent-bg); border-color: var(--accent-bg-2); color: var(--text);
}
.ai-caret {
  display: inline-block; width: 6px; height: 14px; margin-left: 2px;
  background: var(--accent); vertical-align: -2px; animation: aiBlink 1s steps(2) infinite;
}
@keyframes aiBlink { 0%, 50% { opacity: 1 } 51%, 100% { opacity: 0 } }
.ai-typing { color: var(--text-3); font-size: 13px; }
.ai-ok { color: var(--accent); }

.ai-empty { text-align: center; padding: 48px 20px; }
.ai-empty-t { font-size: 14px; color: var(--text-2); margin-bottom: 8px; }
.ai-empty-s { font-size: 12.5px; color: var(--text-3); line-height: 1.8; }

.ai-input { display: flex; gap: 8px; align-items: flex-end; }
.ai-ta {
  flex: 1; resize: vertical; min-height: 58px; padding: 10px 12px;
  border: 1px solid var(--border-2); border-radius: var(--r-m, 10px);
  background: var(--surface); color: var(--text);
  font-family: inherit; font-size: 13.5px; line-height: 1.6;
}
.ai-ta:focus { outline: none; border-color: var(--accent-2); }

.ai-foot {
  display: flex; justify-content: space-between; align-items: center;
  margin-top: 10px; font-size: 11.5px; color: var(--text-3);
}

/* 待确认指令区 */
.ai-pend {
  margin-bottom: 12px; padding: 12px 14px;
  background: var(--accent-bg); border: 1px solid var(--accent-bg-2);
  border-radius: var(--r-m, 10px);
}
.ai-pend-h { font-size: 12.5px; color: var(--accent-3); font-weight: 500; margin-bottom: 8px; }
.ai-pend-row {
  display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
  padding: 6px 0; border-top: 1px dashed var(--accent-bg-2);
}
.ai-pend-row:first-of-type { border-top: none; }
.ai-pend-tag {
  flex: none; font-size: 11px; padding: 1px 7px; border-radius: 8px;
  background: var(--accent); color: #fff;
}
.ai-pend-cmd {
  flex: 1; min-width: 180px; font-size: 12.5px; color: var(--text-2);
  font-family: var(--font-mono, ui-monospace, Consolas, monospace);
  background: var(--surface); padding: 3px 8px; border-radius: 6px;
  border: 1px solid var(--border);
}
.ai-pend-acts { margin-top: 10px; display: flex; gap: 8px; }

@media (max-width: 640px) {
  .ai-bub { max-width: 88%; }
  .ai-body { height: 40vh; }
}

/* ============================================================
   V17 视觉升级 · 晨光纸感·科技
   纯 CSS 覆盖层：不动数据 / 功能 / 布局，删掉本节即整体回滚。
   设计原则：保留暖白纸底品牌，注入晨光环境光、玻璃拟态、
   翠绿渐变与精细网格；克制、静态、不打扰。
   ============================================================ */
:root {
  /* 圆角微升（6/10/14 → 8/12/16） */
  --r-s: 8px; --r-m: 12px; --r-l: 16px; --r-xl: 20px;
  /* 晨光环境光：顶部两团极淡翠绿/赭金光晕 */
  --bg-sun: radial-gradient(1100px 460px at 18% -12%, rgba(95,141,78,.13), transparent 62%),
            radial-gradient(860px 400px at 88% -14%, rgba(169,130,73,.09), transparent 55%);
  /* 极淡科技网格 */
  --grid-line: rgba(44,44,44,.026);
  /* 玻璃拟态 */
  --glass: rgba(255,255,255,.74);
  --glass-strong: rgba(255,255,255,.88);
  --glass-border: rgba(95,141,78,.16);
  /* 渐变强调 */
  --accent-grad-v: linear-gradient(135deg, #6da05a 0%, #4a7a3e 100%);
  --gold-grad: linear-gradient(135deg, #c49a5a 0%, #a98249 100%);
  /* 阴影：柔和 + 带翠绿色相 + 顶部内高光 */
  --sh-1: 0 1px 2px rgba(44,44,44,.05), 0 2px 8px rgba(95,141,78,.05), inset 0 1px 0 rgba(255,255,255,.7);
  --sh-2: 0 4px 14px rgba(44,44,44,.08), 0 2px 6px rgba(95,141,78,.07), inset 0 1px 0 rgba(255,255,255,.7);
  --sh-3: 0 10px 30px rgba(44,44,44,.13), 0 4px 12px rgba(95,141,78,.10), inset 0 1px 0 rgba(255,255,255,.7);
}
/* 背景：晨光光晕 + 极淡网格 */
body {
  background-color: var(--bg);
  background-image:
    linear-gradient(var(--grid-line) 1px, transparent 1px),
    linear-gradient(90deg, var(--grid-line) 1px, transparent 1px),
    var(--bg-sun);
  background-size: 52px 52px, 52px 52px, auto;
}
/* 侧边栏：玻璃磨砂，让晨光网格透过来 */
.sidebar {
  background: rgba(245,243,237,.8);
  -webkit-backdrop-filter: blur(14px); backdrop-filter: blur(14px);
}
/* 品牌徽标：翠绿渐变 + 内高光 + 柔和投影 */
.brand-mark {
  background: var(--accent-grad-v);
  box-shadow: 0 3px 10px rgba(95,141,78,.35), inset 0 1px 0 rgba(255,255,255,.28);
}
/* 导航激活项：渐变胶囊 + 左侧光条 */
.nav-item.on {
  background: linear-gradient(135deg, var(--accent-bg), #eef5ec);
  box-shadow: inset 0 0 0 1px rgba(95,141,78,.16);
}
.nav-item.on::before {
  content: ''; position: absolute; left: 0; top: 22%; bottom: 22%; width: 3px;
  border-radius: 3px; background: var(--accent-grad-v);
}
.nav-group-title { color: var(--accent-3); opacity: .85; }
/* 导航徽标：金→赭渐变胶囊 */
.nav-badge {
  background: var(--gold-grad); color: #fff;
  box-shadow: 0 1px 4px rgba(169,130,73,.32);
}
/* 顶栏：玻璃高光 */
.topbar {
  background: var(--glass-strong);
  -webkit-backdrop-filter: blur(10px); backdrop-filter: blur(10px);
}
/* 命令框 / 搜索框：聚焦翠绿光晕 */
.cmd-wrap:focus-within {
  border-color: var(--accent-2);
  box-shadow: 0 0 0 3px var(--accent-bg), 0 2px 10px rgba(95,141,78,.12);
  background: var(--surface);
}
.search-box:focus-within {
  border-color: var(--accent-2);
  box-shadow: 0 0 0 3px var(--accent-bg);
}
/* 卡片：玻璃半透 + 顶部内高光 + 三层阴影 */
.card, .stat, .focus-item, .tbl-wrap {
  background: var(--glass);
  border-color: var(--glass-border);
  box-shadow: var(--sh-1);
}
.card:hover, .stat:hover, .focus-item:hover {
  box-shadow: var(--sh-2);
}
/* 统计卡：顶部翠绿渐变条（替代纯色 border-top） */
.stat {
  border-top: 1px solid var(--border);
  box-shadow: inset 0 3px 0 var(--accent), var(--sh-1);
}
.stat:hover { box-shadow: inset 0 3px 0 var(--accent-3), var(--sh-2); }
/* KPI 数字：翠绿渐变文字 */
.stat-value {
  background: var(--accent-grad-v);
  -webkit-background-clip: text; background-clip: text;
  color: transparent;
}
/* 主按钮：翠绿渐变 + 内高光 + hover 光晕 */
.btn.primary {
  background: var(--accent-grad-v); border-color: transparent;
  box-shadow: 0 2px 10px rgba(95,141,78,.28), inset 0 1px 0 rgba(255,255,255,.22);
}
.btn.primary:hover {
  background: linear-gradient(135deg, #5a8f48, #3f6f34);
  box-shadow: 0 4px 14px rgba(95,141,78,.38), inset 0 1px 0 rgba(255,255,255,.18);
}
.btn.primary:active { transform: translateY(1px); }
/* 激活态按钮 / chip：渐变底 */
.btn.on, .chip.on {
  background: linear-gradient(135deg, var(--accent-bg), #eaf2e6);
  box-shadow: inset 0 0 0 1px rgba(95,141,78,.18);
}
/* 表格表头：极淡渐变 + 底部细线 */
th {
  background: linear-gradient(180deg, #fbfaf7, #f4f3ee);
  border-bottom: 1px solid var(--border-2);
}
.tbl-wrap { background: var(--glass); }
/* 弹窗：磨砂玻璃 + 柔和投影 */
.modal {
  background: var(--glass-strong);
  -webkit-backdrop-filter: blur(16px); backdrop-filter: blur(16px);
  box-shadow: 0 16px 48px rgba(44,44,44,.16), 0 4px 14px rgba(95,141,78,.10);
}
.modal-mask { background: rgba(46,42,38,.34); }
/* toast：深色玻璃 */
.toast {
  background: rgba(46,42,38,.84);
  -webkit-backdrop-filter: blur(8px); backdrop-filter: blur(8px);
  box-shadow: 0 6px 20px rgba(0,0,0,.22);
}
/* 输入框聚焦：翠绿光晕 */
.inp:focus, .ta:focus, select.inp:focus {
  border-color: var(--accent-2);
  box-shadow: 0 0 0 3px var(--accent-bg), 0 0 8px rgba(95,141,78,.10);
}
/* 下拉菜单：玻璃 + 高光 */
.dropdown-menu {
  background: var(--glass-strong);
  -webkit-backdrop-filter: blur(12px); backdrop-filter: blur(12px);
  box-shadow: 0 10px 28px rgba(44,44,44,.12), 0 3px 8px rgba(95,141,78,.08);
}
/* 滚动条：翠绿细条 */
.nav::-webkit-scrollbar-thumb,
.view-wrap::-webkit-scrollbar-thumb,
.modal-body::-webkit-scrollbar-thumb {
  background: rgba(95,141,78,.25);
}
.nav::-webkit-scrollbar-thumb:hover,
.view-wrap::-webkit-scrollbar-thumb:hover {
  background: rgba(95,141,78,.45);
}
/* 分页/日期胶囊：细描边高光 */
.today-chip {
  background: linear-gradient(180deg, #faf9f5, #f1f0ea);
  box-shadow: inset 0 1px 0 rgba(255,255,255,.8), 0 1px 3px rgba(44,44,44,.06);
}
/* 页面标题：左侧渐变光条 */
.page-title {
  border-left: none;
  padding-left: 12px;
  background-image: linear-gradient(90deg, var(--accent) 0 4px, transparent 4px);
  background-position: 0 50%;
}
/* 空状态图标：翠绿渐变圆底 */
.empty-ico {
  width: 60px; height: 60px; margin: 0 auto 10px; border-radius: 18px;
  background: linear-gradient(135deg, var(--accent-bg), #eef5ec);
  display: flex; align-items: center; justify-content: center; font-size: 28px;
  box-shadow: inset 0 1px 0 rgba(255,255,255,.8), 0 4px 12px rgba(95,141,78,.12);
}

/* ============================================================
   V18 视觉升级 · 远峰蓝 Apple Style
   在 V17 之上做品牌级色相切换：翠绿 → 远峰蓝，走向苹果简约。
   仍是纯 CSS 覆盖层：删 V18 回 V17（翠绿版），删 V17+V18 回原始。
   数据 / 功能 / 布局依旧不动。
   ============================================================ */
:root {
  /* 远峰蓝主色体系（Sierra Blue 风格） */
  --accent:    #7E9FBE;
  --accent-2:  #9DB9D4;
  --accent-3:  #45647F;
  --accent-bg: #E7F0F9;
  --accent-bg-2: #D6E4F2;
  --accent-grad: linear-gradient(135deg, #7E9FBE 0%, #9DB9D4 100%);
  --accent-grad-v: linear-gradient(135deg, #8FB2D0 0%, #5F83A6 100%);
  /* 背景：苹果式纯净浅灰，去掉网格线 */
  --bg:        #F3F5F8;
  --surface:   #FFFFFF;
  --surface-2: #FAFBFC;
  --surface-3: #EFF2F6;
  --border:    #E5E9EF;
  --border-2:  #D4DAE3;
  /* 文字：深灰主字 + 蓝灰次字 */
  --text:      #1D1D1F;
  --text-2:    #5B6470;
  --text-3:    #9AA3AF;
  /* 点缀徽标：远峰蓝渐变（替代金赭） */
  --gold:      #6E8FB0;
  --gold-2:    #8FB2D0;
  --gold-bg:   #E7F0F9;
  --gold-bg-2: #D6E4F2;
  --gold-grad: linear-gradient(135deg, #8FB2D0 0%, #6E8FB0 100%);
  /* 晨光：极淡蓝色环境光 */
  --bg-sun: radial-gradient(1100px 460px at 18% -12%, rgba(126,159,190,.10), transparent 62%),
            radial-gradient(860px 400px at 88% -14%, rgba(157,185,212,.07), transparent 55%);
  --grid-line: transparent;
  /* 玻璃拟态：白磨砂 */
  --glass: rgba(255,255,255,.82);
  --glass-strong: rgba(255,255,255,.92);
  --glass-border: rgba(126,159,190,.14);
  /* 圆角升级（苹果大圆角 10/14/18/22） */
  --r-s: 10px; --r-m: 14px; --r-l: 18px; --r-xl: 22px;
  /* 阴影：极轻 + 蓝色相 + 顶部内高光 */
  --sh-1: 0 1px 2px rgba(29,29,31,.04), 0 2px 8px rgba(126,159,190,.05), inset 0 1px 0 rgba(255,255,255,.9);
  --sh-2: 0 4px 14px rgba(29,29,31,.06), 0 2px 6px rgba(126,159,190,.06), inset 0 1px 0 rgba(255,255,255,.9);
  --sh-3: 0 12px 32px rgba(29,29,31,.10), 0 4px 12px rgba(126,159,190,.08), inset 0 1px 0 rgba(255,255,255,.9);
}
/* 背景：纯净浅灰 + 极淡蓝晨光（无网格） */
body {
  background-color: var(--bg);
  background-image: var(--bg-sun);
  background-size: auto;
}
/* 苹果式文字层级 */
body { letter-spacing: .1px; }
.page-title { font-weight: 700; }
.section-title { font-weight: 600; }
/* 侧边栏：白磨砂，更通透 */
.sidebar {
  background: rgba(255,255,255,.78);
  -webkit-backdrop-filter: blur(18px); backdrop-filter: blur(18px);
}
/* 导航激活项：淡蓝胶囊 + 蓝色光条 */
.nav-item.on {
  background: linear-gradient(135deg, var(--accent-bg), #eef4fb);
  box-shadow: inset 0 0 0 1px rgba(126,159,190,.18);
}
.nav-item.on::before { background: var(--accent-grad-v); }
.nav-group-title { color: var(--accent-3); }
/* 品牌徽标：远峰蓝渐变 */
.brand-mark {
  background: var(--accent-grad-v);
  box-shadow: 0 3px 10px rgba(126,159,190,.38), inset 0 1px 0 rgba(255,255,255,.3);
}
/* 导航徽标：蓝渐变胶囊 */
.nav-badge {
  background: var(--gold-grad); color: #fff;
  box-shadow: 0 1px 4px rgba(110,143,176,.35);
}
/* 顶栏：高透明白玻璃 */
.topbar {
  background: rgba(255,255,255,.86);
  -webkit-backdrop-filter: blur(14px); backdrop-filter: blur(14px);
}
/* 命令框 / 搜索框：聚焦蓝色光晕 */
.cmd-wrap:focus-within,
.search-box:focus-within {
  border-color: var(--accent-2);
  box-shadow: 0 0 0 3px var(--accent-bg), 0 2px 10px rgba(126,159,190,.14);
}
/* 卡片：纯白 + 极轻阴影 */
.card, .stat, .focus-item, .tbl-wrap {
  background: #FFFFFF;
  border-color: var(--border);
  box-shadow: var(--sh-1);
}
.card:hover, .stat:hover, .focus-item:hover { box-shadow: var(--sh-2); }
/* 统计卡：顶部远峰蓝渐变条 */
.stat {
  border-top: 1px solid var(--border);
  box-shadow: inset 0 3px 0 var(--accent), var(--sh-1);
}
.stat:hover { box-shadow: inset 0 3px 0 var(--accent-3), var(--sh-2); }
/* KPI 数字：远峰蓝渐变文字 */
.stat-value { background: var(--accent-grad-v); }
.stat-value small { color: var(--accent-2); }
/* 主按钮：远峰蓝渐变 */
.btn.primary {
  background: var(--accent-grad-v); border-color: transparent;
  box-shadow: 0 2px 10px rgba(126,159,190,.30), inset 0 1px 0 rgba(255,255,255,.28);
}
.btn.primary:hover {
  background: linear-gradient(135deg, #6E93B5, #4E7195);
  box-shadow: 0 4px 14px rgba(126,159,190,.40), inset 0 1px 0 rgba(255,255,255,.22);
}
/* 激活按钮 / chip：淡蓝底 */
.btn.on, .chip.on {
  background: linear-gradient(135deg, var(--accent-bg), #eaf2fb);
  box-shadow: inset 0 0 0 1px rgba(126,159,190,.20);
}
/* 表格表头：苹果式浅灰渐变 */
th {
  background: linear-gradient(180deg, #FBFCFE, #F3F6FA);
  border-bottom: 1px solid var(--border-2);
  color: var(--text-2);
}
/* 弹窗：白玻璃 + 柔和投影 */
.modal {
  background: rgba(255,255,255,.94);
  -webkit-backdrop-filter: blur(20px); backdrop-filter: blur(20px);
  box-shadow: 0 18px 50px rgba(29,29,31,.14), 0 4px 14px rgba(126,159,190,.10);
}
.modal-mask { background: rgba(29,29,31,.32); }
/* 输入聚焦：蓝色光晕 */
.inp:focus, .ta:focus, select.inp:focus {
  border-color: var(--accent-2);
  box-shadow: 0 0 0 3px var(--accent-bg), 0 0 8px rgba(126,159,190,.12);
}
/* 下拉菜单：白玻璃 */
.dropdown-menu {
  background: rgba(255,255,255,.94);
  -webkit-backdrop-filter: blur(14px); backdrop-filter: blur(14px);
  box-shadow: 0 12px 30px rgba(29,29,31,.12), 0 3px 8px rgba(126,159,190,.08);
}
.dropdown-item:hover { background: var(--accent-bg); color: var(--accent-3); }
/* 滚动条：远峰蓝细条 */
.nav::-webkit-scrollbar-thumb,
.view-wrap::-webkit-scrollbar-thumb,
.modal-body::-webkit-scrollbar-thumb {
  background: rgba(126,159,190,.30);
}
.nav::-webkit-scrollbar-thumb:hover,
.view-wrap::-webkit-scrollbar-thumb:hover {
  background: rgba(126,159,190,.50);
}
/* 标签：蓝系微调 */
.tag.ok { background: var(--accent-bg); color: var(--accent-3); }
.tag.info { background: var(--accent-bg); color: var(--accent-3); }
.tag.accent { background: var(--accent-bg-2); color: var(--accent-3); }
.tag.gold, .tag.seed-gold { background: var(--gold-bg); color: var(--accent-3); }
.link-btn { color: var(--accent); }
/* 页面标题：左侧远峰蓝渐变光条 */
.page-title {
  background-image: linear-gradient(90deg, var(--accent) 0 4px, transparent 4px);
}
/* 空状态图标：远峰蓝渐变圆底 */
.empty-ico {
  background: linear-gradient(135deg, var(--accent-bg), #eef4fb);
  box-shadow: inset 0 1px 0 rgba(255,255,255,.9), 0 4px 12px rgba(126,159,190,.14);
}
/* 日期胶囊：浅灰白 */
.today-chip {
  background: linear-gradient(180deg, #FBFCFE, #F1F4F8);
  box-shadow: inset 0 1px 0 rgba(255,255,255,.9), 0 1px 3px rgba(29,29,31,.05);
}
/* 选中文本：淡蓝 */
::selection { background: rgba(126,159,190,.25); }
mark { background: #E3EDF7; }

/* ============================================================
   V19 视觉升级 · 春日配色
   源于一张小红书春日色卡（GLAUCOUS / POWDER BLUE / VANILLA / MOSS GREEN / DARK GREEN）。
   主色粉蓝、暖米白底、深绿主文字、苔绿做成功强调、米黄点缀。
   仍是纯 CSS 覆盖层：删 V19 回 V18（远峰蓝），删 V18+V19 回 V17（翠绿版）。
   数据 / 功能 / 布局依旧不动。
   ============================================================ */
:root {
  /* 主色：GLAUCOUS 粉蓝 */
  --accent:    #59789F;
  --accent-2:  #A9B6C4;
  --accent-3:  #243C2C;
  --accent-bg: #DDE5EE;
  --accent-bg-2: #C7D3E0;
  --accent-grad: linear-gradient(135deg, #59789F 0%, #A9B6C4 100%);
  --accent-grad-v: linear-gradient(135deg, #5B7FA8 0%, #3F5E80 100%);
  /* 强调：MOSS GREEN 苔绿（替代金赭，作成功/正） */
  --gold:      #769445;
  --gold-2:    #94B25F;
  --gold-bg:   #EEF3E0;
  --gold-bg-2: #D9E5C2;
  --gold-grad: linear-gradient(135deg, #94B25F 0%, #769445 100%);
  /* 点缀：VANILLA 米黄（极少用，hover 高光/警示） */
  --vanilla:   #ECE69D;
  --vanilla-bg: #F9F6E0;
  /* 页面底：暖米白 */
  --bg:        #F9F6EC;
  --surface:   #FFFFFF;
  --surface-2: #FBF9F0;
  --surface-3: #F0ECDF;
  --border:    #E8E3D3;
  --border-2:  #D6CFB8;
  /* 文字：DARK GREEN 主字 */
  --text:      #243C2C;
  --text-2:    #5A6B5C;
  --text-3:    #8FA094;
  /* 状态语义色 */
  --ok:        #769445;       --ok-bg:     #EEF3E0;
  --info:      #59789F;       --info-bg:   #DDE5EE;
  --warn:      #C9A227;       --warn-bg:   #F9F0C2;
  --danger:    #B0453A;       --danger-bg: #F9EAE8;
  /* 晨光：粉蓝色调 */
  --bg-sun: radial-gradient(1100px 460px at 18% -12%, rgba(89,120,159,.10), transparent 62%),
            radial-gradient(860px 400px at 88% -14%, rgba(118,148,69,.06), transparent 55%);
  --grid-line: transparent;
  /* 玻璃拟态 */
  --glass: rgba(255,255,255,.82);
  --glass-strong: rgba(255,255,255,.92);
  --glass-border: rgba(89,120,159,.14);
  /* 苹果式大圆角 */
  --r-s: 10px; --r-m: 14px; --r-l: 18px; --r-xl: 22px;
  /* 阴影：蓝绿色相极轻 */
  --sh-1: 0 1px 2px rgba(36,60,44,.05), 0 2px 8px rgba(89,120,159,.06), inset 0 1px 0 rgba(255,255,255,.85);
  --sh-2: 0 4px 14px rgba(36,60,44,.07), 0 2px 6px rgba(89,120,159,.08), inset 0 1px 0 rgba(255,255,255,.85);
  --sh-3: 0 12px 32px rgba(36,60,44,.10), 0 4px 12px rgba(89,120,159,.10), inset 0 1px 0 rgba(255,255,255,.85);
}
/* 暖米白底 + 极淡粉蓝晨光 */
body { background-color: var(--bg); background-image: var(--bg-sun); background-size: auto; letter-spacing: .1px; }
/* 侧边栏：白磨砂 */
.sidebar {
  background: rgba(255,255,255,.78);
  -webkit-backdrop-filter: blur(18px); backdrop-filter: blur(18px);
}
/* 品牌徽标：粉蓝渐变 */
.brand-mark {
  background: var(--accent-grad-v);
  box-shadow: 0 3px 10px rgba(89,120,159,.38), inset 0 1px 0 rgba(255,255,255,.3);
}
/* 导航激活：淡粉蓝胶囊 + 粉蓝光条 */
.nav-item.on {
  background: linear-gradient(135deg, var(--accent-bg), #E5EBF2);
  box-shadow: inset 0 0 0 1px rgba(89,120,159,.20);
}
.nav-item.on::before { background: var(--accent-grad-v); }
.nav-group-title { color: var(--accent-3); }
/* 导航徽标：苔绿渐变 */
.nav-badge {
  background: var(--gold-grad); color: #fff;
  box-shadow: 0 1px 4px rgba(118,148,69,.35);
}
/* 顶栏：高透白玻璃 */
.topbar {
  background: rgba(255,255,255,.86);
  -webkit-backdrop-filter: blur(14px); backdrop-filter: blur(14px);
}
/* 命令框 / 搜索框聚焦：粉蓝光晕 */
.cmd-wrap:focus-within, .search-box:focus-within {
  border-color: var(--accent-2);
  box-shadow: 0 0 0 3px var(--accent-bg), 0 2px 10px rgba(89,120,159,.16);
}
/* 卡片：纯白 + 极轻蓝绿阴影 */
.card, .stat, .focus-item, .tbl-wrap {
  background: #FFFFFF;
  border-color: var(--border);
  box-shadow: var(--sh-1);
}
.card:hover, .stat:hover, .focus-item:hover { box-shadow: var(--sh-2); }
/* 统计卡：顶部粉蓝渐变条 */
.stat {
  border-top: 1px solid var(--border);
  box-shadow: inset 0 3px 0 var(--accent), var(--sh-1);
}
.stat:hover { box-shadow: inset 0 3px 0 var(--accent-2), var(--sh-2); }
/* KPI 数字：粉蓝渐变文字 */
.stat-value { background: var(--accent-grad-v); }
.stat-value small { color: var(--accent-2); }
/* 主按钮：粉蓝渐变 */
.btn.primary {
  background: var(--accent-grad-v); border-color: transparent;
  box-shadow: 0 2px 10px rgba(89,120,159,.32), inset 0 1px 0 rgba(255,255,255,.28);
}
.btn.primary:hover {
  background: linear-gradient(135deg, #45617F, #2C4A66);
  box-shadow: 0 4px 14px rgba(89,120,159,.42), inset 0 1px 0 rgba(255,255,255,.22);
}
.btn.primary:active { transform: translateY(1px); }
/* 激活按钮 / chip：淡粉蓝底 */
.btn.on, .chip.on {
  background: linear-gradient(135deg, var(--accent-bg), #E5EBF2);
  box-shadow: inset 0 0 0 1px rgba(89,120,159,.18);
}
/* 表格表头：暖米白浅渐变 */
th {
  background: linear-gradient(180deg, #FBF9F0, #F2EEE0);
  border-bottom: 1px solid var(--border-2);
  color: var(--text-2);
}
/* 弹窗：白玻璃 + 蓝绿柔和阴影 */
.modal {
  background: rgba(255,255,255,.94);
  -webkit-backdrop-filter: blur(20px); backdrop-filter: blur(20px);
  box-shadow: 0 18px 50px rgba(36,60,44,.14), 0 4px 14px rgba(89,120,159,.10);
}
.modal-mask { background: rgba(36,60,44,.32); }
/* 输入聚焦：粉蓝光晕 */
.inp:focus, .ta:focus, select.inp:focus {
  border-color: var(--accent-2);
  box-shadow: 0 0 0 3px var(--accent-bg), 0 0 8px rgba(89,120,159,.14);
}
/* 下拉菜单白玻璃 */
.dropdown-menu {
  background: rgba(255,255,255,.94);
  -webkit-backdrop-filter: blur(14px); backdrop-filter: blur(14px);
  box-shadow: 0 12px 30px rgba(36,60,44,.12), 0 3px 8px rgba(89,120,159,.08);
}
.dropdown-item:hover { background: var(--accent-bg); color: var(--accent-3); }
/* 滚动条：粉蓝细条 */
.nav::-webkit-scrollbar-thumb,
.view-wrap::-webkit-scrollbar-thumb,
.modal-body::-webkit-scrollbar-thumb {
  background: rgba(89,120,159,.30);
}
.nav::-webkit-scrollbar-thumb:hover,
.view-wrap::-webkit-scrollbar-thumb:hover {
  background: rgba(89,120,159,.50);
}
/* 状态标签：苔绿替换翠绿作成功 */
.tag.ok { background: var(--ok-bg); color: var(--ok); }
.tag.info { background: var(--accent-bg); color: var(--accent-3); }
.tag.accent { background: var(--accent-bg-2); color: var(--accent-3); }
.tag.gold, .tag.seed-gold { background: var(--gold-bg); color: #5A6E2A; }
.tag.warn { background: var(--warn-bg); color: #8A6E1B; }
.link-btn { color: var(--accent); }
/* 页面标题左侧粉蓝光条 */
.page-title {
  background-image: linear-gradient(90deg, var(--accent) 0 4px, transparent 4px);
}
/* 空状态图标：粉蓝渐变圆底 */
.empty-ico {
  background: linear-gradient(135deg, var(--accent-bg), #E5EBF2);
  box-shadow: inset 0 1px 0 rgba(255,255,255,.9), 0 4px 12px rgba(89,120,159,.14);
}
/* 日期胶囊：暖米白 */
.today-chip {
  background: linear-gradient(180deg, #FBF9F0, #F0ECDF);
  box-shadow: inset 0 1px 0 rgba(255,255,255,.9), 0 1px 3px rgba(36,60,44,.05);
}
/* 选中文字淡蓝 */
::selection { background: rgba(89,120,159,.22); }
/* mark 米黄底 */
mark { background: #F9F0C2; }

/* ============================================================
   V20 视觉升级 · 暖阳
   在 V19 春日配色之上增强「阳光感」：更亮米白底 + 琥珀阳光金
   主色 + 顶部金色太阳光晕。浅色为主不变，温暖明亮但不浓艳。
   仍是纯 CSS 覆盖层：删 V20 回 V19（春日），删 V19+V20 回 V18。
   数据 / 功能 / 布局依旧不动。
   ============================================================ */
:root {
  /* 主色：琥珀阳光金 */
  --accent:    #E8A33D;
  --accent-2:  #F2C469;
  --accent-3:  #8A5A1B;
  --accent-bg: #FCF3E0;
  --accent-bg-2: #F7E6C3;
  --accent-grad: linear-gradient(135deg, #F2C469 0%, #E8A33D 100%);
  --accent-grad-v: linear-gradient(135deg, #F0BC5C 0%, #DE9628 100%);
  /* 强调：MOSS 苔绿（成功/正，阳光下更鲜活） */
  --gold:      #E8A33D;
  --gold-2:    #F2C469;
  --gold-bg:   #FCF3E0;
  --gold-bg-2: #F7E6C3;
  --gold-grad: linear-gradient(135deg, #F2C469 0%, #E8A33D 100%);
  /* 点缀：米黄 */
  --vanilla:   #F2E6B8;
  --vanilla-bg: #FBF6E2;
  /* 页面底：亮暖米白（更亮更透） */
  --bg:        #FEFBF3;
  --surface:   #FFFFFF;
  --surface-2: #FDF9EE;
  --surface-3: #F3ECD8;
  --border:    #EDE5D2;
  --border-2:  #DDD0B4;
  /* 文字：暖棕（阳光下更自然） */
  --text:      #4A3B24;
  --text-2:    #7A6A4E;
  --text-3:    #A99A78;
  /* 状态语义色 */
  --ok:        #769445;       --ok-bg:     #EFF4E0;
  --info:      #5A7FA0;       --info-bg:   #E8F0F7;
  --warn:      #C78A2B;       --warn-bg:   #FBF0D8;
  --danger:    #B0453A;       --danger-bg: #FAEBE8;
  /* 晨光：金色太阳光晕 */
  --bg-sun: radial-gradient(1200px 520px at 30% -16%, rgba(242,196,105,.20), transparent 62%),
            radial-gradient(900px 440px at 88% -18%, rgba(232,163,61,.12), transparent 55%);
  --grid-line: transparent;
  /* 玻璃拟态 */
  --glass: rgba(255,255,255,.82);
  --glass-strong: rgba(255,255,255,.92);
  --glass-border: rgba(232,163,61,.14);
  /* 苹果式大圆角 */
  --r-s: 10px; --r-m: 14px; --r-l: 18px; --r-xl: 22px;
  /* 阴影：暖金色相极轻 */
  --sh-1: 0 1px 2px rgba(74,59,36,.05), 0 2px 8px rgba(232,163,61,.07), inset 0 1px 0 rgba(255,255,255,.9);
  --sh-2: 0 4px 14px rgba(74,59,36,.07), 0 2px 6px rgba(232,163,61,.09), inset 0 1px 0 rgba(255,255,255,.9);
  --sh-3: 0 12px 32px rgba(74,59,36,.11), 0 4px 12px rgba(232,163,61,.11), inset 0 1px 0 rgba(255,255,255,.9);
}
/* 亮暖米白底 + 金色太阳光晕 */
body { background-color: var(--bg); background-image: var(--bg-sun); background-size: auto; }
/* 侧边栏：白磨砂 */
.sidebar { background: rgba(255,255,255,.78); -webkit-backdrop-filter: blur(18px); backdrop-filter: blur(18px); }
/* 品牌徽标：阳光金渐变 */
.brand-mark {
  background: var(--accent-grad-v);
  box-shadow: 0 3px 10px rgba(232,163,61,.40), inset 0 1px 0 rgba(255,255,255,.35);
}
/* 导航激活：淡金胶囊 + 金色光条 */
.nav-item.on {
  background: linear-gradient(135deg, var(--accent-bg), #FCF3DC);
  box-shadow: inset 0 0 0 1px rgba(232,163,61,.22);
}
.nav-item.on::before { background: var(--accent-grad-v); }
.nav-group-title { color: var(--accent-3); }
/* 导航徽标：阳光金渐变 */
.nav-badge {
  background: var(--gold-grad); color: #fff;
  box-shadow: 0 1px 4px rgba(232,163,61,.38);
}
/* 顶栏：高透白玻璃 */
.topbar { background: rgba(255,255,255,.86); -webkit-backdrop-filter: blur(14px); backdrop-filter: blur(14px); }
/* 命令框 / 搜索框聚焦：金色光晕 */
.cmd-wrap:focus-within, .search-box:focus-within {
  border-color: var(--accent-2);
  box-shadow: 0 0 0 3px var(--accent-bg), 0 2px 10px rgba(232,163,61,.18);
}
/* 卡片：纯白 + 极轻暖金阴影 */
.card, .stat, .focus-item, .tbl-wrap {
  background: #FFFFFF;
  border-color: var(--border);
  box-shadow: var(--sh-1);
}
.card:hover, .stat:hover, .focus-item:hover { box-shadow: var(--sh-2); }
/* 统计卡：顶部阳光金渐变条 */
.stat {
  border-top: 1px solid var(--border);
  box-shadow: inset 0 3px 0 var(--accent), var(--sh-1);
}
.stat:hover { box-shadow: inset 0 3px 0 var(--accent-3), var(--sh-2); }
/* KPI 数字：阳光金渐变文字 */
.stat-value { background: var(--accent-grad-v); }
.stat-value small { color: var(--accent-2); }
/* 主按钮：阳光金渐变 */
.btn.primary {
  background: var(--accent-grad-v); border-color: transparent;
  box-shadow: 0 2px 10px rgba(232,163,61,.34), inset 0 1px 0 rgba(255,255,255,.35);
}
.btn.primary:hover {
  background: linear-gradient(135deg, #DE9628, #C67F1B);
  box-shadow: 0 4px 14px rgba(232,163,61,.44), inset 0 1px 0 rgba(255,255,255,.25);
}
.btn.primary:active { transform: translateY(1px); }
/* 激活按钮 / chip：淡金底 */
.btn.on, .chip.on {
  background: linear-gradient(135deg, var(--accent-bg), #FCF3DC);
  box-shadow: inset 0 0 0 1px rgba(232,163,61,.20);
}
/* 表格表头：亮暖米白浅渐变 */
th {
  background: linear-gradient(180deg, #FDF9EE, #F4EDDA);
  border-bottom: 1px solid var(--border-2);
  color: var(--text-2);
}
/* 弹窗：白玻璃 + 暖金柔和阴影 */
.modal {
  background: rgba(255,255,255,.94);
  -webkit-backdrop-filter: blur(20px); backdrop-filter: blur(20px);
  box-shadow: 0 18px 50px rgba(74,59,36,.14), 0 4px 14px rgba(232,163,61,.11);
}
.modal-mask { background: rgba(74,59,36,.32); }
/* 输入聚焦：金色光晕 */
.inp:focus, .ta:focus, select.inp:focus {
  border-color: var(--accent-2);
  box-shadow: 0 0 0 3px var(--accent-bg), 0 0 8px rgba(232,163,61,.15);
}
/* 下拉菜单白玻璃 */
.dropdown-menu {
  background: rgba(255,255,255,.94);
  -webkit-backdrop-filter: blur(14px); backdrop-filter: blur(14px);
  box-shadow: 0 12px 30px rgba(74,59,36,.12), 0 3px 8px rgba(232,163,61,.09);
}
.dropdown-item:hover { background: var(--accent-bg); color: var(--accent-3); }
/* 滚动条：阳光金细条 */
.nav::-webkit-scrollbar-thumb,
.view-wrap::-webkit-scrollbar-thumb,
.modal-body::-webkit-scrollbar-thumb { background: rgba(232,163,61,.32); }
.nav::-webkit-scrollbar-thumb:hover,
.view-wrap::-webkit-scrollbar-thumb:hover { background: rgba(232,163,61,.52); }
/* 状态标签 */
.tag.ok { background: var(--ok-bg); color: var(--ok); }
.tag.info { background: var(--info-bg); color: var(--info); }
.tag.accent { background: var(--accent-bg-2); color: var(--accent-3); }
.tag.gold, .tag.seed-gold { background: var(--gold-bg); color: var(--accent-3); }
.tag.warn { background: var(--warn-bg); color: var(--warn); }
.link-btn { color: var(--accent); }
/* 页面标题左侧阳光金光条 */
.page-title {
  background-image: linear-gradient(90deg, var(--accent) 0 4px, transparent 4px);
}
/* 空状态图标：阳光金渐变圆底 */
.empty-ico {
  background: linear-gradient(135deg, var(--accent-bg), #FCF3DC);
  box-shadow: inset 0 1px 0 rgba(255,255,255,.9), 0 4px 12px rgba(232,163,61,.15);
}
/* 日期胶囊：亮暖米白 */
.today-chip {
  background: linear-gradient(180deg, #FDF9EE, #F1EAD6);
  box-shadow: inset 0 1px 0 rgba(255,255,255,.9), 0 1px 3px rgba(74,59,36,.06);
}
/* 选中文字：暖金淡 */
::selection { background: rgba(242,196,105,.30); }
/* mark 米黄底 */
mark { background: #F6EDC8; }

/* ============================================================
   V21 视觉升级 · 墨绿 · 沉稳点睛
   主色墨绿（沉稳耐看），点缀橙（行动）/ 蓝（信息）/ 棕（次级），
   紧急事项用深红。浅色米白底不变，极简克制。
   仍是纯 CSS 覆盖层：删 V21 回 V20（暖阳），逐层可回滚。
   数据 / 功能 / 布局依旧不动。
   ============================================================ */
:root {
  /* 主色：墨绿 */
  --accent:    #3F6B51;
  --accent-2:  #6B9679;
  --accent-3:  #2A4A38;
  --accent-bg: #E9F0E8;
  --accent-bg-2: #D5E4D6;
  --accent-grad: linear-gradient(135deg, #6B9679 0%, #3F6B51 100%);
  --accent-grad-v: linear-gradient(135deg, #4F7F63 0%, #2F5A42 100%);
  /* 点缀：橙（行动/警告） */
  --orange:    #E08A3C;
  --orange-2:  #F0A45C;
  --orange-bg: #FBF0E2;
  /* 点缀：蓝（信息/链接） */
  --blue:      #4A7BA6;
  --blue-2:    #6D9CC6;
  --blue-bg:   #E8F0F7;
  /* 点缀：棕（次级/金种子） */
  --brown:     #8B6F47;
  --brown-2:   #A58B61;
  --brown-bg:  #F3EDE2;
  /* 紧急：深红 */
  --danger:    #A5281B;
  --danger-bg: #FAE7E3;
  /* 徽标：橙色渐变（点缀行动点） */
  --gold:      #E08A3C;
  --gold-2:    #F0A45C;
  --gold-bg:   #FBF0E2;
  --gold-bg-2: #F6E3C8;
  --gold-grad: linear-gradient(135deg, #F0A45C 0%, #E08A3C 100%);
  /* 点缀：米黄 */
  --vanilla:   #E8DFC0;
  --vanilla-bg: #F8F3E4;
  /* 页面底：米白（带极淡暖调） */
  --bg:        #F7F6EF;
  --surface:   #FFFFFF;
  --surface-2: #FBFBF6;
  --surface-3: #F0EFE5;
  --border:    #E7E5D8;
  --border-2:  #D5D2BF;
  /* 文字：墨绿深灰 */
  --text:      #24382C;
  --text-2:    #5C6E60;
  --text-3:    #93A195;
  /* 状态语义色 */
  --ok:        #3F6B51;       --ok-bg:     #E9F0E8;
  --info:      #4A7BA6;       --info-bg:   #E8F0F7;
  --warn:      #E08A3C;       --warn-bg:   #FBF0E2;
  --danger:    #A5281B;       --danger-bg: #FAE7E3;
  /* 晨光：墨绿 + 淡橙 */
  --bg-sun: radial-gradient(1200px 520px at 30% -16%, rgba(63,107,81,.12), transparent 62%),
            radial-gradient(900px 440px at 88% -18%, rgba(224,138,60,.08), transparent 55%);
  --grid-line: transparent;
  /* 玻璃拟态 */
  --glass: rgba(255,255,255,.84);
  --glass-strong: rgba(255,255,255,.93);
  --glass-border: rgba(63,107,81,.14);
  /* 苹果式大圆角 */
  --r-s: 10px; --r-m: 14px; --r-l: 18px; --r-xl: 22px;
  /* 阴影：墨绿色相极轻 */
  --sh-1: 0 1px 2px rgba(36,56,44,.05), 0 2px 8px rgba(63,107,81,.06), inset 0 1px 0 rgba(255,255,255,.9);
  --sh-2: 0 4px 14px rgba(36,56,44,.07), 0 2px 6px rgba(63,107,81,.08), inset 0 1px 0 rgba(255,255,255,.9);
  --sh-3: 0 12px 32px rgba(36,56,44,.11), 0 4px 12px rgba(63,107,81,.10), inset 0 1px 0 rgba(255,255,255,.9);
}
/* 米白底 + 墨绿晨光 */
body { background-color: var(--bg); background-image: var(--bg-sun); background-size: auto; }
/* 侧边栏：白磨砂 */
.sidebar { background: rgba(255,255,255,.8); -webkit-backdrop-filter: blur(18px); backdrop-filter: blur(18px); }
/* 品牌徽标：墨绿渐变 */
.brand-mark {
  background: var(--accent-grad-v);
  box-shadow: 0 3px 10px rgba(63,107,81,.38), inset 0 1px 0 rgba(255,255,255,.3);
}
/* 导航激活：淡墨绿胶囊 + 墨绿光条 */
.nav-item.on {
  background: linear-gradient(135deg, var(--accent-bg), #F0F5EE);
  box-shadow: inset 0 0 0 1px rgba(63,107,81,.20);
}
.nav-item.on::before { background: var(--accent-grad-v); }
.nav-group-title { color: var(--accent-3); }
/* 导航徽标：橙色渐变（点缀行动点） */
.nav-badge {
  background: var(--gold-grad); color: #fff;
  box-shadow: 0 1px 4px rgba(224,138,60,.38);
}
/* 顶栏：高透白玻璃 */
.topbar { background: rgba(255,255,255,.87); -webkit-backdrop-filter: blur(14px); backdrop-filter: blur(14px); }
/* 命令框 / 搜索框聚焦：墨绿光晕 */
.cmd-wrap:focus-within, .search-box:focus-within {
  border-color: var(--accent-2);
  box-shadow: 0 0 0 3px var(--accent-bg), 0 2px 10px rgba(63,107,81,.16);
}
/* 卡片：纯白 + 极轻墨绿阴影 */
.card, .stat, .focus-item, .tbl-wrap {
  background: #FFFFFF;
  border-color: var(--border);
  box-shadow: var(--sh-1);
}
.card:hover, .stat:hover, .focus-item:hover { box-shadow: var(--sh-2); }
/* 统计卡：顶部墨绿渐变条 */
.stat {
  border-top: 1px solid var(--border);
  box-shadow: inset 0 3px 0 var(--accent), var(--sh-1);
}
.stat:hover { box-shadow: inset 0 3px 0 var(--accent-3), var(--sh-2); }
/* KPI 数字：墨绿渐变文字 */
.stat-value { background: var(--accent-grad-v); }
.stat-value small { color: var(--accent-2); }
/* 主按钮：墨绿渐变 */
.btn.primary {
  background: var(--accent-grad-v); border-color: transparent;
  box-shadow: 0 2px 10px rgba(63,107,81,.32), inset 0 1px 0 rgba(255,255,255,.28);
}
.btn.primary:hover {
  background: linear-gradient(135deg, #3F6B51, #27452F);
  box-shadow: 0 4px 14px rgba(63,107,81,.42), inset 0 1px 0 rgba(255,255,255,.2);
}
.btn.primary:active { transform: translateY(1px); }
/* 激活按钮 / chip：淡墨绿底 */
.btn.on, .chip.on {
  background: linear-gradient(135deg, var(--accent-bg), #F0F5EE);
  box-shadow: inset 0 0 0 1px rgba(63,107,81,.18);
}
/* 表格表头：米白浅渐变 */
th {
  background: linear-gradient(180deg, #FBFBF6, #F1F0E6);
  border-bottom: 1px solid var(--border-2);
  color: var(--text-2);
}
/* 弹窗：白玻璃 + 墨绿柔和阴影 */
.modal {
  background: rgba(255,255,255,.94);
  -webkit-backdrop-filter: blur(20px); backdrop-filter: blur(20px);
  box-shadow: 0 18px 50px rgba(36,56,44,.14), 0 4px 14px rgba(63,107,81,.10);
}
.modal-mask { background: rgba(36,56,44,.34); }
/* 输入聚焦：墨绿光晕 */
.inp:focus, .ta:focus, select.inp:focus {
  border-color: var(--accent-2);
  box-shadow: 0 0 0 3px var(--accent-bg), 0 0 8px rgba(63,107,81,.14);
}
/* 下拉菜单白玻璃 */
.dropdown-menu {
  background: rgba(255,255,255,.94);
  -webkit-backdrop-filter: blur(14px); backdrop-filter: blur(14px);
  box-shadow: 0 12px 30px rgba(36,56,44,.12), 0 3px 8px rgba(63,107,81,.08);
}
.dropdown-item:hover { background: var(--accent-bg); color: var(--accent-3); }
/* 滚动条：墨绿细条 */
.nav::-webkit-scrollbar-thumb,
.view-wrap::-webkit-scrollbar-thumb,
.modal-body::-webkit-scrollbar-thumb { background: rgba(63,107,81,.32); }
.nav::-webkit-scrollbar-thumb:hover,
.view-wrap::-webkit-scrollbar-thumb:hover { background: rgba(63,107,81,.52); }
/* 状态标签：墨绿主 / 橙警告 / 蓝信息 / 棕次级 / 深红紧急 */
.tag.ok { background: var(--ok-bg); color: var(--ok); }
.tag.info { background: var(--info-bg); color: var(--info); }
.tag.accent { background: var(--accent-bg-2); color: var(--accent-3); }
.tag.gold, .tag.seed-gold { background: var(--brown-bg); color: var(--brown); }
.tag.warn { background: var(--warn-bg); color: var(--warn); }
.tag.danger { background: var(--danger-bg); color: var(--danger); }
.link-btn { color: var(--accent); }
/* 页面标题左侧墨绿光条 */
.page-title {
  background-image: linear-gradient(90deg, var(--accent) 0 4px, transparent 4px);
}
/* 空状态图标：墨绿渐变圆底 */
.empty-ico {
  background: linear-gradient(135deg, var(--accent-bg), #F0F5EE);
  box-shadow: inset 0 1px 0 rgba(255,255,255,.9), 0 4px 12px rgba(63,107,81,.14);
}
/* 日期胶囊：米白 */
.today-chip {
  background: linear-gradient(180deg, #FBFBF6, #F1F0E6);
  box-shadow: inset 0 1px 0 rgba(255,255,255,.9), 0 1px 3px rgba(36,56,44,.06);
}
/* 选中文字：墨绿淡 */
::selection { background: rgba(63,107,81,.22); }
/* mark 米黄底 */
mark { background: #F6EDC8; }

/* ============================================================
   V22 视觉升级 · 墨绿 · 科技质感
   不换色，用质感造科技感（保留 V21 墨绿配色）：
   玻璃通透 / 辉光描边 / 网格纹理 / 等宽数字 / 微光交互 / 扫描细节。
   全部纯 CSS、零持续动画（仅 hover/focus 瞬时过渡）、数据不动。
   删 V22 即回 V21。
   ============================================================ */
:root {
  /* 背景：墨绿晨光 + 极淡科技网格 + 点阵 */
  --bg-sun: radial-gradient(1200px 520px at 30% -16%, rgba(63,107,81,.13), transparent 62%),
            radial-gradient(900px 440px at 88% -18%, rgba(224,138,60,.07), transparent 55%);
  --grid-line: rgba(63,107,81,.028);
  --dot-line: rgba(63,107,81,.05);
  /* 玻璃拟态加强 */
  --glass: rgba(255,255,255,.68);
  --glass-strong: rgba(255,255,255,.86);
  --glass-border: rgba(63,107,81,.16);
}
/* 背景：晨光 + 52px 网格 + 点阵（实验室感） */
body {
  background-color: var(--bg);
  background-image:
    linear-gradient(var(--grid-line) 1px, transparent 1px),
    linear-gradient(90deg, var(--grid-line) 1px, transparent 1px),
    radial-gradient(var(--dot-line) 1px, transparent 1.5px),
    var(--bg-sun);
  background-size: 52px 52px, 52px 52px, 26px 26px, auto;
}
/* 侧边栏：通透白玻璃 */
.sidebar {
  background: rgba(255,255,255,.66);
  -webkit-backdrop-filter: blur(20px); backdrop-filter: blur(20px);
}
/* 品牌徽标：墨绿渐变 + 顶部高光点 */
.brand-mark {
  background: var(--accent-grad-v);
  box-shadow: 0 3px 12px rgba(63,107,81,.42), inset 0 1px 0 rgba(255,255,255,.4), inset 0 -2px 4px rgba(0,0,0,.08);
}
/* 导航激活：淡墨绿玻璃胶囊 + 左侧辉光条 */
.nav-item.on {
  background: linear-gradient(135deg, rgba(233,240,232,.9), rgba(240,245,238,.7));
  -webkit-backdrop-filter: blur(8px); backdrop-filter: blur(8px);
  box-shadow: inset 0 0 0 1px rgba(63,107,81,.22), 0 1px 6px rgba(63,107,81,.10);
}
.nav-item.on::before { background: var(--accent-grad-v); box-shadow: 0 0 8px rgba(63,107,81,.55); }
/* 导航徽标：橙色渐变 + 高光 */
.nav-badge {
  background: var(--gold-grad); color: #fff;
  box-shadow: 0 1px 6px rgba(224,138,60,.42), inset 0 1px 0 rgba(255,255,255,.35);
}
/* 顶栏：高透白玻璃 */
.topbar {
  background: rgba(255,255,255,.78);
  -webkit-backdrop-filter: blur(16px); backdrop-filter: blur(16px);
}
/* 命令框 / 搜索框聚焦：墨绿外发光环 */
.cmd-wrap:focus-within, .search-box:focus-within {
  border-color: var(--accent-2);
  box-shadow: 0 0 0 3px rgba(233,240,232,.9), 0 0 14px rgba(63,107,81,.22), 0 2px 10px rgba(63,107,81,.12);
}
/* 卡片：玻璃半透 + 顶部辉光线 + hover 微浮光 */
.card, .stat, .focus-item, .tbl-wrap {
  background: var(--glass);
  -webkit-backdrop-filter: blur(10px); backdrop-filter: blur(10px);
  border-color: var(--glass-border);
  box-shadow: 0 1px 2px rgba(36,56,44,.05), 0 2px 8px rgba(63,107,81,.06), inset 0 1px 0 rgba(255,255,255,.85);
}
.card:hover, .stat:hover, .focus-item:hover {
  box-shadow: 0 2px 4px rgba(36,56,44,.06), 0 10px 28px rgba(63,107,81,.14), inset 0 1px 0 rgba(255,255,255,.95), 0 0 0 1px rgba(63,107,81,.10);
  transform: translateY(-1px);
}
/* 卡片顶部辉光线（伪元素，不占布局） */
.card::before, .stat::before, .focus-item::before, .tbl-wrap::before {
  content: ''; position: absolute; left: 12px; right: 12px; top: 0; height: 1px;
  background: linear-gradient(90deg, transparent, rgba(63,107,81,.30), transparent);
  pointer-events: none;
}
.card, .stat, .focus-item, .tbl-wrap { position: relative; }
/* 统计卡：顶部墨绿渐变条 + hover 光 */
.stat {
  border-top: 1px solid var(--border);
  box-shadow: inset 0 3px 0 var(--accent), 0 1px 2px rgba(36,56,44,.05), 0 2px 8px rgba(63,107,81,.06), inset 0 1px 0 rgba(255,255,255,.85);
}
.stat:hover { box-shadow: inset 0 3px 0 var(--accent-3), 0 10px 28px rgba(63,107,81,.14), inset 0 1px 0 rgba(255,255,255,.95); }
/* KPI 数字：墨绿渐变 + 等宽数字对齐 */
.stat-value {
  background: var(--accent-grad-v);
  -webkit-background-clip: text; background-clip: text;
  color: transparent;
  font-variant-numeric: tabular-nums;
}
.stat-value small { color: var(--accent-2); }
/* 主按钮：墨绿渐变 + 辉光边缘 */
.btn.primary {
  background: var(--accent-grad-v); border-color: transparent;
  box-shadow: 0 2px 10px rgba(63,107,81,.34), inset 0 1px 0 rgba(255,255,255,.32), inset 0 -2px 5px rgba(0,0,0,.06);
}
.btn.primary:hover {
  background: linear-gradient(135deg, #3F6B51, #27452F);
  box-shadow: 0 4px 16px rgba(63,107,81,.46), inset 0 1px 0 rgba(255,255,255,.25);
}
/* 激活按钮 / chip：淡墨绿玻璃 */
.btn.on, .chip.on {
  background: linear-gradient(135deg, rgba(233,240,232,.95), rgba(240,245,238,.8));
  -webkit-backdrop-filter: blur(6px); backdrop-filter: blur(6px);
  box-shadow: inset 0 0 0 1px rgba(63,107,81,.20), 0 1px 4px rgba(63,107,81,.08);
}
/* 表格表头：底部渐变细线（扫描感） */
th {
  background: linear-gradient(180deg, #FBFBF6, #F1F0E6);
  border-bottom: 1px solid var(--border-2);
  color: var(--text-2);
}
.tbl-wrap th {
  background-image: linear-gradient(90deg, transparent, rgba(63,107,81,.12) 30%, rgba(63,107,81,.12) 70%, transparent);
  background-size: 100% 1px; background-repeat: no-repeat; background-position: bottom;
}
/* 弹窗：白玻璃 + 墨绿辉光 */
.modal {
  background: rgba(255,255,255,.9);
  -webkit-backdrop-filter: blur(24px); backdrop-filter: blur(24px);
  box-shadow: 0 18px 50px rgba(36,56,44,.16), 0 4px 14px rgba(63,107,81,.12), 0 0 0 1px rgba(63,107,81,.06);
}
.modal-mask { background: rgba(36,56,44,.36); }
/* 输入聚焦：墨绿外发光环 */
.inp:focus, .ta:focus, select.inp:focus {
  border-color: var(--accent-2);
  box-shadow: 0 0 0 3px rgba(233,240,232,.9), 0 0 12px rgba(63,107,81,.16);
}
/* 下拉菜单白玻璃 */
.dropdown-menu {
  background: rgba(255,255,255,.9);
  -webkit-backdrop-filter: blur(16px); backdrop-filter: blur(16px);
  box-shadow: 0 12px 30px rgba(36,56,44,.14), 0 3px 8px rgba(63,107,81,.10), 0 0 0 1px rgba(63,107,81,.05);
}
.dropdown-item:hover { background: var(--accent-bg); color: var(--accent-3); }
/* 滚动条：墨绿渐变细条 */
.nav::-webkit-scrollbar-thumb,
.view-wrap::-webkit-scrollbar-thumb,
.modal-body::-webkit-scrollbar-thumb {
  background: linear-gradient(180deg, rgba(63,107,81,.30), rgba(63,107,81,.42));
}
.nav::-webkit-scrollbar-thumb:hover,
.view-wrap::-webkit-scrollbar-thumb:hover {
  background: linear-gradient(180deg, rgba(63,107,81,.50), rgba(63,107,81,.62));
}
/* 页面标题左侧墨绿辉光条 */
.page-title {
  background-image: linear-gradient(90deg, var(--accent) 0 4px, transparent 4px);
  text-shadow: 0 0 18px rgba(63,107,81,.15);
}
/* 空状态图标：墨绿玻璃渐变 */
.empty-ico {
  background: linear-gradient(135deg, rgba(233,240,232,.9), rgba(240,245,238,.7));
  -webkit-backdrop-filter: blur(8px); backdrop-filter: blur(8px);
  box-shadow: inset 0 1px 0 rgba(255,255,255,.9), 0 4px 14px rgba(63,107,81,.16);
}
/* 日期胶囊：玻璃高光 */
.today-chip {
  background: linear-gradient(180deg, #FBFBF6, #F1F0E6);
  box-shadow: inset 0 1px 0 rgba(255,255,255,.9), 0 1px 3px rgba(36,56,44,.06);
}
/* 表格行 hover：淡墨绿微光 */
tbody tr:hover { background: rgba(233,240,232,.35); }
/* 链接 hover：墨绿微光 */
.link-btn { color: var(--accent); }
.link-btn:hover { color: var(--accent-3); text-shadow: 0 0 8px rgba(63,107,81,.25); }
/* 选中文字：墨绿微光 */
::selection { background: rgba(63,107,81,.22); text-shadow: none; }
/* mark：米黄微光 */
mark { background: #F6EDC8; }


/* ============================================================
   V23 调整层 · 去网格 / 换色 / 苹果字体
   基于 V22 三件事：
     ① 去掉 body 网格 + 点阵 → 纯净米白
     ② 侧边栏纯白磨砂 + 主区暖米白，层次分明
     ③ 字体升级 SF Pro / 苹方；标题字重 800 → 600，更苹果克制
   纯 CSS 覆盖层，删 V23 回 V22；数据 / 功能 / 布局永远不动。
   ============================================================ */
:root {
  /* 网格：完全透明（即视觉上去除） */
  --grid-line: transparent;
  --dot-line: transparent;
  /* 侧边栏玻璃更白 */
  --glass-strong: rgba(255,255,255,.88);
}
/* 字体：苹果系统级优先 + 苹方中文回落 */
body {
  font-family:
    "SF Pro Display", "SF Pro Text",
    -apple-system, BlinkMacSystemFont,
    "Helvetica Neue",
    "PingFang SC", "Microsoft YaHei",
    "Segoe UI", "Noto Sans SC", Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-rendering: optimizeLegibility;
  letter-spacing: .1px;
  font-feature-settings: "kern" 1, "liga" 1;
}
/* 背景：去掉网格/点阵，只保留墨绿晨光 + 米白底 */
body {
  background-image: var(--bg-sun);
  background-size: auto;
}
/* 侧边栏：纯白磨砂（与暖米白主区对比，层次分明） */
.sidebar {
  background: rgba(255,255,255,.84);
  -webkit-backdrop-filter: blur(22px) saturate(160%); backdrop-filter: blur(22px) saturate(160%);
}
/* 侧边栏底部增加细边分隔（侧边栏与主区视觉切割） */
.sidebar { border-right: 1px solid rgba(63,107,81,.08); }
/* 主区 view-wrap：暖米白（继承 body） */
.view-wrap { background-color: var(--bg); }
/* 标题字重调整（800 → 600，更苹果克制） */
.page-title { font-weight: 600; letter-spacing: -.3px; }
.section-title { font-weight: 600; }
.brand-name { font-weight: 600; letter-spacing: .8px; }
.modal-title { font-weight: 600; }
.nav-group-title { font-weight: 600; letter-spacing: .8px; }
/* 数字字重与字距（KPI、统计） */
.stat-value {
  font-weight: 600;
  letter-spacing: -.5px;
  font-feature-settings: "kern" 1, "tnum" 1, "ss01" 1;
}
.stat-value small { font-weight: 500; letter-spacing: 0; }
/* 链接字重 */
.link-btn { font-weight: 500; }
/* 按钮字重 600 保持（苹果中性） */
.btn { font-weight: 500; letter-spacing: .1px; }
/* 中文场景：苹方更显气质 */
.section-title, .page-title, .modal-title {
  font-family: "SF Pro Display", "PingFang SC", "Helvetica Neue", sans-serif;
}
/* 等宽数字场景：KPI / 表头数字 / stat */
code, .mono, .stat-value {
  font-family: "SF Mono", ui-monospace, Menlo, Consolas, monospace;
  font-feature-settings: "tnum" 1;
}
/* 页面 title 左侧辉光条更细更克制 */
.page-title {
  background-image: linear-gradient(90deg, var(--accent) 0 3px, transparent 3px);
}

/* ============================================================
   V24 调整层 · 墨绿调亮
   用户反馈 V21 墨绿太深。主色提亮一档：
   #3F6B51 → #4C7C5F（更鲜活但不轻浮），深绿文字与浅绿
   底同步微调，阴影/晨光/描边色相全部随主色提亮。
   纯 CSS 覆盖层，删 V24 回 V23；数据 / 功能 / 布局不动。
   ============================================================ */
:root {
  /* 主色：墨绿调亮 */
  --accent:    #4C7C5F;
  --accent-2:  #7CA98C;
  --accent-3:  #33583F;
  --accent-bg: #E9F2EA;
  --accent-bg-2: #D6E6DA;
  --accent-grad: linear-gradient(135deg, #7CA98C 0%, #4C7C5F 100%);
  --accent-grad-v: linear-gradient(135deg, #5C8F6E 0%, #3B6A4B 100%);
  /* 状态语义色随主色微调 */
  --ok:        #4C7C5F;       --ok-bg:     #E9F2EA;
  /* 晨光：墨绿提亮 */
  --bg-sun: radial-gradient(1200px 520px at 30% -16%, rgba(76,124,95,.13), transparent 62%),
            radial-gradient(900px 440px at 88% -18%, rgba(224,138,60,.08), transparent 55%);
  /* 阴影：提亮后色相 */
  --sh-1: 0 1px 2px rgba(36,56,44,.05), 0 2px 8px rgba(76,124,95,.07), inset 0 1px 0 rgba(255,255,255,.9);
  --sh-2: 0 4px 14px rgba(36,56,44,.07), 0 2px 6px rgba(76,124,95,.09), inset 0 1px 0 rgba(255,255,255,.9);
  --sh-3: 0 12px 32px rgba(36,56,44,.11), 0 4px 12px rgba(76,124,95,.11), inset 0 1px 0 rgba(255,255,255,.9);
}
/* 品牌徽标：提亮墨绿渐变 */
.brand-mark {
  background: var(--accent-grad-v);
  box-shadow: 0 3px 10px rgba(76,124,95,.40), inset 0 1px 0 rgba(255,255,255,.32);
}
/* 导航激活胶囊 + 光条提亮 */
.nav-item.on {
  background: linear-gradient(135deg, var(--accent-bg), #F0F6F1);
  box-shadow: inset 0 0 0 1px rgba(76,124,95,.20);
}
.nav-item.on::before { background: var(--accent-grad-v); }
/* 侧边栏描边提亮 */
.sidebar { border-right: 1px solid rgba(76,124,95,.10); }
/* 主按钮提亮 */
.btn.primary {
  background: var(--accent-grad-v); border-color: transparent;
  box-shadow: 0 2px 10px rgba(76,124,95,.34), inset 0 1px 0 rgba(255,255,255,.32);
}
.btn.primary:hover {
  background: linear-gradient(135deg, #4C7C5F, #2F5439);
  box-shadow: 0 4px 14px rgba(76,124,95,.44), inset 0 1px 0 rgba(255,255,255,.25);
}
/* 统计卡顶部条提亮 */
.stat {
  box-shadow: inset 0 3px 0 var(--accent), var(--sh-1);
}
.stat:hover { box-shadow: inset 0 3px 0 var(--accent-3), var(--sh-2); }
/* 命令框/搜索框/输入聚焦光晕提亮 */
.cmd-wrap:focus-within, .search-box:focus-within {
  border-color: var(--accent-2);
  box-shadow: 0 0 0 3px var(--accent-bg), 0 2px 10px rgba(76,124,95,.18);
}
.inp:focus, .ta:focus, select.inp:focus {
  border-color: var(--accent-2);
  box-shadow: 0 0 0 3px var(--accent-bg), 0 0 12px rgba(76,124,95,.16);
}
/* 滚动条提亮 */
.nav::-webkit-scrollbar-thumb,
.view-wrap::-webkit-scrollbar-thumb,
.modal-body::-webkit-scrollbar-thumb { background: linear-gradient(180deg, rgba(76,124,95,.32), rgba(76,124,95,.44)); }
.nav::-webkit-scrollbar-thumb:hover,
.view-wrap::-webkit-scrollbar-thumb:hover { background: linear-gradient(180deg, rgba(76,124,95,.52), rgba(76,124,95,.64)); }
/* 卡片辉光线提亮 */
.card::before, .stat::before, .focus-item::before, .tbl-wrap::before {
  background: linear-gradient(90deg, transparent, rgba(76,124,95,.32), transparent);
}
/* 卡片 hover 辉光提亮 */
.card:hover, .stat:hover, .focus-item:hover {
  box-shadow: 0 2px 4px rgba(36,56,44,.06), 0 10px 28px rgba(76,124,95,.15), inset 0 1px 0 rgba(255,255,255,.95), 0 0 0 1px rgba(76,124,95,.10);
}
/* 选中文字提亮 */
::selection { background: rgba(76,124,95,.22); }

/* ============================================================
   V25 调整层 · 翠绿
   用户反馈墨绿仍太暗 → 换成翠绿（更鲜亮、更"春"）。
   只换主色族：翠绿 #43A047（亮 #66BB6A / 深 #2E7D32 /
   淡底 #E8F5E9 / 浅底 #C8E6C9），橙/蓝/棕点缀与深红紧急不变。
   纯 CSS 覆盖层，删 V25 回 V24；数据 / 功能 / 布局不动。
   ============================================================ */
:root {
  /* 主色：翠绿 */
  --accent:    #43A047;
  --accent-2:  #66BB6A;
  --accent-3:  #2E7D32;
  --accent-bg: #E8F5E9;
  --accent-bg-2: #C8E6C9;
  --accent-grad: linear-gradient(135deg, #66BB6A 0%, #43A047 100%);
  --accent-grad-v: linear-gradient(135deg, #4CAF50 0%, #388E3C 100%);
  /* 状态语义色随主色 */
  --ok:        #43A047;       --ok-bg:     #E8F5E9;
  /* 晨光：翠绿 */
  --bg-sun: radial-gradient(1200px 520px at 30% -16%, rgba(67,160,71,.13), transparent 62%),
            radial-gradient(900px 440px at 88% -18%, rgba(224,138,60,.08), transparent 55%);
  /* 阴影：翠绿色相 */
  --sh-1: 0 1px 2px rgba(36,56,44,.05), 0 2px 8px rgba(67,160,71,.07), inset 0 1px 0 rgba(255,255,255,.9);
  --sh-2: 0 4px 14px rgba(36,56,44,.07), 0 2px 6px rgba(67,160,71,.09), inset 0 1px 0 rgba(255,255,255,.9);
  --sh-3: 0 12px 32px rgba(36,56,44,.11), 0 4px 12px rgba(67,160,71,.11), inset 0 1px 0 rgba(255,255,255,.9);
}
/* 品牌徽标：翠绿渐变 */
.brand-mark {
  background: var(--accent-grad-v);
  box-shadow: 0 3px 10px rgba(67,160,71,.40), inset 0 1px 0 rgba(255,255,255,.35);
}
/* 导航激活胶囊 + 光条翠绿 */
.nav-item.on {
  background: linear-gradient(135deg, var(--accent-bg), #F0F7F0);
  box-shadow: inset 0 0 0 1px rgba(67,160,71,.22);
}
.nav-item.on::before { background: var(--accent-grad-v); }
/* 侧边栏描边翠绿 */
.sidebar { border-right: 1px solid rgba(67,160,71,.12); }
/* 主按钮翠绿 */
.btn.primary {
  background: var(--accent-grad-v); border-color: transparent;
  box-shadow: 0 2px 10px rgba(67,160,71,.36), inset 0 1px 0 rgba(255,255,255,.38);
}
.btn.primary:hover {
  background: linear-gradient(135deg, #43A047, #2E7D32);
  box-shadow: 0 4px 14px rgba(67,160,71,.46), inset 0 1px 0 rgba(255,255,255,.28);
}
/* 统计卡顶部条翠绿 */
.stat {
  box-shadow: inset 0 3px 0 var(--accent), var(--sh-1);
}
.stat:hover { box-shadow: inset 0 3px 0 var(--accent-3), var(--sh-2); }
/* KPI 数字翠绿渐变 */
.stat-value { background: var(--accent-grad-v); }
.stat-value small { color: var(--accent-2); }
/* 命令框/搜索框/输入聚焦翠绿光晕 */
.cmd-wrap:focus-within, .search-box:focus-within {
  border-color: var(--accent-2);
  box-shadow: 0 0 0 3px var(--accent-bg), 0 2px 10px rgba(67,160,71,.20);
}
.inp:focus, .ta:focus, select.inp:focus {
  border-color: var(--accent-2);
  box-shadow: 0 0 0 3px var(--accent-bg), 0 0 12px rgba(67,160,71,.18);
}
/* 滚动条翠绿 */
.nav::-webkit-scrollbar-thumb,
.view-wrap::-webkit-scrollbar-thumb,
.modal-body::-webkit-scrollbar-thumb { background: linear-gradient(180deg, rgba(67,160,71,.34), rgba(67,160,71,.46)); }
.nav::-webkit-scrollbar-thumb:hover,
.view-wrap::-webkit-scrollbar-thumb:hover { background: linear-gradient(180deg, rgba(67,160,71,.54), rgba(67,160,71,.66)); }
/* 卡片辉光线翠绿 */
.card::before, .stat::before, .focus-item::before, .tbl-wrap::before {
  background: linear-gradient(90deg, transparent, rgba(67,160,71,.34), transparent);
}
/* 卡片 hover 辉光翠绿 */
.card:hover, .stat:hover, .focus-item:hover {
  box-shadow: 0 2px 4px rgba(36,56,44,.06), 0 10px 28px rgba(67,160,71,.16), inset 0 1px 0 rgba(255,255,255,.95), 0 0 0 1px rgba(67,160,71,.12);
}
/* 选中文字翠绿 */
::selection { background: rgba(67,160,71,.24); }
/* 空状态图标翠绿 */
.empty-ico {
  background: linear-gradient(135deg, var(--accent-bg), #F0F7F0);
  box-shadow: inset 0 1px 0 rgba(255,255,255,.9), 0 4px 12px rgba(67,160,71,.16);
}
/* 页面标题左侧翠绿光条 */
.page-title {
  background-image: linear-gradient(90deg, var(--accent) 0 4px, transparent 4px);
}
/* 链接翠绿 */
.link-btn { color: var(--accent); }
.link-btn:hover { color: var(--accent-3); text-shadow: 0 0 8px rgba(67,160,71,.25); }
/* 标签 ok 翠绿 */
.tag.ok { background: var(--ok-bg); color: var(--ok); }
.tag.accent { background: var(--accent-bg-2); color: var(--accent-3); }

/* ============================================================
   V26 调整层 · 薄荷绿
   用户反馈：翠绿 → 薄荷绿（更清凉、更透、带青调）。
   主色 #43A047 → #4DB6AC，橙/蓝/棕点缀与深红紧急不变。
   纯 CSS 覆盖层，删 V26 回 V25；数据 / 功能 / 布局不动。
   ============================================================ */
:root {
  /* 主色：薄荷绿（青绿调，teal 系） */
  --accent:    #4DB6AC;
  --accent-2:  #80CBC4;
  --accent-3:  #00897B;
  --accent-bg: #E0F2F1;
  --accent-bg-2: #B2DFDB;
  --accent-grad: linear-gradient(135deg, #80CBC4 0%, #4DB6AC 100%);
  --accent-grad-v: linear-gradient(135deg, #26A69A 0%, #00897B 100%);
  /* 状态语义色随主色 */
  --ok:        #4DB6AC;       --ok-bg:     #E0F2F1;
  /* 晨光：薄荷绿 */
  --bg-sun: radial-gradient(1200px 520px at 30% -16%, rgba(77,182,172,.13), transparent 62%),
            radial-gradient(900px 440px at 88% -18%, rgba(224,138,60,.08), transparent 55%);
  /* 阴影：薄荷色相 */
  --sh-1: 0 1px 2px rgba(36,56,44,.05), 0 2px 8px rgba(77,182,172,.07), inset 0 1px 0 rgba(255,255,255,.9);
  --sh-2: 0 4px 14px rgba(36,56,44,.07), 0 2px 6px rgba(77,182,172,.09), inset 0 1px 0 rgba(255,255,255,.9);
  --sh-3: 0 12px 32px rgba(36,56,44,.11), 0 4px 12px rgba(77,182,172,.11), inset 0 1px 0 rgba(255,255,255,.9);
}
/* 品牌徽标：薄荷渐变 */
.brand-mark {
  background: var(--accent-grad-v);
  box-shadow: 0 3px 10px rgba(38,166,154,.40), inset 0 1px 0 rgba(255,255,255,.35);
}
/* 导航激活胶囊 + 光条薄荷 */
.nav-item.on {
  background: linear-gradient(135deg, var(--accent-bg), #EFFAF9);
  box-shadow: inset 0 0 0 1px rgba(77,182,172,.22);
}
.nav-item.on::before { background: var(--accent-grad-v); }
/* 侧边栏描边薄荷 */
.sidebar { border-right: 1px solid rgba(77,182,172,.14); }
/* 主按钮薄荷 */
.btn.primary {
  background: var(--accent-grad-v); border-color: transparent;
  box-shadow: 0 2px 10px rgba(38,166,154,.36), inset 0 1px 0 rgba(255,255,255,.38);
}
.btn.primary:hover {
  background: linear-gradient(135deg, #4DB6AC, #00796B);
  box-shadow: 0 4px 14px rgba(38,166,154,.46), inset 0 1px 0 rgba(255,255,255,.28);
}
/* 统计卡顶部条薄荷 */
.stat {
  box-shadow: inset 0 3px 0 var(--accent), var(--sh-1);
}
.stat:hover { box-shadow: inset 0 3px 0 var(--accent-3), var(--sh-2); }
/* KPI 数字薄荷渐变 */
.stat-value { background: var(--accent-grad-v); }
.stat-value small { color: var(--accent-2); }
/* 命令框/搜索框/输入聚焦薄荷光晕 */
.cmd-wrap:focus-within, .search-box:focus-within {
  border-color: var(--accent-2);
  box-shadow: 0 0 0 3px var(--accent-bg), 0 2px 10px rgba(77,182,172,.20);
}
.inp:focus, .ta:focus, select.inp:focus {
  border-color: var(--accent-2);
  box-shadow: 0 0 0 3px var(--accent-bg), 0 0 12px rgba(77,182,172,.18);
}
/* 滚动条薄荷 */
.nav::-webkit-scrollbar-thumb,
.view-wrap::-webkit-scrollbar-thumb,
.modal-body::-webkit-scrollbar-thumb { background: linear-gradient(180deg, rgba(77,182,172,.34), rgba(77,182,172,.46)); }
.nav::-webkit-scrollbar-thumb:hover,
.view-wrap::-webkit-scrollbar-thumb:hover { background: linear-gradient(180deg, rgba(77,182,172,.54), rgba(77,182,172,.66)); }
/* 卡片辉光线薄荷 */
.card::before, .stat::before, .focus-item::before, .tbl-wrap::before {
  background: linear-gradient(90deg, transparent, rgba(77,182,172,.34), transparent);
}
/* 卡片 hover 辉光薄荷 */
.card:hover, .stat:hover, .focus-item:hover {
  box-shadow: 0 2px 4px rgba(36,56,44,.06), 0 10px 28px rgba(77,182,172,.16), inset 0 1px 0 rgba(255,255,255,.95), 0 0 0 1px rgba(77,182,172,.12);
}
/* 选中文字薄荷 */
::selection { background: rgba(77,182,172,.24); }
/* 空状态图标薄荷 */
.empty-ico {
  background: linear-gradient(135deg, var(--accent-bg), #EFFAF9);
  box-shadow: inset 0 1px 0 rgba(255,255,255,.9), 0 4px 12px rgba(77,182,172,.16);
}
/* 页面标题左侧薄荷光条 */
.page-title {
  background-image: linear-gradient(90deg, var(--accent) 0 4px, transparent 4px);
}
/* 链接薄荷 */
.link-btn { color: var(--accent); }
.link-btn:hover { color: var(--accent-3); text-shadow: 0 0 8px rgba(77,182,172,.25); }
/* 标签 ok 薄荷 */
.tag.ok { background: var(--ok-bg); color: var(--ok); }
.tag.accent { background: var(--accent-bg-2); color: var(--accent-3); }

/* ============================================================
   V27 调整层 · 苹方字体嵌入
   用户提供 PingFang Regular/Medium TTF → 通过 @font-face 嵌入
   工作台 fonts/ 目录，云端/手机访问也会加载苹方（不依赖本机安装）。
   字体族名 PingFang SC（与 name 表一致），Regular=400、Medium=500/600。
   纯 CSS 覆盖层，删 V27 回 V26；数据 / 功能 / 布局不动。
   ============================================================ */
/* 苹方字体嵌入（相对路径，部署时 fonts/ 随 dist 上传） */
@font-face {
  font-family: 'PingFang SC';
  src: url('fonts/PingFang Regular.ttf') format('truetype');
  font-weight: 400;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: 'PingFang SC';
  src: url('fonts/PingFang Medium.ttf') format('truetype');
  font-weight: 500;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: 'PingFang SC';
  src: url('fonts/PingFang Medium.ttf') format('truetype');
  font-weight: 600;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: 'PingFang SC';
  src: url('fonts/PingFang Regular.ttf') format('truetype');
  font-weight: 700;
  font-style: normal;
  font-display: swap;
}
/* 字体栈：苹方提到最前（本机/云端均优先苹方） */
body {
  font-family:
    "PingFang SC",
    "SF Pro Display", "SF Pro Text",
    -apple-system, BlinkMacSystemFont,
    "Helvetica Neue",
    "Microsoft YaHei",
    "Segoe UI", "Noto Sans SC", Arial, sans-serif;
}
/* 中文标题：苹方优先 */
.section-title, .page-title, .modal-title {
  font-family: "PingFang SC", "SF Pro Display", "Helvetica Neue", sans-serif;
}
/* 品牌名苹方 */
.brand-name { font-family: "PingFang SC", "SF Pro Display", sans-serif; }

/* ============================================================
   V28 调整层 · 色卡四色 + 方正悠黑字体
   色卡（用户小红书配色）：
     主绿 SPROUT  #89A411 · 鲜亮草绿
     橙 MANDARIN  #F58E3C · 鲜橙（点缀行动）
     蓝 SLATE-INDIGO #6B7BB4 · 蓝紫（点缀信息）
     浅奶 TULIP CREAM #FDEBD3 · 暖奶油（底色高光）
   字体：方正可变悠黑简（FZVariable-YouHeiS，变体字体）。
   纯 CSS 覆盖层，删 V28 回 V27；数据 / 功能 / 布局不动。
   ============================================================ */
@font-face {
  font-family: 'FZVariable-YouHeiS';
  src: url('fonts/FZVariable-YouHeiJ.TTF') format('truetype-variations'),
       url('fonts/FZVariable-YouHeiJ.TTF') format('truetype');
  font-weight: 100 900;
  font-style: normal;
  font-display: swap;
}
:root {
  /* 主色：SPROUT 草绿 */
  --accent:    #89A411;
  --accent-2:  #A8C038;
  --accent-3:  #5C720C;
  --accent-bg: #EFF4D5;
  --accent-bg-2: #DDEAB0;
  --accent-grad: linear-gradient(135deg, #A8C038 0%, #89A411 100%);
  --accent-grad-v: linear-gradient(135deg, #A0BB24 0%, #6B8210 100%);
  /* 点缀：橙 MANDARIN */
  --orange:    #F58E3C;
  --orange-2:  #F8A663;
  --orange-bg: #FEE9D9;
  --orange-bg-2: #FCD9B5;
  /* 点缀：蓝紫 SLATE-INDIGO */
  --blue:      #6B7BB4;
  --blue-2:    #8B9BCF;
  --blue-bg:   #EBF0F7;
  /* 点缀：浅奶 TULIP CREAM（高光底色） */
  --cream:     #FDEBD3;
  --cream-bg:  #FFF7EC;
  --cream-bg-2: #FDE2C0;
  /* 徽标：橙渐变（点缀行动点） */
  --gold:      #F58E3C;
  --gold-2:    #F8A663;
  --gold-bg:   #FEE9D9;
  --gold-bg-2: #FCD9B5;
  --gold-grad: linear-gradient(135deg, #F8A663 0%, #F58E3C 100%);
  /* 页面底：米白带浅奶调 */
  --bg:        #FCF6E8;
  --surface:   #FFFFFF;
  --surface-2: #FDFAF0;
  --surface-3: #F4ECDA;
  --border:    #EBE3D0;
  --border-2:  #DDD0B4;
  /* 文字：暖深棕 */
  --text:      #2C2620;
  --text-2:    #5A5246;
  --text-3:    #94897A;
  /* 状态语义色 */
  --ok:        #89A411;       --ok-bg:     #EFF4D5;
  --info:      #6B7BB4;       --info-bg:   #EBF0F7;
  --warn:      #F58E3C;       --warn-bg:   #FEE9D9;
  --danger:    #B0453A;       --danger-bg: #FAEBE8;
  /* 晨光：草绿调 */
  --bg-sun: radial-gradient(1200px 520px at 30% -16%, rgba(137,164,17,.12), transparent 62%),
            radial-gradient(900px 440px at 88% -18%, rgba(245,142,60,.08), transparent 55%);
  --grid-line: transparent;
  /* 玻璃 */
  --glass: rgba(255,255,255,.82);
  --glass-strong: rgba(255,255,255,.92);
  --glass-border: rgba(137,164,17,.14);
  /* 圆角维持 */
  --r-s: 10px; --r-m: 14px; --r-l: 18px; --r-xl: 22px;
  /* 阴影：草绿色相 */
  --sh-1: 0 1px 2px rgba(92,114,12,.05), 0 2px 8px rgba(137,164,17,.07), inset 0 1px 0 rgba(255,255,255,.9);
  --sh-2: 0 4px 14px rgba(92,114,12,.07), 0 2px 6px rgba(137,164,17,.09), inset 0 1px 0 rgba(255,255,255,.9);
  --sh-3: 0 12px 32px rgba(92,114,12,.11), 0 4px 12px rgba(137,164,17,.11), inset 0 1px 0 rgba(255,255,255,.9);
}
/* 字体栈：方正悠黑 → PingFang → SF Pro → 系统 */
body {
  font-family:
    "FZVariable-YouHeiS", "FZYouHei", "FZYH",
    "PingFang SC",
    "SF Pro Display", "SF Pro Text",
    -apple-system, BlinkMacSystemFont,
    "Microsoft YaHei", "Segoe UI", "Noto Sans SC", Arial, sans-serif;
}
/* 品牌名/标题：方正悠黑优先 */
.brand-name, .section-title, .page-title, .modal-title, .empty-ico {
  font-family: "FZVariable-YouHeiS", "PingFang SC", "Helvetica Neue", sans-serif;
}
/* 品牌徽标：草绿渐变 */
.brand-mark {
  background: var(--accent-grad-v);
  box-shadow: 0 3px 10px rgba(137,164,17,.42), inset 0 1px 0 rgba(255,255,255,.32);
}
/* 导航激活：淡草绿胶囊 + 左侧光条 */
.nav-item.on {
  background: linear-gradient(135deg, var(--accent-bg), #F4F8DC);
  box-shadow: inset 0 0 0 1px rgba(137,164,17,.22);
}
.nav-item.on::before { background: var(--accent-grad-v); }
/* 侧边栏描边 */
.sidebar { border-right: 1px solid rgba(137,164,17,.12); }
/* 主按钮：草绿渐变 */
.btn.primary {
  background: var(--accent-grad-v); border-color: transparent;
  box-shadow: 0 2px 10px rgba(137,164,17,.36), inset 0 1px 0 rgba(255,255,255,.32);
}
.btn.primary:hover {
  background: linear-gradient(135deg, #89A411, #5C720C);
  box-shadow: 0 4px 14px rgba(137,164,17,.46), inset 0 1px 0 rgba(255,255,255,.22);
}
/* 统计卡顶部条草绿 */
.stat { box-shadow: inset 0 3px 0 var(--accent), var(--sh-1); }
.stat:hover { box-shadow: inset 0 3px 0 var(--accent-3), var(--sh-2); }
/* KPI 数字草绿渐变 */
.stat-value { background: var(--accent-grad-v); }
.stat-value small { color: var(--accent-2); }
/* 命令框/搜索框/输入聚焦草绿光晕 */
.cmd-wrap:focus-within, .search-box:focus-within {
  border-color: var(--accent-2);
  box-shadow: 0 0 0 3px var(--accent-bg), 0 2px 10px rgba(137,164,17,.20);
}
.inp:focus, .ta:focus, select.inp:focus {
  border-color: var(--accent-2);
  box-shadow: 0 0 0 3px var(--accent-bg), 0 0 12px rgba(137,164,17,.18);
}
/* 滚动条草绿 */
.nav::-webkit-scrollbar-thumb,
.view-wrap::-webkit-scrollbar-thumb,
.modal-body::-webkit-scrollbar-thumb { background: linear-gradient(180deg, rgba(137,164,17,.34), rgba(137,164,17,.46)); }
.nav::-webkit-scrollbar-thumb:hover,
.view-wrap::-webkit-scrollbar-thumb:hover { background: linear-gradient(180deg, rgba(137,164,17,.54), rgba(137,164,17,.66)); }
/* 卡片辉光线 */
.card::before, .stat::before, .focus-item::before, .tbl-wrap::before {
  background: linear-gradient(90deg, transparent, rgba(137,164,17,.34), transparent);
}
/* 卡片 hover */
.card:hover, .stat:hover, .focus-item:hover {
  box-shadow: 0 2px 4px rgba(92,114,12,.06), 0 10px 28px rgba(137,164,17,.16), inset 0 1px 0 rgba(255,255,255,.95), 0 0 0 1px rgba(137,164,17,.12);
}
/* 选中 */
::selection { background: rgba(137,164,17,.24); }
/* 空状态 */
.empty-ico {
  background: linear-gradient(135deg, var(--accent-bg), #F4F8DC);
  box-shadow: inset 0 1px 0 rgba(255,255,255,.9), 0 4px 12px rgba(137,164,17,.16);
}
/* 页面标题左侧草绿光条 */
.page-title { background-image: linear-gradient(90deg, var(--accent) 0 4px, transparent 4px); }
/* 链接 */
.link-btn { color: var(--accent); }
.link-btn:hover { color: var(--accent-3); text-shadow: 0 0 8px rgba(137,164,17,.25); }
/* 状态标签语义色：ok 草绿，info 蓝紫，warn 橙，gold/seed-gold 棕橙，accent 绿 */
.tag.ok { background: var(--ok-bg); color: var(--ok); }
.tag.info { background: var(--info-bg); color: var(--info); }
.tag.accent { background: var(--accent-bg-2); color: var(--accent-3); }
.tag.gold, .tag.seed-gold { background: var(--orange-bg); color: #B05616; }
.tag.warn { background: var(--warn-bg); color: var(--warn); }
.tag.danger { background: var(--danger-bg); color: var(--danger); }

/* ============================================================
   V29 调整层 · 主绿改柔和橄榄绿（莫兰迪调）
   用户反馈 V28 SPROUT 鲜亮草绿偏艳 → 改成柔和灰橄榄绿。
   只调主色族（accent / accent-bg / 阴影 / ok），橙/蓝/奶/字体不动。
   纯 CSS 覆盖层，删 V29 回 V28；数据 / 功能 / 布局不动。
   ============================================================ */
:root {
  /* 主色：柔和橄榄绿（莫兰迪） */
  --accent:    #7A9968;
  --accent-2:  #93B281;
  --accent-3:  #5A7A48;
  --accent-bg: #ECF0E0;
  --accent-bg-2: #D6E2C5;
  --accent-grad: linear-gradient(135deg, #93B281 0%, #7A9968 100%);
  --accent-grad-v: linear-gradient(135deg, #87A874 0%, #5A7A48 100%);
  /* 状态语义：ok 跟随主色 */
  --ok:        #7A9968;       --ok-bg:     #ECF0E0;
  /* 晨光：柔和橄榄 */
  --bg-sun: radial-gradient(1200px 520px at 30% -16%, rgba(122,153,104,.10), transparent 62%),
            radial-gradient(900px 440px at 88% -18%, rgba(245,142,60,.08), transparent 55%);
  /* 玻璃描边：橄榄 */
  --glass-border: rgba(122,153,104,.14);
  /* 阴影：橄榄色相（更柔更冷） */
  --sh-1: 0 1px 2px rgba(92,114,12,.04), 0 2px 8px rgba(122,153,104,.06), inset 0 1px 0 rgba(255,255,255,.9);
  --sh-2: 0 4px 14px rgba(92,114,12,.06), 0 2px 6px rgba(122,153,104,.08), inset 0 1px 0 rgba(255,255,255,.9);
  --sh-3: 0 12px 32px rgba(92,114,12,.10), 0 4px 12px rgba(122,153,104,.10), inset 0 1px 0 rgba(255,255,255,.9);
}
/* 品牌徽标：橄榄渐变 */
.brand-mark {
  background: var(--accent-grad-v);
  box-shadow: 0 3px 10px rgba(122,153,104,.38), inset 0 1px 0 rgba(255,255,255,.32);
}
/* 导航激活：淡橄榄胶囊 + 光条 */
.nav-item.on {
  background: linear-gradient(135deg, var(--accent-bg), #F0F4E6);
  box-shadow: inset 0 0 0 1px rgba(122,153,104,.20);
}
.nav-item.on::before { background: var(--accent-grad-v); }
/* 侧边栏描边 */
.sidebar { border-right: 1px solid rgba(122,153,104,.12); }
/* 主按钮：橄榄渐变 */
.btn.primary {
  background: var(--accent-grad-v); border-color: transparent;
  box-shadow: 0 2px 10px rgba(122,153,104,.32), inset 0 1px 0 rgba(255,255,255,.32);
}
.btn.primary:hover {
  background: linear-gradient(135deg, #7A9968, #4D6B3C);
  box-shadow: 0 4px 14px rgba(122,153,104,.42), inset 0 1px 0 rgba(255,255,255,.22);
}
/* 统计卡顶部条 */
.stat { box-shadow: inset 0 3px 0 var(--accent), var(--sh-1); }
.stat:hover { box-shadow: inset 0 3px 0 var(--accent-3), var(--sh-2); }
/* KPI 数字橄榄渐变 */
.stat-value { background: var(--accent-grad-v); }
.stat-value small { color: var(--accent-2); }
/* 命令框/搜索框/输入聚焦橄榄光晕 */
.cmd-wrap:focus-within, .search-box:focus-within {
  border-color: var(--accent-2);
  box-shadow: 0 0 0 3px var(--accent-bg), 0 2px 10px rgba(122,153,104,.18);
}
.inp:focus, .ta:focus, select.inp:focus {
  border-color: var(--accent-2);
  box-shadow: 0 0 0 3px var(--accent-bg), 0 0 12px rgba(122,153,104,.16);
}
/* 滚动条 */
.nav::-webkit-scrollbar-thumb,
.view-wrap::-webkit-scrollbar-thumb,
.modal-body::-webkit-scrollbar-thumb { background: linear-gradient(180deg, rgba(122,153,104,.30), rgba(122,153,104,.42)); }
.nav::-webkit-scrollbar-thumb:hover,
.view-wrap::-webkit-scrollbar-thumb:hover { background: linear-gradient(180deg, rgba(122,153,104,.50), rgba(122,153,104,.62)); }
/* 卡片辉光线 */
.card::before, .stat::before, .focus-item::before, .tbl-wrap::before {
  background: linear-gradient(90deg, transparent, rgba(122,153,104,.30), transparent);
}
/* 卡片 hover */
.card:hover, .stat:hover, .focus-item:hover {
  box-shadow: 0 2px 4px rgba(92,114,12,.05), 0 10px 28px rgba(122,153,104,.14), inset 0 1px 0 rgba(255,255,255,.95), 0 0 0 1px rgba(122,153,104,.10);
}
/* 选中 */
::selection { background: rgba(122,153,104,.22); }
/* 空状态 */
.empty-ico {
  background: linear-gradient(135deg, var(--accent-bg), #F0F4E6);
  box-shadow: inset 0 1px 0 rgba(255,255,255,.9), 0 4px 12px rgba(122,153,104,.14);
}
/* 页面标题左侧光条 */
.page-title { background-image: linear-gradient(90deg, var(--accent) 0 4px, transparent 4px); }
/* 链接 */
.link-btn { color: var(--accent); }
.link-btn:hover { color: var(--accent-3); text-shadow: 0 0 8px rgba(122,153,104,.24); }
/* 标签语义 */
.tag.ok { background: var(--ok-bg); color: var(--ok); }
.tag.accent { background: var(--accent-bg-2); color: var(--accent-3); }

/* ============================================================
   V30 修复层 · stat 卡片"条条"bug
   两个问题：
     ① .stat 顶部 3px inset box-shadow 装饰条多余（V22 加）
     ② .stat-value 用 background-clip:text + color:transparent
        渐变填充，浏览器不支持/解析失败时背景溢出显示为绿色矩形
        条 + 数字不可见 → 用户看到"条条"但格子数字没颜色
   修复：去掉顶部 3px 装饰条；stat-value 改回纯 color 显示
   （用 V17 原始方案），不再依赖 background-clip:text 兼容性。
   数据 / 功能 / 布局不动。
   ============================================================ */
/* 去掉 .stat 顶部 3px inset 装饰条（V22 加入） */
.stat {
  box-shadow: var(--sh-1);
}
.stat:hover {
  box-shadow: var(--sh-2);
}
/* 去掉 .stat::before 顶部 1px 辉光线（V22 加入） */
.card::before, .focus-item::before, .tbl-wrap::before { }
/* .stat::before 也清掉（避免顶部还有 1px 残留） */
.stat::before { display: none !important; }
/* stat-value 改回纯色数字（V17 风格），不用 background-clip:text */
.stat-value {
  background: none;
  -webkit-background-clip: initial;
  background-clip: initial;
  color: var(--accent);
  font-variant-numeric: tabular-nums;
  font-weight: 600;
  letter-spacing: -.5px;
  font-size: 22px;
  line-height: 1.1;
}
.stat-value small {
  color: var(--accent-2);
  font-size: 11.5px;
  font-weight: 600;
  margin-left: 3px;
  font-weight: 500;
  letter-spacing: 0;
}

/* ============================================================
   V31 调整层 · 底色去黄 + Booo CHU 字号加大 + AI 对话/卡片不贴边
   用户反馈：
     ① 底色 #FCF6E8 带奶黄调有点刺眼 → 改成更浅更中性的米白
     ② Booo CHU 字体加大加粗
     ③ AI 对话等卡片贴住主区边缘不雅观 → 加大 view-wrap 左右
        padding + 给 .card 设最大宽度（避免大屏卡片过宽）
   纯 CSS 覆盖层，删 V31 回 V30；数据 / 功能 / 布局不动。
   ============================================================ */
:root {
  /* 底色：去黄减淡，更中性的浅暖米白（去掉 TULIP CREAM 偏黄调） */
  --bg:        #F7F6F0;
  --surface-3: #EFEBDF;
  --border:    #E5E1D6;
  --border-2:  #D8D2C2;
}
/* Booo CHU 字号加大加粗 */
.brand-name { font-size: 18px; font-weight: 800; letter-spacing: .6px; }
.brand-sub  { font-size: 11.5px; }
/* 主区左右 padding 加大：避免卡片贴边 */
.view-wrap { padding: 24px 36px 48px; }
/* 卡片最大宽度限制：避免大屏拉伸到边缘过宽不雅 */
.card, .stat, .tbl-wrap, .ai-body { max-width: 1180px; }
/* stat-grid / card-grid 容器：左对齐，宽度受限 */
.stat-grid, .card-grid { max-width: 1180px; }
/* AI 对话区：内部 padding 加大让对话栏不贴卡边缘 */
.ai-body { padding: 18px 20px; }
.ai-ta   { padding: 12px 14px; }
.ai-bub  { max-width: 76%; padding: 10px 14px; }
/* 卡片 footer/header 加左右 padding 让内容不贴边 */
.card-hd, .card-pad { padding-left: 22px; padding-right: 22px; }
/* 响应式：移动端保留紧凑 padding */
@media (max-width: 900px) {
  .view-wrap { padding: 20px 18px 96px; }
}
@media (max-width: 600px) {
  .view-wrap { padding: 14px 14px 96px; }
}

/* ============================================================
   V32 调整层 · AI 对话卡片缩小 + Booo CHU 描边加粗
   用户反馈 3 件事：
     ① AI 对话卡片缩小（高度 + 宽度都更紧凑）
     ② AI 对话输入框「打字打到一半就消失」（app.js render 加 textarea 同步保护，见 app.js 修改）
     ③ Booo CHU 字体希望跟「包」字一样粗 → -webkit-text-stroke 描边让英文视觉加粗
   纯 CSS 覆盖层 + app.js 修 bug；删 V32 回 V31；数据/功能不动
   ============================================================ */
/* AI 对话卡片：保留外框撑宽（继承 .card 的 1180px max-width），
   让内框（ai-body / 输入框）单独更窄居中，跟外框留出明显间距
   —— 用户偏好：外框保留可，内框缩起来好。 */
.ai-card { max-width: 1180px; margin: 0 auto; }
/* AI 对话区：内部对话区比卡片更窄（880px 居中），跟外框左右各留 ~150px 边距 */
.ai-body {
  height: 32vh; min-height: 200px; max-height: 460px;
  max-width: 880px;
  margin-left: auto; margin-right: auto;
}
/* AI 待办确认区 + 输入框 + 底部：同步居中缩进，与对话气泡视觉对齐 */
.ai-pend, .ai-input, .ai-foot {
  max-width: 880px;
  margin-left: auto; margin-right: auto;
}
.ai-foot { padding-left: 4px; padding-right: 4px; }
/* AI 气泡 max-width 64% 在窄对话区内仍合适，无需再改 */
/* AI 气泡 max-width 64% 在窄对话区内仍合适，无需再改 */
.ai-bub { max-width: 64%; padding: 10px 14px; }
/* AI 输入框 padding 微调 */
.ai-ta { min-height: 52px; padding: 10px 12px; }
/* Booo CHU 加 -webkit-text-stroke 让英文视觉加粗，与中文「包」字字形匹配 */
.brand-name {
  font-weight: 800;
  -webkit-text-stroke: 0.5px var(--text);
  letter-spacing: .4px;
}
/* V32.2 行距调整：用户反馈整体偏紧
   body 正文 1.5 → 1.65；AI 对话气泡 1.65 → 1.85（对话更舒展）；
   卡片/列表内的正文同步宽松 0.05；空描述页增加 breathing room */
body { line-height: 1.62; }
.card-pad, .ai-bub, .empty, .ai-empty-s, .page-desc, .ai-foot { line-height: 1.7; }
.ai-bub { line-height: 1.85; }
.ai-empty { padding: 56px 24px; }
.ai-empty-s { line-height: 1.95; }

/* ============================================================
   V35 调整层 · 全站字体统一为「阿里巴巴普惠体」
   用户指定：网址字体统一更换为阿里巴巴普惠体（免费商用）。
   - 本地 woff2：GB2312 全字集 6763 字 + ASCII + 全角标点（去 hinting 压缩）
   - Regular 937KB / Medium 948KB / Bold 961KB（共 ~2.8MB）
   - font-display: swap —— 加载期间先用系统字体显示，不阻塞首屏、不白屏
   - 字体文件：fonts/AlibabaPuHuiTi-{Regular,Medium,Bold}.woff2（三副本同步）
   纯 CSS 覆盖层，删 V35 回 V34；数据 / 功能 / 布局不动。
   ============================================================ */
@font-face {
  font-family: "Alibaba PuHuiTi";
  src: url("fonts/AlibabaPuHuiTi-Regular.woff2") format("woff2");
  font-weight: 400; font-style: normal; font-display: swap;
}
@font-face {
  font-family: "Alibaba PuHuiTi";
  src: url("fonts/AlibabaPuHuiTi-Medium.woff2") format("woff2");
  font-weight: 500; font-style: normal; font-display: swap;
}
@font-face {
  font-family: "Alibaba PuHuiTi";
  src: url("fonts/AlibabaPuHuiTi-Bold.woff2") format("woff2");
  font-weight: 700; font-style: normal; font-display: swap;
}
body, .section-title, .page-title, .modal-title, .brand-name {
  font-family: "Alibaba PuHuiTi", "PingFang SC", "SF Pro Display", "SF Pro Text",
    -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Microsoft YaHei",
    "Segoe UI", "Noto Sans SC", Arial, sans-serif;
}

/* ============================================================
   V36 调整层 · 字体切换为「方正悠黑简体 509R」（看效果用）
   用户指定：换成方正悠黑简体 509R 看看效果。
   - 由本地 FZVariable-YouHeiJ.TTF（可变悠黑简 wght150-700）实例化 wght=509
     得到 509R 等效静态字重，再 GB2312 子集化转 woff2（886KB）
   - 全站字体栈首位换 FZ YouHeiS；400/500/700 均指向 509R（粗细统一）
   - 阿里普惠体保留为第二顺位，删 V36 即回 V35（普惠体）
   纯 CSS 覆盖层，删 V36 回 V35；数据 / 功能 / 布局不动。
   ============================================================ */
@font-face {
  font-family: "FZ YouHeiS";
  src: url("fonts/FZYouHeiS-509R.woff2") format("woff2");
  font-weight: 400; font-style: normal; font-display: swap;
}
@font-face {
  font-family: "FZ YouHeiS";
  src: url("fonts/FZYouHeiS-509R.woff2") format("woff2");
  font-weight: 500; font-style: normal; font-display: swap;
}
@font-face {
  font-family: "FZ YouHeiS";
  src: url("fonts/FZYouHeiS-509R.woff2") format("woff2");
  font-weight: 700; font-style: normal; font-display: swap;
}
body, .section-title, .page-title, .modal-title, .brand-name {
  font-family: "FZ YouHeiS", "Alibaba PuHuiTi", "PingFang SC", "SF Pro Display",
    "SF Pro Text", -apple-system, BlinkMacSystemFont, "Helvetica Neue",
    "Microsoft YaHei", "Segoe UI", "Noto Sans SC", Arial, sans-serif;
}

/* ============================================================
   V37 调整层 · 方正可变悠黑简 三个固定字重（Normal/Regular/SemiBold）
   阿包截图指定三个字重——从本地 FZVariable-YouHeiJ.TTF 实例化 wght=200/400/600
   转 GB2312 子集 woff2（每个 ~1.7MB，font-display swap 不阻塞首屏）。
   命名：方正命名约定 Normal≈200 细、Regular=400 常规、SemiBold=600 半粗。
   纯 CSS 覆盖层，删 V37 回 V36（509R 单字重）或 V35（普惠体）；
   数据 / 功能 / 布局不动。
   ============================================================ */
@font-face {
  font-family: "FZ YouHeiS";
  src: url("fonts/FZYouHeiS-Normal.woff2") format("woff2");
  font-weight: 200; font-style: normal; font-display: swap;
}
@font-face {
  font-family: "FZ YouHeiS";
  src: url("fonts/FZYouHeiS-Regular.woff2") format("woff2");
  font-weight: 400; font-style: normal; font-display: swap;
}
@font-face {
  font-family: "FZ YouHeiS";
  src: url("fonts/FZYouHeiS-SemiBold.woff2") format("woff2");
  font-weight: 600; font-style: normal; font-display: swap;
}
body, .section-title, .page-title, .modal-title, .brand-name {
  font-family: "FZ YouHeiS", "Alibaba PuHuiTi", "PingFang SC", "SF Pro Display",
    "SF Pro Text", -apple-system, BlinkMacSystemFont, "Helvetica Neue",
    "Microsoft YaHei", "Segoe UI", "Noto Sans SC", Arial, sans-serif;
}

/* ============================================================
   V38 调整层 · 统计数字加粗 + 0 去斜杠
   阿包反馈：① 卡片里的数字可以更粗一点；② 数字 0 不要带斜杠（方正悠黑的 0
   是 slashed-zero 设计）。
   解法：.stat-value / .stat-value small / .legend-count 单独指定西文数字字体栈，
   让 0-9 优先走 SF Pro / Segoe UI / Arial（0 为普通椭圆、字重更粗）；
   中文单位（"家"/"个"/"条"）因西文字体无中文而自动回退到 FZ YouHeiS，
   保持中文统一；同时启用 tabular-nums 让数字等宽更整齐。
   纯 CSS 覆盖层，删 V38 回 V37；数据 / 功能 / 布局不动。
   ============================================================ */
.stat-value,
.stat-value small,
.legend-count {
  font-family: "SF Pro Display", "SF Pro Text", "Segoe UI", "Helvetica Neue",
    Arial, "FZ YouHeiS", "Alibaba PuHuiTi", "PingFang SC", "Microsoft YaHei",
    -apple-system, BlinkMacSystemFont, "Noto Sans SC", sans-serif;
  font-variant-numeric: tabular-nums;
}
.stat-value { font-weight: 800; }
.stat-value small { font-weight: 600; }

/* ============================================================
   V43 调整层 · 照片链接卡片可选封面底图
   阿包反馈：想从活动照片链接里选一张大景图，淡淡铺在卡片底部。
   解法：给 photo 数据增加可选 cover 字段（图片直链）；卡片有 cover 时
   用 background-image 铺底，opacity 0.12 并叠加从底部向上的白色渐变遮罩，
   确保文字清晰可读；无 cover 时保持原样式。
   纯 CSS 覆盖层，删 V43 回 V38；数据 / 功能 / 布局不动。
   ============================================================ */
.photo-card {
  min-height: 150px;
  position: relative;
  isolation: isolate;
  cursor: pointer;
}
.photo-card-bg {
  position: absolute;
  inset: 0;
  z-index: -2;
  background-size: cover;
  background-position: center;
  border-radius: var(--r-m);
  opacity: .14;
}
.photo-card-bg::after {
  content: '';
  position: absolute;
  inset: 0;
  border-radius: var(--r-m);
  background: linear-gradient(
    to top,
    rgba(255, 255, 255, .92) 0%,
    rgba(255, 255, 255, .72) 45%,
    rgba(255, 255, 255, .55) 100%
  );
}
.photo-card > *:not(.photo-card-bg) {
  position: relative;
  z-index: 1;
}
.photo-card:hover .photo-card-bg {
  opacity: .22;
}

/* ============================================================
   V44 调整层 · 旅行足迹去掉地图，改为左侧时间轴 + 右侧省份卡片
   阿包反馈：① 不要地图；② 左侧时间轴；③ 右侧全部省份卡片，每个省份一个卡片，
   记录的城市对应到卡片里；④ 照常可在每个城市做详细记录。
   解法：renderTravelMap 改为 renderTravelFootprints，左侧按年分组时间轴，
   右侧按省份聚合卡片，点击城市标签在右侧下方展开该城市所有记录详情。
   纯 CSS 覆盖层，删 V44 回 V43；数据 / 功能 / 布局（除旅行地图外）不动。
   ============================================================ */
.travel-footprint-root {
  display: flex;
  gap: 16px;
  align-items: flex-start;
}
.travel-timeline {
  flex: 0 0 260px;
  max-height: calc(100vh - 180px);
  overflow-y: auto;
  padding-right: 4px;
}
.travel-right {
  flex: 1 1 0;
  min-width: 0;
}
.travel-year-group { margin-bottom: 16px; }
.travel-year-label {
  font-size: 13px;
  font-weight: 700;
  color: var(--accent-3);
  margin-bottom: 8px;
  padding-left: 8px;
  border-left: 3px solid var(--accent);
}
.travel-timeline-items { position: relative; padding-left: 20px; }
.travel-timeline-items::before {
  content: '';
  position: absolute;
  left: 5px;
  top: 4px;
  bottom: 4px;
  width: 2px;
  background: var(--border);
  border-radius: 1px;
}
.travel-timeline-item {
  position: relative;
  padding: 7px 0;
  cursor: pointer;
  border-radius: var(--r-s);
  transition: background .12s;
}
.travel-timeline-item:hover { background: var(--surface-2); }
.travel-timeline-dot {
  position: absolute;
  left: -17px;
  top: 12px;
  width: 10px;
  height: 10px;
  border-radius: 50%;
  background: var(--accent);
  border: 2px solid var(--surface);
  box-shadow: 0 0 0 1px var(--border);
}
.travel-timeline-city { font-size: 13px; font-weight: 600; color: var(--text); }
.travel-timeline-date { font-size: 11px; color: var(--text-3); margin-top: 1px; }
.travel-province-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(170px, 1fr));
  gap: 12px;
}
.travel-province-card {
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--r-m);
  padding: 12px;
  box-shadow: var(--sh-1);
}
.travel-province-name {
  font-size: 14px;
  font-weight: 700;
  color: var(--text);
  margin-bottom: 8px;
}
.travel-province-cities { display: flex; flex-wrap: wrap; gap: 6px; }
.city-tag {
  display: inline-block;
  padding: 3px 9px;
  background: var(--accent-bg);
  color: var(--accent-3);
  border-radius: 999px;
  font-size: 12px;
  cursor: pointer;
  transition: background .12s, color .12s;
}
.city-tag:hover { background: var(--accent-bg-2); }
.city-tag.on { background: var(--accent); color: #fff; }

.travel-detail-card .travel-place-card {
  padding: 10px 12px;
  gap: 6px;
}
.travel-detail-card .travel-card-city { font-size: 14px; }
.travel-detail-card .travel-card-imgs { gap: 6px; }
.travel-detail-card .travel-card-img {
  width: 64px;
  height: 64px;
}

@media (max-width: 768px) {
  .travel-footprint-root { flex-direction: column; }
  .travel-timeline {
    flex: 1 1 auto;
    width: 100%;
    max-height: none;
  }
  .travel-province-grid { grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); }
}

/* ============================================================
   V45 调整层 · 新增「文学笔记」板块 + 去掉左侧「小宇宙播客」导航
   阿包反馈：① 小宇宙播客入口作用不大，改到习惯打卡里；② 新增文学笔记板块，
   每天自动推送 6 条名家读书/经典语录，可收藏，不合适次日自动替换。
   解法：DEFAULT_NAV 删除 podcasts；checkins 默认加「小宇宙」；新增
   literaryNotes 数据 / renderLiteraryNotes 视图 / 自动导入逻辑 / 样式。
   纯 CSS 覆盖层，删 V45 回 V44；数据 / 功能 / 布局不动。
   ============================================================ */
.ln-section { margin-top: 16px; }
.ln-list { display: flex; flex-direction: column; gap: 10px; margin-top: 10px; }
.ln-card {
  display: flex;
  align-items: flex-start;
  gap: 10px;
  padding: 12px 14px;
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--r-m);
  box-shadow: var(--sh-1);
}
.ln-card.is-saved { border-left: 3px solid var(--accent); }
.ln-card-main { flex: 1 1 0; min-width: 0; }
.ln-text {
  font-size: 14px;
  line-height: 1.7;
  color: var(--text);
  white-space: pre-wrap;
}
.ln-meta {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px;
  margin-top: 8px;
  font-size: 12px;
}
.ln-author { font-weight: 600; color: var(--text-2); }
.ln-source { color: var(--text-3); }
.ln-tag {
  display: inline-block;
  padding: 2px 7px;
  background: var(--accent-bg);
  color: var(--accent-3);
  border-radius: 999px;
  font-size: 11px;
}
.ln-acts {
  display: flex;
  align-items: center;
  gap: 6px;
  flex-shrink: 0;
}
.ln-star {
  width: 28px;
  height: 28px;
  border-radius: 50%;
  border: 1px solid var(--border);
  background: var(--surface-2);
  color: var(--text-3);
  font-size: 15px;
  line-height: 1;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  justify-content: center;
}
.ln-star:hover { background: var(--accent-bg); }
.ln-star.is-on { background: var(--accent); border-color: var(--accent); color: #fff; }

/* ==================== V46 · 运营协议指标「下一步」列 ==================== */
/* 指标表新增「下一步」列（位于完成情况与状态之间）：
   空值显示「＋ 填写」占位，点击单元格弹小窗快速填写推进动作。 */
.kpi-next-cell {
  line-height: 1.6;
  word-break: break-word;
  white-space: pre-line;
  border-radius: 8px;
  transition: background .15s ease;
}
.kpi-next-cell:hover { background: var(--accent-bg); }
.kpi-table .kpi-next-cell { padding-top: 10px; padding-bottom: 10px; }

/* ==================== V48 · 企业库分页 ==================== */
/* 1073 家企业全量渲染会生成约 1.1MB DOM，手机端明显卡顿；
   改为每页 100 条 + 底部分页条，与 V23 视觉保持一致（控件弱化、不抢重点）。 */
.ent-pager {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  margin-top: 14px;
  padding: 4px 0 2px;
  flex-wrap: wrap;
}
.pg-btn {
  min-width: 34px;
  height: 30px;
  padding: 0 10px;
  border: 1px solid var(--border);
  background: var(--surface);
  color: var(--text-2);
  border-radius: 8px;
  font-size: 12.5px;
  cursor: pointer;
  transition: background .15s ease, color .15s ease;
}
.pg-btn:hover:not(:disabled) { background: var(--accent-bg); color: var(--accent); }
.pg-btn:disabled { opacity: .38; cursor: default; }
.pg-info {
  font-size: 12.5px;
  color: var(--text-3);
  padding: 0 8px;
}
.pg-info b { color: var(--text); font-weight: 700; }
@media (max-width: 640px) {
  .pg-btn { min-width: 30px; height: 28px; padding: 0 8px; font-size: 12px; }
}

/* ==================== V49 · 文学笔记双列 + 日报周报周末看周报 ==================== */
/* 文学笔记 6 条竖排太长，改为桌面端双列；卡片改为垂直堆叠（文字 + 底部操作），
   避免窄列里操作按钮挤占正文空间。 */
.ln-list {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 10px;
}
.ln-card {
  flex-direction: column;
  gap: 8px;
  padding: 10px 12px;
}
.ln-acts {
  justify-content: flex-end;
  width: 100%;
}
@media (max-width: 680px) {
  .ln-list { grid-template-columns: 1fr; }
}

/* V49.2：周报统一挂周六——周六可点可看周报，周日保持不可点（弱化处理） */
.rep-cal-cell.sun-off { cursor: default; opacity: .5; }
.rep-cal-cell.sun-off:hover { background: var(--surface-2); transform: none; }

/* V51.2/V51.3：周报各段按行列表化展示——行首序号以粘贴原文为准（1./2./3.、（1）（2）等一律保留，
   列表不自动编号、不缩进，仅负责逐行排版） */
.rep-week-preview .weekly-plan { margin: 6px 0 0; padding-left: 0; list-style: none; color: var(--ink-1); }
.rep-week-preview .weekly-plan li { padding: 2px 0; line-height: 1.65; white-space: pre-wrap; word-break: break-word; }

/* ============================================================
   V39 调整层 · 全站字体统一切换为「方正兰亭黑 Pro Global」
   阿包要求：工作台字体统一换方正兰亭黑。
   - 源文件：本机方正字库 FZLTHProGlobal-{Demibold,Semibold}.TTF（各 8.5MB）
   - 处理：GB2312 一二级汉字 + 拉丁/数字/常用符号（6982 字形）子集化 → woff2
     单字重约 860KB（体积降至原 TTF 约 1/10），font-display: swap 不阻塞首屏
   - 字重映射：本机兰亭黑仅两档可用，且 Demibold(usWeightClass 600) 较细、
     Semibold(650) 较粗 → 常规/正文(200-500) 走 Demibold，标题/加粗(600-900) 走 Semibold
   - 回退链：兰亭黑 → 悠黑 → 普惠体 → 苹方 → 系统（任一环节缺失不影响可读）
   纯 CSS 覆盖层，删 V39 即回 V38（方正悠黑三字重）；数据 / 功能 / 布局不动。
   ============================================================ */
@font-face {
  font-family: "FZ LanTingHei";
  src: url("fonts/FZLTHProGlobal-Demibold.woff2") format("woff2");
  font-weight: 200; font-style: normal; font-display: swap;
}
@font-face {
  font-family: "FZ LanTingHei";
  src: url("fonts/FZLTHProGlobal-Demibold.woff2") format("woff2");
  font-weight: 300; font-style: normal; font-display: swap;
}
@font-face {
  font-family: "FZ LanTingHei";
  src: url("fonts/FZLTHProGlobal-Demibold.woff2") format("woff2");
  font-weight: 400; font-style: normal; font-display: swap;
}
@font-face {
  font-family: "FZ LanTingHei";
  src: url("fonts/FZLTHProGlobal-Demibold.woff2") format("woff2");
  font-weight: 500; font-style: normal; font-display: swap;
}
@font-face {
  font-family: "FZ LanTingHei";
  src: url("fonts/FZLTHProGlobal-Semibold.woff2") format("woff2");
  font-weight: 600; font-style: normal; font-display: swap;
}
@font-face {
  font-family: "FZ LanTingHei";
  src: url("fonts/FZLTHProGlobal-Semibold.woff2") format("woff2");
  font-weight: 700; font-style: normal; font-display: swap;
}
@font-face {
  font-family: "FZ LanTingHei";
  src: url("fonts/FZLTHProGlobal-Semibold.woff2") format("woff2");
  font-weight: 800; font-style: normal; font-display: swap;
}
@font-face {
  font-family: "FZ LanTingHei";
  src: url("fonts/FZLTHProGlobal-Semibold.woff2") format("woff2");
  font-weight: 900; font-style: normal; font-display: swap;
}
/* 全站字体栈：兰亭黑提到最前 */
:root { --sans: "FZ LanTingHei", "FZ YouHeiS", "Alibaba PuHuiTi", "PingFang SC", sans-serif; }
body, .section-title, .page-title, .modal-title, .brand-name, .brand-mark, .empty-ico {
  font-family: "FZ LanTingHei", "FZ YouHeiS", "Alibaba PuHuiTi",
    "PingFang SC", "SF Pro Display", "SF Pro Text",
    -apple-system, BlinkMacSystemFont, "Helvetica Neue",
    "Microsoft YaHei", "Segoe UI", "Noto Sans SC", Arial, sans-serif;
}
/* V38 数字栈：西文数字仍走 SF Pro（0 无斜杠、更粗），中文单位回落改为兰亭黑 */
.stat-value,
.stat-value small,
.legend-count {
  font-family: "SF Pro Display", "SF Pro Text", "Segoe UI", "Helvetica Neue",
    Arial, "FZ LanTingHei", "FZ YouHeiS", "Alibaba PuHuiTi", "PingFang SC",
    "Microsoft YaHei", -apple-system, "Noto Sans SC", sans-serif;
  font-variant-numeric: tabular-nums;
}

/* ============================================================
   V40 调整层 · 正文回「方正悠黑 Regular」，标题/加粗走「方正兰亭黑」
   阿包反馈：V39 全站兰亭黑后正文偏粗——正文实际字重是 600（Demibold），
   比常规正文 400 重，长段落发闷。

   实现思路（关键技巧，避免逐个枚举上百个加粗选择器）：
   不改动任何业务选择器，而是「重定向 @font-face」——让字体族 "FZ YouHeiS"
   的 600/700/800/900 四个字重改指向兰亭黑 Semibold 文件。站内所有「加粗」
   都靠 font-weight >= 600 表达，重定向后加粗内容自动落到兰亭黑。

   注意 500 必须显式钉回悠黑 Regular：CSS 字重就近匹配规则下，500 会向上
   匹配到 600，若不钉住会误落到兰亭黑。

   最终效果：正文 400 = 悠黑 Regular（细、清爽）；标题与加粗 = 兰亭黑 Semibold。
   纯 CSS 覆盖层，删 V40 即回 V39（全站兰亭黑）；数据 / 功能 / 布局不动。
   ============================================================ */

/* 1) 字重重定向：加粗档 → 兰亭黑 Semibold；500 钉回悠黑 Regular */
@font-face {
  font-family: "FZ YouHeiS";
  src: url("fonts/FZYouHeiS-Regular.woff2") format("woff2");
  font-weight: 500; font-style: normal; font-display: swap;
}
@font-face {
  font-family: "FZ YouHeiS";
  src: url("fonts/FZLTHProGlobal-Semibold.woff2") format("woff2");
  font-weight: 600; font-style: normal; font-display: swap;
}
@font-face {
  font-family: "FZ YouHeiS";
  src: url("fonts/FZLTHProGlobal-Semibold.woff2") format("woff2");
  font-weight: 700; font-style: normal; font-display: swap;
}
@font-face {
  font-family: "FZ YouHeiS";
  src: url("fonts/FZLTHProGlobal-Semibold.woff2") format("woff2");
  font-weight: 800; font-style: normal; font-display: swap;
}
@font-face {
  font-family: "FZ YouHeiS";
  src: url("fonts/FZLTHProGlobal-Semibold.woff2") format("woff2");
  font-weight: 900; font-style: normal; font-display: swap;
}

/* 2) 正文回悠黑栈（覆盖 V39 的兰亭黑），字重钉 400 = Regular */
body, button, input, textarea, select {
  font-family: "FZ YouHeiS", "Alibaba PuHuiTi", "PingFang SC", "SF Pro Display",
    "SF Pro Text", -apple-system, BlinkMacSystemFont, "Helvetica Neue",
    "Microsoft YaHei", "Segoe UI", "Noto Sans SC", Arial, sans-serif;
  font-weight: 400;
}

/* 3) 标题族走兰亭黑（即便某个标题字重是 400 也保底） */
.page-title, .travel-subtitle, .page-motto, .section-title,
.modal-title, .brand-name, .brand-mark, .brand-sub,
.nav-group-title, .empty-ico {
  font-family: "FZ LanTingHei", "FZ YouHeiS", "Alibaba PuHuiTi",
    "PingFang SC", "SF Pro Display", "SF Pro Text", -apple-system,
    BlinkMacSystemFont, "Helvetica Neue", "Microsoft YaHei", "Segoe UI",
    "Noto Sans SC", Arial, sans-serif;
}

/* 4) 行内强调 <b> / <strong> 走兰亭黑 */
b, strong {
  font-family: "FZ LanTingHei", "FZ YouHeiS", "Alibaba PuHuiTi",
    "PingFang SC", "Microsoft YaHei", sans-serif;
}

/* 5) --sans 回悠黑栈（V39 曾改成兰亭黑，此处还原为正文语义） */
:root { --sans: "FZ YouHeiS", "Alibaba PuHuiTi", "PingFang SC", "Microsoft YaHei", sans-serif; }

/* 6) 数字栈：中文单位回落还原为悠黑（西文数字仍走 SF Pro，0 无斜杠） */
.stat-value,
.stat-value small,
.legend-count {
  font-family: "SF Pro Display", "SF Pro Text", "Segoe UI", "Helvetica Neue",
    Arial, "FZ YouHeiS", "Alibaba PuHuiTi", "PingFang SC",
    "Microsoft YaHei", -apple-system, "Noto Sans SC", sans-serif;
  font-variant-numeric: tabular-nums;
}
