/* ============================================================
   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(var(--sched-cols, 7), minmax(0, 1fr)); gap: 10px; }
.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 专家导师）---------- */
/* V98.61：固定列宽 + 单位列吃满剩余宽度，姓名列收窄（原简介预览把姓名列撑到 220px，单位被顶到很远）
   V98.62：去掉 min-width——table-layout:fixed + width:100% 下表格永不溢出容器，横向滚动条随之消失 */
.mentor-table { font-size: 12.5px; width: 100%; max-width: 100%; table-layout: fixed; }
/* 手机号 / 邮箱超长时省略，不撑破单元格、不顶出滚动条 */
.mentor-num { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.mentor-table th,
.mentor-table td { border: none; padding: 7px 8px; vertical-align: middle; }
/* V98.71（2026-11-01）：领域标签不再断字。.tag 全局是 white-space:normal，
   「政策法规、成果转化」会被拆成「政策法规、成果转 / 化」；这里只对专家表放开 nowrap，
   不动全局，避免影响企业库荣誉标签等需要换行的地方。窄屏另有媒体查询恢复换行（见文件末尾）。 */
.mentor-table td .tag { white-space: nowrap; }
.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); }
.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;
}

/* ============================================================
   V53 · 启动骨架屏（首屏 loading，解决 CF Pages 国内访问慢时「一直转」的焦虑）
   - index.html 在 #view-wrap 预置 boot-skeleton，app.js 首次 render() 用 innerHTML
     覆盖后自动消失，无需 JS 清理。
   - 纯 CSS 占位动画，主题色随当前 --accent 变量自适应。
   纯样式层，删 V53 即回 V52；数据 / 功能 / 布局不动。
   ============================================================ */
.boot-skeleton { padding: 26px 28px; }
.boot-sk-head { margin-bottom: 18px; }
.boot-sk-title {
  height: 26px; width: 200px; border-radius: 6px;
  background: var(--accent-bg-2);
  animation: skPulse 1.4s ease-in-out infinite;
}
.boot-sk-sub {
  height: 14px; width: 320px; max-width: 70%; border-radius: 6px;
  margin-top: 10px; background: var(--surface-2);
  animation: skPulse 1.4s ease-in-out infinite .15s;
}
.boot-sk-grid {
  display: grid; grid-template-columns: repeat(4, minmax(0,1fr));
  gap: 14px; margin-bottom: 18px;
}
.boot-sk-card {
  height: 96px; border-radius: var(--r-m);
  background: var(--surface);
  border: 1px solid var(--border);
  animation: skPulse 1.4s ease-in-out infinite .3s;
}
.boot-sk-card.tall { height: 140px; }
.boot-sk-bar {
  height: 12px; width: 100%; border-radius: 6px;
  background: var(--surface-2); margin-bottom: 18px;
  animation: skPulse 1.4s ease-in-out infinite .45s;
}
.boot-sk-tip {
  text-align: center; font-size: 13px; color: var(--text-3);
  padding: 8px 0 4px; letter-spacing: .3px;
}
.boot-sk-tip::before {
  content: ''; display: inline-block; width: 14px; height: 14px;
  margin-right: 8px; vertical-align: -2px;
  border: 2px solid var(--accent-bg-2); border-top-color: var(--accent);
  border-radius: 50%; animation: skSpin .8s linear infinite;
}
@keyframes skPulse {
  0%, 100% { opacity: .55; }
  50% { opacity: 1; }
}
@keyframes skSpin { to { transform: rotate(360deg); } }
@media (max-width: 680px) {
  .boot-sk-grid { grid-template-columns: repeat(2, minmax(0,1fr)); }
  .boot-skeleton { padding: 18px 16px; }
}

/* ============================================================
   V54 · 运营协议驾驶舱（看板化）
   阿包要求：让运营协议指标更可视化——一眼看进度、紧急度、下一步、风险，
   并提炼年度里程碑。实现：在原有分组明细表格上方叠加「驾驶舱」区块：
   ① 总览 5 卡（含高危计数）② 大项健康度色块墙 ③ 三栏（风险预警/下一步重点/年度里程碑）。
   纯增量渲染层 + 纯 CSS，不动数据结构、不动明细表格交互（data-act 事件委托照常）。
   删 V54 即回 V53；数据 / 功能 / 明细表不变。
   ============================================================ */
.kpi-dash { margin: 6px 0 18px; }
.kpi-dash-title {
  display: flex; align-items: center; justify-content: space-between;
  font-size: 14px; font-weight: 700; color: var(--text);
  margin-bottom: 10px; padding-left: 10px; border-left: 3px solid var(--accent);
}
.kpi-legend { display: flex; align-items: center; gap: 12px; font-size: 11.5px; font-weight: 400; color: var(--text-2); }
.kpi-legend .lg {
  display: inline-block; width: 8px; height: 8px; border-radius: 50%;
  margin-right: 3px; vertical-align: -1px;
}
.kpi-legend .lg.done { background: var(--ok); }
.kpi-legend .lg.ok   { background: var(--accent-2); }
.kpi-legend .lg.warn { background: var(--gold); }
.kpi-legend .lg.high { background: var(--danger); }

.kpi-health-grid {
  display: grid; grid-template-columns: repeat(5, minmax(0,1fr)); gap: 10px;
  margin-bottom: 16px;
}
.kpi-hcard {
  border: 1px solid var(--border); border-radius: 10px; padding: 10px 12px;
  background: var(--surface); cursor: default; transition: transform .12s;
}
.kpi-hcard:hover { transform: translateY(-2px); box-shadow: var(--sh-1); }
.kpi-hcard.done { border-top: 3px solid var(--ok); }
.kpi-hcard.ok   { border-top: 3px solid var(--accent-2); }
.kpi-hcard.warn { border-top: 3px solid var(--gold); }
.kpi-hcard.high { border-top: 3px solid var(--danger); background: var(--danger-bg); }
.kpi-hc-no { font-size: 12px; font-weight: 700; color: var(--text-2); margin-bottom: 3px; }
.kpi-hc-name {
  font-size: 11.5px; color: var(--text-3); line-height: 1.45;
  margin-bottom: 5px; min-height: 2.9em; word-break: break-word;
}
.kpi-hc-pct { font-size: 18px; font-weight: 800; color: var(--text); font-variant-numeric: tabular-nums; }
.kpi-hcard.high .kpi-hc-pct { color: var(--danger); }
.kpi-hcard.done .kpi-hc-pct { color: var(--ok); }
.kpi-hcard.warn .kpi-hc-pct { color: var(--gold); }

.kpi-panels {
  display: grid; grid-template-columns: repeat(3, minmax(0,1fr)); gap: 12px;
}
.kpi-panel {
  border: 1px solid var(--border); border-radius: 10px; background: var(--surface);
  overflow: hidden;
}
.kpi-panel-risk { border-top: 3px solid var(--danger); }
.kpi-panel-focus { border-top: 3px solid var(--gold); }
.kpi-panel-ms { border-top: 3px solid var(--ok); }
.kpi-panel-title {
  font-size: 13px; font-weight: 700; color: var(--text);
  padding: 10px 12px 8px;
}
.kpi-panel-body { padding: 0 12px 10px; }
.kpi-panel-empty { font-size: 12px; color: var(--text-3); padding: 6px 0 4px; }

.kpi-alert-item { padding: 8px 0; border-top: 1px dashed var(--border-2); }
.kpi-alert-item:first-child { border-top: none; }
.kpi-alert-name { font-size: 12px; color: var(--text); line-height: 1.5; word-break: break-word; }
.kpi-alert-meta { font-size: 11px; color: var(--danger); margin-top: 3px; }
.kpi-alert-meta .kpi-lag { color: var(--danger); font-weight: 700; }

.kpi-focus-item {
  padding: 8px 0; border-top: 1px dashed var(--border-2); transition: background .12s;
}
.kpi-focus-item:first-child { border-top: none; }
.kpi-focus-item:hover { background: var(--gold-bg); margin: 0 -8px; padding: 8px; }
.kpi-focus-name { font-size: 12px; color: var(--text); line-height: 1.5; word-break: break-word; }
.kpi-focus-meta { font-size: 11px; color: var(--gold); margin-top: 3px; }
.kpi-focus-next { font-size: 11.5px; color: var(--text-2); margin-top: 4px; line-height: 1.5; }

.kpi-ms-item { display: flex; gap: 8px; padding: 8px 0; border-top: 1px dashed var(--border-2); }
.kpi-ms-item:first-child { border-top: none; }
.kpi-ms-dot {
  width: 7px; height: 7px; border-radius: 50%; background: var(--ok);
  flex-shrink: 0; margin-top: 5px;
}
.kpi-ms-body { flex: 1; min-width: 0; }
.kpi-ms-name { font-size: 12px; color: var(--text); line-height: 1.5; word-break: break-word; }
.kpi-ms-note { font-size: 11px; color: var(--text-3); margin-top: 3px; line-height: 1.5; }

.stat-risk .stat-value { color: var(--danger); }
.stat-risk { box-shadow: inset 0 3px 0 var(--danger), var(--sh-1); }
.stat-risk:hover { box-shadow: inset 0 3px 0 var(--danger), var(--sh-2); }

@media (max-width: 760px) {
  .kpi-health-grid { grid-template-columns: repeat(2, minmax(0,1fr)); }
  .kpi-panels { grid-template-columns: 1fr; }
  .kpi-dash-title { flex-direction: column; align-items: flex-start; gap: 6px; }
}

/* ============================================================
   V54.1 · 运营协议快速归集（记一句进展 → 自动挂到对应指标）
   输入框在驾驶舱顶部；回车/点「归集」后按本地关键词匹配，弹窗确认补进「完成情况」。
   纯增量，不动数据结构。删 V54.1 即回 V54。
   ============================================================ */
.kpi-quicklog {
  margin: 0 0 14px; padding: 12px 14px;
  border: 1px solid var(--border); border-radius: 12px;
  background: var(--surface); border-left: 3px solid var(--accent);
}
.kpi-quicklog-row { display: flex; gap: 8px; align-items: center; }
.kpi-quicklog-row .inp { flex: 1; }
.kpi-quicklog-hint { font-size: 11.5px; color: var(--text-3); margin-top: 7px; line-height: 1.5; }
.kpi-log-preview {
  font-size: 13px; color: var(--text); line-height: 1.6;
  padding: 10px 12px; border: 1px dashed var(--border-2); border-radius: 8px;
  background: var(--surface-2); word-break: break-all;
}
.kpi-log-opt {
  padding: 9px 11px; border: 1px solid var(--border); border-radius: 8px;
  margin-bottom: 7px; cursor: pointer; transition: border-color .12s, background .12s;
}
.kpi-log-opt:hover { border-color: var(--accent); background: var(--accent-bg); }
.kpi-log-opt-name { font-size: 12.5px; color: var(--text); line-height: 1.5; }
.kpi-log-opt-score { font-size: 11px; color: var(--accent); margin-top: 3px; }
@media (max-width: 560px) {
  .kpi-quicklog-row { flex-direction: column; align-items: stretch; }
  .kpi-quicklog-row .btn { width: 100%; }
}

/* ============================================================
   V49 调整层 · 全站统一「方正悠黑简体 509R」+ 基准字号 10pt
   阿包指定：工作台字体更新为「方正悠黑简体 509R / 10pt」。
   - 重新生成 fonts/FZYouHeiS-509R.woff2（从 FZVariable-YouHeiJ.TTF 实例化 wght=509，
     CJK 主区 + 扩展A + 常用标点/全角子集化，~880KB）
   - FZ YouHeiS 全字重 400/500/600/700/800/900 统一指向 509R（单一字重，
     加粗层次由浏览器 faux-bold 提供）
   - body 基准字号 14px -> 10pt
   纯 CSS 覆盖层，删 V49 即回 V40（正文悠黑 Regular + 加粗兰亭黑）；
   数据 / 功能 / 布局不动。
   ============================================================ */
@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: 600; 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; }
@font-face { font-family: "FZ YouHeiS"; src: url("fonts/FZYouHeiS-509R.woff2") format("woff2"); font-weight: 800; font-style: normal; font-display: swap; }
@font-face { font-family: "FZ YouHeiS"; src: url("fonts/FZYouHeiS-509R.woff2") format("woff2"); font-weight: 900; font-style: normal; font-display: swap; }
body { 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-size: 10pt; }

/* ============================================================
   V56 · 深蓝金融风主题（2026-10-08）
   阿包要求：移除换肤功能（V55 整层删除，本层取而代之），全局更换为
   参考图风格 —— 深海军蓝侧边栏 + 亮蓝主色 + 纯白主区 + 绿/橙/红点缀。
   - 机制：:root 全量覆写 51 个色彩变量（层叠在全部历史层之后）；
     组件级覆写统一加 html 前缀提升特异性，稳压 V21/V22 残留绿相硬编码。
   - 侧边栏整体转深色（品牌方块/导航/徽章/底部按钮/滚动条逐项适配）。
   - 纯 CSS 覆盖层，删 V56 即回 V54.1（墨绿）；数据 / 功能 / 布局不动。
   ============================================================ */

