/* profile: header letter-avatar + profile card (docs/user-profile.md §3) — same visual family as .auth-card */

/* ---------- §3.1 header pill: genre vinyl disc + display name inside #authBtn ----------
   A mini vinyl record: dark grooved shell + a colored genre label with an emoji stamp.
   Same visual family as the playing deck (disc) and the logo (eq bars). Zero assets. */
.avatar-disc{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:50%;flex:none;position:relative;
  background:
    radial-gradient(circle at 32% 26%, rgba(255,255,255,.30), transparent 46%),
    repeating-radial-gradient(circle at 50% 50%, #131020 0 1.5px, #241d36 1.5px 3px);
  box-shadow:0 2px 8px rgba(0,0,0,.45)}
.avatar-disc-label{display:flex;align-items:center;justify-content:center;width:64%;height:64%;border-radius:50%;box-shadow:inset 0 0 0 1.5px rgba(255,255,255,.25)}
.avatar-disc-label svg{width:72%;height:72%;color:#fff;filter:drop-shadow(0 1px 1px rgba(0,0,0,.28))}
.auth-name{display:inline-block;max-width:140px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:middle;margin-left:7px}

/* ---------- §3.2 profile card (#profileModal reuses .auth + .auth-card) ---------- */
.profile-card{gap:14px;text-align:left}
.profile-avatar{margin:2px auto 0;box-shadow:0 10px 26px rgba(0,0,0,.4);border-radius:50%}
.profile-avatar .avatar-disc{width:56px;height:56px}
.profile-avatar .avatar-disc-label{box-shadow:inset 0 0 0 2px rgba(255,255,255,.25)}

/* ---------- avatar picker: one disc per music genre, tap to select（保存统一落库） ---------- */
/* 8×34 + 7×3 = 293：375 视口卡内宽 295（343 − 48 padding）、390 为 310、桌面 312，均一行放全；
   1003 工单 W10——旧 gap 4 + padding 2 需 304px，375 资料弹层曾折 7+1（s89）第 8 枚孤悬；
   收 gap 4→3、去水平 padding，与计划向导同组件同规则；flex-wrap 只作更窄屏（≤360）兜底换行 */
.avatar-picker{display:flex;flex-wrap:wrap;gap:3px;justify-content:center;padding:4px 0}
.avatar-opt{flex:none;width:34px;height:34px;padding:0;border:0;background:none;cursor:pointer;border-radius:50%;transition:transform .15s}
.avatar-opt:hover{transform:scale(1.08)}
.avatar-opt .avatar-disc{width:34px;height:34px}
.avatar-opt[aria-checked="true"] .avatar-disc{box-shadow:0 0 0 2px var(--hot),0 2px 8px rgba(0,0,0,.45)}
.avatar-opt[aria-checked="true"]{transform:scale(1.05)}
.profile-field{display:flex;flex-direction:column;gap:6px}
.profile-label{font-size:12px;font-weight:700;letter-spacing:.04em;color:var(--muted)}
/* 登录名 label 的行内小注（用户定调：注册后不可修改），弱于主 label 一档 */
.profile-label-note{margin-left:6px;font-size:11px;font-weight:400;letter-spacing:0;color:var(--soft)}
/* the email is display-only: a dashed pill reads as non-editable next to the real input */
.profile-mail{margin:0;display:flex;align-items:center;min-height:44px;padding:8px 16px;border:1px dashed var(--stroke-2);border-radius:999px;background:var(--glass);color:var(--soft);font-size:13px;overflow-wrap:anywhere}
/* placeholder 要明显弱于实值（用户 2026-09-29：邮箱前缀占位白得像已填的值）；实值仍走 .auth-input 的 --ink */
.profile-card .auth-input::placeholder{color:var(--dim)}
/* 退出登录：安静文字链（2026-09-29 由胶囊大按钮降级；导出按钮移除后仅剩此一项，不再值得占一整行）——
   align-self:center 在 .auth-card 纵向 flex（css/auth.css:10）里居中收窄，悬停只变色；
   文字链热区（同 css/auth.css .auth-alt）：伪元素外扩到 ~44px 高，下划线小字外观不变 */
.profile-alt{align-self:center;position:relative;height:auto;padding:2px 6px;border:0;background:none;color:var(--muted);font-size:13px;cursor:pointer;transition:color .15s}
.profile-alt::after{content:"";position:absolute;inset:-12px -14px}
.profile-alt:hover{color:var(--ink)}
.profile-alt[disabled]{opacity:.55;cursor:default}
.profile-logout-row{display:flex;align-items:center;gap:10px;align-self:center}
.profile-logout-row .profile-alt{padding:12px 18px}
.profile-logout-row .profile-alt::after{content:none}
.profile-logout-row .profile-alt:hover{background:var(--glass);border-radius:999px}
.profile-alt.is-confirm{border:1px solid rgba(255,77,141,.5);border-radius:999px;background:rgba(255,77,141,.12);color:var(--hot)}

@media (max-width:899px){
  /* phones: shrink the disc; 名字限宽 116px（1003 工单 W4：84px 曾把 12 位用户名截成"…"，20 位上限与旧
     预算结构性冲突；≈9 个汉字/16 位字母 + …，硬底线 ≥12 字符可见；1003 工单 W22：W4 的 118 是 off-by-one
     ——≤899 按钮内容宽 142 扣头像 18+margin 7 真实可用 117，留 ≥1px 余量取 116，防省略号上顶到按钮层），
     更长的名字仍走省略号，不换行 */
  .avatar-disc{width:18px;height:18px}
  .auth-name{max-width:116px}
}

/* ---------- learn mode (docs/learn-mode.md §3 W2): 会话条 + plan-setup / check-in cards ---------- */
/* 会话条：单行 [←] 学习 x/y [按钮]；进度收成卡片背景填充宽度（#learnProg 全高底衬，完成一个词平滑前推
   ——用户 2026-10-02 定调，替代原底边发丝线；原「完成提亮/超额 combo」特效已去：4 选 1 弹卡盖住会话条，看不到）；
   isolation:isolate 让 z-index:-1 的填充层卡在卡片背景之上、内容之下（文字不被染色盖住） */
.learn-row{position:relative;display:flex;align-items:center;gap:10px;padding:9px 10px 11px 8px;background:var(--glass);border:1px solid var(--stroke);border-radius:18px;overflow:hidden;isolation:isolate}
.home-back{flex:none;display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border:0;background:transparent;color:var(--soft);border-radius:999px;transition:background .15s,color .15s}
.home-back:hover{background:var(--glass-2);color:var(--ink)}
.learn-status{flex:1;font-size:13px;font-weight:700;color:var(--soft);font-variant-numeric:tabular-nums}
/* 全高背景填充：--grad 同族的低透明底衬（文字仍走 --soft/--ink 不受色染），右缘 inset 高光即填充前沿；
   width 由 js/setProg 驱动，.45s 同原发丝线手感 */
#learnProg{position:absolute;left:0;top:0;bottom:0;z-index:-1;width:0;background:linear-gradient(95deg,rgba(255,77,141,.16),rgba(255,122,89,.13) 55%,rgba(255,181,71,.11));box-shadow:inset -1px 0 0 rgba(255,170,150,.42);transition:width .45s cubic-bezier(.3,.7,.3,1)}
.learn-btn{border:1px solid var(--stroke-2);background:var(--glass);color:var(--ink);border-radius:999px;padding:9px 18px;font-size:13px;font-weight:700;transition:background .15s,transform .15s}
.learn-btn:hover{background:var(--glass-2);transform:translateY(-1px)}
/* B8（2026-09-30 工单）：learning 态按钮禁用——会话内推进只由 下一首/打卡卡 承担，禁用态压暗且不吃悬停 */
.learn-btn:disabled{opacity:.5;cursor:default}
.learn-btn:disabled:hover{background:var(--glass);transform:none}
@media (max-width:899px){
  /* phones: 任务卡置顶（用户 2026-09-28 定调）——aside 是 display:contents（css/base.css:193），
     本卡随 .app 列参与 order 排序，落在词卡（order:1）之前；底部让位给沉底的 deck 歌曲横幅。
     2026-10-04 歌词固定带工单：上边距 10→6，给会话歌词让竖向预算 */
  .learn-row{order:-2;margin:4px 16px 0;width:auto;align-self:stretch;padding:4px 10px 4px 8px}   /* stretch 同 deck：不设会被内容宽度收缩成半宽；position 沿用基类 relative——底边发丝线靠它定位 */
  /* 复习三键：歌词（carousel order:1）与 deck（order:3）之间；与卡/deck 各留一点间隙即可（用户定调：卡要大，间隙小）；
     padding 7→5、边距 8/10→6/8 同上，按钮命中区 44 不动 */
  .review-ops{order:2;margin:4px 16px 6px;align-self:stretch;padding:5px 8px}
  /* ---------- W4（2026-09-30 工单）：移动端会话条 / 计划向导触控目标 ≥44×44（仅移动断点，桌面零变化） ---------- */
  .home-back{width:44px;height:44px}   /* 32×32 → 44×44；.learn-row padding 同步收窄（4/4），行高维持 52px 不跳 */
  .learn-btn{min-height:44px}          /* 高 ~40 → 44（视觉仅按钮增高 4px） */
  /* 1003 工单 W14：会话键行 .rev-op 40 → 44——W4 口径 44px 审计后全站仅存的 40px 主操作，
     对齐 .learn-btn 的 min-height 写法；桌面 40px 零变化，词卡/deck 不受挤压 */
  .rev-op{min-height:44px}
}
/* plan-setup card: chip family copied from .chips (css/base.css:72), but the selected state is the hot pill */
.plan-field{display:flex;flex-direction:column;gap:8px}
.plan-label{font-size:12px;font-weight:700;letter-spacing:.04em;color:var(--muted)}
.plan-chips,.goal-opts{display:flex;gap:6px;flex-wrap:wrap;justify-content:center}
.plan-chip,.goal-opt{height:34px;border:1px solid var(--stroke);background:transparent;border-radius:999px;padding:0 14px;font-size:13px;font-weight:600;color:var(--soft);transition:background .15s,color .15s}
.plan-chip:hover,.goal-opt:hover{background:var(--glass)}
.plan-chip[aria-pressed="true"],.goal-opt[aria-pressed="true"]{background:var(--hot);color:#fff;border-color:var(--hot)}
/* W4（2026-09-30 工单）：计划向导 chips 34 → 44（AC7 审计项，本单内修）。必须放在上面基类之后——
   同特异性下源序靠后者胜，放前面会被基类压掉 */
@media (max-width:899px){ .plan-chip,.goal-opt{height:44px} }
/* check-in card: the stats line under the title; buttons reuse .auth-btn / .auth-alt, no new class */
.checkin-stats{margin:0;font-size:14px;color:var(--soft);font-variant-numeric:tabular-nums}

/* ---------- review mode (docs/learn-mode.md §4 W3): quiz 弹层 + 总结卡 + 复习卡片隐藏释义 ---------- */
/* quiz 弹层：目标词夹在标题与选项之间；展示字体同 .st-word（css/base.css:134），按弹层缩一号。
   #quizOpts 出厂为空，js/review.js 唱完派 'stw:quiz-show' → app.js 填 4 个 button.quiz-opt 进去 */
.quiz-word{font:800 26px/1.15 var(--f-display);letter-spacing:-.02em;overflow-wrap:anywhere}
/* 题干（docs/learn-mode.md §4 弹四选一："这个词的意思是？"）：词名下的一行小字（2026-09-29 补缺） */
.quiz-ask{margin:0;font-size:13px;color:var(--muted)}
.quiz-opts{display:flex;flex-direction:column;gap:8px}
/* 选项：全宽玻璃胶囊（描边 + 999px 圆角），悬停同 .learn-btn（背景 + 1px 上浮）；
   quiz-pool.json 释义最长 12 字（实测 1544 条），四个都是单行 */
.quiz-opt{width:100%;min-height:46px;padding:12px 18px;border:1px solid var(--stroke-2);border-radius:999px;background:var(--glass);color:var(--ink);font-size:14px;font-weight:600;line-height:1.4;transition:background .15s,transform .15s}
.quiz-opt:hover{background:var(--glass-2);transform:translateY(-1px)}
/* 判定态（§4）：正确项绿 ✓、错选项红 ✗——答错时两项并存（标出正确答案）；答题后 JS 把全部选项
   置 disabled：未判定的其余项降透明（答过其余项降透明），判定项保色，悬停反馈一并收掉 */
.quiz-opt[disabled]{cursor:default;background:var(--glass);transform:none}
.quiz-opt[disabled]:not(.is-right):not(.is-wrong){opacity:.45}
.quiz-opt.is-right{border-color:#4ADE80;background:rgba(74,222,128,.16);color:#C9F7DC}
.quiz-opt.is-right::before{content:"✓ ";font-weight:800}
.quiz-opt.is-wrong{border-color:#FF5C5C;background:rgba(255,92,92,.13);color:#FFD0D0}
.quiz-opt.is-wrong::before{content:"✗ ";font-weight:800}
/* 揭示态来源注脚（2026-10-03 工单）：答题前 .opt-note 以 visibility 隐形占位（15px 常驻，揭示零跳动）；
   quiz/flash-result 落 opts-done 后四选项各自露源——释义题露英文源词、词形题露中文释义。
   底色沿用 .quiz-ask 一族的次要文字色（--muted）；判定态改用各自状态亮色（is-wrong 下的源词是
   本需求核心，压在红底上必须清晰可读）；flash 卡窄（330px），长释义靠省略号真实截断 */
.quiz-opt .opt-main{display:block}
.quiz-opt .opt-note{display:block;visibility:hidden;min-height:15px;font-size:11px;line-height:15px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--muted)}
.quiz-opt.is-right .opt-note{color:#C9F7DC}
.quiz-opt.is-wrong .opt-note{color:#FFD0D0}
.quiz-opts.opts-done .opt-note{visibility:visible}
/* 总结卡（#reviewSummaryModal）：标题 + 文案位 + 按钮——答对 x / y 复用 .checkin-stats，
   按钮复用 .auth-btn / .auth-alt，不新增类 */
/* 复习卡片差异（§4，用户 2026-09-28 定调收紧）：body.stw-review 由 js/review.js 独占开关——
   只留单词/读音/歌词：隐藏中文释义 .st-mean、英文例句 .st-en、搭配 .st-tip、用法注 .st-note
   （js/app.js stageHTML），歌词区高亮释义浮层 .gloss 同步隐藏（showGloss 也有守卫） */
/* 复习态释义区：留空但占位（visibility 不塌陷）——[不认识]时原地显形，歌词零位移（用户 2026-09-28 定调） */
body.stw-review .st-mean,body.stw-review .st-en,body.stw-review .st-tip,body.stw-review .st-note{visibility:hidden}
/* P9（2026-10-01 用户反馈）：答完题收卡回词面直接亮释义——body.stw-revealed（review.js settleQuiz 打上、
   前进 go()/退出 清除）；只露中文释义，例句/搭配/注仍藏（复习信息最小性不破） */
body.stw-review.stw-revealed .st-mean{visibility:visible}
body.stw-review.stw-revealed .st-mean-hint{display:none}
/* P10/P12（2026-10-01 用户反馈）：答后待前进态（学习/复习同构）——答题换普通灰底（不保留渐变，
   避免同屏双主色）、下一词升主按钮（渐变）；重播本词片段，播完自动前进 */
body.stw-revealed #rvKnow{background:var(--glass);color:var(--muted);border-color:var(--stroke);box-shadow:none;opacity:1;pointer-events:none}
body.stw-revealed #rvNext{background:var(--grad) border-box;color:#1A0C14;border-color:transparent;box-shadow:0 6px 18px rgba(255,77,141,.35)}
/* 剧透窗口=答题前（clip 播放到 quiz 弹出），gloss 全程隐没；揭示态（2026-10-11 用户反馈：答完题
   歌词高亮词的解释没回来）随 .st-mean 一并放行——词卡已亮释义，气泡再藏着就是两处口径分叉；
   前进 go() 清 stw-revealed，下一词答题前气泡重新隐没 */
body.stw-review .gloss{display:none}
body.stw-review.stw-revealed .gloss{display:inline-flex}
/* W5（2026-09-30 工单 P0，N1）：复习态隐藏 [分享]。理由：复习态宣称「隐藏释义」，而 [分享] 会把
   释义直接印到分享图上——一个按钮击穿整条防泄露契约。与 .st-mean 同一套 body.stw-review 前缀机制
   （机制一致性即收益）。[☆ 收藏]（.st-share.st-fav）不显示释义，保留可用。 */
body.stw-review .st-share:not(.st-fav){display:none}
/* 复习态释义占位区的说明行（用户 2026-09-29：空区要有「先听歌再作答」说明）：模板常驻（js/app.js
   stageHTML），仅复习态显形；学习态（重学，释义原地显形）隐形占位——复习↔学习切换零位移，歌词不动 */
.st-mean-hint{display:none;margin:-6px 0 0;font-size:12.5px;font-style:italic;color:var(--muted);text-align:center;border:1px dashed var(--stroke);border-radius:12px;padding:7px 12px}
body.stw-review .st-mean-hint{display:block}
body.stw-study .st-mean-hint{display:block;visibility:hidden}
/* F2（2026-09-29）复习态歌词区高度微调：手机上学习/复习会话条与三键把歌词区压到 ~180px，
   live 态上下各 70px 的呼吸留白占掉近八成——复习/学习态收窄到 40px，多让 ~60px 给歌词行，
   当前行居中后上下仍有余量，不再半行裁切 */
body.stw-review .stage.live .lyrics-in,body.stw-study .stage.live .lyrics-in{padding:40px 0}
/* 歌词固定带工单（2026-10-04）：移动端歌词带收到 ~140-200px，stw 态呼吸留白再收一档（40→28），
   当前行上下各多让 ~半行给歌词；必须放在上面基类之后的移动断点里，同特异性源序取胜 */
@media (max-width:899px){
  body.stw-review .stage.live .lyrics-in,body.stw-study .stage.live .lyrics-in{padding:28px 0}
}
/* 复习手动三键（docs/learn-mode.md §4）：歌词与歌曲横幅之间，复习态与不认识后的学习态都露出；
   包一层玻璃卡与上方会话条同族（用户 2026-09-28：框起来更清晰）；
   认识=主操作（渐变），不认识=玻璃胶囊，跳过=幽灵描边胶囊（2026-09-29：纯文字可点性差，加描边与「重学」同族） */
.review-ops{display:none;gap:8px;padding:7px 8px;background:var(--glass);border:1px solid var(--stroke);border-radius:18px}
body.stw-review .review-ops,body.stw-study .review-ops{display:flex}
/* P2/P3/P5（2026-10-01 掌控感工单定稿）：学习/复习同一套键行语言——
   学习两键（答题+下一词，跳过由下一词承担），复习三键（答题+下一词+跳过闪释义）；
   「重学」键退役（答错词自动进会话尾回炉）。类互斥由 js 保证（setMode/setLearnBody 启动互清） */
body.stw-learn .review-ops,body.stw-review .review-ops{display:flex}
.rev-op{flex:1;height:40px;border:1px solid var(--stroke-2);background:var(--glass);color:var(--ink);border-radius:999px;font-size:13px;font-weight:700;transition:background .15s,transform .15s}
.rev-op:hover{background:var(--glass-2);transform:translateY(-1px)}
/* 渐变+描边控件 background 必须连带 border-box（2026-10-04 边缘盖不住工单）：渐变图按默认 padding-box
   取尺寸后 repeat 平铺，1px 透明描边环里露出的是相邻平铺块（左环=上一块尾色琥珀、右环=下一块头色粉）；
   渐变按描边外沿取尺寸后环内颜色连续。background 简写会重置 origin——hover 等重写处都要连带。
   同病同修：#rvNext 答后升糖态、.auth-tab 选中态（第二个 tab 有 border-left） */
#rvKnow{background:var(--grad) border-box;color:#1A0C14;border-color:transparent;box-shadow:0 6px 18px rgba(255,77,141,.35)}
#rvKnow:hover{background:var(--grad) border-box;color:#1A0C14}
.rev-op.is-ghost{border-color:var(--stroke-2);background:transparent;color:var(--soft)}
.rev-op.is-ghost:hover{background:var(--glass);color:var(--ink);transform:none}
/* 释义卡文案（reveal）：词下方一行释义，居中 */
/* P17（2026-10-01 用户反馈）：错题回炉卡的「错题回顾」角标（仅 recap 弹卡显示，与正常门题区分） */
.quiz-tag{margin:0 0 4px;font-size:12px;font-weight:700;letter-spacing:.12em;color:var(--amber);text-align:center}
.reveal-meaning{margin:4px 0 0;font-size:15px;font-weight:600;color:var(--soft);text-align:center}

/* ---------- 闪回挑战小卡（qa_journey_user_view_0930/flashback/REQ.md）----------
   2026-10-03 用户定调：与 #quizModal（四选一门题）同一居中弹层位——闪回/错题两种胶囊的作答位置
   全站统一，不再贴右下便签款。遮罩与卡几何对齐 .auth 家族：同 veil（.55 + blur8 + padding16）、
   卡 360px/24px 圆角/同 padding/gap/text-align；入场退役自有 flash-in 右滑，改挂 G6 家族动效
   g6-in（变量在 css/auth.css，翻页读感与弹层族同源）。选项仍复用 .quiz-opt 同款染色零新样式；
   必答——遮罩与卡都无关闭路径。
   z-index 57：高于 .auth（56）——闪回总在 U1 收卡后弹出，抬高一级防极端时序下两层叠加时点穿 */
.flash{position:fixed;inset:0;z-index:57;display:flex;align-items:center;justify-content:center;padding:16px;background:rgba(6,5,12,.55);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px)}
.flash-card{width:min(360px,100%);padding:28px 24px 22px;border-radius:24px;background:#181530;border:1px solid var(--stroke-2);box-shadow:0 24px 70px rgba(0,0,0,.6);text-align:center;display:flex;flex-direction:column;gap:12px;animation:g6-in var(--g6-dur-in) var(--g6-ease)}
.flash-ico{display:inline-flex;align-items:center;justify-content:center;width:38px;height:38px;border-radius:50%;border:1px solid var(--stroke-2);background:var(--glass);color:var(--hot)}
.flash-ask{margin:0;font-size:13px;font-weight:700;color:var(--muted)}
/* F2（2026-10-01 用户反馈）：左上角喇叭位即重播钮（点按重听，二次定调：独立胶囊丑收进喇叭位）
   + 答后歌词行（选项上方，目标词 .xw 粉底高亮与歌词页同款） */
button.flash-replay{cursor:pointer;padding:0}
button.flash-replay:hover{transform:scale(1.08);color:var(--ink)}
button.flash-replay:disabled{cursor:default;transform:none}
button.flash-replay:disabled>svg:first-child{opacity:.45}
.flash-ring{position:absolute;inset:-2px;width:calc(100% + 4px);height:calc(100% + 4px);pointer-events:none}
.flash-ring-fg{fill:none;stroke:var(--hot);stroke-width:2;stroke-linecap:round;stroke-dasharray:100;stroke-dashoffset:100}
/* 1003 用户反馈：胶囊标题与喇叭重播钮并一行——喇叭绝对定位居左，标题保持居中（b9a1510 意图随本提交在 main 落地） */
.flash-head{position:relative;min-height:38px;display:flex;align-items:center;justify-content:center}
.flash-head .quiz-tag{margin:0}
.flash-head .flash-ico{position:absolute;left:0;top:50%;translate:0 -50%}
.flash-lyric{margin:2px 0 0;font-size:13px;line-height:1.7;color:var(--soft);text-align:center}
.flash-lyric{margin:0;font-size:13px;line-height:1.7;color:var(--soft);text-align:center}
/* .flash 是堆叠上下文（fixed+z57），.xw::before 的 z-index:-1 会落到不透明卡底之后（1003 工单 W3）：
   给 .xw 自身立堆叠上下文，粉底只垫在本词文字之后、卡底之前；歌词页 .stage 的 .xw 渲染不动 */
.flash-card .xw{isolation:isolate}
.flash-from{margin:0;font-size:12px;color:var(--muted);text-align:center}
@media (prefers-reduced-motion:reduce){.flash-card{animation:none}}

/* ---------- 意见反馈小弹层（#feedbackModal 复用 .auth + .auth-card；write-only，js/feedback.js） ----------
   textarea 同时挂 .auth-input .feedback-text：字号/边框/底变量全继承 .auth-input（css/auth.css:67），
   这里补多行的几何量——高度放开 46 → ≥96（4 行 ×16px）、上下 padding、行高、禁拖拽；
   圆角压到 .card 同档 18px（用户反馈：999px 胶囊在 4 行高上四角弧线吃掉内角可见范围） */
.feedback-text{height:auto;min-height:96px;padding:12px 18px;line-height:1.6;resize:none;border-radius:18px}
/* 说明行：同 .auth-card .auth-hint 的小字弱色（12px / --muted） */
.auth-card .feedback-hint{font-size:12px;line-height:1.7;color:var(--muted)}
/* 字数行：右对齐的 0/500 计数，tabular-nums 防跳宽 */
.feedback-meta{display:flex;justify-content:flex-end;font-size:12px;color:var(--muted);font-variant-numeric:tabular-nums}
/* 词卡反馈：上下文行 + 场景 chips（单选预填）——chip 同 .fb-scene 描边玻璃族，
   选中转主色描边；「其他」data-text 为空=自由输入不预填 */
.fb-word{margin:2px 0 0;color:var(--hot)}
.fb-scenes{display:flex;flex-wrap:wrap;gap:8px;margin:2px 0 4px}
.fb-scene{height:32px;padding:0 14px;border:1px solid var(--stroke-2);border-radius:999px;background:var(--glass);color:var(--soft);font-size:12px;font-weight:700;cursor:pointer;transition:background .15s,color .15s,border-color .15s}
.fb-scene:hover{background:var(--glass-2);color:var(--ink)}
.fb-scene[aria-pressed="true"]{border-color:var(--hot);color:var(--hot);background:rgba(255,77,141,.12)}
/* 资料卡反馈入口（用户反馈：纯文字不突出，升级 .welcome-skip 同族次级胶囊——描边玻璃底非主色，
   层级=保存（主色实心）> 反馈（描边玻璃）> 退出（纯文字低强调）） */
.profile-feedback{height:44px;border:1px solid var(--stroke-2);border-radius:999px;background:var(--glass);color:var(--soft);font-size:14px;font-weight:700;cursor:pointer;transition:background .15s,color .15s}
.profile-feedback:hover{background:var(--glass-2);color:var(--ink)}
