/* TKX shared stylesheet — all page types (home / models / routers / compute / methodology / api) */
:root{
  /* 色板 OKLCH 化（2026-07-21 全局优化）：L 通道 = 原 hex 精确换算值(对比度层级零变),中性色 hue 从冷蓝 258-265
     旋向品牌带——表面色贴品牌绿 170,墨色走 teal 210 过渡(直接染 168 会发军绿);chroma ≤0.026 只给温度不抢色 */
  --bg:oklch(97.3% 0.003 170); --surface:oklch(99.4% 0.0015 170); --surface2:oklch(98.8% 0.002 170);
  --ink:oklch(19% 0.02 210); --ink2:oklch(47.2% 0.022 213); --ink3:oklch(57% 0.02 214); --ink4:oklch(71.2% 0.016 215);
  --mixbase:oklch(21.3% 0.027 218);
  --line:color-mix(in srgb,var(--mixbase) 9%,transparent); --line2:color-mix(in srgb,var(--mixbase) 13%,transparent); --line3:color-mix(in srgb,var(--mixbase) 6%,transparent);
  --acc:oklch(57.9% 0.114 169); --acc-ink:oklch(51.6% 0.102 169); --acc-soft:oklch(95.8% 0.016 171);
  --up:oklch(61.2% 0.149 155); --down:oklch(61.5% 0.19 28); --blue:oklch(54.6% 0.215 263); --violet:oklch(54.1% 0.247 293);
  --ev-official:var(--blue); --ev-api:var(--acc); --ev-probe:var(--violet); --ev-self:oklch(71.3% 0.018 240);
  --mono:"SF Mono",ui-monospace,"JetBrains Mono",Menlo,Consolas,monospace;
  --sans:-apple-system,"SF Pro Text","Helvetica Neue","PingFang SC","Noto Sans SC","Hiragino Sans","Malgun Gothic",system-ui,sans-serif;
  --disp:-apple-system,"SF Pro Display","Helvetica Neue","PingFang SC",sans-serif;
  --maxw:1240px; --shadow:0 1px 2px rgba(16,25,40,.04),0 1px 3px rgba(16,25,40,.06);
  /* 动效系统（三路研究收敛）：一条缓动 + 分层时长，杜绝第二曲线/bounce */
  --ease:cubic-bezier(.25,1,.5,1); --ease-snap:cubic-bezier(.21,1.02,.73,1);
  --t-press:60ms; --t-ui:150ms; --t-flash:.7s; --t-enter:.42s;
}
:root[data-theme="dark"]{
  /* 暗主题同法:L 保持,夜色从冷蓝 264 旋至 teal 200-214——"数据室凌晨两点"的青夜,不是默认 SaaS 蓝夜 */
  --bg:oklch(16.3% 0.012 200); --surface:oklch(20.1% 0.018 205); --surface2:oklch(18.6% 0.016 202);
  --ink:oklch(96% 0.008 190); --ink2:oklch(72.4% 0.024 210); --ink3:oklch(56.2% 0.026 212); --ink4:oklch(44.7% 0.024 214);
  --mixbase:oklch(95.4% 0.02 200);
  --line:color-mix(in srgb,var(--mixbase) 11%,transparent); --line2:color-mix(in srgb,var(--mixbase) 16%,transparent); --line3:color-mix(in srgb,var(--mixbase) 7%,transparent);
  --acc:oklch(77.2% 0.152 167); --acc-ink:oklch(77.2% 0.152 167); --acc-soft:oklch(26.4% 0.038 172);
  --up:oklch(72.3% 0.192 150); --down:oklch(67.9% 0.178 27); --blue:oklch(69.3% 0.162 259); --violet:oklch(73% 0.166 300);
  --ev-official:var(--blue); --ev-api:var(--acc); --ev-probe:var(--violet); --ev-self:oklch(56.2% 0.022 240);
  --shadow:0 1px 2px rgba(0,0,0,.3);
}
*{box-sizing:border-box;margin:0;padding:0}
html{-webkit-text-size-adjust:100%}
html[dir="rtl"] .num,html[dir="rtl"] [data-ltr]{direction:ltr;unicode-bidi:embed}
body{background:var(--bg);color:var(--ink);font-family:var(--sans);font-size:14px;line-height:1.6;-webkit-font-smoothing:antialiased}
.mono{font-family:var(--mono);font-variant-numeric:tabular-nums}
.wrap{max-width:var(--maxw);margin:0 auto;padding:0 28px}
a{color:inherit;text-decoration:none}
/* 状态完备性兜底(2026-07-21):键盘可达全站一致 ring;:where 零特异性,已有专门规则(th.srt 等)自然覆盖 */
:where(a,button,input,select,summary,[tabindex]):focus-visible{outline:2px solid var(--acc);outline-offset:2px;border-radius:3px}

/* nav */
.nav{position:sticky;top:0;z-index:50;background:color-mix(in srgb,var(--surface) 94%,transparent);backdrop-filter:saturate(1.4) blur(12px);border-bottom:1px solid var(--line2);box-shadow:0 4px 18px -14px rgba(16,25,40,.35)}
.nav-in{display:flex;align-items:center;gap:30px;height:64px}
.brand{display:flex;align-items:center;gap:8px;flex:none}
.bmk{height:25px;width:25px;flex:none}
.bmk .r{stroke:var(--line2)}.bmk .c{stroke:var(--ink2)}.bmk .d{fill:var(--acc)}
.bmk .d{transform-box:fill-box;transform-origin:center;transition:transform var(--t-ui) var(--ease)}
.brand:hover .bmk .d,.brand:focus-visible .bmk .d{transform:scale(1.4)}
.bwm{height:17px;width:auto;display:block}
.bwm .t{fill:var(--ink)}.bwm .x{fill:var(--acc)}
.menu{display:flex;gap:28px;font-size:15px;color:var(--ink2);font-weight:550;height:100%}
.menu a{position:relative;display:flex;align-items:center;height:100%;padding:0;white-space:nowrap;transition:color var(--t-ui) var(--ease)}
.menu a.on{color:var(--ink);font-weight:650}
.menu a.on::after{content:"";position:absolute;inset-inline:0;bottom:0;height:2.5px;background:var(--acc);border-radius:2px}
.menu a:hover{color:var(--ink)}
.nav-r{margin-inline-start:auto;display:flex;align-items:center;gap:10px}
.burger{display:none;border:1px solid var(--line2);background:var(--surface);border-radius:6px;padding:4px 9px;font-size:16px;line-height:1;color:var(--ink2);cursor:pointer}
.burger:hover{color:var(--ink);border-color:var(--acc)}
.srch{display:flex;align-items:center;gap:8px;background:var(--bg);border:1px solid var(--line2);border-radius:7px;padding:6px 12px;color:var(--ink3);font-size:12.5px;min-width:190px}
.srch svg{flex:none}.srch input{background:none;border:none;outline:none;color:var(--ink);font-size:12.5px;width:100%;font-family:inherit}.srch input::placeholder{color:var(--ink3)}
.langsel{position:relative}
.langbtn{font-family:var(--mono);font-size:12px;color:var(--ink2);border:1px solid var(--line2);border-radius:6px;padding:5px 9px;cursor:pointer;background:var(--surface);display:flex;align-items:center;gap:5px}
.langbtn:hover{color:var(--ink);border-color:var(--acc)}
.langmenu{position:absolute;top:calc(100% + 6px);inset-inline-end:0;background:var(--surface);border:1px solid var(--line2);border-radius:8px;box-shadow:0 10px 30px rgba(16,25,40,.14);padding:5px;min-width:150px;display:none;z-index:60}
.langmenu.open{display:block}.langmenu a{display:block;padding:7px 11px;border-radius:5px;font-size:13px;color:var(--ink2)}.langmenu a:hover{background:var(--surface2);color:var(--ink)}.langmenu a.on{color:var(--acc-ink);font-weight:600}
.tgl{border:1px solid var(--line2);background:var(--surface);border-radius:6px;padding:5px 9px;font-size:12px;color:var(--ink2);cursor:pointer;font-family:var(--mono)}
.tgl:hover{color:var(--ink);border-color:var(--acc)}
.tgl:focus-visible,.langbtn:focus-visible{outline:2px solid var(--acc);outline-offset:2px}

