/* v2u 智能输入：只用 v2-theme.css / style.css 已有变量；动效仅按钮文字 150ms 淡出淡入（class 切换，供动效工程师接管） */
#generate-btn-label { transition: opacity var(--v2-dur-xs, 150ms) var(--v2-ease, ease); }
#generate-btn-label.v2u-si-out { opacity: 0; }
#generate-btn.v2u-si-blocked { cursor: not-allowed; }
.v2u-input-hint:empty, .v2u-input-hint[hidden] { display: none; }
.v2u-input-hint { margin: 6px 2px 0; font: 400 13px/1.5 var(--font-ui); color: var(--v2-text-2); }
/* 衡舟 17:36（V2U-VISUAL V31）：首页 v2u 不出现红色。错误态文字用 --wv-text-2，输入框/图标不变色。
   覆盖 style.css:1031/1287 的 #page-home .v2u-input-hint.is-error { color: var(--wv-danger) }（选择器更具体，不依赖加载顺序） */
#page-home #v2u-input-hint.v2u-input-hint.is-error, #page-home #wv-input-err.is-error, .v2u-input-hint.is-error { color: var(--wv-text-2); }
.v2u-random { display: inline-block; margin: 6px 2px 0; padding: 0; border: 0; background: none;
  font: 500 13px/1.5 var(--font-ui); color: var(--v2-text-2); text-decoration: underline; text-underline-offset: 3px; cursor: pointer; }
.v2u-random:hover { color: var(--v2-text-1); }
.v2u-random:focus-visible, .v2u-story-diff-next:focus-visible, .v2u-diff-opt:focus-visible {
  outline: var(--v2-ring-width, 2px) solid var(--v2-ring); outline-offset: 2px; }
.v2u-story-diff { margin: 0 0 12px; font: 400 13px/1.5 var(--font-ui); color: var(--v2-text-2); }
.v2u-story-diff b { font-weight: 600; color: var(--v2-text-1); }
.v2u-story-diff .dot-sep { margin: 0 6px; color: var(--v2-text-3); }
.v2u-story-diff-next { padding: 0; border: 0; background: none; font: inherit; color: var(--v2-text-1);
  text-decoration: underline; text-underline-offset: 3px; cursor: pointer; }
.v2u-diff-pop { position: absolute; z-index: 1000; min-width: 232px; padding: 6px; background: var(--v2-card-bg);
  border: 1px solid var(--v2-line); border-radius: var(--v2-radius-control); box-shadow: var(--v2-shadow); font: 400 14px/1.4 var(--font-ui); }
.v2u-diff-opt { display: flex; gap: 8px; align-items: center; padding: 9px 10px; border-radius: calc(var(--v2-radius-control) - 4px);
  color: var(--v2-text-1); cursor: pointer; }
