/* ==========================================================================
   叶护卫 · 设计令牌（全站唯一来源 · 2026 版）
   设计依据：AgTech 2026（高对比 / 行动优先 / 置信度可视化）
             + 农户实测范式（极简首页 · 无强制登录 · 大按钮 · 拇指热区）
             + 适老化（大字号 · 可切换特大字）
   说明：此前 3 套互不兼容的 :root（2026 版 / 基础层 / ⑤ 配色补丁）已合并至本块。
        全站令牌只在本块定义；下方 html.dark / body.big 仅做「模式覆盖」。
   ========================================================================== */
:root{
  /* ---------- 1. 色板 ---------- */
  --forest:#0f7a45;              /* 主色 · 农业绿 */
  --forest-2:#2a9d63;            /* 主色 · 浅（悬停/辅助） */
  --forest-050:#e8f5ee;          /* 主色 · 极浅底 */
  --leaf:#66bb6a;                /* 辅助 · 叶绿 */
  --accent:#c8861a;              /* 强调 · 琥珀（关键数字 / 标签） */
  --accent-050:rgba(200,134,26,.10);
  --earth:#8d6e46;               /* 土壤棕 */
  --ok:#1faa59;                  /* 语义 · 成功 */
  --warn:#e8862e;                /* 语义 · 预警 */
  --danger:#d1495b;              /* 语义 · 危险 */
  --info:#2f6fd0;                /* 语义 · 信息 */

  /* 中性 5 档 */
  --ink:#14251c;                 /* 正文主 */
  --ink-2:#3c5046;               /* 正文次 */
  --ink-3:#68796f;               /* 弱化（对比度 ≥4.5:1） */
  --muted:#68796f;               /* 语义别名，同 --ink-3 */
  --white:#ffffff;              /* 恒定白（深色下也用于反绿底文字） */
  --black:#000000;              /* 恒定黑（遮罩 / 极深底） */
  --forest-600:#0c6839;         /* 主色 · 深（徽标文字） */
  --bg:#f5f8f4;
  --card:#ffffff;
  --card-2:#f0f4ef;
  --hair:rgba(20,37,28,.10);     /* 半透明描边（深浅色双向适配） */
  --line:#dfe7dd;                /* 实色描边 */


  /* ---------- 2. 文本字阶（12 档 · 全站禁用硬编码 px） ---------- */
  --fs-1:11px;                   /* 微字（角标 / 密集标注） */
  --fs-2:12px;                   /* 脚注 */
  --fs-3:13.5px;                 /* 小字（辅助说明） */
  --fs-4:14.5px;                 /* 正文基准 */
  --fs-5:15.5px;                 /* 正文强调 */
  --fs-6:16.5px;                 /* 小标题 */
  --fs-7:18px;                   /* 四级标题 */
  --fs-8:20px;                   /* 三级标题 */
  --fs-9:22px;                   /* 二级标题 */
  --fs-10:26px;                  /* 一级标题 */
  --fs-11:31px;                  /* 展示级 */
  --fs-12:34px;                  /* 特大数字 */

  /* ---------- 2b. 图标尺度（6 档 · 表情/字形图标统一用 --ico-*） ---------- */
  --ico-1:15px; --ico-2:17px; --ico-3:19px; --ico-4:22px; --ico-5:26px; --ico-6:34px;

  /* ---------- 3. 间距（6 档） ---------- */
  --sp-1:4px; --sp-2:8px; --sp-3:12px; --sp-4:16px; --sp-5:24px; --sp-6:32px;

  /* ---------- 4. 圆角 ---------- */
  --r-sm:10px; --r-md:16px; --r-lg:22px; --r-pill:999px;
  --r-card:18px; --r-btn:12px;

  /* ---------- 5. 阴影（唯一来源 · 双层） ---------- */
  --sh-1:0 1px 2px rgba(16,60,38,.05), 0 2px 8px rgba(16,60,38,.05);
  --sh-2:0 8px 24px rgba(16,60,38,.10), 0 2px 6px rgba(16,60,38,.06);
  --sh-3:0 16px 40px rgba(16,60,38,.14);

  /* ---------- 6. 动效 / 热区 ---------- */
  --tr:200ms cubic-bezier(.22,.8,.28,1);
  --tap:56px;                    /* 拇指热区最小高度 */

  /* ---------- 7. 兼容别名（旧名 → 新名；仅供历史规则引用，新代码请用新名） ---------- */
  --c-primary:var(--forest);    --c-primary-600:var(--forest-600);      --c-primary-050:var(--forest-050);
  --c-earth:var(--earth);       --c-warn:var(--warn);         --c-danger:var(--danger);
  --c-ok:var(--ok);             --c-info:var(--info);
  --c-bg:var(--bg);             --c-surface:var(--card);      --c-surface-2:var(--card-2);
  --c-line:var(--line);         --c-text:var(--ink);          --c-text-2:var(--ink-2);
  --c-text-3:var(--ink-3);
  --shadow-1:var(--sh-1);       --shadow-2:var(--sh-2);
  --fs-base:var(--fs-6);               --fs-h1:var(--fs-10);                 --fs-h2:var(--fs-8);
  --fs-h3:var(--fs-6);                 --fs-sm:var(--fs-3);               --fs-xs:var(--fs-2);
  --sp:var(--sp-4);
}

