/* ============================================================================
   照明HOT · 设计系统
   方向：桌面优先的「行业情报台」——中文衬线标题（报头感）+ 无衬线正文 + 等宽数字。
   布局：≥1081px 为「主栏 + 侧栏」双栏（侧栏 sticky）；≤1080px 收成单栏（手机自动适配）。
   配色：4 套调色板 × 明/暗，另有一套**与调色板无关**的分类语义色（标签体系）。
   ========================================================================== */

:root{
  --radius-sm:8px;--radius:12px;--radius-lg:16px;--radius-pill:999px;
  --ease:cubic-bezier(.32,.72,0,1);--ease-out:cubic-bezier(.16,1,.3,1);

  /* 字体：标题走中文衬线（报头/编辑感），正文走无衬线，数字走等宽 */
  --font-display:"Songti SC","Noto Serif SC","Source Han Serif SC","Source Han Serif CN",
                 "STSong",Georgia,"SimSun",serif;
  --font-body:"PingFang SC","HarmonyOS Sans SC","Microsoft YaHei UI","Microsoft YaHei",
              system-ui,-apple-system,"Segoe UI",sans-serif;
  --font-num:ui-monospace,"SF Mono","JetBrains Mono","Cascadia Mono",Consolas,monospace;

  /* 版式：桌面优先，随视口平滑收敛 */
  --w-shell:1200px;
  --w-aside:324px;
  --gap:34px;
  --fs-display:clamp(26px,2.4vw,34px);
  --fs-h2:clamp(16px,1.35vw,18px);
  --fs-title:clamp(16.5px,1.25vw,18.5px);
  --fs-body:15.5px;
  --fs-meta:12.5px;
  --fs-num:13px;
  --pad-card:20px 22px;
}

/* ---------- 中性地基 ----------
   4 套配色**共用同一套中性色**（底色/文字/边框/阴影），只在下面按调色板换「色相」。
   这样换配色不会改变明暗关系与信息层级，也就不会出现「某个配色不耐看」的情况。
   色值刻意避开纯黑纯白（#FFF/#000 长时间阅读偏刺眼）。 */
:root{
  --bg:#F5F6F8;--surface:#FFFFFF;--surface2:#EDEFF3;--surface3:#E2E6EC;
  --text:#171A20;--text2:#5B6472;--text3:#8B94A2;
  --border:#E1E5EB;--border-strong:#C9D0DA;
  --shadow-sm:0 1px 2px rgba(20,26,38,.05);
  --shadow-md:0 8px 22px -10px rgba(20,26,38,.14);
  --shadow-lg:0 18px 44px -16px rgba(20,26,38,.18);
  /* 分类语义色：与调色板解耦，换配色不串味 */
  --c-policy:#0E6E63;--c-policy-bg:#E2F1EE;
  --c-tech:#2F5BD8;--c-tech-bg:#E9EEFB;
  --c-company:#9A5A16;--c-company-bg:#F7EEE1;
  --c-market:#5B4BC4;--c-market-bg:#EFECFA;
  --c-award:#A32B45;--c-award-bg:#F8E9EC;
  --c-opinion:#556070;--c-opinion-bg:#ECEFF3;
}
[data-theme=dark]{
  --bg:#0F1217;--surface:#161A21;--surface2:#1D222B;--surface3:#252B36;
  --text:#E7EAF0;--text2:#9BA5B4;--text3:#66707E;
  --border:#232935;--border-strong:#323A48;
  --shadow-sm:0 1px 2px rgba(0,0,0,.35);
  --shadow-md:0 8px 22px -10px rgba(0,0,0,.55);
  --shadow-lg:0 18px 44px -16px rgba(0,0,0,.65);
  --c-policy:#6ED0BE;--c-policy-bg:#102A28;
  --c-tech:#9BB4F6;--c-tech-bg:#16203A;
  --c-company:#DFAE72;--c-company-bg:#2A2116;
  --c-market:#B3A4EE;--c-market-bg:#1E1A35;
  --c-award:#E88FA3;--c-award-bg:#2E1921;
  --c-opinion:#A6AFBC;--c-opinion-bg:#1D222B;
}

/* ---------- 4 套色相 ----------
   每套只给 accent（主色）/ hot（强调）/ reason 三个变量，明暗各一组。
   取色原则：饱和度压在中低区间，避免霓虹感；深浅两档拉开明度差，保证对比度达标。 */
