/* ============================================================
   文件:frontend/style.css
   作用:dilution alpha 看板的全部样式 —— 报刊社论风、信号优先
   说明:米黄纸张 + 牛血红配色,标题用 Fraunces,数据用 IBM Plex Mono
   ============================================================ */
:root{
  --paper:#f4efe2; --paper-2:#efe8d6; --paper-3:#e9e0cb;
  --ink:#1d1813; --ink-soft:#4b4239; --muted:#8a7f6b;
  --rule:#d8cdb4; --rule-2:#c8bb9c;
  --oxblood:#8e2f1c; --oxblood-2:#b04524; --gold:#97701c; --slate:#54636a;
  --hot:#9e2a14; --warm:#b07d18; --cool:#6f7d6a;            /* 热力渐变,同属米黄/牛血红色系 */
}
*{box-sizing:border-box}
html,body{margin:0}
body{background:var(--paper);color:var(--ink);font-family:"Fraunces",Georgia,serif;-webkit-font-smoothing:antialiased}
.mono,.dt,.imeta,.stamp,.amt,.heat,.risk,.tag,.tape,.views,.pill,.flbl,.fin,.exl,.pager,.cnt,.src{font-variant-numeric:tabular-nums}

/* ── 瘦身 sticky header ─────────────────────────────────────────────── */
.masthead{position:sticky;top:0;z-index:30;background:var(--paper);border-bottom:1.5px solid var(--ink)}
.bar{display:flex;align-items:center;gap:16px;padding:10px clamp(14px,3vw,40px);flex-wrap:wrap}
.wm{font-weight:900;font-size:23px;letter-spacing:-.02em;color:var(--ink);text-decoration:none}
.wm .d{color:var(--oxblood)}
.tape{display:flex;gap:0;font-family:"IBM Plex Mono",monospace}
.tape .c{padding:0 14px;border-left:1px solid var(--rule);line-height:1}
.tape .k{font-size:9px;letter-spacing:.16em;text-transform:uppercase;color:var(--muted);display:block;margin-bottom:3px}
.tape .v{font-size:15px;font-weight:600}.tape .v.hot{color:var(--oxblood)}.tape .v.gold{color:var(--gold)}
.search{position:relative;margin-left:auto;flex:1;min-width:170px;max-width:320px}
.search input{width:100%;font-family:"IBM Plex Mono",monospace;font-size:13px;color:var(--ink);background:var(--paper-2);
  border:1px solid var(--rule-2);border-radius:2px;padding:8px 12px 8px 30px;outline:none}
.search input:focus{border-color:var(--oxblood)}
.search .mag{position:absolute;left:10px;top:8px;color:var(--muted)}
.views{display:flex;border:1.5px solid var(--ink);border-radius:2px;overflow:hidden;font-family:"IBM Plex Mono",monospace}
.views button{font:inherit;font-size:11px;letter-spacing:.1em;text-transform:uppercase;padding:8px 13px;border:none;
  background:transparent;color:var(--ink-soft);cursor:pointer;border-right:1px solid var(--ink)}
.views button:last-child{border-right:none}
.views button.on{background:var(--ink);color:var(--paper)}
.views button.on.alpha{background:var(--oxblood)}

/* ── 过滤条 + 抽屉 ──────────────────────────────────────────────────── */
.filters{display:flex;align-items:center;gap:14px;padding:8px clamp(14px,3vw,40px);border-bottom:1px solid var(--rule);flex-wrap:wrap}
.fgrp{display:flex;gap:5px;align-items:center}
.flbl{font-family:"IBM Plex Mono",monospace;font-size:9px;letter-spacing:.16em;text-transform:uppercase;color:var(--muted);margin-right:2px}
.pills{display:flex;gap:5px;flex-wrap:wrap}
.pill{font-family:"IBM Plex Mono",monospace;font-size:11px;letter-spacing:.04em;padding:5px 9px;border:1px solid var(--rule-2);
  border-radius:2px;background:transparent;color:var(--ink-soft);cursor:pointer}