/* ---------- 全局色彩变量 ---------- */
:root {
  --bg:#F4F6FB; --surface:#FFFFFF; --surface-2:#F8FAFD; --surface-3:#EEF2F8;
  --border:#E4E9F2; --border-2:#D3DAE8;
  --text:#182236; --text-2:#5A6478; --text-3:#98A2B8;
  --accent:#2E5CFF; --accent-2:#5B7CFF; --accent-3:#1E3FBF;
  --accent-bg:#E9EEFF; --accent-bg-2:#D6E0FF;
  --accent-grad:linear-gradient(135deg, #5B7CFF 0%, #2E5CFF 100%);
  --accent-grad-v:linear-gradient(135deg, #3D66E8 0%, #2447CC 100%);
  --gold:#DE7C2E; --gold-2:#EC9B58; --gold-bg:#FCF0E2; --gold-bg-2:#F8E2C8;
  --gold-grad:linear-gradient(135deg, #EC9B58 0%, #DE7C2E 100%);
  --orange:#E8842C; --orange-2:#F0A05C; --orange-bg:#FCF0E2;
  --blue:#2E5CFF; --blue-2:#5B7CFF; --blue-bg:#E9EEFF;
  --brown:#8B7E6A; --brown-2:#A89B85; --brown-bg:#F1EEE6;
  --vanilla:#E3E8F4; --vanilla-bg:#F1F4FA;
  --ok:#2FA46C; --ok-bg:#E4F5EC; --info:#2E5CFF; --info-bg:#E9EEFF;
  --warn:#E8A13B; --warn-bg:#FCF3E0; --danger:#DD4B4B; --danger-bg:#FBE9E9;
  --mint:#C9D8F8; --mint-bg:#EEF3FE; --mint-bg-2:#DAE4FB;
  --bg-sun:radial-gradient(1200px 520px at 26% -16%, rgba(46,92,255,.09), transparent 60%),
           radial-gradient(900px 440px at 86% -14%, rgba(91,124,255,.06), transparent 55%);
  --grid-line:transparent; --dot-line:transparent;
  --glass:rgba(255,255,255,.86); --glass-strong:rgba(255,255,255,.94); --glass-border:rgba(46,92,255,.16);
  --sh-1:0 1px 2px rgba(24,34,54,.05), 0 2px 8px rgba(46,92,255,.06), inset 0 1px 0 rgba(255,255,255,.9);
  --sh-2:0 4px 14px rgba(24,34,54,.07), 0 2px 6px rgba(46,92,255,.08), inset 0 1px 0 rgba(255,255,255,.9);
  --sh-3:0 12px 32px rgba(24,34,54,.11), 0 4px 12px rgba(46,92,255,.10), inset 0 1px 0 rgba(255,255,255,.9);
}

/* ---------- 侧边栏 · 深海军蓝 ---------- */
html .sidebar { background:linear-gradient(180deg, #132152 0%, #0E1838 100%); border-right-color:rgba(255,255,255,.06); }
html .brand-mark { background:linear-gradient(135deg, #5B7CFF, #2E5CFF); box-shadow:0 4px 14px rgba(46,92,255,.42), inset 0 1px 0 rgba(255,255,255,.35); }
html .brand-sub { color:#EDF1FF; }
html .nav-group-title { color:#7E8BB8; }
html .nav-item { color:#B7C1E2; }
html .nav-item:hover { background:rgba(255,255,255,.07); color:#FFFFFF; }
html .nav-item.on {
  background:linear-gradient(135deg, #3D6BFF, #2650F0); color:#FFFFFF;
  box-shadow:0 4px 14px rgba(46,92,255,.38), inset 0 1px 0 rgba(255,255,255,.22);
}
html .nav-item.on::before { background:rgba(255,255,255,.85); box-shadow:none; }
html .nav-badge { background:rgba(255,255,255,.16); color:#E2E8FF; box-shadow:none; }
html .nav-handle { color:#7E8BB8; }
html .nav-handle:hover { color:#FFFFFF; background:rgba(255,255,255,.10); }
html .nav-unhide { background:rgba(255,255,255,.12); color:#CDD6F5; }
html .nav-unhide:hover { background:#2E5CFF; color:#FFFFFF; }
html .nav-hidden-badge { background:rgba(255,255,255,.10); color:#8B96BF; }
html .sidebar-foot { border-top-color:rgba(255,255,255,.08); }
html .sidebar-foot .ghost-btn { color:#A9B4D8; }
html .sidebar-foot .ghost-btn:hover { background:rgba(255,255,255,.07); color:#FFFFFF; }
html .foot-note { color:#65709C; }
html .nav::-webkit-scrollbar-thumb { background:rgba(255,255,255,.14); }
html .nav::-webkit-scrollbar-thumb:hover { background:rgba(255,255,255,.26); }

/* ---------- 通用组件模板（中和历史层残留绿相，全局生效） ---------- */
html body { background-color:var(--bg); background-image:var(--bg-sun); background-size:auto; }
html .cmd-wrap:focus-within, html .search-box:focus-within {
  box-shadow:0 0 0 3px rgba(46,92,255,.18), 0 2px 10px rgba(24,34,54,.07);
}
html .btn.primary { box-shadow:0 2px 10px rgba(46,92,255,.35), inset 0 1px 0 rgba(255,255,255,.28); }
html .btn.primary:hover {
  background:var(--accent-grad-v); filter:brightness(.94);
  box-shadow:0 4px 14px rgba(46,92,255,.40), inset 0 1px 0 rgba(255,255,255,.20);
}
html .btn.on, html .chip.on {
  background:linear-gradient(135deg, var(--accent-bg), var(--accent-bg-2));
  box-shadow:inset 0 0 0 1px var(--accent-bg-2);
}
html th { background:linear-gradient(180deg, var(--surface-2), var(--surface-3)); }
html .tbl-wrap th {
  background-image:linear-gradient(90deg, transparent, var(--surface-3) 30%, var(--surface-3) 70%, transparent);
}
html .card::before, html .focus-item::before, html .tbl-wrap::before {
  background:linear-gradient(90deg, transparent, rgba(46,92,255,.35), transparent);
}
html .modal { box-shadow:0 18px 50px rgba(18,28,58,.18), 0 4px 14px rgba(18,28,58,.09), 0 0 0 1px rgba(18,28,58,.04); }
html .modal-mask { background:rgba(14,22,48,.42); }
html .inp:focus, html .ta:focus, html select.inp:focus {
  box-shadow:0 0 0 3px rgba(46,92,255,.16), 0 0 8px rgba(46,92,255,.08);
}
html .dropdown-menu { box-shadow:0 12px 30px rgba(18,28,58,.15), 0 3px 8px rgba(18,28,58,.07); }
html .view-wrap::-webkit-scrollbar-thumb,
html .modal-body::-webkit-scrollbar-thumb { background:rgba(24,34,54,.22); }
html .view-wrap::-webkit-scrollbar-thumb:hover,
html .modal-body::-webkit-scrollbar-thumb:hover { background:rgba(24,34,54,.38); }
html .empty-ico {
  background:linear-gradient(135deg, var(--accent-bg), var(--surface));
  box-shadow:inset 0 1px 0 rgba(255,255,255,.9), 0 4px 12px rgba(46,92,255,.12);
}
html .today-chip {
  background:linear-gradient(180deg, var(--surface-2), var(--surface-3));
  box-shadow:inset 0 1px 0 rgba(255,255,255,.9), 0 1px 3px rgba(24,34,54,.06);
}
html ::selection { background:#D6E0FF; text-shadow:none; }
html .link-btn:hover { text-shadow:none; }
html mark { background:var(--vanilla); }

/* ---------- V57 · 苹方三字重字体体系（2026-10-10 规划，阿包指定三款） ----------
   三款源：PingFangSC-Light / Regular / Medium（阿包提供 PingFangSC-main 包）。
   字重规划：
   · 300 Light  —— 细体（备用档；大数字/大标题未来可切）
   · 400 Regular —— 正文常规
   · 500 Medium —— 标题/强调/按钮；现有 CSS 里 600/700/800/900 的加粗
                   声明全部映射到 Medium 字形（无 faux bold，笔画干净），
                   与苹方家族的自然字重阶梯一致。
   家族名沿用系统名 "PingFang SC"：Mac/手机优先呈现原生苹方（渲染最佳），
   Windows 加载本站子集 woff2（CJK 主区+扩展A+ASCII+常用标点）。
   基准字号维持 V49 的 10pt。删 V57 即回 509R 方案。
   ------------------------------------------------------------ */
@font-face { font-family: "PingFang SC"; src: url("fonts/PingFangSC-Light.woff2") format("woff2"); font-weight: 300; font-style: normal; font-display: swap; }
@font-face { font-family: "PingFang SC"; src: url("fonts/PingFangSC-Regular.woff2") format("woff2"); font-weight: 400; font-style: normal; font-display: swap; }
@font-face { font-family: "PingFang SC"; src: url("fonts/PingFangSC-Medium.woff2") format("woff2"); font-weight: 500; font-style: normal; font-display: swap; }
@font-face { font-family: "PingFang SC"; src: url("fonts/PingFangSC-Medium.woff2") format("woff2"); font-weight: 600; font-style: normal; font-display: swap; }
@font-face { font-family: "PingFang SC"; src: url("fonts/PingFangSC-Medium.woff2") format("woff2"); font-weight: 700; font-style: normal; font-display: swap; }
@font-face { font-family: "PingFang SC"; src: url("fonts/PingFangSC-Medium.woff2") format("woff2"); font-weight: 800; font-style: normal; font-display: swap; }
@font-face { font-family: "PingFang SC"; src: url("fonts/PingFangSC-Medium.woff2") format("woff2"); font-weight: 900; font-style: normal; font-display: swap; }

/* 正文与表单控件：苹方打头（覆盖 V40/V49 的悠黑栈） */
html body, html button, html input, html textarea, html select {
  font-family: "PingFang SC", "FZ YouHeiS", "Alibaba PuHuiTi", "Microsoft YaHei",
    "Segoe UI", "Noto Sans SC", Arial, sans-serif;
}

/* 标题族：苹方统一（覆盖 V40 的兰亭黑栈） */
html .page-title, html .travel-subtitle, html .page-motto, html .section-title,
html .modal-title, html .brand-name, html .brand-mark, html .brand-sub,
html .nav-group-title, html .empty-ico {
  font-family: "PingFang SC", "FZ YouHeiS", "Alibaba PuHuiTi", "Microsoft YaHei", sans-serif;
}

/* 行内强调：苹方（700 自动落 Medium 字形） */
html b, html strong {
  font-family: "PingFang SC", "FZ YouHeiS", "Alibaba PuHuiTi", "Microsoft YaHei", sans-serif;
}

/* 数字栈：苹方统一（苹方数字 0 无斜杠，与 SF Pro 观感一致） */
html .stat-value, html .stat-value small, html .legend-count {
  font-family: "PingFang SC", "FZ YouHeiS", "Alibaba PuHuiTi", "Microsoft YaHei", sans-serif;
}

/* --sans 变量同步苹方 */
:root { --sans: "PingFang SC", "FZ YouHeiS", "Alibaba PuHuiTi", "Microsoft YaHei", sans-serif; }

/* ---------- V57.1 微调（2026-10-09，阿包反馈） ----------
   1) 大标题下方的说明文字（page-desc）全部不保留 —— 全局隐藏，可回滚；
   2) 江夏资源卡片图标换线条 SVG 后的颜色与手机端尺寸适配。 ---------- */
html .page-desc { display: none; }
html .ehd-cell .ehd-icon { color: var(--accent); opacity: 1; }
html .ehd-cell .ehd-icon svg { width: 28px; height: 28px; }
@media (max-width: 640px) {
  html .ehd-cell .ehd-icon svg { width: 22px; height: 22px; }
}

/* ---------- V56.1 微调（2026-10-08 深夜，阿包反馈） ----------
   1) 侧栏图标换单色线条 SVG（JS 侧 NAV_ICONS 映射，emoji 仅作回退）；
   2) 导航文字全部改纯白，去掉灰蓝感；
   3) 侧栏滚动条弱化到融入背景（3px / 7% 白，hover 才稍显）。 ---------- */
html .nav-ico { display:flex; align-items:center; justify-content:center; }
html .nav-ico .nav-svg { width:17px; height:17px; display:block; flex-shrink:0; }
html .nav-item { color:#FFFFFF; }
html .nav-item:hover { color:#FFFFFF; }
html .nav-group-title { color:rgba(255,255,255,.55); }
html .sidebar-foot .ghost-btn { color:rgba(255,255,255,.92); }
html .sidebar-foot .ghost-btn:hover { color:#FFFFFF; }
html .foot-note { color:rgba(255,255,255,.42); }
html .nav-handle { color:rgba(255,255,255,.50); }
html .nav-handle:hover { color:#FFFFFF; background:rgba(255,255,255,.10); }
html .nav-hidden-badge { color:rgba(255,255,255,.65); }
/* V57.2 滚动条修正（2026-10-09，阿包反馈：白底突兀 → 透明轨道 + 灰蓝滑块）。
   注意 .nav 带标准属性 scrollbar-width:thin，Chrome 121+ 会忽略 ::-webkit-scrollbar
   而走 scrollbar-color —— 两条机制都要写，颜色保持一致。 */
html .nav {
  scrollbar-width: thin;
  scrollbar-color: rgba(150,165,200,.45) transparent;
}
html .nav::-webkit-scrollbar { width:4px; background:transparent; }
html .nav::-webkit-scrollbar-track { background:transparent; border:none; box-shadow:none; }
html .nav::-webkit-scrollbar-thumb { background:rgba(150,165,200,.45); border-radius:999px; }
html .nav::-webkit-scrollbar-thumb:hover { background:rgba(150,165,200,.65); }

/* ============================================================
   V59 · 品牌区文案与资讯卡片精简（2026-10-09，阿包需求）
   1) 品牌区：「楚」→「CHU」，「阿包工作系统」→「楚旭工作台」（index.html 同步改）。
      方框内由 1 个汉字变 3 个拉丁字母，字号必须下调（18px→13px）+ 字距收紧，
      否则 40px 方框里会溢出；Latin 无 text-stroke 需求，单独关闭。
   2) 资讯卡片：
      · 移除来源/分类/标签等全部 tag 与「已读」文字标记（保留未读小圆点）；
      · 移除底部「查看原文 ↗」「归档」两个按钮；
      · 改为「点击标题进入原文」（整卡标题即链接，原本已支持），
        「归档」改挂到标题右侧的悬浮图标按钮（hover 才显形），
        既满足「好的新的可以归档、以后反复查看」，又不占视觉；
      · 归档不做删除处理（原有逻辑就是归档可恢复，仅调整入口）。
   ------------------------------------------------------------ */

html .brand-mark {
  font-size: 13px;
  font-weight: 700;
  letter-spacing: -.3px;
  -webkit-text-stroke: 0;
}

/* 资讯卡片：去掉标签行的大块留白，标题独占一行 */
html .news-top {
  gap: 0;
  justify-content: flex-start;
  min-height: 0;
}
html .news-top .tag,
html .news-top .tag-soft,
html .news-top .read-flag { display: none; }
html .news-top .news-date { margin-left: 0; }
html .news-top .unread-dot { margin-left: 0; }

/* 标题行改为 flex：标题占满，右侧留出归档按钮位 */
html .news-title {
  position: relative;
  display: flex;
  align-items: flex-start;
  gap: 6px;
}
html .news-title > a,
html .news-title > span { flex: 1; min-width: 0; }
html .news-title > a { cursor: pointer; }

html .news-card { cursor: pointer; transition: border-color .14s, transform .14s; }
html .news-card:hover { border-color: var(--accent); }

/* 悬浮归档按钮：平时隐藏，hover 卡片才出现 */
html .news-arch-btn {
  flex-shrink: 0;
  width: 22px; height: 22px; padding: 0;
  display: flex; align-items: center; justify-content: center;
  border: none; background: transparent; border-radius: 5px;
  color: var(--text-3); font-size: 12px; line-height: 1; cursor: pointer;
  opacity: 0; transition: opacity .14s, background .14s, color .14s;
}
html .news-card:hover .news-arch-btn { opacity: 1; }
html .news-arch-btn:hover { background: var(--accent); color: #fff; }
html .news-card.is-read .news-arch-btn { opacity: .45; }
html .news-card.is-read:hover .news-arch-btn { opacity: 1; }

/* 旧的操作行整体不再渲染，这里兜底隐藏（防旧缓存 HTML） */
html .news-acts { display: none; }

/* 标题旁的小字日期/未读点：下沉到标题下方一行，视觉更干净 */
html .news-meta-line {
  display: flex; align-items: center; gap: 7px;
  font-size: 11px; color: var(--text-3); margin-top: -1px;
}
html .news-meta-line .unread-dot { flex-shrink: 0; }

/* 「我的资讯库」里的标题：可点击回看原文，不用删除线（存档≠废弃） */
html .news-arch-title {
  color: var(--text); text-decoration: none; font-weight: 500;
}
html .news-arch-title:hover {
  color: var(--accent);
  text-decoration: underline; text-underline-offset: 2px;
}

/* ============================================================
   V60 · 政策库已读未读 + 卡片精简 + 百词色调调和（2026-10-09，阿包需求）
   1) 政策卡片：去掉底部整行 tag（分类/地域/来源/#标签）与「🔗 原文」标签，
      标题即链接进原文；「申报入口」由 tag 改为一行说明文字保留；
      🗑 由「归档」改为「彻底删除」（二次确认，不可恢复）。
   2) 已读/未读：未读排前、已读沉底（JS 排序），已读卡片降透明度；
      底部一行只留「✓ 已读」或未读小圆点 + 日期；筛选栏加「只看未读 N」。
   3) 行业百词色调：旧层词条按钮硬编码墨绿（#5F8D4E/#eaf2e3）与 V56 深蓝
      主题冲突 —— 改为跟随 --accent 变量的蓝调；详情卡米黄底（#f5f1e6）
      改为与主区协调的浅蓝白。
   ------------------------------------------------------------ */

/* —— 政策卡片精简 —— */
html .asset-foot {
  gap: 7px;
  margin-top: 10px;
  padding-top: 9px;
  border-top: 1px solid var(--border);
  align-items: center;
}
html .asset-date { margin-top: 0; margin-left: auto; }
html .asset-links { display: none; }
html .asset-card .tag { display: none; }
html .asset-card .read-flag-mini {
  font-size: 11px; color: var(--text-3);
}
html .asset-card.is-read { opacity: .72; background: var(--surface-2); }
html .asset-card.is-read:hover { opacity: 1; }
html .asset-card { transition: opacity .14s, border-color .14s; }
html .asset-card.is-unread { border-left: 3px solid var(--accent); }
html .asset-card.is-read { border-left: 3px solid var(--border); }
html .unread-chip.on { background: var(--accent); color: #fff; border-color: var(--accent); }

/* —— 行业百词：词条按钮改随主题蓝调 —— */
html .baici-side-cell {
  border-color: var(--border);
  background: var(--surface);
}
html .baici-side-cell:hover {
  border-color: var(--accent-2);
  background: var(--accent-bg);
}
html .baici-side-cell.is-cur {
  border-color: var(--accent);
  background: var(--accent-bg);
  box-shadow: inset 0 0 0 1px var(--accent);
}
html .baici-side-term { color: var(--text); font-weight: 500; }
html .baici-side-cell.is-cur .baici-side-term { color: var(--accent-3); font-weight: 500; }
html .baici-side-head { color: var(--text-3); }

/* 详情卡：米黄 → 与主区协调的浅蓝白 */
html .baici-card {
  position: relative;
  max-width: 720px;
  margin: 0 auto;
  text-align: left;
  padding: 34px 30px 30px;
  background: var(--surface);
  border-radius: var(--r-l, 14px);
  border: 1px solid var(--border);
  box-shadow: var(--sh-2);
}
html .baici-cat-label {
  font-size: 13px; font-weight: 500;
  color: var(--accent); letter-spacing: .04em;
}
html .baici-term {
  font-size: 30px; font-weight: 600; letter-spacing: .02em;
  color: var(--text); margin-top: 6px; line-height: 1.3; padding-right: 40px;
}
html .baici-meaning {
  margin-top: 18px; font-size: 15px; line-height: 1.85; color: var(--text);
}
html .baici-example {
  margin-top: 14px; padding-top: 14px; border-top: 1px dashed var(--border-2);
  font-size: 13px; color: var(--text-2); font-style: italic;
}
html .baici-alias {
  margin-top: 10px; font-size: 12.5px; color: var(--text-2); font-style: italic;
}
html .baici-edit-btn {
  position: absolute; top: 14px; right: 14px;
  width: 34px; height: 34px; display: flex; align-items: center; justify-content: center;
  font-size: 16px; line-height: 1; cursor: pointer; border-radius: 50%;
  border: 1px solid var(--border); background: var(--surface); color: var(--text-2);
  transition: background .14s, color .14s, border-color .14s;
}
html .baici-edit-btn:hover {
  background: var(--accent-bg); color: var(--accent); border-color: var(--accent);
}
html .baici-top { background: var(--surface-2); }

/* ============================================================
   V58 · 待办「重点事项 / 常规事项」双卡片（2026-10-09，阿包需求）
   日历下方新增两张卡片，把本周事项按 kind 归拢：
   - 左「重点事项」：金色 ★，展示「对接关键人 @」与备注；
   - 右「常规事项」：蓝灰 ◇，只留时间与日期，保持轻量。
   卡片内条目按优先级 pri 分档上色（p1 红 / p2 橙 / 常规灰蓝），
   与日历格子内的颜色语义一致；已完成折叠进 <details> 不占注意力。
   纯 CSS 覆盖层，删 V58 即回 V57.2。
   ============================================================ */
.tk-grid { display:grid; grid-template-columns:repeat(auto-fit, minmax(280px, 1fr)); gap:14px; margin-top:16px; }
.tk-card {
  background:var(--surface); border:1px solid var(--border); border-radius:var(--r-m);
  box-shadow:var(--sh-1); padding:13px 15px 15px; position:relative; overflow:hidden;
}
.tk-card::before { content:''; position:absolute; left:0; top:0; bottom:0; width:3px; }
.tk-focus::before { background:var(--gold); }
.tk-normal::before { background:#9FB0D6; }
.tk-someday::before { background:#6FBF8E; }

.tk-head { display:flex; align-items:center; gap:8px; margin-bottom:11px; padding-bottom:9px; border-bottom:1px solid var(--border); }
.tk-ico {
  width:22px; height:22px; border-radius:6px; display:flex; align-items:center; justify-content:center;
  font-size:12px; flex-shrink:0; line-height:1;
}
.tk-ico.k-focus { background:var(--gold-bg); color:var(--gold); }
.tk-ico.k-normal { background:var(--surface-3); color:#7B8BB0; }
.tk-ico.k-someday { background:rgba(111,191,142,.14); color:#4E9E6C; }
/* V98.45 待办事项卡：行尾归档 × */
.tk-card .tk-del {
  flex-shrink:0; width:20px; height:20px; border:none; background:transparent; border-radius:5px;
  color:var(--text-3); font-size:14px; line-height:1; cursor:pointer; opacity:0; transition:opacity .12s;
}
.tk-row:hover .tk-del { opacity:1; }
.tk-del:hover { background:var(--surface-3); color:var(--danger); }
.tk-title { font-size:12.5px; font-weight:700; color:var(--text); }
.tk-nums { margin-left:auto; font-size:11px; color:var(--text-2); }
.tk-nums b { color:var(--text); font-size:12px; }

.tk-row {
  display:flex; align-items:flex-start; gap:7px; padding:7px 8px; border-radius:6px;
  margin-bottom:5px; transition:background .12s;
}
.tk-row:hover { background:var(--surface-2); }
.tk-row.p1 { border-left:2px solid var(--danger); padding-left:6px; }
.tk-row.p2 { border-left:2px solid var(--orange); padding-left:6px; }
.tk-row.over { background:rgba(221,75,75,.045); }
.tk-main { flex:1; min-width:0; cursor:pointer; }
.tk-txt { font-size:11.5px; line-height:1.5; color:var(--text); }
.tk-row.done .tk-txt { text-decoration:line-through; color:var(--text-3); }
.tk-when {
  font-size:9.5px; color:var(--text-3); background:var(--surface-3);
  border-radius:4px; padding:1px 4px; margin-left:5px; white-space:nowrap;
}
.tk-when.is-today { color:var(--accent); background:var(--accent-bg); font-weight:700; }
.tk-key {
  font-size:10.5px; color:var(--text-2); margin-top:3px;
  padding:2px 6px; background:var(--gold-bg); border-radius:4px; display:inline-block;
}
.tk-key b { color:var(--gold); }
.tk-note { font-size:10px; color:var(--text-3); margin-top:3px; line-height:1.45; }
.tk-over-tag {
  flex-shrink:0; font-size:9px; color:#fff; background:var(--danger);
  border-radius:4px; padding:2px 5px; line-height:1.3;
}
.tk-empty { font-size:11px; color:var(--text-3); padding:10px 2px; line-height:1.6; }
.tk-empty.sm { padding:6px 2px; }
.tk-done { margin-top:8px; border-top:1px dashed var(--border); padding-top:7px; }
.tk-done > summary {
  font-size:10.5px; color:var(--text-3); cursor:pointer; list-style:none;
  padding:2px 0; user-select:none;
}
.tk-done > summary::-webkit-details-marker { display:none; }
.tk-done > summary::before { content:'▸ '; font-size:9px; }
.tk-done[open] > summary::before { content:'▾ '; }
.tk-done > summary:hover { color:var(--accent); }
.tk-done .tk-row { opacity:.62; }

/* 日历格子内的「重点」星标 */
.task-star { color:var(--gold); font-size:9px; margin-right:3px; vertical-align:1px; }

/* 表单里的「事项类型」双选按钮 */
.kind-pick { display:flex; gap:8px; }
.kind-opt {
  flex:1; padding:8px 6px; font-size:11.5px; cursor:pointer;
  background:var(--surface-2); border:1px solid var(--border); border-radius:6px;
  color:var(--text-2); transition:all .12s; font-family:inherit;
}
.kind-opt:hover { border-color:var(--accent); color:var(--text); }
.kind-opt.on {
  background:var(--accent-bg); border-color:var(--accent);
  color:var(--accent); font-weight:700;
}

@media (max-width: 900px) {
  .tk-grid { grid-template-columns:1fr; }
}

/* ============================================================
   V61（2026-10-09）· 政策库卡片改横排 2 栏 + 结构精简
   阿包要求：卡片由 4 栏改 2 栏横排；摘要显示更少；
   卡片内只留 标题 / 摘要 / 归属主管部门 / 截止日期 四要素。
   ------------------------------------------------------------ */

/* —— 1) 横排 2 栏 —— */
html .asset-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px; }

/* —— 2) 摘要压到 2 行（原来 5 行太占地方）—— */
html .asset-body {
  -webkit-line-clamp: 2;
  margin-top: 7px;
  font-size: 12.5px;
  line-height: 1.6;
  color: var(--text-3);
}

/* —— 3) 底部一行：已读态 + 主管部门 + 截止日期 —— */
html .asset-foot {
  gap: 8px;
  margin-top: auto;
  padding-top: 9px;
  border-top: 1px solid var(--border);
  align-items: center;
  min-height: 20px;
}
html .asset-dept {
  font-size: 11px;
  color: var(--text-3);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  max-width: 46%;
}
html .asset-dl {
  margin-left: auto;
  font-size: 11px;
  font-weight: 600;
  white-space: nowrap;
  flex-shrink: 0;
  color: var(--text-2);
}
html .asset-dl.over { color: var(--text-3); }
html .asset-dl.near { color: var(--danger); }
html .asset-dl.ok   { color: var(--text-3); }
html .asset-dl.roll { color: var(--text-3); }
html .asset-card { min-height: 132px; }

/* —— 4) 窄屏回落：<900px 单栏 —— */
@media (max-width: 900px) {
  html .asset-grid { grid-template-columns: 1fr; gap: 12px; }
  html .asset-dept { max-width: 55%; }
}

/* ============================================================
   V62（2026-10-09）· 顶栏右侧「年底倒计时」
   chip 用 margin-left:auto 顶到最右；cmd-wrap 仍是 flex:1（上限 520px），
   中间留白由 auto margin 吃掉，不与搜索框抢位。
   ------------------------------------------------------------ */
html .topbar { gap: 12px; }
html .year-count {
  margin-left: auto;
  display: flex;
  align-items: center;
  gap: 7px;
  padding: 5px 12px 5px 11px;
  border-radius: 999px;
  background: var(--surface-2);
  border: 1px solid var(--border);
  white-space: nowrap;
  flex-shrink: 0;
  cursor: default;
  font-family: inherit;
  position: relative;
  overflow: hidden;
  transition: border-color .15s, background .15s;
}
html .year-count:hover { border-color: var(--accent); }
html .yc-ico { font-size: 13px; line-height: 1; opacity: .9; }
html .yc-main {
  font-size: 13px;
  font-weight: 700;
  line-height: 1;
  letter-spacing: .1px;
}
html .yc-sub {
  font-size: 11px;
  font-weight: 600;
  line-height: 1;
  color: var(--text-3);
  padding-left: 7px;
  border-left: 1px solid var(--border);
}
/* 进度条：贴在 chip 底部，细线不占高度 */
html .yc-bar {
  position: absolute;
  left: 0; right: 0; bottom: 0;
  height: 2px;
  background: transparent;
}
html .yc-bar i {
  display: block;
  height: 100%;
  border-radius: 0 2px 2px 0;
  transition: width .4s ease;
}
/* 三档语义色：常态蓝 → 超 60% 金 → 超 85% 红（年底冲刺） */
html .year-count.lc-blue .yc-main { color: var(--accent); }
html .year-count.lc-blue .yc-bar i { background: var(--accent); }
html .year-count.lc-gold .yc-main { color: var(--gold); }
html .year-count.lc-gold .yc-bar i { background: var(--gold); }
html .year-count.lc-red  .yc-main { color: var(--danger); }
html .year-count.lc-red  .yc-bar i { background: var(--danger); }
html .year-count.lc-red  { border-color: var(--danger-bg); background: var(--danger-bg); }

/* 窄屏：隐藏进度条与年份，只留主数字，避免挤掉搜索框 */
@media (max-width: 1180px) {
  html .yc-sub { display: none; }
}
@media (max-width: 1024px) {
  html .year-count { display: none; }
}

/* ============================================================
   V63（2026-10-09）· 总览「政策窗口期预警」限 4 条 + 收起入口
   阿包要求：首页这块只放 3-4 条。取 4 条（临近优先），
   其余以「还有 N 条待关注 · 全部查看 ›」收口，点进政策库。
   ------------------------------------------------------------ */
html .section-count {
  float: right;
  font-size: 12px;
  font-weight: 600;
  line-height: 1.5;
  color: var(--text-3);
  letter-spacing: .2px;
}
html .dash-more {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 4px;
  margin-top: 11px;
  padding-top: 11px;
  border-top: 1px dashed var(--border);
  font-size: 12.5px;
  font-weight: 600;
  color: var(--accent);
  cursor: pointer;
  transition: opacity .15s;
}
html .dash-more:hover { opacity: .72; }
html .dm-arrow { font-size: 14px; line-height: 1; }

/* ============================================================
   V64（2026-10-09）· 周报预览空态卡片：标题居左 + 区块标题去 emoji
   原因：旧规则 `.empty-preview`（style.css:814）把「整张卡片」设为
   display:flex + justify-content:center，导致 .section-title 作为 flex
   item 被一起水平/垂直居中。改为纵向 flex、标题贴左上，仅空态占位
   （.empty，自带 flex:1 + 居中）在剩余空间内居中。
   ------------------------------------------------------------ */
html .card.empty-preview {
  display: flex;
  flex-direction: column;
  align-items: stretch;
  justify-content: flex-start;
}
html .card.empty-preview > .section-title {
  align-self: flex-start;
  text-align: left;
}

/* ============================================================
   V65（2026-10-09）· 行程安排 · 武汉中心周报（可直接编辑）
   阿包要求：右侧「本周周报（条目式·报送领导）」改为「武汉中心周报」，
   并能自行输入 / 编辑，格式固定为四栏——
   武汉中心业绩进度 / 本周重点工作 / 下周重点工作 / 领导需重点关注。
   排版：标签在上、文本框在下，与最终报送格式一致。
   ------------------------------------------------------------ */

/* —— 1) 表单容器 —— */
html .rep-form {
  display: flex;
  flex-direction: column;
  gap: 0;
  margin-top: 10px;
  padding: 4px 18px;
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--r-m, 10px);
  box-shadow: var(--sh-1);
}

/* —— 2) 单栏：标签 + 文本框 —— */
html .rep-row {
  display: flex;
  flex-direction: column;
  gap: 5px;
  padding: 13px 0;
}
html .rep-row + .rep-row { border-top: 1px dashed var(--border); }

html .rep-lab {
  font-size: 13px;
  font-weight: 700;
  color: var(--text);
  letter-spacing: .2px;
  cursor: pointer;
}

html .rep-ta {
  width: 100%;
  min-height: 58px;
  padding: 9px 12px;
  background: var(--surface-2);
  border: 1px solid var(--border);
  border-radius: 8px;
  font-family: inherit;
  font-size: 13px;
  line-height: 1.75;
  color: var(--text);
  resize: vertical;
  transition: border-color .15s, background .15s, box-shadow .15s;
}
html .rep-ta::placeholder { color: var(--text-3); }
html .rep-ta:focus {
  outline: none;
  background: var(--surface);
  border-color: var(--accent);
  box-shadow: 0 0 0 3px var(--accent-bg);
}

/* —— 3) 底部操作条与保存状态 —— */
html .sched-rep .sched-rep-bar { margin: 12px 0 0; }
html .rep-state {
  font-size: 12px;
  font-weight: 600;
  color: var(--text-3);
  transition: color .15s;
}
html .rep-state.dirty { color: var(--gold); }
html .rep-state.saved { color: var(--ok); }

/* 标题右侧的周范围（.section-count 已在 V63 定义，此处仅调间距） */
html .sched-rep .section-count { padding-left: 10px; }

/* —— 4) 窄屏：按钮条换行不挤压 —— */
@media (max-width: 720px) {
  html .rep-form { padding: 2px 14px; }
  html .sched-rep .sched-rep-bar .spacer { display: none; }
}

/* ============================================================
   V66（2026-10-09）重点项目重构：
   1) 表单三列布局  2) 超一周未联系提醒（总览卡 + 徽标 + 筛选 chip）
   3) 项目进度 / 领导支持事项长文本截断  4) 负责人下拉与筛选行细节
   ============================================================ */

/* —— 1) 表单三列（金额/联系人/电话一行） —— */
html .form-3 { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; }
@media (max-width: 720px) { html .form-3 { grid-template-columns: 1fr; } }

/* —— 2) 超一周未联系 —— */
html .stat.stat-alert { border-top-color: var(--danger); }
html .stat.stat-alert.has-stale { background: var(--danger-bg); }
html .stat.stat-alert:hover { transform: translateY(-1px); box-shadow: var(--sh-2); }
html .stat.stat-alert .stat-value.txt-danger { color: var(--danger); }
html .stale-badge { margin-left: 4px; font-weight: 600; }
html .chip.warn { color: var(--danger); border-color: var(--danger-bg); }
html .chip.warn.on { background: var(--danger-bg); border-color: var(--danger); color: var(--danger); }

/* —— 3) 长文本单元格：单行截断，悬浮看全文（title 已在渲染侧给出） —— */
html .invest-table td.prog-cell {
  max-width: 240px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* —— 4) 筛选行：下拉与 chips 垂直居中对齐 —— */
html .filter-bar select.inp { min-width: 110px; }
html .invest-table td { vertical-align: middle; }

/* ============================================================
   V67（2026-10-09）
   1) 重点项目：筛选为空时保留筛选行与表壳（空态提示居中）
   2) 灵感速记：速记框 + 条目式灵感列表
   ============================================================ */

/* —— 1) 重点项目空态 —— */
html .invest-table td.empty-cell { text-align: center; }

/* —— 2) 灵感速记 —— */
html .idea-quick { margin-bottom: 4px; }
html .idea-quick .ta { min-height: 56px; margin-bottom: 8px; }
html .idea-quick-bar { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
html .idea-item {
  display: flex;
  align-items: flex-start;
  gap: 12px;
  padding: 12px 2px;
  border-bottom: 1px solid var(--border);
}
html .idea-item:last-child { border-bottom: none; }
html .idea-main { flex: 1; min-width: 0; cursor: pointer; }
html .idea-text {
  font-size: 14px;
  line-height: 1.7;
  white-space: pre-wrap;
  word-break: break-word;
}
html .idea-meta {
  display: flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
  margin-top: 5px;
}
html .idea-actions { display: flex; align-items: center; gap: 2px; flex-shrink: 0; }
html .idea-item.applied .idea-text { color: var(--text-3); }

/* ============================================================
   V68（2026-10-09）重点项目表格精修：
   1) 行距收窄  2) 客户/项目名称两行截断  3) 阶段只显字母
   4) 项目进度 / 领导支持事项 单元格可直接点击编辑
   ============================================================ */

/* —— 1) 行距收窄 —— */
html .invest-table tbody td { padding-top: 5px; padding-bottom: 5px; line-height: 1.5; }

/* —— 2) 名称类单元格：最多两行，超出省略 —— */
html .invest-table .clamp2 {
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
  word-break: break-all;
  line-height: 1.45;
}

/* —— 3) 阶段字母标签：小方块居中 —— */
html .invest-table .stage-letter {
  display: inline-block;
  min-width: 24px;
  padding: 2px 6px;
  text-align: center;
  font-weight: 600;
}

/* —— 4) 可编辑单元格：虚线底 + hover 提示 —— */
html .invest-table td.qe-cell { cursor: pointer; }
html .invest-table td.qe-cell .clamp2 { border-bottom: 1px dashed var(--border-2); display: -webkit-box; }
html .invest-table td.qe-cell:hover { background: var(--accent-bg); }
html .invest-table td.qe-cell:hover .clamp2 { border-bottom-color: var(--accent-3); }

/* ============================================================
   V69（2026-10-09）重点项目微调：
   1) 进度 / 支持事项格去掉虚线，空值改「点击填写…」灰字占位（同企业库）
   ============================================================ */
html .invest-table td.qe-cell .clamp2 { border-bottom: none; }
html .invest-table td.qe-cell:hover .clamp2 { border-bottom: none; }
html .qe-hint { font-size: 12px; color: var(--text-3); }
html .invest-table td.qe-cell:hover .qe-hint { color: var(--accent-3); }

/* ============================================================
   V70（2026-10-09）
   1) 重点项目：联系电话列不在展示页渲染（编辑弹窗仍保留字段）
   2) 日报周报：新增「会议纪要」卡片区（主题/参会人/时间/2-3 行摘要）
   ============================================================ */

/* —— 会议纪要 —— */
html .meet-sec { margin-top: 14px; }
html .meet-sec .section-title { display: flex; align-items: center; gap: 8px; }
html .meet-sec .section-count { float: none; margin-left: auto; font-size: 12px; color: var(--text-3); }
html .meet-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(268px, 1fr)); gap: 12px; margin-top: 12px; }
html .meet-card {
  padding: 12px 14px;
  border: 1px solid var(--border);
  border-radius: var(--r-2, 10px);
  background: var(--surface-2, #fff);
  cursor: pointer;
  transition: border-color .15s, box-shadow .15s, transform .15s;
}
html .meet-card:hover { border-color: var(--accent-3); box-shadow: var(--sh-2); transform: translateY(-1px); }
html .meet-topic { font-size: 14px; font-weight: 600; line-height: 1.5; margin-bottom: 6px; }
html .meet-meta { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
html .meet-meta .meet-att { max-width: 180px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
html .meet-sum { margin-top: 6px; font-size: 13px; color: var(--text-2); line-height: 1.65; }
html .meet-sum.meet-empty { color: var(--text-3); }
/* 日历：当日有纪要用橙色小圆点（与周报绿点区分） */
html .rep-cal-dot.meet { background: var(--gold, #E39B27); left: 5px; right: auto; }

/* ============================================================
   V71（2026-10-09）行程安排按法定节假日呈现：
   假期日标「休」（淡红列底）· 调休上班周末标「班」（淡金列底）
   · 普通周末不显示列
   ============================================================ */
html .sched-flag { font-size: 11px; padding: 1px 6px; margin-left: 2px; }
html .sched-day.is-holiday { background: var(--danger-bg, #FDEEEE); border-radius: var(--r-2, 10px); }
html .sched-day.is-makeup { background: rgba(227, 155, 39, 0.08); border-radius: var(--r-2, 10px); }

/* ---------- V71.2（2026-10-09）· 已归档表格行距收紧 ----------
   归档列表只读展示，行距压紧与主表区分 */
html .arch-tbl td { padding: 4px 10px; vertical-align: middle; line-height: 1.4; }
html .arch-tbl td .tbl-act { gap: 2px; }
html .arch-wrap { min-height: 0; resize: none; }

/* ---------- V72（2026-10-09）· 会议纪要 ↔ 行程绑定 ---------- */
html .sched-view-meet { display: inline-block; margin: 2px 0 8px; }
html .meet-sched { max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* ---------- V72b（2026-10-09）· 品牌标题：阿里巴巴普惠体 + 字号调大 ----------
   子集来源 AlibabaPuHuiTi-3-75-SemiBold（GB2312 子集再抽 4 汉字 + CHU，1.7KB），
   免费商用授权（alibabafonts.com） */
@font-face {
  font-family: 'Alibaba PuHuiTi';
  src: url('fonts/PuHuiTi-Bold-sub.woff2') format('woff2');
  font-weight: 600 900;
  font-display: swap;
}
html .brand-sub {
  font-family: 'Alibaba PuHuiTi', 'PingFang SC', 'Microsoft YaHei', sans-serif;
  font-size: 17px;
  font-weight: 800;
  letter-spacing: 1px;
}

/* ---------- V73c（2026-10-09）· 日报日历点亮标记 ----------
   日报=居中蓝点；日报+会议纪要=整块主色蓝、数字白字；仅纪要/周报维持原点 */
html .rep-cal-dot.daily { right: 50%; transform: translateX(50%); }
html .rep-cal-cell.both { background: var(--accent); border-color: var(--accent); }
html .rep-cal-cell.both .rep-cal-d { color: #fff; font-weight: 700; }
html .rep-cal-cell.both.weekend:hover { background: var(--accent); }
html .rep-cal-cell.both .rep-cal-dot { display: none; }

/* ---------- V76（2026-10-09）· 表格定宽断行 + 日历外框标记 + 企业名录格子编辑 ----------
   1) 重点项目表：固定布局贴合容器宽度，内容按篇幅自动断行（不再一行拉到底出横向滚动条） */
html .invest-table { table-layout: fixed; }
html .invest-table td,
html .invest-table th { white-space: normal; word-break: break-word; overflow-wrap: anywhere; }
html .invest-table td { overflow: visible; text-overflow: clip; }

/* 2) 日报月历：有日报或会议纪要任一 → 数字外框变蓝（去掉中间圆点）；两者都有仍为整块蓝白字 */
html .rep-cal-cell.mark { border-color: var(--accent); border-width: 1.5px; }
html .rep-cal-cell.mark.weekend { background: var(--surface-2); }
html .rep-cal-cell.mark.weekend:hover { background: var(--surface-2); }

/* 3) 企业名录：固定布局 + 四列居中 + 行垂直居中 + 全行格子点击编辑 */
html .org-table { table-layout: fixed; font-size: 12.5px; }
html .org-table th { text-align: left; }
html .org-table td,
html .org-table th { white-space: normal; word-break: break-word; overflow-wrap: anywhere; }
html .org-table td { vertical-align: middle; overflow: visible; text-overflow: clip; }
html .org-table td.qe-cell { cursor: pointer; }
html .org-table td.qe-cell:hover { background: var(--accent-bg); }
html .org-table td.qe-cell:hover .qe-hint { color: var(--accent-3); }
html .org-table .clamp2 { display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; word-break: break-all; line-height: 1.45; }
/* V98.66（2026-11-01）：「产业上下游」列下线，下游内容接在「主营业务」下方——虚线分隔 + 缩进，可点击单独编辑上下游 */
html .org-table .org-down { margin-top: 5px; padding-top: 4px; border-top: 1px dashed var(--line, #e5e0d3); cursor: pointer; }
html .org-table .org-down:hover { color: var(--accent-3); }

/* ---------- V76b（2026-10-09）· 月历去周报绿点 + 重点项目表去横向滚动条 ---------- */
/* 月历：所有标记圆点全部移除（日报/纪要=蓝外框，双有=蓝块白字，周报=浅蓝外框），仅保留样式兜底 */
html .rep-cal-cell .rep-cal-dot { display: none; }
/* 重点项目/企业名录表：容器禁横向滚动，表格百分比列宽固定贴合页面 */
html .invest-wrap, html .org-wrap { overflow-x: hidden; }
html .invest-table, html .org-table { min-width: 0; }

/* ---------- V76c（2026-10-09）· 企业名录行高约 2 行半 ---------- */
html .org-table .clamp2 { -webkit-line-clamp: 3; line-height: 1.4; }

/* ---------- V76e（2026-10-10）· 长文列字体小一号 ----------
   重点项目「项目进度/领导支持事项」两列、企业名录「主营业务→沟通内容」五列：12.5px → 11.5px */
html .invest-table td.qe-cell { font-size: 11.5px; }
html .invest-table td.qe-cell .qe-hint { font-size: 11px; }
html .org-table td:nth-child(n+5) { font-size: 11.5px; }
html .org-table td:nth-child(n+5) .qe-hint { font-size: 11px; }

/* ---------- V78（2026-10-10）· 公司清单卡片 ---------- */
html .cl-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 10px; }
html .cl-card {
  background: var(--surface); border: 1px solid var(--border); border-radius: 10px;
  padding: 10px 12px; display: flex; flex-direction: column; gap: 5px;
  transition: box-shadow .12s, transform .12s;
}
html .cl-card:hover { box-shadow: var(--sh-2); transform: translateY(-1px); }
html .cl-top { display: flex; align-items: center; justify-content: space-between; gap: 8px; min-height: 18px; }
html .cl-title { font-size: 13px; font-weight: 600; line-height: 1.45; word-break: break-word; }
html .cl-sub { font-size: 11.5px; color: var(--accent-3); word-break: break-word; }
html .cl-line { font-size: 11.5px; color: var(--text-2); line-height: 1.5; word-break: break-word; }
html .cl-extra { font-size: 11px; color: var(--text-3); line-height: 1.5; word-break: break-word; }
html .cl-acts { display: flex; gap: 6px; margin-top: 4px; opacity: .55; transition: opacity .12s; }
html .cl-card:hover .cl-acts { opacity: 1; }
html .cl-empty { grid-column: 1 / -1; text-align: center; color: var(--text-3); padding: 22px 10px; border: 1px dashed var(--border); border-radius: 10px; font-size: 12.5px; }
html .btn.xs { padding: 2px 8px; font-size: 11.5px; }

/* ---------- V79（2026-10-10）· 企业名录内容全文展示 ----------
   参照「汇报材料」式排版：内容格不再按行数截断，按篇幅自动断行完整显示，
   行高随内容自然撑开（垂直居中不变），表格仍定宽贴合页面、无横向滚动。 */
html .org-table .clamp2 {
  display: block;
  -webkit-line-clamp: unset;
  -webkit-box-orient: initial;
  overflow: visible;
  white-space: pre-wrap;
}

/* ---------- V80（2026-10-10）· 公司清单卡片去按钮行，点标题编辑 ---------- */
html .cl-title { cursor: pointer; transition: color .12s; }
html .cl-title:hover { color: var(--accent-3); text-decoration: underline; text-underline-offset: 3px; }
html .cl-card .cl-acts { display: none; }

/* ---------- V81（2026-10-10）· 搜索框圆角 ---------- */
html #org-search, html #cl-search {
  border-radius: 17px;
  padding: 5px 14px !important;
}
html #org-search:focus, html #cl-search:focus {
  box-shadow: 0 0 0 2.5px var(--accent-bg);
}

/* ---------- V82（2026-10-10）· 搜索框描边降调为浅灰 ---------- */
html #org-search, html #cl-search { border-color: var(--border); }
html #org-search:hover, html #cl-search:hover { border-color: var(--border-2); }
html #org-search:focus, html #cl-search:focus { border-color: var(--border-2); box-shadow: 0 0 0 2.5px var(--accent-bg); }

/* ---------- V84（2026-10-10）· 搜索框统一浅灰细线 ---------- */
html #org-search, html #cl-search {
  border: 1px solid var(--border) !important;
  box-shadow: none;
}
html #org-search:hover, html #cl-search:hover { border-color: #D8D5CF !important; }
html #org-search:focus, html #cl-search:focus {
  border-color: #C9C5BE !important;
  box-shadow: 0 0 0 2px rgba(46, 92, 255, .07) !important;
}

/* ---------- V87（2026-10-10）· 公司清单卡片行距放宽 ---------- */
html .cl-card { padding: 13px 15px; gap: 8px; }
html .cl-title { line-height: 1.55; }
html .cl-sub { line-height: 1.55; }
html .cl-line { line-height: 1.6; }
html .cl-extra { line-height: 1.55; }
html .cl-grid { gap: 12px; }

/* ---------- V88（2026-10-10）· 公司清单标题间距 + 公司里程碑时间轴 ---------- */
/* 分组标题与下方卡片的间距放宽（标题与上一组卡片之间也拉开） */
html .cl-sec { margin-top: 30px; margin-bottom: 16px; }
html .cl-sec:first-of-type { margin-top: 6px; }

/* 公司里程碑时间轴：竖向导轨 + 节点圆点 + 向下箭头逐条展开 */
html .mile-timeline { max-height: 60vh; overflow-y: auto; padding: 4px 6px 4px 2px; }
html .mile-item { display: flex; gap: 12px; }
html .mile-item:last-child .mile-arrow { visibility: hidden; }
html .mile-rail { display: flex; flex-direction: column; align-items: center; width: 18px; flex-shrink: 0; }
html .mile-dot {
  width: 11px; height: 11px; border-radius: 50%; margin-top: 5px; flex-shrink: 0;
  background: var(--accent); border: 2.5px solid var(--accent-bg); box-shadow: 0 0 0 1.5px var(--accent);
}
html .mile-arrow { color: var(--accent-3); font-size: 13px; line-height: 1; padding: 3px 0 6px; opacity: .75; }
html .mile-body { flex: 1; padding: 0 0 18px 2px; border-bottom: 1px dashed var(--border); }
html .mile-item:last-child .mile-body { border-bottom: none; padding-bottom: 4px; }
html .mile-date { display: inline-block; font-size: 11.5px; font-weight: 700; color: var(--accent-3); background: var(--accent-bg); border-radius: 9px; padding: 1px 9px; margin-bottom: 5px; }
html .mile-title { font-size: 13.5px; font-weight: 600; line-height: 1.5; cursor: pointer; word-break: break-word; }
html .mile-title:hover { color: var(--accent-3); text-decoration: underline; text-underline-offset: 3px; }
html .mile-desc { font-size: 12px; color: var(--text-2); line-height: 1.6; margin-top: 4px; word-break: break-word; }

/* ---------- V91（2026-10-10）· 公司清单卡片行距收紧 ---------- */
html .cl-card { padding: 10px 13px; gap: 4px; }
html .cl-title { line-height: 1.4; }
html .cl-sub { line-height: 1.4; }
html .cl-line { line-height: 1.42; }
html .cl-extra { line-height: 1.4; }
html .cl-grid { gap: 9px; }
html .cl-sec { margin-top: 24px; margin-bottom: 12px; }

/* ---------- V92（2026-10-10）· 行程时段快捷选项 ---------- */
html .sched-chip {
  border: 1px solid var(--border); background: var(--surface); border-radius: 13px;
  padding: 2px 11px; font-size: 12px; color: var(--text-2); cursor: pointer; transition: all .12s;
}
html .sched-chip:hover { border-color: var(--border-2); color: var(--text); }
html .sched-chip.on { background: var(--accent-bg); border-color: var(--accent); color: var(--accent-3); font-weight: 600; }
html .sched-time.sched-period { color: var(--accent-3); font-weight: 600; }

/* ---------- V92b（2026-10-10）· 「时间待定」用深红色 ---------- */
html .sched-time.sched-period { color: #C0392B; }
html .sched-time.sched-tbd { color: #C0392B; font-weight: 600; }

/* ---------- V94（2026-10-10）· 里程碑时间轴去虚线、行距放宽 ---------- */
html .mile-body { border-bottom: none; padding-bottom: 30px; }
html .mile-item:last-child .mile-body { padding-bottom: 4px; }
html .mile-arrow { padding: 4px 0 10px; }

/* ---------- V96（2026-10-10）· 江夏资源 / 培育梯度可折叠 ---------- */
html .section-title[data-act="ent-res-fold"]:hover,
html .section-title[data-act="ent-qual-fold"]:hover { color: var(--accent-3); }

/* ---------- V98.3（2026-10-10）· 企业库表格改版：删「是否建联」列、增「企业简介」列 ---------- */
/* 简介预览：三行截断 + 保留三段式换行（与 ent-service-preview 的 pre-wrap 叠加） */
html .ent-table .clamp2 {
  display: -webkit-box;
  -webkit-line-clamp: 3;
  -webkit-box-orient: vertical;
  overflow: hidden;
  word-break: break-all;
  line-height: 1.5;
}

/* ---------- V98.4（2026-10-10）· 企业表：px→% 定宽去横向滚动条、左侧列含名称居中、整行垂直居中、简介完整呈现 ---------- */
html .ent-table { table-layout: fixed; width: 100%; min-width: 0; }
html .ent-table th,
html .ent-table td { white-space: normal; word-break: break-word; overflow-wrap: anywhere; }
html .ent-table td { vertical-align: middle; }
html .ent-table thead th:nth-child(-n+5),
html .ent-table tbody td:nth-child(-n+5) { text-align: center; }
html .ent-name-cell { text-align: center; }
html .ent-name-cell .ent-name { display: inline-block; text-align: center; word-break: break-all; }
html .ent-honors-cell { justify-content: center; text-align: center; }
html .ent-wrap { overflow-x: hidden; }
html .ent-table .ent-intro-full { white-space: pre-wrap; word-break: break-word; line-height: 1.55; }

/* ---------- V98.5（2026-10-10）· 企业表：去 ▲▼ 上下移按钮、荣誉列居中加固 ---------- */
html .ent-table td.ent-honors-cell { justify-content: center !important; text-align: center !important; }
html .ent-table td.ent-honors-cell .tag { margin: 0; }
html .seq-cell .seq-num { margin: 0; }

/* ---------- V98.6（2026-10-10）· 企业表：简介领起词加粗、荣誉格行内垂直居中 ---------- */
/* 荣誉格此前 display:flex 使 vertical-align 失效（标签顶行首），恢复 table-cell + 垂直居中，徽标改行内排列 */
html .ent-table td.ent-honors-cell { display: table-cell; vertical-align: middle; }
html .ent-table td.ent-honors-cell .tag { margin: 1px 2px; }
/* 简介领起词（主营业务：/企业产品：/上游：等）加粗 */
html .ent-intro-full b { font-weight: 700; }

/* ---------- V98.7（2026-10-10）· 简介领起词加深，与正文拉开层次 ---------- */
html .ent-intro-full b { font-weight: 700; color: var(--text); }

/* ---------- V98.8（2026-10-11）· 企业名录表头行距居中（全局 th 为 top，此前只覆盖了 td） ---------- */
html .org-table thead th { vertical-align: middle; }

/* ==================== V98.20（2026-10-16）：数字统一规范 ====================
   阿包要求：所有数字的 0 不带斜杠、与统计卡数字一致（苹方/雅黑圆润字形）。
   原 .mono/code/.stat-value 走 SF Mono→Consolas 等宽栈，Windows 回落 Consolas（0 带斜杠）。
   此覆盖层统一改为正文苹方字体栈，保留 tnum 等宽数字特性（多位数仍上下对齐）。 */
html .mono, html code, html .stat-value {
  font-family: "PingFang SC", "SF Pro Display", -apple-system,
    "Microsoft YaHei", "Segoe UI", "Noto Sans SC", Arial, sans-serif;
  font-feature-settings: "tnum" 1;
}

/* ---------- V98.23b（2026-10-16）· 行程卡片标题小一号（阿包反馈） ---------- */
html .sched-title { font-size: 12px; }

/* ---------- V98.27（2026-10-16）· 参会人快捷名单 chips ---------- */
html .pick-chip { cursor: pointer; user-select: none; font-size: 11.5px; padding: 3px 9px; }
html .pick-chip.on { background: var(--accent); border-color: transparent; color: #fff; }

/* ==================== V98.29（2026-10-17）：卡片高度压缩约 1/3 ====================
   阿包反馈：卡片太高，整体再压三分之一。
   四个高频卡片区统一收：①行程安排·每日栏 + 行程条（v1）
                             ②会议纪要卡（v2）
                             ③公司清单卡（v3）
                             ④荣誉资质条目的行距（v4）
   口径：纵向 padding/行高/间距按 ×0.67 收，字号不动（保证可读性）。
   原规则留在上游，本节为覆盖层，删除本段即可完整回滚。 */

/* ① 行程安排 */
html .sched-day { min-height: 120px; }
html .sched-day-head { padding: 5px 10px; line-height: 1.45; }
html .sched-items { padding: 5px 6px; }
html .sched-item { padding: 5px 8px; margin-bottom: 5px; border-radius: 7px; }
html .sched-item-top { gap: 6px; }
html .sched-title { line-height: 1.35; }
html .sched-attendees { margin-top: 1px; line-height: 1.3; }
html .sched-empty { padding: 11px 8px; }

/* ② 会议纪要卡 */
html .meet-card { padding: 8px 11px; }
html .meet-topic { margin-bottom: 4px; line-height: 1.4; }
html .meet-sum { margin-top: 4px; line-height: 1.5; }

/* ③ 公司清单卡 */
html .cl-card { padding: 8px 12px; gap: 3px; }
html .cl-top { min-height: 15px; }
html .cl-title { line-height: 1.4; }
html .cl-sub { line-height: 1.4; }
html .cl-line, html .cl-extra { line-height: 1.4; }
html .cl-grid { gap: 9px; }
html .cl-sec { margin-top: 20px; margin-bottom: 10px; }

/* ④ 复用信息卡（V98.30→V98.30b，阿包指定重点）：统一固定高度，长文渐隐截断 */
html .info-card { height: 108px; min-height: 0; padding: 10px 12px; overflow: hidden; }
html .info-top { margin-bottom: 2px; align-items: center; }
html .info-name { line-height: 1.4; }
html .info-body { margin-top: 4px; line-height: 1.45; }
html .info-row { margin-top: 2px; line-height: 1.45; }
html .info-note { margin-top: 3px; line-height: 1.45; }
html .info-grid { gap: 9px; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); }


/* ============ V98.33 会议纪要所见即所得编辑器 ============ */
/* 设计原则（阿包 2026-10-19 明确）：正文就是正文，不加边框、不改行距、不显示任何标记符号；
   加粗只是把字变粗，选中即所见。工具条单独一条细线，不侵入输入区。 */

/* 编辑区容器：一条浅色描边包住「工具条 + 输入区」，看起来像一个整体输入框 */
.rte-box {
  border: 1px solid var(--border);
  border-radius: 8px;
  background: var(--surface);
  overflow: hidden;
}
.rte-box:focus-within { border-color: var(--accent); box-shadow: 0 0 0 3px rgba(46,92,255,.10); }

/* 工具条：贴顶一条，底色略浅，与输入区分开但不抢眼 */
.rte-bar {
  display: flex; align-items: center; gap: 3px; flex-wrap: wrap;
  padding: 4px 6px;
  background: var(--surface-2, rgba(46,92,255,.045));
  border-bottom: 1px solid var(--border);
}
.rte-b {
  display: inline-flex; align-items: center; justify-content: center;
  min-width: 26px; height: 24px; padding: 0 7px;
  border: 1px solid transparent; border-radius: 5px; cursor: pointer;
  font-size: 12px; line-height: 1; color: var(--text-2); background: transparent;
  font-family: inherit;
}
.rte-b:hover { color: var(--accent); background: rgba(46,92,255,.09); }
.rte-b.on { color: var(--accent); background: rgba(46,92,255,.14); border-color: rgba(46,92,255,.28); }
.rte-b b, .rte-b i, .rte-b u { font-size: 13px; }
.rte-b b { font-weight: 800; }
.rte-sep { width: 1px; height: 14px; margin: 0 3px; background: var(--border); }
.rte-sel {
  height: 24px; padding: 0 4px; border-radius: 5px; cursor: pointer;
  font-size: 12px; color: var(--text-2); background: transparent;
  border: 1px solid transparent; font-family: inherit;
}
.rte-sel:hover { color: var(--accent); background: rgba(46,92,255,.09); }

/* 输入区：完全按原生文档流走，行距与 .rep-preview-text 一致，不加任何装饰 */
.rte {
  position: relative;
  padding: 9px 11px;
  min-height: 60px;
  font-size: 13px; line-height: 1.7; color: var(--text);
  outline: none;
  word-break: break-word;
  overflow-y: auto;
}
.rte:empty::before,
.rte.ph::before {
  content: attr(data-ph);
  color: var(--text-3);
  pointer-events: none;
}
.rte div, .rte p { margin: 0; }
.rte h3 {
  font-size: 13.5px; font-weight: 700; color: var(--text);
  margin: 9px 0 3px; letter-spacing: .2px;
}
.rte h3:first-child { margin-top: 0; }
.rte ul, .rte ol { margin: 4px 0; padding-left: 20px; }
.rte li { margin: 1px 0; }
.rte b, .rte strong { font-weight: 700; }
.rte img {
  display: block; max-width: 100%; max-height: 300px; width: auto;
  margin: 7px 0; border-radius: 7px; border: 1px solid var(--border);
  object-fit: contain; background: var(--surface-2, rgba(46,92,255,.05));
}

/* 只读视图：卡片与预览里的正文 */
.rte-view { font-size: 13px; line-height: 1.7; color: var(--text); word-break: break-word; }
.rte-view div, .rte-view p { margin: 0; }
.rte-view h3 { font-size: 13.5px; font-weight: 700; margin: 9px 0 3px; letter-spacing: .2px; }
.rte-view h3:first-child { margin-top: 0; }
.rte-view ul, .rte-view ol { margin: 4px 0; padding-left: 20px; }
.rte-view li { margin: 1px 0; }
.rte-view b, .rte-view strong { font-weight: 700; }
.rte-view .rt-img {
  display: block; max-width: 100%; max-height: 340px; width: auto;
  margin: 8px 0; border-radius: 8px; border: 1px solid var(--border);
  cursor: zoom-in; object-fit: contain; background: var(--surface);
}

/* 会议卡摘要全文块（点「全文」展开） */
.meet-sum-full {
  font-size: 13px; line-height: 1.7; color: var(--text);
  padding: 8px 10px; margin-bottom: 10px; border-radius: 7px;
  background: rgba(46,92,255,.05); border-left: 3px solid var(--accent);
}
.meet-sum-full div, .meet-sum-full p { margin: 0; }

/* 大图遮罩（层级高于弹窗） */
.rt-zoom-mask {
  position: fixed; inset: 0; z-index: 9999; display: none;
  background: rgba(8, 14, 30, .88); cursor: zoom-out;
  align-items: center; justify-content: center; padding: 24px;
}
.rt-zoom-mask.show { display: flex; }
.rt-zoom-mask img { max-width: 96vw; max-height: 92vh; border-radius: 6px; box-shadow: 0 18px 50px rgba(0,0,0,.5); }

/* ============================================================
   V98.34 每日新闻简讯（总览页最下方通栏）
   ------------------------------------------------------------
   布局：顶部「标题 + 日期 + 条数」一行，右侧日期 chip 可切换（最多 7 天）；
         正文两列自适应网格，窄屏自动落一列。
   口径：单条正文 ≤200 字，5 行后渐隐；卡片不定高，让长文自然展开（通栏有空间）。
   ============================================================ */
.digest-card { margin-top: 16px; }

.digest-top {
  display: flex; align-items: center; gap: 12px; flex-wrap: wrap;
  padding-bottom: 10px; margin-bottom: 12px;
  border-bottom: 1px solid var(--border);
}
.digest-title {
  display: flex; align-items: baseline; gap: 8px;
  font-size: 15px; font-weight: 700; color: var(--text);
  letter-spacing: .2px;
}
.digest-date {
  font-size: 12px; font-weight: 600; color: var(--accent-3);
  background: var(--accent-bg); padding: 2px 8px; border-radius: 999px;
}
.digest-count { font-size: 11px; font-weight: 400; color: var(--text-3); }

.digest-chips { display: flex; gap: 6px; flex-wrap: wrap; margin-left: auto; }
.digest-chip {
  font-size: 11px; font-family: inherit; cursor: pointer;
  padding: 3px 9px; border-radius: 999px; line-height: 1.5;
  color: var(--text-2); background: var(--surface-2);
  border: 1px solid var(--border);
  transition: all .15s ease;
}
.digest-chip:hover { border-color: var(--accent-2); color: var(--accent-3); }
.digest-chip.on {
  background: var(--accent-bg); border-color: var(--accent-2);
  color: var(--accent-3); font-weight: 600;
}

.digest-grid {
  display: grid; gap: 10px;
  grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));
}
.digest-item {
  padding: 10px 12px; border-radius: 8px;
  background: var(--surface-2);
  border: 1px solid var(--border);
  border-left: 3px solid var(--accent-2);
  transition: border-color .15s ease, background .15s ease;
}
.digest-item:hover { background: var(--mint-bg); border-left-color: var(--accent); }

.digest-h { display: flex; align-items: flex-start; gap: 7px; margin-bottom: 5px; }
.digest-no {
  flex: 0 0 auto; min-width: 17px; height: 17px; margin-top: 1px;
  display: inline-flex; align-items: center; justify-content: center;
  font-size: 10px; font-weight: 700; line-height: 1;
  color: var(--accent-3); background: var(--accent-bg);
  border-radius: 5px; padding: 0 4px;
}
.digest-t {
  font-size: 13px; font-weight: 600; line-height: 1.5; color: var(--text);
}
.digest-c {
  font-size: 12.5px; line-height: 1.62; color: var(--text-2);
  text-align: justify;
}
.digest-s {
  margin-top: 5px; font-size: 10.5px; color: var(--text-3);
}

@media (max-width: 760px) {
  .digest-grid { grid-template-columns: 1fr; }
  .digest-chips { margin-left: 0; }
}

/* V98.34b 折叠版：折叠态渐隐收边 + 展开按钮 */
.digest-grid.folded { position: relative; }
.digest-grid.folded::after {
  content: ""; position: absolute; left: 0; right: 0; bottom: 0; height: 56px;
  background: linear-gradient(180deg, rgba(255,255,255,0) 0%, var(--surface) 92%);
  pointer-events: none;
}
.digest-toggle {
  display: flex; align-items: center; gap: 6px; margin: 12px auto 0;
  font-size: 12.5px; color: var(--accent-3); cursor: pointer;
  padding: 5px 16px; border-radius: 999px;
  border: 1px solid var(--border); background: var(--surface-2);
}
.digest-toggle:hover { border-color: var(--accent-2); background: var(--accent-bg); }
.digest-arrow { font-size: 9px; }

/* 一键复制按钮（简讯卡标题右侧） */
.digest-copy {
  font-size: 11.5px; cursor: pointer; margin-left: 10px;
  padding: 2px 10px; border-radius: 999px;
  color: var(--accent-3); border: 1px solid var(--border);
  background: var(--surface); vertical-align: 2px;
}
.digest-copy:hover { background: var(--accent-bg); border-color: var(--accent-2); }

.digest-title { white-space: nowrap; }

/* ============================================================
   V98.39 信息库 · 方案 B（左列表 + 右详情）
   ------------------------------------------------------------
   布局：左侧 268px 窄栏（分类 chip + 条目列表，内部可滚动），
         右侧详情面板；900px 以下退化为上下堆叠。
   交互：点列表项只刷新右栏（不整页重绘），密码默认掩码点 👁 显示，
         每个字段右侧 ⧉ 单独复制（默认半透明，hover 至实色）。
   ============================================================ */
.info-split {
  display: grid;
  grid-template-columns: 268px minmax(0, 1fr);
  gap: 14px;
  align-items: start;
}

/* ---------- 左栏 ---------- */
.info-side {
  position: sticky; top: 6px;
  display: flex; flex-direction: column; gap: 8px;
  max-height: calc(100vh - 148px);
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--r-m);
  padding: 10px 8px 8px;
  box-shadow: var(--sh-1);
  overflow: hidden;
}
.info-cats {
  display: flex; flex-wrap: wrap; gap: 4px;
  padding: 0 2px 8px;
  border-bottom: 1px solid var(--border);
  max-height: 92px; overflow-y: auto; flex-shrink: 0;
}
.info-cat {
  font-family: inherit; font-size: 11.5px; line-height: 1.6;
  cursor: pointer; white-space: nowrap;
  padding: 1px 8px; border-radius: 999px;
  color: var(--text-2); background: var(--surface-2);
  border: 1px solid var(--border);
  transition: all .13s ease;
}
.info-cat:hover { border-color: var(--accent-2); color: var(--accent-3); }
.info-cat.on {
  background: var(--accent-bg); border-color: var(--accent-2);
  color: var(--accent-3); font-weight: 600;
}
.info-list {
  flex: 1; min-height: 0; overflow-y: auto;
  display: flex; flex-direction: column; gap: 1px;
}
.info-li {
  display: flex; align-items: center; gap: 8px;
  width: 100%; text-align: left; cursor: pointer;
  font-family: inherit; font-size: 12.5px; line-height: 1.45;
  padding: 6px 8px; border-radius: 7px;
  background: transparent; border: 1px solid transparent; color: var(--text);
  transition: background .12s, border-color .12s;
}
.info-li:hover { background: var(--surface-2); }
.info-li.on {
  background: var(--accent-bg); border-color: var(--accent-2);
  color: var(--accent-3); font-weight: 600;
}
.info-li-n { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.info-li-c { flex: 0 0 auto; font-size: 10px; font-weight: 400; color: var(--text-3); }
.info-li.on .info-li-c { color: var(--accent-3); opacity: .8; }
.info-list-empty { font-size: 12px; color: var(--text-3); padding: 12px 8px; }

/* ---------- 右详情 ---------- */
.info-main { min-width: 0; }
.info-detail {
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--r-m);
  box-shadow: var(--sh-1);
  padding: 16px 20px 16px;
}
.info-d-head {
  display: flex; align-items: flex-start; gap: 12px; flex-wrap: wrap;
  padding-bottom: 12px; border-bottom: 1px solid var(--border);
}
.info-d-title { flex: 1; min-width: 0; display: flex; align-items: center; gap: 9px; flex-wrap: wrap; }
.info-d-name { margin: 0; font-size: 17px; font-weight: 700; line-height: 1.4; color: var(--text); }
.info-d-acts { display: flex; gap: 6px; flex-wrap: wrap; margin-left: auto; }

.info-d-rows { margin-top: 10px; display: flex; flex-direction: column; }
.info-d-row {
  display: flex; align-items: center; gap: 10px;
  padding: 6px 8px; border-radius: 7px;
}
.info-d-row:hover { background: var(--surface-2); }
.info-d-k { flex: 0 0 76px; font-size: 12px; color: var(--text-3); }
.info-d-mid { flex: 1; min-width: 0; display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.info-d-v { font-size: 13.5px; color: var(--text); word-break: break-all; }
.info-d-v.link { color: var(--accent-3); text-decoration: none; }
.info-d-v.link:hover { text-decoration: underline; }
.info-d-cp { opacity: .25; transition: opacity .12s; }
.info-d-row:hover .info-d-cp { opacity: 1; }

.info-d-block {
  position: relative; margin-top: 12px;
  padding: 11px 13px; border-radius: 8px;
  background: var(--surface-2); border: 1px solid var(--border);
}
.info-d-block-cp { position: absolute; top: 5px; right: 5px; opacity: .45; }
.info-d-block-cp:hover { opacity: 1; }
.info-d-text {
  font-size: 13.5px; line-height: 1.85; color: var(--text-2);
  white-space: pre-wrap; word-break: break-word;
}
.info-d-note {
  margin-top: 12px; padding: 10px 13px;
  border-radius: 8px; background: var(--mint-bg); border: 1px solid var(--border);
}
.info-d-note .info-d-k { display: block; margin-bottom: 3px; }
.info-d-blank { margin-top: 14px; font-size: 12.5px; color: var(--text-3); }
.info-d-foot { margin-top: 12px; font-size: 11px; color: var(--text-3); }

@media (max-width: 900px) {
  .info-split { grid-template-columns: 1fr; }
  .info-side { position: static; max-height: 300px; }
  .info-d-k { flex-basis: 64px; }
  .info-detail { padding: 14px 14px; }
}

/* V98.39b 详情行微调：复制图标紧跟值、常显半透明、行内小图标收小到 22px */
.info-d-mid { flex-wrap: nowrap; }
.info-d-row .icon-btn { width: 22px; height: 22px; font-size: 12px; }
.info-d-cp { opacity: .35; }
.info-d-row:hover .info-d-cp { opacity: 1; }
.info-d-v { overflow-wrap: anywhere; }

.info-list { padding-bottom: 4px; }

/* ============================================================
   V98.40 企业库 · 产业领域（2026-10-22 阿包要求）
   ------------------------------------------------------------
   1) 产业 chip 条：13 个赛道 + 全部 + 未分类（带条数），搜索框上方独立一行
   2) 表格新增「产业领域」列（企业名称右侧），未填显示「未分类」灰字
   ============================================================ */
.ent-ind-bar {
  display: flex; align-items: flex-start; gap: 10px;
  padding: 9px 12px 10px; margin-bottom: 12px;
  background: var(--surface-2); border: 1px solid var(--border); border-radius: 10px;
}
.ent-ind-lab {
  flex: 0 0 auto; font-size: 11.5px; font-weight: 700; color: var(--text-2);
  padding-top: 5px; letter-spacing: .5px; white-space: nowrap;
}
.ent-ind-chips { flex: 1; display: flex; flex-wrap: wrap; gap: 6px; min-width: 0; }
.ent-ind-chips .chip { font-size: 11px; padding: 3px 9px; }
.ent-ind-n {
  font-size: 10px; line-height: 1.5; padding: 0 5px; border-radius: 999px;
  background: rgba(0, 0, 0, .055); color: var(--text-3); font-weight: 600;
}
.ent-ind-chips .chip.on .ent-ind-n { background: rgba(46, 92, 255, .16); color: var(--accent-3); }

.ent-ind-cell { cursor: pointer; }
.ent-ind-tag {
  display: inline-block; padding: 1px 7px; border-radius: 999px;
  font-size: 11px; line-height: 1.6; white-space: normal;
  background: var(--surface-3); color: var(--text-2);
}
.ent-row:hover .ent-ind-tag { background: var(--accent-bg); color: var(--accent-3); }

@media (max-width: 900px) {
  .ent-ind-bar { flex-direction: column; align-items: stretch; gap: 6px; }
  .ent-ind-lab { padding-top: 0; }
}

/* V98.40b 产业列：标签不折行（「汽车零部件及整车」8 字必须一行看完） */
.ent-ind-cell { padding-left: 4px; padding-right: 4px; }
.ent-ind-tag {
  white-space: nowrap; font-size: 10.5px; padding: 1px 6px;
  letter-spacing: .1px;
}

/* ============================================================
   V50（2026-10-29）· 深海军蓝主题（参照阿包提供的参考图）
   - 生效条件：html[data-theme="navy"]
   - 不设该属性 = 保留原有浅色主题，可一键切回
   - 只覆盖「变量 + 少量硬编码浅底容器」，不改任何排版结构
   ============================================================ */
html[data-theme="navy"] {
  color-scheme: dark;

  /* —— 底色与层次 —— */
  --bg:        #071626;
  --bg-2:      #0A2038;
  --surface:   #0E2641;
  --surface-2: #0A1F35;
  --surface-3: #14304C;

  --border:    rgba(110, 180, 225, .14);
  --border-2:  rgba(110, 180, 225, .26);
  --line:      rgba(110, 180, 225, .16);
  --green-soft: rgba(53, 211, 203, .24);
  --green:     #35D3CB;

  --text:      #E7F2FB;
  --text-2:    #9CBAD3;
  --text-3:    #6C8CA6;

  /* —— 主色：青绿 —— */
  --accent:     #35D3CB;
  --accent-2:   #6FE4DD;
  --accent-3:   #93EFE8;
  --accent-bg:  rgba(53, 211, 203, .13);
  --accent-bg-2: rgba(53, 211, 203, .22);
  --accent-grad:   linear-gradient(135deg, #2FB9DE 0%, #35D3CB 100%);
  --accent-grad-v: linear-gradient(135deg, #4CE6DC 0%, #24BFCC 100%);

  /* —— 次强调：暖金 —— */
  --gold:      #F0B45A;
  --gold-2:    #FFC978;
  --gold-bg:   rgba(240, 180, 90, .14);
  --gold-bg-2: rgba(240, 180, 90, .22);
  --gold-grad: linear-gradient(135deg, #FFC978 0%, #F0B45A 100%);

  --orange:    #F0925A;
  --orange-2:  #FFB07C;
  --orange-bg: rgba(240, 146, 90, .14);
  --orange-bg-2: rgba(240, 146, 90, .22);
  --blue:      #6FB6FF;
  --blue-2:    #9ACBFF;
  --blue-bg:   rgba(111, 182, 255, .14);
  --brown:     #C4A882;
  --brown-2:   #DCC29E;
  --brown-bg:  rgba(196, 168, 130, .14);
  --vanilla:   #2A4763;
  --vanilla-bg: rgba(196, 180, 150, .10);
  --cream:     #FFD9A8;
  --cream-bg:  rgba(255, 217, 168, .12);
  --cream-bg-2: rgba(255, 217, 168, .20);

  /* —— 状态色 —— */
  --ok:        #3FDFA6;
  --ok-bg:     rgba(63, 223, 166, .14);
  --info:      #6FB6FF;
  --info-bg:   rgba(111, 182, 255, .14);
  --warn:      #F5B14E;
  --warn-bg:   rgba(245, 177, 78, .15);
  --danger:    #FF7A6B;
  --danger-bg: rgba(255, 122, 107, .15);
  --mint:      #2C5C78;
  --mint-bg:   rgba(53, 211, 203, .08);
  --mint-bg-2: rgba(53, 211, 203, .15);

  /* —— 环境光与网格 —— */
  --bg-sun: radial-gradient(1200px 520px at 22% -18%, rgba(53, 211, 203, .10), transparent 60%),
            radial-gradient(1000px 480px at 88% -16%, rgba(59, 130, 246, .12), transparent 58%);
  --grid-line: rgba(110, 180, 225, .05);
  --dot-line:  rgba(110, 180, 225, .06);

  /* —— 玻璃拟态 —— */
  --glass:        rgba(10, 30, 50, .72);
  --glass-strong: rgba(9, 26, 44, .92);
  --glass-border: rgba(90, 190, 220, .18);

  /* —— 阴影：深色下沉 + 顶部青边 —— */
  --sh-1: 0 1px 2px rgba(0, 0, 0, .34), 0 3px 12px rgba(0, 0, 0, .22), inset 0 1px 0 rgba(140, 210, 240, .05);
  --sh-2: 0 6px 22px rgba(0, 0, 0, .38), 0 2px 8px rgba(0, 0, 0, .24), inset 0 1px 0 rgba(140, 210, 240, .07);
  --sh-3: 0 16px 44px rgba(0, 0, 0, .50), inset 0 1px 0 rgba(140, 210, 240, .08);
}

/* ---------- 页面与容器 ---------- */
html[data-theme="navy"] body { background-color: var(--bg); background-image: var(--bg-sun); }
html[data-theme="navy"] .view-wrap { background-color: transparent; }

html[data-theme="navy"] .sidebar {
  background: linear-gradient(180deg, #071A2E 0%, #040D1A 100%);
  border-right-color: rgba(90, 190, 220, .12);
}
html[data-theme="navy"] .topbar {
  background: rgba(7, 22, 38, .84);
  border-bottom-color: rgba(90, 190, 220, .12);
}

html[data-theme="navy"] .card,
html[data-theme="navy"] .stat,
html[data-theme="navy"] .focus-item,
html[data-theme="navy"] .tbl-wrap {
  background: var(--surface);
  border-color: var(--border);
  box-shadow: var(--sh-1);
}
html[data-theme="navy"] .card:hover,
html[data-theme="navy"] .stat:hover,
html[data-theme="navy"] .focus-item:hover { box-shadow: var(--sh-2); }

html[data-theme="navy"] .modal {
  background: rgba(11, 31, 52, .97);
  border: 1px solid rgba(90, 190, 220, .18);
  box-shadow: 0 24px 60px rgba(0, 0, 0, .6), inset 0 1px 0 rgba(140, 210, 240, .06);
}
html[data-theme="navy"] .modal-mask { background: rgba(3, 10, 20, .66); }
html[data-theme="navy"] .dropdown-menu {
  background: rgba(11, 31, 52, .98);
  border-color: rgba(90, 190, 220, .18);
  box-shadow: var(--sh-3);
}

/* ---------- 表格 ---------- */
html[data-theme="navy"] th {
  background: linear-gradient(180deg, #12304F 0%, #0C2440 100%);
  border-bottom-color: var(--border-2);
  color: var(--text-2);
}
html[data-theme="navy"] tbody tr:hover { background: rgba(53, 211, 203, .05); }

/* ---------- 表单控件 ---------- */
html[data-theme="navy"] input:not([type="checkbox"]):not([type="radio"]):not([type="range"]),
html[data-theme="navy"] textarea,
html[data-theme="navy"] select {
  background: var(--surface-2);
  color: var(--text);
  border-color: var(--border-2);
}
html[data-theme="navy"] input::placeholder,
html[data-theme="navy"] textarea::placeholder { color: var(--text-3); }

/* ---------- 按钮 ---------- */
html[data-theme="navy"] .btn.primary {
  background: var(--accent-grad);
  border-color: transparent;
  color: #052229;
  font-weight: 700;
  box-shadow: 0 4px 16px rgba(53, 211, 203, .28), inset 0 1px 0 rgba(255, 255, 255, .28);
}
html[data-theme="navy"] .btn.primary:hover {
  background: linear-gradient(135deg, #2FD3C8, #7BEDE5);
  box-shadow: 0 6px 20px rgba(53, 211, 203, .38);
}
html[data-theme="navy"] .ghost-btn:hover,
html[data-theme="navy"] .btn:hover { background: var(--surface-3); }

/* ---------- 侧栏导航 ---------- */
html[data-theme="navy"] .brand-mark {
  background: linear-gradient(135deg, #4CE6DC 0%, #2AA9C9 100%);
  color: #04222A;
  box-shadow: 0 4px 16px rgba(53, 211, 203, .35), inset 0 1px 0 rgba(255, 255, 255, .40);
}
html[data-theme="navy"] .nav-group-title { color: #6E93AE; }
html[data-theme="navy"] .nav-item { color: #A9C4D8; }
html[data-theme="navy"] .nav-item:hover { background: rgba(53, 211, 203, .08); color: #FFFFFF; }
html[data-theme="navy"] .nav-item.on {
  background: rgba(53, 211, 203, .14);
  color: #93EFE8;
  box-shadow: inset 0 0 0 1px rgba(53, 211, 203, .20);
}
html[data-theme="navy"] .nav-item.on::before {
  background: var(--accent);
  box-shadow: 0 0 10px rgba(53, 211, 203, .70);
}
html[data-theme="navy"] .nav-badge {
  background: rgba(53, 211, 203, .16);
  color: #93EFE8;
}
html[data-theme="navy"] .sidebar-foot { border-top-color: rgba(90, 190, 220, .12); }
html[data-theme="navy"] .sidebar-foot .ghost-btn { color: #8FAFC6; }
html[data-theme="navy"] .sidebar-foot .ghost-btn:hover { background: rgba(53, 211, 203, .10); color: #FFFFFF; }

/* ---------- 零散浅底元素 ---------- */
html[data-theme="navy"] .baici-search,
html[data-theme="navy"] .baici-chip,
html[data-theme="navy"] .baici-side-cell,
html[data-theme="navy"] .ehd-cell { background: var(--surface-2); border-color: var(--border); }
html[data-theme="navy"] .baici-side-cell:hover,
html[data-theme="navy"] .baici-chip:hover { background: var(--surface-3); }
html[data-theme="navy"] .travel-map-legend { background: rgba(10, 30, 50, .88); }
html[data-theme="navy"] .photo-card-bg::after {
  background: linear-gradient(to top, rgba(6, 18, 32, .94) 0%, rgba(6, 18, 32, .55) 45%, transparent 100%);
}

/* ---------- 标签微调（浅字换亮字） ---------- */
html[data-theme="navy"] .tag.warn { background: rgba(245, 177, 78, .16); color: #F5C87A; }
html[data-theme="navy"] .tag.seed-silver { background: rgba(150, 180, 200, .16); color: #C6D8E6; }
html[data-theme="navy"] .tag.gold,
html[data-theme="navy"] .tag.seed-gold { color: #FFC978; }
html[data-theme="navy"] .tag.ok { color: #6BEBB8; }

/* ---------- 滚动条 ---------- */
html[data-theme="navy"] ::-webkit-scrollbar-thumb { background: rgba(110, 180, 225, .22); }
html[data-theme="navy"] ::-webkit-scrollbar-thumb:hover { background: rgba(110, 180, 225, .34); }

/* ---------- 主题切换按钮 ---------- */
.theme-btn {
  display: inline-flex; align-items: center; gap: 5px;
  height: 32px; padding: 0 11px; border-radius: 999px;
  border: 1px solid var(--border); background: var(--surface-2);
  color: var(--text-2); font-size: 12.5px; font-weight: 600;
  cursor: pointer; white-space: nowrap; transition: background .15s, color .15s, border-color .15s;
  font-family: inherit;
}
.theme-btn:hover { background: var(--surface-3); color: var(--text); border-color: var(--border-2); }
.theme-btn .ti { font-size: 13px; line-height: 1; }
@media (max-width: 720px) { .theme-btn .tl { display: none; } .theme-btn { padding: 0 9px; } }

/* ---------- V50 · 移动端顶栏紧凑（原布局在窄屏会溢出，顺手收一收） ---------- */
@media (max-width: 900px) {
  html[data-theme="navy"] .topbar { gap: 6px; padding: 0 8px; }
}
@media (max-width: 640px) {
  html[data-theme="navy"] .today-chip { font-size: 12.5px; padding: 6px 10px; }
  html[data-theme="navy"] .today-chip small { display: none; }
  html[data-theme="navy"] .cmd-wrap { min-width: 0; flex: 1 1 auto; }
  html[data-theme="navy"] .cmd-help { display: none; }
  html[data-theme="navy"] .year-count { display: none; }
  html[data-theme="navy"] .theme-btn { flex: 0 0 auto; }
}

/* ============================================================
   V51（2026-10-29）· 主题配色加厚层（深海军蓝专用）
   - 目标：在 V50 深色底上「稍微丰富一点」，不改变任何排版结构
   - 手法：统计卡按语义分 4 色系（青/紫/绿/橙）轮转 + 卡片顶部渐变细线
           + 标题竖条渐变辉光 + 背景光晕补一层紫
   - 只作用于 html[data-theme="navy"]，切回浅色完全不受影响
   ============================================================ */

/* ---------- 背景光晕：补一层紫，避免整站只有青蓝 ---------- */
html[data-theme="navy"] {
  --bg-sun: radial-gradient(1200px 520px at 22% -18%, rgba(53, 211, 203, .13), transparent 60%),
            radial-gradient(1000px 480px at 88% -16%, rgba(59, 130, 246, .15), transparent 58%),
            radial-gradient(880px 420px at 52% 106%, rgba(124, 92, 255, .08), transparent 62%);
}

/* ---------- 统计卡：按板块语义分色 ---------- */
html[data-theme="navy"] .stat-grid .stat {
  --sc: var(--accent);
  --sc-soft: rgba(53, 211, 203, .09);
  position: relative;
  background: linear-gradient(158deg, var(--sc-soft) 0%, rgba(0, 0, 0, 0) 52%), var(--surface);
  border-color: var(--border);
  border-top-color: var(--sc);
  transition: transform .12s, box-shadow .12s, border-color .15s;
}
html[data-theme="navy"] .stat-grid .stat::after {
  content: ''; position: absolute; top: -34px; right: -30px;
  width: 96px; height: 96px; border-radius: 50%;
  background: var(--sc); opacity: .10; filter: blur(18px);
  pointer-events: none;
}
html[data-theme="navy"] .stat-grid .stat:hover {
  border-top-color: var(--sc);
  box-shadow: 0 8px 24px rgba(0, 0, 0, .40), 0 0 0 1px var(--sc-soft), inset 0 1px 0 rgba(140, 210, 240, .07);
}
html[data-theme="navy"] .stat-grid .stat .stat-value { color: var(--sc); }
html[data-theme="navy"] .stat-grid .stat .stat-value small { color: var(--sc); opacity: .74; }

/* 四色系轮转：青 → 紫 → 绿 → 橙 */
html[data-theme="navy"] .stat[data-view="todo"]        { --sc: #35D3CB; --sc-soft: rgba(53, 211, 203, .11); }
html[data-theme="navy"] .stat[data-view="schedule"]    { --sc: #8B9BFF; --sc-soft: rgba(139, 155, 255, .12); }
html[data-theme="navy"] .stat[data-view="kpi"]         { --sc: #3FE0A6; --sc-soft: rgba(63, 224, 166, .11); }
html[data-theme="navy"] .stat[data-view="invest"]      { --sc: #F0B45A; --sc-soft: rgba(240, 180, 90, .12); }
html[data-theme="navy"] .stat[data-view="news"]        { --sc: #4BC9EE; --sc-soft: rgba(75, 201, 238, .11); }
html[data-theme="navy"] .stat[data-view="baici"]       { --sc: #A78BFA; --sc-soft: rgba(167, 139, 250, .12); }
html[data-theme="navy"] .stat[data-view="enterprise"]  { --sc: #56DBA2; --sc-soft: rgba(86, 219, 162, .11); }
html[data-theme="navy"] .stat[data-view="mentors"]     { --sc: #FF9E7A; --sc-soft: rgba(255, 158, 122, .12); }

/* 其他页面（非首页语义卡）保持统一青绿，不抢主次 */
html[data-theme="navy"] .stat-grid .stat:not([data-view]) {
  --sc: #35D3CB; --sc-soft: rgba(53, 211, 203, .08);
}

/* ---------- 卡片：顶部一段青蓝渐变细线（参考图手法） ---------- */
html[data-theme="navy"] .card { position: relative; }
html[data-theme="navy"] .card::after {
  content: ''; position: absolute; top: 0; left: 16px; right: 16px; height: 1.5px;
  background: linear-gradient(90deg,
    rgba(53, 211, 203, 0) 0%,
    rgba(53, 211, 203, .62) 26%,
    rgba(111, 182, 255, .46) 62%,
    rgba(139, 155, 255, 0) 100%);
  border-radius: 2px; pointer-events: none;
}

/* ---------- 分区标题：竖条改渐变 + 辉光 ---------- */
html[data-theme="navy"] .section-title {
  border-left-color: transparent;
  border-image: linear-gradient(180deg, #4CE6DC 0%, #5B9BFF 100%) 1;
  text-shadow: 0 0 18px rgba(53, 211, 203, .18);
}
html[data-theme="navy"] .section-title::first-letter { color: inherit; }

/* ---------- 标签：暖色 / 冷色分得更清楚 ---------- */
html[data-theme="navy"] .tag.gold,
html[data-theme="navy"] .tag.seed-gold {
  background: rgba(240, 180, 90, .18); color: #FFC978;
  box-shadow: inset 0 0 0 1px rgba(240, 180, 90, .22);
}
html[data-theme="navy"] .tag.warn {
  background: rgba(245, 177, 78, .18); color: #F8CA80;
  box-shadow: inset 0 0 0 1px rgba(245, 177, 78, .24);
}
html[data-theme="navy"] .tag.danger {
  background: rgba(255, 122, 107, .17); color: #FF9C90;
  box-shadow: inset 0 0 0 1px rgba(255, 122, 107, .24);
}
html[data-theme="navy"] .tag.ok {
  background: rgba(63, 223, 166, .16); color: #63EBBC;
  box-shadow: inset 0 0 0 1px rgba(63, 223, 166, .22);
}
html[data-theme="navy"] .tag.info {
  background: rgba(111, 182, 255, .16); color: #96C8FF;
  box-shadow: inset 0 0 0 1px rgba(111, 182, 255, .22);
}
html[data-theme="navy"] .tag.accent {
  background: rgba(53, 211, 203, .17); color: #7BEDE5;
  box-shadow: inset 0 0 0 1px rgba(53, 211, 203, .24);
}

/* ---------- 次级强调：暖金与紫也参与点缀 ---------- */
html[data-theme="navy"] .danger { color: #FF8F82; }
html[data-theme="navy"] .accent { color: var(--accent); }
html[data-theme="navy"] .stat-sub b { color: var(--text); }
html[data-theme="navy"] .stat-sub b.danger,
html[data-theme="navy"] .stat-sub b.overdue-link { color: #FF9C8C; }

/* ---------- 表头：补一点蓝紫渐变，避免整片同色 ---------- */
html[data-theme="navy"] th {
  background: linear-gradient(180deg, #14375A 0%, #0D2847 100%);
  color: #A9C6DD;
}

/* ---------- V51 补充：企业库「6 大板块」图标卡分色 ---------- */
html[data-theme="navy"] .ehd-wall .ehd-cell {
  --sc: var(--accent);
  --sc-soft: rgba(53, 211, 203, .09);
  background: linear-gradient(165deg, var(--sc-soft) 0%, rgba(0, 0, 0, 0) 62%), var(--surface-2);
  border-color: var(--border);
  border-top: 2px solid var(--sc);
  box-shadow: var(--sh-1);
}
html[data-theme="navy"] .ehd-wall .ehd-cell .ehd-icon,
html[data-theme="navy"] .ehd-wall .ehd-cell .ehd-icon svg { color: var(--sc); }
html[data-theme="navy"] .ehd-wall .ehd-cell .ehd-count { color: var(--sc); }
html[data-theme="navy"] .ehd-wall .ehd-cell:hover {
  border-color: var(--sc);
  box-shadow: 0 10px 26px rgba(0, 0, 0, .42), 0 0 0 1px var(--sc-soft);
}
html[data-theme="navy"] .ehd-wall .ehd-cell:nth-child(6n+1) { --sc: #35D3CB; --sc-soft: rgba(53, 211, 203, .12); }
html[data-theme="navy"] .ehd-wall .ehd-cell:nth-child(6n+2) { --sc: #A78BFA; --sc-soft: rgba(167, 139, 250, .13); }
html[data-theme="navy"] .ehd-wall .ehd-cell:nth-child(6n+3) { --sc: #3FE0A6; --sc-soft: rgba(63, 224, 166, .12); }
html[data-theme="navy"] .ehd-wall .ehd-cell:nth-child(6n+4) { --sc: #4BC9EE; --sc-soft: rgba(75, 201, 238, .12); }
html[data-theme="navy"] .ehd-wall .ehd-cell:nth-child(6n+5) { --sc: #F0B45A; --sc-soft: rgba(240, 180, 90, .13); }
html[data-theme="navy"] .ehd-wall .ehd-cell:nth-child(6n+6) { --sc: #FF9E7A; --sc-soft: rgba(255, 158, 122, .13); }

/* ---------- V51 补充：其余页面统计卡也用 4 色循环（首页已有语义分色，不覆盖） ---------- */
html[data-theme="navy"] .stat-grid .stat:not([data-view]):nth-child(4n+1) { --sc: #35D3CB; --sc-soft: rgba(53, 211, 203, .10); }
html[data-theme="navy"] .stat-grid .stat:not([data-view]):nth-child(4n+2) { --sc: #8B9BFF; --sc-soft: rgba(139, 155, 255, .11); }
html[data-theme="navy"] .stat-grid .stat:not([data-view]):nth-child(4n+3) { --sc: #3FE0A6; --sc-soft: rgba(63, 224, 166, .10); }
html[data-theme="navy"] .stat-grid .stat:not([data-view]):nth-child(4n+4) { --sc: #F0B45A; --sc-soft: rgba(240, 180, 90, .11); }

/* ---------- V51 补充：统计卡整圈淡彩描边 + 标签前置色点（更接近参考图的卡片质感） ---------- */
html[data-theme="navy"] .stat-grid .stat {
  border-color: var(--sc-line, var(--border));
}
html[data-theme="navy"] .stat[data-view="todo"]        { --sc-line: rgba(53, 211, 203, .24); }
html[data-theme="navy"] .stat[data-view="schedule"]    { --sc-line: rgba(139, 155, 255, .26); }
html[data-theme="navy"] .stat[data-view="kpi"]         { --sc-line: rgba(63, 224, 166, .24); }
html[data-theme="navy"] .stat[data-view="invest"]      { --sc-line: rgba(240, 180, 90, .26); }
html[data-theme="navy"] .stat[data-view="news"]        { --sc-line: rgba(75, 201, 238, .24); }
html[data-theme="navy"] .stat[data-view="baici"]       { --sc-line: rgba(167, 139, 250, .26); }
html[data-theme="navy"] .stat[data-view="enterprise"]  { --sc-line: rgba(86, 219, 162, .24); }
html[data-theme="navy"] .stat[data-view="mentors"]     { --sc-line: rgba(255, 158, 122, .26); }

html[data-theme="navy"] .stat-grid .stat .stat-label {
  display: flex; align-items: center; gap: 6px;
}
html[data-theme="navy"] .stat-grid .stat .stat-label::before {
  content: ''; width: 6px; height: 6px; border-radius: 50%;
  background: var(--sc); box-shadow: 0 0 8px var(--sc);
  flex: 0 0 auto; opacity: .92;
}

/* ============================================================
   V52（2026-10-31）· 青绿降噪层
   - 阿包反馈：绿色块太刺眼（logo 方块、主按钮、月历实心格）
   - 手法：降低实心块亮度与饱和度 + 削弱发光 + 亮底深字改中亮底浅字
   - 只动深色主题；文字用的小面积 accent 色保持不变，不影响可读性
   ============================================================ */

/* ---------- 主按钮：亮青渐变 → 沉青渐变，去掉外发光 ---------- */
html[data-theme="navy"] .btn.primary {
  background: linear-gradient(135deg, #2B92A6 0%, #2FA8A0 100%);
  border-color: rgba(90, 200, 195, .30);
  color: #EAFDFB;
  font-weight: 700;
  box-shadow: 0 2px 10px rgba(14, 88, 92, .34), inset 0 1px 0 rgba(255, 255, 255, .13);
}
html[data-theme="navy"] .btn.primary:hover {
  background: linear-gradient(135deg, #2F9EB3 0%, #35B6AD 100%);
  box-shadow: 0 4px 14px rgba(14, 88, 92, .40), inset 0 1px 0 rgba(255, 255, 255, .18);
}

/* ---------- 侧栏 logo 方块：降亮、收光 ---------- */
html[data-theme="navy"] .brand-mark {
  background: linear-gradient(135deg, #31BDB3 0%, #257E97 100%);
  color: #F0FFFD;
  box-shadow: 0 2px 9px rgba(20, 96, 104, .40), inset 0 1px 0 rgba(255, 255, 255, .18);
}

/* ---------- 月历：实心青绿格 → 柔和半透明填充 ---------- */
html[data-theme="navy"] .rep-cal-cell.both {
  background: rgba(53, 211, 203, .26);
  border-color: rgba(53, 211, 203, .52);
}
html[data-theme="navy"] .rep-cal-cell.both .rep-cal-d { color: #DDFBF8; font-weight: 700; }
html[data-theme="navy"] .rep-cal-cell.both.weekend:hover { background: rgba(53, 211, 203, .30); }
html[data-theme="navy"] .rep-cal-cell.filled {
  background: rgba(53, 211, 203, .08);
  border-color: rgba(53, 211, 203, .30);
}
html[data-theme="navy"] .rep-cal-cell.filled .rep-cal-d { color: #7FD8D2; font-weight: 600; }
html[data-theme="navy"] .rep-cal-cell.mark { border-color: rgba(53, 211, 203, .38); border-width: 1.5px; }
html[data-theme="navy"] .rep-cal-cell.on { box-shadow: 0 0 0 1.5px rgba(53, 211, 203, .58); }

/* ---------- 侧栏徽标 / chip / 选中态：降低填充浓度与辉光 ---------- */
html[data-theme="navy"] .nav-badge {
  background: rgba(53, 211, 203, .12);
  color: #84D6D0;
}
html[data-theme="navy"] .nav-item.on::before { box-shadow: 0 0 6px rgba(53, 211, 203, .40); }
html[data-theme="navy"] .chip.on {
  background: rgba(53, 211, 203, .10);
  border-color: rgba(53, 211, 203, .42);
  color: #9BE2DC;
}

/* ---------- 统计卡角落柔光再收一档 ---------- */
html[data-theme="navy"] .stat-grid .stat::after { opacity: .07; }

/* ---------- 进度条 / 填充条：同样压暗一档 ---------- */
html[data-theme="navy"] .bar > i,
html[data-theme="navy"] .prog > i { background: linear-gradient(90deg, #2B92A6, #33B9AF); }

/* V52 修正：.both 一定同时带 .filled，同优先级下会被后写的 .filled 覆盖，
   故用双类提高特异性，保证「日报+纪要」格仍是白字（底色已柔化，白字不刺眼）。 */
html[data-theme="navy"] .rep-cal-cell.filled.both .rep-cal-d {
  color: #FFFFFF;
  font-weight: 700;
}

/* V98.71（2026-11-01）：专家表领域列。桌面端 nowrap 让「政策法规、成果转化」整串不断行；
   窄屏放不下整串，恢复换行，避免标签溢出到相邻单元格。 */
@media (max-width: 900px) {
  .mentor-table td .tag { white-space: normal; }
}

/* ============================================================
   V98.71（2026-11-01）腾讯文档同步提示
   运营协议 / 重点项目页页脚注，显示表格数据上次同步进工作台的时间。
   低调处理：不抢标题视觉，鼠标悬停才显示同步明细。
   ============================================================ */
.tdoc-sync-tip {
  display: inline-block;
  margin-left: 10px;
  padding: 1px 8px;
  border-radius: 9px;
  font-size: 11.5px;
  line-height: 17px;
  color: var(--text-3);
  background: var(--bg-2);
  border: 1px solid var(--line);
  white-space: nowrap;
  cursor: help;
  vertical-align: middle;
}
html[data-theme="navy"] .tdoc-sync-tip {
  background: rgba(255, 255, 255, 0.06);
  border-color: rgba(255, 255, 255, 0.14);
  color: rgba(235, 240, 245, 0.66);
}
@media (max-width: 900px) {
  .tdoc-sync-tip { margin-left: 6px; font-size: 11px; }
}

/* ============================================================
   V98.74（2026-11-02）活动照片卡片改版 · 照片大图封面
   阿包要求：卡片上半是照片大图，下方是主题 + 时间，点主题直接进相册。
   原实现把 cover 当 0.14 透明度的淡底纹（几乎看不见），且只能填图片直链，
   等于没有封面。本层改为真·封面：图 16:10 居中裁切、无图显示虚线占位，
   标题与整图都是相册外链，卡片其余区域点击进编辑。
   纯样式覆盖层，删本层即回退到淡底纹版；数据与事件不动。
   ============================================================ */
/* V98.76（2026-11-02）：一排四个 —— 阿包定稿，大屏固定 4 列，窄屏逐级降列。
   固定列数而非 minmax：卡片宽度随内容区伸缩但列数稳定，不会因为窗口宽一点就跳 5 列。 */
.photo-grid {
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 12px;
}
.photo-card {
  display: flex;
  flex-direction: column;
  padding: 0;
  min-height: 0;
  border-radius: var(--r-m);
  cursor: pointer;
  transition: box-shadow .14s ease, border-color .14s ease;
}
/* 只加深阴影，不做位移，避免页面「抖」 */
.photo-card:hover {
  box-shadow: 0 5px 16px rgba(20, 40, 60, .10);
  border-color: var(--line-strong, var(--border));
}
.photo-cover {
  position: relative;
  width: 100%;
  aspect-ratio: 16 / 10;
  background-color: var(--bg-2);
  background-size: cover;
  background-position: center;
  background-repeat: no-repeat;
  border-bottom: 1px solid var(--border);
  overflow: hidden;
}
.photo-card.no-cover .photo-cover {
  border-bottom: 1px dashed var(--border);
}
.photo-cover-ph {
  position: absolute;
  inset: 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 5px;
  font-size: 11.5px;
  color: var(--text-3);
  pointer-events: none;
}
.photo-cover-ico { font-size: 20px; opacity: .5; }
.photo-cover-hit {
  position: absolute;
  inset: 0;
  z-index: 1;
  text-decoration: none;
}
/* 注意：.icon-btn.del 带 color:var(--danger)，特异性更高，此处前缀提级以覆盖 */
.photo-card .photo-del {
  position: absolute;
  top: 6px;
  right: 6px;
  z-index: 2;
  width: 22px;
  height: 22px;
  font-size: 13px;
  line-height: 1;
  border-radius: 50%;
  background: rgba(255, 255, 255, .92);
  color: #6b7783;
  box-shadow: 0 1px 4px rgba(0, 0, 0, .16);
  opacity: .55;              /* 常显但弱化，鼠标移到卡片上再提亮 */
  transition: opacity .14s ease, background .14s ease;
}
.photo-card:hover .photo-del { opacity: 1; }
.photo-card .photo-del:hover { background: #fff; color: #d9534f; }
.photo-body {
  padding: 10px 11px 11px;
  display: flex;
  flex-direction: column;
  gap: 5px;
}
.photo-name {
  font-size: 13.5px;
  font-weight: 700;
  line-height: 1.45;
}
.photo-name-link {
  color: inherit;
  text-decoration: none;
}
.photo-name-link:hover {
  color: var(--brand, #2FA8A0);
  text-decoration: underline;
}
.photo-meta {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-top: 0;
}
.photo-link-icon {
  font-size: 11px;
  margin-left: auto;
  color: var(--text-3);
  text-decoration: none;
  white-space: nowrap;
}
.photo-link-icon:hover { color: var(--brand, #2FA8A0); opacity: 1; }
.photo-note { margin-top: 2px; }

/* 弹窗内封面预览 */
.photo-cover-preview {
  margin-top: 8px;
  border: 1px dashed var(--border);
  border-radius: 8px;
  padding: 8px;
  min-height: 44px;
  display: flex;
  align-items: center;
  justify-content: center;
  background: var(--bg-2);
}
.photo-cover-preview img {
  display: block;
  max-width: 100%;
  max-height: 180px;
  border-radius: 6px;
  object-fit: cover;
}

/* 暗色主题 */
html[data-theme="navy"] .photo-cover { border-bottom-color: rgba(255, 255, 255, .10); }
html[data-theme="navy"] .photo-card.no-cover .photo-cover { border-bottom-color: rgba(255, 255, 255, .16); }
html[data-theme="navy"] .photo-del { background: rgba(30, 40, 50, .86); color: #c8d2dc; box-shadow: 0 1px 4px rgba(0, 0, 0, .4); }
html[data-theme="navy"] .photo-del:hover { background: rgba(50, 64, 78, .96); color: #ff8a80; }
html[data-theme="navy"] .photo-cover-preview { background: rgba(255, 255, 255, .04); border-color: rgba(255, 255, 255, .16); }

/* 窄屏降列：4 → 3 → 2，保证每张卡片里的主题不至于挤成一字一行 */
@media (max-width: 1080px) {
  .photo-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}
@media (max-width: 880px) {
  .photo-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
/* 窄屏：两列并排，图不至于占满整屏 */
@media (max-width: 620px) {
  .photo-grid { grid-template-columns: repeat(2, 1fr); gap: 10px; }
  .photo-name { font-size: 12.5px; }
  .photo-body { padding: 8px 9px 9px; }
  .photo-del { opacity: 1; }
}

/* ---------- V98.73（2026-11-02）· 专家导师名录：有简介=蓝色名、重点关注=棕色 ----------
   口径：important（重点关注）优先级最高，仍用棕色；仅有简介的用蓝色，扫列表时一眼可分。
   ⚠️ 2026-11-02 改：原橙色 #C97B2E 与棕色 #8B5A2B 小字号下区分度太弱，阿包反馈后改蓝色。
   走 html 前缀提特异性，压过 .mentor-name:hover，否则 hover 会被旧规则抢走颜色。 */
html .mentor-name.mentor-hasbio { color: #1F6FB2; }
html .mentor-name.mentor-hasbio:hover { color: #175892; }
html .mentor-name.mentor-important { color: #8B5A2B; }
html .mentor-name.mentor-important:hover { color: #A06A35; }
html[data-theme="navy"] .mentor-name.mentor-hasbio { color: #6FB3EA; }
html[data-theme="navy"] .mentor-name.mentor-hasbio:hover { color: #8FC8F5; }
html[data-theme="navy"] .mentor-name.mentor-important { color: #C79A6E; }
html[data-theme="navy"] .mentor-name.mentor-important:hover { color: #DCB287; }

/* ==========================================================================
   V98.75（2026-11-02）· iPhone 适配层 —— 目标机型 iPhone 17
   --------------------------------------------------------------------------
   机型参数：402×874 CSS px，DPR 3，安全区 顶部 62px / 底部 34px（灵动岛 + 手势条）
   生效范围：≤480px（覆盖 iPhone 17 / 17 Pro / 16 Pro 的 402、16e 的 390、17 Pro Max 的 440）
   前置依赖：index.html 的 viewport 必须含 viewport-fit=cover，否则 env(safe-area-inset-*) 恒为 0
   设计原则：只覆盖移动端，不改 DOM 结构、不动桌面；同特异性后写覆盖，无需 !important
   ========================================================================== */
@media (max-width: 480px) {

  /* ---- 1. 视口：dvh 随 Safari 地址栏收放，避免底部被裁 ---- */
  .app { height: 100dvh; }

  /* ---- 2. 安全区：顶部避开灵动岛，底部避开手势条 ----
     注意：深色主题有 html[data-theme="navy"] .topbar { padding: 0 8px } 特异性更高，
     单写 .topbar 会被它盖掉（实测 padding-top 仍为 0），故这里带 html 前缀提权。 */
  html .topbar,
  html[data-theme] .topbar {
    height: auto; min-height: 50px;
    padding: calc(4px + env(safe-area-inset-top, 0px)) 10px 4px;
  }
  .view-wrap { padding-bottom: calc(84px + env(safe-area-inset-bottom, 0px)); }
  .sidebar-foot { padding-bottom: calc(12px + env(safe-area-inset-bottom, 0px)); }
  .toast { bottom: calc(12px + env(safe-area-inset-bottom, 0px)); }
  .modal {
    max-height: calc(100dvh - 88px - env(safe-area-inset-top, 0px) - env(safe-area-inset-bottom, 0px));
  }

  /* ---- 3. 统计卡：单列 → 两列，一屏可见从 5 张提升到 8 张 ---- */
  .stat-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; margin-bottom: 12px; }
  /* 企业库顶部统计条在 views.js 里用内联 style 写死 repeat(6,1fr)，
     内联优先级高于类选择器，402 宽下 6 列被压到 57px，字样挤成一列 —— 这里用 !important 收成 3 列 × 2 行。 */
  .stat-grid[style] { grid-template-columns: repeat(3, minmax(0, 1fr)) !important; }
  .stat { padding: 9px 10px; border-radius: 12px; }
  .stat-label { font-size: 10.5px; margin-bottom: 3px; }
  .stat-value { font-size: 19px; }
  .stat-value small { font-size: 10px; }
  .stat-sub { font-size: 9.5px; line-height: 1.35; margin-top: 3px; }

  /* ---- 4. 侧栏：402 宽下 82vw 接近满屏，收到 300 以内保留遮罩辨识 ---- */
  .sidebar { width: 78vw; max-width: 300px; }

  /* ---- 5. 触控目标：触屏无 hover，18px 的「延后」按钮必须常显且放大 ---- */
  .task-postpone { opacity: 1; width: 28px; height: 28px; font-size: 14px; }

  /* ---- 6. 表格：企业库 8 列在 402 宽下靠横向滑动 ---- */
  .tbl-wrap { overflow-x: auto; -webkit-overflow-scrolling: touch; }
  /* 待办周视图：120px 列宽下任务标题被挤成每行 2~3 字，提到 150px 保可读
     （≤640 断点写的是 minmax(120px,1fr)，同特异性后写覆盖） */
  .week-grid { grid-template-columns: repeat(7, minmax(150px, 1fr)); }

  /* ---- 7. 网格防撑破：1fr 的隐含 min-width 是 auto，长文本会把列撑出屏幕 ----
     dashboard 的 .dash-grid 在 ≤640 断点里没被改成单列，402 宽下右列整列看不见（实测 right=828），
     资讯卡同样被长标题撑到 569px。这里统一收成 minmax(0,1fr) + 子项 min-width:0。 */
  .dash-grid { grid-template-columns: minmax(0, 1fr); gap: 12px; }
  .asset-grid { grid-template-columns: minmax(0, 1fr); }
  .card, .focus-item, .asset-card, .stat { min-width: 0; }
  .tag { max-width: 100%; }
  /* 「需要重点关注」的元信息行原本 white-space:nowrap，长句会撑到 516px，
     402 宽下右侧文字被裁；移动端改为可换行。 */
  .focus-meta { white-space: normal; min-width: 0; }

  /* ---- 7. iOS 渲染细节 ---- */
  html { -webkit-text-size-adjust: 100%; }
  .view-wrap { -webkit-overflow-scrolling: touch; }
}

/* 触屏设备：取消卡片悬停位移，避免点按后残留抬起效果 */
@media (hover: none) {
  .stat:hover { transform: none; }
  .task-postpone { opacity: 1; }
}

/* ---------- V98.76（2026-11-02）· 顶栏「从电脑同步」按钮 ----------
   只在有快照时显示（JS 控制 hidden）；有新数据时高亮并带一个小圆点。
   刻意不加呼吸/闪烁动画——工作台全局要求静态稳定，不做持续动画。 */
.sync-btn {
  display: inline-flex; align-items: center; justify-content: center;
  height: 32px; min-width: 34px; padding: 0 8px; border-radius: 999px;
  border: 1px solid var(--border); background: var(--surface-2);
  color: var(--text-2); font-size: 15px; font-weight: 600; line-height: 1;
  cursor: pointer; position: relative; font-family: inherit;
  transition: background .15s, color .15s, border-color .15s;
}
.sync-btn:hover { background: var(--surface-3); color: var(--text); border-color: var(--border-2); }
.sync-btn[hidden] { display: none; }
.sync-btn.has-new {
  color: #2FA8A0; border-color: #7FCFC7; background: rgba(47,168,160,.10);
}
.sync-btn.has-new::after {
  content: ''; position: absolute; top: 3px; right: 3px;
  width: 6px; height: 6px; border-radius: 50%; background: #E0603C;
}
html[data-theme="navy"] .sync-btn.has-new { color: #6FB3EA; border-color: rgba(111,179,234,.45); background: rgba(111,179,234,.12); }

/* 手机上把点击区放大到 44px，符合触控最小尺寸 */
@media (max-width: 480px) {
  html .sync-btn { height: 36px; min-width: 40px; font-size: 16px; }
}
