/* 「信息流」页 feed.html 的样式（权威版，2026-10-03 设计席）。
   工程把本文件原样拷到 public/feed.css；改样式改这里，再拷一次。规格正本（该不该放某个元素）在 docs/信息流-markup契约.md。
   来源：设计稿画布「信息流卡面」六块画板（Main / Trade / Social / Pinned / PinnedRead / PinnedEdit）的样式，
   画布外壳（.fd、.lt、{{themeCls}}、固定 390px 宽）已去掉，换成看板的主题机制。
   交易卡与置顶币行的底色 10-03 午改按画板 ShadeE（方案 E 明暗区分：交易卡凹底 --sunk，推文卡浮起的纸 --l1）。
   token 名与值逐字同看板 docs/今天值得看-v10-final.css（看板那份改了 token，这里要跟着改）；
   链色表照抄看板，只放看板链色表里已有的链。
   CSP 若照 watch 页加：本文件不许 @import 别处的样式；字体走 Google Fonts（页面 <link>）。 */

:root{
  box-sizing:border-box;
  padding-top:env(safe-area-inset-top,0px);
  padding-bottom:env(safe-area-inset-bottom,0px);
  --l0:oklch(16% .048 278);
  --l1:oklch(21.5% .052 278);
  --l2:oklch(27% .055 278);
  --l3:oklch(41% .05 278);
  --hair:oklch(100% 0 0/.10);
  --t1:oklch(97% .012 278);
  --t2:oklch(76% .03 278);
  --t3:oklch(58% .032 278);
  --up:oklch(81% .20 152); --down:oklch(72% .23 25);
  --cL:74%; --fL:28.5%; --cfx:.42;
  --s-1:12px; --s0:15px;
  --sans:"Noto Sans SC","PingFang SC","Hiragino Sans GB",system-ui,sans-serif;
  --latin:"Inter","Noto Sans SC","PingFang SC",system-ui,sans-serif;
  /* 本页专有：平台实心标签色（画布 .src.fomo / .src.pump 的色值）与实心块上的字色 --on-solid。
     实心块（清仓胶囊 .dir.clear、平台标签 FOMO/PUMP）上的字：暗色主题用 --l0（深字），亮色主题用白字。
     原因：暗色主题的 --down（72% 明度）与平台色明度高，白字在上面对比约 2.8:1，读不清；深字对比够。
     对比度优先于「白字」的字面说法（设计席 10-03 裁定），同看板 .asof.stale 用 --l0 的做法。
     红色状态条 .st.act 直接用 --l0，理由相同。 */
  --fomo:oklch(78% .17 350); --pump:oklch(80% .14 175);
  --on-solid:var(--l0);
  /* 本页专有：交易卡与置顶币行的「凹底」--sunk，比页面底 --l0 再深一档的中性色（无色相）。
     推文卡 / 资料变动卡（含关注 / 取关资料卡）是浮起的纸（--l1 底 + --hair 边），交易卡是凹下去的底：区分交易与信息靠明暗，不靠色相
     （设计席 10-03 午方案 E，画板 ShadeE；理由见契约第七节 7-1）。 */
  --sunk:oklch(12.5% .04 278);
}
@media (prefers-color-scheme: light){:root:not([data-theme="dark"]){
  --l0:oklch(96.5% .015 85); --l1:oklch(99.2% .008 85); --l2:oklch(100% 0 0); --l3:oklch(87% .02 85);
  --hair:oklch(25% .04 278/.12);
  --t1:oklch(24% .03 278); --t2:oklch(48% .032 278); --t3:oklch(64% .03 278);
  --up:oklch(50% .18 152); --down:oklch(52% .22 25);
  --cL:48%; --fL:94.5%; --cfx:.30;
  --fomo:oklch(55% .21 350); --pump:oklch(50% .12 175);
  --on-solid:#fff;
  --sunk:oklch(93% .014 85);
}}
:root[data-theme="light"]{
  --l0:oklch(96.5% .015 85); --l1:oklch(99.2% .008 85); --l2:oklch(100% 0 0); --l3:oklch(87% .02 85);
  --hair:oklch(25% .04 278/.12);
  --t1:oklch(24% .03 278); --t2:oklch(48% .032 278); --t3:oklch(64% .03 278);
  --up:oklch(50% .18 152); --down:oklch(52% .22 25);
  --cL:48%; --fL:94.5%; --cfx:.30;
  --fomo:oklch(55% .21 350); --pump:oklch(50% .12 175);
  --on-solid:#fff;
  --sunk:oklch(93% .014 85);
}

/* ── 链色表（逐字同看板）────────────────────────────────────
   --c 实色（字/边），--cf 底色。10-03 午起两者只用在链牌 .chain（与 gmgn 悬停色 --c）上，不再给整卡或置顶币行上底色 / 边框（方案 E）。class 恒为 c-<链键>，链键 = 看板 radar 链名（solana / bsc / robinhood …），
   不是听风的 resolved_chain 原值（sol 等）——换算表在契约「链」一节。 */
