/* web/css/ai.css —— 对话区 AI 相关样式
 *
 * 工单 B 重构后：界面不再有「引擎徽标 / 三选一」，改为
 *   · 离线提示条（AI 暂不可用 + 先看离线检索结果）
 *   · AI 回复的依据区（citations 卡片）+ 候选 chips（可点继续问）+ 记忆提示
 *   · 「我的」页的 AI 记忆 / 配置同步区块
 * 独立文件：避免与并行改动 pages.css、layout.css、base.css 的代理冲突。
 * 全部使用 tokens.css 的语义令牌，日间/暗夜双主题自动跟随（html[data-theme]）。
 */

/* ===== 离线提示条（R7）===== */
.ai-notice {
  display: flex;
  align-items: center;
  gap: var(--space-3);
  flex-wrap: wrap;
  margin: var(--space-3) var(--space-4) 0;
  padding: var(--space-2) var(--space-3);
  border: 1px solid var(--c-line-strong);
  border-left: 3px solid var(--c-tight);
  border-radius: var(--radius-sm);
  background: var(--c-card-2);
  color: var(--c-text);
  font-size: var(--fs-sm);
}
.ai-notice-text { flex: 1 1 140px; min-width: 0; }
.ai-notice-btn {
  appearance: none;
  font-family: inherit;
  font-size: var(--fs-xs);
  font-weight: 600;
  padding: 5px 10px;
  border-radius: var(--radius-pill);
  border: 1px solid var(--c-line-strong);
  background: var(--c-card);
  color: var(--c-text);
  cursor: pointer;
  white-space: nowrap;
}
.ai-notice-btn:hover { background: var(--c-tint-primary); }
.ai-notice-btn:focus-visible { box-shadow: var(--shadow-focus); }

/* ===== 公网模式门禁（authMode='sync-code'；内网模式永不出现）===== */
.ai-gate {
  display: flex;
  align-items: center;
  gap: var(--space-3);
  flex-wrap: wrap;
  margin: 0 var(--space-4) var(--space-2);
  padding: var(--space-2) var(--space-3);
  border: 1px solid var(--c-line-strong);
  border-left: 3px solid var(--c-primary);
  border-radius: var(--radius-sm);
  background: var(--c-card-2);
  color: var(--c-text);
  font-size: var(--fs-sm);
}
.ai-gate-text { flex: 1 1 160px; min-width: 0; }
.ai-gate-btn {
  appearance: none;
  font-family: inherit;
  font-size: var(--fs-xs);
  font-weight: 600;
  padding: 5px 10px;
  border-radius: var(--radius-pill);
  border: 1px solid var(--c-primary);
  background: var(--c-primary);
  color: var(--c-primary-ink);
  cursor: pointer;
  white-space: nowrap;
}
.ai-gate-btn:hover { background: var(--c-primary-hover); border-color: var(--c-primary-hover); }
.ai-gate-btn:focus-visible { box-shadow: var(--shadow-focus); }

/* 限流气泡（429）：与普通 AI 气泡同形，仅左侧描边区分 */
.ai-rate-bubble { border-left: 3px solid var(--c-tight); }

/* 发送按钮禁用态（限流倒计时期间） */
.chat-send.is-disabled,
.chat-send:disabled {
  opacity: 0.45;
  cursor: not-allowed;
}

/* ===== 离线检索结果标注（不是第二个引擎徽标，只是一句来源说明）===== */.ai-src-offline {
  display: inline-block;
  margin-bottom: 6px;
  padding: 1px 7px;
  border-radius: var(--radius-xs);
  font-size: 10px;
  line-height: 1.6;
  font-weight: 600;
  letter-spacing: 0.02em;
  border: 1px solid var(--c-line-strong);
  background: var(--c-card-2);
  color: var(--c-ink-soft);
}

/* ===== AI 记忆提示（气泡内一行轻提示）===== */
.ai-memo {
  margin-top: var(--space-2);
  padding: 4px 8px;
  border-radius: var(--radius-xs);
  background: var(--c-tint-primary);
  color: var(--c-ink);
  font-size: var(--fs-xs);
  line-height: 1.6;
}

