
* { margin:0; padding:0; box-sizing:border-box; }

/* ============ v16 设计令牌 ============ */
:root {
  --color-bg:           #FDF6E3;
  --color-surface:       #FFFFFF;
  --color-surface-alt:   #FFFBF0;
  --color-surface-muted: #F8F6F3;
  --color-text:         #2C2C2C;
  --color-text-secondary:#A8A29E;
  --color-text-muted:   #C4C4C4;
  --color-primary:       #C49102;
  --color-primary-light: rgba(196,145,2,0.10);
  --color-accent:        #F28157;
  --color-up:           #EF4444;
  --color-down:         #22C55E;
  --color-confirm:       #0EA5E9;
  --color-card-pink:    #FCE7F3;
  --color-card-purple:   #EDE9FE;
  --color-card-blue:     #E0F2FE;
  --color-card-yellow:   #FEF9C3;
  --color-card-mint:     #DCFCE7;
  --color-card-orange:   #FFEDD5;
  --color-border:       rgba(0,0,0,0.08);
  --color-border-light: rgba(0,0,0,0.04);
  --shadow-sm: 0 1px 3px rgba(0,0,0,0.04);
  --shadow-md: 0 4px 20px rgba(0,0,0,0.06);
  --shadow-lg: 0 8px 30px rgba(0,0,0,0.10);
  --sidebar-bg:       rgba(253,246,227,0.82);
  --sidebar-border:    rgba(253,246,227,0.6);
  --sidebar-text:      #6B7280;
  --sidebar-text-active:#2D3142;
  --sidebar-blur:      blur(20px);
  --color-border-1: #A5F3FC;
  --color-border-2: #BFDBFE;
  --color-border-3: #FDE68A;
  --color-border-4: #C7D2FE;
}

[data-theme="dark"] {
  --color-bg:           #0A0A18;
  --color-surface:       #12122A;
  --color-surface-alt:   #1A1A32;
  --color-surface-muted: #2E2E4A;
  --color-text:         #B0B0B0;
  --color-text-secondary:#888888;
  --color-text-muted:   #666666;
  --color-primary:       #F5C542;
  --color-primary-light: rgba(245,197,66,0.10);
  --color-accent:        #F28157;
  --color-up:           #EF4444;
  --color-down:         #22C55E;
  --color-confirm:       #0EA5E9;
  --color-card-pink:    rgba(244,114,182,0.12);
  --color-card-purple:   rgba(139,92,246,0.15);
  --color-card-blue:     rgba(14,165,233,0.10);
  --color-card-yellow:   rgba(245,197,66,0.10);
  --color-card-mint:     rgba(34,197,94,0.08);
  --color-card-orange:   rgba(249,115,22,0.12);
  --color-border:       rgba(255,255,255,0.06);
  --color-border-light: rgba(255,255,255,0.04);
  --shadow-sm: 0 1px 3px rgba(0,0,0,0.3);
  --shadow-md: 0 4px 20px rgba(0,0,0,0.4);
  --shadow-lg: 0 8px 30px rgba(0,0,0,0.5);
  --sidebar-bg:       rgba(10,10,24,0.95);
  --sidebar-border:    rgba(255,255,255,0.06);
  --sidebar-text:      #999999;
  --sidebar-text-active:#F5C542;
  --sidebar-blur:      blur(20px);
  --color-border-1: rgba(103,232,249,0.30);
  --color-border-2: rgba(147,197,253,0.30);
  --color-border-3: rgba(252,211,77,0.30);
  --color-border-4: rgba(165,180,252,0.30);
}

body {
  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", sans-serif;
  background: var(--color-bg);
  color: var(--color-text);
  min-height: 100vh;
}

/* 背景微动态mesh */
body::before {
  content: '';
  position: fixed;
  top: -50%;
  left: -50%;
  width: 200%;
  height: 200%;
  background: radial-gradient(ellipse at 20% 50%, rgba(196,145,2,0.04) 0%, transparent 50%),
              radial-gradient(ellipse at 80% 20%, rgba(242,129,87,0.03) 0%, transparent 50%),
              radial-gradient(ellipse at 50% 80%, rgba(255,255,255,0.03) 0%, transparent 50%);
  z-index: -1;
  animation: meshShift 30s ease-in-out infinite;
}
@keyframes meshShift {
  0%, 100% { transform: translate(0,0) rotate(0deg); }
  33% { transform: translate(2%,-1%) rotate(1deg); }
  66% { transform: translate(-1%,2%) rotate(-0.5deg); }
}

/* 主布局 */
.dashboard { padding-left:0; }

/* 手机汉堡按钮 */
.menu-toggle { display:none; position:fixed; top:12px; left:12px; z-index:101;
  background:var(--color-surface); border:1px solid var(--color-border); border-radius:8px;
  width:40px; height:40px; font-size:20px; cursor:pointer;
  box-shadow:0 2px 8px rgba(0,0,0,0.1); }
.sidebar-overlay { display:none; position:fixed; top:0; left:0; width:100%; height:100%;
  background:rgba(0,0,0,0.4); z-index:99; }
.sidebar-overlay.show { display:block; }

/* 左侧导航 */
.sidebar {
  width: 240px;
  background: var(--sidebar-bg);
  backdrop-filter: var(--sidebar-blur);
  -webkit-backdrop-filter: var(--sidebar-blur);
  border-radius: 0 24px 24px 0;
  margin: 12px 0 12px 12px;
  padding: 28px 20px;
  display: flex;
  flex-direction: column;
  border-right: 1px solid var(--sidebar-border);
  box-shadow: var(--shadow-md), inset 0 1px 0 rgba(255,255,255,0.5);
  position: fixed;
  top: 0; left: 0;
  height: calc(100vh - 24px);
  z-index: 100;
  transition: transform 0.3s;
}
.logo { display:flex; flex-direction:column; gap:0; padding:0 8px; margin-bottom:0; }
.logo-top { display:flex; align-items:center; gap:12px; }
.logo-img { height:48px; width:48px; border-radius:10px; object-fit:cover; flex-shrink:0; image-rendering:auto; }
.logo-name { font-size:22px; font-weight:900; color:var(--color-text); letter-spacing:2px; font-family:"PingFang SC","Microsoft YaHei",sans-serif; }
.logo-divider { width:100%; height:1px; background:linear-gradient(90deg,var(--color-border) 0%,rgba(209,213,219,0.3) 80%,transparent 100%); margin:4px 0 3px; }
.logo-slogan { font-size:10px; color:var(--color-accent); font-weight:500; letter-spacing:1px; text-align:center; }
.logo-rainbow { height:3px; background:linear-gradient(90deg,var(--color-primary),var(--color-accent),var(--color-accent)); margin:0 0 12px 0; border-radius:2px; }

.user-card { display:flex; align-items:center; gap:12px; padding:16px; background:rgba(196,145,2,0.05);
  border-radius:16px; margin-bottom:24px; }
.user-avatar { width:44px; height:44px; background:var(--color-surface-muted); border-radius:50%;
  display:flex; align-items:center; justify-content:center; font-size:18px; }
.user-details { flex:1; }
.user-name { font-size:14px; font-weight:600; color:var(--color-text); }
.user-role { font-size:12px; color:var(--color-text-muted); }

.nav-menu { flex:1; display:flex; flex-direction:column; gap:4px; }
.nav-item { display:flex; align-items:center; gap:10px; padding:10px 16px;
  border-radius:14px; cursor:pointer; transition:all 0.25s cubic-bezier(0.34,1.56,0.64,1); font-size:14px;
  color:var(--color-text); font-weight:500; position:relative; }
.nav-item:hover { background:rgba(196,145,2,0.06); color:var(--color-text); transform:translateX(4px); }
/* 侧边栏彩虹激活配色由 JS switchPage 设置内联样式 */
.nav-item.active::after {
  content: '';
  position:absolute; right:-20px; top:50%; transform:translateY(-50%);
  width:4px; height:24px; background:rgba(255,255,255,0.7); border-radius:0 4px 4px 0;
}
/* 侧边栏彩虹配色由内联样式 + JS switchPage 控制 */
.nav-icon { font-size:20px; width:24px; text-align:center; display:flex; align-items:center; justify-content:center; }
.nav-text { display:flex; flex-direction:column; gap:0; line-height:1.2; }
.nav-title { font-size:14px; font-weight:500; color:inherit; }
.nav-desc { font-size:10px; color:var(--color-text-muted); font-weight:400; letter-spacing:0.3px; }

/* 主题切换三按钮 */
.theme-btns { display:flex; gap:4px; padding:8px 4px; margin-top:6px; }
.theme-btn {
  flex:1; display:flex; align-items:center; justify-content:center; gap:3px;
  padding:6px 4px; font-size:11px; font-weight:500;
  border:1px solid var(--color-border); border-radius:8px;
  background:var(--color-surface); color:var(--color-text-muted);
  cursor:pointer; transition:all 0.25s;
}
.theme-btn:hover { border-color:var(--color-primary); color:var(--color-text); background:var(--color-surface-alt); }
.theme-btn.active {
  border-color:var(--color-primary); background:var(--color-primary); color:#fff;
  box-shadow:0 2px 8px rgba(59,91,167,0.25);
}

