/* base.css —— 前台与后台共用的设计令牌与基础组件。
   令牌名全站统一；页面级差异（前台导航 / 后台抽屉等）在 site.css / console.css。
   主题三档：无 cookie = body.auto（跟随系统 prefers-color-scheme）；
   cookie=light/dark = 固定亮/暗（见 resolvePrefs）。
   令牌纪律（UIUX 规范 §二）：**新增值必须先加令牌，禁止逐处写 px/色值**。 */
:root{
  /* 色（GitHub Dark 基因 + 品牌绿 #5aba42） */
  --bg:#0d1117;--panel:#161b22;--panel2:#1c2129;--line:#30363d;
  --fg:#e6edf3;--dim:#8b949e;--accent:#5aba42;--ok:#3fb950;--warn:#d29922;--bad:#f85149;
  --btn:#21262d;--input:#0d1117;--code-bg:#21262d;--code-fg:#a5c9f5;
  /* 交互态色（选中/hover/遮罩）：全部令牌化，禁止第四种彩色进界面 */
  --hover:rgba(127,127,127,.13);
  --accent-soft:rgba(90,186,66,.14);--accent-line:rgba(90,186,66,.4);
  --ok-soft:rgba(63,185,80,.15);--warn-soft:rgba(210,153,34,.15);--bad-soft:rgba(248,81,73,.15);
  --ok-line:rgba(63,185,80,.35);--warn-line:rgba(210,153,34,.35);
  --on-accent:#fff;
  --mask:rgba(1,4,9,.62);
  --shadow-drawer:-18px 0 48px rgba(1,4,9,.55);
  /* 次级文字的加深档（亮色下"看得见但很淡"时用） */
  --dim-strong:var(--dim);
  /* 标签色板（kind/状态徽章；深色底取值，亮色在 body.light 覆盖） */
  --tag-claim:#79c0ff;--tag-claim-line:#1f6feb55;--tag-claim-soft:rgba(31,111,235,.18);
  --tag-request:#d2a8ff;--tag-request-line:#8957e555;--tag-request-soft:rgba(137,87,229,.18);
  --tag-lang:#a5d6ff;--tag-lang-line:#1f6feb44;
  --font-sans:-apple-system,BlinkMacSystemFont,"SF Pro SC","PingFang SC",sans-serif;
  /* 等宽：一切"机器产物"（命令、字段名、id、账本行、.txt 产物）一律用 --mono（P1 终端原生） */
  --mono:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
  /* 间距刻度（家族 4/8/12/16/24/32；--sp-* 为规范名，--s* 为同值旧名，新代码用 --sp-*） */
  --sp-1:4px;--sp-2:8px;--sp-3:12px;--sp-4:16px;--sp-5:24px;--sp-6:32px;
  --s1:var(--sp-1);--s2:var(--sp-2);--s3:var(--sp-3);--s4:var(--sp-4);--s5:var(--sp-5);--s6:var(--sp-6);--s8:48px;
  /* 圆角：卡片/按钮统一 --radius，pill 用全圆 */
  --radius:8px;--radius-pill:999px;
  --r1:6px;--r2:var(--radius);--r3:12px;
  /* 字号（家族字阶 12/13/14/16/20/28；禁止逐处写 px） */
  --fs-xs:12px;--fs-sm:13px;--fs-md:14px;--fs-lg:16px;--fs-xl:20px;--fs-2xl:28px;
  /* 动效（须在 prefers-reduced-motion 下降级，见下） */
  --dur-fast:120ms;--dur:200ms;
  /* 阴影 */
  --shadow-1:0 1px 2px rgba(1,4,9,.35);--shadow-2:0 8px 24px rgba(1,4,9,.45);
  /* 前台"外壳宽度"：**内容区与顶栏内容共用同一个宽度**，保证两者左对齐线一致。
     为什么单列一个令牌：此前 .layout 写死 1180px、顶栏按视口贴边，宽屏上两者错开（看着"没对齐、粗糙"）。 */
  --shellw:1440px;   /* 外壳宽度（内容区与顶栏共用）。1440 = 现代营销/内容站主流档（1280 偏保守、1536+ 适合仪表盘）；
                          注意：**正文可读宽度另受 66ch 限制**，外壳放宽不会让正文行过长。 */
}
/* 亮色：灰底白卡（GitHub 风格，卡片靠底色差"立"起来，而不是白底灰卡） */
body.light{
  --bg:#f6f8fa;--panel:#ffffff;--panel2:#f6f8fa;--line:#d0d7de;
  --fg:#1f2328;--dim:#59636e;--dim-strong:#4a5460;--accent:#2f7a22;--ok:#1a7f37;--warn:#9a6700;--bad:#cf222e;
  --btn:#ffffff;--input:#ffffff;--code-bg:#eaeef2;--code-fg:#2f7a22;
  --accent-soft:rgba(47,122,34,.1);--accent-line:rgba(47,122,34,.35);
  --ok-soft:rgba(26,127,55,.12);--warn-soft:rgba(154,103,0,.12);--bad-soft:rgba(207,34,46,.1);
  --mask:rgba(31,35,40,.5);
  --shadow-1:0 1px 2px rgba(31,35,40,.06);--shadow-2:0 8px 24px rgba(31,35,40,.12);
  --shadow-drawer:-18px 0 48px rgba(31,35,40,.25);
  --tag-claim:#0550ae;--tag-claim-line:#0550ae55;--tag-claim-soft:rgba(9,105,218,.12);
  --tag-request:#6639ba;--tag-request-line:#6639ba55;--tag-request-soft:rgba(102,57,186,.12);
  --tag-lang:#0550ae;--tag-lang-line:#0550ae44;
}
/* 无偏好 cookie 时跟随系统 */
@media (prefers-color-scheme: light){
  body.auto{
    --bg:#f6f8fa;--panel:#ffffff;--panel2:#f6f8fa;--line:#d0d7de;
    --fg:#1f2328;--dim:#59636e;--dim-strong:#4a5460;--accent:#2f7a22;--ok:#1a7f37;--warn:#9a6700;--bad:#cf222e;
    --btn:#ffffff;--input:#ffffff;--code-bg:#eaeef2;--code-fg:#2f7a22;
    --accent-soft:rgba(47,122,34,.1);--accent-line:rgba(47,122,34,.35);
    --ok-soft:rgba(26,127,55,.12);--warn-soft:rgba(154,103,0,.12);--bad-soft:rgba(207,34,46,.1);
    --mask:rgba(31,35,40,.5);
    --shadow-1:0 1px 2px rgba(31,35,40,.06);--shadow-2:0 8px 24px rgba(31,35,40,.12);
    --shadow-drawer:-18px 0 48px rgba(31,35,40,.25);
    --tag-claim:#0550ae;--tag-claim-line:#0550ae55;--tag-claim-soft:rgba(9,105,218,.12);
    --tag-request:#6639ba;--tag-request-line:#6639ba55;--tag-request-soft:rgba(102,57,186,.12);
    --tag-lang:#0550ae;--tag-lang-line:#0550ae44;
  }
}
/* 减少动态偏好：全站尊重（过渡/动画一律关掉） */
@media (prefers-reduced-motion: reduce){
  *,*::before,*::after{transition:none!important;animation:none!important;scroll-behavior:auto!important}
}
*{box-sizing:border-box}
body{margin:0;background:var(--bg);color:var(--fg);font-variant-numeric:tabular-nums;
     font:var(--fs-md)/1.7 var(--font-sans)}
