:root { --bg:#0f1115; --panel:#171a21; --fg:#e6e6e6; --muted:#8a93a3; --accent:#5b9dff; --line:#262b34; }
* { box-sizing: border-box; }
body { margin:0; background:var(--bg); color:var(--fg);
  font:15px/1.6 -apple-system,"Segoe UI",Roboto,"Noto Sans CJK SC",sans-serif; }
header { display:flex; align-items:center; gap:24px; padding:12px 24px;
  background:var(--panel); border-bottom:1px solid var(--line); }
.brand { font-weight:700; font-size:18px; color:var(--fg); text-decoration:none; }
nav a, nav span { margin-right:16px; color:var(--fg); text-decoration:none; }
nav a:hover { color:var(--accent); }
/* 下拉菜单 */
.menu { position:relative; display:inline-block; }
.menu-top { cursor:default; padding-bottom:12px; }
.menu:hover .menu-top { color:var(--accent); }
.menu-drop { display:none; position:absolute; top:100%; left:0; margin:0;
  background:var(--panel); border:1px solid var(--line); border-radius:8px; padding:6px; min-width:130px; z-index:20; }
.menu:hover .menu-drop { display:block; }
.menu-drop a { display:block; margin:0; padding:7px 12px; border-radius:6px; white-space:nowrap; }
.menu-drop a:hover { background:var(--bg); color:var(--accent); }
main { max-width:1100px; margin:0 auto; padding:24px; }
footer { text-align:center; padding:24px; }
.muted { color:var(--muted); }
a { color:var(--accent); }
h1 { font-size:22px; }

.cards { display:grid; grid-template-columns:repeat(auto-fill,minmax(220px,1fr)); gap:16px; margin-top:20px; }
.card { background:var(--panel); border:1px solid var(--line); border-radius:10px; padding:18px; }
.card.off { opacity:.55; }
.btn { display:inline-block; margin-top:8px; padding:6px 12px; background:var(--accent);
  color:#fff; border-radius:6px; text-decoration:none; }

.search { margin:12px 0 20px; display:flex; gap:8px; }
.search input { flex:1; padding:8px 12px; background:var(--panel); border:1px solid var(--line);
  border-radius:6px; color:var(--fg); }
.search button { padding:8px 16px; background:var(--accent); color:#fff; border:0; border-radius:6px; cursor:pointer; }
.filters { display:flex; gap:18px; margin:0 0 16px; align-items:center; color:var(--muted); font-size:13px; }
.filters select { margin-left:6px; padding:5px 8px; background:var(--panel); border:1px solid var(--line);
  border-radius:6px; color:var(--fg); }
.senti { margin-top:4px; color:#c8a96a; font-size:12px; }

table { width:100%; border-collapse:collapse; }
th, td { text-align:left; padding:8px 10px; border-bottom:1px solid var(--line); vertical-align:top; }
th { color:var(--muted); font-weight:500; font-size:13px; }
.nowrap { white-space:nowrap; }
/* 播客/视频列表:摘要是主内容(放宽 + 加大字号),标的收敛到窄列并换行,别把摘要挤没 */
td.summary { color:var(--muted); font-size:14px; max-width:640px; width:55%; line-height:1.65; }
td.tickers { max-width:180px; white-space:normal; }
.tag.more { color:var(--muted); }
tr.failed { opacity:.5; }

.tag { display:inline-block; margin:0 4px 2px 0; padding:1px 7px; font-size:12px;
  background:#1e2733; border:1px solid var(--line); border-radius:4px; text-decoration:none; }
/* 招聘中介打标(猎头 / 招聘网站):低调琥珀色,区别于普通机构 tag */
.tag.rec { color:#f0b866; border-color:#5a4326; background:#2a2114; }
/* 公寓小区打标(低调橙色小 badge,对齐 muted 风格) */
.apt-badge { display:inline-block; padding:0 6px; font-size:11px; line-height:16px; border-radius:4px;
  color:#e7a34b; background:#2a2113; border:1px solid #5c4a23; vertical-align:middle; white-space:nowrap; }
/* 薪酬裁决 v6 行徽记(印刷空行/空行声明冲突/漂移嫌疑);琥珀=提示、bad 红=要人核 */
.rbadge { display:inline-block; margin-right:6px; padding:0 6px; font-size:11px; line-height:17px;
  border-radius:4px; color:#e7c463; background:#2a2114; border:1px solid #5a4326;
  vertical-align:middle; cursor:help; }
.rbadge.bad { color:#ff8a8a; background:#2a1414; border-color:#5c2a2a; }

/* YouTube 源徽章(低调红,区别于 RSS 播客源)+ 集详情的研报附件列表 */
.yt-badge { display:inline-block; padding:0 6px; font-size:11px; line-height:16px; border-radius:4px;
  color:#e86f6f; background:#2a1616; border:1px solid #5c2a2a; vertical-align:middle; white-space:nowrap; }
.att-list { margin:6px 0 0; padding-left:20px; }
.att-list li { margin:3px 0; }
.status { font-size:12px; padding:1px 7px; border-radius:4px; }
.status.done { color:#7ee0a2; } .status.failed { color:#ff8a8a; }
.status.summarized,.status.translated,.status.transcribed,.status.downloaded,.status.new { color:var(--muted); }

.box { background:var(--panel); border:1px solid var(--line); border-radius:8px; padding:12px 16px; margin:16px 0; }
.meta { margin-top:-6px; }
.md { line-height:1.8; }
.md h2 { font-size:18px; border-bottom:1px solid var(--line); padding-bottom:6px; margin-top:28px; }
.md p { margin:8px 0; }
th .sorth { color:var(--muted); text-decoration:none; }
th .sorth:hover { color:var(--accent); }

/* 公司情报 (company_intel) */
.freshness { font-size:12px; margin:-4px 0 16px; }
.ok { color:#7ee0a2; }
.fit { color:#ffcf5b; font-weight:600; }
.filters label { color:var(--muted); }
tr.fitrow td { background:rgba(255,207,91,.06); }
table.bars td { border-bottom:0; padding:3px 10px; }
.bar { display:inline-block; height:11px; background:var(--accent); border-radius:2px;
  vertical-align:middle; min-width:2px; margin-right:6px; }

/* 进度看板 */
.rm-legend { margin:8px 0 20px; }
.rm-badge { display:inline-block; padding:2px 9px; border-radius:10px; font-size:12px; margin-right:8px; border:1px solid var(--line); white-space:nowrap; }
.rm-badge.done  { color:#7ee0a2; border-color:#2c5a3f; }
.rm-badge.doing { color:#e7c463; border-color:#5c4f23; }
.rm-badge.plan  { color:var(--muted); }
.rm-line { margin-bottom:22px; }
.rm-line h2 { font-size:17px; border-bottom:1px solid var(--line); padding-bottom:6px; }
.rm-table { width:100%; border-collapse:collapse; }
.rm-table td { padding:7px 10px; border-bottom:1px solid var(--line); vertical-align:top; }
.rm-st { width:92px; white-space:nowrap; }
.rm-name { font-weight:500; width:300px; }
.rm-note { font-size:13px; }
tr.rm-plan .rm-name { color:var(--muted); font-weight:400; }
.rm-badge.blocked { color:#ff8a8a; border-color:#5c2a2a; }

/* ── 待办看板 v1(/roadmap 顶部):按「卡在谁手里」分组 ── */
.bl-wrap { margin-bottom:26px; }
.bl-head { display:flex; align-items:baseline; gap:12px; }
.bl-wip { display:flex; flex-wrap:wrap; align-items:center; gap:14px; margin:12px 0 18px;
  padding:10px 14px; background:var(--panel); border:1px solid var(--line); border-radius:8px;
  border-left:3px solid var(--accent); }
.bl-wip-k { font-size:11px; font-weight:700; letter-spacing:.05em; color:var(--accent);
  text-transform:uppercase; }
.bl-wip-i { font-size:13px; color:var(--fg); }
.bl-wip-i b { color:var(--accent); margin-right:3px; }
.bl-wip-i em { color:#ff8a8a; font-style:normal; font-size:12px; }
.bl-grid { display:grid; grid-template-columns:repeat(auto-fit,minmax(240px,1fr)); gap:14px; }
.bl-col { background:var(--panel); border:1px solid var(--line); border-radius:10px; padding:12px 14px;
  border-top:3px solid var(--line); }
.bl-learn  { border-top-color:#e7c463; }
.bl-decide { border-top-color:#c98af0; }
.bl-verify { border-top-color:#5b9dff; }
.bl-run    { border-top-color:#7ee0a2; }
.bl-col-h { display:flex; align-items:center; justify-content:space-between; }
.bl-col-t { font-size:15px; font-weight:600; }
.bl-col-n { font-size:12px; color:var(--muted); background:var(--bg); border:1px solid var(--line);
  border-radius:10px; padding:1px 9px; }
.bl-col-d { font-size:11px; margin:2px 0 10px; }
.bl-card { padding:8px 0; border-top:1px solid var(--line); }
.bl-card:first-of-type { border-top:0; }
.bl-card-t { font-size:13px; font-weight:500; line-height:1.45; }
.bl-card-m { font-size:12px; margin-top:2px; line-height:1.5; }
.bl-card-l { font-size:11px; margin-top:3px; opacity:.7; }
.bl-card.bl-due { border-left:2px solid #ff8a8a; padding-left:8px; margin-left:-10px; }
.bl-st { display:inline-block; font-size:10px; padding:0 6px; border-radius:8px; margin-left:4px;
  vertical-align:middle; border:1px solid var(--line); }
.bl-st.doing  { color:#7ee0a2; border-color:#2c5a3f; }
.bl-st.queued { color:var(--muted); }
.bl-duebadge { display:inline-block; font-size:10px; padding:0 6px; border-radius:8px; margin-left:4px;
  vertical-align:middle; color:var(--muted); border:1px solid var(--line); }
.bl-duebadge.soon { color:#ff8a8a; border-color:#5c2a2a; }
.bl-frozen { margin-top:16px; }
.bl-frozen > summary { cursor:pointer; font-size:14px; font-weight:600; padding:8px 0;
  border-top:1px solid var(--line); }
.bl-frozen > summary .muted { font-weight:400; font-size:12px; }
.bl-frozen-body { display:grid; grid-template-columns:repeat(auto-fit,minmax(260px,1fr)); gap:8px;
  margin-top:8px; }
.bl-fz { font-size:12px; padding:6px 10px; background:var(--panel); border:1px solid var(--line);
  border-radius:6px; opacity:.72; }
.bl-fz-t { font-weight:500; }
.bl-fz-m { display:block; font-size:11px; margin-top:2px; }
.bl-fz-l { display:block; font-size:10px; margin-top:2px; }
.bl-sep { border:0; border-top:1px solid var(--line); margin:8px 0 20px; }

/* CCASS 持仓 */
.subnav { display:flex; gap:6px; margin:12px 0 18px; flex-wrap:wrap; }
.subnav a { padding:5px 12px; border:1px solid var(--line); border-radius:6px; font-size:13px;
  color:var(--fg); text-decoration:none; background:var(--panel); }
.subnav a:hover { border-color:var(--accent); }
.subnav a.on { background:var(--accent); color:#fff; border-color:var(--accent); }
.ccform { display:flex; gap:16px; align-items:center; flex-wrap:wrap; margin:0 0 16px;
  background:var(--panel); border:1px solid var(--line); border-radius:8px; padding:12px 16px; }
.ccform label { color:var(--muted); font-size:13px; }
.ccform input[type=text], .ccform input[type=date] { padding:5px 8px; background:var(--bg);
  border:1px solid var(--line); border-radius:5px; color:var(--fg); margin-left:4px; }
.ccform button { padding:6px 16px; background:var(--accent); color:#fff; border:0; border-radius:6px; cursor:pointer; }
table.num td, table.num th { text-align:right; padding:6px 10px; border-bottom:1px solid var(--line); white-space:nowrap; }
table.num th { color:var(--muted); font-weight:500; font-size:13px; }
table.num .l { text-align:left; white-space:normal; }
table.num tr.sub td { font-weight:600; border-top:1px solid var(--line); }
table.num td.up { color:#7ee0a2; } table.num td.dn { color:#ff8a8a; }
table.num tr:hover td { background:rgba(91,157,255,.05); }
.chip-todo { padding:5px 12px; border:1px dashed var(--line); border-radius:6px; font-size:13px; color:var(--muted); }
.pager { display:flex; gap:16px; align-items:center; margin:16px 0; }
.pager a { padding:6px 14px; border:1px solid var(--line); border-radius:6px; text-decoration:none; background:var(--panel); }
.pager a:hover { border-color:var(--accent); }
.pager .off { padding:6px 14px; color:var(--line); }
.chips { display:flex; flex-wrap:wrap; gap:8px; margin:8px 0 20px; }
.chips .chip { padding:6px 12px; border:1px solid var(--line); border-radius:16px; font-size:13px;
  background:var(--panel); text-decoration:none; color:var(--fg); }
.chips .chip:hover { border-color:var(--accent); color:var(--accent); }
/* 薪酬人审 */
main.wide { max-width:min(1800px, 96vw); }
.paydoc-grid { display:grid; grid-template-columns:minmax(0,2.2fr) minmax(320px,1fr); gap:18px; align-items:start; }
.paydoc-img { overflow:auto; max-height:calc(100vh - 70px); position:sticky; top:12px;
  cursor:grab; background:var(--bg); border:1px solid var(--line); border-radius:8px; padding:8px; }
.paydoc-img.grabbing { cursor:grabbing; }
.paydoc-pages img { display:block; width:calc(100% * var(--pz,1)); max-width:none;
  border:1px solid var(--line); border-radius:6px; margin-bottom:10px;
  user-select:none; -webkit-user-drag:none; }
.paydoc-zoom { position:sticky; top:0; z-index:3; display:flex; align-items:center; gap:6px;
  padding:8px; margin:-8px -8px 8px; background:var(--panel); border-bottom:1px solid var(--line); }
.paydoc-zoom .zbtn { min-width:30px; height:28px; padding:0 8px; font-size:16px; line-height:26px;
  cursor:pointer; background:var(--bg); color:var(--fg); border:1px solid var(--line); border-radius:5px; }
.paydoc-zoom .zbtn:hover { border-color:var(--accent); color:var(--accent); }
.paydoc-zoom .zbtn.reset { font-size:13px; }
.paydoc-zoom .zlvl { font-size:12px; color:var(--muted); min-width:42px; text-align:center; }
.paydoc-tbl input.agreed { background:rgba(126,224,162,.08); border-color:#2c5a3f; }
.paydoc-tbl input.disp { background:rgba(231,196,99,.08); border-color:#5c4f23; }
.paydoc-tbl input[type=text] { padding:4px 6px; background:var(--bg); border:1px solid var(--line); border-radius:4px; color:var(--fg); }
@media (max-width:900px){ .paydoc-grid{ grid-template-columns:1fr; } }
/* 设计文档渲染 */
.doc-layout { display:grid; grid-template-columns:230px 1fr; gap:28px; align-items:start; }
.doc-toc { position:sticky; top:16px; }
.doc-toc-inner { max-height:88vh; overflow:auto; border:1px solid var(--line); border-radius:8px; padding:12px; background:var(--panel); }
.doc-toc .toc { list-style:none; padding:0; margin:0; font-size:12px; }
.doc-toc .toc ul { list-style:none; padding-left:12px; margin:2px 0; }
.doc-toc .toc li { margin:3px 0; }
.doc-toc a { color:var(--muted); text-decoration:none; }
.doc-toc a:hover { color:var(--accent); }
.doc-md { min-width:0; line-height:1.7; }
.doc-md h1 { font-size:24px; margin:.2em 0 .6em; }
.doc-md h2 { font-size:20px; border-bottom:1px solid var(--line); padding-bottom:5px; margin:1.4em 0 .6em; }
.doc-md h3 { font-size:16px; margin:1.2em 0 .5em; }
.doc-md h4 { font-size:14px; color:var(--muted); margin:1em 0 .4em; }
.doc-md p, .doc-md li { font-size:14px; }
.doc-md a { color:var(--accent); }
.doc-md code { background:#1e2733; padding:1px 5px; border-radius:4px; font-size:12.5px;
  font-family:"SFMono-Regular",Consolas,"Liberation Mono",monospace; }
.doc-md pre { background:#11161d; border:1px solid var(--line); border-radius:8px; padding:14px;
  overflow:auto; font-size:12.5px; line-height:1.5; }
.doc-md pre code { background:none; padding:0; }
/* mermaid 客户端渲染出的 SVG:宽图自己横向滚,不撑破正文栏 */
.doc-md .mermaid { margin:14px 0; overflow-x:auto; text-align:center; }
.doc-md .mermaid svg { max-width:100%; height:auto; }
/* 图点击放大:正文栏里的图缩得看不清细节 —— 悬停给 zoom-in + 右上角提示,点开进 lightbox。
   只有渲染成功的图挂 .mermaid-zoomable(失败还原成 <pre> 的不挂),样式全认这个类。 */
.doc-md .mermaid-zoomable { position:relative; cursor:zoom-in; border-radius:8px; }
.doc-md .mermaid-zoomable:hover { background:#141821; }
.mermaid-zoom-hint { position:absolute; top:6px; right:8px; padding:1px 7px; font-size:11px;
  color:var(--muted); background:var(--panel); border:1px solid var(--line); border-radius:4px;
  opacity:0; transition:opacity .12s; pointer-events:none; }
.doc-md .mermaid-zoomable:hover .mermaid-zoom-hint { opacity:1; }

/* mermaid 全屏放大层(纯 JS,不引库):遮罩 + 滚轮缩放 + 拖拽平移 */
.mmlb { position:fixed; inset:0; z-index:200; background:rgba(8,10,14,.96); }
.mmlb[hidden] { display:none; }
.mmlb-stage { position:absolute; inset:0; display:flex; align-items:center; justify-content:center;
  overflow:hidden; cursor:grab; }
.mmlb-stage.dragging { cursor:grabbing; }
.mmlb-canvas { transform-origin:50% 50%; will-change:transform;
  background:var(--bg); border-radius:8px; }   /* mermaid 的 svg 是透明底,不垫一层会透出正文 */
/* 克隆出来的 svg 不在 .doc-md 下,但 mermaid 会写 inline max-width —— 这里一并解开 */
.mmlb-canvas svg { display:block; max-width:none !important; }
.mmlb-bar { position:absolute; top:12px; right:16px; z-index:1; display:flex; align-items:center; gap:8px; }
.mmlb-btn { padding:4px 10px; font-size:12px; color:var(--fg); background:var(--panel);
  border:1px solid var(--line); border-radius:6px; cursor:pointer; }
.mmlb-btn:hover { color:var(--accent); border-color:var(--accent); }
.mmlb-close { font-size:16px; line-height:1; padding:2px 9px; }
.mmlb-zoom { font-size:12px; color:var(--muted); min-width:46px; text-align:right; }
.doc-md table { width:100%; border-collapse:collapse; margin:12px 0; font-size:13px; }
.doc-md th, .doc-md td { border:1px solid var(--line); padding:6px 10px; text-align:left; vertical-align:top; }
.doc-md th { background:var(--panel); color:var(--fg); }
.doc-md blockquote { border-left:3px solid var(--accent); margin:12px 0; padding:4px 14px;
  color:var(--muted); background:rgba(91,157,255,.05); border-radius:0 6px 6px 0; }
.doc-md ul, .doc-md ol { padding-left:22px; }
/* 提示框:引用块以「补充 / 勘误 / 疑 / 读数告警」粗体开头时换色(mdrender._callouts 挂类)。
   读书笔记里这几类混在正文中最容易被略过,颜色区分「我加的 / 书里错的 / 拿不准 / 先看」 */
.doc-md blockquote.callout { color:var(--fg); }
.doc-md blockquote.callout-note    { border-left-color:#5b9dff; background:rgba(91,157,255,.07); }
.doc-md blockquote.callout-erratum { border-left-color:#f08a8a; background:rgba(240,138,138,.08); }
.doc-md blockquote.callout-doubt   { border-left-color:#f0b866; background:rgba(240,184,102,.08); }
.doc-md blockquote.callout-warn    { border-left-color:#f0b866; background:rgba(240,184,102,.08); }
.doc-md blockquote.callout-note    > p:first-child > strong:first-child { color:#8ab4f0; }
.doc-md blockquote.callout-erratum > p:first-child > strong:first-child { color:#f08a8a; }
.doc-md blockquote.callout-doubt   > p:first-child > strong:first-child,
.doc-md blockquote.callout-warn    > p:first-child > strong:first-child { color:#f0b866; }
.doc-md li > blockquote { margin:6px 0; }
.doc-md a.pdfref { font-size:12px; color:var(--muted); text-decoration:none; white-space:nowrap;
  border:1px solid var(--line); border-radius:4px; padding:0 5px; margin:0 2px; }
.doc-md a.pdfref:hover { color:var(--accent); border-color:var(--accent); }
@media (max-width:900px){ .doc-layout{ grid-template-columns:1fr; } .doc-toc{ position:static; } }
.tkr { font-family:"SFMono-Regular",Consolas,monospace; font-size:12px; font-weight:600; text-decoration:none; white-space:nowrap; }

/* handoff 跟踪页 */
.ho-snap p { margin:6px 0; }
.ho-k { display:inline-block; width:56px; color:var(--muted); font-size:12px; font-weight:600; vertical-align:top; }
.ho-next { color:#e7c463; }
.ho-progress { display:flex; align-items:center; gap:10px; margin:14px 0 22px; flex-wrap:wrap; }
.ho-bar { flex:0 0 220px; height:8px; background:var(--line); border-radius:4px; overflow:hidden; }
.ho-bar span { display:block; height:100%; background:#7ee0a2; }
.ho-prio { width:34px; white-space:nowrap; }
.prio { display:inline-block; padding:1px 6px; border-radius:4px; font-size:11px; font-weight:600; border:1px solid var(--line); }
.prio.P0 { color:#ff8a8a; border-color:#5c2a2a; }
.prio.P1 { color:#e7c463; border-color:#5c4f23; }
.prio.P2 { color:var(--muted); }

/* 求职工作台 (jobs) */
.src { display:inline-block; font-size:12px; padding:1px 7px; border-radius:4px;
  border:1px solid var(--line); color:var(--muted); white-space:nowrap; }
.src.jobspy { color:#7ec3ff; border-color:#2a4a6b; }
.src.search_jobsdb { color:#c9a6ff; border-color:#453567; }
.src.scrape_website { color:#7ee0a2; border-color:#2c5a3f; }
.fam { display:inline-block; margin:0 4px 2px 0; padding:1px 7px; font-size:12px;
  color:#e7c463; border:1px solid #5c4f23; border-radius:4px; white-space:nowrap; }
.desc-snip { color:var(--muted); font-size:12.5px; margin-top:2px; }
.gap-hi { color:#ff8a8a; border-color:#5c2a2a; }
pre.jd { white-space:pre-wrap; word-break:break-word; background:var(--panel);
  border:1px solid var(--line); border-radius:8px; padding:14px;
  font-family:inherit; font-size:13.5px; line-height:1.7; }
.chips .chip-on { background:var(--accent); color:#fff; border-color:var(--accent); }

/* ── 知识库口径标注 ────────────────────────────────────────────────────
   这些文档是演进中的草稿,存疑条目必须一眼可见。三档配色:
   红=文档明说不可引用、琥珀=待核实、蓝=判断非事实(与 .tag.rec 同色系) */
.kflag { display:inline-block; margin:0 4px 2px 0; padding:1px 7px; font-size:12px;
         border:1px solid var(--line); border-radius:10px; white-space:nowrap; }
.kflag-blocked  { color:#f08a8a; border-color:#5a2626; background:#2a1414; }
.kflag-pending  { color:#f0b866; border-color:#5a4326; background:#2a2114; }
.kflag-judgment { color:#8ab4f0; border-color:#26405a; background:#141d2a; }
.kflag-status   { color:var(--muted); }

/* 正文内的标记词高亮:只描关键词,不整行涂色 —— 表格里整行涂会糊成一片 */
.kflag-hl { background:#3a2a12; color:#f0b866; padding:0 3px; border-radius:3px; }

.kflag-box { border:1px solid var(--line); border-radius:8px; background:var(--panel);
             margin:0 0 18px; padding:10px 14px; }
.kflag-box > summary { cursor:pointer; font-size:13px; }
.kflag-body { margin-top:10px; border-top:1px solid var(--line); padding-top:10px; }
.kflag-group { margin:0 0 12px; }
.kflag-group-head { margin:0 0 4px; }
.kflag-list { list-style:none; padding:0; margin:0; font-size:12px; line-height:1.6; }
.kflag-list li { margin:3px 0; padding-left:10px; border-left:2px solid var(--line); }
.kflag-caveat   { color:#9aa4b2; border-color:#2f3540; background:#1b1f26; }

/* ── 文档两层分组(/docs/)──────────────────────────────────────────────
   上组「给人读」(架构/设计/投研/知识库)、下组「Claude 记录文档」(reports)。
   来源徽记只给两端上色:架构=蓝(与 .kflag-judgment 同系,是「现状」文档)、
   记录文档=暗灰(按次追加的过程台账,不该抢眼);其余来源沿用 .tag 默认灰。 */
.docgroup { margin:0 0 34px; }
.docgroup-h { font-size:16px; margin:0 0 2px; padding-bottom:6px; border-bottom:1px solid var(--line); }
.docgroup-desc { font-size:12.5px; margin:0 0 10px; }
.tag-src { white-space:nowrap; }
.tag-src-architecture { color:#8ab4f0; border-color:#26405a; background:#141d2a; }
.tag-src-reports { color:var(--muted); background:#161a20; }

/* ══ 事件追踪页(/events/…)═══════════════════════════════════════════
   四面板长页:章节锚 + 状态徽章 + 来源层级徽章 + JSON 原文块。
   徽章配色沿用 roadmap 的三态语义(done 绿 / doing 黄 / plan 灰)。 */
.ev-h { font-size:17px; border-bottom:1px solid var(--line); padding-bottom:6px;
  margin:30px 0 12px; scroll-margin-top:14px; }
.ev-st { display:inline-block; padding:1px 8px; border-radius:10px; font-size:11px;
  border:1px solid var(--line); white-space:nowrap; color:var(--muted); }
.ev-st.done  { color:#7ee0a2; border-color:#2c5a3f; }
.ev-st.doing { color:#e7c463; border-color:#5c4f23; }
.ev-tier { display:inline-block; margin-right:5px; padding:0 6px; border-radius:4px;
  font-size:10px; line-height:16px; border:1px solid var(--line); white-space:nowrap; }
.ev-tier.t1 { color:#7ee0a2; border-color:#2c5a3f; }   /* 一级=官方/监管文件 */
.ev-tier.t2 { color:#e7c463; border-color:#5c4f23; }   /* 二级=转载/聚合站 */
.ev-tier.t3 { color:#ff8a8a; border-color:#5c2a2a; }   /* 推算/估/制度值 */
.ev-tl td { vertical-align:top; }
.ev-tl tr.ev-past td { opacity:.72; }
.ev-excl td { opacity:.6; }
.ev-grid { display:grid; grid-template-columns:repeat(auto-fit,minmax(320px,1fr));
  gap:16px; align-items:start; margin-bottom:16px; }
.ev-gaps { font-size:12.5px; line-height:1.85; padding-left:22px; max-width:960px; }
.ev-gaps li { margin-bottom:8px; }
.ev-sev { display:inline-block; margin-right:6px; padding:0 6px; border-radius:4px;
  font-size:10px; line-height:16px; border:1px solid var(--line); }
.ev-sev-hi  { color:#ff8a8a; border-color:#5c2a2a; }
.ev-sev-mid { color:#e7c463; border-color:#5c4f23; }
.ev-sev-lo  { color:var(--muted); }
.ev-json { background:var(--panel); border:1px solid var(--line); border-radius:8px;
  padding:12px 14px; margin-top:8px; max-height:60vh; overflow:auto;
  font-size:11.5px; line-height:1.6; white-space:pre; }

/* ══ 移动端全局壳 P0 ═══════════════════════════════════════════════════
   约束:桌面端(>768px)零视觉变化。所以本节只有两类东西 ——
   ① 全新 class .nav-toggle 的桌面隐藏规则;② @media (max-width:768px) 块。
   既有规则的既有声明一行未改。 */

/* ☰ 开关:桌面端不存在,只在窄屏出现 */
.nav-toggle { display:none; }

@media (max-width:768px){
  /* ── header 收成一行:brand 左、☰ 右;nav 靠 flex-wrap 折到第二行 ── */
  header { flex-wrap:wrap; gap:0; padding:10px 12px; }
  .brand { flex:1; }
  .nav-toggle { display:block; padding:3px 10px; font-size:20px; line-height:1.3;
    background:transparent; color:var(--fg); border:1px solid var(--line);
    border-radius:6px; cursor:pointer; }
  .nav-toggle:hover { border-color:var(--accent); color:var(--accent); }

  /* ── 抽屉:默认收起,.nav-open 时全宽纵向面板,超高可滚 ── */
  nav { display:none; flex-basis:100%; max-height:70vh; overflow-y:auto;
    -webkit-overflow-scrolling:touch; margin-top:8px; padding-top:6px;
    border-top:1px solid var(--line); }
  header.nav-open nav { display:block; }

  /* 直链纵向堆叠(nav 的直接子 a,不含 .menu-drop 里的) */
  nav > a { display:block; margin:0; padding:9px 4px; border-bottom:1px solid var(--line); }

  /* ── .menu 组:触屏没有 hover,组名降级成 muted 标签,组内链接常驻展开 ──
     不做手风琴 —— 全展开 + 抽屉自身滚动,是小屏最不容易点错的形态 */
  .menu { display:block; position:static; margin:0; }
  .menu-top { display:block; margin:0; padding:12px 4px 3px;
    color:var(--muted); font-size:12px; letter-spacing:.05em; }
  .menu:hover .menu-top { color:var(--muted); }   /* 压掉桌面的 hover 变色 */
  .menu-drop { display:block; position:static; margin:0; padding:0 0 0 14px;
    background:none; border:0; border-radius:0; min-width:0; }
  .menu-drop a { padding:8px 4px; border-radius:0; white-space:normal;
    border-bottom:1px solid var(--line); }
  .menu-drop a:hover { background:none; }

  /* ── 表格横向滚动兜底:CCASS/求职这类十几列 nowrap 表不再撑破页面 ──
     display:block 后窄表会收缩到内容宽,小屏可接受;
     .life-tablebox 之类自带滚动壳的双重包裹无害 */
  table { display:block; overflow-x:auto; -webkit-overflow-scrolling:touch; }

  /* ── 间距 ── */
  main { padding:16px 12px; }
  h1 { font-size:19px; }
}

/* ══ 移动端 薪酬人审裁决页(pay_doc / pay_verify_doc)═══════════════════
   小屏「分屏钉 PDF」:上半屏 sticky 钉住文档图,下半屏独立滚董事卡 ——
   裁定必须对着 PDF 填,上下滚来滚去找原文是这页小屏最大的痛点。
   约束同上:既有行不动,新增只进 @media 块或全新 class。 */

/* 工具条的触屏文案:桌面不显示(全新 class,不影响既有元素) */
.zhint-touch { display:none; }

@media (max-width:768px){
  /* 网格改块流 —— sticky 需要一个「正常流」参照才能钉在上半屏;
     900px 那档只改了 grid-template-columns,到这档直接退成块布局更稳 */
  .paydoc-grid { display:block; }

  /* 上半屏钉 PDF。高度做成变量:手感不合适只改这一处 */
  .paydoc-img { --paydoc-mh:42vh; position:sticky; top:0; z-index:5;
    max-height:var(--paydoc-mh); margin-bottom:14px;
    -webkit-overflow-scrolling:touch; }

  /* 缩放按钮提到 44px 触控标准;按钮变大后允许工具条换行 */
  .paydoc-zoom { flex-wrap:wrap; gap:8px; }
  .paydoc-zoom .zbtn { min-width:44px; height:44px; padding:0 10px;
    font-size:18px; line-height:42px; }
  .paydoc-zoom .zbtn.reset { font-size:14px; }

  /* 提示文案换触屏口径:触屏没有 Ctrl+滚轮,缩放只能走 ± 按钮 */
  .zhint-mouse { display:none; }
  .zhint-touch { display:inline; }

  /* 裁定值 / personID 输入框:size=9 在小屏太窄难点中;
     字号 16px 顺带压掉 iOS 聚焦时的自动放大 */
  .paydoc-tbl input[type=text] { min-width:88px; padding:7px 8px; font-size:16px; }
}

/* ── 收藏夹 ★(详情页标题旁的 fav_star 宏 + /favorites 列表页) ──────────────
   按钮初始是 disabled,由 fav.js 拉到状态才点亮;收藏表未建就一直停在禁用态。 */
.fav-widget { display:inline-flex; align-items:center; gap:8px; vertical-align:middle;
  font-size:13px; font-weight:400; }
.fav-star { background:none; border:0; padding:0; line-height:1; cursor:pointer;
  font-size:20px; color:#ffcf5b; }
.fav-star.off { color:var(--muted); }
.fav-star[disabled] { cursor:default; opacity:.45; }
.fav-note { display:inline-flex; align-items:center; gap:6px; }
.fav-note-text { color:var(--muted); cursor:pointer; border-bottom:1px dashed var(--line); }
.fav-note-text.empty { border-bottom:0; color:var(--accent); }
.fav-note input, .fav-note-cell input { background:var(--bg); color:var(--fg);
  border:1px solid var(--line); border-radius:6px; padding:4px 8px; font-size:12px;
  min-width:240px; }
.fav-note .btn, .fav-note-cell .btn { margin:0 0 0 6px; padding:3px 9px; font-size:12px; }
.fav-note-cell { cursor:pointer; }
.fav-drop { background:none; border:1px solid var(--line); color:var(--muted);
  margin:0; padding:3px 9px; font-size:12px; cursor:pointer; }
.fav-drop:hover { color:#e0503f; border-color:#e0503f; }

/* ── 线进度看板(spec-lines-board v0.1):在 .bl-* 四列基础上加 外部 / 无阻塞 两列 + 卡片徽标 ── */
.bl-external { border-top-color:#ff8a8a; }
.bl-none     { border-top-color:var(--muted); }
.ln-waitbar a.bl-wip-i { text-decoration:none; }
.ln-waitbar a.bl-wip-i:hover { color:var(--accent); }
.ln-pend { margin-left:8px; font-size:12px; color:var(--muted); }
.ln-pend b { color:var(--fg); margin-left:2px; }
.ln-tabs { display:flex; flex-wrap:wrap; gap:6px; margin:0 0 12px; }
.ln-card .bl-card-t a { color:var(--fg); text-decoration:none; }
.ln-card .bl-card-t a:hover { color:var(--accent); }
.ln-grp { display:inline-block; font-size:10px; padding:0 6px; border-radius:8px; margin-left:4px;
  vertical-align:middle; color:var(--muted); border:1px solid var(--line); font-weight:400; }
.ln-state { display:inline-block; font-size:10px; padding:0 6px; border-radius:8px; margin-left:4px;
  vertical-align:middle; border:1px solid var(--line); font-weight:400; }
.ln-state.active  { color:#7ee0a2; border-color:#2c5a3f; }
.ln-state.waiting { color:#c98af0; border-color:#4b2f5c; }
.ln-state.paused  { color:#e7c463; border-color:#5c4f23; }
.ln-state.done    { color:var(--muted); }
.ln-k { font-weight:500; color:var(--fg); opacity:.75; margin-right:2px; }
.ln-meta { display:flex; flex-wrap:wrap; gap:4px; align-items:center; opacity:1; }
.ln-age.yellow { color:#e7c463; }
.ln-age.red    { color:#ff8a8a; font-weight:600; }
.ln-card.ln-stale-yellow { border-left:2px solid #e7c463; padding-left:8px; margin-left:-10px; }
.ln-card.ln-stale-red    { border-left:2px solid #ff8a8a; padding-left:8px; margin-left:-10px; }
.ln-badge { display:inline-block; font-size:10px; padding:0 6px; border-radius:8px;
  border:1px solid var(--line); color:var(--muted); white-space:nowrap; }
.ln-badge.yellow { color:#e7c463; border-color:#5c4f23; }
.ln-badge.red    { color:#ff8a8a; border-color:#5c2a2a; }
.ln-badge.warn   { color:#0f1115; background:#e7c463; border-color:#e7c463; font-weight:600; }
.ln-links { margin-top:3px; font-size:11px; display:flex; flex-wrap:wrap; gap:8px; }
.ln-links a { text-decoration:none; }
.ln-recent h2 { font-size:16px; border-bottom:1px solid var(--line); padding-bottom:6px; }
.ln-log td { font-size:13px; }
.ln-when { white-space:nowrap; width:90px; font-size:12px; }
.ln-line { white-space:nowrap; }
.ln-actor { font-size:11px; white-space:nowrap; }
.ln-kind { display:inline-block; font-size:10px; padding:0 6px; border-radius:8px;
  border:1px solid var(--line); color:var(--muted); white-space:nowrap; }
.ln-kind.progress { color:#7ee0a2; border-color:#2c5a3f; }
.ln-kind.state    { color:#5b9dff; border-color:#23405c; }
.ln-kind.decision { color:#c98af0; border-color:#4b2f5c; }
.ln-kind.blocker  { color:#ff8a8a; border-color:#5c2a2a; }
.ln-fields th { width:80px; color:var(--muted); font-weight:500; font-size:13px; }
.bl-fz .ln-card { border-top:0; padding:0; }
/* v0.2:行动优先 / 等你区动作列表 / 空列收起 / 进展≠维护 */
.ln-waitbar { display:block; }
.ln-wait-head { display:flex; flex-wrap:wrap; align-items:center; gap:14px; }
.ln-wait-list { margin:8px 0 0; padding-left:22px; font-size:13px; line-height:1.7; }
.ln-wait-row a { color:var(--fg); font-weight:500; text-decoration:none; }
.ln-wait-row a:hover { color:var(--accent); }
.ln-wait-note { font-size:12px; }
.ln-wait-meta { font-size:11px; margin-left:6px; }
.ln-wait-more > summary { cursor:pointer; font-size:12px; margin-top:4px; }
.ln-toolbar { display:flex; flex-wrap:wrap; align-items:center; justify-content:space-between; gap:8px; margin:0 0 12px; }
.ln-toolbar .ln-tabs { margin:0; }
.ln-allcols { font-size:12px; cursor:pointer; }
.ln-next { font-size:13px; font-weight:500; margin-top:3px; line-height:1.5; }
.ln-sub { font-size:11px; }
.ln-act { display:inline-block; font-size:10px; padding:0 6px; border-radius:8px; vertical-align:middle;
  border:1px solid var(--line); color:var(--muted); font-weight:600; white-space:nowrap; }
.ln-act.decide { color:#c98af0; border-color:#4b2f5c; }
.ln-act.run    { color:#7ee0a2; border-color:#2c5a3f; }
.ln-act.merge  { color:#5b9dff; border-color:#23405c; }
.ln-act.verify { color:#e7c463; border-color:#5c4f23; }
.ln-act.learn  { color:#ff8a8a; border-color:#5c2a2a; }
.ln-pri { display:inline-block; font-size:10px; padding:0 5px; border-radius:8px; margin-left:4px;
  vertical-align:middle; color:#0f1115; background:#ff8a8a; font-weight:700; }
.ln-age.unknown { color:var(--muted); font-style:italic; }
.ln-maint { color:var(--muted); }
.ln-card.ln-stale-unknown { border-left:2px solid var(--line); padding-left:8px; margin-left:-10px; }
.ln-resume { font-size:11px; color:var(--muted); }
.ln-kind.card { color:#8a93a3; border-color:#3a414d; }
.ln-meta .ln-badge { white-space:normal; max-width:100%; }

/* 人物任职页来源徽标(公告 / 年报)+ 未落行裁决标记;p0 写入=绿、p1 核实=默认、p2/p3 冲突/对账=灰 */
.src-badge { display:inline-block; margin:0 4px 2px 0; padding:0 6px; font-size:11px; line-height:17px; border-radius:4px;
  border:1px solid var(--line); background:#1e2733; text-decoration:none; white-space:nowrap; vertical-align:middle; }
.src-badge.ann.p0 { color:#7ee0a2; border-color:#2c5a3f; } .src-badge.ann.p2, .src-badge.ann.p3 { color:var(--muted); }
.src-badge.ar { color:#9ec5ff; border-color:#2b4466; } .src-badge.vd { color:#e7c463; border-color:#5a4326; background:#2a2114; }
.src-badge.stale { color:#ff8a8a; border-color:#5c2a2a; background:#2a1414; }
.src-more { display:inline-block; vertical-align:middle; } .src-more > summary { cursor:pointer; font-size:11px; color:var(--muted); }
.src-judged > summary { cursor:pointer; font-size:13px; color:var(--muted); margin:8px 0; }
