/* TokenPower 营销站 v2 · IA v2.1 · 移动优先（老板从微信进来） */
:root{--okd:#00602C;--warnd:#753E00;--badd:#862721;--or:#FF9900;--ort:#FFEEDD;--ink:#000;--sub:#1C1A17;--mut:#393834;--gy:#575552;--ln:#D3D1CD;--ln2:#E6E4E0;--tint:#F4F1ED;--ok:#008649;--okt:#E3F8E9;--warn:#9E5E00;--warnt:#FEEFDC;--dk:#0A0E10;--dkbg:#171B1E;--dkln:#393E41;--dkmut:#B3B8BC;--dkfaint:#7C8185;--dktext:#D3D8DC;--white:#fff;--orh:#E68A00;--wmkink:#0A0A0A;--ptext:#575552;--warnln:#F3D2A4;--sh:0 4px 20px rgba(0,0,0,.07);--sh2:0 8px 26px rgba(0,0,0,.05);--sh3:0 2px 10px rgba(0,0,0,.05);--bad:#B4463C;--badt:#FFEBE7;--dkk:#FFB824;--dkk2:#7EC9E0;--sh4:0 6px 22px rgba(0,0,0,.08);--paper:#FFFFFF;--paper2:#FFFFFF;--phair:#E6E4E0;--phair2:#B3B1AD;--fieldln:#8E8C88;--pfaint:#706E6B;--cy:#00A5C6;--edge:#FCFAF6;--ondk:#F3F5F7;--mono:ui-monospace,Menlo,Consolas,monospace;
  /* ── 间距刻度（2026-08-02 建立）──
     迁移前是 **37 种**间距值，1px 到 104px 几乎每个整数都出现过，57% 不在 4px 栅格上。
     结果是没有任何两处共享同一套节奏，眼睛读不出规律就读成「不安定」——
     这是审计里「整体感觉不好但说不上来」的主因，比黑腰带重得多。
     现在 13 级：小档 4px、中档 8px、大档保留原有章节节奏（56/72/104 不动，避免整页重排）。
     **新代码一律用 var(--sN)；写死 px 会被 scripts/check-scale.py 拦下。** */
  --s0:2px;--s1:4px;--s2:8px;--s3:12px;--s4:16px;--s5:20px;--s6:24px;--s7:32px;--s8:40px;--s9:48px;--s10:56px;--s11:72px;--s12:104px;
  /* ── 字号刻度 ──
     迁移前 23 种，其中 8 种是半像素（8.5/9.5/10.5/11.5/12.5/13.5/14.5/16.5）。
     半像素是「调到看着顺眼为止」的签名，而且不同设备取整方式不同——
     同一个标题在两台机器上未必一样粗。现在 11 级，全整数。 */
  --f0:9px;--f1:10px;--f2:11px;--f3:12px;--f4:13px;--f5:15px;--f6:17px;--f7:19px;--f8:22px;--f9:26px;--f10:30px;
  /* ── 圆角刻度 ──
     迁移前是 8px×2 / 14px×1 / 16px×1 / 1px×1 四种并存，同一屏能撞上三种，
     而站点侧根本没有半径 token（Console 早有 --r:8px）。
     现在两档：--r 给卡片/输入/按钮，--r-lg 给大容器（接待柜台、周报卡）。
     1px 那处等于直角，并入 0。50% 是圆点，不属于形状语言。 */
  --r-sm:4px;--r:8px;--r-lg:14px;--link:#006B89;--linkh:#004E6B
}
*{margin:0;padding:0;box-sizing:border-box}
html{scroll-behavior:smooth}
body{font-family:-apple-system,"PingFang SC","Microsoft YaHei","Helvetica Neue",Arial,sans-serif;color:var(--sub);background:var(--paper);font-size:var(--f5);line-height:1.7;-webkit-font-smoothing:antialiased}
a{color:inherit;text-decoration:none}
.wrap{max-width:1100px;margin:0 auto;padding:0 var(--s5)}
.k{font-family:var(--mono);font-size:var(--f2);letter-spacing:2px;color:var(--gy);font-weight:700;text-transform:uppercase}
h1,h2,h3{color:var(--ink);line-height:1.35}
.btn{display:inline-block;background:var(--or);color:var(--ink);font-weight:700;padding:var(--s3) var(--s5);font-size:var(--f5)}
.btn:hover{background:var(--orh)}
.btn-ghost{display:inline-block;color:var(--ink);font-weight:700;padding:var(--s3) var(--s5);font-size:var(--f5);border:1px solid var(--ln);background:var(--white)}
/* 曾有 .btn-ghost.ondk（暗底幽灵按钮），随 2026-08-02 拆黑腰带一起删除 ——
   收尾区改成浅底后它变成浅字压浅底 **1.03:1**，18 个页面全中，
   而拆腰带那次我只验了正文对比度、没验按钮。现在统一用 .btn-ghost。 */

/* 字标 */
.wmk{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:700;letter-spacing:-.012em;color:var(--wmkink);-webkit-text-stroke:.4px currentColor;white-space:nowrap}
/* 双点 = BRAND_COLORS.md §六（2026-07-27 定稿）。
   **两点同大小、同踩基线、右点深电青 #00A5C6、无高光。**
   7-30 那版 §七（右点缩小上浮 + 亮青 #10CFEF + 白瞳孔）已于 2026-08-02 撤回。 */
/* 那个 -1px 是**字标基线的光学微调**，不是布局间距，所以不进刻度。
   （2026-08-02 迁移时它一度被换成 `-var(--s0)` —— 那是**非法 CSS**，
   负号不能加在 var() 前面，整条 margin 会被解析器直接丢掉。） */
.wdot{display:inline-block;width:.585em;height:.585em;border-radius:50%;margin:0 .025em -1px}
.wdot.l{background:var(--or)}
.wdot.r{background:var(--cy)}

