/* =============================================================
 * 组件样式：顶栏 / 按钮 / 信封 / 麦克风 / 选项卡 / 贴纸 /
 *           印章 / 路线图 / 开始遮罩 / 开发跳页
 * ============================================================= */

/* ---------- 顶栏：磨砂玻璃胶囊，悬浮于纸面上方 ---------- */
#top-bar {
  position: absolute;
  top: 14px; left: 28px; right: 28px;
  height: 64px;
  background: var(--c-frosted);
  backdrop-filter: blur(20px);
  -webkit-backdrop-filter: blur(20px);
  border: 1px solid var(--c-hairline);
  border-radius: 32px;
  box-shadow: var(--sh-card);
  display: flex; align-items: center;
  padding: 0 22px;
  z-index: 90;
}
#top-bar .tb-left  { display: flex; align-items: center; gap: 12px; flex: 1; }
#top-bar .tb-center{ flex: 1; text-align: center;
                     font-size: 19pt; font-weight: 900; color: var(--c-sky); }
#top-bar .tb-right { flex: 1; display: flex; justify-content: flex-end; }

.tb-avatar {
  width: 44px; height: 44px; border-radius: 50%;
  background: var(--c-sky-bg);
  display: flex; align-items: center; justify-content: center;
  overflow: hidden;
}
.tb-avatar img, .tb-avatar svg { width: 36px; height: 36px; }

.btn-replay {
  height: 44px;
  padding: 0 18px;
  border: 1px solid var(--c-hairline);
  border-radius: 22px;
  background: var(--c-surface);
  color: var(--c-sky);
  font-family: inherit;
  font-size: 15pt; font-weight: 700;
  cursor: pointer;
  display: flex; align-items: center; gap: 6px;
}
.btn-replay:active { background: var(--c-sky-bg); }
.btn-replay:disabled { color: var(--c-ink-soft); opacity: 0.5; cursor: default; }

/* 路线图 8 点（可点击：打开通关地图回看） */
.route-dots {
  display: flex; align-items: center; gap: 9px;
  background: none; border: none;
  padding: 10px 6px;
  cursor: pointer;
  border-radius: 18px;
}
.route-dots:hover { background: var(--c-sky-bg); }
.route-dot {
  width: 16px; height: 16px; border-radius: 50%;
  border: 2px solid var(--c-hairline);
  background: transparent;
  position: relative;
}
.route-dot.done {
  border-color: var(--c-sky);
  background: var(--c-sky);
}
.route-dot.done::after {
  content: "";
  position: absolute; inset: 3px 4px 5px 4px;
  border-left: 2px solid #fff;
  border-bottom: 2px solid #fff;
  transform: rotate(-45deg) translateY(-1px);
}
.route-dot.current {
  border-color: var(--c-sky);
  background: var(--c-surface);
  animation: kf-dot-breathe 1.8s ease-in-out infinite;
}
@keyframes kf-dot-breathe {
  0%, 100% { box-shadow: 0 0 0 0 rgba(79, 176, 240, 0.4); }
  50% { box-shadow: 0 0 0 6px rgba(79, 176, 240, 0); }
}

/* ---------- 主按钮：sky 纯色胶囊 ---------- */
.btn-primary {
  min-height: 64px;
  padding: 0 44px;
  border: none;
  border-radius: var(--r-button);
  background: var(--c-sky);
  color: #fff;
  font-family: inherit;
  font-size: var(--fs-button); font-weight: var(--fw-button);
  cursor: pointer;
  box-shadow: var(--sh-card), inset 0 1px 0 rgba(255, 255, 255, 0.35);
  transition: background var(--t-fast), transform var(--t-fast);
}
.btn-primary:active { background: var(--c-sky-press); transform: translateY(1px); }

/* 文本小链接（跳过语音入口） */
.btn-text {
  background: none; border: none;
  font-family: inherit;
  font-size: 15pt; font-weight: 500;
  color: var(--c-ink-soft);
  text-decoration: underline;
  cursor: pointer;
  padding: 10px;
}

/* ---------- 信封 → 委托卡（UI-P0A-01） ---------- */
.envelope {
  width: 360px; height: 240px;
  background: var(--c-surface);
  border: 1px solid var(--c-hairline);
  border-radius: 18px;
  box-shadow: var(--sh-raised);
  cursor: pointer;
  position: relative;
  display: flex; flex-direction: column;
  align-items: center; justify-content: flex-end;
  padding-bottom: 26px;
  transition: transform var(--t-base) var(--ease);
}
.envelope:hover { transform: scale(1.03); }
.envelope .flap {
  position: absolute; top: 0; left: 0; right: 0;
  height: 0;
  border-left: 180px solid transparent;
  border-right: 180px solid transparent;
  border-top: 110px solid var(--c-sky-bg);
  border-radius: 18px 18px 0 0;
}
.envelope .seal-dot {
  position: absolute; top: 86px; left: 50%;
  transform: translate(-50%, 0);
  width: 48px; height: 48px; border-radius: 50%;
  background: var(--c-sky);
  display: flex; align-items: center; justify-content: center;
  color: #fff; font-size: 14pt; font-weight: 700;
}
.envelope .addressee {
  font-size: 17pt; font-weight: 700; color: var(--c-ink);
}
.envelope .hint {
  font-size: 13pt; color: var(--c-ink-soft); margin-top: 4px;
}

