/* ============================================================
   新股研选 · 设计系统样式表 ds.css v3.0
   暖纸编辑风 + 品牌橙（近似富途橙 #FF6A00，上线前以官方品牌规范核对）
   三原则：判断先于数据 · 颜色即语义 · 永远给出下一步
   ============================================================ */

/* ---------------- 设计令牌 Design Tokens ---------------- */
:root{
  /* 色彩 · 中性 */
  --paper:#f6f1e8;         /* 页面底 · 暖纸 */
  --surface:#ffffff;       /* 卡片面 */
  --ink:#1f1b16;           /* 主文字 · 暖黑 */
  --ink-2:#5c554b;         /* 次要文字 */
  --ink-3:#8a8378;         /* 辅助/占位（仅装饰性信息） */
  --line:#e8e0d2;          /* 分隔线 */
  --line-2:#d6ccba;        /* 强描边 */
  /* 色彩 · 品牌（行动色域） */
  --brand-hi:#ff6a00;      /* 品牌橙 · 图形：标志、当前态指示条、图表强调（不承载白字） */
  --brand:#cc4a00;         /* 品牌橙 · 行动：主按钮底（白字 4.6:1） */
  --brand-deep:#a83e00;    /* 橙色文字 / hover */
  --brand-soft:#fff1e6;    /* 选中底/热点标签底 */
  /* 色彩 · 语义（结果域：红涨绿跌） */
  --up:#d6403a;  --up-bg:#fde8e8;
  --down:#1f9d6b; --down-bg:#e5f4ee;
  --flat:#8a8378; --flat-bg:#f1ede5;
  /* 色彩 · 辅助 */
  --info:#2f6fb2; --info-bg:#e8f0fb;
  --gold:#b7791f; --gold-bg:#fef3d8;
  /* 色彩 · 日历里程碑（事件域，独立于涨跌语义） */
  --evt-start:#2f6fb2;      /* 开始认购 */
  --evt-deadline:#d6403a;   /* 认购截止 */
  --evt-grey:#7c5cbf;       /* 暗盘 */
  --evt-list:#b7791f;       /* 上市（不用绿色，绿色在港股代表下跌） */
  /* 推荐等级（观点域，独立于涨跌） */
  --rec-strong:#a83e00; --rec-strong-bg:#ffe4cf;  /* A · 综合条件较强 */
  --rec-mid:#8a4b12;    --rec-mid-bg:#fff1e3;     /* B · 综合条件中上 */
  --rec-hold:#5c554b;   --rec-hold-bg:#f1ede5;    /* C · 综合条件一般 */
  --rec-avoid:#1f1b16;  --rec-avoid-bg:#e9e4da;   /* D · 综合条件偏弱 */
  /* 研选评级徽章 v3.1（M2.6，热力方案）：一个色值派生浅底与描边；不用绿（下跌）与纯红（上涨） */
  --grade-a:#a83e00; --grade-b:#8a5a00; --grade-c:#45607f; --grade-d:#5b616b;
  /* 研究页面：深墨蓝底与无障碍文字 */
  --research-ink:#2a1e14; --research-line:#4d3d2f;
  --research-muted:#dccdb9; --research-accent:#ffb27a;
  --font-caption:12px; --font-body:14px; --font-heading-md:20px;
  --font-heading-lg:28px; --font-heading-xl:32px; --font-heading-display:40px;
  --font-score:56px;
  /* 字体 */
  --sans:"Noto Sans SC","PingFang SC","Hiragino Sans GB","Microsoft YaHei",system-ui,sans-serif;
  --mono:"SF Mono","JetBrains Mono",Consolas,monospace;
  /* 间距 8pt */
  --sp-1:4px; --sp-2:8px; --sp-3:12px; --sp-4:16px;
  --sp-5:24px; --sp-6:32px; --sp-7:48px; --sp-8:64px;
  /* 圆角 */
  --r-sm:6px; --r-md:8px; --r-lg:12px; --r-xl:14px; --r-pill:99px;
  /* 阴影（仅两档） */
  --shadow-1:0 1px 2px rgba(31,27,22,.05),0 2px 8px rgba(31,27,22,.05);
  --shadow-2:0 4px 16px rgba(31,27,22,.10);
  /* 动效 */
  --tr:180ms cubic-bezier(.2,.8,.2,1);
  /* 图标 */
  --ico-s:14px; --ico-m:16px; --ico-l:20px;
}

/* Approved desktop v2 additions; market text is independent of event/opinion colors. */
:root{
 --up-text:#b52f2b; --down-text:#15734c;
 --action-hover:#b84200; --action-pressed:#a33a00;
 --font-size-13:13px; --font-size-15:15px; --font-size-18:18px; --font-size-22:22px;
 --font-size-30:30px; --font-size-48:48px; --font-size-96:96px;
 --control-height:44px; --radius-10:10px; --page-width:1440px;
}
/* ---------------- 基础 ---------------- */
*{margin:0;padding:0;box-sizing:border-box}
html{scroll-behavior:smooth;scrollbar-gutter:stable}
body{background:var(--paper);color:var(--ink);font-family:var(--sans);font-size:15px;line-height:1.6;
  -webkit-font-smoothing:antialiased}
a{color:var(--info);text-decoration:none}
.num,.mono{font-variant-numeric:tabular-nums;font-feature-settings:"tnum"}
.mono{font-family:var(--mono)}
:focus-visible{outline:2px solid var(--brand);outline-offset:2px;border-radius:4px}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}

/* ---------------- 布局 ---------------- */
/* 全站统一版心：桌面 v2 在文末使用 --page-width=1440px，窄屏保留现有行为 */
.shell{max-width:1400px;margin:0 auto;padding:0 var(--sp-6)}
.layout{display:grid;grid-template-columns:1fr 300px;align-items:start}
.col-side{position:sticky;top:76px}
@media (max-width:980px){
  .shell{padding:0 var(--sp-4)}
  .layout{grid-template-columns:1fr}
  .col-side{position:static}
}

/* ---------------- 顶部导航 ---------------- */
.appbar{position:sticky;top:0;z-index:50;background:rgba(255,255,255,.94);backdrop-filter:blur(8px);
  border-bottom:1px solid var(--line)}