/* ---------- 深色模式：仅覆盖色值（令牌结构不变） ---------- */
html.dark{
  --ink:#e9f4ed; --ink-2:#c0d4c8; --ink-3:#93ac9f; --muted:#93ac9f;
  --bg:#071810; --card:#0f2419; --card-2:#0b1d14;
  --hair:rgba(233,244,237,.12); --line:#254034;
  --forest:#3fce85; --forest-2:#57b57f;
  --sh-1:0 1px 3px rgba(0,0,0,.4);
  --sh-2:0 10px 26px rgba(0,0,0,.5);
  --sh-3:0 16px 40px rgba(0,0,0,.6);
}

/* ---------- 大字模式（适老）：整体放大字阶 / 间距 / 热区 ---------- */
body.big{
  --fs-1:13.5px; --fs-2:15px;   --fs-3:16.5px; --fs-4:18px;  --fs-5:19px;  --fs-6:20.5px;
  --fs-7:22px;   --fs-8:24px;   --fs-9:27px;   --fs-10:30px; --fs-11:36px; --fs-12:40px;
  --ico-1:18px; --ico-2:20px; --ico-3:23px; --ico-4:26px; --ico-5:30px; --ico-6:38px;
  --sp-2:10px; --sp-4:20px; --sp-5:28px; --sp-6:36px;
  --tap:64px;
  /* 兼容别名同步（历史规则仍可放大） */
  --fs-base:19px; --fs-h1:31px; --fs-h2:24px; --fs-h3:20px; --fs-sm:16px; --fs-xs:14px;
}

/* ==========================================================================
   子页共享：基础可访问性 + 排版精度
   —— 与 style.css 同一套令牌（本文件由 style.css 头部自动导出，勿单独编辑）
   ========================================================================== */
*{box-sizing:border-box}
:focus-visible{ outline:2px solid var(--forest); outline-offset:2px; border-radius:6px }
.sr-only{ position:absolute; width:1px; height:1px; padding:0; margin:-1px; overflow:hidden;
  clip:rect(0 0 0 0); white-space:nowrap; border:0 }
/* 长串 / 域名不随意拆行 */
.cm-src, .note, .tip, code, kbd, samp { overflow-wrap:anywhere; word-break:break-word }
a[href^="http"]{ white-space:nowrap }
@media (prefers-reduced-motion: reduce){
  *, *::before, *::after{ animation-duration:.001ms !important; transition-duration:.001ms !important }
}