/* ===== 依据区（citations → 既有卡片渲染器；默认收起，点摘要展开）===== */
.ai-cite {
  margin-top: var(--space-3);
  padding-top: var(--space-2);
  border-top: 1px dashed var(--c-line-strong);
}
.ai-cite-head {
  display: flex;
  align-items: center;
  gap: 6px;
  flex-wrap: wrap;
  cursor: pointer;
  list-style: none;
  font-size: var(--fs-xs);
  font-weight: 700;
  letter-spacing: 0.02em;
  color: var(--c-ink-soft);
}
.ai-cite-head::-webkit-details-marker { display: none; }
.ai-cite-head::marker { content: ''; }
.ai-cite-label { color: var(--c-ink-soft); }
.ai-cite-chip {
  padding: 0 6px;
  border-radius: var(--radius-xs);
  border: 1px solid var(--c-line-strong);
  background: var(--c-card);
  color: var(--c-ink);
  font-weight: 600;
}
.ai-cite-toggle { margin-left: auto; color: var(--c-ink-faint); font-weight: 600; }
.ai-cite-toggle::after { content: ' ▾'; }
.ai-cite[open] > .ai-cite-head .ai-cite-toggle::after { content: ' ▴'; }
.ai-cite-body {
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
  margin-top: var(--space-2);
}
.ai-cite-item { display: flex; flex-direction: column; gap: 4px; }
.ai-cite-tag {
  display: flex;
  align-items: baseline;
  gap: 6px;
  min-width: 0;
  font-size: var(--fs-xs);
  color: var(--c-ink-soft);
}
.ai-cite-kind {
  flex-shrink: 0;
  padding: 0 6px;
  border-radius: var(--radius-xs);
  border: 1px solid var(--c-line-strong);
  background: var(--c-card);
  color: var(--c-ink);
  font-weight: 600;
}
.ai-cite-title { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* 服务端护栏提示（无据数值被标注 / 降级为资料库原文）——一行轻提示，不是报错 */
.ai-guard {
  margin-top: var(--space-2);
  padding: 4px 8px;
  border-radius: var(--radius-xs);
  border: 1px dashed var(--c-line-strong);
  background: var(--c-card-2);
  color: var(--c-ink-soft);
  font-size: var(--fs-xs);
  line-height: 1.6;
}

/* ===== 候选 chips（R6）：点一条 = 把它当新问题发出去 ===== */
.ai-cand {
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
  margin-top: var(--space-3);
}
.ai-cand-head { font-size: var(--fs-xs); color: var(--c-ink-soft); }
.ai-cand-row { display: flex; flex-wrap: wrap; gap: var(--space-2); }
.ai-cand-chip {
  appearance: none;
  font-family: inherit;
  display: inline-flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 2px;
  max-width: 100%;
  padding: 6px 10px;
  border-radius: var(--radius-sm);
  border: 1px solid var(--c-line-strong);
  background: var(--c-card);
  color: var(--c-text);
  text-align: left;
  cursor: pointer;
  transition: background 0.15s ease, border-color 0.15s ease;
}
.ai-cand-chip:hover { background: var(--c-tint-primary); border-color: var(--c-text); }
.ai-cand-chip:active { transform: scale(0.99); }
.ai-cand-chip:focus-visible { box-shadow: var(--shadow-focus); }
.ai-cand-chip-label { font-size: var(--fs-sm); font-weight: 600; line-height: 1.5; }
.ai-cand-chip-why { font-size: 10px; line-height: 1.5; color: var(--c-ink-soft); }

/* ===== 业务规则卡（资料库 rule 类型）===== */
.chat-rule-text {
  font-size: var(--fs-sm);
  line-height: 1.7;
  color: var(--c-ink);
  white-space: pre-wrap;
}

/* ===== 「我的」页：AI 记忆区块 ===== */
.ai-mem-group { margin-top: var(--space-2); }
.ai-mem-group-title {
  font-size: var(--fs-xs);
  font-weight: 700;
  color: var(--c-ink-soft);
  padding: 4px 0;
}
.ai-mem-item {
  display: flex;
  align-items: flex-start;
  gap: var(--space-2);
  padding: var(--space-2) 0;
  border-bottom: 1px dashed var(--c-line);
}
.ai-mem-item:last-child { border-bottom: none; }
.ai-mem-text {
  flex: 1;
  min-width: 0;
  font-size: var(--fs-sm);
  line-height: 1.6;
  color: var(--c-text);
  word-break: break-word;
}
.ai-mem-acts { display: flex; gap: 6px; flex-shrink: 0; }
.ai-mini-btn {
  appearance: none;
  font-family: inherit;
  font-size: var(--fs-xs);
  padding: 3px 8px;
  border-radius: var(--radius-xs);
  border: 1px solid var(--c-line-strong);
  background: var(--c-card);
  color: var(--c-ink);
  cursor: pointer;
}
.ai-mini-btn:hover { background: var(--c-tint-primary); }
.ai-mini-btn:focus-visible { box-shadow: var(--shadow-focus); }
.ai-mini-btn-danger { color: var(--c-up); border-color: var(--c-line-strong); }
.ai-mem-empty { font-size: var(--fs-sm); color: var(--c-muted); padding: var(--space-2) 0; }
.ai-privacy {
  margin-top: var(--space-2);
  font-size: var(--fs-xs);
  line-height: 1.7;
  color: var(--c-ink-soft);
}
.ai-mem-edit-input {
  flex: 1;
  min-width: 0;
  font-family: inherit;
  font-size: var(--fs-sm);
  padding: 5px 8px;
  border-radius: var(--radius-xs);
  border: 1px solid var(--c-line-strong);
  background: var(--c-card);
  color: var(--c-text);
}

/* ===== 「我的」页：配置同步区块 ===== */
.ai-sync-row {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  padding: var(--space-2) 0;
  flex-wrap: wrap;
}
.ai-sync-label { font-size: var(--fs-sm); color: var(--c-ink); flex: 1 1 100px; }
.ai-sync-input {
  flex: 1 1 140px;
  min-width: 0;
  font-family: inherit;
  font-size: var(--fs-sm);
  padding: 6px 8px;
  border-radius: var(--radius-xs);
  border: 1px solid var(--c-line-strong);
  background: var(--c-card);
  color: var(--c-text);
}
.ai-sync-err { font-size: var(--fs-xs); color: var(--c-up); padding: 2px 0; }
.ai-sync-ok { font-size: var(--fs-xs); color: var(--c-down); padding: 2px 0; }
.ai-sync-meta { font-size: var(--fs-xs); color: var(--c-ink-soft); padding: var(--space-1) 0; }
.ai-sync-actions { display: flex; flex-wrap: wrap; gap: var(--space-2); padding-top: var(--space-2); }
.ai-sync-code-row { display: flex; align-items: center; gap: var(--space-2); flex-wrap: wrap; }
.ai-sync-code {
  font-family: var(--font-mono);
  font-size: var(--fs-sm);
  letter-spacing: 0.04em;
  color: var(--c-text);
}
.ai-toggle-row {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  padding: var(--space-2) 0;
  font-size: var(--fs-sm);
  color: var(--c-ink);
}
.ai-toggle-row input { width: 16px; height: 16px; accent-color: var(--c-text); }

/* 窄屏：提示条按钮占满一行 */
@media (max-width: 400px) {
  .ai-notice { row-gap: 6px; }
  .ai-notice-btn { flex: 1 1 100%; }
}

/* ===== 工单 H：来源标记 / 内容分析卡（ICS 3 行结果 + 询价 S1/S2）=====
 * 全部走 tokens.css 语义令牌，日间/暗夜双主题自动跟随。
 */
.ai-src-mark {
  flex: 0 0 auto;
  margin-left: var(--space-2);
  padding: 2px 8px;
  border-radius: var(--radius-pill);
  border: 1px solid var(--c-line-strong);
  background: var(--c-card-2);
  color: var(--c-ink-soft);
  font-family: var(--font-mono);
  font-size: var(--fs-xs);
  font-weight: 600;
  white-space: nowrap;
}
.ai-src-mark.is-local { border-style: dashed; }

/* 询价 SOP：内容分析卡（S1/S2 顶部） */
.ai-analysis-card { margin-bottom: var(--space-3); }
.ai-analysis-card.is-degraded { border-left: 3px solid var(--c-tight); }
.ai-analysis-card.is-degraded .aa-v { color: var(--c-ink-soft); }
.aa-warn {
  margin: calc(-1 * var(--space-2)) 0 var(--space-3);
  padding: var(--space-2) var(--space-3);
  border-radius: var(--radius-sm);
  background: var(--c-card-2);
  color: var(--c-ink);
  font-size: var(--fs-xs);
  line-height: 1.5;
}
.aa-sec {
  margin: var(--space-2) 0 var(--space-1);
  font-size: var(--fs-xs);
  font-weight: 700;
  letter-spacing: 0.04em;
  color: var(--c-ink-soft);
}
.aa-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
  gap: 2px var(--space-3);
}
.aa-row {
  display: flex;
  align-items: baseline;
  gap: var(--space-2);
  min-width: 0;
  padding: 3px 0;
  border-bottom: 1px dashed var(--c-line-strong);
  font-size: var(--fs-sm);
}
.aa-k { flex: 0 0 auto; color: var(--c-ink-soft); font-size: var(--fs-xs); }
.aa-v {
  flex: 1 1 auto;
  min-width: 0;
  text-align: right;
  color: var(--c-text);
  word-break: break-all;
}
.aa-notes {
  margin-top: var(--space-1);
  padding: var(--space-2) var(--space-3);
  border-radius: var(--radius-sm);
  background: var(--c-card-2);
}
.aa-note {
  font-size: var(--fs-xs);
  line-height: 1.7;
  color: var(--c-ink);
  word-break: break-word;
}