.appbar-in{max-width:1400px;margin:0 auto;padding:0 var(--sp-6);height:60px;display:flex;align-items:center;gap:var(--sp-5)}
.logo{display:flex;align-items:center;gap:10px;font-weight:800;font-size:17px;color:var(--ink);text-decoration:none}
.logo .mark{width:30px;height:30px;border-radius:8px;background:linear-gradient(135deg,var(--brand),var(--brand-deep));
  color:#fff;display:grid;place-items:center;font-size:13px;font-weight:800}
/* 隐藏导航内部横向滚动条（滑轨）：极窄屏仍可手势滑动，但不渲染滚动条 */
nav.main{display:flex;flex:1;overflow-x:auto;scrollbar-width:none}
nav.main::-webkit-scrollbar{display:none}
/* 标签项固定宽度：切换页面时导航不跳动（激活态仅变色，不改变盒宽） */
nav.main a{position:relative;text-decoration:none;color:var(--ink-2);font-size:14px;font-weight:600;
  min-width:92px;padding:19px 12px;display:inline-flex;align-items:center;justify-content:center;
  white-space:nowrap;transition:color 120ms}
nav.main a:hover{color:var(--ink)}
nav.main a.on{color:var(--brand-deep);font-weight:700}
nav.main a.on::after{content:"";position:absolute;left:50%;transform:translateX(-50%);bottom:0;width:44px;height:3px;
  border-radius:3px 3px 0 0;background:var(--brand)}
/* 中窄屏：收紧搜索框与标签间距，保证四个标签始终一行放下、无溢出滚动条 */
@media (max-width:1200px){
  .appbar-in{gap:var(--sp-4)}
  .searchbar{width:180px}
  nav.main a{min-width:72px;padding:19px 8px}
}
.appbar .grow{flex:1}
.searchbar{display:flex;align-items:center;gap:8px;background:#f4f1ea;border:1px solid transparent;
  border-radius:var(--r-pill);padding:7px 14px;width:220px;color:var(--ink-3);font-size:13px;transition:all var(--tr)}
.searchbar:focus-within{background:#fff;border-color:var(--brand);box-shadow:0 0 0 3px rgba(204,74,0,.12)}
.searchbar input{border:none;outline:none;background:transparent;font:inherit;width:100%;color:var(--ink)}
.icon-btn{width:34px;height:34px;border-radius:50%;display:grid;place-items:center;color:var(--ink-2);
  cursor:pointer;border:none;background:transparent;font-size:15px}
.icon-btn:hover{background:#f4f1ea}
@media (max-width:980px){
  .appbar-in{padding:0 var(--sp-4)}
  .searchbar{display:none}
}

/* 可关闭上下文条（数据快照说明） */
.ctx{display:flex;align-items:center;gap:10px;padding:8px 0;font-size:12.5px;color:var(--ink-2);border-bottom:1px solid var(--line)}
.ctx .dot{width:6px;height:6px;border-radius:50%;background:var(--gold);flex:none}
.ctx a{margin-left:auto;font-weight:600;white-space:nowrap}
.ctx .x{cursor:pointer;color:var(--ink-3);border:none;background:none;font-size:14px;padding:0 2px}
.ctx .x:hover{color:var(--ink)}

/* ---------------- 页头 ---------------- */
.page-head h1{font-size:26px;font-weight:800;letter-spacing:-.01em}
.page-head .sub{color:var(--ink-3);font-size:13px;margin-top:2px}
.page-head .sub b{color:var(--brand-deep)}
.head-row{display:flex;align-items:flex-end;justify-content:space-between;gap:var(--sp-4);flex-wrap:wrap}

/* ---------------- 按钮 ---------------- */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;font-family:var(--sans);
  font-weight:700;border:none;border-radius:var(--r-md);cursor:pointer;white-space:nowrap;
  text-decoration:none;transition:all var(--tr);user-select:none}
.btn:active{transform:translateY(0) scale(.99)}
.btn:disabled{opacity:.45;cursor:not-allowed;transform:none!important;box-shadow:none!important}
.btn-lg{height:var(--control-height);padding:0 24px;font-size:14px}
.btn-md{height:38px;padding:0 18px;font-size:13px}
.btn-sm{height:30px;padding:0 13px;font-size:12px}
.btn-pri{background:var(--brand);color:#fff}
.btn-pri:hover:not(:disabled){background:var(--brand-deep);transform:translateY(-1px);box-shadow:0 4px 12px rgba(204,74,0,.28)}
.btn-sec{background:var(--ink);color:#fff}
.btn-sec:hover:not(:disabled){background:#3a332b;transform:translateY(-1px)}
.btn-ghost{background:var(--surface);color:var(--ink-2);border:1px solid var(--line-2)}
.btn-ghost:hover:not(:disabled){border-color:var(--brand);color:var(--brand-deep)}
.btn-ghost.watching{background:var(--gold-bg);border-color:var(--gold);color:#92600a}
.btn-ghost.watching:hover:not(:disabled){border-color:var(--gold);color:#92600a}
.btn-text{background:transparent;color:var(--info);padding:0 4px;height:auto;font-weight:600}
.btn-text:hover{color:var(--brand-deep);text-decoration:underline}
.btn-block{width:100%}

/* ---------------- 输入框 ---------------- */
.field{display:flex;flex-direction:column;gap:6px;margin-bottom:var(--sp-4)}
.field label{font-size:13px;font-weight:700;color:var(--ink-2)}
.input{display:flex;align-items:center;gap:8px;border:1px solid var(--line-2);border-radius:var(--r-md);
  padding:0 14px;height:42px;background:var(--surface);font-size:14px;color:var(--ink);transition:all var(--tr)}
.input input{border:none;outline:none;background:transparent;flex:1;font:inherit;color:var(--ink);min-width:0}
.input input::placeholder{color:var(--ink-3)}
.input:focus-within{border-color:var(--brand);box-shadow:0 0 0 3px rgba(204,74,0,.12)}
.input .ico{color:var(--ink-3);font-size:var(--ico-m);flex:none}
.input.error{border-color:var(--up);box-shadow:0 0 0 3px rgba(214,64,58,.10)}
.input.error:focus-within{box-shadow:0 0 0 3px rgba(214,64,58,.14)}
.hint{font-size:12px;color:var(--ink-3)}
.hint.error{color:var(--up);font-weight:600}
.hint.ok{color:var(--down);font-weight:600}
.eye{border:none;background:none;cursor:pointer;color:var(--ink-3);font-size:13px;flex:none}
.eye:hover{color:var(--ink-2)}
.checkbox{display:flex;align-items:flex-start;gap:8px;font-size:13px;color:var(--ink-2);cursor:pointer}
.checkbox input{margin-top:3px;accent-color:var(--brand);width:15px;height:15px;cursor:pointer}

/* ---------------- 分段控件 / 筛选 ---------------- */
.seg{display:inline-flex;background:#f1ede5;border-radius:var(--r-md);padding:3px}
.seg button{border:none;background:transparent;font-family:inherit;font-size:13px;font-weight:600;
  color:var(--ink-2);padding:6px 15px;border-radius:6px;cursor:pointer;transition:all 120ms}
.seg button.on{background:#fff;color:var(--brand-deep);box-shadow:var(--shadow-1)}
.seg button .ct{opacity:.55;font-family:var(--mono);font-size:11px;margin-left:3px}
.fchip{font-size:12.5px;font-weight:600;color:var(--ink-2);border:1px solid var(--line-2);
  background:var(--surface);border-radius:var(--r-pill);padding:6px 14px;cursor:pointer;transition:all var(--tr)}
.fchip:hover{border-color:var(--brand)}
.fchip.on{background:var(--brand-soft);border-color:var(--brand);color:var(--brand-deep);font-weight:700}

/* ---------------- 徽章 / 标签 ---------------- */
.verdict{font-size:12px;font-weight:700;padding:3px 11px;border-radius:var(--r-pill);white-space:nowrap}
.verdict.strong{background:var(--rec-strong-bg);color:var(--rec-strong)}
.verdict.mid{background:var(--rec-mid-bg);color:var(--rec-mid)}
.verdict.hold{background:var(--rec-hold-bg);color:var(--rec-hold)}
.verdict.avoid{background:var(--rec-avoid-bg);color:var(--rec-avoid)}
.chip{font-size:11.5px;font-weight:600;color:var(--ink-2);background:#f1ede5;border-radius:5px;padding:2px 9px;white-space:nowrap}
.pill{font-size:12px;font-weight:700;font-family:var(--mono);border-radius:6px;padding:3px 9px;display:inline-block;white-space:nowrap}
.pill.up{background:var(--up-bg);color:var(--up)}
.pill.dn{background:var(--down-bg);color:var(--down)}
.pill.flat{background:var(--flat-bg);color:var(--ink-2)}
.bdg-status{font-size:11.5px;font-weight:700;border-radius:var(--r-pill);padding:2px 10px;background:#f1ede5;color:var(--ink-2);white-space:nowrap}
.bdg-status.hot{background:var(--brand-soft);color:var(--brand-deep)}
.bdg-status.ok{background:var(--down-bg);color:var(--down)}

/* 评分进度条 */
.score-cell{display:flex;flex-direction:column;gap:4px;min-width:86px}
.score-cell .sv{font-family:var(--mono);font-weight:800;font-size:14px}
.bar{height:6px;border-radius:var(--r-pill);background:var(--line);overflow:hidden}
.bar i{display:block;height:100%;border-radius:var(--r-pill)}
.sc-bad{color:var(--up)}   .bar-bad i{background:var(--up)}
.sc-mid{color:#92600a}     .bar-mid i{background:#d89b2d}
.sc-good{color:#177a53}    .bar-good i{background:var(--down)}

/* 星级关注 */
.star{color:var(--line-2);font-size:15px;letter-spacing:2px;cursor:pointer;user-select:none;transition:color var(--tr),transform var(--tr)}
.star:hover{transform:scale(1.15)}
.star.on,.star:hover{color:var(--gold)}

/* ---------------- 卡片 ---------------- */
.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);
  box-shadow:var(--shadow-1);transition:box-shadow var(--tr),transform var(--tr)}
.card.hoverable:hover{box-shadow:var(--shadow-2);transform:translateY(-2px)}
.side-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);padding:16px 18px}
.side-card + .side-card{margin-top:var(--sp-4)}
.side-card h4{font-size:13.5px;font-weight:700;display:flex;justify-content:space-between;align-items:baseline;gap:8px}
.side-card h4 span{font-size:11px;color:var(--ink-3);font-weight:500;white-space:nowrap}

/* IPO 决策卡 */
.pick-card{border:1px solid var(--line);border-radius:var(--r-xl);padding:20px 22px;
  display:grid;grid-template-columns:auto 1fr minmax(170px,240px) auto;gap:var(--sp-5);align-items:center;
  background:var(--surface);transition:box-shadow var(--tr),transform var(--tr);position:relative}
/* 决策卡优缺点速览：按评分维度自动生成，非招股书原文 */
.pick-swot{display:flex;flex-direction:column;gap:6px;min-width:0;font-size:11.5px}
.pick-swot .sw-lab{font-weight:800;flex:none}
.pick-swot .sw-plus .sw-lab{color:var(--evt-list)}
.pick-swot .sw-minus .sw-lab{color:var(--evt-deadline)}
.pick-swot .sw-row{display:flex;gap:8px;align-items:baseline;color:var(--ink-2);line-height:1.5}
.pick-swot .sw-it{display:flex;gap:4px;align-items:baseline;flex-wrap:wrap}
.pick-swot .sw-sc{font-family:var(--mono);font-size:10.5px;color:var(--ink-3)}
.pick-swot .sw-na{color:var(--ink-3)}
.pick-card + .pick-card{margin-top:var(--sp-4)}
.pick-card:hover{box-shadow:var(--shadow-2);transform:translateY(-2px)}
.pick-card .glow{position:absolute;inset:0;border-radius:var(--r-xl);pointer-events:none;box-shadow:inset 3px 0 0 var(--brand)}
.pick-card .glow.mid{box-shadow:inset 3px 0 0 var(--gold)}
.score-ring{width:74px;height:74px;border-radius:50%;display:grid;place-items:center;position:relative;flex:none}
.score-ring svg{position:absolute;inset:0;transform:rotate(-90deg)}
.score-ring .v{font-size:22px;font-weight:800;font-family:var(--mono);text-align:center;line-height:1.05}
.score-ring .v small{display:block;font-size:9px;color:var(--ink-3);font-weight:600;letter-spacing:.08em}
.pick-info{min-width:0}
.pick-info .name-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.pick-info .name{font-size:17px;font-weight:800}
.pick-info .code{font-family:var(--mono);font-size:12px;color:var(--ink-3)}
.pick-metrics{display:flex;gap:26px;margin-top:12px;flex-wrap:wrap}
.pm .k{font-size:11.5px;color:var(--ink-3)}
.pm .v{font-size:15px;font-weight:700;font-family:var(--mono)}
.pm .v.up{color:var(--up)} .pm .v.hot{color:var(--brand-deep)}
.pick-act{display:flex;flex-direction:column;gap:8px;align-items:flex-start}
@media (max-width:680px){
  .pick-card{grid-template-columns:1fr}
  .pick-swot{flex-direction:row;gap:14px}
  .pick-act{flex-direction:row}
  .pick-act .btn{flex:1}
}

/* 指标卡 */
.stat-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);padding:18px 20px;flex:1;min-width:160px}
.stat-card .k{font-size:12px;color:var(--ink-3)}
.stat-card .v{font-family:var(--mono);font-size:26px;font-weight:800;margin-top:2px}
.stat-card .d{font-size:11.5px;color:var(--ink-3);margin-top:2px}
.stat-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:var(--sp-4)}

/* ---------------- 表格 ---------------- */
.tbl-wrap{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);overflow:auto}
table.tbl{width:100%;border-collapse:collapse;font-size:13.5px;min-width:760px}
table.tbl thead th{position:sticky;top:0;background:#fbfaf7;font-size:11.5px;font-weight:600;color:var(--ink-3);
  letter-spacing:.04em;text-align:left;padding:11px 14px;border-bottom:1px solid var(--line-2);white-space:nowrap;z-index:2}
table.tbl th.r,table.tbl td.r{text-align:right}
table.tbl th.c,table.tbl td.c{text-align:center}
table.tbl tbody tr{border-bottom:1px solid var(--line);cursor:pointer;transition:background 120ms}
table.tbl tbody tr:hover{background:#fdf9f2}
table.tbl td{padding:13px 14px;vertical-align:middle;white-space:nowrap}
.stock-cell{display:flex;align-items:center;gap:11px}
.mono-mark{width:34px;height:34px;border-radius:9px;display:grid;place-items:center;font-weight:800;font-size:13px;color:#fff;flex:none}
.stock-cell .nm{font-weight:700;font-size:14px}
.stock-cell .cd{font-family:var(--mono);font-size:11px;color:var(--ink-3)}
.row-more{color:var(--ink-3);opacity:0;transition:opacity 150ms}
tr:hover .row-more{opacity:1}
.table-foot{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap;
  padding:14px 4px 0;font-size:12.5px;color:var(--ink-3)}
.pager{display:flex;gap:6px}
.pager button{width:30px;height:30px;border-radius:7px;border:1px solid var(--line-2);background:#fff;
  font-family:inherit;font-size:12.5px;cursor:pointer;color:var(--ink-2)}
.pager button.on{background:var(--ink);color:#fff;border-color:var(--ink)}

/* ---------------- 提醒条 Alert ---------------- */
.alert{display:flex;align-items:flex-start;gap:10px;border-radius:var(--r-md);padding:11px 15px;font-size:13px;margin-bottom:var(--sp-3)}
.alert .ico{flex:none;font-weight:800}
.alert .x{margin-left:auto;cursor:pointer;opacity:.55;border:none;background:none;font-size:14px}
.alert .x:hover{opacity:1}
.alert-info{background:var(--info-bg);color:var(--info)}
.alert-warn{background:var(--gold-bg);color:#92600a}
.alert-risk{background:var(--up-bg);color:#b91c1c}
.alert-ok{background:var(--down-bg);color:#116149}

/* ---------------- 提醒点级标签 ---------------- */
.remind{display:inline-flex;align-items:center;gap:6px;font-size:11.5px;font-weight:700;border-radius:var(--r-pill);padding:2px 10px;white-space:nowrap}
.remind .dot{width:6px;height:6px;border-radius:50%}
.remind.t-now{background:var(--brand-soft);color:var(--brand-deep)}
.remind.t-now .dot{background:var(--brand);animation:pl 1.6s infinite}
.remind.t-soon{background:var(--gold-bg);color:#92600a}
.remind.t-soon .dot{background:var(--gold)}
.remind.t-later{background:#f1ede5;color:var(--ink-2)}
.remind.t-later .dot{background:var(--ink-3)}
@keyframes pl{0%{box-shadow:0 0 0 0 rgba(204,74,0,.4)}70%{box-shadow:0 0 0 6px rgba(204,74,0,0)}100%{box-shadow:0 0 0 0 rgba(204,74,0,0)}}

/* ============================================================
   新股日历模块（右侧边栏）
   四类日期标识：开始认购 / 认购截止 / 暗盘 / 上市
   ============================================================ */
.cal-legend{display:flex;flex-wrap:wrap;gap:10px 16px;margin-top:10px;padding-bottom:12px;border-bottom:1px dashed var(--line)}
.legend-item{display:inline-flex;align-items:center;gap:6px;font-size:11.5px;color:var(--ink-2)}
.legend-item .li-ico{width:18px;height:18px;border-radius:5px;display:grid;place-items:center;font-size:10px;color:#fff;flex:none}
.li-start{background:var(--evt-start)}
.li-dl{background:var(--evt-deadline)}
.li-grey{background:var(--evt-grey)}
.li-list{background:var(--evt-list)}

.cal-group{margin-top:12px}
.cal-group .g-title{font-size:11px;font-weight:700;color:var(--ink-3);letter-spacing:.08em;margin-bottom:4px}
.cal-item{padding:10px 0;border-bottom:1px dashed var(--line)}
.cal-item:last-child{border-bottom:none}
.cal-item .ci-top{display:flex;align-items:center;gap:8px}
.evt-ico{width:20px;height:20px;border-radius:6px;display:grid;place-items:center;flex:none}
.evt-ico svg{width:11px;height:11px}
.evt-start{background:var(--evt-start)}
.evt-deadline{background:var(--evt-deadline)}
.evt-grey{background:var(--evt-grey)}
.evt-list{background:var(--evt-list)}
.cal-item .ci-name{font-size:13px;font-weight:700}
.cal-item .ci-code{font-family:var(--mono);font-size:10.5px;color:var(--ink-3)}
.cal-item .ci-date{margin-left:auto;font-family:var(--mono);font-size:11px;color:var(--ink-2);white-space:nowrap}
.cal-item .ci-meta{display:flex;align-items:center;gap:8px;margin-top:5px;flex-wrap:wrap}
.cal-item .ci-desc{font-size:11.5px;color:var(--ink-2)}

/* 阶段进度：认购 → 截止 → 暗盘 → 上市 */
.stages{display:flex;align-items:center;margin-top:9px}
.stages .st{flex:1;display:flex;flex-direction:column;align-items:center;gap:4px;position:relative}
.stages .st::before{content:"";position:absolute;top:5px;left:-50%;width:100%;height:2px;background:var(--line-2)}
.stages .st:first-child::before{display:none}
.stages .st.done::before{background:var(--down)}
.stages .st.now::before{background:linear-gradient(90deg,var(--down) 0%,var(--brand) 100%)}
.stages .sdot{width:11px;height:11px;border-radius:50%;background:#fff;border:2px solid var(--line-2);position:relative;z-index:1}
.stages .st.done .sdot{background:var(--down);border-color:var(--down)}
.stages .st.now .sdot{background:#fff;border-color:var(--brand);box-shadow:0 0 0 3px rgba(204,74,0,.18)}
.stages .sname{font-size:9.5px;color:var(--ink-3)}
.stages .st.done .sname{color:var(--down)}
.stages .st.now .sname{color:var(--brand-deep);font-weight:700}
.stages .sdate{font-size:9px;color:var(--ink-3);font-family:var(--mono)}

/* ---------------- 空状态 ---------------- */
.empty{border:1.5px dashed var(--line-2);border-radius:var(--r-xl);padding:44px 36px;text-align:center;background:#fdfcf9}
.empty .big{font-size:17px;font-weight:700;margin-bottom:6px}
.empty p{font-size:13.5px;color:var(--ink-2);max-width:420px;margin:0 auto 6px}
.empty .why{display:flex;justify-content:center;gap:14px;margin:18px 0 20px;flex-wrap:wrap}
.empty .why span{font-size:12px;color:var(--ink-3);background:#f4f1ea;border-radius:var(--r-pill);padding:4px 12px}
.empty .acts{display:flex;justify-content:center;gap:12px;flex-wrap:wrap}

/* ---------------- 弹窗 Modal ---------------- */
.modal-mask{position:fixed;inset:0;background:rgba(31,27,22,.42);z-index:200;display:none;
  align-items:center;justify-content:center;padding:var(--sp-4);backdrop-filter:blur(2px)}
.modal-mask.open{display:flex;animation:fade 180ms ease-out}
@keyframes fade{from{opacity:0}to{opacity:1}}
.modal{background:var(--surface);border-radius:var(--r-xl);box-shadow:var(--shadow-2);
  width:100%;max-width:420px;padding:24px 26px;animation:pop 200ms cubic-bezier(.2,.8,.2,1)}
@keyframes pop{from{opacity:0;transform:scale(.96) translateY(8px)}to{opacity:1;transform:none}}
.modal-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:6px}
.modal-head h3{font-size:17px;font-weight:800}
.modal-head .x{border:none;background:none;font-size:18px;color:var(--ink-3);cursor:pointer;padding:4px}
.modal-head .x:hover{color:var(--ink)}
.modal .sub{font-size:13px;color:var(--ink-2);margin-bottom:16px}
.modal .stock-ref{display:flex;align-items:center;gap:10px;background:#fbfaf7;border:1px solid var(--line);
  border-radius:var(--r-md);padding:10px 14px;margin-bottom:16px}
.modal .stock-ref b{font-size:14px}
.modal .stock-ref .mono{font-size:11px;color:var(--ink-3)}
.modal-actions{display:flex;gap:10px;justify-content:flex-end;margin-top:20px}
.opt-row{display:flex;align-items:center;gap:10px;padding:11px 14px;border:1px solid var(--line);
  border-radius:var(--r-md);margin-bottom:8px;cursor:pointer;transition:all var(--tr);font-size:13.5px}
.opt-row:hover{border-color:var(--line-2)}
.opt-row.on{border-color:var(--brand);background:var(--brand-soft)}
.opt-row input{accent-color:var(--brand)}
.opt-row .opt-d{margin-left:auto;font-size:11px;color:var(--ink-3)}

/* ---------------- 侧栏小部件 ---------------- */
.gauge{display:flex;align-items:center;gap:14px;margin-top:8px}
.gauge .gv{font-size:32px;font-weight:800;font-family:var(--mono);line-height:1}
.gauge .gwrap{flex:1}
.gauge .gbar{height:8px;border-radius:var(--r-pill);background:var(--line);position:relative;overflow:hidden}
.gauge .gbar i{position:absolute;left:0;top:0;bottom:0;border-radius:var(--r-pill);background:linear-gradient(90deg,#d89b2d,var(--brand))}
.gauge .gl{display:flex;justify-content:space-between;font-size:10px;color:var(--ink-3);margin-top:4px}
.stat-list{margin-top:8px}
.stat-row{display:flex;justify-content:space-between;align-items:baseline;padding:7px 0;border-bottom:1px dashed var(--line)}
.stat-row:last-child{border-bottom:none}
.stat-row .k{font-size:12.5px;color:var(--ink-2)}
.stat-row .k .note{font-size:10.5px;color:var(--ink-3);display:block}
.stat-row .v{font-size:15px;font-weight:800;font-family:var(--mono)}
.stat-row .v.up{color:var(--up)}
.stat-row .v.dn{color:var(--down)}

/* ---------------- 图表容器 ---------------- */
.chart-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);padding:18px 20px}
.chart-card h4{font-size:14px;font-weight:700;display:flex;justify-content:space-between;align-items:baseline}
.chart-card h4 span{font-size:11px;color:var(--ink-3);font-weight:500}
.chart-note{font-size:11px;color:var(--ink-3);margin-top:8px}
.legend{display:flex;gap:16px;flex-wrap:wrap;font-size:11.5px;color:var(--ink-2);margin-top:10px}
.legend i{width:10px;height:10px;border-radius:3px;display:inline-block;margin-right:5px;vertical-align:-1px}

/* 骨架屏 */
.skl{border-radius:var(--r-md);background:linear-gradient(90deg,#f2efe8 25%,#e9e4d9 50%,#f2efe8 75%);
  background-size:200% 100%;animation:sk 1.4s infinite}
@keyframes sk{to{background-position:-200% 0}}

/* ---------------- 认证页（登录/注册） ---------------- */
.auth-wrap{min-height:100vh;display:grid;grid-template-columns:1fr 1fr}
.auth-brand{background:linear-gradient(160deg,var(--brand-deep),var(--brand) 70%,#f0762e);color:#fff;
  padding:64px 56px;display:flex;flex-direction:column;justify-content:space-between;position:relative;overflow:hidden}
.auth-brand::after{content:"";position:absolute;right:-90px;bottom:-90px;width:300px;height:300px;
  border-radius:50%;background:rgba(255,255,255,.08)}
.auth-brand .logo-w{display:flex;align-items:center;gap:10px;font-weight:800;font-size:18px;
  color:#fff;text-decoration:none;transition:opacity .18s ease}
.auth-brand .logo-w:hover{opacity:.88}
.auth-brand .logo-w .mark{width:32px;height:32px;border-radius:9px;background:#fff;color:var(--brand-deep);
  display:grid;place-items:center;font-size:14px;font-weight:800}
.auth-brand h1{font-size:30px;font-weight:800;line-height:1.3;letter-spacing:-.01em;max-width:380px;position:relative;z-index:1}
.auth-brand .pts{display:flex;flex-direction:column;gap:14px;position:relative;z-index:1}
.auth-brand .pt{display:flex;gap:10px;font-size:13.5px;color:#ffe3d3}
.auth-brand .pt b{color:#fff;font-weight:700}
.auth-brand .pt .tick{width:20px;height:20px;border-radius:50%;background:rgba(255,255,255,.18);display:grid;place-items:center;font-size:11px;flex:none}
.auth-form-side{display:flex;align-items:center;justify-content:center;padding:var(--sp-7) var(--sp-5)}
.auth-box{width:100%;max-width:400px}
.auth-box h2{font-size:24px;font-weight:800}
.auth-box .sub{font-size:13.5px;color:var(--ink-2);margin:6px 0 28px}
.auth-box .sub a{font-weight:700}
.auth-alt{margin-top:20px;padding-top:18px;border-top:1px dashed var(--line-2);text-align:center;font-size:12.5px;color:var(--ink-3)}
.form-error-bar{background:var(--up-bg);color:#b91c1c;font-size:13px;border-radius:var(--r-md);
  padding:10px 14px;margin-bottom:16px;display:none}
.form-error-bar.show{display:block}
@media (max-width:860px){
  .auth-wrap{grid-template-columns:1fr}
  .auth-brand{padding:40px 32px;gap:28px}
  .auth-brand h1{font-size:22px}
  .auth-brand .pts{display:none}
}

/* ---------------- 页脚 ---------------- */
.site-footer{margin-top:var(--sp-8);border-top:1px solid var(--line);padding:26px 0 40px;font-size:12.5px;color:var(--ink-2)}
.site-footer .in{max-width:1400px;margin:0 auto;padding:0 var(--sp-6);display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap}
.site-footer b{color:var(--ink-2)}
@media (max-width:980px){.site-footer .in{padding:0 var(--sp-4)}}
.page-breadcrumb{display:flex;align-items:center;flex-wrap:wrap;gap:var(--sp-2);padding:var(--sp-5) 0;color:var(--ink-2);font-size:var(--font-caption)}
.page-breadcrumb a{color:var(--brand-deep)}
.industry-chip{display:inline-block;max-width:220px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:bottom}

/* ---------------- 工具类 ---------------- */
.mt-2{margin-top:var(--sp-2)} .mt-3{margin-top:var(--sp-3)} .mt-4{margin-top:var(--sp-4)}
.mt-5{margin-top:var(--sp-5)} .mt-6{margin-top:var(--sp-6)}
.mb-3{margin-bottom:var(--sp-3)} .mb-4{margin-bottom:var(--sp-4)} .mb-5{margin-bottom:var(--sp-5)}
.flex{display:flex} .wrap{flex-wrap:wrap} .ac{align-items:center} .jb{justify-content:space-between}
.gap-2{gap:var(--sp-2)} .gap-3{gap:var(--sp-3)} .gap-4{gap:var(--sp-4)}
.tnum{font-family:var(--mono)} .muted{color:var(--ink-3);font-size:12.5px}

/* ============================================================
   v1.1 界面优化：扁平标签栏 · 日历限高滚动 · 用户头像菜单
   ============================================================ */

/* 扁平标签栏（无滑轨底座、无滑动指示条，仅以颜色+字重区分当前态） */
.seg.flat{background:transparent;padding:0;gap:6px;border-radius:0}
.seg.flat button{padding:8px 14px;border-radius:var(--r-md);background:transparent;
  color:var(--ink-2);border-bottom:none;margin-bottom:0}
.seg.flat button.on{background:transparent;box-shadow:none;color:var(--brand-deep);font-weight:800}
.seg.flat button:hover:not(.on){color:var(--ink)}

/* 日历板块：限高滚动 + 轻量化（降低与侧栏的整体反差） */
.cal-scroll{max-height:440px;overflow-y:auto;padding-right:6px;margin-top:4px;
  scrollbar-width:thin;scrollbar-color:var(--line-2) transparent}
.cal-scroll::-webkit-scrollbar{width:4px}
.cal-scroll::-webkit-scrollbar-thumb{background:var(--line-2);border-radius:4px}
.cal-scroll::-webkit-scrollbar-track{background:transparent}
.side-card.cal-lite{background:transparent;border:none;box-shadow:none;padding:0}
.side-card.cal-lite h4{padding-bottom:10px;border-bottom:1px dashed var(--line)}
@media (prefers-reduced-motion:no-preference){.cal-scroll{scroll-behavior:smooth}}

/* 历史页侧栏与主内容对齐 */
.col-side.stretch{align-self:stretch;position:static;display:flex;flex-direction:column;gap:var(--sp-4)}
.col-side.stretch .side-card{margin-top:0!important}

/* ============================================================
   v1.2 用户模块重设计 · 视觉质感升级
   ============================================================ */
.appbar-in{position:relative}
.avatar-btn{width:32px;height:32px;border-radius:50%;border:2px solid #fff;
  outline:1px solid var(--line-2);background:linear-gradient(135deg,var(--brand),var(--brand-deep));
  color:#fff;font-size:13px;font-weight:800;font-family:var(--sans);
  display:grid;place-items:center;cursor:pointer;padding:0;transition:all var(--tr)}
.avatar-btn:hover{transform:translateY(-1px);box-shadow:0 3px 8px rgba(204,74,0,.30)}
.side-auth{display:flex;flex-direction:column;gap:var(--sp-2);width:100%;min-width:0}
.side-auth-links{display:flex;gap:var(--sp-2);width:100%}
.side-auth-links .btn{flex:1}
.side-auth-note{font-size:var(--font-caption);line-height:1.5;color:var(--ink-2)}
.side-account-toggle{display:flex;align-items:center;gap:var(--sp-2);flex:1;min-width:0;
  padding:0;border:0;background:transparent;text-align:left;cursor:pointer;border-radius:var(--r-sm)}
.side-account-toggle:hover{background:var(--brand-soft)}
.side-account-toggle:active{background:var(--line)}
.side-account-toggle:focus-visible{outline:2px solid var(--brand);outline-offset:4px}
.side-account-toggle .avatar-btn,.um-head .avatar-btn{flex-shrink:0}
.side-account-details{display:block;min-width:0;flex:1}
.side-account-name,.side-account-email{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.side-account-name{font-size:var(--font-caption);color:var(--ink)}
.side-account-email{font-size:var(--font-caption);color:var(--ink-2)}
.side-account-notifications{text-decoration:none;flex-shrink:0}
.um-identity{min-width:0;flex:1;overflow-wrap:anywhere}
.user-menu{position:absolute;top:52px;right:var(--sp-6);width:308px;background:var(--surface);
  border:1px solid var(--line);border-radius:16px;z-index:100;
  box-shadow:0 4px 12px rgba(31,27,22,.08),0 16px 40px rgba(31,27,22,.14);
  padding:8px;display:none}
.user-menu::before{content:"";position:absolute;top:-6px;right:16px;width:11px;height:11px;
  background:var(--surface);border-left:1px solid var(--line);border-top:1px solid var(--line);
  transform:rotate(45deg)}
.user-menu.open{display:block;animation:pop 180ms cubic-bezier(.2,.8,.2,1)}
/* 账户头卡：暖橙渐变面板 + 大头像 + 版本徽章 */
.um-head{display:flex;align-items:center;gap:12px;padding:14px;margin:2px 2px 8px;border-radius:12px;
  background:linear-gradient(135deg,#fdf6ef,var(--brand-soft));border:1px solid #f5e2d0}
.um-head .avatar-btn{cursor:default;width:46px;height:46px;font-size:17px;border-width:2px;
  box-shadow:0 3px 10px rgba(204,74,0,.30)}
.um-head .nm{font-size:15px;font-weight:800;line-height:1.25;color:var(--ink)}
.um-head .em{font-size:11.5px;color:var(--ink-2)}
.um-plan{margin-left:auto;font-size:10.5px;font-weight:800;color:var(--ink-2);
  background:rgba(255,255,255,.9);border:1px solid var(--line-2);border-radius:var(--r-pill);
  padding:3px 10px;white-space:nowrap;flex:none}
/* 专业版横幅：实底金卡 + 皇冠图标 */
.um-banner{margin:2px 2px 8px;padding:12px 13px;border-radius:12px;display:flex;align-items:center;gap:11px;
  background:linear-gradient(135deg,#fdf3dd,#f9e9bf);border:1px solid #ecd7a2;
  text-decoration:none;transition:all var(--tr)}
.um-banner .crown{width:36px;height:36px;border-radius:10px;flex:none;
  background:linear-gradient(135deg,var(--gold),#d89b2d);color:#fff;
  display:grid;place-items:center;font-size:16px;box-shadow:0 2px 6px rgba(183,121,31,.32)}
.um-banner .tx{min-width:0}
.um-banner b{display:block;font-size:13px;color:#7a520e}
.um-banner .d{font-size:10.5px;color:#9a6d15;line-height:1.5;margin-top:1px}
.um-banner .go{margin-left:auto;font-size:11px;font-weight:800;color:#7a520e;white-space:nowrap;flex:none}
.um-banner:hover{transform:translateY(-1px);box-shadow:0 4px 14px rgba(183,121,31,.20)}
/* 分组标签 + 图标磁贴条目 */
.um-label{font-size:10px;font-weight:800;letter-spacing:.16em;color:var(--ink-3);margin:8px 14px 4px}
.um-item{display:flex;align-items:center;gap:11px;padding:8px 12px;border-radius:10px;width:100%;
  font-size:13.5px;font-family:var(--sans);color:var(--ink);text-align:left;cursor:pointer;
  border:none;background:none;transition:background 120ms}
.um-item:hover{background:#f7f4ee}
.um-item .ico{width:30px;height:30px;border-radius:9px;display:grid;place-items:center;
  font-size:13px;flex:none;background:#f1ede5;color:var(--ink-2)}
.um-item.u-info .ico{background:var(--info-bg);color:var(--info)}
.um-item.u-gold .ico{background:var(--gold-bg);color:var(--gold)}
.um-item.u-brand .ico{background:var(--brand-soft);color:var(--brand-deep)}
.um-item.u-danger .ico{background:var(--up-bg);color:var(--up)}
.um-item .tail{margin-left:auto;font-size:11px;color:var(--ink-3);font-family:var(--mono)}
.um-item .pro-tag{font-size:9.5px;font-weight:800;color:#fff;letter-spacing:.05em;
  background:linear-gradient(135deg,var(--gold),#d89b2d);border-radius:4px;padding:2px 6px;font-family:var(--sans)}
.um-sep{height:1px;background:var(--line);margin:8px 10px}
/* 退出登录：整宽软红按钮 */
.um-out{display:flex;align-items:center;justify-content:center;gap:8px;width:calc(100% - 4px);
  margin:2px;padding:10px;border:none;border-radius:10px;background:#fdf1f0;color:#b91c1c;
  font-size:13px;font-weight:700;font-family:var(--sans);cursor:pointer;transition:background 120ms}
.um-out:hover{background:#fbe3e1}
/* 详情页决策卡名称可点击 */
.pick-info a.name{color:var(--ink);text-decoration:none;transition:color 120ms}
.pick-info a.name:hover{color:var(--brand-deep)}
/* 邮件提醒开关 */
.switch{position:relative;width:34px;height:20px;border-radius:var(--r-pill);background:var(--line-2);
  transition:background var(--tr);flex:none;margin-left:auto;border:none;cursor:pointer;padding:0}
.switch::after{content:"";position:absolute;top:2px;left:2px;width:16px;height:16px;border-radius:50%;
  background:#fff;box-shadow:0 1px 2px rgba(0,0,0,.2);transition:transform var(--tr)}
.switch.on{background:var(--down)}
.switch.on::after{transform:translateX(14px)}
@media (max-width:640px){.user-menu{right:var(--sp-4);width:calc(100vw - 32px)}}

/* ============================================================
   v1.3 用户中心子页（个人资料/我的关注/付费功能/邮箱设置）
   ============================================================ */
a.um-item{text-decoration:none}
.crumb{font-size:12.5px;color:var(--ink-3);margin-bottom:14px}
.crumb a{color:var(--ink-3);text-decoration:none}
.crumb a:hover{color:var(--brand-deep)}
.crumb b{color:var(--ink-2);font-weight:600}

/* 账户中心布局：左侧导航 + 主内容（移动端导航变横向滑动条） */
.uc-layout{display:grid;grid-template-columns:232px minmax(0,1fr);gap:28px;align-items:start}
.uc-nav{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);padding:10px;position:sticky;top:76px}
.uc-nav .uc-head{padding:12px 12px 12px;border-bottom:1px dashed var(--line);margin-bottom:8px}
.uc-nav .uc-title{font-size:12px;font-weight:800;letter-spacing:.1em;color:var(--ink-2)}
.uc-nav .uc-sub{font-size:11px;color:var(--ink-3);margin-top:2px;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.uc-nav a.uc-item{display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:10px;
  font-size:13.5px;font-weight:600;color:var(--ink-2);text-decoration:none;transition:all 120ms;margin-bottom:2px}
.uc-nav a.uc-item:hover{background:#f7f4ee;color:var(--ink)}
.uc-nav a.uc-item.on{background:var(--brand-soft);color:var(--brand-deep);font-weight:800}
.uc-nav a.uc-item .ico{width:26px;height:26px;border-radius:8px;display:grid;place-items:center;
  font-size:12px;background:#f1ede5;color:var(--ink-2);flex:none}
.uc-nav a.uc-item.on .ico{background:#fff;color:var(--brand-deep)}
.uc-nav a.uc-item .tail{margin-left:auto;font-size:10.5px;color:var(--ink-3);font-family:var(--mono)}
@media (max-width:900px){
  .uc-layout{grid-template-columns:1fr;gap:16px}
  .uc-nav{position:static;display:flex;gap:6px;overflow-x:auto;scrollbar-width:none;padding:8px}
  .uc-nav::-webkit-scrollbar{display:none}
  .uc-nav .uc-head{display:none;border:none;margin:0;padding:0}
  .uc-nav a.uc-item{flex:none;white-space:nowrap;margin-bottom:0}
}

/* 全局 Toast 操作反馈 */
.toast{position:fixed;left:50%;bottom:28px;transform:translateX(-50%) translateY(12px);z-index:400;
  background:var(--ink);color:#fff;font-size:13.5px;font-weight:600;padding:11px 18px;border-radius:10px;
  box-shadow:0 8px 24px rgba(31,27,22,.28);opacity:0;transition:all var(--tr);
  max-width:calc(100vw - 32px);pointer-events:none}
.toast.show{opacity:1;transform:translateX(-50%) translateY(0)}
.toast::before{margin-right:8px;font-weight:800}
.toast.ok::before{content:"✓";color:#4ade80}
.toast.err::before{content:"✕";color:#f87171}

/* 评级信心与证据日期 */
.rating-note{font-size:12px;color:var(--ink-2);line-height:1.6;margin-top:var(--sp-2)}
.rating-note b{font-weight:600;color:var(--ink)}

.status-skeleton{height:var(--sp-7);margin-bottom:var(--sp-2)}
#mcal-grid>.empty,#mcal-grid>.status-skeleton{grid-column:1 / -1}

.watch-toggle{border:0;background:transparent;font:inherit;cursor:pointer;padding:var(--sp-2)}

/* Approved Penpot research components. Fixed geometry follows desktop boards. */
.research-page{min-width:320px}
.research-page button,.research-page input{font-family:inherit}
.research-page button{cursor:pointer}
.research-shell,.research-bar-inner{max-width:var(--page-width);margin:auto;padding-left:var(--sp-6);padding-right:var(--sp-6)}
.research-bar{background:var(--surface);border-bottom:1px solid var(--line)}
.research-bar-inner{display:flex;align-items:center;gap:var(--sp-7);min-height:64px}
.research-bar .logo{white-space:nowrap;font-size:20px;gap:var(--sp-3)}
.research-nav{display:flex;align-self:stretch;gap:var(--sp-6);align-items:center}
.research-nav a{display:flex;align-items:center;min-height:64px;color:var(--ink-2);font-weight:700;white-space:nowrap;border-bottom:3px solid transparent;padding-top:3px}
.research-nav .active{color:var(--brand-deep);border-color:var(--brand)}
.research-search{display:flex;align-items:center;margin-left:auto;width:280px;background:var(--paper);border-radius:var(--r-pill);padding-left:var(--sp-4);border:1px solid var(--line)}
.research-search input{width:100%;min-width:0;border:0;background:transparent;color:var(--ink);font-size:var(--font-size-13)}
.research-search button,.research-dialog-head button{background:transparent;border:0;display:grid;place-items:center;min-width:44px;height:var(--control-height);border-radius:var(--r-md)}
.research-search img,.research-dialog-head img{width:20px;height:20px}
.research-search:focus-within{outline:2px solid var(--brand-deep);outline-offset:2px}
.research-search input:focus{outline:0}
.research-breadcrumb{display:flex;gap:var(--sp-3);font-size:var(--font-size-13);color:var(--ink-2);padding:calc(var(--sp-5) - var(--sp-1)) 0}
.research-breadcrumb a{color:var(--ink-2)}
.research-heading{display:flex;justify-content:space-between;align-items:center;gap:var(--sp-5)}
.research-identity{display:flex;align-items:center;flex-wrap:wrap;gap:var(--sp-4)}
.research-heading h1{font-size:var(--font-heading-xl);line-height:1.3;letter-spacing:-.025em}
.research-chip{background:var(--flat-bg);color:var(--ink-2);font-size:var(--font-size-13);border-radius:var(--r-sm);padding:var(--sp-1) var(--sp-3)}
.research-status{border-radius:var(--r-pill);background:var(--brand-soft);color:var(--brand-deep);font-size:var(--font-size-13);font-weight:700;padding:var(--sp-1) var(--sp-4)}
.research-heading>a{white-space:nowrap;font-size:14px;min-height:var(--control-height);display:flex;align-items:center}
.research-dates{display:flex;gap:var(--sp-4);flex-wrap:wrap;color:var(--ink-2);font-size:var(--font-size-13);margin:var(--sp-3) 0 var(--sp-5)}
.research-dates span+span{border-left:1px solid var(--line-2);padding-left:var(--sp-4)}
.research-summary{display:grid;grid-template-columns:220px minmax(0,1fr) 260px;gap:var(--sp-6);background:var(--research-ink);color:var(--surface);border-radius:var(--r-lg);padding:var(--sp-5) var(--sp-6);min-height:204px}
.research-total{border-right:1px solid var(--research-line)}
.research-total h2{font-size:var(--font-size-18);margin-bottom:var(--sp-2)}
.research-total strong{font-size:var(--font-size-96);line-height:1.12;letter-spacing:-.06em;font-variant-numeric:tabular-nums;font-weight:750}
.research-total small{color:var(--research-muted);font-size:20px;margin-left:var(--sp-3)}
.research-verdict .eyebrow{font-size:var(--font-size-13);color:var(--research-muted)}
.research-verdict h2{font-size:var(--font-size-48);line-height:1.3;color:var(--research-accent);letter-spacing:-.03em;margin:var(--sp-1) 0 var(--sp-2)}
.research-verdict>p{font-size:var(--font-size-18);line-height:1.7;max-width:38em}
.research-verdict .research-asof{font-size:12px;color:var(--research-muted);margin-top:var(--sp-2)}
.research-structure-summary{display:flex;flex-wrap:wrap;align-items:center;gap:var(--sp-2) var(--sp-3);margin-top:var(--sp-3);padding:var(--sp-3);border:1px solid var(--research-line);border-radius:var(--r-md);color:var(--surface);font-size:var(--font-size-13);line-height:1.5}
.research-structure-summary span{padding-right:var(--sp-3);border-right:1px solid var(--research-line)}
.research-structure-summary .research-structure-tag{background:var(--brand);border:0;border-radius:var(--r-pill);padding:var(--sp-1) var(--sp-3);font-weight:700}
.research-structure-summary small{width:100%;color:var(--research-muted);font-size:12px}
.research-explainer{border-left:1px solid var(--research-line);padding-left:var(--sp-6);font-size:var(--font-size-13);color:var(--research-muted);display:flex;flex-direction:column;justify-content:center;gap:var(--sp-5)}
.research-section-head{display:flex;align-items:center;gap:var(--sp-5);margin:var(--sp-5) 0 var(--sp-3)}
.research-section-head h2{font-size:var(--font-size-22);line-height:1.4;border-left:4px solid var(--brand);padding-left:var(--sp-3)}
.research-section-head p{font-size:var(--font-size-13);color:var(--ink-2)}
.research-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--sp-4);align-items:start}
.research-card{border:1px solid var(--line-2);background:var(--surface);border-radius:var(--r-lg);padding:var(--sp-4) calc(var(--sp-4) + var(--sp-1));min-width:0;min-height:148px}
.research-card-head{display:flex;align-items:center;gap:var(--sp-3)}
.research-icon{display:grid;place-items:center;width:36px;height:36px;flex:none;border-radius:var(--r-lg);background:var(--brand-soft)}
.research-icon img{width:28px;height:28px;filter:invert(29%) sepia(97%) saturate(1958%) hue-rotate(353deg) brightness(90%) contrast(94%)}
.research-card h3{font-size:var(--font-size-18);white-space:normal;min-width:0;letter-spacing:-.03em}
.research-score{margin-left:auto;white-space:nowrap;display:flex;align-items:baseline;gap:var(--sp-2)}
.research-score strong{font-size:var(--font-size-30);color:var(--brand-deep);font-weight:750;line-height:1.2;font-variant-numeric:tabular-nums}
.research-score small{color:var(--ink-2);font-size:var(--font-size-13)}
.research-score.pending strong{color:var(--ink-2)}
.research-reason{margin-top:var(--sp-3);font-size:var(--font-size-15);line-height:1.7;min-height:25px}
.research-card-foot{display:flex;align-items:center;gap:var(--sp-2);justify-content:space-between}
.research-fact{font-size:var(--font-size-13);color:var(--ink-2);line-height:1.6;min-width:0}
.research-reference{font-size:var(--font-size-13);border:0;background:transparent;color:var(--info);padding:var(--sp-2) 0;min-height:36px;white-space:nowrap;flex-shrink:0}
.research-reference:hover,.research-preview a:hover,.research-heading>a:hover{text-decoration:underline}
.research-pending{display:inline-block;font-size:var(--font-caption);color:var(--ink-2)}
.research-footer{display:flex;justify-content:space-between;gap:var(--sp-4);padding-top:var(--sp-4);border-top:1px solid var(--line);margin-top:var(--sp-6);font-size:12px;color:var(--ink-2)}
.research-preview{display:flex;gap:var(--sp-4);align-items:baseline;flex-wrap:wrap;font-size:12px;color:var(--ink-2);padding:var(--sp-4) 0 var(--sp-5)}
.research-preview details{margin-left:auto}.research-preview summary{cursor:pointer;padding:var(--sp-2) 0}.research-preview details a{display:block;padding:var(--sp-2) 0}
.research-state,.research-loading{padding:var(--sp-8) var(--sp-5);text-align:center;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg)}
.research-state h1{font-size:var(--font-heading-lg);margin-bottom:var(--sp-3)}
.research-state p{color:var(--ink-2);margin-bottom:var(--sp-5)}
.research-state button,.research-state a{margin:var(--sp-1);min-height:var(--control-height)}
.research-loading{min-height:340px;color:var(--ink-2)}
.research-loading-bars{display:grid;gap:var(--sp-4);margin:var(--sp-5) auto;max-width:620px}
.research-loading-bars span{height:32px;background:var(--paper);border-radius:var(--r-sm)}
.research-loading-bars span:last-child{width:70%}
.research-sr,.research-skip:not(:focus){position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}
.research-skip:focus{position:fixed;top:var(--sp-2);left:var(--sp-2);z-index:100;background:var(--surface);padding:var(--sp-3)}
#research-dialog{margin:auto;width:min(620px,calc(100% - 32px));max-height:85vh;overflow:auto;border:1px solid var(--line-2);border-radius:var(--r-xl);padding:var(--sp-5);background:var(--surface);color:var(--ink);box-shadow:var(--shadow-2)}
#research-dialog::backdrop{background:rgba(23,45,59,.5)}
.research-dialog-head{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-4);margin-bottom:var(--sp-4)}
.research-dialog-head h2{font-size:var(--font-size-22)}.research-dialog-head button:hover{background:var(--paper)}
#research-dialog-body p{margin-bottom:var(--sp-4)}
.research-dialog-meta{color:var(--ink-2);font-size:var(--font-size-13)}
.research-result{display:flex;justify-content:space-between;align-items:center;gap:var(--sp-4);border-top:1px solid var(--line);padding:var(--sp-4) 0;min-height:56px}
.research-result small{color:var(--ink-2)}
@media(pointer:coarse){.research-reference{min-height:var(--control-height)}}
@media(max-width:680px){.research-reference{min-height:var(--control-height)}.research-structure-summary{display:grid}.research-structure-summary span{border-right:0;padding-right:0}.research-structure-summary .research-structure-tag{width:max-content}}
@media(max-width:1200px){.research-bar-inner{gap:var(--sp-5)}.research-nav{gap:var(--sp-5)}.research-search{width:240px}.research-summary{grid-template-columns:190px minmax(0,1fr) 210px;gap:var(--sp-5)}.research-explainer{padding-left:var(--sp-5)}.research-card{padding:var(--sp-4)}.research-card-head{gap:var(--sp-2)}.research-card h3{font-size:16px}.research-score{gap:var(--sp-1)}.research-score strong{font-size:26px}}
@media(max-width:980px){.research-bar-inner{flex-wrap:wrap;gap:0 var(--sp-5);padding-top:var(--sp-3)}.research-nav{order:3;width:100%;justify-content:space-between}.research-nav a{min-height:48px}.research-summary{grid-template-columns:180px minmax(0,1fr)}.research-explainer{grid-column:1/-1;border-left:0;border-top:1px solid var(--research-line);padding:var(--sp-4) 0 0;flex-direction:row;justify-content:space-between;gap:var(--sp-6)}.research-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.research-heading h1{font-size:28px}.research-heading{align-items:flex-start}.research-verdict h2{font-size:36px}}
@media(max-width:680px){.research-shell,.research-bar-inner{padding-left:var(--sp-4);padding-right:var(--sp-4)}.research-bar .logo{font-size:var(--font-size-18)}.research-search{width:100%;order:4;margin-bottom:var(--sp-3)}.research-nav{gap:var(--sp-3);margin-top:var(--sp-1)}.research-nav a{font-size:var(--font-size-13);min-height:var(--control-height)}.research-breadcrumb{padding:var(--sp-4) 0;font-size:12px}.research-heading{display:block}.research-heading h1{width:100%;font-size:26px}.research-identity{gap:var(--sp-2)}.research-heading>a{margin-top:var(--sp-2)}.research-dates{gap:var(--sp-1);display:grid;font-size:12px;margin-top:var(--sp-1)}.research-dates span+span{padding-left:0;border-left:0}.research-summary{grid-template-columns:1fr;padding:var(--sp-5);gap:var(--sp-4)}.research-total{border-right:0;border-bottom:1px solid var(--research-line);padding-bottom:var(--sp-4);display:flex;align-items:center;justify-content:space-between}.research-total h2{font-size:var(--font-size-15);margin:0}.research-total strong{font-size:64px}.research-total small{font-size:16px}.research-verdict h2{font-size:34px}.research-verdict>p{font-size:16px}.research-explainer{display:block;font-size:12px;padding-top:var(--sp-3)}.research-explainer p+p{margin-top:var(--sp-2)}.research-section-head{display:block}.research-section-head h2{font-size:20px}.research-section-head p{margin:var(--sp-2) 0 0 var(--sp-4);font-size:12px}.research-grid{grid-template-columns:1fr;gap:var(--sp-3)}.research-card{padding:var(--sp-4);min-height:160px}.research-card h3{font-size:17px}.research-card-head{gap:var(--sp-3)}.research-score strong{font-size:var(--font-size-30)}.research-reason{font-size:14px}.research-footer{display:block}.research-footer span{display:block;margin-bottom:var(--sp-2)}.research-preview{gap:var(--sp-3)}.research-preview details{margin-left:0}.research-reference{padding-left:var(--sp-2)}.research-dialog-head h2{font-size:20px}}


/* Desktop design-system v2: reusable factual blocks and interaction states. */
.pill.up{color:var(--up-text)}.pill.dn{color:var(--down-text)}
.btn-pri{background:var(--brand-deep)}
.btn-pri:hover:not(:disabled){background:var(--action-hover)}
.btn-pri:active:not(:disabled){background:var(--action-pressed);transform:none}
.btn[aria-busy="true"]{cursor:wait;pointer-events:none}
.btn[aria-busy="true"]::before{content:"";width:var(--ico-s);height:var(--ico-s);border:2px solid currentColor;border-right-color:transparent;border-radius:50%;animation:ds-spin 1s linear infinite}
@keyframes ds-spin{to{transform:rotate(360deg)}}
.research-page{min-width:0}
.research-bar-inner{gap:var(--sp-7)}
.research-account{font-size:var(--font-size-13);white-space:nowrap;color:var(--ink-2)}
.research-bar-inner .research-search{max-width:312px}
.research-shell{padding-bottom:var(--sp-5)}
.research-heading{min-height:56px}
.research-dates{margin-bottom:var(--sp-6)}
.research-summary{grid-template-columns:220px minmax(0,1fr) 260px}
.research-card{height:auto;min-height:148px}
.research-card-foot{margin-top:var(--sp-2)}
.research-total-pending{display:block;font-size:var(--font-body);color:var(--research-muted)}
.research-footer{margin-top:var(--sp-6);padding-top:var(--sp-4);padding-bottom:var(--sp-2)}
.research-loading-bars span{animation:ds-pulse 1.4s ease-in-out infinite alternate}
@keyframes ds-pulse{to{opacity:.4}}
.ds-stock-head{display:flex;align-items:center;gap:var(--sp-5);padding:var(--sp-5);min-height:104px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg)}
.ds-company-mark{width:56px;height:56px;display:grid;place-items:center;flex:none;background:var(--brand-deep);color:var(--surface);font-weight:700;font-size:var(--font-heading-xl);border-radius:var(--r-lg)}
.ds-company{flex:1;min-width:0}.ds-company h1{font-size:var(--font-heading-xl);line-height:1.3}
.ds-company>p{font-size:var(--font-size-13);color:var(--brand-deep);margin-top:var(--sp-2)}
.ds-company>p span{margin-left:var(--sp-3)}
.ds-stock-actions{display:flex;gap:var(--sp-5);flex:none}
.ds-stock-actions>a{min-width:200px}.ds-stock-actions>button{min-width:160px}
.ds-section-nav{display:flex;gap:var(--sp-6);align-items:center;margin-bottom:var(--sp-4);border-bottom:1px solid var(--line)}
.ds-section-nav a{padding:var(--sp-3) var(--sp-4);min-height:52px;font-weight:700;color:var(--ink-2);border-bottom:3px solid transparent;white-space:nowrap}
.ds-section-nav a.active{color:var(--brand-deep);border-color:var(--brand)}
.ds-section-nav>span{margin-left:auto;color:var(--ink-2);font-size:var(--font-caption)}
.ds-stock-grid{display:grid;grid-template-columns:minmax(0,2.09fr) minmax(0,1fr);gap:var(--sp-4);align-items:start}
.ds-panel{padding:var(--sp-5);background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);min-width:0}
.ds-panel h2{font-size:var(--font-size-22);line-height:1.4;margin-bottom:var(--sp-3)}
.ds-panel h3{font-size:var(--font-size-18)}
.ds-stock-side{display:grid;gap:var(--sp-4)}
.ds-facts-grid{display:grid;grid-template-columns:1fr 1fr;gap:var(--sp-6);align-items:start}
.ds-facts,.ds-table{width:100%;border-collapse:collapse;font-size:var(--font-body);font-variant-numeric:tabular-nums}
.ds-facts th,.ds-facts td,.ds-table th,.ds-table td{padding:var(--sp-2) var(--sp-3);text-align:left;border-bottom:1px solid var(--line);overflow-wrap:anywhere;vertical-align:top}
.ds-facts th{background:var(--paper);color:var(--ink-2);font-weight:400;width:40%}
.ds-facts td{width:60%}
.ds-table thead{background:var(--paper)}.ds-table th{font-weight:400}
.ds-table td:last-child,.ds-table th:last-child{text-align:right}
.ds-finance td,.ds-finance thead th:not(:first-child){text-align:right;white-space:nowrap}
.ds-finance-section{position:relative;margin-top:var(--sp-5)}
.ds-section-meta{position:absolute;right:0;top:var(--sp-1);font-size:var(--font-size-13);color:var(--ink-2)}
.ds-note{font-size:var(--font-caption);color:var(--ink-2);margin-top:var(--sp-2)}
.ds-muted{color:var(--ink-2);font-size:var(--font-body)}
.ds-sponsors{display:flex;align-items:baseline;gap:var(--sp-7);border-block:1px solid var(--line);padding:var(--sp-4) 0;margin:var(--sp-4) 0}
.ds-sponsors h3{flex:none}.ds-sponsors p{font-size:var(--font-body)}
.ds-section-title{display:flex;align-items:baseline;gap:var(--sp-7)}.ds-section-title span{color:var(--ink-2);font-size:var(--font-size-13)}
.ds-card-actions{display:flex;align-items:baseline;justify-content:space-between;gap:var(--sp-3)}
.ds-card-actions .research-reference{white-space:normal}
.ds-timeline{list-style:none;margin-left:var(--sp-2);border-left:2px solid var(--line)}
.ds-timeline li{position:relative;padding:0 0 var(--sp-3) var(--sp-5)}
.ds-timeline li::before{content:"";position:absolute;left:-6px;top:var(--sp-2);width:10px;height:10px;border-radius:50%;background:var(--evt-start)}
.ds-timeline .event-deadline::before{background:var(--evt-deadline)}.ds-timeline .event-grey::before{background:var(--evt-grey)}.ds-timeline .event-list::before{background:var(--evt-list)}
.ds-timeline p{font-size:var(--font-size-13);color:var(--ink-2);margin-top:var(--sp-1)}
.ds-facts-panel{padding:var(--sp-2)}
.ds-disclosure{margin-top:var(--sp-2);font-size:var(--font-size-13);color:var(--ink-2)}
.ds-disclosure summary{cursor:pointer;min-height:32px;padding-block:var(--sp-1)}
.ds-inline-link{display:inline-block;font-size:var(--font-size-13);margin-top:var(--sp-2)}
.ds-dialog-section{margin-top:var(--sp-5);margin-bottom:var(--sp-3)}
.ds-panel section,.ds-stock-side section{scroll-margin-top:var(--sp-5)}
@media(min-width:981px){.shell,.appbar-in{max-width:var(--page-width)}.appbar-in{height:64px}}
@media(max-width:1200px){.research-bar-inner{gap:var(--sp-5)}.ds-stock-actions{gap:var(--sp-2)}.ds-stock-actions>a{min-width:0}.ds-stock-actions>button{min-width:0}.research-summary{grid-template-columns:190px minmax(0,1fr) 210px}}
@media(max-width:980px){.research-account{margin-left:var(--sp-3)}.ds-stock-head{flex-wrap:wrap}.ds-stock-actions{width:100%}.ds-stock-grid{grid-template-columns:1fr}.ds-section-nav{gap:0;flex-wrap:wrap}.ds-section-nav>span{width:100%;padding:var(--sp-2) var(--sp-4);margin-left:0}.research-summary{grid-template-columns:180px minmax(0,1fr)}}
@media(max-width:680px){.research-bar-inner{gap:0 var(--sp-3)}.research-account{margin-left:auto;padding-block:var(--sp-2)}.research-account+.research-account{margin-left:0}.research-summary{grid-template-columns:1fr}.ds-stock-head{gap:var(--sp-3);padding:var(--sp-4)}.ds-company h1{font-size:var(--font-heading-lg)}.ds-company{flex-basis:calc(100% - 80px)}.ds-company>p span{display:block;margin-left:0}.ds-stock-actions>*{flex:1;padding-inline:var(--sp-2)}.ds-panel{padding:var(--sp-4)}.ds-facts-grid{grid-template-columns:1fr;gap:var(--sp-3)}.ds-section-nav a{font-size:var(--font-size-13);padding-inline:var(--sp-3);flex:1}.ds-section-meta{position:static;margin-bottom:var(--sp-2)}.ds-card-actions{display:block}.ds-table-wrap{overflow-x:auto}.ds-table{font-size:var(--font-caption)}.ds-facts{font-size:var(--font-size-13)}.ds-sponsors{gap:var(--sp-5)}.research-card{min-height:160px}.research-identity{gap:var(--sp-2)}}

/* Source geometry corrections after first browser comparison. */
.research-breadcrumb{padding:var(--sp-3) 0;min-height:48px}
.ds-stock-head{padding:var(--sp-4) var(--sp-5)}
.ds-timeline li{padding-bottom:var(--sp-2)}
.ds-stock-side .ds-panel{padding:var(--sp-4) var(--sp-5)}
.ds-stock-side .ds-facts-panel{padding:var(--sp-1) var(--sp-2)}
.research-page .research-chip{background:transparent;padding-inline:var(--sp-2)}
.research-page .research-status{border-radius:var(--r-md)}
.ds-stock-main>.ds-finance-section{margin-top:var(--sp-4)}
@font-face{font-family:"Noto Sans SC";src:url("fonts/NotoSansSC-subset.woff2") format("woff2");font-style:normal;font-weight:100 900;font-display:swap}

@media(min-width:981px){
 .research-verdict>p{font-size:var(--font-size-15)}
 .research-verdict .research-asof{font-size:var(--font-caption)}
 .research-section-head{margin:var(--sp-5) 0 var(--sp-4)}
 .research-section-head p{margin-left:auto;margin-right:60%}
 .research-reason{font-size:var(--font-body)}
 .research-card-foot{margin-top:var(--sp-1)}
 .research-card{min-height:148px}
 .research-total>div{display:flex;align-items:baseline;gap:var(--sp-2);flex-wrap:wrap}
 .research-total small{margin-left:0}
}

@media(min-width:981px){.research-heading{min-height:48px}.research-dates{margin-bottom:var(--sp-5)}}

@media(min-width:981px){.research-total>div{gap:var(--sp-5)}.research-total small{font-size:var(--font-size-18)}.research-total h2{margin-bottom:var(--sp-3)}.research-score{gap:var(--sp-3)}}

/* Report reasoning: readable complete explanations, shared with analysis. */
.pick-swot{gap:var(--sp-3);font-size:var(--font-size-13)}
.pick-swot .sw-row{align-items:flex-start;gap:var(--sp-2);line-height:1.65}
.pick-swot .sw-reasons{list-style:none;padding:0;margin:0;min-width:0}
.pick-swot .sw-reasons li+li{margin-top:var(--sp-2)}
.pick-swot .sw-na{color:var(--ink-2)}
@media(max-width:680px){.pick-swot{flex-direction:column;gap:var(--sp-3)}}

/* Analysis scorecards: keep evidence readable and align card actions. */
.research-summary{grid-template-columns:300px minmax(0,1fr) 240px}
.research-summary .research-total>div{display:flex;align-items:center;justify-content:flex-end;gap:var(--sp-2);flex-wrap:wrap}
.research-structure-tag{display:inline-flex;align-items:center;justify-content:center;max-width:100%;margin-left:var(--sp-2);padding:var(--sp-1) var(--sp-3);border:1px solid var(--research-line);border-radius:var(--r-pill);font-size:var(--font-caption);font-weight:700;line-height:1.45;overflow-wrap:anywhere;vertical-align:middle}
.research-structure-tag.verified{border-color:transparent;background:var(--brand);color:var(--surface)}
.research-structure-tag.pending{background:transparent;color:var(--research-muted);font-weight:500}
.research-grid{align-items:stretch}
.research-card{display:flex;height:100%;min-height:0;flex-direction:column;overflow-wrap:anywhere}
.research-card-head{display:grid;grid-template-columns:36px minmax(0,1fr) auto;align-items:start;gap:var(--sp-3)}
.research-card h3{align-self:center;line-height:1.45;overflow-wrap:anywhere;word-break:normal}
.research-card .research-score{min-width:0;max-width:100%;margin-left:0;align-self:center;flex-wrap:wrap;justify-content:flex-end;white-space:normal}
.research-card .research-score strong{white-space:nowrap}
.research-card .research-pending{max-width:100%;line-height:1.45;text-align:right;white-space:normal}
.research-reason{min-height:0;overflow-wrap:anywhere;word-break:normal}
.research-card .ds-note,.research-card .ds-disclosure{overflow-wrap:anywhere;word-break:normal}
.research-card-foot{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:end;gap:var(--sp-3);margin-top:auto;padding-top:var(--sp-3)}
.research-card-foot .research-fact{min-width:0;overflow-wrap:anywhere;word-break:normal}
.research-card-foot .research-reference{max-width:12em;white-space:normal;text-align:right;overflow-wrap:anywhere}


/* ================= v3 · 侧栏外壳（暖纸 + 品牌橙） =================
   app.js 在含 .appbar 的页面给 body 加 .with-side；各页 nav.main 由同一份清单生成。 */
.side-grp{display:block;padding:14px 12px 4px;font-size:11px;font-weight:700;letter-spacing:.06em;color:var(--ink-3)}
.nav-tag{margin-left:auto;font-size:10px;font-weight:700;letter-spacing:.04em;padding:1px 6px;border-radius:4px;background:var(--brand-hi);color:#1f1b16}
.nav-tag.free{background:var(--info-bg);color:var(--info)}
.pro-mark{display:inline-flex;align-items:center;height:18px;padding:0 6px;border-radius:4px;background:var(--brand-hi);color:#1f1b16;font-size:10px;font-weight:800;letter-spacing:.04em;vertical-align:middle}
.free-mark{display:inline-flex;align-items:center;height:20px;padding:0 7px;border-radius:4px;background:var(--info-bg);color:var(--info);font-size:11px;font-weight:700;vertical-align:middle}
@media(min-width:981px){
  body.with-side{padding-left:232px}
  body.with-side .appbar{position:fixed;left:0;top:0;bottom:0;width:232px;height:auto;background:#efe7da;border-right:1px solid var(--line);border-bottom:0;backdrop-filter:none;z-index:60;overflow-y:auto}
  body.with-side .appbar-in{height:100%!important;max-width:none;flex-direction:column;align-items:stretch;gap:0;padding:18px 14px}
  body.with-side .appbar .logo{order:-2;padding:2px 8px 14px}
  body.with-side .appbar .logo .mark{background:var(--brand-hi);color:#1f1b16}
  body.with-side nav.main{flex-direction:column;flex:0 0 auto;overflow:visible}
  body.with-side nav.main a{justify-content:flex-start;min-width:0;padding:8px 12px;border-radius:8px;gap:10px;font-size:14px;color:var(--ink)}
  body.with-side nav.main a:hover{background:rgba(255,255,255,.55)}
  body.with-side nav.main a.on{background:var(--surface);color:var(--brand-deep);box-shadow:var(--shadow-1)}
  body.with-side nav.main a.on::after{left:0;top:9px;bottom:9px;transform:none;width:3px;height:auto;border-radius:0 3px 3px 0;background:var(--brand-hi)}
  body.with-side nav.main a .ni{width:18px;text-align:center;color:var(--ink-3);font-size:14px}
  body.with-side nav.main a.on .ni{color:var(--brand-hi)}
  body.with-side .appbar .grow{flex:1}
  body.with-side .appbar .searchbar{order:-1;width:auto;margin:0 0 6px;background:var(--surface);border-color:var(--line)}
  body.with-side .appbar .icon-btn,body.with-side .appbar .avatar-btn{align-self:flex-start}
  body.with-side .side-foot{display:flex;align-items:center;gap:10px;padding-top:12px;border-top:1px solid var(--line)}
  body.with-side .side-up{display:flex;flex-direction:column;gap:2px;margin:12px 0;padding:12px 14px;border-radius:10px;background:var(--brand-soft);border:1px solid #f3c9a8;color:var(--brand-deep);text-decoration:none}
  body.with-side .side-up:hover{border-color:var(--brand)}
  body.with-side .side-up b{font-size:14px}
  body.with-side .side-up span{font-size:12px;color:var(--ink-2)}
  body.with-side .user-menu{position:fixed;left:14px;right:auto;top:auto;bottom:64px;max-height:calc(100dvh - 80px);overflow-y:auto}
  /* 正文区在侧栏右侧居中（左 48、右 32）；1440 宽时 1440−232=1208 恰为版心，两侧外边距为 0，与设计稿一致 */
  body.with-side .shell{max-width:1208px;margin:0 auto;padding:0 var(--sp-6) 0 var(--sp-7)}
  body.with-side .site-footer .in{max-width:1208px;margin:0 auto;padding:0 var(--sp-6) 0 var(--sp-7)}
  body.with-side footer,body.with-side .site-foot{margin-left:0}
}
.btn-pri{background:var(--brand)}
.btn-pri:hover:not(:disabled){background:var(--action-hover)}
.research-page.with-side .research-shell{max-width:1208px}
@media(max-width:980px){
  .side-grp,.side-up{display:none}
  .nav-tag{margin-left:6px}
}

/* ================= v3 · 本期新股评分页 ================= */
.rp-shell{padding-top:20px;padding-bottom:40px}
.rp-shell .head-row{align-items:flex-end;margin-bottom:16px}
.rp-pulse{display:grid;grid-template-columns:minmax(0,1.1fr) minmax(0,2fr);gap:0;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);margin-bottom:16px}
.rp-pulse-item{padding:14px 18px}
.rp-pulse-item+.rp-pulse-item{border-left:1px solid var(--line)}
.rp-pulse-item .k{display:block;font-size:12px;font-weight:700;color:var(--ink-2)}
.rp-pulse-item .k em{font-style:normal;font-weight:500;color:var(--ink-3);margin-left:6px}
.rp-note{font-size:11.5px;color:var(--ink-2);margin-top:6px;line-height:1.5}
.rp-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}
.rp-stats b{display:block;font-size:24px;font-weight:800;line-height:1.3}
.rp-stats small{font-size:11.5px;color:var(--ink-3)}
.rep3{display:grid;grid-template-columns:340px minmax(0,1fr);gap:16px;align-items:stretch}
.rp-left{display:flex;flex-direction:column;gap:16px}
.rp-list{padding:6px 0}
.ql-h{display:flex;align-items:center;gap:8px;padding:12px 16px 6px;font-size:12px;color:var(--ink-2)}
.ql-h b{color:var(--ink);font-size:13px}
.ql-h span{font-weight:700;color:var(--ink-3)}
.qrow{display:grid;grid-template-columns:36px minmax(0,1fr) auto;gap:10px;align-items:center;width:calc(100% - 16px);margin:2px 8px;padding:9px 10px;border:1px solid transparent;border-radius:10px;background:none;text-align:left;font:inherit;color:inherit;cursor:pointer}
.qrow:hover{background:var(--paper)}
.qrow.on{background:var(--brand-soft);border-color:var(--brand-hi);box-shadow:inset 3px 0 0 var(--brand-hi)}
.qg{width:36px;height:36px;border-radius:8px;display:grid;place-items:center;font-weight:900;font-size:17px;background:var(--rec-hold-bg);color:var(--rec-hold)}
.qg.g-strong{background:var(--brand);color:#fff}.qg.g-mid{background:var(--rec-strong-bg);color:var(--rec-strong)}
.qg.g-avoid{background:var(--rec-avoid-bg);color:var(--rec-avoid)}.qg.g-na{background:none;border:1px dashed var(--line-2);color:var(--ink-3)}
.qn{min-width:0}.qn b{font-size:14px}.qn .mono{font-size:11px;color:var(--ink-3)}
.qn small{display:block;font-size:11.5px;margin-top:2px}
.qs{text-align:right;white-space:nowrap}.qs b{font-size:22px;font-weight:800}.qs small{font-size:11px;color:var(--ink-3);margin-left:1px}
.due{font-weight:700;color:var(--ink-2)}.due.now{color:var(--up-text)}.due.open{color:var(--brand-deep)}.due.wait{color:var(--info)}
.fo-tags .due{font-size:12px;padding:2px 8px;border-radius:6px;background:var(--paper)}
.ql-foot{padding:10px 16px;font-size:12px;color:var(--ink-3);border-top:1px solid var(--line);margin-top:6px}
.rp-agenda{padding:0 0 4px;flex:1}
.rp-agenda-h{display:flex;align-items:baseline;justify-content:space-between;padding:14px 16px 8px}
.rp-agenda-h h2{font-size:14px;font-weight:800}.rp-agenda-h small{font-weight:500;color:var(--ink-3);font-size:12px;margin-left:4px}
.rp-agenda-h a{font-size:12px;font-weight:700;color:var(--brand-deep)}
.ag{display:grid;grid-template-columns:10px minmax(0,1fr) auto;gap:10px;align-items:center;padding:8px 16px;color:var(--ink);text-decoration:none;border-top:1px solid var(--line)}
.ag:hover{background:var(--paper)}
.ag b{font-size:13px}.ag small{display:block;font-size:11.5px;color:var(--ink-3)}
.ag .d{font-family:var(--mono);font-size:12px;color:var(--ink-2)}.ag .d.now{color:var(--up-text);font-weight:700}
.evt-dot{width:10px;height:10px;border-radius:3px}.evt-dot.evt-start{background:var(--evt-start)}.evt-dot.evt-deadline{background:var(--evt-deadline)}.evt-dot.evt-list{background:var(--evt-list)}
.focus{display:flex;flex-direction:column;padding:0;overflow:hidden;min-height:640px}
.rp-focus-empty{padding:20px}
.fo-h{display:flex;align-items:center;gap:14px;padding:18px 22px;border-bottom:1px solid var(--line)}
.fo-logo{width:48px;height:48px;border-radius:10px;background:var(--ink);color:#fff;display:grid;place-items:center;font-size:22px;font-weight:800;flex:none}
.fo-title{min-width:0;flex:1}.fo-title h2{font-size:22px;font-weight:900;line-height:1.3}.fo-title h2 .mono{font-size:13px;color:var(--ink-3);font-weight:500}
.fo-tags{display:flex;gap:6px;flex-wrap:wrap;margin-top:4px}
.fo-acts{display:flex;gap:8px;flex:none}
.fo-top{display:grid;grid-template-columns:280px minmax(0,1fr);border-bottom:1px solid var(--line)}
.fo-score{background:var(--research-ink);color:#fff;padding:20px 22px;display:flex;flex-direction:column;gap:6px}
.fo-score .lbl{font-size:12px;font-weight:700;color:var(--research-muted)}
.fo-total b{font-size:72px;font-weight:800;line-height:1}.fo-total small{font-size:18px;color:var(--research-muted);margin-left:4px}
.fo-ticks{display:flex;gap:3px;margin:4px 0 10px}.fo-ticks i{flex:1;height:8px;border-radius:2px;background:rgba(255,255,255,.14)}.fo-ticks i.f{background:var(--brand-hi)}
.fo-score h3{display:flex;align-items:center;gap:10px;font-size:22px;font-weight:900;line-height:1.25}
.grade{display:inline-grid;place-items:center;min-width:34px;height:34px;padding:0 6px;border-radius:6px;background:var(--brand-hi);color:#1f1b16;font-weight:900}
.grade.na{background:none;border:1px dashed var(--research-muted);color:var(--research-muted)}
.fo-sum{padding:18px 22px;display:flex;flex-direction:column;gap:10px}
.fo-sum p{display:flex;gap:8px;font-size:14px;line-height:1.65}
.fo-sum p .k{flex:none;width:22px;height:22px;border-radius:5px;display:grid;place-items:center;font-size:12px;font-weight:800;margin-top:1px}
.fo-sum .plus .k{background:var(--ink);color:#fff}.fo-sum .minus .k{background:var(--surface);color:var(--ink);box-shadow:inset 0 0 0 1.5px var(--ink)}
.fo-sum .na{color:var(--ink-2)}
.fo-kv{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px 20px;margin-top:auto;padding-top:12px;border-top:1px solid var(--line)}
.fo-kv dt{font-size:12px;color:var(--ink-2)}.fo-kv dd{font-size:16px;font-weight:800;font-variant-numeric:tabular-nums}.fo-kv dd.na{color:var(--ink-3);font-weight:500;font-size:14px}
.fo-f{padding:16px 22px}
.fo-f-h{display:flex;justify-content:space-between;align-items:baseline;gap:12px;margin-bottom:10px}
.fo-f-h h4{font-size:15px;font-weight:800}.fo-f-h span{font-size:12px;color:var(--ink-3)}
.ft-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}
.ft{border:1px solid var(--line);border-radius:10px;padding:10px 12px;display:flex;flex-direction:column;gap:6px}
.ft.pend{background:var(--paper)}
.ft-h{display:flex;align-items:center;gap:8px;font-size:13px;font-weight:700}.ft-h b{margin-left:auto;font-size:20px;font-weight:800}.ft.pend .ft-h b{color:var(--ink-3)}
.ft-bar{height:5px;border-radius:3px;background:var(--line)}.ft-bar i{display:block;height:100%;border-radius:3px;background:var(--ink)}
.ft p{font-size:12px;color:var(--ink-2);line-height:1.55}.ft small{font-size:11px;color:var(--ink-3);margin-top:auto}
.fo-hook{display:flex;align-items:center;gap:12px;margin:0 22px 16px;padding:12px 16px;border-radius:10px;background:var(--brand-soft);border:1px solid #ffd2b0}
.fo-hook div{flex:1;min-width:0}.fo-hook b{display:block;font-size:14px}.fo-hook span{font-size:12.5px;color:var(--ink-2)}
.fo-foot{margin-top:auto;padding:12px 22px;border-top:1px solid var(--line);font-size:12px;color:var(--ink-2);background:var(--paper)}
@media(max-width:1100px){.rep3{grid-template-columns:1fr}.fo-top{grid-template-columns:1fr}.ft-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.rp-pulse{grid-template-columns:1fr}.rp-pulse-item+.rp-pulse-item{border-left:0;border-top:1px solid var(--line)}}
@media(max-width:680px){.fo-h{flex-wrap:wrap}.fo-acts{width:100%}.ft-grid{grid-template-columns:1fr}.rp-stats{grid-template-columns:1fr}.fo-hook{flex-wrap:wrap}}

/* ================= v3 · 收益回测页 ================= */
.bt-shell{padding-top:24px;padding-bottom:40px}
.bt-shell .head-row{margin-bottom:16px;align-items:flex-end}
.bt-kpis{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:12px;margin-bottom:16px}
.bt-kpi{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);padding:14px 16px;display:flex;flex-direction:column;gap:3px}
.bt-kpi.hi{border-color:var(--brand-hi);box-shadow:inset 0 0 0 1px var(--brand-hi)}
.bt-kpi.ref{background:var(--paper)}
.bt-kpi .k{font-size:12.5px;font-weight:700;color:var(--ink-2);display:flex;align-items:center;gap:6px}
.bt-kpi .k i,.bt-legend i,.bt-tip i{display:inline-block;width:14px;height:3px;border-radius:2px}
.bt-kpi b{font-size:26px;font-weight:800;line-height:1.25}
.bt-kpi .d{font-size:12px;color:var(--ink-2)}
.up{color:var(--up-text)}.dn{color:var(--down-text)}
.bt-note{font-size:12.5px;color:var(--ink-2);margin:-4px 0 12px}
.bt-main{display:grid;grid-template-columns:minmax(0,1fr) 300px;gap:16px;align-items:stretch;margin-bottom:16px}
.bt-h{display:flex;align-items:baseline;justify-content:space-between;gap:12px;padding:14px 18px;border-bottom:1px solid var(--line);flex-wrap:wrap}
.bt-h h2{font-size:15px;font-weight:800}.bt-h h2 small{font-size:12px;font-weight:500;color:var(--ink-3);margin-left:6px}
.bt-chart-host{padding:0}
.bt-legend{display:flex;gap:6px;flex-wrap:wrap}
.bt-legend button{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--line);background:var(--surface);border-radius:99px;padding:3px 10px;font:inherit;font-size:12px;cursor:pointer;color:var(--ink)}
.bt-legend button[aria-pressed="false"]{opacity:.45}
.bt-chart-wrap{position:relative;padding:8px 12px 4px}
.bt-chart{width:100%;height:auto;display:block}
.bt-chart .ax{font-size:11px;fill:var(--ink-3);font-family:var(--mono)}
.bt-chart .end{font-size:12px;font-weight:700}
.bt-tip{position:absolute;z-index:5;min-width:280px;background:var(--ink);color:#fff;border-radius:8px;padding:8px 10px;font-size:12px;display:flex;flex-direction:column;gap:3px;pointer-events:none}
.bt-tip i{margin-right:6px}
.bt-cta{padding:18px;display:flex;flex-direction:column;gap:10px;border-color:var(--brand-hi)}
.bt-cta h2{font-size:16px;font-weight:800}.bt-cta p{font-size:13.5px;color:var(--ink-2);line-height:1.65}
.bt-cta ul{margin:0;padding-left:18px;font-size:13px;color:var(--ink)}.bt-cta li+li{margin-top:4px}
.bt-cta .btn{margin-top:auto}.bt-cta small{font-size:12px;color:var(--ink-3);text-align:center}
.bt-grid{display:grid;grid-template-columns:minmax(0,1fr) 360px;gap:16px;align-items:start;margin-bottom:16px}
.bt-side{display:flex;flex-direction:column;gap:16px}
.bt-table{padding:0}.bt-scroll{overflow-x:auto}
.bt-table td,.bt-table th{padding:9px 12px;font-size:13px}
.bt-plan{display:flex;flex-direction:column;gap:2px}.bt-plan span{white-space:nowrap}
.g{display:inline-grid;place-items:center;min-width:20px;height:18px;border-radius:4px;font-style:normal;font-size:11px;font-weight:800;background:var(--rec-hold-bg);color:var(--rec-hold)}
.g.g-A{background:var(--brand);color:#fff}.g.g-B{background:var(--rec-strong-bg);color:var(--rec-strong)}.g.g-D{background:var(--rec-avoid-bg);color:var(--rec-avoid)}
.bt-pager{display:flex;align-items:center;justify-content:flex-end;gap:8px;padding:10px 14px;border-top:1px solid var(--line);font-size:12.5px;color:var(--ink-2)}
.bt-side-panel{padding:0}.bt-side-panel .tb td,.bt-side-panel .tb th{padding:8px 14px;font-size:13px}
.bt-foot{padding:10px 14px 14px;font-size:12px;color:var(--ink-2);line-height:1.6}
.bt-factors{list-style:none;margin:0;padding:6px 14px}
.bt-factors li{display:grid;grid-template-columns:24px minmax(0,1fr) auto;gap:10px;align-items:center;padding:6px 0;border-bottom:1px dashed var(--line);font-size:13px}
.bt-factors .nm small{display:block;font-size:11px;color:var(--ink-3)}
.bt-factors b{font-size:13px;color:var(--brand-deep)}
.bt-factors .muted{font-size:12px}
.bt-method{padding:0}.bt-method ul{margin:0;padding:12px 18px 16px 34px;font-size:13px;color:var(--ink-2);line-height:1.7}.bt-method b{color:var(--ink)}
@media(max-width:1100px){.bt-kpis{grid-template-columns:repeat(2,minmax(0,1fr))}.bt-main,.bt-grid{grid-template-columns:1fr}}
@media(max-width:680px){.bt-kpis{grid-template-columns:1fr}}
/* v3 · 通用只读表格 */
.tb{width:100%;border-collapse:collapse;font-size:13.5px}
.tb th{text-align:left;font-size:11.5px;font-weight:700;color:var(--ink-2);background:#fbf8f2;border-bottom:1px solid var(--line);padding:9px 12px;white-space:nowrap}
.tb td{padding:10px 12px;border-bottom:1px solid var(--line);vertical-align:top}
.tb tr:last-child td{border-bottom:0}
.tb .r{text-align:right}.tb .na,.na{color:var(--ink-3)}
.bt-tip[hidden]{display:none}
/* ================= v3 · 组合策略页 ================= */
.sx-shell{padding-top:24px;padding-bottom:40px}
.sx-shell .head-row{align-items:flex-end;margin-bottom:12px}
.sx-shell .page-head .sub{max-width:720px;font-size:13.5px;color:var(--ink-2)}
.sx-periods{display:flex;align-items:center;gap:8px}
.sx-warn{padding:10px 14px;border-radius:var(--r-md);background:var(--gold-bg);color:#6b4a0c;font-size:13px;margin-bottom:16px;border:1px solid #f1dca6}
.sx-grid{display:grid;grid-template-columns:minmax(0,1fr) 380px;gap:16px;align-items:start}
.sx-left{display:flex;flex-direction:column;gap:16px;min-width:0}
.sx-form{display:grid;grid-template-columns:1fr 1fr auto;gap:16px;padding:16px 18px;align-items:start}
.sx-form .fld{display:flex;flex-direction:column;gap:6px;min-width:0}
.sx-form .lb{font-size:13px;font-weight:700}
.sx-form small,.sx-price{font-size:12px;color:var(--ink-3)}
.sx-shell .in{display:flex;align-items:center;height:44px;border:1px solid var(--line-2);border-radius:var(--r-md);background:var(--surface);padding:0 12px;gap:6px}
.sx-shell .in:focus-within{border-color:var(--brand);box-shadow:0 0 0 3px rgba(204,74,0,.12)}
.sx-shell .in .pre{font-size:13px;color:var(--ink-3)}
.sx-shell .in input{border:0;outline:0;background:none;font:inherit;font-size:15px;width:100%;font-variant-numeric:tabular-nums}
.sx-form .seg{height:44px}
.sx-form-f{grid-column:1/-1;display:flex;align-items:center;justify-content:space-between;border-top:1px solid var(--line);padding-top:12px}
.sx-form-f .err{color:var(--up-text)}
.sx-stocks{padding:0}
.sx-row{display:grid;grid-template-columns:220px minmax(0,1fr) 170px;gap:8px 16px;padding:14px 18px;border-top:1px solid var(--line)}
.sx-row:first-of-type{border-top:0}
.sx-row.wait{grid-template-columns:minmax(0,1fr) 280px;background:var(--paper)}
.sx-n b{font-size:15px}.sx-n .mono{font-size:12px;color:var(--ink-3)}.sx-n small{display:block;font-size:12px;color:var(--ink-2);margin-top:3px}
.sx-price{display:flex;flex-direction:column;gap:4px;margin-top:6px}
.sx-est{display:flex;flex-direction:column;gap:3px;font-size:13px;color:var(--ink-2)}
.sx-est b{color:var(--ink);font-weight:700}.sx-est b.up{color:var(--up-text)}.sx-est b.dn{color:var(--down-text)}
.sx-est small{font-size:11.5px;color:var(--ink-3)}
.sx-adj summary{cursor:pointer;font-size:12px;color:var(--brand-deep);font-weight:700;margin-top:2px}
.sx-adj label{display:inline-flex;align-items:center;gap:6px;font-size:12px;margin:6px 12px 0 0}
.sx-adj input{width:72px;height:30px;border:1px solid var(--line-2);border-radius:6px;padding:0 8px;font:inherit}
.sx-plan{display:flex;flex-direction:column;align-items:flex-end;gap:3px;text-align:right}
.sx-plan b{font-size:18px}.sx-plan small{font-size:12px;color:var(--ink-3)}
.sx-tag{display:inline-flex;align-items:center;height:26px;padding:0 10px;border-radius:6px;font-size:13px;font-weight:800;background:var(--paper);color:var(--ink);border:1px solid var(--line-2)}
.sx-tag.m{background:var(--brand-soft);color:var(--brand-deep);border-color:var(--brand-hi)}
.sx-tag.x{background:none;color:var(--ink-3);border-style:dashed}
.sx-why{grid-column:1/-1;font-size:12.5px;color:var(--ink-2);background:var(--paper);border-radius:6px;padding:6px 10px}
.sx-right{position:sticky;top:16px;display:flex;flex-direction:column;gap:12px}
.sx-best{background:var(--research-ink);color:#fff;border-radius:var(--r-lg);padding:20px}
.sx-best .lbl{font-size:12px;color:var(--research-muted);font-weight:700}
.best-plan{list-style:none;margin:10px 0 14px;padding:0;display:flex;flex-direction:column;gap:6px}
.best-plan li{display:flex;justify-content:space-between;gap:12px;font-size:14px;color:var(--research-muted);border-bottom:1px solid var(--research-line);padding-bottom:6px}
.best-plan b{color:#fff}
.sx-best .amt{font-size:48px;font-weight:800;line-height:1;font-variant-numeric:tabular-nums}.sx-best .amt small{font-size:16px;color:var(--research-muted);margin-right:4px}
.sx-best .sub{display:flex;gap:16px;margin-top:12px;font-size:12px;color:var(--research-muted);flex-wrap:wrap}
.sx-best .sub b{display:block;color:#fff;font-size:16px;font-variant-numeric:tabular-nums}
.sx-save{margin-top:16px;width:100%;background:var(--brand-hi);color:#1f1b16;border:0}
.sx-best.locked .best-plan,.sx-best.locked .amt,.sx-best.locked .sub,.sx-locked .sx-plan,.sx-locked .sx-why{filter:blur(6px);user-select:none}
.sx-gate{padding:18px;border-color:var(--brand-hi);display:flex;flex-direction:column;gap:10px}
.sx-gate h2{font-size:16px;font-weight:800}.sx-gate p{font-size:13px;color:var(--ink-2);line-height:1.6}.sx-gate .row{display:flex;gap:8px;flex-wrap:wrap}.sx-gate small{font-size:12px;color:var(--ink-3)}
.sx-comp{padding:0}.sx-comp ul{list-style:none;margin:0;padding:4px 16px}
.sx-comp li{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:2px 12px;padding:8px 0;border-bottom:1px dashed var(--line);font-size:13px}
.sx-comp li span small{display:block;font-size:11.5px;color:var(--ink-3)}.sx-comp li>small{grid-column:2;text-align:right;font-size:11.5px;color:var(--ink-3)}
.sx-hook{display:flex;flex-direction:column;gap:8px;padding:12px 14px;border:1px solid var(--line);border-radius:var(--r-lg);background:var(--surface)}
.sx-hook .lbl{font-size:11.5px;font-weight:700;color:var(--ink-3)}
.sx-hook a{font-size:12.5px;font-weight:700;color:var(--brand-deep)}
.bt-vs{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.bt-vs>div{display:grid;grid-template-columns:auto 1fr;column-gap:6px;align-items:center;font-size:12px;color:var(--ink-2)}
.bt-vs i{display:inline-block;width:14px;height:3px;border-radius:2px}
.bt-vs b{grid-column:1/-1;font-size:20px;font-weight:800}
.sx-best-empty{padding:18px}.sx-best-empty h2{font-size:16px}.sx-best-empty p{font-size:13px;color:var(--ink-2)}
@media(max-width:1100px){.sx-grid{grid-template-columns:1fr}.sx-right{position:static}.sx-row{grid-template-columns:1fr}.sx-plan{align-items:flex-start;text-align:left}.sx-form{grid-template-columns:1fr}}
.sx-cond{padding:0}
/* ================= v3 · 数据 API 页 ================= */
.api-shell{padding-top:24px;padding-bottom:40px}
.api-shell .head-row{margin-bottom:16px;align-items:flex-end}
.api-acts{display:flex;gap:8px}
.api-plans{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px;margin-bottom:16px}
.api-plan{padding:18px 20px;display:flex;flex-direction:column;gap:6px}
.api-plan.hi{border-color:var(--brand-hi);box-shadow:inset 0 0 0 1px var(--brand-hi)}
.api-plan .lbl{font-size:12px;font-weight:700;color:var(--ink-2)}
.api-plan .price{font-size:36px;font-weight:900;line-height:1.2}.api-plan .price small{font-size:14px;font-weight:500;color:var(--ink-3)}
.api-plan p{font-size:12.5px;color:var(--ink-3)}.api-plan ul{margin:6px 0 0;padding-left:18px;font-size:13.5px;line-height:1.8}
.api-grid{display:grid;grid-template-columns:minmax(0,1.3fr) minmax(0,1fr);gap:16px;margin-bottom:16px;align-items:stretch}
.api-grid .ds-panel{padding:0}
.api-code pre{margin:0;padding:14px 18px;font-family:var(--mono);font-size:12.5px;line-height:1.6;overflow-x:auto;background:#fbf8f2;border-radius:0 0 var(--r-lg) var(--r-lg);height:calc(100% - 50px)}
.api-notes{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px}
.api-notes .ds-panel{padding:16px 18px}.api-notes h3{font-size:14px;font-weight:800;margin-bottom:6px}.api-notes p{font-size:13px;color:var(--ink-2);line-height:1.65}
@media(max-width:1100px){.api-plans,.api-grid,.api-notes{grid-template-columns:1fr}}
/* 历史复盘：侧栏外壳下表格占满宽度，右侧卡片移到下方 */
@media(min-width:981px){
  body.with-side .hist-layout{grid-template-columns:1fr}
  body.with-side .hist-layout>.col-side{position:static;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px;align-items:stretch}
  body.with-side .hist-layout>.col-side .side-card{margin:0}
}
/* 成功与完成状态不用绿色（港股绿色表示下跌） */
.bdg-status.ok{background:var(--info-bg);color:var(--info)}
.alert-ok{background:var(--info-bg);color:#1f4f82}
.rp-stats>.empty{grid-column:1/-1}
/* 账户中心：侧栏外壳已包含“我的”导航，隐藏页内重复导航 */
@media(min-width:981px){body.with-side .uc-layout{grid-template-columns:minmax(0,1fr)}body.with-side .uc-nav{display:none}}
.api-grid .ds-panel{min-width:0;overflow-x:auto}
@media(max-width:680px){.api-shell .head-row{flex-direction:column;align-items:flex-start}.api-acts{flex-wrap:wrap}.api-grid code{white-space:nowrap}}
.sx-demand{display:flex;flex-direction:column;gap:4px;margin-top:6px;font-size:12px;color:var(--ink-2)}
.sx-demand input{width:160px;height:32px;border:1px solid var(--line-2);border-radius:6px;padding:0 8px;font:inherit;font-size:13px}

/* ================= v3.1 · M2.6 列表组件 =================
   研选评级徽章、股票卡片、深色市场条、右栏日程与首日柱状图。首用于 /ipo/，首页与日程页复用。
   评级 热力方案：同一色值派生 10% 浅底与 35% 描边，无渐变与投影；另有 4 格刻度，不单靠颜色区分等级。 */
.grade-a{--g:var(--grade-a)} .grade-b{--g:var(--grade-b)} .grade-c{--g:var(--grade-c)} .grade-d{--g:var(--grade-d)}
.grade-badge{flex:none;width:80px;height:80px;border-radius:var(--r-lg);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;
  background:var(--surface);border:1px solid var(--line-2);color:var(--g);
  background:color-mix(in srgb,var(--g) 10%,#fff);border-color:color-mix(in srgb,var(--g) 35%,#fff)}
.grade-badge .gb-letter{font-size:32px;font-weight:700;line-height:1}
.grade-badge .gb-label{font-size:12px;font-weight:600;line-height:1.35;white-space:nowrap}
.grade-badge.grade-a .gb-label{font-size:10px}
.grade-meter{display:flex;gap:3px;margin-top:3px}
.grade-meter i{width:12px;height:4px;border-radius:2px;background:var(--line);background:color-mix(in srgb,var(--g) 22%,#fff)}
.grade-meter i.on{background:var(--g)}
.grade-badge.pending{--g:var(--ink-2);background:var(--surface);border:1px dashed var(--line-2)}
.grade-badge.pending .gb-letter{font-size:22px}
.grade-pill{display:inline-flex;align-items:center;height:24px;padding:0 10px;border-radius:var(--r-pill);font-size:12px;font-weight:600;white-space:nowrap;
  background:var(--surface);border:1px solid var(--line-2);color:var(--g);
  background:color-mix(in srgb,var(--g) 10%,#fff);border-color:color-mix(in srgb,var(--g) 35%,#fff)}
.grade-pill.pending{--g:var(--ink-2);background:var(--surface);border-style:dashed}

.ipo-page{padding:var(--sp-5) 0 var(--sp-6);min-width:0}
.ipo-head{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:end;column-gap:var(--sp-5);margin-bottom:var(--sp-5)}
.ipo-head .crumbs{grid-column:1/-1;display:flex;justify-content:space-between;gap:var(--sp-4);font-size:13px;color:var(--ink-2);margin-bottom:var(--sp-3)}
.ipo-head .crumbs .breadcrumb{margin:0}
.ipo-head h1{font-size:32px;font-weight:700;line-height:1.3}
.ipo-head .lede{margin-top:var(--sp-2);font-size:16px;color:var(--ink-2)}
.ipo-head .lede b{color:var(--ink);font-weight:600}
.seg{display:inline-flex;gap:4px;padding:4px;border-radius:10px;background:#efe7da}
.seg a{display:inline-flex;align-items:center;height:32px;padding:0 16px;border-radius:8px;font-size:13px;color:var(--ink-2)}
.seg a:hover{color:var(--ink)}
.seg a[aria-current]{background:var(--surface);color:var(--brand-deep);font-weight:600;box-shadow:var(--shadow-1)}

.mkt{margin-bottom:var(--sp-6);padding:18px 24px 20px;border-radius:16px;background:var(--research-ink);color:#fff}
.mkt h2{margin-bottom:14px;font-size:13px;font-weight:600;color:var(--research-muted)}
.mkt-grid{display:grid;grid-template-columns:1.7fr 1fr 1fr 1fr}
.mkt-cell{min-width:0;padding:0 24px;border-left:1px solid var(--research-line)}
.mkt-cell:first-child{padding-left:0;border-left:0}
.mkt .k{font-size:13px;color:var(--research-muted)}
.mkt .v{font-size:28px;font-weight:700;line-height:1.35}
.mkt .v small{margin-left:4px;font-size:14px;font-weight:400;color:var(--research-muted)}
.mkt .d{margin-top:6px;font-size:12px;color:var(--research-muted)}
.mkt a{color:var(--research-accent)}
.mkt .chg{display:inline-block;margin-top:4px;padding:0 10px;border-radius:6px;font-size:20px;font-weight:700;line-height:32px}
.mkt .chg.up{background:var(--up-bg);color:var(--up-text)}
.mkt .chg.dn{background:var(--down-bg);color:var(--down-text)}
.mkt .chg.flat{background:var(--flat-bg);color:var(--ink-2)}
.gauge{display:grid;grid-template-columns:auto minmax(120px,1fr);gap:20px;align-items:center}
.gauge-bar{position:relative;height:8px;border-radius:4px;background:var(--research-line);overflow:hidden}
.gauge-bar span{position:absolute;inset:0 auto 0 0;border-radius:4px;background:var(--brand-hi)}
.gauge-scale{display:flex;justify-content:space-between;margin-top:4px;font-size:11px;color:var(--research-muted)}

.ipo-cols{display:grid;grid-template-columns:minmax(0,1fr) 352px;gap:var(--sp-5);align-items:start}
.ipo-main{min-width:0}
.ipo-main .tbl{min-width:0}
.ipo-sec + .ipo-sec{margin-top:var(--sp-6)}
.ipo-sec-head{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px var(--sp-3);margin-bottom:var(--sp-3)}
.ipo-sec-head h2{font-size:20px;font-weight:700}
.ipo-sec-head p{font-size:13px;color:var(--ink-2)}
.ipo-empty{padding:18px 20px;border:1px dashed var(--line-2);border-radius:var(--r-lg);font-size:14px;color:var(--ink-2)}
.ipo-alert{display:flex;justify-content:space-between;align-items:center;gap:var(--sp-3);padding:14px 20px;border:1px solid var(--line-2);border-radius:var(--r-lg);background:var(--surface);font-size:14px}
.ipo-alert + .ipo-alert,.ipo-alert + .ipo-card,.ipo-card + .ipo-alert{margin-top:var(--sp-3)}

.ipo-card{display:grid;grid-template-columns:80px minmax(0,1fr) auto;gap:var(--sp-5);align-items:center;padding:20px;border:1px solid var(--line);border-radius:var(--r-lg);background:var(--surface)}
.ipo-card + .ipo-card{margin-top:var(--sp-3)}
.ipo-card-body{min-width:0}
.ipo-card-title{display:flex;flex-wrap:wrap;align-items:center;gap:6px 8px;font-size:18px;font-weight:700;line-height:1.4}
.ipo-card-title a{color:var(--ink)}
.ipo-card-title a:hover{color:var(--brand-deep)}
.ipo-tag{display:inline-flex;align-items:center;height:22px;padding:0 8px;border-radius:6px;background:var(--flat-bg);font-size:12px;font-weight:500;color:var(--ink-2);white-space:nowrap}
.ipo-tag.quiet{background:transparent;border:1px solid var(--line-2)}
.ipo-card-meta{margin-top:2px;font-size:13px;color:var(--ink-2)}
/* 事实行随卡片宽度换行：1440 宽（含 15px 滚动条）下一行排完；1181–1439 宽时正文栏变窄，换成两行而不压到按钮下 */
.ipo-card-facts{display:flex;flex-wrap:wrap;gap:8px var(--sp-5);margin-top:10px}
.ipo-card-facts dt{font-size:12px;color:var(--ink-2)}
.ipo-card-facts dd{margin:0;font-size:15px;font-weight:600;white-space:nowrap}
.ipo-card-facts .soon{color:var(--brand-deep)}
.ipo-card-actions .btn{min-width:112px}

.ipo-rail{display:grid;gap:var(--sp-4)}
.rail-card{padding:18px 20px;border:1px solid var(--line);border-radius:var(--r-lg);background:var(--surface)}
.rail-card h2{display:flex;justify-content:space-between;align-items:baseline;gap:var(--sp-3);margin-bottom:12px;font-size:16px;font-weight:700}
.rail-card h2 a{font-size:13px;font-weight:400}
.rail-card p{font-size:13px;line-height:1.6;color:var(--ink-2)}
.rail-card.promo{background:var(--brand-soft);border-color:#f3c9a8}
.rail-card.promo h2{color:var(--brand-deep)}
.rail-actions{display:flex;align-items:center;gap:var(--sp-3);margin-top:14px}
.sched-day + .sched-day{margin-top:14px}
.sched-date{font-size:13px;font-weight:600}
.sched-date.soon{color:var(--brand-deep)}
.sched-evt{display:grid;grid-template-columns:8px minmax(0,1fr);column-gap:8px;margin-top:6px;font-size:13px;line-height:1.5}
.sched-evt::before{content:"";width:8px;height:8px;margin-top:6px;border-radius:50%;background:var(--dot,var(--ink-3))}
.sched-evt b{font-weight:600;color:var(--ink-2)}
.sched-evt span{grid-column:2;color:var(--ink-2)}
.sched-evt.start{--dot:var(--evt-start)}
.sched-evt.deadline{--dot:var(--evt-deadline)}
.sched-evt.listing{--dot:var(--evt-list)}
.fd-chart{display:block;width:100%;height:auto;margin-top:4px}
.fd-note{margin-top:6px;font-size:11px;color:var(--ink-2)}
@media(max-width:1180px){.ipo-cols{grid-template-columns:1fr}.mkt-grid{grid-template-columns:1fr 1fr;row-gap:16px}.mkt-cell:nth-child(3){padding-left:0;border-left:0}}
@media(max-width:760px){.ipo-head{grid-template-columns:1fr}.ipo-head .seg{margin-top:var(--sp-3)}.ipo-card{grid-template-columns:64px minmax(0,1fr)}.ipo-card .grade-badge{width:64px;height:64px}.ipo-card-actions{grid-column:1/-1}}