/* A 晴空蓝（默认）：靛蓝 + 琥珀 */
:root,
[data-palette=a][data-theme=light]{
  --accent:#2F5BD8;--accent-hover:#2649B8;--accent-soft:#E9EEFB;
  --hot:#C2761F;--hot-soft:#FAF0E2;--reason:#1E4FB5;
}
[data-palette=a][data-theme=dark]{
  --accent:#7C9BF0;--accent-hover:#9DB4F5;--accent-soft:#141C33;
  --hot:#E2A85A;--hot-soft:#2B2113;--reason:#8FAAF3;
}
/* B 松绿：青绿 + 陶土 */
[data-palette=b][data-theme=light]{
  --accent:#0E7A6E;--accent-hover:#0A6157;--accent-soft:#E3F2EF;
  --hot:#B4552A;--hot-soft:#FAEEE7;--reason:#0B5B52;
}
[data-palette=b][data-theme=dark]{
  --accent:#5FC7B4;--accent-hover:#86D8C8;--accent-soft:#0D2624;
  --hot:#D98A5C;--hot-soft:#2B1F17;--reason:#6FD0BE;
}
/* C 墨紫：紫罗兰 + 赭 */
[data-palette=c][data-theme=light]{
  --accent:#5B4BC4;--accent-hover:#4A3CA6;--accent-soft:#EFECFA;
  --hot:#B3603E;--hot-soft:#F8EDE8;--reason:#4A3CA6;
}
[data-palette=c][data-theme=dark]{
  --accent:#A08FE8;--accent-hover:#BBAEF0;--accent-soft:#1A1730;
  --hot:#CE8B66;--hot-soft:#2A201A;--reason:#B3A4EE;
}
/* D 暖砂：赭石 + 绛 */
[data-palette=d][data-theme=light]{
  --accent:#A15C1B;--accent-hover:#844A12;--accent-soft:#F9F0E4;
  --hot:#9C2C3C;--hot-soft:#F8E9EC;--reason:#7A4413;
}
[data-palette=d][data-theme=dark]{
  --accent:#DDA45E;--accent-hover:#E8BA80;--accent-soft:#241C10;
  --hot:#D9737F;--hot-soft:#2A1A1E;--reason:#E8BA80;
}

/* ============================ 基础 ============================ */
*{margin:0;box-sizing:border-box}
html{scroll-behavior:smooth}
body{
  background:var(--bg);color:var(--text);
  font:var(--fs-body)/1.72 var(--font-body);
  -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;
  animation:pagein .45s var(--ease-out) both;
}
@keyframes pagein{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
::selection{background:var(--accent-soft);color:var(--accent-hover)}
a{color:inherit}
.wrap{max-width:var(--w-shell);margin:0 auto;padding:0 28px 88px}
.num,.score,.date-count,.awardtable .m,.kpi b,.stamp{font-variant-numeric:tabular-nums}

/* 双栏骨架：桌面主栏 + sticky 侧栏 */
.shell{display:grid;grid-template-columns:minmax(0,1fr) var(--w-aside);gap:var(--gap);align-items:start}
.main{min-width:0}
/* 侧栏：sticky 但不做「内部滚动」。
   侧栏内容（金额榜 + 政策 + 标签）比视口高，若给 max-height + overflow 就会出现
   **藏在内部滚动条后面的第三块**——用户根本注意不到（实测截图才发现）。
   让它自然撑开、随页面一起滚，sticky 仍生效（到底部时自动归位）。 */
.aside{position:sticky;top:96px;display:flex;flex-direction:column;gap:16px;align-self:start}

/* ============================ 顶栏 ============================ */
header.top{
  position:sticky;top:0;z-index:30;
  display:flex;align-items:center;gap:16px;flex-wrap:nowrap;
  padding:14px 0;
  background:color-mix(in srgb,var(--bg) 88%,transparent);
  backdrop-filter:blur(14px) saturate(150%);
  -webkit-backdrop-filter:blur(14px) saturate(150%);
  border-bottom:1px solid var(--border);
  transition:box-shadow .25s var(--ease),border-color .25s var(--ease);
}
header.top.is-stuck{box-shadow:var(--shadow-md);border-color:var(--border-strong)}
header.top h1{
  font-family:var(--font-display);font-size:26px;letter-spacing:.5px;
  font-weight:700;white-space:nowrap;
}
header.top h1 b{
  color:#fff;background:linear-gradient(135deg,var(--accent),var(--accent-hover));
  padding:2px 10px 3px;border-radius:9px;margin-left:3px;font-weight:700;
  font-family:var(--font-body);letter-spacing:1px;font-size:.86em;
}
header.top .sub{color:var(--text2);font-size:var(--fs-meta);white-space:nowrap;padding-left:14px;border-left:1px solid var(--border)}
header.top .spacer{flex:1}
header.top nav{display:flex;gap:2px;align-items:center}
header.top nav a{
  color:var(--text2);text-decoration:none;font-size:13.5px;font-weight:500;
  padding:7px 12px;border-radius:var(--radius-sm);white-space:nowrap;
  transition:color .18s var(--ease),background .18s var(--ease);
}
header.top nav a:hover{color:var(--accent);background:var(--accent-soft)}
header.top nav a.cur{color:var(--accent);font-weight:600;background:var(--accent-soft)}
header.top .tools{display:flex;gap:8px;align-items:center;padding-left:12px;border-left:1px solid var(--border)}
header.top select,header.top button{
  background:var(--surface);border:1px solid var(--border);color:var(--text2);
  border-radius:var(--radius-sm);padding:6px 10px;font-size:12.5px;cursor:pointer;
  font-family:inherit;white-space:nowrap;transition:all .18s var(--ease);
}
header.top select:hover,header.top button:hover{color:var(--accent);border-color:var(--accent)}
header.top select:focus-visible,header.top button:focus-visible{outline:2px solid var(--accent);outline-offset:2px}

/* 顶栏内联搜索（桌面；窄屏移到内容区） */
.hsearch{position:relative;flex:0 1 260px;min-width:150px}
.hsearch input{
  width:100%;padding:7px 12px 7px 32px;border-radius:var(--radius-pill);
  border:1px solid var(--border);background:var(--surface);color:var(--text);
  font-size:13px;font-family:inherit;transition:all .2s var(--ease);
}
.hsearch input::placeholder{color:var(--text3)}
.hsearch input:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}
.hsearch::before{
  content:"";position:absolute;left:11px;top:50%;transform:translateY(-50%);
  width:13px;height:13px;opacity:.55;
  background:currentColor;
  -webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.4' stroke-linecap='round'%3E%3Ccircle cx='11' cy='11' r='7'/%3E%3Cline x1='21' y1='21' x2='16.6' y2='16.6'/%3E%3C/svg%3E") center/contain no-repeat;
  mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.4' stroke-linecap='round'%3E%3Ccircle cx='11' cy='11' r='7'/%3E%3Cline x1='21' y1='21' x2='16.6' y2='16.6'/%3E%3C/svg%3E") center/cover no-repeat;
  color:var(--text3);
}
.hsearch kbd{
  position:absolute;right:9px;top:50%;transform:translateY(-50%);
  font:600 10.5px/1 var(--font-num);color:var(--text3);
  border:1px solid var(--border);border-radius:4px;padding:3px 5px;background:var(--surface2);
}
.hsearch input:focus + kbd{opacity:0}

