/* =========================================================================================
   胡sir智慧农业 · console 后台共用样式
   设计语言与大屏 screen.css 同源：中性石墨/晴空底 + 单一克制强调色 + 发丝级描边 + 克制动效。
   组件规则只消费 token；日/夜主题仅覆盖语义 token（日间亮色为缺省，html data-theme 切夜间）。
   ⚠ 契约测试锁定（ConsolePagesTest / SettingsPagesTest，改动前先读 tests/）：
     - 侧栏规则内必须含 background:#07221a（无空格）—— .console-nav
     - 金色激活态规则内必须含 background:var(--console-gold)（无空格）—— aria-current 页链接
     - 桌面段（首个媒体查询之前）必须有独立 .menu-toggle 规则含 display:none
     - 768px 段：.menu-toggle 改为可见；.settings-grid 单列
     - 375px 段：.settings-actions 单列且按钮全宽
     - 以下选择器首个含 min-height 的规则须 ≥44px：.menu-toggle .logout-button .filter-form button
       .records-table button .records-pagination button .settings-field input .settings-field textarea .settings-actions button
     - :focus-visible 与 overflow-x:auto 必须出现
   ========================================================================================= */

:root {
  color-scheme: light;
  /* 画布与表面 */
  --bg-base: #f2f6f4;
  --surface-1: #ffffff;
  --surface-2: #edf3f0;
  /* 描边 */
  --line: rgba(23, 53, 42, .15);
  --line-soft: rgba(23, 53, 42, .08);
  /* 文字三级 */
  --tx-1: #17352a;
  --tx-2: #4a5f56;
  --tx-3: #71837a;
  /* 语义色 */
  --accent: #0e3d30;
  --accent-hover: #0a2f25;
  --on-accent: #ffffff;
  --accent-soft: rgba(14, 61, 48, .07);
  --brand: #b8954a;
  --brand-soft: rgba(184, 149, 74, .18);
  --green: #17968a;
  --green-soft: rgba(23, 150, 138, .14);
  --red: #c93d3d;
  --red-soft: rgba(201, 61, 61, .12);
  /* 焦点环：浅色用深金保证非文本对比 ≥3:1，暗色直接用亮金 */
  --focus-ring: #8a682a;
  /* 顶栏 */
  --topbar-bg: linear-gradient(90deg, #07221a 0%, #0e3d30 100%);
  --topbar-line: rgba(255, 255, 255, .08);
  /* 顶栏**声明高度**（由 .console-topbar 的 height 消费，故同时也是它的渲染高度）。
     侧栏 sticky 的 top 与两处 max/min-height 取同一个变量 ⇒ 让位量与头部高度由构造相等。
     65 = 内容所需最高值（按钮 min-height 44 + 上下 padding 20 + 1px 下边框）；加高控件须同步此数。 */
  --console-topbar-h: 65px;
  /* 几何与动效 */
  --r-lg: 14px;
  --r-md: 10px;
  --r-sm: 8px;
  --shadow-card: 0 1px 2px rgba(23, 53, 42, .04), 0 6px 20px rgba(23, 53, 42, .06);
  --ease: cubic-bezier(.22, .61, .36, 1);
  /* 旧 token 名保留为别名：--console-green 供既有按钮规则引用，
     --console-gold 为契约测试锁定值（aria-current 激活态），二者不可删除或更名 */
  --console-green: var(--accent);
  --console-gold: var(--brand);
}
:root[data-theme='dark'] {
  color-scheme: dark;
  --bg-base: #0d1216;
  --surface-1: #151c22;
  --surface-2: #1b242b;
  --line: rgba(160, 176, 205, .17);
  --line-soft: rgba(160, 176, 205, .09);
  --tx-1: #e9eef7;
  --tx-2: #a6b1c4;
  --tx-3: #6b7789;
  --accent: #3f9d82;
  --accent-hover: #4fb193;
  --on-accent: #06110d;
  --accent-soft: rgba(63, 157, 130, .15);
  --brand: #d8b063;
  --brand-soft: rgba(216, 176, 99, .2);
  --green: #3fd6a4;
  --green-soft: rgba(63, 214, 164, .15);
  --red: #ff8177;
  --red-soft: rgba(255, 129, 119, .14);
  --topbar-bg: linear-gradient(90deg, #050f0b 0%, #0c2a20 100%);
  --topbar-line: rgba(160, 176, 205, .1);
  --shadow-card: 0 1px 2px rgba(0, 0, 0, .3), 0 8px 24px rgba(0, 0, 0, .32);
  --focus-ring: #d8b063;
}

* { box-sizing: border-box; }
body {
  margin: 0;
  color: var(--tx-1);
  background: var(--bg-base);
  font: 14px/1.55 -apple-system, BlinkMacSystemFont, "SF Pro Text", "PingFang SC", "Hiragino Sans GB", "Segoe UI", "HarmonyOS Sans SC", "Microsoft YaHei", sans-serif;
  -webkit-font-smoothing: antialiased;
  transition: background-color .25s var(--ease), color .25s var(--ease);
}
button, input, textarea, select { font: inherit; }
[hidden] { display: none !important; }
button:focus-visible, a:focus-visible, input:focus-visible, textarea:focus-visible, select:focus-visible {
  outline: 3px solid var(--focus-ring);
  outline-offset: 2px;
}
/* 顶栏双主题恒为深色底：其上按钮的焦点环恒用亮金，保证 ≥3:1 非文本对比 */
.console-topbar button:focus-visible { outline-color: var(--brand); }

/* ---------- 顶栏 ---------- */
.console-topbar {
  position: sticky;
  top: 0;
  z-index: 20;
  /* 声明式高度（原 min-height:60px 从不咬合：内容 44 按钮 + 20 padding = 64~65 已更高）。
     写成 height 而不是 min-height，是为了让「侧栏 top 让位量 == 顶栏高度」由构造成立：
     min-height 下任何人加高顶栏（新控件、加大 padding）都会把侧栏首项重新藏进顶栏底下。
     注意加高时**不会**被裁切——本框未设 overflow，超出的内容照样绘制，只是顶栏 z-index:20 高于
     侧栏（auto），所以会以「压在侧栏首项之上」的形式当场显形。标题已 nowrap+ellipsis、按钮固定 44，无折行风险。 */
  height: var(--console-topbar-h);
  display: flex;
  align-items: center;
  gap: 14px;
  padding: 10px 20px;
  color: #fff;
  background: var(--topbar-bg);
  border-bottom: 1px solid var(--topbar-line);
}
.console-topbar strong { flex: 1; font-size: 17px; font-weight: 650; letter-spacing: .01em; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
/* 顶栏双主题恒为深底（见 :root 处 --topbar-bg），故此处配色不随主题变，无需暗色变体。
   收缩护栏是承重的：display_name 是 VARCHAR(64)，<strong> 可被压到 0，
   本 span 若不可收缩，长姓名会把主题/退出按钮顶出右缘变成点不到。 */
.nav-operator { font-size: 12px; color: #c5d8cf; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

.menu-toggle, .logout-button, .theme-toggle {
  min-height: 44px;
  border: 1px solid rgba(255, 255, 255, .3);
  color: #fff;
  background: transparent;
  border-radius: var(--r-sm);
  padding: 0 14px;
  cursor: pointer;
  font-size: 13px;
  transition: background-color .15s var(--ease), border-color .15s var(--ease);
}
.menu-toggle:hover, .logout-button:hover, .theme-toggle:hover { background: rgba(255, 255, 255, .1); border-color: rgba(255, 255, 255, .5); }
.theme-toggle {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 44px;
  padding: 0;
}
.theme-toggle svg { width: 16px; height: 16px; stroke: currentColor; fill: none; stroke-width: 1.7; stroke-linecap: round; }
.console-topbar .theme-toggle .theme-ic-dark { display: none; }
:root[data-theme='dark'] .console-topbar .theme-toggle .theme-ic-dark { display: block; }
:root[data-theme='dark'] .console-topbar .theme-toggle .theme-ic-light { display: none; }
.menu-toggle { display: none; }

/* ---------- 布局骨架 ---------- */
.console-layout { display: grid; grid-template-columns: 220px minmax(0, 1fr); min-height: calc(100vh - var(--console-topbar-h)); }

/* ---------- 侧栏（深色分组图标形态；底色与金激活为契约锁定值） ---------- */
.console-nav { padding: 16px 12px 14px; background:#07221a; overflow-y: auto; position: sticky; top: var(--console-topbar-h); max-height: calc(100vh - var(--console-topbar-h)); }
.console-nav .nav-kicker { margin: 0; font-size: 11px; font-weight: 600; color: #7d998b; letter-spacing: .12em; padding: 14px 10px 5px; }
.console-nav .nav-kicker:first-child { padding-top: 0; }
.console-nav a {
  display: flex;
  align-items: center;
  gap: 10px;
  min-height: 40px;
  padding: 8px 10px;
  border-radius: var(--r-sm);
  color: #cfe0d6;
  text-decoration: none;
  font-size: 13.5px;
  transition: background-color .15s var(--ease), color .15s var(--ease);
}
.console-nav a .nic { width: 15px; height: 15px; flex: 0 0 auto; stroke: currentColor; fill: none; stroke-width: 1.7; stroke-linecap: round; stroke-linejoin: round; opacity: .85; }
.console-nav a:hover { background: rgba(255, 255, 255, .07); color: #fff; }
.console-nav a[aria-current="page"] { color: #10261d; font-weight: 600; background:var(--console-gold); box-shadow: inset 3px 0 0 rgba(255, 255, 255, .55); }
.console-nav a[aria-current="page"] .nic { opacity: 1; }
.console-nav .nav-ext { margin-top: 16px; border-top: 1px solid rgba(255, 255, 255, .12); padding-top: 12px; }
.console-nav .nav-ext a { color: #8fb6a3; font-size: 13px; }

/* ---------- 主区与页头 ---------- */
.console-main { min-width: 0; padding: 28px 32px 56px; }
.console-main h1 { margin: 0 0 6px; font-size: 22px; font-weight: 700; letter-spacing: -.01em; }
.console-main > p { margin: 0; max-width: 76ch; color: var(--tx-2); font-size: 13.5px; }
.page-status {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  min-height: 28px;
  margin: 12px 0 20px;
  padding: 3px 14px 3px 11px;
  border: 1px solid var(--line-soft);
  border-radius: 999px;
  color: var(--tx-2);
  background: var(--surface-2);
  font-size: 12.5px;
}
.page-status::before { content: ""; width: 7px; height: 7px; border-radius: 50%; background: var(--green); box-shadow: 0 0 0 3px var(--green-soft); }
.page-status[data-state="error"]::before { background: var(--red); box-shadow: 0 0 0 3px var(--red-soft); }

/* ---------- 卡片 ---------- */
.overview-card, .module-link-card, .records-card, .detail-panel {
  padding: 20px 22px;
  border: 1px solid var(--line-soft);
  border-radius: var(--r-lg);
  background: var(--surface-1);
  box-shadow: var(--shadow-card);
  transition: background-color .25s var(--ease), border-color .25s var(--ease);
}
.overview-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 14px; }
.overview-card h2 { margin: 0; font-size: 12px; font-weight: 600; color: var(--tx-3); letter-spacing: .06em; }
.overview-card p { margin: 8px 0 0; font-size: 22px; font-weight: 700; font-variant-numeric: tabular-nums; }
.module-links { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px; margin-top: 18px; }
.module-link-card { color: var(--tx-1); text-decoration: none; font-weight: 600; font-size: 13.5px; transition: background-color .25s var(--ease), border-color .25s var(--ease), transform .15s var(--ease); }
.module-link-card:hover { border-color: var(--brand); transform: translateY(-1px); }

/* ---------- 筛选与表格 ---------- */
.filter-form { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; margin-bottom: 16px; }
.filter-form label { font-weight: 600; font-size: 13px; color: var(--tx-2); }
.filter-form input { min-height: 44px; flex: 1; max-width: 360px; border: 1px solid var(--line); border-radius: var(--r-sm); padding: 0 12px; color: var(--tx-1); background: var(--surface-1); transition: border-color .15s var(--ease); }
.filter-form input:hover { border-color: var(--tx-3); }
.filter-form button { min-height: 44px; border: 0; border-radius: var(--r-sm); color: var(--on-accent); background: var(--console-green); padding: 0 16px; cursor: pointer; font-weight: 600; font-size: 13px; transition: background-color .15s var(--ease); }
.filter-form button:hover { background: var(--accent-hover); }
.table-scroll { overflow-x: auto; }
.records-table { width: 100%; min-width: 760px; border-collapse: collapse; font-size: 13.5px; }
.records-table th, .records-table td { padding: 11px 12px; border-bottom: 1px solid var(--line-soft); text-align: left; white-space: nowrap; }
.records-table th { font-size: 11.5px; font-weight: 600; letter-spacing: .08em; color: var(--tx-3); border-bottom-color: var(--line); }
.records-table tbody tr { transition: background-color .12s var(--ease); }
.records-table tbody tr:hover { background: var(--accent-soft); }
.records-table tbody tr:last-child td { border-bottom: 0; }
.records-table button {
  min-height: 44px;
  border: 1px solid var(--line);
  border-radius: var(--r-sm);
  color: var(--tx-2);
  background: transparent;
  padding: 0 12px;
  margin: 2px 2px 2px 0;
  cursor: pointer;
  font-weight: 500;
  font-size: 12.5px;
  transition: color .15s var(--ease), border-color .15s var(--ease), background-color .15s var(--ease);
}
.records-table button:hover { color: var(--tx-1); border-color: var(--tx-3); background: var(--surface-2); }
.records-table button:disabled { opacity: .35; cursor: not-allowed; }
.records-table button:disabled:hover { color: var(--tx-2); border-color: var(--line); background: transparent; }

.detail-panel { margin-top: 16px; }
.detail-panel[hidden] { display: none; }

/* ---------- 审计页签 ---------- */
.audit-tabs { display: flex; flex-wrap: wrap; gap: 8px; margin: 0 0 16px; }
.audit-tab {
  min-height: 44px;
  padding: 0 18px;
  border: 1px solid var(--line);
  border-radius: 999px;
  color: var(--tx-2);
  background: var(--surface-1);
  cursor: pointer;
  font-size: 13px;
  font-weight: 500;
  transition: color .15s var(--ease), background-color .15s var(--ease), border-color .15s var(--ease);
}
.audit-tab:hover { border-color: var(--tx-3); }
.audit-tab[aria-selected="true"] { color: var(--on-accent); background: var(--console-green); border-color: var(--console-green); font-weight: 600; }

/* ---------- 分页 ---------- */
.records-pagination { display: flex; justify-content: flex-end; align-items: center; gap: 12px; margin-top: 14px; }
.records-pagination button { min-height: 44px; border: 1px solid var(--line); border-radius: var(--r-sm); background: transparent; color: var(--tx-2); padding: 0 16px; font-size: 13px; cursor: pointer; transition: color .15s var(--ease), border-color .15s var(--ease); }
.records-pagination button:hover:not(:disabled) { color: var(--tx-1); border-color: var(--tx-3); }
.records-pagination button:disabled { opacity: .4; cursor: not-allowed; }

/* ---------- 设置页 ---------- */
.section-heading { margin: 0 0 12px; font-size: 17px; font-weight: 650; }
.settings-grid .grid-title { margin: 0; font-size: 15px; font-weight: 650; }
.settings-heading { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; }
.settings-heading h1 { margin-bottom: 6px; }
.secondary-link {
  min-height: 44px;
  display: inline-flex;
  align-items: center;
  flex: 0 0 auto;
  padding: 0 16px;
  border: 1px solid var(--line);
  border-radius: var(--r-sm);
  color: var(--tx-1);
  background: var(--surface-1);
  text-decoration: none;
  font-size: 13px;
  font-weight: 500;
  transition: border-color .15s var(--ease), background-color .15s var(--ease);
}
.secondary-link:hover { border-color: var(--tx-3); background: var(--surface-2); }
.settings-meta {
  display: flex;
  flex-wrap: wrap;
  gap: 10px 28px;
  padding: 13px 20px;
  border: 1px solid var(--line-soft);
  border-radius: var(--r-lg) var(--r-lg) 0 0;
  color: var(--tx-3);
  background: var(--surface-2);
  font-size: 13px;
}
.settings-meta strong { color: var(--tx-1); font-variant-numeric: tabular-nums; }
.settings-card {
  margin-bottom: 18px;
  border: 1px solid var(--line-soft);
  border-radius: var(--r-lg);
  background: var(--surface-1);
  box-shadow: var(--shadow-card);
}
/* 设置页卡片紧贴版本条：去顶边、只留下圆角（admin-accounts 等页保持完整卡片） */
.settings-main .settings-card { border-top: 0; border-radius: 0 0 var(--r-lg) var(--r-lg); }
.settings-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 18px; padding: 22px; }
.settings-field { display: flex; flex-direction: column; gap: 7px; font-weight: 600; font-size: 13px; }
.settings-field-wide { grid-column: 1/-1; }
.settings-field input:hover, .settings-field textarea:hover { border-color: var(--tx-3); }
.settings-field input, .settings-field textarea {
  width: 100%;
  min-height: 44px;
  border: 1px solid var(--line);
  border-radius: var(--r-sm);
  padding: 10px 12px;
  color: var(--tx-1);
  background: var(--surface-1);
  font-weight: 400;
  font-size: 13.5px;
  transition: border-color .15s var(--ease);
}
/* 焦点环由全局 :focus-visible 规则提供，此处仅追加同色边框强化输入框聚焦轮廓 */
.settings-field input:focus-visible, .settings-field textarea:focus-visible {
  border-color: var(--focus-ring);
}
.settings-field textarea { resize: vertical; }
.settings-field select {
  min-height: 44px;
  border: 1px solid var(--line);
  border-radius: var(--r-sm);
  padding: 0 12px;
  color: var(--tx-1);
  background: var(--surface-1);
  font-weight: 400;
}
.settings-field small, .settings-switch small { display: block; color: var(--tx-3); font-weight: 400; font-size: 12px; line-height: 1.5; }
.settings-switch {
  min-height: 88px;
  display: flex;
  align-items: flex-start;
  gap: 12px;
  padding: 16px;
  border: 1px solid var(--line);
  border-radius: var(--r-md);
  cursor: pointer;
  transition: border-color .15s var(--ease);
}
.settings-switch:hover { border-color: var(--tx-3); }
.settings-switch input { width: 20px; height: 20px; margin: 2px 0 0; flex: 0 0 auto; accent-color: var(--console-green); }
.settings-switch strong { display: block; margin-bottom: 4px; }
.settings-savebar {
  display: flex;
  align-items: flex-end;
  gap: 18px;
  padding: 18px 22px;
  border-top: 1px solid var(--line-soft);
  background: var(--surface-2);
  border-radius: 0 0 var(--r-lg) var(--r-lg);
}
.settings-reason { flex: 1; }
.settings-actions { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 8px; }
.settings-savebar .button-primary, .settings-savebar button[type="submit"] {
  min-height: 44px;
  border: 0;
  border-radius: var(--r-sm);
  padding: 0 20px;
  color: var(--on-accent);
  background: var(--console-green);
  cursor: pointer;
  font-weight: 600;
  font-size: 13.5px;
  transition: background-color .15s var(--ease);
}
.settings-savebar .button-primary:hover, .settings-savebar button[type="submit"]:hover { background: var(--accent-hover); }
.settings-savebar .button-secondary, .detail-panel button {
  min-height: 44px;
  border: 1px solid var(--line);
  border-radius: var(--r-sm);
  color: var(--tx-1);
  background: transparent;
  padding: 0 16px;
  cursor: pointer;
  font-size: 13px;
  font-weight: 500;
  transition: border-color .15s var(--ease), background-color .15s var(--ease);
}
.settings-savebar .button-secondary:hover, .detail-panel button:hover { border-color: var(--tx-3); background: var(--surface-2); }
.settings-savebar .help { color: var(--tx-3); font-size: 12px; }
.console-main p.help { margin: 0; color: var(--tx-3); font-size: 12.5px; }
.settings-actions button { min-height: 44px; border: 0; border-radius: var(--r-sm); padding: 0 16px; color: var(--on-accent); background: var(--console-green); cursor: pointer; font-weight: 600; font-size: 13px; transition: background-color .15s var(--ease); }
.settings-actions button:hover { background: var(--accent-hover); }
.settings-actions .button-secondary { border: 1px solid var(--line); color: var(--tx-1); background: transparent; }
.settings-actions button:disabled, .settings-savebar button:disabled, .settings-field input:disabled, .settings-field textarea:disabled { opacity: .5; cursor: not-allowed; }
.settings-notice { margin: 0 0 14px; padding: 13px 16px; border: 1px solid rgba(184, 149, 74, .5); border-radius: var(--r-md); color: var(--tx-1); background: var(--brand-soft); }
:root[data-theme='dark'] .settings-notice { border-color: rgba(216, 176, 99, .5); }
.settings-notice[hidden] { display: none; }
.settings-conflict { margin-top: 16px; }
.settings-conflict h2 { margin: 0 0 8px; font-size: 17px; }
.settings-conflict p { margin: 5px 0; overflow-wrap: anywhere; color: var(--tx-2); }

/* ---------- 响应式（契约：768 段须含 .menu-toggle 可见与 .settings-grid 单列；375 段须含 .settings-actions 单列全宽） ---------- */
@media (max-width: 768px) {
  .menu-toggle { display: inline-flex; }
  .nav-operator { display: none; }
  .console-layout { grid-template-columns: 1fr; }
  .console-nav { display: none; border-bottom: 1px solid rgba(255, 255, 255, .12); position: static; max-height: none; overflow-y: visible; }
  .console-nav.is-open { display: block; box-shadow: 0 16px 40px rgba(2, 8, 6, .4); }
  .console-main { padding: 20px 18px 44px; }
  .overview-grid, .module-links { grid-template-columns: 1fr 1fr; }
  .settings-grid { grid-template-columns: 1fr; }
  .settings-field-wide { grid-column: auto; }
  .settings-savebar { align-items: stretch; flex-direction: column; }
  .settings-actions { justify-content: flex-start; }
}
@media (max-width: 375px) {
  .console-topbar { padding: 8px 12px; }
  .console-topbar strong { font-size: 15px; }
  .console-main { padding: 14px; }
  .overview-grid, .module-links { grid-template-columns: 1fr; }
  .filter-form { flex-direction: column; }
  .filter-form input { max-width: none; width: 100%; }
  .settings-heading { display: block; }
  .settings-heading .secondary-link { margin-top: 10px; }
  .settings-meta { display: grid; gap: 6px; }
  .settings-grid, .settings-savebar { padding: 16px; }
  .settings-actions { display: grid; grid-template-columns: 1fr; }
  .settings-actions button { width: 100%; }
}
@media (prefers-reduced-motion: reduce) {
  body, .console-nav a, .module-link-card, .records-table tbody tr, .records-table button, .filter-form button, .settings-savebar .button-primary, .settings-savebar button[type="submit"], .settings-actions button, .audit-tab, .secondary-link, .overview-card, .records-card, .detail-panel { transition: none; }
}

/* ── 生产计划：规格管理与生成任务（2026-09-15） ── */
.spec-averages { display: flex; flex-wrap: wrap; gap: 10px 28px; margin: 14px 0; padding: 12px 16px; border: 1px solid var(--line); border-radius: var(--r-sm); background: var(--panel, transparent); color: var(--tx-2); font-size: 13px; }
.spec-averages strong { color: var(--tx-1); font-size: 16px; margin: 0 2px; }
.spec-gender-title { margin: 18px 0 10px; font-size: 15px; color: var(--tx-1); }
.spec-table { min-width: 420px; }
.spec-table td { vertical-align: middle; }
.spec-table input[type="number"] { width: 96px; min-height: 38px; }
.gen-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 14px; margin-top: 14px; }
.gen-card { border: 1px solid var(--line); border-radius: var(--r-sm); padding: 16px; background: var(--panel, transparent); }
.gen-card h2 { margin: 0 0 10px; font-size: 14px; color: var(--tx-1); }
.gen-dl { display: grid; grid-template-columns: auto 1fr; gap: 6px 14px; margin: 0; font-size: 13px; }
.gen-dl dt { color: var(--tx-3); }
.gen-dl dd { margin: 0; color: var(--tx-1); text-align: right; }
.gen-chips { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 14px; }
.gen-chip { display: inline-flex; align-items: center; gap: 6px; min-height: 32px; padding: 4px 12px; border: 1px solid var(--line); border-radius: 999px; font-size: 12px; color: var(--tx-2); }
.gen-chip[data-state="done"] { border-color: var(--console-green); color: var(--console-green); }
.gen-chip[data-state="pending"] { color: var(--tx-3); }
.gen-chip[data-state="settled"] { border-style: dashed; color: var(--console-green); }
.gen-chip[data-state="off"] { border-style: dashed; }
.gen-note { margin: 10px 0 0; font-size: 12px; color: var(--tx-3); line-height: 1.6; }
.gen-actions { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 12px; }
.gen-actions button { min-height: 44px; border: 1px solid var(--line); border-radius: var(--r-sm); background: transparent; color: var(--tx-1); padding: 0 18px; font-size: 13px; cursor: pointer; transition: border-color .15s var(--ease), color .15s var(--ease); }
.gen-actions button:hover:not(:disabled) { border-color: var(--tx-3); }
.gen-actions button:disabled { opacity: .45; cursor: not-allowed; }
@media (max-width: 768px) { .gen-grid { grid-template-columns: 1fr; } }

/* ------------------------------ 日期选择面板（自绘中文日历，语言与浏览器界面语言无关） ------------------------------ */
.date-picker-panel {
    position: fixed;
    z-index: 60;
    min-width: 348px;
    max-height: calc(100vh - 16px);
    overflow-y: auto;
    padding: 12px;
    background: var(--surface-1);
    border: 1px solid var(--line);
    border-radius: var(--r-md);
    box-shadow: var(--shadow-card);
}
.dp-head { display: flex; align-items: center; gap: 4px; margin-bottom: 8px; }
.dp-head strong { flex: 1; text-align: center; font-size: 14px; color: var(--tx-1); letter-spacing: .04em; }
.dp-nav, .dp-foot button {
    border: 1px solid var(--line); border-radius: var(--r-sm);
    background: transparent; color: var(--tx-2); cursor: pointer;
    transition: background .15s var(--ease), color .15s var(--ease);
}
.dp-nav:hover, .dp-foot button:hover { background: var(--accent-soft); color: var(--tx-1); }
.dp-nav { width: 44px; height: 44px; font-size: 14px; line-height: 1; }
.dp-grid { display: grid; grid-template-columns: repeat(7, 1fr); gap: 2px; }
.dp-dow { padding: 4px 0; font-size: 11px; color: var(--tx-3); text-align: center; letter-spacing: .1em; }
.dp-blank { min-height: 44px; }
.dp-day {
    min-width: 44px; min-height: 44px; border: 0; border-radius: var(--r-sm); background: transparent;
    color: var(--tx-1); font-size: 13px; font-variant-numeric: tabular-nums; cursor: pointer;
    transition: background .15s var(--ease);
}
.dp-day:hover { background: var(--accent-soft); }
.dp-day.is-today { box-shadow: inset 0 0 0 1px var(--brand); }
.dp-day.is-selected { background: var(--accent); color: var(--on-accent); }
.dp-foot { display: flex; justify-content: space-between; gap: 8px; margin-top: 10px; }
.dp-foot button { min-height: 44px; padding: 0 12px; font-size: 12.5px; }
.settings-field input[data-date-picker] { cursor: pointer; }
@media (max-width: 375px) { .date-picker-panel { left: 8px !important; right: 8px !important; min-width: 0; padding: 10px; } }

/* 批次记录多选删除（2026-09-15）：消费语义 token，日/夜主题自动适配 */
.records-toolbar {
    display: flex;
    justify-content: flex-end;
    padding: 0 4px 12px;
}

.records-toolbar button {
    min-height: 44px;
    padding: 0 16px;
    border: 1px solid var(--line);
    border-radius: var(--r-sm);
    background: transparent;
    color: var(--tx-2);
    font-weight: 500;
    font-size: 12.5px;
    cursor: pointer;
    transition: color .15s var(--ease), border-color .15s var(--ease), background-color .15s var(--ease);
}

.records-toolbar button:hover {
    color: var(--tx-1);
    border-color: var(--tx-3);
    background: var(--surface-2);
}

.records-toolbar button[hidden] { display: none; }

#recordsBody input[type="checkbox"],
.records-table th input[type="checkbox"] {
    width: 16px;
    height: 16px;
    accent-color: var(--accent);
    cursor: pointer;
}

/* 员工与排班（2026-09-17）：部门页签、月份切换与排班色块（全部语义 token，暗色自动适配） */
.dept-tabs { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }
.dept-tabs button {
    border: 1px solid var(--line);
    background: var(--surface-2);
    color: var(--tx-2);
    border-radius: var(--r-sm, 6px);
    padding: 4px 12px;
    cursor: pointer;
}
.dept-tabs button[aria-selected="true"] {
    border-color: var(--accent);
    color: var(--tx-1);
    background: var(--surface-1);
}
.roster-month { display: inline-flex; align-items: center; gap: 8px; margin-left: auto; color: var(--tx-1); }
.roster-month button {
    border: 1px solid var(--line);
    background: var(--surface-2);
    color: var(--tx-2);
    border-radius: var(--r-sm, 6px);
    width: 28px;
    height: 28px;
    cursor: pointer;
}
#rosterTable td { text-align: center; }
#rosterTable td[data-kind="rest"] { color: var(--tx-3); background: var(--surface-2); }
#rosterTable td[data-kind="1"] { color: var(--console-gold); }
#rosterTable td[data-kind="2"] { color: var(--console-green); }
#rosterTable td[data-kind="3"] { color: var(--accent); }