a{color:var(--accent)}
/* 键盘可见焦点：全站统一（鼠标点击不触发，仅键盘导航显示） */
:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
/* 跳到主内容（键盘/读屏用户的第一站；视觉隐藏，聚焦时浮现） */
.skip{position:absolute;left:-9999px;top:0;z-index:100;background:var(--accent);color:var(--on-accent);
      padding:var(--s2) var(--s4);border-radius:0 0 var(--r2) 0;text-decoration:none;font-size:var(--fs-sm)}
.skip:focus{left:0;color:var(--on-accent)}

/* 站点标识：内联 SVG 用 currentColor 随主题换色 */
.ic{width:16px;height:16px;flex:0 0 16px;opacity:.85}
.logo{height:30px;width:auto;display:block;color:var(--fg)}

code{background:var(--code-bg);color:var(--code-fg);padding:1px 5px;border-radius:4px;
     font-family:var(--mono);font-size:var(--fs-xs);word-break:break-all}
pre.body{background:var(--bg);border:1px solid var(--line);border-radius:var(--r1);padding:var(--s3);
         white-space:pre-wrap;word-break:break-word;font:var(--fs-sm)/1.75 var(--mono);margin:var(--s2) 0}
/* 等宽工具类：条目 id、账本行、命令等"机器产物"就地取用（P1） */
.mono{font-family:var(--mono)}