/* ============================ 页头 / KPI ============================ */
.pagehead{margin:26px 0 22px}
.crumb{font-size:var(--fs-meta);color:var(--text3);letter-spacing:.4px}
.pagehead h2{
  font-family:var(--font-display);font-size:var(--fs-display);font-weight:700;
  letter-spacing:.5px;margin:6px 0 8px;line-height:1.24;
}
.pagehead p{color:var(--text2);font-size:14px;max-width:66ch}
.stamp{font-size:var(--fs-meta);color:var(--text3);margin:2px 0 4px}

/* ============================ 首屏结论条 ============================ */
/* 2026-09-17：第一屏阅读顺序改成「结论 → 数字 → 细节」。读者是公司内部，
   打开就要能拿走一个判断；原先一上来是 40 条卡片并列，10 秒内什么也拿不走。
   结论条的所有数字都由结构化字段拼出，读者能拿原始公告逐条核对——这是它敢放在
   最前面的前提，LLM 生成的内容不能放这个位置。
   环比用 --hot / 中性灰，**不用红绿**：这不是行情，用涨跌配色会把「项目数量变化」
   误读成价格信号。 */
.digest{
  margin:20px 0 0;padding:16px 20px;border-radius:var(--radius);
  background:var(--surface);border:1px solid var(--border);
  border-left:3px solid var(--accent);
}
.dg-line{font-size:var(--fs-h2);font-weight:600;color:var(--text);line-height:1.55;letter-spacing:.2px}
.dg-line b{font-family:var(--font-num);color:var(--accent);font-size:1.08em;margin:0 2px}
.dg-sub{margin-top:7px;font-size:var(--fs-meta);color:var(--text2);line-height:1.7}
.dg-delta{
  display:inline-block;margin-left:10px;padding:1px 9px;border-radius:99px;
  font-size:12px;font-weight:500;vertical-align:2px;
  background:var(--surface2);border:1px solid var(--border);
}
.dg-delta.up{color:var(--hot)}
.dg-delta.down{color:var(--text3)}

.kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin:20px 0 8px}
.kpi{
  background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);
  padding:14px 16px;position:relative;overflow:hidden;
  transition:border-color .2s var(--ease),transform .2s var(--ease);
}
.kpi::after{content:"";position:absolute;inset:0 auto 0 0;width:3px;background:var(--accent);opacity:.75}
.kpi:hover{border-color:var(--border-strong);transform:translateY(-2px)}
.kpi b{display:block;font:700 25px/1.15 var(--font-num);letter-spacing:-.5px;color:var(--text)}
.kpi b small{font-size:12px;font-weight:600;margin-left:3px;color:var(--text2);letter-spacing:0}
.kpi span{display:block;font-size:var(--fs-meta);color:var(--text2);margin-top:5px;letter-spacing:.3px}
.kpi.hot::after{background:var(--hot)}

/* ============================ 章节标题 ============================ */
.secttl,.hotsec h2,.dayhead{
  display:flex;align-items:center;gap:12px;
  font-family:var(--font-body);font-size:var(--fs-h2);font-weight:700;
  letter-spacing:.3px;margin:34px 0 14px;color:var(--text);
}
.secttl::before,.hotsec h2::before,.dayhead::before{
  content:"";width:4px;height:17px;border-radius:2px;background:var(--accent);flex-shrink:0;
}
.secttl::after,.hotsec h2::after,.dayhead::after{
  content:"";flex:1;height:1px;background:linear-gradient(90deg,var(--border),transparent);
}
.secttl .cnt,.dayhead .cnt{font-family:var(--font-num);font-size:12.5px;font-weight:600;color:var(--text3);letter-spacing:0}
.hotsec{margin:8px 0}

