/* ==========================================================================
   币润 BiRun 设计系统 —— 专业新闻门户（对标 BlockBeats）
   ========================================================================== */

:root {
  --brand: #1a56ff;
  --brand-hover: #0f44e0;
  --up: #0ecb81;
  --down: #f6465d;
  --hot: #ff4d4f;
  --bg: #ffffff;
  --bg-soft: #f7f8fa;
  --bg-panel: #ffffff;
  --line: #f0f1f2;
  --line-strong: #e5e6e8;
  --text-1: #17181a;
  --text-2: #4b4f55;
  --text-3: #9499a0;
  --shadow: 0 1px 2px rgba(0,0,0,.03), 0 4px 16px rgba(0,0,0,.04);
  --shadow-lg: 0 8px 32px rgba(0,0,0,.10);
  --radius: 8px;
  --header-h: 60px;
  --font: -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", sans-serif;
}
[data-theme="dark"] {
  --brand: #3b6fff;
  --brand-hover: #5c88ff;
  --bg: #101114;
  --bg-soft: #17181c;
  --bg-panel: #17181c;
  --line: #232529;
  --line-strong: #2e3136;
  --text-1: #eceef1;
  --text-2: #b3b8bf;
  --text-3: #6d737b;
  --shadow: 0 1px 2px rgba(0,0,0,.4);
  --shadow-lg: 0 8px 32px rgba(0,0,0,.5);
}

* { margin: 0; padding: 0; box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; }
body {
  font-family: var(--font);
  background: var(--bg);
  color: var(--text-1);
  font-size: 15px;
  line-height: 1.6;
  transition: background .25s, color .25s;
}
a { color: inherit; text-decoration: none; }
button { font-family: inherit; cursor: pointer; border: none; background: none; color: inherit; }
input, textarea, select { font-family: inherit; }
img { max-width: 100%; }

/* ============ Header ============ */
.site-header {
  position: sticky; top: 0; z-index: 100;
  background: var(--bg);
  border-bottom: 1px solid var(--line);
}
.header-inner {
  max-width: 1200px; margin: 0 auto; height: var(--header-h);
  display: flex; align-items: center; gap: 36px; padding: 0 24px;
}
.logo { display: flex; align-items: center; gap: 10px; flex-shrink: 0; }
.logo-mark {
  width: 34px; height: 34px; border-radius: 8px;
  background: var(--text-1); color: var(--bg);
  display: inline-flex; align-items: center; justify-content: center;
  font-weight: 800; font-size: 17px;
}
.logo-mark.small { width: 28px; height: 28px; font-size: 14px; border-radius: 6px; }
.logo-text { font-size: 19px; font-weight: 800; letter-spacing: -.01em; }
.logo-text em { font-style: normal; font-weight: 600; font-size: 13px; color: var(--text-3); margin-left: 6px; letter-spacing: .02em; }

.main-nav { display: flex; gap: 4px; flex: 1; }
.main-nav a {
  padding: 8px 14px; font-size: 15px; font-weight: 500; color: var(--text-2);
  border-radius: 6px; transition: color .15s, background .15s;
}
.main-nav a:hover { color: var(--text-1); background: var(--bg-soft); }
.main-nav a.active { color: var(--text-1); font-weight: 700; }

.header-actions { display: flex; align-items: center; gap: 10px; }
.search-box {
  position: relative; display: flex; align-items: center;
  background: var(--bg-soft); border-radius: 18px; padding: 0 14px; height: 36px; width: 200px;
  border: 1px solid transparent; transition: border-color .15s, width .2s;
}
.search-box:focus-within { border-color: var(--line-strong); width: 260px; }
.search-box i { font-size: 13px; color: var(--text-3); margin-right: 8px; }
.search-box input { border: none; outline: none; background: none; font-size: 14px; width: 100%; color: var(--text-1); }
.search-dropdown {
  position: absolute; top: calc(100% + 8px); right: 0; width: 380px; max-height: 420px; overflow-y: auto;
  background: var(--bg-panel); border: 1px solid var(--line); border-radius: var(--radius);
  box-shadow: var(--shadow-lg); padding: 6px; z-index: 200;
}
.search-dropdown a, .search-dropdown .sr-item { display: block; padding: 10px 12px; border-radius: 6px; font-size: 14px; }
.search-dropdown a:hover { background: var(--bg-soft); }
.search-dropdown .sr-tag { font-size: 11px; color: var(--brand); margin-right: 6px; font-weight: 600; }
.search-dropdown .sr-empty { padding: 16px; color: var(--text-3); font-size: 13px; text-align: center; }

.icon-btn {
  width: 36px; height: 36px; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center;
  color: var(--text-2); font-size: 15px; transition: background .15s;
}
.icon-btn:hover { background: var(--bg-soft); color: var(--text-1); }
.theme-icon-light { display: none; }
[data-theme="dark"] .theme-icon-dark { display: none; }
[data-theme="dark"] .theme-icon-light { display: inline; }
.mobile-only { display: none; }
.mobile-menu { border-top: 1px solid var(--line); padding: 8px 16px; }
.mobile-menu a { display: block; padding: 12px 8px; font-size: 15px; font-weight: 500; border-bottom: 1px solid var(--line); }
.mobile-menu a:last-child { border-bottom: none; }

/* 行情条 */
.ticker-strip {
  display: flex; gap: 28px; overflow-x: auto; white-space: nowrap;
  max-width: 1200px; margin: 0 auto; padding: 8px 24px;
  border-top: 1px solid var(--line); font-size: 12.5px;
  scrollbar-width: none;
}
.ticker-strip::-webkit-scrollbar { display: none; }
.tick { display: inline-flex; align-items: baseline; gap: 7px; flex-shrink: 0; }
.tick .t-sym { font-weight: 700; color: var(--text-1); }
.tick .t-price { color: var(--text-2); font-variant-numeric: tabular-nums; }
.tick .t-chg { font-weight: 600; font-variant-numeric: tabular-nums; }
.t-up { color: var(--up); } .t-down { color: var(--down); }

/* ============ 布局 ============ */
.page-main { max-width: 1200px; margin: 0 auto; padding: 28px 24px 60px; }
.home-grid { display: grid; grid-template-columns: minmax(0, 1fr) 360px; gap: 40px; }

