/* Flat classroom, compact rear phone bags, anchored actions. */
.stage{--s-white:oklch(1 0 0);--s-quiet:oklch(.982 .003 140);--s-seat-line:oklch(.86 .008 140);position:relative;overflow:hidden;border:1px solid var(--line);border-radius:10px;color:var(--ink);background:var(--s-white);box-shadow:0 3px 16px oklch(.2 .015 140/.035)}
.stage .icon{width:17px;height:17px;stroke-width:1.7}
.stage-hud{display:grid;grid-template-columns:minmax(200px,1fr) auto auto;align-items:center;gap:20px;min-height:76px;padding:14px 20px;border-bottom:1px solid var(--line);background:var(--s-white)}
.shud-course{min-width:0}.shud-course h1{display:flex;gap:9px;align-items:baseline;font-size:21px;line-height:1.35;font-weight:650;letter-spacing:-.025em}.shud-course h1 small{overflow:hidden;font-size:12px;font-weight:400;color:var(--muted);white-space:nowrap;text-overflow:ellipsis}
.shud-meta{display:flex;align-items:center;flex-wrap:wrap;gap:8px;margin-top:5px;font-size:11px;color:var(--muted)}.shud-phase{display:inline-flex;align-items:center;gap:4px;padding:1px 6px;border-radius:4px;font-size:11px;line-height:1.7;color:var(--primary);background:var(--primary-soft)}.shud-phase:before{content:'';width:5px;height:5px;border-radius:50%;background:currentColor}.shud-phase.warn{color:var(--amber);background:var(--amber-soft)}.shud-phase.muted{color:var(--muted);background:var(--surface-2)}
.shud-stats{display:flex;align-items:center;gap:16px}.shud-stat{display:inline-flex;align-items:baseline;gap:4px;color:var(--muted);font-size:11px;white-space:nowrap}.shud-stat b{font-size:19px;font-weight:650;color:var(--ink);line-height:1;font-variant-numeric:tabular-nums}.shud-stat em{font-size:11px;font-style:normal}.shud-stat.warn b{color:var(--amber)}.shud-actions{display:flex;align-items:center;gap:7px}
.stage .shud-actions button{min-height:40px;padding:6px 10px;border-radius:7px;font-size:12px;color:var(--ink);border:1px solid var(--line);background:var(--s-white)}.stage .shud-actions button:hover{background:var(--surface)}.stage .shud-actions .primary{color:var(--s-white);background:var(--primary);border-color:var(--primary)}.stage .shud-actions .primary:hover{background:var(--primary-hover);border-color:var(--primary-hover)}

