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

/* ---------------- 设计令牌 Design Tokens ---------------- */
:root{
  /* 视口尺寸变量：整页缩放（文末“2K 等比放大”）时除以缩放倍数，乘回来正好等于真实窗口；写视口相关尺寸一律用这三个变量 */
  --vw:100vw; --vh:100vh; --dvh:100dvh;
  /* 色彩 · 中性 */
  --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;       /* 上市（不用绿色，绿色在港股代表下跌） */
  /* 研选等级（观点域，四级，2026-09-29）。实色底配白字或分数环 + 同色文字，字母 A–D 只作内部键、不对外显示；
     “优秀”用绿色是唯一例外（涨跌里绿色仍只表示下跌，等级靠标签/分数环形状区分）。文字对比度均不低于 4.5:1 */
  --grade-a:#1e7a4f; --grade-b:#8f6400; --grade-c:#a84312; --grade-d:#7e1f1f;
  --rec-strong:var(--grade-a); --rec-strong-bg:#e4f1ea;  /* 键 A · 优秀（研选分 80–100） */
  --rec-mid:var(--grade-b);    --rec-mid-bg:#f3ebd9;     /* 键 B · 良好（60–79） */
  --rec-hold:var(--grade-c);   --rec-hold-bg:#f7e7dd;    /* 键 C · 普通（40–59） */
  --rec-avoid:var(--grade-d);  --rec-avoid-bg:#f4e3e3;   /* 键 D · 偏弱（20–39） */
  /* 研究页面：深墨蓝底与无障碍文字 */
  --research-ink:#2a1e14; --research-line:#4d3d2f;
  --research-muted:#dccdb9; --research-accent:#ffb27a;
  --font-caption:0.75rem; --font-body:0.875rem; --font-heading-md:1.25rem;
  --font-heading-lg:1.75rem; --font-heading-xl:2rem; --font-heading-display:2.5rem;
  --font-score:3.5rem;
  /* 字体 */
  --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:0.8125rem; --font-size-15:0.9375rem; --font-size-18:1.125rem; --font-size-22:1.375rem;
 --font-size-30:1.875rem; --font-size-48:3rem; --font-size-96:6rem;
 --control-height:44px; --radius-10:10px; --page-width:1440px;
}
/* ---------------- 基础 ---------------- */
*{margin:0;padding:0;box-sizing:border-box}
/* 根字号固定 16px：全站字号用 rem，2400 宽以下与设计稿像素一致；2400 起整页放大，见文末“宽屏适配”与“W3 宽屏整页放大” */
html{font-size:16px;scroll-behavior:smooth;scrollbar-gutter:stable}
body{background:var(--paper);color:var(--ink);font-family:var(--sans);font-size:0.9375rem;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:1.0625rem;color:var(--ink);text-decoration:none}
/* 标志：H 线字形（内联 SVG，随 color 变色），品牌深橙底配白色，与 favicon 一致（2026-10-04） */
.logo .mark{width:30px;height:30px;border-radius:8px;background:var(--brand);
  color:#fff;display:grid;place-items:center;font-size:0.8125rem;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:0.875rem;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:0.8125rem;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:0.9375rem}
.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:0.78125rem;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:0.875rem;padding:0 2px}
.ctx .x:hover{color:var(--ink)}

/* ---------------- 页头 ---------------- */
.page-head h1{font-size:1.625rem;font-weight:800;letter-spacing:-.01em}
.page-head .sub{color:var(--ink-3);font-size:0.8125rem;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:0.875rem}
.btn-md{height:38px;padding:0 18px;font-size:0.8125rem}
.btn-sm{height:30px;padding:0 13px;font-size:0.75rem}
.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%}