.ch{--c:oklch(calc(var(--cL) + var(--dl,0%)) var(--ch) var(--h));
    --cf:oklch(calc(var(--fL) + var(--dl,0%) * .25) calc(var(--ch) * var(--cfx)) var(--h))}
.c-solana   {--h:310;--ch:.23}
.c-bsc      {--h:85 ;--ch:.175;--dl:7%;--cfx:.27}
.c-robinhood{--h:258;--ch:.21}
.c-base     {--h:218;--ch:.155;--dl:3%}
.c-hyperevm {--h:185;--ch:.165;--dl:4%}
.c-arc      {--h:58 ;--ch:.16 ;--dl:5%}
.c-stable   {--h:118;--ch:.12}
.c-arbitrum {--h:238;--ch:.13}
.c-ethereum {--h:288;--ch:.13}
.c-ink      {--h:270;--ch:.12}
.c-monad    {--h:325;--ch:.14}
.c-avalanche{--h:340;--ch:.17}
.c-unichain {--h:355;--ch:.19}
.c-none     {--h:278;--ch:.02}
.c-other    {--h:278;--ch:.05}

/* ── 页面 ─────────────────────────────────────────────── */
html{scroll-padding-top:env(safe-area-inset-top,0px)}
*{box-sizing:inherit}
body{margin:0;background:var(--l0);color:var(--t1);font:var(--s0)/1.6 var(--sans);-webkit-font-smoothing:antialiased;overflow-x:hidden}
a{color:inherit;text-decoration:none}
/* hidden 属性必须真藏：.pin .list .ft .st.act 等写了 display，会压过浏览器默认的 [hidden]{display:none}（10-03 上线后实测的 bug）。
   同 watch.css。凡写 display 的容器类都靠这一条，不要删。 */
[hidden]{display:none !important}
/* 手机 390px 优先：两侧 12px；宽屏内容列 640px 居中 */
.page{max-width:640px;margin:0 auto;padding:0 12px 32px}

/* 页头：标题一行（宽屏右端两颗胶囊）+ 三选一筛选 */
.head{display:flex;flex-direction:column;gap:12px;padding:18px 2px 12px}
.head .hrow{display:flex;align-items:center;justify-content:space-between;gap:12px;min-width:0}
.head h1{margin:0;font-size:22px;font-weight:700;letter-spacing:.01em;line-height:1.3}
.head .date{display:flex;align-items:center;gap:8px;flex:none}
/* 到另外两页的胶囊：与看板主 CSS 同名规则（.back / .watch）保持一致，改一边要改另一边 */
.back,.watch{appearance:none;border:1px solid var(--hair);background:var(--l1);color:var(--t2);font:inherit;font-size:var(--s-1);
  padding:5px 13px;border-radius:999px;cursor:pointer;white-space:nowrap}
.back:hover,.watch:hover{background:var(--l2);color:var(--t1)}
.back:focus-visible,.watch:focus-visible{outline:2px solid var(--t2);outline-offset:2px}

.seg{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));background:var(--l1);border:1px solid var(--hair);border-radius:999px;padding:3px}
.seg button{appearance:none;border:0;background:transparent;color:var(--t2);font:600 14px var(--sans);padding:9px 0;border-radius:999px;cursor:pointer;
  -webkit-tap-highlight-color:transparent}
.seg button[aria-pressed="true"]{background:var(--l3);color:var(--t1)}
.seg button:focus-visible{outline:2px solid var(--t2);outline-offset:-2px}

/* ── 状态条：页头下方一行，有才出 ───────────────────────
   .st 中性（不用她动）；.st.act 要她动手 = 看板 .asof.stale 同一种满血告警（--down 实心块），频率低、一亮整页失效。 */
.st{margin:0 0 12px;padding:10px 14px;border-radius:11px;background:var(--l2);color:var(--t1);font-size:14px;line-height:1.5}
.st.act{display:flex;align-items:flex-start;gap:9px;background:var(--down);color:var(--l0);font-size:var(--s0);font-weight:600;padding:13px 16px}
.st.act::before{content:"";width:7px;height:7px;border-radius:50%;background:var(--l0);flex:none;margin-top:9px}

/* ── 时间线 ─────────────────────────────────────────────── */
.list{display:flex;flex-direction:column;gap:8px}
/* 日期分隔：跨日处一行，小字居中、两侧细线 */
.day{display:flex;align-items:center;gap:10px;font:500 12px var(--latin);color:var(--t2);font-variant-numeric:tabular-nums;padding:6px 2px}
.day::before,.day::after{content:"";flex:1;height:1px;background:var(--hair)}
/* 缺口：中性虚线行，不是卡 */
.gap{border:1px dashed var(--l3);border-radius:10px;padding:8px 14px;font-size:13px;line-height:1.5;color:var(--t2);text-align:center}
/* 翻到尽头 */
.end{padding:14px 2px;font-size:13px;color:var(--t2);text-align:center}