/* CTA 引导气泡（顶部「立即询价」插入的那条） */
.chat-bubble-guide { border-left: 3px solid var(--c-primary); }

/* ===== 标准报价单（工单 J）：AI 气泡内的第一块 =====
 * 单据样式：分区固定顺序（抬头 → 航线 → 货物与重量 → 方案明细 → 时效与到达 → 风险提示），
 * 标签右对齐 / 值左对齐，数字等宽（tabular-nums + mono 仅用于编码类）。
 * 全部走 tokens.css 语义令牌（日间/暗夜自动跟随），文字只用 --c-text / --c-ink / --c-ink-soft
 * 三档（两者对比度均 ≥4.5），不用 --c-ink-faint（对比度不足）。
 * 宽度策略：所有值 min-width:0 + overflow-wrap:anywhere，窄屏一行一对、宽屏一行两对，永不横向溢出。
 */
.qs {
  margin: 0 0 var(--space-3);
  border: 1px solid var(--c-line-strong);
  border-radius: var(--radius-sm);
  background: var(--c-card-2);
  color: var(--c-text);
  font-variant-numeric: tabular-nums;
  overflow: hidden;
}
.qs-head {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: var(--space-2) var(--space-3);
  padding: var(--space-2) var(--space-3);
  background: var(--c-card);
  border-bottom: 1px solid var(--c-line-strong);
}
.qs-title { font-size: var(--fs-sm); font-weight: 700; letter-spacing: 0.06em; color: var(--c-text); }
.qs-head-meta {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 2px var(--space-2);
  min-width: 0;
  font-size: var(--fs-xs);
  color: var(--c-ink-soft);
}
.qs-no { font-family: var(--font-mono); letter-spacing: 0.02em; }
.qs-copy {
  appearance: none;
  font-family: inherit;
  font-size: var(--fs-xs);
  font-weight: 600;
  margin-left: auto;
  padding: 4px 10px;
  border-radius: var(--radius-pill);
  border: 1px solid var(--c-line-strong);
  background: var(--c-card-2);
  color: var(--c-text);
  cursor: pointer;
  white-space: nowrap;
}
.qs-copy:hover { background: var(--c-tint-primary); }
.qs-copy:focus-visible { box-shadow: var(--shadow-focus); }