/* ============ Hero 头条 ============ */
.hero-section { margin-bottom: 8px; }
.hero-card {
  display: block; padding: 20px 24px; border-radius: 12px;
  background: linear-gradient(135deg, #17181a 0%, #2a2d34 100%);
  color: #fff; margin-bottom: 28px; position: relative; overflow: hidden;
}
[data-theme="dark"] .hero-card { background: linear-gradient(135deg, #1d2026 0%, #2a2f3a 100%); border: 1px solid var(--line-strong); }
.hero-card::after {
  content: ''; position: absolute; right: -60px; top: -60px; width: 220px; height: 220px;
  background: radial-gradient(circle, rgba(59,111,255,.35), transparent 65%);
}
.hero-kicker { font-size: 12px; font-weight: 700; letter-spacing: .12em; color: #8ea8ff; text-transform: uppercase; margin-bottom: 10px; }
.hero-title { font-size: 21px; font-weight: 800; line-height: 1.45; letter-spacing: -.01em; margin-bottom: 8px; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; }
.hero-desc { font-size: 14px; color: rgba(255,255,255,.65); display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.hero-meta { margin-top: 12px; font-size: 12.5px; color: rgba(255,255,255,.45); }
.hero-grid { display: grid; grid-template-columns: 1fr 200px; gap: 20px; align-items: center; position: relative; z-index: 1; }
.hero-grid.no-img { grid-template-columns: 1fr; }
.hero-img { width: 200px; height: 126px; border-radius: 10px; overflow: hidden; }
.hero-img img { width: 100%; height: 100%; object-fit: cover; }

/* ============ 文章 Feed（左图右文 / 左文右图 经典门户行） ============ */
.section-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 4px; }
.section-head h2 { font-size: 18px; font-weight: 800; letter-spacing: -.01em; }
.more-link { font-size: 13px; color: var(--text-3); }
.more-link:hover { color: var(--brand); }

.article-feed { display: flex; flex-direction: column; }
.feed-item {
  display: flex; gap: 20px; padding: 22px 0;
  border-bottom: 1px solid var(--line);
}
.feed-item:last-child { border-bottom: none; }
.feed-body { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.feed-title {
  font-size: 17px; font-weight: 700; line-height: 1.5; letter-spacing: -.01em;
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
  transition: color .15s;
}
.feed-item:hover .feed-title { color: var(--brand); }
.feed-summary {
  margin-top: 8px; font-size: 13.5px; color: var(--text-3); line-height: 1.65;
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}
.feed-meta { margin-top: auto; padding-top: 10px; font-size: 12.5px; color: var(--text-3); display: flex; align-items: center; gap: 8px; }
.feed-meta .cat { color: var(--brand); font-weight: 600; }
.feed-meta .dot::before { content: '·'; }
.feed-thumb {
  width: 200px; height: 125px; border-radius: 8px; overflow: hidden; flex-shrink: 0;
  background: var(--bg-soft); display: flex; align-items: center; justify-content: center;
}
.feed-thumb img { width: 100%; height: 100%; object-fit: cover; transition: transform .3s; }
.feed-item:hover .feed-thumb img { transform: scale(1.04); }
.feed-thumb .thumb-ph { font-size: 28px; font-weight: 800; color: var(--text-3); opacity: .35; letter-spacing: .05em; }

/* ============ 右侧快讯栏（律动式核心） ============ */
.home-sidebar { display: flex; flex-direction: column; gap: 20px; }
.nf-panel {
  background: var(--bg-panel); border: 1px solid var(--line); border-radius: 12px;
  overflow: hidden;
}
.nf-panel-head {
  display: flex; align-items: center; justify-content: space-between;
  padding: 16px 18px 12px;
}
.nf-panel-head h2 { font-size: 16px; font-weight: 800; display: flex; align-items: center; gap: 8px; }
.live-dot {
  width: 8px; height: 8px; border-radius: 50%; background: var(--hot); display: inline-block;
  animation: live-pulse 1.6s ease-out infinite;
}
@keyframes live-pulse {
  0% { box-shadow: 0 0 0 0 rgba(255,77,79,.5); }
  70% { box-shadow: 0 0 0 7px rgba(255,77,79,0); }
  100% { box-shadow: 0 0 0 0 rgba(255,77,79,0); }
}
.nf-list { padding: 0 18px; max-height: 560px; overflow-y: auto; }
.nf-item {
  position: relative; padding: 0 0 18px 20px; border-left: 1px solid var(--line-strong);
  margin-left: 6px;
}
.nf-item:last-child { padding-bottom: 6px; }
.nf-item::before {
  content: ''; position: absolute; left: -4.5px; top: 7px;
  width: 8px; height: 8px; border-radius: 50%;
  background: var(--bg); border: 2px solid var(--text-3);
}
.nf-item.important::before { border-color: var(--hot); background: var(--hot); }
.nf-time { font-size: 12px; color: var(--text-3); font-variant-numeric: tabular-nums; margin-bottom: 4px; }
.nf-title { display: block; font-size: 14px; font-weight: 600; line-height: 1.55; cursor: pointer; transition: color .15s; }
.nf-title:hover { color: var(--brand); }
.nf-item.important .nf-title { color: var(--hot); }
.nf-item.important .nf-title:hover { color: var(--hot); opacity: .85; }
.nf-body { font-size: 13px; color: var(--text-2); line-height: 1.7; margin-top: 6px; display: none; }
.nf-item.open .nf-body { display: block; }
/* 长正文折叠收纳（移动端体验关键：默认 3 行，点击展开） */
.nf-text.clamped { display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; }
.nf-expand {
  display: inline-flex; align-items: center; gap: 4px;
  margin-top: 6px; padding: 2px 0; font-size: 12.5px; font-weight: 600;
  color: var(--brand); background: none; border: none; cursor: pointer;
}
.nf-expand:hover { opacity: .8; }
.nf-img { margin-top: 10px; border-radius: 8px; overflow: hidden; max-width: 480px; }
.nf-img img { width: 100%; max-height: 280px; object-fit: cover; display: block; }
.nf-tags { margin-top: 8px; display: flex; flex-wrap: wrap; gap: 6px; align-items: center; }
.nf-more-btn {
  display: block; text-align: center; padding: 12px; font-size: 13.5px; font-weight: 600;
  color: var(--text-2); border-top: 1px solid var(--line); transition: color .15s, background .15s;
}
.nf-more-btn:hover { color: var(--brand); background: var(--bg-soft); }

/* 标签 */
.tag { font-size: 11.5px; font-weight: 600; padding: 2px 8px; border-radius: 4px; line-height: 1.6; }
.tag-bull { color: var(--up); background: rgba(14,203,129,.09); }
.tag-bear { color: var(--down); background: rgba(246,70,93,.09); }
.tag-coin { color: var(--brand); background: rgba(26,86,255,.07); }
.tag-hot { color: var(--hot); background: rgba(246,70,93,.1); vertical-align: middle; font-size: 13px; padding: 3px 9px; border-radius: 4px; font-weight: 700; }
.tag-src { color: var(--text-3); font-size: 12px; }
.tag-src a:hover { color: var(--brand); }

/* ============ 侧栏小组件 ============ */
.side-widget {
  background: var(--bg-panel); border: 1px solid var(--line); border-radius: 12px; padding: 16px 18px;
}
.widget-title { font-size: 15px; font-weight: 800; margin-bottom: 12px; }
.fg-block { display: flex; align-items: center; gap: 14px; padding-bottom: 14px; border-bottom: 1px solid var(--line); margin-bottom: 10px; }
.fg-num { font-size: 34px; font-weight: 800; font-variant-numeric: tabular-nums; line-height: 1; }
.fg-label { font-size: 13px; font-weight: 600; margin-top: 4px; }
.fg-bar { flex: 1; height: 6px; border-radius: 3px; background: linear-gradient(90deg, var(--down), #f7b955, var(--up)); position: relative; }
.fg-bar i {
  position: absolute; top: -3px; width: 12px; height: 12px; border-radius: 50%;
  background: var(--bg); border: 3px solid var(--text-1); transform: translateX(-50%);
}
.hot-list { display: flex; flex-direction: column; }
.hot-item { display: flex; align-items: center; gap: 10px; padding: 7px 0; font-size: 13.5px; }
.hot-rank { width: 18px; font-weight: 800; color: var(--text-3); font-size: 13px; text-align: center; }
.hot-item:nth-child(1) .hot-rank, .hot-item:nth-child(2) .hot-rank, .hot-item:nth-child(3) .hot-rank { color: var(--hot); }
.hot-item img { width: 20px; height: 20px; border-radius: 50%; }
.hot-sym { font-weight: 700; }
.hot-name { color: var(--text-3); font-size: 12.5px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; flex: 1; }
.hot-cap { color: var(--text-3); font-size: 12px; }

/* ============ 全球市场板块（金十式） ============ */
.gm-block { display: flex; flex-direction: column; gap: 2px; }
.gm-group { padding: 4px 0 8px; }
.gm-group + .gm-group { border-top: 1px solid var(--line); padding-top: 10px; }
.gm-group-label { font-size: 11.5px; font-weight: 700; color: var(--text-3); margin-bottom: 4px; letter-spacing: .04em; }
.gm-row {
  display: flex; align-items: baseline; gap: 8px; padding: 4px 0;
  font-size: 13px;
}
.gm-name { font-weight: 700; color: var(--text-1); flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.gm-price { font-variant-numeric: tabular-nums; color: var(--text-2); }
.gm-chg { font-weight: 700; font-variant-numeric: tabular-nums; min-width: 62px; text-align: right; font-size: 12.5px; }

.fund-item { padding: 10px 0; border-bottom: 1px solid var(--line); }
.fund-item:last-child { border-bottom: none; }
.fund-top { display: flex; justify-content: space-between; align-items: baseline; }
.fund-name { font-size: 14px; font-weight: 700; }
.fund-amount { font-size: 14px; font-weight: 800; color: var(--brand); font-variant-numeric: tabular-nums; }
.fund-sub { font-size: 12.5px; color: var(--text-3); margin-top: 3px; }

.cal-item { display: flex; gap: 10px; padding: 8px 0; align-items: flex-start; }
.cal-icon { font-size: 15px; line-height: 1.5; }
.cal-title { font-size: 13.5px; font-weight: 600; line-height: 1.5; }
.cal-date { font-size: 12px; color: var(--text-3); margin-top: 2px; }

/* ============ 快讯页（按日期分组时间轴） ============ */
.nf-page { max-width: 720px; margin: 0 auto; }
.nf-page-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 22px; }
.nf-page-head h1 { font-size: 24px; font-weight: 800; display: flex; align-items: center; gap: 10px; }
.nf-filters, .art-filters { display: flex; gap: 8px; flex-wrap: wrap; }
.nf-filters button, .art-filters button {
  padding: 6px 16px; font-size: 13.5px; font-weight: 600; border-radius: 16px;
  color: var(--text-2); background: var(--bg-soft); transition: all .15s;
}
.nf-filters button:hover, .art-filters button:hover { color: var(--text-1); }
.nf-filters button.active, .art-filters button.active { background: var(--text-1); color: var(--bg); }

.nf-date-group { margin-bottom: 6px; }
.nf-date-head {
  position: sticky; top: calc(var(--header-h) + 0px); z-index: 10;
  background: var(--bg); padding: 10px 0; font-size: 15px; font-weight: 800;
  display: flex; align-items: center; gap: 10px;
}
.nf-date-head::after { content: ''; flex: 1; height: 1px; background: var(--line); }
.nf-timeline .nf-item { padding-bottom: 22px; }
.nf-timeline .nf-title { font-size: 15.5px; }
.nf-timeline .nf-body { display: block; font-size: 14px; }
.nf-timeline .nf-item.important .nf-title { font-size: 16px; }

.load-more-wrap { text-align: center; padding: 28px 0; }
.load-more-wrap button {
  padding: 10px 36px; font-size: 14px; font-weight: 600; border-radius: 20px;
  border: 1px solid var(--line-strong); color: var(--text-2); transition: all .15s;
}
.load-more-wrap button:hover { color: var(--brand); border-color: var(--brand); }

/* ============ 文章页 ============ */
.art-page { max-width: 860px; margin: 0 auto; }
.art-page-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 10px; flex-wrap: wrap; gap: 12px; }
.art-page-head h1 { font-size: 24px; font-weight: 800; }

/* ============ 文章详情 ============ */
.art-detail { max-width: 720px; margin: 0 auto; }
.art-crumb { font-size: 13px; color: var(--text-3); margin-bottom: 18px; }
.art-crumb a:hover { color: var(--brand); }
.art-h1 { font-size: 30px; font-weight: 800; line-height: 1.4; letter-spacing: -.015em; margin-bottom: 18px; }
.art-byline {
  display: flex; align-items: center; gap: 14px; font-size: 13.5px; color: var(--text-3);
  padding-bottom: 22px; border-bottom: 1px solid var(--line); margin-bottom: 26px;
}
.art-lead {
  font-size: 15px; color: var(--text-2); line-height: 1.8;
  background: var(--bg-soft); border-left: 3px solid var(--text-1);
  padding: 14px 18px; border-radius: 0 8px 8px 0; margin-bottom: 26px;
}
.art-cover { margin: 20px 0 26px; border-radius: 12px; overflow: hidden; }
.art-cover img { width: 100%; max-height: 380px; object-fit: cover; display: block; }
.art-body { font-size: 16px; line-height: 1.9; color: var(--text-1); }
.art-body h2 { font-size: 21px; font-weight: 800; margin: 36px 0 14px; letter-spacing: -.01em; }
.art-body h3 { font-size: 18px; font-weight: 700; margin: 28px 0 12px; }
.art-body p { margin: 16px 0; }
.art-body ul, .art-body ol { padding-left: 24px; margin: 16px 0; }
.art-body li { margin: 8px 0; }
.art-body a { color: var(--brand); }
.art-body a:hover { text-decoration: underline; }
.art-body blockquote { border-left: 3px solid var(--line-strong); padding-left: 16px; color: var(--text-2); margin: 20px 0; }
.art-body code { background: var(--bg-soft); padding: 2px 6px; border-radius: 4px; font-size: .9em; }
.art-body img { border-radius: 8px; margin: 16px 0; }
.art-disclaimer { margin-top: 44px; padding-top: 18px; border-top: 1px solid var(--line); font-size: 12.5px; color: var(--text-3); }

/* ============ Footer ============ */
.site-footer { border-top: 1px solid var(--line); background: var(--bg-soft); margin-top: 40px; }
.footer-inner {
  max-width: 1200px; margin: 0 auto; padding: 36px 24px;
  display: flex; align-items: flex-start; justify-content: space-between; gap: 24px; flex-wrap: wrap;
}
.footer-brand { display: flex; align-items: center; gap: 12px; }
.footer-name { font-size: 15px; font-weight: 800; }
.footer-slogan { font-size: 12.5px; color: var(--text-3); }
.footer-links { display: flex; gap: 22px; font-size: 13.5px; color: var(--text-2); flex-wrap: wrap; }
.footer-links a:hover { color: var(--brand); }
.footer-meta { font-size: 12px; color: var(--text-3); text-align: right; }

/* ============ 骨架屏 ============ */
.skeleton-row {
  height: 84px; border-radius: 8px; margin-bottom: 14px;
  background: linear-gradient(90deg, var(--bg-soft) 25%, var(--line) 50%, var(--bg-soft) 75%);
  background-size: 200% 100%; animation: sk 1.3s infinite;
}
.skeleton-row.big { height: 140px; }
@keyframes sk { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } }
.empty-hint { text-align: center; color: var(--text-3); font-size: 13.5px; padding: 32px 0; }

/* ============ 管理后台 ============ */
/* 安全修复：全局强制 hidden 属性生效（display:flex 等显式规则曾覆盖 hidden，导致登录卡与后台面板同屏） */
[hidden] { display: none !important; }
.admin-login { min-height: 100vh; display: flex; align-items: center; justify-content: center; background: var(--bg-soft); padding: 20px; }
.admin-login-card {
  width: 100%; max-width: 380px; background: var(--bg-panel); border: 1px solid var(--line);
  border-radius: 14px; padding: 40px 36px; box-shadow: var(--shadow);
}
.admin-login-logo { text-align: center; margin-bottom: 16px; }
.admin-login-logo .logo-mark { width: 46px; height: 46px; font-size: 22px; border-radius: 12px; }
.admin-login-card h1 { font-size: 19px; font-weight: 800; text-align: center; margin-bottom: 26px; }
.login-error { color: var(--down); font-size: 13px; text-align: center; margin-top: 14px; }

.admin-shell { min-height: 100vh; background: var(--bg-soft); }
.admin-header {
  height: 56px; background: var(--bg-panel); border-bottom: 1px solid var(--line);
  display: flex; align-items: center; justify-content: space-between; padding: 0 24px;
  position: sticky; top: 0; z-index: 50;
}
.admin-header-left { display: flex; align-items: center; gap: 10px; font-size: 15px; }
.admin-header-right { display: flex; align-items: center; gap: 18px; font-size: 13.5px; color: var(--text-2); }
.admin-header-right a:hover { color: var(--brand); }
.admin-header-right button { color: var(--down); font-size: 13.5px; }
.admin-body { max-width: 1100px; margin: 0 auto; padding: 24px; }
.admin-stats { display: grid; grid-template-columns: repeat(auto-fit, minmax(130px, 1fr)); gap: 12px; margin-bottom: 20px; }
.stat-card { background: var(--bg-panel); border: 1px solid var(--line); border-radius: 10px; padding: 14px 16px; }
.stat-num { font-size: 22px; font-weight: 800; font-variant-numeric: tabular-nums; }
.stat-label { font-size: 12px; color: var(--text-3); margin-top: 2px; }
.admin-tabs { display: flex; gap: 6px; margin-bottom: 16px; flex-wrap: wrap; }
.admin-tab {
  padding: 8px 18px; font-size: 13.5px; font-weight: 600; border-radius: 8px;
  color: var(--text-2); background: var(--bg-panel); border: 1px solid var(--line);
}
.admin-tab.active { background: var(--text-1); color: var(--bg); border-color: var(--text-1); }
.admin-card { background: var(--bg-panel); border: 1px solid var(--line); border-radius: 12px; padding: 22px; }
.admin-card h2 { font-size: 16px; font-weight: 800; margin-bottom: 14px; }
.admin-card h3 { font-size: 14.5px; font-weight: 700; }
.admin-hint { font-size: 12.5px; color: var(--text-3); margin-bottom: 14px; }

.form-input {
  width: 100%; padding: 10px 14px; border-radius: 8px; font-size: 14px;
  background: var(--bg-soft); border: 1px solid var(--line); color: var(--text-1);
  outline: none; transition: border-color .15s;
}
.form-input:focus { border-color: var(--brand); background: var(--bg-panel); }
textarea.form-input { resize: vertical; line-height: 1.7; }
.form-grid { display: grid; gap: 10px; }
.form-grid.cols-4 { grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); }
.form-grid.cols-3 { grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); }
.btn-primary {
  padding: 10px 28px; border-radius: 8px; font-size: 14px; font-weight: 700;
  background: var(--text-1); color: var(--bg); transition: opacity .15s; width: fit-content;
}
.admin-login-card .btn-primary { width: 100%; margin-top: 14px; }
.btn-primary:hover { opacity: .85; }
.btn-primary:disabled { opacity: .5; cursor: not-allowed; }

.admin-table { width: 100%; border-collapse: collapse; font-size: 13.5px; }
.admin-table th { text-align: left; padding: 10px 12px; font-size: 12px; color: var(--text-3); font-weight: 600; border-bottom: 1px solid var(--line-strong); white-space: nowrap; }
.admin-table td { padding: 11px 12px; border-bottom: 1px solid var(--line); vertical-align: top; }
.admin-table tr:hover td { background: var(--bg-soft); }
.t-link { color: var(--brand); } .t-danger { color: var(--down); } .t-ok { color: var(--up); }
.result-pre { margin-top: 12px; font-size: 12px; background: var(--bg-soft); border-radius: 8px; padding: 12px; overflow-x: auto; white-space: pre-wrap; }
.admin-2col { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; margin-bottom: 20px; }
.admin-sub-card { border: 1px solid var(--line); border-radius: 10px; padding: 16px; }
.radio-row { display: flex; gap: 16px; flex-wrap: wrap; font-size: 13.5px; margin: 12px 0; }
.radio-row label { display: flex; align-items: center; gap: 5px; cursor: pointer; }
.admin-section { margin-bottom: 28px; }
.admin-section-title { font-size: 15px; font-weight: 700; margin: 0 0 14px; display: flex; align-items: center; gap: 6px; }
.admin-section-title i { color: var(--brand); font-size: 13px; }
.form-stack { display: grid; gap: 12px; margin-top: 12px; }
.table-wrap { overflow-x: auto; }
.cell-title { max-width: 320px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.cell-nowrap { white-space: nowrap; }
.t-brand { color: var(--brand); }
.t-muted { color: var(--text-3); }
.check-label { display: flex; align-items: center; gap: 6px; font-size: 13.5px; cursor: pointer; }
.mono { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size: 12.5px; }
.empty-cell { text-align: center; color: var(--text-3); padding: 28px 0 !important; }
.admin-table button { background: none; border: none; cursor: pointer; font-size: 13px; padding: 0; font-family: inherit; }

/* ============ 响应式 ============ */
@media (max-width: 1024px) {
  /* 移动端：快讯主内容优先展示，侧栏组件收纳到内容之后（用户进来先看到有价值的快讯流） */
  .home-grid { grid-template-columns: 1fr; gap: 24px; }
  /* 顶部头条区单列：Hero 在上，重要快讯在下 */
  .top-grid { grid-template-columns: 1fr; gap: 14px; }
  .top-main .hero-card { height: auto; }
  .top-main .hero-section > a { justify-content: flex-start; }
  .nf-list { max-height: 400px; }
  /* 侧栏改为两列小卡（平板），充分利用空间 */
  .home-sidebar { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; align-items: start; }
}
@media (max-width: 768px) {
  .main-nav { display: none; }
  .mobile-only { display: inline-flex; }
  .search-box { width: 120px; }
  .search-box:focus-within { width: 150px; }
  .search-dropdown { width: 300px; right: -60px; }
  .header-inner { gap: 10px; padding: 0 14px; }
  .page-main { padding: 16px 14px 44px; }
  .feed-thumb { width: 110px; height: 74px; }
  .feed-title { font-size: 15.5px; }
  .feed-summary { display: none; }
  .hero-card { padding: 16px 16px; }
  .hero-title { font-size: 17px; -webkit-line-clamp: 3; }
  .hero-desc { font-size: 13px; }
  .hero-grid { grid-template-columns: 1fr; }
  .hero-img { display: none; }
  .top-section { margin-bottom: 20px; }
  .hot-flash-card { max-height: 236px; overflow-y: auto; }
  .art-h1 { font-size: 22px; }
  .art-body { font-size: 15.5px; }
  .admin-2col { grid-template-columns: 1fr; }
  .footer-meta { text-align: left; }
  /* 手机：侧栏恢复单列 */
  .home-sidebar { grid-template-columns: 1fr; }
  /* 快讯时间轴移动端字号与间距压缩，信息密度更高 */
  .nf-timeline .nf-title { font-size: 15px; }
  .nf-timeline .nf-body { font-size: 13.5px; }
  .nf-timeline .nf-item { padding-bottom: 16px; }
  .nf-img { max-width: 100%; }
  .nf-img img { max-height: 200px; }
  /* 顶部头条区：重要快讯只显示前 4 条高度，其余滚动 */
  .hot-flash-card { max-height: 240px; overflow-y: auto; }
  .ticker-strip { padding: 6px 14px; gap: 20px; }
  .section-head h2 { font-size: 16px; }
  .nf-filters button, .art-filters button { padding: 5px 13px; font-size: 13px; }
  .mini-art-row { display: none; } /* 手机隐藏小文章卡，信息聚焦 */
}

/* ============ 首页 v2：快讯主体布局 ============ */
.top-section { margin-bottom: 28px; }
.top-grid { display: grid; grid-template-columns: minmax(0, 1fr) 340px; gap: 20px; align-items: stretch; }
.top-main { display: flex; flex-direction: column; gap: 14px; min-width: 0; }
.top-main .hero-card { margin-bottom: 0; height: 100%; }
.top-main .hero-section { margin-bottom: 0; flex: 1; display: flex; flex-direction: column; }
.top-main .hero-section > a { flex: 1; display: flex; flex-direction: column; justify-content: center; }
.mini-art-row { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }
.top-side { display: flex; flex-direction: column; gap: 12px; }
.hot-flash-card {
  background: var(--card); border: 1px solid var(--border); border-radius: 12px;
  padding: 14px 16px; flex: 1;
}
.hot-flash-head {
  font-size: 13px; font-weight: 800; color: #f0442e; margin-bottom: 10px;
  display: flex; align-items: center; gap: 6px;
}
.hot-flash-item {
  display: flex; gap: 10px; padding: 7px 0; text-decoration: none;
  border-bottom: 1px dashed var(--border); align-items: baseline;
}
.hot-flash-item:last-child { border-bottom: none; }
.hf-time { font-size: 11px; color: var(--text-3); white-space: nowrap; flex-shrink: 0; }
.hf-title {
  font-size: 13px; color: var(--text-1); font-weight: 600; line-height: 1.5;
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}
.hot-flash-item:hover .hf-title { color: var(--brand); }
.mini-art-card {
  background: var(--card); border: 1px solid var(--border); border-radius: 12px;
  padding: 12px 16px; text-decoration: none; display: flex; flex-direction: column; gap: 5px;
}
.mini-art-card:hover { border-color: var(--brand); }
.mini-art-cat { font-size: 11px; color: var(--brand); font-weight: 700; }
.mini-art-title {
  font-size: 14px; font-weight: 700; color: var(--text-1); line-height: 1.45;
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}
.mini-art-meta { font-size: 11px; color: var(--text-3); }
.nf-live-hint {
  font-size: 11px; font-weight: 600; color: var(--up); background: color-mix(in srgb, var(--up) 12%, transparent);
  padding: 2px 8px; border-radius: 20px; margin-left: 8px;
}
.nf-main-section .section-head { margin-bottom: 14px; display: flex; align-items: center; justify-content: space-between; }
.nf-main-section .section-head h2 { display: flex; align-items: center; gap: 8px; font-size: 18px; font-weight: 800; }
/* 24h 热门 */
.hot-news-list { display: flex; flex-direction: column; }
.hot-news-item {
  display: flex; gap: 10px; align-items: baseline; padding: 8px 0;
  text-decoration: none; border-bottom: 1px dashed var(--border);
}
.hot-news-item:last-child { border-bottom: none; }
.hot-news-item .hot-rank {
  font-size: 12px; font-weight: 800; color: var(--text-3); width: 18px; text-align: center; flex-shrink: 0;
}
.hot-news-item .hot-rank.r1 { color: #f0442e; }
.hot-news-item .hot-rank.r2 { color: #f77a2e; }
.hot-news-item .hot-rank.r3 { color: #f0b429; }
.hot-news-title {
  font-size: 13px; color: var(--text-1); font-weight: 600; line-height: 1.5; flex: 1;
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}
.hot-news-item:hover .hot-news-title { color: var(--brand); }
.hot-news-views { font-size: 11px; color: var(--text-3); white-space: nowrap; flex-shrink: 0; }
/* 侧栏深度精选 */
.side-art-item {
  display: flex; flex-direction: column; gap: 3px; padding: 9px 0;
  text-decoration: none; border-bottom: 1px dashed var(--border);
}
.side-art-title { font-size: 13px; font-weight: 600; color: var(--text-1); line-height: 1.5; }
.side-art-item:hover .side-art-title { color: var(--brand); }
.side-art-meta { font-size: 11px; color: var(--text-3); }
/* 相关快讯（详情页内链） */
.related-section { margin-top: 32px; border-top: 1px solid var(--border); padding-top: 20px; }
.related-title { font-size: 16px; font-weight: 800; margin: 0 0 12px; }
.related-list { display: flex; flex-direction: column; }
.related-item {
  display: flex; justify-content: space-between; gap: 16px; align-items: baseline;
  padding: 9px 0; text-decoration: none; border-bottom: 1px dashed var(--border);
}
.related-item-title { font-size: 14px; font-weight: 600; color: var(--text-1); line-height: 1.5; }
.related-item:hover .related-item-title { color: var(--brand); }
.related-item-time { font-size: 12px; color: var(--text-3); white-space: nowrap; }
@media (max-width: 960px) {
  .top-grid { grid-template-columns: 1fr; }
  .mini-art-row { grid-template-columns: 1fr; }
}

/* ============ 财经日历页（金十式） ============ */
.cal-page { max-width: 100%; }
.cal-tz { font-size: 12px; color: var(--text-3); }
.cal-days { display: flex; gap: 8px; margin: 14px 0 10px; overflow-x: auto; padding-bottom: 4px; }
.cal-day {
  display: flex; flex-direction: column; align-items: center; gap: 2px;
  min-width: 64px; padding: 8px 10px; border-radius: 10px; text-decoration: none;
  background: var(--card); border: 1px solid var(--border); flex-shrink: 0;
}
.cal-day.active { background: var(--brand); border-color: var(--brand); }
.cal-day.active .cal-day-label, .cal-day.active .cal-day-date { color: #fff; }
.cal-day-label { font-size: 12px; font-weight: 700; color: var(--text-1); }
.cal-day-date { font-size: 11px; color: var(--text-3); }
.cal-markets { display: flex; gap: 8px; margin-bottom: 14px; flex-wrap: wrap; }
.cal-market {
  font-size: 13px; padding: 5px 14px; border-radius: 20px; text-decoration: none;
  background: var(--card); border: 1px solid var(--border); color: var(--text-2); font-weight: 600;
}
.cal-market.active { background: var(--text-1); color: var(--bg); border-color: var(--text-1); }
.cal-table-wrap { background: var(--card); border: 1px solid var(--border); border-radius: 12px; overflow-x: auto; }
.cal-table { width: 100%; border-collapse: collapse; font-size: 13.5px; }
.cal-table th {
  text-align: left; padding: 12px 14px; font-size: 12px; color: var(--text-3);
  border-bottom: 1px solid var(--border); white-space: nowrap; font-weight: 700;
}
.cal-table td { padding: 12px 14px; border-bottom: 1px solid var(--line); vertical-align: top; }
.cal-table tr:last-child td { border-bottom: none; }
.cal-time { font-variant-numeric: tabular-nums; color: var(--text-2); white-space: nowrap; font-weight: 600; }
.cal-imp { font-size: 11px; padding: 2px 8px; border-radius: 4px; font-weight: 700; white-space: nowrap; }
.cal-imp.imp3 { background: rgba(240,68,46,.12); color: #f0442e; }
.cal-imp.imp2 { background: rgba(255,153,0,.12); color: #e08600; }
.cal-imp.imp1 { background: var(--line); color: var(--text-3); }
.cal-title-cell { font-weight: 600; color: var(--text-1); line-height: 1.5; }
.cal-type-tag {
  font-size: 11px; padding: 1px 6px; border-radius: 4px; margin-right: 6px;
  background: rgba(59,111,255,.1); color: var(--brand); font-weight: 700;
}
.cal-desc { font-size: 12.5px; color: var(--text-3); margin-top: 4px; font-weight: 400; }
.cal-num { font-variant-numeric: tabular-nums; color: var(--text-2); white-space: nowrap; }
.cal-actual { font-weight: 700; color: var(--text-1); }
.cal-row.imp-3 .cal-title-cell { color: #d3382a; }
.cal-empty { padding: 60px 20px; text-align: center; color: var(--text-3); }
.cal-empty i { font-size: 36px; margin-bottom: 12px; display: block; opacity: .4; }
.cal-note { font-size: 12px; color: var(--text-3); margin-top: 12px; line-height: 1.6; }
@media (max-width: 720px) {
  .cal-table th, .cal-table td { padding: 10px 8px; }
  .cal-th-num, .cal-num { display: none; }
}

/* ============ v5.1 分享栏（快讯/文章详情页） ============ */
.share-bar {
  display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
  margin: 18px 0 6px; padding-top: 16px; border-top: 1px solid var(--line);
}
.share-btn {
  display: inline-flex; align-items: center; gap: 6px;
  padding: 7px 14px; border-radius: 20px; border: 1px solid var(--line);
  background: var(--bg-2, transparent); color: var(--text-2); font-size: 13px;
  cursor: pointer; transition: all .15s; font-family: inherit;
}
.share-btn:hover { border-color: var(--brand); color: var(--brand); }
.share-btn.bookmarked { border-color: #f5a623; color: #f5a623; background: rgba(245,166,35,.08); }
.share-btn.copied { border-color: #16a34a; color: #16a34a; }

/* ============ v5.1 币种聚合页 /coin/:symbol ============ */
.coin-page { padding: 8px 0 30px; }
.coin-head { padding: 22px 0 18px; border-bottom: 1px solid var(--line); margin-bottom: 20px; }
.coin-title-row { display: flex; align-items: baseline; gap: 18px; flex-wrap: wrap; }
.coin-symbol { font-size: 34px; font-weight: 800; letter-spacing: .5px; color: var(--text-1); margin: 0; }
.coin-price-box { display: flex; align-items: baseline; gap: 10px; }
.coin-price { font-size: 26px; font-weight: 700; font-variant-numeric: tabular-nums; color: var(--text-1); }
.coin-chg { font-size: 15px; font-weight: 700; padding: 2px 8px; border-radius: 5px; }
.coin-chg.up { color: #16a34a; background: rgba(22,163,74,.1); }
.coin-chg.down { color: #f0442e; background: rgba(240,68,46,.1); }
.coin-price-loading { font-size: 14px; color: var(--text-3); }
.coin-sub { margin: 8px 0 0; font-size: 13.5px; color: var(--text-3); }

/* 热门币种侧栏 */
.hot-coin-links { display: flex; flex-wrap: wrap; gap: 8px; }
.hot-coin-link {
  padding: 6px 14px; border-radius: 16px; border: 1px solid var(--line);
  font-size: 13px; font-weight: 600; color: var(--text-2); text-decoration: none;
  transition: all .15s;
}
.hot-coin-link:hover { border-color: var(--brand); color: var(--brand); }
.hot-coin-link.active { background: var(--text-1); color: var(--bg-1, #fff); border-color: var(--text-1); }

/* 币种标签可点击 */
.tag-coin { cursor: pointer; }
.tag-coin:hover { text-decoration: underline; }

/* ============ v5.1 我的收藏页 /bookmarks ============ */
.bookmarks-page { max-width: 760px; margin: 0 auto; padding: 20px 0 40px; }
.bm-list { display: flex; flex-direction: column; }
.bm-item {
  display: flex; align-items: center; gap: 12px;
  padding: 14px 4px; border-bottom: 1px solid var(--line);
}
.bm-kind {
  flex-shrink: 0; font-size: 11px; font-weight: 700; padding: 2px 8px; border-radius: 4px;
  background: rgba(59,111,255,.1); color: var(--brand);
}
.bm-kind.kind-art { background: rgba(245,166,35,.12); color: #d08000; }
.bm-title { flex: 1; font-size: 14.5px; font-weight: 600; color: var(--text-1); text-decoration: none; line-height: 1.5; }
.bm-title:hover { color: var(--brand); }
.bm-del {
  flex-shrink: 0; background: none; border: none; cursor: pointer;
  color: var(--text-3); font-size: 14px; padding: 6px; border-radius: 6px;
}
.bm-del:hover { color: #f0442e; background: rgba(240,68,46,.08); }
.empty-hint { padding: 50px 20px; text-align: center; color: var(--text-3); font-size: 14px; }

@media (max-width: 720px) {
  .coin-symbol { font-size: 26px; }
  .coin-price { font-size: 20px; }
  .share-btn { padding: 6px 11px; font-size: 12.5px; }
}

/* ============ v7: 品牌 Logo 图片 ============ */
.logo-img { width: 36px; height: 36px; border-radius: 8px; object-fit: contain; display: block; }
.logo-img.small { width: 28px; height: 28px; border-radius: 6px; }
/* v10: 暗黑模式 Logo 变体（白底反转版，黑色方块在深色背景下会溶掉） */
[data-theme="dark"] .logo-img { content: url('/static/brand/logo-icon-dark.webp'); }

/* ============ v7: 快讯频道 Tab ============ */
.nf-channel-tabs { display: flex; gap: 6px; overflow-x: auto; padding: 4px 0 12px; scrollbar-width: none; }
.nf-channel-tabs::-webkit-scrollbar { display: none; }
.nf-ch-tab { flex-shrink: 0; padding: 6px 14px; border-radius: 999px; font-size: 13px; font-weight: 600; color: var(--text-2); background: var(--bg-soft); border: 1px solid var(--line); text-decoration: none; transition: all .15s; }
.nf-ch-tab:hover { color: var(--brand); border-color: var(--brand); }
.nf-ch-tab.active { color: #fff; background: var(--text-1); border-color: var(--text-1); }

/* ============ v7: 数据中心 ============ */
.data-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(340px, 1fr)); gap: 18px; }
.data-card { background: var(--bg); border: 1px solid var(--line); border-radius: 12px; padding: 16px; }
.data-card-head { display: flex; justify-content: space-between; align-items: center; margin-bottom: 10px; }
.data-card-head h3 { margin: 0; font-size: 14.5px; font-weight: 700; }
.data-card-head h3 i { color: var(--brand); margin-right: 6px; font-size: 13px; }
.data-updated { font-size: 11.5px; color: var(--text-3); }
.data-card-body { position: relative; height: 210px; }
.data-card-body canvas { width: 100% !important; height: 210px !important; }
.data-empty { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; color: var(--text-3); font-size: 13px; gap: 8px; flex-direction: column; }
.data-empty[hidden] { display: none; } /* 修复：显式 display:flex 会覆盖 hidden 属性，必须补回 */
.data-empty .retry-btn { border: 1px solid var(--line); background: var(--bg); color: var(--text-2); font-size: 12px; padding: 5px 14px; border-radius: 999px; cursor: pointer; }
.data-empty .retry-btn:hover { border-color: var(--brand); color: var(--brand); }
/* 数据卡骨架屏（加载中动画） */
.data-skeleton { position: absolute; inset: 0; display: flex; flex-direction: column; justify-content: flex-end; gap: 0; padding: 12px 8px 8px; }
.data-skeleton[hidden] { display: none; }
.data-skeleton .sk-bars { display: flex; align-items: flex-end; gap: 6px; height: 70%; }
.data-skeleton .sk-bars i { flex: 1; background: linear-gradient(90deg, var(--bg-soft) 25%, var(--line) 50%, var(--bg-soft) 75%); background-size: 200% 100%; animation: sk-shine 1.4s ease infinite; border-radius: 3px 3px 0 0; }
.data-skeleton .sk-label { margin-top: 10px; text-align: center; color: var(--text-3); font-size: 12.5px; }
.data-skeleton .sk-label i.fas { margin-right: 6px; color: var(--brand); }
@keyframes sk-shine { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } }

/* ============ v7: 日历影响回测卡 + 倒计时 ============ */
.cal-impact { margin-top: 8px; padding: 10px 12px; background: var(--bg-soft); border: 1px solid var(--line); border-radius: 8px; font-size: 12.5px; }
.cal-impact-head { font-weight: 700; color: var(--brand); margin-bottom: 6px; font-size: 12px; }
.cal-impact-stats { display: flex; gap: 16px; flex-wrap: wrap; margin-bottom: 6px; color: var(--text-2); }
.cal-impact-stats b { color: var(--text-1); font-variant-numeric: tabular-nums; }
.cal-impact-case { color: var(--text-3); line-height: 1.55; margin-top: 3px; }
.cal-countdown { display: block; font-size: 11px; margin-top: 2px; }
.cal-countdown.soon { color: #d97706; font-weight: 600; }
.cal-countdown.live { color: var(--down); font-weight: 700; }
.tag-unlock { background: rgba(139,92,246,.12); color: #8b5cf6; }

/* ============ v7: 管理后台设置中心 ============ */
.setting-row { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 8px 0; border-bottom: 1px dashed var(--line); }
.setting-label { font-size: 13.5px; font-weight: 600; display: flex; flex-direction: column; }
.setting-label small { font-weight: 400; color: var(--text-3); font-size: 11.5px; }
.setting-switch { width: 40px; height: 22px; appearance: none; background: var(--line-strong, #ccc); border-radius: 999px; position: relative; cursor: pointer; transition: background .15s; flex-shrink: 0; }
.setting-switch::after { content: ''; position: absolute; top: 2px; left: 2px; width: 18px; height: 18px; border-radius: 50%; background: #fff; transition: left .15s; }
.setting-switch:checked { background: var(--brand); }
.setting-switch:checked::after { left: 20px; }
.setting-num { display: flex; flex-direction: column; gap: 4px; font-size: 12.5px; color: var(--text-2); margin: 6px 0; }
.channel-row .form-input { padding: 4px 8px; font-size: 13px; }

@media (max-width: 720px) {
  .data-grid { grid-template-columns: 1fr; }
  .nf-channel-tabs { padding-bottom: 10px; }
}

/* ============ 数据中心：信号灯面板（抄底逃顶指标） ============ */
.data-card-body.signal-mode { height: auto; min-height: 120px; max-height: 300px; overflow-y: auto; }
.data-card-body.signal-mode canvas { display: none !important; height: 0 !important; }
.signal-panel { display: flex; flex-direction: column; gap: 4px; }
.signal-row { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 5px 8px; border-radius: 8px; background: var(--bg-soft); cursor: help; }
.signal-name { font-size: 12.5px; color: var(--text-2); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.signal-badge { flex-shrink: 0; font-size: 11.5px; font-weight: 700; padding: 2px 10px; border-radius: 999px; }
.signal-badge.sig-buy { background: rgba(22,163,74,.12); color: #16a34a; }
.signal-badge.sig-sell { background: rgba(240,68,46,.12); color: #f0442e; }
.signal-badge.sig-hold { background: var(--line); color: var(--text-3); }
.data-updated.ok { color: var(--text-3); }

/* ============ 分享栏 SVG 图标与弹层 ============ */
.share-btn .s-ic { display: inline-flex; align-items: center; vertical-align: -2px; }
.share-btn .s-ic svg { display: block; }
.share-modal { position: fixed; inset: 0; z-index: 1000; display: flex; align-items: center; justify-content: center; }
.share-modal-mask { position: absolute; inset: 0; background: rgba(0,0,0,.55); backdrop-filter: blur(2px); }
.share-modal-card { position: relative; background: var(--bg); border: 1px solid var(--line); border-radius: 16px; padding: 26px 28px 24px; max-width: 92vw; width: 420px; text-align: center; box-shadow: 0 20px 60px rgba(0,0,0,.3); max-height: 88vh; overflow-y: auto; }
.share-modal-close { position: absolute; top: 10px; right: 14px; border: none; background: none; font-size: 26px; line-height: 1; color: var(--text-3); cursor: pointer; }
.share-modal-close:hover { color: var(--text-1); }
.share-modal-title { margin: 0 0 18px; font-size: 17px; font-weight: 800; }
.share-qr { border-radius: 12px; border: 1px solid var(--line); }
.share-modal-hint { color: var(--text-3); font-size: 12.5px; margin: 14px 0 0; }
.poster-holder { min-height: 200px; display: flex; align-items: center; justify-content: center; }
.poster-loading { color: var(--text-3); font-size: 13px; padding: 60px 0; }
.poster-img { max-width: 100%; border-radius: 12px; border: 1px solid var(--line); }
.poster-actions { margin-top: 14px; }
.poster-dl { display: inline-block; text-decoration: none; padding: 9px 26px; border-radius: 999px; }

/* ============ 快讯多空投票条 ============ */
.vote-bar { margin-top: 22px; border: 1px solid var(--line); border-radius: 12px; padding: 16px 18px; background: var(--bg-soft); }
.vote-head { display: flex; justify-content: space-between; align-items: center; margin-bottom: 12px; }
.vote-title { font-size: 14px; font-weight: 700; }
.vote-total { font-size: 12px; color: var(--text-3); }
.vote-actions { display: flex; gap: 10px; }
.vote-btn { flex: 1; display: inline-flex; align-items: center; justify-content: center; gap: 6px; padding: 9px 0; border-radius: 10px; border: 1.5px solid var(--line); background: var(--bg); font-size: 13.5px; font-weight: 700; cursor: pointer; color: var(--text-2); transition: all .15s; }
.vote-btn em { font-style: normal; font-weight: 600; font-size: 12px; color: var(--text-3); }
.vote-btn.vote-bull:hover:not(:disabled) { border-color: #16a34a; color: #16a34a; }
.vote-btn.vote-bear:hover:not(:disabled) { border-color: #f0442e; color: #f0442e; }
.vote-btn:disabled { cursor: default; opacity: .65; }
.vote-btn.my-vote.vote-bull { border-color: #16a34a; color: #16a34a; background: rgba(22,163,74,.08); opacity: 1; }
.vote-btn.my-vote.vote-bear { border-color: #f0442e; color: #f0442e; background: rgba(240,68,46,.08); opacity: 1; }
.vote-meter { margin-top: 12px; height: 8px; border-radius: 999px; background: rgba(240,68,46,.25); overflow: hidden; }
.vote-meter[hidden] { display: none; }
.vote-meter-bull { display: block; height: 100%; background: #16a34a; border-radius: 999px 0 0 999px; transition: width .3s; }
.vote-pct { display: flex; justify-content: space-between; margin-top: 6px; font-size: 12px; font-weight: 700; }
.vote-pct[hidden] { display: none; }
.vote-pct .t-bull { color: #16a34a; }
.vote-pct .t-bear { color: #f0442e; }

/* ============ 原创角标 + 币圈热搜榜 ============ */
.tag-original { display: inline-block; vertical-align: 2px; font-size: 11px; font-weight: 800; line-height: 1; padding: 3px 7px; border-radius: 5px; background: linear-gradient(135deg, #16a34a, #0d8a3c); color: #fff; letter-spacing: 1px; }
.hot-topics-list { display: flex; flex-direction: column; gap: 2px; }
.hot-topic-item { display: flex; align-items: center; gap: 8px; padding: 7px 6px; border-radius: 8px; text-decoration: none; color: var(--text-1); }
.hot-topic-item:hover { background: var(--bg-soft); }
.hot-topic-coin { font-weight: 800; font-size: 13.5px; min-width: 46px; }
.hot-topic-meta { flex: 1; font-size: 11.5px; color: var(--text-3); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.hot-topic-heat { font-size: 11.5px; font-weight: 700; color: #f0442e; }
.hot-topic-heat i { font-size: 10px; margin-right: 3px; }

/* ============ 开放平台 /open ============ */
.open-portal { max-width: 1080px; margin: 0 auto; padding: 0 16px 60px; }
.open-hero { text-align: center; padding: 56px 16px 40px; }
.open-hero h1 { font-size: 34px; font-weight: 800; margin-bottom: 14px; }
.open-hero h1 .grad { background: linear-gradient(120deg, var(--brand), #0d8a3c); -webkit-background-clip: text; background-clip: text; color: transparent; }
.open-hero p { font-size: 15px; color: var(--text-2); max-width: 620px; margin: 0 auto 24px; line-height: 1.8; }
.open-hero-actions { display: flex; gap: 12px; justify-content: center; flex-wrap: wrap; }
.open-stats { display: flex; justify-content: center; gap: 40px; margin-top: 36px; flex-wrap: wrap; }
.open-stat { text-align: center; }
.open-stat b { display: block; font-size: 24px; font-weight: 800; color: var(--brand); }
.open-stat span { font-size: 12.5px; color: var(--text-3); }

.open-plans { margin: 30px 0 50px; }
.plan-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px; }
.plan-card { position: relative; border: 1.5px solid var(--line); border-radius: 16px; padding: 28px 24px; background: var(--bg); display: flex; flex-direction: column; transition: transform .15s, box-shadow .15s; }
.plan-card:hover { transform: translateY(-3px); box-shadow: 0 12px 32px rgba(0,0,0,.08); }
.plan-card.plan-hot { border-color: var(--brand); box-shadow: 0 6px 24px rgba(22,163,74,.12); }
.plan-badge { position: absolute; top: -12px; right: 20px; background: linear-gradient(135deg, var(--brand), #0d8a3c); color: #fff; font-size: 11.5px; font-weight: 800; padding: 4px 12px; border-radius: 999px; }
.plan-name { font-size: 17px; font-weight: 800; margin-bottom: 6px; }
.plan-price { font-size: 30px; font-weight: 800; margin: 10px 0 4px; }
.plan-price small { font-size: 13px; font-weight: 600; color: var(--text-3); }
.plan-desc { font-size: 12.5px; color: var(--text-3); margin-bottom: 16px; }
.plan-feats { list-style: none; padding: 0; margin: 0 0 22px; flex: 1; }
.plan-feats li { font-size: 13.5px; color: var(--text-2); padding: 6px 0; display: flex; align-items: center; gap: 8px; }
.plan-feats li i { color: var(--brand); font-size: 12px; width: 16px; }
.plan-cta { display: block; text-align: center; padding: 11px 0; border-radius: 10px; font-size: 14px; font-weight: 700; text-decoration: none; border: 1.5px solid var(--line); color: var(--text-1); transition: all .15s; }
.plan-cta:hover { border-color: var(--brand); color: var(--brand); }
.plan-hot .plan-cta { background: var(--brand); border-color: var(--brand); color: #fff; }
.plan-hot .plan-cta:hover { background: #0d8a3c; color: #fff; }

.open-docs { margin-top: 20px; }
.open-docs h2 { font-size: 22px; font-weight: 800; margin: 40px 0 8px; }
.open-docs h3 { font-size: 16px; font-weight: 700; margin: 28px 0 10px; }
.open-docs p { font-size: 14px; color: var(--text-2); line-height: 1.8; margin: 8px 0; }
.api-endpoint { border: 1px solid var(--line); border-radius: 12px; margin: 16px 0; overflow: hidden; }
.api-endpoint-head { display: flex; align-items: center; gap: 10px; padding: 12px 16px; background: var(--bg-soft); }
.api-method { font-size: 11.5px; font-weight: 800; padding: 3px 9px; border-radius: 6px; background: var(--brand); color: #fff; letter-spacing: .5px; }
.api-path { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 13.5px; font-weight: 600; }
.api-endpoint-body { padding: 14px 16px; font-size: 13.5px; color: var(--text-2); line-height: 1.7; }
.api-params { width: 100%; border-collapse: collapse; margin: 10px 0; font-size: 12.5px; }
.api-params th, .api-params td { border: 1px solid var(--line); padding: 7px 10px; text-align: left; }
.api-params th { background: var(--bg-soft); font-weight: 700; }
.api-params td code { font-family: ui-monospace, Menlo, monospace; font-size: 12px; color: var(--brand); }
.api-code { background: #0d1117; color: #c9d1d9; border-radius: 10px; padding: 14px 16px; font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 12.5px; line-height: 1.65; overflow-x: auto; margin: 10px 0; white-space: pre; }
[data-theme="dark"] .api-code { background: #161b22; border: 1px solid var(--line); }
.code-tabs { display: flex; gap: 8px; margin: 14px 0 0; }
.code-tab { font-size: 12.5px; font-weight: 700; padding: 5px 14px; border-radius: 8px 8px 0 0; border: 1px solid var(--line); border-bottom: none; background: var(--bg-soft); color: var(--text-3); cursor: pointer; }
.code-tab.active { background: #0d1117; color: #fff; border-color: #0d1117; }

/* ============ 用户中心 /account ============ */
.auth-panel { max-width: 420px; margin: 60px auto; padding: 0 16px; }
.auth-card { border: 1px solid var(--line); border-radius: 16px; padding: 32px 28px; background: var(--bg); box-shadow: 0 8px 30px rgba(0,0,0,.05); }
.auth-card h2 { font-size: 20px; font-weight: 800; text-align: center; margin-bottom: 22px; }
.auth-card .form-input { width: 100%; margin-bottom: 14px; }
.auth-card .btn-primary { width: 100%; padding: 11px 0; font-size: 14.5px; }
.auth-switch { text-align: center; margin-top: 16px; font-size: 13px; color: var(--text-3); }
.auth-switch a, .link-btn { color: var(--brand); font-weight: 700; text-decoration: none; background: none; border: none; cursor: pointer; font-size: 13px; padding: 0; }
.link-btn:hover { text-decoration: underline; }
.link-btn.danger { color: #f0442e; }

.account-wrap { max-width: 1080px; margin: 0 auto; padding: 24px 16px 60px; }
.account-head { display: flex; justify-content: space-between; align-items: center; margin-bottom: 22px; flex-wrap: wrap; gap: 12px; }
.account-head h1 { font-size: 22px; font-weight: 800; }
.user-email-badge { display: inline-flex; align-items: center; gap: 8px; font-size: 13px; color: var(--text-2); background: var(--bg-soft); border: 1px solid var(--line); border-radius: 999px; padding: 6px 14px; }
.user-email-badge i { color: var(--brand); }
.account-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; }
.account-card { border: 1px solid var(--line); border-radius: 14px; padding: 22px; background: var(--bg); }
.account-card.span2 { grid-column: 1 / -1; }
.account-card h3 { font-size: 15.5px; font-weight: 800; margin-bottom: 14px; display: flex; align-items: center; gap: 8px; }
.account-card h3 i { color: var(--brand); }

.key-list { display: flex; flex-direction: column; gap: 10px; }
.key-item { border: 1px solid var(--line); border-radius: 10px; padding: 13px 15px; display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
.key-item.key-off { opacity: .55; }
.key-prefix { font-family: ui-monospace, Menlo, monospace; font-size: 13px; font-weight: 700; }
.key-plan { font-size: 11px; font-weight: 800; padding: 2px 9px; border-radius: 999px; background: rgba(22,163,74,.1); color: var(--brand); text-transform: uppercase; }
.key-plan.pro { background: rgba(59,130,246,.12); color: #3b82f6; }
.key-plan.enterprise { background: rgba(168,85,247,.12); color: #a855f7; }
.key-dead { font-size: 11px; font-weight: 700; color: #f0442e; }
.key-meta { flex: 1; font-size: 12px; color: var(--text-3); min-width: 160px; }
.key-item .key-actions { display: flex; gap: 10px; }

.btn-sm { font-size: 12.5px; font-weight: 700; padding: 6px 14px; border-radius: 8px; border: 1px solid var(--line); background: var(--bg); color: var(--text-2); cursor: pointer; transition: all .15s; }
.btn-sm:hover { border-color: var(--brand); color: var(--brand); }
.btn-sm.primary { background: var(--brand); border-color: var(--brand); color: #fff; }
.btn-sm.primary:hover { background: #0d8a3c; }

.plan-buy { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; }
.plan-buy select { padding: 8px 12px; border: 1px solid var(--line); border-radius: 8px; background: var(--bg); color: var(--text-1); font-size: 13px; }

.pay-panel { margin-top: 16px; }
.pay-box { border: 1.5px dashed var(--brand); border-radius: 12px; padding: 20px; background: rgba(22,163,74,.04); }
.pay-box h4 { font-size: 14.5px; font-weight: 800; margin-bottom: 12px; }
.pay-amount { font-size: 26px; font-weight: 800; color: var(--brand); margin: 8px 0; font-family: ui-monospace, Menlo, monospace; }
.pay-amount small { font-size: 13px; color: var(--text-3); font-weight: 600; }
.pay-warn { font-size: 12.5px; color: #d97706; background: rgba(217,119,6,.08); border: 1px solid rgba(217,119,6,.25); border-radius: 8px; padding: 9px 12px; margin: 10px 0; line-height: 1.6; }
.pay-addr-row { display: flex; align-items: center; gap: 10px; margin: 10px 0; flex-wrap: wrap; }
.pay-addr-row code { font-family: ui-monospace, Menlo, monospace; font-size: 12.5px; background: var(--bg-soft); border: 1px solid var(--line); border-radius: 8px; padding: 8px 12px; word-break: break-all; flex: 1; min-width: 200px; }
.pay-qr { display: flex; justify-content: center; margin: 14px 0; }
.pay-qr canvas, .pay-qr img { border: 8px solid #fff; border-radius: 10px; }
.pay-status { display: flex; align-items: center; gap: 8px; font-size: 13.5px; font-weight: 700; margin-top: 12px; }
.pay-status.waiting { color: #d97706; }
.pay-status.paid { color: var(--brand); }
.pay-status.expired { color: #f0442e; }

.wh-form { display: flex; flex-direction: column; gap: 10px; margin-top: 12px; }
.wh-form .form-input { width: 100%; }
.wh-row { display: flex; gap: 10px; flex-wrap: wrap; }
.wh-row .form-input, .wh-row select { flex: 1; min-width: 140px; }
.wh-row select { padding: 9px 12px; border: 1px solid var(--line); border-radius: 8px; background: var(--bg); color: var(--text-1); font-size: 13px; }

.usage-bar { height: 7px; border-radius: 999px; background: var(--bg-soft); overflow: hidden; margin-top: 6px; width: 100%; }
.usage-bar i { display: block; height: 100%; background: var(--brand); border-radius: 999px; }

@media (max-width: 860px) {
  .plan-grid { grid-template-columns: 1fr; }
  .account-grid { grid-template-columns: 1fr; }
  .open-hero h1 { font-size: 26px; }
  .open-hero { padding: 36px 12px 28px; }
  .open-stats { gap: 24px; }
  .account-head h1 { font-size: 19px; }
  .key-item { padding: 11px 12px; }
  .pay-addr-row code { font-size: 11.5px; }
  .auth-panel { margin: 36px auto; }
  .auth-card { padding: 26px 20px; }
}

/* ---- 适配 pages-open.ts 实际模板结构 ---- */
.open-plans h2, .open-docs h2 { text-align: center; font-size: 22px; font-weight: 800; margin: 10px 0 26px; }
.open-docs h2 { text-align: left; }
.plan-card h3 { font-size: 17px; font-weight: 800; margin-bottom: 4px; }
.plan-price em { font-style: normal; font-size: 13px; font-weight: 600; color: var(--text-3); }
.plan-card ul { list-style: none; padding: 0; margin: 14px 0 22px; flex: 1; }
.plan-card ul li { font-size: 13.5px; color: var(--text-2); padding: 6px 0 6px 22px; position: relative; }
.plan-card ul li::before { content: '\2713'; position: absolute; left: 0; color: var(--brand); font-weight: 800; }
.plan-btn { display: block; text-align: center; }
.open-plans .cal-note { text-align: center; margin-top: 18px; }
.api-ep-head { display: flex; align-items: center; gap: 10px; padding: 12px 16px; background: var(--bg-soft); }
.api-ep-desc { padding: 12px 16px !important; font-size: 13.5px; color: var(--text-2); margin: 0 !important; }
.open-docs code { font-family: ui-monospace, Menlo, monospace; font-size: 12.5px; background: var(--bg-soft); border: 1px solid var(--line); border-radius: 5px; padding: 1px 6px; }
.api-code code { background: none; border: none; padding: 0; }

/* ============ v11: Web Push 铃铛按钮 ============ */
#push-toggle.push-on { color: var(--brand); }
#push-toggle.push-on:hover { color: #0d8a3c; }

/* ============ v13.1 用户系统登录/注册页美化 ============ */
.auth-panel { max-width: 440px; margin: 48px auto 70px; padding: 0 16px; }
.auth-card { border: 1px solid var(--line); border-radius: 20px; padding: 36px 32px 28px; background: var(--bg);
  box-shadow: 0 12px 44px rgba(0,0,0,.08); }
.auth-logo { display: flex; align-items: center; justify-content: center; gap: 10px; margin-bottom: 20px; }
.auth-logo-mark { width: 40px; height: 40px; border-radius: 12px; background: linear-gradient(135deg, #111 0%, #444 100%);
  color: #fff; font-weight: 800; font-size: 19px; display: flex; align-items: center; justify-content: center; }
.auth-logo-text { font-size: 17px; font-weight: 800; letter-spacing: .5px; }
.auth-card h1 { font-size: 22px; font-weight: 800; text-align: center; margin: 0 0 6px; }
.auth-sub { text-align: center; color: var(--muted); font-size: 13px; margin: 0 0 22px; }
.auth-field { display: block; margin-bottom: 15px; }
.auth-label { display: block; font-size: 12.5px; font-weight: 600; color: var(--muted); margin-bottom: 6px; }
.auth-input-wrap { position: relative; display: flex; align-items: center; }
.auth-input-wrap > i { position: absolute; left: 13px; color: #aaa; font-size: 13px; pointer-events: none; }
.auth-input-wrap input { width: 100%; padding: 11px 42px 11px 38px; border: 1.5px solid var(--line); border-radius: 12px;
  font-size: 14px; background: var(--bg); color: var(--fg); transition: border-color .15s, box-shadow .15s; }
.auth-input-wrap input:focus { outline: none; border-color: #111; box-shadow: 0 0 0 3px rgba(0,0,0,.06); }
.auth-eye { position: absolute; right: 10px; background: none; border: none; color: #aaa; cursor: pointer; padding: 6px; font-size: 13px; }
.auth-eye:hover { color: var(--fg); }
.auth-submit { width: 100%; padding: 12px 0; border: none; border-radius: 12px; background: #111; color: #fff;
  font-size: 15px; font-weight: 700; cursor: pointer; transition: opacity .15s, transform .1s; margin-top: 4px; }
.auth-submit:hover { opacity: .88; } .auth-submit:active { transform: scale(.985); }
.auth-error { margin: 12px 0 0; padding: 10px 12px; border-radius: 10px; background: #fef2f2; color: #dc2626; font-size: 13px; text-align: center; }
.auth-divider { display: flex; align-items: center; gap: 12px; margin: 20px 0 14px; color: #bbb; font-size: 12px; }
.auth-divider::before, .auth-divider::after { content: ''; flex: 1; height: 1px; background: var(--line); }
.auth-switch { text-align: center; font-size: 13.5px; color: var(--muted); margin: 0; }
.auth-switch .link-btn { font-weight: 700; }
.auth-perks { list-style: none; margin: 20px 0 0; padding: 16px 4px 0; border-top: 1px dashed var(--line); display: grid; gap: 8px; }
.auth-perks li { font-size: 13px; color: var(--muted); }
.auth-perks i { color: #16a34a; margin-right: 8px; font-size: 12px; }
[data-theme="dark"] .auth-error { background: rgba(220,38,38,.12); }
[data-theme="dark"] .auth-logo-mark { background: linear-gradient(135deg, #eee 0%, #999 100%); color: #111; }
[data-theme="dark"] .auth-submit { background: #eee; color: #111; }
[data-theme="dark"] .auth-input-wrap input:focus { border-color: #eee; box-shadow: 0 0 0 3px rgba(255,255,255,.08); }

/* ============ API Key 可复制弹窗 ============ */
.key-modal { position: fixed; inset: 0; z-index: 1000; display: flex; align-items: center; justify-content: center; }
.key-modal[hidden] { display: none; }
.key-modal-mask { position: absolute; inset: 0; background: rgba(0,0,0,.55); backdrop-filter: blur(3px); }
.key-modal-card { position: relative; width: min(480px, calc(100vw - 32px)); background: var(--bg); border-radius: 20px;
  padding: 30px 28px 24px; box-shadow: 0 24px 70px rgba(0,0,0,.3); text-align: center; }
.key-modal-icon { width: 52px; height: 52px; margin: 0 auto 14px; border-radius: 16px; background: linear-gradient(135deg, #fbbf24, #f59e0b);
  color: #fff; font-size: 22px; display: flex; align-items: center; justify-content: center; }
.key-modal-card h3 { font-size: 18px; font-weight: 800; margin: 0 0 8px; }
.key-modal-warn { font-size: 13px; color: #d97706; margin: 0 0 16px; }
.key-modal-warn i { margin-right: 5px; }
.key-modal-box { display: flex; align-items: stretch; gap: 8px; background: var(--bg-soft, #f6f7f8); border: 1.5px solid var(--line);
  border-radius: 12px; padding: 10px 12px; }
.key-modal-box code { flex: 1; font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 13.5px; word-break: break-all;
  text-align: left; align-self: center; user-select: all; -webkit-user-select: all; }
.key-copy-btn { flex-shrink: 0; border: none; border-radius: 9px; background: #111; color: #fff; font-size: 12.5px; font-weight: 700;
  padding: 8px 14px; cursor: pointer; white-space: nowrap; align-self: center; }
.key-copy-btn:hover { opacity: .85; }
.key-modal-hint { font-size: 12px; color: var(--muted); margin: 12px 0 0; }
.key-modal-hint code { background: var(--bg-soft, #f6f7f8); padding: 2px 6px; border-radius: 5px; font-size: 11.5px; }
[data-theme="dark"] .key-modal-box, [data-theme="dark"] .key-modal-hint code { background: rgba(255,255,255,.06); }
[data-theme="dark"] .key-copy-btn { background: #eee; color: #111; }

/* ============ v14 用户中心：左侧导航布局 ============ */
.account-layout { display: grid; grid-template-columns: 230px 1fr; gap: 24px; align-items: start; }
.account-nav { position: sticky; top: 80px; background: var(--bg-panel); border: 1px solid var(--line); border-radius: 16px; padding: 16px 12px; display: flex; flex-direction: column; gap: 4px; }
.account-nav-user { display: flex; align-items: center; gap: 10px; padding: 6px 8px 14px; border-bottom: 1px dashed var(--line); margin-bottom: 8px; }
.account-avatar { width: 40px; height: 40px; border-radius: 12px; background: linear-gradient(135deg, #111 0%, #444 100%); color: #fff; font-weight: 800; font-size: 17px; display: flex; align-items: center; justify-content: center; flex-shrink: 0; }
.account-nav-meta { min-width: 0; display: flex; flex-direction: column; }
.account-nav-meta strong { font-size: 14px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.account-nav-meta .user-email-badge { font-size: 11.5px; color: var(--text-3); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.account-nav-menu { display: flex; flex-direction: column; gap: 2px; }
.acc-nav-item { display: flex; align-items: center; gap: 10px; border: none; background: none; text-align: left; font-size: 14px; font-weight: 500; color: var(--text-2); padding: 10px 12px; border-radius: 10px; cursor: pointer; transition: background .15s, color .15s; width: 100%; }
.acc-nav-item i { width: 18px; text-align: center; font-size: 13px; color: var(--text-3); }
.acc-nav-item:hover { background: var(--bg-soft); color: var(--text-1); }
.acc-nav-item.active { background: var(--text-1); color: var(--bg); font-weight: 700; }
.acc-nav-item.active i { color: var(--bg); }
.acc-nav-logout { margin-top: 8px; border-top: 1px dashed var(--line); border-radius: 0 0 10px 10px; color: #dc2626; }
.acc-nav-logout i { color: #dc2626; }
.acc-nav-logout:hover { background: rgba(220,38,38,.08); color: #dc2626; }
.account-main { min-width: 0; }
.acc-sec { background: var(--bg-panel); border: 1px solid var(--line); border-radius: 16px; padding: 24px; }
.acc-sec-title { font-size: 19px; font-weight: 800; margin: 0 0 18px; }
.acc-sec-title i { margin-right: 8px; color: var(--text-3); font-size: 16px; }
.acc-sec-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 18px; }
.acc-sec-head .acc-sec-title { margin: 0; }
.acc-pro-badge { font-size: 11px; font-weight: 700; background: linear-gradient(135deg, #fbbf24, #f59e0b); color: #fff; padding: 3px 8px; border-radius: 6px; vertical-align: 3px; margin-left: 6px; }

/* 账户总览 */
.acc-stat-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; }
.acc-stat { background: var(--bg-soft); border: 1px solid var(--line); border-radius: 12px; padding: 16px; text-align: center; }
.acc-stat-num { font-size: 19px; font-weight: 800; line-height: 1.3; }
.acc-stat-num em { font-style: normal; font-size: 13px; font-weight: 600; color: var(--text-3); }
.acc-stat-num.plan-free { color: var(--text-2); }
.acc-stat-num.plan-pro { color: #d97706; }
.acc-stat-num.plan-enterprise { color: #7c3aed; }
.acc-stat-label { font-size: 12px; color: var(--text-3); margin-top: 4px; }
.acc-quick { margin-top: 20px; }
.acc-quick h3 { font-size: 14px; font-weight: 700; margin: 0 0 10px; color: var(--text-2); }
.acc-quick-row { display: flex; gap: 10px; flex-wrap: wrap; }

/* 套餐对比卡片 */
.acc-plan-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; margin-bottom: 18px; }
.acc-plan-card { position: relative; border: 1.5px solid var(--line); border-radius: 14px; padding: 20px 18px; display: flex; flex-direction: column; gap: 10px; transition: border-color .15s, box-shadow .15s; }
.acc-plan-card h3 { font-size: 16px; font-weight: 800; margin: 0; }
.acc-plan-hot { border-color: #f59e0b; }
.acc-plan-selected { border-color: var(--text-1); box-shadow: 0 0 0 3px rgba(0,0,0,.08); }
.acc-plan-price { font-size: 26px; font-weight: 800; }
.acc-plan-price em { font-style: normal; font-size: 13px; font-weight: 600; color: var(--text-3); }
.acc-plan-card ul { list-style: none; margin: 0; padding: 0; display: grid; gap: 6px; flex: 1; }
.acc-plan-card li { font-size: 13px; color: var(--text-2); padding-left: 18px; position: relative; }
.acc-plan-card li::before { content: '✓'; position: absolute; left: 0; color: #16a34a; font-weight: 700; }
.acc-plan-tag { font-size: 12.5px; color: var(--text-3); text-align: center; padding: 9px 0; border: 1px dashed var(--line); border-radius: 10px; }
.acc-plan-buy { width: 100%; padding: 10px 0; border-radius: 10px; font-weight: 700; cursor: pointer; }
#plan-buy h3 { font-size: 15px; font-weight: 800; margin: 0 0 10px; }
#plan-buy { border: 1.5px solid var(--line); border-radius: 14px; padding: 18px; margin-bottom: 14px; display: flex; flex-direction: column; gap: 10px; }
#plan-buy[hidden] { display: none; }

/* 大字号金额展示 */
.pay-amount-hero { display: flex; align-items: baseline; gap: 8px; margin: 10px 0 14px; flex-wrap: wrap; }
.pay-amount-num { font-size: 38px; font-weight: 800; letter-spacing: -0.5px; line-height: 1; }
.pay-amount-unit { font-size: 16px; font-weight: 700; color: var(--text-3); }
#pay-copy-amt { align-self: center; }

/* Key 操作与 7 日用量迷你图 */
.key-actions { display: flex; gap: 12px; }
.key-usage-chart { margin-top: 10px; padding: 12px; background: var(--bg-soft); border-radius: 10px; }
.key-usage-chart[hidden] { display: none; }
.usage-bars { display: flex; align-items: flex-end; gap: 10px; justify-content: space-around; }
.usage-bar-col { display: flex; flex-direction: column; align-items: center; gap: 4px; }
.usage-bar { width: 26px; background: linear-gradient(180deg, #4b5563, #17181a); border-radius: 4px 4px 0 0; min-height: 4px; }
.usage-bar-num { font-size: 11px; font-weight: 700; color: var(--text-2); }
.usage-bar-day { font-size: 10.5px; color: var(--text-3); }

/* 设置页卡片 */
.acc-set-card { border: 1px solid var(--line); border-radius: 14px; padding: 18px; margin-bottom: 14px; }
.acc-set-card h3 { font-size: 15px; font-weight: 800; margin: 0 0 12px; }
.acc-set-card h3 i { margin-right: 7px; color: var(--text-3); font-size: 13px; }
.acc-set-form { display: flex; gap: 10px; align-items: stretch; }
.acc-set-form .form-input { flex: 1; }
.acc-set-col { flex-direction: column; max-width: 380px; }
.acc-set-msg { font-size: 13px; margin: 10px 0 0; font-weight: 600; }
.acc-set-msg.msg-ok { color: #16a34a; }
.acc-set-msg.msg-err { color: #dc2626; }
.acc-set-danger { border-style: dashed; }

/* 暗色模式 */
[data-theme="dark"] .account-avatar { background: linear-gradient(135deg, #eee 0%, #999 100%); color: #111; }
[data-theme="dark"] .acc-nav-item.active { background: #eee; color: #111; }
[data-theme="dark"] .acc-nav-item.active i { color: #111; }
[data-theme="dark"] .acc-plan-selected { box-shadow: 0 0 0 3px rgba(255,255,255,.1); }
[data-theme="dark"] .usage-bar { background: linear-gradient(180deg, #9ca3af, #e5e7eb); }

/* 移动端：侧边导航变横向 Tab */
@media (max-width: 860px) {
  .account-layout { grid-template-columns: 1fr; }
  .account-nav { position: static; flex-direction: column; padding: 12px; }
  .account-nav-menu { flex-direction: row; overflow-x: auto; gap: 4px; padding-bottom: 2px; -webkit-overflow-scrolling: touch; }
  .acc-nav-item { white-space: nowrap; width: auto; flex-shrink: 0; padding: 9px 12px; font-size: 13px; }
  .acc-nav-logout { margin-top: 6px; border-top: none; }
  .acc-stat-grid { grid-template-columns: repeat(2, 1fr); }
  .acc-plan-grid { grid-template-columns: 1fr; }
  .acc-sec { padding: 18px 14px; }
  .pay-amount-num { font-size: 30px; }
}

/* ============ v15 管理后台 2.0：左侧导航大厂风格 ============ */
.adm-shell { display: flex; min-height: 100vh; background: #f5f6f8; }
.adm-sidebar { width: 220px; flex-shrink: 0; background: #0f1522; color: #cbd2dd; display: flex; flex-direction: column; position: sticky; top: 0; height: 100vh; overflow-y: auto; z-index: 50; }
.adm-brand { display: flex; align-items: center; gap: 10px; padding: 18px 18px 14px; border-bottom: 1px solid rgba(255,255,255,.07); }
.adm-brand img { border-radius: 8px; }
.adm-brand-name { font-weight: 800; font-size: 15px; color: #fff; letter-spacing: .5px; }
.adm-nav { flex: 1; padding: 10px 10px 20px; }
.adm-nav-group { font-size: 11px; color: #6b7484; letter-spacing: 1.5px; padding: 16px 10px 6px; user-select: none; }
.adm-nav-item { display: flex; align-items: center; gap: 10px; width: 100%; padding: 9px 12px; border: none; background: none; color: #cbd2dd; font-size: 13.5px; border-radius: 8px; cursor: pointer; text-align: left; transition: background .15s, color .15s; }
.adm-nav-item i { width: 18px; text-align: center; font-size: 13px; color: #8b93a3; transition: color .15s; }
.adm-nav-item:hover { background: rgba(255,255,255,.06); color: #fff; }
.adm-nav-item:hover i { color: #fff; }
.adm-nav-item.active { background: var(--brand, #2563eb); color: #fff; font-weight: 600; }
.adm-nav-item.active i { color: #fff; }
.adm-main { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.adm-topbar { display: flex; align-items: center; justify-content: space-between; background: #fff; border-bottom: 1px solid #e6e8ec; padding: 0 22px; height: 56px; position: sticky; top: 0; z-index: 40; }
.adm-topbar-left { display: flex; align-items: center; gap: 12px; }
.adm-page-title { font-size: 17px; font-weight: 700; margin: 0; color: #1a1d24; }
.adm-menu-toggle { display: none; border: none; background: none; font-size: 18px; cursor: pointer; color: #444; padding: 6px; }
.adm-topbar-right { display: flex; align-items: center; gap: 6px; }
.adm-top-link { display: inline-flex; align-items: center; gap: 6px; padding: 7px 12px; font-size: 13px; color: #52596b; text-decoration: none; background: none; border: none; border-radius: 8px; cursor: pointer; }
.adm-top-link:hover { background: #f0f2f5; color: #1a1d24; }
.adm-logout:hover { color: #dc2626; }
.adm-body { padding: 20px 22px 40px; max-width: 1280px; width: 100%; }
/* 仪表盘 */
.adm-dash-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(160px, 1fr)); gap: 12px; margin-bottom: 18px; }
.adm-stat-card { display: flex; align-items: center; gap: 12px; background: #fff; border: 1px solid #e9ebef; border-radius: 12px; padding: 14px 16px; }
.adm-stat-ico { width: 40px; height: 40px; border-radius: 10px; display: flex; align-items: center; justify-content: center; font-size: 16px; flex-shrink: 0; }
.adm-stat-num { font-size: 20px; font-weight: 800; color: #171a21; line-height: 1.1; }
.adm-stat-label { font-size: 12px; color: #7a8194; margin-top: 2px; }
.adm-dash-cols { display: grid; grid-template-columns: 1.4fr 1fr; gap: 16px; }
.adm-dash-card { background: #fff; border: 1px solid #e9ebef; border-radius: 12px; padding: 16px 18px; }
.adm-dash-list { list-style: none; margin: 0; padding: 0; }
.adm-dash-list li { display: flex; justify-content: space-between; gap: 10px; padding: 8px 0; border-bottom: 1px dashed #eceef2; font-size: 13px; }
.adm-dash-list li:last-child { border-bottom: none; }
.adm-dash-list a { color: #333c4e; text-decoration: none; }
.adm-dash-list a:hover { color: var(--brand, #2563eb); }
.adm-dash-time { color: #9aa1b1; flex-shrink: 0; font-size: 12px; }
.adm-dash-actions { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
.adm-dash-sys .adm-sys-row { display: flex; justify-content: space-between; font-size: 13px; padding: 7px 0; border-bottom: 1px dashed #eceef2; }
.adm-dash-sys .adm-sys-row:last-child { border-bottom: none; }
/* 移动端：侧栏抽屉化 */
@media (max-width: 900px) {
  .adm-sidebar { position: fixed; left: 0; top: 0; transform: translateX(-100%); transition: transform .22s ease; box-shadow: 4px 0 24px rgba(0,0,0,.25); }
  .adm-sidebar.open { transform: translateX(0); }
  .adm-menu-toggle { display: block; }
  .adm-body { padding: 14px 12px 32px; }
  .adm-dash-cols { grid-template-columns: 1fr; }
}

/* ============ v16 链上动向页 ============ */
.oc-page { max-width: 860px; margin: 0 auto; }
.oc-sub { color: var(--text-3); font-size: 13.5px; margin: 6px 0 0; }
.oc-type-tabs { display: flex; gap: 8px; flex-wrap: wrap; margin: 10px 0 16px; }
.oc-type-tab { font-size: 12.5px; padding: 5px 12px; border-radius: 999px; border: 1px solid var(--line); color: var(--text-2); background: var(--bg-panel); }
.oc-type-tab.active { background: var(--brand); border-color: var(--brand); color: #fff; }
.oc-timeline { display: flex; flex-direction: column; gap: 12px; }
.oc-event { background: var(--bg-panel); border: 1px solid var(--line); border-radius: 12px; padding: 14px 16px; }
.oc-event-top { display: flex; align-items: center; gap: 10px; margin-bottom: 8px; }
.oc-badge { font-size: 11.5px; font-weight: 700; padding: 2px 9px; border-radius: 999px; }
.oc-in { background: #fee2e2; color: #b91c1c; }
.oc-out { background: #dcfce7; color: #15803d; }
.oc-tx { background: #e0e7ff; color: #4338ca; }
.oc-mint { background: #dbeafe; color: #1d4ed8; }
.oc-burn { background: #fef3c7; color: #b45309; }
.oc-price { background: #f3e8ff; color: #7e22ce; }
.oc-chain { font-size: 12px; color: var(--text-3); font-weight: 600; }
.oc-time { margin-left: auto; font-size: 12px; color: var(--text-3); }
.oc-event-main { display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; }
.oc-amount { font-size: 19px; font-weight: 800; color: var(--text-1); font-variant-numeric: tabular-nums; }
.oc-usd { font-size: 13.5px; color: var(--text-2); font-weight: 600; }
.oc-event-flow { display: flex; align-items: center; gap: 10px; margin-top: 8px; font-size: 13px; color: var(--text-2); flex-wrap: wrap; }
.oc-addr { background: var(--bg); border: 1px solid var(--line); border-radius: 8px; padding: 3px 10px; font-weight: 600; }
.oc-addr.oc-known { border-color: var(--brand); color: var(--brand); }
.oc-arrow { color: var(--text-3); font-size: 12px; }
.oc-event-links { display: flex; gap: 14px; margin-top: 10px; font-size: 12.5px; }
.oc-event-links a { color: var(--brand); font-weight: 600; }
[data-theme="dark"] .oc-in { background: #451a1a; color: #fca5a5; }
[data-theme="dark"] .oc-out { background: #14352a; color: #86efac; }
[data-theme="dark"] .oc-tx { background: #1e1b4b; color: #a5b4fc; }
[data-theme="dark"] .oc-mint { background: #172554; color: #93c5fd; }
[data-theme="dark"] .oc-burn { background: #451a03; color: #fcd34d; }
[data-theme="dark"] .oc-price { background: #3b0764; color: #d8b4fe; }

/* ===== v17: Gas 异动标签 + 用户链上监控 + 命中记录 ===== */
.oc-gas { background: #ffedd5; color: #c2410c; }
[data-theme="dark"] .oc-gas { background: #431407; color: #fdba74; }
.watch-chain-tag { display: inline-block; padding: 1px 8px; border-radius: 10px; font-size: 11px; font-weight: 700; margin-right: 6px; background: #e2e8f0; color: #334155; }
.wc-btc { background: #fef3c7; color: #b45309; }
.wc-eth { background: #e0e7ff; color: #4338ca; }
.wc-tron { background: #fee2e2; color: #b91c1c; }
.wc-sol { background: #ede9fe; color: #6d28d9; }
.wc-bsc { background: #fef9c3; color: #a16207; }
[data-theme="dark"] .watch-chain-tag { background: #334155; color: #cbd5e1; }
[data-theme="dark"] .wc-btc { background: #451a03; color: #fcd34d; }
[data-theme="dark"] .wc-eth { background: #1e1b4b; color: #a5b4fc; }
[data-theme="dark"] .wc-tron { background: #450a0a; color: #fca5a5; }
[data-theme="dark"] .wc-sol { background: #2e1065; color: #c4b5fd; }
[data-theme="dark"] .wc-bsc { background: #422006; color: #fde047; }
.watch-note { font-size: 12px; color: var(--text-secondary); margin-left: 6px; }
.watch-usd { font-style: normal; color: var(--text-secondary); font-size: 12px; }
.watch-hits-title { margin: 22px 0 10px; font-size: 15px; }
.watch-wh-opt { display: flex; align-items: center; gap: 6px; font-size: 13px; color: var(--text-secondary); margin: 4px 0; }
.dir-in { color: #16a34a; font-weight: 600; }
.dir-out { color: #dc2626; font-weight: 600; }

/* ===== v17 图片横幅 ===== */
.oc-hero { background-size: cover; background-position: center right; border-radius: 16px; padding: 42px 32px; margin-bottom: 18px; color: #fff; }
.oc-hero h1 { font-size: 28px; font-weight: 800; margin: 0 0 10px; color: #fff; display: flex; align-items: center; gap: 10px; }
.oc-hero .oc-sub { color: rgba(255,255,255,.82); margin: 0; max-width: 640px; line-height: 1.7; font-size: 14px; }
.page-banner { background-size: cover; background-position: center right; border-radius: 16px; padding: 38px 32px; margin-bottom: 16px; color: #fff; }
.page-banner h2 { font-size: 24px; font-weight: 800; margin: 0 0 8px; color: #fff; }
.page-banner h2 i { color: var(--brand); margin-right: 8px; }
.page-banner p { color: rgba(255,255,255,.82); margin: 0; max-width: 620px; line-height: 1.7; font-size: 14px; }
#open-hero { padding: 56px 32px 48px; }
#open-hero h1 { color: #fff; }
#open-hero p { color: rgba(255,255,255,.85); }
@media (max-width: 640px) {
  .oc-hero { padding: 28px 18px; }
  .oc-hero h1 { font-size: 22px; }
  .page-banner { padding: 26px 18px; }
  .page-banner h2 { font-size: 20px; }
  #open-hero { padding: 36px 18px 30px; }
}

/* ===== v18 影响标签 + 链上地址复制 ===== */
.tag-impact { font-weight: 600; }
.oc-addr { display: inline-flex; align-items: center; gap: 5px; flex-wrap: wrap; }
.oc-addr-hash { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 11.5px; color: var(--text-3); background: var(--bg-2); padding: 1px 6px; border-radius: 5px; }
.oc-copy { border: none; background: none; cursor: pointer; color: var(--text-3); font-size: 12px; padding: 2px 4px; border-radius: 4px; line-height: 1; }
.oc-copy:hover { color: var(--brand); background: var(--bg-2); }
.oc-copy.copied { color: #16a34a; }
.oc-jump { color: var(--text-3); font-size: 11px; padding: 2px 4px; border-radius: 4px; }
.oc-jump:hover { color: var(--brand); background: var(--bg-2); }
.oc-tx-cell { display: inline-flex; align-items: center; gap: 4px; }
html.dark .oc-addr-hash { background: rgba(255,255,255,.06); }
html.dark .oc-copy:hover, html.dark .oc-jump:hover { background: rgba(255,255,255,.08); }
