/* 研报列表与阅读样式 */
.reports-wrap { max-width: 880px; margin: 0 auto; padding: 16px; }
.reports-header { display:flex; justify-content:space-between; align-items:center; margin-bottom:12px; }
.reports-title { font-size:20px; font-weight:600; }
.reports-actions { display:flex; gap:8px; align-items:center; }
.reports-search { display:flex; gap:8px; }
.reports-search input { padding:8px 10px; border:1px solid #e5e7eb; border-radius:8px; width:260px; }
.reports-search button { padding:8px 12px; border:none; background:#2f6df6; color:#fff; border-radius:8px; cursor:pointer; }
.report-list { margin-top:2px; margin-bottom: 80px; }
/* 列表模式 */
.list-wrap { display:grid; grid-template-columns: 1fr; gap:12px; }
@media (min-width: 768px) { .list-wrap { grid-template-columns: 1fr 1fr; } }
.list-item { display:flex; align-items:center; gap:12px; padding:10px; background:#fff; /*border:1px solid #e5e7eb; */border-radius:12px; /*box-shadow:0 2px 8px rgba(0,0,0,.06);*/ cursor:pointer; }
.list-cover { display:none; }
.list-item .cover-wrap { position:relative; width:72px; height:96px; border: 1px solid #dee2ea50; border-radius:6px; overflow:hidden; }
.list-item .cover-img.real { width:100%; height:100%; object-fit:cover; display:block; }
.list-item .mask { position:absolute; inset:0; background:rgba(17,17,17,.4); transition: opacity .2s ease-in-out; }
.list-item.downloaded .mask { opacity:0; pointer-events:none; }
.list-item .ring { position:absolute; left:50%; top:50%; transform: translate(-50%, -50%); width:40px; height:40px; display:none; }
.list-item.downloading .ring { display:block; }
.list-item .ring svg { transform:rotate(-90deg); }
.list-item .ring circle.bg { stroke:#e5e7eb; stroke-width:6; fill:none; }
.list-item .ring circle.fg { stroke:#2f6df6; stroke-width:6; fill:none; stroke-linecap:round; stroke-dasharray: 0 100; transition: stroke-dasharray .1s linear; }
.list-right { flex:1; height: 96px; min-width:0; display:flex; flex-direction:column; justify-content:space-between; gap:8px; }
.list-top { display:flex; flex-direction:column; gap:6px; }
.list-title { font-size:14px; font-weight:600; color:#111; display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden; text-overflow:ellipsis; white-space:normal; line-height:1.4; max-height:2.8em; }
.list-status { font-size:12px; color:#6b7280; }
.list-status.ok { color:#16a34a; }
.list-bottom { display:flex; align-items:center; gap:18px; }
.list-bottom button { border:none; background:transparent; color:#23262980; display:inline-flex; align-items:center; gap:4px; padding:0; cursor:pointer; font-size: 14px; font-weight: 300;}
.list-bottom button .btn-icon { width:18px; height:18px; display:block; }
.list-bottom button:hover { filter: brightness(1.05); }
/* 三列封面网格 */
.report-grid { display:grid; grid-template-columns: repeat(3, 1fr); gap:12px; }
.grid-item { position:relative; cursor:pointer; }
.grid-item .cover-wrap { position:relative; border: 1px solid #dee2ea50; border-radius:6px; overflow:hidden; aspect-ratio: 3 / 4; }
.grid-item .cover-img.real { width:100%; height:100%; object-fit:cover; display:block; }
.grid-item .mask { position:absolute; inset:0; background:rgba(17,17,17,.6); transition: opacity .2s ease-in-out; }
.grid-item.downloaded .mask { opacity:0; pointer-events:none; }
.grid-item .ring { position:absolute; left:50%; top:50%; transform: translate(-50%, -50%); width:64px; height:64px; display:none; }
.grid-item .ring svg { width:100%; height:100%; }
.grid-item .ring circle { fill:none; stroke-width:6; stroke-linecap:round; }
.grid-item .ring .bg { stroke: rgba(255,255,255,.25); }
/* 近似总长度 100，前端以 strokeDasharray 控制前景圆环进度 */
.grid-item .ring .fg { stroke: #ffffff; stroke-dasharray: 0 100; transition: stroke-dasharray .1s linear; }
.grid-item.downloaded .ring { display:none; }

/* 封面下方信息 */
.grid-item .meta { margin-top:6px; }
.grid-item .meta .title { font-size:14px; font-weight:600; color:#111827; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.grid-item .meta .status { margin-top:4px; font-size:12px; color:#6b7280; }
.grid-item .meta .status.ok { color:#16a34a; }

.viewer-overlay { position:fixed; inset:0; background:rgba(0,0,0,.45); display:none; align-items:flex-end; justify-content:center; z-index:3000; padding-top:10px; }
.viewer-overlay.show { display:flex; }
.viewer-box { width:100%; max-width:880px; height:calc(100vh - 10px); background:#fff; border-top-left-radius:16px; border-top-right-radius:16px; border-bottom-left-radius:0; border-bottom-right-radius:0; overflow:hidden; box-shadow:0 -8px 20px rgba(0,0,0,.2); display:flex; flex-direction:column; transform: translateY(100%); animation: slideUp .25s ease-out forwards; }
/* 安卓 Chrome/Edge 等支持动态视口单位时，使用 100dvh 以剔除地址栏高度 */
@supports (height: 100dvh) {
  .viewer-box { height: calc(100dvh - 10px); }
}
.viewer-top { padding:10px 14px; background:#f9fafb; border-bottom:1px solid #e5e7eb; display:flex; justify-content:space-between; align-items:center; }
.viewer-close { border:none; background:#ef4444; color:#fff; border-radius:8px; padding:6px 10px; cursor:pointer; }
.viewer-frame { flex:1; border:none; }
/* pdf.js 渲染容器：在安卓微信中使用，支持滚动 */
.pdf-viewer { display:none; width:100%; height:calc(100% - 52px); overflow:auto; overflow-x:hidden; background:#f7f7f8; }
.pdf-viewer canvas { display:block; margin:12px auto; box-shadow:0 2px 8px rgba(0,0,0,.08); background:#fff; width:100%; height:auto; }
.report-grid { display:grid; grid-template-columns: repeat(3, 1fr); gap:12px; }
.grid-item { position:relative; overflow:hidden; }
.grid-item .cover-img { width:100%; height:0; padding-bottom: 66.66%; object-fit:cover; display:block; }
.grid-item .cover-img.real {padding-bottom:0; }
.grid-item .mask { position:absolute; inset:0; background:rgba(17,24,39,.6); transition:opacity .2s ease; }
.grid-item.downloaded .mask { opacity:0; pointer-events:none; }
.grid-item .ring { position:absolute; left:50%; top:50%; transform: translate(-50%, -50%); width:40px; height:40px; display:none; }
.grid-item.downloading .ring { display:block; }
.grid-item .ring svg { transform:rotate(-90deg); }
.grid-item .ring circle.bg { stroke:#e5e7eb; stroke-width:6; fill:none; }
.grid-item .ring circle.fg { stroke:#2f6df6; stroke-width:6; fill:none; stroke-linecap:round; stroke-dasharray: 0 100; transition: stroke-dasharray .1s linear; }
.grid-item .meta .title { font-weight:600; }

.info-overlay { position:fixed; inset:0; background:rgba(0,0,0,.45); display:none; align-items:center; justify-content:center; z-index:3000; }
.info-overlay.show { display:flex; }
.info-box { position:relative; width:92%; max-width:420px; background:#fff; color:#111; border-radius:16px; box-shadow:0 8px 24px rgba(0,0,0,.25); overflow:visible; padding:24px 16px 18px; display:flex; flex-direction:column; align-items:center; justify-content:center; }
.info-cover { position:relative; width:40%; max-width:240px; aspect-ratio: 3 / 4; height:auto; display:block; object-fit:cover; background:#f3f4f6; border-radius:6px; box-shadow:0 2px 12px rgba(0,0,0,.15); margin-top:-80px; margin-bottom:12px; }
.info-title { font-size:18px; font-weight:700; padding:0; text-align:center; }
.info-summary { font-size:14px; line-height:1.7; color:#374151; padding: 10px 0 0; text-align: justify; max-height: 30vh; overflow-y: auto; -webkit-overflow-scrolling: touch; }
.info-actions { padding:16px 14px 0 18px; display:flex; justify-content:center; }
.info-actions .btn-primary { background:#2f6df6; color:#fff; border:none; border-radius:10px; padding:12px 58px; }

html, body { overscroll-behavior-y: contain; }

@keyframes slideUp {
  from { transform: translateY(100%); }
  to { transform: translateY(0); }
}
.audio-overlay { position:fixed; inset:0; background:rgba(0,0,0,.6); display:none; align-items:center; justify-content:center; z-index:3100; }
.audio-overlay.show { display:flex; }
.audio-box { width:94%; max-width:540px;  color:#fff; border-radius:16px; box-shadow:0 8px 24px rgba(0,0,0,.35); overflow:hidden; position:relative; -webkit-backdrop-filter: saturate(180%) blur(16px); backdrop-filter: saturate(180%) blur(10px); background-color: rgb(0 0 0 / 72%);}
.audio-header { display:flex; align-items:center; gap:12px; padding:12px; border-bottom:1px solid #222; }
.audio-cover { width:64px; height:auto; border-radius:4px; object-fit:cover; background:#222; }
.audio-title { font-weight:700; font-size:16px; flex:1; margin-top: 26px;}
.audio-controls { padding:30px 46px; display:flex; align-items:center; justify-content:space-between; gap:12px; border-top:1px solid #221a1f; }
.audio-progress { padding:6px 16px 26px; display:flex; flex-direction:column; gap:8px; }
.audio-btn { border:none; background:transparent; color:#fff; cursor:pointer; }
.audio-btn.btn-text { font-size:18px; color:#ddd; }
.audio-btn.btn-circle { width: 36px; height:30px; border-radius:999px; display:flex; align-items:center; justify-content:center; }
.audio-btn.btn-circle img { width:20px; height:20px; display:block; }
.audio-slider { width:100%; -webkit-appearance:none; appearance:none; height:4px; border-radius:999px; background:#333; outline:none; }
.audio-times { display:flex; align-items:center; justify-content:space-between; }
.audio-time { font-size:12px; color:#bbb; }
.audio-mini { position:fixed; left:16px; right:16px; bottom:16px; background:#111; border:1px solid #11111150; color:#fff; border-radius:12px; display:none; align-items:center; gap:10px; padding:10px; z-index:3000; box-shadow:0 6px 16px rgba(0,0,0,.3); cursor:pointer; }
.audio-mini.show { display:flex; }
.audio-mini .mini-cover { width:34px; height:auto; border-radius:4px; object-fit:cover; background:#222; }
.audio-mini .mini-title { font-size:16px; color:#ddd; flex:1; white-space:nowrap; overflow-x:auto; overflow-y:hidden; -webkit-overflow-scrolling: touch; }
.audio-mini .mini-title::-webkit-scrollbar { display:none; }
.audio-mini.blur { -webkit-backdrop-filter: saturate(180%) blur(16px); backdrop-filter: saturate(180%) blur(10px); background-color: rgba(29, 29, 29, 0.50);  }
.audio-play-btn { position:absolute; left:8px; bottom:8px; background:#111; color:#fff; border:1px solid #ffffff50; border-radius:999px; padding:4px; font-size:12px; display:inline-flex; align-items:center; gap:6px; cursor:pointer; box-shadow:0 2px 8px rgba(0,0,0,.25); }
.audio-play-btn img { width:16px; height:16px; display:block; }
.audio-play-btn:hover { filter:brightness(1.1); }
.audio-close { position:absolute; right:10px; top:10px; width:24px; height:24px; border-radius:999px; background:transparent; display:flex; align-items:center; justify-content:center; }
.audio-close img { width:12px; height:12px; display:block; }
.audio-btn, .audio-play-btn, .audio-mini { -webkit-tap-highlight-color: transparent; }
.audio-btn:focus, .audio-play-btn:focus, .audio-mini:focus { outline: none; }