/* 展开后的委托卡 */
.letter-card {
  width: 620px;
  background: var(--c-surface);
  border: 1px solid var(--c-hairline);
  border-radius: var(--r-card);
  box-shadow: var(--sh-raised);
  padding: 40px 56px;
  text-align: center;
}
.letter-card .lc-title {
  font-size: 26pt; font-weight: 900; color: var(--c-ink);
  margin-bottom: 22px;
}
.letter-card .lc-line {
  font-size: 19pt; font-weight: 500; line-height: 1.75;
  color: var(--c-ink-soft);
  transition: color var(--t-base), font-weight var(--t-base);
}
.letter-card .lc-line.active { color: var(--c-ink); font-weight: 700; }
.letter-card .lc-line.blank { height: 14px; }

/* ---------- 麦克风（UI-P0B-01） ---------- */
.mic-wrap {
  position: absolute; left: 0; right: 0; bottom: 140px;   /* 字幕带之上 */
  display: flex; flex-direction: column;
  align-items: center; gap: 14px;
  z-index: 40;
}
.mic-scaffold {
  font-size: 17pt; font-weight: 500; color: var(--c-ink-soft);
  background: var(--c-frosted);
  backdrop-filter: blur(20px);
  border: 1px solid var(--c-hairline);
  border-radius: 20px;
  padding: 8px 24px;
  transition: transform var(--t-base) var(--ease);
}
.mic-scaffold.pulse { animation: kf-pop-in 600ms var(--ease); }

.mic-button {
  width: 150px; height: 150px;
  border: none; border-radius: 50%;
  background: var(--c-sky);
  cursor: pointer;
  position: relative;
  display: flex; align-items: center; justify-content: center;
  box-shadow: var(--sh-card), inset 0 2px 0 rgba(255, 255, 255, 0.3);
  transition: background var(--t-fast), transform var(--t-fast);
  touch-action: none;
}
.mic-button:active { transform: scale(0.96); }
.mic-button .ring {
  position: absolute; inset: -14px;
  border-radius: 50%;
  border: 3px solid rgba(255, 255, 255, 0.9);
  animation: kf-breathe 2.2s ease-in-out infinite;
  pointer-events: none;
}
.mic-button svg { width: 56px; height: 56px; }

.mic-button.recording { background: var(--c-retry); }
.mic-button.recording .ring {
  animation: kf-ripple 1s ease-out infinite;
  border-color: rgba(242, 163, 60, 0.7);
}
@keyframes kf-ripple {
  from { transform: scale(1); opacity: 0.8; }
  to   { transform: scale(1.45); opacity: 0; }
}
.mic-state-label {
  font-size: 14pt; font-weight: 700; color: var(--c-sky);
  min-height: 24px;
}
.mic-button.recording + .mic-state-label { color: var(--c-retry); }

/* ---------- 点选选项（choice） ---------- */
.choice-prompt {
  text-align: center;
  font-size: 21pt; font-weight: 900;
  margin-bottom: 18px;
}
.choice-grid {
  display: flex; flex-wrap: wrap;
  justify-content: center;
  gap: 18px;
  max-width: 980px;
  margin: 0 auto;
}
.choice-card {
  width: 280px;
  background: var(--c-surface);
  border: 1px solid var(--c-hairline);
  border-radius: var(--r-card);
  box-shadow: var(--sh-card);
  cursor: pointer;
  overflow: hidden;
  text-align: center;
  padding-bottom: 14px;
  transition: transform var(--t-base) var(--ease), box-shadow var(--t-base);
}
.choice-card:hover { transform: translateY(-4px); box-shadow: var(--sh-raised); }
.choice-card .cc-img {
  width: 100%; height: 150px;
  display: flex; align-items: center; justify-content: center;
  background: var(--c-sky-bg);
  overflow: hidden;
}
.choice-card .cc-img img { width: 100%; height: 100%; object-fit: cover; }
.choice-card .cc-label {
  font-size: 18pt; font-weight: 700; color: var(--c-ink);
  margin-top: 10px;
}
.choice-card.selected {
  outline: 3px solid var(--c-sky);
  outline-offset: -3px;
}
.choice-card.dimmed { opacity: 0.45; pointer-events: none; }
.choice-grid.locked .choice-card { pointer-events: none; }

/* 两个水杯投票：选项压在图上左右两侧 */
.poll-overlay {
  position: absolute; left: 0; right: 0; bottom: 150px;   /* 字幕带之上 */
  display: flex; justify-content: center; gap: 220px;
  z-index: 40;
}

/* ---------- 三枚判断贴纸（UI-P1A-01，按 design_tokens 规则配色） ---------- */
.sticker-row {
  position: absolute; left: 0; right: 0; bottom: 150px;   /* 字幕带之上 */
  display: flex; justify-content: center; gap: 24px;
  z-index: 40;
}
.sticker {
  width: 250px;
  background: var(--c-surface);
  border: 1px solid var(--c-hairline);
  border-radius: var(--r-card);
  box-shadow: var(--sh-card);
  padding: 20px 22px;
  display: flex; align-items: center; gap: 14px;
}
.sticker .st-num {
  flex-shrink: 0;
  width: 44px; height: 44px; border-radius: 50%;
  background: var(--c-sky);
  color: #fff;
  display: flex; align-items: center; justify-content: center;
  font-size: 19pt; font-weight: 900;
}
.sticker .st-text { font-size: 18pt; font-weight: 700; color: var(--c-ink); }
.sticker:nth-child(odd)  { transform: rotate(-1.2deg); }
.sticker:nth-child(even) { transform: rotate(1.2deg); }