/* home hero + stat strip */
/* 数据优先(CMC 式)：紧凑左对齐头部，把榜单顶到首屏 */
.hero{padding:28px 0 18px;text-align:start;background:radial-gradient(64% 128% at 12% -24%,var(--acc-soft) 0%,transparent 60%)}
.hero h1{font-family:var(--disp);font-size:clamp(23px,3vw,33px);font-weight:800;letter-spacing:-1px;line-height:1.1;margin:0;max-width:22ch;text-wrap:balance}
.hero .sub{color:var(--ink2);font-size:clamp(14px,1.5vw,16px);margin-top:8px;max-width:60ch}
/* CMC 式高亮卡片条(顶部仪表盘) */
.stats{display:flex;gap:12px;margin-top:22px;flex-wrap:wrap}
.hcard{background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:13px 16px;box-shadow:var(--shadow);flex:1 1 0;min-width:172px}
.hcard.sm{flex:0 1 auto;min-width:116px}
.hc-k{font-family:var(--mono);font-size:10px;letter-spacing:.5px;text-transform:uppercase;color:var(--ink3);margin-bottom:8px;white-space:nowrap}
.hc-b{display:flex;align-items:center;justify-content:space-between;gap:8px}
.hc-v{font-family:var(--mono);font-size:23px;font-weight:750;letter-spacing:-.6px;color:var(--ink);line-height:1;white-space:nowrap}
.hc-v small{font-size:.46em;color:var(--ink3);font-weight:400;letter-spacing:0}
.hc-c{font-family:var(--mono);font-size:12.5px;font-weight:700;white-space:nowrap}
.hc-c.up{color:var(--up)}.hc-c.down{color:var(--down)}.hc-c.mut{color:var(--ink3)}
.hc-s{margin-top:8px;line-height:0}
@media(max-width:820px){.stats{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;-webkit-overflow-scrolling:touch;margin-inline:-16px;padding-inline:16px}.stats::-webkit-scrollbar{display:none}.hcard{flex:0 0 auto;min-width:150px}.hc-v{font-size:20px}}
.upd{display:flex;justify-content:flex-start;gap:7px;align-items:center;margin-top:16px;font-family:var(--mono);font-size:11px;color:var(--ink3)}
.upd i{width:6px;height:6px;border-radius:50%;background:var(--acc);animation:pulse 2.4s infinite}
@keyframes pulse{0%{box-shadow:0 0 0 0 color-mix(in srgb,var(--acc) 50%,transparent)}70%{box-shadow:0 0 0 6px transparent}100%{box-shadow:0 0 0 0 transparent}}

/* compact page header (sub data pages) */
.phead{padding:24px 0 6px}
.phead .eyebrow{font-family:var(--mono);font-size:11px;letter-spacing:1.5px;text-transform:uppercase;color:var(--acc-ink);font-weight:600}
.phead h1{font-family:var(--disp);font-size:clamp(26px,3.6vw,34px);font-weight:800;letter-spacing:-.8px;margin:10px 0 8px;text-wrap:balance}
.phead p{color:var(--ink2);font-size:14.5px;max-width:70ch}

section{padding:22px 0 30px}
.sh{display:flex;align-items:center;gap:11px;margin-bottom:12px;flex-wrap:wrap}
.sh h2{font-family:var(--disp);font-size:20px;font-weight:750;letter-spacing:-.4px}
.sh .flag{font-family:var(--mono);font-size:10px;font-weight:600;letter-spacing:.5px;color:var(--acc-ink);background:var(--acc-soft);border:1px solid color-mix(in srgb,var(--acc) 25%,transparent);padding:2px 8px;border-radius:5px}
.sh .flag.sub{color:var(--ink3);background:var(--bg);border-color:var(--line2)}
.sh .more{margin-inline-start:auto;font-family:var(--mono);font-size:11.5px;color:var(--ink3);display:flex;align-items:center;gap:14px}
.legend{display:flex;gap:12px;flex-wrap:wrap}
.ev{display:inline-flex;align-items:center;gap:5px;font-size:11px;font-weight:500;color:var(--ink3)}
.ev i{width:6px;height:6px;border-radius:50%}
.ev.o i{background:var(--ev-official)}.ev.a i{background:var(--ev-api)}.ev.p i{background:var(--ev-probe)}.ev.s i{background:var(--ev-self)}

/* tables */
.tcard{background:var(--surface);border:1px solid var(--line);border-radius:12px;box-shadow:var(--shadow);overflow:hidden}
.tscroll{overflow-x:auto}
table{width:100%;border-collapse:collapse;min-width:760px}
thead th{font-family:var(--mono);font-size:10px;font-weight:600;letter-spacing:.6px;text-transform:uppercase;color:var(--ink3);text-align:end;padding:12px 16px;border-bottom:1px solid var(--line2);white-space:nowrap;background:var(--surface2)}
thead th:nth-child(1),thead th:nth-child(2){text-align:start}
#ht thead th:nth-child(2),#ht thead th:nth-child(3){text-align:start}
th.srt{cursor:pointer;user-select:none;transition:color var(--t-ui) var(--ease)}th.srt:hover{color:var(--ink)}th.srt.on{color:var(--acc-ink)}th.srt:focus-visible{outline:2px solid var(--acc);outline-offset:-2px}
th .ar{opacity:.45;margin-inline-start:3px}th.srt.on .ar{opacity:1}
tbody td{padding:13px 16px;border-bottom:1px solid var(--line3);text-align:end;white-space:nowrap;vertical-align:middle}
tbody td:nth-child(1),tbody td:nth-child(2){text-align:start}
tbody tr.last td{border-bottom:none}
tbody tr.rowh{transition:background .1s}tbody tr.rowh:hover{background:var(--surface2)}
tbody tr.mrow{cursor:pointer}
.rk{font-family:var(--mono);color:var(--ink4);font-size:12.5px;width:34px}
.nm{display:flex;align-items:center;gap:11px}
/* 字母徽章(2026-07-21 echo:"随机彩虹渐变=杂乱土")：等L等C同色系浅底深字(Linear/Notion 式),10 hue 和谐带,
   同字母对必同色(hash 在 app.js/bake.mjs 只选 lg0-9 索引,颜色真源只在这里——改配色改此处全站跟随) */
.logo{width:30px;height:30px;border-radius:8px;display:flex;align-items:center;justify-content:center;font-family:var(--mono);font-size:11px;font-weight:650;flex:none;letter-spacing:-.5px;
  --lh:170;background:oklch(94% 0.04 var(--lh));color:oklch(40% 0.095 var(--lh));box-shadow:inset 0 0 0 1px oklch(40% 0.095 var(--lh)/.14)}
.lg0{--lh:22}.lg1{--lh:55}.lg2{--lh:95}.lg3{--lh:140}.lg4{--lh:168}.lg5{--lh:200}.lg6{--lh:235}.lg7{--lh:270}.lg8{--lh:305}.lg9{--lh:340}
:root[data-theme="dark"] .logo{background:oklch(30.5% 0.048 var(--lh));color:oklch(84% 0.08 var(--lh));box-shadow:inset 0 0 0 1px oklch(84% 0.08 var(--lh)/.16)}
.nm b{font-size:14px;font-weight:650;color:var(--ink)}.nm b a{color:inherit}.nm b a:hover{color:var(--acc-ink)}
.nm .sb{font-family:var(--mono);font-size:10.5px;color:var(--ink3);margin-top:1px}
.kind{font-family:var(--mono);font-size:9.5px;font-weight:600;letter-spacing:.3px;padding:1px 6px;border-radius:4px;margin-inline-start:7px;vertical-align:middle}
/* 2026-07-13 echo:颜色杂乱——类型=分类学,一律中性;颜色只编码涨跌与凭证 */
.kind.p,.kind.w,.kind.b{color:var(--ink2);background:var(--bg);border:1px solid var(--line2)}
.num{font-family:var(--mono);font-variant-numeric:tabular-nums}
.big{font-size:14.5px;font-weight:650;color:var(--ink)}.mut{color:var(--ink3)}
.covwrap{display:inline-flex;align-items:center;gap:9px;justify-content:flex-end}
.covbar{height:5px;border-radius:3px;background:linear-gradient(90deg,var(--acc),color-mix(in srgb,var(--acc) 55%,var(--surface)));opacity:.9}
.hit{color:var(--ink);font-weight:600}.up-v{color:var(--up);font-weight:600}
/* 占位态(probe pending/collecting)用最淡灰——"暂无"不是"信号",满屏信号紫=噪音(2026-07-21 去杂) */
.dash-c{color:var(--ink4)}.dash-c .wp{font-family:var(--mono);font-size:9.5px;color:var(--ink4);display:block;margin-top:1px}
/* Price 格副行=最低价(2026-07-26 邓迪"是否可以显示最低价")：主数字仍是各报价平均 */
.lowp{display:block;margin-top:1px;font-family:var(--mono);font-size:10px;font-variant-numeric:tabular-nums;color:var(--ink3);white-space:nowrap}
/* 最低价的出处(2026-07-31 邓迪"一目了然知道最低价是哪个 router 提供的")：比均价副行重一档,
   但仍弱于主价格数字——它是归因不是行情,抢了主数字就本末倒置。 */