/* ══ 导航 v3（2026-07-31）══
   一级**六项平铺、零下拉**：AI 改造 · 投资与并购 · 出海 · 网关 · 公开案例 · API 文档
   导航结构由 scripts/gen-site-nav.py 整块生成，由 check-site-consistency.py 把关。
   两个已排掉的坑，改这段前先读：
   ① header 带 backdrop-filter 会成为 fixed 定位的**包含块** → 移动菜单 #mm 必须写在 <header> 之外，否则 inset 失效；
   ② 移动端不要把主 CTA 和 EN/登录塞进同一个容器再整体隐藏 → 拆成 .ut（移动隐藏）/ .cta（移动保留）。
   v2 的下拉面板（.panel/.pgrid/.pit/.pfoot/.car）与移动手风琴（.macc/.mbody/.mhd）
   已于 2026-07-31 随 v3 删除——HTML/JS 里零引用，别再加回来。 */
header{position:sticky;top:0;background:rgba(255,255,255,.94);backdrop-filter:blur(10px);z-index:60;border-bottom:1px solid var(--ln2)}
.nav{display:flex;align-items:center;height:60px;max-width:1180px;margin:0 auto;padding:0 var(--s5);gap:var(--s2)}
.nav .brand{display:flex;align-items:center;margin-right:var(--s1)}
.nav-links{display:none}
.util{display:flex;align-items:center;gap:var(--s1);margin-left:auto}
.ut{display:none}
.nav .cta{background:var(--or);color:var(--ink);font-weight:700;font-size:var(--f4);padding:var(--s2) var(--s3);white-space:nowrap}
.nav .cta:hover{background:var(--orh)}
/* 44×44：移动端唯一的导航入口，低于 44 就是每个手机访客都要多点一次。
   三条杠仍是 32px 宽（padding 撑出热区，视觉不变胖）。 */
.burger{margin-left:var(--s2);width:44px;height:44px;display:flex;flex-direction:column;justify-content:center;gap:var(--s1);cursor:pointer;background:none;border:0;padding:0 var(--s1)}
.burger i{display:block;height:2px;background:var(--ink);transition:.18s}
.burger[aria-expanded=true] i:nth-child(1){transform:translateY(7px) rotate(45deg)}
.burger[aria-expanded=true] i:nth-child(2){opacity:0}
.burger[aria-expanded=true] i:nth-child(3){transform:translateY(-7px) rotate(-45deg)}
@media(min-width:980px){
  .nav{height:70px;gap:var(--s3)}
  .burger,.mobile-menu{display:none!important}
  .nav-links{display:flex;align-items:center;gap:var(--s0);height:100%}
  .ni{position:relative;height:100%;display:flex;align-items:center}
  .nb{display:flex;align-items:center;gap:var(--s1);padding:var(--s2) var(--s3);font-size:var(--f5);font-weight:600;color:var(--sub);white-space:nowrap;font-family:inherit;background:none;border:0;cursor:pointer}
  .nb:hover,.nb.on{color:var(--ink)}
  .ut{display:inline-block;font-size:var(--f4);color:var(--gy);font-weight:600;padding:var(--s2) var(--s2);white-space:nowrap}
  .ut:hover{color:var(--ink)}
  .nav .cta{margin-left:var(--s1);font-size:var(--f4);padding:var(--s2) var(--s4)}
}
/* 移动端分组折叠菜单（必须在 <header> 之外） */
.mobile-menu{display:none;position:fixed;inset:60px 0 0;background:var(--paper);z-index:55;overflow-y:auto;padding-bottom:var(--s11);-webkit-overflow-scrolling:touch}
.mobile-menu.open{display:block}




.mflat{display:block;padding:var(--s4) var(--s5);border-bottom:1px solid var(--ln2);font-size:var(--f5);font-weight:700;color:var(--ink)}
/* 移动菜单尾注：导航平铺后，掉出导航的页面在这里指一句路（它们的入口在页脚） */
.mnote{padding:var(--s3) var(--s5);font-size:var(--f4);line-height:1.7;color:var(--gy);border-bottom:1px solid var(--ln2)}
.mutil{display:flex;flex-wrap:wrap;gap:var(--s2) var(--s4);padding:var(--s4) var(--s5);font-size:var(--f4);color:var(--gy);font-weight:600}
/* 菜单展开时藏起顶栏 CTA —— 底部常驻那个在拇指区，更好按。
   两个同时露出来是重复，而且用户会以为它们不是一回事。 */
.mm-open .nav .cta{display:none}
.mbar{position:fixed;left:0;right:0;bottom:0;padding:var(--s3) var(--s5) calc(var(--s3) + env(safe-area-inset-bottom));background:rgba(255,255,255,.96);border-top:1px solid var(--phair);z-index:56}
.mbar .cta{display:block;text-align:center;background:var(--or);color:var(--ink);font-weight:700;font-size:var(--f5);padding:var(--s3)}
/* 锚点让位给 sticky 头部（导航条 56 → 70px 后必须补，否则跳转目标被压在导航下面）。
   .counter 排除：reception.js 用 scrollIntoView(block:center) 居中柜台，不需要顶部让位。 */
[id]:not(.counter){scroll-margin-top:var(--s11)}
/* 菜单打开时，浮层问答入口让位给常驻底部 CTA（ask.js 的 .askbtn z-index 99 会压住 .mbar） */
.mobile-menu.open ~ .askbtn,.mobile-menu.open ~ .askpanel{display:none}
@media (prefers-reduced-motion:reduce){.burger i{transition:none}}

/* 章节 */
section{padding:var(--s10) 0}
@media(min-width:900px){section{padding:var(--s12) 0}}
.sec-hd h2{font-size:clamp(26px,3.6vw,38px)}
.sec-hd .lead{color:var(--gy);margin-top:var(--s2);font-size:var(--f5)}
.sec-hd{margin-bottom:var(--s7)}