/* 思维导图弹出框 */
.mindmap-popover {
  display:none; position:fixed; left:264px; z-index:999;
  animation: mmIn .25s ease-out;
}
.mindmap-popover.show { display:block; }
@keyframes mmIn { from{opacity:0;transform:translateX(-8px)} to{opacity:1;transform:translateX(0)} }
.mindmap-arrow {
  display:none;
}
.mindmap-container {
  background:var(--color-surface); border-radius:20px; padding:16px 20px 16px 16px;
  box-shadow:0 20px 60px rgba(0,0,0,0.12), 0 8px 24px rgba(0,0,0,0.06);
  min-width:500px; width:540px;
}
/* 右侧分支区 */
.mm-right { display:flex; flex-direction:column; gap:0; }
.mm-branches { display:flex; flex-direction:column; gap:2px; padding-left:0; position:relative; height:140px; justify-content:center; }
.mm-bg-lines { position:absolute; left:0; top:0; height:140px; width:62px; pointer-events:none; z-index:0; }
.mm-row { display:flex; align-items:center; gap:0; padding:4px 0 4px 62px; position:relative; z-index:1; cursor:pointer; }
.mm-row.mm-active { background:rgba(196,145,2,0.06); border-radius:14px; padding-left:66px; }
.mm-row.mm-active .mm-badge { transform:scale(1.04); }
.mm-row.r1 { padding-top:0; padding-bottom:8px; top:-1px; }
.mm-row.r3 { position:relative; top:5px; }
/* 标签 */
.mm-badge {
  display:inline-flex; align-items:center; gap:6px; padding:5px 12px 5px 5px;
  border-radius:20px; font-size:13px; font-weight:600; white-space:nowrap; flex-shrink:0;
  position:relative; z-index:1; width:120px;
}
.mm-badge .bd { width:8px; height:8px; border-radius:50%; }
.b1 { background:var(--color-surface-muted); border:1px solid var(--color-border); color:var(--color-text-secondary); }
.b1 .bd { background:var(--color-text-secondary); }
.b2 { background:rgba(196,145,2,.04); border:1px solid rgba(196,145,2,.2); color:var(--color-primary); }
.b2 .bd { background:var(--color-primary); width:10px; height:10px; }
.b3 { background:var(--color-surface-alt); border:1px solid rgba(242,129,87,.15); color:var(--color-accent); }
.b3 .bd { background:var(--color-accent); }
.mm-badge .tg { font-size:9px; padding:1px 6px; border-radius:6px; font-weight:600; }
.tg1 { background:var(--color-surface-alt); color:var(--color-text-secondary); }
.tg2 { background:var(--color-primary); color:var(--color-surface); }
.tg3 { background:rgba(242,129,87,.1); color:var(--color-accent); }
.mm-badge .meta { font-size:10px; font-weight:400; color:var(--color-text-muted); }
/* 子项 */
.mm-chips { display:flex; gap:4px; flex-wrap:wrap; }
.mm-chips span { font-size:10px; padding:3px 8px; background:var(--color-surface); border-radius:6px; border:1px solid var(--color-surface-alt); color:var(--color-text-secondary); }
.mm-desc { font-size:11px; color:var(--color-text-secondary); line-height:1.7; padding:4px 10px; max-width:320px; }

/* 右侧主内容 */
.main-content { margin-left:264px; padding:16px 24px 60px; background:var(--color-surface-alt); border-radius:24px 0 0 24px; min-height:calc(100vh - 24px); }

/* 顶部栏 */
.top-bar { display:flex; flex-direction:column; align-items:center; gap:12px; margin-bottom:20px; }
  .top-bar .page-title { order:-1; width:100%; text-align:center; }
  .top-bar .top-actions { width:100%; max-width:700px; justify-content:center; }
.page-title { text-align:center; flex:1; }
.page-title h1 { font-size:26px; font-weight:700; color:var(--color-text); }
.page-title p { font-size:13px; color:var(--color-text-muted); margin-top:4px; }
.top-actions { display:flex; gap:12px; align-items:center; flex-wrap:nowrap; }
#stockSearchArea { display:flex; align-items:center; gap:8px; flex:1; min-width:0; }
.search-box { background:var(--color-surface); border:1px solid rgba(255,255,255,0.8); border-radius:16px; padding:12px 18px;
  display:flex; align-items:center; gap:10px; flex:1; min-width:60px; max-width:400px; position:relative;
  box-shadow:0 2px 12px rgba(0,0,0,0.04), inset 0 1px 0 rgba(255,255,255,0.5); }
.search-box:focus-within {
  border-color:rgba(196,145,2,0.3);
  box-shadow:0 4px 20px rgba(196,145,2,0.08), inset 0 1px 0 rgba(255,255,255,0.5); }
.search-box input { background:transparent; border:none; outline:none; color:var(--color-text);
  font-size:14px; flex:1; }
.search-box input::placeholder { color:var(--color-text-muted); }
.btn-icon { width:44px; height:44px; background:var(--color-surface); border:1px solid rgba(255,255,255,0.8); border-radius:14px;
  display:flex; align-items:center; justify-content:center; cursor:pointer;
  box-shadow:0 2px 12px rgba(0,0,0,0.04); font-size:18px; transition:all 0.3s cubic-bezier(0.34,1.56,0.64,1); }
.btn-icon:hover { transform:translateY(-2px); box-shadow:0 6px 20px rgba(0,0,0,0.08); }

/* 搜索下拉联想 */
.search-suggestions { display:none; position:absolute; top:100%; left:0; right:0;
  background:var(--color-surface); border-radius:0 0 16px 16px; box-shadow:0 8px 30px rgba(0,0,0,0.12);
  max-height:320px; overflow-y:auto; z-index:200; margin-top:4px; }
.search-suggestions.show { display:block; }
.suggestion-item { display:flex; align-items:center; gap:10px; padding:10px 16px;
  cursor:pointer; transition:background 0.15s; font-size:13px; }
.suggestion-item:hover { background:var(--color-surface-muted); }
.suggestion-item.active { background:var(--color-surface-alt); }
.suggestion-code { font-weight:700; color:var(--color-primary); width:60px; }
.suggestion-name { flex:1; color:var(--color-text); }
.suggestion-type { font-size:11px; color:var(--color-text-muted); background:var(--color-surface-alt); padding:2px 6px; border-radius:4px; }

/* 统计卡片网格 */
.stats-grid { display:grid; grid-template-columns:repeat(4,1fr); gap:14px; margin-bottom:0; }
/* 持仓页面：统计卡片一行3个 */
#page-positions .stats-grid { grid-template-columns:repeat(3,1fr); }
.page-content { width:100%; box-sizing:border-box; display:block; }
.page-content.hidden { display:none; }
.page-content.active { display:block; }
.stat-card { background:var(--color-surface); border-radius:12px; padding:12px 14px;
  box-shadow:0 4px 20px rgba(0,0,0,0.04), 0 1px 3px rgba(0,0,0,0.02);
  transition:all 0.3s cubic-bezier(0.34,1.56,0.64,1);
  border:1px solid var(--color-border-light);
  position:relative;
  overflow:hidden; }
.stats-grid .stat-card:nth-child(4n+1) { border:2px solid var(--color-border-1); }
.stats-grid .stat-card:nth-child(4n+2) { border:2px solid var(--color-border-2); }
.stats-grid .stat-card:nth-child(4n+3) { border:2px solid var(--color-border-3); }
.stats-grid .stat-card:nth-child(4n+4) { border:2px solid var(--color-border-4); }
.stat-card::before {
  content: '';
  position:absolute; top:0; left:0; right:0; height:2px;
  background:linear-gradient(90deg, var(--color-primary), var(--color-accent), var(--color-accent));
  opacity:0;
  transition:opacity 0.3s;
}
.stat-card:hover { transform:translateY(-3px);
  box-shadow:0 8px 24px rgba(0,0,0,0.08), 0 2px 8px rgba(0,0,0,0.04); }
.stat-card:hover::before { opacity:1; }
.stat-header { display:flex; align-items:center; justify-content:space-between; margin-bottom:6px; }
.stat-icon { width:28px; height:28px; border-radius:8px; display:flex;
  align-items:center; justify-content:center; font-size:13px; }
.stat-icon.blue { background:var(--color-card-blue); }
.stat-icon.yellow { background:var(--color-card-yellow); }
.stat-icon.orange { background:var(--color-card-orange); }
.stat-icon.green { background:var(--color-card-mint); }
.stat-badge { font-size:10px; padding:2px 7px; border-radius:20px; font-weight:600; }
.stat-badge.up { background:var(--color-card-mint); color:var(--color-confirm); }
.stat-badge.down { background:rgba(239,68,68,0.08); color:var(--color-up); }
.stat-value { font-size:18px; font-weight:800; color:var(--color-text); margin-bottom:1px; }
.stat-label { font-size:11px; color:var(--color-text); }