.qs-sec { padding: var(--space-2) var(--space-3); border-top: 1px dashed var(--c-line-strong); }
.qs-sec-title {
  font-size: var(--fs-xs);
  font-weight: 700;
  letter-spacing: 0.06em;
  color: var(--c-ink-soft);
  margin-bottom: 4px;
}
.qs-route { display: flex; flex-wrap: wrap; align-items: baseline; gap: 2px var(--space-2); min-width: 0; font-size: var(--fs-sm); }
.qs-route-code { font-family: var(--font-mono); font-weight: 700; color: var(--c-text); }
.qs-route-name { font-size: var(--fs-xs); color: var(--c-ink-soft); }
.qs-route-arrow { color: var(--c-ink-soft); }

/* 字段网格：标签右对齐 + 值左对齐 */
.qs-kv {
  display: grid;
  grid-template-columns: minmax(44px, max-content) minmax(0, 1fr);
  gap: 2px var(--space-3);
  min-width: 0;
}
.qs-k { text-align: right; color: var(--c-ink-soft); font-size: var(--fs-xs); }
.qs-v {
  text-align: left;
  min-width: 0;
  color: var(--c-text);
  font-size: var(--fs-sm);
  overflow-wrap: anywhere;
}
.qs-kv-opt { gap: 2px var(--space-2); }

