/* Phase 5 LMS task surfaces; loaded after the preserved visual CMS shell. */
.lms-action-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px;margin-bottom:20px}.lms-action-card{min-height:142px;padding:20px;text-align:left;border:1px solid var(--line);border-radius:14px;background:#fff;color:var(--text);display:flex;flex-direction:column;gap:8px;box-shadow:var(--shadow)}.lms-action-card span{width:42px;height:42px;display:grid;place-items:center;border-radius:12px;background:#eaf1ff;color:var(--blue)}.lms-action-card svg{width:20px}.lms-action-card strong{font-size:16px}.lms-action-card small,.helper{color:var(--text-secondary);font-size:12px}.lms-next-panel{margin-top:18px}.lms-toolbar{display:flex;justify-content:space-between;align-items:end;gap:16px;margin-bottom:18px}.search-field{display:grid;gap:7px;font-weight:800;font-size:13px;max-width:420px;width:100%}.search-field input{height:48px;border:1px solid var(--line);border-radius:12px;padding:0 14px;background:#fff;font-size:16px}.student-cards{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.student-card{min-height:92px;display:flex;align-items:center;gap:13px;padding:16px;border:1px solid var(--line);border-radius:14px;background:#fff;box-shadow:var(--shadow)}.student-card .avatar{width:44px;height:44px}.student-card strong,.student-card small{display:block}.student-card small{color:var(--text-secondary);font-size:12px}.student-progress{margin-left:auto;color:var(--blue);font-weight:800}.wizard-steps{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:16px}.wizard-steps span{padding:10px 14px;border-radius:99px;background:#e9eef6;color:var(--text-secondary);font-size:12px;font-weight:800}.wizard-steps .active{background:#dce9ff;color:var(--blue)}.skill-picker{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-bottom:16px}.skill-choice{min-height:130px;padding:16px;text-align:left;display:flex;flex-direction:column;gap:8px;border:1px solid var(--line);border-radius:14px;background:#fff;color:var(--text)}.skill-choice svg{width:24px;color:var(--blue)}.skill-choice small{font-size:12px;color:var(--text-secondary)}.skill-choice.active{border:2px solid var(--blue);background:#f3f7ff}.wizard-note,.wizard-review{display:flex;justify-content:space-between;gap:12px;padding:14px;border-radius:12px;background:#f3f7ff;color:var(--text-secondary);font-size:12px}.wizard-note strong,.wizard-review strong{color:var(--text)}.wizard-review{display:block}.wizard-review p{margin:5px 0 0}.field.hidden{display:none}.row-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:8px}.submission-queue{display:grid;gap:14px}.submission-card{padding:20px;border:1px solid var(--line);border-radius:14px;background:#fff;box-shadow:var(--shadow)}.submission-head{display:flex;justify-content:space-between;gap:14px;margin-bottom:14px}.submission-head span{color:var(--text-secondary);font-size:12px}.answer-box{padding:14px;border-radius:10px;background:#f5f7fb;margin-bottom:14px}.answer-box small{color:var(--text-muted);font-weight:800}.answer-box p{margin:5px 0 0;white-space:pre-wrap}.lms-filter-row{display:flex;justify-content:flex-end;margin-bottom:14px}.lms-filter-row label{display:grid;gap:6px;font-weight:800;font-size:12px}.lms-filter-row select,.assignment-wizard output{height:44px;padding:0 12px;border:1px solid var(--line);border-radius:10px;background:#fff}.ai-state{display:grid;gap:4px;padding:14px 16px;border-radius:12px;margin-bottom:16px}.ai-state.demo{background:#fff8e1;color:#805b00}.ai-state.real{background:#e9f8ef;color:#16794a}.ai-state span{font-size:12px}.resource-card{display:flex;gap:10px;align-items:center}
@media(max-width:768px){.field input,.field select,.field textarea,input,select,textarea{font-size:16px}.lms-action-grid,.student-cards,.skill-picker{grid-template-columns:1fr}.lms-toolbar{align-items:stretch;flex-direction:column}.lms-toolbar .btn{width:100%}.wizard-steps{display:grid;grid-template-columns:1fr}.wizard-steps span{min-height:44px}.wizard-note{display:grid}.submission-head{display:grid}.row-actions .btn{min-height:44px}.lms-filter-row{justify-content:stretch}.lms-filter-row label,.lms-filter-row select{width:100%}.lms-next-panel{margin-bottom:12px}.student-card{min-height:100px}.assignment-wizard .btn{min-height:48px}}
@media(max-width:430px){.lms-action-card{min-height:120px}.panel{padding:16px}.skill-choice{min-height:112px}.wizard-panel .field input,.wizard-panel .field select,.wizard-panel .field textarea{font-size:16px}.submission-card{padding:14px}}
@media(prefers-reduced-motion:reduce){.page{animation:none!important}}
/* Phase 7 student responsive closure */
.student-shell .content,.dashboard-mode .content{min-width:0}.test-card{max-width:860px;margin-inline:auto}.reading-passage,.transcript{max-height:none;overflow:visible;white-space:pre-wrap;overflow-wrap:anywhere}.test-card audio{display:block;width:min(100%,520px);margin:16px 0}.option,.record-btn,.mini-assignment-btn,.dashboard-orange-btn,.btn{min-height:44px}.writing-area{min-height:150px;resize:vertical}.drawer-open{overflow:hidden}.feedback-card{overflow-wrap:anywhere}
@media(max-width:768px){.page{min-width:0}.page-heading h1,.dashboard-greeting h1{font-size:clamp(28px,7vw,40px)}.page-heading p,.dashboard-greeting p{max-width:62ch}.next-lesson-card{order:-1}.dashboard-greeting{margin-bottom:14px}.skills-section-heading h2{font-size:20px}.assignment-mini-card{min-width:0}.assignment-mini-card h3,.mini-assignment-main p{overflow-wrap:anywhere}.test-card{padding:18px}.test-card .btn-primary{width:100%;position:sticky;bottom:max(10px,env(safe-area-inset-bottom));z-index:3;box-shadow:0 8px 20px rgba(16,33,61,.18)}.reading-passage{max-height:none}.skill-row{grid-template-columns:minmax(110px,.8fr) minmax(0,1fr) auto;gap:10px}.resource-grid,.assignment-mini-grid{min-width:0}.resource-grid a,.assignment-mini-card a{overflow-wrap:anywhere}}
@media(max-width:430px){body{font-size:15px}.content{padding:18px 14px 28px}.topbar{min-height:64px}.test-card{padding:15px}.test-card h2{font-size:24px}.field input,.field select,.field textarea,input,select,textarea{font-size:16px!important}.option{width:100%;text-align:left;justify-content:flex-start}.record-btn{width:52px;height:52px}.dashboard-orange-btn{width:100%;justify-content:center}.next-lesson-card{min-height:0!important;height:auto!important;padding:20px!important}.next-lesson-copy{padding:0!important}.panel{overflow:hidden}.skill-row{grid-template-columns:1fr;gap:7px}.skill-row .progress-track{width:100%}.toast{bottom:max(14px,env(safe-area-inset-bottom));left:12px;right:12px}.sidebar{width:min(86vw,320px)}}
@media(min-width:769px){.test-card .btn-primary{min-width:150px}}

.wizard-actions{display:flex;justify-content:flex-end;gap:12px;margin-top:20px}.wizard-review-list{display:grid;gap:12px}.wizard-review-list div{padding:12px 14px;border:1px solid var(--line);border-radius:12px;background:#fafaf8}.wizard-review-list small,.wizard-review-list strong{display:block;text-transform:capitalize}.wizard-review-list small{color:var(--muted);margin-bottom:4px}.hidden{display:none!important}

.wizard-actions{display:flex;justify-content:flex-end;gap:12px;margin-top:20px}.wizard-review-list{display:grid;gap:12px}.wizard-review-list div{padding:12px 14px;border:1px solid var(--line);border-radius:12px;background:#fafaf8}.wizard-review-list small,.wizard-review-list strong{display:block}.wizard-review-list small{color:var(--muted);margin-bottom:4px}.hidden{display:none!important}.btn:disabled{opacity:.45;cursor:not-allowed;transform:none;box-shadow:none}

/* 2026-08-15 low-tech teacher workflows (plan deepseek) */
.skills-section-heading h2 { display: flex; align-items: center; gap: 9px; }
.skills-section-heading h2 svg { width: 22px; height: 22px; flex: 0 0 auto; color: var(--blue); }
.skills-section-heading h2 svg { padding: 5px; border-radius: 9px; background: #eaf1ff; box-sizing: content-box; }
.skills-section-heading { margin-bottom: 12px; }
.assignment-mini-grid > .feedback-card { padding: 14px 18px; border-radius: 12px; display: grid; gap: 3px; }
.assignment-mini-grid > .feedback-card strong { font-size: 13px; }
.assignment-mini-grid > .feedback-card p { margin: 0; font-size: 12px; }
.lms-action-card b{margin-top:auto;color:var(--blue);display:flex;align-items:center;gap:6px;font-size:12px;font-weight:800}
.success-banner{margin-bottom:16px;padding:14px 16px;border:1px solid #bfe3cd;border-radius:12px;background:#eaf8ef;color:#125a37;display:grid;gap:4px}
.success-banner strong{color:#125a37;font-size:14px}.success-banner p{margin:0;color:#2c6b47;font-size:13px}
.question-information{margin:-2px 0 10px;padding:9px 11px;border-left:3px solid var(--blue);border-radius:0 8px 8px 0;background:#f3f7ff;color:var(--text-secondary);font-size:12px;line-height:1.55}
.activity-information,.assign-content-information{margin:10px 0;padding:10px 12px;border-left:3px solid var(--blue);border-radius:0 8px 8px 0;background:#f3f7ff;color:var(--text-secondary);font-size:12px;line-height:1.55}.activity-information{margin-top:0}.assign-content-information small{display:block;margin-bottom:3px;color:var(--blue);font-size:10px;font-weight:800;letter-spacing:.04em;text-transform:uppercase}.assign-content-information p{margin:0;white-space:pre-wrap}
.assign-confirm-card{display:grid;gap:8px;margin:18px 0;padding:24px;border:1px solid #cdddf7;border-radius:14px;background:linear-gradient(135deg,#f4f8ff,#fff);text-align:center}.assign-confirm-card h2{margin:0;color:var(--text);font-size:22px}.assign-confirm-card p{margin:0;color:var(--text-secondary);line-height:1.6}.assign-confirm-card small{color:var(--text-muted);font-size:12px}
.assignment-summary{display:grid;gap:10px}
.assignment-summary-row{display:grid;grid-template-columns:minmax(0,1fr) auto auto;gap:12px;align-items:center;padding:12px 14px;border:1px solid var(--line);border-radius:12px;background:#fff}
.assignment-summary-row .as-main{min-width:0;display:grid;gap:4px}
.assignment-summary-row .as-main strong{font-size:14px;overflow-wrap:anywhere}
.assignment-summary-row .as-main small{color:var(--text-secondary);font-size:12px;overflow-wrap:anywhere}
.as-cols{display:flex;gap:14px}
.as-cols span{display:grid;gap:2px;color:var(--text-muted);font-size:11px;text-align:center}
.as-cols b{color:var(--text);font-size:15px}
.pill{display:inline-flex;padding:3px 8px;border-radius:99px;font-size:11px;font-weight:800}
.pill.overdue{background:#fdeaea;color:#b42318}
.pill.ontime{background:#eaf8ef;color:#16794a}
.focus-meta{display:flex;gap:18px;flex-wrap:wrap;margin-bottom:12px;color:var(--text-secondary);font-size:13px}
.focus-meta b{color:var(--text)}
.form-error{color:#b42318;font-size:13px;font-weight:700;margin:4px 0 0}
@media(max-width:768px){.assignment-summary-row{grid-template-columns:1fr;gap:10px}.as-cols{justify-content:flex-start}.assignment-summary-row .btn{width:100%}}
@media(max-width:430px){.focus-meta{gap:10px;font-size:12px}}
/* Phase 5 student exam player */
.student-exam-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}.student-exam-card{display:grid;gap:16px}.student-exam-card h2{margin:8px 0 4px}.student-exam-card dl{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin:0}.student-exam-card dl div{padding:10px;border-radius:10px;background:#f7f9fc}.student-exam-card dt{font-size:11px;color:var(--text-muted);font-weight:800}.student-exam-card dd{margin:3px 0 0;font-size:13px}.student-exam-score{font-size:20px;color:var(--blue)}.exam-player{max-width:1280px;margin:auto}.exam-player-head{position:sticky;top:0;z-index:8;display:flex;justify-content:space-between;gap:16px;align-items:center;padding:14px 18px;margin-bottom:16px;border:1px solid var(--line);border-radius:14px;background:rgba(255,255,255,.96);box-shadow:var(--shadow)}.exam-player-head h1{font-size:22px;margin:3px 0}.exam-player-status{display:flex;align-items:center;gap:12px}.exam-player-status span{font-size:12px;color:var(--text-muted)}#exam-countdown{font-variant-numeric:tabular-nums;font-size:24px;color:#b42318}.exam-player-grid{display:grid;grid-template-columns:220px minmax(0,1fr);gap:18px;align-items:start}.exam-palette{position:sticky;top:100px;padding:16px;border:1px solid var(--line);border-radius:14px;background:#fff}.exam-palette>div{display:grid;grid-template-columns:repeat(4,44px);gap:8px;margin:12px 0}.exam-palette button{min-width:44px;height:44px;border:1px solid var(--line);border-radius:10px;background:#fff}.exam-palette button.answered{background:#eaf8ef;border-color:#78bc92}.exam-palette button.marked{box-shadow:inset 0 -4px #f3c969}.exam-palette button.current{outline:3px solid #87b7df}.exam-palette-legend{margin-top:10px;color:var(--text-muted)}.exam-palette-legend small{font-size:11px;line-height:1.7;color:var(--text-muted)}.exam-palette-legend .swatch{display:inline-block;width:14px;height:14px;border-radius:4px;vertical-align:-2px;margin:0 4px 0 6px;border:1px solid var(--line)}.exam-palette-legend .swatch.answered{background:#eaf8ef;border-color:#78bc92}.exam-palette-legend .swatch.marked{box-shadow:inset 0 -4px #f3c969}.exam-palette-legend .swatch.current{outline:3px solid #87b7df}.exam-section-context{margin-bottom:14px}.exam-section-context audio{width:100%;margin-top:10px}.exam-passage{max-height:none;overflow:visible;white-space:pre-wrap;padding:18px;border:1px solid var(--line);border-radius:14px;background:#fff;line-height:1.75}.exam-prompt{font-size:17px;line-height:1.6}.exam-options{display:grid;gap:10px}.exam-option{display:flex;align-items:center;gap:12px;min-height:52px;padding:10px 14px;border:1px solid var(--line);border-radius:12px;cursor:pointer}.exam-option>span{display:grid;place-items:center;width:32px;height:32px;border-radius:50%;background:#eef3f9;font-weight:800}.exam-option input{width:20px;height:20px;accent-color:#25905c}.exam-gap-input,.exam-writing-input{width:100%;font-size:16px;border:1px solid var(--line);border-radius:12px;padding:14px}.exam-gap-input{min-height:48px}.exam-writing-input{min-height:240px;resize:vertical}.exam-mark{display:flex;align-items:center;gap:9px;min-height:44px;margin-top:16px;font-weight:700}.exam-mark input{width:20px;height:20px;accent-color:#b7791f}.exam-question-nav{display:flex;justify-content:space-between;gap:12px;margin-top:16px}.exam-end-actions{display:none;margin-top:16px}.exam-end-actions .btn{width:100%;min-height:44px}.exam-result-score{display:grid;gap:3px;margin:18px 0}.exam-result-score strong{font-size:40px}.exam-result-answers{display:grid;gap:10px}.exam-result-answer{padding:14px;border:1px solid var(--line);border-left:5px solid #d9544d;border-radius:12px}.exam-result-answer.correct{border-left-color:#25905c}.exam-result-answer small{display:block;margin-top:5px}
@media(max-width:768px){.student-exam-grid{grid-template-columns:1fr}.exam-player-head{position:relative;align-items:stretch;flex-direction:column}.exam-player-status{flex-wrap:wrap}.exam-player-status .btn{margin-left:auto}.exam-player-grid{grid-template-columns:1fr}.exam-palette{position:relative;top:auto;overflow-x:auto}.exam-palette>div{display:flex;width:max-content}.exam-question-nav .btn{flex:1}}
@media(max-width:430px){.student-exam-card dl{grid-template-columns:1fr}.exam-player-head{padding:12px}.exam-player-status{display:grid;grid-template-columns:1fr auto}.exam-player-status .btn{grid-column:1/-1;width:100%;margin:0}.exam-palette{padding:12px}.exam-question .panel{overflow:visible}.exam-option{font-size:14px}.exam-question-nav{position:relative;display:grid;grid-template-columns:1fr 1fr}.exam-writing-input{min-height:160px}}
@media(max-height:420px){.exam-player-head,.exam-palette,.exam-question-nav,.student-exam-actions,.student-exam-submit{position:static!important;inset:auto!important}.exam-header-submit{display:none!important}.exam-end-actions{display:block}.exam-player{padding-bottom:24px}.exam-player-grid{padding-bottom:24px}.exam-passage{max-height:none}.exam-writing-input{min-height:120px}.exam-question-nav{margin-top:16px;margin-bottom:8px}.exam-end-actions{margin-bottom:24px}}
@media(min-height:421px) and (max-width:768px){.exam-player{padding-bottom:96px}}
/* 2026-08-15 assignment review + Giao lại polish (findings P1 low-tech UX) */
.assignment-review-detail{display:grid;gap:8px;margin-top:10px}
.assignment-review-detail>div{display:grid;grid-template-columns:minmax(96px,130px) 1fr;gap:10px;padding:10px 12px;border:1px solid var(--line);border-radius:10px;background:#fff;align-items:baseline}
.assignment-review-detail span{color:var(--text-muted);font-size:12px;font-weight:800}
.assignment-review-detail strong{font-size:13px;overflow-wrap:anywhere}
.assign-again-note{display:flex;gap:11px;align-items:flex-start;margin-bottom:16px;padding:13px 14px;border:1px solid #cdddf7;border-radius:12px;background:#f0f6ff;color:var(--text-secondary);font-size:12px;line-height:1.6}
.assign-again-note svg{width:19px;flex:0 0 auto;color:var(--blue);margin-top:1px}
.assign-again-note strong{display:block;color:var(--text);font-size:13px;margin-bottom:2px}
.as-cols{display:flex;gap:8px;flex-wrap:wrap}
.as-stat{display:grid;gap:2px;min-width:64px;padding:7px 10px;border:1px solid var(--line);border-radius:10px;background:#f7f9fc;text-align:center}
.as-stat b{color:var(--text);font-size:16px;line-height:1.15}
.as-stat small{color:var(--text-muted);font-size:11px;font-weight:800;white-space:nowrap}
@media(max-width:430px){.assignment-review-detail>div{grid-template-columns:1fr;gap:2px}.as-stat{min-width:56px;padding:6px 8px}}

/* ===== P0: journey vs assignments + four skill renderers ===== */
.skill-filter-chips{display:flex;gap:8px;flex-wrap:wrap;margin:2px 0 4px}
.skill-filter-chips .chip{display:inline-flex;align-items:center;gap:6px;padding:9px 14px;min-height:44px;border:1px solid var(--line);border-radius:999px;background:#fff;color:var(--text);font-weight:700;font-size:13px;cursor:pointer}
.skill-filter-chips .chip svg{width:15px;height:15px}
.skill-filter-chips .chip.active{background:var(--navy,#081b3a);border-color:var(--navy,#081b3a);color:#fff}
.journey-block{margin:10px 0 22px}
.journey-block-head{display:flex;align-items:baseline;gap:10px;margin-bottom:8px}
.journey-block-head strong{color:var(--text);font-size:14px}
.journey-block-head span{color:var(--text-muted);font-size:12px;font-weight:700}
.journey-tree .journey-course{border:1px solid var(--line);border-radius:14px;padding:14px 16px;margin-bottom:12px;background:#fafbfd}
.journey-tree .journey-course h4{color:var(--navy,#081b3a);font-size:15px;margin:0 0 10px}
.journey-unit{margin:0 0 8px;padding-left:10px;border-left:3px solid var(--line)}
.journey-unit strong{font-size:13px;color:var(--text)}
.journey-lesson{margin:6px 0}
.journey-lesson>span{font-size:12px;color:var(--text-muted);font-weight:700}
.journey-lesson-acts{display:flex;flex-wrap:wrap;gap:6px;margin-top:5px}
.journey-act{display:inline-flex;align-items:center;gap:6px;padding:8px 11px;min-height:40px;border:1px solid var(--line);border-radius:10px;background:#fff;color:var(--text);font-size:12px;font-weight:700;cursor:pointer}
.journey-act svg{width:14px;height:14px;color:var(--navy,#081b3a)}
.journey-act:hover{border-color:var(--navy,#081b3a)}
.activity-instructions{color:var(--text);font-size:14px;line-height:1.55}
.activity-questions{display:grid;gap:16px;margin:18px 0}
.question-block{border:1px solid var(--line);border-radius:14px;padding:14px 16px;background:#fafbfd}
.question-block h4{display:flex;gap:10px;align-items:flex-start;color:var(--q-text,#d92d20);font-size:14px;font-weight:800;margin:0 0 10px;line-height:1.45}
.q-num{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;min-width:24px;height:24px;border-radius:50%;background:var(--q-text,#d92d20);color:#fff;font-size:12px;font-weight:800}
.question-block .options{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
@media(max-width:620px){.question-block .options{grid-template-columns:1fr}}
.q-option{display:flex;align-items:center;gap:10px;width:100%;text-align:left;padding:11px 13px;min-height:44px;border:1px solid var(--line);border-radius:10px;background:#fff;color:var(--text);font-size:13px;cursor:pointer}
.q-option.selected{border-color:#1759d7;border-width:2px;padding:10px 12px;background:#e8f0ff;color:#0b2f6b;font-weight:800;box-shadow:0 0 0 3px rgba(23,89,215,.16)}
.q-option.selected .option-letter{background:#1759d7;color:#fff;font-weight:800}
.q-option.selected::after{content:'✓';margin-left:auto;color:#1759d7;font-size:15px;font-weight:800;line-height:1}
.q-explanation{margin-top:9px;padding:9px 12px;border-radius:9px;background:#eef6ee;color:#1d5c2e;font-size:12.5px;line-height:1.5}
.activity-audio{width:100%;margin:4px 0 12px}
.tts-control{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:4px 0 14px}
.tts-control .helper{flex-basis:100%}
.reading-passage{border:1px solid var(--line);border-radius:14px;padding:16px;background:#fdfcf9;color:#2c333d;font-size:14.5px;line-height:1.7;margin:4px 0 14px;white-space:pre-wrap}
.word-list{border:1px solid var(--line);border-radius:14px;padding:14px 16px;margin:4px 0 14px;background:#fafbfd}
.word-list h4{display:flex;align-items:center;gap:8px;color:var(--navy,#081b3a);font-size:14px;margin:0 0 10px}
.word-item{display:grid;grid-template-columns:110px 1fr;gap:2px 12px;padding:7px 0;border-bottom:1px dashed var(--line)}
.word-item:last-child{border-bottom:none}
.word-item strong{color:var(--text);font-size:13.5px}
.word-item span{color:var(--text);font-size:13px}
.word-item small{grid-column:1/-1;color:var(--text-muted);font-size:12px;font-style:italic}
.speaking-prompt{border:1px solid var(--line);border-radius:14px;padding:16px;background:#fdfcf9;margin:4px 0 12px}
.speaking-prompt p{color:#2c333d;font-size:14.5px;line-height:1.6;margin:6px 0 0}
.prep-timer{display:flex;align-items:center;gap:12px;flex-wrap:wrap;padding:12px 14px;border:1px solid var(--line);border-radius:12px;background:#fafbfd;margin:0 0 12px}
.prep-timer strong{font-size:26px;color:var(--navy,#081b3a);font-variant-numeric:tabular-nums}
.prep-timer span{color:var(--text-muted);font-size:12.5px;font-weight:700}
.record-controls{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin:0 0 12px}
.record-btn{display:inline-flex;align-items:center;gap:8px;padding:13px 18px;min-height:48px;border-radius:999px;border:1px solid var(--line);background:#fff;color:var(--navy,#081b3a);font-weight:800;font-size:13.5px;cursor:pointer}
.record-btn.recording{background:#c9353b;border-color:#c9353b;color:#fff}
.record-btn svg{width:17px;height:17px}
#record-playback{max-width:280px}
.writing-topic h3{color:var(--navy,#081b3a);font-size:17px;margin:4px 0 8px}
.writing-requirements{display:grid;gap:6px;margin:0 0 12px;padding-left:0;list-style:none}
.writing-requirements li{position:relative;padding-left:24px;color:var(--text);font-size:13.5px;line-height:1.5}
.writing-requirements li:before{content:"✓";position:absolute;left:2px;color:#1d7a3c;font-weight:800}
.writing-meta{display:flex;gap:18px;flex-wrap:wrap;color:var(--text-muted);font-size:12.5px;font-weight:700;margin:0 0 12px}
/* Writing countdown pill: quiet while there is time, loud only near the end. */
.writing-countdown strong{font-variant-numeric:tabular-nums}
.writing-countdown.is-low strong{color:var(--danger)}
.writing-countdown.is-over{color:var(--danger);font-weight:600}
.outline-field{min-height:74px;font-size:13px}
/* A writing exercise with several câu: one card per prompt, each with its own box. */
/* Kết quả chấm bài Viết trả về cho học viên. */
.rubric-result{display:grid;gap:12px;margin:0 0 16px}
.rubric-line-top{display:flex;justify-content:space-between;align-items:baseline;gap:12px;font-size:13.5px;font-weight:700;color:var(--text-primary)}
.rubric-line-top b{font-variant-numeric:tabular-nums;color:var(--blue)}
.rubric-line-top small{color:var(--text-muted);font-weight:600}
.rubric-bar{height:7px;border-radius:99px;background:var(--line);overflow:hidden;margin-top:5px}
.rubric-bar i{display:block;height:100%;border-radius:99px;background:var(--blue)}
.rubric-note{display:block;margin-top:5px;color:var(--text-secondary);font-size:12.5px;line-height:1.5}
.review-block{margin:0 0 14px;padding:14px 16px;border:1px solid var(--line);border-radius:14px;background:#fafbfd}
.review-block p{margin:6px 0 0;white-space:pre-wrap;line-height:1.6;font-size:13.5px}
.review-inline{margin:8px 0 0;padding:0;list-style:none;display:grid;gap:10px}
.review-inline li{display:grid;gap:4px;font-size:13px;line-height:1.55}
.review-inline q{color:var(--text-muted);font-style:italic}
.review-fold summary{cursor:pointer;font-weight:700;font-size:13.5px;color:var(--navy,#081b3a)}
.writing-part-list{display:grid;gap:14px;margin:0 0 14px}
.writing-part{border:1px solid var(--line);border-radius:14px;padding:14px 16px;background:#fafbfd}
.writing-part-head{display:flex;align-items:flex-start;gap:10px;margin:0 0 8px}
.writing-part-head h3{margin:0;color:var(--q-text,#d92d20);font-size:15.5px;line-height:1.45}
.writing-part-guide{margin:0 0 10px;color:var(--text-muted);font-size:13px;line-height:1.5}
.writing-part .field{margin:0}
.writing-part .writing-area{min-height:150px}
.word-count{display:block;margin-top:6px;color:var(--navy,#081b3a);font-weight:800;font-size:12.5px}
.grade-result{border:1px solid var(--line);border-radius:14px;padding:16px;background:#fafbfd;margin-top:16px}
.grade-result>strong{display:block;font-size:30px;color:var(--navy,#081b3a);text-align:center}
.grade-result>p{text-align:center;color:var(--text-muted);font-size:13px;margin:4px 0 12px}
.q-result{display:flex;gap:10px;padding:9px 4px;border-bottom:1px dashed var(--line)}
.q-result:last-child{border-bottom:none}
.q-result>span{flex:0 0 auto;width:22px;height:22px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;font-size:13px;font-weight:900;color:#fff}
.q-result.ok>span{background:#1d7a3c}
.q-result.no>span{background:#c9353b}
.q-result strong{color:var(--text);font-size:13px}
.q-result p{color:var(--text-muted);font-size:12.5px;line-height:1.5;margin:3px 0 0}
.journey-activity-card .mini-assignment-icon.green{background:#e7f4ea;color:#1d7a3c}
@media(max-width:430px){.word-item{grid-template-columns:1fr;gap:1px}.writing-meta{gap:10px}}

/* ============ P1: teacher workflow (assign wizard, tracking, authoring) ============ */
/* Shared building blocks */
.preview-wrap{display:grid;gap:8px;margin:14px 0}
.student-preview-frame{width:100%;height:520px;border:1px solid var(--line);border-radius:14px;background:#fff}
.preview-body{background:transparent;margin:0;padding:16px}
.preview-body .app-shell{display:block}
.preview-body .sidebar,.preview-body .topbar,.preview-body .back-btn{display:none}
.preview-body .page{max-width:none;padding:0}
/* Authoring: source + template picker */
.author-source-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;margin-bottom:16px}
.author-source-card{min-height:118px;padding:18px;text-align:left;border:1px solid var(--line);border-radius:14px;background:#fff;color:var(--text);display:grid;gap:6px;cursor:pointer;box-shadow:var(--shadow)}
.author-source-card svg{width:24px;color:var(--blue)}
.author-source-card strong{font-size:15px}
.author-source-card small{color:var(--text-secondary);font-size:12.5px;line-height:1.5}
.author-source-card.active{border-color:var(--blue);background:#f0f6ff;box-shadow:0 0 0 3px rgba(37,99,235,.12)}
.exercise-create-hero{display:flex;align-items:center;justify-content:space-between;gap:18px;margin:0 0 18px;padding:18px 20px;border:1px solid #c9d9f2;border-radius:14px;background:linear-gradient(110deg,#f4f8ff,#fff)}
.exercise-create-hero>div{display:grid;gap:4px}.exercise-create-hero strong{font-size:19px;color:var(--text)}.exercise-create-hero small{color:var(--text-secondary);font-size:12px}.exercise-create-hero .eyebrow{margin:0;color:var(--blue);font-size:11px}
@media(max-width:768px){.exercise-create-hero{align-items:stretch;flex-direction:column}.exercise-create-hero .btn{width:100%;justify-content:center;min-height:48px}}
/* The skill tabs are the primary authoring flow; hide the optional aggregate builder. */
.exercise-create-hero,.exercise-composer-panel{display:none!important}
.exercise-list-admin .composer-tabs{display:none!important}
.exercise-list-admin .exercise-import-panel,.exercise-list-admin .lms-toolbar{display:none!important}
.exercise-list-admin .panel:has(>.feedback-card){display:none!important}
.exercise-list-admin>.page-heading{display:none}
.exercise-list-admin-header{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:16px;margin:0 0 20px;min-height:52px}
.exercise-list-admin-header h1{grid-column:2;margin:0;text-align:center;font-size:clamp(25px,3vw,36px);color:var(--admin-text,var(--text))}
.exercise-list-admin-header .btn{grid-column:3;justify-self:end;min-height:46px;padding-inline:20px}
.exercise-skill-buttons{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin:0 0 18px}.exercise-skill-button{display:flex;align-items:center;justify-content:center;gap:8px;min-height:48px;padding:10px 13px;border:1px solid var(--admin-line,var(--line));border-radius:11px;background:#fff;color:var(--admin-text,var(--text));font-size:13px;font-weight:800;cursor:pointer}.exercise-skill-button svg{width:19px;color:var(--admin-blue,var(--blue))}.exercise-skill-button:hover,.exercise-skill-button:focus-visible{border-color:var(--admin-blue,var(--blue));background:var(--admin-soft-blue,#f5f8ff);outline:none}.exercise-skill-button.active{border-color:var(--admin-blue,var(--blue));background:var(--admin-blue,var(--blue));color:#fff}.exercise-skill-button.active svg{color:#fff}
.exercise-create-picker{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin:0 0 18px;padding:12px;border:1px solid var(--admin-line,var(--line));border-radius:14px;background:#fff;box-shadow:var(--admin-shadow,var(--shadow))}
.exercise-create-choice{display:grid;gap:5px;min-height:94px;padding:13px;text-align:left;border:1px solid var(--admin-line,var(--line));border-radius:11px;background:var(--admin-soft-blue,#f5f8ff);color:var(--admin-text,var(--text));cursor:pointer}.exercise-create-choice svg{width:21px;color:var(--admin-blue,var(--blue))}.exercise-create-choice strong{font-size:14px}.exercise-create-choice small{color:var(--admin-muted,var(--text-secondary));font-size:11px;line-height:1.4}.exercise-create-choice:hover,.exercise-create-choice:focus-visible{border-color:var(--admin-blue,var(--blue));background:#eaf2ff;outline:none}
.exercise-create-table{margin:0 0 18px}.exercise-create-table-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:14px}.exercise-create-table-head h2{margin:2px 0 0;font-size:20px}.exercise-create-form{display:grid;grid-template-columns:minmax(0,1fr);gap:10px;min-width:0}.exercise-create-row{display:grid;grid-template-columns:150px minmax(0,1fr);align-items:center;gap:14px;padding:11px 0;border-bottom:1px solid var(--admin-line,var(--line));font-size:13px}.exercise-create-row>strong{color:var(--admin-text,var(--text))}.exercise-create-row input[type=file],.exercise-create-row input[type=text],.exercise-create-row textarea{width:100%;min-height:42px;padding:10px;border:1px solid var(--admin-line,var(--line));border-radius:9px;background:#fff;font:inherit}.exercise-create-row textarea{min-height:74px;resize:vertical}.exercise-create-row .helper{grid-column:2;margin-top:-7px}.exercise-create-actions{display:flex;align-items:center;justify-content:flex-end;gap:16px;padding-top:6px}
.listen-mode-create{flex:1 1 auto;display:flex;flex-direction:column;gap:6px;min-width:0}
.listen-mode-create-label{color:var(--admin-text,var(--text));font-size:13px;font-weight:700}
.listen-mode-create-opts{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
.listen-mode-opt.is-compact{padding:9px 11px;border-radius:11px;gap:8px}
.listen-mode-opt.is-compact strong{font-size:13px}
.listen-mode-opt.is-compact small{font-size:12px;line-height:1.45}
.listen-mode-opt.is-compact.is-on,.listen-mode-opt.is-compact:has(input:checked){padding:8px 10px}
@media(max-width:860px){.exercise-create-actions{flex-direction:column;align-items:stretch}.listen-mode-create-opts{grid-template-columns:1fr}}
.exercise-create-files{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;padding:11px 0;border-bottom:1px solid var(--admin-line,var(--line));font-size:13px}
.exercise-create-file{display:grid;gap:7px;align-content:start}
.exercise-create-file>strong{color:var(--admin-text,var(--text))}
.exercise-create-file input[type=file]{width:100%;min-height:42px;padding:10px;border:1px dashed var(--admin-line,var(--line));border-radius:9px;background:#f8faff;font:inherit}
.exercise-create-file .helper{margin:0}
.exercise-aq-table{margin-top:6px;padding:4px 0 0;overflow-x:auto;min-width:0;width:100%}
.exercise-aq-head,.exercise-aq-row{display:grid;grid-template-columns:52px 150px minmax(200px,1.6fr) repeat(4,minmax(92px,1fr)) 130px;gap:8px;align-items:center;min-width:960px}
.exercise-aq-head{padding:8px 10px;background:var(--admin-soft-blue,#f5f8ff);border:1px solid var(--admin-line,var(--line));border-radius:9px 9px 0 0;color:var(--admin-muted,var(--text-secondary));font-size:11px;font-weight:800}
.exercise-aq-row{padding:8px 10px;border:1px solid var(--admin-line,var(--line));border-top:0}
.exercise-aq-row:last-of-type{border-radius:0 0 9px 9px}
.exercise-aq-head span,.exercise-aq-row .aq-stt,.exercise-aq-row .aq-file{font-size:12px}
.exercise-aq-row .aq-stt{font-weight:800;color:var(--admin-muted,var(--text-secondary));text-align:center}
.exercise-aq-row .aq-file{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--admin-muted,var(--text-secondary))}
.exercise-aq-row input,.exercise-aq-row textarea{width:100%;min-height:38px;padding:8px 9px;border:1px solid var(--admin-line,var(--line));border-radius:8px;background:#fff;font:inherit;font-size:12.5px}
/* Ô nhập cao dần theo chữ, không thanh cuộn riêng, không cắt cụt. */
.exercise-aq-row textarea.aq-grow{resize:none;overflow:hidden;line-height:1.45;white-space:pre-wrap;overflow-wrap:anywhere}
.exercise-aq-table.editable .exercise-aq-row{align-items:start}
/* Tên file nghe dài thì xuống dòng, đừng cắt bằng dấu ba chấm. */
.exercise-aq-row .aq-file{overflow:visible;text-overflow:clip;white-space:normal;overflow-wrap:anywhere}
.exercise-aq-row .aq-q{font-weight:600}
.exercise-aq-table .aq-help{display:block;margin-top:8px;color:var(--admin-muted,var(--text-secondary))}
/* Bảng sửa được có thêm cột nút xoá; STT là ô nhập vì một câu có thể đổi sang file khác. */
.exercise-aq-table.editable .exercise-aq-head,.exercise-aq-table.editable .exercise-aq-row{grid-template-columns:56px 150px minmax(200px,1.6fr) repeat(4,minmax(92px,1fr)) 130px 36px}
.exercise-aq-row .aq-stt-input{width:100%;min-height:38px;padding:8px 6px;text-align:center;font-weight:800}
.exercise-aq-row.is-missing-file .aq-file{color:#b42318}
.exercise-aq-row .aq-del{display:grid;place-items:center;width:32px;height:32px;padding:0;border:1px solid var(--admin-line,var(--line));border-radius:8px;background:#fff;color:#b42318;cursor:pointer}
.exercise-aq-row .aq-del:hover{background:#fdeaea}
.exercise-aq-row .aq-del svg{width:14px;height:14px}
.exercise-aq-table .aq-actions{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-top:10px}
.exercise-aq-table .aq-actions .btn{min-height:38px;font-size:12.5px}
.exercise-aq-table .aq-warn{color:#a8531b;font-weight:700}
/* minmax(0,…) cho cột co lại được, min-width:0 để bảng vừa khung: cột cuối
 * (Đáp án đúng) không còn bị cắt ở mép phải. */
.exercise-excel-preview .exercise-aq-head,.exercise-excel-preview .exercise-aq-row{grid-template-columns:44px minmax(0,1.25fr) minmax(0,1.4fr) repeat(4,minmax(0,1fr)) 76px 104px;min-width:0;align-items:start}
.exercise-excel-preview.speaking .exercise-aq-head,.exercise-excel-preview.speaking .exercise-aq-row{grid-template-columns:44px minmax(0,1.4fr) minmax(0,1.2fr) 96px 90px minmax(0,1.3fr);min-width:0;align-items:start}
.exercise-excel-preview.writing .exercise-aq-head,.exercise-excel-preview.writing .exercise-aq-row{grid-template-columns:44px minmax(0,1.8fr) 104px 104px 104px;min-width:0;align-items:start}
/* Ô tự cao theo nội dung. Trước đây bị chặn 72px rồi bắt cuộn trong từng ô —
 * đọc một đoạn văn phải kéo trong một khung bé xíu, rất khó thao tác. */
/* Ô dài chỉ hiện 4 dòng rồi dừng, kèm nút "Xem thêm" mở bảng giữa màn hình — không
 * cắt cụt vô lý, cũng không để một đoạn văn kéo dài cả trang bảng. */
.exercise-excel-preview .aq-preview-cell{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:4;font-size:12.5px;line-height:1.5;white-space:pre-wrap;overflow-wrap:anywhere;overflow:hidden;color:var(--admin-text,var(--text))}
.exercise-excel-preview .aq-cell{display:flex;flex-direction:column;align-items:flex-start;gap:4px;min-width:0}
.aq-more{padding:2px 8px;border:1px solid var(--admin-line,var(--line));border-radius:99px;background:#fff;color:#1759d7;font:inherit;font-size:11.5px;font-weight:700;cursor:pointer}
.aq-more:hover{background:#f2f7ff}
.cell-modal .cell-card{width:min(100%,720px);max-height:calc(100vh - 80px)}
.cell-modal-body{padding:18px 20px 22px;overflow:auto;white-space:pre-wrap;overflow-wrap:anywhere;line-height:1.7;font-size:14.5px}
.exercise-excel-preview .aq-cell:not(:first-child){border-left:1px solid rgba(30,70,120,.12);padding-left:8px}
@media(max-width:600px){.exercise-create-files{grid-template-columns:1fr}.exercise-aq-head,.exercise-aq-row{min-width:900px}}

@media(max-width:600px){.exercise-list-admin-header{grid-template-columns:1fr}.exercise-list-admin-header h1{grid-column:1;grid-row:1;text-align:left}.exercise-list-admin-header .btn{grid-column:1;grid-row:2;justify-self:stretch;width:100%;justify-content:center}}
@media(max-width:768px){.exercise-create-picker{grid-template-columns:repeat(2,minmax(0,1fr))}.exercise-create-choice{min-height:88px}}
@media(max-width:768px){.exercise-skill-buttons{grid-template-columns:repeat(2,minmax(0,1fr))}.exercise-skill-button{justify-content:flex-start}}
@media(max-width:600px){.exercise-create-table-head{align-items:flex-start}.exercise-create-row{grid-template-columns:1fr;gap:7px}.exercise-create-row .helper{grid-column:1}.exercise-create-actions .btn{width:100%;justify-content:center}}
.template-picker{display:grid;gap:14px}
.template-group h4{display:flex;align-items:center;gap:8px;font-size:14px;color:var(--navy,#081b3a);margin:0 0 8px}
.template-group svg{width:16px}
.template-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:10px}
.template-card{min-height:96px;padding:14px;text-align:left;border:1px solid var(--line);border-radius:12px;background:#fafbfd;color:var(--text);display:grid;gap:4px;cursor:pointer}
.template-card svg{width:18px;color:var(--blue)}
.template-card strong{font-size:13.5px}
.template-card small{color:var(--text-secondary);font-size:12px;line-height:1.4}
.template-card:hover{border-color:var(--blue);background:#f0f6ff}
/* Question editor */
.question-editor{display:grid;gap:12px}
.qe-block{border:1px solid var(--line);border-radius:12px;padding:14px 16px;background:#fafbfd;display:grid;gap:12px}
.qe-block legend{font-weight:800;font-size:13px;color:var(--navy,#081b3a);padding:0 6px}
.passage-editor{min-height:130px;resize:vertical}
/* Exercise list */
.exercise-summary{display:flex;gap:10px;flex-wrap:wrap;align-items:center}
.exercise-summary span{display:inline-flex;align-items:center;gap:5px;padding:7px 12px;border:1px solid var(--line);border-radius:99px;background:#fff;font-size:12.5px;color:var(--text-secondary);font-weight:700}
.exercise-summary b{color:var(--text);font-size:14px}
.exercise-list{display:grid;gap:10px}
.exercise-row{display:flex;align-items:center;gap:14px;justify-content:space-between;flex-wrap:wrap;padding:14px 16px;border:1px solid var(--line);border-radius:12px;background:#fff}
.exercise-row .ex-main{min-width:0;display:grid;gap:4px}
.exercise-row .ex-main strong{font-size:14.5px;overflow-wrap:anywhere}
.exercise-row .ex-main small{color:var(--text-secondary);font-size:12px;overflow-wrap:anywhere}
.exercise-row .ex-main .exercise-info-line{color:var(--text);font-size:12px;line-height:1.45;white-space:pre-wrap}.exercise-row .ex-main .exercise-delivery-line{color:var(--text);font-size:12px;font-weight:700;line-height:1.45}.exercise-row .ex-main .exercise-created-line{color:var(--text-secondary);font-size:12px;line-height:1.45}
.exercise-row .row-actions{display:flex;gap:8px;flex-wrap:wrap}
.exercise-row .btn{min-height:44px}
/* Assign wizard */
.assign-source-toggle{display:flex;gap:10px;margin-bottom:16px}
.assign-source-btn{flex:1;min-height:48px;padding:10px 14px;border:1px solid var(--line);border-radius:12px;background:#fff;color:var(--text);font-weight:800;font-size:14px;display:inline-flex;align-items:center;justify-content:center;gap:8px;cursor:pointer}
.assign-source-btn svg{width:18px}
.assign-source-btn.active{border-color:var(--blue);background:#f0f6ff;color:var(--blue)}
.assign-content-list{display:grid;gap:10px;margin-bottom:16px}
.assign-content-row{display:grid;gap:4px;text-align:left;padding:14px 16px;border:1px solid var(--line);border-radius:12px;background:#fff;color:var(--text);cursor:pointer;min-height:64px}
.assign-content-row strong{font-size:14px;overflow-wrap:anywhere}
.assign-content-row small{color:var(--text-secondary);font-size:12px;overflow-wrap:anywhere}
.assign-content-row.active{border-color:var(--blue);background:#f0f6ff;box-shadow:0 0 0 3px rgba(37,99,235,.12)}
.recipient-panel{display:grid;gap:12px}
.recipient-all{display:flex;align-items:center;gap:10px;padding:12px 14px;border:1px solid var(--line);border-radius:12px;background:#fafbfd;cursor:pointer;font-size:14px}
.recipient-all input{width:20px;height:20px;accent-color:var(--blue)}
.recipient-all span{color:var(--text-secondary);font-weight:600}
.recipient-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:8px;max-height:320px;overflow:auto;padding:2px}
.recipient-row{display:flex;align-items:center;gap:10px;min-height:52px;padding:8px 10px;border:1px solid var(--line);border-radius:10px;background:#fff;cursor:pointer}
.recipient-row input{width:18px;height:18px;accent-color:var(--blue);flex:none}
.recipient-row .avatar{width:34px;height:34px;flex:none}
.recipient-row strong{font-size:13px;display:block}
.recipient-row small{color:var(--text-secondary);font-size:11.5px}
.recipient-row[hidden]{display:none}
.recipient-count{display:inline-block;padding:8px 14px;border-radius:99px;background:#eaf1ff;color:var(--blue);font-weight:800;font-size:13px;justify-self:start}
/* Tracking */
/* Bài đã giao: mỗi bài là một thẻ, thanh tiến độ thay cho ba ô số rời rạc. */
.assigned-group-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(340px,1fr));gap:14px}
.assigned-card{display:grid;gap:9px;align-content:start;padding:18px;border:1px solid var(--line);border-radius:16px;background:#fff;box-shadow:var(--shadow)}
.assigned-card.is-overdue{border-color:#f3c1c1}
.assigned-card-head{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap}
.assigned-skill{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border-radius:99px;background:#eaf1ff;color:var(--blue);font-size:11.5px;font-weight:800;text-transform:uppercase;letter-spacing:.03em}
.assigned-skill svg{width:14px;height:14px}
.assigned-skill.sk-reading{background:#eaf6ee;color:#16794a}
.assigned-skill.sk-writing{background:#fdf0e6;color:#a8531b}
.assigned-skill.sk-speaking{background:#f2ecfd;color:#5b3bb5}
.assigned-due{font-size:12px;font-weight:800;color:var(--text-secondary)}
.assigned-due.is-ok{color:#16794a}
.assigned-due.is-soon{color:#a8531b}
.assigned-due.is-over{color:#b42318}
.assigned-title{margin:0;font-size:16.5px;line-height:1.35;overflow-wrap:anywhere}
.assigned-scope{margin:0;color:var(--text-secondary);font-size:12.5px;overflow-wrap:anywhere}
.assigned-bar{display:flex;height:9px;border-radius:99px;background:#e7ecf4;overflow:hidden}
.assigned-bar i{display:block;height:100%;transition:width .3s ease}
.assigned-bar .seg-done{background:var(--blue)}
.assigned-bar .seg-wait{background:#f0a03c}
.assigned-legend{display:flex;flex-wrap:wrap;gap:6px 16px;margin:0;padding:0;list-style:none;font-size:12px;color:var(--text-secondary)}
.assigned-legend li{display:inline-flex;align-items:center;gap:6px}
.assigned-legend li:before{content:"";width:8px;height:8px;border-radius:50%;background:#cfd8e6}
.assigned-legend .lg-done:before{background:var(--blue)}
.assigned-legend .lg-wait:before{background:#f0a03c}
.assigned-legend b{color:var(--text-primary);font-size:13.5px}
.assigned-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:2px}
.assigned-actions .btn{flex:1 1 auto;justify-content:center;min-height:42px}
/* Tab đang chọn từng là chữ trắng trên nền trắng: nền lấy từ biến --admin-blue
   chỉ tồn tại trong .login-shell/.admin-mode nên ở đây nó không tồn tại. */
.assigned-tabs{gap:6px;margin-bottom:16px}
.assigned-tabs .lms-tab{display:inline-flex;align-items:center;gap:7px;font-size:12.5px;color:var(--text-secondary)}
.assigned-tabs .lms-tab.active{background:var(--blue);color:#fff}
.assigned-tabs .tab-count{display:inline-grid;place-items:center;min-width:19px;height:19px;padding:0 5px;border-radius:99px;background:#e7ecf4;color:var(--text-secondary);font-size:11px;font-weight:800}
.assigned-tabs .tab-count.is-hot{background:#fdf0e6;color:#a8531b}
.assigned-tabs .lms-tab.active .tab-count{background:rgba(255,255,255,.22);color:#fff}
.pill.waiting{background:#fdf0e6;color:#a8531b}
.track-avatar{display:grid;place-items:center;width:30px;height:30px;flex:none;border-radius:50%;background:#eaf1ff;color:var(--blue);font-weight:800;font-size:12.5px}
.track-row .track-name{flex:1 1 auto;min-width:0}
.track-row .btn{min-height:38px;padding:0 12px;font-size:12.5px}
.track-gap{width:1px}
.track-row.st-wait{border-color:#f0d3ae;background:#fffaf3}
.filter-note{color:var(--text-secondary);font-size:13px;font-weight:700;align-self:center}
.track-group{display:grid;gap:12px}
.track-group.is-overdue{border-color:#f3c1c1}
.track-head{display:flex;align-items:flex-start;justify-content:space-between;gap:14px;flex-wrap:wrap}
.track-head h3{margin:2px 0 4px;font-size:16px;overflow-wrap:anywhere}
.track-head small{color:var(--text-secondary);font-size:12.5px}
.track-class-scope{display:block;margin-top:5px;color:var(--blue);font-size:12px;font-weight:800;overflow-wrap:anywhere}
.track-recipients{display:grid;gap:6px}
.track-row{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;padding:9px 12px;border:1px solid var(--line);border-radius:10px;background:#fafbfd}
.track-row.is-overdue{background:#fdf3f3;border-color:#f3c1c1}
.track-name{font-weight:700;font-size:13.5px}
/* Touch targets + mobile inputs (P1.4) */
.assign-source-btn{min-height:48px}.assign-content-row,.template-card,.author-source-card,.recipient-row,.recipient-all,.qe-block button{min-height:44px}
@media(max-width:768px){.author-source-grid{grid-template-columns:1fr}.track-head{display:grid}.track-group .as-cols{justify-content:flex-start}.exercise-row{align-items:stretch}.exercise-row .row-actions{width:100%}.exercise-row .row-actions .btn{flex:1;text-align:center;justify-content:center}.assign-source-toggle{display:grid;grid-template-columns:1fr 1fr}.template-grid{grid-template-columns:1fr 1fr}}
@media(max-width:430px){.template-grid{grid-template-columns:1fr}.student-preview-frame{height:460px}.recipient-list{grid-template-columns:1fr}.assign-source-toggle{grid-template-columns:1fr}}

/* ============ P2-B: student deep learning experience ============ */
/* Continue card (authoritative backend contract) */
.continue-card{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:18px;align-items:center;margin:0 0 18px;padding:20px 22px;border:1px solid var(--line);border-radius:14px;background:linear-gradient(135deg,#ffffff,#f2f7ff);box-shadow:var(--shadow)}
.continue-card.done{background:linear-gradient(135deg,#ffffff,#eef8f1)}
.continue-copy{min-width:0;display:grid;gap:5px}
.continue-copy h2{margin:2px 0 0;font-size:19px;letter-spacing:-.01em;overflow-wrap:anywhere}
.continue-copy p{margin:0;color:var(--text-secondary);font-size:13px;overflow-wrap:anywhere}
.continue-cta{min-height:48px;padding:0 22px;border-radius:12px}
.resume-hint{display:inline-flex;align-items:center;gap:7px;color:var(--text-muted);font-size:12.5px;font-weight:700;margin-top:2px}
.resume-hint svg{width:14px;height:14px}
.lesson-chip{display:inline-flex;align-items:center;gap:7px;width:fit-content;padding:5px 12px;border-radius:999px;background:#eaf1ff;color:var(--blue);font-size:12px;font-weight:800}
.lesson-chip svg{width:14px;height:14px}
.resume-note{display:flex;align-items:center;gap:8px;margin:0 0 12px;padding:10px 13px;border:1px solid #cdddf7;border-radius:10px;background:#f0f6ff;color:var(--blue);font-size:12.5px;font-weight:700}
.resume-note svg{width:15px;height:15px;flex:none}
/* Urgent teacher assignments (Hôm nay, second block) */
.urgent-block{margin:4px 0 20px}
/* Journey locked/current/completed */
.journey-activity-card.is-locked{opacity:.62;background:#f6f8fb}
.journey-activity-card.is-locked .mini-assignment-icon.muted{background:#e6ebf3;color:var(--text-muted)}
.journey-activity-card.is-locked h3{color:var(--text-muted)}
.journey-activity-card.is-current{border-color:#b9cff5;box-shadow:0 0 0 3px rgba(30,93,189,.08)}
.mini-assignment-btn.ghost{display:inline-flex;align-items:center;gap:6px;min-height:44px;padding:0 14px;border:1px solid var(--line);border-radius:10px;background:#eef2f8;color:var(--text-muted);font-size:12px;font-weight:800;white-space:nowrap}
.mini-assignment-btn.ghost svg{width:14px;height:14px}
.journey-act.locked{opacity:.6;cursor:not-allowed;color:var(--text-muted);border-style:dashed;background:#f6f8fb}
.journey-act.locked svg{color:var(--text-muted)}
.journey-act.done{background:#eef8f1;border-color:#bfe3cd;color:#16794a}
.journey-act.done svg{color:#16794a}
.journey-act.current{background:#eaf1ff;border-color:#b9cff5;color:var(--blue)}
.journey-act.current svg{color:var(--blue)}
.unit-progress-note{margin-left:8px;color:var(--text-muted);font-size:11.5px;font-weight:700}
/* Pending teacher review */
.pending-review-note{display:flex;align-items:center;gap:8px;margin:0 0 12px;padding:10px 13px;border:1px solid #f0c47a;border-radius:10px;background:#fff8e1;color:#805b00;font-size:12.5px;font-weight:800}
.pending-review-note svg{width:15px;height:15px;flex:none}
/* Writing review panel */
.writing-review-panel{display:grid;gap:14px;margin-top:6px}
.review-banner{display:flex;gap:11px;align-items:flex-start;padding:13px 15px;border-radius:12px}
.review-banner svg{width:19px;height:19px;flex:none;margin-top:1px}
.review-banner.pass{background:#eef8f1;border:1px solid #bfe3cd;color:#16794a}
.review-banner.warn{background:#fff8e1;border:1px solid #f0c47a;color:#805b00}
.review-banner strong{display:block;font-size:13.5px;margin-bottom:2px}
.review-banner span{font-size:12.5px;opacity:.92}
.review-score{display:grid;place-items:center;padding:16px;border:1px solid var(--line);border-radius:14px;background:#fafbfd}
.review-score small{color:var(--text-muted);font-size:12px;font-weight:800}
.review-score strong{font-size:34px;color:var(--navy,#081b3a);font-variant-numeric:tabular-nums}
.review-score em{font-size:14px;color:var(--text-muted);font-style:normal;font-weight:700}
.review-feedback{border:1px solid var(--line);border-radius:12px;padding:13px 15px;background:#fff}
.review-feedback strong{display:block;font-size:13px;margin-bottom:5px}
.review-feedback p{margin:0;font-size:13.5px;line-height:1.6;color:var(--text)}
.rubric-rows{display:grid;gap:9px;padding:14px 16px;border:1px solid var(--line);border-radius:12px;background:#fafbfd}
.rubric-rows h4{margin:0 0 4px;font-size:13.5px}
.rubric-row{display:grid;grid-template-columns:minmax(120px,1fr) minmax(0,120px) auto;gap:12px;align-items:center}
.rubric-row span{color:var(--text);font-size:12.5px;font-weight:700;overflow-wrap:anywhere}
.rubric-row .progress-track{height:8px;background:#e6ebf3;border-radius:99px;overflow:hidden}
.rubric-row .progress-track span{display:block;height:100%;background:var(--blue);border-radius:99px}
.rubric-row strong{font-size:12.5px;font-variant-numeric:tabular-nums;white-space:nowrap}
.rubric-rows.mini{padding:10px 12px}
.rubric-rows.mini .rubric-row{grid-template-columns:minmax(0,1fr) auto}
.inline-comments{display:grid;gap:9px}
.inline-comments h4{margin:0;font-size:13.5px}
.inline-comment{padding:11px 14px;border:1px solid var(--line);border-left:3px solid var(--orange);border-radius:10px;background:#fff}
.inline-comment blockquote{margin:0 0 6px;padding:6px 10px;border-radius:8px;background:#f4f0e8;color:#6b5a2a;font-style:italic;font-size:12.5px;overflow-wrap:anywhere}
.inline-comment p{margin:0;font-size:13px;color:var(--text);line-height:1.55}
.suggested-revision{padding:13px 15px;border:1px solid #cdddf7;border-radius:12px;background:#f0f6ff}
.suggested-revision strong{display:block;font-size:13px;margin-bottom:5px;color:var(--blue)}
.suggested-revision p{margin:0;font-size:13.5px;line-height:1.6;color:var(--text)}
.review-original{padding:13px 15px;border:1px dashed var(--line);border-radius:12px;background:#fafbfd}
.review-original h4{margin:0 0 7px;font-size:13px}
.review-original p{margin:0 0 6px;font-size:13.5px;line-height:1.65;color:var(--text);white-space:pre-wrap;overflow-wrap:anywhere}
.review-original small{color:var(--text-muted);font-size:12px}
.version-history{display:grid;gap:8px;padding:14px 16px;border:1px solid var(--line);border-radius:12px;background:#fafbfd}
.version-history h4{margin:0 0 2px;font-size:13.5px}
.version-item{border:1px solid var(--line);border-radius:10px;background:#fff;overflow:hidden}
.version-item summary{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:10px 13px;cursor:pointer;font-size:12.5px;font-weight:700;color:var(--text);list-style:none}
.version-item summary::-webkit-details-marker{display:none}
.version-item summary:before{content:"▸";color:var(--text-muted);transition:transform .16s ease}
.version-item[open] summary:before{transform:rotate(90deg)}
.version-item summary small{margin-left:auto;color:var(--text-muted);font-weight:600}
.version-item p{margin:0;padding:0 13px 11px;font-size:13px;line-height:1.6;color:var(--text);white-space:pre-wrap;overflow-wrap:anywhere}
/* Feedback list (Hôm nay + progress) */
.recent-feedback{display:grid;gap:10px}
.feedback-item{padding:11px 14px;border:1px solid var(--line);border-radius:10px;background:#fafbfd;display:grid;gap:4px}
.feedback-item div{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap}
.feedback-item strong{font-size:13.5px}
.feedback-item small{color:var(--text-muted);font-size:12px;font-weight:700}
.feedback-item p{margin:0;font-size:13px;line-height:1.55;color:var(--text)}
/* Progress by unit */
.unit-progress-list{display:grid;gap:10px}
.unit-progress-row{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,140px) auto;gap:14px;align-items:center;padding:11px 14px;border:1px solid var(--line);border-radius:10px;background:#fafbfd}
.unit-progress-row strong{font-size:13.5px;overflow-wrap:anywhere}
.unit-progress-row small{color:var(--text-muted);font-size:12px;font-weight:700}
.unit-progress-row .progress-track{height:8px;background:#e6ebf3;border-radius:99px;overflow:hidden}
.unit-progress-row .progress-track span{display:block;height:100%;background:var(--blue);border-radius:99px}
.unit-progress-row b{font-size:13px;font-variant-numeric:tabular-nums}
/* Detailed results */
.q-given{color:#8a5a12!important;font-weight:700}
@media(max-width:768px){.continue-card{grid-template-columns:1fr;padding:18px}.continue-cta{width:100%;justify-content:center}.unit-progress-row{grid-template-columns:1fr;gap:8px}.rubric-row{grid-template-columns:minmax(0,1fr) auto;gap:8px}.rubric-row .progress-track{grid-column:1/-1;order:3}}
@media(max-width:430px){.review-score strong{font-size:28px}.version-item summary small{width:100%;margin-left:0}}
/* ============ P2-C teacher grading + exceptions (added 2026-08-16) ============ */
.exception-head{display:flex;justify-content:space-between;align-items:baseline;gap:12px;margin-bottom:12px}.exception-head h3{margin:0;font-size:15px}.exception-head span{color:var(--text-muted);font-size:12px;font-weight:800}
.exception-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.exception-card{display:flex;align-items:center;gap:12px;padding:14px;min-height:64px;text-align:left;border:1px solid var(--line);border-radius:12px;background:#fff;color:var(--text);box-shadow:var(--shadow);cursor:pointer}.exception-card:hover{border-color:var(--blue)}.exception-icon{width:40px;height:40px;flex:0 0 auto;display:grid;place-items:center;border-radius:10px;background:#fdf1e3;color:#b45309}.exception-card svg{width:18px;flex:0 0 auto;color:var(--blue);margin-left:auto}.exception-card div{min-width:0;display:grid;gap:2px}.exception-card strong{font-size:13.5px;overflow-wrap:anywhere}.exception-card small{color:var(--text-secondary);font-size:11.5px}
.recent-review-list{display:grid;gap:8px}.recent-review-item{display:flex;align-items:center;gap:12px;padding:11px 13px;min-height:52px;text-align:left;border:1px solid var(--line);border-radius:11px;background:#fafbfd;color:var(--text);cursor:pointer}.recent-review-item:hover{border-color:var(--blue)}.recent-review-item .status-new{flex:0 0 auto}.recent-review-item div{min-width:0;display:grid;gap:2px}.recent-review-item strong{font-size:13px}.recent-review-item small{color:var(--text-muted);font-size:11.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.recent-review-item>svg{width:16px;flex:0 0 auto;color:var(--blue)}
.submission-list{display:grid;gap:10px}.submission-row{display:flex;align-items:center;gap:13px;width:100%;padding:14px 16px;min-height:64px;text-align:left;border:1px solid var(--line);border-radius:13px;background:#fff;color:var(--text);box-shadow:var(--shadow);cursor:pointer}.submission-row:hover{border-color:var(--blue)}.submission-row.reviewed{background:#fafbfd}.submission-row-icon{width:42px;height:42px;flex:0 0 auto;display:grid;place-items:center;border-radius:11px;background:#eaf1ff;color:var(--blue)}.submission-row-icon svg{width:20px}.submission-row-main{min-width:0;display:grid;gap:3px}.submission-row-main strong{font-size:14px;overflow-wrap:anywhere}.submission-row-main small{color:var(--text-secondary);font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.submission-row .status-new{flex:0 0 auto}.submission-row-score{flex:0 0 auto;font-size:13px;color:var(--navy,#081b3a);font-variant-numeric:tabular-nums}.submission-row>svg{width:16px;flex:0 0 auto;color:var(--blue)}
.grade-open-back{margin-bottom:14px}.grade-panel-slot{display:grid;gap:0}.grade-head{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;padding:18px 20px;border:1px solid var(--line);border-radius:14px;background:#fff;box-shadow:var(--shadow);margin-bottom:14px}.grade-head-main{min-width:0;display:grid;gap:5px}.grade-head-main h2{margin:0;font-size:17px;color:var(--navy,#081b3a);overflow-wrap:anywhere}.grade-head-main small{color:var(--text-secondary);font-size:12px}.grade-head-score{text-align:right;flex:0 0 auto}.grade-head-score strong{display:block;font-size:26px;color:var(--navy,#081b3a);font-variant-numeric:tabular-nums}.grade-head-score strong.pending{color:#c08b2d}.grade-head-score strong em{font-style:normal;font-size:13px;color:var(--text-muted)}.grade-head-score small{color:var(--text-muted);font-size:11px;font-weight:800}
.grade-body{display:grid;gap:14px}.grade-form{padding:18px 20px;border:1px solid var(--line);border-radius:14px;background:#fff;box-shadow:var(--shadow);display:grid;gap:14px}.grade-form h3{margin:0;font-size:15px;color:var(--navy,#081b3a)}.grade-hint{display:flex;gap:9px;align-items:flex-start;padding:11px 13px;border-radius:10px;background:#f3f7ff;color:var(--text-secondary);font-size:12px;line-height:1.55}.grade-hint svg{width:16px;flex:0 0 auto;color:var(--blue);margin-top:1px}
.rubric-edit{display:grid;gap:10px}.rubric-edit-row{display:grid;grid-template-columns:minmax(140px,1fr) 88px minmax(0,1.2fr);gap:10px;align-items:center;padding:11px 13px;border:1px solid var(--line);border-radius:11px;background:#fafbfd}.rubric-edit-label{display:grid;gap:2px}.rubric-edit-label strong{font-size:12.5px;color:var(--text);overflow-wrap:anywhere}.rubric-edit-label small{color:var(--text-muted);font-size:11px;font-weight:700}.rubric-score{height:46px;min-width:0;border:1px solid var(--line);border-radius:10px;background:#fff;padding:0 10px;font-size:16px;font-weight:800;color:var(--navy,#081b3a);text-align:center;font-variant-numeric:tabular-nums}.rubric-comment{height:46px;min-width:0;border:1px solid var(--line);border-radius:10px;background:#fff;padding:0 12px;font-size:14px;color:var(--text)}
.grade-total{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:12px 15px;border-radius:11px;background:#eef4ff;border:1px solid #cdddf7}.grade-total span{font-size:12.5px;font-weight:800;color:var(--text-secondary)}.grade-total strong{font-size:22px;color:var(--navy,#081b3a);font-variant-numeric:tabular-nums}.grade-total strong em{font-style:normal;font-size:12px;color:var(--text-muted)}
.inline-comment-editor{display:grid;gap:10px}.inline-comment-editor h4{margin:0;font-size:13.5px;display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}.inline-comment-editor .helper{font-weight:600}.inline-comment-row{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.2fr) auto;gap:9px;align-items:center}.inline-comment-row input{height:44px;min-width:0;border:1px solid var(--line);border-radius:10px;background:#fff;padding:0 12px;font-size:14px;color:var(--text)}.inline-comment-row .btn{min-height:44px}.btn.outline.danger,.btn.btn-outline.danger{border-color:#f0c4c4;color:#b33434}.inline-comment-actions{display:flex;gap:9px;flex-wrap:wrap}.inline-comment-actions .btn{min-height:44px}
.decision-toggle{display:grid;grid-template-columns:1fr 1fr;gap:10px}.decision-toggle label{display:block;cursor:pointer}.decision-toggle input{position:absolute;opacity:0;pointer-events:none}.decision-toggle span{display:flex;align-items:center;justify-content:center;gap:8px;min-height:48px;padding:10px 12px;border:1px solid var(--line);border-radius:11px;background:#fafbfd;color:var(--text-secondary);font-size:13px;font-weight:800;text-align:center}.decision-toggle span svg{width:16px}.decision-toggle input:checked+span{border-color:#1e7a45;background:#e9f8ef;color:#1e7a45}.decision-toggle input[value="1"]:checked+span{border-color:#b45309;background:#fdf1e3;color:#b45309}
.grade-published{padding:16px 18px;border:1px solid var(--line);border-radius:13px;background:#fff;box-shadow:var(--shadow);display:grid;gap:12px}.grade-published-feedback{margin:0;font-size:13px;line-height:1.6;color:var(--text)}.grade-published-feedback strong{color:var(--navy,#081b3a)}
.grade-details{display:grid;gap:2px}.q-explanation{color:var(--text-muted)!important;font-size:12.5px!important}
.grade-submit{width:100%;min-height:48px}
@media(max-width:768px){.exception-grid{grid-template-columns:1fr}.rubric-edit-row{grid-template-columns:minmax(0,1fr) 88px;grid-template-areas:"label label" "score comment"}.rubric-edit-label{grid-area:label}.rubric-edit-row .rubric-score{grid-area:score}.rubric-edit-row .rubric-comment{grid-area:comment}.inline-comment-row{grid-template-columns:1fr;grid-template-areas:"snip" "cmt" "rmv"}.inline-comment-row .ic-snippet{grid-area:snip}.inline-comment-row .ic-comment{grid-area:cmt}.inline-comment-row .btn{grid-area:rmv;justify-self:end}.grade-head{flex-direction:column;gap:10px}.grade-head-score{text-align:left}.decision-toggle{grid-template-columns:1fr}}

/* ===== P0 simplification: merged create+assign, 5-item nav, CMS one-surface, data-loss guards ===== */
.toolbar-actions{display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.assign-mode-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;margin-bottom:14px}
.assign-mode-card{min-height:150px;padding:20px;text-align:left;display:flex;flex-direction:column;gap:8px;border:1px solid var(--line);border-radius:14px;background:#fff;color:var(--text);cursor:pointer;box-shadow:var(--shadow)}
.assign-mode-card svg{width:24px;color:var(--blue)}
.assign-mode-card small{font-size:12px;color:var(--text-secondary);line-height:1.5}
.assign-mode-card.active{border:2px solid var(--blue);background:#f3f7ff}
.author-mini-picker{margin-bottom:6px}
.assign-preview-toggle{margin-top:14px;display:flex;gap:8px}
.assign-advanced{border:1px solid var(--line);border-radius:12px;background:#fbfcfe;padding:4px 14px 14px;margin-bottom:14px}
.assign-advanced summary{min-height:44px;display:flex;align-items:center;cursor:pointer;font-weight:800;font-size:13px;color:var(--text-secondary)}
.assign-advanced[open] summary{margin-bottom:10px}
.btn-ghost{min-height:44px;display:flex;align-items:center;gap:8px;width:100%;padding:0 13px;border:1px solid rgba(255,255,255,.14);border-radius:12px;background:rgba(255,255,255,.05);color:rgba(255,255,255,.8);font-weight:700;font-size:12px;text-align:left}
.btn-ghost:hover{background:rgba(255,255,255,.12);color:#fff}
.sidebar-settings{margin-top:8px}
.pill.demo-pill{display:inline-block;margin-left:auto;padding:2px 8px;border-radius:99px;background:rgba(255,255,255,.12);font-size:10px;font-weight:800;color:rgba(255,255,255,.75)}
.author-save-status{display:inline-flex;align-items:center;gap:6px}
.author-save-status::before{content:"";width:8px;height:8px;border-radius:50%;background:#c9b45a}
.draft-restore-banner{display:flex;justify-content:space-between;align-items:center;gap:14px;flex-wrap:wrap;margin-bottom:14px;border-left:4px solid var(--blue)}
.draft-restore-banner strong{display:block}
.draft-restore-banner small{color:var(--text-secondary)}
.cms-logo-row{display:flex;align-items:center;gap:14px;padding:12px 14px;border:1px dashed var(--line);border-radius:12px;background:#fbfcfe;margin-bottom:4px}
.cms-logo-thumb{width:64px;height:64px;flex:0 0 auto;border-radius:10px;border:1px solid var(--line);background:#fff;display:grid;place-items:center;overflow:hidden}
.cms-logo-thumb img{max-width:100%;max-height:100%;object-fit:contain}
.cms-logo-actions{display:grid;gap:6px;justify-items:start}
.cms-logo-actions strong{font-size:13px}
.cms-logo-actions .helper{margin:0}
.cms-advanced{border:1px solid var(--line);border-radius:10px;background:#fbfcfe;padding:4px 12px 12px;margin-bottom:12px}
.cms-advanced summary{min-height:40px;display:flex;align-items:center;cursor:pointer;font-weight:800;font-size:12px;color:var(--text-secondary)}
.grade-actionbar{position:sticky;bottom:0;z-index:6;margin-top:4px;padding:12px 14px;display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap;background:rgba(255,255,255,.96);backdrop-filter:blur(10px);border:1px solid var(--line);border-radius:12px;box-shadow:0 -6px 18px rgba(8,27,58,.10)}
.grade-save-status{display:inline-flex;align-items:center;gap:6px;font-size:11px;font-weight:800;color:var(--text-secondary)}
.grade-save-status svg{width:10px;color:#c9b45a}
.grade-actionbar-btns{display:flex;gap:8px;flex-wrap:wrap}
.grade-actionbar .btn{min-height:46px}
@media(max-width:768px){.assign-mode-grid{grid-template-columns:1fr}.grade-actionbar{position:sticky;bottom:0;border-radius:12px 12px 0 0;margin:0 -10px -10px;padding:12px 14px calc(12px + env(safe-area-inset-bottom))}.grade-actionbar-btns{width:100%;display:grid;grid-template-columns:1fr 1fr;gap:8px}.grade-actionbar-btns .grade-submit{width:100%;grid-column:1/-1}}
@media(max-width:430px){.grade-save-status{display:inline-flex;width:100%;order:-1;font-size:10px;line-height:1.35;padding:0 2px 6px;color:var(--text-secondary);justify-content:flex-start}.grade-actionbar{padding:10px 10px calc(10px + env(safe-area-inset-bottom))}.grade-actionbar-btns{grid-template-columns:1fr 1fr}.grade-actionbar-btns .btn{white-space:normal;text-align:center}.grade-actionbar-btns .grade-submit{grid-column:1/-1}.draft-restore-banner{flex-direction:column;align-items:stretch}.toolbar-actions{width:100%;display:grid;grid-template-columns:1fr}.toolbar-actions .btn{width:100%}}

/* ---- P1: teacher action queue, task clarity, focused grading, canonical statuses ---- */
.lms-today-cta{display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin-bottom:18px}
.lms-today-cta .btn{min-height:52px;font-size:15px;padding:0 22px}
.due-soon-note{margin:4px 0 12px;font-size:13px;color:var(--text-secondary)}
.lms-summary-strip{display:flex;gap:10px;flex-wrap:wrap;margin-top:18px;padding:12px 14px;border:1px dashed var(--line);border-radius:12px;background:#fafbfd;color:var(--text-secondary);font-size:12.5px}
.lms-summary-strip span{display:inline-flex;gap:5px;align-items:baseline}
.lms-summary-strip b{color:var(--navy,#081b3a);font-size:14px}
.track-card-cta{margin-top:10px}
.track-group-detail .track-recipients{display:grid;gap:8px;margin-top:12px}
.track-group-detail .track-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:10px 12px;border:1px solid var(--line);border-radius:10px;background:#fafbfd}
.urgent-empty{padding:18px 20px;display:grid;gap:8px}
.urgent-empty .btn{justify-self:start;margin-top:4px}
.lock-reason{display:block;color:var(--text-muted);font-size:11.5px;margin-top:4px}
.rubric-en{font-style:normal;font-weight:500;color:var(--text-muted);font-size:11px}
.grade-head-side{display:grid;justify-items:end;gap:6px;flex:0 0 auto}
.grade-queue-pos{font-size:12px;font-weight:800;color:var(--text-secondary);background:#eef2f8;padding:5px 10px;border-radius:99px}
.grade-mode-chip{font-size:11px;font-weight:800;padding:4px 10px;border-radius:99px}
.grade-mode-chip.todo{background:#fff3e0;color:#b45309}
.grade-mode-chip.done{background:#e7f6ee;color:#16794a}
.grade-prompt{padding:14px 16px;border:1px solid var(--line);border-left:3px solid var(--blue,#1d5bd6);border-radius:10px;background:#f7faff;margin-bottom:14px}
.grade-prompt small{color:var(--text-muted);font-weight:800;font-size:11px}
.grade-prompt h4{margin:3px 0 0;font-size:14px;color:var(--navy,#081b3a)}
.grade-prompt p{margin:6px 0 0;font-size:13px;line-height:1.55;color:var(--text);white-space:pre-wrap}
.lms-filter-row.is-focused{display:none}
@media(max-width:768px){.grade-head-side{justify-items:start;width:100%}}

/* P2.4: visible keyboard focus + mobile input sizing */
button:focus-visible,a:focus-visible,select:focus-visible,summary:focus-visible,[role="button"]:focus-visible{outline:3px solid #1d4ed8;outline-offset:2px;border-radius:10px}
input:focus-visible,textarea:focus-visible{border-color:#1d4ed8;box-shadow:0 0 0 3px rgba(29,78,216,.25)}
@media(max-width:768px){.field input,.field select,.field textarea,.input-wrap input,.admin-field input,.admin-field select,.admin-field textarea,.lms-input,.lms-select,.lms-textarea{font-size:16px}.grade-actionbar .btn,.wizard-actions .btn,.row-actions .btn,.toolbar-actions .btn,.cms-savebar .btn{min-height:46px}}
@media(max-width:430px){.grade-actionbar{padding-bottom:calc(10px + env(safe-area-inset-bottom))}.content,.page{padding-bottom:calc(84px + env(safe-area-inset-bottom))}}@media(max-height:420px){.grade-actionbar{position:static;margin:4px -10px 0;border-radius:12px}.content,.page{padding-bottom:calc(48px + env(safe-area-inset-bottom))}}

/* ===== Exam admin UI (Phase 5) ===== */
.exam-section-block{margin-bottom:14px}
.exam-wizard-head{margin-bottom:14px}
.exam-preview{height:auto;min-height:420px;max-height:70vh;overflow:auto;border:1px solid var(--line);border-radius:14px;background:#fff;padding:16px}
.exam-preview-section{margin:18px 0;padding-top:14px;border-top:1px dashed var(--line)}
.exam-preview-section h3{display:flex;align-items:center;gap:8px;font-size:15px;margin:0 0 8px}
.exam-review-form{margin-top:14px;padding-top:14px;border-top:1px dashed var(--line)}
@media(max-width:768px){.exam-preview{max-height:none}.q-option{width:100%;display:flex;text-align:left;justify-content:flex-start}}
/* Per-question listening controls: compact, scannable and usable on touch screens. */
.question-audio-manager{margin:1rem 0;padding:1rem;border:1px solid var(--line,#d9e1eb);border-radius:14px;background:var(--surface-muted,#f7f9fc)}
.question-audio-head{display:flex;align-items:center;justify-content:space-between;gap:1rem;margin-bottom:.8rem}.question-audio-head>div{display:grid;gap:.25rem}.audio-bulk-label{cursor:pointer;white-space:nowrap}
.question-audio-table{display:grid;gap:.55rem}.question-audio-row{display:grid;grid-template-columns:auto 2rem minmax(10rem,1.5fr) minmax(7rem,1fr) minmax(10rem,1fr) auto auto auto;align-items:center;gap:.55rem;padding:.65rem;border:1px solid var(--line,#d9e1eb);border-radius:10px;background:#fff}.question-audio-row.is-dragging{opacity:.55;border-color:var(--accent,#127a70)}.question-audio-row audio{width:100%;min-width:0}.question-audio-copy{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.question-audio-file{font-size:.84rem;color:var(--muted,#667085);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.audio-drag-handle{cursor:grab;color:var(--muted,#667085);font-weight:700;letter-spacing:-.2em}.btn-small{padding:.35rem .55rem;font-size:.78rem}.danger{color:#b42318}
.listening-player-shell{margin:1rem 0;padding:1rem;border:1px solid var(--line,#d9e1eb);border-radius:14px;background:linear-gradient(135deg,#f5fbfa,#fff)}.listening-player-meta{display:flex;justify-content:space-between;gap:1rem;margin-bottom:.5rem}.listening-player-shell audio{width:100%}.listening-player-shell audio.is-limit-reached{opacity:.5}/* Một đoạn nghe = một trình phát + đúng những câu hỏi của đoạn đó. */
.listening-player-title{display:flex;align-items:baseline;gap:8px;min-width:0}
.listen-qcount{color:var(--text-secondary,#475467);font-size:12.5px;font-weight:600;white-space:nowrap}
/* Cùng một đoạn nghe là MỘT khối: file nghe, đoạn đọc và các câu của nó nằm
 * chung một khung, không tách thành nhiều thẻ rời. Chỉ sang khung mới khi đổi
 * file nghe (tức đổi đoạn đọc đi kèm). */
.listen-group{margin:0 0 20px;padding:18px;border:1px solid var(--line,#d9e1eb);border-radius:16px;background:#fff}
.listen-group .listening-player-shell{margin:0;padding:0 0 12px;border:0;border-radius:0;background:#fff;position:sticky;top:8px;z-index:2}
.listen-group .listen-passage{margin:12px 0 0;padding:0;border:0;border-radius:0;background:none}
.listen-group .activity-questions{margin:16px 0 0;gap:18px}
.listen-group .question-block{padding:0;border:0;border-radius:0;background:none}
.listen-group .question-block+.question-block{padding-top:16px;border-top:1px solid var(--line,#d9e1eb)}
.listening-player-meta strong{color:var(--navy,#081b3a);font-size:14px}
.listen-count{font-size:12.5px;font-weight:700;color:var(--text-secondary,#475467)}
.listen-note{margin:.5rem 0 0}
.speaking-question-list{display:grid;gap:14px;margin:16px 0}.speaking-question-block{border:1px solid var(--line,#d9e1eb);border-radius:16px;padding:16px;background:linear-gradient(135deg,#fbfcff,#fff);display:grid;gap:12px}.speaking-question-head{display:flex;gap:12px;align-items:flex-start}.speaking-question-head h3{margin:0;color:var(--q-text,#d92d20);font-size:16px;line-height:1.45}.speaking-question-head .q-num{flex:0 0 30px}.speaking-reference{margin:6px 0 0;color:var(--text-muted,#667085);font-size:13px;line-height:1.5}.speaking-timer-row{display:flex;flex-wrap:wrap;gap:8px}.speaking-timer-row>span{font-size:12px;font-weight:700;color:var(--text-secondary,#475467);background:#eef3fb;border-radius:99px;padding:6px 10px}.speaking-question-actions{display:flex;align-items:center;gap:9px;flex-wrap:wrap}.speaking-question-actions audio{width:min(100%,360px);height:38px}.speaking-record-status{font-size:12px;color:var(--text-muted,#667085)}.speaking-record-btn.recording{background:#b42318;color:#fff}.speaking-text-fallback{min-height:64px}.speaking-question-block .field label{font-size:12px}.speaking-question-block .btn:disabled{opacity:.55;cursor:not-allowed}
@media(max-width:600px){.speaking-question-block{padding:13px}.speaking-question-actions{align-items:stretch}.speaking-question-actions .btn{min-height:44px}.speaking-question-actions audio{width:100%}.speaking-timer-row{gap:6px}}
.speaking-review-attempts{display:grid;gap:10px;margin:14px 0}.speaking-review-attempt{border:1px solid var(--line,#d9e1eb);border-radius:12px;padding:12px;background:#fbfcff;display:grid;gap:7px}.speaking-review-attempt>div{display:flex;justify-content:space-between;gap:8px;align-items:center}.speaking-review-attempt audio{width:100%;height:36px}.speaking-review-attempt p{margin:0;font-size:13px;line-height:1.5}.speaking-review-attempt small{color:var(--text-muted,#667085)}
.speaking-student-results{display:grid;gap:9px;margin:14px 0}.speaking-student-result{display:grid;grid-template-columns:auto 1fr;gap:5px 10px;padding:10px 12px;border:1px solid var(--line,#d9e1eb);border-radius:11px;background:#fbfcff;font-size:13px}.speaking-student-result audio{grid-column:1/-1;width:100%;height:34px}.speaking-student-result p,.speaking-student-result small{grid-column:1/-1;margin:0;line-height:1.45;color:var(--text-muted,#667085)}
@media (max-width:900px){.question-audio-row{grid-template-columns:auto 2rem minmax(8rem,1fr) minmax(7rem,1fr);}.question-audio-row audio{grid-column:3/-1}.question-audio-row label,.question-audio-row button{grid-row:3}.question-audio-row label{grid-column:3}.question-audio-row button{grid-column:4}.question-audio-head{align-items:flex-start;flex-direction:column}.listen-group .listening-player-shell{position:static}}

/* Speaking AI results (student) */
.speaking-progress{display:flex;align-items:center;gap:8px;color:var(--text-secondary);font-size:13px;margin:0 0 12px}
.speaking-student-result{border:1px solid var(--line);border-radius:14px;padding:16px;margin-bottom:12px;background:var(--surface-1)}
.speaking-student-result.is-pending{opacity:.75}
.speaking-result-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:10px}
.speaking-result-status{font-size:12px;color:var(--text-muted)}
.speaking-ai-score{margin-left:auto;font-size:24px;font-weight:700;color:var(--blue)}
.speaking-ai-score small{font-size:13px;color:var(--text-muted);font-weight:500}
.speaking-ai-note{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--text-muted);margin:8px 0}
.speaking-transcript{font-size:14px;margin:8px 0}
.speaking-chips{display:flex;flex-wrap:wrap;gap:8px;margin:8px 0}
.speaking-score-chip{display:inline-flex;flex-direction:column;align-items:center;padding:6px 12px;border:1px solid var(--line);border-radius:10px;background:var(--surface-2)}
.speaking-score-chip b{font-size:16px;color:var(--text)}
.speaking-score-chip span{font-size:11px;color:var(--text-muted)}
.speaking-pron h5,.speaking-corrections h5,.speaking-improved h5{font-size:13px;margin:12px 0 6px;color:var(--text-secondary)}
.speaking-weak{font-size:13px;color:var(--text-secondary);margin:6px 0}
.speaking-weak span{display:inline-block;padding:2px 8px;margin:2px 4px 2px 0;border-radius:999px;background:var(--surface-3);font-size:12px}
.speaking-rubric{display:grid;gap:8px;margin:10px 0}
.speaking-rubric-row{display:grid;grid-template-columns:1fr auto;gap:4px 12px;padding-bottom:8px;border-bottom:1px solid var(--line)}
.speaking-rubric-label{font-size:13px}
.speaking-rubric-score{font-size:13px;font-weight:600;color:var(--blue)}
.speaking-rubric-row small{grid-column:1/-1;color:var(--text-muted);font-size:12px}
.speaking-summary{font-size:14px;background:var(--surface-2);border-radius:10px;padding:12px;margin:10px 0}
.speaking-correction{border-left:3px solid var(--orange);padding:6px 0 6px 12px;margin-bottom:10px}
.speaking-wrong{margin:0;font-size:14px;color:var(--text-secondary);text-decoration:line-through}
.speaking-right{margin:2px 0;font-size:14px;color:var(--success);font-weight:600}
.speaking-correction small{color:var(--text-muted);font-size:12px}
.speaking-improved p{font-size:14px;background:var(--surface-2);border-radius:10px;padding:12px;margin:0}
@media (max-width:640px){.speaking-ai-score{margin-left:0;width:100%}}

/* Speaking exercise (student) — one card per question, one primary action */
.speak-top{display:flex;flex-wrap:wrap;align-items:baseline;gap:8px 16px;margin-bottom:16px}
.speak-prompt{margin:0;font-size:15px;color:var(--text-secondary);flex:1 1 320px}
.speak-progress{margin:0;font-size:13px;color:var(--text-muted);white-space:nowrap}
.speak-progress b{color:var(--text);font-size:15px}
.speak-card{border:1px solid var(--line);border-radius:14px;padding:16px 18px;margin-bottom:12px;background:var(--surface-1)}
.speak-card-head{display:flex;gap:12px;align-items:flex-start}
.speak-card-head h3{margin:0;font-size:16px;line-height:1.45;font-weight:600}
.speak-card .q-num{flex:0 0 26px;height:26px;border-radius:999px;background:var(--q-text,#d92d20);color:#fff;display:grid;place-items:center;font-size:13px;font-weight:700}
.speak-hint{margin:8px 0 0 38px;font-size:13px;color:var(--text-muted)}
.speak-actions{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin:14px 0 0 38px}
.speak-btn{min-width:132px;justify-content:center;gap:8px}
.speak-btn.is-recording{background:var(--danger);border-color:var(--danger)}
.speak-meta{font-size:13px;color:var(--text-muted)}
.speak-audio{display:block;width:100%;max-width:420px;margin:12px 0 0 38px}
.speak-nomic{margin:12px 0 0 38px;font-size:13px;color:var(--warning)}
.speak-fallback{margin:12px 0 0 38px}
.speak-fallback summary{font-size:13px;color:var(--text-muted);cursor:pointer;list-style:none}
.speak-fallback summary::-webkit-details-marker{display:none}
.speak-fallback summary::before{content:'▸ ';color:var(--text-muted)}
.speak-fallback[open] summary::before{content:'▾ '}
.speak-fallback textarea{margin-top:8px;min-height:80px}
.speak-submit{margin-top:8px}
@media (max-width:640px){
  .speak-card{padding:14px}
  .speak-hint,.speak-actions,.speak-audio,.speak-fallback,.speak-nomic{margin-left:0}
  .speak-btn{width:100%}
  .speak-meta{width:100%}
}

/* Submitted-answer result screen (student) — score ring + what went wrong */
.result-head{display:flex;align-items:center;gap:18px;margin-bottom:18px}
.result-ring{position:relative;width:84px;height:84px;flex:0 0 84px}
.result-ring svg{width:100%;height:100%;transform:rotate(-90deg)}
.result-ring circle{fill:none;stroke-width:3.4;stroke-linecap:round}
.result-ring .ring-bg{stroke:var(--line)}
.result-ring .ring-fg{stroke:var(--blue);transition:stroke-dasharray .4s ease}
.result-ring.is-full .ring-fg{stroke:var(--success)}
.result-ring-num{position:absolute;inset:0;display:grid;place-items:center;font-size:26px;font-weight:700;color:var(--blue);line-height:1}
.result-ring.is-full .result-ring-num{color:var(--success)}
.result-head-meta{display:grid;gap:3px;min-width:0}
.result-head-meta strong{font-size:17px;color:var(--text-primary)}
.result-head-meta small{font-size:13px;color:var(--text-muted)}
.result-note{color:var(--text-secondary)}
.result-table-wrap{overflow-x:auto;border:1px solid var(--line);border-radius:14px}
.result-table{width:100%;border-collapse:collapse;min-width:520px;font-size:14px}
.result-table th,.result-table td{padding:11px 14px;text-align:left;vertical-align:top;border-bottom:1px solid var(--line)}
.result-table thead th{font-size:12px;text-transform:uppercase;letter-spacing:.04em;color:var(--text-muted);font-weight:600;background:var(--surface-2)}
.result-table tbody tr:last-child td{border-bottom:0}
/* A wrong row is the one worth reading, so only it carries a tint and a colour bar. */
.result-table tbody tr.is-no{background:color-mix(in srgb,var(--danger) 5%,transparent)}
.result-table tbody tr.is-no .result-idx{box-shadow:inset 3px 0 0 var(--danger)}
.result-table tbody tr.is-ok .result-idx{box-shadow:inset 3px 0 0 color-mix(in srgb,var(--success) 55%,transparent)}
.result-idx{color:var(--text-muted);width:44px}
.result-q{display:block;line-height:1.45}
.result-why{display:block;margin-top:4px;color:var(--text-muted);font-size:12px}
.result-given,.result-exp{white-space:normal;max-width:220px}
.result-mark{font-style:normal;font-weight:700;margin-right:6px}
tr.is-ok .result-mark{color:var(--success)}
tr.is-no .result-mark{color:var(--danger)}
tr.is-no .result-given{color:var(--danger)}
tr.is-no .result-exp{color:var(--success);font-weight:600}
.result-blank{color:var(--text-muted);font-style:italic}
/* The tick/cross is decorative; screen readers get the word instead. */
.result-sr{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}
.result-actions{margin-top:16px;display:flex;justify-content:flex-end}
@media (max-width:640px){
  .result-head{gap:14px}
  .result-ring{width:68px;height:68px;flex-basis:68px}
  .result-ring-num{font-size:21px}
  .result-actions .btn{width:100%}
}

/* ===== Từ vựng ===================================================== */
/* Admin: một bảng sửa tại chỗ. Nhãn cột chỉ hiện ở dòng đầu để bảng không lặp
   lại năm chữ trên mỗi dòng; trên màn hẹp thì mỗi dòng xếp dọc và nhãn hiện lại. */
.vocab-editor{margin-bottom:18px}
.vocab-editor-head{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:14px}
.vocab-editor-head h2{margin:2px 0 0;font-size:18px}
.vocab-meta-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.3fr);gap:12px;margin-bottom:16px}
.vocab-cell{display:grid;gap:5px;min-width:0;font-size:11.5px;font-weight:800;color:var(--text-secondary)}
.vocab-cell input{width:100%;height:42px;padding:0 11px;border:1px solid var(--line);border-radius:10px;background:#fff;font-size:14px;font-weight:500;color:var(--text-primary)}
.vocab-cell input:focus{outline:2px solid var(--blue);outline-offset:-1px}
.vocab-edit-table{display:grid;gap:10px}
.vocab-edit-row{display:grid;grid-template-columns:24px minmax(110px,1fr) minmax(105px,1fr) minmax(105px,1fr) minmax(190px,1.7fr) minmax(120px,1.1fr) 40px;gap:8px;align-items:end}
.vocab-edit-row+.vocab-edit-row .vocab-cell>span{display:none}
.vocab-row-no{height:42px;display:grid;place-items:center;color:var(--text-muted);font-size:12px;font-weight:800}
.vocab-row-del{height:42px;min-height:42px;padding:0;display:grid;place-items:center}
.vocab-row-del svg{width:15px;height:15px}
.vocab-editor-actions{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-top:16px}
.vocab-editor-actions .helper{margin-right:auto}
.vocab-set-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:14px}
.vocab-set-card{display:grid;gap:10px;align-content:start}
.vocab-set-top{display:flex;justify-content:space-between;align-items:flex-start;gap:10px}
.vocab-set-top h3{margin:0;font-size:16.5px}
.vocab-set-top p{margin:4px 0 0;color:var(--text-secondary);font-size:12.5px}
.vocab-set-count b{font-size:19px;color:var(--blue)}
.vocab-chip-row{display:flex;flex-wrap:wrap;gap:6px}
.vocab-chip-row span{padding:3px 9px;border-radius:99px;background:#eef2f8;color:var(--text-secondary);font-size:12px;font-weight:700}
.vocab-chip-row .more{background:transparent;color:var(--text-muted)}
.vocab-set-actions{display:flex;gap:8px;flex-wrap:wrap}
.vocab-set-actions .btn{min-height:40px;font-size:12.5px;flex:1 1 auto;justify-content:center}
.vocab-set-actions .vocab-del{flex:0 0 auto;width:42px;padding:0}
.vocab-set-actions .vocab-del svg{width:15px;height:15px}
/* Học viên */
.vocab-set-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:14px}
.vocab-set-tile{display:grid;gap:6px;justify-items:start;text-align:left;padding:18px;border:1px solid var(--line);border-radius:16px;background:#fff;box-shadow:var(--shadow);cursor:pointer}
.vocab-set-tile:hover{border-color:var(--blue)}
.vocab-set-tile strong{font-size:16px;color:var(--text-primary)}
.vocab-set-tile small{color:var(--text-secondary);font-size:12.5px}
.vocab-tile-icon{display:grid;place-items:center;width:38px;height:38px;border-radius:12px;background:#eaf1ff;color:var(--blue)}
.vocab-tile-icon svg{width:18px;height:18px}
.vocab-tile-count{margin-top:2px;color:var(--blue);font-size:12px;font-weight:800}
.vocab-open-head{margin-bottom:16px}
.vocab-open-head h1{margin:4px 0 6px;font-size:26px}
.vocab-open-head p{margin:0 0 4px;color:var(--text-secondary)}
.vocab-open-head small{color:var(--text-muted);font-size:12.5px}
.vocab-card-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:14px}
.vocab-card{display:grid;gap:9px;align-content:start;padding:18px;border:1px solid var(--line);border-radius:16px;background:#fff;box-shadow:var(--shadow)}
.vocab-card-head{display:flex;justify-content:space-between;align-items:flex-start;gap:10px}
.vocab-card-head h3{margin:0;font-size:20px;color:var(--navy,#081b3a);overflow-wrap:anywhere}
.vocab-ipa{display:block;margin-top:2px;color:var(--text-muted);font-size:13.5px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}
.vocab-say{flex:none;width:38px;height:38px;display:grid;place-items:center;border:1px solid var(--line);border-radius:50%;background:#fff;color:var(--blue);cursor:pointer}
.vocab-say:hover,.vocab-say.is-playing{background:var(--blue);color:#fff;border-color:var(--blue)}
.vocab-say svg{width:17px;height:17px}
.vocab-card p{margin:0;font-size:13.5px;line-height:1.55;color:var(--text-primary)}
.vocab-label{display:block;color:var(--text-muted);font-size:10.5px;font-weight:800;letter-spacing:.05em;text-transform:uppercase;margin-bottom:2px}
.vocab-syllables{font-weight:700;letter-spacing:.02em}
.vocab-syn{display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.vocab-syn .vocab-label{width:100%}
.vocab-syn-chip{padding:3px 9px;border-radius:99px;background:#eaf1ff;color:var(--blue);font-size:12px;font-weight:700}
@media(max-width:900px){
  .vocab-meta-grid{grid-template-columns:1fr}
  .vocab-edit-row{grid-template-columns:1fr;gap:10px;padding:14px;border:1px solid var(--line);border-radius:14px;background:#fafbfd}
  .vocab-edit-row+.vocab-edit-row .vocab-cell>span{display:block}
  .vocab-row-no{justify-self:start;height:auto}
  .vocab-row-del{width:100%}
}

/* Sửa bài Nghe: mỗi khối là một đoạn nghe (một STT) và các câu hỏi của nó. */
.listen-edit-group{border:1px solid var(--line,#d9e1eb);border-radius:16px;padding:16px;margin:0;background:#fbfcff}
.listen-edit-head{display:flex;align-items:center;justify-content:space-between;gap:14px;flex-wrap:wrap;padding-bottom:12px;border-bottom:1px solid var(--line,#d9e1eb);margin-bottom:14px}
.listen-edit-title{display:grid;gap:3px;min-width:0}
.listen-edit-title strong{font-size:14.5px;overflow-wrap:anywhere}
.listen-edit-no{display:inline-block;width:fit-content;padding:3px 10px;border-radius:99px;background:#eaf1ff;color:var(--blue);font-size:11.5px;font-weight:800}
.listen-edit-audio{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.listen-edit-audio audio{height:36px;max-width:280px}
.listen-edit-questions{display:grid;gap:12px}
.listen-edit-manager{margin-bottom:14px}

/* ── Câu chưa trả lời (nộp bài thiếu) ───────────────────────────────── */
.answer-missing{border-color:#d92d20!important;background:#fff6f5!important;box-shadow:0 0 0 2px rgba(217,45,32,.35)}
/* Trong khối đoạn nghe / đoạn văn, câu hỏi không còn khung riêng, nên câu chưa
 * trả lời cần thêm đệm để nền đỏ nhạt đọc ra thành một ô. */
.listen-group .question-block.answer-missing,.reading-group .question-block.answer-missing{padding:12px;border-radius:12px}
.answer-missing .q-num{background:#d92d20!important;color:#fff!important;border-color:#d92d20!important}
.answer-missing .q-option{border-color:#f3c0bb}
.answer-missing textarea,.answer-missing .writing-area{border-color:#d92d20}
.answer-missing-tag{margin-left:auto;flex:0 0 auto;align-self:flex-start;background:#d92d20;color:#fff;font-size:11px;font-weight:700;line-height:1.6;border-radius:99px;padding:2px 10px;white-space:nowrap}
.answer-missing-pulse{animation:answerMissingPulse 1.3s ease-out 2}
@keyframes answerMissingPulse{0%{box-shadow:0 0 0 0 rgba(217,45,32,.5)}70%{box-shadow:0 0 0 12px rgba(217,45,32,0)}100%{box-shadow:0 0 0 0 rgba(217,45,32,0)}}
.question-block,.writing-part,.speak-card{scroll-margin-top:96px;scroll-margin-bottom:96px}

/* ── Các bài đã làm của một học viên ─────────────────────────────────── */
.student-card-actions{flex:none;display:flex;align-items:center;gap:8px}
.student-card-actions .btn{white-space:nowrap}
.student-card-actions .btn svg{width:15px}
.student-work{display:grid;gap:16px}
.student-work .detail-heading{display:flex;align-items:flex-start;gap:16px;flex-wrap:wrap}
.student-work .detail-title h2{margin:4px 0 2px}
.student-work .detail-title p{margin:0;color:var(--text-secondary,#475467);font-size:13px}
.work-tabs{display:flex;flex-wrap:wrap;gap:8px;padding-bottom:2px}
.work-tab{display:inline-flex;align-items:center;gap:8px;min-height:40px;padding:8px 14px;border:1px solid var(--line,#d9e1eb);border-radius:99px;background:#fff;color:var(--text-secondary,#475467);font-size:13px;font-weight:700;cursor:pointer}
.work-tab b{min-width:22px;padding:1px 7px;border-radius:99px;background:var(--surface-2,#eef3fb);color:var(--text,#101828);font-size:12px;text-align:center}
.work-tab:hover{border-color:#1759d7;color:#1759d7}
.work-tab.active{border-color:#1759d7;background:#1759d7;color:#fff}
.work-tab.active b{background:rgba(255,255,255,.22);color:#fff}
@media(max-width:700px){.student-card-actions{width:100%;flex-wrap:wrap}.student-card-actions .btn{flex:1 1 140px}.work-tabs{overflow-x:auto;flex-wrap:nowrap}}

/* ── Đoạn đọc trong bài Nghe (cấu trúc Excel giống bài Đọc) ──────────── */
.exercise-aq-table.editable .exercise-aq-head,.exercise-aq-table.editable .exercise-aq-row{grid-template-columns:56px 150px minmax(180px,1.3fr) minmax(200px,1.6fr) repeat(4,minmax(92px,1fr)) 130px 36px;min-width:1160px}
.exercise-aq-row .aq-passage-shared{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--admin-muted,var(--text-secondary));font-size:11.5px;font-style:italic}
.listen-edit-passage{margin:0 0 12px}
.listen-edit-passage textarea{width:100%;min-height:74px;line-height:1.55;resize:vertical;overflow-y:hidden}
.listen-edit-passage label .helper{margin-left:8px;font-weight:400}
.listen-passage{margin:0 0 14px}

/* ── Ảnh minh hoạ của câu hỏi ────────────────────────────────────────── */
.question-images{display:grid;grid-template-columns:1fr;gap:12px;margin:0 0 12px}
.question-image{margin:0}
.question-image-btn{display:block;width:100%;padding:0;border:0;background:none;cursor:zoom-in;line-height:0}
.question-image-btn:focus-visible{outline:2px solid #1759d7;outline-offset:3px;border-radius:6px}
.question-image img{display:block;max-width:100%;max-height:420px;margin:0 auto}
.image-zoom{position:fixed;inset:0;z-index:9999;display:grid;place-items:center;padding:24px;background:rgba(8,17,32,.9);cursor:zoom-out;animation:imageZoomIn .18s ease-out}
/* width (không phải max-width) để ảnh nhỏ cũng được phóng TO ra, đúng nghĩa
   "bấm để phóng to"; max-height giữ ảnh dọc nằm trọn trong màn hình. */
.image-zoom img{width:min(100%,1400px);max-height:calc(100vh - 48px);object-fit:contain;animation:imageZoomPop .22s cubic-bezier(.2,.9,.3,1.2)}
.image-zoom-close{position:absolute;top:14px;right:16px;width:42px;height:42px;display:grid;place-items:center;border:0;border-radius:50%;background:rgba(255,255,255,.14);color:#fff;font-size:26px;line-height:1;cursor:pointer}
.image-zoom-close:hover,.image-zoom-close:focus-visible{background:rgba(255,255,255,.28);outline:none}
body.image-zoom-open{overflow:hidden}
@keyframes imageZoomIn{from{opacity:0}to{opacity:1}}
@keyframes imageZoomPop{from{opacity:0;transform:scale(.94)}to{opacity:1;transform:scale(1)}}
.exercise-aq-table.editable .exercise-aq-head,.exercise-aq-table.editable .exercise-aq-row{grid-template-columns:56px 150px minmax(180px,1.3fr) minmax(200px,1.6fr) repeat(4,minmax(92px,1fr)) 130px 150px 36px;min-width:1320px}
.exercise-aq-row .aq-image{display:flex;align-items:center;gap:6px;min-width:0;flex-wrap:wrap}
.aq-image-item{position:relative;display:inline-flex;flex:0 0 auto}
.aq-image-item .aq-image-del{position:absolute;top:-7px;right:-7px;width:18px;height:18px;flex:0 0 18px;border-radius:99px;font-size:12px}
.exercise-aq-row .aq-image .btn{padding:6px 9px;min-height:32px;font-size:11.5px;white-space:nowrap}
.aq-image-thumb{width:34px;height:34px;flex:0 0 34px;border:1px solid var(--line,#d9e1eb);border-radius:7px;object-fit:cover;background:#fff}
.aq-image-del{width:24px;height:24px;flex:0 0 24px;display:grid;place-items:center;padding:0;border:1px solid var(--line,#d9e1eb);border-radius:6px;background:#fff;color:#b42318;font-size:15px;line-height:1;cursor:pointer}
.aq-image-del:hover{background:#fdeaea}
.qe-image-field label .helper{margin-left:8px;font-weight:400}
.qe-image{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.qe-image-thumb{width:74px;height:56px;border:1px solid var(--line,#d9e1eb);border-radius:8px;object-fit:cover;background:#fff;display:block}
.qe-image-item{position:relative;display:inline-flex;flex-direction:column;align-items:center;gap:3px;max-width:110px}
.qe-image-item.is-new .qe-image-thumb{border-color:#1759d7;box-shadow:0 0 0 2px rgba(23,89,215,.16)}
.qe-image-item .qe-image-name{max-width:100px}
.qe-image-drop{position:absolute;top:-6px;right:-6px;width:20px;height:20px;display:grid;place-items:center;padding:0;border:1px solid var(--line,#d9e1eb);border-radius:99px;background:#fff;color:#d92d20;font-size:14px;line-height:1;cursor:pointer}
.qe-image-drop:hover{background:#d92d20;color:#fff;border-color:#d92d20}
.qe-image-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:220px}

/* ── Chọn câu để sửa bằng nút ────────────────────────────────────────── */
.qe-tabs-bar{display:flex;align-items:flex-start;justify-content:space-between;gap:14px;flex-wrap:wrap}
.qe-tabs{display:flex;flex-wrap:wrap;gap:8px;margin:12px 0 14px;flex:1 1 320px;min-width:0}
.qe-tabs-actions{display:flex;align-items:center;gap:8px;margin:12px 0 14px;flex:0 0 auto}
.qe-tabs-actions .btn[disabled]{opacity:.45;cursor:default;pointer-events:none}
.qe-tab-wrap{position:relative;display:inline-flex}
.qe-tabs input.qe-tab-check{position:absolute;top:-6px;left:-6px;z-index:2;margin:0;padding:0;width:16px;min-width:0;height:16px;border:0;border-radius:3px;background:transparent;box-shadow:none;cursor:pointer;accent-color:#1759d7}
.qe-tab{position:relative;display:flex;flex-direction:column;align-items:center;gap:1px;min-width:74px;padding:8px 12px;border:1px solid var(--admin-line,var(--line,#d9e1eb));border-radius:11px;background:#fff;color:var(--text-secondary,#475467);cursor:pointer;line-height:1.25}
.qe-tab b{font-size:13px;font-weight:800;color:var(--text,#101828)}
.qe-tab small{font-size:10.5px;letter-spacing:.02em;opacity:.75}
.qe-tab:hover{border-color:#1759d7;color:#1759d7}
.qe-tab.active{border-color:#1759d7;background:#1759d7;box-shadow:0 6px 16px rgba(23,89,215,.24)}
.qe-tab.active b,.qe-tab.active small{color:#fff}
.qe-tab-flag{position:absolute;top:-6px;right:-6px;min-width:18px;height:18px;display:grid;place-items:center;padding:0 4px;border-radius:99px;background:#eef3fb;font-size:10px;line-height:1}
.qe-tab-flag.warn{background:#d92d20;color:#fff;font-weight:800}
.qe-tab.active .qe-tab-flag{background:#fff}
.qe-tab-panel{animation:qeTabIn .18s ease-out}
@keyframes qeTabIn{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}
@media(max-width:600px){.qe-tabs{overflow-x:auto;flex-wrap:nowrap;padding-bottom:4px}.qe-tab-wrap{flex:0 0 auto}.qe-tab{flex:0 0 auto}.qe-tabs-actions{margin-top:0}}

/* ── Bốn đáp án nằm cùng một hàng ────────────────────────────────────── */
.qe-choices{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px}
.qe-choices .field{margin:0;min-width:0}
.qe-choices .field label{font-size:11.5px;font-weight:800;color:var(--text-secondary,#475467)}
.qe-choices .field input{width:100%}
.qe-choices-field>label{display:block;margin-bottom:6px}
@media(max-width:820px){.qe-choices{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:460px){.qe-choices{grid-template-columns:1fr}}

/* Màn soạn/sửa bài không còn tiêu đề trang: chừa khoảng thở ở đầu để panel
   không dính vào thanh trên cùng. */
.wizard-top:empty{display:block;height:18px}
.wizard-top .wizard-steps{margin:0 0 16px}
.wizard-note{display:flex;align-items:center;justify-content:space-between;gap:16px}

/* ── Hộp giao bài cho lớp & học viên ─────────────────────────────────── */
.give-modal{position:fixed;inset:0;z-index:9998;display:grid;place-items:center;padding:24px;background:rgba(8,17,32,.55);animation:imageZoomIn .16s ease-out}
.preview-card{width:min(100%,1080px)}
.preview-modal-body{flex:1;min-height:0;padding:0 20px 20px;overflow:auto}
.preview-modal-body .preview-wrap{margin:0;height:100%}
.preview-modal-body .student-preview-frame{height:min(72vh,760px)}
.give-card{width:min(100%,860px);max-height:calc(100vh - 48px);display:flex;flex-direction:column;border-radius:18px;background:#fff;box-shadow:0 26px 70px rgba(8,17,32,.3);overflow:hidden;animation:qeTabIn .2s ease-out}
.give-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;padding:20px 22px 14px;border-bottom:1px solid var(--line,#d9e1eb)}
.give-head h3{margin:4px 0 2px;font-size:19px}
.give-close{width:36px;height:36px;flex:0 0 36px;display:grid;place-items:center;border:1px solid var(--line,#d9e1eb);border-radius:10px;background:#fff;color:var(--text-secondary,#475467);font-size:20px;line-height:1;cursor:pointer}
.give-close:hover{background:#f5f8ff;color:#1759d7}
.give-body{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0;flex:1;min-height:0;overflow:hidden}
.give-col{display:flex;flex-direction:column;min-height:0;padding:16px 18px}
.give-col+.give-col{border-left:1px solid var(--line,#d9e1eb)}
.give-col h4{margin:0 0 10px;font-size:12px;font-weight:800;letter-spacing:.04em;text-transform:uppercase;color:var(--text-secondary,#475467)}
.give-list{flex:1;min-height:0;overflow:auto;display:grid;gap:6px;align-content:start}
.give-row{display:flex;align-items:center;gap:10px;padding:9px 11px;border:1px solid var(--line,#d9e1eb);border-radius:10px;cursor:pointer}
.give-row:hover{border-color:#1759d7;background:#f7faff}
.give-row input{width:17px;height:17px;flex:0 0 17px;accent-color:#1759d7}
.give-row span{display:grid;min-width:0}
.give-row strong{font-size:13.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.give-row small{color:var(--text-secondary,#475467);font-size:11.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.give-foot{display:flex;align-items:flex-end;justify-content:space-between;gap:18px;flex-wrap:wrap;padding:14px 22px 18px;border-top:1px solid var(--line,#d9e1eb);background:#fbfcff}
.give-due{display:grid;gap:4px;font-size:12.5px;font-weight:700;color:var(--text-secondary,#475467)}
.give-due input{min-height:40px;padding:8px 10px;border:1px solid var(--line,#d9e1eb);border-radius:10px;font:inherit}
.give-due .helper{font-weight:400}
.give-actions{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.give-count{font-size:13px;color:var(--text-secondary,#475467)}
.give-count b{color:var(--text,#101828)}
@media(max-width:720px){.give-body{grid-template-columns:1fr}.give-col+.give-col{border-left:0;border-top:1px solid var(--line,#d9e1eb)}.give-card{max-height:calc(100vh - 24px)}}

/* Nhiều đoạn đọc trong cùng một bài Đọc */
/* Bài Đọc theo cùng quy tắc: mỗi đoạn văn và các câu của nó là một khối. */
.reading-group{padding:18px;border:1px solid var(--line,#d9e1eb);border-radius:16px;background:#fff}
.reading-group .reading-passage{margin:0;padding:0;border:0;border-radius:0;background:none}
.reading-group .activity-questions{margin:16px 0 0;gap:18px}
.reading-group .question-block{padding:0;border:0;border-radius:0;background:none}
.reading-group .question-block+.question-block{padding-top:16px;border-top:1px solid var(--line,#d9e1eb)}
.reading-group+.reading-group{margin-top:18px}
.reading-passage-no{display:block;margin-bottom:8px;color:var(--blue,#1759d7);font-size:11.5px;font-weight:800;letter-spacing:.06em;text-transform:uppercase}

/* Thanh trên cùng của màn soạn/sửa: nhãn kỹ năng bên trái, Quay lại / Xác nhận
   bên phải, dính lại khi cuộn để không phải kéo xuống đáy mới lưu được. */
.wizard-bar{grid-column:1/-1;position:sticky;top:0;z-index:20;display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap;margin:-4px -4px 14px;padding:10px 4px;background:#fff}
.wizard-bar .wizard-note{margin:0;flex:1 1 260px;min-width:0}
.wizard-bar .wizard-actions{margin:0 0 0 auto;flex:0 0 auto;display:flex;gap:10px}
@media(max-width:640px){.wizard-bar{align-items:stretch;flex-direction:column}.wizard-bar .wizard-actions{justify-content:flex-end}}

/* ── Bài nghe chế độ tự động ──────────────────────────────────────
 * Màn chờ "Bắt đầu", đồng hồ đếm ngược 3 giây và trạng thái của từng đoạn nghe.
 * Ở chế độ này thẻ <audio> không có nút bấm, nên dòng trạng thái là thứ duy nhất
 * cho học viên biết đang phát đoạn nào và còn bao lâu tới đoạn sau. */
.listen-auto-gate{display:flex;flex-direction:column;align-items:center;gap:12px;margin:0 0 8px;padding:36px 24px;border:1px solid var(--line,#d9e1eb);border-radius:18px;background:linear-gradient(180deg,#f5f9ff,#fff);text-align:center}
.listen-auto-badge{display:inline-flex;align-items:center;gap:8px;padding:6px 14px;border-radius:999px;background:#e8f0ff;color:#1759d7;font-size:12.5px;font-weight:800}
.listen-auto-badge svg{width:16px;height:16px}
.listen-auto-gate strong{font-size:20px;font-weight:800;color:var(--text-primary,#101828)}
.listen-auto-gate p{max-width:52ch;margin:0;color:var(--text-secondary,#475467);font-size:14px;line-height:1.6}
.listen-auto-start{min-width:180px;padding:14px 32px;font-size:16px;font-weight:800}
.listen-auto-hint{display:flex;align-items:flex-start;gap:8px;margin:0 0 16px;padding:12px 14px;border:1px solid #cfe0ff;border-radius:12px;background:#f2f7ff;color:#0b2f6b;font-size:13px;line-height:1.55}
.listen-auto-hint svg{flex:0 0 auto;width:18px;height:18px;margin-top:1px}
/* display:flex của tác giả thắng display:none của trình duyệt, nên [hidden] phải nói rõ. */
/* Trình duyệt có sẵn cơ chế "neo cuộn": khi một khối cao lên, nó tự kéo trang để giữ
 * phần bên dưới đứng yên — hệ quả là mọi thứ phía TRÊN bị đẩy lên, đúng cảm giác nhảy
 * trang mà giáo viên thấy khi thêm ảnh. Trong màn soạn bài, thao tác luôn xuất phát từ
 * chỗ giáo viên đang nhìn, nên trang cứ dài thêm ra là đúng, không cần kéo gì cả. */
.wizard-panel,.exercise-create-table{overflow-anchor:none}
.listen-auto-gate[hidden],.listen-auto-body[hidden],.listen-countdown[hidden]{display:none!important}
/* Hết lượt thì không còn gì để phát nữa — bỏ nhãn "Chờ phát" cho khỏi hiểu nhầm. */
.listen-auto-spent .listen-auto-state{display:none}
.qe-answer-pick{margin-top:10px}
.qe-answer-pick select{width:100%;min-height:42px;padding:9px 10px;border:1px solid var(--line,#d9e1eb);border-radius:10px;background:#fff;font:inherit}
.qe-answer-pick label{color:#0b2f6b;font-weight:800}
.qe-add-note{display:block;margin-top:10px;color:var(--text-secondary,#475467);line-height:1.55}
.create-warn-banner{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin:0 0 16px;padding:14px 16px;border:1px solid #f5a524;border-left:5px solid #f5a524;border-radius:12px;background:#fff8ef}
.create-warn-banner strong{display:block;color:#8a4b00;font-size:14px;font-weight:800}
.create-warn-banner p{margin:4px 0 0;color:#8a4b00;font-size:13px;line-height:1.55}
.create-warn-banner small{display:block;margin-top:4px;color:#8a4b00;opacity:.85;font-size:12.5px}
.listen-auto-hint.is-spent{border-color:#ffd8a8;background:#fff8ef;color:#8a4b00}
.listen-countdown{position:fixed;inset:0;z-index:60;display:flex;align-items:center;justify-content:center;background:rgba(9,24,48,.72);backdrop-filter:blur(3px)}
.listen-countdown-inner{display:flex;flex-direction:column;align-items:center;gap:10px;color:#fff}
.listen-countdown-inner span{display:flex;align-items:center;justify-content:center;width:150px;height:150px;border:4px solid rgba(255,255,255,.35);border-radius:50%;font-size:76px;font-weight:800;line-height:1;animation:listenPop .45s ease-out}
.listen-countdown-inner span.is-pop{animation:listenPop .45s ease-out}
.listen-countdown-inner small{color:#fff;font-size:14px;font-weight:600;letter-spacing:.02em;opacity:.9}
@keyframes listenPop{from{transform:scale(.6);opacity:.2}to{transform:scale(1);opacity:1}}
.listen-auto-state{display:inline-flex;align-items:center;gap:8px;margin:4px 0 0;padding:6px 12px;border-radius:999px;background:#f2f4f7;color:var(--text-secondary,#475467);font-size:12.5px;font-weight:700}
.listen-auto-dot{width:9px;height:9px;border-radius:50%;background:#98a2b3}
.listen-auto-state.is-playing{background:#e8f0ff;color:#0b2f6b}
.listen-auto-state.is-playing .listen-auto-dot{background:#1759d7;animation:listenPulse 1s ease-in-out infinite}
.listen-auto-state.is-next{background:#fff4e5;color:#8a4b00}
.listen-auto-state.is-next .listen-auto-dot{background:#f79009;animation:listenPulse 1s ease-in-out infinite}
.listen-auto-state.is-done{background:#e7f7ee;color:#05603a}
.listen-auto-state.is-done .listen-auto-dot{background:#12b76a}
.listen-auto-state.is-error{background:#fff6f5;color:#912018}
.listen-auto-state.is-error .listen-auto-dot{background:#d92d20}
@keyframes listenPulse{0%,100%{transform:scale(1);opacity:1}50%{transform:scale(1.5);opacity:.55}}
/* Chế độ tự động vẫn cho học viên NHÌN thấy thanh thời lượng như bài tự bấm — biết
 * đoạn dài bao nhiêu, đang chạy tới đâu — nhưng không thao tác được: máy tự phát,
 * không tua, không dừng, không nghe lại. */
.listen-group.is-auto .listen-audio{pointer-events:none}
.listen-group.is-auto .listen-audio:focus{outline:none}
/* Đoạn đang phát phải nhận ra được từ xa, không cần đọc chữ. Viền dày gấp đôi,
 * quầng sáng nhấp nháy theo, nền ngả xanh nhạt và một vạch màu dọc mép trái.
 * padding bớt 1px để viền dày thêm không làm cả khối nhích chỗ. */
.listen-group.is-playing{
  border-color:#1759d7;border-width:2px;padding:17px;
  background:linear-gradient(180deg,#f2f7ff,#fff 140px);
  box-shadow:0 0 0 4px rgba(23,89,215,.18),0 10px 26px rgba(23,89,215,.16);
  animation:listenGroupGlow 1.6s ease-in-out infinite}
/* Vạch dọc mép trái — dấu hiệu thứ hai, không phụ thuộc màu sắc. */
.listen-group.is-playing::before{content:'';position:absolute;left:0;top:12px;bottom:12px;width:5px;border-radius:0 5px 5px 0;background:#1759d7}
.listen-group{position:relative}
.listen-group.is-playing .listening-player-title strong{color:#1759d7}
@keyframes listenGroupGlow{
  0%,100%{box-shadow:0 0 0 4px rgba(23,89,215,.18),0 10px 26px rgba(23,89,215,.16)}
  50%{box-shadow:0 0 0 8px rgba(23,89,215,.10),0 10px 26px rgba(23,89,215,.22)}}
/* Chọn chế độ trong màn soạn bài Nghe. */
.listen-mode-opts{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}
@media(max-width:720px){.listen-mode-opts{grid-template-columns:1fr}}
.listen-mode-opt{display:flex;align-items:flex-start;gap:10px;margin:0;padding:14px;border:1px solid var(--line,#d9e1eb);border-radius:14px;background:#fff;cursor:pointer}
.listen-mode-opt input{flex:0 0 auto;width:18px;min-width:0;height:18px;margin:2px 0 0;padding:0;accent-color:#1759d7;cursor:pointer}
.listen-mode-opt span{display:flex;flex-direction:column;gap:4px;min-width:0}
.listen-mode-opt strong{font-size:14px;font-weight:800;color:var(--text-primary,#101828)}
.listen-mode-opt small{color:var(--text-secondary,#475467);font-size:12.5px;line-height:1.5}
.listen-mode-opt.is-on,.listen-mode-opt:has(input:checked){border-color:#1759d7;border-width:2px;padding:13px;background:#f2f7ff;box-shadow:0 0 0 3px rgba(23,89,215,.14)}

/* Tên file Excel đang dùng: ô chọn file luôn trông rỗng sau khi màn hình vẽ lại,
   nên phải nói rõ hệ thống vẫn đang giữ file nào. */
.exercise-create-file .helper.file-picked{color:var(--ok,#0f7b4f);font-weight:600}

/* Thời gian làm bài Đọc: học viên phải thấy đồng hồ ngay đầu bài, không phải cuộn
   đi tìm; và ô đặt giờ ở màn tạo nằm cạnh nút Tạo bài tập giống ô chế độ bài Nghe. */
.reading-meta{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px 14px;margin:0 0 14px;padding:10px 14px;border:1px solid var(--line,rgba(30,70,120,.16));border-radius:12px;background:var(--surface-2,rgba(30,70,120,.04))}
.reading-meta .writing-countdown{font-weight:600}
.reading-time-create{flex:0 0 auto;display:flex;flex-direction:column;gap:6px;min-width:190px}
.reading-time-create-label{color:var(--admin-text,var(--text));font-size:13px;font-weight:700}
.reading-time-create input{width:100%}
@media(max-width:860px){.reading-time-create{min-width:0;width:100%}}

/* Bài Viết: ai chấm — AI hay giáo viên. Phải nhìn là biết ngay, vì một điểm do máy
   đặt ra trông y hệt điểm giáo viên đã duyệt. */
.graded-by-chip{display:inline-flex;align-items:center;gap:5px;padding:2px 9px;border-radius:999px;font-size:12px;font-weight:700;line-height:1.7;white-space:nowrap}
.graded-by-chip.is-ai{background:rgba(120,80,200,.14);color:#5b3fa8}
.graded-by-chip.is-teacher{background:rgba(15,123,79,.14);color:#0f7b4f}
.status-new.st-ai{background:rgba(120,80,200,.14);color:#5b3fa8}
.review-banner.ai{display:flex;gap:10px;align-items:flex-start;padding:12px 14px;border-radius:12px;border:1px solid rgba(120,80,200,.3);background:rgba(120,80,200,.08);margin-bottom:10px}
.review-banner.ai strong{display:block}
.review-banner.ai span{display:block;font-size:13px;opacity:.85}
.pending-review-note.is-ai{border-color:rgba(120,80,200,.35);background:rgba(120,80,200,.08);color:#4a3487}
@media (prefers-color-scheme:dark){
  .graded-by-chip.is-ai,.status-new.st-ai{background:rgba(150,120,235,.22);color:#c9b6ff}
  .graded-by-chip.is-teacher{background:rgba(52,199,133,.2);color:#8ce5bb}
  .pending-review-note.is-ai{color:#cdbcff}
}
.exercise-excel-preview .aq-minutes{width:100%;max-width:84px;min-height:34px;padding:4px 8px;border:1px solid var(--admin-line,var(--line,#cfd8e3));border-radius:8px;background:var(--admin-surface,var(--surface,#fff));color:var(--admin-text,var(--text));font:inherit;font-size:13px}
.exercise-excel-preview .aq-minutes:focus{outline:2px solid var(--primary,#1f6feb);outline-offset:1px}
.qe-minutes{max-width:220px}
input[name=suggested_minutes][readonly]{background:var(--admin-soft,var(--surface-2,#f3f6fa));cursor:default}
/* Chỉ số thứ tự câu giữ màu đỏ; chữ câu hỏi màu đen cho dễ đọc. */
.question-block h4,.writing-part-head h3,.speaking-question-head h3,.speak-card-head h3{color:var(--text,#10213d)}
/* Số thứ tự trong vòng đỏ dùng chữ đen, không dùng chữ trắng. */
.q-num,.speak-card .q-num{color:#10213d}
.answer-missing .q-num{color:#10213d!important}
