/* ============================================================
 * data-pages-v2.css · 数据子页专项增量
 * 为 data-assets.html + data-methods.html 提供：
 *   R1 · 6 库可感知卡片 (库内示例数据)
 *   R2 · 全国→城市→区→项目 4 步宏微观叙事
 *   R3 · 「免费获取数据样本」留资 form
 *   R4 · 数据更新节奏可视化 (时间戳 + 呼吸点 + 新增气泡)
 *   通用 · TODO/SLOT 占位样式
 *
 * 约束:
 *   - 仅复用现有 token (--brand-blue-deep / --text-ink / 等)
 *   - 不引第三方库, 不引 web font
 *   - 1080/640 两档防御性媒体查询
 * ============================================================ */

/* ============================================================
 * COMMON · 占位 TODO badge (DESIGN-only, 部署可隐藏)
 * ============================================================ */
.v2-mock-note {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 3px 8px;
  font: 600 10px/1 'JetBrains Mono', ui-monospace, monospace;
  letter-spacing: 0.10em;
  text-transform: uppercase;
  color: var(--brand-blue-deep, #0049FF);
  background: rgba(0, 73, 255, 0.06);
  border: 1px dashed rgba(0, 73, 255, 0.32);
  border-radius: 4px;
}
.v2-mock-note::before {
  content: '';
  width: 6px;
  height: 6px;
  background: var(--brand-blue-deep, #0049FF);
  border-radius: 50%;
  animation: v2-breath 2s ease-in-out infinite;
}
@keyframes v2-breath {
  0%,100% { opacity: 0.35; transform: scale(0.85); }
  50%     { opacity: 1;    transform: scale(1.10); }
}

/* ============================================================
 * R2 · de-narrative-section · 全国→城市→区→项目 4 步叙事
 * ============================================================ */
.de-narrative-section {
  padding: 80px 32px 96px;
  background:
    radial-gradient(60% 50% at 50% 0%, rgba(0,73,255,0.06), transparent 70%),
    linear-gradient(180deg, #FFFFFF 0%, #F5F8FF 100%);
  border-top: 1px solid rgba(0, 73, 255, 0.08);
}
.de-narrative-inner {
  max-width: 1280px;
  margin: 0 auto;
}
.de-narrative-head {
  text-align: center;
  margin-bottom: 56px;
}
.de-narrative-head .de-eyebrow {
  display: inline-block;
  font: 600 13px/1 'JetBrains Mono', ui-monospace, monospace;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--brand-blue-deep, #0049FF);
  margin-bottom: 14px;
}
.de-narrative-title {
  font: 700 32px/1.2 'Noto Serif SC', Georgia, serif;
  color: var(--text-ink, #0A1A33);
  margin: 0 0 12px;
}
.de-narrative-sub {
  font: 400 16px/1.6 -apple-system, "PingFang SC", "Inter", sans-serif;
  color: var(--text-ink-mute, #6B7280);
  max-width: 680px;
  margin: 0 auto;
}

/* 4 step horizontal flow */
.de-narr-flow {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 16px;
  align-items: stretch;
  position: relative;
}
.de-narr-flow::before {
  content: '';
  position: absolute;
  left: 12.5%;
  right: 12.5%;
  top: 64px;
  height: 2px;
  background: repeating-linear-gradient(
    90deg,
    rgba(0,73,255,0.30) 0,
    rgba(0,73,255,0.30) 6px,
    transparent 6px,
    transparent 12px
  );
  z-index: 0;
}
.de-narr-step {
  position: relative;
  z-index: 1;
  background: #fff;
  border: 1px solid rgba(0, 73, 255, 0.14);
  border-radius: 16px;
  padding: 28px 24px;
  display: flex;
  flex-direction: column;
  gap: 14px;
  transition: transform 0.25s, box-shadow 0.25s, border-color 0.25s;
}
.de-narr-step:hover {
  transform: translateY(-4px);
  border-color: rgba(0, 73, 255, 0.40);
  box-shadow: 0 16px 36px -16px rgba(0, 73, 255, 0.22);
}
.de-narr-step-header {
  display: flex;
  align-items: center;
  gap: 12px;
}
.de-narr-step-num {
  width: 36px;
  height: 36px;
  border-radius: 50%;
  background: linear-gradient(135deg, var(--brand-blue-deep, #0049FF), #1A72FF);
  color: #fff;
  display: flex;
  align-items: center;
  justify-content: center;
  font: 700 14px/1 'JetBrains Mono', ui-monospace, monospace;
  letter-spacing: 0;
  flex-shrink: 0;
  box-shadow: 0 6px 16px -4px rgba(0, 73, 255, 0.40);
}
.de-narr-step-scope {
  font: 600 13px/1 'JetBrains Mono', ui-monospace, monospace;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--brand-blue-deep, #0049FF);
}
.de-narr-step-title {
  font: 700 18px/1.3 'Noto Serif SC', Georgia, serif;
  color: var(--text-ink, #0A1A33);
}
.de-narr-step-kpi {
  display: flex;
  flex-wrap: wrap;
  gap: 6px 14px;
  padding: 12px 14px;
  background: linear-gradient(135deg, #F5F8FF, #EEF4FF);
  border-radius: 10px;
}
.de-narr-step-kpi-cell {
  display: flex;
  flex-direction: column;
  gap: 2px;
  flex: 1 1 calc(50% - 7px);
  min-width: 0;
}
.de-narr-step-kpi-cell .v {
  font: 700 18px/1 'JetBrains Mono', ui-monospace, monospace;
  color: var(--brand-blue-deep, #0049FF);
  letter-spacing: -0.02em;
}
.de-narr-step-kpi-cell .v .u {
  font-size: 11px;
  color: var(--text-ink-mute, #6B7280);
  font-weight: 500;
  margin-left: 2px;
}
.de-narr-step-kpi-cell .k {
  font-size: 11px;
  color: var(--text-ink-mute, #6B7280);
  letter-spacing: 0.02em;
}
.de-narr-step-desc {
  font: 400 13px/1.6 -apple-system, "PingFang SC", "Inter", sans-serif;
  color: var(--text-ink-mute, #6B7280);
  flex: 1;
}
.de-narr-step-tag {
  display: inline-flex;
  align-self: flex-start;
  font: 600 10px/1 'JetBrains Mono', ui-monospace, monospace;
  letter-spacing: 0.08em;
  padding: 5px 10px;
  background: rgba(0, 73, 255, 0.06);
  border-radius: 4px;
  color: var(--brand-blue-deep, #0049FF);
}

@media (max-width: 1080px) {
  .de-narr-flow {
    grid-template-columns: repeat(2, 1fr);
  }
  .de-narr-flow::before { display: none; }
}
@media (max-width: 640px) {
  .de-narr-flow {
    grid-template-columns: 1fr;
  }
}

/* ============================================================
 * R1 · 6 库可感知卡片 (data-assets)
 * ============================================================ */
.v2-libs-section {
  padding: 80px 32px;
  background: #fff;
}
.v2-libs-inner {
  max-width: 1280px;
  margin: 0 auto;
}
.v2-libs-head {
  text-align: center;
  margin-bottom: 48px;
}
.v2-libs-head .eyebrow {
  display: inline-block;
  font: 600 13px/1 'JetBrains Mono', ui-monospace, monospace;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--brand-blue-deep, #0049FF);
  margin-bottom: 14px;
}
.v2-libs-title {
  font: 700 32px/1.2 'Noto Serif SC', Georgia, serif;
  color: var(--text-ink, #0A1A33);
  margin: 0 0 12px;
}
.v2-libs-sub {
  font: 400 16px/1.6 -apple-system, "PingFang SC", "Inter", sans-serif;
  color: var(--text-ink-mute, #6B7280);
  max-width: 720px;
  margin: 0 auto;
}
.v2-libs-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 16px;
}
.v2-lib-card {
  background: #fff;
  border: 1px solid rgba(0, 73, 255, 0.12);
  border-radius: 16px;
  padding: 24px 22px;
  display: flex;
  flex-direction: column;
  gap: 14px;
  transition: transform 0.25s, box-shadow 0.25s, border-color 0.25s;
  position: relative;
  overflow: hidden;
}
.v2-lib-card::before {
  content: '';
  position: absolute;
  top: 0; left: 0; right: 0;
  height: 3px;
  background: linear-gradient(90deg, var(--brand-blue-deep, #0049FF), #1A72FF);
  transform: scaleX(0);
  transform-origin: left;
  transition: transform 0.4s;
}
.v2-lib-card:hover {
  transform: translateY(-4px);
  border-color: rgba(0, 73, 255, 0.36);
  box-shadow: 0 16px 36px -16px rgba(0, 73, 255, 0.24);
}
.v2-lib-card:hover::before { transform: scaleX(1); }

.v2-lib-header {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 12px;
}
.v2-lib-id {
  display: flex;
  align-items: center;
  gap: 10px;
}
.v2-lib-id .ic {
  width: 40px; height: 40px;
  border-radius: 10px;
  background: linear-gradient(135deg, #EEF4FF, #DCE9FF);
  color: var(--brand-blue-deep, #0049FF);
  display: grid;
  place-items: center;
  flex-shrink: 0;
}
.v2-lib-id .ic svg { width: 20px; height: 20px; }
.v2-lib-id .name {
  font: 700 17px/1.2 'Noto Serif SC', Georgia, serif;
  color: var(--text-ink, #0A1A33);
}
.v2-lib-id .name .en {
  display: block;
  font: 500 10px/1 'JetBrains Mono', ui-monospace, monospace;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--text-ink-mute, #6B7280);
  margin-top: 4px;
}
.v2-lib-count {
  text-align: right;
  flex-shrink: 0;
}
.v2-lib-count .v {
  font: 800 24px/1 'JetBrains Mono', ui-monospace, monospace;
  color: var(--brand-blue-deep, #0049FF);
  letter-spacing: -0.02em;
}
.v2-lib-count .v .u {
  font-size: 12px;
  color: var(--text-ink-mute, #6B7280);
  font-weight: 500;
  margin-left: 2px;
}
.v2-lib-count .k {
  font: 500 10px/1 'JetBrains Mono', ui-monospace, monospace;
  color: var(--text-ink-mute, #6B7280);
  letter-spacing: 0.10em;
  text-transform: uppercase;
  margin-top: 4px;
}

/* R4 · 时间戳 + 呼吸点 + 新增气泡 */
.v2-lib-meta {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  padding: 8px 12px;
  background: linear-gradient(90deg, rgba(0, 73, 255, 0.06), rgba(0, 73, 255, 0.02));
  border-left: 2px solid rgba(0, 73, 255, 0.30);
  border-radius: 0 8px 8px 0;
  font: 500 11px/1.4 'JetBrains Mono', ui-monospace, monospace;
  color: var(--text-ink-mute, #6B7280);
  letter-spacing: 0.04em;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.v2-lib-meta .ts {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  min-width: 0;
  flex: 1;
}
.v2-lib-meta .ts::before {
  content: '';
  width: 7px; height: 7px;
  border-radius: 50%;
  background: var(--brand-blue-deep, #0049FF);
  box-shadow: 0 0 8px rgba(0, 73, 255, 0.50);
  animation: v2-breath 2s ease-in-out infinite;
  flex-shrink: 0;
}
.v2-lib-meta .ts .ts-text {
  overflow: hidden;
  text-overflow: ellipsis;
}
.v2-lib-meta .delta {
  font-weight: 700;
  color: var(--brand-blue-deep, #0049FF);
  background: rgba(0, 73, 255, 0.10);
  padding: 3px 8px;
  border-radius: 4px;
  flex-shrink: 0;
}

/* 示例数据 (R1) */
.v2-lib-sample {
  background: #FAFBFF;
  border: 1px solid rgba(0, 73, 255, 0.08);
  border-radius: 10px;
  padding: 12px 14px;
  display: flex;
  flex-direction: column;
  gap: 8px;
  flex: 1;
}
.v2-lib-sample-lbl {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  font: 600 10px/1 'JetBrains Mono', ui-monospace, monospace;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--text-ink-mute, #6B7280);
}
.v2-lib-sample-row {
  display: grid;
  grid-template-columns: 1fr auto;
  align-items: center;
  gap: 10px;
  padding: 6px 0;
  border-bottom: 1px dashed rgba(0, 73, 255, 0.10);
  font: 400 13px/1.4 -apple-system, "PingFang SC", "Inter", sans-serif;
}
.v2-lib-sample-row:last-child { border-bottom: 0; }
.v2-lib-sample-row .key {
  color: var(--text-ink, #0A1A33);
  font-weight: 500;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.v2-lib-sample-row .key .sub {
  display: block;
  font: 400 11px/1.4 -apple-system, "PingFang SC", "Inter", sans-serif;
  color: var(--text-ink-mute, #6B7280);
  margin-top: 2px;
}
.v2-lib-sample-row .val {
  font: 600 13px/1 'JetBrains Mono', ui-monospace, monospace;
  color: var(--brand-blue-deep, #0049FF);
  letter-spacing: -0.01em;
}
.v2-lib-cta {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  margin-top: 4px;
  font: 600 12px/1 -apple-system, "PingFang SC", "Inter", sans-serif;
  color: var(--brand-blue-deep, #0049FF);
  cursor: pointer;
  transition: gap 0.2s;
}
.v2-lib-cta:hover { gap: 10px; }
.v2-lib-cta::after { content: '→'; transition: transform 0.2s; }

@media (max-width: 1080px) {
  .v2-libs-grid { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 640px) {
  .v2-libs-grid { grid-template-columns: 1fr; }
}

/* ============================================================
 * R3 · 留资 form · 「免费获取数据样本」
 * ============================================================ */
.v2-form-section {
  padding: 96px 32px;
  background:
    radial-gradient(50% 70% at 80% 30%, rgba(0,73,255,0.08), transparent 70%),
    radial-gradient(40% 60% at 20% 80%, rgba(0,73,255,0.06), transparent 70%),
    linear-gradient(180deg, #F5F8FF 0%, #EEF4FF 100%);
  border-top: 1px solid rgba(0, 73, 255, 0.10);
  border-bottom: 1px solid rgba(0, 73, 255, 0.10);
}
.v2-form-inner {
  max-width: 1080px;
  margin: 0 auto;
  display: grid;
  grid-template-columns: 1fr 1.2fr;
  gap: 56px;
  align-items: center;
}
.v2-form-left .eyebrow {
  display: inline-block;
  font: 600 13px/1 'JetBrains Mono', ui-monospace, monospace;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--brand-blue-deep, #0049FF);
  margin-bottom: 14px;
}
.v2-form-title {
  font: 700 36px/1.18 'Noto Serif SC', Georgia, serif;
  color: var(--text-ink, #0A1A33);
  letter-spacing: -0.02em;
  margin: 0 0 16px;
}
.v2-form-title .gd {
  background: linear-gradient(135deg, var(--brand-blue-deep, #0049FF), #1A72FF);
  -webkit-background-clip: text;
  background-clip: text;
  -webkit-text-fill-color: transparent;
}
.v2-form-sub {
  font: 400 15px/1.7 -apple-system, "PingFang SC", "Inter", sans-serif;
  color: var(--text-ink-mute, #6B7280);
  margin-bottom: 24px;
}
.v2-form-bullets {
  list-style: none;
  padding: 0;
  margin: 0;
  display: flex;
  flex-direction: column;
  gap: 10px;
}
.v2-form-bullets li {
  display: flex;
  align-items: flex-start;
  gap: 10px;
  font: 500 14px/1.5 -apple-system, "PingFang SC", "Inter", sans-serif;
  color: var(--text-ink, #0A1A33);
}
.v2-form-bullets li::before {
  content: '';
  width: 18px; height: 18px;
  flex-shrink: 0;
  border-radius: 50%;
  background:
    url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 18 18" fill="none" stroke="white" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M4.5 9L7.5 12L13.5 6"/></svg>') no-repeat center / 60%,
    var(--brand-blue-deep, #0049FF);
  box-shadow: 0 4px 10px -2px rgba(0, 73, 255, 0.40);
  margin-top: 2px;
}

.v2-form-card {
  background: #fff;
  border: 1px solid rgba(0, 73, 255, 0.12);
  border-radius: 18px;
  padding: 36px 32px;
  box-shadow: 0 24px 56px -20px rgba(0, 73, 255, 0.18);
}
.v2-form-card h3 {
  font: 700 20px/1.2 'Noto Serif SC', Georgia, serif;
  color: var(--text-ink, #0A1A33);
  margin: 0 0 6px;
}
.v2-form-card .meta {
  font: 500 12px/1 -apple-system, "PingFang SC", "Inter", sans-serif;
  color: var(--text-ink-mute, #6B7280);
  margin-bottom: 22px;
}
.v2-form-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 14px;
}
.v2-form-row {
  display: flex;
  flex-direction: column;
  gap: 6px;
}
.v2-form-row.wide { grid-column: 1 / -1; }
.v2-form-row label {
  font: 500 12px/1 -apple-system, "PingFang SC", "Inter", sans-serif;
  color: var(--text-ink, #0A1A33);
}
.v2-form-row label .req { color: #FF6B6B; margin-left: 2px; }
.v2-form-row input,
.v2-form-row select,
.v2-form-row textarea {
  padding: 11px 12px;
  background: #FAFBFF;
  border: 1px solid rgba(10, 26, 51, 0.10);
  border-radius: 8px;
  font: 400 14px/1.4 -apple-system, "PingFang SC", "Inter", sans-serif;
  color: var(--text-ink, #0A1A33);
  transition: border-color 0.2s, background 0.2s, box-shadow 0.2s;
  outline: none;
  font-family: inherit;
}
.v2-form-row input:focus,
.v2-form-row select:focus,
.v2-form-row textarea:focus {
  border-color: var(--brand-blue-deep, #0049FF);
  background: #fff;
  box-shadow: 0 0 0 3px rgba(0, 73, 255, 0.10);
}
.v2-form-row textarea { resize: vertical; min-height: 80px; }
.v2-form-checks {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}
.v2-form-checks label {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 7px 12px;
  background: #FAFBFF;
  border: 1px solid rgba(10, 26, 51, 0.10);
  border-radius: 999px;
  font: 500 12px/1 -apple-system, "PingFang SC", "Inter", sans-serif;
  color: var(--text-ink, #0A1A33);
  cursor: pointer;
  transition: all 0.2s;
  user-select: none;
}
.v2-form-checks label input { display: none; }
.v2-form-checks label:hover {
  border-color: rgba(0, 73, 255, 0.30);
  background: rgba(0, 73, 255, 0.04);
}
.v2-form-checks label.is-checked {
  background: rgba(0, 73, 255, 0.10);
  border-color: var(--brand-blue-deep, #0049FF);
  color: var(--brand-blue-deep, #0049FF);
}
.v2-form-checks label.is-checked::before {
  content: '✓';
  font-weight: 700;
}
.v2-form-submit {
  width: 100%;
  padding: 14px 20px;
  background: linear-gradient(135deg, var(--brand-blue-deep, #0049FF), #1A72FF);
  color: #fff;
  border: 0;
  border-radius: 10px;
  font: 600 15px/1 -apple-system, "PingFang SC", "Inter", sans-serif;
  cursor: pointer;
  margin-top: 18px;
  box-shadow: 0 12px 24px -10px rgba(0, 73, 255, 0.40);
  transition: transform 0.2s, box-shadow 0.2s;
  font-family: inherit;
}
.v2-form-submit:hover {
  transform: translateY(-2px);
  box-shadow: 0 16px 32px -10px rgba(0, 73, 255, 0.50);
}
.v2-form-footnote {
  margin-top: 14px;
  text-align: center;
  font: 400 12px/1.6 -apple-system, "PingFang SC", "Inter", sans-serif;
  color: var(--text-ink-mute, #6B7280);
}

@media (max-width: 1080px) {
  .v2-form-inner { grid-template-columns: 1fr; gap: 36px; }
}
@media (max-width: 640px) {
  .v2-form-grid { grid-template-columns: 1fr; }
}

/* ============================================================
 * R4 · da-update-section · 升级版数据更新节奏 (data-assets)
 * 增强现有 .da-row, 不重定义结构
 * ============================================================ */
.da-row .da-row-pulse {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font: 500 11px/1.4 'JetBrains Mono', ui-monospace, monospace;
  color: var(--text-ink-mute, #6B7280);
  letter-spacing: 0.04em;
  margin-top: 6px;
}
.da-row .da-row-pulse::before {
  content: '';
  width: 7px; height: 7px;
  border-radius: 50%;
  background: var(--brand-blue-deep, #0049FF);
  box-shadow: 0 0 8px rgba(0, 73, 255, 0.50);
  animation: v2-breath 2s ease-in-out infinite;
  flex-shrink: 0;
}
.da-row .da-row-pulse .delta {
  font-weight: 700;
  color: var(--brand-blue-deep, #0049FF);
  background: rgba(0, 73, 255, 0.10);
  padding: 2px 7px;
  border-radius: 4px;
  margin-left: 6px;
}
.da-row .da-row-meta {
  display: flex;
  flex-direction: column;
  gap: 4px;
}

/* ============================================================
 * Sample row visual variants
 * ============================================================ */
.v2-lib-sample.tone-2 { background: #F7FAFF; }
.v2-lib-sample.tone-3 { background: #F4F8FF; }

/* ============= PPT-ANCHORED SECTIONS (merged in) ============= */

/* de- prefix: data section helpers */
.de-insight-section {
  padding: 80px 32px;
  background: #fff;
}
.de-insight-inner {
  max-width: 1100px;
  margin: 0 auto;
}
.de-insight-head {
  text-align: center;
  margin-bottom: 48px;
}
.de-eyebrow {
  display: inline-block;
  font: 600 13px/1 var(--font-mono);
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: #0049FF;
  margin-bottom: 14px;
}
.de-section-title {
  font: 700 32px/1.2 var(--font-display);
  color: var(--text-ink);
  margin: 0 0 12px;
}
.de-section-sub {
  font: 400 16px/1.6 var(--font-display);
  color: var(--text-ink-mute, #6B7280);
  max-width: 680px;
  margin: 0 auto;
}
.de-insight-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 20px;
}
.de-insight-card {
  background: linear-gradient(135deg, #F5F8FF, #EEF4FF);
  border: 1px solid rgba(0,73,255,0.10);
  border-radius: 16px;
  padding: 28px 24px;
  position: relative;
}
.de-insight-card::before {
  content: '"';
  position: absolute;
  top: 16px;
  right: 20px;
  font-size: 60px;
  line-height: 1;
  color: rgba(0,73,255,0.08);
  font-family: Georgia, serif;
}
.de-insight-text {
  font: 500 15px/1.7 var(--font-display);
  color: var(--text-ink);
}
.de-insight-tag {
  display: inline-flex;
  align-items: center;
  margin-top: 16px;
  padding: 4px 12px;
  background: rgba(0,73,255,0.08);
  border-radius: 20px;
  font: 600 13px/1 var(--font-mono);
  color: #0049FF;
  letter-spacing: 0.08em;
}
@media (max-width:1080px) {
  .de-insight-grid { grid-template-columns: 1fr; }
}

/* de-endorsed section */
.de-endorsed-section {
  padding: 80px 32px;
  background: #fff;
}
.de-endorsed-inner {
  max-width: 1100px;
  margin: 0 auto;
}
.de-endorsed-head {
  text-align: center;
  margin-bottom: 48px;
}
.de-endorsed-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 24px;
}
.de-endorsed-card {
  background: #fff;
  border: 1px solid rgba(0,73,255,0.12);
  border-radius: 16px;
  padding: 32px 28px;
  transition: box-shadow 0.2s, transform 0.2s;
}
.de-endorsed-card:hover {
  box-shadow: 0 8px 32px rgba(0,73,255,0.12);
  transform: translateY(-4px);
}
.de-endorsed-icon {
  width: 48px;
  height: 48px;
  background: linear-gradient(135deg, #0049FF, #1A72FF);
  border-radius: 14px;
  display: flex;
  align-items: center;
  justify-content: center;
  color: #fff;
  margin-bottom: 20px;
}
.de-endorsed-card-title {
  font: 700 18px/1.3 var(--font-display);
  color: var(--text-ink);
  margin-bottom: 12px;
}
.de-endorsed-card-body {
  font: 400 14px/1.7 var(--font-display);
  color: var(--text-ink-mute, #6B7280);
}
.de-endorsed-card-body p {
  margin: 0 0 8px;
}
.de-endorsed-card-body p:last-child {
  margin: 0;
}
@media (max-width:1080px) {
  .de-endorsed-grid { grid-template-columns: 1fr; }
}

/* da- prefix: data-assets specific new sections */
.da-update-section {
  padding: 80px 32px;
  background: #fff;
}
.da-update-inner {
  max-width: 1100px;
  margin: 0 auto;
}
.da-update-head {
  text-align: center;
  margin-bottom: 48px;
}
.da-update-eyebrow {
  display: inline-block;
  font: 600 13px/1 var(--font-mono);
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: #0049FF;
  margin-bottom: 14px;
}
.da-update-title {
  font: 700 32px/1.2 var(--font-display);
  color: var(--text-ink);
  margin: 0 0 12px;
}
.da-update-sub {
  font: 400 16px/1.6 var(--font-display);
  color: var(--text-ink-mute, #6B7280);
  max-width: 680px;
  margin: 0 auto;
}
.da-rows {
  display: flex;
  flex-direction: column;
  gap: 16px;
}
.da-row {
  display: grid;
  grid-template-columns: 160px 100px 120px 160px 1fr;
  align-items: center;
  gap: 0;
  background: #F5F8FF;
  border: 1px solid rgba(0,73,255,0.10);
  border-radius: 14px;
  padding: 20px 28px;
  transition: box-shadow 0.2s;
}
.da-row:hover {
  box-shadow: 0 4px 20px rgba(0,73,255,0.10);
}
.da-row-num {
  font: 700 36px/1 var(--font-mono);
  color: #0049FF;
  letter-spacing: -0.02em;
}
.da-row-unit {
  font: 600 14px/1 var(--font-display);
  color: #0049FF;
  opacity: 0.85;
  margin-top: 4px;
}
.da-row-type {
  font: 700 16px/1.2 var(--font-display);
  color: var(--text-ink);
}
.da-row-chip {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 5px 12px;
  border-radius: 20px;
  background: linear-gradient(135deg, #0049FF, #1A72FF);
  color: #fff;
  font: 600 13px/1 var(--font-mono);
  letter-spacing: 0.08em;
  white-space: nowrap;
}
.da-row-chip.realtime {
  background: linear-gradient(135deg, #00DFF8, #1A72FF);
}
.da-row-desc {
  font: 400 14px/1.6 var(--font-display);
  color: var(--text-ink-mute, #6B7280);
  padding-left: 16px;
  border-left: 2px solid rgba(0,73,255,0.15);
}
@media (max-width:1080px) {
  .da-row {
    grid-template-columns: 1fr;
    gap: 10px;
  }
  .da-row-desc {
    padding-left: 0;
    border-left: none;
    border-top: 1px solid rgba(0,73,255,0.10);
    padding-top: 10px;
  }
}

/* da-sources section */
.da-sources-section {
  padding: 80px 32px;
  background: linear-gradient(180deg,#F5F8FF 0%,#fff 100%);
}
.da-sources-inner {
  max-width: 1100px;
  margin: 0 auto;
}
.da-sources-head {
  text-align: center;
  margin-bottom: 48px;
}
.da-src-grid {
  display: grid;
  grid-template-columns: repeat(5,1fr);
  gap: 16px;
  margin-bottom: 36px;
}
.da-src-card {
  background: #fff;
  border: 1px solid rgba(0,73,255,0.12);
  border-radius: 14px;
  padding: 24px 16px;
  text-align: center;
  transition: box-shadow 0.2s, transform 0.2s;
}
.da-src-card:hover {
  box-shadow: 0 6px 24px rgba(0,73,255,0.12);
  transform: translateY(-3px);
}
.da-src-icon {
  width: 44px;
  height: 44px;
  margin: 0 auto 12px;
  background: linear-gradient(135deg,#EEF4FF,#DCE9FF);
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  color: #0049FF;
}
.da-src-name {
  font: 600 14px/1.3 var(--font-display);
  color: var(--text-ink);
}
.da-accumulate {
  background: #fff;
  border: 1px solid rgba(0,73,255,0.10);
  border-radius: 14px;
  padding: 24px 28px;
  display: flex;
  align-items: flex-start;
  gap: 20px;
}
.da-accumulate-label {
  font: 600 13px/1 var(--font-mono);
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: #0049FF;
  white-space: nowrap;
  padding-top: 2px;
}
.da-accumulate-items {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
}
.da-accumulate-tag {
  padding: 6px 14px;
  border-radius: 20px;
  background: linear-gradient(135deg,#EEF4FF,#DCE9FF);
  font: 500 13px/1 var(--font-display);
  color: #0049FF;
}
@media (max-width:1080px) {
  .da-src-grid { grid-template-columns: repeat(2,1fr); }
  .da-accumulate { flex-direction: column; }
}

/* ============================================================
 * ROLE MATRIX · 行业方案角色子页 · 全周期产品矩阵 (共用 4 页)
 * 应用于 venue-solutions / brand-solutions / gov-solutions / invest-solutions
 * ============================================================ */
.role-matrix-section {
  padding: 80px 32px;
  background: #fff;
}
.role-matrix-section.alt {
  background: #fff;
}
.role-matrix-inner {
  max-width: 1280px;
  margin: 0 auto;
}
.role-matrix-head {
  text-align: center;
  max-width: 1120px;
  margin: 0 auto 48px;
}
.role-matrix-head .eyebrow {
  display: inline-block;
  font: 600 13px/1 'JetBrains Mono', ui-monospace, monospace;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: #0049FF;
  margin-bottom: 14px;
}
.role-matrix-head h2 {
  font: 700 32px/1.25 'Noto Serif SC', Georgia, serif;
  color: #0A1A33;
  margin: 0 0 14px;
  letter-spacing: -0.01em;
}
.role-matrix-head .sub {
  font: 400 16px/1.65 -apple-system, "PingFang SC", "Inter", sans-serif;
  color: #6B7280;
  max-width: 760px;
  margin: 0 auto;
}

/* N 阶段网格 (支持 2/3/4 列) */
.role-matrix-grid {
  display: grid;
  gap: 18px;
  position: relative;
  align-items: stretch;
}
.role-matrix-grid.cols-2 { grid-template-columns: repeat(2, 1fr); }
.role-matrix-grid.cols-3 { grid-template-columns: repeat(3, 1fr); }
.role-matrix-grid.cols-4 { grid-template-columns: repeat(4, 1fr); }
.role-matrix-grid.cols-5{grid-template-columns:repeat(5,1fr);}
.role-matrix-grid::before {
  content: '';
  position: absolute;
  left: 8%;
  right: 8%;
  top: 56px;
  height: 2px;
  background: repeating-linear-gradient(
    90deg,
    rgba(0, 73, 255, 0.30) 0,
    rgba(0, 73, 255, 0.30) 6px,
    transparent 6px,
    transparent 12px
  );
  z-index: 0;
}
.role-stage-card {
  position: relative;
  z-index: 1;
  height: 100%;
  padding: 26px 22px;
  background: #fff;
  border: 1px solid rgba(0, 73, 255, 0.14);
  border-radius: 16px;
  transition: transform 0.25s, box-shadow 0.25s, border-color 0.25s;
  display: flex;
  flex-direction: column;
  gap: 14px;
}
.role-stage-card:hover {
  transform: translateY(-4px);
  border-color: rgba(0, 73, 255, 0.40);
  box-shadow: 0 16px 36px -16px rgba(0, 73, 255, 0.22);
}
.role-stage-card .rsc-h {
  display: flex;
  align-items: center;
  gap: 12px;
}
.role-stage-card .rsc-no {
  width: 36px;
  height: 36px;
  border-radius: 50%;
  background: linear-gradient(135deg, #0049FF, #1A72FF);
  color: #fff;
  display: flex;
  align-items: center;
  justify-content: center;
  font: 700 13px/1 'JetBrains Mono', ui-monospace, monospace;
  flex-shrink: 0;
  box-shadow: 0 6px 16px -4px rgba(0, 73, 255, 0.40);
}
.role-stage-card .rsc-scope {
  font: 600 13px/1 'JetBrains Mono', ui-monospace, monospace;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: #0049FF;
  margin-bottom: 2px;
}
.role-stage-card h3 {
  font: 700 18px/1.3 'Noto Serif SC', Georgia, serif;
  color: #0A1A33;
  margin: 0;
  min-height: 2.6em;
}
.role-stage-card .rsc-d {
  font-size: 13px;
  line-height: 1.65;
  color: #6B7280;
  margin: 0;
  flex: 1 1 auto;
  min-height: 4.95em;
}
.role-stage-card .rsc-products {
  display: flex;
  flex-direction: column;
  gap: 8px;
  margin-top: auto;
  padding-top: 12px;
  border-top: 1px dashed rgba(0, 73, 255, 0.16);
}
.role-stage-card .rsc-product {
  display: flex;
  gap: 10px;
  align-items: center;
  min-height: 68px;
  padding: 10px 12px;
  background: rgba(0, 73, 255, 0.04);
  border-radius: 8px;
  transition: background 0.2s;
}
.role-stage-card .rsc-product:hover {
  background: rgba(0, 73, 255, 0.08);
}
.role-stage-card .rsc-product:not(.core) {
  background: #fff;
  border: 1px solid rgba(0, 73, 255, 0.10);
}
.role-stage-card .rsc-product:not(.core):hover {
  background: rgba(0, 73, 255, 0.04);
}
.role-stage-card .rsc-product.core {
  background: linear-gradient(135deg, rgba(0, 73, 255, 0.10), rgba(26, 114, 255, 0.04));
  border: 1px solid rgba(0, 73, 255, 0.20);
}
.role-stage-card .rsc-product .rsc-pic {
  width: 30px;
  height: 30px;
  border-radius: 8px;
  background: #fff;
  border: 1px solid rgba(0, 73, 255, 0.12);
  display: grid;
  place-items: center;
  flex-shrink: 0;
  overflow: hidden;
}
.role-stage-card .rsc-product.core .rsc-pic {
  background: #fff;
  border-color: rgba(0, 73, 255, 0.22);
  box-shadow: 0 4px 12px -6px rgba(0, 73, 255, 0.28);
}
.role-stage-card .rsc-product .rsc-pic img {
  width: 22px;
  height: 22px;
  object-fit: contain;
  display: block;
}
.role-stage-card .rsc-product .rsc-pic svg {
  width: 16px;
  height: 16px;
  stroke: #0049FF;
  fill: none;
  stroke-width: 1.8;
}
.role-stage-card .rsc-product.core .rsc-pic svg {
  stroke: #fff;
}
.role-stage-card .rsc-product .rsc-pinfo {
  flex: 1;
  min-width: 0;
}
.role-stage-card .rsc-product .rsc-pname {
  display: flex;
  align-items: center;
  gap: 6px;
  font: 700 13px/1.3 'Noto Serif SC', Georgia, serif;
  color: #0A1A33;
  margin-bottom: 3px;
}
.role-stage-card .rsc-product .rsc-pname .rsc-tag {
  font: 600 9px/1 'JetBrains Mono', ui-monospace, monospace;
  letter-spacing: 0.06em;
  padding: 2px 6px;
  border-radius: 4px;
  background: rgba(0, 73, 255, 0.10);
  color: #0049FF;
}
.role-stage-card .rsc-product.core .rsc-pname .rsc-tag {
  background: #0049FF;
  color: #fff;
}
.role-stage-card .rsc-product .rsc-pdesc {
  font-size: 11.5px;
  line-height: 1.5;
  color: #6B7280;
  min-height: calc(1.5em * 2);
}

@media (max-width: 1080px) {
  .role-matrix-grid.cols-4 { grid-template-columns: repeat(2, 1fr); }
  .role-matrix-grid.cols-3 { grid-template-columns: 1fr; }
  .role-matrix-grid.cols-2 { grid-template-columns: 1fr; }
  .role-matrix-grid::before { display: none; }
}
@media (max-width: 640px) {
  .role-matrix-grid.cols-4 { grid-template-columns: 1fr; }
}

/* ============================================================
 * PARTNER WALL · 合作伙伴展示墙 (共享于 9 个子页)
 * 应用于 venue/brand/gov-solutions + winshang-yyt/city-map/yzxz/brand-cloud/cmi/mi
 * ============================================================ */
.partner-wall-section {
  padding: 80px 32px;
  background: #fff;
  position: relative;
  overflow: hidden;
}
.partner-wall-section.alt {
  background: #fff;
}
.partner-wall-section::before {
  content: '';
  position: absolute;
  inset: 0;
  background: radial-gradient(60% 40% at 50% 0%, rgba(0, 73, 255, 0.06), transparent 70%);
  pointer-events: none;
}
.partner-wall-inner {
  max-width: 1280px;
  margin: 0 auto;
  position: relative;
}
.partner-wall-head {
  text-align: center;
  max-width: 1120px;
  margin: 0 auto 40px;
}
.partner-wall-head .eyebrow {
  display: inline-block;
  font: 600 13px/1 'JetBrains Mono', ui-monospace, monospace;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: #0049FF;
  margin-bottom: 14px;
}
.partner-wall-head h2 {
  font: 700 32px/1.25 'Noto Serif SC', Georgia, serif;
  color: #0A1A33;
  margin: 0 0 12px;
  letter-spacing: -0.01em;
}
.partner-wall-head .sub {
  font: 400 15px/1.65 -apple-system, "PingFang SC", "Inter", sans-serif;
  color: #6B7280;
  max-width: 700px;
  margin: 0 auto;
}

/* 分组小标 (可选, 用于多分类墙) */
.partner-wall-group {
  margin-bottom: 28px;
}
.partner-wall-group:last-child { margin-bottom: 0; }
.partner-wall-group-h {
  display: flex;
  align-items: center;
  gap: 10px;
  margin-bottom: 14px;
  padding-bottom: 10px;
  border-bottom: 1px dashed rgba(0, 73, 255, 0.16);
}
.partner-wall-group-h .pwg-tag {
  font: 700 11px/1 'JetBrains Mono', ui-monospace, monospace;
  letter-spacing: 0.10em;
  text-transform: uppercase;
  color: #fff;
  padding: 5px 10px;
  background: linear-gradient(135deg, #0049FF, #1A72FF);
  border-radius: 999px;
}
.partner-wall-group-h .pwg-name {
  font: 700 18px/1.3 'Noto Serif SC', Georgia, serif;
  color: #0A1A33;
}
.partner-wall-group-h .pwg-count {
  margin-left: auto;
  font: 500 12px/1 'JetBrains Mono', ui-monospace, monospace;
  color: #6B7280;
  letter-spacing: 0.04em;
}

/* LOGO 网格 — 默认 8 列, 大屏 8 列, 中屏 6 列, 小屏 4 列, 移动 3 列 */
.partner-wall-grid {
  display: grid;
  grid-template-columns: repeat(6, 1fr);
  gap: 14px;
}
.partner-wall-grid.cols-7 { grid-template-columns: repeat(7, 1fr); }
.partner-wall-grid.cols-6 { grid-template-columns: repeat(6, 1fr); }
.partner-wall-grid.cols-5 { grid-template-columns: repeat(5, 1fr); }

/* 卡片 — 明亮白底 + 彩色 LOGO + 蓝色阴影 hover */
.partner-logo-card {
  aspect-ratio: 5 / 3;
  background:#fff;
  border: 1px solid rgba(0, 73, 255, 0.08);
  border-radius: 12px;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 13px 18px;
  transition: all 0.25s cubic-bezier(.22,1,.36,1);
  cursor: default;
  overflow: hidden;
  box-shadow: 0 1px 3px rgba(10, 26, 51, 0.04);
}
.partner-logo-card img {
  max-width: 100%;
  max-height: 100%;
  width: auto;
  height: auto;
  object-fit: contain;
  /* 保持彩色原色, 不灰度处理 */
  transition: transform 0.25s;
}
.partner-logo-card:hover {
  transform: translateY(-4px);
  border-color: rgba(0, 73, 255, 0.35);
  box-shadow: 0 14px 32px -8px rgba(0, 73, 255, 0.20);
  background: #fff;
}
.partner-logo-card:hover img {
  transform: scale(1.08);
}

/* 文字 LOGO 占位 (当无图时用文字) — 明亮卡 + 蓝色文字 */
.partner-logo-card.text-only {
  background: linear-gradient(135deg, #fff 0%, #F5F8FF 100%);
  font: 700 13.5px/1.3 'Noto Serif SC', Georgia, serif;
  color: #0049FF;
  text-align: center;
  letter-spacing: -0.01em;
  border: 1px solid rgba(0, 73, 255, 0.16);
}
.partner-logo-card.text-only:hover {
  background: linear-gradient(135deg, #F5F8FF 0%, #EAF1FB 100%);
  color: #0A1A33;
  border-color: #0049FF;
}

/* 仅部分展示说明 */
.partner-wall-partial {
  margin: 0 0 28px;
  text-align: center;
  font: 500 13px/1.5 'Noto Serif SC', Georgia, serif;
  color: var(--text-ink-mute, #6B7280);
  letter-spacing: 0.02em;
}

/* 底部 +N 更多 chip */
.partner-wall-more {
  margin-top: 32px;
  text-align: center;
}
.partner-wall-more .pwm-chip {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 10px 22px;
  background: rgba(0, 73, 255, 0.06);
  border: 1px solid rgba(0, 73, 255, 0.18);
  border-radius: 999px;
  font: 600 13px/1 'Noto Serif SC', Georgia, serif;
  color: #0049FF;
  letter-spacing: 0.02em;
}
.partner-wall-more .pwm-chip svg {
  width: 14px;
  height: 14px;
  stroke: #0049FF;
  fill: none;
  stroke-width: 2;
}

/* 折叠"空副标题"段落, 避免标题下方出现多余空隙 (全站子页通用) */
.ws-sec-sub:empty,
.s1-sub:empty,
.partner-wall-head .sub:empty { display: none !important; }

@media (max-width: 1280px) {
  .partner-wall-grid,
  .partner-wall-grid.cols-7,
  .partner-wall-grid.cols-6,
  .partner-wall-grid.cols-5 {
    grid-template-columns: repeat(6, 1fr);
  }
}
@media (max-width: 1080px) {
  .partner-wall-grid,
  .partner-wall-grid.cols-7,
  .partner-wall-grid.cols-6,
  .partner-wall-grid.cols-5 {
    grid-template-columns: repeat(5, 1fr);
  }
}
@media (max-width: 768px) {
  .partner-wall-grid,
  .partner-wall-grid.cols-7,
  .partner-wall-grid.cols-6,
  .partner-wall-grid.cols-5 {
    grid-template-columns: repeat(4, 1fr);
  }
}
@media (max-width: 640px) {
  .partner-wall-grid,
  .partner-wall-grid.cols-7,
  .partner-wall-grid.cols-6,
  .partner-wall-grid.cols-5 {
    grid-template-columns: repeat(3, 1fr);
  }
  .partner-wall-section { padding: 60px 20px; }
  .partner-wall-head h2 { font-size: 26px; }
}

/* ============================================================
 * TIER LADDER · 级次阶梯 (S–D / A–F 评级阶梯, data-methods)
 * 下行台阶视觉, 复用品牌蓝 token + role-matrix 媒体查询断点
 * ============================================================ */
.tier-ladder {
  display: grid;
  grid-template-columns: repeat(var(--tiers, 5), 1fr);
  gap: 14px;
  max-width: 1280px;
  margin: 0 auto;
  align-items: end;
}
.tl-step {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 8px;
  padding: 20px 18px;
  background: #fff;
  border: 1px solid rgba(0, 73, 255, 0.16);
  border-radius: 16px;
  box-shadow: 0 8px 24px -16px rgba(0, 73, 255, 0.20);
  transition: transform 0.25s, box-shadow 0.25s, border-color 0.25s;
}
.tl-step:hover {
  transform: translateY(-4px);
  border-color: rgba(0, 73, 255, 0.40);
  box-shadow: 0 16px 36px -16px rgba(0, 73, 255, 0.24);
}
/* 下行台阶: 每一级比前一级再低 14px, 读作级次阶梯 */
.tier-ladder .tl-step:nth-child(1) { margin-top: 0; }
.tier-ladder .tl-step:nth-child(2) { margin-top: 14px; }
.tier-ladder .tl-step:nth-child(3) { margin-top: 28px; }
.tier-ladder .tl-step:nth-child(4) { margin-top: 42px; }
.tier-ladder .tl-step:nth-child(5) { margin-top: 56px; }
.tier-ladder .tl-step:nth-child(6) { margin-top: 70px; }
.tl-letter {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 38px;
  height: 38px;
  border-radius: 10px;
  font: 800 18px/1 'JetBrains Mono', ui-monospace, monospace;
  color: #fff;
  background: rgba(0, 73, 255, 0.92);
  box-shadow: 0 6px 16px -6px rgba(0, 73, 255, 0.45);
}
.tl-letter.is-s {
  background: linear-gradient(135deg, #E0A53A, #C8861A);
  box-shadow: 0 6px 16px -6px rgba(200, 134, 26, 0.50);
}
/* A→D 蓝色透明度递减, 呼应级次下行 */
.tl-step:nth-child(2) .tl-letter { background: rgba(0, 73, 255, 0.80); }
.tl-step:nth-child(3) .tl-letter { background: rgba(0, 73, 255, 0.62); }
.tl-step:nth-child(4) .tl-letter { background: rgba(0, 73, 255, 0.46); }
.tl-step:nth-child(5) .tl-letter { background: rgba(0, 73, 255, 0.32); }
.tl-step:nth-child(6) .tl-letter { background: rgba(0, 73, 255, 0.22); }
.tl-band {
  font: 600 12px/1 'JetBrains Mono', ui-monospace, monospace;
  color: var(--text-ink-mute, #6B7280);
  letter-spacing: 0.02em;
}
.tl-band:empty { display: none; }
.tl-name {
  font: 700 14px/1.35 'Noto Serif SC', Georgia, serif;
  color: var(--text-ink, #0A1A33);
}
@media (max-width: 1080px) {
  .tier-ladder { grid-template-columns: repeat(2, 1fr); }
  .tier-ladder .tl-step[class] { margin-top: 0; }
}
@media (max-width: 640px) {
  .tier-ladder { grid-template-columns: 1fr; }
}

/* === 数据动态更新滚动条 (纯CSS, 离线稳) === */
.data-ticker{position:relative;max-width:1120px;margin:0 auto;height:230px;overflow:hidden;background:#fff;border:1px solid rgba(0,73,255,.1);border-radius:16px;box-shadow:0 6px 22px -12px rgba(10,26,51,.18);}
.data-ticker::after{content:"";position:absolute;left:0;right:0;bottom:0;height:64px;background:linear-gradient(to top,#fff,rgba(255,255,255,0));pointer-events:none;}
.dt-head{display:flex;align-items:center;gap:10px;padding:14px 22px;border-bottom:1px solid rgba(10,26,51,.06);font:600 13px/1 var(--font-mono,monospace);letter-spacing:.08em;color:#0049FF;}
.dt-live{width:8px;height:8px;border-radius:50%;background:#1E7F4F;box-shadow:0 0 0 0 rgba(30,127,79,.5);animation:dt-pulse 2s infinite;}
@keyframes dt-pulse{0%{box-shadow:0 0 0 0 rgba(30,127,79,.5)}70%{box-shadow:0 0 0 8px rgba(30,127,79,0)}100%{box-shadow:0 0 0 0 rgba(30,127,79,0)}}
.dt-viewport{height:166px;overflow:hidden;}
.dt-track{animation:dt-scroll 22s linear infinite;}
.data-ticker:hover .dt-track{animation-play-state:paused;}
@keyframes dt-scroll{from{transform:translateY(0)}to{transform:translateY(-50%)}}
.dt-row{display:flex;align-items:center;gap:16px;padding:12px 22px;border-bottom:1px solid rgba(10,26,51,.05);font-size:14px;}
.dt-time{font:600 12px/1 var(--font-mono,monospace);color:#6B7280;white-space:nowrap;}
.dt-lib{font-size:12px;font-weight:600;color:#0049FF;background:rgba(0,73,255,.08);border-radius:999px;padding:3px 10px;white-space:nowrap;}
.dt-what{flex:1;color:#1A1A2E;}
.dt-delta{color:#1E7F4F;font-weight:700;white-space:nowrap;}

/* === 逐库画面: 左维度价值 / 右动态滚动 双栏 === */
.lib-split{display:grid;grid-template-columns:1.05fr .95fr;gap:30px;align-items:stretch;max-width:1200px;margin:0 auto;}
.lib-split .data-ticker{height:100%;min-height:340px;margin:0;}
.lib-split .dt-viewport{height:calc(100% - 54px);}
.lib-val{background:linear-gradient(120deg,#0049FF,#1A72FF);color:#fff;border-radius:14px;padding:18px 22px;margin:0 0 18px;}
.lib-val .vt{font-size:13px;opacity:.85;letter-spacing:.05em;margin-bottom:6px;}
.lib-val .vd{font-size:16px;font-weight:600;line-height:1.5;}
.lib-dimgroup{background:#fff;border:1px solid rgba(0,73,255,.1);border-radius:14px;padding:16px 18px;margin-bottom:14px;}
.lib-dimgroup .dg-h{font-size:14px;font-weight:700;color:#0049FF;margin-bottom:10px;}
.lib-dim-chips{display:flex;flex-wrap:wrap;gap:8px;}
.lib-dim-chips span{font-size:13px;color:#1A1A2E;background:rgba(0,73,255,.06);border-radius:8px;padding:6px 11px;}
.lib-quan{display:flex;align-items:center;gap:10px;background:#FFF7E6;border:1px solid rgba(216,166,76,.4);border-radius:12px;padding:13px 18px;margin-top:6px;}
.lib-quan .lq-i{color:#B8860B;font-weight:700;}
.lib-quan a{color:#0049FF;font-weight:600;text-decoration:none;margin-left:auto;white-space:nowrap;}
@media(max-width:980px){.lib-split{grid-template-columns:1fr;} .lib-split .data-ticker{min-height:280px;}}

/* === ticker 视觉改进 (覆盖) === */
.data-ticker{border-radius:18px;}
.dt-head{justify-content:flex-start;padding:15px 22px;background:linear-gradient(180deg,rgba(0,73,255,.04),transparent);}
.dt-sync{margin-left:auto;display:flex;align-items:center;gap:6px;font:500 11px/1.3 var(--font-mono,monospace);color:#6B7280;letter-spacing:0;text-align:right;}
.dt-row{display:grid;grid-template-columns:auto auto 1fr auto;align-items:center;gap:14px;padding:13px 22px;border-bottom:1px solid rgba(10,26,51,.045);}
.dt-row:nth-child(even){background:rgba(0,73,255,.018);}
.dt-time{font:600 11px/1 var(--font-mono,monospace);color:#9099a8;white-space:nowrap;}
.dt-lib{font-size:11px;font-weight:700;color:#0049FF;background:rgba(0,73,255,.09);border-radius:6px;padding:3px 9px;white-space:nowrap;}
.dt-what{color:#1A1A2E;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13.5px;}
.dt-delta{font:700 13px/1 var(--font-mono,monospace);white-space:nowrap;display:inline-flex;align-items:center;gap:3px;}
.dt-delta.up{color:#1E7F4F;} .dt-delta.down{color:#C0392B;} .dt-delta.flat{color:#6B7280;}