.qs-note {
  margin-top: 4px;
  font-size: var(--fs-xs);
  line-height: 1.6;
  color: var(--c-ink);
  overflow-wrap: anywhere;
}
.qs-opts { display: flex; flex-direction: column; gap: var(--space-2); }
.qs-opt {
  padding: var(--space-2) var(--space-3);
  border: 1px solid var(--c-line-strong);
  border-radius: var(--radius-xs);
  background: var(--c-card);
  min-width: 0;
}
.qs-opt.is-rec { border-left: 3px solid var(--c-primary); }
.qs-opt-head { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px var(--space-2); margin-bottom: 4px; min-width: 0; }
.qs-opt-flight { font-family: var(--font-mono); font-weight: 700; font-size: var(--fs-sm); color: var(--c-text); }
.qs-opt-airline { font-size: var(--fs-xs); color: var(--c-ink-soft); min-width: 0; }
.qs-badge {
  flex: 0 0 auto;
  padding: 0 6px;
  border-radius: var(--radius-pill);
  border: 1px solid var(--c-primary);
  color: var(--c-primary);
  font-size: 10px;
  font-weight: 700;
  line-height: 1.7;
}
.qs-ref { margin-left: auto; font-family: var(--font-mono); font-size: var(--fs-xs); color: var(--c-ink-soft); }
.qs-space { margin-top: 4px; font-size: var(--fs-xs); line-height: 1.6; color: var(--c-ink-soft); overflow-wrap: anywhere; }
.qs-remark { margin-top: 2px; font-size: var(--fs-xs); line-height: 1.6; color: var(--c-ink); overflow-wrap: anywhere; }

.qs-feas {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 2px var(--space-2);
  margin-top: 6px;
  padding: var(--space-2);
  border: 1px solid var(--c-line-strong);
  border-radius: var(--radius-xs);
  background: var(--c-card);
  font-size: var(--fs-xs);
  line-height: 1.6;
}
.qs-feas-tag { flex: 0 0 auto; font-weight: 700; }
.qs-feas-text { min-width: 0; color: var(--c-ink); overflow-wrap: anywhere; }
.qs-feas.is-ok .qs-feas-tag { color: var(--c-down); }
.qs-feas.is-bad .qs-feas-tag { color: var(--c-up); }
.qs-feas.is-unknown .qs-feas-tag { color: var(--c-tight); }

.qs-notes { display: flex; flex-direction: column; gap: 2px; }
.qs-note-item {
  position: relative;
  padding-left: 10px;
  font-size: var(--fs-xs);
  line-height: 1.7;
  color: var(--c-ink);
  overflow-wrap: anywhere;
}
.qs-note-item::before { content: '·'; position: absolute; left: 2px; color: var(--c-ink-soft); }
.qs-empty { font-size: var(--fs-xs); color: var(--c-ink-soft); }

/* 宽屏（桌面 1440）：字段两对一行，单据更紧凑 */
@media (min-width: 720px) {
  .qs-kv { grid-template-columns: max-content minmax(0, 1fr) max-content minmax(0, 1fr); column-gap: var(--space-4); }
}
/* 窄屏（移动 390 / 360）：复制按钮占满一行，内边距收紧 */
@media (max-width: 400px) {
  .qs-head { padding: var(--space-2); }
  .qs-sec { padding: var(--space-2); }
  .qs-opt { padding: var(--space-2); }
  .qs-copy { flex: 1 1 100%; margin-left: 0; }
}

/* ============================================================================
 * 询盘 → 订舱（工单 K）：仓位日历卡 .bk* + 订舱取价结果卡 .bq* + 询盘单卡 .hs*
 * 与 .qs* 同一套语义令牌与宽度策略：窄屏一行一项、宽屏两列；值一律 min-width:0 +
 * overflow-wrap:anywhere，永不横向溢出；状态配色只用 up/tight/down 三档（对比度 ≥4.5）。
 * ========================================================================= */