/* 双栏内容区 */
.content-grid { display:grid; grid-template-columns:1fr 1fr; gap:14px; margin-bottom:0; }
.card { background:var(--color-surface); border-radius:16px; padding:18px;
  box-shadow:0 4px 20px rgba(0,0,0,0.04), 0 1px 3px rgba(0,0,0,0.02);
  border:1px solid var(--color-border-light);
  transition:all 0.3s cubic-bezier(0.34,1.56,0.64,1); }
#page-dashboard .card { position:relative; overflow:hidden; }
#page-dashboard .card::before {
  content: '';
  position:absolute; top:0; left:0; right:0; height:2px;
  background:linear-gradient(90deg, var(--color-primary), var(--color-accent), var(--color-accent));
  opacity:0;
  transition:opacity 0.3s;
}
#page-dashboard .card:hover::before { opacity:1; }
#page-profile .card {
  position:relative;
  box-shadow:
    0 0 0 1px rgba(59,91,167,0.12),
    0 2px 12px rgba(0,0,0,0.04);
  transition:box-shadow 0.4s, transform 0.3s;
}
#page-profile .card:hover {
  box-shadow:
    0 0 0 2px rgba(59,91,167,0.7),
    0 0 0 5px rgba(59,91,167,0.06),
    0 8px 30px rgba(0,0,0,0.06);
  transform:translateY(-1px);
}
.card:hover { box-shadow:0 8px 30px rgba(0,0,0,0.06); }
.card-header { display:flex; align-items:center; justify-content:space-between; margin-bottom:12px; }
.card-title { font-size:15px; font-weight:700; color:var(--color-text); }
.card-more { font-size:12px; color:var(--color-primary); cursor:pointer; font-weight:500; }
.card-more:hover { text-decoration:underline; }

/* 持仓列表 */
.position-list { display:flex; flex-direction:column; gap:6px; }
.position-item { display:flex; align-items:center; justify-content:space-between;
  padding:10px 14px; background:var(--color-surface-muted); border-radius:12px; }
.position-info { display:flex; align-items:center; gap:10px; }
.position-icon { width:32px; height:32px; border-radius:10px; display:flex;
  align-items:center; justify-content:center; font-size:13px; }
.position-icon.blue { background:var(--color-card-blue); }
.position-icon.yellow { background:var(--color-card-yellow); }
.position-icon.orange { background:var(--color-card-orange); }
.position-name { font-size:14px; font-weight:600; color:var(--color-text); }
.position-code { font-size:12px; color:var(--color-text-muted); }
.position-value { text-align:right; }
.position-price { font-size:14px; font-weight:700; color:var(--color-text); }
.position-change { font-size:12px; font-weight:600; }
.position-change.up { color:var(--color-up); }
.position-change.down { color:var(--color-confirm); }

/* 关注列表 */
.watch-list { display:flex; flex-direction:column; gap:6px; }
.watch-item { display:flex; align-items:center; justify-content:space-between;
  padding:10px 14px; border:1px solid var(--color-surface-alt); border-radius:12px; }
.watch-info { display:flex; align-items:center; gap:8px; }
.watch-dot { width:6px; height:6px; border-radius:50%; background:var(--color-accent); }
.watch-name { font-size:13px; font-weight:500; color:var(--color-text); }
.watch-price { font-size:14px; font-weight:700; }
.watch-price.up { color:var(--color-up); }
.watch-price.down { color:var(--color-confirm); }

/* 分析模块 */
.ai-section { background:var(--color-surface-alt); border-radius:16px; padding:16px 18px; margin-bottom:24px; box-shadow:0 8px 28px rgba(0,0,0,0.07), 0 2px 8px rgba(0,0,0,0.04); border:1px solid rgba(196,145,2,0.06); }
.ai-section .card { box-shadow:0 2px 10px rgba(0,0,0,0.04); }
.ai-section:last-of-type .card { padding:14px; }
.ai-section .analysis-area { margin-bottom:0; }
.ai-section .card[style*="margin-top"] { margin-top:14px !important; }
.analysis-area { display:grid; grid-template-columns:2fr 1fr; gap:14px; margin-bottom:0; }