/* Hero */
.hero{padding:var(--s9) 0 var(--s8)}
.hero h1{font-size:clamp(30px,7.5vw,52px);letter-spacing:-.5px}
.hero h1 em{font-style:normal;color:var(--ink)}
.hero p{color:var(--mut);margin-top:var(--s3);font-size:clamp(14.5px,3.6vw,17px);max-width:560px}
.ctas{display:flex;gap:var(--s2);margin-top:var(--s5);flex-wrap:wrap}
.creds{display:flex;gap:var(--s2);margin-top:var(--s6)}
.cred{flex:1;background:transparent;border:0;border-top:2px solid var(--ink);padding:var(--s3) var(--s0) 0;text-align:left}
.cred b{display:block;font-size:clamp(19px,4.2vw,27px);color:var(--ink);letter-spacing:-.4px}
.cred span{font-size:var(--f2);color:var(--gy)}
@media(min-width:900px){.creds{max-width:560px}}
@media(min-width:1080px){
  .hero .wrap{display:grid;grid-template-columns:minmax(0,1fr) 420px;column-gap:var(--s10);align-items:start}
  .hero .wrap>*{grid-column:1}
  .hero p{max-width:none}
  .creds{max-width:none}
}

/* 周报卡片（S2 视角反转的主角） */
.wecard{max-width:400px;border:1px solid var(--ln);border-radius:var(--r-lg);overflow:hidden;box-shadow:var(--sh);background:var(--tint)}
.wecard .bar{background:var(--dk);color:var(--white);padding:var(--s2) var(--s3);font-size:var(--f3);font-weight:700}
.wecard .inner{padding:var(--s3) var(--s3)}
.wecard .from{font-size:var(--f1);color:var(--gy);margin-bottom:var(--s1)}
.wecard .msg{background:var(--white);border-radius:var(--r);padding:var(--s3) var(--s3);border:1px solid var(--ln2)}
.wecard .msg .num{font-size:var(--f8);font-weight:800;color:var(--ink);margin-top:var(--s1)}
.wecard .msg .li{font-size:var(--f3);color:var(--mut);margin-top:var(--s2);line-height:1.75}
.wecard .msg .lk{border-top:1px solid var(--ln2);margin-top:var(--s2);padding-top:var(--s2);font-size:var(--f3);color:var(--gy);font-weight:600}
.wecard .reply{background:var(--white);border-radius:var(--r);padding:var(--s2) var(--s3);margin-top:var(--s2);font-size:var(--f2);color:var(--mut);border:1px solid var(--ln2)}
.s2pts{margin-top:var(--s1)}
.s2pts .pt{display:flex;gap:var(--s3);padding:var(--s3) 0;border-bottom:1px solid var(--ln2)}
.s2pts .pt:last-child{border-bottom:none}
.s2pts b{color:var(--ink);white-space:nowrap}
.s2pts span{color:var(--gy);font-size:var(--f4)}

/* 数字墙 */
.wall{display:grid;grid-template-columns:repeat(2,1fr);gap:var(--s2)}
@media(min-width:700px){.wall{grid-template-columns:repeat(3,1fr)}}
@media(min-width:1000px){.wall{grid-template-columns:repeat(4,1fr)}.wall.six{grid-template-columns:repeat(3,1fr)}}
.cell{background:transparent;border:0;border-top:1px solid var(--ln);padding:var(--s4) var(--s1) var(--s3);position:relative;overflow:hidden;min-height:92px}
.cell .n{font-size:clamp(20px,4.6vw,28px);font-weight:800;color:var(--ink);letter-spacing:-.5px}
.cell .w{font-size:var(--f3);color:var(--mut);margin-top:var(--s0)}
.cell .c{font-family:var(--mono);font-size:var(--f1);color:var(--pfaint);margin-top:var(--s2);letter-spacing:.5px}
.cell .src{position:absolute;inset:0;background:var(--dk);color:var(--dktext);font-size:var(--f2);line-height:1.6;padding:var(--s3);opacity:0;transition:opacity .18s}
.cell:hover .src{opacity:1}
.wall-note{font-size:var(--f3);color:var(--gy);margin-top:var(--s3)}
.wall-note b{color:var(--ink)}

/* 合作伙伴行 */
.partners{margin-top:var(--s5);padding:var(--s3) var(--s4);background:var(--tint);border:1px solid var(--ln2);font-size:var(--f3);color:var(--gy);line-height:1.8}

/* 步骤 */
.steps{display:flex;flex-direction:column;gap:var(--s2)}
@media(min-width:900px){.steps{flex-direction:row}}
.step{flex:1;border:0;border-top:2px solid var(--ln);padding:var(--s4) 0 0;background:transparent}
.step.hl{border:1px solid var(--or);background:var(--tint);padding:var(--s5)}
.step h3{font-size:var(--f6)}
.step .d{font-family:var(--mono);font-size:var(--f1);color:var(--gy);font-weight:700;letter-spacing:1px;margin-top:var(--s1)}
.step p{font-size:var(--f4);color:var(--mut);margin-top:var(--s2)}
.step .get{margin-top:var(--s2);font-size:var(--f3);font-weight:700;color:var(--ink);border-top:1px solid var(--ln2);padding-top:var(--s2)}
.pricing{margin-top:var(--s4);background:var(--white);border:1px solid var(--ln);border-left:3px solid var(--or);padding:var(--s3) var(--s4);font-size:var(--f4);line-height:1.9}
.pricing b{color:var(--ink)}

/* 白皮书卡 */

