/* 家长看板 v1：先结论、再证据、最后行动。独立样式文件，避免扰动学生端。 */
.parent-dashboard { color: var(--txt); padding-bottom: 20px; }
.parent-welcome {
  display:flex; align-items:center; justify-content:space-between; gap:18px;
  padding:22px 24px; margin:0 0 14px; border:1px solid #dce9fb;
  border-radius:20px; background:linear-gradient(112deg,#f2f8ff 0%,#fbfdff 62%,#eefaf7 100%);
}
.parent-eyebrow { color:#3675c5; font-size:.76rem; font-weight:700; letter-spacing:.04em; margin-bottom:7px; }
.parent-welcome h3 { margin:0 0 6px; color:#163b69; font-size:clamp(1.15rem,2.1vw,1.65rem); line-height:1.35; }
.parent-welcome p { margin:0; color:#63758c; font-size:.9rem; line-height:1.7; }
/* .parent-welcome-mark 已删：头部装饰从「✦ 文字标」换成内联 SVG .pv2-hero-art（见文件末）。 */
.parent-summary { margin-bottom:14px; }
.parent-summary .p-head { border:1px solid #d8e8fa; border-left:4px solid #438cf0; border-radius:16px; padding:18px 20px; background:linear-gradient(110deg,#f2f8ff,#fff); margin:0; }
.parent-summary .p-head-t { font-size:1.08rem; color:#163b69; }
.parent-summary .p-head-p { font-size:.88rem; line-height:1.8; }
.parent-summary .p-head-a { border-top:1px solid #e1eaf5; padding-top:11px; font-size:.88rem; }
.parent-grid { display:grid; grid-template-columns:minmax(0,1.65fr) minmax(270px,1fr); align-items:start; gap:14px; }
.parent-main,.parent-side { min-width:0; display:grid; align-content:start; gap:14px; }
.parent-dashboard .w-sec { min-width:0; padding:18px; margin:0; border:1px solid var(--line); border-radius:16px; background:var(--panel, #fff); box-shadow:0 4px 16px rgba(38,83,132,.035); }
.parent-dashboard .w-sec h4 { margin:0 0 14px; display:flex; align-items:baseline; flex-wrap:wrap; gap:6px 10px; font-size:1rem; color:var(--txt); }
.parent-dashboard .w-sec h4 span { color:var(--dim); font-size:.75rem; font-weight:400; }
.parent-dashboard .w-grid { gap:10px; }
.parent-dashboard .w-kpi { min-width:0; border-radius:12px; background:var(--panel-2); padding:13px; }
.parent-dashboard .w-kpi > b { font-size:1.25rem; }
.parent-dashboard .p-days { gap:6px; }
.parent-dashboard .p-day { border-radius:8px; }
.parent-dashboard .p-help { padding:13px; border-radius:12px; background:var(--panel-2); margin-bottom:9px; }
.parent-dashboard .p-help-t { line-height:1.75; }
.parent-dashboard .p-now { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:8px; }
.parent-dashboard .p-now-i { display:flex; align-items:baseline; gap:7px; border-radius:10px; padding:10px; background:var(--panel-2); }
.parent-dashboard .p-now-i b { font-size:1.05rem; }
.parent-dashboard .d-fold { margin-top:12px; }
@media (max-width: 900px) {
  .parent-grid { grid-template-columns:minmax(0,1fr); }
  .parent-side { grid-template-columns:minmax(0,1fr); }
}
@media (max-width: 560px) {
  .parent-dashboard { padding-bottom:12px; }
  .parent-welcome { padding:17px; border-radius:15px; }
  /* ✦ 文字标换成内联 SVG（pv2-hero-art）后，原来那条 .parent-welcome-mark 就是死规则了 ——
     留着会让人以为还有个 mark 元素。窄屏下只缩尺寸，不断点。 */
  .parent-dashboard-v2 .pv2-hero-art { flex-basis:96px; width:96px; height:78px; }
  .parent-welcome p { font-size:.82rem; }
  .parent-summary .p-head { padding:15px; }
  .parent-dashboard .w-sec { padding:14px; border-radius:13px; }
  .parent-dashboard .w-grid { grid-template-columns:minmax(0,1fr); }
  .parent-dashboard .p-now { grid-template-columns:repeat(2,minmax(0,1fr)); }
}


/* 深色主题：与全站主题变量保持一致，避免浅色 hero 与深色正文产生对比问题。 */
[data-theme="dark"] .parent-welcome {
  border-color: var(--line-2);
  background: linear-gradient(112deg, var(--panel-2), var(--panel), var(--panel-2));
}
[data-theme="dark"] .parent-eyebrow { color: var(--pri-2); }
[data-theme="dark"] .parent-welcome h3,
[data-theme="dark"] .parent-summary .p-head-t { color: var(--txt); }
[data-theme="dark"] .parent-welcome p { color: var(--dim); }
[data-theme="dark"] .parent-summary .p-head {
  border-color: var(--line);
  border-left-color: var(--pri);
  background: linear-gradient(110deg, var(--panel-2), var(--panel));
}
[data-theme="dark"] .parent-summary .p-head-a { border-top-color: var(--line); }


/* 家长看板 v2：对齐设计稿的信息层级；所有数值来自现有家长端 API。 */
.parent-dashboard-v2 .pv2-overview,
.parent-dashboard-v2 .pv2-rhythm,
.parent-dashboard-v2 .pv2-signals,
.parent-dashboard-v2 .pv2-issues,
.parent-dashboard-v2 .pv2-action,
.parent-dashboard-v2 .pv2-now,
.parent-dashboard-v2 .pv2-notes { padding:18px; }
.parent-dashboard-v2 .pv2-section-head { display:flex; align-items:flex-start; justify-content:space-between; gap:12px; margin-bottom:15px; }
.parent-dashboard-v2 .pv2-section-head h4 { margin:0 0 5px; font-size:1.02rem; }
.parent-dashboard-v2 .pv2-section-head p { margin:0; color:var(--dim); font-size:.78rem; line-height:1.55; }
.parent-dashboard-v2 .pv2-chip,.parent-dashboard-v2 .pv2-count {
  flex:0 0 auto; border-radius:999px; padding:5px 10px; font-size:.72rem;
  color:#3276c8; background:#edf5ff; border:1px solid #dceaff;
}
.parent-dashboard-v2 .pv2-count { min-width:30px; text-align:center; font-weight:700; }
.parent-dashboard-v2 .pv2-metrics { display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:10px; }
.parent-dashboard-v2 .pv2-outcomes .pv2-metrics { grid-template-columns:repeat(5,minmax(0,1fr)); }
.parent-dashboard-v2 .pv2-metric { min-width:0; padding:14px; border-radius:14px; background:linear-gradient(150deg,#f5f9ff,#fff); border:1px solid #e6eef9; display:flex; flex-direction:column; gap:8px; }
.parent-dashboard-v2 .pv2-metric>span { color:#63758c; font-size:.78rem; }
.parent-dashboard-v2 .pv2-metric>b { color:#21466f; font-size:clamp(1.3rem,2vw,1.8rem); line-height:1.1; overflow-wrap:anywhere; }
.parent-dashboard-v2 .pv2-metric>small { color:var(--dim); font-size:.7rem; line-height:1.5; min-height:2.2em; }
.parent-dashboard-v2 .pv2-meter { height:5px; background:#e7eef8; border-radius:9px; overflow:hidden; display:block; }
.parent-dashboard-v2 .pv2-meter>i { display:block; height:100%; border-radius:9px; background:#4d9af4; }
.parent-dashboard-v2 .pv2-violet .pv2-meter>i { background:#8b79ef; }
.parent-dashboard-v2 .pv2-green .pv2-meter>i { background:#43c59b; }
.parent-dashboard-v2 .pv2-orange .pv2-meter>i { background:#f5ad51; }
.parent-dashboard-v2 .pv2-red .pv2-meter>i { background:#e5646a; }
.parent-dashboard-v2 .pv2-overview-foot { display:flex; flex-wrap:wrap; align-items:center; gap:8px; margin-top:14px; padding:11px 13px; border-radius:11px; background:var(--panel-2); font-size:.8rem; }
.parent-dashboard-v2 .pv2-overview-foot>b { color:#16856d; }
.parent-dashboard-v2 .pv2-foot-note { margin-left:auto; color:var(--dim); font-size:.74rem; }
.parent-dashboard-v2 .pv2-signal-grid { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:10px; }
.parent-dashboard-v2 .pv2-signal { min-width:0; padding:14px; border-radius:13px; background:#f6faff; border:1px solid #e8f0fb; }
.parent-dashboard-v2 .pv2-signal-top { display:flex; align-items:center; justify-content:space-between; gap:8px; }
.parent-dashboard-v2 .pv2-signal-top>b { width:30px; height:30px; border-radius:50%; display:grid; place-items:center; background:#dceeff; color:#277fe3; font-size:1rem; }
.parent-dashboard-v2 .pv2-signal-top>span { border-radius:99px; padding:4px 8px; background:#e4f7ee; color:#188660; font-size:.7rem; }
.parent-dashboard-v2 .pv2-signal h5,.parent-dashboard-v2 .pv2-issue h5,.parent-dashboard-v2 .pv2-action-card h5 { margin:10px 0 5px; font-size:.88rem; color:var(--txt); }
.parent-dashboard-v2 .pv2-signal p { margin:0; color:var(--dim); font-size:.76rem; line-height:1.65; }
.parent-dashboard-v2 .pv2-signal.pv2-orange .pv2-signal-top>span { background:#fff0dc; color:#a6630b; }
.parent-dashboard-v2 .pv2-signal.pv2-violet .pv2-signal-top>span { background:#eee9ff; color:#6b54c5; }
.parent-dashboard-v2 .pv2-activity-chart { height:150px; display:flex; align-items:stretch; gap:7px; padding:10px 4px 0; border-bottom:1px solid var(--line); background:repeating-linear-gradient(to bottom,transparent 0,transparent 36px,var(--line) 37px); }
.parent-dashboard-v2 .pv2-bar-col { flex:1; min-width:0; display:flex; flex-direction:column; justify-content:flex-end; align-items:center; gap:7px; }
.parent-dashboard-v2 .pv2-bar-col>i { width:min(24px,70%); min-height:4px; display:block; border-radius:7px 7px 2px 2px; background:linear-gradient(180deg,#59a7fb,#75d0c4); }
.parent-dashboard-v2 .pv2-bar-col>span { color:var(--dim); font-size:.63rem; white-space:nowrap; }
.parent-dashboard-v2 .pv2-legend { display:flex; justify-content:space-between; gap:8px; flex-wrap:wrap; margin-top:10px; color:var(--dim); font-size:.72rem; }
.parent-dashboard-v2 .pv2-legend span:first-child { display:flex; align-items:center; gap:6px; }
.parent-dashboard-v2 .pv2-legend i { width:8px; height:8px; border-radius:50%; background:#59a7fb; }
.parent-dashboard-v2 .pv2-issue { display:flex; align-items:flex-start; gap:12px; padding:13px 0; border-bottom:1px solid var(--line); }
.parent-dashboard-v2 .pv2-issue:last-child { border-bottom:0; padding-bottom:0; }
.parent-dashboard-v2 .pv2-issue-num { flex:0 0 30px; width:30px; height:30px; display:grid; place-items:center; border-radius:50%; background:#fff0e4; color:#d77b25; }
.parent-dashboard-v2 .pv2-issue>div { min-width:0; }
.parent-dashboard-v2 .pv2-issue h5 { margin:1px 0 4px; }
.parent-dashboard-v2 .pv2-issue p { margin:0 0 5px; font-size:.75rem; color:#b36b2c; }
.parent-dashboard-v2 .pv2-issue small { display:block; font-size:.76rem; color:var(--dim); line-height:1.7; }
.parent-dashboard-v2 .pv2-issue p.pv2-issue-pts { display:block; padding:0; background:none; color:var(--dim); font-size:.74rem; line-height:1.6; margin:0 0 5px; }
.parent-dashboard-v2 .pv2-action-card { padding:17px; border-radius:14px; background:linear-gradient(145deg,#eef7ff,#f4fbff); border:1px solid #e2efff; }
.parent-dashboard-v2 .pv2-action-icon { width:34px; height:34px; display:grid; place-items:center; border-radius:11px; color:#fff; background:linear-gradient(140deg,#4b9cf6,#61cfc0); }
.parent-dashboard-v2 .pv2-action-card h5 { margin-top:12px; }
.parent-dashboard-v2 .pv2-action-card p,.parent-dashboard-v2 .pv2-action-note { color:var(--dim); font-size:.78rem; line-height:1.75; margin:0; }
.parent-dashboard-v2 .pv2-action-note { margin-top:12px; }
.parent-dashboard-v2 .pv2-empty { border-radius:11px; padding:14px; color:var(--dim); background:var(--panel-2); font-size:.8rem; line-height:1.7; }
[data-theme="dark"] .parent-dashboard-v2 .pv2-chip { background:var(--panel-2); border-color:var(--line); color:var(--pri-2); }
[data-theme="dark"] .parent-dashboard-v2 .pv2-metric,
[data-theme="dark"] .parent-dashboard-v2 .pv2-signal,
[data-theme="dark"] .parent-dashboard-v2 .pv2-action-card { background:var(--panel-2); border-color:var(--line); }
[data-theme="dark"] .parent-dashboard-v2 .pv2-metric>b { color:var(--txt); }
@media (max-width:1100px) {
  .parent-dashboard-v2 .pv2-metrics { grid-template-columns:repeat(2,minmax(0,1fr)); }
  .parent-dashboard-v2 .pv2-outcomes .pv2-metrics { grid-template-columns:repeat(2,minmax(0,1fr)); }
}
@media (max-width:560px) {
  .parent-dashboard-v2 .pv2-metrics { grid-template-columns:repeat(2,minmax(0,1fr)); gap:8px; }
  .parent-dashboard-v2 .pv2-metric { padding:11px; }
  .parent-dashboard-v2 .pv2-signal-grid { grid-template-columns:minmax(0,1fr); }
  .parent-dashboard-v2 .pv2-overview-foot { align-items:flex-start; }
  .parent-dashboard-v2 .pv2-foot-note { margin-left:0; width:100%; }
  .parent-dashboard-v2 .pv2-activity-chart { gap:4px; }
}


/* v2.1：学科活动证据卡；避免把单一正确率包装成掌握率。 */
.parent-dashboard-v2 .pv2-subject-grid { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:10px; }
.parent-dashboard-v2 .pv2-subject-card { min-width:0; padding:14px; border:1px solid var(--line); border-radius:13px; background:var(--panel-2); }
.parent-dashboard-v2 .pv2-subject-top { display:flex; align-items:center; justify-content:space-between; gap:8px; }
.parent-dashboard-v2 .pv2-subject-top>b { font-size:.86rem; }
.parent-dashboard-v2 .pv2-subject-top>span { font-size:.7rem; color:var(--dim); }
.parent-dashboard-v2 .pv2-subject-card>strong { display:block; margin:12px 0 4px; font-size:1.55rem; color:var(--pri); }
.parent-dashboard-v2 .pv2-subject-card>p { min-height:2.5em; margin:0 0 9px; font-size:.72rem; line-height:1.55; color:var(--dim); }
.parent-dashboard-v2 .pv2-subject-card>small { display:block; margin-top:8px; color:var(--dim); font-size:.68rem; line-height:1.5; }
@media(max-width:560px) {
 .parent-dashboard-v2 .pv2-subject-grid { grid-template-columns:minmax(0,1fr); }
}

/* ============================================================
   批次204：家长看板 v3 外壳 —— 独立侧栏 / 学科环形图 / 插画头部
   ============================================================ */

/* ---- ① 三栏：导航 | 主内容 | 右侧行动栏 ----
   ★ 特异性必须压过第 17 行那条裸 `.parent-grid`：两处都写 grid-template-columns 时，
     后写的赢不了，**选择器权重**才决定。所以这里带 `.parent-dashboard-v2` 前缀。 */
.parent-dashboard-v2 .parent-grid {
  grid-template-columns: 172px minmax(0, 1fr) minmax(260px, 300px);
}
.parent-dashboard-v2 .parent-main,
.parent-dashboard-v2 .parent-side { min-width: 0; }

/* ---- ② 独立左侧栏 ----
   ★ 五个条目全部指向**页面上真实存在**的区块 id。设计稿里另有「孩子信息」「设置」两项：
     /ai/api/parent 既不给姓名/年级，也没有可改的设置项 ⇒ 刻意不做。
     做一个点不动的导航项比不做更糟（家长会以为功能坏了）。 */
.parent-dashboard-v2 .pv2-side {
  position: sticky; top: 12px;
  display: grid; align-content: start; gap: 4px;
  padding: 12px 10px; border: 1px solid var(--line); border-radius: 14px;
  background: var(--panel-2);
}
.parent-dashboard-v2 .pv2-side-t {
  padding: 2px 6px 8px; font-size: .68rem; letter-spacing: .09em; color: var(--dim);
}
.parent-dashboard-v2 .pv2-nav {
  display: grid; gap: 2px; width: 100%; padding: 9px 10px;
  border: 0; border-radius: 10px; background: transparent;
  text-align: left; cursor: pointer; color: var(--txt);
}
.parent-dashboard-v2 .pv2-nav>b { font-size: .84rem; font-weight: 600; }
.parent-dashboard-v2 .pv2-nav>small { font-size: .67rem; line-height: 1.45; color: var(--dim); }
.parent-dashboard-v2 .pv2-nav:hover { background: var(--panel); }
/* ★「当前指向哪块」的唯一判据是 aria-current，不再另开一个 class ——
     两处状态各写一半就会对不上（ aria 说 true、class 没加，反之亦然）。 */
.parent-dashboard-v2 .pv2-nav[aria-current="true"] { background: #e8f2ff; }
.parent-dashboard-v2 .pv2-nav[aria-current="true"]>b { color: #1f6fd0; }
[data-theme="dark"] .parent-dashboard-v2 .pv2-nav[aria-current="true"] { background: var(--panel); }
[data-theme="dark"] .parent-dashboard-v2 .pv2-nav[aria-current="true"]>b { color: var(--pri-2); }

/* ---- ③ 插画头部（内联 SVG，不新增静态文件） ----
   ★ 不落图片文件是刻意的：新增 css/ai/js/img 都要同步线上 nginx 的 sub_filter，
     漏一条浏览器就去请求根路径 ⇒ 404、整块样式不生效（线上实测过两次）。
   ★ 颜色全部走 class，深色主题只换色值不改结构。 */
.parent-dashboard-v2 .pv2-hero-art { flex: 0 0 128px; width: 128px; height: 104px; }
.parent-dashboard-v2 .pv2-art-book { fill: #dcecff; stroke: #7fb2ef; stroke-width: 2; }
.parent-dashboard-v2 .pv2-art-spine { fill: none; stroke: #7fb2ef; stroke-width: 2; }
.parent-dashboard-v2 .pv2-art-line { fill: none; stroke: #2f8f6f; stroke-width: 3; stroke-linecap: round; stroke-linejoin: round; }
.parent-dashboard-v2 .pv2-art-star { fill: #f0a92c; }
.parent-dashboard-v2 .pv2-art-dot { fill: #2f8f6f; }
[data-theme="dark"] .parent-dashboard-v2 .pv2-art-book { fill: #22304a; stroke: #4a7bb5; }
[data-theme="dark"] .parent-dashboard-v2 .pv2-art-spine { stroke: #4a7bb5; }
[data-theme="dark"] .parent-dashboard-v2 .pv2-art-line { stroke: #4fc79a; }
[data-theme="dark"] .parent-dashboard-v2 .pv2-art-star { fill: #e8b64a; }
[data-theme="dark"] .parent-dashboard-v2 .pv2-art-dot { fill: #4fc79a; }

/* ---- ④ 学科环形图 ----
   ★★★ 圆环表达的是「练习量分布」，**不是**掌握程度。
       设计稿那一版叫「学科掌握环形图」，但 server/parent.js 的 subjectSnapshot
       只给 reviews / right / wrong / accuracy —— 没有掌握度。
       把练习量画成"掌握度"就是编数据，所以圆心写「可判对错练习总次数」，
       图例逐科给正确率，并在下面用 .pv2-donut-note 明说口径。 */
.parent-dashboard-v2 .pv2-donut-wrap {
  display: grid; grid-template-columns: 150px minmax(0, 1fr); gap: 16px; align-items: center;
}
.parent-dashboard-v2 .pv2-donut { width: 150px; height: 150px; }
.parent-dashboard-v2 .pv2-arc-track { fill: none; stroke: var(--line); stroke-width: 13; }
.parent-dashboard-v2 .pv2-arc { fill: none; stroke-width: 13; }
.parent-dashboard-v2 .pv2-arc-1 { stroke: #4d9af4; }
.parent-dashboard-v2 .pv2-arc-2 { stroke: #f5ad51; }
.parent-dashboard-v2 .pv2-arc-3 { stroke: #43c59b; }
.parent-dashboard-v2 .pv2-arc-4 { stroke: #8b79ef; }
.parent-dashboard-v2 .pv2-arc-5 { stroke: #e0708a; }
[data-theme="dark"] .parent-dashboard-v2 .pv2-arc-1 { stroke: #5aa8f7; }
[data-theme="dark"] .parent-dashboard-v2 .pv2-arc-2 { stroke: #f7bc6a; }
[data-theme="dark"] .parent-dashboard-v2 .pv2-arc-3 { stroke: #55d3aa; }
[data-theme="dark"] .parent-dashboard-v2 .pv2-arc-4 { stroke: #a08ff5; }
[data-theme="dark"] .parent-dashboard-v2 .pv2-arc-5 { stroke: #ec869c; }
.parent-dashboard-v2 .pv2-donut-n { fill: var(--txt); font-size: 25px; font-weight: 700; text-anchor: middle; }
.parent-dashboard-v2 .pv2-donut-t { fill: var(--dim); font-size: 10px; text-anchor: middle; }

.parent-dashboard-v2 .pv2-legend { list-style: none; margin: 0; padding: 0; display: grid; gap: 9px; }
.parent-dashboard-v2 .pv2-legend li {
  display: grid; grid-template-columns: 12px minmax(0, 1fr) auto; gap: 3px 8px; align-items: baseline;
}
.parent-dashboard-v2 .pv2-legend .pv2-dot { width: 11px; height: 11px; border-radius: 4px; }
.parent-dashboard-v2 .pv2-legend .pv2-dot-na { background: var(--line); }
.parent-dashboard-v2 .pv2-legend b { font-size: .82rem; }
.parent-dashboard-v2 .pv2-legend span { font-size: .95rem; font-weight: 700; color: var(--pri); text-align: right; }
.parent-dashboard-v2 .pv2-legend small { grid-column: 2 / -1; font-size: .67rem; line-height: 1.5; color: var(--dim); }
/* accuracy 算不出来的科：数字位给「—」并且不发主题色，绝不和算得出来的看起来一样 */
.parent-dashboard-v2 .pv2-legend li.is-na span { color: var(--dim); font-weight: 600; }
.parent-dashboard-v2 .pv2-donut-note {
  margin: 14px 0 0; padding: 10px 12px; border-radius: 10px;
  background: var(--panel-2); font-size: .72rem; line-height: 1.6; color: var(--dim);
}
.parent-dashboard-v2 .pv2-donut-note b { color: var(--txt); }

/* ---- ⑤ 响应式 ----
   ★ 侧栏在窄屏**不断点、不消失**：放不下三栏就改成内容上方的一条横向导航。
     「功能在手机上找不到」比「换了个排法」糟得多。 */
@media (max-width: 1180px) {
  .parent-dashboard-v2 .parent-grid { grid-template-columns: minmax(0, 1fr) minmax(260px, 300px); }
  .parent-dashboard-v2 .pv2-side {
    position: static; grid-column: 1 / -1;
    display: flex; flex-wrap: nowrap; gap: 6px; overflow-x: auto;
  }
  .parent-dashboard-v2 .pv2-side-t { display: none; }
  .parent-dashboard-v2 .pv2-nav { flex: 0 0 auto; width: auto; }
  .parent-dashboard-v2 .pv2-nav>small { display: none; }
}
@media (max-width: 900px) {
  .parent-dashboard-v2 .parent-grid { grid-template-columns: minmax(0, 1fr); }
  .parent-dashboard-v2 .pv2-donut-wrap { grid-template-columns: minmax(0, 1fr); justify-items: center; }
}

/* ── 批次211：量化曲线（学科掌握 / 考试分数 / 成长值） ── */
.parent-dashboard .pv2-mastery .pv2-mgrid { display:grid; grid-template-columns:repeat(auto-fill,minmax(148px,1fr)); gap:10px; }
.parent-dashboard .pv2-mcard { display:flex; flex-direction:column; align-items:center; gap:5px; padding:14px 10px; border-radius:14px; background:var(--panel-2); text-align:center; }
.parent-dashboard .pv2-mcard>b { color:var(--txt); font-size:.95rem; }
.parent-dashboard .pv2-mcard>span { color:var(--dim); font-size:.8rem; }
.parent-dashboard .pv2-mcard>small { color:var(--dim); font-size:.72rem; opacity:.85; }
.parent-dashboard .pv2-ring { width:64px; height:64px; }
.parent-dashboard .pv2-ring-t { fill:none; stroke:var(--line); stroke-width:7; }
.parent-dashboard .pv2-ring-a { fill:none; stroke:#3b7ddd; stroke-width:7; stroke-linecap:round; }
.parent-dashboard .pv2-ring-n { fill:var(--txt); font-size:15px; font-weight:700; text-anchor:middle; }
.parent-dashboard .pv2-ring-n.is-count { font-size:13px; }
.parent-dashboard .pv2-exams .pv2-ecurve + .pv2-ecurve { margin-top:14px; padding-top:14px; border-top:1px dashed var(--line); }
.parent-dashboard .pv2-ecurve-h { display:flex; align-items:center; flex-wrap:wrap; gap:8px; margin-bottom:6px; }
.parent-dashboard .pv2-ecurve-h>b { color:var(--txt); font-size:.9rem; }
.parent-dashboard .pv2-linechart { width:100%; height:auto; display:block; }
.parent-dashboard .pv2-grid { stroke:var(--line); stroke-width:1; }
.parent-dashboard .pv2-axis { fill:var(--dim); font-size:9.5px; }
.parent-dashboard .pv2-line { fill:none; stroke:#3b7ddd; stroke-width:2.2; stroke-linejoin:round; stroke-linecap:round; }
.parent-dashboard .pv2-area { fill:#3b7ddd; opacity:.1; stroke:none; }
.parent-dashboard .pv2-dot { fill:var(--panel,#fff); stroke:#3b7ddd; stroke-width:2; }
.parent-dashboard .pv2-elist { list-style:none; margin:8px 0 0; padding:0; display:grid; gap:4px; }
.parent-dashboard .pv2-elist li { display:flex; align-items:baseline; gap:8px; font-size:.78rem; color:var(--dim); }
.parent-dashboard .pv2-elist li>b { color:var(--txt); min-width:42px; }
.parent-dashboard .pv2-elist li>em { margin-left:auto; font-style:normal; }
.parent-dashboard .pv2-gkpis { display:flex; flex-wrap:wrap; gap:10px; margin-bottom:8px; }
.parent-dashboard .pv2-gkpi { flex:1; min-width:88px; padding:10px 12px; border-radius:12px; background:var(--panel-2); }
.parent-dashboard .pv2-gkpi>b { display:block; color:#21466f; font-size:1.15rem; }
.parent-dashboard .pv2-gkpi>span { color:var(--dim); font-size:.75rem; }
.parent-dashboard .pv2-empty { padding:14px; border-radius:12px; background:var(--panel-2); color:var(--dim); font-size:.82rem; }
@media (prefers-reduced-motion: reduce) { .parent-dashboard .pv2-linechart { transition:none; } }


/* ============================================================
   家长看板 v4 视觉重构（2026-10-26）：对齐新参考稿的柔和插画风
   —— 渐变底 / 彩色圆环学科卡 / 胶囊标签 / 编号配色 / 底部山峦标语。
   ★ 只改呈现不改语义：所有数据口径、文案红线（0%/NaN/排名等）
     与 _shot_parent.cjs 断言引用的结构原样保留。
   ============================================================ */

/* ---- ① 整体底：柔和天空→米白→浅绿的竖向渐变 ---- */
.parent-dashboard-v2 {
  padding: 16px; border-radius: 24px;
  background: linear-gradient(165deg, #eef6fd 0%, #fbfaf4 46%, #edf7ef 100%);
}
[data-theme="dark"] .parent-dashboard-v2 { background: var(--panel-2); }

/* ---- ② 欢迎头部：更暖的横幅 + 更大的插画 ---- */
.parent-dashboard-v2 .parent-welcome {
  border-radius: 22px; padding: 26px 30px;
  background: linear-gradient(108deg, #e3f1ff 0%, #f6fbff 46%, #e8f7ee 100%);
}
.parent-dashboard-v2 .parent-eyebrow { color: #3f8ae0; }
.parent-dashboard-v2 .parent-welcome h3 { color: #17456f; }
.parent-dashboard-v2 .pv2-hero-art { flex-basis: 168px; width: 168px; height: 132px; }
[data-theme="dark"] .parent-dashboard-v2 .parent-welcome {
  background: linear-gradient(108deg, var(--panel-2), var(--panel), var(--panel-2));
}

/* ---- ③ 一句话总结：浅绿横幅 + 发芽图标 ---- */
.parent-dashboard-v2 .parent-summary .p-head {
  display: flex; align-items: flex-start; gap: 14px;
  border: 1px solid #d9efdd; border-left: 0; border-radius: 18px;
  padding: 20px 22px; background: linear-gradient(110deg, #ecf9ee, #f8fdf8 65%, #eef8fb);
}
.parent-dashboard-v2 .p-head-ico {
  flex: 0 0 46px; width: 46px; height: 46px; border-radius: 14px;
  display: grid; place-items: center; background: #ddf3e1;
}
.parent-dashboard-v2 .p-head-ico svg { width: 26px; height: 26px; }
.parent-dashboard-v2 .p-head-ico-stem { stroke: #3ba26b; }
.parent-dashboard-v2 .p-head-ico-leaf { fill: #46c08a; }
.parent-dashboard-v2 .p-head-ico-leaf2 { fill: #7ed6ae; }
.parent-dashboard-v2 .p-head-body { min-width: 0; flex: 1; }
.parent-dashboard-v2 .parent-summary .p-head-t { color: #1d6b47; }
.parent-dashboard-v2 .parent-summary .p-head-a {
  display: inline-flex; align-items: center; gap: 6px;
  border: 0; padding: 0; margin-top: 4px; color: #2e8f63; font-weight: 600;
}
[data-theme="dark"] .parent-dashboard-v2 .parent-summary .p-head {
  border-color: var(--line); background: var(--panel-2);
}
[data-theme="dark"] .parent-dashboard-v2 .p-head-ico { background: var(--panel); }
[data-theme="dark"] .parent-dashboard-v2 .parent-summary .p-head-t,
[data-theme="dark"] .parent-dashboard-v2 .parent-summary .p-head-a { color: var(--pri-2); }

/* ---- ④ 区块标题：彩色圆点图标（每区一色，参考稿的「彩圈标题」） ---- */
.parent-dashboard-v2 .w-sec { border-radius: 18px; box-shadow: 0 6px 22px rgba(56, 116, 178, .05); }
.parent-dashboard-v2 .pv2-section-head h4::before {
  content: ''; display: inline-block; width: 26px; height: 26px; margin-right: 9px;
  border-radius: 9px; vertical-align: -7px;
  background: var(--pv4-sec, #4d9af4);
}
.parent-dashboard-v2 .pv2-mastery   .pv2-section-head h4::before,
.parent-dashboard-v2 .pv2-exams     .pv2-section-head h4::before,
.parent-dashboard-v2 .pv2-overview  .pv2-section-head h4::before { --pv4-sec: #4d9af4; }
.parent-dashboard-v2 .pv2-growthcurve .pv2-section-head h4::before,
.parent-dashboard-v2 .pv2-rhythm    .pv2-section-head h4::before { --pv4-sec: #46c08a; }
.parent-dashboard-v2 .pv2-outcomes  .pv2-section-head h4::before,
.parent-dashboard-v2 .pv2-notes     .pv2-section-head h4::before { --pv4-sec: #8f7bef; }
.parent-dashboard-v2 .pv2-subjects  .pv2-section-head h4::before { --pv4-sec: #38b8a2; }
.parent-dashboard-v2 .pv2-signals   .pv2-section-head h4::before { --pv4-sec: #38a3e8; }
.parent-dashboard-v2 .pv2-issues    .pv2-section-head h4::before { --pv4-sec: #f2a44a; }
.parent-dashboard-v2 .pv2-action    .pv2-section-head h4::before { --pv4-sec: #f5c542; }
.parent-dashboard-v2 .pv2-now       .pv2-section-head h4::before { --pv4-sec: #9fb2c8; }

/* ---- ⑤ 掌握进度：参考稿式彩色学科卡（图标 + 彩色圆环 + 计数） ---- */
.parent-dashboard-v2 .pv2-mcard {
  background: #fff; border: 1px solid #edf2f9; border-radius: 16px;
  padding: 16px 10px 14px; box-shadow: 0 4px 14px rgba(56, 116, 178, .05);
}
.parent-dashboard-v2 .pv2-msub-ico {
  font-style: normal; width: 30px; height: 30px; margin-bottom: 4px;
  display: grid; place-items: center; border-radius: 50%;
  font-size: .82rem; font-weight: 700; color: #fff;
}
.parent-dashboard-v2 .pv2-mcard.tone-1 .pv2-msub-ico,
.parent-dashboard-v2 .pv2-mcard.tone-1 .pv2-ring-a { background: #4d9af4; stroke: #4d9af4; }
.parent-dashboard-v2 .pv2-mcard.tone-2 .pv2-msub-ico,
.parent-dashboard-v2 .pv2-mcard.tone-2 .pv2-ring-a { background: #46c08a; stroke: #46c08a; }
.parent-dashboard-v2 .pv2-mcard.tone-3 .pv2-msub-ico,
.parent-dashboard-v2 .pv2-mcard.tone-3 .pv2-ring-a { background: #8f7bef; stroke: #8f7bef; }
.parent-dashboard-v2 .pv2-mcard.tone-4 .pv2-msub-ico,
.parent-dashboard-v2 .pv2-mcard.tone-4 .pv2-ring-a { background: #f2a44a; stroke: #f2a44a; }
.parent-dashboard-v2 .pv2-mcard.tone-5 .pv2-msub-ico,
.parent-dashboard-v2 .pv2-mcard.tone-5 .pv2-ring-a { background: #e8707a; stroke: #e8707a; }
[data-theme="dark"] .parent-dashboard-v2 .pv2-mcard { background: var(--panel); border-color: var(--line); }
[data-theme="dark"] .parent-dashboard-v2 .pv2-mcard.tone-1 .pv2-ring-a { stroke: #5aa8f7; }
[data-theme="dark"] .parent-dashboard-v2 .pv2-mcard.tone-2 .pv2-ring-a { stroke: #55d3aa; }
[data-theme="dark"] .parent-dashboard-v2 .pv2-mcard.tone-3 .pv2-ring-a { stroke: #a08ff5; }
[data-theme="dark"] .parent-dashboard-v2 .pv2-mcard.tone-4 .pv2-ring-a { stroke: #f7bc6a; }
[data-theme="dark"] .parent-dashboard-v2 .pv2-mcard.tone-5 .pv2-ring-a { stroke: #ec869c; }

/* ---- ⑥ 卡在哪里：编号按位配色（1红 2橙 3蓝 4绿循环）+ 次数胶囊 ---- */
.parent-dashboard-v2 .pv2-issue-num { background: #fdeaea; color: #e8707a; }
.parent-dashboard-v2 .pv2-issue:nth-of-type(4n+2) .pv2-issue-num { background: #fff0dc; color: #d77b25; }
.parent-dashboard-v2 .pv2-issue:nth-of-type(4n+3) .pv2-issue-num { background: #e3f1ff; color: #3f8ae0; }
.parent-dashboard-v2 .pv2-issue:nth-of-type(4n+4) .pv2-issue-num { background: #e2f7ec; color: #2e9f66; }
.parent-dashboard-v2 .pv2-issue p {
  display: inline-block; margin: 0 0 6px; padding: 3px 10px;
  border-radius: 999px; background: #fdeaea; color: #d05a64;
  font-size: .7rem; font-weight: 600; line-height: 1.5;
}
.parent-dashboard-v2 .pv2-issue:nth-of-type(4n+2) p { background: #fff0dc; color: #b36b2c; }
.parent-dashboard-v2 .pv2-issue:nth-of-type(4n+3) p { background: #e3f1ff; color: #3276c8; }
.parent-dashboard-v2 .pv2-issue:nth-of-type(4n+4) p { background: #e2f7ec; color: #2e8f63; }
[data-theme="dark"] .parent-dashboard-v2 .pv2-issue p { background: var(--panel-2); color: var(--pri-2); }

/* ---- ⑦ AI 辅导观察：四块淡彩瓷砖 ---- */
.parent-dashboard-v2 .pv2-signal { border-radius: 15px; border: 1px solid #eef3fa; background: #fff; box-shadow: 0 3px 12px rgba(56, 116, 178, .04); }
.parent-dashboard-v2 .pv2-signal.pv2-green  .pv2-signal-top>b { background: #e2f7ec; color: #2e9f66; }
.parent-dashboard-v2 .pv2-signal.pv2-blue   .pv2-signal-top>b { background: #e3f1ff; color: #3f8ae0; }
.parent-dashboard-v2 .pv2-signal.pv2-orange .pv2-signal-top>b { background: #fff0dc; color: #d77b25; }
.parent-dashboard-v2 .pv2-signal.pv2-violet .pv2-signal-top>b { background: #ece8ff; color: #7464d6; }
[data-theme="dark"] .parent-dashboard-v2 .pv2-signal { background: var(--panel-2); border-color: var(--line); }

/* ---- ⑧ 成长值 KPI：彩色小卡 ---- */
.parent-dashboard-v2 .pv2-gkpi { background: #fff; border: 1px solid #edf2f9; }
.parent-dashboard-v2 .pv2-gkpi>b { color: #1d6b47; }
[data-theme="dark"] .parent-dashboard-v2 .pv2-gkpi { background: var(--panel-2); border-color: var(--line); }
[data-theme="dark"] .parent-dashboard-v2 .pv2-gkpi>b { color: var(--txt); }

/* ---- ⑨ 家长行动：浅蓝建议卡 + 强调 CTA ---- */
.parent-dashboard-v2 .pv2-action-card {
  border-radius: 16px; border: 1px solid #dcebff;
  background: linear-gradient(145deg, #eaf4ff, #f5fbff);
}
.parent-dashboard-v2 .pv2-action-icon { border-radius: 12px; background: linear-gradient(140deg, #3f8ae0, #46c08a); }
[data-theme="dark"] .parent-dashboard-v2 .pv2-action-card { background: var(--panel-2); border-color: var(--line); }

/* ---- ⑩ 底部标语 + 山峦 ---- */
.parent-dashboard-v2 .pv2-foot-slogan {
  margin-top: 16px; padding: 26px 20px 0; text-align: center;
}
.parent-dashboard-v2 .pv2-foot-slogan p {
  margin: 0 0 6px; font-size: .92rem; line-height: 1.9; font-weight: 600;
  color: #3d7f5f; letter-spacing: .02em;
}
.parent-dashboard-v2 .pv2-foot-art { width: 100%; max-width: 680px; height: auto; display: block; margin: 0 auto -6px; }
.parent-dashboard-v2 .pv2-foot-m1 { fill: #cfe8d8; }
.parent-dashboard-v2 .pv2-foot-m2 { fill: #ddecf6; }
.parent-dashboard-v2 .pv2-foot-m3 { fill: #bfe0cc; }
.parent-dashboard-v2 .pv2-foot-plane { fill: #6db3f2; }
.parent-dashboard-v2 .pv2-foot-dash { fill: #9cc8ee; }
[data-theme="dark"] .parent-dashboard-v2 .pv2-foot-slogan p { color: var(--pri-2); }
[data-theme="dark"] .parent-dashboard-v2 .pv2-foot-m1 { fill: #24384a; }
[data-theme="dark"] .parent-dashboard-v2 .pv2-foot-m2 { fill: #1f2f44; }
[data-theme="dark"] .parent-dashboard-v2 .pv2-foot-m3 { fill: #2a4258; }
[data-theme="dark"] .parent-dashboard-v2 .pv2-foot-plane { fill: #5a9de0; }
[data-theme="dark"] .parent-dashboard-v2 .pv2-foot-dash { fill: #3d6488; }

/* ---- ⑪ 窄屏 ---- */
@media (max-width: 560px) {
  .parent-dashboard-v2 { padding: 10px; border-radius: 18px; }
  .parent-dashboard-v2 .parent-welcome { padding: 12px 14px; }
  .parent-dashboard-v2 .parent-welcome p { display: none; }
  .parent-dashboard-v2 .pv2-hero-art { display: none; }
  .parent-dashboard-v2 .parent-summary .p-head-a { display: block; margin: 8px 0; }
  .parent-dashboard-v2 .parent-summary .p-head-a > span { display: block; margin-bottom: 3px; }
  .parent-dashboard-v2 .parent-summary .p-head-p { margin-top: 8px; font-size: .78rem; line-height: 1.55; }
  .parent-dashboard-v2 .parent-grid { display: flex; flex-direction: column; }
  .parent-dashboard-v2 .pv2-side { order: 0; width: 100%; }
  .parent-dashboard-v2 .parent-side { order: 1; width: 100%; }
  .parent-dashboard-v2 .parent-main { order: 2; width: 100%; }
  .parent-dashboard-v2 .parent-summary .p-head { padding: 15px 16px; gap: 11px; }
  .parent-dashboard-v2 .p-head-ico { flex-basis: 38px; width: 38px; height: 38px; }
}

/* ---- ⑫ 批次216：AI 辅导效果闭环（独立作答 / 提示使用 / 知识迁移）---- */
.parent-dashboard-v2 .pv2-ai { margin-top: 14px; padding-top: 14px; border-top: 1px dashed var(--line); }
.parent-dashboard-v2 .pv2-ai-metrics { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px; }
.parent-dashboard-v2 .pv2-ai-trend { display: flex; align-items: baseline; gap: 8px; margin: 16px 0 2px; }
.parent-dashboard-v2 .pv2-ai-trend > b { font-size: .92rem; color: var(--txt); }
.parent-dashboard-v2 .pv2-ai-trend > span { font-size: .72rem; color: var(--dim); }
.parent-dashboard-v2 .pv2-ai-line { display: flex; flex-direction: column; gap: 4px; margin-top: 10px; }
.parent-dashboard-v2 .pv2-ai-leg { display: inline-block; width: 10px; height: 10px; border-radius: 3px; margin-right: 6px; vertical-align: middle; }
.parent-dashboard-v2 .pv2-ai-leg.c-ind { background: #43c59b; }
.parent-dashboard-v2 .pv2-ai-leg.c-tr { background: #8b79ef; }
.parent-dashboard-v2 .pv2-ai-empty { color: var(--dim); font-size: .8rem; margin: 8px 0 2px; line-height: 1.6; }
@media (max-width: 640px) {
  .parent-dashboard-v2 .pv2-ai-metrics { grid-template-columns: minmax(0, 1fr); }
}

/* ---- ⑬ 批次226：拍照交卷记录（让"交了一张几乎空白的卷子"可见）---- */
/*   ★ 只上色条、不上警告色底：这一块说的是"交了什么"，不是"他做错了什么"。
     三种状态：已批改（绿）/ 批改中（黄）/ 没批成（红）。 */
.parent-dashboard-v2 .pv2-photo-head { margin: 0 0 10px; font-size: .82rem; line-height: 1.7; color: var(--txt); }
.parent-dashboard-v2 .pv2-photo-list { list-style: none; margin: 0; padding: 0; display: grid; gap: 8px; }
.parent-dashboard-v2 .pv2-photo-i {
  display: grid; grid-template-columns: 84px minmax(0, 1fr); gap: 2px 10px;
  padding: 10px 12px; border: 1px solid var(--line); border-left: 3px solid var(--line);
  border-radius: 10px; background: var(--panel-2);
}
.parent-dashboard-v2 .pv2-photo-i b { font-size: .78rem; color: var(--txt); font-variant-numeric: tabular-nums; }
.parent-dashboard-v2 .pv2-photo-i span {
  font-size: .82rem; color: var(--txt);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.parent-dashboard-v2 .pv2-photo-i small { grid-column: 2 / -1; font-size: .7rem; color: var(--dim); }
.parent-dashboard-v2 .pv2-photo-i em { grid-column: 2 / -1; font-size: .7rem; font-style: normal; color: var(--dim); line-height: 1.6; }
.parent-dashboard-v2 .pv2-photo-ok { border-left-color: #43c59b; }
.parent-dashboard-v2 .pv2-photo-wait { border-left-color: #d9a13b; }
.parent-dashboard-v2 .pv2-photo-bad { border-left-color: #e05252; }
/* ★ 批次259：记录默认折叠，点开看逐题对错（记录太多，展开全铺会很长）。 */
.parent-dashboard-v2 .pv2-photo-i > details { grid-column: 1 / -1; }
.parent-dashboard-v2 .pv2-photo-d > summary {
  display: grid; grid-template-columns: 84px minmax(0, 1fr); gap: 2px 10px;
  cursor: pointer; list-style: none;
}
.parent-dashboard-v2 .pv2-photo-d > summary::-webkit-details-marker { display: none; }
.parent-dashboard-v2 .pv2-photo-d > summary::after {
  content: '展开 ▾'; grid-column: 2 / -1; font-size: .68rem; color: var(--pri);
}
.parent-dashboard-v2 .pv2-photo-d[open] > summary::after { content: '收起 ▴'; }
.parent-dashboard-v2 .pv2-photo-qs { list-style: none; margin: 8px 0 0; padding: 0; display: grid; gap: 4px; }
.parent-dashboard-v2 .pv2-q {
  display: grid; grid-template-columns: 24px minmax(0, 1fr); gap: 2px 8px;
  font-size: .72rem; padding: 2px 0 2px 8px; border-left: 2px solid var(--line-2);
}
.parent-dashboard-v2 .pv2-q b { color: var(--dim); font-variant-numeric: tabular-nums; }
.parent-dashboard-v2 .pv2-q span { color: var(--txt); overflow-wrap: anywhere; }
.parent-dashboard-v2 .pv2-q em { grid-column: 2 / -1; font-style: normal; color: var(--dim); }
.parent-dashboard-v2 .pv2-q.q-right { border-left-color: #43c59b; }
.parent-dashboard-v2 .pv2-q.q-partial { border-left-color: #d9a13b; }
.parent-dashboard-v2 .pv2-q.q-wrong { border-left-color: #e05252; }
.parent-dashboard-v2 .pv2-q.q-unknown { border-left-color: #c9a227; }
@media (max-width: 560px) {
  .parent-dashboard-v2 .pv2-photo-i { grid-template-columns: minmax(0, 1fr); }
  .parent-dashboard-v2 .pv2-photo-i small,
  .parent-dashboard-v2 .pv2-photo-i em { grid-column: 1 / -1; }
  .parent-dashboard-v2 .pv2-photo-d > summary { grid-template-columns: minmax(0, 1fr); }
}


/* ---- ⓪ 首屏三块（批次245）：本期可靠事实 / 需要关注的一件事 / 家长可以说的一句话 ---- */
.pv2-first { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px; margin: 14px 0 2px; }
.pv2-first-c { background: #fff; border: 1px solid #e1eaf5; border-radius: 14px; padding: 14px 15px; min-width: 0; }
.pv2-first-h { display: flex; align-items: center; gap: 7px; margin-bottom: 8px; }
.pv2-first-h i { font-style: normal; font-size: .72rem; font-weight: 700; color: #fff; background: #4f7cf7;
  width: 18px; height: 18px; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center; flex: 0 0 auto; }
.pv2-first-h b { font-size: .82rem; color: #334155; }
.pv2-first-t { margin: 0 0 6px; font-size: .92rem; line-height: 1.65; color: #0f172a; font-weight: 600; }
.pv2-first-s { margin: 0; font-size: .78rem; line-height: 1.6; color: #64748b; }
.pv2-first-c.c-watch .pv2-first-h i { background: #f59e0b; }
.pv2-first-c.c-say .pv2-first-h i { background: #10b981; }
@media (max-width: 860px) { .pv2-first { grid-template-columns: 1fr; gap: 10px; } }
[data-theme="dark"] .pv2-first-c { background: #16202e; border-color: #243244; }
[data-theme="dark"] .pv2-first-t { color: #e2e8f0; }
[data-theme="dark"] .pv2-first-s { color: #94a3b8; }
[data-theme="dark"] .pv2-first-h b { color: #cbd5e1; }


/* ---- 自助拍照批改入口（批次253）----------------------------------------
   独立前缀 .pv2-ge：家长看板里同名类互相覆盖过一次（.pass-card 那个真 bug），
   新组件一律用自己的前缀，别去复用 .pv2-photo / .pv2-card。 */
.pv2-ge { border: 1px solid #dbe7f6; border-radius: 14px; background: #f7fbff; padding: 14px 15px; margin: 0 0 14px; }
.pv2-ge-t b { display: block; font-size: .92rem; color: #0f172a; margin-bottom: 4px; }
.pv2-ge-t p { margin: 0 0 12px; font-size: .8rem; line-height: 1.7; color: #64748b; }
.pv2-ge-acts { display: flex; flex-wrap: wrap; gap: 9px; }
.pv2-ge-btn {
  /* ★ flex:1 1 160px —— 一行放得下就平分整行，放不下就各自占满一行（靠 flex-wrap），
     这样不用写媒体查询也能在窄屏拿到"整行按钮"。 */
  flex: 1 1 160px;
  appearance: none; font-family: inherit; font-size: .84rem; font-weight: 600;
  padding: 10px 16px; border-radius: 10px; cursor: pointer;
  border: 1px solid #4f7cf7; background: #4f7cf7; color: #fff;
}
.pv2-ge-btn.ghost { background: #fff; color: #3563d6; }
.pv2-ge-btn:disabled { opacity: .55; cursor: default; }
.pv2-ge-btn:hover:not(:disabled) { filter: brightness(1.05); }
.pv2-ge-hl { color: #3563d6; font-weight: 700; }
/* ---- 多张照片的暂存区（批次260）--------------------------------------
   ★ 用户原话「应该允许家长一次多拍几张，有可能一张卷子拍不下」。
   这里是"已选 N 页"的缩略图 + 逐张删除 + 开始批改。
   ★ 刻意复用 .pv2-ge-btn（它已经是 flex:1 1 160px），只负责排布与删除按钮，
     免得再定义一套按钮尺寸。 */
.pv2-ge-stage { margin-top: 11px; }
.pv2-ge-thumbs { display: flex; flex-wrap: wrap; gap: 8px; }
.pv2-ge-th {
  position: relative; margin: 0; width: 76px; border-radius: 9px; overflow: hidden;
  border: 1px solid #d7e3f5; background: #fff;
}
.pv2-ge-th img { display: block; width: 100%; height: 76px; object-fit: cover; }
.pv2-ge-th figcaption {
  font-size: .68rem; line-height: 1.6; text-align: center; color: #64748b;
  background: #f2f7ff; padding: 1px 0;
}
.pv2-ge-x {
  position: absolute; top: 2px; right: 2px; width: 20px; height: 20px; padding: 0;
  border: 0; border-radius: 50%; cursor: pointer; font-size: 14px; line-height: 18px;
  background: rgba(15, 23, 42, .62); color: #fff;
}
.pv2-ge-x:hover { background: #b42318; }
.pv2-ge-stagebar {
  display: flex; flex-wrap: wrap; align-items: center; gap: 9px; margin-top: 10px;
  font-size: .8rem; color: #334155;
}
.pv2-ge-stagebar > span { flex: 1 1 auto; }
.pv2-ge-stagebar b { color: #0f172a; }
.pv2-ge-out { margin-top: 11px; font-size: .8rem; line-height: 1.75; color: #334155; }
.pv2-ge-out.bad { color: #b42318; }
.pv2-ge-out small { color: #64748b; }
.pv2-ge-out a { color: #3563d6; font-weight: 600; }
.pv2-ge-url {
  margin: 6px 0 4px; padding: 8px 10px; border-radius: 8px; background: #fff;
  border: 1px dashed #c9d8ee; font-size: .74rem; word-break: break-all;
  font-family: ui-monospace, SFMono-Regular, Menlo, monospace; color: #1e293b;
}
.pv2-ge-note { margin: 11px 0 0; font-size: .74rem; line-height: 1.7; color: #7c8798; }
.pv2-ge-note b { color: #b26a00; }
.pv2-ge-spin {
  display: inline-block; width: 12px; height: 12px; margin-right: 6px; vertical-align: -1px;
  border-radius: 50%; border: 2px solid #d7e3f5; border-top-color: #4f7cf7;
  animation: pv2GeSpin .9s linear infinite;
}
@keyframes pv2GeSpin { to { transform: rotate(360deg); } }
[data-theme="dark"] .pv2-ge { background: #16202e; border-color: #243244; }
[data-theme="dark"] .pv2-ge-t b { color: #e2e8f0; }
[data-theme="dark"] .pv2-ge-t p,
[data-theme="dark"] .pv2-ge-note,
[data-theme="dark"] .pv2-ge-out small { color: #94a3b8; }
[data-theme="dark"] .pv2-ge-btn { border-color: #4f7cf7; }
[data-theme="dark"] .pv2-ge-btn.ghost { background: #1b2735; color: #93b4ff; border-color: #35507a; }
[data-theme="dark"] .pv2-ge-out { color: #cbd5e1; }
[data-theme="dark"] .pv2-ge-out.bad { color: #fca5a5; }
[data-theme="dark"] .pv2-ge-url { background: #0f1723; border-color: #35507a; color: #cbd5e1; }
[data-theme="dark"] .pv2-ge-spin { border-color: #2a3a4f; border-top-color: #93b4ff; }
[data-theme="dark"] .pv2-ge-hl { color: #93b4ff; }
[data-theme="dark"] .pv2-ge-th { background: #0f1723; border-color: #35507a; }
[data-theme="dark"] .pv2-ge-th figcaption { background: #16202e; color: #94a3b8; }
[data-theme="dark"] .pv2-ge-stagebar { color: #cbd5e1; }
[data-theme="dark"] .pv2-ge-stagebar b { color: #e2e8f0; }
/* ★ 刻意不在这里加窄屏（560px）媒体查询：`.pv2-ge-acts` 已经有 flex-wrap，
   窄屏会自己换行；而 `_parentphotocheck` 的 C10 用的是**最后一个** 560px 段
   来定位 `.pv2-photo-i` 的窄屏回退 —— 再追加一个会把它顶掉。
   ★★ 连注释里都不要写出那个媒体查询的字面量：C10 用的是字符串 lastIndexOf，
   注释一样会被它命中（这条已经踩过一次）。 */