/* Physical classroom: phone bags at the rear, six rows, two clear aisles. */
.stage-scroll{overflow-x:auto;overflow-y:hidden;scrollbar-width:thin;overscroll-behavior-x:contain}.stage-scroll-hint{display:none}.stage-room{min-width:970px;padding:12px 20px 9px;background:var(--s-white)}
.stage-wall{display:flex;align-items:center;justify-content:space-between;gap:20px;padding:0 8px 11px;margin-bottom:10px;border-bottom:1px solid var(--line)}.pwall-title{display:grid;align-content:center;gap:5px;max-width:190px}.pwall-title b{color:var(--ink);font-size:14px;font-weight:600}.pwall-title small{color:var(--muted);font-size:11px;line-height:1.7}.pwall-bags{display:flex;gap:26px}.pbag-group{display:grid;gap:4px;justify-items:center}.pbag-title{color:var(--muted);font-size:11px;line-height:14px}.pbag-grid{display:grid;grid-template-columns:repeat(6,30px);gap:2px}
.stage .pbag{position:relative;display:grid;place-items:center;width:30px;height:30px;min-height:30px;padding:0;border:1px solid var(--line);border-radius:4px;color:var(--muted);background:var(--s-white);font-size:11px;line-height:1;font-variant-numeric:tabular-nums}.stage .pbag:hover{color:var(--primary);border-color:var(--primary);background:var(--primary-soft)}.stage .pbag.filled,.stage .pbag.multi{color:var(--primary);border-color:oklch(.79 .045 140);background:var(--primary-soft);font-weight:600}.pbag.multi i{position:absolute;right:-3px;top:-3px;display:grid;place-items:center;width:12px;height:12px;border:1px solid var(--s-white);border-radius:50%;color:var(--s-white);background:var(--primary);font-size:8px;font-style:normal}.pbag.selected{outline:2px solid var(--primary);outline-offset:1px}
.pwall-count{min-width:130px;text-align:right;color:var(--muted);font-size:11px;white-space:nowrap}.pwall-count b{margin-right:3px;color:var(--ink);font-size:19px;font-weight:600;font-variant-numeric:tabular-nums}.stage-wall.assigning .pwall-title small{color:var(--primary);font-weight:550}.stage-wall.assigning .pbag{border-color:oklch(.76 .045 140)}
.stage-group-head{display:grid;grid-template-columns:repeat(4,minmax(0,1fr)) 20px repeat(4,minmax(0,1fr)) 20px repeat(2,minmax(0,1fr));gap:7px;margin:0 0 7px 31px;color:var(--muted);font-size:11px;line-height:1.5;text-align:center}.stage-group-head .sg-door{grid-column:1/5}.stage-group-head .sg-middle{grid-column:6/10}.stage-group-head .sg-window{grid-column:11/13}.stage-group-head .sg-aisle{font-size:10px;font-style:normal;color:oklch(.58 .01 140)}
.stage-rows{display:grid;gap:6px}.prow{display:grid;grid-template-columns:24px minmax(0,1fr);align-items:stretch;gap:7px}.prow-tag{display:flex;flex-direction:column;justify-content:center;align-items:center;gap:1px;color:var(--muted);font-size:10px;line-height:1.2}.prow-tag b{color:var(--ink);font-size:13px;font-weight:550;font-variant-numeric:tabular-nums}.prow-seats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr)) 20px repeat(4,minmax(0,1fr)) 20px repeat(2,minmax(0,1fr));gap:7px}.paisle{position:relative}.paisle:after{content:'';position:absolute;left:50%;top:4px;bottom:4px;border-left:1px dashed oklch(.87 .008 140)}