/* ---------------- 输入框 ---------------- */
/* hidden 属性必须生效：.btn、.field 等组件设了 display，会盖过浏览器默认的 [hidden]{display:none} */
[hidden]{display:none !important}
.field{display:flex;flex-direction:column;gap:6px;margin-bottom:var(--sp-4)}
.field label{font-size:0.8125rem;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:0.875rem;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:0.75rem;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:0.8125rem;flex:none}
.eye:hover{color:var(--ink-2)}
.checkbox{display:flex;align-items:flex-start;gap:8px;font-size:0.8125rem;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:0.8125rem;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:0.6875rem;margin-left:3px}
.fchip{font-size:0.78125rem;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:0.75rem;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)}
/* 研选等级徽章（.gr 仅设计规范页演示）：实色方块 + 同色等级文字 + 4 格刻度（不只靠颜色区分）；.gpill 为表格用胶囊：小方点 + 等级名，不显示字母 */
.gr{--g:var(--ink-2);display:inline-flex;align-items:center;gap:8px;text-decoration:none}
.gr>b{display:grid;place-items:center;width:32px;height:32px;border-radius:8px;background:var(--g);color:#fff;font-size:1.0625rem;font-weight:800;line-height:1}
.gr>span{display:grid;gap:5px}
.gr em{font-style:normal;font-size:0.8125rem;font-weight:700;color:var(--g);line-height:1}
.gr-meter{display:flex;gap:2px}.gr-meter i{width:9px;height:4px;border-radius:1px;background:var(--line-2)}.gr-meter i.on{background:var(--g)}
.gr.pending>b{background:none;border:1px dashed var(--line-2);color:var(--ink-2)}
.gpill{--g:var(--ink-2);display:inline-flex;align-items:center;gap:6px;height:24px;padding:0 10px;border-radius:var(--r-pill);background:var(--gb,var(--flat-bg,#efe9df));color:var(--g);font-size:0.78125rem;font-weight:700;white-space:nowrap;text-decoration:none}
.gpill::before{content:"";flex:none;width:8px;height:8px;border-radius:2px;background:var(--g)}
.gr-a,.gpill.g-a{--g:var(--grade-a);--gb:var(--rec-strong-bg)}.gr-b,.gpill.g-b{--g:var(--grade-b);--gb:var(--rec-mid-bg)}
.gr-c,.gpill.g-c{--g:var(--grade-c);--gb:var(--rec-hold-bg)}.gr-d,.gpill.g-d{--g:var(--grade-d);--gb:var(--rec-avoid-bg)}
.chip{font-size:0.71875rem;font-weight:600;color:var(--ink-2);background:#f1ede5;border-radius:5px;padding:2px 9px;white-space:nowrap}
.pill{font-size:0.75rem;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:0.71875rem;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:0.875rem}
.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:0.9375rem;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:0.84375rem;font-weight:700;display:flex;justify-content:space-between;align-items:baseline;gap:8px}
.side-card h4 span{font-size:0.6875rem;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:0.71875rem}
.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:0.65625rem;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:1.375rem;font-weight:800;font-family:var(--mono);text-align:center;line-height:1.05}
.score-ring .v small{display:block;font-size:0.5625rem;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:1.0625rem;font-weight:800}
.pick-info .code{font-family:var(--mono);font-size:0.75rem;color:var(--ink-3)}
.pick-metrics{display:flex;gap:26px;margin-top:12px;flex-wrap:wrap}
.pm .k{font-size:0.71875rem;color:var(--ink-3)}
.pm .v{font-size:0.9375rem;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:0.75rem;color:var(--ink-3)}
.stat-card .v{font-family:var(--mono);font-size:1.625rem;font-weight:800;margin-top:2px}
.stat-card .d{font-size:0.71875rem;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:0.84375rem;min-width:760px}
table.tbl thead th{position:sticky;top:0;background:#fbfaf7;font-size:0.71875rem;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:0.8125rem;color:#fff;flex:none}
.stock-cell .nm{font-weight:700;font-size:0.875rem}
.stock-cell .cd{font-family:var(--mono);font-size:0.6875rem;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:0.78125rem;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:0.78125rem;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:0.8125rem;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:0.875rem}
.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:0.71875rem;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:0.71875rem;color:var(--ink-2)}
.legend-item .li-ico{width:18px;height:18px;border-radius:5px;display:grid;place-items:center;font-size:0.625rem;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:0.6875rem;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:0.8125rem;font-weight:700}
.cal-item .ci-code{font-family:var(--mono);font-size:0.65625rem;color:var(--ink-3)}
.cal-item .ci-date{margin-left:auto;font-family:var(--mono);font-size:0.6875rem;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:0.71875rem;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:0.59375rem;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:0.5625rem;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:1.0625rem;font-weight:700;margin-bottom:6px}
.empty p{font-size:0.84375rem;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:0.75rem;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:1.0625rem;font-weight:800}
.modal-head .x{border:none;background:none;font-size:1.125rem;color:var(--ink-3);cursor:pointer;padding:4px}
.modal-head .x:hover{color:var(--ink)}
.modal .sub{font-size:0.8125rem;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:0.875rem}
.modal .stock-ref .mono{font-size:0.6875rem;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:0.84375rem}
.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:0.6875rem;color:var(--ink-3)}

/* ---------------- 侧栏小部件 ---------------- */
.gauge{display:flex;align-items:center;gap:14px;margin-top:8px}
.gauge .gv{font-size:2rem;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:0.625rem;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:0.78125rem;color:var(--ink-2)}
.stat-row .k .note{font-size:0.65625rem;color:var(--ink-3);display:block}
.stat-row .v{font-size:0.9375rem;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:0.875rem;font-weight:700;display:flex;justify-content:space-between;align-items:baseline}
.chart-card h4 span{font-size:0.6875rem;color:var(--ink-3);font-weight:500}
.chart-note{font-size:0.6875rem;color:var(--ink-3);margin-top:8px}
.legend{display:flex;gap:16px;flex-wrap:wrap;font-size:0.71875rem;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:var(--vh);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:1.125rem;
  color:#fff;text-decoration:none;transition:opacity .18s ease}
.auth-brand .logo-w:hover{opacity:.88}
.logo .mark,.logo-w .mark{flex:none}
.logo .mark svg,.logo-w .mark svg{width:100%;height:100%;display:block;fill:currentColor;stroke:none}
/* 侧栏 .appbar svg 统一为线框图标（fill:none）；标志字形须实心，横杠为圆头粗线 */
.logo .mark svg path,.logo-w .mark svg path{fill:none;stroke:currentColor;stroke-width:8;stroke-linecap:round}
.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:0.875rem;font-weight:800}
.auth-brand h1{font-size:1.875rem;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:0.84375rem;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:0.6875rem;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:1.5rem;font-weight:800}
.auth-box .sub{font-size:0.84375rem;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:0.78125rem;color:var(--ink-3)}
.form-error-bar{background:var(--up-bg);color:#b91c1c;font-size:0.8125rem;border-radius:var(--r-md);
  padding:10px 14px;margin-bottom:16px;display:none}
.form-error-bar.show{display:block}
.form-error-bar.ok{background:var(--info-bg);color:var(--ink)}
.form-error-bar a{color:var(--info);font-weight:700;text-decoration:underline}
@media (max-width:860px){
  .auth-wrap{grid-template-columns:1fr}
  .auth-brand{padding:40px 32px;gap:28px}
  .auth-brand h1{font-size:1.375rem}
  .auth-brand .pts{display:none}
}

/* ---------------- 页脚 ---------------- */
.site-footer{margin-top:var(--sp-8);border-top:1px solid var(--line);padding:26px 0 40px;font-size:0.78125rem;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:0.78125rem}

/* ============================================================
   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:0.8125rem;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:1.0625rem;border-width:2px;
  box-shadow:0 3px 10px rgba(204,74,0,.30)}
.um-head .nm{font-size:0.9375rem;font-weight:800;line-height:1.25;color:var(--ink)}
.um-head .em{font-size:0.71875rem;color:var(--ink-2)}
.um-plan{margin-left:auto;font-size:0.65625rem;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:1rem;box-shadow:0 2px 6px rgba(183,121,31,.32)}
.um-banner .tx{min-width:0}
.um-banner b{display:block;font-size:0.8125rem;color:#7a520e}
.um-banner .d{font-size:0.65625rem;color:#9a6d15;line-height:1.5;margin-top:1px}
.um-banner .go{margin-left:auto;font-size:0.6875rem;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:0.625rem;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:0.84375rem;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:0.8125rem;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:0.6875rem;color:var(--ink-3);font-family:var(--mono)}
.um-item .pro-tag{font-size:0.59375rem;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:0.8125rem;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:0.78125rem;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:0.75rem;font-weight:800;letter-spacing:.1em;color:var(--ink-2)}
.uc-nav .uc-sub{font-size:0.6875rem;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:0.84375rem;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:0.75rem;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:0.65625rem;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:0.84375rem;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(var(--vw) - 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:0.75rem;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:1.25rem;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:0.875rem;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:1.25rem;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:0.75rem;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:0.75rem}
.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:0.75rem;color:var(--ink-2)}
.research-preview{display:flex;gap:var(--sp-4);align-items:baseline;flex-wrap:wrap;font-size:0.75rem;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:calc(var(--vh) * .85);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:1rem}.research-score{gap:var(--sp-1)}.research-score strong{font-size:1.625rem}}
@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:1.75rem}.research-heading{align-items:flex-start}.research-verdict h2{font-size:2.25rem}}
@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:0.75rem}.research-heading{display:block}.research-heading h1{width:100%;font-size:1.625rem}.research-identity{gap:var(--sp-2)}.research-heading>a{margin-top:var(--sp-2)}.research-dates{gap:var(--sp-1);display:grid;font-size:0.75rem;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:4rem}.research-total small{font-size:1rem}.research-verdict h2{font-size:2.125rem}.research-verdict>p{font-size:1rem}.research-explainer{display:block;font-size:0.75rem;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:1.25rem}.research-section-head p{margin:var(--sp-2) 0 0 var(--sp-4);font-size:0.75rem}.research-grid{grid-template-columns:1fr;gap:var(--sp-3)}.research-card{padding:var(--sp-4);min-height:160px}.research-card h3{font-size:1.0625rem}.research-card-head{gap:var(--sp-3)}.research-score strong{font-size:var(--font-size-30)}.research-reason{font-size:0.875rem}.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:1.25rem}}


/* 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:0.6875rem;font-weight:700;letter-spacing:.06em;color:var(--ink-3)}
.nav-tag{margin-left:auto;font-size:0.625rem;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:0.625rem;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:0.6875rem;font-weight:700;vertical-align:middle}
@media(min-width:981px){
  body.with-side{padding-left:var(--side-w)}
  body.with-side .appbar{position:fixed;left:0;top:0;bottom:0;width:var(--side-w);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);color:#fff}
  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:0.875rem;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:0.875rem}
  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);color:#fff;text-decoration:none}
  body.with-side .side-up b{font-size:0.875rem}
  body.with-side .side-up span{font-size:0.75rem;opacity:.9}
  body.with-side .user-menu{position:fixed;left:14px;right:auto;top:auto;bottom:64px;max-height:calc(var(--dvh) - 80px);overflow-y:auto}
  body.with-side .shell{max-width:var(--shell-max)}
  body.with-side .site-footer .in{max-width:var(--shell-max)}
  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:0.75rem;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:0.71875rem;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:1.5rem;font-weight:800;line-height:1.3}
.rp-stats small{font-size:0.71875rem;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:0.75rem;color:var(--ink-2)}
.ql-h b{color:var(--ink);font-size:0.8125rem}
.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{min-width:36px;height:36px;padding:0 6px;border-radius:8px;display:grid;place-items:center;font-weight:800;font-size:0.75rem;white-space:nowrap;background:var(--grade-c);color:#fff}
.qg.g-strong{background:var(--grade-a);color:#fff}.qg.g-mid{background:var(--grade-b);color:#fff}
.qg.g-avoid{background:var(--grade-d);color:#fff}.qg.g-na{background:none;border:1px dashed var(--line-2);color:var(--ink-3)}
.qn{min-width:0}.qn b{font-size:0.875rem}.qn .mono{font-size:0.6875rem;color:var(--ink-3)}
.qn small{display:block;font-size:0.71875rem;margin-top:2px}
.qs{text-align:right;white-space:nowrap}.qs b{font-size:1.375rem;font-weight:800}.qs small{font-size:0.6875rem;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:0.75rem;padding:2px 8px;border-radius:6px;background:var(--paper)}
.ql-foot{padding:10px 16px;font-size:0.75rem;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:0.875rem;font-weight:800}.rp-agenda-h small{font-weight:500;color:var(--ink-3);font-size:0.75rem;margin-left:4px}
.rp-agenda-h a{font-size:0.75rem;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:0.8125rem}.ag small{display:block;font-size:0.71875rem;color:var(--ink-3)}
.ag .d{font-family:var(--mono);font-size:0.75rem;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:1.375rem;font-weight:800;flex:none}
.fo-title{min-width:0;flex:1}.fo-title h2{font-size:1.375rem;font-weight:900;line-height:1.3}.fo-title h2 .mono{font-size:0.8125rem;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:0.75rem;font-weight:700;color:var(--research-muted)}
.fo-total b{font-size:4.5rem;font-weight:800;line-height:1}.fo-total small{font-size:1.125rem;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:1.375rem;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:0.875rem;line-height:1.65}
.fo-sum p .k{flex:none;width:22px;height:22px;border-radius:5px;display:grid;place-items:center;font-size:0.75rem;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:0.75rem;color:var(--ink-2)}.fo-kv dd{font-size:1rem;font-weight:800;font-variant-numeric:tabular-nums}.fo-kv dd.na{color:var(--ink-3);font-weight:500;font-size:0.875rem}
.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:0.9375rem;font-weight:800}.fo-f-h span{font-size:0.75rem;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:0.8125rem;font-weight:700}.ft-h b{margin-left:auto;font-size:1.25rem;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:0.75rem;color:var(--ink-2);line-height:1.55}.ft small{font-size:0.6875rem;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:0.875rem}.fo-hook span{font-size:0.78125rem;color:var(--ink-2)}
.fo-foot{margin-top:auto;padding:12px 22px;border-top:1px solid var(--line);font-size:0.75rem;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:0.78125rem;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:1.625rem;font-weight:800;line-height:1.25}
.bt-kpi .d{font-size:0.75rem;color:var(--ink-2)}
.up{color:var(--up-text)}.dn{color:var(--down-text)}
.bt-note{font-size:0.78125rem;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:0.9375rem;font-weight:800}.bt-h h2 small{font-size:0.75rem;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:0.75rem;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:0.6875rem;fill:var(--ink-3);font-family:var(--mono)}
.bt-chart .end{font-size:0.75rem;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:0.75rem;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:1rem;font-weight:800}.bt-cta p{font-size:0.84375rem;color:var(--ink-2);line-height:1.65}
.bt-cta ul{margin:0;padding-left:18px;font-size:0.8125rem;color:var(--ink)}.bt-cta li+li{margin-top:4px}
.bt-cta .btn{margin-top:auto}.bt-cta small{font-size:0.75rem;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:0.8125rem}
.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;padding:0 5px;border-radius:4px;font-style:normal;font-size:0.6875rem;font-weight:700;white-space:nowrap;background:var(--grade-c);color:#fff}
.g.g-A{background:var(--grade-a);color:#fff}.g.g-B{background:var(--grade-b);color:#fff}.g.g-D{background:var(--grade-d);color:#fff}
.bt-pager{display:flex;align-items:center;justify-content:flex-end;gap:8px;padding:10px 14px;border-top:1px solid var(--line);font-size:0.78125rem;color:var(--ink-2)}
.bt-side-panel{padding:0}.bt-side-panel .tb td,.bt-side-panel .tb th{padding:8px 14px;font-size:0.8125rem}
.bt-foot{padding:10px 14px 14px;font-size:0.75rem;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:0.8125rem}
.bt-factors .nm small{display:block;font-size:0.6875rem;color:var(--ink-3)}
.bt-factors b{font-size:0.8125rem;color:var(--brand-deep)}
.bt-factors .muted{font-size:0.75rem}
.bt-method{padding:0}.bt-method ul{margin:0;padding:12px 18px 16px 34px;font-size:0.8125rem;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:0.84375rem}
.tb th{text-align:left;font-size:0.71875rem;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:0.84375rem;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:0.8125rem;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:0.8125rem;font-weight:700}
.sx-form small,.sx-price{font-size:0.75rem;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:0.8125rem;color:var(--ink-3)}
.sx-shell .in input{border:0;outline:0;background:none;font:inherit;font-size:0.9375rem;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:0.9375rem}.sx-n .mono{font-size:0.75rem;color:var(--ink-3)}.sx-n small{display:block;font-size:0.75rem;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:0.8125rem;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:0.71875rem;color:var(--ink-3)}
.sx-adj summary{cursor:pointer;font-size:0.75rem;color:var(--brand-deep);font-weight:700;margin-top:2px}
.sx-adj label{display:inline-flex;align-items:center;gap:6px;font-size:0.75rem;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:1.125rem}.sx-plan small{font-size:0.75rem;color:var(--ink-3)}
.sx-tag{display:inline-flex;align-items:center;height:26px;padding:0 10px;border-radius:6px;font-size:0.8125rem;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:0.78125rem;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:0.75rem;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:0.875rem;color:var(--research-muted);border-bottom:1px solid var(--research-line);padding-bottom:6px}
.best-plan b{color:#fff}
.sx-best .amt{font-size:3rem;font-weight:800;line-height:1;font-variant-numeric:tabular-nums}.sx-best .amt small{font-size:1rem;color:var(--research-muted);margin-right:4px}
.sx-best .sub{display:flex;gap:16px;margin-top:12px;font-size:0.75rem;color:var(--research-muted);flex-wrap:wrap}
.sx-best .sub b{display:block;color:#fff;font-size:1rem;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:1rem;font-weight:800}.sx-gate p{font-size:0.8125rem;color:var(--ink-2);line-height:1.6}.sx-gate .row{display:flex;gap:8px;flex-wrap:wrap}.sx-gate small{font-size:0.75rem;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:0.8125rem}
.sx-comp li span small{display:block;font-size:0.71875rem;color:var(--ink-3)}.sx-comp li>small{grid-column:2;text-align:right;font-size:0.71875rem;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:0.71875rem;font-weight:700;color:var(--ink-3)}
.sx-hook a{font-size:0.78125rem;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:0.75rem;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:1.25rem;font-weight:800}
.sx-best-empty{padding:18px}.sx-best-empty h2{font-size:1rem}.sx-best-empty p{font-size:0.8125rem;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(2,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:0.75rem;font-weight:700;color:var(--ink-2)}
.api-plan .price{font-size:2.25rem;font-weight:900;line-height:1.2}.api-plan .price small{font-size:0.875rem;font-weight:500;color:var(--ink-3)}
.api-plan p{font-size:0.78125rem;color:var(--ink-3)}.api-plan ul{margin:6px 0 0;padding-left:18px;font-size:0.84375rem;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:0.78125rem;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:0.875rem;font-weight:800;margin-bottom:6px}.api-notes p{font-size:0.8125rem;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:0.75rem;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:0.8125rem}

/* ================= 宽屏适配 · 阶段 1（2026-09-28） =================
   ≤1440 与设计稿一致：侧栏 232、版心 1208、根字号 16px。
   1441 起侧栏、导航与版心随屏宽线性放大：1920 约 侧栏 253 / 版心 1440，2560 为 侧栏 280 / 版心 1600；
   2400 起整页放大 1.125、版心 1760、侧栏另行加大，3600 起整页放大 1.5（见下方两节）。长文正文仍按字数限宽。 */
:root{--side-w:232px;--shell-max:1208px}
@media(min-width:1441px){
  :root{
    --side-w:clamp(232px, calc(232px + (var(--vw) - 1440px) * .04286), 280px);
    --shell-max:clamp(1208px, calc(1208px + (var(--vw) - 1440px) * .48334), 1440px);
  }
  body.with-side nav.main a{font-size:clamp(14px, calc(14px + (var(--vw) - 1440px) * .001786), 16px);
    padding-top:clamp(8px, calc(8px + (var(--vw) - 1440px) * .001786), 10px);padding-bottom:clamp(8px, calc(8px + (var(--vw) - 1440px) * .001786), 10px)}
  body.with-side nav.main a .ni{width:clamp(18px, calc(18px + (var(--vw) - 1440px) * .001786), 20px);font-size:clamp(14px, calc(14px + (var(--vw) - 1440px) * .001786), 16px)}
  body.with-side .side-grp{font-size:clamp(11px, calc(11px + (var(--vw) - 1440px) * .000893), 12px)}
}
@media(min-width:1921px){
  :root{--shell-max:clamp(1440px, calc(1440px + (var(--vw) - 1920px) * .25), 1600px)}
}
/* ================= W3 宽屏整页放大 1.125（2026-09-30 产品决定） =================
   视口 ≥2400 宽且 ≥1000 高（2K 100% 缩放、4K 150% 缩放、带鱼屏）整页放大 1.125 倍：2560 宽按 2276 布局宽排版，
   字、间距与控件等比变大；版心 1760（显示约 1980），侧栏 256（见文末）。原 zoom:1.25 在 2K 下偏大、不放大又偏小，
   1.125 为看过样张后的取值。设计稿见 Penpot“/ W3 2560”画板与 penpot-import/wide-20260929/。
   视口单位经 --vw/--vh/--dvh 换算，避免被放大两次；窗口高度不足时不放大。 */
@media(min-width:2400px) and (min-height:1000px){
  html{zoom:1.125}
  :root{--vw:calc(100vw / 1.125); --vh:calc(100vh / 1.125); --dvh:calc(100dvh / 1.125); --shell-max:1760px}
}
/* ================= 4K 等比放大（2026-09-28） =================
   4K 屏 100% 缩放（约 3840 宽）整页放大 1.5 倍，页面按 2560 宽排版，版心沿用 W3 的 1760。 */
@media(min-width:3600px) and (min-height:1500px){
  html{zoom:1.5}
  :root{--vw:calc(100vw / 1.5); --vh:calc(100vh / 1.5); --dvh:calc(100dvh / 1.5)}
}
/* ================= v3.1 · M2.6 列表组件 =================
   研选评级徽章、股票卡片、深色市场条、右栏日程与首日柱状图。首用于 /ipo/，首页与日程页复用。
   等级用四级配色：--grade-a…d 实色底配白字，另有 4 格刻度，不单靠颜色区分等级；表格内用 .gpill。.gb-letter 仅设计规范页旧演示。 */
.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(--g);color:#fff}
.grade-badge .gb-letter{font-size:2rem;font-weight:800;line-height:1}
.grade-badge .gb-label{font-size:.75rem;font-weight:700;line-height:1.35;white-space:nowrap}
.grade-meter{display:flex;gap:3px;margin-top:3px}
.grade-meter i{width:12px;height:4px;border-radius:2px;background:rgba(255,255,255,.35)}
.grade-meter i.on{background:#fff}
.grade-badge.pending{background:var(--surface);border:1px dashed var(--line-2);color:var(--ink-2)}
.grade-badge.pending .gb-letter{font-size:1.375rem}

.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:.8125rem;color:var(--ink-2);margin-bottom:var(--sp-3)}
.ipo-head .crumbs .breadcrumb{margin:0}
.ipo-head h1{font-size:2rem;font-weight:700;line-height:1.3}
.ipo-head .lede{margin-top:var(--sp-2);font-size:1rem;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:.8125rem;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:.8125rem;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:.8125rem;color:var(--research-muted)}
.mkt .v{font-size:1.75rem;font-weight:700;line-height:1.35}
.mkt .v small{margin-left:4px;font-size:.875rem;font-weight:400;color:var(--research-muted)}
.mkt .d{margin-top:6px;font-size:.75rem;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:1.25rem;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:.6875rem;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:1.25rem;font-weight:700}
.ipo-sec-head p{font-size:.8125rem;color:var(--ink-2)}
.ipo-empty{padding:18px 20px;border:1px dashed var(--line-2);border-radius:var(--r-lg);font-size:.875rem;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:.875rem}
.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:1.125rem;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:.75rem;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:.8125rem;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:.75rem;color:var(--ink-2)}
.ipo-card-facts dd{margin:0;font-size:.9375rem;font-weight:600;white-space:nowrap}
.ipo-card-facts .soon{color:var(--brand-deep)}
.ipo-card-actions .btn{min-width:112px}
/* 研选分横排卡片（2026-09-29）：左侧 4px 评级色边 + 渐隐阴影；右侧“申购分析”与“加入关注”上下排 */
.ipo-card{--g:var(--line-2);border-left:4px solid var(--g);box-shadow:inset 18px 0 22px -18px color-mix(in srgb,var(--g) 55%,transparent)}
.ipo-card.g-a{--g:var(--grade-a)}.ipo-card.g-b{--g:var(--grade-b)}.ipo-card.g-c{--g:var(--grade-c)}.ipo-card.g-d{--g:var(--grade-d)}
.ipo-card-actions{display:flex;flex-direction:column;gap:8px;min-width:140px}
.ipo-card-actions .btn,.ipo-card-actions .watch-box{width:100%}
.ipo-score-note{margin:0 0 var(--sp-3);font-size:.8125rem;color:var(--ink-2)}

.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:1rem;font-weight:700}
.rail-card h2 a{font-size:.8125rem;font-weight:400}
.rail-card p{font-size:.8125rem;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:.8125rem;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:.8125rem;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:.6875rem;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}}