/* ══ 收尾区（原「黑腰带」，2026-08-02 拆掉）══
   原来是 `background:var(--dk)` 的全宽近黑，1280×455px，24 个页面都有，
   上面 --paper 奶白、下面页脚 --paper2 近白 —— 奶白→硬黑→奶白的夹心。
   它扎眼的真因不是「黑」，是它色相 214° 而全站纸面是 40°，正好互补。

   现在**不用深色**。收尾的分量改由三样结构性的东西给：
     ① 底色切到 --tint（与 --paper 明度差 9.1%，是全站最大的一档纸面切换）
     ② 顶边一条 2px --ink 硬线 —— 「到这儿为止」的信号，不靠颜色靠形
     ③ 标题字号比正文区大一档
   全程留在暖色系里，与页面其余部分同温。 */
.cta-sec{background:var(--tint);color:var(--sub);padding:var(--s10) 0;border-top:2px solid var(--ink)}
.cta-sec h2{color:var(--ink);font-size:clamp(23px,5vw,32px)}
.cta-sec .sub2{color:var(--gy);margin-top:var(--s2);font-size:var(--f4)}
.cta-flex{display:flex;flex-direction:column;gap:var(--s5);margin-top:var(--s6)}
@media(min-width:900px){.cta-flex{flex-direction:row;align-items:flex-start;gap:var(--s8)}}
.form{display:flex;flex-direction:column;gap:var(--s2);max-width:420px;flex:1}
/* 输入框边框走 --fieldln：原来的 --ln 于白只有 1.49:1，
   而 WCAG 1.4.11 对「界面组件边界」要求 3:1 —— 用户得看得出输入框在哪。 */
.form input{border:1px solid var(--fieldln);background:var(--white);color:var(--sub);padding:var(--s3) var(--s3);font-size:var(--f5);font-family:inherit}
.form input::placeholder{color:var(--pfaint)}
.form .btn{border:none;cursor:pointer;font-size:var(--f5)}
.cta-alt{display:flex;gap:var(--s4);align-items:center}
.cta-alt .t{font-size:var(--f4);color:var(--gy);line-height:1.8}
.cta-alt .t b{color:var(--ink)}
.cta-note{font-family:var(--mono);font-size:var(--f2);letter-spacing:1px;color:var(--pfaint);margin-top:var(--s4)}

/* 页脚 v2（2026-07-30）：四组与新 IA 同构 — 业务线 / 产品与文档 / 证据与公开数据 / 公司与联系 */
footer{background:var(--paper2);padding:var(--s8) 0 var(--s6);border-top:1px solid var(--ln)}
.sitemap{display:grid;grid-template-columns:repeat(2,1fr);gap:var(--s6) var(--s5);font-size:var(--f4);margin-bottom:var(--s7)}
@media(min-width:820px){.sitemap{grid-template-columns:1.05fr 1fr 1fr 1fr}}
.sitemap .sg{display:flex;flex-direction:column;gap:var(--s1)}
.sitemap .sg b{color:var(--ink);font-family:var(--mono);font-size:var(--f1);letter-spacing:.16em;color:var(--gy);margin-bottom:var(--s1);text-transform:uppercase}
/* 页脚 30 条链接在手机上是竖排密集列表；22px 行高相邻误触。
   补 2px 上下内边距到 26px，并把 gap 从 8 收到 6——总高度不变，热区变大。 */
.sitemap a{color:var(--gy);padding:var(--s0) 0}
/* 「↑ 回行业目录」（evidence 每个行业段尾）此前**在 CSS 里没有任何样式**：
   一条 75×19 的裸链接，手机上点不中、桌面上看不出是可点的。
   给足 26px 高度 + 明确的可点外观。 */
.bk{display:inline-block;margin-top:var(--s3);padding:var(--s1) 0;font-size:var(--f4);font-weight:700;color:var(--link)}
/* 短说明句里的独立链接（.biz-foot / .wall-note / .fitline 等）字号 12–13px，
   行盒只有 18–21px 高。inline 元素加纵向 padding 会**扩大可点区域而不撑开行高**，
   正好用来补热区。 */
.biz-foot a,.wall-note a,.fitline a{padding:var(--s1) 0}
.bk:hover{text-decoration:underline}

.sitemap a:hover{color:var(--ink)}
.sitemap a.lead{color:var(--ink);font-weight:700}
.foot{display:flex;justify-content:space-between;flex-wrap:wrap;gap:var(--s3) var(--s5);align-items:flex-end;border-top:1px solid var(--ln2);padding-top:var(--s5);font-size:var(--f3);color:var(--gy)}
.foot .slog{color:var(--gy);font-family:var(--mono);font-size:var(--f3);letter-spacing:.22em;color:var(--gy);margin-top:var(--s2)}
.foot .r{text-align:right;line-height:1.9}
.foot .r .cn{font-family:var(--mono);letter-spacing:.04em}
@media(max-width:640px){.foot .r{text-align:left}}

/* 渐显 */
/* 渐显。隐藏挂在 html.anim 下——.anim 由 site.js 在观察器装好后才加。
   JS 没跑到那一步 → 没有 .anim → 正文原样可见，最坏只是没动画。
   （2026-07-31：此前隐藏写死在 .rv 上，任何 JS 抛错都会让 24 页正文全白。） */
.anim .rv{opacity:0;transform:translateY(14px);transition:opacity .5s,transform .5s}
.anim .rv.on{opacity:1;transform:none}
/* 全站其它动效都尊重"减少动态效果"，只有渐显漏了——补上 */
@media (prefers-reduced-motion:reduce){.anim .rv{opacity:1;transform:none;transition:none}}

/* 通用卡 */
.cards3{display:grid;grid-template-columns:1fr;gap:var(--s3)}
@media(min-width:900px){.cards3{grid-template-columns:repeat(3,1fr)}}
.c3{border:0;border-top:2px solid var(--ln);background:transparent;padding:var(--s4) 0 0}
/* 卡片标题：about 的三张卡是顶层分节用 h2，其余卡片用 h3，两者同一档字号 */
.c3 h2,.c3 h3{font-size:var(--f6)}
.c3 p{font-size:var(--f4);color:var(--gy);margin-top:var(--s2)}
.c3 .hl2{display:block;font-size:var(--f4);font-weight:700;color:var(--gy);margin-top:var(--s1)}

