
/* === Mobile responsive v20260628 === */
@media (max-width: 768px) {
  .ding-nav-group { display:flex; overflow-x:auto; -webkit-overflow-scrolling:touch; white-space:nowrap; gap:4px; }
  .ding-nav-item { font-size:14px !important; padding:6px 12px !important; flex-shrink:0; }
  .ding-main { display:flex; flex-direction:column; }
  .ding-chart-card { order:-1; }
  .score-hero { order:0; }
  .dim-card { order:1; }
}/* ============ 庖丁解牛选股模式 v2.0 - 样式 ============ */
* { margin:0; padding:0; box-sizing:border-box; }
:root {
  --bg-deep: #f5f6f8;
  --bg-base: #eef0f4;
  --bg-surface: #ffffff;
  --bg-elevated: #f8f9fb;
  --bg-overlay: #eaecf0;
  --border-subtle: #e5e7eb;
  --border-default: #d1d5db;
  --border-strong: #9ca3af;
  --text-primary: #1f2937;
  --text-secondary: #6b7280;
  --text-muted: #9ca3af;
  --accent-purple: #7c3aed;
  --accent-purple-dim: #6d28d9;
  --accent-purple-glow: rgba(124,58,237,0.08);
  --accent-blue: #2563eb;
  --accent-green: #16a34a;
  --accent-red: #dc2626;
  --accent-orange: #ea580c;
  --accent-cyan: #0d9488;
  --accent-yellow: #d97706;
  --glow-purple: rgba(124,58,237,0.1);
  --glow-green: rgba(22,163,74,0.1);
  --glow-red: rgba(220,38,38,0.1);
  --radius-sm: 6px;
  --radius-md: 10px;
  --radius-lg: 14px;
  --shadow-md: 0 4px 16px rgba(0,0,0,0.08);
  --shadow-lg: 0 8px 30px rgba(0,0,0,0.1);
  --transition-fast: .15s ease;
  --transition-normal: .25s ease;
}
body { font-family:'Microsoft YaHei','PingFang SC',-apple-system,sans-serif; background:var(--bg-deep); color:var(--text-primary); overflow-x:hidden; -webkit-tap-highlight-color:transparent; }
body.drag-active, body.drag-active * { -webkit-user-select:none !important; user-select:none !important; }
button, a, select, .ding-wl-group-tab { touch-action:manipulation; }