/* ---------- 磨砂玻璃印章（UI-GLASS-SEAL） ---------- */
.glass-seal {
  position: absolute;
  width: 170px; height: 170px;
  border-radius: 50%;
  background: rgba(138, 209, 250, 0.32);
  backdrop-filter: blur(10px);
  -webkit-backdrop-filter: blur(10px);
  border: 1.5px solid rgba(255, 255, 255, 0.85);
  display: flex; flex-direction: column;
  align-items: center; justify-content: center;
  gap: 4px;
  z-index: 70;
  pointer-events: none;
  overflow: hidden;
}
.glass-seal .seal-star { font-size: 26pt; }
.glass-seal .seal-text {
  font-size: 19pt; font-weight: 900;
  color: #fff;
  text-shadow: 0 2px 3px rgba(29, 43, 58, 0.28);  /* 白浮雕：下侧暗影保证字形浮出 */
}
.glass-seal .seal-star {
  color: #fff;
  text-shadow: 0 2px 3px rgba(29, 43, 58, 0.28);
}
.glass-seal.stamping { animation: kf-seal 300ms var(--ease) both; }
@keyframes kf-seal {
  from { transform: scale(1.4); opacity: 0; }
  to   { transform: scale(1); opacity: 1; }
}
.glass-seal .shine {
  position: absolute; top: 0; bottom: 0;
  width: 50px;
  background: linear-gradient(100deg, transparent, rgba(255,255,255,0.85), transparent);
  animation: kf-shine 500ms ease 300ms both;
}
@keyframes kf-shine { from { left: -60px; } to { left: 180px; } }

/* 庆祝小星点（sun 黄仅用于庆祝时刻） */
.seal-spark {
  position: absolute;
  width: 10px; height: 10px;
  background: var(--c-sun);
  clip-path: polygon(50% 0, 63% 38%, 100% 38%, 69% 59%, 82% 100%, 50% 75%, 18% 100%, 31% 59%, 0 38%, 37% 38%);
  animation: kf-spark 900ms ease-out both;
  pointer-events: none;
  z-index: 71;
}
@keyframes kf-spark {
  from { transform: translate(0, 0) scale(1); opacity: 1; }
  to   { transform: translate(var(--dx), var(--dy)) scale(0.3); opacity: 0; }
}

/* ---------- 通关地图（UI-P0B-04，游戏关卡式路线图） ---------- */
.journey-panel {
  position: absolute;
  /* 用 margin 居中而非 transform——anim-pan_in 的 transform 动画会覆盖居中变换 */
  left: 50%; margin-left: -500px;
  top: 44px;
  width: 1000px;
  background: var(--c-frosted);
  backdrop-filter: blur(20px);
  -webkit-backdrop-filter: blur(20px);
  border: 1px solid var(--c-hairline);
  border-radius: var(--r-panel);
  box-shadow: var(--sh-raised);
  padding: 26px 30px 20px;
  z-index: 80;
  text-align: center;
}
.j-title { font-size: 21pt; font-weight: 900; margin-bottom: 4px; }

.j-board {
  position: relative;
  width: 940px; height: 380px;
  margin: 0 auto;
}
.j-path { position: absolute; inset: 0; width: 100%; height: 100%; }

/* 站点节点（圆形关卡按钮：图标主体 + 编号角标） */
.j-node {
  position: absolute;
  width: 72px; height: 72px;
  margin: -36px 0 0 -36px;          /* 以坐标为中心 */
  border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  background: var(--c-surface);
  border: 3px dashed var(--c-sky-light);
  color: var(--c-ink-soft);
  box-shadow: var(--sh-card);
}
.j-node .j-icon { width: 34px; height: 34px; display: block; opacity: 0.55; }
.j-node .j-icon svg { width: 100%; height: 100%; }
.j-node .j-num {
  position: absolute;
  top: -7px; right: -7px;
  width: 26px; height: 26px;
  border-radius: 50%;
  background: var(--c-surface);
  border: 2px solid var(--c-sky-light);
  color: var(--c-ink-soft);
  font-size: 12pt; font-weight: 900;
  display: flex; align-items: center; justify-content: center;
}
.j-node.done {
  border: 3px solid var(--c-sky);
  background: var(--c-sky);
  color: #fff;
}
.j-node.done .j-icon { opacity: 1; }
.j-node.done .j-num { background: var(--c-ok); border-color: var(--c-ok); }
.j-node.done .j-check {
  width: 11px; height: 7px;
  border-left: 3px solid #fff;
  border-bottom: 3px solid #fff;
  transform: rotate(-45deg) translateY(-1px);
  display: block;
}
.j-node.next {
  border: 3px solid var(--c-sky);
  color: var(--c-sky);
  animation: kf-dot-breathe 1.8s ease-in-out infinite;
}
.j-node.next .j-icon { opacity: 1; }
.j-node.next .j-num { border-color: var(--c-sky); color: var(--c-sky); }
.j-node.just-lit { animation: kf-pop-in 600ms var(--ease) 400ms both; }

/* 装饰云朵（静态，不动画） */
.j-cloud {
  position: absolute;
  width: 110px; height: 34px;
  background: rgba(138, 209, 250, 0.22);
  border-radius: 20px;
  pointer-events: none;
}
.j-cloud::before {
  content: "";
  position: absolute;
  left: 22px; top: -16px;
  width: 46px; height: 32px;
  background: inherit;
  border-radius: 50%;
}