/* ── 首屏算账机器人（决策 A1/B2：骨架优先、流式补字、降级无感） ── */
/* 骨架屏：形状必须与真实结果一致，填充时才不会跳动 */
@keyframes skw{0%{background-position:200% 0}100%{background-position:-200% 0}}

/* ── 字标灵动（2026-07-29）：两点交替轻呼吸=计量的滴答；悬停依次轻跳 ──
   纪律：字标本体不动（VI V2.0 定稿），只给两个点做微动效；
   幅度克制（≤18%缩放），周期慢（4.2s），prefers-reduced-motion 全关。 */



/* ── UI/UE 体系化（2026-07-29）：反馈、焦点、节奏——按类补齐，不零敲碎打 ── */
/* 键盘可达性：所有可交互元素统一焦点态（无障碍 + 专业感） */
/* 焦点环用 --ink 不用 --or。
   实测：橙环 #FF9900 在 --paper 上 2.02:1 · --tint 1.83:1 · 白卡 2.14:1，
   **落在橙色 CTA 按钮上是 1.00:1，等于不存在**。WCAG 2.4.11 要求 3:1。
   --ink 在上述每一种底上最差也有 9.81:1，包括橙按钮自身。 */
:focus-visible{outline:2px solid var(--ink);outline-offset:2px;border-radius:0}
/* 按钮三态：悬停微抬 + 按下回落——克制的物理反馈 */
.btn,.btn-ghost,.opt{transition:transform .12s ease,background .12s ease,border-color .12s ease,box-shadow .12s ease}
.btn:hover{transform:translateY(-1px);box-shadow:0 3px 10px rgba(255,153,0,.28)}
.btn:active{transform:translateY(0);box-shadow:none}
.btn-ghost:hover{transform:translateY(-1px)}
.btn-ghost:active{transform:translateY(0)}
/* 卡片悬停：仅可点击卡有反馈（实证格、步骤卡不动） */
a.c3:hover{border-color:var(--or)}
/* 链接一致性：正文链接悬停加下划线 */
p a:hover,.dim a:hover{text-decoration:underline}
@media (prefers-reduced-motion:reduce){.btn,.btn-ghost,.opt{transition:none}.btn:hover,.btn-ghost:hover{transform:none}}

/* ── 出处批注（2026-07-30 全站组件）：任何带 data-prov 的元素，悬停/轻触浮出小纸条 ──
   纪律：估算数字必须能指出出处——批注是制度，不是装饰。逻辑见 site.js 末尾。 */
.prov,[data-prov]{position:relative;cursor:help;border-bottom:1px dashed var(--phair2)}
.prov-note{position:absolute;left:0;bottom:calc(100% + 12px);width:max-content;max-width:min(264px,calc(100vw - 44px));
  background:linear-gradient(var(--paper2),var(--edge));border:1px solid var(--phair);
  box-shadow:0 10px 24px rgba(0,0,0,.14),0 2px 5px rgba(0,0,0,.07);
  padding:var(--s2) var(--s3);font-size:var(--f3);font-weight:400;line-height:1.7;letter-spacing:0;color:var(--ptext);white-space:normal;text-align:left;
  opacity:0;transform:translateY(5px) rotate(-1.2deg);transform-origin:0 100%;transition:opacity .18s,transform .18s;pointer-events:none;z-index:40}
.prov-note::before{content:"";position:absolute;top:-8px;left:18px;width:52px;height:13px;transform:rotate(-2deg);
  background:rgba(255,214,120,.4);border-left:1px dashed rgba(180,150,60,.35);border-right:1px dashed rgba(180,150,60,.35)}
[data-prov]:hover .prov-note,[data-prov].on .prov-note{opacity:1;transform:none}
@media (prefers-reduced-motion:reduce){.prov-note{transition:none}}

/* ── 首屏接待柜台（首页 v2 幕1 · 2026-07-30 施工）：固定框原地换页（assets/reception.js） ──
   外框恒定：桌面 420×560 内滚；移动/窄屏全宽自适应、随步骤变高。 */
.hero-rc{background:linear-gradient(180deg,var(--tint) 0%,var(--edge) 82%,var(--paper) 100%)}
.hero-rc h1 em{background:linear-gradient(transparent 62%,rgba(255,153,0,.3) 62%)}
.counter{width:100%;max-width:420px;margin-top:var(--s7);background:var(--paper2);border:1px solid var(--phair);border-radius:var(--r-lg);
  box-shadow:0 14px 40px rgba(0,0,0,.10),0 2px 8px rgba(0,0,0,.05);display:flex;flex-direction:column;overflow:hidden;transition:box-shadow .3s}
.counter.flash{box-shadow:0 0 0 3px var(--or),0 14px 40px rgba(0,0,0,.14)}
.counter>noscript{display:block;padding:var(--s4) var(--s4)}
.ct-head{padding:var(--s3) var(--s4) var(--s3);border-bottom:1px dashed var(--phair);flex-shrink:0}
.ct-duty{display:flex;align-items:center;gap:var(--s2);font-weight:800;font-size:var(--f4);color:var(--ink)}
.ct-duty .tag{font-family:var(--mono);font-size:var(--f0);letter-spacing:.18em;color:var(--pfaint);font-weight:400;margin-left:auto}
.dot-live{width:7px;height:7px;border-radius:50%;background:var(--cy);flex-shrink:0;animation:ctbreathe 1.9s infinite}
@keyframes ctbreathe{0%,100%{opacity:1;box-shadow:0 0 0 0 rgba(16,207,239,.35)}50%{opacity:.45;box-shadow:0 0 0 4px rgba(16,207,239,0)}}
.ct-demo{font-size:var(--f2);color:var(--pfaint);margin-top:var(--s0)}
.ct-demo[hidden]{display:none}
.ct-steps{display:flex;align-items:center;gap:var(--s4);padding:var(--s2) var(--s4) var(--s2);border-bottom:1px solid var(--ln2);flex-shrink:0}
/* 步骤点：**视觉 8px、热区 24×24**。
   点本身不能画大（它是进度指示，不是按钮），但它在 DOM 里就是 <button>——
   7×7 的手指目标等于点不中。用 ::after 铺一层透明热区把可点范围撑到 24×24；
   gap 恰好也是 16px，8+8+8 = 24 正好首尾相接，**相邻热区不重叠**，不会点错步。
   （WCAG 2.5.8 AA 的最小目标就是 24×24。） */
