/* ========================================
 * style.css — DailyDash 样式表 (v149)
 * [Bridge Test v7] API Key 更新后验证 2026-03-27
 * 功能：亮暗主题自适应、卡片布局、
 *       Tab导航、图表容器、响应式适配
 * ======================================== */

/* ========== Reset & Base ========== */
*, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; }
/* 全局细滚动条 */
.cli-sent-alerts, .cli-paper-trades, .cli-events-card, .ceo-wl-list, .ceo-wl-alerts, #alpha-evolution { scrollbar-width: thin; scrollbar-color: rgba(0,0,0,0.12) transparent; }
.cli-sent-alerts::-webkit-scrollbar, .cli-paper-trades::-webkit-scrollbar, .cli-events-card::-webkit-scrollbar, .ceo-wl-list::-webkit-scrollbar, .ceo-wl-alerts::-webkit-scrollbar, #alpha-evolution::-webkit-scrollbar { width: 4px; }
.cli-sent-alerts::-webkit-scrollbar-thumb, .cli-paper-trades::-webkit-scrollbar-thumb, .cli-events-card::-webkit-scrollbar-thumb, .ceo-wl-list::-webkit-scrollbar-thumb, .ceo-wl-alerts::-webkit-scrollbar-thumb, #alpha-evolution::-webkit-scrollbar-thumb { background: rgba(0,0,0,0.12); border-radius: 2px; }

:root {
    /* Fresh Light Theme */
    --bg: #F5F6FA;
    --bg-card: #FFFFFF;
    --bg-tab: rgba(255,255,255,0.92);
    --bg-sidebar: #EEEEF3;
    --text: #1A1B2E;
    --text-secondary: #6B7280;
    --accent: #6366F1;
    --border: rgba(0,0,0,0.07);
    --red: #EF4444;
    --green: #10B981;
    --text-sub: #9CA3AF;
    --shadow: 0 2px 12px rgba(0,0,0,0.06);
    --safe-top: env(safe-area-inset-top, 0px);
    --safe-bottom: env(safe-area-inset-bottom, 0px);
    /* Light accent system */
    --glow-accent: rgba(99,102,241,0.10);
    --glow-red: rgba(239,68,68,0.08);
    --glow-green: rgba(16,185,129,0.08);
    --gradient-sci: linear-gradient(135deg, rgba(99,102,241,0.05), rgba(139,92,246,0.03));
    --scan-line: none;
    /* Glassmorphism (light) */
    --glass-bg: rgba(255,255,255,0.7);
    --glass-border: rgba(0,0,0,0.06);
    --glass-blur: blur(20px);
    /* Light-specific */
    --bull: #EF4444;
    --bear: #10B981;
    --card-shadow: 0 1px 3px rgba(0,0,0,0.05), 0 1px 2px rgba(0,0,0,0.03);
}

html {
    font-family: 'Inter', -apple-system, BlinkMacSystemFont, "SF Pro Display", sans-serif;
    font-size: 16px;
    background: var(--bg);
    color: var(--text);
    -webkit-text-size-adjust: 100%;
    -webkit-tap-highlight-color: transparent;
    overflow-x: hidden;
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
}

body {
    min-height: 100vh;
    padding-top: calc(var(--safe-top) + 48px);
    padding-bottom: calc(var(--safe-bottom) + 16px);
    overscroll-behavior-y: contain;
}

/* ========== Splash Screen ========== */
.splash {
    position: fixed; inset: 0; z-index: 9999;
    display: flex; flex-direction: column; align-items: center; justify-content: center;
    background: var(--bg);
    transition: opacity 0.4s ease;
}
.splash-logo {
    width: 72px; height: 72px;
    animation: splash-breathe 1.6s ease-in-out infinite;
    filter: drop-shadow(0 0 20px var(--glow-accent));
}
.splash-tagline {
    margin-top: 12px;
    font-size: 13px; color: var(--text-secondary);
    letter-spacing: 0.04em;
    animation: splash-fadein 0.6s ease 0.3s both;
}
@keyframes splash-breathe { 0%,100% { transform: scale(0.92); opacity: 0.7; } 50% { transform: scale(1.06); opacity: 1; } }
@keyframes splash-fadein { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: none; } }
.splash-out { opacity: 0; pointer-events: none; }

/* 主界面在 splash 期间隐藏，就位后平滑淡入 */
body.app-loading > header, body.app-loading > main { opacity: 0; pointer-events: none; }
body > header, body > main { transition: opacity 0.35s ease 0.05s; }
/* Failsafe：JS 完全挂掉时 8 秒后强制显示（正常流程由幕布系统管理） */
@keyframes content-failsafe { to { opacity: 1; pointer-events: auto; } }
body.app-loading > header, body.app-loading > main { animation: content-failsafe 0.4s ease 8s forwards; }

/* ========== 全局排版与数字优化 ========== */
.stock-price, .stock-change, .cl-stat-num, .sa-price, .stock-code, .cl-code, .sa-code, .sa-peers-table td {
    font-family: 'JetBrains Mono', monospace;
    letter-spacing: -0.02em;
}

.stock-name, .cl-name, .sa-name, .concert-name {
    font-weight: 600 !important;
    letter-spacing: -0.01em;
}

.stock-code, .cl-code, .sa-code {
    font-size: 11px !important;
    color: var(--text-sub) !important;
    letter-spacing: 0.05em;
}

/* ========== Top Bar & Tabs ========== */
.top-bar {
    position: fixed; top: 0; left: 0; right: 0;
    height: calc(var(--safe-top) + 48px); padding-top: var(--safe-top);
    display: flex; align-items: center; justify-content: space-between;
    padding-left: 12px; padding-right: 12px;
    background: var(--bg-tab); border-bottom: 1px solid transparent;
    border-image: linear-gradient(90deg, transparent, var(--accent), transparent) 1;
    z-index: 300;
    backdrop-filter: saturate(200%) blur(24px);
    -webkit-backdrop-filter: saturate(200%) blur(24px);
}