/* 圆形进度 */
.circle-progress { display:flex; flex-direction:column; align-items:center; gap:8px; }
.circle-chart { width:90px; height:90px; position:relative; }
.circle-chart svg { transform:rotate(-90deg); }
.circle-chart .bg { fill:none; stroke:var(--color-surface-alt); stroke-width:6; }
.circle-chart .progress { fill:none; stroke:url(#scoreGradient); stroke-width:6;
  stroke-linecap:round; stroke-dasharray:220; stroke-dashoffset:55;
  filter:drop-shadow(0 2px 8px rgba(196,145,2,0.3)); }
.circle-text { position:absolute; top:50%; left:50%;
  transform:translate(-50%,-50%); font-size:18px; font-weight:800; color:var(--color-text); }
.circle-label { font-size:11px; color:var(--color-text-muted); }

/* 进度条 */
.progress-list { display:flex; flex-direction:column; gap:10px; }
.progress-item { display:flex; flex-direction:column; gap:4px; }
.progress-header { display:flex; justify-content:space-between; font-size:12px; }
.progress-header span:first-child { color:var(--color-text); }
.progress-header span:last-child { color:var(--color-text); font-weight:600; }
.progress-bar { height:6px; background:linear-gradient(90deg, #F0EEEA, var(--color-border)); border-radius:3px; overflow:hidden;
  box-shadow:inset 0 1px 2px rgba(0,0,0,0.05); }
.progress-fill { height:100%; border-radius:3px; transition:width 0.8s cubic-bezier(0.34,1.56,0.64,1); }
.progress-fill.blue { background:linear-gradient(90deg, var(--color-primary), #5A7BC7); }
.progress-fill.yellow { background:linear-gradient(90deg, var(--color-accent), #F7DF6A); }
.progress-fill.orange { background:linear-gradient(90deg, #F28157, #F5A07A); }
.history-empty { text-align:center; color:var(--color-text-muted); padding:12px; font-size:12px; }
.history-item { padding:10px 14px; border-bottom:1px solid var(--color-surface-alt); cursor:pointer; transition:background 0.2s; display:flex; align-items:center; justify-content:space-between; }
.history-item:last-child { border-bottom:none; }
.history-item:hover { background:var(--color-surface-muted); }
.history-header { display:flex; align-items:center; gap:8px; }
.history-stock { font-size:13px; font-weight:600; color:var(--color-text); }
.history-type { font-size:10px; padding:2px 6px; border-radius:4px; background:var(--color-surface-alt); color:var(--color-text-secondary); font-weight:500; }
.history-time { font-size:11px; color:var(--color-text-muted); }

/* 笔记列表 */
.note-list { display:flex; flex-direction:column; gap:12px; }
.note-item { padding:16px; background:var(--color-surface-muted); border-radius:14px;
  border-left:3px solid var(--color-primary); }
.note-title { font-size:14px; font-weight:600; color:var(--color-text); margin-bottom:6px; }
.note-text { font-size:13px; color:var(--color-text-secondary); line-height:1.5; }
.note-date { font-size:12px; color:var(--color-text-muted); margin-top:8px; }

/* 登录弹窗 + 通用表单弹窗 */
.modal-overlay { position:fixed; top:0; left:0; width:100%; height:100%;
  background:rgba(0,0,0,0.3); display:none; align-items:center;
  justify-content:center; z-index:1000;
  backdrop-filter:blur(12px);
  -webkit-backdrop-filter:blur(12px); }
.modal-overlay.show { display:flex; }
.modal { background:var(--color-surface); border-radius:24px; padding:40px; width:420px;
  box-shadow:0 20px 60px rgba(0,0,0,0.15), 0 8px 24px rgba(0,0,0,0.08);
  border:1px solid rgba(255,255,255,0.5);
  position:relative;
  animation: modalEnter 0.3s cubic-bezier(0.34,1.56,0.64,1); }
@keyframes modalEnter {
  from { opacity:0; transform:scale(0.9) translateY(20px); }
  to { opacity:1; transform:scale(1) translateY(0); }
}
.modal-close-btn { position:absolute; top:16px; right:20px; cursor:pointer;
  font-size:28px; color:var(--color-text-muted); line-height:1; transition:color 0.2s; }
.modal-close-btn:hover { color:var(--color-text); }
.modal-title { font-size:24px; font-weight:700; color:var(--color-text);
  text-align:center; margin-bottom:8px; }
.modal-subtitle { font-size:14px; color:var(--color-text-muted); text-align:center;
  margin-bottom:32px; }
.analysis-modal { width:720px; max-height:90vh; overflow-y:auto; background:transparent; padding:0; border:none; }
#analysisDetailContent { font-size:14px; line-height:1.8; color:var(--color-text); margin-top:16px; width:100%; max-width:100%; box-sizing:border-box; }
#analysisDetailContent h1, #analysisDetailContent h2, #analysisDetailContent h3 { margin-top:16px; margin-bottom:8px; color:var(--color-text); }
#analysisDetailContent p { margin-bottom:8px; }
#analysisDetailContent table { width:100%; border-collapse:collapse; margin:8px 0; font-size:13px; }
#analysisDetailContent th, #analysisDetailContent td { padding:6px 10px; border:1px solid var(--color-border); text-align:left; }
#analysisDetailContent th { background:var(--color-surface-muted); font-weight:600; }
#analysisDetailContent .badge { display:inline-block; padding:2px 8px; border-radius:4px; font-size:11px; font-weight:600; }
#analysisDetailContent .badge-buy { background:rgba(16,185,129,0.1); color:#059669; }
#analysisDetailContent .badge-sell { background:rgba(239,68,68,0.1); color:#DC2626; }
#analysisDetailContent .badge-wait { background:rgba(245,158,11,0.1); color:#D97706; }

/* ===== 扫描报告 ===== */
.scan-report { font-family:-apple-system,'Microsoft YaHei',sans-serif; }
.scan-hdr { display:flex; align-items:center; gap:10px; flex-wrap:wrap; margin-bottom:20px; padding-bottom:16px; border-bottom:2px solid var(--color-border-light); }
.scan-hdr-name { font-size:20px; font-weight:700; }
.scan-hdr-badge { font-size:11px; padding:3px 10px; border-radius:4px; font-weight:600; }
.scan-hdr-v { font-size:11px; padding:3px 10px; border-radius:4px; color:#fff; font-weight:600; }
.scan-card { background:var(--color-surface-alt); border-radius:10px; padding:14px 16px; border:1px solid var(--color-border-light); margin-bottom:12px; }
.scan-card-title { font-size:13px; font-weight:600; margin-bottom:10px; color:var(--color-text); }
.scan-grid2 { display:grid; grid-template-columns:1fr 1fr; gap:12px; margin-bottom:16px; }
.scan-grid3 { display:grid; grid-template-columns:1fr 1fr 1fr; gap:10px; margin-bottom:16px; }
.scan-score-card { background:var(--color-surface-alt); border-radius:10px; padding:14px 16px; border:1px solid var(--color-border-light); }
.scan-score-hdr { display:flex; justify-content:space-between; align-items:center; margin-bottom:6px; }
.scan-score-lbl { font-size:13px; font-weight:500; }
.scan-score-val { font-size:22px; font-weight:800; }
.scan-bar { height:4px; background:var(--color-border); border-radius:4px; overflow:hidden; }
.scan-bar-fill { height:100%; border-radius:4px; transition:width 0.5s; }
.scan-formula { background:var(--color-surface); border-radius:8px; padding:12px 16px; font-family:monospace; font-size:12px; line-height:1.7; margin-bottom:12px; }
.scan-sig-list { display:flex; flex-direction:column; gap:6px; margin-bottom:16px; }
.scan-sig-item { padding:8px 12px; background:var(--color-surface-alt); border-radius:8px; font-size:12px; display:flex; align-items:center; gap:8px; border:1px solid var(--color-border-light); }
.scan-sig-lv { padding:2px 6px; border-radius:3px; font-size:10px; font-weight:600; color:#fff; flex-shrink:0; }
.scan-sig-desc { flex:1; }
.scan-trap-item { padding:8px 12px; background:rgba(239,68,68,0.05); border-radius:8px; font-size:12px; border:1px solid rgba(239,68,68,0.1); margin-bottom:6px; }
.scan-meta-card { padding:14px; border-radius:10px; text-align:center; }
.scan-meta-lbl { font-size:11px; color:var(--color-text-secondary); }
.scan-meta-val { font-size:22px; font-weight:700; margin-top:2px; }
.input-group { margin-bottom:20px; }
.input-group label { display:block; font-size:13px; font-weight:600;
  color:var(--color-text-secondary); margin-bottom:8px; }
.input-group input { width:100%; padding:14px 18px; border:1px solid var(--color-border);
  border-radius:14px; font-size:15px; outline:none; transition:all 0.2s; }
.input-group input:focus { border-color:var(--color-primary);
  box-shadow:0 0 0 3px rgba(196,145,2,0.1); }
.btn-primary {
  width:100%; padding:16px;
  background:linear-gradient(135deg, var(--color-primary) 0%, var(--color-primary) 50%, var(--color-primary) 100%);
  background-size:200% 200%;
  color:white; border:none; border-radius:14px; font-size:16px; font-weight:600;
  cursor:pointer;
  box-shadow:0 4px 16px rgba(196,145,2,0.3), 0 2px 4px rgba(196,145,2,0.15);
  transition:all 0.25s cubic-bezier(0.34,1.56,0.64,1);
  position:relative; overflow:hidden; }
.btn-primary::after {
  content:'';
  position:absolute; top:0; left:0; right:0; bottom:0;
  background:linear-gradient(135deg, rgba(255,255,255,0.1), transparent);
  border-radius:14px; pointer-events:none; }
.btn-primary:hover {
  background-position:100% 100%;
  transform:translateY(-2px);
  box-shadow:0 6px 24px rgba(196,145,2,0.35), 0 3px 8px rgba(196,145,2,0.2); }
.btn-primary:active {
  transform:translateY(1px);
  box-shadow:0 2px 8px rgba(196,145,2,0.25); }

/* 弹窗内股票搜索 */
.modal-search-box { position:relative; }
.modal-suggestions { display:none; position:absolute; top:100%; left:0; right:0;
  background:var(--color-surface); border-radius:0 0 14px 14px; box-shadow:0 8px 30px rgba(0,0,0,0.12);
  max-height:200px; overflow-y:auto; z-index:300; margin-top:2px; }
.modal-suggestions.show { display:block; }

/* 分析详情弹窗 */
.analysis-modal { width:720px; max-height:90vh; overflow-y:auto; background:transparent; padding:0; border:none; }

/* 个人中心 */
.profile-card { display:flex; align-items:center; gap:12px; padding:14px 18px;
  background:var(--color-surface); border-radius:12px; box-shadow:0 1px 8px rgba(0,0,0,0.04);
  margin-bottom:12px; }
.profile-avatar { width:44px; height:44px; background:var(--color-primary); border-radius:50%;
  display:flex; align-items:center; justify-content:center; font-size:18px; color:var(--color-surface); flex-shrink:0; }
.profile-info { flex:1; min-width:0; }
.profile-name { font-size:15px; font-weight:600; color:var(--color-text); }
.profile-email { font-size:12px; color:var(--color-text-muted); margin-top:1px; }
.profile-meta { display:flex; gap:12px; margin-top:4px; }
.profile-meta-item { font-size:11px; color:var(--color-text-secondary); }
.profile-meta-item strong { color:var(--color-text); }

/* 手机自适应 */
@media (max-width:1024px) {
  .stats-grid { grid-template-columns:repeat(2,1fr); }
  .main-content { padding:24px 20px 32px; }
}
@media (max-width:768px) {
  .sidebar { transform:translateX(-100%); }
  .sidebar.open { transform:translateX(0); }
  .menu-toggle { display:block; }
  .main-content { margin-left:0; padding:60px 16px 16px; }
  .stats-grid { grid-template-columns:repeat(2,1fr); }
  .content-grid { grid-template-columns:1fr; }
  .analysis-area { grid-template-columns:1fr; }
  .top-bar { flex-direction:column; align-items:center; gap:16px; }
  .page-title { text-align:center; width:100%; order:-1; }
  .top-actions { justify-content:center; width:100%; }
  .search-box, .review-trigger { width:100%; max-width:400px; }
}
@media (max-width:480px) {
  .stats-grid { grid-template-columns:1fr; }
  .top-actions { flex-direction:column; align-items:stretch; }
  .search-box, .review-trigger { max-width:none; }
  .btn-primary { width:100%; }
}
@media (max-width:480px) {
  .stats-grid { grid-template-columns:1fr; }
}
/* 分页 & 删除按钮 */
.delete-btn { font-size:11px; color:var(--color-text-muted); cursor:pointer; padding:4px 8px; border-radius:6px; transition:all 0.2s; background:none; border:1px solid var(--color-border); }
.delete-btn:hover { color:var(--color-up); background:#FEF2F2; border-color:#FECACA; }
.pagination-bar { display:flex; align-items:center; justify-content:center; gap:10px; padding:10px 0 4px; }
.pagination-bar .page-btn { padding:6px 14px; border:1px solid var(--color-border); border-radius:8px; font-size:12px; cursor:pointer; background:var(--color-surface); color:var(--color-text-secondary); transition:all 0.2s; }
.pagination-bar .page-btn:hover { border-color:var(--color-primary); color:var(--color-primary); }
.pagination-bar .page-btn:disabled { opacity:0.4; cursor:default; }
.pagination-bar .page-info { font-size:12px; color:var(--color-text-muted); }
.history-item { position:relative; }
.history-item .item-left { flex:1; min-width:0; }
.anal-batch-bar { display:flex; align-items:center; gap:8px; padding:8px 14px; border-bottom:1px solid var(--color-surface-alt); font-size:12px; }
.anal-batch-bar label { display:flex; align-items:center; gap:4px; cursor:pointer; color:var(--color-text-secondary); }
.anal-batch-bar input[type="checkbox"] { cursor:pointer; }
.btn-danger-sm { padding:4px 12px; font-size:11px; border-radius:6px; border:1px solid #FECACA; background:#FEF2F2; color:#EF4444; cursor:pointer; transition:all 0.2s; }
.btn-danger-sm:hover:not(:disabled) { background:#FEE2E2; border-color:#F87171; }
.btn-danger-sm:disabled { opacity:0.4; cursor:default; }
.anal-cb { margin-right:4px; cursor:pointer; }
/* ===== 分析报告 ===== */
.rp-wrap { background:#0a0e17; color:#e1e5ee; line-height:1.6; border-radius:16px; padding:28px; font-family:-apple-system,'Microsoft YaHei',sans-serif; }
.rp-wrap h1 { text-align:center; font-size:22px; color:#f0f4ff; margin-bottom:4px; }
.rp-sub { text-align:center; color:var(--color-text-secondary); font-size:13px; margin-bottom:20px; }
.rp-decision { background:linear-gradient(135deg,#1a0f00,#2a1500); border:1px solid #4a3000; border-radius:12px; padding:24px; margin-bottom:20px; position:relative; }
.rp-decision::before { content:''; display:block; height:4px; background:linear-gradient(90deg,#ffc107,#ff9800); border-radius:12px 12px 0 0; position:absolute; top:0; left:0; right:0; }
.rp-dgrid { display:grid; grid-template-columns:1fr 1fr 1fr; gap:14px; margin-top:8px; }
.rp-ditem { background:rgba(255,255,255,0.05); border-radius:8px; padding:12px; text-align:center; }
.rp-dlabel { font-size:11px; color:var(--color-text-secondary); }
.rp-dval { font-size:20px; font-weight:700; margin-top:4px; }
.rp-dsub { font-size:11px; margin-top:2px; }
.rp-score-box { text-align:center; margin-top:14px; padding-top:14px; border-top:1px solid rgba(255,255,255,0.06); }
.rp-score { font-size:28px; font-weight:700; }
.rp-suggestion { font-size:14px; margin-top:4px; }
.rp-section { background:#111827; border-radius:12px; padding:20px; margin-bottom:16px; border:1px solid #1e293b; }
.rp-stit { font-size:15px; font-weight:700; color:#f0f4ff; margin-bottom:12px; display:flex; align-items:center; gap:8px; }
.rp-stit::before { content:''; width:4px; height:16px; border-radius:2px; background:#3b82f6; flex-shrink:0; }
.rp-chart-box { height:280px; margin-bottom:8px; }
.rp-signal { display:flex; align-items:flex-start; gap:10px; padding:7px 0; border-bottom:1px solid rgba(255,255,255,0.04); }
.rp-signal:last-child { border-bottom:none; }
.rp-sicon { width:28px; height:28px; border-radius:50%; display:flex; align-items:center; justify-content:center; font-size:13px; flex-shrink:0; margin-top:1px; }
.rp-sicon-bull { background:rgba(0,230,118,0.15); color:#00e676; }
.rp-sicon-bear { background:rgba(255,82,82,0.15); color:#ff5252; }
.rp-sicon-warn { background:rgba(255,193,7,0.15); color:#ffc107; }
.rp-stext { font-size:13px; color:var(--color-text-muted); flex:1; }
.rp-stag { display:inline-block; padding:1px 7px; border-radius:4px; font-size:11px; font-weight:600; margin-left:4px; white-space:nowrap; }
.rp-stag-bull { background:rgba(0,230,118,0.12); color:#00e676; }
.rp-stag-bear { background:rgba(255,82,82,0.12); color:#ff5252; }
.rp-stag-warn { background:rgba(255,193,7,0.12); color:#ffc107; }
.rp-mgrid { display:grid; grid-template-columns:1fr 1fr; gap:8px; }
.rp-metric { display:flex; justify-content:space-between; padding:7px 0; border-bottom:1px solid rgba(255,255,255,0.04); font-size:13px; }
.rp-mlabel { color:var(--color-text-secondary); }
.rp-mval { font-weight:600; }
.rp-bb { display:grid; grid-template-columns:1fr 1fr; gap:14px; }
.rp-bbull { background:rgba(0,230,118,0.06); border:1px solid rgba(0,230,118,0.15); border-radius:8px; padding:14px; }
.rp-bbear { background:rgba(255,82,82,0.06); border:1px solid rgba(255,82,82,0.15); border-radius:8px; padding:14px; }
.rp-btitle { font-weight:700; margin-bottom:8px; font-size:14px; }
.rp-bitem { padding:4px 0; font-size:13px; color:var(--color-text-muted); }
.rp-conclusion { background:#111827; border-radius:12px; padding:20px; margin-bottom:16px; border:1px solid #1e293b; }
.rp-conclusion p { font-size:14px; line-height:1.8; margin-bottom:8px; }
.rp-hl { color:#f0f4ff; font-weight:600; }
.rp-green { color:#00e676; }
.rp-red { color:#ff5252; }
.rp-yellow { color:#ffc107; }
.rp-plan { padding:8px 12px; margin:6px 0; border-radius:6px; font-size:13px; }
.rp-plan-a { background:rgba(0,230,118,0.08); border-left:3px solid #00e676; }
.rp-plan-b { background:rgba(255,193,7,0.08); border-left:3px solid #ffc107; }
.rp-plan-c { background:rgba(255,82,82,0.08); border-left:3px solid #ff5252; }
.rp-footer { text-align:center; color:var(--color-text-secondary); font-size:11px; margin-top:16px; padding-top:12px; border-top:1px solid #1e293b; }
/* 持仓扫描下拉弹窗 */
.review-trigger { background:var(--color-surface); border:1px solid rgba(255,255,255,0.8); border-radius:16px; padding:12px 18px; display:flex; align-items:center; gap:8px; flex:1; min-width:60px; max-width:400px; box-shadow:0 2px 12px rgba(0,0,0,0.04), inset 0 1px 0 rgba(255,255,255,0.5); font-size:14px; font-weight:600; color:var(--color-text); cursor:pointer; transition:all 0.2s; position:relative; white-space:nowrap; }
.review-trigger::after { content:'▾'; font-size:10px; margin-left:auto; color:var(--color-text-muted); flex-shrink:0; }
.review-trigger:hover { border-color:rgba(196,145,2,0.3); box-shadow:0 4px 20px rgba(196,145,2,0.08), inset 0 1px 0 rgba(255,255,255,0.5); }
.review-popover { display:none; position:fixed; z-index:999; background:var(--color-surface); border-radius:16px; padding:8px; box-shadow:0 16px 48px rgba(0,0,0,0.12), 0 4px 12px rgba(0,0,0,0.06); min-width:200px; border:1px solid rgba(255,255,255,0.5); animation: rvIn .2s ease-out; }
.review-popover.show { display:block; }
@keyframes rvIn { from{opacity:0;transform:translateY(-6px)} to{opacity:1;transform:translateY(0)} }
.review-popover .rv-item { display:flex; align-items:center; justify-content:space-between; padding:10px 14px; border-radius:12px; cursor:pointer; font-size:14px; color:var(--color-text); transition:all 0.15s; }
.review-popover .rv-item:hover { background:rgba(196,145,2,0.06); color:var(--color-primary); }
.review-popover .rv-item .rv-arrow { font-size:12px; color:var(--color-text-muted); }
.review-popover .rv-item:hover .rv-arrow { color:var(--color-primary); }
/* 子级弹窗(右侧) */
.rv-submenu { display:none; position:fixed; z-index:1000; background:var(--color-surface); border-radius:16px; padding:8px; box-shadow:0 16px 48px rgba(0,0,0,0.15), 0 4px 12px rgba(0,0,0,0.08); min-width:240px; max-height:320px; overflow-y:auto; border:1px solid rgba(255,255,255,0.5); animation: rvSubIn .2s ease-out; }
.rv-submenu.show { display:block; }
@keyframes rvSubIn { from{opacity:0;transform:translateX(-6px)} to{opacity:1;transform:translateX(0)} }
.rv-subitem { padding:8px 14px; border-radius:10px; cursor:pointer; font-size:13px; color:var(--color-text); transition:all 0.15s; display:flex; align-items:center; gap:8px; }
.rv-subitem:hover { background:rgba(196,145,2,0.06); color:var(--color-primary); }
.rv-subitem .rv-subcode { font-size:11px; color:var(--color-text-muted); }
.rv-subitem:hover .rv-subcode { color:var(--color-primary); }

/* ===== 盘后复盘 AI 看板（统一流式布局）===== */
.rv-dual { display:flex; flex-direction:column; gap:14px; }
.rv-row { display:grid; grid-template-columns:1fr 1fr; gap:10px; align-items:start; }
@media(max-width:900px){ .rv-row{ grid-template-columns:1fr; } }

/* 左栏→统一面板 */
.rv-ai-panel { display:flex; flex-direction:column; gap:10px; margin-bottom:10px; }
#rvContent { display:flex; flex-direction:column; gap:10px; }
.rv-header { background:var(--color-surface); border-radius:12px; padding:14px 16px; border:2px solid var(--color-border-3); display:flex; align-items:center; gap:14px; box-shadow:0 2px 8px rgba(0,0,0,0.06); }
.rv-hicon { width:36px; height:36px; border-radius:8px; background:rgba(252,211,77,0.15); display:flex; align-items:center; justify-content:center; font-size:17px; flex-shrink:0; color:#A16207; }
  .rv-htitle { font-size:13.5px; font-weight:600; color:#A16207; }
  .rv-hsub { font-size:11px; color:var(--color-text-secondary); margin-top:1px; }
.rv-hdate { margin-left:auto; font-size:11px; color:#A16207; background:rgba(252,211,77,0.15); padding:3px 10px; border-radius:4px; font-weight:500; }

/* 四维评分 */
.rv-scores { display:grid; grid-template-columns:1fr 1fr; gap:10px; row-gap:10px; }
.rv-sc { background:var(--color-surface); border-radius:10px; padding:14px 14px 16px; text-align:center; box-shadow:0 1px 3px rgba(0,0,0,0.03); border:1px solid var(--color-border-light); }
.rv-scores .rv-sc:nth-child(4n+1) { border:2px solid var(--color-border-1); }
.rv-scores .rv-sc:nth-child(4n+2) { border:2px solid var(--color-border-2); }
.rv-scores .rv-sc:nth-child(4n+3) { border:2px solid var(--color-border-3); }
.rv-scores .rv-sc:nth-child(4n+4) { border:2px solid var(--color-border-4); }
.rv-scores .rv-sc:nth-child(6) { background:var(--color-card-mint); }
.rv-sc-lbl { font-size:11px; color:var(--color-text); letter-spacing:0.3px; }
.rv-sc-val { font-size:22px; font-weight:700; margin:4px 0 2px; letter-spacing:-0.5px; }
.rv-sc-sub { font-size:11px; color:var(--color-text-muted); }
.rv-sc-bar { height:2.5px; background:var(--color-surface-alt); border-radius:2px; margin-top:6px; overflow:hidden; }
.rv-sc-fill { height:100%; border-radius:2px; }

/* 区块卡片 */
.rv-sec { background:var(--color-surface); border-radius:10px; padding:14px; box-shadow:0 2px 8px rgba(0,0,0,0.06); border:2px solid var(--color-border); }
.rv-sec-t { font-size:12.5px; font-weight:600; color:var(--color-text); margin-bottom:10px; display:flex;align-items:center;gap:6px; }
.rv-sec-t::after { content:''; flex:1; height:1px; background:var(--color-surface-alt); margin-left:6px; }

/* 信号列表 */
.rv-sig-list { display:flex; flex-direction:column; gap:5px; }
.rv-sig-item { display:flex; align-items:center; gap:8px; padding:7px 10px; background:var(--color-surface-alt); border-radius:6px; font-size:12px; }
.rv-sig-lv { padding:1px 6px; border-radius:3px; font-size:10px; font-weight:700; flex-shrink:0; }
.rv-sl-P0,.rv-sl-P1 { background:rgba(16,185,129,0.1);color:#059669; }
.rv-sl-P2 { background:rgba(59,130,246,0.1);color:#2563EB; }
.rv-sl-B1 { background:rgba(245,158,11,0.1);color:var(--color-accent); }
.rv-sl-B2,.rv-sl-BP0 { background:rgba(239,68,68,0.1);color:var(--color-up); }
.rv-sig-res { margin-left:auto; font-size:10px; font-weight:600; padding:1px 6px; border-radius:3px; flex-shrink:0; }
/* 信号白话注释 */
.rv-sg-plain { font-size:10px; color:var(--color-text-muted); flex-shrink:0; font-style:normal; }
.rv-sr-ok { background:rgba(16,185,129,0.08);color:#059669; }
.rv-sr-bad { background:rgba(239,68,68,0.08);color:var(--color-up); }
.rv-sr-warn { background:rgba(245,158,11,0.08);color:var(--color-accent); }
.rv-sr-info { background:rgba(99,102,241,0.08);color:#6366F1; }
.rv-sig-stat { font-size:11px; color:var(--color-text-muted); margin-top:6px; line-height:1.6; }

/* 交易指标 */
.rv-trade-grid { display:grid; grid-template-columns:1fr 1fr; gap:6px; }
.rv-trade-item { background:var(--color-surface-alt); border-radius:6px; padding:10px; }
.rv-trade-item .rv-ti-lbl { font-size:11px; color:var(--color-text-secondary); }
.rv-trade-item .rv-ti-val { font-size:15px; font-weight:700; margin-top:2px; }
.rv-trade-item .rv-ti-det { font-size:11px; color:var(--color-text-muted); margin-top:1px; }

/* 风险标签 */
.rv-risk-tag { display:inline-block; padding:2px 7px; border-radius:3px; font-size:10px; font-weight:600; margin:2px 3px 2px 0; white-space:nowrap; }
.rv-rt-ok { background:rgba(16,185,129,0.06);color:#059669; }
.rv-rt-warn { background:rgba(245,158,11,0.06);color:var(--color-accent); }
.rv-rt-danger { background:rgba(239,68,68,0.06);color:var(--color-up); }

/* 修正因子 */
.rv-factor-list { display:flex; flex-direction:column; gap:4px; }
.rv-factor-item { display:flex; align-items:center; gap:7px; padding:6px 10px; background:var(--color-surface-alt); border-radius:6px; font-size:11px; color:var(--color-text-secondary); }
.rv-fa-auto { color:#059669; font-size:9px; font-weight:600; flex-shrink:0; min-width:42px; }
.rv-fa-semi { color:var(--color-accent); font-size:9px; font-weight:600; flex-shrink:0; min-width:48px; }
.rv-fa-man { color:#8B5CF6; font-size:9px; font-weight:600; flex-shrink:0; min-width:38px; }

/* 发现条目 */
.rv-findings { display:flex; flex-direction:column; gap:5px; }
.rv-finding { padding:8px 11px; border-radius:6px; font-size:11.5px; line-height:1.65; border-left:3px solid; }
.rv-finding.pos { border-color:var(--color-confirm);background:rgba(16,185,129,0.03); }
.rv-finding.neg { border-color:var(--color-up);background:rgba(239,68,68,0.03); }
.rv-finding.neu { border-color:#3B82F6;background:rgba(59,130,246,0.03); }

/* 次日预案 */
.rv-next-plan { font-size:11.5px; color:var(--color-text-secondary); line-height:1.85; }
.rv-next-plan b { color:var(--color-text); }
.rv-todo { margin-top:4px; padding-left:12px; }

/* 加载态 / 错误态 */
.rv-loading { text-align:center; color:var(--color-text-muted); font-size:12px; padding:30px 10px; }
.rv-err { background:rgba(239,68,68,0.04);border:1px solid rgba(239,68,68,0.1);border-radius:8px;padding:14px;text-align:center;color:var(--color-up);font-size:12px;margin-bottom:10px; }

/* 右栏→合并卡片（AI数据 + 手账输入合体） */
.rv-notes-col { display:flex; flex-direction:column; gap:12px; }
/* 合并卡片：上半部分AI数据，下半部分textarea */
.rv-merged-card { background:var(--color-surface); border-radius:12px; box-shadow:0 2px 8px rgba(0,0,0,0.06); overflow:hidden; border:2px solid var(--color-border); }
/* 大盘分析 = rv-dual 第3个子元素 */
.rv-dual .rv-merged-card:nth-child(3) { border:2px solid var(--color-border-2); }
/* 今日组合表现 = rv-dual 第4个子元素 */
.rv-dual .rv-merged-card:nth-child(4) { border:2px solid var(--color-border-3); }
.rv-row .rv-merged-card { border:2px solid var(--color-border-4); }
.rv-row .rv-sec { border:2px solid var(--color-border-4); box-shadow:0 2px 8px rgba(0,0,0,0.06); }
/* 复盘历史卡片 */
.ai-section > div:last-child .card { border:2px solid var(--color-border-1); }
.rv-merged-head { padding:12px 16px 8px; display:flex;align-items:center;gap:8px;border-bottom:1px solid rgba(0,0,0,0.04); }
.rv-merged-title { font-size:12.5px; font-weight:600; color:var(--color-text); }
.rv-merged-sub { font-size:11px; color:var(--color-text); margin-left:auto; }
.rv-merged-body { padding:10px 16px 14px; display:flex; flex-direction:column; gap:8px; }
.rv-merged-ai { font-size:11.5px; color:var(--color-text-secondary); line-height:1.7; min-height:20px; }
.rv-merged-ai:empty::before { content:'暂无引擎数据'; color:var(--color-border); }
.rv-merged-ta { width:100%;min-height:50px;padding:10px 12px;border:1px solid var(--color-border);border-radius:10px;font-size:12.5px;outline:none;resize:vertical;font-family:inherit;line-height:1.6;color:var(--color-text);background:var(--color-surface-alt);transition:border-color .15s; }
.rv-merged-ta:focus { border-color:var(--color-primary); background:var(--color-surface-alt); box-shadow:0 0 0 3px rgba(196,145,2,0.06); }
.rv-merged-ta::placeholder { color:var(--color-text-muted); }
.rv-submenu .rv-empty { text-align:center; padding:16px; color:var(--color-text-muted); font-size:13px; }
.rv-submenu .rv-action { display:flex; align-items:center; justify-content:center; gap:6px; padding:12px 14px; border-radius:12px; cursor:pointer; font-size:14px; font-weight:600; color:var(--color-surface); background:linear-gradient(135deg,var(--color-primary),var(--color-primary)); transition:all 0.2s; }
.rv-submenu .rv-action:hover { transform:translateY(-1px); box-shadow:0 4px 12px rgba(196,145,2,0.3); }
/* 持仓弹框彩虹分割线 */
.rv-rainbow-divider { height:3px; margin:6px 0; border-radius:2px; background:linear-gradient(90deg,#EF4444,#F59E0B,var(--color-confirm),#3B82F6,#8B5CF6); }
/* 持仓弹框内股票列表 */
.rv-position { display:flex; align-items:center; justify-content:space-between; padding:8px 14px; border-radius:10px; cursor:pointer; font-size:13px; color:var(--color-text); transition:all 0.15s; }
.rv-position:hover { background:rgba(196,145,2,0.06); }
.rv-position .rp-name { font-weight:600; }
.rv-position .rp-code { font-size:11px; color:var(--color-text-muted); margin-left:6px; }
.rv-position .rp-pct { font-weight:700; font-size:13px; }
.rv-position .rp-pct.up { color:var(--color-confirm); }
.rv-position .rp-pct.down { color:var(--color-up); }
.rv-position .rp-pct.flat { color:var(--color-text-muted); }
/* 减仓弹出菜单 */
.reduce-menu { display:none; position:fixed; z-index:1500; background:var(--color-surface); border-radius:16px; padding:8px; box-shadow:0 16px 48px rgba(0,0,0,0.15), 0 4px 12px rgba(0,0,0,0.08); min-width:170px; border:1px solid rgba(255,255,255,0.5); animation: rvIn .2s ease-out; }
.reduce-menu.show { display:block; }
.reduce-item { padding:10px 16px; border-radius:12px; cursor:pointer; font-size:14px; color:var(--color-text); transition:all 0.15s; text-align:center; }
.reduce-item:hover { background:rgba(239,68,68,0.06); color:var(--color-up); }
.reduce-item.danger { color:var(--color-up); font-weight:600; }
.reduce-item.danger:hover { background:#FEF2F2; }
.reduce-custom { display:flex; align-items:center; gap:6px; padding:8px 16px; }
.reduce-custom input { flex:1; padding:8px 10px; border:1px solid var(--color-border); border-radius:10px; font-size:13px; outline:none; width:60px; }
.reduce-custom input:focus { border-color:var(--color-primary); }
.reduce-custom button { padding:8px 14px; border:none; border-radius:10px; background:var(--color-primary); color:var(--color-surface); font-size:13px; cursor:pointer; }
/* 浮动确认弹窗 */
.floating-confirm { display:none; position:fixed; z-index:9999; background:var(--color-surface); border-radius:16px; padding:16px 20px; box-shadow:0 16px 48px rgba(0,0,0,0.2); min-width:260px; border:1px solid rgba(255,255,255,0.5); animation: rvIn .2s ease-out; }
.floating-confirm.show { display:block; }
.fc-text { font-size:14px; color:var(--color-text); margin-bottom:14px; text-align:center; }
.fc-btns { display:flex; gap:10px; justify-content:center; }
.fc-btn { padding:10px 24px; border-radius:12px; border:none; font-size:14px; font-weight:600; cursor:pointer; transition:all 0.2s; }
.fc-btn.cancel { background:var(--color-surface-muted); color:var(--color-text-secondary); }
.fc-btn.cancel:hover { background:var(--color-surface-alt); }
.fc-btn.confirm { background:var(--color-up); color:var(--color-surface); }
.fc-btn.confirm:hover { background:#DC2626; }
/* 分析进度条 */
.analyze-loader { display:none; position:fixed; top:0; left:0; width:100%; height:100%; z-index:2000; background:rgba(255,255,255,0.7); backdrop-filter:blur(6px); align-items:center; justify-content:center; flex-direction:column; gap:16px; }
.analyze-loader.show { display:flex; }
.analyze-loader .ltip { font-size:15px; color:var(--color-text); font-weight:600; display:flex; align-items:center; gap:8px; }
.analyze-loader .lbar-wrap { width:360px; height:10px; background:var(--color-surface-alt); border-radius:5px; overflow:hidden; box-shadow:inset 0 1px 3px rgba(0,0,0,0.06); }
.analyze-loader .lbar-fill { height:100%; width:0%; background:linear-gradient(90deg,var(--color-primary),#5A7BC7,var(--color-primary)); background-size:200% 100%; border-radius:5px; transition:width 0.4s ease; animation: barPulse 1.5s ease-in-out infinite; }
@keyframes barPulse { 0%,100%{background-position:0% 50%} 50%{background-position:100% 50%} }
.analyze-loader .lbar-pct { font-size:12px; color:var(--color-primary); font-weight:700; min-width:36px; text-align:right; }
.analyze-loader .lsub { font-size:13px; color:var(--color-text-secondary); }
.analyze-loader .lcancel { margin-top:4px; padding:8px 20px; border:1px solid var(--color-border); border-radius:10px; background:var(--color-surface); color:var(--color-up); font-size:13px; cursor:pointer; transition:all 0.2s; }
.analyze-loader .lcancel:hover { background:#FEF2F2; border-color:#FECACA; }
.analyze-loader .lrow { display:flex; align-items:center; gap:10px; width:360px; }
/* 注册弹窗选填区 */
.reg-section-title { font-size:13px; font-weight:700; color:var(--color-text); margin:20px 0 12px; padding:0 0 8px; border-bottom:1px solid var(--color-surface-alt); display:flex; align-items:center; gap:6px; }
.reg-section-title .tag { font-size:10px; font-weight:500; padding:2px 8px; border-radius:6px; }
.reg-section-title .tag-req { background:var(--color-card-mint); color:var(--color-confirm); }
.reg-section-title .tag-opt { background:var(--color-surface-muted); color:var(--color-text-muted); }
.input-group select { width:100%; padding:14px 18px; border:1px solid var(--color-border); border-radius:14px; font-size:15px; outline:none; background:var(--color-surface); color:var(--color-text); cursor:pointer; transition:all 0.2s; -webkit-appearance:none; appearance:none; background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23a0aec0' d='M6 8L1 3h10z'/%3E%3C/svg%3E"); background-repeat:no-repeat; background-position:right 16px center; padding-right:40px; }
.input-group select:focus { border-color:var(--color-primary); box-shadow:0 0 0 3px rgba(196,145,2,0.1); }
.register-scroll { max-height:70vh; overflow-y:auto; padding-right:4px; }
/* 登录标签页切换 */
.login-tabs { display:flex; gap:0; margin-bottom:24px; background:var(--color-surface-muted); border-radius:12px; padding:3px; }
.login-tab { flex:1; text-align:center; padding:10px; border-radius:10px; font-size:14px; font-weight:500; cursor:pointer; color:var(--color-text-muted); transition:all 0.2s; }
.login-tab.active { background:var(--color-surface); color:var(--color-text); box-shadow:0 2px 8px rgba(0,0,0,0.06); font-weight:600; }
/* 验证码按钮 */
.code-row { display:flex; gap:10px; }
.code-row input { flex:1; }
.code-btn { padding:14px 16px; background:var(--color-surface-muted); border:1px solid var(--color-border); border-radius:14px; font-size:13px; font-weight:600; color:var(--color-primary); cursor:pointer; white-space:nowrap; transition:all 0.2s; }
.code-btn:hover { background:var(--color-card-blue); border-color:var(--color-primary); }
.code-btn:disabled { opacity:0.5; cursor:default; background:var(--color-surface-muted); }
/* ===== 买前分析报告（母版精确复刻）===== */
.pr-wrap { font-family:-apple-system,'Microsoft YaHei','PingFang SC',sans-serif; background:linear-gradient(145deg,#111827,#0f1420); color:#e8ecf4; border-radius:16px; overflow:hidden; line-height:1.6; width:100%; max-width:100%; box-sizing:border-box; }
.pr-header { background:linear-gradient(135deg,#1a2332,#0f1729); padding:28px 32px; border-bottom:1px solid rgba(99,102,241,0.15); }
.pr-h-top { display:flex; flex-direction:column; gap:6px; margin-bottom:6px; }
.pr-h-tags { display:flex; align-items:stretch; gap:8px; flex-wrap:wrap; }
.pr-h-tags > * { display:flex; align-items:center; justify-content:center; padding:4px 14px; border-radius:6px; min-height:36px; }
.pr-code { font-size:24px; font-weight:700; color:#f0f4ff; letter-spacing:1px; }
.pr-name { font-size:15px; color:#7a8ba8; }
.pr-badge { font-size:11px; font-weight:600; letter-spacing:1px; }
.pr-badge-l3 { background:rgba(99,102,241,0.2); color:#818cf8; border:1px solid rgba(99,102,241,0.3); }
.pr-badge-l2 { background:rgba(16,185,129,0.2); color:#34d399; border:1px solid rgba(16,185,129,0.3); }
.pr-badge-l1 { background:rgba(245,158,11,0.2); color:#fbbf24; border:1px solid rgba(245,158,11,0.3); }
.pr-verdict { display:inline-flex; align-items:center; justify-content:center; font-size:16px; font-weight:800; letter-spacing:3px; line-height:1; writing-mode:vertical-lr; text-orientation:mixed; }
.pr-verdict-buy { background:linear-gradient(135deg,rgba(16,185,129,0.2),rgba(16,185,129,0.08)); color:#34d399; border:1px solid rgba(16,185,129,0.3); }
.pr-verdict-wait { background:linear-gradient(135deg,rgba(245,158,11,0.2),rgba(245,158,11,0.08)); color:#fbbf24; border:1px solid rgba(245,158,11,0.3); }
.pr-verdict-abort { background:linear-gradient(135deg,rgba(239,68,68,0.2),rgba(239,68,68,0.08)); color:#f87171; border:1px solid rgba(239,68,68,0.3); }
.pr-h-sub { font-size:12px; color:#5a6a80; margin-top:4px; text-align:right; }
.pr-h-meta { display:flex; gap:20px; margin-top:12px; font-size:12px; color:#5a6a80; }
.pr-h-meta span { display:flex; align-items:center; gap:4px; }
.pr-netscore { padding:20px 32px; background:linear-gradient(90deg,rgba(99,102,241,0.06),transparent); border-bottom:1px solid rgba(255,255,255,0.03); display:flex; justify-content:space-between; align-items:center; }
.pr-ns-left { display:flex; align-items:baseline; gap:16px; }
.pr-ns-val { font-size:42px; font-weight:800; letter-spacing:-1px; }
.pr-ns-positive { color:#34d399; } .pr-ns-negative { color:#f87171; } .pr-ns-neutral { color:#fbbf24; }
.pr-ns-label { font-size:12px; color:#5a6a80; }
.pr-ns-right { display:flex; gap:24px; }
.pr-bci-item { text-align:center; }
.pr-bci-lb { font-size:11px; color:#5a6a80; } .pr-bci-v { font-size:18px; font-weight:700; }
.pr-bci-bull { color:#34d399; } .pr-bci-bear { color:#f87171; }
.pr-dims { padding:24px 32px; display:grid; grid-template-columns:1fr 1fr; gap:16px; border-bottom:1px solid rgba(255,255,255,0.03); width:100%; max-width:100%; box-sizing:border-box; }
.pr-dim { background:rgba(255,255,255,0.02); border-radius:10px; padding:16px; border:1px solid rgba(255,255,255,0.04); min-width:0; word-break:break-word; }
.pr-dim-hdr { display:flex; justify-content:space-between; align-items:center; margin-bottom:8px; }
.pr-dim-name { font-size:13px; font-weight:600; color:#c0c8d8; display:flex; align-items:center; gap:6px; }
.pr-dim-score { font-size:22px; font-weight:800; }
.pr-dim-bar { height:3px; background:rgba(255,255,255,0.06); border-radius:2px; overflow:hidden; margin-top:6px; }
.pr-dim-fill { height:100%; border-radius:2px; transition:width 0.8s; }
.pr-dim-detail { font-size:11px; color:#a0b0c8; margin-top:6px; line-height:1.7; word-break:break-word; overflow-wrap:break-word; }
.pr-dplain { color:#5a6a80; font-size:10px; }
.pr-intercept { padding:20px 32px; border-bottom:1px solid rgba(255,255,255,0.03); }
.pr-ij-item { display:flex; align-items:center; gap:10px; padding:8px 12px; background:rgba(239,68,68,0.06); border:1px solid rgba(239,68,68,0.15); border-radius:6px; margin-bottom:6px; font-size:13px; color:#fca5a5; }
.pr-ij-level { padding:2px 8px; border-radius:3px; font-size:10px; font-weight:700; letter-spacing:1px; }
.pr-ij-fatal { background:rgba(239,68,68,0.2); color:#f87171; }
.pr-ij-high { background:rgba(245,158,11,0.2); color:#fcd34d; }
.pr-ij-pass { padding:8px 12px; background:rgba(16,185,129,0.06); border-radius:6px; border:1px solid rgba(16,185,129,0.15); font-size:12px; color:#34d399; }
.pr-ctrl-grid { display:grid; grid-template-columns:1fr 1fr; gap:12px; width:100%; box-sizing:border-box; }
.pr-ctrl { background:rgba(255,255,255,0.02); border-radius:6px; padding:12px; min-width:0; overflow-wrap:break-word; word-break:break-word; }
.pr-ctrl-lb { font-size:11px; color:#5a6a80; overflow-wrap:break-word; word-break:break-word; }
.pr-ctrl-v { font-size:15px; font-weight:700; margin-top:2px; overflow-wrap:break-word; word-break:break-word; }
.pr-slabel { font-size:13px; font-weight:600; color:#7a8ba8; margin-bottom:12px; letter-spacing:2px; display:flex; align-items:center; gap:8px; }
.pr-slabel::after { content:''; flex:1; height:1px; background:rgba(255,255,255,0.05); }
.pr-sig-grid { display:grid !important; grid-template-columns:1fr 1fr !important; gap:6px; width:100%; box-sizing:border-box; }
.pr-sig { font-size:12px; color:#c0c8d8; padding:8px 10px; background:rgba(255,255,255,0.02); border-radius:4px; display:flex; align-items:center; gap:8px; min-width:0; word-break:break-word; }
.pr-sig .plain { color:#5a6a80; font-size:10px; }
.pr-slv { font-size:10px; font-weight:700; padding:1px 6px; border-radius:3px; flex-shrink:0; }
.pr-lv-P0 { background:rgba(16,185,129,0.2); color:#34d399; }
.pr-lv-P1 { background:rgba(16,185,129,0.12); color:#6ee7b7; }
.pr-lv-P2 { background:rgba(59,130,246,0.12); color:#93c5fd; }
.pr-lv-B1 { background:rgba(245,158,11,0.12); color:#fcd34d; }
.pr-lv-B2 { background:rgba(239,68,68,0.12); color:#fca5a5; }
.pr-lv-B3 { background:rgba(239,68,68,0.2); color:#f87171; }
.pr-lv-BP1 { background:rgba(239,68,68,0.2); color:#f87171; }
.pr-control-section { padding:20px 32px; border-bottom:1px solid rgba(255,255,255,0.03); }
.pr-signals-section { padding:20px 32px; border-bottom:1px solid rgba(255,255,255,0.03); }
.pr-pos { padding:20px 32px; display:flex; gap:24px; border-bottom:1px solid rgba(255,255,255,0.03); }
.pr-pos-item { flex:1; background:rgba(255,255,255,0.02); border-radius:8px; padding:14px; text-align:center; }
.pr-pos-lb { font-size:11px; color:#5a6a80; }
.pr-pos-v { font-size:20px; font-weight:700; margin-top:4px; }
.pr-pos-sl { color:#f87171; }
.pr-pos-tp { color:#34d399; }
.pr-section { padding:20px 32px; border-bottom:1px solid rgba(255,255,255,0.03); }
.pr-footer { padding:16px 32px; text-align:center; font-size:11px; color:#3a4a60; border-top:1px solid rgba(255,255,255,0.03); display:flex; justify-content:center; align-items:center; gap:8px; }
/* ===== Toast 通知系统 ===== */
.toast-container { position:fixed; top:20px; right:20px; z-index:99999; display:flex; flex-direction:column; gap:8px; pointer-events:none; }
.toast { pointer-events:auto; min-width:280px; max-width:400px; padding:14px 18px; border-radius:12px; font-size:13px; line-height:1.5;
  box-shadow:0 8px 32px rgba(0,0,0,0.15); animation:toastIn 0.3s ease-out; display:flex; align-items:flex-start; gap:10px; }
.toast-error { background:#FEF2F2; color:#991B1B; border:1px solid #FECACA; }
.toast-success { background:var(--color-card-mint); color:#166534; border:1px solid #BBF7D0; }
.toast-info { background:var(--color-card-blue); color:#1E40AF; border:1px solid #BFDBFE; }
.toast-warning { background:var(--color-card-yellow); color:#92400E; border:1px solid #FDE68A; }
.toast-icon { font-size:16px; flex-shrink:0; margin-top:1px; }
.toast-close { margin-left:auto; cursor:pointer; opacity:0.4; font-size:16px; flex-shrink:0; background:none; border:none; padding:0 4px; }
.toast-close:hover { opacity:0.8; }
@keyframes toastIn { from{opacity:0;transform:translateX(40px);} to{opacity:1;transform:translateX(0);} }
@keyframes toastOut { from{opacity:1;transform:translateX(0);} to{opacity:0;transform:translateX(40px);} }

/* ===== 数据源徽章 ===== */
.pr-source-badge { display:inline-flex; align-items:center; gap:4px; padding:2px 8px; border-radius:4px; font-size:10px; }
.pr-source-ok { background:rgba(16,185,129,0.1); color:#6ee7b7; border:1px solid rgba(16,185,129,0.2); }
.pr-source-warn { background:rgba(245,158,11,0.1); color:#fcd34d; border:1px solid rgba(245,158,11,0.2); }
.pr-source-miss { background:rgba(239,68,68,0.1); color:#fca5a5; border:1px solid rgba(239,68,68,0.2); }