/* ============================ 今日必读 ============================ */
.hot{
  display:grid;grid-template-columns:auto minmax(0,1fr);gap:16px;align-items:start;
  padding:18px 20px;background:var(--surface);border:1px solid var(--border);
  border-radius:var(--radius);margin-bottom:12px;position:relative;
  transition:border-color .2s var(--ease),box-shadow .24s var(--ease),transform .24s var(--ease);
}
.hot::before{
  content:"";position:absolute;left:0;top:14px;bottom:14px;width:3px;border-radius:0 3px 3px 0;
  background:var(--accent);opacity:0;transition:opacity .22s var(--ease);
}
.hot:hover{border-color:var(--border-strong);box-shadow:var(--shadow-md);transform:translateY(-2px)}
.hot:hover::before{opacity:1}
.hot .rank{
  font:800 15px/1 var(--font-num);color:#fff;width:32px;height:32px;
  display:flex;align-items:center;justify-content:center;border-radius:10px;
  background:linear-gradient(140deg,var(--hot),color-mix(in srgb,var(--hot) 62%,#000));
  box-shadow:0 4px 12px -3px color-mix(in srgb,var(--hot) 55%,transparent);
}
.hot .rank.top{background:linear-gradient(140deg,var(--accent),var(--accent-hover));
box-shadow:0 5px 16px -4px color-mix(in srgb,var(--accent) 50%,transparent)}
.hot>div{min-width:0}
.hot a.tl{font-family:var(--font-display);font-size:var(--fs-title);font-weight:700;
color:var(--text);text-decoration:none;line-height:1.45;display:block;transition:color .18s var(--ease)}
.hot a.tl:hover{color:var(--accent)}
.hot .mr-meta{display:flex;flex-wrap:wrap;gap:7px;align-items:center;margin-top:9px;
font-size:var(--fs-meta);color:var(--text2)}
.hot .mr-reason{
  margin-top:11px;font-size:13.5px;line-height:1.72;color:var(--text);
  background:var(--accent-soft);border-left:3px solid var(--accent);
  border-radius:0 var(--radius-sm) var(--radius-sm) 0;padding:9px 13px 10px;
}
.hot .mr-reason::before{
  content:"推荐理由";display:block;font-size:10.5px;font-weight:800;
  letter-spacing:1.6px;color:var(--accent);margin-bottom:4px;
}
.hot .mr-reason b{color:var(--accent);font-weight:600}

/* ============================ 标签 / 徽章体系 ============================ */
.badge{
  display:inline-flex;align-items:center;gap:4px;
  background:var(--surface2);border:1px solid var(--border);border-radius:var(--radius-pill);
  padding:2.5px 9px;color:var(--text2);font-size:11.5px;font-weight:500;line-height:1.5;
  white-space:nowrap;
}
.pubdate{color:var(--accent);background:var(--accent-soft);border-color:transparent;font-weight:600}
.score{
  font-family:var(--font-num);font-size:11.5px;font-weight:700;letter-spacing:.2px;
  color:var(--text2);background:var(--surface2);border:1px solid var(--border);
  border-radius:var(--radius-pill);padding:1.5px 9px;
}
/* 高分档用**单一色相**填充。原先 hot→accent 的双色渐变在暖冷对比强的配色下
   中间会发浑（靛蓝→琥珀尤其明显），改成实色 + 轻投影更干净。 */
.score.s85{color:#fff;background:var(--accent);border-color:transparent;
  box-shadow:0 2px 8px -3px color-mix(in srgb,var(--accent) 55%,transparent)}
.score.s70{color:var(--accent);border-color:var(--accent);background:var(--accent-soft)}
.srcs{color:var(--accent);font-size:var(--fs-meta);font-weight:600}
/* 分类标签：颜色由 rules.yaml 的 6 个分类语义色决定 */
.ctag{font-weight:600;border-color:transparent}
.ctag-policy{color:var(--c-policy);background:var(--c-policy-bg)}
.ctag-tech{color:var(--c-tech);background:var(--c-tech-bg)}
.ctag-company{color:var(--c-company);background:var(--c-company-bg)}
.ctag-market{color:var(--c-market);background:var(--c-market-bg)}
.ctag-award{color:var(--c-award);background:var(--c-award-bg)}
.ctag-opinion{color:var(--c-opinion);background:var(--c-opinion-bg)}

/* ============================ 卡片（归档 / 详情 / 时间线） ============================ */
.card{
  background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);
  padding:var(--pad-card);margin-bottom:12px;
  transition:border-color .2s var(--ease),box-shadow .24s var(--ease),transform .24s var(--ease);
}
.card:hover{border-color:var(--border-strong);box-shadow:var(--shadow-md);transform:translateY(-2px)}
.card .meta{display:flex;gap:7px;align-items:center;flex-wrap:wrap;font-size:var(--fs-meta);color:var(--text2)}
.card h3{
  font-family:var(--font-display);font-size:var(--fs-title);font-weight:700;
  margin:10px 0;line-height:1.5;
}
.card h3 a{color:var(--text);text-decoration:none;transition:color .18s var(--ease)}
.card h3 a:hover{color:var(--accent)}
.card .summary{color:var(--text2);font-size:14.5px;line-height:1.78}
.card .reason{
  color:var(--text);font-size:13.5px;font-weight:500;margin-top:12px;line-height:1.7;
  background:var(--accent-soft);border-left:3px solid var(--accent);
  border-radius:0 var(--radius-sm) var(--radius-sm) 0;padding:9px 13px;
}
.reason-label{
  display:inline-block;color:#fff;background:var(--accent);font-style:normal;font-weight:700;
  font-size:11px;margin-right:8px;padding:1px 8px;border-radius:6px;letter-spacing:.4px;
}
.ai-link{display:inline-flex;align-items:center;color:var(--accent);font-size:12.5px;
font-weight:600;text-decoration:none;padding:2px 0}
.ai-link:hover{text-decoration:underline;text-underline-offset:3px}
.tags{margin-top:12px;display:flex;gap:7px;flex-wrap:wrap;align-items:center}
.tags span{
  font-size:11.5px;color:var(--text2);background:var(--surface2);
  border:1px solid var(--border);border-radius:var(--radius-pill);
  padding:2px 10px;cursor:pointer;transition:all .18s var(--ease);
}
.tags span:hover{background:var(--accent);border-color:var(--accent);color:#fff}

/* ============================ 工具栏（筛选 / 搜索 / 更多） ============================ */
.toolbar{display:flex;gap:12px;align-items:center;flex-wrap:wrap;margin:18px 0 14px}
.searchbar{margin:0;position:relative;flex:1 1 260px;min-width:190px}
.searchbar input{
  width:100%;padding:10px 14px 10px 38px;border:1px solid var(--border);
  border-radius:var(--radius);background:var(--surface);color:var(--text);
  font-size:14px;font-family:inherit;transition:all .2s var(--ease);
}
.searchbar input::placeholder{color:var(--text3)}
.searchbar input:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 4px var(--accent-soft)}
.searchbar::before{
  content:"";position:absolute;left:13px;top:50%;transform:translateY(-50%);
  width:14px;height:14px;background:var(--text3);
  -webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.4' stroke-linecap='round'%3E%3Ccircle cx='11' cy='11' r='7'/%3E%3Cline x1='21' y1='21' x2='16.6' y2='16.6'/%3E%3C/svg%3E") center/contain no-repeat;
  mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.4' stroke-linecap='round'%3E%3Ccircle cx='11' cy='11' r='7'/%3E%3Cline x1='21' y1='21' x2='16.6' y2='16.6'/%3E%3C/svg%3E") center/contain no-repeat;
}
.tabs{display:flex;gap:6px;flex-wrap:wrap}
.tabs button,.rtabs button{
  border:1px solid var(--border);background:var(--surface);color:var(--text2);
  border-radius:var(--radius-pill);padding:6px 14px;font-size:13px;cursor:pointer;
  font-family:inherit;font-weight:500;transition:all .18s var(--ease);
}
.tabs button:hover,.rtabs button:hover{color:var(--accent);border-color:var(--accent)}
.tabs button.active,.rtabs button.active{
  background:var(--accent);border-color:var(--accent);color:#fff;font-weight:600;
  box-shadow:0 4px 14px -5px color-mix(in srgb,var(--accent) 60%,transparent);
}
.tabs button:focus-visible,.rtabs button:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.rtabs{margin:12px 0 14px;display:flex;flex-wrap:wrap;gap:7px}
#tlstat{min-height:16px;font-size:var(--fs-meta);color:var(--text3)}
#more{
  display:block;margin:22px auto 0;border:1px solid var(--border);background:var(--surface);
  color:var(--text2);border-radius:var(--radius-pill);padding:11px 40px;font-size:14px;
  cursor:pointer;font-family:inherit;transition:all .2s var(--ease);
}
#more:hover{color:var(--accent);border-color:var(--accent);transform:translateY(-1px);box-shadow:var(--shadow-sm)}
#more:focus-visible{outline:2px solid var(--accent);outline-offset:2px}