/* "下一站"气泡 */
.j-bubble {
  position: absolute;
  top: -46px; left: 50%;
  transform: translateX(-50%);
  background: var(--c-sky);
  color: #fff;
  font-size: 13pt; font-weight: 700;
  padding: 4px 14px;
  border-radius: 14px;
  white-space: nowrap;
  animation: kf-bubble-bob 1.6s ease-in-out infinite;
}
.j-bubble::after {
  content: "";
  position: absolute;
  bottom: -6px; left: 50%;
  transform: translateX(-50%);
  border-left: 7px solid transparent;
  border-right: 7px solid transparent;
  border-top: 7px solid var(--c-sky);
}
@keyframes kf-bubble-bob {
  0%, 100% { transform: translateX(-50%) translateY(0); }
  50% { transform: translateX(-50%) translateY(-6px); }
}

.j-label {
  position: absolute;
  top: 70px; left: 50%;
  transform: translateX(-50%);
  font-size: 14pt; font-weight: 700;
  color: var(--c-ink-soft);
  white-space: nowrap;
}
.j-node.done .j-label, .j-node.next .j-label { color: var(--c-ink); }

.j-btn-row { display: flex; justify-content: center; margin-top: 2px; }
.j-btn-row .btn-primary { min-height: 56px; padding: 0 56px; }

/* ---------- 反馈 toast ---------- */
.toast {
  position: absolute;
  left: 50%; top: 140px;
  transform: translateX(-50%);
  background: var(--c-sky-bg);
  border: 1px solid var(--c-hairline);
  border-radius: 26px;
  box-shadow: var(--sh-card);
  padding: 12px 30px;
  font-size: 16pt; font-weight: 700;
  color: var(--c-ink);
  z-index: 85;
  animation: kf-drop-in 400ms var(--ease) both;
}

/* ---------- 开始遮罩（解锁音频） ---------- */
#start-overlay {
  position: absolute; inset: 0;
  background: var(--c-bg);
  display: flex; flex-direction: column;
  align-items: center; justify-content: center;
  gap: 30px;
  z-index: 200;
}
#start-overlay h1 { font-size: var(--fs-title); font-weight: 900; }
#start-overlay p  { font-size: 16pt; color: var(--c-ink-soft); }
.name-input {
  width: 380px;
  height: 64px;
  border: 2px solid var(--c-sky-light);
  border-radius: 32px;
  background: var(--c-surface);
  font-family: inherit;
  font-size: 20pt; font-weight: 700;
  color: var(--c-ink);
  text-align: center;
  outline: none;
  box-shadow: var(--sh-card);
}
.name-input:focus { border-color: var(--c-sky); }
.name-input::placeholder { color: var(--c-ink-soft); font-weight: 500; }

.btn-pause.paused { color: var(--c-retry); border-color: var(--c-retry); }

/* ---------- 开发跳页控件（角落隐藏） ---------- */
#dev-jump {
  position: fixed;
  right: 10px; bottom: 10px;
  z-index: 300;
  opacity: 0.25;
  transition: opacity 200ms;
  display: flex; gap: 6px; align-items: center;
  font-size: 12px;
}
#dev-jump:hover { opacity: 1; }
#dev-jump select, #dev-jump button {
  font-size: 12px;
  padding: 4px 8px;
  border: 1px solid var(--c-hairline);
  border-radius: 8px;
  background: var(--c-surface);
  color: var(--c-ink);
  cursor: pointer;
}

/* 结束卡（goto 到未实现页面时） */
.end-card {
  position: absolute;
  left: 50%; top: 50%;
  transform: translate(-50%, -50%);
  background: var(--c-frosted);
  backdrop-filter: blur(20px);
  border: 1px solid var(--c-hairline);
  border-radius: var(--r-panel);
  box-shadow: var(--sh-raised);
  padding: 44px 60px;
  text-align: center;
  z-index: 100;
}
.end-card h2 { font-size: 24pt; font-weight: 900; margin-bottom: 12px; }
.end-card p  { font-size: 16pt; color: var(--c-ink-soft); }

/* ============================================================
 * drag_sort 模板（P1-B 两步点选分类）—— 2026-06-12
 * ============================================================ */
.ds-board {
  position: absolute; inset: 70px 40px 130px;   /* 顶让出headline，底让出字幕带 */
  display: flex; flex-direction: column; justify-content: space-between;
  pointer-events: auto;
}
.ds-items {
  display: flex; justify-content: center; gap: 14px; flex-wrap: wrap;
  padding-top: 56px;
}
.ds-card {
  width: 148px; background: var(--c-surface); border-radius: var(--r-card);
  border: 2px solid var(--c-hairline); box-shadow: var(--sh-card);
  padding: 10px 10px 8px; cursor: pointer; text-align: center;
  transition: transform var(--t-base) var(--ease), box-shadow var(--t-base), border-color var(--t-base);
}
.ds-card .ds-img { height: 96px; display: flex; align-items: center; justify-content: center; overflow: hidden; }
.ds-card .ds-img img { max-width: 100%; max-height: 100%; object-fit: contain; }
.ds-card .ds-label { font-size: 15pt; font-weight: 700; color: var(--c-ink); margin-top: 4px; }
.ds-card.selected {
  transform: translateY(-10px) scale(1.06);
  border-color: var(--c-sky); box-shadow: var(--sh-raised);
}
.ds-card.placed { opacity: 0; pointer-events: none; transition: opacity 300ms; }
.ds-card.hint-glow { animation: dsGlow 1.2s ease-in-out 3; border-color: var(--c-sky-light); }
@keyframes dsGlow {
  0%, 100% { box-shadow: var(--sh-card); }
  50% { box-shadow: 0 0 0 8px rgba(79, 176, 240, 0.25); }
}
.ds-bins { display: flex; justify-content: center; gap: 40px; }
.ds-bin {
  width: 420px; min-height: 200px; border-radius: var(--r-panel);
  background: var(--c-frosted); border: 2.5px dashed var(--c-sky-light);
  backdrop-filter: blur(6px); cursor: pointer; padding: 10px 14px;
  transition: border-color var(--t-base), background var(--t-base);
}
.ds-bin:hover { border-color: var(--c-sky); }
.ds-bin.flash { border-color: var(--c-ok); background: var(--c-ok-bg); border-style: solid; }
.ds-bin-label {
  text-align: center; font-size: 18pt; font-weight: 900; color: var(--c-ink);
  margin-bottom: 6px;
}
.ds-bin-slot { display: flex; gap: 6px; flex-wrap: wrap; justify-content: center; }
.ds-bin-slot .ds-thumb {
  width: 86px; padding: 4px; pointer-events: none; opacity: 1;
}
.ds-bin-slot .ds-thumb .ds-img { height: 54px; }
.ds-bin-slot .ds-thumb .ds-label { font-size: 10pt; margin-top: 2px; }