.bk, .bq {
  margin: 0 0 var(--space-3);
  border: 1px solid var(--c-line-strong);
  border-radius: var(--radius-sm);
  background: var(--c-card-2);
  color: var(--c-text);
  font-variant-numeric: tabular-nums;
  overflow: hidden;
}
.bk-head, .bq-head {
  display: flex;
  align-items: baseline;
  flex-wrap: wrap;
  gap: var(--space-2) var(--space-3);
  padding: var(--space-2) var(--space-3);
  background: var(--c-card);
  border-bottom: 1px solid var(--c-line-strong);
}
.bk-title, .bq-title { font-size: var(--fs-sm); font-weight: 700; letter-spacing: 0.06em; color: var(--c-text); }
.bk-range, .bq-sub { font-size: var(--fs-xs); color: var(--c-ink-soft); min-width: 0; overflow-wrap: anywhere; }
.bk-route {
  padding: var(--space-1) var(--space-3) 0;
  font-size: var(--fs-xs);
  color: var(--c-ink);
  overflow-wrap: anywhere;
}
.bk-airlines { padding: var(--space-1) var(--space-3) var(--space-2); }
.bk-airline-item {
  font-size: var(--fs-xs);
  line-height: 1.7;
  color: var(--c-ink);
  overflow-wrap: anywhere;
}
.bk-empty { padding: var(--space-2) var(--space-3); font-size: var(--fs-xs); color: var(--c-ink-soft); }

/* 逐日行：日期块 / 航司航班块 / 状态徽标 / 选它订舱（窄屏换行，宽屏一行） */
.bk-list { display: flex; flex-direction: column; border-top: 1px dashed var(--c-line-strong); }
.bk-row {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: var(--space-1) var(--space-2);
  padding: var(--space-2) var(--space-3);
  border-bottom: 1px solid var(--c-line);
  min-width: 0;
}
.bk-row:last-child { border-bottom: none; }
.bk-row.is-dim { background: var(--c-card); }        /* 满仓/无位：置灰但完整展示 */
.bk-date {
  display: flex;
  flex-direction: column;
  flex: 0 0 auto;
  min-width: 92px;
  font-size: var(--fs-xs);
  color: var(--c-ink-soft);
}
.bk-day { font-family: var(--font-mono); font-size: var(--fs-sm); color: var(--c-text); }
.bk-main { flex: 1 1 150px; min-width: 0; }
.bk-main-1 { display: flex; flex-wrap: wrap; align-items: baseline; gap: 2px var(--space-2); min-width: 0; }
.bk-airline { font-size: var(--fs-sm); color: var(--c-text); min-width: 0; }
.bk-flight { font-family: var(--font-mono); font-weight: 700; font-size: var(--fs-sm); color: var(--c-text); }
.bk-main-2 {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 2px var(--space-1);
  min-width: 0;
  font-size: var(--fs-xs);
  color: var(--c-ink-soft);
  overflow-wrap: anywhere;
}
.bk-dot { color: var(--c-ink-faint); }
.bk-row-note { margin-top: 2px; font-size: var(--fs-xs); line-height: 1.6; color: var(--c-ink-soft); overflow-wrap: anywhere; }
.bk-status {
  flex: 0 0 auto;
  font-size: var(--fs-xs);
  font-weight: 700;
  padding: 2px 8px;
  border-radius: var(--radius-pill);
  border: 1px solid var(--c-line-strong);
  color: var(--c-ink);
  background: var(--c-card);
}
.bk-status.is-ample { color: var(--c-down); background: var(--c-tint-down); border-color: transparent; }
.bk-status.is-tight { color: var(--c-tight); background: var(--c-card); border-color: var(--c-tight); }
.bk-status.is-full  { color: var(--c-up); background: var(--c-tint-up); border-color: transparent; }
.bk-status.is-unknown { color: var(--c-ink-soft); background: var(--c-card); }
.bk-pick {
  appearance: none;
  flex: 0 0 auto;
  margin-left: auto;
  font-family: inherit;
  font-size: var(--fs-xs);
  font-weight: 600;
  padding: 5px 10px;
  border-radius: var(--radius-pill);
  border: 1px solid var(--c-line-strong);
  background: var(--c-card);
  color: var(--c-text);
  cursor: pointer;
  white-space: nowrap;
}
.bk-pick:hover { background: var(--c-tint-primary); }
.bk-pick:focus-visible { box-shadow: var(--shadow-focus); }
.bk-pick.is-busy { color: var(--c-ink-soft); cursor: progress; }
.bk-notes, .bq-notes { display: flex; flex-direction: column; gap: 2px; padding: var(--space-2) var(--space-3); border-top: 1px dashed var(--c-line-strong); }
.bk-note-item, .bq-note-item {
  position: relative;
  padding-left: 10px;
  font-size: var(--fs-xs);
  line-height: 1.7;
  color: var(--c-ink);
  overflow-wrap: anywhere;
}
.bk-note-item::before, .bq-note-item::before { content: '·'; position: absolute; left: 2px; color: var(--c-ink-soft); }

