/* ============================================================
 * 创归思伴学 · 三屏外壳（左 AI 伴学栏 / 中业务区 / 右数字看板）
 * 真源：assets/desktop.css「三栏外壳」段（2026-09-27 抽出，desktop.css 内的副本已移除）
 * 为什么独立出来：learner / student-hub 两页不引 desktop.css（该文件的 :root 令牌会
 *   覆盖这两页自带的品牌令牌，属破坏性改动）。外壳与全部色值都收在 .myquest-shell
 *   作用域内，不写 :root ⇒ 对任何宿主页面都零污染。
 * 深浅双色：只靠 html:not([data-theme="dark"]) / [data-theme="dark"] 两条作用域规则切换。
 * 红线：左栏宽度恒定 290px（禁止逐页改）；右看板 320px；中屏 flex:1。
 * ============================================================ */
/* 三栏外壳 */
.myquest-shell{
  --mq-top:72px;
  --mq-ai-w:290px;
  --mq-board-w:320px;
  display:flex;
  align-items:flex-start;
  gap:0;
}
/* 自包含盒模型：独立页（不引 desktop.css）也能拿到 border-box，
   否则 width:320px 会被 padding/border 撑成 349，破坏 290/320 红线几何。 */
.myquest-shell,
.myquest-shell *,
.myquest-shell *::before,
.myquest-shell *::after{
  box-sizing:border-box;
}
/* [2026-09-26 P0-2] 学习计划 #/plan 复用三屏外壳。两处本页差异：
     ① --mq-top：.myquest-shell 默认 72px 是给**全局顶栏**的。本页顶栏是吸顶 planbar（64px · 全站统一顶栏高），
        沿用 72 会让左右两栏 sticky 位置差 3px、底部多留 3px 空白。运行期 planAiInit() 会按实测
        高度覆盖一次，这里给初值只是防 JS 未跑时的裸奔。
     ② 中屏底透明：让本页 tone-plan「清晨周历纸感」画布透上来，三栏才不像贴上去的三块板。
 */
.plan-shell{ --mq-top:64px }
.plan-shell > .mq-main{ background:transparent }
/* [2026-09-26 P1-1] 右看板「计划速览」2×2 数字网格（吸收原中屏 .top-stats 4 卡）。
   令牌全部走 .myquest-shell 作用域里的 --ink / --hair / --mq-board-bg，
   深浅两色自动跟随，不写死色值。 */