/* 答错反馈：琥珀摇头（全系统不出现红色与✕） */
.amber-shake {
  animation: amberShake 0.6s var(--ease);
  border-color: var(--c-retry) !important;
  background: var(--c-retry-bg) !important;
}
@keyframes amberShake {
  0%, 100% { transform: translateX(0); }
  20% { transform: translateX(-10px); }
  40% { transform: translateX(9px); }
  60% { transform: translateX(-6px); }
  80% { transform: translateX(4px); }
}

/* ============================================================
 * quiz（runQuizChoice：晋级赛 / 受众热身 / judge 共用）
 * ============================================================ */
.choice-wrap { position: absolute; left: 0; right: 0; bottom: 130px; z-index: 45; }
.quiz-stim {
  display: flex; justify-content: center; margin-bottom: 12px;
}
.quiz-stim img { max-height: 200px; max-width: 320px; object-fit: contain;
  background: var(--c-surface); border-radius: var(--r-card);
  box-shadow: var(--sh-card); padding: 10px; }
.choice-card.revealed { outline: 3px solid var(--c-sky); outline-offset: 3px; }
/* two_compare：两张大图卡左右对比（晋级赛） */
.layout-two_compare { bottom: 150px; }
.layout-two_compare .choice-grid { gap: 46px; }
.layout-two_compare .choice-card { width: 330px; }
.layout-two_compare .choice-card .cc-img { height: 210px; }

/* P3-A 委托卡：一句话说明 */
.choice-card .cc-desc {
  font-size: 12pt; font-weight: 500; color: var(--c-ink-soft);
  padding: 0 8px 8px; line-height: 1.3;
}

/* ============================================================
 * UI-P3B-01 三问题卡（2026-06-13）
 * ============================================================ */
.qcard-row { display: flex; gap: 26px; justify-content: center; align-items: stretch; }
.qcard {
  width: 270px; background: var(--c-frosted); backdrop-filter: blur(8px);
  border: 1px solid var(--c-hairline); border-radius: var(--r-card);
  box-shadow: var(--sh-card); padding: 26px 20px; text-align: center;
}
.qcard .qc-num {
  width: 52px; height: 52px; margin: 0 auto 12px; border-radius: 50%;
  background: var(--c-sky); color: #fff; font-size: 24pt; font-weight: 900;
  display: flex; align-items: center; justify-content: center;
}
.qcard .qc-text { font-size: 19pt; font-weight: 700; color: var(--c-ink); line-height: 1.4; }

/* ============================================================
 * UI-MAP-SIX 六关总地图（2026-06-13）
 * ============================================================ */
.six-map {
  position: absolute; inset: 14px 40px 124px; z-index: 70;
  border-radius: var(--r-panel); overflow: hidden;
  background: var(--c-frosted); backdrop-filter: blur(10px);
  border: 1px solid var(--c-hairline); box-shadow: var(--sh-raised);
}
.six-map .sm-board {
  position: absolute; inset: 0;
  background-size: 100% 100%;   /* 与锚点标定坐标系一致（轻微拉伸可接受） */
}
.six-map .sm-node {
  position: absolute; transform: translate(-50%, -50%);
  width: 200px; padding: 12px 10px; text-align: center;
  background: rgba(255, 255, 255, 0.92); border-radius: 18px;
  border: 2.5px solid var(--c-sky-light); box-shadow: var(--sh-card);
}
.six-map .sm-num { font-size: 13pt; font-weight: 900; color: var(--c-sky); }
.six-map .sm-label { font-size: 16pt; font-weight: 700; color: var(--c-ink); margin-top: 2px; }
.six-map .sm-node.locked { opacity: 0.55; border-style: dashed; }
.six-map .sm-node.current { border-color: var(--c-sky); animation: smBreath 1.6s ease-in-out infinite; }
@keyframes smBreath {
  0%, 100% { box-shadow: var(--sh-card); transform: translate(-50%, -50%) scale(1); }
  50% { box-shadow: 0 0 0 10px rgba(79, 176, 240, 0.22); transform: translate(-50%, -50%) scale(1.04); }
}
.six-map .sm-node.done { border-color: var(--c-ok); }
/* 正在讲到的关（反馈#1）：放大+亮蓝光环+置顶，覆盖 locked 的半透明 */
.six-map .sm-node.walking {
  opacity: 1 !important; z-index: 6; border-color: var(--c-sky); border-style: solid;
  animation: smWalk 0.9s ease-in-out infinite;
}
@keyframes smWalk {
  0%, 100% { box-shadow: 0 0 0 6px rgba(79, 176, 240, 0.30); transform: translate(-50%, -50%) scale(1.08); }
  50% { box-shadow: 0 0 0 14px rgba(79, 176, 240, 0.16); transform: translate(-50%, -50%) scale(1.14); }
}
.six-map .sm-stamp {
  position: absolute; right: -14px; top: -16px; width: 64px; height: 64px;
  border-radius: 50%; background: rgba(255, 212, 96, 0.92);
  color: #8a5a00; font-size: 14pt; font-weight: 900;
  display: flex; align-items: center; justify-content: center;
  transform: rotate(12deg); box-shadow: var(--sh-card);
  border: 2px solid rgba(255, 255, 255, 0.8);
}