/* 订舱取价结果卡 */
.bq-kv, .hs-kv {
  display: grid;
  grid-template-columns: max-content minmax(0, 1fr);
  gap: var(--space-1) var(--space-3);
  padding: var(--space-2) var(--space-3);
}
.bq-k { text-align: right; color: var(--c-ink-soft); font-size: var(--fs-xs); }
.bq-v { min-width: 0; font-size: var(--fs-sm); color: var(--c-text); overflow-wrap: anywhere; }
.bq-alert {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: var(--space-2);
  margin: var(--space-2) var(--space-3) 0;
  padding: var(--space-2) var(--space-3);
  border-radius: var(--radius-sm);
  font-size: var(--fs-sm);
  font-weight: 600;
}
.bq-alert.is-bad { background: var(--c-tint-up); border-left: 3px solid var(--c-up); color: var(--c-up); }
.bq-alert-tag { flex: 0 0 auto; }
.bq-alert-text { flex: 1 1 140px; min-width: 0; overflow-wrap: anywhere; }
.bq-price {
  margin: var(--space-2) var(--space-3);
  padding: var(--space-2) var(--space-3);
  border-radius: var(--radius-sm);
  background: var(--c-card);
  border: 1px solid var(--c-line-strong);
}
.bq-price-main { font-size: var(--fs-md); font-weight: 700; color: var(--c-text); overflow-wrap: anywhere; }
.bq-price-total { margin-top: 2px; font-size: var(--fs-sm); color: var(--c-text); overflow-wrap: anywhere; }
.bq-note { margin-top: 2px; font-size: var(--fs-xs); line-height: 1.7; color: var(--c-ink-soft); overflow-wrap: anywhere; }
.bq-feas {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: var(--space-2);
  margin: var(--space-2) var(--space-3);
  padding: var(--space-2) var(--space-3);
  border-radius: var(--radius-sm);
  font-size: var(--fs-xs);
  line-height: 1.7;
}
.bq-feas.is-ok { background: var(--c-tint-down); }
.bq-feas.is-bad { background: var(--c-tint-up); border-left: 3px solid var(--c-up); }
.bq-feas.is-unknown { background: var(--c-card); border-left: 3px solid var(--c-tight); }
.bq-feas-tag { flex: 0 0 auto; font-weight: 700; }
.bq-feas.is-ok .bq-feas-tag { color: var(--c-down); }
.bq-feas.is-bad .bq-feas-tag { color: var(--c-up); }
.bq-feas.is-unknown .bq-feas-tag { color: var(--c-tight); }
.bq-feas-text { flex: 1 1 140px; min-width: 0; color: var(--c-ink); overflow-wrap: anywhere; }

/* 询盘单卡（第 5 步）：可一键复制的纯文本 */
.hs {
  margin: var(--space-2) var(--space-3) var(--space-3);
  border: 1px solid var(--c-primary);
  border-radius: var(--radius-sm);
  background: var(--c-card);
  overflow: hidden;
}
.hs-head {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: var(--space-2);
  padding: var(--space-2) var(--space-3);
  border-bottom: 1px solid var(--c-line-strong);
  background: var(--c-card-2);
}
.hs-title { font-size: var(--fs-sm); font-weight: 700; letter-spacing: 0.06em; color: var(--c-text); }
.hs-copy {
  appearance: none;
  margin-left: auto;
  font-family: inherit;
  font-size: var(--fs-xs);
  font-weight: 600;
  padding: 5px 10px;
  border-radius: var(--radius-pill);
  border: 1px solid var(--c-line-strong);
  background: var(--c-card);
  color: var(--c-text);
  cursor: pointer;
  white-space: nowrap;
}
.hs-copy:hover { background: var(--c-tint-primary); }
.hs-copy:focus-visible { box-shadow: var(--shadow-focus); }
.hs-k { text-align: right; color: var(--c-ink-soft); font-size: var(--fs-xs); }
.hs-v { min-width: 0; font-size: var(--fs-sm); color: var(--c-text); overflow-wrap: anywhere; }
.hs-text {
  margin: 0;
  padding: var(--space-2) var(--space-3) var(--space-3);
  border-top: 1px dashed var(--c-line-strong);
  font-family: var(--font-mono);
  font-size: var(--fs-xs);
  line-height: 1.8;
  color: var(--c-text);
  white-space: pre-wrap;
  overflow-wrap: anywhere;
}

