/* ============================================================
   ashcontrol Design Tokens
   设计语言：Linear 密度 + Notion 文档质感 + Bear 字体精致 + 飞书工作流
   原则：克制、白底、极少状态色、等宽数字、密度型表格
   ============================================================ */

:root {
  /* ---------- 色彩：中性灰阶为主 ---------- */
  --color-bg:               #FFFFFF;
  --color-bg-alt:           #FAFAFA;        /* 区块分隔背景 */
  --color-bg-subtle:        #F5F5F5;        /* 行 hover */
  --color-bg-elevated:      #FFFFFF;
  --color-bg-overlay:       rgba(15, 23, 42, 0.55);

  /* 文字三级灰阶 */
  --color-text-primary:     #0F172A;        /* 主文字 — 深 slate */
  --color-text-secondary:   #475569;        /* 次要文字 */
  --color-text-tertiary:    #94A3B8;        /* 三级灰、placeholder、辅助 */
  --color-text-inverse:     #FFFFFF;

  /* 边线 */
  --color-border:           #E5E7EB;        /* 默认线 */
  --color-border-strong:    #CBD5E1;        /* 表头线、强分隔 */
  --color-border-subtle:    #F1F5F9;        /* 表格行内极浅线 */

  /* 状态色 — 仅用于信号 / 涨跌 / 告警 */
  --color-pos:              #16A34A;        /* 利好 / 上涨 */
  --color-pos-bg:           #ECFDF5;
  --color-neg:              #DC2626;        /* 利空 / 下跌 */
  --color-neg-bg:           #FEF2F2;
  --color-warn:             #EA580C;        /* 体外资产、告警橙 */
  --color-warn-bg:          #FFF7ED;
  --color-info:             #2563EB;        /* 链接 / 强调 */
  --color-info-bg:          #EFF6FF;
  --color-neutral:          #64748B;
  --color-neutral-bg:       #F1F5F9;

  /* 品牌色 — 深蓝，极少出现（logo / 主按钮） */
  --color-brand:            #0F172A;
  --color-brand-hover:      #1E293B;
  --color-brand-accent:     #2563EB;

  /* 评分热力（5 档，色弱友好 + 圆点双编码） */
  --heat-0:                 #F8FAFC;
  --heat-1:                 #FEF3C7;
  --heat-2:                 #FDE68A;
  --heat-3:                 #FCD34D;
  --heat-4:                 #F59E0B;

  /* 扩展状态色（Fix-D · 消除重复 hex） */
  --color-major:            #9333EA;       /* 重大公告紫 */
  --color-major-bg:         #F3E8FF;       /* 重大公告底 */
  --color-major-text:       #6B21A8;       /* 重大公告深紫文字 */
  --color-pos-strong:       #15803D;       /* 深绿（强正向，比 pos 深一档） */
  --color-neg-strong:       #B91C1C;       /* 深红（强负向，比 neg 深一档） */
  --color-warn-bg-strong:   #FFEDD5;       /* 橙黄底（减仓 / 警示） */
  --color-warn-text-strong: #9A3412;       /* 深褐文字（配 warn-bg-strong） */

  /* ---------- 字体 ---------- */
  --font-sans:
    "Inter", "PingFang SC", "Hiragino Sans GB",
    "Source Han Sans SC", "Microsoft YaHei",
    -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;

  --font-mono:
    "JetBrains Mono", "SF Mono", "Menlo",
    "Roboto Mono", "PingFang SC", monospace;

  --font-serif:
    "Source Serif Pro", "Noto Serif SC",
    "Songti SC", Georgia, serif;

  /* ---------- 字号梯度（7 档） ---------- */
  --text-xs:    11px;     /* 标签 chip / 元数据 */
  --text-sm:    12px;     /* label / 表头 */
  --text-base:  13px;     /* 表格、密度型正文 */
  --text-md:    14px;     /* 文档正文 */
  --text-lg:    16px;     /* 卡片标题 */
  --text-xl:    20px;     /* section 标题 */
  --text-2xl:   24px;     /* 页面标题 */
  --text-3xl:   32px;     /* 关键数字 */
  --text-4xl:   48px;     /* 白皮书 hero */

  /* ---------- 行高 ---------- */
  --leading-tight:  1.25;
  --leading-snug:   1.4;
  --leading-base:   1.55;
  --leading-loose:  1.75;

  /* ---------- 字重 ---------- */
  --weight-regular: 400;
  --weight-medium:  500;
  --weight-semi:    600;
  --weight-bold:    700;

  /* ---------- 字距（中文不用，英文+数字用） ---------- */
  --tracking-tight: -0.01em;
  --tracking-base:  0;
  --tracking-wide:  0.02em;
  --tracking-mono:  -0.005em;

  /* ---------- 间距：8pt 基础 + 4pt 半步 ---------- */
  --space-1:  4px;
  --space-2:  8px;
  --space-3:  12px;
  --space-4:  16px;
  --space-5:  20px;
  --space-6:  24px;
  --space-7:  32px;
  --space-8:  40px;
  --space-9:  48px;
  --space-10: 64px;
  --space-11: 96px;

  /* ---------- 圆角 ---------- */
  --radius-2xs: 2px;
  --radius-xs: 3px;
  --radius-sm: 4px;
  --radius-md: 6px;
  --radius-lg: 8px;
  --radius-xl: 12px;
  --radius-pill: 999px;

  /* ---------- 阴影：极克制 ---------- */
  --shadow-xs: 0 1px 0 rgba(15, 23, 42, 0.04);
  --shadow-sm: 0 1px 2px rgba(15, 23, 42, 0.05), 0 1px 1px rgba(15, 23, 42, 0.03);
  --shadow-md: 0 2px 4px rgba(15, 23, 42, 0.06), 0 1px 2px rgba(15, 23, 42, 0.04);
  --shadow-lg: 0 8px 24px rgba(15, 23, 42, 0.08), 0 2px 6px rgba(15, 23, 42, 0.04);
  --shadow-focus: 0 0 0 3px rgba(37, 99, 235, 0.12);

  /* ---------- 布局 ---------- */
  --nav-h:        52px;
  --subnav-h:     44px;
  --container-max: 1440px;
  --content-max:   860px;     /* 白皮书阅读宽度 */
  --sidebar-w:     240px;

  /* ---------- 动效 ---------- */
  --easing:       cubic-bezier(0.16, 1, 0.3, 1);
  --duration-fast: 120ms;
  --duration-base: 180ms;
}

/* ============================================================
   Reset + base
   ============================================================ */
*, *::before, *::after { box-sizing: border-box; }

html { -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; }

body {
  margin: 0;
  font-family: var(--font-sans);
  font-size: var(--text-base);
  line-height: var(--leading-base);
  color: var(--color-text-primary);
  background: var(--color-bg);
  letter-spacing: var(--tracking-base);
}

a { color: inherit; text-decoration: none; }
button { font-family: inherit; cursor: pointer; }
input, select { font-family: inherit; font-size: inherit; }

::selection { background: rgba(37, 99, 235, 0.18); color: var(--color-text-primary); }

/* 等宽数字 — 给所有金融数字加 tabular-nums */
.num, .mono, td.num, .price, .pct, .code {
  font-family: var(--font-mono);
  font-variant-numeric: tabular-nums;
  letter-spacing: var(--tracking-mono);
}

/* ============================================================
   全局导航
   ============================================================ */
.app-nav {
  height: var(--nav-h);
  border-bottom: 1px solid var(--color-border);
  background: var(--color-bg);
  position: sticky;
  top: 0;
  z-index: 50;
  display: flex;
  align-items: center;
  padding: 0 var(--space-6);
  gap: var(--space-6);
}

.app-nav__brand {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  font-weight: var(--weight-semi);
  font-size: var(--text-md);
  letter-spacing: -0.015em;
}

.app-nav__brand-mark {
  width: 22px;
  height: 22px;
  border-radius: var(--radius-sm);
  background: var(--color-brand);
  display: inline-grid;
  place-items: center;
  color: white;
  font-family: var(--font-mono);
  font-size: 11px;
  font-weight: 700;
  letter-spacing: -0.02em;
}

.app-nav__brand-meta {
  font-family: var(--font-mono);
  font-size: 10px;
  color: var(--color-text-tertiary);
  padding: 2px 6px;
  border: 1px solid var(--color-border);
  border-radius: var(--radius-sm);
  margin-left: 6px;
  letter-spacing: 0.04em;
  text-transform: uppercase;
}

.app-nav__links {
  display: flex;
  gap: 2px;
  align-items: center;
  margin-left: var(--space-4);
}

.app-nav__link {
  padding: 6px 12px;
  border-radius: var(--radius-md);
  font-size: var(--text-base);
  color: var(--color-text-secondary);
  transition: background var(--duration-fast) var(--easing), color var(--duration-fast) var(--easing);
}
.app-nav__link:hover { background: var(--color-bg-subtle); color: var(--color-text-primary); }
.app-nav__link.is-active {
  background: var(--color-bg-subtle);
  color: var(--color-text-primary);
  font-weight: var(--weight-medium);
}

.app-nav__search {
  flex: 1;
  max-width: 420px;
  margin-left: auto;
  position: relative;
}
.app-nav__search input {
  width: 100%;
  height: 32px;
  padding: 0 12px 0 32px;
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  background: var(--color-bg-alt);
  font-size: var(--text-base);
  color: var(--color-text-primary);
  outline: none;
  transition: border-color var(--duration-fast) var(--easing), box-shadow var(--duration-fast) var(--easing);
}
.app-nav__search input::placeholder { color: var(--color-text-tertiary); }
.app-nav__search input:focus { border-color: var(--color-brand-accent); box-shadow: var(--shadow-focus); background: var(--color-bg); }
.app-nav__search svg {
  position: absolute; left: 10px; top: 8px;
  width: 16px; height: 16px; color: var(--color-text-tertiary);
}
.app-nav__search kbd {
  position: absolute; right: 8px; top: 6px;
  font-family: var(--font-mono); font-size: 10px;
  padding: 2px 5px; border: 1px solid var(--color-border);
  border-radius: 3px; color: var(--color-text-tertiary);
  background: var(--color-bg);
}