.sdot{position:relative;width:8px;height:8px;border-radius:50%;border:1.5px solid var(--phair2);background:transparent;padding:0;cursor:default;flex-shrink:0}
.sdot::after{content:"";position:absolute;inset:-8px}
.sdot:disabled::after{pointer-events:none}
.sdot.done{background:var(--ink);border-color:var(--ink);cursor:pointer}
.sdot:focus-visible{outline:2px solid var(--ink);outline-offset:3px}
.sdot.cur{background:var(--or);border-color:var(--or);transform:scale(1.25)}
.stepname{font-family:var(--mono);font-size:var(--f1);letter-spacing:.1em;color:var(--gy);margin-left:var(--s1)}
.ct-back{margin-left:auto;font:inherit;font-size:var(--f3);font-weight:700;color:var(--gy);background:none;border:none;cursor:pointer;padding:var(--s0) var(--s1)}
.ct-back:hover{text-decoration:underline}
.ct-back[hidden]{display:none}
.ct-body{padding:var(--s4) var(--s4) var(--s4)}
.ct-pg{display:none}
.ct-pg.on{display:block;animation:ctpgin .32s ease both}
@keyframes ctpgin{from{opacity:0;transform:translateX(10px)}to{opacity:1;transform:none}}
.ct-mini{font-family:var(--mono);font-size:var(--f2);color:var(--pfaint);margin-bottom:var(--s3);padding-bottom:var(--s2);border-bottom:1px dashed var(--phair)}
.ct-hint{font-size:var(--f3);color:var(--pfaint);margin-top:var(--s3)}
@media(min-width:1080px){
  /* 柜台随内容长，不写死高度。
     原来是 `height:560px`：四步的自然高度分别是 165 / 136 / 157 / 案例卡（更高），
     **任何一个固定值都会「前面空一片、后面挤成滚动条」**——
     实测第一步只用掉 165px，剩下 291px 是纯白，占卡片主体 62%，
     而这正是首屏第一眼看到的东西。
     min 管住加载/报错这类极短状态不塌成一条；max 管住案例卡太长时不顶穿视口。
     卡片变高发生在访客自己点击之后，是他预期中的反馈，不是无端跳动。 */
  .counter.live{min-height:360px;max-height:calc(100vh - 120px)}
  .counter.live .ct-body{flex:1;overflow-y:auto;min-height:0}
}
@media (prefers-reduced-motion:reduce){.dot-live{animation:none}.ct-pg.on{animation:none}.counter{transition:none}.sdot.cur{transform:none}}
.rc-q{font-size:var(--f5);font-weight:800;color:var(--ink)}
.rc-q .qk{font-family:var(--mono);font-size:var(--f1);color:var(--gy);letter-spacing:1.5px;margin-right:var(--s2);vertical-align:1px}
.rc-chips{display:flex;flex-wrap:wrap;gap:var(--s2);margin-top:var(--s3)}
.rc-chip{font:inherit;font-size:var(--f4);padding:var(--s2) var(--s4);border:1px solid var(--phair2);background:var(--white);color:var(--mut);cursor:pointer;transition:transform .12s ease,border-color .12s ease,background .12s ease,color .12s ease}
.rc-chip:hover{border-color:var(--or);color:var(--ink);transform:translateY(-1px)}
.rc-chip.on{background:var(--ink);border-color:var(--ink);color:var(--ondk);font-weight:700}
.rc-chip.on::after{content:" ✓";color:var(--or);font-weight:900}
.rc-slot{height:14px;background:var(--dk);color:var(--dktext);display:flex;align-items:center;justify-content:center;font-family:var(--mono);font-size:var(--f0);letter-spacing:.4em;text-indent:.4em}
.rc-printer{overflow:hidden;padding:0 var(--s2)}
.rc-printer.done{overflow:visible}
.rc-receipt{position:relative;background:var(--white);border:1px solid var(--ln2);border-top:none;border-bottom:2px dashed var(--phair2);box-shadow:0 12px 28px rgba(0,0,0,.1);padding:var(--s4) var(--s4) var(--s4);transform:translateY(-103%);transition:transform .9s cubic-bezier(.24,1,.36,1)}
.rc-receipt.out{transform:none}
.rc-cap{display:flex;justify-content:space-between;gap:var(--s2);flex-wrap:wrap;font-family:var(--mono);font-size:var(--f0);letter-spacing:.16em;color:var(--pfaint);border-bottom:1px solid var(--ln2);padding-bottom:var(--s2)}
.rc-recap{font-family:var(--mono);font-size:var(--f3);color:var(--mut);margin-top:var(--s2)}
.rc-bign{display:inline-block;font-size:clamp(33px,6.4vw,44px);font-weight:800;color:var(--ink);letter-spacing:-.02em;line-height:1.2;margin-top:var(--s0)}
.rc-bign .cur{font-size:.5em;font-weight:800;vertical-align:.14em;margin-right:var(--s0)}
.rc-bign small{font-size:.36em;font-weight:700;color:var(--gy);margin-left:var(--s0)}
.rc-sub{font-size:var(--f4);color:var(--gy);margin-top:var(--s1)}
.rc-sub b{color:var(--ink);font-family:var(--mono);font-size:var(--f5)}
.rc-formula{font-family:var(--mono);font-size:var(--f2);color:var(--pfaint);margin-top:var(--s2);letter-spacing:.04em}
.rc-basis{font-size:var(--f2);color:var(--gy);line-height:1.8;margin-top:var(--s2);border-top:1px solid var(--ln2);padding-top:var(--s2)}
.rc-basis b{color:var(--gy)}
.rc-basis .rc-src{color:var(--pfaint)}
.rc-seal{position:absolute;top:9px;right:12px;width:56px;height:56px;border:1.5px solid rgba(255,153,0,.5);border-radius:50%;display:grid;place-items:center;transform:rotate(-9deg);color:rgba(255,153,0,.72);font-family:var(--mono);font-size:var(--f0);letter-spacing:.12em;text-indent:.12em;text-align:center;line-height:1.5;mix-blend-mode:multiply;pointer-events:none}
.rc-fail{font-size:var(--f4);color:var(--gy);padding:var(--s3) var(--s0)}
.rc-slip{display:none;margin:var(--s5) var(--s1) 0;max-width:430px;position:relative;transform:rotate(-1.2deg);background:linear-gradient(var(--paper2),var(--edge));border:1px solid var(--phair);padding:var(--s3) var(--s4) var(--s3);box-shadow:0 10px 24px rgba(0,0,0,.12)}
.rc-slip::before{content:"";position:absolute;top:-9px;left:26px;width:62px;height:15px;transform:rotate(-2deg);background:rgba(255,214,120,.4);border-left:1px dashed rgba(180,150,60,.35);border-right:1px dashed rgba(180,150,60,.35)}
.rc-slip.show{display:block;animation:rcpop .5s cubic-bezier(.2,1.2,.4,1) both}
@keyframes rcpop{from{opacity:0;transform:rotate(-1.2deg) translateY(12px)}to{opacity:1;transform:rotate(-1.2deg)}}
/* 算账员现写的那段话（/api/calc/wording 流式补进来）。比 .t 小半号、颜色更淡：
   它是补充说明，不是结论——结论是上面小票上的数字。挂了就 hidden，版面不留空洞。 */