/* ================= 侧栏 v4（阶段 2，2026-09-28） =================
   结构与挂钩类名沿用 v3（.appbar / nav.main / .side-grp / .side-up / .side-foot / .searchbar）；
   新增品牌定位语、收起按钮、线性 SVG 图标、搜索快捷键提示、实时角标（仅新页面）与收起后的 72px 图标栏。
   清单与图标见 web/src/lib/side-nav.json；原型见 docs/prototypes/sidebar-v4/。 */
.appbar svg{fill:none;stroke:currentColor;stroke-width:1.75;stroke-linecap:round;stroke-linejoin:round}
.appbar .ni svg{width:18px;height:18px;display:block}
.appbar .searchbar svg{width:16px;height:16px;flex:none;color:var(--ink-3)}
.logo-name{display:flex;flex-direction:column;line-height:1.2}
.logo-name small,.side-collapse,.nav-count,.nav-today,.nav-tip,.searchbar kbd,.side-up .up-go{display:none}
.side-brand{display:flex;align-items:center;gap:var(--sp-2)}
.nav-count{min-width:20px;height:20px;padding:0 6px;border-radius:var(--r-pill);background:var(--brand-soft);color:var(--brand-deep);
  font-size:0.6875rem;font-weight:700;font-variant-numeric:tabular-nums;align-items:center;justify-content:center}