.psrc{color:var(--ink2);font-weight:600}
.chip{display:inline-flex;align-items:center;gap:5px;font-family:var(--mono);font-size:10.5px;font-weight:500;padding:2px 8px;border-radius:5px;border:1px solid}
.chip i{width:5px;height:5px;border-radius:50%}
.chip.o{color:var(--ev-official);border-color:color-mix(in srgb,var(--ev-official) 30%,transparent)}.chip.o i{background:var(--ev-official)}
.chip.a{color:var(--ev-api);border-color:color-mix(in srgb,var(--ev-api) 30%,transparent)}.chip.a i{background:var(--ev-api)}
.chip.p{color:var(--ev-probe);border-color:color-mix(in srgb,var(--ev-probe) 30%,transparent)}.chip.p i{background:var(--ev-probe)}
.chip.s{color:var(--ev-self);border-color:var(--line2)}.chip.s i{background:var(--ev-self)}
.chev{font-family:var(--mono);font-size:10px;color:var(--ink4);display:inline-block;transition:transform .15s}
tr.open .chev{transform:rotate(90deg);color:var(--acc-ink)}
.pend-h{padding:10px 16px;font-family:var(--mono);font-size:10px;letter-spacing:.5px;text-transform:uppercase;color:var(--ink3);background:var(--surface2);border-top:1px solid var(--line2);border-bottom:1px solid var(--line3)}
tr.pend td{opacity:.6}tr.pend .nm b{font-weight:500;color:var(--ink2)}
tr.sub>td{padding:0;background:var(--surface2);text-align:start}
.sub-in{padding:14px 18px 18px}.sub-cap{font-size:12px;color:var(--ink2);margin-bottom:10px}.sub-cap b{color:var(--ink)}
table.ptbl{border:1px solid var(--line);min-width:600px;border-radius:8px;overflow:hidden}
table.ptbl thead th{background:var(--surface);padding:8px 12px}table.ptbl td{padding:9px 12px;font-size:12px;border-bottom:1px solid var(--line3)}
table.ptbl td:first-child,table.ptbl td:nth-child(2){text-align:start}
/* 自报用量分模型明细表（/a/{slug}/,2 列无需 600px 硬宽,移动端全宽不横滑）*/
table.utbl{width:100%;border:1px solid var(--line);border-radius:8px;overflow:hidden;border-collapse:collapse}
table.utbl thead th{background:var(--surface);padding:8px 12px;text-align:start;font-size:11px;color:var(--ink3)}
table.utbl th.num,table.utbl td.num{text-align:end}
table.utbl td{padding:8px 12px;font-size:12px;border-bottom:1px solid var(--line3)}
table.utbl tr:last-child td{border-bottom:0}
.best td{background:var(--acc-soft)}.best td:first-child{box-shadow:inset 3px 0 0 var(--acc)}
.tag-best{font-family:var(--mono);font-size:9.5px;color:var(--acc-ink);border:1px solid color-mix(in srgb,var(--acc) 35%,transparent);padding:0 5px;border-radius:4px;margin-inline-start:7px}