.rc-say{font-size:var(--f4);color:var(--ptext);line-height:1.85;margin-bottom:var(--s2);padding-bottom:var(--s2);border-bottom:1px dashed rgba(180,150,60,.3)}
.rc-say[hidden]{display:none}
.rc-slip .t{font-size:var(--f5);color:var(--ptext);line-height:1.8}
.rc-slip .sig{font-family:var(--mono);font-size:var(--f1);letter-spacing:.14em;color:var(--pfaint);margin-top:var(--s1)}
.rc-slip .btn{margin-top:var(--s2);padding:var(--s2) var(--s4);font-size:var(--f4);border:none;cursor:pointer}
.rc-slip .btn[hidden]{display:none}
.rc-cases{display:none;margin-top:var(--s4)}
.rc-cases.show{display:block}
.rc-cases .rc-h{font-family:var(--mono);font-size:var(--f0);letter-spacing:1.5px;color:var(--gy);font-weight:700;text-transform:uppercase}
.rc-case{display:flex;gap:var(--s2) var(--s2);align-items:baseline;flex-wrap:wrap;padding:var(--s2) 0;border-bottom:1px solid var(--ln2);opacity:0;transform:translateX(-10px);transition:opacity .35s ease,transform .35s ease}
.rc-case.in{opacity:1;transform:none}
.rc-case b{font-size:var(--f4);color:var(--ink);white-space:nowrap}
.rc-case span{flex:1 1 200px;font-size:var(--f3);color:var(--gy)}
.rc-case i{font-style:normal;font-family:var(--mono);font-size:var(--f1);color:var(--pfaint);white-space:nowrap}
.rc-acts{display:flex;gap:var(--s2);flex-wrap:wrap;margin-top:var(--s3)}
.rc-acts .btn,.rc-acts .btn-ghost{padding:var(--s2) var(--s4);font-size:var(--f4)}
@media (prefers-reduced-motion:reduce){.rc-receipt{transition:none}.rc-slip.show{animation:none}.rc-case{transition:none;opacity:1;transform:none}.rc-chip{transition:none}}
@media(max-width:640px){.ct-head{padding:var(--s3) var(--s3) var(--s2)}.ct-steps{padding:var(--s2) var(--s3) var(--s2)}.ct-body{padding:var(--s3) var(--s3) var(--s4)}.rc-printer{padding:0 var(--s1)}}

/* 机器门户窄条（hero 之后） */
.mport-sec{padding:var(--s6) 0}
@media(min-width:900px){.mport-sec{padding:var(--s7) 0}}
.mport{display:flex;justify-content:space-between;align-items:center;gap:var(--s4) var(--s6);flex-wrap:wrap;background:var(--paper2);border:1px solid var(--phair);padding:var(--s4) var(--s5);box-shadow:0 6px 18px rgba(0,0,0,.05)}
.mport h2{font-size:var(--f7);margin-top:var(--s1)}
.mport p{font-size:var(--f4);color:var(--gy);margin-top:var(--s0)}
.mp-badges{display:flex;gap:var(--s2);flex-wrap:wrap}
.mpb{display:block;border:1.5px solid var(--ink);padding:var(--s2) var(--s3);background:var(--white);transition:transform .15s ease,border-color .15s ease,box-shadow .15s ease}
.mpb b{display:block;font-family:var(--mono);font-size:var(--f3);letter-spacing:.06em;color:var(--ink)}
.mpb span{display:block;font-size:var(--f2);color:var(--gy);margin-top:var(--s0)}
.mpb:hover{border-color:var(--or);transform:translateY(-2px);box-shadow:0 4px 12px rgba(255,153,0,.18)}
@media (prefers-reduced-motion:reduce){.mpb{transition:none}.mpb:hover{transform:none}}

