/* 小程序 · 批改（M-19）：mg- 是批改页；ann- 是图片批注器（annotate.js 的全屏层，别的页面也会用，只依赖 :root 色值，不依赖页面容器）。 */

/* ---------- 批注器 ---------- */
.ann{position:fixed;inset:0;z-index:58;display:flex;flex-direction:column;background:var(--dk-0);color:var(--dk-ink);overscroll-behavior:contain;-webkit-user-select:none;user-select:none;font:15px/1.5 var(--font,-apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei",sans-serif)}
.ann input{-webkit-user-select:text;user-select:text}
.ann button{font:inherit;cursor:pointer}
.ann svg{width:20px;height:20px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;flex:none}
.ann-top{flex:none;display:flex;align-items:center;gap:12px;height:60px;padding:0 14px;background:var(--dk-0);border-bottom:1px solid var(--dk-2)}
.ann-x{width:44px;height:44px;border-radius:var(--r-sm);border:1px solid var(--dk-3);background:var(--dark);display:grid;place-items:center;color:var(--dk-ink)}
.ann-x:hover{background:var(--dk-2)}
.ann-ttl{flex:1;min-width:0;display:flex;flex-direction:column;line-height:1.3}
.ann-ttl b{font-size:16px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ann-ttl small{font-size:13px;color:var(--dk-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ann-zoom{flex:none;display:flex;align-items:center;gap:2px;background:var(--dark);border:1px solid var(--dk-3);border-radius:var(--r-sm);padding:3px}
.ann-zoom button{min-width:44px;height:44px;border:0;border-radius:var(--r-sm);background:none;color:var(--dk-ink);font-size:20px;font-weight:700;line-height:1}
.ann-zoom .ann-zv{font-size:13px;min-width:60px;font-variant-numeric:tabular-nums}
.ann-zoom button:hover:not(:disabled){background:var(--dk-2)}
.ann-zoom button:disabled{opacity:.35;cursor:default}
.ann-stage{flex:1;min-height:0;position:relative;overflow:hidden;touch-action:none;cursor:crosshair;background:var(--dk-0)}
.ann-stage[data-tool=text]{cursor:text}
.ann-stage[data-tool=move],.ann-stage.space{cursor:grab}
.ann-stage.panning{cursor:grabbing}
.ann.busy .ann-stage{cursor:progress}
.ann-cv{position:absolute;left:0;top:0;transform-origin:0 0;will-change:transform;background:#fff;box-shadow:0 10px 40px rgba(0,0,0,.45);touch-action:none}
.ann-state{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;color:var(--dk-muted);font-size:14px;text-align:center;padding:24px}
.ann-state b{font-size:16px;color:#fff}
.ann-state span{max-width:440px;line-height:1.6}
.ann-retry{min-height:44px;padding:0 20px;border-radius:var(--r-sm);border:1px solid var(--dk-3);background:var(--dk-2);color:#fff;font-weight:700}
.ann-spin{width:30px;height:30px;border-radius:50%;border:3px solid rgba(255,255,255,.22);border-top-color:#fff;animation:ann-rot .8s linear infinite}
@keyframes ann-rot{to{transform:rotate(360deg)}}
.ann-croptip{position:absolute;left:50%;top:14px;transform:translateX(-50%);background:rgba(15,23,32,.85);color:#fff;font-size:14px;font-weight:700;border-radius:var(--r-pill);padding:7px 16px;pointer-events:none;white-space:nowrap}
.ann-1x{position:absolute;right:16px;bottom:16px;min-width:56px;height:44px;border-radius:var(--r-pill);border:0;background:rgba(15,23,32,.82);color:#fff;font-weight:700;font-size:14px;box-shadow:var(--sh-md)}
.ann-bot{flex:none;background:#fff;color:var(--ink);border-radius:var(--r-lg) var(--r-lg) 0 0;padding:10px 16px calc(10px + env(safe-area-inset-bottom));box-shadow:0 -8px 28px rgba(0,0,0,.2)}
.ann-tools,.ann-cropbar{display:flex;gap:6px;justify-content:center}
.ann-tb{flex:1 1 0;max-width:92px;min-height:56px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;border:1.5px solid transparent;border-radius:var(--r-sm);background:var(--tonal);color:var(--muted);font-size:13px;font-weight:600;padding:4px 2px}
.ann-tb svg{width:21px;height:21px}
.ann-tb:hover:not(:disabled){background:var(--line)}
.ann-tb.on{background:var(--pri-s);border-color:var(--pri);color:var(--pri-t)}
.ann-tb:disabled{opacity:.38;cursor:default}
.ann-tb.wide{max-width:200px;flex-direction:row;gap:8px;font-size:14px}
.ann-tb.pri{background:var(--pri);color:#fff}
.ann-tb.pri:hover:not(:disabled){background:var(--pri-d)}
.ann-row{display:flex;align-items:center;gap:10px;margin-top:10px}
.ann-note{flex:1;min-width:0;display:flex;align-items:center;gap:8px;height:48px;border:1px solid var(--line2);border-radius:var(--r-sm);padding:0 12px;background:var(--bg);cursor:text}
.ann-note input{flex:1;min-width:0;border:0;outline:none;background:none;font-size:15px;color:inherit}
.ann-note em{font-style:normal;font-size:12px;color:var(--faint);font-variant-numeric:tabular-nums}
.ann-note:focus-within{border-color:var(--pri);background:#fff}
.ann-grow{flex:1}
.ann-nav{flex:none;min-height:48px;padding:0 14px;border-radius:var(--r-sm);border:1px solid var(--line2);background:#fff;font-weight:700;font-size:14px;color:inherit}
.ann-nav:disabled{opacity:.4;cursor:default}
.ann-send{flex:none;min-width:150px;min-height:48px;padding:0 22px;border-radius:var(--r-md);border:1px solid var(--pri);background:var(--pri);color:#fff;font-weight:700;font-size:15px;box-shadow:none;font-variant-numeric:tabular-nums}
.ann-send:active:not(:disabled){transform:translateY(1px);box-shadow:none}
.ann-send:disabled{opacity:.6;cursor:default}
.ann-hint{margin:8px 0 0;text-align:center;font-size:12px;color:var(--faint)}
@media (max-height:720px){.ann-hint{display:none}.ann-tb{min-height:50px}.ann-top{height:54px}}
@media (max-width:760px){.ann-tb span{font-size:11px}.ann-send{min-width:108px;padding:0 14px}.ann-nav{padding:0 10px}.ann-zoom .ann-zv{min-width:48px}}

/* ---------- 批改页 ---------- */
.mg-main{padding:14px 18px 18px;display:flex;flex-direction:column;gap:12px;min-width:0}
.mg-tabbar{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.mg-tabbar .tabs button{min-height:44px;display:inline-flex;align-items:center;gap:6px}
.mg-tabbar .tabs em{font-style:normal;font-size:12px;font-weight:500;background:var(--amber-s);color:var(--amber-t);border-radius:var(--r-pill);padding:0 7px;line-height:18px}
.mg-tabbar .tabs em:empty{display:none}
.mg-body{display:flex;flex-direction:column;gap:12px;min-width:0}
.mg-err{padding:22px 18px;border:1px solid var(--bad-b);background:var(--bad-s);border-radius:var(--r-md)}
.mg-err b{font-size:16px;color:var(--bad)}.mg-err p{margin:6px 0 12px;color:var(--bad)}
.mg-emptyacts{display:flex;gap:10px;justify-content:center;margin-top:14px;flex-wrap:wrap}
/* 月份 + 日期条 */
.mg-top{display:flex;align-items:center;gap:10px;min-width:0}
.mg-month{flex:none;display:flex;align-items:center;gap:2px;border:1px solid transparent;border-radius:var(--r-md);background:var(--tonal);padding:3px}
.mg-month button{width:44px;height:44px;border:0;background:none;border-radius:var(--r-sm);font-size:20px;font-weight:700;color:var(--muted);line-height:1}
.mg-month button:hover:not(:disabled){background:var(--soft);color:var(--ink)}
.mg-month button:disabled{opacity:.3;cursor:default}
.mg-month b{font-size:14px;min-width:86px;text-align:center;font-variant-numeric:tabular-nums}
.mg-days{position:relative;flex:1;min-width:0;display:flex;gap:8px;overflow-x:auto;padding:3px 2px 7px;scroll-behavior:smooth;scrollbar-width:thin}
.mg-day{flex:none;width:60px;min-height:68px;border:1px solid transparent;border-radius:var(--r-md);background:var(--soft);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;padding:4px 0;color:var(--ink)}
.mg-day:hover{border-color:var(--pri-b)}
.mg-day small{font-size:12px;color:var(--muted);line-height:1.3}
.mg-day b{font-size:18px;line-height:1.2;font-variant-numeric:tabular-nums}
.mg-day em{font-style:normal;font-size:12px;font-weight:500;color:var(--amber-t);line-height:1.3}
.mg-day i{width:7px;height:7px;border-radius:50%;background:var(--off);margin:5px 0 3px}
.mg-day i.done{background:var(--ok)}
.mg-day.on{background:var(--pri-s);border-color:var(--pri-b);color:var(--pri-t);box-shadow:none}
.mg-day.on small,.mg-day.on em{color:var(--pri-t)}
/* 当天汇总 + 列表 */
.mg-dayview{display:flex;flex-direction:column;gap:12px;min-width:0}
.mg-sum{display:flex;align-items:center;gap:10px;flex-wrap:wrap;font-size:14px;color:var(--muted);min-height:40px}
.mg-sum b{color:var(--ink);font-variant-numeric:tabular-nums}
.mg-sum b.hi{color:var(--purple)}
.mg-search{flex:0 1 220px;margin-left:auto;height:44px}
.mg-lists{display:flex;flex-direction:column;gap:12px;min-width:0}
.mg-list{display:flex;flex-direction:column;border:0;border-radius:var(--r-md);background:none;overflow:hidden;min-width:0}
.mg-none{padding:26px 16px;text-align:center;color:var(--muted);font-size:14px}
.mg-row{display:grid;grid-template-columns:36px minmax(0,1fr) auto;gap:4px 12px;align-items:start;padding:12px 14px;border-top:1px solid var(--tonal)}
.mg-row:first-child{border-top:0}
.mg-row>.mpav,.mg-orow>.mpav{width:36px;height:36px;font-size:14px}
.mg-rmain{min-width:0}
.mg-rhead{display:flex;align-items:center;gap:8px;flex-wrap:wrap;min-height:36px;min-width:0}
.mg-rhead b{font-size:15px}
.mg-rhead small{font-size:13px;color:var(--muted);font-variant-numeric:tabular-nums}
.mg-cmt{margin:2px 0 0;font-size:13px;color:var(--amber-d);background:var(--amber-s);border-radius:var(--r-sm);padding:5px 10px;width:fit-content;max-width:100%}
.mg-imgs{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin-top:8px}
.mg-th{position:relative;width:84px;height:84px;flex:none}
.mg-th a{display:block;width:100%;height:100%;border:1px solid var(--line);border-radius:var(--r-sm);overflow:hidden;background:var(--soft)}
.mg-th img{width:100%;height:100%;object-fit:cover;display:block;cursor:zoom-in}
.mg-th.t a{border:2px solid var(--bad-b)}
/* M-56 学生交的图角上「P10 第2题」/「整页」（批改页、日清过关共用；不接点击，点图照样看大图） */
.hp-tag{position:absolute;left:4px;top:4px;max-width:calc(100% - 8px);padding:1px 6px;border-radius:var(--r-pill);background:var(--dark);color:var(--dk-ink);font-size:var(--fs-xs);font-weight:500;line-height:1.5;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;pointer-events:none}
.hp-tag.whole{background:var(--panel);color:var(--muted);box-shadow:inset 0 0 0 1px var(--line2)}
.mg-del{position:absolute;right:-12px;top:-12px;width:38px;height:38px;border:0;background:none;padding:0;display:grid;place-items:center}
.mg-del span{width:24px;height:24px;border-radius:50%;background:var(--dark);color:#fff;font-size:11px;display:grid;place-items:center;box-shadow:var(--sh-xs)}
.mg-del:hover span{background:var(--bad)}
.mg-sep{align-self:stretch;display:flex;align-items:center;gap:6px;font-size:12px;font-weight:500;color:var(--bad);padding-left:6px}
.mg-sep::before{content:"";width:6px;height:6px;border-radius:50%;background:var(--bad);flex:none}
.mg-acts{display:flex;gap:8px;align-items:center;flex-wrap:wrap;justify-content:flex-end;min-height:36px}
.mg-folds{display:flex;gap:8px;flex-wrap:wrap}
.mg-fold{min-height:40px;padding:0 14px;border-radius:var(--r-sm);border:1px solid transparent;background:var(--tonal);font-weight:600;font-size:14px;color:var(--ink)}
.mg-fold:hover{background:var(--soft)}
.mg-fold.on{background:var(--pri-s);border-color:var(--pri-b);color:var(--pri-t)}
.mg-fold b{font-variant-numeric:tabular-nums}
.mg-chips{display:flex;flex-wrap:wrap;gap:8px}
.mg-chip{display:inline-flex;align-items:center;gap:7px;border:1px solid transparent;border-radius:var(--r-pill);padding:4px 12px 4px 4px;font-size:14px;background:var(--tonal);min-height:38px}
.mg-chip small{color:var(--muted);font-size:12px}
.mg-hint{margin:0 2px}
/* 口述 */
.mg-osum{margin:0;font-size:14px;color:var(--muted)}
.mg-osum b{font-variant-numeric:tabular-nums}
.mg-grp{display:flex;flex-direction:column;gap:8px;min-width:0}
.mg-grp>h3{margin:4px 2px 0;font-size:16px;display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}
.mg-grp>h3 small{font-size:13px;font-weight:700}
.mg-orow{display:grid;grid-template-columns:36px minmax(0,1fr) auto;gap:6px 12px;align-items:center;padding:12px 14px;border-top:1px solid var(--tonal)}
.mg-orow:first-child{border-top:0}
.mg-pill{font-size:13px;padding:2px 10px}
.mg-obody{grid-column:2/4;display:flex;flex-direction:column;gap:8px;min-width:0}
.mg-player{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.mg-player audio{height:40px;width:min(380px,100%)}
.mg-player .rowlink{min-height:44px}
.mg-tr{margin:0;font-size:14px;line-height:1.7;background:var(--soft);border-radius:var(--r-sm);padding:8px 12px;color:var(--muted);white-space:pre-wrap}
.mg-noaudio{margin:0;font-size:13px;color:var(--muted)}
.mg-score{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.mg-score>span{font-size:13px;color:var(--muted);margin-right:4px;min-width:28px}
.mg-sc{min-width:52px;min-height:38px;padding:0 10px;border-radius:var(--r-sm);border:1px solid var(--line2);background:#fff;font-weight:700;font-size:14px;font-variant-numeric:tabular-nums}
.mg-sc:hover{background:var(--soft)}
.mg-sc.on{background:var(--pri-s);border-color:var(--pri-b);color:var(--pri-t)}
.mg-cm{display:flex;gap:8px;align-items:flex-end}
.mg-cm textarea{flex:1;min-width:0;min-height:44px;max-height:140px;resize:vertical;border:1px solid var(--line2);border-radius:var(--r-sm);padding:9px 12px;font-size:14px;line-height:1.5;background:#fff}
.mg-cm textarea:focus{outline:none;border-color:var(--pri)}
.mg-sent{font-size:13px;color:var(--ok);font-weight:700}
.mg-sent:empty{display:none}
.mg-ofold{border:0;border-top:1px solid var(--tonal);background:var(--soft);min-height:44px;padding:0 16px;text-align:left;font-weight:600;font-size:14px;color:var(--muted)}
.mg-ofold:first-child{border-top:0}
.mg-ofold:hover,.mg-ofold.on{color:var(--pri-t);background:var(--pri-s)}
@media (max-width:1180px){.mg-row{grid-template-columns:36px minmax(0,1fr)}.mg-acts{grid-column:2;justify-content:flex-start}.mg-search{flex-basis:180px}}
@media (prefers-reduced-motion:reduce){.mg-days{scroll-behavior:auto}}

/* C-86 一键标记订正完成 */
.mg-sum [data-a=mark]{margin-left:8px}
.mg-sum .mg-search + [data-a=mark]{margin-left:0}
.mg-jobslot:empty{display:none}
.mg-job{display:flex;align-items:center;gap:12px;background:var(--ok-s);border-radius:var(--r-sm);padding:10px 12px;margin:4px 0 10px}
.mg-job .grow{flex:1;min-width:0;display:flex;flex-direction:column;gap:4px}
.mg-job b{font-size:14px;color:var(--ok)}
.mg-job span{font-size:13px;color:var(--muted);font-variant-numeric:tabular-nums}
.mg-jobbar{height:6px;border-radius:3px;background:#fff;overflow:hidden}
.mg-jobbar i{display:block;height:100%;background:var(--ok);transition:width .3s}
.mg-mk{display:flex;flex-direction:column;gap:14px;max-height:48vh;overflow:auto;margin:10px 0 6px}
.mg-mk header{display:flex;align-items:center;gap:10px;margin-bottom:6px}
.mg-mk header b{font-size:14px}
.mg-mkl{display:flex;flex-wrap:wrap;gap:8px}
.mg-mki{display:inline-flex;align-items:center;gap:7px;border-radius:var(--r-pill);padding:4px 12px 4px 8px;background:var(--tonal);min-height:44px;font-size:14px;cursor:pointer}
.mg-mki:has(input:checked){background:var(--ok-s)}
.mg-mki input{width:18px;height:18px;margin:0;accent-color:var(--ok)}
.mg-mknote{margin-top:8px}