.pill:hover{border-color:var(--ink-soft);color:var(--ink)}
.pill.on{background:var(--ink);color:var(--paper);border-color:var(--ink)}
.pill.r-HIGH.on{background:var(--oxblood);border-color:var(--oxblood);color:#fff}
.pill.r-MEDIUM.on{background:var(--gold);border-color:var(--gold);color:#1a1308}
.pill.r-LOW.on{background:var(--slate);border-color:var(--slate);color:#fff}
.more{font-family:"IBM Plex Mono",monospace;font-size:11px;color:var(--oxblood);background:none;border:none;cursor:pointer;text-transform:uppercase;letter-spacing:.08em}
.drawer{display:flex;gap:18px;align-items:center;padding:10px clamp(14px,3vw,40px);border-bottom:1px solid var(--rule);background:var(--paper-2);flex-wrap:wrap}
.fld{font-family:"IBM Plex Mono",monospace;font-size:11px;color:var(--muted);display:inline-flex;gap:6px;align-items:center}
.drawer select,.drawer input[type=number]{font-family:"IBM Plex Mono",monospace;font-size:12px;background:var(--paper);border:1px solid var(--rule-2);border-radius:2px;padding:6px 8px;color:var(--ink)}
.drawer input[type=number]{width:74px}
.china-only{font-family:"IBM Plex Mono",monospace;font-size:11px;color:var(--muted);cursor:pointer;user-select:none}
.wl-mini{display:inline-flex;gap:6px;align-items:center}
.wl-chips{display:inline-flex;gap:5px}
.wl-chip{font-family:"IBM Plex Mono",monospace;font-size:11px;background:var(--paper-3);border:1px solid var(--rule-2);border-radius:2px;padding:3px 6px}
.wl-x{cursor:pointer;color:var(--muted);margin-left:5px}.wl-x:hover{color:var(--oxblood)}
.wl-add-btn{font-family:"IBM Plex Mono",monospace;border:1px solid var(--rule-2);background:var(--paper);border-radius:2px;width:22px;height:22px;cursor:pointer;color:var(--ink-soft)}
.wl-add{font-family:"IBM Plex Mono",monospace;font-size:11px;width:70px;border:1px solid var(--oxblood);border-radius:2px;padding:3px 6px;text-transform:uppercase}
.wl-msg{font-family:"IBM Plex Mono",monospace;font-size:10px;color:var(--oxblood)}

/* ── 看板主体 ───────────────────────────────────────────────────────── */
main{max-width:1340px;margin:0 auto;padding:0 clamp(14px,3vw,40px)}
.board{width:100%;border-collapse:collapse;margin-top:4px}
.board thead th{font-family:"IBM Plex Mono",monospace;font-size:9.5px;letter-spacing:.16em;text-transform:uppercase;color:var(--muted);
  text-align:left;padding:13px 10px 9px;border-bottom:1.5px solid var(--ink);position:sticky;top:51px;background:var(--paper);white-space:nowrap}
.board thead th.num{text-align:right}
.board thead th.sortable{cursor:pointer}.board thead th.sortable:hover{color:var(--ink)}
tr.ev{border-bottom:1px solid var(--rule);cursor:pointer;animation:rise .3s ease both}
tr.ev:hover{background:var(--paper-2)}
tr.ev td:first-child{box-shadow:inset 4px 0 0 var(--rail,transparent)}
@keyframes rise{from{opacity:0;transform:translateY(5px)}}
td{padding:12px 10px;vertical-align:baseline;font-size:14px}
td.num{text-align:right;font-family:"IBM Plex Mono",monospace}
.dt{font-family:"IBM Plex Mono",monospace;font-size:12px;color:var(--ink-soft);white-space:nowrap}
.dt .yr{display:block;font-size:10px;color:var(--muted)}
.iss{font-weight:600;font-size:16px;line-height:1.15}
.iss .star{color:var(--gold);margin-right:4px}
.iss .caret{color:var(--muted);font-size:11px;margin-left:6px}
.imeta{font-family:"IBM Plex Mono",monospace;font-size:11px;color:var(--muted);margin-top:3px;display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.imeta .tkr{color:var(--ink);font-weight:600}
.badge{font-size:9px;letter-spacing:.05em;padding:1px 5px;border:1px solid var(--rule-2);border-radius:2px}
.badge.cn{color:var(--oxblood);border-color:var(--oxblood)}
.stamp{font-family:"IBM Plex Mono",monospace;font-size:10px;letter-spacing:.08em;padding:3px 7px;border:1px solid var(--c);color:var(--c);border-radius:2px;white-space:nowrap}
.amt{color:var(--ink)}.amt.nil{color:var(--muted)}
.heat{font-weight:600;white-space:nowrap}.heat .nil{font-weight:400;color:var(--muted)}
.risk{font-family:"IBM Plex Mono",monospace;font-weight:600;font-size:12px;padding:3px 8px;border-radius:2px;white-space:nowrap}
.risk.HIGH{background:var(--oxblood);color:#fff}.risk.MEDIUM{background:var(--gold);color:#1a1308}.risk.LOW{background:rgba(84,99,106,.2);color:var(--slate)}
.risk.none{border:1px dashed var(--rule-2);color:var(--muted);font-weight:400}
.tags{margin-top:5px;display:flex;gap:5px;flex-wrap:wrap}
.tag{font-family:"IBM Plex Mono",monospace;font-size:9.5px;color:var(--ink-soft);background:var(--paper-3);padding:2px 6px;border-radius:2px}
.cardrow{display:none}

/* 展开详情行 */
tr.detail td{padding:0;border-bottom:1px solid var(--rule)}
.det{padding:16px 20px 20px;background:var(--paper-2);display:grid;grid-template-columns:1.5fr 1fr;gap:22px 26px;animation:rise .2s ease}
.thesis{grid-column:1;margin:0;font-style:italic;font-size:16px;line-height:1.5}.thesis .q{color:var(--oxblood);font-size:20px}
.det .tags{grid-column:1}
.fin{grid-column:2;grid-row:1/3;font-family:"IBM Plex Mono",monospace;display:grid;grid-template-columns:auto auto;gap:5px 18px;align-content:start;font-size:13px}
.fin .k{font-size:9px;letter-spacing:.12em;text-transform:uppercase;color:var(--muted)}
.fin .v.neg{color:var(--oxblood)}
.excerpt{grid-column:1}.excerpt .exl{font-family:"IBM Plex Mono",monospace;font-size:9px;letter-spacing:.14em;text-transform:uppercase;color:var(--muted)}
.excerpt p{margin:4px 0 0;font-family:"Fraunces",Georgia,serif;font-size:14px;line-height:1.5;color:var(--ink-soft)}
/* 行内信号标签(Use of proceeds 等):小号 mono,oxblood 强调 */
.excerpt .sigl{font-family:"IBM Plex Mono",monospace;font-size:9px;letter-spacing:.12em;text-transform:uppercase;color:var(--oxblood);margin-right:6px;vertical-align:1px}
/* AI source_quote(verdict 依据):左侧 oxblood 竖线 + 斜体,与判定绑定 */
.excerpt .srcq{border-left:2px solid var(--oxblood);padding-left:10px;font-style:italic}
.excerpt .vb{font-family:"IBM Plex Mono",monospace;font-size:8px;letter-spacing:.14em;text-transform:uppercase;color:var(--muted);margin-right:8px;font-style:normal;vertical-align:1px}
.dmeta{grid-column:1/-1;display:flex;gap:16px;align-items:center;border-top:1px solid var(--rule);padding-top:10px;font-family:"IBM Plex Mono",monospace;font-size:12px;color:var(--muted)}
.dmeta a{color:var(--gold);text-decoration:none}.dmeta a:hover{text-decoration:underline}

.empty{padding:50px;text-align:center;color:var(--muted);font-family:"IBM Plex Mono",monospace}
.demoted{font-family:"IBM Plex Mono",monospace;font-size:11px;color:var(--muted);padding:12px 10px;border-bottom:1px solid var(--rule)}

/* ── 页脚 / 分页器 ──────────────────────────────────────────────────── */
.foot{max-width:1340px;margin:8px auto 0;display:flex;align-items:center;gap:16px;padding:16px clamp(14px,3vw,40px) 40px;
  border-top:1.5px solid var(--ink);font-family:"IBM Plex Mono",monospace;font-size:12px;color:var(--ink-soft)}
.foot .cnt b{color:var(--oxblood)}
.pager{display:flex;align-items:center;gap:6px}
.pager button{font-family:"IBM Plex Mono",monospace;background:var(--paper-2);border:1px solid var(--rule-2);border-radius:2px;padding:5px 11px;cursor:pointer}
.pager button:disabled{opacity:.35;cursor:default}
.pager .at{color:var(--muted);padding:0 4px}
.pager select{font-family:"IBM Plex Mono",monospace;background:var(--paper-2);border:1px solid var(--rule-2);border-radius:2px;padding:5px 7px}
.foot .src{margin-left:auto;color:var(--muted)}

/* ── 移动端:表格 → 卡片 ────────────────────────────────────────────── */
@media(max-width:760px){
  .board thead{display:none}
  .board,.board tbody,tr.ev,tr.detail,td{display:block;width:100%}
  tr.ev{border:1px solid var(--rule);border-left:4px solid var(--rail,var(--rule));border-radius:3px;margin:10px 0;padding:10px 12px}
  tr.ev td{padding:2px 0;box-shadow:none!important;text-align:left}
  td.num{text-align:left}
  td.amt,td.heat{display:none}                       /* 原始指标列隐藏;改在 .cardrow 里汇总展示 */
  .cardrow{display:flex;gap:14px;margin-top:6px;font-family:"IBM Plex Mono",monospace;font-size:12px;color:var(--ink-soft)}
  .det{grid-template-columns:1fr}
  .fin{grid-row:auto}
  .search{order:6;max-width:none;margin-left:0}
  .board thead th{top:0}
}

/* ----- Exports 视图 ----- */
.exports { padding: 1rem 1.25rem; }
.exports-head { display: flex; align-items: center; gap: .75rem; margin-bottom: .75rem; }
.gen-btn { font: 600 .9rem/1 "IBM Plex Mono", monospace; padding: .5rem .9rem; cursor: pointer;
  background: var(--accent, #8e2f1c); color: #f4efe3; border: none; border-radius: 4px; }
.gen-btn:disabled { opacity: .55; cursor: default; }
.gen-msg { font-size: .85rem; color: #8e2f1c; }
.export-list { width: 100%; border-collapse: collapse; font-size: .9rem; }
.export-list td { padding: .45rem .6rem; border-bottom: 1px solid rgba(0,0,0,.08); }
.export-list .xf { font-family: "IBM Plex Mono", monospace; }
.export-list .xrun td { color: #8e2f1c; font-style: italic; }
.export-list .xd a { font-weight: 600; }