.v2u-diff-opt:hover, .v2u-diff-opt:focus { background: var(--v2-ui-tint); outline: none; }
.v2u-diff-opt.is-current { color: var(--v2-text-3); cursor: default; background: none; }
.v2u-diff-check { display: inline-flex; width: 16px; height: 16px; flex: none; color: var(--v2-text-3); }
.v2u-diff-check .wv-icon { width: 16px; height: 16px; }
.v2u-diff-pop.is-busy .v2u-diff-opt { pointer-events: none; opacity: .6; }
.v2u-diff-msg { margin: 4px 10px 4px; font-size: 13px; color: var(--v2-text-2); }
@media (prefers-reduced-motion: reduce) { #generate-btn-label { transition: none; } }
/* aria-disabled 置灰（与 style.css:178 同值）。v2u R2 A1（知微 18:12 V2U-FLOW）：空态主按钮保持 --wv-btn 实色（只留 aria-disabled + 拦截 + 行内提示）；
   置灰只给无效态 / 离线态（smart-input.js 给 .v2u-si-blocked） */
#generate-btn.v2u-si-blocked[aria-disabled="true"], #v2u-adjust-apply[aria-disabled="true"], .v2u-story-diff-next[aria-disabled="true"] { opacity: .4; cursor: not-allowed; }
/* K5：调整面板里的模式行、难度行和「清空」在首帧前就不渲染（display:none → 不进 Tab 顺序、不进无障碍树）；JS 的 hidden 只是兜底。
   这些 DOM 待 index.html 可改时直接删除（见 NOTES「后续清理项」）。#difficulty-tags 仍可被脚本 .click() 设级。 */
#v2u-adjust-panel .mode-row,
#v2u-adjust-panel .difficulty-row,
#v2u-adjust-panel #preset-packs-bar [onclick="clearWordsInput()"] { display: none !important; }
/* 调整面板脚 / toast 内动作按钮 / 来点灵感 */
.v2u-adjust-foot { display: flex; flex-direction: column; gap: 8px; margin-top: 16px; }
.v2u-adjust-actions { display: flex; gap: 16px; align-items: center; }
.v2u-toast-action { pointer-events: auto; margin-left: 4px; padding: 0; border: 0; background: none; font: inherit; color: inherit; text-decoration: underline; text-underline-offset: 3px; cursor: pointer; }
.v2u-adjust-inspire[aria-busy="true"] { opacity: .6; cursor: progress; }
#page-home #generate-btn[aria-disabled="true"]:not(.v2u-si-blocked) { opacity: 1; background: var(--wv-btn); color: var(--wv-on-btn); cursor: pointer; }
.v2u-inspire-msg { margin: 4px 0 0; font-size: 13px; color: var(--v2-text-2); }
.v2u-inspire-msg:empty { display: none; }

/* ===== QA-1904（衡舟 19:04，Mochi 抽帧）：只改本文件，app.js/motion.css 不动 ===== */
/* #1 输入词标签：统一高度 + 居中对齐，带/不带中文释义的 chip 基线一致 */
#page-home #word-crystals-tray { align-items: center; }
#page-home .word-crystal { display: inline-flex; align-items: center; vertical-align: middle; line-height: 1.4; }
/* #3 故事页「调整」与「难度：探险者 · 换一个」同字号、同基线（btn-text 的 inline-flex/16px/min-height 去掉） */
.v2u-story-diff .v2u-adjust-btn { display: inline; min-height: 0; padding: 0; border: 0; background: none;
  font: inherit; line-height: inherit; vertical-align: baseline; margin-left: 16px; color: var(--v2-text-1); text-decoration: underline; text-underline-offset: 3px; cursor: pointer; }
.v2u-story-diff .v2u-adjust-btn:focus-visible { outline: var(--v2-ring-width, 2px) solid var(--v2-ring); outline-offset: 2px; }
/* #4 底部悬浮工具条：实底磨砂（≥94% 不透明 + blur），正文底部留足 toolbar 高度 + 安全区 + 48px */
body[data-page="story"] .reader-toolbar { background: var(--wv-card);   /* 复用故事卡 surface token（C2 surface ≤6），实底 + 磨砂 */
  -webkit-backdrop-filter: saturate(1.2) blur(16px); backdrop-filter: saturate(1.2) blur(16px); }
body[data-page="story"] .story-container { padding-bottom: calc(var(--toolbar-h, 56px) + 16px + env(safe-area-inset-bottom, 0px) + 96px); }
/* #6 段落朗读：两端统一放在段落右侧、44×44 可点区、常显、图标 20px、text-2 色（浅/深 ≥3:1） */
#page-story .story-paragraph { position: relative; }
#page-story .para-read-btn { position: absolute; left: auto; right: -56px; top: -8px; float: none; margin: 0; width: 44px; height: 44px;
  opacity: 1; color: var(--wv-text-2, var(--v2-text-2)); }
#page-story .para-read-btn .wv-icon { width: 20px; height: 20px; }
#page-story .para-read-btn:hover { color: var(--wv-text-1, var(--v2-text-1)); }
@media (max-width: 1023px) {
  #page-story .para-read-btn { position: relative; right: auto; top: auto; float: right; margin: -6px -12px 0 4px; }   /* 窄屏沿用原 float 右侧，只放大到 44 */
}

/* s13（守望 M4）：「换一个」带 .btn-text（inline-flex + min-height 32/48）→ 与「调整」同一处理，回到文字基线 */
.v2u-story-diff .v2u-story-diff-next { display: inline; min-height: 0; padding: 0; line-height: inherit; vertical-align: baseline; position: relative; }
/* 文字回到基线后盒子只有 20px 高：用透明伪元素把点击区补回 ≥48px（不占布局、不可见） */
.v2u-story-diff .v2u-story-diff-next::after, .v2u-story-diff .v2u-adjust-btn::after { content: ""; position: absolute; left: -4px; right: -4px; top: 50%; height: 48px; transform: translateY(-50%); }
.v2u-story-diff .v2u-adjust-btn { position: relative; }