/* 表单控件统一：高 35px、focus 时 accent 描边 ring */
input:not([type=checkbox]):not([type=radio]):not([type=hidden]),select,textarea{
  color:var(--fg);background:var(--input);border:1px solid var(--line);border-radius:var(--r1);
  font:inherit;font-size:var(--fs-sm)}
input:not([type=checkbox]):not([type=radio]):not([type=hidden]),select{min-height:35px;padding:0 11px}
textarea{padding:var(--s2) 11px}
input:focus-visible,select:focus-visible,textarea:focus-visible{
  outline:none;border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 28%,transparent)}

/* 标签：前台是描边式；后台在 console.css 里覆盖成填充式 */
.tag{display:inline-block;padding:1px 7px;border-radius:10px;font-size:var(--fs-xs);
     border:1px solid var(--line);color:var(--dim)}
.tag.claim{color:var(--tag-claim);border-color:var(--tag-claim-line)}
.tag.request{color:var(--tag-request);border-color:var(--tag-request-line)}
.tag.ext{color:var(--warn);border-color:var(--warn-line)}
.tag.cited{color:var(--ok);border-color:var(--ok-line)}
.tag.lang{color:var(--tag-lang);border-color:var(--tag-lang-line)}
a.taglink{text-decoration:none}
a.taglink:hover{border-color:var(--accent);color:var(--accent)}

.card{background:var(--panel);border:1px solid var(--line);border-radius:var(--r2);
      padding:var(--s3) 14px;margin:0 0 10px;box-shadow:var(--shadow-1)}
.card h3{margin:0 0 4px;font-size:var(--fs-md)}
.card h3 a{color:var(--fg);text-decoration:none}
.card h3 a:hover{color:var(--accent)}
.meta{color:var(--dim);font-size:var(--fs-xs);display:flex;gap:9px;flex-wrap:wrap;align-items:center}
.meta .mtime{margin-left:auto}
/* 条目卡第二行 meta：tags/语言/状态沉底（第一行只留 kind/板块/作者/被引用/时间五项） */
.meta2{margin-top:6px}
.abs{color:var(--dim);font-size:var(--fs-sm);margin-top:6px}
/* md 渲染产物自带 p/ul 结构；容器里收紧段距，避免卡片被拉得过长 */
.abs p{margin:2px 0}
.abs ul{margin:4px 0;padding-left:20px}
/* 摘要是"引子"不是正文：结构化元素（标题/表格/引用）在卡里降级为普通文字流 */
.abs h1,.abs h2,.abs h3{font-size:var(--fs-sm);margin:2px 0;border:0;padding:0;font-weight:600}
.abs table{margin:4px 0;font-size:var(--fs-xs)}
.abs blockquote{margin:4px 0;padding:4px 10px}
.abs pre{margin:4px 0}
.prov{font-size:var(--fs-sm);color:var(--dim)}
.empty{color:var(--dim);padding:14px 0}

/* 四态统一（UIUX G3）：空 / 加载 / 错误 / 无权限。
   空状态即引导：一句说明 + 一个主行动（不放裸"暂无数据"）；
   行内/表格单元格里的轻量空态仍用小字 .empty（见上）。 */
.state{border:1px dashed var(--line);border-radius:var(--radius);padding:var(--s6) var(--s4);
       text-align:center;color:var(--dim);font-size:var(--fs-sm);margin:var(--s4) 0;line-height:1.7}
