  /* 令牌移至 /static/buttons.css（主:root 共享令牌已删，L350 第二:root 锚点高亮保留） */
  * { box-sizing: border-box; margin: 0; padding: 0; -webkit-text-size-adjust: 100%; text-size-adjust: 100%; }
  /* iOS WebView点击输入框不会放大（font-size>=16px时） */
  input[type="text"], input:not([type]), textarea, select { font-size: 16px; }
  body {
    background: var(--bg);
    font-family: system-ui, sans-serif;
    font-size: 16px; line-height: 1.7; color: var(--text-primary);
    -webkit-font-smoothing: antialiased; max-width: 100%; min-height: 100vh;
    overflow-anchor: none;
  }
  /* smooth scroll已删除：smooth动画要几百ms，但skipScrollDateCapture guard只挡500ms，
     动画没完scroll监听器就抢答了，抓到错误的日期覆盖lastVisibleDate */

  /* Header */
  .header {
    position: sticky; top: 0; z-index: 100;
    background: var(--card-bg); border-bottom: 1px solid var(--border);
    padding: 12px 16px; display: flex; align-items: center; gap: 12px;
  }
  .back-btn {
    width: 32px; height: 32px; border: none; background: none; cursor: pointer;
    font-size: 20px; color: var(--text-primary);
    display: none; align-items: center; justify-content: center; border-radius: 8px;
  }
  .back-btn:hover { background: var(--hover-bg); }
  .back-btn.show { display: flex; }
  .page-title { font-size: 17px; font-weight: 600; flex: 1; }

  /* Search */
  .search-wrap {
    padding: 8px 16px 12px; background: var(--card-bg);
    border-bottom: 1px solid var(--border);
  }
  .search-box {
    width: 100%; padding: 10px 14px; border: 1px solid var(--border);
    border-radius: var(--radius-sm); background: var(--bg);
    color: var(--text-primary); outline: none;
  }
  .search-box:focus { border-color: var(--accent); }
  .search-box::placeholder { color: var(--text-muted); }

  /* Category Grid */
  .category-grid {
    padding: 16px; max-width: 640px; margin: 0 auto;
    display: grid; grid-template-columns: 1fr 1fr; gap: 12px;
  }
  .category-card {
    background: var(--card-bg); border-radius: var(--radius);
    padding: 20px 16px; cursor: pointer; border: 1px solid var(--border);
    transition: box-shadow 0.15s, transform 0.1s;
  }
  .category-card:hover { box-shadow: 0 2px 8px rgba(0,0,0,0.06); }
  .category-card:active { transform: scale(0.98); }
  .category-card .emoji { font-size: 28px; margin-bottom: 8px; }
  .category-card .name { font-size: 16px; font-weight: 600; margin-bottom: 4px; }
  .category-card .count { font-size: 13px; color: var(--text-muted); }

  /* Province Grid */
  .province-grid {
    padding: 16px; max-width: 640px; margin: 0 auto;
    display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 10px;
  }
  .province-card {
    background: var(--card-bg); border-radius: var(--radius-sm);
    padding: 14px 12px; cursor: pointer; border: 1px solid var(--border);
    text-align: center; transition: box-shadow 0.15s, transform 0.1s;
  }
  .province-card:hover { box-shadow: 0 2px 8px rgba(0,0,0,0.06); }
  .province-card:active { transform: scale(0.97); }
  .province-card .prov-name { font-size: 15px; font-weight: 600; margin-bottom: 2px; }
  .province-card .prov-count { font-size: 12px; color: var(--text-muted); }

  /* Law List */
  .law-list { padding: 8px 16px 60px; max-width: 640px; margin: 0 auto; }
  .law-card {
    background: var(--card-bg); border-radius: var(--radius);
    padding: 14px 16px; margin-bottom: 8px; cursor: pointer;
    border: 1px solid var(--border); transition: box-shadow 0.15s;
  }
  .law-card:active { background: var(--hover-bg); }
  .law-card .title { font-size: 15px; font-weight: 500; }
  .law-card .meta { font-size: 13px; color: var(--text-muted); display: flex; gap: 12px; }
  /* Detail View */
  .detail-view { max-width: 640px; margin: 0 auto; }

  /* Source bar */
  .source-bar {
    padding: 8px 16px; font-size: 12px; color: var(--text-muted);
    background: var(--bg); border-bottom: 1px solid var(--border);
    display: block; line-height: 1.6;
  }
  .source-bar a { color: var(--link); text-decoration: none; white-space: nowrap; }

  /* ── 统一渲染规则：MD怎么写就怎么渲染，不隐藏元素，不按类型打补丁 ── */
  .md-render { padding: 0 16px 60px; }
  /* h1：居中大标题（红头公文：红色加大），撑满可用宽度 */
  .md-render h1 { text-align: center; font-size: clamp(18px, 5vw, 42px); font-weight: 700; line-height: 1.5; margin: 16px 0 4px; color: #c00; }  /* h1=页面/系统标题语法固有红(Step12恢复color:#c00修Step7误删);id4公文红头按原文黑走> [!redhead] callout不再占h1 */
  /* h1紧跟的hr：红色2px（红头公文红线） */
  .md-render h1 + hr { border: none; border-top: 2px solid #c00; margin: 8px 0 16px; }
  /* 冻结header：直接把原始H1+HR移进来，只负责fixed定位，不改样式 */
  .chapter-header {
    position: fixed; top: 0; left: 0; right: 0; z-index: 50;
    background: var(--bg);
    text-align: center; padding: 0 16px;
    box-sizing: border-box;
  }
  .chapter-header .chapter-subtitle {
    padding: 0; font-size: 16px; font-weight: 400;
    margin: 8px 0;
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    align-items: baseline;
    row-gap: 2px;
  }
  .chapter-subtitle .sub-left {
    flex: 0 1 auto;
    max-width: 100%;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
  }
  .chapter-subtitle .sub-sep {
    flex: 0 0 auto;
    margin: 0 6px;
    color: var(--text-muted, #999);
  }
  .chapter-subtitle .sub-right {
    flex: 0 0 auto;
    max-width: 100%;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
  }
  .chapter-subtitle > :only-child {
    flex: 1 1 100%;
  }
  /* ── 通用抽屉组件(何威260711模块化):章节/浏览记录/决策链三个抽屉共用一套mask+panel+header+body骨架,
     照搬chapter-picker的底部滑出/半透明mask/圆角顶panel。旧 chapter-picker、view-picker 类保留不删,
     作为createDrawer的panelClass/maskClass兼容类传入,让原 closeChapterPicker/closeViewPicker 的
     querySelector 继续生效(函数体一字不动,向后兼容)。 ── */
  .drawer-mask {
    position: fixed; top: 0; left: 0; right: 0; bottom: 0;
    background: rgba(0,0,0,0.5);
    z-index: 100;
    display: flex;
    align-items: flex-end;
    justify-content: center;
    touch-action: none;
  }
  .drawer {
    width: 100%; max-width: 500px;
    max-height: 70vh;
    background: #fff;
    display: flex; flex-direction: column;
    border-radius: 12px 12px 0 0;
    overflow: hidden;
  }
  .drawer-header {
    padding: 12px 16px;
    background: #f8f8f8;
    border-bottom: 1px solid #e5e5e5;
    display: flex; justify-content: space-between; align-items: center;
    flex-shrink: 0;
  }
  .drawer-title { font-size: 16px; font-weight: 600; color: #c0392b; }
  .drawer-close {
    background: none; border: none; color: #c0392b;
    font-size: 14px; cursor: pointer; padding: 4px 8px;
  }
  .drawer-body {
    overflow-y: auto;
    -webkit-overflow-scrolling: touch;
    padding: 8px 0;
    overscroll-behavior: contain;
  }
  @media print { .drawer-mask { display: none !important; } }
  /* 手风琴章节picker：点副标题弹出 */
  .chapter-picker-mask {
    position: fixed; top: 0; left: 0; right: 0; bottom: 0;
    background: rgba(0,0,0,0.5);
    z-index: 100;
    display: flex;
    align-items: flex-end;
    justify-content: center;
  }
  .chapter-picker {
    width: 100%; max-width: 500px;
    max-height: 70vh;
    background: #fff;
    display: flex; flex-direction: column;
    border-radius: 12px 12px 0 0;
    overflow: hidden;
  }
  .chapter-picker-header {
    padding: 12px 16px;
    background: #f8f8f8;
    border-bottom: 1px solid #e5e5e5;
    display: flex; justify-content: space-between; align-items: center;
    flex-shrink: 0;
  }
  .chapter-picker-title { font-size: 16px; font-weight: 600; color: #c0392b; }
  .chapter-picker-close {
    background: none; border: none; color: #c0392b;
    font-size: 14px; cursor: pointer; padding: 4px 8px;
  }
  .chapter-picker-list {
    overflow-y: auto;
    -webkit-overflow-scrolling: touch;
    padding: 8px 0;
  }
  .cp-part { border-bottom: 1px solid #f0f0f0; }
  .cp-part-header {
    padding: 12px 16px;
    font-size: 15px; font-weight: 600;
    color: #c0392b;
    cursor: pointer;
    display: flex; justify-content: space-between; align-items: center;
  }
  .cp-part-header .cp-arrow {
    transition: transform 0.2s;
    font-size: 12px;
    color: #999;
  }
  .cp-part.open .cp-arrow { transform: rotate(90deg); }
  .cp-chapters {
    max-height: 0;
    overflow: hidden;
    transition: max-height 0.3s ease-out;
  }
  /* 为什么改none：原800px限高导致大编（物权编1110px、合同编更大）内容被overflow:hidden截断，后面的分编看不到。none彻底不截断（代价：picker展开/折叠失去0.3s过渡动画，功能正确优先，可接受） */
  .cp-part.open .cp-chapters { max-height: none; }
  .cp-subpart-label {
    padding: 8px 24px;
    font-size: 13px;
    color: #888;
    background: #fafafa;
  }
  .cp-chapter-item {
    padding: 10px 32px;
    font-size: 14px;
    color: #333;
    cursor: pointer;
    border-top: 1px solid #f8f8f8;
  }
  .cp-chapter-item.current {
    color: #c0392b;
    font-weight: 600;
    background: #fff5f3;
  }
  @media print { .chapter-picker-mask { display: none !important; } }
  @media print { .chapter-header { display: none !important; } }
  .md-render h2 { font-size: 17px; font-weight: 700; margin: 20px 0 10px; }  /* 章节标题：左对齐、加粗、比正文大 */
  .md-render h3 { font-size: 16px; font-weight: 600; margin: 16px 0 8px; }  /* 子标题：左对齐、加粗 */
  .md-render h4 { font-size: 15px; font-weight: 500; margin: 12px 0 4px; }
  .md-render h5 { font-size: 14px; font-weight: 400; margin: 10px 0 4px; color: var(--text-secondary); }
  /* 段落默认2em缩进 */
  .md-render p { margin-bottom: 10px; font-size: 15px; text-indent: 2em; }
  /* 引用块：灰色背景+左边线，【依据】和注释统一走这个 */
  .md-render blockquote { background: #f5f5f5; border-left: 3px solid #ccc; padding: 8px 12px; margin: 8px 0; font-size: 13px; color: #666; border-radius: 0 4px 4px 0; }
  .md-render blockquote p { text-indent: 0; font-size: 13px; margin-bottom: 4px; }
  .md-render ul { padding-left: 20px; margin-bottom: 10px; }
  .md-render ol { padding-left: 20px; margin-bottom: 10px; }
  .md-render li { margin-bottom: 4px; font-size: 15px; }
  .md-render li p { text-indent: 0; } /* marked给?doc=链接加<p>包裹，去掉继承的2em缩进，防止圆点后间距异常 */
  /* 分隔线（h1后的已单独处理） */
  .md-render hr { border: none; border-top: 1px solid var(--border); margin: 10px 0; }
  .md-render a { color: var(--link); text-decoration: none; }
  .md-render a:hover { text-decoration: underline; }
  .md-render strong { font-weight: 600; }
  /* 图片：居中+自适应 */
  .md-render img { display: block; margin: 12px auto; max-width: 100%; height: auto; border-radius: 4px; }
  /* 长页滚动白屏治本(260929何威"滚到确认口径那行还是白两秒"):公告全文页高数万px,
     微信WebView分块光栅化跟不上快速滚动,lazy已治图片仍白屏=纯DOM渲染问题。
     content-visibility:auto让屏外块跳过渲染+布局(滚到才渲染),Chromium(安卓微信)全程支持,
     iOS WKWebView自Safari18起支持(老iOS无效果但无害)。contain-intrinsic-size给估算高度
     防滚动条跳动。打印/导出PDF必须强制visible否则屏外内容进不了PDF(备案缺件)。
     删掉后长文滚动白屏复发(260928懒加载只治了图片这层)。 */
  .md-render > * { content-visibility: auto; contain-intrinsic-size: auto 300px; }
  @media print { .md-render > * { content-visibility: visible; } }
  /* 表格：响应式 */
  .md-render table { width: 100%; border-collapse: collapse; margin: 12px 0; font-size: 14px; }
  .md-render th, .md-render td { border: 1px solid var(--border); padding: 8px 10px; text-align: left; word-break: break-word; }
  .md-render th { background: var(--bg); font-weight: 600; }
  /* 二维码说明文字：居中灰色小字 */
  .md-render .qr-hint { text-align: center; text-indent: 0; color: rgba(0,0,0,0.45); font-size: 13px; margin: 0 0 4px; }
  /* 复制按钮 */
  .copy-btn { display: inline-block; padding: 4px 12px; font-size: 13px; color: var(--accent); background: var(--accent-light); border: none; border-radius: 12px; cursor: pointer; }
  .copy-btn:active { opacity: 0.6; }
  /* 已移除 h1+h2 位置选择器：排版必须由MD语法（callout等）控制，不靠CSS猜内容位置 */

  /* Accordion TOC */
  .law-toc { padding: 4px 16px 8px; }
  .toc-group { background: none; margin-bottom: 0; border: none; overflow: hidden; }
  .toc-group-header {
    padding: 10px 0; font-size: 16px; font-weight: 600; cursor: pointer;
    display: flex; justify-content: space-between; align-items: center; border-bottom: 1px solid var(--border);
  }
  .toc-group-header:active { background: var(--hover-bg); border-radius: 6px; }
  .toc-group-header .arrow { transition: transform 0.2s; font-size: 12px; color: var(--text-muted); }
  .toc-group.collapsed .arrow { transform: rotate(-90deg); }
  .toc-group.collapsed .toc-content { display: none; }
  .toc-content { border-top: none; padding: 8px 0; }
  .toc-content h2 { display: none; }

  /* Nested accordion */
  .acc-group { border-left: 2px solid var(--border); margin: 4px 0 4px 6px; }
  .acc-header {
    padding: 7px 0; font-size: 15px; font-weight: 600; cursor: pointer;
    display: flex; justify-content: space-between; align-items: center; color: var(--text-primary);
    border-bottom: 1px solid var(--border);
  }
  .acc-header:active { background: var(--hover-bg); border-radius: 6px; }
  .acc-arrow { transition: transform 0.2s; font-size: 11px; color: var(--text-muted); }
  .acc-group.collapsed .acc-arrow { transform: rotate(-90deg); }
  .acc-group.collapsed > .acc-body { display: none; }
  .prov-toggle {
    display: flex; justify-content: space-between; align-items: center;
    padding: 12px 14px; margin-bottom: 4px; cursor: pointer;
    background: var(--card-bg); border: 1px solid var(--border);
    border-radius: var(--radius-sm); font-size: 15px; font-weight: 500;
  }
  .prov-toggle:active { background: var(--hover-bg); }
  .prov-toggle.open .acc-arrow { transform: rotate(0deg); }
  .prov-toggle:not(.open) .acc-arrow { transform: rotate(-90deg); }
  .prov-body { display: none; padding-left: 8px; }
  .topic-page { padding: 8px 16px 60px; max-width: 640px; margin: 0 auto; }
  .acc-body { padding: 2px 0 2px 6px; }
  .acc-group.level-3 > .acc-header { font-size: 16px; font-weight: 600; }
  .acc-group.level-4 > .acc-header { font-size: 15px; font-weight: 500; }
  .acc-group.level-5 > .acc-header { font-size: 14px; color: var(--text-secondary); font-weight: 400; }
  .acc-body p, .acc-body li { font-size: 15px; }

  /* Shareable article number */
  .art-num { cursor: pointer; color: var(--link); }
  .art-num:active { opacity: 0.6; }
  ol.art-articles > li { cursor: pointer; }
  ol.art-articles > li::marker { color: var(--link); }

  /* Case Library */
  .case-list { max-width: 640px; margin: 0 auto; padding: 8px 16px 60px; }
  .case-card {
    background: var(--card-bg); border-radius: var(--radius); padding: 16px;
    margin-bottom: 10px; border: 1px solid var(--border);
    cursor: pointer; transition: background 0.15s;
  }
  .case-card:active { background: var(--hover-bg); }
  .case-title { font-size: 16px; font-weight: 600; line-height: 1.5; margin-bottom: 4px; }
  .case-subtitle { font-size: 14px; color: var(--text-secondary); margin-bottom: 8px; }
  .case-meta { font-size: 13px; color: var(--text-muted); }
  .case-section { margin-bottom: 18px; }
  .case-section .section-label {
    font-size: 14px; font-weight: 600; color: var(--accent);
    margin-bottom: 6px; padding-bottom: 4px;
    border-bottom: 2px solid var(--accent-light);
  }
  .case-section p { font-size: 15px; line-height: 1.8; color: var(--text-primary); }
  .law-ref {
    font-size: 14px; line-height: 1.7; padding: 10px 12px;
    background: var(--accent-light); border-radius: var(--radius-sm);
    margin-bottom: 8px;
  }
  .case-source { font-size: 12px; color: var(--text-muted); padding-top: 16px; border-top: 1px solid var(--border); }
  /* 条文滚动定位时预留fixed header空间，防止scrollIntoView把条文滚到header后面 */
  [id^="art"] { scroll-margin-top: 120px; }
  :root { --highlight-color: #FFF3B0; --highlight-duration: 3s; }
  @keyframes article-highlight {
    0% { background: var(--highlight-color); }
    100% { background: transparent; }
  }
  .article-highlight { animation: article-highlight var(--highlight-duration) ease-out forwards; border-radius: 6px; }
  .share-toast {
    position: fixed; top: 60px; left: 50%; transform: translateX(-50%);
    background: rgba(0,0,0,0.8); color: #fff; padding: 8px 20px;
    border-radius: 20px; font-size: 14px; z-index: 999;
    transition: opacity 0.3s; pointer-events: none;
  }

  .loading { text-align: center; padding: 40px 0; color: var(--text-muted); font-size: 15px; }
  .empty { text-align: center; padding: 40px 0; color: var(--text-muted); }

  footer { text-align: center; padding: 20px 0 60px; font-size: 12px; color: #999; }
  footer a { color: #999; text-decoration: none; display: inline-block; padding: 4px 16px; }

  /* A4分页标记：屏幕上显示灰色虚线，打印时实际换页 */
  /* 用.md-render .a4-page-break提高优先级，防止被.md-render hr的实线覆盖 */
  /* ②便民返工:屏幕隐藏a4分页线(何威要屏幕无线),打印仍分页(下文@media print保留page-break) */
  /* 为什么全局隐藏:insertPageBreaks给所有长文档插分页符,便民/函件/法规屏幕都显示分页线。
     何威针对便民反馈"不要线",马斯克定通用方案(所有长文档屏幕都不显示分页线,打印仍分页) */
  @media screen {
    .md-render .a4-page-break { display: none !important; }
  }
  .md-render .a4-page-break {
    border: none;
    border-top: 1px dashed #ccc;
    margin: 20px 0;
    position: relative;
  }
  .md-render .a4-page-break::after {
    content: '· · · 下一页 · · ·';
    position: absolute;
    top: -8px;
    left: 50%;
    transform: translateX(-50%);
    background: var(--card-bg);
    padding: 0 12px;
    font-size: 11px;
    color: var(--text-muted);
  }

  /* 打印页边距：顶层@page + body padding双保险（WeChat浏览器可能不支持@page） */
  @page { margin: 10mm; }

  /* 打印样式 */
  @media print {
    /* Chrome iframe打印忽略@page规则，用body padding替代实现边距 */
    /* box-decoration-break:clone让body的padding在每个分页上重复 */
    body { padding: 10mm; -webkit-box-decoration-break: clone; box-decoration-break: clone; line-height: var(--print-line-height, 1.7); }
    .header, .search-wrap, .source-bar, .share-toast, .copy-btn, footer, .no-print, .seal-iframe-wrap, .callout-collapsible, .survey-form, .choice-stats-area, .upload-btn-wrap { display: none !important; }
    /* 例外：带printable标记的折叠打印时必须显示。线下报名表是要打印手填的(何威260702)；
       原件扫描/公示证明存证图组260929起也带printable(何威260929:备案材料要完整,导出PDF交政府
       场景存证图随文输出,屏幕附件不用印的旧决策作废)。
       upload-btn-wrap(委员重传按钮)进隐藏列表:存证折叠可打印后,委员导出PDF不能带出屏幕操作按钮 */
    /* 用printable变体把折叠从上面display:none里捞出来(何威260702) */
    .md-render .callout-collapsible.printable { display: block !important; }
    .md-render .callout-collapsible.printable > summary { display: none !important; }
    .md-render .callout-collapsible.printable > .collapsible-body { display: block !important; }
    /* 签名公示区打印必须可见(纪要A4打印签名合成,何威260901)。它不在.survey-form内天然不受上面
       display:none影响,但显式捞一把防未来隐藏规则波及(照printable变体同款保险思路) */
    .sig-print-area { display: block !important; }
    .sig-print-area th, .sig-print-area td { border: 1px solid #999; }  /* 打印无背景色,边框加深保证表格线印得出 */
    .sig-print-area th { background: #fff !important; -webkit-print-color-adjust: exact; }
    /* 打印态:表格公示隐藏,横排签名视图显示——导出/打印走正常文件签名样式(何威260901),屏幕态相反(见.sig-print-view默认display:none) */
    .sig-print-area .sig-screen { display: none !important; }
    /* 打印态去卡片壳:灰底(#fafafa)会被chromium印成黑块、"签名"大标题正常文件没有、break-inside防签名区被劈成两页(何威260901打印PDF变两页+黑底教训) */
    .sig-print-area { background: #fff !important; padding: 8px 0 !important; border-radius: 0 !important; break-inside: avoid; }
    .sig-print-area .sig-title { display: none !important; }
    .sig-print-area .sig-print-view { display: flex !important; flex-wrap: wrap; gap: 8px 12px; align-items: flex-end; }
    /* 签名图42px高(≈手写签名实际大小):7个一行放得下,紧凑防整块被挤去第二页(何威260901"横排别竖着去第二页") */
    /* display:inline-block+margin:0豁免.md-render img的block竖排居中规则(L294),否则签名一个占一行竖排(何威260901"竖着去第二页"根因) */
    .sig-print-area .sig-print-view img { display: inline-block; margin: 0; height: 42px; max-width: 84px; object-fit: contain; -webkit-print-color-adjust: exact; }
    .sig-print-area .sig-print-view .sig-line { font-size: 15px; }
    html, body { background: #fff; height: auto !important; min-height: 0 !important; }
    .md-render { padding: 0; }
    .md-render h1 { color: #c00; }  /* Step12恢复:打印h1也红(系统标题固有红) */
    .md-render .callout-redhead { color: #c00; }  /* Step13:打印redhead也红(公文红头原文红,修Step12黑误判) */
    .md-render h1 + hr { border-top: 2px solid #c00; }
    .md-render h3 { text-align: left; }
    .article-highlight { animation: none !important; background: transparent !important; }
    .md-render table { border-collapse: collapse; }
    .md-render th, .md-render td { border: 1px solid #333; padding: 6px 8px; }
    .md-render blockquote { background: #f5f5f5; }
    /* 落款区域不单独换页：签名+日期（callout-right）保持和前文在一起 */
    .callout-right { page-break-before: avoid; break-before: avoid; }
    .md-render canvas { display: block; margin: 0 auto; }
    /* 防止内容后产生空白第二页 */
    .detail-view, .md-render { height: auto; overflow: visible; page-break-after: avoid; min-height: 0 !important; }
    .md-render .doc-content { min-height: 0 !important; }
    /* A4分页标记：打印时隐藏虚线，实际换页 */
    .md-render .a4-page-break { border: none; page-break-after: always; margin: 0 !important; }
    /* 附件强制独立页(何威260827换届3号票样/资料公示附页):a4-page-break会被pdf_export.py后端evaluate删掉
       (治快通14号误插分页符切碎内容),所以MD里手写的hr.a4-page-break在导出PDF时失效=附件跨页烂掉。
       本类用break-before:page且类名不含a4-page-break,导出删除逻辑碰不到,page.pdf原生按它分页。
       用法:<details class="callout-collapsible printable print-force-page">附件块</details> */
    .md-render .print-force-page { break-before: page; page-break-before: always; }  /* after非before根治Chromium末页空白bug:before:always把hr推新页顶触发trailing blank page(8轮服务器实跑铁证B6通配清break=2页,单加回hr before:always=3页);after让hr留通知页底(border:none不可见)、表进新页正常收尾无空白,scale/margin/内容高度都调不动是纯结构bug;语义也更对hr=通知结束符;margin0去hr占位高度(260707何威批准) */
    .md-render .a4-page-break::after { display: none; }
    /* 线下报名表打印紧凑(何威260702批准)：报名表要刚好装进A4第二页不溢出。
       为什么：signup-table屏幕态line-height1.8+padding6x8打印态撑高超一页,
       末行溢出第三页留准空白页(实测仅设open=3页溢出,加本组规则=2页无空白)。
       只在打印态压(@media print内),屏幕态保原样美观易读(何威要屏幕折叠)。 */
    .signup-table { line-height: 1.15 !important; }
    .signup-table td, .signup-table th { padding: 2px 4px !important; }
    .signup-table .su-big { height: 44px !important; }
    .signup-table .su-face { height: 112px !important; }
    .signup-table .su-idbox { height: 50px !important; }
    .signup-table .su-fill { height: 22px !important; margin-top: 6px !important; }  /* 打印态压低填空行高(同su-big压高逻辑塞进A4,何威260706);su-signrow/su-blank复用屏幕值flex不覆盖 */
    /* 全局减白边(何威260706)：detail-view屏幕态居中640合理，但打印态A4内容区794px两侧白41mm。
       !important穿第104行屏幕态max-width:640px，所有短码打印减白边、文字换行少，非报名表特例。 */
    .detail-view { max-width: 100% !important; }
    .callout-collapsible { max-width: 100% !important; }  /* 穿buttons.css:101屏幕态680px。何威260706定位:details max-width680是表格两边白+缩一角的元凶,打印态全宽让线下表占满A4内容区 */
    .signup-table .su-signrow { display: table !important; width: 100% !important; break-inside: avoid; page-break-inside: avoid; }  /* 打印态flex→table:flex在页边触发Chrome分页bug整体推新页+空白(260706第4页纯白根因;su-fill1后签字行到页边界复发第3页空白),table传统布局分页稳定不触发该bug(何威260707最优解) */
    .signup-table .su-signrow > span { display: table-cell !important; vertical-align: bottom; }
    .signup-table .su-signrow > span:first-child { text-align: left !important; }
    .signup-table .su-signrow > span:last-child { text-align: right !important; }
    .md-render .callout-collapsible.printable, .md-render .callout-collapsible.printable .collapsible-body { padding: 0 !important; margin: 0 !important; }  /* 去printable的padding(实测printable比signup多40px是collapsible-body padding),让线下表段<1047装单页,何威260706 */
    .md-render .callout-collapsible.printable, .md-render .callout-collapsible.printable .collapsible-body, .signup-table .su-signrow { page-break-after: avoid !important; break-after: avoid !important; }  /* 去末页空白bug:page.pdf对末元素printable多分一空白页(第3页空白scale0.92也有,长期bug非本次引入),avoid告知末元素后别再分页(何威260706) */
  }

  /* ── 线下报名登记表(候选人报名·打印第二页·MD内嵌HTML表格) ──
     为什么独立用su-前缀class不蹭kc-table/renderConvenience：那些是数据展示表(议题/便民)，
     这是一张固定纸质填空表(合并单元格/固定格高/虚线照片框)，样式语义不同，独立class防冲突(何威260702) */
  .signup-table { width: 100%; border-collapse: collapse; table-layout: fixed; font-size: 13px; margin: 8px 0; }
  .signup-table td, .signup-table th { border: 1px solid #333; padding: 6px 8px; vertical-align: top; line-height: 1.8; }
  .signup-table .su-label { background: #f5f5f5; font-weight: 600; text-align: center; width: 90px; }
  .signup-table .su-photo { border: 1px dashed #999; text-align: center; color: #999; font-size: 12px; }
  .signup-table .su-face { width: 110px; height: 140px; }   /* 本人照片框尺寸 */
  .signup-table .su-idbox { height: 68px; }                 /* 身份证复印件贴框尺寸 */
  .signup-table .su-big { height: 78px; }                   /* 大格手写区 */
  .signup-table .su-title { text-align: center; font-weight: 700; font-size: 15px; letter-spacing: 1px; }
  .signup-table .su-note { font-size: 11px; color: #666; }
  .signup-table .su-hint { font-size: 10px; color: #999; line-height: 1.3; font-weight: normal; }  /* 字段名下灰色依据小字(何威260702:显得每项有依据) */
  .signup-table .su-fill { width: 100%; border-bottom: 1px solid #555; height: 28px; margin-top: 10px; }  /* 不符合情形手写填空线:width:100%撑满单元格随尺寸自适应,替代固定____字符(何威260706) */
  .signup-table .su-signrow { display: flex; justify-content: space-between; align-items: baseline; margin-top: 14px; gap: 16px; }  /* 签字左/日期右两端对齐flex(何威260706:原全角空格手凑不右对齐) */
  .signup-table .su-blank { display: inline-block; min-width: 3em; border-bottom: 1px solid #555; height: 1em; vertical-align: baseline; }  /* 年月日手写空:em随字号自适应,替代全角空格(何威260706) */

  /* ── 意见征集表单样式 ── */
  .survey-form { margin-top: 20px; padding-top: 16px; border-top: 1px solid rgba(0,0,0,0.08); max-width: 600px; }
  .callout-collapsible[open] .survey-form { border-top: none; padding-top: 0; }
  .sv-question { margin-bottom: 20px; }
  .sv-q-title { font-size: 16px; font-weight: 600; color: rgba(0,0,0,0.85); margin-bottom: 4px; }
  .sv-q-desc { font-size: 13px; color: rgba(0,0,0,0.45); margin-bottom: 8px; line-height: 1.5; }
  .survey-field { margin-bottom: 12px; }
  .survey-field label { display: block; font-size: 13px; color: rgba(0,0,0,0.5); margin-bottom: 4px; }
  .survey-field select, .survey-field textarea {
    width: 100%; padding: 10px 12px; border: 1px solid rgba(0,0,0,0.12); border-radius: 8px;
    font-size: 16px; background: #fff; color: rgba(0,0,0,0.85); -webkit-appearance: none;
    box-sizing: border-box; -webkit-text-size-adjust: 100%;
  }
  .survey-field textarea { min-height: 120px; resize: vertical; line-height: 1.5; }
  .survey-submit {
    width: 100%; padding: 12px; border: none; border-radius: 8px; font-size: 16px; font-weight: 500;
    background: #07C160; color: #fff; cursor: pointer; transition: opacity 0.2s; margin-top: 8px;
  }
  .survey-submit:active { opacity: 0.7; }
  .survey-submit:disabled { opacity: 0.4; cursor: not-allowed; }
  .sv-btn-primary {
    padding: 8px 20px; border: none; border-radius: 8px;
    background: var(--accent); color: #fff; font-size: 16px;
    cursor: pointer; white-space: nowrap;
  }
  .sv-btn-secondary {
    padding: 8px 20px; border: 1px solid var(--accent); border-radius: 8px;
    background: #fff; color: var(--accent); font-size: 16px;
    cursor: pointer; white-space: nowrap;
  }
  .survey-msg { text-align: center; font-size: 14px; margin-top: 8px; }
  .survey-msg.success { color: #07C160; }
  .survey-msg.error { color: #eb5757; }
  .survey-history { margin-top: 16px; }
  .survey-history summary {
    display: flex; align-items: center; justify-content: space-between;
    padding: 10px 0; cursor: pointer; user-select: none;
    color: rgba(0,0,0,0.5); font-size: 14px;
    border-top: 1px solid rgba(0,0,0,0.08); list-style: none;
  }
  .survey-history summary::-webkit-details-marker { display: none; }
  .survey-history .hist-item {
    padding: 10px 0; border-bottom: 1px solid rgba(0,0,0,0.04); font-size: 14px; color: rgba(0,0,0,0.7);
  }
  /* 一键选房号：梯号chip按钮 + 房号网格按钮 */
  .survey-btn-group { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 8px; }
  .survey-btn-group .sv-bld-btn {
    padding: 6px 14px; border: 1px solid #d0d0d0; border-radius: 16px; background: #fff;
    font-size: 14px; cursor: pointer; min-height: 44px; display: flex; align-items: center;
  }
  .survey-btn-group .sv-bld-btn.active { background: #07C160; color: #fff; border-color: #07C160; }
  .survey-unit-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 6px; margin-top: 10px; }
  .survey-unit-grid .sv-unit-btn {
    padding: 6px 4px; border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--bg);
    font-size: 13px; text-align: center; cursor: pointer; min-height: 44px; display: flex; align-items: center; justify-content: center;
  }
  .survey-unit-grid .sv-unit-btn.active { background: var(--accent); color: #fff; border-color: var(--accent); }
  /* chip标签样式 */
  .sv-chip { display: inline-block; padding: 4px 10px; border-radius: 12px; font-size: 13px; }
  /* ── 业主提议卡片样式（提议页改用渲染器，搬自proposal.html，pc-前缀避免和渲染器class冲突） ── */
  .proposal-card { max-width: 640px; margin: 0 auto; }
  .proposal-card .pc-section { margin-bottom: 20px; }
  .proposal-card .pc-section-title { font-size: 15px; font-weight: 600; color: rgba(0,0,0,0.95); margin-bottom: 10px; padding-left: 8px; border-left: 3px solid var(--accent); }
  .proposal-card .pc-card { background: var(--card-bg); border-radius: var(--radius); padding: 16px; border: 1px solid var(--border); }
  .proposal-card label { display: block; font-size: 13px; color: var(--text-secondary); margin: 10px 0 4px; }
  .proposal-card input, .proposal-card textarea {
    width: 100%; padding: 10px 12px; border: 1px solid var(--border); border-radius: var(--radius-sm);
    background: var(--bg); color: var(--text-primary); outline: none; font-family: inherit;
    font-size: 16px; box-sizing: border-box; -webkit-text-size-adjust: 100%; text-size-adjust: 100%;  /* iOS聚焦<16px放大，input/textarea≥16px防缩放铁规则 */
  }
  .proposal-card input:focus, .proposal-card textarea:focus { border-color: var(--accent); }
  .proposal-card textarea { min-height: 72px; resize: vertical; }
  .proposal-card .pc-btn {
    padding: 10px; width: 100%; background: var(--accent); color: #fff;
    border: none; border-radius: var(--radius-sm); font-size: 15px; margin-top: 12px; cursor: pointer;
  }
  .proposal-card .pc-result { font-size: 13px; color: var(--accent); margin-top: 8px; }
  .proposal-card .pc-item { background: var(--card-bg); border-radius: var(--radius); padding: 14px 16px; margin-bottom: 10px; border: 1px solid var(--border); }
  .proposal-card .pc-item-title { font-size: 15px; font-weight: 600; margin-bottom: 6px; }
  .proposal-card .pc-item-meta { font-size: 12px; color: var(--text-muted); margin-bottom: 8px; }
  .proposal-card .pc-bar { background: var(--hover-bg); border-radius: 4px; height: 6px; overflow: hidden; margin-bottom: 8px; }
  .proposal-card .pc-bar-fill { background: var(--accent); height: 100%; }
  .proposal-card .pc-actions { margin-top: 4px; display: flex; gap: 8px; }
  .proposal-card .pc-actions button { padding: 6px 14px; width: auto; font-size: 13px; margin-top: 0; }
  .proposal-card .pc-actions button:disabled { background: var(--text-muted); }
  .proposal-card .pc-btn-audit { background: var(--text-secondary); }
  .proposal-card .pc-tag { display: inline-block; font-size: 11px; padding: 2px 8px; border-radius: 4px; margin-left: 6px; vertical-align: middle; }
  .proposal-card .pc-tag-community { background: var(--accent-light); color: var(--accent); }
  .proposal-card .pc-tag-building { background: #e6f0ff; color: var(--link); }
  .proposal-card .pc-tag-qualified { background: var(--accent); color: #fff; }
  .proposal-card .pc-empty { text-align: center; color: var(--text-muted); padding: 20px; font-size: 14px; }
  .proposal-card .pc-audit-row { padding: 8px 10px; margin-bottom: 6px; background: var(--hover-bg); border-radius: var(--radius-sm); font-size: 12px; line-height: 1.6; }
  .proposal-card .pc-audit-meta { color: var(--text-secondary); margin-bottom: 2px; }
  .proposal-card .pc-audit-hash { color: var(--text-muted); font-family: monospace; word-break: break-all; }
  .sv-chip-bound { background: #f0faf3; color: #07C160; }
  .sv-chip-registry { background: #fff8f0; color: #f0ad4e; }
  .sv-chip-registry .sv-chip-bind { margin-left: 4px; color: #07C160; text-decoration: none; font-size: 12px; }
  .survey-history .hist-item:last-child { border: none; }
  .survey-history .hist-time { font-size: 12px; color: #a39e98; }
  .survey-history .hist-verified { font-size: 12px; margin-left: 6px; }

  /* 门控disabled题整题灰(用项目视觉令牌,不自造颜色,何威260803:看令牌别自造倒角) */
  /* login/wechat题按钮改btn-primary后,disabled自动走.btn-primary:disabled{background:#bbb}灰,不自造button:disabled覆盖 */
  .sv-q-disabled, .sv-q-disabled .sv-q-title, .sv-q-disabled .sv-q-desc { color: var(--text-muted); }  /* 整题+标题+desc灰(用--text-muted #a39e98令牌,替自造rgba) */
  .sv-q-disabled input:disabled, .sv-q-disabled textarea:disabled { opacity: 0.5; }  /* input/textarea半透明(opacity非颜色令牌,保留) */

  /* ── 签名公示区（纪要签名表,260901何威"下方有签名的位置…可以A4打印出来"）── */
  /* 为什么独立于.survey-form:打印CSS隐藏.survey-form,公示区必须在公文流内才印得出来 */
  .sig-print-area { margin:16px 0; padding:16px 20px; background:#fafafa; border-radius:10px; }
  .sig-print-area .sig-title { margin:0 0 10px; font-size:15px; font-weight:600; }
  .sig-print-area table { width:100%; border-collapse:collapse; background:#fff; }
  .sig-print-area th, .sig-print-area td { border:1px solid var(--border); padding:8px 10px; font-size:14px; text-align:left; }
  .sig-print-area th { background:#f0f0f0; font-weight:600; }
  /* 屏幕态隐藏横排签名视图(打印态才显示,规则在@media print块),公示用表格看进度 */
  .sig-print-area .sig-print-view { display: none; }
  .sig-print-area td.sig-cell { height:56px; }  /* 未签空白格留手签高度 */
  .sig-print-area td.sig-cell img { height:48px; max-width:100%; object-fit:contain; background:#fff; }

  /* ── Callout排版语法：[!left]/[!center]/[!right]/[!hint] ── */
  .md-render .callout-left { text-align: left; text-indent: 0; margin: 4px 0; }
  .md-render .callout-indent { padding-left: 1.5em; text-indent: 0; margin: 4px 0; }  /* 何威260625:说明段落整段缩进(非引用块),正常字号无灰底;[class^=callout-]p已text-indent:0 */
  .md-render .callout-center { text-align: center; text-indent: 0; margin: 8px 0; text-wrap: balance; }  /* balance平衡换行(副标题换行第二行不再只几个字,260621何威要求);老WebView降级normal不坏 */
  .md-render .callout-center img { display: block; max-width: 200px; margin: 16px auto; }  /* QR码居中：block+auto margin确保微信浏览器也能居中 */
  .md-render .callout-qr { margin: 8px 0; }
  .md-render .callout-qr .qr-toggle { padding: 4px 0; cursor: pointer; font-size: 12px; color: #999; user-select: none; }
  .md-render .callout-qr .qr-toggle::before { content: '\25B6 '; font-size: 10px; }
  .md-render .callout-qr.expanded .qr-toggle::before { content: '\25BC '; font-size: 10px; }
  .md-render .callout-qr .qr-body { max-height: 0; overflow: hidden; transition: max-height 0.3s ease; text-align: center; }
  .md-render .callout-qr.expanded .qr-body { max-height: 500px; }
  .md-render .callout-qr .qr-body img { display: block; max-width: 200px; margin: 16px auto; }
  @media print { .md-render .callout-qr .qr-toggle { display: none; } .md-render .callout-qr .qr-body { max-height: none !important; overflow: visible !important; } }
  .md-render .callout-right { text-align: right; text-indent: 0; margin: 4px 0; }
  .md-render .callout-hint { text-align: center; text-indent: 0; margin: 0 0 4px; }  /* hint只居中，不改颜色/字号——渲染器不猜内容 */
  .md-render [class^="callout-"] p { text-indent: 0; }  /* 覆盖.md-render p的2em缩进，callout内段落一律无缩进 */
  .md-render .callout-redline { border: none; border-top: 2px solid #c00; margin: 8px 0; height: 0; padding: 0; }  /* 红色分界线(Step7:复刻红头下红横线,原文color=(1,0,0)红;空内容靠border-top渲染红hr) */
  .md-render .callout-center-big { text-align: center; text-indent: 0; font-size: 20px; font-weight: 700; margin: 12px 0 8px; text-wrap: balance; }  /* balance平衡换行(法规名副标题,260621);大字居中标题(Step7:副标题/法规名原##h2字号≈22,callout翻译避误伤便民信息h2全局) */
  .md-render .callout-redhead { text-align: center; text-indent: 0; color: #c00; font-size: clamp(18px, 5vw, 42px); font-weight: 700; line-height: 1.5; margin: 16px 0 4px; }  /* 公文红头按原文红色特大(Step13修Step12黑误判:pymupdf color对红头特殊字体不准提取成0黑,信何威+公文规范红;clamp42px特大) */

  /* ── 投票明细内嵌抽屉的柱状图 ── */
  .choice-stats-card { background:#fff; border-radius:12px; padding:14px; box-shadow:0 1px 3px rgba(0,0,0,0.06); margin-bottom:12px; }
  .choice-stats-title { font-size:14px; font-weight:600; margin-bottom:10px; color:rgba(0,0,0,0.85); }
  .choice-bar-row { display:flex; align-items:center; margin-bottom:8px; font-size:13px; }
  .choice-bar-label { flex:0 0 80px; color:rgba(0,0,0,0.7); }
  .choice-bar-wrap { flex:1; background:#f0f0f0; border-radius:8px; height:20px; overflow:hidden; margin:0 8px; }
  .choice-bar-fill { display:block; height:100%; background:#576b95; border-radius:8px; transition:width 0.3s; }
  .choice-bar-pct { flex:0 0 50px; text-align:right; color:rgba(0,0,0,0.5); font-size:12px; }

  /* ── Callout折叠展开：原件扫描/公示证明（风格与用印审批结果栏完全一致）──
     基础CSS(.callout-collapsible/summary/collapsible-title/toggle/body/展开收起)已搬公共
     buttons.css(何威260704:报名表audit.html折叠也用同款,反造轮子,引buttons.css自动生效)。
     这里只保留渲染器MD特有:seal-iframe-wrap后无gap(用印结果栏紧跟折叠不留白)。 */
  .seal-iframe-wrap + .callout-collapsible { margin-top: 0; }  /* sealf后无多余gap */

  /* 浏览记录底部滑出抽屉（复刻chapter-picker模式） */
  .view-picker-mask {
    position: fixed; top: 0; left: 0; right: 0; bottom: 0;
    background: rgba(0,0,0,0.5);
    z-index: 100;
    display: flex;
    align-items: flex-end;
    justify-content: center;
  }
  .view-picker {
    width: 100%; max-width: 500px;
    max-height: 70vh;
    background: #fff;
    display: flex; flex-direction: column;
    border-radius: 12px 12px 0 0;
    overflow: hidden;
  }
  .view-picker-header {
    padding: 12px 16px;
    background: #f8f8f8;
    border-bottom: 1px solid #e5e5e5;
    display: flex; justify-content: space-between; align-items: center;
    flex-shrink: 0;
  }
  .view-picker-title { font-size: 16px; font-weight: 600; color: #c0392b; }
  .view-picker-close {
    background: none; border: none; color: #c0392b;
    font-size: 14px; cursor: pointer; padding: 4px 8px;
  }
  .view-picker-list {
    overflow-y: auto;
    -webkit-overflow-scrolling: touch;
    padding: 8px 0;
  }
  .view-picker-reader { padding: 10px 16px; font-size: 13px; color: rgba(0,0,0,0.65); border-top: 1px solid #f8f8f8; }
  .view-picker-empty { padding: 16px; font-size: 13px; color: rgba(0,0,0,0.35); text-align: center; }
  .view-stats-trigger { display: flex; justify-content: center; align-items: center; gap: 16px; padding: 8px 0; font-size: 12px; color: #999; cursor: pointer; }
  .view-stats-text { cursor: pointer; }
  .view-stats-links { display: inline-flex; align-items: center; }
  .view-picker-export { float: right; font-size: 12px; padding: 4px 12px; border: 1px solid #c0392b; color: #c0392b; border-radius: 4px; background: none; cursor: pointer; }
  .view-picker-export:active { background: #c0392b; color: #fff; }
  @media print { .view-picker-mask, .view-stats-trigger { display: none !important; } }

  /* ── 图片放大通用组件（独立可复用：报名表缩略图/正文公式证明图/意见集正文图通用）──
     何威260703批准自写不引PhotoSwipe：场景简单(单图放大看水印+微信双指缩放)。
     复刻view-picker-mask的fixed全屏遮罩思路，z-index99999盖过一切，背景更黑看图清晰。 */
  #img-viewer {
    position: fixed; top: 0; left: 0; right: 0; bottom: 0;
    background: rgba(0,0,0,0.9);
    z-index: 99999;
    display: none; /* 默认隐藏，open时改flex */
    align-items: center;
    justify-content: center;
  }
  #img-viewer .img-viewer-pic {
    max-width: 90vw; max-height: 90vh; object-fit: contain;
    opacity: 0; /* 加载完onload才置1，避免空白闪现 */
    transition: opacity 0.15s;
  }
  #img-viewer .img-viewer-close {
    position: absolute; top: 12px; right: 12px;
    background: transparent; border: none; color: #fff;
    font-size: 32px; line-height: 1; cursor: pointer; padding: 4px 10px;
  }
  #img-viewer .img-viewer-loading {
    position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%);
    color: #fff; font-size: 16px;
  }
  @media print { #img-viewer { display: none !important; } } /* 打印时隐藏放大层 */

  /* ── 时间轴callout样式 ── */
  .md-render .callout-timeline-date {
    font-size: 16px; font-weight: 600; text-align: left; text-indent: 0;
    margin: 16px 0 8px; padding: 4px 8px; cursor: pointer;
    border-bottom: 1px solid rgba(0,0,0,0.1);
    border-radius: 4px;
    transition: background 0.15s;
  }
  .md-render .callout-timeline-date:hover { background: none; }
  .md-render .callout-timeline-date:active { background: none; }
  /* 时间轴列表：微调间距+链接无色+覆盖全局段落缩进 */
  .timeline-widget ul { padding-left: 1.2em; }
  .timeline-widget li { margin-bottom: 4px; }
  .timeline-widget li p { text-indent: 0; }
  .timeline-widget li a { color: rgba(0,0,0,0.85); text-decoration: none; }
  .timeline-widget li a:hover { text-decoration: underline; }
  /* 标签行：类型标签深色+主体标签浅色，可点击筛选 */
  .timeline-tag-line {
    font-size: 12px;
    color: #999;
    margin-top: 2px;
    line-height: 1.4;
  }
  .timeline-tag-line .tag-type { color: #777; }
  .timeline-tag-line .tag-subject { color: #aaa; }
  .timeline-tag-line span { margin-right: 6px; cursor: pointer; }
  /* 只在鼠标设备上显示hover效果，触摸屏上hover会残留导致反选后标签看起来还高亮 */
  @media (hover: hover) {
    .timeline-tag-line span:hover { color: var(--accent); }
  }
  .timeline-tag-line .tag-active { color: var(--accent); }
  /* ── 小区记忆Step2(260828何威定稿):整条话题=一段连贯叙述——"标题:背景。讨论中产生以下
     观点:观点一XXX+SVG大拇指(上=认同/下=反对) 观点二XXX…"从头到尾一个段落,无收起 ── */
  .topic-story { font-size: 15px; color: #444; line-height: 2.0; } /* 何威260828:字号与时间轴其他文字一样大 */
  .topic-story .op-seg { margin-right: 18px; }
  /* 260901治误触:热区扩到约44×40(Google 48dp/Apple 44pt规范下限方向)——relative+绝对定位伪元素
     扩热区不占布局(行高2.0不变观点段不撑开);margin-left 7→16拉开两拇指,配合各自inset-8px
     横向,相邻热区正好接壤不重叠 */
  .topic-story .t-act { position: relative; cursor: pointer; margin-left: 16px; white-space: nowrap; }
  .topic-story .t-act::before { content: ''; position: absolute; top: -13px; right: -8px; bottom: -13px; left: -8px; } /* 展开写法等价inset:-13px -8px,兼容旧WebView */
  .topic-story .t-act .t-svg { vertical-align: -2px; fill: #999; }
  .topic-story .t-act .t-svg-dn { transform: rotate(180deg); }
  .topic-story .t-act.mine .t-svg { fill: #1a1a1a; }
  .topic-story .t-act.off { cursor: default; }
  .topic-story .t-act.off .t-svg { fill: #ccc; }
  .topic-story .t-num { position: relative; cursor: pointer; text-decoration: underline dotted; margin-left: 1px; font-size: 15px; } /* position:relative(260901修):t-act热区::before是absolute,层叠盖住static的t-num——真实点击数字命中::before算成t-act触发表态,名单入口失效(何威实测抓出)。relative让t-num在层叠上位,点击命中自己 */
  /* 详情页观点表态行(260829):拇指样式与时间轴同款,容器不在topic-story下要单独作用域 */
  .topic-detail-stance { font-size: 15px; }
  .topic-detail-stance .t-act { position: relative; cursor: pointer; margin-left: 16px; white-space: nowrap; } /* 热区/间距与topic-story同款(260901治误触) */
  .topic-detail-stance .t-act::before { content: ''; position: absolute; top: -13px; right: -8px; bottom: -13px; left: -8px; }
  .topic-detail-stance .t-act .t-svg { vertical-align: -2px; fill: #999; }
  .topic-detail-stance .t-act .t-svg-dn { transform: rotate(180deg); }
  .topic-detail-stance .t-act.mine .t-svg { fill: #1a1a1a; }
  .topic-detail-stance .t-act.off { cursor: default; }
  .topic-detail-stance .t-act.off .t-svg { fill: #ccc; }
  .topic-detail-stance .t-num { position: relative; cursor: pointer; text-decoration: underline dotted; margin-left: 1px; font-size: 15px; } /* position:relative同topic-story(260901修热区::before盖数字) */
  /* 260901治误触配套:表态成功拇指弹跳——误点立即有可察觉反馈(可逆单击生效,不做两段式)。
     down版keyframes必须带rotate(180deg):animation的transform会整体覆盖.t-svg-dn的静态
     transform,只写scale会让倒拇指在动画帧跳回正拇指 */
  @keyframes thumb-pop { 0% { transform: scale(1); } 40% { transform: scale(1.35); } 100% { transform: scale(1); } }
  @keyframes thumb-pop-dn { 0% { transform: rotate(180deg) scale(1); } 40% { transform: rotate(180deg) scale(1.35); } 100% { transform: rotate(180deg) scale(1); } }
  .t-act.pop .t-svg { animation: thumb-pop 0.3s ease; }
  .t-act.pop .t-svg-dn { animation: thumb-pop-dn 0.3s ease; } /* down的svg两类都带,与上行同特异性靠源码顺序在此覆盖 */
  .topic-story .op-hint { font-size: 12px; color: var(--text-muted); }
  .topic-story .op-time { font-size: 15px; color: inherit; margin-left: 2px; margin-right: 2px; white-space: nowrap; } /* 观点提出时间注释(260831):字号颜色与观点正文/计数统一(何威"时间轴字体尽量统一");间距2px紧凑(何威"空格特别大"——原全角空格在15px下=一字宽+括号留白叠加显大,拼接串去全角空格改靠margin) */
  /* 表态名单弹层(demo同款底部面板) */
  .topic-mask { position: fixed; inset: 0; background: rgba(0,0,0,0.35); display: block; z-index: 90; }
  .topic-who-panel { position: fixed; left: 50%; bottom: 0; transform: translateX(-50%); width: 100%; max-width: 680px; background: #fff; border-radius: 12px 12px 0 0; padding: 16px 18px 24px; z-index: 91; max-height: 60vh; overflow-y: auto; }
  .topic-who-panel h3 { font-size: 15px; margin-bottom: 10px; text-align: center; font-weight: 600; }
  .topic-who-panel .row { display: flex; justify-content: space-between; font-size: 14px; padding: 7px 4px; border-bottom: 1px solid #f2f2ee; }
  .topic-who-panel .row span:last-child { color: #07C160; }
  .topic-who-panel .row span.down { color: #c0392b; }
  .topic-who-panel .close { text-align: center; color: #999; font-size: 13px; margin-top: 12px; cursor: pointer; }
  /* 搜索按钮：wrapper右上角灰色小图标，hover变accent */
  .timeline-search-btn {
    position: absolute; top: 8px; right: 8px;
    width: 28px; height: 28px; border: none; background: none;
    color: #999; font-size: 16px; cursor: pointer; z-index: 10;
    display: flex; align-items: center; justify-content: center;
    padding: 0;
  }
  .timeline-search-btn:hover { color: var(--accent); }
  .timeline-search-btn svg { width: 18px; height: 18px; fill: currentColor; }
  /* 筛选提示行：小区名 · 标签名 ✕ */
  /* 搜索面板：白色卡片，absolute定位在按钮下方 */
  .timeline-search-panel {
    position: absolute; top: 40px; right: 8px; width: auto; min-width: 150px; max-width: 80vw;
    background: #fff; border-radius: 8px; box-shadow: 0 2px 12px rgba(0,0,0,.15);
    padding: 8px; z-index: 20; max-height: 320px; overflow-y: auto;
    display: none;
  }
  .timeline-search-panel.open { display: block; }
  /* 内嵌类目面板 */
  .category-panel { display:none; margin:4px 0; padding:10px; background:#f8f9fa; border-radius:8px; }
  .category-panel.open { display:block; }
  .category-pill-row { display:flex; gap:6px; flex-wrap:wrap; margin-bottom:8px; }
  .category-pill { padding:4px 12px; border-radius:var(--radius-sm); background:#e0e0e0; font-size:14px; cursor:pointer; user-select:none; }
  .category-pill.active { background:var(--accent); color:#fff; }
  .category-chips { display:none; flex-wrap:wrap; gap:4px; margin:4px 0; }
  .category-chips.expanded { display:flex; }
  .subtitle-tag-clear { display: none; margin-left: 6px; color: #ccc; cursor: pointer; user-select: none; font-size: 14px; }
  .subtitle-tag-clear.visible { display: inline; }
  /* 搜索高亮：所有匹配黄色背景，当前匹配橙色背景 */
  mark.search-match { background: #fff3b0; color: inherit; padding: 1px 2px; border-radius: 2px; }
  mark.search-match.search-current { background: #ff9800; color: #fff; }
  .timeline-tag-filter {
    width: 100%; border: 1px solid #eee; border-radius: 4px; padding: 5px 8px;
    margin-top: 6px; box-sizing: border-box;
    background: transparent; color: #999;
  }
  .timeline-tag-filter::placeholder { color: #ccc; }
  .timeline-tag-filter:focus { outline: none; border-color: #ddd; }
  .timeline-tag-item {
    display: inline-block; padding: 3px 8px; margin: 2px;
    border-radius: var(--radius-sm); font-size: 12px; color: #666;
    background: #f5f5f5; cursor: pointer;
  }
  .timeline-tag-item:hover { background: #e8e8e8; }
  .timeline-tag-item.active { background: var(--accent); color: #fff; }
  .timeline-tag-item.has-card { font-weight: bold; }
  .timeline-tag-more {
    display: inline-block; padding: 3px 10px; font-size: 12px;
    color: #888; cursor: pointer; border: 1px dashed #ccc;
    border-radius: 12px; margin: 2px;
  }
  .timeline-tag-more:hover { color: var(--accent); border-color: var(--accent); }
  .timeline-load-more {
    display: block; width: 100%; padding: 12px; margin-top: 8px;
    border: none; border-radius: var(--radius-sm);
    background: none; color: var(--accent); font-size: 14px;
    cursor: default; text-align: center;
  }
  .timeline-spinner {
    display: inline-block; width: 20px; height: 20px;
    border: 2px solid rgba(0,0,0,0.1); border-top-color: var(--accent);
    border-radius: 50%; animation: tl-spin 0.6s linear infinite;
  }
  @keyframes tl-spin { to { transform: rotate(360deg); } }
  .timeline-load-more:hover { background: var(--hover-bg); }
  .tag-card { margin: 12px 4px; padding: 12px; border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--hover-bg); }
  .tag-card p { text-indent: 0; }
  /* 知识卡片共享class(方案K,何威260623批准)：未来新卡复用,不重复内联style */
  .kc-title { font-weight: 600; color: var(--text-primary); font-size: 14px; margin-bottom: 6px; }
  .kc-secondary { color: var(--text-secondary); font-size: 13px; line-height: 1.6; margin-bottom: 8px; }
  .kc-table { width: 100%; border-collapse: collapse; font-size: 13px; }
  .kc-table td { padding: 5px 8px; border: 1px solid var(--border); word-break: break-word; }
  /* 何威260712:资金页tab卡片(银行/大金/小金)。选中=底部绿条(border-bottom绿)+文字加深;未选中=底部透明+灰。 */
  .fund-tab { cursor: pointer; flex: 1; min-width: 96px; text-align: center; padding: 10px 8px; border-bottom: 3px solid transparent; color: var(--text-muted); }
  .fund-tab .fund-tab-label { font-size: 13px; font-weight: 600; }
  .fund-tab .fund-tab-amt { font-size: 16px; font-weight: 700; margin-top: 4px; }
  .fund-tab.active { border-bottom: 3px solid var(--accent); color: var(--text-primary); }
  /* 何威260712:楼栋下钻明细块(点数据行inline展开)。浅底+缩进+两列网格,手机窄屏自动单列堆叠。 */
  .fund-building-row { cursor: pointer; }  /* 数据行可点提示手型,合计行无此class不变 */
  .fund-detail-row > td { padding: 0 !important; }  /* 明细行内层自带padding,外格清零免双重间距 */
  .fund-detail-block { display: grid; grid-template-columns: 1fr 1fr; gap: 2px 12px; background: var(--hover-bg); padding: 8px 12px; font-size: 13px; }
  .fund-detail-row-item { display: flex; justify-content: space-between; gap: 8px; border-bottom: 1px dashed var(--border); padding: 3px 0; }
  .fund-detail-k { color: var(--text-muted); white-space: nowrap; }
  .fund-detail-v { color: var(--text-primary); font-weight: 600; text-align: right; white-space: nowrap; }
  @media (max-width: 480px) { .fund-detail-block { grid-template-columns: 1fr; } }  /* 窄屏单列堆叠 */
  /* 何威260712:楼栋下钻到户——各户大小金明细表(Step3)。复用--border/--text-muted变量,与fund-detail-row-item协调。
     v2(何威260712):去掉320px限高小窗口,户表直接铺开整页滚动(大栋44#383车位长也接受,整页滚不卡小窗口)。首列房号左对齐,金额列右对齐。 */
  .fund-unit-host { padding: 8px 12px; border-top: 1px solid var(--border); }
  .fund-unit-title { font-size: 13px; color: var(--text-muted); margin-bottom: 6px; }
  /* 260713何威:户表行点开明细卡(建设局余额+物业代收应交/已交/欠+逐笔占位) */
  .fund-unit-row { cursor: pointer; }
  .fund-unit-row:hover { background: rgba(0,0,0,0.03); }
  .fund-unit-arrow { color: var(--text-muted); font-size: 10px; margin-left: 2px; }
  .fund-unit-detail td { padding: 0 !important; background: #fafafa; }
  .fund-unit-detail-box { padding: 6px 12px 8px; margin: 4px 0; border-left: 3px solid #c0392b; }
  .fund-unit-detail-sec { margin-bottom: 6px; }
  .fund-unit-detail-sec:last-child { margin-bottom: 0; }
  .fund-unit-detail-t { font-size: 12px; color: var(--text-muted); margin-bottom: 3px; }
  .fund-unit-detail-t small { font-size: 11px; }
  .fund-unit-detail-kv { display: flex; justify-content: space-between; align-items: center; font-size: 13px; padding: 2px 0; }
  .fund-unit-detail-kv span { color: var(--text-muted); }
  .fund-unit-detail-kv b { font-weight: 600; }
  .fund-unit-detail-hint { font-size: 12px; color: var(--text-muted); font-style: italic; padding: 3px 0; }
  .fund-unpaid-val b { color: #c0392b; }
  .fund-pf-note { font-size: 12px; color: var(--text-muted); margin-top: 6px; line-height: 1.5; padding: 0 2px; }
  .fund-unit-scroll { overflow-x: auto; -webkit-overflow-scrolling: touch; }  /* v3:窄屏5列内容(房号52+面积48+大金52+小金52+状态26=230px)装不进容器(~209px),表格min-width撑出横滚,业主横滑看全列不再挤掉面积列 */
  .fund-tbl-scroll { overflow-x: auto; -webkit-overflow-scrolling: touch; }  /* 260713何威:资金楼栋表自适应——列宽auto按内容让位(精确元不溢出格子),min-width撑出后超屏横滑 */
  .fund-unit-floor-head { background: var(--hover-bg); font-size: 12px; color: var(--text-muted); font-weight: 600; padding: 4px 8px; border-top: 1px solid var(--border); }  /* v2:层分组头(不折叠纯视觉分隔) */
  .fund-search-box { width: 100%; box-sizing: border-box; padding: 6px 8px; font-size: 13px; border: 1px solid var(--border); border-radius: 4px; margin-bottom: 8px; }  /* v2:房号搜索框 */
  .fund-unit-table { width: 100%; min-width: 320px; table-layout: auto; border-collapse: collapse; font-size: 13px; }  /* 260713何威:auto列宽按金额内容自适应(精确元不溢出格子),min-width320超屏由fund-unit-scroll横滑;原fixed+固定%把精确元挤爆格子 */
  .fund-unit-table th:nth-child(1), .fund-unit-table td:nth-child(1) { width: 22%; }  /* 房号(1001室52px+padding需70px) */
  .fund-unit-table th:nth-child(2), .fund-unit-table td:nth-child(2) { width: 20%; }  /* 面积(117.58约48px) */
  .fund-unit-table th:nth-child(3), .fund-unit-table td:nth-child(3) { width: 22%; }  /* 首期专项维修资金(大金¥6,641.04约52px) */
  .fund-unit-table th:nth-child(4), .fund-unit-table td:nth-child(4) { width: 22%; }  /* 日常专项维修资金(小金) */
  .fund-unit-table th:nth-child(5), .fund-unit-table td:nth-child(5) { width: 14%; }  /* 状态(正常26px) */
  /* th/td拆分:td保持nowrap(金额不折行防断列),th用normal(长列名"首期专项维修资金"可折行,防nowrap撑宽5列溢出手机窄屏)。 */
  .fund-unit-table td { border-bottom: 1px solid var(--border); padding: 4px 8px; text-align: right; white-space: nowrap; }
  .fund-unit-table th { border-bottom: 1px solid var(--border); padding: 4px 8px; text-align: right; white-space: normal; color: var(--text-muted); font-weight: 600; background: var(--hover-bg); }  /* v2(何威260712):铺开模式户表跟整页滚,去掉position:sticky(top:0)——原吸顶在v2去掉320px限高无滚动容器后,表头会粘到整页顶部孤立飘顶=崩,故删sticky只留底色 */
  .fund-unit-table td:first-child, .fund-unit-table th:first-child { text-align: left; }  /* 房号左对齐 */
  .fund-unit-table td:last-child, .fund-unit-table th:last-child { text-align: left; }  /* 状态左对齐(文字) */
  .fund-unit-empty { font-size: 13px; color: var(--text-muted); padding: 4px 0; }
  /* 260713何威:小金收支台账窄屏优化——户表/支出表/流水表复用.fund-unit-table边框底色,但列数从7改4/3/3,
     必须覆盖父级.fund-unit-table的min-width320px(否则表强制320)+nth-child(1-5)固定%(否则4列被5列规则分配错位)。
     配合table-layout:fixed(各表内联):fixed下表宽锁死=容器100%,列宽严格按th的%分配,nowrap内容溢出由overflow:hidden截断(事项列),
     不再被长金额/长事项撑超容器横滚。 */
  .fund-unit-table.sf-unit-tbl, .fund-unit-table.sf-expense-tbl, .fund-unit-table.sf-income-tbl { min-width: 0; }
  /* 清父级nth-child固定%:fixed布局下列宽由th内联%决定,td的nth-child %残留会干扰,统一重置让th内联width独占 */
  .fund-unit-table.sf-unit-tbl th, .fund-unit-table.sf-unit-tbl td,
  .fund-unit-table.sf-expense-tbl th, .fund-unit-table.sf-expense-tbl td,
  .fund-unit-table.sf-income-tbl th, .fund-unit-table.sf-income-tbl td { width: auto; }
  .kc-grid { display: flex; flex-wrap: wrap; font-size: 13px; }
  .kc-grid > div { width: 50%; box-sizing: border-box; padding: 4px 6px; border: 1px solid var(--border); }
  .md-render a.btn-primary { color: #fff; }  /* 覆盖L256 .md-render a的蓝(优先级0,1,1<0,2,1),绿底按钮<a>字回白;只命中.btn-primary不伤板块蓝链接 */
  @media print { .timeline-widget { display: none !important; } }
  /* 右下角sc-menu-wrap样式已搬公共buttons.css(何威260703抽公共不造轮子) */
/* 便民表格2列（名称含赞踩svg|电话分行）——全用渲染器变量，表格用渲染器.md-render table现成样式 */
.conv-name-cell { }
/* note改块级独占一行换行：只让格子变高不横向撑宽，变形根治 */
.conv-note { display: block; font-style: normal; font-size: 12px; color: var(--text-muted); font-weight: normal; margin: 2px 0 0 0; white-space: normal; word-break: break-word; }
.conv-votes { display: inline-flex; gap: 8px; margin-left: 8px; vertical-align: middle; }
.conv-vote { display: inline-flex; align-items: center; gap: 3px; cursor: pointer; color: var(--text-muted); font-size: 13px; }
.conv-vote:hover { color: var(--text-secondary); }
.conv-vote.active-up { color: var(--accent); }
.conv-vote.active-down { color: #e85d3a; }
.conv-thumb { vertical-align: middle; }
.conv-phones a { color: var(--link); text-decoration: none; line-height: 1.8; }
.conv-login-tip { color: #e85d3a; font-size: 12px; text-align: center; margin: 4px 0; display: none; }
.conv-empty { text-align: center; color: var(--text-muted); padding: 12px; }
/* 分组样式：去margin让表格撑满(和官方表格同宽)，conv-cat用渲染器h3统一标题样式(去蓝条) */
.conv-group { }
.conv-cat { font-size: 16px; font-weight: 600; color: var(--text-primary); margin: 16px 0 8px; }
/* ===== 函件总库时间轴(何威260717验收录) ===== 全程用tokens令牌变量,无硬编码#颜色 */
.docs-wrap { padding: 4px 0 8px; }
.docs-header { margin-bottom: 12px; }
.docs-total { font-size: 14px; color: var(--text-secondary); margin-bottom: 10px; }
.docs-total strong { color: var(--accent); font-size: 16px; }
.docs-chips { display: flex; flex-wrap: wrap; gap: 6px; }
.doc-chip { padding: 4px 10px; font-size: 13px; border: 1px solid var(--border); border-radius: var(--radius-sm);
  background: var(--bg); color: var(--text-secondary); cursor: pointer; white-space: nowrap; }
.doc-chip:hover { border-color: var(--accent); color: var(--text-primary); }
.doc-chip.active { background: var(--accent); color: var(--bg); border-color: var(--accent); }
/* 单行:grid分列 文号|类型|标题|金额|日期|展开箭头 */
.doc-row { border-bottom: 1px solid var(--border); padding: 8px 0; cursor: pointer; }
.doc-row:hover { background: var(--card-bg); }
.doc-row-open { background: var(--card-bg); }
.doc-row-main { display: grid; grid-template-columns: 110px 64px 1fr 90px 86px 20px; gap: 8px; align-items: center; }
.doc-no { font-size: 13px; color: var(--text-primary); font-weight: 500; word-break: break-all; }
.doc-nono { color: var(--text-secondary); font-weight: 400; font-size: 12px; }
.doc-title-cell { font-size: 14px; min-width: 0; }
.doc-title-link { color: var(--link); text-decoration: none; word-break: break-word; }
.doc-title-link:hover { text-decoration: underline; }
.doc-title-text { color: var(--text-primary); word-break: break-word; }
.doc-amt { color: var(--accent); font-size: 13px; white-space: nowrap; font-weight: 500; }
.doc-amt-none { color: var(--text-secondary); font-size: 13px; }
.doc-date { color: var(--text-secondary); font-size: 13px; white-space: nowrap; }
.doc-nodate { color: var(--text-muted); font-size: 12px; font-style: italic; }
.doc-expand-hint { color: var(--text-secondary); font-size: 12px; text-align: center; }
/* 类型标签:7种类型+其他,各用不同令牌色区分(背景淡+文字主色+边框同系) */
.doc-tag { display: inline-block; padding: 2px 6px; font-size: 11px; border-radius: var(--radius-sm);
  border: 1px solid var(--border); white-space: nowrap; text-align: center; }
.dt-direction { background: var(--accent-light); color: var(--accent); border-color: var(--accent); }
.dt-gwl { background: var(--card-bg); color: var(--link); border-color: var(--link); }
.dt-pay { background: var(--bg); color: var(--accent); border-color: var(--accent); }
.dt-quote { background: var(--card-bg); color: var(--text-primary); border-color: var(--text-secondary); }
.dt-notice { background: var(--accent-light); color: var(--text-primary); border-color: var(--border); }
.dt-result { background: var(--accent); color: var(--bg); border-color: var(--accent); }
.dt-loan { background: var(--card-bg); color: var(--link); border-color: var(--border); }
.dt-other { background: var(--bg); color: var(--text-secondary); border-color: var(--border); }
/* 展开详情区 */
.doc-detail { padding: 10px 4px 6px; border-top: 1px dashed var(--border); margin-top: 8px; }
.doc-detail-inner { font-size: 13px; line-height: 1.9; }
.doc-detail-row { display: flex; gap: 10px; padding: 2px 0; }
.doc-detail-label { color: var(--text-secondary); min-width: 64px; flex-shrink: 0; }
.doc-docid, .doc-ref-id { font-family: monospace; font-size: 12px; color: var(--link);
  background: var(--bg); padding: 1px 5px; border-radius: 3px; word-break: break-all; }
.doc-refs { display: flex; flex-wrap: wrap; gap: 4px; }
.doc-verified { color: var(--accent); }
.doc-unverified { color: var(--text-muted); }
.doc-orig-link { color: var(--link); text-decoration: none; }
.doc-orig-link:hover { text-decoration: underline; }
.doc-empty { text-align: center; color: var(--text-muted); padding: 20px; font-size: 14px; }
/* 窄屏(<640px):grid列改纵向堆叠,文号/类型/金额/日期挤一行,标题独占 */
@media (max-width: 640px) {
  .doc-row-main { grid-template-columns: 1fr 1fr; gap: 4px 8px; }
  .doc-no { grid-column: 1; }
  .doc-type-cell { grid-column: 2; text-align: right; }
  .doc-title-cell { grid-column: 1 / -1; }
  .doc-amt-cell { grid-column: 1; }
  .doc-date-cell { grid-column: 2; text-align: right; }
  .doc-expand-hint { display: none; }
}