/* ============================ 时间线（左侧日期导轨） ============================ */
.timeline{position:relative}
.timeline-day{display:flex;gap:18px;margin-bottom:34px}
.timeline-date{
  width:76px;flex-shrink:0;text-align:right;position:sticky;top:98px;align-self:flex-start;
}
.date-label{font-family:var(--font-display);font-size:16px;font-weight:700;line-height:1.25;letter-spacing:.2px}
.date-week{font-size:11px;color:var(--text3);margin-top:2px}
.date-count{font-size:11px;color:var(--accent);margin-top:5px;font-weight:700}
.timeline-content{flex:1;min-width:0;position:relative;border-left:1px solid var(--border-strong);padding-left:24px}
.timeline-content::before{
  content:"";position:absolute;left:-6px;top:20px;width:11px;height:11px;border-radius:50%;
  background:var(--accent);box-shadow:0 0 0 4px var(--bg);
}
.timeline-item{display:block;margin-bottom:12px;position:relative}
.timeline-item::before{
  content:"";position:absolute;left:-30px;top:24px;width:8px;height:8px;border-radius:50%;
  background:var(--bg);border:2px solid var(--border-strong);transition:border-color .2s var(--ease),transform .2s var(--ease);
}
.timeline-item:hover::before{border-color:var(--accent);transform:scale(1.25)}
.timeline-card-wrap{min-width:0}
.timeline-time{display:none}

