* { box-sizing: border-box; margin: 0; padding: 0; }
:root {
  --bg:#f2f2f7;            /* iOS systemGroupedBackground */
  --panel:#ffffff;
  --line:#e5e5ea;          /* iOS separator */
  --line-soft:#ececf0;
  --text:#1c1c1e;
  --muted:#636368;         /* A11Y-01：由 #8e8e93 加深 → 白底 5.98:1 / 灰底 5.35:1（AA 正文 ≥4.5:1，原 3.26:1 不达标） */
  --primary:#0066cc;       /* A11Y-01：由 #007aff 加深 → 白底 5.56:1（原 4.02:1）；白字按钮 5.56:1 */
  --primary-hover:#0052a3;
  --primary-soft:#eaf2ff;
  --up:#cc2f24;            /* A11Y-01：由 #ff3b30 加深 → 灰底 4.70:1 / 白底 5.25:1（原 3.18:1/3.55:1） */
  --down:#1a7f37;          /* A11Y-01：由 #34c759 加深 → 灰底 4.55:1 / 白底 5.11:1（原 2.22:1，大字号也不达标） */
  --orange:#ff9f0a;        /* iOS systemOrange */
  --shadow:0 1px 2px rgba(0,0,0,.03), 0 4px 16px rgba(0,0,0,.05);
  --radius:18px;
  --radius-sm:12px;
}
html{ scrollbar-width:thin; scrollbar-color:#c7c7cc transparent; }
body { font-family:-apple-system,BlinkMacSystemFont,"SF Pro Text","SF Pro Display","Segoe UI","PingFang SC","Microsoft YaHei",sans-serif; background:var(--bg); color:var(--text); font-size:14px; -webkit-font-smoothing:antialiased; text-rendering:optimizeLegibility; }
button,input,select,textarea{ font-family:inherit; }
::-webkit-scrollbar{ width:8px; height:8px; }
::-webkit-scrollbar-thumb{ background:#c7c7cc; border-radius:999px; }
::-webkit-scrollbar-thumb:hover{ background:#aeaeb2; }
::-webkit-scrollbar-track{ background:transparent; }
.app { display:flex; min-height:100vh; }
.sidebar { width:236px; background:#fff; border-right:1px solid var(--line); padding:20px 14px; display:flex; flex-direction:column; position:sticky; top:0; height:100vh; }
.brand { display:flex; align-items:center; gap:12px; padding:4px 10px 20px; }
.logo { width:48px;height:48px;border-radius:12px;overflow:hidden;display:flex;align-items:center;justify-content:center; }
.logo img { width:100%;height:100%;object-fit:contain;display:block; }
.brand-text strong{display:block;font-size:16px;color:var(--text);}
.brand-text span{font-size:12px;color:var(--muted);}
nav{display:flex;flex-direction:column;gap:2px;margin-top:2px;flex:1 1 auto;min-height:0;overflow-y:auto;padding-bottom:6px;}
/* 侧栏菜单溢出提示（20261019）：管理员 22 项时内容高约 1108px，可视区常只有 730px，
   底部「管理配置」组（任务调度等）默认在视野外，需要滚动才能看到。
   注意：这里**不能用 mask-image 做上下渐隐**——实测给滚动容器加 mask 后，
   Chrome 的 `.nav-item:hover` 背景不再重绘（computed background 恒为透明），
   表现为「鼠标悬停没有灰色方块」。只保留加粗滚动条这一种零风险提示。 */
#nav::-webkit-scrollbar{ width:10px; }
#nav::-webkit-scrollbar-thumb{ background:#c7c7cc; border-radius:999px; border:2px solid #fff; }
#nav::-webkit-scrollbar-thumb:hover{ background:#aeaeb2; }
.nav-item{border:0;background:none;text-align:left;padding:10px 12px;border-radius:10px;font-size:14px;color:var(--text);cursor:pointer;display:flex;align-items:center;gap:10px;transition:background .15s,color .15s;}
/* 悬停底色不再取 var(--bg)（20261019）：--bg 在浅色主题是 #f2f2f7、nike-mono 主题是
   #ffffff，而侧栏恒为白底，白底白 hover = 完全看不见。改为固定灰，任何主题下都可见，
   且比 .nav-item.active(#e8e8ed) 浅一档，层级不打架。 */
.nav-item:hover{background:#eef0f4;}
.nav-item.active{background:#e8e8ed;color:var(--text);font-weight:600;}
.nav-item .ico{width:20px;text-align:center;}
.sidebar-foot{margin-top:auto;font-size:11px;color:var(--muted);padding:12px 10px;border-top:1px solid var(--line);}
.main{flex:1;padding:26px 30px;max-width:1200px;margin:0 auto;width:100%;}
.page-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:18px;flex-wrap:wrap;gap:12px;}
.page-head h2{font-size:24px;font-weight:700;letter-spacing:-.3px;}
.head-date{color:var(--muted);font-size:13px;}
.cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:16px;margin-bottom:20px;}
.card{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:20px;box-shadow:var(--shadow);}
.card.accent{background:#1d1d1f;color:#fff;border:none;}
.card-label{font-size:12px;color:var(--muted);margin-bottom:10px;font-weight:500;}
.card.accent .card-label{color:rgba(255,255,255,.7);}
.card-value{font-size:28px;font-weight:700;letter-spacing:-.4px;}
.card.accent .card-value{font-size:30px;}
.card-sub{font-size:12px;color:var(--muted);margin-top:8px;}
.card.accent .card-sub{color:rgba(255,255,255,.75);}
.up{color:var(--up);} .down{color:var(--down);}
.card.accent .up,.card.accent .down{color:#fff;}
.grid-2{display:grid;grid-template-columns:1fr 1fr;gap:16px;}
@media(max-width:900px){.grid-2{grid-template-columns:1fr;}}
.panel{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:20px;box-shadow:var(--shadow);margin-bottom:18px;}
.panel h3{font-size:15px;color:var(--text);margin-bottom:14px;font-weight:600;}
.chart{width:100%;height:300px;} .chart.tall{height:340px;}
.view{display:none;} .view.active{display:block;}
.tbl{width:100%;border-collapse:collapse;}
.tbl th,.tbl td{padding:10px 12px;text-align:left;border-bottom:1px solid var(--line);font-size:13px;white-space:nowrap;}
.tbl th{color:var(--muted);font-weight:600;font-size:12px;background:var(--bg);}
.tbl th.sortable{cursor:pointer;user-select:none;}
.tbl th.sortable:hover{color:var(--primary);}
.tbl th .sort-ind{opacity:.4;font-size:10px;margin-left:2px;}
.tbl th.sortable.active{color:var(--primary);}
.tbl th.sortable.active .sort-ind{opacity:1;}
.tbl tr:hover td{background:#fafafa;}
.tbl.compact th,.tbl.compact td{padding:8px 10px;}
.hold-inc{display:flex;flex-wrap:wrap;gap:4px;margin-top:5px;}
.hold-inc i{font-style:normal;font-size:10.5px;color:var(--muted);background:var(--bg);border:1px solid var(--line);border-radius:4px;padding:0 5px;}
tr.row-muted{opacity:.62;} /* 历史已清仓已实现桥接行，弱化避免与实体持仓混淆 */
tr.row-muted td{background:transparent;}
.form{display:flex;flex-direction:column;gap:12px;}
.form label{font-size:12px;color:var(--muted);display:block;}
.code-row{display:flex;gap:8px;align-items:flex-start;}
.form select,.form input,.form textarea{width:100%;padding:9px 11px;border:1px solid var(--line);border-radius:9px;font-size:13px;background:#fff;color:var(--text);}
.form select:focus,.form input:focus,.form textarea:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-soft);}
.form textarea{font-family:inherit;line-height:1.6;resize:vertical;min-height:96px;box-sizing:border-box;}
.row{display:flex;gap:8px;} .row input{flex:1;}
.row2{display:grid;grid-template-columns:1fr 1fr;gap:10px;}
.btn{border:0;border-radius:10px;padding:10px 16px;font-size:14px;cursor:pointer;font-weight:600;transition:background .15s,opacity .15s;}
.btn.primary{background:var(--primary);color:#fff;}
.btn.primary:hover{background:var(--primary-hover);}
.btn.danger{background:#fff;color:var(--up);border:1px solid #f3c4c1;}
.btn.sm{padding:4px 10px;font-size:12px;border-radius:8px;}
.hint{font-size:12px;color:var(--muted);margin-top:10px;line-height:1.6;}
.seg{display:inline-flex;background:#eef0f4;border-radius:9px;padding:2px;gap:0;}
.seg-btn{border:0;background:none;padding:5px 12px;border-radius:7px;font-size:12.5px;cursor:pointer;color:var(--muted);font-weight:500;transition:background .15s,color .15s;}
.seg-btn:hover{color:var(--text);}
.seg-btn.active{background:#fff;color:var(--text);font-weight:600;box-shadow:0 1px 2px rgba(0,0,0,.08);}
.chip{display:inline-flex;align-items:center;gap:8px;background:var(--bg);border:1px solid var(--line);border-radius:20px;padding:6px 12px;font-size:12px;}
.chip b{color:var(--primary);}
.chip button{border:0;background:none;color:var(--up);cursor:pointer;font-size:13px;}
.badge{display:inline-block;padding:2px 8px;border-radius:6px;font-size:11px;font-weight:600;}
.badge.buy{background:#fdecec;color:var(--up);}
.badge.sell{background:#e6f6ee;color:var(--down);}
.badge.confirmed{background:var(--primary-soft);color:var(--primary);}
.badge.pending{background:#fff4e5;color:#9a5b00;}   /* A11Y-01：#c77700→#9a5b00，底上 5.0:1（原 3.2:1） */
.badge.risk{background:#8e8e93;color:#fff;border:0;padding:2px 8px;} /* 风险徽标（R1..R5，持仓/列表产品名后）；未知等级灰色兑底 */
/* R标配色规范（_archive/设计稿）：R1绿 R2蓝 R3橙 R4深橙 R5红，实底白字，全局统一 */
.badge.risk.r1{background:#1a7f37;} .badge.risk.r2{background:#0066cc;} .badge.risk.r3{background:#e8935b;} .badge.risk.r4{background:#ea580c;} .badge.risk.r5{background:#cc2f24;}
.badge.code{background:var(--bg);color:var(--muted);border:1px solid var(--line);} /* 产品代码徽标 */

/* ===== 问题反馈 Markdown 编辑卡片 ===== */
.fe-editor{border:1px solid var(--line);border-radius:10px;background:var(--bg);overflow:hidden;transition:border-color .15s, box-shadow .15s;}
.fe-editor:focus-within{border-color:var(--primary);box-shadow:0 0 0 3px rgba(26,115,232,.12);}
.fe-toolbar{display:flex;flex-wrap:wrap;gap:2px;align-items:center;padding:6px 8px;border-bottom:1px solid var(--line);background:var(--panel);}
.fe-btn{width:28px;height:26px;display:inline-flex;align-items:center;justify-content:center;border:1px solid transparent;background:none;border-radius:5px;color:var(--text);font-size:12px;cursor:pointer;}
.fe-btn:hover{background:var(--line);}
.fe-btn i{font-style:italic;} .fe-btn u{text-decoration:underline;} .fe-btn s{text-decoration:line-through;}
.fe-sep{width:1px;height:16px;background:var(--line);margin:0 5px;flex:none;}
.fe-textarea{width:100%;border:none;outline:none;resize:none;padding:10px 12px;background:transparent;color:var(--text);font-size:13px;line-height:20px;min-height:72px;max-height:200px;box-sizing:border-box;display:block;font-family:inherit;}
.fe-textarea[hidden]{display:none;}
.fe-preview{padding:10px 12px;font-size:13px;line-height:1.6;min-height:72px;color:var(--text);}
.fe-preview[hidden]{display:none;}
.fe-foot{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:6px 8px;border-top:1px solid var(--line);flex-wrap:wrap;}
.fe-attach{display:flex;align-items:center;gap:6px;flex-wrap:wrap;flex:1;min-width:0;}
.fe-submit{display:flex;align-items:center;gap:10px;flex:none;}
.fe-count{font-size:12px;color:var(--muted);font-variant-numeric:tabular-nums;}
.fe-imgs{display:flex;flex-wrap:wrap;gap:6px;width:100%;}
.fe-thumb{position:relative;width:56px;height:56px;border:1px solid var(--line);border-radius:6px;overflow:hidden;display:flex;flex-direction:column;background:var(--panel);}
.fe-thumb img{width:100%;height:36px;object-fit:cover;display:block;}
.fe-file-ic{display:flex;align-items:center;justify-content:center;height:36px;font-size:18px;}
.fe-thumb-name{font-size:9px;color:var(--muted);padding:1px 3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:14px;}
.fe-thumb-del{position:absolute;top:1px;right:1px;width:18px;height:18px;line-height:16px;text-align:center;font-size:14px;background:rgba(0,0,0,.55);color:#fff;border:none;border-radius:50%;cursor:pointer;padding:0;}
/* Markdown 渲染白名单样式 */
.md-body{word-break:break-word;line-height:1.6;font-size:13px;}
.md-body p, .md-body .md-p{margin:2px 0;}
.md-body strong{font-weight:700;} .md-body em{font-style:italic;} .md-body u{text-decoration:underline;} .md-body del{text-decoration:line-through;}
.md-body .md-h{margin:6px 0 2px;font-weight:700;font-size:14px;}
.md-body blockquote,.md-body .md-quote{margin:4px 0;padding:2px 10px;border-left:3px solid var(--line);color:var(--muted);}
.md-body .md-li{margin:2px 0;}
.md-body pre,.md-body .md-pre{margin:6px 0;padding:8px 10px;background:var(--panel);border:1px solid var(--line);border-radius:6px;overflow-x:auto;font-size:12px;line-height:1.5;}
.md-body code,.md-body .md-code{font-family:ui-monospace,SFMono-Regular,Consolas,monospace;background:var(--line);padding:0 3px;border-radius:3px;font-size:12px;}
.md-body pre code,.md-body .md-pre .md-code,.md-body pre .md-code{background:none;padding:0;}
.big-rate{font-size:40px;font-weight:800;color:var(--text);letter-spacing:-.5px;}
#toast{position:fixed;top:18px;left:50%;transform:translateX(-50%);background:rgba(29,29,31,.92);color:#fff;padding:10px 18px;border-radius:10px;opacity:0;transition:.25s;z-index:99;pointer-events:none;font-size:13px;}
#toast.show{opacity:1;}

/* 条款与声明（view-terms） */
.terms p{ font-size:13px; line-height:1.8; color:var(--text); margin:8px 0; }
.terms p b{ font-weight:600; }

/* 联系我们（view-contact）：仿关于页分块，配色随面板/主色 */
.contact{ display:flex; flex-direction:column; gap:6px; margin:4px 0 14px; }
.contact-row{ display:flex; align-items:center; gap:12px; font-size:13px; }
.contact-k{ flex:0 0 auto; width:64px; color:var(--muted, #7a7f8a); }
.contact-v{ color:var(--text); }
a.contact-v{ color:var(--primary); text-decoration:none; }
a.contact-v:hover{ text-decoration:underline; }

/* 金额隐私模式（闭眼）：金额数字与图表模糊隐藏 */
body.money-hidden .card-value,
body.money-hidden #total-profit,
body.money-hidden #profit-rate,
body.money-hidden .big-value,
body.money-hidden .chart,
body.money-hidden .hero-value,
body.money-hidden .hero-tag,
body.money-hidden .mini-value,
body.money-hidden .gain-cell .gc-val{ filter: blur(6px); user-select:none; pointer-events:none; }

/* ===== 仪表盘：总资产 Hero 深色大卡（移动端优化稿视觉） ===== */
#view-dashboard .hero{
  background:#1d1d1f;border-radius:var(--radius);color:#fff;
  padding:20px 20px 18px;margin-bottom:14px;box-shadow:var(--shadow);
  position:relative;overflow:hidden;
}
#view-dashboard .hero::after{
  content:"";position:absolute;right:-60px;top:-60px;width:200px;height:200px;border-radius:50%;
  background:radial-gradient(circle,rgba(10,132,255,.28),transparent 65%);pointer-events:none;
}
#view-dashboard .hero-label{font-size:12.5px;color:rgba(255,255,255,.72);margin-bottom:6px;font-weight:500;}
#view-dashboard .hero-value{font-size:34px;font-weight:700;letter-spacing:-.6px;line-height:1.15;position:relative;z-index:1;}
#view-dashboard .hero-tags{display:flex;flex-wrap:wrap;gap:6px;margin-top:12px;position:relative;z-index:1;}
#view-dashboard .hero-tag{font-size:11.5px;font-weight:600;border-radius:999px;padding:4px 10px;
  background:rgba(255,255,255,.12);color:rgba(255,255,255,.9);}
#view-dashboard .hero-tag.gain{background:rgba(52,199,89,.18);color:#6fe69a;}
#view-dashboard .hero-tag.muted-t{background:rgba(255,255,255,.08);color:rgba(255,255,255,.55);font-weight:500;}
/* ===== 仪表盘：双栏小卡 ===== */
#view-dashboard .mini-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:14px;}
#view-dashboard .mini{background:var(--panel);border:1px solid var(--line);border-radius:16px;
  box-shadow:var(--shadow);padding:14px 16px;}
#view-dashboard .mini-label{font-size:11.5px;color:var(--muted);margin-bottom:6px;font-weight:500;}
#view-dashboard .mini-value{font-size:21px;font-weight:700;letter-spacing:-.3px;line-height:1.2;}
#view-dashboard .mini-sub{font-size:11px;color:var(--muted);margin-top:5px;}
/* ===== 仪表盘：区间收益 3 列 ===== */
#view-dashboard .gain-panel .panel-head{margin-bottom:10px;}
#view-dashboard .gain-stats{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin-top:4px;}
#view-dashboard .gain-cell{background:var(--bg);border-radius:14px;padding:12px;min-width:0;display:flex;flex-direction:column;gap:4px;}
#view-dashboard .gain-cell .gc-label{font-size:10.5px;color:var(--muted);font-weight:500;white-space:nowrap;}
#view-dashboard .gain-cell .gc-val{font-size:15.5px;font-weight:700;letter-spacing:-.2px;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
#view-dashboard .gain-cell .gc-sub{font-size:9.5px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
#view-dashboard .big-stat{padding:16px;background:var(--bg);border-radius:var(--radius-sm);}
#view-dashboard .big-stat .gain-label{font-size:12px;color:var(--muted);}
/* ===== 仪表盘：快捷操作 2×2 方块 ===== */
#view-dashboard .quick-actions{display:grid;grid-template-columns:1fr 1fr;gap:10px;}
#view-dashboard .q-btn{border:1px solid var(--line);background:var(--panel);border-radius:14px;
  padding:13px 10px;min-height:62px;cursor:pointer;display:flex;flex-direction:column;
  align-items:center;justify-content:center;gap:6px;font-size:13px;font-weight:600;color:var(--text);
  transition:background .15s,transform .1s;}
#view-dashboard .q-btn:active{background:var(--bg);transform:scale(.98);}
#view-dashboard .q-btn .q-ico{font-size:19px;line-height:1;}
@media (max-width:760px){
  #view-dashboard .seg{width:100%;}
  #view-dashboard .seg-btn{flex:1;}
  #view-dashboard .hero-value{font-size:30px;}
  #view-dashboard .mini-value{font-size:19px;}
  #view-dashboard .gain-cell .gc-val{font-size:14px;}
  #view-dashboard .hero{padding:16px 16px 14px;}
}

/* ===== 产品名称联想（银行理财目录） ===== */
.ac-box{position:relative;}
.ac-box input{width:100%;box-sizing:border-box;}
/* 产品名称一键清空（需求2）：视觉小圆、热区≥44px */
.ac-clear{position:absolute;right:2px;top:50%;transform:translateY(-50%);width:44px;height:44px;border:0;background:transparent;cursor:pointer;display:flex;align-items:center;justify-content:center;z-index:2;}
.ac-clear[hidden]{display:none;}
.ac-clear::before{content:"✕";font-size:13px;color:#5b6b81;width:22px;height:22px;border-radius:50%;background:#e4e7ec;display:flex;align-items:center;justify-content:center;line-height:1;}
.ac-clear:hover::before{background:#d0d4db;color:#2c3340;}
#f-name{padding-right:52px;}
/* 确认日→净值 联动提示（需求3）：自动带入/未命中弱提示 */
.f-nav-hint{font-style:normal;font-weight:400;display:block;margin-top:2px;line-height:1.2;font-size:11px;}
.f-nav-hint.on{color:var(--primary);}
.ac-menu{position:absolute;top:calc(100% + 4px);left:0;right:0;z-index:60;max-height:240px;overflow:auto;background:#fff;border:1px solid var(--line);border-radius:12px;box-shadow:0 12px 32px rgba(0,0,0,.12);}
.ac-menu .ac-item{padding:9px 13px;font-size:12.5px;cursor:pointer;border-bottom:1px solid var(--line);line-height:1.45;}
.ac-menu .ac-item:last-child{border-bottom:0;}
.ac-menu .ac-item:hover{background:var(--bg);}
.ac-menu .ac-item b{display:block;font-weight:600;color:var(--text);}
.ac-menu .ac-item span{color:var(--muted);font-size:11px;}
.ac-menu .ac-empty{padding:11px 13px;color:var(--muted);font-size:12px;text-align:center;}
.ac-meta{font-size:11px;color:var(--muted);margin-top:4px;min-height:14px;}
.ac-menu .ac-item .ac-tags{margin-top:2px;font-size:10.5px;}
.ac-menu .ac-item .ac-tags i{font-style:normal;background:var(--bg);border:1px solid var(--line);border-radius:4px;padding:0 4px;margin-right:4px;color:var(--muted);}
#bank-filter{background:var(--bg);border:1px solid var(--line);border-radius:12px;padding:10px 10px 0;}
#bank-filter .row2{grid-template-columns:1fr 1.2fr;}
#bank-filter .row2+.row2{margin-top:2px;}
.form [hidden]{display:none !important;}

/* ===== 产品目录三视图：产品列表 / 新发列表 / 产品收集 ===== */
.cat-filter{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin-top:6px;}
.cat-filter .chip{cursor:pointer;transition:opacity .15s;}
.chip .dot{width:8px;height:8px;border-radius:50%;flex:none;}
.chip.off{opacity:.4;}
.chip.off .dot{background:#c7c7cc!important;}
.cat-filter .input,.cat-filter input,.cat-filter select{font-size:12.5px;padding:6px 9px;border:1px solid var(--line);border-radius:8px;background:#fff;color:var(--text);}
.cat-meta{color:var(--muted);font-size:12px;margin-left:6px;}
/* ---- 基金理财（#view-fund 作用域） ---- */
#view-fund .ph-r{ display:flex; align-items:center; gap:10px; margin-left:auto; }
#view-fund .eye{ border:1px solid var(--line); background:#fff; border-radius:999px; padding:6px 13px;
  font-size:12px; font-weight:600; color:var(--text); cursor:pointer; font-family:inherit; }
/* 汇总条：桌面 5 列，窄屏折叠 */
#view-fund .fd-sum{ display:grid; grid-template-columns:repeat(5,1fr); background:#fff; border:1px solid var(--line);
  border-radius:16px; box-shadow:0 1px 2px rgba(0,0,0,.03),0 4px 16px rgba(0,0,0,.05); padding:16px 0; margin-bottom:16px; }
#view-fund .sum-item{ min-width:0; padding:2px 16px; }
#view-fund .sum-item+.sum-item{ border-left:1px solid var(--line); }
#view-fund .sum-item .a{ font-size:11.5px; color:var(--muted); margin-bottom:6px; font-weight:500; }
#view-fund .sum-item .b{ font-size:20px; font-weight:700; letter-spacing:-.4px; font-variant-numeric:tabular-nums;
  white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
#view-fund .sum-item .c{ font-size:10.5px; color:var(--muted); margin-top:4px; }
/* 隐藏金额：隐私模糊 */
#view-fund.hide-money .fd-sum .b, #view-fund.hide-money .fdm-item b, #view-fund.hide-money .fd-navv b,
#view-fund.hide-money .py-am{ filter:blur(4px); }
/* 定投表格 nowrap 列不撑破容器：超宽时横向滚动 */
#view-fund #fp-list{ max-width:100%; overflow-x:auto; }
#view-fund .plan-table{ width:100%; min-width:0; }
#view-fund .fd-card .fd-head{ display:flex; align-items:flex-start; gap:10px; margin-bottom:8px; }
#view-fund .fd-card .fd-title{ font-size:15px; font-weight:700; line-height:1.3; flex:1; min-width:0; }
#view-fund .fd-card .fd-head-right{ display:flex; align-items:center; gap:8px; flex-shrink:0; }
#view-fund .fd-card .fd-navrow{ display:flex; justify-content:space-between; align-items:baseline; gap:10px; margin-bottom:10px; }
#view-fund .fd-card .fd-navv{ font-size:12.5px; color:var(--muted); }
#view-fund .fd-card .fd-navv b{ font-size:14px; color:var(--text); font-variant-numeric:tabular-nums; }
#view-fund .fd-card .fd-yday{ font-size:12.5px; font-weight:600; white-space:nowrap; }
#view-fund .fd-card .fd-metrics{ display:grid; grid-template-columns:repeat(5,1fr); gap:0; background:var(--bg); border:1px solid var(--line); border-radius:12px; padding:0; margin-bottom:12px; }
#view-fund .fd-card .fdm-item{ min-width:0; padding:10px 12px; }
#view-fund .fd-card .fdm-item+.fdm-item{ border-left:1px solid #eef0f3; }
#view-fund .fdm-item span{ display:block; font-size:11px; color:var(--muted); margin-bottom:3px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
#view-fund .fdm-item b{ font-size:14px; font-weight:700; font-variant-numeric:tabular-nums; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
#view-fund .fdm-item b i{ font-style:normal; font-size:11px; font-weight:600; opacity:.85; margin-left:2px; }
#view-fund .fd-card .fd-actions{ display:grid; grid-template-columns:repeat(3,1fr); gap:8px; }
#view-fund .fd-btn{ border:1px solid var(--line); background:#fff; border-radius:10px; padding:9px 4px; font-size:12.5px; font-weight:600; color:var(--text); cursor:pointer; white-space:nowrap; }
#view-fund .fd-btn.fd-danger{ color:var(--up); border-color:#f3c4c1; }
#view-fund .fd-card .fd-more{ margin-top:12px; padding-top:12px; border-top:1px dashed var(--line); }
#view-fund .lbl-more{ font-size:12px; font-weight:700; color:var(--muted); margin:10px 0 6px; }
#view-fund .fd-inline{ display:flex; gap:8px; align-items:center; flex-wrap:wrap; }
#view-fund .fd-inline input{ flex:1; min-width:100px; }
/* 添加基金表单输入框不溢出：label/输入框均可收缩填满容器 */
#view-fund .panel label{ display:block; min-width:0; }
#view-fund .panel label input,
#view-fund .panel label select{ width:100%; box-sizing:border-box; min-width:0; }
#view-fund .fd-form-label{ font-size:12px; color:var(--muted); margin:0 0 5px; }
#view-fund .panel input[type="number"]{ min-height:34px; }
@media (max-width:420px){
  #view-fund .sum-value{ font-size:15px; }
  #view-fund .sum-item:not(:first-child) .sum-value{ font-size:13.5px; }
}
/* 定投计划表格（桌面端优化稿：基金/频率·扣款日/每期金额/下一期/状态/操作） */
#view-fund .plan-table{ width:100%; border-collapse:collapse; font-size:12.5px; }
#view-fund .plan-table th,#view-fund .plan-table td{ padding:9px 11px; text-align:left; border-bottom:1px solid var(--line); white-space:nowrap; }
#view-fund .plan-table th{ color:var(--muted); font-weight:600; font-size:11.5px; background:var(--bg); }
#view-fund .plan-table td.num{ text-align:right; font-variant-numeric:tabular-nums; }
#view-fund .plan-table tr:last-child td{ border-bottom:0; }
#view-fund .plan-ops{ display:flex; gap:6px; flex-wrap:wrap; }
#view-fund .plan-edit-row td{ background:var(--bg); padding:0 11px; }
#view-fund .fp-badge{ font-size:11px; font-weight:600; border-radius:999px; padding:2px 9px; white-space:nowrap; display:inline-block; }
#view-fund .fp-badge.on{ color:var(--down); background:#e6f6ee; }
#view-fund .fp-badge.off{ color:var(--muted); background:var(--bg); }
#view-fund .fp-btn{ border:1px solid var(--line); background:#fff; border-radius:9px; padding:6px 12px; font-size:12.5px; font-weight:600; color:var(--text); cursor:pointer; white-space:nowrap; }
#view-fund .fp-btn.fp-danger{ color:var(--up); border-color:#f3c4c1; }
#view-fund .fp-btn:disabled{ opacity:.5; cursor:default; }
/* 窄屏：汇总 2 列折叠、指标条 2 列、双栏塌成单列 */
@media (max-width:760px){
  #view-fund .fd-sum{ grid-template-columns:repeat(2,1fr); }
  #view-fund .sum-item{ padding:8px 16px; }
  #view-fund .sum-item:nth-child(3){ border-left:0; }
  #view-fund .fd-card .fd-metrics{ grid-template-columns:repeat(2,1fr); }
  #view-fund .fdm-item:nth-child(3),#view-fund .fdm-item:nth-child(5){ border-left:0; }
  #view-fund .fdm-item:nth-child(3),#view-fund .fdm-item:nth-child(5){ border-top:1px solid #eef0f3; }
  #view-fund .plan-ops{ flex-direction:column; }
}
.tbl-wrap{overflow-x:auto;max-width:100%;border-radius:0;}
.cat-tbl{font-size:12px;min-width:1080px;border-collapse:collapse;}
.cat-tbl th,.cat-tbl td{padding:7px 9px;white-space:nowrap;border-bottom:1px solid var(--line);}
.cat-tbl th{background:var(--bg);font-weight:600;color:var(--muted);position:sticky;top:0;z-index:1;font-size:11.5px;}
.cat-tbl th.l{text-align:left;}
.cat-tbl th.r{text-align:right;}
.cat-tbl td.num{text-align:right;font-variant-numeric:tabular-nums;}
.cat-tbl td.num.up{color:var(--up);font-weight:500;}
.cat-tbl td.num.down{color:var(--down);font-weight:500;}
.cat-tbl tr:hover td{background:#fafafa;}
.cat-tbl .star{background:transparent;border:0;font-size:16px;cursor:pointer;color:#f0b400;}
.cat-tbl .star.off{color:#d2d2d7;}
.cat-tbl .star:hover{color:#e7b900;}
.cat-tbl td.tag{font-size:10.5px;color:var(--muted);text-align:right;}
.cat-tbl .ac-tags{display:inline-flex;gap:4px;flex-wrap:wrap;justify-content:flex-end;}
.cat-tbl .ac-tags i{font-style:normal;background:var(--bg);border:1px solid var(--line);border-radius:4px;padding:0 5px;font-size:10.5px;color:var(--muted);white-space:nowrap;display:inline-flex;align-items:center;gap:4px;}
.cat-tbl .ac-tags i.src.w{background:var(--primary-soft);border-color:#cfe2ff;color:var(--primary);font-weight:600;}
.cat-tbl .ac-tags i.src.v{background:#fff;border-color:#dcdce1;color:#98989e;font-weight:600;}
.cat-tbl .wd-name{color:var(--text);font-weight:500;}
/* MOB-C3：表格内长产品名膝略号截断（完整名可取 hover title / 详情） */
.tbl td b{ display:inline-block; max-width:220px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; vertical-align:bottom; }
.cat-tbl .wd-name{ display:inline-block; max-width:200px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; vertical-align:bottom; }
.cat-tbl .pd-name-link{ display:inline-block; max-width:260px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; vertical-align:bottom; }
.pager{display:flex;gap:8px;align-items:center;margin-top:12px;}
.pager span{min-width:24px;text-align:center;color:var(--muted);}
.cat-modebar{display:inline-flex;gap:6px;align-items:center;flex-wrap:wrap;}
.mode-btn{display:inline-flex;align-items:center;gap:4px;padding:6px 11px;border:1px solid var(--line);border-radius:9px;background:#fff;font-size:12.5px;cursor:pointer;color:var(--text);}
.mode-btn:hover{border-color:var(--primary);color:var(--primary);}
.mode-btn.on{border-color:var(--primary);background:var(--primary-soft);color:var(--primary);}
.mode-btn .mval{font-weight:700;color:var(--text);}
.mode-btn .ico{font-size:13px;}
/* 收益排序下拉（#cp-sort）：与相邻胶囊按钮同高同圆角；select 原生按最长 option 撑宽，
   此处封顶宽度 + 超宽截断省略（展开列表仍见全文），避免比「销售机构/发行机构」宽出一截 */
#view-products #cp-sort{
  max-width:160px;
  border-radius:9px;
  padding:6px 20px 6px 12px;   /* 右侧加宽让位原生箭头 */
  white-space:nowrap;
  overflow:hidden;
  text-overflow:ellipsis;
}
.cat-menu{min-width:200px;max-width:340px;}
.cat-menu .ac-item{padding:6px 10px;}
th[data-sort]{cursor:pointer;user-select:none;}
th[data-sort]:hover{color:var(--text);}
th[data-sort] .arr{font-size:9px;color:var(--muted);margin-left:2px;}
th[data-sort].asc .arr::after{content:"▲";color:var(--primary);}
th[data-sort].desc .arr::after{content:"▼";color:var(--primary);}
th[data-sort] .arr::before{content:"⇅";}
th[data-sort].asc .arr::before,th[data-sort].desc .arr::before{content:"";}

/* ===== 信息条 + 汇总卡片（产品列表 / 新发列表） ===== */
.cat-infobar{
  display:flex; align-items:center; gap:18px; flex-wrap:wrap;
  margin:12px 0 16px; padding:14px 20px;
  background:var(--panel); border:1px solid var(--line); border-radius:14px;
  font-size:13px; color:var(--muted); box-shadow:var(--shadow);
}
.cat-infobar b{ color:var(--text); font-weight:600; }
.cat-infobar .sep{ display:inline-block; width:1px; height:14px; background:var(--line); }

/* ===== 数据新鲜度（20261004）：列表顶部提示条 + 行/卡滞后标签 =====
   分层排序的单一事实源在 backend/app/catalog_fresh_sort.py；前端只渲染
   后端下发的 stale / stale_days / stale_notice，不自行统计滞后数。 */
.stale-notice{
  display:flex; align-items:flex-start; gap:8px;
  margin:0 0 14px; padding:10px 16px;
  background:rgba(0,102,204,.06); border:1px solid rgba(0,102,204,.18);
  border-radius:12px; font-size:12.5px; line-height:1.6; color:var(--muted);
}
.stale-notice.warn{
  background:rgba(199,122,0,.08); border-color:rgba(199,122,0,.28); color:#8a5a00;
}
.stale-tag{
  display:inline-block; margin-left:6px; padding:1px 6px;
  background:rgba(199,122,0,.1); border:1px solid rgba(199,122,0,.3);
  border-radius:6px; font-size:10.5px; font-weight:600; color:#8a5a00;
  white-space:nowrap; vertical-align:middle;
}
tr.stale-row .pd-name-link{ opacity:.85; }
.cpc.stale{ border-color:rgba(199,122,0,.3); }

/* ===== 邀请有礼首屏卡（20261004，js/invite-card.js；与手机端 m-invite.js 同源） ===== */
.iv-card{ margin-bottom:16px; }
.iv-card-main{ display:flex; align-items:center; gap:18px; }
.iv-card-l{ flex:1; min-width:0; }
.iv-card-t{ font-size:15px; font-weight:700; color:var(--text); }
.iv-card-s{ font-size:12.5px; color:var(--muted); margin-top:6px; line-height:1.6; }
.iv-card-s b{ color:var(--text); font-weight:700; }
.iv-card-code{ font-family:"SF Mono",Menlo,Consolas,monospace; letter-spacing:1px; }
.iv-card-ops{ display:flex; gap:8px; flex-wrap:wrap; margin-top:12px; }
.iv-card-r{
  flex-shrink:0; width:104px; padding:16px 8px; text-align:center;
  background:linear-gradient(135deg,#0B5C46,#084034); border-radius:14px; color:#fff;
}
.iv-card-days{ font-size:32px; font-weight:800; line-height:1.1; color:#FFB020; }
.iv-card-days em{ font-size:14px; font-style:normal; margin-left:2px; }
.iv-card-days-l{ font-size:11.5px; color:rgba(255,255,255,.72); margin-top:4px; }
.iv-card-note{ font-size:11.5px; color:var(--muted); margin-top:10px; line-height:1.6; }
@media (max-width:760px){
  .iv-card-main{ flex-wrap:wrap; }
  .iv-card-r{ width:100%; }
}

.cat-summary{
  display:grid; grid-template-columns:repeat(3,1fr);
  gap:16px; margin-bottom:18px;
}
.cat-summary .scard{
  background:var(--panel); border:1px solid var(--line); border-radius:var(--radius);
  padding:20px 16px; min-height:96px;
  display:flex; flex-direction:column; align-items:center; justify-content:center;
  box-shadow:var(--shadow);
}
.cat-summary .scard .num{ font-size:32px; font-weight:700; color:var(--text); line-height:1.1; letter-spacing:-.5px; font-variant-numeric:tabular-nums; }
.cat-summary .scard .label{ color:var(--muted); font-size:12.5px; margin-top:8px; }
.cat-summary .scard.highlight{
  background:linear-gradient(180deg,#eaf3ff 0%,#f7fbff 100%);
  border:1px solid #d8e8ff;
}
.cat-summary .scard.highlight .num{ color:var(--primary); }
.cat-summary .scard.highlight .label{ color:var(--muted); }

.cat-tbl thead th{
  background:var(--bg); color:var(--muted); font-weight:600; font-size:11.5px;
  border-bottom:1px solid var(--line) !important;
}
.cat-tbl thead th[data-sort].asc,
.cat-tbl thead th[data-sort].desc{
  background:#ececf0; color:var(--text);
}
.cat-tbl thead th[data-sort]:hover{ color:var(--text); }
.cat-tbl tbody tr:nth-child(even) td{ background:#fafafa; }
.cat-tbl tbody tr:hover td{ background:var(--bg) !important; }
.cat-tbl td{ color:var(--text); }
.cat-tbl .pd-name-link{ color:var(--primary); text-decoration:none; font-weight:500; }
.cat-tbl .pd-name-link:hover{ color:var(--primary-hover); text-decoration:underline; }
.cat-tbl .star{ color:#f0b400; }
/* 银行理财产品列表：手机端把重排后的「产品名称」固定在左，其余数据列可横向滑动 */
@media (max-width:760px){
  #cp-tbl thead th:first-child,
  #cp-tbl tbody td:first-child,
  #cn-tbl thead th:first-child,
  #cn-tbl tbody td:first-child,
  #cf-tbl thead th:first-child,
  #cf-tbl tbody td:first-child{
    position:sticky; left:0; z-index:2; background:#fff;
    border-right:1px solid var(--line); box-shadow:3px 0 6px rgba(0,0,0,.04);
  }
  #cp-tbl thead th:first-child,
  #cn-tbl thead th:first-child,
  #cf-tbl thead th:first-child{ z-index:3; }
  #cp-tbl tbody tr:nth-child(even) td:first-child,
  #cn-tbl tbody tr:nth-child(even) td:first-child,
  #cf-tbl tbody tr:nth-child(even) td:first-child{ background:#fafafa; }
  #cp-tbl tbody tr:hover td:first-child,
  #cn-tbl tbody tr:hover td:first-child,
  #cf-tbl tbody tr:hover td:first-child{ background:var(--bg); box-shadow:none; }
}
@media (max-width: 900px){
  .cat-summary{ grid-template-columns:1fr; }
}

/* 产品列表「两排」维度面板：点模式按钮在下方展开机构/组合等 */
.cat-dim-panel{margin:10px 0 0;padding:12px 14px;background:var(--bg);border:1px solid var(--line);border-radius:12px;flex-direction:column;gap:10px;width:100%;flex-basis:100%;align-self:stretch;}
.cat-dim-panel:not([hidden]){display:flex;}
.cat-dim-panel[hidden]{display:none !important;}
.bank-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:8px;}
.bank-chip{display:flex;align-items:center;gap:8px;padding:8px 10px;background:#fff;border:1px solid var(--line);border-radius:9px;cursor:pointer;font-size:13px;transition:.15s;}
.bank-chip:hover{border-color:var(--primary);background:var(--primary-soft);}
.bank-chip.on{border-color:var(--primary);background:var(--primary-soft);box-shadow:0 0 0 1px var(--primary) inset;}
/* 银行图标（20261016 本地化 SSOT=js/bank-icon.js）：机构卡/表格标签/详情徽章/
   手机卡共用；.sm=16px 小规格。兜底彩色首字与 onerror 降级链见 bank-icon.js */
.bci{width:22px;height:22px;border-radius:6px;display:inline-flex;align-items:center;justify-content:center;color:#fff;font-size:11px;font-weight:700;flex:0 0 auto;position:relative;overflow:hidden;vertical-align:middle;}
.bci.sm{width:16px;height:16px;border-radius:4px;font-size:9px;}
.bci.logo img{width:100%;height:100%;object-fit:contain;display:block;}
.bci.logo .bci-txt{position:absolute;inset:0;display:none;align-items:center;justify-content:center;color:#fff;font-size:10px;font-weight:700;}
.bank-chip .bcc{color:var(--muted);font-size:11px;margin-left:auto;}
.bank-chip .bcc.on{color:var(--primary);font-weight:600;}
.cycle-row{display:flex;gap:14px;align-items:center;flex-wrap:wrap;}
.cycle-row label{display:inline-flex;align-items:center;gap:5px;font-size:13px;cursor:pointer;color:var(--text);}
.cycle-row .badge{background:var(--bg);border:1px solid var(--line);border-radius:6px;padding:4px 8px;font-size:11px;color:var(--muted);}
.mode-btn.ghost{background:transparent;border-color:transparent;color:var(--muted);}
.mode-btn.ghost:hover{background:var(--bg);color:var(--primary);}

/* 产品详情弹层
   注意：display 由不[hidden]时才显式，避免作者 display 覆盖 hidden 导致“永远关不掉” */
.pd-overlay{position:fixed;inset:0;background:rgba(0,0,0,.4);z-index:80;align-items:flex-start;justify-content:center;padding:24px 14px;overflow:auto;}
.pd-overlay:not([hidden]){display:flex;}
.pd-overlay[hidden]{display:none !important;}
.pd-box{background:#fff;border-radius:20px;max-width:980px;width:100%;padding:22px 24px;box-shadow:0 24px 60px rgba(0,0,0,.2);}
.pd-top{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;}
.pd-top h3{margin:0;font-size:20px;font-weight:700;letter-spacing:-.3px;}
.pd-sub{color:var(--muted);font-size:12px;margin-top:5px;}
.pd-top-btns{display:flex;gap:8px;flex:0 0 auto;}
.pd-meta{display:flex;flex-wrap:wrap;gap:6px 14px;margin:12px 0 6px;font-size:12.5px;color:var(--muted);align-items:center;}
.pd-meta .badge{background:var(--bg);border:1px solid var(--line);border-radius:6px;padding:2px 8px;font-size:11.5px;color:var(--muted);}
/* ── 基本信息紧凑块（去掉「基本信息」面板：徽标行 + 基准行 + 「更多信息」折叠） ── */
/* 手机端专用组件（顶栏 / 最新表现小节 / 序列胶囊）：桌面隐藏，≤760px 媒体查询内显示 */
.pd-mhead{display:none;}
.pd-msec{display:none;}
#pd-pk-series-m[hidden]{display:none !important;}
.pd-basic{margin-top:12px;}
.pd-badges{display:flex;flex-wrap:wrap;gap:6px;}
.pd-badge{background:#f0f3f7;border:1px solid var(--line);border-radius:7px;padding:3px 9px;font-size:11.5px;color:var(--text);display:inline-flex;align-items:center;gap:5px;}
.pd-badge.hl{background:var(--primary-soft);border-color:#c9dcf5;color:var(--primary);}
.pd-bench{margin-top:7px;font-size:12px;color:var(--muted);}
.pd-bench b{color:var(--text);font-weight:600;}
.pd-more{margin-top:8px;border-top:1px dashed var(--line-soft);padding-top:6px;}
.pd-more-toggle{background:none;border:0;color:var(--muted);font-size:11.5px;cursor:pointer;padding:2px 0;display:inline-flex;align-items:center;gap:4px;}
.pd-more-toggle:hover{color:var(--primary);}
.pd-more .pm-arrow{transition:transform .15s;}
.pd-more.open .pm-arrow{transform:rotate(180deg);}
.pd-more-body{display:none;margin-top:8px;}
.pd-more.open .pd-more-body{display:block;}
.pd-more-body .pd-overview{gap:8px;}
.pd-panel{margin-top:14px;}
.pd-chart{height:270px;width:100%;min-height:270px;}
.pd-chart .ac-empty{height:100%;display:flex;align-items:center;justify-content:center;color:var(--muted);font-size:12.5px;background:var(--bg);border-radius:8px;}
.pd-overview{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:10px;}
.pd-overview .cell{background:var(--bg);border:1px solid var(--line);border-radius:12px;padding:12px 14px;}
.pd-overview .cell .k{font-size:11px;color:var(--muted);}
.pd-overview .cell .v{font-size:18px;font-weight:700;color:var(--text);margin-top:2px;font-variant-numeric:tabular-nums;}
/* ── 业绩走势区间控件（阶段2 §2.2.4：预设天数 + 自定义起止） ── */
.pd-range{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin:2px 0 12px;}
.pd-range .rbtn{border:1px solid var(--line);background:#fff;border-radius:8px;padding:4px 10px;font-size:12px;color:var(--muted);cursor:pointer;font-weight:500;transition:background .15s,color .15s,border-color .15s;}
.pd-range .rbtn:hover{color:var(--text);}
.pd-range .rbtn.active{background:var(--primary-soft);color:var(--primary);border-color:var(--primary);font-weight:600;}
.pd-range-custom{display:inline-flex;align-items:center;gap:6px;flex-wrap:wrap;}
.pd-range-custom[hidden]{display:none;}
.pd-range-custom input[type="date"]{border:1px solid var(--line);border-radius:8px;padding:4px 8px;font-size:12px;color:var(--text);background:#fff;}
.pd-range-custom input[type="date"]:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-soft);}

/* ── PK 同系列 / PK 产品表现（阶段3 §提示词C-3）── */
.ps-filter{display:flex;gap:14px;align-items:center;flex-wrap:wrap;margin:10px 0 12px;}
.ps-filter label{display:inline-flex;gap:6px;align-items:center;font-size:13px;color:var(--muted);}
.ps-filter select{border:1px solid var(--line);border-radius:8px;padding:4px 8px;font-size:12px;color:var(--text);background:#fff;max-width:180px;}
.ps-filter select:focus{outline:none;border-color:var(--primary);}
#ps-tbl tbody tr.ps-row:hover{background:var(--primary-soft);}
.pc-chips-wrap{display:flex;gap:10px;align-items:flex-start;flex-wrap:wrap;margin:12px 0;}
.pc-chips{display:flex;gap:8px;flex-wrap:wrap;}
.pc-chip{display:inline-flex;align-items:center;gap:6px;background:var(--primary-soft);color:var(--primary);border:1px solid var(--primary);border-radius:999px;padding:3px 6px 3px 12px;font-size:12px;font-weight:500;max-width:260px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.pc-chip-x{border:none;background:transparent;color:var(--primary);cursor:pointer;font-size:12px;padding:2px 4px;line-height:1;}
.pc-chip-x:hover{color:var(--up);}
.pc-add{position:relative;flex:1;min-width:240px;}
.pc-add input{width:100%;border:1px solid var(--line);border-radius:8px;padding:7px 10px;font-size:13px;color:var(--text);background:#fff;}
.pc-add input:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-soft);}
.pc-sugg{position:absolute;top:calc(100% + 4px);left:0;right:0;background:#fff;border:1px solid var(--line);border-radius:10px;box-shadow:var(--shadow);z-index:30;max-height:260px;overflow:auto;}
.pc-sitem{padding:8px 12px;font-size:13px;color:var(--text);cursor:pointer;border-bottom:1px solid var(--line-soft);}
.pc-sitem:last-child{border-bottom:none;}
.pc-sitem:hover{background:var(--primary-soft);}
.pc-sitem .muted{font-size:11px;}
#pc-note{font-size:12px;}
/* 指标卡分组标题（#pd-cards 是 grid，标题行整行通栏） */
#pd-cards .pd-cg{grid-column:1/-1;font-size:12px;font-weight:600;color:var(--primary);letter-spacing:.5px;margin-top:4px;padding-bottom:2px;border-bottom:1px solid var(--line-soft);}
.pd-name-link{cursor:pointer;color:var(--primary);text-decoration:none;}
.pd-name-link:hover{color:var(--primary-hover);text-decoration:underline;}

/* 活期理财：底层基金代码配置行 */
.dm-fundbar{
  display:flex; flex-wrap:wrap; gap:8px; align-items:center;
  padding:9px 12px; margin-bottom:12px;
  background:var(--bg); border:1px solid var(--line); border-radius:12px;
}
.dm-fundbar label{ display:inline-flex; align-items:center; gap:7px; margin:0;
  color:var(--muted); font-size:12.5px; }
.dm-fundbar input.dm-fund{ width:112px; height:30px; padding:0 9px; font-size:13px;
  border:1px solid var(--line); border-radius:8px; background:#fff; color:var(--text);
  font-variant-numeric:tabular-nums; letter-spacing:.5px; }
.dm-fundbar input.dm-fund:focus{ outline:none; border-color:var(--primary); box-shadow:0 0 0 3px var(--primary-soft); }
.dm-fundbar .dm-finfo{ font-size:12px; color:var(--muted); flex:1; min-width:200px; }
.dm-fundbar .dm-finfo:empty{ display:none; }
.dm-fundbar .btn{ margin:0; white-space:nowrap; }

/* 管理列（预计下次净值采集 / 更新按钮）：默认隐藏，仅管理员(本地默认/账号admin)可见 */
.admin-only{ display:none !important; }
body.is-admin th.admin-only, body.is-admin td.admin-only{ display:table-cell !important; }
body.is-admin td.admin-only.num{ text-align:left; color:var(--muted); font-size:11.5px; }

/* 逆回购行情行：可点击填单 */
#rr-tbl tbody tr.rr-row{ cursor:pointer; }
#rr-tbl tbody tr.rr-row:hover td{ background:var(--primary-soft); }

/* 收益日历（iOS 风：胶囊格、绿涨红跌、柔和卡片） */
.gcal-grid{ display:grid; grid-template-columns:repeat(7, 46px); gap:6px; justify-content:start; }
.gcal-wk{ font-size:11px; color:var(--muted); text-align:center; padding:2px 0 4px; font-weight:500; }
.gcal-blank{ width:46px; height:46px; min-height:0; }
.gcal-day{ display:flex; flex-direction:column; gap:1px; align-items:center; justify-content:center;
  border:0; border-radius:12px; padding:4px 2px;
  width:46px; height:46px; min-height:0; min-width:0; cursor:pointer; overflow:hidden;
  font-variant-numeric:tabular-nums; transition:transform .12s, box-shadow .12s; }
.gcal-day:hover{ transform:translateY(-1px); box-shadow:0 4px 12px rgba(0,0,0,.08); }
.gcal-day .gcal-num{ font-size:12px; font-weight:600; line-height:1; opacity:.95; }
.gcal-day .gcal-amt{ font-size:9.5px; font-weight:600; line-height:1.1; width:100%;
  word-break:break-all; text-align:center; opacity:.95; }
.gcal-it{ display:inline-block; margin:3px 6px 0 0; padding:1px 8px; background:var(--bg);
  border:1px solid var(--line); border-radius:10px; font-size:11.5px; }

/* iOS 风配色：正收益绿、负收益红，按金额深浅 4 档 */
.gn-pos-1{ background:#d6f5d6; color:#1f6b2a; }
.gn-pos-2{ background:#7fd47f; color:#0c4a1a; }
.gn-pos-3{ background:#34c759; color:#ffffff; }
.gn-pos-4{ background:#1e8e3e; color:#ffffff; }
.gn-neg-1{ background:#ffd6d6; color:#8a1d1d; }
.gn-neg-2{ background:#ff8a8a; color:#7a1212; }
.gn-neg-3{ background:#ff3b30; color:#ffffff; }
.gn-neg-4{ background:#c41e1e; color:#ffffff; }
.gn-empty{ background:#f3f4f6; color:#b8bcc4; }
.gn-today{ box-shadow:inset 0 0 0 2px var(--primary); }

/* 临时隐藏收益日历面板（恢复显示请删除以下两条） */
.gcal-panel{ display:none; }

/* 日历标题略大（iOS 卡片感） */
#gcal-title{ font-size:15px; font-weight:600; letter-spacing:-.1px; }
/* 日视图月份选择器（默认当月，点选切换月份） */
.gcal-month{ border:0; background:transparent; font:inherit; font-size:15px; font-weight:600;
  color:var(--text); text-align:center; padding:4px 6px; border-radius:8px;
  letter-spacing:-.1px; cursor:pointer; max-width:150px; }
.gcal-month:hover{ background:var(--bg); }
.gcal-month::-webkit-calendar-picker-indicator{ opacity:.55; cursor:pointer; }

/* 月/年大格（4列网格） */
.gc-grid{ display:grid; gap:8px; }
.gc-grid-4{ grid-template-columns:repeat(4, minmax(0, 1fr)); }
.gc-block{ display:flex; flex-direction:column; align-items:center; justify-content:center; gap:6px;
  border:1px solid var(--line); border-radius:12px; padding:14px 6px; min-height:88px; cursor:pointer; }
.gc-block:hover{ outline:1.5px solid var(--text); outline-offset:1px; }
.gc-block .gc-lbl{ font-size:13px; font-weight:600; opacity:.85; }
.gc-block .gc-amt{ font-size:15px; font-weight:700; letter-spacing:.2px; }

/* ===== 交易日历（A股：每日收益正红负绿 + 开/休市弱标） ===== */
.tc-week{ display:grid; grid-template-columns:repeat(7,minmax(0,1fr)); gap:6px; margin-bottom:4px; }
.tc-week span{ font-size:10px; color:var(--muted); text-align:center; padding:3px 0; font-weight:500; }
.tc-grid{ display:grid; grid-template-columns:repeat(7,minmax(0,1fr)); gap:6px; }
.tc-day{ position:relative; display:flex; flex-direction:column; align-items:center; justify-content:center; gap:3px;
  height:56px; border-radius:12px; border:none; padding:0; cursor:pointer; font:inherit;
  font-variant-numeric:tabular-nums; color:var(--text); background:var(--bg); min-width:0; }
.tc-day.blank{ background:transparent; cursor:default; pointer-events:none; }
.tc-day.on{ background:var(--bg); }
.tc-day.off{ background:#f2f4f7; }
.tc-day .tc-num{ font-size:12.5px; font-weight:600; line-height:1; }
.tc-day.off .tc-num{ color:var(--muted); }
.tc-amt{ font-size:10px; font-weight:700; line-height:1; min-height:10px; }
.tc-amt.up{ color:var(--up); }
.tc-amt.down{ color:var(--down); }
.tc-day.off .tc-offtag{ font-size:9px; font-weight:600; color:var(--muted); line-height:1; }
.tc-day.today{ box-shadow:inset 0 0 0 2px var(--primary); }
.tc-day.sel{ background:var(--primary-soft); box-shadow:inset 0 0 0 1.5px var(--primary); color:var(--primary); }
.tc-day:hover{ outline:1.5px solid var(--line); outline-offset:-1px; }
.tc-legend{ display:inline-flex; align-items:center; gap:5px; margin-right:12px; font-size:11.5px; color:var(--muted); }
.tc-box{ display:inline-block; width:11px; height:11px; border-radius:2px; }
.tc-box.up{ background:#f8575c; }
.tc-box.down{ background:#9ed8a0; }
.tc-box.off{ background:#f2f4f7; box-shadow:inset 0 0 0 1px var(--line); }
.tc-box.today{ box-shadow:inset 0 0 0 2px var(--primary); }
/* 逐日收益明细（交易日历右侧） */
.td-panel{ min-width:0; }
.td-panel .td-date-head{ font-size:12.5px; color:var(--text); white-space:nowrap; }
.td-panel .td-sort{ height:26px; font-size:11.5px; border:1px solid var(--line); border-radius:8px;
  padding:0 6px; color:var(--text); background:var(--bg); cursor:pointer; }
.td-row{ display:flex; justify-content:space-between; align-items:center; gap:8px; padding:6px 0;
  border-bottom:1px solid #f0f2f5; }
.td-row:last-child{ border-bottom:none; }
.td-row .td-name{ font-size:12.5px; color:var(--text); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; min-width:0; }
.td-val{ font-weight:600; font-variant-numeric:tabular-nums; white-space:nowrap; }
.td-total{ padding-top:8px; margin-top:4px; font-weight:700; border-top:1px solid #eef1f7; border-bottom:none; }
@media (max-width:760px){
.tc-week, .tc-grid{ grid-template-columns:repeat(7,minmax(0,1fr)); gap:4px; }
.tc-day{ height:50px; }
}
/* 交易日历显示模式切换（收益金额/收益率）：复用 .seg 胶囊样式，紧凑不换行 */
#tc-unit-seg{ flex:0 0 auto; }
#tc-unit-seg .seg-btn{ padding:4px 9px; font-size:11.5px; white-space:nowrap; }
@media (max-width:760px){
/* 覆盖移动端 #view-dashboard .seg 全宽/等分规则，按钮保持内容宽、随 page-head 换行 */
#view-dashboard #tc-unit-seg{ width:auto; }
#view-dashboard #tc-unit-seg .seg-btn{ flex:none; padding:4px 8px; }
/* 手机端：交易日历标题 / 2026年9月 / 收益金额·收益率 收进同一行，以「交易日历」标题为基准垂直居中 */
#view-dashboard .tc-panel .page-head{ flex-wrap:nowrap; align-items:center; gap:6px; }
#view-dashboard .tc-panel .page-head h3{ flex:none; white-space:nowrap; font-size:14px; }
#view-dashboard .tc-panel .page-head h3 .muted{ display:none; } /* 「每日收益」副标题在手机端让位，保证同行放得下 */
#view-dashboard .tc-panel .page-head > div{ flex:1 1 auto; min-width:0; justify-content:flex-end; gap:3px; }
#view-dashboard .tc-panel #tc-prev, #view-dashboard .tc-panel #tc-next{ padding:3px 7px; }
#view-dashboard .tc-panel #tc-title{ font-size:12px; }
}

/* 图例色块（同 gn-* 配色） */
.gn-legend, .gh-legend{ display:flex; align-items:center; gap:2px; flex-wrap:wrap; margin-top:8px;
  font-size:11px; color:var(--muted); }
.gn-box{ display:inline-block; width:11px; height:11px; border-radius:2px; margin:0 1px; vertical-align:-1px; }
.gn-box.gn-today{ box-shadow:inset 0 0 0 1.5px var(--primary); }

/* 全年收益热力（GitHub 式；列=周、行=星期几；正红负绿深浅四档） */
.gh-scroll{ overflow-x:auto; }
.gh{ border-collapse:separate; border-spacing:3px; }
.gh td{ padding:0; }
.gh .gh-w, .gh .gh-m{ font-size:10px; color:var(--muted); white-space:nowrap; padding:1px 5px 0 0; }
.gh .gh-m{ text-align:left; padding-bottom:3px; }
.gh-cell{ width:13px; height:13px; border-radius:3px; border:none; padding:0; cursor:pointer; }
.gh-cell:hover{ outline:1.5px solid var(--text); outline-offset:1px; }
.gh-cell.gh-empty{ background:#e9ecf1; }
.gh-pos-1{ background:#ffe3e3; } .gh-pos-2{ background:#ff9e9e; }
.gh-pos-3{ background:#f8575c; } .gh-pos-4{ background:#d92626; }
.gh-neg-1{ background:#e0f3e0; } .gh-neg-2{ background:#9ed8a0; }
.gh-neg-3{ background:#43b25c; } .gh-neg-4{ background:#1e8e3e; }
.gh-cell.gh-today{ box-shadow:inset 0 0 0 2px var(--primary); }
.gh-legend{ display:flex; align-items:center; gap:2px; flex-wrap:wrap; margin-top:8px;
  font-size:11px; color:var(--muted); }
.gh-box{ display:inline-block; width:11px; height:11px; border-radius:2px; margin:0 1px; }
.gh-box.gh-empty{ background:#e9ecf1; }
.gh-box.gh-today{ box-shadow:inset 0 0 0 1.5px var(--primary); }
.gh-div{ width:12px; }

/* 区间收益（大数+副标） */
.big-stat{ display:flex; align-items:baseline; gap:14px; padding:4px 0 2px; flex-wrap:wrap; }
.big-value{ font-size:30px; font-weight:700; font-variant-numeric:tabular-nums; line-height:1.1; }
.big-value.up{ color:var(--up); } .big-value.down{ color:var(--down); }
.big-sub{ font-size:12px; color:var(--muted); }

/* 当日/当月/当年 → 仿「累计持仓盈亏」卡片版式（纵向 label/数值/说明） */
#gain-display.card{ flex-direction:column; align-items:flex-start; gap:3px; padding:10px 14px;
  border:1px solid var(--line); border-radius:12px; background:var(--panel);
  box-shadow:0 1px 3px rgba(0,0,0,.03); }
#gain-display.card .gain-label{ font-size:12px; color:var(--muted); }
#gain-display.card .big-value{ font-size:22px; }
#gain-display.card .big-sub{ font-size:11.5px; color:var(--muted); }
/* 全部/自定义 → 大数字+区间副标（不带标签行） */
#gain-display.range .gain-label{ display:none; }
#gain-display .gain-label{ font-size:12px; color:var(--muted); }

/* 产品详情「我的持仓/收益」区 */
#pd-my .pos-row{ display:grid; grid-template-columns:repeat(auto-fit,minmax(118px,1fr)); gap:8px; margin:6px 0 10px; }
#pd-my .pos-item{ background:var(--bg); border:1px solid var(--line); border-radius:10px; padding:8px 10px; }
#pd-my .pos-item .k{ font-size:11px; color:var(--muted); margin-bottom:2px; font-weight:400; }
#pd-my .pos-item .v{ font-size:14.5px; font-weight:600; font-variant-numeric:tabular-nums; }
#pd-my table.tbl td, #pd-my table.tbl th{ white-space:nowrap; }

/* ================= 登录 / 会员 / 用户管理（多用户版） ================= */
/* 侧边栏用户芯片（替代原 sidebar-foot，置底） */
.user-chip{ margin-top:auto; display:flex; align-items:center; gap:9px; padding:9px 10px;
  margin-left:6px; margin-right:6px; border-radius:12px; border:1px solid var(--line);
  background:#fff; cursor:pointer; transition:background .15s; }
.user-chip:hover{ background:var(--bg); }
.user-chip .avatar{ flex:0 0 auto; width:30px; height:30px; border-radius:50%;
  background:linear-gradient(135deg,#0071e3,#5e5ce6); color:#fff; display:inline-flex;
  align-items:center; justify-content:center; font-weight:700; font-size:13px; }
.user-chip .uc-text{ display:flex; flex-direction:column; line-height:1.3; min-width:0; }
.user-chip .name{ font-size:12.5px; font-weight:600; color:var(--text); max-width:110px;
  overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }

/* 会员等级徽章 */
.tier-badge{ display:inline-block; font-size:10.5px; padding:1px 8px; border-radius:999px;
  color:#fff; width:max-content; background:#6e6e73; }
/* A11Y-01：徽章底色加深使白字达 AA（原 #8e8e93/#34c759/#ff9f0a/#af52de 白字 2.0~3.3:1） */
.tier-none{ background:#e5e5ea; color:#4f4f54; }
.tier-registered{ background:#6e6e73; }
.tier-basic{ background:#1a7f37; }
.tier-premium{ background:#a06500; }
.tier-super{ background:#9b3fc9; }

/* 导航门禁：等级不足的入口半透明 + 锁标 */
.nav-item.nav-locked{ opacity:.45; }
.nav-item.nav-locked::after{ content:'🔒'; margin-left:auto; font-size:11px; }

/* admin-only 泛化：非表格元素（导航项/视图 section）也由 body.is-admin 控制显隐 */
/* 默认隐藏，仅管理员（body.is-admin）显示 */
body:not(.is-admin) .admin-only{ display:none !important; }
/* 导航项：管理员常驻显示（侧边栏导航习惯） */
body.is-admin nav .admin-only{ display:flex !important; }
/* 视图 section：必须遵循 .view/.active 的切换显隐，不得在其它视图下常驻 */
body.is-admin section.admin-only{ display:none !important; }
body.is-admin section.admin-only.active{ display:block !important; }
/* 面板类 div（如 #fb-admin-panel / #sol-admin-panel）：管理员且未被 JS 置 hidden 时显示；
   hidden 存在时不匹配本规则，回落到 .admin-only 的 display:none，保证 JS 显隐仍有效 */
body.is-admin div.admin-only:not([hidden]){ display:block !important; }

/* 我的账户弹层行 */
.up-row{ display:flex; justify-content:space-between; align-items:center; gap:10px;
  padding:9px 2px; border-bottom:1px solid var(--line); font-size:13px; }
.up-row:last-child{ border-bottom:0; }
.up-row .k{ color:var(--muted); flex:0 0 auto; }

/* 用户管理视图 */
.adm-tier-sel{ height:30px; border:1px solid var(--line); border-radius:8px; padding:0 6px;
  background:#fff; font-size:12.5px; }
.adm-days-in{ width:74px; height:30px; border:1px solid var(--line); border-radius:8px;
  padding:0 8px; font-size:12.5px; }
.code-pill{ display:inline-block; background:var(--bg); border:1px dashed var(--line);
  border-radius:8px; padding:3px 10px; margin:3px 6px 3px 0;
  font-family:ui-monospace,Menlo,Consolas,monospace; letter-spacing:1px; font-size:12.5px; }
#adm-users select, #adm-users input{ vertical-align:middle; }
#adm-users .adm-apply{ margin-left:6px; }

/* ===== 理财报告（20260919 对比稿优化版） ===== */
/* 头部：标题 + 单一分段控件 + 数据截至 + 隐藏金额 */
.rep-head{ display:flex; justify-content:space-between; align-items:center; gap:12px; flex-wrap:wrap; }
.rep-head .ph-r{ display:flex; align-items:center; gap:10px; flex-wrap:wrap; }
.rep-hd{ font-size:12px; color:var(--muted); }
#view-report .eye{ border:1px solid var(--line); background:#fff; border-radius:999px; padding:6px 13px;
  font-size:12px; font-weight:600; color:var(--text); cursor:pointer; font-family:inherit; }

/* 主收益卡：区间收益居主 + 右侧 2×2 累计指标 */
.rep-hero{ display:flex; align-items:stretch; gap:24px; padding:20px 24px; }
.rep-hero .hero-l{ flex:1.2; min-width:0; border-right:1px solid #f0f0f3; padding-right:24px; }
.rep-hero .hero-l .lab{ font-size:12.5px; color:var(--muted); font-weight:600; letter-spacing:.3px; }
.rep-hero .hero-l .lab .tag{ display:inline-block; margin-left:8px; font-size:10.5px; font-weight:600;
  background:var(--bg); border:1px solid var(--line); color:var(--muted); border-radius:6px;
  padding:1px 8px; letter-spacing:0; }
.rep-hero .hero-l .val{ font-size:44px; font-weight:800; letter-spacing:-1px; margin:6px 0 4px;
  font-variant-numeric:tabular-nums; line-height:1.05; }
.rep-hero .hero-l .cmp{ font-size:12.5px; color:var(--muted); }
.rep-hero .hero-l .cmp b{ font-weight:600; }
.rep-hero .hero-r{ flex:1; display:grid; grid-template-columns:1fr 1fr; gap:14px 20px; align-items:center; }
.rep-hero .hero-r .hr{ min-width:0; }
.rep-hero .hero-r .a{ font-size:11.5px; color:var(--muted); margin-bottom:4px; }
.rep-hero .hero-r .b{ font-size:18px; font-weight:700; font-variant-numeric:tabular-nums; letter-spacing:-.3px; }
.rep-hero .hero-r .b small{ font-size:11px; font-weight:600; margin-left:3px; }

/* 4列关键指标条（期初·净投入·区间收益·期末） */
.rep-stats4{ display:grid; grid-template-columns:repeat(4,1fr); background:var(--panel);
  border:1px solid var(--line); border-radius:16px; box-shadow:var(--shadow);
  padding:16px 8px; margin-bottom:14px; }
.rep-stats4 .st{ padding:2px 18px; }
.rep-stats4 .st+.st{ border-left:1px solid #eef0f3; }
.rep-stats4 .a{ font-size:11.5px; color:var(--muted); margin-bottom:6px; font-weight:500; }
.rep-stats4 .b{ font-size:19px; font-weight:700; letter-spacing:-.4px; font-variant-numeric:tabular-nums; }
.rep-stats4 .c{ font-size:10.5px; color:var(--muted); margin-top:4px; }

/* 走势 + 配置双栏 */
.rep-grid2{ display:grid; grid-template-columns:1.5fr 1fr; gap:14px; margin-bottom:14px; }
.rep-grid2 .panel{ margin-bottom:0; min-width:0; }
.rep-grid2 .panel .chart{ max-width:100%; }
.panel-hd{ display:flex; align-items:center; justify-content:space-between; gap:10px; margin-bottom:10px; }
.panel-hd h3{ font-size:15px; font-weight:600; margin:0; }
.panel-hd .mu{ font-size:11.5px; color:var(--muted); font-weight:400; }
#chart-rep-trend.slim, #chart-rep-alloc.slim{ height:240px; }

/* 盈亏贡献列表（按累计收益排序 + 正负条形） */
.pb{ display:flex; flex-direction:column; }
.pb-row{ display:grid; grid-template-columns:1.4fr 1fr 1fr 1.2fr; align-items:center; gap:10px;
  padding:9px 4px; border-bottom:1px solid #f2f2f4; font-size:13px; }
.pb-row:last-child{ border-bottom:0; }
.pb-name{ min-width:0; }
.pb-name .nm{ font-weight:600; font-size:13px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.pb-name .cd{ font-size:10.5px; color:var(--muted); }
.pb-mv{ text-align:right; font-variant-numeric:tabular-nums; color:#3a3a3c; font-weight:500; }
.pb-gn{ text-align:right; font-weight:700; font-variant-numeric:tabular-nums; }
.pb-bar{ height:6px; border-radius:3px; background:var(--bg); position:relative; overflow:hidden; }
.pb-bar i{ position:absolute; top:0; bottom:0; border-radius:3px; }
.pb-bar i.up{ background:var(--up); }
.pb-bar i.down{ background:var(--down); }

/* 区间动态时间线 */
.feed{ display:flex; flex-direction:column; }
.feed-it{ display:flex; gap:12px; padding:9px 0; border-bottom:1px solid #f2f2f4; }
.feed-it:last-child{ border-bottom:0; }
.feed-d{ font-size:11px; color:var(--muted); width:46px; flex-shrink:0; padding-top:1px; font-variant-numeric:tabular-nums; }
.feed-b{ flex:1; font-size:12.5px; line-height:1.5; min-width:0; }
.feed-b .amt{ float:right; font-weight:600; font-variant-numeric:tabular-nums; }
.feed-b .amt.up{ color:var(--up); }
.feed-b .sub{ color:var(--muted); font-size:11px; }

/* 隐藏金额（与基金页同款 blur） */
#view-report.hide-money .rep-blur{ filter:blur(5px); user-select:none; }

/* ---- 手机端：大数字主卡 + 2×2 指标 + 全宽卡片流 ---- */
@media (max-width:760px){
  .rep-head .seg{ max-width:100%; overflow-x:auto; }
  .rep-hero{ flex-direction:column; gap:12px; padding:16px 18px; margin-bottom:10px; }
  .rep-hero .hero-l{ border-right:0; padding-right:0; }
  .rep-hero .hero-l .val{ font-size:36px; }
  .rep-hero .hero-r{ width:100%; grid-template-columns:1fr 1fr; gap:10px 14px; }
  .rep-hero .hero-r .b{ font-size:15px; }
  .rep-stats4{ grid-template-columns:1fr 1fr; padding:6px 4px; gap:0; margin-bottom:10px; }
  .rep-stats4 .st{ padding:10px 16px; }
  .rep-stats4 .st:nth-child(2n){ border-left:1px solid #eef0f3; }
  .rep-stats4 .st:nth-child(n+3){ border-top:1px solid #eef0f3; }
  .rep-stats4 .b{ font-size:16px; }
  .rep-grid2{ grid-template-columns:1fr; gap:10px; }
  .rep-grid2 .panel, #view-report .panel{ margin-bottom:10px; padding:14px 16px; }
  .panel-hd h3{ font-size:14px; }
  .pb-row{ grid-template-columns:1.3fr 1fr; row-gap:3px; padding:8px 0; }
  .pb-mv{ grid-column:1/-1; font-size:11px; color:var(--muted); text-align:left; }
  .pb-bar{ grid-column:1/-1; height:5px; }
  .feed-d{ width:42px; }
  #view-report .eye{ padding:5px 11px; font-size:11.5px; }
}

/* ===== 移动端适配（优先 iPhone / iOS Safari：iPhone 17 ~402x874 同档全覆盖）===== */
.mnav-btn,.mnav-mask{ display:none; }

@media (max-width:760px){
  /* 骨架：侧栏 → 左侧抽屉，主区全宽 */
  .app{ display:block; }
  .mnav-btn{ display:flex; position:fixed; z-index:120;
    top:calc(10px + env(safe-area-inset-top)); left:calc(16px + env(safe-area-inset-left));
    width:40px; height:40px; align-items:center; justify-content:center;
    font-size:18px; color:var(--text); background:rgba(255,255,255,.92);
    border:1px solid var(--line); border-radius:12px; box-shadow:var(--shadow); cursor:pointer; }
  .mnav-mask{ display:block; position:fixed; inset:0; z-index:110; background:rgba(0,0,0,.35);
    opacity:0; pointer-events:none; transition:opacity .2s ease; }
  body.mnav-open .mnav-mask{ opacity:1; pointer-events:auto; }
  .sidebar{ position:fixed; z-index:115; top:0; left:0; height:100vh; height:100dvh;
    width:270px; max-width:84vw; transform:translateX(-105%); transition:transform .25s ease;
    overflow-y:auto; padding-top:calc(18px + env(safe-area-inset-top));
    padding-bottom:calc(18px + env(safe-area-inset-bottom)); }
  body.mnav-open .sidebar{ transform:none; }
  body.mnav-open{ overflow:hidden; }
  /* 主区：顶部让开汉堡按钮，四周让开安全区（灵动岛/小白条） */
  .main{ padding:calc(60px + env(safe-area-inset-top)) calc(14px + env(safe-area-inset-right))
    calc(24px + env(safe-area-inset-bottom)) calc(16px + env(safe-area-inset-left)); }
  .page-head h2{ font-size:20px; }
  /* 宽表横向滑动（持仓/产品列表等 nowrap 表格） */
  .tbl-wrap{ overflow-x:auto; -webkit-overflow-scrolling:touch; }
  /* iOS Safari 聚焦输入不自动放大：输入类字号≥16px */
  .form input,.form select,.form textarea,
  .cat-filter input,.cat-filter select,.cat-filter .input,
  .dm-fundbar input.dm-fund,.ac-box input,
  input,select,textarea{ font-size:16px; }
  /* 产品详情弹层 → 全屏卡片 */
  .pd-overlay{ padding:0; }
  .pd-overlay:not([hidden]){ z-index:130; }  /* 盖过汉堡按钮 */
  .pd-box{ border-radius:0; min-height:100vh; min-height:100dvh; box-shadow:none; }
  /* 血泪清单「元素显隐失控」：登录/我的账户弹层内容很短，若沿用上面的 100vh 全屏卡片，
     在窄屏（≤760px，含内嵌预览面板/分屏窗口）会铺成一整片纯白（实测 380x844 全白、
     min-height:844px），未登录自动弹层时形似「白屏」。仅这两个短内容弹层回退为
     内容高度 + 垂直居中；产品详情弹层仍保持全屏卡片（那是长内容，需要满屏滚动）。 */
  #auth-overlay, #user-overlay{ align-items:center; }
  #auth-overlay .pd-box, #user-overlay .pd-box{ min-height:0; max-height:100dvh; overflow-y:auto; }
  /* 收益日历 7 列改自适应（46px 固定列在 390px 宽会溢出） */
  .gcal-grid{ grid-template-columns:repeat(7,1fr); }
  /* 交易日历：7 列自适应，避免窄屏溢出 */
  .tc-grid{ grid-template-columns:repeat(7,minmax(0,1fr)); }
}

@media (max-width:430px){
  .panel{ padding:14px; }
  .cards{ gap:12px; }
  .card{ padding:16px; }
  .grid-2{ gap:12px; }
}

/* ===== 专项一：5 组分组导航 + 仪表盘状态条/待办（iOS 风） ===== */
/* 分组标题：小号大写间距，iOS 设置页分组观感 */
.nav-group-title{ font-size:10.5px; font-weight:700; letter-spacing:1.2px; color:var(--muted);
  padding:14px 12px 5px; text-transform:uppercase; }
nav .nav-group-title:first-child{ padding-top:6px; }
.nav-item{ -webkit-tap-highlight-color:transparent; }

/* 仪表盘状态条：胶囊状态芯片（ok=正常绿 / run=进行中蓝） */
.dash-status:not([hidden]){ display:flex; gap:8px; flex-wrap:wrap; margin-bottom:16px; }
.dash-status[hidden]{ display:none !important; }
.ds-chip{ display:inline-flex; align-items:center; gap:7px; border:1px solid var(--line);
  background:var(--panel); border-radius:999px; padding:6px 14px; font-size:12.5px; font-weight:600;
  color:var(--text); cursor:default; }
button.ds-chip{ cursor:pointer; transition:box-shadow .15s; }
button.ds-chip:hover{ box-shadow:var(--shadow); }
.ds-chip .dot{ width:7px; height:7px; border-radius:50%; background:var(--down); flex:0 0 auto; }
.ds-chip.ok .dot{ background:var(--down); }
.ds-chip.run .dot{ background:var(--primary); animation:pulse 1.2s ease-in-out infinite; }
.ds-chip.run{ color:var(--primary); }
@keyframes pulse{ 0%,100%{ opacity:1; } 50%{ opacity:.35; } }

/* 今日待办列表 */
.todo-list{ display:flex; flex-direction:column; gap:8px; }
.todo-item{ display:flex; align-items:center; gap:12px; background:var(--bg); border-radius:14px;
  padding:11px 14px; }
.todo-item .td-ico{ font-size:18px; flex:0 0 auto; }
.todo-item .td-text{ flex:1; font-size:13.5px; }

/* 快捷操作 */
.quick-actions{ display:flex; gap:10px; flex-wrap:wrap; }

@media (max-width:760px){
  .nav-group-title{ padding:10px 12px 4px; }
  .quick-actions .btn{ flex:1; }
}

/* ===== 专项二：会员中心 + 受限视图就地升级遮罩 ===== */
/* 就地升级遮罩：盖住侧栏以右主区，毛玻璃卡片承接 tier_required（替代全局弹层跳转）。
   display 只在非 [hidden] 时显式声明，避免作者 display 覆盖 hidden 导致遮罩全页常驻 */
.gate-mask{ position:fixed; top:0; right:0; bottom:0; left:236px; z-index:90;
  align-items:center; justify-content:center;
  background:rgba(242,242,247,.72); backdrop-filter:blur(6px); -webkit-backdrop-filter:blur(6px); }
.gate-mask:not([hidden]){ display:flex; }
.gate-mask[hidden]{ display:none !important; }
.gate-card{ background:var(--panel); border:1px solid var(--line); border-radius:20px;
  box-shadow:var(--shadow); padding:28px 30px 24px; text-align:center; max-width:360px; margin:0 16px; }
.gate-card .gate-ico{ font-size:34px; margin-bottom:6px; }
.gate-card h3{ margin:0 0 6px; font-size:16px; }
.gate-card .hint{ margin:0; }
@media (max-width:760px){ .gate-mask{ left:0; z-index:105; } }

/* 会员中心：我的订阅 / 套餐卡片 / 权益对比 */
.mb-sub{ display:flex; gap:18px; flex-wrap:wrap; font-size:13px; }
.mb-sub .k{ color:var(--muted); margin-right:6px; }
.mb-plans{ display:grid; grid-template-columns:repeat(auto-fit,minmax(180px,1fr)); gap:14px; }
.mb-plan{ position:relative; display:flex; flex-direction:column; gap:6px; background:var(--bg);
  border:1.5px solid var(--line); border-radius:16px; padding:18px 16px 14px; }
.mb-plan.recommended{ border-color:var(--primary); background:var(--primary-soft); }
.mb-plan .tag{ position:absolute; top:-10px; right:12px; background:var(--primary); color:#fff;
  font-size:10.5px; font-weight:700; padding:2px 10px; border-radius:999px; }
.mb-plan .tag.promo{ background:#e53e3e; }
.mb-plan .tag .promo-exp{ margin-left:5px; opacity:.85; font-weight:600; }
.mb-plan .p-name{ font-weight:700; font-size:14px; }
.mb-plan .p-name + .p-price-box{ margin-top:2px; }
.mb-plan .p-price{ font-size:22px; font-weight:800; letter-spacing:-.3px; }
.mb-plan .p-price small{ font-size:12px; font-weight:600; color:var(--muted); }
.mb-plan .strike{ color:var(--muted); text-decoration:line-through; font-size:0.62em; font-weight:600; }
.mb-plan .p-period{ display:flex; gap:4px; margin-top:6px; }
.mb-plan .p-period button{ border:1px solid var(--line); background:#fff; color:var(--muted);
  font-size:11px; padding:2px 8px; border-radius:999px; cursor:pointer; }
.mb-plan .p-period button.on{ background:var(--primary); border-color:var(--primary); color:#fff; }
.mb-plan .yr-desc{ display:block; font-size:11px; color:var(--primary); font-weight:600; margin-top:4px; }
.mb-plan .p-desc{ font-size:12px; color:var(--muted); flex:1; line-height:1.5; }
.mb-plan .current{ font-size:11px; font-weight:700; color:var(--primary); }
.mb-matrix td{ text-align:center; font-size:12.5px; }
.mb-matrix td.l{ text-align:left; }
.mb-matrix td .muted{ font-style:normal; margin-left:6px; font-size:11px; }

/* ===== 专项一：全局顶栏（面包屑 + 全局搜索 + 采集状态点 + 待办铃铛） ===== */
.topbar{ position:sticky; top:0; z-index:55; display:flex; align-items:center; gap:14px;
  margin:-26px -30px 14px; padding:12px 30px;
  background:color-mix(in srgb, var(--bg) 88%, transparent);
  backdrop-filter:blur(8px); -webkit-backdrop-filter:blur(8px);
  border-bottom:1px solid var(--line-soft); }
.crumb{ font-size:12.5px; color:var(--muted); white-space:nowrap; }
.crumb i{ font-style:normal; margin:0 6px; opacity:.6; }
.crumb b{ color:var(--text); font-weight:600; }
.topbar-right{ margin-left:auto; display:flex; align-items:center; gap:10px; }
.gsearch{ position:relative; }
.gsearch input{ width:250px; height:34px; border:1px solid var(--line); border-radius:10px;
  background:var(--panel); padding:0 12px; font-size:13px; color:var(--text); outline:none;
  transition:border-color .15s, box-shadow .15s; }
.gsearch input:focus{ border-color:var(--primary); box-shadow:0 0 0 3px rgba(0,122,255,.12); }
.gs-menu{ position:absolute; top:calc(100% + 6px); right:0; width:340px; max-height:360px;
  overflow:auto; z-index:70; box-shadow:var(--shadow); }
.gs-group{ font-size:10.5px; font-weight:700; letter-spacing:1px; color:var(--muted);
  padding:8px 12px 3px; text-transform:uppercase; }
.gs-item{ width:100%; border:0; background:none; text-align:left; cursor:pointer;
  display:flex; align-items:baseline; gap:8px; padding:8px 12px; }
.gs-item:hover{ background:var(--bg); }
.gs-item b{ font-size:13px; color:var(--text); font-weight:600; flex:1; min-width:0;
  overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.gs-item span{ font-size:11px; color:var(--muted); flex:0 0 auto; }
.sync-dot{ border:0; background:none; cursor:default; padding:4px; align-items:center; }
.sync-dot:not([hidden]){ display:flex; }
.sync-dot .dot{ width:9px; height:9px; border-radius:50%; background:var(--down); display:block; }
.sync-dot .dot.run{ background:var(--primary); animation:pulse 1.2s ease-in-out infinite; }
.bell{ position:relative; border:0; background:none; font-size:17px; cursor:pointer;
  padding:4px 5px; line-height:1; }
.bell b{ position:absolute; top:-3px; right:-5px; background:var(--up); color:#fff;
  font-size:9.5px; font-weight:700; min-width:15px; height:15px; line-height:15px;
  border-radius:999px; text-align:center; padding:0 3px; }
@media (max-width:760px){
  /* 移动端主区顶部为汉堡按钮预留 60px+安全区：顶栏回填该空间，内容行排在其下 */
  .topbar{ position:static; gap:8px;
    margin:calc(-60px - env(safe-area-inset-top)) -14px 12px;
    padding:calc(50px + env(safe-area-inset-top)) 14px 10px; }
  .crumb{ display:none; }           /* 小屏以搜索为主，面包屑让位 */
  .gsearch{ flex:1; }
  .gsearch input{ width:100%; }
  .gs-menu{ width:min(340px, 92vw); }
}

/* ===== FE-04 三态：骨架（加载中）/ 空态 / 错态（20260914，纯行为层增量） ===== */
/* 骨架屏：灰块占位 + shimmer 呼吸动画（表格行 / 块级条两种形态） */
.sk{ background:linear-gradient(90deg,#ececf0 25%,#f7f7f9 37%,#ececf0 63%);
  background-size:400% 100%; animation:sk-breathe 1.4s ease infinite; border-radius:6px; }
tr.sk-row td{ padding:10px 12px; border-bottom:1px solid var(--line); }
tr.sk-row td .sk{ display:block; height:12px; width:70%; }
tr.sk-row td:first-child .sk{ width:46%; height:14px; }
.sk-line{ display:block; height:13px; margin:12px 0; }
@keyframes sk-breathe{ 0%{ background-position:100% 0; } 100%{ background-position:0 0; } }

/* 空态/错态：图标 + 说明 + 操作按钮（CTA/重试）；置于 td[colspan] 或块级容器内 */
.st-state{ display:flex; flex-direction:column; align-items:center; justify-content:center;
  gap:10px; padding:32px 16px; text-align:center; color:var(--muted); font-size:13px; line-height:1.6; }
.st-state .st-ico{ font-size:28px; line-height:1; }
.st-state .st-msg{ max-width:440px; }
.st-actions{ display:flex; gap:10px; flex-wrap:wrap; justify-content:center; }
.st-state.st-error .st-msg{ color:var(--up); }
/* 样例预览卡（GROW-01 纯前端预览、不落库）：置于空态容器内 */
.sample-preview{ width:100%; max-width:720px; margin:0 auto; padding:16px; text-align:left;
  border:1px dashed #c7d2e0; border-radius:10px; background:#f8fafc; font-size:13px; }
.sample-preview .sp-head{ display:flex; justify-content:space-between; align-items:center; margin-bottom:8px; }
.sample-preview .sp-totals{ color:var(--muted); margin-bottom:10px; }
.sample-preview .sp-block{ margin:8px 0; }
.sample-preview .sp-row{ display:flex; justify-content:space-between; align-items:center;
  padding:5px 0; border-bottom:1px solid #eff2f6; }
.sample-preview .sp-block .sp-row i.muted{ font-style:normal; }
.sample-preview .sp-tip{ margin-top:10px; color:var(--muted); font-size:12px; }

/* ===== 需求4：移动端银行理财列表——名称不挤数值列 =====
   保留横向滚动大表；数值列固定 min-width 右对齐（不随名称长度抖动），
   名称列相对屏宽截断、字号略小于数值列使数值更突出。 */
@media (max-width:760px){
  .cat-tbl td.num{ min-width:72px; }
  .cat-tbl .wd-name,.cat-tbl .pd-name-link{ max-width:34vw; font-size:11.5px; }
}

/* ===== 消息中心（20260917：右上角铃铛 → 未读角标 + 消息列表面板） ===== */
.req{ color:var(--up); font-style:normal; }
.bell-wrap{ position:relative; }
.msg-panel{ position:absolute; top:calc(100% + 10px); right:-6px;
  width:min(380px, 94vw); background:#fff; border:1px solid var(--line,#d0d5dd);
  border-radius:12px; box-shadow:0 12px 32px rgba(15,23,42,.14); z-index:60;
  overflow:hidden; }
.msg-panel:not([hidden]){ display:flex; flex-direction:column; }
.msg-panel-head{ display:flex; justify-content:space-between; align-items:center;
  gap:8px; padding:10px 12px; border-bottom:1px solid var(--line,#eef2f6); }
.msg-panel-title{ font-weight:700; font-size:14px; }
.msg-ops{ display:flex; gap:6px; }
.msg-list{ max-height:min(420px, 58vh); overflow-y:auto; }
.msg-item{ display:flex; gap:9px; align-items:flex-start; padding:10px 12px;
  border-bottom:1px solid #f0f3f7; cursor:pointer; position:relative; }
.msg-item:hover{ background:var(--bg-soft,#f6f8fa); }
.msg-item.unread{ background:#f4f8ff; }
.msg-item .mi-icon{ font-size:16px; line-height:1.4; flex:none; }
.msg-item .mi-main{ flex:1; min-width:0; }
.msg-item .mi-title{ font-size:13px; font-weight:700; color:var(--text,#111827); }
.msg-item.read .mi-title{ font-weight:400; color:#4b5563; }
.msg-item .mi-sum{ font-size:12px; color:#6b7280; margin-top:2px; line-height:1.5;
  display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden; }
.msg-item .mi-time{ font-size:11px; color:#9ca3af; margin-top:4px; }
.msg-item .mi-dot{ width:7px; height:7px; border-radius:50%; background:var(--primary,#0066cc);
  flex:none; margin-top:6px; }
.msg-item.read .mi-dot{ display:none; }
.msg-item .mi-del{ display:none; border:0; background:none; color:#9ca3af; cursor:pointer;
  font-size:13px; padding:2px 4px; border-radius:6px; }
.msg-item:hover .mi-del{ display:inline; }
.msg-item .mi-del:hover{ color:var(--up,#c0392b); background:#fdecea; }
.msg-empty,.msg-loading{ padding:30px 12px; text-align:center; color:var(--muted,#9ca3af); font-size:13px; }
@media (max-width:760px){
  .msg-panel{ right:-4px; width:min(92vw, 360px); }
}

/* 区间数据概览：横排自适应小盒，标签与值同行，外框与年化卡统一（2026-09-18 详情页优化） */
#pd-overview{display:flex;flex-wrap:wrap;gap:8px;}
#pd-overview .cell{flex:0 0 auto;display:flex;align-items:baseline;gap:6px;padding:6px 12px;background:#fff;border-radius:8px;}
#pd-overview .cell .k{font-size:12px;}
#pd-overview .cell .v{font-size:13px;font-weight:600;margin-top:0;}
/* 详情页指标卡：数值与区间数据概览同字号(13px/600)，万收/年化按正负着色（2026-09-18） */
#pd-cards .card-value{font-size:13px;font-weight:600;letter-spacing:-.2px;line-height:1.3;}
#pd-cards .card-value.up{color:var(--up);}
#pd-cards .card-value.down{color:var(--down);}
/* 风险指标组（最大回撤/年化波动率/夏普）：display:contents 让三卡直接参与 #pd-cards 栅格 →
   与其余指标卡同宽、自动横向并排；桌面 auto-fit 多列 / 手机 4 列均自适配，无需另写断点（20261006） */
#pd-cards #pd-risk-cards{ display:contents; }

/* 功能「试运行」徽标（签到积分/邀请小队；日期文案后端 trial 字段下发，过期自动隐藏，20261006） */
.trial-badge{display:inline-block;vertical-align:middle;margin-left:10px;padding:2px 10px;border-radius:999px;
  font-size:11.5px;font-weight:600;letter-spacing:.3px;white-space:nowrap;
  background:var(--primary-soft);color:var(--primary);border:1px solid var(--line);}

/* ===== 持仓明细移动端：表格转卡片式布局 ===== */
@media (max-width:760px){
  /* 隐藏表头 */
  #hold-table thead, #bank-summary-table thead{ display:none; }
  /* 容器铺满视口且不被内容最小宽撑破 */
  #hold-table, #hold-table tbody, #hold-table tr,
  #bank-summary-table, #bank-summary-table tbody, #bank-summary-table tr{
    width:100%; max-width:100%; min-width:0;
  }
  /* ===== 持仓产品卡片：卡头(名称+类型徽标) → 3列数据网格 → 底部指标条 ===== */
  #hold-table tr{
    display:grid;
    grid-template-columns:repeat(3,minmax(0,1fr));
    column-gap:10px; row-gap:6px;
    background:#fff; border-radius:14px; margin-bottom:10px; padding:14px 16px;
    box-shadow:0 1px 3px rgba(0,0,0,0.04);
  }
  /* 产品单元格 display:contents → 其子项(.ph 卡头 / .hold-inc 指标条)直接进入卡片网格 */
  #hold-table td:first-child{ display:contents; }
  #hold-table .ph{
    grid-column:1/3; grid-row:1;
    display:flex; align-items:center; flex-wrap:wrap; gap:4px;
    font-size:15.5px; font-weight:700; color:var(--text); min-width:0;
  }
  #hold-table .ph .badge{ font-weight:600; margin:0; }
  /* 类型徽标：卡头右侧 */
  #hold-table td:nth-child(2){
    grid-column:3/4; grid-row:1; justify-self:end; align-self:center;
    display:flex; padding:0; border:none;
  }
  #hold-table td:nth-child(2)::before{ display:none; }
  #hold-table td:nth-child(2) .badge{ margin:0; }
  /* 其余数据单元格：label 在上 / value 在下，左对齐（操作列 td:last-child 单独处理） */
  #hold-table td:not(:first-child):not(:nth-child(2)):not(:last-child){
    display:flex; flex-direction:column; align-items:flex-start; justify-content:center;
    border:none; padding:5px 0; text-align:left; min-width:0; overflow:hidden;
    font-size:14px; font-weight:600; color:var(--text); font-variant-numeric:tabular-nums;
    white-space:normal; overflow-wrap:anywhere; word-break:break-word;
  }
  #hold-table td:not(:first-child):not(:nth-child(2)):not(:last-child)::before{
    content:attr(data-label); font-size:11px; color:var(--muted); font-weight:400;
    margin-bottom:2px; white-space:nowrap;
  }
  /* 收益颜色类恢复：上一条规则的 color:var(--text) 优先级高于全局 .up/.down，需同特异性覆盖 */
  #hold-table td:not(:first-child):not(:nth-child(2)):not(:last-child).up{ color:var(--up); }
  #hold-table td:not(:first-child):not(:nth-child(2)):not(:last-child).down{ color:var(--down); }
  /* 份额/成本/市值 → 第2行 */
  #hold-table td:nth-child(4){ grid-column:1; grid-row:2; }
  #hold-table td:nth-child(5){ grid-column:2; grid-row:2; }
  #hold-table td:nth-child(6){ grid-column:3; grid-row:2; }
  /* 盈亏/盈亏%/当日收益 → 第3行 */
  #hold-table td:nth-child(7){ grid-column:1; grid-row:3; }
  #hold-table td:nth-child(8){ grid-column:2; grid-row:3; }
  #hold-table td:nth-child(10){ grid-column:3; grid-row:3; }
  /* 次级信息行：银行/年化/最新净值 → 第4行，细字 */
  #hold-table td:nth-child(3){ grid-column:1; grid-row:4; }
  #hold-table td:nth-child(9){ grid-column:2; grid-row:4; }
  #hold-table td:nth-child(11){ grid-column:3; grid-row:4; }
  #hold-table td:nth-child(3),
  #hold-table td:nth-child(9),
  #hold-table td:nth-child(11){ font-size:13px; }
  /* 底部指标条（当日万收/7日均/14日年化…）+ 操作按钮 同处卡片第5行：标签居左、按钮居右垂直居中 */
  #hold-table td:first-child .hold-inc{
    grid-column:1/3; grid-row:5; align-self:center;
    display:flex; flex-wrap:wrap; gap:4px; margin:4px 0 0 0;
  }
  #hold-table td:first-child .hold-inc i{
    font-style:normal; font-size:11px; color:var(--muted); background:#f2f2f7;
    padding:2px 6px; border-radius:4px;
  }
  /* 网格内细小子标签（持有/已实现、收益日期、净值日期）去胶囊化 */
  #hold-table td:nth-child(7) .hold-inc,
  #hold-table td:nth-child(10) .hold-inc,
  #hold-table td:nth-child(11) .hold-inc{ margin-top:2px; }
  #hold-table td:nth-child(7) .hold-inc i,
  #hold-table td:nth-child(10) .hold-inc i,
  #hold-table td:nth-child(11) .hold-inc i{
    font-style:normal; font-size:10px; color:var(--muted); background:none; border:none; padding:0;
  }
  /* 操作按钮 → 与底部指标条同处第5行，居右垂直居中（标签居左，避免整行留白下沉） */
  #hold-table td:last-child{
    grid-column:3/4; grid-row:5; justify-self:end; align-self:center;
    display:flex; gap:8px; padding:0; border:none; margin:4px 0 0 0; white-space:nowrap;
  }
  #hold-table td:last-child::before{ display:none; }
  /* ===== 按银行汇总卡片：银行名卡头 + 5列指标网格 ===== */
  #bank-summary-table tr{
    display:grid; grid-template-columns:repeat(5,minmax(0,1fr));
    column-gap:6px; row-gap:6px;
    background:#fff; border-radius:14px; margin-bottom:10px; padding:12px 16px 12px;
    box-shadow:0 1px 3px rgba(0,0,0,0.04);
  }
  #bank-summary-table td:first-child{
    grid-column:1/-1; grid-row:1;
    display:block; text-align:left; font-size:15px; font-weight:600; color:var(--text);
    padding-bottom:8px; border-bottom:0.5px solid #f2f2f7; margin-bottom:2px;
  }
  #bank-summary-table td:first-child::before{ display:none; }
  #bank-summary-table td:not(:first-child){
    display:flex; flex-direction:column; align-items:center; justify-content:center;
    border:none; padding:6px 0; text-align:center; min-width:0; overflow:hidden;
    font-size:12.5px; font-weight:600; color:var(--text); font-variant-numeric:tabular-nums;
    white-space:normal; overflow-wrap:anywhere; word-break:break-word;
  }
  /* 收益颜色类恢复（同上） */
  #bank-summary-table td:not(:first-child).up{ color:var(--up); }
  #bank-summary-table td:not(:first-child).down{ color:var(--down); }
  #bank-summary-table td:not(:first-child)::before{
    content:attr(data-label); font-size:10px; color:var(--muted); font-weight:400;
    margin-bottom:2px; white-space:normal; line-height:1.3; text-align:center;
  }
}

/* ===== 银行理财页面移动端适配 ===== */
@media (max-width:760px){
  /* 页面标题区 */
  #view-products .page-head{
    flex-direction:column;
    align-items:stretch;
    gap:12px;
  }
  #view-products .page-head h2{
    margin-bottom:0;
  }
  /* 筛选栏：纵向堆叠（胶囊格 → 搜索框 → 查询 → 统计行） */
  #view-products .cat-filter{
    flex-direction:column;
    gap:10px;
    margin-top:10px;
  }
  /* 六控件统一两排（3×2）：全部产品/我的收藏 + 销售机构/发行机构/组合筛选/全部状态 */
  #view-products .cat-modebar{
    display:grid;
    width:100%;          /* 抵消父容器 align-items:center 的收缩居中，三列等宽上下左右对齐 */
    grid-template-columns:repeat(3,1fr);
    gap:8px;
  }
  #view-products .mode-btn{
    white-space:nowrap;
    overflow:hidden;
    text-overflow:ellipsis;
    border-radius:999px;
    padding:8px 4px;
    font-size:12.5px;
    text-align:center;
    justify-content:center;   /* 基础为 inline-flex：text-align 对 flex 子项无效，必须 justify-content */
  }
  /* 六控件文字统一：值标签（全部/机构名）去粗体，与纯文本按钮同款 */
  #view-products .cat-modebar .mode-btn .mval{ font-weight:400; }
  #cp-collapse{ display:none !important; }
  /* 搜索栏：全宽 */
  #cp-q{
    width:100%;
    min-width:0 !important;
  }
  /* 查询按钮：全宽主色（设计稿形态） */
  #cp-search{ width:100%; }
  /* 收益排序下拉：占满网格单元的胶囊（与按钮同字号同内距，居中；选中长项截断省略防溢出） */
  #view-products #cp-sort{
    width:100%;
    border-radius:999px;
    padding:8px 4px;
    font-size:12.5px;
    text-align:center;
    text-align-last:center;
    white-space:nowrap;
    overflow:hidden;
    text-overflow:ellipsis;
  }
}
/* ===== 银行理财手机端卡片流（20260918k，对齐设计稿） ===== */
#cp-cards{ display:none; }
#view-products .cat-modebar .cp-mobile-tab{ display:none; }  /* tab 仅手机端显示（现居胶囊格内） */
@media (max-width:760px){
  /* tab 与筛选胶囊同格：激活=品牌蓝底白字，未激活=白底描边 */
  #view-products .cat-modebar .cp-mobile-tab{
    display:block;
    border:1px solid var(--line);
    border-radius:999px;
    padding:8px 4px;
    font-size:12.5px;
  }
  #view-products .cat-modebar .cp-mobile-tab.active{
    background:var(--primary);
    border-color:var(--primary);
    color:#fff;
    font-weight:600;
  }
  /* 桌面态元素让位：信息条/收藏按钮（收藏已由 tab 承接）；统计卡与组合筛选保留（设计稿形态） */
  #view-products .cat-infobar{ display:none; }
  #cp-btn-fav{ display:none !important; }
  /* 统计卡：三列紧凑（产品总数 / 最高万收 / 平均万收） */
  #view-products .cat-summary{ display:grid; grid-template-columns:repeat(3,1fr); gap:8px; }
  #view-products .scard{ padding:10px; }
  #view-products .scard .num{ font-size:16px; }
  /* 表格让位卡片流 */
  #view-products #cp-tbl{ display:none !important; }
  #cp-cards{ display:block; }
  /* 产品卡片：名称+标签 / 机构 / 3×2 指标格 / 查看详情 */
  .cpc{
    background:#fff;
    border-radius:14px;
    margin-bottom:10px;
    padding:14px 16px;
    box-shadow:0 1px 3px rgba(0,0,0,.04);
  }
  .cpc-head{ display:flex; align-items:center; gap:8px; }
  .cpc-name{
    flex:1; min-width:0;
    font-size:15px; font-weight:600; color:var(--text);
    text-decoration:none;
    overflow:hidden; text-overflow:ellipsis; white-space:nowrap;
  }
  .cpc-tags{ display:flex; gap:4px; flex-shrink:0; }
  .cpc-type{
    font-style:normal; font-size:11px;
    color:var(--primary); border:1px solid var(--primary);
    border-radius:4px; padding:1px 6px;
  }
  .cpc-risk{
    font-style:normal; font-size:11px; color:#fff;
    background:#8e8e93; border-radius:4px; padding:1px 6px;
  }
  /* R标配色规范：与桌面 .badge.risk 全局统一 */
  .cpc-risk.r1{background:#1a7f37;} .cpc-risk.r2{background:#0066cc;} .cpc-risk.r3{background:#e8935b;} .cpc-risk.r4{background:#ea580c;} .cpc-risk.r5{background:#cc2f24;}
  .cpc-bank{ font-size:12px; color:var(--muted); margin-top:4px; display:inline-flex; align-items:center; gap:6px; }
  .cpc-grid{
    display:grid; grid-template-columns:repeat(3,1fr);
    gap:10px 8px; margin-top:10px; padding-top:10px;
    border-top:.5px solid #f2f2f7;
  }
  .cpc-m label{ display:block; font-size:11px; color:var(--muted); }
  .cpc-m b{ font-size:15px; font-weight:600; font-variant-numeric:tabular-nums; }
  .cpc-m .up{ color:#ff3b30; }
  .cpc-m .down{ color:#34c759; }
  .cpc-foot{ display:flex; justify-content:flex-end; margin-top:10px; }
  .cpc-btn{
    font-size:13px; color:var(--primary);
    border:1px solid var(--primary); border-radius:8px;
    padding:6px 14px; text-decoration:none;
  }
  .cpc-empty{ text-align:center; padding:24px 0; font-size:13px; color:var(--muted); }
}
/* 移动端标签页按钮（20260918k 起居 .cat-modebar 网格内，桌面端隐藏见 #view-products 规则） */
.cp-mobile-tab{
  padding:8px 16px;
  font-size:13px;
  border-radius:999px;
  background:#fff;
  color:#6e6e73;
  white-space:nowrap;
  cursor:pointer;
  border:none;
}
.cp-mobile-tab.active{
  background:#0071e3;
  color:#fff;
  font-weight:600;
}

/* ===== 产品详情页移动端适配（20260918：按手机端设计稿重构） ===== */
@media (max-width:760px){
  /* 详情弹层 → 全屏（顶栏通栏，内容区左右 16px） */
  .pd-overlay{
    padding:0;
  }
  .pd-box{
    border-radius:0;
    min-height:100vh;
    min-height:100dvh;
    box-shadow:none;
    padding:0 16px 16px;
  }
  /* 手机顶栏：✕ / 产品详情 / ☆收藏（sticky 吸顶） */
  .pd-mhead{
    display:flex;
    align-items:center;
    justify-content:space-between;
    position:sticky;
    top:0;
    z-index:20;
    background:#fff;
    padding:12px 6px 10px;
    margin:0 -16px 10px;
    border-bottom:0.5px solid #f2f2f7;
  }
  .pmh-title{font-size:16px;font-weight:600;color:var(--text);}
  .pmh-btn{
    border:none;background:none;font-size:18px;color:var(--text);
    padding:4px 10px;cursor:pointer;border-radius:8px;line-height:1.2;
  }
  .pmh-btn:active{background:var(--bg);}
  /* 顶部信息区：名称/副题 + 官方/PK 紧凑胶囊行
     （✕/申购/赎回/☆ 由手机顶栏与底部操作栏承接，避免按钮挤爆窄屏） */
  .pd-top{
    flex-direction:column;
    gap:10px;
    margin-bottom:10px;
  }
  .pd-top h3{
    font-size:19px;
    line-height:1.35;
  }
  .pd-sub{
    font-size:12px;
    margin-top:4px;
    word-break:break-all;
  }
  #pd-close, #pd-buy, #pd-sell, #pd-fav{ display:none !important; }
  .pd-top-btns{
    display:flex;
    flex-wrap:wrap;
    gap:8px;
  }
  .pd-meta{
    font-size:11.5px;
    margin:8px 0 4px;
  }
  /* 基本信息徽标：彩色语义配色（发行蓝/代销橙/持有紫/风险粉/确认紫/成立绿/截止绿） */
  .pd-basic{
    display:block;
    background:none;
    border-radius:0;
    padding:0;
    margin:0 0 4px;
  }
  .pd-badge{ font-size:11px; padding:3px 8px; border-radius:999px; }
  .pd-badge.iss{ background:#e8f1fd; border-color:#c9dcf5; color:#1a66c2; }
  .pd-badge.agt{ background:#fff3e0; border-color:#ffd9a8; color:#c26a1a; }
  .pd-badge.term{ background:#f1ecfd; border-color:#d9ccf8; color:#6f4bd8; }
  .pd-badge.risk{ background:#fde8ee; border-color:#f8c6d6; color:#c2305a; }
  .pd-badge.cf{ background:#efe6fd; border-color:#ddc9f7; color:#7a3fd1; }
  .pd-badge.est, .pd-badge.dl{ background:#e6f7ee; border-color:#bfe8d2; color:#1f8a54; }
  .pd-bench{ font-size:11.5px; margin-top:8px; line-height:1.5; }
  /* 「最新表现」小节头：标题 + 红字日期 + PK 同系列按钮 */
  .pd-msec{
    display:block;
    margin:2px 0 10px;
  }
  .pd-msec-h{
    display:flex;
    align-items:center;
    gap:8px;
  }
  .pd-msec-h b{ font-size:15px; font-weight:700; color:var(--text); }
  .pd-msec-date{ font-size:12px; color:#e0353a; font-weight:600; }
  .pd-msec-h .btn{ margin-left:auto; padding:4px 10px; font-size:11.5px; }
  /* 指标卡 → 2×4 紧凑网格：隐藏分组标签与 累计净值/成立日期/3月年化；成立来年化黄底高亮 */
  #pd-cards{
    grid-template-columns:repeat(4,1fr);
    gap:6px;
    margin-bottom:14px;
  }
  #pd-cards .pd-cg{ display:none; }
  #pd-cards .card{
    padding:10px 4px;
    border-radius:10px;
    text-align:center;
  }
  #pd-cards .card-label{ font-size:10.5px; }
  #pd-cards .card-value{ font-size:14px; }
  #pd-cards .card-sub{ display:none; }
  #pd-cards .card[data-k="累计净值"],
  #pd-cards .card[data-k="成立日期"],
  #pd-cards .card[data-k="3月年化"]{ display:none; }
  #pd-cards .card[data-k="成立来年化"]{ background:#fff7d1; border-color:#f0d96a; }
  /* 走势/概览/明细卡片：标题红竖条 */
  .pd-panel{
    border-radius:14px;
    padding:14px 12px;
    margin-bottom:12px;
  }
  .pd-panel h3{
    font-size:15px;
    display:flex;
    align-items:center;
  }
  .pd-panel h3::before{
    content:'';
    display:inline-block;
    width:3px;
    height:14px;
    background:#e0353a;
    border-radius:2px;
    margin-right:8px;
    flex:0 0 auto;
  }
  /* 时间范围按钮横向滚动 */
  .pd-range{
    overflow-x:auto;
    -webkit-overflow-scrolling:touch;
    padding-bottom:4px;
  }
  .pd-range .rbtn{
    white-space:nowrap;
    flex-shrink:0;
  }
  /* 序列切换胶囊（单选）：未选浅灰 / 选中白底蓝字蓝边 */
  .pd-series:not([hidden]){
    display:flex;
    gap:6px;
    margin:0 0 8px;
    overflow-x:auto;
    -webkit-overflow-scrolling:touch;
    padding:2px 0 4px;
  }
  .pd-series .sbtn{
    flex:1;
    white-space:nowrap;
    border:1px solid transparent;
    background:#f2f2f7;
    color:#3a3a3c;
    border-radius:999px;
    padding:5px 4px;
    font-size:11.5px;
    cursor:pointer;
    text-align:center;
  }
  .pd-series .sbtn.active{
    background:#fff;
    color:var(--primary);
    border-color:var(--primary);
    font-weight:600;
  }
  .pd-chart{ height:220px; min-height:220px; }
  /* 区间数据概览 → kv 纵行（label 左 / value 右加粗，行间细分隔线） */
  #pd-overview{
    display:block;
    overflow:visible;
    padding:0;
  }
  #pd-overview .cell{
    display:flex;
    justify-content:space-between;
    align-items:center;
    background:none;
    border:none;
    border-radius:0;
    padding:9px 2px;
    border-bottom:0.5px solid #f2f2f7;
  }
  #pd-overview .cell:last-child{ border-bottom:none; }
  #pd-overview .cell .k{ font-size:12.5px; color:var(--muted); }
  #pd-overview .cell .v{ font-size:13.5px; font-weight:600; color:var(--text); margin-top:0; }
  /* 数据明细 → 日期卡片：日期作卡头 + 6 指标 2列×3行（label左/value右，隐藏 1月/3月/成立来年化列） */
  #pd-table thead{ display:none; }
  #pd-table, #pd-table tbody{
    display:block;
    width:100%;
    max-width:100%;
    min-width:0;
  }
  /* 1fr 轨道无法在 nowrap 内容下收缩（自动最小值=内容宽），会把日期卡片撑到数倍视口宽 → 必须 minmax(0,1fr) 均分视口宽度 */
  #pd-table tr{
    display:grid;
    grid-template-columns:repeat(2,minmax(0,1fr));
    column-gap:20px;
    min-width:0;
    background:#fff;
    border:1px solid var(--line-soft);
    border-radius:12px;
    margin-bottom:10px;
    padding:12px 14px;
  }
  #pd-table td{
    display:flex;
    justify-content:space-between;
    align-items:baseline;
    gap:8px;
    min-width:0;
    padding:7px 0;
    border:none;
    font-size:13.5px;
    font-weight:600;
    color:var(--text);
    font-variant-numeric:tabular-nums;
  }
  #pd-table td:first-child{
    grid-column:1 / -1;
    text-align:left;
    font-size:13.5px;
    font-weight:700;
    color:var(--text);
    border-bottom:0.5px solid #f2f2f7;
    padding:0 0 8px;
    margin-bottom:2px;
  }
  #pd-table td::before{
    content:attr(data-label);
    font-size:12px;
    color:var(--muted);
    font-weight:400;
    white-space:nowrap;
  }
  #pd-table td:first-child::before{ display:none; }
  #pd-table td[colspan]{ grid-column:1 / -1; display:block; text-align:center; }
  #pd-table td:nth-child(8),
  #pd-table td:nth-child(9),
  #pd-table td:nth-child(10){ display:none; }
  /* 红涨绿跌配色 */
  #pd-cards .up, #pd-table .up{ color:#ff3b30 !important; }
  #pd-cards .down, #pd-table .down{ color:#34c759 !important; }
}
/* 产品详情页移动端：底部操作栏（桌面端隐藏） */
.pd-mobile-actions{
  display:none;
}
@media (max-width:760px){
  .pd-mobile-actions{
    display:flex;
    gap:10px;
    position:sticky;
    bottom:0;
    background:#fff;
    border-top:1px solid var(--line);
    padding:12px 16px;
    margin:12px -16px -16px;
  }
  .pd-mobile-actions .btn{
    flex:1;
    padding:12px;
    font-size:15px;
    border-radius:10px;
    text-align:center;
  }
}
/* ===== 录入交易优化稿（对比展示_录入交易_桌面与移动端） ===== */
.tx-hd{ font-size:12px; color:var(--muted); }
/* 方向大 segment */
.kind-seg{ display:grid; grid-template-columns:1fr 1fr; background:#e5e5ea; border-radius:12px; padding:3px; margin-bottom:16px; }
.kind-seg button{ border:0; background:none; padding:11px; border-radius:9px; font-size:14.5px; font-weight:600; color:var(--muted); cursor:pointer; transition:all .15s; }
.kind-seg button.active{ background:#fff; color:var(--primary); box-shadow:0 1px 3px rgba(0,0,0,.1); }
.kind-seg button.active.sell{ color:var(--down); }
/* 区块标题 */
.sect{ font-size:12px; font-weight:600; color:var(--muted); letter-spacing:.5px; margin:14px 0 8px; }
#view-trade .form .sect:first-of-type{ margin-top:0; }
/* 产品类型 + 搜索行 */
.tx-type-row{ display:grid; grid-template-columns:132px 1fr; gap:10px; align-items:start; }
/* 已选产品卡 */
.pick{ border:1.5px solid var(--primary); background:var(--primary-soft); border-radius:12px; padding:12px 14px; display:flex; align-items:center; gap:12px; margin-bottom:2px; }
.pick .p-ic{ width:38px; height:38px; border-radius:10px; background:#eaf2ff; color:var(--primary); display:flex; align-items:center; justify-content:center; font-weight:700; font-size:13px; flex-shrink:0; }
.pick .p-info{ flex:1; min-width:0; }
.pick .p-nm{ font-size:14.5px; font-weight:700; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.pick .p-meta{ font-size:11.5px; color:var(--muted); margin-top:2px; }
.pick .p-chg{ font-size:11.5px; color:var(--muted); text-align:right; flex-shrink:0; }
.pick .p-chg b{ display:block; font-size:13px; color:var(--text); font-variant-numeric:tabular-nums; }
/* 搜索输入（含联想菜单容器） */
.search-input{ display:flex; align-items:center; gap:8px; border:1.5px solid var(--line); border-radius:12px; padding:10px 14px; background:#fff; }
.search-input:focus-within{ border-color:var(--primary); box-shadow:0 0 0 3px var(--primary-soft); }
.search-input svg{ flex-shrink:0; }
.search-input input{ flex:1; min-width:0; border:0; outline:0; background:transparent; font-size:14px; padding:0; }
.search-input input:focus{ border:0; box-shadow:none; }
/* 金额大输入 */
.amt-box{ background:#fafbfc; border:1px solid #eef0f3; border-radius:12px; padding:14px 16px; }
.amt-box .a-lab{ font-size:12px; color:var(--muted); }
.amt-row{ display:flex; align-items:baseline; gap:8px; margin-top:4px; }
.amt-row .yen{ font-size:22px; font-weight:600; color:var(--muted); }
.amt-row input{ flex:1; min-width:0; width:auto; border:0; background:transparent; font-size:34px; font-weight:800; letter-spacing:-.5px; outline:0; color:var(--text); padding:0; }
.amt-row input:focus{ border:0; box-shadow:none; }
/* 净值/份额/手续费 三列联动 */
.calc{ display:grid; grid-template-columns:1fr 1fr 1fr; gap:10px; margin-top:10px; }
.calc .ci{ background:#fff; border:1px solid var(--line); border-radius:10px; padding:10px 12px; }
.calc .ci.auto{ background:var(--bg); border-style:dashed; }
.calc .ci .a{ font-size:11px; color:var(--muted); }
.calc .ci input{ width:100%; border:0; background:transparent; font-size:15px; font-weight:700; margin-top:3px; outline:0; padding:0; color:var(--text); }
.calc .ci input:focus{ border:0; box-shadow:none; }
.calc .ci .tag{ font-size:10px; color:var(--muted); margin-top:2px; }
.calc .ci .f-nav-hint{ margin-top:2px; }
/* 更多选项折叠 */
details.adv{ margin-top:14px; border-top:1px solid var(--line-soft); padding-top:12px; }
details.adv summary{ cursor:pointer; font-size:12.5px; color:var(--primary); font-weight:600; list-style:none; }
details.adv summary::-webkit-details-marker{ display:none; }
details.adv summary::after{ content:" 展开"; font-size:11px; }
details.adv[open] summary::after{ content:" 收起"; }
.adv-body{ margin-top:12px; display:flex; flex-direction:column; gap:10px; }
/* 提交条 */
.submit-bar{ display:flex; gap:10px; align-items:center; margin-top:16px; padding-top:14px; border-top:1px solid var(--line-soft); flex-wrap:wrap; }
.submit-bar .sum{ flex:1; min-width:150px; font-size:12.5px; color:var(--muted); text-align:right; }
.submit-bar .sum b{ color:var(--text); font-size:14px; }
#tx-submit{ padding:12px 28px; font-size:15px; border-radius:11px; }
/* 近期交易卡片 */
.tx-card{ display:flex; align-items:center; gap:12px; padding:12px 0; border-bottom:1px solid var(--line-soft); }
.tx-card:last-child{ border-bottom:0; }
.tx-ic{ width:36px; height:36px; border-radius:10px; display:flex; align-items:center; justify-content:center; font-size:11px; font-weight:700; flex-shrink:0; }
.tx-ic.buy{ background:#fdecec; color:var(--up); }
.tx-ic.sell{ background:#e6f6ee; color:var(--down); }
.tx-info{ flex:1; min-width:0; }
.tx-info .nm{ font-size:13.5px; font-weight:600; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.tx-info .meta{ font-size:11px; color:var(--muted); margin-top:2px; }
.tx-amt{ text-align:right; flex-shrink:0; }
.tx-amt .v{ font-size:14px; font-weight:700; font-variant-numeric:tabular-nums; }
.tx-amt .s{ font-size:10.5px; color:var(--muted); }
.tx-ops{ display:flex; gap:4px; flex-shrink:0; }
.tx-ops .btn{ padding:4px 8px; font-size:11px; }
/* 分页器 */
.pager{ display:flex; align-items:center; justify-content:space-between; gap:10px; margin-top:12px; padding-top:12px; border-top:1px solid var(--line-soft); }
.pager .pg-total{ font-size:11.5px; color:var(--muted); }
.pager .pg-btns{ display:flex; align-items:center; gap:4px; flex-wrap:wrap; }
.pg-btn{ border:1px solid var(--line); background:#fff; color:var(--text); border-radius:8px; min-width:30px; height:30px; padding:0 10px; font-size:12.5px; font-weight:600; cursor:pointer; display:inline-flex; align-items:center; justify-content:center; }
.pg-btn:hover:not(:disabled):not(.active){ border-color:var(--primary); color:var(--primary); }
.pg-btn:disabled{ opacity:.4; cursor:default; }
.pg-btn.active{ background:var(--primary); border-color:var(--primary); color:#fff; }
.pg-arrow{ padding:0; min-width:30px; }
/* 移动端适配（760px 断点） */
@media (max-width:760px){
  #view-trade .tx-type-row{ grid-template-columns:1fr; }
  #view-trade .calc{ grid-template-columns:1fr; gap:8px; }
  #view-trade .amt-row input{ font-size:28px; }
  #view-trade .submit-bar{ flex-direction:column; align-items:stretch; }
  #view-trade .submit-bar .sum{ text-align:left; }
  #view-trade .submit-bar .btn{ width:100%; }
  #view-trade .kind-seg button{ padding:10px; font-size:14px; }
  #view-trade .tx-ic{ width:32px; height:32px; font-size:10px; }
  #view-trade .tx-ops{ flex-direction:column; }
}

/* ================= 首次进入公告弹窗（v2.0，20260921） =================
   结构/样式迁自设计稿 _archive/设计稿/首次进入公告弹窗.html，统一加 notice- 前缀避免污染现有类名。
   三段式布局：头(.notice-top)/体(.notice-body 可滚动)/脚(.notice-foot 固定)，矮视口下「我知道了」始终可见。
   交互逻辑见 js/notice.js：key=notice_ack_v2_20260921（含版本号，升级公告换 key 即重新弹出）。 */
.notice-overlay{position:fixed;inset:0;background:rgba(0,0,0,.42);display:flex;align-items:center;justify-content:center;z-index:120;padding:20px;opacity:0;pointer-events:none;transition:opacity .25s ease;}
.notice-overlay.show{opacity:1;pointer-events:auto;}
.notice-modal{background:#fff;border-radius:20px;width:100%;max-width:380px;display:flex;flex-direction:column;max-height:calc(100dvh - 40px);overflow:hidden;transform:translateY(16px) scale(.96);transition:transform .28s cubic-bezier(.2,.8,.25,1);box-shadow:0 24px 64px rgba(0,0,0,.24);}
.notice-overlay.show .notice-modal{transform:translateY(0) scale(1);}
.notice-top{flex-shrink:0;padding:20px 26px 0;text-align:center;}
.notice-body{flex:1;min-height:0;overflow-y:auto;-webkit-overflow-scrolling:touch;padding:12px 26px 4px;}
.notice-foot{flex-shrink:0;padding:12px 26px 20px;}
.notice-badge{display:inline-flex;align-items:center;gap:6px;font-size:11px;font-weight:600;color:#0066cc;background:#eaf2ff;border-radius:999px;padding:4px 12px;}
.notice-icon{width:48px;height:48px;border-radius:14px;background:linear-gradient(135deg,#0071e3,#4a9af5);margin:10px auto 0;display:flex;align-items:center;justify-content:center;}
.notice-modal h2{font-size:19px;font-weight:700;margin-top:12px;letter-spacing:-.2px;color:#1c1c1e;}
.notice-lead{font-size:12.5px;color:#8e8e93;margin-top:2px;}
.notice-feat{display:flex;gap:10px;padding:7px 0;border-bottom:1px solid #f2f2f4;}
.notice-feat:last-child{border-bottom:0;}
.notice-feat-ic{width:32px;height:32px;border-radius:9px;background:#f2f2f7;display:flex;align-items:center;justify-content:center;flex-shrink:0;}
.notice-feat-t{font-size:13.5px;font-weight:600;color:#1c1c1e;}
.notice-feat-d{font-size:12px;color:#8e8e93;line-height:1.55;margin-top:2px;}
.notice-btn-primary{width:100%;border:0;background:#0071e3;color:#fff;border-radius:12px;padding:13px;font-size:15px;font-weight:600;cursor:pointer;font-family:inherit;transition:background .15s;}
.notice-btn-primary:hover{background:#0066cc;}
.notice-note{text-align:center;font-size:11px;color:#8e8e93;margin-top:8px;}

/* 支持与联系卡片 */
.notice-support{margin-top:6px;background:#f7f7fa;border:1px solid #efeff1;border-radius:14px;padding:10px 12px;}
.notice-support-hd{display:flex;align-items:center;justify-content:space-between;margin-bottom:6px;}
.notice-support-title{font-size:12px;font-weight:600;color:#3a3a3c;}
.notice-support-tag{font-size:10.5px;font-weight:600;color:#0066cc;background:#eaf2ff;border-radius:999px;padding:3px 9px;}
.notice-sup-sub{margin-top:6px;background:#fff;border:1px solid #efeff1;border-radius:10px;padding:8px 10px;}
.notice-sup-sub-hd{display:flex;align-items:center;gap:9px;padding:2px 0 6px;}
.notice-sup-sub-grid{display:flex;flex-direction:column;gap:8px;}
.notice-sup-list{display:flex;flex-direction:column;}
.notice-sup-row{display:flex;align-items:center;gap:9px;width:100%;border:0;background:transparent;padding:7px 0;font-family:inherit;text-align:left;cursor:pointer;}
.notice-sup-row-static{cursor:default;}
.notice-sup-row+.notice-sup-row{border-top:1px solid #efeff1;}
.notice-sup-ic{width:28px;height:28px;border-radius:8px;background:#f2f2f7;display:flex;align-items:center;justify-content:center;flex-shrink:0;}
.notice-sup-tx{flex:1;min-width:0;}
.notice-sup-tx b{display:block;font-size:12.5px;font-weight:600;color:#1c1c1e;letter-spacing:-.1px;}
.notice-sup-tx small{display:block;font-size:10.5px;color:#8e8e93;margin-top:1px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.notice-sup-go{flex-shrink:0;color:#c7c7cc;}
.notice-sup-copy{border:0;background:#0071e3;color:#fff;font-size:10.5px;font-weight:600;border-radius:7px;padding:4px 9px;font-family:inherit;cursor:pointer;flex-shrink:0;}
.notice-sup-copy:hover{background:#0066cc;}
.notice-sup-qr{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;background:#fff;border:1px dashed #dcdce0;border-radius:12px;padding:6px;text-align:center;font-family:inherit;}
.notice-sup-qr img{width:100%;height:auto;display:block;border-radius:8px;}
.notice-sup-qr-t{font-size:11.5px;font-weight:600;color:#1c1c1e;margin-top:2px;}
.notice-sup-qr-d{font-size:10px;color:#8e8e93;}

/* 公告弹窗移动端（760px 断点）：窄屏左右留白收紧、联系卡片不横向溢出 */
@media (max-width:760px){
  .notice-overlay{padding:12px;}
  .notice-top,.notice-foot{padding-left:18px;padding-right:18px;}
  .notice-body{padding-left:18px;padding-right:18px;}
}

/* ==================== 任务调度改版（20260922）：看板 + 分组列表 ==================== */
/* 状态徽标 */
.jsbadge{display:inline-block;font-size:10px;font-weight:700;padding:2px 9px;border-radius:10px;white-space:nowrap;}
.jsbd-ok{background:#e6f6ee;color:var(--down,#1a7f37);}
.jsbd-bad{background:#fdecec;color:var(--up,#cc2f24);}
.jsbd-run{background:var(--primary-soft,#eaf2ff);color:var(--primary,#0066cc);}
.jsbd-stop{background:#fff3e0;color:#b26a00;}
.jsbd-ner{background:var(--bg,#f2f2f7);color:var(--muted,#636368);}
/* 看板任务 chips */
.jschip{border:1.5px solid var(--line,#d1d1d6);background:var(--panel,#fff);border-radius:12px;padding:7px 11px;cursor:pointer;min-width:96px;transition:all .12s;text-align:left;}
.jschip b{font-size:12px;display:block;color:var(--text,#1c1c1e);}
.jschip span{font-size:10.5px;font-weight:700;display:block;margin-top:1px;}
.jschip em{font-size:9.5px;font-style:normal;display:block;margin-top:1px;}
.jschip-on{border-color:var(--primary,#0066cc);background:var(--primary-soft,#eaf2ff);box-shadow:0 0 0 3px var(--primary-soft,#eaf2ff);}
/* 看板终端日志行 */
.jslp-line{padding:1px 2px;white-space:pre-wrap;word-break:break-all;}
.jslp-line.jslp-r{background:rgba(204,47,36,.16);border-radius:4px;padding:0 6px;margin:1px -4px;color:#fc8181;}
.jslp-line.jslp-g{color:#68d391;}
.jslp-line.jslp-t{color:#e2e8f0;}
.jslp-line.jslp-d{color:#a0aec0;}
.jslp-ts{color:#5c6a80;}
/* 分类快捷卡 */
.jscat{position:relative;background:var(--panel,#fff);border:1px solid var(--line,#e5e5ea);border-radius:12px;padding:10px 11px 9px;cursor:pointer;transition:border-color .15s;}
.jscat:hover{border-color:var(--primary,#0066cc);}
.jscat-ic{width:30px;height:30px;border-radius:9px;display:flex;align-items:center;justify-content:center;}
.jscat-num{position:absolute;top:8px;right:10px;text-align:right;}
.jscat-num b{font-size:17px;font-weight:800;display:block;line-height:1.1;font-variant-numeric:tabular-nums;}
.jscat-num i{font-style:normal;font-size:9px;font-weight:700;display:block;margin-top:1px;}
.jscat-num i.bad{color:var(--up,#cc2f24);} .jscat-num i.ok{color:var(--down,#1a7f37);} .jscat-num i.idle{color:var(--muted,#636368);}
.jscat-ct b{font-size:12.5px;font-weight:700;display:block;margin-top:6px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.jscat-ct span{font-size:9.5px;color:var(--muted,#636368);display:block;margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
/* 分组列表 */
.jsgrp{background:var(--panel,#fff);border:1px solid var(--line,#e5e5ea);border-radius:14px;margin-bottom:12px;overflow:hidden;}
.jsgrp-h{display:flex;align-items:center;gap:10px;padding:10px 13px;cursor:pointer;user-select:none;border-bottom:1px solid var(--line,#e5e5ea);}
.jsgrp-h:hover{background:#fafafc;}
.jsgrp-ic{width:26px;height:26px;border-radius:8px;display:flex;align-items:center;justify-content:center;flex:none;}
.jsgrp-gt{flex:1;min-width:0;}
.jsgrp-gt b{font-size:13px;font-weight:700;display:flex;align-items:center;gap:7px;}
.jsgrp-gt b small{font-size:10.5px;font-weight:600;color:var(--muted,#636368);background:var(--bg,#f2f2f7);border-radius:9px;padding:1px 8px;}
.jsgrp-gt span{font-size:10.5px;display:block;}
.jsgrp-stat{display:flex;gap:6px;align-items:center;flex:none;flex-wrap:wrap;justify-content:flex-end;}
.jsgrp-arr{flex:none;transition:transform .18s;color:var(--muted,#636368);}
.jsgrp-collapsed .jsgrp-arr{transform:rotate(-90deg);}
.jsgrp-collapsed .jsgrp-b{display:none;}
.jsgrp-b{padding:2px 0;}
/* 任务行 */
.jstask{display:flex;align-items:center;gap:12px;padding:9px 14px;border-bottom:1px solid #f2f3f5;transition:background .12s;flex-wrap:wrap;}
.jstask:last-child{border-bottom:none;}
.jstask:hover{background:#fafbfd;}
.jstask-fail{background:#fffafa;box-shadow:inset 3px 0 0 var(--up,#cc2f24);}
.jstask-tc{flex:1 1 260px;min-width:0;}
.jstask-n{font-size:12.5px;font-weight:600;display:flex;align-items:center;gap:7px;flex-wrap:wrap;}
.jscat-tag{font-size:9.5px;font-weight:700;border-radius:5px;padding:1px 6px;}
.jstask-m{font-size:10.5px;color:var(--muted,#636368);margin-top:2px;display:flex;gap:8px;flex-wrap:wrap;align-items:center;}
.jstask-st{flex:none;width:92px;text-align:right;}
.jstask-res{flex:none;flex:1 1 180px;min-width:0;text-align:left;}
.jstask-r1{font-size:11.5px;font-weight:600;color:var(--text,#1c1c1e);word-break:break-all;}
.jstask-next{flex:none;width:110px;font-size:10.5px;}
.jstask-ops{flex:none;display:flex;gap:5px;flex-wrap:wrap;}
/* 错误红条（默认完整展示，点击收起） */
.jserr{margin:6px 14px 8px 42px;background:#fdecec;border:1px solid #f3c4c1;border-radius:9px;padding:7px 11px;font-size:11px;display:flex;align-items:flex-start;gap:8px;cursor:pointer;}
.jserr-ic{flex:none;margin-top:1px;color:var(--up,#cc2f24);}
.jserr-tx{flex:1;color:#8f2a21;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:10.5px;word-break:break-all;line-height:1.6;}
.jserr-more{flex:none;font-size:10px;font-weight:700;color:var(--up,#cc2f24);margin-top:1px;white-space:nowrap;}
/* 行内日志面板 */
.jslog{margin:0 14px 10px 42px;border-radius:10px;overflow:hidden;border:1px solid #2d3748;background:#1a202c;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:10.5px;line-height:1.7;}
.jslog-h{display:flex;align-items:center;gap:8px;background:#232b3a;color:#cbd5e0;padding:6px 11px;font-size:10.5px;font-weight:600;}
.jslog-dot{width:8px;height:8px;border-radius:50%;background:#4a5568;}
.jslog-opt{margin-left:auto;color:#718096;font-weight:400;font-size:9.5px;}
.jslog-b{max-height:160px;overflow-y:auto;padding:7px 11px 9px;}
/* 移动端适配：单列 + 横向滚动 */
@media (max-width:760px){
  #js-ov-row{grid-template-columns:repeat(2,1fr);}
  #js-cat-row{grid-template-columns:repeat(2,1fr);}
  .jstask-tc{flex:1 1 100%;}
  .jstask-st,.jstask-res,.jstask-next{width:auto;flex:1 1 40%;}
  .jstask-ops{flex:1 1 100%;}
  .jserr,.jslog{margin-left:14px;}
}

/* ================= 公告栏（20260928）：列表 / 详情 / 管理预览 ================= */
.ann-list{display:flex;flex-direction:column;}
.ann-item{display:block;width:100%;text-align:left;background:none;border:0;border-bottom:1px solid var(--line);padding:12px 4px;cursor:pointer;}
.ann-item:last-child{border-bottom:0;}
.ann-item:hover .ann-item-t{color:var(--primary);}
.ann-item-t{font-size:14px;font-weight:600;color:var(--text);display:flex;align-items:center;gap:6px;}
.ann-item-m{font-size:12px;color:var(--muted);margin-top:4px;}
.ann-item-s{font-size:12.5px;color:var(--muted);margin-top:2px;line-height:1.6;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;}
.ann-tag{display:inline-flex;align-items:center;font-size:11px;font-weight:600;padding:1px 6px;border-radius:5px;background:var(--primary-soft);color:var(--primary);flex:none;}
.ann-tag.gray{background:var(--bg);color:var(--muted);}
.ann-empty{padding:18px 2px;color:var(--muted);font-size:13px;}
.md-body img.md-img,.md-body img{display:block;max-width:100%;height:auto;border-radius:8px;margin:6px 0;}
.anm-top{display:flex;align-items:center;gap:6px;font-size:13px;color:var(--text);width:auto;}
/* 右列 401px = 手机容器 375 + .ann-phone 左右 padding 24 + 边框 2，保证预览屏严格 375px */
.ann-preview-row{display:grid;grid-template-columns:1fr 401px;gap:14px;margin-top:10px;}
.ann-prev-box{border:1px solid var(--line);border-radius:10px;background:var(--bg);overflow:hidden;}
.ann-prev-h{font-size:12px;font-weight:600;color:var(--muted);padding:6px 10px;border-bottom:1px solid var(--line);background:var(--panel);}
.ann-prev-body{padding:12px 14px;max-height:420px;overflow-y:auto;font-size:14px;line-height:1.75;}
.ann-phone{padding:12px;display:flex;justify-content:center;}
.ann-phone-screen{width:375px;max-width:100%;background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:14px;font-size:14px;line-height:1.75;max-height:420px;overflow-y:auto;overflow-x:hidden;word-break:break-word;}
@media (max-width:1100px){
  .ann-preview-row{grid-template-columns:1fr;}
}
/* 公告管理·Vditor 编辑器（20260928 引入，自托管 /static/lib/vditor）
   Vditor 接管时收起原生插入按钮（只留「预览」），避免两套工具栏并列；
   自带预览恒关闭（口径与 mdE 不同），预览与展示仍走 mdE。 */
.anm-tb-min .fe-btn:not(#anm-preview-btn),.anm-tb-min .fe-sep{display:none;}
#anm-editor .vditor{border:1px solid var(--line);border-radius:var(--radius-sm);}
#anm-editor .vditor-reset{font-size:14px;}
#anm-editor .vditor-toolbar{border-radius:var(--radius-sm) var(--radius-sm) 0 0;}
/* 隐藏 Vditor 自带预览面板（lute 渲染，与本站 mdE 口径不同 → 必须藏），
   并把 Markdown 源码编辑区拉满宽度（默认分屏是左右各半） */
#anm-editor.anm-hide-preview .vditor-preview{display:none !important;}
#anm-editor.anm-hide-preview .vditor-content{display:block;}
#anm-editor.anm-hide-preview .vditor-sv{width:100% !important;min-height:220px;}

/* ================= A10 月度免费会员任务页（20261005，js/monthly.js） ================= */
.mt-progress-row{display:flex;align-items:center;gap:12px;margin-top:10px}
.mt-bar-track{flex:1;height:10px;border-radius:6px;background:var(--line-soft);overflow:hidden}
.mt-bar-fill{height:100%;width:0;border-radius:6px;background:var(--down);transition:width .4s}
.mt-bar-num{font-size:13px;color:var(--text);white-space:nowrap;font-weight:600}
.mt-invite-row{display:flex;align-items:center;justify-content:space-between;gap:10px;
  padding:9px 12px;border:1px solid var(--line);border-radius:10px;margin-top:8px;font-size:13px}
.mt-invite-row.mt-done{border-color:var(--down);background:#f0fdf4}
.mt-invite-days{color:var(--muted)}
.mt-done .mt-invite-days{color:var(--down);font-weight:600}
.mt-claim-row{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;
  padding:10px 12px;border:1px solid var(--line);border-radius:10px;margin-top:8px;font-size:13px}
.mt-claim-side{display:flex;align-items:center;gap:10px}