/* 未授权态：照抄 watch.css 的 .gate（视觉同源，不另设计）。
   watch.css 用 --r（18px）与 --s1（19px），本文件没有这两个 token，直接写值；watch.css 改了这里跟着改。 */
.gate{background:var(--l1);border:1px solid var(--hair);border-radius:18px;padding:26px 24px}
.gate h2{font-size:19px;margin:0 0 6px}
.gate p{margin:0;color:var(--t2)}

/* 新消息胶囊：sticky 在视口顶部居中，高度 0 不占位、不推挤列表 */
.newbar{position:sticky;top:calc(env(safe-area-inset-top,0px) + 8px);z-index:30;height:0;display:flex;justify-content:center;overflow:visible}
.newbar[hidden]{display:none}
.newpill{appearance:none;border:1px solid var(--hair);background:var(--l1);color:var(--t1);font:600 13px var(--sans);
  padding:7px 16px;border-radius:999px;cursor:pointer;white-space:nowrap;box-shadow:0 6px 20px oklch(0% 0 0/.25);-webkit-tap-highlight-color:transparent}
.newpill:focus-visible{outline:2px solid var(--t2);outline-offset:2px}

/* ── 卡片通则：①卡头 ②关键信息行 ③正文 + 底栏 ───────────── */
.card{background:var(--l1);border:1px solid var(--hair);border-radius:14px;padding:12px 14px;display:flex;flex-direction:column;gap:9px;min-width:0}
/* 新进来的卡：底色从 --l2 过渡回原底色 1.2s（只写 from，终点就是这张卡自己的底色：推文卡 / 资料变动卡回 --l1，交易卡回 --sunk） */
.card.is-new,.ev.is-new{animation:fresh 1.2s ease-out}
@keyframes fresh{from{background:var(--l2)}}