.app-nav__user {
  display: flex; align-items: center; gap: var(--space-3);
}
.app-nav__avatar {
  width: 28px; height: 28px; border-radius: 50%;
  background: linear-gradient(135deg, #1E293B 0%, #475569 100%);
  display: inline-grid; place-items: center;
  color: white; font-size: 11px; font-weight: 600;
  letter-spacing: -0.02em;
}

/* ============================================================
   通用容器
   ============================================================ */
.container {
  max-width: var(--container-max);
  margin: 0 auto;
  padding: 0 var(--space-6);
}

.page {
  padding: var(--space-6) 0 var(--space-10);
}

/* 演示数据 banner */
.demo-banner {
  background: var(--color-warn-bg);
  border-bottom: 1px solid #FED7AA;
  color: #9A3412;
  font-size: var(--text-xs);
  text-align: center;
  padding: 5px 12px;
  font-family: var(--font-mono);
  letter-spacing: 0.02em;
}
.demo-banner strong { font-weight: 600; }

/* ============================================================
   KPI 三件套
   ============================================================ */
.kpi-strip {
  display: flex;
  align-items: stretch;
  gap: 0;
  border: 1px solid var(--color-border);
  border-radius: var(--radius-lg);
  background: var(--color-bg);
  overflow: hidden;
  margin-bottom: var(--space-5);
}
.kpi-strip__item {
  flex: 1;
  padding: var(--space-4) var(--space-5);
  border-right: 1px solid var(--color-border);
  display: flex;
  flex-direction: column;
  gap: 4px;
}
.kpi-strip__item:last-child { border-right: none; }
.kpi-strip__label {
  font-size: var(--text-xs);
  color: var(--color-text-tertiary);
  text-transform: uppercase;
  letter-spacing: 0.06em;
}
.kpi-strip__value {
  font-family: var(--font-mono);
  font-size: var(--text-2xl);
  font-weight: var(--weight-medium);
  font-variant-numeric: tabular-nums;
  letter-spacing: -0.02em;
  color: var(--color-text-primary);
}
.kpi-strip__delta { font-size: var(--text-xs); color: var(--color-text-secondary); font-family: var(--font-mono); }
.kpi-strip__delta.is-pos { color: var(--color-pos); }
.kpi-strip__delta.is-neg { color: var(--color-neg); }

/* ============================================================
   过滤条 + Section 标题
   ============================================================ */
.section-head {
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  margin-bottom: var(--space-4);
  gap: var(--space-4);
}
.section-head__title {
  font-size: var(--text-xl);
  font-weight: var(--weight-semi);
  letter-spacing: -0.015em;
  margin: 0;
}
.section-head__sub {
  font-size: var(--text-sm);
  color: var(--color-text-tertiary);
  margin-top: 2px;
}

.filter-bar {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  flex-wrap: wrap;
  padding: var(--space-3) 0;
  border-bottom: 1px solid var(--color-border-subtle);
  margin-bottom: var(--space-3);
}

.filter-pill {
  height: 28px;
  padding: 0 10px;
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  background: var(--color-bg);
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: var(--text-base);
  color: var(--color-text-primary);
  transition: border-color var(--duration-fast) var(--easing), background var(--duration-fast) var(--easing);
}
.filter-pill:hover { border-color: var(--color-border-strong); background: var(--color-bg-alt); }
.filter-pill.is-active {
  border-color: var(--color-brand);
  background: var(--color-brand);
  color: white;
}
.filter-pill__label { color: var(--color-text-tertiary); font-size: var(--text-sm); }
.filter-pill__value { font-weight: var(--weight-medium); }
.filter-pill svg { width: 12px; height: 12px; color: var(--color-text-tertiary); }
.filter-pill.is-active svg { color: rgba(255,255,255,0.7); }

.toggle-group {
  display: inline-flex;
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  overflow: hidden;
  background: var(--color-bg-alt);
  padding: 2px;
  gap: 2px;
}
.toggle-group__btn {
  height: 24px;
  padding: 0 10px;
  border: none;
  background: transparent;
  font-size: var(--text-sm);
  color: var(--color-text-secondary);
  border-radius: 4px;
  display: inline-flex;
  align-items: center;
  gap: 4px;
}
.toggle-group__btn.is-active {
  background: var(--color-bg);
  color: var(--color-text-primary);
  font-weight: var(--weight-medium);
  box-shadow: var(--shadow-xs);
}

.filter-spacer { flex: 1; }

.btn {
  height: 30px;
  padding: 0 12px;
  border-radius: var(--radius-md);
  font-size: var(--text-base);
  font-weight: var(--weight-medium);
  display: inline-flex;
  align-items: center;
  gap: 6px;
  border: 1px solid transparent;
  transition: background var(--duration-fast) var(--easing), border-color var(--duration-fast) var(--easing);
}
.btn--primary { background: var(--color-brand); color: white; }
.btn--primary:hover { background: var(--color-brand-hover); }
.btn--ghost { background: var(--color-bg); color: var(--color-text-primary); border-color: var(--color-border); }
.btn--ghost:hover { background: var(--color-bg-subtle); border-color: var(--color-border-strong); }
.btn--quiet { background: transparent; color: var(--color-text-secondary); padding: 0 8px; }
.btn--quiet:hover { background: var(--color-bg-subtle); color: var(--color-text-primary); }
.btn--danger { background: var(--color-bg); color: var(--color-neg); border-color: var(--color-border); }
.btn--danger:hover { background: var(--color-neg-bg); border-color: #FCA5A5; }
.btn--xs { height: 24px; padding: 0 8px; font-size: var(--text-xs); }

/* ============================================================
   表格 — 密度型
   ============================================================ */
.dt {
  width: 100%;
  border-collapse: collapse;
  background: var(--color-bg);
  font-size: var(--text-base);
}
.dt thead th {
  font-size: var(--text-xs);
  font-weight: var(--weight-medium);
  color: var(--color-text-tertiary);
  text-transform: uppercase;
  letter-spacing: 0.04em;
  text-align: left;
  padding: 10px 12px;
  border-bottom: 1px solid var(--color-border-strong);
  background: var(--color-bg);
  white-space: nowrap;
  position: sticky;
  top: 0;
  z-index: 2;
}
.dt thead th.is-num { text-align: right; }

.dt tbody tr {
  border-bottom: 1px solid var(--color-border-subtle);
  transition: background var(--duration-fast) var(--easing);
  cursor: pointer;
}
.dt tbody tr:hover { background: var(--color-bg-subtle); }
.dt tbody tr.is-selected {
  background: #F0F7FF;
  box-shadow: inset 3px 0 0 var(--color-brand-accent);
}

.dt tbody td {
  padding: 12px;
  vertical-align: middle;
  color: var(--color-text-primary);
}
.dt tbody td.is-num {
  text-align: right;
  font-family: var(--font-mono);
  font-variant-numeric: tabular-nums;
  letter-spacing: var(--tracking-mono);
}

.dt__company { display: flex; flex-direction: column; gap: 2px; min-width: 200px; }
.dt__company-name { font-weight: var(--weight-medium); }
.dt__company-meta {
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--color-text-tertiary);
  letter-spacing: var(--tracking-mono);
}

/* 评分热力单元 */
.score-cell {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  font-family: var(--font-mono);
  font-variant-numeric: tabular-nums;
  letter-spacing: -0.01em;
  font-weight: var(--weight-medium);
}
.score-cell__num { min-width: 30px; text-align: right; font-size: var(--text-md); }
.score-cell__bar {
  width: 56px;
  height: 6px;
  background: var(--color-bg-subtle);
  border-radius: var(--radius-pill);
  overflow: hidden;
  position: relative;
}
.score-cell__bar-fill {
  height: 100%;
  background: linear-gradient(90deg, #F59E0B 0%, #EA580C 100%);
  border-radius: var(--radius-pill);
}

/* 三档圆点（信号子项） */
.dots {
  display: inline-flex;
  gap: 3px;
  align-items: center;
}
.dots__d {
  width: 6px; height: 6px;
  border-radius: 50%;
  background: var(--color-border);
}
.dots__d.is-on { background: var(--color-brand); }
.dots__d.is-warn { background: var(--color-warn); }

/* 数字色（涨跌） */
.pct.is-pos, .num.is-pos { color: var(--color-pos); }
.pct.is-neg, .num.is-neg { color: var(--color-neg); }

/* ============================================================
   标签 chip
   ============================================================ */
.chip {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  height: 20px;
  padding: 0 8px;
  border-radius: var(--radius-pill);
  font-size: var(--text-xs);
  font-weight: var(--weight-medium);
  letter-spacing: 0.01em;
  white-space: nowrap;
  background: var(--color-neutral-bg);
  color: var(--color-text-secondary);
}
.chip--industry { background: #DBEAFE; color: #1E40AF; }
.chip--state { background: #DCFCE7; color: #166534; }
.chip--finance { background: #FEF3C7; color: #92400E; }
.chip--warn { background: var(--color-warn-bg); color: #9A3412; }
.chip--neg { background: var(--color-neg-bg); color: #991B1B; }
.chip--info { background: var(--color-info-bg); color: #1E40AF; }
.chip--pos { background: var(--color-pos-bg); color: #166534; }
.chip--ghost { background: transparent; border: 1px solid var(--color-border); color: var(--color-text-secondary); }
.chip__dot {
  width: 6px; height: 6px; border-radius: 50%; background: currentColor;
}

.status-tag {
  display: inline-flex; align-items: center; gap: 6px;
  font-size: var(--text-xs); color: var(--color-text-secondary);
  font-weight: var(--weight-medium);
}
.status-tag__dot {
  width: 7px; height: 7px; border-radius: 50%;
}
.status-tag--new .status-tag__dot { background: var(--color-info); box-shadow: 0 0 0 3px rgba(37,99,235,0.15); }
.status-tag--follow .status-tag__dot { background: var(--color-text-tertiary); }
.status-tag--alert .status-tag__dot { background: var(--color-neg); animation: pulse 2.4s ease-in-out infinite; }
.status-tag--ok .status-tag__dot { background: var(--color-pos); }

@keyframes pulse {
  0%, 100% { box-shadow: 0 0 0 0 rgba(220,38,38,0.4); }
  50% { box-shadow: 0 0 0 5px rgba(220,38,38,0); }
}

/* ============================================================
   卡片 / Panel
   ============================================================ */
.panel {
  background: var(--color-bg);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-lg);
  overflow: hidden;
}
.panel__head {
  padding: var(--space-3) var(--space-4);
  border-bottom: 1px solid var(--color-border-subtle);
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-3);
}
.panel__title {
  font-size: var(--text-md);
  font-weight: var(--weight-semi);
  margin: 0;
  letter-spacing: -0.005em;
}
.panel__sub {
  font-size: var(--text-xs);
  color: var(--color-text-tertiary);
  margin-top: 2px;
}
.panel__body { padding: var(--space-4); }
.panel__body--flush { padding: 0; }

/* ============================================================
   抽屉 (Drawer) — 详情面板
   ============================================================ */
.drawer-backdrop {
  position: fixed;
  inset: 0;
  background: var(--color-bg-overlay);
  z-index: 80;
  opacity: 0;
  pointer-events: none;
  transition: opacity var(--duration-base) var(--easing);
}
.drawer-backdrop.is-open { opacity: 1; pointer-events: auto; }

.drawer {
  position: fixed;
  top: 0;
  right: 0;
  bottom: 0;
  width: 520px;
  max-width: 92vw;
  background: var(--color-bg);
  z-index: 90;
  box-shadow: var(--shadow-lg);
  transform: translateX(100%);
  transition: transform var(--duration-base) var(--easing);
  display: flex;
  flex-direction: column;
}
.drawer.is-open { transform: translateX(0); }

.drawer__head {
  padding: var(--space-4) var(--space-5);
  border-bottom: 1px solid var(--color-border);
  display: flex;
  align-items: center;
  justify-content: space-between;
}
.drawer__body { padding: var(--space-5); overflow-y: auto; flex: 1; }
.drawer__close {
  width: 28px; height: 28px;
  border-radius: var(--radius-md);
  background: transparent;
  border: none;
  display: grid; place-items: center;
  color: var(--color-text-tertiary);
}
.drawer__close:hover { background: var(--color-bg-subtle); color: var(--color-text-primary); }

/* 简单 utilities */
.flex { display: flex; }
.items-center { align-items: center; }
.justify-between { justify-content: space-between; }
.gap-2 { gap: var(--space-2); }
.gap-3 { gap: var(--space-3); }
.gap-4 { gap: var(--space-4); }
.gap-6 { gap: var(--space-6); }
.grid { display: grid; }
.text-secondary { color: var(--color-text-secondary); }
.text-tertiary { color: var(--color-text-tertiary); }
.text-xs { font-size: var(--text-xs); }
.text-sm { font-size: var(--text-sm); }
.mono { font-family: var(--font-mono); font-variant-numeric: tabular-nums; }
.mb-2 { margin-bottom: var(--space-2); }
.mb-3 { margin-bottom: var(--space-3); }
.mb-4 { margin-bottom: var(--space-4); }
.mb-6 { margin-bottom: var(--space-6); }
.mt-4 { margin-top: var(--space-4); }
.mt-6 { margin-top: var(--space-6); }

/* 滚动条 — 极克制 */
* { scrollbar-width: thin; scrollbar-color: var(--color-border-strong) transparent; }
*::-webkit-scrollbar { width: 8px; height: 8px; }
*::-webkit-scrollbar-track { background: transparent; }
*::-webkit-scrollbar-thumb { background: var(--color-border); border-radius: 4px; }
*::-webkit-scrollbar-thumb:hover { background: var(--color-border-strong); }

/* ============================================================
   合规 Banner（永久顶置，不可关闭）— Site-G
   ============================================================ */
.compliance-banner {
  background: #FEF9C3;                 /* 浅黄底 */
  border-bottom: 1px solid #FDE68A;
  color: #1F2937;                       /* 黑色文字 */
  font-size: var(--text-xs);
  line-height: 1.5;
  padding: 8px 24px;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 10px;
  font-family: var(--font-sans);
  letter-spacing: 0.005em;
  position: sticky;
  top: 0;
  z-index: 60;
}
.compliance-banner__icon {
  flex: 0 0 auto;
  width: 14px;
  height: 14px;
  color: #B45309;
}
.compliance-banner__text { max-width: 1100px; }
.compliance-banner__text strong { font-weight: var(--weight-semi); color: #111827; }
.compliance-banner__text a {
  color: #B45309;
  border-bottom: 1px dashed #B45309;
  margin-left: 6px;
}
.compliance-banner__text a:hover { color: #92400E; border-bottom-color: #92400E; }

/* 与 compliance-banner 叠放时，app-nav 不再 sticky 到 0 */
.compliance-banner ~ .app-nav { top: 0; position: relative; }

/* ============================================================
   全站统一 Footer — Site-G
   ============================================================ */
.app-footer {
  border-top: 1px solid var(--color-border);
  background: var(--color-bg-alt);
  padding: var(--space-7) var(--space-6) var(--space-6);
  margin-top: var(--space-10);
  font-family: var(--font-sans);
  font-size: var(--text-xs);
  color: var(--color-text-secondary);
  line-height: 1.65;
}
.app-footer__inner {
  max-width: var(--container-max);
  margin: 0 auto;
  display: grid;
  grid-template-columns: 2fr 1.2fr 1fr;
  gap: var(--space-7);
}
.app-footer__col h4 {
  font-size: var(--text-xs);
  font-weight: var(--weight-semi);
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--color-text-tertiary);
  margin: 0 0 var(--space-3);
}
.app-footer__col p { margin: 0 0 var(--space-2); }
.app-footer__col ul { list-style: none; padding: 0; margin: 0; }
.app-footer__col li { margin-bottom: 4px; }
.app-footer__col a {
  color: var(--color-text-secondary);
  border-bottom: 1px dashed transparent;
}
.app-footer__col a:hover { color: var(--color-text-primary); border-bottom-color: var(--color-text-tertiary); }
.app-footer__disclaimer {
  margin-top: var(--space-5);
  padding-top: var(--space-4);
  border-top: 1px solid var(--color-border);
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-4);
  justify-content: space-between;
  align-items: center;
  max-width: var(--container-max);
  margin-left: auto;
  margin-right: auto;
}
.app-footer__legal {
  font-family: var(--font-mono);
  font-size: 10px;
  color: var(--color-text-tertiary);
  letter-spacing: 0.04em;
}
.app-footer__legal strong { color: var(--color-text-secondary); font-weight: var(--weight-semi); }
.app-footer__stamp {
  font-family: var(--font-mono);
  font-size: 10px;
  color: var(--color-text-tertiary);
  letter-spacing: 0.05em;
  display: inline-flex;
  align-items: center;
  gap: 6px;
}
.app-footer__stamp-dot {
  width: 6px; height: 6px; border-radius: 50%;
  background: var(--color-pos);
  box-shadow: 0 0 0 3px rgba(22,163,74,0.15);
}

/* ============================================================
   Loading state — 统一
   ============================================================ */
.loading-wrap {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: var(--space-3);
  padding: var(--space-10) var(--space-6);
  color: var(--color-text-tertiary);
  font-size: var(--text-sm);
  font-family: var(--font-mono);
  letter-spacing: 0.04em;
}
.loading-spinner {
  width: 18px; height: 18px;
  border: 2px solid var(--color-border);
  border-top-color: var(--color-brand-accent);
  border-radius: 50%;
  animation: loading-spin 0.8s linear infinite;
}
@keyframes loading-spin {
  to { transform: rotate(360deg); }
}
.loading-bar {
  width: 100%;
  max-width: 220px;
  height: 2px;
  background: var(--color-border);
  border-radius: var(--radius-pill);
  overflow: hidden;
  position: relative;
}
.loading-bar::after {
  content: '';
  position: absolute;
  inset: 0;
  background: linear-gradient(90deg, transparent, var(--color-brand-accent), transparent);
  animation: loading-slide 1.4s ease-in-out infinite;
}
@keyframes loading-slide {
  0% { transform: translateX(-100%); }
  100% { transform: translateX(100%); }
}

/* 错误状态 */
.error-state {
  border: 1px solid var(--color-border);
  background: var(--color-bg);
  border-radius: var(--radius-lg);
  padding: var(--space-7);
  text-align: center;
  max-width: 480px;
  margin: var(--space-9) auto;
}
.error-state__code {
  font-family: var(--font-mono);
  font-size: 11px;
  color: var(--color-neg);
  letter-spacing: 0.08em;
  text-transform: uppercase;
  margin-bottom: var(--space-2);
}
.error-state__title {
  font-size: var(--text-xl);
  font-weight: var(--weight-semi);
  letter-spacing: -0.015em;
  margin: 0 0 var(--space-2);
}
.error-state__desc {
  color: var(--color-text-secondary);
  font-size: var(--text-sm);
  margin-bottom: var(--space-4);
}

/* nav 扩展：第二行 sub-tabs，用于 7 项导航在窄屏时不挤压 */
.app-nav__links--wide { gap: 0; }
.app-nav__links--wide .app-nav__link {
  padding: 6px 10px;
  font-size: var(--text-base);
  white-space: nowrap;
}

/* Nav 视觉分组（3 层）
   仪表盘 / 信号 / 实时流 / 监控池  ‖  日历 / 失败库  ‖  模拟盘 / 方法论 */
.app-nav__divider {
  display: inline-block;
  width: 2px;
  height: 16px;
  background: var(--color-border);
  margin: 0 8px;
  vertical-align: middle;
  flex-shrink: 0;
}

/* ============================================================
   决策辅助语言（banner 内部样式变体 + 操作建议 chip）
   ============================================================ */

/* banner 样式变体（compliance-banner--internal） */
.compliance-banner--internal {
  background: #F1F5F9;
  border-bottom: 1px solid #CBD5E1;
  color: #0F172A;
  font-family: var(--font-mono);
  letter-spacing: 0.03em;
}
.compliance-banner--internal .compliance-banner__icon { color: #475569; }
.compliance-banner--internal strong { color: #0F172A; font-weight: var(--weight-semi); }
.compliance-banner--internal .compliance-banner__meta {
  color: #64748B;
  font-size: 10px;
  margin-left: 6px;
}

/* 操作建议 chip 通用 */
.trade-rec {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 2px 8px;
  border-radius: var(--radius-pill);
  font-size: var(--text-xs);
  font-weight: var(--weight-semi);
  font-family: var(--font-sans);
  white-space: nowrap;
  line-height: 1.4;
}
.trade-rec__dot {
  width: 6px; height: 6px; border-radius: 50%;
}
.trade-rec--buy        { background: #DCFCE7; color: #166534; }
.trade-rec--buy .trade-rec__dot   { background: #16A34A; }
.trade-rec--add        { background: #DBEAFE; color: #1E40AF; }
.trade-rec--add .trade-rec__dot   { background: #2563EB; }
.trade-rec--hold       { background: #F1F5F9; color: #334155; }
.trade-rec--hold .trade-rec__dot  { background: #64748B; }
.trade-rec--watch      { background: #FEF3C7; color: #92400E; }
.trade-rec--watch .trade-rec__dot { background: #D97706; }
.trade-rec--reduce     { background: #FED7AA; color: var(--color-warn-text-strong); }
.trade-rec--reduce .trade-rec__dot{ background: #EA580C; }
.trade-rec--sell       { background: #FEE2E2; color: #991B1B; }
.trade-rec--sell .trade-rec__dot  { background: #DC2626; }
.trade-rec--clear      { background: #1F2937; color: #FFFFFF; }
.trade-rec--clear .trade-rec__dot { background: #FFFFFF; }

/* 目标价 / 止损位 数字单元（表格列） */
.price-target {
  font-family: var(--font-mono);
  font-size: var(--text-sm);
  color: #16A34A;
  font-weight: var(--weight-semi);
  letter-spacing: 0.02em;
  display: inline-flex;
  flex-direction: column;
  line-height: 1.2;
}
.price-target__label {
  font-size: var(--text-xs);
  color: var(--color-text-tertiary);
  font-weight: var(--weight-normal);
  letter-spacing: 0.06em;
  text-transform: uppercase;
}
.price-stop {
  font-family: var(--font-mono);
  font-size: var(--text-sm);
  color: #DC2626;
  font-weight: var(--weight-semi);
  letter-spacing: 0.02em;
  display: inline-flex;
  flex-direction: column;
  line-height: 1.2;
}
.price-stop__label {
  font-size: var(--text-xs);
  color: var(--color-text-tertiary);
  font-weight: var(--weight-normal);
  letter-spacing: 0.06em;
  text-transform: uppercase;
}

/* 买入信号 chip（精选池新进） */
.signal-flag {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 2px 6px;
  border-radius: 3px;
  font-size: 10px;
  font-weight: var(--weight-semi);
  font-family: var(--font-mono);
  letter-spacing: 0.05em;
  text-transform: uppercase;
}
.signal-flag--buy   { background: #16A34A; color: #FFFFFF; }
.signal-flag--sell  { background: #DC2626; color: #FFFFFF; }
.signal-flag--alert { background: #F59E0B; color: #FFFFFF; }

/* 操作建议卡（company 画像页） */
.trade-plan {
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  background: linear-gradient(180deg, #FAFBFC 0%, #FFFFFF 100%);
  padding: var(--space-5);
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: var(--space-4);
}
.trade-plan__header {
  grid-column: 1 / -1;
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding-bottom: var(--space-3);
  border-bottom: 1px solid var(--color-border);
  margin-bottom: 4px;
}
.trade-plan__title {
  font-family: var(--font-sans);
  font-size: var(--text-md);
  font-weight: var(--weight-semi);
  color: var(--color-text-primary);
  display: flex;
  align-items: center;
  gap: 8px;
}
.trade-plan__title-mark {
  width: 4px; height: 16px;
  background: var(--color-brand-accent, #2563EB);
  border-radius: 2px;
}
.trade-plan__item {
  display: flex;
  flex-direction: column;
  gap: 4px;
}
.trade-plan__label {
  font-size: var(--text-xs);
  color: var(--color-text-tertiary);
  letter-spacing: 0.03em;
}
.trade-plan__value {
  font-family: var(--font-mono);
  font-size: var(--text-md);
  font-weight: var(--weight-semi);
  color: var(--color-text-primary);
  letter-spacing: 0.02em;
}
.trade-plan__value--pos { color: #16A34A; }
.trade-plan__value--neg { color: #DC2626; }
.trade-plan__hint {
  font-size: 10px;
  color: var(--color-text-tertiary);
  font-family: var(--font-sans);
  margin-top: 2px;
}
.trade-plan__row-targets {
  grid-column: 1 / -1;
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: var(--space-3);
  padding-top: var(--space-3);
  border-top: 1px solid var(--color-border);
  margin-top: 2px;
}
.trade-plan__target {
  display: flex;
  flex-direction: column;
  gap: 4px;
  padding: 8px 10px;
  border-radius: var(--radius-sm);
  background: #F8FAFC;
}
.trade-plan__target--conservative { border-left: 3px solid #64748B; }
.trade-plan__target--neutral      { border-left: 3px solid #2563EB; }
.trade-plan__target--optimistic   { border-left: 3px solid #16A34A; }
.trade-plan__target-name {
  font-size: 10px;
  color: var(--color-text-tertiary);
  letter-spacing: 0.05em;
  text-transform: uppercase;
}
.trade-plan__target-price {
  font-family: var(--font-mono);
  font-size: var(--text-md);
  font-weight: var(--weight-semi);
  color: var(--color-text-primary);
}
.trade-plan__target-pct {
  font-size: 10px;
  color: #16A34A;
  font-family: var(--font-mono);
  font-weight: var(--weight-semi);
}

/* 今日操作建议卡片（dashboard） */
.action-summary {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: var(--space-4);
  padding: var(--space-5);
  background: linear-gradient(135deg, #1E293B 0%, #0F172A 100%);
  border-radius: var(--radius-md);
  color: #E2E8F0;
  margin-bottom: var(--space-5);
}
.action-summary__item {
  display: flex;
  flex-direction: column;
  gap: 6px;
  padding: 0 var(--space-3);
  border-left: 2px solid rgba(255,255,255,0.1);
}
.action-summary__item:first-child { border-left: none; }
.action-summary__label {
  font-size: var(--text-xs);
  color: #94A3B8;
  letter-spacing: 0.05em;
}
.action-summary__count {
  font-family: var(--font-mono);
  font-size: 28px;
  font-weight: var(--weight-semi);
  letter-spacing: -0.02em;
  display: flex;
  align-items: baseline;
  gap: 8px;
}
.action-summary__count strong { color: #FFFFFF; }
.action-summary__count-unit { font-size: var(--text-xs); color: #94A3B8; font-weight: var(--weight-normal); }
.action-summary__detail {
  font-size: var(--text-xs);
  color: #CBD5E1;
  line-height: 1.5;
}
.action-summary__count--buy strong    { color: #4ADE80; }
.action-summary__count--reduce strong { color: #FB923C; }
.action-summary__count--profit strong { color: #38BDF8; }

/* 操作时间点（company 时间线 marker） */
.timeline-action {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 1px 6px;
  border-radius: 3px;
  font-size: 10px;
  font-weight: var(--weight-semi);
  letter-spacing: 0.05em;
}
.timeline-action--buy    { background: #DCFCE7; color: #166534; }
.timeline-action--sell   { background: #FEE2E2; color: #991B1B; }
.timeline-action--reduce { background: var(--color-warn-bg-strong); color: var(--color-warn-text-strong); }

/* ============================================================
   Endlinks · 全站底部跨页 CTA（Fix-D）
   范式：simulator.html 底部已用，现复制到 about/calendar/failed/monitor/live
   ============================================================ */
.endlinks {
  margin-top: var(--space-7);
  padding: var(--space-5) var(--space-5);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-lg);
  background: var(--color-bg-alt);
  display: grid;
  grid-template-columns: 1fr auto;
  align-items: center;
  gap: var(--space-4);
}
.endlinks__text {
  font-size: var(--text-base);
  color: var(--color-text-secondary);
  line-height: 1.6;
}
.endlinks__text strong {
  color: var(--color-text-primary);
  font-weight: var(--weight-medium);
}
.endlinks__actions { display: flex; gap: 8px; flex-wrap: wrap; }
.endlinks__btn {
  height: 32px;
  padding: 0 14px;
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  background: var(--color-bg);
  font-size: var(--text-sm);
  color: var(--color-text-primary);
  display: inline-flex; align-items: center; gap: 6px;
  font-weight: var(--weight-medium);
  transition: border-color var(--duration-fast), background var(--duration-fast);
}
.endlinks__btn:hover { border-color: var(--color-text-primary); background: var(--color-bg); }
.endlinks__btn--primary { background: var(--color-brand); color: white; border-color: var(--color-brand); }
.endlinks__btn--primary:hover { background: var(--color-brand-hover); border-color: var(--color-brand-hover); }
.endlinks__btn svg { width: 12px; height: 12px; }

@media (max-width: 720px) {
  .endlinks { grid-template-columns: 1fr; }
}

/* ============================================================
   IxD 交互骨架
   - 顶导 aria-current 底线
   - 卡片 hover/focus 提升
   - link hit-area 扩展（Fitts）
   - skeleton loading
   - ⌘K 搜索 modal
   - 移动端基础适配 + 汉堡菜单
   修改原则：仅追加新规则，不破坏既有 dense 表格密度
   ============================================================ */

/* ---- 1. 顶导当前页底线 active ---- */
.app-nav__link[aria-current="page"] {
  color: var(--color-text-primary);
  font-weight: var(--weight-semi);
  position: relative;
  background: transparent;
}
.app-nav__link[aria-current="page"]::after {
  content: '';
  position: absolute;
  left: 8px;
  right: 8px;
  bottom: -14px;
  height: 2px;
  background: var(--color-text-primary);
  border-radius: 1px;
}

/* ---- 2. 通用 hover / focus-visible ---- */
.app-nav__link:focus-visible,
.btn:focus-visible,
.filter-pill:focus-visible,
.toggle-group__btn:focus-visible,
.endlinks__btn:focus-visible,
a.link-btn:focus-visible,
.search-trigger:focus-visible {
  outline: 2px solid var(--color-brand-accent);
  outline-offset: 2px;
}

/* 卡片 hover lift（首页 / 仪表盘卡片可用） */
.card-hover,
.entry-card,
.home-card,
.dashboard-card {
  transition: transform var(--duration-fast) var(--easing),
              box-shadow var(--duration-fast) var(--easing),
              border-color var(--duration-fast) var(--easing);
}
.card-hover:hover,
.entry-card:hover,
.home-card:hover,
.dashboard-card:hover {
  transform: translateY(-2px);
  box-shadow: var(--shadow-lg);
  border-color: var(--color-border-strong);
}
.card-hover:focus-visible,
.entry-card:focus-visible,
.home-card:focus-visible,
.dashboard-card:focus-visible {
  outline: 2px solid var(--color-brand-accent);
  outline-offset: 2px;
}

/* ---- 3. CTA 大按钮（≥ 44×44 Fitts 定律） ---- */
.btn--cta {
  min-height: 44px;
  padding: 10px 18px;
  font-size: var(--text-md);
  font-weight: var(--weight-semi);
}
.btn--cta-primary {
  min-height: 44px;
  padding: 10px 20px;
  font-size: var(--text-md);
  font-weight: var(--weight-semi);
  background: var(--color-brand);
  color: white;
  border: 1px solid var(--color-brand);
  border-radius: var(--radius-md);
  display: inline-flex;
  align-items: center;
  gap: 8px;
  transition: background var(--duration-fast), transform var(--duration-fast);
}
.btn--cta-primary:hover { background: var(--color-brand-hover); transform: translateY(-1px); }

/* ---- 4. Hit-area 扩展（小链接外裹透明 padding，视觉不变命中区扩大）---- */
/* dashboard 的「看完整 →」、calendar 的「查看完整方法论 →」等小链接 */
.dashboard-card a[href*=".html"],
.dashboard-card-link,
.risk-card__foot a,
.fold-card__foot a,
.link-tap {
  position: relative;
  display: inline-flex;
  align-items: center;
  min-height: 32px;
  padding: 6px 4px;
  margin: -6px -4px;
  border-radius: var(--radius-sm);
  transition: background var(--duration-fast);
}
.risk-card__foot a:hover,
.fold-card__foot a:hover,
.link-tap:hover {
  background: var(--color-bg-subtle);
}

/* failed.html 的 .link-btn 行内按钮 */
.link-btn {
  min-height: 32px !important;
  padding: 6px 8px !important;
  margin: -6px -8px !important;
  border-radius: var(--radius-sm);
}
.link-btn:hover {
  background: var(--color-bg-subtle);
  text-decoration: none !important;
}

/* about.html 章节锚点 chip */
.about-toc-chip,
.toc-chip,
a.section-anchor {
  display: inline-flex;
  align-items: center;
  min-height: 32px;
  padding: 6px 12px;
  border-radius: var(--radius-pill);
  background: var(--color-bg-subtle);
  font-size: var(--text-sm);
  color: var(--color-text-secondary);
  border: 1px solid transparent;
  transition: border-color var(--duration-fast), background var(--duration-fast);
}
.about-toc-chip:hover,
.toc-chip:hover,
a.section-anchor:hover {
  background: var(--color-bg);
  border-color: var(--color-border);
  color: var(--color-text-primary);
}

/* ---- 5. Loading skeleton ---- */
.skeleton {
  display: block;
  background: linear-gradient(
    90deg,
    var(--color-bg-subtle) 25%,
    var(--color-border-subtle) 50%,
    var(--color-bg-subtle) 75%
  );
  background-size: 200% 100%;
  animation: skeleton-pulse 1.5s ease-in-out infinite;
  border-radius: var(--radius-sm);
  min-height: 14px;
}
.skeleton-text { height: 14px; margin: 6px 0; }
.skeleton-row { height: 40px; margin: 8px 0; }
.skeleton-num { height: 28px; width: 80px; }
.skeleton-block { min-height: 80px; }
@keyframes skeleton-pulse {
  0%   { background-position: 200% 0; }
  100% { background-position: -200% 0; }
}

/* loading-button：按钮内嵌 spinner，禁用状态 */
.btn.is-loading,
.btn--cta-primary.is-loading,
.endlinks__btn--primary.is-loading {
  pointer-events: none;
  opacity: 0.85;
  position: relative;
}
.btn.is-loading::before,
.btn--cta-primary.is-loading::before,
.endlinks__btn--primary.is-loading::before {
  content: '';
  display: inline-block;
  width: 12px;
  height: 12px;
  border: 2px solid currentColor;
  border-top-color: transparent;
  border-radius: 50%;
  margin-right: 8px;
  animation: loading-spin 0.7s linear infinite;
  vertical-align: -2px;
}

/* ---- 6. ⌘K 搜索 modal ---- */
.ac-search-backdrop {
  position: fixed;
  inset: 0;
  background: var(--color-bg-overlay);
  z-index: 200;
  display: flex;
  align-items: flex-start;
  justify-content: center;
  padding: 14vh 16px 0;
  opacity: 0;
  pointer-events: none;
  transition: opacity 0.15s var(--easing);
}
.ac-search-backdrop.is-open {
  opacity: 1;
  pointer-events: auto;
}
.ac-search-modal {
  width: 100%;
  max-width: 560px;
  background: var(--color-bg);
  border-radius: var(--radius-lg);
  box-shadow: var(--shadow-lg);
  border: 1px solid var(--color-border);
  overflow: hidden;
  transform: translateY(-8px);
  transition: transform 0.15s var(--easing);
}
.ac-search-backdrop.is-open .ac-search-modal {
  transform: translateY(0);
}
.ac-search-modal__input-wrap {
  display: flex;
  align-items: center;
  padding: 12px 14px;
  border-bottom: 1px solid var(--color-border-subtle);
  gap: 10px;
}
.ac-search-modal__input-wrap svg {
  width: 18px; height: 18px;
  color: var(--color-text-tertiary);
  flex: 0 0 auto;
}
.ac-search-modal__input {
  flex: 1;
  border: none;
  outline: none;
  background: transparent;
  font-size: var(--text-md);
  font-family: var(--font-sans);
  color: var(--color-text-primary);
  min-height: 28px;
}
.ac-search-modal__input::placeholder { color: var(--color-text-tertiary); }
.ac-search-modal__hint {
  padding: 8px 14px;
  font-size: var(--text-xs);
  color: var(--color-text-tertiary);
  font-family: var(--font-mono);
  letter-spacing: 0.04em;
  background: var(--color-bg-alt);
  border-top: 1px solid var(--color-border-subtle);
  display: flex;
  justify-content: space-between;
  gap: 12px;
}
.ac-search-modal__hint kbd {
  font-family: var(--font-mono);
  font-size: 10px;
  padding: 2px 5px;
  border: 1px solid var(--color-border);
  border-radius: 3px;
  background: var(--color-bg);
  color: var(--color-text-secondary);
  margin: 0 2px;
}
.ac-search-modal__list {
  max-height: 320px;
  overflow-y: auto;
}
.ac-search-modal__item {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 10px 14px;
  cursor: pointer;
  font-size: var(--text-base);
  color: var(--color-text-primary);
  border-bottom: 1px solid var(--color-border-subtle);
  min-height: 44px;
}
.ac-search-modal__item:hover,
.ac-search-modal__item.is-focus {
  background: var(--color-bg-subtle);
}
.ac-search-modal__item-code {
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--color-text-tertiary);
  padding: 2px 6px;
  background: var(--color-bg-subtle);
  border-radius: var(--radius-xs);
  min-width: 60px;
  text-align: center;
}
.ac-search-modal__item.is-focus .ac-search-modal__item-code {
  background: var(--color-bg);
}
.ac-search-modal__item-meta {
  margin-left: auto;
  font-size: var(--text-xs);
  color: var(--color-text-tertiary);
}
.ac-search-modal__empty {
  padding: 24px;
  text-align: center;
  color: var(--color-text-tertiary);
  font-size: var(--text-sm);
}

/* ---- 7. 移动端基础适配 + 汉堡菜单 ---- */
.app-nav__hamburger {
  display: none;
  width: 36px;
  height: 36px;
  align-items: center;
  justify-content: center;
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  background: var(--color-bg);
  cursor: pointer;
  padding: 0;
  margin-left: auto;
}
.app-nav__hamburger svg { width: 18px; height: 18px; color: var(--color-text-primary); }

@media (max-width: 768px) {
  body { min-width: 0; overflow-x: hidden; }
  html { overflow-x: hidden; } /* clip off-screen fixed drawer on mobile (root-cause fix for nav drawer escape) */
  .container { padding: 0 var(--space-4); }

  /* 顶导：收起链接 + 露出汉堡 */
  .app-nav {
    padding: 0 var(--space-4);
    gap: var(--space-3);
  }
  .app-nav__links { display: none; }
  .app-nav__search { display: none; }
  .app-nav__hamburger { display: inline-flex; }
  .app-nav__brand-meta { display: none; }

  /* 汉堡展开 → 抽屉 */
  .app-nav__links.is-mobile-open {
    display: flex;
    flex-direction: column;
    position: fixed;
    top: var(--nav-h);
    left: 0;
    right: 0;
    background: var(--color-bg);
    border-bottom: 1px solid var(--color-border);
    box-shadow: var(--shadow-lg);
    padding: var(--space-3);
    gap: 4px;
    z-index: 100;
  }
  .app-nav__links.is-mobile-open .app-nav__link {
    padding: 12px 14px;
    min-height: 44px;
    border-radius: var(--radius-md);
    font-size: var(--text-md);
  }
  .app-nav__links.is-mobile-open .app-nav__link[aria-current="page"]::after {
    display: none;
  }
  .app-nav__links.is-mobile-open .app-nav__link[aria-current="page"] {
    background: var(--color-bg-subtle);
  }

  /* KPI 三件套垂直堆叠 */
  .kpi-strip { flex-direction: column; }
  .kpi-strip__item { border-right: none; border-bottom: 1px solid var(--color-border); }
  .kpi-strip__item:last-child { border-bottom: none; }

  /* footer 收单列 */
  .app-footer__inner { grid-template-columns: 1fr; gap: var(--space-5); }

  /* 表格横向滚动 */
  .dt { font-size: var(--text-sm); }
  .panel__body--flush { overflow-x: auto; }
}

/* ---- 8. URL filter highlight（?q= deep link 高亮）---- */
.dt tbody tr.is-search-match {
  background: #FFF7ED;
  box-shadow: inset 3px 0 0 var(--color-warn);
}
.dt tbody tr.is-search-match:hover {
  background: #FFEDD5;
}
.search-active-banner {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 8px 14px;
  background: var(--color-info-bg);
  border: 1px solid #BFDBFE;
  border-radius: var(--radius-md);
  font-size: var(--text-sm);
  color: #1E40AF;
  margin-bottom: var(--space-3);
}
.search-active-banner button {
  margin-left: auto;
  background: transparent;
  border: none;
  color: #1E40AF;
  font-weight: var(--weight-medium);
  cursor: pointer;
  font-size: var(--text-sm);
  padding: 4px 8px;
  border-radius: var(--radius-sm);
  min-height: 28px;
}
.search-active-banner button:hover { background: rgba(37,99,235,0.08); }

/* ---- 9. is-active tab 视觉强化（live tab 等）---- */
.toggle-group__btn[aria-pressed="true"],
.toggle-group__btn.is-active {
  position: relative;
}


/* ============================================================
   文案-2 · 大白话改造组件（2026-06-04）
   - chapter-tldr: 章节一句话总结
   - figure-note:  图表解读注释
   - term-tip:     术语解释 inline tooltip
   ============================================================ */
.chapter-tldr {
  display: flex;
  gap: 10px;
  align-items: flex-start;
  padding: 12px 16px;
  margin: 8px 0 20px;
  background: #FFFBEB;
  border-left: 3px solid #F59E0B;
  border-radius: 0 var(--radius-md) var(--radius-md) 0;
  font-size: var(--text-md);
  color: #78350F;
  line-height: 1.6;
}
.chapter-tldr__icon {
  flex: 0 0 auto;
  font-size: 14px;
  line-height: 1.5;
}
.chapter-tldr__text {
  flex: 1;
}
.chapter-tldr__text strong {
  color: #92400E;
  font-weight: var(--weight-semi);
  margin-right: 4px;
}

.figure-note {
  margin: 8px 0 16px;
  padding: 10px 14px;
  background: var(--color-info-bg);
  border-left: 3px solid var(--color-info);
  border-radius: 0 var(--radius-sm) var(--radius-sm) 0;
  font-size: var(--text-sm);
  color: #1E3A8A;
  line-height: 1.6;
}
.figure-note strong {
  color: #1E40AF;
  font-weight: var(--weight-semi);
}

.term-tip {
  border-bottom: 1px dotted var(--color-text-tertiary);
  cursor: help;
  position: relative;
}
.term-tip:hover {
  border-bottom-color: var(--color-brand-accent);
  color: var(--color-brand-accent);
}

.plain-lead {
  font-size: var(--text-md);
  line-height: 1.7;
  color: var(--color-text-secondary);
  background: var(--color-bg-alt);
  padding: 14px 18px;
  border-radius: var(--radius-md);
  margin: 0 0 var(--space-5);
  border: 1px solid var(--color-border-subtle);
}
.plain-lead strong { color: var(--color-text-primary); }

/* ============================================================
   Agent-A · S3 全站数据时点 Banner（nav 下方薄条，≤ 28px）
   ============================================================ */
.data-strip {
  height: 28px;
  background: var(--color-bg-alt);
  border-bottom: 1px solid var(--color-border);
  display: flex;
  align-items: center;
  padding: 0 var(--space-6);
  gap: var(--space-3);
  font-size: 11px;
  color: var(--color-text-secondary);
  font-family: var(--font-mono);
  letter-spacing: 0.02em;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.data-strip__dot {
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: var(--color-pos);
  flex-shrink: 0;
  box-shadow: 0 0 0 3px rgba(22, 163, 74, 0.12);
  animation: data-strip-pulse 2.4s ease-in-out infinite;
}
@keyframes data-strip-pulse {
  0%, 100% { box-shadow: 0 0 0 3px rgba(22,163,74,0.12); }
  50%      { box-shadow: 0 0 0 5px rgba(22,163,74,0.04); }
}
.data-strip__sep { color: var(--color-border-strong); }
.data-strip__label { color: var(--color-text-tertiary); }
.data-strip__val   { color: var(--color-text-primary); font-weight: var(--weight-medium); }
@media (max-width: 768px) {
  .data-strip { font-size: 10px; padding: 0 var(--space-3); gap: var(--space-2); }
  .data-strip__sep:nth-of-type(n+3) { display: none; }
  .data-strip span:nth-of-type(n+5) { display: none; }
}

/* ============================================================
   Agent-A · S8 移动端轻提示
   ============================================================ */
.mobile-hint {
  display: none;
  align-items: center;
  gap: var(--space-2);
  padding: 10px 14px;
  background: linear-gradient(180deg, #FEF3C7 0%, #FFFBEB 100%);
  border-bottom: 1px solid #FCD34D;
  font-size: 12px;
  color: #78350F;
  line-height: 1.4;
}
.mobile-hint__icon {
  flex-shrink: 0;
  width: 16px;
  height: 16px;
  color: #B45309;
}
.mobile-hint__text { flex: 1; }
.mobile-hint__text strong { color: #78350F; font-weight: 600; }
.mobile-hint__close {
  background: none;
  border: 1px solid #D97706;
  color: #92400E;
  border-radius: 4px;
  font-size: 11px;
  padding: 3px 8px;
  cursor: pointer;
  flex-shrink: 0;
}
.mobile-hint__close:hover { background: #D97706; color: white; }
@media (max-width: 767px) {
  .mobile-hint:not(.is-dismissed) { display: flex; }
}

/* ============================================================
   Agent-A · P0-5 monitor 1440 横向溢出修复（响应式 wrap + scroll 容器）
   ============================================================ */
.monitor-scroll {
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
  scrollbar-width: thin;
}
.monitor-scroll::-webkit-scrollbar { height: 8px; }
.monitor-scroll::-webkit-scrollbar-track { background: var(--color-bg-alt); }
.monitor-scroll::-webkit-scrollbar-thumb { background: var(--color-border-strong); border-radius: 4px; }
.monitor-scroll > .dt { min-width: 980px; }
@media (max-width: 1440px) {
  .grid-monitor { grid-template-columns: 1fr; gap: var(--space-4); }
  .grid-monitor > aside { max-width: 100%; }
}
@media (max-width: 1280px) {
  .alert-item { grid-template-columns: 24px 1fr; row-gap: 6px; }
  .alert-item__time { grid-column: 2; font-size: 10px; }
  .alert-item > div:last-child { grid-column: 2; }
  .alert-item__title { flex-wrap: wrap; }
}

/* ============================================================
   Agent-A · S6 dashboard "今日变化" strip
   ============================================================ */
.today-strip {
  display: grid;
  grid-template-columns: repeat(4, 1fr) auto;
  gap: 1px;
  background: var(--color-border);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-lg);
  overflow: hidden;
  margin-bottom: var(--space-5);
  cursor: pointer;
  transition: box-shadow var(--duration-fast) var(--easing);
}
.today-strip:hover { box-shadow: var(--shadow-md); }
.today-strip__cell {
  background: var(--color-bg);
  padding: 12px 16px;
  display: flex;
  flex-direction: column;
  gap: 2px;
}
.today-strip__cell-label {
  font-size: 11px;
  color: var(--color-text-tertiary);
  letter-spacing: 0.04em;
  text-transform: uppercase;
}
.today-strip__cell-value {
  font-family: var(--font-mono);
  font-size: 20px;
  font-weight: 600;
  color: var(--color-text-primary);
  letter-spacing: -0.01em;
}
.today-strip__cell-value.is-pos { color: var(--color-pos-strong); }
.today-strip__cell-value.is-neg { color: var(--color-neg-strong); }
.today-strip__cell-value.is-warn { color: var(--color-warn-text-strong); }
.today-strip__expand {
  background: var(--color-bg-alt);
  padding: 12px 16px;
  display: flex;
  align-items: center;
  gap: 6px;
  font-size: 12px;
  color: var(--color-text-secondary);
}
.today-strip__expand svg {
  transition: transform var(--duration-fast) var(--easing);
}
.today-strip.is-open .today-strip__expand svg {
  transform: rotate(180deg);
}
.today-strip__detail {
  background: var(--color-bg);
  border: 1px solid var(--color-border);
  border-top: none;
  border-radius: 0 0 var(--radius-lg) var(--radius-lg);
  margin-top: calc(var(--space-5) * -1);
  margin-bottom: var(--space-5);
  padding: 0;
  max-height: 0;
  overflow: hidden;
  transition: max-height var(--duration-base) var(--easing), padding var(--duration-base) var(--easing);
}
.today-strip__detail.is-open {
  max-height: 800px;
  padding: var(--space-3) var(--space-4);
}
.today-strip__detail-list {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
  gap: var(--space-2);
}
.today-strip__detail-item {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 6px 10px;
  border: 1px solid var(--color-border-subtle);
  border-radius: var(--radius-sm);
  font-size: 12px;
}
.today-strip__detail-item .mono { font-size: 11px; color: var(--color-text-secondary); }
.today-strip__detail-item-tag {
  font-size: 10px;
  padding: 1px 6px;
  border-radius: var(--radius-sm);
  font-weight: 500;
  flex-shrink: 0;
}
.today-strip__detail-item-tag.is-new { background: var(--color-info-bg); color: #1E40AF; }
.today-strip__detail-item-tag.is-up { background: var(--color-pos-bg); color: #166534; }
.today-strip__detail-item-tag.is-down { background: var(--color-neg-bg); color: #991B1B; }
.today-strip__detail-item-tag.is-exit { background: var(--color-warn-bg); color: #9A3412; }
@media (max-width: 768px) {
  .today-strip { grid-template-columns: repeat(2, 1fr); }
  .today-strip__expand { grid-column: 1 / -1; justify-content: center; }
}

/* ============================================================
   Agent-A · S7 ⌘K Search Modal（升级 site-common.js 中已有骨架的视觉）
   ============================================================ */
.ac-search-backdrop {
  position: fixed;
  inset: 0;
  background: rgba(15, 23, 42, 0.55);
  display: none;
  align-items: flex-start;
  justify-content: center;
  z-index: 9500;
  padding-top: 12vh;
  backdrop-filter: blur(2px);
}
.ac-search-backdrop.is-open { display: flex; }
.ac-search-modal {
  width: min(640px, 92vw);
  background: var(--color-bg);
  border-radius: var(--radius-xl);
  box-shadow: 0 24px 64px rgba(15, 23, 42, 0.25);
  overflow: hidden;
  display: flex;
  flex-direction: column;
  max-height: 70vh;
}
.ac-search-modal__input-wrap {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 14px 18px;
  border-bottom: 1px solid var(--color-border);
}
.ac-search-modal__input-wrap svg {
  width: 18px;
  height: 18px;
  color: var(--color-text-tertiary);
  flex-shrink: 0;
}
.ac-search-modal__input {
  flex: 1;
  border: none;
  outline: none;
  font-size: 15px;
  background: transparent;
  color: var(--color-text-primary);
  font-family: var(--font-sans);
}
.ac-search-modal__input::placeholder { color: var(--color-text-tertiary); }
.ac-search-modal__list {
  flex: 1;
  overflow-y: auto;
  padding: 6px;
  min-height: 60px;
}
.ac-search-modal__empty {
  padding: 28px 18px;
  text-align: center;
  font-size: 13px;
  color: var(--color-text-tertiary);
}
.ac-search-modal__item {
  display: grid;
  grid-template-columns: 96px 1fr auto;
  gap: 12px;
  align-items: center;
  padding: 10px 12px;
  border-radius: var(--radius-md);
  cursor: pointer;
  font-size: 13px;
  color: var(--color-text-primary);
}
.ac-search-modal__item.is-focus { background: var(--color-info-bg); }
.ac-search-modal__item-code {
  font-family: var(--font-mono);
  font-size: 12px;
  color: var(--color-text-secondary);
  font-variant-numeric: tabular-nums;
  letter-spacing: -0.005em;
}
.ac-search-modal__item.is-focus .ac-search-modal__item-code { color: var(--color-brand-accent); }
.ac-search-modal__item-meta {
  font-size: 11px;
  color: var(--color-text-tertiary);
  font-family: var(--font-mono);
}
.ac-search-modal__item-score {
  display: inline-block;
  font-family: var(--font-mono);
  font-size: 11px;
  padding: 2px 6px;
  border-radius: var(--radius-sm);
  background: var(--color-neutral-bg);
  color: var(--color-text-secondary);
  margin-left: 6px;
}
.ac-search-modal__item-score.is-featured { background: var(--color-pos-bg); color: #166534; }
.ac-search-modal__item-score.is-watch    { background: var(--color-warn-bg); color: #9A3412; }
.ac-search-modal__hint {
  border-top: 1px solid var(--color-border);
  padding: 8px 14px;
  font-size: 11px;
  color: var(--color-text-tertiary);
  display: flex;
  justify-content: space-between;
  background: var(--color-bg-alt);
}
.ac-search-modal__hint kbd {
  display: inline-block;
  padding: 1px 5px;
  border: 1px solid var(--color-border-strong);
  border-radius: 3px;
  background: var(--color-bg);
  font-family: var(--font-mono);
  font-size: 10px;
  margin: 0 2px;
}

/* ============================================================
   Agent-A · 自定义列 modal（信号/监控复用）
   ============================================================ */
.ac-cols-modal {
  position: fixed;
  inset: 0;
  display: none;
  align-items: center;
  justify-content: center;
  background: rgba(15, 23, 42, 0.45);
  z-index: 9100;
}
.ac-cols-modal.is-open { display: flex; }
.ac-cols-modal__panel {
  width: min(420px, 92vw);
  background: var(--color-bg);
  border-radius: var(--radius-xl);
  overflow: hidden;
  box-shadow: 0 24px 48px rgba(15, 23, 42, 0.22);
}
.ac-cols-modal__head {
  padding: 14px 20px;
  border-bottom: 1px solid var(--color-border);
  display: flex;
  align-items: center;
  justify-content: space-between;
}
.ac-cols-modal__head h3 { margin: 0; font-size: 15px; font-weight: 600; }
.ac-cols-modal__close { background: none; border: none; cursor: pointer; font-size: 20px; color: var(--color-text-tertiary); }
.ac-cols-modal__body { padding: 14px 20px; max-height: 60vh; overflow-y: auto; }
.ac-cols-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 8px 0;
  border-bottom: 1px solid var(--color-border-subtle);
  font-size: 13px;
}
.ac-cols-row:last-child { border-bottom: none; }
.ac-cols-row__label { color: var(--color-text-primary); }
.ac-cols-row__hint { font-size: 11px; color: var(--color-text-tertiary); font-family: var(--font-mono); }
.ac-cols-row input[type="checkbox"] { width: 16px; height: 16px; cursor: pointer; }
.ac-cols-modal__foot {
  padding: 12px 20px;
  border-top: 1px solid var(--color-border);
  background: var(--color-bg-alt);
  display: flex;
  justify-content: flex-end;
  gap: 8px;
}

/* ============================================================
   Agent-A · industry badge（S4）
   ============================================================ */
.industry-badge {
  display: inline-block;
  font-size: 10px;
  padding: 1px 6px;
  border-radius: var(--radius-sm);
  background: var(--color-neutral-bg);
  color: var(--color-text-secondary);
  font-weight: 500;
  letter-spacing: 0.02em;
  white-space: nowrap;
}

/* ============================================================
   Agent-A · filter-pill 激活 + 自定义状态
   ============================================================ */
.filter-pill.is-loading { opacity: 0.5; pointer-events: none; }
.filter-pill__remove {
  margin-left: 4px;
  font-size: 12px;
  color: var(--color-text-tertiary);
  cursor: pointer;
}
.filter-pill.is-active .filter-pill__remove { color: rgba(255,255,255,0.7); }
.filter-pill.is-active .filter-pill__remove:hover { color: white; }

/* signals 行：filter 隐藏 */
tr.is-filtered-out { display: none !important; }

/* ============================================================
   F3-D · nav-dropdown · 研究下拉（7 项专题入口）
   触发：hover / focus-within / .is-open（JS 可选）
   位置：nav 项下方，sticky 不挡其他内容
   ============================================================ */
.app-nav__link--has-dropdown {
  position: relative;
  cursor: default;
  display: inline-flex;
  align-items: center;
  gap: 4px;
}
.app-nav__link--has-dropdown::after {
  content: '';
  display: inline-block;
  width: 0;
  height: 0;
  border-left: 3px solid transparent;
  border-right: 3px solid transparent;
  border-top: 4px solid currentColor;
  margin-left: 4px;
  opacity: 0.55;
  transition: transform var(--duration-fast) var(--easing), opacity var(--duration-fast) var(--easing);
}
.app-nav__has-dropdown {
  position: relative;
  display: inline-flex;
  align-items: center;
}
.app-nav__dropdown {
  position: absolute;
  top: calc(100% + 4px);
  left: 0;
  min-width: 220px;
  background: rgba(255, 255, 255, 0.98);
  backdrop-filter: saturate(160%) blur(8px);
  -webkit-backdrop-filter: saturate(160%) blur(8px);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  box-shadow: 0 8px 24px rgba(15, 23, 42, 0.08), 0 2px 6px rgba(15, 23, 42, 0.04);
  padding: 6px;
  display: flex;
  flex-direction: column;
  gap: 1px;
  z-index: 80;
  opacity: 0;
  visibility: hidden;
  transform: translateY(-4px);
  transition: opacity var(--duration-fast) var(--easing),
              transform var(--duration-fast) var(--easing),
              visibility 0s linear var(--duration-fast);
}
.app-nav__has-dropdown:hover .app-nav__dropdown,
.app-nav__has-dropdown:focus-within .app-nav__dropdown,
.app-nav__has-dropdown.is-open .app-nav__dropdown {
  opacity: 1;
  visibility: visible;
  transform: translateY(0);
  transition: opacity var(--duration-fast) var(--easing),
              transform var(--duration-fast) var(--easing),
              visibility 0s linear 0s;
}
.app-nav__has-dropdown:hover .app-nav__link--has-dropdown::after,
.app-nav__has-dropdown:focus-within .app-nav__link--has-dropdown::after {
  opacity: 1;
  transform: rotate(180deg);
}
.app-nav__dropdown-item {
  display: flex;
  flex-direction: column;
  gap: 2px;
  padding: 8px 12px;
  border-radius: var(--radius-sm);
  font-size: var(--text-base);
  color: var(--color-text-secondary);
  text-decoration: none;
  transition: background var(--duration-fast) var(--easing),
              color var(--duration-fast) var(--easing);
  white-space: nowrap;
}
.app-nav__dropdown-item:hover,
.app-nav__dropdown-item:focus-visible {
  background: var(--color-bg-subtle);
  color: var(--color-text-primary);
}
.app-nav__dropdown-item small {
  font-family: var(--font-mono);
  font-size: 10px;
  letter-spacing: 0.06em;
  color: var(--color-text-tertiary);
  text-transform: uppercase;
}
.app-nav__dropdown-divider {
  height: 1px;
  background: var(--color-border);
  margin: 4px 6px;
}

/* Mobile：下拉改 inline 折叠（默认展开，跟 nav 一起进抽屉） */
@media (max-width: 768px) {
  .app-nav__links.is-mobile-open .app-nav__has-dropdown {
    width: 100%;
    flex-direction: column;
    align-items: stretch;
  }
  .app-nav__links.is-mobile-open .app-nav__link--has-dropdown {
    width: 100%;
  }
  .app-nav__links.is-mobile-open .app-nav__dropdown {
    position: static;
    opacity: 1;
    visibility: visible;
    transform: none;
    box-shadow: none;
    background: transparent;
    backdrop-filter: none;
    border: none;
    border-left: 2px solid var(--color-border);
    border-radius: 0;
    margin: 4px 0 8px 16px;
    padding: 4px 0 4px 8px;
    min-width: 0;
  }
}

/* ============================================================
   F3-D · index hero 研究专题 6 张卡 grid 扩展
   兼容现有 .gateway__grid（4 列），新增 2x3 容器
   ============================================================ */
.gateway__grid--6 {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 16px;
}
@media (max-width: 1180px) {
  .gateway__grid--6 { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 720px) {
  .gateway__grid--6 { grid-template-columns: 1fr; }
}
.gateway__card--ind .gateway__card-num { color: var(--color-info, #2563EB); }
.gateway__card--cong .gateway__card-num { color: #7C3AED; }
.gateway__card--radar .gateway__card-num { color: var(--color-pos); }

/* ============================================================
   F9-C · 全站移动端基建（tokens + nav 抽屉精修 + 底部 toolbar + mobile-hint 精致化）
   2026-06-05
   桌面优先、移动端 polish；对标 Notion iOS / Bear 移动端
   ============================================================ */

:root {
  /* ---------- F9-C 移动端专用 token ---------- */
  --mobile-padding:     16px;        /* 统一 padding（容器/卡片左右） */
  --mobile-min-touch:   44px;        /* iOS HIG 最小触控目标 */
  --mobile-text-xs:     12px;        /* 移动端 chip / 元数据 */
  --mobile-text-sm:     13px;        /* 移动端 label / 表头 */
  --mobile-text-base:   14px;        /* 移动端正文 base（桌面 13 → 移动 14） */
  --mobile-text-md:     15px;        /* 移动端文档正文 */
  --mobile-text-lg:     16px;        /* 移动端卡片标题 */
  --mobile-text-xl:     19px;        /* 移动端 section 标题 */
  --mobile-text-2xl:    22px;        /* 移动端页面标题 */
  --mobile-text-3xl:    28px;        /* 移动端关键数字 */

  /* 安全区（iPhone notch / 底部 home indicator） */
  --safe-bottom:        env(safe-area-inset-bottom, 0px);
  --safe-top:           env(safe-area-inset-top, 0px);

  /* 底部 toolbar 高度（应用层 6 页用） */
  --mobile-toolbar-h:   56px;
  --mobile-toolbar-total-h: calc(var(--mobile-toolbar-h) + var(--safe-bottom));

  /* 抽屉 */
  --mobile-drawer-w:    280px;
  --mobile-drawer-z:    1000;
  --mobile-backdrop-z:  999;
}

/* ============================================================
   F9-C · 字号梯度移动端 +1 档
   桌面 13px 正文 → 移动 14px；密度型表格在小屏上更可读
   ============================================================ */
@media (max-width: 767px) {
  body {
    font-size: var(--mobile-text-base);
  }
  /* 整体段落、卡片正文 */
  p, li, dd, dt {
    font-size: var(--mobile-text-md);
    line-height: var(--leading-base);
  }
  /* 标题梯度 */
  h1 { font-size: var(--mobile-text-2xl); line-height: var(--leading-tight); }
  h2 { font-size: var(--mobile-text-xl); line-height: var(--leading-snug); }
  h3 { font-size: var(--mobile-text-lg); line-height: var(--leading-snug); }
  h4, h5 { font-size: var(--mobile-text-md); }

  /* 表格保持密度但小放大一档（避免眯眼） */
  .dt {
    font-size: var(--mobile-text-sm);
  }
  .dt th {
    font-size: var(--mobile-text-xs);
  }

  /* 关键数字（KPI / hero） */
  .kpi-strip__num,
  .hero__metric-num,
  .stat-num {
    font-size: var(--mobile-text-3xl);
  }

  /* chip / 标签 */
  .chip, .tag, .badge {
    font-size: var(--mobile-text-xs);
  }

  /* 链接 / 按钮的可点击区域 */
  .btn, button.btn {
    min-height: var(--mobile-min-touch);
    padding-top: 10px;
    padding-bottom: 10px;
  }
  a.app-nav__link,
  .app-nav__link {
    min-height: var(--mobile-min-touch);
  }
}

/* ============================================================
   F9-C · nav 抽屉精修（右滑式 drawer + backdrop + ESC）
   F3-D / 早期 S8 已加汉堡按钮，这里升级为更"克制"的右抽屉
   兼容老 .is-mobile-open 顶部下拉模式（保留作 fallback）
   ============================================================ */
@media (max-width: 768px) {
  /* 顶导汉堡精细化（更明显的触控目标） */
  .app-nav__hamburger {
    width: var(--mobile-min-touch);
    height: var(--mobile-min-touch);
    margin-left: auto;
  }
  .app-nav__hamburger svg {
    width: 20px;
    height: 20px;
  }
  /* 汉堡 active 态（抽屉打开时变 X） */
  .app-nav__hamburger[aria-expanded="true"] {
    background: var(--color-bg-subtle);
    border-color: var(--color-border-strong);
  }
}

/* 抽屉容器（drawer 模式：右滑出） */
.app-nav__drawer {
  position: fixed;
  top: 0;
  right: 0;
  bottom: 0;
  width: var(--mobile-drawer-w);
  max-width: 86vw;
  background: var(--color-bg);
  box-shadow: -8px 0 24px rgba(15, 23, 42, 0.12);
  z-index: var(--mobile-drawer-z);
  transform: translateX(100%);
  transition: transform 0.28s cubic-bezier(0.4, 0, 0.2, 1);
  display: flex;
  flex-direction: column;
  padding-top: var(--safe-top);
  padding-bottom: var(--safe-bottom);
  overflow-y: auto;
  -webkit-overflow-scrolling: touch;
}
.app-nav__drawer.is-open {
  transform: translateX(0);
}
.app-nav__drawer-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 16px var(--mobile-padding) 12px;
  border-bottom: 1px solid var(--color-border-subtle);
}
.app-nav__drawer-title {
  font-size: var(--mobile-text-lg);
  font-weight: var(--weight-semi);
  color: var(--color-text-primary);
  letter-spacing: -0.005em;
}
.app-nav__drawer-close {
  width: 36px;
  height: 36px;
  border: none;
  background: transparent;
  color: var(--color-text-secondary);
  font-size: 22px;
  line-height: 1;
  cursor: pointer;
  border-radius: var(--radius-md);
  display: inline-flex;
  align-items: center;
  justify-content: center;
}
.app-nav__drawer-close:hover {
  background: var(--color-bg-subtle);
  color: var(--color-text-primary);
}
.app-nav__drawer-body {
  flex: 1;
  padding: 12px var(--mobile-padding) 16px;
  display: flex;
  flex-direction: column;
  gap: 2px;
}
.app-nav__drawer-link {
  display: flex;
  align-items: center;
  min-height: var(--mobile-min-touch);
  padding: 0 12px;
  font-size: var(--mobile-text-md);
  color: var(--color-text-primary);
  text-decoration: none;
  border-radius: var(--radius-md);
  font-weight: var(--weight-medium);
}
.app-nav__drawer-link:hover,
.app-nav__drawer-link:focus-visible {
  background: var(--color-bg-subtle);
}
.app-nav__drawer-link.is-active {
  background: var(--color-info-bg);
  color: var(--color-info);
}
.app-nav__drawer-section {
  margin-top: 12px;
  padding: 0 12px;
}
.app-nav__drawer-section-title {
  font-size: var(--mobile-text-xs);
  font-weight: var(--weight-semi);
  color: var(--color-text-tertiary);
  text-transform: uppercase;
  letter-spacing: 0.06em;
  padding: 8px 0 4px;
}
.app-nav__drawer-sub {
  display: flex;
  align-items: center;
  min-height: 38px;
  padding: 0 10px;
  font-size: var(--mobile-text-sm);
  color: var(--color-text-secondary);
  text-decoration: none;
  border-radius: var(--radius-sm);
}
.app-nav__drawer-sub small {
  margin-left: auto;
  font-family: var(--font-mono);
  font-size: 10px;
  letter-spacing: 0.06em;
  color: var(--color-text-tertiary);
  text-transform: uppercase;
}
.app-nav__drawer-sub:hover {
  background: var(--color-bg-subtle);
  color: var(--color-text-primary);
}
.app-nav__drawer-divider {
  height: 1px;
  background: var(--color-border-subtle);
  margin: 10px 12px;
}

/* Backdrop */
.app-nav__drawer-backdrop {
  position: fixed;
  inset: 0;
  background: rgba(15, 23, 42, 0.45);
  z-index: var(--mobile-backdrop-z);
  opacity: 0;
  visibility: hidden;
  transition: opacity 0.24s ease, visibility 0s linear 0.24s;
  backdrop-filter: blur(2px);
  -webkit-backdrop-filter: blur(2px);
}
.app-nav__drawer-backdrop.is-open {
  opacity: 1;
  visibility: visible;
  transition: opacity 0.24s ease, visibility 0s linear 0s;
}

/* drawer 仅 mobile 出现 */
@media (min-width: 769px) {
  .app-nav__drawer,
  .app-nav__drawer-backdrop {
    display: none !important;
  }
}

/* ============================================================
   F9-C · mobile-hint 精致化重构
   旧版：dismiss 横条 ➜ 顶部小角标 + 5s 自动 fade
   ============================================================ */
@media (max-width: 767px) {
  /* 覆盖老 .mobile-hint 默认显示 */
  .mobile-hint {
    display: none !important;
  }

  /* 新角标 */
  .mobile-hint-chip {
    position: fixed;
    top: calc(env(safe-area-inset-top, 0px) + 56px);
    right: 12px;
    z-index: 90;
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 6px 10px;
    background: rgba(15, 23, 42, 0.78);
    color: #fff;
    font-size: 11px;
    line-height: 1.2;
    border-radius: 999px;
    box-shadow: 0 4px 12px rgba(15, 23, 42, 0.18);
    backdrop-filter: blur(6px);
    -webkit-backdrop-filter: blur(6px);
    opacity: 0;
    transform: translateY(-4px);
    transition: opacity 0.25s ease, transform 0.25s ease;
    pointer-events: none;
    max-width: calc(100vw - 24px);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
  }
  .mobile-hint-chip.is-show {
    opacity: 1;
    transform: translateY(0);
  }
  .mobile-hint-chip.is-fading {
    opacity: 0;
    transform: translateY(-2px);
  }
}

@media (min-width: 768px) {
  .mobile-hint-chip { display: none !important; }
}

/* ============================================================
   F9-C · 底部 toolbar（应用层 6 页：signals/monitor/watchlist/simulator/dashboard/live）
   仅 mobile 出现，body 加 .has-mobile-toolbar 让内容预留底部空间
   ============================================================ */
.mobile-toolbar {
  position: fixed;
  left: 0;
  right: 0;
  bottom: 0;
  height: var(--mobile-toolbar-total-h);
  padding-bottom: var(--safe-bottom);
  background: rgba(255, 255, 255, 0.96);
  border-top: 1px solid var(--color-border);
  backdrop-filter: saturate(180%) blur(10px);
  -webkit-backdrop-filter: saturate(180%) blur(10px);
  z-index: 900;
  display: none;
}
.mobile-toolbar__row {
  height: var(--mobile-toolbar-h);
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  align-items: stretch;
}
.mobile-toolbar__item {
  display: inline-flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 2px;
  font-size: 10px;
  color: var(--color-text-secondary);
  text-decoration: none;
  border: none;
  background: transparent;
  cursor: pointer;
  padding: 4px 2px;
  min-height: var(--mobile-min-touch);
  transition: color 0.15s ease;
  -webkit-tap-highlight-color: transparent;
}
.mobile-toolbar__item:active {
  background: var(--color-bg-subtle);
}
.mobile-toolbar__item.is-active {
  color: var(--color-info);
}
.mobile-toolbar__item.is-active .mobile-toolbar__icon {
  color: var(--color-info);
}
.mobile-toolbar__icon {
  width: 22px;
  height: 22px;
  color: var(--color-text-secondary);
  display: inline-flex;
  align-items: center;
  justify-content: center;
}
.mobile-toolbar__icon svg {
  width: 22px;
  height: 22px;
}
.mobile-toolbar__label {
  font-size: 10px;
  letter-spacing: 0;
  line-height: 1;
  white-space: nowrap;
}

@media (max-width: 767px) {
  .mobile-toolbar {
    display: block;
  }
  /* body 加该 class 后整页预留底部空间，避免内容被遮挡 */
  body.has-mobile-toolbar {
    padding-bottom: var(--mobile-toolbar-total-h);
  }
  /* footer 在有底部 toolbar 时再多让一点 */
  body.has-mobile-toolbar .app-footer {
    margin-bottom: var(--mobile-toolbar-total-h);
    padding-bottom: 0;
  }
  body.has-mobile-toolbar .app-footer:last-of-type {
    /* avoid double offset since body padding already accounts */
    margin-bottom: 0;
  }
}

/* F9-C 移动端 padding 统一（容器 / 卡片左右） */
@media (max-width: 767px) {
  .container,
  .panel,
  .card,
  .doc-body {
    padding-left: var(--mobile-padding);
    padding-right: var(--mobile-padding);
  }
}

/* ============================================================
   Mobile-Hardening · 全站移动端 CSS 加固（2026-06-05）
   只在 ≤768px 生效，严格不影响桌面 1440/1280
   解决 4 类共性问题：①宽表横滚 ②触控目标 ③最小字号 ④整页防溢出
   施工原则：作用在表格自身 / 已有真实容器类，不用 *{} 暴力规则，
            不写死 min-width（避免窄表凭空出现横滚条）
   ============================================================ */
@media (max-width: 768px) {

  /* ---- ① 宽表横滚 ----
     作用在 .dt 自身（display:block + overflow-x:auto）：
     内容确实超宽的表（buyers / secondary-pool / failed 宽表）出现横滚，
     本来就窄的表（failed.html 窄表）scrollWidth 不超容器 → 不显示滚动条。
     不针对 .doc table（conglomerate / keyword-warnings 各页已自带 .doc table 横滚），
     避免与页内规则重复打架。 */
  table.dt {
    display: block;
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
    max-width: 100%;
  }
  /* display:block 后 thead/tbody 需显式恢复 table 语义，保持列对齐 */
  table.dt > thead,
  table.dt > tbody,
  table.dt > tfoot {
    display: table;
    width: 100%;
  }
  /* 单元格不换行，让超宽内容横向延展而非被挤压折行 */
  table.dt th,
  table.dt td {
    white-space: nowrap;
  }

  /* ---- ② 触控目标兜底 ≥40px ----
     .btn 已在上方 F9-C 段获得 44px，这里补齐其余可点元素。
     只加 min-height 不加 min-width（min-width 易撑破紧凑行 / 表内联按钮）。
     chip 类用 36px（信息密度标签，44 会过高）。 */
  a[role="button"],
  .filter-pill,
  .filter-chip,
  .toggle-group__btn {
    min-height: 40px;
  }
  .chip,
  .filter-chip__dot {
    min-height: 36px;
  }
  /* chip 本身是 inline-flex 标签：补足竖向 padding 让 36px 不显空 */
  .chip {
    padding-top: 4px;
    padding-bottom: 4px;
  }
  /* 表格内联 chip / 标签不强加触控高度（会撑破密度行） */
  table.dt .chip,
  table.dt .filter-chip__dot,
  table.dt a[role="button"] {
    min-height: 0;
  }

  /* ---- ③ 最小字号兜底 ≥11px ----
     只兜底"成段可读文本 / 元数据"，保守处理：
     不动 body（避免整页重排），不动 .data-strip / .mobile-toolbar__label
     （它们的 10px 是固定栅格内的刻意设计，放大会破栅格）。 */
  .dt__company-meta,
  .app-footer__legal,
  .app-footer__stamp,
  .industry-badge,
  .ac-search-modal__item-meta,
  small {
    font-size: 11px;
  }

  /* ---- ④ 防御性兜底：整页不被个别元素撑破 ----
     给本站真实存在的顶层 / 内容容器加 max-width + overflow-x:hidden，
     作为最后防线（如 keyword-warnings 内 .doc 个别宽元素溢出 95px）。
     不用 *{overflow-x:hidden}（会连累内部需要横滚的子元素）。 */
  .container,
  .layout,
  main,
  .doc,
  .doc-body,
  .dt-wrap {
    max-width: 100vw;
    overflow-x: hidden;
  }
  /* 例外：横滚容器自身必须保留 overflow-x:auto，
     防御规则不能误伤已声明的滚动区。 */
  .monitor-scroll,
  table.dt {
    overflow-x: auto;
  }
}