/* display:full 整图模式（2026-06-13反馈#3）：素材即场景画面，铺满素材区不叠卡 */
.layer.full img {
  width: 100%; height: 100%; max-width: 100%; max-height: 100%;
  object-fit: cover; border: none; border-radius: 18px;
  box-shadow: none; background: none;
}

/* 真拖拽手势（2026-06-13反馈#5：孩子会"拖"，拖与点选双模并存） */
.ds-card { touch-action: none; }
.ds-card.dragging {
  z-index: 60; transition: none; cursor: grabbing;
  box-shadow: var(--sh-raised);
}
.ds-card, .ds-card img { -webkit-user-drag: none; user-select: none; }

/* 预载关卡进度条 */
.preload-bar { margin-top: 26px; width: 420px; }
.preload-bar .pb-text { font-size: 14pt; color: var(--c-ink-soft); text-align: center; margin-bottom: 10px; }
.preload-bar .pb-track { height: 14px; border-radius: 7px; background: var(--c-sky-bg); overflow: hidden; }
.preload-bar .pb-fill { height: 100%; width: 0; background: var(--c-sky); border-radius: 7px; transition: width 200ms; }

/* 动画舞台层（lottie svg 撑满） */
.layer.anim-stage svg { width: 100% !important; height: 100% !important; }

/* 语音门控按钮（讲解未完置灰，2026-06-13反馈#1） */
.btn-primary:disabled, .btn-primary.voice-gated {
  background: var(--c-hairline); color: rgba(43, 60, 74, 0.45);
  cursor: default; box-shadow: none;
}

/* ============================================================
 * form_card 任务卡填写（P5-A，2026-06-13）
 * ============================================================ */