/* Names carry the occupancy signal; icons no longer consume a full text row. */
.stage .pseat{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;gap:2px;min-width:0;min-height:60px;padding:19px 5px 6px;overflow:hidden;border:1px solid var(--s-seat-line);border-radius:6px;color:var(--ink);background:var(--s-white);box-shadow:none;text-align:center;transition:background .14s,border-color .14s,box-shadow .14s}.stage .pseat.occupied.ok{background:oklch(.969 .013 140);border-color:oklch(.8 .033 140)}.stage .pseat.occupied.warn{background:var(--amber-soft);border-color:oklch(.82 .065 80)}.stage .pseat.occupied.bad{background:var(--red-soft);border-color:oklch(.81 .065 25)}.stage .pseat.occupied.info{background:oklch(.972 .014 250);border-color:oklch(.83 .035 250)}.stage .pseat.occupied.muted{background:var(--surface)}.stage .pseat:hover{box-shadow:0 0 0 2px var(--surface-2);border-color:var(--primary)}.stage .pseat.selected{outline:2px solid var(--primary);outline-offset:2px;box-shadow:0 0 0 4px var(--primary-soft)}
.pseat-top{position:absolute;left:7px;right:7px;top:4px;display:flex;justify-content:space-between;align-items:center;gap:3px;line-height:1.2;color:var(--muted)}.pseat-id{font-size:10px;font-variant-numeric:tabular-nums}.pseat-tags{display:flex;align-items:center;gap:3px}.pseat-tag{padding:0 3px;border-radius:3px;font-size:8px;font-style:normal;line-height:1.6;color:var(--muted);background:oklch(1 0 0/.8);white-space:nowrap}.pseat-tag.rec{color:var(--ink)}.pseat-tag.extra{color:var(--purple);background:var(--purple-soft)}.pseat-person{display:none}.pseat-name{max-width:100%;overflow:hidden;color:var(--ink);font-size:14px;font-weight:650;line-height:1.4;white-space:nowrap;text-overflow:ellipsis}.pseat-sub{max-width:100%;overflow:hidden;color:var(--muted);font-size:11px;line-height:1.4;white-space:nowrap;text-overflow:ellipsis}.pseat-sub i{margin:0 2px;color:oklch(.72 .01 140);font-style:normal}.pseat-sub .ok{color:var(--primary)}.pseat-sub .warn{color:var(--amber)}.pseat-sub .bad{color:var(--red)}.pseat-sub .info{color:var(--blue)}
.stage .pseat.empty{color:var(--muted);border-color:oklch(.92 .004 140);background:var(--s-quiet)}.stage .pseat.empty:hover{border-color:var(--s-seat-line);background:var(--surface)}.pseat-desk.empty-monitor{position:relative;width:18px;height:12px;border:1px solid oklch(.84 .006 140);border-radius:2px}.pseat-desk.empty-monitor:after{content:'';position:absolute;bottom:-4px;left:4px;width:8px;height:1px;background:oklch(.84 .006 140)}.pseat-desk{margin:auto 0;color:oklch(.53 .01 140);font-size:12px;line-height:1.4}.pseat-empty-name{margin:auto 0;color:var(--muted);font-size:12px;line-height:1.4;font-weight:500}.stage .pseat.extra{border-color:oklch(.76 .07 300)}.stage .pseat.empty.extra .pseat-sub{color:var(--purple);font-size:10px}.stage .pseat.disabled{color:var(--muted);background:var(--surface-2);border-style:dashed;cursor:default}
.stage-podium{display:grid;place-items:center;width:38%;height:25px;margin:11px auto 0;border:1px solid var(--line);border-radius:5px;background:var(--surface);color:var(--muted);font-size:11px;letter-spacing:.12em}
.stage-unseated{display:flex;align-items:center;gap:14px;min-height:40px;padding:7px 20px;border-bottom:1px solid var(--line);background:var(--s-quiet)}.sunseated-label{display:flex;align-items:baseline;gap:5px;color:var(--muted);font-size:11px;white-space:nowrap}.sunseated-label b{color:var(--ink);font-size:15px;font-weight:600;font-variant-numeric:tabular-nums}.sunseated-label small{display:none}.sunseated-list{display:flex;flex:1;flex-wrap:wrap;gap:5px;max-height:65px;overflow:auto}.stage .pchip{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:28px;padding:3px 8px;border:1px solid var(--line);border-radius:5px;background:var(--s-white);color:var(--ink);font-size:12px;white-space:nowrap}.pchip i{color:var(--muted);font-size:10px;font-style:normal}.stage .pchip:hover{border-color:var(--primary);background:var(--primary-soft)}.stage .pchip.selected{outline:2px solid var(--primary);outline-offset:1px}.pchip.bad i{color:var(--red)}.pchip.info i{color:var(--blue)}
.stage-legend{display:flex;flex-wrap:wrap;align-items:center;gap:14px;padding:8px 20px;border-top:1px solid var(--line);color:var(--muted);background:var(--s-white);font-size:11px;line-height:1.5}.plegend{display:inline-block;width:6px;height:6px;margin-right:5px;border-radius:2px;background:var(--muted)}.plegend.ok{background:var(--primary)}.plegend.warn{background:var(--amber)}.plegend.bad{background:var(--red)}.plegend.info{background:var(--blue)}.plegend-hint{margin-left:auto;font-size:11px}.stage-off{padding:0}