/* ==========================================================================
   统一顶部导航（#wbNavBar）· 由 nav.js 迁移为静态样式
   —— 原先由 nav.js 在运行期 <style> 注入，首屏会出现「无样式导航」闪动；
      迁移到此文件后，样式随样式表一起解析，无闪动。
      nav.js 仅在检测不到本样式表时兜底注入同一份 CSS。
   ========================================================================== */
#wbNavBar{position:sticky;top:0;left:0;right:0;z-index:99999;display:flex;flex-wrap:nowrap;align-items:center;padding:0 16px;background:#fff;border-bottom:1px solid rgba(20,37,28,.08);height:52px;box-sizing:border-box;overflow:visible;font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei",sans-serif}html.dark #wbNavBar{background:#0f2419;border-bottom-color:rgba(233,244,237,.08)}#wbNavBar *{box-sizing:border-box;margin:0}#wbNavBar .nb-brand{display:inline-flex;align-items:center;gap:5px;margin:0 14px 0 0;padding:0;border:0;background:none;text-decoration:none;flex:0 0 auto;height:52px}#wbNavBar .nb-leaf{font-size:18px;line-height:1}#wbNavBar .nb-name{font-size:15px;font-weight:800;color:#14251c;line-height:1}html.dark #wbNavBar .nb-name{color:#e9f4ed}#wbNavBar .nb-items{display:flex;flex-wrap:nowrap;align-items:center;gap:0;flex:1 1 0;min-width:0;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none;height:52px}#wbNavBar .nb-items::-webkit-scrollbar{display:none}#wbNavBar .nb-item{display:inline-flex;align-items:center;justify-content:center;height:52px;padding:0 12px;margin:0;flex:0 0 auto;border:0;border-radius:0;background:transparent;box-shadow:none;text-decoration:none;color:#5a6b60;font-size:13.5px;font-weight:600;line-height:52px;white-space:nowrap;cursor:pointer;transition:color .2s,background .2s;font-family:inherit}html.dark #wbNavBar .nb-item{color:#a0b8aa}#wbNavBar .nb-item:hover{color:#0f7a45;background:rgba(15,122,69,.06)}#wbNavBar .nb-item.on{color:#0f7a45;font-weight:700;border-bottom:2.5px solid #0f7a45}html.dark #wbNavBar .nb-item.on{color:#3fce85;border-bottom-color:#3fce85}#wbNavBar .nb-actions{display:inline-flex;align-items:center;gap:6px;margin-left:auto;flex:0 0 auto;height:52px;padding-left:8px}#wbNavBar .nb-action{display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;border-radius:50%;border:1px solid rgba(20,37,28,.12);background:transparent;color:#5a6b60;font-size:14px;cursor:pointer;text-decoration:none;font-family:inherit}#wbNavBar .nb-action:hover{background:rgba(15,122,69,.08)}html.dark #wbNavBar .nb-action{border-color:rgba(233,244,237,.15);color:#a0b8aa}#wbNavBar .nb-login{width:auto;padding:0 14px;border-radius:20px;background:#0f7a45;color:#fff;font-weight:600;font-size:13px;border:0;height:34px}#wbNavBar .nb-login:hover{background:#0c6840}#wbNavBar .nb-bigfont{font-weight:800;font-size:13px;font-family:Georgia,serif}#wbNavBar .nb-bigfont.on{background:#0f7a45;color:#fff;border-color:#0f7a45}@media (max-width: 768px){#wbNavBar{padding:0 10px;height:48px}#wbNavBar .nb-item{height:48px;line-height:48px;padding:0 9px;font-size:13px}#wbNavBar .nb-items{height:48px}}

/* ==========================================================================
   统一四态：loading / empty / error / disabled（新代码请复用这四组类名）
   ========================================================================== */
/* 1) loading：骨架占位 + 脉冲 */
@keyframes wbPulse{ 0%{opacity:.55} 50%{opacity:1} 100%{opacity:.55} }
.leaf-skel, .skel{ background:linear-gradient(90deg, rgba(20,37,28,.06) 25%, rgba(20,37,28,.11) 37%, rgba(20,37,28,.06) 63%);
  background-size:400% 100%; animation:wbPulse 1.4s ease-in-out infinite; border-radius:10px; min-height:14px }