.nav-count.quiet{background:#e9e0d2;color:var(--ink-2)}
.nav-today{align-items:center;gap:6px;font-size:0.6875rem;font-weight:700;color:var(--brand-deep)}
.nav-today em{font-style:normal}
.nav-today i{width:7px;height:7px;border-radius:50%;background:var(--brand-hi);box-shadow:0 0 0 3px rgba(255,106,0,.18)}

@media(min-width:981px){
  body.with-side .appbar{background:linear-gradient(180deg,#f3ece1 0%,#efe6d7 100%)}
  body.with-side .appbar-in{padding:16px 12px 12px}
  body.with-side .side-brand{padding:2px 4px 12px}
  body.with-side .appbar .logo{order:0;padding:0;gap:10px;min-width:0}
  body.with-side .appbar .logo .mark{width:36px;height:36px;border-radius:10px;font-size:1.125rem;box-shadow:inset 0 -2px 0 rgba(0,0,0,.12)}
  body.with-side .logo-name{font-size:1.0625rem;font-weight:800;white-space:nowrap}
  body.with-side .logo-name small{display:block;font-size:0.71875rem;font-weight:500;color:var(--ink-2)}
  body.with-side .side-collapse{display:grid;place-items:center;margin-left:auto;width:30px;height:30px;flex:none;border:0;border-radius:8px;background:transparent;color:var(--ink-3);cursor:pointer}
  body.with-side .side-collapse:hover{background:rgba(255,255,255,.7);color:var(--ink)}
  body.with-side .side-collapse:focus-visible{outline:2px solid var(--brand);outline-offset:1px}
  body.with-side .side-collapse svg{width:18px;height:18px;transition:transform .2s}

  body.with-side .appbar .searchbar{order:0;height:40px;margin:0 2px 8px;padding:0 10px;border-radius:10px;gap:8px}
  body.with-side .appbar .searchbar input{font-size:0.84375rem;min-width:0}
  body.with-side .appbar .searchbar kbd{display:inline-block;font-family:var(--mono);font-size:0.6875rem;line-height:16px;color:var(--ink-3);
    border:1px solid var(--line-2);border-bottom-width:2px;border-radius:5px;padding:0 5px}

  body.with-side nav.main{gap:2px}
  body.with-side nav.main a{height:clamp(40px, calc(40px + (var(--vw) - 1440px) * .00357), 44px);padding-top:0;padding-bottom:0;padding-left:10px;padding-right:10px;
    border-radius:10px;gap:11px;align-items:center}
  body.with-side nav.main a .ni{width:20px;color:var(--ink-2)}
  body.with-side nav.main a .ni svg{width:20px;height:20px}
  body.with-side nav.main a:hover{background:rgba(255,255,255,.62)}
  body.with-side nav.main a:focus-visible{outline:2px solid var(--brand);outline-offset:-2px}
  body.with-side nav.main a.on::after{left:-4px;top:10px;bottom:10px}
  body.with-side nav.main .nl{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  body.with-side nav.main .nav-count:not([hidden]),body.with-side nav.main .nav-today:not([hidden]){display:inline-flex}
  body.with-side .side-grp{display:flex;align-items:center;gap:8px;padding:0;margin:14px 10px 6px;letter-spacing:.12em}
  body.with-side .side-grp::after{content:"";flex:1;height:1px;background:var(--line)}

  body.with-side .side-up{flex-direction:row;align-items:center;gap:10px;margin:0 2px 10px;padding:10px 12px;border-radius:12px;
    background:var(--brand-soft);border:1px solid #f3c9a8;color:var(--brand-deep)}
  body.with-side .side-up:hover{border-color:var(--brand)}
  body.with-side .side-up .ni{width:20px;color:var(--brand-hi)}
  body.with-side .side-up .ni svg{width:20px;height:20px}
  body.with-side .side-up .up-text{display:flex;flex-direction:column;min-width:0;line-height:1.3}
  body.with-side .side-up .up-text b{font-size:0.84375rem}
  body.with-side .side-up .up-text small{font-size:0.6875rem;color:var(--ink-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  body.with-side .side-up .up-go{display:block;width:16px;height:16px;margin-left:auto;flex:none;color:var(--brand-deep)}
  body.with-side .side-foot{margin:0 2px;padding-top:10px}

  /* 收起：72px 图标栏；名称改为悬停提示，角标缩成小号，今日只留橙点 */
  html.side-collapsed{--side-w:72px}
  html.side-collapsed body.with-side .appbar{overflow:visible}
  html.side-collapsed body.with-side .appbar-in{padding:16px 10px 12px}
  html.side-collapsed body.with-side .side-brand{flex-direction:column;gap:8px;padding:2px 0 10px}
  html.side-collapsed body.with-side .logo-name,
  html.side-collapsed body.with-side nav.main .nl,
  html.side-collapsed body.with-side nav.main .nav-tag,
  html.side-collapsed body.with-side .nav-today em,
  html.side-collapsed body.with-side .side-up .up-text,
  html.side-collapsed body.with-side .side-up .up-go,
  html.side-collapsed body.with-side .appbar .searchbar input,
  html.side-collapsed body.with-side .appbar .searchbar kbd,
  html.side-collapsed body.with-side .appbar .searchbar .research-sr,
  html.side-collapsed body.with-side .side-account-details,
  html.side-collapsed body.with-side .side-account-notifications{display:none}
  html.side-collapsed body.with-side .side-collapse{margin:0}
  html.side-collapsed body.with-side .side-collapse svg{transform:rotate(180deg)}
  html.side-collapsed body.with-side .appbar .searchbar{justify-content:center;padding:0;margin:0 0 8px;cursor:pointer}
  html.side-collapsed body.with-side nav.main a{justify-content:center;padding:0}
  html.side-collapsed body.with-side .side-grp{font-size:0;height:1px;margin:10px 8px;background:var(--line)}
  html.side-collapsed body.with-side .side-grp::after{display:none}
  html.side-collapsed body.with-side nav.main .nav-count,html.side-collapsed body.with-side nav.main .nav-today{position:absolute;top:5px;right:5px}
  html.side-collapsed body.with-side nav.main .nav-count{min-width:16px;height:16px;padding:0 4px;font-size:0.625rem}
  html.side-collapsed body.with-side .side-up{justify-content:center;padding:10px 0;margin:0 0 10px;position:relative}
  html.side-collapsed body.with-side .side-foot{justify-content:center;margin:0}
  html.side-collapsed body.with-side .side-auth-links{flex-direction:column}
  html.side-collapsed body.with-side .side-auth-links .btn-ghost{display:none}
  html.side-collapsed body.with-side .side-auth-links .btn{padding:0;font-size:0.75rem}
  html.side-collapsed body.with-side .side-account-toggle{flex:0 0 auto;justify-content:center}
  html.side-collapsed body.with-side nav.main a:hover .nav-tip,html.side-collapsed body.with-side .side-up:hover .nav-tip{
    display:block;position:absolute;left:calc(100% + 12px);top:50%;transform:translateY(-50%);z-index:70;pointer-events:none;
    background:var(--research-ink);color:#fff;font-size:0.75rem;font-weight:600;padding:5px 9px;border-radius:7px;white-space:nowrap}
}

/* ================= 2K／4K 侧栏加大（2026-09-28；2026-09-30 宽改 256） =================
   ≥2400 宽侧栏再放大一档：导航 15→16px、行高 44→48、图标 20→22、分组标题 11→12px；宽 256，
   叠加整页放大后 2K 显示约 288、4K 约 384 物理像素。≤2399 宽保持原尺寸。 */
@media(min-width:2400px) and (min-height:1000px){
  :root{--side-w:256px}
  body.with-side .appbar-in{padding:18px 14px 14px}
  body.with-side .side-brand{padding:2px 4px 14px}
  body.with-side .appbar .logo .mark{width:40px;height:40px;font-size:1.25rem}
  body.with-side .logo-name{font-size:1.1875rem}
  body.with-side .logo-name small{font-size:0.78125rem}
  body.with-side .appbar .searchbar{height:44px;margin-bottom:10px}
  body.with-side .appbar .searchbar input{font-size:0.9375rem}
  body.with-side nav.main{gap:4px}
  body.with-side nav.main a{height:48px;font-size:1rem;gap:12px;padding-left:12px;padding-right:12px}
  body.with-side nav.main a .ni,body.with-side nav.main a .ni svg{width:22px;height:22px}
  body.with-side .side-grp{font-size:0.75rem;margin:18px 12px 8px}
  body.with-side .nav-count{min-width:22px;height:22px;font-size:0.75rem}
  body.with-side .nav-today{font-size:0.75rem}
  body.with-side nav.main .nav-tag{font-size:0.6875rem;padding:2px 7px}
  body.with-side .side-up{padding:12px 14px}
  body.with-side .side-up .up-text b{font-size:0.9375rem}
  body.with-side .side-up .up-text small{font-size:0.75rem}
  body.with-side .side-auth-links .btn{height:40px;font-size:0.875rem}
  body.with-side .side-account-name{font-size:0.9375rem}
  body.with-side .side-account-email{font-size:0.75rem}
}
/* ================= W3 宽屏 · 组合策略（2026-09-30） =================
   ≥2400 宽且 ≥1000 高（整页 ×1.125）：右栏 380→556；条件表单三列、每个输入框最宽 360，申购方式另起一行，
   “重新测算”仍贴卡片右缘。设计稿：Penpot“组合策略 / W3 2560”。 */
@media(min-width:2400px) and (min-height:1000px){
  .sx-grid{grid-template-columns:minmax(0,1fr) 556px}
  .sx-form{grid-template-columns:repeat(3,minmax(0,360px)) 1fr}
  .sx-form > div.fld{grid-column:1}
  /* 左栏与右栏底边对齐：本期新股卡片随右栏高度拉长 */
  .sx-left{align-self:stretch}
  .sx-stocks{flex:1}
}
/* ================= W3 宽屏 · 本期新股与页脚（2026-09-30；10-01 深色市场参考移入右栏） =================
   本期新股：页头通栏，其下主栏与右栏 720 并排、顶边对齐。深色“市场参考”移到右栏最上方（产品选定方案 B：两栏底边基本对齐），
   栏内改为打新情绪一整行、三个指标一行；其下四张卡排成 2×2，每行等高。
   页脚：内容不足一屏时正文最小高度补足，页脚贴在窗口底部，不再悬在屏幕中间。 */
@media(min-width:2400px) and (min-height:1000px){
  .ipo-page{display:grid;grid-template-columns:minmax(0,1fr) 720px;grid-template-rows:auto auto 1fr;column-gap:var(--sp-5);align-items:start}
  .ipo-page > *{grid-column:1 / -1;min-width:0}
  .ipo-page > .ipo-cols{display:contents}
  .ipo-main{grid-column:1;grid-row:2 / span 2}
  .ipo-page > .mkt{grid-column:2;grid-row:2;margin:0 0 var(--sp-4);padding:22px 26px 24px}
  .ipo-rail{grid-column:2;grid-row:3;grid-template-columns:1fr 1fr;align-items:stretch}
  .mkt-grid{grid-template-columns:repeat(3,minmax(0,1fr));row-gap:18px}
  .mkt-cell:first-child{grid-column:1 / -1;padding:0 0 18px;border-bottom:1px solid var(--research-line)}
  .mkt-cell:nth-child(2){padding-left:0;border-left:0}
  .shell{min-height:calc(var(--vh) - 6.25rem)}
}
