*{margin:0;padding:0;box-sizing:border-box}
[hidden]{display:none!important}
body{font-family:微软雅黑,Microsoft YaHei,Arial,sans-serif;background:#f0f4f8;min-height:100vh;padding:20px}
.container{max-width:1400px;margin:0 auto;background:#fff;border-radius:14px;box-shadow:0 4px 24px rgba(0,0,0,.08);overflow:hidden;padding:24px}
.header{text-align:center;padding:16px 0 10px;border-bottom:2px solid #e8e8e8;margin-bottom:18px}
.header h1{font-size:26px;color:#2e7d32;margin-bottom:6px}
.header p{font-size:13px;color:#888}
.tabs{display:flex;border-bottom:2px solid #e0e0e0;margin-bottom:16px;flex-wrap:wrap}
.tab{padding:10px 20px;cursor:pointer;font-size:14px;font-weight:600;color:#888;border-bottom:3px solid transparent;margin-bottom:-2px;transition:all .2s;border-radius:6px 6px 0 0}
.tab:hover{color:#333;background:#f5f5f5}
.tab.active{color:#2e7d32;border-bottom-color:#2e7d32;background:#e8f5e9}
.tab-content{display:none}
.tab-content.active{display:block}
.info-bar{display:flex;gap:16px;margin-bottom:14px;flex-wrap:wrap}
.info-item{display:flex;align-items:center;gap:6px;font-size:13px}
.info-item label{font-weight:600;color:#555;white-space:nowrap}
.info-item input{border:1px solid #ccc;border-radius:6px;padding:5px 10px;font-size:13px;font-family:inherit;width:160px}
.batch-score-bar{display:none;flex-wrap:wrap;align-items:center;gap:10px;padding:10px 14px;background:#fff8e1;border:1.5px solid #ffd54f;border-radius:8px;margin-bottom:12px;font-size:13px}
.batch-score-bar.active{display:flex}
.batch-score-bar label{font-weight:700;color:#f57f17}
.batch-score-bar select{padding:5px 10px;border:1px solid #ccc;border-radius:6px;font-size:13px;font-family:inherit}
.batch-chip{cursor:pointer;padding:4px 12px;border:2px solid #ddd;border-radius:20px;font-size:13px;transition:all .15s;user-select:none;background:#fff}
.batch-chip:hover{border-color:#ffd54f}
.batch-chip.selected{border-color:#f57f17;background:#fff3e0;color:#e65100;font-weight:700}
.batch-apply-btn{padding:6px 16px;background:#f57f17;color:#fff;border:none;border-radius:6px;font-size:13px;font-weight:700;cursor:pointer;font-family:inherit;transition:background .15s}
.batch-apply-btn:hover{background:#e65100}
.batch-reset-btn{padding:6px 12px;background:#eee;color:#666;border:1px solid #ddd;border-radius:6px;font-size:13px;cursor:pointer;font-family:inherit}
.batch-tip{font-size:11.5px;color:#999;margin-left:auto}
.import-bar{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin-bottom:12px;font-size:13px;padding:8px 14px;border-radius:8px}
.info-table{overflow-x:auto}
table{width:100%;border-collapse:collapse;font-size:13px;min-width:700px}
th{background:#2e7d32;color:#fff;padding:9px 8px;text-align:center;font-weight:700;white-space:nowrap}
td{padding:4px 6px;text-align:center;border-bottom:1px solid #e8e8e8}
tbody tr:hover{background:#f8f9fa}
input.input-cell{width:100%;min-width:70px;border:1px solid transparent;border-radius:5px;padding:5px 7px;font-size:13px;font-family:inherit;background:transparent;transition:all .15s;text-align:center}
input.input-cell:hover{border-color:#bdbdbd}
input.input-cell:focus{outline:none;border-color:#2e7d32;background:#f1f8e9}
select.star-select{width:100%;min-width:80px;border:1px solid #e0e0e0;border-radius:5px;padding:4px 6px;font-size:13px;font-family:inherit;background:#fff;cursor:pointer;text-align:center}
select.star-select:hover{border-color:#2e7d32}
.btn-add{padding:7px 16px;background:#2e7d32;color:#fff;border:none;border-radius:8px;font-size:13px;font-weight:700;cursor:pointer;font-family:inherit;transition:background .15s;margin-bottom:10px}
.btn-add:hover{background:#1b5e20}
.btn-sm{padding:4px 10px;border:1px solid #e0e0e0;background:#fff;color:#555;border-radius:5px;font-size:12px;cursor:pointer;font-family:inherit;transition:all .15s}
.btn-sm:hover{background:#f5f5f5;color:#333}
.btn-del{padding:4px 8px;border:1px solid #ffcdd2;background:#ffebee;color:#c62828;border-radius:5px;font-size:12px;cursor:pointer;font-family:inherit;transition:all .15s}
.btn-del:hover{background:#c62828;color:#fff}
.stats-bar{display:flex;flex-wrap:wrap;gap:10px;margin:10px 0;font-size:13px;color:#555}
.stat-item{padding:4px 12px;background:#e8f5e9;border-radius:20px;border:1px solid #a5d6a7}
.stat-item span{font-weight:700;color:#2e7d32}
.btn-row{display:flex;gap:10px;flex-wrap:wrap;margin:12px 0 4px}
.btn-action{padding:8px 16px;border:none;border-radius:8px;font-size:13px;font-weight:700;cursor:pointer;font-family:inherit;transition:all .15s}
.btn-action:disabled{opacity:.55;cursor:not-allowed}
.btn-export{background:#1565c0;color:#fff}
.btn-export:hover{background:#0d47a1}
.btn-pdf{background:#c62828;color:#fff}
.btn-pdf:hover{background:#8e0000}
.btn-summary{background:#6a1b9a;color:#fff}
.btn-summary:hover{background:#4a148c}
.btn-ai{background:#e65100;color:#fff}
.btn-ai:hover{background:#bf360c}
.btn-import{padding:7px 16px;background:#00695c;color:#fff;border:none;border-radius:8px;font-size:13px;font-weight:700;cursor:pointer;font-family:inherit;margin-bottom:10px}
.btn-import:hover{background:#004d40}
.modal-overlay{display:none;position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.45);z-index:9998;justify-content:center;align-items:center}
.modal-overlay.show{display:flex}
.modal-box{background:#fff;border-radius:12px;padding:24px;max-width:700px;width:92%;max-height:88vh;overflow-y:auto;box-shadow:0 8px 32px rgba(0,0,0,.18)}
.modal-box h3{font-size:18px;color:#2e7d32;margin-bottom:10px;padding-bottom:10px;border-bottom:2px solid #e8f5e9}
.modal-box p{font-size:13px;color:#555;margin-bottom:10px}
.modal-box pre{background:#f5f5f5;padding:12px;border-radius:8px;font-size:12.5px;line-height:1.6;margin-bottom:10px;overflow-x:auto}
.modal-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:14px;flex-wrap:wrap}
.btn-confirm{padding:8px 20px;background:#2e7d32;color:#fff;border:none;border-radius:8px;font-size:13.5px;font-weight:700;cursor:pointer;font-family:inherit;transition:background .15s}
.btn-confirm:hover{background:#1b5e20}
.btn-confirm:disabled{background:#bdbdbd;cursor:not-allowed}
.btn-close{padding:8px 20px;background:#eee;color:#555;border:1px solid #ddd;border-radius:8px;font-size:13.5px;cursor:pointer;font-family:inherit;transition:all .15s}
.btn-close:hover{background:#e0e0e0}
.name-preview{max-height:200px;overflow-y:auto;border:1px solid #e0e0e0;border-radius:8px;padding:10px;background:#fafafa;font-size:13px;line-height:1.8;margin-top:8px}
.name-tag{display:inline-block;padding:2px 10px;background:#e8f5e9;color:#2e7d32;border-radius:12px;margin:3px;font-size:12.5px;border:1px solid #a5d6a7}
.review-block{border:1px solid #e0e0e0;border-radius:10px;padding:14px;margin-bottom:12px;background:#fafafa;position:relative}
.review-block .student-name{font-size:14px;font-weight:700;color:#2e7d32;margin-bottom:6px}
.review-block .review-text{font-size:13.5px;color:#333;line-height:1.9;text-align:left;outline:none;border-radius:6px;padding:2px 4px}
.review-block .review-text:focus{background:#fff;box-shadow:0 0 0 2px #a5d6a7}
.review-block .copy-one{cursor:pointer;position:absolute;top:12px;right:12px;padding:3px 10px;background:#e3f2fd;color:#1565c0;border:1px solid #90caf9;border-radius:5px;font-size:12px}
.review-block .copy-one:hover{background:#1565c0;color:#fff}
.review-actions{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px;flex-wrap:wrap;gap:8px}
.review-actions label{font-size:13px;color:#888}
.copy-all-btn,.download-btn{padding:7px 16px;border:none;border-radius:8px;font-size:13px;font-weight:700;cursor:pointer;font-family:inherit;transition:all .15s}
.copy-all-btn{background:#1565c0;color:#fff}
.copy-all-btn:hover{background:#0d47a1}
.download-btn{background:#2e7d32;color:#fff}
.download-btn:hover{background:#1b5e20}
.overlay-box{background:#fff;border-radius:12px;padding:24px;max-width:1100px;width:95%;max-height:90vh;overflow-y:auto;box-shadow:0 8px 32px rgba(0,0,0,.18)}
.overlay-box h3{font-size:18px;color:#2e7d32;margin-bottom:16px;padding-bottom:10px;border-bottom:2px solid #e8f5e9;text-align:center}
.auto-save-bar{display:flex;justify-content:space-between;align-items:center;padding:10px 18px;background:linear-gradient(135deg,#e8f5e9,#fff8e1);border:1.5px solid #a5d6a7;border-radius:10px;margin-bottom:16px;flex-wrap:wrap;gap:10px}
.auto-save-status{display:flex;align-items:center;gap:8px;font-size:13.5px;color:#1b5e20;font-weight:600;flex-wrap:wrap}
.save-dot{width:10px;height:10px;border-radius:50%;background:#4caf50;box-shadow:0 0 6px #4caf50;animation:pulse 1.8s infinite}
.save-dot.offline{background:#ef6c00;box-shadow:0 0 6px #ef6c00}
@keyframes pulse{0%,100%{opacity:1}50%{opacity:.45}}
.save-info{font-size:12px;color:#666;font-weight:400;margin-left:6px}
.auto-save-actions{display:flex;gap:8px;flex-wrap:wrap}
.save-btn{padding:6px 14px;border:1px solid;border-radius:6px;font-size:12.5px;cursor:pointer;font-family:inherit;transition:all .15s}
.export-btn{background:#e3f2fd;color:#1565c0;border-color:#90caf9}
.export-btn:hover{background:#1565c0;color:#fff}
.import-btn{background:#f3e5f5;color:#6a1b9a;border-color:#ce93d8}
.import-btn:hover{background:#6a1b9a;color:#fff}
.toast{position:fixed;top:20px;right:20px;padding:12px 20px;background:#323232;color:#fff;border-radius:8px;font-size:13.5px;z-index:10000;opacity:0;transform:translateY(-20px);transition:all .3s;box-shadow:0 4px 12px rgba(0,0,0,.2);max-width:420px}
.toast.show{opacity:1;transform:translateY(0)}
.toast.success{background:#2e7d32}
.toast.error{background:#c62828}
@media(max-width:768px){body{padding:8px}.container{padding:14px}.info-bar{flex-direction:column}.info-item input{width:100%}.modal-box{padding:16px}}

/* ===== 课堂记录 ===== */
.record-chip{font-size:12.5px;color:#555;background:#fff;border:1px solid #c8e6c9;border-radius:14px;padding:3px 12px}
.record-chip b{color:#2e7d32}
.records-toolbar{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:12px;align-items:center}
.records-toolbar select{padding:5px 10px;border:1px solid #ccc;border-radius:6px;font-family:inherit;font-size:13px}
.record-row{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:10px 12px;border:1px solid #e0e0e0;border-radius:8px;margin-bottom:8px;flex-wrap:wrap}
.record-row.current{border-color:#66bb6a;background:#f1f8e9}
.record-row .title{font-size:13.5px;font-weight:700;color:#333}
.record-row .meta{font-size:12px;color:#777;margin-top:2px}
.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.form-grid label,.settings-form label{display:flex;flex-direction:column;gap:4px;font-size:13px;font-weight:600;color:#555}
.form-grid input,.settings-form input{border:1px solid #ccc;border-radius:6px;padding:7px 10px;font-size:13px;font-family:inherit;font-weight:400}
.form-grid .wide{grid-column:1/-1}
.form-check{flex-direction:row!important;align-items:center;font-weight:400!important}
.settings-form{display:flex;flex-direction:column;gap:12px}
.hint{font-size:11.5px;color:#888;font-weight:400}
.presets{display:flex;gap:6px;flex-wrap:wrap}
.preset{font-size:12px;padding:2px 10px;border-radius:12px;border:1px solid #c5cae9;background:#e8eaf6;color:#303f9f;cursor:pointer}
.preset:hover{background:#303f9f;color:#fff}
.msg-ok{color:#2e7d32}
.msg-err{color:#c62828}

/* ===== 视频分析 ===== */
.video-upload-bar{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin-bottom:14px;padding:12px 14px;background:#fce4ec;border:1.5px solid #f48fb1;border-radius:10px}
.video-upload-bar input[type=text]{border:1px solid #ccc;border-radius:6px;padding:7px 10px;font-size:13px;font-family:inherit;width:170px}
.video-upload-bar .hint{width:100%}
.btn-pick{padding:8px 14px;border-radius:8px;border:1.5px dashed #ad1457;background:#fff;color:#ad1457;font-size:13px;font-weight:700;cursor:pointer;font-family:inherit}
.btn-pick:hover{background:#ad1457;color:#fff}
.picked-file{font-size:12.5px;color:#555;max-width:260px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ai-warning{padding:8px 14px;margin-bottom:12px;border-radius:8px;background:#fff3e0;border:1px solid #ffcc80;color:#e65100;font-size:13px}
.ai-warning a{color:#bf360c;font-weight:700;cursor:pointer;text-decoration:underline}
.status-badge{display:inline-block;padding:2px 10px;border-radius:12px;font-size:12px;font-weight:700;white-space:nowrap}
.status-badge.uploading,.status-badge.queued{background:#eceff1;color:#546e7a}
.status-badge.processing{background:#fff3e0;color:#e65100}
.status-badge.done{background:#e8f5e9;color:#2e7d32}
.status-badge.failed{background:#ffebee;color:#c62828}
.progress-track{width:100%;min-width:120px;height:8px;background:#eee;border-radius:6px;overflow:hidden;margin-top:5px}
.progress-fill{height:100%;background:linear-gradient(90deg,#ffb74d,#e65100);border-radius:6px;transition:width .6s ease}
.stage-text{font-size:11.5px;color:#888;margin-top:3px}
.err-text{font-size:11.5px;color:#c62828;margin-top:3px;max-width:240px;display:inline-block;text-align:left}
.filmstrip{display:flex;gap:8px;overflow-x:auto;padding-bottom:6px;margin:10px 0}
.film-frame{flex:0 0 150px;border:2px solid #e0e0e0;border-radius:8px;overflow:hidden;background:#fafafa;font-size:11.5px}
.film-frame img{width:100%;display:block;aspect-ratio:16/9;object-fit:cover;background:#ddd;cursor:zoom-in}
.film-frame .t{padding:3px 6px;color:#777}
.film-frame.key{border-color:#ff9800}
.film-frame .note{padding:0 6px 6px;color:#e65100;line-height:1.5}
.report-head{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;flex-wrap:wrap}
.report-head .who{font-size:16px;font-weight:700;color:#333}
.report-head .sub{font-size:12.5px;color:#888;margin-top:3px}
.level-pill{display:inline-block;padding:3px 12px;border-radius:14px;font-size:13px;font-weight:700}
.level-优秀{background:#e8f5e9;color:#2e7d32}
.level-良好{background:#e3f2fd;color:#1565c0}
.level-一般{background:#fff8e1;color:#f57f17}
.level-待提升{background:#ffebee;color:#c62828}
.skill-chips{display:flex;gap:6px;flex-wrap:wrap;margin:8px 0}
.skill-chip{font-size:12px;padding:3px 10px;border-radius:12px;background:#f5f5f5;border:1px solid #e0e0e0;color:#555}
.skill-chip b{color:#f57f17;letter-spacing:1px}
.report-sec{margin-top:12px;text-align:left}
.report-sec h4{font-size:13.5px;color:#2e7d32;margin-bottom:4px}
.report-sec p,.report-sec li{font-size:13px;line-height:1.8;color:#333}
.report-sec ul{padding-left:20px}
.report-video{width:100%;max-height:360px;border-radius:8px;background:#000;margin-top:8px}
.img-zoom{position:fixed;inset:0;background:rgba(0,0,0,.8);z-index:10001;display:flex;align-items:center;justify-content:center;cursor:zoom-out}
.img-zoom img{max-width:92vw;max-height:88vh;border-radius:6px}

/* ===== AI 生成中 / 登录 ===== */
.gen-status{font-size:13px;color:#e65100;margin-bottom:10px}
.spinner{display:inline-block;width:14px;height:14px;border:2px solid #ffcc80;border-top-color:#e65100;border-radius:50%;animation:spin .8s linear infinite;vertical-align:-2px;margin-right:6px}
@keyframes spin{to{transform:rotate(360deg)}}
.summary-text{white-space:pre-wrap;font-size:13.5px;line-height:1.9;color:#333;background:#fafafa;border:1px solid #e0e0e0;border-radius:10px;padding:14px;outline:none;min-height:120px}
.summary-text:focus{background:#fff;box-shadow:0 0 0 2px #a5d6a7}
.source-tag{display:inline-block;font-size:11px;padding:1px 8px;border-radius:10px;margin-left:6px;vertical-align:1px}
.source-ai{background:#ede7f6;color:#5e35b1}
.source-tpl{background:#eceff1;color:#607d8b}
.login-box{max-width:360px;text-align:center}
.login-box input{width:100%;border:1px solid #ccc;border-radius:8px;padding:10px;font-size:14px;margin:10px 0;font-family:inherit}
