/* ============================================================
   public/v2.css — 公共站共享样式层（T0 骨架 + V2.3 组件库）
   沿用公共站 V2 概念稿的像素与交互基线：令牌名与值、断点 1180/1000/750/440、类名与组件状态
   （涨跌胶囊/面积走势/分位标尺/基准双条/倍数比例条/视图淡入）保持概念稿一致；
   深色为默认主题，浅色经 html[data-theme="light"] 生效（切换逻辑见 v2.js）。
   与概念稿的差异（均为载体差异，非视觉/结构/口径差异）：
   - SPA 视图按钮 → 三张独立页面：导航项为 <a>，与 button 同样式，
     active/aria-current 由 v2.js 按 body[data-page] 同步；
   - 删除仅服务于概念稿「我的资产」演示占位的 .privateTabs / .skeleton
     （公共版「我的资产」直接链接到登录后的现有工作台）；
   - `#dca .planDetail` 的吸顶偏移放宽为 `.planDetail`（静态页无 #dca 容器）；
   - 新增 .pending：数据区「加载中…」占位（渲染任务填充后即被替换）。
   V2.3 增量（PLAN §三.5/§四，设计稿与像素基线已在 2.4.0 清理中下线）：
   - 新组件：.freshRow（新鲜度行，含 .fp/.dot 状态点、.freshSep/.freshWarn）、
     .deltaRow+.deltaPts（涨跌双数字）、.sparkWrap+.sparkDot（终点圆点）、
     .flash-up/.flash-down（PriceFlash）、.movers（最强最弱）、
     .dayGroup+.dayHead（分日时间流）、.metaBand（指标带）、.methodTag（方法标签）、
     .checkRow 系（体检卡）、.attrBar/.attrRow 系（构成卡）、.emptyState（统一空态）、
     .guestBtn/.toast（游客入口）、.freshBtn/.railToggle/.btnGhost/.loadMore（动作件）、
     .dailyBlock/.dailyItem/.dItemMeta/.dailyLead/.flashList/.flashRow（日报/快讯结构化）；
   - 底线修平（E/F 实测清单）：触控 ≥44px（手机）/≥40px（桌面 chips），
     标签字号 ≥12px、正文 ≥14px（详见组件规范文档修平清单）。
   ============================================================ */
