@import url('/admin/tech-font-local.css');
:root{--navy:#10243d;--ink:#1b304a;--muted:#71829a;--line:#dfe7f0;--cyan:#26cebe;--blue:#2864df;--paper:#fff}*{box-sizing:border-box}body{margin:0;color:var(--ink);background:#f1f5fa;font:14px/1.65 'Segoe UI','Microsoft YaHei',sans-serif}[hidden]{display:none!important}button,input,select,textarea{font:inherit}button,a{ -webkit-tap-highlight-color:transparent}button{cursor:pointer}button:disabled{opacity:.5;cursor:wait}a{color:var(--blue);text-decoration:none}button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible{outline:3px solid #63cfc8;outline-offset:3px}.app{max-width:1440px;padding:0 38px;margin:auto}.top{height:88px;display:flex;align-items:center;justify-content:space-between}.brand{display:flex;align-items:center;gap:12px;color:var(--navy);font-size:22px;font-weight:800}.brand b{font-size:10px;font-weight:500;letter-spacing:2px;margin-left:12px}.brand-icon{font-size:33px;background:var(--navy);color:var(--cyan);width:43px;height:43px;border-radius:13px;display:grid;place-items:center}.top-right{display:flex;align-items:center;gap:15px}.local-dot{font-size:12px;color:#54726a}.local-dot:before{content:'';display:inline-block;width:7px;height:7px;margin-right:8px;background:#19b99c;border-radius:50%;box-shadow:0 0 0 4px #19b99c15}.hero{display:flex;justify-content:space-between;align-items:center;border-radius:24px;background:radial-gradient(ellipse at 83% 18%,#1b516a80,transparent 52%),linear-gradient(110deg,#10233c,#183852);color:#fff;padding:34px 42px;position:relative;overflow:hidden}.hero:after{content:'';position:absolute;inset:0;background-image:linear-gradient(#ffffff04 1px,transparent 1px),linear-gradient(90deg,#ffffff04 1px,transparent 1px);background-size:30px 30px;pointer-events:none}.eyebrow{font-size:10px;letter-spacing:2.5px;font-weight:700;color:#7b91ae}.hero .eyebrow{color:#81b6c5}.hero h1{font-size:34px;line-height:1.45;font-weight:650;letter-spacing:-1px;margin:14px 0 6px}.hero h1 span{color:#64ded1}.hero p{color:#9eb4cc;margin:0}.hero-tags{display:flex;gap:23px;color:#b0c5d9;font-size:11px;margin-top:23px}.hero-orbit{width:190px;height:190px;border:1px solid #55cbd52b;border-radius:50%;display:grid;place-items:center;margin:0 36px;position:relative;transform:rotate(-15deg)}.hero-orbit:before{content:'';position:absolute;inset:20px;border:1px dashed #66e2d350;border-radius:50%}.hero-orbit:after{content:'';position:absolute;width:10px;height:10px;background:#62e2d6;border-radius:50%;top:24px;right:23px;box-shadow:0 0 25px #65ecd9}.hero-orbit>div{display:grid;place-items:center;border-radius:24px;border:1px solid #78d9d555;background:linear-gradient(130deg,#87efe512,#3bb4e318);width:103px;height:103px;font-size:39px;font-weight:300;color:#a1f4e9;transform:rotate(15deg)}.hero-orbit span{font-size:10px;letter-spacing:3px;margin-top:-27px}.panel{background:#fff;border:1px solid var(--line);border-radius:17px;padding:25px;box-shadow:0 5px 20px #18334e03}.toolbar{display:flex;align-items:center;justify-content:space-between;gap:20px;margin-top:23px;padding:17px 23px}label{display:grid;gap:7px;color:var(--muted);font-size:11px;font-weight:600}select,input,textarea{background:#f8fafd;border:1px solid #dce5ef;border-radius:9px;padding:10px 12px;color:var(--ink);min-width:170px;width:100%}.subjects{display:flex;background:#f0f4f9;padding:5px;border-radius:12px;gap:5px}.subjects button{border:0;background:transparent;border-radius:8px;padding:9px 20px;color:var(--muted)}.subjects small{display:block;font-size:8px;letter-spacing:1.5px}.subjects .selected{background:var(--navy);color:white;box-shadow:0 4px 9px #162e4520}.mode-note{font-size:11px;color:var(--muted);margin:10px 4px 20px}.metrics{display:grid;grid-template-columns:repeat(4,1fr);gap:16px}.metrics article{padding:19px 23px;position:relative}.metrics article:after{content:'';position:absolute;right:22px;top:24px;width:7px;height:7px;border:2px solid #3da9bc;border-radius:2px}.metrics span,.metrics small{display:block;font-size:11px;color:var(--muted)}.metrics strong{display:block;font-weight:600;font-size:32px;letter-spacing:-1px;color:var(--navy);line-height:1.7}.tabs{display:flex;gap:29px;border-bottom:1px solid var(--line);margin:27px 0 22px}.tabs button{border:0;background:none;color:var(--muted);padding:9px 2px 15px;font-weight:600;font-size:13px;position:relative}.tabs .selected{color:#245fcc}.tabs .selected:after{content:'';position:absolute;bottom:-1px;left:0;right:0;height:3px;background:#2864df;border-radius:3px}.grid{display:grid;grid-template-columns:1.9fr 1fr;gap:20px}h2{font-size:19px;margin:5px 0 14px;letter-spacing:-.3px}h3{font-size:16px}p{color:var(--muted)}.panel-head{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap}.primary,.secondary,.quiet{border-radius:9px;padding:10px 17px;font-size:12px;font-weight:600;border:1px solid transparent}.primary{background:#2563de;color:#fff;box-shadow:0 4px 10px #2563de18}.primary:hover{background:#1c4fbd}.secondary{background:#f2f6fc;color:#30537c;border-color:#dce5f0}.quiet{background:transparent;color:var(--muted);border-color:var(--line)}.empty{padding:34px 20px;text-align:center;color:var(--muted);font-size:13px}.empty>span{font-size:43px;display:block;color:#83a6ca}.empty h3{color:#405a78;margin-bottom:5px}.empty p{font-size:12px}.steps{list-style:none;counter-reset:step;padding:0}.steps li{counter-increment:step;padding:2px 0 10px 36px;position:relative;font-size:12px}.steps li:before{content:'0'counter(step);position:absolute;left:0;color:#35aaa8;background:#eaf7f6;font-size:10px;width:25px;height:25px;border-radius:7px;display:grid;place-items:center}.steps p{margin:3px 0}.soft{background:#f1f7fb;border-left:3px solid #39bfb2;padding:14px;font-size:11px;color:#698099;border-radius:4px}.badge{font-size:10px;border:1px solid #d2e9e6;background:#f0faf7;color:#208b77;border-radius:20px;padding:3px 10px}.actions{display:flex;gap:10px;flex-wrap:wrap}.result{text-align:left;padding:12px 0;overflow-wrap:anywhere}.result p{color:#465e7a}.result li{margin:6px 0}.result ul{padding-left:20px;color:#536c86}.result .eyebrow{color:#258b9a}.plan-card,.question-card,.report-card{border:1px solid var(--line);padding:21px;border-radius:12px;margin:16px 0;text-align:left;overflow-wrap:anywhere}.plan-row{display:flex;gap:20px;border-top:1px solid #edf1f6;padding:12px 0;font-size:13px}.plan-row b{min-width:80px}.plan-row span{flex:1}.plan-row small{white-space:nowrap;color:var(--muted)}#save-goal,#generate-plan{margin-top:16px}#goal-warning{color:#986e18;font-size:12px}textarea{min-height:82px;resize:vertical;display:block;margin:12px 0}label.check{display:flex;align-items:center;margin:10px 0}.check input{width:15px;min-width:0}.feedback{padding:13px;margin-top:13px;background:#f0f8f7;border-radius:8px;font-size:12px;white-space:pre-wrap}.question-title{white-space:pre-wrap;font-weight:600}.question-meta{color:var(--muted);font-size:11px;display:flex;justify-content:space-between}#notice{border-radius:9px;margin-bottom:16px;font-size:12px}#notice:not(:empty){padding:12px 16px;background:#e6f0fe;color:#27579d}#notice.error{background:#fff1ed;color:#a63e2e}footer{display:flex;justify-content:space-between;padding:24px 2px;color:#8a9ab0;font-size:10px}details.panel{margin-top:20px;font-size:12px}summary{cursor:pointer;color:#70819a}table{width:100%;border-collapse:collapse;font-size:11px}td,th{text-align:left;padding:9px;border-bottom:1px solid var(--line)}.login{display:grid;grid-template-columns:1fr 420px;gap:50px;align-items:center;min-height:75vh;max-width:1050px;margin:auto}.login h1{font-size:42px;line-height:1.4}.login label{margin:17px 0}.login .primary{width:100%;margin-top:10px}.login form>a{font-size:12px}.orbit{font-size:80px;color:#49abae}.embedded .app{padding:0}.embedded .top{display:none}.embedded .hero{border-radius:18px}.embedded .hero h1{font-size:28px}.embedded .hero-orbit{width:140px;height:140px}.embedded footer{padding-bottom:8px}@media(max-width:900px){.app{padding:0 18px}.hero{padding:28px}.hero h1{font-size:28px}.hero-orbit{display:none}.toolbar{flex-wrap:wrap}.toolbar>label{flex:1}.subjects{order:3;width:100%}.subjects button{flex:1}.grid{grid-template-columns:1fr}.login{grid-template-columns:1fr;gap:0}.login>div{display:none}.login form{max-width:430px;width:100%;margin:auto}.tabs{gap:10px;justify-content:space-between}.tabs button{font-size:11px}.hero-tags{gap:14px}}@media(max-width:560px){.app{padding:0 12px}.top{height:70px}.brand{font-size:19px}.brand b{display:none}.local-dot{font-size:10px}.hero{padding:25px 21px;border-radius:17px}.hero h1{font-size:24px}.hero h1 span{display:block}.hero-tags{flex-wrap:wrap;font-size:10px;gap:10px}.hero .eyebrow{font-size:8px}.metrics{grid-template-columns:repeat(2,1fr);gap:10px}.metrics article{padding:14px 16px}.metrics strong{font-size:27px}.panel{padding:19px}.toolbar{gap:13px}.toolbar select{min-width:130px;font-size:11px}.subjects button{padding:7px 10px}.tabs{gap:3px}.tabs button{font-size:10px}.panel-head{align-items:flex-start}.panel-head h2{font-size:17px}.plan-row{gap:10px;flex-wrap:wrap}.plan-row b{min-width:60px}.top-right{gap:6px}.question-card{padding:14px}.primary,.secondary{padding:10px 12px}footer{gap:12px}.hero-tags span:last-child{display:none}}@media print{body{background:#fff}.top,.hero,.toolbar,.mode-note,.metrics,.tabs,#notice,footer,#usage-panel,.tab-section:not(#tab-report),.actions{display:none!important}#tab-report{display:block!important}.app{max-width:none;padding:0}.panel{border:0;box-shadow:none}.report-card{break-inside:avoid}}
.profile-panel{margin-top:18px}.profile-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:13px}.profile-grid label{display:flex;flex-direction:column;gap:7px;font-size:13px;color:var(--muted)}.profile-grid input,.profile-grid select,.profile-grid textarea{font:inherit;font-size:14px;color:var(--ink);border:1px solid var(--line);border-radius:8px;padding:10px;background:#fff}.profile-grid .wide{grid-column:span 2}.trait-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px}
.tb-picker{display:grid;grid-template-columns:minmax(0,88px) minmax(0,1fr);gap:8px}

/* ===== 2026-09-23 教材版本：三科并行（改动 1）===== */
.tb-block{margin-top:16px;padding:14px 16px;border:1px solid var(--line);border-radius:12px;background:#fbfdff}
.tb-block-head{margin-bottom:11px}
.tb-block-head p{font-size:12px;color:var(--muted);margin:4px 0 0}
.tb-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:11px}
.tb-cell{display:flex;flex-direction:column;gap:6px}
.tb-subject{font-size:12px;font-weight:700;color:#41576f;letter-spacing:.5px}
.tb-cell select{font:inherit;font-size:14px;color:var(--ink);border:1px solid var(--line);border-radius:8px;padding:9px 10px;background:#fff}

/* ===== 2026-09-23 基础信息折叠（改动 3）===== */
.profile-panel>summary{list-style:none;cursor:pointer}
.profile-panel>summary::-webkit-details-marker{display:none}
.profile-summary{display:flex;justify-content:space-between;align-items:flex-start;gap:20px}
/* 2026-09-27 需求：summary「左文右块」= 严格各占 50%；原先右侧只有两个按钮、显得太空。 */
.profile-summary>.ps-left,.profile-summary>.ps-right{flex:0 0 50%;max-width:50%;min-width:0}
.ps-right{display:flex;flex-direction:column;gap:11px}
.ps-right-head{display:flex;justify-content:space-between;align-items:baseline;gap:12px;flex-wrap:wrap}
.ps-right-label{font-size:11px;color:var(--muted)}
/* ☠️ 右半头部在 <summary> 里 ⇒ .eyebrow 会被 heading 规则顶大，这里钉死字号（同 snap-chip 的坑） */
.ps-right-head .eyebrow{font-size:10px;font-weight:700;letter-spacing:2.5px;line-height:1.6;color:#7b91ae}
.summary-tools{display:flex;gap:9px;flex-shrink:0;justify-content:flex-end}
.profile-snapshot{display:flex;flex-wrap:wrap;gap:7px}
/* 「学员速览」胶囊：把原来挤在左栏那一长串（性格 / 三科教材）拆成可读的小块。
   ☠️ 必须显式写 font-size/font-weight/line-height —— summary 内部会继承到 heading 级字号，
      一旦漏写，「待补」会渲染成 40px 巨字（实测踩过）。 */
.snap-chip{display:inline-flex;align-items:baseline;gap:6px;max-width:100%;padding:5px 10px;border:1px solid var(--line);border-radius:999px;background:#f7fafd;color:var(--ink);font-size:11.5px;font-weight:400;line-height:1.5;letter-spacing:0}
.snap-chip b{flex-shrink:0;font-size:10px;font-weight:700;line-height:1.5;letter-spacing:.6px;color:#5b7b96}
.snap-chip span{font-size:11.5px;font-weight:400;line-height:1.5;min-width:0;overflow-wrap:anywhere}
.snap-chip.tb{background:#f2f8f7;border-color:#d9ece9}
.snap-chip.tb b{color:#2a7d76}
.snap-chip.empty{background:#fbfcfe;color:var(--muted)}
.snap-chip.empty b{color:var(--muted)}
/* 用户要求隐藏绿色角色提示条（DOM 还在，保证 app.js 写 textContent 不报错） */
#role-note{display:none!important}

/* ===== 2026-09-27 需求：把「基础信息」与「微调专家团」做成平行的两个 TAB =====
   ☠️ 实现要点（踩过才明白）：
      .tab-host 用 grid；未选中的 .tab-pane 用 display:none 移出栅格 ⇒ **不占位**；
      选中的 pane 显式写 `grid-row:2;grid-column:1` ⇒ 两个 pane 可**任意排序定位**。
      （2026-09-27 后续：「基础信息」已前置为第一 TAB，DOM 顺序也一并调换 ——
        栅格位算法与顺序无关，所以这次只改 HTML 顺序 + app.js 的 PANES 数组即可。）
   ☠️ 绝不能对整个 details 元素做 display:none —— app.js 的 open 开关 / `dataset.sid` 闸门 / 「填完自动收起」
      全都挂在 details 的展开状态上，一隐藏就静默失效。这里 display 只加在 **details 自身、且被选中的那个**。 */
.tab-host{display:grid}
/* ☠️ TAB 条占 grid 第 1 行、pane 显式放第 2 行 ——
   两边都靠自动排布 / 都写 grid-row:1 的话，pane 会和 TAB 条**重叠**（曾实测到 profileTop 与 TAB 条同高）。 */
.tab-host>.settings-tabs-bar{grid-row:1;grid-column:1}
.tab-pane{display:none;min-width:0}
.tab-pane.selected{display:block;grid-row:2;grid-column:1}
/* 两个 pane 的上下间距由 .tab-host 控制（原来靠各自的 margin-top） */
.tab-host>.tab-pane.selected{margin-top:22px}
/* TAB 条：样式对齐页面里已有的流程 TAB（.tabs），但独立命名，互不影响 */
.settings-tabs-bar{display:flex;gap:26px;border-bottom:1px solid var(--line);margin:27px 0 0}
.settings-tabs-bar button{border:0;background:none;color:var(--muted);padding:9px 2px 15px;font-weight:600;font-size:13px;position:relative;cursor:pointer}
.settings-tabs-bar button:hover{color:#3f628b}
.settings-tabs-bar button.selected{color:#245fcc}
.settings-tabs-bar button.selected:after{content:'';position:absolute;bottom:-1px;left:0;right:0;height:3px;background:#2864df;border-radius:3px}
@media(max-width:560px){.settings-tabs-bar{gap:12px;justify-content:space-between}.settings-tabs-bar button{font-size:11px;min-width:0}}
/* .tab-pane.selected 的 display:block 会盖掉 `.expert-settings{margin-top:20px!important}` 的观感，
   这里统一由 .tab-host>.tab-pane.selected 的 margin-top 决定，故把它压平 */
.tab-host>.expert-settings{margin-top:0!important}
/* 专家面板 summary 右端加个「点此展开设置」提示，避免收起态看起来是一条莫名其妙的空栏 */
.ep-sum-title{display:inline-flex;align-items:baseline;gap:8px}
.ep-sum-hint{font-size:11px;font-weight:400;color:#93a6b8}
.expert-settings[open] .ep-sum-hint{display:none}
.profile-summary h2{margin:6px 0 0}
.profile-brief{margin:9px 0 0;font-size:13px;color:#3f6b7a;font-weight:600;background:#eef7f6;border-radius:8px;padding:7px 11px;display:inline-block}
.summary-tools{display:flex;gap:9px;flex-shrink:0;justify-content:flex-end}
.profile-panel[open]>summary{margin-bottom:18px}
.profile-panel[open] #edit-profile{display:none}
.stage-advance-note{margin-top:16px;padding:12px 14px;border:1px solid #b7e2da;background:#f2fbf9;border-radius:10px;color:#1f6b60}
.stage-advance-note b{display:block;margin-bottom:5px}
.stage-advance-note p{margin:0;font-size:12.5px;color:#3d6d67}

/* ===== 2026-09-23 摸底卷参考答案（改动 8 呈现层）===== */
.paper-ref{margin-top:11px;padding:11px 13px;border:1px dashed #b9d3e2;border-radius:9px;background:#f6fbfd}
.paper-ref b{display:block;font-size:11px;color:#2b7f78;letter-spacing:1px;margin-bottom:5px}
.paper-ref p{margin:0;font-size:13.5px;color:#1b304a;font-weight:600}
.paper-ref small{display:block;margin-top:5px;color:var(--muted);font-size:12px}
.diag-expert-note{margin-top:10px;font-size:12px;color:#3f6b7a;background:#eef7f6;border-radius:8px;padding:8px 11px;display:inline-block}
/* ===== 2026-09-27：摸底卷生成后的「已生成」回执卡 =====
   ☠️ 本区**不再展示题目与参考答案**（用户拍板），所以原来那套 .paper-question 排版在本区不再出现；
      这里只放一张卡：图标 + 说明 + 下一步动作。目标是「一眼知道成了，并且知道去哪儿看卷子」。 */
.diag-done-card{display:flex;align-items:flex-start;gap:14px;padding:18px 20px;border:1px solid #bfe7df;background:linear-gradient(110deg,#f4fcfa,#fbfefd);border-radius:12px}
.dd-icon{flex:0 0 auto;width:40px;height:40px;border-radius:11px;background:#2bb69f;color:#fff;display:flex;align-items:center;justify-content:center;font-size:19px}
/* ☠️ 用 `.dd-main > b`（直接子元素）而不是 `.dd-main b` —— 后者会把正文里的
   「共 <b>3</b> 题」这类**行内加粗**也变成块级，数字会被挤到单独一行（实测截图发现）。 */
.dd-main > b{display:block;font-size:15px;color:#176b5c;margin-bottom:5px}
.dd-main p{margin:0;font-size:13px;color:#3d6d67;line-height:1.75}
.dd-main p b{color:#176b5c;font-size:15px}
.dd-main strong{color:#176b5c}
.diag-next{margin-top:14px;padding:13px 15px;border:1px solid var(--line);border-radius:11px;background:#fbfdff}
.diag-next>b{display:block;font-size:12px;color:#2b7f78;letter-spacing:1px;margin-bottom:7px}
.diag-next ol{margin:0;padding-left:20px;font-size:13px;color:#3f5a70;line-height:1.9}
.diag-next strong{color:#1b304a}
.trait-chip{display:flex;align-items:center;gap:7px;margin:0;padding:9px 11px;border:1px solid var(--line);border-radius:9px;background:#fbfdff;font-size:13px;font-weight:400;color:var(--ink);cursor:pointer;transition:border-color .15s,background .15s}
.trait-chip:hover{border-color:#b9d3e2}
.trait-chip input{width:15px;min-width:0;margin:0;accent-color:#2563de}
.trait-chip.checked{border-color:#7fc9c0;background:#f0faf8}
.subject-sync{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-top:16px}.subject-sync-card{border:1px solid var(--line);border-radius:10px;padding:10px;background:#fbfcfd}.subject-sync-card strong{display:block;margin-bottom:4px}.subject-sync-card small{color:var(--muted)}#adjustment-notice{margin:12px 0}.adjustment-warning{padding:12px 14px;border:1px solid #f3c778;background:#fff8e8;border-radius:10px;color:#7a5010}@media(max-width:1100px){.trait-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:900px){.profile-grid{grid-template-columns:repeat(2,1fr)}.subject-sync{grid-template-columns:1fr}.tb-grid{grid-template-columns:1fr}.profile-summary{flex-direction:column;align-items:stretch}.profile-summary>.ps-left,.profile-summary>.ps-right{flex:1 1 auto;max-width:none}.summary-tools{justify-content:flex-end}}@media(max-width:560px){.profile-grid{grid-template-columns:1fr}.profile-grid .wide{grid-column:auto}.trait-grid{grid-template-columns:1fr}}
.section-help{font-size:12px;color:var(--muted);margin-top:-8px}.actions button:disabled{opacity:.45;cursor:not-allowed}
.diagnostic-shell{display:grid;gap:16px}
/* 2026-09-27 第四次编排（定案）：头部说明卡 + **4 步流程条（内含按钮）** 左右并排。
   ☠️☠️ 用户最终要求：「不是删除流程条，而是把生成题组和导出试卷两个按钮放在流程条下面，
      也就是流程条那个方框里面。」
   ⇒ `.diagnostic-flow` **保留**，但改成**纵向两行**：
        第 1 行 `.flow-row`   = 原 4 步（01→02→03→04 + 连线）
        第 2 行 `.flow-actions` = 两个操作按钮
      两行同在一张 `.diagnostic-flow` 卡片里（同一背景、同一圆角），视觉上就是「流程条框内嵌按钮」。
   ☠️☠️ 前三次的错法（留档防再犯）：
      ② 次：把流程条整个删掉、说明卡拉满整行；
      ③ 次：把流程条换成一条独立按钮条（还是把流程条删了）。
      两次都错在**删了流程条** —— 用户要的是「流程条 + 按钮」共存，不是二选一。
   ☠️ `min-width:0` 仍要给 `.diagnostic-head`（grid item 默认 min-width:auto，
      会被 4 张流程卡的 min-content 顶宽 ⇒ 整块超出视口）。 */
.diagnostic-head{display:flex;gap:16px;align-items:stretch;min-width:0}
.diagnostic-head>.diagnostic-intro{flex:1.15 1 420px;min-width:0}
.diagnostic-head>.diagnostic-flow{flex:1 1 380px;min-width:0}.diagnostic-intro{display:flex;justify-content:space-between;align-items:center;gap:24px;background:linear-gradient(110deg,#f8fcff,#fff);border-color:#d5e7ee}.diagnostic-intro p{max-width:720px;margin-bottom:0}.diagnostic-state{display:flex;align-items:center;gap:10px;min-width:150px;padding:12px 14px;border:1px solid #dce7ef;border-radius:12px;background:#fbfdff}.diagnostic-state small{display:block;color:var(--muted);font-size:10px}.diagnostic-state strong{display:block;color:#526a80;font-size:12px}.state-dot{display:block;width:10px;height:10px;border-radius:50%;background:#b6c4d0;box-shadow:0 0 0 5px #b6c4d022}.diagnostic-state.ready{border-color:#bfe7df;background:#f4fcfa}.diagnostic-state.ready .state-dot{background:#2bb69f;box-shadow:0 0 0 5px #2bb69f20}.diagnostic-state.ready strong{color:#208b77}.diagnostic-state.practice{border-color:#c9d9f6;background:#f5f8ff}.diagnostic-state.practice .state-dot{background:#2864df}
/* 流程条：外框卡片 → 纵向两行（上=步骤 / 下=按钮）
   ☠️ 原来 .diagnostic-flow 自己就是 flex 横排；现在它变成**纵向容器**，
      横排职责下放给内层 .flow-row，避免「4 步和按钮挤在一行」。 */
.diagnostic-flow{display:flex;flex-direction:column;gap:12px;padding:13px 16px;background:#eef5f8;border-radius:12px}
.flow-row{display:flex;align-items:flex-start;gap:10px}
/* 按钮行：贴在流程条框内的**下方**，右对齐（与卡片右下角呼应） */
.flow-actions{display:flex;align-items:center;justify-content:flex-end;gap:10px;flex-wrap:wrap}
.flow-card{display:flex;align-items:center;gap:9px;flex:1}
/* ☠️☠️ 流程条**并排后变窄**的对齐坑（第四次编排仍适用，因为流程条又被挤回了 ~630px）：
   4 张卡的 `<small>` 文案长短不一：「生成题组/下载或打印」的副标题折成 2 行（高 33px），
   「线下完成/回传判定」只有 1 行（16.5px）⇒ 前两张卡 52.8px、后两张 36.3px。
   若 `.flow-row` 用 `align-items:center` ⇒ 矮的两张被**居中**，序号方块 top 差 8px，
   看起来就像没对齐（实测 tops=[1079,1079,1087,1087]）。
   ✓ 正解 = `.flow-row` 用 **顶部对齐**（flex-start），4 张卡无论高矮序号方块一律贴顶。
   ☠️ 光给卡片内部设 align-items 或给文字块设 min-height 都治不了本 ——
      错位发生在**卡片自己**在行内的垂直位置，不是卡片内部。 */
/* ☠️ 连线本来靠 align-items:center 垂直居中；改成 flex-start 后必须自己补 margin-top，
   对齐到 28px 序号方块的中心（28/2 - 1px 线高/2 ≈ 13px）。 */
.flow-row .flow-line{align-self:flex-start;margin-top:14px}
.flow-row .flow-card{align-items:flex-start;flex:1}
.flow-row .flow-card b,.flow-row .flow-card small{white-space:normal}.flow-card>span{display:grid;place-items:center;width:28px;height:28px;border-radius:9px;background:#d5eeec;color:#208b77;font-size:10px;font-weight:700}.flow-card b,.flow-card small{display:block}.flow-card b{font-size:12px;color:#365873}.flow-card small{font-size:10px;color:#8092a4}.flow-card.muted{opacity:.58}.flow-line{height:1px;flex:0 0 25px;background:#bfd6de}.diagnostic-workspace{display:grid;grid-template-columns:minmax(0,1.9fr) minmax(250px,.8fr);gap:16px}.diagnostic-main{min-width:0}.diagnostic-side{background:#fbfdff}.checklist{display:grid;gap:8px;margin:17px 0}.check-item{display:flex;align-items:center;gap:9px;border:1px solid var(--line);border-radius:9px;padding:9px 10px}.check-item>span{display:grid;place-items:center;width:20px;height:20px;border-radius:6px;font-size:11px;font-weight:700}.check-item.ready>span{color:#16866f;background:#ddf5ef}.check-item.missing>span{color:#ae751e;background:#fff1d5}.check-item b,.check-item small{display:block}.check-item b{font-size:11px;color:#415d75}.check-item small{font-size:10px;color:var(--muted)}.privacy-note{padding:13px;background:#f0f7fb;border-radius:9px;font-size:11px}.privacy-note p{font-size:11px;margin:5px 0 0}.diagnostic-preview{padding:0 2px}.paper-summary{padding:12px 14px;background:#f4faf9;border-left:3px solid #32ad9c;border-radius:6px;margin:4px 0 12px}.paper-summary p{margin:6px 0 0;font-size:12px}.paper-meta{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;padding:11px 12px;border:1px solid var(--line);border-radius:9px;margin-bottom:12px;color:var(--muted);font-size:10px}.paper-meta b{display:block;color:var(--ink);font-size:12px;margin-top:2px}.paper-question{display:grid;grid-template-columns:42px 1fr;gap:13px;padding:16px 12px;border-top:1px solid #edf1f6}.question-index{font-size:21px;font-weight:700;color:#bfd0dc}.paper-question .question-title{margin:6px 0 5px}.paper-answer-hint{font-size:10px;color:#9baabd}.practice-preview .practice-banner{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:11px 13px;border-radius:8px;background:#f4f7fd;color:#536c86;font-size:11px}.session-actions{display:flex;gap:10px;justify-content:flex-end;margin-top:15px}.practice-lane{display:flex;align-items:center;justify-content:space-between;gap:20px;border-style:dashed;background:#fcfdff}.practice-lane h2{margin-bottom:4px}.practice-lane p{margin:0;font-size:12px}.flow-card.active>span{background:#2768df;color:#fff}.flow-card.active b{color:#245fcc}/* ☠️ 1280px 以下回退成上下堆叠：流程条有 4 张卡 + 3 条连线，分栏后每张卡只剩几十像素宽，
   会挤成 4 行竖排（比并排更难看）。宁可换行也不要挤扁。
   ☠️☠️ 回退时**必须把 flex-basis 重置成 auto**，不能只写 `flex:1 1 100%` ——
      原来那两条 `flex:...420px` / `...380px` 的 basis 会变成**最小宽度**，
      窄屏（420px 视口）下两块硬撑 420+380 ⇒ 横向溢出 309px。
      正解 = `flex:1 1 auto`（basis 归 auto，子项才能收缩到容器宽度以内）。 */
/* ☠️ 2026-09-27 第四次编排：窄屏回退。
   ☠️☠️ 回退时**必须把 flex-basis 重置成 auto**，不能只写 `flex:1 1 100%` ——
      原来那两条 `flex:...420px` / `...380px` 的 basis 会变成**最小宽度**，
      窄屏（420px 视口）下两块硬撑 420+380 ⇒ 横向溢出 309px。
      正解 = `flex:1 1 auto`（basis 归 auto，子项才能收缩到容器宽度以内）。
   ☠️ 流程条里 4 张卡在窄屏放不下 ⇒ 让 `.flow-row` 可横向滚动，
      并给卡片设 min-width，避免被压成竖排。按钮行改左对齐。 */
@media(max-width:1280px){
 .diagnostic-head{flex-wrap:wrap}
 .diagnostic-head>.diagnostic-intro,.diagnostic-head>.diagnostic-flow{flex:1 1 auto;width:100%}
}
@media(max-width:900px){.diagnostic-intro{align-items:flex-start;flex-direction:column}.diagnostic-state{min-width:0}.diagnostic-workspace{grid-template-columns:1fr}.flow-row{overflow-x:auto}.flow-card{min-width:145px}.flow-line{flex-basis:15px}.flow-actions{justify-content:flex-start}.practice-lane{align-items:flex-start;flex-direction:column}.paper-meta{grid-template-columns:repeat(2,1fr)}}

/* ===== 2026-09-23 合并：专家团面板 / 5 步流程条 / 角色说明（来自 01_txtl）===== */
.pipeline .complete{background:#e6f7f4;color:#238576}
.pipeline{display:flex;align-items:center;justify-content:center;gap:12px;margin:22px 0 8px;padding:14px 18px;border:1px solid var(--line);border-radius:14px;background:#fff;color:#71829a;font-size:12px}.pipeline span{padding:7px 12px;border-radius:20px;white-space:nowrap}.pipeline .active{background:#10243d;color:#fff}.pipeline i{font-style:normal;color:#aac0d2}#student-focus{min-width:200px;padding:8px 18px;border-left:3px solid var(--cyan)}#student-focus span,#student-focus strong{display:block}#student-focus span{font-size:10px;color:var(--muted);letter-spacing:1px}#student-focus strong{font-size:22px;color:var(--navy);line-height:1.35}.expert-settings{margin-top:20px!important;padding:17px 22px!important}.expert-settings>summary{display:flex;justify-content:space-between;align-items:center;font-weight:700;color:#415b75}.expert-settings>summary small{font-weight:400;color:#91a0b1}.expert-settings[open]>summary{margin-bottom:22px}.template-bar{display:flex;align-items:end;gap:10px;margin:14px 0}.template-bar label{min-width:260px}.expert-settings .expert-flow{margin:18px 0}.expert-settings .expert-card p{min-height:36px}#goal-date{margin-bottom:12px}@media(max-width:900px){.pipeline{justify-content:flex-start;overflow-x:auto}#student-focus{order:-1;width:100%;border-left:0;border-bottom:2px solid var(--cyan)}.template-bar{flex-wrap:wrap}}
.role-note{margin:0 0 16px;padding:11px 15px;border:1px solid #d9e7f1;border-radius:10px;background:#f5f9fc;color:#48637c;font-size:12px}.expert-flow{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin:24px 0}.expert-card{position:relative;padding:18px;border:1px solid var(--line);border-radius:14px;background:linear-gradient(145deg,#fff,#f5f9fc)}.expert-card:not(:last-child):after{content:'→';position:absolute;right:-12px;top:44%;z-index:2;color:#7795aa;font-weight:700}.expert-card.off{opacity:.5}.expert-card .expert-icon{width:38px;height:38px;border-radius:12px;display:grid;place-items:center;background:#e7f4f3;color:#247f82;font-size:18px}.expert-card h3{margin:12px 0 3px}.expert-card b{display:block;color:#72849a;font-size:10px;letter-spacing:1px}.expert-card p{min-height:50px;font-size:12px;color:var(--muted)}.expert-card .status{font-size:10px;color:#298174}.expert-card.off .status{color:#a55}.expert-form{border-top:1px solid var(--line);padding-top:22px}.config-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}.expert-editor{margin:15px 0;padding:17px;border:1px solid var(--line);border-radius:13px}.expert-editor-head{display:flex;align-items:center;justify-content:space-between;gap:12px}.expert-editor h3{margin:0}.expert-editor textarea{min-height:68px}.policy-box{display:grid;grid-template-columns:1fr 1fr;gap:10px 18px;margin:18px 0;padding:17px;border-radius:13px;background:#f4f8fb}.policy-box h3{grid-column:1/-1;margin:0}.policy-box label.check{margin:0}.policy-box input[type=number]{max-width:150px}.tabs{overflow-x:auto;justify-content:flex-start}.tabs button{flex:1;min-width:112px}@media(max-width:900px){.expert-flow{grid-template-columns:repeat(2,1fr)}.expert-card:not(:last-child):after{display:none}}@media(max-width:560px){.expert-flow,.config-grid,.policy-box{grid-template-columns:1fr}.policy-box h3{grid-column:auto}.expert-card p{min-height:0}}

/* ===== 2026-09-23 合并：反馈表单（原为 window.prompt，升级为正式表单 + 六类错因编码）===== */
.feedback-form{margin-top:16px;padding:18px;border:1px solid var(--line);border-radius:14px;background:#f8fbfd}
.feedback-form .panel-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}
.feedback-form .panel-head h3{margin:0}
.feedback-form fieldset{border:1px dashed #cfdde8;border-radius:10px;padding:10px 14px;margin:12px 0}
.feedback-form legend{font-size:11px;color:var(--muted);padding:0 6px}
.feedback-form .error-types{display:flex;flex-wrap:wrap;gap:8px 18px;margin-top:6px}
.feedback-form .error-types .check{margin:0;font-size:13px}
.feedback-form .actions{display:flex;gap:10px;margin-top:14px}
#fb-msg{display:block;margin-top:8px}

/* ===== 2026-09-24 批改后（诊断 + 讲解）面板 ===== */
.marking-steps{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin:16px 0 20px}
.marking-step{border:1px solid var(--line);border-radius:10px;padding:13px 14px;background:#fbfdff}
.marking-step b{display:block;font-size:12.5px;color:#31566e;margin-bottom:5px}
.marking-step p{margin:0;font-size:11.5px;color:var(--muted);line-height:1.65}
.marking-form{display:grid;gap:13px}
.marking-form label{display:block;font-size:12px;color:#415d75;font-weight:600}
.marking-form textarea{width:100%;margin-top:6px;padding:10px 12px;border:1px solid var(--line);border-radius:9px;font-family:inherit;font-size:13px;line-height:1.7;color:var(--ink);background:#fcfdff;resize:vertical;box-sizing:border-box}
.marking-form textarea:focus{outline:none;border-color:#7fb8c9;background:#fff}
.marking-form .actions{display:flex;gap:10px;justify-content:flex-start}
.diag-block{margin-top:18px;border:1px solid #d9e8e6;border-radius:11px;background:#f7fcfb;overflow:visible}
.diag-block>header{padding:11px 15px;background:#eaf6f4;border-bottom:1px solid #d9e8e6;display:flex;justify-content:space-between;align-items:baseline;gap:12px}
.diag-block>header b{font-size:13px;color:#1d6a5f}
.diag-block>header small{font-size:11px;color:#5b8b83}
.diag-item{padding:14px 15px;border-top:1px solid #e6f1ef}
.diag-item:first-of-type{border-top:none}
.diag-item h4{margin:0 0 9px;font-size:13px;color:#20404f;display:flex;align-items:center;gap:9px;flex-wrap:wrap}
.cause-tag{display:inline-block;padding:2px 8px;border-radius:6px;font-size:11px;font-weight:600;background:#fdeee0;color:#a4651a}
.cause-tag.main{background:#fadfd8;color:#a33f22}
.diag-row{font-size:12.5px;color:#3c5568;line-height:1.75;margin:5px 0;overflow-wrap:anywhere;word-break:break-word;white-space:normal}
.diag-row b{color:#20404f}
.diag-chain{font-size:11.5px;color:#6b7f90;background:#eef4f7;border-radius:7px;padding:7px 10px;margin-top:8px}
.diag-focus{margin-top:14px;padding:11px 14px;border-radius:9px;background:#fff5e6;border-left:3px solid #e0a34a;font-size:12.5px;color:#7a5416}
.diag-blank-rule{margin:0;padding:11px 15px;background:#fff9ed;border-top:1px solid #f1e4c6;border-bottom:1px solid #f1e4c6;color:#7a5416;font-size:12.5px;line-height:1.7;overflow-wrap:anywhere}
.diag-follow{margin:14px 15px 16px;padding:12px 14px;border:1px solid #b9d9f1;border-radius:9px;background:#f5faff;color:#31566e;overflow-wrap:anywhere}
.diag-follow-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap;color:#20404f}
.follow-badge{display:inline-block;padding:2px 8px;border-radius:999px;background:#fff1d7;color:#9a6417;font-size:11px}
/* ===== 2026-09-27 修正「每道题都判错」：全对清单 / 软提示 / 习惯提示 =====
   ☠️ 全对清单用绿色、且**排在错因清单之前** —— 先告诉老师"这些都对了"，
      再看下面真有问题的那几道，避免通篇红色造成"满盘皆错"的错觉。
   ☠️ habits 必须视觉上**明确弱于**错因块（灰、小、带"不计入统计"字样），
      否则老师会把"习惯提醒"也当成知识漏洞。 */
.diag-ok{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;padding:11px 15px;background:#f3faf5;border-bottom:1px solid #e2f0e6;font-size:12.5px;color:#2f6b43}
.diag-ok>span{display:flex;gap:5px;flex-wrap:wrap}
.ok-chip{font-style:normal;padding:1px 8px;border-radius:20px;background:#e2f4e8;color:#2f6b43;font-size:11.5px}
.diag-soft{padding:12px 15px;border-top:1px solid #e6f1ef;background:#fbfdff;font-size:12.5px;color:#41586e}
.diag-soft ul{margin:7px 0 0;padding-left:20px}
.diag-soft li{margin-top:3px}
.diag-habits{padding:12px 15px;border-top:1px solid #e6f1ef;background:#fafafa;font-size:12px;color:#5b6b78}
.diag-habits>small{display:block;margin-top:2px;color:#8b98a3;font-size:11px}
.diag-habits ul{margin:7px 0 0;padding-left:20px}
.diag-habits li{margin-top:3px}
/* ===== 2026-09-27 卷面照片上传（老师拍照 / 扫描件）=====
   ☠️ 需求明确「不做逐空确认表」⇒ 这里只做「选文件 + 缩略图 + 删」，不加任何标注控件。 */
.marking-upload{display:grid;gap:10px}
.upload-drop{display:flex;flex-direction:column;align-items:center;gap:6px;padding:22px 16px;border:1.5px dashed #a9cbd6;border-radius:11px;background:#f8fcfe;cursor:pointer;text-align:center;transition:border-color .15s,background .15s}
.upload-drop:hover{border-color:#6fa9bd;background:#f2fafd}
.upload-drop.is-over{border-color:#3d8fa8;background:#e9f6fb;border-style:solid}
.upload-drop.is-full{opacity:.55;cursor:not-allowed}
.upload-drop .ud-icon{font-size:20px;color:#4f92a8;line-height:1}
.upload-drop b{font-size:13px;color:#26566b}
.upload-drop small{font-size:11.5px;color:var(--muted);font-weight:400}
.upload-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(108px,1fr));gap:9px}
.upload-list:empty{display:none}
.marking-paper-context{margin:12px 0;padding:10px 12px;border:1px solid #cbd5e1;border-radius:10px;background:#f8fafc;color:#334155;font-size:13px}
.hi-actions{display:flex;align-items:center;gap:8px}
.quiet.danger{color:#b42318}
.archive-state{min-height:22px;margin-top:10px;font-size:13px}
.archive-ok{color:#087443}
.archive-error{color:#b42318}
.material-archive{margin:10px 0;padding:10px 12px;border:1px solid #dbe4ee;border-radius:10px;background:#fff;font-size:13px}
.material-title{font-weight:700;margin-bottom:6px;color:#334155}
.material-link{display:inline-block;margin:4px 6px 0 0;padding:5px 8px;border:1px solid #cbd5e1;border-radius:7px;background:#f8fafc;color:#2563eb;cursor:pointer}
.material-link:hover{background:#eff6ff;border-color:#93c5fd}
.material-empty{color:#64748b}
.material-archive:empty{display:none}
.material-preview{width:min(1000px,92vw);max-height:90vh;padding:14px;border:1px solid #cbd5e1;border-radius:12px}
.material-preview::backdrop{background:rgba(15,23,42,.55)}
.material-preview-head{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:12px}
.material-preview-head b{flex:1;overflow-wrap:anywhere}
.material-preview img{display:block;max-width:100%;max-height:72vh;margin:auto;object-fit:contain}
.material-preview iframe{display:block;width:100%;height:72vh;border:0}
.up-item{position:relative;margin:0;border:1px solid var(--line);border-radius:9px;background:#fff;overflow:hidden}
.attachment-item{display:flex;align-items:center;gap:8px;min-width:0;padding:8px 30px 8px 8px;overflow:visible}
.attachment-icon{flex:0 0 auto;width:38px;height:38px;border-radius:8px;display:grid;place-items:center;background:#eaf6f4;color:#237f76;font-size:10px;font-weight:800;letter-spacing:.5px}
.attachment-item figcaption{display:grid;gap:1px;min-width:0;padding:0;font-size:11px;color:#36576c}
.attachment-item figcaption b,.attachment-item figcaption small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%}
.attachment-item figcaption small{color:var(--muted);font-size:10px}
.up-item img{display:block;width:100%;height:82px;object-fit:cover;background:#f2f6f8}
.up-item figcaption{display:flex;justify-content:space-between;align-items:center;gap:4px;padding:5px 7px;font-size:10.5px;color:#4a6a7d}
.up-item figcaption small{color:var(--muted)}
.up-del{position:absolute;top:4px;right:4px;width:20px;height:20px;line-height:1;border:none;border-radius:50%;background:rgba(20,40,50,.62);color:#fff;font-size:13px;cursor:pointer;padding:0}
.up-del:hover{background:#c0483a}
/* ===== 2026-09-27：PDF 拆页态 =====
   ☠️ PDF 在服务端拆页要 1-3 秒，期间必须给可见反馈，否则老师会重复点上传。
   ☠️ is-busy 与 is-full 分开：拆页中入口要「锁住」，但文案不能是「已满 8 张」（那是误报）。 */
.upload-drop.is-busy{opacity:.6;cursor:progress;border-style:solid;border-color:#3d8fa8}
.upload-busy{display:flex;align-items:center;gap:8px;font-size:12px;color:#3d7f96}
.upload-busy[hidden]{display:none}
.upload-busy i{width:12px;height:12px;border:2px solid #bcd8e2;border-top-color:#3d8fa8;border-radius:50%;animation:upspin .8s linear infinite}
@keyframes upspin{to{transform:rotate(360deg)}}
.up-item.from-pdf::after{content:'PDF';position:absolute;top:4px;left:4px;padding:1px 5px;border-radius:5px;background:rgba(61,143,168,.9);color:#fff;font-size:9.5px;letter-spacing:.4px}
.marking-manual{border:1px solid var(--line);border-radius:10px;background:#fbfdff;padding:0 12px}
.marking-manual>summary{padding:11px 0;font-size:12px;font-weight:600;color:#415d75;cursor:pointer;list-style:none}
.marking-manual>summary::-webkit-details-marker{display:none}
.marking-manual>summary::before{content:'▸ ';color:#7fa6b8}
.marking-manual[open]>summary::before{content:'▾ '}
.marking-manual label{display:block;font-size:12px;color:#415d75;font-weight:600;margin-bottom:10px}
.marking-manual textarea{width:100%;margin-top:6px;padding:10px 12px;border:1px solid var(--line);border-radius:9px;font-family:inherit;font-size:13px;line-height:1.7;color:var(--ink);background:#fff;resize:vertical;box-sizing:border-box}
/* 逐空状态胶囊：对/错/空/半对/看不清 五态各一色。
   ☠️「空」必须与「错」视觉上明显区分 —— 两者补救动作完全不同（错=讲法问题，空=没下笔）。 */
.blank-line{display:flex;flex-wrap:wrap;gap:6px;margin:8px 0 4px}
.blank-chip{display:inline-flex;align-items:baseline;gap:5px;padding:3px 9px;border-radius:8px;font-size:11.5px;background:#eef3f6;color:#3d5a6b;border:1px solid #dde7ec;max-width:100%}
.blank-chip b{font-size:10.5px;font-weight:700}
.blank-chip i{font-style:normal;font-size:10px;opacity:.65}
.blank-chip span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:190px;color:#5a7285}
.blank-chip.ok{background:#e8f5ec;border-color:#c6e3d0;color:#1f6b3f}
.blank-chip.bad{background:#fdecea;border-color:#f4cdc7;color:#a8382a}
.blank-chip.void{background:#fdf4e3;border-color:#efdcb8;color:#8a6116}
.blank-chip.half{background:#eef0fb;border-color:#d5daf0;color:#4a4f9a}
.blank-chip.dim{background:#f3f4f6;border-color:#e3e6ea;color:#6b7684}
/* 学习档案 dossier —— 用户点名「非常重要」：孩子的学习目标 + 后续每一步计划的依据。 */
.dossier{margin-top:16px;border:1px solid #cfdff0;border-radius:11px;background:#f7faff;overflow:visible}
.dossier>header{padding:11px 15px;background:#eaf1fb;border-bottom:1px solid #cfdff0;display:flex;justify-content:space-between;align-items:baseline;gap:12px;flex-wrap:wrap}
.dossier>header b{font-size:13px;color:#2a4d7a}
.dossier>header small{font-size:11px;color:#5f7fa3}
.stat-row{display:flex;flex-wrap:wrap;gap:8px;padding:12px 15px;border-bottom:1px solid #e4edf8}
.stat{display:inline-flex;flex-direction:column;align-items:center;min-width:52px;padding:6px 10px;border-radius:8px;background:#fff;border:1px solid #e0e9f5}
.stat b{font-size:15px;color:#24405f;line-height:1.1}
.stat small{font-size:10px;color:#7089a1;margin-top:2px}
.stat.acc{background:#eef7ef;border-color:#d3ead8}
.stat.acc b{color:#237a44}
.cc-row{display:flex;flex-wrap:wrap;align-items:center;gap:8px;padding:11px 15px;border-bottom:1px solid #e4edf8;font-size:12px}
.cc-row>b{color:#2a4d7a;font-size:12px}
.cc-item{display:inline-flex;align-items:center;gap:5px}
.cc-item b{font-size:12px;color:#24405f}
.gap-block{padding:12px 15px;border-bottom:1px solid #e4edf8}
.gap-block>b{font-size:12px;color:#2a4d7a}
.gap-list{margin:8px 0 0;padding-left:18px;display:grid;gap:9px}
.gap-list li{font-size:12.5px;color:#33506a;line-height:1.6;overflow-wrap:anywhere;word-break:break-word}
.gap-list li b{color:#20404f}
.sev{display:inline-block;margin-left:7px;padding:1px 7px;border-radius:5px;font-size:10px;font-weight:600;background:#eef3f6;color:#4f6b80}
.sev.core{background:#fadfd8;color:#a33f22}
.sev.middle{background:#fdeee0;color:#a4651a}
.sev.edge{background:#e8eef3;color:#4f6b80}
.gap-ev,.gap-up{font-size:11.5px;color:#6b7f90;margin-top:2px}
.dz-line{padding:10px 15px;font-size:12.5px;color:#33506a;line-height:1.7;border-bottom:1px solid #e4edf8}
.dz-line:last-child{border-bottom:none}
.dz-line b{color:#20404f}
.explain-item{padding:15px;border-top:1px solid #e6f1ef}
.explain-item:first-of-type{border-top:none}
.explain-item h4{margin:0 0 10px;font-size:13px;color:#20404f}
.think-box{background:#fff8ef;border:1px dashed #e6c9a0;border-radius:9px;padding:10px 12px;margin:8px 0}
.think-box b{display:block;font-size:11px;color:#a4651a;letter-spacing:.5px;margin-bottom:5px}
.think-box p{margin:0;font-size:12.5px;color:#5c451f;line-height:1.7}
.path-step{display:grid;grid-template-columns:22px 1fr;gap:10px;padding:8px 0;border-top:1px solid #eef4f3}
.path-step:first-child{border-top:none}
.path-step .num{display:grid;place-items:center;width:22px;height:22px;border-radius:50%;background:#d9efe9;color:#1d7a6a;font-size:11px;font-weight:700}
.path-step b{display:block;font-size:12.5px;color:#20404f;margin-bottom:3px}
.path-step span{font-size:12px;color:#4d6577;line-height:1.7}
.path-step em{display:block;margin-top:4px;font-size:11.5px;color:#8a6a2f;font-style:normal}
.parent-script{background:#eef7fb;border-radius:9px;padding:11px 13px;margin-top:10px}
.parent-script b{display:block;font-size:11px;color:#2b6a8c;letter-spacing:.5px;margin-bottom:6px}
.parent-script p{margin:5px 0 0;font-size:12.5px;color:#22485e;line-height:1.75}
.parent-script p:before{content:"「";color:#7ba8c4}
.parent-script p:after{content:"」";color:#7ba8c4}
@media(max-width:900px){.marking-steps{grid-template-columns:1fr}.marking-form .actions{flex-direction:column}}

/* ===== 2026-09-24 补：诊断/讲解结果容器状态 + 错因分档配色 + 公共方法论标签 ===== */
/* ☠️ 三个容器状态必须显式写：空 / 加载中 / 出错。否则「点了没反应」和「正在跑」在界面上长得一样，
      用户会重复点、会以为坏了 —— 上一轮题量排查时就吃过这个亏。 */
#diagnose-result:empty,#explain-result:empty{display:none}
#diagnose-result.loading,#explain-result.loading{padding:22px;text-align:center;color:#4d7f8b;font-size:13px;background:#f4fafb;border:1px dashed #b8dbe1;border-radius:11px;margin-top:18px}
#diagnose-result.error,#explain-result.error{padding:14px 16px;color:#8f3b22;font-size:13px;background:#fdf2ee;border:1px solid #f0cfc2;border-radius:11px;margin-top:18px}
/* 错因分三档配色：上游=红（根子上的洞）/ 中间=橙 / 下游=灰蓝（习惯问题，改起来快） */
.cause-tag.up{background:#fadfd8;color:#a33f22}
.cause-tag.mid{background:#fdeee0;color:#a4651a}
.cause-tag.low{background:#e8eef3;color:#4f6b80}
.cause-main{font-size:11px;color:#8b9aa8;font-weight:400;margin-left:auto;display:flex;align-items:center;gap:6px}
.diag-head{background:#fbfefd}
.diag-item .diag-row+.diag-row{margin-top:4px}
/* 专家卡片上的「◫ 公共方法论」标签：让老师一眼看出这位专家挂的是哪一篇前缀（小学数学 / 小学语文…） */
.method-tag{display:inline-block;margin-top:7px;margin-right:8px;padding:2px 8px;border-radius:6px;font-size:10.5px;font-weight:600;background:#eef4fb;color:#35629b}


/* ===== 2026-09-27 需求：把「正在跟踪 / 当前学员 / 学科」整块嵌进蓝色 hero 背景板 =====
   hero 内从左到右 = 文案 | 上「正在跟踪」+ 下「当前学员」 | 三科胶囊 | AI 学习协同。
   ☠️ hero 是深蓝底 → 原来的白卡/浅灰底塞进去会「糊成一块」，这里统一改成半透明白 + 浅色字。
   ☠️ 科目按钮由 app.js 的 renderSubjectBar() 动态重建 → 选择器必须挂在 .hero 后代上，不能挂在按钮自身。
   ☠️ 原来的独立 .toolbar 条已删除（内容全部移入 hero）。 */
.hero{gap:26px}
.hero-copy{flex:1 1 auto;min-width:0}
.hero-controls{position:relative;z-index:1;display:flex;align-items:center;gap:26px;flex:0 0 auto}
.hero-track{display:grid;gap:12px;min-width:208px}
.tb-student{display:grid;gap:6px}
#student-focus{min-width:0;padding:10px 15px;border:1px solid #ffffff33;border-left:3px solid var(--cyan);border-radius:11px;background:#ffffff0f}
#student-focus strong{font-size:22px;line-height:1.3}
#student-focus .grade{font-size:11px;color:var(--muted);letter-spacing:0}
.hero-controls #student-focus span{color:#8fb0c6}
.hero-controls #student-focus strong{color:#fff}
.hero-controls #student-focus .grade{color:#9fb8ce}
.hero-controls .tb-student>span{color:#8fb0c6}
.hero-controls .tb-student select{min-width:200px;background:#ffffff14;border-color:#ffffff33;color:#fff}
.hero-controls .tb-student select option{background:#fff;color:#12293f}
.hero-controls .tb-subjects{display:grid;gap:10px;justify-items:end;min-width:0}
/* 用户画的是「三个分开的圆圈」→ 学科不做成一整条胶囊，而是三颗独立胶囊（浅描边、低饱和，克制不刺眼） */
.hero-controls .tb-subjects .subjects{order:0;flex-wrap:nowrap;justify-content:flex-end;gap:14px;padding:0;background:transparent;border:0}
.hero-controls .subjects button{border:1px solid #ffffff2e;background:#ffffff0f;border-radius:12px;padding:11px 18px;color:#c3d7e8;transition:background .15s,color .15s,border-color .15s}
.hero-controls .subjects button:hover{color:#fff;background:#ffffff1c;border-color:#ffffff52}
.hero-controls .subjects small{color:#7d99b3}
.hero-controls .subjects .selected{background:#63ded1;border-color:#63ded1;color:#0b2137;box-shadow:0 6px 16px #06304140}
.hero-controls .subjects .selected small{color:#1a6260}
/* 「后续科目」预留位：只占位、不显示；主控台新增 AI 科目后会自动排进这里 */
.subjects-next{width:100%;min-height:46px}
/* 学员信息只读展示（数据来自机构端「学员管理」，单一事实源） */
.roster-line{padding:9px 13px;border:1px solid var(--line);border-radius:10px;background:#f8fafd;color:var(--ink);font-weight:600;font-size:13px}
.roster-line.missing{border-color:#f0c9bf;background:#fff6f3;color:#a63e2e}
.roster-line small{display:block;font-weight:400;color:var(--muted);font-size:11px;margin-top:4px}
/* 窄屏回退：控制区整体换到第二行（仍在蓝色板内），不溢出、不裁切 */
/* ☠️ 必须给 .hero-copy 一个明确 flex-basis（300px）：若用 auto，换行判定会按文案的 max-content 宽度算，
      它会独吞整行 → AI 学习协同被挤到第三行、孤零零一颗。 */
@media(max-width:1180px){.hero{flex-wrap:wrap}.hero-copy{flex:1 1 300px}.hero-orbit{flex:0 0 auto}.hero-controls{order:3;flex:1 1 100%;flex-wrap:wrap;justify-content:flex-start;gap:20px}.hero-track{flex:1 1 240px;min-width:0}.hero-controls #student-focus{order:0;width:auto;border-left:3px solid var(--cyan);border-bottom:0}.hero-controls .tb-subjects{justify-items:start}.hero-controls .tb-subjects .subjects{justify-content:flex-start;flex-wrap:wrap}}
@media(max-width:900px){.subjects-next{min-height:0}}

/* ===== 2026-09-25：弹窗样式 =====
   ☠️ 此前 style.css 里**完全没有** .modal 相关规则，专家配置弹窗一直是「内联在页面底部的裸块」。
      这里补齐，顺带把它也修好。 */
.modal-mask{position:fixed;inset:0;background:#0f223c99;display:grid;place-items:center;z-index:70;padding:24px;overflow:auto}
.modal{background:#fff;border-radius:16px;padding:24px 26px;width:100%;max-width:640px;max-height:86vh;overflow:auto;box-shadow:0 24px 70px #0b1a2e40}
.modal-title{font-size:17px;font-weight:700;color:var(--navy);margin-bottom:8px}
.modal .actions{justify-content:flex-end;margin-top:18px}
.modal .form-grid{display:grid;gap:12px}
/* 生成前确认弹窗（需求 2） */
.diag-confirm-modal .checklist{margin:14px 0}
.confirm-error{border:1px solid #f0c9bf;background:#fff5f1;color:#a63e2e;border-radius:10px;padding:11px 13px;font-size:12px;margin-top:6px}
.confirm-ok{border:1px solid #cdeae1;background:#f1fbf8;color:#1d7f68;border-radius:10px;padding:11px 13px;font-size:12px;margin-top:6px}
/* 历史出题记录（需求 2） */
.history-item{display:flex;align-items:center;justify-content:space-between;gap:12px;border:1px solid var(--line);border-radius:10px;padding:10px 12px;margin-bottom:8px;background:#fff}
.history-item.on{border-color:#8fd8cd;background:#f3fbf9}
.hi-main b{display:block;font-size:13px;color:var(--ink)}
.hi-main small{color:var(--muted);font-size:11px}
.history-item .secondary{padding:7px 12px;font-size:11px}.history-graded{display:inline-block;margin-right:8px;color:#16785f;background:#edfaf5;border-color:#b9e6d5}
.history-delete{color:#b42318;border-color:#f0b7b2;background:#fff8f7;opacity:1!important;cursor:pointer!important}.history-delete:hover{background:#fff0ee;border-color:#d98b83}
.plan-schedule{display:inline-block;margin:4px 0 12px;padding:5px 10px;border-radius:999px;background:#eef8f7;color:#147a70;font-size:11px;font-weight:600}
@media(max-width:900px){.modal{max-width:none;padding:18px}.diag-confirm-modal .actions{flex-wrap:wrap}}
/* ===== 2026-09-27：页面预览与导出件对齐（分数 / 小问 / 图形）=====
 * ☠️ 这三组规则必须与 public/ai/paper.js 里的同名 CSS **语义一致**。
 *    预览里看到「上下结构分数 + 小问分行 + 配图」，打印出来也必须是这三样 ——
 *    否则老师会遇到「屏幕上好好的，打出来全变了」，那是最难解释的一类反馈。
 * ☠️ .fr 的 vertical-align:-.52em 不要改：分数要正好压在两行文字之间，
 *    调大了会把行距撑开、调小了会和上一行的字叠在一起。 */
.question-title .sub{display:block;margin:6px 0}
.question-title .sub-item{display:block;margin:10px 0;padding-left:4px}

/* ===== 学员设置入口与弹窗 ===== */
.hero-track{grid-template-columns:minmax(0,1fr) minmax(0,1fr);align-items:stretch}
.hero-track .tb-student{grid-column:1 / -1}
.student-settings-trigger{display:grid;align-content:center;gap:2px;min-width:0;padding:10px 15px;border:1px solid #ff746b;background:#ff5f5730;border-radius:11px;color:#fff;text-align:left;transition:background .15s,border-color .15s}
.student-settings-trigger:hover{background:#ff5f574d;border-color:#ff918a}
.student-settings-trigger span{font-size:11px;color:#ffd3cf;letter-spacing:.5px}
.student-settings-trigger strong{font-size:17px;line-height:1.35;color:#fff}
.student-settings-trigger small{font-size:10px;color:#f1b4ae;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.student-settings-trigger.saved{border-color:#63ded1;background:#63ded11c}
.student-settings-trigger.saved span{color:#a5f2e9}
.student-settings-trigger.saved small{color:#9bd9d3}
.student-settings-trigger:disabled{opacity:1;cursor:pointer}
.student-settings-modal{position:fixed;inset:0;z-index:80;background:#0b1d33b8;padding:24px;overflow:auto}
.student-settings-dialog{width:min(920px,100%);max-height:92vh;overflow:auto;margin:2vh auto 0;background:#f7fafd;border:1px solid #dce6ef;border-radius:18px;box-shadow:0 24px 80px #06142666}
.student-settings-dialog-head{display:flex;justify-content:space-between;gap:20px;align-items:flex-start;padding:24px 28px 12px;background:#fff;border-bottom:1px solid var(--line);border-radius:18px 18px 0 0}
.student-settings-dialog-head h2{margin:6px 0 2px;color:var(--navy)}
.student-settings-dialog-head p{margin:0;color:var(--muted);font-size:12px}
.student-settings-dialog-actions{display:flex;gap:8px;flex:0 0 auto}
.student-settings-dialog-head .quiet{flex:0 0 auto}
.student-settings-dialog #profile-panel{margin:0;border:0;border-radius:0;box-shadow:none;background:transparent;padding:22px 28px 28px}
.student-settings-dialog #profile-panel>summary{display:none}
.student-settings-dialog .profile-grid{background:#fff;border:1px solid var(--line);border-radius:14px;padding:18px}
.student-settings-dialog .tb-block{background:#fff}
.student-settings-dialog #subject-sync{margin-top:14px}
@media(max-width:560px){.hero-track{grid-template-columns:1fr}.hero-track .tb-student{grid-column:auto}.student-settings-modal{padding:10px}.student-settings-dialog{margin:0;max-height:96vh}.student-settings-dialog-head{padding:18px 18px 10px}.student-settings-dialog #profile-panel{padding:14px 18px 22px}.student-settings-dialog .profile-grid{grid-template-columns:1fr}.student-settings-dialog .profile-grid .wide{grid-column:auto}}

/* ===== 摸底&目标&计划合并入口 ===== */
.learning-pipeline [data-pipeline-jump]{cursor:pointer;transition:border-color .15s,background .15s,transform .15s}
.learning-pipeline [data-pipeline-jump]:hover{border-color:#9bbcf4;background:#f7faff;transform:translateY(-1px)}
.setup-view{padding-bottom:18px}
.setup-tabs-head{display:flex;justify-content:space-between;align-items:flex-end;gap:20px;margin:12px 0 16px}
.setup-tabs-head h2{margin:5px 0 3px;color:var(--navy)}
.setup-tabs-head p{margin:0;font-size:12px}
.setup-save-area{display:flex;align-items:center;gap:9px;flex:0 0 auto}
.setup-tabs{display:flex;gap:8px;border-bottom:1px solid var(--line);margin-bottom:18px}
.setup-tabs button{border:1px solid transparent;border-bottom:3px solid transparent;background:transparent;color:var(--muted);padding:10px 18px 11px;font-weight:700;font-size:13px;border-radius:10px 10px 0 0}
.setup-tabs button:hover{color:#245fcc;background:#f7faff}
.setup-tabs button.selected{color:#245fcc;border-bottom-color:#2864df;background:#f5f8ff}
.setup-tabs [aria-selected="true"]{color:#245fcc}
#tab-plan[style*="display: contents"]{min-width:0}
@media(max-width:700px){.setup-tabs-head{align-items:flex-start;flex-direction:column}.setup-save-area{width:100%;justify-content:space-between}.setup-tabs{overflow:auto}.setup-tabs button{white-space:nowrap;padding-left:13px;padding-right:13px}}
.fr{display:inline-flex;flex-direction:column;vertical-align:-.52em;line-height:1.05;font-size:.82em;text-align:center;margin:0 .14em}
.fr span:first-child{border-bottom:1.4px solid currentColor;padding:0 .2em}
.fig{margin:12px 0 4px;text-align:center}
.fig svg{max-width:100%;height:auto}

/* 04 成长报告：归档记录默认只显示摘要，点击后展开完整错因诊断。 */
.growth-report-card{padding:0;overflow:visible}
.growth-report-card>summary{list-style:none;display:flex;align-items:center;justify-content:space-between;gap:18px;padding:18px 21px;cursor:pointer}
.growth-report-card>summary::-webkit-details-marker{display:none}
.growth-report-card>summary:hover{background:#f8fbfd}
.growth-report-summary{min-width:0}
.growth-report-summary h3{margin:8px 0 4px;color:var(--navy)}
.growth-report-summary p{margin:0 0 5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.growth-report-summary small{color:var(--muted);font-size:11px}
.growth-report-toggle{flex:none;color:#2864df;font-size:12px;font-weight:600}
.growth-report-toggle:after{content:' ↗'}
.growth-report-card[open] .growth-report-toggle:after{content:' ↑'}
.growth-report-detail{padding:0 18px 18px;border-top:1px solid var(--line);overflow-wrap:anywhere;overflow:visible;max-height:none}
.growth-report-detail .diag-block{margin-top:16px}
@media print{.growth-report-card>summary{padding:12px 0}.growth-report-detail{padding:0}.growth-report-toggle{display:none}}
/* 数学学习闭环：页面上方只保留当前下一步提示，避免把操作入口误解成固定流程。 */
.learning-pipeline{margin:18px 0 20px;padding:20px 22px;background:linear-gradient(135deg,#f7f9ff,#fff);border:1px solid #e3e8f5}
.pipeline-title{display:flex;align-items:baseline;gap:14px;flex-wrap:wrap;margin-bottom:16px}.pipeline-title h2{margin:0;font-size:18px}.pipeline-title p{margin:0;color:var(--muted);font-size:13px;flex:1;min-width:260px}
.pipeline-steps{display:flex;align-items:stretch;gap:8px;overflow:auto}.pipeline-steps>div{min-width:112px;padding:11px 12px;border:1px solid #e3e8f5;border-radius:12px;background:#fff;display:grid;grid-template-columns:auto 1fr;column-gap:8px;align-items:center}.pipeline-steps>div b{grid-row:1 / span 2;color:var(--blue);font-size:13px}.pipeline-steps>div span{font-weight:700;font-size:13px}.pipeline-steps>div small{color:var(--muted);font-size:11px}.pipeline-steps>i{align-self:center;color:#aab4c6;font-style:normal}.pipeline-steps>div.done{border-color:#9bd5bf;background:#f1fbf6}.pipeline-steps>div.current{border-color:#8aa9ee;box-shadow:0 0 0 3px rgba(74,108,184,.1)}
.pipeline-next{display:flex;align-items:center;justify-content:space-between;gap:20px;margin-top:6px;padding:15px 17px;border:1px solid #b9d9f1;border-radius:13px;background:#f5faff}.pipeline-next>div{min-width:0}.pipeline-next .eyebrow{display:block;margin-bottom:4px;color:#6280a2;font-size:10px}.pipeline-next b{display:block;color:var(--navy);font-size:16px}.pipeline-next p{margin:4px 0 0;color:var(--muted);font-size:12px}.pipeline-next button{flex:none;white-space:nowrap}@media(max-width:560px){.pipeline-next{align-items:flex-start;flex-direction:column;gap:12px}.pipeline-next button{width:100%}}
.diagnostic-review-workspace{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:16px;align-items:stretch;min-width:0}.diagnostic-review-workspace>#paper-workspace{display:contents}.diagnostic-review-workspace>.diagnostic-side,.diagnostic-review-workspace>#panel-marking{min-width:0;margin:0}.diagnostic-review-workspace>.diagnostic-side{background:#fbfdff}.diagnostic-main{display:none!important}@media(max-width:900px){.diagnostic-review-workspace{grid-template-columns:1fr}}
.weight-overview{margin-top:16px}.weight-overview .weight-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}.weight-overview .weight-list{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:8px}.weight-overview .weight-item{padding:10px 12px;border-radius:10px;background:#fafbfe;border:1px solid #e7ebf5}.weight-overview .weight-item b{display:block;font-size:13px}.weight-overview .weight-item small{color:var(--muted)}.weight-overview .weight-score{float:right;color:#9a5b00;font-weight:700}
/* 2026-10-06：学习中心主界面重排。首次摸底保留为基础入口，确认长期目标后把注意力移到本周执行。 */
.main-tabs{margin-top:24px;gap:8px;background:#fff;border:1px solid var(--line);border-radius:14px;padding:6px;box-shadow:0 4px 18px #18334e05}
.main-tabs button{padding:12px 18px;border-radius:9px;border:0;color:#69809a}.main-tabs button.selected{background:#10243d;color:#fff}.main-tabs button.selected:after{display:none}
.foundation-panel{margin-top:0}.foundation-panel>summary{display:flex;justify-content:space-between;align-items:center;gap:16px;padding:15px 18px;border:1px solid #cfddea;border-radius:14px;background:#f8fbfe;list-style:none}.foundation-panel>summary::-webkit-details-marker{display:none}.foundation-panel>summary b{display:block;color:var(--navy);font-size:15px}.foundation-panel>summary small{display:block;color:var(--muted);font-size:11px;margin-top:2px}.foundation-panel>summary em{font-style:normal;color:var(--blue);font-size:11px}.foundation-panel[open]>summary{margin-bottom:18px;border-color:#98b7e9;background:#f7faff}.foundation-panel.foundation-collapsed>summary{box-shadow:0 2px 12px #18334e08}
.weekly-view{padding-bottom:18px}.weekly-heading,.report-heading{display:flex;justify-content:space-between;align-items:flex-end;gap:20px;margin:12px 0 21px}.weekly-heading h1,.report-heading h1{margin:4px 0 6px;color:var(--navy);font-size:28px;letter-spacing:-.8px}.weekly-heading p,.report-heading p{margin:0;max-width:680px}.week-status{display:flex;align-items:center;gap:9px;border:1px solid #dbe7f2;border-radius:999px;padding:9px 14px;color:#6c8196;background:#fff;white-space:nowrap}.week-status .status-dot{width:8px;height:8px;border-radius:50%;background:#9aafc0}.week-status.active{border-color:#a9dfd0;background:#effaf7;color:#207e6e}.week-status.active .status-dot{background:#27b596}.weekly-grid{display:grid;grid-template-columns:1.35fr 1fr;gap:18px}.weekly-grid>.panel{min-height:190px}.weekly-plan-card{grid-row:span 2}.weekly-action-card{background:linear-gradient(135deg,#fff,#f5fbfb)}.monthly-card{min-height:auto!important}.weight-card{grid-column:1 / -1}.weekly-plan-content{padding:5px 0}.weekly-plan-summary{display:flex;justify-content:space-between;gap:14px;align-items:center;color:var(--navy);font-size:17px}.weekly-plan-content>p{font-size:12px;margin:8px 0 15px}.weekly-task-list{display:grid;gap:0;border-top:1px solid #edf2f6}.weekly-task-list>div{display:flex;gap:12px;padding:11px 0;border-bottom:1px solid #edf2f6;font-size:12px}.weekly-task-list b{min-width:66px;color:#2a68d4}.weekly-task-list span{flex:1}.execution-empty{display:flex;align-items:center;gap:13px;padding:16px 0}.execution-icon{display:grid;place-items:center;width:43px;height:43px;border-radius:13px;background:#e8f5f4;color:#1c9c8b;font-size:26px}.execution-empty h3{margin:0 0 3px;color:var(--navy);font-size:15px}.execution-empty p{margin:0;font-size:12px}.weekly-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:5px}.monthly-card p{font-size:12px;margin:3px 0 13px}.goal-plan-view{display:grid;grid-template-columns:minmax(0,.85fr) minmax(0,1.15fr);gap:18px;align-items:start}.long-goal-card,.plan-review-card{min-width:0}.section-kicker{display:flex;justify-content:space-between;align-items:center;gap:12px}.badge.good{color:#1d896f;background:#ecfaf5;border-color:#b8e6d7}.long-goal-card h2{font-size:23px;margin-top:12px}.long-goal-card>.section-help{margin-bottom:18px}.goal-form-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}.goal-form-grid label{font-size:12px}.goal-form-grid label.wide{grid-column:1 / -1}.goal-form-grid textarea{margin:0;min-height:92px;background:#fbfdff}.goal-form-grid input{background:#fbfdff}.goal-actions{display:flex;gap:9px;flex-wrap:wrap;margin-top:15px}.plan-review-card{min-height:420px}.plan-list .plan-card{margin:0 0 12px;padding:17px}.plan-card-head{display:flex;justify-content:space-between;align-items:center;gap:12px}.plan-card-head small{color:var(--muted);font-size:11px}.plan-card h3{margin:10px 0 4px;color:var(--navy)}.plan-reason{font-size:12px;margin:0 0 12px}.plan-rows{border-top:1px solid #edf2f6}.plan-rows .plan-row{padding:10px 0}.report-view .panel{min-height:500px}.report-filters{display:flex;gap:8px;flex-wrap:wrap;margin:18px 0 5px}.report-filters span{border:1px solid #dce7f0;border-radius:999px;padding:5px 11px;color:#607990;font-size:11px;background:#f8fbfd}
@media(max-width:900px){.weekly-grid,.goal-plan-view{grid-template-columns:1fr}.weekly-plan-card{grid-row:auto}.weight-card{grid-column:auto}.main-tabs{overflow:auto;justify-content:flex-start}.main-tabs button{white-space:nowrap}.weekly-heading,.report-heading{align-items:flex-start;flex-direction:column}.week-status{align-self:flex-start}}
@media(max-width:560px){.main-tabs{gap:3px;padding:4px}.main-tabs button{padding:10px 11px;font-size:11px}.weekly-heading h1,.report-heading h1{font-size:24px}.goal-form-grid{grid-template-columns:1fr}.goal-form-grid label.wide{grid-column:auto}.foundation-panel>summary{padding:13px}.weekly-grid>.panel{padding:18px}.weekly-plan-summary{font-size:15px}}
.long-goal-summary{display:flex;justify-content:space-between;align-items:center;gap:14px;list-style:none;cursor:pointer;padding-bottom:4px}.long-goal-summary::-webkit-details-marker{display:none}.long-goal-summary b{display:block;font-size:15px;color:var(--navy)}.long-goal-summary small{display:block;color:var(--muted);font-size:11px;margin-top:3px}.long-goal-summary em{font-style:normal;color:var(--blue);font-size:11px;white-space:nowrap}.long-goal-card[open] .long-goal-summary{border-bottom:1px solid var(--line);margin-bottom:17px;padding-bottom:14px}.onboarding-next{display:flex;justify-content:space-between;align-items:center;gap:16px;padding:15px 18px;margin-bottom:17px;border:1px solid #b9d9f1;border-radius:14px;background:#f3f9fe}.onboarding-next b{color:var(--navy)}.onboarding-next p{margin:3px 0 0;font-size:12px}.onboarding-next button{flex:none}.execution-tools{display:flex;justify-content:flex-end;flex-wrap:wrap;gap:8px;margin:16px 0 0}.execution-tools:empty{display:none}.report-filters{align-items:center}.report-filters button{border:1px solid #dce7f0;border-radius:999px;padding:6px 12px;color:#607990;background:#f8fbfd;font-size:11px}.report-filters button.selected{background:#10243d;border-color:#10243d;color:#fff}.report-timeline{display:grid;gap:8px}.report-timeline .report-card{margin:0}.goal-confirm-text{background:#f7fafd;border-radius:9px;padding:10px 12px;color:#3b5873;font-size:13px}.execution-active{display:flex;align-items:center;gap:13px;padding:16px 0}.execution-active h3{margin:0 0 3px;color:var(--navy);font-size:15px}.execution-active p{margin:0;font-size:12px}
.report-visual-section{margin-top:22px;padding-top:24px;border-top:1px solid #e7edf4}.report-visual-head{display:flex;align-items:flex-start;justify-content:space-between;gap:18px;margin-bottom:16px}.report-visual-head h2{margin:4px 0 5px;color:var(--navy)}.report-visual-head .section-help{margin:0;max-width:760px}.wrongbook-grid{display:grid;grid-template-columns:minmax(280px,.82fr) minmax(330px,1.18fr);gap:16px}.wrongbook-ranking,.wrongbook-detail{min-width:0;border:1px solid #e2e9f2;border-radius:14px;background:#fbfdff;padding:14px}.wrongbook-heatmap-title{display:flex;justify-content:space-between;align-items:center;margin:0 3px 10px;color:var(--navy)}.wrongbook-heatmap-title small{color:var(--muted);font-size:11px}.wrongbook-rank{position:relative;display:flex;align-items:center;gap:10px;width:100%;border:1px solid #e0e8f1;border-radius:10px;background:linear-gradient(90deg,rgba(245,112,83,.13) var(--heat),#fff var(--heat));padding:10px 11px;margin:7px 0;text-align:left;color:var(--ink)}.wrongbook-rank:hover,.wrongbook-rank.selected{border-color:#82b2eb;box-shadow:0 0 0 2px #82b2eb25}.wrongbook-rank .rank-no{font-size:11px;color:#8ba0b6;min-width:22px}.wrongbook-rank .rank-name{min-width:0;flex:1}.wrongbook-rank .rank-name b{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.wrongbook-rank .rank-name small{display:block;color:var(--muted);font-size:10px;margin-top:2px}.wrongbook-rank .rank-score{font-weight:700;color:#a55a27;font-size:12px}.wrongbook-detail{background:linear-gradient(145deg,#fff,#f7fbff);min-height:330px}.wrongbook-detail-head{display:flex;justify-content:space-between;align-items:flex-start;gap:10px}.wrongbook-detail-head h3{margin:8px 0 2px;color:var(--navy)}.wrongbook-detail-head p{margin:0;font-size:11px}.wrongbook-hex-label{font-size:10px;letter-spacing:1px;color:#7a91a8}.hex-radar{display:block;width:min(100%,330px);height:auto;margin:4px auto -2px}.hex-radar .radar-grid{fill:#f5fafc;stroke:#c9d8e6;stroke-width:1}.hex-radar .radar-grid.mid{fill:none;stroke:#dce6ef;stroke-dasharray:3 3}.hex-radar line{stroke:#d6e1eb;stroke-width:1}.hex-radar text{fill:#6d8297;font-size:10px}.hex-radar .radar-value{fill:#45b8a75c;stroke:#169a8b;stroke-width:2}.wrongbook-evidence-list{border-top:1px solid #e7edf4;padding-top:11px;font-size:11px}.wrongbook-evidence{display:grid;grid-template-columns:58px 1fr;gap:4px 9px;padding:8px 0;border-bottom:1px solid #eef2f6}.wrongbook-evidence span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.wrongbook-evidence small{grid-column:2;color:var(--muted);font-size:10px}.wrongbook-evidence.muted{display:block;color:var(--muted)}.knowledge-tree-section{padding-bottom:22px}.knowledge-legend{display:flex;gap:10px;flex-wrap:wrap;align-items:center;justify-content:flex-end;color:var(--muted);font-size:10px}.knowledge-legend span{white-space:nowrap}.knowledge-legend i{display:inline-block;width:9px;height:9px;margin-right:4px;border-radius:50%;vertical-align:-1px}.knowledge-legend i.mastered{background:#209a83}.knowledge-legend i.developing{background:#8ed2c4}.knowledge-legend i.unknown{background:#c7d0dc}.knowledge-legend i.unseen{background:#edf1f5;border:1px solid #d6dfe9}.knowledge-tree-wrap{border:1px solid #e1e9f2;border-radius:14px;background:radial-gradient(circle at 12% 20%,#f0fbfa,transparent 30%),#fbfdff;overflow:auto}.knowledge-tree-wrap svg{display:block;width:980px;min-width:980px;height:620px;padding:12px}.tree-link{stroke:#cddbe7;stroke-width:1.2}.tree-node{cursor:pointer}.tree-node circle{stroke-width:2}.tree-node text{font-size:10px;fill:#4e667e}.tree-node.mastered circle{fill:#209a83;stroke:#157762}.tree-node.developing circle{fill:#8ed2c4;stroke:#4aa895}.tree-node.unknown circle{fill:#c7d0dc;stroke:#9caabd}.tree-node.unseen circle{fill:#edf1f5;stroke:#d2dce8}.tree-node:hover circle{stroke:#2864df;stroke-width:3}.knowledge-tree-detail{border-top:1px solid #e6edf4;padding:11px 14px;color:#5d748d;font-size:12px;background:#fff}.knowledge-tree-detail b{color:var(--navy);margin-right:9px}.knowledge-tree-detail p{display:inline;margin:0 0 0 8px}.badge.mastered{color:#177c68;background:#ecfaf5;border-color:#b9e6d6}.badge.developing{color:#2a8b7d;background:#eefaf8;border-color:#bfe6df}.badge.unknown{color:#657488;background:#f1f4f7;border-color:#d6dee8}.badge.unseen{color:#7f91a4;background:#f8fafc;border-color:#e0e7ee}
@media(max-width:800px){.wrongbook-grid{grid-template-columns:1fr}.report-visual-head{flex-direction:column}.knowledge-legend{justify-content:flex-start}}
.required-mark{color:#c45a4a;font-size:10px;margin-left:6px;font-weight:700}.plan-capacity{display:flex;justify-content:space-between;gap:12px;align-items:center;border:1px solid #dce8ef;border-radius:9px;padding:8px 10px;margin:10px 0;font-size:11px}.plan-capacity span{color:var(--muted)}.plan-capacity.good{background:#effaf6;border-color:#bfe5d7;color:#187b67}.plan-capacity.warn{background:#fff9eb;border-color:#eed7a0;color:#936b1c}.plan-capacity.danger{background:#fff2ef;border-color:#efc1b7;color:#a54535}
.history-why{display:block;color:#61758b;font-size:11px;margin-top:3px;line-height:1.45}.paper-why{margin-top:12px;padding:10px 12px;background:#f3f8fc;border-left:3px solid #3aa9a0;border-radius:6px;color:#45627c;font-size:12px}.session-why{margin-top:10px;padding:10px 12px;border-left:3px solid #3aa9a0;background:#f3f8fc;border-radius:6px;font-size:12px;color:#45627c}
.institution-login-hint{max-width:420px}.institution-login-hint p{line-height:1.8}.primary-link{display:inline-flex;align-items:center;justify-content:center;margin-top:16px;padding:11px 16px;border-radius:10px;background:#2563eb;color:#fff;text-decoration:none;font-weight:700}

/* 2026-10-07：历史记录与批改回传整合 */
.history-head-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.history-head-actions button{white-space:nowrap}
.history-delete:disabled{opacity:.42!important;cursor:not-allowed!important;color:#8b98a8;border-color:#dfe5ec;background:#f5f7fa;box-shadow:none}
.pipeline-copy{min-width:0;flex:1}.pipeline-model-status{flex:0 0 auto;max-width:420px;padding:9px 12px;border:1px solid #bfe6de;border-radius:10px;background:#f0faf7;color:#187967;font-size:11px;line-height:1.5;text-align:right}.pipeline-model-status.disconnected{border-color:#efd1c8;background:#fff7f4;color:#a64b37}
.diagnostic-intro{display:grid;grid-template-columns:minmax(0,1fr) auto auto;align-items:center;gap:16px}.diagnostic-generate-inline{white-space:nowrap}.diagnostic-state{min-width:136px}
.marking-modal{position:fixed;inset:0;z-index:90;background:#0b1d33b8;padding:22px;overflow:auto}.marking-modal-dialog{width:min(980px,100%);max-height:94vh;overflow:auto;margin:2vh auto 0;background:#f7fafd;border:1px solid #dce6ef;border-radius:18px;box-shadow:0 24px 80px #06142666}.marking-modal-head{display:flex;justify-content:space-between;gap:20px;align-items:flex-start;padding:22px 26px 13px;background:#fff;border-bottom:1px solid var(--line);border-radius:18px 18px 0 0}.marking-modal-head h2{margin:6px 0 2px;color:var(--navy)}.marking-modal-head p{margin:0;color:var(--muted);font-size:12px}.marking-modal-head .quiet{flex:0 0 auto}.marking-modal #panel-marking{display:block!important;margin:0;border:0;border-radius:0;box-shadow:none;background:transparent;padding:22px 26px 28px}.marking-modal-open{overflow:hidden}
@media(max-width:900px){.pipeline-model-status{max-width:none;width:100%;text-align:left}.diagnostic-intro{grid-template-columns:1fr auto}.diagnostic-intro>div:first-child{grid-column:1 / -1}.marking-modal{padding:10px}.marking-modal-dialog{margin:0;max-height:96vh}.marking-modal-head{padding:18px 18px 10px}.marking-modal #panel-marking{padding:16px 18px 22px}}
@media(max-width:560px){.history-head-actions{width:100%;justify-content:flex-end}.history-head-actions button{font-size:11px;padding:8px 10px}.diagnostic-intro{grid-template-columns:1fr}.diagnostic-state{min-width:0}.diagnostic-generate-inline{width:100%}}
.setup-view>#tab-plan{display:contents}

/* A mobile paper is a top-level page, outside the institution iframe navigation. */
html.paper-page body{margin:0;background:#f7fafd;overflow:hidden}
html.paper-page body>.app,html.paper-page body>.student-settings-modal,html.paper-page body>#return-center-modal{display:none!important}
html.paper-page #marking-modal{padding:0;background:#f7fafd;overflow:hidden}
html.paper-page #marking-modal .marking-modal-dialog{width:100%;height:100dvh;max-height:100dvh;margin:0;border:0;border-radius:0;box-shadow:none;overflow:auto;overscroll-behavior:contain}
html.paper-page #marking-modal .marking-modal-head{position:sticky;top:0;z-index:2;padding:16px 14px;background:#fff;border-radius:0;gap:12px}
html.paper-page .marking-modal-head h2{font-size:19px;line-height:1.45}
html.paper-page .marking-modal-head .eyebrow{font-size:10px;letter-spacing:1px}
html.paper-page #marking-modal #panel-marking{padding:14px 12px max(24px,env(safe-area-inset-bottom));min-width:0}
html.paper-page #paper-modal-export{padding:14px!important}
html.paper-page #export-diagnostic{width:100%;height:auto;white-space:normal;line-height:1.5;padding:12px;display:block}
html.paper-page #paper-modal-export .section-help{margin-top:12px;line-height:1.6}
html.paper-page #marking-modal input:not([type=checkbox]),html.paper-page #marking-modal textarea{width:100%;min-width:0;box-sizing:border-box}
html.paper-page #marking-modal .archive-pending,html.paper-page #marking-modal small{overflow-wrap:anywhere}
#paper-page-loading{padding:22px;line-height:1.6}
html.paper-page-ready #paper-page-loading{display:none}
#paper-upload-status{margin:0;padding:12px 22px;color:#315f7d;line-height:1.6;overflow-wrap:anywhere}
#paper-upload-status:empty{display:none}
#paper-upload-status[role=alert]{color:#a54535;background:#fff2ef}
html.paper-page .upload-list{grid-template-columns:1fr}
html.paper-page .attachment-item figcaption{display:grid;flex:1;padding:0;gap:4px}
html.paper-page .attachment-item figcaption b{white-space:normal;overflow-wrap:anywhere}
.weekly-grid>.weekly-plan-card{grid-row:auto}
.weekly-plan-summary>.badge{flex-shrink:0;white-space:nowrap}
.weekly-right-column{display:flex;flex-direction:column;gap:18px;min-width:0}
.weekly-right-column .panel{min-width:0;margin:0}
.weekly-right-column .weekly-action-card{display:flex;flex-direction:column}
.weekly-action-card .execution-tools{justify-content:flex-end;margin-top:18px;padding-top:14px;border-top:1px solid var(--line)}
.weekly-right-column #paper-review-workspace{display:block}
.weekly-right-column .diagnostic-side{padding:20px;background:#fff}
.weekly-right-column .history-head-actions{gap:7px}
.weekly-right-column .hi-actions{flex-wrap:wrap;justify-content:flex-end}
.weekly-right-column .history-item{align-items:flex-start;gap:10px}
.weekly-right-column #history-scope{margin:2px 0 14px;font-size:11px}
.weekly-generation{border:1px solid #bcd8ee;border-radius:11px;background:#f4f9ff;padding:13px 15px;margin:5px 0 14px}
.weekly-generation-head{display:flex;align-items:center;justify-content:space-between;gap:10px;font-size:12px;color:#245584}
.weekly-generation-head span{white-space:nowrap;font-size:11px}
.weekly-generation progress{display:block;width:100%;height:7px;margin:12px 0 9px;accent-color:#2a73cf;border:0;border-radius:999px;overflow:hidden}
.weekly-generation progress::-webkit-progress-bar{background:#dce9f7}
.weekly-generation progress::-webkit-progress-value{background:#2a73cf;border-radius:999px}
.weekly-generation p{margin:0;font-size:11px;line-height:1.7;color:#55708d}
.paper-pending{background:#f8fbff;border-color:#cbdff2}
.paper-failed .paper-error{color:#a64632!important;white-space:normal;overflow-wrap:anywhere}
@media(max-width:560px){.weekly-right-column .hi-actions{flex-shrink:0;max-width:110px}.weekly-generation-head{flex-wrap:wrap}.weekly-action-card .execution-tools button{max-width:100%;white-space:normal}}
.diagnostic-review-workspace{grid-template-columns:minmax(0,1fr)}
.setup-view .long-goal-card,.setup-view .plan-review-card{margin-top:20px;width:100%}
.plan-heading-actions{display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin:5px 0 12px}
.plan-heading-actions h2{margin:0}
.plan-heading-actions #generate-plan{margin-top:0}
.plan-job-state{margin:14px 0;padding:12px 15px;background:#eff6ff;border:1px solid #c8ddf5;border-radius:10px;font-size:12px;color:#30577f;overflow-wrap:anywhere}
.plan-job-state.completed{background:#f0faf7;border-color:#b9e1d5;color:#207e68}
.plan-job-state.failed{background:#fff1ed;border-color:#efc5bc;color:#a63e2e}
.pipeline-title>#notice{flex:0 1 380px;min-width:0;margin:0;align-self:flex-start;white-space:pre-wrap;overflow-wrap:anywhere;line-height:1.7}
.pipeline-title>#notice:empty{display:none}
@media(max-width:700px){.pipeline-title>#notice{flex:0 1 auto;width:100%}.plan-heading-actions{gap:10px}}
/* English shares the math panels; three specialist cards form one collaboration row. */
.expert-flow.english-team{grid-template-columns:repeat(3,minmax(0,1fr))}
@media(max-width:900px){.expert-flow.english-team{grid-template-columns:1fr}}

.growth-export-tools{display:flex;justify-content:flex-end;gap:8px;flex-wrap:wrap;margin:10px 0 16px}.ranking-more summary,.evidence-more summary,.blank-coverage summary{cursor:pointer;color:#386f9a;padding:12px 0;font-size:12px}.coverage-basis{color:#58718a;font-size:12px}.wrongbook-evidence span{white-space:normal;overflow-wrap:anywhere}.tree-node text{font-size:11px}

.learning-conditions{border:1px solid #d6e3f4;border-radius:10px;padding:16px;margin:16px 0}.learning-conditions .protocol-choice{display:flex;align-items:flex-start;gap:10px}.protocol-choice input{width:auto}.learning-conditions small{color:#627b9f}.learning-evidence{padding:16px;border:1px solid #d6e3f4;border-radius:10px;margin:12px 0}.learning-evidence summary{cursor:pointer;font-weight:700}#weekly-test-state{line-height:1.7;margin:16px 0}
.learning-status{padding:18px 0 24px;border-bottom:1px solid #dce5f1;margin-bottom:24px}
.learning-state-row{padding:13px 16px;margin:10px 0;background:#f6f9fe;border:1px solid #dce5f1;border-radius:12px}
.learning-state-row>div{display:flex;gap:12px;justify-content:space-between;flex-wrap:wrap}.learning-state-row p,.prerequisite-case p{line-height:1.7;margin:8px 0;color:#48617e;font-size:13px}
.learning-state-row summary,.prerequisite-case summary{cursor:pointer;font-size:13px;color:#244c83}.prerequisite-case{padding:16px;background:#fff8ef;border:1px solid #efddc1;border-radius:12px;margin:12px 0}.prerequisite-case a{font-size:12px}

/* Math phone layout. Screen only: desktop, other subjects and exported paper stay intact. */
@media screen and (max-width:800px){
 html:is([data-subject="math"],[data-subject="english"]) .weekly-grid{gap:14px}
 html:is([data-subject="math"],[data-subject="english"]) .weekly-plan-card,html:is([data-subject="math"],[data-subject="english"]) .weekly-right-column{min-width:0}
 html:is([data-subject="math"],[data-subject="english"]) .plan-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:6px 10px;align-items:start}
 html:is([data-subject="math"],[data-subject="english"]) .plan-row b{min-width:0}
 html:is([data-subject="math"],[data-subject="english"]) .plan-row span{grid-column:1/-1;grid-row:2;line-height:1.85}
 html:is([data-subject="math"],[data-subject="english"]) .plan-row small{grid-column:2;grid-row:1;white-space:normal;text-align:right}
}
@media screen and (max-width:600px){
 html:is([data-subject="math"],[data-subject="english"]) body{font-size:14px;line-height:1.75}
 html:is([data-subject="math"],[data-subject="english"]) .app,html:is([data-subject="math"],[data-subject="english"]) .embedded .app{padding:10px 12px 0}
 html:is([data-subject="math"],[data-subject="english"]) #workspace{min-width:0}
 html:is([data-subject="math"],[data-subject="english"]) .panel{padding:16px;border-radius:14px;min-width:0}
 html:is([data-subject="math"],[data-subject="english"]) h2{font-size:18px;line-height:1.5}
 html:is([data-subject="math"],[data-subject="english"]) h3{line-height:1.5}
 html:is([data-subject="math"],[data-subject="english"]) .section-help{font-size:13px;line-height:1.8}
 html:is([data-subject="math"],[data-subject="english"]) .primary,html:is([data-subject="math"],[data-subject="english"]) .secondary,html:is([data-subject="math"],[data-subject="english"]) .quiet{min-height:44px;font-size:13px;padding:10px 12px;white-space:normal}
 html:is([data-subject="math"],[data-subject="english"]) input,html:is([data-subject="math"],[data-subject="english"]) select,html:is([data-subject="math"],[data-subject="english"]) textarea{min-width:0;max-width:100%;font-size:16px}
 html:is([data-subject="math"],[data-subject="english"]) label{font-size:13px}
 html:is([data-subject="math"],[data-subject="english"]) .hero{padding:16px;gap:14px;border-radius:16px}
 html:is([data-subject="math"],[data-subject="english"]) .hero-copy{flex:0 0 100%}
 html:is([data-subject="math"],[data-subject="english"]) .hero h1,html:is([data-subject="math"],[data-subject="english"]) .embedded .hero h1{font-size:25px;margin:8px 0 6px;line-height:1.35}
 html:is([data-subject="math"],[data-subject="english"]) .hero h1 span{display:inline}
 html:is([data-subject="math"],[data-subject="english"]) .hero .eyebrow{font-size:9px;letter-spacing:1.2px}
 html:is([data-subject="math"],[data-subject="english"]) .hero p{font-size:13px}
 html:is([data-subject="math"],[data-subject="english"]) .hero-tags{display:none}
 html:is([data-subject="math"],[data-subject="english"]) .hero-controls{display:block;flex:0 0 100%;width:100%;min-width:0}
 html:is([data-subject="math"],[data-subject="english"]) .hero-track{grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:10px;width:100%}
 html:is([data-subject="math"],[data-subject="english"]) .hero-track .tb-student{grid-column:1/-1}
 html:is([data-subject="math"],[data-subject="english"]) .hero-controls #student-focus,html:is([data-subject="math"],[data-subject="english"]) .student-settings-trigger{padding:9px 12px;min-height:76px}
 html:is([data-subject="math"],[data-subject="english"]) #student-focus strong{font-size:23px}
 html:is([data-subject="math"],[data-subject="english"]) .student-settings-trigger small{white-space:normal;font-size:11px}
 html:is([data-subject="math"],[data-subject="english"]) .hero-controls .tb-student select{min-width:0;min-height:44px;font-size:16px}
 html:is([data-subject="math"],[data-subject="english"]) .hero-controls .tb-subjects{margin-top:10px;display:block}
 html:is([data-subject="math"],[data-subject="english"]) .hero-controls .tb-subjects .subjects{width:100%;gap:8px;flex-wrap:nowrap}
 html:is([data-subject="math"],[data-subject="english"]) .hero-controls .subjects button{min-height:44px;padding:8px 14px;font-size:13px}
 html:is([data-subject="math"],[data-subject="english"]) .hero-controls .subjects button:only-child{flex:0 0 auto;min-height:36px;padding:5px 14px}
 html:is([data-subject="math"],[data-subject="english"]) .hero-controls .subjects button:only-child small{display:none}
 html:is([data-subject="math"],[data-subject="english"]) .subjects-next{display:none}
 html:is([data-subject="math"],[data-subject="english"]) .pipeline-title{margin-bottom:12px;gap:10px;align-items:stretch}
 html:is([data-subject="math"],[data-subject="english"]) .pipeline-title h2{font-size:17px;margin:4px 0}
 html:is([data-subject="math"],[data-subject="english"]) .pipeline-title p{min-width:0;font-size:13px;line-height:1.8}
 html:is([data-subject="math"],[data-subject="english"]) .pipeline-next{padding:12px;gap:10px}
 html:is([data-subject="math"],[data-subject="english"]) .pipeline-next b{font-size:16px}
 html:is([data-subject="math"],[data-subject="english"]) .pipeline-next p{font-size:13px;line-height:1.7}
 html:is([data-subject="math"],[data-subject="english"]) .main-tabs{display:grid;grid-template-columns:1.45fr 1fr 1fr;gap:4px;margin:16px 0;padding:4px;overflow:visible}
 html:is([data-subject="math"],[data-subject="english"]) .main-tabs button{min-width:0;min-height:52px;white-space:normal;padding:7px 5px;font-size:12px;line-height:1.5}
 html:is([data-subject="math"],[data-subject="english"]) .weekly-heading,html:is([data-subject="math"],[data-subject="english"]) .report-heading{gap:12px;margin-bottom:16px}
 html:is([data-subject="math"],[data-subject="english"]) .weekly-heading h1,html:is([data-subject="math"],[data-subject="english"]) .report-heading h1{font-size:23px;line-height:1.4;margin:5px 0 8px}
 html:is([data-subject="math"],[data-subject="english"]) .weekly-heading p{font-size:13px}
 html:is([data-subject="math"],[data-subject="english"]) .weekly-grid>.panel,html:is([data-subject="math"],[data-subject="english"]) .weekly-right-column .diagnostic-side{padding:16px}
 html:is([data-subject="math"],[data-subject="english"]) .weekly-plan-summary{font-size:16px;flex-wrap:wrap;gap:8px}
 html:is([data-subject="math"],[data-subject="english"]) .weekly-plan-content>p,html:is([data-subject="math"],[data-subject="english"]) .plan-reason{font-size:13px;line-height:1.8}
 html:is([data-subject="math"],[data-subject="english"]) .plan-row{font-size:14px;padding:14px 0}
 html:is([data-subject="math"],[data-subject="english"]) .plan-row small{font-size:12px}
 html:is([data-subject="math"],[data-subject="english"]) .weekly-task-list>div{display:grid;grid-template-columns:1fr;gap:6px;font-size:14px}
 html:is([data-subject="math"],[data-subject="english"]) .weekly-task-list b{min-width:0}
 html:is([data-subject="math"],[data-subject="english"]) .plan-capacity{align-items:flex-start;flex-wrap:wrap;gap:5px;font-size:12px;line-height:1.75}
 html:is([data-subject="math"],[data-subject="english"]) .weekly-right-column{gap:14px}
 html:is([data-subject="math"],[data-subject="english"]) .weekly-actions,html:is([data-subject="math"],[data-subject="english"]) .execution-tools,html:is([data-subject="math"],[data-subject="english"]) .history-head-actions,html:is([data-subject="math"],[data-subject="english"]) .flow-actions{display:grid;grid-template-columns:1fr;width:100%;gap:8px}
 html:is([data-subject="math"],[data-subject="english"]) .weekly-actions button,html:is([data-subject="math"],[data-subject="english"]) .execution-tools button{width:100%}
 html:is([data-subject="math"],[data-subject="english"]) .execution-icon{flex-shrink:0}
 html:is([data-subject="math"],[data-subject="english"]) .execution-active p,html:is([data-subject="math"],[data-subject="english"]) .execution-empty p,html:is([data-subject="math"],[data-subject="english"]) .weekly-generation p{font-size:13px;line-height:1.75}
 html:is([data-subject="math"],[data-subject="english"]) .history-item{display:block;padding:12px}
 html:is([data-subject="math"],[data-subject="english"]) .hi-main{min-width:0;overflow-wrap:anywhere}
 html:is([data-subject="math"],[data-subject="english"]) .hi-main b{font-size:14px;line-height:1.6}
 html:is([data-subject="math"],[data-subject="english"]) .hi-main small{font-size:12px}
 html:is([data-subject="math"],[data-subject="english"]) .hi-actions,html:is([data-subject="math"],[data-subject="english"]) .weekly-right-column .hi-actions{display:flex;flex-wrap:wrap;max-width:none;width:100%;margin-top:10px;gap:8px;justify-content:flex-end}
 html:is([data-subject="math"],[data-subject="english"]) .history-item .secondary{min-height:44px;font-size:13px}
 html:is([data-subject="math"],[data-subject="english"]) .history-graded{margin-right:auto;align-self:center;font-size:11px}
 html:is([data-subject="math"],[data-subject="english"]) .diagnostic-intro{gap:10px}
 html:is([data-subject="math"],[data-subject="english"]) .diagnostic-state{padding:10px 12px}
 html:is([data-subject="math"],[data-subject="english"]) .diagnostic-flow{padding:14px}
 html:is([data-subject="math"],[data-subject="english"]) .flow-row{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px 10px;overflow:visible}
 html:is([data-subject="math"],[data-subject="english"]) .flow-line{display:none}
 html:is([data-subject="math"],[data-subject="english"]) .flow-card{min-width:0;gap:7px}
 html:is([data-subject="math"],[data-subject="english"]) .flow-card>span{flex-shrink:0;width:25px;height:25px}
 html:is([data-subject="math"],[data-subject="english"]) .flow-card b{font-size:12px}
 html:is([data-subject="math"],[data-subject="english"]) .flow-card small{font-size:11px;line-height:1.55}
 html:is([data-subject="math"],[data-subject="english"]) .plan-review-card{min-height:0}
 html:is([data-subject="math"],[data-subject="english"]) .plan-heading-actions{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px;width:100%}
 html:is([data-subject="math"],[data-subject="english"]) .plan-heading-actions h2{grid-column:1/-1}
 html:is([data-subject="math"],[data-subject="english"]) .long-goal-card h2{font-size:21px}
 html:is([data-subject="math"],[data-subject="english"]) .report-heading .actions{display:grid;grid-template-columns:1fr 1fr;width:100%;gap:8px}
 html:is([data-subject="math"],[data-subject="english"]) .report-filters{gap:8px;margin:16px 0}
 html:is([data-subject="math"],[data-subject="english"]) .report-filters button{min-height:40px;font-size:12px;padding:8px 12px}
 html:is([data-subject="math"],[data-subject="english"]) .growth-report-card{padding:0}
 html:is([data-subject="math"],[data-subject="english"]) .growth-report-card>summary{padding:14px;gap:10px}
 html:is([data-subject="math"],[data-subject="english"]) .growth-report-summary h3{font-size:16px;line-height:1.5}
 html:is([data-subject="math"],[data-subject="english"]) .growth-report-summary p{white-space:normal;font-size:13px}
 html:is([data-subject="math"],[data-subject="english"]) .growth-report-detail{padding:0 10px 14px}
 html:is([data-subject="math"],[data-subject="english"]) .diag-row,html:is([data-subject="math"],[data-subject="english"]) .gap-list li,html:is([data-subject="math"],[data-subject="english"]) .timing-report p{font-size:14px;line-height:1.85}
 html:is([data-subject="math"],[data-subject="english"]) .diag-block>header{flex-wrap:wrap}
 html:is([data-subject="math"],[data-subject="english"]) .stat-row{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:7px;padding:12px 10px}
 html:is([data-subject="math"],[data-subject="english"]) .stat{min-width:0;padding:8px 3px}
 html:is([data-subject="math"],[data-subject="english"]) .stat b{font-size:18px}
 html:is([data-subject="math"],[data-subject="english"]) .stat small{font-size:11px}
 html:is([data-subject="math"],[data-subject="english"]) .timing-correction{padding:12px;border:1px solid var(--line);border-radius:10px;background:#f8fbff}
 html:is([data-subject="math"],[data-subject="english"]) .timing-correction label{margin:12px 0;gap:6px}
 html:is([data-subject="math"],[data-subject="english"]) .growth-export-tools{justify-content:flex-start;margin:8px 0 14px}
 html:is([data-subject="math"],[data-subject="english"]) .learning-state-row{padding:12px;margin:9px 0}
 html:is([data-subject="math"],[data-subject="english"]) .learning-state-row>div{gap:7px}
 html:is([data-subject="math"],[data-subject="english"]) .learning-state-row summary,html:is([data-subject="math"],[data-subject="english"]) .ranking-more summary,html:is([data-subject="math"],[data-subject="english"]) .evidence-more summary{min-height:44px;display:flex;align-items:center}
 html:is([data-subject="math"],[data-subject="english"]) .wrongbook-ranking,html:is([data-subject="math"],[data-subject="english"]) .wrongbook-detail{padding:12px}
 html:is([data-subject="math"],[data-subject="english"]) .wrongbook-rank{min-height:60px;padding:11px 9px}
 html:is([data-subject="math"],[data-subject="english"]) .wrongbook-rank .rank-name b{white-space:normal;font-size:14px;line-height:1.5}
 html:is([data-subject="math"],[data-subject="english"]) .wrongbook-rank .rank-name small,html:is([data-subject="math"],[data-subject="english"]) .wrongbook-evidence-list{font-size:12px}
 html:is([data-subject="math"],[data-subject="english"]) .knowledge-tree-wrap{max-width:100%;overscroll-behavior-x:contain;-webkit-overflow-scrolling:touch}
 html:is([data-subject="math"],[data-subject="english"]) .knowledge-tree-wrap:before{content:'左右滑动查看知识树，点击知识点查看证据';display:block;padding:10px 12px;color:#607990;font-size:12px}
 html:is([data-subject="math"],[data-subject="english"]) .student-settings-modal,html:is([data-subject="math"],[data-subject="english"]) .marking-modal{padding:0;overscroll-behavior:contain}
 html:is([data-subject="math"],[data-subject="english"]) .student-settings-dialog,html:is([data-subject="math"],[data-subject="english"]) .marking-modal-dialog{margin:0;width:100%;height:100%;height:100dvh;max-height:100vh;max-height:100dvh;border:0;border-radius:0;overscroll-behavior:contain}
 html:is([data-subject="math"],[data-subject="english"]) .student-settings-dialog-head,html:is([data-subject="math"],[data-subject="english"]) .marking-modal-head{padding:16px;gap:10px;border-radius:0;background:#fff;position:sticky;top:0;z-index:2}
 html:is([data-subject="math"],[data-subject="english"]) .student-settings-dialog-head{flex-direction:column}
 html:is([data-subject="math"],[data-subject="english"]) .student-settings-dialog-actions{width:100%;display:grid;grid-template-columns:1fr 1.5fr;gap:8px}
 html:is([data-subject="math"],[data-subject="english"]) .student-settings-dialog #profile-panel,html:is([data-subject="math"],[data-subject="english"]) .marking-modal #panel-marking{padding:14px 12px max(24px,env(safe-area-inset-bottom))}
 html:is([data-subject="math"],[data-subject="english"]) .student-settings-dialog .profile-grid{padding:14px;gap:14px}
 html:is([data-subject="math"],[data-subject="english"]) .trait-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
 html:is([data-subject="math"],[data-subject="english"]) .profile-grid .trait-chip{flex-direction:row;align-items:center;gap:8px;min-height:44px;padding:10px 8px;font-size:13px}
 html:is([data-subject="math"],[data-subject="english"]) .tb-block{padding:12px}
 html:is([data-subject="math"],[data-subject="english"]) .upload-drop{padding:18px 12px;text-align:center;flex-wrap:wrap;min-height:100px}
 html:is([data-subject="math"],[data-subject="english"]) .upload-drop small{display:block}
 html:is([data-subject="math"],[data-subject="english"]) .learning-conditions{padding:12px}
 html:is([data-subject="math"],[data-subject="english"]) .modal-mask{padding:10px}
 html:is([data-subject="math"],[data-subject="english"]) .modal{padding:16px;max-height:90dvh}
 html:is([data-subject="math"],[data-subject="english"]) footer{flex-wrap:wrap;font-size:11px;padding-bottom:max(16px,env(safe-area-inset-bottom))}
}