.menu-btn {
    width: 36px; height: 36px; border: none; background: transparent; color: var(--accent);
    display: flex; align-items: center; justify-content: center; cursor: pointer; border-radius: 8px;
}
.menu-btn:active { opacity: 0.5; }
.top-title { font-size: 17px; font-weight: 700; letter-spacing: 0.04em; background: linear-gradient(135deg, var(--accent), #a78bfa, var(--accent)); background-size: 200% 100%; -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; animation: titleShift 8s ease infinite; }
@keyframes titleShift { 0%,100%{background-position:0% 50%} 50%{background-position:100% 50%} }

.tab-bar {
    position: sticky; top: calc(var(--safe-top) + 48px); z-index: 200;
    background: var(--bg-tab); display: flex; align-items: center; padding: 6px 12px; gap: 4px; margin-bottom: 4px;
    backdrop-filter: saturate(200%) blur(24px); -webkit-backdrop-filter: saturate(200%) blur(24px);
    border-bottom: 1px solid var(--border);
}

.tab {
    flex: 1; height: 34px; border: none; background: transparent; color: var(--text-secondary);
    font-size: 15px; font-weight: 500; border-radius: 8px; cursor: pointer; transition: all 0.2s ease;
}
.tab.active { background: linear-gradient(135deg, var(--accent), #A78BFA); color: #fff; box-shadow: 0 2px 12px rgba(129,140,248,0.3), 0 0 16px var(--glow-accent); }

/* ========== Sidebar ========== */
.sidebar-overlay { position: fixed; inset: 0; background: rgba(0,0,0,0.15); z-index: 400; opacity: 0; pointer-events: none; transition: opacity 0.25s ease; }
.sidebar-overlay.open { opacity: 1; pointer-events: auto; }
.sidebar { position: fixed; top: 0; left: 0; bottom: 0; width: 260px; background: var(--bg-sidebar); z-index: 500; transform: translateX(-100%); transition: transform 0.25s ease; padding-top: calc(var(--safe-top) + 16px); display: flex; flex-direction: column; }
.sidebar.open { transform: translateX(0); }
.sidebar-avatar { display: flex; align-items: center; gap: 10px; padding: 16px 20px; cursor: pointer; border-bottom: 1px solid var(--border); }
.sidebar-avatar:active { opacity: 0.6; }
.avatar { width: 40px; height: 40px; border-radius: 50%; background: var(--border); color: var(--text-secondary); display: flex; align-items: center; justify-content: center; overflow: hidden; flex-shrink: 0; }
.avatar img { width: 100%; height: 100%; object-fit: cover; }
.avatar.large { width: 80px; height: 80px; }
.sidebar-user-name { flex: 1; font-size: 15px; font-weight: 600; }
.sidebar-arrow { color: var(--text-secondary); flex-shrink: 0; }
.sidebar-nav { padding: 8px 0; flex: 1; }
.sidebar-item { display: flex; align-items: center; gap: 12px; width: 100%; padding: 12px 20px; border: none; background: transparent; color: var(--text); font-size: 15px; cursor: pointer; text-align: left; }
.sidebar-item:active { background: var(--border); }
.sidebar-item.active { color: var(--accent); font-weight: 600; }

/* ========== Page containers & Layout ========== */
.page { display: none; }
.page.active { display: block; }
.content { padding: 12px; max-width: 600px; margin: 0 auto; }
.tab-panel { display: none; }
.tab-panel.active { display: block; }
.section-header { display: flex; justify-content: space-between; align-items: baseline; margin: 16px 0 8px; }
.section-header:first-child { margin-top: 4px; }
.section-header h2 { font-size: 19px; font-weight: 700; letter-spacing: -0.02em; position: relative; padding-bottom: 6px; }
.section-header h2::after { content:''; position:absolute; bottom:0; left:0; width:36px; height:2px; background:linear-gradient(90deg, var(--accent), rgba(167,139,250,0.4), transparent); border-radius:1px; }
.update-time { font-size: 12px; color: var(--text-secondary); }
.card-list { display: flex; flex-direction: column; gap: 12px; }

/* ========== 卡片全局样式优化 ========== */
.analysis-card-wrap, .stock-card-wrap, .news-card, .chanlun-card, .clt-card, .cli-reco-section, .concert-card {
    border-radius: 16px;
    border: 1px solid var(--glass-border);
    box-shadow: var(--shadow);
    background: var(--glass-bg);
    backdrop-filter: var(--glass-blur);
    -webkit-backdrop-filter: var(--glass-blur);
    transition: transform 0.2s cubic-bezier(0.23, 1, 0.32, 1), box-shadow 0.3s ease, border-color 0.3s ease;
    position: relative;
    overflow: hidden;
}
.analysis-card-wrap:active, .stock-card-wrap:active, .news-card:active, .concert-card:active {
    transform: scale(0.97); box-shadow: 0 4px 12px rgba(0,0,0,0.06);
}
/* 全局卡片顶部亮线 */
.stock-card-wrap::after, .news-card::after, .chanlun-card::after, .clt-card::after, .concert-card::after { content:''; position:absolute; top:0; left:12%; right:12%; height:1px; background:linear-gradient(90deg, transparent, var(--glow-accent), transparent); pointer-events:none; z-index:1; }
/* 全局卡片 hover 扫描线+发光 */
.stock-card-wrap::before, .news-card::before, .chanlun-card::before, .clt-card::before, .concert-card::before { content:''; position:absolute; inset:0; background:var(--scan-line); opacity:0; transition:opacity 0.3s ease; pointer-events:none; z-index:1; }
.stock-card-wrap:hover::before, .news-card:hover::before, .chanlun-card:hover::before, .clt-card:hover::before, .concert-card:hover::before { opacity:1; }
.stock-card-wrap:hover, .news-card:hover, .chanlun-card:hover, .clt-card:hover, .concert-card:hover { border-color:rgba(129,140,248,0.2); box-shadow:0 8px 32px rgba(0,0,0,0.06), 0 0 24px var(--glow-accent); transform:translateY(-1px); }

/* ========== 按钮与输入框优化 ========== */
.btn-primary, .btn-analyze, .btn-search, .btn-grab {
    border-radius: 12px; font-weight: 600; letter-spacing: 0.02em;
    box-shadow: 0 4px 12px rgba(129,140,248,0.25); transition: all 0.2s ease;
    background: var(--accent); color: #fff; border: none; cursor: pointer;
}
.btn-primary { width: 100%; height: 44px; font-size: 15px; }
.btn-analyze, .btn-search, .btn-grab { height: 42px; padding: 0 16px; font-size: 15px; flex-shrink: 0; }
.btn-primary:active, .btn-analyze:active, .btn-search:active, .btn-grab:active {
    transform: scale(0.96); box-shadow: 0 2px 6px rgba(129,140,248,0.15);
}
.btn-analyze:hover, .btn-search:hover, .btn-grab:hover { box-shadow: 0 0 20px rgba(129,140,248,0.3); }
.analyze-input-wrap { display: flex; gap: 8px; margin-bottom: 16px; }
.analyze-input-wrap input, .ticket-search input, .form-group input {
    border-radius: 12px; background: var(--bg); border: 1px solid var(--border);
    transition: all 0.2s ease; height: 42px; padding: 0 14px; font-size: 15px; color: var(--text); width: 100%;
}
.analyze-input-wrap input:focus, .ticket-search input:focus, .form-group input:focus {
    background: var(--bg-card); border-color: var(--accent); box-shadow: 0 0 0 3px rgba(129,140,248,0.15); outline: none;
}

/* ========== 标签与涨跌幅优化 ========== */
.action-tag, .concert-tag, .cl-mkt, .clt-grade { border-radius: 6px; font-weight: 700; letter-spacing: 0.02em; padding: 3px 8px; }
.action-tag { font-size: 10px; padding: 2px 6px; color: #fff; white-space: nowrap; }
.stock-change.up, .sa-price.up, .cl-price.up, .clt-metric-val.up, .up { color: var(--red) !important; }
.stock-change.down, .sa-price.down, .cl-price.down, .clt-metric-val.down, .down { color: var(--green) !important; }
.stock-change { display: inline-block; padding: 2px 6px; border-radius: 6px; font-size: 12px; font-weight: 700; }
.stock-change.up { background: rgba(248,113,113,0.1); text-shadow: 0 0 12px var(--glow-red); }
.stock-change.down { background: rgba(52,211,153,0.1); text-shadow: 0 0 12px var(--glow-green); }
.stock-price { text-shadow: none; }

/* ========== 骨架屏动画优化 ========== */
@keyframes shimmer { 0% { opacity: 0.4; background-color: var(--border); } 100% { opacity: 0.8; background-color: var(--bg); } }
.skeleton-loader { display: flex; flex-direction: column; gap: 8px; }
.skeleton-loader::before, .skeleton-loader::after {
    content: ""; display: block; height: 58px; border-radius: 16px; animation: shimmer 1.5s ease-in-out infinite alternate;
}
.skeleton-loader::after { width: 90%; }

/* ========== 内联加载状态 ========== */
.inline-loading { display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 40px 16px; gap: 12px; }
.inline-loading-logo { width: 40px; height: 40px; animation: splash-breathe 1.6s ease-in-out infinite; }
.inline-loading-text { font-size: 13px; color: var(--text-secondary); letter-spacing: 0.03em; text-align: center; }

/* ========== Stock Card ========== */
.stock-card { display: flex; align-items: center; padding: 16px; gap: 12px; cursor: pointer; }
.stock-info { flex: 1; min-width: 0; }
.stock-name { font-size: 15px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.stock-code { margin-top: 2px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.stock-hl { display: flex; flex-direction: column; gap: 2px; flex-shrink: 0; }
.stock-hl-label { font-size: 11px; color: var(--text-secondary); white-space: nowrap; }
.stock-price-area { text-align: right; flex-shrink: 0; }
.stock-price { font-size: 16px; font-weight: 600; }
.stock-hl-mini { font-size: 10px; color: var(--text-secondary); white-space: nowrap; margin-top: 1px; }
.stock-chevron { flex-shrink: 0; color: var(--text-secondary); transition: transform 0.2s ease; }
.stock-card-wrap.expanded .stock-chevron { transform: rotate(180deg); }
.stock-chart-wrap { max-height: 0; overflow: hidden; transition: max-height 0.3s ease; }
.stock-card-wrap.expanded .stock-chart-wrap { max-height: 400px; }
.stock-chart-tabs { display: flex; gap: 8px; padding: 8px 12px 4px; }
.chart-tab { padding: 4px 12px; border-radius: 8px; font-size: 12px; font-weight: 600; color: var(--text-secondary); cursor: pointer; background: var(--bg); border: none; transition: all 0.2s ease; }
.chart-tab.active { background: var(--accent); color: #fff; box-shadow: 0 2px 8px rgba(129,140,248,0.25); }
.stock-chart-img { width: 100%; display: block; padding: 4px 12px 12px; }
.chart-empty { text-align: center; color: #888; padding: 24px 12px; font-size: 13px; }
.chart-summary { font-size: 12px; color: var(--text-secondary); line-height: 1.5; padding: 4px 12px 12px; border-top: 0.5px solid var(--border); margin-top: 4px; word-break: break-word; overflow-wrap: anywhere; }

/* ========== News Card ========== */
.news-card { padding: 14px 16px; display: block; text-decoration: none; color: var(--text); animation: cardSlideIn 0.3s ease-out both; }
@keyframes cardSlideIn { from { opacity:0; transform:translateY(10px); } to { opacity:1; transform:translateY(0); } }
.card-list > :nth-child(1) { animation-delay:0s; } .card-list > :nth-child(2) { animation-delay:0.03s; } .card-list > :nth-child(3) { animation-delay:0.06s; } .card-list > :nth-child(4) { animation-delay:0.09s; } .card-list > :nth-child(5) { animation-delay:0.12s; } .card-list > :nth-child(6) { animation-delay:0.15s; } .card-list > :nth-child(7) { animation-delay:0.18s; } .card-list > :nth-child(8) { animation-delay:0.21s; } .card-list > :nth-child(n+9) { animation-delay:0.24s; }
.news-card-hidden { display: none; }
.news-head { display: flex; align-items: center; gap: 8px; margin-bottom: 6px; }
.news-tag { font-size: 10px; font-weight: 600; color: #fff; padding: 2px 8px; border-radius: 10px; white-space: nowrap; letter-spacing: 0.02em; box-shadow: 0 2px 8px rgba(0,0,0,0.1); }
.news-time { font-size: 11px; color: var(--text-secondary); margin-left: auto; white-space: nowrap; font-family: 'JetBrains Mono', monospace; }
.news-title { font-size: 15px; font-weight: 600; line-height: 1.4; }
.news-digest { font-size: 13px; color: var(--text-secondary); margin-top: 4px; line-height: 1.5; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.news-meta { margin-top: 6px; font-size: 11px; color: var(--text-secondary); opacity: 0.7; }
.news-more-btn { display: block; width: 100%; padding: 14px; margin-top: 2px; background: var(--bg-card); border: 1px dashed var(--border); border-radius: 16px; color: var(--accent); font-size: 14px; font-weight: 600; cursor: pointer; text-align: center; transition: background 0.2s; }
.news-more-btn:active { background: var(--accent); color: #fff; }

/* ========== Sector Pie Chart ========== */
.sector-pie-section { margin: 12px 0; background: var(--bg-card); border-radius: 16px; padding: 14px; box-shadow: var(--shadow); border: 1px solid var(--border); }
.sector-pie-title { font-size: 14px; font-weight: 600; margin-bottom: 10px; }
.sector-pie-wrap { display: flex; align-items: center; gap: 16px; }
.sector-pie-canvas { width: 120px; height: 120px; flex-shrink: 0; }
.sector-pie-legend { flex: 1; min-width: 0; }
.sector-legend-item { display: flex; align-items: center; gap: 6px; font-size: 12px; margin-bottom: 4px; }
.sector-legend-dot { width: 8px; height: 8px; border-radius: 50%; flex-shrink: 0; }

/* ========== Stock Analysis ========== */
.analysis-group { margin-bottom: 12px; border-radius: 16px; overflow: hidden; }
.analysis-group-header { display: flex; align-items: center; gap: 6px; padding: 10px 14px; font-size: 15px; font-weight: 600; color: #fff; }
.bullish-group .analysis-group-header { background: linear-gradient(135deg, #ff3b30, #ff6b5a); box-shadow: 0 4px 16px rgba(255,59,48,0.2); }
.bearish-group .analysis-group-header { background: linear-gradient(135deg, #34c759, #30d158); box-shadow: 0 4px 16px rgba(52,199,89,0.2); }
.watch-group .analysis-group-header { background: linear-gradient(135deg, #ff9500, #ffb340); box-shadow: 0 4px 16px rgba(255,149,0,0.2); }
.longterm-group .analysis-group-header { background: linear-gradient(135deg, #5856d6, #7b79e8); box-shadow: 0 4px 16px rgba(88,86,214,0.2); }
.analysis-group-icon { font-size: 12px; }
.analysis-card-wrap { background: var(--bg-card); border-bottom: 1px solid var(--border); overflow: hidden; cursor: pointer; }
.analysis-card-wrap:last-child { border-bottom: none; }
.analysis-card { display: flex; align-items: center; padding: 16px 14px; gap: 8px; }
.analysis-left { flex: 1; min-width: 0; overflow: hidden; }
.analysis-center { display: flex; flex-direction: column; align-items: center; gap: 3px; flex-shrink: 0; }
.action-tag.action-buy { background: #ff3b30; }
.action-tag.action-sell { background: #ff9500; }
.action-tag.action-exit { background: #34c759; }
.action-tag.action-watch { background: var(--text-secondary); }
.action-tag.action-long { background: #5856d6; }
.hold-tag { font-size: 10px; color: var(--text-secondary); white-space: nowrap; }
.sector-tag { display: inline-block; font-size: 10px; padding: 1px 5px; border-radius: 3px; background: var(--accent); color: #fff; margin-left: 4px; vertical-align: middle; }
.analysis-detail { max-height: 0; overflow: hidden; transition: max-height 0.3s ease; padding: 0 14px; }
.analysis-card-wrap.expanded .analysis-detail { max-height: 500px; padding: 0 14px 10px; }
.analysis-reason { font-size: 13px; color: var(--text-secondary); line-height: 1.5; margin-bottom: 8px; }
.capital-flow { margin-bottom: 8px; }
.capital-bar-wrap { height: 6px; background: var(--bg); border-radius: 3px; overflow: hidden; }
.capital-bar { height: 100%; border-radius: 3px; transition: width 0.3s ease; }
.capital-bar.inflow { background: var(--red); }
.capital-bar.outflow { background: var(--green); }
.capital-labels { display: flex; justify-content: space-between; font-size: 11px; }
.capital-label { font-weight: 500; }
.capital-label.up { color: var(--red); }
.capital-label.down { color: var(--green); }
.detail-section { margin-top: 10px; padding-top: 10px; border-top: 1px solid var(--border); }
.detail-label { font-size: 11px; font-weight: 700; color: var(--accent); margin-bottom: 6px; letter-spacing: 0.06em; text-transform: uppercase; }
.fund-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 5px; }
.fund-item { display: flex; flex-direction: column; align-items: center; padding: 6px 2px; background: var(--bg); border-radius: 8px; border: 1px solid var(--border); overflow: hidden; min-width: 0; }
.fund-key { font-size: 10px; color: var(--text-secondary); letter-spacing: 0.02em; }
.fund-val { font-size: 13px; font-weight: 700; margin-top: 3px; color: var(--text); max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.fund-val.up { color: var(--red); }
.fund-val.down { color: var(--green); }
.analysis-disclaimer { text-align: center; font-size: 11px; color: var(--text-secondary); padding: 8px 12px 4px; line-height: 1.5; }

/* ========== Profile ========== */
.profile-section { display: flex; flex-direction: column; align-items: center; padding-top: 24px; }
.profile-avatar-wrap { display: flex; flex-direction: column; align-items: center; gap: 8px; margin-bottom: 24px; }
.avatar-edit-btn { font-size: 13px; color: var(--accent); cursor: pointer; }
.form-group { width: 100%; margin-bottom: 16px; }
.form-group label { display: block; font-size: 13px; color: var(--text-secondary); margin-bottom: 6px; }

/* ========== Ticket (Concert) ========== */
.ticket-search { display: flex; gap: 8px; margin-bottom: 16px; }
.concert-card { display: flex; align-items: center; padding: 16px; gap: 12px; animation: cardSlideIn 0.3s ease-out both; }
.concert-info { flex: 1; min-width: 0; }
.concert-name { background: linear-gradient(135deg, var(--text), var(--accent)); -webkit-background-clip:text; -webkit-text-fill-color:transparent; background-clip:text; }
.concert-detail { font-size: 12px; color: var(--text-secondary); margin-top: 3px; }
.concert-prices { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 6px; }
.concert-price-tag { font-size: 12px; color: var(--red); font-weight: 500; background: rgba(248,113,113,0.1); padding: 2px 8px; border-radius: 4px; transition: transform 0.15s ease, box-shadow 0.15s ease; }
.concert-price-tag:hover { transform:scale(1.05); box-shadow:0 2px 8px var(--glow-red); }
.price-zone { color: var(--text-secondary); font-weight: 400; margin-right: 3px; }
.tag-king { background: #ff9500; } .tag-pop { background: var(--accent); } .tag-band { background: #34c759; } .tag-kpop { background: #af52de; } .tag-west { background: #ff2d55; }

/* ========== Pull to Refresh & Toast & Misc ========== */
.pull-indicator { position: fixed; top: calc(var(--safe-top) + 48px); left: 50%; transform: translateX(-50%) translateY(-60px); display: flex; align-items: center; gap: 8px; padding: 10px 20px; background: var(--bg-card); border-radius: 24px; font-size: 13px; font-weight: 500; color: var(--text-secondary); z-index: 100; transition: transform 0.35s cubic-bezier(0.175, 0.885, 0.32, 1.275), opacity 0.3s ease, background 0.25s ease, color 0.25s ease, box-shadow 0.25s ease; box-shadow: 0 4px 20px rgba(0,0,0,0.08); opacity: 0; pointer-events: none; backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px); }
.pull-indicator.pulling, .pull-indicator.threshold, .pull-indicator.refreshing, .pull-indicator.done { opacity: 1; }
.pull-indicator.threshold { background: var(--accent); color: #fff; box-shadow: 0 4px 24px rgba(79,70,229,0.35); }
.pull-indicator.done { background: var(--green); color: #fff; box-shadow: 0 4px 24px rgba(16,185,129,0.35); }
.pull-icon { position: relative; width: 18px; height: 18px; flex-shrink: 0; }
.pull-arrow, .pull-spinner, .pull-check { position: absolute; top: 0; left: 0; transition: opacity 0.25s ease, transform 0.3s ease; }
.pull-arrow { opacity: 1; transform-origin: center; }
.pull-spinner { opacity: 0; width: 18px; height: 18px; border: 2px solid rgba(255,255,255,0.3); border-top-color: #fff; border-radius: 50%; }
.pull-check { opacity: 0; color: #fff; }
.pull-indicator.refreshing .pull-arrow { opacity: 0; transform: rotate(180deg); }
.pull-indicator.refreshing .pull-spinner { opacity: 1; animation: spin 0.6s linear infinite; }
.pull-indicator.refreshing { background: var(--accent); color: #fff; box-shadow: 0 4px 24px rgba(79,70,229,0.35); }
.pull-indicator.done .pull-arrow { opacity: 0; }
.pull-indicator.done .pull-spinner { opacity: 0; }
.pull-indicator.done .pull-check { opacity: 1; animation: checkPop 0.35s cubic-bezier(0.175, 0.885, 0.32, 1.275); }
@keyframes checkPop { 0% { transform: scale(0) rotate(-45deg); } 100% { transform: scale(1) rotate(0deg); } }
@keyframes spin { to { transform: rotate(360deg); } }
.toast { position: fixed; bottom: calc(var(--safe-bottom) + 32px); left: 50%; transform: translateX(-50%) translateY(80px); padding: 10px 20px; background: var(--text); color: var(--bg); border-radius: 10px; font-size: 14px; z-index: 9999; opacity: 0; transition: all 0.3s ease; pointer-events: none; white-space: nowrap; }
.toast.show { transform: translateX(-50%) translateY(0); opacity: 1; }
.empty-state { text-align: center; padding: 32px 16px; color: var(--text-secondary); font-size: 14px; line-height: 1.6; }
.empty-state::before { content: '📭'; display: block; font-size: 28px; margin-bottom: 8px; opacity: 0.6; }
.error-state { text-align: center; padding: 24px 16px; color: var(--red); font-size: 14px; background: rgba(248,113,113,0.04); border: 1px solid rgba(248,113,113,0.1); border-radius: 10px; margin: 8px; line-height: 1.6; }
.error-state::before { content: '⚠'; display: block; font-size: 24px; margin-bottom: 6px; }
.analyze-loading { text-align: center; padding: 32px 16px; }
.analyze-loading-text { margin-top: 12px; color: var(--text-secondary); font-size: 14px; animation: shimmer 1s ease-in-out infinite alternate; }
.info-tip { text-align: center; font-size: 12px; color: var(--text-secondary); margin-top: 16px; line-height: 1.6; padding: 0 12px; }
.retry-btn { display: inline-block; margin-top: 10px; padding: 8px 22px; border: 1px solid var(--accent); border-radius: 8px; background: rgba(129,140,248,0.06); color: var(--accent); font-size: 13px; font-weight: 500; cursor: pointer; transition: all 0.15s; }
.retry-btn:active { background: var(--accent); color: #fff; transform: scale(0.97); }

/* Data freshness indicator dots */
.freshness-dot { display: inline-block; width: 7px; height: 7px; border-radius: 50%; margin-left: 6px; vertical-align: middle; }
.fresh-green { background: var(--green); box-shadow: 0 0 4px var(--glow-green); }
.fresh-yellow { background: #FBBF24; box-shadow: 0 0 4px rgba(251,191,36,0.3); }
.fresh-red { background: var(--red); box-shadow: 0 0 4px var(--glow-red); }

/* Metric tooltip system */
.metric-tip-icon { display: inline-flex; align-items: center; justify-content: center; width: 14px; height: 14px; border-radius: 50%; background: rgba(129,140,248,0.15); color: var(--accent); font-size: 9px; font-weight: 700; cursor: pointer; vertical-align: middle; margin-left: 2px; transition: all 0.15s; }
.metric-tip-icon:active { background: var(--accent); color: #fff; transform: scale(1.2); }
.metric-tip-popup { position: absolute; left: 0; right: 0; top: 100%; z-index: 100; background: rgba(255,255,255,0.97); border: 1px solid var(--glass-border); border-radius: 8px; padding: 8px 10px; font-size: 11px; line-height: 1.5; color: var(--text); box-shadow: 0 4px 20px rgba(0,0,0,0.1); opacity: 0; transform: translateY(-4px); transition: all 0.2s; pointer-events: none; backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px); }
.metric-tip-popup.show { opacity: 1; transform: translateY(2px); pointer-events: auto; }

/* Paper trading fee info */
.paper-fee-info { display: flex; align-items: center; gap: 8px; padding: 6px 10px; margin-top: 8px; background: rgba(129,140,248,0.06); border-radius: 6px; font-size: 11px; color: var(--text-sub); flex-wrap: wrap; }
.paper-fee-info b { color: var(--text); }
.paper-fee-detail { opacity: 0.7; }

/* Report share button */
.report-share-btn { display: inline-flex; align-items: center; gap: 4px; padding: 5px 12px; background: rgba(129,140,248,0.1); border: 1px solid rgba(129,140,248,0.2); border-radius: 6px; color: var(--accent); font-size: 11px; cursor: pointer; transition: all 0.15s; }
.report-share-btn:active { background: var(--accent); color: #fff; }

/* Paper trading charts grid */
.paper-charts-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin: 12px 0; }
@media (max-width: 480px) { .paper-charts-grid { grid-template-columns: 1fr; } }
.paper-chart-card { background: var(--glass-bg); border: 1px solid var(--glass-border); border-radius: 10px; padding: 10px; position: relative; max-height: 240px; }
.paper-chart-card canvas { max-height: 190px; }
.paper-chart-title { font-size: 11px; font-weight: 600; color: var(--text-secondary); margin-bottom: 6px; letter-spacing: 0.5px; }

/* Alpha filter bar */
.alpha-filter-bar { display: flex; gap: 6px; flex-wrap: wrap; padding: 8px 0; margin-bottom: 8px; }
.alpha-filter-chip { padding: 4px 10px; border-radius: 14px; font-size: 11px; border: 1px solid var(--border); background: transparent; color: var(--text-secondary); cursor: pointer; transition: all 0.15s; white-space: nowrap; }
.alpha-filter-chip.active { background: var(--accent); color: #fff; border-color: var(--accent); }
.alpha-filter-chip:active { transform: scale(0.95); }

/* CSV export button */
.export-csv-btn { display: inline-flex; align-items: center; gap: 4px; padding: 5px 14px; background: rgba(52,211,153,0.08); border: 1px solid rgba(52,211,153,0.2); border-radius: 6px; color: var(--green); font-size: 11px; cursor: pointer; transition: all 0.15s; margin-left: 8px; }
.export-csv-btn:active { background: var(--green); color: #fff; }

/* Compare modal */
.compare-modal { position: fixed; top: 0; left: 0; right: 0; bottom: 0; z-index: 999; background: rgba(0,0,0,0.3); display: flex; align-items: center; justify-content: center; padding: 16px; }
.compare-content { background: var(--bg); border: 1px solid var(--glass-border); border-radius: 14px; max-width: 600px; width: 100%; max-height: 85vh; overflow-y: auto; padding: 16px; }
.compare-table { width: 100%; border-collapse: collapse; font-size: 12px; }
.compare-table th { text-align: left; padding: 6px 8px; color: var(--text-secondary); border-bottom: 1px solid var(--border); font-weight: 500; }
.compare-table td { padding: 6px 8px; border-bottom: 1px solid rgba(0,0,0,0.03); }
.compare-close { position: absolute; top: 10px; right: 14px; font-size: 20px; color: var(--text-secondary); cursor: pointer; background: none; border: none; }

/* ========== Single Stock Analysis Result ========== */
.sa-header { background: var(--bg-card); border-radius: 16px; padding: 16px; margin-bottom: 10px; box-shadow: var(--shadow); border: 1px solid var(--border); position:relative; overflow:hidden; }
.sa-header::after { content:''; position:absolute; top:0; left:8%; right:8%; height:1px; background:linear-gradient(90deg, transparent, var(--glow-accent), transparent); pointer-events:none; }
.sa-pct { font-size: 16px; font-weight: 600; margin-left: 6px; }
.sa-sub { font-size: 12px; color: var(--text-secondary); line-height: 1.6; }
.sa-sub b { color: var(--text); font-weight: 600; }
.sa-updated { font-size: 12px; color: var(--text-secondary); margin-top: 4px; }
.sa-section { background: var(--bg-card); border-radius: 16px; padding: 16px; margin-bottom: 10px; box-shadow: var(--shadow); border: 1px solid var(--border); position:relative; overflow:hidden; transition: transform 0.2s ease, box-shadow 0.3s ease, border-color 0.3s ease; animation: cardSlideIn 0.35s ease-out both; }
.sa-section::after { content:''; position:absolute; top:0; left:10%; right:10%; height:1px; background:linear-gradient(90deg, transparent, var(--glow-accent), transparent); pointer-events:none; }
.sa-section:hover { border-color:rgba(129,140,248,0.2); box-shadow:0 8px 30px rgba(0,0,0,0.06), 0 0 16px var(--glow-accent); }
.sa-section-title { font-size: 13px; font-weight: 700; margin-bottom: 12px; padding-bottom: 8px; border-bottom: 2px solid transparent; border-image: linear-gradient(90deg, var(--accent), rgba(167,139,250,0.4), transparent) 1; color: var(--accent); letter-spacing: 0.04em; text-transform: uppercase; text-shadow: 0 0 12px var(--glow-accent); }
.sa-fund-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; }
.sa-fund-item { display: flex; flex-direction: column; align-items: center; padding: 10px 6px; background: var(--bg); border-radius: 10px; border: 1px solid var(--border); transition: transform 0.2s ease, box-shadow 0.2s ease; }
.sa-fund-item:hover { transform:translateY(-2px); box-shadow:0 4px 12px rgba(0,0,0,0.06); }
.sa-fund-key { font-size: 11px; color: var(--text-secondary); text-align: center; line-height: 1.3; letter-spacing: 0.03em; }
.sa-fund-val { font-size: 15px; font-weight: 700; margin-top: 4px; font-family: 'JetBrains Mono', monospace; color: var(--text); }
.sa-text { font-size: 13px; line-height: 1.7; color: var(--text); }
.sa-text-risk { color: var(--red); }
.sa-text-summary { background: linear-gradient(135deg, rgba(102,126,234,0.06), rgba(118,75,162,0.06)); padding: 10px 12px; border-radius: 8px; border-left: 3px solid var(--accent); }
.sa-ai-section { border: 1px solid rgba(79,70,229,0.35); background: linear-gradient(135deg, rgba(79,70,229,0.05), rgba(16,185,129,0.04)); box-shadow: 0 0 24px rgba(79,70,229,0.08), inset 0 1px 0 rgba(0,0,0,0.05); }
.sa-ai-text { line-height: 1.8; color: var(--text); }
.sa-news { display: flex; flex-direction: column; gap: 4px; }
.sa-news-item { font-size: 13px; color: var(--text-secondary); line-height: 1.5; padding: 6px 0; border-bottom: 1px solid var(--border); }
.sa-news-item:last-child { border-bottom: none; }
.sa-peers-wrap { overflow-x: auto; -webkit-overflow-scrolling: touch; margin: 0 -14px; padding: 0 14px; }
.sa-peers-table { width: 100%; min-width: 480px; border-collapse: collapse; }
.sa-peers-table th { background: transparent !important; border-bottom: 2px solid var(--border) !important; font-size: 12px !important; text-transform: uppercase; letter-spacing: 0.05em; padding: 8px 4px; color: var(--text-secondary); text-align: center; }
.sa-peers-table th .th-sub { font-weight: 400; font-size: 9px; opacity: 0.7; }
.sa-peers-table td { border-bottom: 1px solid var(--border) !important; font-size: 13px !important; padding: 10px 4px; text-align: center; }
.sa-peers-table tr:last-child td { border-bottom: none; }
.sa-peers-table .peer-name-cell { text-align: left; font-weight: 500; max-width: 80px; overflow: hidden; text-overflow: ellipsis; font-family: 'Inter', sans-serif !important; }
.peer-code-sub { font-size: 10px; color: var(--text-secondary); font-weight: 400; font-family: 'JetBrains Mono', monospace; }
.sa-peers-table .peer-self { background: var(--bg) !important; }
.sa-peers-table .peer-self td { font-weight: 600; }
.sa-chart-wrap { position: relative; width: 100%; margin: 8px 0; max-height: 300px; }
.sa-radar-wrap { max-width: 340px; margin: 8px auto; }
.sa-chart-wrap canvas { width: 100% !important; }
.sa-strat-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; margin-top: 8px; }
.sa-strat-card { background: var(--bg); border-radius: 10px; padding: 10px 12px; border-left: 3px solid var(--border); transition: transform 0.15s; }
.sa-strat-card:active { transform: scale(0.98); }
.sa-strat-head { display: flex; align-items: center; gap: 6px; margin-bottom: 4px; }
.sa-strat-icon { font-size: 16px; }
.sa-strat-name { font-size: 13px; font-weight: 600; color: var(--text); }
.sa-strat-text { font-size: 12px; line-height: 1.6; color: var(--text-sub); }
.sa-strat-card.strat-good { border-left-color: #34c759; background: rgba(52,199,89,0.06); }
.sa-strat-card.strat-mid { border-left-color: #f5a623; background: rgba(245,166,35,0.06); }
.sa-strat-card.strat-warn { border-left-color: #ff9500; background: rgba(255,149,0,0.06); }
.sa-strat-card.strat-bad { border-left-color: #ff3b30; background: rgba(225,29,72,0.06); }
.sa-peer-rec { margin-top: 10px; display: flex; flex-direction: column; gap: 8px; }
.sa-rec-card { background: linear-gradient(135deg, rgba(102,126,234,0.06), rgba(52,199,89,0.06)); border-left: 3px solid var(--accent); border-radius: 8px; padding: 10px 12px; }
.sa-rec-head { font-size: 13px; font-weight: 600; color: var(--text); margin-bottom: 6px; }
.sa-rec-reason { font-size: 12px; line-height: 1.7; color: var(--text-sub); margin-top: 6px; padding-top: 6px; border-top: 1px dashed var(--border); word-break: break-word; overflow-wrap: anywhere; }
.sa-cmp-table { width: 100%; font-size: 11px; border-collapse: collapse; margin: 4px 0; }
.sa-cmp-table th { background: rgba(0,0,0,0.03); font-weight: 600; text-align: center; padding: 4px 6px; color: var(--text-secondary); border-bottom: 1px solid var(--border); }
.sa-cmp-table td { text-align: center; padding: 4px 6px; border-bottom: 1px solid rgba(0,0,0,0.03); color: var(--text); }
.sa-cmp-table td:first-child { text-align: left; font-weight: 500; }
.sa-cmp-table .v-good { color: #34c759; font-weight: 700; } .sa-cmp-table .v-ok { color: var(--accent); font-weight: 600; } .sa-cmp-table .v-mid { color: var(--text-secondary); } .sa-cmp-table .v-bad { color: var(--red); font-weight: 600; }

/* ========== Chanlun AI Stock Picker ========== */
.chanlun-stats { padding: 0 14px 8px; }
.cl-stats-row { display: flex; align-items: center; gap: 10px; padding: 12px 16px; background: var(--bg-card); border-radius: 16px; box-shadow: var(--shadow); border: 1px solid var(--border); flex-wrap: wrap; position:relative; overflow:hidden; justify-content: center; }
.cl-stats-row::after { content:''; position:absolute; top:0; left:10%; right:10%; height:1px; background:linear-gradient(90deg, transparent, var(--glow-accent), transparent); pointer-events:none; }
.cl-section-title { font-size: 15px; font-weight: 700; color: var(--accent); padding: 14px 4px 6px; border-bottom: 2px solid var(--accent); margin-bottom: 8px; }
.cl-mkt { display: inline-block; font-size: 11px; font-weight: 700; color: #fff; border-radius: 3px; padding: 1px 5px; margin-right: 4px; vertical-align: middle; }
.cl-mkt.us { background: #1a73e8; } .cl-mkt.hk { background: #e53935; }
.cl-stat { display: flex; flex-direction: column; align-items: center; }
.cl-stat-label { font-size: 11px; color: var(--text-secondary); margin-top: 2px; }
.cl-stat-time { margin-left: auto; font-size: 11px; color: var(--text-secondary); }
.chanlun-card { padding: 16px; animation: cardSlideIn 0.3s ease-out both; }
.cl-header { display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 12px; }
.cl-title { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.cl-price { font-size: 16px; font-weight: 700; text-align: right; white-space: nowrap; }
.cl-price span { font-size: 13px; margin-left: 4px; }
.cl-zs-title { font-size: 13px; font-weight: 600; color: var(--accent); margin-bottom: 8px; }
.cl-zs-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 6px 12px; }
.cl-zs-grid > div { display: flex; justify-content: space-between; font-size: 12px; }
.cl-label { color: var(--text-secondary); }
.cl-val { font-weight: 500; color: var(--text); }
.cl-symmetry { margin-top: 6px; font-size: 12px; color: #f5a623; }
.cl-sig-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 6px; }
.cl-sig-type { font-size: 14px; font-weight: 600; color: var(--text); }
.cl-sig-conf { font-size: 12px; font-weight: 600; }
.cl-signal-high .cl-sig-conf { color: var(--red); } .cl-signal-mid .cl-sig-conf { color: #f5a623; } .cl-signal-low .cl-sig-conf { color: var(--text-secondary); }
.cl-sig-timing { font-size: 13px; font-weight: 500; color: var(--accent); margin-bottom: 4px; }
.cl-sig-detail { display: flex; gap: 16px; font-size: 12px; color: var(--text-secondary); margin-bottom: 4px; }
.cl-buy-price { color: var(--red); font-weight: 600; }
.cl-sig-reason { font-size: 12px; color: var(--text-secondary); line-height: 1.4; }
.cl-learned-ctx { font-size: 12px; line-height: 1.5; padding: 8px 10px; margin-bottom: 10px; border-radius: 6px; background: rgba(102,126,234,0.08); color: var(--accent); border-left: 3px solid var(--accent); }
.cl-chart { margin-bottom: 10px; }
.cl-chart .chart-tabs { display: flex; gap: 6px; margin-bottom: 6px; }
.cl-chart .stock-chart-img { width: 100%; border-radius: 8px; }
.cl-footer { display: flex; justify-content: space-between; font-size: 12px; color: var(--text-secondary); padding-top: 8px; border-top: 1px solid var(--border); margin-bottom: 8px; }
.cl-action { text-align: center; }
.cl-action button { background: none; border: none; color: var(--accent); font-size: 13px; font-weight: 500; cursor: pointer; padding: 4px 12px; }
.cl-action button:hover { text-decoration: underline; }
.cl-health-header { display: flex; justify-content: space-between; font-weight: 600; margin-bottom: 6px; color: var(--text); }
.cl-health-score { font-weight: 700; }
.cl-health-good .cl-health-score { color: var(--green); } .cl-health-mid .cl-health-score { color: #f5a623; } .cl-health-bad .cl-health-score { color: var(--red); }
.cl-health-details { color: var(--text-secondary); line-height: 1.5; }
.cl-health-warnings { margin-top: 6px; display: flex; flex-wrap: wrap; gap: 4px; }
.cl-health-warnings span { background: rgba(225,29,72,0.1); color: var(--red); padding: 2px 8px; border-radius: 4px; font-size: 11px; }
.sa-health-good { border-left: 3px solid var(--green) !important; } .sa-health-mid { border-left: 3px solid #f5a623 !important; } .sa-health-bad { border-left: 3px solid var(--red) !important; }
.sa-health-badge { font-size: 13px; font-weight: 700; margin-left: 8px; }
.sa-health-good .sa-health-badge { color: var(--green); } .sa-health-mid .sa-health-badge { color: #f5a623; } .sa-health-bad .sa-health-badge { color: var(--red); }
.sa-health-body { padding: 8px 0; }
.sa-health-item { font-size: 13px; color: var(--text-secondary); line-height: 1.6; padding: 2px 0; }
.sa-health-warnings { margin-top: 8px; padding-top: 8px; border-top: 1px dashed var(--border); }
.sa-health-warn { color: var(--red); font-size: 13px; padding: 2px 0; }
.sa-health-trend { margin-top: 10px; overflow-x: auto; }
.sa-health-trend table { width: 100%; border-collapse: collapse; font-size: 12px; }
.sa-health-trend th { background: var(--bg); padding: 6px 8px; text-align: right; white-space: nowrap; font-weight: 500; color: var(--text-secondary); }
.sa-health-trend th:first-child { text-align: left; }
.sa-health-trend td { padding: 5px 8px; text-align: right; border-bottom: 1px solid var(--border); white-space: nowrap; }
.sa-health-trend td:first-child { text-align: left; font-weight: 500; }

.cl-sub-tabs { display: flex; gap: 0; padding: 0 14px 8px; }
.cl-sub-tab { flex: 1; height: 32px; border: 1px solid var(--border); background: transparent; color: var(--text-secondary); font-size: 13px; font-weight: 500; cursor: pointer; border-radius: 0; transition: all 0.2s ease; }
.cl-sub-tab.active { background: var(--accent); color: #fff; border-color: var(--accent); box-shadow: 0 2px 12px var(--glow-accent); }
.cl-sub-tab:first-child { border-radius: 8px 0 0 8px !important; }
.cl-sub-tab:last-child { border-radius: 0 8px 8px 0 !important; border-left: none !important; }
.cl-subpanel { display: none; } .cl-subpanel.active { display: block; }
.clt-summary { padding: 16px; margin-bottom: 12px; }
.clt-summary-empty { text-align: center; color: var(--text-secondary); font-size: 13px; padding: 8px 0; }
.clt-summary-row { display: flex; justify-content: space-around; gap: 8px; }
.clt-best-worst { display: flex; justify-content: space-between; margin-top: 10px; padding-top: 8px; border-top: 1px solid var(--border); font-size: 12px; color: var(--text-secondary); }
.clt-best { color: var(--red); font-weight: 600; margin-left: 4px; } .clt-worst { font-weight: 600; margin-left: 4px; } .clt-worst.up { color: var(--red); } .clt-worst.down { color: var(--green); }
.tracker-filters { display: flex; flex-direction: column; gap: 6px; padding: 0 0 10px; }
.clt-filter-group { display: flex; align-items: center; gap: 4px; }
.clt-filter-label { font-size: 11px; color: var(--text-secondary); width: 32px; flex-shrink: 0; }
.clt-filter-btn { flex: 1; height: 28px; border: 1px solid var(--border); border-radius: 6px; background: transparent; color: var(--text-secondary); font-size: 12px; cursor: pointer; transition: all 0.15s; }
.clt-filter-btn.active { background: var(--accent); color: #fff; border-color: var(--accent); }
.clt-metrics { display: grid; grid-template-columns: repeat(4, 1fr); gap: 6px; margin-bottom: 10px; }
.clt-metric { display: flex; flex-direction: column; align-items: center; padding: 6px 4px; background: var(--bg); border-radius: 8px; }
.clt-metric-val { font-size: 15px; font-weight: 700; font-family: 'JetBrains Mono', monospace; }
.clt-metric-key { font-size: 10px; color: var(--text-secondary); margin-top: 2px; }
.clt-card { padding: 16px; }
.clt-card-header { display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 12px; }
.clt-card-title { display: flex; align-items: center; gap: 4px; flex-wrap: wrap; flex: 1; min-width: 0; }
.clt-badges { display: flex; gap: 4px; flex-shrink: 0; }
.clt-grade-a { background: #ff3b30; } .clt-grade-b { background: #ff9500; } .clt-grade-c { background: var(--accent); } .clt-grade-d { background: #8e8e93; }
.clt-status { font-size: 11px; font-weight: 600; padding: 2px 8px; border-radius: 4px; white-space: nowrap; }
.clt-st-bullish { background: rgba(225,29,72,0.12); color: var(--red); } .clt-st-new { background: rgba(102,126,234,0.12); color: var(--accent); } .clt-st-confirming { background: rgba(255,149,0,0.12); color: #ff9500; } .clt-st-target { background: rgba(255,204,0,0.15); color: #b8860b; } .clt-st-weakening { background: rgba(142,142,147,0.12); color: var(--text-secondary); } .clt-st-stoploss { background: rgba(52,199,89,0.12); color: var(--green); }
.clt-board-warn { font-size: 11px; font-weight: 700; padding: 2px 7px; border-radius: 4px; background: rgba(225,29,72,0.15); color: #E11D48; white-space: nowrap; animation: warn-pulse 2s ease-in-out infinite; }
@keyframes warn-pulse { 0%,100% { opacity:1; } 50% { opacity:0.6; } }
.clt-prices { display: grid; grid-template-columns: repeat(3, 1fr); gap: 4px; margin-bottom: 10px; font-size: 12px; }
.clt-prices > div { display: flex; flex-direction: column; align-items: center; gap: 2px; }
.clt-price-label { font-size: 10px; color: var(--text-secondary); }
.clt-progress { margin-bottom: 10px; }
.clt-progress-labels { display: flex; justify-content: space-between; font-size: 10px; color: var(--text-secondary); margin-bottom: 4px; }
.clt-progress-bar { height: 6px; background: var(--bg); border-radius: 3px; overflow: hidden; }
.clt-progress-fill { height: 100%; border-radius: 3px; transition: width 0.3s ease; }
.clt-progress-pct { text-align: right; font-size: 11px; font-weight: 600; color: var(--text-secondary); margin-top: 2px; }
.clt-hint { font-size: 12px; line-height: 1.5; color: var(--accent); background: rgba(102,126,234,0.06); padding: 8px 10px; border-radius: 6px; border-left: 3px solid var(--accent); margin-bottom: 10px; word-break: break-word; overflow-wrap: anywhere; }
.clt-card-footer { display: flex; justify-content: space-between; align-items: center; padding-top: 8px; border-top: 1px solid var(--border); }
.clt-date { font-size: 11px; color: var(--text-secondary); }
.clt-detail-btn { background: none; border: none; color: var(--accent); font-size: 12px; font-weight: 500; cursor: pointer; padding: 2px 8px; }
.clt-detail-btn:active { opacity: 0.6; }
.clt-more-hint { text-align: center; font-size: 12px; color: var(--text-secondary); padding: 12px 0; }
.clt-card-grade-a { border-left: 4px solid #ff3b30 !important; } .clt-card-grade-b { border-left: 4px solid #ff9500 !important; } .clt-card-grade-c { border-left: 4px solid var(--accent) !important; } .clt-card-grade-d { border-left: 4px solid #8e8e93 !important; }
.clt-metric-pnl { background: rgba(225,29,72,0.06) !important; border: 1px solid rgba(225,29,72,0.15) !important; }
.cl-quality-dots { display: inline-flex; gap: 3px; margin-left: 6px; vertical-align: middle; }
.cl-dot { display: inline-flex; align-items: center; justify-content: center; width: 18px; height: 18px; border-radius: 50%; font-size: 9px; font-weight: 700; color: #fff; }
.cl-dot.dot-pass { background: #34c759; } .cl-dot.dot-fail { background: #8e8e93; }
.cl-vp-alerts { margin: 6px 0; }
.cl-vp-alert { font-size: 12px; line-height: 1.5; padding: 6px 10px; border-radius: 6px; margin-bottom: 4px; }
.cl-vp-warn { background: rgba(255,149,0,0.1); color: #cc7700; border-left: 3px solid #ff9500; }
.cl-vp-danger { background: rgba(225,29,72,0.1); color: #cc2200; border-left: 3px solid var(--red); }
.clt-sector-warn { font-size: 12px; line-height: 1.5; padding: 8px 10px; margin-top: 8px; border-radius: 6px; background: rgba(255,149,0,0.1); color: #cc7700; border-left: 3px solid #ff9500; }
.sa-tracker-header { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-bottom: 12px; }
.sa-tracker-title { font-weight: 700; font-size: 15px; }
.sa-tracker-prices { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; font-size: 13px; color: var(--text-secondary); margin-bottom: 12px; }
.sa-tracker-date-range { margin-left: auto; font-size: 11px; color: var(--text-sub); }
.sa-tracker-charts { display: flex; gap: 12px; margin-bottom: 12px; }
.sa-tracker-mini-chart { flex: 1; background: rgba(0,0,0,0.02); border-radius: 10px; padding: 8px 10px; min-width: 0; }
.sa-tracker-chart-label { font-size: 11px; color: var(--text-secondary); margin-bottom: 4px; }
.sa-tracker-svg { width: 100%; height: 36px; display: block; }
.sa-tracker-trend { font-size: 13px; font-weight: 600; color: var(--text); padding: 6px 10px; background: rgba(102,126,234,0.06); border-radius: 8px; margin-bottom: 8px; }
.sa-tracker-score-impact { font-size: 12px; color: var(--text-secondary); padding: 4px 10px; margin-bottom: 6px; font-style: italic; }
.sa-tracker-hint { font-size: 13px; color: var(--accent); padding: 8px 10px; background: rgba(102,126,234,0.05); border-radius: 8px; line-height: 1.5; }
.sa-tracker-alerts { margin-top: 10px; }
.sa-tracker-alerts-title { font-size: 12px; color: var(--text-secondary); margin-bottom: 6px; }
.sa-tracker-alert { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; padding: 4px 0; font-size: 12px; border-bottom: 1px solid rgba(0,0,0,0.03); }
.sa-tracker-alert:last-child { border-bottom: none; }
.sa-tracker-alert-date { color: var(--text-secondary); font-size: 11px; min-width: 40px; }
.sa-tracker-alert-tag { background: rgba(255,149,0,0.1); color: #ff9500; padding: 2px 6px; border-radius: 4px; font-size: 11px; }
.cli-milestone { background: linear-gradient(135deg, #ff9500, #ff6b00); color: #fff; padding: 12px 16px; border-radius: 12px; display: flex; align-items: center; justify-content: space-between; margin-bottom: 12px; font-size: 13px; font-weight: 500; }
.cli-milestone-close { background: rgba(0,0,0,0.12); border: none; color: #fff; padding: 4px 12px; border-radius: 8px; font-size: 12px; cursor: pointer; white-space: nowrap; margin-left: 8px; }
.cli-sentiment { border-radius: 16px; padding: 16px; margin-bottom: 12px; position: relative; overflow: hidden; border: 1px solid var(--border); background: var(--bg-card); }
.cli-sent-bull { border-left: 4px solid var(--green); }
.cli-sent-mild { border-left: 4px solid var(--accent); }
.cli-sent-caution { border-left: 4px solid #ff9500; }
.cli-sent-bear { border-left: 4px solid var(--red); }
.cli-sent-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 8px; }
.cli-sent-title { font-size: 13px; color: var(--text-secondary); font-weight: 500; }
.cli-sent-trend { font-size: 14px; font-weight: 600; }
.cli-sent-bull .cli-sent-trend { color: var(--green); } .cli-sent-mild .cli-sent-trend { color: var(--accent); } .cli-sent-caution .cli-sent-trend { color: #ff9500; } .cli-sent-bear .cli-sent-trend { color: var(--red); }
.cli-sentiment-score { font-size: 36px; font-weight: 700; text-align: center; margin: 4px 0 8px; font-family: 'JetBrains Mono', monospace; }
.cli-sent-bull .cli-sentiment-score { color: var(--green); } .cli-sent-mild .cli-sentiment-score { color: var(--accent); } .cli-sent-caution .cli-sentiment-score { color: #ff9500; } .cli-sent-bear .cli-sentiment-score { color: var(--red); }
.cli-sent-gauge-wrap { margin: 8px 0 12px; }
.cli-sent-gauge { position: relative; height: 8px; background: linear-gradient(to right, var(--red), #ff9500, var(--accent), var(--green)); border-radius: 4px; overflow: visible; }
.cli-sent-gauge-fill { position: absolute; top: 0; left: 0; height: 100%; border-radius: 4px; }
.cli-sent-gauge-needle { position: absolute; top: -4px; width: 4px; height: 16px; background: var(--text); border-radius: 2px; transform: translateX(-50%); }
.cli-sent-gauge-labels { display: flex; justify-content: space-between; font-size: 10px; color: var(--text-secondary); margin-top: 4px; padding: 0 2px; }
.cli-sent-detail { font-size: 13px; color: var(--text-secondary); text-align: center; margin-bottom: 8px; line-height: 1.5; }
.cli-c-pos { color: var(--green); } .cli-c-neg { color: var(--red); }
.cli-sent-sources { display: flex; flex-wrap: wrap; gap: 4px; justify-content: center; margin: 8px 0; }
.cli-src-tag { font-size: 10px; padding: 2px 8px; border-radius: 8px; background: var(--bg); color: var(--text-secondary); }
.cli-sent-explain { font-size: 11px; color: var(--text-secondary); text-align: center; margin-top: 10px; opacity: .7; }
.cli-keywords { display: flex; flex-wrap: wrap; gap: 6px; justify-content: center; }
.cli-keyword-tag { padding: 3px 10px; border-radius: 10px; font-size: 11px; font-weight: 500; }
.cli-kw-pos { background: rgba(16,185,129,0.1); color: var(--green); } .cli-kw-neg { background: rgba(225,29,72,0.1); color: var(--red); }
.cli-reco-grid { display: grid; grid-template-columns: 1fr; gap: 12px; margin-bottom: 14px; }
@media (min-width: 600px) { .cli-reco-grid { grid-template-columns: 1fr 1fr 1fr; } }
.cli-reco-title { font-size: 13px; font-weight: 600; margin-bottom: 8px; padding-bottom: 6px; border-bottom: 1px solid var(--border); }
.cli-reco-buy .cli-reco-title { color: var(--green); } .cli-reco-sell .cli-reco-title { color: var(--red); } .cli-reco-hold .cli-reco-title { color: #ff9500; }
.cli-reco-empty { font-size: 12px; color: var(--text-secondary); text-align: center; padding: 10px 0; }
.cli-reco-card { padding: 12px; border-radius: 12px; margin-bottom: 8px; cursor: pointer; transition: background 0.15s; background: var(--bg); border: 1px solid var(--border); }
.cli-reco-card:hover { background: var(--bg-card); box-shadow: var(--shadow); }
.cli-reco-card-buy { border-left: 3px solid var(--green); } .cli-reco-card-sell { border-left: 3px solid var(--red); } .cli-reco-card-hold { border-left: 3px solid #ff9500; }
.cli-reco-card-top { font-size: 13px; display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.cli-reco-card-top strong { font-weight: 600; }
.cli-reco-card-prices { font-size: 11px; color: var(--text-secondary); margin-top: 4px; display: flex; gap: 8px; flex-wrap: wrap; }
.cli-reco-card-wr { font-size: 11px; color: var(--accent); margin-top: 4px; font-weight: 500; }
.cli-held-tag { font-size: 10px; background: #ff9800; color: #fff; padding: 2px 6px; border-radius: 4px; font-weight: 600; }
.cli-held-btn { background: var(--bg-card); border: 1px solid var(--border); color: var(--text-secondary); font-size: 11px; padding: 4px 10px; border-radius: 6px; cursor: pointer; transition: all 0.2s; margin-top: 6px; font-weight: 500; }
.cli-held-btn:active { background: var(--accent); color: #fff; border-color: var(--accent); }
.cli-reco-card-reason { font-size: 11px; color: var(--text-secondary); margin-top: 6px; line-height: 1.5; word-break: break-word; overflow-wrap: anywhere; }
.cli-sectors { margin: 12px 0 8px; }
.cli-sectors-title { font-size: 14px; font-weight: 600; margin-bottom: 8px; color: var(--text); }
.cli-sectors-list { display: grid; grid-template-columns: repeat(auto-fill, minmax(160px, 1fr)); gap: 8px; }
.cli-sec-card { background: var(--bg-card); border-radius: 12px; padding: 12px; border: 1px solid var(--border); box-shadow: var(--shadow); }
.cli-sec-header { font-size: 13px; display: flex; justify-content: space-between; align-items: center; margin-bottom: 8px; }
.cli-sec-header strong { font-weight: 600; }
.cli-sec-stocks { display: flex; flex-direction: column; gap: 6px; }
.cli-sec-stock { font-size: 12px; cursor: pointer; display: flex; align-items: center; gap: 4px; padding: 4px 0; border-bottom: 1px solid var(--border); }
.cli-sec-stock:last-child { border-bottom: none; }
.cli-sec-stock:hover { color: var(--accent); }
.cli-sec-stock em { font-style: normal; font-weight: 600; }
.cli-sec-stock small { color: var(--text-secondary); font-size: 10px; font-family: 'JetBrains Mono', monospace; }
.cli-stats-grid { display: grid; grid-template-columns: repeat(5, 1fr); gap: 8px; margin-bottom: 14px; }
@media (max-width: 500px) { .cli-stats-grid { grid-template-columns: repeat(3, 1fr); } }
.cli-stat-card { background: var(--bg-card); border-radius: 12px; padding: 12px 6px; text-align: center; border: 1px solid var(--border); box-shadow: var(--shadow); }
.cli-stat-num { font-size: 18px; font-weight: 700; font-family: 'JetBrains Mono', monospace; }
.cli-stat-label { font-size: 10px; color: var(--text-secondary); margin-top: 4px; }
.cli-section-title { font-size: 14px; font-weight: 600; margin-bottom: 10px; padding-top: 4px; }
.cli-sector-section, .cli-feature-section { background: var(--bg-card); border-radius: 16px; padding: 16px; margin-bottom: 12px; border: 1px solid var(--border); box-shadow: var(--shadow); }
.cli-sector-row { display: flex; align-items: center; gap: 8px; padding: 6px 0; font-size: 12px; border-bottom: 1px solid var(--border); }
.cli-sector-row:last-child { border-bottom: none; }
.cli-sector-name { width: 80px; flex-shrink: 0; font-weight: 500; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.cli-bar-good { background: var(--green); } .cli-bar-mid { background: #ff9500; } .cli-bar-bad { background: var(--red); }
.cli-sector-bar-wrap { flex: 1; height: 8px; background: var(--bg); border-radius: 4px; overflow: hidden; }
.cli-sector-bar { height: 100%; border-radius: 4px; transition: width 0.3s ease; }
.cli-sector-wr { width: 70px; text-align: right; flex-shrink: 0; font-size: 11px; font-family: 'JetBrains Mono', monospace; }
.cli-sector-pnl { width: 50px; text-align: right; flex-shrink: 0; font-size: 11px; font-weight: 600; font-family: 'JetBrains Mono', monospace; }
.cli-lessons { background: var(--bg-card); border-radius: 16px; padding: 16px; margin-bottom: 12px; border: 1px solid var(--border); box-shadow: var(--shadow); }
.cli-lesson { display: flex; align-items: flex-start; justify-content: space-between; gap: 8px; padding: 10px; border-radius: 8px; margin-bottom: 8px; font-size: 12px; background: var(--bg); }
.cli-lesson:last-child { margin-bottom: 0; }
.cli-lesson-pos { border-left: 3px solid var(--green); }
.cli-lesson-warn { border-left: 3px solid #ff9500; }
.cli-lesson-text { flex: 1; line-height: 1.5; }
.cli-lesson-conf { flex-shrink: 0; font-size: 10px; color: var(--text-secondary); padding: 2px 6px; background: var(--bg-card); border-radius: 6px; border: 1px solid var(--border); }
.cli-empty-hint { text-align: center; color: var(--text-secondary); font-size: 13px; padding: 30px 16px; line-height: 1.6; }
.cli-accumulating { text-align: center; padding: 24px 16px; margin: 12px; border-radius: 16px; background: var(--bg-card); border: 1px dashed var(--border); box-shadow: var(--shadow); }
.cli-acc-icon { font-size: 28px; margin-bottom: 8px; }
.cli-acc-title { font-size: 15px; font-weight: 600; color: var(--text); margin-bottom: 6px; }
.cli-acc-desc { font-size: 12px; color: var(--text-secondary); line-height: 1.6; }
.cli-learn-progress { background: var(--bg-card); border: 1px solid var(--border); border-radius: 16px; padding: 16px; margin-bottom: 16px; box-shadow: var(--shadow); }
.cli-learn-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; margin-top: 12px; }
.cli-learn-item { text-align: center; background: var(--bg); padding: 10px 0; border-radius: 12px; }
.cli-learn-num { font-size: 22px; font-weight: 700; color: var(--accent); font-family: 'JetBrains Mono', monospace; }
.cli-learn-label { font-size: 11px; color: var(--text-secondary); margin-top: 4px; font-weight: 500; }
.cli-learn-best { font-size: 13px; color: var(--text-secondary); margin-top: 12px; text-align: center; background: rgba(16,185,129,0.05); padding: 8px; border-radius: 8px; border: 1px solid rgba(16,185,129,0.1); }
.cli-learn-best strong { color: var(--green); font-weight: 600; }

/* Dark mode: always active (forced dark theme) */
.cl-learned-ctx { background: rgba(129,140,248,0.12); }
.cli-reco-card:hover { background: rgba(0,0,0,0.03); }
.cli-kw-pos { background: rgba(52,211,153,0.15); color: #059669; }
.cli-kw-neg { background: rgba(248,113,113,0.15); color: #DC2626; }
.cli-learn-best { background: rgba(52,211,153,0.1); border-color: rgba(52,211,153,0.2); }

/* ========== Market Sentiment Banner ========== */
.sentiment-banner {
    display: flex; align-items: center; gap: 10px;
    padding: 10px 14px; border-radius: 10px; margin-bottom: 12px;
    font-size: 13px; font-weight: 500;
}
.sentiment-banner .sb-icon { font-size: 20px; }
.sentiment-banner .sb-score { font-family: 'JetBrains Mono', monospace; font-weight: 700; font-size: 18px; }
.sentiment-banner .sb-trend { font-size: 14px; font-weight: 600; }
.sentiment-banner .sb-summary { font-size: 12px; opacity: 0.85; flex: 1; }
.sentiment-greed { background: rgba(16,185,129,0.12); border: 1px solid rgba(16,185,129,0.3); color: #059669; }
.sentiment-neutral { background: rgba(245,158,11,0.12); border: 1px solid rgba(245,158,11,0.3); color: #D97706; }
.sentiment-fear { background: rgba(225,29,72,0.12); border: 1px solid rgba(225,29,72,0.35); color: #E11D48; }
.sentiment-fear .sb-warn { font-weight: 700; margin-left: 4px; }

/* ========== Risk Badge on Stock Cards ========== */
.risk-badge {
    position: absolute; top: 6px; right: 6px; z-index: 2;
    font-size: 10px; font-weight: 700; padding: 2px 6px;
    border-radius: 4px; color: #fff; line-height: 1.2;
}
.stock-card-wrap { position: relative; }

/* ========== Chanlun Cross-reference on Analysis Cards ========== */
.chanlun-crossref {
    display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
    margin-top: 8px; padding: 6px 10px; border-radius: 6px;
    background: rgba(79,70,229,0.08); border: 1px solid rgba(79,70,229,0.2);
    font-size: 12px; color: var(--text-secondary);
}
.chanlun-crossref .ccr-icon { font-size: 14px; }
.chanlun-crossref .ccr-conf { font-weight: 600; color: var(--accent, #818CF8); }
.chanlun-crossref .ccr-val { font-family: 'JetBrains Mono', monospace; font-weight: 500; }

/* ========== Sentiment Warning on Analyze Page ========== */
.sentiment-warning {
    padding: 10px 14px; border-radius: 10px; margin-bottom: 14px;
    font-size: 13px; font-weight: 600; display: flex; align-items: center; gap: 8px;
}
.sentiment-warning.sw-fear { background: rgba(225,29,72,0.1); border: 1px solid rgba(225,29,72,0.3); color: #E11D48; }
.sentiment-warning.sw-extreme { background: rgba(225,29,72,0.18); border: 2px solid #E11D48; color: #E11D48; }

/* ========== Analyze Link on Stock Cards ========== */
.stock-analyze-link {
    display: inline-block; margin-top: 8px; padding: 4px 10px;
    font-size: 11px; color: var(--accent, #818CF8); cursor: pointer;
    border: 1px solid rgba(79,70,229,0.3); border-radius: 5px;
    background: rgba(79,70,229,0.06); transition: background 0.15s;
}
.stock-analyze-link:hover { background: rgba(79,70,229,0.15); }

/* Sentiment/chanlun dark overrides: now always active */
.sentiment-greed { background: rgba(52,211,153,0.12); border-color: rgba(52,211,153,0.3); color: #059669; }
.sentiment-neutral { background: rgba(251,191,36,0.12); border-color: rgba(251,191,36,0.3); color: #D97706; }
.sentiment-fear { background: rgba(248,113,113,0.12); border-color: rgba(248,113,113,0.35); color: #DC2626; }
.chanlun-crossref { background: rgba(129,140,248,0.1); border-color: rgba(129,140,248,0.2); }
.sentiment-warning.sw-fear { background: rgba(248,113,113,0.08); }
.sentiment-warning.sw-extreme { background: rgba(248,113,113,0.15); }

/* ========== Feedback Learning System ========== */
.cli-fb-section { background: var(--bg-card); border-radius: 16px; padding: 16px; margin-top: 12px; box-shadow: var(--shadow); }
.cli-fb-empty .cli-acc-desc { margin-top: 8px; font-size: 0.8rem; color: var(--text-secondary); line-height: 1.5; }
.cli-fb-stats { display: grid; grid-template-columns: repeat(4, 1fr); gap: 8px; margin-top: 8px; }
.cli-fb-stat { text-align: center; padding: 8px 4px; background: var(--bg); border-radius: 10px; overflow: hidden; }
.cli-fb-num { font-size: 0.95rem; font-weight: 700; font-family: 'JetBrains Mono', monospace; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.cli-fb-pending { color: var(--text-sub); font-size: 0.8rem; }
.cli-fb-label { font-size: 0.7rem; color: var(--text-secondary); margin-top: 2px; }
.cli-fb-subtitle { font-size: 0.8rem; font-weight: 600; color: var(--text-secondary); margin: 10px 0 6px; }
.cli-fb-actions { margin-top: 4px; }
.cli-fb-adj { margin-top: 4px; }
.cli-fb-adj-item { display: flex; align-items: center; gap: 6px; font-size: 0.75rem; padding: 4px 0; border-bottom: 1px solid var(--border); flex-wrap: wrap; }
.cli-fb-adj-param { font-weight: 600; color: var(--accent); min-width: 70px; font-family: 'JetBrains Mono', monospace; font-size: 0.7rem; }
.cli-fb-adj-vals { font-family: 'JetBrains Mono', monospace; font-size: 0.7rem; white-space: nowrap; }
.cli-fb-adj-reason { color: var(--text-secondary); flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.cli-fb-milestone { background: linear-gradient(135deg, rgba(102,126,234,0.12), rgba(118,75,162,0.12)); }
@media (max-width: 400px) { .cli-fb-stats { grid-template-columns: repeat(2, 1fr); } }

/* Event Banner (A股/美股 Tab) */
.event-banner { background: linear-gradient(135deg, rgba(79,70,229,0.1), rgba(79,70,229,0.05)); border: 1px solid rgba(79,70,229,0.25); border-radius: 10px; padding: 10px 14px; margin-bottom: 8px; }
.eb-title { font-weight: 700; font-size: 0.85rem; color: var(--accent); margin-bottom: 4px; }
.eb-sectors { display: flex; flex-wrap: wrap; gap: 8px; font-size: 0.78rem; margin-bottom: 4px; }
.eb-bull { color: var(--green); }
.eb-bear { color: var(--red); }
.eb-meta { font-size: 0.7rem; color: var(--text-secondary); }

/* Event Card (Insights Tab) */
.cli-events-card { background: var(--bg-card); border-radius: 12px; padding: 14px; margin-bottom: 10px; border: 1px solid rgba(79,70,229,0.2); max-height: 350px; overflow-y: auto; -webkit-overflow-scrolling: touch; }
.cli-event-item { padding: 8px 0; border-bottom: 1px solid var(--border); }
.cli-event-item:last-child { border-bottom: none; }
.cli-event-type { font-weight: 700; font-size: 0.85rem; color: var(--text); }
.cli-event-conf { font-weight: 400; font-size: 0.72rem; color: var(--accent); margin-left: 6px; }
.cli-event-sectors { font-size: 0.78rem; margin-top: 3px; display: flex; gap: 10px; flex-wrap: wrap; }
.cli-event-meta { font-size: 0.7rem; color: var(--text-secondary); margin-top: 2px; }

/* Confirmed Signals Card */
.cli-confirmed-card { background: var(--bg-card); border-radius: 12px; padding: 14px; margin-bottom: 10px; border: 1px solid rgba(16,185,129,0.3); }
.cli-confirmed-item { padding: 6px 0; font-size: 0.82rem; display: flex; gap: 8px; align-items: flex-start; flex-wrap: wrap; }
.cli-confirmed-name { font-weight: 700; color: var(--green); white-space: nowrap; flex-shrink: 0; }
.cli-confirmed-reason { color: var(--text-secondary); font-size: 0.75rem; flex: 1; min-width: 0; word-break: break-word; line-height: 1.4; }

/* News Refresh Info */
.cli-news-refresh { font-size: 0.7rem; color: var(--text-secondary); text-align: center; padding: 6px 0; margin-bottom: 8px; }

/* ========== 板块动量预测 ========== */
.sp-section { background: var(--bg-card); border-radius: 14px; padding: 14px; margin-top: 12px; border: 1px solid rgba(79,70,229,0.15); }
.sp-learn-bar { font-size: 0.75rem; color: var(--text-secondary); text-align: center; padding: 6px 10px; background: rgba(79,70,229,0.05); border-radius: 8px; margin-bottom: 10px; }
.sp-market-tabs { display: flex; gap: 6px; margin-bottom: 10px; }
.sp-market-tab { flex: 1; padding: 7px 0; border: 1px solid var(--accent); border-radius: 8px; background: transparent; color: var(--accent); font-size: 0.82rem; font-weight: 600; cursor: pointer; transition: all 0.2s; }
.sp-market-tab.sp-tab-active { background: var(--accent); color: #fff; }
.sp-panel-hidden { display: none; }
.sp-run-time { font-size: 0.7rem; color: var(--text-secondary); margin-bottom: 8px; }
.sp-sector-card { background: rgba(79,70,229,0.04); border-radius: 10px; padding: 10px 12px; margin-bottom: 8px; border: 1px solid rgba(79,70,229,0.1); }
.sp-sector-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 8px; font-size: 0.85rem; }
.sp-stocks-list { display: flex; flex-direction: column; gap: 6px; }
.sp-stock-row { padding: 8px 10px; background: var(--bg-card); border-radius: 8px; cursor: pointer; border: 1px solid var(--border); transition: background 0.15s; }
.sp-stock-row:active { background: rgba(79,70,229,0.06); }
.sp-stock-name { font-size: 0.82rem; margin-bottom: 4px; display: flex; align-items: center; flex-wrap: wrap; gap: 4px; }
.sp-stock-data { display: flex; align-items: center; gap: 10px; font-size: 0.77rem; margin-bottom: 5px; flex-wrap: wrap; }
.sp-range { color: var(--text-secondary); font-family: 'JetBrains Mono', monospace; font-size: 0.73rem; }
.sp-conf-bar-wrap { display: flex; align-items: center; gap: 6px; }
.sp-conf-bar { height: 4px; border-radius: 2px; background: linear-gradient(90deg, #34D399, #818CF8); flex-shrink: 0; }
.sp-conf-label { font-size: 0.68rem; color: var(--text-secondary); white-space: nowrap; }
.sp-hit { color: var(--green); font-size: 0.72rem; font-weight: 600; }
.sp-miss { color: var(--red); font-size: 0.72rem; font-weight: 600; }
.sp-actual { color: var(--text-secondary); font-size: 0.72rem; font-family: 'JetBrains Mono', monospace; }
.sp-empty { font-size: 0.78rem; color: var(--text-secondary); padding: 16px 0; text-align: center; }
.sp-cross-tags { display: flex; flex-wrap: wrap; gap: 3px; margin-top: 3px; }
.sp-cross-tag { font-size: 9px; padding: 1px 5px; border-radius: 3px; background: rgba(79,70,229,0.12); color: var(--accent); white-space: nowrap; max-width: 160px; overflow: hidden; text-overflow: ellipsis; }

/* ─── 智能体 Agent Sub-Tab ─────────────────────────────────────────── */
.agent-regime-card { padding: 14px; border-radius: 12px; margin: 8px 14px 12px; text-align: center; }
.regime-bull { background: linear-gradient(135deg, rgba(16,185,129,0.15), rgba(16,185,129,0.05)); border: 1px solid rgba(16,185,129,0.3); }
.regime-bear { background: linear-gradient(135deg, rgba(225,29,72,0.15), rgba(225,29,72,0.05)); border: 1px solid rgba(225,29,72,0.3); }
.regime-sideways { background: linear-gradient(135deg, rgba(156,163,175,0.15), rgba(156,163,175,0.05)); border: 1px solid rgba(156,163,175,0.3); }
.agent-regime-label { font-size: 1.1rem; font-weight: 700; margin-bottom: 4px; }
.regime-bull .agent-regime-label { color: var(--green); }
.regime-bear .agent-regime-label { color: var(--red); }
.regime-sideways .agent-regime-label { color: var(--text-secondary); }
.agent-regime-detail { font-size: 0.78rem; color: var(--text-secondary); margin-bottom: 2px; }
.agent-regime-momentum { font-size: 0.72rem; color: var(--text-sub); font-family: 'JetBrains Mono', monospace; }

.agent-section { padding: 0 14px 12px; }
.agent-section-title { font-size: 0.82rem; font-weight: 600; color: var(--text); margin-bottom: 8px; padding-top: 4px; border-top: 1px solid var(--border); }
.agent-sector-grid { display: flex; flex-direction: column; gap: 6px; }
.agent-sector-col { font-size: 0.78rem; color: var(--text-secondary); }
.agent-tag { display: inline-block; font-size: 0.68rem; padding: 1px 6px; border-radius: 4px; margin-right: 6px; font-weight: 600; }
.agent-tag.hot { background: rgba(225,29,72,0.12); color: var(--red); }
.agent-tag.cold { background: rgba(79,70,229,0.12); color: var(--accent); }
.agent-tag.fund { background: rgba(16,185,129,0.12); color: var(--green); }

.agent-fw-grid { display: flex; flex-direction: column; gap: 5px; }
.agent-fw-row { display: flex; align-items: center; gap: 6px; font-size: 0.76rem; }
.fw-name { width: 68px; color: var(--text-secondary); flex-shrink: 0; }
.fw-bar-wrap { flex: 1; height: 6px; background: var(--bg); border-radius: 3px; overflow: hidden; }
.fw-bar { height: 100%; background: var(--accent); border-radius: 3px; transition: width 0.3s; }
.fw-pct { width: 30px; text-align: right; font-family: 'JetBrains Mono', monospace; color: var(--text); }
.fw-wr { width: 55px; text-align: right; font-family: 'JetBrains Mono', monospace; color: var(--text-sub); font-size: 0.68rem; }

.agent-stock-list { display: flex; flex-direction: column; gap: 6px; }
.agent-stock-card { background: var(--bg-card); border: 1px solid var(--border); border-radius: 10px; padding: 10px 12px; cursor: pointer; transition: border-color 0.15s; overflow: hidden; word-break: break-word; }
.agent-stock-card:active { border-color: var(--accent); }
.agent-stock-header { display: flex; align-items: center; gap: 6px; margin-bottom: 4px; }
.agent-stock-name { font-weight: 600; font-size: 0.82rem; color: var(--text); }
.agent-stock-code { font-size: 0.72rem; color: var(--text-sub); font-family: 'JetBrains Mono', monospace; }
.agent-stock-score { margin-left: auto; font-weight: 700; font-size: 0.82rem; color: var(--accent); }
.agent-stock-meta { display: flex; flex-wrap: wrap; gap: 5px; font-size: 0.72rem; }
.agent-verdict { padding: 1px 5px; border-radius: 4px; font-weight: 600; }
.verdict-buy { background: rgba(16,185,129,0.12); color: var(--green); }
.verdict-avoid { background: rgba(225,29,72,0.12); color: var(--red); }
.agent-direction { color: var(--text-secondary); }
.agent-risk { padding: 1px 5px; border-radius: 4px; }
.risk-low { background: rgba(16,185,129,0.08); color: var(--green); }
.risk-mid { background: rgba(245,158,11,0.12); color: #D97706; }
.risk-high { background: rgba(225,29,72,0.08); color: var(--red); }
.agent-strategy { color: var(--accent); }
.agent-industry { color: var(--text-sub); }
.agent-stock-detail { display: flex; flex-wrap: wrap; gap: 6px; font-size: 0.7rem; margin-top: 3px; color: var(--text-sub); font-family: 'JetBrains Mono', monospace; }
.agent-stock-detail .agent-stop { color: var(--red); }
.agent-stock-detail .agent-conf { color: var(--accent); }
.agent-stock-synthesis { font-size: 0.72rem; color: var(--text-secondary); margin-top: 4px; line-height: 1.4; }

.agent-summary { font-size: 0.72rem; color: var(--text-sub); text-align: center; padding-top: 8px; }
.agent-time { font-family: 'JetBrains Mono', monospace; }

.agent-run-btn { display: block; width: calc(100% - 28px); margin: 8px 14px 16px; padding: 10px; border: 1px solid var(--accent); background: transparent; color: var(--accent); font-size: 0.82rem; font-weight: 600; border-radius: 10px; cursor: pointer; transition: all 0.15s; }
.agent-run-btn:hover { background: var(--accent); color: #fff; }
.agent-run-btn:disabled { opacity: 0.5; cursor: not-allowed; }

/* ─── 分析Tab 8框架区块 ──────────────────────────────────────────── */
.fw-score-section { margin-top: 4px; }
.fw-loading { text-align: center; font-size: 0.78rem; color: var(--text-sub); padding: 12px 0; }
.fw-unavailable { text-align: center; font-size: 0.78rem; color: var(--text-sub); padding: 8px 0; }

.fw-verdict-card { padding: 12px; border-radius: 10px; text-align: center; margin-bottom: 10px; }
.fw-verdict-buy { background: rgba(16,185,129,0.1); border: 1px solid rgba(16,185,129,0.25); }
.fw-verdict-avoid { background: rgba(225,29,72,0.1); border: 1px solid rgba(225,29,72,0.25); }
.fw-verdict-neutral { background: var(--bg); border: 1px solid var(--border); }
.fw-verdict-main { font-size: 1rem; font-weight: 700; }
.fw-verdict-buy .fw-verdict-main { color: var(--green); }
.fw-verdict-avoid .fw-verdict-main { color: var(--red); }
.fw-verdict-conf { font-size: 0.76rem; color: var(--text-secondary); margin-top: 2px; }
.fw-verdict-reason { font-size: 0.72rem; color: var(--text-sub); margin-top: 4px; word-break: break-word; overflow-wrap: anywhere; }

.fw-scores-grid { display: flex; flex-direction: column; gap: 5px; margin-bottom: 10px; }
.fw-score-row { display: flex; align-items: center; gap: 6px; font-size: 0.76rem; }
.fw-score-name { width: 68px; color: var(--text-secondary); flex-shrink: 0; }
.fw-score-bar-wrap { flex: 1; height: 6px; background: var(--bg); border-radius: 3px; overflow: hidden; }
.fw-score-bar { height: 100%; border-radius: 3px; transition: width 0.3s; }
.fw-bar-green { background: var(--green); }
.fw-bar-yellow { background: #F59E0B; }
.fw-bar-red { background: var(--red); }
.fw-score-val { width: 24px; text-align: right; font-family: 'JetBrains Mono', monospace; font-weight: 600; }
.fw-score-ev { width: 48px; text-align: right; font-size: 0.68rem; color: var(--text-sub); }

.fw-synthesis { font-size: 0.78rem; color: var(--text); padding: 6px 0; font-weight: 500; }
.fw-rationale { font-size: 0.72rem; color: var(--text-secondary); margin-bottom: 8px; line-height: 1.4; }
.fw-pred-risk { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; font-size: 0.72rem; padding: 6px 0; }
.fw-pred { color: var(--text-secondary); }
.fw-target { color: var(--accent); font-family: 'JetBrains Mono', monospace; }
.fw-risk-badge { padding: 1px 6px; border-radius: 4px; font-weight: 500; }
.fw-risk-low { background: rgba(16,185,129,0.08); color: var(--green); }
.fw-risk-mid { background: rgba(245,158,11,0.12); color: #D97706; }
.fw-risk-high { background: rgba(225,29,72,0.08); color: var(--red); }
.fw-stoploss { color: var(--text-sub); font-family: 'JetBrains Mono', monospace; }

/* ===== Sentiment Extreme Banner ===== */
.sentiment-extreme-banner { display: flex; align-items: center; gap: 8px; padding: 10px 14px; border-radius: 10px; margin-bottom: 10px; font-size: 0.85rem; font-weight: 500; }
.se-red { background: rgba(225,29,72,0.12); color: #E11D48; border: 1px solid rgba(225,29,72,0.2); }
.se-orange { background: rgba(249,115,22,0.12); color: #F97316; border: 1px solid rgba(249,115,22,0.2); }
.se-yellow { background: rgba(245,158,11,0.12); color: #D97706; border: 1px solid rgba(245,158,11,0.2); }
.se-icon { font-size: 1.1rem; flex-shrink: 0; }
.se-text { flex: 1; }
.se-score { font-family: 'JetBrains Mono', monospace; font-weight: 600; white-space: nowrap; }

/* ===== Paper Trading Section ===== */
.cli-paper-section { background: var(--bg-card); border-radius: 14px; padding: 16px; margin-bottom: 12px; box-shadow: var(--shadow); }
.cli-paper-summary { display: grid; grid-template-columns: repeat(4, 1fr); gap: 8px; margin: 12px 0; }
.cli-paper-stat { text-align: center; }
.cli-paper-num { font-size: 1.1rem; font-weight: 700; font-family: 'JetBrains Mono', monospace; }
.cli-paper-label { font-size: 0.72rem; color: var(--text-sub); margin-top: 2px; }
.cli-paper-empty { text-align: center; color: var(--text-sub); font-size: 0.82rem; padding: 12px; }
.cli-paper-holdings { margin-top: 8px; }
.cli-paper-hold-grid { display: flex; flex-direction: column; gap: 6px; }
.cli-paper-hold-card { padding: 8px 10px; background: var(--bg); border-radius: 8px; }
.cli-paper-hold-name { font-weight: 600; font-size: 0.88rem; cursor: pointer; }
.cli-paper-hold-name:hover { color: var(--accent); }
.cli-paper-hold-info { display: flex; gap: 10px; font-size: 0.78rem; color: var(--text-secondary); margin-top: 4px; font-family: 'JetBrains Mono', monospace; }
.cli-paper-chart-wrap { margin: 12px 0; height: 120px; }
.cli-paper-trades { margin-top: 8px; max-height: 300px; overflow-y: auto; -webkit-overflow-scrolling: touch; }
.cli-paper-trade-item { display: flex; gap: 8px; align-items: center; font-size: 0.8rem; padding: 4px 0; border-bottom: 1px solid var(--border); }
.cli-paper-trade-name { font-weight: 500; min-width: 60px; }
.cli-paper-trade-date { color: var(--text-sub); font-size: 0.72rem; }
.cli-paper-trade-reason { color: var(--text-sub); font-size: 0.72rem; margin-left: auto; }
.cli-paper-fw { margin-top: 10px; }

/* ===== Sentiment History ===== */
.cli-sent-history { background: var(--bg-card); border-radius: 14px; padding: 16px; margin-bottom: 12px; box-shadow: var(--shadow); }
.cli-sent-chart-wrap { margin: 10px 0; height: 100px; }
.cli-sent-mini-stats { display: flex; gap: 12px; font-size: 0.78rem; color: var(--text-sub); font-family: 'JetBrains Mono', monospace; margin: 8px 0; }
.cli-extreme-banner { padding: 8px 12px; border-radius: 8px; font-size: 0.82rem; font-weight: 600; margin: 8px 0; }
.cli-extreme-red { background: rgba(225,29,72,0.12); color: #E11D48; }
.cli-extreme-orange { background: rgba(249,115,22,0.12); color: #F97316; }
.cli-extreme-yellow { background: rgba(245,158,11,0.12); color: #D97706; }
.cli-sent-alerts { margin-top: 8px; max-height: 280px; overflow-y: auto; -webkit-overflow-scrolling: touch; }
.cli-sent-alert-item { font-size: 0.8rem; padding: 4px 0; border-bottom: 1px solid var(--border); }

/* ===== Prediction Scorecard ===== */
.prediction-scorecard {
    background: linear-gradient(135deg, rgba(79,70,229,0.08), rgba(139,92,246,0.06));
    border: 1px solid rgba(79,70,229,0.25); border-radius: 12px;
    padding: 14px; margin-bottom: 12px;
}
.prediction-scorecard.sc-warmup {
    background: rgba(79,70,229,0.05); border-color: rgba(79,70,229,0.15);
}
.sc-title {
    font-size: 14px; font-weight: 700; color: var(--text-main);
    margin-bottom: 10px; display: flex; align-items: center; gap: 8px;
}
.sc-trend-badge {
    font-size: 11px; font-weight: 600; padding: 2px 8px; border-radius: 10px;
}
.sc-trend-up { background: rgba(16,185,129,0.15); color: #059669; }
.sc-trend-flat { background: rgba(245,158,11,0.15); color: #D97706; }
.sc-trend-down { background: rgba(225,29,72,0.15); color: #E11D48; }
.sc-grid {
    display: grid; grid-template-columns: repeat(4, 1fr); gap: 8px; margin-bottom: 8px;
}
.sc-cell {
    text-align: center; padding: 6px 4px;
    background: rgba(0,0,0,0.03); border-radius: 8px;
}
.sc-val {
    font-family: 'JetBrains Mono', monospace; font-weight: 700; font-size: 15px;
    color: var(--accent);
}
.sc-label { font-size: 10px; color: var(--text-sub); margin-top: 2px; }
.sc-summary {
    font-size: 11px; color: var(--text-sub); text-align: center;
    padding-top: 6px; border-top: 1px solid rgba(79,70,229,0.12);
}
.sc-warmup-text {
    font-size: 12px; color: var(--text-sub); text-align: center; padding: 8px 0;
}

/* ===== Evolution Log (Weekly Summary) ===== */
.sum-evolution {
    background: linear-gradient(135deg, rgba(79,70,229,0.06), rgba(16,185,129,0.04));
    border: 1px solid rgba(79,70,229,0.2); border-radius: 10px; padding: 12px;
}
.evo-summary {
    font-size: 13px; font-weight: 600; color: var(--accent); margin-bottom: 10px;
    padding: 8px 12px; background: rgba(79,70,229,0.08); border-radius: 8px;
}
.evo-label {
    font-size: 11px; font-weight: 600; color: var(--text-sub); margin-right: 6px;
}
.evo-accuracy, .evo-weights, .evo-ml, .evo-lessons {
    padding: 6px 0; font-size: 12px; color: var(--text-main);
}
.evo-up { color: #059669; font-weight: 700; }
.evo-down { color: #E11D48; font-weight: 700; }
.evo-flat { color: #D97706; font-weight: 700; }
.evo-detail { font-size: 11px; color: var(--text-sub); }
.evo-fw-tag {
    display: inline-block; font-size: 11px; padding: 2px 6px; margin: 2px 4px;
    border-radius: 6px; font-family: 'JetBrains Mono', monospace; font-weight: 600;
}
.evo-fw-tag.evo-up { background: rgba(16,185,129,0.12); }
.evo-fw-tag.evo-down { background: rgba(225,29,72,0.12); }
.evo-lesson-item { font-size: 11px; color: var(--text-sub); padding: 2px 0; }

/* ===== Summary Tab ===== */
.sum-sub-tabs { display: flex; gap: 6px; margin-bottom: 12px; }
.sum-sub-tab { flex: 1; height: 32px; border: 1.5px solid var(--border); background: transparent; color: var(--text-sub); font-size: 13px; font-weight: 600; border-radius: 8px; cursor: pointer; transition: all 0.2s; }
.sum-sub-tab.active { background: var(--accent); color: #fff; border-color: var(--accent); }
.sum-subpanel { display: none; }
.sum-subpanel.active { display: block; }

.sum-date-picker { display: flex; align-items: center; gap: 8px; margin-bottom: 12px; }
.sum-date-picker button { width: 32px; height: 32px; border: 1px solid var(--border); border-radius: 8px; background: var(--bg-card); color: var(--text); font-size: 16px; cursor: pointer; display: flex; align-items: center; justify-content: center; }
.sum-date-picker span { flex: 1; text-align: center; font-size: 14px; font-weight: 600; }

.sum-overview { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; margin-bottom: 14px; }
.sum-ov-card { background: var(--bg-card); border-radius: 10px; padding: 10px; text-align: center; box-shadow: var(--shadow); }
.sum-ov-card .sum-ov-val { font-size: 20px; font-weight: 700; font-family: 'JetBrains Mono', monospace; }
.sum-ov-card .sum-ov-label { font-size: 11px; color: var(--text-sub); margin-top: 2px; }
.sum-ov-pos { color: var(--green); }
.sum-ov-neg { color: var(--red); }

.sum-modules-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 8px; margin-bottom: 14px; }
.sum-mod-card { background: var(--bg-card); border-radius: 10px; padding: 10px 12px; box-shadow: var(--shadow); border:1px solid var(--border); position:relative; overflow:hidden; transition: transform 0.2s ease, box-shadow 0.3s ease, border-color 0.3s ease; animation: cardSlideIn 0.3s ease-out both; }
.sum-mod-card::after { content:''; position:absolute; top:0; left:10%; right:10%; height:1px; background:linear-gradient(90deg, transparent, var(--glow-accent), transparent); pointer-events:none; }
.sum-mod-card:hover { transform:translateY(-2px); border-color:rgba(129,140,248,0.2); box-shadow:0 6px 20px rgba(0,0,0,0.06), 0 0 16px var(--glow-accent); }
.sum-mod-title { font-size: 12px; font-weight: 700; color: var(--accent); margin-bottom: 6px; display: flex; align-items: center; gap: 4px; text-shadow: 0 0 8px var(--glow-accent); }
.sum-mod-metric { font-size: 12px; color: var(--text-sub); line-height: 1.6; }
.sum-mod-metric b { color: var(--text); font-family: 'JetBrains Mono', monospace; }

.sum-section { background: var(--bg-card); border-radius: 12px; padding: 12px 14px; margin-bottom: 10px; box-shadow: var(--shadow); border:1px solid var(--border); position:relative; overflow:hidden; transition: transform 0.2s ease, box-shadow 0.3s ease; animation: cardSlideIn 0.3s ease-out both; }
.sum-section::before { content:''; position:absolute; top:0; left:0; right:0; height:2px; background:linear-gradient(90deg, transparent, var(--accent), transparent); opacity:0.4; pointer-events:none; }
.sum-section:hover { box-shadow:0 8px 28px rgba(0,0,0,0.06), 0 0 16px var(--glow-accent); }
.sum-section-title { font-size: 14px; font-weight: 700; margin-bottom: 8px; color: var(--accent); }
.sum-highlight-item { font-size: 13px; line-height: 1.7; padding: 2px 0; color: var(--green); }
.sum-trap-item { font-size: 13px; line-height: 1.7; padding: 2px 0; color: var(--red); }
.sum-lesson-item { font-size: 13px; line-height: 1.7; padding: 2px 0; color: var(--text-sub); }
.sum-improve-item { font-size: 13px; line-height: 1.7; padding: 2px 0; color: var(--accent); }

.sum-feedback-section { background: var(--bg-card); border-radius: 12px; padding: 12px 14px; margin-bottom: 10px; box-shadow: var(--shadow); }
.sum-feedback-item { font-size: 12px; padding: 4px 0; border-bottom: 1px solid var(--border); color: var(--text-sub); }
.sum-feedback-item:last-child { border-bottom: none; }

.sum-empty { text-align: center; padding: 40px 20px; color: var(--text-sub); font-size: 14px; }
.sum-trend-chart { height: 160px; margin: 12px 0; }
.sum-week-compare { margin-bottom: 14px; }

/* ===== Alpha 终极研判 — Premium UI v2 ===== */
@keyframes alphaPulse { 0%,100%{box-shadow:0 0 8px rgba(79,70,229,0.3)} 50%{box-shadow:0 0 20px rgba(168,85,247,0.5)} }
@keyframes alphaSlide { from{opacity:0;transform:translateY(12px)} to{opacity:1;transform:translateY(0)} }
@keyframes alphaRipple { 0%{transform:scale(0);opacity:0.5} 100%{transform:scale(4);opacity:0} }
@keyframes alphaBgShift { 0%{background-position:0% 50%} 50%{background-position:100% 50%} 100%{background-position:0% 50%} }

.alpha-header { text-align: center; padding: 18px 16px 14px; margin: -12px -12px 14px; border-radius: 16px; background: linear-gradient(135deg, #F0EDFF 0%, #E8E5FF 40%, #EDF0FF 60%, #F3EEFF 100%); background-size: 250% 250%; animation: alphaBgShift 15s ease-in-out infinite; position: relative; overflow: hidden; border: 1px solid rgba(168,85,247,0.10); }
.alpha-header::before { content:''; position:absolute; top:0; left:0; right:0; height:2px; background: linear-gradient(90deg, transparent, rgba(168,85,247,0.5), transparent); }
.alpha-header::after { display:none; }
.alpha-title-row { display: flex; align-items: center; justify-content: center; gap: 10px; position: relative; z-index: 1; }
.alpha-title { font-size: 24px; font-weight: 800; letter-spacing: 3px; background: linear-gradient(135deg, #7C3AED 0%, #6366F1 50%, #4F46E5 100%); background-size: 200% 200%; animation: alphaBgShift 8s ease-in-out infinite; -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; margin: 0; }
.alpha-badge { font-size: 10px; font-weight: 700; padding: 2px 8px; border-radius: 6px; background: rgba(168,85,247,0.15); color: #7C3AED; font-family: 'JetBrains Mono', monospace; letter-spacing: 0.5px; border: 1px solid rgba(168,85,247,0.25); }
.alpha-badge-good { background: linear-gradient(135deg, #059669, #10B981); color: #fff; border: none; }
.alpha-badge-warn { background: linear-gradient(135deg, #DC2626, #EF4444); color: #fff; border: none; }
.alpha-subtitle { font-size: 10px; color: rgba(99,102,241,0.5); margin-top: 4px; letter-spacing: 2px; text-transform: uppercase; position: relative; z-index: 1; font-weight: 500; }

/* Context Dashboard */
.alpha-ctx-grid { margin-bottom: 14px; }
.alpha-ctx-item { background: linear-gradient(145deg, var(--bg-card), var(--bg)); border-radius: 12px; padding: 10px 4px 8px; text-align: center; box-shadow: var(--shadow), inset 0 1px 0 rgba(0,0,0,0.04); border: 1px solid var(--border); position: relative; overflow: hidden; }
.alpha-ctx-item::after { content:''; position:absolute; top:0; left:0; right:0; height:2px; background: linear-gradient(90deg, transparent, var(--accent), transparent); opacity: 0.4; }
.alpha-ctx-val { display: block; font-size: 20px; font-weight: 800; font-family: 'JetBrains Mono', monospace; line-height: 1.2; }
.alpha-ctx-label { font-size: 9px; color: var(--text-sub); text-transform: uppercase; letter-spacing: 1px; margin-top: 2px; }
.alpha-pos { color: var(--green); }
.alpha-neg { color: var(--red); }

/* Query */
.alpha-query-wrap { display: flex; gap: 8px; margin-bottom: 14px; }
.alpha-query-wrap input { flex: 1; border-radius: 10px; }
.alpha-query-wrap .btn-analyze { border-radius: 10px; background: linear-gradient(135deg, var(--accent), #7C3AED); border: none; }

/* CEO Report Topbar */
.ceo-topbar { display: flex; align-items: center; gap: 10px; margin-bottom: 12px; }
.ceo-back-btn { background: var(--bg-card); border: 1px solid var(--border); border-radius: 10px; padding: 8px 14px; color: var(--accent); font-weight: 600; font-size: 13px; white-space: nowrap; }
.ceo-back-btn:active { opacity: 0.7; }
.ceo-quick-query { display: flex; flex: 1; gap: 6px; }
.ceo-quick-query input { flex: 1; border-radius: 10px; font-size: 13px; }
.ceo-quick-query .btn-analyze { border-radius: 10px; background: linear-gradient(135deg, var(--accent), #7C3AED); border: none; font-size: 13px; }
.alpha-query-card { background: var(--bg-card); border-radius: 14px; padding: 14px 16px; margin-bottom: 12px; box-shadow: var(--shadow); border-left: 3px solid var(--accent); animation: alphaSlide 0.3s ease; }
.alpha-query-partial { border-left-color: var(--text-sub); opacity: 0.85; }

/* Stock Cards (Premium Interactive) */
.alpha-card { background: var(--glass-bg); backdrop-filter: var(--glass-blur); -webkit-backdrop-filter: var(--glass-blur); border-radius: 16px; padding: 0; margin-bottom: 10px; box-shadow: 0 2px 8px rgba(0,0,0,0.06), 0 0 1px rgba(0,0,0,0.05); overflow: hidden; animation: alphaSlide 0.35s ease backwards; border: 1px solid var(--glass-border); position: relative; transition: transform 0.25s cubic-bezier(0.22,1,0.36,1), box-shadow 0.35s ease, border-color 0.35s ease; cursor: pointer; }
.alpha-card:active { transform: scale(0.98) translateY(1px); }
.alpha-card:hover { box-shadow: 0 6px 24px rgba(0,0,0,0.08), 0 0 20px var(--glow-accent); transform: translateY(-1px); }
.alpha-card:has(.alpha-stripe-s):hover { box-shadow: 0 6px 28px rgba(245,158,11,0.20), 0 0 20px rgba(245,158,11,0.08); border-color: rgba(245,158,11,0.4); }
.alpha-card:has(.alpha-stripe-a):hover { box-shadow: 0 6px 28px rgba(16,185,129,0.18), 0 0 18px rgba(16,185,129,0.06); border-color: rgba(16,185,129,0.35); }
.alpha-card:has(.alpha-stripe-b):hover { box-shadow: 0 6px 28px rgba(124,58,237,0.16), 0 0 16px rgba(124,58,237,0.06); border-color: rgba(124,58,237,0.35); }
.alpha-card:has(.alpha-stripe-d):hover { box-shadow: 0 6px 28px rgba(220,38,38,0.16), 0 0 16px rgba(220,38,38,0.06); border-color: rgba(220,38,38,0.3); }
.alpha-card:nth-child(1) { animation-delay: 0s; } .alpha-card:nth-child(2) { animation-delay: 0.05s; } .alpha-card:nth-child(3) { animation-delay: 0.1s; } .alpha-card:nth-child(4) { animation-delay: 0.15s; } .alpha-card:nth-child(5) { animation-delay: 0.2s; } .alpha-card:nth-child(6) { animation-delay: 0.25s; }
.alpha-card-inner { padding: 14px 38px 12px 16px; }
.alpha-card-expanded { box-shadow: 0 6px 24px rgba(124,58,237,0.1), 0 0 1px rgba(0,0,0,0.1); border-color: rgba(124,58,237,0.2); }

/* Grade stripe — left border glow */
.alpha-card-stripe { position: absolute; left: 0; top: 0; bottom: 0; width: 4px; }
.alpha-stripe-s { background: linear-gradient(180deg, #F59E0B, #EF4444, #F59E0B); box-shadow: 0 0 12px rgba(245,158,11,0.4); }
.alpha-stripe-a { background: linear-gradient(180deg, #059669, #10B981, #34D399); box-shadow: 0 0 10px rgba(16,185,129,0.3); }
.alpha-stripe-b { background: linear-gradient(180deg, #4F46E5, #7C3AED, #A855F7); box-shadow: 0 0 10px rgba(79,70,229,0.3); }
.alpha-stripe-c { background: var(--text-sub); }
.alpha-stripe-d { background: linear-gradient(180deg, #DC2626, #EF4444); box-shadow: 0 0 8px rgba(220,38,38,0.3); }
/* v16: 评级卡片发光边框 */
.alpha-card:has(.alpha-stripe-s) { border-color: rgba(245,158,11,0.3); box-shadow: 0 0 16px rgba(245,158,11,0.15), 0 2px 8px rgba(0,0,0,0.06); }
.alpha-card:has(.alpha-stripe-a) { border-color: rgba(52,211,153,0.25); box-shadow: 0 0 14px rgba(52,211,153,0.12), 0 2px 8px rgba(0,0,0,0.06); }
.alpha-card:has(.alpha-stripe-b) { border-color: rgba(129,140,248,0.25); box-shadow: 0 0 12px rgba(129,140,248,0.12), 0 2px 8px rgba(0,0,0,0.06); }

.alpha-card-head { display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 8px; }
.alpha-stock-info { display: flex; flex-direction: column; gap: 1px; }
.alpha-stock-name { font-size: 16px; font-weight: 700; color: var(--text); }
.alpha-stock-code { font-size: 11px; color: var(--text-sub); font-family: 'JetBrains Mono', monospace; }

/* Score circle */
.alpha-score-wrap { display: flex; align-items: center; gap: 8px; }
.alpha-score-ring { width: 48px; height: 48px; border-radius: 50%; display: flex; align-items: center; justify-content: center; flex-direction: column; position: relative; transition: transform 0.3s ease; }
.alpha-score-ring:hover { transform: scale(1.1); }
.alpha-score-ring::before { content:''; position:absolute; inset:0; border-radius:50%; padding:3px; background: conic-gradient(var(--ring-color,var(--accent)) calc(var(--ring-pct,50) * 3.6deg), var(--border) 0); mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0); mask-composite: exclude; -webkit-mask-composite: xor; animation: alphaRingFill 0.8s ease-out; }
@keyframes alphaRingFill { from { opacity: 0.3; transform: rotate(-90deg); } to { opacity: 1; transform: rotate(0deg); } }
.alpha-score-num { font-size: 18px; font-weight: 900; font-family: 'JetBrains Mono', monospace; line-height: 1; }
.alpha-score-grade { font-size: 9px; font-weight: 800; letter-spacing: 1px; line-height: 1; }
/* S级闪烁脉冲 */
.alpha-ring-s::after { content:''; position:absolute; inset:-4px; border-radius:50%; border:2px solid rgba(245,158,11,0.3); animation: alphaPulse 2s ease-in-out infinite; }
@keyframes alphaPulse { 0%,100% { opacity:0.3; transform:scale(1); } 50% { opacity:0.8; transform:scale(1.08); } }

/* Grade colors */
.alpha-ring-s { --ring-color: #D97706; color: #D97706; position: relative; }
.alpha-ring-s .alpha-score-num { background: linear-gradient(135deg, #F59E0B, #EF4444); -webkit-background-clip:text; -webkit-text-fill-color:transparent; background-clip:text; }
.alpha-ring-a { --ring-color: #059669; color: #059669; }
.alpha-ring-b { --ring-color: #818CF8; color: var(--accent); }
.alpha-ring-c { --ring-color: var(--text-sub); color: var(--text-sub); }
.alpha-ring-d { --ring-color: #EF4444; color: #EF4444; }

/* Action badges */
.alpha-action-row { display: flex; align-items: center; gap: 8px; margin-bottom: 10px; }
.alpha-action-buy { font-size: 12px; font-weight: 700; padding: 3px 12px; border-radius: 14px; background: linear-gradient(135deg, rgba(16,185,129,0.15), rgba(5,150,105,0.08)); color: var(--green); border: 1px solid rgba(16,185,129,0.25); animation: alphaActionGlow 3s ease-in-out infinite; }
@keyframes alphaActionGlow { 0%,100% { box-shadow: 0 0 0 rgba(16,185,129,0); } 50% { box-shadow: 0 0 8px rgba(16,185,129,0.2); } }
.alpha-action-sell { font-size: 12px; font-weight: 700; padding: 3px 12px; border-radius: 14px; background: linear-gradient(135deg, rgba(225,29,72,0.12), rgba(220,38,38,0.06)); color: var(--red); border: 1px solid rgba(225,29,72,0.2); animation: alphaActionSell 3s ease-in-out infinite; }
@keyframes alphaActionSell { 0%,100% { box-shadow: 0 0 0 rgba(225,29,72,0); } 50% { box-shadow: 0 0 8px rgba(225,29,72,0.2); } }
.alpha-action-hold { font-size: 12px; font-weight: 700; padding: 3px 12px; border-radius: 14px; background: linear-gradient(135deg, rgba(79,70,229,0.1), rgba(124,58,237,0.05)); color: var(--accent); border: 1px solid rgba(79,70,229,0.2); }
.alpha-action-detail { font-size: 12px; color: var(--text-sub); flex: 1; line-height: 1.4; }
.alpha-position { font-size: 12px; color: #A855F7; font-weight: 700; margin-bottom: 10px; font-family: 'JetBrains Mono', monospace; padding: 4px 10px; background: rgba(168,85,247,0.08); border-radius: 8px; display: inline-block; }

/* ── v20: 方向缓冲区 badges ── */
.alpha-dir-badge { font-size: 11px; padding: 4px 10px; border-radius: 8px; margin: 4px 0; display: flex; align-items: center; gap: 5px; backdrop-filter: blur(8px); -webkit-backdrop-filter: blur(8px); animation: alphaDirFadeIn 0.4s ease-out; }
@keyframes alphaDirFadeIn { from { opacity:0; transform:translateY(-4px); } to { opacity:1; transform:translateY(0); } }
.alpha-dir-icon { font-size: 13px; flex-shrink: 0; }
.alpha-dir-locked { background: linear-gradient(135deg, rgba(59,130,246,0.12), rgba(37,99,235,0.06)); color: #2563EB; border: 1px solid rgba(59,130,246,0.25); }
.alpha-dir-buffered { background: linear-gradient(135deg, rgba(245,158,11,0.12), rgba(217,119,6,0.06)); color: #D97706; border: 1px solid rgba(245,158,11,0.25); }
.alpha-dir-changed { background: linear-gradient(135deg, rgba(168,85,247,0.12), rgba(139,92,246,0.06)); color: #7C3AED; border: 1px solid rgba(168,85,247,0.25); animation: alphaDirPulse 2s ease-in-out infinite; }
@keyframes alphaDirPulse { 0%,100% { box-shadow: 0 0 0 rgba(168,85,247,0); } 50% { box-shadow: 0 0 10px rgba(168,85,247,0.2); } }
.alpha-dir-original { background: rgba(100,116,139,0.08); color: #64748B; border: 1px solid rgba(100,116,139,0.15); font-style: italic; font-size: 10px; }

/* ── v20: 科技感增强 — 扫描线 + 发光 ── */
.alpha-card { position: relative; overflow: hidden; }
.alpha-card::before { content: ''; position: absolute; inset: 0; background: repeating-linear-gradient(0deg, transparent, transparent 40px, rgba(99,102,241,0.015) 40px, rgba(99,102,241,0.015) 41px); pointer-events: none; z-index: 0; }
.alpha-card::after { content: ''; position: absolute; top: -100%; left: 0; width: 100%; height: 100%; background: linear-gradient(180deg, transparent 40%, rgba(99,102,241,0.03) 50%, transparent 60%); animation: alphaScanLine 8s linear infinite; pointer-events: none; z-index: 0; }
@keyframes alphaScanLine { 0% { top: -100%; } 100% { top: 200%; } }
.alpha-card-inner { position: relative; z-index: 1; }
.alpha-ring-s { box-shadow: 0 0 12px rgba(245,158,11,0.3), 0 0 24px rgba(245,158,11,0.1); }
.alpha-ring-a { box-shadow: 0 0 10px rgba(16,185,129,0.25), 0 0 20px rgba(16,185,129,0.08); }
.alpha-card:hover { border-color: rgba(99,102,241,0.25); box-shadow: 0 0 20px rgba(99,102,241,0.08); }

/* Price display */
.alpha-price-wrap { display: flex; flex-direction: column; align-items: flex-end; gap: 1px; margin-right: 10px; }
.alpha-price { font-size: 15px; font-weight: 700; color: var(--text); font-family: 'JetBrains Mono', monospace; }
.alpha-change { font-size: 12px; font-weight: 600; font-family: 'JetBrains Mono', monospace; }

/* Next trading day prediction */
.alpha-prediction { margin-bottom: 10px; padding: 8px 12px; background: linear-gradient(135deg, rgba(99,102,241,0.06), rgba(168,85,247,0.04)); border-radius: 10px; border: 1px solid rgba(99,102,241,0.12); transition: background 0.3s ease, border-color 0.3s ease, box-shadow 0.3s ease; }
.alpha-prediction:hover { background: linear-gradient(135deg, rgba(99,102,241,0.10), rgba(168,85,247,0.07)); border-color: rgba(99,102,241,0.25); box-shadow: 0 2px 12px rgba(99,102,241,0.08); }
.alpha-pred-label { font-size: 11px; color: var(--text-sub); display: block; margin-bottom: 4px; }
.alpha-pred-body { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.alpha-pred-dir { font-size: 13px; font-weight: 700; padding: 2px 10px; border-radius: 10px; }
.alpha-pred-up { color: var(--green); background: rgba(16,185,129,0.12); }
.alpha-pred-down { color: var(--red); background: rgba(225,29,72,0.10); }
.alpha-pred-flat { color: var(--accent); background: rgba(99,102,241,0.10); }
.alpha-pred-range { font-size: 14px; font-weight: 700; color: var(--text); font-family: 'JetBrains Mono', monospace; }
.alpha-pred-conf { font-size: 11px; color: var(--text-sub); background: var(--bg); padding: 2px 8px; border-radius: 8px; }
.alpha-pred-reason { font-size: 11px; color: var(--text-sub); display: block; margin-top: 4px; line-height: 1.4; }

/* Dimension bars (expandable) */
.alpha-dims { display: flex; flex-direction: column; gap: 5px; margin-bottom: 10px; padding: 8px 10px; background: var(--bg); border-radius: 10px; max-height: 0; overflow: hidden; opacity: 0; transition: max-height 0.4s cubic-bezier(0.22,1,0.36,1), opacity 0.3s, padding 0.3s, margin 0.3s; padding: 0 10px; margin-bottom: 0; }
.alpha-dims-expanded { max-height: 300px; opacity: 1; padding: 8px 10px; margin-bottom: 10px; }
.alpha-dim { display: flex; align-items: center; gap: 8px; }
.alpha-dim-label { font-size: 10px; color: var(--text-sub); min-width: 36px; text-transform: uppercase; letter-spacing: 0.5px; font-weight: 600; }
.alpha-dim-bar { flex: 1; height: 5px; background: var(--border); border-radius: 3px; overflow: hidden; }
.alpha-dim-fill { height: 100%; border-radius: 3px; transition: width 0.6s cubic-bezier(0.22,1,0.36,1); }
.alpha-dim-fill-high { background: linear-gradient(90deg, #10B981, #34D399); }
.alpha-dim-fill-mid { background: linear-gradient(90deg, var(--accent), #A855F7); }
.alpha-dim-fill-low { background: linear-gradient(90deg, #F59E0B, #FBBF24); }
.alpha-dim-fill-none { background: var(--border); }
.alpha-dim-val { font-size: 11px; font-weight: 700; min-width: 26px; text-align: right; font-family: 'JetBrains Mono', monospace; }
.alpha-dim-val-none { color: var(--text-sub); }

/* Contradictions */
.alpha-contra-wrap { background: linear-gradient(135deg, rgba(245,158,11,0.06), rgba(234,88,12,0.04)); border: 1px solid rgba(245,158,11,0.15); border-radius: 10px; padding: 8px 12px; margin-bottom: 10px; }
.alpha-contra { font-size: 12px; line-height: 1.5; margin-bottom: 6px; color: var(--text); }
.alpha-contra:last-child { margin-bottom: 0; }
.alpha-contra-icon { margin-right: 4px; color: #D97706; }
.alpha-contra-res { color: var(--accent); font-weight: 600; font-size: 11px; }

/* Sources & footer */
.alpha-card-footer { display: flex; flex-wrap: wrap; align-items: center; gap: 5px; padding-top: 8px; border-top: 1px solid var(--border); }
.alpha-src-tag { font-size: 9px; padding: 2px 8px; border-radius: 10px; background: linear-gradient(135deg, rgba(79,70,229,0.08), rgba(168,85,247,0.05)); color: var(--accent); font-weight: 600; text-transform: uppercase; letter-spacing: 0.3px; border: 1px solid rgba(79,70,229,0.12); }
.alpha-src-scan { background: linear-gradient(135deg, rgba(16,185,129,0.12), rgba(5,150,105,0.08)); color: #059669; border-color: rgba(16,185,129,0.2); }
.alpha-scan-badge { font-size: 9px; padding: 2px 8px; border-radius: 10px; background: linear-gradient(135deg, rgba(16,185,129,0.15), rgba(5,150,105,0.1)); color: #047857; font-weight: 600; border: 1px solid rgba(16,185,129,0.25); }
.alpha-agree { font-size: 11px; color: var(--text-sub); margin-left: auto; font-family: 'JetBrains Mono', monospace; font-weight: 600; }
.alpha-data-richness { font-size: 9px; color: var(--text-sub); margin-left: 4px; }

/* Alpha card data snapshot */
.alpha-snap { display: flex; flex-direction: column; gap: 7px; padding: 10px 0 4px; border-top: 1px solid var(--border); }
.alpha-snap-chips { display: flex; flex-wrap: wrap; gap: 5px; }
.alpha-verdict-chip { font-size: 10px; font-weight: 700; padding: 3px 9px; border-radius: 20px; letter-spacing: 0.3px; transition: transform 0.2s ease, box-shadow 0.2s ease; cursor: default; }
.alpha-verdict-chip:hover { transform: scale(1.08); box-shadow: 0 2px 8px rgba(0,0,0,0.06); }
.alpha-vd-buy { background: rgba(16,185,129,0.12); color: var(--green); border: 1px solid rgba(16,185,129,0.25); }
.alpha-vd-sell { background: rgba(225,29,72,0.10); color: var(--red); border: 1px solid rgba(225,29,72,0.22); }
.alpha-vd-hold { background: rgba(161,161,170,0.12); color: var(--text-sub); border: 1px solid rgba(161,161,170,0.2); }
.alpha-risk-low { background: rgba(16,185,129,0.10); color: var(--green); border: 1px solid rgba(16,185,129,0.2); }
.alpha-risk-mid { background: rgba(245,158,11,0.10); color: #D97706; border: 1px solid rgba(245,158,11,0.22); }
.alpha-risk-high { background: rgba(225,29,72,0.10); color: var(--red); border: 1px solid rgba(225,29,72,0.2); }
.alpha-risk-ext { background: rgba(127,0,0,0.14); color: #DC2626; border: 1px solid rgba(220,38,38,0.25); }
.alpha-paper-hold { background: rgba(102,126,234,0.12); color: var(--accent); border: 1px solid rgba(102,126,234,0.22); }
.alpha-snap-metrics { display: flex; flex-wrap: wrap; gap: 8px; }
.alpha-snap-metric { display: inline-flex; align-items: center; gap: 4px; background: var(--bg); border: 1px solid var(--border); border-radius: 7px; padding: 3px 8px; transition: transform 0.2s ease, border-color 0.2s ease; }
.alpha-snap-metric:hover { transform: translateY(-1px); border-color: var(--accent); }
.alpha-snap-mk { font-size: 10px; color: var(--text-sub); }
.alpha-snap-mv { font-size: 12px; font-weight: 700; color: var(--text); font-family: 'JetBrains Mono', monospace; }
.alpha-snap-mv.up { color: var(--green); }
.alpha-snap-mv.down { color: var(--red); }
.alpha-fw-row { display: flex; flex-direction: column; gap: 4px; }
.alpha-fw-chip { display: grid; grid-template-columns: 52px 1fr 26px; align-items: center; gap: 5px; }
.alpha-fw-n { font-size: 10px; color: var(--text-sub); white-space: nowrap; }
.alpha-fw-track { height: 5px; background: var(--border); border-radius: 3px; overflow: hidden; }
.alpha-fw-fill { height: 100%; border-radius: 3px; transition: width 0.8s cubic-bezier(0.22,1,0.36,1); }
.alpha-fw-chip:hover .alpha-fw-fill { filter: brightness(1.2); }
.alpha-fw-high { background: var(--green); }
.alpha-fw-mid { background: #F59E0B; }
.alpha-fw-low { background: var(--text-sub); }
.alpha-fw-v { font-size: 10px; font-weight: 700; color: var(--text); font-family: 'JetBrains Mono', monospace; text-align: right; }

/* ===== v4: 跨周期三灯 ===== */
.alpha-tf-row { display: inline-flex; align-items: center; gap: 4px; background: rgba(148,163,184,0.08); border: 1px solid var(--border); border-radius: 20px; padding: 3px 10px; }
.alpha-tf-dot { font-size: 10px; font-weight: 700; padding: 2px 6px; border-radius: 10px; }
.alpha-tf-up { background: rgba(16,185,129,0.18); color: var(--green); }
.alpha-tf-down { background: rgba(225,29,72,0.14); color: var(--red); }
.alpha-tf-flat { background: rgba(161,161,170,0.12); color: var(--text-sub); }
.alpha-tf-label { font-size: 10px; color: var(--text-sub); margin-left: 3px; }

/* ===== v4: 逆向布局 action ===== */
.alpha-action-contrarian { font-size: 12px; font-weight: 700; padding: 3px 12px; border-radius: 14px; background: linear-gradient(135deg, rgba(245,158,11,0.15), rgba(217,119,6,0.08)); color: #D97706; border: 1px solid rgba(245,158,11,0.3); }

/* ===== v4: 熊市横幅 ===== */
.alpha-bear-banner { display: flex; align-items: center; gap: 8px; background: linear-gradient(135deg, rgba(220,38,38,0.12), rgba(127,29,29,0.08)); border: 1px solid rgba(220,38,38,0.25); border-radius: 10px; padding: 8px 14px; margin: 8px 0; }
.alpha-bear-icon { font-size: 16px; }
.alpha-bear-text { font-size: 12px; font-weight: 700; color: var(--red); letter-spacing: 0.3px; }

/* ===== v4: 熊市逆向候选区块 ===== */
.alpha-bear-section { margin-top: 16px; }
.alpha-bear-section-title { font-size: 13px; font-weight: 800; color: #D97706; margin-bottom: 10px; letter-spacing: 0.5px; }
.alpha-bear-card { background: linear-gradient(135deg, rgba(245,158,11,0.06), var(--bg-card)); border: 1px solid rgba(245,158,11,0.2); border-radius: 14px; padding: 12px 14px; margin-bottom: 10px; }
.alpha-bear-card-head { display: flex; align-items: center; gap: 8px; margin-bottom: 8px; flex-wrap: wrap; }
.alpha-bear-name { font-size: 15px; font-weight: 700; color: var(--text); }
.alpha-bear-code { font-size: 11px; color: var(--text-sub); flex: 1; }
.alpha-bear-price { font-size: 13px; font-weight: 700; font-family: 'JetBrains Mono', monospace; color: var(--text); }
.alpha-bear-reason { font-size: 11px; color: var(--text-sub); margin-top: 6px; }

/* ===== v4: v4 badge ===== */
.alpha-badge-v4 { background: linear-gradient(135deg, #D97706, #F59E0B, #FCD34D); color: #1C1917; }

/* Evolution section */
.alpha-evo-section { background: linear-gradient(135deg, var(--bg-card), var(--bg)); border-radius: 14px; padding: 14px 16px; margin-bottom: 12px; box-shadow: var(--shadow); border: 1px solid var(--border); }
.alpha-evo-title { font-size: 13px; font-weight: 800; background: linear-gradient(135deg, var(--accent), #A855F7); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; margin-bottom: 8px; letter-spacing: 0.5px; }
.alpha-evo-item { font-size: 12px; padding: 5px 0; border-bottom: 1px solid var(--border); color: var(--text-sub); line-height: 1.5; }
.alpha-evo-item:last-child { border-bottom: none; }
.alpha-evo-item::before { margin-right: 6px; font-size: 10px; }
.alpha-evo-good { color: var(--green); }
.alpha-evo-good::before { content: '\2713'; }
.alpha-evo-warn { color: var(--red); }
.alpha-evo-warn::before { content: '\26A0'; }

/* v98: Executive Brief */
.alpha-brief { display: flex; align-items: flex-start; gap: 10px; padding: 12px 14px; border-radius: 14px; margin-bottom: 10px; background: linear-gradient(135deg, rgba(79,70,229,0.08), rgba(168,85,247,0.04)); border: 1px solid rgba(79,70,229,0.18); line-height: 1.6; }
.alpha-brief-icon { flex-shrink: 0; font-size: 10px; font-weight: 900; padding: 4px 8px; border-radius: 8px; background: linear-gradient(135deg, var(--accent), #7C3AED); color: #fff; letter-spacing: 1px; }
.alpha-brief-text { font-size: 13px; color: var(--text); font-weight: 500; }
.alpha-brief-caution { background: linear-gradient(135deg, rgba(225,29,72,0.06), rgba(220,38,38,0.03)); border-color: rgba(225,29,72,0.15); }
.alpha-brief-caution .alpha-brief-icon { background: linear-gradient(135deg, #DC2626, #EF4444); }
.alpha-brief-hot { background: linear-gradient(135deg, rgba(245,158,11,0.06), rgba(234,88,12,0.03)); border-color: rgba(245,158,11,0.15); }
.alpha-brief-hot .alpha-brief-icon { background: linear-gradient(135deg, #F59E0B, #EA580C); }
.alpha-ctx-grid-inner { display: grid; grid-template-columns: repeat(6, 1fr); gap: 6px; margin-bottom: 14px; }

/* v98: Module Consensus */
.alpha-section-title { font-size: 13px; font-weight: 800; color: var(--text); margin-bottom: 8px; letter-spacing: 0.3px; }
.alpha-consensus-verdict { font-size: 11px; font-weight: 700; padding: 2px 8px; border-radius: 10px; background: rgba(79,70,229,0.1); color: var(--accent); margin-left: 6px; }
.alpha-consensus-bar { display: flex; gap: 6px; flex-wrap: wrap; margin-bottom: 6px; }
.alpha-vote-item { flex: 1; min-width: 70px; text-align: center; padding: 8px 4px; border-radius: 10px; border: 1px solid var(--border); background: var(--bg-card); }
.alpha-vote-name { display: block; font-size: 10px; color: var(--text-sub); font-weight: 600; margin-bottom: 2px; }
.alpha-vote-dir { font-size: 13px; font-weight: 800; }
.alpha-vote-bull .alpha-vote-dir { color: var(--green); }
.alpha-vote-bear .alpha-vote-dir { color: var(--red); }
.alpha-vote-neutral .alpha-vote-dir { color: var(--text-sub); }
.alpha-consensus-summary { font-size: 12px; color: var(--text-sub); text-align: center; margin-bottom: 14px; font-family: 'JetBrains Mono', monospace; }
#alpha-consensus { margin-bottom: 14px; }

/* v98: Benchmark */
#alpha-benchmark { margin-bottom: 14px; }
.alpha-bm-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 8px; }
.alpha-bm-item { text-align: center; padding: 12px 8px; border-radius: 12px; background: var(--bg-card); border: 1px solid var(--border); box-shadow: var(--shadow); }
.alpha-bm-highlight { border-color: rgba(79,70,229,0.3); background: linear-gradient(135deg, var(--bg-card), rgba(79,70,229,0.04)); }
.alpha-bm-val { font-size: 22px; font-weight: 900; font-family: 'JetBrains Mono', monospace; color: var(--text); }
.alpha-bm-label { font-size: 11px; color: var(--text-sub); margin-top: 2px; font-weight: 600; }
.alpha-bm-count { font-size: 10px; color: var(--text-sub); opacity: 0.7; }

/* v98: Accuracy History Chart */
.alpha-acc-chart { display: flex; align-items: flex-end; gap: 3px; height: 80px; padding: 4px 0; overflow-x: auto; }
.alpha-acc-bar-wrap { display: flex; flex-direction: column; align-items: center; flex: 1; min-width: 18px; height: 100%; justify-content: flex-end; }
.alpha-acc-bar { width: 100%; border-radius: 3px 3px 0 0; min-height: 4px; transition: height 0.4s ease; }
.alpha-acc-good { background: linear-gradient(180deg, #10B981, #34D399); }
.alpha-acc-mid { background: linear-gradient(180deg, var(--accent), #A855F7); }
.alpha-acc-low { background: linear-gradient(180deg, #EF4444, #F87171); }
.alpha-acc-date { font-size: 8px; color: var(--text-sub); margin-top: 2px; writing-mode: vertical-lr; }

/* v98: Grade Performance */
.alpha-grade-perf { display: flex; gap: 8px; flex-wrap: wrap; }
.alpha-gp-item { display: flex; align-items: center; gap: 6px; padding: 6px 10px; border-radius: 10px; background: var(--bg-card); border: 1px solid var(--border); }
.alpha-gp-grade { font-size: 14px; font-weight: 900; font-family: 'JetBrains Mono', monospace; }
.alpha-gp-count { font-size: 11px; color: var(--text-sub); }
.alpha-gp-score { font-size: 11px; font-weight: 700; color: var(--text); font-family: 'JetBrains Mono', monospace; }

/* v98: Risk Overview */
#alpha-risk { margin-bottom: 14px; }
.alpha-risk-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 6px; margin-bottom: 8px; }
.alpha-risk-item { text-align: center; padding: 10px 4px; border-radius: 10px; background: var(--bg-card); border: 1px solid var(--border); }
.alpha-risk-val { font-size: 18px; font-weight: 800; font-family: 'JetBrains Mono', monospace; color: var(--text); }
.alpha-risk-val.up { color: var(--green); }
.alpha-risk-val.down { color: var(--red); }
.alpha-risk-label { font-size: 10px; color: var(--text-sub); margin-top: 2px; }
/* 板块名片（大方版）*/
.alpha-risk-sectors { display: grid; grid-template-columns: repeat(auto-fill, minmax(80px, 1fr)); gap: 8px; margin-top: 4px; }
.alpha-sec-card { background: var(--bg-card); border: 1px solid var(--border); border-top: 3px solid var(--sec-color, var(--accent)); border-radius: 12px; padding: 12px 8px 10px; text-align: center; }
.alpha-sec-name { font-size: 11px; color: var(--text-sub); margin-bottom: 5px; line-height: 1.3; word-break: break-all; }
.alpha-sec-pct { font-size: 20px; font-weight: 900; color: var(--text); font-family: 'JetBrains Mono', monospace; }
.alpha-sec-bar { height: 3px; background: var(--border); border-radius: 2px; margin-top: 7px; }
.alpha-sec-bar-fill { height: 100%; border-radius: 2px; background: var(--sec-color, var(--accent)); }

/* v98: Evolution Log */
#alpha-evolution { max-height: 500px; overflow-y: auto; -webkit-overflow-scrolling: touch; }
.alpha-evo-entry { padding: 8px 0; border-bottom: 1px solid var(--border); }
.alpha-evo-entry:last-child { border-bottom: none; }
.alpha-evo-ver { font-size: 12px; font-weight: 800; color: var(--accent); font-family: 'JetBrains Mono', monospace; margin-right: 8px; }
.alpha-evo-date { font-size: 11px; color: var(--text-sub); }
.alpha-evo-change { font-size: 12px; color: var(--text); padding: 2px 0 2px 16px; line-height: 1.5; }
.alpha-evo-change::before { content: '→ '; color: var(--accent); }

/* Alpha card clickable */
.alpha-card { cursor: pointer; transition: transform 0.15s ease, box-shadow 0.15s ease; }
.alpha-card:active { transform: scale(0.98); }

/* Alpha mobile breakpoints */
@media (max-width: 480px) {
    .alpha-ctx-grid-inner { grid-template-columns: repeat(3, 1fr); }
    .alpha-risk-grid { grid-template-columns: repeat(2, 1fr); }
    .alpha-bm-grid { grid-template-columns: repeat(2, 1fr); }
    .alpha-risk-sectors { grid-template-columns: repeat(auto-fill, minmax(70px, 1fr)); }
    .alpha-sec-pct { font-size: 17px; }
}

/* ===== v2/v3: 熔断Badge ===== */
.alpha-badge-fuse { background: linear-gradient(135deg, #DC2626, #EF4444); animation: alphaPulse 1s ease-in-out infinite; }

/* ===== v3: 进化时间线（纵向折叠） ===== */
.alpha-tl-scroll { padding: 0; margin: 0; }
.alpha-timeline { display: flex; flex-direction: column; padding: 8px 4px 4px 18px; position: relative; }
.alpha-tl-node { position: relative; padding: 4px 0 8px 26px; }
.alpha-tl-dot { position: absolute; top: 6px; left: 0; width: 12px; height: 12px; border-radius: 50%; border: 2px solid var(--border); background: var(--bg-card); z-index: 1; }
.alpha-tl-active .alpha-tl-dot { background: var(--accent); border-color: var(--accent); box-shadow: 0 0 6px rgba(79,70,229,0.4); }
.alpha-tl-current .alpha-tl-dot { background: #10B981; border-color: #059669; animation: alphaPulse 2s ease-in-out infinite; box-shadow: 0 0 8px rgba(16,185,129,0.5); }
.alpha-tl-locked .alpha-tl-dot { background: var(--bg); border-color: var(--border); opacity: 0.4; }
.alpha-tl-locked .alpha-tl-content { opacity: 0.4; }
.alpha-tl-line { width: 2px; height: 12px; background: var(--border); margin-left: 5px; }
.alpha-tl-line-active { background: var(--accent); }
.alpha-tl-head { display: flex; align-items: center; gap: 5px; flex-wrap: wrap; }
.alpha-tl-ver { font-size: 12px; font-weight: 800; color: var(--accent); font-family: 'JetBrains Mono', monospace; }
.alpha-tl-icon { font-size: 13px; }
.alpha-tl-label { font-size: 12px; font-weight: 700; color: var(--text); }
.alpha-tl-desc { font-size: 10px; color: var(--text-sub); margin-top: 2px; line-height: 1.4; }
.alpha-tl-date { font-size: 10px; color: var(--text-sub); margin-top: 1px; opacity: 0.7; }
.alpha-tl-self-ver { color: #06b6d4; }
.alpha-evo-self-ver { color: #06b6d4; }
/* 折叠：默认只显示最近3个，展开按钮 */
.alpha-tl-node.alpha-tl-collapsed { display: none; }
.alpha-tl-line.alpha-tl-collapsed { display: none; }
.alpha-tl-expand-btn { background: none; border: 1px dashed var(--border); border-radius: 8px; color: var(--text-sub); font-size: 11px; padding: 4px 12px; margin: 2px 0 6px 0; cursor: pointer; transition: all 0.2s; }
.alpha-tl-expand-btn:hover { border-color: var(--accent); color: var(--accent); }

/* ===== v5: 奖励分布 ===== */
.alpha-reward-grid { display: flex; flex-wrap: wrap; gap: 6px; margin: 8px 0; }
.alpha-reward-item { padding: 4px 10px; border-radius: 8px; font-size: 12px; display: flex; gap: 6px; align-items: center; }
.alpha-reward-pos { background: rgba(16,185,129,0.12); color: #059669; }
.alpha-reward-neg { background: rgba(239,68,68,0.12); color: #ef4444; }
.alpha-reward-avg { font-size: 13px; color: var(--text-sub); margin: 6px 0; }
.alpha-reward-avg b { color: var(--accent); }

/* ===== v3: 回测仪表盘 ===== */
.alpha-bt-controls { display: flex; gap: 8px; margin: 10px 0; }
.alpha-bt-btn { flex: 1; padding: 10px; border: 1px solid var(--accent); background: transparent; color: var(--accent); font-size: 13px; font-weight: 700; border-radius: 10px; cursor: pointer; transition: all 0.2s; }
.alpha-bt-btn:active { background: var(--accent); color: #fff; }
.alpha-bt-loading { text-align: center; padding: 20px; color: var(--text-sub); font-size: 13px; }
.alpha-bt-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 6px; margin: 8px 0; }
.alpha-bt-stat { text-align: center; padding: 10px 4px; border-radius: 10px; background: var(--bg-card); border: 1px solid var(--border); }
.alpha-bt-val { font-size: 18px; font-weight: 800; font-family: 'JetBrains Mono', monospace; color: var(--text); }
.alpha-bt-val.up { color: var(--green); }
.alpha-bt-val.down { color: var(--red); }
.alpha-bt-label { font-size: 10px; color: var(--text-sub); margin-top: 2px; }
.alpha-bt-dims { display: flex; flex-wrap: wrap; gap: 4px; margin: 8px 0; }
.alpha-bt-dim-tag { font-size: 10px; padding: 3px 8px; border-radius: 8px; border: 1px solid var(--border); color: var(--text-sub); }
.alpha-bt-dim-tag.alpha-dim-fill-high { background: rgba(16,185,129,0.1); color: var(--green); border-color: rgba(16,185,129,0.3); }
.alpha-bt-dim-tag.alpha-dim-fill-mid { background: rgba(234,179,8,0.1); color: #B45309; border-color: rgba(234,179,8,0.3); }
.alpha-bt-dim-tag.alpha-dim-fill-low { background: rgba(239,68,68,0.1); color: var(--red); border-color: rgba(239,68,68,0.3); }
.alpha-bt-safety { font-size: 10px; color: var(--text-sub); text-align: center; margin-top: 6px; font-family: 'JetBrains Mono', monospace; }
.alpha-bt-fuse-warn { background: rgba(239,68,68,0.1); border: 1px solid rgba(239,68,68,0.3); color: var(--red); padding: 8px 12px; border-radius: 8px; font-size: 12px; font-weight: 700; text-align: center; margin-bottom: 8px; animation: alphaPulse 2s ease-in-out infinite; }
#alpha-bt-chart { width: 100%; margin: 8px 0; border-radius: 8px; max-height: 260px; }

/* ===== v3: 组合优化面板 ===== */
.alpha-pf-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 6px; margin: 8px 0; }
.alpha-pf-stat { text-align: center; padding: 10px 4px; border-radius: 10px; background: var(--bg-card); border: 1px solid var(--border); }
.alpha-pf-val { font-size: 16px; font-weight: 800; font-family: 'JetBrains Mono', monospace; color: var(--text); }
.alpha-pf-label { font-size: 10px; color: var(--text-sub); margin-top: 2px; }
.alpha-pf-suggestions { margin-top: 6px; }
.alpha-pf-sug { font-size: 11px; color: var(--text-sub); padding: 3px 0; line-height: 1.4; }
.alpha-pf-sug::before { content: '→ '; color: var(--accent); }
.alpha-pf-kelly-warn { margin-top: 6px; background: rgba(234,179,8,0.08); border: 1px solid rgba(234,179,8,0.2); border-radius: 8px; padding: 6px 10px; }
.alpha-pf-kv { font-size: 11px; color: #B45309; }
.alpha-pf-kv::before { content: '\26A0 '; }

@media (max-width: 480px) {
    .alpha-bt-grid { grid-template-columns: repeat(2, 1fr); }
    .alpha-pf-grid { grid-template-columns: repeat(2, 1fr); }
}

/* ===== v23: 交易成本 + VaR + 压力测试 + 因子协方差 ===== */
.alpha-bt-costs { font-size: 10px; color: var(--text-sub); text-align: center; margin: 4px 0 8px; padding: 4px 8px; background: rgba(0,0,0,0.02); border-radius: 6px; }
.alpha-bt-var { display: flex; flex-wrap: wrap; gap: 6px 12px; align-items: center; padding: 8px 10px; margin: 6px 0; border-radius: 8px; background: rgba(129,140,248,0.05); border: 1px solid rgba(129,140,248,0.12); font-size: 11px; color: var(--text-secondary); }
.alpha-bt-var-title { font-weight: 700; color: var(--accent); font-size: 11px; }
.alpha-bt-var-item b { font-family: 'JetBrains Mono', monospace; font-weight: 700; }
.alpha-bt-var-item b.down { color: var(--red); }
.alpha-bt-var-warn { font-size: 10px; color: #D97706; width: 100%; }
.alpha-bt-stress { margin: 8px 0; border-radius: 8px; overflow: hidden; border: 1px solid var(--border); }
.alpha-bt-stress-title { font-size: 11px; font-weight: 700; color: var(--accent); padding: 6px 10px; background: rgba(129,140,248,0.06); }
.alpha-stress-row { display: flex; align-items: center; gap: 8px; padding: 5px 10px; font-size: 11px; border-top: 1px solid var(--border); }
.alpha-stress-name { flex: 1; font-weight: 600; color: var(--text); }
.alpha-stress-impact { font-family: 'JetBrains Mono', monospace; font-weight: 800; min-width: 50px; text-align: right; }
.alpha-stress-dur { font-size: 10px; color: var(--text-sub); min-width: 42px; }
.alpha-stress-severe .alpha-stress-impact { color: var(--red); text-shadow: 0 0 8px var(--glow-red); }
.alpha-stress-high .alpha-stress-impact { color: #FB923C; }
.alpha-stress-mid .alpha-stress-impact { color: #D97706; }
/* 因子协方差热力图 */
.alpha-fcov-section { margin: 10px 0; padding: 10px; border-radius: 10px; background: rgba(0,0,0,0.02); border: 1px solid var(--border); }
.alpha-fcov-title { font-size: 12px; font-weight: 700; color: var(--accent); margin-bottom: 8px; }
.alpha-fcov-meta { font-size: 10px; font-weight: 400; color: var(--text-sub); }
.alpha-fcov-matrix { display: grid; grid-template-columns: repeat(9, 1fr); gap: 1px; margin-bottom: 8px; }
.fcov-cell { text-align: center; font-size: 9px; font-family: 'JetBrains Mono', monospace; padding: 4px 1px; border-radius: 3px; color: #fff; }
.fcov-header { background: transparent !important; color: var(--text-secondary); font-weight: 700; font-size: 9px; }
.fcov-high { outline: 1px solid rgba(248,113,113,0.5); }
.alpha-fcov-contrib { display: flex; flex-wrap: wrap; gap: 4px; margin: 6px 0; }
.alpha-rc-tag { font-size: 10px; padding: 2px 8px; border-radius: 10px; background: rgba(129,140,248,0.08); color: var(--text-secondary); border: 1px solid rgba(129,140,248,0.15); }
.alpha-fcov-ic { display: flex; flex-wrap: wrap; gap: 4px; margin: 4px 0; }
.alpha-ic-tag { font-size: 10px; padding: 2px 6px; border-radius: 6px; background: var(--bg-card); color: var(--text-secondary); }
.alpha-ic-tag.up { color: var(--green); background: rgba(52,211,153,0.08); }
.alpha-ic-tag.down { color: var(--red); background: rgba(248,113,113,0.08); }
.alpha-fcov-warn { font-size: 10px; color: #D97706; padding: 3px 0; }
@media (max-width: 480px) {
    .alpha-fcov-matrix { grid-template-columns: repeat(9, 1fr); font-size: 7px; }
    .fcov-cell { padding: 3px 0; font-size: 7px; }
    .alpha-bt-var { flex-direction: column; gap: 3px; }
}

/* ===== v22: Walk-Forward OOS 验证仪表盘 ===== */
.wf-badge { font-size: 10px; padding: 2px 8px; border-radius: 10px; font-weight: 700; margin-left: 8px; }
.wf-alpha-yes { background: rgba(52,211,153,0.15); color: var(--green); border: 1px solid rgba(52,211,153,0.3); }
.wf-alpha-no { background: rgba(248,113,113,0.12); color: var(--red); border: 1px solid rgba(248,113,113,0.3); }
.wf-verdict { font-size: 11px; padding: 8px 12px; border-radius: 8px; margin: 8px 0; line-height: 1.5; font-family: 'JetBrains Mono', monospace; }
.wf-verdict-good { background: rgba(52,211,153,0.08); border: 1px solid rgba(52,211,153,0.2); color: var(--green); }
.wf-verdict-bad { background: rgba(248,113,113,0.06); border: 1px solid rgba(248,113,113,0.15); color: var(--text-secondary); }
#wf-chart { width: 100%; margin: 8px 0; border-radius: 8px; }
.wf-table-wrap { overflow-x: auto; -webkit-overflow-scrolling: touch; margin: 8px 0; max-height: 200px; overflow-y: auto; scrollbar-width: thin; }
.wf-table { width: 100%; border-collapse: collapse; font-size: 11px; font-family: 'JetBrains Mono', monospace; }
.wf-table th { color: var(--text-sub); font-weight: 600; padding: 6px 4px; text-align: center; border-bottom: 1px solid var(--border); position: sticky; top: 0; background: var(--bg); }
.wf-table td { padding: 5px 4px; text-align: center; border-bottom: 1px solid rgba(0,0,0,0.03); color: var(--text-secondary); }
.wf-table .wf-range { font-size: 9px; white-space: nowrap; }

/* ===== Alpha Sub-Tabs (Premium) ===== */
.alpha-sub-tabs { display:flex; gap:3px; padding:0 12px; margin-bottom:14px; background:rgba(0,0,0,0.03); border-radius:12px; padding:4px; border:1px solid rgba(0,0,0,0.03); }
.alpha-sub-tab { flex:1; padding:8px 0; border:none; background:transparent; color:var(--text-sub); font-size:12px; font-weight:600; border-radius:9px; cursor:pointer; transition:all 0.25s cubic-bezier(0.22,1,0.36,1); position:relative; overflow:hidden; letter-spacing:0.3px; }
.alpha-sub-tab:hover { color:var(--text); background:rgba(168,85,247,0.06); }
.alpha-sub-tab.active { background:linear-gradient(135deg,#4F46E5,#7C3AED,#9333EA); color:#fff; box-shadow:0 2px 12px rgba(124,58,237,0.3); }
.alpha-subpanel { display:none; animation:alphaSlide 0.3s ease; }
.alpha-subpanel.active { display:block; }

/* ===== CEO Decision Center ===== */

/* CEO 决策摘要卡片 */
.ceo-verdict-card { background:var(--card); border-radius:12px; padding:16px; margin:0 12px 12px; border-left:4px solid var(--accent); }
.ceo-verdict-s { border-left-color:#D97706; }
.ceo-verdict-a { border-left-color:#059669; }
.ceo-verdict-b { border-left-color:#818CF8; }
.ceo-verdict-c { border-left-color:var(--text-sub); }
.ceo-verdict-d { border-left-color:#E11D48; }
.ceo-verdict-header { display:flex; justify-content:space-between; align-items:flex-start; margin-bottom:10px; flex-wrap:wrap; gap:6px; }
.ceo-verdict-stock { display:flex; align-items:center; gap:6px; flex-wrap:wrap; }
.ceo-grade-badge { display:inline-flex; align-items:center; justify-content:center; width:28px; height:28px; border-radius:8px; font-weight:800; font-size:14px; color:#fff; }
.ceo-grade-s { background:linear-gradient(135deg,#F59E0B,#EF4444); }
.ceo-grade-a { background:#10B981; }
.ceo-grade-b { background:#818CF8; }
.ceo-grade-c { background:var(--text-sub); }
.ceo-grade-d { background:#E11D48; }
.ceo-stock-name { font-weight:700; font-size:16px; color:var(--text); }
.ceo-stock-code { font-size:12px; color:var(--text-sub); }
.ceo-price-row { display:flex; align-items:baseline; gap:8px; }
.ceo-price { font-size:20px; font-weight:700; font-family:'JetBrains Mono',monospace; color:var(--text); }
.ceo-act-buy { background:linear-gradient(135deg,#10B981,#059669); color:#fff; padding:2px 10px; border-radius:12px; font-size:12px; font-weight:600; }
.ceo-act-sell { background:linear-gradient(135deg,#E11D48,#DC2626); color:#fff; padding:2px 10px; border-radius:12px; font-size:12px; font-weight:600; }
.ceo-act-hold { background:linear-gradient(135deg,#818CF8,#6366F1); color:#fff; padding:2px 10px; border-radius:12px; font-size:12px; font-weight:600; }
.ceo-verdict-text { font-size:14px; line-height:1.6; color:var(--text); margin-bottom:12px; padding:10px; background:rgba(79,70,229,0.05); border-radius:8px; }
.ceo-targets { display:flex; flex-wrap:wrap; gap:8px; margin-bottom:8px; }
.ceo-target-item { font-size:12px; color:var(--text-sub); background:var(--bg); padding:4px 8px; border-radius:6px; }
.ceo-target-item b { color:var(--text); margin-right:4px; }
.ceo-stop b { color:#E11D48; }
.ceo-price-warn { font-size:11px; color:#D97706; background:rgba(245,158,11,0.1); padding:4px 10px; border-radius:6px; margin-bottom:8px; line-height:1.4; }
.ceo-ratio-bar { height:4px; background:var(--bg); border-radius:2px; overflow:hidden; }
.ceo-ratio-fill { height:100%; background:linear-gradient(90deg,#E11D48,#F59E0B,#10B981); border-radius:2px; transition:width 0.6s ease; }

/* CEO 数据网格 */
.ceo-data-grid { display:grid; grid-template-columns:repeat(2,1fr); gap:10px; padding:0 12px 12px; }
.ceo-data-card { background:var(--card); border-radius:10px; padding:12px; border:1px solid var(--border); transition:transform 0.2s ease, box-shadow 0.2s ease, border-color 0.2s ease; }
.ceo-data-card:hover { transform:translateY(-2px); box-shadow:0 6px 20px rgba(139,92,246,0.08); border-color:rgba(139,92,246,0.2); }
.ceo-card-title { font-size:11px; font-weight:700; color:var(--accent); margin-bottom:8px; display:flex; align-items:center; gap:6px; letter-spacing:0.06em; text-transform:uppercase; border-bottom:1px solid var(--accent); padding-bottom:6px; }
.ceo-card-title small { font-weight:400; color:var(--text-sub); font-size:11px; text-transform:none; letter-spacing:0; }
.ceo-deep-sources { display:flex; flex-wrap:wrap; gap:4px; align-items:center; font-size:10px; color:var(--text-sub); margin-bottom:8px; padding:6px 0; border-bottom:1px dashed var(--border); }
.ceo-deep-tag { font-size:10px; padding:2px 8px; border-radius:10px; background:rgba(139,92,246,0.08); color:#7C3AED; border:1px solid rgba(139,92,246,0.15); }
.ceo-card-items { display:flex; flex-wrap:wrap; gap:5px; }
.ceo-data-item { display:inline-flex; align-items:center; gap:5px; background:var(--bg); padding:4px 8px; border-radius:6px; font-family:'JetBrains Mono',monospace; border:1px solid var(--border); transition:all 0.15s ease; cursor:default; }
.ceo-data-item:hover { background:rgba(139,92,246,0.06); border-color:rgba(139,92,246,0.25); transform:scale(1.03); }
.ceo-item-k { font-size:10px; color:var(--text-secondary); letter-spacing:0.03em; }
.ceo-item-v { font-size:13px; font-weight:700; color:var(--text); }
.ceo-val-good { color:var(--green) !important; }
.ceo-val-bad { color:var(--red) !important; }
.ceo-val-mid { color:#F59E0B !important; }

/* CEO 多空辩论 */
.ceo-debate-card { grid-column:1/-1; }
.ceo-debate-wrap { display:grid; grid-template-columns:1fr 1fr; gap:8px; }
.ceo-debate-col { padding:8px; border-radius:8px; }
.ceo-debate-bull { background:rgba(16,185,129,0.06); border-left:3px solid #10B981; }
.ceo-debate-bear { background:rgba(225,29,72,0.06); border-left:3px solid #E11D48; }
.ceo-debate-label { font-size:12px; font-weight:700; margin-bottom:6px; }
.ceo-debate-bull .ceo-debate-label { color:#059669; }
.ceo-debate-bear .ceo-debate-label { color:#E11D48; }
.ceo-debate-item { font-size:12px; color:var(--text-sub); margin-bottom:4px; line-height:1.4; padding:4px 6px; border-radius:6px; transition:all 0.15s ease; }
.ceo-debate-item:hover { background:rgba(0,0,0,0.05); transform:translateX(3px); }
.ceo-debate-bull .ceo-debate-item:hover { background:rgba(16,185,129,0.08); }
.ceo-debate-bear .ceo-debate-item:hover { background:rgba(225,29,72,0.08); }
.ceo-debate-item small { font-size:10px; color:var(--accent); margin-right:4px; }

/* CEO K线走势 */
.ceo-kline-card { grid-column:1/-1; }
.ceo-kline-card canvas { width:100% !important; max-height:160px; cursor:crosshair; }
/* 所有图表 canvas hover 十字光标 */
#sentiment-history-chart, #paper-nav-chart, #alpha-bt-chart, #sum-trend-canvas, #sa-capital-chart, #sa-peers-chart { cursor:crosshair; }

/* CEO 跨模块情报 */
.ceo-cross-card { grid-column:1/-1; background:linear-gradient(135deg,rgba(99,102,241,0.06),rgba(168,85,247,0.04)); }
.ceo-cross-items { display:grid; grid-template-columns:repeat(auto-fit, minmax(70px, 1fr)); gap:8px; padding:4px 0; }
.ceo-cross-item { display:flex; flex-direction:column; align-items:center; padding:8px 10px; border-radius:8px; background:rgba(0,0,0,0.03); transition:all 0.2s ease; cursor:pointer; border:1px solid transparent; }
.ceo-cross-item:hover { background:rgba(139,92,246,0.1); transform:translateY(-2px); box-shadow:0 4px 12px rgba(139,92,246,0.12); border-color:rgba(139,92,246,0.2); }
.ceo-cross-k { font-size:10px; color:var(--text-sub); margin-bottom:3px; letter-spacing:0.5px; }
.ceo-cross-v { font-size:14px; font-weight:700; }
.ceo-cross-sub { font-size:9px; color:var(--text-sub); margin-top:2px; }

/* CEO 缠论信号 */
.ceo-tracker-card { border-left:3px solid var(--accent); }
.ceo-tracker-hint { font-size:12px; color:var(--accent); padding:4px 8px; font-weight:600; }
.ceo-tracker-summary { font-size:11px; color:var(--text-sub); padding:2px 8px 4px; line-height:1.4; }

/* CEO Alpha预测 */
.ceo-pred-card { border-left:3px solid #a855f7; }
.ceo-pred-reason { font-size:11px; color:var(--text-sub); padding:4px 8px; line-height:1.4; }

/* CEO 背离警报卡片 */
.ceo-divergence-card { border-radius:10px; padding:12px; margin:0 12px 12px; }
.ceo-div-high { background:rgba(225,29,72,0.08); border:1.5px solid #E11D48; }
.ceo-div-medium { background:rgba(245,158,11,0.08); border:1.5px solid #F59E0B; }
.ceo-div-header { font-size:13px; font-weight:600; color:var(--text); margin-bottom:8px; display:flex; align-items:center; gap:8px; flex-wrap:wrap; }
.ceo-div-badge { font-size:11px; font-weight:700; padding:2px 8px; border-radius:4px; color:#fff; }
.ceo-div-high .ceo-div-badge { background:#E11D48; }
.ceo-div-medium .ceo-div-badge { background:#F59E0B; }
.ceo-div-item { margin-bottom:8px; padding:8px; background:rgba(0,0,0,0.03); border-radius:6px; }
.ceo-div-type { font-size:13px; font-weight:700; color:var(--text); margin-bottom:4px; }
.ceo-div-reasons { font-size:12px; color:var(--text-sub); margin-bottom:6px; line-height:1.5; }
.ceo-div-action { font-size:13px; color:var(--text); line-height:1.5; }
.ceo-div-action b { color:#E11D48; }
.ceo-div-medium .ceo-div-action b { color:#D97706; }

/* CEO 记忆卡片 */
.ceo-memory-card { background:rgba(79,70,229,0.05); border-radius:10px; padding:12px; margin:0 12px 12px; border:1px solid rgba(79,70,229,0.15); }
.ceo-memory-row { display:flex; justify-content:space-between; font-size:12px; color:var(--text-sub); margin-bottom:6px; }
.ceo-memory-changes { display:flex; flex-wrap:wrap; gap:4px; }
.ceo-mem-tag { font-size:11px; background:var(--card); padding:2px 6px; border-radius:4px; color:var(--accent); }

/* CEO AI 分析 */
.ceo-ai-section { background:var(--card); border-radius:10px; padding:12px; margin:0 12px 12px; }
.ceo-ai-text { font-size:13px; line-height:1.7; color:var(--text); }
/* CEO结构化AI段落 + v16入场动画 */
@keyframes ceoFadeSlide { from { opacity:0; transform:translateY(8px); } to { opacity:1; transform:translateY(0); } }
.ceo-verdict-box, .ceo-logic-list, .ceo-scenario-card, .ceo-action-box, .ceo-ai-block { animation: ceoFadeSlide 0.35s ease backwards; }
.ceo-verdict-box { animation-delay: 0s; }
.ceo-logic-list { animation-delay: 0.05s; }
.ceo-scenario-card { animation-delay: 0.10s; }
.ceo-action-box { animation-delay: 0.15s; }
.ceo-ai-block:nth-of-type(1) { animation-delay: 0.20s; }
.ceo-ai-block:nth-of-type(2) { animation-delay: 0.25s; }
.ceo-ai-block:nth-of-type(3) { animation-delay: 0.30s; }
.ceo-verdict-box { background:linear-gradient(135deg,rgba(139,92,246,.12),rgba(99,102,241,.08)); border-left:3px solid var(--accent); border-radius:8px; padding:12px 14px; font-size:14px; line-height:1.7; color:var(--text); font-weight:500; margin-bottom:10px; }
.ceo-logic-list { margin-bottom:10px; }
.ceo-logic-item { display:flex; align-items:flex-start; gap:8px; font-size:13px; color:var(--text); line-height:1.6; padding:4px 0; }
.ceo-logic-num { flex-shrink:0; color:var(--accent); font-weight:700; font-size:14px; min-width:16px; }
.ceo-ai-block { margin-bottom:10px; }
.ceo-ai-label { font-size:10px; font-weight:700; color:var(--accent); letter-spacing:.06em; text-transform:uppercase; margin-bottom:6px; }
.ceo-ai-content { font-size:13px; line-height:1.7; color:var(--text); }
.ceo-scenario-card { background:var(--bg); border-radius:8px; padding:10px 12px; margin-bottom:10px; }
.ceo-scenario-row { display:grid; grid-template-columns:42px 1fr 16px 1fr; align-items:center; gap:6px; padding:6px 0; border-bottom:1px solid var(--border); font-size:12px; }
.ceo-scenario-row:last-child { border-bottom:none; }
.ceo-sc-tag { font-weight:700; font-size:11px; padding:2px 6px; border-radius:4px; text-align:center; }
.ceo-sc-bull .ceo-sc-tag { background:rgba(34,197,94,.15); color:#16A34A; }
.ceo-sc-neutral .ceo-sc-tag { background:rgba(148,163,184,.15); color:var(--text-sub); }
.ceo-sc-bear .ceo-sc-tag { background:rgba(239,68,68,.12); color:#ef4444; }
.ceo-sc-cond { color:var(--text-sub); }
.ceo-sc-arrow { color:var(--text-sub); text-align:center; }
.ceo-sc-act { color:var(--text); font-weight:500; }
.ceo-sc-raw { font-size:12px; color:var(--text-sub); padding:4px 0; }
.ceo-action-box { background:rgba(99,102,241,.1); border:1px solid rgba(99,102,241,.3); border-radius:8px; padding:10px 14px; font-size:13px; font-weight:600; color:var(--text); margin-bottom:10px; }
.ceo-news-section { margin-bottom:10px; }
.ceo-news-item { display:grid; grid-template-columns:auto 10px 1fr; align-items:baseline; gap:6px; padding:5px 0; border-bottom:1px solid var(--border); font-size:12px; }
.ceo-news-item:last-child { border-bottom:none; }
.ceo-news-title { color:var(--text-sub); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; max-width:100px; font-weight:500; }
.ceo-news-dot { width:6px; height:6px; border-radius:50%; flex-shrink:0; margin-top:3px; }
.ceo-nd-pos { background:#22c55e; }
.ceo-nd-neg { background:#ef4444; }
.ceo-nd-neu { background:var(--text-sub); }
.ceo-news-comment { color:var(--text); line-height:1.5; }
.ceo-news-raw { font-size:12px; color:var(--text-sub); padding:4px 0; line-height:1.5; }

/* CEO 进度条 */
.ceo-progress { padding:48px 24px; text-align:center; }
.ceo-progress-bar { height:4px; background:var(--bg); border-radius:2px; overflow:hidden; margin-bottom:20px; max-width:320px; margin-left:auto; margin-right:auto; }
.ceo-progress-fill { height:100%; background:linear-gradient(90deg,#4F46E5,#7C3AED); border-radius:2px; width:5%; transition:width 1.2s ease; }
.ceo-progress-anim { animation:ceoProgPulse 2s ease-in-out infinite; }
@keyframes ceoProgPulse { 0%,100% { opacity:1; } 50% { opacity:0.7; } }
.ceo-progress-steps { display:flex; justify-content:center; gap:8px; flex-wrap:wrap; }
.ceo-step { font-size:12px; color:var(--text-sub); opacity:0.35; padding:4px 10px; border-radius:6px; background:rgba(124,58,237,0.04); border:1px solid transparent; transition:all 0.5s ease; }
.ceo-step.active { opacity:0.6; color:var(--text); }
.ceo-step.current { opacity:1; color:#7C3AED; border-color:rgba(124,58,237,0.3); background:rgba(124,58,237,0.08); animation:ceoStepGlow 1.5s ease-in-out infinite; }
@keyframes ceoStepGlow { 0%,100% { box-shadow:0 0 0 rgba(124,58,237,0); } 50% { box-shadow:0 0 12px rgba(124,58,237,0.2); } }
.ceo-progress-text { font-size:13px; color:var(--text-sub); }

/* CEO AI 生成中动画 */
.ceo-ai-generating { text-align:center; padding:40px 20px; }
.ceo-ai-pulse-ring { width:48px; height:48px; margin:0 auto 16px; border-radius:50%; border:3px solid rgba(139,92,246,0.2); border-top-color:#7C3AED; animation:ceoAiSpin 1s linear infinite; }
@keyframes ceoAiSpin { to { transform:rotate(360deg); } }
.ceo-ai-gen-text { font-size:14px; font-weight:600; color:var(--text); margin-bottom:6px; animation:ceoAiPulse 2s ease-in-out infinite; }
.ceo-ai-gen-sub { font-size:12px; color:var(--text-sub); margin-bottom:12px; }
.ceo-ai-gen-steps { display:flex; justify-content:center; gap:6px; flex-wrap:wrap; }
.ceo-ai-step { font-size:11px; padding:3px 10px; border-radius:12px; background:var(--bg-card); color:var(--text-sub); border:1px solid var(--border); transition:all 0.3s; }
.ceo-ai-step.active { background:rgba(139,92,246,0.1); color:#7C3AED; border-color:rgba(139,92,246,0.3); }
.ceo-ai-step.current { background:rgba(139,92,246,0.2); border-color:#7C3AED; animation:ceoAiPulse 1.5s ease-in-out infinite; }
@keyframes ceoAiPulse { 0%,100% { opacity:1; } 50% { opacity:0.5; } }

/* CEO 空状态 */
.ceo-empty-state { text-align:center; padding:60px 20px; color:var(--text-sub); }
.ceo-empty-icon { font-size:32px; font-weight:900; color:var(--accent); margin-bottom:12px; opacity:0.5; }
.ceo-empty-state p { margin:4px 0; font-size:13px; }

/* CEO Watchlist */
#ceo-watchlist { padding:0 12px; }
.ceo-wl-alerts { margin-bottom:12px; max-height:200px; overflow-y:auto; -webkit-overflow-scrolling:touch; }
.ceo-wl-alert { background:rgba(225,29,72,0.08); border-left:3px solid #E11D48; padding:8px 12px; border-radius:8px; margin-bottom:6px; display:flex; justify-content:space-between; align-items:center; font-size:12px; color:var(--text); }
.ceo-wl-list { display:flex; flex-direction:column; gap:4px; max-height:400px; overflow-y:auto; -webkit-overflow-scrolling:touch; }
.ceo-wl-card { display:flex; align-items:center; gap:8px; background:var(--card); padding:10px 12px; border-radius:8px; cursor:pointer; transition:background 0.2s; font-size:13px; }
.ceo-wl-card:active { background:var(--bg); }
.ceo-wl-highlight { border-left:3px solid #F59E0B; }
.ceo-wl-name { font-weight:600; color:var(--text); flex:1; }
.ceo-wl-code { color:var(--text-sub); font-size:11px; font-family:'JetBrains Mono',monospace; }
.ceo-wl-date { color:var(--text-sub); font-size:11px; }

/* CEO 手机适配 */
@media (max-width: 480px) {
    .ceo-data-grid { grid-template-columns:1fr; }
    .ceo-debate-wrap { grid-template-columns:1fr; }
    .ceo-verdict-header { flex-direction:column; }
    .ceo-targets { gap:4px; }
    .ceo-target-item { font-size:11px; }
}

/* ═══════════════════════════════════════════════════════════════
   Alpha 大改造 — 新增区块样式 (v105)
   ═══════════════════════════════════════════════════════════════ */

/* 通用新区块容器 */
.alpha-new-section { background: var(--bg-card); border-radius: 14px; padding: 14px 16px; margin-bottom: 12px; border: 1px solid rgba(168,85,247,0.1); }
.alpha-new-title { font-size: 14px; font-weight: 700; color: var(--text); margin-bottom: 10px; display: flex; align-items: center; gap: 6px; }

/* ── 追踪提醒 ── */
.alpha-alerts-section { background: linear-gradient(135deg, rgba(239,68,68,0.06), rgba(168,85,247,0.04)); border-color: rgba(239,68,68,0.15); }
.alpha-new-section-head { display: flex; align-items: center; gap: 8px; cursor: pointer; user-select: none; }
.alpha-alert-dot { width: 8px; height: 8px; border-radius: 50%; background: #ef4444; animation: alphaPulse 2s ease-in-out infinite; flex-shrink: 0; }
.alpha-expand-icon { margin-left: auto; font-size: 12px; color: var(--text-sub); transition: transform 0.2s; }
.alpha-alerts-section.expanded .alpha-expand-icon { transform: rotate(180deg); }
.alpha-alerts-body { max-height: 0; overflow: hidden; transition: max-height 0.3s ease; }
.alpha-alerts-section.expanded .alpha-alerts-body { max-height: 300px; overflow-y: auto; scrollbar-width: thin; }
.alpha-alert-item { display: flex; align-items: center; gap: 8px; padding: 8px 0; border-bottom: 1px solid rgba(0,0,0,0.03); font-size: 13px; }
.alpha-alert-item:last-child { border-bottom: none; }
.alpha-alert-name { font-weight: 600; color: var(--text); flex: 1; }
.alpha-alert-chg { font-family: 'JetBrains Mono', monospace; font-size: 12px; font-weight: 600; }
.alpha-alert-up .alpha-alert-chg { color: var(--bull); }
.alpha-alert-down .alpha-alert-chg { color: var(--bear); }
.alpha-alert-grade { font-size: 11px; font-weight: 700; padding: 2px 6px; border-radius: 6px; }
.alpha-alert-action { font-size: 11px; color: var(--text-sub); }

/* ── 今日研判 ── */
.alpha-briefing-section { background: linear-gradient(135deg, rgba(168,85,247,0.06), rgba(79,70,229,0.04)); }
.alpha-brief-text-box { font-size: 13px; line-height: 1.7; color: var(--text); padding: 10px 12px; background: rgba(168,85,247,0.05); border-radius: 10px; margin-bottom: 10px; border-left: 3px solid rgba(168,85,247,0.3); }
.alpha-digest-chips { display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 8px; }
.alpha-dg-chip { font-size: 11px; padding: 3px 8px; border-radius: 8px; background: rgba(168,85,247,0.08); color: var(--text-sub); white-space: nowrap; }
.alpha-market-summary { font-size: 12px; color: var(--text-sub); }
.alpha-ms-item { padding: 4px 0; display: flex; align-items: flex-start; gap: 6px; }
.alpha-ms-tag { font-size: 10px; font-weight: 700; padding: 2px 6px; border-radius: 4px; background: rgba(168,85,247,0.12); color: #7C3AED; flex-shrink: 0; }

/* ── 热门新闻 ── */
.alpha-hot-news { margin-top: 8px; border-top: 1px solid var(--border); padding-top: 8px; }
.alpha-hn-title { font-size: 12px; font-weight: 700; color: var(--text); margin-bottom: 6px; }
.alpha-hn-item { padding: 6px 0; border-bottom: 1px solid rgba(0,0,0,0.03); }
.alpha-hn-item:last-child { border-bottom: none; }
.alpha-hn-head { display: flex; align-items: center; gap: 6px; margin-bottom: 2px; }
.alpha-hn-tag { font-size: 9px; font-weight: 700; padding: 1px 5px; border-radius: 3px; flex-shrink: 0; }
.alpha-hn-tag-a { background: rgba(239,68,68,0.12); color: #DC2626; }
.alpha-hn-tag-us { background: rgba(59,130,246,0.12); color: #2563EB; }
.alpha-hn-time { font-size: 10px; color: var(--text-sub); opacity: 0.7; font-family: 'JetBrains Mono', monospace; }
.alpha-hn-text { font-size: 13px; color: var(--text); line-height: 1.5; font-weight: 500; }
.alpha-hn-digest { font-size: 11px; color: var(--text-sub); line-height: 1.4; margin-top: 2px; }
.alpha-hn-impact { display: flex; flex-wrap: wrap; gap: 4px; margin-top: 4px; }
.hn-bull { font-size: 10px; padding: 1px 6px; border-radius: 3px; background: rgba(34,197,94,0.15); color: #22c55e; font-weight: 600; }
.hn-bear { font-size: 10px; padding: 1px 6px; border-radius: 3px; background: rgba(239,68,68,0.15); color: #ef4444; font-weight: 600; }

/* ── 明日预测 ── */
.alpha-pred-section { background: linear-gradient(135deg, rgba(99,102,241,0.06), rgba(168,85,247,0.04)); }
.alpha-pred-date { font-size: 11px; font-weight: 400; color: var(--text-sub); margin-left: 4px; }
.alpha-pred-stats { font-size: 12px; color: var(--text-sub); margin-bottom: 8px; }
/* 预测准确率仪表盘 */
.alpha-acc-dashboard { display: flex; align-items: center; gap: 16px; margin-bottom: 12px; padding: 10px 12px; background: rgba(99,102,241,0.04); border-radius: 12px; border: 1px solid rgba(99,102,241,0.08); }
.alpha-acc-ring-wrap { text-align: center; flex-shrink: 0; }
.alpha-acc-ring { width: 80px; height: 80px; }
.alpha-acc-detail { font-size: 10px; color: var(--text-sub); margin-top: 2px; }
.alpha-acc-metrics { display: grid; grid-template-columns: repeat(auto-fill, minmax(90px, 1fr)); gap: 6px; flex: 1; }
.alpha-acc-metric { text-align: center; padding: 6px 4px; background: rgba(0,0,0,0.03); border-radius: 8px; border: 1px solid rgba(0,0,0,0.03); }
.alpha-acc-val { display: block; font-size: 15px; font-weight: 700; color: var(--text); font-family: 'JetBrains Mono', monospace; }
.alpha-acc-label { display: block; font-size: 9px; color: var(--text-sub); margin-top: 2px; }
.alpha-acc-wf { border-color: rgba(52,211,153,0.2); background: rgba(52,211,153,0.04); }
.alpha-pos { color: var(--green, #34D399) !important; }
.alpha-neg { color: var(--red, #F87171) !important; }
/* 已验证预测列表 */
.alpha-verified-wrap { margin-bottom: 10px; padding: 8px 10px; background: rgba(0,0,0,0.02); border-radius: 8px; }
.alpha-verified-title { font-size: 11px; color: var(--text-sub); margin-bottom: 6px; }
.alpha-verified-list { display: flex; gap: 8px; overflow-x: auto; scrollbar-width: thin; }
.alpha-verified-item { flex-shrink: 0; display: flex; align-items: center; gap: 6px; padding: 4px 10px; border-radius: 6px; background: rgba(0,0,0,0.03); border: 1px solid rgba(0,0,0,0.04); font-size: 12px; }
.alpha-verified-date { color: var(--text-sub); }
.alpha-verified-score { font-weight: 700; font-family: 'JetBrains Mono', monospace; }
.alpha-verified-detail { color: var(--text-sub); font-size: 10px; }
/* 系统能力矩阵 */
.alpha-cap-section { background: linear-gradient(135deg, rgba(129,140,248,0.06), rgba(52,211,153,0.03)); }
.alpha-cap-stats { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; margin-bottom: 12px; }
@media (min-width: 420px) { .alpha-cap-stats { grid-template-columns: repeat(6, 1fr); } }
.alpha-cap-stat { text-align: center; padding: 8px 4px; background: rgba(0,0,0,0.03); border-radius: 8px; border: 1px solid rgba(0,0,0,0.04); }
.alpha-cap-num { display: block; font-size: 16px; font-weight: 700; color: var(--accent, #818CF8); font-family: 'JetBrains Mono', monospace; }
.alpha-cap-label { display: block; font-size: 9px; color: var(--text-sub); margin-top: 2px; }
.alpha-cap-ml { padding: 8px 10px; background: rgba(129,140,248,0.04); border-radius: 8px; border: 1px solid rgba(129,140,248,0.1); margin-bottom: 10px; }
.alpha-cap-ml-title { font-size: 11px; font-weight: 600; color: var(--accent, #818CF8); margin-bottom: 6px; }
.alpha-cap-ml-grid { display: flex; flex-wrap: wrap; gap: 6px; font-size: 11px; color: var(--text-sub); }
.alpha-cap-feat { background: rgba(129,140,248,0.08); padding: 2px 6px; border-radius: 4px; font-size: 10px; font-family: 'JetBrains Mono', monospace; }
.alpha-cap-features { display: grid; grid-template-columns: 1fr; gap: 6px; margin-bottom: 12px; }
@media (min-width: 420px) { .alpha-cap-features { grid-template-columns: repeat(2, 1fr); } }
.alpha-cap-feature { padding: 8px 10px; background: rgba(0,0,0,0.02); border-radius: 8px; border: 1px solid rgba(0,0,0,0.03); }
.alpha-cap-fname { display: block; font-size: 12px; font-weight: 600; color: var(--text); margin-bottom: 2px; }
.alpha-cap-fdesc { font-size: 10px; color: var(--text-sub); line-height: 1.4; }
/* 竞品对比表 */
.alpha-cap-compare { margin-top: 10px; }
.alpha-cap-compare-title { font-size: 12px; font-weight: 600; color: var(--text); margin-bottom: 8px; }
.alpha-cap-table { width: 100%; border-collapse: collapse; font-size: 11px; }
.alpha-cap-table th { padding: 6px 8px; text-align: center; color: var(--text-sub); font-weight: 500; border-bottom: 1px solid rgba(0,0,0,0.06); }
.alpha-cap-table th:first-child { text-align: left; }
.alpha-cap-table td { padding: 5px 8px; text-align: center; border-bottom: 1px solid rgba(0,0,0,0.03); }
.alpha-cap-table td:first-child { text-align: left; color: var(--text); font-weight: 500; }
.alpha-cap-yes { color: #059669; font-weight: 600; }
.alpha-cap-no { color: var(--text-sub); opacity: 0.4; }
.alpha-cap-partial { color: #D97706; }
.alpha-pred-cards { display: grid; grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); gap: 8px; max-height: 200px; overflow-y: auto; scrollbar-width: thin; }
.alpha-pred-card { padding: 10px; border-radius: 10px; background: rgba(0,0,0,0.03); border: 1px solid rgba(0,0,0,0.05); transition: all 0.2s ease; cursor:pointer; }
.alpha-pred-card:hover { transform: translateY(-2px); box-shadow:0 4px 16px rgba(139,92,246,0.1); border-color:rgba(139,92,246,0.2); background:rgba(139,92,246,0.04); }
.alpha-pred-card-head { display: flex; align-items: center; gap: 6px; margin-bottom: 6px; }
.alpha-pred-icon { font-size: 18px; font-weight: 700; }
.alpha-pred-up .alpha-pred-icon { color: var(--bull); }
.alpha-pred-down .alpha-pred-icon { color: var(--bear); }
.alpha-pred-flat .alpha-pred-icon { color: var(--text-sub); }
.alpha-pred-name { font-size: 12px; font-weight: 600; color: var(--text); flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.alpha-pred-code { font-size: 10px; color: var(--text-sub); }
.alpha-pred-card-body { display: flex; flex-wrap: wrap; gap: 4px; font-size: 11px; }
.alpha-pred-dir-text { font-weight: 600; }
.alpha-pred-up .alpha-pred-dir-text { color: var(--bull); }
.alpha-pred-down .alpha-pred-dir-text { color: var(--bear); }
.alpha-pred-range-text { color: var(--text-sub); font-family: 'JetBrains Mono', monospace; }
.alpha-pred-conf-text { color: var(--text-sub); }

/* ── 智能推荐 ── */
.alpha-reco-section { background: linear-gradient(135deg, rgba(16,185,129,0.06), rgba(168,85,247,0.03)); }
.alpha-reco-count { font-size: 11px; font-weight: 400; color: var(--text-sub); }
.alpha-reco-empty { font-size: 13px; color: var(--text-sub); text-align: center; padding: 16px; }
.alpha-reco-cards { display: flex; flex-direction: column; gap: 8px; }
.alpha-reco-card { padding: 10px 36px 10px 12px; border-radius: 10px; background: rgba(0,0,0,0.03); border: 1px solid rgba(0,0,0,0.05); cursor: pointer; transition: background 0.15s; position: relative; }
.alpha-reco-card:hover { background: rgba(168,85,247,0.06); }
.alpha-reco-card-head { display: flex; align-items: center; gap: 8px; }
.alpha-reco-grade { font-size: 11px; font-weight: 700; padding: 2px 6px; border-radius: 6px; }
.alpha-reco-name { font-size: 13px; font-weight: 600; color: var(--text); flex: 1; }
.alpha-reco-chg { font-size: 12px; font-family: 'JetBrains Mono', monospace; font-weight: 600; }
.alpha-reco-chg.up { color: var(--bull); }
.alpha-reco-chg.down { color: var(--bear); }
.alpha-reco-reason { font-size: 11px; color: var(--text-sub); margin-top: 4px; }
.alpha-star-btn { position: absolute; right: 10px; top: 50%; transform: translateY(-50%); background: none; border: none; font-size: 18px; color: var(--text-sub); cursor: pointer; padding: 4px; transition: color 0.2s; }
.alpha-star-btn:hover, .alpha-star-btn.active { color: #D97706; }

/* ── 用户追踪列表 ── */
.alpha-wl-section { background: linear-gradient(135deg, rgba(245,158,11,0.06), rgba(168,85,247,0.03)); }
.alpha-wl-count { font-size: 11px; font-weight: 400; color: var(--text-sub); }
.alpha-wl-input-row { display: flex; gap: 8px; margin-bottom: 10px; }
.alpha-wl-input-row input { flex: 1; padding: 8px 12px; border-radius: 8px; border: 1px solid rgba(0,0,0,0.07); background: rgba(0,0,0,0.03); color: var(--text); font-size: 13px; outline: none; }
.alpha-wl-input-row input:focus { border-color: rgba(168,85,247,0.4); }
.alpha-wl-add-btn { padding: 8px 16px; font-size: 12px; }
.alpha-wl-empty { font-size: 13px; color: var(--text-sub); text-align: center; padding: 20px; }
.alpha-wl-list { max-height: 300px; overflow-y: auto; scrollbar-width: thin; -webkit-overflow-scrolling: touch; }
.alpha-wl-item { border-bottom: 1px solid rgba(0,0,0,0.03); }
.alpha-wl-item:last-child { border-bottom: none; }
.alpha-wl-item-main { display: flex; align-items: center; gap: 8px; padding: 10px 0; cursor: pointer; transition: all 0.2s ease; border-radius:8px; }
.alpha-wl-item-main:hover { background: rgba(168,85,247,0.06); padding-left:6px; }
.alpha-wl-item-left { flex: 1; min-width: 0; }
.alpha-wl-name { font-size: 13px; font-weight: 600; color: var(--text); display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.alpha-wl-code { font-size: 11px; color: var(--text-sub); }
.alpha-wl-item-mid { text-align: right; }
.alpha-wl-price { font-size: 13px; font-weight: 600; color: var(--text); display: block; font-family: 'JetBrains Mono', monospace; }
.alpha-wl-chg { font-size: 11px; font-family: 'JetBrains Mono', monospace; font-weight: 600; }
.alpha-wl-chg.up { color: var(--bull); }
.alpha-wl-chg.down { color: var(--bear); }
.alpha-wl-item-right { display: flex; align-items: center; gap: 6px; }
.alpha-wl-grade { font-size: 11px; font-weight: 700; padding: 2px 6px; border-radius: 6px; }
.alpha-wl-remove { background: none; border: none; color: var(--text-sub); font-size: 16px; cursor: pointer; padding: 2px 6px; border-radius: 4px; transition: all 0.15s; }
.alpha-wl-remove:hover { color: #ef4444; background: rgba(239,68,68,0.1); }
.alpha-wl-item-detail { padding: 0 0 10px 0; font-size: 12px; color: var(--text-sub); }
.alpha-wl-action { margin-bottom: 4px; }
.alpha-wl-pred { margin-bottom: 6px; }
.alpha-wl-report-btn { font-size: 12px; color: #7C3AED; background: rgba(168,85,247,0.08); border: none; padding: 6px 12px; border-radius: 8px; cursor: pointer; transition: background 0.15s; }
.alpha-wl-report-btn:hover { background: rgba(168,85,247,0.15); }

/* ── Alpha ⭐ 按钮（卡片内） ── */
.alpha-star { position: absolute; top: 10px; right: 10px; background: none; border: none; font-size: 18px; color: var(--text-sub); cursor: pointer; padding: 2px; z-index: 2; transition: color 0.2s, transform 0.15s; }
.alpha-star:hover { color: #D97706; transform: scale(1.2); }
.alpha-star.active { color: #D97706; }
.alpha-card-inner { position: relative; }

/* ── 学习系统（游戏成就） ── */
.alpha-learning-section { background: linear-gradient(135deg, rgba(168,85,247,0.06), rgba(99,102,241,0.04)); }
/* 等级条 */
.alpha-lv-bar { margin-bottom: 12px; }
.alpha-lv-info { display: flex; align-items: center; gap: 8px; margin-bottom: 6px; }
.alpha-lv-badge { background: linear-gradient(135deg, #8B5CF6, #6366F1); color: #fff; font-size: 12px; font-weight: 700; padding: 3px 10px; border-radius: 12px; font-family: 'JetBrains Mono', monospace; letter-spacing: 0.5px; }
.alpha-lv-xp { font-size: 12px; color: var(--text-sub); font-family: 'JetBrains Mono', monospace; }
.alpha-lv-unlock { font-size: 11px; color: var(--text-sub); margin-left: auto; }
.alpha-lv-track { height: 6px; background: rgba(0,0,0,0.05); border-radius: 3px; overflow: hidden; }
.alpha-lv-fill { height: 100%; background: linear-gradient(90deg, #8B5CF6, #06B6D4); border-radius: 3px; transition: width 0.6s ease; }
/* 统计行 */
.alpha-stats-row { display: grid; grid-template-columns: repeat(4, 1fr); gap: 8px; margin-bottom: 12px; }
.alpha-stat-cell { text-align: center; padding: 8px 4px; background: rgba(0,0,0,0.03); border-radius: 8px; }
.alpha-stat-num { font-size: 16px; font-weight: 700; color: var(--text); font-family: 'JetBrains Mono', monospace; }
.alpha-stat-lbl { font-size: 10px; color: var(--text-sub); margin-top: 2px; }
/* 成就网格 */
.alpha-achieve-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 6px; margin-bottom: 12px; }
.alpha-ach { text-align: center; padding: 8px 4px; border-radius: 10px; border: 1px solid rgba(0,0,0,0.05); transition: transform 0.2s, border-color 0.3s; }
.alpha-ach:hover { transform: translateY(-2px); }
.alpha-ach-locked { opacity: 0.45; }
.alpha-ach-unlocked { border-color: rgba(168,85,247,0.25); background: rgba(168,85,247,0.04); }
.alpha-ach-unlocked.alpha-ach-t3 { border-color: rgba(245,158,11,0.3); background: rgba(245,158,11,0.04); }
.alpha-ach-icon { font-size: 20px; margin-bottom: 3px; }
.alpha-ach-unlocked .alpha-ach-icon { animation: achPop 0.5s ease; }
@keyframes achPop { 0%{transform:scale(1)} 50%{transform:scale(1.25)} 100%{transform:scale(1)} }
.alpha-ach-name { font-size: 10px; font-weight: 600; color: var(--text); margin-bottom: 4px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.alpha-ach-prog-track { height: 3px; background: rgba(0,0,0,0.05); border-radius: 2px; overflow: hidden; margin-bottom: 2px; }
.alpha-ach-prog-fill { height: 100%; border-radius: 2px; transition: width 0.5s ease; }
.alpha-ach-t1 .alpha-ach-prog-fill { background: #8B5CF6; }
.alpha-ach-t2 .alpha-ach-prog-fill { background: #06B6D4; }
.alpha-ach-t3 .alpha-ach-prog-fill { background: #F59E0B; }
.alpha-ach-prog-text { font-size: 9px; color: var(--text-sub); font-family: 'JetBrains Mono', monospace; }
/* 研判 placeholder */
.alpha-brief-placeholder { font-size: 12px; color: var(--text-sub); padding: 10px 14px; background: rgba(0,0,0,0.02); border-radius: 8px; border-left: 3px solid rgba(168,85,247,0.2); margin-bottom: 8px; font-style: italic; }
.alpha-brief-date { font-size: 11px; color: var(--text-sub); font-weight: 400; margin-left: 6px; }
/* 已有的模式/教训列表 */
.alpha-learn-items { margin-bottom: 8px; }
.alpha-learn-sub { font-size: 11px; font-weight: 600; color: var(--text-sub); margin-bottom: 4px; text-transform: uppercase; letter-spacing: 0.5px; }
.alpha-learn-item { display: flex; align-items: center; gap: 8px; padding: 4px 6px; font-size: 12px; border-radius:6px; transition:all 0.15s ease; }
.alpha-learn-item:hover { background:rgba(139,92,246,0.06); transform:translateX(3px); }
.alpha-learn-name { flex: 1; color: var(--text); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.alpha-learn-conf { font-weight: 700; font-family: 'JetBrains Mono', monospace; font-size: 11px; padding: 1px 6px; border-radius: 4px; }
.alpha-learn-conf-high { background: rgba(16,185,129,0.15); color: #059669; }
.alpha-learn-conf-mid { background: rgba(245,158,11,0.15); color: #D97706; }
.alpha-learn-conf-low { background: rgba(239,68,68,0.15); color: #ef4444; }
.alpha-learn-count { font-size: 11px; color: var(--text-sub); }
.alpha-learn-lesson { border-left: 2px solid rgba(239,68,68,0.3); padding-left: 8px; }
.alpha-learn-date { font-size: 10px; color: var(--text-sub); white-space: nowrap; }
.alpha-learn-result { font-family: 'JetBrains Mono', monospace; font-size: 11px; font-weight: 600; color: var(--bear); }

/* ── Ripple 点击效果 ── */
.alpha-ripple { position:absolute; border-radius:50%; background:rgba(168,85,247,0.25); pointer-events:none; animation:alphaRipple 0.6s ease-out forwards; }

/* ── 折叠/展开动画 ── */
.alpha-collapse-toggle { cursor:pointer; user-select:none; display:flex; align-items:center; justify-content:space-between; padding:10px 14px !important; transition:background 0.2s; border-radius:10px; }
.alpha-collapse-toggle:hover { background:rgba(168,85,247,0.04); }
.alpha-collapse-icon { font-size:12px; color:var(--text-sub); transition:transform 0.3s; }
.collapsed { max-height:0 !important; overflow:hidden !important; opacity:0 !important; padding-top:0 !important; padding-bottom:0 !important; margin-top:0 !important; margin-bottom:0 !important; transition:all 0.35s cubic-bezier(0.22,1,0.36,1); }

/* ── 融合的经验洞察区块 ── */
.alpha-insights-merged { background:var(--bg-card); border-radius:14px; padding:0; margin-bottom:12px; border:1px solid var(--border); box-shadow:var(--shadow); overflow:hidden; }
.alpha-insights-body { padding:10px 14px; transition:all 0.35s ease; }
.alpha-ins-events { display:flex; flex-wrap:wrap; gap:6px; margin-bottom:10px; }
.alpha-ins-event { display:flex; align-items:center; gap:6px; padding:6px 10px; background:rgba(245,158,11,0.06); border:1px solid rgba(245,158,11,0.15); border-radius:8px; font-size:12px; transition:all 0.15s ease; cursor:pointer; }
.alpha-ins-event:hover { transform:scale(1.03); box-shadow:0 2px 10px rgba(245,158,11,0.15); background:rgba(245,158,11,0.1); }
.alpha-ins-ev-type { font-weight:600; color:var(--text); }
.alpha-ins-ev-conf { font-size:11px; color:#D97706; font-family:'JetBrains Mono',monospace; font-weight:600; }
.alpha-ins-ev-hits { font-size:10px; color:var(--text-sub); }
.alpha-ins-confirmed { margin-bottom:10px; }
.alpha-ins-label { font-size:12px; font-weight:600; color:var(--text-sub); margin-bottom:6px; }
.alpha-ins-sig { display:inline-block; padding:3px 10px; margin:2px 4px 2px 0; background:rgba(16,185,129,0.08); border:1px solid rgba(16,185,129,0.2); border-radius:8px; font-size:12px; color:#059669; font-weight:600; }
.alpha-ins-reco { display:flex; flex-direction:row; flex-wrap:wrap; gap:4px; }
.alpha-ins-reco .alpha-ins-label { flex-basis:100%; }
.alpha-ins-buy { color:var(--green) !important; }
.alpha-ins-sell { color:var(--red) !important; }
.alpha-ins-stock-buy { display:inline-block; padding:4px 10px; margin:2px 4px 2px 0; background:rgba(16,185,129,0.06); border:1px solid rgba(16,185,129,0.15); border-radius:8px; font-size:12px; color:var(--text); cursor:pointer; transition:all 0.2s; max-width:100%; word-break:break-word; box-sizing:border-box; }
.alpha-ins-stock-buy:hover { background:rgba(16,185,129,0.12); border-color:rgba(16,185,129,0.3); transform:translateY(-1px); }
.alpha-ins-stock-sell { display:inline-block; padding:4px 10px; margin:2px 4px 2px 0; background:rgba(239,68,68,0.06); border:1px solid rgba(239,68,68,0.12); border-radius:8px; font-size:12px; color:var(--text-sub); max-width:100%; word-break:break-word; box-sizing:border-box; cursor:pointer; transition:all 0.2s; }
.alpha-ins-stock-sell:hover { background:rgba(239,68,68,0.12); border-color:rgba(239,68,68,0.3); transform:translateY(-1px); }

/* ── Alpha section title 升级 ── */
.alpha-section-title { font-size:13px; font-weight:700; color:var(--text); margin-bottom:10px; padding:10px 14px; display:flex; align-items:center; gap:8px; letter-spacing:0.3px; }
.alpha-section-title::before { content:''; width:3px; height:14px; border-radius:2px; background:linear-gradient(180deg,#7C3AED,#4F46E5); flex-shrink:0; }

/* ── 卡片内分割线升级 ── */
.alpha-card-stripe { position:absolute; left:0; top:0; bottom:0; width:4px; transition:width 0.3s; }
.alpha-card-expanded .alpha-card-stripe { width:5px; }

/* ── 交互：Alpha ctx grid 升级 ── */
.alpha-ctx-grid-inner { display:grid; grid-template-columns:repeat(4,1fr); gap:8px; margin-top:12px; }
.alpha-ctx-item { transition:transform 0.2s, box-shadow 0.2s; }
.alpha-ctx-item:hover { transform:translateY(-2px); box-shadow:0 4px 12px rgba(0,0,0,0.06); }
.alpha-ctx-item:active { transform:scale(0.97); }

/* ── 交互：Score ring pulse on hover ── */
.alpha-score-ring { transition:transform 0.2s, box-shadow 0.2s; }
.alpha-card:hover .alpha-score-ring { transform:scale(1.05); }
.alpha-card-expanded .alpha-score-ring { box-shadow:0 0 16px rgba(124,58,237,0.2); }

/* ── 交互：Alpha brief 升级 ── */
.alpha-brief { backdrop-filter:blur(8px); -webkit-backdrop-filter:blur(8px); }

/* ── 交互：Agent section 在 Alpha 中的样式 ── */
#alpha-sub-agent .agent-regime-card { border-radius:14px; border:1px solid var(--border); box-shadow:var(--shadow); }
#alpha-sub-agent .agent-section { background:var(--bg-card); border-radius:14px; padding:14px; margin-bottom:10px; border:1px solid var(--border); box-shadow:var(--shadow); }
#alpha-sub-agent .agent-stock-card { transition:transform 0.2s, box-shadow 0.2s; }
#alpha-sub-agent .agent-stock-card:hover { transform:translateY(-2px); box-shadow:0 4px 16px rgba(0,0,0,0.06); }

/* ── 交互：Paper trading 在 Alpha 中的样式 ── */
#alpha-sub-paper .cli-paper-section { background:var(--bg-card); border-radius:14px; padding:16px; border:1px solid var(--border); box-shadow:var(--shadow); }
#alpha-sub-paper .cli-paper-hold-card { transition:transform 0.2s; cursor:pointer; }
#alpha-sub-paper .cli-paper-hold-card:hover { transform:translateY(-1px); }

/* ── 手机适配 ── */
@media (max-width: 480px) {
    .alpha-pred-cards { grid-template-columns: 1fr 1fr; }
    .alpha-wl-item-main { gap: 6px; }
    .alpha-wl-name { font-size: 12px; }
    .alpha-reco-card-head { flex-wrap: wrap; }
    .alpha-digest-chips { gap: 4px; }
    .alpha-dg-chip { font-size: 10px; padding: 2px 6px; }
    .alpha-achieve-grid { grid-template-columns: repeat(3, 1fr); }
    .alpha-stats-row { grid-template-columns: repeat(4, 1fr); gap: 4px; }
    .alpha-stat-num { font-size: 14px; }
    .alpha-ach-icon { font-size: 18px; }
    .alpha-ach-name { font-size: 9px; }
    .alpha-sub-tab { font-size: 11px; padding: 7px 0; }
    .alpha-ctx-grid-inner { grid-template-columns: repeat(4, 1fr); gap: 6px; }
    .alpha-title { font-size: 22px; letter-spacing: 2px; }
}

/* === 交互增强 v129 === */

/* 追踪列表价格变动闪烁 */
@keyframes priceFlashUp { 0%{background:rgba(16,185,129,0.3)} 100%{background:transparent} }
@keyframes priceFlashDown { 0%{background:rgba(239,68,68,0.3)} 100%{background:transparent} }
.alpha-wl-flash-up { animation: priceFlashUp 1s ease-out; }
.alpha-wl-flash-down { animation: priceFlashDown 1s ease-out; }

/* CEO AI 分析段落 hover */
.ceo-ai-section .ceo-ai-point { transition:all 0.15s ease; padding:4px 8px; border-radius:8px; margin:2px 0; }
.ceo-ai-section .ceo-ai-point:hover { background:rgba(139,92,246,0.06); transform:translateX(3px); }
.ceo-ai-section .ceo-ai-scenario-row { transition:all 0.15s ease; border-radius:6px; }
.ceo-ai-section .ceo-ai-scenario-row:hover { background:rgba(139,92,246,0.05); }

/* CEO 新闻解读条目 hover */
.ceo-ai-section .ceo-ai-news-item { transition:all 0.15s ease; padding:6px 8px; border-radius:8px; margin:3px 0; border-left:3px solid transparent; }
.ceo-ai-section .ceo-ai-news-item:hover { background:rgba(139,92,246,0.04); border-left-color:var(--accent); transform:translateX(3px); }

/* Alpha 成就徽章 hover */
.alpha-ach { transition:all 0.2s ease; }
.alpha-ach:hover { transform:translateY(-3px) scale(1.05); box-shadow:0 6px 16px rgba(139,92,246,0.15); }
.alpha-ach:not(.alpha-ach-locked):hover { filter:brightness(1.1); }

/* Alpha 总览统计格子 hover 脉冲 */
.alpha-stat { transition:all 0.2s ease; cursor:default; }
.alpha-stat:hover { transform:scale(1.05); }
.alpha-stat:hover .alpha-stat-num { text-shadow:0 0 8px currentColor; }

/* CEO 评级徽章脉冲 */
@keyframes gradePulse { 0%,100%{box-shadow:0 0 0 0 rgba(139,92,246,0.4)} 50%{box-shadow:0 0 0 8px rgba(139,92,246,0)} }
.ceo-grade-badge { animation:gradePulse 2s ease infinite; }

/* 数据卡片展开/折叠箭头 */
.ceo-card-toggle { display:inline-flex; align-items:center; gap:4px; cursor:pointer; font-size:10px; color:var(--text-sub); margin-left:auto; transition:color 0.15s; }
.ceo-card-toggle:hover { color:var(--accent); }
.ceo-card-toggle svg { transition:transform 0.2s ease; width:10px; height:10px; }
.ceo-card-collapsed .ceo-card-toggle svg { transform:rotate(-90deg); }
.ceo-card-collapsed .ceo-card-items { max-height:0; overflow:hidden; opacity:0; transition:all 0.25s ease; }
.ceo-card-items { transition:all 0.25s ease; max-height:500px; opacity:1; }

/* Alpha 追踪提醒卡片脉冲 */
.alpha-wl-alert { position:relative; }
.alpha-wl-alert::before { content:''; position:absolute; left:-4px; top:0; bottom:0; width:3px; border-radius:2px; background:var(--accent); animation:alertPulse 1.5s ease infinite; }
@keyframes alertPulse { 0%,100%{opacity:1} 50%{opacity:0.4} }

/* Alpha 今日研判卡片 hover */
.alpha-digest-card { transition:all 0.2s ease; }
.alpha-digest-card:hover { border-color:rgba(139,92,246,0.2); box-shadow:0 4px 16px rgba(139,92,246,0.08); }

/* Alpha 共识条 hover */
.alpha-consensus-bar { transition:all 0.2s ease; cursor:pointer; }
.alpha-consensus-bar:hover { transform:scaleY(1.2); filter:brightness(1.15); }

/* 数据项 tooltip */
.ceo-data-item[data-tip] { position:relative; }
.ceo-data-item[data-tip]:hover::after { content:attr(data-tip); position:absolute; bottom:calc(100% + 6px); left:50%; transform:translateX(-50%); background:rgba(255,255,255,0.95); color:var(--text); box-shadow:0 2px 12px rgba(0,0,0,0.12); font-size:10px; padding:4px 8px; border-radius:6px; white-space:nowrap; pointer-events:none; z-index:10; border:1px solid rgba(139,92,246,0.3); animation:tipFade 0.15s ease; }
@keyframes tipFade { from{opacity:0;transform:translateX(-50%) translateY(4px)} to{opacity:1;transform:translateX(-50%) translateY(0)} }

/* 热门新闻板块标注 hover */
.hn-bull, .hn-bear { transition:all 0.15s ease; }
.hn-bull:hover { background:rgba(16,185,129,0.15); transform:scale(1.08); }
.hn-bear:hover { background:rgba(239,68,68,0.15); transform:scale(1.08); }

/* ========== Global Sci-Fi Enhancements v124 ========== */

/* 输入框 focus 增强发光 */
.analyze-input-wrap input:focus, .alpha-query-wrap input:focus, .ceo-quick-query input:focus { box-shadow:0 0 0 3px rgba(102,126,234,0.12), 0 0 24px rgba(102,126,234,0.08); }

/* 按钮 hover 发光脉冲 */
.btn-analyze:hover, .btn-primary:hover { box-shadow:0 4px 20px rgba(102,126,234,0.3), 0 0 40px rgba(102,126,234,0.08); filter:brightness(1.06); }

/* 饼图区域升级 */
.sector-pie-section { position:relative; overflow:hidden; transition:box-shadow 0.3s ease; }
.sector-pie-section::after { content:''; position:absolute; top:0; left:8%; right:8%; height:1px; background:linear-gradient(90deg, transparent, var(--glow-accent), transparent); pointer-events:none; }
.sector-pie-section:hover { box-shadow:0 8px 30px rgba(0,0,0,0.06), 0 0 16px var(--glow-accent); }

/* 追踪器卡片升级 */
.clt-card { transition:transform 0.2s ease, box-shadow 0.3s ease, border-color 0.3s ease; animation:cardSlideIn 0.3s ease-out both; }
.clt-card:hover { transform:translateY(-2px); }

/* 涨跌幅标签 glow ring */
.stock-change.up { box-shadow:inset 0 0 0 1px rgba(225,29,72,0.06); }
.stock-change.down { box-shadow:inset 0 0 0 1px rgba(16,185,129,0.06); }

/* 分析页评分条渐变 */
.sa-bar, .sa-dim-bar { border-radius:4px; transition:width 0.8s cubic-bezier(0.23,1,0.32,1); }

/* 展开更多按钮升级 */
.news-more-btn { transition:all 0.2s ease; position:relative; overflow:hidden; }
.news-more-btn:hover { border-color:var(--accent); box-shadow:0 0 16px var(--glow-accent); }

/* 信号 tab 统计数字发光 */
.cl-stat-num { font-family:'JetBrains Mono', monospace; text-shadow:0 0 8px var(--glow-accent); }

/* 板块预测卡片升级 */
.sc-card { transition:transform 0.2s ease, box-shadow 0.3s ease; }
.sc-card:hover { transform:translateY(-2px); box-shadow:0 6px 20px rgba(0,0,0,0.06), 0 0 12px var(--glow-accent); }

/* 总结 tab sub-tab 升级 */
.sum-sub-tab.active { box-shadow:0 2px 12px var(--glow-accent); }

/* Loading 状态科技感 */
.inline-loading-logo { filter:drop-shadow(0 0 12px var(--glow-accent)); }

/* Toast 升级 */
.toast.show { box-shadow:0 8px 32px rgba(0,0,0,0.15), 0 0 24px var(--glow-accent); }

/* 全局滚动条升级 — 紫色主题 */
::-webkit-scrollbar { width:5px; }
::-webkit-scrollbar-track { background:transparent; }
::-webkit-scrollbar-thumb { background:rgba(102,126,234,0.2); border-radius:3px; }
::-webkit-scrollbar-thumb:hover { background:rgba(102,126,234,0.35); }

/* ========== v21: IC Factor Dashboard ========== */
.ic-dashboard { background:var(--bg-card); border-radius:16px; padding:16px; margin-top:12px; border:1px solid var(--border); box-shadow:var(--shadow); position:relative; overflow:hidden; }
.ic-dashboard::after { content:''; position:absolute; top:0; left:8%; right:8%; height:1px; background:linear-gradient(90deg, transparent, rgba(102,126,234,0.25), transparent); pointer-events:none; }
.ic-dash-header { display:flex; align-items:center; gap:8px; margin-bottom:14px; }
.ic-dash-title { font-size:15px; font-weight:700; background:linear-gradient(135deg, var(--accent), #a78bfa); -webkit-background-clip:text; -webkit-text-fill-color:transparent; background-clip:text; letter-spacing:0.03em; }
.ic-dash-badge { font-size:10px; font-weight:700; color:#6366F1; background:rgba(167,139,250,0.12); padding:2px 8px; border-radius:6px; letter-spacing:0.05em; }
.ic-stats-grid { display:grid; grid-template-columns:repeat(4, 1fr); gap:8px; margin-bottom:14px; }
.ic-stat { text-align:center; padding:8px 4px; background:var(--bg); border-radius:10px; border:1px solid var(--border); transition:transform 0.2s, box-shadow 0.2s; }
.ic-stat:hover { transform:translateY(-2px); box-shadow:0 4px 12px var(--glow-accent); }
.ic-stat-num { font-size:18px; font-weight:700; font-family:'JetBrains Mono', monospace; color:var(--accent); text-shadow:0 0 8px var(--glow-accent); }
.ic-stat-label { font-size:10px; color:var(--text-sub); margin-top:2px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.ic-section { margin-bottom:12px; }
.ic-section-title { font-size:12px; font-weight:700; color:var(--accent); margin-bottom:8px; padding-bottom:4px; border-bottom:1px solid rgba(102,126,234,0.12); letter-spacing:0.04em; text-transform:uppercase; display:flex; align-items:center; gap:6px; }
.ic-factor-list { display:flex; flex-direction:column; gap:6px; }
.ic-factor-row { display:flex; align-items:center; gap:8px; font-size:12px; }
.ic-factor-name { width:100px; flex-shrink:0; font-weight:500; color:var(--text-secondary); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.ic-bar-wrap { flex:1; height:6px; background:var(--bg); border-radius:3px; overflow:hidden; }
.ic-bar { height:100%; border-radius:3px; transition:width 0.8s cubic-bezier(0.23,1,0.32,1); }
.ic-bar-pos { background:linear-gradient(90deg, var(--accent), #a78bfa); box-shadow:0 0 6px var(--glow-accent); }
.ic-bar-neg { background:linear-gradient(90deg, #ef4444, #f87171); box-shadow:0 0 6px rgba(239,68,68,0.2); }
.ic-factor-val { width:60px; flex-shrink:0; text-align:right; font-family:'JetBrains Mono', monospace; font-weight:600; font-size:11px; }
.ic-sig-tag { color:#D97706; font-size:10px; margin-left:2px; }
.ic-neutral-badge { font-size:9px; background:linear-gradient(135deg, #10b981, #34d399); color:#fff; padding:1px 6px; border-radius:4px; font-weight:600; letter-spacing:0.03em; }
.ic-regime-grid { display:grid; grid-template-columns:repeat(auto-fit, minmax(140px, 1fr)); gap:8px; }
.ic-regime-card { background:var(--bg); border-radius:10px; padding:10px; border:1px solid var(--border); transition:transform 0.2s, box-shadow 0.2s; }
.ic-regime-card:hover { transform:translateY(-2px); box-shadow:0 4px 12px var(--glow-accent); }
.ic-regime-head { font-size:13px; font-weight:600; margin-bottom:6px; display:flex; align-items:center; gap:4px; }
.ic-regime-n { font-size:10px; color:var(--text-sub); font-weight:400; }
.ic-regime-factor { display:flex; justify-content:space-between; font-size:11px; padding:2px 0; gap:4px; min-width:0; }
.ic-regime-fname, .ic-size-fname { flex:1; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; color:var(--text-secondary); }
.ic-size-grid { display:grid; grid-template-columns:repeat(3, 1fr); gap:8px; }
.ic-size-card { background:var(--bg); border-radius:10px; padding:10px; border:1px solid var(--border); transition:transform 0.2s; }
.ic-size-card:hover { transform:translateY(-2px); }
.ic-size-head { font-size:13px; font-weight:600; margin-bottom:6px; }
.ic-size-n { font-size:10px; color:var(--text-sub); font-weight:400; }
.ic-size-factor { display:flex; justify-content:space-between; font-size:11px; padding:2px 0; gap:4px; min-width:0; }
.ic-ml-grid { display:grid; grid-template-columns:repeat(4, 1fr); gap:6px; }
.ic-ml-item { text-align:center; font-size:11px; color:var(--text-secondary); padding:6px 4px; background:var(--bg); border-radius:8px; }
.ic-ml-item b { display:block; font-size:14px; color:var(--text); margin-top:2px; font-family:'JetBrains Mono', monospace; }
.ic-footer { text-align:center; font-size:10px; color:var(--text-sub); margin-top:10px; padding-top:8px; border-top:1px solid var(--border); }
@media (max-width:480px) { .ic-stats-grid { grid-template-columns:repeat(2, 1fr); } .ic-size-grid { grid-template-columns:1fr 1fr; } .ic-ml-grid { grid-template-columns:repeat(2, 1fr); } .ic-factor-name { width:70px; } }

/* ========== Lightweight Charts K线容器 ========== */
.lc-container { width: 100%; border-radius: 12px; overflow: hidden; background: var(--bg-card); border: 1px solid var(--border); }
.lc-legend { position: absolute; top: 8px; left: 12px; font-size: 10px; color: var(--text-secondary); display: flex; gap: 10px; z-index: 2; pointer-events: none; }
.lc-legend span { font-family: 'JetBrains Mono', monospace; font-weight: 500; }
.lc-ind-bar { display: flex; gap: 6px; padding: 6px 12px; background: rgba(0,0,0,0.02); border-top: 1px solid var(--border); }
.lc-ind-btn { font-size: 11px; padding: 3px 10px; border-radius: 4px; cursor: pointer; color: var(--text-secondary); font-family: 'JetBrains Mono', monospace; font-weight: 500; transition: all 0.2s; }
.lc-ind-btn:hover { color: var(--text); background: rgba(0,0,0,0.05); }
.lc-ind-btn.active { color: #fff; background: linear-gradient(135deg, var(--accent), #A78BFA); }

/* ========== 响应式桌面断点 ========== */

/* --- 平板 / 小桌面 (≥768px) --- */
@media (min-width: 768px) {
  .content { max-width: 720px; }
  .top-bar { padding-left: 24px; padding-right: 24px; }
  .tab-bar { padding: 8px 16px; gap: 6px; }
  .tab { font-size: 16px; height: 38px; }
  .section-header h2 { font-size: 20px; }
  .card-list { display: grid; grid-template-columns: repeat(2, 1fr); gap: 14px; }
  .card-list .stock-card { grid-column: span 1; }
  .card-list .cl-section-title,
  .card-list .cli-section-title,
  .card-list .empty-state,
  .card-list .error-state { grid-column: 1 / -1; }
  .fund-grid { grid-template-columns: repeat(5, 1fr); }
  .sector-pie-canvas { width: 160px; height: 160px; }
  .alpha-card { padding: 0; }
  .sa-radar-wrap { max-width: 400px; }
  .cli-sectors-list { grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); }
  /* CEO研报卡片保持双列 */
  .ceo-data-grid { grid-template-columns: repeat(2, 1fr); }
  /* 信号统计均分铺满 */
  .cl-stat { flex: 1; }
  .cl-stats-row { justify-content: center; }
  /* 信号卡片单列（内容丰富不适合2列） */
  #chanlun-list { grid-template-columns: 1fr; }
  /* 加载步骤横排 */
  .ceo-progress-steps { gap: 6px; }
}

/* --- 大桌面 (≥1200px) --- */
@media (min-width: 1200px) {
  .content { max-width: 1200px; padding: 16px 24px; }
  .top-bar { padding-left: 32px; padding-right: 32px; }
  .tab-bar { max-width: 1200px; margin-left: auto; margin-right: auto; padding: 8px 20px; gap: 8px; }
  .section-header h2 { font-size: 22px; }
  .card-list { grid-template-columns: repeat(3, 1fr); gap: 16px; }
  #chanlun-list { grid-template-columns: 1fr; }
  #tracker-list { grid-template-columns: repeat(auto-fill, minmax(480px, 1fr)); }
  .card-list .stock-card { grid-column: span 1; }
  .card-list .cl-section-title,
  .card-list .cli-section-title,
  .card-list .empty-state,
  .card-list .error-state { grid-column: 1 / -1; }
  .cli-learn-grid { grid-template-columns: repeat(3, 1fr); }
  .cli-sectors-list { grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); }
  .sa-radar-wrap { max-width: 460px; }
  .alpha-card { margin-bottom: 12px; }
  .ic-regime-grid { grid-template-columns: repeat(4, 1fr); }
  .ic-size-grid { grid-template-columns: repeat(4, 1fr); }
  .event-banner { display: inline-block; width: calc(50% - 6px); vertical-align: top; margin-right: 8px; }
  .event-banner:nth-child(even) { margin-right: 0; }
  /* Alpha ctx grid 桌面放大间距 */
  .alpha-ctx-grid-inner { gap: 12px; }
  /* 跨模块情报桌面最小宽度提升 */
  .ceo-cross-items { grid-template-columns: repeat(auto-fit, minmax(100px, 1fr)); }
  /* Alpha sub-tabs 桌面间距 */
  .alpha-sub-tabs { gap: 6px; }
  /* Portfolio analysis 桌面两列 */
  .alpha-pa-list { display: grid; grid-template-columns: repeat(2, 1fr); gap: 8px; }
}

/* ── 持仓日度分析 ── */
.alpha-pa-section { margin: 12px 0; }
.alpha-pa-date { font-size: 12px; color: var(--text-sub); margin-left: 8px; font-weight: 400; }
.alpha-pa-stats {
    display: grid; grid-template-columns: repeat(4, 1fr); gap: 8px;
    margin: 10px 0; text-align: center;
}
.alpha-pa-stat {
    background: var(--bg-card); border-radius: 10px; padding: 10px 6px;
    box-shadow: var(--card-shadow); display: flex; flex-direction: column; gap: 2px;
}
.alpha-pa-val { font-size: 18px; font-weight: 700; font-family: 'JetBrains Mono', monospace; }
.alpha-pa-val.up { color: var(--red); }
.alpha-pa-val.down { color: var(--green); }
.alpha-pa-label { font-size: 11px; color: var(--text-sub); }
.alpha-pa-ai {
    background: var(--bg-card); border-radius: 10px; padding: 12px 14px;
    font-size: 13px; line-height: 1.7; color: var(--text);
    border-left: 3px solid var(--accent); margin: 10px 0;
    box-shadow: var(--card-shadow);
}
.alpha-pa-trend {
    display: flex; align-items: flex-end; gap: 6px; justify-content: center;
    margin: 10px 0; padding: 8px 0;
}
.alpha-pa-bar-wrap { display: flex; flex-direction: column; align-items: center; gap: 3px; }
.alpha-pa-bar { width: 20px; border-radius: 3px 3px 0 0; min-height: 3px; transition: height 0.3s; }
.alpha-pa-bar.up { background: var(--red); }
.alpha-pa-bar.down { background: var(--green); }
.alpha-pa-bar-label { font-size: 10px; color: var(--text-sub); }
.alpha-pa-list { display: flex; flex-direction: column; gap: 6px; margin-top: 8px; }
.alpha-pa-item {
    background: var(--bg-card); border-radius: 10px; padding: 10px 12px;
    box-shadow: var(--card-shadow); transition: transform 0.15s, box-shadow 0.15s;
}
.alpha-pa-item:hover { transform: translateY(-1px); box-shadow: 0 4px 12px rgba(0,0,0,0.08); }
.alpha-pa-item-top { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.alpha-pa-name { font-weight: 600; font-size: 14px; }
.alpha-pa-grade { font-size: 11px; font-weight: 700; padding: 1px 6px; border-radius: 4px; }
.alpha-pa-price { font-family: 'JetBrains Mono', monospace; font-size: 13px; margin-left: auto; }
.alpha-pa-chg { font-family: 'JetBrains Mono', monospace; font-size: 13px; font-weight: 600; min-width: 55px; text-align: right; }
.alpha-pa-chg.up { color: var(--red); }
.alpha-pa-chg.down { color: var(--green); }
.alpha-pa-item-bot { display: flex; gap: 6px; flex-wrap: wrap; margin-top: 4px; }
.alpha-pa-action { font-size: 11px; padding: 2px 8px; border-radius: 4px; background: rgba(0,0,0,0.04); }
.alpha-pa-action.pa-buy { background: rgba(239,68,68,0.08); color: var(--red); }
.alpha-pa-action.pa-sell { background: rgba(16,185,129,0.08); color: var(--green); }
.alpha-pa-pred { font-size: 11px; color: var(--text-sub); }
.alpha-pa-sig { font-size: 11px; padding: 2px 6px; border-radius: 4px; background: rgba(99,102,241,0.08); color: var(--accent); }

/* ========== Portfolio Management — 持仓管理 ========== */
.pf-login { max-width: 360px; margin: 40px auto; text-align: center; }
.pf-login-title { font-size: 20px; font-weight: 700; margin-bottom: 20px; background: linear-gradient(135deg, var(--accent), #a78bfa); -webkit-background-clip: text; -webkit-text-fill-color: transparent; }
.pf-login-form { display: flex; flex-direction: column; gap: 12px; }
.pf-login-form input { padding: 10px 14px; border: 1.5px solid var(--border); border-radius: 10px; font-size: 15px; background: var(--card-bg); color: var(--text); outline: none; transition: border-color .2s; }
.pf-login-form input:focus { border-color: var(--accent); }
.pf-login-form input::placeholder { color: var(--text-sub); }
.pf-login-btn { padding: 11px; border: none; border-radius: 10px; background: linear-gradient(135deg, var(--accent), #7c3aed); color: #fff; font-size: 15px; font-weight: 600; cursor: pointer; transition: opacity .2s; }
.pf-login-btn:active { opacity: .8; }
.pf-login-hint { font-size: 12px; color: var(--text-sub); margin-top: 4px; }
.pf-login-error { color: var(--red); font-size: 13px; margin-top: 8px; }

.pf-header { display: flex; align-items: center; justify-content: space-between; padding: 12px 0; }
.pf-header-left { font-size: 16px; font-weight: 700; }
.pf-header-btns { display: flex; gap: 8px; }
.pf-header-btns button { padding: 6px 14px; border: 1.5px solid var(--border); border-radius: 8px; background: var(--card-bg); font-size: 13px; cursor: pointer; color: var(--text); transition: all .2s; }
.pf-header-btns button:hover { border-color: var(--accent); color: var(--accent); }
.pf-add-btn { background: linear-gradient(135deg, var(--accent), #7c3aed) !important; color: #fff !important; border: none !important; }

.pf-dashboard { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin-bottom: 14px; }
.pf-dash-3 { grid-template-columns: repeat(3, 1fr); }
.pf-dash-card { padding: 14px; border-radius: 12px; background: var(--card-bg); border: 1px solid var(--border); text-align: center; }
.pf-dash-label { font-size: 11px; color: var(--text-sub); margin-bottom: 4px; }
.pf-dash-value { font-size: 20px; font-weight: 700; font-family: 'JetBrains Mono', monospace; }
.pf-dash-value.up { color: var(--red); }
.pf-dash-value.down { color: var(--green); }
.pf-dash-sub { font-size: 12px; margin-top: 2px; font-family: 'JetBrains Mono', monospace; }
.pf-dash-sub.up { color: var(--red); }
.pf-dash-sub.down { color: var(--green); }

/* 持仓表格 — 同花顺风格 */
.pf-section-title { display: flex; align-items: center; justify-content: space-between; padding: 10px 0 6px; font-size: 15px; font-weight: 700; border-bottom: 1.5px solid var(--border); }
.pf-table-head { display: grid; grid-template-columns: 2fr 1.2fr 1.3fr 1fr 1.3fr; gap: 4px; padding: 8px 10px; font-size: 11px; color: var(--text-sub); border-bottom: 1px solid var(--border); }
.pf-th { text-align: right; }
.pf-th.pf-th-name { text-align: left; }

.pf-positions { max-height: 500px; overflow-y: auto; scrollbar-width: thin; -webkit-overflow-scrolling: touch; }
.pf-row { display: grid; grid-template-columns: 2fr 1.2fr 1.3fr 1fr 1.3fr; gap: 4px; padding: 12px 10px; border-bottom: 1px solid var(--border); cursor: pointer; transition: background .15s; }
.pf-row:hover { background: rgba(99,102,241,0.04); }
.pf-cell { display: flex; flex-direction: column; justify-content: center; text-align: right; font-family: 'JetBrains Mono', monospace; font-size: 13px; font-weight: 600; }
.pf-cell.pf-cell-name { text-align: left; font-family: inherit; }
.pf-cell.up { color: var(--red); }
.pf-cell.down { color: var(--green); }
.pf-cell-sub { font-size: 11px; font-weight: 400; }
.pf-stock-name { font-size: 14px; font-weight: 700; color: var(--accent); display: block; }
.pf-stock-code { font-size: 11px; color: var(--text-sub); font-family: 'JetBrains Mono', monospace; }
.pf-inline-grade { font-weight: 800; font-size: 11px; }
.pf-cost-val { font-size: 12px; color: var(--text-sub); font-weight: 400; }
.pf-cur-val { font-size: 13px; font-weight: 700; }
.pf-cell-actions { grid-column: 1 / -1; display: flex; gap: 8px; justify-content: flex-end; padding-top: 6px; border-top: 1px dashed var(--border); margin-top: 4px; }
.pf-cell-actions button { padding: 4px 12px; border: 1px solid var(--border); border-radius: 6px; background: var(--card-bg); font-size: 12px; cursor: pointer; color: var(--text-sub); transition: all .15s; }
.pf-cell-actions button:hover { border-color: var(--accent); color: var(--accent); }
.pf-cell-actions .pf-close-btn:hover { border-color: var(--green); color: var(--green); }
.pf-cell-actions .pf-del-btn:hover { border-color: var(--red); color: var(--red); }

.pf-history-toggle { padding: 10px; font-size: 13px; color: var(--text-sub); cursor: pointer; border-bottom: 1px solid var(--border); }
.pf-history-list { max-height: 300px; overflow-y: auto; scrollbar-width: thin; }
.pf-history-item { display: flex; align-items: center; gap: 8px; padding: 8px 10px; border-bottom: 1px solid var(--border); font-size: 13px; flex-wrap: wrap; }
.pf-history-pnl { font-weight: 600; font-family: 'JetBrains Mono', monospace; margin-left: auto; }

.pf-form-overlay { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0,0,0,.45); z-index: 1000; display: flex; align-items: center; justify-content: center; }
.pf-form { background: var(--card-bg); border-radius: 16px; padding: 24px; width: 90%; max-width: 400px; }
.pf-form-title { font-size: 17px; font-weight: 700; margin-bottom: 16px; }
.pf-form-row { margin-bottom: 12px; }
.pf-form-row label { display: block; font-size: 13px; color: var(--text-sub); margin-bottom: 4px; }
.pf-form-row input { width: 100%; padding: 9px 12px; border: 1.5px solid var(--border); border-radius: 8px; font-size: 14px; background: var(--bg); color: var(--text); outline: none; }
.pf-form-row input:focus { border-color: var(--accent); }
.pf-form-lookup { font-size: 13px; color: var(--accent); margin-top: 4px; }
.pf-form-btns { display: flex; gap: 10px; margin-top: 16px; }
.pf-form-btns button { flex: 1; padding: 10px; border-radius: 10px; border: none; font-size: 14px; font-weight: 600; cursor: pointer; }
.pf-form-submit { background: linear-gradient(135deg, var(--accent), #7c3aed); color: #fff; }
.pf-form-cancel { background: var(--bg); color: var(--text); border: 1.5px solid var(--border) !important; }

.pf-close-overlay { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0,0,0,.45); z-index: 1000; display: flex; align-items: center; justify-content: center; }
.pf-close-form { background: var(--card-bg); border-radius: 16px; padding: 24px; width: 90%; max-width: 360px; text-align: center; }
.pf-close-form h3 { font-size: 16px; margin-bottom: 12px; }
.pf-close-form input { width: 100%; padding: 9px 12px; border: 1.5px solid var(--border); border-radius: 8px; font-size: 14px; background: var(--bg); color: var(--text); outline: none; margin-bottom: 12px; }
.pf-close-btns { display: flex; gap: 10px; }
.pf-close-btns button { flex: 1; padding: 10px; border-radius: 10px; border: none; font-size: 14px; cursor: pointer; }

.pf-empty { text-align: center; padding: 40px 20px; color: var(--text-sub); }
.pf-empty-icon { font-size: 48px; margin-bottom: 12px; }
.pf-empty-text { font-size: 14px; margin-bottom: 16px; }

.pf-held-badge { display: inline-block; font-size: 10px; padding: 1px 6px; border-radius: 4px; background: rgba(99,102,241,0.12); color: var(--accent); font-weight: 600; margin-left: 4px; vertical-align: middle; }

@media (max-width: 480px) {
    .pf-dash-3 { grid-template-columns: repeat(3, 1fr); }
    .pf-dash-card { padding: 10px 6px; }
    .pf-dash-value { font-size: 16px; }
    .pf-table-head { font-size: 10px; padding: 6px 6px; }
    .pf-row { padding: 10px 6px; font-size: 12px; }
    .pf-stock-name { font-size: 13px; }
}
@media (min-width: 640px) {
    .pf-login { max-width: 400px; }
    .pf-form { max-width: 460px; }
}