/* 桌面：柜台占 hero 右栏（幕1 两列：左论点 .hero-lead + 右柜台 .counter） */
@media(min-width:1080px){
  .hero-rc .wrap{grid-template-columns:minmax(0,1fr) 420px;column-gap:var(--s10)}
  .hero-rc .hero-lead{grid-column:1}
  .hero-rc .counter{grid-column:2;grid-row:1;margin-top:var(--s1)}
}

/* ── 首页 v2 幕2 · 非对称业务区：主卡 2/3 + 右列堆叠 + 功能注脚 ── */
.biz{display:grid;grid-template-columns:1fr;gap:var(--s4);align-items:stretch}
@media(min-width:900px){.biz{grid-template-columns:2fr 1fr}}
.biz-main{border:1.5px solid var(--or);background:var(--tint);padding:var(--s6) var(--s5)}
@media(min-width:900px){.biz-main{padding:var(--s7) var(--s8)}}
.biz-main h3{font-size:var(--f8);margin-top:var(--s2)}
.deliv{display:flex;align-items:center;gap:var(--s3);font-size:clamp(22px,2.6vw,34px);font-weight:800;color:var(--ink);letter-spacing:-.5px;margin-top:var(--s4)}
.deliv .dd{width:.55em;height:.55em;border-radius:50%;flex-shrink:0;position:relative}
.deliv .dd.o{background:var(--or)}
.deliv .dd.c{background:var(--cy)}
.deliv .dd.c::after{content:"";position:absolute;left:24%;top:18%;width:30%;height:30%;border-radius:50%;background:var(--white);opacity:.92}
.biz-main p{font-size:var(--f4);color:var(--mut);margin-top:var(--s5);max-width:560px}
.biz-main p b{color:var(--ink)}
.biz-main .btn{margin-top:var(--s5)}
.biz-side{display:flex;flex-direction:column;gap:var(--s4)}
.biz-card{flex:1;border-top:2px solid var(--ink);background:transparent;padding:var(--s4) var(--s0) 0}
.biz-card h4{font-size:var(--f5);color:var(--ink)}
.biz-card .d{font-family:var(--mono);font-size:var(--f1);color:var(--gy);font-weight:700;letter-spacing:1px;margin-top:var(--s1)}
.biz-card p{font-size:var(--f3);color:var(--gy);margin-top:var(--s2)}
.biz-card p b{color:var(--ink)}
.biz-card .go{display:inline-block;margin-top:var(--s2);font-size:var(--f3);font-weight:700;color:var(--gy)}
.biz-foot{margin-top:var(--s4);padding:var(--s3) var(--s4);background:var(--tint);border:1px solid var(--ln2);font-size:var(--f3);color:var(--gy)}
.biz-foot b{color:var(--ink)}
.biz-foot a{color:var(--gy);font-weight:700}

/* ── 首页 v2 幕3 · 证据合幕：纸面大字签名句 + 左实证六格右周报双栏 ── */
.act3{background:var(--tint)}
.sigline{font-size:clamp(24px,3vw,38px);font-weight:800;color:var(--ink);line-height:1.5;letter-spacing:-.3px;max-width:900px;margin-top:var(--s3)}
.sigline em{font-style:normal;background:linear-gradient(transparent 62%,rgba(255,153,0,.3) 62%)}
.sig-go{display:inline-block;margin-top:var(--s4);font-size:var(--f5);font-weight:800;color:var(--ink);border-bottom:2px solid var(--or);padding-bottom:var(--s0)}
.ev3{display:grid;grid-template-columns:1fr;gap:var(--s8);margin-top:var(--s8);align-items:start}
@media(min-width:1000px){.ev3{grid-template-columns:1.1fr .9fr;gap:var(--s9);margin-top:var(--s9)}}
.ev-lead{font-size:var(--f4);color:var(--gy);margin-bottom:var(--s3)}
.ev3 .wall.six{grid-template-columns:repeat(2,1fr)}
.ev-k{font-family:var(--mono);font-size:var(--f1);letter-spacing:1.5px;color:var(--pfaint);margin-bottom:var(--s2);text-transform:uppercase}
.act3 .partners{margin-top:var(--s8)}

/* ── 首页 v2 幕4 · 收束：白皮书小卡行 + 全页唯一深色时刻（.cta-sec 沿用） ── */
.act4{padding:var(--s10) 0 0}
@media(min-width:900px){.act4{padding:var(--s11) 0 0}}
.wprow{display:flex;gap:var(--s5);align-items:center;background:var(--white);border:1px solid var(--ln);padding:var(--s5) var(--s5);margin-bottom:var(--s10);flex-wrap:wrap}
@media(min-width:900px){.wprow{gap:var(--s6);padding:var(--s5) var(--s6);margin-bottom:var(--s11);flex-wrap:nowrap}}
.wpcov{width:88px;height:118px;border:1px solid var(--ln);padding:var(--s2);background:var(--white);flex-shrink:0;box-shadow:var(--sh3)}
.wpcov .t{font-size:var(--f1);font-weight:800;color:var(--ink);margin-top:var(--s2);line-height:1.5}
/* 封面缩略图里的装饰性微缩文字（模拟书封上的小字，不是可读正文）——刻度豁免，见 check-scale.py */
.wpcov .m{font-family:var(--mono);font-size:5px;color:var(--pfaint);margin-top:6px;letter-spacing:.5px}
.wptxt{flex:1;min-width:220px}
.wptxt h3{font-size:var(--f6);margin-top:var(--s1)}
.wptxt p{color:var(--gy);font-size:var(--f4);margin-top:var(--s1);max-width:560px}
.wpacts{display:flex;flex-direction:column;gap:var(--s2);flex-shrink:0}
.wpacts .btn-ghost{padding:var(--s2) var(--s4);font-size:var(--f4);text-align:center}