/* ============================ 中标表格（3 处共用） ============================ */
.awardwrap{
  overflow:auto;max-height:none;-webkit-overflow-scrolling:touch;
  border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);
}
.awardtable{width:100%;border-collapse:separate;border-spacing:0;font-size:13px}
.awardtable th{
  position:sticky;top:0;z-index:2;text-align:left;padding:11px 12px;
  background:var(--surface2);color:var(--text2);font-weight:700;font-size:11.5px;
  letter-spacing:.6px;border-bottom:1px solid var(--border-strong);white-space:nowrap;
}
.awardtable td{padding:11px 12px;border-bottom:1px solid var(--border);vertical-align:top;line-height:1.6}
.awardtable tbody tr:last-child td{border-bottom:none}
.awardtable.awards{table-layout:fixed;min-width:760px}
.awardtable.awards td.d{color:var(--text3);font:12px/1.6 var(--font-num);white-space:nowrap}
.awardtable.awards td.r{color:var(--text2);font-size:12.5px;white-space:nowrap}
.awardtable.awards td.w{font-weight:600;color:var(--text);word-break:break-word}
.awardtable.awards td.m{
  text-align:right;font:700 13.5px/1.6 var(--font-num);color:var(--accent);white-space:nowrap;
}
.awardtable.awards td.b{color:var(--text2);font-size:12.5px;word-break:break-word}
.awardtable.awards td.p a{
  color:var(--text2);text-decoration:none;transition:color .18s var(--ease);
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;
}
.awardtable.awards td.p a:hover{color:var(--accent)}
.awardtable.awards tbody tr:nth-child(even){background:color-mix(in srgb,var(--surface2) 55%,transparent)}
.awardtable.awards tbody tr:hover{background:var(--accent-soft)}
.awardtable .nil{color:var(--text3);font-weight:400}
/* 「线索行」= 没公示中标金额的条目（2026-09-28）。
   实测 220 条 award 里 38% 落在这类，当它们和已公示条目长得一样时，
   扫一眼看到的是「未公示 / 未公示 / 未公示」连成一片，读者会以为站点坏了。
   弱化之后，**哪些是可决策的结果、哪些只是「有这么个项目」一眼可辨**。 */
.awardtable tbody tr[data-lead] td:not(.p){opacity:.62}
.awardtable tbody tr[data-lead]:hover td{opacity:.85}
.awardtable tbody tr[data-lead] td.p a{color:var(--text2)}
/* 金额列里「是比例不是金额」的值（劳务抽成 64.44% 这类）已在 HTML 侧标 .nil，
   这里再压一档字号与色阶，让它在数字列里一眼看出「不是金额」。 */
.awardtable .m .nil{font-size:12px;letter-spacing:-.2px}
.awardtable.stats th:not(:first-child),.awardtable.stats td:not(:first-child){
  text-align:right;font-variant-numeric:tabular-nums;font-family:var(--font-num);
}
.awardtable.stats td:first-child{font-weight:600}
.awardwrap.stats{max-width:100%}

/* ============================ 中标月报 ============================ */
/* 「含回补」角标（2026-09-28）：标出哪些月的数字来自历史批量补录。
   刻意做成弱化的小字标签而不是醒目徽章——它是**口径说明**不是警告，
   页面主体是「哪个地区在投钱」，这个角标只在读者做跨月比较时起作用。 */
.bfmark{font-size:10.5px;font-weight:400;color:var(--text3);
  border:1px solid var(--border);border-radius:3px;padding:1px 5px;
  margin-left:6px;white-space:nowrap;vertical-align:1px;cursor:help}
.bfdot{display:inline-block;width:5px;height:5px;border-radius:50%;
  background:var(--text3);margin-left:5px;vertical-align:2px}
.mblock{margin-top:18px}
.mhead{display:flex;align-items:baseline;gap:14px;flex-wrap:wrap;margin:0 0 2px}
.mhead h3{font-family:var(--font-display);font-size:19px;font-weight:700;
  letter-spacing:.3px;color:var(--text)}
.mhead .msum{font-family:var(--font-num);font-size:12.5px;color:var(--text2)}
.mgrid{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-top:14px}
.mbox{background:var(--surface);border:1px solid var(--border);
  border-radius:var(--radius);padding:14px 16px;min-width:0}
.mbox h4{font-size:13px;font-weight:700;letter-spacing:.4px;color:var(--text2);
  margin-bottom:10px;display:flex;align-items:center;gap:8px}
.mbox h4::before{content:"";width:3px;height:13px;border-radius:2px;background:var(--accent)}
.mbox h4 .cnt{margin-left:auto;font-size:11px;color:var(--text3);font-weight:400}
.note{margin:12px 0 0;font-size:12px;color:var(--text3);line-height:1.8}
.note strong{color:var(--text2);font-weight:600}
/* 注意：这个 class 同时用在「排名序号」和「月份」两种单元格上，
   所以用 min-width 而不是 width——写死 34px 会把「2026-09」挤成两行（实测踩到）。 */
.awardtable td.no{color:var(--text3);font:12px/1.6 var(--font-num);
  white-space:nowrap;min-width:34px}
.awardtable td.w{font-weight:600;color:var(--text);word-break:break-word}
@media(max-width:980px){.mgrid{grid-template-columns:1fr}}
/* 金额条：让「量级」一眼可比 */
.amtbar{display:inline-block;height:5px;border-radius:3px;background:var(--accent);opacity:.32;
vertical-align:middle;margin-right:8px;min-width:2px}