/* === 顶栏 === */
.ding-topbar { background:linear-gradient(180deg, #faf5ff 0%, #f5f0ff 100%); border-bottom:2px solid rgba(124,58,237,0.15); padding:0 20px; display:flex; flex-direction:column; position:relative; box-shadow:0 1px 6px rgba(124,58,237,0.06); }
.ding-topbar::after { content:''; position:absolute; bottom:-2px; left:0; right:0; height:2px; background:linear-gradient(90deg, transparent, var(--accent-purple), var(--accent-cyan), transparent); opacity:0.5; }
.ding-topbar-row1 { display:flex; align-items:center; gap:8px; padding:6px 0 2px; }
.ding-topbar-row2 { display:flex; align-items:center; gap:6px; padding:2px 0 6px; }
.ding-brand { display:flex; align-items:center; gap:6px; flex-shrink:0; }
.ding-logo { font-size:20px; filter:drop-shadow(0 0 4px rgba(124,58,237,0.3)); }
.ding-topbar h1 { font-size: 17px; background:linear-gradient(135deg, var(--accent-purple), var(--accent-cyan)); -webkit-background-clip:text; -webkit-text-fill-color:transparent; background-clip:text; white-space:nowrap; letter-spacing:0.5px; font-weight:700; line-height:1.2; }
.ding-version-tag { background:linear-gradient(135deg, var(--accent-orange), #fbbf24); -webkit-background-clip:text; -webkit-text-fill-color:transparent; background-clip:text; font-size: 10px; font-weight:800; letter-spacing:0.5px; border:1px solid rgba(234,88,12,0.3); border-radius:3px; padding:0 4px; margin-left:2px; }
.ding-nav-group { display:flex; align-items:center; gap:0; }
.ding-nav-item { background:transparent; border:none; border-radius:8px; padding:6px 16px; min-height:32px; display:inline-flex; align-items:center; color:var(--text-secondary); font-size: 13px; cursor:pointer; transition:all var(--transition-fast); white-space:nowrap; text-decoration:none; font-weight:400; }
.ding-nav-item:hover { color:var(--accent-purple); background:rgba(124,58,237,0.06); }
.ding-nav-item.active { background:linear-gradient(135deg, var(--accent-purple-dim), var(--accent-purple)); color:#fff; font-weight:600; box-shadow:0 2px 8px rgba(124,58,237,0.3); }

/* 搜索 */
.ding-search-box { display:flex; align-items:center; gap:8px; flex:1; max-width:360px; position:relative; }
.ding-search-input { flex:1; background:var(--bg-deep); border:1px solid var(--border-default); border-radius:var(--radius-sm); padding:7px 12px; color:var(--text-primary); font-size: 16px; outline:none; transition:border var(--transition-fast), box-shadow var(--transition-fast); }
.ding-search-input:focus { border-color:var(--accent-purple); box-shadow:0 0 0 3px var(--glow-purple); }
.ding-search-btn { background:linear-gradient(135deg, var(--accent-purple-dim), #8b5cf6); border:none; border-radius:var(--radius-sm); padding:7px 16px; color:#fff; font-size: 15px; cursor:pointer; white-space:nowrap; transition:all var(--transition-fast); font-weight:500; }
.ding-search-btn:hover { box-shadow:0 0 12px var(--glow-purple); transform:translateY(-1px); }
.ding-search-btn:active { transform:translateY(0); }
.ding-search-btn:disabled { background:var(--bg-overlay); cursor:not-allowed; box-shadow:none; transform:none; }
.ding-dropdown { position:absolute; top:42px; left:0; width:100%; background:var(--bg-surface); border:1px solid var(--border-default); border-radius:var(--radius-sm); max-height:260px; overflow-y:auto; z-index:999; display:none; box-shadow:var(--shadow-lg); }
.ding-dropdown.show { display:block; }
.ding-dropdown .search-item { padding:8px 14px; cursor:pointer; font-size: 15px; display:flex; justify-content:space-between; transition:background var(--transition-fast); }
.ding-dropdown .search-item:hover { background:var(--bg-elevated); }
.ding-dropdown .code { color:var(--accent-blue); }
.ding-dropdown .name { color:var(--text-primary); }

.ding-back-btn { background:var(--bg-elevated); border:1px solid var(--accent-orange); border-radius:var(--radius-sm); padding:5px 12px; color:var(--accent-orange); font-size: 14px; cursor:pointer; white-space:nowrap; transition:all var(--transition-fast); }
.ding-back-btn:hover { background:var(--bg-overlay); box-shadow:0 0 8px rgba(240,136,62,0.2); }

/* === 主体 === */
.ding-main { display:flex; min-height:calc(100dvh - 42px); }
.ding-left { width:440px; background:var(--bg-surface); border-right:1px solid var(--border-subtle); overflow-y:auto; flex-shrink:0; padding:16px; }
.ding-left::-webkit-scrollbar { width:4px; }
.ding-left::-webkit-scrollbar-thumb { background:var(--border-default); border-radius:2px; }
.ding-right { flex:1; display:flex; flex-direction:column; overflow:hidden; background:var(--bg-deep); }
.ding-chart { flex:1; min-height:300px; position:relative; }
.ding-chart-empty { position:absolute; inset:0; display:flex; align-items:center; justify-content:center; color:var(--text-muted); font-size: 18px; }

/* 空状态时全宽居中 */
.ding-main:has(.ding-empty:not([style*="display: none"])) { position:relative; }
.ding-main:has(.ding-empty:not([style*="display: none"])) .ding-left { width:100%; border-right:none; background:var(--bg-deep); }
.ding-main:has(.ding-empty:not([style*="display: none"])) .ding-right { display:none; }

/* === 评分英雄卡 === */
.score-hero { background:linear-gradient(135deg, #f5f3ff 0%, #ede9fe 40%, #ffffff 100%); border:1px solid rgba(124,58,237,0.2); border-radius:var(--radius-lg); padding:24px; text-align:center; margin-bottom:16px; position:relative; overflow:hidden; }
.score-hero::before { content:''; position:absolute; top:-50%; left:-50%; width:200%; height:200%; background:radial-gradient(ellipse at center, rgba(124,58,237,0.04) 0%, transparent 60%); pointer-events:none; }
.score-circle { width:120px; height:120px; border-radius:50%; background:conic-gradient(var(--accent-purple) var(--score-pct, 0%), var(--bg-overlay) 0%); display:flex; flex-direction:column; align-items:center; justify-content:center; margin:0 auto 12px; position:relative; box-shadow:0 0 20px var(--glow-purple); }
.score-circle::before { content:''; position:absolute; width:96px; height:96px; border-radius:50%; background:#ffffff; }
.score-num { position:relative; z-index:1; font-size: 34px; font-weight:700; color:var(--accent-purple); }
.score-label { position:relative; z-index:1; font-size: 13px; color:var(--text-secondary); }
.score-meta { display:flex; align-items:center; justify-content:center; gap:10px; font-size: 15px; margin-bottom:8px; position:relative; z-index:1; }
.stock-title { color:var(--text-primary); font-weight:600; }
.stock-price { font-size: 20px; font-weight:700; color:var(--accent-red); }
.stock-change { font-size: 15px; }
.diagnosis { font-size: 14px; color:var(--text-secondary); line-height:1.6; text-align:left; padding:10px 14px; background:var(--bg-deep); border-radius:var(--radius-sm); margin-top:8px; border:1px solid var(--border-subtle); position:relative; z-index:1; }

/* === 维度评分（九维） === */
.dim-card, .period-card, .resonance-card, .risk-card, .sr-card, .flow-card { background:var(--bg-deep); border:1px solid var(--border-subtle); border-radius:var(--radius-md); padding:14px; margin-bottom:12px; transition:border var(--transition-fast); }
.dim-card:hover, .period-card:hover, .resonance-card:hover, .risk-card:hover, .sr-card:hover, .flow-card:hover { border-color:var(--border-default); }
.dim-card h3, .period-card h3, .resonance-card h3, .risk-card h3, .sr-card h3, .flow-card h3 { font-size: 15px; color:var(--accent-purple); margin-bottom:10px; display:flex; align-items:center; gap:6px; }
.dim-card h3::before, .period-card h3::before, .resonance-card h3::before, .risk-card h3::before, .sr-card h3::before, .flow-card h3::before { content:''; display:inline-block; width:3px; height:12px; background:linear-gradient(180deg, var(--accent-purple-dim), var(--accent-purple)); border-radius:2px; }
.dim-bars { display:flex; flex-direction:column; gap:6px; }
.dim-row { display:flex; align-items:center; gap:8px; }
.dim-name { font-size: 13px; color:var(--text-secondary); min-width:64px; text-align:right; }
.dim-bar-wrap { flex:1; height:8px; background:var(--bg-elevated); border-radius:4px; overflow:hidden; }
.dim-bar-fill { height:100%; border-radius:4px; transition:width .5s ease; }
.dim-bar-fill.purple { background:linear-gradient(90deg, #c4b5fd, var(--accent-purple)); }
.dim-bar-fill.green { background:linear-gradient(90deg, #86efac, var(--accent-green)); }
.dim-bar-fill.orange { background:linear-gradient(90deg, #fed7aa, var(--accent-orange)); }
.dim-bar-fill.blue { background:linear-gradient(90deg, #93c5fd, var(--accent-blue)); }
.dim-bar-fill.cyan { background:linear-gradient(90deg, #99f6e4, var(--accent-cyan)); }
.dim-bar-fill.yellow { background:linear-gradient(90deg, #fde68a, var(--accent-yellow)); }
.dim-bar-fill.pink { background:linear-gradient(90deg, #fbcfe8, #ec4899); }
.dim-bar-fill.teal { background:linear-gradient(90deg, #99f6e4, #14b8a6); }
.dim-bar-fill.red { background:linear-gradient(90deg, #fecaca, var(--accent-red)); }
.dim-bar-fill.indigo { background:linear-gradient(90deg, #c7d2fe, #6366f1); }
.dim-val { font-size: 13px; color:var(--text-primary); min-width:28px; text-align:right; font-weight:600; }
.dim-val.high { color:var(--accent-green); }
.dim-val.mid { color:var(--accent-orange); }
.dim-val.low { color:var(--text-secondary); }

/* === 支撑压力位卡片 === */
.sr-content { font-size: 14px; }
.sr-safety { display:flex; align-items:center; gap:8px; margin-bottom:10px; }
.sr-safety-label { color:var(--text-secondary); min-width:56px; font-size: 13px; }
.sr-safety-bar { flex:1; height:6px; background:var(--bg-elevated); border-radius:3px; overflow:hidden; position:relative; }
.sr-safety-fill { height:100%; border-radius:3px; transition:width .5s ease; }
.sr-safety-pct { font-size: 13px; min-width:72px; text-align:right; font-weight:600; }
.sr-tags { display:flex; gap:8px; margin-bottom:6px; }
.sr-tag { padding:3px 10px; border-radius:4px; font-size: 13px; font-weight:600; }
.sr-tag.support { background:rgba(22,163,74,0.08); color:var(--accent-green); border:1px solid rgba(22,163,74,0.2); }
.sr-tag.resistance { background:rgba(220,38,38,0.08); color:var(--accent-red); border:1px solid rgba(220,38,38,0.2); }
.sr-levels { margin-top:6px; }
.sr-level-group { display:flex; align-items:center; gap:6px; margin-bottom:3px; flex-wrap:wrap; }
.sr-level-label { font-size: 12px; min-width:28px; }
.sr-price { font-size: 12px; padding:1px 5px; border-radius:3px; }
.sr-price.support { background:rgba(22,163,74,0.06); color:var(--accent-green); }
.sr-price.resistance { background:rgba(220,38,38,0.06); color:var(--accent-red); }

/* === 资金动向卡片 === */
.flow-chart { width:100%; height:80px; background:var(--bg-deep); }
.flow-stats { display:flex; gap:12px; margin-top:8px; flex-wrap:wrap; }
.flow-stat { font-size: 13px; color:var(--text-secondary); }
.flow-stat-val { font-weight:600; }
.flow-stat-val.positive { color:var(--accent-green); }
.flow-stat-val.negative { color:var(--accent-red); }

/* === 多周期分析卡片 === */
.period-detail { background:var(--bg-surface); border:1px solid var(--border-subtle); border-radius:8px; padding:10px; margin-bottom:8px; transition:border var(--transition-fast); }
.period-detail:hover { border-color:var(--border-default); }
.period-detail:last-child { margin-bottom:0; }
.period-header { display:flex; justify-content:space-between; align-items:center; margin-bottom:6px; }
.period-name { font-size: 15px; font-weight:600; color:var(--accent-purple); }
.period-stroke-dir { font-size: 13px; padding:2px 8px; border-radius:4px; }
.period-stroke-dir.up { background:rgba(22,163,74,0.08); color:var(--accent-green); }
.period-stroke-dir.down { background:rgba(220,38,38,0.08); color:var(--accent-red); }
.period-stats { display:flex; gap:12px; font-size: 13px; color:var(--text-secondary); margin-bottom:6px; }
.period-signals { display:flex; flex-wrap:wrap; gap:4px; }
.period-signal-tag { font-size: 12px; padding:2px 6px; border-radius:3px; }
.period-signal-tag.buy { background:rgba(22,163,74,0.08); color:var(--accent-green); border:1px solid rgba(22,163,74,0.2); }
.period-signal-tag.sell { background:rgba(220,38,38,0.08); color:var(--accent-red); border:1px solid rgba(220,38,38,0.2); }
.period-momentum { display:flex; flex-wrap:wrap; gap:6px; margin-top:6px; }
.period-indicator { font-size: 12px; padding:1px 5px; background:var(--bg-elevated); border-radius:3px; }
.period-cz-pos { font-size: 13px; margin-top:4px; color:var(--text-secondary); }
.period-cz-pos .above { color:var(--accent-green); }
.period-cz-pos .below { color:var(--accent-red); }
.period-cz-pos .inside { color:var(--accent-orange); }

/* === 共振信号 === */
.resonance-item { padding:8px 10px; background:rgba(124,58,237,0.04); border:1px solid rgba(124,58,237,0.15); border-radius:var(--radius-sm); margin-bottom:6px; font-size: 14px; transition:all var(--transition-fast); }
.resonance-item.strong { border-color:rgba(124,58,237,0.3); background:rgba(124,58,237,0.08); box-shadow:0 0 8px var(--glow-purple); }
.resonance-item:last-child { margin-bottom:0; }
.resonance-item .type { color:var(--accent-purple); font-weight:600; }
.resonance-item .desc { color:var(--text-primary); margin-top:2px; }
.no-resonance { color:var(--text-muted); font-size: 14px; padding:8px 0; }

/* === 风险预警 === */
.risk-item { display:flex; align-items:flex-start; gap:8px; padding:6px 8px; margin-bottom:4px; border-radius:4px; font-size: 14px; transition:all var(--transition-fast); }
.risk-item.high { background:rgba(220,38,38,0.06); border-left:3px solid var(--accent-red); }
.risk-item.medium { background:rgba(234,88,12,0.06); border-left:3px solid var(--accent-orange); }
.risk-item.low { background:rgba(217,119,6,0.06); border-left:3px solid var(--accent-yellow); }
.risk-item .rtype { font-weight:600; min-width:56px; }
.risk-item .rdesc { color:var(--text-secondary); }
.no-risk { color:var(--accent-green); font-size: 14px; padding:8px 0; }

/* === 空状态 === */
.ding-empty { display:flex; flex-direction:column; align-items:center; justify-content:center; min-height:60vh; color:var(--text-muted); gap:16px; }
.ding-empty-icon { width:64px; height:64px; background:linear-gradient(135deg, #7c3aed, #a78bfa); border-radius:18px; display:flex; align-items:center; justify-content:center; font-size:30px; font-weight:900; color:#fff; box-shadow:0 6px 24px rgba(124,58,237,0.25); margin-bottom:4px; }
.ding-empty-title { font-size:20px; color:var(--text-primary); font-weight:600; }
.ding-empty-search { display:flex; gap:8px; width:360px; max-width:90vw; }
.ding-empty-input { flex:1; background:var(--bg-surface); border:1.5px solid var(--border-default); border-radius:8px; padding:10px 14px; color:var(--text-primary); font-size:15px; outline:none; transition:all .2s; }
.ding-empty-input:focus { border-color:var(--accent-purple); box-shadow:0 0 0 3px rgba(124,58,237,0.12); }
.ding-empty-btn { background:linear-gradient(135deg, var(--accent-purple-dim), #8b5cf6); border:none; border-radius:8px; padding:10px 20px; color:#fff; font-size:15px; font-weight:600; cursor:pointer; white-space:nowrap; transition:all .2s; }
.ding-empty-btn:hover { box-shadow:0 4px 16px rgba(124,58,237,0.3); transform:translateY(-1px); }
.ding-empty-tags { display:flex; flex-wrap:wrap; gap:6px; justify-content:center; max-width:360px; }
.ding-empty-tags span { font-size:12px; padding:3px 10px; background:rgba(124,58,237,0.06); color:var(--accent-purple); border-radius:12px; border:1px solid rgba(124,58,237,0.12); }

/* === 批量筛选面板 === */
.ding-scan-overlay { position:fixed; inset:0; background:rgba(0,0,0,0.2); z-index:7999; display:none; backdrop-filter:blur(2px); }
.ding-scan-overlay.show { display:block; }
.ding-scan-panel { position:fixed; top:0; left:-400px; width:380px; max-width:calc(100vw - 12px); height:100vh; background:var(--bg-surface); border-right:1px solid var(--border-subtle); z-index:8000; transition:left .3s ease; overflow-y:auto; padding:20px 16px; box-shadow:var(--shadow-lg); -webkit-overflow-scrolling:touch; }
.ding-scan-panel.open { left:0; }
.ding-scan-panel h2 { font-size: 17px; background:linear-gradient(135deg, var(--accent-purple), var(--accent-cyan)); -webkit-background-clip:text; -webkit-text-fill-color:transparent; background-clip:text; margin-bottom:16px; display:flex; align-items:center; justify-content:space-between; }
.ding-scan-panel .close-btn { background:none; border:none; color:var(--text-secondary); font-size: 22px; cursor:pointer; }
.ding-section { margin-bottom:16px; padding-bottom:12px; border-bottom:1px solid var(--border-subtle); }
.ding-section h4 { font-size: 14px; color:var(--accent-purple); margin-bottom:8px; display:flex; align-items:center; gap:6px; }
.ding-section h4::before { content:''; display:inline-block; width:3px; height:12px; background:linear-gradient(180deg, var(--accent-purple-dim), var(--accent-purple)); border-radius:2px; }
.ding-input { width:100%; background:var(--bg-deep); border:1px solid var(--border-default); border-radius:4px; padding:6px 10px; color:var(--text-primary); font-size: 14px; outline:none; transition:border var(--transition-fast); }
.ding-input:focus { border-color:var(--accent-purple); box-shadow:0 0 0 2px var(--glow-purple); }
.ding-hint { font-size: 13px; color:var(--text-muted); line-height:1.5; padding:8px 10px; background:var(--bg-deep); border-radius:4px; white-space:normal; overflow-wrap:break-word; }
.price-range-row { display:flex; align-items:center; gap:6px; }
.sep { color:var(--text-muted); }
.ding-run-btn { width:100%; background:linear-gradient(135deg, var(--accent-purple-dim), #8b5cf6); border:none; border-radius:var(--radius-sm); padding:10px; color:#fff; font-size: 16px; font-weight:600; cursor:pointer; margin-top:12px; transition:all var(--transition-fast); }
.ding-run-btn:hover { box-shadow:0 0 16px var(--glow-purple); transform:translateY(-1px); }
.ding-run-btn:active { transform:translateY(0); }
.ding-run-btn:disabled { background:var(--bg-overlay); cursor:not-allowed; box-shadow:none; transform:none; }

/* === 批量筛选结果 === */
.ding-results-panel { position:fixed; top:46px; right:-520px; width:500px; max-width:calc(100vw - 12px); height:calc(100dvh - 46px); background:var(--bg-surface); border-left:1px solid var(--border-subtle); z-index:7000; transition:right .3s ease; overflow-y:auto; overflow-x:hidden; box-shadow:-4px 0 20px rgba(0,0,0,0.08); -webkit-overflow-scrolling:touch; }
.ding-results-panel.open { right:0; }
.ding-results-header { padding:12px 16px; border-bottom:1px solid var(--border-subtle); display:flex; align-items:center; justify-content:space-between; }
.ding-results-header h3 { font-size: 16px; color:var(--accent-purple); }
.ding-progress { padding:8px 16px; font-size: 14px; color:var(--text-secondary); background:var(--bg-deep); border-bottom:1px solid var(--border-subtle); display:flex; align-items:center; gap:8px; }
.ding-progress .bar { flex:1; height:4px; background:var(--bg-elevated); border-radius:2px; overflow:hidden; }
.ding-progress .bar-fill { height:100%; background:linear-gradient(90deg, var(--accent-purple-dim), var(--accent-purple)); transition:width .3s; }

.ding-result-item { padding:12px 16px; border-bottom:1px solid var(--border-subtle); cursor:pointer; transition:background var(--transition-fast); }
.ding-result-item:hover { background:var(--bg-elevated); }
.ding-result-top { display:flex; justify-content:space-between; align-items:center; }
.ding-result-code { font-size: 15px; color:var(--accent-blue); font-weight:600; }
.ding-result-name { font-size: 14px; color:var(--text-secondary); margin-left:6px; }
.ding-result-score { font-size: 22px; font-weight:700; }
.ding-result-score.high { color:var(--accent-green); }
.ding-result-score.mid { color:var(--accent-orange); }
.ding-result-score.low { color:var(--text-secondary); }
.ding-result-dims { display:flex; gap:4px; margin-top:6px; }
.ding-result-dim-tag { font-size: 12px; padding:1px 6px; border-radius:3px; background:var(--bg-elevated); }
.ding-result-diagnosis { font-size: 13px; color:var(--text-secondary); margin-top:4px; line-height:1.4; }
.ding-result-price-row { display:flex; gap:12px; margin-top:4px; font-size: 14px; color:var(--text-secondary); }

/* === 概念板块搜索 === */
.ding-concept-dropdown { max-height:200px; overflow-y:auto; background:var(--bg-surface); border:1px solid var(--border-default); border-radius:var(--radius-sm); margin-top:4px; display:none; box-shadow:var(--shadow-md); }
.ding-concept-dropdown.show { display:block; }
.concept-item { padding:8px 10px; cursor:pointer; font-size: 14px; display:flex; justify-content:space-between; align-items:center; transition:background var(--transition-fast); }
.concept-item:hover { background:var(--bg-elevated); }
.concept-name { color:var(--text-primary); }
.concept-code { color:var(--text-secondary); font-size: 13px; }

/* === 通用 === */
.loading-overlay { position:fixed; inset:0; background:rgba(255,255,255,0.92); z-index:9000; display:none; justify-content:center; align-items:center; flex-direction:column; gap:16px; backdrop-filter:blur(4px); }
.loading-overlay.show { display:flex; }
.spinner { width:48px; height:48px; border:3px solid var(--border-default); border-top-color:var(--accent-purple); border-radius:50%; animation:spin .8s linear infinite; }
@keyframes spin { to { transform:rotate(360deg); } }
.loading-text { color:var(--text-secondary); font-size: 16px; white-space:nowrap; overflow:visible; }
.toast-container { position:fixed; top:60px; right:20px; z-index:10000; display:flex; flex-direction:column; gap:8px; }
.toast { padding:10px 18px; border-radius:var(--radius-md); font-size: 15px; color:#1f2937; animation:toastIn .3s ease; min-width:200px; max-width:400px; backdrop-filter:blur(12px); }
.toast.error { background:rgba(254,226,226,0.95); border:1px solid var(--accent-red); color:#991b1b; }
.toast.warn { background:rgba(254,243,199,0.95); border:1px solid var(--accent-orange); color:#92400e; }
.toast.success { background:rgba(220,252,231,0.95); border:1px solid var(--accent-green); color:#166534; }
.toast.info { background:rgba(219,234,254,0.95); border:1px solid var(--accent-blue); color:#1e40af; }
@keyframes toastIn { from { opacity:0; transform:translateX(30px); } to { opacity:1; transform:translateX(0); } }
.close-btn { background:none; border:none; color:var(--text-secondary); font-size: 20px; cursor:pointer; }

/* === 板块选择 === */
.pool-source-tabs { display:flex; gap:2px; background:var(--bg-deep); border:1px solid var(--border-subtle); border-radius:4px; padding:2px; margin-bottom:6px; }
.pool-tab { flex:1; text-align:center; padding:5px 4px; font-size: 13px; color:var(--text-secondary); border-radius:3px; cursor:pointer; transition:all var(--transition-fast); user-select:none; }
.pool-tab:hover { color:var(--text-primary); background:var(--bg-elevated); }
.pool-tab.active { background:linear-gradient(135deg, var(--accent-purple-dim), #8b5cf6); color:#fff; }
.pool-info { margin-top:4px; font-size: 13px; color:var(--accent-purple); }

/* === 响应式 === */
@media (max-width: 900px) {
  .ding-main { flex-direction:column; height:auto; min-height:calc(100dvh - 46px); }
  .ding-left { width:100%; border-right:none; border-bottom:1px solid var(--border-subtle); max-height:none; overflow:visible; }
  .ding-right { min-height:45vh; }
  .ding-topbar-row1 { flex-wrap:wrap; }
  .ding-topbar-row2 { flex-wrap:wrap; }
  .ding-nav-item { padding: 4px 8px; font-size: 13px; min-height:32px; }
  .ding-watchlist-btn { padding: 4px 8px; font-size: 13px; min-height:32px; }
  /* 侧面板适配 */
  .ding-scan-panel { max-width:calc(100vw - 12px); }
  .ding-results-panel { max-width:calc(100vw - 12px); }
}
@media (max-width: 768px) {
  .ding-right { min-height: 40vh; }
  .ding-topbar-row1 { padding: 4px 0 2px; gap: 4px; }
  .ding-topbar-row2 { flex-wrap: wrap; padding: 2px 0 6px; gap: 4px; }
  .ding-brand { flex:1 1 auto; min-width:0; }
  .ding-topbar h1 { font-size: 16px; }
  .ding-version-tag { font-size:10px; }
  .ding-logo { font-size:18px; }
  .ding-nav-group { flex:1 1 100%; }
  .ding-nav-item { padding:4px 8px; font-size:12px; min-height:32px; }
  .ding-nav-item.active { min-height:32px; }
  /* 手机端隐藏顶栏搜索，使用空状态区的搜索 */
  .ding-search-box { display:none !important; }
  .ding-add-wl-topbar { display:none !important; }
  .ding-back-btn { padding: 4px 8px; font-size: 13px; min-height: 32px; }
  .ding-topbar-right { gap: 6px; }
  /* 评分卡适配窄屏 */
  .score-hero { padding: 14px 10px; }
  .score-circle { width: 90px; height: 90px; }
  .score-circle::before { width: 72px; height: 72px; }
  .score-num { font-size: 26px !important; }
  .score-meta { flex-wrap: wrap; gap: 6px; justify-content: center; }
  .stock-price { font-size: 17px; }
  .stock-title { font-size: 14px; }
  /* 维度评分紧凑 */
  .dim-card, .period-card, .resonance-card, .risk-card, .sr-card, .flow-card { padding: 10px 10px; }
  .dim-row { gap: 4px; }
  .dim-name { min-width: 50px; font-size: 12px; }
  .dim-val { min-width: 24px; font-size: 12px; }
  /* 多周期分析紧凑 */
  .period-detail { padding: 8px; }
  .period-stats { flex-wrap: wrap; gap: 6px; }
  .period-signals { flex-wrap: wrap; }
  /* 共振/风险紧凑 */
  .resonance-item { padding: 6px 8px; font-size: 13px; }
  .risk-item { padding: 4px 6px; font-size: 13px; }
  /* 自选面板全屏 */
  .ding-wl-panel { width: 100%; max-width: 100vw; }
  .ding-wl-back-btn { display:inline-block; }
  /* iOS 防缩放：输入框≥16px */
  .ding-wl-filter-input { font-size: 16px; }
  .ding-input { font-size: 16px; }
  .ding-empty-input { font-size: 16px; }
  .ding-auth-field input { font-size: 16px; }
  .ding-modal-input { font-size: 16px; }
  .change-pwd-body .auth-field input { font-size: 16px; }
  /* 小字体兜底12px */
  .ding-wl-signal-tag, .ding-wl-score-text { font-size: 12px; min-height: 18px; line-height: 1.5; }
  .ding-wl-ref-price { font-size: 12px; }
  .ding-wl-detail-row { font-size: 12px; }
  /* Toast 适配 */
  .toast { min-width: 160px; max-width: calc(100vw - 40px); font-size: 14px; }
  .toast-container { right: 10px; top: 40px; }
}
@media (max-width: 480px) {
  .ding-topbar-row1 { padding: 4px 0 2px; gap: 4px; }
  .ding-topbar-row2 { padding: 2px 0 4px; gap: 3px; }
  .ding-topbar h1 { font-size: 15px; }
  .ding-version-tag { font-size:9px; }
  .ding-nav-group { flex:1 1 100%; }
  .ding-nav-item { padding:3px 6px; font-size:11px; min-height:30px; }
  /* 手机端隐藏顶栏搜索 */
  .ding-search-box { display:none !important; }
  .ding-add-wl-topbar { display:none !important; }
  /* 侧面板全屏 */
  .ding-scan-panel { width: 100%; left: -100%; }
  .ding-results-panel { width: 100%; right: -100%; }
  /* 弹窗缩窄 */
  .ding-auth-modal, .change-pwd-modal, .reg-success-modal { width: calc(100vw - 24px); max-width: 340px; }
  /* 评分英雄卡超紧凑 */
  .score-hero { padding: 10px 8px; }
  .score-circle { width: 80px; height: 80px; margin-bottom: 8px; }
  .score-circle::before { width: 64px; height: 64px; }
  .score-num { font-size: 24px !important; }
  .score-label { font-size: 12px; }
  .diagnosis { padding: 6px 8px; font-size: 13px; line-height: 1.5; }
  /* 维度评分超紧凑 */
  .dim-card, .period-card, .resonance-card, .risk-card, .sr-card, .flow-card { padding: 8px 8px; margin-bottom: 8px; }
  .dim-card h3, .period-card h3, .resonance-card h3, .risk-card h3, .sr-card h3, .flow-card h3 { font-size: 14px; margin-bottom: 6px; }
  .dim-bar-wrap { height: 6px; }
  /* 支撑压力紧凑 */
  .sr-tags { flex-wrap: wrap; gap: 4px; }
  .sr-tag { padding: 2px 6px; font-size: 12px; }
  /* 资金动向紧凑 */
  .flow-chart { height: 60px; }
  .flow-stats { gap: 6px; }
  .flow-stat { font-size: 12px; }
  /* 多周期紧凑 */
  .period-detail { padding: 6px; }
  .period-header { flex-wrap: wrap; gap: 4px; }
  .period-momentum { gap: 4px; }
  /* 用户区紧凑 */
  .ding-user-btn { padding: 3px 6px; font-size: 12px; }
  .ding-logout-link { font-size: 12px; }
  /* 守卫页紧凑 */
  .ding-guard-box { padding: 24px 16px; }
  .ding-guard-icon { font-size: 38px; }
  .ding-guard-box h2 { font-size: 19px; }
  .ding-guard-box p { font-size: 15px; }
  /* 空状态紧凑 */
  .ding-empty .icon { font-size: 42px; }
  .ding-empty .text { font-size: 16px; }
  .ding-empty .hint { font-size: 13px; max-width: 260px; }
  /* 板块选择标签紧凑 */
  .pool-tab { padding: 4px 2px; font-size: 12px; }
  .pool-info { font-size: 12px; }
  /* 结果面板项紧凑 */
  .ding-result-item { padding: 8px 10px; }
  .ding-result-score { font-size: 18px; }
  .ding-result-dims { gap: 2px; }
  .ding-result-dim-tag { font-size: 11px; padding: 1px 4px; }
  .ding-result-diagnosis { font-size: 12px; }
  .ding-result-price-row { font-size: 13px; }
  /* 批量筛选输入紧凑 */
  .ding-input { font-size: 13px; padding: 5px 8px; }
  .ding-hint { font-size: 12px; padding: 6px 8px; }
  .ding-run-btn { padding: 8px; font-size: 15px; }
  /* 分页器紧凑 */
  .ding-page-btn { padding: 4px 10px; font-size: 13px; }
}

/* === 登录守卫 === */
.ding-login-guard { display:flex; align-items:center; justify-content:center; min-height:60vh; }
.ding-guard-box { text-align:center; padding:40px; }
.ding-guard-icon { font-size: 50px; margin-bottom:16px; opacity:0.3; }
.ding-guard-box h2 { color:var(--text-primary); font-size: 22px; margin-bottom:8px; }
.ding-guard-box p { color:var(--text-secondary); font-size: 16px; margin-bottom:20px; }
.ding-guard-actions { display:flex; gap:12px; align-items:center; justify-content:center; }

/* === 登录弹窗 === */
.ding-auth-overlay { position:fixed; inset:0; background:rgba(0,0,0,0.5); display:none; align-items:center; justify-content:center; z-index:9999; backdrop-filter:blur(8px); animation:dingAuthFadeIn .3s ease; }
.ding-auth-overlay.show { display:flex; }
@keyframes dingAuthFadeIn { from { opacity:0; } to { opacity:1; } }
@keyframes dingAuthSlideUp { from { opacity:0; transform:translateY(20px) scale(0.97); } to { opacity:1; transform:translateY(0) scale(1); } }

.ding-auth-modal { background:var(--bg-surface); border:1px solid var(--border-default); border-radius:16px; width:340px; max-width:calc(100vw - 24px); overflow:hidden; box-shadow:0 20px 60px rgba(0,0,0,0.4); animation:dingAuthSlideUp .35s ease; }

/* 品牌区 */
.ding-auth-brand { text-align:center; padding:28px 24px 18px; background:linear-gradient(135deg, rgba(139,92,246,0.08), rgba(139,92,246,0.02)); border-bottom:1px solid var(--border-subtle); }
.ding-auth-logo { width:52px; height:52px; margin:0 auto 10px; background:linear-gradient(135deg, #7c3aed, #a78bfa); border-radius:14px; display:flex; align-items:center; justify-content:center; font-size:26px; font-weight:900; color:#fff; box-shadow:0 4px 16px rgba(124,58,237,0.3); letter-spacing:-1px; }
.ding-auth-brand h2 { margin:0 0 4px; font-size:20px; color:var(--text-primary); font-weight:700; letter-spacing:1px; }
.ding-auth-brand p { margin:0; font-size:13px; color:var(--text-muted); }

/* 标签切换 */
.ding-auth-tabs { display:flex; margin:0; border-bottom:1px solid var(--border-subtle); }
.ding-auth-tab { flex:1; text-align:center; padding:12px 0; font-size:15px; font-weight:600; color:var(--text-muted); cursor:pointer; border-bottom:2px solid transparent; transition:all .2s; }
.ding-auth-tab:hover { color:var(--text-secondary); background:rgba(139,92,246,0.03); }
.ding-auth-tab.active { color:var(--accent-purple); border-bottom-color:var(--accent-purple); }

/* 表单区 */
.ding-auth-form { padding:20px 24px 24px; }
.ding-auth-field { margin-bottom:16px; }
.ding-auth-field label { display:block; font-size:13px; color:var(--text-secondary); margin-bottom:6px; font-weight:500; }
.ding-auth-field input { width:100%; box-sizing:border-box; padding:10px 14px; background:var(--bg-deep); border:1.5px solid var(--border-default); border-radius:8px; color:var(--text-primary); font-size:15px; outline:none; transition:all .2s; }
.ding-auth-field input:focus { border-color:var(--accent-purple); box-shadow:0 0 0 3px rgba(139,92,246,0.15); background:var(--bg-surface); }
.ding-auth-field input::placeholder { color:var(--text-muted); font-size:14px; }

/* 密码显示/隐藏 */
.ding-auth-pwd-wrap { position:relative; }
.ding-auth-pwd-wrap input { padding-right:40px; }
.ding-auth-eye { position:absolute; right:10px; top:50%; transform:translateY(-50%); width:28px; height:28px; cursor:pointer; opacity:0.4; transition:opacity .2s; display:flex; align-items:center; justify-content:center; font-size:16px; }
.ding-auth-eye:hover { opacity:0.8; }
.ding-auth-eye::after { content:'●●●'; font-size:10px; letter-spacing:1px; }
.ding-auth-pwd-wrap.show-pwd .ding-auth-eye::after { content:'Aa'; font-size:12px; font-weight:600; }

/* 提交按钮 */
.ding-auth-submit { width:100%; padding:11px; background:linear-gradient(135deg, #7c3aed, #a78bfa); border:none; border-radius:8px; color:#fff; font-size:16px; font-weight:600; cursor:pointer; transition:all .2s; margin-top:4px; letter-spacing:1px; }
.ding-auth-submit:hover { box-shadow:0 4px 16px rgba(124,58,237,0.35); transform:translateY(-1px); }
.ding-auth-submit:active { transform:translateY(0); box-shadow:none; }
.ding-auth-submit:disabled { background:var(--bg-overlay); color:var(--text-muted); cursor:not-allowed; box-shadow:none; transform:none; }


/* === 顶栏用户区域 === */
.ding-topbar-right { display:flex; align-items:center; gap:10px; margin-left:auto; }
.ding-user-btn { background:var(--bg-elevated); border:1px solid var(--border-default); border-radius:var(--radius-sm); padding:5px 12px; color:var(--accent-purple); font-size: 15px; font-weight:600; cursor:pointer; transition:all var(--transition-fast); }
.ding-user-btn:hover { border-color:var(--accent-purple); box-shadow:0 0 8px var(--glow-purple); }
.ding-logout-link { color:var(--text-muted); font-size: 14px; cursor:pointer; transition:color var(--transition-fast); }
.ding-logout-link:hover { color:var(--accent-red); }

/* === 修改密码模态框 === */
.change-pwd-overlay { position:fixed; inset:0; background:rgba(0,0,0,0.25); z-index:10001; display:none; align-items:center; justify-content:center; backdrop-filter:blur(4px); }
.change-pwd-modal { background:var(--bg-surface); border:1px solid var(--border-default); border-radius:var(--radius-lg); width:380px; max-width:calc(100vw - 24px); box-shadow:var(--shadow-lg); animation:dingModalFadeIn .25s ease; }
@keyframes dingModalFadeIn { from { opacity:0; transform:translateY(-12px); } to { opacity:1; transform:translateY(0); } }
.change-pwd-header { display:flex; justify-content:space-between; align-items:center; padding:14px 18px; border-bottom:1px solid var(--border-subtle); }
.change-pwd-header h3 { margin:0; font-size: 17px; color:var(--text-primary); }
.change-pwd-header .close-btn { background:none; border:none; color:var(--text-muted); font-size: 22px; cursor:pointer; line-height:1; transition:color var(--transition-fast); }
.change-pwd-header .close-btn:hover { color:var(--text-primary); }
.change-pwd-body { padding:18px; display:flex; flex-direction:column; gap:14px; }
.change-pwd-body .auth-field { display:flex; flex-direction:column; gap:4px; }
.change-pwd-body .auth-field label { font-size: 14px; color:var(--text-secondary); }
.change-pwd-body .auth-field input { background:var(--bg-deep); border:1px solid var(--border-default); border-radius:var(--radius-sm); padding:8px 12px; color:var(--text-primary); font-size: 16px; outline:none; transition:border var(--transition-fast), box-shadow var(--transition-fast); }
.change-pwd-body .auth-field input:focus { border-color:var(--accent-purple); box-shadow:0 0 0 3px var(--glow-purple); }
.change-pwd-body .auth-submit-btn { background:linear-gradient(135deg, var(--accent-purple-dim), var(--accent-purple)); border:none; border-radius:var(--radius-sm); padding:10px; color:#fff; font-size: 16px; font-weight:600; cursor:pointer; transition:all var(--transition-fast); }
.change-pwd-body .auth-submit-btn:hover { box-shadow:0 0 12px var(--glow-purple); transform:translateY(-1px); }

/* === 注册成功提示弹窗 === */
.reg-success-overlay { position:fixed; inset:0; background:rgba(0,0,0,0.25); z-index:10002; display:none; align-items:center; justify-content:center; backdrop-filter:blur(4px); }
.reg-success-modal { background:var(--bg-surface); border:1px solid var(--border-default); border-radius:var(--radius-lg); width:340px; max-width:calc(100vw - 24px); padding:32px 24px 24px; text-align:center; box-shadow:var(--shadow-md); animation:dingModalFadeIn .25s ease; }
.reg-success-icon { width:56px; height:56px; margin:0 auto 16px; background:linear-gradient(135deg, var(--accent-purple-dim), var(--accent-purple)); border-radius:50%; display:flex; align-items:center; justify-content:center; font-size: 30px; color:#fff; box-shadow:0 0 20px var(--glow-purple); }
.reg-success-modal h3 { margin:0 0 8px; font-size: 20px; color:var(--text-primary); }
.reg-success-msg { font-size: 16px; color:var(--text-secondary); margin:0 0 20px; line-height:1.6; }
.reg-success-btn { background:linear-gradient(135deg, var(--accent-purple-dim), var(--accent-purple)); border:none; border-radius:var(--radius-sm); padding:10px 40px; color:#fff; font-size: 16px; font-weight:600; cursor:pointer; transition:all var(--transition-fast); }
.reg-success-btn:hover { box-shadow:0 0 12px var(--glow-purple); transform:translateY(-1px); }

/* ============ 解牛扫描分页器 ============ */
.ding-pager { display:flex; align-items:center; justify-content:center; gap:12px; padding:14px 0; border-top:1px solid var(--border-default); margin-top:8px; }
.ding-page-btn { background:var(--bg-elevated); border:1px solid var(--border-default); border-radius:var(--radius-sm); padding:6px 16px; font-size: 14px; color:var(--text-primary); cursor:pointer; transition:all var(--transition-fast); }
.ding-page-btn:hover:not(:disabled) { background:var(--bg-overlay); border-color:var(--accent-purple); color:var(--accent-purple); box-shadow:0 0 6px var(--glow-purple); }
.ding-page-btn:disabled { opacity:0.3; cursor:not-allowed; }
.ding-page-info { font-size: 14px; color:var(--text-secondary); }

/* ============ 顶栏自选股按钮 ============ */
.ding-watchlist-btn { background:rgba(37,99,235,0.06); border:1px solid var(--accent-blue-dim); border-radius:var(--radius-sm); padding:5px 14px; font-size: 14px; color:var(--accent-blue); cursor:pointer; transition:all var(--transition-fast); white-space:nowrap; }
.ding-watchlist-btn:hover { background:linear-gradient(135deg, var(--accent-blue-dim), var(--accent-blue)); color:#fff; box-shadow:0 0 10px var(--glow-blue); }

/* 顶栏加入自选按钮 */
.ding-add-wl-topbar { background:rgba(22,163,74,0.06); border:1px solid var(--accent-green-dim); border-radius:var(--radius-sm); padding:5px 14px; font-size: 14px; color:var(--accent-green); cursor:pointer; transition:all var(--transition-fast); white-space:nowrap; }
.ding-add-wl-topbar:hover { background:linear-gradient(135deg, var(--accent-green-dim), #2ea043); color:#fff; box-shadow:0 0 10px var(--glow-green); }

/* ============ 自选股下拉面板 ============ */
.ding-wl-overlay { position:fixed; inset:0; z-index:8000; background:rgba(0,0,0,0.25); display:none; backdrop-filter:blur(2px); }
.ding-wl-overlay.show { display:block; }
.ding-wl-panel { position:fixed; top:0; right:-460px; width:420px; max-width:100vw; height:100dvh; background:var(--bg-surface); border-left:1px solid var(--border-subtle); z-index:8001; transition:right .3s ease; overflow-y:auto; box-shadow:-4px 0 20px rgba(0,0,0,0.08); -webkit-overflow-scrolling:touch; padding-bottom:env(safe-area-inset-bottom, 0px); }
.ding-wl-panel.open { right:0; }

.ding-wl-header { display:flex; justify-content:space-between; align-items:center; padding:14px 16px; border-bottom:1px solid var(--border-default); }
.ding-wl-header h3 { margin:0; font-size: 16px; color:var(--text-primary); }
.ding-wl-back-btn { display:none; background:none; border:none; font-size:14px; color:var(--text-secondary); cursor:pointer; padding:4px 8px; margin-right:4px; white-space:nowrap; }
.ding-wl-header-actions { display:flex; align-items:center; gap:6px; }
.ding-wl-add-group-btn { background:none; border:1px dashed var(--accent-purple-dim); border-radius:4px; padding:3px 8px; font-size: 12px; color:var(--accent-purple); cursor:pointer; transition:all var(--transition-fast); }
.ding-wl-add-group-btn:hover { background:var(--accent-purple-dim); color:#fff; }
.ding-wl-analysis-btn { background:var(--bg-elevated); border:1px solid var(--accent-purple-dim); border-radius:4px; padding:4px 10px; font-size: 13px; color:var(--accent-purple); cursor:pointer; transition:all var(--transition-fast); }
.ding-wl-analysis-btn:hover { background:var(--accent-purple-dim); color:#fff; box-shadow:0 0 6px var(--glow-purple); }
.ding-wl-analysis-btn.loading { opacity:0.6; pointer-events:none; }

/* 分组Tab */
.ding-wl-groups { display:flex; align-items:center; gap:2px; padding:8px 12px 8px; border-bottom:1px solid var(--border-subtle); overflow-x:auto; flex-shrink:0; -webkit-overflow-scrolling:touch; }
.ding-wl-groups::-webkit-scrollbar { display:none; }
.ding-wl-group-tab { white-space:nowrap; padding:3px 10px; border-radius:14px; font-size:12px; cursor:pointer; background:var(--card); color:var(--text-muted); border:1px solid var(--border); transition:all var(--transition-fast); user-select:none; display:flex; align-items:center; gap:4px; }
.ding-wl-group-tab:hover { border-color:var(--accent-purple); color:var(--accent-purple); }
.ding-wl-group-tab.active { background:var(--accent-purple); color:#fff; border-color:var(--accent-purple); }
.ding-wl-group-tab .group-count { font-size:10px; opacity:0.7; }
.ding-wl-group-tab .group-more { font-size:12px; opacity:0.5; margin-left:2px; }
.ding-wl-group-add { white-space:nowrap; padding:3px 8px; border-radius:14px; font-size:12px; cursor:pointer; background:transparent; color:var(--accent-purple); border:1px dashed var(--accent-purple); opacity:0.6; transition:all var(--transition-fast); }
.ding-wl-group-add:hover { opacity:1; background:var(--glow-purple); }

/* 搜索过滤 */
.ding-wl-filter { padding:4px 12px; }
.ding-wl-filter-input { width:100%; padding:5px 10px; border:1px solid var(--border); border-radius:8px; font-size:12px; background:var(--card); color:var(--text-primary); outline:none; transition:border var(--transition-fast); }
.ding-wl-filter-input:focus { border-color:var(--accent-purple); }

/* 列表头 */
.ding-wl-list-header { display:flex; align-items:center; padding:6px 12px; background:var(--bg-elevated); border-bottom:1px solid var(--border-subtle); font-size: 11px; color:var(--text-muted); }
.ding-wl-list-header .ding-wl-h-left { flex:1; min-width:70px; }
.ding-wl-list-header .ding-wl-h-price { width:68px; text-align:right; }
.ding-wl-list-header .ding-wl-h-change { width:76px; text-align:right; }
.ding-wl-list-header .ding-wl-h-extra { width:80px; text-align:right; padding-right:32px; white-space:nowrap; }

/* 自选股列表 */
.ding-wl-list { padding:0; }
.ding-wl-empty { padding:30px; text-align:center; color:var(--text-secondary); font-size: 15px; }
.ding-wl-item { padding:8px 12px; cursor:pointer; transition:background var(--transition-fast); border-bottom:1px solid var(--border-subtle); }
.ding-wl-item:hover { background:var(--bg-elevated); }
.ding-wl-item.has-analysis:hover { background:transparent; }
.ding-wl-item-main { display:flex; align-items:center; gap:0; }
.ding-wl-left { flex:1; min-width:0; padding-right:6px; }
.ding-wl-name { display:block; font-size: 14px; color:var(--text-primary); font-weight:600; line-height:1.35; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.ding-wl-item-code { display:block; font-size: 11px; color:var(--text-muted); line-height:1.3; }
.ding-wl-price-col { width:68px; text-align:right; flex-shrink:0; }
.ding-wl-price { font-size: 14px; font-weight:700; color:var(--text-primary); }
.ding-wl-price.up { color:var(--accent-red); }
.ding-wl-price.down { color:var(--accent-green); }
.ding-wl-change-col { width:76px; text-align:right; flex-shrink:0; display:flex; flex-direction:column; align-items:flex-end; gap:1px; }
.ding-wl-change { font-size: 11px; font-weight:500; color:var(--text-primary); }
.ding-wl-change.up { color:var(--accent-red); }
.ding-wl-change.down { color:var(--accent-green); }
.ding-wl-pct { display:inline-block; min-width:56px; padding:1px 5px; border-radius:3px; font-size: 12px; font-weight:600; text-align:center; line-height:1.5; }
.ding-wl-pct.up { background:rgba(220,38,38,0.08); color:var(--accent-red); }
.ding-wl-pct.down { background:rgba(22,163,74,0.08); color:var(--accent-green); }
.ding-wl-extra-col { width:80px; text-align:right; flex-shrink:0; display:flex; flex-direction:column; align-items:flex-end; gap:1px; }
.ding-wl-turnover, .ding-wl-amount { font-size: 11px; color:var(--text-secondary); }
.ding-wl-actions { flex-shrink:0; display:flex; align-items:center; gap:0; margin-left:4px; opacity:0; pointer-events:none; transition:opacity 0.15s ease; }
.ding-wl-del { background:none; border:none; color:var(--text-muted); font-size:15px; cursor:pointer; padding:0 2px; border-radius:3px; transition:all var(--transition-fast); line-height:1; }
.ding-wl-del:hover { color:var(--accent-red); background:var(--glow-red); }
/* hover / .show-actions */
ding-wl-item-main:hover ding-wl-item-actions,
ding-wl-item.show-actions ding-wl-item-actions { opacity:1; pointer-events:auto; }
ding-wl-item.show-actions ding-wl-item-del { color:var(--accent-red); }

.ding-wl-move { background:none; border:none; color:var(--text-muted); font-size:13px; cursor:pointer; padding:0 3px; border-radius:3px; transition:all var(--transition-fast); line-height:1; letter-spacing:-2px; }
.ding-wl-move:hover { color:var(--accent-purple); background:var(--glow-purple); }
.ding-wl-ctx-item.active { color:var(--text-muted); pointer-events:none; font-weight:400; }

/* 第二行指标 */
.ding-wl-item-sub { display:flex; flex-wrap:wrap; gap:2px 8px; padding-top:3px; }
.ding-wl-sub-item { font-size: 10px; color:var(--text-muted); white-space:nowrap; }
.ding-wl-sub-item b { color:var(--text-secondary); font-weight:500; }

/* 分析结果 */
.ding-wl-item-analysis { display:none; padding:6px 0 2px 0; }
.ding-wl-item.has-analysis .ding-wl-item-analysis { display:block; }
.ding-wl-analysis-row { display:flex; align-items:center; gap:8px; flex-wrap:wrap; margin-bottom:4px; }
.ding-wl-signal-tag { display:inline-block; padding:1px 6px; border-radius:3px; font-size: 11px; font-weight:600; line-height:1.6; }
.ding-wl-signal-tag.buy { background:rgba(220,38,38,0.10); color:#dc2626; }
.ding-wl-signal-tag.strong-buy { background:rgba(220,38,38,0.18); color:#b91c1c; }
.ding-wl-signal-tag.sell { background:rgba(22,163,74,0.10); color:#16a34a; }
.ding-wl-signal-tag.strong-sell { background:rgba(22,163,74,0.18); color:#15803d; }
.ding-wl-signal-tag.hold { background:rgba(107,114,128,0.10); color:#6b7280; }
.ding-wl-signal-tag.safe { background:rgba(37,99,235,0.10); color:#2563eb; }
.ding-wl-signal-tag.danger { background:rgba(234,88,12,0.10); color:#ea580c; }
.ding-wl-ref-price { font-size: 11px; color:var(--text-secondary); white-space:nowrap; }
.ding-wl-ref-price span { font-weight:600; }
.ding-wl-ref-price .buy-ref { color:var(--accent-red); }
.ding-wl-ref-price .sell-ref { color:var(--accent-green); }
.ding-wl-score-bar { display:flex; align-items:center; gap:3px; margin-left:auto; }
.ding-wl-score-track { width:50px; height:5px; background:var(--border-default); border-radius:3px; overflow:hidden; }
.ding-wl-score-fill { height:100%; border-radius:3px; transition:width .4s ease; }
.ding-wl-score-fill.high { background:var(--accent-red); }
.ding-wl-score-fill.mid { background:#f59e0b; }
.ding-wl-score-fill.low { background:var(--accent-green); }
.ding-wl-score-text { font-size: 10px; font-weight:600; color:var(--text-muted); min-width:22px; text-align:right; }

/* 展开详情 */
.ding-wl-item-detail { display:none; padding:6px 0 4px 0; border-top:1px dashed var(--border-subtle); margin-top:4px; }
.ding-wl-item.expanded .ding-wl-item-detail { display:block; }
.ding-wl-detail-row { font-size: 11px; color:var(--text-secondary); line-height:1.7; }
.ding-wl-detail-row .label { color:var(--text-muted); }
.ding-wl-detail-row .val { color:var(--text-primary); font-weight:500; }
.ding-wl-detail-row .buy-val { color:var(--accent-red); }
.ding-wl-detail-row .sell-val { color:var(--accent-green); }

/* 拖拽排序 */
.ding-wl-item.drag-source { opacity:0.3 !important; }
.ding-wl-item.drag-clone { background:var(--bg-surface); border-radius:var(--radius-md); box-shadow:0 4px 12px rgba(0,0,0,0.15); }
body.drag-active, body.drag-active * { -webkit-user-select:none !important; user-select:none !important; }

/* 自选股分页 */
.ding-wl-pagination { display:flex; align-items:center; justify-content:center; gap:12px; padding:10px 16px; border-top:1px solid var(--border-subtle); }
.ding-wl-page-btn { background:var(--bg-elevated); border:1px solid var(--border-default); border-radius:4px; padding:4px 12px; font-size: 13px; color:var(--text-primary); cursor:pointer; transition:all var(--transition-fast); }
.ding-wl-page-btn:hover:not(:disabled) { border-color:var(--accent-purple); color:var(--accent-purple); }
.ding-wl-page-btn:disabled { opacity:0.4; cursor:not-allowed; }
.ding-wl-page-info { font-size: 13px; color:var(--text-muted); min-width:50px; text-align:center; }

/* 新建分组弹窗 */
.ding-modal-overlay { position:fixed; inset:0; z-index:9999; background:rgba(0,0,0,0.3); display:flex; align-items:center; justify-content:center; animation:fadeIn .15s ease; }
@keyframes fadeIn { from { opacity:0; } to { opacity:1; } }
.ding-modal-card { background:var(--bg-surface); border-radius:12px; padding:24px; width:300px; max-width:calc(100vw - 24px); box-shadow:0 8px 32px rgba(0,0,0,0.15); }
.ding-modal-card h4 { margin:0 0 16px 0; font-size: 16px; color:var(--text-primary); }
.ding-modal-input { width:100%; padding:8px 12px; border:1px solid var(--border-default); border-radius:8px; font-size: 14px; background:var(--bg-elevated); color:var(--text-primary); outline:none; margin-bottom:16px; }
.ding-modal-input:focus { border-color:var(--accent-purple); }
.ding-modal-actions { display:flex; justify-content:flex-end; gap:8px; }
.ding-modal-cancel { padding:6px 16px; border:1px solid var(--border-default); border-radius:6px; background:none; color:var(--text-secondary); cursor:pointer; font-size: 13px; }
.ding-modal-cancel:hover { background:var(--bg-elevated); }
.ding-modal-confirm { padding:6px 16px; border:none; border-radius:6px; background:var(--accent-purple); color:#fff; cursor:pointer; font-size: 13px; font-weight:600; }
.ding-modal-confirm:hover { opacity:0.9; }

/* 分组右键菜单 */
.ding-wl-ctx-menu { position:fixed; z-index:10001; background:#fff; border:1px solid var(--border-default); border-radius:8px; padding:4px 0; box-shadow:0 4px 16px rgba(0,0,0,0.12); min-width:120px; }
.ding-wl-ctx-item { padding:7px 14px; font-size:13px; cursor:pointer; color:var(--text-primary); transition:background var(--transition-fast); }
.ding-wl-ctx-item:hover { background:var(--glow-purple); }
.ding-wl-ctx-item.danger { color:var(--accent-red); }
.ding-wl-ctx-item.danger:hover { background:var(--glow-red); }

/* H5 自选股面板全屏 */
@media (max-width: 768px) {
  .ding-wl-panel { width: 100%; max-width: 100vw; }
  .ding-wl-back-btn { display:inline-block; }
  /* iOS 防缩放 */
  .ding-wl-filter-input { font-size:16px; }
  .ding-modal-input { font-size:16px; }
}
@media (max-width: 480px) {
  .ding-wl-panel { right:-100%; }
  .ding-wl-item { padding:8px 10px; }
  .ding-wl-item-name { font-size: 13px; }
  .ding-wl-item-price { font-size: 13px; }
  .ding-wl-item-price-col { width:60px; }
  .ding-wl-item-change-col { width:68px; }
  .ding-wl-item-extra-col { width:68px; }
  .ding-wl-item-pct { min-width:48px; font-size: 11px; padding:1px 4px; }
  .ding-wl-analysis-row { gap:5px; }
  .ding-wl-score-track { width:36px; }
  .ding-wl-sub-item { font-size: 9px; }
}

.wl-mobile-turnover { display:none; }
@media (max-width: 768px) {
  .wl-mobile-turnover { display:block; font-size:10px; color:#8b949e; margin-top:2px; }
}.watchlist-tags { display:none; }

/* ============ 个股详情面板 ============ */
#stockDetailPanel { margin-top: 12px; }
.sd-tabs { display:flex; gap:2px; border-bottom:1px solid var(--border-subtle); margin-bottom:12px; flex-wrap:wrap; }
.sd-tab { padding:8px 12px; font-size:13px; color:var(--text-muted); cursor:pointer; border-bottom:2px solid transparent; transition:all .2s; white-space:nowrap; }
.sd-tab:hover { color:var(--text-primary); }
.sd-tab.active { color:var(--accent-purple); border-bottom-color:var(--accent-purple); font-weight:600; }
.sd-panel { padding:4px 0; }
.sd-empty { text-align:center; color:var(--text-tertiary,#888); padding:30px 0; font-size:14px; }
.sd-profile h3 { margin:0 0 12px 0; font-size:18px; color:var(--text-primary); }
.sd-row { display:flex; padding:6px 0; border-bottom:1px solid var(--border-subtle); font-size:14px; }
.sd-label { width:80px; color:var(--text-muted); flex-shrink:0; }
.sd-val { color:var(--text-primary); flex:1; }
.sd-business { line-height:1.6; }
.sd-rating-section { margin-top:16px; }
.sd-rating-section h4 { margin:0 0 8px 0; font-size:14px; color:var(--text-secondary); }
.sd-rating-bar { display:flex; border-radius:4px; overflow:hidden; height:24px; font-size:12px; color:#fff; }
.sd-rb-buy { background:#e74c3c; display:flex; align-items:center; justify-content:center; min-width:0; }
.sd-rb-hold { background:#f39c12; display:flex; align-items:center; justify-content:center; min-width:0; }
.sd-rb-sell { background:#27ae60; display:flex; align-items:center; justify-content:center; min-width:0; }
.sd-table { width:100%; border-collapse:collapse; font-size:13px; margin:8px 0; }
.sd-table th { text-align:left; padding:6px 8px; background:var(--bg-elevated); color:var(--text-muted); font-weight:600; border-bottom:1px solid var(--border-default); }
.sd-table td { padding:6px 8px; border-bottom:1px solid var(--border-subtle); color:var(--text-primary); }
.sd-table tr:hover td { background:var(--bg-elevated); }
.sd-up { color:#e74c3c !important; }
.sd-down { color:#27ae60 !important; }
.sd-news-list, .sd-notice-list { display:flex; flex-direction:column; gap:8px; }
.sd-news-item, .sd-notice-item { display:block; padding:8px 10px; border-radius:6px; background:var(--bg-elevated); text-decoration:none; transition:background .2s; }
.sd-news-item:hover, .sd-notice-item:hover { background:var(--bg-subtle); }
.sd-news-time, .sd-notice-time { font-size:12px; color:var(--text-muted); margin-bottom:2px; }
.sd-news-title, .sd-notice-title { font-size:14px; color:var(--text-primary); line-height:1.4; }
.sd-news-source, .sd-notice-type { font-size:12px; color:var(--text-tertiary,#888); margin-top:2px; }
.sd-imp { display:inline-block; padding:1px 6px; border-radius:3px; font-size:11px; margin-left:6px; color:#fff; }
.sd-imp-1 { background:#27ae60; }
.sd-imp-2 { background:#f39c12; }
.sd-imp-3 { background:#e74c3c; }
.sd-risk h4 { margin:12px 0 8px 0; font-size:14px; color:var(--text-secondary); }
.sd-risk-list { list-style:none; padding:0; margin:0; }
.sd-risk-list li { padding:6px 10px; border-radius:4px; background:var(--glow-red,#fde8e8); color:#e74c3c; margin-bottom:4px; font-size:13px; }
.sd-risk-high { color:#e74c3c !important; font-weight:600; }
.sd-risk-mid { color:#f39c12 !important; }
.sd-risk-low { color:#27ae60 !important; }
.sd-finance h4 { margin:12px 0 8px 0; font-size:14px; color:var(--text-secondary); }