html.dark .leaf-skel, html.dark .skel{ background:linear-gradient(90deg, rgba(233,244,237,.07) 25%, rgba(233,244,237,.14) 37%, rgba(233,244,237,.07) 63%); background-size:400% 100% }
.wb-spin{ width:20px;height:20px;border:2px solid var(--hair);border-top-color:var(--forest);border-radius:50%;
  animation:wbSpin .8s linear infinite;display:inline-block;vertical-align:-4px }
@keyframes wbSpin{ to{ transform:rotate(360deg) } }
/* 2) empty：克制的空状态 */
.empty,.wb-empty{ display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;
  padding:26px 16px;text-align:center;color:var(--muted);font-size:var(--fs-2);line-height:1.7 }
.empty .i,.wb-empty .i{ font-size:26px;opacity:.7 }
/* 3) error：统一错误提示（替代散落的 .err 变体） */
.err,.wb-err,.auth-err{ color:var(--danger); font-size:var(--fs-2); line-height:1.7 }
.err:not(:empty),.wb-err:not(:empty){ background:rgba(209,73,91,.08); border:1px solid rgba(209,73,91,.22);
  border-radius:var(--r-btn); padding:9px 12px }
/* 4) disabled：统一禁用态 */
[disabled],.is-disabled,[aria-disabled="true"]{ opacity:.5; cursor:not-allowed; transform:none !important; box-shadow:none !important }
[aria-busy="true"]{ cursor:progress }

/* ===== 旧导航一律隐藏：统一顶栏 #wbNavBar 是唯一导航 =====
   （原先由 nav.js 运行期注入；静态化时遗漏，导致 enhance.js 生成的 .topnav/.tn-item
     以浏览器默认按钮样式露出 —— 已补回） */
.topnav, .subnav, .back-bar, .tabbar, .topbar { display: none !important; }

/* ===== 大字模式（适老）在子页同样生效 =====
   子页字号已全部改引 --fs-* / --ico-*，这里只需补上「非字号」的放大项。 */
body.big{ font-size: var(--fs-4); }
body.big .btn, body.big button, body.big .opt, body.big .mode, body.big .tmore { min-height: 52px; }
body.big #wbNavBar .nb-item { font-size: var(--fs-5) !important; min-height: 46px !important; }
body.big #wbNavBar { height: auto; min-height: 56px; }
body.big table, body.big .card { line-height: 1.85; }
body.big .kpi, body.big .cell { padding-top: 14px; padding-bottom: 14px; }
body.big th, body.big td { padding: 12px 12px; }

/* 桌面密度：子页栅格（与 style.css 同规则） */
@media (min-width: 640px){
  .atlas-grid{ grid-template-columns: repeat(3, 1fr) }
  .intro-cards{ grid-template-columns: repeat(3, 1fr) }
}
/* ===== 账号菜单 + 轻提示（登录后状态）· 与 nav.js 保持一致 ===== */
#wbNavBar .nb-who{color:#fff;background:#0f7a45;border-color:#0f7a45;font-weight:700}#wbNavBar .nb-who:hover{background:#0c6840}#wbNavBar .nb-menu{position:absolute;top:calc(100% + 8px);right:0;min-width:190px;display:none;flex-direction:column;gap:2px;padding:6px;border-radius:14px;background:#fff;border:1px solid rgba(20,37,28,.10);box-shadow:0 12px 32px rgba(16,60,38,.16);z-index:100001;text-align:left}#wbNavBar .nb-account.open .nb-menu{display:flex}#wbNavBar .nb-menu-head{padding:7px 10px 9px;font-size:12.5px;color:#68796f;border-bottom:1px solid rgba(20,37,28,.08);margin-bottom:3px}#wbNavBar .nb-menu button{appearance:none;border:0;background:transparent;color:#14251c;font:inherit;font-size:13.5px;text-align:left;padding:9px 10px;border-radius:9px;cursor:pointer;white-space:nowrap}#wbNavBar .nb-menu button:hover{background:rgba(15,122,69,.09);color:#0f7a45}html.dark #wbNavBar .nb-menu{background:#0f2419;border-color:rgba(233,244,237,.14)}html.dark #wbNavBar .nb-menu-head{color:#93ac9f;border-bottom-color:rgba(233,244,237,.12)}html.dark #wbNavBar .nb-menu button{color:#e9f4ed}html.dark #wbNavBar .nb-menu button:hover{background:rgba(63,206,133,.14);color:#7fe3ab}.wb-nav-toast{position:fixed;left:50%;bottom:26px;transform:translateX(-50%);z-index:100002;background:rgba(10,26,18,.94);color:#eaf5ee;font-size:13px;padding:9px 16px;border-radius:999px;box-shadow:0 8px 24px rgba(0,0,0,.3);max-width:88vw;text-align:center}