/* 宽屏（桌面 1440）：取价字段两对一行；窄屏（移动 390）：按钮占满一行 */
@media (min-width: 720px) {
  .bq-kv { grid-template-columns: max-content minmax(0, 1fr) max-content minmax(0, 1fr); column-gap: var(--space-4); }
}
@media (max-width: 400px) {
  .bk-row { padding: var(--space-2); }
  .bk-date { min-width: 82px; }
  .bk-pick { margin-left: 0; flex: 1 1 100%; }
  .hs-copy { flex: 1 1 100%; margin-left: 0; }
  .bq-kv, .hs-kv { grid-template-columns: minmax(0, 1fr); }
  .bq-k, .hs-k { text-align: left; }
}

/* ===== 剪贴板兜底框（Platform.copy 第 ③ 级：只读 textarea + 自动全选） ===== */
.pl-copy-manual { max-width: 460px; }
.pl-copy-manual-tip { text-align: left; font-size: var(--fs-sm); color: var(--c-ink); }
.pl-copy-manual-textarea {
  width: 100%; margin-top: 10px; min-height: 96px; max-height: 40vh;
  padding: 10px 12px; resize: vertical;
  font-family: var(--font-mono);
  font-size: var(--fs-sm); line-height: 1.6; color: var(--c-text);
  background: var(--c-card-2); border: 1px solid var(--c-line-strong);
  border-radius: var(--radius-sm);
  white-space: pre-wrap; word-break: break-all;
}
.pl-copy-manual-textarea:focus { outline: none; box-shadow: var(--shadow-focus); }

/* ===== 账号体系（AUTH_MODE=account）：登录/注册对话框 + 「我的」页账号区块 =====
   非 account 模式这些类根本不渲染（account-ui.js 零渲染纪律），样式常驻无副作用。 */
.acct-modal { text-align: left; }
.acct-hint { text-align: center; margin-top: 0; }
.acct-tabs {
  display: flex;
  gap: var(--space-2);
  margin: var(--space-2) 0 var(--space-2);
}
.acct-tab {
  flex: 1;
  appearance: none;
  font-family: inherit;
  font-size: var(--fs-sm);
  font-weight: 600;
  padding: 7px 0;
  border-radius: var(--radius-xs);
  border: 1px solid var(--c-line-strong);
  background: var(--c-card-2);
  color: var(--c-ink);
  cursor: pointer;
}
.acct-tab:hover { background: var(--c-tint-primary); }
.acct-tab:focus-visible { box-shadow: var(--shadow-focus); }
.acct-tab.active {
  background: var(--c-primary);
  border-color: var(--c-primary);
  color: var(--c-primary-ink);
}
.acct-modal .ai-sync-input { flex: 1 1 160px; }
.acct-err { min-height: 16px; }
.acct-badge {
  display: inline-block;
  margin-left: 6px;
  padding: 1px 8px;
  border-radius: var(--radius-pill);
  font-size: var(--fs-xs);
  font-weight: 600;
  background: var(--c-tint-primary-strong);
  color: var(--c-text);
  vertical-align: 1px;
}

/* ===== 用户管理面板（仅管理员）=====
   列表每行：左边用户名 + 职责/配额，右边两个操作按钮。
   停用行整体压暗 + 左侧灰条，让人一眼看出谁被停了。 */
.acct-mgr-modal { max-width: 460px; }
.acct-mgr-list { max-height: 58vh; overflow-y: auto; margin: var(--space-2) 0; }
.acct-mgr-row {
  display: flex; align-items: center; justify-content: space-between; gap: var(--space-2);
  padding: var(--space-3) 0; border-bottom: 1px solid var(--c-border);
}
.acct-mgr-row:last-child { border-bottom: none; }
.acct-mgr-row.is-off { opacity: 0.55; }
.acct-mgr-row.is-off .acct-mgr-name { text-decoration: line-through; }
.acct-mgr-info { min-width: 0; }
.acct-mgr-name {
  display: flex; align-items: center; gap: 6px;
  font-weight: 600; color: var(--c-text); word-break: break-all;
}
.acct-mgr-sub { margin-top: 2px; font-size: var(--fs-xs); color: var(--c-text-2, #86909C); }
.acct-mgr-off {
  padding: 0 6px; border-radius: 4px; font-size: var(--fs-xs); font-weight: 600;
  background: rgba(213, 73, 65, 0.16); color: #d54941; text-decoration: none;
}
.acct-mgr-ops { display: flex; gap: 6px; flex: none; }
.acct-mgr-ops .btn { padding: 5px 10px; font-size: var(--fs-xs); }