.myquest-shell .mq-board-stats{ display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-bottom:14px }
.myquest-shell .mq-board-stat{
  background:var(--mq-board-bg,#fff);
  border:1px solid var(--hair,var(--mq-ai-line,#EFEAF8));
  border-radius:12px;padding:10px 10px 9px;text-align:left;
}
.myquest-shell .mq-board-stat b{
  display:block;font-size:22px;line-height:1.1;font-weight:800;letter-spacing:-0.5px;color:var(--ink,#221838);
}
.myquest-shell .mq-board-stat span{ display:block;margin-top:3px;font-size:11px;color:var(--ink-3,var(--muted,#665E85)) }
/* [2026-10-12 批154] <1100px 右看板收起时，board-stats-mirror.js 把 .mq-board-stats 克隆进中屏顶部
   .mq-main-stats（仅此宽度存在，由 JS 注入）。复用同一套令牌(深浅自动跟随)：auto-fit + minmax(150px)
   让 2 个数字铺两栏、4 个数字铺四栏、超窄屏自动降列，并居中 + 补偿顶部留白。
   选择器必须用后代（空格）而非直接子选择器：holder 由 JS 注入在 .mq-main 内部
   （.myquest-shell > .mq-main > .mq-main-stats），并非 .myquest-shell 的直接子节点；用直接子选择器会整条失配（实测过）。 */
.myquest-shell .mq-main-stats{ display:block;width:100%;margin:0 0 14px;padding:0 }
.myquest-shell .mq-main-stats > .mq-board-stats{
  display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:8px;margin:0;
}
.myquest-shell .mq-main-stats .mq-board-stat{ text-align:center }
/* [2026-09-19 全站统一UI规范] 文字层级 + 主紫（仅本页作用域，不外溢）：
   一级#221838 / 二级#4A3B6B / 正文#665E85 / 辅助#998FB8；主紫#7F4AE0；次浅紫#F0EBFF
   ⚠️ 必须限定 html:not([data-theme="dark"])：本块原先无条件生效，深色主题下会把
   --ink/--muted 钉成深色字（深底深字不可读）、--hair 钉成浅紫（卡片间隙发白）。 */
html:not([data-theme="dark"]) .myquest-shell{
  --ink:#221838;
  --ink-2:#4A3B6B;
  --muted:#665E85;
  --accent:#7F4AE0;
  --surface-2:#F5F0FF;
  --hair:#EAE4F6;
  --mq-ai-bg:#F9F7FF;   --mq-ai-line:#EFEAF8;
  --mq-main-bg:#FCFAFF;
  --mq-board-bg:#FFFFFF;
}
/* [2026-09-19] 深色主题：按用户指定的「暗但清晰」层级重排（从底层到上层）
   页底 #151229 → 标题区 #1A1635 → 侧栏/容器 #221C3D → 数据卡·业务卡 #2D2748
   → 主按钮 #8F5AF0（亮紫）/ 强调 #E07B3A（橙）→ 主文字 #FFFFFF / 辅助 #B8AEE0 / 更弱 #8579B3
   要点：卡片必须比页底亮，否则「深底加深底」全部信息沉下去。 */
[data-theme="dark"] .myquest-shell{
  --ink:#FFFFFF;
  --ink-2:#B8AEE0;
  --ink-3:#8579B3;
  --muted:#B8AEE0;
  --accent:#8F5AF0;
  --surface:#2D2748;
  --surface-2:#332C52;
  --card:#2D2748;
  --hair:#3A3164;
  --hair-strong:#5B4EA6;
  --mq-ai-bg:#221C3D;   --mq-ai-line:#2E2752;
  --mq-main-bg:#151229;
  --mq-board-bg:#221C3D;
}
/* 左 AI 伴学栏：贴浏览器左边，290px 固定（禁止项：宽度恒定，不每页改） */
.myquest-shell > .mq-ai{
  flex:0 0 var(--mq-ai-w,290px);
  width:var(--mq-ai-w,290px);
  align-self:flex-start;
  position:sticky;
  top:var(--mq-top);
  height:calc(100vh - var(--mq-top) - 16px);
  background:var(--mq-ai-bg,#F9F7FF);
  border-right:1px solid var(--mq-ai-line,#EFEAF8);
}
/* 复用 AiSidePanel：仅做结构性贴合（填满左栏、透明底露出容器色）。
   [2026-09-19] 按页面规范注入浅紫系列 --asp-* 令牌（仅本页作用域，不影响其它页/组件）；
   组件「禁止写死色值」原则不变——仍只改令牌、不改组件内部规则。 */
/* 宽度用组件规格令牌（收起时 .mq-ai 列宽收 0，面板仍保持 290px 才能整体左滑出视口）*/
.myquest-shell > .mq-ai .ai-side-panel{
  width:var(--asp-w,290px);
  height:100%;
  background:transparent;
  border-right:0;
  border-radius:0;
}
/* [2026-09-19 全站统一UI规范] 令牌对齐：AI气泡#F0EBFF / 用户气泡·主按钮主紫#7F4AE0 / 文字层级
   （组件「禁止写死色值」原则不变——本页只改令牌，不改组件内部规则）
   ⚠️ 必须限定浅色：无条件注入会把 --asp-ink 钉成深色字，深色主题下左栏变「深底 + 深字」不可读。 */
html:not([data-theme="dark"]) .myquest-shell > .mq-ai .ai-side-panel{
  --asp-bg:#F9F7FF;
  --asp-surface:#FFFFFF;
  --asp-surface-2:#F0EBFF;
  --asp-brand-solid:#7F4AE0;
  --asp-line:#E7DEFB;
  --asp-track:#E7DEFB;
  --asp-ink:#221838;
  --asp-muted:#6B6382;
}
.myquest-shell > .mq-ai .ai-side-panel .asp-head{padding:16px 16px 12px}
.myquest-shell > .mq-ai .ai-side-panel .asp-msgs{padding:16px 14px}
.myquest-shell > .mq-ai .ai-side-panel .asp-foot{padding:12px 14px 14px}
/* 角色名下方标语（规格：只引导、不代答、帮你找思维陷阱） */
html:not([data-theme="dark"]) .myquest-shell > .mq-ai .ai-side-panel .asp-tagline{color:var(--asp-muted,#6B6382)}
/* AI 气泡：规格底 #F0EBFF 与左栏底 #F9F7FF 过近 → 补一道极浅描边增强可读性 */
html:not([data-theme="dark"]) .myquest-shell > .mq-ai .ai-side-panel .asp-msg--xb{border:1px solid #E7DEFB}
/* 禁用态（规格：#E2DFF2） */
html:not([data-theme="dark"]) .myquest-shell > .mq-ai .ai-side-panel .asp-voice[disabled]{background:#E2DFF2;border-color:#E2DFF2}
/* 收起态分割条：规格底纯白，与面板一致 */
html:not([data-theme="dark"]) .myquest-shell > .mq-ai .ai-side-panel .asp-split{background:#FFFFFF}
/* 场景卡（今日引导）跟随主紫：标题竖条本就走 --asp-brand-solid，此处仅统一底色 */
html:not([data-theme="dark"]) .myquest-shell > .mq-ai .ai-side-panel .asp-scene{background:#F5F0FF;border-color:#E7DEFB}
/* 中业务区 */
.myquest-shell > .mq-main{
  flex:1 1 auto;
  min-width:0;
  background:var(--mq-main-bg,#FCFAFF);
  padding:0 24px;
}
/* [2026-10-11 批135] 可见留白全站统一 44（PM 标准=听力页观感）：只作用于 app.html 的
   SPA 壳页（html.xb-app 早期标记）。批134 的 :not 名单式排除了独立工具壳页（fx/al/bl/mo/
   pt/kg/mc/hw/sjf… 各有自家 mq-main padding）与考点卡 iframe 内层 rc-shell（被打出双重
   44=88），全部误伤；xb-app 范围式一劳永逸。壳中壳 SPA 路由（内容满铺自管）仍显式排除。 */
.xb-app .myquest-shell:not(.exam-shell):not(.math-mastery-shell):not(.rc-math-shell):not(.subjects-hub-shell):not(.partner-shell) > .mq-main{
  padding-left:44px;
  padding-right:44px;
}
/* [2026-09-30 Phase1] 真题模考页：中屏满屏承载 exam 工具 iframe（不套内边距，工具自带布局） */
.exam-shell > .mq-main{
  padding:0;
  position:relative;
  height:calc(100vh - var(--mq-top) - 16px);
  overflow:hidden;
}
.exam-shell > .mq-main .exam-frame-wrap{ position:absolute; inset:0 24px; }
/* [2026-10-06] exam iframe 透明：内嵌时透出宿主 --mq-main-bg（#FCFAFF/深#151229），与全站三屏标准底统一 */
.exam-shell > .mq-main iframe{ width:100%; height:100%; border:0; display:block; background:transparent; }
/* [2026-09-30 Phase2] 数学破局127招页：中屏满屏承载 math-mastery 工具 iframe（不套内边距，工具自带布局） */
.math-mastery-shell > .mq-main{
  padding:0;
  position:relative;
  height:calc(100vh - var(--mq-top) - 16px);
  overflow:hidden;
}
.math-mastery-shell > .mq-main .math-mastery-frame-wrap{ position:absolute; inset:0 24px; }
.math-mastery-shell > .mq-main iframe{ width:100%; height:100%; border:0; display:block; background:#fff; }

/* [2026-10-02 · 数学高频考点卡页 #/review-cards-math] 中屏满屏承载 review-cards 工具 iframe（同 Phase1/Phase2 范式）。
   定高必须有：.mq-main 高度为 auto 时，里面 height:100% 的 iframe 会退回浏览器默认 150px ——
   整个自测工具被压成一条小框（头图被切、题库看不见）。壳中壳接新页时这一段不可省。 */
.rc-math-shell > .mq-main{
  padding:0;
  position:relative;
  height:calc(100vh - var(--mq-top) - 16px);
  overflow:hidden;
}
.rc-math-shell > .mq-main .rc-math-frame-wrap{ position:absolute; inset:0 24px; }
.rc-math-shell > .mq-main iframe{ width:100%; height:100%; border:0; display:block; background:#fff; }

/* 右学习看板：窄屏隐藏（P2 响应式降级） */
.myquest-shell > .mq-board{
  flex:0 0 var(--mq-board-w,320px);
  width:var(--mq-board-w,320px);
  align-self:flex-start;
  position:sticky;
  top:var(--mq-top);
  height:calc(100vh - var(--mq-top) - 16px);
  background:var(--mq-board-bg,#FFFFFF);
  border-left:1px solid var(--hair,rgba(40,30,38,.08));
  padding:14px 14px 18px;
  overflow-y:auto;
}
.mq-board-title{
  display:flex;align-items:center;gap:7px;
  font-size:14px;font-weight:800;color:var(--ink,rgba(40,30,38,.95));
  margin:2px 2px 12px;
}
.mq-board-title::before{content:'';width:4px;height:13px;border-radius:3px;background:var(--accent,#D9357A);flex:0 0 auto}
.mq-board-sec{margin-bottom:14px}
.mq-board-sec + .mq-board-sec{border-top:1px solid var(--hair,rgba(40,30,38,.08));padding-top:14px}
.mq-board-sec-h{
  display:flex;align-items:center;justify-content:space-between;gap:8px;
  font-size:12.5px;font-weight:700;color:var(--muted,#6f6880);
  margin-bottom:7px;
}
.mq-board-sec-h b{color:var(--accent,#D9357A);font-weight:800}
.mq-board-list{display:flex;flex-direction:column;gap:6px}
.mq-board-item{
  display:flex;align-items:center;gap:8px;
  padding:7px 9px;border-radius:10px;
  background:var(--surface-2,#FBEFF4);
  font-size:12.5px;color:var(--ink,rgba(40,30,38,.95));
  cursor:pointer;border:1px solid transparent;
  transition:border-color .15s ease, transform .12s ease;
}
.mq-board-item:hover{border-color:var(--accent,#D9357A);transform:translateX(1px)}
.mq-board-item .dot{flex:0 0 auto;width:8px;height:8px;border-radius:50%;background:var(--muted,#6f6880)}
.mq-board-item .dot.due{background:#C9760E}
.mq-board-item .dot.weak{background:#D9357A}
.mq-board-item .t{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mq-board-empty{font-size:12px;color:var(--muted,#6f6880);padding:4px 2px;line-height:1.5}
.mq-board-tip{
  font-size:12px;line-height:1.55;color:var(--ink-2,rgba(40,30,38,.7));
  background:var(--surface-2,#FBEFF4);
  border-radius:10px;padding:9px 10px;
}
.mq-board-bar{
  height:8px;border-radius:999px;background:var(--surface-2,#FBEFF4);overflow:hidden;margin-top:2px;
}
.mq-board-bar > i{display:block;height:100%;border-radius:999px;background:var(--accent,#D9357A)}
.mq-foot-note{margin:14px 2px 2px;font-size:12.5px;line-height:1.6;color:var(--muted,#6f6880);background:var(--surface-2,#FBEFF4);border:1px dashed var(--hair,rgba(40,30,38,.12));border-radius:12px;padding:10px 12px}

/* ===[quest-shell-topup]-2026-09-27=== */  /* [#1219] 原 # 行不是合法 CSS 注释，会把紧随的 @media(max-width:1100px) 整块当坏规则吞掉 */

/* ① 响应式降级：右看板在 <1100px 收起；<900px 三栏改为上下堆叠
   （原 desktop.css 同段，随外壳一起迁出） */

/* 响应式：右看板在 <1100px 收起；<900px 双栏改为上下堆叠 */
@media (max-width:1100px){
  .myquest-shell > .mq-board{display:none}
}
@media (max-width:900px){
  .myquest-shell{flex-direction:column}
  .myquest-shell > .mq-ai{position:static;width:100%;flex:none;height:auto;max-height:62vh}
  /* [2026-10-01 视觉QA新发空白带修复] 原写死 height:62vh —— 面板内容少时（如学科页只有一句欢迎语）
     底部会空出 140px 的洞（vqa gap 门禁在 7 个学科页 + 物理第 2 处同时报出）。
     改成「按内容收、最多 62vh」：有话聊时仍占满 62vh 内部滚动，没话时面板自然收短，洞消失。 */
  .myquest-shell > .mq-ai .ai-side-panel{height:auto;max-height:62vh;width:100%}
  .myquest-shell > .mq-main{padding-left:0;padding-right:0;margin-top:14px}
  /* [2026-10-12 批153] 平板/窄屏堆叠模式下中屏必须横向拉满。
     基础规则 .myquest-shell{align-items:flex-start}（配 .mq-ai/.mq-board 各自 align-self:flex-start）
     在 row 模式靠显式 flex-basis（290/320）定宽，无碍；但 ≤900px 改 flex-direction:column 后
     交叉轴不再 stretch，中屏宽度退化为「内容宽度」——学习舱/student-hub 中屏内容全为绝对定位
     （.sb-frame-wrap / xx-frame-wrap），内容宽 0 只剩 padding ⇒ 中屏塌成 48px（iPad 竖屏 768 实测），
     页面只剩 AI 面板、中屏内容不可见。english-corner 561 / grammar 496 / homework-check 532
     等页表现较轻（右侧留白），同因。给中屏显式拉满即可，不动 290/320 红线几何。 */
  .myquest-shell > .mq-main{align-self:stretch;width:100%}
  /* [2026-10-01] 面板在窄屏吃到满宽后，折叠手柄（.asp-split right:-13px 外挑一半）会越过视口右缘，
     把文档撑宽（vqa overflow：scrollWidth 387 > 375，实测 mistake-analyzer/375 命中 12px）。
     窄屏把外挑收回面板内：手柄仍在右缘中点、仍可点，只是不再外挑，横向滚动条消失。 */
  .myquest-shell > .mq-ai .ai-side-panel > .asp-split{right:0}
}
/* ===[quest-shell-topup]-2026-10-01=== */
/* ③ 壳内容器收窄 ⇒ 页面自己的「视口断点」失效（容器 766 但视口 1440，page.css 的
   @media(max-width:980/880/780) 全不触发），多列 grid 被压成 166–229px/格，
   长文案变成「一列一个字」并在格间留出 160px 空洞（vqa gap 门禁在 history/桌面报出）。
   按「容器等效宽度」补 scoped 列数覆盖：三屏并排时 main ≈ 视口-610。
   ≥901px 一律 2 列（main 611–926 → 单卡 300–460px）；≥1700px 才回到 3 列（main ≥1090）。
   ≤900px 壳已堆叠、main 吃到全宽，本段不生效，页面自己的移动断点照常工作。 */
@media (min-width:901px){
  .myquest-shell.subject-shell :is(.phy-dom-grid,.chem-dom-grid,.bio-dom-grid,.geo-dom-grid,.pol-dom-grid,.his-dom-grid,.his-feat-grid){grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media (min-width:1700px){
  .myquest-shell.subject-shell :is(.phy-dom-grid,.chem-dom-grid,.bio-dom-grid,.geo-dom-grid,.pol-dom-grid,.his-dom-grid,.his-feat-grid){grid-template-columns:repeat(3,minmax(0,1fr))}
}

/* ② 左栏 ai-side-panel 深色令牌（与上面的浅色令牌成对）*/

[data-theme="dark"] .myquest-shell > .mq-ai .ai-side-panel{
  --asp-bg:#221C3D;--asp-surface:#2A2348;--asp-surface-2:#332C52;
  --asp-line:#3A3164;--asp-track:#3A3164;
  /* [2026-09-19] #8F5AF0 压白字只有 3.27:1 → 填充紫压深一档（4.86:1）；文字/图标亮紫走组件 --asp-brand-ink */
  --asp-brand-solid:#7A55E8;--asp-ink:#FFFFFF;--asp-muted:#B8AEE0;
}
[data-theme="dark"] .myquest-shell > .mq-ai .ai-side-panel .asp-tagline{color:#B8AEE0}
[data-theme="dark"] .myquest-shell > .mq-ai .ai-side-panel .asp-msg--xb{background:#2A2348;border:1px solid #3A3164}
[data-theme="dark"] .myquest-shell > .mq-ai .ai-side-panel .asp-split{background:#2A2348}
[data-theme="dark"] .myquest-shell > .mq-ai .ai-side-panel .asp-scene{background:#2A2348;border-color:#3A3164}
[data-theme="dark"] .myquest-shell > .mq-ai .ai-side-panel .asp-voice[disabled]{background:#3A3164;border-color:#3A3164}
/* —— 面板收起时的唤起手柄 .asp-recall：它是 .ai-side-panel 的**兄弟**节点（挂在内层挂载点），
   而深色 --asp-* 令牌全都设在 .ai-side-panel 自身上 → 兄弟节点拿不到、回退浅色字面量
   (#F9F7FF/#EFEAF8)，深色页会冒出一枚浅色小方块。此处按外壳作用域单独补齐。
   （组件级同名缺陷在 ai-side-panel.css，属并行线在途 WIP，不在本批范围。） */
[data-theme="dark"] .myquest-shell > .mq-ai > .asp-recall{
  background:#221C3D;border-color:#3A3164;color:#C9B6FF;
  box-shadow:0 6px 18px rgba(0,0,0,.45);
}
[data-theme="dark"] .myquest-shell > .mq-ai > .asp-recall:hover{
  background:#2A2348;color:#FFFFFF;box-shadow:0 8px 22px rgba(143,90,240,.35);
}
[data-theme="dark"] .myquest-shell > .mq-ai > .asp-recall:focus-visible{outline:2px solid #8F5AF0}

/* ③ 深色下看板状态点配色 */

[data-theme="dark"] .myquest-shell .mq-kp-dot.idle{background:#8579B3}
[data-theme="dark"] .myquest-shell .mq-kp-dot.weak{background:#E07B3A}
[data-theme="dark"] .myquest-shell .mq-board-item .dot.due{background:#E07B3A}
[data-theme="dark"] .myquest-shell .mq-board-item .dot.weak{background:#F2839F}

/* ④ 知识点状态点（基础态 + 三态） */

.mq-kp-dot{
  flex:0 0 auto;width:9px;height:9px;border-radius:50%;
  display:inline-block;margin-right:6px;vertical-align:middle;
}
.mq-kp-dot.idle{ background:#B9B2C8; }   /* 未检测（灰） */
.mq-kp-dot.ok{ background:#34C77B; }      /* 已掌握（绿） */
.mq-kp-dot.weak{ background:#D9357A; }    /* 薄弱/今天该复习（橙红） */

/* ⑤ [批103 #eyes 三屏化] 知识开门页差异：
   ① 摄像头/画面激活时右看板自动收起（取景宽度优先，1440 下中列不被看板挤窄）——
      判据完全复用 eyesCard 既有 data-kind 状态机（idle 之外都是「画面在场」），零新 JS、零新状态；
   ② :has 已在全站外壳规则（desktop.css body:has(.myquest-shell)）实际使用，浏览器支持已验证。 */
/* [#t885 2026-10-17] PM 拍板：宽屏识别态**保持三屏**（右屏=开门记录看板），
   对话回中屏图像下方；只有窄屏（≤1100）才收右看板腾宽度。 */
@media (max-width:1100px){
.eyes-shell:has(#eyesCard:not([data-kind="idle"])) > .mq-board{ display:none }
}

/* [批103f #rflow 三屏化] 拍照复习右屏「本轮复习台」在**活跃答题**时自动收起（取宽度优先，
   让中列读题/读资料更宽）—— 纯 CSS 判据复用 rflow 既有状态机（#rfStage 内含 .rf-qcard / .rf-flip 即「在答题」），
   零新 JS、零新状态；出卡/完成页无这两个节点 ⇒ 看板照常显示。 */
.rflow-shell:has(#rfStage .rf-qcard) > .mq-board,
.rflow-shell:has(#rfStage .rf-flip) > .mq-board{ display:none }

/* [2026-09-30 Phase3] 四科学习舱页：中屏满屏承载 subjects 工具 iframe（同 Phase2 math-mastery 范式） */
.subjects-hub-shell > .mq-main { padding:0 24px; position:relative; height:calc(100vh - var(--mq-top) - 16px); overflow:hidden; }
.subjects-hub-shell > .mq-main iframe { width:100%; height:100%; border:0; display:block; background:#fff; }
/* [2026-10-11 批148] 修 subjects-hub 中屏塌成 150px：.sb-frame-wrap 全站无样式（批132 给 exam/math-mastery/rc-math 三个壳中壳补了定位框，唯独漏了它），iframe 内联 height:100% 对 auto 高父容器塌缩为默认 150px ⇒ 只剩 tab 条+第一条横幅可见，panel 内容全被 overflow:hidden 裁掉。对齐批132 范式补定位框。 */
.subjects-hub-shell > .mq-main .sb-frame-wrap { position:absolute; inset:0 24px; }

/* [2026-09-30 学科页接壳收尾] 学科页进壳后中屏 ~878px：数学 .mth-plates 4 列每格仅 209px，统计区「章/知识点」折行错位（视口断点 max-width:1180 失效——它按视口判定，而接壳缩的是容器）。降 2 列，每格 ~430px 恢复原响应式形态。 */
.myquest-shell.subject-shell .mth-plates { grid-template-columns: repeat(2, minmax(0, 1fr)); }
/* [2026-09-30 深色收尾] 三屏壳 iframe 兜底底色：深色下跟随 surface（内容加载前不再闪白） */
html[data-theme="dark"] .myquest-shell > .mq-main iframe{background:var(--surface,#1E1B2E)}