/* Non-modal actions keep the rear bags available for one-click assignment. */
#stage-pop{position:fixed;z-index:55;width:380px;max-height:calc(100dvh - 28px);overflow:auto;padding:0;border:1px solid var(--line);border-radius:10px;color:var(--ink);background:oklch(1 0 0);box-shadow:0 12px 44px oklch(.2 .015 140/.18),0 2px 8px oklch(.2 .015 140/.06);opacity:0;transform:translateY(4px);transition:opacity .14s,transform .14s;pointer-events:none;scrollbar-width:thin}#stage-pop[hidden]{display:none!important}#stage-pop.open{opacity:1;transform:none;pointer-events:auto}
#stage-pop .sp-head{position:sticky;top:0;z-index:2;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:16px 18px 12px;border-bottom:1px solid var(--line);background:oklch(1 0 0)}#stage-pop .sp-title{display:grid;gap:3px;min-width:0}#stage-pop .sp-title b{overflow:hidden;color:var(--ink);font-size:17px;font-weight:650;line-height:1.35;white-space:nowrap;text-overflow:ellipsis}#stage-pop .sp-title small{overflow:hidden;color:var(--muted);font-size:11px;line-height:1.6;white-space:nowrap;text-overflow:ellipsis}#stage-pop .sp-close{flex-shrink:0;width:32px;height:32px;min-height:32px;padding:0;border:1px solid transparent;border-radius:6px;color:var(--muted);background:transparent;font-size:23px;font-weight:400;line-height:1}#stage-pop .sp-close:hover{color:var(--ink);background:var(--surface)}
#stage-pop .sp-pills{display:flex;flex-wrap:wrap;gap:5px;padding:11px 18px 0}#stage-pop .sp-pill{display:inline-flex;align-items:center;padding:2px 6px;border-radius:4px;font-size:11px;line-height:1.55;color:var(--muted);background:var(--surface-2);white-space:nowrap}#stage-pop .sp-pill.ok{color:var(--primary);background:var(--primary-soft)}#stage-pop .sp-pill.warn{color:var(--amber);background:var(--amber-soft)}#stage-pop .sp-pill.bad{color:var(--red);background:var(--red-soft)}#stage-pop .sp-pill.info{color:var(--blue);background:oklch(.96 .02 250)}#stage-pop .sp-pill.extra{color:var(--purple);background:var(--purple-soft)}
#stage-pop .sp-phone-line{display:grid;gap:2px;padding:10px 18px;color:var(--ink);font-size:13px}#stage-pop .sp-phone-line em{color:var(--muted);font-size:11px;font-style:normal}#stage-pop .sp-seat-line{display:flex;align-items:center;justify-content:space-between;gap:8px;margin:0 18px 11px;padding:8px 10px;border:1px solid var(--line);border-radius:6px;color:var(--muted);background:var(--surface);font-size:12px}#stage-pop .sp-seat-line em{color:var(--muted);font-size:11px;font-style:normal}#stage-pop .sp-seat-line em.ok{color:var(--primary)}#stage-pop .sp-note{margin:11px 18px;padding:9px 10px;border-radius:6px;color:var(--blue);background:oklch(.965 .018 250);font-size:12px;line-height:1.7}
#stage-pop .sp-link.danger{color:var(--red)}#stage-pop .sp-link.danger:hover{color:var(--red);background:var(--red-soft)}
#stage-pop .sp-group{padding:11px 18px;border-top:1px solid var(--line)}#stage-pop .sp-group>span{display:block;margin-bottom:7px;color:var(--muted);font-size:11px;font-weight:550}#stage-pop .sp-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:6px}#stage-pop .sp-grid.two{grid-template-columns:repeat(2,minmax(0,1fr))}#stage-pop .sp-grid.three{grid-template-columns:repeat(3,minmax(0,1fr))}#stage-pop .sp-grid.five{grid-template-columns:repeat(5,minmax(0,1fr))}
#stage-pop .sp-btn{min-height:40px;padding:7px 4px;border:1px solid var(--line);border-radius:6px;color:var(--ink);background:oklch(1 0 0);font-size:13px;line-height:1.4}#stage-pop .sp-btn:hover:not(:disabled){background:var(--surface);border-color:oklch(.76 .015 140)}#stage-pop .sp-btn.ok{color:var(--primary);background:var(--primary-soft);border-color:oklch(.8 .04 140)}#stage-pop .sp-btn.warn{color:var(--amber);background:var(--amber-soft);border-color:oklch(.85 .05 80)}#stage-pop .sp-btn.danger{color:var(--red);background:var(--red-soft);border-color:oklch(.86 .05 25)}#stage-pop .sp-btn.danger.confirm{color:oklch(1 0 0);background:var(--red);border-color:var(--red);font-weight:600}#stage-pop .sp-btn.primary{color:oklch(1 0 0);background:var(--primary);border-color:var(--primary)}#stage-pop .sp-btn:disabled{opacity:.48;cursor:not-allowed}
#stage-pop .sp-hint{margin:7px 0 0;color:var(--muted);font-size:11px;line-height:1.65}#stage-pop>.sp-hint{margin:10px 18px}#stage-pop .sp-more{display:flex;flex-wrap:wrap;align-items:center;gap:8px 16px;padding:10px 18px 13px;border-top:1px solid var(--line);background:var(--surface)}#stage-pop .sp-link{min-height:28px;padding:2px 0;border:0;border-radius:3px;color:var(--primary);background:transparent;font-size:12px;font-weight:550;text-decoration:none}#stage-pop .sp-link:hover{color:var(--primary-hover);text-decoration:underline;text-underline-offset:3px;background:transparent}
#stage-pop .sp-pick-list{display:grid;gap:5px}#stage-pop>.sp-pick-list{padding:12px 18px}#stage-pop .sp-pick,#stage-pop .sp-bagrow{display:flex;align-items:center;gap:9px;width:100%;min-height:46px;padding:7px 8px;border:1px solid var(--line);border-radius:6px;color:var(--ink);background:oklch(1 0 0);text-align:left}#stage-pop .sp-pick:hover{border-color:var(--primary);background:var(--primary-soft)}#stage-pop .sp-avatar{display:grid;place-items:center;flex-shrink:0;width:30px;height:30px;border-radius:6px;color:var(--primary);background:var(--primary-soft);font-size:11px;font-weight:600}#stage-pop .sp-pick-main{display:grid;flex:1;min-width:0}#stage-pop .sp-pick-main b{overflow:hidden;color:var(--ink);font-size:13px;font-weight:600;white-space:nowrap;text-overflow:ellipsis}#stage-pop .sp-pick-main small{overflow:hidden;color:var(--muted);font-size:11px;white-space:nowrap;text-overflow:ellipsis}#stage-pop .sp-mini{flex-shrink:0;min-height:30px;padding:3px 8px;border:1px solid var(--line);border-radius:5px;color:var(--ink);background:oklch(1 0 0);font-size:11px}#stage-pop .sp-mini.ok{color:var(--primary);background:var(--primary-soft);border-color:oklch(.81 .04 140)}#stage-pop .sp-mini:hover{background:var(--surface)}

