/* 盈泰德 Intsoft 官网 · 全站样式
   白底黑字，只有首页首屏是深底；强调色是一档石墨黑，不做底、不带彩。
   纪律：内容一律走 .container ／ 区块之间用 1px 发丝线 ／ 禁用左侧单边描边 */

:root {
  /* 底色：中性灰，不带蓝也不带绿 */
  --c-bg:        #ffffff;
  --c-bg-alt:    #f4f5f6;
  --c-surface:   #ffffff;
  --c-surface-2: #f2f3f5;

  /* 分隔线，分节主要靠这 1px */
  --c-line:        #e5e7ea;
  --c-line-strong: #cdd1d6;

  /* 文字：标题 → 正文 → 次要，一段石墨灰阶 */
  --c-ink:   #0e1116;
  --c-body:  #333a42;
  --c-muted: #666e78;

  /* 白底上的强调色。文字一律用 700 这档（白底 18.3:1，极淡底 16.2:1）；
     亮的几档只做极淡的底、下划线和装饰，绝不承载正文。 */
  --c-accent:      #868d96;   /* 装饰用中灰，只出现在描边和色块上 */
  --c-accent-700:  #14181d;   /* 文字级强调：链接、按钮底、激活态 */
  --c-accent-800:  #000000;   /* 悬停再深一档 */
  --c-accent-050:  #f1f2f4;   /* 极淡底：悬停背景、胶囊底、要点框 */
  --c-accent-tint: #cfd4da;   /* 下划线、淡边框 */
  --c-accent-900:  #0b0d10;   /* 首页首屏的深底 */

  /* 链接绿：全站唯一保留的彩色。正文内链、「了解详情」、术语索引、
     本页目录都用这一档 —— 它们是可以点进去的内容，需要一眼认出来。
     导航、按钮、分页这些属于界面框架而不是链接，仍然是石墨灰。
     这一档不是为了好看才选这么深：白底上要过 AA 4.5:1，浅绿过不了。 */
  --c-link:       #0a7d4f;
  --c-link-hover: #086a43;
  --c-link-tint:  #a9d6c0;   /* 正文内链的下划线，纯装饰 */

  --c-warn:      #b45309;
  --c-warn-bg:   #fffaf0;
  --c-warn-line: #f2e0bd;
  /* 合格/通过也用石墨黑：状态由「有没有颜色」区分，异常才是暖色 */
  --c-ok:        #14181d;
  --c-err:       #b42318;
  --c-err-bg:    #fef3f2;
  --c-err-line:  #fcd9d6;

  --radius:    12px;
  --radius-sm: 8px;
  --radius-lg: 16px;

  /* 阴影一律用中性灰，别带颜色 */
  --shadow-sm: 0 1px 2px rgba(14, 17, 22, .05);
  --shadow:    0 2px 8px -2px rgba(14, 17, 22, .08), 0 1px 2px rgba(14, 17, 22, .04);
  --shadow-lg: 0 12px 32px -12px rgba(14, 17, 22, .16), 0 2px 8px -2px rgba(14, 17, 22, .06);

  /* 间距刻度，margin/padding 只取这里的值 */
  --s1:  8px;
  --s2: 16px;
  --s3: 24px;
  --s4: 32px;
  --s5: 48px;
  --s6: 64px;
  --s7: 96px;
  --s8: 128px;

  /* 正文行宽。用 rem 不用 em，否则同一页会出现两条右边缘 */
  --measure:     45rem;

  --container:   1220px;
  --gutter:      24px;

  --font-sans:   -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC",
                 "Hiragino Sans GB", "Microsoft YaHei", "Source Han Sans SC",
                 "Noto Sans CJK SC", Roboto, Helvetica, Arial, sans-serif;
  --font-mono:   ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas,
                 "Liberation Mono", monospace;
}

/* ---------- reset ---------- */
*, *::before, *::after { box-sizing: border-box; }
/* scroll-padding-top 要和 .article-aside 的 top 一致，否则锚点跳转后标题被导航盖住 */
html { -webkit-text-size-adjust: 100%; scroll-behavior: smooth; scroll-padding-top: 92px; }
body {
  margin: 0;
  font-family: var(--font-sans);
  font-size: 17px;
  line-height: 1.85;
  color: var(--c-body);
  background-color: var(--c-bg);
  text-rendering: optimizeLegibility;
  -webkit-font-smoothing: antialiased;
}
img, video { max-width: 100%; height: auto; display: block; }

h1, h2, h3, h4 {
  color: var(--c-ink);
  line-height: 1.25;
  margin: 0 0 .6em;
  font-weight: 700;
  letter-spacing: -.02em;
}
/* 大气靠字号和字重，不靠大留白 */
h1 { font-size: clamp(2.05rem, 4.4vw, 3.25rem); font-weight: 800; letter-spacing: -.03em; }
h2 { font-size: clamp(1.5rem, 2.7vw, 2.25rem); }
h3 { font-size: clamp(1.12rem, 1.6vw, 1.35rem); }
p  { margin: 0 0 1.15em; }
/* 默认链接色走绿。界面框架那几处（导航、页脚、面包屑、分页、语言切换）
   各自写了颜色，用的都是石墨灰，不会被这条带跑；
   术语索引这类没有单独样式的链接列表，就靠这条拿到绿色。 */
a  { color: var(--c-link); text-decoration: none; }
a:hover { color: var(--c-link-hover); text-decoration: underline; }
ul, ol { margin: 0 0 1.15em; padding-left: 1.35em; }
li { margin-bottom: .4em; }
strong, b { color: var(--c-ink); }

::selection { background: rgba(20, 24, 29, .12); color: var(--c-ink); }
:focus-visible { outline: 2px solid var(--c-accent-700); outline-offset: 2px; border-radius: 3px; }

::-webkit-scrollbar { width: 11px; height: 11px; }
::-webkit-scrollbar-track { background: var(--c-bg-alt); }
::-webkit-scrollbar-thumb { background: var(--c-line-strong); border-radius: 8px; border: 2px solid var(--c-bg-alt); }
::-webkit-scrollbar-thumb:hover { background: var(--c-muted); }

