._bubble_19m9x_1 {
  margin: var(--ds-space-3, 12px) 0;
  border-left: 2px solid var(--ds-border, #e5e7eb);
  padding-left: var(--ds-space-3, 12px);
}

._head_19m9x_7 {
  display: inline-flex;
  align-items: center;
  gap: var(--ds-space-2, 8px);
  background: none;
  border: 0;
  padding: var(--ds-space-2, 8px) 0;
  cursor: pointer;
  font-size: 12px;
  color: var(--ds-text-muted, #6b7280);
}

._head_19m9x_7:disabled {
  cursor: default;
}

._caret_19m9x_23 {
  display: inline-block;
  width: 0;
  height: 0;
  border-top: 4px solid transparent;
  border-bottom: 4px solid transparent;
  border-left: 5px solid currentColor;
  transition: transform 0.15s ease;
}

[data-state="expanded"] ._caret_19m9x_23 {
  transform: rotate(90deg);
}

[data-state="streaming"] ._caret_19m9x_23 {
  width: 6px;
  height: 6px;
  border: 0;
  border-radius: 50%;
  background: var(--ds-text, #18181b);
  animation: _pulse_19m9x_1 1s ease-in-out infinite;
}

@keyframes _pulse_19m9x_1 {
  0%,
  100% {
    opacity: 0.35;
    transform: scale(0.85);
  }
  50% {
    opacity: 1;
    transform: scale(1);
  }
}

[data-state="streaming"] ._duration_19m9x_58 {
  display: none;
}

._title_19m9x_62 {
  color: var(--ds-text, #18181b);
}

._duration_19m9x_58 {
  font-variant-numeric: tabular-nums;
  color: var(--ds-text-muted, #6b7280);
}

._body_19m9x_71 {
  margin-top: var(--ds-space-2, 8px);
  padding: var(--ds-space-3, 12px);
  background: var(--ds-bg-alt, #f5f5f5);
  border-radius: var(--ds-radius-md, 8px);
  color: var(--ds-text-muted, #6b7280);
  font-size: 12px;
  white-space: pre-wrap;
  line-height: 1.6;
}

[data-state="streaming"] ._body_19m9x_71::after {
  content: "\25CD";
  display: inline-block;
  margin-left: 2px;
  animation: _blink_19m9x_1 1s steps(2, end) infinite;
}

@keyframes _blink_19m9x_1 {
  0%,
  100% {
    opacity: 0;
  }
  50% {
    opacity: 1;
  }
}
/* 对话列表视频任务卡 — 过程态 B + 完成态 S1 */

.task-card {
  background: var(--ds-bg, #fff);
  border: 1px solid var(--ds-border-strong, rgba(24, 24, 27, 0.16));
  border-radius: var(--ds-radius-lg, 14px);
  padding: 14px 16px;
  margin: 0 0 8px;
  color: var(--ds-text, #18181b);
}

.task-card-head {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-bottom: 12px;
}

.task-card-title {
  flex: 1;
  min-width: 0;
  font-size: 13.5px;
  font-weight: 650;
  line-height: 1.35;
}

.task-card-status-ok {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  margin-left: auto;
  font-size: 12px;
  font-weight: 600;
  color: #16a34a;
  white-space: nowrap;
}

.task-card-status-ok-dot {
  width: 16px;
  height: 16px;
  border-radius: 50%;
  background: rgba(34, 197, 94, 0.12);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 10px;
}

.task-card-status-fail {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  margin-left: auto;
  font-size: 12px;
  font-weight: 600;
  color: var(--ds-danger, #ef4444);
  white-space: nowrap;
}

.task-card-status-fail-dot {
  width: 16px;
  height: 16px;
  border-radius: 50%;
  background: rgba(239, 68, 68, 0.12);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 10px;
}

/* —— 过程态进度区（白底 + 左细条，无大灰底） —— */
.task-card-progress {
  margin-bottom: 4px;
}

.task-card-progress-main {
  display: flex;
  align-items: flex-start;
  gap: 12px;
  padding-left: 12px;
  border-left: 2px solid var(--ds-accent, #4da6ff);
}

.task-card-progress-body {
  flex: 1;
  min-width: 0;
}

.task-card-step-row {
  display: flex;
  align-items: baseline;
  gap: 8px;
  flex-wrap: wrap;
}

.task-card-step-n,
.task-card-step-name {
  font-size: 13.5px;
  font-weight: 650;
  color: var(--ds-text, #18181b);
  line-height: 1.3;
}

.task-card-think {
  margin-top: 8px;
  font-size: 12.5px;
  line-height: 1.55;
  color: var(--ds-text, #18181b);
  max-height: calc(1.55em * 2);
  overflow: hidden;
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 2;
  line-clamp: 2;
}

.task-card-think.muted {
  color: var(--ds-text-subtle, #a1a1aa);
}

.task-card-think.live::after {
  content: '';
  display: inline-block;
  width: 1.5px;
  height: 0.95em;
  margin-left: 1px;
  vertical-align: -0.12em;
  background: var(--ds-accent, #4da6ff);
  animation: task-card-caret 1s step-end infinite;
}

@keyframes task-card-caret {
  50% {
    opacity: 0;
  }
}

.task-card-ring {
  width: 42px;
  height: 42px;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
  background: conic-gradient(var(--ds-accent, #4da6ff) 0 120deg, rgba(24, 24, 27, 0.08) 120deg);
}

.task-card-ring.fail {
  background: none;
  border: 2px solid var(--ds-danger, #ef4444);
}

.task-card-ring-inner {
  width: 32px;
  height: 32px;
  border-radius: 50%;
  background: var(--ds-bg, #fff);
  display: flex;
  align-items: center;
  justify-content: center;
  font-family: var(--ds-font-mono, ui-monospace, monospace);
  font-size: 10px;
  font-weight: 600;
  color: var(--ds-text, #18181b);
}

.task-card-ring.fail .task-card-ring-inner {
  color: var(--ds-danger, #ef4444);
}

.task-card-toggle {
  display: flex;
  align-items: center;
  justify-content: space-between;
  width: 100%;
  margin-top: 10px;
  padding: 8px 0 0;
  border: none;
  border-top: 1px solid var(--ds-border, rgba(24, 24, 27, 0.08));
  background: transparent;
  font-family: inherit;
  font-size: 12px;
  color: var(--ds-text-muted, #6b7280);
  cursor: pointer;
}

.task-card-chev {
  color: var(--ds-text-subtle, #a1a1aa);
  font-size: 11px;
}

/* 步骤时间线（展开） */
.task-stages {
  margin: 8px 0 2px;
}

.task-stage {
  display: flex;
  gap: 10px;
  padding: 3px 0;
}

.task-rail {
  width: 14px;
  display: flex;
  flex-direction: column;
  align-items: center;
  flex-shrink: 0;
}

.task-sdot {
  width: 8px;
  height: 8px;
  border-radius: 50%;
  border: 1.5px solid var(--ds-border-strong, rgba(24, 24, 27, 0.16));
  background: var(--ds-bg, #fff);
  margin-top: 5px;
}

.task-stage.done .task-sdot {
  background: var(--ds-text, #18181b);
  border-color: var(--ds-text, #18181b);
}

.task-stage.now .task-sdot {
  background: var(--ds-accent, #4da6ff);
  border-color: var(--ds-accent, #4da6ff);
  box-shadow: 0 0 0 3px rgba(77, 166, 255, 0.18);
}

.task-stage.fail .task-sdot {
  background: var(--ds-danger, #ef4444);
  border-color: var(--ds-danger, #ef4444);
}

.task-line {
  width: 1.5px;
  flex: 1;
  background: var(--ds-border, rgba(24, 24, 27, 0.08));
  margin-top: 2px;
}

.task-stage:last-child .task-line {
  display: none;
}

.task-stage-body {
  flex: 1;
  padding-bottom: 4px;
}

.task-stage-name {
  font-size: 12.5px;
  font-weight: 600;
}

.task-stage.pending .task-stage-name {
  color: var(--ds-text-subtle, #a1a1aa);
  font-weight: 500;
}

.task-stage.done .task-stage-name {
  color: var(--ds-text-muted, #6b7280);
  font-weight: 500;
}

.task-flow {
  margin-top: 3px;
  border-left: 2px solid var(--ds-border, rgba(24, 24, 27, 0.08));
  padding: 1px 0 1px 10px;
}

.task-flow-line {
  font-size: 11.5px;
  color: var(--ds-text-muted, #6b7280);
  padding: 1.5px 0;
}

.task-flow-line.live {
  color: var(--ds-text, #18181b);
}

.task-flow-line.live::after {
  content: '▍';
  color: var(--ds-accent, #4da6ff);
  animation: task-blink 1s infinite;
}

@keyframes task-blink {
  50% {
    opacity: 0;
  }
}

/* ppt 逐页配音：N 页节点（未开始 / 进行中 / 已完成） */
.task-page-list {
  margin-top: 6px;
  padding: 0 0 2px 12px;
  border-left: 1px solid var(--ds-border, rgba(24, 24, 27, 0.08));
  max-height: 280px;
  overflow-y: auto;
}

.task-page-node {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 4px 0;
  font-size: 12px;
  color: var(--ds-text-subtle, #a1a1aa);
}

.task-page-dot {
  width: 8px;
  height: 8px;
  border-radius: 50%;
  flex-shrink: 0;
  border: 1.5px solid var(--ds-border-strong, rgba(24, 24, 27, 0.16));
  background: transparent;
}

.task-page-label {
  flex: 1;
  min-width: 0;
}

.task-page-state {
  font-size: 11px;
  color: var(--ds-text-subtle, #a1a1aa);
}

.task-page-node.is-todo .task-page-dot {
  background: transparent;
}

.task-page-node.is-run {
  color: var(--ds-text, #18181b);
  font-weight: 550;
}

.task-page-node.is-run .task-page-dot {
  border-color: var(--ds-accent, #4da6ff);
  background: var(--ds-accent, #4da6ff);
  box-shadow: 0 0 0 3px rgba(77, 166, 255, 0.2);
}

.task-page-node.is-run .task-page-state {
  color: var(--ds-accent-text, #097fe8);
}

.task-page-node.is-done {
  color: var(--ds-text-muted, #6b7280);
}

.task-page-node.is-done .task-page-dot {
  border-color: var(--ds-success, #22c55e);
  background: var(--ds-success, #22c55e);
}

.task-page-node.is-done .task-page-state {
  color: var(--ds-success, #22c55e);
}

/* 动作 */
.task-card-actions {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-top: 12px;
  padding-top: 12px;
  border-top: 1px solid var(--ds-border, rgba(24, 24, 27, 0.08));
}

.task-card-actions--success,
.task-card-actions--fail {
  justify-content: flex-start;
  gap: 8px;
  flex-wrap: wrap;
}

.task-card-actions--success .task-card-btn-ghost,
.task-card-actions--fail .task-card-btn-ghost {
  margin-left: auto;
}

.task-card-btn-link {
  font-size: 12px;
  color: var(--ds-accent-text, #097fe8);
  background: none;
  border: none;
  padding: 0;
  font-family: inherit;
  cursor: pointer;
}

.task-card-btn-stop {
  font-size: 12px;
  color: var(--ds-danger, #ef4444);
  background: var(--ds-bg, #fff);
  border: 1px solid rgba(239, 68, 68, 0.28);
  border-radius: var(--ds-radius-sm, 8px);
  padding: 4px 10px;
  font-family: inherit;
  cursor: pointer;
}

.task-card-btn-ink {
  font-size: 12px;
  color: var(--ds-text-on-ink, #fff);
  background: var(--ds-text, #18181b);
  border: 1px solid var(--ds-text, #18181b);
  border-radius: var(--ds-radius-sm, 8px);
  padding: 6px 14px;
  font-family: inherit;
  cursor: pointer;
}

.task-card-btn-soft {
  font-size: 12px;
  color: var(--ds-text, #18181b);
  background: rgba(24, 24, 27, 0.04);
  border: 1px solid transparent;
  border-radius: var(--ds-radius-sm, 8px);
  padding: 6px 12px;
  font-family: inherit;
  cursor: pointer;
}

.task-card-btn-ghost {
  font-size: 12px;
  color: var(--ds-text-muted, #6b7280);
  background: var(--ds-bg, #fff);
  border: 1px solid var(--ds-border-strong, rgba(24, 24, 27, 0.16));
  border-radius: var(--ds-radius-sm, 8px);
  padding: 6px 12px;
  font-family: inherit;
  cursor: pointer;
}

/* —— 完成态 S1 —— */
.task-card-result {
  display: flex;
  gap: 12px;
  margin-bottom: 14px;
}

.task-card-thumb {
  width: 64px;
  height: 84px;
  border-radius: 10px;
  background: linear-gradient(165deg, #1a1a1c 0%, #3a3a40 55%, #2a2a2e 100%);
  border: 1px solid var(--ds-border, rgba(24, 24, 27, 0.08));
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
  overflow: hidden;
  position: relative;
}

.task-card-thumb.has-cover {
  background: #111;
}

.task-card-thumb--fail {
  background: linear-gradient(165deg, #2a1515 0%, #3a2020 55%, #241414 100%);
}

.task-card-thumb-img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}

.task-card-thumb-play {
  width: 28px;
  height: 28px;
  border-radius: 50%;
  background: rgba(255, 255, 255, 0.92);
  color: var(--ds-text, #18181b);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 11px;
  font-weight: 700;
}

.task-card-thumb-fail-mark {
  width: 28px;
  height: 28px;
  border-radius: 50%;
  background: rgba(239, 68, 68, 0.2);
  color: #fecaca;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 12px;
  font-weight: 700;
}

.task-card-result-step {
  font-size: 12px;
  font-weight: 600;
  color: var(--ds-text-muted, #6b7280);
  margin-bottom: 4px;
}

.task-card-result-hint--fail {
  color: var(--ds-danger, #ef4444);
}

.task-card-result-meta {
  flex: 1;
  min-width: 0;
  display: flex;
  flex-direction: column;
}

.task-card-result-ready {
  font-size: 14px;
  font-weight: 650;
  margin-bottom: 4px;
}

.task-card-result-hint {
  font-size: 12.5px;
  color: var(--ds-text-muted, #6b7280);
  line-height: 1.45;
}

/* 兼容旧 class 名（若别处引用） */
.task-timeline-card {
  /* 已迁移到 .task-card */
}

/* stage redeploy: chat-video-task-card fail-parity */
.failure-explain-card { background: var(--ds-bg); border: 1px solid var(--ds-border-strong); border-radius: var(--ds-radius-lg); padding: 14px 16px; margin-top: 8px; }
.failure-kv { display: flex; gap: 8px; font-size: 12.5px; padding: 3px 0; }
.failure-kv span { color: var(--ds-text-subtle); min-width: 42px; }
.failure-kv strong { font-weight: 400; color: var(--ds-text); }
.failure-actions { display: flex; gap: 8px; margin-top: 10px; }
.failure-actions button { font-size: 12.5px; padding: 6px 14px; border-radius: var(--ds-radius-sm); border: 1px solid var(--ds-border-strong); background: var(--ds-bg); color: var(--ds-text); cursor: pointer; }
.failure-actions .primary { background: var(--ds-text); color: var(--ds-text-on-ink); border-color: var(--ds-text); font-weight: 600; }
.failure-actions .ghost { color: var(--ds-text-muted); }
/* Plan-B Task 1.1 — narrow variant CSS for dock (380px) */

.conversation-shell.narrow .conversation-shell-main {
  /* dock container 决定外宽，本组件占满 */
  width: 100%;
}

.conversation-shell.narrow .conversation-messages {
  max-width: none !important;
  padding: 16px 12px 12px !important;
}

.conversation-shell.narrow .reply-input,
.conversation-shell.narrow textarea {
  font-size: 13px;
}

/* narrow variant 直接不渲染 ChatHeader（见 ChatPaneView.tsx），无需 CSS 隐藏 */
.overwrite-confirm-card {
  width: 100%;
  box-sizing: border-box;
  border: 1px solid rgb(24 24 27 / 16%);
  border-radius: 14px;
  background: #fff;
  padding: 12px 14px;
  color: #18181b;
}

.overwrite-confirm-card__header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  margin-bottom: 8px;
}

.overwrite-confirm-card__header h3 {
  margin: 0;
  font-size: 13px;
  font-weight: 650;
}

.overwrite-confirm-card__header span {
  flex: none;
  border-radius: 999px;
  border: 1px solid #18181b;
  background: #fff;
  color: #18181b;
  padding: 1px 8px;
  font-family: "Geist Mono", ui-monospace, SFMono-Regular, Menlo, monospace;
  font-size: 10px;
  font-weight: 600;
}

.overwrite-confirm-card dl {
  margin: 0;
}

.overwrite-confirm-card dl > div {
  display: flex;
  gap: 8px;
  padding: 3px 0;
  font-size: 12px;
  line-height: 1.55;
}

.overwrite-confirm-card dt { min-width: 48px; color: #a1a1aa; }
.overwrite-confirm-card dd { margin: 0; color: #18181b; }

.overwrite-confirm-card footer {
  display: flex;
  gap: 8px;
  margin-top: 10px;
}

.overwrite-confirm-card button {
  border-radius: 8px;
  padding: 6px 14px;
  font-size: 12px;
  font-weight: 600;
  cursor: pointer;
}

.overwrite-confirm-card__primary {
  border: 1px solid #18181b;
  background: #18181b;
  color: #fff;
}

.overwrite-confirm-card__ghost {
  border: 1px solid rgb(24 24 27 / 16%);
  background: #fff;
  color: #6b7280;
}
/* DataCard widget shared CSS module
   All widget class families live here; tasks append their families below.
   Token source: frontend/src/styles/global-design.css (--ds-* tokens)
   配色：数据 Tab 全域 ink 灰阶（no-azure）；Signal #e8590c 仅 AI 洞察重点卡，负向 #b04141 */

/* ============================================================
   Task 1: Sparkline (.compactSpark family)
   Source: v2.html lines 203-241
   ============================================================ */

._compactSpark_1idoa_7 {
  display: flex;
  flex-direction: column;
  gap: var(--ds-space-1);
}

._csHead_1idoa_17 {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  font-size: 11px;
}

._csTitle_1idoa_24 {
  color: var(--ds-text-muted);
  font-weight: 600;
}

._csEnd_1idoa_29 {
  font-size: 11px;
  font-weight: 800;
  color: var(--ds-text);
  font-variant-numeric: tabular-nums;
}

._csDelta_1idoa_36 {
  color: var(--ds-success);
  font-weight: 700;
  margin-left: 2px;
}

._csDeltaDown_1idoa_42 {
  color: var(--ds-danger);
  font-weight: 700;
  margin-left: 2px;
}

._csAxis_1idoa_48 {
  display: flex;
  justify-content: space-between;
  font-size: 9px;
  color: var(--ds-text-subtle);
  font-variant-numeric: tabular-nums;
}

/* ============================================================
   Task 2: KpiCell (.kpiMini / .kpiCell / .skeletonBar families)
   Source: v2.html lines 169-194 (kpi-mini) + 554-610 (kpi-cell / skeleton)
   ============================================================ */

/* compact-mini variant */
._kpiMini_1idoa_57 {
  display: flex;
  flex-direction: column;
  gap: 2px;
}

._kpiMiniLabel_1idoa_68 {
  font-size: 10px;
  color: var(--ds-text-subtle);
  font-weight: 600;
  letter-spacing: 0.02em;
}

._kpiMiniNum_1idoa_75 {
  font-size: 18px;
  font-weight: 800;
  color: var(--ds-text);
  letter-spacing: -0.02em;
  font-variant-numeric: tabular-nums;
  line-height: 1.1;
}

._kpiMiniDeltaUp_1idoa_84 {
  font-size: 10px;
  font-weight: 600;
  color: var(--ds-success);
}

._kpiMiniDeltaDown_1idoa_90 {
  font-size: 10px;
  font-weight: 600;
  color: var(--ds-danger);
}

._kpiMiniDeltaPlaceholder_1idoa_96 {
  font-size: 10px;
  font-weight: 600;
  color: var(--ds-text-subtle);
}

/* expanded-row variant */
._kpiCell_1idoa_57 {
  padding: var(--ds-space-4);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-md);
  background: var(--ds-bg);
  display: flex;
  flex-direction: column;
  gap: var(--ds-space-1);
}

._kpiHead_1idoa_113 {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--ds-space-2);
  color: var(--ds-text);
}

._kpiIcon_1idoa_121 {
  width: 22px;
  height: 22px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 13px;
  color: var(--ds-text);
  background: var(--ds-bg-alt);
  border-radius: var(--ds-radius-sm);
}

._kpiNum_1idoa_133 {
  font-size: 26px;
  font-weight: 800;
  color: var(--ds-text);
  letter-spacing: -0.02em;
  font-variant-numeric: tabular-nums;
  line-height: 1.1;
}

._kpiLabel_1idoa_142 {
  font-size: 11px;
  color: var(--ds-text-subtle);
  font-weight: 600;
}

._kpiDeltaUp_1idoa_148 {
  font-size: 11px;
  font-weight: 600;
  color: var(--ds-success);
}

._kpiDeltaDown_1idoa_154 {
  font-size: 11px;
  font-weight: 600;
  color: var(--ds-danger);
}

._kpiDeltaPlaceholder_1idoa_160 {
  font-size: 11px;
  font-weight: 600;
  color: var(--ds-text-subtle);
}

/* skeleton variant */
._skeletonBar_1idoa_57 {
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg-deep);
}

._kpiCellSkeleton_1idoa_172 {
  gap: var(--ds-space-2);
}

._kpiCellSkeleton_1idoa_172 ._skeletonBar_1idoa_57:nth-child(1) { height: 22px; width: 60%; }
._kpiCellSkeleton_1idoa_172 ._skeletonBar_1idoa_57:nth-child(2) { height: 9px; width: 78%; }
._kpiCellSkeleton_1idoa_172 ._skeletonBar_1idoa_57:nth-child(3) { height: 9px; width: 50%; }

/* ============================================================
   Task 3: FilterBar (.filterBar / .filterChip / .filterBar* / .fb* / .fc* families)
   Source: v2.html lines 528-610
   ============================================================ */

._filterBar_1idoa_181 {
  display: flex;
  align-items: center;
  gap: var(--ds-space-2);
  padding: var(--ds-space-2) var(--ds-space-4);
  background: var(--ds-bg-alt);
  border-bottom: 1px solid var(--ds-border);
  flex-wrap: wrap;
  min-height: 40px;
}

._filterBarDisabled_1idoa_196 {
  opacity: 0.5;
  pointer-events: none;
}

._fbLabel_1idoa_201 {
  font-size: 10px;
  font-weight: 600;
  color: var(--ds-text-subtle);
  letter-spacing: 0.04em;
  text-transform: uppercase;
  flex-shrink: 0;
}

._filterChip_1idoa_181 {
  display: inline-flex;
  align-items: center;
  gap: 2px;
  padding: 2px 8px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg);
  font-size: 11px;
  font-weight: 600;
  color: var(--ds-text);
  cursor: pointer;
  transition: border-color 0.15s, background 0.15s;
  flex-shrink: 0;
}

._filterChip_1idoa_181:hover {
  border-color: var(--ds-text);
  background: var(--ds-bg-alt);
}

._filterChipActive_1idoa_231 {
  border-color: var(--ds-text);
  background: var(--ds-text);
  color: var(--ds-bg);
}

._fcCaret_1idoa_237 {
  font-size: 9px;
  opacity: 0.6;
}

/* 触发钮内的维度前缀（如「产品」「平台」），灰色弱化，与值区分。 */
._fdKey_1idoa_243 {
  color: var(--ds-text-subtle);
  font-weight: 600;
}

._fbSpacer_1idoa_248 {
  flex: 1;
}

._filterBarCta_1idoa_252 {
  display: inline-flex;
  align-items: center;
  gap: var(--ds-space-1);
  padding: 3px 10px;
  border: 1px solid var(--ds-text);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-text);
  font-size: 11px;
  font-weight: 600;
  color: var(--ds-bg);
  cursor: pointer;
  transition: opacity 0.15s;
  flex-shrink: 0;
}

._filterBarCta_1idoa_252:hover {
  opacity: 0.88;
}

._filterBarExport_1idoa_272 {
  display: inline-flex;
  align-items: center;
  gap: 2px;
  padding: 3px 10px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg);
  font-size: 11px;
  font-weight: 600;
  color: var(--ds-text);
  cursor: pointer;
  transition: border-color 0.15s;
  flex-shrink: 0;
}

._filterBarExport_1idoa_272:hover {
  border-color: var(--ds-text);
}

._fbCaret_1idoa_292 {
  font-size: 9px;
  opacity: 0.6;
}

._fbDisabledHint_1idoa_297 {
  font-size: 11px;
  font-weight: 600;
  color: var(--ds-text-subtle);
  font-style: italic;
}

/* ============================================================
   Task 4: StatusStrip (.compactStatus / .statusStrip families)
   Source: v2.html lines 244-291 (compact-status) + 620-655 (status-strip + dot variants)
   ============================================================ */

._compactStatus_1idoa_305 {
  display: flex;
  align-items: center;
  gap: var(--ds-space-1);
  font-size: 10px;
  color: var(--ds-text-subtle);
  flex-wrap: wrap;
}

._csChip_1idoa_318 {
  display: inline-flex;
  align-items: center;
  padding: 1px 6px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg-alt);
  font-size: 10px;
  font-weight: 600;
  color: var(--ds-text);
}

._csUpdated_1idoa_330 {
  font-size: 10px;
  color: var(--ds-text-subtle);
}

._csSyncBtn_1idoa_335 {
  display: inline-flex;
  align-items: center;
  gap: 2px;
  padding: 1px 6px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg);
  font-size: 10px;
  font-weight: 600;
  color: var(--ds-text);
  cursor: pointer;
  transition: border-color 0.15s;
}

._csSyncBtn_1idoa_335:hover {
  border-color: var(--ds-text);
}

._csSyncIcon_1idoa_354 {
  font-size: 11px;
}

._statusStrip_1idoa_305 {
  display: flex;
  align-items: center;
  gap: var(--ds-space-2);
  padding: var(--ds-space-2) var(--ds-space-4);
  background: var(--ds-bg-alt);
  border-bottom: 1px solid var(--ds-border);
  font-size: 11px;
  color: var(--ds-text-subtle);
  flex-wrap: wrap;
}

._dotSuccess_1idoa_370 {
  display: inline-block;
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--ds-success);
  flex-shrink: 0;
}

._dotRunning_1idoa_379 {
  display: inline-block;
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--ds-text);
  flex-shrink: 0;
  animation: _ssPulse_1idoa_1 1.2s ease-in-out infinite;
}

._dotFail_1idoa_389 {
  display: inline-block;
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--ds-danger);
  flex-shrink: 0;
}

@keyframes _ssPulse_1idoa_1 {
  0%, 100% { opacity: 1; }
  50% { opacity: 0.4; }
}

/* ============================================================
   Task 5: SyncProgressCell (.syncProgressCell / .syncStat family)
   Source: v2.html lines 763-820
   ============================================================ */

._syncProgressCell_1idoa_404 {
  display: flex;
  flex-direction: column;
  gap: var(--ds-space-2);
  padding: var(--ds-space-3) var(--ds-space-4);
  background: var(--ds-bg-alt);
  border-bottom: 1px solid var(--ds-border);
}

._syncProgressHead_1idoa_417 {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  font-size: 11px;
  color: var(--ds-text);
  font-weight: 600;
}

._spPct_1idoa_426 {
  color: var(--ds-text);
  font-weight: 800;
  font-variant-numeric: tabular-nums;
}

._spEta_1idoa_432 {
  font-size: 10px;
  color: var(--ds-text-subtle);
  font-weight: 500;
}

._syncBar_1idoa_438 {
  height: 6px;
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg-deep);
  overflow: hidden;
}

._syncBarFill_1idoa_445 {
  height: 100%;
  border-radius: var(--ds-radius-sm);
  background: var(--ds-text);
  transition: width 0.3s ease;
}

._syncStats_1idoa_452 {
  display: flex;
  gap: var(--ds-space-3);
  flex-wrap: wrap;
}

._syncStat_1idoa_404 {
  display: flex;
  flex-direction: column;
  gap: 1px;
  min-width: 52px;
}

._syncStatFail_1idoa_465 {
  display: flex;
  flex-direction: column;
  gap: 1px;
  min-width: 52px;
}

._ssNum_1idoa_472 {
  font-size: 16px;
  font-weight: 800;
  color: var(--ds-text);
  font-variant-numeric: tabular-nums;
  line-height: 1.1;
}

._syncStatFail_1idoa_465 ._ssNum_1idoa_472 {
  color: var(--ds-danger);
}

._ssLabel_1idoa_484 {
  font-size: 9px;
  color: var(--ds-text-subtle);
  font-weight: 600;
  letter-spacing: 0.02em;
}

._syncCurrentStep_1idoa_491 {
  font-size: 10px;
  color: var(--ds-text-subtle);
  line-height: 1.4;
}

/* ============================================================
   Task 6: Mini charts (.chartCell / .chartHead / .chartTitle /
   .chartSub / .chartLegend / .lg / .lgSw / .chartCanvas / .chartSvg)
   Source: v2.html lines 667-735
   ============================================================ */

._chartCell_1idoa_498 {
  display: flex;
  flex-direction: column;
  gap: var(--ds-space-1);
}

._chartHead_1idoa_498 {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  font-size: 11px;
}

._chartTitle_1idoa_498 {
  color: var(--ds-text);
  font-weight: 700;
}

._chartSub_1idoa_499 {
  font-size: 10px;
  color: var(--ds-text-subtle);
  font-weight: 500;
}

._chartLegend_1idoa_499 {
  display: flex;
  align-items: center;
  gap: var(--ds-space-2);
  font-size: 10px;
  color: var(--ds-text-subtle);
}

._lg_1idoa_499 {
  display: inline-flex;
  align-items: center;
  gap: 4px;
}

._lgSw_1idoa_499 {
  display: inline-block;
  width: 8px;
  height: 8px;
  border-radius: 2px;
  flex-shrink: 0;
}

._chartCanvas_1idoa_499 {
  position: relative;
  width: 100%;
}

._chartSvg_1idoa_499 {
  display: block;
  width: 100%;
  height: 80px;
}

/* ============================================================
   Task 7: DetailTable (.tableShell / .detailTable / .titleCell /
   .platCell / .numCell / .linkCell / .unsyncChip / .tableFoot /
   .tablePager / .pagerBtn / .pagerPage / .sortGlyph)
   Source: v2.html lines 737-826
   ============================================================ */

._tableShell_1idoa_561 {
  display: flex;
  flex-direction: column;
  gap: var(--ds-space-2);
  overflow-x: auto;
}

._detailTable_1idoa_561 {
  width: 100%;
  border-collapse: collapse;
  font-size: 12px;
}

._detailTable_1idoa_561 thead th {
  padding: 6px 8px;
  text-align: left;
  font-weight: 700;
  color: var(--ds-text-subtle);
  border-bottom: 1px solid var(--ds-border);
  white-space: nowrap;
}

._detailTable_1idoa_561 tbody td {
  padding: 6px 8px;
  border-bottom: 1px solid var(--ds-border-subtle, var(--ds-border));
  color: var(--ds-text);
  vertical-align: middle;
}

._detailTable_1idoa_561 tbody tr:last-child td {
  border-bottom: none;
}

._titleCell_1idoa_561 {
  max-width: 200px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

._platCell_1idoa_562 {
  white-space: nowrap;
  color: var(--ds-text-subtle);
}

._numCell_1idoa_562 {
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
}

._linkCell_1idoa_562 {
  white-space: nowrap;
}

._linkCell_1idoa_562 a {
  color: var(--ds-text);
  text-decoration: none;
  font-size: 11px;
  cursor: pointer;
}

._linkCell_1idoa_562 a:hover {
  text-decoration: underline;
}

._unsyncChip_1idoa_562 {
  display: inline-block;
  font-size: 10px;
  color: var(--ds-text-subtle);
  background: var(--ds-fill-subtle, #f3f4f6);
  border-radius: 3px;
  padding: 1px 4px;
  font-weight: 500;
}

._sortGlyph_1idoa_563 {
  margin-left: 3px;
  font-size: 9px;
  color: var(--ds-text-subtle);
}

._tableFoot_1idoa_562 {
  display: flex;
  align-items: center;
  justify-content: space-between;
  font-size: 11px;
  color: var(--ds-text-subtle);
  padding: 0 2px;
}

._tablePager_1idoa_563 {
  display: flex;
  align-items: center;
  gap: var(--ds-space-1);
}

._pagerBtn_1idoa_563 {
  background: none;
  border: 1px solid var(--ds-border);
  border-radius: 4px;
  padding: 2px 7px;
  font-size: 12px;
  cursor: pointer;
  color: var(--ds-text);
  line-height: 1.4;
}

._pagerBtn_1idoa_563:disabled {
  opacity: 0.35;
  cursor: not-allowed;
}

._pagerPage_1idoa_563 {
  font-size: 11px;
  color: var(--ds-text-subtle);
  font-variant-numeric: tabular-nums;
}

/* ── Task 8: VideoInlineCard ─────────────────────────────────── */

._vidInlineCard_1idoa_687 {
  display: flex;
  gap: var(--ds-space-4);
  padding: var(--ds-space-4);
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-lg);
  background: var(--ds-bg);
}

._vicThumb_1idoa_696 {
  position: relative;
  width: 120px;
  flex-shrink: 0;
  aspect-ratio: 9 / 16;
  border-radius: var(--ds-radius-md);
  overflow: hidden;
  background: linear-gradient(135deg, #44403c 0%, #292524 100%);
  box-shadow: 0 8px 16px -8px rgba(0, 0, 0, 0.4);
}

._vicFlag_1idoa_707 {
  position: absolute;
  top: var(--ds-space-2);
  left: var(--ds-space-2);
  padding: 2px var(--ds-space-2);
  background: rgba(0, 0, 0, 0.6);
  -webkit-backdrop-filter: blur(4px);
  backdrop-filter: blur(4px);
  color: var(--ds-text-on-ink);
  font-size: 10px;
  font-weight: 700;
  letter-spacing: 0.02em;
  border-radius: var(--ds-radius-pill);
  z-index: 2;
}

._vicDur_1idoa_723 {
  position: absolute;
  top: var(--ds-space-2);
  right: var(--ds-space-2);
  padding: 2px var(--ds-space-2);
  background: rgba(0, 0, 0, 0.6);
  color: var(--ds-text-on-ink);
  font-size: 10px;
  font-weight: 700;
  border-radius: var(--ds-radius-pill);
  font-variant-numeric: tabular-nums;
  z-index: 2;
}

._vicPlay_1idoa_737 {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  width: 36px;
  height: 36px;
  border-radius: 50%;
  background: rgba(255, 255, 255, 0.95);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 13px;
  color: var(--ds-text);
  box-shadow: 0 4px 10px -2px rgba(0, 0, 0, 0.4);
  z-index: 2;
}

._vicBottom_1idoa_755 {
  position: absolute;
  bottom: 0;
  left: 0;
  right: 0;
  padding: var(--ds-space-4) var(--ds-space-2) var(--ds-space-2);
  background: linear-gradient(180deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.85) 100%);
  color: var(--ds-text-on-ink);
  z-index: 1;
}

._vicMiniTitle_1idoa_766 {
  font-size: 11px;
  font-weight: 700;
  line-height: 1.3;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

._vicInfo_1idoa_776 {
  flex: 1;
  min-width: 0;
  display: flex;
  flex-direction: column;
  gap: var(--ds-space-3);
}

._vicHead_1idoa_784 {
  display: flex;
  flex-direction: column;
  gap: var(--ds-space-2);
}

._vicTitle_1idoa_790 {
  font-size: 15px;
  font-weight: 800;
  color: var(--ds-text);
  letter-spacing: -0.01em;
  line-height: 1.3;
}

._vicMeta_1idoa_798 {
  display: flex;
  align-items: center;
  gap: var(--ds-space-2);
  flex-wrap: wrap;
  font-size: 11px;
  color: var(--ds-text-muted);
}

._vicChip_1idoa_807 {
  display: inline-flex;
  align-items: center;
  padding: 1px var(--ds-space-2);
  border-radius: var(--ds-radius-pill);
  background: var(--ds-bg-alt);
  color: var(--ds-text-muted);
  font-weight: 600;
}

._vicChipPlat_1idoa_817 {
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
}

._vicStatsRow_1idoa_822 {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: var(--ds-space-3);
  padding: var(--ds-space-3) 0;
  border-top: 1px solid var(--ds-border);
  border-bottom: 1px solid var(--ds-border);
}

._vicStat_1idoa_822 {
  display: flex;
  flex-direction: column;
  gap: 2px;
}

._vicStatNum_1idoa_837 {
  font-size: 18px;
  font-weight: 800;
  color: var(--ds-text);
  letter-spacing: -0.02em;
  font-variant-numeric: tabular-nums;
  line-height: 1.1;
}

._vicStatLabel_1idoa_846 {
  font-size: 10px;
  color: var(--ds-text-subtle);
  font-weight: 600;
}

._vicStatDeltaUp_1idoa_852 {
  font-size: 10px;
  font-weight: 600;
  color: var(--ds-success);
}

._vicStatDeltaDown_1idoa_858 {
  font-size: 10px;
  font-weight: 600;
  color: var(--ds-danger);
}

._vicDerived_1idoa_864 {
  display: flex;
  align-items: center;
  gap: var(--ds-space-4);
  flex-wrap: wrap;
  font-size: 12px;
  color: var(--ds-text-muted);
}

._vdKey_1idoa_873 {
  color: var(--ds-text-subtle);
  margin-right: 4px;
}

._vdPending_1idoa_878 {
  color: var(--ds-text-subtle);
  font-style: italic;
}

._vicActions_1idoa_883 {
  display: flex;
  gap: var(--ds-space-2);
  margin-top: auto;
  flex-wrap: wrap;
}

._vicBtn_1idoa_890 {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  height: 32px;
  padding: 0 var(--ds-space-3);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg);
  color: var(--ds-text-muted);
  font-size: 12px;
  font-weight: 600;
  cursor: pointer;
  transition: border-color 0.15s, color 0.15s, background 0.15s;
}

._vicBtn_1idoa_890:hover {
  border-color: var(--ds-border-strong);
  color: var(--ds-text);
  background: var(--ds-bg-alt);
}

._vicBtnArrow_1idoa_912 {
  font-size: 11px;
  opacity: 0.8;
}

._vicBtnIcon_1idoa_917 {
  width: 32px;
  padding: 0;
  justify-content: center;
  font-size: 14px;
}

/* ── Task 9: DataCardCompact (canvasCard / cardHead / cardBody / kpi2x2 /
   genPreview / genProgress / failPreview / cardCtaWrap families)
   Source: _base.css lines 770-824, 1028-1099 + v2.html lines 163-354
   ─────────────────────────────────────────────────────────────────── */

._canvasCard_1idoa_929 {
  background: var(--ds-surface);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-lg);
  box-shadow: var(--ds-shadow-deep);
  overflow: hidden;
  display: flex;
  flex-direction: column;
}

._canvasCardGenerating_1idoa_939 {
  border-style: dashed;
  border-color: var(--ds-border-strong);
  box-shadow: none;
}

._canvasCardFailed_1idoa_945 {
  border-style: solid;
  border-color: var(--ds-danger);
  box-shadow: none;
}

._cardHead_1idoa_951 {
  display: flex;
  align-items: center;
  gap: var(--ds-space-2);
  padding: var(--ds-space-3) var(--ds-space-4);
  border-bottom: 1px solid var(--ds-border);
}

._cardEmoji_1idoa_959 {
  font-size: 15px;
  flex-shrink: 0;
}

._cardTitle_1idoa_964 {
  font-size: 13px;
  font-weight: 700;
  color: var(--ds-text);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

._cardBody_1idoa_973 {
  padding: var(--ds-space-4);
  display: flex;
  flex-direction: column;
  gap: var(--ds-space-3);
}

/* 2×2 KPI grid */
._kpi2x2_1idoa_981 {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--ds-space-2) var(--ds-space-3);
}

/* generating state */
._genPreview_1idoa_988 {
  height: 132px;
  border-radius: var(--ds-radius-md);
  background: var(--ds-bg-alt);
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: var(--ds-space-2);
}

._genIcon_1idoa_999 {
  font-size: 30px;
  color: var(--ds-text-subtle);
}

._genHint_1idoa_1004 {
  font-size: 12px;
  font-weight: 600;
  color: var(--ds-text-muted);
}

._genProgress_1idoa_1010 {
  display: flex;
  flex-direction: column;
  gap: var(--ds-space-2);
}

._genProgressRow_1idoa_1016 {
  display: flex;
  align-items: center;
  justify-content: space-between;
  font-size: 12px;
  font-weight: 600;
  color: var(--ds-text);
}

._genEta_1idoa_1025 {
  font-weight: 500;
  color: var(--ds-text-muted);
}

._genBar_1idoa_1030 {
  height: 6px;
  border-radius: var(--ds-radius-pill);
  background: var(--ds-bg-deep);
  overflow: hidden;
}

._genBarFill_1idoa_1037 {
  height: 100%;
  border-radius: var(--ds-radius-pill);
  background: var(--ds-success);
}

._cardMeta_1idoa_1043 {
  font-size: 12px;
  color: var(--ds-text-muted);
  line-height: 1.6;
}

/* failed state */
._failPreview_1idoa_1050 {
  height: 132px;
  border-radius: var(--ds-radius-md);
  background: var(--ds-danger-tint);
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: var(--ds-space-2);
}

._failIcon_1idoa_1061 {
  font-size: 28px;
  color: var(--ds-danger);
}

._failHint_1idoa_1066 {
  font-size: 12px;
  font-weight: 600;
  color: var(--ds-danger);
}

._failReason_1idoa_1072 {
  font-size: 12px;
  color: var(--ds-text-muted);
  line-height: 1.6;
}

/* CTA wrap + full-width button */
._cardCtaWrap_1idoa_1079 {
  padding: var(--ds-space-2) var(--ds-space-4) var(--ds-space-4);
}

._cardCtaFull_1idoa_1083 {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: var(--ds-space-2);
  width: 100%;
  height: 36px;
  border: none;
  border-radius: var(--ds-radius-md);
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
  font-size: 13px;
  font-weight: 700;
  letter-spacing: -0.005em;
  cursor: pointer;
  transition: opacity 0.15s;
}

._cardCtaFull_1idoa_1083:hover {
  opacity: 0.85;
}

._ctaArrow_1idoa_1105 {
  font-size: 12px;
  opacity: 0.7;
  transition: transform 0.15s, opacity 0.15s;
}

._cardCtaFull_1idoa_1083:hover ._ctaArrow_1idoa_1105 {
  transform: translateX(2px);
  opacity: 1;
}

/* ── Task 10: DataCardExpanded (canvasCardFull / statusBadge* / expandCollapseBtn /
   fullBody / exBlock / exLabel / labelCount / kpiRow / chartRow / chartEmpty /
   errorBox / ebIcon / metaGrid / cardActions / cardAction* families)
   Source: v2.html lines 332-870
   ─────────────────────────────────────────────────────────────────────────── */

._canvasCardFull_1idoa_1122 {
  width: 100%;
  min-width: 760px;
}

._statusBadgeSuccess_1idoa_1127 {
  display: inline-flex;
  align-items: center;
  padding: 2px 8px;
  border-radius: var(--ds-radius-pill);
  background: color-mix(in srgb, var(--ds-success) 12%, transparent);
  color: var(--ds-success);
  font-size: 10px;
  font-weight: 700;
  letter-spacing: 0.02em;
  flex-shrink: 0;
}

._statusBadgeRunning_1idoa_1140 {
  display: inline-flex;
  align-items: center;
  padding: 2px 8px;
  border-radius: var(--ds-radius-pill);
  background: color-mix(in srgb, var(--ds-text) 12%, transparent);
  color: var(--ds-text);
  font-size: 10px;
  font-weight: 700;
  letter-spacing: 0.02em;
  flex-shrink: 0;
}

._statusBadgeFail_1idoa_1153 {
  display: inline-flex;
  align-items: center;
  padding: 2px 8px;
  border-radius: var(--ds-radius-pill);
  background: var(--ds-danger-tint);
  color: var(--ds-danger);
  font-size: 10px;
  font-weight: 700;
  letter-spacing: 0.02em;
  flex-shrink: 0;
}

._expandCollapseBtn_1idoa_1166 {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  margin-left: auto;
  padding: 3px 10px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg);
  font-size: 11px;
  font-weight: 600;
  color: var(--ds-text-muted);
  cursor: pointer;
  transition: border-color 0.15s, color 0.15s;
  flex-shrink: 0;
}

._expandCollapseBtn_1idoa_1166:hover {
  border-color: var(--ds-border-strong);
  color: var(--ds-text);
}

._fullBody_1idoa_1188 {
  display: flex;
  flex-direction: column;
  overflow-y: auto;
}

._exBlock_1idoa_1194 {
  display: flex;
  flex-direction: column;
  gap: var(--ds-space-3);
  padding: var(--ds-space-4);
  border-bottom: 1px solid var(--ds-border);
}

._exLabel_1idoa_1202 {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: var(--ds-space-2);
  font-size: 11px;
  font-weight: 700;
  color: var(--ds-text-subtle);
  letter-spacing: 0.02em;
  text-transform: uppercase;
}

._labelCount_1idoa_1214 {
  font-size: 10px;
  font-weight: 500;
  color: var(--ds-text-subtle);
  text-transform: none;
  letter-spacing: 0;
}

._kpiRow_1idoa_1222 {
  display: grid;
  grid-template-columns: repeat(6, 1fr);
  gap: var(--ds-space-3);
}

._chartRow_1idoa_1228 {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: var(--ds-space-4);
}

._chartEmpty_1idoa_1234 {
  display: flex;
  align-items: center;
  justify-content: center;
  height: 160px;
  border-radius: var(--ds-radius-md);
  background: var(--ds-bg-deep);
  font-size: 11px;
  font-weight: 600;
  color: var(--ds-text-subtle);
  text-align: center;
  padding: var(--ds-space-4);
}

._errorBox_1idoa_1248 {
  display: flex;
  align-items: flex-start;
  gap: var(--ds-space-3);
  padding: var(--ds-space-3) var(--ds-space-4);
  border-radius: var(--ds-radius-md);
  background: var(--ds-danger-tint);
  border: 1px solid color-mix(in srgb, var(--ds-danger) 20%, transparent);
  font-size: 12px;
  color: var(--ds-text);
  line-height: 1.5;
}

._ebIcon_1idoa_1261 {
  flex-shrink: 0;
  width: 20px;
  height: 20px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: 50%;
  background: var(--ds-danger);
  color: #fff;
  font-size: 11px;
  font-weight: 800;
  margin-top: 1px;
}

._metaGrid_1idoa_1276 {
  display: grid;
  grid-template-columns: max-content 1fr;
  gap: var(--ds-space-2) var(--ds-space-4);
  margin: 0;
  font-size: 12px;
}

._metaGrid_1idoa_1276 dt {
  font-weight: 600;
  color: var(--ds-text-subtle);
  white-space: nowrap;
}

._metaGrid_1idoa_1276 dd {
  color: var(--ds-text);
  margin: 0;
  font-variant-numeric: tabular-nums;
}

._cardActions_1idoa_1296 {
  display: flex;
  align-items: center;
  gap: var(--ds-space-2);
  padding: var(--ds-space-3) var(--ds-space-4);
  border-top: 1px solid var(--ds-border);
  flex-wrap: wrap;
}

._cardAction_1idoa_1296 {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  height: 30px;
  padding: 0 var(--ds-space-3);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg);
  font-size: 12px;
  font-weight: 600;
  color: var(--ds-text-muted);
  cursor: pointer;
  transition: border-color 0.15s, color 0.15s, background 0.15s;
  flex-shrink: 0;
}

._cardAction_1idoa_1296:hover {
  border-color: var(--ds-border-strong);
  color: var(--ds-text);
  background: var(--ds-bg-alt);
}

._cardActionPrimary_1idoa_1328 {
  border-color: var(--ds-text);
  color: var(--ds-text);
  background: color-mix(in srgb, var(--ds-text) 6%, transparent);
}

._cardActionPrimary_1idoa_1328:hover {
  background: color-mix(in srgb, var(--ds-text) 12%, transparent);
  border-color: var(--ds-text);
  color: var(--ds-text);
}

._cardActionDanger_1idoa_1340 {
  border-color: color-mix(in srgb, var(--ds-danger) 40%, transparent);
  color: var(--ds-danger);
  background: transparent;
}

._cardActionDanger_1idoa_1340:hover {
  background: var(--ds-danger-tint);
  border-color: var(--ds-danger);
  color: var(--ds-danger);
}

/* ============================================================
   Task 11: VideoDetailCard (.vd* family)
   Source: v2.html lines 1102-1330
   ============================================================ */

._statusBadgeNeutral_1idoa_1357 {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 2px 8px;
  border-radius: 99px;
  font-size: 11px;
  font-weight: 600;
  background: color-mix(in srgb, var(--ds-text-muted) 10%, transparent);
  color: var(--ds-text-muted);
  border: 1px solid color-mix(in srgb, var(--ds-text-muted) 20%, transparent);
  flex-shrink: 0;
}

._vdBreadcrumb_1idoa_1371 {
  display: flex;
  align-items: center;
  gap: 6px;
  padding: 10px 16px 6px;
  font-size: 11px;
  color: var(--ds-text-muted);
  flex-wrap: wrap;
  border-bottom: 1px solid var(--ds-border);
}

._vdBreadcrumbBack_1idoa_1382 {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  background: none;
  border: none;
  padding: 0;
  cursor: pointer;
  color: var(--ds-text);
  font-size: 11px;
  font-weight: 600;
  transition: color 0.15s;
}

._vdBreadcrumbBack_1idoa_1382:hover {
  color: var(--ds-text);
  text-decoration: underline;
}

._vdBreadcrumbSep_1idoa_1401 {
  color: var(--ds-border-strong);
  font-size: 11px;
}

._vdBody_1idoa_1406 {
  display: flex;
  gap: 16px;
  padding: 16px;
  overflow: auto;
  flex: 1;
}

._vdPreview_1idoa_1414 {
  position: relative;
  width: 140px;
  min-width: 140px;
  aspect-ratio: 9 / 16;
  border-radius: var(--ds-radius);
  background: var(--ds-bg-alt);
  border: 1px solid var(--ds-border);
  overflow: hidden;
  flex-shrink: 0;
  display: flex;
  flex-direction: column;
}

._vdFlag_1idoa_1428 {
  position: absolute;
  top: 8px;
  left: 8px;
  right: 8px;
  font-size: 10px;
  font-weight: 600;
  color: #fff;
  background: color-mix(in srgb, #000 55%, transparent);
  padding: 2px 6px;
  border-radius: 4px;
  z-index: 1;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

._vdDur_1idoa_1445 {
  position: absolute;
  bottom: 56px;
  right: 8px;
  font-size: 10px;
  font-weight: 700;
  color: #fff;
  background: color-mix(in srgb, #000 50%, transparent);
  padding: 1px 5px;
  border-radius: 3px;
  z-index: 1;
  font-variant-numeric: tabular-nums;
}

._vdPlay_1idoa_1459 {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  width: 36px;
  height: 36px;
  border-radius: 50%;
  background: color-mix(in srgb, #000 45%, transparent);
  color: #fff;
  font-size: 14px;
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  z-index: 2;
  transition: background 0.15s, transform 0.1s;
}

._vdPlay_1idoa_1459:hover {
  background: color-mix(in srgb, #000 65%, transparent);
  transform: translate(-50%, -50%) scale(1.08);
}

._vdBottom_1idoa_1483 {
  position: absolute;
  bottom: 0;
  left: 0;
  right: 0;
  padding: 24px 8px 8px;
  background: linear-gradient(to bottom, transparent, color-mix(in srgb, #000 70%, transparent));
  z-index: 1;
}

._vdThumbnailTitle_1idoa_1493 {
  font-size: 10px;
  font-weight: 700;
  color: #fff;
  line-height: 1.3;
  margin-bottom: 2px;
}

._vdThumbnailSub_1idoa_1501 {
  font-size: 9px;
  color: rgba(255, 255, 255, 0.75);
  line-height: 1.3;
}

._vdInfo_1idoa_1507 {
  flex: 1;
  display: flex;
  flex-direction: column;
  gap: 12px;
  min-width: 0;
}

._vdHead_1idoa_1515 {
  display: flex;
  flex-direction: column;
  gap: 4px;
}

._vdTitleMain_1idoa_1521 {
  font-size: 15px;
  font-weight: 700;
  color: var(--ds-text);
  line-height: 1.4;
}

._vdDesc_1idoa_1528 {
  font-size: 12px;
  color: var(--ds-text-muted);
  line-height: 1.5;
}

._vdTags_1idoa_1534 {
  display: flex;
  flex-wrap: wrap;
  gap: 5px;
}

._vdTag_1idoa_1534 {
  display: inline-flex;
  align-items: center;
  padding: 2px 8px;
  border-radius: 99px;
  font-size: 11px;
  font-weight: 500;
  border: 1px solid var(--ds-border);
  color: var(--ds-text-muted);
  background: var(--ds-bg-alt);
}

._vdTagPlat_1idoa_1552 {
  border-color: var(--ds-border-strong);
  color: var(--ds-text-muted);
  background: var(--ds-bg-alt);
}

._vdMetaGrid_1idoa_1558 {
  display: grid;
  grid-template-columns: max-content 1fr;
  gap: 4px 12px;
  margin: 0;
  padding: 10px 12px;
  background: var(--ds-bg-alt);
  border-radius: var(--ds-radius-sm);
  border: 1px solid var(--ds-border);
}

._vdMetaGrid_1idoa_1558 dt {
  font-size: 11px;
  color: var(--ds-text-muted);
  white-space: nowrap;
}

._vdMetaGrid_1idoa_1558 dd {
  font-size: 11px;
  color: var(--ds-text);
  margin: 0;
  word-break: break-all;
}

._mono_1idoa_1582 {
  font-family: 'JetBrains Mono', 'Fira Code', 'Cascadia Code', ui-monospace, monospace;
  font-size: 10px;
  letter-spacing: 0.03em;
}

._vdPlatformsLabel_1idoa_1588 {
  font-size: 11px;
  font-weight: 700;
  color: var(--ds-text-muted);
  text-transform: uppercase;
  letter-spacing: 0.06em;
  margin-bottom: 6px;
}

._vdKpiGrid_1idoa_1597 {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 8px;
}

._vdKpi_1idoa_1597 {
  display: flex;
  flex-direction: column;
  gap: 2px;
  padding: 8px 10px;
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg-alt);
  border: 1px solid var(--ds-border);
}

._vdKpiNum_1idoa_1613 {
  font-size: 18px;
  font-weight: 800;
  color: var(--ds-text);
  font-variant-numeric: tabular-nums;
  line-height: 1.2;
}

._vdKpiLabel_1idoa_1621 {
  font-size: 10px;
  color: var(--ds-text-muted);
  font-weight: 500;
}

._vdKpiDeltaUp_1idoa_1627 {
  font-size: 10px;
  color: var(--ds-success);
  font-weight: 600;
}

._vdKpiDeltaDown_1idoa_1633 {
  font-size: 10px;
  color: var(--ds-danger);
  font-weight: 600;
}

._vdKpiDeltaPlaceholder_1idoa_1639 {
  font-size: 10px;
  color: var(--ds-text-subtle);
  font-weight: 600;
}

._vdPlatforms_1idoa_1588 {
  display: flex;
  flex-direction: column;
  gap: 6px;
}

._vdPlatformRow_1idoa_1651 {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 8px 12px;
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg-alt);
  border: 1px solid var(--ds-border);
  flex-wrap: wrap;
}

._vdPlatformHead_1idoa_1662 {
  display: flex;
  align-items: center;
  gap: 6px;
  min-width: 60px;
  flex-shrink: 0;
  font-size: 12px;
  font-weight: 700;
  color: var(--ds-text);
}

._vdPlatformIcon_1idoa_1673 {
  width: 22px;
  height: 22px;
  border-radius: 6px;
  background: var(--ds-bg-alt);
  border: 1px solid var(--ds-border);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 11px;
  font-weight: 700;
  color: var(--ds-text);
  flex-shrink: 0;
}

._vdPlatformName_1idoa_1688 {
  font-size: 12px;
  font-weight: 700;
  color: var(--ds-text);
  min-width: 40px;
  flex-shrink: 0;
}

._vdPlatformLabel_1idoa_1696 {
  font-size: 12px;
  font-weight: 700;
  color: var(--ds-text);
}

._vdPlatformStats_1idoa_1702 {
  display: flex;
  flex-wrap: wrap;
  gap: 6px 14px;
  flex: 1;
  font-size: 11px;
  color: var(--ds-text-muted);
}

._vdPlatformStats_1idoa_1702 b {
  color: var(--ds-text);
  font-weight: 700;
}

._vdPlatformLink_1idoa_1716 {
  display: inline-flex;
  align-items: center;
  gap: 3px;
  font-size: 11px;
  font-weight: 600;
  color: var(--ds-text);
  text-decoration: none;
  padding: 3px 8px;
  border-radius: var(--ds-radius-sm);
  border: 1px solid var(--ds-border);
  background: var(--ds-bg-alt);
  transition: background 0.15s, border-color 0.15s;
  flex-shrink: 0;
}

._vdPlatformLink_1idoa_1716:hover {
  background: var(--ds-bg-alt);
  border-color: var(--ds-text);
}

._vdActions_1idoa_1737 {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  padding-top: 4px;
  border-top: 1px solid var(--ds-border);
}

/* ============================================================
   Task 5: FilterDropdown menu (.fdWrap / .fdMenu / .fdItem / .fdItemActive)
   Reuses .filterChip / .fcCaret trigger styles (Task 3 family above)
   ============================================================ */

._fdWrap_1idoa_1746 {
  position: relative;
  display: inline-flex;
  flex-shrink: 0;
}

._fdMenu_1idoa_1746 {
  position: absolute;
  top: calc(100% + 4px);
  left: 0;
  z-index: 20;
  min-width: 120px;
  padding: 4px;
  background: var(--ds-bg);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
  box-shadow: var(--ds-shadow-deep);
  display: flex;
  flex-direction: column;
  gap: 2px;
  max-height: 240px;
  overflow-y: auto;
}

._fdItem_1idoa_1746 {
  display: block;
  width: 100%;
  text-align: left;
  padding: 5px 10px;
  border: none;
  background: transparent;
  font-size: 12px;
  color: var(--ds-text);
  cursor: pointer;
  border-radius: var(--ds-radius-sm);
  white-space: nowrap;
}

._fdItem_1idoa_1746:hover {
  background: var(--ds-bg-alt);
}

._fdItemActive_1idoa_1746 {
  color: var(--ds-text);
  font-weight: 600;
}

._gaugeNum_1idoa_1797 {
  font-family: var(--ds-font-mono);
  font-size: 30px;
  font-weight: 700;
  fill: var(--ds-text);
}

._gaugeSub_1idoa_1804 {
  font-size: 11px;
  fill: var(--ds-text-muted);
}

/* ============================================================
   Task 4: KpiBento (Hero + 5 KPI bento) — .kpiBento family
   Source: docs/design/2026-06-23-data-tab-dashboard.html §2 + §7b
   Colours: ink only (no azure). `--ds-shadow-card` token absent → shadow inlined.
   ============================================================ */

._card_1idoa_951 {
  background: var(--ds-surface);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-lg);
  box-shadow: 0 1px 2px rgba(24, 24, 27, 0.04), 0 4px 12px rgba(24, 24, 27, 0.04);
}

._mono_1idoa_1582 {
  font-family: var(--ds-font-mono);
  font-feature-settings: "tnum" 1;
  font-variant-numeric: tabular-nums;
}

._cardEyebrow_1idoa_1828 {
  font-family: var(--ds-font-mono);
  font-size: 10px;
  font-weight: 600;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--ds-text-subtle);
}

._delta_1idoa_1837 {
  font-family: var(--ds-font-mono);
  font-size: 12px;
  font-weight: 600;
  display: inline-flex;
  align-items: center;
  gap: 3px;
  font-variant-numeric: tabular-nums;
}

._deltaUp_1idoa_1847 {
  color: var(--dash-up, var(--ds-text));
}

._deltaDown_1idoa_1851 {
  color: var(--dash-down, #b04141);
}

._kpiBento_1idoa_1810 {
  display: grid;
  grid-template-columns: 1.25fr 2.6fr;
  gap: 16px;
  margin-bottom: 16px;
}

/* ── Task 3：dense 8 列变体（仅 dashboard 内 .shell 作用域；小卡无此 class → 原 .kpiBento 不变）── */
/* 必须紧跟 .kpiBento 之后，同特异性下靠源序覆盖 grid-template-columns。*/
._kpiBentoDense_1idoa_1864 {
  grid-template-columns: repeat(8, 1fr);
}

/* compact 断点（spec §3 / 设计稿 lyt1）：窄屏 KPI 8→4 列，与外层 .chartGrid 降 2 列对齐；
   hero 保持 span2。仅 dense（看板 .shell）作用域，小卡非 dense 不受影响。 */
@media (max-width: 1200px) {
  ._kpiBentoDense_1idoa_1864 {
    grid-template-columns: repeat(4, 1fr);
  }
}

/* dense 下让 .kpiRight 透明化，其 6 个子单元（5 KPI + GEO 第 6 格）直接铺进根 8 列网格，
   组成 hero(span2) + 5 KPI + GEO = 8 列。不改原 .kpiRight 规则（仅 dense 作用域覆盖 display）。*/
._kpiBentoDense_1idoa_1864 ._kpiRight_1idoa_1876 {
  display: contents;
}

._heroDense_1idoa_1882 {
  grid-column: span 2;
}

/* dense 单元：每指标左边条（var(--kpi-accent) 由单元 inline style 注入，回退 ink） */
._kpiBentoDense_1idoa_1864 ._kpiCard_1idoa_1887 {
  position: relative;
  overflow: hidden;
}

._kpiBentoDense_1idoa_1864 ._kpiCard_1idoa_1887::before {
  content: '';
  position: absolute;
  left: 0;
  top: 0;
  bottom: 0;
  width: 3px;
  background: var(--kpi-accent, var(--ds-text));
}

/* dense 单元：每指标图标着色（回退 ink） */
._kpiBentoDense_1idoa_1864 ._kcIc_1idoa_1903 {
  background: color-mix(in srgb, var(--kpi-accent, var(--ds-text)) 15%, transparent);
  border-color: color-mix(in srgb, var(--kpi-accent, var(--ds-text)) 32%, transparent);
  color: var(--kpi-accent, var(--ds-text));
}

._hero2_1idoa_1909 {
  position: relative;
  overflow: hidden;
  display: flex;
  flex-direction: column;
  padding: 20px 22px 0;
}

._heroTop_1idoa_1917 {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 10px;
}

._big_1idoa_1924 {
  font-size: clamp(40px, 4.4vw, 60px);
  font-weight: 700;
  letter-spacing: -0.03em;
  line-height: 1;
  margin-top: 16px;
}

._heroSub_1idoa_1932 {
  display: flex;
  align-items: center;
  gap: 10px;
  margin-top: 12px;
  font-size: 12px;
  color: var(--ds-text-muted);
  flex-wrap: wrap;
}

._heroPrev_1idoa_1942 {
  color: var(--ds-text-subtle);
}

._heroSpark_1idoa_1946 {
  margin-top: 14px;
  height: 90px;
}

._heroSpark_1idoa_1946 svg {
  display: block;
  width: 100%;
  height: 100%;
  overflow: visible;
}

._kpiRight_1idoa_1876 {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  grid-auto-rows: 1fr;
  gap: 16px;
}

._kpiCard_1idoa_1887 {
  padding: 14px 16px 12px;
  display: flex;
  flex-direction: column;
  min-height: 104px;
}

._kcTop_1idoa_1972 {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
}

._kcLabel_1idoa_1979 {
  font-size: 12px;
  color: var(--ds-text-muted);
  font-weight: 600;
}

._kcIc_1idoa_1903 {
  width: 23px;
  height: 23px;
  border-radius: 7px;
  background: var(--ds-bg-alt);
  border: 1px solid var(--ds-border);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 11px;
  color: var(--ds-text-muted);
  flex-shrink: 0;
}

._kcNum_1idoa_1999 {
  font-size: 27px;
  font-weight: 700;
  letter-spacing: -0.01em;
  margin-top: 12px;
  line-height: 1;
}

._kcFt_1idoa_2007 {
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: 8px;
  margin-top: auto;
  padding-top: 10px;
}

._kcFt_1idoa_2007 ._spark_1idoa_2016 {
  width: 62px;
  height: 22px;
  flex-shrink: 0;
}

/* ── finetune 紧凑卡内胆（dense 专用，仅 dashboard .shell 作用域）──
   目标稿 docs/design/2026-06-30-data-dashboard-tailwind-finetune.html .kpi/.kpi--wide：
   竖排 [label·icon] / [数字 + 内联 ▲delta] / [底部满宽迷你面积图（margin-top:auto 贴底）]。
   小卡（DataCardExpanded 非 dense）不带这些 class → 原 kcNum/kcFt 布局与 ink 完全不变。
   必须排在 .kpiCard 之后：同为单类特异性，靠源序覆盖 padding。 */
._kpiCardDense_1idoa_2027 {
  padding: 11px 13px 10px;
  gap: 4px;
  min-height: 104px;
}

._kcFigure_1idoa_2033 {
  display: flex;
  align-items: baseline;
  gap: 7px;
  flex-wrap: wrap;
}

._kpiCardDense_1idoa_2027 ._kcNum_1idoa_1999 {
  margin-top: 0;
  font-size: 25px;
}

/* dense hero 数字更大（对齐 .kpi--wide .kpi-val=38，收紧到 34 适配 console 密度）；
   紧跟 .kpiCardDense .kcNum 之后，同特异性靠源序对 hero 覆盖字号。 */
._kpiCardDense_1idoa_2027 ._heroNum_1idoa_2047 {
  font-size: 34px;
}

._kcSpark_1idoa_2051 {
  margin-top: auto;
  padding-top: 6px;
  width: 100%;
}

._kcSpark_1idoa_2051 ._spark_1idoa_2016 {
  display: block;
  width: 100%;
  height: 30px;
}

._heroCompact_1idoa_2063 ._kcSpark_1idoa_2051 ._spark_1idoa_2016 {
  height: 42px;
}

/* dense 趋势图（AreaPlayChart）：固定图区高对齐 .ccChart（176px），与同行 gauge/donut 卡格等高，
   不用无上限 flex 撑高整行（原 flex:1 令趋势卡撑到 ~330px，把 gauge/donut 拉高留大片空白）。
   小卡非 dense 不带 .chartCellDense → 保持 .chartSvg 固定 80px 不变。 */
._chartCellDense_1idoa_2069 ._chartSvg_1idoa_499 {
  height: 176px;
}

/* AI insight strip (Plan A Task 5) — Signal #e8590c only here, else ink */
._insightStrip_1idoa_2075 {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 16px;
}

._insight_1idoa_2075 {
  padding: 13px 15px;
  display: flex;
  gap: 11px;
  align-items: flex-start;
}

._ico_1idoa_2088 {
  width: 24px;
  height: 24px;
  border-radius: 7px;
  background: var(--ds-bg-alt);
  border: 1px solid var(--ds-border);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 12px;
  flex-shrink: 0;
}

._insight_1idoa_2075._sig_1idoa_2101 ._ico_1idoa_2088 {
  background: rgba(232, 89, 12, 0.1);
  border-color: rgba(232, 89, 12, 0.32);
  color: #e8590c;
}

._insightBody_1idoa_2107 {
  min-width: 0;
}

._eyebrow_1idoa_2111 {
  font-family: var(--ds-font-mono);
  font-size: 9px;
  font-weight: 600;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--ds-text-subtle);
  margin-bottom: 4px;
}

._it_1idoa_2121 {
  font-size: 12px;
  line-height: 1.55;
  color: var(--ds-text-muted);
}

._itB_1idoa_2127 {
  color: var(--ds-text);
  font-weight: 600;
}

._itPos_1idoa_2132 {
  color: var(--ds-text);
  font-family: var(--ds-font-mono);
  font-weight: 600;
  font-variant-numeric: tabular-nums;
}

._itNeg_1idoa_2139 {
  color: #b04141;
  font-family: var(--ds-font-mono);
  font-weight: 600;
  font-variant-numeric: tabular-nums;
}

._itSig_1idoa_2146 {
  color: #e8590c;
  font-weight: 700;
}

/* ============================================================
   Task 7: 展开态 P0 看板 section header + 趋势行卡片
   (.secH / .shT / .shM / .rowP0 / .ccHead / .ccT / .ccM / .ccChart)
   Source: docs/design/2026-06-23-data-tab-dashboard.html §1 row-main + §7b
   Colours: ink only (no azure).
   ============================================================ */

._secH_1idoa_2153 {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 12px;
  margin: 0 2px 13px;
}

._shT_1idoa_2153 {
  font-size: 13px;
  font-weight: 700;
  color: var(--ds-text);
}

._shM_1idoa_2153 {
  font-size: 11px;
  color: var(--ds-text-subtle);
}

._rowP0_1idoa_2153 {
  display: grid;
  grid-template-columns: 2fr 1fr;
  gap: 16px;
}

._ccHead_1idoa_2153 {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  padding: 16px 16px 0;
}

._ccT_1idoa_2153 {
  font-size: 13px;
  font-weight: 700;
  color: var(--ds-text);
}

._ccM_1idoa_2153 {
  font-size: 10px;
  color: var(--ds-text-subtle);
}

._ccChart_1idoa_2067 {
  position: relative;
  width: 100%;
  padding: 12px 16px 16px;
}
.hs-tc {
  display: flex;
  flex-direction: column;
  color: var(--ds-text, #18181b);
  font-size: 13px;
  line-height: 1.5;
}

.hs-tc-top {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 8px;
}

.hs-tc-name {
  font-size: 13px;
  font-weight: 700;
  letter-spacing: -0.02em;
}

.hs-tc-product {
  margin-top: 2px;
  font-size: 11px;
  color: var(--ds-text-subtle, #a1a1aa);
}

.hs-tc-sid {
  font-family: var(--ds-font-mono, ui-monospace, monospace);
  font-size: 10px;
  color: var(--ds-text-subtle, #a1a1aa);
  flex: none;
  margin-top: 2px;
}

.hs-tc-status {
  margin-top: 12px;
  padding-top: 12px;
  border-top: 1px solid var(--ds-border, rgba(24, 24, 27, 0.08));
}

.hs-tc-now-label {
  font-size: 10px;
  font-weight: 650;
  color: var(--ds-text-subtle, #a1a1aa);
  letter-spacing: 0.05em;
  text-transform: uppercase;
}

.hs-tc-now-title {
  margin-top: 4px;
  font-size: 14px;
  font-weight: 700;
  letter-spacing: -0.02em;
  line-height: 1.3;
}

.hs-tc-now-desc {
  margin-top: 3px;
  font-size: 11.5px;
  color: var(--ds-text-muted, #6b7280);
  line-height: 1.45;
}

.hs-tc-nodes {
  margin-top: 12px;
  display: flex;
  flex-direction: column;
}

.hs-tc-node {
  display: grid;
  grid-template-columns: 14px 1fr;
  gap: 8px;
  position: relative;
  padding: 0 0 10px;
}

.hs-tc-node:last-child {
  padding-bottom: 0;
}

.hs-tc-node:not(:last-child)::before {
  content: "";
  position: absolute;
  left: 5px;
  top: 12px;
  bottom: 0;
  width: 1px;
  background: rgba(24, 24, 27, 0.12);
}

.hs-tc-dot {
  width: 11px;
  height: 11px;
  border-radius: 50%;
  margin-top: 2px;
  border: 1.5px solid #d4d4d8;
  background: var(--ds-bg, #fff);
  position: relative;
  z-index: 1;
  box-sizing: border-box;
}

.hs-tc-node.done .hs-tc-dot {
  background: var(--ds-text, #18181b);
  border-color: var(--ds-text, #18181b);
}

.hs-tc-node.now .hs-tc-dot {
  border-color: var(--ds-text, #18181b);
  box-shadow: inset 0 0 0 2.5px var(--ds-bg, #fff);
  background: var(--ds-text, #18181b);
}

.hs-tc-nt {
  font-size: 12px;
  font-weight: 650;
  color: var(--ds-text, #18181b);
  line-height: 1.3;
}

.hs-tc-ns {
  font-size: 11px;
  color: var(--ds-text-muted, #6b7280);
  margin-top: 1px;
  line-height: 1.35;
}

.hs-tc-node.pending .hs-tc-nt {
  color: var(--ds-text-subtle, #a1a1aa);
  font-weight: 500;
}

.hs-tc-node.pending .hs-tc-ns {
  color: #c4c4c8;
}

.hs-tc-node.now .hs-tc-nt {
  font-weight: 700;
}

.hs-tc-snap {
  margin-top: 12px;
  padding-top: 12px;
  border-top: 1px solid var(--ds-border, rgba(24, 24, 27, 0.08));
}

.hs-tc-lab {
  font-size: 10px;
  font-weight: 650;
  color: var(--ds-text-subtle, #a1a1aa);
  letter-spacing: 0.04em;
  text-transform: uppercase;
  display: flex;
  justify-content: space-between;
  gap: 8px;
  margin-bottom: 5px;
}

.hs-tc-lab em {
  font-style: normal;
  text-transform: none;
  letter-spacing: 0;
  font-weight: 600;
  color: var(--ds-text-muted, #6b7280);
  font-family: var(--ds-font-mono, ui-monospace, monospace);
  font-size: 10px;
}

.hs-tc-title {
  font-size: 12.5px;
  font-weight: 700;
  line-height: 1.4;
  letter-spacing: -0.015em;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

.hs-tc-excerpt {
  margin: 0;
  font-size: 11.5px;
  color: var(--ds-text-muted, #6b7280);
  line-height: 1.5;
  display: -webkit-box;
  -webkit-line-clamp: 3;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

.hs-tc-note {
  margin-top: 6px;
  font-size: 11px;
  color: #3f3f46;
  line-height: 1.4;
}

.hs-tc-video {
  display: flex;
  gap: 9px;
  align-items: center;
}

.hs-tc-vthumb {
  width: 36px;
  height: 48px;
  border-radius: 5px;
  flex: none;
  background: #18181b;
  position: relative;
  overflow: hidden;
}

.hs-tc-vthumb img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.hs-tc-vthumb.run::before {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.08), transparent);
  animation: hs-tc-shimmer 1.5s infinite;
}

@keyframes hs-tc-shimmer {
  0% { transform: translateX(-60%); }
  100% { transform: translateX(60%); }
}

.hs-tc-vt {
  font-size: 12px;
  font-weight: 700;
}

.hs-tc-vs {
  font-size: 11px;
  color: var(--ds-text-muted, #6b7280);
  margin-top: 2px;
}

.hs-tc-actions {
  margin-top: 14px;
  display: flex;
  flex-direction: column;
  gap: 6px;
}

.hs-tc-btn {
  width: 100%;
  height: 30px;
  border-radius: 7px;
  font: inherit;
  font-size: 12px;
  font-weight: 650;
  cursor: pointer;
  padding: 0 12px;
}

.hs-tc-btn.ink {
  background: var(--ds-text, #18181b);
  border: 1px solid var(--ds-text, #18181b);
  color: #fff;
}

.hs-tc-btn.ghost {
  background: transparent;
  border: 1px solid transparent;
  color: var(--ds-text-muted, #6b7280);
}

.hs-tc-btn.ghost:hover {
  color: var(--ds-text, #18181b);
  background: var(--ds-bg-alt, #f5f5f4);
}
/* 巨量投放 brief 主 CTA：console no-azure 的实心 ink-on-ink 按钮。
 *
 * 背景：geo/styles/global.css 的暗主题遗留规则 `.ant-btn-default{background:transparent!important}`
 * 会压过组件内联 style.background；又因 antd Modal 是 body 级 portal、逃出 antd-overrides.css 的
 * `.dp-revamp/.account-settings` 反制 scope，内联 ink 填充失效，CTA 在真机渲染成透明底近似纯文字态。
 *
 * 修法：用更高特异度（`.placement-brief-submit.ant-btn`，2 类 > `.ant-btn-default` 1 类）+ !important
 * 强制实心 ink 填充。仅作用于启用态（`:not(:disabled)`），禁用态保留 antd 默认置灰。全局规则，
 * 不依赖 portal 落点。 */
.placement-brief-submit.ant-btn:not(:disabled) {
  background: var(--ds-text, #18181b) !important;
  border-color: var(--ds-text, #18181b) !important;
  color: var(--ds-bg, #ffffff) !important;
  font-weight: 700;
}
.placement-brief-submit.ant-btn:not(:disabled):hover,
.placement-brief-submit.ant-btn:not(:disabled):focus {
  background: #000 !important;
  border-color: #000 !important;
  color: #ffffff !important;
}
._card_lbk3o_1 {
  display: flex;
  flex-direction: column;
  gap: 20px;
  padding: 20px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-xl);
  background: var(--ds-bg);
  color: var(--ds-text);
  font-family: var(--ds-font);
}

._header_lbk3o_13 {
  display: flex;
  align-items: flex-start;
  gap: 14px;
}

._mark_lbk3o_19 {
  width: 38px;
  height: 38px;
  flex-shrink: 0;
  display: grid;
  place-items: center;
  border-radius: var(--ds-radius-md);
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
}

._headerText_lbk3o_30 {
  display: flex;
  flex: 1;
  min-width: 0;
  flex-direction: column;
  gap: 4px;
}

._headerText_lbk3o_30 h2 {
  margin: 0;
  font-size: 16px;
  font-weight: 800;
  letter-spacing: -0.01em;
}

._headerText_lbk3o_30 p {
  margin: 0;
  font-size: 12.5px;
  color: var(--ds-text-muted);
  line-height: 1.5;
}

._group_lbk3o_52 {
  display: flex;
  flex-direction: column;
  gap: 10px;
}

._label_lbk3o_58 {
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: 12px;
  font-weight: 700;
  color: var(--ds-text-muted);
}

._hint_lbk3o_67 {
  font-weight: 500;
  color: var(--ds-text-subtle);
}

._chips_lbk3o_72 {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
}

._chip_lbk3o_72 {
  display: inline-flex;
  align-items: center;
  padding: 0 15px;
  height: 34px;
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-pill);
  background: var(--ds-bg);
  color: var(--ds-text-muted);
  font-size: 13px;
  font-weight: 600;
  cursor: pointer;
}

._chip_lbk3o_72:hover {
  border-color: var(--ds-text);
}

._chipOn_lbk3o_96 {
  border-color: var(--ds-text);
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
}

._check_lbk3o_102 {
  margin-right: 7px;
  font-size: 11px;
}

._customNote_lbk3o_107 {
  margin: 0;
  font-size: 12px;
  color: var(--ds-text-subtle);
}

._rhythm_lbk3o_113 {
  display: flex;
  flex-direction: column;
  gap: 10px;
}

._rhythmCard_lbk3o_119 {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 14px 15px;
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-md);
  background: var(--ds-bg);
  cursor: pointer;
  text-align: left;
}

._rhythmCard_lbk3o_119:hover {
  border-color: var(--ds-text);
}

._rhythmCardOn_lbk3o_135 {
  border-color: var(--ds-text);
  box-shadow: inset 0 0 0 1px var(--ds-text);
}

._radio_lbk3o_140 {
  width: 18px;
  height: 18px;
  flex-shrink: 0;
  border: 1.5px solid var(--ds-border-strong);
  border-radius: 50%;
}

._rhythmCardOn_lbk3o_135 ._radio_lbk3o_140 {
  position: relative;
  border-color: var(--ds-text);
}

._rhythmCardOn_lbk3o_135 ._radio_lbk3o_140::after {
  content: '';
  position: absolute;
  inset: 3.5px;
  border-radius: 50%;
  background: var(--ds-text);
}

._rhythmMain_lbk3o_161 {
  display: flex;
  flex: 1;
  min-width: 0;
  flex-direction: column;
  gap: 2px;
}

._rhythmTitle_lbk3o_169 {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  font-size: 14px;
  font-weight: 700;
}

._rhythmDesc_lbk3o_177 {
  font-size: 12px;
  color: var(--ds-text-muted);
}

._recommended_lbk3o_182 {
  padding: 2px 7px;
  border-radius: var(--ds-radius-pill);
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
  font-size: 10px;
  font-weight: 800;
}

._rhythmCount_lbk3o_191 {
  flex-shrink: 0;
  font-family: var(--ds-font-mono);
  font-size: 13px;
  font-weight: 700;
  color: var(--ds-text);
  font-variant-numeric: tabular-nums;
}

._plan_lbk3o_200 {
  display: flex;
  align-items: flex-start;
  gap: 12px;
  padding: 15px 16px;
  border-radius: var(--ds-radius-md);
  background: var(--ds-bg-alt);
}

._planMark_lbk3o_209 {
  width: 26px;
  height: 26px;
  flex-shrink: 0;
  display: grid;
  place-items: center;
  border-radius: var(--ds-radius-sm);
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
}

._planText_lbk3o_220 {
  margin: 0;
  font-size: 13px;
  line-height: 1.65;
}

._mono_lbk3o_226 {
  font-family: var(--ds-font-mono);
  font-variant-numeric: tabular-nums;
}

._success_lbk3o_231 {
  margin: 0;
  padding: 12px 14px;
  border-radius: var(--ds-radius-md);
  background: color-mix(in srgb, var(--ds-bg) 78%, #dbeafe 22%);
  color: var(--ds-text);
  font-size: 12.5px;
  line-height: 1.5;
}

._footer_lbk3o_241 {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
}

._footerNote_lbk3o_248 {
  margin: 0;
  font-size: 12px;
  color: var(--ds-text-subtle);
}

._primaryButton_lbk3o_254 {
  flex-shrink: 0;
  min-width: 112px;
  height: 38px;
  padding: 0 18px;
  border: none;
  border-radius: var(--ds-radius-pill);
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
  font-size: 13px;
  font-weight: 700;
  cursor: pointer;
}

._primaryButton_lbk3o_254:disabled {
  opacity: 0.45;
  cursor: not-allowed;
}

@media (max-width: 720px) {
  ._card_lbk3o_1 {
    padding: 18px;
  }

  ._header_lbk3o_13 {
    gap: 12px;
  }

  ._rhythmCard_lbk3o_119 {
    align-items: flex-start;
    flex-direction: column;
  }

  ._footer_lbk3o_241 {
    align-items: stretch;
    flex-direction: column;
  }

  ._primaryButton_lbk3o_254 {
    width: 100%;
  }
}
.omb-agent-card {
  box-sizing: border-box;
  width: 100%;
  display: flex;
  flex-direction: column;
  gap: var(--ds-space-3);
  padding: var(--ds-space-3);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-md);
  background: var(--ds-bg);
  color: var(--ds-text);
}

.omb-agent-copy h2 {
  margin: 0;
  font-size: 13px;
  line-height: 1.35;
  font-weight: 800;
  letter-spacing: 0;
}

.omb-agent-copy p {
  margin: 5px 0 0;
  color: var(--ds-text-muted);
  font-size: 12px;
  line-height: 1.5;
}

.omb-agent-default-option {
  display: inline-flex;
  align-items: flex-start;
  gap: var(--ds-space-2);
  color: var(--ds-text-muted);
  font-size: 12px;
  line-height: 1.45;
  cursor: pointer;
}

.omb-agent-default-option input {
  width: 14px;
  height: 14px;
  margin: 1px 0 0;
  accent-color: var(--ds-text);
  flex: 0 0 auto;
}

.omb-agent-error {
  font-size: 12px;
  line-height: 1.45;
  color: var(--ds-danger, #b42318);
}

.omb-agent-actions {
  display: flex;
  flex-wrap: wrap;
  justify-content: flex-end;
  gap: var(--ds-space-2);
}

.omb-agent-btn {
  min-height: 32px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: var(--ds-space-1);
  padding: 7px 10px;
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-sm);
  font-size: 12px;
  font-weight: 800;
  line-height: 1.35;
  white-space: normal;
  cursor: pointer;
}

.omb-agent-btn:disabled {
  cursor: not-allowed;
  opacity: 0.62;
}

.omb-agent-btn--ghost {
  background: var(--ds-bg);
  color: var(--ds-text);
}

.omb-agent-btn--primary {
  border-color: var(--ds-text);
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
}

@media (max-width: 720px) {
  .omb-agent-actions {
    flex-direction: column-reverse;
  }

  .omb-agent-btn {
    width: 100%;
  }
}
/**
 * 对话流剪辑预览轻卡样式（P1 场景①）。
 * 视觉基准：mclip 主仓 docs/design/2026-06-11-mclip-ui-scenarios.html 场景 01/02
 *   .preview-card / .ab-row / .frame-shot。
 * 浅色 token 与设计稿一一对齐：
 *   --paper #f7f8f4 · --ink #17201d · --muted #62716c · --line #cbd6cf
 *   --accent #0b6f61（改后 / 成功）· --accent-2 #a43f31（失败）
 * 仅覆盖 A/B 试听卡 + 字幕效果图卡两张卡的三态（pending / ready / failed·degraded）。
 */
.clip-card {
  --clip-paper: #f7f8f4;
  --clip-ink: #17201d;
  --clip-muted: #62716c;
  --clip-line: #cbd6cf;
  --clip-accent: #0b6f61;
  --clip-accent-soft: #f0f7f4;
  --clip-danger: #a43f31;
  --clip-warn: #a4632f;

  align-self: flex-start;
  width: 100%;
  max-width: 360px;
  box-sizing: border-box;
  border: 1.5px solid var(--clip-ink);
  border-radius: 10px;
  background: var(--clip-paper);
  color: var(--clip-ink);
  padding: 12px;
  font-size: 12.5px;
  line-height: 1.5;
}

.clip-card[data-status='failed'] {
  border-color: var(--clip-danger);
}

.clip-card[data-status='degraded'] {
  border-style: dashed;
  border-color: var(--clip-warn);
  background: #fdf9f3;
}

/* ===== 卡头：标题 + 版本号 pill ===== */
.clip-card-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  margin-bottom: 10px;
}

.clip-card-title {
  font-size: 12px;
  font-weight: 850;
  letter-spacing: 0.2px;
}

.clip-card[data-status='failed'] .clip-card-title {
  color: var(--clip-danger);
}

.clip-card[data-status='degraded'] .clip-card-title {
  color: var(--clip-warn);
}

.clip-card-rev {
  flex: none;
  border: 1px solid var(--clip-line);
  border-radius: 999px;
  padding: 1px 9px;
  font-size: 10.5px;
  font-weight: 800;
  color: var(--clip-muted);
  background: #fff;
}

/* ===== pending：占位骨架 ===== */
.clip-card-skeleton {
  display: flex;
  flex-direction: column;
  gap: 8px;
}

.clip-skeleton-bar {
  display: block;
  height: 28px;
  border-radius: 6px;
  background: linear-gradient(
    90deg,
    #e7ede9 25%,
    #f2f6f3 37%,
    #e7ede9 63%
  );
  background-size: 400% 100%;
  animation: clip-skeleton-shimmer 1.4s ease infinite;
}

.clip-skeleton-block {
  display: block;
  height: 120px;
  border-radius: 6px;
  background: linear-gradient(
    90deg,
    #e7ede9 25%,
    #f2f6f3 37%,
    #e7ede9 63%
  );
  background-size: 400% 100%;
  animation: clip-skeleton-shimmer 1.4s ease infinite;
}

.clip-skeleton-hint {
  font-size: 11.5px;
  color: var(--clip-muted);
}

@keyframes clip-skeleton-shimmer {
  0% {
    background-position: 100% 0;
  }
  100% {
    background-position: 0 0;
  }
}

/* ===== ready (audio A/B)：改前 / 改后 双播放器 ===== */
.clip-ab-players {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 8px;
}

.clip-ab-slot {
  display: flex;
  flex-direction: column;
  gap: 6px;
  border: 1px solid var(--clip-line);
  border-radius: 8px;
  padding: 10px;
  text-align: center;
  background: #fff;
}

.clip-ab-slot > span {
  font-size: 11px;
  font-weight: 850;
  color: var(--clip-muted);
}

.clip-ab-slot--after {
  border-color: var(--clip-accent);
  background: var(--clip-accent-soft);
}

.clip-ab-slot--after > span {
  color: var(--clip-accent);
}

.clip-ab-slot audio {
  width: 100%;
  height: 30px;
}

/* ===== ready (subtitle still)：单帧效果图（深色舞台） ===== */
.clip-still-frame {
  border-radius: 8px;
  overflow: hidden;
  background: #18221f;
  min-height: 120px;
  display: flex;
  align-items: center;
  justify-content: center;
}

.clip-still-img {
  display: block;
  width: 100%;
  height: auto;
  object-fit: contain;
}

/* ===== ready (timeline)：结构变更后的分镜列表 ===== */
.clip-timeline-list {
  display: flex;
  flex-direction: column;
  gap: 7px;
  margin: 0;
  padding: 0;
  list-style: none;
}

.clip-timeline-row {
  display: grid;
  grid-template-columns: 24px minmax(0, 1fr) auto;
  align-items: center;
  gap: 8px;
  border: 1px solid var(--clip-line);
  border-radius: 8px;
  padding: 8px;
  background: #fff;
}

.clip-timeline-index {
  display: grid;
  place-items: center;
  width: 22px;
  height: 22px;
  border-radius: 50%;
  background: var(--clip-accent-soft);
  color: var(--clip-accent);
  font-size: 11px;
  font-weight: 850;
}

.clip-timeline-text {
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  font-weight: 750;
}

.clip-timeline-duration {
  color: var(--clip-muted);
  font-size: 11px;
  font-weight: 800;
}

/* ===== ready (asset replace)：原素材 / 新素材对比 ===== */
.clip-asset-meta {
  display: flex;
  justify-content: space-between;
  gap: 8px;
  margin-bottom: 8px;
  color: var(--clip-muted);
  font-size: 11px;
  font-weight: 800;
}

.clip-asset-compare {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 8px;
}

.clip-asset-slot {
  min-width: 0;
  border: 1px solid var(--clip-line);
  border-radius: 8px;
  padding: 9px;
  background: #fff;
}

.clip-asset-slot--after {
  border-color: var(--clip-accent);
  background: var(--clip-accent-soft);
}

.clip-asset-label {
  display: block;
  margin-bottom: 5px;
  color: var(--clip-muted);
  font-size: 11px;
  font-weight: 850;
}

.clip-asset-slot--after .clip-asset-label {
  color: var(--clip-accent);
}

.clip-asset-slot strong {
  display: block;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  font-size: 12px;
}

/* ===== ready (canvas)：画布规格前后对比 ===== */
.clip-canvas-compare {
  display: grid;
  gap: 8px;
}

.clip-canvas-spec-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  border: 1px solid var(--clip-line);
  border-radius: 8px;
  padding: 9px;
  background: #fff;
  font-size: 12px;
}

.clip-canvas-spec-row span {
  color: var(--clip-muted);
  font-weight: 850;
}

.clip-canvas-spec-row strong {
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.clip-canvas-spec-row--after {
  border-color: var(--clip-accent);
  background: var(--clip-accent-soft);
}

/* ===== failed / degraded：固定文案 pill + 出口说明 ===== */
.clip-card-fallback {
  display: flex;
  flex-direction: column;
  gap: 8px;
}

/* ===== edit controls：右侧 agent 可操作控制卡 ===== */
.clip-control-card {
  display: flex;
  flex-direction: column;
  gap: 10px;
}

.clip-control-scenes {
  display: flex;
  flex-direction: column;
  gap: 8px;
}

.clip-control-row {
  display: grid;
  grid-template-columns: 24px minmax(0, 1fr) auto;
  align-items: center;
  gap: 8px;
  width: 100%;
  border: 1px solid var(--clip-line);
  border-radius: 8px;
  padding: 8px;
  background: #fff;
  color: inherit;
  font: inherit;
  text-align: left;
  cursor: pointer;
}

.clip-control-row.is-selected {
  border-color: var(--clip-accent);
  background: var(--clip-accent-soft);
}

.clip-control-main {
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  font-weight: 750;
}

.clip-control-field {
  display: flex;
  flex-direction: column;
  gap: 6px;
}

.clip-control-field > span {
  color: var(--clip-muted);
  font-size: 11px;
  font-weight: 850;
}

.clip-control-field textarea {
  min-height: 86px;
  resize: vertical;
  border: 1px solid var(--clip-line);
  border-radius: 8px;
  padding: 9px;
  background: #fff;
  color: var(--clip-ink);
  font: inherit;
  line-height: 1.55;
}

.clip-control-field input[type='range'] {
  width: 100%;
  accent-color: var(--clip-accent);
}

.clip-control-pill-grid {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}

.clip-choice-pill {
  border: 1px solid var(--clip-line);
  border-radius: 999px;
  background: #fff;
  color: var(--clip-ink);
  padding: 7px 10px;
  font: inherit;
  font-size: 12px;
  font-weight: 850;
  cursor: pointer;
}

.clip-choice-pill.is-selected {
  border-color: var(--clip-accent);
  background: var(--clip-accent-soft);
  color: var(--clip-accent);
}

.clip-checkbox-row {
  display: flex;
  align-items: center;
  gap: 8px;
  border: 1px solid var(--clip-line);
  border-radius: 8px;
  padding: 8px;
  background: #fff;
  font-weight: 800;
}

.clip-checkbox-row input {
  accent-color: var(--clip-accent);
}

.clip-current-note {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  border: 1px solid var(--clip-line);
  border-radius: 8px;
  padding: 8px;
  background: #fff;
}

.clip-current-note span {
  color: var(--clip-muted);
  font-size: 11px;
  font-weight: 850;
}

.clip-current-note strong {
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  font-size: 12px;
}

.clip-asset-candidate-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 8px;
}

.clip-asset-candidate {
  min-width: 0;
  border: 1px solid var(--clip-line);
  border-radius: 8px;
  padding: 7px;
  background: #fff;
  color: var(--clip-ink);
  font: inherit;
  font-weight: 850;
  text-align: left;
  cursor: pointer;
}

.clip-asset-candidate.is-selected {
  border-color: var(--clip-accent);
  background: var(--clip-accent-soft);
}

.clip-asset-candidate img,
.clip-asset-thumb-placeholder {
  display: grid;
  place-items: center;
  width: 100%;
  aspect-ratio: 16 / 9;
  border-radius: 6px;
  background: #e7ede9;
  color: var(--clip-muted);
  object-fit: cover;
  font-size: 11px;
}

.clip-asset-candidate span:last-child {
  display: block;
  min-width: 0;
  margin-top: 6px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}

.clip-control-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  align-items: center;
  justify-content: space-between;
}

.clip-btn {
  border: 1px solid var(--clip-line);
  border-radius: 8px;
  background: #fff;
  color: var(--clip-ink);
  padding: 8px 11px;
  font: inherit;
  font-weight: 850;
  cursor: pointer;
}

.clip-btn--primary {
  border-color: var(--clip-ink);
  background: var(--clip-ink);
  color: #fff;
}

.clip-btn:disabled {
  cursor: not-allowed;
  opacity: 0.52;
}

.clip-pill {
  align-self: flex-start;
  border-radius: 999px;
  padding: 2px 10px;
  font-size: 11px;
  font-weight: 850;
  border: 1px solid currentColor;
}

.clip-pill--failed {
  color: var(--clip-danger);
  background: #f9ebe8;
}

.clip-pill--degraded {
  color: var(--clip-warn);
  background: #fdf3e8;
}

.clip-fallback-text {
  margin: 0;
  font-size: 12px;
  color: var(--clip-ink);
}

/* =====================================================================
   画布节点（重卡）：成片预览 / 时间线 / 出片确认（Task 12，决策 4/5）。
   视觉基准：mclip 主仓 docs/design/2026-06-11-mclip-ui-scenarios.html
     场景 ⑤⑥ .mock-timeline/.tl-seg、⑦⑧ .video-stage/.pc-actions。
   命名空间 .clip-node*，与轻卡的 .clip-card* 不重叠；node 节点不在 .clip-card
   作用域内，故下方 token 落到 :root（轻卡 .clip-card 自带同名局部 token，两套
   互不覆盖：轻卡读局部、节点读 :root）。仅新增、不改动上方轻卡任何样式。
   ===================================================================== */
:root {
  --clip-ink: #17201d;
  --clip-muted: #62716c;
  --clip-line: #cbd6cf;
  --clip-panel: #ffffff;
  --clip-panel-soft: #eef4f1;
  --clip-accent: #0b6f61;
  --clip-warn: #a43f31;
  --clip-info: #24527a;
}

.clip-node {
  width: 680px;
  box-sizing: border-box;
  border: 2px solid var(--clip-ink);
  border-radius: 12px;
  background: var(--clip-panel);
  color: var(--clip-ink);
  padding: 12px 14px;
  box-shadow: 4px 4px 0 rgba(23, 32, 29, 0.12);
}

.clip-edit-card {
  display: flex;
  flex-direction: column;
  max-height: 620px;
  overflow: hidden;
}

.clip-node-head {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-bottom: 10px;
}

.clip-node-title {
  font-weight: 700;
  color: var(--clip-ink);
  font-size: 14px;
}

.clip-canvas-spec {
  font-size: 11px;
  color: var(--clip-muted);
}

/* ===== 成片预览节点：深色舞台 + 内嵌播放器 ===== */
.clip-draft-video {
  display: block;
  width: 100%;
  border-radius: 8px;
  background: #000;
}

.clip-draft-placeholder {
  height: 180px;
  display: grid;
  place-items: center;
  color: #9fb4ac;
  background: #18221f;
  border-radius: 8px;
  font-size: 12px;
}

/* 出片中：成片预览节点描边收紧到 accent，呼应「进行中」语义 */
.clip-draft-preview[data-status='finalizing'] {
  border-color: var(--clip-accent);
}

.clip-draft-preview[data-status='done'] {
  border-color: var(--clip-accent);
}

/* ===== 时间线节点：分镜条 ===== */
.clip-timeline-rows {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: 4px;
}

.clip-timeline-row {
  display: flex;
  align-items: center;
  gap: 8px;
  border: 1px solid var(--clip-line);
  border-radius: 8px;
  padding: 6px 8px;
  font-size: 12px;
  background: var(--clip-panel-soft);
}

.clip-row-index {
  flex: none;
  width: 18px;
  height: 18px;
  display: grid;
  place-items: center;
  border-radius: 50%;
  background: var(--clip-accent);
  color: #fff;
  font-size: 11px;
}

.clip-row-text {
  flex: 1;
  color: var(--clip-ink);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.clip-row-duration {
  flex: none;
  color: var(--clip-muted);
}

.clip-scene-table {
  display: grid;
  gap: 6px;
  flex: 1 1 auto;
  min-height: 0;
  max-height: 430px;
  overflow: auto;
}

.clip-structure-lock-notice {
  border: 1px solid var(--clip-line);
  border-radius: 7px;
  background: #fff8e6;
  color: #795c11;
  font-size: 12px;
  line-height: 1.45;
  padding: 7px 9px;
}

.clip-scene-table-head,
.clip-scene-row {
  display: grid;
  grid-template-columns: 46px 108px minmax(180px, 1fr) 72px 34px;
  align-items: center;
  gap: 8px;
}

.clip-scene-table-head {
  color: var(--clip-muted);
  font-size: 11px;
  font-weight: 800;
  padding: 0 6px;
}

.clip-scene-block {
  display: grid;
  gap: 5px;
}

.clip-scene-row {
  border: 1px solid var(--clip-line);
  border-radius: 8px;
  background: var(--clip-panel-soft);
  padding: 6px;
}

.clip-scene-row .clip-row-index {
  width: 42px;
  height: 24px;
  border-radius: 7px;
  cursor: grab;
  font-weight: 800;
}

.clip-row-material {
  display: grid;
  gap: 4px;
  min-width: 0;
}

.clip-row-material video,
.clip-row-material img,
.clip-row-material-empty {
  width: 100%;
  height: 54px;
  object-fit: cover;
  border: 1px solid var(--clip-line);
  border-radius: 7px;
  background: #eef4f1;
}

.clip-row-material-empty {
  display: grid;
  place-items: center;
  color: var(--clip-muted);
  font-size: 11px;
}

.clip-row-link-btn,
.clip-insert-btn {
  border: 1px solid var(--clip-line);
  border-radius: 7px;
  background: #fff;
  color: var(--clip-accent);
  font-size: 11px;
  font-weight: 800;
  padding: 4px 6px;
  cursor: pointer;
}

.clip-row-link-btn:disabled {
  color: var(--clip-muted);
  cursor: not-allowed;
  opacity: 0.6;
}

.clip-row-text-input {
  min-width: 0;
  height: 74px;
  resize: none;
  border: 1px solid var(--clip-line);
  border-radius: 7px;
  padding: 6px 8px;
  background: #fff;
  color: var(--clip-ink);
  font-size: 12px;
  line-height: 1.45;
}

.clip-row-duration-input {
  display: flex;
  align-items: center;
  gap: 3px;
  color: var(--clip-muted);
  font-size: 11px;
  font-weight: 800;
}

.clip-row-duration-input input {
  width: 52px;
  border: 1px solid var(--clip-line);
  border-radius: 7px;
  padding: 5px 4px;
  background: #fff;
  color: var(--clip-ink);
  font-size: 12px;
  font-weight: 800;
}

.clip-row-duration-input input:disabled {
  color: var(--clip-muted);
  cursor: not-allowed;
  opacity: 0.65;
}

.clip-row-delete {
  width: 26px;
  height: 26px;
  border: 1px solid var(--clip-line);
  border-radius: 50%;
  background: #fff;
  color: var(--clip-muted);
  font-size: 13px;
  font-weight: 900;
  cursor: pointer;
}

.clip-row-delete:disabled {
  cursor: not-allowed;
  opacity: 0.6;
}

.clip-scene-insert {
  display: flex;
  justify-content: center;
}

.clip-insert-btn {
  min-width: 104px;
  border-style: dashed;
}

.clip-scene-insert-editor {
  display: grid;
  grid-template-columns: minmax(180px, 1fr) 64px 74px;
  gap: 6px;
  width: calc(100% - 48px);
  border: 1px dashed var(--clip-line);
  border-radius: 8px;
  padding: 6px;
  background: #fff;
}

.clip-scene-insert-editor input {
  min-width: 0;
  border: 1px solid var(--clip-line);
  border-radius: 7px;
  padding: 5px 7px;
  font-size: 12px;
}

.clip-timeline-total {
  margin-top: 8px;
  font-size: 12px;
  color: var(--clip-muted);
  text-align: right;
}

.clip-edit-last-change {
  display: flex;
  justify-content: space-between;
  gap: 8px;
  margin-top: 8px;
  border: 1px solid var(--clip-line);
  border-radius: 8px;
  padding: 6px 8px;
  background: #fff;
  color: var(--clip-accent);
  font-size: 12px;
  font-weight: 700;
}

.clip-edit-history {
  display: grid;
  gap: 6px;
  margin-top: 8px;
  max-height: 108px;
  overflow: auto;
  padding-right: 2px;
}

.clip-edit-history-row {
  display: flex;
  justify-content: space-between;
  gap: 8px;
  border: 1px solid var(--clip-line);
  border-radius: 8px;
  padding: 6px 8px;
  background: #fff;
  color: var(--clip-ink);
  font-size: 12px;
  font-weight: 700;
}

.clip-edit-history-row span:last-child {
  color: var(--clip-muted);
  font-weight: 800;
}

.clip-active-edit-badge {
  margin-left: auto;
  border: 1px solid var(--clip-accent);
  border-radius: 999px;
  padding: 1px 8px;
  background: var(--clip-panel-soft);
  color: var(--clip-accent);
  font-size: 11px;
  font-weight: 800;
}

.clip-edit-compare {
  display: grid;
  grid-template-columns: 1fr auto 1fr;
  align-items: center;
  gap: 8px;
  margin-bottom: 10px;
  font-size: 12px;
  font-weight: 800;
}

.clip-edit-compare span {
  border: 1px solid var(--clip-line);
  border-radius: 8px;
  padding: 6px 8px;
  background: #fff;
  text-align: center;
}

.clip-edit-compare span[data-testid='clip-compare-edge'] {
  border: 0;
  padding: 0;
  color: var(--clip-muted);
  background: transparent;
}

.clip-edit-compare span[data-testid='clip-pending-new-video-node'],
.clip-edit-compare span[data-testid='clip-finalized-new-video-node'] {
  border-color: var(--clip-accent);
  background: var(--clip-panel-soft);
  color: var(--clip-accent);
}

/* ===== 出片确认卡：四态（confirm / finalizing / done / failed） ===== */
.clip-finalize-summary p {
  margin: 0 0 10px;
  font-size: 12px;
  color: var(--clip-ink);
}

.clip-finalize-error {
  margin: 8px 0;
  font-size: 12px;
  color: var(--clip-warn);
  line-height: 1.5;
}

.clip-finalize-actions {
  display: flex;
  gap: 8px;
  margin-top: 10px;
}

.clip-btn {
  flex: 1;
  border: 1px solid var(--clip-ink);
  border-radius: 8px;
  background: var(--clip-panel);
  color: var(--clip-ink);
  font-size: 13px;
  padding: 7px 0;
  cursor: pointer;
}

.clip-btn--primary {
  background: var(--clip-accent);
  border-color: var(--clip-accent);
  color: #fff;
}

.clip-btn:disabled {
  opacity: 0.5;
  cursor: not-allowed;
}

/* 四态描边：confirm 黑框待确认 / finalizing accent 进行中 / done 成功 / failed 警示 */
.clip-finalize-card[data-phase='finalizing'] { border-color: var(--clip-accent); }
.clip-finalize-card[data-phase='done'] { border-color: var(--clip-accent); }
.clip-finalize-card[data-phase='failed'] { border-color: var(--clip-warn); }

/* ===== 画布内编辑意图卡：源视频 -> 编辑底稿旁的当前操作卡 ===== */
.clip-editing-intent-card {
  width: 560px;
  min-height: 360px;
  display: flex;
  flex-direction: column;
  border-color: var(--clip-info);
  box-shadow: 4px 4px 0 rgba(36, 82, 122, 0.14);
}

.clip-editing-intent-card[data-phase='failed'] {
  border-color: var(--clip-warn);
}

.clip-intent-target {
  margin-left: auto;
  border: 1px solid var(--clip-line);
  border-radius: 999px;
  padding: 1px 8px;
  background: #fff;
  color: var(--clip-muted);
  font-size: 11px;
  font-weight: 800;
}

.clip-intent-body {
  flex: 1;
  margin-top: 10px;
  min-height: 0;
}

.clip-intent-panels {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 10px;
}

.clip-intent-timeline {
  display: grid;
  grid-template-columns: repeat(6, minmax(0, 1fr));
  gap: 6px;
  margin-top: 2px;
}

.clip-intent-timeline span {
  display: grid;
  place-items: center;
  height: 26px;
  border: 1px solid var(--clip-line);
  border-radius: 7px;
  background: #fff;
  color: var(--clip-ink);
  font-size: 11px;
  font-weight: 850;
}

.clip-intent-timeline .is-selected,
.clip-intent-timeline .is-moved {
  border-color: var(--clip-info);
  background: #eef6ff;
  color: var(--clip-info);
}

.clip-intent-timeline .is-removed {
  border-color: var(--clip-warn);
  background: #f9ebe8;
  color: var(--clip-warn);
  text-decoration: line-through;
}

.clip-intent-frame-pair,
.clip-intent-asset-pair,
.clip-intent-ratios {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 10px;
}

.clip-intent-style-stack {
  display: grid;
  gap: 8px;
}

.clip-intent-panels > .clip-intent-timeline,
.clip-intent-asset-pair > .clip-intent-timeline {
  grid-column: 1 / -1;
}

.clip-intent-video-panel {
  min-width: 0;
}

.clip-intent-video-panel strong {
  display: block;
  margin-top: 6px;
  color: var(--clip-muted);
  font-size: 11px;
  font-weight: 850;
}

.clip-intent-video-frame {
  position: relative;
  height: 138px;
  overflow: hidden;
  border: 1px solid var(--clip-line);
  border-radius: 8px;
  background:
    linear-gradient(180deg, rgba(255,255,255,.5), transparent 42%),
    linear-gradient(135deg, #d4dfda, #617f72);
}

.clip-intent-video-panel.is-after .clip-intent-video-frame {
  border-color: var(--clip-accent);
  background:
    linear-gradient(180deg, rgba(255,255,255,.55), transparent 42%),
    linear-gradient(135deg, #d7e1db, #6b9586);
}

.clip-intent-video-frame::before {
  content: "";
  position: absolute;
  inset: 14px;
  border: 1px dashed rgba(255, 255, 255, .82);
  border-radius: 7px;
}

.clip-intent-video-frame > span:first-child {
  position: absolute;
  top: 12px;
  left: 12px;
  right: 12px;
  color: rgba(255, 255, 255, .86);
  font-size: 11px;
  font-weight: 850;
  text-align: center;
  text-shadow: 0 1px 5px rgba(0, 0, 0, .42);
}

.clip-intent-video-frame p {
  position: absolute;
  left: 12px;
  right: 12px;
  bottom: 12px;
  margin: 0;
  border-radius: 7px;
  padding: 7px 8px;
  background: rgba(18, 28, 24, .72);
  color: #fff;
  font-size: 12px;
  font-weight: 800;
  line-height: 1.35;
  overflow-wrap: anywhere;
}

.clip-intent-subtitle-line {
  position: absolute;
  left: 14px;
  right: 14px;
  text-align: center;
  color: #fff;
  font-size: 12px;
  font-weight: 900;
  text-shadow: 0 1px 5px rgba(0, 0, 0, .55);
}

.clip-intent-subtitle-line.is-mid { top: 60px; }
.clip-intent-subtitle-line.is-low { bottom: 18px; }

.clip-intent-audio-compare {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 10px;
}

.clip-intent-audio-card {
  display: grid;
  gap: 10px;
  border: 1px solid var(--clip-line);
  border-radius: 8px;
  padding: 10px;
  background: #fff;
}

.clip-intent-audio-card.is-after {
  border-color: var(--clip-accent);
  background: var(--clip-panel-soft);
}

.clip-intent-audio-card strong {
  color: var(--clip-ink);
  font-size: 12px;
  font-weight: 900;
}

.clip-intent-audio-card div {
  display: grid;
  grid-template-columns: 42px minmax(0, 1fr) 38px;
  align-items: center;
  gap: 8px;
  font-size: 12px;
  font-weight: 800;
}

.clip-intent-audio-card b {
  display: block;
  height: 9px;
  border-radius: 999px;
  background: linear-gradient(90deg, var(--clip-info), var(--clip-accent));
}

.clip-intent-audio-card em {
  color: var(--clip-muted);
  font-style: normal;
  text-align: right;
}

.clip-intent-audio-compare p {
  grid-column: 1 / -1;
}

.clip-intent-audio-compare p,
.clip-intent-note {
  margin: 0;
  border: 1px solid var(--clip-line);
  border-radius: 8px;
  padding: 8px;
  background: #fff;
  color: var(--clip-muted);
  font-size: 12px;
  line-height: 1.45;
}

.clip-intent-diff-stack,
.clip-intent-trim-compare,
.clip-intent-canvas-compare {
  display: grid;
  gap: 8px;
}

.clip-intent-trim-bar {
  position: relative;
  height: 26px;
  margin-bottom: 8px;
  overflow: hidden;
  border-radius: 999px;
  background: #e7ede9;
}

.clip-intent-trim-bar span {
  position: absolute;
  inset: 0 auto 0 0;
  width: 72%;
  border-right: 2px solid var(--clip-accent);
  background: var(--clip-panel-soft);
}

.clip-intent-trim-bar span.is-before {
  width: 100%;
  border-right: 0;
  background: #dfe7e2;
}

.clip-intent-ratios {
  grid-template-columns: repeat(3, minmax(0, 1fr));
  align-items: end;
}

.clip-intent-ratios span {
  display: grid;
  place-items: center;
  border: 1px solid var(--clip-line);
  border-radius: 8px;
  background: #fff;
  color: var(--clip-muted);
  font-size: 12px;
  font-weight: 850;
}

.clip-intent-ratios .r-916 { height: 112px; }
.clip-intent-ratios .r-11 { height: 82px; }
.clip-intent-ratios .r-169 {
  height: 56px;
  border-color: var(--clip-accent);
  background: var(--clip-panel-soft);
  color: var(--clip-accent);
}

.clip-intent-canvas-specs {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 8px;
}

.clip-intent-canvas-specs span {
  min-width: 0;
  overflow-wrap: anywhere;
  border: 1px solid var(--clip-line);
  border-radius: 8px;
  padding: 8px;
  background: #fff;
  color: var(--clip-muted);
  font-size: 12px;
  font-weight: 850;
}

.clip-intent-canvas-specs span:last-child {
  border-color: var(--clip-accent);
  background: var(--clip-panel-soft);
  color: var(--clip-accent);
}

.clip-intent-finalize-flow {
  display: grid;
  grid-template-columns: 1fr auto 1fr auto 1fr;
  align-items: center;
  gap: 8px;
  height: 148px;
}

.clip-intent-finalize-flow span {
  display: grid;
  place-items: center;
  min-height: 58px;
  border: 1px solid var(--clip-line);
  border-radius: 8px;
  background: #fff;
  font-size: 12px;
  font-weight: 850;
  text-align: center;
}

.clip-intent-finalize-flow span:last-child {
  border-color: var(--clip-accent);
  background: var(--clip-panel-soft);
  color: var(--clip-accent);
}

.clip-intent-finalize-flow b {
  color: var(--clip-muted);
}

.clip-intent-footer {
  display: flex;
  justify-content: space-between;
  gap: 8px;
  margin-top: 10px;
  color: var(--clip-muted);
  font-size: 12px;
  font-weight: 800;
}
._card_zem5l_1 {
  display: grid;
  gap: 10px;
  padding: 14px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-md);
  background: var(--ds-surface);
  color: var(--ds-text);
  font-family: var(--ds-font);
}

._head_zem5l_12,
._foot_zem5l_13 {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  min-width: 0;
}

._actions_zem5l_21 {
  display: inline-flex;
  flex-shrink: 0;
  align-items: center;
  gap: 6px;
}

._badge_zem5l_28 {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  min-width: 0;
  color: var(--ds-text-muted);
  font-size: 12px;
  font-weight: 700;
}

._card_zem5l_1 h4 {
  margin: 0;
  color: var(--ds-text);
  font-size: 14px;
  font-weight: 800;
  line-height: 1.45;
}

._reason_zem5l_46,
._status_zem5l_47,
._meta_zem5l_48 {
  margin: 0;
  color: var(--ds-text-muted);
  font-size: 12px;
  line-height: 1.6;
}

._evidenceList_zem5l_55 {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
}

._evidenceList_zem5l_55 span {
  display: inline-flex;
  align-items: center;
  min-height: 24px;
  padding: 0 8px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg-alt);
  color: var(--ds-text);
  font-size: 12px;
  line-height: 1.4;
}

._foot_zem5l_13 {
  color: var(--ds-text-muted);
  font-size: 12px;
}

._meta_zem5l_48 {
  color: var(--ds-text-subtle);
  font-size: 11px;
}

._undo_zem5l_84,
._detail_zem5l_85 {
  flex-shrink: 0;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-surface);
  color: var(--ds-text);
  cursor: pointer;
  font-family: inherit;
  font-size: 12px;
  font-weight: 700;
}

._undo_zem5l_84 {
  min-height: 30px;
  padding: 0 12px;
}

._detail_zem5l_85 {
  min-height: 28px;
  padding: 0 10px;
}

._undo_zem5l_84:hover,
._detail_zem5l_85:hover {
  border-color: var(--ds-text);
}
._card_ird12_1 {
  display: grid;
  gap: 12px;
  padding: 14px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-md);
  background: var(--ds-surface);
  color: var(--ds-text);
  font-family: var(--ds-font);
}

._head_ird12_12 {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  min-width: 0;
}

._badge_ird12_20 {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  min-width: 0;
  color: var(--ds-text);
  font-size: 12px;
  font-weight: 800;
}

._status_ird12_30,
._section_ird12_31 p,
._publishItem_ird12_32 small,
._publishItem_ird12_32 em {
  margin: 0;
  color: var(--ds-text-muted);
  font-size: 12px;
  line-height: 1.55;
}

._section_ird12_31 {
  display: grid;
  gap: 7px;
  min-width: 0;
}

._section_ird12_31 h4 {
  margin: 0;
  color: var(--ds-text);
  font-size: 13px;
  font-weight: 800;
}

._roleList_ird12_53,
._itemList_ird12_54 {
  display: grid;
  gap: 8px;
}

._roleItem_ird12_59,
._publishItem_ird12_32 {
  display: grid;
  gap: 5px;
  padding: 10px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg-alt);
}

._roleMain_ird12_69 {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  min-width: 0;
}

._roleMain_ird12_69 strong,
._publishItem_ird12_32 strong {
  overflow-wrap: anywhere;
  color: var(--ds-text);
  font-size: 13px;
  font-weight: 800;
}

._roleMain_ird12_69 span,
._suggestion_ird12_86 {
  color: var(--ds-text-muted);
  font-size: 12px;
}

._roleEvidence_ird12_91 {
  display: flex;
  flex-wrap: wrap;
  gap: 5px;
}

._roleEvidence_ird12_91 span {
  padding: 2px 6px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-surface);
  color: var(--ds-text-muted);
  font-size: 11px;
  line-height: 1.4;
}

._publishItem_ird12_32 {
  grid-template-columns: 18px minmax(0, 1fr);
  align-items: start;
  cursor: pointer;
}

._publishItem_ird12_32 input {
  width: 16px;
  height: 16px;
  margin: 2px 0 0;
  accent-color: var(--ds-text);
}

._publishItem_ird12_32 > span {
  display: grid;
  gap: 3px;
  min-width: 0;
}

._publishItem_ird12_32 em {
  font-style: normal;
}

._evidenceList_ird12_130 {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
}

._evidenceList_ird12_130 span {
  display: inline-flex;
  align-items: center;
  min-height: 24px;
  padding: 0 8px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-surface);
  color: var(--ds-text);
  font-size: 12px;
  line-height: 1.4;
}

._confirm_ird12_149 {
  min-height: 34px;
  border: 1px solid var(--ds-text);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-text);
  color: var(--ds-surface);
  cursor: pointer;
  font-family: inherit;
  font-size: 13px;
  font-weight: 800;
}

._confirm_ird12_149:disabled {
  border-color: var(--ds-border);
  background: var(--ds-bg-alt);
  color: var(--ds-text-muted);
  cursor: not-allowed;
}
.locate-card {
  box-sizing: border-box;
  width: 100%;
  margin: 0 0 7px;
  padding: 12px 14px;
  color: var(--ds-text, #18181b);
  background: var(--ds-bg, #fff);
  border: 1px solid var(--ds-border-strong, rgba(24, 24, 27, 0.16));
  border-radius: var(--ds-radius-lg, 14px);
  font-family: var(--ds-font, "Geist", "Noto Sans SC", sans-serif);
}

.locate-card__header {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-bottom: 9px;
}

.locate-card__header h3 {
  min-width: 0;
  margin: 0;
  color: var(--ds-text, #18181b);
  font-size: 12.5px;
  font-weight: 650;
  line-height: 1.45;
}

.candidate-select-card__candidate {
  display: flex;
  align-items: center;
  gap: 10px;
  box-sizing: border-box;
  margin-bottom: 6px;
  padding: 8px 10px;
  background: var(--ds-bg, #fff);
  border: 1px solid var(--ds-border, rgba(24, 24, 27, 0.08));
  border-radius: var(--ds-radius-md, 10px);
}

.candidate-select-card__candidate:last-child {
  margin-bottom: 0;
}

.candidate-select-card__candidate--picked {
  border-color: var(--ds-text, #18181b);
  box-shadow: 0 0 0 1px var(--ds-text, #18181b);
}

.candidate-select-card__thumb {
  width: 44px;
  height: 30px;
  flex: 0 0 44px;
  background: var(--ds-bg-deep, #e7e5e4);
  border-radius: 5px;
}

.candidate-select-card__meta {
  display: flex;
  flex: 1;
  min-width: 0;
  flex-direction: column;
}

.candidate-select-card__meta strong {
  overflow: hidden;
  color: var(--ds-text, #18181b);
  font-size: 12.5px;
  font-weight: 600;
  line-height: 1.4;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.candidate-select-card__meta small {
  overflow: visible;
  color: var(--ds-text-subtle, #a1a1aa);
  font-family: var(--ds-font-mono, "Geist Mono", ui-monospace, monospace);
  font-size: 11px;
  line-height: 1.45;
  text-overflow: clip;
  white-space: normal;
}

.candidate-select-card__pick {
  flex: 0 0 auto;
  padding: 3px 11px;
  color: var(--ds-text-muted, #6b7280);
  background: var(--ds-bg, #fff);
  border: 1px solid var(--ds-border-strong, rgba(24, 24, 27, 0.16));
  border-radius: var(--ds-radius-pill, 999px);
  font: inherit;
  font-size: 11.5px;
  line-height: 1.45;
  cursor: pointer;
}

.candidate-select-card__pick:focus-visible {
  outline: none;
  box-shadow: var(--ds-focus-ring, 0 0 0 3px rgba(77, 166, 255, 0.18));
}

.candidate-select-card__candidate--picked .candidate-select-card__pick {
  color: var(--ds-text-on-ink, #fff);
  font-weight: 600;
  background: var(--ds-text, #18181b);
  border-color: var(--ds-text, #18181b);
}

.failure-explain-card__badge {
  margin-left: auto;
  padding: 1px 8px;
  color: var(--ds-danger, #ef4444);
  border: 1px solid var(--ds-danger, #ef4444);
  border-radius: var(--ds-radius-pill, 999px);
  font-family: var(--ds-font-mono, "Geist Mono", ui-monospace, monospace);
  font-size: 10px;
  line-height: 1.5;
  white-space: nowrap;
}

.failure-explain-card__details {
  margin: 0;
}

.failure-explain-card__details > div {
  display: flex;
  gap: 8px;
  padding: 3px 0;
  font-size: 12px;
  line-height: 1.5;
}

.failure-explain-card__details dt {
  min-width: 40px;
  flex: 0 0 40px;
  color: var(--ds-text-subtle, #a1a1aa);
}

.failure-explain-card__details dd {
  margin: 0;
  color: var(--ds-text, #18181b);
}
.publish-failure-card {
  display: grid;
  gap: var(--ds-space-4);
  padding: var(--ds-space-4);
  color: var(--ds-text);
  background: var(--ds-surface);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-lg);
}

.publish-failure-card__header {
  display: flex;
  align-items: center;
  gap: var(--ds-space-3);
}

.publish-failure-card__header h3 {
  margin: 0;
  font-size: 15px;
  font-weight: 700;
}

.publish-failure-card__badge {
  padding: 3px 8px;
  color: var(--ds-danger);
  font-size: 12px;
  font-weight: 600;
  background: color-mix(in srgb, var(--ds-danger) 8%, white);
  border-radius: var(--ds-radius-pill);
}

.publish-failure-card__details {
  display: grid;
  gap: var(--ds-space-3);
  margin: 0;
}

.publish-failure-card__details > div {
  display: grid;
  grid-template-columns: 52px minmax(0, 1fr);
  gap: var(--ds-space-2);
}

.publish-failure-card__details dt {
  color: var(--ds-text-muted);
  font-size: 12px;
  font-weight: 600;
}

.publish-failure-card__details dd {
  margin: 0;
  color: var(--ds-text);
  font-size: 13px;
  line-height: 1.55;
}

.publish-failure-card__actions {
  display: flex;
  flex-wrap: wrap;
  gap: var(--ds-space-2);
}

.publish-failure-card__actions button {
  min-height: 34px;
  padding: 0 12px;
  color: var(--ds-text);
  background: var(--ds-surface);
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-sm);
  cursor: pointer;
}

.publish-failure-card__actions button.is-primary {
  color: var(--ds-text-on-ink);
  background: var(--ds-text);
  border-color: var(--ds-text);
}

.publish-failure-card__actions button:focus-visible {
  outline: none;
  box-shadow: var(--ds-focus-ring);
}
.command-confirm-card {
  background: var(--ds-bg-elevated, #fff);
  border: 1px solid var(--ds-border, #e4e4e7);
  border-radius: 12px;
  color: var(--ds-text, #18181b);
  padding: 14px 16px;
  display: flex;
  flex-direction: column;
  gap: 12px;
}

.command-confirm-card.risk-hi {
  border-color: color-mix(in srgb, var(--ds-danger, #dc2626) 35%, var(--ds-border, #e4e4e7));
}

.command-confirm-card__header {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 12px;
}

.command-confirm-card__header h3 {
  margin: 0;
  font-size: 14px;
  font-weight: 600;
  line-height: 1.4;
}

.command-confirm-card__badge {
  flex-shrink: 0;
  font-size: 11px;
  font-weight: 600;
  color: var(--ds-danger, #dc2626);
  background: color-mix(in srgb, var(--ds-danger, #dc2626) 10%, transparent);
  border-radius: 999px;
  padding: 2px 8px;
}

.command-confirm-card__body {
  margin: 0;
  display: flex;
  flex-direction: column;
  gap: 10px;
}

.command-confirm-card__body > div {
  display: grid;
  grid-template-columns: 48px 1fr;
  gap: 8px;
  font-size: 13px;
}

.command-confirm-card__body dt {
  color: var(--ds-text-muted, #71717a);
}

.command-confirm-card__body dd {
  margin: 0;
}

.command-confirm-card__body strong {
  display: block;
}

.command-confirm-card__body small {
  display: block;
  margin-top: 2px;
  color: var(--ds-text-muted, #71717a);
  font-size: 12px;
}

.command-confirm-card__softref ul {
  margin: 6px 0 0;
  padding-left: 18px;
  color: var(--ds-text-secondary, #3f3f46);
}

.command-confirm-card__softref-note {
  margin: 6px 0 0;
  font-size: 12px;
  color: var(--ds-text-muted, #71717a);
}

.command-confirm-card__footer {
  display: flex;
  gap: 8px;
  justify-content: flex-end;
}

.command-confirm-card__primary,
.command-confirm-card__ghost {
  border-radius: 8px;
  border: 1px solid transparent;
  padding: 6px 12px;
  font-size: 13px;
  cursor: pointer;
}

.command-confirm-card__primary {
  background: var(--ds-danger, #dc2626);
  color: #fff;
}

.command-confirm-card__ghost {
  background: transparent;
  border-color: var(--ds-border, #e4e4e7);
  color: var(--ds-text, #18181b);
}

.command-confirm-card__accounts,
.command-confirm-card__tags,
.command-confirm-card__tag-entry {
  display: flex;
  flex-wrap: wrap;
  gap: var(--ds-space-2, 8px);
}

.command-confirm-card__account,
.command-confirm-card__tag,
.command-confirm-card__tag-entry button {
  border: 1px solid var(--ds-border-strong, rgba(24, 24, 27, 0.16));
  border-radius: var(--ds-radius-pill, 999px);
  background: var(--ds-bg, #fff);
  color: var(--ds-text, #18181b);
  font-size: 12px;
  padding: 4px 9px;
}

.command-confirm-card__account.is-selected {
  background: var(--ds-text, #18181b);
  border-color: var(--ds-text, #18181b);
  color: var(--ds-bg, #fff);
}

.command-confirm-card__account:disabled {
  color: var(--ds-text-subtle, #a1a1aa);
  cursor: not-allowed;
}

.command-confirm-card__caption,
.command-confirm-card__tag-entry input {
  width: 100%;
  border: 1px solid var(--ds-border-strong, rgba(24, 24, 27, 0.16));
  border-radius: var(--ds-radius-sm, 8px);
  background: var(--ds-bg, #fff);
  color: var(--ds-text, #18181b);
  font: inherit;
  padding: 8px 10px;
}

.command-confirm-card__caption {
  min-height: 72px;
  resize: vertical;
}

.command-confirm-card__tag button {
  border: 0;
  background: transparent;
  color: inherit;
  cursor: pointer;
  margin-left: 4px;
  padding: 0;
}

.command-confirm-card__tag-entry {
  margin-top: 8px;
}

.command-confirm-card__tag-entry input {
  flex: 1 1 120px;
}

.command-confirm-card__tag-entry button {
  cursor: pointer;
}

.command-confirm-card__assertion {
  margin: 0;
  border-top: 1px solid var(--ds-border, rgba(24, 24, 27, 0.08));
  padding-top: 10px;
  color: var(--ds-text-muted, #6b7280);
  font-size: 12px;
}

.command-confirm-card__primary--publish {
  background: var(--ds-text, #18181b);
  color: var(--ds-bg, #fff);
}

.command-confirm-card__primary:disabled {
  cursor: not-allowed;
  opacity: 0.4;
}
.monitor-config-draft-card { border: 1px solid var(--ds-border, #d9dee7); border-radius: 12px; background: #fff; color: var(--ds-ink, #172033); overflow: hidden; }
.monitor-config-draft-card > header { display: flex; align-items: center; justify-content: space-between; padding: 14px 16px; border-bottom: 1px solid var(--ds-border, #d9dee7); }
.monitor-config-draft-card h3 { margin: 0; font-size: 15px; }
.monitor-config-draft-card header span { font-size: 12px; font-weight: 600; }
.monitor-config-draft-card.risk-ok header span { color: #18794e; }
.monitor-config-draft-card__meta { margin: 0; padding: 8px 16px; color: #687386; font: 11px/1.4 "Geist Mono", monospace; background: #f7f8fa; }
.monitor-config-draft-card dl { margin: 0; padding: 12px 16px; }
.monitor-config-draft-card dl div { display: grid; grid-template-columns: 76px 1fr; gap: 12px; padding: 5px 0; }
.monitor-config-draft-card dt { color: #687386; }
.monitor-config-draft-card dd { margin: 0; font-weight: 600; }
.monitor-config-draft-card__impact { display: grid; gap: 5px; margin: 0 16px 12px; padding: 12px; border-left: 4px solid #d24b4b; background: #fff6f5; }
.monitor-config-draft-card footer { display: flex; gap: 8px; padding: 0 16px 16px; }
.monitor-config-draft-card button { border: 0; border-radius: 8px; padding: 8px 14px; background: #172033; color: #fff; cursor: pointer; }
.monitor-config-draft-card button.ghost { border: 1px solid #d9dee7; background: #fff; color: #172033; }
.current-task-pill {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-bottom: 10px;
  padding: 5px 12px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-pill);
  background: var(--ds-bg-alt);
  font-size: 12px;
}

.current-task-main {
  display: flex;
  flex: 1;
  align-items: center;
  min-width: 0;
  padding: 0;
  border: 0;
  background: transparent;
  color: var(--ds-text);
  cursor: pointer;
  gap: 8px;
}

.current-task-dot {
  width: 6px;
  height: 6px;
  flex-shrink: 0;
  border-radius: 50%;
  background: var(--ds-accent);
}

.current-task-step {
  font-family: var(--ds-font-mono);
  font-weight: 600;
  white-space: nowrap;
}

.current-task-message {
  flex: 1;
  overflow: hidden;
  color: var(--ds-text-muted);
  text-align: left;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.current-task-go {
  flex-shrink: 0;
  color: var(--ds-text-subtle);
  font-size: 11px;
}

.current-task-pill.fail {
  border-color: var(--ds-danger);
}

.current-task-pill.fail .current-task-dot {
  background: var(--ds-danger);
}

.current-task-actions {
  display: flex;
  gap: 6px;
}

.current-task-actions button {
  padding: 1px 8px;
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-pill);
  background: var(--ds-bg);
  color: var(--ds-text);
  cursor: pointer;
  font-size: 11px;
}
.dr-card-shell {
  background: var(--ds-surface);
  border: 1px solid var(--ds-border);
  border-radius: 14px;
  padding: 36px 48px 40px;
  box-shadow: 0 1px 2px rgba(24, 24, 27, 0.03);
  min-height: 100%;
}
.dr-card-shell__head {
  display: flex; align-items: center; justify-content: space-between;
  padding-bottom: 18px; margin-bottom: 24px;
  border-bottom: 1px solid var(--ds-border);
}
.dr-card-shell__left { display: flex; align-items: center; gap: 10px; font-size: 13px; font-weight: 600; }
.dr-card-shell__back {
  width: 28px; height: 28px; border-radius: 6px;
  border: 1px solid var(--ds-border); background: var(--ds-bg);
  color: var(--ds-text-muted); cursor: pointer; font-size: 14px;
}
.dr-card-shell__back:hover { background: var(--ds-bg-alt); color: var(--ds-text); }
.dr-card-shell__title { font-weight: 600; }
.dr-card-shell__right { display: flex; gap: 6px; }
.dr-card-shell__body { max-width: 720px; margin: 0 auto; }

.dr-eyebrow {
  font-size: 11px; letter-spacing: 0.12em; text-transform: uppercase;
  font-weight: 700; color: var(--ds-text-muted);
  margin-bottom: 10px; display: flex; align-items: center; gap: 8px;
}
.dr-eyebrow__dot { width: 6px; height: 6px; border-radius: 50%; }
.dr-eyebrow__dot--warn { background: #d97706; }
.dr-eyebrow__dot--live { background: #10b981; animation: dr-pulse 2s infinite; }
.dr-eyebrow__dot--done { background: #10b981; }
.dr-hero-title { margin: 0 0 10px; font-size: 28px; font-weight: 700; letter-spacing: -0.02em; line-height: 1.25; }
.dr-hero-sub { margin: 0 0 18px; font-size: 14px; color: var(--ds-text-muted); line-height: 1.6; }
.dr-warn-banner {
  background: rgba(217, 119, 6, 0.08);
  border: 1px solid rgba(217, 119, 6, 0.28);
  border-radius: 10px; padding: 14px 16px;
  font-size: 13px; color: #92400e; line-height: 1.6; margin-bottom: 22px;
}
.dr-warn-banner ul { padding-left: 18px; margin: 6px 0 0; }
.dr-warn-banner li { line-height: 1.7; }
.dr-warn-banner__hint { margin-top: 4px; }
.dr-ok-banner {
  background: rgba(16, 185, 129, 0.08);
  border: 1px solid rgba(16, 185, 129, 0.28);
  border-radius: 10px; padding: 14px 16px;
  font-size: 13px; color: #166534; line-height: 1.6; margin-bottom: 22px;
}
.dr-ok-banner__hint { margin-top: 4px; }
.dr-btn-row { display: flex; gap: 8px; align-items: center; }
.dr-btn {
  font-size: 13px; padding: 9px 18px;
  border-radius: 8px; border: 1px solid var(--ds-border);
  background: var(--ds-bg); cursor: pointer; font-weight: 600;
}
.dr-btn--primary { background: var(--ds-text); color: #fff; border-color: var(--ds-text); flex: 1; }
.dr-btn--ghost { background: transparent; color: var(--ds-text-muted); }
@keyframes dr-pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.35; } }

/* DRPlanView §12 ink override — neutralize azure accents in console scope */
.dr-plan-wrapper { color: var(--ds-text); }
.dr-plan-wrapper button.ant-btn-primary {
  background: var(--ds-text) !important;
  border-color: var(--ds-text) !important;
  color: #fff !important;
}

/* ===== DRRunningView (STATE 3) ===== */

/* meta row */
.dr-meta-row {
  display: flex; flex-wrap: wrap;
  padding: 12px 16px;
  border: 1px solid var(--ds-border); border-radius: 10px;
  background: var(--ds-surface); font-size: 12px;
  margin-bottom: 20px;
}
.dr-meta-cell {
  display: flex; flex-direction: column;
  padding: 0 18px; border-right: 1px solid var(--ds-border);
}
.dr-meta-cell:first-child { padding-left: 0; }
.dr-meta-cell:last-child { border-right: none; padding-right: 0; }
.dr-meta-l {
  font-size: 10px; color: var(--ds-text-subtle);
  letter-spacing: 0.06em; text-transform: uppercase; font-weight: 700; margin-bottom: 4px;
}
.dr-meta-v {
  font-size: 16px; font-weight: 700;
  color: var(--ds-text); font-variant-numeric: tabular-nums;
}

/* section bar */
.dr-section-bar { display: flex; align-items: center; gap: 12px; margin: 24px 0 12px; }
.dr-section-bar__label {
  font-size: 10px; letter-spacing: 0.12em; text-transform: uppercase;
  font-weight: 700; color: var(--ds-text-subtle); white-space: nowrap;
}
.dr-section-bar__rule { flex: 1; height: 1px; background: var(--ds-border); }
.dr-section-bar__count {
  font-size: 11px; color: var(--ds-text-subtle); font-variant-numeric: tabular-nums;
}

/* live status */
.dr-live-status {
  display: inline-flex; align-items: center; gap: 8px;
  padding: 6px 12px; border-radius: 999px;
  background: var(--ds-bg-alt); border: 1px solid var(--ds-border);
  font-size: 12px; color: var(--ds-text); margin-bottom: 8px;
}
.dr-spin {
  width: 10px; height: 10px;
  border: 1.5px solid var(--ds-border-strong);
  border-top-color: var(--ds-text);
  border-radius: 50%; animation: spin 1s linear infinite;
}
@keyframes spin { to { transform: rotate(360deg); } }

/* timeline */
.dr-timeline {
  position: relative; margin-left: 4px; padding-left: 24px;
  border-left: 1px solid var(--ds-border);
  display: flex; flex-direction: column; gap: 18px;
  list-style: none; margin-top: 0; padding-top: 0;
}
.dr-step { position: relative; }
.dr-step::before {
  content: ''; position: absolute; left: -29px; top: 4px;
  width: 10px; height: 10px; border-radius: 50%;
  background: var(--ds-bg); border: 1.5px solid var(--ds-border); box-sizing: border-box;
}
.dr-step--done::before { background: var(--dr-success, #10b981); border-color: var(--dr-success, #10b981); }
.dr-step--done::after {
  content: ''; position: absolute; left: -26px; top: 7px;
  width: 4px; height: 6px; border: solid #fff;
  border-width: 0 1.5px 1.5px 0; transform: rotate(45deg);
}
.dr-step--active::before {
  background: transparent; border-color: var(--ds-text);
  animation: spin 1.2s linear infinite;
  border-top-color: transparent; border-right-color: transparent;
}
.dr-step--todo::before { background: var(--ds-bg); border-color: var(--ds-border-strong); }
.dr-step__title { font-size: 14px; color: var(--ds-text); line-height: 1.5; }
.dr-step--active .dr-step__title { font-weight: 600; }
.dr-step--todo .dr-step__title { color: var(--ds-text-subtle); }

/* thinking disclosure */
.dr-disclosure {
  border: 1px solid var(--ds-border); border-radius: 10px;
  background: var(--ds-surface); margin-top: 12px; overflow: hidden;
}
.dr-disclosure summary {
  display: flex; align-items: center; gap: 8px;
  padding: 12px 16px; font-size: 13px; font-weight: 600;
  cursor: pointer; user-select: none;
  list-style: none;
}
.dr-disclosure summary::-webkit-details-marker { display: none; }
.dr-thinking-content {
  font-size: 13px; color: var(--ds-text-muted); line-height: 1.65;
  font-family: ui-monospace, monospace;
  padding: 4px 16px 16px; border-top: 1px solid var(--ds-border);
}
.dr-thinking-content p { margin: 0 0 10px; }

/* ===== DRDoneView (STATE 4) ===== */

/* DRDoneView §12 ink override: neutralize ResearchOutputView azure accents */
.dr-output-wrapper .rov-section h3 { color: var(--ds-text) !important; }
.dr-output-wrapper .ant-progress-bg {
  background: var(--ds-text) !important;
  background-image: none !important;
}
.dr-output-wrapper .ant-btn-primary {
  background: var(--ds-text) !important;
  border-color: var(--ds-text) !important;
}
/* this gets exported as style.css and can be used for the default theming */
/* these are the necessary styles for React Flow, they get used by base.css and style.css */
.react-flow {
  direction: ltr;
}
.react-flow__container {
  position: absolute;
  width: 100%;
  height: 100%;
  top: 0;
  left: 0;
}
.react-flow__pane {
  z-index: 1;
  cursor: -webkit-grab;
  cursor: grab;
}
.react-flow__pane.selection {
    cursor: pointer;
  }
.react-flow__pane.dragging {
    cursor: -webkit-grabbing;
    cursor: grabbing;
  }
.react-flow__viewport {
  transform-origin: 0 0;
  z-index: 2;
  pointer-events: none;
}
.react-flow__renderer {
  z-index: 4;
}
.react-flow__selection {
  z-index: 6;
}
.react-flow__nodesselection-rect:focus,
.react-flow__nodesselection-rect:focus-visible {
  outline: none;
}
.react-flow .react-flow__edges {
  pointer-events: none;
  overflow: visible;
}
.react-flow__edge-path,
.react-flow__connection-path {
  stroke: #b1b1b7;
  stroke-width: 1;
  fill: none;
}
.react-flow__edge {
  pointer-events: visibleStroke;
  cursor: pointer;
}
.react-flow__edge.animated path {
    stroke-dasharray: 5;
    -webkit-animation: dashdraw 0.5s linear infinite;
            animation: dashdraw 0.5s linear infinite;
  }
.react-flow__edge.animated path.react-flow__edge-interaction {
    stroke-dasharray: none;
    -webkit-animation: none;
            animation: none;
  }
.react-flow__edge.inactive {
    pointer-events: none;
  }
.react-flow__edge.selected,
  .react-flow__edge:focus,
  .react-flow__edge:focus-visible {
    outline: none;
  }
.react-flow__edge.selected .react-flow__edge-path,
  .react-flow__edge:focus .react-flow__edge-path,
  .react-flow__edge:focus-visible .react-flow__edge-path {
    stroke: #555;
  }
.react-flow__edge-textwrapper {
    pointer-events: all;
  }
.react-flow__edge-textbg {
    fill: white;
  }
.react-flow__edge .react-flow__edge-text {
    pointer-events: none;
    -webkit-user-select: none;
       -moz-user-select: none;
            user-select: none;
  }
.react-flow__connection {
  pointer-events: none;
}
.react-flow__connection .animated {
    stroke-dasharray: 5;
    -webkit-animation: dashdraw 0.5s linear infinite;
            animation: dashdraw 0.5s linear infinite;
  }
.react-flow__connectionline {
  z-index: 1001;
}
.react-flow__nodes {
  pointer-events: none;
  transform-origin: 0 0;
}
.react-flow__node {
  position: absolute;
  -webkit-user-select: none;
     -moz-user-select: none;
          user-select: none;
  pointer-events: all;
  transform-origin: 0 0;
  box-sizing: border-box;
  cursor: -webkit-grab;
  cursor: grab;
}
.react-flow__node.dragging {
    cursor: -webkit-grabbing;
    cursor: grabbing;
  }
.react-flow__nodesselection {
  z-index: 3;
  transform-origin: left top;
  pointer-events: none;
}
.react-flow__nodesselection-rect {
    position: absolute;
    pointer-events: all;
    cursor: -webkit-grab;
    cursor: grab;
  }
.react-flow__handle {
  position: absolute;
  pointer-events: none;
  min-width: 5px;
  min-height: 5px;
  width: 6px;
  height: 6px;
  background: #1a192b;
  border: 1px solid white;
  border-radius: 100%;
}
.react-flow__handle.connectionindicator {
    pointer-events: all;
    cursor: crosshair;
  }
.react-flow__handle-bottom {
    top: auto;
    left: 50%;
    bottom: -4px;
    transform: translate(-50%, 0);
  }
.react-flow__handle-top {
    left: 50%;
    top: -4px;
    transform: translate(-50%, 0);
  }
.react-flow__handle-left {
    top: 50%;
    left: -4px;
    transform: translate(0, -50%);
  }
.react-flow__handle-right {
    right: -4px;
    top: 50%;
    transform: translate(0, -50%);
  }
.react-flow__edgeupdater {
  cursor: move;
  pointer-events: all;
}
.react-flow__panel {
  position: absolute;
  z-index: 5;
  margin: 15px;
}
.react-flow__panel.top {
    top: 0;
  }
.react-flow__panel.bottom {
    bottom: 0;
  }
.react-flow__panel.left {
    left: 0;
  }
.react-flow__panel.right {
    right: 0;
  }
.react-flow__panel.center {
    left: 50%;
    transform: translateX(-50%);
  }
.react-flow__attribution {
  font-size: 10px;
  background: rgba(255, 255, 255, 0.5);
  padding: 2px 3px;
  margin: 0;
}
.react-flow__attribution a {
    text-decoration: none;
    color: #999;
  }
@-webkit-keyframes dashdraw {
  from {
    stroke-dashoffset: 10;
  }
}
@keyframes dashdraw {
  from {
    stroke-dashoffset: 10;
  }
}
.react-flow__edgelabel-renderer {
  position: absolute;
  width: 100%;
  height: 100%;
  pointer-events: none;
  -webkit-user-select: none;
     -moz-user-select: none;
          user-select: none;
}
.react-flow__edge.updating .react-flow__edge-path {
      stroke: #777;
    }
.react-flow__edge-text {
    font-size: 10px;
  }
.react-flow__node.selectable:focus,
  .react-flow__node.selectable:focus-visible {
    outline: none;
  }
.react-flow__node-default,
.react-flow__node-input,
.react-flow__node-output,
.react-flow__node-group {
  padding: 10px;
  border-radius: 3px;
  width: 150px;
  font-size: 12px;
  color: #222;
  text-align: center;
  border-width: 1px;
  border-style: solid;
  border-color: #1a192b;
  background-color: white;
}
.react-flow__node-default.selectable:hover, .react-flow__node-input.selectable:hover, .react-flow__node-output.selectable:hover, .react-flow__node-group.selectable:hover {
      box-shadow: 0 1px 4px 1px rgba(0, 0, 0, 0.08);
    }
.react-flow__node-default.selectable.selected,
    .react-flow__node-default.selectable:focus,
    .react-flow__node-default.selectable:focus-visible,
    .react-flow__node-input.selectable.selected,
    .react-flow__node-input.selectable:focus,
    .react-flow__node-input.selectable:focus-visible,
    .react-flow__node-output.selectable.selected,
    .react-flow__node-output.selectable:focus,
    .react-flow__node-output.selectable:focus-visible,
    .react-flow__node-group.selectable.selected,
    .react-flow__node-group.selectable:focus,
    .react-flow__node-group.selectable:focus-visible {
      box-shadow: 0 0 0 0.5px #1a192b;
    }
.react-flow__node-group {
  background-color: rgba(240, 240, 240, 0.25);
}
.react-flow__nodesselection-rect,
.react-flow__selection {
  background: rgba(0, 89, 220, 0.08);
  border: 1px dotted rgba(0, 89, 220, 0.8);
}
.react-flow__nodesselection-rect:focus,
  .react-flow__nodesselection-rect:focus-visible,
  .react-flow__selection:focus,
  .react-flow__selection:focus-visible {
    outline: none;
  }
.react-flow__controls {
  box-shadow: 0 0 2px 1px rgba(0, 0, 0, 0.08);
}
.react-flow__controls-button {
    border: none;
    background: #fefefe;
    border-bottom: 1px solid #eee;
    box-sizing: content-box;
    display: flex;
    justify-content: center;
    align-items: center;
    width: 16px;
    height: 16px;
    cursor: pointer;
    -webkit-user-select: none;
       -moz-user-select: none;
            user-select: none;
    padding: 5px;
  }
.react-flow__controls-button:hover {
      background: #f4f4f4;
    }
.react-flow__controls-button svg {
      width: 100%;
      max-width: 12px;
      max-height: 12px;
    }
.react-flow__controls-button:disabled {
      pointer-events: none;
    }
.react-flow__controls-button:disabled svg {
        fill-opacity: 0.4;
      }
.react-flow__minimap {
  background-color: #fff;
}
.react-flow__minimap svg {
  display: block;
}
.react-flow__resize-control {
  position: absolute;
}
.react-flow__resize-control.left,
.react-flow__resize-control.right {
  cursor: ew-resize;
}
.react-flow__resize-control.top,
.react-flow__resize-control.bottom {
  cursor: ns-resize;
}
.react-flow__resize-control.top.left,
.react-flow__resize-control.bottom.right {
  cursor: nwse-resize;
}
.react-flow__resize-control.bottom.left,
.react-flow__resize-control.top.right {
  cursor: nesw-resize;
}
/* handle styles */
.react-flow__resize-control.handle {
  width: 4px;
  height: 4px;
  border: 1px solid #fff;
  border-radius: 1px;
  background-color: #3367d9;
  transform: translate(-50%, -50%);
}
.react-flow__resize-control.handle.left {
  left: 0;
  top: 50%;
}
.react-flow__resize-control.handle.right {
  left: 100%;
  top: 50%;
}
.react-flow__resize-control.handle.top {
  left: 50%;
  top: 0;
}
.react-flow__resize-control.handle.bottom {
  left: 50%;
  top: 100%;
}
.react-flow__resize-control.handle.top.left {
  left: 0;
}
.react-flow__resize-control.handle.bottom.left {
  left: 0;
}
.react-flow__resize-control.handle.top.right {
  left: 100%;
}
.react-flow__resize-control.handle.bottom.right {
  left: 100%;
}
/* line styles */
.react-flow__resize-control.line {
  border-color: #3367d9;
  border-width: 0;
  border-style: solid;
}
.react-flow__resize-control.line.left,
.react-flow__resize-control.line.right {
  width: 1px;
  transform: translate(-50%, 0);
  top: 0;
  height: 100%;
}
.react-flow__resize-control.line.left {
  left: 0;
  border-left-width: 1px;
}
.react-flow__resize-control.line.right {
  left: 100%;
  border-right-width: 1px;
}
.react-flow__resize-control.line.top,
.react-flow__resize-control.line.bottom {
  height: 1px;
  transform: translate(0, -50%);
  left: 0;
  width: 100%;
}
.react-flow__resize-control.line.top {
  top: 0;
  border-top-width: 1px;
}
.react-flow__resize-control.line.bottom {
  border-bottom-width: 1px;
  top: 100%;
}
/*
 * console s4a v2 · mindmap 画布视觉
 * 视觉权威源（spec §19.J 优先级 7-9）：
 *   docs/design/console-redesign/2026-05-19-s4a-template-card-ui.html（root 节点）
 *   docs/design/console-redesign/2026-05-19-s4a-child-draft-card-ui.html（child 工作区）
 *   docs/design/console-redesign/2026-05-19-s4a-mindmap-canvas-ui.html（画布整体 + 空态 A）
 * Token 全用 --ds-*（global-design.css 权威）；design.md §12 console no-azure
 * （主 CTA ink-on-ink，无 azure 大渐变）。
 */

/* ===== 画布容器 ===== */
.mm-canvas {
  position: relative;
  width: 100%;
  height: 100%;
  background: var(--ds-bg);
}
.mm-canvas .react-flow__background {
  background: var(--ds-bg);
}
/* dot-grid 颜色用极淡 ink */
.mm-canvas .react-flow__background path,
.mm-canvas .react-flow__background circle {
  color: rgba(24, 24, 27, 0.10);
}
/* minimap / controls 收紧到 ink，不用 azure */
/* 尺寸（168×96 小卡，视觉档案 ⑳）由 <MiniMap style={{width,height}}> 经 prop 传入——
   reactflow 的 elementWidth/Height 只认 style prop，不读此处 CSS；这里仅管视觉外观。 */
 .mm-canvas .react-flow__minimap {
   position: absolute !important;
   bottom: 12px !important;
   right: 12px !important;
   z-index: 10 !important;
   border: 1px solid var(--ds-border-strong);
   border-radius: var(--ds-radius-md);
   background: rgba(255, 255, 255, 0.94);
   box-shadow: var(--ds-shadow-card);
 }
.mm-canvas .react-flow__controls button {
  background: var(--ds-bg);
  border-bottom: 1px solid var(--ds-border);
  color: var(--ds-text);
}
.mm-canvas [data-testid="canvas-controls"] {
  z-index: 1;
}
.mm-canvas .react-flow__node-childVideo {
  z-index: 2;
}

/* ===== 父-子连线 ===== */
.mm-canvas .react-flow__edge.mm-edge--idle .react-flow__edge-path {
  stroke: color-mix(in srgb, var(--ds-text) 30%, transparent);
  stroke-width: 0.75;
  stroke-dasharray: 4 5;
  opacity: 0.55;
}
.mm-canvas .react-flow__edge.mm-edge--active .react-flow__edge-path {
  stroke: color-mix(in srgb, var(--ds-text) 58%, transparent);
  stroke-width: 1;
  stroke-dasharray: none;
  opacity: 0.68;
}

/* ===== root 模板节点 ===== */
.mm-root {
  width: 720px;
  background: var(--ds-bg);
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-lg);
  box-shadow: var(--ds-shadow-deep);
  padding: var(--ds-space-5);
}
.mm-root-head { margin-bottom: var(--ds-space-4); }
.mm-root-title {
  font-size: 18px; font-weight: 800; color: var(--ds-text);
}
.mm-root-sub {
  font-size: 12px; color: var(--ds-text-muted); margin-top: 4px;
}
.map-create-tabs {
  display: flex;
  gap: 26px;
  border-bottom: 1px solid var(--ds-border);
  margin: 18px 0 16px;
}
.mm-root--article-open .map-create-tabs {
  margin-top: 0;
  margin-bottom: 16px;
}
.mm-root--article-open .geo-tpl-node {
  border: none !important;
  border-radius: 0 !important;
  padding: 0 !important;
  background: transparent !important;
}
.map-ctab {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  padding: 0 1px 12px;
  margin-bottom: -1px;
  font-size: 14px;
  font-weight: 600;
  color: var(--ds-text-muted);
  background: none;
  border: none;
  border-bottom: 2px solid transparent;
  cursor: pointer;
  transition: color 0.15s, border-color 0.15s;
}
.map-ctab svg {
  width: 15px;
  height: 15px;
  flex: none;
}
.map-ctab-num {
  font-family: var(--ds-font-mono);
  font-size: 12px;
  color: var(--ds-text-subtle);
}
.map-ctab--on {
  color: var(--ds-text);
  border-bottom-color: var(--ds-text);
}
.map-ctab--on .map-ctab-num {
  color: var(--ds-text);
}
.mm-tpl-grid {
  display: grid;
  grid-template-columns: repeat(5, 1fr);
  gap: var(--ds-space-3);
}
.mm-tpl-tile {
  position: relative;
  padding: 14px;
  border: 1px solid transparent;
  border-radius: var(--ds-radius-lg);
  background: var(--ds-bg-alt);
  cursor: pointer;
  text-align: left;
  transition: border-color 0.15s, background 0.15s, opacity 0.15s;
}
.mm-tpl-tile:hover {
  background: var(--ds-surface);
  border-color: var(--ds-border);
}
.mm-tpl-tile--selected {
  background: var(--ds-surface);
  border: 1.5px solid var(--ds-text);
}
.mm-tpl-tile--dim { opacity: 0.42; }
.mm-tpl-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 30px;
  height: 30px;
  margin-bottom: 10px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-surface);
  color: var(--ds-text);
  font-size: 16px;
}
.mm-tpl-name { font-size: 13px; font-weight: 700; color: var(--ds-text); display: block; }
.mm-tpl-desc {
  font-size: 11px; color: var(--ds-text-muted); line-height: 1.5; margin-top: 4px;
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}
.mm-tpl-pick {
  position: absolute;
  top: 10px;
  right: 10px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 18px;
  height: 18px;
  border-radius: 50%;
  background: var(--ds-text);
}
.mm-tpl-pick svg {
  width: 10px;
  height: 10px;
  fill: none;
  stroke: var(--ds-text-on-ink);
  stroke-width: 2.6;
  stroke-linecap: round;
  stroke-linejoin: round;
}
.mm-tpl-located,
.geo-genre-located {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: var(--ds-radius-pill);
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
  font-size: 10px;
  font-weight: 800;
  line-height: 1;
  white-space: nowrap;
}
.mm-tpl-located {
  position: absolute;
  top: 9px;
  right: 9px;
  min-height: 20px;
  padding: 0 7px;
}
.geo-genre-located {
  margin-left: 5px;
  min-height: 16px;
  padding: 0 5px;
}
.geo-genre-card {
  position: relative;
  padding: 14px;
  border: 1px solid transparent;
  border-radius: var(--ds-radius-lg);
  background: var(--ds-bg-alt);
  cursor: pointer;
  text-align: left;
  transition: background 0.15s, border-color 0.15s;
}
.geo-genre-card:hover {
  background: var(--ds-surface);
  border-color: var(--ds-border);
}
.geo-genre-card--primary,
.geo-genre-card--recommended {
  background: var(--ds-surface);
  border-color: color-mix(in srgb, var(--ds-accent) 42%, transparent);
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--ds-accent) 10%, transparent);
}
.geo-genre-card--secondary {
  opacity: 0.72;
}
.geo-genre-card--secondary:hover {
  opacity: 1;
}
.geo-genre-card--located {
  border-color: var(--ds-text);
  box-shadow: 0 0 0 1px var(--ds-text);
}
.geo-genre-card--located .geo-genre-located {
  position: absolute;
  top: 10px;
  right: 10px;
  min-height: 20px;
  padding: 0 7px;
}
.geo-genre-card--located-dim {
  opacity: 0.5;
  filter: grayscale(1);
}
.geo-genre-card--located-dim:hover {
  opacity: 0.5;
}
.geo-genre-card--unavailable,
.geo-genre-card--unavailable:hover {
  cursor: not-allowed;
  opacity: 0.48;
  background: var(--ds-bg-alt);
  border-color: transparent;
}
.geo-genre-card__badge {
  position: absolute;
  top: 12px;
  right: 12px;
  display: inline-flex;
  align-items: center;
  min-height: 22px;
  padding: 0 8px;
  border-radius: var(--ds-radius-pill);
  border: 1px solid color-mix(in srgb, var(--ds-accent) 28%, transparent);
  background: var(--ds-accent-bg);
  color: var(--ds-accent-deep);
  font-size: 10px;
  font-weight: 800;
  line-height: 1;
}
.geo-genre-card--secondary .geo-genre-card__badge,
.geo-genre-card--unavailable .geo-genre-card__badge {
  border-color: var(--ds-border);
  background: var(--ds-surface);
  color: var(--ds-text-muted);
}
.geo-genre-card__intent {
  margin: -1px 0 6px;
  color: var(--ds-text);
  font-size: 10.5px;
  font-weight: 800;
}
.geo-genre-card--secondary .geo-genre-card__intent,
.geo-genre-card--unavailable .geo-genre-card__intent {
  color: var(--ds-text-muted);
}
.mm-root-foot {
  margin-top: var(--ds-space-4);
  display: flex; justify-content: flex-end;
}
.mm-confirm-btn {
  padding: 12px 22px;
  font-size: 13px; font-weight: 700;
  border: none; border-radius: var(--ds-radius-md);
  background: var(--ds-text); color: var(--ds-text-on-ink);
  cursor: pointer;
}
.mm-confirm-btn:disabled {
  background: var(--ds-border-strong); color: var(--ds-text-on-ink);
  cursor: not-allowed; opacity: 0.6;
}

.creation-lane-node {
  width: 320px;
  min-height: 36px;
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 10px;
  padding: 0 2px 8px;
  border: none;
  border-bottom: 1px solid var(--ds-border);
  background: transparent;
  box-shadow: none;
}

.creation-lane-title {
  font-size: 12px;
  font-weight: 800;
  color: var(--ds-text);
}

.creation-lane-meta {
  margin-top: 0;
  font-family: var(--ds-font-mono);
  font-size: 10px;
  color: var(--ds-text-muted);
}

.creation-lane-link {
  border: none;
  background: transparent;
  color: var(--ds-text-muted);
  font-size: 10.5px;
  font-weight: 600;
  cursor: pointer;
  white-space: nowrap;
}

.creation-lane-link:hover {
  color: var(--ds-text);
}

.creation-lane-tail {
  width: 320px;
  min-height: 84px;
  border: 1px dashed var(--ds-border-strong);
  border-radius: var(--ds-radius-md);
  background: color-mix(in srgb, var(--ds-bg-alt) 62%, transparent);
  color: var(--ds-text-muted);
  font-size: 12px;
  font-weight: 700;
  cursor: pointer;
}

.creation-lane-tail:hover {
  border-color: var(--ds-text);
  color: var(--ds-text);
  background: var(--ds-bg);
}

/* ===== child 节点 ===== */
.mm-child {
  position: relative;
  width: 240px;
  transition: width 180ms ease, min-height 180ms ease, opacity 160ms ease;
}

.mm-child--pending,
.mm-child--record {
  will-change: width, min-height, opacity;
}

.mm-node-pin {
  position: absolute;
  top: 8px;
  right: 8px;
  z-index: 8;
  width: 28px;
  height: 28px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-surface);
  color: var(--ds-text-muted);
  cursor: pointer;
  opacity: 0.78;
  transition: opacity 0.15s ease, color 0.15s ease, background 0.15s ease, transform 0.15s ease;
}

.mm-node-pin:hover {
  opacity: 1;
  color: var(--ds-text);
  background: var(--ds-bg-alt);
}

.mm-node-pin:focus-visible {
  outline: 2px solid var(--ds-text);
  outline-offset: 2px;
}

.mm-node-pin--active {
  opacity: 1;
  color: var(--ds-text);
  background: var(--ds-bg);
  transform: rotate(-18deg);
}

/* reactflow handle 极简化（不显眼） */
.mm-handle {
  width: 6px; height: 6px;
  background: var(--ds-border-strong);
  border: none;
}

/* custom workspace */
.mm-custom-workspace { display: flex; flex-direction: column; gap: var(--ds-space-3); }
.mm-custom-actions { display: flex; gap: var(--ds-space-2); justify-content: flex-end; }

/* courseware workspace */
.mm-courseware-workspace {
  display: flex;
  flex-direction: column;
  gap: var(--ds-space-3);
  color: var(--ds-text);
}

.mm-courseware-mode-switch {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: var(--ds-space-1);
  padding: var(--ds-space-1);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-md);
  background: var(--ds-bg-alt);
}

.mm-courseware-mode {
  height: 32px;
  border: 0;
  border-radius: var(--ds-radius-sm);
  background: transparent;
  color: var(--ds-text-muted);
  font: 600 13px/1 var(--ds-font);
  letter-spacing: 0;
  cursor: pointer;
  transition: background 0.16s ease, color 0.16s ease, box-shadow 0.16s ease, opacity 0.16s ease;
}

.mm-courseware-mode[aria-pressed="true"] {
  background: var(--ds-surface);
  color: var(--ds-text);
  box-shadow: inset 0 0 0 1px var(--ds-border-strong);
}

.mm-courseware-mode:disabled {
  cursor: wait;
  opacity: 0.62;
}

.mm-courseware-status {
  min-height: 20px;
  color: var(--ds-text-muted);
  font-size: 13px;
  line-height: 20px;
}

.mm-courseware-status--error {
  color: var(--ds-danger);
}

.mm-courseware-workspace .mm-courseware-editor.ant-input {
  min-height: 180px;
  border-color: var(--ds-border-strong);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-surface);
  color: var(--ds-text);
}

.mm-courseware-workspace .mm-courseware-editor.ant-input::placeholder {
  color: var(--ds-text-subtle);
}

.mm-courseware-workspace .mm-cta-ink.ant-btn,
.mm-courseware-workspace .mm-cta-ink.ant-btn-primary,
.mm-courseware-workspace .mm-cta-ink.ant-btn:focus,
.mm-courseware-workspace .mm-cta-ink.ant-btn-primary:focus {
  background: var(--ds-text) !important;
  border-color: var(--ds-text) !important;
  color: var(--ds-text-on-ink) !important;
  background-image: none !important;
  filter: none !important;
  box-shadow: none !important;
}

.mm-courseware-workspace .mm-cta-ink.ant-btn:hover,
.mm-courseware-workspace .mm-cta-ink.ant-btn-primary:hover {
  background: #000000 !important;
  border-color: #000000 !important;
  color: var(--ds-text-on-ink) !important;
  background-image: none !important;
  filter: none !important;
  box-shadow: var(--ds-shadow-cta-primary) !important;
}

.mm-courseware-workspace .mm-cta-ink.ant-btn:disabled,
.mm-courseware-workspace .mm-cta-ink.ant-btn-primary:disabled {
  background: var(--ds-bg-deep) !important;
  border-color: var(--ds-bg-deep) !important;
  color: var(--ds-text-subtle) !important;
  background-image: none !important;
  opacity: 0.6;
}

.mm-courseware-preview-reopen {
  height: 36px;
  padding: 0 var(--ds-space-4);
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
  font: 700 13px/1 var(--ds-font);
  letter-spacing: 0;
  cursor: pointer;
}

/* ai_smart workspace */
.mm-ai-smart-workspace--center {
  display: flex; flex-direction: column; align-items: center; gap: var(--ds-space-3);
  padding: var(--ds-space-6) 0;
}
.mm-ai-smart-actions { display: flex; gap: var(--ds-space-2); }

/* hotspot factory workspace */
.mm-hotspot-ws {
  display: flex;
  flex-direction: column;
  gap: 22px;
  color: var(--ds-text);
}
.mm-hotspot-page {
  height: 680px;
  min-height: 680px;
  box-sizing: border-box;
  overflow: hidden;
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-lg);
  background: var(--ds-bg);
  box-shadow: var(--ds-shadow-soft);
}
.mm-hotspot-page--radar {
  padding: var(--ds-space-5);
}
.mm-hotspot-page--extract {
  position: relative;
  background:
    linear-gradient(180deg, color-mix(in srgb, var(--ds-text) 3%, transparent), transparent 34%),
    var(--ds-bg);
}
.mm-hotspot-page--pending {
  opacity: 0.72;
}
.mm-hotspot-extract-head {
  display: flex;
  align-items: flex-start;
  gap: var(--ds-space-3);
  padding: var(--ds-space-5) var(--ds-space-5) var(--ds-space-4);
  border-bottom: 1px solid var(--ds-border);
  background: var(--ds-surface);
}
.mm-hotspot-extract-head > span {
  width: 34px;
  height: 34px;
  display: grid;
  place-items: center;
  flex: 0 0 auto;
  border: 1px solid var(--ds-text);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
  font-family: var(--ds-font-mono);
  font-size: 13px;
  font-weight: 850;
}
.mm-hotspot-extract-head h3 {
  margin: 0;
  color: var(--ds-text);
  font-size: 16px;
  line-height: 1.3;
  font-weight: 850;
}
.mm-hotspot-extract-head p {
  margin: 5px 0 0;
  color: var(--ds-text-muted);
  font-size: 12px;
  line-height: 1.55;
}
.mm-hotspot-status {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--ds-space-5);
  min-height: 56px;
  padding: 0 0 var(--ds-space-3);
  border-bottom: 1px solid var(--ds-border);
}
.mm-hotspot-status-main {
  display: flex;
  align-items: flex-start;
  gap: 10px;
  min-width: 0;
}
.mm-hotspot-live-dot {
  flex: 0 0 auto;
  width: 9px;
  height: 9px;
  margin-top: 6px;
  border-radius: 999px;
  background: var(--ds-text);
  box-shadow: 0 0 0 5px color-mix(in srgb, var(--ds-text) 10%, transparent);
  animation: mm-hotspot-pulse 1.4s ease-in-out infinite;
}
.mm-hotspot-status h3,
.mm-hotspot-choice h4 {
  margin: 0;
  color: var(--ds-text);
  font-size: 16px;
  font-weight: 800;
  line-height: 1.28;
}
.mm-hotspot-status p,
.mm-hotspot-choice p {
  margin: 6px 0 0;
  color: var(--ds-text-muted);
  font-size: 12px;
  line-height: 1.6;
}
.mm-hotspot-status-meta {
  flex: 0 0 auto;
  display: flex;
  align-items: center;
  gap: var(--ds-space-3);
  color: var(--ds-text-muted);
  font-size: 12px;
  font-family: var(--ds-font-mono);
  white-space: nowrap;
}
.mm-hotspot-done {
  flex: 0 0 auto;
  padding: 4px 9px;
  border-radius: 999px;
  background: var(--ds-bg-alt);
  color: var(--ds-text);
  font-size: 12px;
  font-weight: 700;
}
.mm-hotspot-steps {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: var(--ds-space-2);
}
.mm-hotspot-step {
  padding: 8px 10px;
  border-radius: var(--ds-radius-sm);
  border: 1px solid var(--ds-border);
  background: var(--ds-surface);
  color: var(--ds-text-muted);
  font-size: 12px;
  font-weight: 700;
  text-align: center;
}
.mm-hotspot-step--done {
  border-color: var(--ds-border-strong);
  color: var(--ds-text);
}
.mm-hotspot-step--current {
  border-color: var(--ds-text);
  background: var(--ds-bg-alt);
  color: var(--ds-text);
  box-shadow: inset 3px 0 0 var(--ds-text);
}
.mm-hotspot-radar {
  display: grid;
  grid-template-columns: 96px minmax(0, 1fr) 174px;
  min-height: 504px;
  overflow: hidden;
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-lg);
  background: var(--ds-bg);
}
.mm-hotspot-source-rail {
  display: flex;
  flex-direction: column;
  gap: 10px;
  padding: var(--ds-space-4) 10px;
  border-right: 1px solid var(--ds-border);
  background: var(--ds-surface);
}
.mm-hotspot-rail-item {
  min-height: 64px;
  padding: 9px;
  display: grid;
  align-content: space-between;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-md);
  background: var(--ds-surface);
  color: var(--ds-text-muted);
  font-size: 11px;
  line-height: 1.25;
  transition: border-color 160ms ease, background 160ms ease, color 160ms ease;
}
.mm-hotspot-rail-item strong {
  color: var(--ds-text);
  font-size: 17px;
  font-family: var(--ds-font-mono);
  line-height: 1;
}
.mm-hotspot-rail-item--active {
  border-color: var(--ds-text);
  background: var(--ds-bg-alt);
  color: var(--ds-text);
  box-shadow: inset 3px 0 0 var(--ds-text);
}
.mm-hotspot-rail-item--error {
  border-color: var(--ds-danger);
  color: var(--ds-danger);
  background: color-mix(in srgb, var(--ds-danger) 7%, var(--ds-surface));
}
.mm-hotspot-radar-main {
  min-width: 0;
  padding: var(--ds-space-4);
  background:
    radial-gradient(circle at 72% 14%, color-mix(in srgb, var(--ds-text) 8%, transparent), transparent 28%),
    linear-gradient(180deg, var(--ds-surface), color-mix(in srgb, var(--ds-bg-alt) 48%, var(--ds-surface)));
}
.mm-hotspot-scan-panel {
  min-height: 240px;
  position: relative;
  overflow: hidden;
  padding: 18px;
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-lg);
  background:
    linear-gradient(90deg, transparent 0, color-mix(in srgb, var(--ds-text) 7%, transparent) 48%, transparent 100%),
    var(--ds-surface);
  background-size: 220px 100%;
  animation: mm-hotspot-scan 2.6s linear infinite;
}
.mm-hotspot-radar-ring {
  position: absolute;
  width: 220px;
  height: 220px;
  right: -56px;
  top: -46px;
  border-radius: 50%;
  border: 1px solid color-mix(in srgb, var(--ds-text) 16%, transparent);
}
.mm-hotspot-radar-ring::before,
.mm-hotspot-radar-ring::after {
  content: "";
  position: absolute;
  inset: 34px;
  border-radius: inherit;
  border: 1px solid color-mix(in srgb, var(--ds-text) 11%, transparent);
}
.mm-hotspot-radar-ring::after {
  inset: 72px;
  background: color-mix(in srgb, var(--ds-text) 7%, transparent);
}
.mm-hotspot-scan-copy {
  position: relative;
  z-index: 1;
  max-width: 78%;
}
.mm-hotspot-kicker {
  display: inline-flex;
  margin-bottom: var(--ds-space-3);
  color: var(--ds-text-muted);
  font-size: 12px;
  font-weight: 800;
  letter-spacing: 0.08em;
}
.mm-hotspot-scan-copy h4 {
  margin: 0;
  color: var(--ds-text);
  font-size: 20px;
  line-height: 1.35;
  font-weight: 850;
}
.mm-hotspot-scan-copy h4 em {
  color: var(--ds-danger);
  font-style: normal;
}
.mm-hotspot-scan-copy p {
  margin: var(--ds-space-2) 0 0;
  color: var(--ds-text-muted);
  font-size: 13px;
  line-height: 1.75;
}
.mm-hotspot-signal {
  display: flex;
  flex-direction: column;
  gap: var(--ds-space-2);
  padding: 12px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-md);
  background: var(--ds-surface);
}
.mm-hotspot-signal-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--ds-space-3);
  color: var(--ds-text-muted);
  font-size: 12px;
}
.mm-hotspot-signal-head strong {
  color: var(--ds-text);
  font-size: 12px;
}
.mm-hotspot-source-row {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  margin-top: var(--ds-space-4);
}
.mm-hotspot-source-row span {
  padding: 3px 8px;
  border-radius: 999px;
  border: 1px solid var(--ds-border);
  background: var(--ds-bg);
  color: var(--ds-text-subtle);
  font-size: 11px;
  font-weight: 700;
}
.mm-hotspot-source-row .mm-hotspot-source--active {
  border-color: var(--ds-border-strong);
  color: var(--ds-text);
  background: var(--ds-bg);
}
.mm-hotspot-candidate-list {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: var(--ds-space-2);
  margin-top: var(--ds-space-3);
}
.mm-hotspot-candidate-button {
  min-width: 0;
  min-height: 54px;
  display: grid;
  grid-template-columns: 42px minmax(0, 1fr);
  gap: var(--ds-space-2);
  align-items: center;
  padding: 9px 10px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-md);
  background: var(--ds-surface);
  color: var(--ds-text-muted);
  font: inherit;
  text-align: left;
  cursor: pointer;
}
.mm-hotspot-candidate-button strong {
  color: var(--ds-text);
  font-family: var(--ds-font-mono);
  font-size: 13px;
  line-height: 1;
}
.mm-hotspot-candidate-button span {
  min-width: 0;
  color: inherit;
  font-size: 12px;
  line-height: 1.35;
  word-break: break-word;
}
.mm-hotspot-candidate-button--active {
  border-color: var(--ds-text);
  background: var(--ds-bg-alt);
  color: var(--ds-text);
  box-shadow: inset 3px 0 0 var(--ds-text);
}
.mm-hotspot-progress {
  height: 4px;
  overflow: hidden;
  border-radius: 999px;
  background: var(--ds-border);
}
.mm-hotspot-progress span {
  display: block;
  height: 100%;
  border-radius: inherit;
  background: linear-gradient(90deg, var(--ds-text), color-mix(in srgb, var(--ds-text) 54%, var(--ds-bg-deep)));
  transition: width 0.28s ease;
}
.mm-hotspot-log {
  display: grid;
  gap: 8px;
  margin-top: 14px;
}
.mm-hotspot-log-row {
  display: grid;
  grid-template-columns: 66px minmax(0, 1fr) auto;
  gap: 10px;
  align-items: center;
  min-height: 38px;
  padding: 8px 10px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-md);
  background: color-mix(in srgb, var(--ds-surface) 86%, transparent);
}
.mm-hotspot-log-row span {
  color: var(--ds-text-muted);
  font-size: 12px;
  font-family: var(--ds-font-mono);
}
.mm-hotspot-log-row strong {
  color: var(--ds-text);
  font-size: 12px;
  font-weight: 800;
}
.mm-hotspot-log-row em {
  color: var(--ds-text-muted);
  font-size: 12px;
  font-style: normal;
  white-space: nowrap;
}
.mm-hotspot-log-row p {
  grid-column: 2 / 4;
  margin: 0;
  color: var(--ds-text-muted);
  font-size: 11px;
  line-height: 1.45;
}
.mm-hotspot-radar-side {
  display: grid;
  gap: var(--ds-space-3);
  align-content: start;
  padding: var(--ds-space-4);
  border-left: 1px solid var(--ds-border);
  background: var(--ds-surface);
}
.mm-hotspot-metric {
  padding: 12px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-md);
  background: var(--ds-surface);
}
.mm-hotspot-metric span {
  display: block;
  margin-bottom: 7px;
  color: var(--ds-text-muted);
  font-size: 12px;
}
.mm-hotspot-metric strong {
  display: block;
  color: var(--ds-text);
  font-size: 24px;
  line-height: 1;
  font-family: var(--ds-font-mono);
  font-weight: 850;
}
.mm-hotspot-side-note {
  margin: 0;
  color: var(--ds-text-muted);
  font-size: 12px;
  line-height: 1.65;
}
.mm-hotspot-choice {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  gap: var(--ds-space-4);
  padding: var(--ds-space-5);
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-lg);
  background:
    linear-gradient(90deg, color-mix(in srgb, var(--ds-text) 5%, transparent), transparent 45%),
    var(--ds-surface);
}
.mm-hotspot-page--extract .mm-hotspot-choice {
  border: 0;
  border-radius: 0;
  padding-bottom: var(--ds-space-4);
  background:
    linear-gradient(90deg, color-mix(in srgb, var(--ds-text) 4%, transparent), transparent 48%),
    var(--ds-bg);
}
.mm-hotspot-extract-grid {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: var(--ds-space-3);
  padding: 0 var(--ds-space-5) var(--ds-space-5);
}
.mm-hotspot-extract-card {
  min-height: 132px;
  padding: var(--ds-space-4);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-lg);
  background: var(--ds-surface);
}
.mm-hotspot-extract-card--wide {
  grid-column: span 2;
  grid-row: span 2;
  min-height: 280px;
}
.mm-hotspot-extract-card span {
  display: inline-flex;
  margin-bottom: var(--ds-space-2);
  color: var(--ds-text-muted);
  font-size: 12px;
  font-weight: 800;
}
.mm-hotspot-extract-card h4 {
  margin: 0;
  color: var(--ds-text);
  font-size: 15px;
  line-height: 1.35;
  font-weight: 850;
}
.mm-hotspot-extract-card p {
  margin: var(--ds-space-2) 0 0;
  color: var(--ds-text-muted);
  font-size: 12px;
  line-height: 1.65;
}
.mm-hotspot-extract-card ul {
  display: grid;
  gap: 8px;
  margin: var(--ds-space-4) 0 0;
  padding: 0;
  list-style: none;
}
.mm-hotspot-extract-card li {
  padding: 8px 10px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg);
  color: var(--ds-text-muted);
  font-size: 12px;
  line-height: 1.5;
}
.mm-hotspot-link {
  color: var(--ds-text);
  word-break: break-all;
  text-decoration: underline;
  text-underline-offset: 3px;
}
.mm-hotspot-choice--pending {
  opacity: 0.68;
}
.mm-hotspot-choice-badge {
  display: inline-flex;
  align-items: center;
  height: 26px;
  margin-bottom: var(--ds-space-3);
  padding: 0 10px;
  border-radius: 999px;
  border: 1px solid var(--ds-border-strong);
  background: var(--ds-bg-alt);
  color: var(--ds-text);
  font-size: 12px;
  font-weight: 800;
}
.mm-hotspot-choice h5 {
  margin: var(--ds-space-3) 0 0;
  max-width: 820px;
  color: var(--ds-text);
  font-size: 20px;
  line-height: 1.38;
  font-weight: 850;
}
.mm-hotspot-choice-grid {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: var(--ds-space-3);
  margin-top: var(--ds-space-4);
}
.mm-hotspot-choice-grid > div {
  padding: var(--ds-space-4);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-lg);
  background: var(--ds-surface);
}
.mm-hotspot-choice-grid strong {
  display: flex;
  margin-bottom: var(--ds-space-2);
  color: var(--ds-text);
  font-size: 13px;
  font-weight: 850;
}
.mm-hotspot-choice-grid p {
  margin: 0;
}
.mm-hotspot-choice-action {
  display: grid;
  align-content: start;
  justify-items: end;
  gap: var(--ds-space-3);
}
.mm-hotspot-choice-action span {
  min-width: 64px;
  height: 34px;
  display: grid;
  place-items: center;
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg-alt);
  color: var(--ds-text);
  font-family: var(--ds-font-mono);
  font-size: 14px;
  font-weight: 850;
}
.mm-hotspot-choice .mm-cta-ink.ant-btn,
.mm-hotspot-choice .mm-cta-ink.ant-btn-primary,
.mm-hotspot-choice .mm-cta-ink.ant-btn:focus,
.mm-hotspot-choice .mm-cta-ink.ant-btn:hover {
  background: var(--ds-text) !important;
  border-color: var(--ds-text) !important;
  color: var(--ds-text-on-ink) !important;
  box-shadow: none !important;
}

/* hotspot ink lock: this workspace must stay black/gray even when global Ant/GEO theme styles are loaded later. */
.mm-hotspot-ws .mm-hotspot-live-dot {
  background: var(--ds-text) !important;
  box-shadow: 0 0 0 5px color-mix(in srgb, var(--ds-text) 10%, transparent) !important;
}
.mm-hotspot-ws .ant-spin-dot-item {
  background-color: var(--ds-text) !important;
}
.mm-hotspot-ws .ant-spin,
.mm-hotspot-ws .ant-spin-dot,
.mm-hotspot-ws .ant-spin-dot-holder {
  color: var(--ds-text) !important;
  border-color: var(--ds-text) !important;
}
.mm-hotspot-ws .mm-hotspot-step,
.mm-hotspot-ws .mm-hotspot-rail-item,
.mm-hotspot-ws .mm-hotspot-signal,
.mm-hotspot-ws .mm-hotspot-metric,
.mm-hotspot-ws .mm-hotspot-log-row,
.mm-hotspot-ws .mm-hotspot-candidate-button,
.mm-hotspot-ws .mm-hotspot-choice-grid > div,
.mm-hotspot-ws .mm-hotspot-extract-card,
.mm-hotspot-ws .mm-hotspot-extract-card li {
  border-color: var(--ds-border) !important;
  background: var(--ds-surface) !important;
  color: var(--ds-text-muted) !important;
}
.mm-hotspot-ws .mm-hotspot-step--done,
.mm-hotspot-ws .mm-hotspot-step--current,
.mm-hotspot-ws .mm-hotspot-rail-item--active,
.mm-hotspot-ws .mm-hotspot-candidate-button--active {
  border-color: var(--ds-text) !important;
  background: var(--ds-bg-alt) !important;
  color: var(--ds-text) !important;
  box-shadow: inset 3px 0 0 var(--ds-text) !important;
}
.mm-hotspot-ws .mm-hotspot-rail-item--error {
  border-color: var(--ds-danger) !important;
  background: color-mix(in srgb, var(--ds-danger) 7%, var(--ds-surface)) !important;
  color: var(--ds-danger) !important;
}
.mm-hotspot-ws .mm-hotspot-radar-main {
  background:
    radial-gradient(circle at 72% 14%, color-mix(in srgb, var(--ds-text) 9%, transparent), transparent 28%),
    linear-gradient(180deg, var(--ds-surface), color-mix(in srgb, var(--ds-bg-alt) 56%, var(--ds-surface))) !important;
}
.mm-hotspot-ws .mm-hotspot-scan-panel {
  border-color: var(--ds-border-strong) !important;
  background:
    linear-gradient(90deg, transparent 0, color-mix(in srgb, var(--ds-text) 8%, transparent) 48%, transparent 100%),
    var(--ds-surface) !important;
}
.mm-hotspot-ws .mm-hotspot-radar-ring,
.mm-hotspot-ws .mm-hotspot-radar-ring::before,
.mm-hotspot-ws .mm-hotspot-radar-ring::after {
  border-color: color-mix(in srgb, var(--ds-text) 16%, transparent) !important;
}
.mm-hotspot-ws .mm-hotspot-radar-ring::after {
  background: color-mix(in srgb, var(--ds-text) 8%, transparent) !important;
}
.mm-hotspot-ws .mm-hotspot-source-row span,
.mm-hotspot-ws .mm-hotspot-done,
.mm-hotspot-ws .mm-hotspot-choice-badge,
.mm-hotspot-ws .mm-hotspot-choice-action span {
  border-color: var(--ds-border-strong) !important;
  background: var(--ds-bg-alt) !important;
  color: var(--ds-text) !important;
}
.mm-hotspot-ws .mm-hotspot-source-row .mm-hotspot-source--active {
  border-color: var(--ds-text) !important;
  background: var(--ds-bg-alt) !important;
  color: var(--ds-text) !important;
}
.mm-hotspot-ws .mm-hotspot-progress {
  background: var(--ds-border) !important;
}
.mm-hotspot-ws .mm-hotspot-progress span {
  background: linear-gradient(90deg, var(--ds-text), color-mix(in srgb, var(--ds-text) 58%, var(--ds-border-strong))) !important;
}
.mm-hotspot-ws .mm-hotspot-choice {
  border-color: var(--ds-border-strong) !important;
  background:
    linear-gradient(90deg, color-mix(in srgb, var(--ds-text) 5%, transparent), transparent 45%),
    var(--ds-surface) !important;
}
.mm-hotspot-ws .mm-cta-ink.ant-btn,
.mm-hotspot-ws .mm-cta-ink.ant-btn-primary,
.mm-hotspot-ws .mm-cta-ink.ant-btn-default,
.mm-hotspot-ws .mm-cta-ink.ant-btn:focus,
.mm-hotspot-ws .mm-cta-ink.ant-btn:hover,
.mm-hotspot-ws .mm-cta-ink.ant-btn-primary:focus,
.mm-hotspot-ws .mm-cta-ink.ant-btn-primary:hover {
  background: var(--ds-text) !important;
  border-color: var(--ds-text) !important;
  color: var(--ds-text-on-ink) !important;
  box-shadow: none !important;
}

@keyframes mm-hotspot-pulse {
  0%, 100% { transform: scale(1); opacity: 1; }
  50% { transform: scale(0.72); opacity: 0.65; }
}

@keyframes mm-hotspot-scan {
  from { background-position: -220px 0; }
  to { background-position: 560px 0; }
}

@media (max-width: 980px) {
  .mm-hotspot-page {
    height: auto;
    min-height: 0;
  }
  .mm-hotspot-radar {
    grid-template-columns: 1fr;
  }
  .mm-hotspot-source-rail {
    flex-direction: row;
    overflow-x: auto;
    border-right: 0;
    border-bottom: 1px solid var(--ds-border);
  }
  .mm-hotspot-rail-item {
    min-width: 84px;
  }
  .mm-hotspot-radar-side {
    border-left: 0;
    border-top: 1px solid var(--ds-border);
  }
  .mm-hotspot-scan-copy {
    max-width: none;
  }
  .mm-hotspot-choice,
  .mm-hotspot-choice-grid,
  .mm-hotspot-candidate-list {
    grid-template-columns: 1fr;
  }
  .mm-hotspot-extract-grid {
    grid-template-columns: 1fr;
  }
  .mm-hotspot-extract-card--wide {
    grid-column: auto;
    grid-row: auto;
    min-height: 0;
  }
  .mm-hotspot-choice-action {
    justify-items: start;
  }
}

/* workspace 主 CTA — ink-on-ink（design.md §12.2 console scope 收紧 azure） */
.mm-cta-ink.ant-btn,
.mm-cta-ink.ant-btn:focus {
  background: var(--ds-text);
  border-color: var(--ds-text);
  color: var(--ds-text-on-ink);
}
.mm-cta-ink.ant-btn:hover {
  background: var(--ds-text);
  border-color: var(--ds-text);
  color: var(--ds-text-on-ink);
  opacity: 0.88;
}
.mm-cta-ink.ant-btn:disabled,
.mm-cta-ink.ant-btn:disabled:hover {
  background: var(--ds-border-strong);
  border-color: var(--ds-border-strong);
  color: var(--ds-text-on-ink);
  opacity: 0.6;
}

/* ===== root 下方内联素材卡节点（去弹窗版素材 gate）=====
   素材未齐时挂在 root 模板节点正下方，复用 s2a 的 MaterialOnboardingCard。
   MaterialOnboardingCard 自带 .onboard-banner / .onboard-card（max-width:920 居中），
   此处只给画布节点一个固定宽度容器，让素材卡在点阵画布上成块、可被 fitView 框住。 */
.mm-material-node {
  width: 760px;
}
/* 节点内 banner / 卡片去掉自身居中外边距，由节点容器统一定宽。 */
.mm-material-node .onboard-banner,
.mm-material-node .onboard-card {
  max-width: 100%;
  margin-left: 0;
  margin-right: 0;
}

/* ===== dh-picker 节点容器（spec §4-§5）：和素材节点同宽，挂在其正下方。 ===== */
.mm-dh-picker-node {
  width: 760px;
}
.mm-dh-picker-node .dh-picker {
  margin: 0;
  max-width: 100%;
}

/* ===== dh-create 节点容器：同宽 760，包 DigitalHumanCreateForm。 ===== */
.mm-dh-create-node {
  width: 760px;
  padding: var(--ds-space-5);
  background: var(--ds-surface);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-lg);
  box-shadow: var(--ds-shadow-deep);
}

/* ===== chat embed 模板卡（Task 39）===== */
.mm-embed {
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-md);
  background: var(--ds-bg);
  padding: var(--ds-space-3);
}
.mm-embed-title {
  font-size: 13px; font-weight: 700; color: var(--ds-text);
  margin-bottom: var(--ds-space-3);
}
.mm-embed-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: var(--ds-space-2);
}
.mm-embed-tile {
  display: flex; flex-direction: column; align-items: center; gap: 4px;
  padding: var(--ds-space-2);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-surface);
  cursor: pointer;
  transition: border-color 0.15s, box-shadow 0.15s;
}
.mm-embed-tile:hover { border-color: var(--ds-border-strong); }
.mm-embed-tile--selected {
  border-color: var(--ds-text);
  box-shadow: 0 0 0 1px var(--ds-text);
  background: var(--ds-bg);
}
.mm-embed-icon { font-size: 16px; color: var(--ds-text); }
.mm-embed-name {
  font-size: 11px; font-weight: 600; color: var(--ds-text);
  text-align: center; line-height: 1.3;
}
.mm-embed-confirm {
  margin-top: var(--ds-space-3);
  width: 100%;
  padding: 7px 0;
  font-size: 12px; font-weight: 700;
  border: none; border-radius: var(--ds-radius-sm);
  background: var(--ds-text); color: var(--ds-text-on-ink);
  cursor: pointer;
}
.mm-embed-confirm:disabled {
  background: var(--ds-border-strong); color: var(--ds-text-on-ink);
  cursor: not-allowed; opacity: 0.6;
}

/* ===== language selection node ===== */
.react-flow__node-languageSelection {
  z-index: 1100 !important;
}

.mm-language-node {
  position: relative;
  width: 360px;
  padding: var(--ds-space-4);
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-lg);
  background: var(--ds-bg);
  box-shadow: var(--ds-shadow-card);
  transition: opacity 0.26s ease, transform 0.26s ease;
}
.mm-language-node.is-exiting {
  opacity: 0;
  transform: scale(0.96);
  pointer-events: none;
}
@keyframes cardin {
  from {
    opacity: 0;
    transform: translateY(10px) scale(0.95);
  }
  to {
    opacity: 1;
    transform: none;
  }
}
.react-flow__node-childVideo:not([data-id^="record-"]):not([data-id^="pending-"]) {
  animation: cardin 0.42s cubic-bezier(0.22, 0.61, 0.36, 1) both;
}
.mm-language-head {
  margin-bottom: var(--ds-space-3);
}
.mm-language-title {
  font-size: 15px;
  font-weight: 800;
  color: var(--ds-text);
}
.mm-language-template {
  margin-top: 4px;
  font-size: 12px;
  color: var(--ds-text-muted);
}
.mm-language-subtitle,
.mm-language-hint {
  font-size: 12px;
  color: var(--ds-text-muted);
  line-height: 1.5;
}
.mm-language-subtitle {
  margin-top: 4px;
}
.mm-language-hint {
  margin-top: var(--ds-space-3);
}
.mm-language-mode-group {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: var(--ds-space-2);
  margin-bottom: var(--ds-space-3);
}
.mm-language-mode {
  min-height: 34px;
  padding: 7px 10px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-surface);
  color: var(--ds-text-muted);
  font-size: 12px;
  font-weight: 800;
  cursor: pointer;
}
.mm-language-mode.is-active {
  border-color: var(--ds-text);
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
}
.mm-language-grid {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: var(--ds-space-2);
}
.mm-language-option {
  display: flex;
  align-items: center;
  gap: var(--ds-space-2);
  padding: 8px 10px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-surface);
  color: var(--ds-text);
  font-size: 13px;
  font-weight: 600;
  cursor: pointer;
}
.mm-language-option input {
  margin: 0;
  accent-color: var(--ds-text);
}
.mm-language-error {
  margin-top: var(--ds-space-2);
  font-size: 12px;
  font-weight: 600;
  color: var(--ds-danger, #b42318);
}
.mm-language-actions {
  display: flex;
  justify-content: flex-end;
  gap: var(--ds-space-2);
  margin-top: var(--ds-space-4);
}
.mm-language-secondary {
  padding: 8px 18px;
  font-size: 13px;
  font-weight: 700;
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg);
  color: var(--ds-text);
  cursor: pointer;
}

/* ===== 视频卡 ⋯「确认删除」二次确认弹窗 =====
   Modal.confirm({ rootClassName: 'mm-delete-confirm' }) 经此类作用域化。
   背景：App.css 全局 `.ant-modal-confirm .ant-btn-default` 是旧深色主题遗留，
   用 `background:#2b2b2b !important` 把所有 confirm 弹窗的「取消」按钮染成
   突兀的深色实心块。此处仅在本弹窗作用域内反制，不动那条全局规则。
   v1 亮色系统下：取消 = 白底浅描边 secondary；确认删除 = 干净 danger 红。 */
.mm-delete-confirm .ant-modal-confirm-btns {
  display: flex;
  justify-content: flex-end;
  gap: var(--ds-space-2);
}
.mm-delete-confirm .ant-modal-confirm-btns .ant-btn {
  height: 36px;
  padding: 0 18px;
  border-radius: var(--ds-radius-sm);
  font-weight: 600;
  letter-spacing: normal;
  box-shadow: none !important;
  transition: background-color 0.15s ease, border-color 0.15s ease, color 0.15s ease;
}
.mm-delete-confirm .ant-modal-confirm-btns .ant-btn + .ant-btn {
  margin-inline-start: 0;
}

/* 取消 — 次要按钮：白底 + 浅描边，明显轻于 danger */
.mm-delete-confirm .ant-modal-confirm-btns .ant-btn-default {
  background: var(--ds-bg) !important;
  border-color: var(--ds-border-strong) !important;
  color: var(--ds-text) !important;
}
.mm-delete-confirm .ant-modal-confirm-btns .ant-btn-default:hover,
.mm-delete-confirm .ant-modal-confirm-btns .ant-btn-default:focus-visible {
  background: var(--ds-bg-alt) !important;
  border-color: var(--ds-text-subtle) !important;
  color: var(--ds-text) !important;
}

/* 确认删除 — 危险操作：干净 danger 红实心 */
.mm-delete-confirm .ant-modal-confirm-btns .ant-btn-dangerous,
.mm-delete-confirm .ant-modal-confirm-btns .ant-btn-dangerous.ant-btn-primary {
  background: var(--ds-danger) !important;
  border-color: var(--ds-danger) !important;
  color: var(--ds-text-on-accent) !important;
}
.mm-delete-confirm .ant-modal-confirm-btns .ant-btn-dangerous:hover,
.mm-delete-confirm .ant-modal-confirm-btns .ant-btn-dangerous.ant-btn-primary:hover,
.mm-delete-confirm .ant-modal-confirm-btns .ant-btn-dangerous:focus-visible,
.mm-delete-confirm .ant-modal-confirm-btns .ant-btn-dangerous.ant-btn-primary:focus-visible {
  background: #dc3a3a !important;
  border-color: #dc3a3a !important;
  color: var(--ds-text-on-accent) !important;
}

/* ===== layoutSolver-driven 位置变化让位/回弹动画 =====
   layoutSolver 驱动的 card 位置变化用 200ms ease-out 过渡平滑移动。
   仅对 transform 加 transition；ReactFlow 内部用 transform 改 position。
   用户拖动时 ReactFlow 自己会跳过 transition（dragging className），无需特殊处理。 */
.react-flow__node:not(.dragging) {
  transition: transform 200ms ease-out;
}

/* === workspace 内联卡（取代原 mm-workspace-overlay） === */
.mm-workspace-node {
  width: min(760px, calc(100vw - 32px));
  max-width: 100%;
  background: var(--ds-bg);
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-lg);
  box-shadow: var(--ds-shadow-deep);
  overflow: hidden;
}
.mm-workspace-node--hotspot {
  width: min(1080px, calc(100vw - 96px));
  overflow: visible;
  border: 0;
  background: transparent;
  box-shadow: none;
}
.mm-workspace-node--hotspot .mm-workspace-node-head {
  margin-bottom: var(--ds-space-3);
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-lg);
  background: var(--ds-bg);
  box-shadow: var(--ds-shadow-soft);
}
.mm-workspace-node--hotspot .mm-workspace-node-body {
  padding: 0;
}
.mm-workspace-node-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 14px 18px;
  border-bottom: 1px solid var(--ds-border);
}
.mm-workspace-node-title {
  font-size: 14px;
  font-weight: 700;
  color: var(--ds-text);
}
.mm-workspace-node-close {
  width: 28px;
  height: 28px;
  border-radius: var(--ds-radius-sm);
  border: 1px solid var(--ds-border);
  background: var(--ds-bg);
  color: var(--ds-text-muted);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 16px;
  line-height: 1;
  cursor: pointer;
}
.mm-workspace-node-close:hover {
  border-color: var(--ds-border-strong);
  background: var(--ds-bg-alt);
}
.mm-workspace-node-body {
  padding: var(--ds-space-5);
  display: flex;
  flex-direction: column;
  gap: var(--ds-space-3);
}

/* =============================================================
   爆款模仿 — 入口 + 工作区卡样式
   视觉权威: docs/design/2026-06-02-hot-imitation-tier1-final.html
   Tokens: var(--ds-*) only — NO azure / NO raw hex (except gradient
   on .hi-ref-cover which has no ds-* equivalent for the stone swatch)
   §12 console no-azure: ink-on-ink primary, ink stepper, ink spinner
   ============================================================= */

/* ── 入口区块（RootTemplateNode 底部，分隔线 + 标题 + 输入行） ── */

.hi-entry {
  margin-top: var(--ds-space-5);
  padding-top: var(--ds-space-5);
  border-top: 1px solid var(--ds-border);
}

.hi-entry-title {
  font-size: 14px;
  font-weight: 700;
  color: var(--ds-text);
}

.hi-entry-sub {
  font-size: 12px;
  color: var(--ds-text-muted);
  margin-top: 3px;
  line-height: 1.5;
}

.hi-entry-row {
  display: flex;
  align-items: center;
  gap: var(--ds-space-2);
  margin-top: var(--ds-space-3);
}

.hi-entry-input {
  flex: 1;
  height: 40px;
  padding: 0 14px;
  font-size: 13px;
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg);
  color: var(--ds-text);
  outline: none;
  transition: border-color 0.15s;
}
.hi-entry-input:focus {
  border-color: var(--ds-text);
}
.hi-entry-input::placeholder {
  color: var(--ds-text-subtle);
}

/* 开始复刻 — ink-on-ink（§12.2 主 CTA） */
.hi-entry-go {
  height: 40px;
  padding: 0 20px;
  font-size: 13px;
  font-weight: 700;
  white-space: nowrap;
  border: none;
  border-radius: var(--ds-radius-sm);
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
  cursor: pointer;
  transition: opacity 0.15s;
}
.hi-entry-go:hover {
  opacity: 0.88;
}
.hi-entry-go:disabled {
  background: var(--ds-border-strong);
  color: var(--ds-text-on-ink);
  cursor: not-allowed;
  opacity: 0.6;
}

/* ── 工作区内容容器 ── */
/* 卡壳（760px / border / radius / shadow）由外层 .mm-workspace-node 提供，
   与 .mm-custom-workspace 等兄弟一致；此处只做内容纵向布局，避免卡中卡双边框。 */
.hi-ws {
  display: flex;
  flex-direction: column;
  gap: var(--ds-space-3);
}

/* ── 步骤条 ── */

.hi-steps {
  display: flex;
  align-items: center;
  padding: 0 18px 14px;
  border-bottom: 1px solid var(--ds-border);
}

.hi-step {
  display: flex;
  align-items: center;
  gap: 7px;
  font-size: 12px;
  color: var(--ds-text-subtle);
}

/* 当前步骤 */
.hi-step--cur {
  color: var(--ds-text);
  font-weight: 700;
}
.hi-step--cur .hi-step-dot {
  border-color: var(--ds-text);
  border-width: 2px;
  color: var(--ds-text);
}

/* 已完成步骤 */
.hi-step--done {
  color: var(--ds-text-muted);
}
.hi-step--done .hi-step-dot {
  background: var(--ds-text);
  border-color: var(--ds-text);
  color: var(--ds-text-on-ink);
}

/* 步骤圆点：默认（待完成） */
.hi-step-dot {
  width: 18px;
  height: 18px;
  border-radius: 50%;
  border: 1.5px solid var(--ds-border-strong);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 10px;
  font-family: var(--ds-font-mono);
  color: var(--ds-text-subtle);
  background: var(--ds-bg);
  flex-shrink: 0;
}

/* 步骤连线 */
.hi-step-line {
  flex: 1;
  height: 1px;
  background: var(--ds-border);
  margin: 0 12px;
}

/* ── 解析中状态（状态一）── */

.hi-parse {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 13px;
  padding: 30px 0 22px;
}

/* Spinner: --ds-border-strong ring + --ds-text arc（无 azure） */
.hi-spinner {
  width: 30px;
  height: 30px;
  border: 3px solid var(--ds-border-strong);
  border-top-color: var(--ds-text);
  border-radius: 50%;
  animation: hi-spin 0.9s linear infinite;
  flex-shrink: 0;
}

@keyframes hi-spin {
  to { transform: rotate(360deg); }
}

.hi-parse-txt {
  font-size: 13px;
  font-weight: 700;
  color: var(--ds-text);
}

.hi-parse-sub {
  font-size: 12px;
  color: var(--ds-text-muted);
}

/* ── 状态二 shot-grid（复刻对象整片 + 逐分镜三栏对照）── */

/* 复刻对象 · 原片整片卡 */
.hi-ref {
  display: flex;
  gap: 14px;
  align-items: center;
  padding: 12px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-md);
  background: var(--ds-bg-alt);
  margin-bottom: 18px;
}

/* 封面占位：stone 渐变，权威 HTML 无对应 --ds-* token，用原始值 */
.hi-ref-cover {
  position: relative;
  width: 54px;
  height: 96px;
  border-radius: 7px;
  background: linear-gradient(135deg, #3f3f46, #71717a);
  flex: none;
  display: flex;
  align-items: center;
  justify-content: center;
  color: var(--ds-text-on-ink);
  font-size: 18px;
  cursor: pointer;
  overflow: hidden;
}
.hi-ref-cover video {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.hi-ref-meta {
  flex: 1;
  min-width: 0;
}

.hi-ref-k {
  font-family: var(--ds-font-mono);
  font-size: 10px;
  color: var(--ds-text-subtle);
  letter-spacing: 0.04em;
}

.hi-ref-title {
  font-size: 13px;
  font-weight: 700;
  color: var(--ds-text);
  margin-top: 2px;
}

.hi-ref-sub {
  font-size: 11.5px;
  color: var(--ds-text-muted);
  margin-top: 4px;
}

.hi-ref-watch {
  font-size: 11.5px;
  color: var(--ds-text);
  font-weight: 600;
  white-space: nowrap;
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-sm);
  padding: 7px 13px;
  cursor: pointer;
}

/* 逐分镜表头 + 行（四列 72px 1fr 1fr 196px） */
.hi-grid-head {
  display: grid;
  grid-template-columns: 72px 1fr 1fr 196px;
  gap: 14px;
  padding: 0 2px 8px;
  font-size: 11px;
  font-weight: 700;
  color: var(--ds-text-subtle);
  letter-spacing: 0.02em;
}

.hi-row {
  display: grid;
  grid-template-columns: 72px 1fr 1fr 196px;
  gap: 14px;
  align-items: start;
  padding: 14px 2px;
  border-top: 1px solid var(--ds-border);
}
.hi-row:first-of-type {
  border-top: 1px solid var(--ds-border-strong);
}

.hi-shot-no {
  padding-top: 9px;
  display: flex;
  flex-direction: column;
  gap: 5px;
}

.hi-sn-num {
  font-family: var(--ds-font-mono);
  font-size: 12px;
  color: var(--ds-text-muted);
}

.hi-sn-tc {
  font-family: var(--ds-font-mono);
  font-size: 10px;
  color: var(--ds-text-subtle);
  white-space: nowrap;
  line-height: 1.3;
}

.hi-orig {
  font-size: 12.5px;
  line-height: 1.55;
  color: var(--ds-text-muted);
  background: var(--ds-bg-alt);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
  padding: 9px 11px;
  min-height: 62px;
}

.hi-rewrite-in {
  width: 100%;
  min-height: 62px;
  resize: none;
  padding: 9px 11px;
  font-size: 12.5px;
  line-height: 1.55;
  font-family: var(--ds-font);
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg);
  color: var(--ds-text);
  outline: none;
}
.hi-rewrite-in:focus {
  border-color: var(--ds-text);
}

/* 匹配素材列 */
.hi-mat {
  display: flex;
  flex-direction: column;
  gap: 6px;
  align-items: flex-start;
}

/* 素材竖版缩略图占位：stone 渐变，权威 HTML 无对应 --ds-* token，用原始值 */
.hi-mat-clip {
  position: relative;
  width: 62px;
  height: 110px;
  border-radius: 8px;
  overflow: hidden;
  background: linear-gradient(135deg, #52525b, #a1a1aa);
  display: flex;
  align-items: center;
  justify-content: center;
  color: var(--ds-text-on-ink);
  font-size: 18px;
  cursor: pointer;
}
.hi-mat-clip img,
.hi-mat-clip video {
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.hi-mat-clip--empty {
  background: var(--ds-bg-alt);
  border: 1px dashed var(--ds-border-strong);
  color: var(--ds-warning);
  font-size: 22px;
  cursor: default;
}

.hi-mat-name {
  font-size: 11px;
  color: var(--ds-text);
  line-height: 1.4;
}

.hi-mat-miss {
  font-size: 11px;
  color: var(--ds-warning);
}

.hi-mat-swap {
  display: inline-block;
  font-size: 10.5px;
  color: var(--ds-text-muted);
  border: 1px dashed var(--ds-border-strong);
  border-radius: 7px;
  padding: 4px 12px;
  cursor: pointer;
}

/* ── 底部操作栏 ── */
.hi-foot {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-top: 8px;
  padding-top: 16px;
  border-top: 1px solid var(--ds-border);
}

.hi-foot-hint {
  font-size: 11.5px;
  color: var(--ds-text-muted);
}

.hi-foot-btns {
  display: flex;
  gap: 10px;
}

.hi-btn-sec {
  height: 38px;
  padding: 0 18px;
  font-size: 13px;
  font-weight: 700;
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg);
  color: var(--ds-text);
  cursor: pointer;
  transition: opacity 0.15s;
}
.hi-btn-sec:hover {
  opacity: 0.88;
}
.hi-btn-sec:disabled {
  cursor: not-allowed;
  opacity: 0.5;
}

/* 主 CTA — ink-on-ink（§12.2，与 .mm-cta-ink 同语义，native button 版本） */
.hi-btn-ink {
  height: 38px;
  padding: 0 20px;
  font-size: 13px;
  font-weight: 700;
  border: none;
  border-radius: var(--ds-radius-sm);
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
  display: inline-flex;
  align-items: center;
  gap: 7px;
  cursor: pointer;
  transition: opacity 0.15s;
}
.hi-btn-ink:hover {
  opacity: 0.88;
}
.hi-btn-ink:disabled {
  background: var(--ds-border-strong);
  color: var(--ds-text-on-ink);
  cursor: not-allowed;
  opacity: 0.6;
}

/* ===== 卡片接入契约：量完入场 + 重排平滑（spec §4.3） ===== */

/* 未测量节点不可见（占位预排帧）。用 opacity 而非 display/visibility：
   保持布局尺寸可被 withMeasure/ReactFlow 正常测量。 */
.mm-measure {
  opacity: 0;
}

/* 量完入场：淡入 + 轻缩放，一次性动画（re-render 不重播，类名常驻） */
.mm-measure--ready {
  animation: mm-node-enter 0.32s cubic-bezier(0.22, 1, 0.36, 1) forwards;
}

@keyframes mm-node-enter {
  from { opacity: 0; transform: scale(0.96); }
  to   { opacity: 1; transform: scale(1); }
}

/* 重排平滑：V2 求解器改位时节点滑动到新位置，不瞬移。
   dragging 时禁过渡（Plan C 启用拖拽后避免拖拽跟手延迟）。 */
.mm-canvas .react-flow__node {
  transition: transform 0.28s cubic-bezier(0.22, 1, 0.36, 1), opacity 0.25s ease;
}
.mm-canvas .react-flow__node.dragging,
.mm-canvas--no-anim .react-flow__node {
  transition: none;
}

/* 卡片入场动画 */
@keyframes mm-card-enter {
  from { opacity: 0; transform: scale(0.92) translateY(8px); }
  to   { opacity: 1; transform: scale(1)    translateY(0); }
}
.mm-canvas .react-flow__node[data-enter="true"] {
  animation: mm-card-enter 0.32s cubic-bezier(0.22, 1, 0.36, 1) both;
  /* 退场后清除 data-enter，让后续位置平滑过渡生效 */
}
/* 退场：scale down + fade */
@keyframes mm-card-exit {
  from { opacity: 1; transform: scale(1); }
  to   { opacity: 0; transform: scale(0.88); }
}
.mm-canvas .react-flow__node[data-exit="true"] {
  animation: mm-card-exit 0.28s ease forwards;
  pointer-events: none;
}

/* ===== 工作流地图模块卡（P1）===== */
.map-module {
  position: relative;
  background: var(--ds-bg);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-xl);
  padding: 16px 18px;
  width: 300px;
  cursor: pointer;
  transition: width 0.5s cubic-bezier(0.22, 0.61, 0.36, 1), box-shadow 0.3s;
}

.map-module--open {
  width: 580px;
  cursor: default;
  border-color: var(--ds-border-strong);
  box-shadow: var(--ds-shadow-deep);
}

/* placement cockpit 展开走 960px（hifi 设计宽），参照 .mm-root--open 先例；
   ModuleChrome 已在同一元素透传 data-module，用同元素属性选择器覆写，
   不改全局 .map-module--open(580px)，只对 placement 模块卡生效 */
.map-module--open[data-module="placement"] {
  width: 960px;
}

.map-module--embedded-detail {
  width: max-content;
  padding: 10px;
  border-color: var(--ds-border-strong);
  box-shadow: var(--ds-shadow-deep);
  cursor: default;
}

.map-module-detail {
  animation: mapDetailIn 0.4s 0.15s cubic-bezier(0.22, 0.61, 0.36, 1) both;
}

.map-module-detail--embedded {
  display: flex;
  flex-direction: column;
  gap: 10px;
}

.map-module--embedded-detail .map-detail-preactions {
  margin: 0;
  justify-content: flex-end;
}

.map-module--embedded-detail article {
  border: 0;
  box-shadow: none;
  border-radius: 12px;
}

.map-module--embedded-detail .map-module-collapse {
  top: -13px;
  right: -11px;
  z-index: 2;
  background: var(--ds-bg);
  border-color: var(--ds-border-strong);
  box-shadow: 0 10px 20px -16px rgba(24, 24, 27, 0.55);
}

@keyframes mapDetailIn {
  from {
    opacity: 0;
    transform: translateY(10px);
  }
  to {
    opacity: 1;
    transform: none;
  }
}

.map-module--dim {
  background: var(--ds-bg-alt);
  border-style: dashed;
}

.map-module-no {
  font-family: var(--ds-font-mono);
  font-size: 13px;
  color: var(--ds-text-subtle);
  letter-spacing: 0.12em;
}

.map-module-name {
  font-size: 22px;
  font-weight: 700;
  margin: 6px 0 4px;
}

.map-module-desc {
  font-size: 15px;
  color: var(--ds-text-muted);
  line-height: 1.55;
}

.map-module-stat {
  font-family: var(--ds-font-mono);
  font-size: 15px;
  color: var(--ds-text-muted);
  margin-top: 12px;
}

.map-module-stat b {
  color: var(--ds-text);
  font-weight: 600;
}

.map-module-pills {
  display: flex;
  gap: 8px;
  margin-top: 12px;
  flex-wrap: wrap;
}

.map-pill {
  font-size: 14px;
  font-weight: 600;
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-pill);
  padding: 6px 16px;
  background: var(--ds-bg);
}

.map-pill--ink {
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
  border-color: var(--ds-text);
}

.map-status-dot {
  width: 7px;
  height: 7px;
  border-radius: 50%;
  display: inline-block;
  vertical-align: 1px;
}

.map-status-dot--success {
  background: var(--ds-success);
}

.map-status-dot--warning {
  background: var(--ds-warning);
}

.map-module-collapse {
  position: absolute;
  top: 14px;
  right: 16px;
  font-size: 11px;
  color: var(--ds-text-muted);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-pill);
  padding: 3px 11px;
  background: var(--ds-bg);
  cursor: pointer;
}

.map-module--open .map-module-no {
  font-size: 9.5px;
}

.map-module--open .map-module-name {
  font-size: 15px;
}

/* ===== 创作岛首页大卡（bookmark-home Task 3：三列平权 + 发丝线网格 + 列头横带）===== */
.mm-root--compact {
  width: 740px;
  position: relative;
}
.mm-root--open {
  position: relative;
  width: 960px;
}
.mm-root--compact .mm-root-title {
  font-size: 22px;
  font-weight: 800;
  margin-top: 6px;
}
.mm-root--compact .mm-root-sub {
  font-size: 13px;
  margin: 4px 0 14px;
}
.mm-bigcols {
  display: grid;
  grid-template-columns: 1fr 1fr 1fr;
  gap: 14px;
  margin-top: 18px;
}
.mm-bigcol {
  display: flex;
  flex-direction: column;
  min-width: 0;
  padding: 16px;
  background: var(--ds-bg-alt);
  border: 1px solid transparent;
  border-radius: var(--ds-radius-lg);
}
.mm-bigcol-head {
  display: flex;
  align-items: center;
  gap: 9px;
  width: 100%;
  padding: 0;
  background: none;
  border: none;
  font-size: 14px;
  font-weight: 700;
  color: var(--ds-text);
  text-align: left;
  cursor: pointer;
}
.mm-bigcol-head--static {
  cursor: default;
}
.mm-bigcol-chip {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 30px;
  height: 30px;
  flex: none;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-surface);
  color: var(--ds-text);
}
.mm-bigcol-chip svg {
  width: 16px;
  height: 16px;
}
.mm-bigcol-status {
  margin-left: auto;
  font-size: 11px;
  font-weight: 500;
  color: var(--ds-text-subtle);
  white-space: nowrap;
}
.mm-bigcol-num {
  font-family: var(--ds-font-mono);
  color: var(--ds-text-muted);
}
.mm-bigcol-body {
  flex: 1;
  display: flex;
  flex-direction: column;
  gap: 3px;
  margin-top: 12px;
}
.mm-tplrow {
  display: block;
  padding: 10px;
  border: none;
  border-radius: var(--ds-radius-sm);
  background: none;
  text-align: left;
  cursor: pointer;
  transition: background 0.15s;
}
.mm-tplrow:hover {
  background: var(--ds-surface);
}
.mm-tplrow-t {
  display: block;
  font-size: 13px;
  font-weight: 600;
  color: var(--ds-text);
}
.mm-tplrow-d {
  display: block;
  font-size: 11px;
  color: var(--ds-text-muted);
  margin-top: 2px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.mm-bigcol-more {
  margin-top: 1px;
  padding: 9px 10px;
  border: none;
  border-radius: var(--ds-radius-sm);
  background: none;
  font-size: 12px;
  color: var(--ds-text-muted);
  text-align: left;
  cursor: pointer;
  transition: color 0.15s, background 0.15s;
}
.mm-bigcol-more:hover {
  color: var(--ds-text);
  background: var(--ds-surface);
}
.mm-bigcol-more .mm-bigcol-num {
  font-weight: 600;
}
.mm-bigcol-desc {
  font-size: 12px;
  color: var(--ds-text-muted);
  line-height: 1.55;
  margin-bottom: 12px;
}
.mm-paste {
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
  padding: 11px 12px;
  min-height: 42px;
  font-size: 12px;
  color: var(--ds-text);
  background: var(--ds-surface);
  margin-bottom: 8px;
}
.mm-paste::placeholder {
  color: var(--ds-text-subtle);
}
.mm-paste-go {
  width: 100%;
  padding: 12px;
  border: none;
  border-radius: var(--ds-radius-sm);
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
  font-size: 13px;
  font-weight: 700;
  text-align: center;
  cursor: pointer;
  transition: opacity 0.15s;
}
.mm-paste-go:hover {
  opacity: 0.88;
}
.mm-paste-go:disabled {
  opacity: 0.4;
  cursor: default;
}
.mm-root-foot--compact {
  margin-top: 14px;
  justify-content: space-between;
  align-items: center;
}
.mcc-hint {
  font-size: 11px;
  color: var(--ds-text-subtle);
}

.map-sec-title {
  font-size: 11px;
  font-weight: 700;
  color: var(--ds-text-muted);
  letter-spacing: 0.04em;
  margin: 12px 0 6px;
}

.map-thumb-row {
  display: flex;
  gap: 6px;
}

.map-thumb {
  width: 44px;
  height: 58px;
  border-radius: var(--ds-radius-sm);
  border: 1px solid var(--ds-border);
  background: linear-gradient(135deg, var(--ds-bg-alt), var(--ds-bg-deep)) center/cover;
}

.map-thumb--more {
  display: flex;
  align-items: center;
  justify-content: center;
  font-family: var(--ds-font-mono);
  font-size: 9px;
  color: var(--ds-text-subtle);
}

.map-doc-row {
  display: flex;
  gap: 8px;
  align-items: center;
  font-size: 11px;
  padding: 7px 0;
  border-top: 1px solid var(--ds-border);
  color: var(--ds-text-muted);
}

.map-doc-ext {
  font-family: var(--ds-font-mono);
  font-size: 8.5px;
  font-weight: 700;
  border-radius: 5px;
  padding: 2px 5px;
  color: var(--ds-text-on-ink);
  background: var(--ds-text-subtle);
}

.map-doc-ext--pdf {
  background: var(--ds-danger);
}

.map-doc-ext--doc {
  background: var(--ds-accent-deep);
}

.map-doc-name {
  flex: 1;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.map-doc-size {
  font-family: var(--ds-font-mono);
  font-size: 9px;
  color: var(--ds-text-subtle);
}

.map-btn-row {
  display: flex;
  gap: 7px;
  margin-top: 12px;
}

.map-detail-preactions {
  margin-bottom: 12px;
}

.map-btn {
  font-size: 11px;
  font-weight: 600;
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-pill);
  padding: 6px 14px;
  background: var(--ds-bg);
  cursor: pointer;
}

.map-btn--ink {
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
  border-color: var(--ds-text);
}

.map-soon {
  font-family: var(--ds-font-mono);
  font-size: 9px;
  font-weight: 700;
  letter-spacing: 0.07em;
  color: var(--ds-text-muted);
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-pill);
  padding: 1px 7px;
  background: var(--ds-bg);
}

.map-pill--dashed,
.map-btn--dashed {
  border-style: dashed;
  color: var(--ds-text-muted);
}

.map-glob-opt {
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-md);
  padding: 12px 13px;
  margin-top: 9px;
  display: flex;
  align-items: center;
  gap: 10px;
  background: var(--ds-bg);
}

.map-glob-opt--off {
  background: var(--ds-bg-alt);
}

.map-glob-ic {
  font-size: 15px;
}

.map-glob-body {
  flex: 1;
}

.map-glob-t {
  font-size: 12px;
  font-weight: 700;
  display: flex;
  gap: 7px;
  align-items: center;
}

.map-glob-d {
  font-size: 10.5px;
  color: var(--ds-text-muted);
  line-height: 1.55;
  margin-top: 3px;
}

/* ===== multilingual professional workflow components ===== */
.mm-creation-mode {
  display: inline-grid;
  grid-template-columns: repeat(2, minmax(128px, 1fr));
  gap: 6px;
  padding: 4px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-md);
  background: var(--ds-bg-alt);
}

.mm-mode-option,
.mm-script-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  min-height: 30px;
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-sm);
  padding: 6px 10px;
  background: var(--ds-bg);
  color: var(--ds-text);
  font-size: 12px;
  font-weight: 700;
  line-height: 1.2;
  cursor: pointer;
}

.mm-mode-option--active,
.mm-script-btn--primary {
  border-color: var(--ds-text);
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
}

.mm-script-btn--danger {
  border-color: color-mix(in srgb, #b42318 46%, var(--ds-border));
  color: #b42318;
}

.mm-mode-option:disabled,
.mm-script-btn:disabled {
  cursor: not-allowed;
  opacity: 0.52;
}

.mm-script-node,
.mm-lang-lane,
.mm-version-drawer,
.mm-clip-draft {
  width: min(680px, 100%);
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-md);
  padding: var(--ds-space-4);
  background: var(--ds-bg);
  color: var(--ds-text);
  box-shadow: var(--ds-shadow-card);
}

.mm-script-head,
.mm-lang-lane-head,
.mm-version-head,
.mm-clip-draft-head,
.mm-clip-draft-footer {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: var(--ds-space-3);
}

.mm-script-kicker,
.mm-lang-lane-kicker,
.mm-script-updated,
.mm-clip-draft-state,
.mm-version-entry-main span {
  color: var(--ds-text-muted);
  font-size: 11px;
  font-weight: 700;
}

.mm-script-title,
.mm-lang-lane-title,
.mm-clip-draft-title,
.mm-version-head h3 {
  display: flex;
  align-items: center;
  gap: 7px;
  margin: 0;
  font-size: 15px;
  font-weight: 800;
}

.mm-script-reason {
  margin: 12px 0 0;
  border: 1px solid color-mix(in srgb, #b42318 24%, var(--ds-border));
  border-radius: var(--ds-radius-sm);
  padding: 8px 10px;
  background: color-mix(in srgb, #fff1f0 70%, var(--ds-bg));
  color: #7a271a;
  font-size: 12px;
  line-height: 1.5;
}

.mm-script-grid,
.mm-script-diff-cols {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
  gap: var(--ds-space-3);
  margin-top: var(--ds-space-3);
}

.mm-script-field {
  display: grid;
  gap: 6px;
  color: var(--ds-text-muted);
  font-size: 12px;
  font-weight: 700;
}

.mm-script-field textarea {
  min-height: 158px;
  resize: vertical;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
  padding: 10px;
  background: var(--ds-bg);
  color: var(--ds-text);
  font-size: 12px;
  line-height: 1.65;
}

.mm-script-field--readonly textarea {
  background: var(--ds-bg-alt);
}

.mm-script-field--instruction {
  margin-top: var(--ds-space-3);
}

.mm-script-field--instruction textarea {
  min-height: 58px;
}

.mm-script-actions,
.mm-script-primary-actions,
.mm-script-secondary-actions,
.mm-lang-lane-actions,
.mm-script-diff-actions,
.mm-clip-segment-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}

.mm-script-actions,
.mm-script-failure-actions,
.mm-lang-lane-actions,
.mm-script-diff-actions {
  margin-top: var(--ds-space-3);
}

.mm-script-diff {
  margin-top: var(--ds-space-3);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
  padding: var(--ds-space-3);
  background: var(--ds-bg-alt);
}

.mm-script-diff-label {
  margin-bottom: 6px;
  color: var(--ds-text-muted);
  font-size: 11px;
  font-weight: 800;
}

.mm-script-diff-segment,
.mm-script-suggestion-row {
  width: 100%;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
  padding: 9px;
  background: var(--ds-bg);
  color: var(--ds-text);
  font-size: 12px;
  line-height: 1.55;
  text-align: left;
}

.mm-script-diff-segment--active {
  border-color: var(--ds-text);
}

.mm-script-suggestion-row p,
.mm-script-source-ref p,
.mm-clip-segment-main p {
  margin: 0;
  line-height: 1.55;
}

.mm-script-source-ref {
  margin-top: var(--ds-space-3);
  border-left: 3px solid var(--ds-border-strong);
  padding-left: 10px;
  color: var(--ds-text-muted);
  font-size: 12px;
}

.mm-lang-lane-state,
.mm-lang-lane-badges span,
.mm-lang-lane-single {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-pill);
  padding: 4px 8px;
  background: var(--ds-bg-alt);
  color: var(--ds-text-muted);
  font-size: 11px;
  font-weight: 800;
}

.mm-lang-lane-meta {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: var(--ds-space-3);
  margin: var(--ds-space-3) 0 0;
}

.mm-lang-lane-meta div {
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
  padding: 9px;
  background: var(--ds-bg-alt);
}

.mm-lang-lane-meta dt {
  color: var(--ds-text-muted);
  font-size: 11px;
  font-weight: 800;
}

.mm-lang-lane-meta dd {
  margin: 4px 0 0;
  font-size: 13px;
  font-weight: 800;
}

.mm-lang-lane-badges {
  display: flex;
  flex-wrap: wrap;
  gap: 7px;
  margin-top: var(--ds-space-3);
}

.mm-version-close {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 28px;
  height: 28px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg);
  color: var(--ds-text);
}

.mm-version-list,
.mm-clip-segments {
  display: grid;
  gap: 9px;
  margin: var(--ds-space-3) 0 0;
  padding: 0;
}

.mm-version-entry,
.mm-clip-segment {
  display: grid;
  gap: 8px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
  padding: 10px;
  background: var(--ds-bg-alt);
}

.mm-version-entry-main {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px;
}

.mm-version-entry-main h4 {
  margin: 0;
  font-size: 13px;
  font-weight: 800;
}

.mm-version-current {
  display: inline-flex;
  align-items: center;
  gap: 4px;
}

.mm-clip-segment {
  grid-template-columns: minmax(0, 1fr) auto;
  list-style: none;
}

.mm-clip-segment-index,
.mm-clip-segment-duration {
  color: var(--ds-text-muted);
  font-size: 11px;
  font-weight: 800;
}

.mm-clip-segment-main {
  display: grid;
  gap: 4px;
  min-width: 0;
}

.mm-clip-segment-main strong {
  font-size: 13px;
}

.mm-clip-segment-actions {
  grid-column: 1 / -1;
}

.mm-clip-trim-label {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  color: var(--ds-text-muted);
  font-size: 11px;
  font-weight: 800;
}

.mm-clip-trim-label input {
  width: 72px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
  padding: 6px 7px;
  background: var(--ds-bg);
  color: var(--ds-text);
}

.mm-clip-draft-footer {
  align-items: center;
  margin-top: var(--ds-space-3);
  color: var(--ds-text-muted);
  font-size: 12px;
  font-weight: 800;
}
/**
 * GEO 卡 canvas 样式
 * 覆盖 GeoTemplateNode / ChildArticleNode / ArticleExpandDrawer 所用 CSS 类。
 * Token 全用 --ds-*（global-design.css 权威）；console scope no-azure：
 * CTA ink-on-ink（--ds-text 黑底 + --ds-text-on-ink 白字），无 azure 大面积色块。
 */

/* ===== ribbon 标签胶囊 ===== */
.geo-ribbon {
  display: inline-block;
  padding: 2px 8px;
  border-radius: var(--ds-radius-pill);
  font-size: 10px;
  font-weight: 700;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  line-height: 1.6;
}

/* ink 实心（主 badge） — ink-on-ink: 黑底白字 */
.geo-ribbon--ink {
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
}

/* outline 线框（次级）*/
.geo-ribbon--outline {
  background: transparent;
  border: 1px solid var(--ds-border-strong);
  color: var(--ds-text-muted);
}

/* warning 态（生成中）*/
.geo-ribbon--warning {
  background: rgba(245, 158, 11, 0.12);
  color: var(--ds-warning);
}

/* success 态（已完成）*/
.geo-ribbon--success {
  background: rgba(34, 197, 94, 0.12);
  color: var(--ds-success);
}

/* ===== ReactFlow Handle — 父子连线圆点 ===== */
.geo-handle {
  width: 8px;
  height: 8px;
  background: var(--ds-text);
  border: 2px solid var(--ds-bg);
  border-radius: 50%;
  box-shadow: 0 0 0 1px var(--ds-border-strong);
}

/* ===== GeoTemplateNode 容器 ===== */
.geo-tpl-node {
  font-family: var(--ds-font);
}

/* ===== 动画 ===== */
/* generating 态进度点脉冲 */
@keyframes geo-pulse {
  0%, 100% { opacity: 1; transform: scale(1); }
  50%       { opacity: 0.4; transform: scale(0.8); }
}

/* streaming 光标闪烁 */
@keyframes geo-blink {
  0%, 100% { opacity: 1; }
  50%       { opacity: 0; }
}

/* ===== ArticleExpandDrawer 图片容器 ===== */
/* hover 显示重生按钮 */
.geo-img-wrap .geo-img-regen {
  opacity: 0;
  transition: opacity 0.15s;
}
.geo-img-wrap:hover .geo-img-regen {
  opacity: 1;
}

/* ===== ArticleExpandDrawer 段落容器 ===== */
/* hover 显示段落操作按钮 */
.geo-para-wrap .geo-para-actions {
  opacity: 0;
  transition: opacity 0.15s;
}
.geo-para-wrap:hover .geo-para-actions {
  opacity: 1;
}

/* ===== ds-shadow-card (mindmap.css 引用但未在 global-design 定义的补丁) ===== */
:root {
  --ds-shadow-card: 0 1px 4px rgba(24, 24, 27, 0.06), 0 4px 12px rgba(24, 24, 27, 0.04);
  /* 焦点大态统一固定高度：加载/流式/完成三子态同高，正文区内部滚动，镜头取景一次不重取景 */
  --geo-focus-card-h: 600px;
}

/* ===== 展开式文章卡 ChildArticleNode（流式 + 原地编辑） ===== */
.geo-acard { background: var(--ds-bg); border: 1px solid var(--ds-border); border-radius: var(--ds-radius-lg);
  box-shadow: 0 1px 0 rgba(24,24,27,0.02); display: flex; flex-direction: column; overflow: hidden;
  height: var(--geo-focus-card-h); }
.geo-acard[data-state="draft"], .geo-acard[data-state="published"] { border-color: var(--ds-border-strong); }
.geo-acard-top { display: flex; align-items: center; gap: 8px; padding: 14px 18px 0; flex-wrap: wrap; }
.geo-acard-meta { font-size: 11px; color: var(--ds-text-muted); }
.geo-chip { display: inline-block; padding: 2px 8px; border-radius: var(--ds-radius-pill);
  font-size: 10px; font-weight: 700; letter-spacing: .04em; text-transform: uppercase; }
.geo-chip-platform { background: var(--ds-accent-bg); color: var(--ds-accent-text); }
.geo-chip-streaming { background: rgba(245,158,11,0.12); color: var(--ds-warning); }
.geo-chip-draft, .geo-chip-published { background: rgba(34,197,94,0.12); color: var(--ds-success); }
/* 封面横幅：移进滚动区内、随正文一起滚动、缩小为紧凑横幅（R1/R4） */
.geo-cover { position: relative; margin: 0 0 14px; height: 112px; border-radius: var(--ds-radius-md);
  background-size: cover; background-position: center; }
.geo-cover-empty { display: flex; align-items: center; justify-content: center;
  background: linear-gradient(135deg, var(--ds-bg-alt), var(--ds-bg-deep));
  color: var(--ds-text-subtle); font-size: 12px; font-weight: 600; }
.geo-cover-progress { display: flex; align-items: center; gap: 14px; padding: 18px;
  background: linear-gradient(135deg, #f7f7f6 0%, #ededeb 100%);
  border: 1px solid rgba(24, 24, 27, 0.10); }
.geo-cover-progress-ring { width: 46px; height: 46px; border-radius: 50%;
  display: flex; align-items: center; justify-content: center; flex: 0 0 auto;
  background: #fff; border: 1px solid rgba(24, 24, 27, 0.12); }
.geo-cover-progress-ring > span { width: 24px; height: 24px; border-radius: 50%;
  border: 2px solid rgba(24, 24, 27, 0.14); border-top-color: var(--ds-text);
  animation: geo-cover-spin 1s linear infinite; }
.geo-cover-progress--failed .geo-cover-progress-ring > span { width: 18px; height: 18px;
  border: 2px solid var(--ds-text); border-radius: 3px; animation: none; transform: rotate(45deg); }
.geo-cover-progress-copy { min-width: 0; }
.geo-cover-progress-title { font-size: 14px; font-weight: 800; color: var(--ds-text); line-height: 1.35; }
.geo-cover-progress-sub { margin-top: 3px; font-size: 12px; color: var(--ds-text-muted); line-height: 1.45; }
.geo-cover-progress-phase { margin-top: 7px; font-size: 11px; font-weight: 700; color: var(--ds-text); }
.geo-cover-progress-eta { display: inline-flex; align-items: center; margin-top: 8px; padding: 3px 8px;
  border-radius: var(--ds-radius-pill); background: rgba(24, 24, 27, 0.06);
  color: var(--ds-text); font-size: 11px; font-weight: 700; }
.geo-cover-retry { margin-left: 8px; padding: 4px 9px; border-radius: 6px; border: none;
  background: var(--ds-text); color: var(--ds-text-on-ink); font-size: 11px; font-weight: 700; cursor: pointer; }
.geo-cover-retry:disabled { opacity: .5; cursor: not-allowed; }
@keyframes geo-cover-spin { to { transform: rotate(360deg); } }
/* 封面按原图比例完整显示，不裁切（#3） */
.geo-cover-img { display: block; width: 100%; height: auto; border-radius: var(--ds-radius-md); margin: 0 0 14px; }
.geo-acard-body { padding: 18px 22px 8px; flex: 1 1 auto; min-height: 0; overflow-y: auto; }
.geo-acard-body::-webkit-scrollbar { width: 8px; }
.geo-acard-body::-webkit-scrollbar-thumb { background: var(--ds-border-strong); border-radius: 8px; }
.geo-art-title { font-size: 22px; font-weight: 700; line-height: 1.4; margin: 0 0 18px; outline: none; }
.geo-art-h { font-size: 16px; font-weight: 700; margin: 18px 0 8px; outline: none; }
.geo-art-p { font-size: 14px; line-height: 1.8; color: var(--ds-text); margin: 0 0 6px; outline: none; }
.geo-art-title[contenteditable="true"]:focus, .geo-art-h[contenteditable="true"]:focus,
.geo-art-p[contenteditable="true"]:focus { box-shadow: var(--ds-focus-ring); border-radius: 6px; }
.geo-para { position: relative; border-radius: var(--ds-radius-sm); margin: 0 -10px 14px; padding: 6px 10px; }
.geo-para:hover { background: var(--ds-bg-alt); }
.geo-para-actions { display: flex; gap: 6px; margin-top: 6px; opacity: 0; transition: opacity .12s; }
.geo-para:hover .geo-para-actions { opacity: 1; }
.geo-pbtn { padding: 3px 9px; font-size: 11px; font-weight: 600; border-radius: 4px;
  border: 1px solid var(--ds-border); background: var(--ds-bg-alt); color: var(--ds-text); cursor: pointer; }
.geo-pbtn:disabled { opacity: .4; cursor: not-allowed; }
.geo-inline-img { position: relative; margin: 8px 0; height: 150px; border-radius: var(--ds-radius-sm);
  background-size: cover; background-position: center; }
.geo-img-regen { position: absolute; bottom: 8px; right: 8px; padding: 4px 10px; font-size: 11px;
  font-weight: 600; border-radius: 6px; border: none; background: var(--ds-text); color: var(--ds-text-on-ink);
  cursor: pointer; opacity: 0; transition: opacity .15s; }
.geo-img-wrap:hover .geo-img-regen { opacity: 1; }
.geo-img-regen:disabled { opacity: .6; cursor: not-allowed; }
.geo-acard-foot, .geo-stream-foot { display: flex; align-items: center; gap: 10px; padding: 12px 18px;
  border-top: 1px solid var(--ds-border); }
.geo-stream-foot--image { gap: 12px; }
.geo-foot-status { font-size: 11px; color: var(--ds-text-muted); }
.geo-pub-link { font-size: 11px; color: var(--ds-accent-text); text-decoration: none; }
.geo-fbtn { padding: 6px 14px; font-size: 12px; font-weight: 600; border-radius: 6px; cursor: pointer; }
.geo-fbtn:disabled { opacity: .5; cursor: not-allowed; }
.geo-fbtn-ghost { border: 1px solid var(--ds-border); background: var(--ds-bg-alt); color: var(--ds-text); }
.geo-fbtn-primary { border: none; background: var(--ds-text); color: var(--ds-text-on-ink); }
.geo-pub-job-wrap { flex: 1 1 auto; min-width: 0; }
.geo-pub-timeline { display: flex; align-items: center; gap: 12px; min-width: 0; flex: 1; }
.geo-pub-step { display: flex; align-items: flex-start; gap: 7px; min-width: 132px; color: var(--ds-text-muted); }
.geo-pub-dot { width: 7px; height: 7px; border-radius: 50%; margin-top: 5px; background: var(--ds-text-subtle); flex: 0 0 auto; }
.geo-pub-step.is-done .geo-pub-dot { background: var(--ds-success); }
.geo-pub-step.is-bad .geo-pub-dot { background: var(--ds-danger); }
.geo-pub-step.is-pending .geo-pub-dot { background: var(--ds-warning); }
.geo-pub-step-title { font-size: 11px; font-weight: 800; color: var(--ds-text); line-height: 1.35; }
.geo-pub-step-sub { margin-top: 2px; font-size: 10.5px; line-height: 1.35; color: var(--ds-text-muted); max-width: 190px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.geo-progress { flex: 1; height: 4px; border-radius: var(--ds-radius-pill); background: var(--ds-bg-alt); overflow: hidden; }
.geo-progress > i { display: block; height: 100%; width: 42%; background: var(--ds-text);
  border-radius: inherit; animation: geo-grow 2.4s ease-in-out infinite alternate; }
.geo-stream-foot--image .geo-progress { flex: 0 0 86px; background: rgba(24, 24, 27, 0.08); }
.geo-stream-foot--image .geo-progress > i { width: 72%; animation-duration: 1.8s; }
.geo-image-jump { margin-left: auto; padding: 6px 10px; border-radius: 6px;
  border: 1px solid rgba(24, 24, 27, 0.14); background: var(--ds-text); color: var(--ds-text-on-ink);
  font-size: 11px; font-weight: 700; cursor: pointer; white-space: nowrap; }
.geo-image-jump:hover { background: #2a2a2d; }
@keyframes geo-grow { from { width: 30%; } to { width: 72%; } }
.geo-cursor { display: inline-block; width: 2px; height: 1em; background: var(--ds-text);
  vertical-align: -2px; margin-left: 2px; animation: geo-blink .9s infinite step-end; }

/* ===== 正文 markdown 渲染（ArticleMarkdown · GFM 含表格） ===== */
.geo-md { color: var(--ds-text); outline: none; }
.geo-md--compact { font-size: 12px; line-height: 1.6; }
.geo-md--live { font-size: 14px; line-height: 1.8; }
.geo-md--detail { font-size: 16px; line-height: 1.95; }
.geo-md > *:first-child { margin-top: 0; }
.geo-md > *:last-child { margin-bottom: 0; }
.geo-md p { margin: 0 0 .5em; }
.geo-md strong { font-weight: 700; color: var(--ds-text); }
.geo-md em { font-style: italic; }
.geo-md del { color: var(--ds-text-subtle); }
.geo-md a { color: var(--ds-accent-text); text-decoration: none; }
.geo-md a:hover { text-decoration: underline; }
.geo-md ul, .geo-md ol { margin: .3em 0 .6em; padding-left: 1.4em; }
.geo-md li { margin: .2em 0; }
.geo-md li > p { margin: 0; }
.geo-md blockquote { margin: .5em 0; padding: 4px 12px; border-left: 3px solid var(--ds-border-strong);
  color: var(--ds-text-muted); }
.geo-md code { background: var(--ds-bg-alt); border-radius: 4px; padding: 1px 5px; font-size: .9em;
  font-family: ui-monospace, SFMono-Regular, Menlo, monospace; }
.geo-md hr { border: none; border-top: 1px solid var(--ds-border); margin: 1em 0; }
/* 表格：窄卡内横向可滚 */
.geo-md table { width: 100%; border-collapse: collapse; margin: .6em 0; font-size: .92em; display: block; overflow-x: auto; }
.geo-md th, .geo-md td { border: 1px solid var(--ds-border); padding: 6px 10px; text-align: left;
  vertical-align: top; }
.geo-md th { background: var(--ds-bg-alt); font-weight: 700; white-space: nowrap; }

/* ===== 紧凑预览卡 ArticlePreviewCard（画布常态） ===== */
.geo-pcard { position: relative; box-sizing: border-box; width: 280px; height: 420px; overflow: hidden;
  display: flex; flex-direction: column; background: var(--ds-bg); border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-lg); padding: 16px; cursor: pointer;
  box-shadow: var(--ds-shadow-card); transition: box-shadow .15s, transform .15s; }
.geo-pcard:hover { box-shadow: 0 6px 22px -8px rgba(24,24,27,.22); transform: translateY(-1px); }
.geo-pcard[data-state="published"] { border-color: var(--ds-border-strong); }
/* 缩放切换：小态右上角「放大」按钮（与大卡头部的「收起」成对） */
.geo-pcard-scale { position: absolute; top: 12px; right: 12px; width: 26px; height: 26px;
  display: flex; align-items: center; justify-content: center; border-radius: var(--ds-radius-sm);
  border: 1px solid var(--ds-border); background: var(--ds-bg); color: var(--ds-text-muted);
  cursor: pointer; transition: background .15s, color .15s, border-color .15s; }
.geo-pcard-scale:hover { background: var(--ds-bg-alt); color: var(--ds-text); border-color: var(--ds-border-strong); }
.geo-pcard-title { font-size: 15px; font-weight: 700; line-height: 1.45; color: var(--ds-text);
  margin-bottom: 10px; padding-right: 30px; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
/* 小态＝大卡压缩（竖版 280×420）：封面讲解图 + 5 行正文摘要撑满中段 + meta 贴底（变体 B 紧凑可读卡） */
.geo-pcard-cover { flex-shrink: 0; height: 158px; border-radius: var(--ds-radius-sm); background-size: cover;
  background-position: center; margin-bottom: 10px; }
.geo-pcard-cover-empty { background: linear-gradient(135deg, var(--ds-bg-alt), var(--ds-bg-deep)); }
.geo-pcard-excerpt { flex: 1; min-height: 0; font-size: 12px; line-height: 1.6; color: var(--ds-text-muted); margin-bottom: 12px;
  display: -webkit-box; -webkit-line-clamp: 5; -webkit-box-orient: vertical; overflow: hidden; }
.geo-pcard-meta { flex-shrink: 0; margin-top: auto; display: flex; align-items: center; gap: 8px; font-size: 11.5px; color: var(--ds-text-muted); }
.geo-pcard-stat { color: var(--ds-text-muted); }
.geo-pcard-meta .geo-chip:last-child { margin-left: auto; }

/* ===== 紧凑卡「就地流式」态子类（仅 streaming 时启用，固定 280×420 外框内部滚动） =====
   全部复用 .geo-cover-progress / .geo-progress / .geo-chip-streaming 的字面量与
   keyframes（geo-cover-spin / geo-grow / geo-blink）+ .geo-cursor，是「大卡体验缩小版」，非新配色。 */
/* 封面区头图进度（mini）：替代静态封面图，紧凑横条 */
.geo-pcard-cover.is-progress { flex-shrink: 0; height: 56px; display: flex; align-items: center; gap: 11px;
  padding: 0 13px; background: linear-gradient(135deg, #f7f7f6 0%, #ededeb 100%);
  border: 1px solid rgba(24, 24, 27, 0.10); }
.geo-pcard-ring { width: 30px; height: 30px; border-radius: 50%; flex: 0 0 auto; background: var(--ds-bg);
  border: 1px solid rgba(24, 24, 27, 0.12); display: flex; align-items: center; justify-content: center; }
.geo-pcard-ring > span { width: 16px; height: 16px; border-radius: 50%;
  border: 2px solid rgba(24, 24, 27, 0.14); border-top-color: var(--ds-text);
  animation: geo-cover-spin 1s linear infinite; }
.geo-pcard-prog-copy { min-width: 0; }
.geo-pcard-prog-title { font-size: 12px; font-weight: 800; color: var(--ds-text); line-height: 1.3; }
.geo-pcard-prog-eta { display: inline-flex; margin-top: 3px; padding: 2px 7px; border-radius: var(--ds-radius-pill);
  background: rgba(24, 24, 27, 0.06); color: var(--ds-text); font-size: 10px; font-weight: 700; }
/* 正文流式滚动窗口：占满中段、内部滚动（bodyRef 挂这里、自动跟随顶到底），不撑高外框 */
.geo-pcard-stream { position: relative; flex: 1; min-height: 0; overflow-y: auto; margin-bottom: 10px; }
.geo-pcard-stream::-webkit-scrollbar { width: 4px; }
.geo-pcard-stream::-webkit-scrollbar-thumb { background: var(--ds-border-strong); border-radius: 4px; }
.geo-pcard-stream::after { content: ''; position: sticky; top: 0; display: block; height: 14px; margin-bottom: -14px;
  background: linear-gradient(var(--ds-bg), rgba(255, 255, 255, 0)); pointer-events: none; }
.geo-pcard-stream-inner { font-size: 12px; line-height: 1.6; color: var(--ds-text-muted); }
.geo-pcard-stream-inner > * { margin: 0 0 .4em; }
.geo-pcard-stream-inner > *:last-child { margin-bottom: 0; }
/* mini 进度脚（= .geo-progress 缩小 4px→3px） */
.geo-pcard-streamfoot { flex-shrink: 0; display: flex; align-items: center; gap: 8px; margin-bottom: 8px; }
.geo-pcard-bar { flex: 1; height: 3px; border-radius: var(--ds-radius-pill); background: var(--ds-bg-alt); overflow: hidden; }
.geo-pcard-bar > i { display: block; height: 100%; width: 42%; background: var(--ds-text);
  border-radius: inherit; animation: geo-grow 2.4s ease-in-out infinite alternate; }
.geo-pcard-foot-status { font-size: 10.5px; color: var(--ds-text-muted); white-space: nowrap; }

/* ===== 张开详情卡 ArticleDetailCard（可读性重设计） ===== */
.geo-dcard { background: var(--ds-bg); border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-lg); box-shadow: var(--ds-shadow-deep);
  display: flex; flex-direction: column; overflow: hidden; height: var(--geo-focus-card-h); }
.geo-dcard-head { display: flex; align-items: center; gap: 10px; padding: 16px 28px;
  border-bottom: 1px solid var(--ds-border); }
.geo-dsource-avatar { width: 30px; height: 30px; border-radius: 50%;
  background: linear-gradient(135deg, var(--ds-bg-deep), var(--ds-bg-alt)); flex-shrink: 0; }
.geo-dsource-name { font-size: 13px; font-weight: 600; color: var(--ds-text); }
.geo-dsource-sub { font-size: 11px; color: var(--ds-text-subtle); }
/* 缩放切换：大卡头部「收起」按钮（与小态右上角「放大」成对） */
.geo-dclose { margin-left: auto; width: 28px; height: 28px; border-radius: var(--ds-radius-sm);
  display: flex; align-items: center; justify-content: center;
  background: var(--ds-bg-alt); color: var(--ds-text-muted); border: none; cursor: pointer; }
.geo-dclose:hover { background: var(--ds-bg-deep); color: var(--ds-text); }
.geo-dcard-body { padding: 26px 32px 8px; flex: 1 1 auto; min-height: 0; overflow-y: auto; }
.geo-dcard-body::-webkit-scrollbar { width: 8px; }
.geo-dcard-body::-webkit-scrollbar-thumb { background: var(--ds-border-strong); border-radius: 8px; }
.geo-dtitle { font-size: 25px; font-weight: 800; line-height: 1.45; letter-spacing: -.01em;
  margin: 0 0 14px; outline: none; }
.geo-dmeta { display: flex; align-items: center; gap: 8px; font-size: 12px;
  color: var(--ds-text-muted); margin-bottom: 22px; }
.geo-dh { font-size: 19px; font-weight: 700; line-height: 1.5; margin: 18px 0 4px; outline: none; }
.geo-dp { font-size: 16px; line-height: 1.95; color: var(--ds-text); margin: 0; outline: none; }
/* 正文读态（渲染 markdown，点进编辑）/ 编辑态（原始 markdown，保留换行） */
.geo-dp-read { cursor: text; }
.geo-dp-edit { font-size: 16px; line-height: 1.95; color: var(--ds-text); outline: none;
  white-space: pre-wrap; word-break: break-word; border-radius: 6px;
  box-shadow: var(--ds-focus-ring); padding: 2px 6px; }
.geo-dtitle[contenteditable="true"]:focus, .geo-dh[contenteditable="true"]:focus,
.geo-dp[contenteditable="true"]:focus { box-shadow: var(--ds-focus-ring); border-radius: 6px; }
.geo-dfig { position: relative; margin: 18px 0 26px; }
/* 配图/封面按原图比例完整显示，不裁切（#3） */
.geo-dfig-img { display: block; width: 100%; height: auto; border-radius: var(--ds-radius-md); }
/* 封面置于正文流首、随正文滚动（保留特性，不再固定矮横幅） */
.geo-dfig-cover { margin: 2px 0 22px; }
.geo-dcap { font-size: 11px; color: var(--ds-text-subtle); text-align: center; margin-top: 6px; }
.geo-dcard-foot { display: flex; align-items: center; gap: 10px; padding: 14px 28px;
  border-top: 1px solid var(--ds-border); }
.geo-dfoot-hint { font-size: 11px; color: var(--ds-text-subtle); }

/* ===== 据分改写 · 覆盖写入（ArticleDetailCard） ===== */
.geo-rewrite-badge {
  margin-left: auto;
  margin-right: 8px;
  font-family: var(--ds-font-mono);
  font-size: 10.5px;
  letter-spacing: 0.04em;
  padding: 3px 8px;
  border-radius: var(--ds-radius-pill);
  border: 1px solid var(--ds-border-strong);
  color: var(--ds-text-muted);
  background: var(--ds-bg-alt);
  display: none;
  flex-shrink: 0;
}
.geo-rewrite-badge.on {
  display: inline-block;
  color: var(--ds-text);
  border-color: var(--ds-text);
  background: var(--ds-bg);
}
.geo-rewrite-zone-new {
  position: relative;
  min-height: 88px;
  padding-bottom: 4px;
}
.geo-rewrite-zone-new-label {
  font-family: var(--ds-font-mono);
  font-size: 10.5px;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--ds-text-muted);
  margin-bottom: 8px;
}
.geo-rewrite-zone-new-phase {
  text-transform: none;
  letter-spacing: 0;
  color: var(--ds-text-subtle);
}
.geo-rewrite-draft-placeholder {
  font-size: 13px;
  color: var(--ds-text-muted);
  margin: 4px 0 10px;
}
.geo-rewrite-zone-new .geo-dtitle,
.geo-rewrite-zone-new .geo-dh { color: var(--ds-text); }
.geo-rewrite-zone-new .geo-dp-read { color: var(--ds-text); margin-bottom: 10px; }
.geo-rewrite-divider {
  display: flex;
  align-items: center;
  gap: 10px;
  margin: 16px 0 14px;
  font-family: var(--ds-font-mono);
  font-size: 11px;
  letter-spacing: 0.04em;
  color: var(--ds-text);
}
.geo-rewrite-divider::before,
.geo-rewrite-divider::after {
  content: "";
  flex: 1;
  height: 1px;
  background: var(--ds-border-strong);
}
.geo-rewrite-divider-pill {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  white-space: nowrap;
  border: 1px solid var(--ds-text);
  border-radius: var(--ds-radius-pill);
  padding: 3px 10px;
  background: var(--ds-bg);
  font-weight: 560;
}
.geo-rewrite-divider-dot {
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: var(--ds-text);
  animation: geo-rewrite-pulse 1.4s ease-out infinite;
}
@keyframes geo-rewrite-pulse {
  0% { opacity: 1; transform: scale(1); }
  70% { opacity: 0.35; transform: scale(1.35); }
  100% { opacity: 1; transform: scale(1); }
}
.geo-rewrite-zone-old {
  opacity: 0.42;
  filter: grayscale(0.15);
  pointer-events: none;
  user-select: none;
}
.geo-rewrite-zone-old-label {
  font-family: var(--ds-font-mono);
  font-size: 10.5px;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--ds-text-subtle);
  margin-bottom: 8px;
}
.geo-rewrite-old-title {
  font-size: 15px !important;
  font-weight: 620 !important;
  margin-bottom: 8px !important;
  color: var(--ds-text-muted);
}
.geo-rewrite-zone-old .geo-dh,
.geo-rewrite-zone-old .geo-dp-read {
  color: var(--ds-text-subtle);
}
.geo-rewrite-zone-old .geo-dp-read { margin-bottom: 8px; }
.geo-rewrite-preview .geo-dp-read { margin-bottom: 12px; }
.geo-rewrite-foot { gap: 10px; }
.geo-btn-follow {
  display: none;
  font-size: 12px;
  font-weight: 560;
  font-family: var(--ds-font);
  padding: 5px 10px;
  border-radius: var(--ds-radius-sm);
  border: 1px solid var(--ds-text);
  background: var(--ds-bg);
  color: var(--ds-text);
  cursor: pointer;
  white-space: nowrap;
  flex-shrink: 0;
}
.geo-btn-follow.on { display: inline-block; }
.geo-btn-follow:hover { background: var(--ds-bg-alt); }
/* 收拢预览：改写进行中 chip */
.geo-chip-rewrite {
  background: rgba(24, 24, 27, 0.08);
  color: var(--ds-text);
  border: 1px solid var(--ds-border-strong);
}

/* ===== ChildArticleNode 容器 ===== */
.geo-anode { position: relative; font-family: var(--ds-font); }
.geo-anode-loaded-external {
  border: 1px dashed var(--ds-text);
  border-radius: var(--ds-radius-md);
}
/* 展开时抬升堆叠（配合 MindmapCanvas 的 node zIndex 一起生效） */
.geo-anode-expanded { z-index: 50; }

/* ===== GEO 被引用文章卡（P2） ===== */
/* 固定 1080×680（= adapter NODE_TYPE_MAP 登记尺寸）：卡内三栏各自滚动，
   真实渲染尺寸 = 喂给 V2 求解器的 bootstrap 尺寸，避免变高卡压到邻卡（行间重叠）。 */
.geo-cited-card {
  width: 1080px;
  height: 680px;
  background: var(--ds-bg);
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-lg);
  box-shadow: var(--ds-shadow-deep);
  display: flex;
  flex-direction: column;
  overflow: hidden;
}

.geo-cited-card .cc-head {
  padding: 12px 20px 10px;
  border-bottom: 1px solid var(--ds-border);
  flex-shrink: 0;
  display: flex;
  align-items: center;
  gap: 8px;
}

/* 返回按钮：关大卡回画布（幽灵态，与 design no-azure 一致） */
.geo-cited-card .cc-back {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  padding: 5px 11px 5px 9px;
  border: 1px solid var(--ds-border-strong);
  background: var(--ds-bg-alt);
  color: var(--ds-text-muted);
  border-radius: var(--ds-radius-md);
  font-size: 12px;
  font-weight: 600;
  font-family: var(--ds-font);
  cursor: pointer;
  transition: background 0.12s, color 0.12s;
  flex-shrink: 0;
}

.geo-cited-card .cc-back:hover {
  background: var(--ds-bg-deep);
  color: var(--ds-text);
}

.geo-cited-card .cc-back svg {
  opacity: 0.7;
}

.geo-cited-card .cc-head-title {
  font-size: 13px;
  font-weight: 800;
  color: var(--ds-text);
  flex: 1;
}

.geo-cited-card .cc-head-badge {
  font-size: 10px;
  font-family: var(--ds-font-mono);
  color: var(--ds-text-subtle);
  background: var(--ds-bg-alt);
  padding: 2px 8px;
  border-radius: var(--ds-radius-pill);
  border: 1px solid var(--ds-border);
}

.geo-cited-card .cc-cta {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  padding: 6px 14px;
  background: var(--c-ink, var(--ds-text));
  color: var(--c-ink-on-ink, var(--ds-text-on-ink));
  border: none;
  border-radius: var(--ds-radius-md);
  font-size: 12px;
  font-weight: 700;
  font-family: var(--ds-font);
  cursor: pointer;
  letter-spacing: 0;
  transition: opacity 0.12s;
  flex-shrink: 0;
}

.geo-cited-card .cc-cta:hover {
  opacity: 0.84;
}

.geo-cited-card .cc-cta:disabled {
  opacity: 0.4;
  cursor: default;
}

.geo-cited-card .cc-cta svg {
  opacity: 0.85;
}

.geo-cited-card .cc-body {
  flex: 1;
  display: flex;
  min-height: 0;
  overflow: hidden;
}

/* 左：关键词栏 */
.geo-cited-card .kw-pane {
  width: 196px;
  flex-shrink: 0;
  border-right: 1px solid var(--ds-border);
  display: flex;
  flex-direction: column;
  overflow: hidden;
}

.geo-cited-card .kw-pane-head {
  padding: 10px 14px 8px;
  border-bottom: 1px solid var(--ds-border);
  flex-shrink: 0;
}

.geo-cited-card .kw-pane-label {
  font-size: 8.5px;
  font-weight: 700;
  letter-spacing: 0;
  text-transform: uppercase;
  color: var(--ds-text-subtle);
  display: flex;
  align-items: center;
  gap: 5px;
  margin-bottom: 3px;
}

.geo-cited-card .kw-pane-label::before {
  content: '';
  display: inline-block;
  width: 5px;
  height: 5px;
  border-radius: 50%;
  background: var(--ds-text);
  opacity: 0.4;
}

.geo-cited-card .ai-badge {
  display: inline-flex;
  align-items: center;
  padding: 1px 5px;
  border-radius: var(--ds-radius-pill);
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
  font-size: 7.5px;
  font-weight: 700;
  letter-spacing: 0;
  text-transform: uppercase;
  margin-left: 3px;
}

.geo-cited-card .kw-pane-sub {
  font-size: 10px;
  color: var(--ds-text-muted);
  line-height: 1.3;
}

.geo-cited-card .kw-list {
  flex: 1;
  overflow-y: auto;
  padding: 8px;
  display: flex;
  flex-direction: column;
  gap: 2px;
}

.geo-cited-card .kw-list::-webkit-scrollbar {
  width: 3px;
}

.geo-cited-card .kw-list::-webkit-scrollbar-thumb {
  background: var(--ds-bg-deep);
  border-radius: 2px;
}

.geo-cited-card .kw-item {
  display: flex;
  align-items: center;
  gap: 7px;
  padding: 7px 10px;
  border-radius: var(--ds-radius-sm);
  cursor: pointer;
  border: 1px solid transparent;
  transition: background 0.12s, border-color 0.12s;
  user-select: none;
}

.geo-cited-card .kw-item:hover {
  background: var(--ds-bg-alt);
}

.geo-cited-card .kw-item.active {
  background: var(--ds-bg-alt);
  border-color: var(--ds-border-strong);
}

.geo-cited-card .kw-dot {
  width: 5px;
  height: 5px;
  border-radius: 50%;
  background: var(--ds-text);
  flex-shrink: 0;
  opacity: 0.2;
}

.geo-cited-card .kw-item.active .kw-dot {
  opacity: 0.8;
}

.geo-cited-card .kw-text {
  font-size: 11.5px;
  line-height: 1.4;
  color: var(--ds-text-muted);
  flex: 1;
}

.geo-cited-card .kw-item.active .kw-text {
  color: var(--ds-text);
  font-weight: 600;
}

.geo-cited-card .kw-count {
  font-family: var(--ds-font-mono);
  font-size: 9.5px;
  color: var(--ds-text-subtle);
  flex-shrink: 0;
  min-width: 14px;
  text-align: right;
}

.geo-cited-card .kw-pane-foot {
  padding: 8px 14px;
  border-top: 1px solid var(--ds-border);
  font-size: 9.5px;
  color: var(--ds-text-subtle);
  font-family: var(--ds-font-mono);
  flex-shrink: 0;
}

/* 中：文章列表（复用 .geo-pcard，仅在本卡内覆盖尺寸与内部样式） */
.geo-cited-card .list-pane {
  width: 272px;
  flex-shrink: 0;
  border-right: 1px solid var(--ds-border);
  overflow-y: auto;
  padding: 10px 8px;
  display: flex;
  flex-direction: column;
  gap: 6px;
}

.geo-cited-card .list-pane::-webkit-scrollbar {
  width: 3px;
}

.geo-cited-card .list-pane::-webkit-scrollbar-thumb {
  background: var(--ds-bg-deep);
  border-radius: 2px;
}

.geo-cited-card .geo-pcard {
  position: relative;
  display: block;
  width: auto;
  height: auto;
  background: var(--ds-bg);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-lg);
  padding: 11px 12px;
  cursor: pointer;
  box-shadow: var(--ds-shadow-card);
  transition: box-shadow 0.15s, transform 0.15s, border-color 0.15s;
  flex-shrink: 0;
}

.geo-cited-card .geo-pcard:hover {
  box-shadow: var(--ds-shadow-deep);
  transform: translateY(-1px);
}

.geo-cited-card .geo-pcard.selected {
  border-color: var(--ds-text);
  box-shadow: 0 0 0 1.5px var(--ds-text), var(--ds-shadow-card);
}

.geo-cited-card .geo-pcard-index {
  position: absolute;
  top: 9px;
  right: 10px;
  font-size: 9px;
  font-family: var(--ds-font-mono);
  color: var(--ds-text-subtle);
  font-weight: 600;
}

.geo-cited-card .geo-pcard-source {
  display: flex;
  align-items: center;
  gap: 7px;
  margin-bottom: 5px;
  padding-right: 22px;
}

.geo-cited-card .geo-pcard-avatar {
  width: 20px;
  height: 20px;
  border-radius: 50%;
  background: linear-gradient(135deg, var(--ds-bg-deep), var(--ds-bg-alt));
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 8.5px;
  font-weight: 700;
  color: var(--ds-text-muted);
  flex-shrink: 0;
}

.geo-cited-card .geo-pcard-site {
  font-size: 10.5px;
  font-weight: 600;
  color: var(--ds-text);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.geo-cited-card .geo-pcard-title {
  font-size: 11.5px;
  font-weight: 700;
  line-height: 1.45;
  color: var(--ds-text);
  margin-bottom: 4px;
  padding-right: 0;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

.geo-cited-card .geo-pcard-excerpt {
  font-size: 10px;
  line-height: 1.5;
  color: var(--ds-text-muted);
  margin-bottom: 6px;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

.geo-cited-card .geo-pcard-meta {
  display: flex;
  align-items: center;
  gap: 4px;
  font-size: 9.5px;
}

.geo-cited-card .geo-pcard-time {
  font-family: var(--ds-font-mono);
  font-size: 9px;
  color: var(--ds-text-subtle);
  margin-left: auto;
}

.geo-cited-card .geo-chip {
  display: inline-block;
  padding: 1.5px 6px;
  border-radius: var(--ds-radius-pill);
  font-size: 9px;
  font-weight: 700;
  letter-spacing: 0;
  text-transform: uppercase;
}

.geo-cited-card .geo-chip-platform {
  background: var(--ds-bg-alt);
  color: var(--ds-text-muted);
  border: 1px solid var(--ds-border);
}

/* 右：详情（复用 .geo-dcard，仅在本卡内覆盖为 pane full-height） */
.geo-cited-card .detail-pane {
  flex: 1;
  min-width: 0;
  overflow: hidden;
  display: flex;
  flex-direction: column;
}

.geo-cited-card .geo-dcard {
  background: var(--ds-bg);
  border: none;
  border-radius: 0;
  box-shadow: none;
  display: flex;
  flex-direction: column;
  overflow: hidden;
  height: 100%;
  width: auto;
}

.geo-cited-card .geo-dcard-head {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 12px 20px;
  border-bottom: 1px solid var(--ds-border);
  flex-shrink: 0;
}

.geo-cited-card .geo-dsource-avatar {
  width: 28px;
  height: 28px;
  border-radius: 50%;
  background: linear-gradient(135deg, var(--ds-bg-deep), var(--ds-bg-alt));
  flex-shrink: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 11px;
  font-weight: 700;
  color: var(--ds-text-muted);
}

.geo-cited-card .geo-dsource-meta {
  flex: 1;
  min-width: 0;
}

.geo-cited-card .geo-dsource-name {
  font-size: 12px;
  font-weight: 600;
  color: var(--ds-text);
}

.geo-cited-card .geo-dsource-sub {
  font-size: 10px;
  color: var(--ds-text-subtle);
}

.geo-cited-card .geo-dcard-body {
  padding: 20px 24px 12px;
  flex: 1;
  overflow-y: auto;
  min-height: 0;
}

.geo-cited-card .geo-dcard-body::-webkit-scrollbar {
  width: 4px;
}

.geo-cited-card .geo-dcard-body::-webkit-scrollbar-thumb {
  background: var(--ds-border-strong);
  border-radius: 4px;
}

.geo-cited-card .geo-dtitle {
  font-size: 17px;
  font-weight: 800;
  line-height: 1.45;
  letter-spacing: 0;
  margin: 0 0 8px;
  color: var(--ds-text);
}

.geo-cited-card .geo-dmeta {
  display: flex;
  align-items: center;
  gap: 7px;
  font-size: 10.5px;
  color: var(--ds-text-muted);
  margin-bottom: 18px;
  flex-wrap: wrap;
}

.geo-cited-card .geo-dp,
.geo-cited-card .geo-md--detail {
  font-size: 13px;
  line-height: 1.85;
  color: var(--ds-text);
}

.geo-cited-card .geo-dp {
  margin: 0 0 12px;
}

.geo-cited-card .geo-md--detail p {
  margin: 0 0 12px;
}

.geo-cited-card .geo-dcard-foot {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 10px 20px;
  border-top: 1px solid var(--ds-border);
  flex-shrink: 0;
}

.geo-cited-card .geo-dfoot-hint {
  font-size: 10px;
  color: var(--ds-text-subtle);
}

.geo-cited-card .view-source-link {
  font-size: 10.5px;
  color: var(--ds-text);
  text-decoration: none;
  display: inline-flex;
  align-items: center;
  gap: 4px;
  margin-left: auto;
  padding: 4px 10px;
  border: 1px solid var(--ds-border-strong);
  border-radius: 6px;
  background: var(--ds-bg-alt);
  font-weight: 600;
  transition: background 0.12s;
}

.geo-cited-card .view-source-link:hover {
  background: var(--ds-bg-deep);
}

.geo-cited-card .view-source-link svg {
  opacity: 0.55;
}

.geo-cited-card .cc-empty {
  margin: auto;
  color: var(--ds-text-subtle);
  font-size: 12px;
}

/* ===== GEO 情报详情大卡 GeoIntelNode（块二「AI 都在推荐谁」1:1 还原） =====
   固定 1080×720（= cardMeta geoIntel estimate）：grid flex:1 内部滚动，余下区块固定高，
   real 渲染尺寸 = bootstrap 尺寸，避免变高卡压邻卡。Token 全用 --ds-*；console no-azure：
   蓝色只在数据条（s-bar/live dot），danger/红只在状态文字（落后/未上榜），CTA ink-on-ink。 */
.geo-intel-card {
  position: relative;
  width: 1080px;
  height: 720px;
  background: var(--ds-surface);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-xl);
  box-shadow: var(--ds-shadow-deep);
  padding: 34px 38px 30px;
  font-family: var(--ds-font);
  color: var(--ds-text);
  overflow: hidden;
  display: flex;
  flex-direction: column;
}

/* 返回（关大卡回画布，幽灵态，与 cited-card cc-back 一致） */
.geo-intel-card .gi-back {
  position: absolute;
  top: 16px;
  right: 20px;
  z-index: 2;
  display: inline-flex;
  align-items: center;
  gap: 5px;
  padding: 5px 11px 5px 9px;
  border: 1px solid var(--ds-border-strong);
  background: var(--ds-bg-alt);
  color: var(--ds-text-muted);
  border-radius: var(--ds-radius-md);
  font-size: 12px;
  font-weight: 600;
  font-family: var(--ds-font);
  cursor: pointer;
  transition: background 0.12s, color 0.12s;
}
.geo-intel-card .gi-back:hover { background: var(--ds-bg-deep); color: var(--ds-text); }
.geo-intel-card .gi-back svg { opacity: 0.7; }

/* loading / empty 居中态（卡尺寸不变，避免重测量） */
.geo-intel-card .gi-state { margin: auto; color: var(--ds-text-subtle); font-size: 13px; }

/* 卡头 */
.geo-intel-card .gi-ch { display: flex; align-items: flex-start; justify-content: space-between; gap: 24px; padding-right: 76px; }
.geo-intel-card .gi-kick { font-family: var(--ds-font-mono); font-size: 11px; letter-spacing: 0.13em; color: var(--ds-text-subtle); text-transform: uppercase; margin-bottom: 11px; }
.geo-intel-card .gi-title { display: flex; align-items: center; gap: 9px; font-size: 23px; font-weight: 700; letter-spacing: -0.018em; }
.geo-intel-card .gi-live { width: 7px; height: 7px; border-radius: 50%; background: var(--ds-accent); box-shadow: 0 0 0 3px rgba(77, 166, 255, 0.16); }
.geo-intel-card .gi-sub { margin-top: 11px; font-size: 13.5px; line-height: 1.65; color: var(--ds-text-muted); max-width: 680px; }
.geo-intel-card .gi-sub b { color: var(--ds-text); font-weight: 700; }
.geo-intel-card .gi-meta { flex-shrink: 0; text-align: right; font-family: var(--ds-font-mono); font-size: 11.5px; line-height: 1.9; color: var(--ds-text-subtle); }
.geo-intel-card .gi-meta b { color: var(--ds-text-muted); font-weight: 600; }

/* KPI 数据行 */
.geo-intel-card .gi-kpi { display: grid; grid-template-columns: repeat(4, 1fr); margin-top: 26px; border: 1px solid var(--ds-border); border-radius: var(--ds-radius-lg); overflow: hidden; flex-shrink: 0; }
.geo-intel-card .gi-k { padding: 18px 22px; border-left: 1px solid var(--ds-border); }
.geo-intel-card .gi-k:first-child { border-left: none; }
.geo-intel-card .gi-k-lab { font-size: 11.5px; color: var(--ds-text-muted); display: flex; align-items: center; gap: 6px; margin-bottom: 9px; }
.geo-intel-card .gi-k-val { font-family: var(--ds-font-mono); font-variant-numeric: tabular-nums; font-size: 32px; font-weight: 700; line-height: 1; letter-spacing: -0.02em; }
.geo-intel-card .gi-k-val .unit { font-size: 13px; font-weight: 500; color: var(--ds-text-subtle); margin-left: 3px; letter-spacing: 0; }
.geo-intel-card .gi-k-sub { margin-top: 8px; font-size: 11px; color: var(--ds-text-subtle); font-family: var(--ds-font-mono); }
.geo-intel-card .gi-k-sub.down { color: var(--ds-danger); }
.geo-intel-card .gi-k-sub.up { color: var(--ds-success); }
.geo-intel-card .gi-dot { width: 6px; height: 6px; border-radius: 50%; display: inline-block; background: var(--ds-danger); }
.geo-intel-card .gi-mini-bar { height: 3px; border-radius: 2px; background: var(--ds-bg-deep); margin-top: 9px; overflow: hidden; }
.geo-intel-card .gi-mini-bar i { display: block; height: 100%; background: var(--ds-text); border-radius: 2px; }

/* 两榜 grid（占满剩余高度，列内滚动） */
.geo-intel-card .gi-grid { display: grid; grid-template-columns: 1fr 1fr; margin-top: 24px; border: 1px solid var(--ds-border); border-radius: var(--ds-radius-lg); overflow: hidden; flex: 1; min-height: 0; }
.geo-intel-card .gi-col { padding: 20px 24px 22px; overflow-y: auto; }
.geo-intel-card .gi-col + .gi-col { border-left: 1px solid var(--ds-border); }
.geo-intel-card .gi-col::-webkit-scrollbar { width: 3px; }
.geo-intel-card .gi-col::-webkit-scrollbar-thumb { background: var(--ds-bg-deep); border-radius: 2px; }
.geo-intel-card .gi-cap { display: flex; align-items: baseline; justify-content: space-between; margin-bottom: 6px; padding-bottom: 11px; border-bottom: 1px solid var(--ds-border-strong); }
.geo-intel-card .gi-cap h4 { font-size: 12.5px; font-weight: 700; display: flex; align-items: center; gap: 8px; }
.geo-intel-card .gi-cap h4 .n { font-family: var(--ds-font-mono); font-size: 10px; color: var(--ds-text-subtle); }
.geo-intel-card .gi-cap .sub { font-family: var(--ds-font-mono); font-size: 10px; color: var(--ds-text-subtle); }
.geo-intel-card .gi-col-empty { padding: 18px 2px; font-size: 12px; color: var(--ds-text-subtle); }

/* 榜 A：谁被 AI 推荐 */
.geo-intel-card .gi-grow { display: flex; align-items: center; gap: 12px; padding: 11px 2px; border-bottom: 1px solid var(--ds-border); }
.geo-intel-card .gi-grow:last-child { border-bottom: none; }
.geo-intel-card .gi-grow .g-main { flex: 1; min-width: 0; }
.geo-intel-card .gi-grow .g-kw { font-size: 12.5px; font-weight: 600; letter-spacing: -0.006em; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.geo-intel-card .gi-grow .g-lead { font-family: var(--ds-font-mono); font-size: 10px; color: var(--ds-text-subtle); margin-top: 3px; }
.geo-intel-card .gi-grow .g-stand { font-family: var(--ds-font-mono); font-size: 11.5px; font-weight: 600; white-space: nowrap; }
.geo-intel-card .gi-grow .g-stand.bad { color: var(--ds-danger); }
.geo-intel-card .gi-grow .g-stand.mid { color: var(--ds-text-muted); }
.geo-intel-card .gi-grow .g-stand.ok { color: var(--ds-text); }

/* 榜 B：AI 引用哪些信源 */
.geo-intel-card .gi-srow { display: flex; align-items: center; gap: 11px; padding: 10px 2px; border-bottom: 1px solid var(--ds-border); }
.geo-intel-card .gi-srow:last-child { border-bottom: none; }
.geo-intel-card .gi-srow .s-logo { width: 26px; height: 26px; border-radius: 7px; background: var(--ds-bg-alt); border: 1px solid var(--ds-border); display: flex; align-items: center; justify-content: center; font-size: 11px; font-weight: 700; flex-shrink: 0; }
.geo-intel-card .gi-srow .s-mid { flex: 1; min-width: 0; }
.geo-intel-card .gi-srow .s-name { font-size: 12.5px; font-weight: 600; }
.geo-intel-card .gi-srow .s-bar { height: 4px; border-radius: 2px; background: var(--ds-bg-alt); margin-top: 6px; }
.geo-intel-card .gi-srow .s-bar i { display: block; height: 100%; border-radius: 2px; background: var(--ds-accent); }
.geo-intel-card .gi-srow .s-cite { font-family: var(--ds-font-mono); font-size: 11.5px; font-weight: 600; color: var(--ds-text-muted); width: 42px; text-align: right; flex-shrink: 0; }
.geo-intel-card .gi-srow .s-cite .u { font-size: 9px; color: var(--ds-text-subtle); font-weight: 400; }
.geo-intel-card .gi-srow .s-in { font-size: 10px; font-weight: 600; padding: 3px 9px; border-radius: var(--ds-radius-pill); white-space: nowrap; flex-shrink: 0; }
.geo-intel-card .gi-srow .s-in.yes { background: var(--ds-text); color: var(--ds-text-on-ink); }
.geo-intel-card .gi-srow .s-in.no { border: 1px solid var(--ds-border-strong); color: var(--ds-text-subtle); }

/* 行动条 */
.geo-intel-card .gi-nextbar { display: flex; align-items: center; gap: 18px; margin-top: 24px; padding: 18px 22px; background: var(--ds-bg-alt); border: 1px solid var(--ds-border); border-radius: var(--ds-radius-lg); flex-shrink: 0; }
.geo-intel-card .gi-nextbar .nb-ico { width: 34px; height: 34px; border-radius: var(--ds-radius-sm); background: var(--ds-surface); border: 1px solid var(--ds-border); display: flex; align-items: center; justify-content: center; flex-shrink: 0; font-size: 15px; }
.geo-intel-card .gi-nextbar .nb-txt { flex: 1; font-size: 13px; line-height: 1.6; color: var(--ds-text-muted); }
.geo-intel-card .gi-nextbar .nb-txt b { color: var(--ds-text); font-weight: 700; }
.geo-intel-card .gi-cta { flex-shrink: 0; display: inline-flex; align-items: center; gap: 7px; height: 40px; padding: 0 20px; border-radius: var(--ds-radius-sm); font-size: 13px; font-weight: 700; color: var(--ds-text-on-ink); background: var(--ds-text); border: 1px solid var(--ds-text); cursor: pointer; font-family: var(--ds-font); }
.geo-intel-card .gi-cta:hover { box-shadow: var(--ds-shadow-cta-primary); }

/* ============================================================
   情报监控 · 融合总览卡（块一竞品空态 + 块二 GEO 接真实指标）
   1:1 还原 docs/design/2026-06-13-intel-monitor-two-blocks.html 的 .intel-board
   ============================================================ */
/* 固定高容器（对齐 geoIntel .geo-intel-card 同源，spec 2026-06-15 §3/§9.7 决策5）：
   加载→就绪三态共用同一高度，正文超出走内部滚动，消除聚焦时 +76px 纵向跳变。 */
.intel-board { position: relative; width: 1080px; max-width: 100%; height: 620px; display: flex; flex-direction: column; background: var(--ds-surface); border: 1px solid var(--ds-border); border-radius: var(--ds-radius-xl); box-shadow: var(--ds-shadow-deep); overflow: hidden; font-family: var(--ds-font); color: var(--ds-text); }

/* 加载 / 错误态居中（margin:auto 填满固定卡高，卡尺寸不变 → 无重测量跳变，同 gi-state） */
.intel-board .ib-state { margin: auto; padding: 40px; font-size: 14px; color: var(--ds-text-muted); }

/* 共享抬头 */
.intel-board .ib-head { display: flex; flex-shrink: 0; align-items: center; justify-content: space-between; gap: 20px; padding: 22px 32px 18px; }
.intel-board .ib-title { display: flex; align-items: center; gap: 10px; font-size: 15px; font-weight: 700; letter-spacing: -0.01em; }
.intel-board .ib-title .mk { width: 24px; height: 24px; border-radius: 7px; background: var(--ds-text); color: var(--ds-text-on-ink); display: flex; align-items: center; justify-content: center; font-size: 12px; font-weight: 700; }
.intel-board .ib-title .sep { color: var(--ds-border-strong); font-weight: 400; }
.intel-board .ib-title .ib-prod { color: var(--ds-text-muted); font-weight: 600; }
.intel-board .ib-meta { font-family: var(--ds-font-mono); font-size: 11px; color: var(--ds-text-subtle); text-align: right; }

/* 横跨两块的情报仪表条 */
.intel-board .ib-strip { display: grid; flex-shrink: 0; grid-template-columns: repeat(4, 1fr); border-top: 1px solid var(--ds-border); border-bottom: 1px solid var(--ds-border); background: #fcfcfc; }
.intel-board .ib-strip .s { padding: 13px 0 13px 22px; border-left: 1px solid var(--ds-border); }
.intel-board .ib-strip .s:first-child { border-left: none; padding-left: 32px; }
.intel-board .ib-strip .s-lab { font-size: 11px; color: var(--ds-text-muted); display: flex; align-items: center; gap: 6px; margin-bottom: 6px; }
.intel-board .ib-strip .s-val { font-family: var(--ds-font-mono); font-size: 23px; font-weight: 700; letter-spacing: -0.02em; line-height: 1; font-variant-numeric: tabular-nums; }
.intel-board .ib-strip .s-val .u { font-size: 12px; color: var(--ds-text-subtle); font-weight: 500; margin-left: 2px; }
.intel-board .ib-strip .s-sub { font-family: var(--ds-font-mono); font-size: 10px; margin-top: 7px; color: var(--ds-text-subtle); }
.intel-board .ib-strip .s-sub .bad { color: var(--ds-danger); }
.intel-board .ib-strip .dot { width: 6px; height: 6px; border-radius: 50%; display: inline-block; }
.intel-board .ib-strip .dot.amber { background: var(--ds-warning); }
.intel-board .ib-strip .dot.danger { background: var(--ds-danger); }

/* 两道车道 + 中线 */
.intel-board .ib-cols { position: relative; flex: 1; min-height: 0; display: grid; grid-template-columns: 1fr 1fr; }
.intel-board .ib-cols::after { content: ""; position: absolute; top: 24px; bottom: 24px; left: 50%; width: 1px; background: var(--ds-border); }
.intel-board .ib-lane { padding: 22px 30px 24px; min-width: 0; overflow-y: auto; }
.intel-board .ib-lane .lane-kick { font-family: var(--ds-font-mono); font-size: 11px; letter-spacing: 0.13em; color: var(--ds-text-subtle); text-transform: uppercase; margin-bottom: 11px; }
.intel-board .ib-lane .lane-title { display: flex; align-items: center; gap: 9px; font-size: 17px; font-weight: 700; letter-spacing: -0.014em; }
.intel-board .ib-lane .lane-title .live { width: 7px; height: 7px; border-radius: 50%; background: var(--ds-accent); box-shadow: 0 0 0 3px rgba(77, 166, 255, 0.16); }

/* 车道空态（块一竞品社媒短视频本期无数据源） */
.intel-board .ib-lane .lane-empty { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 8px; min-height: 220px; margin-top: 16px; border: 1px dashed var(--ds-border-strong); border-radius: var(--ds-radius-lg); background: var(--ds-bg-alt); padding: 24px; text-align: center; }
.intel-board .ib-lane .lane-empty .le-tag { font-family: var(--ds-font-mono); font-size: 11px; letter-spacing: 0.08em; color: var(--ds-text-subtle); text-transform: uppercase; }
.intel-board .ib-lane .lane-empty .le-txt { font-size: 12.5px; color: var(--ds-text-muted); line-height: 1.6; max-width: 280px; }

/* 北极星指标 + sparkline */
.intel-board .lane-metric { margin-top: 16px; padding-bottom: 15px; border-bottom: 1px solid var(--ds-border); }
.intel-board .lm-top { display: flex; align-items: flex-end; justify-content: space-between; gap: 14px; }
.intel-board .lm-lab { font-size: 11px; color: var(--ds-text-muted); margin-bottom: 8px; }
.intel-board .lm-val { font-family: var(--ds-font-mono); font-size: 31px; font-weight: 700; line-height: 0.92; letter-spacing: -0.022em; font-variant-numeric: tabular-nums; }
.intel-board .lm-val .u { font-size: 13px; font-weight: 500; color: var(--ds-text-subtle); margin-left: 3px; letter-spacing: 0; }
.intel-board .lm-trend { display: flex; align-items: center; gap: 9px; padding-bottom: 3px; }
.intel-board .lm-ctx { font-family: var(--ds-font-mono); font-size: 10.5px; color: var(--ds-text-subtle); margin-top: 11px; }
.intel-board .lm-ctx b { color: var(--ds-text-muted); font-weight: 600; }
.intel-board .spark { display: block; }
.intel-board .spark polyline { fill: none; stroke: var(--ds-text-subtle); stroke-width: 1.5; stroke-linecap: round; stroke-linejoin: round; }
.intel-board .spark.up circle { fill: var(--ds-text); }
.intel-board .spark.down circle { fill: var(--ds-danger); }
.intel-board .delta { font-family: var(--ds-font-mono); font-size: 12px; font-weight: 600; white-space: nowrap; }
.intel-board .delta.up { color: var(--ds-text); }
.intel-board .delta.down { color: var(--ds-danger); }
.intel-board .delta.none { color: var(--ds-text-subtle); }

/* Top3 榜单（GEO 车道） */
.intel-board .lane-listlab { display: flex; align-items: center; justify-content: space-between; font-size: 11px; font-weight: 600; color: var(--ds-text-subtle); margin: 14px 0 4px; }
.intel-board .lane-listlab .more { font-family: var(--ds-font-mono); font-size: 10px; font-weight: 400; }
.intel-board .lane-list { display: flex; flex-direction: column; }
.intel-board .lane-row { display: grid; grid-template-columns: 16px 34px 1fr auto; align-items: center; gap: 11px; padding: 10px 8px; border-bottom: 1px solid var(--ds-border); transition: background 0.14s; cursor: pointer; margin: 0 -8px; }
.intel-board .lane-row:last-child { border-bottom: none; }
.intel-board .lane-row:hover { background: #fafafa; }
.intel-board .lane-list .lane-row:first-child .lr-rank { color: var(--ds-text); font-weight: 700; }
.intel-board .lane-empty-row { padding: 16px 0; font-size: 12px; color: var(--ds-text-subtle); }
.intel-board .lr-rank { font-family: var(--ds-font-mono); font-size: 12px; font-weight: 600; color: var(--ds-text-subtle); text-align: center; }
.intel-board .lr-mono { width: 30px; height: 30px; border-radius: 50%; background: var(--ds-bg-alt); border: 1px solid var(--ds-border); display: flex; align-items: center; justify-content: center; font-size: 11px; font-weight: 700; margin: 0 auto; }
.intel-board .lr-main { min-width: 0; }
.intel-board .lr-title { font-size: 12.5px; font-weight: 600; line-height: 1.3; letter-spacing: -0.006em; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; display: block; }
.intel-board .lr-sub { font-family: var(--ds-font-mono); font-size: 9.5px; color: var(--ds-text-subtle); margin-top: 3px; }
.intel-board .lr-metric { font-family: var(--ds-font-mono); font-size: 13px; font-weight: 600; white-space: nowrap; display: flex; align-items: center; gap: 5px; justify-content: flex-end; }
.intel-board .lr-stand { font-family: var(--ds-font-mono); font-size: 11.5px; font-weight: 600; white-space: nowrap; }
.intel-board .lr-stand.bad { color: var(--ds-danger); }
.intel-board .lr-stand.mid { color: var(--ds-text-muted); }
.intel-board .lr-stand.ok { color: var(--ds-text); }

/* 底部双入口 */
.intel-board .ib-foot { display: flex; flex-shrink: 0; align-items: center; gap: 18px; padding: 15px 32px; border-top: 1px solid var(--ds-border); background: var(--ds-bg-alt); }
.intel-board .ib-foot .pri { flex: 1; font-size: 12.5px; line-height: 1.5; color: var(--ds-text-muted); }
.intel-board .ib-foot .pri .lead { font-weight: 700; color: var(--ds-text); margin-right: 7px; }
.intel-board .ib-foot .pri b { color: var(--ds-text); font-weight: 600; }
.intel-board .ib-foot .acts { display: flex; gap: 9px; flex-shrink: 0; }
.intel-board .ib-foot .lnk { display: inline-flex; align-items: center; gap: 6px; height: 34px; padding: 0 15px; border-radius: var(--ds-radius-sm); font-size: 12px; font-weight: 700; cursor: pointer; white-space: nowrap; color: var(--ds-text-on-ink); background: var(--ds-text); border: 1px solid var(--ds-text); font-family: var(--ds-font); }
.intel-board .ib-foot .lnk:hover { box-shadow: var(--ds-shadow-cta-primary); }
.intel-board .ib-foot .lnk.ghost { color: var(--ds-text-subtle); background: var(--ds-surface); border: 1px solid var(--ds-border-strong); cursor: not-allowed; }
.intel-board .ib-foot .lnk.ghost:hover { box-shadow: none; }

/* GEO 创新 cockpit：一屏态 */
.intel-board .gio-entry { flex: 1; min-height: 0; padding: 22px 32px 30px; display: grid; grid-template-rows: auto auto 1fr; gap: 18px; background: var(--ds-surface); }
.gio-kick { font-family: var(--ds-font-mono); font-size: 11px; font-weight: 700; letter-spacing: 0; color: var(--ds-text-subtle); text-transform: uppercase; }
.intel-board .gio-entry-brief { display: flex; flex-direction: column; gap: 9px; }
.intel-board .gio-entry-brief h3, .geo-intel-card .gio-pinned-brief h3 { margin: 0; font-size: 22px; line-height: 1.25; font-weight: 800; letter-spacing: 0; color: var(--ds-text); }
.intel-board .gio-entry-brief p, .geo-intel-card .gio-pinned-brief p { margin: 0; max-width: 760px; font-size: 14px; line-height: 1.6; color: var(--ds-text-muted); }
.gio-entry-tags { display: flex; flex-wrap: wrap; gap: 8px; }
.gio-entry-tags > span, .gio-loop-badge { display: inline-flex; align-items: center; height: 24px; padding: 0 9px; border-radius: var(--ds-radius-pill); border: 1px solid var(--ds-border); background: var(--ds-bg-alt); color: var(--ds-text-muted); font-size: 11px; font-weight: 700; }
.gio-loop-badge.is-good { color: var(--ds-success); background: rgba(34, 197, 94, 0.10); }
.gio-loop-badge.is-pending, .gio-loop-badge.is-warn { color: var(--ds-warning); background: rgba(245, 158, 11, 0.12); }
.gio-loop-badge.is-bad { color: var(--ds-danger); background: rgba(239, 68, 68, 0.10); }
.intel-board .gio-entry-nums { display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); border: 1px solid var(--ds-border); border-radius: var(--ds-radius-lg); overflow: hidden; }
.intel-board .gio-entry-num { padding: 14px 16px; border-left: 1px solid var(--ds-border); min-width: 0; }
.intel-board .gio-entry-num:first-child { border-left: none; }
.gio-num-label { font-size: 11px; color: var(--ds-text-muted); font-weight: 700; line-height: 1.35; }
.gio-num-value { margin-top: 8px; font-family: var(--ds-font-mono); font-size: 24px; font-weight: 800; line-height: 1; color: var(--ds-text); font-variant-numeric: tabular-nums; }
.gio-num-value span { margin-left: 2px; font-size: 12px; font-weight: 600; color: var(--ds-text-subtle); }
.gio-num-sub { margin-top: 7px; font-size: 10.5px; color: var(--ds-text-subtle); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.intel-board .gio-entry-bottom { display: grid; grid-template-columns: minmax(0, 1fr) 300px; gap: 18px; min-height: 0; }
.intel-board .gio-entry-rank, .intel-board .gio-entry-action { border: 1px solid var(--ds-border); border-radius: var(--ds-radius-lg); background: var(--ds-bg-alt); padding: 16px; min-width: 0; overflow: hidden; }
.gio-entry-section-title { font-size: 11px; font-weight: 800; color: var(--ds-text-subtle); margin-bottom: 10px; }
.gio-entry-empty { padding: 18px 0; color: var(--ds-text-subtle); font-size: 12px; }
.gio-entry-rank-row { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: 12px; padding: 9px 0; border-top: 1px solid var(--ds-border); }
.gio-entry-rank-row:first-of-type { border-top: none; }
.gio-entry-rank-row b { display: block; color: var(--ds-text); font-size: 12.5px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.gio-entry-rank-row span { display: block; margin-top: 3px; color: var(--ds-text-subtle); font-family: var(--ds-font-mono); font-size: 10px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.gio-entry-rank-row i { font-style: normal; font-size: 11px; font-weight: 800; white-space: nowrap; }
.gio-entry-rank-row i.is-good { color: var(--ds-success); }
.gio-entry-rank-row i.is-warn { color: var(--ds-warning); }
.gio-entry-rank-row i.is-bad { color: var(--ds-danger); }
.gio-entry-rank-row i.is-muted { color: var(--ds-text-subtle); }
.intel-board .gio-entry-action { display: flex; flex-direction: column; }
.intel-board .gio-entry-action p { margin: 0; color: var(--ds-text); font-size: 13px; line-height: 1.55; font-weight: 700; }
.intel-board .gio-entry-action small { display: block; margin-top: 8px; color: var(--ds-text-muted); font-size: 11px; line-height: 1.5; }
.intel-board .gio-entry-action .lnk { margin-top: auto; align-self: flex-start; display: inline-flex; align-items: center; height: 36px; padding: 0 15px; border-radius: var(--ds-radius-sm); background: var(--ds-text); color: var(--ds-text-on-ink); border: 1px solid var(--ds-text); font-family: var(--ds-font); font-size: 12px; font-weight: 800; cursor: pointer; }

/* GEO 情报展开态：钉住简报 + 分段专业面板 */
.geo-intel-card .gio-expand { flex: 1; min-height: 0; display: flex; flex-direction: column; gap: 16px; padding: 0 24px 24px; }
.geo-intel-card .gio-pinned { flex-shrink: 0; display: grid; grid-template-columns: minmax(260px, 1.2fr) minmax(420px, 2fr); grid-template-areas: "brief scores" "engines engines"; gap: 14px; }
.geo-intel-card .gio-pinned-brief { grid-area: brief; border: 1px solid var(--ds-border); border-radius: var(--ds-radius-lg); background: var(--ds-bg-alt); padding: 16px; }
.geo-intel-card .gio-score-strip { grid-area: scores; display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); border: 1px solid var(--ds-border); border-radius: var(--ds-radius-lg); overflow: hidden; background: var(--ds-surface); }
.geo-intel-card .gio-score { padding: 13px 12px; border-left: 1px solid var(--ds-border); min-width: 0; }
.geo-intel-card .gio-score:first-child { border-left: none; }
.geo-intel-card .gio-score span { display: block; color: var(--ds-text-muted); font-size: 10.5px; font-weight: 700; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.geo-intel-card .gio-score b { display: block; margin-top: 8px; color: var(--ds-text); font-family: var(--ds-font-mono); font-size: 21px; line-height: 1; font-variant-numeric: tabular-nums; }
.geo-intel-card .gio-score i { margin-left: 2px; color: var(--ds-text-subtle); font-size: 11px; font-style: normal; font-weight: 600; }
.geo-intel-card .gio-engine-access { grid-area: engines; display: flex; flex-wrap: wrap; gap: 8px; }
.geo-intel-card .gio-engine-access span { display: inline-flex; align-items: center; gap: 7px; min-height: 28px; padding: 4px 10px; border-radius: var(--ds-radius-pill); border: 1px solid var(--ds-border); background: var(--ds-surface); color: var(--ds-text-muted); font-size: 11px; font-weight: 700; }
.geo-intel-card .gio-engine-access span.is-muted { color: var(--ds-text-subtle); background: var(--ds-bg-alt); }
.geo-intel-card .gio-engine-access b { color: var(--ds-text); font-size: 11.5px; }
.gio-seg { flex: 1; min-height: 0; display: flex; flex-direction: column; border: 1px solid var(--ds-border); border-radius: var(--ds-radius-lg); overflow: hidden; background: var(--ds-surface); }
.gio-seg-tabs { display: flex; gap: 4px; padding: 8px; border-bottom: 1px solid var(--ds-border); background: var(--ds-bg-alt); }
.gio-seg-tab { height: 32px; padding: 0 13px; border-radius: var(--ds-radius-sm); border: 1px solid transparent; background: transparent; color: var(--ds-text-muted); font-family: var(--ds-font); font-size: 12px; font-weight: 800; cursor: pointer; }
.gio-seg-tab.is-active { background: var(--ds-text); color: var(--ds-text-on-ink); border-color: var(--ds-text); }
.gio-seg-panel { flex: 1; min-height: 0; overflow: auto; padding: 16px; }
.gio-chart-grid { display: grid; grid-template-columns: minmax(0, 1.3fr) minmax(0, 1fr); gap: 14px; }
.gio-chart-grid--two { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.gio-chart { border: 1px solid var(--ds-border); border-radius: var(--ds-radius-lg); background: var(--ds-surface); padding: 14px; min-width: 0; }
.gio-chart-head { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; margin-bottom: 12px; }
.gio-chart-head h4 { margin: 0; font-size: 13px; font-weight: 800; color: var(--ds-text); letter-spacing: 0; }
.gio-chart-head span { color: var(--ds-text-subtle); font-family: var(--ds-font-mono); font-size: 10.5px; white-space: nowrap; }
.gio-chart-empty { grid-column: 1 / -1; padding: 18px 0; color: var(--ds-text-subtle); font-size: 12px; }
.gio-heat-grid { display: grid; align-items: stretch; border: 1px solid var(--ds-border); border-radius: var(--ds-radius-md); overflow: hidden; }
.gio-heat-th, .gio-heat-query, .gio-heat-cell { padding: 9px 10px; border-left: 1px solid var(--ds-border); border-top: 1px solid var(--ds-border); font-size: 11.5px; }
.gio-heat-th { border-top: none; color: var(--ds-text-subtle); background: var(--ds-bg-alt); font-weight: 800; }
.gio-heat-th:first-child, .gio-heat-query { border-left: none; }
.gio-heat-query { color: var(--ds-text); font-weight: 700; }
.gio-tone { display: inline-flex; align-items: center; height: 22px; padding: 0 8px; border-radius: var(--ds-radius-pill); border: 1px solid var(--ds-border); color: var(--ds-text-muted); background: var(--ds-bg-alt); font-size: 10.5px; font-weight: 800; }
.gio-tone--good { color: var(--ds-success); background: rgba(34, 197, 94, 0.10); }
.gio-tone--warn, .gio-tone--pending { color: var(--ds-warning); background: rgba(245, 158, 11, 0.12); }
.gio-tone--bad { color: var(--ds-danger); background: rgba(239, 68, 68, 0.10); }
.gio-stack-list, .gio-source-list, .gio-loop-list { display: flex; flex-direction: column; gap: 9px; }
.gio-stack-meta { display: flex; justify-content: space-between; gap: 12px; font-size: 12px; }
.gio-stack-meta b { color: var(--ds-text); }
.gio-stack-meta span { color: var(--ds-text-muted); font-family: var(--ds-font-mono); font-size: 10.5px; }
.gio-stack-bar { height: 5px; margin-top: 6px; border-radius: var(--ds-radius-pill); background: var(--ds-bg-alt); overflow: hidden; }
.gio-stack-bar i { display: block; height: 100%; border-radius: inherit; background: var(--ds-text); }
.gio-source-row { display: grid; grid-template-columns: 28px minmax(0, 1fr) auto auto; align-items: center; gap: 10px; padding: 8px 0; border-top: 1px solid var(--ds-border); }
.gio-source-row:first-child { border-top: none; }
.gio-source-logo { width: 28px; height: 28px; border-radius: var(--ds-radius-sm); display: flex; align-items: center; justify-content: center; background: var(--ds-bg-alt); border: 1px solid var(--ds-border); font-size: 11px; font-weight: 800; }
.gio-source-main { min-width: 0; }
.gio-source-main b, .gio-source-main span { display: block; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.gio-source-main b { color: var(--ds-text); font-size: 12px; }
.gio-source-main span, .gio-source-count, .gio-source-presence { color: var(--ds-text-muted); font-size: 10.5px; font-weight: 700; }
.gio-loop-row { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: 14px; padding: 10px 0; border-top: 1px solid var(--ds-border); }
.gio-loop-row:first-child { border-top: none; }
.gio-loop-query { color: var(--ds-text); font-size: 12px; font-weight: 800; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.gio-loop-states { display: flex; align-items: center; gap: 8px; color: var(--ds-text-muted); font-size: 11px; font-weight: 700; }
.gio-evidence-panel .gi-ch { margin-top: 0; }
.gi-flow { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 8px; margin: 14px 0; }
.gi-flow-step { display: flex; align-items: center; gap: 8px; min-width: 0; padding: 10px 12px; border: 1px solid var(--ds-border); border-radius: var(--ds-radius-sm); background: var(--ds-bg-alt); }
.gi-flow-step span { width: 20px; height: 20px; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center; background: var(--ds-text); color: var(--ds-text-on-ink); font-size: 10px; font-weight: 800; flex: 0 0 auto; }
.gi-flow-step b { font-size: 12px; color: var(--ds-text); white-space: nowrap; }
.gi-evidence-table { min-width: 0; }
.geo-evidence-block { margin-top: 10px; padding: 10px 12px; border: 1px solid var(--ds-border); border-radius: var(--ds-radius-sm); background: var(--ds-bg-alt); }
.geo-evidence-list { margin-top: 8px; display: flex; flex-wrap: wrap; gap: 6px; align-items: center; font-size: 11px; color: var(--ds-text-muted); }
.geo-evidence-list:first-child { margin-top: 0; }
.geo-evidence-list b { color: var(--ds-text); margin-right: 2px; }
.geo-evidence-list span { padding: 4px 7px; border: 1px solid var(--ds-border); border-radius: var(--ds-radius-pill); background: var(--ds-bg); }
.geo-evidence-list--danger span { color: var(--ds-danger); border-color: rgba(239, 68, 68, 0.24); }

/* heading inline markdown (h2/h3 内嵌) */
.geo-md.geo-md--inline { display: inline; }
.geo-md.geo-md--inline p { display: inline; margin: 0; }
/*
 * console s4a · 视频卡 5 状态视觉
 * 视觉权威源：docs/design/console-redesign/2026-05-17-s4a-final-5states.html
 *   + 2026-05-17-s4a-highlight-options.html（h2 breathe-glow 方案）。
 * mindmap 下卡由 reactflow 节点定位 —— 不含 grid / canvas-stage 容器规则。
 * Token 全用 --ds-*（global-design.css 权威）。
 */

/* 视频卡尺寸单源（spec 2026-06-15 §6）：占位卡(.vpending)与真卡(.vthumb)共用，禁止任一处另写 aspect-ratio 字面量 */
:root { --vcard-aspect: 9 / 16; }

@keyframes vcard-ambient {
  0%, 100% { transform: translate(0, 0); opacity: 0.6; }
  50% { transform: translate(8%, -6%); opacity: 0.9; }
}
@keyframes vcard-spin { to { transform: rotate(360deg); } }
@keyframes vcard-pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.35; } }
@keyframes breathe-glow {
  0%, 100% { box-shadow: 0 0 0 0 rgba(24, 24, 27, 0.25), 0 24px 48px -24px rgba(24, 24, 27, 0.20); }
  50% { box-shadow: 0 0 0 6px rgba(24, 24, 27, 0), 0 24px 48px -20px rgba(24, 24, 27, 0.30); }
}

/* ===== 卡共用骨架 ===== */
.vcard {
  width: 280px;
  border-radius: var(--ds-radius-md);
  overflow: hidden;
  box-shadow: var(--ds-shadow-deep);
  background: var(--ds-bg);
  border: 1px solid var(--ds-border-strong);
  position: relative;
  cursor: pointer;
}

.vcard--loaded-external {
  border-color: var(--ds-text);
  border-style: dashed;
}
/* 到达瞬间 pop-in + ink 高亮环（spec §3.2 阶段 C 弱化版）。
 * vcard-pop-in 一次性 0.6s 进入；vcard-ring 一次性 1.4s 后淡出。
 * 不再做 breathe-glow 持续呼吸（box-shadow 1.8s 节奏整张卡反复脱动过于打扰）；
 * 5min HIGHLIGHT 窗口由 mindmap minimap / toast 等独立路径表达，卡本身不再常驻动效。 */
.vcard--highlight {
  animation:
    vcard-pop-in 0.6s ease,
    vcard-ring 1.4s ease forwards;
}
@keyframes vcard-pop-in {
  0%   { transform: scale(0.85); opacity: 0; }
  60%  { transform: scale(1.06); opacity: 1; }
  100% { transform: scale(1); opacity: 1; }
}
@keyframes vcard-ring {
  0%, 50% {
    box-shadow:
      0 0 0 2px var(--ds-text),
      0 0 0 6px rgba(24, 24, 27, 0.08);
  }
  100% {
    box-shadow:
      0 0 0 0 transparent,
      0 0 0 0 transparent;
  }
}
.vcard--linked {
  outline: 2px solid var(--ds-text);
  outline-offset: 2px;
  box-shadow: 0 0 0 5px rgba(24, 24, 27, 0.07);
}
.vthumb {
  position: relative;
  width: 100%;
  aspect-ratio: var(--vcard-aspect);
  overflow: hidden;
}

/* 无海报态占位：暗色 bg + 居中 mode emoji（spec §574）。
   底色复用 preprocessing 卡的深灰渐变，确保 vbottom 白字 / CTA 对比足够。 */
.vthumb--placeholder {
  background: linear-gradient(135deg, #44403c 0%, #292524 100%);
}
/* 缩略图可点击态（spec §4.2 上半区 onClick=onPlay）：
 * cursor 指针 + hover 轻微 brightness 反馈，告诉用户该区域可点。
 * 仅 VSuccess / VPublished 用；VFail / VGenerating / VPreprocessing 不加。 */
.vthumb--clickable { cursor: pointer; }
.vthumb--clickable:hover { filter: brightness(0.95); }
.vthumb-img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  z-index: 0;
}
.vthumb-emoji {
  position: absolute;
  top: 28%; left: 50%;
  transform: translate(-50%, -50%);
  font-size: 52px;
  line-height: 1;
  opacity: 0.6;
  z-index: 1;
  user-select: none;
}

/* preprocessing 背景：深灰 + ambient */
.bg-pp {
  position: absolute; inset: 0;
  background: linear-gradient(135deg, #44403c 0%, #292524 100%);
}
.bg-pp::after {
  content: '';
  position: absolute;
  width: 50%; height: 50%;
  left: 25%; top: 25%;
  background: radial-gradient(circle, rgba(255, 255, 255, 0.05) 0%, transparent 70%);
  animation: vcard-ambient 5s ease-in-out infinite;
}

/* generating 背景：深色 + 双色 ambient 流光 */
.bg-gen {
  position: absolute; inset: 0;
  background: linear-gradient(135deg, #27272a 0%, #18181b 100%);
}
.bg-gen::before {
  content: '';
  position: absolute;
  width: 70%; height: 70%;
  left: -10%; top: 10%;
  background: radial-gradient(circle, rgba(34, 197, 94, 0.32) 0%, transparent 70%);
  animation: vcard-ambient 4.5s ease-in-out infinite;
}
.bg-gen::after {
  content: '';
  position: absolute;
  width: 60%; height: 60%;
  right: -5%; bottom: 5%;
  background: radial-gradient(circle, rgba(245, 158, 11, 0.20) 0%, transparent 70%);
  animation: vcard-ambient 6s ease-in-out infinite reverse;
}

/* fail 背景：红 tint */
.bg-fail {
  position: absolute; inset: 0;
  background: linear-gradient(135deg, rgba(239, 68, 68, 0.18) 0%, rgba(239, 68, 68, 0.36) 100%);
}

/* 排查用：视频 ID 复制按钮（右上角，与状态 badge 同一行高度；默认低调） */
.vvideo-id-btn {
  position: absolute;
  top: 8px;
  right: 8px;
  z-index: 6;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 18px;
  height: 18px;
  padding: 0;
  border: none;
  border-radius: 50%;
  cursor: pointer;
  color: rgba(255, 255, 255, 0.55);
  background: rgba(0, 0, 0, 0.22);
  backdrop-filter: blur(4px);
  opacity: 0.72;
  /* 禁点态卡片仍可点此按钮 */
  pointer-events: auto;
}
.vvideo-id-btn:hover {
  color: rgba(255, 255, 255, 0.95);
  background: rgba(0, 0, 0, 0.42);
  opacity: 1;
}
.vvideo-id-btn:focus-visible {
  outline: 1.5px solid rgba(255, 255, 255, 0.7);
  outline-offset: 1px;
  opacity: 1;
}
/* hover 气泡：白字（覆盖 App.css 全局 .ant-tooltip-inner 的 --ds-text !important） */
.ant-tooltip.vvideo-id-tooltip .ant-tooltip-inner,
.vvideo-id-tooltip .ant-tooltip-inner {
  color: #fff !important;
}
/* 已发布卡右上角有时长 pill，给 ID 按钮让出空间 */
.vtop .veta {
  margin-right: 22px;
}

/* ===== 顶部 flag 行 ===== */
.vtop {
  position: absolute;
  top: var(--ds-space-2);
  left: var(--ds-space-2);
  right: var(--ds-space-2);
  display: flex;
  gap: 4px;
  align-items: center;
  z-index: 4;
}
.vflag {
  padding: 2px 7px;
  font-size: 10px;
  font-weight: 700;
  border-radius: var(--ds-radius-pill);
  color: var(--ds-text-on-ink);
  display: inline-flex; align-items: center; gap: 3px;
}
.vflag.f-pp { background: rgba(255, 255, 255, 0.22); backdrop-filter: blur(8px); }
.vflag.f-gen { background: rgba(255, 255, 255, 0.18); backdrop-filter: blur(8px); }
.vflag.f-gen .live-dot {
  width: 5px; height: 5px; border-radius: 50%;
  background: var(--ds-success);
  animation: vcard-pulse 1.4s infinite;
}
.vflag.f-success { background: var(--ds-warning); }
.vflag.f-pub { background: rgba(24, 24, 27, 0.85); }
.vflag.f-fail { background: var(--ds-danger); }
.veta {
  margin-left: auto;
  font-size: 10px;
  font-weight: 700;
  color: var(--ds-text-on-ink);
  background: rgba(0, 0, 0, 0.4);
  backdrop-filter: blur(6px);
  padding: 1px 6px;
  border-radius: var(--ds-radius-pill);
}

/* ===== 中央区域 ===== */
.vcenter {
  position: absolute;
  top: 50%; left: 50%;
  transform: translate(-50%, -55%);
  text-align: center;
  color: var(--ds-text-on-ink);
  z-index: 3;
  width: 88%;
}

/* preprocessing spinner */
.pp-spinner {
  width: 28px; height: 28px;
  border: 3px solid rgba(255, 255, 255, 0.18);
  border-top-color: rgba(255, 255, 255, 0.9);
  border-radius: 50%;
  animation: vcard-spin 0.9s linear infinite;
  margin: 0 auto var(--ds-space-3);
}
.pp-text {
  font-size: 12px;
  font-weight: 600;
  color: rgba(255, 255, 255, 0.92);
}
.pp-sub {
  font-size: 9px;
  color: rgba(255, 255, 255, 0.55);
  margin-top: 4px;
}

/* generating ring */
.gen-ring {
  position: relative;
  width: 96px; height: 96px;
  margin: 0 auto var(--ds-space-2);
}
.gen-ring svg { width: 100%; height: 100%; transform: rotate(-90deg); }
.gen-ring .track {
  fill: none;
  stroke: rgba(255, 255, 255, 0.18);
  stroke-width: 6;
}
/* 段内连续 grow：CSS animation 驱动，--seg-start / --seg-end 由 VRingProgress 设置 */
.gen-ring .progress {
  fill: none;
  stroke: rgba(255, 255, 255, 0.95);
  stroke-width: 6;
  stroke-linecap: round;
  stroke-dasharray: 251.3274;
  stroke-dashoffset: var(--seg-start, 251.3274);
  animation: ring-fill 20s linear forwards;
}
@keyframes ring-fill {
  from { stroke-dashoffset: var(--seg-start); }
  to   { stroke-dashoffset: var(--seg-end); }
}

/* Glyph 中心字符 */
.gen-ring-glyph {
  position: absolute;
  inset: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 28px;
  line-height: 1;
  color: var(--ds-text-on-ink);
  filter: drop-shadow(0 0 12px rgba(255, 255, 255, 0.25));
  animation: glyph-breathe 2.4s ease-in-out infinite;
  z-index: 2;
}
@keyframes glyph-breathe {
  0%, 100% { transform: scale(1); opacity: 0.92; }
  50%      { transform: scale(1.08); opacity: 1; }
}

/* 步骤胶囊 第 N / M 步 — C2 layout */
.gen-step-chip {
  display: inline-block;
  padding: 2px 8px;
  border-radius: var(--ds-radius-pill);
  background: rgba(255, 255, 255, 0.16);
  color: var(--ds-text-on-ink);
  font-size: 9px;
  font-weight: 800;
  letter-spacing: 0.05em;
  margin-bottom: 4px;
  backdrop-filter: blur(6px);
}
.gen-step-chip b {
  font-size: 10px;
  font-variant-numeric: tabular-nums;
}

.gen-step-name {
  font-size: 13px;
  font-weight: 800;
  color: var(--ds-text-on-ink);
  margin-bottom: 4px;
  letter-spacing: 0.01em;
}

/* 思考行：current_step_summary 入场打字 + 渐隐切换 */
.gen-step-think {
  font-size: 10px;
  color: rgba(255, 255, 255, 0.7);
  line-height: 1.4;
  min-height: 14px;
  padding: 0 4px;
  animation: think-enter 0.3s ease-out;
}
@keyframes think-enter {
  from { opacity: 0; transform: translateY(6px); }
  to   { opacity: 1; transform: translateY(0); }
}

/* 底部 5 步标签行（≤6 步显示）*/
.gen-seg-labels {
  position: absolute;
  bottom: 76px;
  left: var(--ds-space-3);
  right: var(--ds-space-3);
  display: flex;
  justify-content: space-between;
  font-size: 8px;
  color: rgba(255, 255, 255, 0.5);
  font-weight: 600;
  letter-spacing: 0.04em;
  z-index: 4;
  pointer-events: none;
}
.gen-seg-labels span { flex: 1; text-align: center; }
.gen-seg-labels span.active { color: rgba(255, 255, 255, 0.95); }

/* 底部分段 bar */
.gen-seg-bar {
  position: absolute;
  bottom: 60px;
  left: var(--ds-space-3);
  right: var(--ds-space-3);
  display: flex;
  gap: 4px;
  align-items: center;
  z-index: 4;
}
.gen-seg {
  flex: 1;
  height: 4px;
  border-radius: 2px;
  background: rgba(255, 255, 255, 0.14);
  position: relative;
  overflow: hidden;
}
.gen-seg.done { background: rgba(255, 255, 255, 0.78); }
.gen-seg.active::after {
  content: '';
  position: absolute;
  inset: 0;
  background: linear-gradient(90deg, rgba(255,255,255,0.85) 0%, rgba(255,255,255,0.4) 100%);
  width: 55%;
  animation: seg-fill 2.4s ease-in-out infinite;
}
@keyframes seg-fill {
  0%   { width: 20%; }
  100% { width: 90%; }
}

/* success / published center: play 按钮 */
.play-btn {
  width: 44px; height: 44px;
  background: rgba(255, 255, 255, 0.95);
  border-radius: 50%;
  display: inline-flex; align-items: center; justify-content: center;
  font-size: 17px; color: var(--ds-text);
  box-shadow: 0 6px 16px -4px rgba(0, 0, 0, 0.4);
  border: none;
  cursor: pointer;
}

/* fail center */
.fail-icon {
  font-size: 40px;
  color: var(--ds-danger);
  margin-bottom: var(--ds-space-2);
  text-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
}
.fail-text {
  font-size: 12px;
  font-weight: 700;
  color: var(--ds-text-on-ink);
  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.5);
}

/* ===== 底部信息层 ===== */
.vbottom {
  position: absolute;
  bottom: 0; left: 0; right: 0;
  padding: var(--ds-space-4) var(--ds-space-2) var(--ds-space-2);
  background: linear-gradient(180deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.8) 100%);
  color: var(--ds-text-on-ink);
  z-index: 4;
}
.vbottom.bg-fail-tint {
  background: linear-gradient(180deg, rgba(0, 0, 0, 0) 0%, rgba(239, 68, 68, 0.7) 100%);
}
.vtitle {
  font-size: 11px;
  font-weight: 700;
  line-height: 1.35;
  margin-bottom: 3px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  padding: 1px 4px;
  border-radius: 4px;
  border: 1px solid transparent;
}
/* inline 编辑可点击态（spec §4.3，VSuccess 用；VPublished editable=false 不加）：
 * hover 浅白底 + 浅白边提示该字段可点改；颜色全程白色（vbottom 暗色 gradient 上）。 */
.vtitle--editable { cursor: text; }
.vtitle--editable:hover {
  background: rgba(255, 255, 255, 0.12);
  border-color: rgba(255, 255, 255, 0.2);
}
.vtitle-input {
  width: 100%;
  font-size: 11px;
  font-weight: 700;
  color: var(--ds-text-on-ink);
  padding: 1px 4px;
  border: 1px solid var(--ds-text-on-ink);
  border-radius: 4px;
  outline: none;
  background: rgba(0, 0, 0, 0.5);
  font-family: inherit;
}
.vdesc {
  font-size: 9px;
  color: rgba(255, 255, 255, 0.72);
  line-height: 1.4;
  margin-bottom: 4px;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
  padding: 1px 4px;
  border-radius: 4px;
  border: 1px solid transparent;
}
/* inline 编辑可点击态（spec §4.3，VSuccess 用；VPublished editable=false 不加）。 */
.vdesc--editable { cursor: text; }
.vdesc--editable:hover {
  background: rgba(255, 255, 255, 0.12);
  border-color: rgba(255, 255, 255, 0.2);
}
.vdesc--empty {
  color: rgba(255, 255, 255, 0.5);
  font-style: italic;
}
.vdesc-input {
  width: 100%;
  font-size: 9px;
  color: var(--ds-text-on-ink);
  padding: 3px 6px;
  border: 1px solid var(--ds-text-on-ink);
  border-radius: 4px;
  outline: none;
  background: rgba(0, 0, 0, 0.5);
  font-family: inherit;
  resize: none;
  line-height: 1.4;
}
.vmeta {
  font-size: 9px;
  color: rgba(255, 255, 255, 0.65);
  margin-bottom: 4px;
}
.vsource-badges {
  display: flex;
  flex-wrap: wrap;
  gap: 4px;
  margin-bottom: 4px;
}
.vsource-badge {
  display: inline-flex;
  align-items: center;
  max-width: 100%;
  min-height: 16px;
  padding: 1px 6px;
  border-radius: var(--ds-radius-pill);
  font-size: 8px;
  font-weight: 800;
  line-height: 1.2;
  color: var(--ds-text-on-ink);
  background: rgba(255, 255, 255, 0.16);
  border: 1px solid rgba(255, 255, 255, 0.18);
  overflow-wrap: anywhere;
}
.vsource-badge--variant {
  background: rgba(255, 255, 255, 0.24);
}
.vsource-badge--source {
  background: rgba(24, 24, 27, 0.42);
}
.vkpi {
  display: flex;
  gap: 6px;
  font-size: 9px;
  color: rgba(255, 255, 255, 0.85);
  margin-bottom: 4px;
}
.vkpi b {
  color: var(--ds-text-on-ink);
  font-weight: 800;
}
.fail-msg {
  font-size: 9px;
  color: rgba(255, 255, 255, 0.85);
  margin-bottom: 4px;
  line-height: 1.4;
}

/* tags 编辑器 */
.vtags {
  display: flex;
  flex-wrap: wrap;
  gap: 4px;
  margin-bottom: 4px;
}
.vtag {
  display: inline-flex;
  align-items: center;
  gap: 3px;
  padding: 1px 6px;
  font-size: 9px;
  font-weight: 600;
  border-radius: var(--ds-radius-pill);
  background: rgba(255, 255, 255, 0.18);
  color: var(--ds-text-on-ink);
  backdrop-filter: blur(4px);
}
.vtag-label {
  line-height: 1.2;
  cursor: text;
  padding: 0 1px;
  border-radius: 3px;
  outline: none;
}
.vtag-label:hover,
.vtag-label:focus-visible { background: rgba(255, 255, 255, 0.15); }
.vtag-x {
  cursor: pointer;
  font-weight: 700;
  opacity: 0.7;
}
.vtag-x:hover { opacity: 1; }
.vtag-x--disabled { cursor: default; opacity: 0.35; pointer-events: none; }
.vtag-add {
  padding: 1px 6px;
  font-size: 9px;
  font-weight: 700;
  line-height: 1.2;
  border-radius: var(--ds-radius-pill);
  background: rgba(255, 255, 255, 0.12);
  color: var(--ds-text-on-ink);
  border: 1px dashed rgba(255, 255, 255, 0.4);
  cursor: pointer;
  transition: background 0.15s, border-color 0.15s;
}
.vtag-add:hover {
  background: rgba(255, 255, 255, 0.2);
  border-color: rgba(255, 255, 255, 0.7);
}
.vtag-add--empty { padding: 2px 8px; }

/* 内联输入态（新增） */
.vtag-input {
  display: inline-flex;
  align-items: center;
  gap: 2px;
  padding: 1px 6px;
  font-size: 9px;
  font-weight: 600;
  line-height: 1.2;
  border-radius: var(--ds-radius-pill);
  background: rgba(255, 255, 255, 0.22);
  color: var(--ds-text-on-ink);
  border: 1px solid rgba(255, 255, 255, 0.55);
  box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.18);
}
/* 编辑现有 chip：复用 .vtag 的尺寸，叠加聚焦框 */
.vtag.vtag-editing {
  background: rgba(255, 255, 255, 0.22);
  border: 1px solid rgba(255, 255, 255, 0.55);
  box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.18);
  padding: 0 5px;
}
.vtag-hash { color: rgba(255, 255, 255, 0.8); user-select: none; }
.vtag-input-el {
  background: transparent;
  border: 0;
  outline: 0;
  color: var(--ds-text-on-ink);
  font: inherit;
  width: 64px;
  max-width: 140px;
  padding: 0;
  caret-color: #fff;
}
.vtag-input-el::placeholder { color: rgba(255, 255, 255, 0.45); }
.vtag-input.is-error,
.vtag.vtag-editing.is-error {
  border-color: var(--ds-danger);
  box-shadow: 0 0 0 2px rgba(239, 68, 68, 0.25);
}
.vtag-err {
  flex-basis: 100%;
  margin-top: 2px;
  font-size: 9px;
  color: #fca5a5;
  line-height: 1.2;
}

/* 操作按钮行 */
.vactions {
  display: flex;
  gap: var(--ds-space-1);
  align-items: stretch;
}

/* 主按钮：卡底深色渐变上的实心白底按钮（对比足、一眼可点）。
   .vbtn 同时用于 <Link>（success/published）与 <button>（VFailCTA），
   故 box-sizing / 行高 / 居中显式声明，确保两种标签视觉一致。 */
.vbtn {
  flex: 1 1 auto;
  box-sizing: border-box;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 26px;
  padding: 0 var(--ds-space-3);
  font-size: 10px;
  font-weight: 800;
  line-height: 1;
  letter-spacing: 0.01em;
  text-decoration: none;
  white-space: nowrap;
  border-radius: var(--ds-radius-sm);
  border: none;
  cursor: pointer;
  background: var(--ds-bg);
  color: var(--ds-text);
  box-shadow: 0 2px 8px -2px rgba(0, 0, 0, 0.45);
  transition: background 0.15s ease, transform 0.1s ease, box-shadow 0.15s ease;
}
.vbtn:hover {
  background: var(--ds-bg-alt);
  box-shadow: 0 4px 12px -2px rgba(0, 0, 0, 0.55);
}
.vbtn:active {
  transform: translateY(1px);
  background: var(--ds-bg-deep);
  box-shadow: 0 1px 4px -1px rgba(0, 0, 0, 0.5);
}

/* 重试按钮 in-flight：disabled + 转圈反馈，覆盖 disabled 默认 UA 样式 */
.vbtn:disabled,
.vbtn-loading {
  cursor: not-allowed;
  opacity: 0.6;
  pointer-events: none;
}
.vbtn-loading:hover,
.vbtn-loading:active {
  background: var(--ds-bg);
  box-shadow: 0 2px 8px -2px rgba(0, 0, 0, 0.45);
  transform: none;
}
.vbtn-spinner {
  display: inline-block;
  width: 10px;
  height: 10px;
  margin-right: 4px;
  border: 1.5px solid currentColor;
  border-top-color: transparent;
  border-radius: 50%;
  vertical-align: -1px;
  animation: vbtn-spin 0.7s linear infinite;
}
@keyframes vbtn-spin {
  to { transform: rotate(360deg); }
}

/* ⋯ icon 按钮：与主按钮同高的方形玻璃态按钮 */
.vbtn.ghost {
  flex: 0 0 26px;
  width: 26px;
  min-height: 26px;
  padding: 0;
  font-size: 13px;
  background: rgba(255, 255, 255, 0.16);
  color: var(--ds-text-on-ink);
  box-shadow: none;
  backdrop-filter: blur(6px);
  -webkit-backdrop-filter: blur(6px);
}
.vbtn.ghost:hover {
  background: rgba(255, 255, 255, 0.3);
  box-shadow: none;
}
.vbtn.ghost:active {
  transform: translateY(1px);
  background: rgba(255, 255, 255, 0.38);
  box-shadow: none;
}

/* ⋯ 菜单（VMoreMenu）— antd Dropdown 容器，仅微调间距 */
.v-more-menu .ant-dropdown-menu {
  min-width: 96px;
}

/* 错误详情弹层（VErrorDetailModal）— 业务说明 + 主操作按钮，不展示 raw message */
.v-error-detail-body {
  display: flex;
  flex-direction: column;
  gap: 4px;
}
.v-error-detail-main {
  font-size: 14px;
  font-weight: 500;
  color: var(--ds-text);
  line-height: 1.6;
}
.v-error-detail-muted {
  font-size: 13px;
  color: var(--ds-text-muted);
  line-height: 1.6;
}

/* Modal 走 antd portal，跳出 .dp-revamp 包装，antd-overrides.css 的全局
   ink-on-ink 选择器够不到。这里在 modal className scope 内 local override，
   与 design.md §12 console no-azure 规则对齐。 */
.v-error-detail-modal .ant-btn-primary {
  background: var(--ds-text) !important;
  border-color: var(--ds-text) !important;
  color: var(--ds-text-on-ink) !important;
  background-image: none !important;
  filter: none !important;
  box-shadow: none !important;
}
.v-error-detail-modal .ant-btn-primary:hover,
.v-error-detail-modal .ant-btn-primary:focus {
  background: #000000 !important;
  border-color: #000000 !important;
  color: var(--ds-text-on-ink) !important;
  filter: none !important;
  box-shadow: var(--ds-shadow-cta-primary) !important;
}
.v-error-detail-modal .ant-btn-primary:disabled,
.v-error-detail-modal .ant-btn-primary[disabled] {
  background: var(--ds-bg-deep) !important;
  border-color: var(--ds-bg-deep) !important;
  color: var(--ds-text-subtle) !important;
}

/* ===== Pending skeleton card（spec §3 — 创建反馈三连 阶段 A）=====
 * 与真实视频卡同尺寸（width 240），整卡 pointer-events: none。
 * 缩略图区为 shimmer + spinner；下半区为骨架文本条；左上角 "生成中" 胶囊角标。
 * 颜色全部 ink 风格，无 azure；shimmer 用 --ds-bg-alt / --ds-bg-deep 渐变。 */
.vpending {
  width: 280px;
  aspect-ratio: var(--vcard-aspect);
  box-sizing: border-box;
  background: var(--ds-bg);
  border: 1px dashed var(--ds-border-strong);
  border-radius: var(--ds-radius-sm);
  overflow: hidden;
  pointer-events: none;
  user-select: none;
  position: relative;
}
.vpending-thumb {
  position: absolute;
  inset: 0;
  background: linear-gradient(110deg, var(--ds-bg-alt) 30%, var(--ds-bg-deep) 50%, var(--ds-bg-alt) 70%);
  background-size: 220% 100%;
  animation: vpending-shimmer 1.6s linear infinite;
  display: flex;
  align-items: center;
  justify-content: center;
}
.vpending-spin {
  width: 28px;
  height: 28px;
  border-radius: 999px;
  border: 2px solid var(--ds-border-strong);
  border-top-color: var(--ds-text);
  animation: vpending-spin 1s linear infinite;
}
.vpending--fail {
  border-style: solid;
  border-color: var(--ds-danger, #dc2626);
  pointer-events: auto;
}
.vpending--fail .vpending-thumb {
  background: linear-gradient(180deg, #fff1f2 0%, #fee2e2 100%);
  animation: none;
}
.vpending-fail-icon {
  width: 32px;
  height: 32px;
  border-radius: 999px;
  background: var(--ds-danger, #dc2626);
  color: #ffffff;
  display: flex;
  align-items: center;
  justify-content: center;
  font-weight: 700;
  line-height: 1;
}
.vpending-bottom {
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  padding: var(--ds-space-4) var(--ds-space-2) var(--ds-space-2);
  background: linear-gradient(180deg, rgba(255, 255, 255, 0) 0%, var(--ds-bg) 72%);
}
.vpending-skel {
  background: linear-gradient(110deg, var(--ds-bg-alt) 30%, var(--ds-bg-deep) 50%, var(--ds-bg-alt) 70%);
  background-size: 220% 100%;
  animation: vpending-shimmer 1.6s linear infinite;
  border-radius: 4px;
  height: 10px;
  margin-bottom: 6px;
}
.vpending-skel--title { width: 70%; }
.vpending-skel--desc  { width: 50%; }
.vpending-label {
  position: absolute;
  top: 8px;
  left: 8px;
  background: rgba(24, 24, 27, 0.72);
  color: var(--ds-text-on-ink);
  font-size: 10px;
  padding: 2px 8px;
  border-radius: 999px;
}
.vpending--fail .vpending-label {
  max-width: calc(100% - 16px);
  background: var(--ds-danger, #dc2626);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.vpending-actions {
  position: absolute;
  left: 8px;
  right: 8px;
  bottom: 10px;
  display: flex;
  pointer-events: auto;
}
@keyframes vpending-shimmer {
  0% { background-position: 200% 0; }
  100% { background-position: -200% 0; }
}
@keyframes vpending-spin {
  to { transform: rotate(360deg); }
}

/* 禁点态（spec §4.5）：VFail / VGenerating / VPreprocessing 整卡不响应预览，
   VFail 仅 .vactions 内的按钮 (VFailCTA / VMoreMenu) 仍可点。
   .vcard--disabled 直接挂在外层 .vcard 上（VideoCard.tsx），
   .vthumb pointer-events: none 防止 hover 状态污染光标；.vactions 恢复 auto
   让 "重新生成" 按钮保留可点。 */
.vcard--disabled {
  cursor: default;
  user-select: none;
}
.vcard--disabled .vthumb {
  cursor: default !important;
  pointer-events: none;
}
.vcard--disabled .vactions {
  pointer-events: auto;
}

/* ===== 横版卡（方案 B）：封面 16:9 在上 + 白底信息区下挂（spec 2026-06-15 §4.3）=====
 * 画幅 16:9 由 VideoCard.tsx 内联 style 覆盖 --vcard-aspect 提供（禁止此处写 aspect-ratio 字面量）。
 * 视觉权威：docs/design/2026-06-15-ppt-landscape-video-card.html（方案 B）。
 * 全部颜色用 --ds-* token；竖版无修饰符选择器一律不动。 */
.vcard--landscape { width: 340px; }

/* 信息区：从封面上的暗色叠加层 → 封面下方白底正常流面板 */
.vcard--landscape .vbottom {
  position: static;
  padding: var(--ds-space-3);
  background: var(--ds-bg);
  border-top: 1px solid var(--ds-border);
  color: var(--ds-text);
}
.vcard--landscape .vbottom.bg-fail-tint {
  background: var(--ds-bg);
}
/* 文本反色（白底）：标题 / 描述 / meta / KPI / 失败提示 */
.vcard--landscape .vtitle { font-size: 13px; color: var(--ds-text); margin-bottom: 4px; }
.vcard--landscape .vdesc { font-size: 11px; color: var(--ds-text-muted); margin-bottom: 8px; }
.vcard--landscape .vdesc--empty { color: var(--ds-text-subtle); }
.vcard--landscape .vmeta {
  font-size: 10px;
  color: var(--ds-text-subtle);
  font-family: var(--ds-font-mono);
  margin-bottom: 10px;
}
.vcard--landscape .vkpi { color: var(--ds-text-muted); }
.vcard--landscape .vkpi b { color: var(--ds-text); }
.vcard--landscape .fail-msg { color: var(--ds-text-muted); }

/* inline 编辑态在白底上的 hover / input 反色 */
.vcard--landscape .vtitle--editable:hover,
.vcard--landscape .vdesc--editable:hover {
  background: var(--ds-bg-alt);
  border-color: var(--ds-border);
}
.vcard--landscape .vtitle-input,
.vcard--landscape .vdesc-input {
  color: var(--ds-text);
  background: var(--ds-bg);
  border-color: var(--ds-border-strong);
}

/* 标签在白底上：去玻璃态，浅底描边 */
.vcard--landscape .vtag {
  background: var(--ds-bg-alt);
  color: var(--ds-text-muted);
  border: 1px solid var(--ds-border);
  backdrop-filter: none;
}

/* 操作按钮：白底面板上 secondary（白底描边）为默认，主操作 primary 为 ink 实底 */
.vcard--landscape .vbtn {
  background: var(--ds-bg);
  color: var(--ds-text);
  border: 1px solid var(--ds-border-strong);
  box-shadow: none;
}
.vcard--landscape .vbtn:hover {
  background: var(--ds-bg-alt);
  box-shadow: none;
}
.vcard--landscape .vbtn--primary {
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
  border: none;
}
.vcard--landscape .vbtn--primary:hover {
  background: var(--ds-text);
  opacity: 0.92;
}
.vcard--landscape .vbtn.ghost {
  background: var(--ds-bg);
  color: var(--ds-text);
  border: 1px solid var(--ds-border-strong);
  backdrop-filter: none;
}
.vcard--landscape .vbtn.ghost:hover {
  background: var(--ds-bg-alt);
}

/* 横版封面较矮，播放按钮收小（对齐预览稿 .play-btn.sm） */
.vcard--landscape .play-btn { width: 38px; height: 38px; }

/* ===== 横版占位骨架（VPending）：宽 340，画幅 16:9 由内联 token 提供 ===== */
.vpending--landscape { width: 340px; }

/* ===== 新版卡片设计（2026-06-27）===== */

/* --- 深色实心 pill badge（成片 / EN·英文 等）--- */
.vflag--solid {
  background: rgba(24, 24, 27, 0.88);
  backdrop-filter: blur(8px);
  -webkit-backdrop-filter: blur(8px);
  color: #ffffff;
  font-size: 10px;
  font-weight: 700;
  padding: 3px 8px;
  border-radius: var(--ds-radius-pill);
  letter-spacing: 0.01em;
  line-height: 1.4;
}

/* --- 白底底部信息区（vbottom--card）--- */
/* 覆盖原有绝对定位 + 暗色 gradient，改为流式白底区块 */
.vbottom--card {
  position: relative !important;
  background: var(--ds-bg, #ffffff) !important;
  color: var(--ds-text, #18181b) !important;
  padding: 10px 12px 8px !important;
  border-top: 1px solid var(--ds-border, rgba(24,24,27,0.08));
}

/* 白底底部：标题 */
.vbottom--card .vtitle,
.vtitle--card {
  font-size: 13px;
  font-weight: 700;
  color: var(--ds-text, #18181b);
  line-height: 1.4;
  margin-bottom: 3px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  padding: 0;
  border: none;
  background: none;
}

/* 白底底部：可编辑态标题 hover */
.vbottom--card .vtitle--editable:hover {
  background: var(--ds-bg-alt, #f5f5f4);
  border-color: var(--ds-border-strong, rgba(24,24,27,0.16));
}

/* 白底底部：vtitle-input */
.vbottom--card .vtitle-input {
  color: var(--ds-text, #18181b);
  background: var(--ds-bg, #ffffff);
  border-color: var(--ds-border-strong, rgba(24,24,27,0.2));
}

/* 白底底部：副标题元信息 */
.vmeta--light {
  font-size: 11px;
  color: var(--ds-text-muted, #71717a);
  margin-bottom: 4px;
  line-height: 1.4;
}

/* --- 状态行 --- */
.vstatus {
  display: flex;
  align-items: center;
  gap: 5px;
  font-size: 11px;
  font-weight: 500;
  margin-bottom: 6px;
}
.vstatus--success {
  color: var(--ds-success, #16a34a);
}
.vstatus-dot {
  width: 7px;
  height: 7px;
  border-radius: 50%;
  flex-shrink: 0;
}
.vstatus-dot--success {
  background: var(--ds-success, #16a34a);
}
.vstatus--loading {
  color: var(--ds-text-muted, #71717a);
}
.vstatus-spinner {
  width: 10px;
  height: 10px;
  border: 1.5px solid rgba(113,113,122,0.3);
  border-top-color: var(--ds-text-muted, #71717a);
  border-radius: 50%;
  animation: vcard-spin 0.8s linear infinite;
  flex-shrink: 0;
}

/* 白底底部：vsource-badges 颜色反转为深色 */
.vbottom--card .vsource-badge {
  background: var(--ds-bg-alt, #f5f5f4);
  color: var(--ds-text-muted, #71717a);
  border-color: var(--ds-border, rgba(24,24,27,0.08));
}

/* 白底底部：vdesc */
.vbottom--card .vdesc {
  color: var(--ds-text-muted, #71717a);
  font-size: 11px;
}
.vbottom--card .vdesc--empty { color: var(--ds-text-subtle, #a1a1aa); }

/* 白底底部：vdesc 可编辑 hover */
.vbottom--card .vdesc--editable:hover {
  background: var(--ds-bg-alt, #f5f5f4);
  border-color: var(--ds-border-strong, rgba(24,24,27,0.16));
}
.vbottom--card .vdesc-input {
  color: var(--ds-text, #18181b);
  background: var(--ds-bg, #ffffff);
  border-color: var(--ds-border-strong, rgba(24,24,27,0.2));
}

/* 白底底部：tags */
.vbottom--card .vtag {
  background: var(--ds-bg-alt, #f5f5f4);
  color: var(--ds-text-muted, #71717a);
  border: 1px solid var(--ds-border, rgba(24,24,27,0.08));
  backdrop-filter: none;
}
.vbottom--card .vtag-add {
  background: transparent;
  color: var(--ds-text-muted, #71717a);
  border-color: var(--ds-border-strong, rgba(24,24,27,0.16));
}
.vbottom--card .vtag-add:hover {
  background: var(--ds-bg-alt, #f5f5f4);
  border-color: var(--ds-text-muted, #71717a);
}

/* 白底底部：操作按钮 */
.vbottom--card .vbtn {
  background: var(--ds-bg-alt, #f5f5f4);
  color: var(--ds-text, #18181b);
  border: 1px solid var(--ds-border-strong, rgba(24,24,27,0.16));
  backdrop-filter: none;
}
.vbottom--card .vbtn:hover {
  background: var(--ds-border, rgba(24,24,27,0.08));
}
.vbottom--card .vbtn--primary {
  background: var(--ds-text, #18181b);
  color: #ffffff;
  border-color: var(--ds-text, #18181b);
}
.vbottom--card .vbtn--primary:hover { opacity: 0.85; }

/* 白底底部：失败卡操作区（右侧垂直居中删除图标） */
.vbottom-actions {
  position: absolute;
  right: 8px;
  top: 50%;
  transform: translateY(-50%);
  /* 禁点态下整卡不响应预览，但删除按钮需保持可点 */
  pointer-events: auto;
}
.vbottom-actions .vbtn {
  flex: 0 0 auto;
  box-shadow: none;
}
.vbottom-actions .vbtn:hover {
  box-shadow: none;
}
/* 图标按钮：圆形、紧凑 */
.vbtn--icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 26px;
  height: 26px;
  padding: 0;
  border-radius: 50%;
}
/* 删除图标按钮：危险红，透明底，hover 浅红实底 */
.vbtn--danger {
  color: var(--ds-text-subtle, #a1a1aa);
  border: none;
  background: transparent;
}
.vbtn--danger:hover {
  color: #ffffff;
  background: var(--ds-danger, #dc2626);
}

/* --- 多语言衍生生成中：浅色斜纹占位区 --- */
.vthumb--localized-gen {
  background: #f4f4f5;
}
.bg-hatch {
  position: absolute;
  inset: 0;
  background-image: repeating-linear-gradient(
    -45deg,
    transparent,
    transparent 6px,
    rgba(0,0,0,0.04) 6px,
    rgba(0,0,0,0.04) 12px
  );
}

/* 浅色背景的 vcenter */
.vcenter--light {
  position: absolute;
  top: 50%; left: 50%;
  transform: translate(-50%, -55%);
  text-align: center;
  z-index: 3;
  width: 88%;
}

/* gen-ring 浅色模式：轨道/进度改为深色系 */
.gen-ring--light .track {
  stroke: rgba(24, 24, 27, 0.12);
}
.gen-ring--light .progress {
  stroke: rgba(24, 24, 27, 0.55);
}
.gen-ring--light .gen-ring-glyph {
  color: var(--ds-text-muted, #71717a);
  filter: none;
  animation: none;
}
/* 全球热点工作区 — v6 原型对齐（克制 mono / 画布上的工作区卡） */

.hs-ws {
  width: min(860px, 100%);
  max-width: 100%;
  background: var(--ds-bg, #fff);
  border: 1px solid var(--ds-border, rgba(24, 24, 27, 0.08));
  border-radius: 14px;
  box-shadow:
    0 1px 0 rgba(24, 24, 27, 0.03),
    0 18px 40px -28px rgba(24, 24, 27, 0.28);
  color: var(--ds-text, #18181b);
  display: flex;
  flex-direction: column;
  overflow: hidden;
  max-height: min(560px, calc(100vh - 120px));
  font-size: 13px;
  line-height: 1.5;
}

.hs-ws--video {
  width: fit-content;
  background: transparent;
  border: 0;
  box-shadow: none;
  max-height: none;
  overflow: visible;
}

.hs-ws-head {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 10px 14px 0;
}

.hs-ws-title {
  font-size: 13.5px;
  font-weight: 700;
  letter-spacing: -0.02em;
}

.hs-ws-meta {
  font-size: 11px;
  color: var(--ds-text-muted, #6b7280);
  font-weight: 500;
}

.hs-ws-spacer { flex: 1; }

.hs-ws-close {
  width: 26px;
  height: 26px;
  border: 0;
  background: transparent;
  color: var(--ds-text-subtle, #a1a1aa);
  font-size: 16px;
  cursor: pointer;
  border-radius: 6px;
  line-height: 1;
}

.hs-ws-close:hover {
  color: var(--ds-text, #18181b);
  background: var(--ds-bg-alt, #f5f5f4);
}

.hs-ws-stepper {
  display: flex;
  align-items: center;
  gap: 0;
  padding: 8px 14px 0;
  border-bottom: 1px solid var(--ds-border, rgba(24, 24, 27, 0.08));
  flex-wrap: wrap;
}

.hs-ws-step {
  appearance: none;
  border: 0;
  background: transparent;
  font: inherit;
  font-size: 11.5px;
  font-weight: 600;
  color: var(--ds-text-muted, #6b7280);
  opacity: 0.35;
  padding: 0 10px 8px 0;
  cursor: default;
  position: relative;
}

.hs-ws-step + .hs-ws-step {
  margin-left: 4px;
}

.hs-ws-step.reach {
  opacity: 1;
  cursor: pointer;
  color: #3f3f46;
}

.hs-ws-step.active {
  opacity: 1;
  color: var(--ds-text, #18181b);
  font-weight: 700;
}

.hs-ws-step.active::after {
  content: "";
  position: absolute;
  left: 0;
  right: 10px;
  bottom: -1px;
  height: 1.5px;
  background: var(--ds-text, #18181b);
}

.hs-ws-step.done {
  opacity: 0.7;
}

.hs-ws-step:disabled {
  cursor: default;
}

.hs-ws-step-n {
  font-family: var(--ds-font-mono, ui-monospace, monospace);
  font-size: 9.5px;
  font-weight: 600;
  color: var(--ds-text-subtle, #a1a1aa);
  margin-right: 4px;
}

.hs-ws-step.active .hs-ws-step-n,
.hs-ws-step.done .hs-ws-step-n {
  color: var(--ds-text, #18181b);
}

.hs-ws-stage {
  flex: 1;
  min-height: 0;
  overflow: auto;
}

.hs-pane {
  padding: 12px 14px 10px;
}

.hs-pane--video {
  padding: 4px 0 0;
}

.hs-sec {
  margin: 0 0 2px;
  font-size: 13px;
  font-weight: 700;
  letter-spacing: -0.02em;
}

.hs-lead,
.hs-hint {
  margin: 0 0 10px;
  font-size: 11.5px;
  color: var(--ds-text-muted, #6b7280);
  line-height: 1.4;
  max-width: 56ch;
}

.hs-faint {
  color: var(--ds-text-subtle, #a1a1aa);
  font-size: 11px;
}

.hs-head-words {
  margin: 0 0 10px;
  padding: 8px 10px;
  border-radius: 8px;
  background: #fafafa;
  border: 1px solid var(--ds-border, rgba(24, 24, 27, 0.08));
}

.hs-hw-label {
  font-size: 10px;
  font-weight: 650;
  color: var(--ds-text-subtle, #a1a1aa);
  letter-spacing: 0.04em;
  text-transform: uppercase;
  margin-bottom: 5px;
}

.hs-words {
  display: flex;
  flex-direction: column;
  gap: 5px;
}

.hs-wg {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 5px;
}

.hs-wg-lab {
  font-size: 10px;
  color: var(--ds-text-subtle, #a1a1aa);
  font-weight: 650;
  min-width: 1.5em;
}

.hs-tags {
  display: flex;
  flex-wrap: wrap;
  gap: 4px;
}

.hs-tag {
  height: 20px;
  padding: 0 7px;
  border-radius: 5px;
  border: 1px solid var(--ds-border, rgba(24, 24, 27, 0.08));
  background: #fafafa;
  font-size: 11px;
  font-weight: 600;
  color: #3f3f46;
  display: inline-flex;
  align-items: center;
}

.hs-search-grid {
  display: grid;
  grid-template-columns: minmax(168px, 200px) 1fr;
  gap: 10px;
  align-items: start;
}

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

.hs-block {
  border: 1px solid var(--ds-border, rgba(24, 24, 27, 0.08));
  border-radius: 9px;
  background: var(--ds-bg, #fff);
}

.hs-block-h {
  padding: 6px 10px 2px;
  font-size: 10px;
  font-weight: 650;
  color: var(--ds-text-subtle, #a1a1aa);
  letter-spacing: 0.04em;
  text-transform: uppercase;
  display: flex;
  justify-content: space-between;
  align-items: center;
}

.hs-val {
  font-family: var(--ds-font-mono, ui-monospace, monospace);
  font-size: 10px;
  text-transform: none;
  letter-spacing: 0;
  color: var(--ds-text-muted, #6b7280);
  font-weight: 600;
}

.hs-rail-item {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  padding: 6px 10px;
  border-top: 1px solid rgba(24, 24, 27, 0.045);
}

.hs-rail-t {
  font-size: 11.5px;
  font-weight: 600;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.hs-rail-st {
  font-size: 10px;
  font-weight: 600;
  color: var(--ds-text-subtle, #a1a1aa);
  font-family: var(--ds-font-mono, ui-monospace, monospace);
  flex: none;
}

.hs-rail-st.on {
  color: #3f3f46;
}

.hs-stages {
  padding: 4px 10px 6px;
  max-height: 220px;
  overflow-y: auto;
  scroll-behavior: smooth;
}

.hs-stage-line {
  display: grid;
  grid-template-columns: 12px 1fr;
  gap: 8px;
  padding: 5px 0;
  position: relative;
}

.hs-stage-line:not(:last-child)::before {
  content: "";
  position: absolute;
  left: 5px;
  top: 16px;
  bottom: -2px;
  width: 1px;
  background: rgba(24, 24, 27, 0.12);
}

.hs-stage-ic {
  width: 12px;
  height: 12px;
  margin-top: 2px;
  border-radius: 50%;
  border: 1px solid rgba(24, 24, 27, 0.16);
  display: grid;
  place-items: center;
  font-size: 7px;
  color: #fff;
  background: var(--ds-bg, #fff);
  position: relative;
  z-index: 1;
}

.hs-stage-line.done .hs-stage-ic {
  background: var(--ds-text, #18181b);
  border-color: var(--ds-text, #18181b);
}

.hs-stage-line.act .hs-stage-ic {
  border-color: var(--ds-text, #18181b);
  box-shadow:
    inset 0 0 0 2.5px var(--ds-bg, #fff),
    inset 0 0 0 3.5px var(--ds-text, #18181b);
}

.hs-stage-t {
  font-size: 11.5px;
  font-weight: 650;
  color: var(--ds-text, #18181b);
}

.hs-stage-line.pending .hs-stage-t {
  color: var(--ds-text-subtle, #a1a1aa);
  font-weight: 500;
}

.hs-stage-logs {
  margin-top: 3px;
  display: flex;
  flex-direction: column;
  gap: 1px;
}

.hs-stage-ln {
  font-family: var(--ds-font-mono, ui-monospace, monospace);
  font-size: 10.5px;
  color: var(--ds-text-muted, #6b7280);
  line-height: 1.35;
  display: flex;
  gap: 6px;
}

.hs-stage-ts {
  color: #c4c4c8;
  flex: none;
}

.hs-win-note {
  margin: 0 10px 8px;
  padding: 5px 8px;
  border-radius: 6px;
  background: #fafafa;
  border: 1px solid var(--ds-border, rgba(24, 24, 27, 0.08));
  font-size: 11px;
  color: var(--ds-text-muted, #6b7280);
}

.hs-win-note b {
  color: var(--ds-text, #18181b);
  font-weight: 650;
}

/* extract */
.hs-rec {
  display: block;
  width: 100%;
  text-align: left;
  font: inherit;
  cursor: pointer;
  border: 1px solid var(--ds-text, #18181b);
  border-radius: 12px;
  padding: 14px;
  margin-bottom: 10px;
  background: var(--ds-bg, #fff);
  color: inherit;
}

.hs-rec:disabled {
  cursor: wait;
  opacity: 0.85;
}

.hs-rec-eyebrow {
  font-size: 10.5px;
  font-weight: 700;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--ds-text-subtle, #a1a1aa);
  margin-bottom: 8px;
}

.hs-rec-title {
  font-size: 15px;
  font-weight: 700;
  line-height: 1.35;
  letter-spacing: -0.03em;
}

.hs-rec-sum {
  margin: 10px 0 0;
  font-size: 12.5px;
  color: var(--ds-text-muted, #6b7280);
  line-height: 1.6;
}

.hs-rec-why {
  margin-top: 10px;
  font-size: 12px;
  color: #3f3f46;
  line-height: 1.55;
}

.hs-rec-why span {
  color: var(--ds-text-subtle, #a1a1aa);
  font-weight: 650;
  margin-right: 6px;
}

.hs-rec-meta {
  display: flex;
  flex-wrap: wrap;
  gap: 6px 14px;
  margin-top: 12px;
  padding-top: 12px;
  border-top: 1px solid var(--ds-border, rgba(24, 24, 27, 0.08));
  font-size: 11.5px;
  color: var(--ds-text-muted, #6b7280);
}

.hs-rec-meta b {
  color: var(--ds-text, #18181b);
  font-weight: 650;
}

.hs-empty {
  padding: 16px;
  border: 1px dashed rgba(24, 24, 27, 0.16);
  border-radius: 10px;
  color: var(--ds-text-muted, #6b7280);
  font-size: 12.5px;
  margin-bottom: 10px;
}

.hs-drawer {
  border: 1px solid var(--ds-border, rgba(24, 24, 27, 0.08));
  border-radius: 10px;
  overflow: hidden;
}

.hs-drawer summary {
  list-style: none;
  cursor: pointer;
  padding: 11px 12px;
  font-size: 12px;
  font-weight: 650;
  color: #3f3f46;
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 8px;
}

.hs-drawer summary::-webkit-details-marker {
  display: none;
}

.hs-drawer summary em {
  font-style: normal;
  font-weight: 500;
  color: var(--ds-text-subtle, #a1a1aa);
  font-size: 11.5px;
}

.hs-drawer[open] summary {
  border-bottom: 1px solid var(--ds-border, rgba(24, 24, 27, 0.08));
}

.hs-cand-list {
  display: grid;
  gap: 0;
}

.hs-cand {
  width: 100%;
  text-align: left;
  font: inherit;
  border: 0;
  border-top: 1px solid var(--ds-border, rgba(24, 24, 27, 0.08));
  background: var(--ds-bg, #fff);
  padding: 12px;
  cursor: pointer;
}

.hs-cand:first-child {
  border-top: 0;
}

.hs-cand:hover {
  background: #fafafa;
}

.hs-cand.sel {
  background: var(--ds-bg-alt, #f5f5f4);
}

.hs-cand-ct {
  font-size: 12.5px;
  font-weight: 650;
  line-height: 1.4;
  display: flex;
  gap: 8px;
  align-items: flex-start;
}

.hs-cand-ck {
  width: 12px;
  height: 12px;
  border-radius: 50%;
  flex: none;
  margin-top: 3px;
  border: 1px solid rgba(24, 24, 27, 0.16);
}

.hs-cand.sel .hs-cand-ck {
  background: var(--ds-text, #18181b);
  border-color: var(--ds-text, #18181b);
}

.hs-cand-cw {
  font-size: 11.5px;
  color: var(--ds-text-muted, #6b7280);
  margin: 5px 0 0 20px;
}

.hs-cand-cm {
  margin: 6px 0 0 20px;
  font-size: 11px;
  color: var(--ds-text-subtle, #a1a1aa);
  font-family: var(--ds-font-mono, ui-monospace, monospace);
}

/* copy */
.hs-legend {
  display: flex;
  gap: 14px;
  flex-wrap: wrap;
  align-items: center;
  margin-bottom: 10px;
  font-size: 11px;
  color: var(--ds-text-muted, #6b7280);
}

.hs-lg {
  display: inline-flex;
  align-items: center;
  gap: 5px;
}

.hs-lg i {
  width: 6px;
  height: 6px;
  border-radius: 1px;
  background: #a1a1aa;
}

.hs-lg.industry i {
  background: #71717a;
}

.hs-lg.product i {
  background: var(--ds-text, #18181b);
}

.hs-legend-note {
  margin-left: auto;
  color: var(--ds-text-subtle, #a1a1aa);
}

.hs-copy-doc {
  border: 1px solid var(--ds-border, rgba(24, 24, 27, 0.08));
  border-radius: 10px;
  overflow: hidden;
}

.hs-copy-top {
  padding: 9px 12px;
  border-bottom: 1px solid var(--ds-border, rgba(24, 24, 27, 0.08));
  font-size: 11.5px;
  color: var(--ds-text-muted, #6b7280);
  background: #fafafa;
}

.hs-copy-sections {
  border-bottom: 1px solid rgba(24, 24, 27, 0.04);
}

.hs-seg-row {
  display: grid;
  grid-template-columns: 48px 1fr;
  gap: 10px;
  padding: 10px 12px;
  border-bottom: 1px solid rgba(24, 24, 27, 0.04);
}

.hs-seg-row:last-child {
  border-bottom: 0;
}

.hs-seg-tag {
  font-size: 10.5px;
  font-weight: 650;
  color: var(--ds-text-subtle, #a1a1aa);
  padding-top: 2px;
}

.hs-seg-txt {
  font-size: 12.5px;
  line-height: 1.65;
  color: var(--ds-text-muted, #6b7280);
}

.hs-copy-edit {
  padding: 10px 12px;
}

.hs-copy-edit .ant-input {
  border-radius: 8px;
  font-size: 13px;
  line-height: 1.65;
}

.hs-copy-foot {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 8px 12px;
  border-top: 1px solid var(--ds-border, rgba(24, 24, 27, 0.08));
  background: #fafafa;
}

.hs-cnt {
  font-family: var(--ds-font-mono, ui-monospace, monospace);
  font-size: 11px;
  color: var(--ds-text-muted, #6b7280);
}

.hs-polish {
  margin: 10px 0 0;
  font-size: 11.5px;
  color: var(--ds-text-subtle, #a1a1aa);
}

/* video card */
.hs-video-card {
  position: relative;
  width: 260px;
  aspect-ratio: 9 / 15.6;
  border-radius: 12px;
  overflow: hidden;
  background: #111113;
  box-shadow: 0 24px 48px -28px rgba(24, 24, 27, 0.55);
}

.hs-video-st {
  position: absolute;
  top: 12px;
  left: 12px;
  z-index: 2;
  font-size: 11px;
  font-weight: 650;
  color: rgba(255, 255, 255, 0.85);
}

.hs-video-ov {
  position: absolute;
  inset: 0;
  display: grid;
  place-items: center;
}

.hs-video-ov img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.hs-video-ring {
  width: 36px;
  height: 36px;
  border-radius: 50%;
  border: 1.5px solid rgba(255, 255, 255, 0.15);
  border-top-color: rgba(255, 255, 255, 0.85);
  animation: hs-spin 0.85s linear infinite;
}

@keyframes hs-spin {
  to { transform: rotate(360deg); }
}

.hs-video-bar {
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  height: 2px;
  background: rgba(255, 255, 255, 0.08);
}

.hs-video-bar > i {
  display: block;
  height: 100%;
  background: rgba(255, 255, 255, 0.7);
}

/* footer */
.hs-fbar {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 8px 12px;
  border-top: 1px solid var(--ds-border, rgba(24, 24, 27, 0.08));
  background: #fafafa;
}

.hs-fbar-grow {
  flex: 1;
  font-size: 11px;
  color: var(--ds-text-muted, #6b7280);
  min-width: 0;
}

.hs-btn-ink.ant-btn,
.hs-btn-ink {
  background: var(--ds-text, #18181b) !important;
  border-color: var(--ds-text, #18181b) !important;
  color: #fff !important;
  font-weight: 650;
  height: 30px;
  border-radius: 7px;
}

.hs-btn-ghost.ant-btn,
.hs-btn-ghost {
  background: transparent !important;
  border-color: transparent !important;
  color: var(--ds-text-muted, #6b7280) !important;
  font-weight: 650;
  height: 30px;
  box-shadow: none !important;
}

.hs-btn-ghost.ant-btn:hover {
  color: var(--ds-text, #18181b) !important;
  background: var(--ds-bg-alt, #f5f5f4) !important;
}

/* 兼容旧测试/父级容器：去掉旧满屏雷达高度约束影响 */
.mm-hotspot-ws:has(.hs-ws) {
  display: block;
  gap: 0;
}
/* PPT 转视频工作区 — 遵守 console no-azure 规则（design.md §12）
   所有颜色用 --ds-* tokens；CTA 用 .mm-cta-ink（黑底白字）；
   azure 仅允许用于缩略图轨道当前页竖条标识（≤4px 宽度）。 */

.mm-ppt-ws {
  display: flex;
  flex-direction: column;
  gap: 20px;
  padding: 24px;
  min-height: 320px;
  background: var(--ds-bg);
  color: var(--ds-text);
  font-family: var(--ds-font, inherit);
}

/* ── mm-cta-ink scoped to this workspace (mirrors .mm-hotspot-ws pattern) ──
   覆盖上传根(.mm-ppt-ws)与编辑器根(.mm-ppt-editor)两个阶段，
   否则编辑器「一键合成」会回落到 Ant 默认 azure 主色（违反 console no-azure / spec §50 ink-on-ink）。 */
.mm-ppt-ws .mm-cta-ink.ant-btn,
.mm-ppt-ws .mm-cta-ink.ant-btn-primary,
.mm-ppt-ws .mm-cta-ink.ant-btn-default,
.mm-ppt-ws .mm-cta-ink.ant-btn:focus,
.mm-ppt-ws .mm-cta-ink.ant-btn:hover,
.mm-ppt-ws .mm-cta-ink.ant-btn-primary:focus,
.mm-ppt-ws .mm-cta-ink.ant-btn-primary:hover,
.mm-ppt-editor .mm-cta-ink.ant-btn,
.mm-ppt-editor .mm-cta-ink.ant-btn-primary,
.mm-ppt-editor .mm-cta-ink.ant-btn-default,
.mm-ppt-editor .mm-cta-ink.ant-btn:focus,
.mm-ppt-editor .mm-cta-ink.ant-btn:hover,
.mm-ppt-editor .mm-cta-ink.ant-btn-primary:focus,
.mm-ppt-editor .mm-cta-ink.ant-btn-primary:hover {
  background: var(--ds-text) !important;
  border-color: var(--ds-text) !important;
  color: var(--ds-text-on-ink) !important;
  box-shadow: none !important;
}

/* ── 上传阶段 ── */
.mm-ppt-upload {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 16px;
}

.mm-ppt-dropzone {
  width: 100%;
  min-height: 140px;
  border: 1.5px dashed var(--ds-border);
  border-radius: var(--ds-radius-lg);
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 8px;
  cursor: pointer;
  background: var(--ds-bg-alt);
  transition: border-color 0.15s;
}

.mm-ppt-dropzone:hover,
.mm-ppt-dropzone--drag-over {
  border-color: var(--ds-text-muted);
  background: var(--ds-bg);
}

.mm-ppt-dropzone-icon {
  font-size: 28px;
  color: var(--ds-text-muted);
}

.mm-ppt-dropzone-title {
  font-size: 14px;
  font-weight: 500;
  color: var(--ds-text);
}

.mm-ppt-dropzone-hint {
  font-size: 12px;
  color: var(--ds-text-subtle);
}

.mm-ppt-ratio {
  display: flex;
  gap: 8px;
  align-items: center;
}

.mm-ppt-ratio-label {
  font-size: 13px;
  color: var(--ds-text-muted);
}

.mm-ppt-ratio-option {
  padding: 4px 12px;
  border-radius: var(--ds-radius-sm);
  border: 1px solid var(--ds-border);
  font-size: 13px;
  cursor: pointer;
  background: var(--ds-bg);
  color: var(--ds-text);
  transition: background 0.12s, border-color 0.12s;
}

.mm-ppt-ratio-option--selected {
  background: var(--ds-text);
  color: var(--ds-bg);
  border-color: var(--ds-text);
}

.mm-ppt-file-list {
  width: 100%;
  display: flex;
  flex-direction: column;
  gap: 6px;
}

.mm-ppt-file-item {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 6px 10px;
  border-radius: var(--ds-radius-sm);
  border: 1px solid var(--ds-border);
  background: var(--ds-bg-alt);
  font-size: 13px;
}

.mm-ppt-file-name {
  flex: 1;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  color: var(--ds-text);
}

.mm-ppt-file-remove {
  background: none;
  border: none;
  cursor: pointer;
  font-size: 14px;
  color: var(--ds-text-muted);
  padding: 0;
  line-height: 1;
}

/* ── 进度/处理阶段 ── */
.mm-ppt-progress {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 16px;
  padding: 32px 0;
}

.mm-ppt-progress-label {
  font-size: 14px;
  color: var(--ds-text-muted);
}

.mm-ppt-progress-bar {
  width: 100%;
  height: 4px;
  background: var(--ds-border);
  border-radius: 2px;
  overflow: hidden;
}

.mm-ppt-progress-fill {
  height: 100%;
  background: var(--ds-text);
  transition: width 0.3s ease;
}

/* ── 底部 action ── */
.mm-ppt-actions {
  display: flex;
  justify-content: flex-end;
  gap: 8px;
}

/* ── 编辑器阶段（方案 B：左轨道 + 右大图） ── */
.mm-ppt-editor {
  display: flex;
  flex-direction: column;
  gap: 0;
  height: 100%;
  min-height: 400px;
  /* 卡片高度由右侧（预览+脚本）决定并封顶；页数多时左缩略图轨道内部滚动，
     不再把整张卡撑高（缩略图轨道 .mm-ppt-thumb-rail 已 overflow-y:auto，
     此前因 editor 无高度上限、overflow 机制失效）。 */
  max-height: min(80vh, 460px);
}

.mm-ppt-editor-head {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 12px 16px;
  border-bottom: 1px solid var(--ds-border);
  background: var(--ds-bg);
}

.mm-ppt-editor-title {
  flex: 1;
  font-size: 14px;
  font-weight: 500;
  color: var(--ds-text);
}

.mm-ppt-editor-meta {
  font-size: 12px;
  color: var(--ds-text-subtle);
}

.mm-ppt-editor-body {
  display: flex;
  flex: 1;
  min-height: 0;
  overflow: hidden;
}

/* 左侧缩略图轨道 */
.mm-ppt-thumb-rail {
  width: 88px;
  flex-shrink: 0;
  overflow-y: auto;
  overflow-x: hidden;
  border-right: 1px solid var(--ds-border);
  background: var(--ds-bg-alt);
  display: flex;
  flex-direction: column;
  gap: 6px;
  padding: 8px 6px;
}

.mm-ppt-thumb-item {
  position: relative;
  cursor: pointer;
  border-radius: 4px;
  overflow: hidden;
  border: 1.5px solid transparent;
  transition: border-color 0.12s;
  /* 缩略图保持原始尺寸；页数多时轨道（已 overflow-y:auto）内部滚动，
     而不是被 flex 列默认 flex-shrink:1 压扁成细条。 */
  flex-shrink: 0;
}

.mm-ppt-thumb-item--active {
  border-color: var(--ds-text);
}

/* azure 仅限当前页竖条标识（≤4px，设计系统允许的最小元素） */
.mm-ppt-thumb-item--active::before {
  content: '';
  position: absolute;
  left: 0;
  top: 0;
  bottom: 0;
  width: 3px;
  background: var(--ds-accent, #4da6ff);
  z-index: 1;
}

.mm-ppt-thumb-img {
  display: block;
  width: 100%;
  aspect-ratio: 16 / 10;
  object-fit: cover;
  background: var(--ds-border);
}

.mm-ppt-thumb-no {
  position: absolute;
  bottom: 2px;
  right: 4px;
  font-size: 10px;
  color: var(--ds-text-subtle);
  background: rgba(255,255,255,0.8);
  border-radius: 2px;
  padding: 0 3px;
}

.mm-ppt-thumb-del {
  position: absolute;
  top: 2px;
  right: 2px;
  background: var(--ds-bg);
  border: 1px solid var(--ds-border);
  border-radius: 3px;
  width: 16px;
  height: 16px;
  cursor: pointer;
  font-size: 10px;
  display: none;
  align-items: center;
  justify-content: center;
  color: var(--ds-text-muted);
}

.mm-ppt-thumb-item:hover .mm-ppt-thumb-del {
  display: flex;
}

/* 右侧编辑区 */
.mm-ppt-main {
  flex: 1;
  display: flex;
  flex-direction: column;
  gap: 0;
  overflow: hidden;
}

.mm-ppt-preview {
  width: 100%;
  max-height: 220px;
  overflow: hidden;
  background: var(--ds-bg-alt);
  display: flex;
  align-items: center;
  justify-content: center;
}

.mm-ppt-preview-img {
  max-width: 100%;
  max-height: 220px;
  object-fit: contain;
}

.mm-ppt-preview-placeholder {
  width: 100%;
  height: 160px;
  background: var(--ds-border);
  border-radius: 4px;
}

.mm-ppt-script-area {
  flex: 1;
  display: flex;
  flex-direction: column;
  gap: 8px;
  padding: 12px 16px;
  border-top: 1px solid var(--ds-border);
  overflow-y: auto;
}

.mm-ppt-script-label {
  font-size: 12px;
  color: var(--ds-text-subtle);
}

.mm-ppt-script-textarea {
  width: 100%;
  min-height: 80px;
  padding: 8px 10px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
  font-size: 13px;
  line-height: 1.6;
  resize: vertical;
  background: var(--ds-bg);
  color: var(--ds-text);
  font-family: inherit;
  transition: border-color 0.12s;
}

.mm-ppt-script-textarea:focus {
  outline: none;
  border-color: var(--ds-text-muted);
}

.mm-ppt-page-actions {
  display: flex;
  gap: 8px;
  flex-wrap: wrap;
}

.mm-ppt-audio-player {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 6px 10px;
  border-radius: var(--ds-radius-sm);
  border: 1px solid var(--ds-border);
  background: var(--ds-bg-alt);
  font-size: 12px;
  color: var(--ds-text-muted);
}

.mm-ppt-editor-footer {
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: 8px;
  padding: 12px 16px;
  border-top: 1px solid var(--ds-border);
  background: var(--ds-bg);
}
/*
 * S9 矩阵账号管理 · MatrixAccountCard 局部样式
 *
 * Plan: docs/superpowers/plans/2026-05-25-s9-matrix-account-inline-card.md
 * 视觉范本: docs/design/console-redesign/2026-05-14-product-canvas/s9-account-inline-card.html
 *
 * 本文件按 Task 1.1 -> 1.2 -> 2.x -> 3.x 累加；本次仅追加 PlatformTileGrid 段。
 */

/* ============ PlatformTileGrid (Task 1.1) ============ */
._platTileGrid_1n6x8_11 {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: var(--ds-space-3);
}

._platTile_1n6x8_11 {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: var(--ds-space-2);
  padding: var(--ds-space-4) var(--ds-space-3);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-md);
  background: var(--ds-bg);
  cursor: pointer;
  text-align: center;
  transition: border-color 0.15s, background 0.15s, transform 0.15s;
}

._platTile_1n6x8_11:hover:not(:disabled) {
  border-color: var(--ds-text);
  background: var(--ds-bg-alt);
  transform: translateY(-1px);
}

._platTileEmoji_1n6x8_37 {
  width: 44px;
  height: 44px;
  border-radius: var(--ds-radius-md);
  background: var(--ds-bg-alt);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 22px;
}

._platTileName_1n6x8_48 {
  font-size: 13px;
  font-weight: 700;
  color: var(--ds-text);
  letter-spacing: -0.01em;
}

._platTileCta_1n6x8_55 {
  font-size: 11px;
  font-weight: 600;
  color: var(--ds-text-muted);
}

._platTile_1n6x8_11:hover:not(:disabled) ._platTileCta_1n6x8_55 {
  color: var(--ds-text);
}

._platTilePending_1n6x8_65 {
  cursor: not-allowed;
  background: var(--ds-bg-alt);
}

._platTilePending_1n6x8_65 ._platTileEmoji_1n6x8_37 {
  filter: grayscale(1);
  opacity: 0.6;
}

._platTilePending_1n6x8_65 ._platTileName_1n6x8_48,
._platTilePending_1n6x8_65 ._platTileCta_1n6x8_55 {
  color: var(--ds-text-subtle);
}

/* ============ Card 骨架（自 _base.css .canvas-card 翻译，Task 1.2） ============ */
/* 作为 ReactFlow node 内容渲染：尺寸由内部内容决定，定位由 MindmapCanvas
 * nodes 数组的 position 控制。卡内部需要明确宽度（empty/expanded 540 /
 * collapsed 280），见 .cardCollapsed / .cardExpanded。 */
._card_1n6x8_83 {
  background: var(--ds-surface);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-lg);
  box-shadow: var(--ds-shadow-deep);
  overflow: hidden;
  display: flex;
  flex-direction: column;
  flex-shrink: 0;
}

._cardExpanded_1n6x8_83 {
  border-color: var(--ds-border-strong);
  box-shadow: var(--ds-shadow-deep);
  width: 540px;
}

._cardHead_1n6x8_101 {
  display: flex;
  align-items: center;
  gap: var(--ds-space-2);
  padding: var(--ds-space-3) var(--ds-space-4);
  border-bottom: 1px solid var(--ds-border);
}

._cardEmoji_1n6x8_109 {
  font-size: 15px;
  flex-shrink: 0;
}

._cardTitle_1n6x8_114 {
  font-size: 13px;
  font-weight: 700;
  color: var(--ds-text);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

._cardTypeTag_1n6x8_123 {
  margin-left: auto;
  flex-shrink: 0;
  font-size: 11px;
  font-weight: 600;
  color: var(--ds-text-subtle);
  padding: 2px var(--ds-space-2);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-pill);
}

._expandCollapseBtn_1n6x8_134 {
  display: inline-flex;
  align-items: center;
  gap: var(--ds-space-1);
  height: 28px;
  padding: 0 var(--ds-space-3);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg);
  font-size: 11px;
  font-weight: 600;
  color: var(--ds-text-muted);
  cursor: pointer;
}

/* ============ ex-body / ex-block / ex-label（Task 1.2） ============ */
._exBody_1n6x8_150 {
  padding: var(--ds-space-5);
  display: flex;
  flex-direction: column;
  gap: var(--ds-space-5);
}

/* Module section · Kicker + 左 strip 风格（option 1）：
 * 每个 .exBlock 是一个模块段（授权概览 / 平台与账号 / 授权事件），
 * 顶部 3px ink left-strip + UPPERCASE kicker，content 自然展开无 bg 包。 */
._exBlock_1n6x8_158 {
  display: flex;
  flex-direction: column;
  gap: var(--ds-space-3);
  padding-left: var(--ds-space-4);
  position: relative;
}

._exBlock_1n6x8_158::before {
  content: '';
  position: absolute;
  left: 0;
  top: 2px;
  width: 3px;
  height: 14px;
  background: var(--ds-text);
  border-radius: var(--ds-radius-pill);
}

._exLabel_1n6x8_179 {
  display: flex;
  align-items: baseline;
  gap: var(--ds-space-2);
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--ds-text);
}

/* labelLink: section header 右侧 inline action（"刷新所有 →" / "+ 新增授权"）。
 * 按 design.md §12 console scope no-azure：用 ink-text link 风格，不带 button
 * 边框/底色（reset 浏览器 <button> 默认 user-agent style）。hover 时 ink 加深。 */
._labelLink_1n6x8_193 {
  margin-left: auto;
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0;
  text-transform: none;
  color: var(--ds-text-muted);
  background: transparent;
  border: 0;
  padding: 0;
  font-family: inherit;
  cursor: pointer;
  transition: color 0.15s;
}

._labelLink_1n6x8_193:hover {
  color: var(--ds-text);
}

/* ============ empty-block 引导块（Task 1.2） ============ */
._emptyBlock_1n6x8_213 {
  display: flex;
  flex-direction: column;
  gap: var(--ds-space-2);
  padding: var(--ds-space-3);
  background: var(--ds-bg-alt);
  border: 1px dashed var(--ds-border-strong);
  border-radius: var(--ds-radius-md);
}

._emptyTitle_1n6x8_223 {
  font-size: 12px;
  font-weight: 700;
  color: var(--ds-text);
}

._emptyDesc_1n6x8_229 {
  font-size: 11px;
  color: var(--ds-text-muted);
  line-height: 1.6;
}

/* ============ card-actions 底部按钮行（Task 1.2，expanded 卡含 top border） ============ */
._cardActions_1n6x8_236 {
  display: flex;
  flex-wrap: wrap;
  gap: var(--ds-space-2);
  padding: var(--ds-space-3) var(--ds-space-5);
  border-top: 1px solid var(--ds-border);
}

._cardAction_1n6x8_236 {
  font-size: 11px;
  font-weight: 600;
  color: var(--ds-text-muted);
  padding: var(--ds-space-1) var(--ds-space-2);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg);
  cursor: pointer;
  transition: border-color 0.15s, color 0.15s, background 0.15s;
}

._cardAction_1n6x8_236:hover {
  border-color: var(--ds-border-strong);
  color: var(--ds-text);
  background: var(--ds-bg-alt);
}

/* 主 CTA 按钮（同预览稿 §12 console scope · .card-action--primary） */
._cardActionPrimary_1n6x8_263 {
  border: none;
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
  font-weight: 700;
}

._cardActionPrimary_1n6x8_263:hover {
  opacity: 0.85;
  /* primary 按钮 hover 不走 .cardAction:hover 的边框/颜色变化 */
  border-color: transparent;
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
}

/* ============ collapsed 280px 卡（Task 3.2） ============ */
._cardCollapsed_1n6x8_83 {
  width: 280px;
}

/* card-body：collapsed 内部排版（区别于 expanded 的 ex-body） */
._cardBody_1n6x8_284 {
  padding: var(--ds-space-4);
  display: flex;
  flex-direction: column;
  gap: var(--ds-space-3);
}

/* ---- 概览数字行 .acct-summary（C-collapsed 砍掉「即将过期」，只剩 2 stat） ---- */
._summary_1n6x8_292 {
  display: flex;
  gap: var(--ds-space-3);
}

._summaryItem_1n6x8_297 {
  flex: 1;
  display: flex;
  flex-direction: column;
  gap: 2px;
}

._summaryNum_1n6x8_304 {
  font-size: 18px;
  font-weight: 800;
  letter-spacing: -0.01em;
  color: var(--ds-text);
  font-variant-numeric: tabular-nums;
}

._summaryLabel_1n6x8_312 {
  font-size: 11px;
  color: var(--ds-text-subtle);
}

/* ---- 平台 logo 行 .platform-row ---- */
._platformRow_1n6x8_318 {
  display: flex;
  align-items: center;
  gap: var(--ds-space-2);
}

._platformChip_1n6x8_324 {
  width: 28px;
  height: 28px;
  border-radius: var(--ds-radius-pill);
  background: var(--ds-bg-deep);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 14px;
  color: var(--ds-text);
  position: relative;
}

._platformChipDim_1n6x8_337 {
  opacity: 0.35;
  filter: grayscale(1);
}

._chipDot_1n6x8_342 {
  position: absolute;
  right: -2px;
  bottom: -2px;
  width: 8px;
  height: 8px;
  border-radius: var(--ds-radius-pill);
  border: 1.5px solid var(--ds-bg);
}

._chipDotOk_1n6x8_352 { background: var(--ds-success); }
._chipDotWarn_1n6x8_353 { background: var(--ds-warning); }

/* ---- 最新动态迷你列表 .acct-activity ---- */
._activity_1n6x8_356 {
  display: flex;
  flex-direction: column;
  gap: var(--ds-space-2);
  padding-top: var(--ds-space-1);
}

._activityRow_1n6x8_363 {
  display: flex;
  align-items: flex-start;
  gap: var(--ds-space-2);
  font-size: 11px;
  line-height: 1.5;
}

._activityDot_1n6x8_371 {
  width: 6px;
  height: 6px;
  border-radius: var(--ds-radius-pill);
  margin-top: 6px;
  flex-shrink: 0;
}

._activityDotOk_1n6x8_379   { background: var(--ds-success); }
._activityDotInfo_1n6x8_380 { background: var(--ds-text); }
._activityDotWarn_1n6x8_381 { background: var(--ds-warning); }

._activityText_1n6x8_383 {
  flex: 1;
  min-width: 0;
  color: var(--ds-text);
}

._activityText_1n6x8_383 strong { font-weight: 700; }

._activityTime_1n6x8_391 {
  flex-shrink: 0;
  font-size: 10px;
  color: var(--ds-text-subtle);
  font-variant-numeric: tabular-nums;
  padding-top: 1px;
}

/* ============ expanded 540px 卡内部布局（Task 3.3） ============ */

/* ---- 顶部概览 4 数 .acct-summary ---- */
._acctSummary_1n6x8_402 {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: var(--ds-space-3);
}

._statItem_1n6x8_408 {
  display: flex;
  flex-direction: column;
  gap: 2px;
}

._statNum_1n6x8_414 {
  font-size: 22px;
  font-weight: 800;
  letter-spacing: -0.01em;
  color: var(--ds-text);
  font-variant-numeric: tabular-nums;
}

._statLabel_1n6x8_422 {
  font-size: 11px;
  color: var(--ds-text-subtle);
}

/* ---- 平台 × 账号 上下布局：tab bar + 全宽 list ---- */
._tabBar_1n6x8_428 {
  display: flex;
  gap: 0;
  border-bottom: 1px solid var(--ds-border);
  margin-bottom: var(--ds-space-3);
  overflow-x: auto;
}

._tabItem_1n6x8_436 {
  display: flex;
  align-items: center;
  gap: 6px;
  padding: var(--ds-space-2) var(--ds-space-3);
  background: transparent;
  border: 0;
  cursor: pointer;
  position: relative;
  font: inherit;
  color: var(--ds-text-subtle);
  white-space: nowrap;
  transition: color 0.15s;
  flex: 1;
  justify-content: center;
  min-width: 0;
}

._tabItem_1n6x8_436:hover {
  color: var(--ds-text);
}

._tabItemSelected_1n6x8_458 {
  color: var(--ds-text);
  font-weight: 700;
}

._tabItemSelected_1n6x8_458::after {
  content: '';
  position: absolute;
  left: var(--ds-space-2);
  right: var(--ds-space-2);
  bottom: -1px;
  height: 2px;
  background: var(--ds-text);
  border-radius: var(--ds-radius-pill);
}

._tabIcon_1n6x8_474 {
  width: 22px;
  height: 22px;
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg-deep);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 12px;
  flex-shrink: 0;
}

._tabName_1n6x8_486 {
  font-size: 13px;
}

._tabCount_1n6x8_490 {
  font-size: 10px;
  font-weight: 700;
  color: var(--ds-text-subtle);
  background: var(--ds-bg-alt);
  padding: 0 6px;
  border-radius: var(--ds-radius-pill);
  font-variant-numeric: tabular-nums;
}

._tabItemSelected_1n6x8_458 ._tabCount_1n6x8_490 {
  background: var(--ds-text);
  color: var(--ds-bg);
}

._tabPanelHead_1n6x8_505 {
  display: flex;
  align-items: center;
  gap: var(--ds-space-2);
  margin-bottom: var(--ds-space-3);
  font-size: 12px;
  color: var(--ds-text-subtle);
}

._tabPanelHead_1n6x8_505 ._platDetailName_1n6x8_514 {
  font-size: 13px;
  color: var(--ds-text);
}

/* 左：mini 平台列表 */
._miniPlatformList_1n6x8_520 {
  display: flex;
  flex-direction: column;
  gap: 2px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-md);
  background: var(--ds-bg);
  overflow: hidden;
}

._miniPlatRow_1n6x8_530 {
  display: flex;
  align-items: center;
  gap: var(--ds-space-2);
  padding: var(--ds-space-2) var(--ds-space-3);
  cursor: pointer;
  position: relative;
  transition: background 0.15s;
  border: none;
  background: var(--ds-bg);
  text-align: left;
  font: inherit;
  color: inherit;
  width: 100%;
}

._miniPlatRow_1n6x8_530 + ._miniPlatRow_1n6x8_530 { border-top: 1px solid var(--ds-border); }

._miniPlatRow_1n6x8_530:hover { background: var(--ds-bg-alt); }

._miniPlatRowSelected_1n6x8_550 {
  background: var(--ds-bg-alt);
  font-weight: 700;
}

._miniPlatRowSelected_1n6x8_550::before {
  content: "";
  position: absolute;
  left: 0;
  top: 50%;
  transform: translateY(-50%);
  width: 3px;
  height: 22px;
  border-radius: 0 var(--ds-radius-pill) var(--ds-radius-pill) 0;
  background: var(--ds-text);
}

._miniPlatRowSelected_1n6x8_550::after {
  content: "›";
  position: absolute;
  right: calc(var(--ds-space-3) * -1 - 4px);
  top: 50%;
  transform: translateY(-55%);
  font-size: 22px;
  font-weight: 400;
  line-height: 1;
  color: var(--ds-text);
  pointer-events: none;
}

._miniPlatIcon_1n6x8_580 {
  width: 22px;
  height: 22px;
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg-deep);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 12px;
  flex-shrink: 0;
}

._miniPlatName_1n6x8_592 {
  flex: 1;
  min-width: 0;
  font-size: 12px;
  font-weight: 600;
  color: var(--ds-text);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

._miniPlatCount_1n6x8_603 {
  font-size: 10px;
  font-weight: 700;
  color: var(--ds-text-subtle);
  font-variant-numeric: tabular-nums;
}

._miniPlatDot_1n6x8_610 {
  width: 6px;
  height: 6px;
  border-radius: var(--ds-radius-pill);
  flex-shrink: 0;
}

._miniPlatDotOk_1n6x8_617      { background: var(--ds-success); }
._miniPlatDotWarn_1n6x8_618    { background: var(--ds-warning); }
._miniPlatDotPending_1n6x8_619 { background: var(--ds-border-strong); }

/* 右：选中平台 detail panel —— framed bg-alt 包整个右侧，与左侧 selected row 视觉对照 */
._acctDetailPanel_1n6x8_622 {
  background: var(--ds-bg-alt);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-md);
  padding: var(--ds-space-3);
}

._platDetailHead_1n6x8_629 {
  display: flex;
  align-items: center;
  gap: var(--ds-space-2);
  margin-bottom: var(--ds-space-3);
  padding-bottom: var(--ds-space-2);
  border-bottom: 1px dashed var(--ds-border);
}

._platDetailIcon_1n6x8_638 {
  width: 22px;
  height: 22px;
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg-deep);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 12px;
  flex-shrink: 0;
}

._platDetailName_1n6x8_514 {
  font-size: 13px;
  font-weight: 700;
  color: var(--ds-text);
}

._platDetailSub_1n6x8_656 {
  font-size: 11px;
  color: var(--ds-text-subtle);
}

/* 右：账号 mini 行列表 */
._acctMiniList_1n6x8_662 {
  display: flex;
  flex-direction: column;
  gap: var(--ds-space-2);
}

._acctMiniRow_1n6x8_668 {
  display: flex;
  align-items: center;
  gap: var(--ds-space-3);
  padding: var(--ds-space-3);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-md);
  background: var(--ds-bg);
}

._acctAvatar_1n6x8_678 {
  width: 32px;
  height: 32px;
  flex-shrink: 0;
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg-deep);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 14px;
}

._acctId_1n6x8_690 {
  flex: 1;
  min-width: 0;
  display: flex;
  flex-direction: column;
  gap: 1px;
}

._acctName_1n6x8_698 {
  font-size: 12px;
  font-weight: 700;
  color: var(--ds-text);
  font-variant-numeric: tabular-nums;
}

._acctSub_1n6x8_705 {
  font-size: 10px;
  color: var(--ds-text-subtle);
  font-variant-numeric: tabular-nums;
}

._acctRowAdd_1n6x8_711 {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: var(--ds-space-1);
  padding: var(--ds-space-2);
  border: 1px dashed var(--ds-border-strong);
  border-radius: var(--ds-radius-md);
  background: var(--ds-bg);
  font-size: 11px;
  font-weight: 600;
  color: var(--ds-text-muted);
  cursor: pointer;
  width: 100%;
}

._acctRowAdd_1n6x8_711:hover {
  border-color: var(--ds-text);
  color: var(--ds-text);
  background: var(--ds-bg-alt);
}

/* ---- 授权事件 timeline .event-mini-list ---- */
._eventMiniList_1n6x8_734 {
  display: flex;
  flex-direction: column;
  gap: var(--ds-space-2);
}

._eventMiniRow_1n6x8_740 {
  display: flex;
  align-items: center;
  gap: var(--ds-space-3);
  font-size: 11px;
  line-height: 1.5;
}

._eventMiniTime_1n6x8_748 {
  flex-shrink: 0;
  width: 64px;
  font-size: 10px;
  color: var(--ds-text-subtle);
  font-variant-numeric: tabular-nums;
}

._eventMiniDot_1n6x8_756 {
  width: 6px;
  height: 6px;
  border-radius: var(--ds-radius-pill);
  flex-shrink: 0;
}

._eventMiniDotOk_1n6x8_763   { background: var(--ds-success); }
._eventMiniDotWarn_1n6x8_764 { background: var(--ds-warning); }
._eventMiniDotInfo_1n6x8_765 { background: var(--ds-text); }

._eventMiniText_1n6x8_767 {
  flex: 1;
  color: var(--ds-text);
}

._eventMiniText_1n6x8_767 strong { font-weight: 700; }

/* ---- 账号行状态标签 .acct-status（替代原 cookie 进度条+天数，根因2 修复） ---- */
._acctStatus_1n6x8_775 {
  display: flex;
  align-items: center;
  gap: var(--ds-space-1);
  flex-shrink: 0;
}

._acctStatusDot_1n6x8_782 {
  width: 6px;
  height: 6px;
  border-radius: var(--ds-radius-pill);
  flex-shrink: 0;
}

._acctStatusDotOk_1n6x8_789   { background: var(--ds-success); }
._acctStatusDotWarn_1n6x8_790 { background: var(--ds-warning); }
._acctStatusDotCool_1n6x8_791 { background: var(--ds-text-subtle); }

._acctStatusText_1n6x8_793 {
  font-size: 10px;
  font-weight: 600;
  color: var(--ds-text-muted);
  white-space: nowrap;
}

/* ===== 账号行内嵌托管（v2 预览稿 host-config 段 1:1，docs/design/2026-06-10-auto-hosting-migration-v2.html） ===== */
._hostingRowTail_1n6x8_801 {
  margin-left: auto;
  display: flex;
  align-items: center;
  gap: 8px;
}

._hostingBtn_1n6x8_808 {
  font-size: 12px;
  font-weight: 600;
  padding: 5px 13px;
  border-radius: var(--ds-radius-sm);
  border: 1px solid var(--ds-border-strong);
  background: var(--ds-bg);
  color: var(--ds-text);
  cursor: pointer;
  white-space: nowrap;
}

._hostingBtnPrimary_1n6x8_820 {
  background: var(--ds-text);
  border-color: var(--ds-text);
  color: var(--ds-text-on-ink);
}

._hostingBtnDanger_1n6x8_826 {
  color: var(--ds-danger);
  border-color: rgba(239, 68, 68, 0.35);
}

._hostingBtn_1n6x8_808:disabled {
  opacity: 0.4;
  cursor: not-allowed;
}

._hostingBadge_1n6x8_836 {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: 11.5px;
  font-weight: 600;
  padding: 4px 11px;
  white-space: nowrap;
  border-radius: var(--ds-radius-pill);
  border: 1px solid var(--ds-text);
  color: var(--ds-text);
}

._hostingBadgeDot_1n6x8_849 {
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: var(--ds-success);
}

._hostingBadgeDot_1n6x8_849[data-warn='true'] {
  background: var(--ds-warning);
}

._hostingStat_1n6x8_860 {
  font-family: var(--ds-font-mono);
  font-size: 11px;
  color: var(--ds-text-muted);
  white-space: nowrap;
  font-variant-numeric: tabular-nums;
}

._hostingStatWarn_1n6x8_868 {
  color: var(--ds-warning);
}

._hostingConfig_1n6x8_872 {
  background: var(--ds-bg-alt);
  border-top: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
  padding: 14px 18px;
  margin: 4px 0 8px;
}

._hostingConfigLabel_1n6x8_880 {
  font-size: 10.5px;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--ds-text-subtle);
  font-weight: 700;
  margin-bottom: 8px;
}

._hostingChips_1n6x8_889 {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  margin-bottom: 14px;
}

._hostingChip_1n6x8_889 {
  font-size: 12px;
  padding: 4px 11px;
  border-radius: var(--ds-radius-pill);
  border: 1px solid var(--ds-border-strong);
  color: var(--ds-text-muted);
  background: var(--ds-bg);
  cursor: pointer;
}

._hostingChipOn_1n6x8_906 {
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
  border-color: var(--ds-text);
  font-weight: 600;
}

._hostingChipMono_1n6x8_913 {
  font-family: var(--ds-font-mono);
  font-variant-numeric: tabular-nums;
}

._hostingConfigFoot_1n6x8_918 {
  display: flex;
  align-items: center;
  gap: 8px;
}

._hostingHoursToggle_1n6x8_924 {
  margin-left: auto;
  font-size: 11px;
  color: var(--ds-text-subtle);
  background: none;
  border: none;
  cursor: pointer;
  text-align: right;
}
._root_1vyxm_1 {
  display: flex;
  flex-direction: column;
  gap: var(--ds-space-5);
}

._wizardProgress_1vyxm_7 {
  display: flex;
  align-items: flex-start;
  padding: 0 var(--ds-space-2);
}

._wizardProgressStep_1vyxm_13 {
  flex: 1;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: var(--ds-space-2);
  position: relative;
}

._wizardProgressStep_1vyxm_13:not(:last-child)::after {
  content: '';
  position: absolute;
  top: 13px;
  left: calc(50% + 18px);
  right: calc(-50% + 18px);
  height: 2px;
  background: var(--ds-border-strong);
}

._wizardProgressStep_done_1vyxm_32:not(:last-child)::after {
  background: var(--ds-success);
}

._wizardDot_1vyxm_36 {
  width: 28px;
  height: 28px;
  border-radius: var(--ds-radius-pill);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 12px;
  font-weight: 800;
  position: relative;
  z-index: 1;
  flex-shrink: 0;
}

._wizardDot_current_1vyxm_50 {
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
  box-shadow: 0 0 0 4px var(--ds-bg-deep);
}

._wizardDot_done_1vyxm_56 {
  background: var(--ds-success);
  color: var(--ds-text-on-ink);
}

._wizardDot_pending_1vyxm_61 {
  background: var(--ds-bg);
  border: 1.5px solid var(--ds-border-strong);
  color: var(--ds-text-subtle);
}

._wizardLabel_1vyxm_67 {
  font-size: 11px;
  font-weight: 600;
  color: var(--ds-text-subtle);
  letter-spacing: 0;
}

._wizardProgressStep_current_1vyxm_74 ._wizardLabel_1vyxm_67 {
  color: var(--ds-text);
  font-weight: 700;
}

._wizardProgressStep_done_1vyxm_32 ._wizardLabel_1vyxm_67 {
  color: var(--ds-text-muted);
}

._stepClickable_1vyxm_83 {
  background: none;
  border: none;
  padding: 0;
  font: inherit;
  cursor: pointer;
}

._stepClickable_1vyxm_83 ._wizardDot_1vyxm_36 {
  transition: box-shadow 0.15s;
}

._stepClickable_1vyxm_83:hover ._wizardDot_1vyxm_36 {
  box-shadow: 0 0 0 4px rgba(34, 197, 94, 0.18);
}

._stepClickable_1vyxm_83 ._wizardLabel_1vyxm_67 {
  text-decoration: underline dotted;
  text-underline-offset: 3px;
}

._stepFocus_1vyxm_104 {
  text-align: center;
  padding: var(--ds-space-6) var(--ds-space-5) var(--ds-space-5);
  background: var(--ds-bg-alt);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-lg);
}

._stepFocusIcon_1vyxm_112 {
  width: 64px;
  height: 64px;
  margin: 0 auto var(--ds-space-3);
  border-radius: var(--ds-radius-pill);
  background: var(--ds-bg);
  border: 1px solid var(--ds-border);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 28px;
  color: var(--ds-text);
}

._stepFocusTitle_1vyxm_126 {
  font-size: 18px;
  font-weight: 800;
  letter-spacing: 0;
  color: var(--ds-text);
  margin-bottom: var(--ds-space-2);
}

._stepFocusSub_1vyxm_134 {
  font-size: 12px;
  color: var(--ds-text-muted);
  line-height: 1.7;
  max-width: 380px;
  margin: 0 auto var(--ds-space-5);
}

._stepCta_1vyxm_142 {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: var(--ds-space-2);
  min-height: 44px;
  padding: 0 var(--ds-space-6);
  border-radius: var(--ds-radius-md);
  border: none;
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
  font-size: 14px;
  font-weight: 800;
  cursor: pointer;
  transition: opacity 0.15s;
}

._stepCta_1vyxm_142:hover {
  opacity: 0.85;
}

._stepCta_1vyxm_142:disabled {
  cursor: not-allowed;
  opacity: 0.72;
}

._stepHint_1vyxm_168 {
  margin-top: var(--ds-space-3);
  font-size: 11px;
  color: var(--ds-text-subtle);
  text-align: center;
}

._gifStage_1vyxm_175 {
  position: relative;
  margin: 0 auto var(--ds-space-4);
  width: 100%;
  max-width: 440px;
  border-radius: var(--ds-radius-md);
  border: 1px solid var(--ds-border-strong);
  background: var(--ds-bg);
  overflow: hidden;
  aspect-ratio: 16 / 9;
}

._gifImg_1vyxm_187 {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}

._gifBadge_1vyxm_194 {
  position: absolute;
  bottom: var(--ds-space-2);
  right: var(--ds-space-2);
  font-family: var(--ds-font-mono);
  font-size: 10px;
  font-weight: 700;
  letter-spacing: 0;
  padding: 3px var(--ds-space-2);
  border-radius: var(--ds-radius-pill);
  background: rgba(24, 24, 27, 0.78);
  color: var(--ds-text-on-ink);
}

._miniSteps_1vyxm_208 {
  text-align: left;
  max-width: 420px;
  margin: 0 auto var(--ds-space-5);
  display: flex;
  flex-direction: column;
  gap: var(--ds-space-2);
}

._miniStep_1vyxm_208 {
  display: flex;
  gap: var(--ds-space-2);
  align-items: baseline;
  font-size: 12px;
  color: var(--ds-text-muted);
  line-height: 1.65;
}

._miniStep_1vyxm_208 b {
  color: var(--ds-text);
  font-weight: 700;
}

._miniNum_1vyxm_231 {
  flex-shrink: 0;
  width: 18px;
  height: 18px;
  border-radius: var(--ds-radius-pill);
  background: var(--ds-bg-deep);
  color: var(--ds-text);
  font-size: 10.5px;
  font-weight: 800;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  transform: translateY(2px);
}

._copyCode_1vyxm_246 {
  font-family: var(--ds-font-mono);
  font-size: 11px;
  font-weight: 700;
  color: var(--ds-text);
  background: var(--ds-bg-deep);
  padding: 1px var(--ds-space-1);
  border-radius: var(--ds-radius-sm);
  border: none;
  cursor: pointer;
  position: relative;
  text-decoration: underline dotted;
  text-underline-offset: 3px;
  transition: background 0.15s;
}

._copyCode_1vyxm_246:hover {
  background: var(--ds-border-strong);
}

._copyCode_1vyxm_246::after {
  content: ' ⧉';
  font-size: 10px;
  color: var(--ds-text-muted);
}

._copyCodeCopied_1vyxm_272::before {
  content: '已复制';
  position: absolute;
  top: -26px;
  left: 50%;
  transform: translateX(-50%);
  font-size: 10px;
  font-weight: 700;
  color: var(--ds-text-on-ink);
  background: var(--ds-text);
  padding: 3px var(--ds-space-2);
  border-radius: var(--ds-radius-sm);
  white-space: nowrap;
}

._ctaRow_1vyxm_287 {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: var(--ds-space-3);
}

._spinner_1vyxm_294 {
  width: 14px;
  height: 14px;
  border-radius: var(--ds-radius-pill);
  border: 2px solid rgba(255, 255, 255, 0.35);
  border-top-color: var(--ds-text-on-ink);
  animation: _spin_1vyxm_294 0.8s linear infinite;
}

@keyframes _spin_1vyxm_294 {
  to {
    transform: rotate(360deg);
  }
}

._failNote_1vyxm_309 {
  margin-top: var(--ds-space-3);
  display: inline-flex;
  align-items: center;
  gap: var(--ds-space-1);
  color: var(--ds-danger);
  font-size: 11px;
  font-weight: 600;
}

._failDot_1vyxm_319 {
  width: 7px;
  height: 7px;
  border-radius: var(--ds-radius-pill);
  background: var(--ds-warning);
}

._backLink_1vyxm_326 {
  margin-top: var(--ds-space-3);
  font-size: 11px;
  color: var(--ds-text-subtle);
}

._backLink_1vyxm_326 button {
  border: none;
  background: transparent;
  padding: 0;
  color: var(--ds-text-muted);
  font-size: 11px;
  font-weight: 700;
  cursor: pointer;
  text-decoration: underline dotted;
  text-underline-offset: 3px;
}
/*
 * ExtensionInstallWizardCard v2 壳样式。
 * WizardProgress / WizardStepFocus 已迁入 video_publish/components/ExtensionInstallWizard。
 */

._card_19ff0_6 {
  background: var(--ds-surface);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-lg);
  box-shadow: var(--ds-shadow-deep);
  overflow: hidden;
  display: flex;
  flex-direction: column;
}

._cardExpanded_19ff0_16 {
  border-color: var(--ds-border-strong);
  box-shadow: var(--ds-shadow-deep);
  width: 540px;
  flex-shrink: 0;
}

._cardHead_19ff0_23 {
  display: flex;
  align-items: center;
  gap: var(--ds-space-2);
  padding: var(--ds-space-3) var(--ds-space-4);
  border-bottom: 1px solid var(--ds-border);
}

._cardEmoji_19ff0_31 {
  font-size: 15px;
  flex-shrink: 0;
}

._cardTitle_19ff0_36 {
  font-size: 13px;
  font-weight: 700;
  color: var(--ds-text);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

._stepCounter_19ff0_45 {
  margin-left: var(--ds-space-2);
  font-size: 11px;
  font-weight: 700;
  color: var(--ds-text-muted);
  padding: 2px var(--ds-space-2);
  background: var(--ds-bg-deep);
  border-radius: var(--ds-radius-pill);
  font-variant-numeric: tabular-nums;
}

._collapseBtn_19ff0_56 {
  margin-left: auto;
  display: inline-flex;
  align-items: center;
  gap: var(--ds-space-1);
  min-height: 28px;
  padding: 0 var(--ds-space-3);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg);
  font-size: 11px;
  font-weight: 600;
  color: var(--ds-text-muted);
  cursor: pointer;
}

._exBody_19ff0_72 {
  padding: var(--ds-space-5);
  display: flex;
  flex-direction: column;
  gap: var(--ds-space-5);
}

._installIntro_19ff0_79 {
  font-size: 12px;
  color: var(--ds-text-muted);
  line-height: 1.6;
}

._installIntro_19ff0_79 strong {
  color: var(--ds-text);
  font-weight: 700;
}
/*
 * AuthProgressCard · 授权进度卡样式
 *
 * 视觉权威: docs/create-reports/2026-06-01-canvas-add-auth/auth-progress-ux-preview.html
 *           选项 A（画布原生卡，推荐）
 * 设计 token: frontend/src/styles/global-design.css (--ds-*)
 * console scope 规则 (design.md §12): spinner/强调用 ink (--ds-text)，禁 azure
 *
 * 骨架复用 ExtensionInstallWizardCard.module.css 的
 * .card / .cardExpanded / .cardHead / .cardTitle / .collapseBtn / .exBody 同款结构
 */

/* ── Card 骨架 ── */
._card_137ac_10 {
  background: var(--ds-surface);
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-lg);
  box-shadow: var(--ds-shadow-deep);
  overflow: hidden;
  display: flex;
  flex-direction: column;
  width: 380px;
  flex-shrink: 0;
}

/* ── Card 头部：平台 emoji + 标题 + 状态 badge + 取消按钮 ── */
._cardHead_137ac_10 {
  display: flex;
  align-items: center;
  gap: var(--ds-space-2);
  padding: var(--ds-space-3) var(--ds-space-4);
  border-bottom: 1px solid var(--ds-border);
}

._cardEmoji_137ac_35 {
  font-size: 15px;
  flex-shrink: 0;
}

._cardTitle_137ac_10 {
  font-size: 13px;
  font-weight: 700;
  color: var(--ds-text);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

._statusBadge_137ac_49 {
  margin-left: var(--ds-space-2);
  font-size: 11px;
  font-weight: 700;
  color: var(--ds-text-muted);
  padding: 2px var(--ds-space-2);
  background: var(--ds-bg-deep);
  border-radius: var(--ds-radius-pill);
}

._cancelBtn_137ac_59 {
  margin-left: auto;
  display: inline-flex;
  align-items: center;
  gap: var(--ds-space-1);
  height: 28px;
  padding: 0 var(--ds-space-3);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg);
  font-size: 11px;
  font-weight: 600;
  color: var(--ds-text-muted);
  cursor: pointer;
}

._cancelBtn_137ac_59:hover {
  border-color: var(--ds-border-strong);
  color: var(--ds-text);
}

/* ── Focus 区：spinner / 成功对勾 / 错误信息 ── */
._focus_137ac_81 {
  text-align: center;
  padding: var(--ds-space-5) var(--ds-space-5) var(--ds-space-4);
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 0;
}

/* ink spinner — 用 --ds-text 做 border-top-color，无 azure */
._spinner_137ac_91 {
  width: 34px;
  height: 34px;
  border-radius: var(--ds-radius-pill);
  border: 3px solid var(--ds-bg-deep);
  border-top-color: var(--ds-text);
  animation: _spin_137ac_91 0.8s linear infinite;
  flex-shrink: 0;
}

@keyframes _spin_137ac_91 {
  to { transform: rotate(360deg); }
}

/* ── preparing 倒计时 hero：ink 进度环 + Geist Mono 数字 ── */
._countWrap_137ac_106 {
  position: relative;
  width: 72px;
  height: 72px;
  flex-shrink: 0;
}

._countWrap_137ac_106 svg {
  position: absolute;
  inset: 0;
  transform: rotate(-90deg);
}

._ringTrack_137ac_119 {
  fill: none;
  stroke: var(--ds-bg-deep);
  stroke-width: 3;
}

._ringFill_137ac_125 {
  fill: none;
  stroke: var(--ds-text);
  stroke-width: 3;
  stroke-linecap: round;
  stroke-dasharray: 204;
  stroke-dashoffset: 0;
  animation: _deplete_137ac_1 linear forwards;
}

@keyframes _deplete_137ac_1 {
  from { stroke-dashoffset: 0; }
  to { stroke-dashoffset: 204; }
}

._countNum_137ac_140 {
  position: absolute;
  inset: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  font-family: var(--ds-font-mono);
  font-size: 30px;
  font-weight: 600;
  color: var(--ds-text);
  font-variant-numeric: tabular-nums;
}

._focusTitle_137ac_153 {
  font-size: 14px;
  font-weight: 600;
  color: var(--ds-text);
  margin: var(--ds-space-3) 0 var(--ds-space-2);
}

._focusSub_137ac_160 {
  font-size: 12px;
  color: var(--ds-text-muted);
  line-height: 1.6;
  max-width: 300px;
  margin: 0 auto;
}

._hint_137ac_168 {
  font-size: 11px;
  color: var(--ds-text-subtle);
  margin-top: var(--ds-space-3);
}

/* ── success 状态：大对勾 ── */
._successIcon_137ac_175 {
  font-size: 32px;
  line-height: 1;
}

/* ── error 状态：错误 message + 重试按钮 ── */
._errorMessage_137ac_181 {
  font-size: 13px;
  color: var(--ds-text-muted);
  margin-top: var(--ds-space-3);
  line-height: 1.6;
}

._retryBtn_137ac_188 {
  display: inline-flex;
  align-items: center;
  height: 36px;
  padding: 0 var(--ds-space-5);
  margin-top: var(--ds-space-4);
  border-radius: var(--ds-radius-md);
  border: none;
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
  font-size: 13px;
  font-weight: 700;
  cursor: pointer;
  transition: opacity 0.15s;
}

._retryBtn_137ac_188:hover {
  opacity: 0.85;
}
/* ============================================================
   GeoVisibilityCard — GEO 可见度占位卡（kpi-right 第 6 格）
   Source: docs/design/2026-06-30-data-dashboard-tailwind-finetune.html .kpi--geo（终版）
   Colours: 紫青渐变底（--dash-geo-bg）+ 全白字（--dash-geo-fg）+ 半透明白 pill/cta。
     色皮肤经 .shell 作用域 token 消费：var(--dash-geo-*, <原 ink 色>) —— .shell 内命中
     渐变/白字，无 .shell 时回退原白底 ink（不塌成白底白字）。spec §4.2 消费表补此漏列。
     no-azure 仍成立（渐变=靛蓝→青，非 azure hex）。
   占位诚实：右上角「示例」徽标标注非真数据。
   ============================================================ */

._mono_1r4jf_11 {
  font-family: var(--ds-font-mono);
  font-feature-settings: "tnum" 1;
  font-variant-numeric: tabular-nums;
}

._geoCard_1r4jf_17 {
  position: relative;
  overflow: hidden;
  padding: 14px 16px 12px;
  display: flex;
  flex-direction: column;
  min-height: 104px;
  /* 设计稿终版 .kpi--geo：.shell 内取紫青渐变底（--dash-geo-bg），无 .shell 回退白底不塌。 */
  background: var(--dash-geo-bg, var(--ds-surface));
  /* 渐变底上无 ink 边框（--dash-geo-bd=transparent）；无 .shell 回退原强描边。 */
  border: 1px solid var(--dash-geo-bd, var(--ds-border-strong));
  border-radius: var(--ds-radius-lg);
  box-shadow: 0 1px 2px rgba(24, 24, 27, 0.04), 0 4px 12px rgba(24, 24, 27, 0.04);
}

/* 设计稿 .kpi--geo 无左 accent bar（渐变底本身即强调），故不叠 ::before 强调条。 */

._gcTop_1r4jf_34 {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
}

._gcLbl_1r4jf_41 {
  font-size: 12px;
  font-weight: 700;
  display: flex;
  align-items: center;
  gap: 6px;
  /* .shell 内白字（--dash-geo-fg），无 .shell 回退 ink。设计稿 .kpi-label opacity:.9。 */
  color: var(--dash-geo-fg, var(--ds-text));
  opacity: 0.9;
}

/* 「AI 搜索」pill：渐变底上半透明白 + 白字（设计稿 .geo-pill），无 .shell 回退 ink 描边。 */
._gcTag_1r4jf_53 {
  font-family: var(--ds-font-mono);
  font-size: 9px;
  font-weight: 700;
  letter-spacing: 0.08em;
  color: var(--dash-geo-fg, var(--ds-text));
  background: var(--dash-geo-chip, transparent);
  border: 1px solid var(--dash-geo-bd, var(--dash-accent, var(--ds-text)));
  border-radius: var(--ds-radius-pill);
  padding: 1px 7px;
}

/* 诚实占位徽标：明确标注为示例数据（渐变底上白字白虚线，无 .shell 回退 subtle ink） */
._gcSample_1r4jf_66 {
  font-family: var(--ds-font-mono);
  font-size: 9px;
  font-weight: 700;
  letter-spacing: 0.08em;
  color: var(--dash-geo-fg, var(--ds-text-subtle));
  border: 1px dashed var(--dash-geo-fg, var(--ds-border-strong));
  border-radius: var(--ds-radius-pill);
  padding: 1px 7px;
}

._gcTags_1r4jf_77 {
  display: flex;
  align-items: center;
  gap: 6px;
}

._gcNum_1r4jf_83 {
  font-size: 27px;
  font-weight: 700;
  margin-top: 12px;
  line-height: 1;
  color: var(--dash-geo-fg, var(--ds-text));
}

/* 设计稿 .geo-row opacity:.85（整行含 SOV 数字统一淡化）。 */
._gcSub_1r4jf_92 {
  font-size: 11px;
  color: var(--dash-geo-fg, var(--ds-text-muted));
  margin-top: 5px;
  opacity: 0.85;
}

._gcSub_1r4jf_92 b {
  color: var(--dash-geo-fg, var(--ds-text));
}

._gcGo_1r4jf_103 {
  margin-top: auto;
  padding-top: 10px;
}

/* 设计稿 .geo-cta：渐变底上半透明白按钮 + 白字；无 .shell 回退原 ink 实心按钮。 */
._gcGo_1r4jf_103 button {
  width: 100%;
  height: 30px;
  border: 1px solid var(--dash-geo-cta, var(--dash-accent, var(--ds-text)));
  border-radius: var(--ds-radius-sm);
  background: var(--dash-geo-cta, var(--dash-accent, var(--ds-text)));
  color: var(--dash-geo-fg, var(--ds-text-on-ink));
  font-size: 11px;
  font-weight: 700;
  cursor: pointer;
  transition: opacity 0.15s;
}

._gcGo_1r4jf_103 button:hover {
  opacity: 0.88;
}
/* ============================================================
   PlatformDonut — 平台分发占比环图（真数据，Task 5）
   Source: docs/design/2026-06-23-data-tab-dashboard.html donut（line 428-431 markup
     + line 631-645 render）。
   Colours: ink 灰阶 only（design line 32：data-viz 调色板仅多系列图表用；单系列占比环走
     ink 灰阶）。多段循环复用 4 档灰阶（--pd-ink-90/70/50/30，源自 --ds-text rgba）以便区分；
     no-azure / 无 data-viz 调色板。
   诚实空态：无平台数据 / 总 play=0 → .empty「暂无平台数据」。
   ============================================================ */

._donut_4ctcg_11 {
  /* ink 灰阶（局部定义，源自 --ds-text=#18181b 的 rgba 透明度阶；--ink-* 不在全局 token，
     仅占比/单系列图用，故就近定义不污染全局）。深→浅，4 段可区分。 */
  --pd-ink-90: var(--dash-c1, rgba(24, 24, 27, 0.9));
  --pd-ink-70: var(--dash-c3, rgba(24, 24, 27, 0.66));
  --pd-ink-50: var(--dash-c4, rgba(24, 24, 27, 0.42));
  --pd-ink-30: var(--dash-c5, rgba(24, 24, 27, 0.22));
  display: flex;
  align-items: center;
  gap: 8px;
  width: 100%;
  height: 100%;
}

._mono_4ctcg_25 {
  font-family: var(--ds-font-mono);
  font-feature-settings: "tnum" 1;
  font-variant-numeric: tabular-nums;
}

._donutSvg_4ctcg_31 {
  width: 55%;
  height: 100%;
  display: block;
  overflow: visible;
}

._donutNum_4ctcg_38 {
  font-family: var(--ds-font-mono);
  font-size: 26px;
  font-weight: 700;
  fill: var(--ds-text);
}

._donutSub_4ctcg_45 {
  font-size: 10px;
  fill: var(--ds-text-muted);
}

._legend_4ctcg_50 {
  flex: 1;
  display: flex;
  flex-direction: column;
  gap: 7px;
  min-width: 0;
}

/* 诚实空态：无平台数据 / 总 play=0 时居中提示，绝不渲染伪造占比环。 */
._empty_4ctcg_8 {
  flex: 1;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 12px;
  color: var(--ds-text-subtle);
}

._legendRow_4ctcg_68 {
  display: flex;
  align-items: center;
  gap: 7px;
  font-size: 11px;
}

._legendDot_4ctcg_75 {
  width: 9px;
  height: 9px;
  border-radius: 3px;
  flex-shrink: 0;
}

._legendLabel_4ctcg_82 {
  flex: 1;
  color: var(--ds-text-muted);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

._legendPct_4ctcg_90 {
  font-weight: 700;
  color: var(--ds-text);
}
/* ============================================================
   PlatformStackBar — 平台贡献构成堆叠柱（真数据，Task 7）
   Source: docs/design/2026-06-23-data-tab-dashboard.html stackbar（line 438-443 markup
     + line 660-682 render）。
   Colours: data-viz 低饱和调色板（design line 32-35：仅多系列图表用；azure-free，避开被禁
     azure #4da6ff/#0078d4）。--psb-dv-1..4 局部定义（不污染全局 --dv-*），映射 4 平台。
   Toggle: .cc-toggle（设计稿 line 170-172），active = ink bg(--ds-text) + white text。
   诚实空态：points 为空 → 「暂无平台数据」。
   ============================================================ */

._stack_148bu_11 {
  /* data-viz 低饱和调色板（局部定义，仅本多系列堆叠柱用；不写全局 --dv-*）。值同设计稿调色板，
     azure-free。 */
  --psb-dv-1: var(--dash-c1, #3b5bdb);
  --psb-dv-2: var(--dash-c2, #2f9e8f);
  --psb-dv-3: var(--dash-c3, #c2703d);
  --psb-dv-4: var(--dash-c4, #8b5e9e);
  display: flex;
  flex-direction: column;
  width: 100%;
  height: 100%;
}

._head_148bu_24 {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
}

._title_148bu_31 {
  font-size: 13px;
  font-weight: 700;
  color: var(--ds-text);
}

/* 播放/互动 toggle（设计稿 .cc-toggle line 170-172） */
._toggle_148bu_38 {
  display: inline-flex;
  gap: 2px;
  background: var(--ds-bg-alt);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-pill);
  padding: 2px;
}

._toggle_148bu_38 button {
  border: none;
  background: none;
  cursor: pointer;
  font-size: 11px;
  font-weight: 600;
  color: var(--ds-text-muted);
  padding: 3px 10px;
  border-radius: var(--ds-radius-pill);
}

/* active = ink 背景 + 白字（设计稿 .cc-toggle button.on） */
._toggle_148bu_38 button._on_148bu_58 {
  background: var(--ds-text);
  color: #fff;
}

._legend_148bu_64 {
  display: flex;
  align-items: center;
  gap: 14px;
  flex-wrap: wrap;
  font-size: 11px;
  color: var(--ds-text-muted);
  margin-top: 4px;
}

._legendItem_148bu_74 {
  display: inline-flex;
  align-items: center;
  gap: 5px;
}

._legendSwatch_148bu_80 {
  width: 10px;
  height: 10px;
  border-radius: 3px;
  display: inline-block;
}

/* 诚实空态：无发布日期数据时居中提示 */
._empty_148bu_88 {
  flex: 1;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 12px;
  color: var(--ds-text-subtle);
}

._svg_148bu_97 {
  display: block;
  width: 100%;
  flex: 1;
  margin-top: 12px;
  overflow: visible;
}

._gridLine_148bu_105 {
  stroke: var(--ds-border);
  stroke-width: 1;
}

._axisLabel_148bu_110 {
  font-family: var(--ds-font-mono);
  font-size: 10px;
  fill: var(--ds-text-subtle);
  font-variant-numeric: tabular-nums;
}
/* ============================================================
   PlatformRadar — 平台表现雷达（真数据，Task 6）
   Source: docs/design/2026-06-23-data-tab-dashboard.html radar（line 445-448 markup
     + line 648-658 render）。
   Colours: data-viz 低饱和调色板（design line 32-35：仅多系列图表用；azure-free，避开被禁
     azure #4da6ff/#0078d4）。--prd-dv-1..4 局部定义（不污染全局 --dv-*），映射 4 平台。
   诚实空态：platforms 为空 → 「暂无平台数据」，不伪造 polygon。
   ============================================================ */

._radar_beufx_10 {
  /* data-viz 低饱和调色板（局部定义，仅本多系列雷达用；不写全局 --dv-*）。值同设计稿调色板，
     azure-free。 */
  --prd-dv-1: var(--dash-c1, #3b5bdb);
  --prd-dv-2: var(--dash-c2, #2f9e8f);
  --prd-dv-3: var(--dash-c3, #c2703d);
  --prd-dv-4: var(--dash-c4, #8b5e9e);
  display: flex;
  flex-direction: column;
  width: 100%;
  height: 100%;
  min-height: 0;
  overflow: hidden;
}

._legend_beufx_25 {
  display: flex;
  align-items: center;
  gap: 14px;
  flex-wrap: wrap;
  font-size: 11px;
  color: var(--ds-text-muted);
  margin-bottom: 4px;
  flex: none;
}

._legendItem_beufx_36 {
  display: inline-flex;
  align-items: center;
  gap: 5px;
}

._legendSwatch_beufx_42 {
  width: 10px;
  height: 10px;
  border-radius: 3px;
  display: inline-block;
}

/* 诚实空态：无平台数据时居中提示 */
._empty_beufx_50 {
  flex: 1;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 12px;
  color: var(--ds-text-subtle);
}

._svg_beufx_59 {
  display: block;
  width: 100%;
  flex: 1 1 0;
  height: 0;
  min-height: 0;
  margin-top: 8px;
  overflow: hidden;
}

._axisLabel_beufx_69 {
  font-size: 10px;
  fill: var(--ds-text-muted);
  font-weight: 600;
}

._series_beufx_75 {
  transition: opacity 0.15s;
}
/* ============================================================
   ConversionFunnel — 内容转化漏斗（真数据，DEE-442 改版）
   Source: docs/design/2026-06-30-data-dashboard-compact.html chartFunnel（横条 + 段内右对齐数值）。
   Colours: 项目已有 data-viz 令牌 --dash-c1/c3/c5（蓝/紫/橙，azure-free，雷达/堆叠柱同款）；
     负涨粉走 --dash-down（红），空/待接入段虚线描边 + 无填充（诚实空态）。
   ============================================================ */

._funnel_rq0mp_8 {
  --cf-c1: var(--dash-c1, #3b82f6);
  --cf-c2: var(--dash-c3, #8b5cf6);
  --cf-c3: var(--dash-c5, #f59e0b);
  --cf-down: var(--dash-down, #ef4444);
  display: flex;
  flex-direction: column;
  width: 100%;
  height: 100%;
  min-height: 0;
  overflow: hidden;
}

._mono_rq0mp_21 {
  font-family: var(--ds-font-mono);
  font-feature-settings: "tnum" 1;
  font-variant-numeric: tabular-nums;
}

._head_rq0mp_27 {
  display: flex;
  align-items: center;
  gap: 8px;
  flex: none;
}

._title_rq0mp_34 {
  font-size: 13px;
  font-weight: 700;
  color: var(--ds-text);
}

._meta_rq0mp_40 {
  margin-left: auto;
  font-size: 10px;
  color: var(--ds-text-subtle);
}

._bars_rq0mp_46 {
  display: flex;
  flex-direction: column;
  justify-content: center;
  gap: 12px;
  flex: 1 1 0;
  min-height: 0;
  margin-top: 14px;
}

._row_rq0mp_56 {
  display: flex;
  align-items: center;
  gap: 10px;
}

._rowLabel_rq0mp_62 {
  flex: none;
  width: auto;
  white-space: nowrap;
  font-size: 12px;
  color: var(--ds-text-muted);
}

._barTrack_rq0mp_70 {
  flex: 1;
  min-width: 0;
  height: 26px;
  border-radius: 6px;
  background: var(--ds-bg-alt);
  overflow: hidden;
}

._bar_rq0mp_46 {
  height: 100%;
  border-radius: 6px;
  box-sizing: border-box;
  display: flex;
  align-items: center;
  justify-content: flex-end;
  padding: 0 10px;
}

._row_rq0mp_56[data-mode="real"] ._bar_rq0mp_46 {
  background: var(--cf-c1);
}

._row_rq0mp_56[data-stage="engage"][data-mode="real"] ._bar_rq0mp_46 {
  background: var(--cf-c2);
}

._row_rq0mp_56[data-stage="follower"][data-mode="real"] ._bar_rq0mp_46 {
  background: var(--cf-c3);
}

._row_rq0mp_56[data-stage="follower"][data-mode="real"][data-negative="true"] ._bar_rq0mp_46 {
  background: var(--cf-down);
}

._row_rq0mp_56[data-mode="awaiting"] ._bar_rq0mp_46,
._row_rq0mp_56[data-mode="empty"] ._bar_rq0mp_46 {
  background: none;
  border: 1px dashed var(--ds-border-strong);
}

._barValue_rq0mp_111 {
  font-size: 12px;
  font-weight: 700;
}

._row_rq0mp_56[data-mode="real"] ._barValue_rq0mp_111 {
  color: #fff;
}

._row_rq0mp_56[data-mode="awaiting"] ._barValue_rq0mp_111,
._row_rq0mp_56[data-mode="empty"] ._barValue_rq0mp_111 {
  color: var(--ds-text-subtle);
}
/* ============================================================
   TopVideosLeaderboard — 已发布成品 · 播放 Top 10（真数据）
   Source: docs/design/2026-06-23-data-tab-dashboard.html
     .row-lb / .lb-cols / .lb / .lb-row / .lb-no / .lb-thumb / .lb-mid / .lb-right
     （line 181-222 styles + 718-725 markup）。
   Colours: ink 灰阶 only（lb-no 实心 = --ds-text，其余描边；负向 delta = #b04141，本卡不展示
     delta 故不引入）。no-azure / 无 data-viz 调色板 / 无 Signal。
   ============================================================ */

._card_qsnb6_10 {
  display: flex;
  flex-direction: column;
  padding: 15px 17px 14px;
  background: var(--ds-surface);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-lg);
  box-shadow: 0 1px 2px rgba(24, 24, 27, 0.04), 0 8px 24px -16px rgba(24, 24, 27, 0.16);
}

._mono_qsnb6_20 {
  font-family: var(--ds-font-mono);
  font-feature-settings: "tnum" 1;
  font-variant-numeric: tabular-nums;
}

._head_qsnb6_26 {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
}

._title_qsnb6_33 {
  font-size: 13px;
  font-weight: 700;
  color: var(--ds-text);
}

._meta_qsnb6_39 {
  font-size: 10px;
  color: var(--ds-text-subtle);
}

/* 双列：左 5 / 右 5（设计稿 .lb-cols 1fr 1fr，gap 0 36px）。 */
._cols_qsnb6_45 {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 0 36px;
  margin-top: 8px;
}

._col_qsnb6_45 {
  display: flex;
  flex-direction: column;
}

._lbRow_qsnb6_57 {
  width: 100%;
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 10px 0;
  border: 0;
  border-bottom: 1px solid var(--ds-border);
  background: transparent;
  color: inherit;
  font: inherit;
  text-align: left;
  cursor: pointer;
}

._lbRow_qsnb6_57:last-child {
  border-bottom: none;
}

._lbRow_qsnb6_57:hover,
._lbRow_qsnb6_57:focus-visible,
._lbRowSelected_qsnb6_78 {
  background: var(--ds-bg-alt);
}

._lbRow_qsnb6_57:focus-visible {
  outline: 2px solid var(--ds-border-strong);
  outline-offset: 2px;
}

/* 排名：前 3 实心 ink，其余描边 muted（设计稿 .lb-no.top / .rest）。 */
._lbNo_qsnb6_88 {
  width: 22px;
  height: 22px;
  border-radius: 7px;
  flex-shrink: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  font-family: var(--ds-font-mono);
  font-size: 11px;
  font-weight: 700;
}

._lbNoTop_qsnb6_101 {
  background: var(--dash-accent, var(--ds-text));
  color: #fff;
}

._lbNoRest_qsnb6_106 {
  border: 1px solid var(--ds-border-strong);
  color: var(--ds-text-muted);
}

/* 缩略占位（设计稿 .lb-thumb 渐变深底 + 图标；ink 渐变，非 azure）。 */
._lbThumb_qsnb6_112 {
  width: 38px;
  height: 48px;
  border-radius: 7px;
  flex-shrink: 0;
  background: var(--dash-accent, linear-gradient(150deg, #44403c, #1c1917));
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 15px;
  color: rgba(255, 255, 255, 0.85);
}

._lbMid_qsnb6_125 {
  flex: 1;
  min-width: 0;
}

._lbName_qsnb6_130 {
  font-size: 12px;
  font-weight: 600;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  color: var(--ds-text);
}

._lbMeta_qsnb6_139 {
  font-size: 10px;
  color: var(--ds-text-subtle);
  margin-top: 2px;
}

._lbRight_qsnb6_145 {
  text-align: right;
  flex-shrink: 0;
  width: 78px;
}

._lbVal_qsnb6_151 {
  font-size: 13px;
  font-weight: 700;
  color: var(--ds-text);
}

/* 诚实空态：无已发布成品（不伪造行）。 */
._empty_qsnb6_158 {
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: 120px;
  margin-top: 8px;
  border: 1px dashed var(--ds-border-strong);
  border-radius: var(--ds-radius-md);
  background: var(--ds-bg-alt);
  color: var(--ds-text-muted);
  font-size: 13px;
  font-weight: 600;
}

@media (max-width: 720px) {
  ._cols_qsnb6_45 {
    grid-template-columns: 1fr;
  }
}
/* ============================================================
   GeoMonitorView — GEO 监控子页
   Source: docs/design/2026-06-23-data-tab-dashboard.html #viewGeo（line 224-270 styles
     + 465-520 markup）：geo-scores / geo-row2 / geo-row3 / src-table。
   Colours: 单系列（计分卡 / 可见度趋势）走 ink 灰阶（--ds-* + 局部 --geo-ink-* skeleton）；
     多系列（竞争 SOV 对比条）走 data-viz 调色板（--geo-dv-*，局部定义不污染全局 --dv-*）。
     无 #e8590c（Signal 仅 AI 洞察重点卡）、无 azure 系禁色（accent 变量禁用）。
   诚实边界：score null 渲「—」非 0；趋势/竞争空数据渲诚实空态；Task 6 待接区块保留骨架「敬请期待」。
   ============================================================ */

._view_3989b_11 {
  /* skeleton ink 灰阶（局部，源自 --ds-text rgba，仅本占位用，不污染全局）。 */
  --geo-ink-skel: rgba(24, 24, 27, 0.08);
  --geo-ink-skel-strong: rgba(24, 24, 27, 0.14);
  display: block;
}

._mono_3989b_18 {
  font-family: var(--ds-font-mono);
  font-feature-settings: "tnum" 1;
  font-variant-numeric: tabular-nums;
}

/* 诚实横幅：整页占位说明 */
._banner_3989b_25 {
  display: flex;
  align-items: center;
  gap: 9px;
  padding: 10px 14px;
  margin-bottom: 22px;
  border: 1px dashed var(--ds-border-strong);
  border-radius: var(--ds-radius-md);
  background: var(--ds-bg-alt);
  color: var(--ds-text-muted);
  font-size: 12px;
  font-weight: 600;
}

._bannerDot_3989b_39 {
  width: 8px;
  height: 8px;
  border-radius: 50%;
  flex-shrink: 0;
  background: var(--ds-text-subtle);
}

/* 区段标题 */
._secHead_3989b_48 {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 12px;
  margin: 0 2px 13px;
}

._secTitle_3989b_56 {
  font-size: 13px;
  font-weight: 700;
  color: var(--ds-text);
}

._secMeta_3989b_62 {
  font-size: 11px;
  color: var(--ds-text-subtle);
}

/* 计分概览 4 卡（设计稿 geo-scores repeat(3,1fr) 1.1fr，占位用等 4 列）。 */
._scores_3989b_68 {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 16px;
  margin-bottom: 26px;
}

._scoreCard_3989b_75 {
  display: flex;
  flex-direction: column;
  padding: 16px 18px;
  background: var(--ds-surface);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-lg);
  box-shadow: 0 1px 2px rgba(24, 24, 27, 0.04), 0 8px 24px -16px rgba(24, 24, 27, 0.16);
}

._scLbl_3989b_85 {
  font-size: 12px;
  color: var(--ds-text-muted);
  font-weight: 600;
}

._scNum_3989b_91 {
  font-size: 38px;
  font-weight: 700;
  letter-spacing: -0.02em;
  margin-top: 12px;
  line-height: 1;
  color: var(--ds-text-subtle);
}

._scNum_3989b_91 small {
  font-size: 18px;
  color: var(--ds-text-subtle);
}

._scFt_3989b_105 {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  margin-top: auto;
  padding-top: 12px;
}

/* row2 / row3 区块（设计稿 geo-row2 1.5fr 1fr / geo-row3 1fr 1.3fr；占位用等 2 列）。 */
._row2_3989b_115,
._row3_3989b_116 {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 16px;
  margin-bottom: 26px;
}

._chartCard_3989b_123 {
  display: flex;
  flex-direction: column;
  padding: 15px 17px 14px;
  background: var(--ds-surface);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-lg);
  box-shadow: 0 1px 2px rgba(24, 24, 27, 0.04), 0 8px 24px -16px rgba(24, 24, 27, 0.16);
}

._ccTop_3989b_133 {
  display: flex;
  align-items: center;
  gap: 8px;
}

._ccT_3989b_133 {
  font-size: 13px;
  font-weight: 700;
  color: var(--ds-text);
}

._ccM_3989b_145 {
  font-size: 10px;
  color: var(--ds-text-subtle);
}

/* 诚实占位徽标 */
._sample_3989b_151 {
  margin-left: auto;
  font-family: var(--ds-font-mono);
  font-size: 9px;
  font-weight: 700;
  letter-spacing: 0.08em;
  color: var(--ds-text-subtle);
  border: 1px dashed var(--ds-border-strong);
  border-radius: var(--ds-radius-pill);
  padding: 1px 7px;
}

._chartArea_3989b_163 {
  margin-top: 14px;
  min-height: 180px;
  display: flex;
}

/* ink 骨架盒 */
._skeleton_3989b_170 {
  flex: 1;
  display: flex;
  flex-direction: column;
  justify-content: center;
  gap: 14px;
  padding: 18px;
  border: 1px dashed var(--ds-border);
  border-radius: var(--ds-radius-md);
  background: var(--ds-bg-alt);
}

._skBars_3989b_182 {
  display: flex;
  flex-direction: column;
  gap: 11px;
}

._skBar_3989b_182 {
  display: inline-block;
  height: 9px;
  border-radius: var(--ds-radius-pill);
  background: var(--geo-ink-skel-strong);
}

._skNote_3989b_195 {
  font-size: 12px;
  font-weight: 600;
  color: var(--ds-text-muted);
  text-align: center;
}

/* 被引信源表骨架 */
._srcTable_3989b_203 {
  width: 100%;
  border-collapse: collapse;
  font-size: 12px;
  margin-top: 12px;
}

._srcTable_3989b_203 th {
  text-align: left;
  font-family: var(--ds-font-mono);
  font-size: 10px;
  font-weight: 600;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--ds-text-subtle);
  padding: 8px 10px;
  border-bottom: 1px solid var(--ds-border);
}

._srcTable_3989b_203 td {
  padding: 12px 10px;
  border-bottom: 1px solid var(--ds-border);
  color: var(--ds-text-subtle);
}

._srcTable_3989b_203 tr:last-child td {
  border-bottom: none;
}

._num_3989b_232 {
  text-align: right;
  font-family: var(--ds-font-mono);
  font-variant-numeric: tabular-nums;
}

._srcNote_3989b_238 {
  margin-top: 10px;
  font-size: 12px;
  font-weight: 600;
  color: var(--ds-text-muted);
  text-align: center;
}

/* ============================================================
   Task 5 真数据化扩展（计分概览实值 + 趋势折线 + 竞争 SOV 对比条）
   ============================================================ */

/* 状态分流：居中空态 / 加载 / 错误 卡 */
._stateCard_3989b_251 {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 12px;
  min-height: 320px;
  padding: 40px 24px;
  text-align: center;
  background: var(--ds-surface);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-lg);
  box-shadow: 0 1px 2px rgba(24, 24, 27, 0.04), 0 8px 24px -16px rgba(24, 24, 27, 0.16);
}

._stateTitle_3989b_266 {
  font-size: 14px;
  font-weight: 700;
  color: var(--ds-text);
}

._stateHint_3989b_272 {
  font-size: 12px;
  color: var(--ds-text-muted);
  max-width: 320px;
  line-height: 1.6;
}

._retryBtn_3989b_279 {
  margin-top: 4px;
  padding: 7px 18px;
  font-size: 12px;
  font-weight: 600;
  color: var(--ds-surface);
  background: var(--ds-text);
  border: none;
  border-radius: var(--ds-radius-md);
  cursor: pointer;
}

._retryBtn_3989b_279:hover {
  opacity: 0.88;
}

/* 加载骨架（复用 skeleton 灰阶，整页卡群占位） */
._loadCard_3989b_296 {
  height: 120px;
  background: var(--ds-surface);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-lg);
  box-shadow: 0 1px 2px rgba(24, 24, 27, 0.04);
  overflow: hidden;
  position: relative;
}

._loadCard_3989b_296::after {
  content: "";
  position: absolute;
  inset: 16px;
  border-radius: var(--ds-radius-md);
  background: var(--geo-ink-skel);
}

/* 计分卡：实值数字行（mono + tabular-nums，复用 .scNum；真值时颜色提到 --ds-text） */
._scNumReal_3989b_315 {
  color: var(--ds-text);
}

/* 趋势折线图区（单系列 ink，纯 SVG，参照 AreaPlayChart） */
._trendSvg_3989b_320 {
  width: 100%;
  height: 100%;
  display: block;
}

/* 趋势 / 竞争 诚实空态（区块内居中） */
._areaEmpty_3989b_327 {
  flex: 1;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 12px;
  font-weight: 600;
  color: var(--ds-text-muted);
  border: 1px dashed var(--ds-border);
  border-radius: var(--ds-radius-md);
  background: var(--ds-bg-alt);
}

/* 竞争 SOV 对比条（多系列 → data-viz 调色板，局部定义不污染全局 --dv-*） */
._sovList_3989b_341 {
  --geo-dv-own: var(--dash-c1, #3b5bdb);
  --geo-dv-1: var(--dash-c5, #c2703d);
  --geo-dv-2: var(--dash-c2, #2f9e8f);
  --geo-dv-3: var(--dash-c3, #8b5e9e);
  flex: 1;
  display: flex;
  flex-direction: column;
  gap: 14px;
  padding: 4px 2px;
}

._sovRow_3989b_353 {
  display: flex;
  flex-direction: column;
  gap: 6px;
}

._sovRowTop_3989b_359 {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 10px;
}

._sovName_3989b_366 {
  font-size: 12px;
  font-weight: 600;
  color: var(--ds-text);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

._sovNameOwn_3989b_375 {
  font-weight: 700;
}

._sovPct_3989b_379 {
  font-family: var(--ds-font-mono);
  font-feature-settings: "tnum" 1;
  font-variant-numeric: tabular-nums;
  font-size: 12px;
  font-weight: 700;
  color: var(--ds-text);
  flex-shrink: 0;
}

._sovTrack_3989b_389 {
  height: 10px;
  border-radius: var(--ds-radius-pill);
  background: var(--ds-bg-alt);
  overflow: hidden;
}

._sovFill_3989b_396 {
  height: 100%;
  border-radius: var(--ds-radius-pill);
  min-width: 2px;
}

/* ============================================================
   Task 6 真数据化（引擎拆分 hbars + 缺口诊断/行动 + 被引信源表实值）
   ============================================================ */

/* 引擎拆分：每引擎一行（引用率柱 + 推荐率附注）。多系列 → data-viz 调色板
   （复用 SovBars 同一组 --geo-dv-*，局部定义不污染全局 --dv-*）。 */
._engList_3989b_408 {
  --geo-dv-own: var(--dash-c1, #3b5bdb);
  --geo-dv-1: var(--dash-c5, #c2703d);
  --geo-dv-2: var(--dash-c2, #2f9e8f);
  --geo-dv-3: var(--dash-c3, #8b5e9e);
  flex: 1;
  display: flex;
  flex-direction: column;
  gap: 14px;
  padding: 4px 2px;
}

._engRow_3989b_420 {
  display: flex;
  flex-direction: column;
  gap: 6px;
}

._engRowTop_3989b_426 {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 10px;
}

._engName_3989b_433 {
  font-size: 12px;
  font-weight: 600;
  color: var(--ds-text);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

._engVal_3989b_442 {
  display: flex;
  align-items: baseline;
  gap: 10px;
  flex-shrink: 0;
  font-size: 12px;
  color: var(--ds-text-muted);
}

._engVal_3989b_442 b {
  color: var(--ds-text);
  font-weight: 700;
}

/* 引用分 / 推荐分附注同格式：数字 ink 实色 + /100 小号灰单位（小数对齐 tabular-nums 已在 .mono）。 */
._engCite_3989b_457 small,
._engRec_3989b_458 small {
  margin-left: 1px;
  font-size: 10px;
  color: var(--ds-text-subtle);
}

/* 无引用能力（deepseek supports_citations=false）：渲「仅提及」ink 灰标签，绝不渲 0 / 0%。 */
._engMention_3989b_465 {
  font-family: var(--ds-font-mono);
  font-size: 10px;
  font-weight: 600;
  color: var(--ds-text-subtle);
  background: var(--ds-bg-alt);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-pill);
  padding: 1px 7px;
}

._engRec_3989b_458 {
  color: var(--ds-text-subtle);
}

._engTrack_3989b_480 {
  height: 9px;
  border-radius: var(--ds-radius-pill);
  background: var(--ds-bg-alt);
  overflow: hidden;
}

._engFill_3989b_487 {
  display: block;
  height: 100%;
  border-radius: var(--ds-radius-pill);
  min-width: 2px;
}

/* 缺口诊断 + 情报行动（ink 风格） */
._gap_3989b_495 {
  flex: 1;
  display: flex;
  flex-direction: column;
  gap: 14px;
  padding: 4px 2px;
}

._gapAction_3989b_503 {
  font-size: 12px;
  font-weight: 600;
  line-height: 1.6;
  color: var(--ds-text);
  padding: 10px 12px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-md);
  background: var(--ds-bg-alt);
}

._gapStats_3989b_514 {
  display: flex;
  gap: 12px;
}

._gapStat_3989b_514 {
  flex: 1;
  display: flex;
  flex-direction: column;
  gap: 4px;
  padding: 10px 12px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-md);
}

._gapStatNum_3989b_529 {
  font-size: 24px;
  font-weight: 700;
  line-height: 1;
  letter-spacing: -0.02em;
  color: var(--ds-text);
}

._gapStatLbl_3989b_537 {
  font-size: 11px;
  font-weight: 600;
  color: var(--ds-text-muted);
}

._gapList_3989b_543 {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: 8px;
}

._gapItem_3989b_552 {
  font-size: 12px;
  color: var(--ds-text-muted);
  padding-left: 14px;
  position: relative;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

._gapItem_3989b_552::before {
  content: "";
  position: absolute;
  left: 2px;
  top: 7px;
  width: 5px;
  height: 5px;
  border-radius: 50%;
  background: var(--ds-text-subtle);
}

/* ============================================================
   Task 6 方向 A：被选×被吸收 象限矩阵（形态 A）
   视觉权威：docs/design/2026-06-30-geo-A-absorption-dashboard-forms.html 形态 A。
   配色 no-azure：白卡 + ink 十字虚线轴 + 本品点 --geo-dv-own（局部定义不污染全局 --dv-*）。
   ============================================================ */

/* 象限区块卡的下方节律间距（与 scores / row2 / row3 的 26px 统一）。 */
._quadCard_3989b_580 {
  margin-bottom: 26px;
}

._quadrant_3989b_584 {
  /* 本品点单系列色（局部定义，复用 SovBars/EngineBreakdown 同值，不污染全局 --dv-*）。 */
  --geo-dv-own: var(--dash-c1, #3b5bdb);
  width: 100%;
}

._quadPlot_3989b_590 {
  position: relative;
  width: 100%;
  max-width: 420px;
  aspect-ratio: 1 / 1;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-md);
  background: var(--ds-bg);
  overflow: hidden;
  margin: 0 auto;
}

._quadAxisX_3989b_602 {
  position: absolute;
  left: 0;
  right: 0;
  top: 50%;
  border-top: 1px dashed var(--ds-border-strong);
}

._quadAxisY_3989b_610 {
  position: absolute;
  top: 0;
  bottom: 0;
  left: 50%;
  border-left: 1px dashed var(--ds-border-strong);
}

._quadLabel_3989b_618 {
  position: absolute;
  width: 50%;
  height: 50%;
  display: flex;
  align-items: flex-start;
  font-size: 9px;
  font-weight: 600;
  color: var(--ds-text-subtle);
  padding: 6px 8px;
}

._quadTL_3989b_630 {
  top: 0;
  left: 0;
  background: rgba(24, 24, 27, 0.015);
}

._quadTR_3989b_636 {
  top: 0;
  right: 0;
  background: rgba(34, 197, 94, 0.05);
  justify-content: flex-end;
  text-align: right;
}

._quadBL_3989b_644 {
  bottom: 0;
  left: 0;
  background: rgba(239, 68, 68, 0.04);
  align-items: flex-end;
}

._quadBR_3989b_651 {
  bottom: 0;
  right: 0;
  background: rgba(245, 158, 11, 0.05);
  align-items: flex-end;
  justify-content: flex-end;
  text-align: right;
}

._quadDotLabel_3989b_660 {
  position: absolute;
  font-size: 8.5px;
  font-weight: 600;
  color: var(--ds-text-muted);
  white-space: nowrap;
  pointer-events: none;
  transform: translate(-50%, 0);
}

._quadDot_3989b_660 {
  position: absolute;
  border-radius: 50%;
  background: var(--geo-dv-own);
  border: 2px solid var(--ds-surface);
  box-shadow: 0 0 0 1px rgba(59, 91, 219, 0.35);
  transform: translate(-50%, 50%);
}

._quadAxisLbl_3989b_679 {
  display: flex;
  justify-content: center;
  font-size: 9px;
  color: var(--ds-text-subtle);
  margin-top: 6px;
}

/* 被引信源表：空态行 */
._srcEmpty_3989b_688 {
  text-align: center;
  font-size: 12px;
  font-weight: 600;
  color: var(--ds-text-muted);
  padding: 28px 10px;
}

/* 数据新鲜度口径（底部 meta 行，ink 灰 subtle；静态 12h 同步口径，无实时化措辞）。 */
._freshness_3989b_697 {
  margin-top: 18px;
  font-size: 11px;
  letter-spacing: 0.02em;
  color: var(--ds-text-subtle);
  text-align: right;
}

@media (max-width: 1080px) {
  ._scores_3989b_68 {
    grid-template-columns: repeat(2, 1fr);
  }
  ._row2_3989b_115,
  ._row3_3989b_116 {
    grid-template-columns: 1fr;
  }
}

@media (max-width: 720px) {
  ._scores_3989b_68 {
    grid-template-columns: 1fr;
  }
}
._root_yj8qh_1 {
  display: grid;
  min-width: 0;
}

._eyebrow_yj8qh_6,
._time_yj8qh_7 {
  font-family: var(--ds-font-mono, ui-monospace, SFMono-Regular, Menlo, monospace);
  letter-spacing: 0;
}

._eyebrow_yj8qh_6 {
  color: var(--ds-text-subtle, #a1a1aa);
  font-size: 10px;
  line-height: 1.2;
  text-transform: uppercase;
}

._list_yj8qh_19 {
  display: grid;
  gap: 8px;
}

._card_yj8qh_24 {
  display: grid;
  grid-template-columns: 22px minmax(0, 1fr) 28px;
  gap: 9px;
  align-items: start;
  min-width: 0;
  border: 1px solid var(--ds-border-strong, rgba(24, 24, 27, 0.16));
  border-radius: 8px;
  background: var(--ds-surface, #ffffff);
  padding: 12px;
  box-shadow: 0 8px 22px rgba(24, 24, 27, 0.05);
}

._icon_yj8qh_37 {
  display: grid;
  width: 18px;
  height: 18px;
  place-items: center;
  margin-top: 1px;
  color: var(--ds-text-muted, #6b7280);
  font-size: 15px;
  line-height: 1;
}

._body_yj8qh_48 {
  min-width: 0;
}

._conclusion_yj8qh_52 {
  margin: 3px 0 0;
  color: var(--ds-text, #18181b);
  font-size: 13px;
  font-weight: 650;
  line-height: 1.4;
  overflow-wrap: anywhere;
}

._dismiss_yj8qh_61 {
  display: grid;
  width: 28px;
  height: 28px;
  place-items: center;
  border: 1px solid var(--ds-border, rgba(24, 24, 27, 0.08));
  border-radius: 8px;
  background: var(--ds-bg-alt, #f5f5f4);
  color: var(--ds-text-muted, #6b7280);
  cursor: pointer;
}

._dismiss_yj8qh_61:hover {
  border-color: var(--ds-border-strong, rgba(24, 24, 27, 0.16));
  color: var(--ds-text, #18181b);
}

._dismiss_yj8qh_61 svg {
  pointer-events: none;
}

._dismiss_yj8qh_61:disabled {
  cursor: default;
  opacity: 0.5;
}

._evidence_yj8qh_87,
._action_yj8qh_88 {
  margin: 6px 0 0;
  color: var(--ds-text-muted, #6b7280);
  font-size: 12px;
  line-height: 1.45;
  overflow-wrap: anywhere;
}

._evidence_yj8qh_87 {
  font-family: var(--ds-font-mono, ui-monospace, SFMono-Regular, Menlo, monospace);
  font-size: 11px;
}

._action_yj8qh_88 strong {
  color: var(--ds-text, #18181b);
  font-weight: 700;
}

._time_yj8qh_7 {
  margin-top: 8px;
  color: var(--ds-text-subtle, #a1a1aa);
  font-size: 10px;
  line-height: 1.25;
}
/*
 * DataDashboardFullscreen — scheme-E 全屏数据看板「壳」（Task 2 骨架）
 * 视觉 source: docs/design/2026-06-23-data-tab-dashboard.html
 *   (.tab-page / .board-head / .filterbar / .sync-meta)
 * 全部走 --ds-* token（frontend/src/styles/global-design.css 权威），不照搬设计稿字面 hex。
 * console no-azure（design.md §12）：仅 ink 灰阶 / --ds-* token，禁 azure / var(--ds-accent)。
 *
 * 整屏接管：本壳以 position:fixed 铺满视口（top 留出 app header）。fixed 要真正铺满，
 * 必须挂在无 CSS transform 的祖先平面下 —— reactflow 的 .react-flow__viewport 带 transform，
 * 会成为 fixed 后代的包含块致塌缩，故 DataCardSummaryNode 经 createPortal 把本壳投射到
 * document.body。天然盖住画布网格 / 缩放控件 / 其它节点。去 dock + 收画布装饰由
 * console-canvas.css 的 data-focus 作用域规则承担（见 .console-shell--data-fullscreen）。
 */

._shell_yh3d2_15 {
  /* ── scoped palette tokens (Task 1) ── */
  --dash-bg: #ffffff;
  --dash-txt: #18181b;
  --dash-muted: #6b7280;
  --dash-card: #ffffff;
  --dash-card-bd: #eef0f2;
  --dash-accent: #3b82f6;
  --dash-up: #16a34a;
  --dash-down: #ef4444;
  --dash-c1: #3b82f6;
  --dash-c2: #06b6d4;
  --dash-c3: #8b5cf6;
  --dash-c4: #22c55e;
  --dash-c5: #f59e0b;
  --dash-c6: #f43f5e;
  --dash-geo-bg: linear-gradient(150deg, #4f46e5, #06b6d4);
  /* GEO 卡渐变底皮肤 token（设计稿 .kpi--geo 终版：紫青渐变底 + 全白字 + 半透明白元素）。
     GeoVisibilityCard 用 var(--dash-geo-*, <原 ink 色>) 消费——.shell 内命中白字/渐变，
     无 .shell 时回退到原白底 ink（不塌成白底白字）。spec §4.2 消费表补此漏列。 */
  --dash-geo-fg: #fff;          /* 卡内全白字 */
  --dash-geo-bd: transparent;   /* 渐变底上卡/pill 无 ink 边框 */
  --dash-geo-chip: rgba(255, 255, 255, 0.22); /* geo-pill 半透明白 */
  --dash-geo-cta: rgba(255, 255, 255, 0.18);  /* geo-cta 半透明白 */

  position: fixed;
  inset: 0;
  top: var(--ds-header-height);
  z-index: 40;
  background: var(--dash-bg);
  padding: 22px 32px 96px;
  /* D1 — dock 滑入时让位：基础右 padding 32px + dock 占位宽（--data-sync-dock-room，由
     ConsoleCanvasPage 写到 :root，经 body portal 继承到本壳）。默认 0px → 与原 32px 右 padding
     完全一致（不回归）；dock 打开时增至 32px + (380+48)px，内容左移腾出空间。*/
  padding-right: calc(32px + var(--data-sync-dock-room, 0px));
  transition: padding-right 0.58s cubic-bezier(0.16, 1, 0.3, 1);
  overflow-y: auto;
  color: var(--ds-text);
  font-family: var(--ds-font);
}

._shell_yh3d2_15::-webkit-scrollbar {
  width: 8px;
}

._shell_yh3d2_15::-webkit-scrollbar-thumb {
  background: var(--ds-border-strong);
  border-radius: 4px;
}

/* ===== 看板页头 + 视图切换 ===== */
._boardHead_yh3d2_66 {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  margin-bottom: 16px;
}

._bhLeft_yh3d2_74 {
  display: flex;
  align-items: center;
  gap: 10px;
  min-width: 0;
}

._brandIco_yh3d2_81 {
  display: inline-flex;
  align-items: center;
  color: var(--ds-text);
}

._bhTitle_yh3d2_87 {
  font-size: 21px;
  font-weight: 800;
  letter-spacing: -0.02em;
}

._viewswitch_yh3d2_93 {
  display: inline-flex;
  background: var(--ds-bg-alt);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-pill);
  padding: 3px;
  gap: 2px;
}

._viewswitch_yh3d2_93 button {
  border: none;
  background: none;
  cursor: pointer;
  font-size: 13px;
  font-weight: 600;
  color: var(--ds-text-muted);
  padding: 6px 16px;
  border-radius: var(--ds-radius-pill);
  font-family: inherit;
}

._viewswitch_yh3d2_93 button._on_yh3d2_114 {
  background: var(--dash-accent);
  color: #fff;
  box-shadow: 0 1px 2px rgba(24, 24, 27, 0.18);
}

._viewswitch_yh3d2_93 button:hover:not(._on_yh3d2_114) {
  color: var(--ds-text);
}

/* ===== 筛选行 ===== */
._filterbar_yh3d2_4 {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  flex-wrap: wrap;
  margin-bottom: 14px;
}

._fbLeft_yh3d2_134 {
  display: flex;
  align-items: center;
  gap: 10px;
  flex-wrap: wrap;
}

._fbRight_yh3d2_141 {
  display: flex;
  align-items: center;
  gap: 10px;
}

/* 产品/平台筛选 pill（FilterDropdown triggerClassName）：与时间控件等高同语言，
   统一 34px 描边 pill，取代旧 DataCard 小 chip 与时间分段的两套尺寸不一致。 */
._filterPill_yh3d2_149 {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  height: 34px;
  padding: 0 14px;
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-pill);
  background: var(--ds-bg);
  font-size: 13px;
  font-weight: 600;
  color: var(--ds-text);
  cursor: pointer;
  transition: background 0.15s, border-color 0.15s;
  white-space: nowrap;
  font-family: inherit;
}

._filterPill_yh3d2_149:hover {
  background: var(--ds-bg-alt);
  border-color: var(--ds-text);
}

/* scope 组（产品/平台）与时间组之间的间隔，强化分组感 */
._groupGap_yh3d2_173 {
  width: 6px;
}

/* 复合时间控件：时间范围分段 + 粒度并入同一描边外框（G1） */
._timeControl_yh3d2_178 {
  display: inline-flex;
  align-items: center;
  height: 34px;
  padding: 3px;
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-pill);
  background: var(--ds-bg);
  gap: 2px;
}

._tcSeg_yh3d2_189 {
  border: none;
  background: none;
  cursor: pointer;
  height: 100%;
  font-size: 13px;
  font-weight: 600;
  color: var(--ds-text-muted);
  padding: 0 13px;
  border-radius: var(--ds-radius-pill);
  font-family: inherit;
}

._tcSeg_yh3d2_189._on_yh3d2_114 {
  background: var(--dash-accent);
  color: #fff;
}

._tcSeg_yh3d2_189:hover:not(._on_yh3d2_114) {
  color: var(--ds-text);
}

._tcDiv_yh3d2_211 {
  width: 1px;
  height: 16px;
  background: var(--ds-border);
  margin: 0 4px;
  flex: none;
}

._tcGran_yh3d2_219 {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  border: none;
  background: none;
  cursor: pointer;
  height: 100%;
  font-size: 13px;
  font-weight: 600;
  color: var(--ds-text);
  padding: 0 12px 0 4px;
  border-radius: var(--ds-radius-pill);
  font-family: inherit;
}

._tcGran_yh3d2_219:hover {
  background: var(--ds-bg-alt);
}

._tcKey_yh3d2_239 {
  color: var(--ds-text-subtle);
  font-weight: 600;
}

._tcGran_yh3d2_219 i {
  font-style: normal;
  font-size: 9px;
  color: var(--ds-text-muted);
}

._btnSync_yh3d2_250 {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  height: 34px;
  padding: 0 16px;
  border: 1px solid var(--dash-accent);
  border-radius: var(--ds-radius-pill);
  background: var(--dash-accent);
  color: #fff;
  font-size: 13px;
  font-weight: 700;
  cursor: pointer;
  transition: opacity 0.15s;
  white-space: nowrap;
  font-family: inherit;
}

._btnSync_yh3d2_250:hover {
  opacity: 0.88;
}

._btnGhost_yh3d2_272 {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  height: 34px;
  padding: 0 15px;
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-pill);
  background: var(--ds-bg);
  font-size: 13px;
  font-weight: 600;
  color: var(--ds-text);
  cursor: pointer;
  font-family: inherit;
}

._btnGhost_yh3d2_272:hover {
  background: var(--ds-bg-alt);
}

._btnGhost_yh3d2_272 i {
  font-style: normal;
  font-size: 9px;
  color: var(--ds-text-muted);
}

/* ===== 单条 meta 行（去重）：左段同步状态 │ 右段平台能力，诚实口径「每 12h 同步」 ===== */
._metaLine_yh3d2_299 {
  display: flex;
  align-items: center;
  gap: 10px;
  flex-wrap: wrap;
  margin-bottom: 24px;
  padding: 0 2px;
  font-size: 12px;
  color: var(--ds-text-muted);
}

._mlItem_yh3d2_310 {
  display: inline-flex;
  align-items: center;
  gap: 6px;
}

._mlSep_yh3d2_316 {
  color: var(--ds-text-subtle);
}

/* 强分隔线：把「同步状态段」与「平台能力段」在视觉上分成左右两组 */
._mlStrongSep_yh3d2_321 {
  width: 1px;
  height: 13px;
  background: var(--ds-border-strong);
  margin: 0 4px;
  flex: none;
}

._ssDot_yh3d2_329 {
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: var(--ds-success);
  display: inline-block;
}

/* ===== 平台能力段（嵌在 meta 行右段，诚实标注：抖音真直连 / 其它建设中）===== */
._capWrap_yh3d2_338 {
  display: inline-flex;
  align-items: center;
  gap: 14px;
  flex-wrap: wrap;
}

._capOk_yh3d2_345,
._capPending_yh3d2_346 {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-weight: 600;
}

._capOk_yh3d2_345 {
  color: var(--ds-text);
}

._capPending_yh3d2_346 {
  color: var(--ds-text-muted);
}

._capDotOk_yh3d2_361,
._capDotPending_yh3d2_362 {
  width: 6px;
  height: 6px;
  border-radius: 50%;
  display: inline-block;
}

._capDotOk_yh3d2_361 {
  background: var(--ds-success);
}

._capDotPending_yh3d2_362 {
  background: var(--ds-text-subtle);
}

/* ===== 内容插槽（Task 5-10 注入 KPI / 洞察 / 趋势 / 榜单）===== */
._contentSlot_yh3d2_378 {
  display: block;
}

/* KPI 行外包（compact 密集网格 Task 2）：KpiBento 内部 8 列布局由其自管（Task 3 控），
   此处仅作行容器并与下方图表网格留间距。 */
._kpiRow_yh3d2_384 {
  display: block;
  margin-bottom: 16px;
}

/* ===== compact 密集网格（Task 2）=====
   Source: docs/design/2026-06-30-data-dashboard-compact.html .charts（repeat(6,1fr)）。
   6 列网格按序：播放趋势 span3 / 健康分 span1 / 占比 span2 ｜ 堆叠柱 span2 / 雷达 span2 / 漏斗 span2
   ｜ 已发布成品 span4 / AI 洞察（insightsCol）span2。配色仍走 --dash-* token / no-azure。 */
._mono_yh3d2_393 {
  font-family: var(--ds-font-mono);
  font-feature-settings: "tnum" 1;
  font-variant-numeric: tabular-nums;
}

._chartGrid_yh3d2_399 {
  display: grid;
  grid-template-columns: repeat(6, 1fr);
  gap: 16px;
  grid-auto-rows: minmax(168px, auto);
  margin-bottom: 26px;
}

._span1_yh3d2_407 {
  grid-column: span 1;
}

._span2_yh3d2_411 {
  grid-column: span 2;
}

._span3_yh3d2_415 {
  grid-column: span 3;
}

._span4_yh3d2_419 {
  grid-column: span 4;
}

/* AI 洞察列（末行右格 span2）：纵向堆叠 InsightStrip 卡片。 */
._insightsCol_yh3d2_424 {
  grid-column: span 2;
  display: flex;
  flex-direction: column;
  gap: 10px;
}

._chartCard_yh3d2_431 {
  display: flex;
  flex-direction: column;
  padding: 15px 17px 12px;
  background: var(--dash-card);
  border: 1px solid var(--dash-card-bd);
  border-radius: var(--ds-radius-lg);
  box-shadow: 0 1px 2px rgba(24, 24, 27, 0.04), 0 8px 24px -16px rgba(24, 24, 27, 0.16);
}

._ccTop_yh3d2_441 {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
}

._ccT_yh3d2_441 {
  font-size: 13px;
  font-weight: 700;
  color: var(--ds-text);
}

._ccM_yh3d2_454 {
  font-size: 10px;
  color: var(--ds-text-subtle);
}

._ccChart_yh3d2_459 {
  position: relative;
  margin-top: 10px;
  width: 100%;
  /* 收紧到 finetune 目标稿卡格密度（原 230px 令 gauge/donut 飘在大片空白里）。
     grid-auto-rows minmax(168px,auto) 保证不低于内容高；gauge(≈125)/donut(≈124) 均容纳。 */
  height: 176px;
}

/* 雷达 / 漏斗单独放宽（DEE-442）：176px 挤压 5 维雷达轴标签与漏斗横条到不可读；
   scoped 到 ccChartTall，不影响同行 gauge/donut/stackbar（stackbar 内部 flex:1 也随行高自适应变高，无副作用）。 */
._ccChartTall_yh3d2_470 {
  height: 230px;
}

._ccChart_yh3d2_459 > svg {
  display: block;
  width: 100%;
  height: 100%;
  overflow: visible;
}

/* 图表区状态提示（loading / error）：居中静态文案，ink 灰阶，无伪造数据。 */
._ccHint_yh3d2_482 {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 100%;
  height: 100%;
  font-size: 12px;
  color: var(--ds-text-subtle);
}

/* 图表容纳不溢出（迁移自原 .rowThree 专用规则）：多系列雷达 / 漏斗 svg 经自身 flex + min-height:0
   收缩到卡内视口，卡片 overflow:hidden 兜底裁切、min-width:0 防被宽内容撑破网格列。 */
._chartGrid_yh3d2_399 ._chartCard_yh3d2_431 {
  min-width: 0;
  overflow: hidden;
}

._chartGrid_yh3d2_399 ._ccChart_yh3d2_459 {
  min-height: 0;
}

/* compact 断点：降到 2 列，span2/3/4 统一占满两列（沿用 compact 设计稿断点）。 */
@media (max-width: 1200px) {
  ._chartGrid_yh3d2_399 {
    grid-template-columns: repeat(2, 1fr);
  }

  ._span2_yh3d2_411,
  ._span3_yh3d2_415,
  ._span4_yh3d2_419 {
    grid-column: span 2;
  }
}

/* ===== GEO 监控子视图容器（Task 9 注入 GeoMonitorView）===== */
._geoView_yh3d2_517 {
  display: block;
}

@media (max-width: 720px) {
  ._shell_yh3d2_15 {
    padding: 18px 16px 88px;
  }
}
/*
 * GeoScoreCard · GEO 审核卡样式
 * 1:1 取 docs/design/2026-06-29-geo-scorer-rewriter-mockup.html（.sc）+ 画布稿（.scard）数值。
 * console scope（design.md §12）：默认 ink 单色——综合分/条形/CTA 全 var(--ds-text)；
 * 语义色仅用于 band 语气与弱项条形（warning/danger）。颜色一律 --ds-* token，无裸 hex。
 * 宽度 280px 与 childArticle 收拢态等宽，成并排匹配对。
 */
.geo-score-card {
  width: 280px;
  background: var(--ds-bg);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-lg);
  padding: 16px 18px;
  font-family: var(--ds-font);
  color: var(--ds-text);
  box-sizing: border-box;
  display: flex;
  flex-direction: column;
}

.geo-score-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
}
.geo-score-kicker {
  font-family: var(--ds-font-mono);
  font-size: 10px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--ds-text-subtle);
}

/* ===== 评分态 ===== */
.geo-score-top {
  border-bottom: 1px solid var(--ds-border);
  padding-bottom: 13px;
  margin: 10px 0 13px;
}
.geo-score-gtitle {
  font-family: var(--ds-font-mono);
  font-size: 11px;
  color: var(--ds-text-subtle);
  letter-spacing: 0.08em;
  text-transform: uppercase;
}
.geo-score-total {
  font-family: var(--ds-font-mono);
  font-feature-settings: "tnum" 1;
  font-size: 40px;
  font-weight: 600;
  letter-spacing: -0.03em;
  line-height: 1;
  margin: 4px 0 2px;
}
.geo-score-total small {
  font-size: 16px;
  color: var(--ds-text-subtle);
  font-weight: 500;
}
.geo-score-band {
  display: inline-block;
  font-family: var(--ds-font-mono);
  font-size: 11.5px;
  margin-top: 6px;
  padding: 2px 8px;
  border-radius: var(--ds-radius-pill);
  border: 1px solid var(--ds-border-strong);
  color: var(--ds-text);
}
.geo-score-band--ok {
  color: var(--ds-success);
}
.geo-score-band--warn {
  color: var(--ds-warning);
}
.geo-score-band--bad {
  color: var(--ds-danger);
}

.geo-score-grouptitle {
  font-family: var(--ds-font-mono);
  font-size: 10px;
  color: var(--ds-text-subtle);
  letter-spacing: 0.06em;
  text-transform: uppercase;
  margin: 11px 0 6px;
}
.geo-score-group:first-child .geo-score-grouptitle {
  margin-top: 0;
}
.geo-score-dim {
  display: grid;
  grid-template-columns: 96px 1fr 30px;
  align-items: center;
  gap: 8px;
  margin-bottom: 6px;
  font-size: 12px;
}
.geo-score-dn {
  color: var(--ds-text);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.geo-score-dn em {
  font-style: normal;
  color: var(--ds-text-subtle);
  font-family: var(--ds-font-mono);
  font-size: 10px;
  margin-left: 3px;
}
.geo-score-bar {
  height: 6px;
  background: var(--ds-bg-deep);
  border-radius: var(--ds-radius-pill);
  overflow: hidden;
}
.geo-score-bar i {
  display: block;
  height: 100%;
  border-radius: var(--ds-radius-pill);
  background: var(--ds-text);
}
.geo-score-bar--weak i {
  background: var(--ds-warning);
}
.geo-score-bar--bad i {
  background: var(--ds-danger);
}
.geo-score-dv {
  font-family: var(--ds-font-mono);
  font-size: 11px;
  color: var(--ds-text-muted);
  text-align: right;
}

.geo-score-weakest {
  margin-top: 13px;
  background: var(--ds-bg-alt);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
  padding: 11px 13px;
}
.geo-score-weakest-title {
  font-family: var(--ds-font-mono);
  font-size: 11px;
  color: var(--ds-text-muted);
  text-transform: uppercase;
  letter-spacing: 0.06em;
  margin-bottom: 7px;
}
.geo-score-weakest-item {
  font-size: 12px;
  color: var(--ds-text);
  margin-bottom: 5px;
  display: flex;
  gap: 7px;
}
.geo-score-weakest-item:last-child {
  margin-bottom: 0;
}
.geo-score-weakest-item b {
  font-family: var(--ds-font-mono);
  font-size: 11px;
  color: var(--ds-warning);
  white-space: nowrap;
}
.geo-score-weakest-item span {
  color: var(--ds-text-muted);
}

.geo-score-diag {
  font-size: 12.5px;
  color: var(--ds-text-muted);
  margin-top: 11px;
  line-height: 1.55;
}
.geo-score-diag-label {
  display: inline;
  margin-right: 2px;
}
.geo-score-diag-md {
  display: inline;
  color: inherit;
  font-size: inherit;
  line-height: inherit;
}
.geo-score-diag-md.geo-md p {
  margin: 0 0 0.35em;
  color: inherit;
}
.geo-score-diag-md.geo-md > *:last-child {
  margin-bottom: 0;
}
.geo-score-diag-md.geo-md strong {
  color: var(--ds-text);
  font-weight: 600;
}

.geo-score-cta {
  margin-top: 14px;
  display: flex;
  gap: 9px;
}
.geo-score-btn {
  font-size: 13px;
  font-weight: 560;
  border-radius: var(--ds-radius-sm);
  padding: 9px 16px;
  cursor: pointer;
  border: 1px solid var(--ds-text);
  font-family: var(--ds-font);
}
.geo-score-btn--primary {
  flex: 1;
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
}
.geo-score-btn--ghost {
  background: var(--ds-bg);
  color: var(--ds-text);
  border-color: var(--ds-border-strong);
}

/* ===== 采用后回退 affordance（scored 态底部，次级 ink，不喧宾夺主） ===== */
.geo-score-revert {
  margin-top: 9px;
  display: flex;
  justify-content: center;
}
.geo-score-revert-btn {
  font-size: 12px;
  font-weight: 500;
  padding: 6px 14px;
  color: var(--ds-text-muted);
}

/* ===== 改写对比态（mockup §04 .cmp / .deltas / .supl） ===== */
.geo-score-compare {
  margin-top: 10px;
}
.geo-score-cmphead {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  border-bottom: 1px solid var(--ds-border);
  padding-bottom: 11px;
}
.geo-score-jump {
  font-family: var(--ds-font-mono);
  font-feature-settings: "tnum" 1;
  font-size: 12.5px;
  color: var(--ds-text-muted);
  display: flex;
  align-items: baseline;
  gap: 2px;
}
.geo-score-jump b {
  font-size: 22px;
  font-weight: 600;
  color: var(--ds-text);
}
.geo-score-jump-arrow {
  color: var(--ds-text-subtle);
  margin: 0 5px;
}
.geo-score-jump-after {
  color: var(--ds-text);
}
.geo-score-jump-delta {
  font-size: 13px;
  margin-left: 5px;
}
.geo-score-jump-delta--up {
  color: var(--ds-success);
}
.geo-score-jump-delta--down {
  color: var(--ds-danger);
}
.geo-score-jump-delta--flat {
  color: var(--ds-text-subtle);
}
.geo-score-cmpband {
  font-family: var(--ds-font-mono);
  font-size: 11.5px;
  padding: 3px 9px;
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-pill);
  color: var(--ds-text);
  white-space: nowrap;
}

.geo-score-deltas {
  margin-top: 11px;
}
.geo-score-delta {
  display: grid;
  grid-template-columns: 1fr auto;
  align-items: center;
  gap: 10px;
  font-size: 12.5px;
  padding: 6px 0;
  border-bottom: 1px dashed var(--ds-border);
}
.geo-score-delta:last-child {
  border-bottom: none;
}
.geo-score-chg {
  font-family: var(--ds-font-mono);
  font-feature-settings: "tnum" 1;
  font-size: 11.5px;
  color: var(--ds-text-muted);
  white-space: nowrap;
}
.geo-score-chg-arrow {
  color: var(--ds-text-subtle);
  margin: 0 5px;
}
.geo-score-chg-after {
  font-weight: 600;
}
.geo-score-chg-after--up {
  color: var(--ds-success);
}
.geo-score-chg-after--down {
  color: var(--ds-danger);
}
.geo-score-chg-after--flat {
  color: var(--ds-text);
}

.geo-score-supplements {
  margin-top: 13px;
  background: var(--ds-bg-alt);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
  padding: 11px 13px;
}
.geo-score-supplements-title {
  font-family: var(--ds-font-mono);
  font-size: 11px;
  color: var(--ds-danger);
  text-transform: uppercase;
  letter-spacing: 0.06em;
  margin-bottom: 7px;
}
.geo-score-supplement-item {
  font-size: 12px;
  color: var(--ds-text);
  margin-bottom: 5px;
  display: flex;
  gap: 7px;
}
.geo-score-supplement-item:last-child {
  margin-bottom: 0;
}
.geo-score-supplement-item b {
  font-family: var(--ds-font-mono);
  font-size: 11px;
  color: var(--ds-danger);
  white-space: nowrap;
}
.geo-score-supplement-item span {
  color: var(--ds-text-muted);
}

/* 280px 窄卡：采用并替换占整行，保留原文 / 再优化一轮 并排第二行 */
.geo-score-compare .geo-score-cta {
  flex-wrap: wrap;
}
.geo-score-compare .geo-score-btn--primary {
  flex: 1 1 100%;
}
.geo-score-compare .geo-score-btn--ghost {
  flex: 1 1 0;
}
.geo-score-btn:disabled {
  opacity: 0.55;
  cursor: progress;
}

/* ===== 评分中 / 不可用占位 ===== */
.geo-score-placeholder {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 12px;
  padding: 34px 8px;
  text-align: center;
}
.geo-score-placeholder-text {
  font-size: 13px;
  color: var(--ds-text-muted);
}
.geo-score-placeholder--err .geo-score-placeholder-text {
  color: var(--ds-text);
}
.geo-score-spin {
  width: 28px;
  height: 28px;
  border-radius: 50%;
  border: 3px solid var(--ds-border-strong);
  border-top-color: var(--ds-text);
  animation: geo-score-sp 0.9s linear infinite;
}
@keyframes geo-score-sp {
  to {
    transform: rotate(360deg);
  }
}

/* ===== 进度态（流式改写中）— 对齐 2026-07-09 设计稿 .prog-panel ===== */
.geo-score-progress {
  margin-top: 10px;
}
.geo-score-prog-head {
  margin: 0 0 12px;
  padding-bottom: 12px;
  border-bottom: 1px solid var(--ds-border);
}
.geo-score-prog-status-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
}
.geo-score-prog-live {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  font-size: 13px;
  font-weight: 620;
}
.geo-score-prog-pulse {
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--ds-text);
  box-shadow: 0 0 0 0 rgba(24, 24, 27, 0.35);
  animation: geo-score-pulse 1.4s ease-out infinite;
}
@keyframes geo-score-pulse {
  0% {
    box-shadow: 0 0 0 0 rgba(24, 24, 27, 0.35);
  }
  70% {
    box-shadow: 0 0 0 8px rgba(24, 24, 27, 0);
  }
  100% {
    box-shadow: 0 0 0 0 rgba(24, 24, 27, 0);
  }
}
.geo-score-prog-pct {
  font-family: var(--ds-font-mono);
  font-feature-settings: "tnum" 1;
  font-size: 18px;
  font-weight: 600;
  letter-spacing: -0.02em;
}
.geo-score-prog-track {
  margin-top: 10px;
  height: 6px;
  background: var(--ds-bg-deep);
  border-radius: var(--ds-radius-pill);
  overflow: hidden;
}
.geo-score-prog-track i {
  display: block;
  height: 100%;
  width: 0%;
  background: var(--ds-text);
  border-radius: var(--ds-radius-pill);
  transition: width 0.25s ease;
}
.geo-score-prog-now {
  margin-top: 8px;
  font-size: 12px;
  color: var(--ds-text-muted);
  min-height: 1.4em;
}

.geo-score-steps {
  display: grid;
  gap: 0;
  margin-top: 4px;
}
.geo-score-step {
  display: grid;
  grid-template-columns: 22px 1fr;
  gap: 8px;
  padding: 9px 0;
  border-bottom: 1px dashed var(--ds-border);
}
.geo-score-step:last-child {
  border-bottom: none;
}
.geo-score-step-dot {
  width: 18px;
  height: 18px;
  border-radius: 50%;
  border: 1.5px solid var(--ds-border-strong);
  display: flex;
  align-items: center;
  justify-content: center;
  margin-top: 1px;
  font-family: var(--ds-font-mono);
  font-size: 9px;
  color: var(--ds-text-subtle);
  background: var(--ds-bg);
}
.geo-score-step--done .geo-score-step-dot {
  background: var(--ds-text);
  border-color: var(--ds-text);
  color: var(--ds-text-on-ink);
}
.geo-score-step--active .geo-score-step-dot {
  border-color: var(--ds-text);
  color: var(--ds-text);
  box-shadow: 0 0 0 3px rgba(24, 24, 27, 0.08);
}
.geo-score-step-title {
  font-size: 12.5px;
  font-weight: 600;
  color: var(--ds-text-muted);
}
.geo-score-step--active .geo-score-step-title,
.geo-score-step--done .geo-score-step-title {
  color: var(--ds-text);
}
.geo-score-step-desc {
  font-size: 11.5px;
  color: var(--ds-text-subtle);
  margin-top: 2px;
  line-height: 1.45;
}
.geo-score-step--active .geo-score-step-desc {
  color: var(--ds-text-muted);
}

.geo-score-target-box {
  margin-top: 12px;
  background: var(--ds-bg-alt);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
  padding: 10px 12px;
}
.geo-score-target-title {
  font-family: var(--ds-font-mono);
  font-size: 10.5px;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--ds-text-muted);
  margin-bottom: 8px;
}
.geo-score-target-item {
  display: grid;
  grid-template-columns: 1fr auto;
  gap: 8px;
  align-items: center;
  font-size: 12px;
  margin-bottom: 6px;
}
.geo-score-target-item:last-child {
  margin-bottom: 0;
}
.geo-score-target-item span {
  color: var(--ds-text-muted);
}
.geo-score-target-item b {
  font-family: var(--ds-font-mono);
  font-size: 11px;
  font-weight: 560;
  color: var(--ds-text-subtle);
}
.geo-score-target-item--hit b {
  color: var(--ds-success);
}
.geo-score-target-item--hit span {
  color: var(--ds-text);
}

.geo-score-prog-note {
  margin-top: 8px;
  text-align: center;
  font-size: 12px;
  color: var(--ds-text-subtle);
  font-family: var(--ds-font-mono);
}

/* 失败轻提示：不叠第二颗主按钮，重试走主 CTA「重试优化」 */
.geo-score-fail-line {
  margin-top: 10px;
  font-size: 12px;
  color: var(--ds-text-muted);
  line-height: 1.45;
}
.geo-score-fail-line b {
  color: var(--ds-text);
  font-weight: 600;
}
.geo-score-fail-line button {
  margin-left: 6px;
  border: none;
  background: none;
  padding: 0;
  font-size: 12px;
  font-family: var(--ds-font);
  color: var(--ds-text-subtle);
  cursor: pointer;
  text-decoration: underline;
  text-underline-offset: 2px;
}
.geo-score-fail-line button:hover {
  color: var(--ds-text);
}

/* 保留原文后：stash 改写稿回看入口 */
.geo-score-draft-keep {
  margin-top: 12px;
  padding-top: 12px;
  border-top: 1px dashed var(--ds-border);
}
.geo-score-draft-keep-text {
  font-size: 12px;
  color: var(--ds-text-muted);
  line-height: 1.45;
  margin-bottom: 8px;
}
.geo-score-draft-keep .geo-score-btn {
  width: 100%;
}
/*
 * PublishConfirmCard · 发布确认卡样式
 *
 * 视觉权威: docs/design/2026-06-03-canvas-publish-experience.html STEP 02
 *           .ccard / .cardHead / .cbody / .cf-* / .acct / .cta 同款结构
 * 设计 token: frontend/src/styles/global-design.css (--ds-*)
 * console scope 规则 (design.md §12): 强调用 ink (--ds-text)，禁 azure
 *
 * 骨架对齐 AuthProgressCard.module.css (.card/.cardHead/.cancelBtn 同款)
 */

/* ── Card 骨架 ── */
._card_795yh_5 {
  background: var(--ds-surface);
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-lg);
  box-shadow: var(--ds-shadow-deep);
  overflow: hidden;
  display: flex;
  flex-direction: column;
  width: 396px;
  flex-shrink: 0;
}

/* ── 卡头：emoji + 标题 + badge + 关闭按钮 ── */
._cardHead_795yh_5 {
  display: flex;
  align-items: center;
  gap: var(--ds-space-2);
  padding: 13px var(--ds-space-4);
  border-bottom: 1px solid var(--ds-border);
}

._cardEmoji_795yh_34 {
  font-size: 15px;
  flex-shrink: 0;
}

._cardTitle_795yh_39 {
  font-size: 13px;
  font-weight: 700;
  color: var(--ds-text);
}

._statusBadge_795yh_45 {
  margin-left: var(--ds-space-2);
  font-size: 11px;
  font-weight: 700;
  color: var(--ds-text-muted);
  padding: 2px var(--ds-space-2);
  background: var(--ds-bg-deep);
  border-radius: var(--ds-radius-pill);
  font-family: var(--ds-font-mono);
}

._closeBtn_795yh_56 {
  margin-left: auto;
  width: 26px;
  height: 26px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg);
  color: var(--ds-text-muted);
  cursor: pointer;
  font-size: 13px;
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
}

._closeBtn_795yh_56:hover {
  border-color: var(--ds-border-strong);
  color: var(--ds-text);
}

/* ── 卡体 ── */
._cbody_795yh_5 {
  padding: var(--ds-space-4);
}

/* ── 视频信息行 ── */
._cfVideo_795yh_83 {
  display: flex;
  gap: 11px;
  align-items: flex-start;
  padding-bottom: 14px;
  border-bottom: 1px solid var(--ds-border);
}

/* 视频占位深底：design 稿专有视觉值，global-design 无对应 --ds token */
._cfThumb_795yh_92 {
  width: 48px;
  height: 64px;
  border-radius: var(--ds-radius-sm);
  flex-shrink: 0;
  overflow: hidden;
  position: relative;
  background: #2b3133;
}

._cfThumbImg_795yh_102 {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

/* 视频占位深底：design 稿专有视觉值，global-design 无对应 --ds token */
._cfThumbPlaceholder_795yh_109 {
  position: absolute;
  inset: 0;
  background: linear-gradient(180deg, #6c7a7c, #2b3133);
}

._cfMeta_795yh_115 {
  flex: 1;
  min-width: 0;
}

._cfFieldLabel_795yh_120 {
  font-family: var(--ds-font-mono);
  font-size: 10px;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--ds-text-subtle);
  font-weight: 600;
  margin-bottom: 4px;
}

._cfTitleInput_795yh_130,
._cfTagsInput_795yh_131 {
  width: 100%;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg);
  color: var(--ds-text);
  font-family: var(--ds-font);
  outline: none;
}

._cfTitleInput_795yh_130 {
  min-height: 50px;
  padding: 7px 9px;
  resize: vertical;
  font-size: 13px;
  font-weight: 700;
  line-height: 1.35;
}

._cfTagsInput_795yh_131 {
  height: 32px;
  padding: 0 9px;
  font-size: 11px;
}

._cfTitleInput_795yh_130:focus,
._cfTagsInput_795yh_131:focus {
  border-color: var(--ds-border-strong);
  box-shadow: 0 0 0 2px color-mix(in srgb, var(--ds-text) 8%, transparent);
}

._cfTitleInput_795yh_130 + ._cfFieldLabel_795yh_120 {
  margin-top: var(--ds-space-2);
}

._cfTags_795yh_131 {
  display: flex;
  flex-wrap: wrap;
  gap: 4px;
  margin-top: var(--ds-space-2);
}

._cfTag_795yh_131 {
  font-size: 11px;
  padding: 2px var(--ds-space-2);
  border-radius: var(--ds-radius-pill);
  background: var(--ds-bg-alt);
  border: 1px solid var(--ds-border);
  color: var(--ds-text-muted);
  font-weight: 500;
}

/* ── 信息块（账号列表 / 发布时间） ── */
._cfBlock_795yh_184 {
  margin-top: 15px;
}

._cfBlockHead_795yh_188 {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 9px;
}

._cfBlockTitle_795yh_195 {
  font-size: 12px;
  font-weight: 700;
  color: var(--ds-text);
}

._cfCount_795yh_201 {
  font-family: var(--ds-font-mono);
  font-size: 11px;
  color: var(--ds-text-muted);
}

/* ── 账号列表 ── */
._acctGrid_795yh_208 {
  display: flex;
  flex-direction: column;
  gap: 7px;
}

._acct_795yh_5 {
  display: flex;
  align-items: center;
  gap: 11px;
  padding: 9px 11px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-md);
  cursor: pointer;
  background: var(--ds-bg);
  transition: border-color 0.15s, background 0.15s;
}

._acct_795yh_5:hover {
  border-color: var(--ds-border-strong);
}

._acctSel_795yh_230 {
  border-color: var(--ds-text);
  background: var(--ds-bg-alt);
}

._acctAv_795yh_235 {
  width: 34px;
  height: 34px;
  border-radius: 9px;
  flex-shrink: 0;
  display: flex;
  align-items: center;
  justify-content: center;
}

._acctInfo_795yh_245 {
  flex: 1;
  min-width: 0;
}

._acctRow_795yh_250 {
  font-size: 13px;
  line-height: 1.25;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

._acctPlat_795yh_258 {
  color: var(--ds-text-muted);
  font-weight: 600;
}

._acctDot_795yh_263 {
  color: var(--ds-text-subtle);
  margin: 0 5px;
}

._acctNick_795yh_268 {
  color: var(--ds-text);
  font-weight: 700;
}

._acctHandle_795yh_273 {
  font-size: 11px;
  color: var(--ds-text-subtle);
  font-family: var(--ds-font-mono);
  margin-top: 1px;
}

._acctStatus_795yh_280 {
  display: inline-flex;
  align-items: center;
  width: max-content;
  margin-top: 4px;
  padding: 1px 6px;
  border-radius: var(--ds-radius-pill);
  background: var(--ds-bg-alt);
  color: var(--ds-text-muted);
  font-size: 10px;
  font-weight: 700;
  line-height: 1.4;
}

._acctStatus_795yh_280[data-status="ok"] {
  background: color-mix(in srgb, var(--ds-success) 12%, transparent);
  color: var(--ds-success);
}

._acctStatus_795yh_280[data-status="warn"] {
  background: color-mix(in srgb, var(--ds-warning) 12%, transparent);
  color: var(--ds-warning);
}

._acctStatus_795yh_280[data-status="cool"] {
  background: color-mix(in srgb, var(--ds-danger) 10%, transparent);
  color: var(--ds-danger);
}

._acctCheck_795yh_309 {
  width: 20px;
  height: 20px;
  border-radius: 6px;
  border: 2px solid var(--ds-border-strong);
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
  color: var(--ds-text-on-ink);
  font-size: 12px;
}

._acctCheckSel_795yh_322 {
  background: var(--ds-text);
  border-color: var(--ds-text);
}

/* ── 发布时间 ── */
._cfTime_795yh_328 {
  display: flex;
  gap: var(--ds-space-2);
  margin-top: 6px;
}

._cfTimeOpt_795yh_334 {
  flex: 1;
  display: flex;
  align-items: center;
  gap: var(--ds-space-2);
  padding: 9px 11px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-md);
  font-size: 12px;
  font-weight: 600;
  color: var(--ds-text);
}

._cfTimeOptOn_795yh_347 {
  border-color: var(--ds-text);
  background: var(--ds-bg-alt);
}

._cfTimeOptOff_795yh_352 {
  color: var(--ds-text-subtle);
  cursor: not-allowed;
}

._radio_795yh_357 {
  width: 14px;
  height: 14px;
  border-radius: 50%;
  border: 2px solid var(--ds-border-strong);
  position: relative;
  flex-shrink: 0;
}

._radioOn_795yh_366 {
  border-color: var(--ds-text);
}

._radioOn_795yh_366::after {
  content: "";
  position: absolute;
  inset: 2px;
  border-radius: 50%;
  background: var(--ds-text);
}

._soon_795yh_378 {
  margin-left: auto;
  font-size: 10px;
  font-family: var(--ds-font-mono);
  color: var(--ds-warning);
  background: color-mix(in srgb, var(--ds-warning) 12%, transparent);
  padding: 1px 6px;
  border-radius: var(--ds-radius-pill);
}

/* ── CTA：ink-on-ink，禁 azure ── */
._cta_795yh_5 {
  width: 100%;
  height: 42px;
  margin-top: var(--ds-space-4);
  border: none;
  border-radius: var(--ds-radius-md);
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
  font-size: 13px;
  font-weight: 700;
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 7px;
  font-family: var(--ds-font);
  transition: box-shadow 0.15s;
}

._cta_795yh_5:hover:not(:disabled) {
  box-shadow: var(--ds-shadow-cta-primary);
}

._cta_795yh_5:disabled {
  opacity: 0.45;
  cursor: not-allowed;
}
/*
 * PublishProgressCard · 发布进度卡样式（队列聚焦）
 *
 * 视觉权威: docs/design/2026-06-03-canvas-publish-experience.html STEP 03
 *           .ccard / .cardHead / .prog-list / .prow / .pbar / .pcount 同款
 * 设计 token: frontend/src/styles/global-design.css (--ds-*)
 * console scope 规则 (design.md §12): spinner/进度条/CTA 用 ink (--ds-text)，禁 azure
 *
 * 骨架对齐 PublishConfirmCard.module.css (.card/.cardHead/.closeBtn/.cbody)
 */

/* ── Card 骨架 ── */
._card_1u431_5 {
  background: var(--ds-surface);
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-lg);
  box-shadow: var(--ds-shadow-deep);
  overflow: hidden;
  display: flex;
  flex-direction: column;
  width: 396px;
  flex-shrink: 0;
}

/* ── 卡头：emoji + 标题 + run badge + 关闭 ── */
._cardHead_1u431_5 {
  display: flex;
  align-items: center;
  gap: var(--ds-space-2);
  padding: 13px var(--ds-space-4);
  border-bottom: 1px solid var(--ds-border);
}

._cardEmoji_1u431_34 {
  font-size: 15px;
  flex-shrink: 0;
}

._cardTitle_1u431_39 {
  font-size: 13px;
  font-weight: 700;
  color: var(--ds-text);
}

/* run 态：绿底绿字计数徽标，照 .statusBadge.run */
._statusBadge_1u431_45 {
  margin-left: var(--ds-space-2);
  font-size: 11px;
  font-weight: 700;
  color: var(--ds-text-muted);
  padding: 2px var(--ds-space-2);
  background: var(--ds-bg-deep);
  border-radius: var(--ds-radius-pill);
  font-family: var(--ds-font-mono);
}

/* design 稿专有：.statusBadge.run => color:#15803d;background:#ecfdf3 */
._statusBadgeRun_1u431_58 {
  color: #15803d; /* design 稿 success 深绿文字/浅绿底（green-700/50 对比对）；--ds-success 为 green-500(#22c55e) 不同色阶，无精确对应 token，保留 */
  background: #ecfdf3; /* design 稿 success 深绿文字/浅绿底（green-700/50 对比对）；--ds-success 为 green-500(#22c55e) 不同色阶，无精确对应 token，保留 */
}

._closeBtn_1u431_9 {
  margin-left: auto;
  width: 26px;
  height: 26px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg);
  color: var(--ds-text-muted);
  cursor: pointer;
  font-size: 13px;
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
}

._closeBtn_1u431_9:hover {
  border-color: var(--ds-border-strong);
  color: var(--ds-text);
}

/* ── 卡体 ── */
._cbody_1u431_9 {
  padding: var(--ds-space-4);
}

/* ── 账号进度列表 ── */
._progList_1u431_90 {
  display: flex;
  flex-direction: column;
  gap: var(--ds-space-2);
}

/* 基础账号行 */
._prow_1u431_5 {
  display: flex;
  align-items: center;
  gap: 11px;
  padding: 11px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-md);
  background: var(--ds-bg);
}

/* current 态：ink 边框 + 浅底 + 外发光 */
._prowCur_1u431_108 {
  border-color: var(--ds-text);
  background: var(--ds-bg-alt);
  box-shadow: 0 0 0 3px rgba(24, 24, 27, 0.04);
}

/* queued 态：dimmed */
._prowQueue_1u431_115 {
  opacity: 0.6;
}

/* error 态：红色边框提示 */
._prowError_1u431_120 {
  border-color: var(--ds-danger);
  background: var(--ds-bg);
}

/* ── 状态图标（圆形区域）── */
._stIc_1u431_126 {
  width: 28px;
  height: 28px;
  border-radius: 50%;
  flex-shrink: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 14px;
}

/* done：绿底绿字 ✓，design 稿 success 浅绿底 */
._stIcOk_1u431_138 {
  background: #ecfdf3; /* design 稿 success 深绿文字/浅绿底（green-700/50 对比对）；--ds-success 为 green-500(#22c55e) 不同色阶，无精确对应 token，保留 */
  color: var(--ds-success);
}

/* queued：灰底序号 */
._stIcQ_1u431_144 {
  background: var(--ds-bg-deep);
  color: var(--ds-text-subtle);
  font-family: var(--ds-font-mono);
  font-size: 11px;
  font-weight: 600;
}

/* error：危险红 */
._stIcError_1u431_153 {
  background: color-mix(in srgb, var(--ds-danger) 10%, transparent);
  color: var(--ds-danger);
  font-size: 12px;
}

/* current 态 ink spinner（禁 azure，用 --ds-text 作 active track） */
._spin_1u431_160 {
  width: 28px;
  height: 28px;
  border-radius: 50%;
  border: 3px solid var(--ds-bg-deep);
  border-top-color: var(--ds-text);
  animation: _spin_1u431_160 0.8s linear infinite;
  flex-shrink: 0;
}

@keyframes _spin_1u431_160 {
  to {
    transform: rotate(360deg);
  }
}

/* ── 账号信息文字区 ── */
._prowInfo_1u431_177 {
  flex: 1;
  min-width: 0;
}

._prowName_1u431_182 {
  font-size: 13px;
  font-weight: 600;
  color: var(--ds-text);
  display: flex;
  align-items: center;
  gap: 6px;
  line-height: 1.2;
}

._pe_1u431_192 {
  font-size: 14px;
  flex-shrink: 0;
}

._prowSub_1u431_197 {
  font-size: 11px;
  color: var(--ds-text-muted);
  margin-top: 2px;
  line-height: 1.4;
}

/* current 行步骤文案：ink 色（更醒目） */
._prowSubRun_1u431_205 {
  color: var(--ds-text);
}

/* error 行错误说明：危险红 */
._prowSubError_1u431_210 {
  color: var(--ds-danger);
}

/* ── 操作按钮 ── */

/* 「查看作品」：下划线文字链接风格，ink 色 */
._viewLink_1u431_217 {
  flex-shrink: 0;
  font-size: 11px;
  font-weight: 700;
  color: var(--ds-text);
  background: none;
  border: none;
  border-bottom: 1px solid var(--ds-border-strong);
  padding-bottom: 1px;
  cursor: pointer;
  line-height: 1;
}

._viewLink_1u431_217:hover {
  border-bottom-color: var(--ds-text);
}

/* 「放大看」：ink 实底按钮（禁 azure） */
._watchBtn_1u431_235 {
  flex-shrink: 0;
  height: 28px;
  padding: 0 12px;
  border-radius: var(--ds-radius-sm);
  border: 1px solid var(--ds-text);
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
  font-size: 11px;
  font-weight: 700;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  gap: 5px;
  font-family: var(--ds-font);
}

._watchBtn_1u431_235:hover {
  opacity: 0.85;
}

/* ── 底部进度条区 ── */
._progFoot_1u431_257 {
  display: flex;
  align-items: center;
  gap: 10px;
  margin-top: 14px;
  padding-top: 13px;
  border-top: 1px solid var(--ds-border);
}

/* 进度条轨道 */
._pbar_1u431_5 {
  flex: 1;
  height: 5px;
  border-radius: 3px;
  background: var(--ds-bg-deep);
  overflow: hidden;
}

/* 进度条填充：ink 色（禁 azure） */
._pbarFill_1u431_276 {
  display: block;
  height: 100%;
  background: var(--ds-text);
  border-radius: 3px;
  transition: width 0.4s ease;
}

/* Geist Mono 制式数字计数 */
._pcount_1u431_5 {
  font-family: var(--ds-font-mono);
  font-size: 12px;
  font-weight: 600;
  color: var(--ds-text);
  white-space: nowrap;
  flex-shrink: 0;
}
.video-card {
  /* tsx 内 inline border 已设 ds-border；此处保留规则以承载 hover/transition */
  position: relative;
  transition: transform 0.3s cubic-bezier(0.22, 1, 0.36, 1),
              box-shadow 0.3s cubic-bezier(0.22, 1, 0.36, 1),
              border-color 0.3s ease;
}

.video-card::before {
  content: '';
  position: absolute;
  inset: -1px;
  border-radius: inherit;
  padding: 1px;
  background: linear-gradient(135deg, rgba(77,166,255,0.4), rgba(99,102,241,0.3));
  -webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
  -webkit-mask-composite: xor;
  mask-composite: exclude;
  opacity: 0;
  transition: opacity 0.3s ease;
  pointer-events: none;
  z-index: 1;
}

.video-card:hover {
  border-color: transparent;
  box-shadow:
    0 20px 60px rgba(0,0,0,0.35),
    0 0 40px rgba(77,166,255,0.06);
  transform: translateY(-4px);
}

.video-card:hover::before {
  opacity: 1;
}

.video-card-preview-overlay {
  opacity: 0;
  transition: opacity 0.3s ease;
  backdrop-filter: blur(2px);
}

.video-card:hover .video-card-preview-overlay {
  opacity: 1;
}

.video-card-more {
  transition: color 0.2s ease, transform 0.2s ease;
}

.video-card-more:hover {
  color: #4da6ff !important;
  transform: scale(1.2);
}

/* Stagger entrance animation */
@keyframes cardFadeIn {
  from {
    opacity: 0;
    transform: translateY(16px) scale(0.97);
  }
  to {
    opacity: 1;
    transform: translateY(0) scale(1);
  }
}

.video-list-grid .video-card {
  animation: cardFadeIn 0.45s cubic-bezier(0.22, 1, 0.36, 1) both;
}

.video-list-grid .video-card:nth-child(1) { animation-delay: 0ms; }
.video-list-grid .video-card:nth-child(2) { animation-delay: 50ms; }
.video-list-grid .video-card:nth-child(3) { animation-delay: 100ms; }
.video-list-grid .video-card:nth-child(4) { animation-delay: 150ms; }
.video-list-grid .video-card:nth-child(5) { animation-delay: 200ms; }
.video-list-grid .video-card:nth-child(6) { animation-delay: 250ms; }
.video-list-grid .video-card:nth-child(7) { animation-delay: 300ms; }
.video-list-grid .video-card:nth-child(8) { animation-delay: 350ms; }
.video-list-grid .video-card:nth-child(n+9) { animation-delay: 400ms; }
/* 全屏素材管理页。挂在 console-body 早返回分支中，跨满右侧 dock 轨。 */

.ml-page {
  grid-column: 1 / -1;
  position: relative;
  display: flex;
  flex-direction: column;
  min-width: 0;
  min-height: 0;
  overflow: hidden;
  background: var(--ds-bg);
  color: var(--ds-text);
  font-family: var(--ds-font);
}

.ml-page-head {
  flex: none;
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 24px;
  padding: 30px 424px 22px 28px;
  background: var(--ds-bg);
  transition: padding-right 0.42s cubic-bezier(0.45, 0, 0.25, 1);
}

.ml-page[data-dock='off'] .ml-page-head {
  padding-right: 52px;
}

.ml-page[data-dock='wide'] .ml-page-head {
  padding-right: min(60vw, 792px);
}

.ml-page-title-block {
  min-width: 0;
}

.ml-page-title {
  margin: 0;
  font-size: 22px;
  line-height: 1.25;
  font-weight: 800;
  letter-spacing: 0;
  color: var(--ds-text);
}

.ml-page-desc {
  max-width: 760px;
  margin: 8px 0 0;
  font-size: 13px;
  line-height: 1.65;
  color: var(--ds-text-muted);
}

.ml-page-upload {
  flex: none;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 7px;
  min-width: 104px;
  height: 38px;
  padding: 0 16px;
  border: 1px solid var(--ds-text);
  border-radius: 8px;
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
  font: inherit;
  font-size: 13px;
  font-weight: 700;
  cursor: pointer;
}

.ml-page-scroll {
  flex: 1;
  min-height: 0;
  overflow: auto;
  padding: 0;
}

/* ===== 三栏工作区（Command Console）=====
   左栏(集合/筛选) | 中栏(命令条+网格) | 右栏(对话/详情)。
   右栏档位挂 .ml-page[data-dock]（素材页专属，不写 document.body）。 */
.ml-workspace {
  display: grid;
  grid-template-columns: 230px minmax(0, 1fr);
  gap: 16px;
  align-items: start;
  /* 右栏改 fixed 浮层：主区用 padding-right 给它让位（open）；收/展/加宽切档走 padding transition。 */
  padding: 16px 424px 60px 28px;
  transition: padding-right 0.42s cubic-bezier(0.45, 0, 0.25, 1);
}

.ml-page[data-dock='off'] .ml-workspace {
  padding-right: 52px;
}

.ml-page[data-dock='wide'] .ml-workspace {
  padding-right: min(60vw, 792px);
}

.ml-main {
  min-width: 0;
}

.ml-kb-search {
  display: flex;
  flex-direction: column;
  gap: 12px;
  margin: 0 0 14px;
  padding: 14px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-md);
  background: var(--ds-surface);
}

.ml-kb-search-head,
.ml-kb-search-bar,
.ml-kb-plan-top,
.ml-kb-running-line,
.ml-kb-revise {
  display: flex;
  align-items: center;
  gap: 10px;
  min-width: 0;
}

.ml-kb-search-head {
  justify-content: space-between;
}

.ml-kb-search-title {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  min-width: 0;
  font-size: 14px;
  font-weight: 750;
  color: var(--ds-text);
}

.ml-kb-search-title svg {
  flex: none;
  color: var(--ds-accent);
}

.ml-kb-search-state {
  flex: none;
  min-width: 58px;
  padding: 3px 8px;
  border-radius: var(--ds-radius-pill);
  border: 1px solid var(--ds-border);
  color: var(--ds-text-muted);
  background: var(--ds-bg-alt);
  font-size: 12px;
  line-height: 1.4;
  text-align: center;
}

.ml-kb-search-state--running,
.ml-kb-search-state--plan_creating,
.ml-kb-search-state--saving {
  color: var(--ds-accent);
  border-color: rgba(77, 166, 255, 0.35);
  background: rgba(77, 166, 255, 0.08);
}

.ml-kb-search-state--done,
.ml-kb-search-state--saved {
  color: var(--ds-success);
  border-color: rgba(34, 197, 94, 0.32);
  background: rgba(34, 197, 94, 0.08);
}

.ml-kb-search-state--failed {
  color: var(--ds-danger);
  border-color: rgba(239, 68, 68, 0.32);
  background: rgba(239, 68, 68, 0.08);
}

.ml-kb-search-bar {
  align-items: stretch;
}

.ml-kb-search-bar--single {
  justify-content: flex-start;
}

.ml-kb-search-copy {
  margin: -2px 0 0;
  max-width: 820px;
  color: var(--ds-text-muted);
  font-size: 13px;
  line-height: 1.65;
}

.ml-kb-search-input {
  flex: 1;
  min-width: 0;
  height: 38px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg);
  color: var(--ds-text);
  padding: 0 12px;
  font: inherit;
  font-size: 13px;
}

.ml-kb-search-input::placeholder,
.ml-kb-revise textarea::placeholder {
  color: var(--ds-text-subtle);
}

.ml-kb-search-input:focus,
.ml-kb-revise textarea:focus {
  outline: none;
  border-color: rgba(77, 166, 255, 0.46);
}

.ml-kb-search-btn {
  flex: none;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 7px;
  min-width: 90px;
  height: 38px;
  padding: 0 12px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg);
  color: var(--ds-text);
  font: inherit;
  font-size: 13px;
  font-weight: 650;
  cursor: pointer;
}

.ml-kb-search-btn:hover:not(:disabled) {
  border-color: var(--ds-text);
}

.ml-kb-search-btn:disabled {
  opacity: 0.48;
  cursor: not-allowed;
}

.ml-kb-search-btn--primary {
  min-width: 128px;
  border-color: var(--ds-text);
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
}

.ml-kb-search-bar--single .ml-kb-search-btn--primary {
  min-width: 172px;
}

.ml-kb-search-error {
  padding: 8px 10px;
  border: 1px solid rgba(239, 68, 68, 0.28);
  border-radius: var(--ds-radius-sm);
  background: rgba(239, 68, 68, 0.08);
  color: var(--ds-danger);
  font-size: 12.5px;
}

.ml-kb-search-progress {
  display: flex;
  align-items: center;
  gap: 8px;
  color: var(--ds-text-muted);
  font-size: 13px;
}

.ml-kb-plan {
  display: flex;
  flex-direction: column;
  gap: 10px;
  padding: 12px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg);
}

.ml-kb-plan-top {
  justify-content: space-between;
  align-items: flex-start;
}

.ml-kb-plan-top h3 {
  margin: 0;
  min-width: 0;
  color: var(--ds-text);
  font-size: 14px;
  line-height: 1.45;
}

.ml-kb-plan-steps {
  display: grid;
  gap: 8px;
  margin: 0;
  padding-left: 21px;
}

.ml-kb-plan-steps li {
  color: var(--ds-text-muted);
  font-size: 13px;
  line-height: 1.55;
}

.ml-kb-plan-steps strong {
  display: block;
  color: var(--ds-text);
  font-weight: 700;
}

.ml-kb-plan-steps span {
  display: block;
  margin-top: 2px;
}

.ml-kb-revise {
  align-items: flex-end;
}

.ml-kb-revise textarea {
  flex: 1;
  min-width: 0;
  min-height: 54px;
  max-height: 100px;
  resize: vertical;
  padding: 9px 10px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg-alt);
  color: var(--ds-text);
  font: inherit;
  font-size: 13px;
  line-height: 1.45;
}

.ml-kb-running {
  display: grid;
  gap: 8px;
  padding: 11px 12px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg);
  color: var(--ds-text-muted);
  font-size: 13px;
}

.ml-kb-running-line {
  justify-content: space-between;
}

.ml-kb-running-line strong {
  color: var(--ds-text);
  font-variant-numeric: tabular-nums;
}

.ml-kb-progress-track {
  height: 6px;
  overflow: hidden;
  border-radius: var(--ds-radius-pill);
  background: var(--ds-bg-alt);
}

.ml-kb-progress-track span {
  display: block;
  height: 100%;
  border-radius: inherit;
  background: var(--ds-accent);
  transition: width 0.25s ease;
}

.ml-kb-output {
  position: relative;
  min-height: 520px;
  max-height: 720px;
  overflow: auto;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg);
}

.ml-kb-search-saved {
  position: sticky;
  top: 0;
  z-index: 3;
  padding: 8px 12px;
  border-bottom: 1px solid rgba(34, 197, 94, 0.24);
  background: rgba(34, 197, 94, 0.09);
  color: var(--ds-success);
  font-size: 13px;
}

.ml-kb-floating-save {
  position: sticky;
  bottom: 12px;
  left: calc(100% - 136px);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 7px;
  min-width: 124px;
  height: 36px;
  margin: 0 12px 12px auto;
  border: 1px solid var(--ds-text);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
  font: inherit;
  font-size: 13px;
  font-weight: 700;
  cursor: pointer;
}

@media (max-width: 860px) {
  .ml-page-head {
    flex-direction: column;
    gap: 14px;
    padding: 22px 16px 16px;
  }

  .ml-page-upload {
    width: 100%;
  }

  .ml-workspace,
  .ml-page[data-dock='off'] .ml-workspace,
  .ml-page[data-dock='open'] .ml-workspace,
  .ml-page[data-dock='wide'] .ml-workspace {
    grid-template-columns: minmax(0, 1fr);
    gap: 12px;
    padding: 12px 12px 84px;
  }

  .ml-rail-left {
    position: relative;
    top: auto;
  }

  .ml-rail-right {
    right: 10px;
    width: min(92vw, 380px);
  }

  .ml-kb-search-bar,
  .ml-kb-revise,
  .ml-kb-plan-top {
    align-items: stretch;
    flex-direction: column;
  }

  .ml-kb-search-btn,
  .ml-kb-search-btn--primary {
    width: 100%;
  }

  .ml-kb-output {
    min-height: 420px;
  }
}

.ml-rail-left {
  position: sticky;
  top: 0;
  align-self: start;
  min-height: 120px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-lg);
  background: var(--ds-surface);
}

/* 右栏（展开态 open/wide）：fixed 浮层贴视口右缘（脱离栅格），加宽走 width transition。
   border / 圆角 / 底色由内部 .ml-rail2-full 提供，此层只做定位。 */
.ml-rail-right {
  position: fixed;
  top: calc(var(--ds-header-height, 52px) + 16px);
  right: 24px;
  width: 380px;
  height: calc(100vh - var(--ds-header-height, 52px) - 40px);
  min-height: 220px;
  z-index: 900;
  transition: width 0.42s cubic-bezier(0.45, 0, 0.25, 1);
}

.ml-page[data-dock='wide'] .ml-rail-right {
  width: min(60vw, 760px);
}

/* ===== 左栏 集合/筛选（MaterialFiltersRail）=====
   集合单选(active 4px azure 条) / 状态多选(checkbox) / 时间单选。全 --ds-* ink，azure 仅 4px 条/状态点。 */
.ml-frail {
  padding: 6px;
}

.ml-frail-search {
  display: flex;
  align-items: center;
  gap: 8px;
  height: 34px;
  padding: 0 10px;
  margin: 4px 4px 8px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
}

.ml-frail-search svg {
  flex: none;
  color: var(--ds-text-subtle);
}

.ml-frail-search input {
  flex: 1;
  min-width: 0;
  border: none;
  background: none;
  font: inherit;
  font-size: 12.5px;
  color: var(--ds-text);
}

.ml-frail-search input::placeholder {
  color: var(--ds-text-subtle);
}

.ml-frail-group {
  margin-bottom: 6px;
}

.ml-frail-h {
  margin: 0;
  padding: 9px 10px 5px;
  font-family: var(--ds-font-mono);
  font-size: 10px;
  font-weight: 600;
  letter-spacing: 0.09em;
  text-transform: uppercase;
  color: var(--ds-text-subtle);
}

.ml-frail-item {
  position: relative;
  display: flex;
  align-items: center;
  gap: 9px;
  width: 100%;
  padding: 7px 10px 7px 11px;
  border: none;
  border-radius: var(--ds-radius-sm);
  background: transparent;
  font: inherit;
  font-size: 13px;
  font-weight: 500;
  color: var(--ds-text-muted);
  text-align: left;
  cursor: pointer;
}

.ml-frail-item:hover {
  background: var(--ds-bg-alt);
  color: var(--ds-text);
}

.ml-frail-icon {
  flex: none;
  display: grid;
  place-items: center;
  width: 15px;
  color: var(--ds-text-subtle);
}

.ml-frail-count {
  margin-left: auto;
  font-family: var(--ds-font-mono);
  font-size: 11px;
  color: var(--ds-text-subtle);
  font-variant-numeric: tabular-nums;
}

.ml-frail-item--active {
  background: var(--ds-bg-alt);
  color: var(--ds-text);
  font-weight: 600;
}

.ml-frail-item--active .ml-frail-icon {
  color: var(--ds-text);
}

.ml-frail-item--active::before {
  content: '';
  position: absolute;
  left: 0;
  top: 6px;
  bottom: 6px;
  width: 4px;
  background: var(--ds-accent);
  border-radius: var(--ds-radius-pill);
}

.ml-frail-check {
  flex: none;
  display: grid;
  place-items: center;
  width: 14px;
  height: 14px;
  border: 1.5px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-sm);
}

.ml-frail-check--on {
  background: var(--ds-text);
  border-color: var(--ds-text);
}

.ml-frail-check--on::after {
  content: '';
  width: 7px;
  height: 4px;
  border: 1.6px solid var(--ds-text-on-ink, #fff);
  border-top: none;
  border-right: none;
  transform: translateY(-1px) rotate(-45deg);
}

.ml-frail-dot {
  flex: none;
  width: 7px;
  height: 7px;
  border-radius: 50%;
}

.ml-frail-dot--done {
  background: var(--ds-success);
}

.ml-frail-dot--pending {
  background: var(--ds-warning);
}

.ml-frail-dot--fail {
  background: var(--ds-danger);
}

/* ===== 顶部命令条（MaterialCommandBar）=====
   ⌘K 搜索 + 密度切换(ink 选中) + 排序 + 筛选 chip + 实时计数。全 --ds-* ink。 */
.ml-cmdbar {
  display: flex;
  align-items: center;
  gap: 12px;
  margin-bottom: 16px;
  flex-wrap: wrap;
}

.ml-cmdk {
  flex: 1;
  min-width: 240px;
  display: flex;
  align-items: center;
  gap: 10px;
  height: 42px;
  padding: 0 14px;
  background: var(--ds-surface);
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-md);
  transition: border-color 0.15s, box-shadow 0.15s;
}

.ml-cmdk:focus-within {
  border-color: var(--ds-text);
  box-shadow: var(--ds-focus-ring);
}

.ml-cmdk svg {
  flex: none;
  color: var(--ds-text-subtle);
}

.ml-cmdk input {
  flex: 1;
  min-width: 0;
  border: none;
  background: none;
  font: inherit;
  font-size: 14px;
  color: var(--ds-text);
}

.ml-cmdk input::placeholder {
  color: var(--ds-text-subtle);
}

.ml-kbd {
  display: inline-flex;
  align-items: center;
  height: 22px;
  padding: 0 7px;
  border: 1px solid var(--ds-border-strong);
  border-bottom-width: 2px;
  border-radius: var(--ds-radius-sm);
  font-family: var(--ds-font-mono);
  font-size: 11px;
  font-weight: 500;
  color: var(--ds-text-muted);
  background: var(--ds-bg-alt);
  white-space: nowrap;
}

.ml-seg {
  display: flex;
  align-items: center;
  gap: 2px;
  height: 42px;
  padding: 3px;
  flex: none;
  background: var(--ds-bg-alt);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-md);
}

.ml-seg-btn {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  height: 100%;
  padding: 0 13px;
  border: none;
  border-radius: var(--ds-radius-sm);
  background: transparent;
  font: inherit;
  font-size: 13px;
  font-weight: 500;
  color: var(--ds-text-muted);
  cursor: pointer;
  transition: background 0.15s, color 0.15s;
}

.ml-seg-btn:hover {
  color: var(--ds-text);
}

.ml-seg-btn--active {
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
}

.ml-sort-btn {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  height: 42px;
  padding: 0 15px;
  flex: none;
  background: var(--ds-surface);
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-md);
  font: inherit;
  font-size: 13px;
  font-weight: 500;
  color: var(--ds-text);
  cursor: pointer;
  transition: border-color 0.15s;
}

.ml-sort-btn:hover {
  border-color: var(--ds-text);
}

.ml-mono {
  font-family: var(--ds-font-mono);
  font-size: 12px;
  color: var(--ds-text-muted);
  font-variant-numeric: tabular-nums;
}

.ml-filter-chips {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-bottom: 14px;
  flex-wrap: wrap;
}

.ml-filter-chips:empty {
  display: none;
}

.ml-chip2 {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  height: 28px;
  padding: 0 6px 0 11px;
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-pill);
  font-size: 12.5px;
  font-weight: 500;
  background: var(--ds-surface);
}

.ml-chip2-ck {
  font-family: var(--ds-font-mono);
  font-size: 11px;
  color: var(--ds-text-muted);
  letter-spacing: 0.02em;
}

.ml-chip2-x {
  display: grid;
  place-items: center;
  width: 16px;
  height: 16px;
  border: none;
  border-radius: 50%;
  background: transparent;
  color: var(--ds-text-subtle);
  font-size: 13px;
  line-height: 1;
  cursor: pointer;
  transition: background 0.12s, color 0.12s;
}

.ml-chip2-x:hover {
  background: var(--ds-bg-deep);
  color: var(--ds-text);
}

.ml-chip-clear {
  padding: 0 6px;
  border: none;
  background: none;
  font: inherit;
  font-size: 12.5px;
  font-weight: 500;
  color: var(--ds-text-muted);
  text-decoration: underline;
  text-underline-offset: 3px;
  cursor: pointer;
}

.ml-chip-clear:hover {
  color: var(--ds-text);
}

.ml-result-count {
  margin-left: auto;
  font-family: var(--ds-font-mono);
  font-size: 11.5px;
  color: var(--ds-text-muted);
  font-variant-numeric: tabular-nums;
}

/* ===== 视频卡网格（MaterialVideoCard）— 宫格 + 列表 =====
   §12：静止无阴影；azure 仅 4px 选中条 / 2px 多选描边 / 状态点；主色 ink。 */
.ml-vgrid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
  gap: 14px;
  transition: gap 0.25s ease;
}

.ml-vcard {
  position: relative;
  display: flex;
  flex-direction: column;
  overflow: hidden;
  cursor: pointer;
  background: var(--ds-surface);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-lg);
  transition: border-color 0.15s, background 0.15s;
}

.ml-vcard:hover {
  border-color: var(--ds-border-strong);
}

.ml-vcard--multi {
  outline: 2px solid var(--ds-accent-deep);
  outline-offset: -2px;
}

.ml-vcard-media {
  position: relative;
  aspect-ratio: 16 / 9;
  overflow: hidden;
  background: var(--ds-bg-deep);
}

.ml-vcard-video {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.ml-vcard-video--fallback {
  background: linear-gradient(135deg, var(--ds-bg-alt) 0%, var(--ds-bg-deep) 100%);
}

.ml-vcard-media::after {
  content: '';
  position: absolute;
  inset: 0;
  pointer-events: none;
  background-image: radial-gradient(140% 90% at 50% 0%, transparent 55%, rgba(0, 0, 0, 0.28) 100%);
  mix-blend-mode: multiply;
  opacity: 0.5;
}

.ml-vcard-token {
  position: absolute;
  left: 8px;
  top: 8px;
  z-index: 3;
  padding: 2px 6px;
  border-radius: var(--ds-radius-sm);
  font-family: var(--ds-font-mono);
  font-size: 9.5px;
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--ds-text);
  background: rgba(255, 255, 255, 0.78);
  backdrop-filter: blur(3px);
  border: 1px solid var(--ds-border);
  transition: opacity 0.15s;
}

.ml-vcard:hover .ml-vcard-token {
  opacity: 0;
}

.ml-vcard-play {
  position: absolute;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%);
  width: 38px;
  height: 38px;
  border-radius: 50%;
  background: rgba(255, 255, 255, 0.86);
  backdrop-filter: blur(3px);
  display: grid;
  place-items: center;
  z-index: 3;
  opacity: 0;
  transition: opacity 0.18s;
}

.ml-vcard:hover .ml-vcard-play {
  opacity: 1;
}

.ml-vcard-play::after {
  content: '';
  width: 0;
  height: 0;
  border-left: 11px solid var(--ds-text);
  border-top: 7px solid transparent;
  border-bottom: 7px solid transparent;
  margin-left: 3px;
}

.ml-vcard-dur {
  position: absolute;
  right: 8px;
  bottom: 8px;
  z-index: 3;
  padding: 1px 5px;
  border-radius: var(--ds-radius-sm);
  font-family: var(--ds-font-mono);
  font-size: 10px;
  font-weight: 500;
  color: #fff;
  background: rgba(24, 24, 27, 0.72);
  backdrop-filter: blur(2px);
  font-variant-numeric: tabular-nums;
}

.ml-vcard-sel {
  position: absolute;
  left: 8px;
  top: 8px;
  z-index: 5;
  display: grid;
  place-items: center;
  width: 20px;
  height: 20px;
  border-radius: var(--ds-radius-sm);
  border: 1.5px solid rgba(255, 255, 255, 0.9);
  background: rgba(24, 24, 27, 0.35);
  backdrop-filter: blur(2px);
  cursor: pointer;
  opacity: 0;
  transition: opacity 0.15s;
}

.ml-vcard:hover .ml-vcard-sel,
.ml-vcard-sel:focus-visible {
  opacity: 1;
}

.ml-vcard--multi .ml-vcard-sel {
  opacity: 1;
  background: var(--ds-accent-deep);
  border-color: var(--ds-accent-deep);
}

.ml-vcard--multi .ml-vcard-sel::after {
  content: '';
  width: 8px;
  height: 4.5px;
  border: 1.7px solid #fff;
  border-top: none;
  border-right: none;
  transform: translateY(-1px) rotate(-45deg);
}

.ml-vcard--multi .ml-vcard-token {
  opacity: 0;
}

/* 多选模式：全部露出 checkbox、隐藏 type token（data-selecting 在 .ml-page 上，Step 5 接） */
.ml-page[data-selecting='true'] .ml-vcard-sel {
  opacity: 1;
}

.ml-page[data-selecting='true'] .ml-vcard-token {
  opacity: 0;
}

.ml-vcard-body {
  padding: 10px 11px 11px;
}

.ml-vcard-name {
  overflow: hidden;
  font-size: 12.5px;
  font-weight: 500;
  line-height: 1.35;
  color: var(--ds-text);
  white-space: nowrap;
  text-overflow: ellipsis;
}

.ml-vcard-meta {
  display: flex;
  align-items: center;
  gap: 7px;
  margin-top: 6px;
  min-width: 0;
  font-family: var(--ds-font-mono);
  font-size: 10.5px;
  color: var(--ds-text-muted);
  font-variant-numeric: tabular-nums;
}

.ml-vcard-size,
.ml-vcard-date {
  min-width: 0;
  overflow: hidden;
  white-space: nowrap;
  text-overflow: ellipsis;
}

.ml-vcard-badge {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  flex-shrink: 0;
  padding: 1px 6px 1px 5px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-pill);
  font-size: 10px;
}

.ml-vcard-badge--ok {
  color: var(--ds-success-text, #15803d);
}

.ml-vcard-badge--err {
  color: var(--ds-danger);
}

.ml-vcard-sep {
  color: var(--ds-text-subtle);
}

.ml-vcard-more {
  margin-left: auto;
  flex-shrink: 0;
  padding: 0 2px;
  border: none;
  border-radius: var(--ds-radius-sm);
  background: none;
  color: var(--ds-text-subtle);
  font-size: 15px;
  line-height: 1;
  letter-spacing: 1px;
  cursor: pointer;
}

.ml-vcard-more:hover {
  background: var(--ds-bg-alt);
  color: var(--ds-text);
}

/* 列表密度（对齐 mockup .gallery.list） */
.ml-vgrid--list {
  display: flex;
  flex-direction: column;
  gap: 0;
  overflow: hidden;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-lg);
  background: var(--ds-surface);
}

.ml-vgrid--list .ml-vcard {
  flex-direction: row;
  align-items: center;
  gap: 0;
  border: none;
  border-bottom: 1px solid var(--ds-border);
  border-radius: 0;
}

.ml-vgrid--list .ml-vcard:last-child {
  border-bottom: none;
}

.ml-vgrid--list .ml-vcard:hover {
  background: var(--ds-bg-alt);
}

.ml-vgrid--list .ml-vcard-media {
  width: 76px;
  flex-shrink: 0;
  aspect-ratio: 16 / 9;
  margin: 8px 0 8px 14px;
  border-radius: var(--ds-radius-sm);
}

.ml-vgrid--list .ml-vcard-play,
.ml-vgrid--list .ml-vcard-token,
.ml-vgrid--list .ml-vcard-dur,
.ml-vgrid--list .ml-vcard-sel {
  display: none;
}

.ml-vgrid--list .ml-vcard-body {
  flex: 1;
  display: flex;
  align-items: center;
  gap: 16px;
  padding: 0 14px;
  min-width: 0;
}

.ml-vgrid--list .ml-vcard-name {
  flex: 1;
  min-width: 0;
  font-size: 13px;
}

.ml-vgrid--list .ml-vcard-meta {
  margin-top: 0;
  min-width: 140px;
  justify-content: flex-end;
}

/* ===== 多选批量条（MaterialBatchBar）— sticky 于滚动底部 ===== */
.ml-batchbar {
  position: sticky;
  bottom: 16px;
  z-index: 45;
  margin: 14px auto 0;
  width: fit-content;
  max-width: 100%;
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 8px 8px 8px 16px;
  background: var(--ds-surface);
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-pill);
  box-shadow: 0 12px 32px -12px rgba(24, 24, 27, 0.4);
  animation: ml-batch-in 0.2s cubic-bezier(0.16, 1, 0.3, 1);
}

@keyframes ml-batch-in {
  from {
    opacity: 0;
    transform: translateY(12px);
  }
  to {
    opacity: 1;
    transform: none;
  }
}

.ml-batch-count {
  font-family: var(--ds-font-mono);
  font-size: 12px;
  color: var(--ds-text);
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
}

.ml-batch-sep {
  width: 1px;
  height: 20px;
  flex-shrink: 0;
  background: var(--ds-border);
}

.ml-batch-btn {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  height: 32px;
  padding: 0 14px;
  border: 1px solid transparent;
  border-radius: var(--ds-radius-md);
  background: transparent;
  font: inherit;
  font-size: 12.5px;
  font-weight: 600;
  white-space: nowrap;
  cursor: pointer;
  transition: border-color 0.12s, color 0.12s, background 0.12s;
}

.ml-batch-btn:disabled {
  opacity: 0.6;
  cursor: default;
}

.ml-batch-btn--ink {
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
}

.ml-batch-btn--danger {
  border-color: var(--ds-border-strong);
  color: var(--ds-danger);
}

.ml-batch-btn--danger:hover:not(:disabled) {
  border-color: var(--ds-danger);
  background: color-mix(in srgb, var(--ds-danger) 6%, transparent);
}

.ml-batch-btn--ghost {
  padding: 0 10px;
  color: var(--ds-text-muted);
}

.ml-batch-btn--ghost:hover:not(:disabled) {
  color: var(--ds-text);
}

@media (prefers-reduced-motion: reduce) {
  .ml-batchbar {
    animation: none;
  }
}

@media (max-width: 1200px) {
  .ml-workspace {
    grid-template-columns: 200px minmax(0, 1fr);
    padding-right: 384px;
  }

  .ml-page[data-dock='off'] .ml-workspace {
    padding-right: 52px;
  }

  .ml-page[data-dock='wide'] .ml-workspace {
    padding-right: min(64vw, 700px);
  }

  .ml-rail-right {
    width: 340px;
  }
}

@media (max-width: 900px) {
  .ml-workspace,
  .ml-page[data-dock='off'] .ml-workspace,
  .ml-page[data-dock='wide'] .ml-workspace {
    grid-template-columns: minmax(0, 1fr);
    padding-right: 28px;
  }

  .ml-rail-left {
    position: static;
    height: auto;
  }

  /* 移动端右栏：fixed 全宽抽屉（展开态 overlay 盖内容），收起态仍留竖标签贴右缘。 */
  .ml-rail-right,
  .ml-page[data-dock='wide'] .ml-rail-right {
    left: 12px;
    right: 12px;
    width: auto;
  }
}

@media (prefers-reduced-motion: reduce) {
  .ml-workspace {
    transition: none;
  }
}

.ml-upload-host {
  margin: 0 0 16px;
  padding: 16px;
  border: 1px solid var(--ds-border);
  border-radius: 8px;
  background: var(--ds-surface);
}

/* 无边框 section（对齐 mockup）：header 下划线 stamp + 内容直排，不再是有边框卡。 */
.ml-section {
  overflow: visible;
  margin: 0 0 28px;
  border: none;
  border-radius: 0;
  background: transparent;
}

.ml-section-head {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 12px;
  min-height: auto;
  padding: 0 0 9px;
  margin-bottom: 16px;
  border-bottom: 1px solid var(--ds-border-strong);
  background: transparent;
}

.ml-section-title {
  display: inline-flex;
  align-items: baseline;
  gap: 8px;
  min-width: 0;
  margin: 0;
  font-size: 13.5px;
  font-weight: 700;
  color: var(--ds-text);
}

.ml-section-count {
  flex: none;
  font-family: var(--ds-font-mono);
  font-size: 11.5px;
  color: var(--ds-text-muted);
  font-variant-numeric: tabular-nums;
}

.ml-section-body {
  min-height: auto;
  padding: 0;
}

.ml-section .ml-grid-empty {
  min-height: 96px;
}

.ml-dh-list {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(216px, 1fr));
  gap: 12px;
  min-height: 84px;
}

.ml-dh-card--compact {
  display: flex;
  flex-direction: row;
  align-items: center;
  gap: 13px;
  width: auto;
  min-height: 76px;
  padding: 14px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-lg);
  background: var(--ds-surface);
}

.ml-dh-card--compact:hover,
.ml-dh-add-card:hover,
.ml-doc-row:hover {
  background: var(--ds-bg-alt);
}

.ml-dh-compact-avatar {
  flex: none;
  display: grid;
  place-items: center;
  width: 44px;
  height: 44px;
  overflow: hidden;
  border: 1px solid var(--ds-border);
  border-radius: 50%;
  background: radial-gradient(120% 120% at 35% 25%, var(--ds-bg-alt) 0%, var(--ds-bg-deep) 60%, var(--ds-text-subtle) 130%);
  font-size: 16px;
  font-weight: 700;
  color: var(--ds-text);
}

.ml-dh-compact-img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.ml-dh-compact-text {
  min-width: 0;
  display: grid;
  gap: 3px;
}

.ml-dh-compact-name {
  overflow: hidden;
  font-size: 13px;
  font-weight: 800;
  color: var(--ds-text);
  white-space: nowrap;
  text-overflow: ellipsis;
}

.ml-dh-compact-badge {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  width: fit-content;
  margin-top: 6px;
  padding: 1px 8px 1px 6px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-pill);
  font-family: var(--ds-font-mono);
  font-size: 10.5px;
  color: var(--ds-text-muted);
}

.ml-dh-pill-dot {
  flex: none;
  width: 6px;
  height: 6px;
  border-radius: 50%;
}

.ml-dh-pill-dot--ready {
  background: var(--ds-success);
}

.ml-dh-pill-dot--processing {
  background: var(--ds-warning);
}

.ml-dh-add-card {
  flex: 0 0 156px;
  display: flex;
  align-items: center;
  gap: 10px;
  min-height: 56px;
  padding: 10px 12px;
  border: 1px dashed var(--ds-border-strong);
  border-radius: 8px;
  background: var(--ds-bg);
  font: inherit;
  text-align: left;
  color: var(--ds-text);
  cursor: pointer;
}

.ml-dh-add-card strong,
.ml-dh-add-card small {
  display: block;
}

.ml-dh-add-card strong {
  font-size: 13px;
  font-weight: 800;
}

.ml-dh-add-card small {
  margin-top: 3px;
  font-size: 11px;
  color: var(--ds-text-subtle);
}

.ml-dh-add-plus {
  flex: none;
  display: grid;
  place-items: center;
  width: 34px;
  height: 34px;
  border-radius: 50%;
  background: var(--ds-bg-alt);
  border: 1px solid var(--ds-border);
  font-size: 24px;
  line-height: 1;
  color: var(--ds-text);
}

.ml-dh-loading,
.ml-doc-loading,
.ml-doc-empty {
  padding: 18px;
  font-size: 13px;
  color: var(--ds-text-subtle);
}

.ml-doc-list {
  display: flex;
  flex-direction: column;
  overflow-x: auto;
  overflow-y: hidden;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-lg);
  background: var(--ds-surface);
}

.ml-doc-row {
  display: grid;
  grid-template-columns: 42px minmax(0, 1fr) auto;
  align-items: center;
  gap: 12px;
  min-height: 48px;
  padding: 0 18px;
  border: 0;
  border-bottom: 1px solid var(--ds-border);
  background: var(--ds-surface);
  color: var(--ds-text);
  font: inherit;
  text-align: left;
  cursor: pointer;
}

.ml-doc-row:last-child {
  border-bottom: none;
}

.ml-doc-row--knowledge {
  grid-template-columns: 42px minmax(0, 1fr) auto 34px;
  cursor: default;
}

.ml-doc-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 22px;
  height: 22px;
  border-radius: 6px;
  font-size: 8px;
  font-weight: 900;
  color: #fff;
}

.ml-doc-icon--pdf {
  background: #ef4444;
}

.ml-doc-icon--doc {
  background: #3b82f6;
}

.ml-doc-icon--xls {
  background: #22c55e;
}

.ml-doc-icon--md,
.ml-doc-icon--txt,
.ml-doc-icon--file,
.ml-doc-icon--kb {
  background: #8b5cf6;
}

.ml-doc-title {
  min-width: 0;
  overflow: hidden;
  font-size: 13px;
  font-weight: 700;
  color: var(--ds-text);
  white-space: nowrap;
  text-overflow: ellipsis;
}

.ml-doc-tag {
  margin-left: 8px;
  color: var(--ds-text-subtle);
  font-size: 11px;
  font-weight: 600;
}

.ml-doc-meta {
  flex: none;
  font-family: var(--ds-font-mono);
  font-size: 11.5px;
  color: var(--ds-text-subtle);
  font-variant-numeric: tabular-nums;
}

.ml-doc-delete,
.ml-kb-delete {
  display: inline-grid;
  place-items: center;
  width: 30px;
  height: 30px;
  border: 1px solid transparent;
  border-radius: 8px;
  background: transparent;
  color: var(--ds-danger);
  cursor: pointer;
}

.ml-doc-delete:hover,
.ml-kb-delete:hover {
  border-color: color-mix(in srgb, var(--ds-danger) 26%, transparent);
  background: color-mix(in srgb, var(--ds-danger) 8%, transparent);
}

.mup-dh-create {
  max-width: 1040px;
}

.mup-dh-form {
  border: 0 !important;
  background: transparent !important;
  padding: 0 !important;
}

@media (max-width: 780px) {
  .ml-page-head {
    flex-direction: column;
    padding: 22px 16px 18px;
  }

  .ml-workspace {
    padding: 12px 12px 36px;
  }

  .ml-section-head,
  .ml-doc-row {
    padding-left: 12px;
    padding-right: 12px;
  }

  .ml-doc-row {
    grid-template-columns: 32px minmax(0, 1fr);
  }

  .ml-doc-meta {
    grid-column: 2;
    padding-bottom: 8px;
  }

  .ml-dh-list {
    flex-wrap: wrap;
    overflow-x: visible;
  }
}

/* 素材库画布节点卡：旧画布卡样式保留给历史入口/测试兜底。
   新素材页使用 .ml-page，不再以该卡作为主体验。 */

.ml-node-card {
  position: relative;
  width: min(1180px, calc(100vw - 480px));
  height: min(820px, calc(100vh - var(--ds-header-height) - 96px));
  background: var(--ds-surface);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-xl);
  box-shadow: var(--ds-shadow-deep);
  overflow: hidden;
  display: flex;
  flex-direction: column;
  font-family: var(--ds-font);
  color: var(--ds-text);
}

.ml-node-body {
  display: flex;
  flex: 1;
  min-height: 0;
}

.ml-node-main {
  flex: 1;
  min-width: 0;
  display: flex;
  flex-direction: column;
  padding: 18px 22px;
}

.ml-pcol {
  width: 218px;
  border-right: 1px solid var(--ds-border);
  background: var(--ds-bg-alt);
  display: flex;
  flex-direction: column;
  padding: 15px 12px;
}

.ml-pcol-acct {
  font-size: 11px;
  color: var(--ds-text-subtle);
  font-family: var(--ds-font-mono);
  letter-spacing: .04em;
  padding: 2px 8px 12px;
}

.ml-pcol-list {
  display: flex;
  flex-direction: column;
  gap: 3px;
}

.ml-pitem {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 11px 10px;
  border: none;
  background: transparent;
  border-radius: var(--ds-radius-md);
  font: inherit;
  font-size: 13.5px;
  color: var(--ds-text);
  text-align: left;
  cursor: pointer;
}

.ml-pitem-sw {
  width: 26px;
  height: 26px;
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg-deep);
  display: flex;
  align-items: center;
  justify-content: center;
  font-weight: 700;
  font-size: 12px;
  color: #52525b;
}

.ml-pitem-nm {
  flex: 1;
}

.ml-pitem--active {
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
  font-weight: 600;
}

.ml-pitem--active .ml-pitem-sw {
  background: #3f3f46;
  color: var(--ds-text-on-ink);
}

.ml-pcol-new {
  margin-top: 6px;
  padding: 9px 10px;
  border: none;
  background: transparent;
  font: inherit;
  font-size: 12.5px;
  color: var(--ds-text-muted);
  text-align: left;
  cursor: pointer;
}

.ml-pcol-manage {
  margin-top: auto;
  padding: 10px;
  border: none;
  border-top: 1px solid var(--ds-border);
  background: transparent;
  font: inherit;
  font-size: 12.5px;
  color: var(--ds-text-muted);
  text-align: left;
  cursor: pointer;
}

.ml-cats {
  display: flex;
  gap: 8px;
  flex-wrap: wrap;
  margin: 14px 0;
}

.ml-chip {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 6px 12px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-pill);
  background: transparent;
  font: inherit;
  font-size: 12.5px;
  color: var(--ds-text-muted);
  cursor: pointer;
}

.ml-chip--active {
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
  border-color: var(--ds-text);
}

.ml-chip-count {
  font-family: var(--ds-font-mono);
  font-size: 11px;
  opacity: .8;
}

.ml-content {
  flex: 1;
  min-height: 0;
  overflow: auto;
  display: flex;
  flex-direction: column;
}

/* 上传面板与网格之间的分隔（仅添加素材就地展开时出现，网格常驻于下方） */
.ml-up-divider {
  flex: none;
  height: 1px;
  margin: 10px 0;
  background: var(--ds-border);
}

.ml-up-label {
  flex: none;
  margin-bottom: 8px;
  font-family: var(--ds-font-mono);
  font-size: 10.5px;
  font-weight: 700;
  letter-spacing: 0.08em;
  color: var(--ds-text-subtle);
}

.ml-head {
  position: relative;
  padding: 24px 32px 0;
}

.ml-head-no {
  font-family: var(--ds-font-mono);
  font-size: 12px;
  letter-spacing: 0.12em;
  color: var(--ds-text-subtle);
}

.ml-head-title {
  display: flex;
  align-items: baseline;
  gap: 12px;
  margin: 6px 0 0;
  font-size: 24px;
  font-weight: 800;
  letter-spacing: 0;
}

.ml-head-sub {
  font-family: var(--ds-font-mono);
  font-size: 13px;
  font-weight: 400;
  color: var(--ds-text-subtle);
}

.ml-head-desc {
  max-width: 620px;
  margin: 9px 0 0;
  font-size: 13px;
  line-height: 1.6;
  color: var(--ds-text-muted);
}

.ml-head-actions {
  position: absolute;
  top: 54px;
  right: 32px;
  display: flex;
  align-items: center;
  gap: 8px;
}

.ml-more {
  display: grid;
  place-items: center;
  width: 34px;
  height: 34px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
  background: transparent;
  font: inherit;
  font-size: 16px;
  color: var(--ds-text-muted);
  cursor: pointer;
}

.ml-add {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 8px 16px;
  border: 1px solid var(--ds-text);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-text);
  font: inherit;
  font-size: 13px;
  font-weight: 600;
  color: var(--ds-text-on-ink);
  cursor: pointer;
}

.ml-guide {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 14px;
  margin: 14px 22px 0;
  padding: 10px 12px 10px 14px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-pill);
  background: var(--ds-bg-alt);
  color: var(--ds-text-muted);
}

.ml-guide-label {
  font-size: 12.5px;
  font-weight: 600;
}

.ml-guide-label > strong {
  margin-left: 6px;
  font-family: var(--ds-font-mono);
  font-size: 12px;
  color: var(--ds-text);
}

.ml-guide-btn {
  flex: none;
  padding: 6px 12px;
  border: 1px solid var(--ds-text);
  border-radius: var(--ds-radius-pill);
  background: var(--ds-text);
  font: inherit;
  font-size: 12px;
  font-weight: 700;
  color: var(--ds-text-on-ink);
  cursor: pointer;
}

/* 数字人竖卡 (DigitalHumanTile, Task 3.1) + 共享标题 .ml-tile-name。
   视觉对齐 docs/design/2026-06-14-material-system-overview.html (.dh-card)。
   颜色全走 --ds-* token；状态色仅用在 chip 小元素（success 绿 / warning 橙），不整卡染色；
   console scope 主色 ink，无 azure。 */

.ml-tile-name {
  overflow: hidden;
  margin-top: 8px;
  font-size: 12.5px;
  font-weight: 600;
  color: var(--ds-text);
  white-space: nowrap;
  text-overflow: ellipsis;
}

.ml-dh-card {
  display: flex;
  flex-direction: column;
  width: 100%;
  padding: 0;
  border: none;
  background: transparent;
  font: inherit;
  text-align: left;
  cursor: pointer;
}

.ml-dh-face {
  position: relative;
  display: grid;
  place-items: center;
  aspect-ratio: 3 / 4;
  overflow: hidden;
  background: linear-gradient(160deg, var(--ds-bg-alt), var(--ds-bg-deep));
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-md);
}

.ml-dh-avatar {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.ml-dh-avatar-placeholder {
  display: grid;
  place-items: center;
  width: 48px;
  height: 48px;
  background: var(--ds-bg);
  border: 1px solid var(--ds-border);
  border-radius: 50%;
  font-size: 20px;
  color: var(--ds-text-subtle);
}

.ml-dh-chip {
  position: absolute;
  top: 8px;
  left: 8px;
  padding: 2px 8px;
  border-radius: var(--ds-radius-pill);
  font-size: 10px;
  font-weight: 700;
}

.ml-dh-chip--ready {
  background: color-mix(in srgb, var(--ds-success) 14%, transparent);
  color: color-mix(in srgb, var(--ds-success) 78%, var(--ds-text));
}

.ml-dh-chip--processing {
  background: color-mix(in srgb, var(--ds-warning) 16%, transparent);
  color: color-mix(in srgb, var(--ds-warning) 80%, var(--ds-text));
}

.ml-tile-kb {
  display: flex;
  flex-direction: column;
  min-height: 178px;
  padding: 14px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-md);
  background: var(--ds-bg);
}

.ml-kb-top {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 10px;
}

.ml-kb-glyph {
  display: grid;
  place-items: center;
  width: 42px;
  height: 42px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg-alt);
  font-size: 12px;
  font-weight: 800;
  color: var(--ds-text);
}

.ml-kb-delete {
  flex: none;
}

.ml-confirm-backdrop {
  position: absolute;
  inset: 0;
  z-index: 12;
  display: grid;
  place-items: center;
  padding: 24px;
  background: rgba(24, 24, 27, 0.38);
}

.ml-confirm {
  position: relative;
  width: min(420px, 100%);
  padding: 22px 22px 18px;
  border: 1px solid var(--ds-border-strong);
  border-radius: 8px;
  background: var(--ds-bg);
  box-shadow: 0 24px 56px rgba(24, 24, 27, 0.22);
}

.ml-confirm-close {
  position: absolute;
  top: 12px;
  right: 12px;
  display: inline-grid;
  place-items: center;
  width: 30px;
  height: 30px;
  border: 1px solid transparent;
  border-radius: 8px;
  background: transparent;
  color: var(--ds-text-muted);
  cursor: pointer;
}

.ml-confirm-title {
  margin: 0;
  padding-right: 34px;
  font-size: 16px;
  line-height: 1.35;
  font-weight: 800;
  color: var(--ds-text);
}

.ml-confirm-copy {
  margin: 12px 0 0;
  font-size: 13px;
  line-height: 1.65;
  color: var(--ds-text-muted);
}

.ml-confirm-actions {
  display: flex;
  justify-content: flex-end;
  gap: 10px;
  margin-top: 18px;
}

.ml-confirm-btn {
  min-width: 76px;
  height: 34px;
  padding: 0 14px;
  border: 1px solid var(--ds-border-strong);
  border-radius: 8px;
  background: var(--ds-bg);
  color: var(--ds-text);
  font: inherit;
  font-size: 13px;
  font-weight: 700;
  cursor: pointer;
}

.ml-confirm-btn--danger {
  border-color: var(--ds-danger);
  background: var(--ds-danger);
  color: #fff;
}

.ml-confirm-btn:disabled,
.ml-confirm-close:disabled {
  cursor: default;
  opacity: 0.62;
}

.ml-kb-meta {
  margin-top: 5px;
  font-family: var(--ds-font-mono);
  font-size: 11px;
  color: var(--ds-text-subtle);
}

.ml-kb-excerpt {
  display: -webkit-box;
  -webkit-line-clamp: 3;
  -webkit-box-orient: vertical;
  overflow: hidden;
  margin: 10px 0 0;
  font-size: 12px;
  line-height: 1.5;
  color: var(--ds-text-muted);
}

/* 统一网格 (MaterialGrid, Task 3.2)
   视觉对齐 docs/design/2026-06-14-material-system-overview.html (.grid / .dh-grid)。
   标准卡 4 列、数字人竖卡 5 列、gap 16；空态与「加载更多」走 --ds-* token，console scope 无 azure。 */

.ml-grid-wrap {
  flex: none;
}

.ml-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 16px;
  align-content: start;
}

.ml-grid--dh {
  grid-template-columns: repeat(5, 1fr);
}

.ml-grid-empty {
  display: grid;
  place-items: center;
  min-height: 220px;
  font-size: 13px;
  color: var(--ds-text-subtle);
}

.ml-grid-more {
  display: flex;
  justify-content: center;
  padding: 24px 0 8px;
}

.ml-grid-more-btn {
  padding: 8px 22px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-pill);
  background: var(--ds-bg);
  font: inherit;
  font-size: 12.5px;
  font-weight: 600;
  color: var(--ds-text-muted);
  cursor: pointer;
}

.ml-grid-more-btn:disabled {
  cursor: default;
  color: var(--ds-text-subtle);
}

/* 素材详情面板（MaterialDetailPanel, Task 4.1）— 右侧滑出。
   视觉对齐 docs/design/2026-06-14-material-system-overview.html (.detail*)。
   颜色全走 --ds-* token；状态点用语义色（ok 绿 / busy 橙 / bad 红），删除按钮用 danger 色文字（不整片染色）；
   console scope 主色 ink，无 azure。 */

.ml-detail {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  z-index: 6;
  width: 392px;
  padding: 22px 24px;
  overflow-y: auto;
  background: var(--ds-bg);
  border-left: 1px solid var(--ds-border-strong);
  box-shadow: -24px 0 48px -28px rgba(24, 24, 27, 0.28);
}

.ml-detail-close {
  position: absolute;
  top: 18px;
  right: 18px;
  display: grid;
  place-items: center;
  width: 28px;
  height: 28px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
  background: transparent;
  font: inherit;
  font-size: 16px;
  line-height: 1;
  color: var(--ds-text-muted);
  cursor: pointer;
}

.ml-detail-prev {
  --ml-video-max-height: min(58vh, 520px);

  display: grid;
  place-items: center;
  width: min(100%, calc(var(--ml-video-max-height) * var(--ml-video-ratio, 1.777777)));
  aspect-ratio: var(--ml-video-aspect, 16 / 9);
  margin: 14px auto 18px;
  overflow: hidden;
  background: var(--ds-bg-deep);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-md);
}

.ml-detail-prev--dh {
  aspect-ratio: 3 / 4;
}

.ml-detail-prev-video {
  width: 100%;
  height: 100%;
  object-fit: contain;
  background: #000;
}

.ml-detail-prev-avatar {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.ml-detail-prev-avatar-placeholder {
  display: grid;
  place-items: center;
  width: 64px;
  height: 64px;
  background: var(--ds-bg);
  border: 1px solid var(--ds-border);
  border-radius: 50%;
  font-size: 26px;
  color: var(--ds-text-subtle);
}

.ml-detail-title {
  padding-right: 34px;
  overflow: hidden;
  font-size: 15px;
  font-weight: 700;
  line-height: 1.45;
  white-space: nowrap;
  text-overflow: ellipsis;
}

.ml-detail-status {
  display: flex;
  align-items: center;
  gap: 7px;
  margin-top: 12px;
  font-size: 12.5px;
  color: var(--ds-text-muted);
}

.ml-detail-dot {
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: var(--ds-text-subtle);
}

.ml-detail-dot--ok {
  background: var(--ds-success);
}

.ml-detail-dot--busy {
  background: var(--ds-warning);
}

.ml-detail-dot--bad {
  background: var(--ds-danger);
}

.ml-detail-rows {
  display: grid;
  gap: 10px;
  margin: 16px 0 0;
  padding-top: 16px;
  border-top: 1px solid var(--ds-border);
}

.ml-detail-row {
  display: flex;
  justify-content: space-between;
  font-size: 12.5px;
}

.ml-detail-k {
  color: var(--ds-text-subtle);
}

.ml-detail-v {
  margin: 0;
  font-family: var(--ds-font-mono);
  color: var(--ds-text);
}

.ml-detail-actions {
  display: grid;
  gap: 8px;
  margin-top: 22px;
}

.ml-detail-btn {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  padding: 11px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg);
  font: inherit;
  font-size: 13px;
  font-weight: 600;
  color: var(--ds-text);
  text-decoration: none;
  cursor: pointer;
}

.ml-detail-btn--primary {
  border-color: var(--ds-text);
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
}

.ml-detail-btn--danger {
  justify-content: flex-start;
  padding-left: 2px;
  border-color: transparent;
  background: transparent;
  color: var(--ds-danger);
}

/* 添加素材卡内上传面板 (MaterialUploadPanel)
   渲染在素材库卡右侧 .ml-content 内、素材网格上方就地展开（网格常驻于下方）。
   视觉对齐 docs/design/2026-06-16-add-material-incard-panel-B.html。
   console scope：Tab 选中 ink-on-ink、进度条填充 ink、拖拽区 ink 圆图标，无 azure。 */
.mup {
  display: flex;
  flex-direction: column;
  flex: none;
}

.mup-bar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 14px;
}

.mup-title {
  font-size: 15px;
  font-weight: 700;
  color: var(--ds-text);
}

.mup-back {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 6px 13px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-pill);
  background: var(--ds-bg);
  font: inherit;
  font-size: 12px;
  font-weight: 600;
  color: var(--ds-text-muted);
  cursor: pointer;
}

.mup-tabs {
  display: inline-flex;
  align-self: flex-start;
  gap: 4px;
  margin-bottom: 14px;
  padding: 3px;
  background: var(--ds-bg-alt);
  border-radius: var(--ds-radius-pill);
}

.mup-tab {
  padding: 6px 18px;
  border: none;
  border-radius: var(--ds-radius-pill);
  background: transparent;
  font: inherit;
  font-size: 12.5px;
  font-weight: 600;
  color: var(--ds-text-muted);
  cursor: pointer;
}

.mup-tab--active {
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
}

.mup-drop {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 12px;
  min-height: 172px;
  padding: 26px;
  text-align: center;
  border: 2px dashed var(--ds-border-strong);
  border-radius: var(--ds-radius-lg);
  background: transparent;
  cursor: pointer;
}

.mup-drop--over {
  border-color: var(--ds-text);
  background: var(--ds-bg-alt);
}

.mup-drop--over .mup-drop-ico {
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
}

.mup-drop--disabled {
  cursor: not-allowed;
  opacity: 0.6;
}

.mup-drop-ico {
  display: grid;
  place-items: center;
  width: 46px;
  height: 46px;
  border-radius: 50%;
  background: var(--ds-bg-alt);
  font-size: 24px;
  color: var(--ds-text);
}

.mup-drop-main {
  font-size: 14px;
  font-weight: 600;
  color: var(--ds-text);
}

.mup-drop-sub {
  font-family: var(--ds-font-mono);
  font-size: 11.5px;
  color: var(--ds-text-subtle);
}

.mup-drop-input {
  display: none;
}

.mup-types {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
  gap: 10px;
  margin-top: 12px;
}

.mup-type {
  display: flex;
  align-items: center;
  gap: 10px;
  min-width: 0;
  padding: 12px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-md);
  background: var(--ds-bg);
  font: inherit;
  text-align: left;
  cursor: pointer;
}

.mup-type-ico {
  flex: none;
  display: grid;
  place-items: center;
  width: 34px;
  height: 34px;
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg-alt);
  font-size: 16px;
}

.mup-type-title,
.mup-type-sub {
  display: block;
  overflow: hidden;
  white-space: nowrap;
  text-overflow: ellipsis;
}

.mup-type-title {
  font-size: 12.5px;
  font-weight: 700;
  color: var(--ds-text);
}

.mup-type-sub {
  margin-top: 3px;
  font-size: 11px;
  color: var(--ds-text-subtle);
}

.mup-queue {
  display: flex;
  flex-direction: column;
  gap: 8px;
  margin-top: 16px;
  min-height: 0;
  overflow-y: auto;
}

.mup-queue-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
}

.mup-queue-actions {
  display: flex;
  align-items: center;
  gap: 10px;
}

.mup-queue-title {
  font-size: 12px;
  font-weight: 600;
  color: var(--ds-text-muted);
}

.mup-queue-clear {
  border: none;
  background: transparent;
  font: inherit;
  font-size: 11.5px;
  color: var(--ds-text-subtle);
  cursor: pointer;
}

.mup-queue-clear:disabled {
  color: color-mix(in srgb, var(--ds-text-subtle) 55%, transparent);
  cursor: not-allowed;
}

.mup-queue-retry {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  border: none;
  background: transparent;
  font: inherit;
  font-size: 11.5px;
  font-weight: 650;
  color: var(--ds-danger);
  cursor: pointer;
}

.mup-operation {
  padding: 10px 12px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-md);
  background: var(--ds-bg-alt);
}

.mup-operation-line,
.mup-operation-counts {
  display: flex;
  align-items: center;
}

.mup-operation-line {
  justify-content: space-between;
  font-size: 12px;
  color: var(--ds-text-muted);
}

.mup-operation-line strong {
  font-family: var(--ds-font-mono);
  font-size: 11.5px;
  color: var(--ds-text);
}

.mup-operation-bar {
  height: 4px;
  margin-top: 8px;
  overflow: hidden;
  border-radius: var(--ds-radius-pill);
  background: var(--ds-bg-deep);
}

.mup-operation-bar > i {
  display: block;
  height: 100%;
  border-radius: inherit;
  background: var(--ds-text);
}

.mup-operation-counts {
  flex-wrap: wrap;
  gap: 5px 12px;
  margin-top: 7px;
  font-size: 10.5px;
  color: var(--ds-text-subtle);
}

.mup-operation-failed {
  color: var(--ds-danger);
}

.mup-row {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 10px 12px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-md);
  background: var(--ds-bg);
}

.mup-row-ico {
  flex: none;
  display: grid;
  place-items: center;
  width: 38px;
  height: 38px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg-alt);
  font-size: 16px;
}

.mup-row-mid {
  flex: 1;
  min-width: 0;
}

.mup-row-name {
  overflow: hidden;
  font-size: 13px;
  font-weight: 600;
  color: var(--ds-text);
  white-space: nowrap;
  text-overflow: ellipsis;
}

.mup-row-meta {
  display: flex;
  flex-wrap: wrap;
  gap: 4px 10px;
  margin-top: 3px;
  font-family: var(--ds-font-mono);
  font-size: 11px;
  color: var(--ds-text-subtle);
}

.mup-row-error {
  max-width: 100%;
  margin-top: 5px;
  overflow: hidden;
  color: var(--ds-danger);
  font-size: 11px;
  white-space: nowrap;
  text-overflow: ellipsis;
}

.mup-row-bar {
  margin-top: 7px;
  height: 4px;
  border-radius: var(--ds-radius-pill);
  background: var(--ds-bg-deep);
  overflow: hidden;
}

.mup-row-bar > i {
  display: block;
  height: 100%;
  border-radius: inherit;
  background: var(--ds-text);
}

.mup-row-right {
  flex: none;
  display: flex;
  align-items: center;
  gap: 10px;
}

.mup-row-pct {
  min-width: 34px;
  font-family: var(--ds-font-mono);
  font-size: 11.5px;
  color: var(--ds-text-muted);
  text-align: right;
}

.mup-status {
  padding: 2px 9px;
  border-radius: var(--ds-radius-pill);
  font-size: 11px;
  font-weight: 700;
}

.mup-status--done {
  color: color-mix(in srgb, var(--ds-success) 78%, var(--ds-text));
  background: color-mix(in srgb, var(--ds-success) 14%, transparent);
}

.mup-status--err {
  color: color-mix(in srgb, var(--ds-danger) 78%, var(--ds-text));
  background: color-mix(in srgb, var(--ds-danger) 12%, transparent);
}

.mup-status--pending,
.mup-status--running,
.mup-status--muted {
  color: var(--ds-text-muted);
  background: var(--ds-bg-deep);
}

.mup-status--running {
  color: var(--ds-text);
}

.mup-row-x {
  display: grid;
  place-items: center;
  width: 26px;
  height: 26px;
  border: none;
  background: transparent;
  font: inherit;
  font-size: 13px;
  color: var(--ds-text-subtle);
  cursor: pointer;
}

@media (max-width: 640px) {
  .mup-queue-head,
  .mup-row {
    align-items: flex-start;
  }

  .mup-queue-head {
    gap: 8px;
  }

  .mup-queue-actions {
    flex-wrap: wrap;
    justify-content: flex-end;
  }

  .mup-row-right {
    flex-wrap: wrap;
    justify-content: flex-end;
    max-width: 132px;
  }
}

.mup-dr {
  margin-top: 14px;
}

/* compact 主播卡必须放在旧竖卡样式之后，避免被 .ml-dh-card 基础规则覆盖。 */
.ml-page .ml-dh-card--compact {
  display: flex;
  flex-direction: row;
  align-items: center;
  gap: 13px;
  width: auto;
  min-height: 76px;
  padding: 14px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-lg);
  background: var(--ds-surface);
}

.ml-page .ml-dh-card--compact:hover {
  border-color: var(--ds-border-strong);
  background: var(--ds-surface);
}

/* ===== 新建主播弹窗（CreatePresenterModal）— portal 到 body ===== */
.ml-cpm-layer {
  position: fixed;
  inset: 0;
  z-index: 1100;
}

.ml-cpm-scrim {
  position: absolute;
  inset: 0;
  background: rgba(24, 24, 27, 0.44);
  backdrop-filter: saturate(140%) blur(2px);
}

.ml-cpm {
  position: absolute;
  inset: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 20px;
}

.ml-cpm-card {
  display: flex;
  flex-direction: column;
  width: min(92vw, 480px);
  max-height: min(90vh, 760px);
  overflow: hidden;
  background: var(--ds-surface);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-xl);
  box-shadow: 0 28px 70px -24px rgba(24, 24, 27, 0.5);
  animation: ml-cpm-in 0.2s cubic-bezier(0.16, 1, 0.3, 1);
}

@keyframes ml-cpm-in {
  from {
    opacity: 0;
    transform: translateY(10px) scale(0.98);
  }
  to {
    opacity: 1;
    transform: none;
  }
}

.ml-cpm-head {
  display: flex;
  align-items: flex-start;
  gap: 14px;
  padding: 20px 20px 14px;
}

.ml-cpm-head-text {
  min-width: 0;
}

.ml-cpm-title {
  font-size: 16px;
  font-weight: 600;
  letter-spacing: -0.01em;
  color: var(--ds-text);
}

.ml-cpm-sub {
  margin-top: 6px;
  font-size: 12.5px;
  line-height: 1.55;
  color: var(--ds-text-muted);
}

.ml-cpm-close {
  flex: none;
  margin: -4px -4px 0 auto;
  display: grid;
  place-items: center;
  width: 32px;
  height: 32px;
  border: none;
  border-radius: var(--ds-radius-sm);
  background: transparent;
  color: var(--ds-text-muted);
  font-size: 20px;
  line-height: 1;
  cursor: pointer;
}

.ml-cpm-close:hover {
  background: var(--ds-bg-alt);
  color: var(--ds-text);
}

.ml-cpm-body {
  overflow-y: auto;
  padding: 14px 20px 18px;
  border-top: 1px solid var(--ds-border);
}

.ml-cpm-form {
  border: 0 !important;
  background: transparent !important;
  padding: 0 !important;
}

@media (prefers-reduced-motion: reduce) {
  .ml-cpm-card {
    animation: none;
  }
}

@media (max-width: 560px) {
  .ml-cpm {
    padding: 12px;
  }

  .ml-cpm-head {
    padding: 16px 16px 12px;
  }

  .ml-cpm-body {
    padding: 12px 16px 16px;
  }
}

/* ===== 右栏文档详情（MaterialDocDetail）— compact #dDocBlock（azure→ink）===== */
.ml-docd {
  padding: 14px 16px 18px;
  overflow-y: auto;
}

.ml-docd-status {
  padding: 40px 20px;
  text-align: center;
  font-size: 13px;
  color: var(--ds-text-subtle);
}

.ml-docd-title {
  overflow-wrap: anywhere;
  font-size: 15px;
  font-weight: 600;
  letter-spacing: -0.01em;
  line-height: 1.35;
  color: var(--ds-text);
}

.ml-docd-meta {
  margin-top: 6px;
  font-family: var(--ds-font-mono);
  font-size: 11px;
  color: var(--ds-text-muted);
  font-variant-numeric: tabular-nums;
}

.ml-docd-id {
  display: flex;
  align-items: baseline;
  gap: 8px;
  margin-top: 6px;
  font-size: 11px;
}

.ml-docd-id-k {
  color: var(--ds-text-subtle);
}

.ml-docd-id-v {
  font-family: var(--ds-font-mono);
  color: var(--ds-text-muted);
  word-break: break-all;
}

.ml-docd-toolbar {
  display: flex;
  align-items: center;
  gap: 5px;
  flex-wrap: wrap;
  margin-top: 10px;
  padding: 6px 8px;
  background: var(--ds-bg-alt);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
}

.ml-docd-tb-label {
  margin-right: 2px;
  font-family: var(--ds-font-mono);
  font-size: 10px;
  color: var(--ds-text-subtle);
}

.ml-docd-tb-btn {
  height: 24px;
  padding: 0 8px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-surface);
  font: inherit;
  font-size: 11.5px;
  font-weight: 500;
  color: var(--ds-text-muted);
  cursor: pointer;
  transition: border-color 0.12s, color 0.12s;
}

.ml-docd-tb-btn:hover {
  border-color: var(--ds-text);
  color: var(--ds-text);
}

.ml-docd-paper {
  margin-top: 10px;
  padding: 15px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-md);
  background: var(--ds-surface);
  transition: border-color 0.15s, box-shadow 0.15s;
}

.ml-docd-paper--editing {
  border-color: var(--ds-border-strong);
  box-shadow: inset 0 0 0 2px color-mix(in srgb, var(--ds-accent) 14%, transparent);
}

.ml-docd-content {
  outline: none;
  font-size: 12.5px;
  line-height: 1.7;
  color: var(--ds-text);
}

.ml-docd-content h1 {
  margin: 0 0 6px;
  font-size: 15px;
  font-weight: 600;
}

.ml-docd-content h2 {
  margin: 14px 0 2px;
  font-size: 13px;
  font-weight: 600;
}

.ml-docd-content h3 {
  margin: 12px 0 2px;
  font-size: 12.5px;
  font-weight: 600;
}

.ml-docd-content p {
  margin: 5px 0;
  color: var(--ds-text-muted);
}

.ml-docd-content ul,
.ml-docd-content ol {
  margin: 5px 0;
  padding-left: 20px;
  color: var(--ds-text-muted);
}

.ml-docd-empty {
  color: var(--ds-text-subtle);
}

.ml-docd-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin-top: 14px;
  padding-top: 14px;
  border-top: 1px solid var(--ds-border);
}

/* 详情操作按钮（视频/主播/文档右栏共享；对齐 mockup .act）。 */
.ml-act {
  flex: 1;
  min-width: 84px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  height: 36px;
  padding: 0 12px;
  border: 1px solid transparent;
  border-radius: var(--ds-radius-md);
  background: transparent;
  font: inherit;
  font-size: 13px;
  font-weight: 600;
  cursor: pointer;
  transition: border-color 0.12s, color 0.12s, background 0.12s;
}

.ml-act:disabled {
  opacity: 0.6;
  cursor: default;
}

.ml-act--primary {
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
}

.ml-act--secondary {
  border-color: var(--ds-border-strong);
  background: var(--ds-surface);
  color: var(--ds-text);
}

.ml-act--secondary:hover:not(:disabled) {
  border-color: var(--ds-text);
}

.ml-act--danger {
  border-color: var(--ds-border);
  background: var(--ds-surface);
  color: var(--ds-danger);
}

.ml-act--danger:hover:not(:disabled) {
  border-color: var(--ds-danger);
  background: color-mix(in srgb, var(--ds-danger) 4%, transparent);
}

/* ===== 右栏容器（MaterialRail）— 对话/详情双 tab + 收起/加宽 ===== */
.ml-rail2 {
  display: flex;
  flex-direction: column;
  height: 100%;
  min-height: 0;
  overflow: visible;
  border: none;
  background: transparent;
}

/* .ml-rail2 is also the fixed outer rail. Keep its height inside the viewport;
   the generic height:100% above otherwise overrides .ml-rail-right and clips the composer. */
.ml-rail-right.ml-rail2 {
  height: calc(100vh - var(--ds-header-height, 52px) - 40px);
}

/* 折叠只隐藏右栏，不卸载内部 ConversationShell。 */
.ml-rail-right.ml-rail2[hidden] {
  display: none;
}

.ml-rail2-collapse {
  position: absolute;
  left: -11px;
  top: 50%;
  transform: translateY(-50%);
  z-index: 6;
  display: grid;
  place-items: center;
  width: 22px;
  height: 48px;
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-pill);
  background: var(--ds-surface);
  color: var(--ds-text-muted);
  font-size: 14px;
  cursor: pointer;
  transition: border-color 0.15s, color 0.15s;
}

.ml-rail2-collapse:hover {
  border-color: var(--ds-text);
  color: var(--ds-text);
}

/* 收起态使用固定图标点击目标，避免竖排中英文在窄条内拥挤。 */
.ml-rail2-handle {
  position: fixed;
  top: 50%;
  right: 0;
  transform: translateY(-50%);
  z-index: 900;
  display: flex;
  align-items: center;
  justify-content: center;
  width: 46px;
  height: 48px;
  padding: 0;
  border: 1px solid var(--ds-border-strong);
  border-right: none;
  border-radius: 12px 0 0 12px;
  background: var(--ds-surface);
  color: var(--ds-text-muted);
  font: inherit;
  cursor: pointer;
  box-shadow: -8px 0 24px -10px rgba(24, 24, 27, 0.24);
  transition: color 0.15s, background 0.15s, border-color 0.15s, transform 0.15s;
}

.ml-rail2-handle:hover {
  transform: translateY(-50%) translateX(-2px);
  color: var(--ds-text);
  background: var(--ds-bg-alt);
  border-color: var(--ds-text);
}

/* 展开态 */
.ml-rail2-full {
  display: flex;
  flex-direction: column;
  height: 100%;
  min-height: 0;
  overflow: hidden;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-lg);
  background: var(--ds-surface);
}

.ml-rail2-bar {
  display: flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
  flex-shrink: 0;
  padding: 10px;
  border-bottom: 1px solid var(--ds-border);
}

.ml-rail2-identity {
  display: flex;
  align-items: center;
  gap: 9px;
  min-width: 0;
  width: 100%;
  padding: 1px 2px 3px;
}

.ml-rail2-identity > span:last-child {
  display: flex;
  min-width: 0;
  flex-direction: column;
  gap: 2px;
}

.ml-rail2-identity strong {
  color: var(--ds-text);
  font-size: 13px;
  line-height: 1.2;
}

.ml-rail2-identity small {
  overflow: hidden;
  color: var(--ds-text-subtle);
  font-size: 11px;
  line-height: 1.25;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.ml-rail2-identity-mark {
  width: 8px;
  height: 8px;
  flex: none;
  border-radius: 50%;
  background: #16a34a;
  box-shadow: 0 0 0 3px rgba(22, 163, 74, 0.1);
}

.ml-rail2-seg {
  flex: 1;
  display: flex;
  gap: 3px;
  padding: 3px;
  background: var(--ds-bg-alt);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-md);
}

.ml-rail2-seg-btn {
  flex: 1;
  height: 30px;
  border: none;
  border-radius: var(--ds-radius-sm);
  background: transparent;
  font: inherit;
  font-size: 12.5px;
  font-weight: 600;
  color: var(--ds-text-muted);
  cursor: pointer;
  transition: background 0.15s, color 0.15s;
}

.ml-rail2-seg-btn:hover {
  color: var(--ds-text);
}

.ml-rail2-seg-btn--active {
  background: var(--ds-surface);
  color: var(--ds-text);
}

.ml-rail2-wide {
  flex: none;
  height: 30px;
  padding: 0 11px;
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-surface);
  font: inherit;
  font-size: 12px;
  font-weight: 600;
  color: var(--ds-text-muted);
  white-space: nowrap;
  cursor: pointer;
  transition: border-color 0.12s, color 0.12s;
}

.ml-rail2-wide:hover {
  border-color: var(--ds-text);
  color: var(--ds-text);
}

.ml-rail2-panel {
  flex: 1;
  min-height: 0;
  display: flex;
  flex-direction: column;
  overflow: hidden;
}

.ml-rail2-panel[hidden] {
  display: none;
}

.ml-rail2-panel--detail {
  overflow-y: auto;
}

.ml-rail2-panel--manage {
  overflow-y: auto;
  background: var(--ds-surface);
}

.ml-rail2-panel--chat .conversation-shell {
  flex: 1;
  min-height: 0;
}

.ml-rail2-chat-stack {
  display: flex;
  flex: 1;
  flex-direction: column;
  height: 100%;
  min-height: 0;
}

.ml-rail2-chat-dialog {
  display: flex;
  flex: 1;
  min-height: 0;
  margin: 10px;
  overflow: hidden;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-md);
  background: var(--ds-surface);
  box-shadow: inset 0 1px 0 color-mix(in srgb, white 70%, transparent);
}

.ml-rail2-chat-stack > .conversation-shell,
.ml-rail2-chat-dialog > .conversation-shell {
  flex: 1;
  height: auto !important;
  min-height: 0;
}

.ml-rail2-chat-empty {
  display: flex;
  flex: 1;
  align-items: center;
  justify-content: center;
  flex-direction: column;
  gap: 8px;
  padding: 28px;
  color: var(--ds-text-muted);
  text-align: center;
}

.ml-rail2-chat-empty strong {
  color: var(--ds-text);
  font-size: 14px;
}

.ml-rail2-chat-empty span {
  max-width: 250px;
  font-size: 12px;
  line-height: 1.6;
}

.ml-rail2-chat-empty button {
  height: 34px;
  padding: 0 16px;
  border: 0;
  border-radius: var(--ds-radius-sm);
  background: var(--ds-text);
  color: var(--ds-bg);
  font: inherit;
  font-size: 12px;
  cursor: pointer;
}

/* 视频/主播详情正文（MaterialDetailContent）内边距——避免贴 rail 左右缘、按钮被裁。 */
.ml-rail2-detail-body {
  padding: 18px 18px 28px;
}

.ml-rail2-detail-empty {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 8px;
  padding: 56px 24px;
  text-align: center;
  color: var(--ds-text-muted);
}

.ml-rail2-detail-empty-title {
  font-size: 14px;
  font-weight: 600;
  color: var(--ds-text);
}

.ml-rail2-detail-empty-sub {
  max-width: 240px;
  font-size: 12.5px;
  line-height: 1.55;
}

.ml-rail2-chat-empty {
  padding: 40px 20px;
  text-align: center;
  font-size: 13px;
  color: var(--ds-text-subtle);
}

.ml-rail2-chat-notice {
  flex: none;
  align-self: flex-start;
  max-width: calc(100% - 24px);
  margin: 10px 12px 0;
  padding: 10px 12px;
  border: 1px solid rgba(20, 83, 45, 0.18);
  border-radius: 4px 12px 12px;
  background: rgba(240, 253, 244, 0.95);
  color: #14532d;
  font-size: 12.5px;
  line-height: 1.5;
}
.ml-rail2-chat-notice > strong { display: block; margin-bottom: 3px; color: var(--ds-text); font-size: 11px; }
.ml-rail2-chat-notice-action { margin-left: 8px; border: 0; border-bottom: 1px solid currentColor; background: transparent; color: inherit; cursor: pointer; font-weight: 600; }

/* ===== M9 素材 Agent 管理（右栏 manage tab，scoped） ===== */
.msp-panel {
  flex: 1;
  display: flex;
  flex-direction: column;
  gap: 10px;
  padding: 12px;
  background: var(--ds-surface);
}

.msp-head {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 10px;
}

.msp-title {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  margin: 0;
  font-size: 14px;
  line-height: 20px;
  font-weight: 700;
  color: var(--ds-text);
}

.msp-subtitle {
  margin: 1px 0 0;
  max-width: 230px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  font-size: 12px;
  line-height: 18px;
  color: var(--ds-text-muted);
}

.msp-icon-btn {
  flex: none;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 28px;
  height: 28px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg);
  color: var(--ds-text-muted);
  cursor: pointer;
}

.msp-icon-btn:disabled {
  opacity: 0.5;
  cursor: not-allowed;
}

.msp-primary-btn,
.msp-confirm-btn,
.msp-handoff-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 5px;
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-sm);
  font: inherit;
  font-size: 12px;
  font-weight: 650;
  white-space: nowrap;
  cursor: pointer;
}

.msp-primary-btn {
  flex: none;
  height: 32px;
  padding: 0 10px;
  background: var(--ds-text);
  border-color: var(--ds-text);
  color: var(--ds-text-on-ink);
}

.msp-primary-btn:disabled,
.msp-confirm-btn:disabled,
.msp-handoff-btn:disabled {
  opacity: 0.5;
  cursor: not-allowed;
}

.msp-error,
.msp-empty {
  font-size: 12px;
  line-height: 18px;
  color: var(--ds-text-muted);
}

.msp-error {
  color: var(--ds-danger, #b42318);
}

.msp-report {
  display: flex;
  flex-direction: column;
  gap: 9px;
}

.msp-management {
  display: flex;
  flex-direction: column;
  gap: 8px;
}

.msp-readiness {
  display: flex;
  align-items: center;
  gap: 7px;
  min-width: 0;
}

.msp-status {
  min-width: 58px;
  height: 24px;
  padding: 0 8px;
  border-radius: var(--ds-radius-pill, 999px);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  background: var(--ds-bg-alt);
  color: var(--ds-text);
  font-size: 12px;
  font-weight: 700;
}

.msp-status--ready {
  background: #e7f8ef;
  color: #137333;
}

.msp-status--at_risk {
  background: #fff4e0;
  color: #9a5b00;
}

.msp-status--warning,
.msp-status--processing,
.msp-status--degraded {
  background: #fff4e0;
  color: #9a5b00;
}

.msp-status--attention {
  background: #fdebea;
  color: #b42318;
}

.msp-status--blocked {
  background: #fdebea;
  color: #b42318;
}

.msp-confidence,
.msp-inventory,
.msp-gap-meta {
  font-size: 12px;
  color: var(--ds-text-muted);
}

.msp-inventory {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.msp-scope-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: 6px;
}

.msp-scope-card {
  display: grid;
  grid-template-columns: 16px minmax(0, 1fr);
  align-items: start;
  gap: 7px;
  padding: 8px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg);
  color: var(--ds-text);
}

.msp-scope-card svg {
  margin-top: 2px;
  color: var(--ds-text-muted);
}

.msp-scope-card div {
  min-width: 0;
  display: flex;
  flex-direction: column;
  gap: 2px;
}

.msp-scope-card span {
  font-size: 12.5px;
  line-height: 18px;
  word-break: break-word;
}

.msp-scope-card small {
  font-size: 11.5px;
  line-height: 16px;
  color: var(--ds-text-muted);
}

.msp-gap-list {
  display: flex;
  flex-direction: column;
  gap: 7px;
}

.msp-gap {
  display: grid;
  grid-template-columns: 16px minmax(0, 1fr);
  gap: 7px;
  align-items: start;
  color: var(--ds-text);
}

.msp-gap svg {
  margin-top: 2px;
  color: var(--ds-text-muted);
}

.msp-gap--ok svg {
  color: #137333;
}

.msp-gap-main {
  min-width: 0;
  display: flex;
  flex-direction: column;
  gap: 2px;
}

.msp-gap-reason {
  font-size: 12.5px;
  line-height: 18px;
  word-break: break-word;
}

.msp-section-head {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  min-width: 0;
  font-size: 12.5px;
  line-height: 18px;
  font-weight: 700;
  color: var(--ds-text);
}

.msp-section-head svg {
  flex: none;
  color: var(--ds-text-muted);
}

.msp-skills,
.msp-danger {
  display: flex;
  flex-direction: column;
  gap: 7px;
  padding-top: 8px;
  border-top: 1px solid var(--ds-border);
}

.msp-skill-list {
  display: flex;
  flex-direction: column;
  gap: 6px;
}

.msp-skill-row {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  align-items: center;
  gap: 10px;
  padding: 8px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg);
}

.msp-skill-main {
  min-width: 0;
  display: flex;
  flex-direction: column;
  gap: 3px;
}

.msp-skill-title {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  min-width: 0;
  font-size: 12.5px;
  line-height: 18px;
  color: var(--ds-text);
}

.msp-skill-title svg {
  flex: none;
  color: var(--ds-text-muted);
}

.msp-skill-meta {
  font-family: var(--ds-font-mono);
  font-size: 11px;
  line-height: 15px;
  color: var(--ds-text-subtle);
  overflow-wrap: anywhere;
}

.msp-skill-desc {
  font-size: 11.5px;
  line-height: 16px;
  color: var(--ds-text-muted);
}

.msp-skill-row input {
  width: 16px;
  height: 16px;
  accent-color: var(--ds-text);
  cursor: pointer;
}

.msp-skill-row input:disabled {
  cursor: not-allowed;
}

.msp-danger-row {
  display: flex;
  flex-direction: column;
  gap: 2px;
  padding: 7px 8px;
  border: 1px dashed var(--ds-border);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg-alt);
}

.msp-danger-row span {
  font-family: var(--ds-font-mono);
  font-size: 11px;
  color: var(--ds-text);
}

.msp-danger-row small,
.msp-handoff-result {
  font-size: 12px;
  line-height: 17px;
  color: var(--ds-text-muted);
}

.msp-confirm-btn {
  grid-column: 2;
  justify-self: start;
  min-height: 28px;
  padding: 0 9px;
  background: var(--ds-bg);
  color: var(--ds-text);
}

.msp-handoff-btn {
  width: 100%;
  min-height: 30px;
  padding: 0 10px;
  background: var(--ds-bg-alt);
  color: var(--ds-text);
}

.msp-analysis {
  display: flex;
  flex-direction: column;
  gap: 7px;
  padding-top: 8px;
  border-top: 1px solid var(--ds-border);
}

.msp-analysis-head {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  min-width: 0;
  font-size: 12.5px;
  line-height: 18px;
  font-weight: 700;
  color: var(--ds-text);
}

.msp-analysis-head svg {
  flex: none;
  color: var(--ds-text-muted);
}

.msp-report-facts {
  display: flex;
  flex-direction: column;
  gap: 5px;
}

.msp-fact {
  font-size: 12.5px;
  line-height: 18px;
  color: var(--ds-text);
  word-break: break-word;
}

/* ===== 收起态中间浮动输入条（MaterialCenterInput）— scoped 复刻 AgentInputBar 观感 =====
   §12 console scope：白底 ink 单色，pill 输入条，发送激活为 ink，无彩色脉冲。
   wrapper 定位/融合过渡在组件 inline barWrapperStyle（收起居中→展开飞右淡出）。 */
.ml-center-input-bar {
  display: flex;
  align-items: center;
  gap: 8px;
  width: 100%;
  padding: 7px 7px 7px 8px;
  background: var(--ds-bg);
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-pill, 999px);
  box-shadow: var(--ds-shadow-deep);
}

.ml-center-input-ham {
  flex-shrink: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  width: 34px;
  height: 34px;
  border-radius: 50%;
  border: 1px solid var(--ds-border);
  background: var(--ds-bg-alt);
  color: var(--ds-text-muted);
  cursor: pointer;
  transition: background 0.15s, color 0.15s, border-color 0.15s;
}

.ml-center-input-ham:hover {
  color: var(--ds-text);
  border-color: var(--ds-text);
}

.ml-center-input-ham-icon,
.ml-center-input-ham-icon::before,
.ml-center-input-ham-icon::after {
  display: block;
  width: 15px;
  height: 1.5px;
  border-radius: 2px;
  background: currentColor;
}

.ml-center-input-ham-icon {
  position: relative;
}

.ml-center-input-ham-icon::before,
.ml-center-input-ham-icon::after {
  content: '';
  position: absolute;
  left: 0;
}

.ml-center-input-ham-icon::before {
  top: -5px;
}

.ml-center-input-ham-icon::after {
  top: 5px;
}

.ml-center-input-field {
  flex: 1;
  display: flex;
  align-items: center;
  min-width: 0;
  min-height: 34px;
}

.ml-center-input-field textarea {
  width: 100%;
  background: none;
  border: none;
  outline: none;
  resize: none;
  font: inherit;
  font-size: 13px;
  line-height: 20px;
  color: var(--ds-text);
  padding: 0 6px;
  margin: 0;
  height: 20px;
  min-height: 20px;
  max-height: 100px;
  overflow-y: auto;
}

.ml-center-input-field textarea::placeholder {
  color: var(--ds-text-subtle);
}

.ml-center-input-send {
  flex-shrink: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  width: 34px;
  height: 34px;
  border-radius: 50%;
  border: none;
  background: #f0f0f0;
  color: #c0c0c0;
  cursor: not-allowed;
  transition: background 0.15s, color 0.15s;
}

.ml-center-input-send--active {
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
  cursor: pointer;
}

/* ===== §12 / a11y 收口：overflow:hidden 容器内的可聚焦元素用 inset 描边，焦点环不被裁 ===== */
.ml-doc-row:focus-visible,
.ml-vcard-more:focus-visible,
.ml-vcard-sel:focus-visible,
.ml-rail2-seg-btn:focus-visible,
.ml-frail-item:focus-visible,
.ml-batch-btn:focus-visible,
.ml-act:focus-visible,
.ml-docd-tb-btn:focus-visible,
.msp-icon-btn:focus-visible,
.msp-primary-btn:focus-visible,
.msp-confirm-btn:focus-visible,
.msp-handoff-btn:focus-visible {
  outline: 2px solid var(--ds-accent-deep);
  outline-offset: -2px;
  box-shadow: none;
}

/* Revisioned knowledge document: compact block editor in the material detail rail. */
.ml-docd--knowledge {
  gap: 14px;
}

.ml-kdoc {
  display: flex;
  flex-direction: column;
  gap: 12px;
  min-width: 0;
}

.ml-kdoc-head {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 12px;
}

.ml-kdoc-heading {
  min-width: 0;
}

.ml-kdoc-title {
  color: var(--ds-text);
  font-size: 16px;
  line-height: 22px;
  font-weight: 800;
  overflow-wrap: anywhere;
}

.ml-kdoc-meta {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 7px;
  margin-top: 5px;
  color: var(--ds-text-muted);
  font-size: 12px;
}

.ml-kdoc-status {
  display: inline-flex;
  align-items: center;
  min-height: 20px;
  padding: 1px 7px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm, 6px);
  background: var(--ds-bg-alt);
  color: var(--ds-text-muted);
  font-size: 11px;
  line-height: 16px;
  white-space: nowrap;
}

.ml-kdoc-status--applied {
  border-color: rgba(22, 163, 74, 0.22);
  color: #15803d;
}

.ml-kdoc-status--applying {
  border-color: rgba(37, 99, 235, 0.2);
  color: #1d4ed8;
}

.ml-kdoc-status--failed,
.ml-kdoc-status--partial_failed,
.ml-kdoc-status--apply_failed,
.ml-kdoc-status--delete_failed {
  border-color: rgba(220, 38, 38, 0.22);
  color: #b91c1c;
}

.ml-kdoc-apply-all {
  flex: none;
  display: inline-flex;
  align-items: center;
  gap: 6px;
}

.ml-kdoc-notice,
.ml-kdoc-error {
  margin: 0;
  padding: 8px 10px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm, 6px);
  background: var(--ds-bg-alt);
  color: var(--ds-text-muted);
  font-size: 12px;
  line-height: 18px;
}

.ml-kdoc-error {
  border-color: rgba(220, 38, 38, 0.2);
  color: #b91c1c;
}

.ml-kdoc-blocks {
  display: flex;
  flex-direction: column;
  gap: 10px;
}

.ml-kblock {
  min-width: 0;
  padding: 12px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm, 6px);
  background: var(--ds-bg);
}

.ml-kblock-head {
  display: grid;
  grid-template-columns: 24px minmax(0, 1fr) auto;
  align-items: center;
  gap: 7px;
}

.ml-kblock-index {
  color: var(--ds-text-subtle);
  font-family: var(--ds-font-mono);
  font-size: 11px;
}

.ml-kblock-title {
  min-width: 0;
  margin: 0;
  color: var(--ds-text);
  font-size: 13px;
  line-height: 19px;
  font-weight: 800;
  overflow-wrap: anywhere;
}

.ml-kblock-title-input,
.ml-kblock-editor {
  width: 100%;
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-sm, 6px);
  background: var(--ds-bg);
  color: var(--ds-text);
  font: inherit;
  outline: none;
}

.ml-kblock-title-input {
  min-height: 30px;
  padding: 4px 7px;
  font-size: 13px;
  font-weight: 700;
}

.ml-kblock-editor {
  min-height: 150px;
  margin-top: 10px;
  padding: 9px 10px;
  resize: vertical;
  font-size: 12.5px;
  line-height: 19px;
}

.ml-kblock-title-input:focus,
.ml-kblock-editor:focus {
  border-color: var(--ds-text);
}

.ml-kblock-content {
  margin-top: 9px;
  color: var(--ds-text-muted);
  font-size: 12.5px;
  line-height: 19px;
  white-space: pre-wrap;
  overflow-wrap: anywhere;
}

.ml-kblock-error {
  margin: 8px 0 0;
  color: #b91c1c;
  font-size: 12px;
  line-height: 17px;
}

.ml-kblock-actions {
  display: flex;
  justify-content: flex-end;
  flex-wrap: wrap;
  gap: 7px;
  margin-top: 11px;
}

.ml-kblock-actions .ml-act {
  display: inline-flex;
  align-items: center;
  gap: 5px;
}

.ml-spin {
  animation: ml-spin 0.9s linear infinite;
}

@keyframes ml-spin {
  to { transform: rotate(360deg); }
}

/* 极窄屏命令条：隐藏排序文案 / 密度文字，保留图标（对齐 mockup @560）。 */
@media (max-width: 560px) {
  .ml-sort-btn .ml-mono,
  .ml-seg-btn span {
    display: none;
  }
}
.mup-queue-filters {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  padding: 2px 0 8px;
}

.mup-queue-filter {
  min-height: 28px;
  padding: 0 9px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm, 6px);
  background: var(--ds-bg);
  color: var(--ds-text-muted);
  font-size: 12px;
  cursor: pointer;
}

.mup-queue-filter--active {
  border-color: var(--ds-text);
  background: var(--ds-text);
  color: var(--ds-bg);
}

.mup-row-task {
  max-width: 148px;
  overflow: hidden;
  color: var(--ds-text-subtle);
  font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
  font-size: 10px;
  text-overflow: ellipsis;
  white-space: nowrap;
}

@media (max-width: 640px) {
  .mup-row-task {
    display: none;
  }
}

/* Knowledge document management and independent editor */
.ml-doc-row--managed {
  display: grid;
  grid-template-columns: minmax(140px, 1fr) 66px 88px 90px 240px;
  min-width: 680px;
  min-height: 60px;
  padding: 8px 12px;
  gap: 8px;
  cursor: default;
}

.ml-doc-head {
  position: sticky;
  top: 0;
  z-index: 2;
  display: grid;
  grid-template-columns: minmax(140px, 1fr) 66px 88px 90px 240px;
  min-width: 680px;
  min-height: 38px;
  padding: 0 12px;
  align-items: center;
  gap: 8px;
  border-bottom: 1px solid var(--ds-border);
  background: var(--ds-bg-alt);
  color: var(--ds-text-subtle);
  font-size: 11px;
  font-weight: 700;
  letter-spacing: .04em;
}

.ml-doc-head > span:last-child { text-align: right; }

@media (max-width: 780px) {
  .ml-doc-head,
  .ml-doc-row--managed {
    grid-template-columns: minmax(140px, 1fr) 66px 88px 90px 240px;
  }

  .ml-doc-row--managed .ml-doc-meta {
    grid-column: auto;
    padding-bottom: 0;
  }
}

.ml-doc-name-cell {
  display: flex;
  min-width: 0;
  align-items: center;
  gap: 10px;
}

.ml-doc-status {
  justify-self: start;
  padding: 4px 9px;
  border: 1px solid var(--ds-border);
  border-radius: 999px;
  color: var(--ds-text-muted);
  font-size: 11px;
  white-space: nowrap;
}

.ml-doc-status--applied { border-color: #b9dbc9; background: #eef8f2; color: #28764c; }
.ml-doc-status--applying { border-color: #d9c997; background: #fff9e7; color: #80651a; }
.ml-doc-status--failed { border-color: #e6bdb8; background: #fff1ef; color: #a34237; }
.ml-doc-status--changed { border-color: #c9c2e3; background: #f5f2ff; color: #62519a; }
.ml-doc-status--processing,
.ml-doc-status--pending { border-color: #d9c997; background: #fff9e7; color: #80651a; }

.ml-doc-actions { display: flex; flex-wrap: wrap; gap: 6px; justify-content: flex-end; }
.ml-doc-action {
  min-height: 30px;
  padding: 0 11px;
  border: 1px solid var(--ds-border);
  border-radius: 7px;
  background: var(--ds-bg);
  color: var(--ds-text);
  font-size: 12px;
  cursor: pointer;
}
.ml-doc-action--primary { border-color: var(--ds-text); background: var(--ds-text); color: var(--ds-bg); }
.ml-doc-action--danger { color: #a34237; }
.ml-doc-action:disabled { cursor: not-allowed; opacity: .5; }
.ml-doc-list--groups { margin-top: 10px; }
.ml-doc-search-options { display: flex; justify-content: flex-end; margin: 10px 2px 8px; color: var(--ds-text-muted); font-size: 12px; }
.ml-doc-search-options label { display: flex; align-items: center; gap: 6px; cursor: pointer; }

.ml-editor-page { min-height: 100vh; background: #f5f4f0; color: var(--ds-text); }
.ml-editor-head {
  position: sticky;
  top: 0;
  z-index: 20;
  display: grid;
  grid-template-columns: 170px minmax(260px, 1fr) auto;
  align-items: center;
  gap: 18px;
  min-height: 72px;
  padding: 0 28px;
  border-bottom: 1px solid var(--ds-border);
  background: rgba(255, 255, 255, .96);
  backdrop-filter: blur(12px);
}
.ml-editor-back { display: flex; align-items: center; gap: 7px; border: 0; background: transparent; color: var(--ds-text-muted); cursor: pointer; }
.ml-editor-title-wrap { display: flex; align-items: center; min-width: 0; gap: 10px; }
.ml-editor-title-input { min-width: 0; width: min(500px, 100%); border: 0; outline: 0; background: transparent; color: var(--ds-text); font: 600 17px/1.2 inherit; }
.ml-editor-status { flex: none; padding: 4px 8px; border-radius: 999px; background: #f0eee9; color: var(--ds-text-muted); font-size: 11px; }
.ml-editor-failure-reason { display: block; margin-top: 3px; color: var(--ds-danger); font-size: 12px; }
.ml-editor-preview-block-title { margin: 0 0 12px; color: var(--ds-text); font-size: 18px; }
.ml-editor-markdown-preview { min-height: 150px; color: var(--ds-text); font-size: 15px; line-height: 1.8; }
.ml-editor-markdown-preview h2, .ml-editor-markdown-preview h3 { margin: 18px 0 8px; line-height: 1.35; }
.ml-editor-markdown-preview h2 { font-size: 18px; }
.ml-editor-markdown-preview h3 { font-size: 16px; }
.ml-editor-markdown-preview p, .ml-editor-markdown-preview ul, .ml-editor-markdown-preview ol, .ml-editor-markdown-preview blockquote { margin: 7px 0; }
.ml-editor-markdown-preview blockquote { padding-left: 12px; border-left: 3px solid var(--ds-border); color: var(--ds-text-muted); }
.ml-editor-markdown-preview a { color: #5f4a90; text-decoration: underline; text-underline-offset: 2px; }
.ml-editor-status--applied { background: #eaf6ef; color: #267448; }
.ml-editor-status--applying { background: #fff4d6; color: #7d6119; }
.ml-editor-head-actions { display: flex; align-items: center; gap: 8px; }
.ml-editor-save-state { margin-right: 4px; color: var(--ds-text-subtle); font-size: 11px; white-space: nowrap; }
.ml-editor-btn { min-height: 36px; padding: 0 14px; border: 1px solid var(--ds-border); border-radius: 8px; background: #fff; color: var(--ds-text); cursor: pointer; }
.ml-editor-btn--primary { border-color: var(--ds-text); background: var(--ds-text); color: #fff; }
.ml-editor-layout { display: grid; grid-template-columns: 210px minmax(480px, 820px) 220px; justify-content: center; align-items: start; gap: 24px; padding: 28px; }
.ml-editor-outline, .ml-editor-info { position: sticky; top: 100px; padding: 16px; border: 1px solid var(--ds-border); border-radius: 12px; background: rgba(255, 255, 255, .76); }
.ml-editor-side-label { margin-bottom: 12px; color: var(--ds-text-subtle); font-size: 10px; font-weight: 700; letter-spacing: .12em; text-transform: uppercase; }
.ml-editor-outline-item { display: grid; grid-template-columns: 24px 1fr; gap: 7px; width: 100%; padding: 9px 8px; border: 0; border-radius: 7px; background: transparent; color: var(--ds-text-muted); text-align: left; cursor: pointer; }
.ml-editor-outline-item span { color: var(--ds-text-subtle); font: 10px ui-monospace, monospace; }
.ml-editor-outline-item.is-active { background: #eceae4; color: var(--ds-text); font-weight: 600; }
.ml-editor-canvas { min-width: 0; border: 1px solid var(--ds-border); border-radius: 14px; background: #fff; box-shadow: 0 12px 36px rgba(33, 30, 24, .06); overflow: hidden; }
.ml-editor-toolbar { position: sticky; top: 72px; z-index: 10; display: flex; align-items: center; gap: 4px; min-height: 50px; padding: 7px 14px; border-bottom: 1px solid var(--ds-border); background: rgba(255, 255, 255, .96); }
.ml-editor-toolbar button, .ml-editor-toolbar select { min-height: 32px; border: 1px solid transparent; border-radius: 6px; background: transparent; color: var(--ds-text-muted); cursor: pointer; }
.ml-editor-toolbar button { display: inline-flex; align-items: center; gap: 5px; padding: 0 8px; }
.ml-editor-toolbar button:hover { border-color: var(--ds-border); background: #f6f5f2; color: var(--ds-text); }
.ml-editor-toolbar-rule { width: 1px; height: 22px; margin: 0 5px; background: var(--ds-border); }
.ml-editor-toolbar .ml-editor-polish { margin-left: auto; border-color: #d8cfef; background: #f7f3ff; color: #684f9b; }
.ml-editor-custom-instruction { width: 150px; min-height: 32px; padding: 0 8px; border: 1px solid var(--ds-border); border-radius: 6px; outline: 0; }
.ml-editor-blocks { padding: 46px clamp(28px, 7vw, 76px) 80px; }
.ml-editor-block { padding: 10px 0 34px; border-bottom: 1px solid #eeece7; }
.ml-editor-block:last-child { border-bottom: 0; }
.ml-editor-block-title { width: 100%; margin-bottom: 14px; border: 0; outline: 0; color: var(--ds-text); font: 700 22px/1.3 inherit; }
.ml-editor-textarea { display: block; width: 100%; resize: vertical; border: 0; outline: 0; background: transparent; color: #34312d; font: 15px/1.85 inherit; }
.ml-editor-info dl { margin: 0; }
.ml-editor-info dl div { display: flex; justify-content: space-between; gap: 10px; padding: 9px 0; border-bottom: 1px solid #ebe8e1; font-size: 12px; }
.ml-editor-info dt { color: var(--ds-text-subtle); }
.ml-editor-info dd { margin: 0; color: var(--ds-text); text-align: right; }
.ml-editor-info-note { margin: 14px 0 0; color: var(--ds-text-muted); font-size: 11px; line-height: 1.6; }
.ml-editor-info-action { width: 100%; margin-top: 12px; min-height: 32px; border: 1px solid var(--ds-border); border-radius: 7px; background: #fff; cursor: pointer; }
.ml-editor-suggestion { position: fixed; right: 28px; bottom: 28px; z-index: 40; width: min(380px, calc(100vw - 32px)); padding: 18px; border: 1px solid #d8cfef; border-radius: 12px; background: #fff; box-shadow: 0 16px 48px rgba(34, 28, 48, .18); }
.ml-editor-suggestion-head { display: flex; align-items: center; gap: 7px; color: #684f9b; font-weight: 700; }
.ml-editor-suggestion p { color: var(--ds-text); line-height: 1.65; }
.ml-editor-suggestion-compare small { display: block; margin-top: 10px; color: var(--ds-text-subtle); font-weight: 700; }
.ml-editor-suggestion > div:last-child { display: flex; flex-wrap: wrap; gap: 7px; }
.ml-editor-suggestion button { padding: 7px 10px; border: 1px solid var(--ds-border); border-radius: 6px; background: #fff; cursor: pointer; }
.ml-editor-loading { display: grid; min-height: 70vh; place-items: center; color: var(--ds-text-muted); }
.ml-editor-load-error { display: flex; min-height: 70vh; padding: 32px; align-items: center; justify-content: center; flex-direction: column; gap: 10px; background: #f5f4f0; color: var(--ds-text); text-align: center; }
.ml-editor-load-error strong { font-size: 18px; }
.ml-editor-load-error p { max-width: 520px; margin: 0; color: var(--ds-text-muted); line-height: 1.6; }
.ml-editor-load-error > div { display: flex; gap: 8px; }
.ml-editor-load-error button { min-height: 36px; padding: 0 14px; border: 1px solid var(--ds-border); border-radius: 8px; background: #fff; color: var(--ds-text); cursor: pointer; }
.ml-editor-publish-error { position: fixed; right: 28px; bottom: 28px; z-index: 45; padding: 10px 14px; border-radius: 8px; background: #fff0ee; color: #a34237; }
.ml-dh-detail-dialog { position: relative; width: min(420px, calc(100vw - 32px)); max-height: calc(100vh - 64px); padding: 24px; border-radius: 14px; background: #fff; overflow: auto; }

@media (max-width: 1100px) {
  .ml-editor-layout { grid-template-columns: 170px minmax(420px, 1fr); }
  .ml-editor-info { display: none; }
}

@media (max-width: 700px) {
  .ml-editor-head { grid-template-columns: 1fr auto; padding: 10px 14px; }
  .ml-editor-title-wrap { grid-column: 1 / -1; grid-row: 2; }
  .ml-editor-head-actions .ml-editor-save-state { font-size: 10px; }
  .ml-editor-layout { display: block; padding: 12px; }
  .ml-editor-outline, .ml-editor-info { display: none; }
  .ml-editor-toolbar { position: static; flex-wrap: wrap; overflow: visible; }
  .ml-editor-toolbar { gap: 1px; padding-inline: 8px; }
  .ml-editor-toolbar button { flex: none; padding-inline: 5px; white-space: nowrap; }
  .ml-editor-toolbar select { flex: none; width: 72px; }
  .ml-editor-custom-instruction { flex: none; width: 110px; }
  .ml-editor-toolbar-rule { margin-inline: 2px; }
  .ml-editor-blocks { padding: 28px 20px 60px; }
  .ml-editor-btn { padding: 0 10px; }
}
.dr-entry {
  display: flex;
  flex-direction: column;
  gap: 10px;
}

.dr-entry__head {
  display: flex;
  align-items: center;
  justify-content: space-between;
}

.dr-entry-btn {
  padding: 7px 14px;
  font-size: 12px;
  font-weight: 600;
  border: none;
  border-radius: 6px;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  gap: 6px;
}

.dr-entry-btn--primary {
  background: var(--ds-text);
  color: #fff;
}

.dr-entry-btn--primary::before {
  content: '✦';
  font-size: 11px;
}

.dr-entry-btn--ghost {
  background: var(--ds-bg-alt);
  color: var(--ds-text);
  border: 1px solid var(--ds-border);
}

.dr-entry-btn--neutral {
  background: var(--ds-bg);
  color: var(--ds-text);
  border: 1px solid var(--ds-border-strong);
}

.dr-entry-btn--quiet {
  background: var(--ds-bg);
  color: var(--ds-text-muted);
  border: 1px solid var(--ds-border);
}

.dr-entry-spin {
  width: 8px;
  height: 8px;
  border: 1.5px solid var(--ds-border-strong);
  border-top-color: var(--ds-text);
  border-radius: 50%;
  animation: spin 1s linear infinite;
  display: inline-block;
  margin-right: 4px;
}

.dr-status-row {
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: 12px;
  padding: 8px 10px;
  border-radius: 6px;
}

.dr-status-row--neutral {
  background: var(--ds-bg-alt);
  color: var(--ds-text-muted);
}

.dr-status-row--warn {
  background: rgba(217, 119, 6, 0.08);
  color: #92400e;
  border: 1px solid rgba(217, 119, 6, 0.2);
}

.dr-status-row--success {
  background: var(--ds-bg-alt);
  color: var(--ds-text-muted);
}

.dr-status-row__ico {
  width: 16px;
  height: 16px;
  background: var(--ds-text-muted);
  color: #fff;
  border-radius: 4px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 9px;
  font-weight: 700;
  flex-shrink: 0;
}

.dr-status-row__ico--warn {
  background: #d97706;
}

.dr-status-row__ico--success {
  background: #10b981;
}

.dr-status-row a,
.dr-status-row__link {
  color: var(--ds-text);
  font-weight: 600;
  text-decoration: none;
  background: transparent;
  border: none;
  cursor: pointer;
  padding: 0;
  font-size: inherit;
}

.dr-status-row--warn a,
.dr-status-row--warn .dr-status-row__link {
  color: #92400e;
}

@keyframes spin {
  from { transform: rotate(0deg); }
  to { transform: rotate(360deg); }
}
/*
 * GEO 入驻 · 欢迎 / 填信息两屏样式。
 * 1:1 取 docs/design/2026-06-22-geo-onboarding-innovation-hifi.html 的 .wel / .fm / .finput / .ink-btn 数值。
 * console scope ink 单色（design.md §12 no-azure）：CTA = var(--ds-text) 底白字；
 * 高亮框 .geo-onb-input--new = var(--ds-text) 边框；只读框 .geo-onb-input--ro = 灰；无紫/azure。
 * 颜色一律用 --ds-* token，无裸 hex（阴影用 rgba 透明黑）。
 */

/* ===== 共用：ink CTA（hi-fi .ink-btn）===== */
.geo-onb-cta {
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
  border: none;
  border-radius: 12px;
  padding: 13px 18px;
  font-size: 14.5px;
  font-weight: 700;
  cursor: pointer;
}
.geo-onb-cta:disabled {
  cursor: default;
  opacity: 0.5;
}
.geo-onb-cta--full {
  width: 100%;
}

.geo-onb-ghost {
  text-align: center;
  font-size: 12.5px;
  color: var(--ds-text-subtle);
  margin-top: 12px;
  cursor: pointer;
}

/* ===== 欢迎屏（hi-fi .wel）===== */
.geo-onb--welcome {
  padding: 44px 40px 36px;
  text-align: center;
}
.geo-onb-engines {
  display: flex;
  justify-content: center;
  gap: 8px;
  margin-bottom: 22px;
}
.geo-onb-engines span {
  font-size: 11.5px;
  color: var(--ds-text-muted);
  border: 1px solid var(--ds-border);
  border-radius: 999px;
  padding: 4px 12px;
}
.geo-onb-h {
  font-size: 27px;
  font-weight: 800;
  letter-spacing: -0.6px;
  line-height: 1.25;
  margin-bottom: 14px;
}
.geo-onb--welcome .geo-onb-cta {
  padding: 14px 34px;
}

/* ===== 填信息屏（hi-fi .fm）===== */
.geo-onb--form {
  padding: 26px 34px 32px;
}
.geo-onb-fm-h {
  font-size: 19px;
  font-weight: 800;
  margin-bottom: 6px;
}
.geo-onb-lead {
  font-size: 13px;
  color: var(--ds-text-muted);
  line-height: 1.6;
  margin-bottom: 22px;
}
.geo-onb-lead b {
  color: var(--ds-text);
  font-weight: 600;
}

.geo-onb-field {
  margin-bottom: 17px;
}
.geo-onb-flabel {
  font-size: 13px;
  color: var(--ds-text-muted);
  font-weight: 500;
  margin-bottom: 7px;
  display: flex;
  align-items: center;
  gap: 8px;
}
.geo-onb-opt {
  font-size: 10.5px;
  color: var(--ds-text-subtle);
  border: 1px solid var(--ds-border-strong);
  border-radius: 5px;
  padding: 0 6px;
  line-height: 16px;
}
.geo-onb-pre {
  font-size: 10.5px;
  color: var(--ds-text-muted);
  background: var(--ds-bg-alt);
  border-radius: 5px;
  padding: 1px 7px;
  line-height: 16px;
}
.geo-onb-new-pill {
  margin-left: auto;
  font-size: 9.5px;
  font-weight: 700;
  color: var(--ds-text-on-ink);
  background: var(--ds-text);
  border-radius: 5px;
  padding: 1px 6px;
  letter-spacing: 0.4px;
}

/* hi-fi .finput */
.geo-onb-input {
  width: 100%;
  background: var(--ds-bg-alt);
  border: 1px solid var(--ds-border);
  border-radius: 11px;
  padding: 12px 15px;
  font-size: 14.5px;
  color: var(--ds-text);
  font-family: inherit;
  outline: none;
}
.geo-onb-input::placeholder {
  color: var(--ds-text-subtle);
}
/* 只读产品名（hi-fi .finput.ro）*/
.geo-onb-input--ro {
  color: var(--ds-text-muted);
  background: var(--ds-bg-alt);
}
/* 新增高亮框（hi-fi .finput.is-new）*/
.geo-onb-input--new {
  background: var(--ds-surface);
  border: 1.5px solid var(--ds-text);
  box-shadow: 0 0 0 3px rgba(24, 24, 27, 0.05);
}

.geo-onb-hint {
  font-size: 11.5px;
  color: var(--ds-text-subtle);
  line-height: 1.5;
  margin-top: 7px;
}
.geo-onb-hint b {
  color: var(--ds-text-muted);
  font-weight: 600;
}
.geo-onb-note {
  font-size: 11.5px;
  color: var(--ds-text-subtle);
  text-align: center;
  margin-top: 14px;
  line-height: 1.5;
}
.geo-onb-err {
  font-size: 12.5px;
  color: var(--ds-danger);
  text-align: center;
  margin-top: 12px;
  line-height: 1.5;
}

/* ===== 采集中屏（hi-fi .load / .spin / .lsteps / .lstep）===== */
.geo-onb--collecting {
  padding: 54px 40px;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 22px;
}
/* hi-fi .spin */
.geo-onb-spin {
  width: 46px;
  height: 46px;
  border-radius: 50%;
  border: 3px solid var(--ds-border-strong);
  border-top-color: var(--ds-text);
  animation: geo-onb-sp 0.9s linear infinite;
}
@keyframes geo-onb-sp {
  to {
    transform: rotate(360deg);
  }
}
/* hi-fi .load .cap */
.geo-onb-cap {
  font-size: 14px;
  color: var(--ds-text);
  font-weight: 600;
  text-align: center;
}
/* hi-fi .load .cap small — 副行：接入引擎 + 采集说明 */
.geo-onb-cap small {
  display: block;
  font-size: 12px;
  color: var(--ds-text-muted);
  font-weight: 400;
  margin-top: 5px;
}
/* hi-fi .lsteps */
.geo-onb-steps {
  width: 360px;
  max-width: 100%;
  display: flex;
  flex-direction: column;
  gap: 11px;
}
/* hi-fi .lstep */
.geo-onb-step {
  display: flex;
  align-items: center;
  gap: 11px;
  font-size: 13px;
  color: var(--ds-text-muted);
}
.geo-onb-step-dot {
  width: 18px;
  height: 18px;
  border-radius: 50%;
  flex: 0 0 auto;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 10px;
}
/* hi-fi .lstep.done — 白字用 token var(--ds-text-on-ink)，非裸 #fff */
.geo-onb-step--done {
  color: var(--ds-text);
}
.geo-onb-step--done .geo-onb-step-dot {
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
}
/* hi-fi .lstep.cur */
.geo-onb-step--cur {
  color: var(--ds-text);
  font-weight: 600;
}
.geo-onb-step--cur .geo-onb-step-dot {
  border: 2px solid var(--ds-text);
}
/* hi-fi .lstep.todo */
.geo-onb-step--todo .geo-onb-step-dot {
  border: 2px solid var(--ds-border-strong);
}

/* hi-fi .lbar — 真实采集进度条（done / total 取自 run，与卡头同源）*/
.geo-onb-bar {
  width: 360px;
  max-width: 100%;
}
.geo-onb-bar-track {
  height: 6px;
  background: var(--ds-bg-alt);
  border-radius: 3px;
  overflow: hidden;
}
.geo-onb-bar-track > i {
  display: block;
  height: 100%;
  background: var(--ds-text);
  transition: width 0.4s ease;
}
.geo-onb-bar-num {
  text-align: center;
  font-family: var(--ds-font-mono);
  font-size: 11.5px;
  color: var(--ds-text-subtle);
  margin-top: 7px;
}
/*
 * TopicBacklog · 选题 Backlog 样式
 * console scope（design.md §12）：白底 ink 单色，no-azure。
 * P0/P1/P2 用 ds 徽标（ink solid / ink outline）区分优先级——非彩色脉冲；
 * 颜色一律 --ds-* token（global-design.css 权威），无裸 hex、无 azure 大面积色块。
 */
.topic-backlog {
  font-family: var(--ds-font);
  color: var(--ds-text);
  display: flex;
  flex-direction: column;
  gap: 12px;
}

.tb-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
}
.tb-kicker {
  font-family: var(--ds-font-mono);
  font-size: 11px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--ds-text-subtle);
}

/* 生成选题 = ink-on-ink 主 CTA（§12：主实色按钮黑底白字，非 azure） */
.tb-gen {
  font-size: 12px;
  font-weight: 560;
  border-radius: var(--ds-radius-sm);
  padding: 6px 14px;
  cursor: pointer;
  border: 1px solid var(--ds-text);
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
  font-family: var(--ds-font);
}
.tb-gen:disabled {
  opacity: 0.55;
  cursor: progress;
}

/* ===== 状态占位（载入 / 空 / 错误） ===== */
.tb-state {
  font-size: 13px;
  color: var(--ds-text-muted);
  padding: 22px 8px;
  text-align: center;
  line-height: 1.55;
}
.tb-state--err {
  color: var(--ds-danger);
  padding: 10px 8px;
}

/* ===== 选题列表 ===== */
.tb-list {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.tb-item {
  background: var(--ds-bg);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-md);
  padding: 10px 12px;
  display: flex;
  flex-direction: column;
  gap: 5px;
}
.tb-item-top {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
}
.tb-badges {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 5px;
}

.tb-badge {
  font-family: var(--ds-font-mono);
  font-size: 10px;
  line-height: 1.6;
  letter-spacing: 0.04em;
  padding: 1px 7px;
  border-radius: var(--ds-radius-pill);
  white-space: nowrap;
}
/* 意图徽标：次级线框 ink */
.tb-badge--intent {
  border: 1px solid var(--ds-border-strong);
  color: var(--ds-text-muted);
}
/* 优先级档：ink 深浅区分（非彩色）——P0 实心黑底白字最强，P1/P2 线框递弱 */
.tb-badge--tier {
  font-weight: 700;
}
.tb-badge--tier-p0 {
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
  border: 1px solid var(--ds-text);
}
.tb-badge--tier-p1 {
  background: transparent;
  color: var(--ds-text);
  border: 1px solid var(--ds-text);
}
.tb-badge--tier-p2 {
  background: transparent;
  color: var(--ds-text-muted);
  border: 1px solid var(--ds-border-strong);
}
/* 缺口补：ink 线框标记（缺口溯源），非彩色告警 */
.tb-badge--gap {
  background: var(--ds-bg-alt);
  color: var(--ds-text);
  border: 1px solid var(--ds-border-strong);
}

/* 写内容：次级 ghost 线框（复用父卡 handleGenerate） */
.tb-write {
  font-size: 12px;
  font-weight: 500;
  border-radius: var(--ds-radius-sm);
  padding: 4px 12px;
  cursor: pointer;
  border: 1px solid var(--ds-border-strong);
  background: var(--ds-bg);
  color: var(--ds-text);
  font-family: var(--ds-font);
  white-space: nowrap;
}

.tb-keyword {
  font-size: 13.5px;
  font-weight: 560;
  color: var(--ds-text);
  line-height: 1.4;
}
.tb-scene {
  font-size: 11.5px;
  color: var(--ds-text-muted);
  line-height: 1.5;
}
/**
 * OpeningConfirmGate — popsci_cyber 开场形象确认门样式（Task 7 / DEE-165）
 *
 * 视觉源：docs/design/2026-06-12-popsci-cyber-opening-confirm-gate.html
 * 所有颜色引用 var(--ds-*) 设计系统 token（全局已声明于 global-design.css）。
 * 禁止 azure（§12 console scope no-azure 规则）；主按钮用 ink-on-ink。
 */

/* ---------- gate card（画布节点态 · DEE-165 卡片化：无遮罩，固定宽，DH 区卡内滚动） ---------- */
.ocg-gate {
  /* 画布节点态固定宽（取「选形象」步含 DH 网格的合适宽度）；DH 区由 .dh-picker-body
     自身 max-height 卡内滚动封顶（tendency #3：整卡不顶乱画布），不再用 88vh 视口封顶。 */
  width: 700px;
  max-width: 700px;
  display: flex;
  flex-direction: column;
  background: var(--ds-bg);
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-lg);
  box-shadow: var(--ds-shadow-deep);
  overflow: hidden;
  font-family: var(--ds-font);
  color: var(--ds-text);
}

/* ---------- header ---------- */
.ocg-head {
  padding: 18px 24px 16px;
  border-bottom: 1px solid var(--ds-border);
  display: flex;
  align-items: flex-start;
  gap: 12px;
}

.ocg-badge {
  font-size: 20px;
  line-height: 1;
  margin-top: 1px;
  flex: none;
}

.ocg-head-text {
  flex: 1;
  min-width: 0;
}

.ocg-title {
  font-size: 17px;
  font-weight: 800;
  letter-spacing: -0.01em;
}

.ocg-sub {
  font-size: 12px;
  color: var(--ds-text-muted);
  margin-top: 3px;
  line-height: 1.5;
}

.ocg-close {
  margin-left: auto;
  flex: none;
  width: 26px;
  height: 26px;
  border-radius: var(--ds-radius-sm);
  border: 1px solid var(--ds-border);
  background: var(--ds-bg);
  color: var(--ds-text-subtle);
  font-size: 14px;
  line-height: 1;
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
}

/* ---------- step indicator ---------- */
.ocg-steps {
  display: flex;
  align-items: center;
  padding: 14px 24px 0;
  gap: 0;
}

.ocg-step-row {
  display: flex;
  align-items: center;
  flex: 1;
}

.ocg-step-row:last-child {
  flex: none;
}

.ocg-step {
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: 12px;
  color: var(--ds-text-subtle);
  white-space: nowrap;
}

.ocg-step .dot {
  width: 20px;
  height: 20px;
  border-radius: var(--ds-radius-pill);
  border: 1px solid var(--ds-border-strong);
  display: flex;
  align-items: center;
  justify-content: center;
  font-family: var(--ds-mono);
  font-size: 11px;
  font-weight: 700;
  color: var(--ds-text-subtle);
  background: var(--ds-bg);
  flex: none;
}

.ocg-step.done .dot {
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
  border-color: var(--ds-text);
}

.ocg-step.active {
  color: var(--ds-text);
  font-weight: 700;
}

.ocg-step.active .dot {
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
  border-color: var(--ds-text);
}

.ocg-step-line {
  flex: 1;
  height: 1px;
  background: var(--ds-border);
  margin: 0 10px;
}

/* ---------- body ---------- */
.ocg-body {
  padding: 18px 24px 22px;
  flex: 1 1 auto;
  min-height: 0;
  overflow-y: auto;
}

/* ---------- pick body (选形象) ---------- */
.ocg-body--pick {
  padding: 14px 20px 12px;
}

/* 快路阈值内：仍停在选形象页，轻微忙态避免误点 */
.ocg-body--pick-busy {
  opacity: 0.72;
  pointer-events: none;
}

.ocg-body--pick .dh-picker {
  border: none;
  box-shadow: none;
  background: transparent;
}

.ocg-body--pick .dh-picker-tabs {
  padding: 0 0 10px;
}

/* ---------- step 1 upload tile ---------- */
.ocg-dh-up {
  margin-top: 4px;
  margin-bottom: 4px;
  border: 1px dashed var(--ds-border-strong);
  border-radius: var(--ds-radius-md);
  display: flex;
  flex-direction: row;
  align-items: center;
  justify-content: center;
  gap: 10px;
  padding: 16px 16px;
  cursor: pointer;
  color: var(--ds-text-muted);
  background: var(--ds-bg-alt);
  transition: background 0.15s, border-color 0.15s;
}

.ocg-dh-up:hover {
  background: var(--ds-bg-deep);
  border-color: var(--ds-text-subtle);
}

.ocg-up-ic {
  font-size: 18px;
  font-weight: 700;
  color: var(--ds-text-muted);
  flex: none;
  line-height: 1;
}

.ocg-up-text {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 2px;
}

.ocg-up-t {
  font-size: 12.5px;
  font-weight: 700;
  color: var(--ds-text);
}

.ocg-up-s {
  font-size: 10.5px;
  color: var(--ds-text-subtle);
}

/* ---------- wait body · 方案 C ---------- */
.ocg-body--wait {
  padding: 20px 22px 24px;
}

.ocg-wait {
  display: flex;
  gap: 22px;
  align-items: center;
}

.ocg-phone {
  width: 148px;
  height: 262px;
  border-radius: 18px;
  border: 2px solid var(--ds-text);
  background: linear-gradient(180deg, #1c1917 0%, #292524 40%, #44403c 100%);
  position: relative;
  flex: none;
  overflow: hidden;
  box-shadow: var(--ds-shadow-deep);
}

/* 选形象步：紧凑示意，不抢网格空间 */
.ocg-phone--sm {
  width: 112px;
  height: 198px;
  border-radius: 14px;
  border-width: 1.5px;
}

.ocg-phone--sm .ocg-phone-notch {
  top: 6px;
  width: 36px;
  height: 5px;
}

.ocg-phone--sm .ocg-phone-board {
  inset: 22px 10px 40px;
}

.ocg-phone--sm .ocg-phone-line {
  height: 5px;
  margin: 8px 6px 0;
}

.ocg-phone--sm .ocg-phone-line--block {
  margin-top: 18px;
}

.ocg-phone--sm .ocg-phone-pip {
  right: 10px;
  bottom: 42px;
  width: 32px;
  height: 42px;
  border-radius: 5px;
}

.ocg-phone--sm .ocg-phone-pip-ph {
  font-size: 10px;
  padding-bottom: 4px;
}

.ocg-phone--sm .ocg-phone-cap {
  left: 8px;
  right: 8px;
  bottom: 10px;
  font-size: 8.5px;
}

.ocg-phone-notch {
  position: absolute;
  top: 8px;
  left: 50%;
  transform: translateX(-50%);
  width: 48px;
  height: 6px;
  border-radius: 4px;
  background: rgba(255, 255, 255, 0.15);
}

.ocg-phone-board {
  position: absolute;
  inset: 28px 12px 48px;
  border-radius: 6px;
  background:
    linear-gradient(135deg, rgba(255, 255, 255, 0.08), transparent),
    repeating-linear-gradient(
      0deg,
      transparent,
      transparent 18px,
      rgba(255, 255, 255, 0.04) 18px,
      rgba(255, 255, 255, 0.04) 19px
    );
}

.ocg-phone-line {
  height: 6px;
  border-radius: 3px;
  background: rgba(255, 255, 255, 0.12);
  margin: 10px 8px 0;
}

.ocg-phone-line--mid {
  width: 70%;
}

.ocg-phone-line--short {
  width: 55%;
}

.ocg-phone-line--block {
  margin-top: 28px;
  width: 80%;
}

.ocg-phone-pip {
  position: absolute;
  right: 14px;
  bottom: 52px;
  width: 42px;
  height: 56px;
  border-radius: 6px;
  border: 1.5px solid rgba(255, 255, 255, 0.5);
  background: linear-gradient(160deg, #d6d3d1, #78716c);
  display: flex;
  align-items: flex-end;
  justify-content: center;
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.35);
  overflow: hidden;
}

.ocg-phone-pip--pulse {
  animation: ocg-pip-pulse 1.6s ease-in-out infinite;
}

.ocg-phone-pip--err {
  border-color: rgba(239, 68, 68, 0.75);
  opacity: 0.85;
}

.ocg-phone-pip-img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center 15%;
}

.ocg-phone-pip-ph {
  font-size: 11px;
  font-weight: 800;
  color: rgba(255, 255, 255, 0.55);
  padding-bottom: 6px;
}

.ocg-phone-cap {
  position: absolute;
  left: 12px;
  right: 12px;
  bottom: 14px;
  font-size: 9px;
  color: rgba(255, 255, 255, 0.55);
  text-align: center;
  line-height: 1.3;
}

@keyframes ocg-pip-pulse {
  0%,
  100% {
    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.35);
    border-color: rgba(255, 255, 255, 0.5);
  }
  50% {
    box-shadow: 0 4px 18px rgba(24, 24, 27, 0.55);
    border-color: rgba(255, 255, 255, 0.85);
  }
}

.ocg-wait-side {
  flex: 1;
  min-width: 0;
}

.ocg-wait-name {
  font-size: 15px;
  font-weight: 800;
  letter-spacing: -0.01em;
  color: var(--ds-text);
}

.ocg-wait-name-sub {
  font-weight: 600;
  color: var(--ds-text-muted);
  font-size: 13px;
}

.ocg-wait-desc {
  margin: 6px 0 14px;
  font-size: 12.5px;
  color: var(--ds-text-muted);
  line-height: 1.55;
}

.ocg-bar {
  height: 4px;
  border-radius: var(--ds-radius-pill);
  background: var(--ds-bg-deep);
  overflow: hidden;
}

.ocg-bar > i {
  display: block;
  height: 100%;
  width: 42%;
  border-radius: inherit;
  background: var(--ds-text);
  animation: ocg-ind 1.4s ease-in-out infinite;
}

@keyframes ocg-ind {
  0% {
    transform: translateX(-100%);
    width: 30%;
  }
  50% {
    width: 55%;
  }
  100% {
    transform: translateX(280%);
    width: 30%;
  }
}

.ocg-eta {
  margin-top: 6px;
  font-size: 11.5px;
  color: var(--ds-text-subtle);
}

.ocg-loc-hint {
  margin-top: 12px;
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: 11.5px;
  color: var(--ds-text-muted);
  padding: 8px 10px;
  background: var(--ds-bg-alt);
  border-radius: var(--ds-radius-sm);
  border: 1px solid var(--ds-border);
}

.ocg-loc-dot {
  width: 8px;
  height: 8px;
  border-radius: 2px;
  background: var(--ds-text);
  flex: none;
}

.ocg-checklist {
  list-style: none;
  margin: 14px 0 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: 8px;
}

.ocg-ck {
  display: flex;
  align-items: center;
  gap: 10px;
  font-size: 12.5px;
  color: var(--ds-text-muted);
}

.ocg-ck-ic {
  width: 18px;
  height: 18px;
  border-radius: 50%;
  border: 1.5px solid var(--ds-border-strong);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 10px;
  flex: none;
}

.ocg-ck--done {
  color: var(--ds-text);
  font-weight: 600;
}

.ocg-ck--done .ocg-ck-ic {
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
  border-color: var(--ds-text);
}

.ocg-ck--run {
  color: var(--ds-text);
  font-weight: 700;
}

.ocg-ck--run .ocg-ck-ic {
  border-color: var(--ds-text);
  border-top-color: transparent;
  border-width: 2px;
  animation: ocg-spin 0.8s linear infinite;
}

.ocg-err-box {
  border: 1px solid rgba(239, 68, 68, 0.25);
  background: #fef2f2;
  border-radius: var(--ds-radius-md);
  padding: 12px 14px;
}

.ocg-err-title {
  font-size: 13px;
  font-weight: 800;
  color: #b42318;
}

.ocg-err-desc {
  font-size: 12px;
  color: #912018;
  margin-top: 4px;
  line-height: 1.45;
  opacity: 0.9;
}

.ocg-err-actions {
  display: flex;
  gap: 8px;
  margin-top: 12px;
}

/* spinner used by legacy overlay paths */
.ocg-spin {
  width: 28px;
  height: 28px;
  border-radius: 50%;
  border: 2.5px solid var(--ds-border-strong);
  border-top-color: var(--ds-text);
  animation: ocg-spin 0.8s linear infinite;
}

/* ---------- step 2 compose layout ---------- */
.ocg-compose {
  display: flex;
  gap: 20px;
}

.ocg-preview-col {
  flex: 0 0 160px;
}

/* 9:16 preview */
.ocg-preview {
  width: 160px;
  aspect-ratio: 9 / 16;
  border-radius: var(--ds-radius-md);
  border: 1px solid var(--ds-border);
  background: linear-gradient(160deg, #2a2f3a 0%, #11151c 70%);
  position: relative;
  overflow: hidden;
  display: flex;
  align-items: flex-end;
  justify-content: center;
}

.ocg-preview-img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.ocg-ratio {
  position: absolute;
  top: 8px;
  left: 8px;
  font-family: var(--ds-mono);
  font-size: 10px;
  letter-spacing: 0.08em;
  color: #ffffff;
  background: rgba(0, 0, 0, 0.42);
  padding: 2px 7px;
  border-radius: var(--ds-radius-pill);
  z-index: 1;
}

/* in-place generating overlay */
.ocg-pgen {
  position: absolute;
  inset: 0;
  background: rgba(10, 12, 16, 0.58);
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 11px;
  z-index: 2;
}

.ocg-pspin {
  width: 30px;
  height: 30px;
  border: 3px solid rgba(255, 255, 255, 0.26);
  border-top-color: #ffffff;
  border-radius: 50%;
  animation: ocg-spin 0.9s linear infinite;
}

.ocg-pgt {
  font-size: 12.5px;
  font-weight: 700;
  color: #ffffff;
}

.ocg-pgs {
  font-size: 10.5px;
  color: rgba(255, 255, 255, 0.75);
  font-family: var(--ds-mono);
}

@keyframes ocg-spin {
  to {
    transform: rotate(360deg);
  }
}

/* version history thumbnails */
.ocg-history {
  display: flex;
  gap: 8px;
  margin-top: 10px;
  flex-wrap: wrap;
}

.ocg-hist {
  width: 36px;
  aspect-ratio: 9 / 16;
  border-radius: 6px;
  border: 1px solid var(--ds-border);
  background: var(--ds-bg-deep);
  cursor: pointer;
  overflow: hidden;
  opacity: 0.6;
  flex: none;
}

.ocg-hist-img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}

.ocg-hist.cur {
  border: 2px solid var(--ds-text);
  opacity: 1;
}

/* iterate right column */
.ocg-iterate-col {
  flex: 1;
  display: flex;
  flex-direction: column;
}

/* step2 子分页切换：继续调这张 / 换一张 */
.ocg-seg {
  display: flex;
  gap: 3px;
  padding: 3px;
  margin-bottom: 14px;
  background: var(--ds-bg-alt);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
}

.ocg-seg button {
  flex: 1;
  border: 0;
  background: transparent;
  font-family: var(--ds-font);
  font-size: 12.5px;
  font-weight: 700;
  color: var(--ds-text-muted);
  padding: 8px 10px;
  border-radius: 6px;
  cursor: pointer;
}

/* 选中态 ink 实色（§12 console no-azure） */
.ocg-seg button.on {
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
}

/* 「为什么不满意」引导态：更显眼的 ink 标签 + 强描边输入框 */
.ocg-field-lbl.ocg-q-lbl {
  font-family: var(--ds-font);
  font-size: 13px;
  font-weight: 700;
  text-transform: none;
  letter-spacing: 0;
  color: var(--ds-text);
  display: flex;
  align-items: center;
  gap: 6px;
}

.ocg-ta.ocg-ta-q {
  border-color: var(--ds-text);
  min-height: 88px;
}

/* 全宽动作按钮（每个 panel 一个） */
.ocg-btn-block {
  width: 100%;
  margin-top: 13px;
}

.ocg-hint {
  font-size: 11px;
  color: var(--ds-text-subtle);
  margin-top: 9px;
  line-height: 1.5;
}

/* 错误态 inline 提示（白底卡内，如人群定位门推导/锁定失败）：danger 色 + 加重，
   与普通浅灰 hint 区分（DEE-329）。深色 spinner 覆盖层的失败态另见 .ocg-pgen.ocg-perr。 */
.ocg-hint.ocg-perr {
  color: var(--ds-danger);
  font-weight: 500;
}

.ocg-field-lbl {
  font-family: var(--ds-mono);
  font-size: 11px;
  font-weight: 500;
  text-transform: uppercase;
  letter-spacing: 0.1em;
  color: var(--ds-text-subtle);
  margin-bottom: 8px;
}

.ocg-ta {
  width: 100%;
  min-height: 92px;
  resize: none;
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-sm);
  padding: 11px 13px;
  font-size: 13px;
  font-family: var(--ds-font);
  color: var(--ds-text);
  background: var(--ds-bg);
  line-height: 1.55;
  outline: none;
}

.ocg-ta::placeholder {
  color: var(--ds-text-subtle);
}

.ocg-ta:focus {
  border-color: var(--ds-border-strong);
}

/* quick chips */
.ocg-chips {
  display: flex;
  flex-wrap: wrap;
  gap: 7px;
  margin-top: 11px;
}

.ocg-chip {
  font-size: 11.5px;
  padding: 5px 11px;
  border-radius: var(--ds-radius-pill);
  border: 1px solid var(--ds-border);
  background: var(--ds-bg);
  color: var(--ds-text-muted);
  cursor: pointer;
  user-select: none;
}

.ocg-chip:hover {
  background: var(--ds-bg-alt);
  color: var(--ds-text);
}

/* iterate action buttons */
.ocg-iter-actions {
  display: flex;
  gap: 10px;
  margin-top: 14px;
}

/* ---------- step 3 summary ---------- */
.ocg-summary {
  display: flex;
  gap: 18px;
  align-items: center;
}

.ocg-sum-thumb {
  width: 80px;
  aspect-ratio: 9 / 16;
  border-radius: var(--ds-radius-md);
  border: 1px solid var(--ds-border);
  background: linear-gradient(160deg, #2a2f3a, #11151c);
  display: flex;
  align-items: flex-end;
  justify-content: center;
  font-size: 40px;
  overflow: hidden;
  flex: none;
}

.ocg-sum-thumb-img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.ocg-sum-rows {
  flex: 1;
  min-width: 0;
}

.ocg-srow {
  display: flex;
  gap: 12px;
  padding: 7px 0;
  border-bottom: 1px solid var(--ds-border);
}

.ocg-srow:last-child {
  border-bottom: none;
}

.ocg-slbl {
  font-family: var(--ds-mono);
  font-size: 11px;
  text-transform: uppercase;
  letter-spacing: 0.1em;
  color: var(--ds-text-subtle);
  min-width: 54px;
  flex: none;
}

.ocg-sval {
  font-size: 13px;
  color: var(--ds-text);
  line-height: 1.5;
}

.ocg-callout {
  display: flex;
  gap: 9px;
  align-items: flex-start;
  margin-top: 16px;
  padding: 11px 13px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg-alt);
  font-size: 12.5px;
  color: var(--ds-text-muted);
  line-height: 1.5;
}

.ocg-callout-ic {
  color: var(--ds-text);
  font-weight: 800;
  flex: none;
}

/* ---------- footer ---------- */
.ocg-foot {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 16px 24px;
  border-top: 1px solid var(--ds-border);
  background: var(--ds-bg-alt);
}

.ocg-foot-hint {
  font-size: 12px;
  color: var(--ds-text-muted);
  line-height: 1.45;
}

.ocg-spacer {
  flex: 1;
}

/* ---------- buttons ---------- */
.ocg-btn {
  padding: 9px 22px;
  font-size: 13px;
  font-weight: 700;
  border-radius: var(--ds-radius-sm);
  cursor: pointer;
  border: 1px solid transparent;
  font-family: var(--ds-font);
  white-space: nowrap;
}

/* ink-on-ink primary — no azure (§12 console scope) */
.ocg-btn-primary {
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
  border-color: var(--ds-text);
}

.ocg-btn-primary:disabled {
  background: var(--ds-border-strong);
  color: var(--ds-text-on-ink);
  opacity: 0.6;
  cursor: not-allowed;
}

.ocg-btn-ghost {
  background: var(--ds-bg);
  color: var(--ds-text);
  border: 1px solid var(--ds-border-strong);
  font-weight: 600;
}

.ocg-btn-ghost:disabled {
  background: var(--ds-bg-alt);
  opacity: 0.5;
  cursor: not-allowed;
}

/* 冷启动准备失败态 */
.ocg-pgen.ocg-perr {
  gap: var(--ds-space-3);
}

.ocg-pgen.ocg-perr .ocg-pgs {
  color: var(--ds-text-muted);
  max-width: 220px;
  text-align: center;
  line-height: 1.5;
}

.ocg-pgen.ocg-perr .ocg-btn {
  margin-top: var(--ds-space-2);
}

/* 出图失败「重试」按钮：暗底预览框覆盖层上用浅底反白，保证对比（非 azure，仅作用于暗底层） */
.ocg-btn-onfail {
  background: #ffffff;
  color: #18181b;
  border-color: #ffffff;
}
.placement-cockpit .audience-editor {
  margin-top: 14px;
  padding: 14px;
  background: var(--ds-surface);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
}

.placement-cockpit .audience-head {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 12px;
  margin-bottom: 12px;
}

.placement-cockpit .audience-row {
  display: grid;
  grid-template-columns: 68px minmax(0, 1fr);
  gap: 10px;
  align-items: center;
  padding: 10px 0;
  border-top: 1px solid var(--ds-border);
}

.placement-cockpit .audience-row-block {
  align-items: flex-start;
}

.placement-cockpit .audience-label {
  color: var(--ds-text-muted);
  font-size: 12px;
  font-weight: 700;
}

.placement-cockpit .audience-options,
.placement-cockpit .audience-chip-grid,
.placement-cockpit .audience-city-list {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}

.placement-cockpit .audience-region {
  padding-top: 10px;
  border-top: 1px solid var(--ds-border);
}

.placement-cockpit .audience-region-title {
  display: flex;
  align-items: center;
  gap: 10px;
  margin-bottom: 10px;
}

.placement-cockpit .audience-provinces {
  display: grid;
  gap: 10px;
  max-height: 260px;
  overflow: auto;
  padding-right: 4px;
}

.placement-cockpit .audience-province {
  display: grid;
  grid-template-columns: 68px minmax(0, 1fr);
  gap: 10px;
  align-items: start;
}

.placement-cockpit .audience-province-name {
  padding-top: 7px;
  color: var(--ds-text);
  font-size: 12px;
  font-weight: 700;
}

.placement-cockpit .audience-error {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  padding: 10px 12px;
  background: rgba(239, 68, 68, 0.06);
  border: 1px solid rgba(239, 68, 68, 0.28);
  border-radius: var(--ds-radius-sm);
  color: var(--ds-danger);
  font-size: 12px;
}
.placement-cockpit {
  width: 100%;
  color: var(--ds-text);
  font-family: var(--ds-font);
  line-height: 1.5;
}

.placement-cockpit *,
.placement-cockpit *::before,
.placement-cockpit *::after {
  box-sizing: border-box;
}

.placement-cockpit .mono {
  font-family: var(--ds-font-mono);
  font-feature-settings: "tnum" 1, "ss01" 1;
}

.placement-cockpit .promo {
  padding-bottom: 2px;
}

.placement-cockpit .trust-row {
  display: flex;
  flex-wrap: wrap;
  gap: 14px 34px;
  margin-bottom: 24px;
}

.placement-cockpit .trust-row .t {
  display: inline-flex;
  align-items: center;
  gap: 9px;
  font-size: 15px;
  font-weight: 700;
  color: var(--ds-text);
}

.placement-cockpit .ic {
  width: 18px;
  height: 18px;
  stroke: currentColor;
  stroke-width: 1.6;
  fill: none;
  stroke-linecap: round;
  stroke-linejoin: round;
  flex: 0 0 auto;
}

.placement-cockpit .ic.sm {
  width: 15px;
  height: 15px;
}

.placement-cockpit .h-title {
  margin: 0;
  font-size: 34px;
  line-height: 1.1;
  font-weight: 800;
  color: var(--ds-text);
}

.placement-cockpit .h-title .em {
  color: var(--ds-text);
}

.placement-cockpit .h-lead {
  max-width: 640px;
  margin: 16px 0 0;
  font-size: 15px;
  line-height: 1.65;
  color: var(--ds-text-muted);
}

.placement-cockpit .metrics {
  display: grid;
  grid-template-columns: repeat(5, 1fr);
  gap: 1px;
  margin-top: 22px;
  overflow: hidden;
  background: var(--ds-border);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-md);
}

.placement-cockpit .metric {
  min-width: 0;
  padding: 15px 16px;
  background: var(--ds-surface);
}

.placement-cockpit .metric .ml {
  display: flex;
  align-items: center;
  gap: 7px;
  font-family: var(--ds-font-mono);
  font-size: 11px;
  font-weight: 600;
  color: var(--ds-text-subtle);
  text-transform: uppercase;
}

.placement-cockpit .metric .mv {
  margin-top: 7px;
  font-size: 27px;
  font-weight: 600;
  line-height: 1.1;
}

.placement-cockpit .metric .md {
  display: flex;
  align-items: center;
  gap: 5px;
  margin-top: 4px;
  font-size: 11.5px;
  color: var(--ds-text-muted);
}

.placement-cockpit .stage-flow {
  margin-top: 18px;
}

.placement-cockpit .sf-head {
  display: flex;
  align-items: baseline;
  flex-wrap: wrap;
  gap: 12px;
  margin-bottom: 12px;
}

.placement-cockpit .sf-title {
  font-size: 15px;
  font-weight: 700;
}

.placement-cockpit .sf-sub {
  font-size: 11.5px;
  color: var(--ds-text-muted);
}

.placement-cockpit .steptabs {
  display: flex;
  align-items: stretch;
  overflow: hidden;
  background: var(--ds-surface);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-md) var(--ds-radius-md) 0 0;
}

.placement-cockpit .steptab {
  position: relative;
  flex: 1;
  display: flex;
  align-items: center;
  gap: 10px;
  min-width: 0;
  padding: 13px;
  border: 0;
  border-left: 1px solid var(--ds-border);
  background: var(--ds-surface);
  color: var(--ds-text);
  cursor: pointer;
  text-align: left;
  transition: background 0.15s;
}

.placement-cockpit .steptab:first-child {
  border-left: 0;
}

.placement-cockpit .steptab:hover,
.placement-cockpit .steptab.active {
  background: var(--ds-bg-alt);
}

.placement-cockpit .steptab::after {
  content: "";
  position: absolute;
  right: 0;
  bottom: -1px;
  left: 0;
  height: 0;
  background: var(--ds-text);
}

.placement-cockpit .steptab.active::after {
  height: 2px;
}

.placement-cockpit .steptab .sn {
  display: inline-grid;
  place-items: center;
  width: 24px;
  height: 24px;
  border: 1px solid var(--ds-border-strong);
  border-radius: 50%;
  color: var(--ds-text-muted);
  font-family: var(--ds-font-mono);
  font-size: 12px;
  font-weight: 600;
  flex: 0 0 auto;
}

.placement-cockpit .steptab.done .sn,
.placement-cockpit .steptab.active .sn {
  background: var(--ds-text);
  border-color: var(--ds-text);
  color: var(--ds-text-on-ink);
}

.placement-cockpit .steptab.gate .sn {
  background: #fffaf0;
  border-color: rgba(245, 158, 11, 0.55);
  color: #b45309;
}

.placement-cockpit .steptab.active.gate .sn {
  background: var(--ds-warning);
  border-color: var(--ds-warning);
  color: var(--ds-text-on-ink);
}

.placement-cockpit .steptab.active.gate::after {
  background: var(--ds-warning);
}

.placement-cockpit .steptab .sn svg {
  width: 13px;
  height: 13px;
  stroke: currentColor;
  stroke-width: 2.2;
  fill: none;
  stroke-linecap: round;
  stroke-linejoin: round;
}

.placement-cockpit .steptab .stx {
  min-width: 0;
}

.placement-cockpit .steptab .stx b {
  display: block;
  overflow: hidden;
  font-size: 12.5px;
  font-weight: 700;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.placement-cockpit .steptab .stx i {
  display: block;
  overflow: hidden;
  margin-top: 2px;
  font-size: 10.5px;
  font-style: normal;
  color: var(--ds-text-subtle);
  text-overflow: ellipsis;
  white-space: nowrap;
}

.placement-cockpit .stage-panel {
  display: none;
  padding: 18px;
  background: var(--ds-surface);
  border: 1px solid var(--ds-border);
  border-top: 0;
  border-radius: 0 0 var(--ds-radius-md) var(--ds-radius-md);
}

.placement-cockpit .stage-panel.on {
  display: block;
}

.placement-cockpit .g2,
.placement-cockpit .g3 {
  display: grid;
  gap: 14px;
}

.placement-cockpit .g2 {
  grid-template-columns: repeat(2, minmax(0, 1fr));
}

.placement-cockpit .g3 {
  grid-template-columns: repeat(3, minmax(0, 1fr));
}

.placement-cockpit .pblock {
  padding: 14px;
  background: var(--ds-surface);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
}

.placement-cockpit .pblock .ph {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-bottom: 11px;
  color: var(--ds-text-subtle);
  font-family: var(--ds-font-mono);
  font-size: 10.5px;
  font-weight: 600;
  text-transform: uppercase;
}

.placement-cockpit .pblock .ph.mt {
  margin-top: 15px;
}

.placement-cockpit .go {
  margin-left: auto;
  color: var(--ds-text);
  font-family: var(--ds-font);
  font-size: 11.5px;
  font-weight: 600;
  text-transform: none;
  white-space: nowrap;
}

.placement-cockpit .chips {
  display: flex;
  flex-wrap: wrap;
  gap: 7px;
}

.placement-cockpit .chip,
.placement-cockpit .pill {
  display: inline-flex;
  align-items: center;
  border-radius: var(--ds-radius-pill);
  white-space: nowrap;
}

.placement-cockpit .chip {
  height: 30px;
  padding: 0 13px;
  background: var(--ds-surface);
  border: 1px solid var(--ds-border);
  color: var(--ds-text);
  font-size: 12.5px;
  font-weight: 500;
}

.placement-cockpit .chip.sel {
  background: var(--ds-text);
  border-color: var(--ds-text);
  color: var(--ds-text-on-ink);
}

.placement-cockpit .pill {
  gap: 6px;
  height: 24px;
  padding: 0 10px;
  background: var(--ds-surface);
  border: 1px solid var(--ds-border);
  color: var(--ds-text-muted);
  font-size: 11.5px;
  font-weight: 600;
}

.placement-cockpit .pill.amber {
  background: #fffaf0;
  border-color: rgba(245, 158, 11, 0.28);
  color: #b45309;
}

.placement-cockpit .pill.green {
  background: #f1faf3;
  border-color: rgba(34, 197, 94, 0.28);
  color: #15803d;
}

.placement-cockpit .pill.red {
  background: #fdf3f3;
  border-color: rgba(239, 68, 68, 0.26);
  color: #b91c1c;
}

.placement-cockpit .pill.ink {
  background: var(--ds-text);
  border-color: var(--ds-text);
  color: var(--ds-text-on-ink);
}

.placement-cockpit .optrow {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  margin-bottom: 8px;
  padding: 11px 13px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
}

.placement-cockpit .optrow:last-child {
  margin-bottom: 0;
}

.placement-cockpit .optrow.sel {
  border-color: var(--ds-text);
  box-shadow: inset 0 0 0 1px var(--ds-text);
}

/* Task 6: 可点选的 optrow（抖音号 / 视频 / 门店）—— 指针反馈 + hover 描边 */
.placement-cockpit .optrow.pickable {
  cursor: pointer;
}
.placement-cockpit .optrow.pickable:hover {
  border-color: var(--ds-border-strong);
}

.placement-cockpit .optrow .oi b {
  display: block;
  font-size: 13px;
  font-weight: 700;
}

.placement-cockpit .optrow .oi i {
  display: block;
  margin-top: 3px;
  color: var(--ds-text-muted);
  font-size: 11px;
  font-style: normal;
}

.placement-cockpit .kv {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  padding: 10px 0;
  border-bottom: 1px solid var(--ds-border);
  font-size: 12.5px;
}

.placement-cockpit .kv:last-child {
  border-bottom: 0;
}

.placement-cockpit .kv .k {
  display: flex;
  align-items: center;
  gap: 8px;
  color: var(--ds-text);
}

.placement-cockpit .callout {
  padding: 13px 15px;
  background: var(--ds-bg-alt);
  border: 1px solid var(--ds-border);
  border-left: 3px solid var(--ds-text);
  border-radius: var(--ds-radius-sm);
  color: var(--ds-text);
  font-size: 12.5px;
  line-height: 1.6;
}

.placement-cockpit .muted-copy {
  margin: 0;
  color: var(--ds-text-muted);
  font-size: 12px;
  line-height: 1.55;
}

.placement-cockpit .tbl {
  overflow: hidden;
  background: var(--ds-surface);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-md);
}

.placement-cockpit .trk {
  display: grid;
  grid-template-columns: 1.5fr 0.7fr 1.2fr 0.9fr 0.9fr;
  gap: 10px;
  align-items: center;
  padding: 11px 14px;
  border-bottom: 1px solid var(--ds-border);
  font-size: 12px;
}

.placement-cockpit .trk:last-child {
  border-bottom: 0;
}

.placement-cockpit .trk.head {
  background: var(--ds-bg-alt);
  color: var(--ds-text-muted);
  font-family: var(--ds-font-mono);
  font-size: 10.5px;
  font-weight: 600;
  text-transform: uppercase;
}

.placement-cockpit .kpis {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 1px;
  overflow: hidden;
  margin-bottom: 14px;
  background: var(--ds-border);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-md);
}

.placement-cockpit .kpi {
  padding: 16px;
  background: var(--ds-surface);
}

.placement-cockpit .kpi .kl {
  color: var(--ds-text-subtle);
  font-family: var(--ds-font-mono);
  font-size: 11px;
  font-weight: 600;
  text-transform: uppercase;
}

.placement-cockpit .kpi .kn {
  margin-top: 8px;
  font-size: 28px;
  font-weight: 600;
  line-height: 1.1;
}

.placement-cockpit .kpi .kd {
  margin-top: 5px;
  color: var(--ds-text-muted);
  font-size: 11.5px;
}

.placement-cockpit .stage-gate {
  display: flex;
  align-items: center;
  gap: 14px;
  margin-top: 14px;
  padding: 14px 16px;
  background: #fffdf7;
  border: 1px solid var(--ds-border);
  border-left: 3px solid var(--ds-warning);
  border-radius: var(--ds-radius-sm);
}

.placement-cockpit .stage-gate .lk {
  display: grid;
  place-items: center;
  width: 34px;
  height: 34px;
  background: var(--ds-surface);
  border: 1px solid rgba(245, 158, 11, 0.3);
  border-radius: 9px;
  color: #b45309;
  flex: 0 0 auto;
}

.placement-cockpit .stage-gate b {
  font-size: 13px;
}

.placement-cockpit .stage-gate p {
  margin: 2px 0 0;
  color: var(--ds-text-muted);
  font-size: 11.5px;
}

.placement-cockpit .stage-acts {
  display: flex;
  justify-content: flex-end;
  gap: 10px;
  margin-top: 14px;
}

.placement-cockpit .btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  height: 40px;
  padding: 0 18px;
  background: var(--ds-text);
  border: 1px solid var(--ds-text);
  border-radius: var(--ds-radius-sm);
  color: var(--ds-text-on-ink);
  font-family: inherit;
  font-size: 13.5px;
  font-weight: 600;
  cursor: pointer;
}

.placement-cockpit .btn.ghost {
  background: var(--ds-surface);
  border-color: var(--ds-border-strong);
  color: var(--ds-text);
}

.placement-cockpit .btn:disabled {
  opacity: 0.45;
  cursor: not-allowed;
}

.placement-cockpit .footnote {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-top: 14px;
  color: var(--ds-text-subtle);
  font-size: 11.5px;
}

.placement-cockpit .mb-14 {
  margin-bottom: 14px;
}

.placement-cockpit .mt-12 {
  margin-top: 12px;
}

.placement-cockpit .mt-14 {
  margin-top: 14px;
}

@media (max-width: 1080px) {
  .placement-cockpit .metrics,
  .placement-cockpit .g2,
  .placement-cockpit .g3,
  .placement-cockpit .kpis {
    grid-template-columns: 1fr 1fr;
  }

  .placement-cockpit .steptabs {
    flex-wrap: wrap;
  }

  .placement-cockpit .steptab {
    flex: 1 1 50%;
    border-top: 1px solid var(--ds-border);
  }

  .placement-cockpit .steptab:nth-child(-n + 2) {
    border-top: 0;
  }

  .placement-cockpit .trk {
    grid-template-columns: 1.4fr 0.8fr 1fr;
  }

  .placement-cockpit .trk span:nth-child(4),
  .placement-cockpit .trk span:nth-child(5) {
    display: none;
  }
}

/* Task 4: 授权入口按钮（套 .go 取排版，仅重置 button chrome）+ 未授权缺口提示 */
.placement-cockpit .go-btn {
  border: 0;
  background: none;
  padding: 0;
  cursor: pointer;
}
.placement-cockpit .go-btn:hover {
  text-decoration: underline;
}
.placement-cockpit .auth-gaps {
  margin-top: 8px;
  display: flex;
  flex-direction: column;
  gap: 6px;
}
.placement-cockpit .auth-gap {
  font-size: 12px;
  color: var(--ds-warning);
  background: #fffaf0;
  border: 1px solid rgba(245, 158, 11, 0.28);
  border-radius: var(--ds-radius-sm);
  padding: 8px 10px;
}

/* Task 7: 出价方式 chip 作 button（套 .chip 取视觉，补 button 缺省字体/指针） */
.placement-cockpit button.chip {
  font-family: inherit;
  cursor: pointer;
}
.placement-cockpit .bid-types {
  display: inline-flex;
  gap: 7px;
}

/* Task 7: 出价/预算数字输入 */
.placement-cockpit .num-input {
  width: 92px;
  height: 30px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
  padding: 0 8px;
  font: inherit;
}
.placement-cockpit .num-input:focus {
  outline: none;
  border-color: var(--ds-text);
}

/* Task 7: 草稿创建结果区（成功绿 / 失败红 / 未知琥珀） */
.placement-cockpit .draft-result {
  margin-top: 14px;
  border: 1px solid var(--ds-border);
  border-left: 3px solid var(--ds-success);
  border-radius: var(--ds-radius-sm);
  background: #f1faf3;
  padding: 12px 14px;
}
.placement-cockpit .draft-result.draft-failed {
  border-left-color: var(--ds-danger);
  background: #fdf3f3;
}
.placement-cockpit .draft-result.draft-unknown {
  border-left-color: var(--ds-warning);
  background: #fffaf0;
}
.placement-cockpit .draft-result b {
  display: block;
  font-size: 13px;
  margin-bottom: 8px;
}

/* Task 11: StageFour 上线后就地生命周期 */
.placement-cockpit .live-panel {
  margin-top: 14px;
  padding: 14px;
  background: var(--ds-bg-alt);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
}

.placement-cockpit .live-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  margin-bottom: 12px;
}

.placement-cockpit .live-title {
  color: var(--ds-text);
  font-size: 13px;
  font-weight: 700;
}

.placement-cockpit .life-dot {
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: var(--ds-text-subtle);
}

.placement-cockpit .life-dot.green {
  background: var(--ds-success);
}

.placement-cockpit .life-dot.amber {
  background: var(--ds-warning);
}

.placement-cockpit .life-dot.red {
  background: var(--ds-danger);
}

.placement-cockpit .live-hint {
  margin: -4px 0 12px;
  color: var(--ds-text-subtle);
  font-size: 11.5px;
  line-height: 1.45;
}

.placement-cockpit .life-reject {
  margin-bottom: 12px;
  padding: 8px 10px;
  background: var(--ds-surface);
  border: 1px solid var(--ds-border);
  border-left: 3px solid var(--ds-danger);
  border-radius: var(--ds-radius-sm);
  color: var(--ds-text);
  font-size: 12px;
  line-height: 1.5;
}

.placement-cockpit .life-pause-alert {
  display: flex;
  flex-direction: column;
  gap: 10px;
  margin-bottom: 12px;
  padding: 11px 12px;
  background: color-mix(in srgb, var(--ds-danger) 9%, var(--ds-surface));
  border: 1px solid color-mix(in srgb, var(--ds-danger) 36%, var(--ds-border));
  border-left: 3px solid var(--ds-danger);
  border-radius: var(--ds-radius-sm);
  color: var(--ds-danger);
}

.placement-cockpit .life-pause-alert-main {
  font-size: 13px;
  font-weight: 700;
  line-height: 1.45;
}

.placement-cockpit .life-pause-alert-actions {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 10px;
}

.placement-cockpit .btn.life-pause-retry {
  height: 32px;
  padding: 0 12px;
  background: var(--ds-surface);
  border-color: var(--ds-danger);
  color: var(--ds-danger);
  font-size: 12px;
}

.placement-cockpit .life-pause-backend {
  color: var(--ds-danger);
  font-size: 12px;
  font-weight: 600;
}

.placement-cockpit .live-spend {
  margin-bottom: 12px;
}

.placement-cockpit .live-spend-row {
  display: flex;
  gap: 14px;
}

.placement-cockpit .live-spend-item {
  display: flex;
  flex: 1;
  min-width: 0;
  flex-direction: column;
  gap: 3px;
}

.placement-cockpit .live-spend-label {
  color: var(--ds-text-subtle);
  font-size: 11px;
  font-weight: 600;
}

.placement-cockpit .live-spend-amount {
  color: var(--ds-text);
  font-size: 22px;
  font-weight: 700;
  line-height: 1.2;
}

.placement-cockpit .live-spend-divider {
  width: 1px;
  background: var(--ds-border-strong);
}

.placement-cockpit .live-actions {
  justify-content: flex-start;
}

.placement-cockpit .live-edit-area {
  display: flex;
  flex-direction: column;
  gap: 12px;
  margin-top: 12px;
  padding: 12px;
  background: var(--ds-surface);
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-sm);
}

.placement-cockpit .live-edit-title {
  color: var(--ds-text-muted);
  font-family: var(--ds-font-mono);
  font-size: 10.5px;
  font-weight: 600;
  text-transform: uppercase;
}

.placement-cockpit .live-edit-fields {
  display: flex;
  flex-direction: column;
  gap: 10px;
}

.placement-cockpit .live-field-row {
  display: flex;
  align-items: center;
  gap: 8px;
}

.placement-cockpit .live-field-label {
  width: 72px;
  color: var(--ds-text-muted);
  font-size: 12px;
  flex: 0 0 auto;
}

.placement-cockpit .live-field-unit {
  color: var(--ds-text-subtle);
  font-size: 12px;
}

.placement-cockpit .live-schedule-input {
  width: 148px;
  text-align: left;
}

.placement-cockpit .live-date-input {
  width: 140px;
  text-align: left;
}

.placement-cockpit .live-save {
  height: 32px;
  padding: 0 12px;
  font-size: 12px;
}

/* 上线确认 Modal.confirm 是静态方法，渲染在 body portal、逃逸 .dp-revamp 与 ConfigProvider，
   其主按钮被 geo/styles/global.css 的全局 `.ant-btn-primary { background: var(--geo-primary-gradient) !important }`
   污染成 azure 渐变。给 ok 按钮挂 dp-console-ink-btn，用 (0,2,0)+!important 反制为 ink-on-ink
   （console no-azure，design.md §12）。同 antd-overrides.css 的 .dp-auth-modal .ant-btn-primary 模式。
   注：本规则不挂 .placement-cockpit 前缀——modal portal 在 body、不在卡片树内。 */
.ant-btn-primary.dp-console-ink-btn {
  background: var(--ds-text) !important;
  background-image: none !important;
  border-color: var(--ds-text) !important;
  color: var(--ds-text-on-ink) !important;
  filter: none !important;
  box-shadow: none !important;
}

.ant-btn-primary.dp-console-ink-btn:hover,
.ant-btn-primary.dp-console-ink-btn:focus {
  background: #000000 !important;
  background-image: none !important;
  border-color: #000000 !important;
  color: var(--ds-text-on-ink) !important;
  filter: none !important;
}
/*
 * PlacementCenterFullscreen — 投放优化中心全屏页样式（复刻数据 Tab 的 scheme-E ddash 语言）
 * 视觉 source: docs/design/2026-06-23-canvas-workbench-scheme-E.html（.pdash）
 * 全部走 --ds-* token（frontend/src/styles/global-design.css 权威），不照搬设计稿字面 hex。
 * console no-azure（design.md §12）：主色 ink，禁 azure / var(--ds-accent)；强调仅
 *   --pfs-signal（gate，仿数据 Tab 的 --dv-signal）+ 状态色 green/amber/red。
 * 作用域全部以 .placement-cockpit--fs 前缀，零全局冲突；新外壳类一律 pfs- 前缀，
 *   阶段详情沿用 PlacementCenterCard.css 的 .pblock/.optrow/.chip/.kv/... 基样式 + 本文件覆写成卡片观。
 *
 * 整屏接管：本壳 position:fixed 铺满视口（top 留 app header）。fixed 要真正铺满必须挂在无
 *   CSS transform 的祖先平面下 —— 由 PlacementCenterNode 经 createPortal 投到 document.body。
 */

/* ===== shell（整屏接管）===== */
.placement-cockpit--fs {
  position: fixed;
  inset: 0;
  top: var(--ds-header-height);
  z-index: 40;
  width: auto;
  padding: 22px 32px 96px;
  overflow-y: auto;
  background: var(--ds-bg);
  color: var(--ds-text);
  --pfs-signal: #e8590c;
}
.placement-cockpit--fs::-webkit-scrollbar {
  width: 8px;
}
.placement-cockpit--fs::-webkit-scrollbar-thumb {
  background: var(--ds-border-strong);
  border-radius: 4px;
}

/* ===== board-head ===== */
.placement-cockpit--fs .pfs-board-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  margin-bottom: 6px;
}
.placement-cockpit--fs .pfs-bh-l {
  display: flex;
  align-items: center;
  gap: 10px;
  min-width: 0;
}
.placement-cockpit--fs .pfs-bh-icon {
  font-size: 18px;
  line-height: 1;
}
.placement-cockpit--fs .pfs-bh-title {
  font-size: 21px;
  font-weight: 800;
  letter-spacing: -0.02em;
}
.placement-cockpit--fs .pfs-bh-sub {
  font-size: 12px;
  color: var(--ds-text-muted);
}
.placement-cockpit--fs .pfs-safe-badge {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  height: 24px;
  padding: 0 11px;
  border-radius: var(--ds-radius-pill);
  background: var(--ds-bg-alt);
  border: 1px solid var(--ds-border);
  color: var(--ds-text);
  font-size: 11px;
  font-weight: 700;
  white-space: nowrap;
}

/* ===== filterbar ===== */
.placement-cockpit--fs .pfs-filterbar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  flex-wrap: wrap;
  margin: 16px 0 12px;
}
.placement-cockpit--fs .pfs-fb-left {
  display: flex;
  align-items: center;
  gap: 10px;
  flex-wrap: wrap;
}
.placement-cockpit--fs .pfs-fb-right {
  display: flex;
  align-items: center;
  gap: 10px;
}
.placement-cockpit--fs .pfs-fchip {
  display: inline-flex;
  align-items: center;
  height: 34px;
  padding: 0 15px;
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-pill);
  background: var(--ds-bg);
  font-size: 13px;
  font-weight: 600;
  color: var(--ds-text);
  white-space: nowrap;
}
/* filterbar 内复用的 .btn 收成 pill 34px（与 board chrome 一致） */
.placement-cockpit--fs .pfs-fb-right .btn {
  height: 34px;
  padding: 0 16px;
  border-radius: var(--ds-radius-pill);
  font-size: 13px;
}

/* ===== trust-meta ===== */
.placement-cockpit--fs .pfs-trust-meta {
  display: flex;
  align-items: center;
  gap: 10px;
  flex-wrap: wrap;
  margin-bottom: 24px;
  padding: 0 2px;
  font-size: 12px;
  color: var(--ds-text-muted);
}
.placement-cockpit--fs .pfs-tm-item {
  display: inline-flex;
  align-items: center;
  gap: 6px;
}
.placement-cockpit--fs .pfs-tm-item b {
  color: var(--ds-text);
  font-weight: 600;
}
.placement-cockpit--fs .pfs-tm-dot {
  color: var(--ds-text-subtle);
}
.placement-cockpit--fs .pfs-ss-dot {
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: var(--ds-success);
  display: inline-block;
}

/* ===== section header ===== */
.placement-cockpit--fs .pfs-sec-h {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 12px;
  margin: 0 2px 13px;
}
.placement-cockpit--fs .pfs-sh-t {
  font-size: 13px;
  font-weight: 700;
}
.placement-cockpit--fs .pfs-sh-m {
  font-size: 11px;
  color: var(--ds-text-subtle);
}

/* ===== 卡片基样式 ===== */
.placement-cockpit--fs .pfs-card {
  background: var(--ds-surface);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-lg);
  box-shadow: 0 1px 2px rgba(24, 24, 27, 0.04), 0 8px 24px -16px rgba(24, 24, 27, 0.16);
}
.placement-cockpit--fs .pfs-card-eyebrow {
  font-family: var(--ds-font-mono);
  font-size: 10px;
  font-weight: 600;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--ds-text-subtle);
}

/* ===== KPI bento ===== */
.placement-cockpit--fs .pfs-kpi-bento {
  display: grid;
  grid-template-columns: 1.25fr 2.6fr;
  gap: 16px;
  margin-bottom: 28px;
}
.placement-cockpit--fs .pfs-hero {
  display: flex;
  flex-direction: column;
  padding: 20px 22px;
}
.placement-cockpit--fs .pfs-hero-num {
  font-size: clamp(36px, 4vw, 52px);
  font-weight: 700;
  letter-spacing: -0.03em;
  line-height: 1;
  margin-top: 16px;
}
.placement-cockpit--fs .pfs-hero-sub {
  margin-top: 14px;
  font-size: 12px;
  color: var(--ds-text-muted);
}
.placement-cockpit--fs .pfs-kpi-right {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 16px;
}
.placement-cockpit--fs .pfs-kpi-card {
  padding: 14px 16px 12px;
  display: flex;
  flex-direction: column;
  min-height: 100px;
}
.placement-cockpit--fs .pfs-kc-label {
  font-size: 12px;
  color: var(--ds-text-muted);
  font-weight: 600;
  display: flex;
  align-items: center;
  gap: 6px;
}
.placement-cockpit--fs .pfs-kc-num {
  font-size: 26px;
  font-weight: 700;
  letter-spacing: -0.01em;
  margin-top: 12px;
  line-height: 1;
}
.placement-cockpit--fs .pfs-kc-ft {
  margin-top: auto;
  padding-top: 10px;
  font-size: 11px;
  color: var(--ds-text-subtle);
}
/* gate 卡：左 signal 竖条（仿数据 Tab geo-card），grid 跨整行 */
.placement-cockpit--fs .pfs-gate-card {
  grid-column: 1 / -1;
  position: relative;
  overflow: hidden;
  padding: 14px 16px;
  display: flex;
  flex-direction: column;
  gap: 5px;
  border-color: var(--ds-border-strong);
}
.placement-cockpit--fs .pfs-gate-card::before {
  content: "";
  position: absolute;
  left: 0;
  top: 0;
  bottom: 0;
  width: 3px;
  background: var(--pfs-signal);
}
.placement-cockpit--fs .pfs-gc-top {
  display: flex;
  align-items: center;
  justify-content: space-between;
}
.placement-cockpit--fs .pfs-gc-lbl {
  font-size: 12px;
  font-weight: 700;
  display: flex;
  align-items: center;
  gap: 6px;
}
.placement-cockpit--fs .pfs-gc-tag {
  font-family: var(--ds-font-mono);
  font-size: 9px;
  font-weight: 700;
  letter-spacing: 0.08em;
  color: var(--pfs-signal);
  border: 1px solid var(--pfs-signal);
  border-radius: var(--ds-radius-pill);
  padding: 1px 7px;
}
.placement-cockpit--fs .pfs-gc-num {
  font-size: 16px;
  font-weight: 800;
}
.placement-cockpit--fs .pfs-gc-sub {
  font-size: 11px;
  color: var(--ds-text-muted);
}
.placement-cockpit--fs .pfs-gc-go {
  margin-top: 4px;
}
.placement-cockpit--fs .pfs-gc-go button {
  height: 30px;
  padding: 0 14px;
  border: 1px solid var(--ds-text);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
  font-family: inherit;
  font-size: 11px;
  font-weight: 700;
  cursor: pointer;
}
.placement-cockpit--fs .pfs-gc-go button:hover {
  opacity: 0.88;
}

/* ===== 投放流程 stage rail（signature）===== */
.placement-cockpit--fs .pfs-stage-rail {
  display: grid;
  grid-template-columns: repeat(5, 1fr);
  gap: 0;
  background: var(--ds-surface);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-lg);
  padding: 6px;
  margin-bottom: 20px;
  box-shadow: 0 1px 2px rgba(24, 24, 27, 0.04);
}
.placement-cockpit--fs .pfs-srail-step {
  position: relative;
  display: flex;
  align-items: center;
  gap: 11px;
  padding: 14px 16px;
  border: 0;
  border-radius: var(--ds-radius-md);
  cursor: pointer;
  text-align: left;
  font-family: inherit;
  background: none;
  transition: background 0.15s;
}
.placement-cockpit--fs .pfs-srail-step:hover,
.placement-cockpit--fs .pfs-srail-step.active {
  background: var(--ds-bg-alt);
}
.placement-cockpit--fs .pfs-srail-step.active::after {
  content: "";
  position: absolute;
  left: 14px;
  right: 14px;
  bottom: 5px;
  height: 2px;
  border-radius: 2px;
  background: var(--ds-text);
}
.placement-cockpit--fs .pfs-srail-step:not(:last-child) .pfs-sr-dot::before {
  content: "";
  position: absolute;
  left: 34px;
  top: 16px;
  width: 100%;
  height: 2px;
  background: var(--ds-border);
  z-index: 0;
}
.placement-cockpit--fs .pfs-sr-dot {
  position: relative;
  z-index: 1;
  flex: 0 0 auto;
  width: 34px;
  height: 34px;
  border-radius: 10px;
  display: flex;
  align-items: center;
  justify-content: center;
  font-family: var(--ds-font-mono);
  font-size: 13px;
  font-weight: 700;
  border: 1.5px solid var(--ds-border-strong);
  background: var(--ds-bg);
  color: var(--ds-text-muted);
}
.placement-cockpit--fs .pfs-srail-step.done .pfs-sr-dot {
  background: var(--ds-text);
  border-color: var(--ds-text);
  color: var(--ds-text-on-ink);
}
.placement-cockpit--fs .pfs-srail-step.gate .pfs-sr-dot {
  border-color: var(--pfs-signal);
  color: var(--pfs-signal);
  background: var(--ds-bg);
}
.placement-cockpit--fs .pfs-srail-step.active .pfs-sr-dot {
  box-shadow: 0 0 0 3px rgba(24, 24, 27, 0.1);
}
.placement-cockpit--fs .pfs-sr-tx {
  min-width: 0;
}
.placement-cockpit--fs .pfs-sr-tx b {
  display: block;
  font-size: 13px;
  font-weight: 700;
  color: var(--ds-text);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.placement-cockpit--fs .pfs-sr-tx i {
  display: block;
  font-style: normal;
  font-size: 11px;
  color: var(--ds-text-subtle);
  margin-top: 2px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.placement-cockpit--fs .pfs-sr-tx i.gate-tx {
  color: var(--pfs-signal);
}

/* ===== 阶段详情：复用 PlacementCenterCard 基样式，覆写成 ddash 卡观 ===== */
.placement-cockpit--fs .stage-panel {
  display: none;
  padding: 0;
  background: none;
  border: 0;
  border-radius: 0;
}
.placement-cockpit--fs .stage-panel.on {
  display: block;
}
.placement-cockpit--fs .g2,
.placement-cockpit--fs .g3 {
  gap: 16px;
  margin-bottom: 16px;
}
.placement-cockpit--fs .pblock {
  padding: 16px 18px;
  border-radius: var(--ds-radius-lg);
  box-shadow: 0 1px 2px rgba(24, 24, 27, 0.04), 0 8px 24px -16px rgba(24, 24, 27, 0.16);
}
.placement-cockpit--fs .kpis {
  margin-bottom: 16px;
}

/* ===== 响应式 ===== */
@media (max-width: 1180px) {
  .placement-cockpit--fs .pfs-kpi-bento {
    grid-template-columns: 1fr;
  }
}
@media (max-width: 900px) {
  .placement-cockpit--fs .pfs-stage-rail {
    grid-template-columns: 1fr 1fr;
  }
  .placement-cockpit--fs .pfs-kpi-right {
    grid-template-columns: 1fr;
  }
}
.feishu-auth-node {
  width: 360px;
  overflow: hidden;
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-lg);
  background: var(--ds-surface);
  box-shadow: var(--ds-shadow-lg);
  color: var(--ds-text);
}

.feishu-auth-node__head {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: var(--ds-space-3);
  padding: var(--ds-space-5) var(--ds-space-5) var(--ds-space-4);
  border-bottom: 1px solid var(--ds-border);
}

.feishu-auth-node__brand {
  display: flex;
  min-width: 0;
  align-items: center;
  gap: var(--ds-space-3);
}

.feishu-auth-node__mark {
  display: inline-flex;
  width: 34px;
  height: 34px;
  align-items: center;
  justify-content: center;
  flex: 0 0 auto;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-md);
  background: var(--ds-bg);
}

.feishu-auth-node h3 {
  margin: 0;
  color: var(--ds-text);
  font-size: 16px;
  line-height: 1.25;
  font-weight: 850;
}

.feishu-auth-node p {
  margin: 4px 0 0;
  max-width: 240px;
  overflow: hidden;
  color: var(--ds-text-muted);
  font-size: 12px;
  line-height: 1.35;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.feishu-auth-node__icon-btn,
.feishu-auth-node__primary,
.feishu-auth-node__secondary {
  border: 1px solid var(--ds-border);
  background: var(--ds-bg);
  color: var(--ds-text);
  cursor: pointer;
}

.feishu-auth-node__icon-btn {
  display: inline-flex;
  width: 30px;
  height: 30px;
  align-items: center;
  justify-content: center;
  border-radius: var(--ds-radius-sm);
}

.feishu-auth-node__body {
  display: grid;
  min-height: 252px;
  place-items: center;
  padding: var(--ds-space-5);
  background:
    linear-gradient(180deg, color-mix(in srgb, var(--ds-text) 3%, transparent), transparent 38%),
    var(--ds-bg);
}

.feishu-auth-node__loading,
.feishu-auth-node__error,
.feishu-auth-node__bound {
  display: grid;
  justify-items: center;
  gap: var(--ds-space-3);
  color: var(--ds-text-muted);
  font-size: 13px;
  text-align: center;
}

.feishu-auth-node__spin {
  animation: feishu-auth-spin 0.8s linear infinite;
}

.feishu-auth-node__qr {
  display: inline-flex;
  padding: var(--ds-space-3);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-lg);
  background: #fff;
  box-shadow: var(--ds-shadow-sm);
}

.feishu-auth-node__status {
  display: inline-flex;
  align-items: center;
  gap: var(--ds-space-2);
  margin-top: var(--ds-space-4);
  color: var(--ds-text-muted);
  font-size: 12px;
}

.feishu-auth-node__bound {
  color: var(--ds-text);
}

.feishu-auth-node__bound svg {
  color: var(--ds-success);
}

.feishu-auth-node__bound strong,
.feishu-auth-node__error strong {
  color: var(--ds-text);
  font-size: 16px;
}

.feishu-auth-node__bound span {
  max-width: 250px;
  color: var(--ds-text-muted);
  line-height: 1.55;
}

.feishu-auth-node__actions {
  display: flex;
  gap: var(--ds-space-2);
  padding: var(--ds-space-4) var(--ds-space-5) var(--ds-space-5);
  background: var(--ds-surface);
}

.feishu-auth-node__primary,
.feishu-auth-node__secondary {
  display: inline-flex;
  height: 34px;
  align-items: center;
  justify-content: center;
  gap: var(--ds-space-2);
  border-radius: var(--ds-radius-md);
  font-size: 13px;
  font-weight: 700;
}

.feishu-auth-node__primary {
  flex: 1;
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
}

.feishu-auth-node__secondary {
  width: 76px;
}

.feishu-auth-node__icon-btn:hover,
.feishu-auth-node__secondary:hover {
  border-color: var(--ds-border-strong);
  background: var(--ds-bg-alt);
}

@keyframes feishu-auth-spin {
  to {
    transform: rotate(360deg);
  }
}
._picker_1od85_1 {
  height: 100%;
  min-height: 0;
  display: flex;
  flex-direction: column;
  border-right: 1px solid var(--ds-border);
  background: var(--ds-bg-alt);
  color: var(--ds-text);
  font-family: var(--ds-font);
}

._head_1od85_12 {
  flex-shrink: 0;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--ds-space-3);
  padding: 15px 14px 11px;
}

._head_1od85_12 h2 {
  margin: 0;
  font-size: 13px;
  font-weight: 800;
  letter-spacing: 0;
}

._head_1od85_12 span {
  font-family: var(--ds-font-mono);
  font-size: 11px;
  color: var(--ds-text-muted);
}

._list_1od85_34 {
  flex: 1;
  min-height: 0;
  overflow-y: auto;
  padding: 0 10px 14px;
}

._list_1od85_34::-webkit-scrollbar {
  width: 0;
}

._row_1od85_45 {
  display: grid;
  grid-template-columns: 34px minmax(0, 1fr) 18px;
  align-items: center;
  gap: 11px;
  margin-bottom: 3px;
  padding: 9px 10px;
  border: 1.5px solid transparent;
  border-radius: var(--ds-radius-md);
  background: none;
  cursor: pointer;
}

._row_1od85_45:hover {
  background: var(--ds-bg);
}

._row_1od85_45:focus-visible {
  outline: none;
  box-shadow: var(--ds-focus-ring);
}

._row_1od85_45[data-selected='true'] {
  border-color: var(--ds-text);
  background: var(--ds-bg);
}

._avatar_1od85_72 {
  width: 34px;
  height: 34px;
  display: grid;
  place-items: center;
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg-deep);
  color: var(--ds-text);
  font-size: 14px;
  font-weight: 800;
}

._copy_1od85_84 {
  min-width: 0;
  display: flex;
  flex-direction: column;
  gap: 1px;
}

._copy_1od85_84 b,
._copy_1od85_84 span,
._copy_1od85_84 i {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

._copy_1od85_84 b {
  font-size: 13px;
  font-weight: 800;
}

._copy_1od85_84 span {
  color: var(--ds-text-muted);
  font-size: 11.5px;
  font-weight: 600;
}

._copy_1od85_84 i {
  color: var(--ds-text-subtle);
  font-family: var(--ds-font-mono);
  font-size: 10.5px;
  font-style: normal;
}

._check_1od85_117 {
  width: 18px;
  height: 18px;
  display: grid;
  place-items: center;
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-sm);
  color: var(--ds-text-on-ink);
  background: var(--ds-bg);
  font-size: 12px;
  font-weight: 900;
}

._row_1od85_45[data-selected='true'] ._check_1od85_117 {
  border-color: var(--ds-text);
  background: var(--ds-text);
}
._view_n81de_1 {
  height: 100%;
  min-height: 420px;
  display: grid;
  grid-template-rows: auto minmax(0, 1fr) auto;
  background: var(--ds-bg);
  color: var(--ds-text);
  font-family: var(--ds-font);
}

._header_n81de_11 {
  padding: var(--ds-space-6) var(--ds-space-6) var(--ds-space-5);
  border-bottom: 1px solid var(--ds-border);
  background: var(--ds-surface);
}

._eyebrow_n81de_17 {
  display: inline-flex;
  align-items: center;
  min-height: 24px;
  padding: 0 var(--ds-space-3);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-pill);
  background: var(--ds-bg-alt);
  color: var(--ds-text-muted);
  font-size: 11px;
  font-weight: 800;
}

._header_n81de_11 h2 {
  margin: var(--ds-space-4) 0 0;
  font-size: 22px;
  font-weight: 850;
  letter-spacing: 0;
}

._header_n81de_11 p {
  max-width: 480px;
  margin: var(--ds-space-2) 0 0;
  color: var(--ds-text-muted);
  font-size: 13px;
  line-height: 1.7;
}

._queue_n81de_45 {
  min-height: 0;
  overflow-y: auto;
  padding: var(--ds-space-5) var(--ds-space-6);
}

._queue_n81de_45::-webkit-scrollbar {
  width: 0;
}

._row_n81de_55 {
  display: grid;
  grid-template-columns: 44px 42px minmax(0, 1fr) auto;
  align-items: center;
  gap: var(--ds-space-3);
  margin-bottom: var(--ds-space-3);
  padding: var(--ds-space-4);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-lg);
  background: var(--ds-bg-alt);
}

._row_n81de_55[data-status='current'] {
  border-color: var(--ds-text);
  background: var(--ds-surface);
}

._row_n81de_55[data-status='done'] {
  border-color: color-mix(in srgb, var(--ds-success) 36%, var(--ds-border));
}

._row_n81de_55[data-status='error'] {
  border-color: color-mix(in srgb, var(--ds-danger) 46%, var(--ds-border));
}

._order_n81de_80 {
  color: var(--ds-text-subtle);
  font-family: var(--ds-font-mono);
  font-size: 12px;
  font-weight: 800;
}

._avatar_n81de_87 {
  width: 42px;
  height: 42px;
  display: grid;
  place-items: center;
  border-radius: var(--ds-radius-md);
  background: var(--ds-bg-deep);
  font-size: 15px;
  font-weight: 900;
}

._copy_n81de_98 {
  min-width: 0;
  display: grid;
  gap: var(--ds-space-1);
}

._copy_n81de_98 b,
._copy_n81de_98 span,
._copy_n81de_98 i,
._copy_n81de_98 p {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

._copy_n81de_98 b {
  font-size: 14px;
  font-weight: 850;
}

._copy_n81de_98 span {
  color: var(--ds-text-muted);
  font-size: 12px;
  font-weight: 650;
}

._copy_n81de_98 i {
  color: var(--ds-text-subtle);
  font-family: var(--ds-font-mono);
  font-size: 11px;
  font-style: normal;
}

._copy_n81de_98 p {
  margin: var(--ds-space-1) 0 0;
  color: var(--ds-text-muted);
  font-size: 12px;
  line-height: 1.4;
}

._row_n81de_55[data-status='current'] ._copy_n81de_98 p {
  color: var(--ds-text);
  font-weight: 700;
}

._row_n81de_55[data-status='error'] ._copy_n81de_98 p {
  color: var(--ds-danger);
  font-weight: 700;
}

._status_n81de_148 {
  min-width: 78px;
  display: inline-flex;
  align-items: center;
  justify-content: flex-end;
  gap: var(--ds-space-2);
  color: var(--ds-text-muted);
  font-size: 12px;
  font-weight: 800;
}

._statusMark_n81de_159 {
  width: 24px;
  height: 24px;
  display: grid;
  place-items: center;
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-pill);
  background: var(--ds-surface);
  color: var(--ds-text-subtle);
  font-size: 12px;
  font-weight: 900;
}

._statusMark_n81de_159[data-status='done'] {
  border-color: var(--ds-success);
  background: var(--ds-success);
  color: var(--ds-text-on-ink);
}

._statusMark_n81de_159[data-status='current'] {
  border-color: var(--ds-text);
  color: var(--ds-text);
}

._statusMark_n81de_159[data-status='error'] {
  border-color: var(--ds-danger);
  background: var(--ds-danger);
  color: var(--ds-text-on-ink);
}

._spinner_n81de_189 {
  width: 12px;
  height: 12px;
  border: 2px solid var(--ds-border);
  border-top-color: var(--ds-text);
  border-radius: var(--ds-radius-pill);
  animation: _bevSpin_n81de_1 0.85s linear infinite;
}

._footer_n81de_198 {
  display: flex;
  align-items: center;
  gap: var(--ds-space-5);
  padding: var(--ds-space-4) var(--ds-space-6);
  border-top: 1px solid var(--ds-border);
  background: var(--ds-surface);
}

._progressBlock_n81de_207 {
  flex: 1;
  min-width: 0;
}

._progressMeta_n81de_212 {
  display: flex;
  align-items: baseline;
  gap: var(--ds-space-2);
  margin-bottom: var(--ds-space-2);
}

._progressMeta_n81de_212 span {
  font-family: var(--ds-font-mono);
  font-size: 14px;
  font-weight: 850;
}

._progressMeta_n81de_212 b {
  color: var(--ds-text-muted);
  font-size: 12px;
  font-weight: 750;
}

._progressTrack_n81de_231 {
  height: 8px;
  overflow: hidden;
  border-radius: var(--ds-radius-pill);
  background: var(--ds-bg-deep);
}

._progressTrack_n81de_231 span {
  display: block;
  height: 100%;
  border-radius: inherit;
  background: var(--ds-text);
  transition: width 0.2s ease;
}

._primaryAction_n81de_246,
._secondaryAction_n81de_247 {
  flex-shrink: 0;
  min-height: 36px;
  padding: 0 var(--ds-space-4);
  border-radius: var(--ds-radius-sm);
  cursor: pointer;
  font: inherit;
  font-size: 13px;
  font-weight: 850;
}

._primaryAction_n81de_246 {
  border: 0;
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
}

._secondaryAction_n81de_247 {
  border: 1px solid var(--ds-border-strong);
  background: var(--ds-surface);
  color: var(--ds-text-muted);
}

._primaryAction_n81de_246:hover {
  box-shadow: var(--ds-shadow-cta-primary);
}

._secondaryAction_n81de_247:hover {
  border-color: var(--ds-text);
  color: var(--ds-text);
}

._primaryAction_n81de_246:focus-visible,
._secondaryAction_n81de_247:focus-visible {
  outline: none;
  box-shadow: var(--ds-focus-ring);
}

@keyframes _bevSpin_n81de_1 {
  to {
    transform: rotate(360deg);
  }
}

@media (max-width: 720px) {
  ._header_n81de_11,
  ._queue_n81de_45,
  ._footer_n81de_198 {
    padding-left: var(--ds-space-4);
    padding-right: var(--ds-space-4);
  }

  ._row_n81de_55 {
    grid-template-columns: 36px minmax(0, 1fr);
  }

  ._order_n81de_80 {
    display: none;
  }

  ._avatar_n81de_87 {
    width: 36px;
    height: 36px;
  }

  ._status_n81de_148 {
    grid-column: 2;
    justify-content: flex-start;
  }

  ._footer_n81de_198 {
    align-items: stretch;
    flex-direction: column;
  }

  ._primaryAction_n81de_246,
  ._secondaryAction_n81de_247 {
    width: 100%;
  }
}
._pick_nv76d_1 {
  height: 100%;
  min-height: 0;
  display: flex;
  flex-direction: column;
  border-right: 1px solid var(--ds-border);
  background: var(--ds-bg-alt);
  color: var(--ds-text);
  font-family: var(--ds-font);
}

._pickTop_nv76d_12 {
  flex-shrink: 0;
  padding: 15px 14px 11px;
}

._seg_nv76d_17 {
  display: flex;
  gap: 2px;
  padding: 3px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-md);
  background: var(--ds-bg);
}

._segButton_nv76d_26 {
  flex: 1;
  min-width: 0;
  border: 0;
  border-radius: 7px;
  background: none;
  color: var(--ds-text-muted);
  cursor: pointer;
  font: inherit;
  font-size: 13px;
  font-weight: 600;
  padding: 7px 0;
}

._segButton_nv76d_26:hover {
  color: var(--ds-text);
}

._segButton_nv76d_26:focus-visible,
._pitem_nv76d_45:focus-visible {
  outline: none;
  box-shadow: var(--ds-focus-ring);
}

._segButton_nv76d_26._on_nv76d_50 {
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
}

._n_nv76d_55 {
  margin-left: 4px;
  font-family: var(--ds-font-mono);
  font-size: 11px;
  opacity: 0.72;
}

._pickList_nv76d_62 {
  flex: 1;
  min-height: 0;
  overflow-y: auto;
  padding: 0 10px 14px;
}

._pickList_nv76d_62::-webkit-scrollbar {
  width: 0;
}

._pitem_nv76d_45 {
  width: 100%;
  display: flex;
  align-items: center;
  gap: 11px;
  margin-bottom: 3px;
  padding: 8px;
  border: 1.5px solid transparent;
  border-radius: var(--ds-radius-md);
  background: none;
  color: inherit;
  cursor: pointer;
  text-align: left;
  font: inherit;
}

._pitem_nv76d_45:hover {
  background: var(--ds-bg);
}

._pitem_nv76d_45._on_nv76d_50 {
  background: var(--ds-bg);
  border-color: var(--ds-text);
}

._thumb_nv76d_98 {
  width: 46px;
  height: 60px;
  flex-shrink: 0;
  display: grid;
  place-items: center;
  overflow: hidden;
  border-radius: 7px;
  background: linear-gradient(145deg, var(--ds-bg-deep), var(--ds-border-strong));
  color: var(--ds-text);
  background-size: cover;
  background-position: center;
}

._pitemTx_nv76d_112 {
  flex: 1;
  min-width: 0;
}

._pitemTx_nv76d_112 b {
  display: -webkit-box;
  overflow: hidden;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 2;
  font-size: 12.5px;
  font-weight: 600;
  line-height: 1.35;
}

._pitemTx_nv76d_112 span {
  display: block;
  margin-top: 4px;
  color: var(--ds-text-subtle);
  font-size: 11px;
}

._placeholder_nv76d_134 {
  min-height: 240px;
  display: grid;
  place-items: center;
  padding: var(--ds-space-5);
  color: var(--ds-text-subtle);
  font-size: 13px;
  line-height: 1.6;
  text-align: center;
}
._detailInner_cca2k_1 {
  padding: 26px 32px 36px;
  color: var(--ds-text);
  font-family: var(--ds-font);
}

._edit_cca2k_7 {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(300px, 372px);
  gap: var(--ds-space-6);
  align-items: start;
}

._prev_cca2k_14 {
  width: 100%;
  max-width: 248px;
  margin: 0 auto;
}

._prevMedia_cca2k_20 {
  width: 100%;
  border: 0;
  padding: 0;
  aspect-ratio: 9 / 16;
  display: grid;
  place-items: center;
  overflow: hidden;
  border-radius: var(--ds-radius-lg);
  background: linear-gradient(145deg, var(--ds-bg-deep), var(--ds-border-strong));
  background-position: center;
  background-size: cover;
  color: var(--ds-text);
  cursor: pointer;
}

._prevVideo_cca2k_36 {
  width: 100%;
  aspect-ratio: 9 / 16;
  display: block;
  overflow: hidden;
  border: 0;
  border-radius: var(--ds-radius-lg);
  background: var(--ds-bg-deep);
  object-fit: cover;
}

._play_cca2k_47 {
  width: 42px;
  height: 42px;
  display: grid;
  place-items: center;
  border-radius: 50%;
  background: rgba(255, 255, 255, 0.92);
  color: var(--ds-text);
}

._prevLab_cca2k_57 {
  margin-top: 13px;
  color: var(--ds-text-muted);
  font-size: 11px;
  font-weight: 700;
}

._coverRow_cca2k_64 {
  display: flex;
  gap: var(--ds-space-2);
  margin-top: 9px;
}

._cover_cca2k_64,
._coverAdd_cca2k_71 {
  width: 44px;
  height: 57px;
  flex-shrink: 0;
  border-radius: 7px;
}

._cover_cca2k_64 {
  border: 2px solid var(--ds-text);
  background: var(--ds-bg-deep);
  background-position: center;
  background-size: cover;
}

._coverAdd_cca2k_71 {
  display: grid;
  place-items: center;
  border: 1.5px dashed var(--ds-border-strong);
  color: var(--ds-text-subtle);
  background: var(--ds-bg);
  font-size: 11px;
  font-weight: 600;
  cursor: pointer;
  padding: 0;
}

._coverAdd_cca2k_71:disabled {
  cursor: not-allowed;
  opacity: 0.5;
}

._coverPicker_cca2k_102 {
  margin-top: 12px;
}

._coverPickerVideo_cca2k_106 {
  width: 100%;
  aspect-ratio: 9 / 16;
  display: block;
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg-deep);
  object-fit: cover;
}

._coverPicker_cca2k_102 input[type='range'] {
  width: 100%;
  margin-top: 8px;
}

._coverPickerActions_cca2k_120 {
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: 8px;
  margin-top: 6px;
  color: var(--ds-text-muted);
  font-size: 11px;
}

._coverPickerActions_cca2k_120 button {
  min-height: 26px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg);
  color: var(--ds-text);
  font: inherit;
  font-size: 11px;
  cursor: pointer;
  padding: 3px 9px;
}

._form_cca2k_142 {
  min-width: 0;
}

._block_cca2k_146 {
  margin-bottom: 18px;
}

._block_cca2k_146 label {
  display: block;
  margin-bottom: 8px;
  color: var(--ds-text);
  font-size: 12px;
  font-weight: 700;
}

._count_cca2k_158 {
  float: right;
  color: var(--ds-text-subtle);
  font-family: var(--ds-font-mono);
  font-size: 10px;
  font-weight: 500;
}

._input_cca2k_166,
._textarea_cca2k_167 {
  width: 100%;
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-sm);
  padding: 9px 11px;
  outline: none;
  color: var(--ds-text);
  font: inherit;
  font-size: 13px;
}

._textarea_cca2k_167 {
  min-height: 78px;
  resize: none;
}

._input_cca2k_166:focus,
._textarea_cca2k_167:focus {
  border-color: var(--ds-text);
  box-shadow: 0 0 0 3px rgba(24, 24, 27, 0.06);
}

._input_cca2k_166:disabled,
._textarea_cca2k_167:disabled {
  background: var(--ds-bg-alt);
  color: var(--ds-text-subtle);
  cursor: not-allowed;
}

._topics_cca2k_196 {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
}

._topic_cca2k_196,
._topicAdd_cca2k_203 {
  min-height: 24px;
  display: inline-flex;
  align-items: center;
  gap: 5px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-pill);
  background: var(--ds-bg-alt);
  color: var(--ds-text-muted);
  font: inherit;
  font-size: 11px;
  font-weight: 600;
  padding: 3px 10px;
}

._topicRemove_cca2k_218,
._topicAdd_cca2k_203 {
  cursor: pointer;
}

._topicRemove_cca2k_218 {
  border: 0;
  background: none;
  color: var(--ds-text-subtle);
  font: inherit;
  line-height: 1;
  padding: 0;
}

._topicRemove_cca2k_218:hover,
._topicAdd_cca2k_203:hover {
  color: var(--ds-text);
}

._topicAdd_cca2k_203 {
  border-style: dashed;
}

._topicEditor_cca2k_241 {
  min-height: 24px;
  display: inline-flex;
  align-items: center;
  gap: 4px;
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-pill);
  background: var(--ds-bg);
  padding: 2px 6px 2px 9px;
}

._topicInput_cca2k_252 {
  width: 92px;
  min-width: 0;
  border: 0;
  outline: none;
  background: transparent;
  color: var(--ds-text);
  font: inherit;
  font-size: 11px;
  font-weight: 600;
}

._topicIconButton_cca2k_264 {
  width: 18px;
  height: 18px;
  display: grid;
  place-items: center;
  border: 0;
  border-radius: 50%;
  background: var(--ds-bg-alt);
  color: var(--ds-text-muted);
  cursor: pointer;
  padding: 0;
}

._topicIconButton_cca2k_264:hover {
  color: var(--ds-text);
}

._group_cca2k_281 {
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-lg);
  margin-top: 6px;
  padding: 2px 14px;
}

._group_cca2k_281[aria-disabled='true'] {
  color: var(--ds-text-muted);
}

._opt_cca2k_292 {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--ds-space-3);
  padding: 12px 0;
}

._opt_cca2k_292 + ._opt_cca2k_292 {
  border-top: 1px solid var(--ds-border);
}

._optLeft_cca2k_304 b {
  color: var(--ds-text);
  font-size: 13px;
  font-weight: 600;
}

._optLeft_cca2k_304 span,
._soon_cca2k_311 {
  display: block;
  margin-top: 1px;
  color: var(--ds-text-subtle);
  font-size: 11px;
}

._soon_cca2k_311 {
  flex-shrink: 0;
  margin-top: 0;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-pill);
  padding: 2px 8px;
}

@media (max-width: 880px) {
  ._detailInner_cca2k_1 {
    padding: var(--ds-space-5);
  }

  ._edit_cca2k_7 {
    grid-template-columns: 1fr;
  }

  ._prev_cca2k_14 {
    max-width: 248px;
  }
}
._page_1p6x1_1 {
  position: fixed;
  top: var(--ds-header-height);
  left: 0;
  right: 0;
  bottom: 0;
  z-index: 70;
  display: flex;
  flex-direction: column;
  background: var(--ds-bg);
  color: var(--ds-text);
  font-family: var(--ds-font);
  animation: _bdFade_1p6x1_1 0.22s ease;
}

._head_1p6x1_16 {
  flex-shrink: 0;
  height: 60px;
  display: flex;
  align-items: center;
  gap: var(--ds-space-4);
  padding: 0 22px;
  border-bottom: 1px solid var(--ds-border);
  background: var(--ds-surface);
}

._back_1p6x1_27 {
  display: inline-flex;
  align-items: center;
  gap: var(--ds-space-2);
  min-height: 32px;
  padding: 0;
  border: 0;
  background: none;
  color: var(--ds-text-muted);
  cursor: pointer;
  font: inherit;
  font-size: 13px;
  font-weight: 650;
}

._back_1p6x1_27:hover {
  color: var(--ds-text);
}

._back_1p6x1_27:focus-visible,
._close_1p6x1_47:focus-visible,
._publishButton_1p6x1_48:focus-visible {
  outline: none;
  box-shadow: var(--ds-focus-ring);
}

._title_1p6x1_53 {
  flex-shrink: 0;
  font-size: 15px;
  font-weight: 850;
}

._meta_1p6x1_59 {
  min-width: 0;
  overflow: hidden;
  color: var(--ds-text-muted);
  font-size: 12px;
  font-weight: 650;
  text-overflow: ellipsis;
  white-space: nowrap;
}

._close_1p6x1_47 {
  width: 32px;
  height: 32px;
  margin-left: auto;
  border: 0;
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg-alt);
  color: var(--ds-text-muted);
  cursor: pointer;
  display: grid;
  place-items: center;
}

._close_1p6x1_47:hover {
  background: var(--ds-bg-deep);
  color: var(--ds-text);
}

._body_1p6x1_87 {
  flex: 1;
  min-height: 0;
  overflow: hidden;
  background: var(--ds-bg);
}

._split_1p6x1_94 {
  height: 100%;
  min-height: 0;
  display: grid;
  grid-template-columns: 292px 300px minmax(0, 1fr);
}

._detailPane_1p6x1_101 {
  min-width: 0;
  min-height: 0;
  overflow-y: auto;
}

._detailPane_1p6x1_101::-webkit-scrollbar {
  width: 0;
}

._detailEmpty_1p6x1_111 {
  height: 100%;
  min-height: 360px;
  display: grid;
  place-items: center;
  padding: var(--ds-space-6);
  color: var(--ds-text-subtle);
  font-size: 13px;
  line-height: 1.6;
  text-align: center;
}

._foot_1p6x1_123 {
  flex-shrink: 0;
  min-height: 61px;
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: var(--ds-space-3);
  padding: 14px 24px;
  border-top: 1px solid var(--ds-border);
  background: var(--ds-surface);
}

._footMeta_1p6x1_135 {
  min-width: 0;
  flex: 1;
  overflow: hidden;
  color: var(--ds-text-muted);
  font-size: 12px;
  font-weight: 650;
  text-overflow: ellipsis;
  white-space: nowrap;
}

._saveError_1p6x1_146 {
  max-width: 360px;
  color: #be123c;
  font-size: 12px;
  font-weight: 700;
}

._publishButton_1p6x1_48 {
  min-height: 36px;
  padding: 0 var(--ds-space-4);
  border: 0;
  border-radius: var(--ds-radius-sm);
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
  cursor: pointer;
  font: inherit;
  font-size: 13px;
  font-weight: 850;
}

._publishButton_1p6x1_48:hover:not(:disabled) {
  box-shadow: var(--ds-shadow-cta-primary);
}

._publishButton_1p6x1_48:disabled {
  background: var(--ds-border-strong);
  color: var(--ds-text-subtle);
  cursor: not-allowed;
}

@keyframes _bdFade_1p6x1_1 {
  from {
    opacity: 0;
  }

  to {
    opacity: 1;
  }
}

@media (max-width: 980px) {
  ._split_1p6x1_94 {
    grid-template-columns: minmax(0, 1fr);
  }

  ._foot_1p6x1_123 {
    align-items: stretch;
    flex-direction: column;
  }

  ._publishButton_1p6x1_48 {
    width: 100%;
  }
}
.mon-dash,
.mon-dash *,
.mon-dash *::before,
.mon-dash *::after {
  box-sizing: border-box;
}

.mon-dash {
  display: flex;
  flex-direction: column;
  gap: var(--ds-space-4);
  height: 100%;
  min-height: 0;
  overflow-y: auto;
  padding: var(--ds-space-5);
  background: var(--ds-bg);
  color: var(--ds-text);
  font-family: var(--ds-font);
}

.mon-sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}

/* ---------- 方案 C 指挥条（Task 1） ---------- */
.mon-cmdbar {
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: var(--ds-space-5);
  flex: none;
}

.mon-cmdbar__intro {
  display: flex;
  flex-direction: column;
  min-width: 0;
}

.mon-cmdbar__title {
  margin: var(--ds-space-2) 0 var(--ds-space-1);
  color: var(--ds-text);
  font-size: 30px;
  font-weight: 600;
  line-height: 1.05;
  letter-spacing: -0.02em;
}

.mon-cmdbar__tagline {
  margin: 0;
  max-width: 44ch;
  color: var(--ds-text-muted);
  font-size: 14px;
  font-weight: 500;
  line-height: 1.5;
}

.mon-cmdbar__status {
  display: flex;
  flex-wrap: wrap;
  gap: var(--ds-space-2) var(--ds-space-4);
  margin-top: var(--ds-space-4);
}

.mon-cmdbar__si {
  display: flex;
  align-items: center;
  gap: var(--ds-space-2);
  font-size: 12.5px;
  color: var(--ds-text-muted);
}

.mon-cmdbar__si-k {
  color: var(--ds-text-subtle);
}

.mon-cmdbar__si-v {
  color: var(--ds-text);
  font-family: var(--ds-font-mono);
  font-weight: 500;
  font-variant-numeric: tabular-nums lining-nums;
}

.mon-cmdbar__si-ok {
  width: 6px;
  height: 6px;
  border-radius: var(--ds-radius-pill);
  background: var(--ds-success);
  flex: none;
}

.mon-cmdbar__actions {
  display: flex;
  align-items: center;
  gap: var(--ds-space-2);
  flex: none;
}

.mon-cmdbar__seg {
  display: inline-flex;
  height: 38px;
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-md);
  overflow: hidden;
}

.mon-cmdbar__seg-btn {
  all: unset;
  box-sizing: border-box;
  cursor: pointer;
  display: flex;
  align-items: center;
  gap: var(--ds-space-1);
  padding: 0 var(--ds-space-4);
  font-family: var(--ds-font);
  font-size: 13px;
  font-weight: 500;
  color: var(--ds-text-muted);
  border-right: 1px solid var(--ds-border);
}

.mon-cmdbar__seg-btn:last-child {
  border-right: 0;
}

.mon-cmdbar__seg-btn:hover:not(.mon-cmdbar__seg-btn--active):not(:disabled) {
  background: var(--ds-bg-alt);
}

.mon-cmdbar__seg-btn--active {
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
}

.mon-cmdbar__seg-btn:disabled {
  cursor: not-allowed;
  opacity: 0.5;
}

.mon-cmdbar__seg-btn:focus-visible {
  outline: none;
  box-shadow: var(--ds-focus-ring);
}

.mon-btn {
  box-sizing: border-box;
  height: 38px;
  padding: 0 var(--ds-space-4);
  border-radius: var(--ds-radius-md);
  border: 1px solid transparent;
  font-family: var(--ds-font);
  font-size: 13.5px;
  font-weight: 600;
  display: inline-flex;
  align-items: center;
  gap: var(--ds-space-2);
  cursor: pointer;
  transition: background-color 0.15s ease;
}

.mon-btn:disabled {
  cursor: not-allowed;
  opacity: 0.5;
}

.mon-btn:focus-visible {
  outline: none;
  box-shadow: var(--ds-focus-ring);
}

.mon-btn--ink {
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
}

.mon-btn--ghost {
  background: var(--ds-bg);
  border-color: var(--ds-border-strong);
  color: var(--ds-text);
}

.mon-btn--ghost:hover:not(:disabled) {
  background: var(--ds-bg-alt);
}

.mon-cmdbar__alert-dot {
  width: 6px;
  height: 6px;
  border-radius: var(--ds-radius-pill);
  background: var(--ds-border-strong);
  flex: none;
}

.mon-cmdbar__alert--active .mon-cmdbar__alert-dot {
  background: var(--ds-warning);
}

.mon-cmdbar__alert-count {
  font-family: var(--ds-font-mono);
  font-weight: 600;
  margin-left: var(--ds-space-1);
  font-variant-numeric: tabular-nums lining-nums;
}

.mon-jumpbar {
  display: flex;
  align-items: center;
  gap: var(--ds-space-2);
  margin-bottom: var(--ds-space-6);
  flex-shrink: 0;
}

.mon-jumpbar__label {
  font-family: var(--ds-font-mono);
  font-size: 11px;
  letter-spacing: 0.06em;
  color: var(--ds-text-subtle);
  margin-right: var(--ds-space-1);
}

.mon-jumpbar__link {
  display: inline-flex;
  align-items: center;
  gap: var(--ds-space-2);
  height: 32px;
  padding: 0 var(--ds-space-4);
  border-radius: var(--ds-radius-pill);
  border: 1px solid var(--ds-border);
  background: var(--ds-bg);
  font-family: var(--ds-font);
  font-size: 13px;
  font-weight: 500;
  color: var(--ds-text-muted);
  text-decoration: none;
}

.mon-jumpbar__num {
  font-family: var(--ds-font-mono);
  font-size: 11px;
  color: var(--ds-text-subtle);
}

.mon-jumpbar__link:hover {
  background: var(--ds-bg-alt);
  color: var(--ds-text);
}

.mon-jumpbar__link--active {
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
  border-color: transparent;
}

.mon-jumpbar__link--active .mon-jumpbar__num {
  color: var(--ds-text-on-ink);
  opacity: 0.5;
}

.mon-command-bar {
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: var(--ds-space-5);
  padding: var(--ds-space-1) var(--ds-space-1) var(--ds-space-2);
}

.mon-command-bar__intro {
  display: grid;
  gap: var(--ds-space-2);
  min-width: 0;
}

.mon-dash__tag {
  width: fit-content;
  height: 24px;
  display: inline-grid;
  place-items: center;
  padding: 0 var(--ds-space-3);
  border: 1px solid var(--ds-text);
  border-radius: var(--ds-radius-pill);
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
  font-size: 11px;
  font-weight: 800;
  line-height: 1;
  letter-spacing: 0;
}

.mon-dash__title {
  margin: 0;
  color: var(--ds-text);
  font-size: 31px;
  font-weight: 800;
  line-height: 34px;
  letter-spacing: 0;
}

.mon-dash__tagline {
  margin: 0;
  color: var(--ds-text-muted);
  font-size: 14px;
  font-weight: 500;
  line-height: 22px;
  letter-spacing: 0;
}

.mon-command-bar__status {
  display: flex;
  align-items: center;
  gap: var(--ds-space-2);
  min-width: 0;
}

.mon-command-bar__updated,
.mon-command-bar__count {
  display: inline-grid;
  min-height: 36px;
  align-items: center;
  padding: 0 var(--ds-space-3);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg-alt);
  color: var(--ds-text-muted);
  font-size: 12px;
  font-weight: 700;
  line-height: 18px;
  letter-spacing: 0;
  white-space: nowrap;
}

.mon-command-bar__count {
  grid-template-columns: auto auto;
  gap: var(--ds-space-2);
}

.mon-command-bar__count strong {
  color: var(--ds-text);
  font-family: var(--ds-font-mono);
  font-size: 16px;
  font-weight: 700;
  line-height: 20px;
  letter-spacing: 0;
}

.mon-command-bar__actions {
  display: flex;
  align-items: center;
  gap: var(--ds-space-2);
  flex-shrink: 0;
}

.mon-range-selector {
  display: inline-flex;
  align-items: center;
  height: 36px;
  padding: 2px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg-alt);
  flex-shrink: 0;
}

.mon-range-selector button {
  min-width: 52px;
  height: 30px;
  padding: 0 var(--ds-space-2);
  border: 0;
  border-radius: var(--ds-radius-sm);
  background: transparent;
  color: var(--ds-text-muted);
  font-size: 12px;
  font-weight: 800;
  line-height: 18px;
  letter-spacing: 0;
  cursor: pointer;
}

.mon-range-selector button[aria-pressed="true"] {
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
}

.mon-command-bar__button {
  min-width: 96px;
  height: 36px;
  padding: 0 var(--ds-space-3);
  border: 1px solid var(--ds-text);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
  font-size: 12px;
  font-weight: 800;
  line-height: 18px;
  letter-spacing: 0;
  cursor: pointer;
  transition: background 0.15s, border-color 0.15s, color 0.15s;
}

.mon-alert-entry {
  display: inline-grid;
  grid-template-columns: auto auto auto;
  align-items: center;
  gap: var(--ds-space-2);
  min-width: 94px;
  height: 36px;
  padding: 0 var(--ds-space-3);
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg);
  color: var(--ds-text);
  font-size: 12px;
  font-weight: 800;
  line-height: 18px;
  letter-spacing: 0;
  white-space: nowrap;
  cursor: pointer;
}

.mon-alert-entry strong {
  min-width: 18px;
  color: var(--ds-text);
  font-family: var(--ds-font-mono);
  font-size: 14px;
  font-weight: 700;
  line-height: 18px;
  letter-spacing: 0;
  text-align: center;
}

.mon-alert-entry em {
  padding: 1px var(--ds-space-1);
  border-radius: var(--ds-radius-pill);
  background: var(--ds-bg-alt);
  color: var(--ds-text-muted);
  font-size: 11px;
  font-style: normal;
  font-weight: 800;
  line-height: 16px;
}

.mon-alert-entry--active {
  border-color: var(--ds-danger);
}

.mon-command-bar__button--secondary {
  border-color: var(--ds-border-strong);
  background: var(--ds-bg);
  color: var(--ds-text);
}

.mon-command-bar__button:hover:not(:disabled) {
  border-color: var(--ds-border-strong);
}

.mon-command-bar__button:focus-visible,
.mon-alert-entry:focus-visible,
.mon-alert-panel__run:focus-visible,
.mon-range-selector button:focus-visible,
.mon-covered-platform-item__copy a:focus-visible,
.mon-advice__cta:focus-visible,
.mon-pro-entry:focus-visible,
.mon-module-action button:focus-visible,
.mon-module-action input:focus-visible,
.mon-social-refresh:focus-visible,
.mon-social-bind input:focus-visible,
.mon-social-bind select:focus-visible,
.mon-social-register input:focus-visible,
.mon-social-register select:focus-visible,
.mon-social-register button:focus-visible,
.mon-social-bind button:focus-visible {
  outline: none;
  box-shadow: var(--ds-focus-ring);
}

.mon-command-bar__button:disabled {
  border-color: var(--ds-border);
  background: var(--ds-bg-alt);
  color: var(--ds-text-subtle);
  cursor: not-allowed;
}

.mon-alert-entry:disabled {
  border-color: var(--ds-border);
  background: var(--ds-bg-alt);
  color: var(--ds-text-subtle);
  cursor: not-allowed;
}

.mon-kpistrip {
  display: grid;
  grid-template-columns: repeat(8, minmax(0, 1fr));
  gap: 1px;
  margin-bottom: var(--ds-space-5);
  /* .mon-dash 是 flex 列滚动容器；overflow:hidden 让本条自动 min-height:0，
     不锁 flex-shrink:0 会在内容超高时被压塌成 ~0（见 memory dock overflow flex 压塌）。 */
  flex-shrink: 0;
  overflow: hidden;
  background: var(--ds-border);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-lg);
}

.mon-kpi {
  display: flex;
  flex-direction: column;
  gap: 7px;
  min-width: 0;
  padding: 13px 15px;
  background: var(--ds-bg);
}

.mon-kpi__label {
  color: var(--ds-text-muted);
  font-size: 11px;
  font-weight: 700;
  line-height: 16px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.mon-kpi__top {
  display: flex;
  align-items: baseline;
  gap: 6px;
  min-width: 0;
}

.mon-kpi__value,
.mon-kpi__placeholder {
  color: var(--ds-text);
  font-family: var(--ds-font-mono);
  font-size: 24px;
  font-weight: 700;
  line-height: 28px;
  letter-spacing: -0.02em;
}

.mon-kpi__placeholder {
  color: var(--ds-text-muted);
  font-family: var(--ds-font);
  font-size: 15px;
  font-weight: 600;
  line-height: 28px;
  letter-spacing: 0;
}

.mon-kpi__unit {
  margin-left: 1px;
  color: var(--ds-text-subtle);
  font-family: var(--ds-font-mono);
  font-size: 12px;
  font-weight: 500;
}

.mon-kpi__delta {
  color: var(--ds-text-muted);
  font-family: var(--ds-font-mono);
  font-size: 11px;
  font-weight: 600;
  line-height: 16px;
}

.mon-kpi__sub {
  color: var(--ds-text-subtle);
  font-size: 10.5px;
  line-height: 1.3;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

/* GEO 侧采集中骨架（console 无 azure，ink shimmer） */
.mon-kpi--skeleton .mon-kpi__value,
.mon-kpi--skeleton .mon-kpi__placeholder {
  color: transparent;
  border-radius: 5px;
  background: linear-gradient(90deg, var(--ds-bg-alt) 0, var(--ds-bg-deep) 120px, var(--ds-bg-alt) 240px);
  background-size: 240px 100%;
  animation: mon-shimmer 1.1s linear infinite;
}

@keyframes mon-shimmer {
  to {
    background-position: 240px 0;
  }
}

.mon-geo-skeleton {
  position: absolute;
  inset: 0;
  border-radius: inherit;
  /* 半透明白遮罩：设计系统无 scrim token，与 video-card / activity-card 既有做法一致用 ink-neutral 白 */
  background: rgba(255, 255, 255, 0.72);
  backdrop-filter: blur(1.5px);
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: var(--ds-space-2);
}

.mon-geo-skeleton__title {
  font-size: 12px;
  font-weight: 800;
  color: var(--ds-text);
}

.mon-geo-skeleton__sub {
  font-size: 10.5px;
  color: var(--ds-text-muted);
  font-family: var(--ds-font-mono);
}

.mon-alert-panel {
  display: grid;
  gap: var(--ds-space-3);
  min-width: 0;
  padding: var(--ds-space-4);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-lg);
  background: var(--ds-bg);
}

.mon-alert-panel__head {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: var(--ds-space-3);
  min-width: 0;
}

.mon-alert-panel__head > div {
  display: grid;
  gap: var(--ds-space-1);
  min-width: 0;
}

.mon-alert-panel__eyebrow {
  width: fit-content;
  padding: var(--ds-space-1) var(--ds-space-2);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-pill);
  background: var(--ds-bg-alt);
  color: var(--ds-text-muted);
  font-size: 11px;
  font-weight: 800;
  line-height: 16px;
  letter-spacing: 0;
}

.mon-alert-panel__head h2,
.mon-alert-panel__empty h3,
.mon-alert-list__copy h3,
.mon-alert-list__copy p {
  margin: 0;
  letter-spacing: 0;
}

.mon-alert-panel__head h2 {
  color: var(--ds-text);
  font-size: 17px;
  font-weight: 800;
  line-height: 24px;
}

.mon-alert-panel__run {
  height: 32px;
  padding: 0 var(--ds-space-3);
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg);
  color: var(--ds-text);
  font-size: 12px;
  font-weight: 800;
  line-height: 18px;
  letter-spacing: 0;
  white-space: nowrap;
  cursor: pointer;
}

.mon-alert-panel__run:disabled {
  color: var(--ds-text-subtle);
  cursor: not-allowed;
}

.mon-alert-panel__error {
  padding: var(--ds-space-2) var(--ds-space-3);
  border: 1px solid var(--ds-danger);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg-alt);
  color: var(--ds-danger);
  font-size: 12px;
  font-weight: 800;
  line-height: 18px;
  letter-spacing: 0;
}

.mon-alert-list {
  display: grid;
  gap: var(--ds-space-2);
  margin: 0;
  padding: 0;
  list-style: none;
}

.mon-alert-list__item {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  gap: var(--ds-space-3);
  min-width: 0;
  padding: var(--ds-space-3);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg-alt);
}

.mon-alert-list__copy {
  display: grid;
  gap: var(--ds-space-1);
  min-width: 0;
}

.mon-alert-list__badges {
  display: flex;
  flex-wrap: wrap;
  gap: var(--ds-space-1);
  align-items: center;
  min-width: 0;
}

.mon-alert-list__copy h3 {
  color: var(--ds-text);
  font-size: 14px;
  font-weight: 800;
  line-height: 20px;
}

.mon-alert-list__copy p {
  color: var(--ds-text-muted);
  font-size: 12px;
  font-weight: 700;
  line-height: 18px;
}

.mon-alert-list__action {
  display: flex;
  flex-wrap: wrap;
  gap: var(--ds-space-1);
  align-items: baseline;
}

.mon-alert-list__action span {
  color: var(--ds-text-subtle);
  font-size: 11px;
  font-weight: 800;
  line-height: 16px;
}

.mon-alert-list__meta {
  display: grid;
  justify-items: end;
  gap: var(--ds-space-1);
  min-width: 116px;
}

.mon-alert-list__meta span {
  color: var(--ds-text-muted);
  font-size: 11px;
  font-weight: 800;
  line-height: 16px;
  letter-spacing: 0;
  white-space: nowrap;
}

.mon-alert-severity,
.mon-alert-domain,
.mon-social-alert {
  display: inline-grid;
  width: fit-content;
  min-height: 22px;
  align-items: center;
  padding: 0 var(--ds-space-2);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-pill);
  background: var(--ds-bg);
  color: var(--ds-text-muted);
  font-family: var(--ds-font);
  font-size: 11px;
  font-style: normal;
  font-weight: 800;
  line-height: 16px;
  letter-spacing: 0;
  white-space: nowrap;
}

.mon-alert-domain {
  background: var(--ds-surface);
  color: var(--ds-text);
}

.mon-alert-severity--critical,
.mon-alert-severity--warning {
  border-color: var(--ds-danger);
  color: var(--ds-danger);
}

.mon-alert-panel__empty {
  display: grid;
  place-items: center;
  gap: var(--ds-space-1);
  min-height: 104px;
  padding: var(--ds-space-3);
  border: 1px dashed var(--ds-border-strong);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg-alt);
  text-align: center;
}

.mon-alert-panel__empty h3 {
  color: var(--ds-text);
  font-size: 15px;
  font-weight: 800;
  line-height: 22px;
}

.mon-alert-panel__empty p {
  margin: 0;
  color: var(--ds-text-muted);
  font-size: 12px;
  font-weight: 700;
  line-height: 18px;
  letter-spacing: 0;
}

.mon-dash__body {
  /* 内容短时长高填满（空/加载态居中）；内容超高时不收缩，交由 .mon-dash 整体滚动，
     否则 body 被压缩、其溢出内容会盖住 footer。 */
  flex: 1 0 auto;
  min-height: 0;
}

.mon-state {
  display: grid;
  align-content: center;
  justify-items: center;
  gap: var(--ds-space-2);
  min-height: 360px;
  padding: var(--ds-space-6);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-xl);
  background: var(--ds-bg);
  color: var(--ds-text-muted);
  text-align: center;
}

.mon-state h2,
.mon-state p {
  margin: 0;
  letter-spacing: 0;
}

.mon-state h2 {
  color: var(--ds-text);
  font-size: 18px;
  font-weight: 800;
  line-height: 26px;
}

.mon-state p {
  font-size: 14px;
  font-weight: 500;
  line-height: 22px;
}

.mon-state__line {
  width: min(320px, 100%);
  height: 14px;
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg-deep);
}

.mon-state__line--short {
  width: min(220px, 72%);
}

.mon-cockpit-host {
  display: grid;
  gap: 18px;
  min-height: 0;
}

.mon-dualcol {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--ds-space-5);
  align-items: start;
}

.mon-col {
  min-width: 0;
  display: flex;
  flex-direction: column;
}

.mon-col .mon-section {
  margin-top: var(--ds-space-5);
}

.mon-account-social {
  margin-top: var(--ds-space-5);
  min-width: 0;
}

.mon-col-masthead {
  padding: 0 2px var(--ds-space-4);
  margin-bottom: var(--ds-space-5);
  border-bottom: 1px solid var(--ds-border-strong);
}

.mon-col-masthead h2 {
  font-size: 19px;
  font-weight: 600;
  letter-spacing: -0.01em;
  line-height: 1.15;
  margin-bottom: 6px;
}

.mon-col-masthead__plat {
  font-size: 12.5px;
  color: var(--ds-text-muted);
}

/* ---- 定位大盘（关键词 / 账号）散点 SVG ---- */
.mon-map {
  position: relative;
  background: var(--ds-bg);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-xl);
  padding: var(--ds-space-5) var(--ds-space-5) var(--ds-space-3);
}

.mon-map__head {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: var(--ds-space-4);
  margin-bottom: var(--ds-space-2);
}

.mon-map__title {
  font-size: 15px;
  font-weight: 600;
  letter-spacing: -0.01em;
}

.mon-map__sub {
  font-size: 12px;
  color: var(--ds-text-muted);
  margin-top: 3px;
}

.mon-map__mono {
  font-family: var(--ds-font-mono);
}

.mon-map__legend {
  display: flex;
  align-items: center;
  gap: var(--ds-space-3);
  font-size: 11.5px;
  color: var(--ds-text-muted);
  white-space: nowrap;
}

.mon-map__lg {
  display: flex;
  align-items: center;
  gap: var(--ds-space-2);
}

.mon-map__sw {
  width: 9px;
  height: 9px;
  border-radius: var(--ds-radius-pill);
}

.mon-map__sw--owned {
  background: var(--ds-accent-deep);
}

.mon-map__sw--kw {
  background: var(--ds-accent);
  opacity: 0.55;
}

.mon-map__svg {
  display: block;
}

.mon-map__frame {
  stroke: var(--ds-border);
  stroke-width: 1;
}

.mon-map__cross {
  stroke: var(--ds-border-strong);
  stroke-width: 1;
}

.mon-map__axis {
  font-family: var(--ds-font-mono);
  font-size: 10px;
  fill: var(--ds-text-subtle);
  letter-spacing: 0.06em;
  text-transform: uppercase;
}

.mon-map__quad {
  font-family: var(--ds-font-mono);
  font-size: 9.5px;
  fill: var(--ds-text-subtle);
  letter-spacing: 0.08em;
  text-transform: uppercase;
}

.mon-map__dot-lab {
  font-family: var(--ds-font-mono);
  font-size: 10px;
  fill: var(--ds-text-muted);
  font-weight: 500;
}

.mon-map__dot--muted {
  fill: var(--ds-accent);
  fill-opacity: 0.5;
}

.mon-map__dot--owned {
  fill: var(--ds-accent-deep);
  stroke: var(--ds-bg);
  stroke-width: 1.5;
}

.mon-map__halo {
  fill: var(--ds-accent);
  fill-opacity: 0.16;
}

.mon-map__note {
  margin-top: var(--ds-space-2);
  font-size: 11.5px;
  color: var(--ds-text-subtle);
}

.mon-section {
  min-width: 0;
  overflow: hidden;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-xl);
  background: var(--ds-bg);
}

.mon-section--pending {
  border-style: dashed;
  border-color: var(--ds-border-strong);
}

.mon-section__head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--ds-space-4);
  min-width: 0;
  padding: var(--ds-space-4) var(--ds-space-5);
  border-bottom: 1px solid var(--ds-border);
  background: linear-gradient(180deg, var(--ds-bg-alt), var(--ds-bg));
}

.mon-section__title {
  display: flex;
  align-items: center;
  gap: var(--ds-space-2);
  min-width: 0;
  margin: 0;
  color: var(--ds-text);
  font-size: 15px;
  font-weight: 800;
  line-height: 24px;
  letter-spacing: 0;
}

.mon-section__icon {
  display: inline-grid;
  place-items: center;
  width: 26px;
  height: 26px;
  flex: 0 0 auto;
  border-radius: var(--ds-radius-sm);
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
  font-family: var(--ds-font-mono);
  font-size: 11px;
  font-weight: 700;
  line-height: 1;
}

.mon-section__meta {
  color: var(--ds-text-muted);
  font-size: 12px;
  font-weight: 700;
  line-height: 18px;
  letter-spacing: 0;
  text-align: right;
}

.mon-section__body {
  padding: var(--ds-space-4) var(--ds-space-5);
}

.mon-module-action {
  display: grid;
  grid-template-columns: auto minmax(180px, 360px) auto;
  align-items: center;
  gap: var(--ds-space-2);
  min-width: 0;
  margin-bottom: var(--ds-space-3);
}

.mon-module-action label,
.mon-social-bind label,
.mon-social-register label {
  color: var(--ds-text-muted);
  font-size: 12px;
  font-weight: 800;
  line-height: 18px;
  letter-spacing: 0;
  white-space: nowrap;
}

.mon-module-action input,
.mon-social-bind input,
.mon-social-bind select,
.mon-social-register input,
.mon-social-register select {
  width: 100%;
  min-width: 0;
  height: 36px;
  padding: 0 var(--ds-space-3);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg);
  color: var(--ds-text);
  font-family: var(--ds-font);
  font-size: 13px;
  font-weight: 700;
  line-height: 20px;
  letter-spacing: 0;
}

.mon-module-action button,
.mon-social-refresh,
.mon-social-bind button,
.mon-social-register button {
  height: 36px;
  padding: 0 var(--ds-space-3);
  border: 1px solid var(--ds-text);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
  font-size: 12px;
  font-weight: 800;
  line-height: 18px;
  letter-spacing: 0;
  white-space: nowrap;
  cursor: pointer;
}

.mon-module-action button:disabled,
.mon-social-refresh:disabled,
.mon-social-bind button:disabled,
.mon-social-register button:disabled {
  border-color: var(--ds-border);
  background: var(--ds-bg-alt);
  color: var(--ds-text-subtle);
  cursor: not-allowed;
}

.mon-action-error {
  margin-bottom: var(--ds-space-3);
  padding: var(--ds-space-2) var(--ds-space-3);
  border: 1px solid var(--ds-danger);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg-alt);
  color: var(--ds-danger);
  font-size: 12px;
  font-weight: 700;
  line-height: 18px;
  letter-spacing: 0;
}

.mon-module1 {
  display: grid;
  gap: var(--ds-space-4);
  min-width: 0;
}

.mon-module1__summary {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--ds-space-2);
  min-width: 0;
  color: var(--ds-text-muted);
  font-size: 12.5px;
  font-weight: 500;
  line-height: 18px;
  letter-spacing: 0;
}

.mon-module1__summary-sep {
  color: var(--ds-text-subtle);
}

.mon-module1__summary-num {
  color: var(--ds-text);
  font-family: var(--ds-font-mono);
  font-weight: 600;
  font-variant-numeric: tabular-nums lining-nums;
}

.mon-module1__summary-chip {
  display: inline-flex;
  align-items: center;
  gap: var(--ds-space-2);
  height: 24px;
  padding: 0 var(--ds-space-3);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-pill);
  background: var(--ds-bg-alt);
  color: var(--ds-text-muted);
  font-size: 11.5px;
  font-weight: 500;
  line-height: 16px;
  letter-spacing: 0;
  white-space: nowrap;
}

.mon-module1__summary-chip-n {
  color: var(--ds-text);
  font-family: var(--ds-font-mono);
  font-weight: 600;
  font-variant-numeric: tabular-nums lining-nums;
}

.mon-module1-state {
  display: grid;
  align-content: center;
  justify-items: center;
  gap: var(--ds-space-2);
  min-height: 148px;
  min-width: 0;
  border: 1px dashed var(--ds-border-strong);
  border-radius: var(--ds-radius-lg);
  background: var(--ds-bg-alt);
  color: var(--ds-text-muted);
  text-align: center;
}

.mon-module1-state__label,
.mon-social-pending__label,
.mon-advice__eyebrow {
  width: fit-content;
  padding: var(--ds-space-1) var(--ds-space-2);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-pill);
  background: var(--ds-bg-alt);
  color: var(--ds-text-muted);
  font-size: 11px;
  font-weight: 800;
  line-height: 16px;
  letter-spacing: 0;
}

.mon-module1-state h3,
.mon-module1-state p {
  margin: 0;
  letter-spacing: 0;
}

.mon-module1-state h3 {
  color: var(--ds-text);
  font-size: 17px;
  font-weight: 800;
  line-height: 24px;
}

.mon-module1-state p {
  max-width: 420px;
  color: var(--ds-text-muted);
  font-size: 13px;
  font-weight: 600;
  line-height: 20px;
}

.mon-module1-list {
  display: grid;
  gap: var(--ds-space-2);
  margin: 0;
  padding: 0;
  list-style: none;
}

.mon-module1-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--ds-space-4);
  align-items: start;
  min-width: 0;
}

.mon-module1-radar,
.mon-module1-snapshots {
  display: grid;
  align-content: start;
  gap: var(--ds-space-3);
  min-width: 0;
  padding: var(--ds-space-3);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-lg);
  background: var(--ds-bg-alt);
}

.mon-module1-block-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--ds-space-3);
  min-width: 0;
}

.mon-module1-block-head h3,
.mon-module1-block-head span,
.mon-module1-radar-list,
.mon-module1-radar-list__copy h4,
.mon-module1-radar-list__copy p,
.mon-module1-radar-empty h4,
.mon-module1-radar-empty p,
.mon-module1-sourcebar {
  letter-spacing: 0;
}

.mon-module1-block-head h3 {
  margin: 0;
  color: var(--ds-text);
  font-size: 14px;
  font-weight: 800;
  line-height: 20px;
}

.mon-module1-block-head span {
  color: var(--ds-text-muted);
  font-size: 11px;
  font-weight: 800;
  line-height: 16px;
  white-space: nowrap;
}

.mon-module1-radar-list {
  display: flex;
  flex-direction: column;
  margin: 0;
  padding: 0;
  list-style: none;
}

.mon-module1-radar-list__item {
  display: flex;
  align-items: center;
  gap: var(--ds-space-4);
  min-width: 0;
  padding: var(--ds-space-3) 0;
  border-bottom: 1px solid var(--ds-border);
}

.mon-module1-radar-list__item:last-child {
  border-bottom: 0;
}

.mon-module1-radar-list__rank {
  width: 22px;
  flex: none;
  color: var(--ds-text-subtle);
  font-family: var(--ds-font-mono);
  font-size: 13px;
  font-weight: 600;
  line-height: 1;
  font-variant-numeric: tabular-nums lining-nums;
}

.mon-module1-radar-list__copy {
  flex: 1;
  min-width: 0;
}

.mon-module1-radar-list__copy h4,
.mon-module1-radar-list__copy p {
  margin: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.mon-module1-radar-list__copy h4 {
  color: var(--ds-text);
  font-size: 13.5px;
  font-weight: 500;
  line-height: 18px;
}

.mon-module1-radar-list__copy p {
  margin-top: 2px;
  color: var(--ds-text-muted);
  font-size: 11.5px;
  font-weight: 500;
  line-height: 16px;
}

.mon-module1-radar-list__metrics {
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  gap: 2px;
  flex: none;
  text-align: right;
}

.mon-module1-radar-list__metrics span,
.mon-module1-radar-list__metrics em {
  color: var(--ds-text);
  font-family: var(--ds-font-mono);
  font-style: normal;
  font-variant-numeric: tabular-nums lining-nums;
  white-space: nowrap;
}

.mon-module1-radar-list__metrics span {
  font-size: 14px;
  font-weight: 600;
  line-height: 18px;
}

.mon-module1-radar-list__metrics em {
  color: var(--ds-text-muted);
  font-size: 11.5px;
  font-weight: 500;
  line-height: 16px;
}

.mon-module1-radar-empty {
  display: grid;
  place-items: center;
  min-height: 112px;
  padding: var(--ds-space-3);
  border: 1px dashed var(--ds-border-strong);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg);
  color: var(--ds-text-muted);
  text-align: center;
}

.mon-module1-radar-empty h4,
.mon-module1-radar-empty p {
  margin: 0;
}

.mon-module1-radar-empty h4 {
  color: var(--ds-text);
  font-size: 14px;
  font-weight: 800;
  line-height: 20px;
}

.mon-module1-radar-empty p {
  max-width: 260px;
  font-size: 12px;
  font-weight: 700;
  line-height: 18px;
}

.mon-module1-sourcebar {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--ds-space-2);
  min-width: 0;
  margin-top: var(--ds-space-2);
  padding-top: var(--ds-space-3);
  border-top: 1px solid var(--ds-border);
  color: var(--ds-text-subtle);
  font-size: 11.5px;
  font-weight: 500;
  line-height: 18px;
}

.mon-module1-sourcebar__dot {
  width: 6px;
  height: 6px;
  border-radius: var(--ds-radius-pill);
  background: var(--ds-text-subtle);
  flex: none;
}

.mon-module1-sourcebar span {
  color: var(--ds-text-muted);
  font-weight: 600;
}

.mon-module1-sourcebar strong {
  color: var(--ds-text-muted);
  font-weight: 600;
}

.mon-module1-sourcebar em {
  color: var(--ds-text-subtle);
  font-style: normal;
  font-weight: 500;
}

.mon-module1-unsupported {
  display: flex;
  flex-wrap: wrap;
  gap: var(--ds-space-2);
  min-width: 0;
}

.mon-module1-state .mon-module1-unsupported {
  justify-content: center;
  max-width: 520px;
}

.mon-module1-unsupported span {
  display: inline-flex;
  align-items: center;
  gap: var(--ds-space-2);
  min-height: 30px;
  padding: 0 var(--ds-space-3);
  border: 1px dashed var(--ds-border-strong);
  border-radius: var(--ds-radius-pill);
  background: var(--ds-bg);
  color: var(--ds-text);
  font-size: 12px;
  font-weight: 700;
  line-height: 18px;
  letter-spacing: 0;
  white-space: nowrap;
}

.mon-module1-unsupported em {
  color: var(--ds-text-muted);
  font-size: 11px;
  font-style: normal;
  font-weight: 800;
  line-height: 16px;
  letter-spacing: 0;
}

.mon-covered-platforms {
  display: grid;
  gap: var(--ds-space-3);
  min-width: 0;
  padding: var(--ds-space-3);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-lg);
  background: var(--ds-bg);
}

.mon-covered-platforms__head {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: var(--ds-space-3);
  min-width: 0;
}

.mon-covered-platforms__head > div {
  display: grid;
  gap: var(--ds-space-1);
  min-width: 0;
}

.mon-covered-platforms__head h3,
.mon-covered-platforms__head span,
.mon-covered-platforms__head strong,
.mon-covered-platforms__unavailable,
.mon-covered-platforms__empty,
.mon-covered-platform-tag small,
.mon-covered-platform-item__copy a,
.mon-covered-platform-item__copy strong,
.mon-covered-platform-item__copy p,
.mon-covered-platform-item__metrics span {
  letter-spacing: 0;
}

.mon-covered-platforms__head h3 {
  margin: 0;
  color: var(--ds-text);
  font-size: 14px;
  font-weight: 800;
  line-height: 20px;
}

.mon-covered-platforms__head span {
  color: var(--ds-text-muted);
  font-size: 12px;
  font-weight: 700;
  line-height: 18px;
}

.mon-covered-platforms__head strong {
  flex: 0 1 auto;
  min-width: 0;
  color: var(--ds-text-subtle);
  font-size: 11px;
  font-weight: 500;
  line-height: 18px;
  text-align: right;
}

.mon-covered-platform-tags {
  display: flex;
  flex-wrap: wrap;
  gap: var(--ds-space-2);
  min-width: 0;
}

.mon-covered-platform-tag {
  display: inline-flex;
  align-items: center;
  gap: var(--ds-space-2);
  min-height: 26px;
  padding: 0 var(--ds-space-3);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-pill);
  background: var(--ds-bg-alt);
  color: var(--ds-text);
  font-size: 12px;
  font-weight: 500;
  line-height: 16px;
  letter-spacing: 0;
  white-space: nowrap;
}

.mon-covered-platform-tag__dot {
  flex: 0 0 auto;
  width: 6px;
  height: 6px;
  border-radius: var(--ds-radius-pill);
  background: var(--ds-text-subtle);
}

.mon-covered-platform-tag small {
  color: var(--ds-text-muted);
  font-size: 10px;
  font-weight: 700;
  line-height: 14px;
}

.mon-covered-platform-list {
  display: grid;
  gap: 0;
  margin: 0;
  padding: 0;
  list-style: none;
}

.mon-covered-platform-item {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  align-items: center;
  gap: var(--ds-space-3);
  min-width: 0;
  padding: var(--ds-space-3) 0;
  border-bottom: 1px solid var(--ds-border);
}

.mon-covered-platform-item:last-child {
  border-bottom: 0;
}

.mon-covered-platform-item__copy {
  display: grid;
  gap: 2px;
  min-width: 0;
}

.mon-covered-platform-item__copy a,
.mon-covered-platform-item__copy strong {
  min-width: 0;
  overflow: hidden;
  color: var(--ds-text);
  font-size: 12.5px;
  font-weight: 500;
  line-height: 18px;
  text-decoration: none;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.mon-covered-platform-item__copy p {
  margin: 0;
  overflow: hidden;
  color: var(--ds-text-muted);
  font-size: 11px;
  font-weight: 400;
  line-height: 16px;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.mon-covered-platform-item__metrics {
  display: flex;
  flex-wrap: wrap;
  justify-content: flex-end;
  gap: var(--ds-space-2);
  min-width: 0;
}

.mon-covered-platform-item__metrics span {
  color: var(--ds-text);
  font-family: var(--ds-font-mono);
  font-size: 12px;
  font-weight: 600;
  line-height: 18px;
  white-space: nowrap;
}

.mon-covered-platforms__empty {
  display: grid;
  min-height: 64px;
  align-items: center;
  padding: var(--ds-space-3);
  border: 1px dashed var(--ds-border-strong);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg-alt);
  color: var(--ds-text-muted);
  font-size: 12px;
  font-weight: 800;
  line-height: 18px;
}

.mon-covered-platforms__unavailable {
  margin: 0;
  color: var(--ds-text-muted);
  font-size: 11.5px;
  font-weight: 400;
  line-height: 16px;
}

.mon-mentions {
  display: grid;
  gap: var(--ds-space-3);
  min-width: 0;
  padding: var(--ds-space-4);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-lg);
  background: var(--ds-bg);
}

.mon-mentions__head-actions {
  display: inline-flex;
  align-items: center;
  justify-content: flex-end;
  gap: var(--ds-space-2);
  min-width: 0;
}

.mon-mentions__head-actions span {
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
}

.mon-mentions__action {
  height: 28px;
  padding: 0 var(--ds-space-2);
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg);
  color: var(--ds-text);
  font-size: 11px;
  font-weight: 800;
  line-height: 16px;
  letter-spacing: 0;
  white-space: nowrap;
  cursor: pointer;
}

.mon-mentions__action:disabled {
  border-color: var(--ds-border);
  background: var(--ds-bg-alt);
  color: var(--ds-text-subtle);
  cursor: not-allowed;
}

.mon-mentions__summary {
  display: flex;
  align-items: baseline;
  gap: var(--ds-space-2);
  min-width: 0;
}

.mon-mentions__summary strong {
  color: var(--ds-text);
  font-family: var(--ds-font-mono);
  font-size: 24px;
  font-weight: 700;
  line-height: 28px;
}

.mon-mentions__summary span,
.mon-mentions__summary em,
.mon-mentions__note,
.mon-mentions__coverage,
.mon-mentions__state p {
  color: var(--ds-text-muted);
  font-size: 12px;
  font-weight: 700;
  line-height: 18px;
  letter-spacing: 0;
}

.mon-mentions__summary em {
  font-style: normal;
}

.mon-mentions__chart {
  display: grid;
  grid-template-columns: repeat(13, minmax(18px, 1fr));
  align-items: end;
  gap: var(--ds-space-2);
  min-height: 112px;
}

.mon-mentions__bar {
  display: grid;
  grid-template-rows: 84px 18px;
  align-items: end;
  justify-items: center;
  gap: var(--ds-space-1);
  min-width: 0;
}

.mon-mentions__bar em {
  display: block;
  width: 100%;
  min-height: 8px;
  border-radius: var(--ds-radius-sm) var(--ds-radius-sm) 0 0;
  background: linear-gradient(180deg, var(--ds-accent), var(--ds-accent-bg));
}

.mon-mentions__bar small {
  width: 100%;
  overflow: hidden;
  color: var(--ds-text-muted);
  font-family: var(--ds-font-mono);
  font-size: 10px;
  line-height: 14px;
  text-align: center;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.mon-mentions__state {
  display: grid;
  align-content: center;
  gap: var(--ds-space-1);
  min-height: 92px;
  padding: var(--ds-space-3);
  border: 1px dashed var(--ds-border-strong);
  border-radius: var(--ds-radius-md);
  background: var(--ds-bg-alt);
}

.mon-mentions__state strong {
  color: var(--ds-text);
  font-size: 14px;
  line-height: 20px;
}

.mon-module1-list__item {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  align-items: center;
  gap: var(--ds-space-4);
  min-width: 0;
  min-height: 74px;
  padding: var(--ds-space-3);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg-alt);
}

.mon-module1-list__copy {
  display: grid;
  gap: var(--ds-space-1);
  min-width: 0;
}

.mon-module1-list__copy h3,
.mon-module1-list__copy p {
  margin: 0;
  overflow: hidden;
  letter-spacing: 0;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.mon-module1-list__copy h3 {
  color: var(--ds-text);
  font-size: 14px;
  font-weight: 800;
  line-height: 20px;
}

.mon-module1-list__copy p {
  color: var(--ds-text-muted);
  font-size: 12px;
  font-weight: 600;
  line-height: 18px;
}

.mon-module1-list__metrics {
  display: flex;
  flex-wrap: wrap;
  justify-content: flex-end;
  gap: var(--ds-space-2);
  min-width: 0;
}

.mon-module1-list__metrics span,
.mon-module1-list__metrics em {
  display: inline-grid;
  min-height: 28px;
  align-items: center;
  padding: 0 var(--ds-space-2);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-pill);
  background: var(--ds-bg);
  color: var(--ds-text);
  font-family: var(--ds-font-mono);
  font-size: 12px;
  font-style: normal;
  font-weight: 700;
  line-height: 16px;
  letter-spacing: 0;
  white-space: nowrap;
}

.mon-module2 {
  display: grid;
  grid-template-columns: minmax(0, 1.45fr) minmax(280px, 1fr);
  gap: var(--ds-space-5);
  align-items: stretch;
  min-width: 0;
}

.mon-module2-panel,
.mon-score-card,
.mon-advice,
.mon-module3-panel {
  min-width: 0;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-lg);
  background: var(--ds-bg);
}

.mon-module2-panel {
  display: grid;
  padding: var(--ds-space-4);
}

.mon-module2-panel--pending {
  border-style: dashed;
  border-color: var(--ds-border-strong);
  background: var(--ds-bg-alt);
}

.mon-module2-panel .competitor-monitor {
  min-width: 0;
}

.mon-module2-panel .competitor-monitor [style*="white-space: nowrap"] {
  white-space: normal !important;
  overflow-wrap: anywhere;
}

.mon-module2-state,
.mon-social-pending {
  display: grid;
  align-content: center;
  gap: var(--ds-space-2);
  min-height: 172px;
  min-width: 0;
}

.mon-module2-state {
  justify-items: center;
  color: var(--ds-text-muted);
  text-align: center;
}

.mon-module2-state--register {
  justify-items: stretch;
  text-align: left;
}

.mon-module2-state h3,
.mon-module2-state p,
.mon-social-pending h3,
.mon-social-pending p {
  margin: 0;
  letter-spacing: 0;
}

.mon-module2-state h3,
.mon-social-pending h3 {
  color: var(--ds-text);
  font-size: 16px;
  font-weight: 800;
  line-height: 24px;
}

.mon-module2-state p,
.mon-social-pending p {
  color: var(--ds-text-muted);
  font-size: 13px;
  font-weight: 600;
  line-height: 20px;
}

.mon-social-board {
  display: grid;
  gap: var(--ds-space-3);
  min-width: 0;
}

.mon-social-board__head {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: var(--ds-space-3);
  min-width: 0;
}

.mon-social-board__head > div {
  display: grid;
  gap: var(--ds-space-2);
  min-width: 0;
}

.mon-social-board__head h3 {
  margin: 0;
  color: var(--ds-text);
  font-size: 16px;
  font-weight: 800;
  line-height: 22px;
  letter-spacing: 0;
}

.mon-social-board__actions {
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: var(--ds-space-2);
  flex: 0 0 auto;
  min-width: 0;
}

.mon-social-board__actions > span {
  flex: 0 0 auto;
  color: var(--ds-text-muted);
  font-size: 12px;
  font-weight: 800;
  line-height: 18px;
  letter-spacing: 0;
  text-align: right;
}

.mon-social-refresh {
  height: 32px;
  background: var(--ds-bg);
  color: var(--ds-text);
  border-color: var(--ds-border-strong);
}

.mon-social-board .mon-action-error {
  margin-bottom: 0;
}

.mon-social-covered-sov {
  display: grid;
  gap: var(--ds-space-3);
  min-width: 0;
  padding: var(--ds-space-3);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg-alt);
}

.mon-social-covered-sov__head {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: var(--ds-space-3);
  min-width: 0;
}

.mon-social-covered-sov__head > div {
  display: grid;
  gap: var(--ds-space-1);
  min-width: 0;
}

.mon-social-covered-sov__head h4,
.mon-social-covered-sov__head span,
.mon-social-covered-sov__head strong,
.mon-social-sov-bucket strong,
.mon-social-sov-bucket span,
.mon-social-covered-sov__coverage {
  letter-spacing: 0;
}

.mon-social-covered-sov__head h4 {
  margin: 0;
  color: var(--ds-text);
  font-size: 14px;
  font-weight: 800;
  line-height: 20px;
}

.mon-social-covered-sov__head span,
.mon-social-covered-sov__coverage {
  color: var(--ds-text-muted);
  font-size: 12px;
  font-weight: 700;
  line-height: 18px;
}

.mon-social-covered-sov__head strong {
  color: var(--ds-text);
  font-family: var(--ds-font-mono);
  font-size: 13px;
  font-weight: 700;
  line-height: 18px;
  white-space: nowrap;
}

.mon-social-sov-buckets {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: var(--ds-space-2);
  margin: 0;
  padding: 0;
  list-style: none;
}

.mon-social-sov-bucket {
  display: grid;
  gap: var(--ds-space-1);
  min-width: 0;
  padding: var(--ds-space-2);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg);
}

.mon-social-sov-bucket strong {
  overflow: hidden;
  color: var(--ds-text);
  font-size: 12px;
  font-weight: 800;
  line-height: 18px;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.mon-social-sov-bucket span {
  color: var(--ds-text-muted);
  font-family: var(--ds-font-mono);
  font-size: 13px;
  font-weight: 700;
  line-height: 18px;
}

.mon-social-covered-sov__coverage {
  margin: 0;
}

.mon-social-table-wrap {
  min-width: 0;
  overflow-x: auto;
}

.mon-social-table {
  width: 100%;
  min-width: 520px;
  border-collapse: collapse;
  table-layout: fixed;
}

.mon-social-table th,
.mon-social-table td {
  padding: var(--ds-space-2);
  border-bottom: 1px solid var(--ds-border);
  color: var(--ds-text);
  font-size: 12px;
  font-weight: 700;
  line-height: 18px;
  letter-spacing: 0;
  text-align: left;
  white-space: nowrap;
}

.mon-social-table th {
  color: var(--ds-text-muted);
  font-size: 11px;
  font-weight: 800;
  white-space: normal;
  word-break: keep-all;
}

.mon-social-table th:nth-child(1),
.mon-social-table td:nth-child(1) {
  width: 34%;
}

.mon-social-table th:nth-child(2),
.mon-social-table td:nth-child(2) {
  width: 10%;
}

.mon-social-table th:nth-child(3),
.mon-social-table td:nth-child(3) {
  width: 10%;
}

.mon-social-table th:nth-child(4),
.mon-social-table td:nth-child(4) {
  width: 9%;
}

.mon-social-table th:nth-child(5),
.mon-social-table td:nth-child(5) {
  width: 21%;
}

.mon-social-table th:nth-child(6),
.mon-social-table td:nth-child(6) {
  width: 16%;
}

.mon-social-table td:not(:first-child) {
  font-family: var(--ds-font-mono);
}

.mon-social-table tbody tr:last-child td {
  border-bottom: 0;
}

.mon-social-table__name {
  display: grid;
  gap: 2px;
  width: 100%;
  min-width: 0;
  font-family: var(--ds-font);
}

.mon-social-table__name strong,
.mon-social-table__name span,
.mon-social-table__name small {
  display: block;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.mon-social-table__name strong {
  color: var(--ds-text);
  font-size: 13px;
  font-weight: 800;
  line-height: 18px;
  white-space: normal;
  overflow-wrap: anywhere;
}

.mon-social-table__name span,
.mon-social-table__name small {
  color: var(--ds-text-muted);
  font-size: 11px;
  font-weight: 700;
  line-height: 16px;
  white-space: normal;
}

.mon-social-table__empty {
  display: inline-grid;
  min-height: 28px;
  align-items: center;
  padding: 0 var(--ds-space-2);
  border: 1px dashed var(--ds-border-strong);
  border-radius: var(--ds-radius-pill);
  background: var(--ds-bg-alt);
  color: var(--ds-text-muted);
  font-family: var(--ds-font);
  font-size: 12px;
  font-weight: 800;
  line-height: 16px;
}

.mon-social-table__trend {
  display: grid;
  gap: 1px;
}

.mon-social-table__trend span,
.mon-social-table__trend small {
  color: var(--ds-text);
  font-size: 12px;
  font-weight: 800;
  line-height: 16px;
}

.mon-social-table__trend small {
  color: var(--ds-text-muted);
  font-size: 11px;
}

.mon-social-bind {
  display: grid;
  grid-template-columns: minmax(150px, 1fr) minmax(108px, 0.45fr) auto;
  align-items: center;
  gap: var(--ds-space-2);
  min-width: 0;
  font-family: var(--ds-font);
  white-space: normal;
}

.mon-social-bind input,
.mon-social-bind select {
  height: 32px;
}

.mon-social-bind button {
  height: 32px;
}

.mon-social-register {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
  gap: var(--ds-space-2);
  width: 100%;
  min-width: 0;
  margin-top: var(--ds-space-2);
}

.mon-social-register label {
  align-self: end;
}

.mon-social-register button {
  grid-column: 1 / -1;
  width: fit-content;
  justify-self: end;
}

.mon-social-board__deferred {
  display: flex;
  flex-wrap: wrap;
  gap: var(--ds-space-2);
  min-width: 0;
}

.mon-social-board__deferred span {
  display: inline-flex;
  align-items: center;
  gap: var(--ds-space-2);
  min-height: 28px;
  padding: 0 var(--ds-space-2);
  border: 1px dashed var(--ds-border-strong);
  border-radius: var(--ds-radius-pill);
  color: var(--ds-text);
  font-size: 12px;
  font-weight: 700;
  line-height: 18px;
  letter-spacing: 0;
}

.mon-social-board__deferred em {
  color: var(--ds-text-muted);
  font-size: 11px;
  font-style: normal;
  font-weight: 800;
  line-height: 16px;
  letter-spacing: 0;
}

.mon-narrative {
  display: grid;
  gap: var(--ds-space-3);
  min-width: 0;
  padding-top: var(--ds-space-2);
  border-top: 1px solid var(--ds-border);
}

.mon-narrative__head {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: var(--ds-space-3);
  min-width: 0;
}

.mon-narrative__head span {
  color: var(--ds-text);
  font-size: 13px;
  font-weight: 800;
  line-height: 18px;
}

.mon-narrative__head em {
  min-width: 0;
  padding: 2px var(--ds-space-2);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-pill);
  color: var(--ds-text-muted);
  font-size: 11px;
  font-style: normal;
  font-weight: 800;
  line-height: 16px;
}

.mon-narrative__list {
  display: grid;
  gap: var(--ds-space-2);
  min-width: 0;
}

.mon-narrative-card,
.mon-narrative--state {
  display: grid;
  gap: var(--ds-space-2);
  min-width: 0;
  padding: var(--ds-space-3);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-2);
  background: var(--ds-surface);
}

.mon-narrative-card {
  border-left: 3px solid var(--ds-accent);
}

.mon-narrative-card--warning {
  border-left-color: var(--ds-danger);
}

.mon-narrative-card--positive {
  border-left-color: var(--ds-success);
}

.mon-narrative-card__meta {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: var(--ds-space-2);
  min-width: 0;
  color: var(--ds-text-muted);
  font-size: 11px;
  font-weight: 800;
  line-height: 16px;
}

.mon-narrative-card h3,
.mon-narrative--state h3 {
  margin: 0;
  color: var(--ds-text);
  font-size: 14px;
  font-weight: 800;
  line-height: 20px;
  letter-spacing: 0;
}

.mon-narrative-card p,
.mon-narrative--state p {
  margin: 0;
  color: var(--ds-text-muted);
  font-size: 12px;
  line-height: 18px;
}

.mon-narrative-evidence {
  min-width: 0;
}

.mon-narrative-evidence summary {
  width: fit-content;
  cursor: pointer;
  color: var(--ds-accent);
  font-size: 12px;
  font-weight: 800;
  line-height: 18px;
}

.mon-narrative-evidence dl {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: var(--ds-space-2);
  margin: var(--ds-space-2) 0 0;
}

.mon-narrative-evidence div {
  min-width: 0;
  padding: var(--ds-space-2);
  border-radius: var(--ds-radius-1);
  background: var(--ds-surface-muted);
}

.mon-narrative-evidence dt,
.mon-narrative-evidence dd {
  margin: 0;
  min-width: 0;
}

.mon-narrative-evidence dt {
  color: var(--ds-text-muted);
  font-size: 10px;
  font-weight: 800;
  line-height: 14px;
}

.mon-narrative-evidence dd {
  color: var(--ds-text);
  font-size: 11px;
  font-weight: 700;
  line-height: 16px;
  overflow-wrap: anywhere;
}

.mon-narrative-evidence dd em,
.mon-narrative-evidence dd small {
  display: block;
  color: var(--ds-text-muted);
  font-size: 10px;
  font-style: normal;
  font-weight: 700;
  line-height: 14px;
}

.mon-module3 {
  display: grid;
  grid-template-columns: minmax(0, 1.1fr) minmax(280px, 0.9fr);
  gap: var(--ds-space-5);
  align-items: stretch;
  min-width: 0;
}

/* §03 bento 网格（方案 C · 原型 680-838）：12 列，卡片按 span 排布 */
.mon-grid {
  display: grid;
  grid-template-columns: repeat(12, minmax(0, 1fr));
  gap: var(--ds-space-4);
  align-items: stretch;
  min-width: 0;
}

.mon-span4,
.mon-span5,
.mon-span7,
.mon-span8,
.mon-span12 {
  display: grid;
  min-width: 0;
}

.mon-span4 {
  grid-column: span 4;
}

.mon-span5 {
  grid-column: span 5;
}

.mon-span7 {
  grid-column: span 7;
}

.mon-span8 {
  grid-column: span 8;
}

.mon-span12 {
  grid-column: 1 / -1;
}

.mon-module3__scores {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: var(--ds-space-3);
}

.mon-score-card {
  display: grid;
  align-content: space-between;
  gap: var(--ds-space-3);
  min-height: 118px;
  padding: var(--ds-space-4);
}

.mon-score-card__label,
.mon-score-card__value,
.mon-score-card__sub,
.mon-advice__eyebrow,
.mon-advice h2,
.mon-advice p,
.mon-advice__cta,
.mon-advice__error,
.mon-module3-panel__head h3,
.mon-module3-panel__head span,
.mon-sentiment-summary,
.mon-sentiment-bars,
.mon-engine-list,
.mon-engine-item,
.mon-module3-note,
.mon-keyword-table,
.mon-data-chip,
.mon-p1-chip,
.mon-module3-empty,
.mon-p1-state,
.mon-p1-block__head,
.mon-p1-block__label,
.mon-p1-block__value,
.mon-p1-empty,
.mon-source-list__name,
.mon-source-list__count {
  letter-spacing: 0;
}

.mon-score-card__label {
  color: var(--ds-text-muted);
  font-size: 12px;
  font-weight: 700;
  line-height: 18px;
}

.mon-score-card__value {
  display: flex;
  align-items: baseline;
  gap: var(--ds-space-1);
  color: var(--ds-text);
  font-family: var(--ds-font-mono);
  font-size: 27px;
  font-weight: 700;
  line-height: 32px;
}

.mon-score-card__value span {
  color: var(--ds-text-muted);
  font-family: var(--ds-font);
  font-size: 13px;
  font-weight: 700;
  line-height: 18px;
}

.mon-score-card__sub {
  color: var(--ds-text-muted);
  font-size: 12px;
  font-weight: 600;
  line-height: 18px;
}

.mon-advice {
  display: grid;
  grid-template-rows: minmax(0, 1fr) auto auto;
  gap: var(--ds-space-4);
  min-height: 118px;
  padding: var(--ds-space-4);
}

.mon-advice__copy {
  display: grid;
  align-content: start;
  gap: var(--ds-space-2);
  min-width: 0;
}

.mon-advice h2,
.mon-advice p {
  margin: 0;
}

.mon-advice h2 {
  color: var(--ds-text);
  font-size: 18px;
  font-weight: 800;
  line-height: 26px;
}

.mon-advice p {
  color: var(--ds-text-muted);
  font-size: 13px;
  font-weight: 600;
  line-height: 20px;
}

.mon-advice__cta,
.mon-pro-entry {
  min-width: 112px;
  height: 36px;
  padding: 0 var(--ds-space-4);
  border: 1px solid var(--ds-text);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
  font-size: 12px;
  font-weight: 800;
  line-height: 18px;
  letter-spacing: 0;
  cursor: pointer;
  transition: opacity 0.15s;
}

.mon-advice__cta {
  justify-self: start;
}

.mon-advice__cta:hover:not(:disabled),
.mon-pro-entry:hover {
  opacity: 0.88;
}

.mon-advice__cta:disabled {
  border-color: var(--ds-border);
  background: var(--ds-bg-alt);
  color: var(--ds-text-subtle);
  cursor: not-allowed;
}

.mon-advice__error {
  color: var(--ds-danger);
  font-size: 12px;
  font-weight: 600;
  line-height: 18px;
}

.mon-module3__insights {
  grid-column: 1 / -1;
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: var(--ds-space-5);
  min-width: 0;
}

.mon-sentiment-distribution,
.mon-engine-capabilities {
  min-width: 0;
}

.mon-sentiment-summary {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  justify-content: space-between;
  gap: var(--ds-space-2);
}

.mon-sentiment-summary strong {
  color: var(--ds-text);
  font-family: var(--ds-font-mono);
  font-size: 24px;
  font-weight: 800;
  line-height: 30px;
}

.mon-sentiment-summary span {
  color: var(--ds-text-muted);
  font-size: 12px;
  font-weight: 700;
  line-height: 18px;
}

.mon-sentiment-bars {
  display: grid;
  gap: var(--ds-space-2);
  margin: 0;
  padding: 0;
  list-style: none;
}

.mon-sentiment-bar {
  display: grid;
  grid-template-columns: 48px minmax(0, 1fr) 34px;
  align-items: center;
  gap: var(--ds-space-2);
  min-height: 28px;
  color: var(--ds-text);
  font-size: 12px;
  font-weight: 800;
  line-height: 18px;
}

.mon-sentiment-bar__track {
  height: 8px;
  overflow: hidden;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-pill);
  background: var(--ds-bg-alt);
}

.mon-sentiment-bar__fill {
  width: var(--mon-share);
  height: 100%;
  border-radius: inherit;
  background: var(--ds-text-muted);
}

.mon-sentiment-bar--positive .mon-sentiment-bar__fill {
  background: var(--ds-success);
}

.mon-sentiment-bar--neutral .mon-sentiment-bar__fill {
  background: var(--ds-warning);
}

.mon-sentiment-bar--negative .mon-sentiment-bar__fill {
  background: var(--ds-danger);
}

.mon-sentiment-bar--unknown .mon-sentiment-bar__fill {
  background: var(--ds-text-subtle);
}

.mon-sentiment-bar strong {
  color: var(--ds-text);
  font-family: var(--ds-font-mono);
  font-size: 13px;
  font-weight: 800;
  line-height: 18px;
  text-align: right;
}

.mon-engine-list {
  display: grid;
  gap: 0;
  margin: 0;
  padding: 0;
  list-style: none;
}

.mon-engine-item {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--ds-space-3);
  padding: var(--ds-space-3) 0;
  border-bottom: 1px solid var(--ds-border);
}

.mon-engine-item:last-child {
  border-bottom: 0;
}

.mon-engine-item__name {
  overflow: hidden;
  color: var(--ds-text);
  font-size: 13.5px;
  font-weight: 600;
  line-height: 20px;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.mon-engine-item__metrics {
  display: flex;
  gap: var(--ds-space-4);
}

.mon-engine-item__metric {
  display: flex;
  flex-direction: column;
  align-items: flex-end;
}

.mon-engine-item__n {
  color: var(--ds-text);
  font-family: var(--ds-font-mono);
  font-variant-numeric: tabular-nums lining-nums;
  font-size: 13px;
  font-weight: 600;
  line-height: 18px;
}

.mon-engine-item__l {
  color: var(--ds-text-muted);
  font-size: 10px;
  letter-spacing: 0.04em;
  line-height: 14px;
}

.mon-competitor-baseline {
  min-width: 0;
}

.mon-competitor-baseline__summary {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  justify-content: space-between;
  gap: var(--ds-space-2);
}

.mon-competitor-baseline__summary strong {
  color: var(--ds-text);
  font-family: var(--ds-font-mono);
  font-size: 24px;
  font-weight: 800;
  line-height: 30px;
}

.mon-competitor-baseline__summary span,
.mon-competitor-baseline__samples {
  color: var(--ds-text-muted);
  font-size: 12px;
  font-weight: 700;
  line-height: 18px;
}

.mon-competitor-baseline__chart {
  width: 100%;
  height: 64px;
  color: var(--ds-text-subtle);
}

.mon-competitor-baseline__samples {
  min-width: 0;
  margin: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.mon-module3-note {
  color: var(--ds-text-muted);
  font-size: 12px;
  font-weight: 700;
  line-height: 18px;
}

.mon-module3__details {
  grid-column: 1 / -1;
  display: grid;
  grid-template-columns: minmax(0, 1.45fr) minmax(280px, 1fr);
  gap: var(--ds-space-5);
  min-width: 0;
}

.mon-module3-panel {
  display: grid;
  align-content: start;
  gap: var(--ds-space-3);
  padding: var(--ds-space-4);
}

.mon-module3-panel__head {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: var(--ds-space-2);
  min-width: 0;
}

.mon-module3-panel__head h3 {
  margin: 0;
  color: var(--ds-text);
  font-size: 16px;
  font-weight: 800;
  line-height: 24px;
}

.mon-module3-panel__head span {
  color: var(--ds-text-muted);
  font-size: 12px;
  font-weight: 700;
  line-height: 18px;
}

.mon-keyword-table-wrap {
  min-width: 0;
  overflow-x: auto;
}

.mon-keyword-table {
  width: 100%;
  min-width: 640px;
  border-collapse: collapse;
  color: var(--ds-text);
  font-size: 13px;
  line-height: 20px;
}

.mon-keyword-table th,
.mon-keyword-table td {
  padding: var(--ds-space-2) var(--ds-space-3);
  border-bottom: 1px solid var(--ds-border);
  text-align: left;
  vertical-align: middle;
  white-space: nowrap;
}

.mon-keyword-table th {
  color: var(--ds-text-muted);
  font-size: 11px;
  font-weight: 700;
}

.mon-keyword-table tbody tr:last-child td {
  border-bottom: 0;
}

.mon-keyword-table__query {
  max-width: 240px;
  overflow: hidden;
  color: var(--ds-text);
  font-weight: 700;
  text-overflow: ellipsis;
}

.mon-p1-chip {
  display: inline-grid;
  place-items: center;
  min-width: 38px;
  min-height: 24px;
  padding: 0 var(--ds-space-2);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-pill);
  background: var(--ds-bg-alt);
  color: var(--ds-text-muted);
  font-family: var(--ds-font-mono);
  font-size: 11px;
  font-weight: 700;
  line-height: 18px;
}

.mon-data-chip {
  display: inline-grid;
  min-height: 24px;
  align-items: center;
  max-width: 180px;
  padding: 0 var(--ds-space-2);
  overflow: hidden;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-pill);
  background: var(--ds-bg);
  color: var(--ds-text);
  font-size: 11px;
  font-weight: 800;
  line-height: 18px;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.mon-module3-empty {
  display: grid;
  place-items: center;
  min-height: 96px;
  margin: 0;
  border: 1px dashed var(--ds-border-strong);
  border-radius: var(--ds-radius-lg);
  background: var(--ds-bg-alt);
  color: var(--ds-text-muted);
  font-size: 13px;
  font-weight: 700;
  line-height: 20px;
  text-align: center;
}

.mon-source-grid {
  display: grid;
  gap: var(--ds-space-4);
  align-items: start;
}

.mon-source-board {
  min-width: 0;
}

.mon-source-list {
  display: grid;
  gap: 0;
  margin: 0;
  padding: 0;
  list-style: none;
}

.mon-source-list__item {
  display: flex;
  align-items: center;
  gap: var(--ds-space-3);
  padding: var(--ds-space-2) 0;
  border-bottom: 1px solid var(--ds-border);
}

.mon-source-list__item:last-child {
  border-bottom: 0;
}

.mon-source-list__name {
  flex: none;
  width: 116px;
  min-width: 0;
  overflow: hidden;
  color: var(--ds-text);
  font-family: var(--ds-font-mono);
  font-size: 13px;
  font-weight: 600;
  line-height: 20px;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.mon-source-list__track {
  flex: 1;
  height: 6px;
  overflow: hidden;
  border-radius: var(--ds-radius-pill);
  background: var(--ds-bg-alt);
}

.mon-source-list__fill {
  display: block;
  height: 100%;
  border-radius: var(--ds-radius-pill);
  background: rgba(24, 24, 27, 0.7);
}

.mon-source-list__count {
  flex: none;
  width: 32px;
  color: var(--ds-text);
  font-family: var(--ds-font-mono);
  font-size: 13px;
  font-weight: 700;
  line-height: 20px;
  text-align: right;
}

.mon-p1-state {
  display: grid;
  gap: var(--ds-space-1);
  min-height: 72px;
  padding: var(--ds-space-3);
  border: 1px dashed var(--ds-border-strong);
  border-radius: var(--ds-radius-lg);
  background: var(--ds-bg-alt);
  color: var(--ds-text-muted);
  font-size: 12px;
  font-weight: 700;
  line-height: 18px;
}

.mon-p1-state strong {
  color: var(--ds-text);
  font-size: 13px;
  font-weight: 800;
  line-height: 20px;
}

.mon-p1-enrichment {
  display: grid;
  grid-template-columns: minmax(0, 4fr) minmax(0, 3fr);
  gap: var(--ds-space-5);
  align-items: start;
  min-width: 0;
}

.mon-pro-range-note span {
  width: fit-content;
  padding: var(--ds-space-1) var(--ds-space-2);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-pill);
  background: var(--ds-bg-alt);
  color: var(--ds-text-muted);
  font-size: 11px;
  font-weight: 800;
  line-height: 16px;
  letter-spacing: 0;
}

.mon-p1-block {
  display: grid;
  gap: var(--ds-space-2);
  align-content: start;
  min-width: 0;
}

.mon-p1-block__head {
  color: var(--ds-text-muted);
  font-size: 12px;
  font-weight: 800;
  line-height: 18px;
}

.mon-p1-block__list {
  display: grid;
  gap: var(--ds-space-2);
  margin: 0;
  padding: 0;
  list-style: none;
}

.mon-p1-block__item {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--ds-space-2);
  min-height: 22px;
}

.mon-p1-block__label {
  min-width: 0;
  overflow: hidden;
  color: var(--ds-text-muted);
  font-size: 12.5px;
  font-weight: 600;
  line-height: 18px;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.mon-p1-block__label em {
  margin-left: var(--ds-space-1);
  color: var(--ds-text-subtle);
  font-size: 11px;
  font-style: normal;
  font-weight: 600;
}

.mon-p1-block__value {
  flex: none;
  color: var(--ds-text);
  font-family: var(--ds-font-mono);
  font-size: 12.5px;
  font-weight: 700;
  line-height: 18px;
}

.mon-p1-empty {
  margin: 0;
  padding: var(--ds-space-2);
  border: 1px dashed var(--ds-border);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg-alt);
  color: var(--ds-text-muted);
  font-size: 12px;
  font-weight: 700;
  line-height: 18px;
}

.mon-foot {
  display: flex;
  flex-direction: column;
  gap: var(--ds-space-4);
  margin-top: var(--ds-space-5);
  flex-shrink: 0;
}

.mon-foot__sources {
  margin: 0;
  padding: var(--ds-space-3) var(--ds-space-1) 0;
  border-top: 1px solid var(--ds-border);
  font-size: 12.5px;
  line-height: 19px;
  color: var(--ds-text-subtle);
}

.mon-foot-actions {
  display: flex;
}

.mon-pro-entry {
  justify-self: start;
}

.mon-pro-panel-shell {
  min-width: 0;
}

.mon-pro-panel.geo-intel-card {
  width: 100%;
  max-width: none;
  height: auto;
  min-height: 560px;
  padding: var(--ds-space-4);
  border-radius: var(--ds-radius-lg);
}

.mon-pro-panel .gio-seg {
  min-height: 520px;
}

.mon-pro-range-note {
  display: flex;
  flex-wrap: wrap;
  gap: var(--ds-space-2);
}

@media (max-width: 1100px) {
  .mon-cmdbar {
    display: grid;
    grid-template-columns: minmax(0, 1fr);
    align-items: stretch;
  }

  .mon-cmdbar__actions {
    flex-wrap: wrap;
  }

  .mon-command-bar {
    display: grid;
    grid-template-columns: minmax(0, 1fr);
    align-items: stretch;
  }

  .mon-command-bar__status,
  .mon-command-bar__actions {
    flex-wrap: wrap;
  }

  .mon-kpistrip {
    grid-template-columns: repeat(4, minmax(0, 1fr));
  }

  .mon-dualcol,
  .mon-grid,
  .mon-source-grid {
    grid-template-columns: minmax(0, 1fr);
  }

  .mon-span4,
  .mon-span5,
  .mon-span7,
  .mon-span8,
  .mon-span12 {
    grid-column: 1 / -1;
  }

  .mon-module1-list__item,
  .mon-module1-grid,
  .mon-module2,
  .mon-module3,
  .mon-module3__insights,
  .mon-module3__details {
    grid-template-columns: minmax(0, 1fr);
  }

  .mon-module1-list__metrics {
    justify-content: flex-start;
  }

  .mon-pro-panel .gio-chart-grid,
  .mon-pro-panel .gio-chart-grid--two,
  .mon-pro-panel .gi-grid,
  .mon-pro-panel .gi-kpi {
    grid-template-columns: minmax(0, 1fr);
  }

  .mon-pro-panel .gi-col + .gi-col {
    border-top: 1px solid var(--ds-border);
    border-left: 0;
  }
}

@media (max-width: 640px) {
  .mon-dash {
    padding: var(--ds-space-4);
  }

  .mon-dash__title {
    font-size: 26px;
    line-height: 30px;
  }

  .mon-command-bar__status,
  .mon-command-bar__actions {
    display: grid;
    grid-template-columns: minmax(0, 1fr);
  }

  .mon-cmdbar__actions,
  .mon-cmdbar__status {
    display: grid;
    grid-template-columns: minmax(0, 1fr);
  }

  .mon-cmdbar__seg,
  .mon-btn {
    width: 100%;
  }

  .mon-cmdbar__seg-btn {
    justify-content: center;
    min-width: 0;
    padding: 0 var(--ds-space-2);
  }

  .mon-map__head {
    display: grid;
    grid-template-columns: minmax(0, 1fr);
  }

  .mon-p1-enrichment,
  .mon-covered-platform-item {
    grid-template-columns: minmax(0, 1fr);
  }

  .mon-p1-block__item,
  .mon-covered-platforms__head,
  .mon-covered-platform-item__metrics {
    align-items: flex-start;
    flex-direction: column;
    justify-content: flex-start;
  }

  .mon-p1-block__label,
  .mon-covered-platform-item__copy a,
  .mon-covered-platform-item__copy strong,
  .mon-covered-platform-item__copy p {
    white-space: normal;
    overflow-wrap: anywhere;
  }

  .mon-mentions__chart {
    grid-template-columns: repeat(13, minmax(12px, 1fr));
    gap: 2px;
  }

  .mon-mentions__bar small {
    font-size: 8px;
  }

  .mon-module2-panel .competitor-monitor [style*="gap: 14px"] {
    align-items: flex-start !important;
    flex-direction: column !important;
  }

  .mon-command-bar__button,
  .mon-command-bar__updated,
  .mon-command-bar__count,
  .mon-module-action button,
  .mon-advice__cta,
  .mon-pro-entry {
    width: 100%;
  }

  .mon-module-action,
  .mon-social-bind,
  .mon-social-register {
    grid-template-columns: minmax(0, 1fr);
    align-items: stretch;
  }

  .mon-module-action label,
  .mon-social-bind label,
  .mon-social-register label {
    white-space: normal;
  }

  .mon-social-register button {
    width: 100%;
  }

  .mon-kpistrip {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }

  .mon-module3__insights,
  .mon-module3__scores {
    grid-template-columns: minmax(0, 1fr);
  }

  .mon-module1-radar-list__item {
    grid-template-columns: 32px minmax(0, 1fr);
  }

  .mon-module1-radar-list__metrics {
    grid-column: 1 / -1;
    justify-items: start;
    min-width: 0;
  }

  .mon-section__head {
    align-items: flex-start;
    flex-direction: column;
  }

  .mon-section__meta {
    text-align: left;
  }

  .mon-pro-panel .gio-seg-tabs {
    flex-wrap: wrap;
  }
}

/* ===== Module 04 · GEO 证据库 ===== */
.mon-evidence {
  display: grid;
  gap: var(--ds-space-3);
  min-width: 0;
}

.mon-evidence__sources {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--ds-space-2);
  padding-bottom: var(--ds-space-3);
  border-bottom: 1px solid var(--ds-border);
}

.mon-evidence__sources-label {
  color: var(--ds-text-subtle);
  font-family: var(--ds-font-mono);
  font-size: 10px;
  letter-spacing: 0.02em;
}

.mon-evidence__chip {
  display: inline-flex;
  align-items: center;
  gap: var(--ds-space-1);
  padding: 3px var(--ds-space-2);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-pill);
  background: var(--ds-bg-alt);
  color: var(--ds-text-muted);
  font-size: 11px;
}

.mon-evidence__chip-count {
  color: var(--ds-text);
  font-family: var(--ds-font-mono);
  font-size: 10px;
}

.mon-evidence__extract {
  margin-left: auto;
  padding: 4px var(--ds-space-3);
  border: 1px solid var(--ds-text);
  border-radius: var(--ds-radius-pill);
  background: var(--ds-bg);
  color: var(--ds-text);
  font-size: 11px;
  font-weight: 600;
  cursor: pointer;
}

.mon-evidence__extract:hover:not(:disabled) {
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
}

.mon-evidence__extract:disabled {
  border-color: var(--ds-border-strong);
  color: var(--ds-text-subtle);
  cursor: not-allowed;
}

.mon-evidence__error {
  padding: var(--ds-space-2) var(--ds-space-3);
  border: 1px solid var(--ds-danger);
  border-radius: var(--ds-radius-sm);
  color: var(--ds-danger);
  font-size: 12px;
}

.mon-evidence__state {
  padding: var(--ds-space-3);
  color: var(--ds-text-muted);
  font-size: 12px;
}

.mon-evidence__summary {
  display: flex;
  gap: var(--ds-space-5);
}

.mon-evidence__summary-item {
  display: flex;
  flex-direction: column;
  gap: 2px;
}

.mon-evidence__summary-value {
  font-family: var(--ds-font-mono);
  font-size: 18px;
  font-weight: 700;
  letter-spacing: -0.01em;
  color: var(--ds-text);
}

.mon-evidence__summary-value--warn {
  color: var(--ds-danger);
}

.mon-evidence__summary-label {
  color: var(--ds-text-subtle);
  font-size: 10px;
}

.mon-evidence__list {
  display: grid;
  gap: 0;
  margin: 0;
  padding: 0;
  list-style: none;
}

.mon-evidence-atom {
  padding: 11px 0;
  border-bottom: 1px solid var(--ds-border);
}

.mon-evidence-atom:last-child {
  border-bottom: none;
  padding-bottom: 0;
}

.mon-evidence-atom__head {
  display: flex;
  align-items: center;
  gap: var(--ds-space-2);
  min-width: 0;
}

.mon-evidence-atom__no {
  flex: 0 0 auto;
  padding: 2px 7px;
  border-radius: var(--ds-radius-sm);
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
  font-family: var(--ds-font-mono);
  font-size: 10px;
  font-weight: 700;
}

.mon-evidence-atom__no--off {
  background: var(--ds-text-subtle);
}

.mon-evidence-atom__type {
  flex: 0 0 auto;
  padding: 1px var(--ds-space-2);
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-pill);
  color: var(--ds-text-muted);
  font-size: 10px;
}

.mon-evidence-atom__claim {
  flex: 1 1 auto;
  min-width: 0;
  color: var(--ds-text);
  font-size: 13px;
  font-weight: 600;
  line-height: 1.4;
}

.mon-evidence-atom__claim--archived {
  text-decoration: line-through;
  text-decoration-color: var(--ds-text-subtle);
  color: var(--ds-text-muted);
}

.mon-evidence-risk {
  flex: 0 0 auto;
  padding: 2px 7px;
  border-radius: var(--ds-radius-pill);
  font-family: var(--ds-font-mono);
  font-size: 9.5px;
  font-weight: 700;
}

.mon-evidence-risk--low {
  border: 1px solid var(--ds-border);
  background: var(--ds-bg-alt);
  color: var(--ds-text-subtle);
}

.mon-evidence-risk--high {
  border: 1px solid var(--ds-danger);
  color: var(--ds-danger);
}

.mon-evidence-atom__quote {
  margin: 6px 0 0 34px;
  color: var(--ds-text-muted);
  font-size: 12px;
  line-height: 1.5;
}

.mon-evidence-atom__meta {
  display: flex;
  align-items: center;
  gap: var(--ds-space-3);
  margin: 6px 0 0 34px;
}

.mon-evidence-atom__prov {
  color: var(--ds-text-muted);
  font-size: 11px;
}

.mon-evidence-atom__prov-file {
  color: var(--ds-text);
  font-weight: 500;
}

.mon-evidence-atom__prov-section {
  color: var(--ds-text-subtle);
}

.mon-evidence-atom__toggle {
  margin-left: auto;
  padding: 0;
  border: none;
  background: none;
  color: var(--ds-text-muted);
  font-size: 11px;
  text-decoration: underline;
  text-underline-offset: 2px;
  cursor: pointer;
}

.mon-evidence-atom__toggle:hover {
  color: var(--ds-text);
}

.mon-evidence__empty {
  display: grid;
  place-items: center;
  gap: var(--ds-space-1);
  padding: var(--ds-space-5) var(--ds-space-3);
  border: 1px dashed var(--ds-border-strong);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg-alt);
  text-align: center;
}

.mon-evidence__empty h3 {
  margin: 0;
  color: var(--ds-text);
  font-size: 15px;
  font-weight: 800;
}

.mon-evidence__empty p {
  margin: 0;
  color: var(--ds-text-muted);
  font-size: 12px;
}

/* E1 short-lived locate highlight (non-persistent selection) */
.monitor-locate-highlight {
  outline: 3px solid var(--ds-accent, #4da6ff);
  outline-offset: 3px;
  border-radius: var(--ds-radius-sm, 6px);
  background-color: color-mix(in srgb, var(--ds-accent-bg, #f2f9ff) 85%, transparent);
  box-shadow: 0 0 0 4px color-mix(in srgb, var(--ds-accent, #4da6ff) 28%, transparent);
  transition:
    outline-color 0.3s ease,
    background-color 0.3s ease,
    box-shadow 0.3s ease;
}
/**
 * MatrixAccountSidebar + AccountSidebarItem 样式
 *
 * 视觉源（1:1 复刻）：
 *   docs/design/2026-07-01-publish-matrix-vA-tree.html
 *     LEFT nav tree：.tree / .tree-root / .tree-guide / .tree-glabel
 *       / .acct / .plat / .acct-body / .acct-name / .acct-sub / .acct-status
 *       / .side-foot / .side-add / .side-ops（CSS lines 58-93、结构 lines 348-384）
 *
 * 规则：
 *   - 原型有对应 --ds-* token 的值 → 使用 token（圆角、颜色、border、字体）
 *   - 原型用了 off-grid 字面量（如 padding:9px 10px 9px 14px）→ 原样保留（1:1）
 *   - console scope no-azure（design.md §12）：原型 .acct.sel::after 用 azure，
 *     此处按 console 默认切 ink（var(--ds-text)）；状态色走 --ds-success/warning/danger（语义色，允许）
 */

/* ─── Sidebar shell ──────────────────────────────────────────────── */
._acctSide_992pv_18 {
  width: 250px;
  flex-shrink: 0;
  display: flex;
  flex-direction: column;
  border-right: 1px solid var(--ds-border);
  background: var(--ds-bg);
  /* 浮于指令栏渐隐地台 scrim（fixed,z-index:999）之上，避免账号栏底部
     「新增账号/批量分发/管理」被地台白带洗白遮挡。侧栏自带不透明底色，
     scrim 不会透出；地台仍只淡化中央/右侧画布内容。 */
  position: relative;
  z-index: 1000;
}

._acctSideScroll_992pv_32 {
  flex: 1;
  min-height: 0;
  overflow-y: auto;
  padding: 12px 10px 10px;
}

._acctSideScroll_992pv_32::-webkit-scrollbar {
  width: 0;
}

/* ─── Tree root（矩阵总览 · 总控 Agent 入口）────────────────────────── */
._treeRoot_992pv_44 {
  width: 100%;
  display: flex;
  align-items: center;
  gap: 11px;
  margin: 0 0 8px;
  padding: 10px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-md);
  background: var(--ds-bg-alt);
  color: var(--ds-text);
  text-align: left;
  cursor: pointer;
}

._treeRoot_992pv_44:hover {
  border-color: var(--ds-border-strong);
}

._treeRootOn_992pv_63 {
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
  border-color: var(--ds-text);
}

._rootMark_992pv_69 {
  width: 34px;
  height: 34px;
  border-radius: 9px;
  display: grid;
  place-items: center;
  flex: 0 0 auto;
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
  font-size: 16px;
  font-weight: 800;
}

._treeRootOn_992pv_63 ._rootMark_992pv_69 {
  background: rgba(255, 255, 255, 0.14);
  color: var(--ds-text-on-ink);
}

._treeRoot_992pv_44 span:last-child {
  min-width: 0;
  display: flex;
  flex-direction: column;
  gap: 2px;
}

._treeRoot_992pv_44 b {
  font-size: 13px;
  font-weight: 700;
}

._treeRoot_992pv_44 em {
  font-style: normal;
  font-size: 11px;
  color: var(--ds-text-muted);
  display: flex;
  align-items: center;
  gap: 6px;
}

._treeRootOn_992pv_63 em {
  color: var(--ds-text-on-ink);
  opacity: 0.7;
}

._rootLive_992pv_113 {
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: var(--ds-success);
  flex: 0 0 auto;
}

/* ─── 执行单元分组（连线 + 标签）─────────────────────────────────── */
._treeGuide_992pv_122 {
  position: relative;
  padding: 14px 4px 4px 22px;
}

._treeGuide_992pv_122::before {
  content: "";
  position: absolute;
  left: 22px;
  top: 6px;
  bottom: 14px;
  width: 1px;
  background: var(--ds-border-strong);
}

._treeGlabel_992pv_137 {
  font-family: var(--ds-font-mono);
  font-size: 10px;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--ds-text-subtle);
  padding: 0 0 8px 12px;
}

/* ─── Sidebar foot ───────────────────────────────────────────────── */
._acctSideFoot_992pv_147 {
  flex-shrink: 0;
  border-top: 1px solid var(--ds-border);
  padding: 11px 12px;
  display: flex;
  flex-direction: column;
  gap: 8px;
}

._sideAdd_992pv_156 {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 7px;
  height: 38px;
  border: 1.5px dashed var(--ds-border-strong);
  border-radius: var(--ds-radius-md);
  background: var(--ds-bg);
  cursor: pointer;
  color: var(--ds-text-muted);
  font-size: 12px;
  font-weight: 600;
}

._sideAdd_992pv_156:hover {
  background: var(--ds-bg-alt);
  color: var(--ds-text);
  border-color: var(--ds-text);
}

._sideActions_992pv_177 {
  display: flex;
  gap: 8px;
}

._barBtn_992pv_182 {
  flex: 1;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  font-size: 11.5px;
  font-weight: 600;
  color: var(--ds-text-muted);
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-sm);
  padding: 8px 6px;
  background: var(--ds-bg);
  cursor: pointer;
}

._barBtn_992pv_182:hover {
  background: var(--ds-bg-alt);
  color: var(--ds-text);
  border-color: var(--ds-text);
}

/* ─── Account row ────────────────────────────────────────────────── */
._acct_992pv_7 {
  position: relative;
  display: flex;
  gap: 10px;
  padding: 9px 10px 9px 14px; /* off-grid: kept verbatim for 1:1 */
  border-radius: var(--ds-radius-md);
  cursor: pointer;
  margin-bottom: 1px;
}

._acct_992pv_7::before {
  content: "";
  position: absolute;
  left: -8px;
  top: 50%;
  width: 8px;
  height: 1px;
  background: var(--ds-border-strong);
}

._acct_992pv_7:hover {
  background: var(--ds-bg-alt);
}

._acctOn_992pv_229 {
  background: var(--ds-bg-alt);
}

._acctOn_992pv_229::after {
  content: "";
  position: absolute;
  left: 0;
  top: 9px;
  bottom: 9px;
  width: 3px;
  border-radius: 2px;
  background: var(--ds-text); /* 原型 azure → console scope ink（design.md §12） */
}

/* ─── Platform tile（平台单字方牌 / 有真实头像则显头像）───────────── */
._plat_992pv_7 {
  width: 28px;
  height: 28px;
  flex: 0 0 auto;
  border-radius: 8px;
  background: var(--ds-bg-alt);
  border: 1px solid var(--ds-border);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 11px;
  font-weight: 600;
  color: var(--ds-text);
  overflow: hidden;
}

._acctExpired_992pv_261 ._plat_992pv_7 {
  color: var(--ds-text-subtle);
}

._platImg_992pv_265 {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}

/* ─── Text block ─────────────────────────────────────────────────── */
._acctBody_992pv_273 {
  min-width: 0;
  flex: 1;
}

._acctName_992pv_278 {
  font-size: 12.5px; /* off-grid: kept verbatim */
  font-weight: 600;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

._acctExpired_992pv_261 ._acctName_992pv_278 {
  color: var(--ds-text-muted);
}

._acctSub_992pv_290 {
  margin-top: 3px;
  display: flex;
  align-items: center;
  gap: 6px;
  font-size: 10.5px; /* off-grid: kept verbatim */
  color: var(--ds-text-muted);
}

._acctSubName_992pv_299 {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

._acctStatus_992pv_305 {
  margin-left: auto;
  display: flex;
  align-items: center;
  gap: 4px;
  font-size: 10px;
  color: var(--ds-text-muted);
  white-space: nowrap;
  flex: 0 0 auto;
}

._statusWarn_992pv_316 {
  color: #b45309; /* prototype verbatim（amber 文本）*/
}

._statusExpired_992pv_320 {
  color: var(--ds-danger);
}

._statusDot_992pv_324 {
  width: 6px;
  height: 6px;
  border-radius: 50%;
  flex: 0 0 auto;
}

/* Status dot colors */
/* stylelint-disable-next-line selector-class-pattern */
._s-ok_992pv_333 {
  background: var(--ds-success);
}

/* stylelint-disable-next-line selector-class-pattern */
._s-warn_992pv_338 {
  background: var(--ds-warning);
}

/* stylelint-disable-next-line selector-class-pattern */
._s-cool_992pv_343 {
  background: var(--ds-danger);
}

@media (max-width: 700px) {
  ._acctSide_992pv_18 {
    width: 100%;
    max-height: 320px;
    border-right: 0;
    border-bottom: 1px solid var(--ds-border);
  }

  ._acctSideScroll_992pv_32 {
    max-height: 220px;
  }

  ._acctSideFoot_992pv_147 {
    padding: 9px 12px;
  }
}
._scrim_1lb5x_1 {
  position: fixed;
  inset: 0;
  z-index: 2147483000;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 24px;
  background: rgba(17, 24, 39, 0.42);
}

._modal_1lb5x_12 {
  width: min(760px, 100%);
  max-height: min(760px, calc(100vh - 48px));
  overflow-y: auto;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-lg);
  background: var(--ds-bg);
  box-shadow: 0 24px 80px rgba(15, 23, 42, 0.24);
}

._header_1lb5x_22 {
  position: sticky;
  top: 0;
  z-index: 1;
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 16px;
  padding: 22px 24px 18px;
  border-bottom: 1px solid var(--ds-border);
  background: var(--ds-bg);
}

._header_1lb5x_22 h2 {
  margin: 4px 0 0;
  font-size: 20px;
  line-height: 1.25;
  font-weight: 800;
  letter-spacing: 0;
  color: var(--ds-text);
}

._eyebrow_1lb5x_44 {
  margin: 0;
  font-size: 12px;
  font-weight: 700;
  color: var(--ds-text-muted);
}

._iconButton_1lb5x_51 {
  width: 34px;
  height: 34px;
  flex: 0 0 auto;
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg-alt);
  color: var(--ds-text-muted);
  cursor: pointer;
  font-size: 22px;
  line-height: 1;
}

._iconButton_1lb5x_51:hover {
  color: var(--ds-text);
  background: #fff;
}

._platformPane_1lb5x_69,
._wizardPane_1lb5x_70,
._authPane_1lb5x_71 {
  padding: 24px;
}

._paneText_1lb5x_75 {
  margin: 0;
  color: var(--ds-text-muted);
  font-size: 13px;
  line-height: 1.6;
}

._inlineHead_1lb5x_82 {
  display: flex;
  justify-content: space-between;
  gap: 16px;
  align-items: flex-start;
  margin-bottom: 18px;
}

._paneTitle_1lb5x_90 {
  margin: 0 0 6px;
  font-size: 16px;
  font-weight: 800;
  color: var(--ds-text);
}

._textButton_1lb5x_97 {
  height: 32px;
  flex: 0 0 auto;
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg-alt);
  color: var(--ds-text-muted);
  cursor: pointer;
  font-size: 12px;
  font-weight: 700;
}

._textButton_1lb5x_97:hover {
  color: var(--ds-text);
  background: #fff;
}

._platformGrid_1lb5x_114 {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 12px;
  margin-top: 18px;
}

._platformTile_1lb5x_121 {
  min-height: 150px;
  display: grid;
  grid-template-rows: 34px auto auto 30px;
  align-items: center;
  justify-items: start;
  gap: 8px;
  padding: 16px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-md);
  background: var(--ds-bg-alt);
  color: var(--ds-text);
  cursor: pointer;
  text-align: left;
}

._platformTile_1lb5x_121:hover {
  border-color: var(--ds-text);
  background: #fff;
}

._platformTileDisabled_1lb5x_142,
._platformTileDisabled_1lb5x_142:hover {
  cursor: not-allowed;
  color: var(--ds-text-muted);
  background: var(--ds-bg-alt);
  border-color: var(--ds-border);
  opacity: 0.68;
}

._platformEmoji_1lb5x_151 {
  width: 34px;
  height: 34px;
  display: grid;
  place-items: center;
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg);
  font-size: 18px;
}

._platformName_1lb5x_161 {
  font-size: 15px;
  font-weight: 800;
}

._platformStatus_1lb5x_166 {
  min-height: 18px;
  font-size: 12px;
  color: var(--ds-text-muted);
}

._platformAction_1lb5x_172 {
  min-width: 82px;
  height: 30px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg);
  font-size: 12px;
  font-weight: 700;
}

._authPane_1lb5x_71 {
  min-height: 340px;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  text-align: center;
}

._authBadge_1lb5x_194 {
  display: inline-flex;
  align-items: center;
  height: 26px;
  padding: 0 12px;
  border: 1px solid var(--ds-border-strong);
  border-radius: 999px;
  background: var(--ds-bg-alt);
  color: var(--ds-text-muted);
  font-size: 12px;
  font-weight: 700;
}

._authTitle_1lb5x_207 {
  margin: 18px 0 8px;
  color: var(--ds-text);
  font-size: 20px;
  line-height: 1.3;
  font-weight: 800;
}

._authText_1lb5x_215 {
  max-width: 440px;
  margin: 0;
  color: var(--ds-text-muted);
  font-size: 13px;
  line-height: 1.7;
}

._authHint_1lb5x_223 {
  max-width: 440px;
  margin: 12px 0 0;
  color: var(--ds-text);
  font-size: 13px;
  line-height: 1.6;
}

._countdown_1lb5x_231 {
  width: 54px;
  height: 54px;
  display: grid;
  place-items: center;
  margin-top: 18px;
  border: 1px solid var(--ds-border-strong);
  border-radius: 50%;
  background: var(--ds-bg-alt);
  color: var(--ds-text);
  font-family: var(--ds-font-mono);
  font-size: 24px;
  font-weight: 800;
}

._actionRow_1lb5x_246 {
  display: flex;
  gap: 10px;
  margin-top: 24px;
}

._primaryButton_1lb5x_252,
._secondaryButton_1lb5x_253 {
  min-width: 104px;
  height: 36px;
  border-radius: var(--ds-radius-sm);
  cursor: pointer;
  font-size: 13px;
  font-weight: 800;
}

._primaryButton_1lb5x_252 {
  border: 1px solid var(--ds-text);
  background: var(--ds-text);
  color: #fff;
}

._primaryButton_1lb5x_252:disabled {
  cursor: not-allowed;
  opacity: 0.48;
}

._secondaryButton_1lb5x_253 {
  border: 1px solid var(--ds-border-strong);
  background: var(--ds-bg-alt);
  color: var(--ds-text-muted);
}

._secondaryButton_1lb5x_253:hover {
  color: var(--ds-text);
  background: #fff;
}

@media (max-width: 700px) {
  ._scrim_1lb5x_1 {
    align-items: stretch;
    padding: 12px;
  }

  ._modal_1lb5x_12 {
    max-height: calc(100vh - 24px);
  }

  ._header_1lb5x_22,
  ._platformPane_1lb5x_69,
  ._wizardPane_1lb5x_70,
  ._authPane_1lb5x_71 {
    padding: 18px;
  }

  ._platformGrid_1lb5x_114 {
    grid-template-columns: 1fr;
  }

  ._inlineHead_1lb5x_82 {
    flex-direction: column;
  }
}
._scrim_1jecy_1 {
  position: fixed;
  inset: 0;
  z-index: 2147483001;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 24px;
  background: rgba(17, 24, 39, 0.42);
}

._dialog_1jecy_12 {
  width: min(460px, 100%);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-lg);
  background: var(--ds-bg);
  box-shadow: 0 24px 80px rgba(15, 23, 42, 0.24);
}

._header_1jecy_20 {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 16px;
  padding: 22px 24px 16px;
  border-bottom: 1px solid var(--ds-border);
}

._header_1jecy_20 h2 {
  margin: 0;
  color: var(--ds-text);
  font-size: 18px;
  line-height: 1.35;
  font-weight: 800;
  letter-spacing: 0;
}

._iconButton_1jecy_38 {
  width: 32px;
  height: 32px;
  flex: 0 0 auto;
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg-alt);
  color: var(--ds-text-muted);
  cursor: pointer;
  font-size: 22px;
  line-height: 1;
}

._iconButton_1jecy_38:hover {
  color: var(--ds-text);
  background: #fff;
}

._body_1jecy_56 {
  display: grid;
  gap: 12px;
  padding: 20px 24px;
}

._row_1jecy_62 {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  min-height: 40px;
  border-bottom: 1px solid var(--ds-border);
  color: var(--ds-text-muted);
  font-size: 13px;
}

._row_1jecy_62 strong {
  color: var(--ds-text);
  font-size: 14px;
  font-weight: 800;
  text-align: right;
}

._actions_1jecy_80 {
  display: flex;
  justify-content: flex-end;
  gap: 10px;
  padding: 16px 24px 24px;
}

._primaryButton_1jecy_87,
._secondaryButton_1jecy_88 {
  height: 38px;
  padding: 0 16px;
  border-radius: var(--ds-radius-sm);
  cursor: pointer;
  font-size: 13px;
  font-weight: 800;
}

._primaryButton_1jecy_87 {
  border: 1px solid var(--ds-text);
  background: var(--ds-text);
  color: var(--ds-bg);
}

._secondaryButton_1jecy_88 {
  border: 1px solid var(--ds-border-strong);
  background: var(--ds-bg-alt);
  color: var(--ds-text);
}
/* MatrixProfileHero — 账号 Hero 样式
   复刻自 docs/design/2026-06-23-canvas-workbench-scheme-E.html § .hero 区段
   Off-grid 原型值（gap:34px, gap:28px 等）保持 verbatim；无对应 token 的颜色字面量同理。
*/

/* ===== Hero container ===== */
._hero_ulne8_2 {
  display: flex;
  flex-direction: column;
  gap: 18px;
}

._heroMain_ulne8_13 {
  display: flex;
  gap: 28px;
  align-items: flex-start;
}

/* ===== Avatar ===== */
._heroAv_ulne8_20 {
  position: relative;
  width: 118px;
  height: 118px;
  border-radius: 50%;
  background: var(--ds-bg-deep);
  display: grid;
  place-items: center;
  font-size: 42px;
  font-weight: 800;
  color: var(--ds-text);
  flex-shrink: 0;
}

._heroAvImg_ulne8_34 {
  width: 100%;
  height: 100%;
  border-radius: inherit;
  object-fit: cover;
  display: block;
}

/* Platform emoji badge */
._ic_ulne8_43 {
  position: absolute;
  right: 2px;
  bottom: 2px;
  width: 34px;
  height: 34px;
  border-radius: 11px;
  font-size: 15px;
  border: 3px solid var(--ds-bg);
  display: grid;
  place-items: center;
}

/* ===== Mid section ===== */
._heroMid_ulne8_57 {
  flex: 1;
  min-width: 0;
  padding-top: 4px;
}

._heroNameRow_ulne8_63 {
  display: flex;
  align-items: center;
  gap: 12px;
  flex-wrap: wrap;
}

._heroName_ulne8_63 {
  font-size: 26px;
  font-weight: 800;
  letter-spacing: -0.02em;
}

._heroHandle_ulne8_76 {
  font-family: var(--ds-font-mono);
  font-size: 13px;
  color: var(--ds-text-muted);
}

/* ===== Status badge ===== */
._heroStbadge_ulne8_83 {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: 12px;
  font-weight: 600;
  padding: 4px 11px;
  border-radius: var(--ds-radius-pill);
  border: 1px solid var(--ds-border);
}

._dot_ulne8_94 {
  width: 7px;
  height: 7px;
  border-radius: 50%;
}

/* ok variant */
._stBadgeOk_ulne8_101 {
  color: var(--ds-text-muted);
}
._stBadgeOk_ulne8_101 ._dot_ulne8_94 {
  background: var(--ds-success);
}

/* warn variant — no matching token; keep verbatim for 1:1 */
._stBadgeWarn_ulne8_109 {
  color: #b45309;
  background: #fffbeb;
  border-color: #fde68a;
}
._stBadgeWarn_ulne8_109 ._dot_ulne8_94 {
  background: var(--ds-warning);
}

/* cool (danger) variant — analogous to warn, uses --ds-danger */
._stBadgeCool_ulne8_119 {
  color: var(--ds-danger);
  background: #fef2f2;
  border-color: #fca5a5;
}
._stBadgeCool_ulne8_119 ._dot_ulne8_94 {
  background: var(--ds-danger);
}

/* ===== Bio ===== */
._heroBio_ulne8_129 {
  margin-top: 11px;
  font-size: 14px;
  line-height: 1.6;
  color: var(--ds-text-muted);
  max-width: 560px;
}

._heroUpdated_ulne8_137 {
  margin-top: 6px;
  font-size: 12px;
  line-height: 1.4;
  color: var(--ds-text-subtle);
}

/* ===== Stats ===== */
._heroStats_ulne8_145 {
  display: flex;
  gap: 34px;
  margin-top: 20px;
}

._stat_ulne8_151 b {
  display: block;
  font-family: var(--ds-font-mono);
  font-size: 24px;
  font-weight: 600;
  letter-spacing: -0.02em;
  line-height: 1;
}

._stat_ulne8_151 span {
  display: block;
  font-size: 12px;
  color: var(--ds-text-muted);
  margin-top: 6px;
}

/* Placeholder value — subtle color, not a number */
._statPlaceholder_ulne8_168 {
  display: block;
  font-family: var(--ds-font-mono);
  font-size: 12px;
  font-weight: 500;
  letter-spacing: 0;
  line-height: 1;
  color: var(--ds-text-subtle);
}

/* ===== Right CTAs ===== */
._heroRight_ulne8_179 {
  flex-shrink: 0;
  display: flex;
  flex-direction: column;
  gap: 10px;
  align-items: stretch;
  width: 178px;
}

/* ink-on-ink: --ds-text bg, --ds-text-on-ink color */
._btnInk_ulne8_189 {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  height: 42px;
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
  border: none;
  border-radius: var(--ds-radius-md);
  font-size: 14px;
  font-weight: 700;
  cursor: pointer;
  transition: transform 0.12s;
}

._btnInk_ulne8_189:hover {
  transform: translateY(-1px);
}

._btnInk_ulne8_189:disabled {
  opacity: 0.4;
  cursor: not-allowed;
  transform: none;
}

/* reauth = same ink style as btn-ink in prototype */
._btnReauth_ulne8_216 {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 7px;
  height: 42px;
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
  border: none;
  border-radius: var(--ds-radius-md);
  font-size: 13px;
  font-weight: 700;
  cursor: pointer;
}

._btnGhost_ulne8_231 {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 7px;
  height: 42px;
  background: var(--ds-bg);
  color: var(--ds-text);
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-md);
  font-size: 13px;
  font-weight: 600;
  cursor: pointer;
}

._btnGhost_ulne8_231:hover {
  background: var(--ds-bg-alt);
}

._btnPersona_ulne8_250 {
  background: transparent;
  color: var(--ds-text-muted);
  border-color: var(--ds-border);
  font-weight: 500;
}

._btnPersona_ulne8_250:hover {
  background: var(--ds-bg);
  color: var(--ds-text);
}

@media (max-width: 760px) {
  ._heroMain_ulne8_13 {
    flex-direction: column;
  }

  ._heroRight_ulne8_179 {
    width: 100%;
    flex-direction: row;
    flex-wrap: wrap;
  }
}
._hostCard_mrgo2_1 {
  margin-top: 22px;
  color: var(--ds-text);
  font-family: var(--ds-font);
}

/* ===== Agent 标记（ink 方块 + 闪电）===== */
._agentMark_mrgo2_8 {
  width: 44px;
  height: 44px;
  flex-shrink: 0;
  display: grid;
  place-items: center;
  border-radius: var(--ds-radius-md);
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
}

/* ===== 未托管 · 运营 Agent 邀请 ===== */
._invite_mrgo2_20 {
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-lg);
  background: var(--ds-bg);
}

._inviteTop_mrgo2_26 {
  display: flex;
  align-items: flex-start;
  gap: 16px;
  padding: 22px 22px 20px;
}

._inviteMain_mrgo2_33 {
  flex: 1;
  min-width: 0;
}

._inviteTitle_mrgo2_38 {
  margin: 2px 0 0;
  color: var(--ds-text);
  font-size: 18px;
  font-weight: 800;
  letter-spacing: -0.01em;
}

._inviteDesc_mrgo2_46 {
  margin: 7px 0 0;
  max-width: 560px;
  color: var(--ds-text-muted);
  font-size: 13.5px;
  line-height: 1.6;
}

/* 三步流程 + 主按钮同排 */
._inviteMid_mrgo2_55 {
  display: flex;
  align-items: center;
  justify-content: space-between;
  flex-wrap: wrap;
  gap: 14px;
  margin-top: 18px;
}

._steps_mrgo2_64 {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px 10px;
}

._step_mrgo2_64 {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  color: var(--ds-text-muted);
  font-size: 13px;
}

._step_mrgo2_64 i {
  width: 20px;
  height: 20px;
  display: grid;
  place-items: center;
  border: 1px solid var(--ds-border-strong);
  border-radius: 50%;
  color: var(--ds-text);
  font-family: var(--ds-font-mono);
  font-size: 11px;
  font-weight: 700;
  font-style: normal;
}

._stepArr_mrgo2_93 {
  color: var(--ds-text-subtle);
}

._inviteHint_mrgo2_97 {
  margin: 14px 0 0;
  color: var(--ds-text-subtle);
  font-size: 12.5px;
}

._cta_mrgo2_103 {
  height: 38px;
  padding: 0 18px;
  border: 1px solid var(--ds-text);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
  font-size: 13px;
  font-weight: 700;
  white-space: nowrap;
  cursor: pointer;
}

._cta_mrgo2_103:hover {
  opacity: 0.9;
}

/* ===== 运营中 · Agent 工位 ===== */
._runCard_mrgo2_121 {
  padding: 20px 22px;
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-lg);
  background: var(--ds-bg-alt);
}

._runHead_mrgo2_128 {
  display: flex;
  align-items: center;
  gap: 13px;
}

._runId_mrgo2_134 {
  flex: 1;
  min-width: 0;
}

._runTitle_mrgo2_139 {
  display: flex;
  align-items: center;
  gap: 9px;
  color: var(--ds-text);
  font-size: 15px;
  font-weight: 800;
}

._runBadge_mrgo2_148 {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  height: 22px;
  padding: 0 9px;
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-pill);
  color: var(--ds-text-muted);
  font-size: 11px;
  font-weight: 700;
  white-space: nowrap;
}

._runDot_mrgo2_162 {
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: var(--ds-success);
}

._runBadge_mrgo2_148[data-warn='true'] {
  color: var(--ds-danger);
  border-color: var(--ds-danger);
}

._runBadge_mrgo2_148[data-warn='true'] ._runDot_mrgo2_162 {
  background: var(--ds-danger);
}

._runSub_mrgo2_178 {
  overflow: hidden;
  margin-top: 4px;
  color: var(--ds-text-muted);
  font-size: 12px;
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* 配置 + 暂停（右上角并排） */
._actions_mrgo2_188 {
  display: flex;
  align-items: center;
  gap: 8px;
  flex-shrink: 0;
}

._configBtn_mrgo2_195 {
  height: 32px;
  padding: 0 14px;
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg);
  color: var(--ds-text);
  font-size: 12px;
  font-weight: 700;
  cursor: pointer;
}

._configBtn_mrgo2_195:hover {
  border-color: var(--ds-text);
}

._pause_mrgo2_211 {
  height: 32px;
  padding: 0 14px;
  border: 1px solid transparent;
  border-radius: var(--ds-radius-sm);
  background: transparent;
  color: var(--ds-text-muted);
  font-size: 12px;
  font-weight: 700;
  white-space: nowrap;
  cursor: pointer;
}

._pause_mrgo2_211:hover {
  border-color: var(--ds-border-strong);
  background: var(--ds-bg);
  color: var(--ds-text);
}

._pause_mrgo2_211:disabled {
  opacity: 0.45;
  cursor: not-allowed;
}

/* 异常提示行（仅 last_run_status 异常时） */
._alert_mrgo2_236 {
  margin-top: 16px;
  padding: 12px 14px;
  border: 1px solid var(--ds-danger);
  border-radius: var(--ds-radius-md);
  background: var(--ds-bg);
}

._alertMsg_mrgo2_244 {
  color: var(--ds-danger);
  font-size: 13px;
  line-height: 1.5;
}

/* 头部内联 exec 指标行（vA-tree .hc-exec）：右对齐 klabel + mono 值 */
._execRow_mrgo2_251 {
  margin-left: auto;
  display: flex;
  flex-wrap: wrap;
  gap: 8px 22px;
}

._execItem_mrgo2_258 {
  display: flex;
  flex-direction: column;
  gap: 3px;
  min-width: 0;
}

._execK_mrgo2_265 {
  font-family: var(--ds-font-mono);
  font-size: 9px;
  font-weight: 500;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--ds-text-subtle);
  white-space: nowrap;
}

._execV_mrgo2_275 {
  color: var(--ds-text);
  font-family: var(--ds-font-mono);
  font-size: 15px;
  font-weight: 600;
  font-variant-numeric: tabular-nums;
  line-height: 1;
  white-space: nowrap;
}

/* 托管策略行（vA-tree strat-row）：mono klabel + 值，缺失项不占位 */
._stratRow_mrgo2_286 {
  display: flex;
  flex-wrap: wrap;
  gap: 14px 32px;
  margin-top: 18px;
  padding-top: 16px;
  border-top: 1px solid var(--ds-border);
}

._stratItem_mrgo2_295 {
  display: flex;
  flex-direction: column;
  gap: 5px;
  min-width: 0;
}

._stratK_mrgo2_302 {
  font-family: var(--ds-font-mono);
  font-size: 10px;
  font-weight: 500;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--ds-text-subtle);
}

._stratV_mrgo2_311 {
  color: var(--ds-text);
  font-size: 13px;
  font-weight: 650;
}
/*
 * MatrixAccountInsights — 近期表现 | 相关待确认 两栏
 * 视觉 source: docs/design/2026-07-01-publish-matrix-vA-tree.html（.dgrid / .dcard / .metrics）
 * round / spacing 全部 --ds-* token；console no-azure（design.md §12）。
 */
._dgrid_zfn5n_3 {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
  gap: 12px;
  align-items: start;
  margin-top: 12px;
}

._dcard_zfn5n_3 {
  padding: 16px 18px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-lg);
  background: var(--ds-bg);
  color: var(--ds-text);
}

._dcard_zfn5n_3 h4 {
  margin: 0 0 12px;
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: 13px;
  font-weight: 600;
}

._cnt_zfn5n_31 {
  font-family: var(--ds-font-mono);
  font-size: 11px;
  font-weight: 600;
  color: #b45309;
}

/* ── 近期表现 metrics（vA-tree .metrics / .metric） ── */
._metrics_zfn5n_3 {
  display: flex;
  flex-wrap: wrap;
  gap: 14px 26px;
}

._metric_zfn5n_3 {
  display: flex;
  flex-direction: column;
  gap: 6px;
  min-width: 0;
}

._klabel_zfn5n_52 {
  font-family: var(--ds-font-mono);
  font-size: 10px;
  font-weight: 500;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--ds-text-subtle);
}

._metricVal_zfn5n_61 {
  font-family: var(--ds-font-mono);
  font-size: 20px;
  font-weight: 600;
  font-variant-numeric: tabular-nums;
  color: var(--ds-text);
  line-height: 1;
}

._metricPending_zfn5n_70 {
  font-size: 12px;
  color: var(--ds-text-subtle);
}

/* ── 相关待确认 ── */
._pendEmpty_zfn5n_76 {
  margin: 0;
  padding: 6px 0;
  color: var(--ds-text-muted);
  font-size: 12px;
  line-height: 1.6;
}

._reauthNote_zfn5n_84 {
  display: flex;
  align-items: baseline;
  gap: 8px;
  padding: 10px 12px;
  border: 1px solid #fce4a6;
  border-radius: var(--ds-radius-md);
  background: #fffbeb;
  color: #b45309;
  font-size: 12px;
  line-height: 1.55;
}

._reauthTag_zfn5n_97 {
  flex: 0 0 auto;
  font-family: var(--ds-font-mono);
  font-size: 10px;
  font-weight: 600;
  letter-spacing: 0.06em;
  text-transform: uppercase;
}

@media (max-width: 700px) {
  ._dgrid_zfn5n_3 {
    grid-template-columns: 1fr;
  }
}
/* WorkGridItem 样式
   复刻 docs/design/2026-06-23-canvas-workbench-scheme-E.html
     § .work / .work-thumb / .work-grad / .work-dur / .work-bottom / .work-title / .work-stats
   .work 盒尺寸走单源 token var(--vcard-aspect)，禁写 9/16 字面量。
*/

._work_1q41x_3 {
  position: relative;
  border-radius: var(--ds-radius-lg);
  overflow: hidden;
  background: var(--ds-bg-deep);
  aspect-ratio: var(--vcard-aspect);
  transition: transform 0.14s, box-shadow 0.14s;
}

._interactive_1q41x_16 {
  cursor: pointer;
}

._interactive_1q41x_16:hover {
  transform: translateY(-3px);
  box-shadow: 0 14px 28px -16px rgba(24, 24, 27, 0.5);
}

._workThumb_1q41x_25 {
  position: absolute;
  inset: 0;
  display: grid;
  place-items: center;
  background: var(--ds-bg-deep);
}

._workGrad_1q41x_33 {
  position: absolute;
  inset: 0;
  background: linear-gradient(to top, rgba(0, 0, 0, 0.62) 0%, rgba(0, 0, 0, 0) 42%);
}

._workDur_1q41x_39 {
  position: absolute;
  right: 8px;
  top: 8px;
  font-family: var(--ds-font-mono);
  font-size: 10px;
  font-weight: 600;
  color: #fff;
  background: rgba(0, 0, 0, 0.5);
  border-radius: 5px;
  padding: 1px 6px;
}

._workBottom_1q41x_52 {
  position: absolute;
  left: 10px;
  right: 10px;
  bottom: 9px;
  color: #fff;
}

._workTitle_1q41x_60 {
  font-size: 12px;
  font-weight: 600;
  line-height: 1.3;
  overflow: hidden;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  line-clamp: 2;
  -webkit-box-orient: vertical;
  text-shadow: 0 1px 3px rgba(0, 0, 0, 0.4);
}

._workStats_1q41x_72 {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 4px 8px;
  margin-top: 5px;
  font-family: var(--ds-font-mono);
  font-size: 11px;
  font-weight: 600;
}

._workStat_1q41x_72 {
  display: inline-flex;
  align-items: center;
  gap: 3px;
  min-width: 0;
}

._workStat_1q41x_72 svg {
  flex: 0 0 auto;
  opacity: 0.9;
}
/* 事件流列表（作品墙「动态」tab 内容）。顶部间距与视频/文章网格对齐（20px）。 */
._list_1bvel_2 {
  display: grid;
  gap: 8px;
  margin-top: 20px;
  font-family: var(--ds-font);
}

._item_1bvel_9 {
  display: grid;
  grid-template-columns: 34px minmax(0, 1fr);
  gap: 11px;
  align-items: center;
  min-height: 58px;
  padding: 10px 12px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-md);
  background: var(--ds-bg-alt);
}

._itemWarning_1bvel_21 {
  border-color: var(--ds-warning);
  background: var(--ds-bg-alt);
}

._iconBox_1bvel_26 {
  width: 34px;
  height: 34px;
  display: grid;
  place-items: center;
  border-radius: var(--ds-radius-sm);
  background: var(--ds-surface);
  color: var(--ds-text-muted);
}

._itemWarning_1bvel_21 ._iconBox_1bvel_26 {
  color: var(--ds-warning);
}

._copy_1bvel_40 {
  min-width: 0;
}

._copy_1bvel_40 b {
  display: block;
  overflow: hidden;
  color: var(--ds-text);
  font-size: 13px;
  font-weight: 700;
  line-height: 1.45;
  text-overflow: ellipsis;
  white-space: nowrap;
}

._copy_1bvel_40 span {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 6px 10px;
  margin-top: 3px;
  color: var(--ds-text-muted);
  font-size: 11.5px;
  min-width: 0;
}

._copy_1bvel_40 strong {
  overflow: hidden;
  font-weight: 600;
  text-overflow: ellipsis;
  white-space: nowrap;
}

._copy_1bvel_40 i {
  flex-shrink: 0;
  color: var(--ds-text-subtle);
  font-style: normal;
}

._reason_1bvel_79 {
  margin: 3px 0 0;
  color: var(--ds-text-muted);
  font-size: 12px;
  line-height: 1.45;
}

._pushMark_1bvel_86 {
  flex-shrink: 0;
  padding: 2px 6px;
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg);
  color: var(--ds-warning);
  font-style: normal;
  font-weight: 700;
}
/* MatrixWorksGrid 样式
   复刻 docs/design/2026-06-23-canvas-workbench-scheme-E.html
     § .works-head / .works-tabs / .works-tab / .works-sort / .works-grid
   （.work* 卡内样式见 WorkGridItem.module.css）
   Off-grid 原型值（margin-top:34px、gap:16px、minmax(168px,…) 等）保持 verbatim。
*/

._worksRoot_j2frl_8 {
  display: block;
}

/* ===== works head ===== */
._worksHead_j2frl_13 {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-top: 34px;
  border-bottom: 1px solid var(--ds-border);
}

._worksTabs_j2frl_21 {
  display: flex;
  gap: 4px;
}

._worksTab_j2frl_21 {
  position: relative;
  background: none;
  border: none;
  padding: 11px 4px;
  margin-right: 22px;
  font-size: 15px;
  font-weight: 600;
  color: var(--ds-text-muted);
  cursor: pointer;
}

._worksTab_j2frl_21._on_j2frl_38 {
  color: var(--ds-text);
  font-weight: 700;
}

._worksTab_j2frl_21._on_j2frl_38::after {
  content: '';
  position: absolute;
  left: 0;
  right: 0;
  bottom: -1px;
  height: 2px;
  background: var(--ds-text);
  border-radius: 2px;
}

._n_j2frl_54 {
  font-family: var(--ds-font-mono);
  font-size: 12px;
  color: var(--ds-text-subtle);
  margin-left: 5px;
}

/* ===== works sort ===== */
._worksSort_j2frl_62 {
  font-size: 12px;
  color: var(--ds-text-muted);
  display: flex;
  align-items: center;
  gap: 12px;
}

._sortActive_j2frl_70 {
  color: var(--ds-text);
  font-weight: 600;
}

._sortOption_j2frl_75 {
  background: none;
  border: none;
  font-size: 12px;
  color: var(--ds-text-subtle);
  cursor: not-allowed;
  padding: 0;
}

._sortOption_j2frl_75:disabled {
  opacity: 0.5;
}

._worksHint_j2frl_88 {
  margin: 10px 0 0;
  font-size: 12px;
  line-height: 1.6;
  color: var(--ds-text-subtle);
}

/* ===== works grid ===== */
._worksGrid_j2frl_96 {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(168px, 1fr));
  gap: 16px;
  margin-top: 20px;
}

._worksEmpty_j2frl_103 {
  margin-top: 20px;
  padding: 44px 0;
  text-align: center;
  font-size: 13px;
  color: var(--ds-text-subtle);
}

._worksError_j2frl_111 {
  color: var(--ds-danger, #c2410c);
}

._worksRetry_j2frl_115 {
  margin-top: 12px;
  border: 1px solid var(--ds-border);
  background: var(--ds-bg);
  color: var(--ds-text);
  font-size: 13px;
  font-weight: 600;
  padding: 7px 12px;
  cursor: pointer;
}

._worksRetry_j2frl_115:hover {
  border-color: var(--ds-text-muted);
}

@media (max-width: 700px) {
  ._worksHead_j2frl_13 {
    margin-top: var(--ds-space-5);
  }

  ._worksSort_j2frl_62 {
    display: none;
  }

  ._worksGrid_j2frl_96 {
    grid-template-columns: minmax(0, min(100%, 240px));
    justify-content: center;
  }
}
._pubPage_1lfaf_1 {
  position: fixed;
  top: var(--ds-header-height);
  left: 0;
  right: 0;
  bottom: 0;
  /* 盖住底层 MatrixAccountSidebar(z1000) 与 chat-handle(z1001)；对话坞(z1000)靠下方让位不重叠、
     输入框(z1100)更高浮其上。插件引导 ExtensionGuideModal 须显式 zIndex>1100（见
     EXTENSION_GUIDE_MODAL_Z_INDEX），否则引导会被本层压住导致整页点不了。 */
  z-index: 1005;
  display: flex;
  flex-direction: column;
  background: var(--ds-bg);
  color: var(--ds-text);
  font-family: var(--ds-font);
  animation: _ppFade_1lfaf_1 0.22s ease;
  transition: right 0.36s cubic-bezier(0.16, 1, 0.3, 1);
}

/* 对话坞展开(!collapsed → console-shell 加 --publish-persona-dock)时，发布作品页右侧让出对话坞宽度，
   与账号主页 padding-right 让位同步；收起态 right:0 铺满。 */
.console-shell--publish-persona-dock ._pubPage_1lfaf_1 {
  right: min(420px, 28vw);
}

@media (max-width: 900px) {
  .console-shell--publish-persona-dock ._pubPage_1lfaf_1 {
    right: 0;
  }
}

@keyframes _ppFade_1lfaf_1 {
  from {
    opacity: 0;
  }

  to {
    opacity: 1;
  }
}

._ppHead_1lfaf_42 {
  flex-shrink: 0;
  height: 60px;
  display: flex;
  align-items: center;
  gap: var(--ds-space-4);
  padding: 0 22px;
  border-bottom: 1px solid var(--ds-border);
  background: var(--ds-surface);
}

._ppBack_1lfaf_53 {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  min-height: 32px;
  padding: 0;
  border: 0;
  background: none;
  color: var(--ds-text-muted);
  cursor: pointer;
  font: inherit;
  font-size: 13px;
  font-weight: 600;
}

._ppBack_1lfaf_53:hover {
  color: var(--ds-text);
}

._ppBack_1lfaf_53:focus-visible,
._ppX_1lfaf_73:focus-visible {
  outline: none;
  box-shadow: var(--ds-focus-ring);
}

._ppHtitle_1lfaf_78 {
  flex-shrink: 0;
  font-size: 15px;
  font-weight: 800;
}

._ppTarget_1lfaf_84 {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  max-width: min(360px, 44vw);
  min-width: 0;
  padding: 5px 12px 5px 6px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-pill);
  background: var(--ds-bg-alt);
}

._targetAvatar_1lfaf_96 {
  position: relative;
  width: 26px;
  height: 26px;
  flex-shrink: 0;
  display: grid;
  place-items: center;
  border-radius: 50%;
  background: var(--ds-bg-deep);
  font-size: 11px;
  font-weight: 700;
  line-height: 1;
}

._targetBadge_1lfaf_110 {
  position: absolute;
  right: -3px;
  bottom: -3px;
  width: 13px;
  height: 13px;
  display: grid;
  place-items: center;
  border: 1.5px solid var(--ds-bg-alt);
  border-radius: 4px;
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
  font-size: 7px;
  line-height: 1;
}

._targetText_1lfaf_126 {
  min-width: 0;
  display: flex;
  flex-direction: column;
  gap: 1px;
}

._targetText_1lfaf_126 b,
._targetText_1lfaf_126 span {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

._targetText_1lfaf_126 b {
  font-size: 12px;
  font-weight: 700;
  line-height: 1.2;
}

._targetText_1lfaf_126 span {
  color: var(--ds-text-muted);
  font-size: 11px;
  line-height: 1.2;
}

._ppX_1lfaf_73 {
  width: 32px;
  height: 32px;
  margin-left: auto;
  border: 0;
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg-alt);
  color: var(--ds-text-muted);
  cursor: pointer;
  display: grid;
  place-items: center;
}

._ppX_1lfaf_73:hover {
  background: var(--ds-bg-deep);
  color: var(--ds-text);
}

._ppBody_1lfaf_170 {
  flex: 1;
  min-height: 0;
  overflow: hidden;
  background: var(--ds-bg);
}

._ppSplit_1lfaf_177 {
  height: 100%;
  min-height: 0;
  display: grid;
  grid-template-columns: 296px minmax(0, 1fr);
}

._detailPane_1lfaf_184 {
  min-width: 0;
  min-height: 0;
  overflow-y: auto;
}

._detailPane_1lfaf_184::-webkit-scrollbar {
  width: 0;
}

._detailEmpty_1lfaf_194 {
  height: 100%;
  min-height: 360px;
  display: grid;
  place-items: center;
  padding: var(--ds-space-6);
  color: var(--ds-text-subtle);
  font-size: 13px;
  line-height: 1.6;
  text-align: center;
}

._ppFoot_1lfaf_206 {
  flex-shrink: 0;
  min-height: 61px;
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: var(--ds-space-3);
  padding: 14px 24px;
  border-top: 1px solid var(--ds-border);
  background: var(--ds-surface);
}

._footMeta_1lfaf_218 {
  min-width: 0;
  flex: 1;
  overflow: hidden;
  color: var(--ds-text-muted);
  font-size: 12px;
  font-weight: 600;
  text-overflow: ellipsis;
  white-space: nowrap;
}

._saveError_1lfaf_229 {
  max-width: 360px;
  color: #be123c;
  font-size: 12px;
  font-weight: 700;
}

._publishButton_1lfaf_236,
._primaryAction_1lfaf_237 {
  min-height: 36px;
  border: 0;
  border-radius: var(--ds-radius-sm);
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
  cursor: pointer;
  font: inherit;
  font-size: 13px;
  font-weight: 800;
  padding: 0 16px;
}

._publishButton_1lfaf_236:hover:not(:disabled),
._primaryAction_1lfaf_237:hover {
  box-shadow: var(--ds-shadow-cta-primary);
}

._publishButton_1lfaf_236:focus-visible,
._primaryAction_1lfaf_237:focus-visible {
  outline: none;
  box-shadow: var(--ds-focus-ring);
}

._publishButton_1lfaf_236:disabled {
  background: var(--ds-border-strong);
  color: var(--ds-text-subtle);
  cursor: not-allowed;
}

._ppCenter_1lfaf_267 {
  height: 100%;
  min-height: 360px;
  display: flex;
  align-items: center;
  justify-content: center;
  flex-direction: column;
  padding: var(--ds-space-6);
  text-align: center;
}

._ppCenter_1lfaf_267 h2 {
  margin: 16px 0 0;
  color: var(--ds-text);
  font-size: 18px;
  font-weight: 850;
  letter-spacing: 0;
}

._ppCenter_1lfaf_267 p {
  max-width: 420px;
  margin: 8px 0 0;
  color: var(--ds-text-muted);
  font-size: 13px;
  line-height: 1.7;
}

._primaryAction_1lfaf_237 {
  margin-top: 22px;
}

._succMark_1lfaf_298,
._errorMark_1lfaf_299 {
  width: 62px;
  height: 62px;
  display: grid;
  place-items: center;
  border-radius: 50%;
}

._succMark_1lfaf_298 {
  background: rgba(20, 120, 74, 0.1);
  color: #14784a;
}

._errorMark_1lfaf_299 {
  background: rgba(190, 18, 60, 0.1);
  color: #be123c;
}

._spin_1lfaf_317 {
  width: 58px;
  height: 58px;
  border: 3px solid var(--ds-border);
  border-top-color: var(--ds-text);
  border-radius: 50%;
  animation: _ppSpin_1lfaf_1 0.9s linear infinite;
}

._progressNote_1lfaf_326 {
  margin-top: 14px;
  color: var(--ds-text-subtle);
  font-size: 12px;
}

@keyframes _ppSpin_1lfaf_1 {
  to {
    transform: rotate(360deg);
  }
}

@media (max-width: 720px) {
  ._ppHead_1lfaf_42 {
    gap: var(--ds-space-3);
    padding: 0 var(--ds-space-4);
  }

  ._ppTarget_1lfaf_84 {
    max-width: 38vw;
  }

  ._ppHtitle_1lfaf_78 {
    font-size: 14px;
  }

  ._ppSplit_1lfaf_177 {
    grid-template-columns: 1fr;
  }
}
._root_ugae6_1 {
  height: 100%;
  min-height: 0;
  display: grid;
  grid-template-columns: 296px minmax(0, 1fr);
  color: var(--ds-text);
  background: var(--ds-bg);
  font-family: var(--ds-font);
}

._pick_ugae6_11 {
  min-height: 0;
  display: flex;
  flex-direction: column;
  border-right: 1px solid var(--ds-border);
  background: var(--ds-bg-alt);
}

._seg_ugae6_19 {
  display: flex;
  gap: 2px;
  margin: 15px 14px 0;
  padding: 3px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-md);
  background: var(--ds-bg);
}

._segButton_ugae6_29 {
  flex: 1;
  min-width: 0;
  border: 0;
  border-radius: 7px;
  background: none;
  color: var(--ds-text-muted);
  cursor: pointer;
  font: inherit;
  font-size: 13px;
  font-weight: 600;
  padding: 7px 0;
}

._segButton_ugae6_29:hover {
  color: var(--ds-text);
}

._segButton_ugae6_29:focus-visible {
  outline: none;
  box-shadow: var(--ds-focus-ring);
}

._segButton_ugae6_29 span {
  margin-left: 4px;
  font-family: var(--ds-font-mono);
  font-size: 11px;
  opacity: 0.72;
}

._segOn_ugae6_59 {
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
}

._pickTop_ugae6_64 {
  flex-shrink: 0;
  display: flex;
  align-items: end;
  justify-content: space-between;
  gap: var(--ds-space-3);
  padding: 18px 14px 12px;
}

._eyebrow_ugae6_73 {
  color: var(--ds-text);
  font-size: 13px;
  font-weight: 800;
}

._count_ugae6_79 {
  color: var(--ds-text-subtle);
  font-size: 11px;
  font-weight: 600;
}

._list_ugae6_85 {
  flex: 1;
  min-height: 0;
  overflow-y: auto;
  padding: 0 10px 14px;
}

._list_ugae6_85::-webkit-scrollbar {
  width: 0;
}

._item_ugae6_96 {
  width: 100%;
  min-width: 0;
  display: flex;
  align-items: center;
  gap: 11px;
  margin-bottom: 3px;
  padding: 8px;
  border: 1.5px solid transparent;
  border-radius: var(--ds-radius-md);
  background: none;
  color: inherit;
  cursor: pointer;
  font: inherit;
  text-align: left;
}

._item_ugae6_96:hover,
._item_ugae6_96._on_ugae6_114 {
  background: var(--ds-bg);
}

._item_ugae6_96._on_ugae6_114 {
  border-color: var(--ds-text);
}

._item_ugae6_96:focus-visible,
._publish_ugae6_123:focus-visible {
  outline: none;
  box-shadow: var(--ds-focus-ring);
}

._thumb_ugae6_128 {
  width: 46px;
  height: 60px;
  flex-shrink: 0;
  display: grid;
  place-items: center;
  border-radius: 7px;
  background: var(--ds-bg-deep);
  color: var(--ds-text-muted);
  font-size: 12px;
  font-weight: 850;
}

._itemText_ugae6_141 {
  flex: 1;
  min-width: 0;
}

._itemText_ugae6_141 b {
  display: -webkit-box;
  overflow: hidden;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 2;
  color: var(--ds-text);
  font-size: 12.5px;
  font-weight: 650;
  line-height: 1.35;
}

._itemText_ugae6_141 span {
  display: block;
  margin-top: 4px;
  color: var(--ds-text-subtle);
  font-size: 11px;
}

._empty_ugae6_164 {
  min-height: 240px;
  display: grid;
  place-items: center;
  padding: var(--ds-space-5);
  color: var(--ds-text-subtle);
  font-size: 13px;
  line-height: 1.6;
  text-align: center;
}

._detail_ugae6_175 {
  min-width: 0;
  min-height: 0;
  overflow-y: auto;
}

._detail_ugae6_175::-webkit-scrollbar {
  width: 9px;
}

._detail_ugae6_175::-webkit-scrollbar-thumb {
  border: 2px solid var(--ds-bg);
  border-radius: 4px;
  background: var(--ds-border-strong);
}

._inner_ugae6_191 {
  max-width: 820px;
  margin: 0 auto;
  padding: 26px 32px 36px;
}

._edit_ugae6_197 {
  display: grid;
  grid-template-columns: 248px minmax(0, 1fr);
  gap: var(--ds-space-6);
}

._preview_ugae6_203 {
  min-width: 0;
}

._cover_ugae6_207 {
  aspect-ratio: 9 / 16;
  display: grid;
  place-items: center;
  overflow: hidden;
  border-radius: var(--ds-radius-lg);
  background: var(--ds-bg-deep);
  color: var(--ds-text-muted);
  font-size: 13px;
  font-weight: 750;
}

._coverLabel_ugae6_219 {
  margin-top: 13px;
  color: var(--ds-text-muted);
  font-size: 11px;
  font-weight: 700;
}

._coverAdd_ugae6_226 {
  width: 72px;
  min-height: 32px;
  display: grid;
  place-items: center;
  margin-top: 9px;
  border: 1.5px dashed var(--ds-border-strong);
  border-radius: var(--ds-radius-sm);
  color: var(--ds-text-subtle);
  font-size: 11px;
  font-weight: 650;
}

._form_ugae6_239 {
  min-width: 0;
}

._block_ugae6_243 {
  margin-bottom: 18px;
}

._block_ugae6_243 label {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--ds-space-3);
  margin-bottom: 8px;
  color: var(--ds-text);
  font-size: 12px;
  font-weight: 700;
}

._block_ugae6_243 label span {
  color: var(--ds-text-subtle);
  font-family: var(--ds-font-mono);
  font-size: 10px;
  font-weight: 500;
}

._input_ugae6_265,
._textarea_ugae6_266 {
  width: 100%;
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-sm);
  padding: 9px 11px;
  outline: none;
  color: var(--ds-text);
  font: inherit;
  font-size: 13px;
}

._textarea_ugae6_266 {
  min-height: 78px;
  resize: none;
}

._input_ugae6_265:focus {
  border-color: var(--ds-text);
  box-shadow: 0 0 0 3px rgba(24, 24, 27, 0.06);
}

._input_ugae6_265[readonly],
._textarea_ugae6_266:disabled {
  background: var(--ds-bg-alt);
  color: var(--ds-text-muted);
}

._group_ugae6_293 {
  margin-top: 6px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-lg);
  padding: 2px 14px;
}

._opt_ugae6_300 {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--ds-space-3);
  padding: 12px 0;
}

._opt_ugae6_300 + ._opt_ugae6_300 {
  border-top: 1px solid var(--ds-border);
}

._opt_ugae6_300 b {
  color: var(--ds-text);
  font-size: 13px;
  font-weight: 650;
}

._opt_ugae6_300 span {
  display: block;
  margin-top: 1px;
  color: var(--ds-text-subtle);
  font-size: 11px;
}

._opt_ugae6_300 em {
  flex-shrink: 0;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-pill);
  color: var(--ds-text-subtle);
  font-size: 11px;
  font-style: normal;
  font-weight: 650;
  padding: 2px 8px;
}

._progress_ugae6_336 {
  display: flex;
  align-items: flex-start;
  gap: var(--ds-space-3);
  margin-top: 18px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-lg);
  background: var(--ds-bg-alt);
  padding: 14px;
}

._progressIcon_ugae6_347 {
  width: 34px;
  height: 34px;
  flex-shrink: 0;
  display: grid;
  place-items: center;
  border-radius: var(--ds-radius-sm);
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
}

._progressText_ugae6_358 {
  min-width: 0;
}

._progressText_ugae6_358 b {
  display: block;
  color: var(--ds-text);
  font-size: 13px;
  font-weight: 800;
}

._progressText_ugae6_358 span,
._progressText_ugae6_358 a {
  display: block;
  margin-top: 3px;
  color: var(--ds-text-muted);
  font-size: 12px;
  line-height: 1.5;
}

._progressText_ugae6_358 a {
  color: var(--ds-text);
  font-weight: 700;
  text-decoration: none;
}

._error_ugae6_384 {
  margin-top: 10px;
  color: var(--ds-danger);
  font-size: 12px;
  line-height: 1.5;
}

._publish_ugae6_123 {
  min-height: 38px;
  display: inline-flex;
  align-items: center;
  gap: 7px;
  margin-top: 16px;
  border: 0;
  border-radius: var(--ds-radius-sm);
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
  cursor: pointer;
  font: inherit;
  font-size: 13px;
  font-weight: 850;
  padding: 0 16px;
}

._publish_ugae6_123:hover:not(:disabled) {
  box-shadow: var(--ds-shadow-cta-primary);
}

._publish_ugae6_123:disabled {
  background: var(--ds-border-strong);
  color: var(--ds-text-subtle);
  cursor: not-allowed;
}

._detailEmpty_ugae6_418 {
  height: 100%;
  min-height: 360px;
  display: grid;
  place-items: center;
  padding: var(--ds-space-6);
  color: var(--ds-text-subtle);
  font-size: 13px;
  line-height: 1.6;
  text-align: center;
}

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

  ._pick_ugae6_11 {
    max-height: 280px;
    border-right: 0;
    border-bottom: 1px solid var(--ds-border);
  }

  ._inner_ugae6_191 {
    padding: var(--ds-space-5);
  }

  ._edit_ugae6_197 {
    grid-template-columns: 1fr;
  }

  ._preview_ugae6_203 {
    max-width: 248px;
  }
}
/* InstallOnboarding.module.css — 移植自 install-wizard-flow.html .stage / .left / .right */
._stage_kkrzn_1 { flex: 1; min-width: 0; display: grid; grid-template-columns: minmax(0, 0.92fr) minmax(0, 1.08fr); }
._left_kkrzn_1 { padding: 0 clamp(28px, 3.2vw, 50px); display: flex; flex-direction: column; justify-content: center; }
._stepWrap_kkrzn_4 { margin-bottom: 28px; }
._title_kkrzn_5 { font-size: 26px; font-weight: 700; letter-spacing: -0.02em; margin: 0 0 12px; line-height: 1.2; color: var(--ds-text); }
._lead_kkrzn_6 { font-size: 14px; line-height: 1.6; color: var(--ds-text-muted); margin: 0 0 22px; max-width: 360px; }
._acts_kkrzn_7 { display: flex; align-items: center; gap: 16px; }
._ctaPrimary_kkrzn_8 {
  appearance: none; cursor: pointer; font-family: inherit; border: 0;
  background: var(--ds-text); color: var(--ds-text-on-ink);
  font-size: 14px; font-weight: 600; height: 44px; padding: 0 22px;
  border-radius: var(--ds-radius-md); display: inline-flex; align-items: center; justify-content: center; gap: 9px;
  transition: transform 0.15s ease, box-shadow 0.15s ease, opacity 0.15s;
}
._ctaPrimary_kkrzn_8:hover:not(:disabled) { box-shadow: 0 12px 24px -12px rgba(24, 24, 27, 0.5); transform: translateY(-1px); }
._ctaPrimary_kkrzn_8:disabled { opacity: 0.6; cursor: default; }
._ctaPrimary_kkrzn_8 svg { width: 16px; height: 16px; }
._ctaGhost_kkrzn_18 { appearance: none; cursor: pointer; font-family: inherit; background: transparent; color: var(--ds-text-muted); font-size: 13px; font-weight: 500; border: 0; padding: 6px 4px; display: inline-flex; align-items: center; gap: 7px; }
._ctaGhost_kkrzn_18:hover { color: var(--ds-text); }
._ctaGhost_kkrzn_18 svg { width: 14px; height: 14px; }
._right_kkrzn_1 { position: relative; background: var(--ds-bg); border-left: 1px solid var(--ds-border); overflow: hidden; }
/* StepProgress.module.css — 移植自 docs/design/2026-06-25-publish-unauth-V2-refined.html .stepbar（token 换成真实名） */
._stepbar_gzfjr_1 { display: flex; max-width: 360px; }
._sbstep_gzfjr_3 { flex: 1; display: flex; flex-direction: column; align-items: center; gap: 8px; position: relative; }
._sbnum_gzfjr_4 {
  width: 27px; height: 27px; border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  font-size: 12px; font-weight: 700; font-family: var(--ds-font-mono);
  background: var(--ds-bg); border: 1.5px solid var(--ds-border-strong); color: var(--ds-text-subtle); z-index: 2;
}
._sbnum_gzfjr_4 svg { width: 13px; height: 13px; }
._sblabel_gzfjr_11 { font-size: 12px; font-weight: 600; color: var(--ds-text-subtle); white-space: nowrap; }
._sbbar_gzfjr_12 { position: absolute; top: 13px; left: 50%; width: 100%; height: 2px; background: var(--ds-border-strong); z-index: 1; }
._sbstep_gzfjr_3._done_gzfjr_13 ._sbnum_gzfjr_4 { background: var(--ds-text); border-color: var(--ds-text); color: var(--ds-text-on-ink); }
._sbstep_gzfjr_3._done_gzfjr_13 ._sbbar_gzfjr_12 { background: var(--ds-text); }
._sbstep_gzfjr_3._done_gzfjr_13 ._sblabel_gzfjr_11 { color: var(--ds-text-muted); }
._sbstep_gzfjr_3._current_gzfjr_16 ._sbnum_gzfjr_4 { background: var(--ds-text); border-color: var(--ds-text); color: var(--ds-text-on-ink); box-shadow: 0 0 0 4px rgba(24, 24, 27, 0.08); }
._sbstep_gzfjr_3._current_gzfjr_16 ._sblabel_gzfjr_11 { color: var(--ds-text); }
/* DemoReel.module.css — 移植自 install-wizard-flow.html .videoshow（lines 111-176），token 换真实名 */
._videoshow_9mf1h_1 { position: absolute; inset: 0; }
._demo_9mf1h_3 { position: absolute; inset: 0; display: flex; flex-direction: column; }
._dwin_9mf1h_4 { flex: 1; margin: 24px 24px 0; background: var(--ds-bg); border: 1px solid var(--ds-border); border-radius: var(--ds-radius-lg) var(--ds-radius-lg) 0 0; overflow: hidden; display: flex; flex-direction: column; box-shadow: 0 14px 36px -22px rgba(24, 24, 27, 0.28); }
._dbar_9mf1h_5 { height: 34px; flex: 0 0 34px; border-bottom: 1px solid var(--ds-border); display: flex; align-items: center; gap: 6px; padding: 0 13px; }
._dbar_9mf1h_5 i { width: 9px; height: 9px; border-radius: 50%; background: var(--ds-bg-deep); }
._dbar_9mf1h_5 b { font-size: 11px; font-weight: 600; color: var(--ds-text-subtle); margin-left: 8px; font-family: var(--ds-font-mono); }
._dstage_9mf1h_8 { flex: 1; position: relative; background: var(--ds-bg-alt); }
._dscene_9mf1h_9 { position: absolute; inset: 0; opacity: 0; padding: 20px; }
._s1_9mf1h_10 { animation: _fadeS1_9mf1h_1 12s linear infinite; }
._s2_9mf1h_11 { animation: _fadeS2_9mf1h_1 12s linear infinite; }
._s3_9mf1h_12 { animation: _fadeS3_9mf1h_1 12s linear infinite; }
@keyframes _fadeS1_9mf1h_1 { 0% { opacity: 1 } 28% { opacity: 1 } 33% { opacity: 0 } 94% { opacity: 0 } 100% { opacity: 1 } }
@keyframes _fadeS2_9mf1h_1 { 0% { opacity: 0 } 30% { opacity: 0 } 35% { opacity: 1 } 61% { opacity: 1 } 66% { opacity: 0 } 100% { opacity: 0 } }
@keyframes _fadeS3_9mf1h_1 { 0% { opacity: 0 } 63% { opacity: 0 } 68% { opacity: 1 } 94% { opacity: 1 } 99% { opacity: 0 } 100% { opacity: 0 } }
._s1b_9mf1h_16 { height: 100%; display: flex; gap: 16px; }
._acol_9mf1h_17 { width: 46%; background: var(--ds-bg); border: 1px solid var(--ds-border); border-radius: var(--ds-radius-md); padding: 12px 11px; display: flex; flex-direction: column; gap: 10px; }
._ct_9mf1h_18 { font-size: 11px; font-weight: 700; color: var(--ds-text-muted); display: flex; justify-content: space-between; }
._ct_9mf1h_18 b { font-family: var(--ds-font-mono); color: var(--ds-text); }
._arow_9mf1h_20 { display: flex; align-items: center; gap: 9px; }
._av_9mf1h_21 { width: 26px; height: 26px; border-radius: 8px; background: var(--ds-bg-deep); flex: 0 0 26px; }
._al_9mf1h_22 { flex: 1; display: flex; flex-direction: column; gap: 4px; }
._al_9mf1h_22 s { height: 7px; border-radius: 4px; background: var(--ds-bg-deep); display: block; }
._dot_9mf1h_24 { width: 7px; height: 7px; border-radius: 50%; background: var(--ds-success); flex: 0 0 7px; }
._s1side_9mf1h_25 { flex: 1; display: flex; flex-direction: column; justify-content: center; align-items: flex-start; gap: 14px; }
._okpill_9mf1h_26 { display: inline-flex; align-items: center; gap: 8px; background: var(--ds-bg); border: 1px solid var(--ds-border-strong); border-radius: var(--ds-radius-pill); padding: 9px 16px; font-size: 13px; font-weight: 600; }
._ok_9mf1h_26 { width: 18px; height: 18px; border-radius: 50%; background: var(--ds-success); color: #fff; display: flex; align-items: center; justify-content: center; }
._ok_9mf1h_26 svg { width: 11px; height: 11px; }
._s1cap_9mf1h_29 { font-size: 12px; color: var(--ds-text-muted); max-width: 150px; line-height: 1.5; }
._s2b_9mf1h_30 { height: 100%; display: flex; flex-direction: column; gap: 16px; }
._ccard_9mf1h_31 { background: var(--ds-bg); border: 1px solid var(--ds-border); border-radius: var(--ds-radius-md); padding: 12px; display: flex; gap: 12px; align-items: center; }
._thumb_9mf1h_32 { width: 64px; height: 42px; border-radius: 8px; background: linear-gradient(135deg, #d6d3d1, #a8a29e); flex: 0 0 64px; }
._cl_9mf1h_33 { flex: 1; display: flex; flex-direction: column; gap: 6px; }
._cl_9mf1h_33 s { height: 8px; border-radius: 5px; background: var(--ds-bg-deep); display: block; }
._fan_9mf1h_35 { flex: 1; display: flex; flex-direction: column; gap: 9px; justify-content: center; }
._pdist_9mf1h_36 { display: flex; align-items: center; gap: 10px; background: var(--ds-bg); border: 1px solid var(--ds-border); border-radius: var(--ds-radius-md); padding: 9px 13px; }
._pd_9mf1h_36 { width: 8px; height: 8px; border-radius: 50%; flex: 0 0 8px; background: var(--ds-text-subtle); }
._pn_9mf1h_38 { font-size: 12.5px; font-weight: 500; flex: 1; }
._ck_9mf1h_39 { width: 18px; height: 18px; border-radius: 50%; background: var(--ds-text); color: var(--ds-text-on-ink); display: flex; align-items: center; justify-content: center; }
._ck_9mf1h_39 svg { width: 10px; height: 10px; }
._s3b_9mf1h_41 { height: 100%; display: flex; flex-direction: column; gap: 13px; }
._sgrid_9mf1h_42 { display: grid; grid-template-columns: repeat(4, 1fr); gap: 10px; }
._stile_9mf1h_43 { background: var(--ds-bg); border: 1px solid var(--ds-border); border-radius: var(--ds-radius-md); padding: 11px 12px; }
._sv_9mf1h_44 { font-family: var(--ds-font-mono); font-size: 18px; font-weight: 600; color: var(--ds-text-muted); }
._hi_9mf1h_45 ._sv_9mf1h_44 { color: var(--ds-text); }
._sl_9mf1h_46 { font-size: 10.5px; color: var(--ds-text-subtle); margin-top: 2px; }
._chart_9mf1h_47 { flex: 1; background: var(--ds-bg); border: 1px solid var(--ds-border); border-radius: var(--ds-radius-md); padding: 14px; display: flex; align-items: flex-end; gap: 10px; }
._bar_9mf1h_48 { flex: 1; background: var(--ds-bg-deep); border-radius: 4px 4px 0 0; }
._bar_9mf1h_48:nth-child(1) { height: 40%; }
._bar_9mf1h_48:nth-child(2) { height: 62%; }
._bar_9mf1h_48:nth-child(3) { height: 48%; }
._bar_9mf1h_48:nth-child(4) { height: 80%; background: var(--ds-text); }
._bar_9mf1h_48:nth-child(5) { height: 55%; }
._bar_9mf1h_48:nth-child(6) { height: 70%; }
._dcap_9mf1h_55 { flex: 0 0 auto; padding: 14px 24px 18px; background: var(--ds-bg); }
._dchaps_9mf1h_56 { display: flex; gap: 18px; margin-bottom: 11px; }
._dchaps_9mf1h_56 span { font-size: 12px; font-weight: 600; color: var(--ds-text-subtle); }
._c1_9mf1h_58 { animation: _ch1_9mf1h_1 12s linear infinite; }
._c2_9mf1h_59 { animation: _ch2_9mf1h_1 12s linear infinite; }
._c3_9mf1h_60 { animation: _ch3_9mf1h_1 12s linear infinite; }
@keyframes _ch1_9mf1h_1 { 0% { color: var(--ds-text) } 30% { color: var(--ds-text) } 34% { color: var(--ds-text-subtle) } 100% { color: var(--ds-text-subtle) } }
@keyframes _ch2_9mf1h_1 { 0% { color: var(--ds-text-subtle) } 34% { color: var(--ds-text-subtle) } 38% { color: var(--ds-text) } 64% { color: var(--ds-text) } 68% { color: var(--ds-text-subtle) } 100% { color: var(--ds-text-subtle) } }
@keyframes _ch3_9mf1h_1 { 0% { color: var(--ds-text-subtle) } 66% { color: var(--ds-text-subtle) } 70% { color: var(--ds-text) } 96% { color: var(--ds-text) } 100% { color: var(--ds-text-subtle) } }
._dtrack_9mf1h_64 { height: 3px; background: var(--ds-bg-deep); border-radius: 2px; overflow: hidden; }
._dfill_9mf1h_65 { height: 100%; width: 0; background: var(--ds-text); border-radius: 2px; animation: _dprog_9mf1h_1 12s linear infinite; }
@keyframes _dprog_9mf1h_1 { 0% { width: 0 } 100% { width: 100% } }
._vtag_9mf1h_67 { position: absolute; right: 34px; top: 36px; z-index: 3; display: inline-flex; align-items: center; gap: 7px; background: var(--ds-bg); border: 1px solid var(--ds-border); box-shadow: 0 4px 12px -6px rgba(24, 24, 27, 0.25); border-radius: var(--ds-radius-pill); padding: 5px 12px; color: var(--ds-text); font-size: 11px; font-weight: 600; }
._live_9mf1h_68 { width: 7px; height: 7px; border-radius: 50%; background: var(--ds-danger); animation: _blink_9mf1h_1 1.4s infinite; }
@keyframes _blink_9mf1h_1 { 50% { opacity: 0.3 } }
@media (prefers-reduced-motion: reduce) {
  ._s1_9mf1h_10, ._s2_9mf1h_11, ._s3_9mf1h_12, ._c1_9mf1h_58, ._c2_9mf1h_59, ._c3_9mf1h_60, ._dfill_9mf1h_65, ._live_9mf1h_68 { animation: none; }
  ._s1_9mf1h_10 { opacity: 1; }
}
/* AuthorizeOnboarding.module.css */
._root_1agkm_2 { flex: 1; min-width: 0; display: flex; }
._main_1agkm_3 { flex: 1; min-width: 0; position: relative; overflow-y: auto; }
._pad_1agkm_4 { padding: 30px 36px; max-width: 760px; }
._stepWrap_1agkm_5 { display: flex; justify-content: center; margin-bottom: 28px; }
._hero_1agkm_6 { margin-bottom: 4px; }
._title_1agkm_7 { font-size: 25px; font-weight: 700; letter-spacing: -0.02em; margin: 0 0 11px; color: var(--ds-text); }
._lead_1agkm_8 { font-size: 14px; line-height: 1.65; color: var(--ds-text-muted); margin: 0; max-width: 500px; }
._cue_1agkm_9 { display: inline-flex; align-items: center; gap: 7px; margin-top: 16px; font-size: 12.5px; font-weight: 600; color: var(--ds-text); background: var(--ds-bg-alt); border: 1px solid var(--ds-border); border-radius: var(--ds-radius-pill); padding: 7px 14px; }
._cue_1agkm_9 svg { width: 14px; height: 14px; }
/* OnboardingSidebar.module.css — 宽度 250px 与 MatrixAccountSidebar 对齐，避免授权后切换抖动 */
._sidebar_197ws_2 { width: 250px; flex: 0 0 250px; border-right: 1px solid var(--ds-border); display: flex; flex-direction: column; padding: 14px 12px; }
._head_197ws_3 { display: flex; align-items: center; justify-content: space-between; padding: 2px 6px; margin-bottom: 10px; }
._title_197ws_4 { font-size: 13px; font-weight: 700; color: var(--ds-text); }
._count_197ws_5 { font-family: var(--ds-font-mono); font-size: 12px; color: var(--ds-text-subtle); }
._section_197ws_6 { font-size: 11px; font-weight: 700; color: var(--ds-text-subtle); padding: 6px 6px 8px; letter-spacing: 0.02em; }
._scroll_197ws_7 { flex: 1; min-height: 0; }
._prow_197ws_8 {
  position: relative; display: flex; align-items: center; gap: 10px; width: 100%;
  padding: 9px 10px; margin-bottom: 2px; border: 0; background: transparent;
  border-radius: var(--ds-radius-md); cursor: pointer; transition: background 0.15s; font-family: inherit; text-align: left;
}
._prow_197ws_8:hover { background: var(--ds-bg-alt); }
._prow_197ws_8:first-child { box-shadow: inset 0 0 0 1px var(--ds-border-strong); background: var(--ds-bg-alt); }
._pm_197ws_15 { width: 26px; height: 26px; border-radius: 8px; display: flex; align-items: center; justify-content: center; font-size: 14px; flex: 0 0 26px; background: var(--ds-bg-alt); border: 1px solid var(--ds-border); }
._nm_197ws_16 { flex: 1; font-size: 13px; font-weight: 600; color: var(--ds-text); }
._go_197ws_17 { color: var(--ds-text-subtle); font-size: 11.5px; font-weight: 600; }
._prow_197ws_8:hover ._go_197ws_17, ._prow_197ws_8:first-child ._go_197ws_17 { color: var(--ds-text); }
._foot_197ws_19 { margin-top: 8px; display: flex; gap: 8px; }
._footBtn_197ws_20 { flex: 1; height: 34px; border: 1px solid var(--ds-border); background: var(--ds-bg); border-radius: var(--ds-radius-sm); font-size: 12px; color: var(--ds-text-muted); font-family: inherit; cursor: default; }
._footBtn_197ws_20:disabled { opacity: 0.85; }
/* GuideCursor.module.css — fill 白色是有意（白色指点光标），stroke 走 ink token */
._taphand_mls7t_2 {
  position: absolute; right: 30px; bottom: -14px; z-index: 6;
  pointer-events: none; color: var(--ds-text);
  filter: drop-shadow(0 5px 8px rgba(24, 24, 27, 0.26));
  animation: _taptap_mls7t_1 1.5s ease-in-out infinite;
}
._taphand_mls7t_2 svg { width: 27px; height: 30px; display: block; }
@keyframes _taptap_mls7t_1 {
  0% { transform: translate(0, 4px) rotate(-8deg); }
  42% { transform: translate(-4px, -5px) rotate(-8deg); }
  58% { transform: translate(-4px, -5px) rotate(-8deg); }
  100% { transform: translate(0, 4px) rotate(-8deg); }
}
@media (prefers-reduced-motion: reduce) { ._taphand_mls7t_2 { animation: none; } }
/* WorkspacePreview.module.css — 移植自 V2-refined.html .pv-*（token 换真实名；--sk 骨架灰沿用设计值） */
._pvWrap_g8z1g_2 { position: relative; margin-top: 26px; }
._pvHead_g8z1g_3 { display: flex; align-items: center; gap: 9px; margin-bottom: 14px; }
._lk_g8z1g_4 { width: 22px; height: 22px; border-radius: 7px; background: var(--ds-bg-alt); border: 1px solid var(--ds-border); display: flex; align-items: center; justify-content: center; color: var(--ds-text-muted); }
._lk_g8z1g_4 svg { width: 12px; height: 12px; }
._ht_g8z1g_1 { font-size: 12.5px; font-weight: 700; color: var(--ds-text-muted); }
._hs_g8z1g_7 { font-size: 11.5px; color: var(--ds-text-subtle); }
._pvStack_g8z1g_8 { display: flex; flex-direction: column; gap: 14px; }
._pvCard_g8z1g_9 { position: relative; background: var(--ds-bg); border: 1px solid var(--ds-border); border-radius: var(--ds-radius-lg); padding: 18px 20px; }
._pvTag_g8z1g_10 { position: absolute; top: 14px; right: 16px; font-size: 11px; font-weight: 600; color: var(--ds-text-subtle); }
._pvTagStatic_g8z1g_11 { font-size: 11px; font-weight: 600; color: var(--ds-text-subtle); }
._sk_g8z1g_12 { background: #eceae8; border-radius: 6px; display: block; }

._pvp_g8z1g_14 { display: flex; align-items: center; gap: 18px; }
._pvpAv_g8z1g_15 { width: 56px; height: 56px; border-radius: 50%; background: #eceae8; flex: 0 0 56px; }
._pvpMid_g8z1g_16 { flex: 1; display: flex; flex-direction: column; gap: 14px; }
._nm_g8z1g_17 { height: 13px; width: 120px; }
._pvpStats_g8z1g_18 { display: flex; gap: 38px; }
._pvpSt_g8z1g_18 { display: flex; flex-direction: column; gap: 7px; }
._n_g8z1g_17 { height: 15px; width: 46px; }
._l_g8z1g_4 { height: 8px; width: 30px; }
._pvpAct_g8z1g_22 { display: flex; flex-direction: column; gap: 9px; align-items: flex-end; }
._b_g8z1g_23 { height: 34px; width: 104px; border-radius: var(--ds-radius-md); }
._dark_g8z1g_24 { background: #d9d7d4; }

._pvh_g8z1g_26 { display: flex; align-items: center; gap: 14px; }
._pvhIc_g8z1g_27 { width: 40px; height: 40px; border-radius: 11px; background: #eceae8; flex: 0 0 40px; }
._pvhMid_g8z1g_28 { flex: 1; display: flex; flex-direction: column; gap: 9px; }
._a_g8z1g_29 { height: 12px; width: 96px; }
._pvh_g8z1g_26 ._b_g8z1g_23 { height: 9px; width: 230px; }
._tog_g8z1g_31 { height: 34px; width: 88px; border-radius: var(--ds-radius-md); background: #eceae8; }

._pvdHead_g8z1g_33 { display: flex; align-items: center; justify-content: space-between; margin-bottom: 14px; }
._pvdHead_g8z1g_33 b { font-size: 13px; font-weight: 700; color: var(--ds-text-muted); }
._pvdRow_g8z1g_35 { display: flex; align-items: center; gap: 13px; padding: 10px 0; }
._pvdRow_g8z1g_35 + ._pvdRow_g8z1g_35 { border-top: 1px solid var(--ds-border); }
._ic_g8z1g_37 { width: 32px; height: 32px; border-radius: 9px; background: #eceae8; flex: 0 0 32px; }
._ll_g8z1g_38 { flex: 1; display: flex; flex-direction: column; gap: 8px; }
._ll_g8z1g_38 ._a_g8z1g_29 { height: 10px; }
._ll_g8z1g_38 ._b_g8z1g_23 { height: 8px; }

._pvFade_g8z1g_42 { position: absolute; left: 0; right: 0; bottom: 0; height: 150px; background: linear-gradient(180deg, rgba(255, 255, 255, 0) 0%, var(--ds-bg) 72%); pointer-events: none; z-index: 4; }
._pvLock_g8z1g_43 { position: absolute; left: 50%; bottom: 26px; transform: translateX(-50%); z-index: 5; display: inline-flex; align-items: center; gap: 9px; background: var(--ds-bg); border: 1px solid var(--ds-border-strong); border-radius: var(--ds-radius-pill); padding: 10px 18px; box-shadow: 0 12px 30px -14px rgba(24, 24, 27, 0.35); font-size: 13px; font-weight: 600; color: var(--ds-text); }
._pvLock_g8z1g_43 svg { width: 14px; height: 14px; }
/*
 * Task 4 + Task 9 — PublishAccountHomePage 全屏发布页结构样式。
 * 视觉 source: docs/design/2026-07-01-publish-tab-delivery.html（三态入口）
 *            + docs/design/2026-07-01-publish-matrix-vA-tree.html（授权后矩阵托管工作台）
 *            + docs/design/2026-06-23-matrix-account-profile.html（单账号详情复用）
 * round / spacing 全部 --ds-* token；console no-azure（ink-on-ink，design.md §12）。
 * 状态色（琥珀/绿）取 --ds-warning/--ds-success 及其浅底，非 azure。
 *
 * 本文件只保留页面级结构容器（概览条 / 侧栏 / Hero / 作品墙均由真子组件自带根元素 + 样式）：
 *   概览条 + 两栏 body（侧栏 / profile 滚动列内 .profile 居中包裹）。
 * 本页是 console-body 唯一子，故跨满两条 grid 轨（1fr 440px）。
 */

/* .tab-page.pub 全幅模式：flex 列，内部各区独立滚动 */
._tabPagePub_1ln8t_15 {
  grid-column: 1 / -1;
  min-height: 0;
  overflow: hidden;
  display: flex;
  flex-direction: column;
  background: var(--ds-bg);
  color: var(--ds-text);
}

/* 两栏 body：250px 侧栏（自带宽度）+ 1fr profile 滚动列 */
._matrixBody_1ln8t_26 {
  flex: 1;
  min-height: 0;
  display: flex;
}

/* 侧栏 testid 锚点：不参与布局（MatrixAccountSidebar 自带 width:250px flex-shrink:0） */
._sidebarSlot_1ln8t_33 {
  display: contents;
}

/* 右侧 profile 滚动列（design .profile-scroll） */
._profileScroll_1ln8t_38 {
  flex: 1;
  min-width: 0;
  min-height: 0;
  overflow-y: auto;
}

/* profile 包裹（design .main-pad：max-width 1640 左对齐 + 内边距，不居中——
   dock 让位由 .tabPagePub 的 padding-right 承担，居中会在侧栏与 dock 之间多出两侧留白） */
._profile_1ln8t_10 {
  max-width: 1640px;
  padding: var(--ds-space-7) var(--ds-space-6) 60px;
}

/* ============================================================
 * 矩阵总控工作台（vA-tree 中栏视觉语言：mono klabel 眉标 + 卡片分区）
 * ============================================================ */

._matrixWorkspace_1ln8t_56 {
  display: flex;
  flex-direction: column;
  gap: 16px;
  margin-bottom: 24px;
}

/* ── 账号详情：面包屑（vA-tree .crumb，点「矩阵总览」切回总览视图） ── */
._crumb_1ln8t_63 {
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: 12px;
  color: var(--ds-text-muted);
  margin-bottom: 16px;
}

._crumb_1ln8t_63 button {
  color: var(--ds-text-muted);
  cursor: pointer;
}

._crumb_1ln8t_63 button:hover {
  color: var(--ds-text);
}

._crumbSep_1ln8t_82 {
  color: var(--ds-text-subtle);
}

._crumbCur_1ln8t_86 {
  color: var(--ds-text);
  font-weight: 600;
}

._crumbHost_1ln8t_91 {
  margin-left: auto;
  display: inline-flex;
  align-items: center;
  gap: 6px;
  color: var(--ds-text-muted);
  font-size: 11.5px;
}

._crumbHostDot_1ln8t_100 {
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: var(--ds-success);
  flex: 0 0 auto;
}

/* mono 眉标（vA-tree .klabel）—— 全工作台统一语言 */
._klabel_1ln8t_108,
._contextBar_1ln8t_110 span,
._statStrip_1ln8t_111 > div > span,
._roleMeta_1ln8t_112 ._k_1ln8t_108 {
  font-family: var(--ds-font-mono);
  font-size: 10px;
  font-weight: 500;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--ds-text-subtle);
}

/* ── head：标题 + 总控 Agent 身份面板 ── */
._workspaceHead_1ln8t_122 {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(280px, 356px);
  gap: 16px;
  align-items: stretch;
}

._workspaceCopy_1ln8t_129 {
  min-width: 0;
  display: flex;
  flex-direction: column;
  justify-content: center;
  padding: 4px 2px;
}

._workspaceEyebrow_1ln8t_137 {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  align-self: flex-start;
  font-family: var(--ds-font-mono);
  font-size: 10px;
  font-weight: 600;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--ds-text-subtle);
}

._workspaceCopy_1ln8t_129 h1 {
  margin: 12px 0 8px;
  font-size: 24px;
  line-height: 1.18;
  font-weight: 820;
  letter-spacing: -0.01em;
}

._workspaceCopy_1ln8t_129 p,
._agentPanel_1ln8t_159 p {
  margin: 0;
  color: var(--ds-text-muted);
  font-size: 13px;
  line-height: 1.7;
  max-width: 640px;
}

/* 总控 Agent 身份面板（右侧 dock 对话的身份镜像；纯身份，不重复对话流） */
._agentPanel_1ln8t_159 {
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-lg);
  background: var(--ds-bg);
  padding: 16px;
  display: flex;
  flex-direction: column;
  gap: 12px;
}

._agentPanelTop_1ln8t_178 {
  display: flex;
  align-items: center;
  gap: 11px;
}

._agentAvatar_1ln8t_184 {
  width: 38px;
  height: 38px;
  border-radius: 10px;
  display: grid;
  place-items: center;
  flex: 0 0 auto;
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
  font-size: 17px;
  font-weight: 800;
}

._agentPanelTop_1ln8t_178 b {
  display: block;
  font-size: 13px;
  font-weight: 800;
}

._agentPanelTop_1ln8t_178 code {
  display: inline-flex;
  margin-top: 4px;
  padding: 1px 6px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg-alt);
  color: var(--ds-text-subtle);
  font-family: var(--ds-font-mono);
  font-size: 10px;
  letter-spacing: 0.02em;
}

._agentStatus_1ln8t_216 {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  align-self: flex-start;
  padding: 6px 11px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-pill);
  font-size: 11.5px;
  font-weight: 500;
  color: var(--ds-text-muted);
}

._liveDot_1ln8t_229 {
  width: 7px;
  height: 7px;
  border-radius: 50%;
  flex: 0 0 auto;
  background: var(--ds-success);
  box-shadow: 0 0 0 3px rgba(34, 197, 94, 0.16);
}

/* ── ctx-bar：运营依据 / 刷新 / 日志（mono klabel pill chips） ── */
._contextBar_1ln8t_110 {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}

._contextBar_1ln8t_110 > div {
  display: inline-flex;
  align-items: center;
  gap: 9px;
  padding: 7px 13px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-pill);
  background: var(--ds-bg);
}

._contextBar_1ln8t_110 b {
  font-size: 12px;
  font-weight: 700;
  color: var(--ds-text);
}

/* ── stat strip：分组横条（vA-tree .strip：单容器边框 + 右分隔线） ── */
._statStrip_1ln8t_111 {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  background: var(--ds-bg);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-lg);
  overflow: hidden;
}

._statStrip_1ln8t_111 > div {
  min-width: 0;
  padding: 12px 16px;
  border-right: 1px solid var(--ds-border);
}

._statStrip_1ln8t_111 > div:last-child {
  border-right: 0;
}

._statStrip_1ln8t_111 > div > span {
  display: block;
  margin-bottom: 6px;
}

._statStrip_1ln8t_111 b {
  display: block;
  font-family: var(--ds-font-mono);
  font-size: 22px;
  line-height: 1;
  font-weight: 600;
  font-variant-numeric: tabular-nums;
}

._statStrip_1ln8t_111 small {
  display: block;
  margin-top: 6px;
  color: var(--ds-text-muted);
  font-size: 11.5px;
  line-height: 1.45;
}

/* 待处理格：有待办时琥珀强调（状态色，非 azure） */
._statPending_1ln8t_304 {
  background: #fffbeb;
}
._statPending_1ln8t_304 b,
._statPending_1ln8t_304 > span,
._statPending_1ln8t_304 small {
  color: #b45309;
}

/* ── section 容器 ── */
._workspaceSection_1ln8t_314 {
  padding: 16px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-lg);
  background: var(--ds-bg);
}

._workspaceTwoCol_1ln8t_321 {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
  gap: 12px;
  align-items: start;
}

._sectionHead_1ln8t_328 {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 14px;
  margin-bottom: 14px;
}

._sectionHead_1ln8t_328 h2 {
  margin: 0;
  font-size: 14px;
  font-weight: 800;
  letter-spacing: 0;
}

._sectionHead_1ln8t_328 span {
  color: var(--ds-text-subtle);
  font-size: 11.5px;
}

/* section 标题内联计数（vA-tree .cnt） */
._cnt_1ln8t_348 {
  font-family: var(--ds-font-mono);
  font-size: 12px;
  font-weight: 500;
  color: var(--ds-text-subtle);
  margin-left: 9px;
}

/* ── 待确认事项 ── */
._pendingGrid_1ln8t_358 {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 10px;
  align-items: start;
}

._roleGrid_1ln8t_365 {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
  gap: 10px;
}

._pendingItem_1ln8t_371 {
  min-width: 0;
  display: flex;
  gap: 13px;
  border: 1px solid var(--ds-border);
  border-left: 3px solid var(--ds-warning);
  border-radius: var(--ds-radius-lg);
  background: var(--ds-bg);
  padding: 13px 14px;
}

._pendingPrimary_1ln8t_382 {
  grid-column: 1 / -1;
  align-items: stretch;
}

._pendIcon_1ln8t_387 {
  width: 32px;
  height: 32px;
  flex: 0 0 auto;
  border-radius: 9px;
  background: #fffbeb;
  border: 1px solid #fce4a6;
  display: grid;
  place-items: center;
  font-size: 15px;
  font-weight: 700;
  color: #b45309;
}

._pendMain_1ln8t_401 {
  flex: 1;
  min-width: 0;
}

._pendingTopline_1ln8t_406 {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  min-width: 0;
}

._pendingTag_1ln8t_414 {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  font-family: var(--ds-font-mono);
  font-size: 10px;
  font-weight: 600;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: #b45309;
}

._pendingStatus_1ln8t_426 {
  flex: 0 0 auto;
  padding: 2px 7px;
  border-radius: var(--ds-radius-pill);
  background: var(--ds-bg-alt);
  color: var(--ds-text-muted);
  font-size: 10.5px;
  font-weight: 650;
}

._pendingItem_1ln8t_371 b {
  display: block;
  margin-top: 3px;
  font-size: 13.5px;
  font-weight: 600;
  line-height: 1.4;
}

._pendingItem_1ln8t_371 p {
  margin: 4px 0 0;
  color: var(--ds-text-muted);
  font-size: 12px;
  line-height: 1.5;
}

._pendingDecision_1ln8t_451 {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 8px;
  margin-top: 10px;
}

._pendingDecision_1ln8t_451 span,
._pendingMini_1ln8t_459 span {
  min-width: 0;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg-alt);
  padding: 8px 9px;
  color: var(--ds-text-muted);
  font-size: 11.5px;
  line-height: 1.45;
}

._pendingDecision_1ln8t_451 em {
  display: block;
  margin-bottom: 4px;
  color: var(--ds-text-subtle);
  font-family: var(--ds-font-mono);
  font-size: 9px;
  font-style: normal;
  font-weight: 650;
  letter-spacing: 0.06em;
  text-transform: uppercase;
}

._pendingEvidence_1ln8t_482 {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  margin-top: 9px;
}

._pendingEvidence_1ln8t_482 span {
  padding: 4px 8px;
  border-radius: var(--ds-radius-pill);
  background: #f0fdf4;
  color: #15803d;
  font-size: 11px;
  font-weight: 600;
}

._pendingMini_1ln8t_459 {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: 6px;
  margin-top: 8px;
}

._pendActions_1ln8t_505 {
  display: flex;
  align-items: center;
  flex: 0 0 auto;
}

._btnPrimary_1ln8t_511,
._btnGhost_1ln8t_512 {
  padding: 6px 12px;
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg);
  color: var(--ds-text);
  font-size: 12px;
  font-weight: 600;
  white-space: nowrap;
  cursor: pointer;
}
._btnPrimary_1ln8t_511 {
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
  border-color: var(--ds-text);
}
._btnGhost_1ln8t_512:hover {
  background: var(--ds-bg-alt);
  border-color: var(--ds-text);
}
._btnPrimary_1ln8t_511:disabled,
._btnGhost_1ln8t_512:disabled {
  cursor: not-allowed;
  opacity: 0.55;
}

._pendingError_1ln8t_538 {
  grid-column: 1 / -1;
  border-left-color: var(--ds-danger);
}
._pendingError_1ln8t_538 ._pendingTag_1ln8t_414 {
  color: var(--ds-danger);
}

/* 空态待确认卡：中性、无琥珀左边、跨满两列、常规块流 */
._pendingEmpty_1ln8t_547 {
  display: block;
  grid-column: 1 / -1;
  border-left: 1px solid var(--ds-border);
  background: var(--ds-bg-alt);
}
._pendingEmpty_1ln8t_547 b {
  margin-top: 8px;
}
._pendingEmpty_1ln8t_547 ._pendingTag_1ln8t_414 {
  color: var(--ds-text-subtle);
}

/* ── 账号分工矩阵卡 ── */
._roleCard_1ln8t_561 {
  min-width: 0;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-md);
  background: var(--ds-bg);
  padding: 13px 14px;
  display: flex;
  flex-direction: column;
  gap: 9px;
  color: var(--ds-text);
  text-align: left;
  cursor: pointer;
  transition: border-color 0.15s ease;
}

._roleCard_1ln8t_561:hover {
  border-color: var(--ds-border-strong);
}

._roleTop_1ln8t_580 {
  display: flex;
  align-items: center;
  gap: 10px;
}

._roleMark_1ln8t_586 {
  width: 30px;
  height: 30px;
  flex: 0 0 auto;
  border-radius: var(--ds-radius-sm);
  border: 1px solid var(--ds-border);
  background: var(--ds-bg-alt);
  display: grid;
  place-items: center;
  font-size: 12px;
  font-weight: 600;
  color: var(--ds-text);
}

._roleTop_1ln8t_580 b {
  min-width: 0;
  flex: 1;
  font-size: 13px;
  font-weight: 800;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

._roleStatus_1ln8t_610 {
  flex: 0 0 auto;
  display: inline-flex;
  align-items: center;
  gap: 5px;
  padding: 3px 8px;
  border-radius: var(--ds-radius-pill);
  font-size: 10.5px;
  font-weight: 600;
  font-style: normal;
}
._roleStatusOk_1ln8t_621 {
  background: #f0fdf4;
  color: #16a34a;
}
._roleStatusWarn_1ln8t_625 {
  background: #fffbeb;
  color: #b45309;
}

._rolePlatform_1ln8t_630 {
  margin-left: 40px;
  color: var(--ds-text-subtle);
  font-size: 11px;
}

/* 内容方向（vA-tree .mc-dir）：真实托管 template 名，托管中才渲染 */
._roleDir_1ln8t_637 {
  font-size: 12.5px;
  line-height: 1.5;
  color: var(--ds-text);
}

._roleMeta_1ln8t_112 {
  display: flex;
  flex-wrap: wrap;
  gap: 8px 18px;
  margin: 2px 0;
  padding: 9px 0;
  border-top: 1px solid var(--ds-border);
  border-bottom: 1px solid var(--ds-border);
}
._roleMetaItem_1ln8t_652 {
  display: flex;
  flex-direction: column;
  gap: 3px;
  min-width: 0;
}
._roleMetaItem_1ln8t_652 ._v_1ln8t_658 {
  font-size: 12px;
  font-weight: 650;
  color: var(--ds-text);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
._roleMetaItem_1ln8t_652 ._vNum_1ln8t_666 {
  font-family: var(--ds-font-mono);
  font-variant-numeric: tabular-nums;
}

/* 粉丝 / 作品 / 点赞（真实 profile 字段，缺失项不渲染） */
._roleStats_1ln8t_672 {
  display: flex;
  gap: 24px;
}
._roleStat_1ln8t_610 {
  display: flex;
  flex-direction: column;
  gap: 2px;
  min-width: 0;
}
._roleStatValue_1ln8t_682 {
  font-family: var(--ds-font-mono);
  font-size: 14px;
  font-weight: 600;
  font-variant-numeric: tabular-nums;
  color: var(--ds-text);
}
._roleStatLabel_1ln8t_689 {
  font-size: 11px;
  color: var(--ds-text-muted);
}

/* ── 发布计划（时间轴式行） ── */
._publishPlan_1ln8t_695 {
  display: flex;
  flex-direction: column;
}

._publishPlanItem_1ln8t_700 {
  display: grid;
  grid-template-columns: 8px minmax(0, 1fr) auto;
  align-items: center;
  gap: 12px;
  padding: 11px 0;
  border-top: 1px solid var(--ds-border);
}

._publishPlanItem_1ln8t_700:first-child {
  border-top: 0;
  padding-top: 2px;
}

._publishPlanItem_1ln8t_700 b {
  display: block;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  font-size: 13px;
  line-height: 1.45;
  font-weight: 650;
}

._publishPlanItem_1ln8t_700 div span {
  display: block;
  margin-top: 3px;
  color: var(--ds-text-muted);
  font-size: 12px;
  line-height: 1.45;
}

._publishPlanItem_1ln8t_700 em {
  font-family: var(--ds-font-mono);
  font-style: normal;
  color: var(--ds-text-subtle);
  font-size: 10px;
  font-weight: 700;
  letter-spacing: 0.04em;
}

._planDotLive_1ln8t_742,
._planDotWarn_1ln8t_743 {
  display: block;
  width: 8px;
  height: 8px;
  border-radius: var(--ds-radius-pill);
}

._planDotLive_1ln8t_742 {
  background: var(--ds-success);
}

._planDotWarn_1ln8t_743 {
  background: var(--ds-warning);
}

/* ── 运营动态 log（mono 时间 + kind tag + 依据 + 推送标记） ── */
._opsLog_1ln8t_759 {
  display: flex;
  flex-direction: column;
}

._opsLogItem_1ln8t_764 {
  display: grid;
  grid-template-columns: 52px minmax(0, 1fr);
  gap: 12px;
  padding: 11px 0;
  border-top: 1px solid var(--ds-border);
}

._opsLogItem_1ln8t_764:first-child {
  border-top: 0;
  padding-top: 2px;
}

._opsLogItem_1ln8t_764 time {
  color: var(--ds-text-subtle);
  font-family: var(--ds-font-mono);
  font-size: 11px;
  font-variant-numeric: tabular-nums;
}

._opsLogLine_1ln8t_784 {
  display: flex;
  align-items: baseline;
  gap: 8px;
}

._opsTag_1ln8t_790 {
  flex: 0 0 auto;
  font-family: var(--ds-font-mono);
  font-size: 9px;
  font-weight: 600;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  padding: 2px 6px;
  border-radius: 5px;
  background: var(--ds-bg-alt);
  color: var(--ds-text-muted);
}
._opsTagWarn_1ln8t_802 {
  background: #fffbeb;
  color: #b45309;
}

._opsLogItem_1ln8t_764 b {
  font-size: 13px;
  line-height: 1.45;
  font-weight: 600;
}

._opsMeta_1ln8t_813 {
  margin-top: 4px;
  color: var(--ds-text-subtle);
  font-size: 11px;
}

._opsLogItem_1ln8t_764 p {
  margin: 5px 0 0;
  color: var(--ds-text-muted);
  font-size: 12px;
  line-height: 1.5;
}

._opsPush_1ln8t_826 {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  margin-top: 6px;
  font-family: var(--ds-font-mono);
  font-size: 10px;
  color: var(--ds-text-muted);
}

._opsEmpty_1ln8t_836 {
  padding: 16px;
  border: 1px dashed var(--ds-border-strong);
  border-radius: var(--ds-radius-md);
  color: var(--ds-text-muted);
  font-size: 12px;
}

@media (max-width: 700px) {
  ._tabPagePub_1ln8t_15 {
    overflow-y: auto;
  }

  ._matrixBody_1ln8t_26 {
    flex: 0 0 auto;
    min-height: auto;
    flex-direction: column;
  }

  ._profileScroll_1ln8t_38 {
    flex: 0 0 auto;
    overflow: visible;
  }

  ._profile_1ln8t_10 {
    padding: var(--ds-space-4) 14px 48px;
  }

  ._workspaceHead_1ln8t_122,
  ._statStrip_1ln8t_111,
  ._pendingGrid_1ln8t_358,
  ._pendingDecision_1ln8t_451,
  ._roleGrid_1ln8t_365,
  ._workspaceTwoCol_1ln8t_321 {
    grid-template-columns: 1fr;
  }

  ._sectionHead_1ln8t_328 {
    align-items: flex-start;
    flex-direction: column;
  }
}
.mcgc-page {
  flex: 1;
  min-height: 0;
  height: 100%;
  background: var(--ds-bg);
  color: var(--ds-text);
  font-family: var(--ds-font);
}

.mcgc-layout {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 312px;
  align-items: stretch;
  height: 100%;
  min-height: 0;
  background: var(--ds-bg);
  border-top: 1px solid var(--ds-border);
}

.mcgc-chat {
  display: flex;
  flex-direction: column;
  min-width: 0;
  min-height: 0;
  border-right: 1px solid var(--ds-border);
}

.mcgc-page .grp-head {
  display: flex;
  align-items: center;
  gap: 14px;
  padding: 14px 24px;
  border-bottom: 1px solid var(--ds-border);
}

.mcgc-page .grp-title-wrap {
  min-width: 0;
}

.mcgc-page .grp-title {
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: 15px;
  font-weight: 600;
  color: var(--ds-text);
}

.mcgc-page .grp-badge {
  padding: 2px 8px;
  border-radius: var(--ds-radius-pill);
  background: var(--ds-bg-alt);
  color: var(--ds-text-muted);
  font-size: 11px;
  font-weight: 500;
}

.mcgc-page .grp-sub {
  margin: 3px 0 0;
  font-size: 12px;
  color: var(--ds-text-muted);
}

.mcgc-page .grp-members-wrap {
  position: relative;
  margin-left: auto;
}

.mcgc-page .grp-members {
  display: flex;
  align-items: center;
  gap: 12px;
  margin: 0;
  padding: 0;
  border: 0;
  background: transparent;
  cursor: pointer;
  font: inherit;
}

.mcgc-page .avatar-stack {
  display: flex;
}

.mcgc-page .avatar-stack .av {
  margin-left: -8px;
  box-shadow: 0 0 0 2px var(--ds-bg);
}

.mcgc-page .avatar-stack .av:first-child {
  margin-left: 0;
}

.mcgc-page .grp-count {
  font-size: 12px;
  line-height: 1.4;
  color: var(--ds-text-muted);
  text-align: right;
}

.mcgc-page .grp-count .on {
  color: var(--ds-text);
  font-weight: 600;
}

.mcgc-page .av {
  display: flex;
  align-items: center;
  justify-content: center;
  flex: none;
  border: 1px solid var(--ds-border);
  border-radius: 50%;
  background: rgba(24, 24, 27, 0.04);
  color: var(--ds-text);
  font-weight: 600;
}

.mcgc-page .av-24 {
  width: 24px;
  height: 24px;
  font-size: 11px;
}

.mcgc-page .offline {
  background: var(--ds-bg-alt);
  color: var(--ds-text-subtle);
}

.mcgc-page .members-popover {
  position: absolute;
  top: calc(100% + 12px);
  right: 0;
  z-index: 2;
  width: 360px;
  padding: 10px;
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-lg);
  background: var(--ds-surface);
  box-shadow: var(--ds-shadow-deep);
}

.mcgc-page .members-list {
  margin: 0;
  padding: 0;
  list-style: none;
}

.mcgc-page .member-row {
  display: flex;
  gap: 12px;
  align-items: flex-start;
  padding: 10px;
  border-radius: var(--ds-radius-md);
}

.mcgc-page .member-row + .member-row {
  border-top: 1px solid var(--ds-border);
}

.mcgc-page .member-main {
  min-width: 0;
  flex: 1;
}

.mcgc-page .member-name-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
}

.mcgc-page .member-name {
  font-size: 13px;
  font-weight: 600;
  color: var(--ds-text);
}

.mcgc-page .member-status,
.mcgc-page .member-jump {
  border-radius: var(--ds-radius-pill);
  font-size: 11px;
  font-weight: 500;
  line-height: 1;
  padding: 6px 10px;
}

.mcgc-page .member-status {
  background: rgba(24, 24, 27, 0.06);
  color: var(--ds-text);
}

.mcgc-page .member-jump {
  border: 1px solid var(--ds-border);
  background: var(--ds-bg);
  color: var(--ds-text-muted);
  cursor: default;
}

.mcgc-page .member-jump:disabled {
  opacity: 1;
}

.mcgc-page .member-identity {
  margin: 6px 0 0;
  font-size: 12px;
  line-height: 1.55;
  color: var(--ds-text-muted);
}

.mcgc-page .stream {
  display: flex;
  flex: 1;
  min-height: 0;
  align-items: stretch;
  justify-content: flex-start;
  overflow-y: auto;
  padding: 24px;
}

.mcgc-page .stream-list {
  display: flex;
  flex: 1;
  min-width: 0;
  flex-direction: column;
  gap: 14px;
}

.mcgc-page .empty-mini {
  max-width: 460px;
  margin: auto;
  padding: 28px 20px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-lg);
  background: var(--ds-bg);
  text-align: center;
}

.mcgc-page .empty-glyph {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 40px;
  height: 40px;
  margin: 0 auto 12px;
  border-radius: 50%;
  background: var(--ds-bg-alt);
  color: var(--ds-text-subtle);
  font-size: 18px;
}

.mcgc-page .empty-title {
  font-size: 14px;
  font-weight: 600;
  color: var(--ds-text);
}

.mcgc-page .empty-sub {
  margin: 6px 0 0;
  font-size: 13px;
  line-height: 1.6;
  color: var(--ds-text-muted);
}

.mcgc-page .cast {
  border: 1px solid var(--ds-border);
  border-left: 4px solid var(--ds-text-subtle);
  border-radius: var(--ds-radius-lg);
  background: var(--ds-surface);
}

.mcgc-page .cast-confirm {
  border-left-color: var(--ds-text);
}

.mcgc-page .cast.done {
  border-left-color: #166534;
  background: rgba(22, 101, 52, 0.04);
}

.mcgc-page .cast-feed-error {
  border-left-color: #b91c1c;
  background: rgba(185, 28, 28, 0.04);
}

.mcgc-page .cast-summary {
  display: flex;
  width: 100%;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  padding: 14px 16px;
  border: 0;
  background: transparent;
  color: inherit;
  cursor: pointer;
  text-align: left;
  font: inherit;
}

.mcgc-page .cast-summary-main,
.mcgc-page .cast-head-main {
  display: flex;
  min-width: 0;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
}

.mcgc-page .cast-avatar {
  background: var(--ds-bg-alt);
}

.mcgc-page .cast-owner {
  font-size: 13px;
  font-weight: 600;
  color: var(--ds-text);
}

.mcgc-page .cast-kicker,
.mcgc-page .cast-status-chip,
.mcgc-page .cast-risk-badge,
.mcgc-page .cast-mention {
  display: inline-flex;
  align-items: center;
  border-radius: var(--ds-radius-pill);
  padding: 3px 9px;
  font-size: 11px;
  font-weight: 600;
  line-height: 1;
}

.mcgc-page .cast-kicker,
.mcgc-page .cast-status-chip {
  background: rgba(24, 24, 27, 0.06);
  color: var(--ds-text-muted);
}

.mcgc-page .cast-risk-badge {
  background: rgba(245, 158, 11, 0.12);
  color: #b45309;
}

.mcgc-page .cast.done .cast-kicker {
  background: rgba(22, 163, 74, 0.12);
  color: #166534;
}

.mcgc-page .off-pill {
  display: inline-flex;
  align-items: center;
  border-radius: var(--ds-radius-pill);
  padding: 3px 9px;
  background: rgba(24, 24, 27, 0.06);
  color: var(--ds-text-muted);
  font-size: 11px;
  font-weight: 600;
  line-height: 1;
}

.mcgc-page .cast-mention {
  background: rgba(24, 24, 27, 0.08);
  color: var(--ds-text);
}

.mcgc-page .cast-summary-message {
  min-width: 0;
  max-width: 100%;
  color: var(--ds-text-muted);
  font-size: 13px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.mcgc-page .cast-summary-time,
.mcgc-page .cast-meta-mono {
  font-family: var(--ds-font-mono);
  font-size: 12px;
  color: var(--ds-text-muted);
}

.mcgc-page .cast-body {
  display: flex;
  flex-direction: column;
  gap: 10px;
  padding: 0 16px 16px;
}

.mcgc-page .cast-head {
  padding: 14px 16px 0;
}

.mcgc-page .cast-line {
  display: flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
  font-size: 13px;
  color: var(--ds-text);
}

.mcgc-page .cast-line-label {
  color: var(--ds-text-subtle);
}

.mcgc-page .cast-sub-status::before {
  content: '/';
  margin-right: 8px;
  color: var(--ds-text-subtle);
}

.mcgc-page .cast-message {
  margin: 0;
  font-size: 13px;
  line-height: 1.6;
  color: var(--ds-text);
}

.mcgc-page .cast-resolved {
  color: #166534;
}

.mcgc-page .cast-progress-wrap {
  display: flex;
  align-items: center;
  gap: 10px;
}

.mcgc-page .cast-progress {
  position: relative;
  flex: 1;
  height: 6px;
  overflow: hidden;
  border-radius: var(--ds-radius-pill);
  background: rgba(24, 24, 27, 0.08);
}

.mcgc-page .cast-progress-fill {
  display: block;
  height: 100%;
  border-radius: inherit;
  background: var(--ds-text);
}

.mcgc-page .cast-actions {
  display: flex;
  gap: 10px;
  padding-top: 2px;
}

.mcgc-page .cast-error {
  margin: 0;
  font-size: 12px;
  line-height: 1.5;
  color: #b91c1c;
}

.mcgc-page .talk-user {
  display: flex;
  align-self: flex-end;
  max-width: min(560px, 74%);
  flex-direction: column;
  align-items: flex-end;
  gap: 5px;
}

.mcgc-page .talk-user-time {
  padding-right: 4px;
}

.mcgc-page .talk-user-bubble {
  padding: 12px 14px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-lg);
  background: rgba(24, 24, 27, 0.04);
  color: var(--ds-text);
  font-size: 13px;
  line-height: 1.6;
  overflow-wrap: anywhere;
}

.mcgc-page .talk-user-target {
  margin-right: 6px;
  font-weight: 600;
}

.mcgc-page .cast-btn {
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-pill);
  background: var(--ds-bg);
  color: var(--ds-text);
  padding: 8px 14px;
  font: inherit;
  cursor: pointer;
}

.mcgc-page .cast-btn-primary {
  border-color: var(--ds-text);
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
}

.mcgc-page .cast-btn:disabled {
  opacity: 0.56;
  cursor: not-allowed;
}

.mcgc-page .composer {
  border-top: 1px solid var(--ds-border);
  padding: 14px 24px;
}

.mcgc-page .composer-box {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 10px 12px 10px 16px;
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-xl);
  background: var(--ds-bg);
}

.mcgc-page .composer-target {
  position: relative;
  flex: none;
}

.mcgc-page .composer-at {
  padding: 4px 8px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
  background: transparent;
  color: var(--ds-text-muted);
  font-size: 12px;
  cursor: pointer;
}

.mcgc-page .composer-at.is-selected {
  border-color: var(--ds-text);
  color: var(--ds-text);
}

.mcgc-page .composer-popover {
  position: absolute;
  left: 0;
  bottom: calc(100% + 12px);
  z-index: 2;
  width: 360px;
  padding: 10px;
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-lg);
  background: var(--ds-surface);
  box-shadow: var(--ds-shadow-deep);
}

.mcgc-page .composer-member-list {
  margin: 0;
  padding: 0;
  list-style: none;
}

.mcgc-page .composer-member-option {
  display: flex;
  width: 100%;
  align-items: flex-start;
  justify-content: space-between;
  gap: 12px;
  padding: 10px;
  border: 0;
  border-radius: var(--ds-radius-md);
  background: transparent;
  color: inherit;
  cursor: pointer;
  text-align: left;
  font: inherit;
}

.mcgc-page .composer-member-option:hover {
  background: rgba(24, 24, 27, 0.04);
}

.mcgc-page .composer-member-main {
  display: flex;
  min-width: 0;
  align-items: flex-start;
  gap: 10px;
}

.mcgc-page .composer-member-avatar {
  flex: none;
}

.mcgc-page .composer-member-copy {
  display: flex;
  min-width: 0;
  flex-direction: column;
  gap: 4px;
}

.mcgc-page .composer-member-name {
  font-size: 13px;
  font-weight: 600;
  color: var(--ds-text);
}

.mcgc-page .composer-member-identity {
  font-size: 12px;
  line-height: 1.5;
  color: var(--ds-text-muted);
}

.mcgc-page .composer-member-status {
  flex: none;
  border-radius: var(--ds-radius-pill);
  background: rgba(24, 24, 27, 0.06);
  color: var(--ds-text-muted);
  padding: 4px 8px;
  font-size: 11px;
  font-weight: 600;
  line-height: 1;
}

.mcgc-page .composer-input {
  flex: 1;
  min-width: 0;
  border: 0;
  background: transparent;
  color: var(--ds-text);
  font: inherit;
  font-size: 14px;
}

.mcgc-page .composer-input::placeholder {
  color: var(--ds-text-subtle);
}

.mcgc-page .composer-input:focus {
  outline: none;
}

.mcgc-page .send {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 34px;
  height: 34px;
  border: 0;
  border-radius: 50%;
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
  cursor: pointer;
}

.mcgc-page .cast-local-boundary,
.mcgc-page .cast-offboard {
  border-left-color: var(--ds-text-subtle);
}

.mcgc-page .rail {
  display: flex;
  flex-direction: column;
  min-width: 0;
  background: var(--ds-bg);
}

.mcgc-page .rail-head {
  padding: 16px 18px 12px;
}

.mcgc-page .rail-title {
  font-size: 13px;
  font-weight: 600;
  color: var(--ds-text);
}

.mcgc-page .rail-summary {
  margin-top: 3px;
  font-size: 12px;
  color: var(--ds-text-muted);
}

.mcgc-page .rail-summary .n,
.mcgc-page .cnt {
  font-family: var(--ds-font-mono);
}

.mcgc-page .rail-sec {
  padding: 4px 12px 8px;
}

.mcgc-page .rail-sec-head {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 10px 6px 8px;
  color: var(--ds-text-muted);
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
}

.mcgc-page .cnt {
  padding: 1px 7px;
  border-radius: var(--ds-radius-pill);
  background: var(--ds-bg-alt);
  color: var(--ds-text);
  font-size: 11px;
  letter-spacing: 0;
}

.mcgc-page .cnt.warn {
  color: #b45309;
  background: rgba(245, 158, 11, 0.14);
}

.mcgc-page .rail-empty {
  margin: 0 6px;
  padding: 10px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-md);
  background: var(--ds-bg);
  color: var(--ds-text-muted);
  font-size: 12px;
  line-height: 1.5;
}

.mcgc-page .rail-list {
  display: flex;
  flex-direction: column;
  gap: 8px;
}

.mcgc-page .rail-row {
  display: flex;
  width: 100%;
  align-items: flex-start;
  gap: 10px;
  padding: 10px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-md);
  background: var(--ds-surface);
  color: var(--ds-text);
  text-align: left;
  cursor: pointer;
  font: inherit;
}

.mcgc-page .rail-row:hover .jump,
.mcgc-page .rail-row:focus-visible .jump {
  opacity: 1;
}

.mcgc-page .rail-row:focus-visible {
  outline: 1px solid var(--ds-text);
  outline-offset: 2px;
}

.mcgc-page .rail-avatar {
  background: var(--ds-bg-alt);
}

.mcgc-page .rail-row-copy {
  display: flex;
  min-width: 0;
  flex: 1;
  flex-direction: column;
  gap: 6px;
}

.mcgc-page .rail-row-headline {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
}

.mcgc-page .rail-row-title {
  min-width: 0;
  font-size: 12px;
  font-weight: 600;
  color: var(--ds-text);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.mcgc-page .rail-row-meta {
  display: flex;
  min-width: 0;
  gap: 8px;
  flex-wrap: wrap;
  font-size: 11px;
  line-height: 1.45;
  color: var(--ds-text-muted);
}

.mcgc-page .rail-row-meta-mono {
  font-family: var(--ds-font-mono);
}

.mcgc-page .rail-mini-progress-wrap {
  display: flex;
  align-items: center;
  gap: 8px;
}

.mcgc-page .rail-mini-progress {
  position: relative;
  flex: 1;
  height: 4px;
  overflow: hidden;
  border-radius: var(--ds-radius-pill);
  background: rgba(24, 24, 27, 0.08);
}

.mcgc-page .rail-mini-progress-fill {
  display: block;
  height: 100%;
  border-radius: inherit;
  background: var(--ds-text);
}

.mcgc-page .jump {
  flex: none;
  color: var(--ds-text-subtle);
  opacity: 0.4;
  transition: opacity 120ms ease;
}

.mcgc-page .rail-divider {
  height: 1px;
  margin: 4px 18px;
  background: var(--ds-border);
}

.mcgc-page .rail-hint {
  margin: auto 12px 0;
  padding: 10px 12px;
  border-top: 1px solid var(--ds-border);
  color: var(--ds-text-muted);
  font-size: 12px;
  line-height: 1.5;
}

.mcgc-page .rail-hint b {
  color: var(--ds-text);
  font-weight: 500;
}
/*
 * console s1 React 还原 · 局部 layout
 * 视觉 source: docs/design/console-redesign/2026-05-14-product-canvas/s1-first-empty.html
 * 所有数值用 --ds-* token；§12 console azure 收紧（按钮 ink 而非 azure）。
 */

/*
 * 共享通知区：guide-panel + antd message 纵向排列，pointer-events 透传给下方画布
 * antd message 默认 position:fixed，在 strip 内重写为 relative 以参与 flex 布局。
 */
.canvas-notification-strip {
  z-index: 1050; /* 高于输入区(1000) 低于 popover(1030) */
}
.canvas-notification-strip .ant-message {
  position: relative !important;
  top: auto !important;
  left: auto !important;
  right: auto !important;
  transform: none !important;
  pointer-events: auto;
}
.canvas-notification-strip .ant-message .ant-message-notice {
  margin-bottom: 0;
  padding: 0;
}
.console-shell {
  display: grid;
  grid-template-rows: var(--ds-header-height) 1fr;
  grid-template-columns: minmax(0, 1fr);
  height: 100vh;
  background: var(--ds-bg);
  color: var(--ds-text);
}

.console-body {
  position: relative;
  display: grid;
  grid-template-columns: 1fr;
  width: 100%;
  min-width: 0;
  min-height: 0;
  overflow: hidden;
}

/* V1：画布/工作区左上角「默认操作 · 产品」挂载（非顶栏全局 scope） */
.canvas-product-mount {
  position: absolute;
  top: 12px;
  left: 16px;
  z-index: 50; /* 高于 DataDashboardFullscreen(40)，避免数据/投放全屏盖住 */
  pointer-events: none;
}
.canvas-product-mount > * {
  pointer-events: auto;
}
/* 数据/投放全屏 portal 盖住 body 时，挂载改为 fixed 贴在顶栏下 */
.console-shell--data-fullscreen .canvas-product-mount,
.console-shell--placement-fullscreen .canvas-product-mount {
  position: fixed;
  top: calc(var(--ds-header-height, 56px) + 12px);
  left: 16px;
  z-index: 50;
}

.product-mount {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  height: 30px;
  padding: 0 12px;
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-pill);
  background: var(--ds-bg);
  font-family: inherit;
  font-size: 12px;
  font-weight: 600;
  color: var(--ds-text);
  cursor: pointer;
  box-shadow: 0 1px 0 rgba(24, 24, 27, 0.03);
}
.product-mount:hover {
  background: var(--ds-bg-alt);
}
.product-mount__label {
  color: var(--ds-text-subtle);
  font-weight: 500;
  font-size: 11px;
}
.product-mount__dot {
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: var(--ds-success);
  flex-shrink: 0;
}
.product-mount__name {
  max-width: 160px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.product-mount__change {
  color: var(--ds-text-muted);
  font-weight: 500;
  border-left: 1px solid var(--ds-border);
  padding-left: 8px;
  margin-left: 2px;
  white-space: nowrap;
}
.product-mount--empty .product-mount__dot {
  background: var(--ds-text-subtle);
}
.product-mount--skeleton,
.product-mount--error {
  cursor: default;
}
.product-mount--error {
  color: var(--ds-danger);
}
.product-mount:disabled {
  opacity: 0.7;
  cursor: default;
}
.product-mount:disabled:hover {
  background: var(--ds-bg);
}

/* 监控 tab 全屏大盘（!825）：console-body 收单列。 */
.console-body--full {
  grid-template-columns: 1fr;
}

/*
 * 数据 tab 整屏接管（spec 2026-06-24-data-tab-fullscreen-dashboard）：
 * DataDashboardFullscreen 经 createPortal 挂到 document.body（逃出 reactflow
 * .react-flow__viewport 的 transform 平面，否则 position:fixed 受 transform 祖先牵连塌缩），
 * 以 position:fixed top:header inset 铺满视口、盖住画布装饰。
 * 这里只做「去 dock 列 + 收画布装饰层（缩放工具条 / 背景网格点 / minimap / controls）」，
 * 不要 display:none 掉 .console-canvas / .canvas-stage（承载 data 节点标记，仍需在 DOM）。
 * dock DOM 已在 ConsoleCanvasPage 撤掉，这里收单列即可。与监控全屏（.console-body--full）共存。
 */
.console-shell--data-fullscreen .console-body,
.console-shell--placement-fullscreen .console-body {
  grid-template-columns: 1fr;
}

.console-shell--publish-persona-dock [data-testid="publish-account-home"] {
  padding-right: min(420px, 28vw);
  transition: padding-right 0.36s cubic-bezier(0.16, 1, 0.3, 1);
}

/* 监控全屏采集态 dock 带出：MonitorDashboard 让出 dock 宽度（复用发布 tab 让位机制，
   口径与 --publish-persona-dock 完全一致）。根容器已带 data-testid="monitor-dashboard"，
   直接套此机制，不新增 testid、不另造动画。 */
.console-shell--monitor-collect-dock [data-testid="monitor-dashboard"] {
  padding-right: min(420px, 28vw);
  transition: padding-right 0.36s cubic-bezier(0.16, 1, 0.3, 1);
}

.console-shell--data-fullscreen .canvas-toolbar,
.console-shell--data-fullscreen .react-flow__background,
.console-shell--data-fullscreen .react-flow__minimap,
.console-shell--data-fullscreen .react-flow__controls,
.console-shell--placement-fullscreen .canvas-toolbar,
.console-shell--placement-fullscreen .react-flow__background,
.console-shell--placement-fullscreen .react-flow__minimap,
.console-shell--placement-fullscreen .react-flow__controls {
  display: none;
}

.console-entry-loading {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 100%;
  height: 100vh;
  min-height: 360px;
  background: #ffffff;
  color: var(--ds-text);
}

.console-entry-loading__status {
  display: inline-flex;
  align-items: center;
  gap: 12px;
}

.console-entry-loading__mark-wrap {
  position: relative;
  width: 40px;
  height: 40px;
  flex: 0 0 auto;
  animation: console-entry-logo-breathe 1.6s ease-in-out infinite;
}

.console-entry-loading__mark {
  width: 100%;
  height: 100%;
  display: block;
  filter: drop-shadow(0 10px 18px rgba(24, 24, 27, 0.1));
}

.console-entry-loading__text {
  font-size: 15px;
  font-weight: 650;
  line-height: 22px;
  letter-spacing: 0;
  color: var(--ds-text);
}

@keyframes console-entry-logo-breathe {
  0%,
  100% {
    transform: translateY(0) scale(1);
    opacity: 0.96;
  }

  48% {
    transform: translateY(1px) scale(0.965);
    opacity: 0.88;
  }

  68% {
    transform: translateY(-1px) scale(1.018);
    opacity: 1;
  }
}

@media (prefers-reduced-motion: reduce) {
  .console-entry-loading__mark-wrap {
    animation: none;
  }
}

/* ===== Topbar ===== */
.console-topbar {
  display: flex;
  align-items: center;
  gap: var(--ds-space-4);
  padding: 0 var(--ds-space-5);
  border-bottom: 1px solid var(--ds-border);
  background: var(--ds-surface);
}

.topbar-left {
  display: flex;
  align-items: center;
  gap: var(--ds-space-3);
}

.topbar-logo {
  display: inline-flex;
  align-items: center;
  gap: var(--ds-space-2);
  font-size: 15px;
  font-weight: 700;
  color: var(--ds-text);
}

.logo-mark {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 24px;
  height: 24px;
  border-radius: var(--ds-radius-sm);
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
  font-size: 12px;
  font-weight: 800;
}

.topbar-divider {
  width: 1px;
  height: 20px;
  background: var(--ds-border);
}

.product-switcher {
  display: inline-flex;
  align-items: center;
  gap: var(--ds-space-2);
  padding: var(--ds-space-1) var(--ds-space-3);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-md);
  background: var(--ds-bg);
  font-size: 13px;
  color: var(--ds-text);
  cursor: pointer;
}

.product-switcher--empty {
  color: var(--ds-text-subtle);
  font-weight: 500;
  border-style: dashed;
  cursor: default;
}

.product-switcher .caret {
  font-size: 10px;
  color: var(--ds-text-subtle);
}

.topbar-spacer {
  flex: 1;
}

.topbar-module-nav.map-ttab-bar {
  align-self: stretch;
  display: flex;
  align-items: center;
  min-width: 0;
  max-width: min(520px, 44vw);
  margin-left: var(--ds-space-1);
  flex: 0 1 auto;
}

.topbar-module-nav .map-ttab-nav {
  display: flex;
  align-items: center;
  gap: 2px;
  min-width: 0;
  height: 100%;
  overflow-x: auto;
  scrollbar-width: none;
}

.topbar-module-nav .map-ttab-nav::-webkit-scrollbar {
  display: none;
}

.topbar-module-nav .map-ttab {
  position: relative;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex: 0 0 auto;
  height: 100%;
  padding: 0 13px;
  cursor: pointer;
  border: 0;
  border-radius: 0;
  background: transparent;
  font-family: inherit;
  font-size: 13px;
  font-weight: 600;
  color: var(--ds-text-muted);
  white-space: nowrap;
  transition: color 0.15s;
}

.topbar-module-nav .map-ttab .new-dot {
  width: 6px;
  height: 6px;
  margin-left: 6px;
  border-radius: 999px;
  background: var(--ds-accent-deep);
  flex: 0 0 auto;
}

.topbar-module-nav .map-ttab:hover {
  color: var(--ds-text);
}

.topbar-module-nav .map-ttab:focus-visible {
  outline: none;
  box-shadow: inset 0 0 0 2px rgba(24, 24, 27, 0.14);
}

.topbar-module-nav .map-ttab--on {
  color: var(--ds-text);
}

.topbar-module-nav .map-ttab--on::after {
  content: "";
  position: absolute;
  left: 13px;
  right: 13px;
  bottom: 0;
  height: 2px;
  border-radius: 2px;
  background: var(--ds-text);
}

.topbar-module-nav .map-ttab--soon {
  color: var(--ds-text-muted);
}

.topbar-module-nav .map-ttab--soon.map-ttab--on {
  color: var(--ds-text);
}

.topbar-right {
  display: flex;
  align-items: center;
  gap: var(--ds-space-3);
  flex: 0 0 auto;
}

/* §12 console azure 收紧：所有 topbar 按钮 ghost ink，不用 azure */
.topbar-btn {
  display: inline-flex;
  align-items: center;
  gap: var(--ds-space-2);
  padding: var(--ds-space-1) var(--ds-space-3);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-md);
  background: var(--ds-bg);
  font-size: 13px;
  color: var(--ds-text);
  text-decoration: none;
  cursor: pointer;
  transition: border-color 0.15s, background 0.15s;
}

.topbar-btn:hover {
  border-color: var(--ds-border-strong);
  background: var(--ds-bg-alt);
}

.topbar-btn--feishu {
  height: 32px;
  border-color: var(--ds-border-strong);
  background:
    linear-gradient(90deg, color-mix(in srgb, var(--ds-success) 10%, transparent), transparent 48%),
    var(--ds-bg);
  font-weight: 700;
}

.topbar-btn--feishu svg {
  flex: 0 0 auto;
}

.product-switcher:disabled {
  cursor: not-allowed;
  opacity: 0.6;
}

.product-switcher:disabled:hover {
  background: var(--ds-bg);
  border-color: var(--ds-border);
}

.console-topbar .topbar-avatar.ant-avatar {
  background: var(--ds-text) !important;
  color: var(--ds-text-on-ink) !important;
}

@media (max-width: 860px) {
  .topbar-module-nav.map-ttab-bar {
    max-width: 34vw;
  }

  .topbar-module-nav .map-ttab {
    padding: 0 11px;
  }
}

@media (max-width: 640px) {
  .console-topbar {
    gap: var(--ds-space-2);
    padding: 0 var(--ds-space-3);
    overflow: hidden;
  }

  .topbar-left {
    flex: 0 1 auto;
    min-width: 0;
    gap: var(--ds-space-2);
  }

  .topbar-logo span:not(.logo-mark),
  .topbar-divider,
  .topbar-spacer,
  .topbar-btn--feishu span {
    display: none;
  }

  .product-switcher {
    max-width: 112px;
    min-width: 0;
    padding: var(--ds-space-1) var(--ds-space-2);
  }

  .product-switcher > span:first-child {
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }

  .topbar-module-nav.map-ttab-bar {
    flex: 1 1 112px;
    min-width: 112px;
    max-width: none;
    margin-left: 0;
  }

  .topbar-module-nav .map-ttab {
    padding: 0 var(--ds-space-2);
  }

  .topbar-right {
    flex: 0 0 auto;
    gap: var(--ds-space-2);
  }

  .topbar-btn--feishu {
    width: 32px;
    justify-content: center;
    padding: 0;
  }
}

/* ===== Canvas ===== */
.console-canvas {
  display: flex;
  flex-direction: column;
  min-height: 0;
  overflow: hidden;
  background: var(--ds-bg);
}

.canvas-stage {
  flex: 1;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: var(--ds-space-6);
  overflow: auto;
}

.canvas-stage--mindmap {
  position: relative;
}

.agent-canvas-panel-host {
  position: absolute;
  right: var(--ds-space-5);
  bottom: var(--ds-space-5);
  z-index: 70;
  width: min(380px, calc(100% - var(--ds-space-5) * 2));
  pointer-events: none;
}

.agent-canvas-panel-hitbox {
  pointer-events: auto;
  width: 100%;
}

.agent-canvas-panel-host .agent-panel {
  pointer-events: auto;
  box-sizing: border-box;
  width: 100%;
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-md);
  background: color-mix(in srgb, var(--ds-bg) 96%, transparent);
  color: var(--ds-text);
  box-shadow: var(--ds-shadow-deep);
}

@media (max-width: 720px) {
  .agent-canvas-panel-host {
    left: var(--ds-space-3);
    right: var(--ds-space-3);
    bottom: var(--ds-space-3);
    width: auto;
  }
}

.canvas-placeholder {
  text-align: center;
  color: var(--ds-text-muted);
  max-width: 360px;
}

.ph-icon {
  font-size: 48px;
  margin-bottom: var(--ds-space-3);
}

.ph-title {
  font-size: 22px;
  font-weight: 700;
  color: var(--ds-text);
  letter-spacing: -0.01em;
  margin-bottom: var(--ds-space-2);
}

.ph-sub {
  font-size: 14px;
  color: var(--ds-text-muted);
}

.canvas-toolbar {
  display: flex;
  align-items: center;
  justify-content: center;
  padding: var(--ds-space-2) var(--ds-space-5);
  border-top: 1px solid var(--ds-border);
  background: var(--ds-surface);
}

.canvas-toolbar--idle .zoom-group {
  opacity: 0.55;
  pointer-events: none;
}

.zoom-group {
  display: inline-flex;
  align-items: center;
  gap: var(--ds-space-2);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-md);
  background: var(--ds-bg);
  padding: 2px var(--ds-space-1);
}

.zoom-group button {
  width: 24px;
  height: 24px;
  border: none;
  background: transparent;
  color: var(--ds-text-muted);
  font-size: 14px;
  cursor: pointer;
  border-radius: var(--ds-radius-sm);
}

.zoom-group button:hover {
  background: var(--ds-bg-alt);
  color: var(--ds-text);
}

.zoom-value {
  min-width: 40px;
  text-align: center;
  font-size: 12px;
  font-weight: 600;
  color: var(--ds-text-muted);
}

/* ===== Dock ===== */
.console-dock {
  position: fixed;
  right: 24px;
  top: 80px;
  bottom: 100px;
  width: 380px;
  z-index: 1000;
  border-radius: 16px;
  border: 1px solid var(--ds-border, #f0f0f0);
  box-shadow: 0 8px 32px rgba(0, 0, 0, 0.08);
  background: rgba(255, 255, 255, 0.86);
  backdrop-filter: blur(16px);
  -webkit-backdrop-filter: blur(16px);
  display: flex;
  flex-direction: column;
  min-height: 0;
  overflow: visible;
  transition: transform 0.4s cubic-bezier(0.16, 1, 0.3, 1), opacity 0.3s;
}
.console-dock.collapsed {
  transform: translateX(calc(100% + 24px));
}

/* data-sync-batch D1 — 数据 tab 全屏变体（仅 variant='data-fullscreen' 命中）。
   复合选择器（含 .console-dock 自身）特异度 0,3,0 高于基规则 0,2,0，无需改基样式即覆盖。
   - 滑入/滑出比基 dock 慢一档（.58s），匹配 docs/design/2026-06-26-data-sync-dock-motion.html；
   - collapsed 与基 dock / 发布 tab 同 peek：translateX(100% + 24px)，右侧露出「历史记录」把手。 */
.console-dock.console-dock--data-fullscreen {
  transition: transform 0.58s cubic-bezier(0.16, 1, 0.3, 1);
}
.console-dock.console-dock--data-fullscreen.collapsed {
  transform: translateX(calc(100% + 24px));
}
.console-dock.console-dock--data-fullscreen:not(.collapsed) {
  transform: none;
}

.console-dock.console-dock--publish-persona {
  transition: transform 0.48s cubic-bezier(0.16, 1, 0.3, 1), opacity 0.3s;
}

.console-dock.console-dock--publish-persona:not(.collapsed) {
  transform: none;
}

/* 发布 / 数据 tab 融合态：全局输入框(AgentInputBar)浮在对话坞内底(fixed)，消息流底部留出输入框高度，
   使最后一条消息不被融合的输入框遮挡（对应设计稿 .dmsgs padding-bottom）。 */
.console-dock--publish-persona:not(.collapsed) .dock-stream,
.console-dock--data-fullscreen:not(.collapsed) .dock-stream {
  padding-bottom: 80px;
}

@media (max-width: 900px) {
  .console-shell--publish-persona-dock [data-testid="publish-account-home"] {
    padding-right: 0;
  }
  .console-shell--monitor-collect-dock [data-testid="monitor-dashboard"] {
    padding-right: 0;
  }
}

.chat-handle {
  position: absolute;
  left: -30px;
  top: 50%;
  transform: translateY(-50%);
  width: 30px;
  height: 90px;
  background: rgba(255, 255, 255, 0.95);
  border: 1px solid var(--ds-border, rgba(24, 24, 27, 0.08));
  border-right: none;
  border-radius: 9px 0 0 9px;
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
  color: var(--ds-text-muted, #6b7280);
  font-size: 11px;
  font-weight: 600;
  box-shadow: -4px 0 12px -4px rgba(24, 24, 27, 0.12);
  transition: color .15s, background .15s;
  writing-mode: vertical-rl;
  text-orientation: mixed;
  outline: none;
  z-index: 1001;
}
.chat-handle:hover {
  color: var(--ds-text, #18181b);
  background: var(--ds-bg-alt, #f5f5f4);
}

/* data-sync-batch C5 — 「同步数据中」busy 修饰：ink 单色，竖排 spinner 在文案上方 */
.chat-handle--busy {
  color: var(--ds-text, #18181b);
  gap: 6px;
}
.chat-handle__spin {
  width: 11px;
  height: 11px;
  flex: 0 0 auto;
  border-radius: 50%;
  border: 1.6px solid currentColor;
  border-right-color: transparent;
  display: inline-block;
  animation: dock-sync-spin 0.9s linear infinite;
}

/* 消息流外框：浮钮 overlay 不参与滚动内容高度，避免按钮自身触发 scrollHeight 抖动 */
.dock-stream-frame {
  flex: 1;
  min-height: 0;
  position: relative;
  display: flex;
}

/* 消息流：可滚动区，agent 起始 + chips 入口 + user/agent 消息气泡 */
.dock-stream {
  flex: 1;
  overflow-y: auto;
  padding: var(--ds-space-4);
  display: flex;
  flex-direction: column;
  gap: var(--ds-space-4);
  min-height: 0;
}

/* 自动接管衔接点分隔线（素材上传完成） */
.dock-sys-divider {
  display: flex;
  align-items: center;
  gap: var(--ds-space-2);
  margin: var(--ds-space-1) 0;
}
.dock-sys-divider .line {
  flex: 1;
  height: 1px;
  background: var(--ds-border);
}
.dock-sys-divider .label {
  font-size: 11px;
  font-weight: 600;
  color: var(--ds-text-muted);
  letter-spacing: 0.03em;
  white-space: nowrap;
  display: inline-flex;
  align-items: center;
  gap: var(--ds-space-1);
}
.dock-sys-divider--mount .label {
  max-width: min(280px, 70vw);
  white-space: normal;
  text-align: center;
  line-height: 1.35;
}
.dock-sys-divider--mount .label strong {
  color: var(--ds-text);
  font-weight: 700;
}
.dock-tab-title {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.dock-sys-divider .label .ok {
  color: var(--ds-success);
}

/* 消息气泡 */
.dock-msg {
  display: flex;
  flex-direction: column;
  gap: var(--ds-space-1);
  font-size: 13px;
  line-height: 1.6;
}

.dock-msg .msg-role {
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.02em;
  text-transform: uppercase;
  color: var(--ds-text-subtle);
}

.dock-msg--component {
  max-width: 95%;
}

.dock-msg--component .agent-panel {
  width: 100%;
  box-sizing: border-box;
  padding: var(--ds-space-4);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-md);
  background: var(--ds-bg-alt);
  color: var(--ds-text);
}

.dock-msg--component .agent-panel-head {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: var(--ds-space-3);
  margin-bottom: var(--ds-space-3);
}

.dock-msg--component .agent-panel h2,
.dock-msg--component .agent-panel h3,
.dock-msg--component .agent-panel p {
  margin: 0;
}

.dock-msg--component .agent-panel h2 {
  font-size: 15px;
  font-weight: 700;
}

.dock-msg--component .agent-panel h3 {
  font-size: 13px;
  font-weight: 700;
}

.dock-msg--component .agent-panel-script-grid,
.dock-msg--component .agent-panel-draft,
.dock-msg--component .agent-panel-draft ol,
.dock-msg--component .agent-panel-draft li {
  display: flex;
  flex-direction: column;
  gap: var(--ds-space-2);
}

.dock-msg--component .agent-panel label {
  display: flex;
  flex-direction: column;
  gap: var(--ds-space-1);
  font-size: 12px;
  font-weight: 600;
  color: var(--ds-text-muted);
}

.dock-msg--component .agent-panel textarea,
.dock-msg--component .agent-panel input {
  width: 100%;
  box-sizing: border-box;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg);
  color: var(--ds-text);
  font: inherit;
}

.dock-msg--component .agent-panel textarea {
  min-height: 96px;
  padding: var(--ds-space-2);
  resize: vertical;
}

.dock-msg--component .agent-panel input {
  height: 32px;
  padding: 0 var(--ds-space-2);
}

.dock-msg--component .agent-panel-actions,
.dock-msg--component .agent-panel-draft footer {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--ds-space-2);
  margin-top: var(--ds-space-3);
}

.dock-msg--component .agent-panel button {
  height: 30px;
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg);
  color: var(--ds-text);
  font: inherit;
  font-weight: 600;
  cursor: pointer;
}

.dock-msg--component .agent-panel button:disabled {
  color: var(--ds-text-subtle);
  cursor: not-allowed;
}

.dock-msg--component .agent-panel-alert {
  display: flex;
  flex-direction: column;
  gap: var(--ds-space-1);
  margin-bottom: var(--ds-space-3);
  padding: var(--ds-space-2);
  border: 1px solid var(--ds-danger-border, #fecaca);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-danger-bg, #fff1f2);
}

.dock-msg--user .msg-body {
  align-self: flex-end;
  max-width: 88%;
  padding: var(--ds-space-3);
  border-radius: var(--ds-radius-md);
  /* §12：用户气泡用 ink 实色，不用 azure */
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
}

.dock-msg--agent .msg-body {
  max-width: 95%;
  padding: var(--ds-space-3);
  border-radius: var(--ds-radius-md);
  background: var(--ds-bg-alt);
  border: 1px solid var(--ds-border);
  color: var(--ds-text);
  line-height: 1.7;
  /* 切到 ReactMarkdown 渲染后，段落 / 列表 / 表格等由 <p><ul><table> 表达，
     不再依赖 pre-wrap 保留源码换行；遗留单 \n 走 markdown spec 合并为空格。 */
}

.dock-msg--agent .msg-body > :first-child { margin-top: 0; }
.dock-msg--agent .msg-body > :last-child { margin-bottom: 0; }

.dock-msg--agent .msg-body p {
  margin: 0 0 12px;
}

.dock-msg--agent .msg-body strong {
  font-weight: 600;
  color: var(--ds-text);
}

.dock-msg--agent .msg-body em {
  font-style: italic;
}

.dock-msg--agent .msg-body h1,
.dock-msg--agent .msg-body h2,
.dock-msg--agent .msg-body h3,
.dock-msg--agent .msg-body h4 {
  font-size: 15px;
  font-weight: 600;
  margin: 16px 0 8px;
  color: var(--ds-text);
  line-height: 1.4;
}

.dock-msg--agent .msg-body ul,
.dock-msg--agent .msg-body ol {
  margin: 10px 0 14px;
  padding-left: 24px;
}

.dock-msg--agent .msg-body li {
  margin: 4px 0;
}

.dock-msg--agent .msg-body li > p {
  margin: 0;
}

.dock-msg--agent .msg-body a {
  color: var(--ds-text);
  text-decoration: underline;
  text-underline-offset: 2px;
}
.dock-msg--agent .msg-body a:hover {
  color: var(--ds-accent-deep);
}

.dock-msg--agent .msg-body blockquote {
  margin: 12px 0;
  padding: 10px 14px;
  border-left: 3px solid var(--ds-text);
  background: var(--ds-bg);
  color: var(--ds-text);
  border-radius: 0 6px 6px 0;
}
.dock-msg--agent .msg-body blockquote > :last-child { margin-bottom: 0; }

.dock-msg--agent .msg-body code {
  font-family: var(--ds-font-mono);
  font-size: 12.5px;
  background: var(--ds-bg);
  padding: 2px 6px;
  border-radius: 4px;
  border: 1px solid var(--ds-border);
}

.dock-msg--agent .msg-body pre {
  background: var(--ds-bg);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
  padding: 12px 14px;
  overflow-x: auto;
  margin: 12px 0;
}
.dock-msg--agent .msg-body pre code {
  background: transparent;
  padding: 0;
  border: none;
  font-size: 12.5px;
}

.dock-msg--agent .msg-body hr {
  border: none;
  border-top: 1px solid var(--ds-border);
  margin: 16px 0;
}

.dock-msg--agent .msg-body table {
  width: 100%;
  border-collapse: separate;
  border-spacing: 0;
  margin: 12px 0 16px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
  overflow: hidden;
  font-size: 12.5px;
  background: var(--ds-bg);
}

.dock-msg--agent .msg-body thead th {
  text-align: left;
  font-weight: 600;
  color: var(--ds-text);
  padding: 10px 14px;
  background: var(--ds-bg-alt);
  border-bottom: 1px solid var(--ds-border-strong);
}

.dock-msg--agent .msg-body tbody td {
  padding: 10px 14px;
  border-bottom: 1px solid var(--ds-border);
  vertical-align: top;
  line-height: 1.65;
}

.dock-msg--agent .msg-body tbody tr:last-child td { border-bottom: none; }

.dock-msg--agent .msg-body tbody tr:nth-child(even) td {
  background: var(--ds-bg-alt);
}

/* 扁平活动块（偏差 #1/#2）：工具调用作为 agent 消息的延续，无外框、无「执行过程」
   折叠头；动作行 + 结果明细子行两层。dock 专用，不复用主聊天 ProcessBlock。 */
.dock-activity {
  margin-top: 6px;
  display: flex;
  flex-direction: column;
}
.dock-act-step + .dock-act-step {
  margin-top: var(--ds-space-1);
}

/* 工具行 / 步骤标题行：状态点 + 文字 */
.dock-act-row {
  display: flex;
  align-items: baseline;
  gap: 7px;
  padding: 3px 0;
  font-size: 12.5px;
  line-height: 1.5;
}
.dock-act-row .dot {
  flex-shrink: 0;
  width: 11px;
  text-align: center;
  font-size: 10px;
  position: relative;
  top: -1px;
}
.dock-act-row .lbl {
  color: var(--ds-text-muted);
}
.dock-act-row .suffix {
  color: var(--ds-text-subtle);
  font-weight: 500;
}

/* 状态色（沿用 SubActionChip 语义；console 收紧 azure，状态语义色不受限）*/
.dock-act-row--success .dot { color: var(--ds-success); }
.dock-act-row--fail .dot { color: var(--ds-danger); }
.dock-act-row--stopped .dot { color: var(--ds-text-subtle); }
.dock-act-row--running .dot {
  color: var(--ds-warning);
  animation: dock-act-pulse 1.2s ease-in-out infinite;
}
.dock-act-row--running .lbl {
  color: var(--ds-text);
  font-weight: 500;
}

/* 步骤标题（steps 路径）：始终 ink 加粗，置于状态色规则之后以胜出 */
.dock-act-row .lbl--step {
  color: var(--ds-text);
  font-weight: 600;
}

@keyframes dock-act-pulse {
  0%, 100% { opacity: 1; }
  50% { opacity: 0.28; }
}

/* steps 路径：步骤标题下的子动作缩进，与动作标签文字对齐（dot 11 + gap 7） */
.dock-act-step .dock-act-item {
  padding-left: 18px;
}

/* 结果明细子行（偏差 #2 两层）— 缩进对齐动作标签 */
.dock-act-detail {
  margin: 0 0 4px 18px;
  font-size: 11.5px;
  line-height: 1.5;
  color: var(--ds-text-muted);
}

/* 失败行的重试 / 跳过（仅 steps 路径传入回调时出现）*/
.dock-act-btns {
  display: flex;
  gap: var(--ds-space-2);
  margin: 4px 0 6px 18px;
}
.dock-act-btn {
  font-size: 12px;
  line-height: 1.4;
  padding: 4px 12px;
  border-radius: var(--ds-radius-sm);
  cursor: pointer;
  font-family: inherit;
}
.dock-act-btn--primary {
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
  border: 1px solid var(--ds-text);
}
.dock-act-btn--secondary {
  background: var(--ds-surface);
  color: var(--ds-text-muted);
  border: 1px solid var(--ds-border-strong);
}

/* ===== 气泡内嵌微沙盒 (Mini Sandbox) — spec 2026-06-22 §3 ===== */

.mini-sandbox {
  margin: 8px 0 4px 0;
  border-radius: 8px;
  overflow: hidden;
  font-size: 12.5px;
  line-height: 1.5;
}

/* — 进行中态：轻量单行 — */
.mini-sandbox--run {
  display: flex;
  align-items: center;
  gap: 7px;
  padding: 6px 10px;
  background: rgba(28, 126, 214, 0.06);
  border: 1px solid rgba(28, 126, 214, 0.15);
}

.mini-sandbox__dot--run {
  display: inline-block;
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: var(--ds-info, #1c7ed6);
  animation: dock-act-pulse 1.2s ease-in-out infinite;
  flex-shrink: 0;
}

.mini-sandbox__label {
  color: var(--ds-text-muted);
  font-weight: 500;
  display: flex;
  align-items: center;
  gap: 6px;
}

.mini-sandbox__progress {
  font-size: 11px;
  color: var(--ds-info, #1c7ed6);
  font-variant-numeric: tabular-nums;
}

/* — 失败态：卡片式 — */
.mini-sandbox--fail {
  padding: 10px 12px;
  background: rgba(250, 82, 82, 0.04);
  border: 1px solid rgba(250, 82, 82, 0.2);
}

.mini-sandbox__header {
  display: flex;
  align-items: center;
  gap: 6px;
  margin-bottom: 4px;
}

.mini-sandbox__icon {
  font-size: 11px;
  color: var(--ds-danger, #fa5252);
  flex-shrink: 0;
}

.mini-sandbox__title {
  font-weight: 600;
  color: var(--ds-danger, #fa5252);
  font-size: 12.5px;
}

.mini-sandbox__reason {
  margin: 0 0 8px 0;
  font-size: 11.5px;
  color: var(--ds-text-muted);
  line-height: 1.5;
}

.mini-sandbox__actions {
  display: flex;
  gap: 6px;
  flex-wrap: wrap;
}

.mini-sandbox__btn {
  font-size: 12px;
  line-height: 1.4;
  padding: 4px 12px;
  border-radius: var(--ds-radius-sm, 4px);
  cursor: pointer;
  font-family: inherit;
  transition: opacity 0.15s, background 0.15s;
}
.mini-sandbox__btn:hover { opacity: 0.85; }
.mini-sandbox__btn:active { opacity: 0.7; }

.mini-sandbox__btn--primary {
  background: var(--ds-info, #1c7ed6);
  color: #fff;
  border: 1px solid var(--ds-info, #1c7ed6);
}

.mini-sandbox__btn--secondary {
  background: var(--ds-surface, #fff);
  color: var(--ds-text-muted);
  border: 1px solid var(--ds-border-strong, #ced4da);
}

.mini-sandbox__btn--ghost {
  background: transparent;
  color: var(--ds-text-subtle, #868e96);
  border: 1px solid transparent;
}
.mini-sandbox__btn--ghost:hover {
  background: rgba(0, 0, 0, 0.04);
  opacity: 1;
}

/* ===== 过程感新增（spec 2026-06-10）===== */

/* 打字机光标 */
.dock-caret {
  display: inline-block;
  width: 7px;
  height: 14px;
  margin-left: 1px;
  vertical-align: -2px;
  background: var(--ds-text);
  animation: dock-caret-blink 1s steps(1) infinite;
}
@keyframes dock-caret-blink {
  50% { opacity: 0; }
}

/* dock 思考行（等待首字的内联反馈，无 avatar + 跳动省略号 + 内联跳秒）*/
.dock-thinking {
  display: flex;
  align-items: baseline;
  gap: 8px;
  padding: 8px 0;
  font-size: 12.5px;
  color: var(--ds-text-muted);
}
.dock-thinking .dots {
  animation: dock-think-pulse 1.4s ease-in-out infinite;
}
@keyframes dock-think-pulse {
  0%, 100% { opacity: 1; }
  50% { opacity: 0.25; }
}

/* 步骤行右侧耗时（制式数字） */
.dock-act-row .t {
  margin-left: auto;
  padding-left: 10px;
  flex-shrink: 0;
}
.elapsed {
  font-family: var(--ds-font-mono);
  font-variant-numeric: tabular-nums;
  font-size: 11.5px;
  color: var(--ds-text-subtle);
}

/* 整轮过程收纳行 */
.dock-proc-fold {
  display: flex;
  align-items: center;
  gap: var(--ds-space-2);
  padding: 4px 0;
  font-size: 12px;
  color: var(--ds-text-muted);
  cursor: pointer;
  user-select: none;
}
.dock-proc-fold:hover { color: var(--ds-text); }
.dock-proc-fold .chev {
  font-size: 10px;
  color: var(--ds-text-subtle);
  transition: transform 0.18s ease;
}
.dock-proc-fold--open .chev { transform: rotate(90deg); }
.dock-proc-fold .ok { color: var(--ds-success); font-size: 11px; }

/* 过程区收起动画（spec 设计稿：整轮完成后平滑收纳，点 fold 头平滑展开/收起）。
   用 grid-template-rows 0fr↔1fr 自动测高，等价设计稿 max-height 0.28s 但更顺、无魔数。
   内容始终挂载（折叠动画必须保留 DOM），折叠时 grid 收到 0 行高 + 淡出 + clip。 */
.dock-proc-body {
  display: grid;
  grid-template-rows: 1fr;
  opacity: 1;
  transition: grid-template-rows 0.28s ease, opacity 0.28s ease;
}
.dock-proc-body--folded {
  grid-template-rows: 0fr;
  opacity: 0;
}
.dock-proc-body > .dock-proc-body-inner {
  overflow: hidden;
  min-height: 0;
}

/* ===== 平台数据批量同步任务块（DockSyncTaskBlock，设计稿 2026-06-26）=====
   白底 ink 单色；折叠头 + 进度条 + 账号台账，镜像 dock-proc 折叠语义。
   console no-azure：状态/数字一律 ink，数字 Geist Mono；安静旋转环，无彩色脉冲。*/
.dock-sync-block {
  margin-top: 6px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-md);
  overflow: hidden;
  background: var(--ds-surface);
  /* .dock-stream 是 flex 列；本块带 overflow:hidden 会把 flex 自动最小高度降为 0，
     dock 内容多时被父容器压成只剩边框、台账行被裁掉（头部在、账号全没）。
     flex-shrink:0 锁住自身高度，让 .dock-stream（overflow-y:auto）改为滚动。 */
  flex-shrink: 0;
}
.dock-sync-head {
  display: grid;
  grid-template-columns: 13px auto 1fr auto;
  align-items: center;
  gap: 8px;
  width: 100%;
  padding: 10px 12px;
  border: none;
  background: none;
  text-align: left;
  cursor: pointer;
  font-family: inherit;
}
.dock-sync-tri {
  font-size: 9px;
  color: var(--ds-text-subtle);
  transition: transform 0.18s ease;
}
.dock-sync-head--open .dock-sync-tri { transform: rotate(90deg); }
.dock-sync-lead {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  font-size: 12px;
  font-weight: 700;
  color: var(--ds-text);
}
.dock-sync-cnt {
  grid-column: 4;
  justify-self: end;
  display: inline-flex;
  align-items: center;
  gap: 8px;
  font-size: 11.5px;
  font-weight: 600;
  color: var(--ds-text-muted);
}
.dock-sync-num {
  font-family: var(--ds-font-mono);
  font-weight: 800;
  color: var(--ds-text);
}
.dock-sync-issue {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  color: var(--ds-text-muted);
}
.dock-sync-issue--fail { color: var(--ds-danger); }
.dock-sync-issue--fail .dock-sync-num { color: var(--ds-danger); }

/* 安静旋转环（设计稿 .spin）：currentColor 单色，非彩色脉冲点 */
.dock-sync-spin {
  width: 11px;
  height: 11px;
  flex: 0 0 auto;
  border-radius: 50%;
  border: 1.6px solid currentColor;
  border-right-color: transparent;
  display: inline-block;
  animation: dock-sync-spin 0.9s linear infinite;
}
@keyframes dock-sync-spin { to { transform: rotate(360deg); } }

/* 完成徽标（设计稿 .mk.done / .mk.fail）：小号实心圆 + 白勾，非绿描边/绿字。
   done = 绿底白勾；fail = danger 底白叉。状态文案本身保持 muted ink（见 .dock-sync-state）。 */
.dock-sync-mk {
  width: 14px;
  height: 14px;
  flex: 0 0 auto;
  border-radius: 50%;
  display: grid;
  place-items: center;
  font-size: 8px;
  font-weight: 900;
  background: var(--ds-success);
  color: var(--ds-text-on-accent);
}
.dock-sync-mk--fail { background: var(--ds-danger); }
/* 每账号回写量数字（设计稿台账「回写 N 条」）：Geist Mono 制式数字，
   颜色继承 .dock-sync-state 的 muted ink，不抢色。 */
.dock-sync-writeback-num {
  font-family: var(--ds-font-mono);
  font-weight: 700;
}

/* 进度条（设计稿 .tbBar）：ds-bg-deep 轨 + ink 填充，确定性、无 shimmer */
.dock-sync-bar {
  height: 3px;
  background: var(--ds-bg-deep);
}
.dock-sync-bar > span {
  display: block;
  height: 100%;
  background: var(--ds-text);
  transition: width 0.3s ease;
}

/* 台账折叠（镜像 dock-proc-body：grid-rows 0fr↔1fr 平滑收纳，内容常驻 DOM）*/
.dock-sync-body {
  display: grid;
  grid-template-rows: 1fr;
  opacity: 1;
  transition: grid-template-rows 0.28s ease, opacity 0.28s ease;
}
.dock-sync-body--folded {
  grid-template-rows: 0fr;
  opacity: 0;
}
.dock-sync-body-inner {
  overflow: hidden;
  min-height: 0;
  padding: 0 12px;
}
.dock-sync-row {
  display: grid;
  grid-template-columns: 19px minmax(0, 1fr) auto;
  align-items: center;
  gap: 9px;
  padding: 7px 0;
  border-top: 1px solid var(--ds-border);
}
.dock-sync-row:first-child { border-top: none; }
.dock-sync-glyph {
  width: 19px;
  height: 19px;
  flex: 0 0 auto;
  border-radius: 5px;
  display: grid;
  place-items: center;
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
  font-size: 9.5px;
  font-weight: 800;
}
.dock-sync-glyph--ghost {
  background: var(--ds-bg-alt);
  color: var(--ds-text-muted);
  border: 1px solid var(--ds-border);
}
.dock-sync-name { min-width: 0; }
.dock-sync-name b {
  display: block;
  font-size: 11.5px;
  font-weight: 700;
  color: var(--ds-text);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.dock-sync-name span {
  display: block;
  color: var(--ds-text-subtle);
  font-size: 9.5px;
  font-weight: 600;
  margin-top: 1px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.dock-sync-state {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: 10.5px;
  font-weight: 700;
  white-space: nowrap;
  color: var(--ds-text-muted);
}
.dock-sync-state--running { color: var(--ds-text); }
.dock-sync-state--failed { color: var(--ds-danger); }
.dock-sync-reauth {
  height: 21px;
  padding: 0 9px;
  border-radius: var(--ds-radius-pill);
  border: 1px solid var(--ds-border-strong);
  background: var(--ds-surface);
  color: var(--ds-text);
  font-size: 10px;
  font-weight: 800;
  cursor: pointer;
  font-family: inherit;
}

/* 常驻状态条（输入框上方） */
.dock-statusline {
  display: flex;
  align-items: center;
  gap: var(--ds-space-2);
  margin-bottom: var(--ds-space-2);
  padding: 6px 12px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg-alt);
  font-size: 12px;
  color: var(--ds-text);
}
.dock-statusline .dot {
  color: var(--ds-warning);
  font-size: 9px;
  animation: dock-act-pulse 1.2s ease-in-out infinite;
}
.dock-statusline .nm {
  font-weight: 500;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.dock-statusline .elapsed { margin-left: auto; flex-shrink: 0; }

/* 回到最新浮钮徽标 */
.dock-jump-badge {
  margin-left: 6px;
  background: var(--ds-bg);
  color: var(--ds-text);
  font-size: 10px;
  font-weight: 700;
  border-radius: var(--ds-radius-pill);
  padding: 1px 7px;
}

/* dock 伴随解释行（spec P2 右栏伴随解释，2026-06-22）*/
.dock-explanation {
  padding: 6px 0 2px;
}
.dock-explanation__line {
  font-size: 13px;
  line-height: 1.72;
  color: var(--ds-text);
  transition: opacity 0.14s ease, transform 0.14s ease;
}
.dock-explanation.swap .dock-explanation__line {
  opacity: 0;
  transform: translateY(-5px);
}

@media (prefers-reduced-motion: reduce) {
  .dock-caret,
  .dock-statusline .dot,
  .dock-thinking .dots,
  .dock-sync-spin,
  .chat-handle__spin { animation: none; }
  .dock-proc-fold .chev,
  .dock-proc-body { transition: none; }
  .dock-sync-tri,
  .dock-sync-body,
  .dock-sync-bar > span { transition: none; }
  .dock-explanation__line { transition: none; }
}

/* Task 2.4 — 一句话式 live 结果引导（DockResultGuide，流尾渲染）*/
.dock-result-guide {
  padding: 6px 0 2px;
  font-size: 13px;
  line-height: 1.72;
  color: var(--ds-text-muted);
}
.dock-result-guide__text {
  display: inline;
}
.dock-result-guide__action {
  display: inline;
  padding: 0;
  margin: 0;
  border: none;
  background: none;
  color: var(--ds-text);
  font-size: inherit;
  font-family: inherit;
  line-height: inherit;
  cursor: pointer;
  text-decoration: underline;
  text-underline-offset: 2px;
  text-decoration-color: var(--ds-border-strong);
  transition: color 0.12s, text-decoration-color 0.12s;
}
.dock-result-guide__action:hover {
  color: var(--ds-text);
  text-decoration-color: var(--ds-text);
}
.dock-result-guide__sep {
  color: var(--ds-text-subtle);
  user-select: none;
}

/* 监控采集收尾动作链接容器（布局用，颜色由 .dock-result-guide__action ink 提供，无 azure）。 */
.dock-collect-actions {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 4px;
  margin-top: var(--ds-space-2, 8px);
}

/* Task 2.4 — 完成文字引导（committed，进会话历史）。视觉权威：原型 .botmsg + .guide/.gop
   （docs/design/2026-06-21-canvas-agent-three-track.html line 315-320 / 125-126,167-170）。
   引子句 .botmsg（13px/1.7 ink，b=700）；①②③ 用 .guide 列布局 + .gop（12.5px/1.6，b=700
   加粗小标题、说明保持正文色、内联动作链接 ink + border-strong 下划线）。 */
.dock-completion-guidance__lead {
  margin-top: var(--ds-space-3);
  font-size: 13px;
  line-height: 1.7;
  color: var(--ds-text);
}
.dock-completion-guidance__lead b {
  font-weight: 700;
}
.dock-completion-guidance__guide {
  display: flex;
  flex-direction: column;
  gap: var(--ds-space-2);
  margin-top: 11px;
}
.dock-completion-guidance__op {
  font-size: 12.5px;
  line-height: 1.6;
  color: var(--ds-text);
}
.dock-completion-guidance__op b {
  font-weight: 700;
}
/* 内联动作链接 —— 原型 .gop a：ink 色 + 600 + border-strong 下划线，nowrap。 */
.dock-completion-guidance__action {
  display: inline;
  padding: 0;
  margin: 0;
  border: none;
  border-bottom: 1px solid var(--ds-border-strong);
  background: none;
  color: var(--ds-text);
  font-weight: 600;
  font-size: inherit;
  font-family: inherit;
  line-height: inherit;
  white-space: nowrap;
  cursor: pointer;
  transition: border-color 0.12s;
}
.dock-completion-guidance__action:hover {
  border-bottom-color: var(--ds-text);
}

/* chips 组（s1 欢迎态品类 chips；Loading 占位 chips 也复用）*/
.dock-chips {
  display: flex;
  flex-wrap: wrap;
  gap: var(--ds-space-2);
  margin-top: var(--ds-space-1);
}

.dock-chip {
  display: inline-flex;
  align-items: center;
  gap: var(--ds-space-1);
  height: 30px;
  padding: 0 var(--ds-space-3);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-pill);
  background: var(--ds-bg);
  color: var(--ds-text);
  font-size: 12px;
  font-weight: 500;
  cursor: pointer;
  transition: border-color 0.15s, background 0.15s;
}

.dock-chip:hover {
  border-color: var(--ds-border-strong);
  background: var(--ds-bg-alt);
}

.dock-chip:disabled {
  cursor: not-allowed;
  opacity: 0.55;
}

.dock-chip:disabled:hover {
  background: var(--ds-bg);
  border-color: var(--ds-border);
}

/* 输入区 */
.dock-input-area {
  padding: var(--ds-space-4);
  flex-shrink: 0;
}

/* Task 3.2 — scope 回显条（选中卡时显示在 statusline 与 input-box 之间）
   §12 no-azure：ink 文字、border-strong 边框，绝不用 azure 色 */
.dock-scope-bar {
  display: flex;
  align-items: center;
  gap: var(--ds-space-2);
  margin-bottom: var(--ds-space-2);
  padding: 5px var(--ds-space-3);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg-alt);
  font-size: 12px;
  color: var(--ds-text);
}
.dock-scope-bar__label {
  flex: 1 1 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  font-weight: 500;
  color: var(--ds-text);
}
.dock-scope-bar__clear {
  flex-shrink: 0;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: 0;
  border: none;
  background: none;
  color: var(--ds-text-muted);
  font-size: 11px;
  line-height: 1;
  cursor: pointer;
  transition: color 0.12s;
}
.dock-scope-bar__clear:hover {
  color: var(--ds-text);
}

/* T4.3 — 编辑态 scope 条（正在编辑·标题·v#·#id）
   §12 no-azure：ink 文字，白底，绝不用 azure；数字用 Geist Mono。
   编辑态优先渲染，T3.2 选中条在编辑态隐藏（互斥由 ConsoleDock 逻辑控制）。 */
.dock-scope-bar--editing {
  border-color: var(--ds-border-strong);
}
.dock-scope-bar--editing .dock-scope-bar__label {
  font-weight: 600;
}
.dock-scope-bar__thumb {
  flex-shrink: 0;
  width: 22px;
  height: 22px;
  border-radius: var(--ds-radius-sm);
  object-fit: cover;
}
.dock-scope-bar__ver {
  font-family: var(--ds-font-mono);
  font-size: 11px;
  color: var(--ds-text-muted);
}
.dock-scope-bar__id {
  font-family: var(--ds-font-mono);
  font-size: 11px;
  color: var(--ds-text-muted);
}

.dock-input-box {
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-md);
  background: var(--ds-bg);
  padding: var(--ds-space-3);
  transition: border-color 0.15s, box-shadow 0.15s;
}

.dock-input-box:focus-within {
  border-color: var(--ds-border-strong);
}

.dock-input-box textarea {
  width: 100%;
  border: none;
  outline: none;
  resize: none;
  background: transparent;
  font-family: inherit;
  font-size: 13px;
  line-height: 1.5;
  color: var(--ds-text);
  /* auto-grow：JS 写 height（1-6 行），超过 max 后内部滚动 */
  min-height: 24px;
  max-height: 140px;
  overflow-y: auto;
  display: block;
}

.dock-input-box textarea::-webkit-scrollbar {
  width: 4px;
}

.dock-input-box textarea::-webkit-scrollbar-thumb {
  background: var(--ds-border-strong);
  border-radius: 2px;
}

.dock-input-box textarea::placeholder {
  color: var(--ds-text-subtle);
}

.dock-input-box textarea:disabled {
  cursor: not-allowed;
  opacity: 0.55;
}

.dock-input-actions {
  display: flex;
  align-items: center;
  margin-top: var(--ds-space-2);
}

/* §12：send btn ink 实色，不用 azure */
.dock-send-btn {
  margin-left: auto;
  display: inline-flex;
  align-items: center;
  gap: var(--ds-space-1);
  height: 30px;
  padding: 0 var(--ds-space-4);
  border: none;
  border-radius: var(--ds-radius-sm);
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
  font-size: 12px;
  font-weight: 700;
  cursor: pointer;
  transition: opacity 0.15s;
}

.dock-send-btn:hover {
  opacity: 0.85;
}

.dock-send-btn:disabled {
  cursor: not-allowed;
  opacity: 0.4;
}

/* 流式中用户上滑后的「↓ 回到最新」浮按钮，overlay 固定在阅读区底部居中 */
.dock-jump-to-bottom {
  position: absolute;
  left: 50%;
  bottom: var(--ds-space-3);
  transform: translateX(-50%);
  display: inline-flex;
  align-items: center;
  gap: 4px;
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
  border: none;
  border-radius: var(--ds-radius-pill);
  padding: 4px 12px;
  font-size: 11px;
  cursor: pointer;
  box-shadow: 0 4px 12px -4px rgba(24, 24, 27, 0.35);
  z-index: 5;
}

.dock-jump-to-bottom:hover {
  opacity: 0.92;
}

/* ===== Task 6 (s2): 4 态 placeholder / switcher / retry ===== */

/* skeleton shimmer 通用 */
@keyframes skeleton-shimmer {
  0% {
    background-position: -200px 0;
  }
  100% {
    background-position: 200px 0;
  }
}

.skeleton {
  display: inline-block;
  background: var(--ds-bg-alt);
  background-image: linear-gradient(
    90deg,
    var(--ds-bg-alt) 0%,
    var(--ds-border) 50%,
    var(--ds-bg-alt) 100%
  );
  background-size: 400px 100%;
  background-repeat: no-repeat;
  border-radius: 4px;
  animation: skeleton-shimmer 1.4s ease-in-out infinite;
}

/* product-switcher loading: skeleton 替代文字内容 */
.product-switcher--skeleton {
  background: var(--ds-bg-alt);
  border-color: var(--ds-border);
  cursor: default;
  padding: 6px 10px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
}

/* product-switcher error: 红字 + 不显 caret */
.product-switcher--error {
  border-color: var(--ds-border);
  color: var(--ds-danger);
  background: var(--ds-bg-alt);
  cursor: not-allowed;
}

.product-switcher--error:hover {
  border-color: var(--ds-border);
}

/* canvas-placeholder loading: 3 件 skeleton 垂直居中 */
.canvas-placeholder--loading {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: var(--ds-space-3);
}

/* canvas-placeholder error: ⚠ icon 红 + retry CTA */
.canvas-placeholder--error {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: var(--ds-space-2);
}

.ph-icon--danger {
  color: var(--ds-danger);
}

/* §12 主 CTA: ink-on-ink 实色 */
.canvas-retry-btn {
  margin-top: var(--ds-space-3);
  background: var(--ds-text);
  color: var(--ds-text-on-ink, var(--ds-bg));
  border: none;
  padding: 8px 18px;
  border-radius: 6px;
  font-size: 13px;
  font-weight: 600;
  cursor: pointer;
  transition: background 0.15s, transform 0.05s;
}

.canvas-retry-btn:hover {
  background: var(--ds-text);
  opacity: 0.88;
}

.canvas-retry-btn:active {
  transform: translateY(1px);
}

/* ==========================================================================
 * s2a Task 11 / F2 — MaterialOnboarding + DigitalHumanPicker + DockTabBar
 * 视觉源：docs/design/console-redesign/2026-05-14-product-canvas/s2a-states.html
 * （phase0-1 worktree）。完整 ds-* token 见 global-design.css。
 *
 * tint 本地化：global-design.css 没声明 --ds-warning-tint / --ds-success-tint
 * （mockup _base.css 才有），这里 fallback 到原值；保持 console 不引入额外全局 token。
 * ======================================================================== */

:root {
  --ds-warning-tint: rgba(245, 158, 11, 0.12);
  --ds-success-tint: rgba(34, 197, 94, 0.12);
}

/* ---- canvas stage 切到 onboarding 时的容器 ----
   覆盖 .canvas-stage 的 flex 居中：onboarding 态需要 card + picker 垂直堆叠
   （spec §5「数字人 picker 大卡下方追加」），不是横向 flex item 互相挤。 */
.canvas-stage--onboarding {
  display: block;
  padding: var(--ds-space-5) var(--ds-space-4);
  overflow-y: auto;
}

/* ---- onboard banner（baseline / ready 双态） ---- */
.onboard-banner {
  max-width: 920px;
  margin: 0 auto var(--ds-space-4);
  padding: var(--ds-space-4) var(--ds-space-5);
  background: var(--ds-bg);
  border: 1px solid var(--ds-border);
  border-left: 3px solid var(--ds-text);
  border-radius: var(--ds-radius-md);
  display: flex;
  gap: var(--ds-space-3);
  align-items: flex-start;
}
.onboard-banner .banner-emoji {
  font-size: 20px;
  flex-shrink: 0;
  line-height: 1.4;
}
.onboard-banner .banner-text {
  flex: 1;
  font-size: 13px;
  line-height: 1.7;
  color: var(--ds-text);
}
.onboard-banner .banner-text strong {
  color: var(--ds-text);
  font-weight: 700;
}
.onboard-banner .banner-sub {
  color: var(--ds-text-muted);
}
/* ready 态：ink-only 收紧（mockup line 511-514） */
.onboard-banner--ready {
  border-left-color: var(--ds-text);
  background: var(--ds-bg);
}
/* banner 的 ✓ 圆 — ink 圆白对勾 */
.banner-emoji--done {
  width: 28px;
  height: 28px;
  border-radius: 50%;
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 14px;
  font-weight: 800;
  line-height: 1;
}

/* ---- MaterialOnboardingCard ---- */
.onboard-card {
  max-width: 920px;
  margin: 0 auto;
  background: var(--ds-surface);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-lg);
  box-shadow: var(--ds-shadow-deep);
  overflow: hidden;
}
.onboard-card--ready { border-color: var(--ds-border); }
.onboard-card--loading {
  padding: var(--ds-space-5);
  text-align: center;
  color: var(--ds-text-muted);
  font-size: 13px;
}

.onboard-head {
  padding: var(--ds-space-5) var(--ds-space-5) var(--ds-space-4);
  border-bottom: 1px solid var(--ds-border);
  display: flex;
  align-items: center;
  gap: var(--ds-space-3);
}
.head-emoji { font-size: 22px; flex-shrink: 0; }
.head-emoji--done {
  width: 28px; height: 28px;
  border-radius: 50%;
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
  display: inline-flex; align-items: center; justify-content: center;
  font-size: 14px; font-weight: 800;
}
.head-title-wrap { flex: 1; display: flex; flex-direction: column; gap: 2px; }
.head-title {
  font-size: 15px; font-weight: 800; color: var(--ds-text);
  letter-spacing: -0.01em;
}
.head-title--ready { color: var(--ds-text); }
.head-sub { font-size: 12px; color: var(--ds-text-muted); }
.head-progress {
  flex-shrink: 0;
  display: flex; flex-direction: column; align-items: flex-end; gap: 2px;
}
.progress-num {
  font-size: 13px; font-weight: 800; color: var(--ds-text);
  font-variant-numeric: tabular-nums; letter-spacing: -0.01em;
}
.progress-num--ready { color: var(--ds-text); }
.progress-label { font-size: 11px; color: var(--ds-text-subtle); }

.onboard-body {
  padding: var(--ds-space-5);
  display: grid;
  grid-template-columns: 1fr 1fr 1fr;
  gap: var(--ds-space-4);
}

/* ---- todo-card（每张 todo） ---- */
.todo-card {
  display: flex;
  flex-direction: column;
  gap: var(--ds-space-3);
  padding: var(--ds-space-4);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-md);
  background: var(--ds-bg-alt);
  cursor: pointer;
  text-align: left;
  font: inherit;
  width: 100%;
  transition: border-color 0.15s, background 0.15s;
}
.todo-card--required {
  border-style: dashed;
  border-color: var(--ds-border-strong);
  background: var(--ds-bg);
}
.todo-card--optional {
  border-color: var(--ds-border);
  background: var(--ds-bg-alt);
}
/* done 态：ink-only override（mockup line 451-454） */
.todo-card--done {
  border-color: var(--ds-border-strong);
  background: var(--ds-bg);
}
.todo-card:hover {
  border-color: var(--ds-text);
  background: var(--ds-bg);
}
.todo-card--done:hover {
  border-color: var(--ds-border-strong);
  background: var(--ds-bg);
}
/* picker 展开中：数字人 todo 强调态（mockup demo 4 style 内联） */
.todo-card--picking {
  border-color: var(--ds-text);
  background: var(--ds-bg);
}

.todo-row1 {
  display: flex;
  align-items: center;
  gap: var(--ds-space-2);
}
.todo-emoji {
  width: 32px;
  height: 32px;
  flex-shrink: 0;
  border-radius: var(--ds-radius-md);
  background: var(--ds-bg);
  border: 1px solid var(--ds-border);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 16px;
}
.todo-title {
  flex: 1;
  font-size: 13px;
  font-weight: 700;
  color: var(--ds-text);
  letter-spacing: -0.005em;
}
.todo-tag {
  flex-shrink: 0;
  font-size: 10px;
  font-weight: 700;
  padding: 1px var(--ds-space-2);
  border-radius: var(--ds-radius-pill);
}
.todo-tag--required {
  color: var(--ds-warning);
  background: var(--ds-warning-tint);
}
.todo-tag--optional {
  color: var(--ds-text-muted);
  background: var(--ds-bg);
  border: 1px solid var(--ds-border);
}
/* done tag：ink-only（mockup line 459-464） */
.todo-tag--done {
  color: var(--ds-text);
  background: var(--ds-bg-alt);
  border: 1px solid var(--ds-border);
  font-weight: 700;
}

.todo-desc {
  font-size: 12px;
  line-height: 1.6;
  color: var(--ds-text-muted);
  min-height: calc(1.6em * 3);
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 3;
  overflow: hidden;
}

/* ---- todo-drop（dropzone 区） ---- */
.todo-drop {
  flex: 1;
  min-height: 96px;
  border: 1.5px dashed var(--ds-border-strong);
  border-radius: var(--ds-radius-md);
  background: var(--ds-bg);
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: var(--ds-space-1);
  padding: var(--ds-space-3);
  cursor: pointer;
  transition: border-color 0.15s, background 0.15s;
}
.todo-drop:hover {
  border-color: var(--ds-text);
  background: var(--ds-bg-alt);
}
.todo-drop--solid {
  border-style: solid;
  background: var(--ds-bg-alt);
}
/* done 态 dropzone：ink-only（mockup line 465-469） */
.todo-drop--done {
  border-style: solid;
  border-color: var(--ds-border-strong);
  background: var(--ds-bg-alt);
}
.drop-icon {
  font-size: 20px;
  color: var(--ds-text);
}
.drop-icon--muted {
  color: var(--ds-text-subtle);
}
.drop-icon--dh {
  font-size: 28px;
}
/* done dropzone 的 ✓ 圆 — ink 圆白对勾 36×36（mockup line 470-482） */
.drop-icon--success {
  width: 36px;
  height: 36px;
  border-radius: 50%;
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 16px;
  font-weight: 800;
  line-height: 1;
}
.drop-text {
  font-size: 12px;
  font-weight: 700;
  color: var(--ds-text);
}
.drop-text--success {
  color: var(--ds-text);
  font-weight: 700;
}
.drop-text--muted {
  color: var(--ds-text-muted);
}
.drop-spec {
  font-size: 10px;
  color: var(--ds-text-subtle);
  text-align: center;
}

/* ---- todo-actions（计数 + 链接） ---- */
.todo-actions {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--ds-space-2);
}
.todo-count {
  font-size: 11px;
  font-weight: 700;
  color: var(--ds-text-subtle);
  font-variant-numeric: tabular-nums;
}
/* done count：ink + ✓ 圆 ::before（mockup line 487-507） */
.todo-count--done {
  color: var(--ds-text);
  font-weight: 800;
  display: inline-flex;
  align-items: center;
  gap: 6px;
}
.todo-count--done::before {
  content: '✓';
  display: inline-block;
  width: 16px;
  height: 16px;
  border-radius: 50%;
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
  font-size: 10px;
  font-weight: 800;
  text-align: center;
  line-height: 16px;
  flex-shrink: 0;
}
.todo-link {
  font-size: 11px;
  font-weight: 600;
  color: var(--ds-text-muted);
  cursor: pointer;
  transition: color 0.15s;
}
.todo-link:hover {
  color: var(--ds-text);
}

/* ---- CTA ---- */
.commit-cta-wrap {
  display: flex; justify-content: center;
  padding: 0 var(--ds-space-5) var(--ds-space-5);
}
.commit-cta {
  height: 44px; padding: 0 var(--ds-space-6);
  border: none; border-radius: var(--ds-radius-md);
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
  font-size: 14px; font-weight: 700;
  letter-spacing: -0.005em;
  cursor: pointer;
  transition: opacity 0.15s;
  display: inline-flex; align-items: center; gap: var(--ds-space-2);
  box-shadow: var(--ds-shadow-cta-primary, none);
}
.commit-cta:hover { opacity: 0.88; }
.commit-cta--disabled {
  background: var(--ds-text-subtle);
  color: var(--ds-text-on-ink);
  cursor: not-allowed;
  box-shadow: none;
  opacity: 0.85;
}

/* ---- DigitalHumanPickerPanel ---- */
.dh-picker {
  width: 100%;
  max-width: 920px;
  box-sizing: border-box;
  margin: var(--ds-space-4) auto 0;
  background: var(--ds-surface);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-lg);
  box-shadow: var(--ds-shadow-deep);
  overflow: hidden;
}
.dh-picker-head {
  padding: var(--ds-space-4) var(--ds-space-5);
  border-bottom: 1px solid var(--ds-border);
  display: flex; align-items: center; gap: var(--ds-space-3);
}
.dh-picker-head .h-emoji { font-size: 20px; }
.dh-picker-head .h-title-wrap {
  flex: 1;
  display: flex; flex-direction: column; gap: 2px;
}
.dh-picker-head .h-title {
  font-size: 14px; font-weight: 800; color: var(--ds-text);
  letter-spacing: -0.005em;
}
.dh-picker-head .h-sub { font-size: 11px; color: var(--ds-text-muted); }
.dh-picker-head .h-close {
  width: 28px; height: 28px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg);
  display: inline-flex; align-items: center; justify-content: center;
  font-size: 14px; color: var(--ds-text-muted);
  cursor: pointer;
  transition: color 0.15s, border-color 0.15s;
}
.dh-picker-head .h-close:hover {
  color: var(--ds-text);
  border-color: var(--ds-border-strong);
}
/* picker tab：胶囊 pill（spec §4.3 方案 3），ink-on-ink 反白。 */
.dh-picker-tabs {
  padding: var(--ds-space-3) var(--ds-space-5) 0;
  border-bottom: 1px solid var(--ds-border);
}
.dh-picker-tabs-inner {
  display: inline-flex;
  gap: 6px;
  padding: 6px;
  margin-bottom: var(--ds-space-3);
  border-radius: 12px;
  background: var(--ds-bg-alt);
  border: 1px solid var(--ds-border);
}
.dh-tab {
  display: inline-flex;
  align-items: center;
  gap: var(--ds-space-2);
  padding: 8px 14px;
  border-radius: 8px;
  font-size: 13px;
  font-weight: 600;
  color: var(--ds-text-muted);
  cursor: pointer;
  user-select: none;
  transition: color 0.15s, background 0.15s;
}
.dh-tab:hover {
  color: var(--ds-text);
}
.dh-tab--active {
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
  font-weight: 700;
}
.dh-tab--active:hover {
  color: var(--ds-text-on-ink);
}
.dh-tab .count {
  font-size: 11px;
  padding: 0 6px;
  border-radius: var(--ds-radius-pill);
  background: var(--ds-bg);
  color: var(--ds-text-muted);
  font-weight: 700;
  font-variant-numeric: tabular-nums;
}
.dh-tab--active .count {
  background: rgba(255, 255, 255, 0.18);
  color: var(--ds-text-on-ink);
}
.dh-picker-body {
  padding: var(--ds-space-5);
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(118px, 1fr));
  gap: 12px;
  max-height: 520px;
  /* overflow-y: scroll（非 auto）+ nowheel/nodrag：滚动条常驻可拖，滚轮在 picker 内滚列表不缩放画布 */
  overflow-y: scroll;
  scrollbar-width: thin;
}
.dh-picker-body::-webkit-scrollbar { width: 8px; }
.dh-picker-body::-webkit-scrollbar-track { background: var(--ds-bg-alt); border-radius: 999px; }
.dh-picker-body::-webkit-scrollbar-thumb {
  background: var(--ds-border-strong);
  border-radius: 999px;
  border: 2px solid var(--ds-bg-alt);
}

/* 开场确认门画布节点（DEE-165 卡片化）：复用共享 DigitalHumanPickerPanel，
   DH 网格滚动区在门卡内收紧封顶（对齐预览稿 444px），不影响 material 流的 dh-picker（保持 520px）。 */
.mm-opening-gate-node {
  position: relative;
}
.mm-opening-gate-node .dh-picker-body {
  /* 对齐预览稿：门卡内 DH 网格固定 5 列 + 滚动封顶（material 流的 dh-picker 不受影响）。 */
  grid-template-columns: repeat(5, 1fr);
  max-height: 280px;
  padding: 4px 2px 8px;
  gap: 10px;
}

/* gateMode：点卡即选，紧凑头像卡，对齐设计稿 */
.mm-opening-gate-node .dh-picker--gate .dh-avatar {
  height: 88px;
}
.mm-opening-gate-node .dh-picker--gate .dh-portrait-emoji {
  font-size: 40px;
  margin-bottom: 8px;
}
.mm-opening-gate-node .dh-picker--gate .dh-info {
  padding: 7px 8px 9px;
}
.mm-opening-gate-node .dh-picker--gate .dh-name {
  font-size: 12px;
}
.mm-opening-gate-node .dh-picker--gate .dh-meta {
  font-size: 10px;
}
.mm-opening-gate-node .dh-picker--gate .dh-item {
  cursor: pointer;
}
.mm-opening-gate-node .dh-picker--gate .dh-picker-tabs {
  padding: 0 2px 8px;
}
.mm-opening-gate-node .ocg-gate {
  width: 560px;
  max-width: 560px;
}

.dh-item {
  display: flex; flex-direction: column;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-md);
  background: var(--ds-bg);
  cursor: pointer;
  overflow: hidden;
  transition: border-color 0.15s, box-shadow 0.15s;
}
.dh-item:hover {
  border-color: var(--ds-border-strong);
  box-shadow: 0 4px 16px rgba(24, 24, 27, 0.08);
}
.dh-item--selected {
  border: 2px solid var(--ds-text);
  box-shadow: 0 0 0 3px rgba(24, 24, 27, 0.06);
}
.dh-avatar {
  position: relative;
  overflow: hidden;
  width: 100%;
  height: 150px;
  background: linear-gradient(180deg, var(--ds-bg-alt) 0%, var(--ds-bg-deep) 100%);
  display: flex;
  align-items: flex-end;
  justify-content: center;
  border-bottom: 1px solid var(--ds-border);
}
.dh-avatar-img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center 18%;
}
.dh-portrait-emoji {
  font-size: 64px;
  line-height: 1;
  margin-bottom: 14px;
}
.dh-item--selected .dh-avatar {
  background: linear-gradient(180deg, var(--ds-bg) 0%, var(--ds-bg-alt) 100%);
}
.dh-item--selected .dh-meta {
  color: var(--ds-text-muted);
  font-weight: 600;
}
.dh-info {
  padding: var(--ds-space-2) 10px var(--ds-space-1);
  display: flex; flex-direction: column; gap: 1px;
}
.dh-name {
  font-size: 13px; font-weight: 800;
  color: var(--ds-text);
  letter-spacing: -0.005em;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.dh-meta {
  font-size: 10px; color: var(--ds-text-subtle); line-height: 1.4;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.dh-actions {
  display: flex; gap: var(--ds-space-2);
  padding: var(--ds-space-1) 10px 10px;
}
.dh-listen {
  position: absolute;
  top: 8px; right: 8px;
  width: 26px; height: 26px;
  padding: 0;
  border: none;
  border-radius: 50%;
  background: rgba(24, 24, 27, 0.62);
  color: var(--ds-text-on-ink);
  display: inline-flex; align-items: center; justify-content: center;
  cursor: pointer; z-index: 3;
  transition: background 0.15s;
}
.dh-listen:hover { background: var(--ds-text); }
.dh-listen .play-ico {
  font-size: 9px;
  display: inline-flex; align-items: center; justify-content: center;
}
.dh-select {
  flex: 1;
  height: 28px;
  border: 1px solid var(--ds-text);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
  font-size: 11px; font-weight: 700;
  cursor: pointer;
  transition: opacity 0.15s;
}
.dh-select:hover { opacity: 0.88; }
.dh-select--selected,
.dh-item--selected .dh-select {
  background: var(--ds-bg);
  color: var(--ds-text);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 4px;
}

.dh-viewport { position: relative; }
.dh-picker-fade {
  position: absolute;
  left: 0; right: 0; bottom: 0;
  height: 48px;
  pointer-events: none;
  background: linear-gradient(0deg, var(--ds-surface) 0%, rgba(255, 255, 255, 0) 100%);
  opacity: 0;
  transition: opacity 0.2s;
}
.dh-picker-fade--show { opacity: 1; }

/* ---- dh-picker-foot（已选反馈 + 自建数字人入口） ---- */
.dh-picker-foot {
  padding: var(--ds-space-3) var(--ds-space-5);
  border-top: 1px solid var(--ds-border);
  background: var(--ds-bg-alt);
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--ds-space-3);
}
.dh-foot-text {
  font-size: 12px;
  color: var(--ds-text-muted);
}
.dh-foot-text strong {
  color: var(--ds-text);
  font-weight: 700;
}
.dh-foot-actions {
  display: flex;
  gap: var(--ds-space-2);
}
.dh-link-create {
  font-size: 12px;
  font-weight: 600;
  color: var(--ds-text-muted);
  background: none;
  border: none;
  cursor: pointer;
  padding: 4px var(--ds-space-2);
}
.dh-link-create:hover {
  color: var(--ds-text);
}

/* ---- 我的 tab 空态创建引导（spec §4.5） ---- */
.dh-empty-create {
  grid-column: 1 / -1;
  display: flex; flex-direction: column; align-items: center;
  gap: var(--ds-space-4); padding: var(--ds-space-6) var(--ds-space-5);
  text-align: center;
}
.dh-ec-emoji {
  width: 56px; height: 56px;
  border-radius: var(--ds-radius-lg);
  background: var(--ds-bg-alt);
  border: 1px solid var(--ds-border-strong);
  color: var(--ds-text);
  display: inline-flex; align-items: center; justify-content: center;
  font-size: 28px;
}
.dh-ec-title { font-size: 16px; font-weight: 800; color: var(--ds-text); }
.dh-ec-sub {
  font-size: 12px; color: var(--ds-text-muted);
  max-width: 360px; line-height: 1.7;
}
.dh-ec-cta {
  padding: 10px 22px;
  border-radius: var(--ds-radius-md);
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
  border: 0; cursor: pointer;
  font-size: 13px; font-weight: 800;
  display: inline-flex; align-items: center; gap: var(--ds-space-2);
  transition: opacity 0.15s;
}
.dh-ec-cta:hover { opacity: 0.88; }
.dh-ec-meta {
  display: flex; gap: 18px; margin-top: 6px;
  font-size: 11px; color: var(--ds-text-subtle);
}
.dh-ec-meta span::before {
  content: '✓'; display: inline-block; margin-right: 4px;
  color: var(--ds-text); font-weight: 800;
}

/* ---- DockTabBar (A5 — minimal text-only tabs + 「+ 新对话」+ 右键 contextmenu) ---- */
.dock-tabs {
  display: flex;
  align-items: stretch;
  gap: var(--ds-space-2);
  padding: 0 var(--ds-space-3);
  border-bottom: 1px solid var(--ds-border);
  background: var(--ds-bg);
  min-height: 48px;
  position: relative;
}
.dock-tabs-scroller {
  flex: 1;
  min-width: 0;
  display: flex;
  align-items: stretch;
  overflow-x: auto;
  overflow-y: hidden;
  scrollbar-width: none;
  -ms-overflow-style: none;
  -webkit-mask-image: linear-gradient(90deg, transparent 0, #000 14px, #000 calc(100% - 14px), transparent 100%);
          mask-image: linear-gradient(90deg, transparent 0, #000 14px, #000 calc(100% - 14px), transparent 100%);
}
.dock-tabs-scroller::-webkit-scrollbar { display: none; }

.dock-tab {
  display: inline-flex;
  align-items: center;
  flex: 0 0 auto;
  max-width: 200px;
  padding: 0 12px;
  border: none;
  background: transparent;
  color: var(--ds-text-muted);
  font-size: 12.5px;
  font-family: inherit;
  cursor: pointer;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  border-bottom: 2px solid transparent;
  transition: color .12s, border-color .12s;
}
.dock-tab:hover { color: var(--ds-text); }
.dock-tab.active {
  color: var(--ds-text);
  font-weight: 600;
  border-bottom-color: var(--ds-text);
}
.dock-tab-input {
  font-weight: 600;
  font-size: 12.5px;
  background: transparent;
  border: none;
  outline: 1px solid var(--ds-text);
  border-radius: 3px;
  padding: 0 4px;
  font-family: inherit;
  color: var(--ds-text);
  max-width: 150px;
  margin: 0;
}

.dock-new-chat-btn {
  align-self: center;
  flex: 0 0 auto;
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 5px 11px;
  border: 1px solid var(--ds-text);
  border-radius: var(--ds-radius-pill);
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
  font-size: 12px;
  font-weight: 600;
  font-family: inherit;
  cursor: pointer;
  transition: opacity .15s ease;
  white-space: nowrap;
}
.dock-new-chat-btn:hover { opacity: .85; }
.dock-new-chat-btn .plus {
  font-size: 13px;
  line-height: 1;
  margin-top: -1px;
}

/* 右键 contextmenu — fixed 位置，由组件 inline style 设 top/left */
.dock-tab-ctx-menu {
  position: fixed;
  min-width: 130px;
  padding: 4px;
  background: var(--ds-bg);
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-md);
  box-shadow: var(--ds-shadow-deep);
  z-index: 60;
}
.dock-tab-ctx-menu-item {
  display: flex;
  align-items: center;
  gap: 6px;
  padding: 7px 10px;
  font-size: 12px;
  border-radius: 6px;
  cursor: pointer;
  color: var(--ds-text);
}
.dock-tab-ctx-menu-item:hover { background: var(--ds-bg-alt); }
.dock-tab-ctx-menu-item--danger { color: var(--ds-danger); }

/* ---- ConsoleConfirmPopover (Task 4.1) ---- */
.dock-confirm-popover {
  position: absolute;
  width: 240px;
  padding: 12px;
  background: var(--ds-bg);
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-md);
  box-shadow: var(--ds-shadow-deep);
  z-index: 50;
}
.dock-confirm-title {
  font-weight: 700;
  font-size: 13px;
  color: var(--ds-text);
  margin-bottom: 4px;
}
.dock-confirm-msg {
  font-size: 12px;
  color: var(--ds-text-muted);
  margin-bottom: 10px;
  line-height: 1.5;
}
.dock-confirm-actions {
  display: flex;
  gap: 8px;
  justify-content: flex-end;
}
.dock-confirm-cancel {
  padding: 5px 10px;
  font-size: 12px;
  border: 1px solid var(--ds-border);
  background: var(--ds-bg);
  color: var(--ds-text);
  border-radius: var(--ds-radius-sm);
  cursor: pointer;
  font-family: inherit;
}
.dock-confirm-cancel:hover { background: var(--ds-bg-alt); }
.dock-confirm-danger {
  padding: 5px 10px;
  font-size: 12px;
  border: 1px solid var(--ds-danger);
  background: var(--ds-danger);
  color: #fff;
  border-radius: var(--ds-radius-sm);
  cursor: pointer;
  font-family: inherit;
}
.dock-confirm-danger:hover { opacity: 0.9; }

/* ===== ProductSwitcher popover (plan v2 Task 3) ===== */
/* 锚定触发器下方（V1 挂载控件 / 历史顶栏 chip 共用） */
.product-switcher-popover {
  position: absolute;
  top: calc(100% + 6px);
  left: 0;
  transform: none;
  width: 280px;
  /* 视口封顶：产品很多时不撑出屏外；列表区内部滚动，账号头/底部动作保持可见 */
  max-height: calc(100vh - var(--ds-header-height, 64px) - 16px);
  display: flex;
  flex-direction: column;
  overflow: hidden;
  background: var(--ds-surface);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-lg);
  box-shadow: var(--ds-shadow-deep);
  padding: 6px;
  z-index: 50;
}
.psp-list {
  flex: 1 1 auto;
  min-height: 0;
  overflow-y: auto;
  overscroll-behavior: contain;
  -webkit-overflow-scrolling: touch;
}
/* 账号头 + 企业总计（Task 5.1，吸收 EnterpriseInfoCard 统计；no-azure → ink） */
.psp-acct {
  display: flex;
  align-items: center;
  gap: 11px;
  padding: 10px 10px 12px;
}
.psp-acct-logo {
  width: 38px;
  height: 38px;
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg-deep);
  border: 1px solid var(--ds-border);
  display: grid;
  place-items: center;
  font-weight: 800;
  font-family: var(--ds-font-mono);
  color: var(--ds-text);
  flex-shrink: 0;
}
.psp-acct-body {
  min-width: 0;
}
.psp-acct-name {
  font-size: 14px;
  font-weight: 700;
  color: var(--ds-text);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.psp-acct-totals {
  font-family: var(--ds-font-mono);
  font-size: 11px;
  color: var(--ds-text-subtle);
  margin-top: 2px;
}
.psp-acct-num {
  color: var(--ds-text-muted);
}
.psp-acct-dot {
  margin: 0 4px;
}
.psp-label {
  font-size: 11px;
  font-weight: 600;
  color: var(--ds-text-subtle);
  letter-spacing: 0.04em;
  text-transform: uppercase;
  padding: 8px 10px 4px;
}
.psp-empty {
  padding: 16px 10px;
  text-align: center;
  color: var(--ds-text-muted);
  font-size: 13px;
}
.psp-item {
  display: flex;
  align-items: center;
  gap: 12px;
  width: 100%;
  padding: 10px;
  background: transparent;
  border: none;
  border-radius: var(--ds-radius-sm);
  font-family: inherit;
  color: var(--ds-text);
  cursor: pointer;
  transition: background 0.12s;
  text-align: left;
}
.psp-item:hover { background: var(--ds-bg-alt); }
.psp-item--current { background: var(--ds-bg-alt); }
.psp-swatch {
  width: 22px;
  height: 22px;
  border-radius: var(--ds-radius-sm);
  display: grid;
  place-items: center;
  font-size: 11px;
  font-weight: 700;
  background: var(--ds-bg-deep);
  color: var(--ds-text);
  flex-shrink: 0;
}
.psp-name { flex: 1; font-size: 13px; font-weight: 600; }
.psp-check { color: var(--ds-text); font-weight: 700; }
.psp-divider {
  height: 1px;
  background: var(--ds-border);
  margin: 6px 4px;
}
.psp-action {
  display: flex;
  align-items: center;
  gap: 10px;
  width: 100%;
  padding: 10px;
  border: none;
  background: transparent;
  border-radius: var(--ds-radius-sm);
  font-family: inherit;
  font-size: 13px;
  font-weight: 600;
  color: var(--ds-text);
  cursor: pointer;
  transition: background 0.12s;
  text-align: left;
}
.psp-action:hover { background: var(--ds-bg-alt); }
.psp-action-icon {
  width: 28px;
  height: 28px;
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg-alt);
  display: grid;
  place-items: center;
  color: var(--ds-text-muted);
  flex-shrink: 0;
}
.psp-action--primary .psp-action-icon {
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
}
.psp-action--manage { color: var(--ds-text-muted); }
.psp-action--brand { color: var(--ds-text); }
.psp-action-sub {
  margin-left: auto;
  color: var(--ds-text-subtle);
  font-size: 11px;
  font-weight: 600;
}
.psp-arrow { margin-left: auto; color: var(--ds-text-subtle); }
.psp-action-sub + .psp-arrow { margin-left: 8px; }

/* ---- 行内 CRUD：⋯ 菜单 + inline rename（Task 5.2，搬自 products-home pill ⋯）---- */
.psp-item-wrap {
  position: relative;
}
/* ⋯ 浮在行右侧；默认隐藏，行 hover / 菜单展开时显现 */
.psp-more-btn {
  position: absolute;
  top: 50%;
  right: 8px;
  transform: translateY(-50%);
  display: grid;
  place-items: center;
  width: 22px;
  height: 22px;
  border-radius: var(--ds-radius-sm);
  background: transparent;
  border: none;
  color: var(--ds-text-subtle);
  cursor: pointer;
  font: inherit;
  font-size: 14px;
  padding: 0;
  opacity: 0;
  transition: opacity 0.12s, background 0.12s, color 0.12s;
}
.psp-item-wrap:hover .psp-more-btn,
.psp-more-btn:focus-visible {
  opacity: 1;
}
.psp-more-btn:hover {
  background: var(--ds-bg-deep);
  color: var(--ds-text);
}
.psp-rename-input {
  flex: 1;
  min-width: 0;
  font: inherit;
  font-size: 13px;
  font-weight: 600;
  background: var(--ds-surface);
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-sm);
  padding: 2px 6px;
  outline: none;
  color: var(--ds-text);
}
/* popover 内的 ⋯ 菜单跟随 .psp-item-wrap 定位（复用 .pill-menu 的视觉，
   但 products-home.css 不在本页加载，故在此重声明同款 token 化样式） */
.psp-item-wrap .pill-menu {
  position: absolute;
  top: calc(100% - 4px);
  right: 8px;
  background: var(--ds-surface);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-md);
  box-shadow: var(--ds-shadow-deep);
  padding: 4px;
  z-index: 60;
  min-width: 128px;
}
.psp-item-wrap .pill-menu-item {
  display: block;
  width: 100%;
  padding: 8px 12px;
  background: transparent;
  border: none;
  border-radius: var(--ds-radius-sm);
  font: inherit;
  font-size: 13px;
  color: var(--ds-text);
  cursor: pointer;
  text-align: left;
}
.psp-item-wrap .pill-menu-item:hover { background: var(--ds-bg-alt); }
.psp-item-wrap .pill-menu-item--danger { color: var(--ds-danger); }

.brand-profile-layer {
  position: fixed;
  inset: 0;
  z-index: 1400;
  display: flex;
  align-items: center;
  justify-content: center;
}

.brand-profile-scrim {
  position: absolute;
  inset: 0;
  border: 0;
  background: rgba(24, 24, 27, 0.34);
  cursor: default;
}

.brand-profile-panel {
  position: relative;
  width: min(580px, calc(100vw - 40px));
  max-height: calc(100vh - 56px);
  display: flex;
  flex-direction: column;
  overflow: hidden;
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-xl);
  background: var(--ds-surface);
  box-shadow: var(--ds-shadow-deep);
}

.brand-profile-head {
  display: flex;
  align-items: flex-start;
  gap: 12px;
  padding: 18px 20px 15px;
  border-bottom: 1px solid var(--ds-border);
}

.brand-profile-mark {
  flex: none;
  width: 34px;
  height: 34px;
  display: grid;
  place-items: center;
  border-radius: 9px;
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
  font-size: 13px;
  font-weight: 800;
}

.brand-profile-title-block {
  min-width: 0;
  flex: 1;
}

.brand-profile-title-block h2 {
  margin: 0;
  font-size: 17px;
  font-weight: 800;
  line-height: 1.35;
  color: var(--ds-text);
}

.brand-profile-title-block p {
  margin: 2px 0 0;
  color: var(--ds-text-muted);
  font-size: 12.5px;
  line-height: 1.5;
}

.brand-profile-close {
  flex: none;
  width: 30px;
  height: 30px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg);
  color: var(--ds-text-muted);
  font-size: 17px;
  font-weight: 800;
  cursor: pointer;
}

.brand-profile-body {
  display: grid;
  gap: 12px;
  padding: 16px 20px;
  overflow: auto;
}

.brand-profile-status,
.brand-profile-success,
.brand-profile-error {
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
  padding: 9px 11px;
  font-size: 12.5px;
  font-weight: 650;
}

.brand-profile-status { color: var(--ds-text-muted); background: var(--ds-bg-alt); }
.brand-profile-success { color: var(--ds-success); background: var(--ds-bg); }
.brand-profile-error { color: var(--ds-danger); background: var(--ds-bg); }

.brand-profile-fields {
  display: grid;
  gap: 12px;
}

.brand-profile-field {
  display: grid;
  gap: 6px;
  padding: 12px 14px;
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-md);
  background: var(--ds-bg-alt);
}

.brand-profile-field-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
}

.brand-profile-field-label {
  color: var(--ds-text);
  font-size: 12.5px;
  font-weight: 780;
}

.brand-profile-field-hint {
  color: var(--ds-text-subtle);
  font-size: 11px;
  font-weight: 640;
}

.brand-profile-value {
  min-height: 20px;
  color: var(--ds-text);
  font-size: 13px;
  line-height: 1.55;
  white-space: pre-wrap;
}

.brand-profile-value.is-empty {
  color: var(--ds-text-subtle);
}

.brand-profile-field textarea {
  width: 100%;
  min-height: 64px;
  resize: vertical;
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-sm);
  background: var(--ds-surface);
  padding: 9px 11px;
  color: var(--ds-text);
  font: inherit;
  font-size: 13px;
  line-height: 1.55;
}

.brand-profile-field textarea:focus {
  outline: none;
  border-color: var(--ds-text);
  box-shadow: 0 0 0 3px rgba(24, 24, 27, 0.10);
}

.brand-profile-foot {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  padding: 14px 20px;
  border-top: 1px solid var(--ds-border);
  background: var(--ds-bg);
}

.brand-profile-note {
  color: var(--ds-text-subtle);
  font-size: 12px;
}

.brand-profile-actions {
  display: flex;
  gap: 8px;
  margin-left: auto;
}

.brand-profile-btn {
  height: 38px;
  padding: 0 16px;
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-md);
  background: var(--ds-bg);
  color: var(--ds-text);
  font-weight: 740;
  font-size: 13px;
  cursor: pointer;
}

.brand-profile-btn--primary {
  border-color: var(--ds-text);
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
}

.brand-profile-btn:disabled {
  cursor: not-allowed;
  opacity: 0.55;
}

/* ---- ColdStartCard wrap（2026-05-26）
   .canvas-stage 是 flex row 容器；MaterialOnboardingCard 返回 Fragment（banner + card），
   不套一层 column wrapper 时 banner / card 会变成 2 个并排 flex item 且被压窄。
   本 wrapper 强制纵向堆叠 + 限定 920px 最大宽度。 ---- */
.coldstart-wrap {
  width: 100%;
  max-width: 920px;
  display: flex;
  flex-direction: column;
  gap: var(--ds-space-4);
}
.coldstart-wrap .onboard-banner,
.coldstart-wrap .onboard-card {
  margin: 0;
  max-width: none;
}

/* ---- ColdStartCard product step（2026-05-26）
   预览源：docs/preview-coldstart-card-2026-05-26.html
   遵循 console scope no-azure / global-design.css 亮色 v1 ink-only。 ---- */
.onboard-product {
  padding: var(--ds-space-5);
  border-bottom: 1px solid var(--ds-border);
  display: flex;
  align-items: center;
  gap: var(--ds-space-4);
}
.step-num {
  width: 40px;
  height: 40px;
  flex-shrink: 0;
  border-radius: var(--ds-radius-md);
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 18px;
  font-weight: 800;
  font-variant-numeric: tabular-nums;
  letter-spacing: -0.02em;
  line-height: 1;
}
.step-num--done {
  background: var(--ds-bg-alt);
  color: var(--ds-text);
  border: 1px solid var(--ds-border-strong);
}
.product-text-wrap {
  flex: 1;
  display: flex;
  flex-direction: column;
}
.product-title {
  font-size: 15px;
  font-weight: 800;
  color: var(--ds-text);
  letter-spacing: -0.01em;
}
.product-sub {
  font-size: 12px;
  color: var(--ds-text-muted);
  margin-top: 2px;
}
.product-input-wrap {
  flex: 0 0 320px;
  position: relative;
}
.product-input {
  width: 100%;
  height: 40px;
  padding: 0 var(--ds-space-4);
  font: inherit;
  font-size: 13px;
  color: var(--ds-text);
  background: var(--ds-bg);
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-md);
  outline: none;
  transition: border-color 0.15s, box-shadow 0.15s;
}
.product-input::placeholder { color: var(--ds-text-subtle); }
.product-input:hover { border-color: var(--ds-text); }
.product-input:focus {
  border-color: var(--ds-text);
  box-shadow: 0 0 0 3px rgba(24, 24, 27, 0.08);
}
.product-input[readonly] {
  background: var(--ds-bg-alt);
  color: var(--ds-text-muted);
  cursor: not-allowed;
}
.product-tag {
  flex-shrink: 0;
  font-size: 10px;
  font-weight: 700;
  padding: 1px var(--ds-space-2);
  border-radius: var(--ds-radius-pill);
  color: var(--ds-warning);
  background: #fef3c7;
}
.product-tag--done {
  color: var(--ds-text);
  background: var(--ds-bg-alt);
  border: 1px solid var(--ds-border);
}

/* ---- onboard-head 适配 step-num（40×40，原 head-emoji 是 22px 字符）---- */
.onboard-head .step-num + .head-title-wrap { margin-left: 0; }

/* spec 2026-05-27 §7.4 — dock tab 未读红点（非当前 tab 收到 step.append 时显示） */
.dock-tab { position: relative; }
.dock-tab-unread-dot {
  display: inline-block;
  width: 6px;
  height: 6px;
  border-radius: 999px;
  background: var(--ds-danger);
  margin-left: 6px;
  vertical-align: middle;
}

/* spec 2026-05-27 §7.5 — 画布新生成中卡 200ms 高亮 */
.vcard.is-new-card {
  box-shadow: 0 0 0 2px var(--ds-text), 0 12px 28px rgba(24, 24, 27, 0.16);
  transition: box-shadow 0.2s ease-out;
}
/* MatrixAccountOverview — replicated from scheme-E .matrix-overview CSS
   All spacing/radius/border/color uses --ds-* tokens (global-design.css).
   No azure gradients. Numbers use var(--ds-font-mono). */

._matrixOverview_nm320_5 {
  flex-shrink: 0;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--ds-space-5); /* 24px */
  padding: var(--ds-space-4) var(--ds-space-5); /* 16px 24px */
  border-bottom: 1px solid var(--ds-border);
  background: var(--ds-bg);
}

._moLeft_nm320_16 {
  display: flex;
  align-items: center;
  gap: var(--ds-space-3); /* 12px */
  flex-shrink: 0;
}

._moIc_nm320_23 {
  width: 38px;
  height: 38px;
  border-radius: var(--ds-radius-md); /* 10px — scheme-E 11px snapped to nearest token (1px, negligible) */
  background: var(--ds-text);
  color: var(--ds-text-on-ink);
  display: grid;
  place-items: center;
  font-size: 16px;
  font-weight: 800;
  flex-shrink: 0;
}

._moIc_nm320_23 svg {
  width: 20px;
  height: 20px;
}

._moLeftTx_nm320_41 {
  display: flex;
  flex-direction: column;
  gap: 2px;
}

._moTitle_nm320_47 {
  font-size: 16px;
  font-weight: 800;
  letter-spacing: -0.01em;
  color: var(--ds-text);
}

._moSub_nm320_54 {
  font-size: 12px;
  color: var(--ds-text-muted);
}

/* Stats row */
._moStats_nm320_60 {
  display: flex;
  align-items: stretch;
}

._moStat_nm320_60 {
  display: flex;
  flex-direction: column;
  gap: var(--ds-space-1); /* 4px */
  padding: 2px 28px;
  position: relative;
}

._moStat_nm320_60:not(:last-child)::after {
  content: "";
  position: absolute;
  right: 0;
  top: 50%;
  transform: translateY(-50%);
  height: 36px;
  width: 1px;
  background: var(--ds-border);
}

/* Real numeric value */
._moStatValue_nm320_85 {
  font-family: var(--ds-font-mono);
  font-size: 23px;
  font-weight: 600;
  letter-spacing: -0.02em;
  line-height: 1;
  color: var(--ds-text);
}

/* Placeholder "数据接入中" */
._moStatPlaceholder_nm320_95 {
  font-size: 12px;
  font-weight: 400;
  line-height: 1;
  color: var(--ds-text-subtle);
  /* align baseline with numeric values for visual consistency */
  padding-top: 6px;
  padding-bottom: 2px;
}

._moStatLabel_nm320_105 {
  font-size: 12px;
  color: var(--ds-text-muted);
}

@media (max-width: 700px) {
  ._matrixOverview_nm320_5 {
    align-items: flex-start;
    flex-direction: column;
    gap: var(--ds-space-3);
    padding: 12px 16px;
  }

  ._moLeft_nm320_16 {
    min-width: 0;
  }

  ._moLeftTx_nm320_41 {
    min-width: 0;
  }

  ._moTitle_nm320_47,
  ._moSub_nm320_54 {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }

  ._moStats_nm320_60 {
    width: 100%;
    min-width: 0;
  }

  ._moStat_nm320_60 {
    flex: 1;
    min-width: 0;
    padding: 2px 8px;
  }

  ._moStatValue_nm320_85 {
    font-size: 20px;
  }

  ._moStatLabel_nm320_105,
  ._moStatPlaceholder_nm320_95 {
    font-size: 11px;
  }
}
/* ---- Grid: auto-fill responsive ---- */
.video-list-page .video-list-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
  gap: 24px;
}

/* ---- Input & Select — unified toolbar look ---- */
.video-list-page .ant-input,
.video-list-page .ant-input-affix-wrapper {
  background: var(--ds-bg-alt) !important;
  border: none !important;
  border-radius: 10px !important;
  color: var(--ds-text) !important;
  font-size: 14px !important;
  box-shadow: inset 0 0 0 1px var(--ds-border) !important;
  transition: box-shadow 0.2s ease !important;
}

.video-list-page .ant-input-affix-wrapper .ant-input {
  box-shadow: none !important;
  background: transparent !important;
}

.video-list-page .ant-input-affix-wrapper:hover {
  box-shadow: inset 0 0 0 1px var(--ds-border) !important;
}

.video-list-page .ant-input:focus,
.video-list-page .ant-input-focused,
.video-list-page .ant-input-affix-wrapper:focus,
.video-list-page .ant-input-affix-wrapper-focused {
  box-shadow: inset 0 0 0 1px rgba(77,166,255,0.4), 0 0 0 3px rgba(77,166,255,0.06) !important;
}

.video-list-page .ant-input::placeholder {
  color: var(--ds-border) !important;
}

/* ---- Filter Select — no-label style, B.2 pattern ---- */
.video-list-page .vlp-filter-select .ant-select-selector,
.video-list-page .vlp-filter-select.ant-select-single .ant-select-selector,
.video-list-page .vlp-filter-select.ant-select-single:not(.ant-select-customize-input) .ant-select-selector {
  background: var(--ds-bg-alt) !important;
  background-color: var(--ds-bg-alt) !important;
  border: none !important;
  border-color: transparent !important;
  border-radius: 10px !important;
  color: var(--ds-text-muted) !important;
  font-size: 13px !important;
  min-height: 38px !important;
  height: 38px !important;
  padding: 0 14px !important;
  display: flex !important;
  align-items: center !important;
  box-shadow: inset 0 0 0 1px var(--ds-border) !important;
  transition: box-shadow 0.2s ease, color 0.2s ease, background 0.2s ease !important;
}

.video-list-page .vlp-filter-select:not(.ant-select-disabled):hover .ant-select-selector {
  box-shadow: inset 0 0 0 1px var(--ds-border) !important;
}

.video-list-page .vlp-filter-select.ant-select-focused .ant-select-selector {
  box-shadow: inset 0 0 0 1px rgba(77,166,255,0.4), 0 0 0 3px rgba(77,166,255,0.06) !important;
}

.video-list-page .vlp-filter-select .ant-select-selection-item {
  color: var(--ds-text-muted) !important;
  font-size: 13px !important;
}

.video-list-page .vlp-filter-select .ant-select-arrow {
  color: var(--ds-border) !important;
  font-size: 10px !important;
}

/* Non-default (active) filter — accent highlight */
.video-list-page .vlp-filter-active .ant-select-selector {
  background: rgba(77,166,255,0.08) !important;
  background-color: rgba(77,166,255,0.08) !important;
  box-shadow: inset 0 0 0 1px rgba(77,166,255,0.25) !important;
}

.video-list-page .vlp-filter-active .ant-select-selection-item {
  color: #4da6ff !important;
}

.video-list-page .vlp-filter-active .ant-select-arrow {
  color: rgba(77,166,255,0.5) !important;
}

/* ---- Pagination — 34×34 square, accent glow ---- */
.video-list-page .ant-pagination {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 8px 16px;
  background: var(--ds-bg-alt);
  border: 1px solid var(--ds-border);
  border-radius: 12px;
}

.video-list-page .ant-pagination-item {
  background: transparent !important;
  border: 1px solid transparent !important;
  border-radius: 8px !important;
  min-width: 34px !important;
  height: 34px !important;
  line-height: 34px !important;
  transition: all 0.2s ease !important;
}

.video-list-page .ant-pagination-item:hover {
  background: rgba(77,166,255,0.08) !important;
  border-color: rgba(77,166,255,0.2) !important;
}

.video-list-page .ant-pagination-item a {
  color: var(--ds-text-subtle) !important;
  font-size: 13px !important;
  font-weight: 500 !important;
}

.video-list-page .ant-pagination-item:hover a {
  color: #4da6ff !important;
}

.video-list-page .ant-pagination-item-active {
  background: rgba(77,166,255,0.15) !important;
  border-color: rgba(77,166,255,0.35) !important;
  box-shadow: 0 0 12px rgba(77,166,255,0.2) !important;
}

.video-list-page .ant-pagination-item-active a {
  color: #4da6ff !important;
  font-weight: 700 !important;
}

.video-list-page .ant-pagination-prev .ant-pagination-item-link,
.video-list-page .ant-pagination-next .ant-pagination-item-link {
  background: transparent !important;
  border: 1px solid transparent !important;
  border-radius: 8px !important;
  color: var(--ds-text-subtle) !important;
  min-width: 34px !important;
  height: 34px !important;
  display: flex !important;
  align-items: center !important;
  justify-content: center !important;
  transition: all 0.2s ease !important;
}

.video-list-page .ant-pagination-prev:hover .ant-pagination-item-link,
.video-list-page .ant-pagination-next:hover .ant-pagination-item-link {
  color: #4da6ff !important;
  background: rgba(77,166,255,0.08) !important;
}

.video-list-page .ant-pagination-total-text {
  color: var(--ds-text-subtle) !important;
  font-size: 12px !important;
  margin-right: 8px !important;
}

/* Size changer */
.video-list-page .ant-pagination-options .ant-select .ant-select-selector {
  min-height: 34px !important;
  height: 34px !important;
  border-radius: 8px !important;
  font-size: 12px !important;
  background: var(--ds-bg-alt) !important;
  border: none !important;
  box-shadow: inset 0 0 0 1px var(--ds-border) !important;
  color: var(--ds-text-muted) !important;
}

/* ---- Preview Modal ---- */
.vlp-preview-modal .ant-modal-content {
  background: var(--ds-surface-2) !important;
  border: 1px solid var(--ds-border) !important;
  border-radius: 16px !important;
  box-shadow: 0 32px 80px rgba(0,0,0,0.6) !important;
  padding: 28px !important;
}

.vlp-preview-modal .ant-modal-close {
  color: var(--ds-text-subtle) !important;
}

.vlp-preview-modal .ant-modal-close:hover {
  color: var(--ds-text-muted) !important;
}

/* ---- Upload CTA button — design.md blue gradient ---- */
.video-list-page .ant-btn-primary,
.video-list-page .ant-btn-primary:not(:disabled) {
  background: var(--ds-text) !important;
  border: none !important;
  box-shadow: 0 4px 24px rgba(77,166,255,0.35) !important;
  border-radius: 12px !important;
  height: 44px !important;
  padding-inline: 28px !important;
  font-size: 15px !important;
  font-weight: 700 !important;
}

.video-list-page .ant-btn-primary:hover:not(:disabled) {
  /* P2: ink-on-ink hover 用更深 ds-text-muted */
  background: var(--ds-text-muted) !important;
  box-shadow: 0 6px 28px rgba(0,0,0,0.18) !important;
}

/* ---- Spin ---- */
.video-list-page .ant-spin-dot-item {
  background-color: #4da6ff !important;
}
/* ===== ProductsHomePage layout (plan v2 Task 5) ===== */
.products-home {
  overflow-y: auto;
  padding: 28px 32px 64px;
  background: var(--ds-bg);
}
.back-to-canvas-btn {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  background: transparent;
  border: 1px solid var(--ds-border);
  color: var(--ds-text-muted);
  padding: 6px 12px;
  border-radius: var(--ds-radius-sm);
  font: inherit;
  font-size: 12px;
  cursor: pointer;
  margin-bottom: 14px;
  transition: background 0.12s, color 0.12s, border-color 0.12s;
}
.back-to-canvas-btn:hover {
  background: var(--ds-bg-alt);
  color: var(--ds-text);
  border-color: var(--ds-border-strong);
}
.back-to-canvas-arrow {
  font-size: 14px;
  line-height: 1;
}
.products-home-title {
  font-size: 24px;
  font-weight: 700;
  letter-spacing: -0.02em;
  margin: 0 0 4px;
}
.products-home-sub {
  font-size: 13px;
  color: var(--ds-text-muted);
  margin: 0 0 24px;
}

/* ===== Enterprise info card (Task 6) ===== */
.ent-card {
  display: flex;
  align-items: center;
  gap: 20px;
  padding: 18px 22px;
  background: var(--ds-surface);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-lg);
  margin-bottom: 24px;
}
.ent-logo {
  width: 56px;
  height: 56px;
  border-radius: var(--ds-radius-md);
  background: var(--ds-bg-deep);
  border: 1px solid var(--ds-border);
  display: grid;
  place-items: center;
  font-size: 22px;
  font-weight: 700;
  color: var(--ds-text);
  flex-shrink: 0;
}
.ent-info { flex: 1; min-width: 0; }
.ent-name {
  font-size: 18px;
  font-weight: 700;
  color: var(--ds-text);
  letter-spacing: -0.01em;
  margin-bottom: 4px;
}
.ent-meta {
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: 12px;
  color: var(--ds-text-muted);
}
.ent-pin {
  background: var(--ds-bg-alt);
  border-radius: var(--ds-radius-sm);
  padding: 2px 8px;
  font-weight: 500;
}
.ent-stats {
  display: flex;
  gap: 24px;
  padding-left: 24px;
  border-left: 1px solid var(--ds-border);
}
.ent-stat {
  display: flex;
  flex-direction: column;
  align-items: center;
  min-width: 56px;
}
.ent-stat-num {
  font-size: 22px;
  font-weight: 700;
  color: var(--ds-text);
  letter-spacing: -0.02em;
}
.ent-stat-label {
  font-size: 11px;
  color: var(--ds-text-muted);
  font-weight: 500;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  margin-top: 2px;
}

/* ===== Product picker row (Task 7) ===== */
.product-picker {
  margin-bottom: 28px;
}
.product-picker-label {
  font-size: 11px;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--ds-text-subtle);
  font-weight: 600;
  margin-bottom: 10px;
  display: flex;
  align-items: center;
  gap: 6px;
}
.product-picker-row {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
}
.product-pill {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 8px 14px 8px 8px;
  background: var(--ds-surface);
  border: 1px solid var(--ds-border);
  border-radius: 999px;
  cursor: pointer;
  transition: background 0.12s, border-color 0.12s;
  font: inherit;
  color: var(--ds-text);
  position: relative;
}
.product-pill:hover {
  background: var(--ds-bg-alt);
  border-color: var(--ds-border-strong);
}
.product-pill--active {
  background: var(--ds-text);
  border-color: var(--ds-text);
  color: var(--ds-text-on-ink);
}
.product-pill--active:hover {
  background: var(--ds-text);
}
.product-pill--active .pill-swatch {
  background: var(--ds-text-on-ink);
  color: var(--ds-text);
}
.product-pill--active .pill-meta {
  color: rgba(255,255,255,0.6);
}
.pill-swatch {
  width: 22px;
  height: 22px;
  border-radius: 999px;
  background: var(--ds-bg-deep);
  color: var(--ds-text);
  display: grid;
  place-items: center;
  font-size: 10px;
  font-weight: 700;
  flex-shrink: 0;
}
.pill-swatch--new {
  background: transparent;
  border: 1px dashed var(--ds-border-strong);
  color: var(--ds-text-subtle);
}
.pill-text {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  line-height: 1.2;
}
.pill-name {
  font-size: 13px;
  font-weight: 600;
}
.pill-meta {
  font-size: 10px;
  color: var(--ds-text-subtle);
  letter-spacing: 0.02em;
  margin-top: 1px;
}
.product-pill--new {
  border-style: dashed;
  color: var(--ds-text-muted);
  background: transparent;
}
.product-pill--new:hover {
  background: var(--ds-bg-alt);
  color: var(--ds-text);
}

/* ===== Pill ⋯ menu + rename inline (Task 8) ===== */
.pill-more-btn {
  display: inline-grid;
  place-items: center;
  width: 22px;
  height: 22px;
  border-radius: 999px;
  background: transparent;
  border: none;
  color: var(--ds-text-subtle);
  cursor: pointer;
  font: inherit;
  font-size: 14px;
  margin-left: 4px;
  padding: 0;
}
.pill-more-btn:hover {
  background: var(--ds-bg-alt);
  color: var(--ds-text);
}
.pill-menu {
  position: absolute;
  top: calc(100% + 6px);
  right: 0;
  background: var(--ds-surface);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-md);
  box-shadow: var(--ds-shadow-deep);
  padding: 4px;
  z-index: 60;
  min-width: 132px;
}
.pill-menu-item {
  display: block;
  width: 100%;
  padding: 8px 12px;
  background: transparent;
  border: none;
  border-radius: var(--ds-radius-sm);
  font: inherit;
  font-size: 13px;
  color: var(--ds-text);
  cursor: pointer;
  text-align: left;
}
.pill-menu-item:hover { background: var(--ds-bg-alt); }
.pill-menu-item--danger { color: var(--ds-danger); }
.pill-rename-input {
  font: inherit;
  font-size: 13px;
  font-weight: 600;
  background: var(--ds-surface);
  border: 1px solid var(--ds-border-strong);
  border-radius: var(--ds-radius-sm);
  padding: 1px 6px;
  outline: none;
  color: var(--ds-text);
  width: 120px;
}

/* ===== Section blocks (Task 11/12/13) ===== */
.section {
  margin-bottom: 32px;
  background: var(--ds-surface);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-lg);
  padding: 22px 24px;
}
.section-head {
  display: flex;
  align-items: baseline;
  gap: 8px;
  margin-bottom: 16px;
}
.section-title {
  font-size: 16px;
  font-weight: 700;
  color: var(--ds-text);
  margin: 0;
  letter-spacing: -0.01em;
}
.section-sub {
  font-size: 12px;
  color: var(--ds-text-muted);
}
.section-actions {
  margin-left: auto;
  display: flex;
  gap: 8px;
  align-items: center;
}
.btn {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  border: 1px solid var(--ds-border);
  background: var(--ds-surface);
  padding: 6px 12px;
  border-radius: var(--ds-radius-sm);
  font: inherit;
  font-size: 12px;
  color: var(--ds-text);
  cursor: pointer;
  text-decoration: none;
}
.btn:hover { background: var(--ds-bg-alt); }
.btn-ghost {
  background: transparent;
  border-color: transparent;
  color: var(--ds-text-muted);
}
.btn-ghost:hover { color: var(--ds-text); background: var(--ds-bg-alt); }
.skeleton-row {
  padding: 24px;
  text-align: center;
  color: var(--ds-text-subtle);
  font-size: 13px;
}
.scroll-row {
  display: flex;
  gap: 14px;
  overflow-x: auto;
  padding-bottom: 6px;
}
.scroll-row > * { flex: 0 0 auto; width: 220px; }

/* ===== Doc card (Task 12) ===== */
.doc-card {
  display: flex;
  gap: 12px;
  width: 220px;
  padding: 14px;
  background: var(--ds-surface);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-md);
  cursor: pointer;
  font: inherit;
  color: var(--ds-text);
  text-align: left;
  align-items: flex-start;
}
.doc-card:hover {
  border-color: var(--ds-border-strong);
  background: var(--ds-bg-alt);
}
.doc-card--add {
  border-style: dashed;
  background: transparent;
  align-items: center;
  justify-content: center;
}
.doc-card-icon {
  width: 36px;
  height: 36px;
  border-radius: var(--ds-radius-sm);
  background: var(--ds-bg-deep);
  color: var(--ds-text);
  display: grid;
  place-items: center;
  font-size: 10px;
  font-weight: 800;
  letter-spacing: 0.02em;
  flex-shrink: 0;
}
.doc-card-icon--add {
  background: transparent;
  border: 1px dashed var(--ds-border-strong);
  color: var(--ds-text-subtle);
  font-size: 16px;
  font-weight: 600;
}
.doc-card-body {
  display: flex;
  flex-direction: column;
  min-width: 0;
  flex: 1;
}
.doc-card-title {
  font-size: 13px;
  font-weight: 600;
  color: var(--ds-text);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.doc-card-meta {
  font-size: 11px;
  color: var(--ds-text-muted);
  margin-top: 4px;
  letter-spacing: 0.02em;
}

/* ===== Digital human stats (Task 13) ===== */
.digital-row {
  display: flex;
  gap: 14px;
}
.digital-card,
.digital-card-secondary {
  display: flex;
  align-items: center;
  gap: 16px;
  padding: 16px 20px;
  background: var(--ds-bg-alt);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-md);
  flex: 1;
}
.digital-avatar {
  width: 44px;
  height: 44px;
  border-radius: 999px;
  background: var(--ds-bg-deep);
  display: grid;
  place-items: center;
  font-size: 16px;
  font-weight: 700;
  color: var(--ds-text);
}
.digital-num {
  font-size: 22px;
  font-weight: 700;
  letter-spacing: -0.02em;
  color: var(--ds-text);
}
.digital-label,
.digital-pref-meta {
  font-size: 11px;
  color: var(--ds-text-muted);
  letter-spacing: 0.04em;
  text-transform: uppercase;
  font-weight: 500;
  margin-top: 2px;
}
.digital-pref-icon {
  width: 36px;
  height: 36px;
  display: grid;
  place-items: center;
  font-size: 16px;
  color: var(--ds-text-subtle);
  background: var(--ds-surface);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-sm);
}
.digital-pref-text {
  font-size: 13px;
  font-weight: 600;
  color: var(--ds-text);
}
/**
 * GEO Marketing - Onboarding Page Styles
 * Hero 启动页 + 品牌入驻 + 关键词设置
 */

/* ============= Hero 全屏启动页 ============= */
.onboarding-hero {
  position: relative;
  width: 100vw;
  min-height: 100vh;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  background: radial-gradient(ellipse at 20% 50%, rgba(99, 102, 241, 0.15) 0%, transparent 50%),
              radial-gradient(ellipse at 80% 50%, rgba(139, 92, 246, 0.1) 0%, transparent 50%),
              radial-gradient(ellipse at 50% 100%, rgba(168, 85, 247, 0.08) 0%, transparent 50%),
              var(--ds-bg);
  overflow: hidden;
  padding: 40px 24px;
}

/* 浮动光斑粒子 */
.onboarding-hero::before,
.onboarding-hero::after {
  content: '';
  position: absolute;
  border-radius: 50%;
  filter: blur(80px);
  opacity: 0.4;
  animation: float 12s ease-in-out infinite;
  pointer-events: none;
}

.onboarding-hero::before {
  width: 500px;
  height: 500px;
  background: radial-gradient(circle, rgba(99, 102, 241, 0.3) 0%, transparent 70%);
  top: -120px;
  left: -100px;
  animation-delay: 0s;
}

.onboarding-hero::after {
  width: 400px;
  height: 400px;
  background: radial-gradient(circle, rgba(168, 85, 247, 0.25) 0%, transparent 70%);
  bottom: -80px;
  right: -60px;
  animation-delay: -6s;
}

@keyframes float {
  0%, 100% { transform: translate(0, 0) scale(1); }
  33% { transform: translate(30px, -20px) scale(1.05); }
  66% { transform: translate(-20px, 15px) scale(0.95); }
}

/* 第三个光斑 */
.onboarding-orb {
  position: absolute;
  width: 300px;
  height: 300px;
  border-radius: 50%;
  background: radial-gradient(circle, rgba(139, 92, 246, 0.2) 0%, transparent 70%);
  filter: blur(60px);
  top: 40%;
  left: 55%;
  animation: float 15s ease-in-out infinite;
  animation-delay: -3s;
  pointer-events: none;
}

/* 网格背景 */
.onboarding-grid {
  position: absolute;
  inset: 0;
  background-image: 
    linear-gradient(rgba(139, 92, 246, 0.03) 1px, transparent 1px),
    linear-gradient(90deg, rgba(139, 92, 246, 0.03) 1px, transparent 1px);
  background-size: 60px 60px;
  pointer-events: none;
  mask-image: radial-gradient(ellipse at center, black 30%, transparent 70%);
  -webkit-mask-image: radial-gradient(ellipse at center, black 30%, transparent 70%);
}

/* 主体内容容器 */
.onboarding-content {
  position: relative;
  z-index: 1;
  text-align: center;
  max-width: 720px;
  width: 100%;
}

/* Logo / 品牌标识 */
.onboarding-logo {
  width: 80px;
  height: 80px;
  margin: 0 auto 32px;
  border-radius: 24px;
  background: linear-gradient(135deg, #6366f1 0%, #8b5cf6 50%, #a78bfa 100%);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 36px;
  box-shadow: 0 8px 32px rgba(99, 102, 241, 0.4), 0 0 60px rgba(139, 92, 246, 0.2);
  animation: logo-glow 3s ease-in-out infinite alternate;
}

@keyframes logo-glow {
  0% { box-shadow: 0 8px 32px rgba(99, 102, 241, 0.4), 0 0 60px rgba(139, 92, 246, 0.15); }
  100% { box-shadow: 0 8px 32px rgba(99, 102, 241, 0.6), 0 0 80px rgba(139, 92, 246, 0.3); }
}

/* 主标题 */
.onboarding-title {
  font-size: 48px;
  font-weight: 800;
  letter-spacing: -1px;
  line-height: 1.15;
  margin-bottom: 20px;
  background: linear-gradient(135deg, #e0e7ff 0%, #c7d2fe 25%, #a78bfa 50%, #8b5cf6 75%, #7c3aed 100%);
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
  background-clip: text;
}

/* 副标题 */
.onboarding-subtitle {
  font-size: 18px;
  line-height: 1.7;
  color: var(--ds-text-muted);
  max-width: 520px;
  margin: 0 auto 48px;
  font-weight: 400;
}

.onboarding-subtitle em {
  font-style: normal;
  color: #a78bfa;
  font-weight: 500;
}

/* CTA 核心按钮 */
.onboarding-cta {
  position: relative;
  display: inline-flex;
  align-items: center;
  gap: 10px;
  padding: 18px 48px;
  font-size: 18px;
  font-weight: 700;
  color: #fff;
  background: linear-gradient(135deg, #6366f1 0%, #8b5cf6 50%, #a78bfa 100%);
  border: none;
  border-radius: 16px;
  cursor: pointer;
  transition: all 0.3s cubic-bezier(0.34, 1.56, 0.64, 1);
  box-shadow: 0 4px 24px rgba(99, 102, 241, 0.4);
  letter-spacing: 0.5px;
}

.onboarding-cta:hover {
  transform: translateY(-3px) scale(1.02);
  box-shadow: 0 8px 40px rgba(99, 102, 241, 0.5), 0 0 60px rgba(139, 92, 246, 0.2);
}

.onboarding-cta:active {
  transform: translateY(-1px) scale(0.99);
}

/* CTA 脉冲光环动画 */
.onboarding-cta::before {
  content: '';
  position: absolute;
  inset: -3px;
  border-radius: 18px;
  background: linear-gradient(135deg, #6366f1, #8b5cf6, #a78bfa, #6366f1);
  background-size: 300% 300%;
  z-index: -1;
  opacity: 0;
  animation: pulse-glow 3s ease-in-out infinite;
}

@keyframes pulse-glow {
  0%, 100% { opacity: 0; transform: scale(1); }
  50% { opacity: 0.6; transform: scale(1.04); }
}

/* 底部承诺条 */
.onboarding-promise {
  margin-top: 40px;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  color: var(--ds-text-subtle);
  font-size: 14px;
}

.onboarding-promise-icon {
  color: #22c55e;
  font-size: 16px;
}

/* 底部特性卡片 */
.onboarding-features {
  display: flex;
  gap: 24px;
  margin-top: 64px;
  width: 100%;
  max-width: 700px;
}

.onboarding-feature-card {
  flex: 1;
  padding: 24px 20px;
  background: var(--ds-bg-alt);
  border: 1px solid var(--ds-border);
  border-radius: 16px;
  text-align: center;
  transition: all 0.3s ease;
  backdrop-filter: blur(8px);
}

.onboarding-feature-card:hover {
  background: var(--ds-bg-deep);
  border-color: rgba(139, 92, 246, 0.3);
  transform: translateY(-4px);
}

.onboarding-feature-icon {
  font-size: 28px;
  margin-bottom: 12px;
  display: block;
}

.onboarding-feature-title {
  font-size: 15px;
  font-weight: 600;
  color: var(--ds-text);
  margin-bottom: 6px;
}

.onboarding-feature-desc {
  font-size: 13px;
  color: var(--ds-text-subtle);
  line-height: 1.5;
}

/* ============= 关键词设置页 ============= */
.keyword-setup-page {
  position: relative;
  width: 100vw;
  min-height: 100vh;
  background: radial-gradient(ellipse at 30% 20%, rgba(99, 102, 241, 0.08) 0%, transparent 50%),
              var(--ds-bg);
  padding: 48px 24px;
  display: flex;
  flex-direction: column;
  align-items: center;
  overflow: hidden;
}

.keyword-setup-container {
  position: relative;
  z-index: 1;
  width: 100%;
  max-width: 720px;
}

/* 顶部进度指示 */
.keyword-setup-header {
  text-align: center;
  margin-bottom: 48px;
}

.keyword-setup-step {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  color: var(--ds-text-subtle);
  font-size: 13px;
  font-weight: 500;
  text-transform: uppercase;
  letter-spacing: 2px;
  margin-bottom: 16px;
}

.keyword-setup-step-dot {
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: #8b5cf6;
  box-shadow: 0 0 12px rgba(139, 92, 246, 0.5);
}

.keyword-setup-title {
  font-size: 32px;
  font-weight: 700;
  color: var(--ds-text);
  margin-bottom: 12px;
}

.keyword-setup-desc {
  color: var(--ds-text-subtle);
  font-size: 15px;
  line-height: 1.6;
}

/* 推荐关键词区域 */
.keyword-section {
  background: var(--ds-bg-alt);
  border: 1px solid var(--ds-border);
  border-radius: 20px;
  padding: 32px;
  margin-bottom: 24px;
  backdrop-filter: blur(8px);
}

.keyword-section-label {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-bottom: 20px;
  color: var(--ds-text-muted);
  font-size: 14px;
  font-weight: 500;
}

.keyword-section-label-icon {
  font-size: 16px;
  color: #8b5cf6;
}

.keyword-section-count {
  margin-left: auto;
  color: var(--ds-text-subtle);
  font-size: 13px;
}

/* 关键词 Tag 样式 */
.keyword-tags {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
}

.keyword-tag {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 8px 16px;
  background: rgba(139, 92, 246, 0.1);
  border: 1px solid rgba(139, 92, 246, 0.2);
  border-radius: 12px;
  color: var(--ds-text);
  font-size: 14px;
  transition: all 0.2s ease;
  cursor: default;
  animation: tag-appear 0.3s ease-out both;
}

.keyword-tag:hover {
  background: rgba(139, 92, 246, 0.18);
  border-color: rgba(139, 92, 246, 0.4);
}

@keyframes tag-appear {
  from { opacity: 0; transform: scale(0.8); }
  to { opacity: 1; transform: scale(1); }
}

.keyword-tag-close {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 18px;
  height: 18px;
  border-radius: 50%;
  background: var(--ds-border-strong);
  color: var(--ds-text-subtle);
  font-size: 10px;
  cursor: pointer;
  transition: all 0.15s ease;
  border: none;
  padding: 0;
  line-height: 1;
}

.keyword-tag-close:hover {
  background: rgba(239, 68, 68, 0.3);
  color: #ef4444;
}

/* 手动添加关键词输入框 */
.keyword-add-input {
  display: flex;
  gap: 12px;
  margin-top: 20px;
}

.keyword-add-input .ant-input {
  background: var(--ds-bg-alt) !important;
  border: 1px solid var(--ds-border) !important;
  border-radius: 12px !important;
  color: var(--ds-text) !important;
  padding: 12px 16px !important;
  font-size: 14px !important;
  transition: all 0.2s ease !important;
}

.keyword-add-input .ant-input:focus {
  border-color: rgba(139, 92, 246, 0.5) !important;
  box-shadow: 0 0 0 3px rgba(139, 92, 246, 0.1) !important;
}

.keyword-add-input .ant-input::placeholder {
  color: var(--ds-text-subtle) !important;
}

.keyword-add-btn {
  padding: 12px 20px !important;
  border-radius: 12px !important;
  background: rgba(139, 92, 246, 0.15) !important;
  border: 1px solid rgba(139, 92, 246, 0.3) !important;
  color: #a78bfa !important;
  font-weight: 500 !important;
  transition: all 0.2s ease !important;
}

.keyword-add-btn:hover {
  background: rgba(139, 92, 246, 0.25) !important;
  border-color: rgba(139, 92, 246, 0.5) !important;
  transform: translateY(-1px) !important;
}

/* 底部按钮区域 */
.keyword-actions {
  display: flex;
  gap: 16px;
  margin-top: 40px;
}

.keyword-back-btn {
  flex: 0 0 auto;
  padding: 16px 32px !important;
  border-radius: 14px !important;
  background: var(--ds-bg-alt) !important;
  border: 1px solid var(--ds-border) !important;
  color: var(--ds-text-muted) !important;
  font-size: 16px !important;
  font-weight: 500 !important;
  transition: all 0.2s ease !important;
}

.keyword-back-btn:hover {
  background: var(--ds-bg-deep) !important;
  border-color: var(--ds-border-strong) !important;
  color: var(--ds-text) !important;
}

.keyword-submit-btn {
  flex: 1;
  padding: 16px 32px !important;
  border-radius: 14px !important;
  background: linear-gradient(135deg, #6366f1 0%, #8b5cf6 50%, #a78bfa 100%) !important;
  border: none !important;
  color: #fff !important;
  font-size: 16px !important;
  font-weight: 700 !important;
  box-shadow: 0 4px 24px rgba(99, 102, 241, 0.35) !important;
  transition: all 0.3s cubic-bezier(0.34, 1.56, 0.64, 1) !important;
}

.keyword-submit-btn:hover {
  transform: translateY(-2px) !important;
  box-shadow: 0 8px 32px rgba(99, 102, 241, 0.45), 0 0 40px rgba(139, 92, 246, 0.15) !important;
}

/* 加载态骨架屏 */
.keyword-skeleton {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
}

.keyword-skeleton-item {
  width: 100px;
  height: 38px;
  border-radius: 12px;
  /* skeleton shimmer: subtle ink-tint variants on light bg */
  background: linear-gradient(90deg, rgba(24, 24, 27, 0.04) 25%, rgba(24, 24, 27, 0.08) 50%, rgba(24, 24, 27, 0.04) 75%);
  background-size: 200% 100%;
  animation: skeleton-shimmer 1.5s ease-in-out infinite;
}

.keyword-skeleton-item:nth-child(2) { width: 130px; }
.keyword-skeleton-item:nth-child(3) { width: 90px; }
.keyword-skeleton-item:nth-child(4) { width: 140px; }
.keyword-skeleton-item:nth-child(5) { width: 110px; }
.keyword-skeleton-item:nth-child(6) { width: 120px; }

@keyframes skeleton-shimmer {
  0% { background-position: -200% 0; }
  100% { background-position: 200% 0; }
}

/* ============= 成功动画 ============= */
.onboarding-success {
  position: fixed;
  inset: 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  background: var(--ds-bg);
  z-index: 1000;
  animation: success-fade-in 0.5s ease-out;
}

@keyframes success-fade-in {
  from { opacity: 0; }
  to { opacity: 1; }
}

.success-check {
  width: 100px;
  height: 100px;
  border-radius: 50%;
  background: linear-gradient(135deg, #22c55e 0%, #16a34a 100%);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 48px;
  color: #fff;
  margin-bottom: 32px;
  box-shadow: 0 8px 40px rgba(34, 197, 94, 0.4);
  animation: success-pop 0.5s cubic-bezier(0.34, 1.56, 0.64, 1) 0.2s both;
}

@keyframes success-pop {
  from { transform: scale(0); opacity: 0; }
  to { transform: scale(1); opacity: 1; }
}

.success-title {
  font-size: 28px;
  font-weight: 700;
  color: var(--ds-text);
  margin-bottom: 12px;
  animation: success-slide-up 0.5s ease-out 0.4s both;
}

.success-desc {
  color: var(--ds-text-subtle);
  font-size: 16px;
  margin-bottom: 40px;
  animation: success-slide-up 0.5s ease-out 0.5s both;
}

@keyframes success-slide-up {
  from { opacity: 0; transform: translateY(20px); }
  to { opacity: 1; transform: translateY(0); }
}

.success-action-btn {
  padding: 16px 48px !important;
  border-radius: 14px !important;
  background: linear-gradient(135deg, #6366f1 0%, #8b5cf6 100%) !important;
  border: none !important;
  color: #fff !important;
  font-size: 16px !important;
  font-weight: 600 !important;
  box-shadow: 0 4px 24px rgba(99, 102, 241, 0.4) !important;
  animation: success-slide-up 0.5s ease-out 0.6s both;
}

/* ============= Modal 弹窗样式覆盖 ============= */
/* 彻底清除可能导致尖角的容器背景 */
.onboarding-modal,
.onboarding-modal .ant-modal-content,
.onboarding-modal .ant-modal-wrap,
.onboarding-modal .ant-modal-header,
.onboarding-modal .ant-modal-body,
.onboarding-modal .ant-modal-footer {
  background: transparent !important;
  box-shadow: none !important;
  border: none !important; /* 移除可能存在的边框导致的阴影感 */
}

/* 重新在 content 层级应用样式 */
.onboarding-modal .ant-modal-content {
  background: var(--ds-surface) !important;
  border: 1px solid rgba(139, 92, 246, 0.15) !important;
  border-radius: 24px !important;
  box-shadow: 0 24px 80px rgba(0, 0, 0, 0.8), 0 0 60px rgba(139, 92, 246, 0.1) !important;
  padding: 40px !important;
  overflow: hidden !important; /* 强制裁剪圆角 */
}

.onboarding-modal .ant-modal-header {
  background: transparent !important;
  border-bottom: none !important;
  padding: 0 !important;
  margin-bottom: 32px !important;
}

.onboarding-modal .ant-modal-title {
  font-size: 24px !important;
  font-weight: 700 !important;
  color: var(--ds-text) !important;
}

.onboarding-modal .ant-modal-close {
  color: var(--ds-text-subtle) !important;
  top: 20px !important;
  right: 20px !important;
}

.onboarding-modal .ant-modal-close:hover {
  color: var(--ds-text) !important;
}

.onboarding-modal .ant-modal-footer {
  border-top: none !important;
  padding: 0 !important;
  margin-top: 32px !important;
}

.onboarding-modal .ant-form-item-label > label {
  color: var(--ds-text-muted) !important;
  font-weight: 500 !important;
  font-size: 14px !important;
}

.onboarding-modal .ant-input {
  background: var(--ds-bg-alt) !important;
  border: 1px solid var(--ds-border) !important;
  border-radius: 12px !important;
  color: var(--ds-text) !important;
  padding: 12px 16px !important;
  font-size: 15px !important;
}

.onboarding-modal .ant-input:focus {
  border-color: rgba(139, 92, 246, 0.5) !important;
  box-shadow: 0 0 0 3px rgba(139, 92, 246, 0.1) !important;
}

.onboarding-modal .ant-input::placeholder {
  color: var(--ds-text-subtle) !important;
}

/* 确保字数统计在所有状态下都清晰可见 */
.onboarding-modal .ant-input-data-count,
.onboarding-modal .ant-input-show-count-suffix {
  color: var(--ds-text-subtle) !important;
  font-size: 13px !important;
}

.modal-submit-btn {
  width: 100% !important;
  padding: 14px 32px !important;
  height: auto !important;
  border-radius: 14px !important;
  background: linear-gradient(135deg, #6366f1 0%, #8b5cf6 50%, #a78bfa 100%) !important;
  border: none !important;
  color: #fff !important;
  font-size: 16px !important;
  font-weight: 700 !important;
  box-shadow: 0 4px 24px rgba(99, 102, 241, 0.35) !important;
  transition: all 0.3s cubic-bezier(0.34, 1.56, 0.64, 1) !important;
}

.modal-submit-btn:hover {
  transform: translateY(-2px) !important;
  box-shadow: 0 8px 32px rgba(99, 102, 241, 0.45) !important;
}

.modal-subtitle {
  color: var(--ds-text-subtle);
  font-size: 14px;
  margin-bottom: 28px;
  line-height: 1.5;
}

/* ============= 响应式 ============= */
@media (max-width: 768px) {
  .onboarding-title {
    font-size: 32px;
  }

  .onboarding-subtitle {
    font-size: 15px;
    margin-bottom: 32px;
  }

  .onboarding-cta {
    padding: 16px 36px;
    font-size: 16px;
    border-radius: 14px;
  }

  .onboarding-features {
    flex-direction: column;
    gap: 16px;
    margin-top: 48px;
  }

  .onboarding-feature-card {
    padding: 20px 16px;
  }

  .keyword-setup-title {
    font-size: 24px;
  }
  
  .keyword-section {
    padding: 24px 20px;
  }

  .keyword-actions {
    flex-direction: column;
  }

  .keyword-back-btn {
    order: 1;
  }

  .onboarding-modal .ant-modal-content {
    padding: 28px 20px !important;
    border-radius: 20px !important;
  }

  .onboarding-logo {
    width: 64px;
    height: 64px;
    font-size: 28px;
    border-radius: 18px;
    margin-bottom: 24px;
  }
}

/* ============= 嵌入 MainLayout 时的覆盖样式 ============= */
.geo-onboarding-embedded {
  position: relative;
  width: 100%;
  min-height: 100%;
}

.geo-onboarding-embedded .onboarding-hero,
.geo-onboarding-embedded .keyword-setup-page {
  width: 100%;
  min-height: calc(100vh - 120px);
}

.geo-onboarding-embedded .onboarding-success {
  position: absolute;
  inset: 0;
  min-height: calc(100vh - 120px);
}
/**
 * GEO Marketing - Content & Knowledge Base Styles
 */

.content-page-container {
  display: flex;
  flex-direction: column;
  gap: 24px;
}

/* Tab 切换重构 */
.geo-tabs-premium .ant-tabs-nav {
  margin-bottom: 24px !important;
}

.geo-tabs-premium .ant-tabs-tab {
  padding: 12px 0 !important;
  margin-right: 32px !important;
  font-size: 16px !important;
  transition: all 0.3s !important;
}

.geo-tabs-premium .ant-tabs-tab-active .ant-tabs-tab-btn {
  color: var(--geo-primary-light) !important;
  font-weight: 600 !important;
  text-shadow: 0 0 10px rgba(139, 92, 246, 0.4);
}

.geo-tabs-premium .ant-tabs-ink-bar {
  background: var(--geo-primary-gradient) !important;
  height: 3px !important;
  border-radius: 3px !important;
}

/* 知识库上传区 */
.knowledge-upload-zone {
  background: rgba(139, 92, 246, 0.03);
  border: 2px dashed var(--geo-glass-border);
  border-radius: 20px;
  padding: 40px;
  text-align: center;
  transition: all 0.3s;
  cursor: pointer;
  margin-bottom: 24px;
}

.knowledge-upload-zone:hover {
  background: rgba(139, 92, 246, 0.06);
  border-color: var(--geo-primary);
  transform: translateY(-2px);
}

.upload-icon {
  font-size: 48px;
  color: var(--geo-primary);
  margin-bottom: 16px;
  display: block;
}

/* 内容列表项强化 */
.content-list-card {
  background: var(--geo-bg-card);
  border-radius: 16px;
  padding: 16px;
  margin-bottom: 16px;
  border: 1px solid var(--geo-border-light);
  transition: all 0.2s;
}

.content-list-card:hover {
  border-color: var(--geo-primary-light);
  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.2);
}

/* 解析状态标签 */
.status-parsing {
  color: #f59e0b;
  display: flex;
  align-items: center;
  gap: 6px;
}

.status-success {
  color: #10b981;
}

.status-failed {
  color: #ef4444;
}

/* 生成按钮连招点缀 */
.btn-generate-premium {
  background: var(--geo-primary-gradient) !important;
  border: none !important;
  box-shadow: 0 4px 15px rgba(139, 92, 246, 0.4) !important;
  height: 40px !important;
  border-radius: 10px !important;
}
/**
 * GEO Marketing - Platform Authorization Styles
 */

.platform-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(340px, 1fr));
  gap: 24px;
  margin-top: 24px;
}

.platform-card-premium {
  background: var(--geo-glass-bg);
  backdrop-filter: blur(var(--geo-glass-blur));
  border: 1px solid var(--geo-glass-border);
  border-radius: 24px;
  padding: 32px;
  position: relative;
  overflow: hidden;
  transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}

.platform-card-premium:hover {
  transform: translateY(-8px);
  border-color: var(--geo-primary-light);
  box-shadow: 0 20px 40px rgba(0, 0, 0, 0.3);
}

/* 品牌光影 */
.platform-glow {
  position: absolute;
  top: -20%;
  right: -10%;
  width: 150px;
  height: 150px;
  border-radius: 50%;
  filter: blur(40px);
  opacity: 0.1;
  z-index: 0;
}

.glow-toutiao { background: #ff4d4f; }
.glow-tiktok { background: #00f2ea; }
.glow-baijiahao { background: #1890ff; }

.platform-card-content {
  position: relative;
  z-index: 1;
}

.platform-icon-wrapper {
  width: 64px;
  height: 64px;
  background: var(--ds-bg-alt);
  border-radius: 18px;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 32px;
  margin-bottom: 24px;
  border: 1px solid var(--ds-border);
}

.platform-name {
  font-size: 20px;
  font-weight: 700;
  color: var(--ds-text);
  margin-bottom: 8px;
}

.auth-status-dot {
  width: 8px;
  height: 8px;
  border-radius: 50%;
  display: inline-block;
  margin-right: 8px;
  box-shadow: 0 0 10px currentColor;
}

.status-online { color: #10b981; }
.status-offline { color: #6b7280; }
.status-warning { color: #fadb14; }
.status-error { color: #ff4d4f; }

.account-info {
  background: var(--ds-bg-alt);
  border-radius: 12px;
  padding: 12px;
  margin: 20px 0;
}

.auth-btn-group {
  display: flex;
  gap: 12px;
  margin-top: 24px;
}
/* 全局容器：提供 20px 的安全缩进，创造“悬浮”感 */
.geo-layout-wrapper {
  display: flex;
  height: 100vh;
  padding: 20px;
  gap: 20px;
  background: var(--geo-bg-primary);
  overflow: hidden;
  position: relative;
}

/* 动态背景网格 */
.geo-layout-wrapper::before {
  content: '';
  position: absolute;
  inset: 0;
  background-image: 
    linear-gradient(rgba(139, 92, 246, 0.05) 1px, transparent 1px),
    linear-gradient(90deg, rgba(139, 92, 246, 0.05) 1px, transparent 1px);
  background-size: 40px 40px;
  z-index: 0;
  pointer-events: none;
}

/* 侧边悬浮岛 */
.geo-sider-island {
  width: 260px;
  height: 100%;
  background: var(--geo-glass-bg) !important;
  backdrop-filter: blur(var(--geo-glass-blur)) !important;
  border: 1px solid var(--geo-glass-border) !important;
  border-radius: 24px;
  display: flex;
  flex-direction: column;
  box-shadow: 0 20px 50px rgba(0, 0, 0, 0.3);
  transition: width 0.3s cubic-bezier(0.4, 0, 0.2, 1);
  z-index: 10;
  flex-shrink: 0;
}

.geo-sider-island.collapsed {
  width: 80px;
}

.geo-logo-container {
  height: 80px;
  display: flex;
  align-items: center;
  padding: 0 24px;
  border-bottom: 1px solid var(--ds-border);
}

.geo-logo-icon {
  width: 32px;
  height: 32px;
  background: var(--geo-primary-gradient);
  border-radius: 10px;
  display: flex;
  align-items: center;
  justify-content: center;
  color: white;
  font-size: 18px;
  box-shadow: 0 0 15px rgba(139, 92, 246, 0.4);
}

.geo-logo-text {
  margin-left: 12px;
  font-size: 16px;
  font-weight: 700;
  color: #fff;
  letter-spacing: 0.5px;
  white-space: nowrap;
}

/* 导航菜单 */
.geo-menu-pro {
  flex: 1;
  background: transparent !important;
  padding: 20px 12px !important;
  border: none !important;
}

.geo-menu-pro .ant-menu-item {
  height: 44px !important;
  line-height: 44px !important;
  margin-bottom: 8px !important;
  border-radius: 12px !important;
  transition: all 0.2s !important;
}

.geo-menu-pro .ant-menu-item-selected {
  background: rgba(139, 92, 246, 0.15) !important;
  color: var(--geo-primary-light) !important;
}

/* 主舞台容器 */
.geo-main-stage {
  flex: 1;
  display: flex;
  flex-direction: column;
  gap: 20px;
  min-width: 0; /* 修复 flex 子元素溢出 */
  z-index: 1;
}

/* 整合式命令条 (Floating Bar) */
.geo-command-bar {
  height: 72px;
  background: var(--geo-glass-bg);
  backdrop-filter: blur(var(--geo-glass-blur));
  border: 1px solid var(--geo-glass-border);
  border-radius: 20px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 0 24px;
  box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);
}

.geo-header-title {
  font-size: 18px;
  font-weight: 600;
  color: var(--ds-text);
}

.geo-header-right {
  display: flex;
  align-items: center;
  gap: 16px;
}

.geo-icon-btn {
  width: 40px;
  height: 40px;
  border-radius: 12px;
  display: flex;
  align-items: center;
  justify-content: center;
  background: var(--ds-bg-alt);
  border: 1px solid var(--ds-border);
  cursor: pointer;
  transition: all 0.2s;
  color: var(--geo-text-secondary);
}

.geo-icon-btn:hover {
  background: var(--ds-bg-deep);
  color: var(--ds-text);
  transform: translateY(-2px);
}

.geo-user-pill {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 6px 14px 6px 6px;
  background: var(--ds-bg-alt);
  border: 1px solid var(--ds-border);
  border-radius: 30px;
  cursor: pointer;
}

/* 内容核心区 */
.geo-content-stage {
  flex: 1;
  background: var(--geo-bg-surface);
  border: 1px solid var(--geo-border-default);
  border-radius: 24px;
  overflow-y: auto;
  padding: 24px;
  position: relative;
  box-shadow: inset 0 0 20px rgba(0, 0, 0, 0.2);
}

/* 响应式适配 */
@media (max-width: 768px) {
  .geo-layout-wrapper {
    padding: 10px;
    gap: 10px;
  }
  .geo-sider-island {
    display: none; /* 移动端靠 Drawer */
  }
}
/**
 * GEO Marketing - 全局统一样式
 * 基于 ui-ux-pro-max 技能设计的视觉规范
 */

/* ============= 全局 CSS 变量（P2 切到全局 ds-token，alias 保留兼容下游 var(--geo-*) 引用） ============= */
:root {
  /* 背景色 — alias 到 ds-token 白底体系 */
  --geo-bg-primary: var(--ds-bg);
  --geo-bg-secondary: var(--ds-bg-alt);
  --geo-bg-tertiary: var(--ds-bg-alt);
  --geo-bg-surface: var(--ds-surface);
  --geo-bg-surface-hover: var(--ds-bg-alt);
  --geo-bg-surface-active: var(--ds-bg-deep);

  /* 主色 — 用 ds-accent（azure brand）替代原紫色，遵循 v1 白色 design system */
  --geo-primary: var(--ds-accent);
  --geo-primary-light: var(--ds-accent);
  --geo-primary-dark: var(--ds-accent-deep);
  --geo-primary-gradient: linear-gradient(135deg, var(--ds-accent) 0%, var(--ds-accent-deep) 100%);

  /* 功能色 */
  --geo-success: var(--ds-success);
  --geo-warning: var(--ds-warning);
  --geo-error: var(--ds-danger);
  --geo-info: var(--ds-accent);

  /* 文字 — alias 到 ds-token ink-on-white 层级 */
  --geo-text-primary: var(--ds-text);
  --geo-text-secondary: var(--ds-text-muted);
  --geo-text-tertiary: var(--ds-text-subtle);
  --geo-text-disabled: var(--ds-text-subtle);

  /* 边框 — alias 到 ds-border */
  --geo-border-default: var(--ds-border);
  --geo-border-hover: var(--ds-border-strong);
  --geo-border-active: var(--ds-accent);

  /* 间距 */
  --geo-spacing-xs: var(--ds-space-1);
  --geo-spacing-sm: var(--ds-space-2);
  --geo-spacing-md: var(--ds-space-4);
  --geo-spacing-lg: var(--ds-space-5);
  --geo-spacing-xl: var(--ds-space-6);
  --geo-spacing-xxl: var(--ds-space-7);

  /* 圆角 — 对齐 ds-radius 14/18 大圆角风格 */
  --geo-radius-sm: var(--ds-radius-sm);
  --geo-radius-md: var(--ds-radius-md);
  --geo-radius-lg: var(--ds-radius-lg);
  --geo-radius-xl: var(--ds-radius-xl);
  --geo-radius-xxl: var(--ds-radius-xl);
  --geo-radius-full: var(--ds-radius-pill);

  /* 阴影 — 切到 ds-shadow（白底专用，深度更浅） */
  --geo-shadow-sm: 0 1px 2px rgba(24, 24, 27, 0.06);
  --geo-shadow-md: 0 4px 8px rgba(24, 24, 27, 0.08);
  --geo-shadow-lg: var(--ds-shadow-cta-nav);
  --geo-shadow-xl: var(--ds-shadow-deep);
  --geo-shadow-glow: 0 0 0 3px rgba(77, 166, 255, 0.18);
  --geo-shadow-glow-strong: 0 0 0 3px rgba(77, 166, 255, 0.28);

  /* 动效 */
  --geo-transition-fast: 0.15s ease;
  --geo-transition-normal: 0.2s ease;
  --geo-transition-slow: 0.3s ease;
  --geo-transition-spring: 0.4s cubic-bezier(0.34, 1.56, 0.64, 1);

  /* 玻璃态效果（白底体系下退化为浅 surface） */
  --geo-glass-bg: rgba(255, 255, 255, 0.65);
  --geo-glass-border: var(--ds-border);
  --geo-glass-blur: 20px;
}

/* ============= 基础样式重置 ============= */
.geo-page-container {
  background: transparent !important;
  min-height: auto !important;
  padding: 0;
  box-sizing: border-box;
}

/* ============= Ant Design 全局样式覆盖 ============= */
/* 布局组件 */
.ant-layout {
  background: var(--geo-bg-primary) !important;
}

.ant-layout-header {
  background: var(--geo-bg-secondary) !important;
  border-bottom: 1px solid var(--geo-border-default) !important;
}

.ant-layout-sider {
  background: var(--geo-bg-secondary) !important;
  border-right: 1px solid var(--geo-border-default) !important;
}

.ant-layout-sider-trigger {
  background: var(--geo-bg-surface) !important;
  color: var(--geo-text-secondary) !important;
  border-top: 1px solid var(--geo-border-default) !important;
}

.ant-layout-sider-trigger:hover {
  color: var(--geo-primary-light) !important;
  background: var(--geo-bg-surface-hover) !important;
}

.ant-layout-content {
  background: var(--geo-bg-primary) !important;
}

.ant-layout-footer {
  background: var(--geo-bg-secondary) !important;
  border-top: 1px solid var(--geo-border-default) !important;
  color: var(--geo-text-secondary) !important;
}

/* 卡片组件 */
.ant-card {
  background: var(--geo-bg-surface) !important;
  border-color: var(--geo-border-default) !important;
  color: var(--geo-text-primary) !important;
}

.ant-card-head,
.ant-card-head-wrapper,
.ant-card-head-title {
  background: transparent !important;
  border-bottom: 1px solid var(--geo-border-default) !important;
  color: var(--geo-text-primary) !important;
}

/* 移除特定卡片的头部边框以实现全融合感 */
.geo-data-card .ant-card-head {
  border-bottom: none !important;
}

.geo-data-card .ant-card-body {
  background: transparent !important;
}

.ant-card-bordered {
  border-color: var(--geo-border-default) !important;
}

/* 表格组件 */
.ant-table {
  background: transparent !important;
  color: var(--geo-text-primary) !important;
}

.ant-table-thead > tr > th {
  background: var(--geo-bg-surface) !important;
  border-bottom-color: var(--geo-border-default) !important;
  color: var(--geo-text-primary) !important;
}

.ant-table-tbody > tr > td {
  background: transparent !important;
  border-bottom-color: var(--geo-border-default) !important;
  color: var(--geo-text-primary) !important;
}

.ant-table-tbody > tr:hover > td {
  background: var(--geo-bg-surface-hover) !important;
}

.ant-table-tbody > tr.ant-table-row-selected > td {
  background: rgba(139, 92, 246, 0.1) !important;
}

.ant-table-placeholder {
  background: transparent !important;
  color: var(--geo-text-secondary) !important;
}

.ant-table-column-sorter {
  color: var(--geo-text-secondary) !important;
  opacity: 0.5;
}

.ant-table-column-sorter-up.active,
.ant-table-column-sorter-down.active {
  color: var(--geo-primary-light) !important;
  opacity: 1;
}

/* 按钮组件 */
.ant-btn-default {
  background: transparent !important;
  border-color: var(--geo-border-default) !important;
  color: var(--geo-text-primary) !important;
}

.ant-btn-default:hover {
  background: var(--geo-bg-surface-hover) !important;
  border-color: var(--geo-primary) !important;
  color: var(--geo-text-primary) !important;
}

.ant-btn-primary {
  background: var(--geo-primary-gradient) !important;
  border: none !important;
  color: #fff !important;
}

.ant-btn-primary:hover {
  filter: brightness(1.1);
  box-shadow: var(--geo-shadow-glow) !important;
}

/* 输入框组件 */
.ant-input,
.ant-select-selector,
.ant-picker {
  background: var(--geo-bg-secondary) !important;
  border-color: var(--geo-border-default) !important;
  color: var(--geo-text-primary) !important;
}

.ant-input:hover,
.ant-select-selector:hover,
.ant-picker:hover {
  border-color: var(--geo-primary) !important;
}

.ant-input:focus,
.ant-select-focused .ant-select-selector,
.ant-picker-focused {
  border-color: var(--geo-primary) !important;
  box-shadow: 0 0 0 2px rgba(139, 92, 246, 0.2) !important;
}

.ant-input::placeholder {
  color: var(--geo-text-disabled) !important;
}

/* 下拉菜单 */
.ant-select-dropdown {
  background: var(--geo-bg-surface) !important;
  border-color: var(--geo-border-default) !important;
}

.ant-select-item {
  color: var(--geo-text-primary) !important;
}

.ant-select-item:hover {
  background: var(--geo-bg-surface-hover) !important;
}

.ant-select-item-option-selected {
  background: rgba(139, 92, 246, 0.15) !important;
  color: var(--geo-primary-light) !important;
}

/* 日期选择器下拉容器：彻底肃清外层残留影音/背景/轮廓 */
/* 日期选择器下拉容器：彻底肃清外层残留阴影/背景/轮廓，解决圆角背后的尖角问题 */
div[class*="ant-picker-dropdown"] {
  background: transparent !important;
  background-color: transparent !important;
  box-shadow: none !important;
  border: none !important;
  padding: 0 !important;
}

.ant-picker-dropdown .ant-picker-panel-container {
  background: var(--geo-bg-surface) !important;
  border: 1px solid var(--geo-border-default) !important;
  box-shadow: 0 10px 50px rgba(0, 0, 0, 0.9) !important;
  border-radius: var(--geo-radius-lg) !important;
  margin-top: -1px !important;
  outline: none !important;
  overflow: hidden !important; /* 强制裁剪内部可能溢出的尖角或背景 */
}

/* 输入框交互逻辑：移除紫色活跃条，恢复标准边框感 */
.ant-picker-range.ant-picker-focused {
  border-color: var(--geo-primary) !important;
  box-shadow: 0 0 0 2px rgba(139, 92, 246, 0.2) !important;
}

.ant-picker-range .ant-picker-active-bar {
  display: none !important;
}

.ant-picker-panel {
  background: transparent !important;
  border: none !important;
}

/* 头部操作区域 */
.ant-picker-header {
  color: var(--geo-text-primary) !important;
  border-bottom: 1px solid var(--geo-border-default) !important;
}

.ant-picker-header button {
  color: var(--geo-text-secondary) !important;
}

.ant-picker-header button:hover {
  color: var(--geo-primary-light) !important;
}

.ant-picker-header-view {
  color: var(--geo-text-primary) !important;
  font-weight: 600 !important;
}

/* 日期单元格状态 */
.ant-picker-cell {
  color: var(--geo-text-disabled) !important;
}

.ant-picker-cell-in-view {
  color: var(--geo-text-primary) !important;
}

.ant-picker-cell-in-view .ant-picker-cell-inner {
  color: inherit !important;
}

/* 范围选中的背景 - 柔和紫色蒙层 */
.ant-picker-cell-in-view.ant-picker-cell-in-range::before {
  background: rgba(139, 92, 246, 0.12) !important;
}

/* 仅在当前视图内的日期（in-view）应用选中/范围起点终点高亮 */
.ant-picker-cell-in-view.ant-picker-cell-selected .ant-picker-cell-inner,
.ant-picker-cell-in-view.ant-picker-cell-range-start .ant-picker-cell-inner,
.ant-picker-cell-in-view.ant-picker-cell-range-end .ant-picker-cell-inner {
  background: var(--geo-primary) !important;
  color: #fff !important;
  border-radius: 8px !important;
}

/* 范围连接处的圆角与背景平滑处理 - 同样限定 in-view */
.ant-picker-cell-in-view.ant-picker-cell-range-start::before,
.ant-picker-cell-in-view.ant-picker-cell-range-end::before {
  background: rgba(139, 92, 246, 0.12) !important;
}

.ant-picker-cell-range-start::before {
  border-top-left-radius: 8px !important;
  border-bottom-left-radius: 8px !important;
}

.ant-picker-cell-range-end::before {
  border-top-right-radius: 8px !important;
  border-bottom-right-radius: 8px !important;
}

/* 悬停行为 */
.ant-picker-cell:hover:not(.ant-picker-cell-selected):not(.ant-picker-cell-range-start):not(.ant-picker-cell-range-end) .ant-picker-cell-inner {
  background: var(--geo-bg-surface-hover) !important;
}

.ant-picker-today-btn {
  color: var(--geo-primary) !important;
  font-weight: 500 !important;
}

/* 彻底移除小三角（Arrow），响应用户建议并解决可见性瑕疵 */
.ant-picker-dropdown .ant-picker-range-arrow,
.ant-picker-dropdown .ant-picker-arrow,
.ant-picker-range-arrow {
  display: none !important;
  visibility: hidden !important;
  opacity: 0 !important;
}

/* 解决浮窗顶部边缘溢光 */
.ant-picker-panel-container {
  overflow: hidden !important;
}

.ant-picker-header {
  border-top: none !important;
}

/* 标签组件 */
.ant-tag {
  background: var(--ds-bg-alt) !important;
  border-color: var(--ds-border) !important;
  color: var(--geo-text-primary) !important;
}

/* 模态框容器必须透明，否则会露出尖角 */
.ant-modal {
  background: transparent !important;
}

.ant-modal-header {
  background: transparent !important;
  border-bottom-color: var(--geo-border-default) !important;
}

.ant-modal-title {
  color: var(--geo-text-primary) !important;
}

.ant-modal-content {
  background: var(--geo-bg-surface) !important;
  color: var(--geo-text-primary) !important;
}

.ant-modal-footer {
  border-top-color: var(--geo-border-default) !important;
}

/* 消息提示 */
.ant-message {
  color: var(--geo-text-primary) !important;
}

/* 步骤条 */
.ant-steps-item-process .ant-steps-item-icon {
  background: var(--geo-primary) !important;
  border-color: var(--geo-primary) !important;
}

.ant-steps-item-process .ant-steps-item-title {
  color: var(--geo-text-primary) !important;
}

.ant-steps-item-wait .ant-steps-item-title {
  color: var(--geo-text-secondary) !important;
}

.ant-steps-item-icon {
  background: var(--geo-bg-secondary) !important;
  border-color: var(--geo-border-default) !important;
}

.ant-steps-item-icon > .ant-steps-icon {
  color: var(--geo-text-secondary) !important;
}

/* 菜单组件 */
.ant-menu {
  background: var(--geo-bg-secondary) !important;
  color: var(--geo-text-primary) !important;
  border-right: none !important;
}

.ant-menu-item {
  color: var(--geo-text-secondary) !important;
  background: transparent !important;
}

.ant-menu-item:hover {
  color: var(--geo-text-primary) !important;
  background: rgba(139, 92, 246, 0.1) !important;
}

.ant-menu-item-selected {
  color: var(--geo-primary-light) !important;
  background: rgba(139, 92, 246, 0.15) !important;
}

.ant-menu-item-selected::after {
  border-right-color: var(--geo-primary) !important;
}

.ant-menu-item-active {
  background: rgba(139, 92, 246, 0.1) !important;
}

.ant-menu-submenu-title {
  color: var(--geo-text-secondary) !important;
  background: transparent !important;
}

.ant-menu-submenu-title:hover {
  color: var(--geo-text-primary) !important;
  background: rgba(139, 92, 246, 0.1) !important;
}

.ant-menu-submenu-selected .ant-menu-submenu-title {
  color: var(--geo-primary-light) !important;
}

.ant-menu-sub {
  background: var(--geo-bg-tertiary) !important;
}

.ant-menu-submenu-popup {
  background: var(--geo-bg-surface) !important;
  border-color: var(--geo-border-default) !important;
}

.ant-menu-dark .ant-menu-item:hover {
  background: rgba(139, 92, 246, 0.1) !important;
}

.ant-menu-light {
  color: var(--geo-text-primary) !important;
}

/* 分割线 */
.ant-divider {
  border-color: var(--geo-border-default) !important;
}

.ant-divider-inner-text {
  color: var(--geo-text-secondary) !important;
}

/* 滚动条 */
::-webkit-scrollbar {
  width: 6px;
  height: 6px;
}

::-webkit-scrollbar-track {
  background: transparent;
}

::-webkit-scrollbar-thumb {
  background: rgba(139, 92, 246, 0.3);
  border-radius: 3px;
}

::-webkit-scrollbar-thumb:hover {
  background: rgba(139, 92, 246, 0.5);
}

/* ============= 更多 Ant Design 组件样式覆盖 ============= */
/* 文字排版 */
.ant-typography,
.ant-typography * {
  color: var(--geo-text-primary) !important;
}

.ant-typography-secondary {
  color: var(--geo-text-secondary) !important;
}

.ant-typography-disabled {
  color: var(--geo-text-disabled) !important;
}

/* 开关 */
.ant-switch {
  background: var(--geo-bg-tertiary) !important;
}

.ant-switch-checked {
  background: var(--geo-primary) !important;
}

/* 复选框 */
.ant-checkbox-wrapper {
  color: var(--geo-text-primary) !important;
}

.ant-checkbox-input:focus + .ant-checkbox-inner {
  border-color: var(--geo-primary) !important;
}

.ant-checkbox-checked .ant-checkbox-inner {
  background: var(--geo-primary) !important;
  border-color: var(--geo-primary) !important;
}

/* 单选框 */
.ant-radio-wrapper {
  color: var(--geo-text-primary) !important;
}

.ant-radio-input:focus + .ant-radio-inner {
  border-color: var(--geo-primary) !important;
}

.ant-radio-checked .ant-radio-inner {
  border-color: var(--geo-primary) !important;
}

.ant-radio-checked .ant-radio-inner::after {
  background: var(--geo-primary) !important;
}

/* 滑块 */
.ant-slider-track {
  background: var(--geo-primary) !important;
}

.ant-slider-rail {
  background: var(--geo-bg-tertiary) !important;
}

.ant-slider-handle {
  border-color: var(--geo-primary) !important;
}

/* 进度条 */
.ant-progress-text {
  color: var(--geo-text-primary) !important;
}

.ant-progress-inner {
  background: var(--geo-bg-tertiary) !important;
}

/* 警告框 */
.ant-alert {
  background: var(--geo-bg-surface) !important;
  border: 1px solid var(--geo-border-default) !important;
}

.ant-alert-message {
  color: var(--geo-text-primary) !important;
}

.ant-alert-description {
  color: var(--geo-text-secondary) !important;
}

/* 通知 */
.ant-notification-notice {
  background: var(--geo-bg-surface) !important;
  border: 1px solid var(--geo-border-default) !important;
}

.ant-notification-notice-message {
  color: var(--geo-text-primary) !important;
}

.ant-notification-notice-description {
  color: var(--geo-text-secondary) !important;
}

/* 工具提示 */
.ant-tooltip-inner {
  background: var(--geo-bg-surface) !important;
  color: var(--geo-text-primary) !important;
}

.ant-tooltip-arrow::before {
  background: var(--geo-bg-surface) !important;
}

/* 弹出框 */
.ant-popover {
  background: var(--geo-bg-surface) !important;
}

.ant-popover-inner {
  background: var(--geo-bg-surface) !important;
}

.ant-popover-title {
  color: var(--geo-text-primary) !important;
  border-bottom-color: var(--geo-border-default) !important;
}

.ant-popover-inner-content {
  color: var(--geo-text-primary) !important;
}

/* 下拉菜单：彻底肃清外层残留阴影/背景/轮廓，包含内容级容器及任何包装 div */
.ant-dropdown,
div[class*="ant-dropdown-placement"],
.ant-dropdown-content,
.ant-dropdown > div,
div:has(> .ant-dropdown-menu) {
  background: transparent !important;
  background-color: transparent !important;
  box-shadow: none !important;
  border: none !important;
  padding: 0 !important;
}

/* 内部菜单板赋予背景沉浸感、高雅圆角及强投影分离度 */
.ant-dropdown-menu {
  background: var(--geo-bg-surface) !important;
  border: 1px solid var(--geo-border-default) !important;
  border-radius: var(--geo-radius-lg) !important;
  padding: 8px !important;
  box-shadow: 0 10px 50px rgba(0, 0, 0, 0.9) !important;
  margin-top: -1px !important;
  outline: none !important;
  overflow: hidden !important; /* 强制裁剪内部可能溢出的尖角或背景 */
}

/* 彻底移除下拉菜单小三角（Arrow），避免透明背板穿帮瑕疵 */
.ant-dropdown-arrow {
  display: none !important;
  visibility: hidden !important;
  opacity: 0 !important;
}

.ant-dropdown-menu-item {
  color: var(--geo-text-primary) !important;
  border-radius: var(--geo-radius-md) !important;
  padding: 8px 12px !important;
  margin-bottom: 2px !important;
  transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1) !important;
}

.ant-dropdown-menu-item:last-child {
  margin-bottom: 0 !important;
}

.ant-dropdown-menu-item:hover {
  background: var(--ds-bg-alt) !important;
}

/* 面包屑 */
.ant-breadcrumb a {
  color: var(--geo-text-secondary) !important;
}

.ant-breadcrumb a:hover {
  color: var(--geo-primary) !important;
}

.ant-breadcrumb-separator {
  color: var(--geo-text-disabled) !important;
}

.ant-breadcrumb > span:last-child {
  color: var(--geo-text-primary) !important;
}

/* 分页 */
.ant-pagination-item {
  background: var(--geo-bg-secondary) !important;
  border-color: var(--geo-border-default) !important;
}

.ant-pagination-item a {
  color: var(--geo-text-primary) !important;
}

.ant-pagination-item-active {
  background: var(--geo-primary) !important;
  border-color: var(--geo-primary) !important;
}

.ant-pagination-item-active a {
  color: #fff !important;
}

.ant-pagination-prev .ant-pagination-item-link,
.ant-pagination-next .ant-pagination-item-link {
  background: var(--geo-bg-secondary) !important;
  border-color: var(--geo-border-default) !important;
  color: var(--geo-text-primary) !important;
}

.ant-pagination-disabled .ant-pagination-item-link {
  color: var(--geo-text-disabled) !important;
}

.ant-pagination-total-text {
  color: var(--geo-text-secondary) !important;
  margin-right: 12px !important;
  font-weight: 500;
}

.ant-spin-dot-item {
  background-color: var(--geo-primary) !important;
}

.ant-spin-text {
  color: var(--geo-text-secondary) !important;
  margin-top: 12px !important;
  font-weight: 500 !important;
}

/* 加载蒙层优化：完全移除旧的蒙层逻辑，改为由页面控制显隐 */
.ant-spin-nested-loading > div > .ant-spin {
  display: none !important;
}

.geo-loading-container {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  padding: 80px 0;
  background: var(--ds-bg-alt);
  border-radius: var(--geo-radius-lg);
  border: 1px solid var(--geo-border-default);
  margin: 20px 0;
}

.geo-loading-icon {
  font-size: 40px;
  color: var(--geo-primary);
  margin-bottom: 16px;
  filter: drop-shadow(0 0 10px var(--geo-primary));
}

.geo-loading-text {
  color: var(--geo-text-secondary);
  font-size: 14px;
  letter-spacing: 1px;
}

/* 消息提示 (Message) 白底体系 */
.ant-message-notice-content {
  background: var(--ds-surface) !important;
  border: 1px solid var(--ds-border) !important;
  box-shadow: var(--ds-shadow-deep) !important;
  border-radius: var(--ds-radius-lg) !important;
}

.ant-message-custom-content span {
  color: var(--ds-text) !important;
  font-size: 14px !important;
  font-weight: 500 !important;
}

/* 空状态 */
.ant-empty-description {
  color: var(--geo-text-secondary) !important;
}

/* 加载 */
.ant-spin-text {
  color: var(--geo-text-secondary) !important;
}

/* 徽标 */
.ant-badge-count {
  background: var(--geo-error) !important;
}

/* 头像 */
.ant-avatar {
  background: var(--geo-primary) !important;
  color: #fff !important;
}

/* 列表 */
.ant-list-item {
  border-bottom-color: var(--geo-border-default) !important;
}

.ant-list-item-meta-title {
  color: var(--geo-text-primary) !important;
}

.ant-list-item-meta-description {
  color: var(--geo-text-secondary) !important;
}

/* 时间线 */
.ant-timeline-item-head {
  background: var(--geo-bg-secondary) !important;
  border-color: var(--geo-primary) !important;
}

.ant-timeline-item-content {
  color: var(--geo-text-primary) !important;
}

/* 树形控件 */
.ant-tree {
  background: transparent !important;
  color: var(--geo-text-primary) !important;
}

.ant-tree-node-content-wrapper:hover {
  background: var(--geo-bg-surface-hover) !important;
}

.ant-tree-node-selected {
  background: rgba(139, 92, 246, 0.15) !important;
}

/* 折叠面板 */
.ant-collapse {
  background: transparent !important;
  border-color: var(--geo-border-default) !important;
}

.ant-collapse-item {
  border-color: var(--geo-border-default) !important;
}

.ant-collapse-header {
  background: var(--geo-bg-surface) !important;
  color: var(--geo-text-primary) !important;
}

.ant-collapse-content {
  background: var(--geo-bg-secondary) !important;
  border-color: var(--geo-border-default) !important;
}

.ant-collapse-content > .ant-collapse-content-box {
  color: var(--geo-text-primary) !important;
}

/* 标签页 */
.ant-tabs {
  color: var(--geo-text-primary) !important;
}

.ant-tabs-tab {
  color: var(--geo-text-secondary) !important;
  background: transparent !important;
}

.ant-tabs-tab:hover {
  color: var(--geo-text-primary) !important;
}

.ant-tabs-tab-active {
  color: var(--geo-primary) !important;
}

.ant-tabs-ink-bar {
  background: var(--geo-primary) !important;
}

.ant-tabs-content {
  color: var(--geo-text-primary) !important;
}

/* 表单 */
.ant-form-item-label > label {
  color: var(--geo-text-primary) !important;
}

.ant-form-item-explain-error {
  color: var(--geo-error) !important;
}

.ant-form-item-explain-warning {
  color: var(--geo-warning) !important;
}

/* 上传组件 */
.ant-upload {
  background: var(--geo-bg-secondary) !important;
  border-color: var(--geo-border-default) !important;
}

.ant-upload-drag {
  background: var(--geo-bg-secondary) !important;
  border-color: var(--geo-border-default) !important;
}

.ant-upload-text {
  color: var(--geo-text-primary) !important;
}

.ant-upload-hint {
  color: var(--geo-text-secondary) !important;
}

/* 描述列表 */
.ant-descriptions-title {
  color: var(--geo-text-primary) !important;
}

.ant-descriptions-item-label {
  color: var(--geo-text-secondary) !important;
}

.ant-descriptions-item-content {
  color: var(--geo-text-primary) !important;
}

/* 统计 */
.ant-statistic-title {
  color: var(--geo-text-secondary) !important;
}

.ant-statistic-content {
  color: var(--geo-text-primary) !important;
}

/* 评论 */
.ant-comment-author {
  color: var(--geo-text-secondary) !important;
}

.ant-comment-content-author-name {
  color: var(--geo-text-secondary) !important;
}

.ant-comment-content-author-time {
  color: var(--geo-text-disabled) !important;
}

.ant-comment-content-detail p {
  color: var(--geo-text-primary) !important;
}

/* 全局背景 */
body {
  background: var(--geo-bg-primary) !important;
  color: var(--geo-text-primary) !important;
}

#root,
#app {
  background: var(--geo-bg-primary) !important;
}

/* ============= 页面标题样式 ============= */
.geo-page-header {
  margin-bottom: var(--geo-spacing-xl);
}

.geo-page-title {
  color: var(--geo-text-primary);
  font-size: 24px;
  font-weight: 600;
  margin: 0 0 var(--geo-spacing-sm) 0;
  display: flex;
  align-items: center;
  gap: var(--geo-spacing-sm);
}

.geo-page-title-icon {
  font-size: 28px;
  background: var(--geo-primary-gradient);
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
  background-clip: text;
}

.geo-page-subtitle {
  color: var(--geo-text-secondary);
  font-size: 14px;
  margin: 0;
}

/* ============= 统计卡片样式 ============= */
.geo-stat-card {
  background: linear-gradient(135deg, var(--geo-bg-surface) 0%, var(--geo-bg-tertiary) 100%);
  border: 1px solid var(--geo-border-default);
  border-radius: var(--geo-radius-xl);
  padding: var(--geo-spacing-lg);
  transition: all var(--geo-transition-normal);
  height: 100%;
}

.geo-stat-card:hover {
  border-color: var(--geo-primary);
  transform: translateY(-4px);
  box-shadow: var(--geo-shadow-glow);
}

.geo-stat-icon {
  width: 48px;
  height: 48px;
  border-radius: var(--geo-radius-lg);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 24px;
  margin-bottom: var(--geo-spacing-md);
  background: var(--geo-primary-gradient);
  box-shadow: var(--geo-shadow-md);
}

.geo-stat-label {
  color: var(--geo-text-secondary);
  font-size: 14px;
  margin-bottom: var(--geo-spacing-xs);
}

.geo-stat-value {
  color: var(--geo-text-primary);
  font-size: 32px;
  font-weight: 700;
  line-height: 1.2;
}

.geo-stat-suffix {
  color: var(--geo-text-tertiary);
  font-size: 14px;
  margin-left: var(--geo-spacing-xs);
}

/* ============= 数据卡片样式 ============= */
.geo-data-card {
  background: var(--geo-bg-surface);
  border: 1px solid var(--geo-border-default);
  border-radius: var(--geo-radius-lg);
  /* 移除外层 padding，避免头部与主体产生色差空隙 */
  padding: 0 !important;
  transition: all var(--geo-transition-normal);
  overflow: hidden;
}

.geo-data-card:hover {
  background: var(--geo-bg-surface-hover);
  border-color: var(--geo-border-hover);
  box-shadow: var(--geo-shadow-lg);
}

.geo-data-card-header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-bottom: 24px;
  padding-bottom: 16px;
  border-bottom: 1px solid var(--geo-border-default);
}

.geo-data-card-title {
  color: var(--geo-text-primary);
  font-size: 16px;
  font-weight: 600;
  margin: 0;
}

.geo-data-card-action {
  color: var(--geo-primary);
  cursor: pointer;
  transition: color var(--geo-transition-fast);
}

.geo-data-card-action:hover {
  color: var(--geo-primary-light);
}

/* ============= 表格样式增强 ============= */
.geo-table .ant-table {
  background: transparent !important;
  color: var(--geo-text-primary) !important;
}

.geo-table .ant-table-thead > tr > th {
  background: var(--geo-bg-surface) !important;
  color: var(--geo-text-primary) !important;
  border-bottom: 1px solid var(--geo-border-default) !important;
  font-weight: 600;
}

.geo-table .ant-table-tbody > tr > td {
  border-bottom: 1px solid var(--geo-border-default) !important;
  background: transparent !important;
  color: var(--geo-text-primary) !important;
}

.geo-table .ant-table-tbody > tr:hover > td {
  background: var(--geo-bg-surface-hover) !important;
}

.geo-table .ant-table-tbody > tr.ant-table-row-selected > td {
  background: rgba(139, 92, 246, 0.1) !important;
}

/* ============= 按钮样式增强 ============= */
.geo-btn-primary {
  background: var(--geo-primary-gradient) !important;
  border: none !important;
  border-radius: var(--geo-radius-md) !important;
  color: #fff !important;
  font-weight: 600 !important;
  box-shadow: var(--geo-shadow-md) !important;
  transition: all var(--geo-transition-normal) !important;
}

.geo-btn-primary:hover {
  filter: brightness(1.1) !important;
  box-shadow: var(--geo-shadow-glow) !important;
  transform: translateY(-2px) !important;
}

.geo-btn-default {
  background: transparent !important;
  border: 1px solid var(--geo-border-default) !important;
  border-radius: var(--geo-radius-md) !important;
  color: var(--geo-text-primary) !important;
  transition: all var(--geo-transition-fast) !important;
}

.geo-btn-default:hover {
  background: var(--geo-bg-surface-hover) !important;
  border-color: var(--geo-primary) !important;
  color: var(--geo-text-primary) !important;
}

/* 统一的危险/删除按钮样式 */
.geo-btn-danger {
  color: rgba(239, 68, 68, 0.7) !important;
  transition: all var(--geo-transition-fast) !important;
  display: inline-flex !important;
  align-items: center;
  justify-content: center;
}

.geo-btn-danger:hover {
  color: #ef4444 !important;
  background: rgba(239, 68, 68, 0.12) !important;
  transform: scale(1.1) !important;
}

.geo-btn-icon {
  color: var(--geo-text-secondary) !important;
  transition: all var(--geo-transition-fast) !important;
  display: inline-flex !important;
  align-items: center;
  justify-content: center;
}

.geo-btn-icon:hover {
  color: var(--geo-primary-light) !important;
  background: rgba(139, 92, 246, 0.12) !important;
  transform: scale(1.1) !important;
}

.geo-btn-secondary {
  background: transparent !important;
  border: 1px solid var(--geo-border-default) !important;
  border-radius: var(--geo-radius-md) !important;
  color: var(--geo-text-primary) !important;
  transition: all var(--geo-transition-fast) !important;
}

.geo-btn-secondary:hover {
  border-color: var(--geo-primary) !important;
  background: rgba(139, 92, 246, 0.05) !important;
  color: var(--geo-primary-light) !important;
}

/* 搜索框风格对齐：移除专用类名，由 geo-input 统一驱动 */
.geo-input .ant-input-search-button {
  background: var(--geo-bg-secondary) !important;
  border-color: var(--geo-border-default) !important;
  color: var(--geo-text-secondary) !important;
}

.geo-input .ant-input-search-button:hover {
  background: var(--geo-bg-surface-hover) !important;
  border-color: var(--geo-primary) !important;
  color: var(--geo-primary-light) !important;
}

/* ============= 搜索栏与聚合组件圆角修复 ============= */
/* 核心逻辑：在 Space.Compact 内部时，由 Antd 处理圆角，强制覆盖掉 .geo-xxx 类名的 !important */
.ant-space-compact-item.geo-select .ant-select-selector,
.ant-space-compact-item.geo-search .ant-input-affix-wrapper,
.ant-space-compact-item.geo-input .ant-input {
  border-radius: inherit !important;
}

/* 针对 Input.Search 内部的输入框与按钮连接处 */
.ant-input-search .ant-input-affix-wrapper {
  border-top-right-radius: 0 !important;
  border-bottom-right-radius: 0 !important;
}

.ant-input-search .ant-input-group-addon:last-child .ant-input-search-button {
  border-top-left-radius: 0 !important;
  border-bottom-left-radius: 0 !important;
  margin-left: -1px !important;
}

/* 修正 Space.Compact 内部的边框重叠 */
.ant-space-compact-item:not(:last-child).geo-input .ant-select-selector,
.ant-space-compact-item:not(:last-child).geo-input .ant-input-affix-wrapper,
.ant-space-compact-item:not(:last-child).geo-input .ant-input {
  margin-right: -1px !important; /* 改用负边距实现重叠，确保悬停时 z-index 能显示完整边框 */
}

/* ============= 输入框样式增强 ============= */
.geo-input .ant-input,
.geo-input .ant-select-selector,
.geo-input .ant-picker,
.geo-input .ant-input-affix-wrapper {
  background: var(--geo-bg-secondary) !important;
  border: 1px solid var(--geo-border-default) !important;
  border-radius: var(--geo-radius-md); /* 移除 !important 以便 Space.Compact 覆盖 */
  color: var(--geo-text-primary) !important;
  padding-left: 12px !important;
}

/* 搜索栏与聚合组件圆角修复：强制抹平对接处 */
.ant-space-compact-item:not(:first-child):not(:last-child) .ant-select-selector,
.ant-space-compact-item:not(:first-child):not(:last-child) .ant-input-affix-wrapper,
.ant-space-compact-item:not(:first-child):not(:last-child) .ant-input {
  border-radius: 0 !important;
}

.ant-space-compact-item:first-child:not(:last-child) .ant-select-selector,
.ant-space-compact-item:first-child:not(:last-child) .ant-input-affix-wrapper,
.ant-space-compact-item:first-child:not(:last-child) .ant-input {
  border-top-right-radius: 0 !important;
  border-bottom-right-radius: 0 !important;
}

.ant-space-compact-item:last-child:not(:first-child) .ant-select-selector,
.ant-space-compact-item:last-child:not(:first-child) .ant-input-affix-wrapper,
.ant-space-compact-item:last-child:not(:first-child) .ant-input,
.ant-space-compact-item:last-child:not(:first-child) .ant-input-search-button {
  border-top-left-radius: 0 !important;
  border-bottom-left-radius: 0 !important;
}

/* 增强 Space.Compact 成员在悬停/聚焦时的层级 */
.ant-space-compact-item:hover,
.ant-space-compact-item:focus-within {
  z-index: 2 !important;
}

.ant-space-compact-item:hover .ant-select-selector,
.ant-space-compact-item:hover .ant-input-affix-wrapper,
.ant-space-compact-item:hover .ant-input,
.ant-space-compact-item:focus-within .ant-select-selector,
.ant-space-compact-item:focus-within .ant-input-affix-wrapper,
.ant-space-compact-item:focus-within .ant-input {
  border-color: var(--geo-primary) !important;
  background: var(--ds-bg-alt) !important; /* 仅微调背景提高互动感（白底浅灰） */
}

/* --- 新增：紧凑型弹窗按键强制拼合样式 (Geo Compact Button) --- */
.geo-compact-btn {
  background: linear-gradient(135deg, var(--geo-primary), var(--geo-secondary)) !important;
  border: none !important;
  color: #fff !important;
  font-weight: 500 !important;
  border-top-left-radius: 0 !important;
  border-bottom-left-radius: 0 !important;
  border-top-right-radius: var(--geo-radius-md) !important;
  border-bottom-right-radius: var(--geo-radius-md) !important;
  transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1) !important;
  box-shadow: none !important;
}

.geo-compact-btn:hover {
  filter: brightness(1.1) !important;
  box-shadow: 0 4px 16px rgba(139, 92, 246, 0.3) !important;
}

.geo-compact-btn-secondary {
  background: var(--ds-bg-alt) !important;
  border: 1px solid var(--geo-border-default) !important;
  border-left: none !important;
  color: var(--geo-text-primary) !important;
  font-weight: 500 !important;
  border-top-left-radius: 0 !important;
  border-bottom-left-radius: 0 !important;
  border-top-right-radius: var(--geo-radius-md) !important;
  border-bottom-right-radius: var(--geo-radius-md) !important;
  transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1) !important;
}

.geo-compact-btn-secondary:hover {
  background: var(--ds-bg-deep) !important;
  border-color: var(--geo-border-hover) !important;
}

/* 修复紧凑输入框最后子元素的右侧直角溢出 */
.ant-space-compact-item:not(:last-child).geo-input .ant-input,
.ant-space-compact-item:not(:last-child).geo-input .ant-input-affix-wrapper {
  border-top-right-radius: 0 !important;
  border-bottom-right-radius: 0 !important;
}

/* 修复暗黑全局弹窗的右上角关闭按钮 */
.geo-modal .ant-modal-close {
  top: 24px !important;
  inset-inline-end: 24px !important;
  color: var(--geo-text-secondary) !important;
}
.geo-modal .ant-modal-close:hover {
  color: var(--geo-primary) !important;
  background: transparent !important;
}

/* Input.Search 内部连结处修复 */
.ant-input-search .ant-input-affix-wrapper {
  border-top-right-radius: 0 !important;
  border-bottom-right-radius: 0 !important;
}

.ant-input-search .ant-input-group-addon:last-child .ant-input-search-button {
  border-top-left-radius: 0 !important;
  border-bottom-left-radius: 0 !important;
  margin-left: -1px !important;
}

/* 针对 Prefix 场景下 Antd 会自带图标，不需要额外 Padding */
.geo-input .ant-input-affix-wrapper-focused,
.geo-input .ant-input-affix-wrapper:hover {
  border-color: var(--geo-primary) !important;
}

.geo-input .ant-input-affix-wrapper .ant-input {
  padding-left: 8px !important;
  background: transparent !important;
  border: none !important;
  box-shadow: none !important;
}

.geo-input .ant-input:hover,
.geo-input .ant-select-selector:hover,
.geo-input .ant-picker:hover {
  border-color: var(--geo-primary) !important;
}

.geo-input .ant-input:focus,
.geo-input .ant-select-focused .ant-select-selector,
.geo-input .ant-picker-focused {
  border-color: var(--geo-primary) !important;
}

/* 列表卡片悬停 - 彻底还原（仅保留 transition 确保点击等其他反馈平滑） */
.geo-data-card,
.content-list-card {
  transition: border-color var(--geo-transition-normal), background var(--geo-transition-normal) !important;
}

/* 移除大卡片悬停反差，回归基础质感 */
.geo-data-card:hover,
.content-list-card:hover {
  /* 显式重置为基础样式，确保无任何反差 */
  border-color: var(--geo-border-default) !important;
  background: var(--geo-bg-surface) !important;
  box-shadow: var(--geo-shadow-sm) !important;
}

/* 表格行悬停动效 */
.ant-table-tbody > tr.ant-table-row:hover > td {
  background: transparent !important; /* 彻底透明化，融入卡片背景 */
  transition: background 0.3s ease !important;
}

/* ============= Tag 样式增强 ============= */
.geo-tag {
  border-radius: var(--geo-radius-full) !important;
  padding: 2px 12px !important;
  font-weight: 500 !important;
  border: none !important;
}

.geo-tag-success {
  background: rgba(34, 197, 94, 0.15) !important;
  color: var(--geo-success) !important;
}

.geo-tag-warning {
  background: rgba(245, 158, 11, 0.15) !important;
  color: var(--geo-warning) !important;
}

.geo-tag-error {
  background: rgba(239, 68, 68, 0.15) !important;
  color: var(--geo-error) !important;
}

.geo-tag-info {
  background: rgba(59, 130, 246, 0.15) !important;
  color: var(--geo-info) !important;
}

.geo-tag-primary {
  background: rgba(139, 92, 246, 0.15) !important;
  color: var(--geo-primary-light) !important;
}

/* ============= 图表容器样式 ============= */
.geo-chart-container {
  background: var(--geo-bg-surface);
  border: 1px solid var(--geo-border-default);
  border-radius: var(--geo-radius-lg);
  padding: var(--geo-spacing-lg);
}

/* ============= 加载状态样式 ============= */
.geo-loading {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  min-height: 400px;
  gap: var(--geo-spacing-md);
}

.geo-loading-text {
  color: var(--geo-text-secondary);
  font-size: 14px;
}

/* ============= 空状态样式 ============= */
.geo-empty {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  min-height: 320px;
  gap: 16px;
  padding: 40px;
  text-align: center;
}

.geo-empty-icon {
  font-size: 80px;
  line-height: 1;
  background: var(--geo-primary-gradient);
  -webkit-background-clip: text;
  background-clip: text;
  -webkit-text-fill-color: transparent;
  filter: drop-shadow(0 0 15px rgba(0, 242, 254, 0.4));
  margin-bottom: 8px;
  opacity: 0.85;
}

.geo-empty-title {
  color: #fff;
  font-size: 18px;
  font-weight: 600;
  margin: 0;
  letter-spacing: 0.5px;
}

.geo-empty-description {
  color: var(--geo-text-secondary);
  font-size: 14px;
  max-width: 320px;
  line-height: 1.6;
  margin: 0;
}

/* ============= 报告页列表项样式 ============= */
.geo-report-item {
  padding: 16px;
  border-radius: 12px;
  margin-bottom: 12px;
  cursor: pointer;
  background: var(--ds-surface);
  border: 1px solid var(--geo-border-default);
  transition: all var(--geo-transition-normal) ease;
}

.geo-report-item:hover {
  background: var(--ds-bg-alt) !important;
  border-color: var(--geo-border-hover) !important;
}

.geo-report-item.active {
  background: var(--ds-accent-bg) !important;
  border-color: var(--ds-accent) !important;
  box-shadow: var(--ds-focus-ring);
}

/* ============= 响应式布局 ============= */
@media (max-width: 768px) {
  .geo-page-container {
    padding: var(--geo-spacing-md);
  }
  
  .geo-page-title {
    font-size: 20px;
  }
  
  .geo-stat-value {
    font-size: 24px;
  }
}

/* ============= 滚动条样式 ============= */
.geo-scrollbar::-webkit-scrollbar {
  width: 6px;
  height: 6px;
}

.geo-scrollbar::-webkit-scrollbar-track {
  background: transparent;
}

.geo-scrollbar::-webkit-scrollbar-thumb {
  background: rgba(139, 92, 246, 0.3);
  border-radius: var(--geo-radius-full);
}

.geo-scrollbar::-webkit-scrollbar-thumb:hover {
  background: rgba(139, 92, 246, 0.5);
}

/* ============= 工具类 ============= */
.geo-flex-center {
  display: flex;
  align-items: center;
  justify-content: center;
}

.geo-flex-between {
  display: flex;
  align-items: center;
  justify-content: space-between;
}

.geo-text-gradient {
  background: var(--geo-primary-gradient);
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
  background-clip: text;
}

.geo-glow {
  box-shadow: var(--geo-shadow-glow);
}

.geo-glow-strong {
  box-shadow: var(--geo-shadow-glow-strong);
}
/* 全局样式 - 从 deep navy 暗色迁移到 v1 白底
   --color-* 全部 alias 到 --ds-*（在 global-design.css 中定义） */
:root {
  --color-bg: var(--ds-bg);
  --color-bg-2: var(--ds-bg);
  --color-bg-soft: var(--ds-bg);
  --color-surface: var(--ds-bg);
  --color-surface-2: var(--ds-bg-alt);
  --color-surface-3: var(--ds-bg-alt);
  --color-surface-4: var(--ds-bg-alt);
  --color-surface-5: var(--ds-bg-alt);
  --color-panel: var(--ds-bg-alt);
  --color-border: var(--ds-border);
  --color-border-strong: var(--ds-border-strong);
  --color-border-muted: var(--ds-border);
  --color-text: var(--ds-text);
  --color-text-muted: var(--ds-text-muted);
  --color-text-dim: var(--ds-text-subtle);
  --color-primary: var(--ds-accent);
  --color-primary-accent: var(--ds-accent);
  --color-primary-deep: var(--ds-accent-deep);
  --color-primary-tint: var(--ds-accent);
  --color-primary-rgb: 77, 166, 255;
  --color-primary-accent-rgb: 77, 166, 255;
  --color-primary-deep-rgb: 0, 120, 212;
  --color-success: var(--ds-success);
  --color-warning: var(--ds-warning);
  --color-danger: var(--ds-danger);
  --color-info: var(--ds-accent);
}

* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

html {
  background: var(--ds-bg);
}

body {
  font-family: var(--ds-font);
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  overflow: hidden;
  background: var(--ds-bg);
  color: var(--ds-text);
}

#root {
  height: 100vh;
  overflow: hidden;
  background: var(--ds-bg);
}

code {
  font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
    monospace;
}

/* 自定义滚动条 - 默认样式 */
::-webkit-scrollbar {
  width: 8px;
  height: 8px;
}

::-webkit-scrollbar-track {
  background: transparent;
}

::-webkit-scrollbar-thumb {
  background: rgba(0, 0, 0, 0.2);
  border-radius: 4px;
}

::-webkit-scrollbar-thumb:hover {
  background: rgba(0, 0, 0, 0.3);
}

/* 深色背景滚动条 */
.dark-scrollbar::-webkit-scrollbar {
  width: 6px;
}

.dark-scrollbar::-webkit-scrollbar-track {
  background: transparent;
}

.dark-scrollbar::-webkit-scrollbar-thumb {
  background: var(--ds-border);
  border-radius: 3px;
}

.dark-scrollbar::-webkit-scrollbar-thumb:hover {
  background: var(--ds-text-subtle);
}

/* Ant Design 自定义样式 */
.ant-layout {
  min-height: auto;
}

.ant-layout-sider {
  box-shadow: 2px 0 8px rgba(0, 0, 0, 0.05);
}

.ant-menu-item a {
  color: inherit;
}

.ant-menu-item-selected a {
  color: inherit;
}

/* 卡片阴影效果 */
.ant-card {
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.03), 0 1px 6px rgba(0, 0, 0, 0.02);
  transition: box-shadow 0.3s ease;
}

.ant-card:hover {
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08), 0 2px 8px rgba(0, 0, 0, 0.04);
}

/* 视频hover效果 */
.video-overlay {
  transition: opacity 0.2s ease;
}

.ant-card:hover .video-overlay {
  opacity: 1 !important;
}

/* Loading状态 */
.ant-spin-nested-loading {
  min-height: 200px;
}

/* 深色表格样式 */
.dark-table .ant-table {
  background: transparent !important;
  color: var(--ds-text) !important;
}

.dark-table .ant-table-thead > tr > th {
  background: var(--color-surface-2) !important;
  color: var(--ds-text) !important;
  border-bottom: 1px solid var(--color-border-strong) !important;
  font-weight: 600;
}

.dark-table .ant-table-tbody > tr > td {
  border-bottom: 1px solid var(--color-surface-4) !important;
  background: var(--color-bg) !important;
  color: var(--ds-text) !important;
}

.dark-table .ant-table-tbody > tr:hover > td {
  background: var(--color-surface-2) !important;
}

.dark-table .ant-table-tbody > tr.ant-table-row-selected > td {
  background: rgba(var(--color-primary-rgb), 0.1) !important;
}

/* 表格内文字颜色 */
.dark-table .ant-table-cell {
  color: var(--ds-text) !important;
}

.dark-table .ant-typography {
  color: var(--ds-text) !important;
}

.dark-table .ant-space {
  color: var(--ds-text) !important;
}

/* 分页器样式 */
.dark-table .ant-pagination {
  color: var(--ds-text-muted) !important;
}

.dark-table .ant-pagination-item {
  background: var(--color-surface-2) !important;
  border: 1px solid var(--color-border-strong) !important;
}

.dark-table .ant-pagination-item a {
  color: var(--ds-text) !important;
}

.dark-table .ant-pagination-item-active {
  background: var(--color-primary) !important;
  border-color: var(--color-primary) !important;
}

.dark-table .ant-pagination-item-active a {
  color: var(--ds-text) !important;
}

.dark-table .ant-pagination-prev .ant-pagination-item-link,
.dark-table .ant-pagination-next .ant-pagination-item-link {
  background: var(--color-surface-2) !important;
  border: 1px solid var(--color-border-strong) !important;
  color: var(--ds-text-muted) !important;
}

.dark-table .ant-pagination-disabled .ant-pagination-item-link {
  color: var(--ds-border) !important;
}

.dark-table .ant-pagination-options {
  color: var(--ds-text-muted) !important;
}

.dark-table .ant-select-selector {
  background: var(--color-surface-2) !important;
  border: 1px solid var(--color-border-strong) !important;
  color: var(--ds-text) !important;
}

.dark-table .ant-select-arrow {
  color: var(--ds-text-subtle) !important;
}

.dark-table .ant-select-selection-item {
  color: var(--ds-text) !important;
}

/* 筛选器样式 */
.dark-table .ant-table-filter-trigger {
  color: var(--ds-text-subtle) !important;
}

.dark-table .ant-table-filter-trigger:hover {
  color: var(--ds-text) !important;
}

.dark-table .ant-table-filter-trigger-container-open {
  background: var(--color-surface-2) !important;
}

/* 排序图标 */
.dark-table .ant-table-column-sorter {
  color: var(--ds-text-subtle) !important;
}

.dark-table .ant-table-column-sorter-up.active,
.dark-table .ant-table-column-sorter-down.active {
  color: var(--color-primary) !important;
}

/* 空状态 */
.dark-table .ant-empty-description {
  color: var(--ds-text-subtle) !important;
}

.dark-table .ant-empty-image svg {
  fill: var(--ds-border) !important;
}

/* 深色标签页样式 */
.ant-tabs {
  color: var(--ds-text);
}

.ant-tabs .ant-tabs-tab {
  color: var(--ds-text-muted);
  background: transparent;
  border: none;
}

.ant-tabs .ant-tabs-tab:hover {
  color: var(--ds-text);
}

.ant-tabs .ant-tabs-tab.ant-tabs-tab-active {
  background: var(--color-primary);
  color: var(--ds-text);
  border-radius: 8px 8px 0 0;
}

.ant-tabs .ant-tabs-tab.ant-tabs-tab-active .ant-tabs-tab-btn {
  color: var(--ds-text);
}

.ant-tabs .ant-tabs-ink-bar {
  background: var(--color-primary);
}

.ant-tabs .ant-tabs-nav {
  margin-bottom: 0;
}

.ant-tabs .ant-tabs-nav::before {
  border-bottom: 1px solid var(--ds-border);
}

/* 深色Modal样式 */
.ant-modal-mask {
  background: rgba(0, 0, 0, 0.75) !important;
}

.ant-modal-content {
  background: var(--color-surface-3) !important;
  border: 1px solid var(--color-surface-4) !important;
}

.ant-modal-header {
  background: var(--color-surface-3) !important;
  border-bottom: 1px solid var(--color-surface-4) !important;
}

.ant-modal-title {
  color: var(--ds-text) !important;
}

.ant-modal-body {
  color: var(--ds-text) !important;
}

.ant-modal-footer {
  background: var(--color-surface-3) !important;
  border-top: 1px solid var(--color-surface-4) !important;
}

.ant-modal .ant-modal-close {
  color: var(--ds-text-muted) !important;
}

.ant-modal .ant-modal-close:hover {
  color: var(--ds-text) !important;
}

/* 深色 Confirm 弹窗增强对比度 */
.ant-modal-confirm .ant-modal-confirm-title {
  color: var(--ds-text) !important;
}

.ant-modal-confirm .ant-modal-confirm-content {
  color: var(--ds-text-muted) !important;
}

.ant-modal-confirm .ant-modal-confirm-body .anticon {
  color: var(--color-warning) !important;
}

.ant-modal-confirm .ant-btn-default {
  background: #2b2b2b !important;
  border-color: #3a3a3a !important;
  color: var(--ds-text) !important;
}

.ant-modal-confirm .ant-btn-default:hover {
  background: #383838 !important;
  border-color: #4a4a4a !important;
}

.ant-modal-confirm .ant-btn-dangerous,
.ant-modal-confirm .ant-btn-dangerous.ant-btn-primary {
  background: var(--color-danger) !important;
  border-color: var(--color-danger) !important;
  color: var(--ds-text) !important;
}

.ant-modal-confirm .ant-btn-dangerous:hover,
.ant-modal-confirm .ant-btn-dangerous.ant-btn-primary:hover {
  background: #ff6b6d !important;
  border-color: #ff6b6d !important;
}

/* 深色Input和TextArea样式 */
.ant-input[style*="background: #1a1a2e"],
.ant-input-textarea[style*="background: #1a1a2e"] textarea {
  color: var(--ds-text) !important;
}

.ant-input[style*="background: #1a1a2e"]::placeholder,
.ant-input-textarea[style*="background: #1a1a2e"] textarea::placeholder {
  color: var(--ds-text-subtle) !important;
}

.ant-input[style*="background: #1a1a2e"]:focus,
.ant-input-textarea[style*="background: #1a1a2e"] textarea:focus {
  border-color: var(--color-primary) !important;
  box-shadow: 0 0 0 2px rgba(var(--color-primary-rgb), 0.2) !important;
}

/* 深色上传组件样式 */
.ant-upload-drag[style*="background: #1a1a2e"] {
  background: #1a1a2e !important;
}

.ant-upload-drag[style*="background: #1a1a2e"]:hover {
  border-color: var(--color-primary) !important;
}

.ant-upload-drag-icon {
  margin-bottom: 16px !important;
}

.ant-upload.ant-upload-drag p.ant-upload-text {
  color: var(--ds-text) !important;
  margin-bottom: 4px !important;
}

.ant-upload.ant-upload-drag p.ant-upload-hint {
  color: var(--ds-text-subtle) !important;
}

/* 深色按钮悬停效果 */
.ant-btn[style*="background: transparent"]:hover {
  background: rgba(var(--color-primary-rgb), 0.1) !important;
  border-color: var(--color-primary) !important;
  color: var(--ds-text) !important;
}

.ant-btn[style*="background: var(--color-primary)"]:hover {
  background: #7b8ff5 !important;
  border-color: #7b8ff5 !important;
  box-shadow: 0 4px 12px rgba(var(--color-primary-rgb), 0.4) !important;
}

/* 深色Checkbox样式 */
.ant-checkbox-wrapper {
  color: var(--ds-text);
}

.ant-checkbox-inner {
  background-color: var(--color-surface-4) !important;
  border-color: var(--color-border-strong) !important;
}

.ant-checkbox-checked .ant-checkbox-inner {
  background-color: var(--color-primary) !important;
  border-color: var(--color-primary) !important;
}

.ant-checkbox-wrapper:hover .ant-checkbox-inner {
  border-color: var(--color-primary) !important;
}

/* Swiper 自定义样式 */
.swiper {
  width: 100% !important;
  height: 100% !important;
}

.swiper-slide {
  width: 100% !important;
  display: flex !important;
  justify-content: center !important;
  align-items: center !important;
}

.swiper-slide section {
  width: 100% !important;
}

/* 隐藏默认分页器 */
.swiper-pagination {
  display: none !important;
}

/* Swiper 滚动条优化 */
.swiper-wrapper {
  transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94) !important;
}

/* 深色折叠面板样式 */
.ant-collapse {
  background: transparent !important;
  border: none !important;
}

.ant-collapse > .ant-collapse-item {
  border-bottom: none !important;
}

.ant-collapse-header {
  color: white !important;
  padding: 16px 24px !important;
}

.ant-collapse-content {
  background: transparent !important;
  border-top: none !important;
}

.ant-collapse-content-box {
  padding: 16px 24px !important;
}

.ant-collapse-arrow {
  color: white !important;
}

/* 首页最后一页滚动条样式 */
.swiper-slide section::-webkit-scrollbar {
  width: 6px;
}

.swiper-slide section::-webkit-scrollbar-track {
  background: var(--ds-border);
}

.swiper-slide section::-webkit-scrollbar-thumb {
  background: rgba(var(--color-primary-rgb), 0.5);
  border-radius: 3px;
}

.swiper-slide section::-webkit-scrollbar-thumb:hover {
  background: rgba(var(--color-primary-rgb), 0.7);
}

/* 视频卡片hover效果 */
.play-overlay {
  opacity: 0;
  transition: opacity 0.3s;
}

.ant-card:hover .play-overlay {
  opacity: 1 !important;
}

/* 自定义Tab按钮hover效果 */
.custom-tab-button {
  padding: 12px 32px;
  border-radius: 8px;
  cursor: pointer;
  transition: all 0.3s ease;
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: 16px;
  user-select: none;
}

.custom-tab-button:hover {
  background: rgba(var(--color-primary-rgb), 0.2) !important;
  transform: translateY(-2px);
}

.custom-tab-button.active {
  background: var(--color-primary) !important;
  color: var(--ds-text) !important;
  font-weight: 600;
  box-shadow: 0 4px 12px rgba(var(--color-primary-rgb), 0.4);
}

.custom-tab-button.inactive {
  background: transparent;
  color: var(--ds-text-muted);
  font-weight: 400;
}

.custom-tab-button.inactive:hover {
  color: var(--ds-text);
}

/* 产品Tab按钮样式（浅色主题） */
.product-tab-button {
  padding: 10px 24px;
  border-radius: 8px;
  cursor: pointer;
  transition: all 0.3s ease;
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: 14px;
  user-select: none;
}

.product-tab-button:hover {
  background: rgba(var(--color-primary-rgb), 0.1) !important;
  transform: translateY(-2px);
}

.product-tab-button.active {
  background: var(--color-primary) !important;
  color: var(--ds-text) !important;
  font-weight: 600;
  box-shadow: 0 4px 12px rgba(var(--color-primary-rgb), 0.4);
}

.product-tab-button.inactive {
  background: transparent;
  color: rgba(0, 0, 0, 0.65);
  font-weight: 400;
}

.product-tab-button.inactive:hover {
  color: rgba(0, 0, 0, 0.85);
}

/* 矩阵发布页面深色主题 */
.ant-card-body::-webkit-scrollbar {
  width: 6px;
}

.ant-card-body::-webkit-scrollbar-track {
  background: rgba(42, 42, 42, 0.3);
  border-radius: 3px;
}

.ant-card-body::-webkit-scrollbar-thumb {
  background: var(--ds-border);
  border-radius: 3px;
}

.ant-card-body::-webkit-scrollbar-thumb:hover {
  background: var(--ds-text-subtle);
}

/* 深色Input样式 */
.ant-input[style*="background: var(--color-bg-2)"],
.ant-input[type="datetime-local"][style*="background: var(--color-bg-2)"] {
  color: var(--ds-text) !important;
  color-scheme: dark;
}

.ant-input[style*="background: var(--color-bg-2)"]::placeholder {
  color: var(--ds-text-subtle) !important;
}

.ant-input[style*="background: var(--color-bg-2)"]:focus {
  border-color: var(--color-primary) !important;
  box-shadow: 0 0 0 2px rgba(var(--color-primary-rgb), 0.2) !important;
}

/* 深色Spin加载样式 */
.ant-spin-dot-item {
  background-color: var(--color-primary) !important;
}

/* ============= 全局深色主题样式 ============= */

/* 深色Card样式 */
.ant-card {
  background: var(--color-surface) !important;
  border-color: var(--color-surface-4) !important;
  color: var(--ds-text) !important;
}

.ant-card-head {
  background: var(--color-surface) !important;
  border-bottom-color: var(--color-surface-4) !important;
  color: var(--ds-text) !important;
}

.ant-card-head-title {
  color: var(--ds-text) !important;
}

.ant-card-bordered {
  border: 1px solid var(--color-surface-4) !important;
}

/* 深色Typography样式 */
.ant-typography {
  color: var(--ds-text) !important;
}

.ant-typography-secondary {
  color: var(--ds-text-subtle) !important;
}

/* 深色Dropdown和Menu样式 */
.ant-dropdown {
  background: var(--color-surface-3) !important;
}

.ant-dropdown-menu {
  background: var(--color-surface-3) !important;
  border: 1px solid var(--color-surface-4) !important;
  box-shadow: 0 3px 6px -4px rgba(0, 0, 0, 0.48), 0 6px 16px 0 rgba(0, 0, 0, 0.32), 0 9px 28px 8px rgba(0, 0, 0, 0.2) !important;
}

.ant-dropdown-menu-item,
.ant-dropdown-menu-submenu-title {
  color: var(--ds-text) !important;
}

.ant-dropdown-menu-item:hover,
.ant-dropdown-menu-submenu-title:hover {
  background: var(--ds-border) !important;
}

.ant-dropdown-menu-item-divider {
  background: var(--color-surface-4) !important;
}

.ant-dropdown-menu-title-content a {
  color: var(--ds-text) !important;
}

/* 深色Select样式 */
.ant-select-dropdown {
  background: var(--color-surface-3) !important;
  border: 1px solid var(--color-surface-4) !important;
}

.ant-select-item {
  color: var(--ds-text) !important;
}

.ant-select-item-option-selected {
  background: rgba(var(--color-primary-rgb), 0.2) !important;
}

.ant-select-item-option:hover {
  background: var(--ds-border) !important;
}

/* 深色Cascader样式（省/市级联选择） */
.ant-cascader-dropdown {
  background: var(--color-surface-3) !important;
  border: 1px solid var(--color-surface-4) !important;
}

.ant-cascader-menu {
  background: transparent !important;
  border-right: 1px solid var(--color-surface-4) !important;
}

.ant-cascader-menu:last-child {
  border-right: none !important;
}

.ant-cascader-menu-item {
  color: var(--ds-text) !important;
}

.ant-cascader-menu-item-content {
  color: var(--ds-text) !important;
}

.ant-cascader-menu-item:hover {
  background: var(--ds-border) !important;
}

.ant-cascader-menu-item-active:not(.ant-cascader-menu-item-disabled),
.ant-cascader-menu-item-active:hover:not(.ant-cascader-menu-item-disabled) {
  background: rgba(var(--color-primary-rgb), 0.2) !important;
}

.ant-cascader-menu-item-disabled {
  color: var(--ds-border) !important;
}

.ant-cascader-menu-item-expand-icon,
.ant-cascader-menu-item-loading-icon {
  color: var(--ds-text-subtle) !important;
}

/* 深色DatePicker样式 */
.ant-picker-dropdown {
  background: var(--color-surface-3) !important;
}

.ant-picker-panel-container {
  background: var(--color-surface-3) !important;
  border: 1px solid var(--color-surface-4) !important;
}

.ant-picker-header,
.ant-picker-content th,
.ant-picker-cell {
  color: var(--ds-text) !important;
}

.ant-picker-cell:hover .ant-picker-cell-inner {
  background: var(--ds-border) !important;
}

.ant-picker-cell-selected .ant-picker-cell-inner {
  background: var(--color-primary) !important;
}

.ant-picker-time-panel {
  background: var(--color-surface-3) !important;
}

.ant-picker-time-panel-column {
  background: var(--color-surface-3) !important;
}

.ant-picker-time-panel-column > li .ant-picker-time-panel-cell-inner {
  color: var(--ds-text) !important;
}

.ant-picker-time-panel-cell:hover .ant-picker-time-panel-cell-inner {
  background: var(--ds-border) !important;
}

.ant-picker-time-panel-cell-selected .ant-picker-time-panel-cell-inner {
  background: rgba(var(--color-primary-rgb), 0.2) !important;
  color: var(--ds-text) !important;
}

.ant-picker-time-panel-cell-disabled .ant-picker-time-panel-cell-inner {
  color: var(--ds-text-subtle) !important;
}

.ant-picker-footer {
  border-top: 1px solid var(--color-surface-4) !important;
  background: var(--color-surface-3) !important;
}

.ant-picker-ok .ant-btn {
  background: var(--color-primary) !important;
  border-color: var(--color-primary) !important;
  color: var(--ds-text) !important;
}

/* 深色Badge样式 */
.ant-badge-count {
  background: #ff4d4f !important;
  color: var(--ds-text) !important;
  box-shadow: 0 0 0 1px var(--color-surface) !important;
}

/* 深色Button样式优化 */
.ant-btn-default {
  background: transparent !important;
  border-color: var(--color-surface-4) !important;
  color: var(--ds-text) !important;
}

.ant-btn-default:hover {
  background: var(--ds-border) !important;
  border-color: var(--color-primary) !important;
  color: var(--ds-text) !important;
}

/* 深色Tag样式 */
.ant-tag {
  border-color: var(--color-surface-4) !important;
}

/* 深色Divider样式 */
.ant-divider {
  border-color: var(--color-surface-4) !important;
}

/* 深色Statistic样式 */
.ant-statistic-title {
  color: var(--ds-text-muted) !important;
}

.ant-statistic-content {
  color: var(--ds-text) !important;
}

/* 深色Alert样式 */
.ant-alert {
  background: rgba(var(--color-primary-rgb), 0.1) !important;
  border: 1px solid rgba(var(--color-primary-rgb), 0.3) !important;
}

.ant-alert-message {
  color: var(--ds-text) !important;
}

.ant-alert-description {
  color: var(--ds-text-muted) !important;
}

.ant-alert-info {
  background: rgba(var(--color-primary-rgb), 0.1) !important;
  border-color: rgba(var(--color-primary-rgb), 0.3) !important;
}

.ant-alert-warning {
  background: rgba(250, 173, 20, 0.1) !important;
  border-color: rgba(250, 173, 20, 0.3) !important;
}

.ant-alert-success {
  background: rgba(82, 196, 26, 0.1) !important;
  border-color: rgba(82, 196, 26, 0.3) !important;
}

.ant-alert-error {
  background: rgba(255, 77, 79, 0.1) !important;
  border-color: rgba(255, 77, 79, 0.3) !important;
}

/* 深色Empty样式 */
.ant-empty-description {
  color: var(--ds-text-subtle) !important;
}

.ant-empty-img-simple-path {
  fill: var(--ds-border) !important;
}

/* 深色Form样式 */
.ant-form-item-label > label {
  color: var(--ds-text) !important;
}

.ant-form-item-explain-error {
  color: #ff4d4f !important;
}

/* 深色Image样式 */
.ant-image-preview-wrap {
  background: rgba(0, 0, 0, 0.85) !important;
}

.ant-image-preview-operations {
  background: rgba(0, 0, 0, 0.1) !important;
}

/* 深色Tooltip样式 */
.ant-tooltip-inner {
  background: rgba(0, 0, 0, 0.85) !important;
  color: var(--ds-text) !important;
}

.ant-tooltip-arrow-content {
  background: rgba(0, 0, 0, 0.85) !important;
}

/* 深色Popover样式 */
.ant-popover-inner {
  background: var(--color-surface-3) !important;
  border: 1px solid var(--color-surface-4) !important;
}

.ant-popover-title {
  color: var(--ds-text) !important;
  border-bottom-color: var(--color-surface-4) !important;
}

.ant-popover-inner-content {
  color: var(--ds-text) !important;
}

/* 日志筛选行换行 */
.log-filter-row {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  align-items: center;
  margin-bottom: 8px;
}

/* 日志详情抽屉深色样式 */
.admin-logs-drawer .ant-drawer-title {
  color: var(--ds-text) !important;
}

.admin-logs-drawer .ant-drawer-close {
  color: var(--ds-text-muted) !important;
}

.admin-logs-drawer .ant-descriptions-item-label {
  color: var(--ds-text-muted) !important;
}

.admin-logs-drawer .ant-descriptions-item-content {
  color: var(--ds-text) !important;
}

.admin-logs-drawer .ant-divider {
  border-color: var(--ds-border) !important;
}

.admin-logs-drawer .ant-btn-link {
  color: rgba(var(--color-primary-rgb), 0.95) !important;
}

.admin-logs-drawer .ant-btn-link[disabled] {
  color: var(--ds-text-subtle) !important;
}

/* 深色Progress样式 */
.ant-progress-text {
  color: var(--ds-text) !important;
}

/* 深色Steps样式 */
.ant-steps-item-title {
  color: var(--ds-text) !important;
}

.ant-steps-item-description {
  color: var(--ds-text-muted) !important;
}

.ant-steps-item-wait .ant-steps-item-icon {
  background: var(--color-surface) !important;
  border-color: var(--color-surface-4) !important;
}

.ant-steps-item-wait .ant-steps-item-icon > .ant-steps-icon {
  color: var(--ds-text-subtle) !important;
}

/* 深色Input全局样式 */
.ant-input,
.ant-input-affix-wrapper,
.ant-input-number,
.ant-picker {
  background: var(--color-surface) !important;
  border-color: var(--color-surface-4) !important;
  color: var(--ds-text) !important;
}

.ant-picker .ant-picker-input > input {
  color: var(--ds-text) !important;
}

.ant-picker .ant-picker-input > input::placeholder {
  color: var(--ds-text-subtle) !important;
}

.ant-picker .ant-picker-range-separator,
.ant-picker .ant-picker-suffix,
.ant-picker .ant-picker-clear {
  color: var(--ds-text-subtle) !important;
}

.ant-input::placeholder,
.ant-input-affix-wrapper input::placeholder {
  color: var(--ds-text-subtle) !important;
}

.ant-input:hover,
.ant-input-affix-wrapper:hover,
.ant-input-number:hover,
.ant-picker:hover {
  border-color: var(--color-primary) !important;
}

.ant-input:focus,
.ant-input-affix-wrapper:focus,
.ant-input-affix-wrapper-focused,
.ant-input-number:focus,
.ant-picker:focus,
.ant-picker-focused {
  border-color: var(--color-primary) !important;
  box-shadow: 0 0 0 2px rgba(var(--color-primary-rgb), 0.2) !important;
}

.ant-input-prefix,
.ant-input-suffix {
  color: var(--ds-text-subtle) !important;
}

.ant-input-number-input {
  color: var(--color-text) !important;
  background: transparent !important;
}

.ant-input-number-input::placeholder {
  color: var(--ds-text-subtle) !important;
}

.ant-input-number-disabled {
  background: var(--color-surface-3) !important;
  border-color: var(--color-surface-4) !important;
}

.ant-input-number-disabled .ant-input-number-input {
  color: var(--color-text-dim) !important;
}

/* 深色TextArea样式 */
.ant-input-textarea {
  background: var(--color-surface) !important;
  border-color: var(--color-surface-4) !important;
}

.ant-input-textarea textarea {
  background: transparent !important;
  color: var(--ds-text) !important;
}

.ant-input-textarea textarea::placeholder {
  color: var(--ds-text-subtle) !important;
}

.ant-input-textarea:hover {
  border-color: var(--color-primary) !important;
}

.ant-input-textarea-focused {
  border-color: var(--color-primary) !important;
  box-shadow: 0 0 0 2px rgba(var(--color-primary-rgb), 0.2) !important;
}

.ant-input-textarea-show-count::after {
  color: var(--ds-text-subtle) !important;
}

/* 深色Select全局样式 */
.ant-select:not(.ant-select-customize-input) .ant-select-selector {
  background: var(--color-surface) !important;
  border-color: var(--color-surface-4) !important;
  color: var(--ds-text) !important;
}

.ant-select-arrow,
.ant-select-clear {
  color: var(--ds-text-subtle) !important;
}

.ant-select:hover .ant-select-selector {
  border-color: var(--color-primary) !important;
}

.ant-select-focused .ant-select-selector {
  border-color: var(--color-primary) !important;
  box-shadow: 0 0 0 2px rgba(var(--color-primary-rgb), 0.2) !important;
}

.ant-select-selection-placeholder {
  color: var(--ds-text-subtle) !important;
}

.ant-select-selection-item {
  color: var(--ds-text) !important;
}

.ant-select-selection-search-input {
  color: var(--ds-text) !important;
}

/* 深色Switch样式 */
.ant-switch {
  background: var(--ds-border) !important;
}

.ant-switch-checked {
  background: var(--color-primary) !important;
}

.ant-switch:focus,
.ant-switch:focus-visible {
  box-shadow: 0 0 0 2px rgba(var(--color-primary-rgb), 0.2) !important;
}

/* 深色Radio样式 */
.ant-radio-wrapper {
  color: var(--ds-text) !important;
}

.ant-radio-inner {
  background: var(--color-surface) !important;
  border-color: var(--color-surface-4) !important;
}

.ant-radio-checked .ant-radio-inner {
  background: var(--color-primary) !important;
  border-color: var(--color-primary) !important;
}

.ant-radio:hover .ant-radio-inner {
  border-color: var(--color-primary) !important;
}

/* 深色Slider样式 */
.ant-slider-rail {
  background: var(--color-surface-4) !important;
}

.ant-slider-track {
  background: var(--color-primary) !important;
}

.ant-slider-handle {
  border-color: var(--color-primary) !important;
  background: #fff !important;
}

/* 深色Upload样式 */
.ant-upload.ant-upload-drag {
  background: var(--color-surface) !important;
  border-color: var(--color-surface-4) !important;
}

.ant-upload.ant-upload-drag:hover {
  border-color: var(--color-primary) !important;
}

.ant-upload.ant-upload-drag p.ant-upload-drag-icon .anticon {
  color: var(--color-primary) !important;
}

.ant-upload.ant-upload-drag p.ant-upload-text {
  color: var(--ds-text) !important;
}

.ant-upload.ant-upload-drag p.ant-upload-hint {
  color: var(--ds-text-subtle) !important;
}

.upload-video-card .ant-upload.ant-upload-drag,
.upload-doc-card .ant-upload.ant-upload-drag,
.upload-video-card .ant-upload.ant-upload-drag .ant-upload-btn,
.upload-doc-card .ant-upload.ant-upload-drag .ant-upload-btn {
  background: transparent !important;
  border: none !important;
}

.ant-upload-list-item {
  background: var(--color-surface) !important;
  border: 1px solid var(--color-surface-4) !important;
}

.ant-upload-list-item-name {
  color: var(--ds-text) !important;
}

.ant-upload-list-item:hover {
  background: var(--ds-bg-alt) !important;
}

/* ============= 侧边栏导航菜单对齐样式 ============= */

/* 侧边栏菜单整体样式 */
.ant-layout-sider .ant-menu {
  padding: 0 12px !important;
}

/* 一级菜单项（如首页）样式 */
.ant-layout-sider .ant-menu > .ant-menu-item {
  margin: 4px 0 !important;
  padding-left: 16px !important;
  border-radius: 8px !important;
  height: 44px !important;
  line-height: 44px !important;
}

/* 菜单分组标题样式 */
.ant-layout-sider .ant-menu-item-group-title {
  padding-left: 16px !important;
  padding-right: 16px !important;
  font-size: 12px !important;
  color: var(--ds-text-subtle) !important;
  font-weight: 500 !important;
  letter-spacing: 0.5px !important;
  margin-top: 16px !important;
  margin-bottom: 4px !important;
}

/* 分组内的子菜单项样式 */
.ant-layout-sider .ant-menu-item-group-list .ant-menu-item {
  margin: 2px 0 !important;
  padding-left: 16px !important;
  border-radius: 8px !important;
  height: 44px !important;
  line-height: 44px !important;
}

/* 菜单项图标样式 */
.ant-layout-sider .ant-menu-item .anticon {
  font-size: 16px !important;
  margin-right: 12px !important;
  width: 20px !important;
  text-align: center !important;
}

/* 选中状态的菜单项 */
.ant-layout-sider .ant-menu-item-selected {
  background: linear-gradient(135deg, var(--color-primary) 0%, var(--color-primary-deep) 100%) !important;
}

.ant-layout-sider .ant-menu-item-selected::after {
  display: none !important;
}

/* 菜单项悬停效果 */
.ant-layout-sider .ant-menu-item:not(.ant-menu-item-selected):hover {
  background: rgba(var(--color-primary-rgb), 0.15) !important;
}

/* 菜单项文字颜色 */
.ant-layout-sider .ant-menu-item {
  color: var(--ds-text) !important;
}

.ant-layout-sider .ant-menu-item a {
  color: inherit !important;
}

/* 分组展开/收起图标对齐 */
.ant-layout-sider .ant-menu-item-group {
  margin-bottom: 8px !important;
}

/* ============= Payment Pages (Gateway / Success) ============= */

.payment-page {
  min-height: calc(100vh - 64px);
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 48px 24px;
  background:
    radial-gradient(900px circle at 50% 15%, rgba(var(--color-primary-rgb), 0.22) 0%, transparent 60%),
    radial-gradient(700px circle at 85% 80%, rgba(var(--color-primary-accent-rgb), 0.18) 0%, transparent 55%),
    linear-gradient(180deg, var(--color-bg) 0%, var(--color-bg-soft) 100%);
}

.payment-panel.ant-card {
  width: 100%;
  max-width: 720px;
  background: rgba(20, 20, 20, 0.78) !important;
  border: 1px solid var(--ds-border) !important;
  border-radius: 18px !important;
  box-shadow: 0 18px 70px rgba(0, 0, 0, 0.55) !important;
  backdrop-filter: blur(12px);
}

.payment-panel > .ant-card-body {
  padding: 34px 32px !important;
}

.payment-section {
  padding: 16px 16px;
  border-radius: 14px;
  border: 1px solid var(--ds-border);
  background: var(--ds-bg-alt);
}

.payment-success-badge,
.payment-warning-badge {
  width: 76px;
  height: 76px;
  border-radius: 999px;
  display: flex;
  align-items: center;
  justify-content: center;
}

.payment-success-badge {
  background: rgba(34, 197, 94, 0.12);
  border: 1px solid rgba(34, 197, 94, 0.35);
  box-shadow: 0 0 0 8px rgba(34, 197, 94, 0.07), 0 18px 55px rgba(0, 0, 0, 0.55);
}

.payment-warning-badge {
  background: rgba(245, 158, 11, 0.12);
  border: 1px solid rgba(245, 158, 11, 0.35);
  box-shadow: 0 0 0 8px rgba(245, 158, 11, 0.07), 0 18px 55px rgba(0, 0, 0, 0.55);
}

.payment-benefit-tag.ant-tag {
  margin-inline-end: 0 !important;
  border-radius: 999px !important;
  padding: 3px 10px !important;
  background: rgba(var(--color-primary-accent-rgb), 0.14) !important;
  border: 1px solid rgba(var(--color-primary-accent-rgb), 0.35) !important;
  color: var(--ds-text) !important;
}

.payment-primary-btn.ant-btn-primary {
  height: 44px !important;
  padding-inline: 18px !important;
  border-radius: 12px !important;
  border: none !important;
  font-weight: 700 !important;
  background: linear-gradient(135deg, var(--color-primary), var(--color-primary-accent)) !important;
  box-shadow: 0 10px 30px rgba(var(--color-primary-accent-rgb), 0.22);
}

.payment-primary-btn.ant-btn-primary:hover {
  filter: brightness(1.05);
}

.payment-secondary-btn.ant-btn-default {
  height: 44px !important;
  padding-inline: 18px !important;
  border-radius: 12px !important;
  font-weight: 700 !important;
  background: var(--ds-bg-alt) !important;
  border-color: var(--ds-border) !important;
  color: var(--ds-text) !important;
}

.payment-secondary-btn.ant-btn-default:hover {
  background: var(--ds-border) !important;
  border-color: rgba(var(--color-primary-accent-rgb), 0.55) !important;
}

.payment-qr-wrap {
  padding: 12px;
  border-radius: 14px;
  background: var(--ds-border);
  border: 1px solid var(--ds-border);
}

@media (max-width: 480px) {
  .payment-page {
    padding: 32px 16px;
  }

  .payment-panel > .ant-card-body {
    padding: 26px 20px !important;
  }

  .payment-success-badge,
  .payment-warning-badge {
    width: 68px;
    height: 68px;
  }
}

/* ===== Video Creation Page — 青蓝色系覆盖 ===== */
.vc-page {
  /* P2: 切到 ds-light token 体系（原硬编码 navy 已迁出） */
  --color-primary: #4da6ff;
  --color-primary-rgb: 77, 166, 255;
  --color-primary-deep: #0078d4;
  --color-primary-deep-rgb: 0, 120, 212;
  --color-primary-accent: #7bd0ff;
  --color-primary-accent-rgb: 123, 208, 255;
  --color-bg: var(--ds-bg);
  --color-surface: var(--ds-surface);
  --color-surface-2: var(--ds-surface-2);
  --color-surface-3: var(--ds-bg-alt);
  --color-surface-4: var(--ds-bg-deep);
  background: var(--ds-bg);
}

/* ===== UI Revamp pages — design.md 蓝色系覆盖 ===== */
.dp-revamp {
  /* azure brand 引用层（保留：antd-overrides + video_*/comic_* 老页面引用） */
  --color-primary: #4da6ff;
  --color-primary-rgb: 77, 166, 255;
  --color-primary-deep: #0078d4;
  --color-primary-deep-rgb: 0, 120, 212;
  --color-primary-accent: #4da6ff;
  --color-primary-accent-rgb: 77, 166, 255;
  --color-primary-tint: #7bd0ff;
  /* P2 Task 8.2: 删除 --color-bg/--color-surface* 5 条暗色赋值；
     残留引用方在白底场景下回退到 ds-bg 白（按 Phase 1.2 dp-revamp-deps.md 决策） */
  --color-bg: var(--ds-bg);
  --color-surface: var(--ds-surface);
  --color-surface-2: var(--ds-surface-2);
  --color-surface-3: var(--ds-bg-alt);
  --color-surface-4: var(--ds-bg-deep);
}

/* .dp-revamp .ant-btn-primary 反制规则已迁移到 src/styles/antd-overrides.css
   并对齐 design.md ink-on-ink 主 CTA 规范（原 azure 渐变与 design.md 不符） */

/* ===== Video Creation Page Styles ===== */

/* 玻璃拟态卡片 */
.vc-glass {
  background: var(--ds-bg-alt);
  backdrop-filter: blur(20px);
  border: 1px solid rgba(var(--color-primary-rgb), 0.1);
  border-top-color: rgba(var(--color-primary-rgb), 0.18);
  border-radius: 12px;
  transition: all 0.5s cubic-bezier(0.4, 0, 0.2, 1);
}
.vc-glass:hover {
  background: var(--ds-surface-2);
}

/* 模板卡片 */
.vc-tpl-card {
  cursor: pointer;
  padding: 16px;
  height: 100%;
}
.vc-tpl-card:hover {
  transform: translateY(-4px);
}
.vc-tpl-card--active {
  border-color: transparent !important;
  box-shadow: 0 0 0 2px var(--color-primary), 0 8px 32px rgba(var(--color-primary-rgb), 0.18);
}

/* 16:9 缩略图 */
.vc-tpl-thumb {
  position: relative;
  aspect-ratio: 16 / 9;
  background: var(--ds-bg-alt);
  border-radius: 8px;
  overflow: hidden;
  margin-bottom: 16px;
}
.vc-tpl-thumb__play {
  position: absolute;
  inset: 0;
  display: flex;
  align-items: center;
  justify-content: center;
}
.vc-tpl-thumb__play-btn {
  width: 48px;
  height: 48px;
  background: var(--ds-border);
  backdrop-filter: blur(12px);
  border: 1px solid var(--ds-border);
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  opacity: 0.7;
  transition: all 0.3s;
}
.vc-tpl-card:hover .vc-tpl-thumb__play-btn {
  opacity: 1;
  transform: scale(1.1);
}

/* 标签徽章 */
.vc-tag {
  font-size: 10px;
  padding: 2px 10px;
  border-radius: 999px;
  /* P2 视觉收尾：azure chip → ink-on-light（spec §5 azure 仅作 hover/highlight 稀疏） */
  background: var(--ds-bg-alt);
  color: var(--ds-text-muted);
  border: 1px solid var(--ds-border);
  white-space: nowrap;
  line-height: 18px;
}

/* Hero */
.vc-hero {
  position: relative;
  margin-bottom: 48px;
}
.vc-hero::before {
  content: '';
  position: absolute;
  top: -96px;
  left: -80px;
  width: 384px;
  height: 384px;
  background: rgba(var(--color-primary-rgb), 0.06);
  filter: blur(120px);
  border-radius: 50%;
  pointer-events: none;
}
.vc-hero__title {
  font-size: 40px !important;
  font-weight: 800 !important;
  line-height: 1.2 !important;
  letter-spacing: -0.02em;
  color: var(--ds-text) !important;
  margin-bottom: 16px !important;
}
.vc-hero__sub {
  font-size: 18px;
  color: var(--ds-text-subtle);
  max-width: 640px;
}

/* 区域标题 */
.vc-section-head {
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  margin-bottom: 24px;
}
.vc-section-title {
  font-size: 20px !important;
  font-weight: 700 !important;
  color: var(--ds-text) !important;
  margin: 0 0 4px 0 !important;
}
.vc-section-sub {
  font-size: 12px;
  color: var(--ds-text-subtle);
}

/* 竖向步骤时间线 */
.vc-timeline {
  position: relative;
  display: flex;
  flex-direction: column;
  gap: 0;
}
.vc-timeline-step {
  display: grid;
  grid-template-columns: 80px 1fr;
}
.vc-timeline-step__rail {
  display: flex;
  flex-direction: column;
  align-items: center;
  position: relative;
}
.vc-timeline-step__num {
  font-size: 28px;
  font-weight: 800;
  color: var(--ds-border);
  line-height: 1;
  transition: color 0.3s;
  position: relative;
  z-index: 1;
}
.vc-timeline-step--active .vc-timeline-step__num,
.vc-timeline-step--done .vc-timeline-step__num {
  /* P2 视觉收尾：active step 数字 azure → ink（spec §5 azure 稀疏） */
  color: var(--ds-text);
}
.vc-timeline-step__line {
  flex: 1 1 0;
  width: 2px;
  background: var(--ds-border);
  margin: 12px 0 0;
  min-height: 24px;
}
.vc-timeline-step--done .vc-timeline-step__line,
.vc-timeline-step--active .vc-timeline-step__line {
  background: var(--color-primary);
  opacity: 0.3;
}
.vc-timeline-step:last-child .vc-timeline-step__line {
  min-height: 48px;
}
.vc-timeline-step__content {
  padding-bottom: 32px;
}
/* 让 Ant Spin 包裹器不撑高 */
.vc-timeline-step__content .ant-spin-nested-loading,
.vc-timeline-step__content .ant-spin-container {
  display: block !important;
}
.vc-timeline-step__title {
  font-size: 20px;
  font-weight: 700;
  color: var(--ds-border);
  margin-bottom: 4px;
  transition: color 0.3s;
}
.vc-timeline-step--active .vc-timeline-step__title,
.vc-timeline-step--done .vc-timeline-step__title {
  color: var(--ds-text);
}
.vc-timeline-step__desc {
  font-size: 14px;
  color: var(--ds-text-subtle);
  margin-bottom: 20px;
  line-height: 1.5;
}

/* Bento 编辑器面板 */
.vc-editor-outer {
  background: var(--color-surface-2, var(--ds-surface-2));
  border: 1px solid var(--ds-border);
  border-radius: 16px;
  padding: 4px;
}
.vc-editor-inner {
  background: rgba(7, 13, 31, 0.9);
  border: 1px solid rgba(var(--color-primary-rgb), 0.06);
  border-radius: 14px;
  padding: 24px;
  height: 100%;
}
.vc-editor-inner .ant-input {
  background: rgba(var(--color-primary-rgb), 0.03) !important;
  border: none !important;
  border-radius: 12px !important;
  color: var(--ds-text) !important;
  padding: 16px !important;
  font-size: 14px !important;
  line-height: 1.7 !important;
  resize: none;
}
.vc-editor-inner .ant-input:focus {
  box-shadow: 0 0 0 1px rgba(var(--color-primary-rgb), 0.3) !important;
}
.vc-editor-inner .ant-input::placeholder {
  color: var(--ds-border) !important;
}

/* 产品面板 */
.vc-product-panel {
  background: var(--color-surface-2, var(--ds-surface-2));
  border-radius: 16px;
  padding: 24px;
  height: 100%;
  display: flex;
  flex-direction: column;
}

/* 底部操作栏 */
.vc-action-bar {
  background: var(--ds-surface-2);
  backdrop-filter: blur(24px);
  border: 1px solid var(--ds-border);
  border-radius: 16px;
  box-shadow: 0 -8px 48px rgba(0, 0, 0, 0.4);
  padding: 16px 32px;
  display: flex;
  align-items: center;
  justify-content: space-between;
}
.vc-action-bar__meta {
  display: flex;
  align-items: center;
  gap: 24px;
}
.vc-action-bar__meta-item {
  display: flex;
  flex-direction: column;
}
.vc-action-bar__meta-label {
  font-size: 10px;
  color: var(--ds-text-subtle);
  font-weight: 700;
  text-transform: uppercase;
  margin-bottom: 2px;
  letter-spacing: 0.05em;
}
.vc-action-bar__meta-value {
  font-size: 14px;
  color: var(--ds-text);
  font-weight: 700;
}
.vc-action-bar__divider {
  width: 1px;
  height: 32px;
  background: var(--ds-border);
}

/* CTA 按钮 */
.vc-cta-btn.ant-btn {
  height: 48px !important;
  padding: 0 40px !important;
  font-size: 15px !important;
  font-weight: 800 !important;
  border-radius: 12px !important;
  border: none !important;
  display: flex !important;
  align-items: center !important;
  gap: 8px !important;
}
.vc-cta-btn--ready.ant-btn {
  /* P2 视觉收尾：spec §5 主 CTA = ink-on-ink */
  background: var(--ds-text) !important;
  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.15) !important;
  color: var(--ds-bg) !important;
}
.vc-cta-btn--disabled.ant-btn {
  background: var(--ds-border) !important;
  color: var(--ds-text-subtle) !important;
}

/* 分镜场景行 */
.storyboard-scene {
  border: 1px solid var(--ds-border);
  border-radius: 14px;
  padding: 16px;
  background: rgba(12, 12, 24, 0.72);
  transition: border-color 0.3s;
}
.storyboard-scene:hover {
  border-color: rgba(var(--color-primary-rgb), 0.2);
}

/* 分镜缩略图 */
.storyboard-thumb {
  border-radius: 10px;
  overflow: hidden;
  transition: transform 0.3s;
}
.storyboard-scene:hover .storyboard-thumb {
  transform: scale(1.05);
}

/* 分镜间插入按钮 — hover 显示 */
.sb-insert-zone:hover .sb-insert-btn {
  opacity: 1 !important;
}
.sb-insert-btn:hover {
  background: var(--color-primary) !important;
  color: var(--ds-text) !important;
  border-color: var(--color-primary) !important;
}

/* 提示条 */
.vc-hint-bar {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 12px 16px;
  background: rgba(var(--color-primary-rgb), 0.05);
  border: 1px solid rgba(var(--color-primary-rgb), 0.1);
  border-radius: 12px;
  margin-top: 20px;
  font-size: 12px;
  color: var(--ds-text-subtle);
}

/* P2 视觉收尾：vc-page 内 antd primary button → ink-on-ink（spec §5 azure 稀疏） */
.vc-page .ant-btn-primary {
  background: var(--ds-text) !important;
  border-color: var(--ds-text) !important;
  color: var(--ds-bg) !important;
}
.vc-page .ant-btn-primary:hover {
  background: var(--ds-text-muted) !important;
  border-color: var(--ds-text-muted) !important;
  color: var(--ds-bg) !important;
}

/* 环境光晕 — 固定装饰 */
.vc-ambient {
  position: fixed;
  border-radius: 50%;
  pointer-events: none;
  z-index: -1;
}
.vc-ambient--tr {
  top: 25%;
  right: -96px;
  width: 400px;
  height: 400px;
  background: rgba(var(--color-primary-rgb), 0.04);
  filter: blur(150px);
}
.vc-ambient--bl {
  bottom: 25%;
  left: -96px;
  width: 300px;
  height: 300px;
  background: rgba(var(--color-primary-deep-rgb), 0.04);
  filter: blur(120px);
}

/* 文档详情页 - 覆盖全局深色 Input/TextArea 背景 */
.doc-detail-page .ant-input,
.doc-detail-page .ant-input-affix-wrapper {
  background: var(--ds-bg-alt) !important;
  border-color: var(--ds-border) !important;
}
.doc-detail-page .ant-input-textarea {
  background: var(--ds-bg-alt) !important;
  border-color: var(--ds-border) !important;
}
.doc-detail-page .ant-input-textarea textarea {
  background: transparent !important;
}

/* 文档详情页 - Markdown 预览样式 */
.doc-markdown-preview h1,
.doc-markdown-preview h2,
.doc-markdown-preview h3,
.doc-markdown-preview h4,
.doc-markdown-preview h5,
.doc-markdown-preview h6 {
  color: var(--ds-text);
  margin-top: 1.4em;
  margin-bottom: 0.6em;
  font-weight: 700;
  line-height: 1.4;
}
.doc-markdown-preview h1 { font-size: 28px; }
.doc-markdown-preview h2 { font-size: 22px; }
.doc-markdown-preview h3 { font-size: 18px; }
.doc-markdown-preview h4 { font-size: 16px; }
.doc-markdown-preview p {
  margin-bottom: 0.8em;
  color: var(--ds-text);
}
.doc-markdown-preview ul,
.doc-markdown-preview ol {
  padding-left: 1.5em;
  margin-bottom: 0.8em;
}
.doc-markdown-preview li {
  margin-bottom: 0.3em;
  color: var(--ds-text);
}
.doc-markdown-preview strong {
  color: var(--ds-text);
  font-weight: 700;
}
.doc-markdown-preview blockquote {
  border-left: 3px solid rgba(77, 166, 255, 0.4);
  padding-left: 12px;
  margin: 0.8em 0;
  color: var(--ds-text-muted);
}
.doc-markdown-preview code {
  background: var(--ds-border);
  padding: 2px 6px;
  border-radius: 4px;
  font-size: 13px;
}
.doc-markdown-preview pre {
  background: var(--ds-bg-alt);
  padding: 12px 16px;
  border-radius: 8px;
  overflow-x: auto;
  margin-bottom: 0.8em;
}
.doc-markdown-preview pre code {
  background: none;
  padding: 0;
}
.doc-markdown-preview table {
  width: 100%;
  border-collapse: collapse;
  margin-bottom: 0.8em;
}
.doc-markdown-preview th,
.doc-markdown-preview td {
  border: 1px solid var(--ds-border);
  padding: 8px 12px;
  text-align: left;
}
.doc-markdown-preview th {
  background: var(--ds-bg-alt);
  font-weight: 700;
}
.doc-markdown-preview hr {
  border: none;
  border-top: 1px solid var(--ds-border);
  margin: 1.2em 0;
}

/* MDEditor 编辑模式 — 隐藏工具栏，只保留渲染预览区域 */
.doc-md-editor-clean .w-md-editor {
  background: transparent !important;
  border: none !important;
  box-shadow: none !important;
}
.doc-md-editor-clean .w-md-editor-toolbar {
  display: none !important;
}
.doc-md-editor-clean .w-md-editor-preview {
  padding: 24px 28px !important;
  background: transparent !important;
}
.doc-md-editor-clean .wmde-markdown {
  background: transparent !important;
  color: var(--ds-text) !important;
  font-size: 14px !important;
  line-height: 1.8 !important;
}
.doc-md-editor-clean .wmde-markdown h1,
.doc-md-editor-clean .wmde-markdown h2,
.doc-md-editor-clean .wmde-markdown h3,
.doc-md-editor-clean .wmde-markdown h4 {
  color: var(--ds-text) !important;
  border-bottom: none !important;
}
.doc-md-editor-clean .wmde-markdown strong {
  color: var(--ds-text) !important;
}
.doc-md-editor-clean .wmde-markdown li {
  color: var(--ds-text) !important;
}
.doc-md-editor-clean .wmde-markdown blockquote {
  border-left-color: rgba(77, 166, 255, 0.4) !important;
  color: var(--ds-text-muted) !important;
}
.doc-md-editor-clean .wmde-markdown code {
  background: var(--ds-border) !important;
}
.doc-md-editor-clean .wmde-markdown pre {
  background: var(--ds-bg-alt) !important;
}

/* Light scrollbar — v1 白底配套 */
.light-scrollbar::-webkit-scrollbar {
  width: 6px;
}
.light-scrollbar::-webkit-scrollbar-track {
  background: transparent;
}
.light-scrollbar::-webkit-scrollbar-thumb {
  background: var(--ds-border-strong);
  border-radius: 3px;
}
.light-scrollbar::-webkit-scrollbar-thumb:hover {
  background: var(--ds-text-subtle);
}
/* Global design tokens — v1 system (2026-05-06)
   Source of truth: docs/design/design.md
   Scope: :root global, 所有 console + 静态页共用
   命名约定：--ds-* 前缀（design system），与 --m-*（marketing legacy）/ --ant-* 解耦 */

:root {
  /* ===== Surfaces ===== */
  --ds-bg: #ffffff;
  --ds-bg-alt: #f5f5f4;
  --ds-bg-deep: #e7e5e4;
  --ds-surface: #ffffff;

  /* ===== Text ===== */
  --ds-text: #18181b;
  --ds-text-muted: #6b7280;
  --ds-text-subtle: #a1a1aa;
  --ds-text-on-accent: #ffffff;
  --ds-text-on-ink: #ffffff;

  /* ===== Brand accent (single Microsoft Azure blue) ===== */
  --ds-accent: #4da6ff;
  --ds-accent-deep: #0078d4;
  --ds-accent-bg: #f2f9ff;
  --ds-accent-text: #097fe8;

  /* ===== Borders ===== */
  --ds-border: rgba(24, 24, 27, 0.08);
  --ds-border-strong: rgba(24, 24, 27, 0.16);

  /* ===== Status (matches design.md ops/admin palette) ===== */
  --ds-success: #22c55e;
  --ds-warning: #f59e0b;
  --ds-danger: #ef4444;

  /* ===== Radii (5 档 only: 8/10/14/18/pill) ===== */
  --ds-radius-sm: 8px;
  --ds-radius-md: 10px;
  --ds-radius-lg: 14px;
  --ds-radius-xl: 18px;
  --ds-radius-pill: 999px;

  /* ===== Spacing (与 marketing-tokens.css 同步) ===== */
  --ds-space-1: 4px;
  --ds-space-2: 8px;
  --ds-space-3: 12px;
  --ds-space-4: 16px;
  --ds-space-5: 24px;
  --ds-space-6: 32px;
  --ds-space-7: 48px;
  --ds-space-8: 64px;
  --ds-space-9: 96px;

  /* ===== Layout / fluid rhythm ===== */
  --ds-pad-x: clamp(28px, 4vw, 64px);
  --ds-section-y: clamp(72px, 9vw, 128px);
  --ds-header-height: 64px;        /* console header（首页 marketing 是 80px，这里是 console 紧凑） */
  --ds-sidebar-width: 256px;

  /* ===== Type ===== */
  --ds-font: "Geist", "Noto Sans SC", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
  --ds-font-mono: "Geist Mono", ui-monospace, "SF Mono", Menlo, monospace;

  /* ===== Shadows (only on CTA hover / modal — flat at-rest) ===== */
  --ds-shadow-cta-primary: 0 14px 28px -12px rgba(24, 24, 27, 0.55);
  --ds-shadow-cta-nav: 0 8px 22px -8px rgba(24, 24, 27, 0.45);
  --ds-shadow-deep: 0 24px 48px -24px rgba(24, 24, 27, 0.20);

  /* ===== Focus ring (a11y) ===== */
  --ds-focus-ring: 0 0 0 3px rgba(77, 166, 255, 0.18);
}
/* Marketing surface tokens — v1 redesign (2026-05-04)
   Source of truth: docs/design/design.md
   Scope: pages/components rendered with className="marketing-scope" only.
   Product-internal pages keep using design.md sections 1-8 (deep navy). */

.marketing-scope {
  /* ===== Surfaces (v1) ===== */
  --m-bg: #ffffff;
  --m-bg-alt: #f5f5f4;
  --m-bg-deep: #e7e5e4;
  --m-surface: #ffffff;

  /* ===== Text (v1) ===== */
  --m-text: #18181b;
  --m-text-muted: #6b7280;
  --m-text-subtle: #a1a1aa;
  --m-text-faint: #a39e98;            /* legacy compat */
  --m-text-on-accent: #ffffff;
  --m-text-on-ink: #ffffff;
  --m-text-on-dark: rgba(255, 255, 255, 0.7); /* legacy compat */

  /* ===== Brand accent (single Microsoft Azure blue) ===== */
  --m-accent: #4da6ff;
  --m-accent-deep: #0078d4;
  --m-accent-bg: #f2f9ff;
  --m-accent-text: #097fe8;
  --m-pricing-highlight-bg: var(--m-text);   /* v1: highlighted plan = full ink */

  /* ===== Borders / rules (v1) ===== */
  --m-border: rgba(24, 24, 27, 0.08);
  --m-border-strong: rgba(24, 24, 27, 0.16);
  --m-header-bg: rgba(255, 255, 255, 0.92);
  --m-hero-fade: linear-gradient(180deg, transparent 0%, rgba(255, 255, 255, 0) 60%, var(--m-bg) 100%);

  /* ===== Shadows (used only on CTA hover, not at-rest) ===== */
  --m-shadow-cta-primary: 0 14px 28px -12px rgba(24, 24, 27, 0.55);
  --m-shadow-cta-nav: 0 8px 22px -8px rgba(24, 24, 27, 0.45);
  --m-shadow-card: 0 0 0 transparent;                          /* legacy compat (v1 flat) */
  --m-shadow-deep: 0 24px 48px -24px rgba(24, 24, 27, 0.20);   /* legacy compat */

  /* ===== Radii (v1) ===== */
  --m-radius-sm: 8px;
  --m-radius-md: 10px;
  --m-radius-lg: 14px;
  --m-radius-xl: 18px;
  --m-radius-pill: 999px;

  /* ===== Spacing 8px scale (legacy compat) ===== */
  --m-space-1: 4px;
  --m-space-2: 8px;
  --m-space-3: 12px;
  --m-space-4: 16px;
  --m-space-5: 24px;
  --m-space-6: 32px;
  --m-space-7: 48px;
  --m-space-8: 64px;
  --m-space-9: 96px;

  /* ===== Layout & section rhythm (v1 fluid) ===== */
  --m-pad-x: clamp(28px, 4vw, 64px);
  --m-section-y: clamp(72px, 9vw, 128px);
  --m-stats-y: clamp(48px, 5vw, 64px);
  --m-hero-y-top: clamp(56px, 8vw, 96px);
  --m-hero-y-bottom: clamp(72px, 9vw, 120px);
  --m-footer-y: clamp(56px, 6vw, 80px);
  --m-header-height: 80px;                  /* v1: 64 → 80 (anchored scroll-margin-top auto-adapts) */

  /* ===== Letter-spacing scale ===== */
  --m-letter-display: -3px;             /* legacy compat (LandingPage stat-tile big number) */
  --m-letter-tightest: -1.5px;          /* legacy compat (LandingPage hero h1) */
  --m-letter-tighter: -0.04em;          /* v1 */
  --m-letter-tight: -0.025em;           /* v1 */
  --m-letter-snug: -0.015em;            /* v1 */
  --m-letter-normal: 0;                 /* v1 */
  --m-letter-uppercase: 0.18em;         /* v1 (eyebrow / kicker) */
  --m-letter-badge: 0.22em;             /* v1 (footer-col-title) */

  /* ===== Type (v1: Geist + Noto Sans SC) ===== */
  --m-font: "Geist", "Noto Sans SC", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
  --m-font-mono: "Geist Mono", ui-monospace, "SF Mono", Menlo, monospace;
  --m-font-feature: "lnum", "locl";

  /* ===== Marketing mock colors (legacy compat — kept until Task 13-18 重写 LandingPage 引用方) ===== */
  --m-platform-douyin: #000000;
  --m-platform-xiaohongshu: #ff5252;
  --m-platform-wechat-video: #07c160;
  --m-platform-tiktok: #ff0050;
  --m-platform-youtube: #ff0000;
  --m-platform-instagram: linear-gradient(135deg, #feda77, #f58529 50%, #dd2a7b 75%, #8134af);
  --m-platform-facebook: #1877f2;
  --m-avatar-warm: #18181b;
  --m-avatar-blue: #18181b;
  --m-editor-bg: #fafaf9;
  --m-editor-dot-red: #f08e8e;
  --m-editor-dot-yellow: #e8c065;
  --m-editor-dot-green: #7ec48c;
  --m-editor-preview-bg: linear-gradient(135deg, #1a3656 0%, #0c1324 100%);
  --m-editor-clip-primary: #4da6ff;
  --m-editor-clip-deep: #2563eb;
  --m-editor-clip-mid: #6093d2;
  --m-editor-clip-audio-1: #c8d8ec;
  --m-editor-clip-audio-2: #aac0dd;
  --m-editor-clip-audio-3: #d6e3f3;
  --m-chart-secondary: #a3c8ee;
}

.marketing-scope section[id] {
  scroll-margin-top: var(--m-header-height);
}
/* Marketing component class styles — v1 redesign (2026-05-04)
   Source of truth: docs/design/homepage-hero-v1.html
   All classes are .m-* prefixed and scoped under .marketing-scope to avoid
   polluting product/console surfaces (spec §1.2 red line). Tokens come from
   marketing-tokens.css (also scoped to .marketing-scope). */

/* ===== reset (scoped) ===== */
.marketing-scope,
.marketing-scope * {
  box-sizing: border-box;
}
.marketing-scope * {
  margin: 0;
  padding: 0;
}

/* The marketing scope itself defines body-equivalent typography, replacing the
   v1 HTML `body { font-family ... }` rule (which we cannot apply globally). */
.marketing-scope {
  font-family: var(--m-font);
  color: var(--m-text);
  background: var(--m-bg);
  font-size: 16px;
  line-height: 1.55;
  -webkit-font-smoothing: antialiased;
  position: relative;
  overflow-x: hidden;
}

/* ─── nav ─────────────────────────────────────── */
.m-nav {
  position: relative;
  z-index: 10;
  display: grid;
  grid-template-columns: 1fr auto 1fr;
  align-items: center;
  padding: 24px var(--m-pad-x);
  border-bottom: 1px solid var(--m-border);
}

.m-brand {
  display: inline-flex;
  align-items: center;
  gap: 12px;
  color: var(--m-text);
  justify-self: start;
  text-decoration: none;
}
.m-brand-mark {
  font-family: 'Geist', sans-serif;
  font-weight: 700;
  font-size: 22px;
  letter-spacing: -0.025em;
  color: var(--m-text);
}
.m-brand-rule {
  width: 1px;
  height: 16px;
  background: var(--m-border-strong);
  display: inline-block;
}
.m-brand-cn {
  font-family: 'Noto Sans SC', sans-serif;
  font-weight: 500;
  font-size: 13px;
  color: var(--m-text-muted);
  letter-spacing: 0.04em;
}

.m-nav-links {
  display: flex;
  gap: 40px;
  font-size: 14px;
  letter-spacing: 0.005em;
  justify-self: center;
}
.m-nav-links a {
  color: var(--m-text);
  text-decoration: none;
  position: relative;
  padding: 6px 2px;
  transition: color 0.2s;
}
.m-nav-links a::after {
  content: '';
  position: absolute;
  left: 0; right: 0; bottom: 0;
  height: 1px;
  background: var(--m-text);
  transform: scaleX(0);
  transform-origin: left;
  transition: transform 0.3s ease;
}
.m-nav-links a:hover { color: var(--m-text); opacity: 0.78; }
.m-nav-links a:hover::after { transform: scaleX(1); }

.m-nav-cta {
  font-family: 'Geist Mono', monospace;
  font-size: 11.5px;
  text-transform: uppercase;
  letter-spacing: 0.16em;
  background: var(--m-text);
  color: var(--m-bg);
  padding: 12px 22px;
  border: none;
  border-radius: var(--m-radius-pill);
  cursor: pointer;
  justify-self: end;
  transition: transform 0.25s ease, box-shadow 0.25s ease;
  position: relative;
}
.m-nav-cta:hover {
  transform: translateY(-1px);
  box-shadow: 0 8px 22px -8px rgba(24, 24, 27, 0.45);
}

/* ─── hero ─────────────────────────────────────── */
.m-hero {
  position: relative;
  padding: clamp(56px, 8vw, 96px) var(--m-pad-x) clamp(72px, 9vw, 120px);
  display: grid;
  grid-template-columns: minmax(0, 7fr) minmax(0, 5fr);
  gap: clamp(40px, 5vw, 80px);
  align-items: center;
  min-height: calc(100vh - 80px);
}

/* shared atmospheric backdrop — bridges left text and right globe */
.m-hero::before {
  content: '';
  position: absolute;
  inset: 0;
  pointer-events: none;
  background:
    radial-gradient(ellipse 60% 70% at 78% 50%, rgba(24, 24, 27, 0.045), rgba(24, 24, 27, 0) 70%),
    radial-gradient(ellipse 80% 100% at 100% 50%, rgba(24, 24, 27, 0.025), rgba(24, 24, 27, 0) 60%);
  z-index: 0;
}
.m-hero > * { position: relative; z-index: 1; }

/* ─── hero left ─────────────────────────────────── */
.m-hero-left { position: relative; max-width: 720px; }

.m-kicker {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  font-size: 13.5px;
  font-weight: 400;
  color: var(--m-text);
  padding: 7px 16px 7px 12px;
  border: 1px solid var(--m-border-strong);
  border-radius: 999px;
  margin-bottom: 40px;
  background: var(--m-bg-alt);
  letter-spacing: 0.005em;
  animation: m-fadeUp 0.7s cubic-bezier(.2,.7,.2,1) both;
}
.m-kicker .m-dot {
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: var(--m-text);
  box-shadow: 0 0 0 3px rgba(24, 24, 27, 0.10);
  display: inline-block;
}
.m-kicker em {
  font-family: 'Geist', sans-serif;
  font-style: normal;
  color: var(--m-text-muted);
  margin-right: 2px;
  font-size: 13.5px;
  line-height: 1;
}

.m-headline {
  font-family: 'Noto Sans SC', 'Geist', sans-serif;
  font-weight: 900;
  font-size: clamp(44px, 6.4vw, 92px);
  line-height: 1.04;
  letter-spacing: -0.035em;
  color: var(--m-text);
  margin-bottom: 36px;
  animation: m-fadeUp 0.85s cubic-bezier(.2,.7,.2,1) 0.08s both;
}
.m-headline .m-line { display: block; }
.m-headline .m-end-dot {
  display: inline-block;
  width: 0.14em;
  height: 0.14em;
  border-radius: 50%;
  background: var(--m-text);
  vertical-align: 0.06em;
  margin-left: 0.04em;
}

.m-subhead {
  font-family: 'Geist', 'Noto Sans SC', sans-serif;
  font-size: 17px;
  font-weight: 400;
  line-height: 1.7;
  color: var(--m-text-muted);
  max-width: 480px;
  margin-bottom: 48px;
  animation: m-fadeUp 0.85s cubic-bezier(.2,.7,.2,1) 0.16s both;
}

.m-ctas {
  display: flex;
  align-items: center;
  gap: 16px;
  flex-wrap: wrap;
  animation: m-fadeUp 0.85s cubic-bezier(.2,.7,.2,1) 0.24s both;
}

.m-btn {
  font-family: 'Geist', 'Noto Sans SC', sans-serif;
  font-size: 17px;
  font-weight: 500;
  padding: 21px 38px;
  border: 1px solid transparent;
  border-radius: var(--m-radius-lg);
  cursor: pointer;
  text-decoration: none;
  display: inline-flex;
  align-items: center;
  gap: 12px;
  letter-spacing: 0.005em;
  transition: transform 0.25s ease, box-shadow 0.25s ease, background 0.2s ease, border-color 0.2s ease;
  position: relative;
}
.m-btn-primary {
  background: var(--m-text);
  color: var(--m-bg);
}
.m-btn-primary:hover {
  transform: translateY(-1px);
  box-shadow: 0 14px 28px -12px rgba(24, 24, 27, 0.55);
}

.m-btn-ghost {
  background: transparent;
  color: var(--m-text);
  border-color: var(--m-border-strong);
}
.m-btn-ghost:hover {
  border-color: var(--m-text);
  background: rgba(24, 24, 27, 0.035);
}
.m-btn .m-arrow {
  transition: transform 0.25s ease;
  font-family: 'Geist', sans-serif;
  font-size: 19px;
  font-weight: 400;
}
.m-btn:hover .m-arrow {
  transform: translateX(5px);
}

/* ─── hero right (language globe) ───────────────── */
.m-hero-right {
  position: relative;
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: 480px;
  animation: m-fadeIn 1.2s ease 0.3s both;
}

.m-earth {
  position: relative;
  width: min(560px, 96%);
  aspect-ratio: 1;
  /* nudge left so the globe crosses the gutter and shares space with the text column */
  transform: translateX(clamp(-56px, -3.5vw, -28px));
}

.m-earth svg {
  width: 100%;
  height: 100%;
  display: block;
  filter: drop-shadow(0 24px 56px rgba(24, 24, 27, 0.05));
}

.m-earth .m-sphere {
  fill: url(#earthSphereFill);
}
.m-earth .m-sphere-stroke {
  fill: none;
  stroke: rgba(24, 24, 27, 0.06);
  stroke-width: 1;
}
.m-earth .m-graticule {
  fill: none;
  stroke: rgba(24, 24, 27, 0.06);
  stroke-width: 0.6;
}
.m-earth .m-country {
  fill: var(--m-text);
  fill-opacity: 0.85;
  stroke: var(--m-bg);
  stroke-width: 0.35;
  vector-effect: non-scaling-stroke;
}
.m-earth .m-city {
  fill: var(--m-text);
}
.m-earth .m-city-glow {
  fill: var(--m-text);
  fill-opacity: 0.14;
}
.m-earth .m-city-pulse {
  fill: none;
  stroke: var(--m-text);
  stroke-opacity: 0.5;
  animation: m-cityPulse 2.6s ease-out infinite;
}
@keyframes m-cityPulse {
  0%   { r: 2; stroke-opacity: 0.55; }
  100% { r: 14; stroke-opacity: 0; }
}

/* origin marker (China) — emphasized vs destinations */
.m-earth .m-origin-core {
  fill: var(--m-text);
}
.m-earth .m-origin-ring {
  fill: none;
  stroke: var(--m-text);
  stroke-width: 1.2;
}
.m-earth .m-origin-pulse {
  fill: none;
  stroke: var(--m-text);
  stroke-width: 1.4;
  animation: m-originPulse 2.4s ease-out infinite;
}
@keyframes m-originPulse {
  0%   { r: 5;  stroke-opacity: 0.7; }
  100% { r: 26; stroke-opacity: 0;   }
}

/* radiating arcs from origin to destinations */
.m-earth .m-arc {
  fill: none;
  stroke: var(--m-text);
  stroke-opacity: 0.55;
  stroke-width: 1.1;
  stroke-linecap: round;
}
.m-earth .m-arc-head {
  fill: var(--m-text);
}

.m-markets-badge {
  position: absolute;
  top: 4%;
  right: 0;
  text-align: left;
  animation: m-fadeUp 0.9s cubic-bezier(.2,.7,.2,1) 0.5s both;
}
.m-markets-badge .m-num {
  font-family: 'Geist', sans-serif;
  font-weight: 700;
  font-size: 30px;
  line-height: 1;
  color: var(--m-text);
  letter-spacing: -0.04em;
}
.m-markets-badge .m-num sup {
  font-size: 0.4em;
  vertical-align: super;
  margin-left: 1px;
  font-weight: 500;
  color: var(--m-text-muted);
}
.m-markets-badge .m-label {
  font-family: 'Geist Mono', monospace;
  font-size: 10px;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--m-text-subtle);
  margin-top: 6px;
}

/* ─── section primitives (shared by all blocks below hero) ─── */
.m-section {
  position: relative;
  padding: clamp(72px, 9vw, 128px) var(--m-pad-x);
  border-top: 1px solid var(--m-border);
}
.m-section-inner {
  max-width: 1240px;
  margin: 0 auto;
}
.m-section-eyebrow {
  font-family: 'Geist Mono', monospace;
  font-size: 11px;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--m-text-muted);
  margin-bottom: 18px;
  display: inline-flex;
  align-items: center;
  gap: 12px;
}
.m-section-eyebrow::before {
  content: '';
  width: 24px;
  height: 1px;
  background: var(--m-text-muted);
}
.m-section-h2 {
  font-family: 'Noto Sans SC', 'Geist', sans-serif;
  font-weight: 700;
  font-size: clamp(32px, 3.6vw, 52px);
  line-height: 1.12;
  letter-spacing: -0.025em;
  color: var(--m-text);
  margin: 0;
}
.m-section-sub {
  font-family: 'Geist', 'Noto Sans SC', sans-serif;
  font-size: 17px;
  line-height: 1.6;
  color: var(--m-text-muted);
  margin-top: 16px;
  max-width: 640px;
}

/* ─── stats strip ────────────────────────────────── */
.m-stats {
  padding: clamp(48px, 5vw, 64px) var(--m-pad-x);
  border-top: 1px solid var(--m-border);
  border-bottom: 1px solid var(--m-border);
}
.m-stats-inner {
  max-width: 1240px;
  margin: 0 auto;
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 0;
}
.m-stat-cell {
  padding: 8px 28px;
  border-left: 1px solid var(--m-border);
}
.m-stat-cell:first-child { border-left: none; padding-left: 0; }
.m-stat-num {
  font-family: 'Geist', sans-serif;
  font-weight: 700;
  font-size: clamp(36px, 4vw, 56px);
  line-height: 1;
  letter-spacing: -0.04em;
  color: var(--m-text);
  display: block;
}
.m-stat-label {
  font-family: 'Noto Sans SC', 'Geist', sans-serif;
  font-size: 14px;
  color: var(--m-text-muted);
  margin-top: 12px;
  display: block;
  letter-spacing: 0.005em;
}

/* ─── bento grid ─────────────────────────────────── */
.m-bento {
  margin-top: 56px;
  display: grid;
  grid-template-columns: repeat(12, 1fr);
  gap: 20px;
}
.m-tile {
  background: var(--m-bg);
  border: 1px solid var(--m-border);
  border-radius: 18px;
  padding: 32px 32px 28px;
  display: flex;
  flex-direction: column;
  gap: 18px;
  min-height: 320px;
  transition: border-color 0.25s ease, transform 0.25s ease;
  position: relative;
  overflow: hidden;
}
.m-tile:hover {
  border-color: var(--m-border-strong);
  transform: translateY(-2px);
}
.m-tile.wide { grid-column: span 8; }
.m-tile.narrow { grid-column: span 4; }
.m-tile.split-vis {
  flex-direction: row;
  align-items: stretch;
  gap: 28px;
}
.m-tile.split-vis > .m-tile-copy { flex: 1.05; display: flex; flex-direction: column; gap: 14px; }
.m-tile.split-vis > .m-tile-vis  { flex: 1; min-width: 0; display: flex; align-items: center; justify-content: center; }
.m-tile-kicker {
  font-family: 'Noto Sans SC', 'Geist', sans-serif;
  font-size: 14px;
  font-weight: 500;
  letter-spacing: 0.02em;
  color: var(--m-accent);
}
.m-num-accent { color: var(--m-accent); }
.m-tile-h3 {
  font-family: 'Noto Sans SC', 'Geist', sans-serif;
  font-weight: 700;
  font-size: clamp(22px, 2.2vw, 30px);
  line-height: 1.25;
  letter-spacing: -0.02em;
  color: var(--m-text);
  margin: 0;
}
.m-tile-body {
  font-family: 'Geist', 'Noto Sans SC', sans-serif;
  font-size: 15px;
  line-height: 1.65;
  color: var(--m-text-muted);
  margin: 0;
}

/* tile: warm quote variant */
.m-tile-quote .m-quote-mark {
  font-family: 'Noto Serif SC', Georgia, serif;
  font-size: 64px;
  line-height: 0.8;
  font-weight: 700;
  color: var(--m-text);
  margin-bottom: -10px;
}
.m-tile-quote blockquote {
  font-family: 'Noto Sans SC', 'Geist', sans-serif;
  font-size: 17px;
  font-weight: 500;
  line-height: 1.55;
  color: var(--m-text);
  margin: 0;
}
.m-tile-quote cite {
  display: flex;
  align-items: center;
  gap: 10px;
  font-style: normal;
  font-size: 12.5px;
  color: var(--m-text-muted);
  margin-top: auto;
}
.m-avatar {
  width: 30px;
  height: 30px;
  border-radius: 50%;
  background: var(--m-text);
  color: var(--m-bg);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-family: 'Noto Sans SC', sans-serif;
  font-weight: 600;
  font-size: 12px;
}
.m-cite-name { color: var(--m-text); font-weight: 600; }

/* platform chip grid (matrix tile) */
.m-chips {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 8px;
  margin: 4px 0 6px;
}
.m-chip {
  aspect-ratio: 1 / 1;
  border-radius: 10px;
  display: flex;
  align-items: center;
  justify-content: center;
  font-family: 'Noto Sans SC', 'Geist', sans-serif;
  font-weight: 600;
  font-size: 13.5px;
  color: var(--m-bg);
  background: var(--m-text);
  letter-spacing: 0.02em;
}
.m-chip.dashed { background: transparent; color: var(--m-text-muted); border: 1px dashed var(--m-border-strong); }
.m-chip.active {
  box-shadow: 0 0 0 2px var(--m-accent), 0 0 0 5px var(--m-accent-bg);
  position: relative;
}

/* mock editor visual (AI video tile) */
.m-mock-editor {
  width: 100%;
  background: var(--m-bg-alt);
  border: 1px solid var(--m-border);
  border-radius: 12px;
  padding: 14px;
  display: flex;
  flex-direction: column;
  gap: 10px;
  font-family: 'Geist Mono', monospace;
  font-size: 11px;
  color: var(--m-text-muted);
}
.m-mock-editor .m-me-row {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 7px 10px;
  background: var(--m-bg);
  border: 1px solid var(--m-border);
  border-radius: 8px;
}
.m-mock-editor .m-me-row .m-lang { width: 28px; font-weight: 600; color: var(--m-text); }
.m-mock-editor .m-me-row .m-bar {
  flex: 1;
  height: 6px;
  border-radius: 3px;
  background: linear-gradient(to right, var(--m-text) var(--p, 60%), var(--m-border) var(--p, 60%));
}
.m-mock-editor .m-me-row.active .m-lang { color: var(--m-accent); }
.m-mock-editor .m-me-row.active .m-bar {
  background: linear-gradient(to right, var(--m-accent) var(--p, 60%), var(--m-accent-bg) var(--p, 60%));
}
.m-mock-editor .m-me-row .m-pct { color: var(--m-text); font-weight: 500; min-width: 32px; text-align: right; }

/* mock chart (retail tile) */
.m-mock-chart-wrap {
  width: 100%;
  height: 100%;
  display: flex;
  flex-direction: column;
  gap: 10px;
  padding: 16px;
  background: var(--m-bg-alt);
  border: 1px solid var(--m-border);
  border-radius: 12px;
}
.m-mock-chart {
  width: 100%;
  flex: 1;
  min-height: 160px;
  display: flex;
  align-items: flex-end;
  gap: 10px;
  position: relative;
}
.m-mock-chart .m-col {
  flex: 1;
  display: flex;
  flex-direction: column;
  align-items: stretch;
  gap: 4px;
  height: 100%;
  justify-content: flex-end;
  position: relative;
}
.m-mock-chart .m-col .m-b1 { background: var(--m-border-strong); border-radius: 3px; }
.m-mock-chart .m-col .m-b2 { background: var(--m-text);          border-radius: 3px; }
.m-mock-chart .m-col.featured { gap: 0; }
.m-mock-chart .m-col.featured .m-b1,
.m-mock-chart .m-col.featured .m-b2 { background: var(--m-accent); }
.m-mock-chart .m-col.featured .m-b1 { border-radius: 3px 3px 0 0; }
.m-mock-chart .m-col.featured .m-b2 { border-radius: 0 0 3px 3px; }
.m-mock-chart-tip {
  position: absolute;
  top: -2px;
  left: 50%;
  transform: translate(-50%, -100%);
  padding: 4px 10px;
  background: var(--m-accent);
  color: #FFFFFF;
  border-radius: 6px;
  font-family: 'Noto Sans SC', 'Geist', sans-serif;
  font-size: 11px;
  font-weight: 500;
  letter-spacing: 0.02em;
  white-space: nowrap;
}
.m-mock-chart-tip::after {
  content: '';
  position: absolute;
  top: 100%;
  left: 50%;
  transform: translateX(-50%);
  border: 4px solid transparent;
  border-top-color: var(--m-accent);
}
.m-mock-chart-icons {
  display: flex;
  gap: 10px;
  padding-top: 10px;
  border-top: 1px solid var(--m-border);
}
.m-mock-chart-icons .m-ic {
  flex: 1;
  height: 22px;
  display: flex;
  align-items: center;
  justify-content: center;
  color: var(--m-text-muted);
}
.m-mock-chart-icons .m-ic svg {
  width: 18px;
  height: 18px;
  stroke: currentColor;
  fill: none;
  stroke-width: 1.6;
  stroke-linecap: round;
  stroke-linejoin: round;
}
.m-mock-chart-icons .m-ic.active { color: var(--m-accent); }

/* ─── logo wall ──────────────────────────────────── */
.m-logos-inner {
  text-align: center;
  max-width: 1100px;
  margin: 0 auto;
}
.m-logos-heading {
  font-family: 'Noto Sans SC', 'Geist', sans-serif;
  font-size: 14px;
  font-weight: 500;
  color: var(--m-text-muted);
  letter-spacing: 0.02em;
  margin: 0 0 32px;
}
.m-logos-row {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 36px 56px;
  align-items: center;
}
.m-logos-row li {
  list-style: none;
  font-family: 'Geist', 'Noto Sans SC', sans-serif;
  font-weight: 600;
  font-size: 18px;
  color: var(--m-text);
  letter-spacing: 0.01em;
  opacity: 0.55;
  transition: opacity 0.2s ease;
}
.m-logos-row li:hover { opacity: 1; }
.m-logos-row li.muted { opacity: 0.45; font-weight: 500; font-size: 14px; font-family: 'Noto Sans SC', sans-serif; }

/* ─── testimonial ────────────────────────────────── */
.m-testimonial-inner {
  max-width: 920px;
  margin: 0 auto;
  text-align: center;
}
.m-testimonial-eyebrow {
  font-family: 'Geist Mono', monospace;
  font-size: 11px;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--m-text-muted);
  margin: 0 0 22px;
}
.m-testimonial-quote {
  font-family: 'Noto Sans SC', 'Geist', sans-serif;
  font-size: clamp(22px, 2.2vw, 32px);
  font-weight: 600;
  line-height: 1.45;
  letter-spacing: -0.015em;
  color: var(--m-text);
  margin: 0 0 28px;
}
.m-testimonial-cite {
  display: inline-flex;
  align-items: center;
  gap: 12px;
  font-style: normal;
  color: var(--m-text-muted);
  font-size: 14px;
}

/* ─── pricing ────────────────────────────────────── */
.m-pricing-head {
  text-align: center;
  margin-bottom: 56px;
}
.m-pricing-h2 {
  font-family: 'Noto Sans SC', 'Geist', sans-serif;
  font-weight: 700;
  font-size: clamp(32px, 3.6vw, 52px);
  line-height: 1.12;
  letter-spacing: -0.025em;
  color: var(--m-text);
  margin: 0 0 12px;
}
.m-pricing-sub {
  font-family: 'Geist', 'Noto Sans SC', sans-serif;
  font-size: 16px;
  line-height: 1.6;
  color: var(--m-text-muted);
  margin: 0 auto;
  max-width: 640px;
}
.m-pricing-cards {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 24px;
}
.m-plan {
  border: 1px solid var(--m-border);
  border-radius: 18px;
  padding: 36px 32px 32px;
  background: var(--m-bg);
  display: flex;
  flex-direction: column;
  gap: 22px;
  transition: border-color 0.2s ease, transform 0.25s ease;
}
.m-plan:hover { border-color: var(--m-border-strong); transform: translateY(-2px); }
.m-plan.featured {
  background: var(--m-text);
  color: var(--m-bg);
  border-color: var(--m-text);
}
.m-plan.featured .m-plan-name,
.m-plan.featured .m-plan-price,
.m-plan.featured .m-plan-feature { color: var(--m-bg); }
.m-plan.featured .m-plan-period,
.m-plan.featured .m-plan-tag,
.m-plan.featured .m-plan-divider { color: rgba(255,255,255,0.6); border-color: rgba(255,255,255,0.18); }
.m-plan-name {
  font-family: 'Noto Sans SC', 'Geist', sans-serif;
  font-size: 17px;
  font-weight: 600;
  color: var(--m-text);
  display: flex;
  align-items: center;
  gap: 10px;
}
.m-plan-tag {
  font-family: 'Geist Mono', monospace;
  font-size: 10px;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  padding: 4px 8px;
  border-radius: 999px;
  background: var(--m-bg-alt);
  color: var(--m-text-muted);
}
.m-plan.featured .m-plan-tag { background: rgba(255,255,255,0.12); color: var(--m-bg); }
.m-plan-price {
  font-family: 'Geist', sans-serif;
  font-weight: 700;
  font-size: 44px;
  line-height: 1;
  letter-spacing: -0.04em;
  color: var(--m-text);
}
.m-plan-period {
  font-family: 'Geist', sans-serif;
  font-size: 14px;
  color: var(--m-text-muted);
  font-weight: 400;
  margin-left: 4px;
  letter-spacing: 0;
}
.m-plan-divider {
  height: 1px;
  background: var(--m-border);
  width: 100%;
}
.m-plan-features {
  list-style: none;
  padding: 0;
  margin: 0;
  display: flex;
  flex-direction: column;
  gap: 12px;
}
.m-plan-feature {
  font-family: 'Noto Sans SC', 'Geist', sans-serif;
  font-size: 14px;
  color: var(--m-text);
  display: flex;
  align-items: flex-start;
  gap: 10px;
  line-height: 1.5;
}
.m-plan-feature::before {
  content: '';
  width: 5px;
  height: 5px;
  background: var(--m-text);
  border-radius: 50%;
  margin-top: 8px;
  flex: none;
}
.m-plan.featured .m-plan-feature::before { background: var(--m-bg); }
.m-plan-cta {
  margin-top: auto;
  padding: 14px 22px;
  border-radius: 12px;
  font-family: 'Geist', 'Noto Sans SC', sans-serif;
  font-size: 14.5px;
  font-weight: 500;
  cursor: pointer;
  border: 1px solid var(--m-text);
  background: var(--m-bg);
  color: var(--m-text);
  transition: background 0.2s, color 0.2s;
}
.m-plan-cta:hover { background: var(--m-text); color: var(--m-bg); }
.m-plan.featured .m-plan-cta {
  background: var(--m-bg);
  color: var(--m-text);
  border-color: var(--m-bg);
}
.m-plan.featured .m-plan-cta:hover { background: rgba(255,255,255,0.85); }
.m-pricing-foot {
  text-align: center;
  margin-top: 36px;
}
.m-pricing-foot a {
  font-family: 'Geist', 'Noto Sans SC', sans-serif;
  color: var(--m-text);
  font-size: 14.5px;
  text-decoration: none;
  border-bottom: 1px solid var(--m-border-strong);
  padding-bottom: 2px;
  transition: border-color 0.2s;
}
.m-pricing-foot a:hover { border-color: var(--m-text); }

/* pricing — skeleton + error states */
.m-plan-skeleton {
  display: flex;
  flex-direction: column;
  gap: 20px;
  padding: 32px 28px;
}
.m-pricing-error-icon {
  width: 48px;
  height: 48px;
  border-radius: 50%;
  background: var(--m-accent-bg);
  color: var(--m-accent);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 24px;
  font-weight: 700;
}
.m-pricing-error-msg {
  color: var(--m-text);
  font-size: 15px;
  font-weight: 500;
  letter-spacing: var(--m-letter-normal);
}

/* ─── footer ─────────────────────────────────────── */
.m-footer {
  border-top: 1px solid var(--m-border);
  padding: clamp(56px, 6vw, 80px) var(--m-pad-x) 32px;
}
.m-footer-inner {
  max-width: 1240px;
  margin: 0 auto;
  display: grid;
  grid-template-columns: minmax(0, 2fr) repeat(3, minmax(0, 1fr));
  gap: 56px 40px;
}
.m-footer-brand-cell .m-footer-brand {
  font-family: 'Geist', sans-serif;
  font-weight: 700;
  font-size: 22px;
  letter-spacing: -0.025em;
  color: var(--m-text);
  display: inline-flex;
  align-items: center;
  gap: 12px;
}
.m-footer-brand-cell .m-footer-brand .m-rule {
  width: 1px;
  height: 16px;
  background: var(--m-border-strong);
}
.m-footer-brand-cell .m-footer-brand .m-cn {
  font-family: 'Noto Sans SC', sans-serif;
  font-weight: 500;
  font-size: 13px;
  color: var(--m-text-muted);
  letter-spacing: 0.04em;
}
.m-footer-tagline {
  font-family: 'Noto Sans SC', 'Geist', sans-serif;
  font-size: 14px;
  color: var(--m-text-muted);
  margin-top: 14px;
  line-height: 1.6;
  max-width: 280px;
}
.m-footer-col-title {
  font-family: 'Geist Mono', monospace;
  font-size: 10.5px;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--m-text-subtle);
  margin: 0 0 18px;
}
.m-footer-list {
  list-style: none;
  padding: 0;
  margin: 0;
  display: flex;
  flex-direction: column;
  gap: 12px;
}
.m-footer-list a {
  font-family: 'Noto Sans SC', 'Geist', sans-serif;
  font-size: 14px;
  color: var(--m-text);
  text-decoration: none;
  transition: opacity 0.2s;
}
.m-footer-list a:hover { opacity: 0.65; }
.m-footer-bottom {
  max-width: 1240px;
  margin: 56px auto 0;
  padding-top: 24px;
  border-top: 1px solid var(--m-border);
  display: flex;
  align-items: center;
  justify-content: space-between;
  font-family: 'Geist Mono', monospace;
  font-size: 11px;
  letter-spacing: 0.12em;
  color: var(--m-text-subtle);
  text-transform: uppercase;
}

/* ─── reveal animations ─────────────────────────── */
@keyframes m-fadeUp {
  from { opacity: 0; transform: translateY(14px); }
  to   { opacity: 1; transform: translateY(0); }
}
@keyframes m-fadeIn {
  from { opacity: 0; }
  to   { opacity: 1; }
}

/* ─── responsive ────────────────────────────────── */
@media (max-width: 980px) {
  .m-nav { grid-template-columns: 1fr auto; }
  .m-nav-links { display: none; }
  .m-hero {
    grid-template-columns: 1fr;
    gap: 56px;
    padding-top: 48px;
    min-height: auto;
  }
  .m-hero::after { display: none; }
  .m-hero-right { min-height: 360px; }
  .m-earth { width: min(380px, 90%); transform: none; }
  .m-headline { font-size: clamp(42px, 11vw, 72px); }

  .m-stats-inner { grid-template-columns: repeat(2, 1fr); gap: 32px 0; }
  .m-stat-cell { padding: 8px 20px; }
  .m-stat-cell:nth-child(odd) { border-left: none; padding-left: 0; }
  .m-stat-cell:nth-child(even) { border-left: 1px solid var(--m-border); }
  .m-stat-cell:nth-child(3) { padding-top: 24px; border-top: 1px solid var(--m-border); }
  .m-stat-cell:nth-child(4) { padding-top: 24px; border-top: 1px solid var(--m-border); }

  .m-bento { grid-template-columns: 1fr; }
  .m-tile.wide, .m-tile.narrow { grid-column: auto; }
  .m-tile.split-vis { flex-direction: column; }

  .m-pricing-cards { grid-template-columns: 1fr; }

  .m-footer-inner { grid-template-columns: 1fr 1fr; }
  .m-footer-brand-cell { grid-column: 1 / -1; }
}

@media (max-width: 520px) {
  .m-ctas { flex-direction: column; align-items: stretch; }
  .m-btn { justify-content: center; }
  .m-footer-bottom { flex-direction: column; gap: 16px; align-items: flex-start; }
}
/* Ant Design overrides — v1 design system
   仅承载 ConfigProvider 实测覆盖不到的角落（component-level token 缺口）。
   每条 override 必须有 [盲区证据] 注释，说明 Phase 几在哪个页面截图发现 ConfigProvider 失效。
   未实测验证的 selector 不允许写入本文件。 */

/* [盲区证据] Phase 2 截图 /console/video-creation 时 .ant-layout-sider 计算样式仍为
   rgb(15,15,15)，根因：src/modules/geo/styles/global.css 第 85-97 行用 !important 全局
   覆写 .ant-layout / .ant-layout-header / .ant-layout-sider / .ant-layout-content 为
   geo-bg-primary/secondary（深色），且该 css 通过 5 个 GeoPage 的 import 在 App.tsx 启动
   时即被加载，污染所有 console 页面。
   修复方案：dp-revamp（MainLayout 根 className）作用域内强制覆盖 — 同样使用 !important
   提升优先级（geo css 用了 !important，必须 !important 反制）。
   长期修复：Phase 9 把 geo global.css 全部 selector 加 .geo-page-container 前缀，去除
   全局污染。本块在 Phase 9 完成后可删除。 */
.dp-revamp.ant-layout,
.dp-revamp .ant-layout {
  background: var(--ds-bg) !important;
}

.dp-revamp .ant-layout-header {
  background: rgba(255, 255, 255, 0.92) !important;
  border-bottom: 1px solid var(--ds-border) !important;
}

.dp-revamp .ant-layout-sider {
  background: var(--ds-bg) !important;
  border-right: 1px solid var(--ds-border) !important;
}

.dp-revamp .ant-layout-content {
  background: var(--ds-bg) !important;
}

/* [盲区证据] Phase 3 截图 AuthModal 时发现：
   1. 5 个主/副 CTA（登录/注册/重置密码/获取验证码/发送验证码）仍渲染紫色渐变
   2. modal 标题（欢迎登陆 / 创建您的账户 / 找回密码）变白字几乎不可见
   3. 表单 label（账号/密码）色弱
   根因：src/modules/geo/styles/global.css 第 203-207 行 `.ant-btn-primary` 用
   `var(--geo-primary-gradient)` + !important 全局覆盖；第 401-408 行 `.ant-modal-content`
   / `.ant-modal-title` 用 geo 暗色 + !important；第 533-536 行 `.ant-typography *` 用
   geo 浅白文字 + !important；第 929-931 行 `.ant-form-item-label > label` 用 geo 浅白。
   AuthModal 渲染在 React Portal（body 直挂），不在 .dp-revamp 树内，无法靠 .dp-revamp
   反制，必须给 modal portal 加 wrapClassName="dp-auth-modal" 作 hook。
   长期修复：Phase 9 把 geo global.css 全部 selector 加 .geo-page-container 前缀去全局
   污染。本块在 Phase 9 完成后可删除。 */

/* AuthModal portal 内 modal 容器 + 标题 + 表单文字反制
   注：antd Modal 在 .ant-modal-body 上单独设了一个 colorText（实测 rgba(255,255,255,0.85)
   暗色 token），导致 inherit 链断在 body 级别 → 标题/链接/checkbox label 全成白色。
   解法：显式把 .ant-modal-content 和 .ant-modal-body 都强制为 ds-text。 */
.dp-auth-modal .ant-modal-content,
.dp-auth-modal .ant-modal-body {
  background: var(--ds-bg) !important;
  color: var(--ds-text) !important;
}

.dp-auth-modal .ant-modal-title {
  color: var(--ds-text) !important;
}

.dp-auth-modal .ant-typography,
.dp-auth-modal .ant-typography * {
  color: inherit !important;
}

/* Checkbox / Radio label 文字（"记住我"、"我已阅读并同意"、"个人/企业"） */
.dp-auth-modal .ant-checkbox-wrapper,
.dp-auth-modal .ant-radio-wrapper {
  color: var(--ds-text-muted) !important;
}

/* Typography Link 必须用 accent，不要被 inherit 抹平 */
.dp-auth-modal .ant-typography-link,
.dp-auth-modal a.ant-typography {
  color: var(--ds-accent-text) !important;
}

.dp-auth-modal .ant-form-item-label > label {
  color: var(--ds-text-muted) !important;
}

/* AuthModal portal 内主 CTA = ink-on-ink（design.md 主按钮规范） */
.dp-auth-modal .ant-btn-primary {
  background: var(--ds-text) !important;
  border-color: var(--ds-text) !important;
  color: var(--ds-text-on-ink) !important;
  background-image: none !important;
  filter: none !important;
  box-shadow: none !important;
}

.dp-auth-modal .ant-btn-primary:hover,
.dp-auth-modal .ant-btn-primary:focus {
  background: #000000 !important;
  border-color: #000000 !important;
  color: var(--ds-text-on-ink) !important;
  filter: none !important;
  box-shadow: var(--ds-shadow-cta-primary) !important;
}

.dp-auth-modal .ant-btn-primary:disabled,
.dp-auth-modal .ant-btn-primary[disabled] {
  background: var(--ds-bg-deep) !important;
  border-color: var(--ds-bg-deep) !important;
  color: var(--ds-text-subtle) !important;
}

/* MainLayout 内主 CTA：同样 ink-on-ink，与 design.md 对齐
   （此前 App.css 1447-1458 用 azure 渐变，与 design.md 主按钮规范不符，由本块替换） */
.dp-revamp .ant-btn-primary {
  background: var(--ds-text) !important;
  border-color: var(--ds-text) !important;
  color: var(--ds-text-on-ink) !important;
  background-image: none !important;
  filter: none !important;
  box-shadow: none !important;
}

.dp-revamp .ant-btn-primary:hover,
.dp-revamp .ant-btn-primary:focus {
  background: #000000 !important;
  border-color: #000000 !important;
  color: var(--ds-text-on-ink) !important;
  filter: none !important;
  box-shadow: var(--ds-shadow-cta-primary) !important;
}

.dp-revamp .ant-btn-primary:disabled,
.dp-revamp .ant-btn-primary[disabled] {
  background: var(--ds-bg-deep) !important;
  border-color: var(--ds-bg-deep) !important;
  color: var(--ds-text-subtle) !important;
}

/* [盲区证据] s4a Phase F2 截图 /console mindmap 工作区时发现：
   CustomWorkspace「生成分镜」、AiSmartWorkspace「开始生成」/「重试」主 CTA
   仍渲染 azure 渐变。/console（ConsoleCanvasPage）不经 MainLayout，DOM 树上没有
   .dp-revamp，故上面的 .dp-revamp 反制够不到；geo global.css 第 203-207 行
   `.ant-btn-primary` azure 渐变 + !important 直接漏到工作区。
   对策：给 mindmap 工作区 overlay（.mm-workspace-panel）加同款 ink-on-ink 反制，
   满足 design.md §12 console scope no-azure。 */
.mm-workspace-panel .ant-btn-primary {
  background: var(--ds-text) !important;
  border-color: var(--ds-text) !important;
  color: var(--ds-text-on-ink) !important;
  background-image: none !important;
  filter: none !important;
  box-shadow: none !important;
}

.mm-workspace-panel .ant-btn-primary:hover,
.mm-workspace-panel .ant-btn-primary:focus {
  background: #000000 !important;
  border-color: #000000 !important;
  color: var(--ds-text-on-ink) !important;
  filter: none !important;
  box-shadow: var(--ds-shadow-cta-primary) !important;
}

.mm-workspace-panel .ant-btn-primary:disabled,
.mm-workspace-panel .ant-btn-primary[disabled] {
  background: var(--ds-bg-deep) !important;
  border-color: var(--ds-bg-deep) !important;
  color: var(--ds-text-subtle) !important;
}

/* [盲区证据] Phase 7 截图 /console/data-dashboard 时发现：
   KPI 6 卡 + 3 趋势图 Card 仍渲染深 navy 底，inline `style={{ background: 'var(--ds-surface)' }}`
   被 src/modules/geo/styles/global.css 第 121-125 行 `.ant-card { background: var(--geo-bg-surface)
   !important; color: var(--geo-text-primary) !important }` 全局污染压住。
   对策：dp-revamp 树内 .ant-card 强制白底 + ink 文字（用 inherit 让 inline style 生效；
   border 用 ds-border 反制 geo border）。表格组件 .ant-table 也同样，但 DataDashboardPage 用
   `.ddp-table` scope override 已覆盖 geo .ant-table，此处不再追加。
   长期修复：Phase 9 把 geo global.css 全部 selector 加 .geo-page-container 前缀，去除全局污染。
   本块在 Phase 9 完成后可删除。 */
.dp-revamp .ant-card {
  background: var(--ds-surface) !important;
  border-color: var(--ds-border) !important;
  color: var(--ds-text) !important;
}

.dp-revamp .ant-card-head,
.dp-revamp .ant-card-head-wrapper,
.dp-revamp .ant-card-head-title {
  background: transparent !important;
  border-bottom: 1px solid var(--ds-border) !important;
  color: var(--ds-text) !important;
}

/* [盲区证据] Phase 8 截图 /console/account-settings + /console/membership 时发现：
   Form.Item label / Title h4 / Text 等所有 antd Typography 组件渲染为白色不可见文字。
   根因：src/modules/geo/styles/global.css 第 533-535 行
     `.ant-typography, .ant-typography * { color: var(--geo-text-primary) !important; }`
   `--geo-text-primary` = rgba(255,255,255,0.95)（暗主题白字），全局 !important 压过 inline
   style 和组件自身 color，导致白底页面所有 Typography 文字消失。
   对策：dp-revamp 树和 .account-settings (AccountSettingsPage 独立布局) 内 antd Typography
   强制改回 ink + ds-text-muted（inherit 配合 inline style 让二级语义文字也可视）。
   长期修复：Phase 9 给 geo global.css 全 selector 加 .geo-page-container 前缀。
   本块在 Phase 9 完成后可删除。 */
.dp-revamp .ant-typography,
.dp-revamp .ant-typography *,
.account-settings .ant-typography,
.account-settings .ant-typography * {
  color: inherit !important;
}

.dp-revamp .ant-typography-secondary,
.account-settings .ant-typography-secondary {
  color: var(--ds-text-muted) !important;
}

.dp-revamp .ant-typography-disabled,
.account-settings .ant-typography-disabled {
  color: var(--ds-text-subtle) !important;
}

/* 默认 antd Title h1-h4 渲染走 .ant-typography，inherit 后用 currentColor，但
   AccountSettingsPage 大量在父 div 没 set color 时直接 <Title>，需要兜个 ink 默认 */
.dp-revamp h1.ant-typography,
.dp-revamp h2.ant-typography,
.dp-revamp h3.ant-typography,
.dp-revamp h4.ant-typography,
.dp-revamp h5.ant-typography,
.account-settings h1.ant-typography,
.account-settings h2.ant-typography,
.account-settings h3.ant-typography,
.account-settings h4.ant-typography,
.account-settings h5.ant-typography {
  color: var(--ds-text) !important;
}

/* [盲区证据] Phase 8 截图 /console/account-settings 时发现：
   语言偏好 / 主题偏好 Select 渲染为黑色实心条（看不到选项文字）。
   根因：src/modules/geo/styles/global.css 第 215-220 行
     `.ant-input, .ant-select-selector, .ant-picker { background: #0f0f0f !important; ... }`
   全局 !important 把 Select 控件填成深色。AccountSettingsPage 内联 <style> 已用
   `.account-settings .ant-select-selector` 覆盖（specificity 2-class），但 geo CSS 加载
   顺序在后（geo modules lazy），同 specificity + !important 时后者赢。
   对策：在 antd-overrides 末尾再追加 .dp-revamp 树内 Select / Input / Picker 反制（用
   3-class selector 提升 specificity，确保不被 geo 后续注入压住）。
   本块在 Phase 9 完成后可删除。 */
.dp-revamp .ant-select .ant-select-selector,
.dp-revamp .ant-form .ant-input,
.dp-revamp .ant-form .ant-input-affix-wrapper,
.account-settings .ant-select .ant-select-selector,
.account-settings .ant-form .ant-input,
.account-settings .ant-form .ant-input-affix-wrapper {
  background: var(--ds-surface) !important;
  border-color: var(--ds-border) !important;
  color: var(--ds-text) !important;
}

.dp-revamp .ant-select .ant-select-selection-item,
.dp-revamp .ant-select .ant-select-selection-placeholder,
.dp-revamp .ant-select .ant-select-arrow,
.account-settings .ant-select .ant-select-selection-item,
.account-settings .ant-select .ant-select-selection-placeholder,
.account-settings .ant-select .ant-select-arrow {
  color: var(--ds-text) !important;
}

.dp-revamp .ant-form .ant-input::placeholder,
.account-settings .ant-form .ant-input::placeholder {
  color: var(--ds-text-subtle) !important;
}

/* [盲区证据] Phase 8 截图 /console/account-settings 时发现：
   "退出登录" / "删除账户" / "上传新头像" 等 default Button 文字看不见。
   根因：src/modules/geo/styles/global.css 第 191-194 行
     `.ant-btn-default { background: transparent !important; color: rgba(255,255,255,0.95) !important; }`
   暗主题白字 !important 全局应用，default 按钮文字消失。
   对策：dp-revamp / .account-settings 树内 default 按钮反制为 ds-text + ds-border。
   .ant-btn-text（无 border 透明按钮）跟着同样处理；danger button 让 antd 自身的 danger
   class 走 antd 默认（红字）—— 不在此处覆盖 .ant-btn-dangerous。
   本块在 Phase 9 完成后可删除。 */
.dp-revamp .ant-btn-default,
.account-settings .ant-btn-default {
  background: var(--ds-surface) !important;
  border-color: var(--ds-border-strong) !important;
  color: var(--ds-text) !important;
}

.dp-revamp .ant-btn-default:hover,
.account-settings .ant-btn-default:hover {
  background: var(--ds-bg-alt) !important;
  border-color: var(--ds-text) !important;
  color: var(--ds-text) !important;
}

.dp-revamp .ant-btn-text:not(.ant-btn-dangerous),
.account-settings .ant-btn-text:not(.ant-btn-dangerous) {
  color: var(--ds-text) !important;
}

.dp-revamp .ant-btn-link,
.account-settings .ant-btn-link {
  color: var(--ds-accent-text) !important;
}

/* design.md §12.2: console scope Radio.Button buttonStyle="solid" 选中 → ink-on-ink */
.dp-revamp .ant-radio-button-wrapper-checked,
.account-settings .ant-radio-button-wrapper-checked,
.dp-revamp .ant-radio-button-wrapper-checked:not([class*='ant-radio-button-wrapper-disabled']) {
  background: var(--ds-text) !important;
  border-color: var(--ds-text) !important;
  color: var(--ds-bg) !important;
}
.dp-revamp .ant-radio-button-wrapper-checked:hover,
.account-settings .ant-radio-button-wrapper-checked:hover {
  background: var(--ds-text-muted) !important;
  border-color: var(--ds-text-muted) !important;
  color: var(--ds-bg) !important;
}
.dp-revamp .ant-radio-button-wrapper-checked::before,
.account-settings .ant-radio-button-wrapper-checked::before {
  background-color: var(--ds-text) !important;
}

/* design.md §12.2: console scope antd Tabs 选中 → ink；底部 underline → ink */
.dp-revamp .ant-tabs .ant-tabs-tab.ant-tabs-tab-active,
.account-settings .ant-tabs .ant-tabs-tab.ant-tabs-tab-active {
  background: transparent !important;
  color: var(--ds-text) !important;
}
.dp-revamp .ant-tabs .ant-tabs-tab.ant-tabs-tab-active .ant-tabs-tab-btn,
.account-settings .ant-tabs .ant-tabs-tab.ant-tabs-tab-active .ant-tabs-tab-btn {
  color: var(--ds-text) !important;
}
.dp-revamp .ant-tabs .ant-tabs-ink-bar,
.account-settings .ant-tabs .ant-tabs-ink-bar {
  background: var(--ds-text) !important;
}

/* [盲区证据] plan v2 Task 9/10 Phase F2 截图发现：
   DeleteConfirmModal「确认删除」+ NewProductModal「创建」按钮渲染 azure 蓝，
   不符 design.md §12 console scope no-azure。根因同 dp-auth-modal 段：
   geo/global.css 第 203-207 行 .ant-btn-primary azure 渐变 + !important 全局污染，
   而 antd Modal 渲染在 React Portal（不在 .dp-revamp 树内），dp-revamp 反制够不到。
   解：给 ProductsHomePage 的 Modal 加 wrapClassName="dp-console-modal" 作 portal hook。 */
.dp-console-modal .ant-btn-primary {
  background: var(--ds-text) !important;
  border-color: var(--ds-text) !important;
  color: var(--ds-text-on-ink) !important;
  background-image: none !important;
  filter: none !important;
  box-shadow: none !important;
}
.dp-console-modal .ant-btn-primary:hover,
.dp-console-modal .ant-btn-primary:focus {
  background: #000000 !important;
  border-color: #000000 !important;
  color: var(--ds-text-on-ink) !important;
  filter: none !important;
}
.dp-console-modal .ant-btn-primary:disabled,
.dp-console-modal .ant-btn-primary[disabled] {
  background: var(--ds-bg-deep) !important;
  border-color: var(--ds-bg-deep) !important;
  color: var(--ds-text-subtle) !important;
}

/* danger primary（如「确认删除」）保留 danger 语义红色，覆盖上面的 ink ink */
.dp-console-modal .ant-btn-primary.ant-btn-dangerous,
.dp-console-modal .ant-btn-color-dangerous.ant-btn-variant-solid {
  background: var(--ds-danger) !important;
  border-color: var(--ds-danger) !important;
  color: #ffffff !important;
  background-image: none !important;
}
.dp-console-modal .ant-btn-primary.ant-btn-dangerous:hover,
.dp-console-modal .ant-btn-color-dangerous.ant-btn-variant-solid:hover {
  background: #dc2626 !important;
  border-color: #dc2626 !important;
}

/* [盲区证据] Phase F2 第 2 轮截图发现：ProductsHomePage canvas 内
   VideoUploader「上传视频」/「上传」按钮渲染 azure 蓝（design.md §12 console scope no-azure 违反）。
   ProductsHomePage / ProductVideosPage / ProductDocsPage 都是 console-shell（不进 MainLayout），
   不在 .dp-revamp 反制 scope 内，geo/global.css 的 azure 渐变 + !important 直接漏到 canvas 主 CTA。
   解：给三个 page 顶层 div 加 dp-products-shell scope class + 本块同款 ink-on-ink 反制。 */
.dp-products-shell .ant-btn-primary {
  background: var(--ds-text) !important;
  border-color: var(--ds-text) !important;
  color: var(--ds-text-on-ink) !important;
  background-image: none !important;
  filter: none !important;
  box-shadow: none !important;
}
.dp-products-shell .ant-btn-primary:hover,
.dp-products-shell .ant-btn-primary:focus {
  background: #000000 !important;
  border-color: #000000 !important;
  color: var(--ds-text-on-ink) !important;
}
.dp-products-shell .ant-btn-primary:disabled,
.dp-products-shell .ant-btn-primary[disabled] {
  background: var(--ds-bg-deep) !important;
  border-color: var(--ds-bg-deep) !important;
  color: var(--ds-text-subtle) !important;
}