.fc-card {
  position: absolute; left: 50%; top: 46%; transform: translate(-50%, -50%);
  display: grid; grid-template-columns: repeat(2, minmax(280px, 1fr)); gap: 20px;
  width: min(78%, 760px); z-index: 30;
}
.fc-card-warmup { grid-template-columns: 1fr; width: min(70%, 620px); }
.fc-cell {
  background: var(--c-frosted); backdrop-filter: blur(8px);
  border: 1.5px solid var(--c-hairline); border-radius: var(--r-card);
  box-shadow: var(--sh-card); padding: 18px 20px; min-height: 92px;
  transition: border-color 200ms, box-shadow 200ms, transform 200ms;
}
.fc-cell-label { font-size: 14pt; font-weight: 700; color: var(--c-sky); margin-bottom: 8px; }
.fc-cell-val { font-size: 19pt; font-weight: 700; color: var(--c-ink); min-height: 26px; }
.fc-cell.active { border-color: var(--c-sky); box-shadow: 0 0 0 5px rgba(79,176,240,0.18); transform: scale(1.03); }
.fc-cell.filled .fc-cell-val { color: var(--c-ink); }
.fc-cell.clickable { cursor: pointer; }
.fc-cell.clickable:hover { border-color: var(--c-sky-light); }
.fc-cell.fault { border-color: var(--c-amber, #F2A93B); box-shadow: 0 0 0 5px rgba(242,169,59,0.2); }

/* 底部输入面板（字幕带之上） */
.fc-input {
  position: absolute; left: 0; right: 0; bottom: 132px; z-index: 46;
  display: flex; flex-direction: column; align-items: center; gap: 14px;
}
.fc-chips { display: flex; flex-wrap: wrap; gap: 12px; justify-content: center; max-width: 80%; }
.fc-chips.pulse { animation: chipsPulse 0.8s ease 2; }
@keyframes chipsPulse { 50% { transform: scale(1.06); } }
.fc-chip {
  padding: 12px 22px; font-size: 17pt; font-weight: 700;
  background: #fff; color: var(--c-ink); border: 1.5px solid var(--c-sky-light);
  border-radius: 999px; box-shadow: var(--sh-card); cursor: pointer;
  min-height: 52px;
}
.fc-chip:hover { background: var(--c-sky-bg); }
.fc-vrow { display: flex; align-items: center; gap: 12px; }
.fc-mic { width: 64px; height: 64px; }
.fc-mic.shake-hint { animation: amberShake 0.6s; }
.fc-text-input {
  width: 320px; height: 52px; padding: 0 18px; font-size: 17pt;
  border: 1.5px solid var(--c-sky-light); border-radius: 14px; background: #fff;
}
.fc-ok { height: 52px; }

/* ============================================================
 * reveal_demo / 关键词 / 发布（P4-A / P6-A / P6-B / P7-A，2026-06-14）
 * ============================================================ */

/* —— 思考中覆盖层 —— */
.thinking-chip {
  position: absolute; left: 50%; top: 22%; transform: translateX(-50%);
  display: flex; align-items: center; gap: 12px; z-index: 48;
  padding: 12px 22px; background: var(--c-frosted); backdrop-filter: blur(10px);
  border: 1.5px solid var(--c-hairline); border-radius: 999px; box-shadow: var(--sh-card);
  font-size: 16pt; font-weight: 700; color: var(--c-sky);
}
.thinking-chip .tc-bulb {
  width: 18px; height: 18px; border-radius: 50%; background: var(--c-sun);
  box-shadow: 0 0 12px var(--c-sun); animation: tcBlink 1s ease-in-out infinite;
}
@keyframes tcBlink { 50% { opacity: 0.3; box-shadow: 0 0 4px var(--c-sun); } }
.thinking-chip .tc-dots { display: flex; gap: 5px; }
.thinking-chip .tc-dots i {
  width: 8px; height: 8px; border-radius: 50%; background: var(--c-sky-light);
  animation: tcDot 1.1s ease-in-out infinite;
}
.thinking-chip .tc-dots i:nth-child(2) { animation-delay: 0.18s; }
.thinking-chip .tc-dots i:nth-child(3) { animation-delay: 0.36s; }
@keyframes tcDot { 30% { transform: translateY(-6px); opacity: 1; } 0%, 60% { opacity: 0.4; } }
.mascot.thinking { filter: brightness(1.06); }

/* —— P4-A 两张对照任务卡 —— */
.demo-cards {
  position: absolute; left: 50%; top: 44%; transform: translate(-50%, -50%);
  display: flex; gap: 34px; z-index: 30;
}
.dc-card {
  width: 300px; background: var(--c-frosted); backdrop-filter: blur(8px);
  border: 1.5px solid var(--c-hairline); border-radius: var(--r-card);
  box-shadow: var(--sh-card); padding: 20px 22px;
}
.dc-clear { border-color: var(--c-sky); box-shadow: 0 0 0 3px rgba(79,176,240,0.16), var(--sh-card); }
.dc-title { font-size: 18pt; font-weight: 900; color: var(--c-ink); margin-bottom: 14px; text-align: center; }
.dc-clear .dc-title { color: var(--c-sky); }
.dc-row { display: flex; justify-content: space-between; gap: 12px; padding: 8px 0; border-top: 1px solid var(--c-hairline); }
.dc-k { font-size: 13.5pt; font-weight: 700; color: var(--c-ink-soft); white-space: nowrap; }
.dc-v { font-size: 15pt; font-weight: 700; color: var(--c-ink); text-align: right; }

/* —— P4-A 文生图对比 —— */
.reveal-compare {
  position: absolute; inset: 0; display: flex; align-items: center; justify-content: center;
  gap: 46px; padding-bottom: var(--caption-band, 110px);
}
.rc-col { display: flex; flex-direction: column; align-items: center; gap: 10px; }
.rc-frame {
  width: 240px; aspect-ratio: 3 / 4; border-radius: 18px; overflow: hidden;
  background: #fff; border: 1.5px solid var(--c-hairline); box-shadow: var(--sh-card);
  display: flex; align-items: center; justify-content: center;
}
.rc-frame img { width: 100%; height: 100%; object-fit: cover; }
.rc-frame.rc-empty { color: var(--c-ink-soft); font-size: 14pt; }
.rc-col.highlight .rc-frame { border-color: var(--c-sky); box-shadow: 0 0 0 4px rgba(79,176,240,0.22), var(--sh-raised); }
.rc-cap { font-size: 16pt; font-weight: 700; color: var(--c-ink); }
.rc-col.highlight .rc-cap { color: var(--c-sky); }

/* —— P6-A 名字卡 —— */
.name-pick { display: flex; flex-direction: column; align-items: center; gap: 16px; }
.name-grid { display: flex; flex-wrap: wrap; gap: 16px; justify-content: center; }
.name-card {
  min-width: 180px; padding: 22px 30px; font-size: 24pt; font-weight: 900; color: var(--c-ink);
  background: #fff; border: 2px solid var(--c-sky-light); border-radius: var(--r-card);
  box-shadow: var(--sh-card); cursor: pointer; text-align: center;
  transition: transform 180ms, box-shadow 180ms, border-color 180ms;
}
.name-card:hover { transform: translateY(-4px); border-color: var(--c-sky); box-shadow: var(--sh-raised); }
.name-card.selected { border-color: var(--c-sky); background: var(--c-sky-bg); }
.name-actions { display: flex; gap: 22px; }
.name-edit .ne-row { display: flex; gap: 12px; align-items: center; }

/* —— P6-B 关键词词云 —— */
.word-pick { display: flex; flex-direction: column; align-items: center; gap: 18px; }
.word-cloud { display: flex; flex-wrap: wrap; gap: 13px; justify-content: center; max-width: 84%; }
.word-chip {
  padding: 12px 24px; font-size: 18pt; font-weight: 700; color: var(--c-ink);
  background: #fff; border: 1.5px solid var(--c-sky-light); border-radius: 999px;
  box-shadow: var(--sh-card); cursor: pointer; min-height: 52px;
  transition: transform 150ms, background 150ms, border-color 150ms;
}
.word-chip:hover { background: var(--c-sky-bg); }
.word-chip.selected { background: var(--c-sky); color: #fff; border-color: var(--c-sky); transform: scale(1.05); }
.word-chip.add-custom { border-style: dashed; color: var(--c-sky); font-weight: 700; }
.word-actions { display: flex; }

/* —— P7-A 三能力卡 + 品牌档案卡 —— */
.ability-row {
  position: absolute; left: 50%; top: 40%; transform: translate(-50%, -50%);
  display: flex; gap: 26px; z-index: 30;
}
.ability-card {
  width: 158px; padding: 22px 16px; text-align: center; background: var(--c-frosted);
  backdrop-filter: blur(8px); border: 1.5px solid var(--c-hairline);
  border-radius: var(--r-card); box-shadow: var(--sh-card);
}
.ability-card .ab-icon { color: var(--c-sky); }
.ability-card .ab-icon svg { width: 46px; height: 46px; }
.ability-card .ab-title { font-size: 19pt; font-weight: 900; color: var(--c-ink); margin-top: 8px; }
.ability-card .ab-sub { font-size: 13pt; font-weight: 500; color: var(--c-ink-soft); margin-top: 4px; }

.brand-profile {
  position: absolute; left: 50%; top: 35%; transform: translate(-50%, -50%);  /* 居中落在背景白色展板内（反馈#3）*/
  width: min(64%, 500px); padding: 20px 30px; text-align: center; z-index: 30;
  background: var(--c-frosted); backdrop-filter: blur(12px);
  border: 1.5px solid var(--c-hairline); border-radius: var(--r-panel); box-shadow: var(--sh-raised);
}
.brand-profile .bp-badge { font-size: 14pt; font-weight: 700; color: var(--c-sky); letter-spacing: 2px; }
.brand-profile .bp-name { font-size: 38pt; font-weight: 900; color: var(--c-ink); margin: 8px 0 16px; }
.brand-profile .bp-chips { display: flex; flex-wrap: wrap; gap: 10px; justify-content: center; margin-bottom: 18px; }
.brand-profile .bp-chip {
  padding: 6px 16px; font-size: 15pt; font-weight: 700; color: var(--c-sky);
  background: var(--c-sky-bg); border-radius: 999px;
}
.brand-profile .bp-meta { display: flex; gap: 26px; justify-content: center; font-size: 15pt; color: var(--c-ink); }
.brand-profile .bp-meta .bp-k { font-weight: 700; color: var(--c-ink-soft); margin-right: 8px; }
.glass-seal.settled { transition: transform 300ms; }

/* —— 逐句同步提示卡（反馈#6）：叙述讲到关键词/知识点时弹出 —— */
.cue-cards {
  position: absolute; left: 0; right: 0; top: 30%;
  display: flex; flex-wrap: wrap; gap: 16px; justify-content: center; align-items: center;
  z-index: 38; pointer-events: none; padding: 0 8%;
}
.cue-card {
  display: flex; flex-direction: column; align-items: center; gap: 8px;
  padding: 14px 26px; background: var(--c-frosted); backdrop-filter: blur(10px);
  border: 1.5px solid var(--c-hairline); border-radius: var(--r-card); box-shadow: var(--sh-card);
}
.cue-card .cue-text { font-size: 22pt; font-weight: 900; color: var(--c-ink); }
.cue-card.big { padding: 22px 38px; }
.cue-card.big .cue-text { font-size: 30pt; color: var(--c-sky); }
.cue-card .cue-img { width: 96px; height: 96px; display: flex; align-items: center; justify-content: center; }
.cue-card.big .cue-img { width: 150px; height: 150px; }
.cue-card .cue-img:empty { display: none; }
.cue-card .cue-img img { max-width: 100%; max-height: 100%; object-fit: contain; border-radius: 14px; }

/* —— P7-A 发布演出：作品飞上真展台（代码动效，决策A） —— */
.publish-spotlight {
  position: absolute; left: 50%; top: 60%; width: 420px; height: 300px;
  transform: translate(-50%, -50%); pointer-events: none; z-index: 28;
  background: radial-gradient(ellipse at center,
    rgba(255, 255, 255, 0.55) 0%, rgba(138, 209, 250, 0.30) 38%, rgba(138, 209, 250, 0) 72%);
  opacity: 0; transition: opacity 600ms ease;
}
.publish-spotlight.on { opacity: 1; }
.confetti-bit {
  position: absolute; top: 18%; width: 11px; height: 11px; border-radius: 3px;
  pointer-events: none; z-index: 40;
}

/* —— 发布页麦克风下沉紧凑版：让出上方展板给品牌卡（反馈#3） —— */
.mic-wrap.low { bottom: 44px; }
.mic-wrap.low .mic-button { width: 118px; height: 118px; }

/* —— 语音识别后可编辑确认框（反馈#4：给孩子改错字的机会；多行文本域，空间更宽松） —— */
.mic-edit { display: flex; gap: 12px; align-items: flex-end; justify-content: center; margin-top: 6px; }
.mic-edit-area {
  width: min(72%, 560px); min-height: 64px; padding: 12px 18px;
  font-size: 18pt; font-weight: 500; font-family: var(--font-family); line-height: 1.6;
  color: var(--c-ink); background: #fff; text-align: center;
  border: 1.5px solid var(--c-sky-light); border-radius: 16px; resize: none; outline: none;
  box-shadow: var(--sh-card);
}
.mic-edit-area:focus { border-color: var(--c-sky); }
.mic-edit .btn-primary { height: 52px; flex: none; }