/* ★ 统一内容宽度（2026-10-09）
   背景：原先每个页面各自在内联样式里写 .wrap 宽度，值还不一致（1440/1120/820），
   结果"改一处只修好一页"。这里收归一处，并改为**流式**：任何宽屏都只留少量边距。
   注意：法务页(privacy / user-agreement)自己有更窄的定义，属**故意的可读性选择**，不要覆盖。 */
.wrap{ width:100%; margin:0 auto; padding:0 16px }
@media (min-width: 1024px){
  .wrap{ max-width:min(1680px, calc(100vw - 48px)); padding:0 24px }
}
@media (min-width: 2400px){
  .wrap{ max-width:min(2160px, calc(100vw - 48px)) }
}


/* 美术改造（2026-10-09）
   ② 头像：实测"丑"的主因是中间那个默认占位，不是框本身。
      无图时给柔和绿渐变底 + 内高光；并给金属环补一层内高光，让"铜/金"有实体感。
   ③ 返回链接：裸文字 → 胶囊按钮（图标 + 悬停反馈）。
      用 .wrap .top a 提高特异性，压过各页自己的内联 .top a —— 一处生效，不用改 12 个页面。 */
.av {
  background: linear-gradient(150deg, #e8f7ef, #cdefdc 55%, #b6e5cd);
  color: #0f7a45; font-weight: 800;
  box-shadow: inset 0 1px 0 rgba(255,255,255,.85), inset 0 -2px 6px rgba(16,60,38,.10);
}
html.dark .av {
  background: linear-gradient(150deg, #17352a, #14301f 55%, #0f2419);
  color: #7fe3ab;
  box-shadow: inset 0 1px 0 rgba(233,244,237,.16), inset 0 -2px 6px rgba(0,0,0,.35);
}
.avf::before {
  content: ""; position: absolute; inset: 0; border-radius: inherit;
  background: linear-gradient(180deg, rgba(255,255,255,.42), rgba(255,255,255,0) 42%, rgba(0,0,0,.16));
  opacity: .75; pointer-events: none;
}
.avf.avf-none::before { display: none; }

.wrap .top a {
  display: inline-flex; align-items: center; gap: 6px;
  padding: 8px 14px; margin-right: 4px;
  border-radius: 999px;
  border: 1px solid rgba(15,122,69,.22);
  background: rgba(15,122,69,.07);
  color: #0f7a45; font-weight: 700; font-size: 13.5px;
  text-decoration: none;
  transition: background .18s ease, transform .18s ease, border-color .18s ease;
}
.wrap .top a:hover {
  background: rgba(15,122,69,.14);
  border-color: rgba(15,122,69,.38);
  transform: translateY(-1px);
}
.wrap .top a:active { transform: translateY(0); }
html.dark .wrap .top a {
  border-color: rgba(127,227,171,.26);
  background: rgba(127,227,171,.10);
  color: #7fe3ab;
}
html.dark .wrap .top a:hover { background: rgba(127,227,171,.18); }