:root{color-scheme:dark;
  --bg:#0d1417;--side:#111b1f;--surface:#162227;--surface2:#1d2c31;
  --line:#2b3c42;--lineSoft:rgba(179,210,212,.09);
  --text:#eef5f4;--sub:#a9bcbe;--mute:#84999d;
  --accent:#6fcdc3;--accentWash:rgba(111,205,195,.11);
  --red:#ff918e;--redWash:rgba(255,142,141,.13);
  --green:#72d9b1;--greenWash:rgba(114,217,177,.13);
  --gold:#eccd90;--goldWash:rgba(236,205,144,.12);
  --white:#eef9f8;--shadow:0 18px 50px rgba(0,0,0,.16)}
:root[data-theme="light"]{color-scheme:light;
  --bg:#f4f7f6;--side:#fbfdfc;--surface:#fff;--surface2:#e9f0ee;
  --line:#dbe5e2;--lineSoft:#e8efec;
  --text:#132528;--sub:#4a6264;--mute:#5b7275;
  --accent:#0e756e;--accentWash:rgba(14,117,110,.08);
  --red:#b8434a;--redWash:rgba(184,67,74,.08);
  --green:#0f7d5f;--greenWash:rgba(15,125,95,.09);
  --gold:#8f6118;--goldWash:rgba(143,97,24,.1);
  --white:#fff;--shadow:0 16px 44px rgba(12,34,38,.06)}

*{box-sizing:border-box}
html{scroll-behavior:smooth}
body{margin:0;font:14px/1.6 -apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",system-ui,sans-serif;color:var(--text);background:var(--bg)}
button,input{font:inherit;color:inherit}button{cursor:pointer}a{color:inherit;text-decoration:none}
button:focus-visible,a:focus-visible,input:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
[hidden]{display:none!important}
.pending{grid-column:1/-1;font-size:12.5px;color:var(--mute);line-height:1.7}

/* ---------- 布局骨架：侧栏 + 主区（桌面 >750px；≤750 见移动端块） ---------- */
.app{display:grid;grid-template-columns:226px minmax(0,1fr);min-height:100vh}
.sidebar{position:sticky;top:0;height:100vh;border-right:1px solid var(--line);background:var(--side);padding:26px 14px 17px;display:flex;flex-direction:column}
.brand{display:flex;align-items:center;gap:10px;margin:0 10px 42px}
.brandlogo{width:34px;height:34px;border:1px solid color-mix(in srgb,var(--accent) 43%,var(--line));border-radius:10px;display:flex;align-items:center;justify-content:center;color:var(--accent);font-weight:700;font-size:18px}
.brandtext b{display:block;font-size:18px;letter-spacing:-.01em}
.brandtext span{font-size:12px;color:var(--mute);letter-spacing:.13em}
.navsec{font-size:12px;color:var(--mute);padding:0 13px;margin:0 0 10px;letter-spacing:.09em}
.navigation{display:grid;gap:4px}
.navigation a,.navigation button{position:relative;width:100%;display:flex;align-items:center;gap:12px;text-align:left;background:transparent;border:1px solid transparent;border-radius:9px;padding:11px 12px;font-size:14px;color:var(--sub);min-height:44px}
.navigation a::before,.navigation button::before{content:"";position:absolute;left:3px;top:26%;height:48%;width:3px;border-radius:2px;background:transparent}
.navigation a:hover,.navigation button:hover{background:var(--surface2);color:var(--text)}
.navigation a.active,.navigation button.active{background:var(--accentWash);border-color:color-mix(in srgb,var(--accent) 21%,var(--line));color:var(--accent);font-weight:600}
.navigation a.active::before,.navigation button.active::before{background:var(--accent)}
.navigation svg{width:18px;height:18px;stroke-width:1.8;flex:none}
.navhr{height:1px;background:var(--line);margin:24px 13px 21px}
.sidebarFoot{margin-top:auto;font-size:12px;color:var(--mute);line-height:1.8;padding:16px 12px 0;border-top:1px solid var(--line)}

.top{height:66px;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:0 clamp(22px,3.7vw,57px);border-bottom:1px solid var(--line);position:sticky;top:0;background:color-mix(in srgb,var(--bg) 86%,transparent);backdrop-filter:blur(10px);z-index:20}
.crumb{font-size:13px;color:var(--mute)}
.crumb strong{color:var(--text);font-weight:600;margin-left:10px}
.topActions{display:flex;align-items:center;gap:14px}
.status{font-size:12px;color:var(--mute);white-space:nowrap}
.livepoint{display:inline-block;width:6px;height:6px;border-radius:50%;background:var(--accent);margin-right:6px}
.theme{border:1px solid var(--line);background:var(--surface);border-radius:8px;padding:8px 12px;font-size:12px;min-height:40px}
.theme:hover{border-color:color-mix(in srgb,var(--accent) 40%,var(--line))}
.login{font-size:12px;font-weight:600;color:var(--accent);display:inline-flex;align-items:center;min-height:44px;padding:0 4px}
.main{min-width:0}
.container{max-width:1370px;padding:34px clamp(22px,3.7vw,57px) 90px;margin:auto}

/* ---------- 文字层级 ---------- */
.kicker{font-size:12px;color:var(--accent);font-weight:700;letter-spacing:.11em}
.hero{display:flex;align-items:end;justify-content:space-between;gap:18px;margin:3px 0 24px}
.hero h1{font-size:clamp(28px,3vw,36px);letter-spacing:-.015em;margin:6px 0 8px;font-weight:700;line-height:1.28}
.hero p{font-size:14px;color:var(--sub);margin:0;max-width:790px;line-height:1.75}
.pill{font-size:12px;border:1px solid var(--line);border-radius:99px;padding:5px 11px;color:var(--mute);white-space:nowrap;display:inline-flex;align-items:center;gap:5px}
.sectionHead{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:0 0 14px}
.sectionHead h2{font-size:17px;letter-spacing:-.01em;margin:0;font-weight:600}
.sectionHead small,.sectionHead a{color:var(--mute);font-size:12px}
.sectionHead a:hover{color:var(--accent)}

/* ---------- 筛选 chips（全站同方言） ---------- */
.filters{display:flex;gap:7px;flex-wrap:wrap}
.filter{border:1px solid var(--line);background:transparent;color:var(--sub);border-radius:8px;padding:8px 13px;font-size:12px;min-height:40px}
.filter:hover{background:var(--surface2)}
.filter.active{color:var(--accent);background:var(--accentWash);border-color:color-mix(in srgb,var(--accent) 30%,var(--line));font-weight:600}

/* ---------- 行情卡：价格层级 + 涨跌胶囊 + 面积走势 ---------- */
.market-head{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:10px;margin-bottom:15px}
.marketGrid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}
.quote{min-width:0;border:1px solid var(--line);border-radius:12px;background:var(--surface);padding:20px 20px 15px;transition:transform .18s ease,border-color .18s ease,box-shadow .18s ease}
.quote:hover{transform:translateY(-2px);border-color:color-mix(in srgb,var(--accent) 32%,var(--line));box-shadow:var(--shadow)}
.quoteTop{display:flex;justify-content:space-between;align-items:center;gap:8px}
.quoteTitle{font-size:13px;color:var(--sub);font-weight:560}
.quoteRegion{font-size:12px;border:1px solid var(--line);border-radius:5px;padding:1px 7px;color:var(--mute);letter-spacing:.04em}
.quotePrice{font-size:27px;letter-spacing:-.01em;font-weight:700;line-height:1.1;margin-top:12px;font-variant-numeric:tabular-nums}
.quoteDelta{display:inline-flex;align-items:center;gap:4px;font-size:12.5px;font-variant-numeric:tabular-nums;font-weight:600;margin-top:8px;padding:3px 10px;border-radius:7px}
.red{color:var(--red)}.green{color:var(--green)}
.quoteDelta.red{background:var(--redWash)}
.quoteDelta.green{background:var(--greenWash)}
.quoteTrend{width:100%;height:39px;margin:14px 0 6px;display:block}
.quoteFooter{font-size:12px;color:var(--mute);display:flex;justify-content:space-between;gap:8px}
.rule{height:1px;background:var(--line);margin:26px 0}

/* ---------- 首页双栏 ---------- */
.hometwo{display:grid;grid-template-columns:minmax(0,1.85fr) minmax(276px,1fr);gap:28px}
.newsItem{display:grid;grid-template-columns:57px minmax(0,1fr);gap:15px;padding:18px 0;border-bottom:1px solid var(--line)}
.newsItem:first-child{padding-top:0}
.ntime{font-size:12px;color:var(--mute);font-variant-numeric:tabular-nums;padding-top:3px}
.nmeta{font-size:12px;color:var(--mute);display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.ntag{display:inline-block;border:1px solid var(--line);border-radius:5px;padding:1px 7px;color:var(--sub);font-size:12px}
.ntag.accent{color:var(--accent);background:var(--accentWash);border-color:color-mix(in srgb,var(--accent) 28%,var(--line))}
.ntitle{font-size:15.5px;line-height:1.5;font-weight:600;letter-spacing:-.005em;margin:7px 0}
.ndesc{font-size:14px;color:var(--sub);line-height:1.78;margin:6px 0 9px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}

/* ---------- 侧栏卡片 ---------- */
.box{border:1px solid var(--line);background:var(--surface);border-radius:12px;padding:21px}
.box + .box{margin-top:12px}
.box h3{margin:0 0 7px;font-size:16px;font-weight:600}
.box p{font-size:14px;color:var(--sub);line-height:1.75;margin:0 0 13px}
.asideMetric{border-top:1px solid var(--line);padding:13px 0;display:flex;gap:12px;justify-content:space-between;align-items:center}
.asideMetric:first-of-type{border-top:0}
.asideMetric b{font-weight:600}
.asideMetric span{font-size:12px;color:var(--sub)}
.asideMetric strong{font-size:18px;color:var(--accent);font-variant-numeric:tabular-nums;font-weight:700}
.link{font-size:12px;font-weight:600;color:var(--accent)}
.mutednote{font-size:12.5px;color:var(--mute);line-height:1.75;margin:13px 0 0}

/* ---------- 资讯页 ---------- */
.newsTools{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:21px 0 19px;flex-wrap:wrap}
.mode{display:flex;gap:3px;border:1px solid var(--line);padding:3px;border-radius:9px;background:var(--surface)}
.mode button{border:0;background:transparent;padding:7px 13px;border-radius:7px;font-size:12px;color:var(--sub);min-height:40px}
.mode button.active{background:var(--surface2);color:var(--text);font-weight:700}
.search{border:1px solid var(--line);background:var(--surface);padding:10px 12px;border-radius:8px;font-size:13px;min-width:220px;min-height:44px;outline:none}
.search:focus{border-color:color-mix(in srgb,var(--accent) 45%,var(--line))}
.search::placeholder{color:var(--mute)}
.newsLayout{display:grid;grid-template-columns:minmax(0,1fr) 260px;gap:29px;align-items:start}
.lead{border:1px solid var(--line);border-radius:12px;background:var(--surface);padding:26px 27px;margin-bottom:11px}
.lead h2{font-size:24px;line-height:1.42;margin:13px 0 11px;letter-spacing:-.01em;font-weight:700}
.lead p{font-size:14px;color:var(--sub);line-height:1.8;max-width:680px;margin:0 0 15px}
.leadhigh{border-left:3px solid var(--accent);background:var(--accentWash);border-radius:0 9px 9px 0;margin-top:19px;padding:13px 16px;display:flex;gap:10px;align-items:baseline}
.leadhigh strong{color:var(--accent);font-size:12px;white-space:nowrap;font-weight:700}
.leadhigh span{color:var(--sub);font-size:14px;line-height:1.7}
.feedList .newsItem{padding:21px 0}
.feedList .ntitle{font-size:16.5px}
.sideEyebrow{color:var(--accent);font-size:12px;font-weight:700;letter-spacing:.09em;margin-bottom:8px}
.digestItem{padding:13px 0;border-top:1px solid var(--line);font-size:14px;color:var(--sub);line-height:1.75}
.digestItem:first-of-type{border-top:0}
.digestItem b{color:var(--text);font-weight:600}
.digestIndex{font-variant-numeric:tabular-nums;color:var(--accent);margin-right:9px;font-weight:700}
.newsEmpty{background:var(--surface);border:1px dashed var(--line);border-radius:12px;padding:30px 20px;font-size:13px;color:var(--sub)}

/* ---------- 日报 ---------- */
.daily{background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:24px 27px}
.daily h2{font-size:24px;letter-spacing:-.01em}
.dailySection{border-top:1px solid var(--line);padding:16px 0;display:grid;grid-template-columns:14px minmax(0,1fr);gap:12px}
.dailySection:first-of-type{border-top:0}
.dailySection::before{content:"";width:3px;height:100%;min-height:34px;border-radius:2px;background:color-mix(in srgb,var(--accent) 34%,transparent)}
.dailySection h3{font-size:14px;margin:0 0 5px;font-weight:600;grid-column:2}
.dailySection p{font-size:14px;line-height:1.75;color:var(--sub);margin:0;grid-column:2}

/* ---------- 定投：五档体系呈现强化 ---------- */
.planList{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin:21px 0}
.plan{background:var(--surface);border:1px solid var(--line);border-radius:13px;padding:20px;text-align:left;width:100%;min-height:235px;display:flex;flex-direction:column;transition:border-color .18s ease,box-shadow .18s ease}
.plan.active{border-color:var(--accent);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--accent) 55%,transparent),var(--shadow)}
.plan:hover{border-color:color-mix(in srgb,var(--accent) 52%,var(--line))}
.planTitle{display:flex;align-items:center;justify-content:space-between;gap:8px}
.planTitle strong{font-size:16px;font-weight:600}
.planTitle span{font-size:12px;color:var(--mute)}
.mult{font-size:43px;line-height:1;font-variant-numeric:tabular-nums;font-weight:700;letter-spacing:-.03em;margin:24px 0 4px;color:var(--text)}
.mult small{font-size:15px;letter-spacing:0;margin-left:8px;font-weight:500;color:var(--sub)}
.mult small.tone-red{color:var(--red)}
.mult small.tone-green{color:var(--green)}
.mult small.tone-gold{color:var(--gold)}
.mult small.tone-neutral{color:var(--sub)}
.multFoot{font-size:12px;color:var(--sub);margin:3px 0 12px}
.planTrack{height:6px;display:flex;gap:3px;margin-top:auto}
.planTrack span{height:6px;flex:1;background:var(--surface2);border-radius:3px}
.planTrack span.filled{background:var(--accent)}
.planMeta{display:flex;justify-content:space-between;align-items:center;color:var(--mute);font-size:12px;margin-top:9px}
.planMeta em{font-style:normal;color:var(--sub);font-variant-numeric:tabular-nums;font-weight:600}
.planDetail{display:grid;grid-template-columns:minmax(0,1.26fr) minmax(260px,.9fr);gap:14px;scroll-margin-top:76px}
.recommend{border:1px solid var(--line);background:var(--surface);border-radius:12px;padding:25px}
.recommend .label{font-size:12px;color:var(--sub)}
.recommend .number{font-size:40px;font-weight:700;letter-spacing:-.02em;margin:13px 0;color:var(--accent);font-variant-numeric:tabular-nums}
.recommend .number b{font-size:18px;color:var(--sub);font-weight:500;letter-spacing:0}
.whyEyebrow{font-size:12px;color:var(--accent);font-weight:700;letter-spacing:.09em;margin:18px 0 6px}
.why{font-size:14px;color:var(--sub);line-height:1.85;margin:0;border-left:3px solid color-mix(in srgb,var(--accent) 45%,transparent);padding-left:12px}
.calc{display:flex;flex-wrap:wrap;align-items:end;gap:11px;margin:19px 0 11px;padding-top:17px;border-top:1px solid var(--line)}
.calc label{font-size:12px;color:var(--sub);display:grid;gap:6px}
.calc input{width:125px;border:1px solid var(--line);border-radius:8px;background:var(--surface2);padding:10px 11px;font-size:16px;font-variant-numeric:tabular-nums}
.calc input:focus{border-color:color-mix(in srgb,var(--accent) 50%,var(--line))}
.calcResult{font-size:13px;color:var(--sub)}
.calcResult b{font-size:21px;color:var(--text);display:block;margin-top:4px;font-variant-numeric:tabular-nums;font-weight:700}
.risk{font-size:12px;color:var(--mute);margin-top:20px;line-height:1.8}
.bandtable{display:grid;gap:0}
.bandRow{display:flex;justify-content:space-between;gap:12px;border-top:1px solid var(--line);padding:12px 10px 12px 12px;font-size:12px;color:var(--sub);border-left:3px solid transparent;border-radius:0 8px 8px 0}
.bandRow:first-child{border-top:0}
.bandRow strong{color:var(--text);font-weight:600;font-variant-numeric:tabular-nums}
.bandRow.selected{color:var(--accent);background:var(--accentWash);border-left-color:var(--accent)}
.bandRow.selected strong{color:var(--accent)}

.footer{margin-top:55px;border-top:1px solid var(--line);padding-top:20px;font-size:12px;color:var(--mute);display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap}
/* 备案合规页脚（server.js 按 SITE_ICP / SITE_POLICE_ICP 注入，未配置时不出现）；视觉量级与 .footer 对齐 */
.icpFoot{margin:24px auto 0;padding-top:12px;border-top:1px solid var(--line);color:var(--mute);font-size:12.5px;line-height:1.9;text-align:center}
.icpFoot a{color:var(--text);text-decoration:none;border-bottom:1px solid var(--mute)}
.icpFoot a:hover{color:var(--accent);border-bottom-color:var(--accent)}
@media print{.icpFoot{display:none!important}}

/* ---------- 第二轮：市场广度条 / 分位标尺 / 基准双条 / 倍数比例条 ---------- */
.breadth{display:flex;align-items:center;gap:12px;margin:0 0 14px;font-size:12px;color:var(--sub);flex-wrap:wrap}
.breadthBar{flex:0 1 200px;min-width:120px;height:8px;border-radius:99px;overflow:hidden;display:flex;background:var(--surface2)}
.breadthBar i{display:block;height:100%;transition:width .45s ease}
.breadthBar .u{background:var(--red)}
.breadthBar .d{background:var(--green)}
.breadth b{font-variant-numeric:tabular-nums;font-weight:600}
.gauge{position:relative;margin:14px 0 4px}
.gaugeTrack{display:flex;gap:3px;height:10px;border-radius:6px}
.gaugeTrack i{flex:1;border-radius:2px}
.gaugeTrack i:nth-child(1){background:color-mix(in srgb,var(--green) 55%,transparent)}
.gaugeTrack i:nth-child(2){background:color-mix(in srgb,var(--green) 28%,transparent)}
.gaugeTrack i:nth-child(3){background:var(--surface2)}
.gaugeTrack i:nth-child(4){background:color-mix(in srgb,var(--gold) 30%,transparent)}
.gaugeTrack i:nth-child(5){background:color-mix(in srgb,var(--red) 26%,transparent)}
.gaugePin{position:absolute;top:-8px;width:2px;height:26px;background:var(--text);border-radius:2px;transform:translateX(-1px)}
.gaugePin::after{content:attr(data-pct);position:absolute;top:-22px;left:50%;transform:translateX(-50%);font-size:12px;font-weight:700;color:var(--text);font-variant-numeric:tabular-nums;background:var(--surface2);padding:1px 7px;border-radius:6px;white-space:nowrap}
.gaugePin.edge::after{left:auto;right:0;transform:none}
/* 低分位（pct≤15）气泡向左展开：pct=0 时不再被左缘裁掉 */
.gaugePin.edgeL::after{left:1px;right:auto;transform:none}
.gaugeCap{display:flex;justify-content:space-between;font-size:12px;color:var(--mute);margin-top:7px;font-variant-numeric:tabular-nums}
.calcBars{display:grid;gap:7px;margin:14px 0 4px}
.cbRow{display:grid;grid-template-columns:34px minmax(0,1fr) auto;gap:8px;align-items:center;font-size:12px;color:var(--sub)}
.cbRow i{height:8px;border-radius:4px;background:var(--surface2);display:block;transition:width .35s ease}
.cbRow.cur i{background:var(--accent)}
.cbRow b{font-variant-numeric:tabular-nums;color:var(--text);min-width:52px;text-align:right;font-weight:600}
.miniTrack{width:92px;height:4px;border-radius:2px;background:var(--surface2);margin-top:6px;overflow:hidden}
.miniTrack i{display:block;height:100%;border-radius:2px;background:var(--accent);transition:width .35s ease}
.miniTrack i.tone-gold{background:var(--gold)}
.miniTrack i.tone-green{background:var(--green)}
.miniTrack i.tone-neutral{background:var(--sub)}

/* ============================================================
   V2.3 组件库增量（PLAN §四；设计稿与规范已在 2.4.0 清理中下线）
   来源：四稿增量上收；只加不删、不改令牌名、不写裸 hex。
   ============================================================ */

/* §四.1 新鲜度行：12px · 次级色 · 状态点 7px（开=accent/闭=mute）· 异常段金色 */
.freshRow{display:flex;flex-wrap:wrap;align-items:center;gap:4px 11px;font-size:12px;color:var(--sub);line-height:1.7;margin:0 0 15px}
.freshRow .fp,.freshRow .dot{width:7px;height:7px;border-radius:50%;display:inline-block;flex:none}
.fp.on{background:var(--accent)}.fp.off{background:var(--mute)}
.freshRow .dot{background:var(--accent)}
.freshRow b{font-weight:600;font-variant-numeric:tabular-nums}
.freshWarn{color:var(--gold)}
.freshSep{color:var(--mute)}

/* §四.2 涨跌胶囊双数字：pct 胶囊 + 绝对点数（红涨绿跌 + 箭头 + 正负号不变） */
.deltaRow{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:8px}
.deltaPts{font-size:12.5px;font-weight:600;font-variant-numeric:tabular-nums;color:var(--sub)}
.deltaPts.red{color:var(--red)}.deltaPts.green{color:var(--green)}
/* 涨跌文字标签：颜色/箭头之外再给“涨/跌/平”，不单靠颜色 */
.moveWord{margin-left:4px;font-size:11px;font-weight:600;letter-spacing:.02em}

/* spark 终点圆点：实心=区间末点高于期初（trend 首点），空心=反之（形状维度，Grafana 思路） */
.sparkWrap{position:relative;margin:14px 0 6px}
.sparkWrap .quoteTrend{margin:0;display:block}
.sparkDot{position:absolute;right:-4px;width:8px;height:8px;border-radius:50%;transform:translateY(-50%);pointer-events:none}
.sparkDot.solid{background:var(--red)}
.sparkDot.hollow{background:var(--surface);border:2px solid var(--green)}

/* §四.3 PriceFlash：变价方向 900ms 背景淡出（红涨绿跌语义）；reduced-motion 由文件尾全局关停 */
.quote.flash-up{animation:flashUp .9s ease}
.quote.flash-down{animation:flashDown .9s ease}
@keyframes flashUp{0%{background-color:color-mix(in srgb,var(--red) 22%,var(--surface))}100%{background-color:var(--surface)}}
@keyframes flashDown{0%{background-color:color-mix(in srgb,var(--green) 22%,var(--surface))}100%{background-color:var(--surface)}}

/* §四.4 今日最强/最弱：两列各 3 名（名称+幅度），红涨绿跌着色；广度细条保留在其上方 */
.movers{display:grid;grid-template-columns:1fr 1fr;gap:2px 26px;max-width:780px;margin:9px 0 18px}
.moversCol h3{font-size:12px;color:var(--mute);font-weight:600;margin:0 0 3px;letter-spacing:.05em}
.moverRow{display:flex;justify-content:space-between;align-items:baseline;gap:10px;padding:7px 0;border-bottom:1px solid var(--lineSoft);font-size:13.5px}
.moversCol .moverRow:last-child{border-bottom:0}
.moverRow b{font-weight:600;color:var(--text)}
.moverRow span{font-variant-numeric:tabular-nums;font-weight:600}
.moverRow.up span{color:var(--red)}.moverRow.down span{color:var(--green)}

/* §四.5 分日时间流：日期头粘性（桌面 top 66px / ≤750 top 58px），日头 12px 标签色 */
.dayGroup{margin:0 0 8px}
.dayHead{position:sticky;top:66px;z-index:6;display:flex;align-items:center;gap:10px;min-height:40px;padding:7px 2px;margin:2px 0 3px;font-size:12px;color:var(--mute);border-bottom:1px solid var(--line);background:color-mix(in srgb,var(--bg) 90%,transparent);backdrop-filter:blur(8px)}
.dayHead .dhDate{color:var(--sub);font-weight:700}
.dayHead .dhToday{color:var(--accent);font-weight:700;border:1px solid color-mix(in srgb,var(--accent) 32%,var(--line));background:var(--accentWash);border-radius:6px;padding:1px 8px}
.dayHead .dhCount{font-variant-numeric:tabular-nums}

/* §四.6 指标带：N 条 · N 源 · 约 N 分钟 · 生成时间，12px */
.metaBand{display:flex;flex-wrap:wrap;gap:4px 16px;font-size:12px;color:var(--sub);margin:12px 0 2px;align-items:baseline}
.metaBand b{font-variant-numeric:tabular-nums;font-weight:700;color:var(--text);font-size:13px}

/* §四.7 方法标签：卡片标题右侧小胶囊（12px，Fog/surface2 底）；.acc 为强调档 */
.methodTag{display:inline-flex;align-items:center;font-size:12px;color:var(--sub);background:var(--surface2);border:1px solid var(--line);border-radius:99px;padding:2px 9px;white-space:nowrap;font-weight:500}
.methodTag.acc{color:var(--accent);background:var(--accentWash);border-color:color-mix(in srgb,var(--accent) 28%,var(--line))}

/* §四.8 体检卡（规划名 .checkup，mockup 实际类）：三行规则（状态点+文案+状态词），中性措辞 */
.checkRow{display:flex;align-items:flex-start;gap:11px;padding:13px 2px;border-top:1px solid var(--line)}
.checkRow:first-of-type{border-top:0;padding-top:6px}
.checkDot{width:8px;height:8px;border-radius:50%;flex:none;margin-top:8px}
.checkDot.warn{background:var(--gold)}
.checkDot.info{background:var(--accent)}
.checkTxt{flex:1;min-width:0;font-size:14px;color:var(--sub);line-height:1.7}
.checkTxt b{color:var(--text);font-weight:600}
.checkTxt code{font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:12px;color:var(--text)}
.checkState{flex:none;font-size:12px;border:1px solid var(--line);border-radius:99px;padding:2px 10px;color:var(--sub);white-space:nowrap;margin-top:3px}
.checkState.warn{color:var(--gold);border-color:color-mix(in srgb,var(--gold) 40%,var(--line));background:var(--goldWash)}

/* §四.9 构成卡（规划名 .attribution，mockup 实际类）：四项水平堆叠条+数值行，
   构成色为数据令牌（accent/gold/sub/mute），非红绿语义色 */
.attrBar{display:flex;height:14px;border-radius:7px;overflow:hidden;margin:14px 0 6px;background:var(--surface2)}
.attrBar i{display:block;height:100%;min-width:3px}
.attrBar .s1,.attrRow .sw.s1{background:var(--accent)}
.attrBar .s2,.attrRow .sw.s2{background:var(--gold)}
.attrBar .s3,.attrRow .sw.s3{background:var(--sub)}
.attrBar .s4,.attrRow .sw.s4{background:var(--mute)}
.attrRows{display:grid}
.attrRow{display:flex;align-items:baseline;gap:9px;padding:10px 2px;border-top:1px solid var(--line);font-size:14px}
.attrRow:first-child{border-top:0}
.attrRow .sw{width:10px;height:10px;border-radius:3px;flex:none;align-self:center}
.attrRow .nm{font-weight:600;color:var(--text);white-space:nowrap}
.attrRow .why2{color:var(--mute);font-size:12px;flex:1;min-width:0}
.attrRow b{font-variant-numeric:tabular-nums;font-weight:700;color:var(--text);white-space:nowrap}
.attrSum{margin-top:10px;background:var(--surface2);border-radius:9px;padding:10px 13px;font-size:13px;color:var(--sub);line-height:1.7}
.attrSum b{color:var(--text);font-variant-numeric:tabular-nums}

/* §四.10 空态统一：图标+标题+说明+可选动作；禁止假数据 */
.emptyState{border:1px dashed var(--line);border-radius:12px;background:var(--surface);padding:34px 22px;display:grid;justify-items:center;gap:5px;text-align:center;grid-column:1/-1}
.emptyState svg{width:26px;height:26px;color:var(--mute)}
.emptyState h3{margin:4px 0 0;font-size:15.5px;font-weight:600}
.emptyState p{margin:0;font-size:14px;color:var(--sub);line-height:1.7;max-width:430px}

/* 资讯布局：正文区扩宽（基础行 282→260px 已上改），右栏可折叠 */
.newsLayout.railCollapsed{grid-template-columns:1fr}
.newsLayout.railCollapsed .rail{display:none}
.newsLayout .rail{min-width:0}
.railToggle{border:1px solid var(--line);background:var(--surface);color:var(--sub);border-radius:8px;padding:9px 13px;font-size:12.5px;min-height:44px;white-space:nowrap}
.railToggle:hover{border-color:color-mix(in srgb,var(--accent) 40%,var(--line));color:var(--accent)}

/* 日报结构化条目：每节多条 标题/摘要/来源/原文链接（透传还原，PLAN §三.2） */
.dailyLead{font-size:14px;color:var(--sub);line-height:1.8;max-width:680px;margin:8px 0 4px}
.dailyBlock{position:relative;border-top:1px solid var(--line);margin-top:14px;padding:15px 0 4px 15px}
.dailyBlock::before{content:"";position:absolute;left:0;top:17px;bottom:12px;width:3px;border-radius:2px;background:color-mix(in srgb,var(--accent) 34%,transparent)}
.dailyBlock h3{font-size:14px;margin:0 0 2px;font-weight:600}
.dailyBlock .bcount{font-size:12px;color:var(--mute);margin-left:8px;font-variant-numeric:tabular-nums}
.dailyItem{border-top:1px solid var(--lineSoft);padding:12px 0;display:grid;gap:4px}
.dailyBlock .dailyItem:first-of-type{border-top:0}
.dailyItem h4{font-size:14.5px;font-weight:600;line-height:1.5;margin:0}
.dailyItem h4 a:hover{color:var(--accent)}
.dailyItem p{font-size:14px;color:var(--sub);line-height:1.75;margin:0}
.dItemMeta{font-size:12px;color:var(--mute);display:flex;gap:12px;flex-wrap:wrap;align-items:center}
.dItemMeta a{color:var(--accent);font-weight:600}
.dItemMeta a:hover{text-decoration:underline}

/* 快讯（flashes 保留） */
.flashList{border-top:1px solid var(--line);margin-top:16px;padding-top:12px}
.flashList h3{font-size:14px;margin:0 0 2px;font-weight:600}
.flashRow{display:flex;gap:12px;padding:8px 0;font-size:14px;color:var(--sub);border-top:1px solid var(--lineSoft);align-items:baseline}
.flashList .flashRow:first-of-type{border-top:0}
.flashRow time{font-size:12px;color:var(--mute);font-variant-numeric:tabular-nums;flex:none}
.flashRow .fsrc{font-size:12px;color:var(--mute);flex:none;margin-left:auto;white-space:nowrap}

/* 加载更多 / 收尾说明（正式版走服务端 cursor；演示稿内为前端分批，标注如实） */
.loadMoreWrap{display:grid;justify-items:center;gap:6px;padding:18px 0 4px}
.loadMore{border:1px solid var(--line);background:var(--surface);color:var(--sub);border-radius:9px;padding:11px 22px;font-size:13.5px;font-weight:600;min-height:44px}
.loadMore:hover{color:var(--accent);border-color:color-mix(in srgb,var(--accent) 40%,var(--line))}
.feedEnd{font-size:12.5px;color:var(--mute);padding:12px 0 2px;text-align:center;font-variant-numeric:tabular-nums}
.btnGhost{margin-top:10px;border:1px solid var(--line);background:var(--surface2);border-radius:8px;padding:10px 16px;font-size:13px;color:var(--sub);min-height:44px}
.btnGhost:hover{color:var(--accent);border-color:color-mix(in srgb,var(--accent) 40%,var(--line))}

/* 游客只读体验入口 + toast（§二.4 入口闭环；v2.js enterDemo 失败提示走 #toast） */
.guestBtn{border:1px solid color-mix(in srgb,var(--accent) 38%,var(--line));background:var(--accentWash);color:var(--accent);border-radius:8px;padding:9px 13px;font-size:12.5px;font-weight:600;min-height:44px;white-space:nowrap}
.guestBtn:hover{border-color:var(--accent)}
.toast{position:fixed;left:50%;bottom:80px;transform:translateX(-50%) translateY(6px);background:var(--surface2);color:var(--text);border:1px solid var(--line);border-radius:10px;padding:11px 17px;font-size:13.5px;box-shadow:var(--shadow);z-index:60;opacity:0;pointer-events:none;transition:opacity .22s ease,transform .22s ease;max-width:min(86vw,430px);text-align:center}
.toast.show{opacity:1;transform:translateX(-50%) translateY(0)}

/* 次级刷新按钮（手动刷新触发 PriceFlash 的入口件） */
.freshBtn{border:1px solid var(--line);background:var(--surface);color:var(--sub);border-radius:8px;padding:9px 14px;font-size:12.5px;font-weight:600;min-height:44px;white-space:nowrap}
.freshBtn:hover{color:var(--accent);border-color:color-mix(in srgb,var(--accent) 40%,var(--line))}

/* ---------- 交互打磨 ---------- */
.view{animation:viewIn .26s ease both}
@keyframes viewIn{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
.filter:active,.mode button:active,.theme:active{transform:scale(.97)}
body,.sidebar,.top,.box,.quote,.plan,.lead,.daily,.recommend,.mobileNav{transition:background-color .25s ease,border-color .25s ease,color .25s ease}

/* ---------- 移动端：≤750px 侧栏退场、底部导航登场 ---------- */
.mobileNav{display:none}.mBrand{display:none}
@media(max-width:1180px){
  .newsLayout{grid-template-columns:minmax(0,1fr) 235px}
  .planList{gap:9px}.plan{padding:17px}
  .hometwo{grid-template-columns:minmax(0,1.55fr) minmax(235px,1fr)}
}
@media(max-width:1000px){
  .app{grid-template-columns:198px minmax(0,1fr)}
  .marketGrid{grid-template-columns:repeat(2,minmax(0,1fr))}
  .quote{padding:17px}
  .newsLayout{grid-template-columns:1fr}
  .newsLayout .rail{display:grid;grid-template-columns:1fr 1fr;gap:13px}
  .newsLayout .box+.box{margin:0}
  .hometwo{grid-template-columns:1fr}
  .planDetail{grid-template-columns:1fr 1fr}
  .mult{font-size:38px}
}
@media(max-width:750px){
  .app{display:block}.sidebar{display:none}
  .top{height:58px;padding:0 19px}.top .crumb{display:none}
  .mBrand{display:block;font-size:16px;letter-spacing:-.01em;font-weight:700}
  .container{padding:24px 17px 110px}
  .hero{align-items:start}.hero h1{font-size:27px}.hero .pill{display:none}
  .marketGrid{grid-template-columns:repeat(2,minmax(0,1fr))}
  .quote{padding:15px 14px}.quotePrice{font-size:23px}
  .quoteDelta{font-size:12px;padding:2px 8px}
  .filter,.mode button,.theme{min-height:44px}
  .toast{bottom:96px}
  .freshRow{gap:3px 9px}
  .movers{gap:2px 16px}
  .moverRow{font-size:13px}
  .market-head .sectionHead small{display:none}
  .dayHead{top:58px}
  .flashRow .fsrc{display:none}
  .newsLayout .rail{grid-template-columns:1fr 1fr}
  .planList{grid-template-columns:1fr;gap:9px}
  .plan{display:grid;grid-template-columns:minmax(0,1fr) auto;grid-template-rows:auto auto auto;grid-template-areas:"head mult" "footer mult" "track meta";min-height:116px;padding:15px 17px;gap:0 18px}
  .planTitle{grid-area:head;display:block}
  .planTitle strong{display:block;font-size:15px}
  .planTitle span{display:block;margin-top:2px;font-size:12px}
  .mult{grid-area:mult;font-size:34px;margin:0;text-align:right}
  .mult small{font-size:12px;display:block;margin:5px 0 0}
  .multFoot{grid-area:footer;font-size:12px;margin:5px 0 8px}
  .planTrack{grid-area:track;margin:0;align-self:center;max-width:190px}
  .planMeta{grid-area:meta;margin:0;justify-content:flex-end;align-items:center}
  .planMeta span{display:none}.planMeta em{font-size:12px}
  .planDetail{grid-template-columns:1fr}
  .mobileNav{display:grid;grid-template-columns:repeat(4,1fr);position:fixed;bottom:0;left:0;right:0;z-index:25;background:color-mix(in srgb,var(--side) 94%,transparent);backdrop-filter:blur(10px);border-top:1px solid var(--line);padding:8px 7px max(8px,env(safe-area-inset-bottom))}
  .mobileNav a,.mobileNav button{display:flex;min-height:48px;flex-direction:column;align-items:center;justify-content:center;gap:2px;border:0;background:transparent;font-size:12px;color:var(--mute);border-radius:8px}
  .mobileNav a.active,.mobileNav button.active{color:var(--accent);background:var(--accentWash)}
  .mobileNav svg{height:20px;width:20px}
  .footer{margin-top:38px}.status{display:none}
  .recommend{padding:19px}.recommend .number{font-size:34px}
  /* 备案页脚是文档最后一个元素，底部要给固定 .mobileNav（64px + 安全区）让位，否则被其盖住 */
  .icpFoot{padding-bottom:calc(76px + env(safe-area-inset-bottom))}
}
@media(max-width:440px){
  .topActions{gap:9px}.theme{padding:7px 8px}
  .topActions .login{display:none} /* 440 下动作区让位给 guestBtn（mockup-home 440 稿）；guestBtn 由页面引入后为游客入口 */
  .hero h1{font-size:25px}.hero p{font-size:12px}
  .quote{padding:14px 13px}.quotePrice{font-size:22px}
  .quoteTitle{font-size:12px}
  .quoteTrend{height:31px;margin:11px 0 6px}
  .newsTools{display:grid;gap:12px}.search{width:100%;min-width:0}
  .lead{padding:20px}.lead h2{font-size:21px}
  .daily{padding:19px 17px}.daily h2{font-size:21px}
  .railToggle{padding:8px 11px}
  .guestBtn{padding:8px 10px;font-size:12px}
  .freshBtn{padding:8px 11px}
  .metaBand{gap:4px 12px}
  .deltaPts{font-size:12px}
  .moverRow{flex-wrap:wrap}
  .moverRow b,.moverRow span{white-space:nowrap}
  .emptyState{padding:26px 16px}
  .newsLayout .rail{grid-template-columns:1fr}
  .planList{grid-template-columns:1fr;gap:8px}
  .plan{min-height:108px;padding:13px 14px}
  .planTitle strong{font-size:14px}
  .mult{font-size:32px}
  .newsItem{grid-template-columns:45px minmax(0,1fr);gap:9px}
  .feedList .ntitle{font-size:15px}
  .mode button{padding:7px 10px}
  .footer{display:block}
}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{scroll-behavior:auto!important;transition:none!important;animation:none!important}}