/* ---------- 表格 ---------- */
table {
  --cell-pad-x: 20px;
  --cell-pad-y: 15px;
  border-collapse: collapse; width: 100%; margin: 0 0 1.6em; font-size: .95rem;
}
th, td { border: 1px solid var(--c-line); padding: var(--cell-pad-y) var(--cell-pad-x); text-align: left; vertical-align: top; }
thead th {
  background: var(--c-surface-2); color: var(--c-ink);
  font-family: var(--font-mono); font-size: .82rem;
  /* 字距 .02em 让拉丁字母有等宽感，中英混排又不散。不加 nowrap，宁可折行 */
  letter-spacing: .02em; font-weight: 700;
}
/* 首列是行标签，不该跟着内容列一起被撑宽 */
th:first-child, td:first-child { width: 20%; }
tbody th { font-weight: 700; color: var(--c-ink); }
tbody tr { transition: background .16s; }
tbody tr:nth-child(even) { background: #f6f7f9; }
tbody tr:hover { background: var(--c-accent-050); }
caption {
  caption-side: top; text-align: left;
  padding: var(--cell-pad-y) var(--cell-pad-x);
  font-size: .9rem; color: var(--c-muted);
  border-bottom: 1px solid var(--c-line);
  background: var(--c-surface);
}
time { color: var(--c-muted); font-size: .89rem; }

/* 窄屏下表格比视口宽是必然的，让它自己滚，别撑宽整页 */
.table-wrap {
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
  margin: 0 0 var(--s4);
  border: 1px solid var(--c-line);
  border-radius: var(--radius);
  background: var(--c-surface);
  box-shadow: var(--shadow-sm);
}
.table-wrap table { margin: 0; border: 0; }
.table-wrap th, .table-wrap td { border-width: 0 0 1px; }
.table-wrap thead th { border-top: 0; }
.table-wrap tbody tr:last-child th,
.table-wrap tbody tr:last-child td { border-bottom: 0; }

/* 工位执行看板示意图，画出来的界面示意，不是客户截图 */
.board th:first-child,
.board td:first-child { width: 12%; white-space: nowrap; }

.board-station,
.board-sn,
.board-time { font-family: var(--font-mono); font-size: .88rem; letter-spacing: .01em; }
.board-station { font-weight: 700; color: var(--c-ink); }
.board-sn      { color: var(--c-body); }
.board-time    { color: var(--c-muted); }

/* 判定胶囊：合格淡底，异常实底，让看板上只有一条抓眼睛的 */
.board-verdict {
  display: inline-block;
  padding: 2px 11px;
  border-radius: 999px;
  font-size: .8rem;
  font-weight: 700;
  line-height: 1.6;
  white-space: nowrap;
}
.board-verdict--ok   { background: var(--c-accent-050); color: var(--c-accent-700); }
/* 白字对 --c-warn 是 5.02:1 */
.board-verdict--warn { background: var(--c-warn); color: #fff; }

.board tbody tr.is-flagged { background: var(--c-warn-bg); }
.board tbody tr.is-flagged:hover { background: var(--c-warn-bg); }

/* 当无障碍标签用时，表题的边距底色边框都要清掉 */
.board caption.sr-only { padding: 0; background: transparent; border-bottom: 0; }

/* 表下那行「界面示意」是注脚，不是内容块，收一档间距 */
.section-board .table-wrap { margin-bottom: var(--s3); }
.board-note {
  margin: 0;
  font-family: var(--font-mono);
  font-size: .78rem;
  line-height: 1.6;
  letter-spacing: .01em;
  color: var(--c-muted);
}

@media (max-width: 640px) {
  table { --cell-pad-x: 10px; --cell-pad-y: 10px; }

  .board th:first-child,
  .board td:first-child { width: auto; }

  .board-sn,
  .board-time { font-size: .76rem; white-space: nowrap; }

  /* 五列硬塞比横滚更差。460 是各列一行放得下的下限，滚动关在这张卡片里 */
  .board { min-width: 460px; }
}

.container { width: 100%; max-width: var(--container); margin-inline: auto; padding-inline: var(--gutter); }

.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;
}
.skip-link {
  position: absolute; left: -9999px; top: 0; z-index: 100;
  background: var(--c-accent-700); color: #fff; padding: .7em 1.1em;
  border-radius: 0 0 var(--radius-sm) 0; font-weight: 700;
}
.skip-link:focus { left: 0; }

/* ---------- 通用零件 ---------- */

/* 眉标，目前只有 flow.php 用，不给它加装饰线 */
.eyebrow, .section-head .eyebrow {
  display: inline-block;
  font-family: var(--font-mono);
  font-size: .78rem; font-weight: 600; letter-spacing: .16em; text-transform: uppercase;
  color: var(--c-accent-700);
  margin-bottom: 14px;
}

/* ---------- 按钮 ---------- */
.btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 8px;
  padding: .82em 1.6em; border-radius: var(--radius-sm);
  font-weight: 600; font-size: .98rem; line-height: 1.2; text-align: center;
  border: 1px solid transparent; cursor: pointer;
  transition: background .16s, color .16s, border-color .16s, box-shadow .16s, transform .16s;
}
.btn:hover { text-decoration: none; transform: translateY(-1px); }
/* 白字对绿底 5.17:1。白底站不能用亮绿底配黑字 */
.btn-primary {
  background: var(--c-accent-700);
  color: #fff; font-weight: 700;
  box-shadow: var(--shadow-sm);
}
.btn-primary:hover { background: var(--c-accent-800); color: #fff; box-shadow: var(--shadow); }
.btn-ghost { border-color: var(--c-line-strong); color: var(--c-ink); background: var(--c-surface); }
.btn-ghost:hover { border-color: var(--c-accent-700); color: var(--c-accent-700); background: var(--c-accent-050); }
.btn-lg { padding: 1em 2em; font-size: 1.05rem; }

/* ---------- 页头 ---------- */
.site-header {
  position: sticky; top: 0; z-index: 50;
  background: rgba(255, 255, 255, .92);
  backdrop-filter: saturate(180%) blur(14px);
  border-bottom: 1px solid var(--c-line);
}
.site-header::after {
  content: ''; position: absolute; left: 0; right: 0; bottom: -1px; height: 1px;
  background: linear-gradient(90deg, transparent, rgba(20, 24, 29, .55), transparent);
  pointer-events: none;
}
.header-inner { display: flex; align-items: center; gap: 18px; min-height: 76px; }
.brand { display: flex; align-items: center; gap: 11px; color: var(--c-ink); flex: 0 0 auto; }
.brand:hover { text-decoration: none; }
/* 品牌标。原图是红绿蓝三块的图形标，透明底，直接压在页头的白底上；
   盒子尺寸必须锁死在 42px —— 它撑的是整个页头的高度，改了这个导航会跟着跳。 */
.brand-mark { width: 42px; height: 42px; flex: 0 0 auto; object-fit: contain; display: block; }
.brand-text { display: flex; flex-direction: column; line-height: 1.28; }
.brand-text strong { color: var(--c-ink); font-size: 1.08rem; letter-spacing: -.01em; }
.brand-text small { color: var(--c-muted); font-size: .755rem; letter-spacing: .02em; }

/* 这层必须 flex，.nav-tools 和 <ul> 平级，不然工具条会掉到第二行 */
.main-nav { margin-left: auto; display: flex; align-items: center; gap: 4px; }
.main-nav > ul { display: flex; align-items: center; gap: 4px; list-style: none; margin: 0; padding: 0; }
.main-nav > ul > li { position: relative; margin: 0; }
.main-nav > ul > li > a {
  display: block; padding: .6em .9em; color: var(--c-body); font-size: .96rem;
  font-weight: 500; border-radius: var(--radius-sm); white-space: nowrap;
  transition: background .15s, color .15s;
}
.main-nav > ul > li > a:hover { background: var(--c-accent-050); color: var(--c-accent-700); text-decoration: none; }
.main-nav .is-active > a { color: var(--c-accent-700); font-weight: 700; }
.main-nav .is-active > a::after {
  content: ''; display: block; height: 2px; margin-top: 3px; border-radius: 2px;
  background: var(--c-accent);
}

/* 下拉宽度跟着最长条目走。写死 min-width 会让长标题单独折行 */
.submenu {
  position: absolute; top: 100%; left: 0; z-index: 20;
  width: max-content; min-width: 250px;
  background: var(--c-surface); border: 1px solid var(--c-line); border-radius: var(--radius);
  box-shadow: var(--shadow-lg); padding: 8px; margin: 0; list-style: none;
  display: none;
}
.has-children:hover .submenu, .has-children:focus-within .submenu { display: block; }
.submenu li { margin: 0; }
/* nowrap 兜底：将来有比面板还长的标题，只会撑宽面板 */
.submenu a { display: block; padding: .55em .8em; border-radius: var(--radius-sm); font-size: .92rem; color: var(--c-body); white-space: nowrap; }
.submenu a:hover { background: var(--c-accent-050); color: var(--c-accent-700); text-decoration: none; }

.nav-tools { display: flex; align-items: center; gap: 8px; margin-left: 18px; }
.nav-search { color: var(--c-muted); display: grid; place-items: center; padding: 7px; border-radius: var(--radius-sm); }
.nav-search:hover { color: var(--c-accent-700); background: var(--c-accent-050); }
.lang-switch { display: flex; gap: 3px; font-size: .86rem; }
.lang-switch a { padding: .35em .6em; border-radius: var(--radius-sm); color: var(--c-muted); }
.lang-switch a:hover { background: var(--c-accent-050); color: var(--c-accent-700); text-decoration: none; }
.lang-switch a.is-current { background: var(--c-accent-700); color: #fff; font-weight: 700; }

.nav-toggle { display: none; margin-left: auto; cursor: pointer; padding: 9px; }
.nav-toggle span { display: block; width: 24px; height: 2px; background: var(--c-ink); margin: 5px 0; border-radius: 2px; }

/* ---------- 区块与节奏 ---------- */
/* 只用 border-top 分节，任意两块之间永远恰好一条线 */
.section { padding: clamp(48px, 5.2vw, 80px) 0; border-top: 1px solid var(--c-line); }
.section-alt { background: var(--c-bg-alt); }
/* 首屏自己就是深色分界，下面那块不用再来一条 */
.hero + .section, .hero + .section-takeaways { border-top: 0; }

/* 标题组和下面的正文共用 --measure，右边缘才对得齐 */
.section-head { max-width: var(--measure); margin-bottom: var(--s5); }
.section-head h2 { margin-bottom: .45em; }
.section-head p { color: var(--c-muted); margin: 0; font-size: 1.05rem; }
.section-more { margin-top: var(--s5); }

/* ---------- 首屏 hero（全站唯一的深色区）---------- */
.hero {
  /* 深底上的强调就是「近白」：这一区只有明暗，没有色相。
     底本身也从墨绿转成了石墨黑，跟全站的白底黑字是同一套灰阶的两端。 */
  --hero-accent: #f2f3f5;
  --hero-text: #b6bcc4;
  --hero-muted: #8a9199;
  position: relative;
  isolation: isolate;
  overflow: hidden;
  color: var(--hero-text);
  background:
    radial-gradient(760px 340px at 4% -18%, rgba(255, 255, 255, .07), transparent 62%),
    radial-gradient(1000px 480px at 94% 4%, rgba(255, 255, 255, .04), transparent 64%),
    linear-gradient(165deg, #0a0c0f 0%, #12151a 55%, #171b21 100%);
  padding: clamp(64px, 8vw, 112px) 0 clamp(52px, 6.5vw, 88px);
}
/* 网格底纹，白底上会变噪点，只在这里用 */
.hero::before {
  content: ''; position: absolute; inset: 0; z-index: -1; opacity: .55;
  background-image:
    linear-gradient(rgba(242, 243, 245, .09) 1px, transparent 1px),
    linear-gradient(90deg, rgba(242, 243, 245, .09) 1px, transparent 1px);
  background-size: 62px 62px;
  mask-image: radial-gradient(ellipse 78% 62% at 50% 30%, #000 30%, transparent 78%);
  -webkit-mask-image: radial-gradient(ellipse 78% 62% at 50% 30%, #000 30%, transparent 78%);
}
/* 文案 + 配图两栏，数字行横贯两栏 */
.hero-inner {
  position: relative;
  display: grid;
  /* 右栏 520 和 ≤1080px 折叠时 .hero-shot 的 max-width 同值 */
  grid-template-columns: minmax(0, 1fr) minmax(0, 520px);
  gap: var(--s5) var(--s6);
  align-items: center;
}

.hero h1 { color: #fff; max-width: 17em; margin-bottom: .5em; text-wrap: balance; }
.hero-lead {
  font-size: clamp(1.02rem, 1.5vw, 1.2rem);
  color: var(--hero-text); max-width: 44em; line-height: 1.85;
}
.hero-actions { display: flex; flex-wrap: wrap; gap: 14px; margin-top: var(--s4); }
/* --c-accent-700 是为白底算的，压在近黑底上会糊，这里翻成亮绿底配深字 */
.hero .btn-primary { background: var(--hero-accent); color: #0b0d10; }
.hero .btn-primary:hover { background: #d7dade; color: #0b0d10; }
.hero .btn-ghost {
  background: rgba(255, 255, 255, .06);
  border-color: rgba(242, 243, 245, .38); color: #fff;
  backdrop-filter: blur(4px);
}
.hero .btn-ghost:hover { background: rgba(242, 243, 245, .14); border-color: var(--hero-accent); color: var(--hero-accent); }

/* 首屏配图是个取景框，四角括号和扫描线都是 CSS 画的 */
.hero-shot {
  margin: 0;
  border: 1px solid rgba(242, 243, 245, .22);
  border-radius: var(--radius-lg);
  background: rgba(255, 255, 255, .04);
  overflow: hidden;
  box-shadow: 0 24px 60px rgba(0, 0, 0, .45), 0 0 90px -24px rgba(242, 243, 245, .45);
}
.hs-view { position: relative; overflow: hidden; }
.hs-view picture, .hs-view img { display: block; width: 100%; height: auto; }
.hs-view::before {
  content: ''; position: absolute; inset: 14px; pointer-events: none;
  background-repeat: no-repeat;
  background-image:
    linear-gradient(var(--hero-accent), var(--hero-accent)), linear-gradient(var(--hero-accent), var(--hero-accent)),
    linear-gradient(var(--hero-accent), var(--hero-accent)), linear-gradient(var(--hero-accent), var(--hero-accent)),
    linear-gradient(var(--hero-accent), var(--hero-accent)), linear-gradient(var(--hero-accent), var(--hero-accent)),
    linear-gradient(var(--hero-accent), var(--hero-accent)), linear-gradient(var(--hero-accent), var(--hero-accent));
  background-size: 22px 2px, 2px 22px, 22px 2px, 2px 22px, 22px 2px, 2px 22px, 22px 2px, 2px 22px;
  background-position: 0 0, 0 0, 100% 0, 100% 0, 0 100%, 0 100%, 100% 100%, 100% 100%;
  opacity: .9;
}
/* 扫描线用 top 百分比走全程，不依赖框高 */
.hs-scan {
  position: absolute; left: 14px; right: 14px; top: 0; height: 1px;
  background: linear-gradient(90deg, transparent, var(--hero-accent), transparent);
  opacity: .5;
  animation: hs-scan 6.5s linear infinite;
}
@keyframes hs-scan { from { top: 0; } to { top: 100%; } }
@media (prefers-reduced-motion: reduce) { .hs-scan { display: none; } }

.hs-bar {
  display: flex; align-items: center; gap: 10px;
  padding: 12px 16px;
  border-top: 1px solid rgba(242, 243, 245, .18);
  font-family: var(--font-mono); font-size: .78rem; letter-spacing: .06em;
  color: var(--hero-muted);
}
.hs-dot { width: 7px; height: 7px; border-radius: 50%; background: var(--hero-accent); box-shadow: 0 0 0 3px rgba(242, 243, 245, .16); }
.hs-fps { margin-left: auto; }

/* 1080 由右栏 520 反推，左栏要留够，否则 H1 会碎成四五行 */
@media (max-width: 1080px) {
  .hero-inner { grid-template-columns: 1fr; gap: var(--s5); }
  .hero-shot { max-width: 520px; }
}

.hero-stats {
  grid-column: 1 / -1;
  display: grid; gap: 28px 44px;
  grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
  list-style: none;
  margin: var(--s4) 0 0; padding: var(--s4) 0 0;
  border-top: 1px solid rgba(242, 243, 245, .22);
}
.hero-stats li { margin: 0; display: flex; flex-direction: column; gap: 2px; }
.hero-stats strong {
  font-family: var(--font-mono);
  color: var(--hero-accent); font-size: clamp(1.7rem, 3vw, 2.3rem); font-weight: 800;
  letter-spacing: -.02em; line-height: 1.15;
}
.hero-stats span { color: var(--hero-muted); font-size: .9rem; }

/* ---------- 要点 / takeaways ---------- */
.block-takeaways {
  background: var(--c-accent-050);
  border: 1px solid var(--c-accent-tint);
  border-radius: var(--radius);
  padding: 26px 30px;
  margin: var(--s5) 0;
}

/* 首页那条走满幅色带，不套卡片边框；padding 要盖回 .section 的 */
.section-takeaways {
  padding: clamp(40px, 4.4vw, 64px) 0;
  background: var(--c-accent-050);
}

/* 左文案右示意图。两栏都写 minmax(0,…)，否则子项最小内容宽度会顶破容器 */
.takeaways-inner {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 420px);
  gap: var(--s6);
  align-items: center;
}
.takeaways-main { max-width: var(--measure); }

/* 白面板从淡绿色带上抬起来，图直接顶到卡边 */
.takeaways-visual {
  margin: 0;
  background: var(--c-surface);
  border: 1px solid var(--c-accent-tint);
  border-radius: var(--radius);
  overflow: hidden;
  box-shadow: var(--shadow-sm);
}
.takeaways-visual img { display: block; width: 100%; height: auto; }
.takeaways-visual figcaption {
  font-family: var(--font-mono);
  font-size: .78rem; line-height: 1.5; letter-spacing: .01em;
  color: var(--c-muted); text-align: center;
  padding: var(--s3) var(--s2);
  border-top: 1px solid var(--c-line);
}

/* 窄屏退单栏，图下沉到列表下方，不隐藏，它是有 alt 的图片 */
@media (max-width: 900px) {
  .takeaways-inner { grid-template-columns: 1fr; gap: var(--s5); }
  .takeaways-main { max-width: none; }
  .takeaways-visual { max-width: 420px; }
}

.section-takeaways h2 {
  font-size: clamp(1.28rem, 2.1vw, 1.55rem);
  color: var(--c-ink);
  letter-spacing: -.01em;
  margin-bottom: .75em;
}
/* 卡片式要点块才用全大写小字做标题 */
.block-takeaways h2 {
  font-size: 1.02rem; margin-bottom: .9em; color: var(--c-accent-700);
  font-family: var(--font-mono); letter-spacing: .1em; text-transform: uppercase; font-weight: 700;
}
.takeaways, .block-takeaways ul { margin: 0; padding-left: 1.25em; }
.takeaways li, .block-takeaways li { color: var(--c-ink); margin-bottom: .55em; }
/* 列表圆点用最深的 700 档：中灰的小圆点太小，看不出颜色 */
.takeaways li::marker, .block-takeaways li::marker { color: var(--c-accent-700); }

/* ---------- 卡片 ---------- */
.card-grid, .feature-grid {
  display: grid; gap: 24px; list-style: none; margin: 0; padding: 0;
  grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
}
/* 正好 4 个条目排三列会剩一张孤卡，右边空掉三分之二 */
.card-grid--2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }

/* 条目数除不尽列数时（如 7 个行业页），grid 把残缺那行甩在左边，换 flex 居中 */
.card-grid--center { display: flex; flex-wrap: wrap; justify-content: center; }
.card-grid--center > .card { flex: 0 1 calc((100% - 48px) / 3); min-width: 0; }
@media (max-width: 1000px) {
  .card-grid--center > .card { flex-basis: calc((100% - 24px) / 2); }
}
.card {
  position: relative;
  background: var(--c-surface);
  border: 1px solid var(--c-line);
  border-radius: var(--radius);
  padding: 30px 28px 26px;
  margin: 0;
  overflow: hidden;
  box-shadow: var(--shadow-sm);
  transition: box-shadow .22s, transform .22s, border-color .22s;
  /* 卡片被网格拉成等高，正文长短不一，不把「了解详情」压到卡底箭头就对不齐 */
  display: flex; flex-direction: column;
}
.card > .card-more { margin-top: auto; }
/* 封面负 margin 出血到卡边，圆角交给 .card 的 overflow 裁。
   固定 16:9 让同行封面等高，flex 0 0 auto 防止弹性列把它压扁。
   这里必须显式写 max-width: none —— reset 的 img{max-width:100%} 会把图卡在
   内容盒上而负 margin 照旧生效，结果是图左贴边、右空 57px。
   横向出血量 = 左右 padding(28×2) + 左右 border(1×2) */
.card-cover {
  flex: 0 0 auto;
  display: block;
  max-width: none;
  width: calc(100% + 58px);
  margin: -30px -29px 22px;
  aspect-ratio: 16 / 9;
  object-fit: cover;
  border: 0;
  border-bottom: 1px solid var(--c-line);
  border-radius: 0;
}
/* 无封面卡片的等尺寸占位，没有它同行标题会往上跳 203px。
   用斜纹不用纯灰块，纯灰块像加载失败 */
.card-cover-blank {
  background-color: var(--c-surface-2);
  background-image: repeating-linear-gradient(
    135deg,
    transparent 0 7px,
    rgba(14, 17, 22, .045) 7px 8px
  );
}

.card img:not(.card-cover) { flex: 0 0 auto; margin: 0 0 1em; border-radius: var(--radius-sm); border: 1px solid var(--c-line); }
/* 顶部渐变条展开，代替整块变色 */
.card::before {
  content: ''; position: absolute; top: 0; left: 0; height: 3px; width: 100%;
  background: var(--c-accent);
  transform: scaleX(0); transform-origin: left;
  transition: transform .3s ease;
}
/* 悬停上浮。不要加绿色光晕，白底上就是一圈脏绿 */
.card:hover { box-shadow: var(--shadow-lg); border-color: var(--c-line-strong); transform: translateY(-3px); }
.card:hover::before { transform: scaleX(1); }
.card h3 { font-size: 1.16rem; margin-bottom: .5em; line-height: 1.4; }
.card h3 a { color: var(--c-ink); }
.card:hover h3 a { color: var(--c-link); }
.card h3 a:hover { color: var(--c-link); text-decoration: none; }
.card p { color: var(--c-muted); font-size: .95rem; margin-bottom: 1em; }
.card time { display: block; margin-bottom: .6em; font-family: var(--font-mono); font-size: .8rem; letter-spacing: .06em; }
/* 箭头模板里已经输出了（&rarr;），这里不能再补 ::after */
.card-more { font-size: .92rem; font-weight: 600; display: inline-block; transition: transform .2s; color: var(--c-link); }
.card:hover .card-more { transform: translateX(3px); }

/* 手机上卡片网格走双列。700 是 auto-fill 的 minmax(300px,1fr) 排得下两列的下限，
   561–640px 会掉回单列。只改有封面的网格 —— 纯文字块压到 172px 只剩约 9 字/行 */
@media (max-width: 700px) {
  .card-grid, .card-grid--2 { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px; }
  .card-grid--center > .card { flex-basis: calc((100% - 14px) / 2); }
  .card { padding: 14px 14px 12px; }
  /* 出血量跟着 padding 重算：宽 = 14×2 + 边框 1×2 = 30，上 = 14 + 1 = 15 */
  .card-cover { width: calc(100% + 30px); margin: -15px -15px 12px; }
  .card h3 { font-size: 1rem; line-height: 1.35; margin-bottom: .4em; }
  /* 只裁视觉，全文仍在 DOM 里 */
  .card p {
    font-size: .84rem; margin-bottom: .6em;
    display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
  }
  .card time { font-size: .72rem; }
  .card-more { font-size: .84rem; }
}
/* 379px 以下一张卡只有约 159px，标题放不下 */
@media (max-width: 379px) {
  .card-grid, .card-grid--2 { grid-template-columns: 1fr; }
  .card-grid--center > .card { flex-basis: 100%; }
}

.feature-grid li {
  position: relative; margin: 0; padding: 30px 28px;
  background: var(--c-surface); border: 1px solid var(--c-line); border-radius: var(--radius);
  box-shadow: var(--shadow-sm);
  transition: box-shadow .22s, transform .22s, border-color .22s;
}
.feature-grid li:hover { box-shadow: var(--shadow-lg); border-color: var(--c-line-strong); transform: translateY(-3px); }
.feature-grid h3 { font-size: 1.1rem; }
.feature-grid p { color: var(--c-muted); font-size: .95rem; margin: 0; }

/* ---------- 流程示意（partials/flow.php）---------- */
/* 不做曲线箭头那种流程图，窄屏必然溢出。宽屏五列，窄屏纵向排 */
.flow {
  display: grid; gap: 20px; list-style: none; margin: 0; padding: 0;
  grid-template-columns: repeat(auto-fit, minmax(210px, 1fr));
  counter-reset: none;
}
.flow-step {
  position: relative; margin: 0; padding: 26px 22px 24px;
  background: var(--c-surface); border: 1px solid var(--c-line); border-radius: var(--radius);
  box-shadow: var(--shadow-sm);
  transition: box-shadow .22s, transform .22s, border-color .22s;
}
.flow-step:hover { box-shadow: var(--shadow-lg); transform: translateY(-3px); border-color: var(--c-line-strong); }
.flow-step h3 { font-size: 1.02rem; margin: .15em 0 .55em; line-height: 1.45; }
.flow-step p { color: var(--c-muted); font-size: .92rem; margin: 0; }
.flow-num {
  display: inline-block;
  font-family: var(--font-mono); font-size: 1.5rem; font-weight: 700;
  line-height: 1; letter-spacing: .04em;
  color: var(--c-accent-700);
}

/* ---------- CTA ---------- */
/* 不要给 .cta-inner 写 max-width，会盖掉 .container 的 1220px，同屏两条左边缘 */
.section-cta {
  background: var(--c-accent-050);
}
.section-cta h2 { color: var(--c-ink); }
.cta-inner { text-align: left; }
.cta-inner p { margin-bottom: 28px; font-size: 1.06rem; max-width: var(--measure); color: var(--c-body); }
.cta-inner .btn-primary { box-shadow: var(--shadow-sm); }

/* ---------- 详情页正文两栏 ---------- */
/* 右栏 420 和页头封面、要点带同宽，整页从上到下只有一条右侧栏。
   gap 取 32 是为这句算术：1172 − 32 − 420 = 720 = --measure，正文行宽一个字不变 */
.article-layout {
  display: grid;
  /* 两栏都要写 minmax(0,…)，否则子项最小内容宽度会顶破容器 */
  grid-template-columns: minmax(0, 1fr) minmax(0, 420px);
  gap: var(--s4);
  align-items: start;
}

/* top 与 html 的 scroll-padding-top 同源，否则目录会钻到导航底下。
   max-height 兜底：目录太长时不封顶会伸出视口。
   overflow 只能加在 sticky 元素自己身上，加在祖先上会让 sticky 静默失效 */
.article-aside {
  position: sticky;
  top: 92px;
  max-height: calc(100vh - 92px - var(--s3));
  overflow-y: auto;
}
.article-aside .toc { max-width: none; margin: 0; }

/* 1080 不是 900：右栏固定 420 时，900 视口下正文列只剩 408px（约 24 字/行） */
@media (max-width: 1080px) {
  .article-layout { grid-template-columns: 1fr; gap: var(--s5); }
  .article-aside { position: static; max-height: none; overflow: visible; }
  .article-aside .toc { max-width: var(--measure); }
}

/* ---------- 正文 prose ---------- */
/* 不要给 .prose 写 max-width，会盖掉 .container 的 1220px，正文左边缘贴到 0，
   而同屏的页头页脚都在 110。宽度归 .container 管 */
.prose > * { max-width: var(--measure); }
.prose > .table-wrap,
.prose > figure,
.prose > .block-stats,
.prose > .block-video,
.prose > .block-cta,
.prose > .block-definition,
.prose > .block-faq { max-width: none; }

/* 不给 h2/h3 加 padding-left，正文里所有元素左边缘一律齐平在 0 */
.prose h2 {
  margin-top: var(--s5);
}
.prose h3 { margin-top: var(--s4); }
/* 目录搬到右栏后，这条命中的是正文第一块，不是目录 */
.prose > *:first-child { margin-top: 0; }
/* 不清的话，正文末尾 64~96px 的下边距叠上 .section 的 padding 会留约 190px 空洞 */
.prose > *:last-child { margin-bottom: 0; }
.prose ul, .prose ol { padding-left: 1.4em; }
.prose > ul li::marker { color: var(--c-accent-700); }
/* 加粗是结论句，靠字重不靠颜色，绿色留给链接 */
.prose strong { color: var(--c-ink); }
/* 不能去掉 :not(.btn)：.prose a 是 (0,1,1) 压过 .btn-primary 的 (0,1,0)，
   去掉就成绿底绿字，block-cta 渲染在 .prose 里面 */
.prose a:not(.btn) { color: var(--c-link); text-decoration: underline; text-decoration-color: var(--c-link-tint); text-underline-offset: 3px; }
.prose a:not(.btn):hover { color: var(--c-link-hover); text-decoration-color: var(--c-link-hover); }
/* 不能写成全局 .answer，hero 上那个是深底浅字 */
.prose .answer { font-size: 1.08rem; color: var(--c-ink); }

hr {
  border: 0; height: 1px; margin: var(--s6) 0;
  background: linear-gradient(90deg, transparent, var(--c-line-strong) 18%, var(--c-line-strong) 82%, transparent);
}

/* 块与块之间统一 32：块间 32 / 标题到内容 48 / 大区块 64，三级都要有 */
.block-figure { margin: var(--s4) 0; }
.block-figure img { border-radius: var(--radius); border: 1px solid var(--c-line); width: 100%; }
.block-figure figcaption { font-size: .89rem; color: var(--c-muted); margin-top: .7em; }

.block-video { margin: var(--s4) 0; }
.block-video video, .video-embed { border-radius: var(--radius); overflow: hidden; background: #0e1116; }
.video-embed iframe { display: block; width: 100%; aspect-ratio: 16 / 9; border: 0; }
.block-video figcaption { font-size: .89rem; color: var(--c-muted); margin-top: .7em; }
.video-transcript { margin: 1em 0 2em; font-size: .94rem; }
.video-transcript summary { cursor: pointer; color: var(--c-accent-700); font-weight: 600; }

/* 整块色调底 + 顶部 3px 条区分类型（站规禁用 border-left） */
.callout {
  position: relative; overflow: hidden;
  border-radius: var(--radius); padding: 24px 26px 22px; margin: var(--s4) 0;
  background: var(--c-surface); border: 1px solid var(--c-line);
  box-shadow: var(--shadow-sm);
}
.callout::before {
  content: ''; position: absolute; top: 0; left: 0; right: 0; height: 3px;
  background: var(--c-line-strong);
}
.callout-tip  { background: var(--c-accent-050); border-color: var(--c-accent-tint); }
.callout-tip::before  { background: var(--c-accent); }
.callout-warn { background: var(--c-warn-bg); border-color: var(--c-warn-line); }
.callout-warn::before { background: #d97706; }
.callout p:last-child { margin-bottom: 0; }
.callout-title {
  font-weight: 700; color: var(--c-ink); margin-bottom: .5em;
  display: flex; align-items: center; gap: 10px;
}
.callout-title::before {
  content: 'i'; flex: 0 0 auto;
  width: 22px; height: 22px; border-radius: 50%;
  display: grid; place-items: center;
  font-family: var(--font-mono); font-size: .76rem; font-weight: 700; font-style: normal;
  background: var(--c-surface-2); color: var(--c-body);
  border: 1px solid var(--c-line-strong);
}
.callout-tip  .callout-title::before { content: '✓'; background: #fff; color: var(--c-accent-700); border-color: var(--c-accent-tint); }
.callout-warn .callout-title::before {
  content: '!'; color: var(--c-warn);
  background: #fff; border-color: var(--c-warn-line);
}

blockquote {
  margin: var(--s4) 0; padding: 22px 26px;
  background: var(--c-bg-alt); border: 1px solid var(--c-line);
  border-radius: var(--radius);
  color: var(--c-ink); font-style: normal; font-size: 1.04rem;
}
blockquote p { margin: 0; }
blockquote cite { display: block; font-size: .89rem; color: var(--c-muted); font-style: normal; margin-top: .55em; }

pre {
  background: #f6f7f8; color: #16191e; padding: 18px 20px; border-radius: var(--radius);
  border: 1px solid var(--c-line);
  overflow-x: auto; font-family: var(--font-mono); font-size: .89rem; line-height: 1.65;
}
code { font-family: var(--font-mono); font-size: .92em; }
:not(pre) > code { background: var(--c-accent-050); padding: .16em .45em; border-radius: 5px; color: var(--c-accent-700); }

/* 术语定义块走满宽，内部改 dt | dd 两栏，左栏 220 和表格首列是同一套语言 */
.block-definition {
  display: grid;
  grid-template-columns: 220px minmax(0, 1fr);
  gap: 6px 32px;
  align-items: baseline;
  border: 1px solid var(--c-line);
  border-radius: var(--radius); padding: 26px 30px; margin: var(--s4) 0;
  background: var(--c-surface);
  box-shadow: var(--shadow-sm);
  transition: border-color .2s, box-shadow .2s;
}
.block-definition:hover { border-color: var(--c-line-strong); box-shadow: var(--shadow); }
.block-definition dt { margin: 0; }
.block-definition dfn { font-style: normal; font-weight: 700; color: var(--c-accent-700); font-size: 1.05rem; }
.block-definition dd { margin: 0; max-width: var(--measure); color: var(--c-body); }
.block-definition .alias { color: var(--c-muted); font-size: .89rem; }
@media (max-width: 760px) {
  .block-definition { grid-template-columns: 1fr; gap: 4px; padding: 22px 24px; }
}

.block-stats .stats {
  display: grid; gap: 20px; list-style: none; padding: 0; margin: 0 0 var(--s4);
  grid-template-columns: repeat(auto-fit, minmax(190px, 1fr));
}
.block-stats .stats li {
  margin: 0; padding: 26px 22px; background: var(--c-surface);
  border: 1px solid var(--c-line); border-radius: var(--radius); text-align: center;
  box-shadow: var(--shadow-sm);
}
/* 不要加 .stats li::before 之类的顶部绿条，卡里最大的那行字就是绿色数字 */
.block-stats strong {
  display: block; font-family: var(--font-mono);
  font-size: 2.1rem; font-weight: 800; letter-spacing: -.02em; line-height: 1.15;
  color: var(--c-accent-700);
}
.stat-label { display: block; font-size: .95rem; color: var(--c-ink); font-weight: 600; margin-top: .2em; }
.stat-note  { display: block; font-size: .82rem; color: var(--c-muted); }

/* FAQ 是 .prose 的直接子元素，不铺两列会被 --measure 收到 720，右边白掉三分之一 */
.block-faq { margin-top: var(--s6); }
@media (min-width: 900px) {
  .block-faq { display: grid; grid-template-columns: 1fr 1fr; gap: var(--s3) var(--s4); }
  /* grid 会新建 BFC，margin 不再折叠，h2 的上边距得自己清掉 */
  .block-faq > h2 { grid-column: 1 / -1; margin: 0 0 var(--s3); }
  .faq-item { margin-bottom: 0; }
}
.faq-item {
  border: 1px solid var(--c-line);
  border-radius: var(--radius);
  background: var(--c-surface);
  padding: 22px 26px;
  margin-bottom: var(--s3);
  box-shadow: var(--shadow-sm);
  transition: border-color .2s, box-shadow .2s;
}
.faq-item:hover { border-color: var(--c-line-strong); box-shadow: var(--shadow); }
.faq-item:last-child { margin-bottom: 0; }
/* 要写成两个 class（0,2,0），单个 .faq-q 是 (0,1,0) 压不过 .prose h3 的 (0,1,1) */
.faq-item .faq-q { font-size: 1.12rem; margin: 0 0 .6em; display: flex; align-items: flex-start; gap: 11px; }
.faq-q::before {
  content: 'Q'; flex: 0 0 auto;
  display: inline-grid; place-items: center; width: 26px; height: 26px;
  border-radius: 7px; background: var(--c-accent-050); color: var(--c-accent-700);
  border: 1px solid var(--c-accent-tint);
  font-family: var(--font-mono); font-size: .78rem; font-weight: 700;
}
.faq-a { margin: 0 0 0 37px; color: var(--c-body); }

/* 步骤的线用 ::before 的背景画，不用左侧描边（禁用，且背景能渐隐） */
.block-steps { margin-top: var(--s6); }
.steps { list-style: none; padding-left: 0; counter-reset: step; }
.steps li {
  position: relative;
  counter-increment: step;
  padding-left: 64px;
  padding-bottom: var(--s4);
  margin-bottom: 0;
}
.steps li::before {
  content: ''; position: absolute; left: 22px; top: 46px; bottom: 4px; width: 2px;
  background: linear-gradient(180deg, var(--c-accent-tint), transparent);
}
.steps li:last-child { padding-bottom: 0; }
.steps li:last-child::before { display: none; }
.steps li::after {
  content: counter(step, decimal-leading-zero);
  position: absolute; left: 0; top: 0;
  width: 46px; height: 46px; border-radius: 50%;
  display: grid; place-items: center;
  font-family: var(--font-mono); font-size: .92rem; font-weight: 700;
  color: var(--c-accent-700);
  background: var(--c-accent-050);
  border: 1px solid var(--c-accent-tint);
}
.steps li strong { color: var(--c-ink); display: block; font-size: 1.06rem; }
.steps li p { margin: .35em 0 0; color: var(--c-muted); }

.block-related { margin-top: var(--s6); }
.link-list { list-style: none; padding: 0; margin: 0 0 1.8em; }
.link-list li { margin: 0; padding: 1em 0; border-bottom: 1px solid var(--c-line); transition: padding-left .18s; }
.link-list li:hover { padding-left: 6px; }
.link-list li:last-child { border-bottom: 0; }
/* 写到 .prose 这一级才盖得住正文内联链接 */
.prose .link-list a { font-weight: 600; color: var(--c-link); text-decoration: none; }
.link-list span { display: block; color: var(--c-muted); font-size: .91rem; font-weight: 400; }

/* 术语索引。960 是三列每列放得下最长英文词的下限；
   里面的 h2 要单独清 margin-top，.prose > *:first-child 够不着它 */
.glossary-index { max-width: 960px; margin-inline: auto; }
.glossary-index > h2:first-child { margin-top: 0; }

/* 只加修饰类覆盖成网格，不动 .link-list 基类 —— 搜索页、归档页、404 页都靠它 */
.link-list--cols {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 0 32px;
  margin: 0;
}
.link-list--cols li { padding: .7em 0; }
@media (max-width: 900px) { .link-list--cols { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 560px) { .link-list--cols { gap: 0 16px; } }

.block-cta {
  position: relative; overflow: hidden;
  background: var(--c-accent-050);
  border: 1px solid var(--c-accent-tint);
  border-radius: var(--radius-lg);
  padding: 40px 34px; margin: var(--s6) 0; text-align: center;
}
.block-cta h2, .block-cta h3 { margin-bottom: .5em; }
/* BlockRenderer::cta() 输出的按钮容器是个 <p>，清掉默认下边距 */
.cta-actions { margin: 1.6em 0 0; }

/* ---------- 面包屑 / 页头标题区 ---------- */
.breadcrumb { padding: var(--s3) 0 0; font-size: .87rem; }
.breadcrumb ol { list-style: none; display: flex; flex-wrap: wrap; gap: 8px; margin: 0; padding: 0; }
.breadcrumb li { margin: 0; color: var(--c-muted); }
.breadcrumb li + li::before { content: "/"; margin-right: 8px; color: var(--c-line-strong); }
.breadcrumb [aria-current] { color: var(--c-ink); }
.breadcrumb a { color: var(--c-muted); }
.breadcrumb a:hover { color: var(--c-accent-700); }

/* 不写 border-bottom，紧随其后的 .section 自带 border-top，两处都写就是双线 */
.page-head {
  padding: clamp(28px, 3.6vw, 48px) 0 clamp(36px, 4.4vw, 60px);
}
.page-head h1 { max-width: var(--measure); text-wrap: balance; }
.page-lead, .page-head .answer {
  font-size: clamp(1.04rem, 1.4vw, 1.16rem);
  color: var(--c-body); max-width: var(--measure); line-height: 1.85;
}
.page-meta { display: flex; flex-wrap: wrap; gap: 18px; font-size: .89rem; color: var(--c-muted); margin-top: 18px; }

/* 页头两栏只有带封面的内容页走（模板按有无封面加 .page-head--cover）。
   420 / 64 是从 .takeaways-inner 抄来的，改任一个数封面就不再竖向对齐。
   align-items 用 start，居中会让封面随摘要长短上下浮动 */
.page-head--cover .page-head-inner {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 420px);
  gap: var(--s6);
  align-items: start;
}

/* 宽度由栅格给（右栏 420），这里不写。
   margin 必须归零，间距由 gap 给，再叠一次就成「图片和容器黏在一起」 */
.page-cover { margin: 0; }
.page-cover img {
  display: block; width: 100%; height: auto;
  border-radius: var(--radius); border: 1px solid var(--c-line);
  background: var(--c-bg-alt);
}

/* 窄屏退单栏，封面下沉到摘要下方，不隐藏，它是 LCP 元素。
   断点与要点带一致，两处同时变单栏 */
@media (max-width: 900px) {
  .page-head--cover .page-head-inner { grid-template-columns: 1fr; gap: var(--s5); }
  .page-head--cover .page-cover { max-width: var(--measure); }
}

/* ---------- 目录 ---------- */
.toc {
  border: 1px solid var(--c-line); border-radius: var(--radius);
  padding: 22px 26px; margin: 0 0 var(--s5);
  background: var(--c-bg-alt);
  max-width: var(--measure);
}
.toc h2, .toc > strong {
  /* 模板统一用 <strong>，h2 分支只为兜底 */
  margin-top: 0;
  display: block; font-size: .78rem; margin-bottom: .9em;
  color: var(--c-accent-700); text-transform: uppercase; letter-spacing: .14em;
  font-family: var(--font-mono); font-weight: 700;
}
.toc ul, .toc > ol { margin: 0; padding-left: 1.15em; }
.toc li { margin-bottom: .35em; }
.toc li.h3 { padding-left: 1em; font-size: .94rem; }
/* 目录里每一条本来就是一个链接，所以整列都用链接绿，而不是等悬停才变色 ——
   之前用灰色，读者得把鼠标移上去才知道能点。

   选择器只写 .toc：这一块在模板里是 <aside class="article-aside"><nav class="toc">，
   压根不在 .prose 里面（原来写成 .prose .toc a，其实一条都没匹配上，
   颜色一直是继承默认链接色来的）。别再加回 .prose 前缀。 */
.toc a { color: var(--c-link); text-decoration: none; }
.toc a:hover { color: var(--c-link-hover); text-decoration: underline; }

/* ---------- 分页 ---------- */
.pagination { margin: var(--s5) 0 0; }
.pagination ul { list-style: none; display: flex; flex-wrap: wrap; gap: 8px; margin: 0; padding: 0; justify-content: center; }
.pagination li { margin: 0; }
.pagination a, .pagination span {
  display: block; padding: .55em 1em; border: 1px solid var(--c-line);
  border-radius: var(--radius-sm); color: var(--c-ink); font-size: .93rem;
}
.pagination a:hover { border-color: var(--c-accent-700); color: var(--c-accent-700); background: var(--c-accent-050); text-decoration: none; }
.pagination .is-current span { background: var(--c-accent-700); border-color: var(--c-accent-700); color: #fff; font-weight: 700; }

/* ---------- 表单 ---------- */
.form-grid { display: grid; gap: 20px; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); }
.field { display: flex; flex-direction: column; gap: 7px; }
.field-full { grid-column: 1 / -1; }
.field label { font-weight: 600; color: var(--c-ink); font-size: .94rem; }
.field .req { color: var(--c-err); margin-left: 3px; }
.field input, .field select, .field textarea {
  font: inherit; font-size: .97rem; padding: .72em .85em;
  border: 1px solid var(--c-line-strong); border-radius: var(--radius-sm);
  background: var(--c-surface); color: var(--c-ink); width: 100%;
  transition: border-color .15s, box-shadow .15s;
}
.field input::placeholder, .field textarea::placeholder { color: var(--c-muted); }
.field textarea { min-height: 140px; resize: vertical; }
.field input:focus, .field select:focus, .field textarea:focus {
  outline: none; border-color: var(--c-accent-700); box-shadow: 0 0 0 3px rgba(20, 24, 29, .14);
}
.form-note { font-size: .86rem; color: var(--c-muted); }
.alert { padding: 16px 20px; border-radius: var(--radius); margin-bottom: 24px; border: 1px solid transparent; }
.alert-ok  { background: var(--c-accent-050); border-color: var(--c-accent-tint); color: var(--c-accent-800); }
.alert-err { background: var(--c-err-bg); border-color: var(--c-err-line); color: var(--c-err); }

/* ---------- 页脚 ---------- */
.site-footer {
  position: relative;
  background: var(--c-bg-alt); color: var(--c-body);
  border-top: 1px solid var(--c-line);
  padding: 64px 0 0; font-size: .94rem;
}
/* 用 flex 不用 grid：链接列数可变，且 grid 里 "fr + auto-fit" 是非法值，
   整条声明会被静默丢弃，页脚塌成一列 */
.footer-grid { display: flex; flex-wrap: wrap; gap: 36px 40px; }
.footer-brand { flex: 1 1 290px; min-width: 0; }
/* 列宽按最长的一个链接不断行定。两档基准 + 四个间隙 = 290+232×2+120×2+160
   = 1154 ≤ 容器 1172，仍然排得下一行。不做四列等宽 —— 那要每列 228px，
   290px 的品牌块只剩 100px，装不下介绍文字 */
.footer-col { flex: 1 1 120px; min-width: 0; }
.footer-col--wide { flex: 1 1 232px; }
.footer-title { color: var(--c-ink); font-size: 1.05rem; margin-bottom: .8em; }
.footer-intro { color: var(--c-muted); font-size: .92rem; line-height: 1.85; }
.footer-heading {
  color: var(--c-muted); font-size: .78rem; text-transform: uppercase; letter-spacing: .14em;
  margin-bottom: 1.1em; font-family: var(--font-mono); font-weight: 700;
}
/* 联系方式前的人名（后台写在号码前面或后面的那个）。比号码轻一档，
   让「找谁」和「打哪个号」一眼分得开，又不至于变成两个视觉重心。
   底色是 --c-bg-alt，与 --c-muted 的对比度 4.65:1，过 AA。 */
.footer-contact .who { color: var(--c-muted); margin-right: .3em; }
.site-footer ul { list-style: none; margin: 0; padding: 0; }
.site-footer li { margin-bottom: .6em; }
.site-footer a { color: var(--c-body); }
.site-footer a:hover { color: var(--c-accent-700); }
.footer-social { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 18px; }
.footer-social li { margin: 0; }
.footer-bottom {
  margin-top: 56px; padding: 24px var(--gutter); border-top: 1px solid var(--c-line);
  display: flex; flex-wrap: wrap; gap: 12px; justify-content: space-between;
  font-size: .85rem; color: var(--c-muted); max-width: var(--container);
}
.footer-bottom p { margin: 0; }

/* ---------- 404 ---------- */
.error-page { padding: clamp(72px, 11vw, 150px) 0; text-align: center; }
/* 填充色近白，字形全靠 2px 描边撑着 */
.error-code {
  font-size: clamp(3.6rem, 13vw, 8rem); font-weight: 800; margin: 0; line-height: 1;
  font-family: var(--font-mono); letter-spacing: -.04em;
  color: var(--c-accent-050);
  -webkit-text-stroke: 2px var(--c-accent);
}
/* 兜底：不认描边的环境（老 WebKit、某些 PDF / 抓取器）会变成白底白字 */
@supports not (-webkit-text-stroke: 1px red) {
  .error-code { color: var(--c-accent-700); }
}
.error-desc { color: var(--c-muted); max-width: 46em; margin: 12px auto 30px; }
.error-links { max-width: 580px; margin: var(--s5) auto 0; text-align: left; }

/* ---------- 响应式：1024 平板 / 760 手机 / 560 小屏 ---------- */
@media (max-width: 1024px) {
  :root { --gutter: 20px; }
  .nav-toggle { display: block; }
  .main-nav {
    display: none; position: absolute; top: 100%; left: 0; right: 0;
    background: var(--c-surface); border-bottom: 1px solid var(--c-line);
    box-shadow: var(--shadow-lg); padding: 14px var(--gutter) 22px;
  }
  .nav-toggle-cb:checked ~ .main-nav { display: block; }
  .site-header { position: relative; }
  .header-inner { position: relative; flex-wrap: wrap; }
  .main-nav > ul { flex-direction: column; align-items: stretch; gap: 0; }
  .main-nav > ul > li > a { padding: .8em .2em; border-bottom: 1px solid var(--c-line); border-radius: 0; }
  .main-nav .is-active > a::after { display: none; }
  /* 折叠菜单里 .submenu 不再是浮层，宽度要还原成撑满整行，
     否则 max-content 会缩成一条，nowrap 也要一并解开 */
  .submenu { position: static; display: block; border: 0; box-shadow: none; padding: 6px 0 10px 14px; min-width: 0; width: auto; }
  .submenu a { padding: .45em 0; white-space: normal; }
  .nav-tools { border: 0; padding: 16px 0 0; margin: 10px 0 0; }
}

@media (max-width: 760px) {
  body { font-size: 16px; }
  .hero-stats { grid-template-columns: 1fr 1fr; gap: 26px 28px; }
  /* 只留 .feature-grid，卡片网格的双列由上面的 ≤700px 块接管 */
  .feature-grid { grid-template-columns: 1fr; }
  .footer-grid { gap: 32px 40px; }
  /* 只收窄正文里那种卡片式要点块，.section-takeaways 是整幅色带，有自己的 padding */
  .block-takeaways { padding: 22px; }
  .faq-a { margin-left: 0; }
  /* 圆形序号在窄屏上会把文字挤窄 */
  .steps li { padding-left: 52px; }
  .steps li::before { left: 18px; top: 40px; }
  .steps li::after { width: 38px; height: 38px; font-size: .82rem; }
}

@media (max-width: 560px) {
  :root { --gutter: 16px; }
  .hero { padding-top: 56px; padding-bottom: 48px; }
  /* hero-stats 不压成单列，390px 上两列刚好放得下 */
  .btn { width: 100%; }
  .hero-actions, .section-more { display: grid; gap: 12px; }
}

/* ---------- 打印 ---------- */
@media print {
  .site-header, .site-footer, .section-cta, .breadcrumb, .skip-link { display: none; }
  /* 目录是屏幕上的导航，纸面没用，且 sticky/max-height 在分页打印里会截断它 */
  .article-layout { display: block; }
  .article-aside { display: none; }
  body { color: #000; background: #fff; font-size: 11pt; }
  a { color: #000; text-decoration: underline; }
  .card, .table-wrap { box-shadow: none; border-color: #999; }
  .prose strong { color: #000; }
  .hero { background: none; color: #000; }
  .hero h1, .hero-lead { color: #000; }
}

/* ---------- 联系我们页 ---------- */
.contact-form { margin-top: 6px; }
.form-privacy { font-size: .86rem; color: var(--c-muted); margin: 20px 0 18px; }
.contact-form button[type="submit"] { margin-top: 4px; }

/* 蜜罐字段，用户看不见，纯文本爬虫会当它是个可填字段 */
.hp {
  position: absolute; left: -9999px; top: auto;
  width: 1px; height: 1px; overflow: hidden; white-space: nowrap;
}

/* ---------- 内容详情页补充 ---------- */
.article-meta {
  display: flex; flex-wrap: wrap; gap: 8px 20px; align-items: baseline;
  font-size: .89rem; color: var(--c-muted); margin: 18px 0 16px;
}
.article-meta time { font-size: inherit; }
.article-meta .author { color: var(--c-ink); }
.article-meta .author-name { font-weight: 600; color: var(--c-ink); }
.article-meta .author-links a { margin-left: 8px; font-weight: 500; }

/* 固定两列，把 .is-next 钉到第二列。用 auto-fit 的话只有「下一篇」时那张卡会独占
   整行。下边距必须自己补 —— 这块不在 .section 里，拿不到纵向 padding，
   留 0 时卡片底边会精确压在下一个 .section-alt 的 border-top 上 */
.prev-next {
  display: grid; gap: 18px;
  margin: var(--s5) 0 clamp(48px, 5.2vw, 80px);
  grid-template-columns: repeat(2, minmax(0, 1fr));
}
.prev-next .is-next { grid-column: 2; }
.prev-next a {
  display: block; padding: 20px 24px; background: var(--c-surface);
  border: 1px solid var(--c-line); border-radius: var(--radius);
  box-shadow: var(--shadow-sm);
  transition: border-color .18s, box-shadow .18s, transform .18s;
  /* 这是一张卡片不是链接：显式压回黑色，免得继承到全局的链接绿 */
  color: var(--c-ink);
}
.prev-next a:hover { border-color: var(--c-line-strong); box-shadow: var(--shadow-lg); transform: translateY(-2px); text-decoration: none; }
.prev-next .label { display: block; font-size: .78rem; color: var(--c-muted); margin-bottom: .4em; font-family: var(--font-mono); letter-spacing: .1em; text-transform: uppercase; }
.prev-next .title { display: block; color: var(--c-ink); font-weight: 600; }
.prev-next .is-next { text-align: right; }

@media (max-width: 760px) {
  .prev-next { grid-template-columns: 1fr; }
  /* 单列时要解开钉死的列位，否则 .is-next 会去找不存在的第 2 列 */
  .prev-next .is-next { grid-column: auto; text-align: left; }
}

/* ---------- 站内搜索 ---------- */
.search-form {
  display: flex; flex-wrap: wrap; gap: 12px; align-items: stretch;
  max-width: 660px; margin: 0 0 26px;
}
.search-form input[type="search"] {
  flex: 1 1 240px; min-width: 0;
  font: inherit; font-size: 1.02rem; padding: .75em 1em;
  border: 1px solid var(--c-line-strong); border-radius: var(--radius-sm);
  background: var(--c-surface); color: var(--c-ink);
}
.search-form input[type="search"]::placeholder { color: var(--c-muted); }
.search-form input[type="search"]:focus {
  outline: none; border-color: var(--c-accent-700); box-shadow: 0 0 0 3px rgba(20, 24, 29, .14);
}
