:root { --ink:#111318; --muted:#666c76; --blue:#2459e8; --paper:#f7f6f2; --line:rgba(17,19,24,.09); --sheet-gap:12px; }
* { box-sizing:border-box; }
/* 显隐统一入口：任何 display:* 规则都不许赢过 [hidden] */
[hidden] { display:none!important; }
html { scroll-behavior:smooth; height:100%; }
/* 移动端基础项：
   ① height 先写 100vh 再用 100dvh 覆盖——老 WebView / iOS<15.4 不认 dvh，
      只写 dvh 会让 body 高度塌成 auto，一屏布局整个失效；
   ② -webkit-tap-highlight-color 去掉安卓/iOS 点按时的灰色方块；
   ③ touch-action:manipulation 去掉 300ms 点按延迟与误触双击缩放。 */
body { margin:0; height:100vh; height:100dvh; overflow:hidden; display:flex; flex-direction:column; color:var(--ink); background:radial-gradient(circle at 95% 25%,rgba(83,125,236,.065),transparent 28%),var(--paper); font-family:"Segoe UI Variable Text","Segoe UI",-apple-system,BlinkMacSystemFont,system-ui,"PingFang SC","HarmonyOS Sans SC","MiSans","Source Han Sans SC","Noto Sans CJK SC","Microsoft YaHei UI","Microsoft YaHei",sans-serif; -webkit-font-smoothing:antialiased; -webkit-tap-highlight-color:transparent; }
button,a,input,[role="button"] { touch-action:manipulation; }
button,input { font:inherit; }
button { color:inherit; }
.ambient { display:none; }
.site-header,main,footer { width:min(100% - 40px,480px); margin-inline:auto; }

.site-header { flex:0 0 auto; height:78px; display:flex; align-items:center; justify-content:space-between; border-bottom:1px solid var(--line); }
.brand { display:flex; align-items:center; color:var(--ink); text-decoration:none; }
.brand-mark { width:32px; height:32px; margin-right:10px; display:grid; place-items:center; border-radius:50%; color:white; background:linear-gradient(145deg,#1c4bd0,#4078f4); box-shadow:0 7px 18px rgba(36,89,232,.2); }
.brand-mark svg { width:17px; fill:none; stroke:currentColor; stroke-width:2; stroke-linecap:round; stroke-linejoin:round; }
.brand > span:not(.brand-mark) { font-size:16px; font-weight:700; letter-spacing:.08em; }
/* 品牌拼音后缀与页眉序号：原为 #a1a5ad / #a9adb5（对比度 2.28:1 / 2.08:1，不达 AA）。
   收敛到 --muted（4.89:1）。字号 8px 在手机上过小，提到 10px。 */
.brand small { margin-left:8px; color:var(--muted); font-size:10px; font-weight:600; letter-spacing:.18em; }
.header-index { color:var(--muted); font-size:10px; letter-spacing:.12em; }

/* ---- 一屏首屏：main 吃掉剩余高度，hero 内部消化，页面永不纵向滚动 ---- */
main { flex:1 1 auto; min-height:0; display:flex; }
/* min-width:0 是必须的：.hero 是 main 的 flex 项，默认 min-width:auto 会锁死在
   min-content 宽度上不让收缩。而 .hot-searches 是 white-space:nowrap 的横向滚动条，
   其 min-content 达 306px —— 320px 老机型下 main 只有 290px，.hero 就被撑到 306px、
   右缘顶到 321px，多出 1px 横向溢出。360px 及以上 main≥330px 不触发，故只在窄屏暴露。 */
.hero { position:relative; isolation:isolate; flex:1 1 auto; min-height:0; min-width:0; display:flex; flex-direction:column; padding:clamp(70px,14vh,110px) 0 54px; }
.hero-art { position:absolute; z-index:-1; inset:0; overflow:hidden; pointer-events:none; }
.hero-canvas { position:absolute; z-index:4; inset:0; width:100%; height:100%; opacity:0; transition:opacity .7s ease; }
.three-ready .hero-canvas { opacity:1; }
.three-ready .hero-visual { opacity:0; }
/* 已改为 <picture>（WebP 优先 + PNG 兜底），picture 默认 inline，必须显式 block 才能吃 position/width */
.hero-visual { display:block; position:absolute; z-index:2; top:8px; right:-4px; width:270px; height:auto; opacity:.94; transform:rotate(2deg); filter:drop-shadow(0 28px 28px rgba(31,71,177,.14)); transition:opacity .7s ease; }
.hero-visual img { display:block; width:100%; height:auto; }
.visual-halo { position:absolute; z-index:1; top:100px; right:-18px; width:180px; height:220px; border-radius:50%; background:rgba(92,129,218,.045); filter:blur(50px); }
.line { position:absolute; z-index:3; top:70px; right:5px; width:64px; height:1px; background:rgba(17,19,24,.16); transform:rotate(-38deg); transform-origin:right; }
.line::after { content:""; position:absolute; left:-3px; top:-2px; width:5px; height:5px; border-radius:50%; background:var(--blue); }
.eyebrow { color:var(--blue); font-size:9px; font-weight:700; letter-spacing:.24em; }
h1 { margin:19px 0 16px; font-size:clamp(54px,15.2vw,70px); line-height:1; letter-spacing:-.065em; font-weight:700; }
.hero-copy { margin:0; color:var(--muted); font-size:14px; letter-spacing:.01em; }

.search-panel { margin-top:54px; }
.search-main { height:66px; display:flex; align-items:center; padding:6px 6px 6px 21px; border:1px solid rgba(17,19,24,.07); border-radius:999px; background:rgba(255,255,255,.86); box-shadow:0 16px 42px rgba(31,38,55,.09),inset 0 1px 0 rgba(255,255,255,.85); -webkit-backdrop-filter:blur(16px); backdrop-filter:blur(16px); transition:box-shadow .2s,transform .2s; }
.search-panel:focus-within .search-main { transform:translateY(-2px); box-shadow:0 22px 58px rgba(36,95,255,.16),0 0 0 2px rgba(36,95,255,.08); }
.search-icon { width:20px; flex:0 0 auto; margin-right:12px; fill:none; stroke:#9298a3; stroke-width:1.7; stroke-linecap:round; }
/* font-size 必须 ≥16px：iOS Safari 在聚焦 <16px 的输入框时会强制把整页放大。
   若压到 14px，视觉上省不了多少，代价是每次点搜索框都缩放一次。 */
.search-main input { min-width:0; flex:1; height:48px; border:0; outline:0; background:transparent; color:var(--ink); font-size:16px; }
.search-main input::placeholder { color:#a6abb4; }
.search-main input::-webkit-search-cancel-button { display:none; }
.clear-button { display:none; width:28px; height:28px; border:0; border-radius:50%; background:#eef0f3; color:#7e8490; font-size:18px; cursor:pointer; }
.clear-button.visible { display:grid; place-items:center; }
.search-button { width:54px; height:54px; flex:0 0 54px; margin-left:8px; display:grid; place-items:center; border:0; border-radius:50%; background:var(--ink); color:white; cursor:pointer; box-shadow:0 9px 20px rgba(17,19,24,.18); transition:background .2s,transform .2s; }
.search-button:hover { background:var(--blue); }
.search-button:active { transform:scale(.96); }
.search-button span { display:none; }
.search-button svg { width:18px; fill:none; stroke:currentColor; stroke-width:1.8; stroke-linecap:round; stroke-linejoin:round; }

/* 热门词条区：容器色 #90959e、标签「试试」#b0b4bb 均在 2:1 上下，不达 AA，
   统一收敛到 --muted；词条按钮本身用 --muted 的深一档以保证层级。 */
.hot-searches { margin-top:18px; display:flex; align-items:center; gap:0; overflow-x:auto; color:var(--muted); font-size:11px; white-space:nowrap; scrollbar-width:none; }
.hot-searches::-webkit-scrollbar { display:none; }
.hot-label { margin-right:12px; color:var(--muted); }
.hot-searches button { position:relative; padding:5px 12px; border:0; background:transparent; color:#696f7a; cursor:pointer; }
.hot-searches button::after { content:""; position:absolute; right:0; top:50%; width:2px; height:2px; border-radius:50%; background:#b9bdc4; }
.hot-searches button:last-child::after { display:none; }
.hot-searches button:hover { color:var(--blue); }

/* ---- 分类入口（预览版只保留「水库工程 · 大坝」） ---- */
.scope-bar { margin-top:14px; }
.scope-chip { display:inline-flex; align-items:center; gap:7px; padding:8px 14px; border:1px solid var(--line); border-radius:999px; background:rgba(255,255,255,.7); color:#5c626d; font-size:11.5px; cursor:pointer; transition:border-color .2s,color .2s,box-shadow .2s; }
.scope-chip svg { width:14px; fill:none; stroke:currentColor; stroke-width:1.6; stroke-linecap:round; }
.scope-chip em { color:var(--muted); font-style:normal; }
.scope-chip strong { color:var(--ink); font-weight:600; }
.scope-chip .scope-count { padding:1px 7px; border-radius:999px; background:rgba(36,95,255,.08); color:var(--blue); font-size:10px; }
.scope-chip:hover { border-color:rgba(36,95,255,.28); color:var(--blue); box-shadow:0 6px 18px rgba(36,95,255,.08); }
.scope-chip[aria-disabled="true"] { opacity:.55; }

/* 页脚标语：原 #a3a7af 仅 2.23:1 且字号 9px 偏小，收敛到 --muted 并提到 10px */
footer { flex:0 0 auto; height:60px; display:flex; align-items:center; border-top:1px solid var(--line); color:var(--muted); font-size:10px; letter-spacing:.08em; }
.footer-dot { display:none; }

/* ============================================================
   检索结果浮层（贴边卡片式对话框）
   - 结果覆盖在首屏之上，首屏永远是一屏，页面零滚动；
   - 面板四周留白（--sheet-gap），圆角 + 阴影，读起来像「一张卡片」；
   - 面板内部独立滚动，卡片之间用留白而非分隔线。
   ============================================================ */
.results-overlay { position:fixed; inset:0; z-index:50; }
.sheet-backdrop { position:absolute; inset:0; background:rgba(17,19,24,.36); -webkit-backdrop-filter:blur(6px); backdrop-filter:blur(6px); animation:backdropIn .24s ease both; }

.results-sheet {
  position:absolute; left:0; right:0; margin-inline:auto;
  top:calc(env(safe-area-inset-top,0px) + var(--sheet-gap));
  bottom:calc(env(safe-area-inset-bottom,0px) + var(--sheet-gap));
  width:min(calc(100% - var(--sheet-gap) * 2),468px);
  display:flex; flex-direction:column;
  border:1px solid rgba(17,19,24,.055);
  border-radius:24px;
  background:var(--paper);
  box-shadow:0 1px 2px rgba(17,19,24,.05),0 26px 70px -18px rgba(17,19,24,.4);
  overflow:hidden;
  animation:sheetIn .32s cubic-bezier(.22,.85,.28,1) both;
}
@keyframes backdropIn { from { opacity:0; } to { opacity:1; } }
@keyframes sheetIn { from { transform:translateY(3%) scale(.985); opacity:0; } to { transform:none; opacity:1; } }

/* ---- 面板头：左标题 + 右操作 ---- */
.sheet-head { flex:0 0 auto; display:flex; align-items:center; gap:10px; padding:15px 15px 14px; border-bottom:1px solid var(--line); background:rgba(255,255,255,.66); -webkit-backdrop-filter:blur(14px); backdrop-filter:blur(14px); }
.sheet-head-main { flex:1 1 auto; min-width:0; }
.sheet-title-row { display:flex; align-items:center; gap:8px; min-width:0; }
h2 { max-width:100%; margin:0; overflow:hidden; color:var(--ink); font-size:16px; font-weight:700; letter-spacing:-.02em; text-overflow:ellipsis; white-space:nowrap; }
.sheet-count { flex:0 0 auto; padding:2.5px 8px; border-radius:999px; background:rgba(36,95,255,.085); color:var(--blue); font-size:10px; font-weight:600; font-variant-numeric:tabular-nums; letter-spacing:.02em; }
.results-crumb { margin:5px 0 0; overflow:hidden; color:#6e747e; font-size:10.5px; letter-spacing:.01em; text-overflow:ellipsis; white-space:nowrap; }

.sheet-head-actions { flex:0 0 auto; display:flex; align-items:center; gap:7px; }
.back-button { display:inline-flex; align-items:center; gap:2px; height:34px; padding:0 12px 0 7px; border:1px solid var(--line); border-radius:999px; background:rgba(255,255,255,.8); color:#6c727d; font-size:11px; cursor:pointer; transition:border-color .18s,color .18s,background .18s; }
.back-button svg { width:13px; fill:none; stroke:currentColor; stroke-width:1.8; stroke-linecap:round; stroke-linejoin:round; }
.back-button:hover { border-color:rgba(36,95,255,.3); color:var(--blue); background:#fffdfa; }
.sheet-close { flex:0 0 auto; width:34px; height:34px; display:grid; place-items:center; border:0; border-radius:50%; background:rgba(17,19,24,.05); color:#5a616d; cursor:pointer; transition:background .18s,color .18s,transform .18s; }
.sheet-close svg { width:15px; fill:none; stroke:currentColor; stroke-width:1.8; stroke-linecap:round; }
.sheet-close:hover { background:rgba(36,95,255,.1); color:var(--blue); }
.sheet-close:active { transform:scale(.93); }

/* ---- 面板主体：唯一滚动容器 ---- */
.sheet-body { flex:1 1 auto; min-height:0; overflow-y:auto; overscroll-behavior:contain; -webkit-overflow-scrolling:touch; scroll-padding-block:12px; padding:12px 12px calc(env(safe-area-inset-bottom,0px) + 12px); }
.sheet-body::-webkit-scrollbar { width:3px; }
.sheet-body::-webkit-scrollbar-thumb { border-radius:3px; background:rgba(17,19,24,.16); }

/* ---- 结果卡：白卡 + 留白分隔（不再用 1px 细线） ---- */
.result-list { display:grid; gap:15px; grid-template-columns:minmax(0,1fr); }

/* ---- 结果分组：水库名放大成组标题，每个水库只出现一次 ---- */
.result-group { display:block; min-width:0; }
.result-group-head { display:flex; align-items:baseline; gap:8px; padding:0 3px; }
.result-group-name { margin:0; color:var(--ink); font-size:17.5px; font-weight:700; line-height:1.36; letter-spacing:-.02em; }
.result-group-head.is-link { cursor:pointer; }
.result-group-head.is-link:hover .result-group-name { color:var(--blue); }
.result-group-head.is-link:focus-visible { outline:2px solid rgba(36,95,255,.4); outline-offset:3px; border-radius:8px; }
.result-group-count { flex:0 0 auto; margin-left:auto; padding:2px 8px; border-radius:999px; background:rgba(36,95,255,.075); color:#464c57; font-size:10.5px; font-weight:600; font-variant-numeric:tabular-nums; letter-spacing:.02em; }
.result-group-list { display:grid; gap:9px; margin-top:10px; grid-template-columns:minmax(0,1fr); }

/* ---- 结果卡：白卡 + 留白分隔（不再用 1px 细线） ----
   min-width:0 必须显式写：卡片是 grid 项，默认 min-width:auto 会被表格里
   white-space:nowrap 的内容顶开（实测 7 列的稳定计算表把卡片撑到 654px），
   于是表格容器自己不再滚动、超出的列被面板裁掉 —— 属于「修 flex/grid 项本身」。 */
.result-card { display:block; min-width:0; padding:14px 15px 15px; border:1px solid rgba(17,19,24,.055); border-radius:16px; background:#fffdfa; box-shadow:0 1px 2px rgba(17,19,24,.025),0 10px 26px -20px rgba(17,19,24,.42); cursor:pointer; transition:border-color .18s,box-shadow .18s,transform .18s; }
.result-card:hover { border-color:rgba(36,95,255,.2); box-shadow:0 2px 5px rgba(36,95,255,.05),0 16px 34px -22px rgba(17,19,24,.45); }
.result-card:active { transform:scale(.996); }
.result-card:focus-visible { outline:2px solid rgba(36,95,255,.4); outline-offset:2px; }
/* 分组标题与卡片内共用一套高亮观感 */
.result-group-name mark,.result-card mark { padding:0 2px; border-radius:3px; background:rgba(36,95,255,.12); color:var(--blue); }

.result-meta { display:flex; align-items:center; gap:7px; margin-bottom:9px; font-size:10.5px; letter-spacing:.01em; }
.result-dot { flex:0 0 auto; width:5px; height:5px; border-radius:50%; background:linear-gradient(145deg,#1c4bd0,#4078f4); }
.result-project { min-width:0; overflow:hidden; color:#464c57; font-size:11.5px; font-weight:600; letter-spacing:.01em; text-overflow:ellipsis; white-space:nowrap; }
/* 次级文字统一压到 #6b7280~#6e747e：白卡上实测 ≥4.5:1（WCAG AA，小字） */
.result-scope { flex:0 0 auto; margin-left:auto; color:#6e747e; font-size:10px; letter-spacing:.04em; }
.result-kind,.result-tag { flex:0 0 auto; color:var(--blue); font-weight:600; }

.result-title { display:flex; align-items:baseline; gap:7px; margin:0; color:var(--ink); font-size:15.5px; line-height:1.5; font-weight:600; letter-spacing:-.012em; }
.result-no { flex:0 0 auto; padding:1px 6px; border-radius:6px; background:rgba(36,95,255,.085); color:var(--blue); font-size:10.5px; font-weight:600; font-variant-numeric:tabular-nums; letter-spacing:.01em; }
.result-name { min-width:0; }
.result-path { margin:7px 0 0; color:#6e747e; font-size:11px; line-height:1.55; }
.result-path i { padding:0 6px; font-style:normal; }
.result-summary { display:-webkit-box; margin:8px 0 0; overflow:hidden; color:#6b7280; font-size:12.5px; line-height:1.72; -webkit-line-clamp:2; -webkit-box-orient:vertical; }
.result-summary.is-muted,.result-text.is-muted { color:#6e747e; }

/* ---- 数据表（2026-09-16 起资料含 Word 表格）----
   手机窄屏放不下宽表（稳定计算表 7 列），一律横向滚动。
   首列钉住：滚到右边时还得知道这一行是哪个工况 / 哪种材料。
   刻意**不用** position:sticky 做表头纵向吸附 —— 表格的滚动祖先是 .sheet-body，
   那会让表头粘在整个面板顶部，盖住其他结果。 */
.tbl { margin:12px 0 0; }
.tbl-cap { display:flex; align-items:baseline; gap:7px; margin-bottom:6px; padding:0 1px; }
.tbl-name { min-width:0; color:#464c57; font-size:10.5px; font-weight:600; letter-spacing:.02em; }
.tbl-more { flex:0 0 auto; margin-left:auto; color:var(--muted); font-size:10px; font-variant-numeric:tabular-nums; }
/* 「左右滑动」提示：手机上的滚动条是悬浮的，7 列的宽表不提示就只看得见前两列 */
.tbl-hint { flex:0 0 auto; margin-left:6px; color:var(--blue); font-size:10px; font-weight:600; letter-spacing:.02em; }
.tbl-scroll { overflow-x:auto; overscroll-behavior-x:contain; -webkit-overflow-scrolling:touch; border:1px solid rgba(17,19,24,.075); border-radius:11px; background:#fffefb; }
.tbl-scroll:focus-visible { outline:2px solid rgba(36,95,255,.4); outline-offset:2px; }
.tbl-scroll::-webkit-scrollbar { height:3px; }
.tbl-scroll::-webkit-scrollbar-thumb { border-radius:3px; background:rgba(17,19,24,.18); }
.tbl table { border-collapse:collapse; width:100%; font-size:12.5px; font-variant-numeric:tabular-nums; }
.tbl th,.tbl td { padding:7px 9px; border-right:1px solid rgba(17,19,24,.06); border-bottom:1px solid rgba(17,19,24,.06); color:#3d434e; line-height:1.5; text-align:left; vertical-align:top; white-space:nowrap; }
.tbl th { background:#f1f3f7; color:#464c57; font-weight:600; }
.tbl td:empty,.tbl th:empty { min-width:26px; }
.tbl tr:last-child td { border-bottom:0; }
.tbl th:last-child,.tbl td:last-child { border-right:0; }
.tbl th:first-child,.tbl td:first-child { position:sticky; left:0; z-index:1; background:#fffefb; box-shadow:1px 0 0 rgba(17,19,24,.06); }
.tbl th:first-child { background:#f1f3f7; }
.tbl mark { padding:0 1px; border-radius:2px; background:rgba(36,95,255,.15); color:var(--blue); }
/* 上下标：docx 里的 1.0×10⁻⁸、m³/d 靠 vertAlign 排版，构建期转成 <sup>/<sub>。
   line-height:0 是为了不让上下标把行高顶开；
   字号刻意只缩到 .82em（常规做法 .7em 会掉到 9px 以下，手机上指数看不清）。 */
.tbl sup,.tbl sub,.reader-content sup,.reader-content sub { font-size:.82em; line-height:0; }
/* 单元格文本长时允许折行：docx 里本来就是两行的「水位从1961.35m 降至1912.00m」，
   强制 nowrap 会把这一列撑到两百多像素，手机上要多滑好几屏。
   短数值与短表头仍保持 nowrap，避免数字被折成两行。 */
.tbl td.is-wrap,.tbl th.is-wrap { white-space:normal; min-width:8.5em; overflow-wrap:anywhere; }
/* 长表（行数多）默认折起，只显示前若干行 —— 一次刷出几十行的表会把面板变成跑道。
   折叠纯靠 CSS，展开只切一个 class：不必重渲染，也就不必把表格数据存到 DOM 上。 */
.tbl.is-folded:not(.is-expanded) tr.is-folded-row { display:none; }
.tbl-fold { display:block; width:100%; margin-top:9px; padding:9px 12px; border:1px solid rgba(17,19,24,.075); border-radius:11px; background:#fffefb; color:var(--blue); font-family:inherit; font-size:12px; font-weight:600; line-height:1.2; text-align:center; cursor:pointer; touch-action:manipulation; }
.tbl-fold:hover { border-color:rgba(36,95,255,.28); }
.tbl-fold:focus-visible { outline:2px solid rgba(36,95,255,.4); outline-offset:2px; }
/* 阅读视图里表格是主要内容，字号与内边距放宽一档 */
.reader-view .tbl { margin-top:16px; }
.reader-view .tbl table { font-size:13.5px; }
.reader-view .tbl th,.reader-view .tbl td { padding:9px 11px; }
/* 子节条目的序号 / 标题 / 字数（结果卡与阅读视图的子节导航共用） */
.child-no { flex:0 0 auto; min-width:36px; color:var(--blue); font-size:10px; font-weight:600; font-variant-numeric:tabular-nums; }
.child-title { flex:1; min-width:0; color:#4c5361; }
.child-count { flex:0 0 auto; color:var(--muted); font-size:10px; }

/* ============================================================
   文档阅读视图：点开一条结果 = 读这一节的完整文档
   - 与结果列表共用同一个滚动容器（.sheet-body），不新增滚动层；
   - 正文按阅读排版（字号 / 行高 / 段距），关键词高亮比列表里更醒目；
   - 目录节点（自身无正文）自动递归展开子孙正文，点进去就直接有内容。
   ============================================================ */
.reader-view { animation:readerIn .22s ease both; }
@keyframes readerIn { from { opacity:0; transform:translateY(6px); } to { opacity:1; transform:none; } }

/* 阅读视图的文字直接铺在纸底 --paper 上（不像结果卡有一层近白底），
   实测 #6e747e 只有 4.35:1，这里统一用 --muted(#666c76)=4.89:1 */
.reader-path { margin:2px 3px 0; color:var(--muted); font-size:10.5px; line-height:1.6; }
.reader-path i { padding:0 6px; font-style:normal; }

.reader-head { padding:0 3px 14px; border-bottom:1px solid var(--line); }
.reader-h1 { display:flex; align-items:baseline; gap:8px; margin:10px 0 0; color:var(--ink); font-size:20px; font-weight:700; line-height:1.34; letter-spacing:-.028em; }
.reader-h1 .result-no { padding:2px 7px; border-radius:7px; font-size:11px; letter-spacing:0; }
.reader-stats { margin:8px 0 0; color:var(--muted); font-size:11px; font-variant-numeric:tabular-nums; letter-spacing:.01em; }

.reader-content { padding:0 3px; }
.reader-content p { margin:12px 0 0; color:#3d434e; font-size:14px; line-height:1.95; letter-spacing:.002em; }
.reader-content p:first-child { margin-top:0; }

/* 命中高亮：蓝底 + 底部加重，比结果列表里的浅色高亮更抓眼 */
.reader-view mark { padding:1px 3px; border-radius:4px; background:rgba(36,95,255,.14); color:#1642c8; font-weight:600; box-shadow:inset 0 -2px 0 rgba(36,95,255,.4); }

/* 递归展开的子孙小节 */
.reader-blocks { margin-top:4px; }
.reader-block { margin-top:18px; }
.reader-block[data-depth="2"],.reader-block[data-depth="3"] { padding-left:12px; border-left:2px solid rgba(17,19,24,.07); }
.reader-block-title { display:flex; align-items:baseline; gap:7px; margin:0 0 9px; color:var(--ink); font-size:14px; font-weight:600; line-height:1.5; letter-spacing:-.012em; }
.reader-block-title[data-reader-jump] { cursor:pointer; transition:color .15s; }
.reader-block-title[data-reader-jump]:hover { color:var(--blue); }
.reader-block-title .result-no { padding:1px 6px; border-radius:6px; font-size:10px; letter-spacing:0; }
.reader-block.is-dir .reader-block-title { color:#4c5361; }
.reader-block .reader-content p { font-size:13.5px; }

/* 有正文的小节：下方给出下属小节入口，可继续深入 */
.reader-children { margin-top:22px; padding-top:15px; border-top:1px solid var(--line); }
.reader-children-label { margin:0 0 10px; padding-left:3px; color:var(--muted); font-size:10.5px; letter-spacing:.03em; }
.reader-children ul { margin:0; padding:0; display:grid; gap:5px; list-style:none; }
.reader-children li { display:flex; align-items:baseline; gap:9px; padding:10px 11px; border-radius:11px; background:rgba(17,19,24,.028); font-size:12px; cursor:pointer; transition:background .15s; }
.reader-children li:hover { background:rgba(36,95,255,.075); }
.reader-children li:focus-visible { outline:2px solid rgba(36,95,255,.4); outline-offset:1px; }

.reader-empty { margin:16px 3px; color:var(--muted); font-size:12.5px; line-height:1.8; }

/* 从阅读视图返回后，标记刚看过的那一条，便于找回上下文 */
.result-card.is-visited { border-color:rgba(36,95,255,.24); }

/* ---- 骨架屏 / 空态 / 错误态 ---- */
.state-blocks { display:grid; gap:9px; }
.skeleton { height:88px; border-radius:16px; background:linear-gradient(90deg,rgba(17,19,24,.055) 25%,rgba(17,19,24,.018) 37%,rgba(17,19,24,.055) 63%); background-size:400% 100%; animation:shimmer 1.4s ease infinite; }
@keyframes shimmer { from { background-position:100% 0; } to { background-position:0 0; } }

.empty-state { padding:52px 16px 58px; text-align:center; }
.empty-icon { width:52px; height:52px; margin:0 auto 15px; display:grid; place-items:center; border:1px solid rgba(17,19,24,.05); border-radius:50%; color:var(--blue); background:#fffdfa; box-shadow:0 12px 28px -20px rgba(17,19,24,.5); }
.empty-icon svg { width:24px; fill:none; stroke:currentColor; stroke-width:1.6; stroke-linecap:round; }
.empty-state h3 { margin:0 0 8px; font-size:15px; font-weight:600; letter-spacing:-.01em; }
.empty-state p { margin:0; color:var(--muted); font-size:12px; line-height:1.7; }
.error-state .empty-icon { color:#c2605a; }
.retry-button { margin-top:20px; display:inline-flex; align-items:center; gap:6px; padding:11px 22px; border:0; border-radius:999px; background:var(--ink); color:#fffdfa; font-size:12px; cursor:pointer; box-shadow:0 10px 22px -12px rgba(17,19,24,.6); transition:background .2s,transform .2s; }
.retry-button svg { width:14px; fill:none; stroke:currentColor; stroke-width:1.7; stroke-linecap:round; stroke-linejoin:round; }
.retry-button:hover { background:var(--blue); }
.retry-button:active { transform:scale(.97); }

/* 矮屏压缩：保证首屏内容仍能落在一屏内，同时收紧面板留白 */
@media (max-height:740px) {
  .hero { padding-top:clamp(26px,6vh,66px); padding-bottom:26px; }
  h1 { margin:12px 0; font-size:clamp(46px,13.4vw,62px); }
  .hero-copy { font-size:13px; }
  .search-panel { margin-top:26px; }
  .search-main { height:60px; }
  .search-icon { width:18px; margin-right:10px; }
  .search-main input { height:44px; }
  .search-button { width:50px; height:50px; flex-basis:50px; }
  .hot-searches { margin-top:12px; }
  .scope-bar { margin-top:10px; }
  footer { height:50px; }
  :root { --sheet-gap:10px; }
  .sheet-head { padding:12px 13px 11px; }
  .sheet-body { padding:10px 10px calc(env(safe-area-inset-bottom,0px) + 10px); }
  .result-card { padding:12px 13px 13px; }
  .result-title { font-size:15px; }
  .result-list { gap:13px; }
  .result-group-name { font-size:16.5px; }
  .result-group-list { gap:8px; margin-top:9px; }
  .reader-h1 { font-size:18px; }
  .reader-content p { font-size:13.5px; line-height:1.86; margin-top:10px; }
  .reader-block .reader-content p { font-size:13px; }
  .reader-block { margin-top:15px; }
  .empty-state { padding:38px 16px 42px; }
}
@media (max-width:360px) {
  .site-header,main,footer { width:calc(100% - 30px); }
  :root { --sheet-gap:9px; }
  .result-title { font-size:15px; }
  .result-group-name { font-size:16px; }
}
@media (prefers-reduced-motion:reduce) { * { scroll-behavior:auto!important; transition:none!important; animation:none!important; } }