.hd{display:flex;align-items:center;gap:8px;min-width:0}
.av{width:24px;height:24px;border-radius:50%;background:var(--l3);color:var(--t1);font:700 11px var(--latin);display:grid;place-items:center;flex:none;overflow:hidden}
img.av{object-fit:cover;display:block}
.nm{font:600 15px var(--latin);color:var(--t1);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
/* 动作标签 */
.vb{font:500 12px var(--sans);color:var(--t2);border:1px solid var(--hair);border-radius:999px;padding:1px 8px;white-space:nowrap;flex:none}
.tm{margin-left:auto;font:500 12px var(--latin);color:var(--t2);font-variant-numeric:tabular-nums;flex:none}
/* 平台标签（右上角）：X / TRUTH / TG 中性描边；FOMO / PUMP 实心色块 */
.src{font:700 10px var(--latin);letter-spacing:.08em;color:var(--t2);border:1px solid var(--hair);border-radius:5px;padding:2px 5px;flex:none}
.src.fomo{--pf:var(--fomo)}
.src.pump{--pf:var(--pump)}
.src.fomo,.src.pump{background:var(--pf);border-color:var(--pf);color:var(--on-solid)}

/* 链牌（卡头 / 推文币行）：有边框的牌，链色字 + 链色底 */
.chain{font:700 10.5px var(--latin);letter-spacing:.07em;line-height:1.5;color:var(--c);background:var(--cf);
  border:1px solid color-mix(in oklch,var(--c) 32%,transparent);padding:1px 6px;border-radius:5px;white-space:nowrap;flex:none}

/* 被回复 / 被引用的那条：收起时一行灰条（.cl），展开时成块（.rh + .rt + .media） */
.ctx{font-size:13px;line-height:1.5;color:var(--t2);background:var(--l2);border-radius:8px;padding:6px 10px;cursor:pointer;min-width:0;
  -webkit-tap-highlight-color:transparent}
.ctx:focus-visible{outline:2px solid var(--t2);outline-offset:2px}
.ctx b{font-weight:600;color:var(--t2)}
.ctx .cl{display:flex;min-width:0;white-space:nowrap}
.ctx .cs{min-width:0;overflow:hidden;text-overflow:ellipsis}
.ctx .mk{flex:none}
.ctx .rh{font:600 13px var(--latin);color:var(--t2)}
.ctx .rt{margin:0;font-size:14px;line-height:1.6;color:var(--t1);white-space:pre-line;overflow-wrap:anywhere}
.card:not(.is-open) .ctx .rh,.card:not(.is-open) .ctx .rt,.card:not(.is-open) .ctx .media{display:none}
/* 展开态的原推块不是按钮（契约 5-2，设计席 10-03 灯箱）：收起靠底栏「收起」或点正文 */
.card.is-open .ctx{padding:8px 10px;display:flex;flex-direction:column;gap:6px;cursor:auto}
.card.is-open .ctx .cl{display:none}

/* 正文：默认最多 4 行；交易卡（.card.ch）最多 3 行；展开态不限 */
.bd{margin:0;font-size:15px;line-height:1.6;color:var(--t1);white-space:pre-line;overflow-wrap:anywhere;
  display:-webkit-box;-webkit-line-clamp:4;-webkit-box-orient:vertical;overflow:hidden}
.card.ch .bd{-webkit-line-clamp:3}
.card.is-open .bd{display:block;-webkit-line-clamp:none;overflow:visible}
.card.is-open .bd,.card.is-clamped .bd{cursor:pointer}
.bd .at{font-weight:600;color:var(--t2)}

/* 媒体缩略图：64px 方块一排 */
.media{display:flex;gap:6px;flex-wrap:wrap}
.media>*{width:64px;height:64px;border-radius:8px;background:var(--l2);border:1px solid var(--hair);display:grid;place-items:center;font-size:12px;color:var(--t2);flex:none}
.media img{object-fit:cover;display:block}
/* 可点的缩略图（契约 5-6，10-03）：图 = button.thumb 点开灯箱；视频 = a.thumb.vid 去原推。格子外形沿用上面 .media>* 的 64px 方块 */
.thumb{appearance:none;padding:0;margin:0;font:inherit;font-size:12px;color:var(--t2);cursor:pointer;overflow:hidden;
  -webkit-tap-highlight-color:transparent}
.thumb img{width:100%;height:100%;object-fit:cover;display:block}
.thumb:hover{border-color:var(--l3)}
.thumb:focus-visible{outline:2px solid var(--t2);outline-offset:2px}
.thumb.vid{text-decoration:none;white-space:nowrap}
.thumb.vid:hover{color:var(--t1)}

/* ── 灯箱（契约 5-6）────────────────────────────────────────
   深浅主题都用深底（看图要暗场，设计席 10-03）：背景与灯箱里的字、图标、按钮一律用固定值，不用会随主题翻转的 --t* / --l* token。
   z-index 50：高于底栏（40）与新消息胶囊（30）。按钮外形沿用安静胶囊（同 .back / .watch：1px 细边、圆角 999px、12px 字、5px 13px 内边距），颜色换成暗场固定值。 */
.lb{position:fixed;inset:0;z-index:50;background:oklch(10% .02 278/.94);color:#fff;
  opacity:0;transition:opacity .15s ease;-webkit-tap-highlight-color:transparent}
.lb.is-on{opacity:1}
/* 打开时锁住背后页面：JS 给 body 加 .lb-lock 并写 top:-{scrollY}px，关闭后去掉再 scrollTo 回原位置（iOS 上只写 overflow:hidden 锁不住） */
body.lb-lock{position:fixed;left:0;right:0;overflow:hidden}
/* 横向一排、按张吸附：手机左右滑动走原生横向滚动，双指缩放交给浏览器 */
.lb-track{display:flex;width:100%;height:100%;overflow-x:auto;overflow-y:hidden;scroll-snap-type:x mandatory;
  overscroll-behavior:contain;scrollbar-width:none}
.lb-track::-webkit-scrollbar{display:none}
/* 每张：占满安全区内的可视区，图 contain 居中 */
.lb-slide{flex:0 0 100%;height:100%;margin:0;scroll-snap-align:center;scroll-snap-stop:always;display:grid;place-items:center;
  padding:env(safe-area-inset-top,0px) env(safe-area-inset-right,0px) env(safe-area-inset-bottom,0px) env(safe-area-inset-left,0px)}
.lb-slide img{width:100%;height:100%;object-fit:contain;display:block;cursor:zoom-out}
.lb-slide.is-err img{display:none}
.lb-err{display:none;margin:0;font:500 14px var(--sans);color:#fff}
.lb-slide.is-err .lb-err{display:block}
/* 关闭：右上角 44×44，白色描边 × */
.lb-x,.lb-nav{appearance:none;position:absolute;display:grid;place-items:center;padding:0;border:0;color:#fff;cursor:pointer;
  -webkit-tap-highlight-color:transparent}
.lb-x{top:calc(env(safe-area-inset-top,0px) + 6px);right:calc(env(safe-area-inset-right,0px) + 6px);width:44px;height:44px;
  background:none;border-radius:12px}
.lb svg{width:22px;height:22px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
/* 左右箭头：可点区 44×88、贴左右边缘垂直居中、半透明；只在有鼠标的设备显示（手机靠滑动）。
   到第一张 / 最后一张时 JS 给那一侧加 hidden（不循环，设计席 10-03） */
.lb-nav{top:50%;width:44px;height:88px;margin-top:-44px;background:oklch(100% 0 0/.10);display:none}
.lb-nav.prev{left:env(safe-area-inset-left,0px);border-radius:0 12px 12px 0}
.lb-nav.next{right:env(safe-area-inset-right,0px);border-radius:12px 0 0 12px}
.lb-nav:hover{background:oklch(100% 0 0/.18)}
@media (hover:hover) and (pointer:fine){.lb-nav{display:grid}}
/* 计数：底部居中「2 / 4」，白色 70%、13px、等宽数字 */
.lb-n{position:absolute;left:50%;bottom:calc(env(safe-area-inset-bottom,0px) + 18px);transform:translateX(-50%);margin:0;
  font:500 13px var(--latin);color:oklch(100% 0 0/.7);font-variant-numeric:tabular-nums;white-space:nowrap;pointer-events:none}
/* 原图：右下角安静胶囊 */
.lb-orig{position:absolute;right:calc(env(safe-area-inset-right,0px) + 12px);bottom:calc(env(safe-area-inset-bottom,0px) + 12px);
  border:1px solid oklch(100% 0 0/.22);background:oklch(100% 0 0/.08);color:oklch(100% 0 0/.85);font:500 12px var(--sans);
  padding:5px 13px;border-radius:999px;white-space:nowrap;text-decoration:none}
.lb-orig:hover{background:oklch(100% 0 0/.16);color:#fff}
.lb-x:focus-visible,.lb-nav:focus-visible,.lb-orig:focus-visible{outline:2px solid #fff;outline-offset:2px}

/* 底栏按钮 */
.ft{display:flex;align-items:center;gap:16px}
.lk{appearance:none;font:500 13px var(--sans);color:var(--t2);background:none;border:0;padding:4px 0;text-decoration:none;cursor:pointer;-webkit-tap-highlight-color:transparent}
.lk.r{margin-left:auto}
.lk.on{color:var(--t1);font-weight:600}
.lk:focus-visible{outline:2px solid var(--t2);outline-offset:2px;border-radius:4px}

/* ── 币行 / 交易行：一行写完 [方向] 币名 次要数字 …… MC $市值 [gmgn]，只有币名可截断 ── */
.tr{display:grid;grid-template-columns:auto minmax(0,1fr) auto auto;column-gap:10px;align-items:center}
.tr.nd{grid-template-columns:minmax(0,1fr) auto auto}
.tr + .tr{border-top:1px solid var(--hair);padding-top:9px}
/* 方向格 = 持仓标签：建仓 / 再建仓 / 加仓 / 买入 涨色加粗；卖 N% / 减仓 / 卖出 跌色加粗；清仓 = 全行唯一实心块（字色见 :root 的 --on-solid） */
.dir{font:700 14px var(--sans);white-space:nowrap}
.dir.buy{color:var(--up)}
.dir.sell{color:var(--down)}
.dir.view{color:var(--t2)}   /* 置顶区观点行：中性加粗，不借涨跌色 */
.dir.clear{background:var(--down);color:var(--on-solid);border-radius:999px;padding:1px 9px;line-height:1.5;font-size:13px}
.tk{display:flex;align-items:center;gap:8px;min-width:0}
.tk .n{flex:0 1 auto;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font:600 16px var(--latin);letter-spacing:-.01em}
.tk .chain{flex:none}
/* 次要数字：金额 / 合计 / 浮盈 / 倍数 */
.sub{flex:none;white-space:nowrap;font:500 13px var(--latin);color:var(--t2);font-variant-numeric:tabular-nums}
.sub b{color:var(--t1);font-weight:600}
.sub .up{color:var(--up)}
.sub .down{color:var(--down)}
/* 市值 */
.amt{display:flex;align-items:baseline;gap:4px;white-space:nowrap}
.amt b{font:700 17px var(--latin);font-variant-numeric:tabular-nums;letter-spacing:-.01em}
.amt small{font:600 11px var(--latin);letter-spacing:.04em;color:var(--t2)}
/* gmgn / dex 按钮：只有按钮是链接，整卡不是。
   min-width 5em = 「gmgn」按钮的自然宽度（实测约 59px），让「dex」按钮与它同宽、字居中（设计席 10-03）。 */
.btn{font:600 12px var(--latin);background:var(--l2);border:1px solid var(--hair);color:var(--t1);padding:7px 12px;border-radius:999px;
  min-width:5em;text-align:center;
  white-space:nowrap;text-decoration:none;flex:none;transition:background .12s,color .12s,border-color .12s}
.ch .btn:hover{background:var(--c);color:var(--l0);border-color:var(--c)}
.btn:focus-visible{outline:2px solid var(--t2);outline-offset:2px}
.ch .btn:focus-visible{outline-color:var(--c)}

/* 交易卡（方案 E，设计席 10-03 午）：凹底 --sunk、无可见边框（保留 1px 透明边，与纸卡外沿对齐）；不按链填色、不用链色边框。
   链色只留在卡头链牌上（卡上的 ch c-<链键> 只为给链牌与 gmgn 悬停提供 --c / --cf）。卡上 gmgn 底 --l1、边框沿用 .btn 的 --hair。 */
.card.ch{background:var(--sunk);border-color:transparent}
.card.ch .btn{background:var(--l1)}
/* 共识卡：参与者行 + 历史行 */
.who{font-size:12.5px;line-height:1.6;color:var(--t2);overflow-wrap:anywhere}
.who b{color:var(--t1);font-weight:600}
.hist{font:500 12px var(--latin);color:var(--t2);font-variant-numeric:tabular-nums}

/* ── 资料变动之一：其余变动 = 紧凑卡（关注 / 取关改资料卡，见下一段 .prof）──
   外框与普通卡 .card 同源（底 --l1、1px --hair、圆角 14px），不染色；只因没有正文而矮：内边距 10px 14px（设计席 10-03 午）。
   一张一行（最多两行）：头像 24px → .tx（账号名 b → 动作标签 .vb → 对象/内容）→ 时间 → 平台标签。
   长名字宁可截名字，不截动作（设计席 10-03 上线后验收）：账号名（.tx 第一个 b）单独截断、最宽 45%；整行文字最多折 2 行；
   时间与平台标签固定在右侧第一行。行高 24px，与头像同高，头像、时间、平台标签都按第一行对齐（align-items:flex-start）。 */
.ev{background:var(--l1);border:1px solid var(--hair);border-radius:14px;padding:10px 14px;
  display:flex;align-items:flex-start;gap:8px;font-size:14px;line-height:24px;color:var(--t2);min-width:0}
.ev .tx{flex:1 1 auto;min-width:0;overflow-wrap:anywhere;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.ev .tx>b:first-child{display:inline-block;max-width:45%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;vertical-align:top}
/* 动作标签：同卡头 .vb，在 .tx 里随文字排，高度压进 24px 行高 */
.ev .vb{display:inline-block;line-height:18px;vertical-align:top;margin:3px 2px 0}
.ev .tm{line-height:24px}
.ev .src{margin-top:3px}
.ev b{color:var(--t1);font-weight:600}
.ev s{color:var(--t2)}
.ev .mini{width:18px;height:18px;border-radius:50%;background:var(--l3);display:inline-block;vertical-align:-4px;object-fit:cover}
/* 关注 / 取关的对方名 .tgt：10-03 午后关注 / 取关改为资料卡 .prof 后不再使用，待 feed.js 改完后删 .ev .tgt 三条（.ev .tx 的 padding 保留）。
   原注：链接到对方 X 主页（设计席 10-03 午，依据宝儿「能不能直接点击跳转」）。只有它可点，整卡不可点。
   触控区：行内元素上下 padding 7px，不改行高、不撑高卡片；.tx 上下各补 4px 再用负 margin 抵消，免得 overflow:hidden 把第一行上沿的触控区裁掉。 */
.ev .tx{padding:4px 0;margin:-4px 0}
.ev .tgt{color:var(--t1);font-weight:600;padding:7px 0;text-decoration:underline 1px var(--hair);text-underline-offset:3px;
  -webkit-tap-highlight-color:transparent}
.ev .tgt:hover,.ev .tgt:active{color:var(--t2)}
.ev .tgt:focus-visible{outline:2px solid var(--t2);outline-offset:2px;border-radius:3px}

/* ── 资料变动之二：关注 / 取关 = 普通纸卡 .card + X 资料卡 .prof（设计席 10-03 午后，画板 FollowCard）──
   卡头同推文卡（发起者头像 + 名 + .vb 关注/取关 + 时间 + X）；卡体是对方的资料卡，规格见契约 6-1。
   .prof 比纸卡高一档（--l2 底 + --hair 边 + 圆角 12px），像链接自带的展开卡片；横幅 72px，无横幅时 div.bn 同高 --l3 色块；
   头像 48px、上移 24px 压在横幅下沿，2px --l2 描边与卡体底同色；名字 + @handle 一行，只截名字；简介最多 3 行。
   整块不是链接：只有头像 .pav、名字行 .pn、简介里的 @提及可点（契约 6-1）。全部用现有 token，亮暗两套随 token 切换。 */
.prof{background:var(--l2);border:1px solid var(--hair);border-radius:12px;overflow:hidden;display:flex;flex-direction:column;min-width:0}
.prof .bn{display:block;width:100%;height:72px;object-fit:cover;background:var(--l3);flex:none}
.prof .pb{padding:0 12px 12px;display:flex;flex-direction:column;gap:6px;min-width:0}
.prof .pav{display:block;width:48px;height:48px;margin-top:-24px;flex:none;align-self:flex-start;border-radius:50%}
.prof .pav img,.prof .pav span{display:block;width:48px;height:48px;border-radius:50%;border:2px solid var(--l2);background:var(--l3);object-fit:cover}
.prof .pn{display:flex;align-items:baseline;gap:6px;min-width:0}
.prof .pn b{font:600 15px var(--latin);color:var(--t1);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0;flex:0 1 auto}
.prof .pn span{font:400 13px var(--latin);color:var(--t2);white-space:nowrap;flex:none}
.prof .pst{font:400 13px/1.5 var(--sans);color:var(--t2);font-variant-numeric:tabular-nums}
.prof .pst b{color:var(--t1);font-weight:600}
/* 简介：默认译文，底栏「原文」切原文（契约 6-1，沿用推文卡 .lk）；pre-line 保留原换行（契约 6-1） */
.prof .pbio{margin:0;font-size:14px;line-height:1.5;color:var(--t1);white-space:pre-line;overflow-wrap:anywhere;
  display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
.prof .pbio a{color:var(--t1);font-weight:600;text-decoration:none}
.prof a{-webkit-tap-highlight-color:transparent}
.prof a:focus-visible{outline:2px solid var(--t2);outline-offset:2px;border-radius:4px}
.prof .pav:focus-visible{border-radius:50%}

/* ── 交易区置顶「特别关注」（只在「交易」视图）──────────────── */
.pin{background:var(--l1);border:1px solid var(--t2);border-radius:16px;padding:12px;display:flex;flex-direction:column;gap:14px;margin-bottom:12px;min-width:0}
.pin-hd{display:flex;align-items:center;gap:8px;min-width:0;height:24px}
.pin-hd h2{margin:0;font:600 15px var(--sans);color:var(--t1);white-space:nowrap;flex:none}
.since{font:500 13px var(--latin);color:var(--t2);white-space:nowrap;font-variant-numeric:tabular-nums;flex:none}
.acts{margin:-10px -10px -10px auto;display:flex;flex:none}
/* 图标按钮：44px 点按区 */
.ib{appearance:none;width:44px;height:44px;display:grid;place-items:center;background:none;border:0;padding:0;color:var(--t2);cursor:pointer;border-radius:12px;flex:none;
  -webkit-tap-highlight-color:transparent}
.ib svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.ib:focus-visible{outline:2px solid var(--t2);outline-offset:-4px}
.grp{display:flex;flex-direction:column;gap:6px}
.gh{display:flex;align-items:center;gap:8px;min-width:0}
.quiet{margin-left:auto;font:500 13px var(--sans);color:var(--t2);white-space:nowrap;flex:none}
/* 置顶币行：凹底 --sunk（同交易卡，方案 E；置顶框本身仍是浮起的 --l1 + --t2 边），两行（第二行 .meta：笔数 金额 · 相对时间）。
   gmgn 底 --l1、边框沿用 .btn 的 --hair。 */
.tr.pr{background:var(--sunk);border-radius:10px;padding:8px 10px;row-gap:2px}
.tr.pr + .tr.pr{border-top:0;padding-top:8px}
.tr.pr .btn{background:var(--l1)}
.meta{grid-column:2/-1;white-space:nowrap;font:500 12px var(--latin);color:var(--t2);font-variant-numeric:tabular-nums}
.meta b{color:var(--t1);font-weight:600}
.meta .up{color:var(--up)}
.meta .down{color:var(--down)}
/* 置顶观点行第三行：正文（10-03 设计席，依据宝儿「只显示观点 但不显示观点内容」）。
   左缘对齐币名（同 .meta）；与 .meta 间距 4px = 行间 row-gap 2px + margin-top 2px。
   收起态最多 2 行、行尾省略号即提示，不另加「展开」按钮；点正文切 .is-open（JS 规则见契约 8-2）。
   「原文」按钮只在展开态显示，跟在正文末尾。 */
.pt{grid-column:2/-1;margin:2px 0 0;min-width:0;font:400 14px/1.55 var(--sans);color:var(--t1);white-space:pre-line;overflow-wrap:anywhere;
  display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;-webkit-tap-highlight-color:transparent}
.pt.is-open{display:block;-webkit-line-clamp:none;overflow:visible}
.pt.is-clamped,.pt.has-tr{cursor:pointer}
.pt a{color:var(--t2);text-decoration:underline 1px;text-underline-offset:3px;overflow-wrap:anywhere}
.pt a:hover,.pt a:active{color:var(--t1)}
.pt a:focus-visible{outline:2px solid var(--t2);outline-offset:2px;border-radius:3px}
.pt .lk{display:none;margin-left:8px;padding:0;line-height:inherit;vertical-align:baseline}
.pt.is-open .lk{display:inline}
/* 两个以上特别关注钱包买了同一个币：实心反白「N 人」（同看板 .also，中性色，不借链色） */
.both{flex:none;white-space:nowrap;font:600 12px var(--sans);line-height:1.5;padding:1px 10px;border-radius:999px;background:var(--t1);color:var(--l0);letter-spacing:.02em}
/* 窄栏态：本时段无动静（含刚点了已读） */
.pin.is-quiet{flex-direction:row;align-items:center;gap:6px;padding:4px 4px 4px 14px}
.qh{margin:0;font:600 15px var(--sans);color:var(--t1);white-space:nowrap;flex:none}
.qmsg{font:500 13px var(--sans);color:var(--t2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
.pin.is-quiet .ib{margin-left:auto}
/* 管理态 */
.done{appearance:none;margin:-10px -6px -10px auto;min-height:44px;padding:0 6px;background:none;border:0;font:600 15px var(--sans);color:var(--t1);cursor:pointer;flex:none}
.esec{font:600 12px var(--sans);color:var(--t2);letter-spacing:.04em;padding:0 2px}
.elist{display:flex;flex-direction:column;margin-top:-8px}
.er{display:flex;align-items:center;gap:8px;min-height:44px;min-width:0}
.er + .er{border-top:1px solid var(--hair)}
.er .ib{margin:0 -10px 0 auto}
.add{appearance:none;margin-left:auto;font:600 13px var(--sans);color:var(--t1);background:transparent;border:1px solid var(--l3);border-radius:999px;padding:6px 16px;cursor:pointer;white-space:nowrap;flex:none}
.add:focus-visible,.done:focus-visible{outline:2px solid var(--t2);outline-offset:2px}

@media (prefers-reduced-motion: reduce){
  .card.is-new,.ev.is-new{animation:none}
  .btn{transition:none}
  .lb{transition:none}
}

/* ── 页壳之三：页面入口（照抄看板 CSS 与 watch.css 共用的那一段，三边逐字相同） ─────────
   三项：看板 / 我的关注 / 信息流（10-03 起三项；每项 flex:1 等分、指示线跟着各自那一项居中，项数变了不用改布局）。
   窄屏（≤700px）底部固定标签栏；宽屏不显示底栏，入口换成页头胶囊：看板 .watch + .feed、关注页「回看板」+ .feed、信息流页 .back + .watch。
   颜色只用中性 token：当前页 --t1 + 600 字重 + 顶部 2px 指示线（--t1），其余 --t2。
   不用 --note：金色在看板上专指「口径降级」（第三态），导航不借。
   不用 --t3：亮色面上对 --l1 只有约 3.3:1，11px 的字读不清（09-22「灰色的字完全看不清」）。
   z-index 40：高于页面内容（新消息胶囊 30）。 */
.tabbar{display:none}
@media (max-width:700px){
  /* 栏高（09-30 宝儿「栏太高了」，设计会话定）：内容区 44px + 底部留白 max(安全区 − 14px, 6px)。 */
  :root{--tabbar-pad:max(calc(env(safe-area-inset-bottom,0px) - 14px),6px);--tabbar-h:calc(44px + var(--tabbar-pad))}
  /* :root 已有 padding-bottom:env(safe-area-inset-bottom)，body 只补差额，两者合计 = 栏高，最后一行字不被栏盖住 */
  body{padding-bottom:calc(var(--tabbar-h) - env(safe-area-inset-bottom,0px))}
  .page{padding-bottom:32px}
  html{scroll-padding-bottom:var(--tabbar-h)}
  .tabbar{position:fixed;left:0;right:0;bottom:0;z-index:40;display:flex;
    height:var(--tabbar-h);padding-bottom:var(--tabbar-pad);
    background:var(--l1);border-top:1px solid var(--hair)}
  .tabbar a{position:relative;flex:1;min-width:0;display:flex;flex-direction:row;align-items:center;justify-content:center;gap:6px;
    color:var(--t2);font-family:var(--sans);font-size:13px;font-weight:500;line-height:1.2;letter-spacing:.02em;
    -webkit-tap-highlight-color:transparent}
  .tabbar svg{width:20px;height:20px;flex:none;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
  .tabbar a[aria-current="page"]{color:var(--t1);font-weight:600}
  .tabbar a[aria-current="page"]::before{content:"";position:absolute;top:-1px;left:50%;width:28px;height:2px;margin-left:-14px;
    border-radius:0 0 2px 2px;background:var(--t1)}
  .tabbar a:focus-visible{outline:2px solid var(--t2);outline-offset:-4px;border-radius:10px}
  /* 窄屏下页头入口让给底栏 */
  .head .watch,.head .feed,.head .back{display:none}
}