/* pagination */
.pager{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 16px;border-top:1px solid var(--line2);background:var(--surface2);flex-wrap:wrap}
.pager .info{font-family:var(--mono);font-size:11px;color:var(--ink3)}
.pager .pages{display:flex;gap:4px;align-items:center}
.pgbtn{font-family:var(--mono);font-size:12px;min-width:30px;height:30px;padding:0 8px;border:1px solid var(--line2);border-radius:6px;background:var(--surface);color:var(--ink2);cursor:pointer;display:inline-flex;align-items:center;justify-content:center}
.pgbtn:hover:not(:disabled){border-color:var(--acc);color:var(--ink)}
.pgbtn.on{background:var(--acc);border-color:var(--acc);color:#fff}
.pgbtn:disabled{opacity:.4;cursor:default}
.pgbtn.dots{border:none;background:none;cursor:default;color:var(--ink4)}

/* gpu cards */
.gpu{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:12px}
.gcard{background:var(--surface);border:1px solid var(--line);border-radius:10px;padding:16px 18px;box-shadow:var(--shadow)}
.gcard .g{font-family:var(--mono);font-size:12px;color:var(--ink2);font-weight:600}
.gcard .pr{font-family:var(--mono);font-size:22px;font-weight:700;color:var(--ink);margin-top:6px;letter-spacing:-.5px}
.gcard .pr small{font-size:11px;color:var(--ink3);font-weight:400}
.gcard .mt{font-family:var(--mono);font-size:10px;color:var(--ink4);margin-top:5px}
.gcard.soon{opacity:.6;border-style:dashed}

/* methodology + api docs */
.doc{max-width:900px;margin:0 auto;padding:44px 28px 60px}
.doc.narrow{max-width:820px}
.idx{display:grid;gap:14px;margin-top:30px}
.card{background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:20px 22px;box-shadow:var(--shadow)}
.card .code{font-family:var(--mono);font-size:12px;font-weight:600;color:var(--acc-ink);letter-spacing:.5px}
.card h3{font-family:var(--disp);font-size:18px;font-weight:700;margin:5px 0 8px}
.card p{color:var(--ink2);font-size:14px}
.card .soon{font-family:var(--mono);font-size:10px;color:var(--ink3);border:1px solid var(--line2);border-radius:4px;padding:1px 7px;margin-inline-start:8px;vertical-align:middle}
.doc .ver{font-family:var(--mono);font-size:12px;color:var(--ink3);margin-top:14px}
.doc .lede{color:var(--ink2);font-size:16px;max-width:64ch}
.facts{display:flex;flex-wrap:wrap;gap:8px;margin-top:16px}
.fact{font-family:var(--mono);font-size:11.5px;color:var(--ink2);border:1px solid var(--line2);border-radius:20px;padding:4px 12px;background:var(--surface)}
.doc h2{font-family:var(--disp);font-size:18px;font-weight:700;margin:36px 0 12px}
.ep{background:var(--surface);border:1px solid var(--line);border-radius:12px;box-shadow:var(--shadow);overflow:hidden}
.ep .row{display:flex;gap:16px;padding:15px 20px;border-bottom:1px solid var(--line)}.ep .row:last-child{border-bottom:none}
.ep .m{font-family:var(--mono);font-size:13px;white-space:nowrap;flex:none;min-width:280px}.ep .m b{color:var(--acc-ink);font-weight:600}.ep .m .verb{color:var(--ink3);margin-inline-end:6px}
.ep .d{color:var(--ink2);font-size:13.5px}
.tiers{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:10px;margin-top:12px}
.tier{background:var(--surface);border:1px solid var(--line);border-radius:10px;padding:13px 15px;font-size:13px;color:var(--ink2)}
.tier b{color:var(--ink);font-size:13px;margin-bottom:3px;display:flex;align-items:center;gap:6px}.tier i{width:7px;height:7px;border-radius:50%;display:inline-block}
.t-o i{background:var(--blue)}.t-a i{background:var(--acc)}.t-p i{background:var(--violet)}
.foot-note,.terms{margin-top:32px;padding:18px 22px;background:var(--acc-soft);border:1px solid color-mix(in srgb,var(--acc) 22%,transparent);border-radius:12px;font-size:14px;color:var(--ink)}
.foot-note .mono,.terms .mono{color:var(--acc-ink)}
.terms code{font-family:var(--mono);background:var(--surface);padding:1px 6px;border-radius:4px;border:1px solid var(--line2)}

.loading{padding:34px;text-align:center;color:var(--ink3);font-family:var(--mono);font-size:12px}
footer{border-top:1px solid var(--line);background:var(--surface2);margin-top:24px}
.foot{display:flex;flex-wrap:wrap;gap:16px 26px;align-items:center;padding:24px 0;font-size:12.5px;color:var(--ink3)}
.foot .bd{display:inline-flex;align-items:center}.foot .bd .bwm{height:15px}
.foot a:hover{color:var(--ink)}
.trust{display:flex;gap:8px;align-items:center;margin-inline-start:auto;flex-wrap:wrap}
/* 发起与背书机构（邓迪 2026-07-30）：页脚末行，克制一档——是署名不是宣传语 */
.gacs{display:flex;flex-wrap:wrap;gap:4px 8px;align-items:baseline;padding:0 0 26px;font-size:11.5px;color:var(--ink3);border-top:1px solid var(--line);margin-top:-4px;padding-top:14px}
.gacs .gacs-full{font-family:var(--mono);font-size:10.5px;color:var(--ink4);letter-spacing:.01em}
.badge{font-family:var(--mono);font-size:10.5px;color:var(--ink2);border:1px solid var(--line2);border-radius:6px;padding:4px 10px;display:inline-flex;gap:6px;align-items:center}.badge b{color:var(--acc-ink)}

/* ---- four-board overview ---- */
.grid4{display:grid;grid-template-columns:1fr 1fr;gap:18px}
.rowlabel{font-family:var(--mono);font-size:11px;letter-spacing:1.4px;text-transform:uppercase;color:var(--ink3);margin:32px 0 12px;display:flex;align-items:center;gap:12px}
.rowlabel::after{content:"";flex:1;height:1px;background:var(--line)}

.soon-b{font-family:var(--mono);font-size:9.5px;letter-spacing:.4px;text-transform:uppercase;color:var(--ink3);border:1px solid var(--line2);border-radius:4px;padding:1px 6px;margin-inline-start:7px;vertical-align:middle}

@media(max-width:820px){
  .grid4{grid-template-columns:1fr}
  .wrap{padding:0 16px}
  .srch{display:none}
  .burger{display:none}
  /* 移动端不藏 nav：logo 一行，榜单做成常驻横滑 pill 条（CMC 式），永远看得见 */
  .nav-in{height:auto;flex-wrap:wrap;gap:2px 14px;padding:9px 0 11px}
  .brand{order:1}
  .nav-r{order:2;margin-inline-start:auto}
  .menu{order:3;flex-basis:100%;height:auto;gap:8px;font-size:14px;margin-top:10px;overflow-x:auto;flex-wrap:nowrap;scrollbar-width:none;-webkit-overflow-scrolling:touch}
  .menu::-webkit-scrollbar{display:none}
  .menu a{flex:none;height:auto;padding:8px 15px;border-radius:999px;background:var(--surface2);border:1px solid var(--line);font-weight:600;color:var(--ink2)}
  .menu a.on{background:var(--acc-soft);color:var(--acc-ink);border-color:color-mix(in srgb,var(--acc) 38%,transparent)}
  .menu a.on::after{display:none}
  /* ── 2026-07-19 移动端重排（skill §0.7:密集数据终端过密度阈值 = 重新架构 IA,不是压扁桌面。
     手机 use-context = 瞥一眼查价/查名次 → 榜单从"8 格大卡"改 CMC 式两行密排列表,一屏 ~8 行(原 ~2 行)）── */
  .hero{padding-top:4px}
  .hero h1{font-size:21px}
  .hero .sub{font-size:13px;margin-top:5px}
  .ticker{font-size:10.5px}
  .ticker.on{height:28px}.tk-track{height:28px}
  /* 统计条：2 列网格(3 列时 TOKEN PRICE INDEX 等标签截断)；LIVE 徽章让位给数值本身(曾把 $1.82 挤成 $1…) */
  .stats{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin-top:16px}
  .hcard{padding:10px 12px}.hcard.sm{min-width:0}
  .hc-k{font-size:9.5px;margin-bottom:6px}
  .hc-v{font-size:20px}
  .hc-s{display:none}
  .live-slot{display:none!important}
  .upd{font-size:11px}
  .bstat .v{font-size:21px}
  /* 24H MOVES chips：横滑一行,不折行堆高 */
  .changes{display:flex;flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;-webkit-overflow-scrolling:touch}
  .changes::-webkit-scrollbar{display:none}
  .chg-chip{flex:none}
  /* ── 榜单表(#at/#ht/#pt/#dt)→ 密排列表：行=分隔线列表项(去浮卡),grid 两行/单行,次要列隐藏 ── */
  #at,#ht,#pt,#dt,#at tbody,#ht tbody,#pt tbody,#dt tbody{display:block;min-width:0}
  #at thead,#ht thead,#pt thead,#dt thead{display:none}
  #at tr.rowh,#ht tr.rowh,#pt tr.rowh,#dt tr.rowh{display:grid;grid-template-columns:22px minmax(0,1fr) auto auto;align-items:center;gap:1px 10px;padding:9px 12px;margin:0;border:0;border-bottom:1px solid var(--line3);background:var(--surface)}
  #at tr.rowh:last-child,#ht tr.rowh:last-child,#pt tr.rowh:last-child,#dt tr.rowh:last-child{border-bottom:0}
  #at td,#ht td,#pt td,#dt td{display:block;border:none!important;padding:0;text-align:start;font-size:13px;min-width:0;overflow:hidden;text-overflow:ellipsis}
  /* 右侧数值列：微标签(8.5px)在上、值在下,数值右对齐 */
  #at td::before,#ht td::before,#pt td::before,#dt td::before{content:attr(data-l);display:block;font-family:var(--mono);font-size:8.5px;letter-spacing:.3px;text-transform:uppercase;color:var(--ink3);margin-bottom:1px;text-align:end}
  tbody td.rk{grid-row:1;grid-column:1;font-size:11px;color:var(--ink3)}
  /* 带 ID 保证赢过 #at td::before（特异性坑:曾让 rk 的 "#" 标签飘到 logo 左上） */
  #at td.rk::before,#ht td.rk::before,#pt td.rk::before,#dt td.rk::before,#ht td.wl::before{display:none}
  tbody .nm{min-width:0;max-width:100%}tbody .nm>div{min-width:0}
  tbody .nm b,tbody .nm .sb{display:block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  tbody .nm .sb{font-size:10.5px}
  .logo{width:26px;height:26px;font-size:9px}
  /* Router 榜 #atb(rk,name,type,trust,tok,vol$,markup,models,offers,uptime,ev)→11 列:
     r1 rk|name|markup|trust · r2 TOKENS|VOLUME(2026-07-22 邓迪"排名加上日交易额";markup 标签打开——
     旧注释"%语义自明"被邓迪"百分比是指什么"实证证伪,标签必须给) */
  #atb tr.rowh{grid-template-columns:22px minmax(0,1fr) auto auto;row-gap:3px}
  #atb td:nth-child(2){grid-row:1;grid-column:2}#atb td:nth-child(2)::before{display:none}
  #atb td:nth-child(7){grid-row:1;grid-column:3;text-align:end;justify-self:end}
  #atb td:nth-child(4){grid-row:1;grid-column:4;text-align:end;justify-self:end;min-width:44px}
  #atb td:nth-child(5){grid-row:2;grid-column:1/3}
  #atb td:nth-child(6){grid-row:2;grid-column:3/5;text-align:end;justify-self:end}
  #atb td:nth-child(5)::before,#atb td:nth-child(6)::before{display:block;text-align:start}
  #atb td:nth-child(6)::before{text-align:end}
  #atb td:nth-child(3),#atb td:nth-child(8),#atb td:nth-child(9),#atb td:nth-child(10),#atb td:nth-child(11){display:none}
  /* 模型榜 #htb(wl,rk,name,price,24h,tokens,spend,heat,vol,prov)：r1 rk|name|price|★ · r2 用量|成交额
     (2026-07-20 真机糊字修复:安卓 fallback 字体更宽,nowrap 溢出互叠——r2 两格各占半行+overflow 裁剪;
      24h% 移动端隐藏:价格变化不频繁常年 0.0%,无信息量还挤压名字列) */
  /* 2026-07-20 邓迪"模型名显示太短":名字独占第一行整行(此前与价格挤一行被压成 cla…);
     价格降到第二行,与用量/成交额三等分平铺——CMC 手机版标准解法 */
  #htb tr.rowh{grid-template-columns:22px 1fr 1fr 1fr 22px;column-gap:8px;row-gap:3px}
  #htb td.rk{grid-row:1;grid-column:1}
  #htb td:nth-child(3){grid-row:1;grid-column:2/5;min-width:0}#htb td:nth-child(3)::before{display:none}
  #htb td.wl{grid-row:1;grid-column:5;text-align:end}#htb td.wl::before{display:none}
  #htb .nm b{font-size:14px}
  #htb td:nth-child(4){grid-row:2;grid-column:1/3}   /* 价格 左 */
  #htb td:nth-child(6){grid-row:2;grid-column:3/4}   /* 用量 中 */
  #htb td:nth-child(7){grid-row:2;grid-column:4/6;text-align:end;justify-self:end} /* 成交额 右 */
  #htb td:nth-child(4)::before,#htb td:nth-child(6)::before,#htb td:nth-child(7)::before{display:block;margin-bottom:1px;text-align:start}
  #htb td:nth-child(7)::before{text-align:end}
  #htb td:nth-child(4) .big,#htb td:nth-child(6) .big,#htb td:nth-child(7) .big{font-size:12px}
  #htb td:nth-child(4) .mv,#htb td:nth-child(6) .mv,#htb td:nth-child(7) .mv{font-size:10px}
  #htb td:nth-child(4) .lowp{font-size:9.5px}
  #htb td:nth-child(5),#htb td:nth-child(8),#htb td:nth-child(9),#htb td:nth-child(10){display:none}
  /* 邓迪 7-20"太挤":移动端去掉 TOKENS 后的 share% 和 VOLUME 的 EST 标签(桌面保留) */
  #htb .shr,#htb td:nth-child(7) .est{display:none}
  /* 供应商榜 #ptb(rk,name,cov,offers,wins,uptime,ttft,prec,ev)：单行 rk|name|coverage|uptime */
  #ptb td:nth-child(2){grid-row:1;grid-column:2}#ptb td:nth-child(2)::before{display:none}
  #ptb td:nth-child(3){grid-row:1;grid-column:3;text-align:end;justify-self:end}
  #ptb td:nth-child(6){grid-row:1;grid-column:4;text-align:end;justify-self:end;min-width:48px}
  #ptb td:nth-child(4),#ptb td:nth-child(5),#ptb td:nth-child(7),#ptb td:nth-child(8),#ptb td:nth-child(9){display:none}
  .covwrap{justify-content:flex-end}.covbar{display:none}
  /* 开发者榜 #dtb(rk,name,stars,downloads,forks,repo)：单行 rk|name|stars|downloads */
  #dtb td:nth-child(2){grid-row:1;grid-column:2}#dtb td:nth-child(2)::before{display:none}
  #dtb td:nth-child(3){grid-row:1;grid-column:3;text-align:end;justify-self:end}
  #dtb td:nth-child(4){grid-row:1;grid-column:4;text-align:end;justify-self:end}
  #dtb td:nth-child(5),#dtb td:nth-child(6){display:none}
  /* compute 烘焙表(4 列窄表)：不吃 760px 基础 min-width */
  #compute-root table{min-width:0}
  /* .upd 桌面是 flex 单行,移动窄屏文本被拆成多 flex item+gap 换行乱 → 改文本流自然换行 */
  .upd{display:block;font-size:10.5px;line-height:1.6}
  .upd i{display:inline-block;margin-inline-end:5px;vertical-align:middle}
  /* 详情页(.doc)表格：恢复真表格 + 容器横滑——块状堆叠误伤 /m/ /p/ 的 8 列表 */
  main.doc table{display:table;min-width:640px;width:100%}
  main.doc thead{display:table-header-group}
  main.doc tbody{display:table-row-group}
  main.doc tr{display:table-row;border:0;margin:0;padding:0}
  main.doc th,main.doc td{display:table-cell;padding:8px 10px;font-size:12.5px}
  main.doc td::before{display:none}
  tr.sub{margin:0 10px 10px;display:block}tr.sub td{display:block}table.ptbl{min-width:0}table.ptbl thead{display:none}
  .ep .row{flex-direction:column;gap:5px}.ep .m{min-width:0}
}
@media(prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}

/* ── Router 全宇宙（聚合器榜 待接入 登记）── */

/* ── 供应商服务精度 / 降级徽标 ── */
.prec{display:inline-block;font-weight:700;font-size:11px;letter-spacing:.02em;padding:2px 7px;border-radius:5px;font-variant-numeric:tabular-nums}
/* 量化降级标从实底贴纸→浅底深字标注(语义保留,视觉降噪;与徽章同语法) */
.prec.deg{color:oklch(44% 0.15 28);background:oklch(93.5% 0.045 28);box-shadow:inset 0 0 0 1px oklch(44% 0.15 28/.16)}
.prec.warn{color:oklch(46% 0.1 68);background:oklch(94% 0.055 78);box-shadow:inset 0 0 0 1px oklch(46% 0.1 68/.16)}
:root[data-theme="dark"] .prec.deg{color:oklch(80% 0.11 28);background:oklch(29% 0.06 28)}
.prec.ok{color:var(--acc-ink);background:var(--acc-soft)}
:root[data-theme="dark"] .prec.warn{color:oklch(82% 0.09 75);background:oklch(30% 0.05 75)}

/* 页脚参考链接（Methodology / API 从顶部导航移来） */
.footlinks{display:flex;gap:18px;flex-wrap:wrap}
.footlinks a{color:var(--ink2);font-weight:500}
.footlinks a:hover{color:var(--ink)}

/* 榜单下方"完整榜单 →"链接 */
.tmore{padding:12px 2px 2px;text-align:end}
.tmore a{font-size:13px;font-weight:600;color:var(--acc-ink)}
.tmore a:hover{text-decoration:underline}

/* ══ 动效层（数据活起来：进场/闪色/氛围/画入，全原生零依赖）══ */
@media(prefers-reduced-motion:no-preference){
  /* 榜单行/卡片进场：纯 CSS animation(both 填充)——播完停在 opacity:1 永不卡透明；JS 没跑=无 animation=自然可见(fail-safe) */
  html.js tbody tr.rowh{animation:rowIn var(--t-enter) var(--ease) both}
  @keyframes rowIn{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
  /* 氛围：hero 渐变极慢漂移（一处焦点、长周期、可降级） */
  .hero{background-size:150% 150%;animation:heroDrift 26s var(--ease) infinite alternate}
  @keyframes heroDrift{from{background-position:0% 0%}to{background-position:100% 60%}}
  /* 数字/统计进场淡入 */
  .bstat{opacity:0;animation:statIn .5s var(--ease) forwards}
  @keyframes statIn{to{opacity:1}}
}
/* 变化即闪色再淡回（80% 活感）：入场时数据值闪一下语义色 */
@keyframes flashUp{0%,45%{color:var(--up)}100%{color:inherit}}
@keyframes flashDown{0%,45%{color:var(--down)}100%{color:inherit}}
.mv.pos.flash{animation:flashUp var(--t-flash) var(--ease)}
.mv.neg.flash{animation:flashDown var(--t-flash) var(--ease)}
/* 迷你走势 sparkline：JS 用 stroke-dashoffset 画入 */
.spark{display:inline-block;vertical-align:middle}
.spark path{fill:none;stroke-width:1.6;stroke-linejoin:round;stroke-linecap:round}
.spark .dot{stroke:none}
/* hover 纪律：数据行只改表面色，绝不位移（Linear/Vercel 头号克制点） */
tbody tr.rowh{transition:background var(--t-ui) var(--ease),opacity var(--t-enter) var(--ease),transform var(--t-enter) var(--ease)}
tbody tr.rowh:hover{background:var(--surface2)}
/* 交互反馈统一 150ms 一条曲线 */
.menu a,.tgl,.langbtn,.burger,.tmore a{transition:color var(--t-ui) var(--ease),background var(--t-ui) var(--ease),border-color var(--t-ui) var(--ease)}

/* 动量% + 迷你走势并排 */
.momwrap{display:inline-flex;align-items:center;gap:8px;justify-content:flex-end}
.mv{font-variant-numeric:tabular-nums;font-weight:600}
/* 表格内 %变动配色(CMC 式绿涨红跌)——原规则只在 .brow 生效，表格 td 里也要上色 */
td .mv.pos{color:var(--up)}td .mv.neg{color:var(--down)}td .mv.mut{color:var(--ink3);font-weight:400}td .mv.acc{color:var(--acc-ink)}

/* ══ Apps & Agents 榜(卡片网格) ══ */
.asec{margin-top:30px}
.asec h2{font-family:var(--disp);font-size:18px;font-weight:750;letter-spacing:-.3px;margin-bottom:14px}
.agrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:14px}
.acard{display:block;position:relative;background:var(--surface);border:1px solid var(--line);border-radius:13px;padding:16px;text-decoration:none;color:inherit;box-shadow:var(--shadow);transition:border-color var(--t-ui) var(--ease),box-shadow var(--t-ui) var(--ease)}
.acard:hover{border-color:var(--acc);box-shadow:0 8px 26px -14px rgba(10,143,110,.5)}
.ac-top{display:flex;align-items:center;gap:11px;margin-bottom:10px}
.ac-h{display:flex;flex-direction:column;gap:1px;min-width:0;flex:1}
.ac-h b{font-size:15px;font-weight:650;letter-spacing:-.01em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ac-host{font-family:var(--mono);font-size:11px;color:var(--ink3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ac-grow{font-family:var(--mono);font-size:11.5px;font-weight:700;padding:2px 7px;border-radius:6px}
.ac-grow.pos{color:var(--up);background:color-mix(in srgb,var(--up) 12%,transparent)}
.ac-grow.mut{color:var(--ink3);background:var(--surface2)}
.ac-desc{font-size:12.5px;line-height:1.55;color:var(--ink2);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;min-height:2.9em;margin-bottom:12px}
.ac-foot{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.ac-tok{font-family:var(--mono);font-size:15px;font-weight:750;color:var(--ink);letter-spacing:-.5px}
.ac-tok em{font-style:normal;font-size:10px;font-weight:500;color:var(--ink3);letter-spacing:.3px;text-transform:uppercase}
.ac-req{font-family:var(--mono);font-size:11px;color:var(--ink3)}
.ac-cat{font-family:var(--mono);font-size:9.5px;letter-spacing:.3px;text-transform:uppercase;color:var(--ink3);border:1px solid var(--line2);border-radius:5px;padding:1px 6px}
.asrc{margin:20px 0 0;padding-top:14px;border-top:1px solid var(--line3);font-size:11.5px;line-height:1.7;color:var(--ink3);max-width:78ch}
html.js .acard{animation:rowIn var(--t-enter) var(--ease) both}

/* ══ Compute 页:分节标题 + GPU 云供应商表 ══ */
.csub{font-family:var(--disp);font-size:16px;font-weight:700;letter-spacing:-.2px;color:var(--ink);margin:30px 0 13px}
.csub:first-of-type{margin-top:20px}
.gctbl td.num,.gctbl th{text-align:end}
.gctbl tbody td:first-child,.gctbl th:first-child{text-align:start}
tr.gc-grp td{font-family:var(--mono);font-size:10px;font-weight:700;letter-spacing:.5px;text-transform:uppercase;color:var(--acc-ink);background:var(--acc-soft);padding:7px 16px!important;border-bottom:1px solid var(--line2)}
.gc-best{color:var(--up);font-weight:750}
.gc-t{font-family:var(--mono);font-size:9px;font-weight:700;letter-spacing:.3px;padding:1px 6px;border-radius:5px;margin-inline-start:6px;vertical-align:middle}
.gc-t.live{color:#fff;background:var(--acc)}
.gc-t.hi{color:var(--acc-ink);background:var(--acc-soft)}
.gc-t.rf{color:var(--ink3);background:var(--surface2);border:1px solid var(--line2)}
@media(max-width:820px){tr.gc-grp td{padding:8px 14px!important;border-radius:0}}

/* ══ Compute:每卡供应商报价块(邓迪:供应商列到每个价格下面) ══ */
.gxgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:14px;margin:4px 0 8px}
.gx{background:color-mix(in srgb,var(--ink) 2.5%,var(--surface));border:1px solid var(--line3);border-radius:12px;padding:15px 16px}
.gx-h{display:flex;align-items:baseline;justify-content:space-between;gap:10px;padding-bottom:9px;border-bottom:1px solid var(--line);margin-bottom:5px;flex-wrap:wrap}
.gx-n{font-family:var(--disp);font-size:17px;font-weight:750;letter-spacing:-.3px}
.gx-m{font-family:var(--mono);font-size:11px;color:var(--ink3);white-space:nowrap}
.gx-m b{color:var(--up);font-size:15px;font-weight:750;letter-spacing:-.5px}
.gx-x .gx-h{cursor:pointer;user-select:none}
.gx-x .gx-h:focus-visible{outline:2px solid var(--acc);outline-offset:2px;border-radius:6px}
.gx-cx{display:inline-block;margin-inline-start:6px;color:var(--ink4);font-family:var(--mono);transition:transform var(--t-ui) var(--ease)}
.gx-x.open .gx-cx{transform:rotate(90deg)}
.gx-exp{margin:2px 0 10px;border-top:1px solid var(--line);padding-top:4px}
.gx-rows{display:flex;flex-direction:column}
.gx-r{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:6px 0;font-size:13px;border-bottom:1px solid var(--line3)}
.gx-r:last-child{border-bottom:none}
.gx-s{color:var(--ink2)}
.gx-p{font-family:var(--mono);font-weight:600;font-variant-numeric:tabular-nums;color:var(--ink)}
.gx-r.best .gx-p{color:var(--up);font-weight:750}
.gx-r.best .gx-s{color:var(--ink);font-weight:650}
@media(max-width:820px){.gxgrid{grid-template-columns:1fr}}

/* 待接入行的预估标记(与实测行区分) */
.est{font-family:var(--mono);font-size:9px;font-weight:600;letter-spacing:.3px;text-transform:uppercase;color:var(--ink4);background:var(--surface2);border:1px solid var(--line2);border-radius:4px;padding:1px 4px;margin-inline-start:4px;vertical-align:middle}
tbody tr.prev .rk,tbody tr.prev .sb{color:var(--ink4)}
tbody tr.prev .logo{filter:saturate(.7);opacity:.9}

.rankby{font-family:var(--mono);font-size:11px;color:var(--ink3);margin-top:6px}

/* 中转站如实身份标签 */
.tag-note{display:inline-block;font-family:var(--mono);font-size:9.5px;font-weight:600;letter-spacing:.3px;padding:1px 6px;border-radius:5px;vertical-align:middle;color:var(--acc-ink);background:var(--acc-soft);border:1px solid color-mix(in srgb,var(--acc) 28%,transparent);margin-inline-start:2px}
.tag-note.wlfi{color:#9a6a00;background:#fdf3dc;border-color:#e6c766}
:root[data-theme="dark"] .tag-note.wlfi{color:#e9c26a;background:#2a2310;border-color:#5c4c1e}

/* Models 榜控件：时间窗 + 收藏 */
.heat-controls{display:flex;gap:6px;margin:2px 0 12px}
.seg{font-family:var(--mono);font-size:11.5px;font-weight:600;color:var(--ink2);background:var(--surface);border:1px solid var(--line2);border-radius:7px;padding:5px 11px;cursor:pointer;transition:color var(--t-ui) var(--ease),border-color var(--t-ui) var(--ease),background var(--t-ui) var(--ease)}
.seg:hover{color:var(--ink);border-color:var(--acc)}
.seg.on{color:var(--acc-ink);background:var(--acc-soft);border-color:color-mix(in srgb,var(--acc) 35%,transparent)}
th.wl,td.wl{width:30px;padding-inline-end:0}
.wlb{background:none;border:none;font-size:14px;color:var(--ink4);cursor:pointer;padding:2px 4px;line-height:1;transition:color var(--t-ui) var(--ease),transform var(--t-press) var(--ease)}
.wlb:hover{color:#eab308;transform:scale(1.15)}
.wlb:focus-visible,.seg:focus-visible{outline:2px solid var(--acc);outline-offset:2px}
.wlb.on{color:#eab308}

.vh{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}

/* ── 实时层视觉：ticker 条 / 数据闪烁 / LIVE 徽标 ── */
.ticker{height:0;overflow:hidden;border-bottom:1px solid var(--line3);background:var(--surface2);font-family:var(--mono);font-size:11.5px;color:var(--ink2);white-space:nowrap}
.ticker.on{height:32px}
.tk-track{display:inline-flex;align-items:center;height:32px;animation:tkroll 52s linear infinite}
.ticker:hover .tk-track{animation-play-state:paused}
.tk-seq{display:inline-flex;align-items:center;padding-inline-end:36px}
.tk-seq b{color:var(--ink);font-weight:700;margin:0 3px}
.tk-seq .up{color:var(--up);font-weight:700}.tk-seq .down{color:var(--down);font-weight:700}.tk-seq .mut{color:var(--ink3)}
.tk-sep{margin:0 14px;color:var(--ink4)}
@keyframes tkroll{from{transform:translateX(0)}to{transform:translateX(-50%)}}
html[dir="rtl"] .tk-track{animation-name:tkroll-rtl}
@keyframes tkroll-rtl{from{transform:translateX(0)}to{transform:translateX(50%)}}
@media (prefers-reduced-motion:reduce){.tk-track{animation:none}.ticker.on{overflow-x:auto}}
.hc-flash{animation:hcflash 1.5s var(--ease)}
@keyframes hcflash{0%{background:color-mix(in srgb,var(--acc) 16%,var(--surface))}100%{background:var(--surface)}}
.live-slot{display:none;font-family:var(--mono);font-size:9.5px;font-weight:700;letter-spacing:.5px;color:var(--acc-ink);align-items:center;gap:4px;float:inline-end;cursor:help}
.live-slot.on{display:inline-flex}
.live-dot{width:6px;height:6px;border-radius:50%;background:var(--acc);display:inline-block;animation:pulse 2.4s infinite}
/* 工具条(替代原 phead 大块) */
.board-bar{display:flex;align-items:center;justify-content:space-between;gap:10px;margin:16px 0 10px}
.segs{display:flex;gap:6px}
.bar-r{display:inline-flex;align-items:center;gap:8px;font-size:11px;color:var(--ink3)}
.bar-info{cursor:help;font-size:13px;color:var(--ink4)}
.bar-info:hover,.bar-info:focus-visible{color:var(--acc-ink)}
.agg-spark{vertical-align:middle;margin-inline-start:6px;opacity:.9}
/* 高亮卡文字型数值防溢出(Top mover 长模型名) */
.hc-v{max-width:100%;overflow:hidden;text-overflow:ellipsis}
.hcard{min-width:0}

/* 价格变动 chips(真实事件流) + CMC 式文字变色闪烁 */
.changes{display:flex;align-items:center;gap:8px;margin:14px 0 0;overflow-x:auto;scrollbar-width:none;white-space:nowrap}
.changes::-webkit-scrollbar{display:none}
.chg-lbl{font-family:var(--mono);font-size:9.5px;font-weight:700;letter-spacing:.8px;color:var(--ink3);flex:none}
.chg-chip{display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:600;color:var(--ink2);background:var(--surface);border:1px solid var(--line);border-radius:20px;padding:4px 12px;flex:none;transition:border-color var(--t-ui) var(--ease),color var(--t-ui) var(--ease)}
.chg-chip:hover{border-color:var(--acc);color:var(--ink)}
.chg-chip .up{color:var(--up);font-family:var(--mono);font-weight:700}
.chg-chip .down{color:var(--down);font-family:var(--mono);font-weight:700}
.chg-chip .mut{color:var(--ink3);font-family:var(--mono);font-size:10.5px;font-weight:400}
.tick-rise{animation:tickRise 3s linear forwards}
.tick-fall{animation:tickFall 3s linear forwards}
@keyframes tickRise{0%,40%{color:var(--up)}100%{color:var(--ink)}}
@keyframes tickFall{0%,40%{color:var(--down)}100%{color:var(--ink)}}

/* 真品牌 favicon(collector 抓存本站);加载失败自动移除露出首字母兜底 */
.logo{position:relative;overflow:hidden}
.lgi{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;border-radius:inherit;background:var(--surface)}
tbody tr.prev .logo{filter:none;opacity:1}

/* Volume 柱"数据到达"生长(2026-07-21 全局优化):一次性 450ms reveal=状态反馈非装饰;蜡烛图不加(蜡烛无底部生长语义) */
@media(prefers-reduced-motion:no-preference){
  .volbars rect{transform-box:fill-box;transform-origin:50% 100%;animation:barUp .45s var(--ease) both}
}
@keyframes barUp{from{transform:scaleY(0)}}

/* Router 详情页官网按钮(2026-07-22 邓迪:"都加个官网链接链接到对方主页"——文字链升级为可点按钮) */
.visit-btn{display:inline-flex;align-items:center;gap:4px;background:var(--acc-soft);color:var(--acc-ink);border:1px solid color-mix(in srgb,var(--acc) 25%,transparent);border-radius:7px;padding:3px 12px;font-weight:600;font-size:12.5px;transition:background var(--t-ui) var(--ease)}
.visit-btn:hover{background:color-mix(in srgb,var(--acc) 18%,var(--surface))}

/* 页底排版重构(2026-07-22 echo:"底部排版很奇怪,集中优化"):说明段细线容器+FAQ 精装+footer 收束线——三块从孤岛变成有节奏的收尾 */
.faq{margin:34px 0 0;max-width:680px}
.faq h2{font-family:var(--mono);font-size:10.5px;letter-spacing:.6px;text-transform:uppercase;color:var(--ink3);font-weight:600;margin:0 0 4px}
.faq details{border-bottom:1px solid var(--line3)}
.faq summary{cursor:pointer;list-style:none;display:flex;align-items:center;gap:9px;padding:11px 2px;font-size:13.5px;font-weight:600;color:var(--ink2);transition:color var(--t-ui) var(--ease)}
.faq summary::-webkit-details-marker{display:none}
.faq summary::before{content:"";width:5px;height:5px;border-top:1.6px solid currentColor;border-right:1.6px solid currentColor;transform:rotate(45deg);transition:transform var(--t-ui) var(--ease);flex:none;opacity:.55}
.faq details[open] summary::before{transform:rotate(135deg)}
.faq summary:hover,.faq details[open] summary{color:var(--ink)}
.faq .note{padding:0 2px 13px 14px;margin:0;max-width:66ch}
footer{margin-top:36px;border-top:1px solid var(--line2);background:var(--surface2)}
.foot{padding:18px 0 24px}

/* 模型详情页交互图表(2026-07-22 CMC 式:维度+时间段+十字线) */
.mc-bar{display:flex;justify-content:space-between;align-items:center;gap:10px;margin-bottom:10px;flex-wrap:wrap}
.mc-card{position:relative;padding:14px 14px 8px;touch-action:pan-y}
.mc-tip{position:absolute;top:8px;transform:translateX(-50%);background:var(--ink);color:var(--surface);font-family:var(--mono);font-size:11px;padding:3px 9px;border-radius:6px;pointer-events:none;white-space:nowrap;z-index:5}

/* 实体简介来源标注(AI 生成/认领) */
.bio-src{font-family:var(--mono);font-size:10.5px;color:var(--ink4);margin-top:4px}
.bio-src a{color:var(--acc-ink);text-decoration:underline;text-underline-offset:2px}

/* ── DC-GPU 现货撮合板块（架构 v0.7，2026-07-25）───────────────────────────
   设计合同：无渐变无玻璃无随机 hue；分级徽章沿用 .prec 的 tone-on-tone 配方
   （浅底深字 + inset 1px 边），管制=琥珀警示 / 可担保=品牌绿 / 演示=中性灰。 */
.dctabs{display:flex;flex-wrap:wrap;gap:6px;margin:6px 0 16px}
.dctabs .seg{text-decoration:none}
.dctabs .seg:hover{border-color:color-mix(in srgb,var(--acc) 30%,transparent)}

.dcnote{margin:0 0 10px;padding:11px 14px;border-radius:10px;font-size:13px;line-height:1.6;color:var(--ink2);background:var(--surface);border:1px solid var(--line2)}
.dcnote b{color:var(--ink);font-family:var(--mono);font-size:11px;letter-spacing:.5px;text-transform:uppercase;margin-inline-end:8px}
/* 折叠态（2026-08-01）：合规披露必须在场，但不该把行情表推出手机屏幕。
   标题行永远可见，一点展开全文——折叠是排版决定，不是删减法务口径。 */
details.dcnote>summary{cursor:pointer;list-style:none;display:flex;align-items:center;gap:6px}
details.dcnote>summary::-webkit-details-marker{display:none}
.dcnote-more{font-size:11px;color:var(--ink3);text-decoration:underline;text-underline-offset:2px}
details.dcnote[open] .dcnote-more{opacity:.5}
details.dcnote>div{margin-top:8px}
.dcnote.proto{background:var(--acc-soft);border-color:color-mix(in srgb,var(--acc) 22%,transparent)}
.dcnote.ctrl{background:oklch(96.5% 0.03 78);border-color:oklch(46% 0.1 68/.22)}
:root[data-theme="dark"] .dcnote.ctrl{background:oklch(25% 0.045 68);border-color:oklch(80% 0.09 72/.24)}

.dccls{display:inline-block;font-family:var(--mono);font-weight:700;font-size:10px;letter-spacing:.4px;padding:2px 7px;border-radius:5px;white-space:nowrap}
.dccls.ctrl{color:oklch(46% 0.1 68);background:oklch(94% 0.055 78);box-shadow:inset 0 0 0 1px oklch(46% 0.1 68/.16)}
.dccls.open{color:var(--acc-ink);background:var(--acc-soft);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--acc) 22%,transparent)}
.dccls.demo{color:var(--ink3);background:var(--line3);box-shadow:inset 0 0 0 1px var(--line2)}
:root[data-theme="dark"] .dccls.ctrl{color:oklch(82% 0.1 74);background:oklch(29% 0.05 70)}

.dcbar{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;margin-bottom:10px}
.dcchips{display:flex;flex-wrap:wrap;gap:5px;margin-top:8px}

.dcform{margin:22px 0 8px;background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:0 18px;box-shadow:var(--shadow)}
.dcform summary{cursor:pointer;padding:15px 0;font-weight:700;font-size:14.5px;color:var(--ink)}
.dcform summary::marker{color:var(--acc)}
.dcform[open]{padding-bottom:18px}
.dcgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:11px}
.dcgrid label,.dcwide{display:flex;flex-direction:column;gap:5px;font-size:12.5px;color:var(--ink2)}
.dcwide{margin-top:11px}
.dcgrid input,.dcgrid select,.dcwide textarea{font:inherit;font-size:13.5px;color:var(--ink);background:var(--surface);border:1px solid var(--line2);border-radius:7px;padding:7px 9px}
.dcgrid input,.dcwide textarea{font-family:var(--mono)}
.dcsub{display:flex;align-items:center;gap:12px;margin-top:14px;flex-wrap:wrap}
.dcmsg{font-family:var(--mono);font-size:12px;color:var(--ink3)}
.dcmsg.ok{color:var(--acc-ink)}
.dcmsg.err{color:var(--down)}
/* 选填字段的说明（价格/信用代码）：说清"填了会怎样"，因为公开报价是不可逆的对外披露 */
.dcgrid label small{font-size:11px;line-height:1.5;color:var(--ink4);font-family:var(--sans,inherit)}

/* ── 品类行情表（邓迪 2026-07-31 一档盘口）────────────────────────────
   与既有榜单同一套表格语汇（tcard/tscroll/nm/big/mut），零新颜色 token（DESIGN.md 合同）。 */
.dcboard th.sortable{cursor:pointer;user-select:none;white-space:nowrap}
.dcboard th.sortable:hover{color:var(--ink)}
.dcboard th.sortable.on{color:var(--acc-ink)}
.dcboard td .big{font-variant-numeric:tabular-nums;letter-spacing:-.2px}
.dcbar .bt{margin:0;font-size:15px;font-weight:700;color:var(--ink)}
/* ── 行情表展开：买单/卖单双栏（邓迪 2026-08-01「用两种背景颜色区分」）──
   买单=绿系（要货的钱在等着），卖单=琥珀系（货在等着买家）。
   两侧用**底色**而不是只用文字标签区分：手机上一屏看不全，颜色是唯一能瞬间辨向的信号。 */
.dcb-row{cursor:pointer}
.dcb-row:hover{background:var(--line3)}
.dcb-caret{display:inline-block;font-size:10px;color:var(--ink3);transition:transform .15s}
.dcb-row.on .dcb-caret{transform:rotate(90deg);color:var(--acc-ink)}
.dcb-detail>td{padding:0!important;background:var(--line3)}
.dcb-two{display:grid;grid-template-columns:1fr 1fr;gap:14px;padding:14px}
.dcb-col h3{margin:0 0 8px;font-size:12.5px;font-weight:700;letter-spacing:.02em;color:var(--ink2)}
.dcord{border-radius:10px;padding:10px 12px;margin-bottom:8px;cursor:pointer;border:1px solid transparent}
.dcord.bid{background:oklch(96.5% .035 155);border-color:oklch(52% .11 155/.2)}
.dcord.ask{background:oklch(96.5% .04 78);border-color:oklch(50% .1 68/.2)}
:root[data-theme="dark"] .dcord.bid{background:oklch(25% .05 155);border-color:oklch(75% .1 155/.22)}
:root[data-theme="dark"] .dcord.ask{background:oklch(25.5% .05 70);border-color:oklch(80% .09 72/.22)}
.dcord:hover{border-color:var(--acc)}
.dcord-h{display:flex;align-items:center;gap:6px;font-family:var(--mono);font-size:11.5px;color:var(--ink2)}
.dcord-qty{margin-inline-start:auto;color:var(--ink3)}
.dcord-p{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;margin-top:4px}
.dcord-unit{font-size:17px;font-weight:800;letter-spacing:-.3px;color:var(--ink);font-variant-numeric:tabular-nums}
.dcord-unit small{font-size:10.5px;font-weight:500;color:var(--ink3);margin-inline-start:2px}
.dcord-total{font-size:12px;color:var(--ink2)}
.dcord-total b{font-variant-numeric:tabular-nums}
.dcord-w{font-size:12px;color:var(--ink3);margin-top:2px}
/* 详情默认收起，点卡片展开（邓迪「每个单应该可以点进去看详情」）—— 两级信息层次，不一次糊一屏 */
.dcord-d{display:none;margin-top:8px;padding-top:8px;border-top:1px solid var(--line2)}
.dcord.open .dcord-d{display:block}
.dcord-d .dcrow{padding:3px 0;font-size:12px}
@media(max-width:760px){.dcb-two{grid-template-columns:1fr}}
/* 单据独立页：同一张卡片放大成主体（复用双栏里的配色语义，不另造一套视觉） */
.dcrow-lk{color:inherit;text-decoration:none}
.dcrow-lk:hover{color:var(--acc-ink);text-decoration:underline;text-underline-offset:2px}
.dcord-doc{max-width:720px}          /* 一条单是"单据"，桌面上要有版心，不跟着 1800px 宽屏摊开 */
.dcord-page{cursor:default;padding:18px 20px;margin:8px 0 18px}
.dcord-page:hover{border-color:transparent}
.dcord.bid.dcord-page{border-color:oklch(52% .11 155/.28)}
.dcord.ask.dcord-page{border-color:oklch(50% .1 68/.28)}
.dcord-title{margin:6px 0 2px;font-size:26px;font-weight:800;letter-spacing:-.5px;color:var(--ink)}
.dcord-title small{font-size:14px;font-weight:600;color:var(--ink3);margin-inline-start:6px}
.dcord-page .dcord-unit{font-size:30px}
.dcord-cap{font-size:12px;font-weight:600;color:var(--ink3);margin-inline-start:8px;padding:1px 6px;border:1px solid var(--line);border-radius:5px}
.dcord-page .dcord-total{font-size:14px}
.dcord-page .dcord-d{display:block}
.dcord-h a{color:inherit;text-decoration:underline;text-underline-offset:2px}
.dcord-h a:hover{color:var(--acc-ink)}

/* 未登录时的发布入口（邓迪：注册才能提交，就不用显示表单占这么大面积） */
.acjoin{padding:4px 0 12px}
.acjoin p{margin:0 0 10px;font-size:13px;line-height:1.7;color:var(--ink2);max-width:64ch}

/* 自选芯片（我的账号页）：一眼扫完，不做成又一个表格 */
.wlchips{display:flex;flex-wrap:wrap;gap:8px}
.wlchip{display:inline-flex;align-items:center;gap:4px;padding:4px 10px;border-radius:20px;border:1px solid var(--line2);font-size:12.5px;color:var(--ink2);background:var(--surface)}
.wlchip:hover{border-color:var(--acc);color:var(--ink)}
/* 认领指引里的路径与令牌行：必须能整段选中复制，且不撑破卡片 */
code.mono{font-family:var(--mono);font-size:11.5px;background:var(--line3);padding:2px 6px;border-radius:4px;word-break:break-all}

.dccalc{margin-top:10px}
.dcout{margin-top:14px;border-top:1px solid var(--line);padding-top:10px}
.dcrow{display:flex;align-items:baseline;justify-content:space-between;gap:14px;padding:5px 0;font-size:13px;color:var(--ink2)}
.dcrow b{font-variant-numeric:tabular-nums;letter-spacing:-.2px;color:var(--ink)}
.dcrow.tot{border-top:1px solid var(--line2);margin-top:6px;padding-top:9px}
.dcrow.tot b{font-size:17px;font-weight:800;color:var(--acc-ink)}

@media (max-width:820px){
  .dctabs{gap:5px}
  .dcgrid{grid-template-columns:1fr 1fr}
  .dcnote{font-size:12.5px}
}

/* 发布求购 = 板块第一动作（邓迪 2026-07-26"先做求购信息发布"）：默认展开、置顶、绿框强调 */
.dcform.prime{border-color:color-mix(in srgb,var(--acc) 30%,transparent);background:var(--acc-soft);margin:0 0 18px}
.dcform.prime summary{color:var(--acc-ink);font-size:15.5px}
.dcform.prime .dcgrid input,.dcform.prime .dcgrid select,.dcform.prime .dcwide textarea{background:var(--surface)}

/* ── 账号层（架构 v0.8，2026-07-29）───────────────────────────────────────────
   零新增颜色字面量：状态徽章沿用 tone-on-tone 配方（浅底深字 + inset 1px 边），
   但颜色全部引用既有变量。.dccls 是合规语义 / .prec 是量化精度语义，两者按 DESIGN.md
   合同不得挪作状态标注，故另起 .acst —— 复用语法，不复用语义。 */
.acnav{text-decoration:none;white-space:nowrap;max-width:15ch;overflow:hidden;text-overflow:ellipsis}
.dcgrid.acone{grid-template-columns:1fr}           /* 登录/注册表单单列（认证表单纵向读，不做两列网格） */
.acauth .segs{margin-bottom:16px}
.acalt{margin-top:13px;font-size:12.5px;color:var(--ink3)}
.acalt a{color:var(--acc-ink);text-decoration:underline;text-underline-offset:2px}
.acjoin{margin-top:14px;padding-top:13px;border-top:1px solid var(--line3)}
.acjoin>p{font-size:12px;line-height:1.6;color:var(--ink3);margin-bottom:9px;max-width:70ch}
.acwhy{display:block;white-space:normal;font-size:11px;line-height:1.5;color:var(--ink3);max-width:36ch;margin-top:2px}
.acst{display:inline-block;font-family:var(--mono);font-weight:700;font-size:10px;padding:2px 7px;border-radius:5px;white-space:nowrap}
.acst.pending{color:var(--ink2);background:var(--line3);box-shadow:inset 0 0 0 1px var(--line2)}
.acst.active{color:var(--acc-ink);background:var(--acc-soft);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--acc) 22%,transparent)}
.acst.rejected{color:var(--down);background:color-mix(in srgb,var(--down) 10%,var(--surface));box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--down) 20%,transparent)}
.acst.expired,.acst.withdrawn{color:var(--ink4);background:var(--line3);box-shadow:inset 0 0 0 1px var(--line3)}

/* ── 云算力落地成本页（spec v1.0）：主数字是"跑完这个活儿多少钱"，牌价降为副行 ── */
.cjob{margin:4px 0 14px}
.cjob-l{font-size:12px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--ink3);margin:12px 0 6px}
.c-basis{margin:2px 0 10px;line-height:1.7}
.cix{margin:0 0 20px}
.cgrp{padding:0;margin:0 0 30px}   /* 全局 section{padding:22px 0 30px} 会在组间叠出一大块空白 */
.cgrp .csub{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;margin:0 0 10px}
.cgrp-w{font-size:12.5px;font-weight:500;color:var(--ink3)}
.ctab{border:1px solid var(--line);border-radius:12px;overflow:hidden;background:var(--surface)}
.crow+.crow{border-top:1px solid var(--line3)}
.crow-h{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:12px 16px;cursor:pointer}
.crow-h:hover{background:var(--surface2)}
.crow-n{display:flex;align-items:center;gap:7px;flex-wrap:wrap;min-width:0}
.crow-s{font-family:var(--mono);font-size:12px;color:var(--ink3);white-space:nowrap}
.crow-r{display:flex;align-items:baseline;gap:8px;white-space:nowrap}
.crow-p{font-size:19px;font-weight:800;letter-spacing:-.3px;font-variant-numeric:tabular-nums}
.crow-lo{font-size:11.5px;color:var(--ink3);font-variant-numeric:tabular-nums}
.crow-d{display:none;padding:2px 16px 14px;border-top:1px dashed var(--line3)}
.crow.open .crow-d{display:block}
.crow.open .gx-cx{transform:rotate(90deg)}
.cb{display:flex;gap:10px;padding:5px 0;font-size:12px;align-items:baseline}
.cb>span{color:var(--ink3);min-width:78px;flex:none}
.cb code{font-size:11.5px;color:var(--ink2);word-break:break-word}
.cref{margin-top:10px}
.cref>summary{cursor:pointer;font-size:12.5px;color:var(--ink3);padding:6px 2px;list-style:none}
.cref>summary::-webkit-details-marker{display:none}
.cref>summary:hover{color:var(--acc-ink)}
.cref>summary::before{content:"▸ ";}
.cref[open]>summary::before{content:"▾ ";}
@media(max-width:640px){
  .crow-h{flex-wrap:wrap;gap:6px}
  .crow-s{white-space:normal;flex-basis:100%}
  .crow-r{margin-inline-start:auto}
}