.state .t{display:block;color:var(--fg);font-weight:600;font-size:var(--fs-md);margin-bottom:var(--s1)}
.state .cta{justify-content:center;margin:var(--s3) 0 0}
.state.error{border-style:solid;border-color:var(--bad)}
.state.error .t{color:var(--bad)}
.state.forbid{border-style:solid;border-color:var(--warn-line)}
.state.forbid .t{color:var(--warn)}
.state.loading{border-style:solid}
.state.loading .t::after{content:"…";animation:statepulse 1.2s infinite}
@keyframes statepulse{50%{opacity:.3}}
@media (prefers-reduced-motion:reduce){.state.loading .t::after{animation:none}}

/* 键值面板（前台「页面版 vs TXT」、后台「内容概览」共用） */
.panel{background:var(--panel);border:1px solid var(--line);border-radius:var(--r2);padding:6px 14px;box-shadow:var(--shadow-1)}
.panel .row{display:flex;gap:14px;padding:9px 0;border-bottom:1px solid var(--line);align-items:baseline}
.panel .row:last-child{border-bottom:0}
.panel .lbl{flex:0 0 92px;color:var(--dim);font-size:var(--fs-xs)}
.panel .val{flex:1;min-width:0;font-size:var(--fs-sm)}
.panel .val .tag{margin-right:2px}

/* 统计格（前台 /credit、后台概览共用） */
.stat{display:flex;gap:10px;flex-wrap:wrap;margin:10px 0 6px}
.stat>div{background:var(--panel);border:1px solid var(--line);border-radius:var(--r2);
          padding:var(--s2) var(--s3);min-width:118px;box-shadow:var(--shadow-1)}
.stat .k{color:var(--dim);font-size:var(--fs-xs)}
.stat .v{font-size:var(--fs-xl);font-weight:600;line-height:1.3}
.stat .unit{font-size:var(--fs-xs);color:var(--dim);font-weight:400}

/* 数字增减（被引用 / 流水） */
.cite{font-variant-numeric:tabular-nums;font-weight:600}
.cite.zero{color:var(--dim);font-weight:400}
.cite.pos{color:var(--ok)}

/* 表格：全部外包横向滚动容器（窄屏不挤爆版心）。
   注意必须给 min-width —— 否则浏览器会无限压列（文字竖排断行），横滚永远不会出现。 */
.tablewrap{overflow-x:auto}
.tablewrap>table{min-width:720px}
table{width:100%;border-collapse:collapse;font-size:var(--fs-md)}
th,td{text-align:left;padding:7px 8px;border-bottom:1px solid var(--line);vertical-align:top}
th{color:var(--dim);font-weight:500;font-size:var(--fs-xs);white-space:nowrap}
/* 表格单元格里的 code（twin id 等长标识）不逐字断行 —— 宁可横滚，也不把 id 拆成竖排 */
.tablewrap td{word-break:normal;white-space:nowrap}
/* md 渲染产物进单元格时去掉段落距（名录表头等） */
.tablewrap td p{margin:0}
/* 文档里的表格（markdown 渲染）允许换行：那里是长文本论述，不是运营短字段 */
.doc .tablewrap td{white-space:normal}
.tablewrap td code{word-break:normal;overflow-wrap:anywhere}

/* 回复聚合 */
.replies{margin:8px 0 0 14px;border-left:2px solid var(--line);padding-left:12px}
.replies .r{padding:6px 0;border-bottom:1px dashed var(--line)}
.replies .r:last-child{border-bottom:0}

/* 只读提示横幅（slim = 一行小字版：三连长句压缩，详情链到 /policy） */
.ro{background:var(--panel);border:1px solid var(--line);border-left:3px solid var(--accent);
    border-radius:var(--r1);padding:10px 14px;margin:0 0 18px;color:var(--dim);font-size:var(--fs-sm)}
.ro b{color:var(--fg)}
.ro.slim{display:flex;align-items:center;gap:6px;flex-wrap:wrap;padding:7px 12px;
         font-size:var(--fs-xs);margin:0 0 14px}
.ro.slim .ic{width:14px;height:14px;flex:0 0 14px;color:var(--accent);opacity:1}