/* Retained fallback; the active course home is owned by console.js. */
.course-board{overflow:hidden}.course-board-head{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--line)}.course-board-head h2{font-size:16px}.course-table-wrap{overflow-x:auto}.course-table{min-width:760px}.course-table th{padding:12px 20px;font-size:12px}.course-table td{padding:16px 20px}.course-name{font-size:15px;font-weight:600}.course-sub{margin-top:2px;color:var(--muted);font-size:12px}.course-time{font-size:13px;font-variant-numeric:tabular-nums;white-space:nowrap}.course-time small{display:block;margin-top:2px;color:var(--muted);font-size:11px}.course-action{text-align:right}.course-action button{min-height:38px;padding:6px 14px;font-size:13px}.course-empty{display:grid;justify-items:center;gap:8px;padding:48px 20px;color:var(--muted);text-align:center}.course-empty h2{color:var(--ink);font-size:17px}.course-empty p{max-width:38ch;font-size:13px}.course-empty button{margin-top:8px}.tc-publish-times{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));grid-column:1/-1;gap:12px}
@media(max-width:1350px){.stage-hud{grid-template-columns:minmax(0,1fr) auto;gap:12px 20px}.shud-course{grid-column:1}.shud-stats{grid-column:2}.shud-actions{grid-column:1/-1;justify-content:flex-end}}
@media(max-width:1000px){.stage-hud{padding:14px 16px}.shud-course h1{font-size:20px}.stage-room{padding-inline:14px}.stage-scroll-hint{display:block;padding:6px 16px;color:var(--muted);background:var(--surface);font-size:11px;text-align:center;border-bottom:1px solid var(--line)}.stage-unseated{padding-inline:16px}.stage-legend{padding-inline:16px;gap:10px}.plegend-hint{display:none}}
@media(max-width:760px){.stage-hud{grid-template-columns:minmax(0,1fr);gap:12px;padding:16px}.shud-course,.shud-stats,.shud-actions{grid-column:1}.shud-course h1{flex-wrap:wrap;gap:4px 9px;font-size:21px}.shud-stats{justify-content:space-between;gap:8px}.shud-stat{font-size:11px}.shud-stat b{font-size:20px}.shud-actions{justify-content:flex-start;flex-wrap:wrap;gap:7px}.stage .shud-actions button{min-height:44px;padding:8px 11px;font-size:12px}.stage-unseated{display:grid;gap:7px;padding-block:10px}.sunseated-list{max-height:73px}.stage .pchip{min-height:44px}#stage-pop{left:10px!important;right:10px;top:auto!important;bottom:10px;width:auto!important;max-height:min(78dvh,720px);border-radius:12px;transform:translateY(8px)}#stage-pop.open{transform:none}#stage-pop .sp-head{padding:16px}#stage-pop .sp-close{width:44px;height:44px;min-height:44px}#stage-pop .sp-title b{font-size:18px}#stage-pop .sp-title small{font-size:12px}#stage-pop .sp-pills{padding-inline:16px}#stage-pop .sp-group{padding:12px 16px}#stage-pop .sp-phone-line{padding:10px 16px}#stage-pop .sp-seat-line{margin-inline:16px}#stage-pop .sp-note{margin-inline:16px}#stage-pop .sp-btn{min-height:44px;font-size:13px;padding:9px 4px}#stage-pop .sp-mini{min-height:44px;font-size:13px}#stage-pop .sp-link{min-height:44px;font-size:13px}#stage-pop .sp-hint{font-size:12px}#stage-pop .sp-more{padding:8px 16px}#stage-pop .sp-bagrow{flex-wrap:wrap}#stage-pop .sp-bagrow .sp-mini{min-height:44px}.pbag-grid{grid-template-columns:repeat(6,44px);gap:2px}.stage .pbag{width:44px;height:44px;min-height:44px;font-size:13px}.tc-publish-times{grid-template-columns:1fr}}
@media(prefers-reduced-motion:reduce){.stage *,#stage-pop{animation:none!important;transition:none!important}}

/* Ordinary phone registrations are complete; only missing declarations and exceptions draw attention. */
.stage .pseat.occupied.phone-warn:not(.bad){background:var(--amber-soft);border-color:oklch(.82 .065 80)}
.stage .pseat.occupied.phone-bad{background:var(--red-soft);border-color:oklch(.81 .065 25)}

/* Both perspectives use real seat tracks. A seat must never occupy an aisle track. */
.stage .stage-room{min-width:970px}.stage .prow-seats,.stage .stage-group-head{grid-template-columns:repeat(4,minmax(72px,1fr)) 20px repeat(4,minmax(72px,1fr)) 20px repeat(2,minmax(72px,1fr))}
.stage.perspective-student .prow-seats,.stage.perspective-student .stage-group-head{grid-template-columns:repeat(2,minmax(72px,1fr)) 20px repeat(4,minmax(72px,1fr)) 20px repeat(4,minmax(72px,1fr))}
.stage.perspective-student .stage-group-head .sg-window{grid-column:1/3}.stage.perspective-student .stage-group-head .sg-middle{grid-column:4/8}.stage.perspective-student .stage-group-head .sg-door{grid-column:9/13}
.stage .stage-group-head .sg-aisle{white-space:nowrap;justify-self:center}.stage .pseat{padding-left:5px;padding-right:5px}.stage .pseat-id{white-space:nowrap;flex-shrink:0}.stage .pseat-top{left:5px;right:5px}.stage .pseat-tags{min-width:0;overflow:hidden}.stage .pseat-name{min-height:20px}.stage.perspective-student>.stage-scroll .stage-room>.stage-podium{margin:0 auto 12px}.stage.perspective-student .stage-room>.stage-wall{margin-top:12px;margin-bottom:0;padding-top:11px;padding-bottom:0;border-top:1px solid var(--line);border-bottom:0}



.stage .shud-actions .stage-public-link { display: inline-flex; align-items: center; gap: 5px; min-height: 32px; padding: 5px 10px; border: 1px solid var(--line); border-radius: 6px; background: var(--bg); color: var(--ink); font-size: 12px; text-decoration: none; white-space: nowrap; }
.stage .shud-actions .stage-public-link:hover { border-color: var(--primary); color: var(--primary); }

/* 课堂内请假/证明图片 */
.sp-docs { display: grid; gap: 6px; margin: 9px 0; padding-top: 8px; border-top: 1px solid var(--line); }
.sp-docs-head { color: var(--muted); font-size: 10px; font-weight: 600; letter-spacing: .04em; }
.sp-doc { padding: 7px; border: 1px solid var(--line); border-radius: 6px; background: var(--surface); }
.sp-doc-head { display: flex; align-items: center; justify-content: space-between; gap: 6px; margin-bottom: 4px; font-size: 11px; }
.sp-doc .evidence-preview { margin-top: 0; }
.sp-doc .evidence-preview img { max-height: 170px; }
.sp-doc .attachment { font-size: 10px; }

#stage-pop { max-height: calc(100vh - 100px); overflow-y: auto; }
.sp-doc .evidence-preview img { max-height: 110px; }

/* 课堂出勤侧栏：默认只看未签到 */
.stage-attendance-panel { position: fixed; z-index: 30; top: 250px; left: auto; right: 18px; width: 250px; max-height: calc(100vh - 280px); display: flex; flex-direction: column; border: 1px solid var(--line); border-radius: 10px; background: var(--bg); box-shadow: 0 8px 26px oklch(.2 .015 145 / .16); overflow: hidden; }
.sap-head { display: flex; align-items: center; justify-content: space-between; padding: 9px 11px; border-bottom: 1px solid var(--line); }
.sap-head b { font-size: 12px; }
.sap-head button { min-height: 24px; padding: 0 6px; border: 0; background: transparent; color: var(--muted); font-size: 16px; }
.sap-tabs { display: flex; gap: 2px; padding: 5px; background: var(--surface); border-bottom: 1px solid var(--line); }
.sap-tabs button { flex: 1; min-height: 28px; border: 0; border-radius: 4px; background: transparent; color: var(--muted); font-size: 11px; }
.sap-tabs button.active { background: var(--bg); color: var(--ink); font-weight: 600; box-shadow: 0 1px 2px rgb(0 0 0 / .06); }
.sap-tabs button b { margin-left: 2px; font-variant-numeric: tabular-nums; }
.sap-list { overflow: auto; padding: 3px 0; }
.stage-attendance-row { display: flex; align-items: center; justify-content: space-between; gap: 8px; width: 100%; min-height: 30px; padding: 4px 10px; border: 0; border-bottom: 1px solid var(--line); background: transparent; text-align: left; }
.stage-attendance-row:last-child { border-bottom: 0; }
.stage-attendance-row:hover { background: var(--primary-soft); }
.stage-attendance-row b { font-size: 12px; font-weight: 550; }
.stage-attendance-row span { color: var(--muted); font-size: 10px; white-space: nowrap; }
.stage-attendance-row.bad b { color: var(--red); }
.stage-attendance-row.warn b { color: var(--amber); }
.sap-empty { padding: 18px 10px; color: var(--muted); font-size: 11px; text-align: center; }
.sap-foot { padding: 6px 10px; border-top: 1px solid var(--line); color: var(--muted); font-size: 10px; line-height: 1.5; }
@media (max-width: 760px) { .stage-attendance-panel { top: auto; left: 10px; right: 10px; bottom: 10px; width: auto; max-height: 50vh; } }