/* ============================ 侧栏卡片 ============================ */
.panel{
  background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);
  padding:16px 18px;
}
.panel h4{
  font-size:13px;font-weight:700;letter-spacing:.4px;color:var(--text2);
  margin-bottom:12px;display:flex;align-items:center;gap:8px;
}
.panel h4::before{content:"";width:3px;height:13px;border-radius:2px;background:var(--accent)}
.panel h4 .cnt{margin-left:auto;font-family:var(--font-num);font-size:11.5px;color:var(--text3)}
.panel ul{list-style:none;display:flex;flex-direction:column;gap:10px}
.panel li{font-size:13px;line-height:1.6}
.panel li a{color:var(--text);text-decoration:none;transition:color .18s var(--ease);
display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.panel li a:hover{color:var(--accent)}
.panel li .sm{display:flex;gap:6px;align-items:center;margin-top:3px;
font-size:11.5px;color:var(--text3);font-family:var(--font-num)}
.panel .empty{color:var(--text3);font-size:12.5px;padding:6px 0}
.panel .more{display:block;margin-top:13px;font-size:12.5px;color:var(--accent);
text-decoration:none;font-weight:600}
.panel .more:hover{text-decoration:underline;text-underline-offset:3px}

/* 中标金额榜：金额单独一行、加大加粗，扫一眼就能比出量级 */
.ranklist{list-style:none;display:flex;flex-direction:column;gap:13px}
.ranklist li{display:flex;gap:9px;align-items:flex-start}
.ranklist .no{font:700 12px/1.55 var(--font-num);color:var(--text3);min-width:15px;text-align:right;padding-top:2px}
.ranklist .bd{min-width:0;display:flex;flex-direction:column;gap:3px}
.ranklist .amt{font:700 15.5px/1.25 var(--font-num);color:var(--accent);letter-spacing:-.3px}
.ranklist .nm{font-size:12.5px;font-weight:600;color:var(--text);text-decoration:none;line-height:1.5;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.ranklist .nm:hover{color:var(--accent)}
.ranklist .sm{font-size:11.5px;color:var(--text3);font-family:var(--font-num)}

/* 话题热度：柱形 = 每周命中条数（滚动 7 天），最右一根是本周 */
.topics{display:flex;flex-direction:column;gap:10px}
.topic{display:grid;grid-template-columns:84px minmax(0,1fr) 26px 34px;gap:8px;
  align-items:center;font-size:12px}
.topic .tn{color:var(--text2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-weight:500}
.topic .tbar{display:flex;align-items:flex-end;gap:2px;height:22px}
.topic .tbar i{flex:1;min-width:0;background:var(--accent);opacity:.3;border-radius:2px 2px 1px 1px}
.topic .tbar i:last-child{opacity:1}
.topic .tv{text-align:right;font-family:var(--font-num);font-weight:600;
  color:var(--text);font-size:12.5px}
.topic .td{text-align:right;font-family:var(--font-num);font-size:11px}
.topic .td.up{color:var(--hot)}
.topic .td.down{color:var(--text3)}
.topic .td.flat{color:var(--text3);opacity:.55}
.tfoot{margin-top:11px;font-size:11px;color:var(--text3)}

/* ============================ 日报 / 报刊式（归档当日总览） ============================ */
.brief{
  position:relative;background:linear-gradient(180deg,var(--accent-soft),transparent);
  border:1px solid var(--border-strong);border-left:4px solid var(--accent);
  border-radius:var(--radius);padding:18px 22px;margin:20px 0;font-size:14px;line-height:1.85;
}
.brief b.lbl{display:block;margin-bottom:8px;color:var(--accent);font-size:13.5px;letter-spacing:.6px;font-weight:700}
.brief b{color:var(--accent);font-weight:700}
.brief p{margin:0 0 8px;white-space:normal}
.brief p:last-child{margin-bottom:0}

.detail-srcs li{margin:6px 0}
.detail-srcs a:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:4px}
.article p{margin:13px 0;font-size:15px;line-height:1.9}
.readbtn{
  display:inline-flex;align-items:center;gap:7px;
  background:linear-gradient(135deg,var(--accent),var(--accent-hover));color:#fff!important;
  text-decoration:none;border-radius:var(--radius-sm);padding:10px 22px;font-size:13.5px;
  font-weight:600;box-shadow:0 6px 18px -6px color-mix(in srgb,var(--accent) 65%,transparent);
  transition:all .2s var(--ease);
}
.readbtn:hover{transform:translateY(-2px);box-shadow:0 10px 24px -6px color-mix(in srgb,var(--accent) 70%,transparent)}

.masthead{text-align:center;padding:40px 0 0;font-family:var(--font-display)}
.mast-vol{font-size:12px;letter-spacing:3px;color:var(--text2)}
.mast-title{font-size:clamp(32px,4vw,50px);font-weight:700;letter-spacing:8px;margin:12px 0 8px}
.mast-date{font-size:14px;color:var(--text2);letter-spacing:2px}
.mast-rule{border-top:3px double var(--border-strong);margin:22px 0 0}
.kanbox{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:18px 22px;margin:22px 0}
.kan-head{display:flex;justify-content:space-between;font-size:13.5px;color:var(--text2);margin-bottom:10px}
.kan-head b{color:var(--text);font-size:15px;font-family:var(--font-display)}
.sec-row{display:flex;gap:14px;padding:11px 0;border-bottom:1px solid var(--border)}
.sec-row:last-child{border-bottom:none}
.sec-no{font:700 15px/1 var(--font-num);color:var(--accent);min-width:24px}
.sec-main{flex:1;min-width:0}
.sec-head{display:flex;justify-content:space-between;gap:12px;font-size:14px}
.sec-count{color:var(--text2);font-size:12.5px;font-family:var(--font-num);white-space:nowrap}
.sec-headline{font-size:13px;color:var(--text2);margin-top:3px}
.pgrid{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.pcard{position:relative;background:var(--surface);border:1px solid var(--border);
border-radius:var(--radius);padding:16px 18px 16px 52px;transition:all .2s var(--ease)}
.pcard:hover{box-shadow:var(--shadow-sm);border-color:var(--border-strong)}
.pcard-no{position:absolute;left:16px;top:16px;width:24px;height:24px;border-radius:50%;
background:var(--accent);color:#fff;font:700 12.5px/1 var(--font-num);
display:flex;align-items:center;justify-content:center}
.pcard-t{font-weight:700;font-size:14.5px;color:var(--accent);margin-bottom:6px;line-height:1.5}
.pcard-d{font-size:13.5px;color:var(--text2);line-height:1.72}
.actions{list-style:none;padding:0}
.actions li{
  display:flex;gap:12px;align-items:flex-start;background:var(--surface);
  border:1px solid var(--border);border-left:3px solid var(--accent);border-radius:var(--radius);
  padding:14px 18px;margin-bottom:10px;font-size:14px;line-height:1.7;transition:all .2s var(--ease);
}
.actions li:hover{box-shadow:var(--shadow-sm);border-color:var(--border-strong)}
.act-no{font:700 15px/1 var(--font-num);color:var(--accent);min-width:20px}
.act-txt{flex:1}

/* 仅窄屏显示的提示（如「表格可左右滑动」） */
.only-narrow{display:none}
@media(max-width:720px){
  .only-narrow{display:block;font-size:11.5px;color:var(--text3);margin-top:7px;line-height:1.6}
}

/* ============================ 页脚 ============================ */
footer{
  margin-top:56px;padding-top:26px;border-top:1px solid var(--border);
  color:var(--text3);font-size:12px;text-align:center;line-height:1.9;
}
footer a{color:var(--text2);text-decoration:none}
footer a:hover{color:var(--accent)}

/* ============================ 入场动画（滚动触发） ============================ */
/* ⚠️ 必须挂在 html.js 下：静态页的卡片是 Python 预渲染的，若 JS 未启用仍让
   opacity:0，无 JS / 爬虫视角下整页内容就"消失"了。默认可见，有 JS 才动画。 */
.reveal{opacity:1;transform:none}
html.js .reveal{opacity:0;transform:translateY(12px)}
html.js .reveal.in{opacity:1;transform:none;
  transition:opacity .5s var(--ease-out),transform .5s var(--ease-out)}

/* ============================ 响应式：≤1080 收成单栏 ============================ */
@media(max-width:1080px){
  :root{--gap:0px}
  .shell{grid-template-columns:minmax(0,1fr)}
  .aside{position:static;max-height:none;overflow:visible;margin-top:34px;
    display:grid;grid-template-columns:1fr 1fr;gap:14px}
  .aside>.panel:first-child{grid-column:1/-1}
  header.top{flex-wrap:wrap;row-gap:10px}
  .hsearch{order:5;flex:1 1 100%}
  .hsearch kbd{display:none}
}
@media(max-width:900px){
  .kpis{grid-template-columns:repeat(2,1fr)}
  header.top .sub{display:none}
  header.top nav a{padding:7px 9px}
}
@media(max-width:720px){
  :root{--fs-body:15px;--pad-card:16px}
  .wrap{padding:0 16px 64px}
  header.top{gap:10px;padding:12px 0}
  header.top h1{font-size:21px}
  header.top .tools{padding-left:0;border-left:none;margin-left:auto}
  .aside{grid-template-columns:1fr}
  .pgrid{grid-template-columns:1fr}
  .timeline-day{flex-direction:column;gap:9px}
  .timeline-date{
    position:static;width:auto;text-align:left;display:flex;align-items:baseline;gap:9px;
    border-bottom:1px solid var(--border);padding-bottom:7px;
  }
  .dash-week,.date-count,.date-week{margin-top:0}
  .timeline-content{border-left:none;padding-left:0}
  .timeline-content::before,.timeline-item::before{display:none}
  .mast-title{font-size:28px;letter-spacing:4px}
  .awardtable{font-size:12.5px}
  .awardtable th,.awardtable td{padding:9px 10px}
  .hot{padding:15px 16px;gap:12px}
  .hot .rank{width:28px;height:28px;font-size:13.5px}
}
@media(prefers-reduced-motion:reduce){
  *{transition:none!important;scroll-behavior:auto!important;animation:none!important}
  .reveal{opacity:1;transform:none}
}