/* 文档页（/guide /policy /conventions /economy 的正文渲染） */
.doc h1{font-size:var(--fs-xl);margin:var(--s5) 0 var(--s3)}
.doc h2{font-size:var(--fs-lg);margin:22px 0 8px;padding-bottom:6px;border-bottom:1px solid var(--line)}
.doc h3{font-size:var(--fs-md);margin:16px 0 6px}
.doc p,.doc li{font-size:var(--fs-md);line-height:1.8}
/* 引用：源文档常见逐行 `>` 写法，渲染成逐条 blockquote —— 让它们无缝连成一整块，
   空引用行（`>` 后没内容）直接隐藏，不再留白条 */
.doc blockquote{margin:0;padding:6px 14px;border-left:3px solid var(--accent);
                background:var(--panel);color:var(--dim);border-radius:0}
.doc blockquote:empty{display:none}
.doc blockquote p{margin:2px 0}
.doc table{margin:10px 0}
.doc hr{border:0;border-top:1px solid var(--line);margin:18px 0}

/* 首页步骤条：编号步骤卡（与"是什么/对 Agent"的卡片格区分视觉权重） */
ol.steps{counter-reset:step;list-style:none;padding:0;margin:10px 0 4px;display:grid;
         grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:var(--s3);
         color:var(--dim);font-size:var(--fs-sm);line-height:1.75}
.steps li{counter-increment:step;background:var(--panel);border:1px solid var(--line);
          border-radius:var(--r2);padding:var(--s3) 14px;box-shadow:var(--shadow-1)}
.steps li::before{content:counter(step);display:inline-flex;width:22px;height:22px;align-items:center;
                  justify-content:center;border-radius:50%;background:var(--accent);color:var(--on-accent);
                  font-weight:700;font-size:var(--fs-xs);margin-bottom:var(--s2)}
.steps b{color:var(--fg)}

/* 卡片格（首页三段、/agent 路径）；alt = 第二视觉权重（左侧色条区分"对 Agent"段） */
.cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:var(--s3);margin:10px 0 4px}
.cards>div{background:var(--panel);border:1px solid var(--line);border-radius:var(--r2);
           padding:var(--s3) 14px;box-shadow:var(--shadow-1)}
.cards.alt>div{border-left:3px solid var(--ok)}
.cards p{color:var(--dim);font-size:var(--fs-sm);margin:6px 0 0}

/* 按钮两级：primary 与默认（ghost） */
.btn{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--line);border-radius:var(--r2);
     min-height:35px;padding:0 14px;color:var(--fg);text-decoration:none;font-size:var(--fs-md);
     background:var(--panel);box-shadow:var(--shadow-1)}
.btn:hover{border-color:var(--accent);color:var(--accent)}
.btn.primary{background:var(--accent);border-color:var(--accent);color:var(--on-accent)}
.btn.primary:hover{opacity:.92;color:var(--on-accent)}
.cta{display:flex;gap:10px;flex-wrap:wrap;margin:14px 0 6px}

/* 并排产物块（首页 P3「产物优于形容」的容器：条目 ↔ 账本流水 并排一屏看懂；窄屏堆叠） */
.duo{display:grid;grid-template-columns:1fr 1fr;gap:var(--s3);margin:10px 0 4px}
@media(max-width:860px){.duo{grid-template-columns:1fr}}

/* 页脚：分栏（品牌+定位 / 文档 / 接入 / 规范）+ 底部两行小字说明 */
.foot{margin-top:var(--s8);padding-top:var(--s5);border-top:1px solid var(--line);
      color:var(--dim);font-size:var(--fs-xs)}
.footgrid{display:grid;grid-template-columns:minmax(220px,1.4fr) repeat(3,minmax(130px,1fr));
          gap:var(--s5);margin-bottom:var(--s5)}
.fcol{display:flex;flex-direction:column;gap:var(--s2);align-items:flex-start}
.fcol a{color:var(--dim);text-decoration:none;font-size:var(--fs-xs)}
.fcol a:hover{color:var(--accent)}
.fh{color:var(--fg);font-weight:600;font-size:var(--fs-xs)}
.fbrand p{margin:var(--s2) 0 0;max-width:32ch;line-height:1.6}
.fnote{margin-top:var(--s2);line-height:1.6}
@media(max-width:760px){.footgrid{grid-template-columns:1fr 1fr;gap:var(--s4)}}
