/* Colors carefully matched to the real REVOLISH emblem: navy #020B2D, gold #EFBB43. */
:root{--navy:#020b2d;--blue:#20345d;--mint:#986816;--bg:#f5f7fb;--ink:#172642;--muted:#64748a;--line:#dce3ec;--white:#fff;--warn:#a96325;--gold:#efbb43;--gold-deep:#a87513;--gold-tint:#fff6e4;--navy-tint:#edf1fa}
*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--ink);font-family:-apple-system,BlinkMacSystemFont,"Pretendard","Noto Sans KR",Arial,sans-serif;font-size:15px}button,input,select,textarea{font:inherit}button{cursor:pointer}button:disabled{opacity:.5;cursor:not-allowed}a{color:var(--mint)}.shell{max-width:1220px;margin:0 auto;padding:24px}.top{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:24px}.brand{font-size:19px;letter-spacing:-.6px;font-weight:900}.brand em{color:var(--mint);font-style:normal}.small{font-size:12px;color:var(--muted)}.flex{display:flex;align-items:center;gap:9px;flex-wrap:wrap}.grow{flex:1}.card{background:#fff;border:1px solid var(--line);border-radius:17px;padding:21px;box-shadow:0 3px 12px rgba(15,60,77,.035)}.box{padding:14px;border-radius:12px;background:#f6f9fa}.grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}.grid3{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px}.stack{display:flex;flex-direction:column;gap:15px}.main-title{font-size:26px;letter-spacing:-1px;margin:0 0 5px}h2{margin:0 0 12px;font-size:19px;letter-spacing:-.6px}h3{margin:0 0 9px;font-size:16px}p{line-height:1.55}label{display:block;font-size:13px;color:#526b78;font-weight:700;margin-bottom:7px}input,select,textarea{width:100%;border:1px solid #d6e1e6;border-radius:10px;background:#fff;padding:12px;color:var(--ink);outline-color:var(--mint)}textarea{min-height:115px;resize:vertical;line-height:1.6}.btn{border:1px solid #d6e1e6;background:#fff;border-radius:10px;padding:10px 14px;font-size:14px;font-weight:800;color:var(--ink)}.btn.primary{background:var(--mint);color:#fff;border-color:var(--mint)}.btn.dark{background:var(--navy);color:white;border-color:var(--navy)}.btn.sm{font-size:12px;padding:7px 11px}.btn.full{width:100%}.btn.danger{color:#9b3838;border-color:#f3d8d8}.notice{padding:13px 15px;border-radius:12px;background:#ecf6f2;color:#165c50;font-size:13px;line-height:1.6}.notice.warn{background:#fff5eb;color:#874c20}.muted{color:var(--muted)}.tabs{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:20px}.tab{border:1px solid var(--line);border-radius:10px;background:#fff;padding:10px 13px;font-weight:800}.tab.active{background:var(--navy);border-color:var(--navy);color:#fff}.metric{padding:19px;border-radius:13px;background:#f7fafb;border:1px solid var(--line)}.metric strong{display:block;font-size:26px}.metric span{display:block;font-size:12px;color:var(--muted);margin-top:4px}.table-wrap{overflow-x:auto}table{width:100%;border-collapse:collapse;min-width:600px}th,td{padding:12px 10px;text-align:left;border-bottom:1px solid #e8eef1;font-size:13px;vertical-align:middle}th{font-size:12px;color:var(--muted)}.badge{display:inline-block;border-radius:99px;background:#e8f4ef;color:#187562;padding:4px 9px;font-size:12px;font-weight:800}.badge.warn{background:#fff1e0;color:#af5c19}.page-login{min-height:100vh;display:grid;place-items:center;padding:22px}.login{width:min(100%,460px)}.login .card{padding:29px}.login .brand{font-size:26px;margin-bottom:13px}.field{margin-bottom:15px}.sep{height:1px;background:var(--line);margin:18px 0}.pill{font-size:12px;border-radius:99px;background:#e7f2ee;color:var(--mint);padding:5px 9px;font-weight:700}.q{padding:17px 0;border-bottom:1px solid var(--line);scroll-margin-top:140px}.q:last-child{border-bottom:0}.q-head{display:flex;align-items:flex-start;gap:10px;margin-bottom:10px}.num{border-radius:9px;background:#e4f2ed;color:#087866;min-width:34px;text-align:center;padding:7px;font-weight:900}.choices{display:grid;gap:7px}.choice{border:1px solid #dfebed;border-radius:10px;padding:10px 12px;display:flex;align-items:flex-start;gap:10px;cursor:pointer}.choice:has(input:checked){background:#e9f7f2;border-color:#18a389}.choice input{width:auto;margin:3px 0 0;accent-color:var(--mint)}.exam-figure{max-width:min(100%,470px);border:1px solid var(--line);border-radius:12px;margin:10px 0;display:block}.sticky{position:sticky;top:0;z-index:10;background:#f5f7f8ec;backdrop-filter:blur(10px);padding:10px 0}.audio{width:100%;margin:10px 0}.review-tile{border:1px solid #e0e9eb;border-radius:12px;padding:12px;margin:7px 0}.review-tile.done{border-color:#98d6c8;background:#f1faf7}.q-select{display:grid;grid-template-columns:repeat(9,1fr);gap:6px}.q-btn{font-weight:800;border:1px solid #d8e5e8;border-radius:9px;padding:7px 0;background:#fff}.q-btn.done{background:var(--mint);color:white;border-color:var(--mint)}.answer-mark{font-size:13px;font-weight:800;color:var(--mint)}.layout{display:grid;grid-template-columns:minmax(0,1fr) 280px;gap:17px}.side{position:sticky;top:150px;align-self:start}.footer{font-size:12px;color:var(--muted);text-align:center;padding:24px}.form-row{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.error{color:#b23e3e;font-size:13px;margin:9px 0}.success{color:#158169;font-weight:800}.space{height:14px}.hidden{display:none!important}
@media(max-width:800px){.shell{padding:13px}.layout{grid-template-columns:1fr}.side{position:static}.q-select{grid-template-columns:repeat(9,1fr)}.grid{grid-template-columns:1fr}.grid3{grid-template-columns:repeat(2,minmax(0,1fr))}.card{padding:15px}.top{align-items:flex-start}.main-title{font-size:21px}.form-row{grid-template-columns:1fr}}

/* Image-based listening papers: keep original paper visible beside answer controls. */
.visual-split{display:grid;grid-template-columns:minmax(0,1.05fr) minmax(0,1fr);gap:12px;align-items:start}
.visual-paper{position:sticky;top:145px;max-height:calc(100vh - 165px);overflow:auto}
@media(max-width:1050px){.layout:has(.visual-split){grid-template-columns:1fr}.visual-split{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}}
@media(max-width:700px){.visual-split{grid-template-columns:1fr}.visual-paper{position:static;max-height:none}}

/* Multi-class assignment: easy to select and review each destination class. */
.select-classes-head{display:flex;align-items:center;flex-wrap:wrap;gap:8px;margin:8px 0 10px}
.class-choice-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;max-height:260px;overflow-y:auto;padding:3px}
.class-choice{display:flex;align-items:center;gap:10px;margin:0;padding:12px;border:1px solid var(--line);border-radius:11px;cursor:pointer;font-weight:normal;background:white}
.class-choice:has(input:checked){background:#eaf7f2;border-color:#48ad95}
.class-choice input{flex:none;width:18px;height:18px;margin:0;accent-color:var(--mint)}
.class-choice strong{display:block;font-size:14px;color:var(--ink)}
.class-choice .small{display:block;margin-top:2px}
@media(max-width:540px){.class-choice-list{grid-template-columns:1fr}}


/* Academy logo */
.brand-wrap{display:flex;align-items:center;gap:12px}
.brand-logo{width:52px;height:52px;object-fit:contain;border-radius:50%;background:#fff;border:1px solid #d9e4ea;box-shadow:0 2px 8px rgba(15,60,77,.06)}
.brand-block{display:flex;flex-direction:column;gap:4px}
.brand-sub{font-size:12px;color:var(--muted);font-weight:700;letter-spacing:.2px}
.login .brand-wrap{justify-content:center;margin-bottom:14px}
.login .brand-logo{width:80px;height:80px;border:0;box-shadow:none;background:transparent}
.login .brand-block{align-items:center}
@media(max-width:640px){.brand-logo{width:44px;height:44px}.login .brand-logo{width:68px;height:68px}.brand{font-size:17px}}


/* ── REVOLISH brand skin v4.3: visual changes only ── */
body{background:linear-gradient(180deg,#f5f7fc 0%,#fbfcfe 85%);color:var(--ink)}
.shell{max-width:1220px}
.top{padding:7px 0 22px;margin-bottom:21px;border-bottom:1px solid #e2e7f0}
.brand{color:var(--navy);letter-spacing:-.75px;font-weight:900}
.brand em{color:var(--gold-deep)}
.brand-sub{color:#66738c}
.brand-logo{box-shadow:0 0 0 2px #efbb433b,0 4px 12px #020b2d13;border:0;background:transparent;object-fit:cover}
.login .brand-logo{box-shadow:0 0 0 3px #efbb4355,0 9px 25px #020b2d18}
.pill{background:#fff1ce;color:#704b08;border:1px solid #f1db9b}
.card{border-color:#e0e6ef;box-shadow:0 7px 25px rgba(2,11,45,.045)}
.login .card{padding:32px;border-top:4px solid var(--gold);box-shadow:0 22px 65px rgba(2,11,45,.10)}
.login .brand-wrap{margin-bottom:24px}
.main-title,h2,h3{color:var(--navy)}
.muted,.small,.footer{color:var(--muted)}
label{color:#263955}
a{color:#896017;text-underline-offset:3px}
a:hover{color:#5f400c}
:focus-visible{outline:3px solid var(--gold);outline-offset:2px}
input,select,textarea{border-color:#d1dae7;background:#fff;color:var(--ink)}
input:focus,select:focus,textarea:focus{border-color:#d49f30;outline:2px solid #efbb4366;outline-offset:0}
input[type=checkbox],input[type=radio]{accent-color:#bd8725}
.btn{border-color:#cdd7e6;color:var(--navy);background:#fff;transition:background-color .16s,box-shadow .16s,border-color .16s}
.btn:hover:not(:disabled){background:#f2f5fb;border-color:#a5b4cb}
.btn.primary{background:var(--navy);border-color:var(--navy);color:#fff;box-shadow:inset 0 -3px 0 #b88623}
.btn.primary:hover:not(:disabled){background:#162857;border-color:#162857}
.btn.dark{background:#162857;border-color:#162857;color:#fff}
.btn.danger{color:#9b3838}
.tabs{gap:9px;margin-bottom:23px}
.tab{background:#fff;border-color:#d5ddec;color:#263655;border-radius:11px;padding:12px 16px;transition:background-color .16s,border-color .16s}
.tab:hover:not(.active){background:var(--gold-tint);border-color:#ebca82}
.tab.active{background:var(--navy);border-color:var(--navy);color:#fff;box-shadow:inset 0 -4px 0 var(--gold)}
.metric{background:linear-gradient(145deg,#fffdf8 0%,#f3f5fc 100%);border-color:#dce3ee;border-left:4px solid var(--gold)}
.metric strong{color:var(--navy)}
.badge{background:#fff1cf;color:#79520c}
.badge.warn{background:#fff1e1;color:#9d5219}
.notice{background:#edf2fa;color:#244066;border-left:3px solid #b6c5df}
.notice.warn{background:#fff6e7;color:#875717;border-left-color:var(--gold)}
.box{background:#f4f6fa;border:1px solid #e7ebf3}
.sep{background:#dde4ef}
th{color:#526581;background:#f9fafd}
th,td{border-bottom-color:#e5eaf2}
.num{background:#fff1c9;color:#70490d;border:1px solid #eac87d}
.choice{border-color:#dfe5ef;background:#fff}
.choice:has(input:checked){background:#fff7e5;border-color:#d69e2e;box-shadow:0 0 0 1px #e9c777 inset}
.choice input{accent-color:#bd8725}
.exam-figure{border-color:#dce3ec}
.q{border-bottom-color:#e3e9f1}
.answer-mark{color:#876119}
.q-btn{border-color:#d8e0eb;color:var(--navy)}
.q-btn.done{background:var(--navy);border-color:var(--navy);color:var(--gold)}
.review-tile{border-color:#dfe6f0}
.review-tile.done{background:#f1f7f3;border-color:#a1cdb4}
.class-choice{border-color:#dbe2ed}
.class-choice:has(input:checked){background:#fff7e6;border-color:#dba945}
.class-choice input{accent-color:#bd8725}
.success{color:#22744b}
.error{color:#b23e3e}
.sticky{background:#f5f7fbed}
.footer{letter-spacing:.1px}
@media(max-width:640px){
 .top{padding:6px 0 15px;margin-bottom:19px}
 .brand{letter-spacing:-.5px}
 .brand-sub{font-size:11px}
 .tab{padding:10px 11px;font-size:13px}
 .login .card{padding:23px}
}


/* v4.4 - Read-only results grouped by assigned class */
.results-toolbar{display:flex;align-items:end;justify-content:space-between;gap:20px;margin-bottom:14px}
.results-toolbar h2{margin-bottom:5px}
.results-toolbar p{margin:0;max-width:700px}
.results-filter{flex:0 0 245px;max-width:100%}
.results-filter select{width:100%;font-weight:750}
.results-overview{margin-bottom:16px}
.results-groups{display:flex;flex-direction:column;gap:16px}
.results-group{border:1px solid #dce3ee;border-radius:17px;overflow:hidden;background:#fff;box-shadow:0 7px 25px rgba(2,11,45,.045)}
.results-group-heading{display:flex;align-items:center;flex-wrap:wrap;justify-content:space-between;gap:12px 22px;padding:18px 21px;cursor:pointer;list-style:none;background:linear-gradient(100deg,#fffdfa,#f5f7fb);border-left:4px solid #efbb43}
.results-group-heading::-webkit-details-marker{display:none}
.results-group-heading::after{content:'⌄';font-size:25px;line-height:1;color:#94712d;margin-left:auto}
.results-group[open] .results-group-heading{border-bottom:1px solid #e5eaf2}
.results-group[open] .results-group-heading::after{transform:rotate(180deg)}
.results-group-label{display:flex;flex-direction:column;gap:3px}
.results-group-label strong{font-size:19px;color:#020b2d}
.results-group-numbers{display:flex;flex-wrap:wrap;gap:8px}
.results-group-numbers span{font-size:12px;font-weight:750;padding:7px 10px;border-radius:99px;background:#f0f3f9;color:#354666}
.results-group-body{padding:20px 21px 24px}
.results-group-body h3{margin:0 0 12px}
.results-task{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:9px 16px;padding:13px 0;border-bottom:1px solid #ecf0f5}
.results-task-name{flex:1;min-width:210px}
.results-task-name strong{color:#14264b;font-size:14px}
.results-task-name .small{margin-top:4px;line-height:1.5}
.results-task-stats{display:flex;gap:8px;flex-wrap:wrap}
.results-stat{font-size:12px;font-weight:700;background:#fff6e6;color:#78541c;border:1px solid #f0dcaa;padding:6px 9px;border-radius:8px}
.results-student-title{margin-top:21px!important}
.results-footnote{margin:14px 0 0;line-height:1.7}
@media(max-width:700px){.results-toolbar{flex-direction:column;align-items:stretch}.results-filter{flex:auto}.results-group-heading{padding:14px 15px}.results-group-body{padding:16px 13px}.results-group-numbers{gap:6px}.results-group-numbers span{padding:6px 8px}.results-task-stats{width:100%}}

/* v4.5 weekly assignment release scheduling */
.schedule-top{margin-bottom:16px;border-top:3px solid var(--gold,#efbb43)}
.schedule-top p{margin:8px 0 13px}
.schedule-layout{align-items:start}
.schedule-controls{display:grid;grid-template-columns:repeat(2,minmax(0,250px));gap:14px;margin:15px 0 19px}
.weekly-rows{display:grid;gap:11px;margin-bottom:18px}
.weekly-row{padding:17px;background:#fafbfe;border:1px solid #dce2ee;border-radius:13px}
.weekly-row-label{display:flex;align-items:center;flex-wrap:wrap;gap:9px;margin-bottom:11px}
.weekly-row-label strong{color:#071335;font-size:17px}
.weekly-row-fields{display:grid;grid-template-columns:1.1fr 1.25fr .9fr;gap:12px}
.weekly-row .field{margin-bottom:0}
.schedule-checkbox{display:flex;align-items:center;gap:9px;margin:12px 0 17px;cursor:pointer}
.schedule-checkbox input{width:18px;height:18px;accent-color:var(--navy);flex:none}
.scheduled-assignments{max-height:420px;overflow:auto;padding-right:4px}
.scheduled-assignments .review-tile{margin-bottom:8px}
@media(max-width:850px){.weekly-row-fields{grid-template-columns:1fr 1fr}.weekly-row-fields .field:last-child{grid-column:1/-1}}
@media(max-width:560px){.weekly-row-fields,.schedule-controls{grid-template-columns:1fr}.weekly-row-fields .field:last-child{grid-column:auto}.schedule-controls{gap:0}}

/* Optional answer-sheet reader & explicit teacher verification */
.answer-sheet-card{border:1px solid #ded6b6;background:#fffdf6;border-radius:14px;padding:16px;margin:12px 0 18px}
.answer-sheet-review{display:grid;grid-template-columns:minmax(0,1.1fr) minmax(260px,1fr);gap:16px;margin-top:15px}
.answer-sheet-preview{border:1px solid var(--line);border-radius:12px;background:#fff;padding:10px;min-width:0}
.answer-sheet-preview img,.answer-sheet-preview canvas{max-width:100%;height:auto;display:block;margin:auto}
.answer-sheet-preview img{max-height:600px;object-fit:contain}
.answer-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;margin:10px 0 14px}
.answer-grid label{margin:0;min-width:0;padding:7px;border:1px solid #dce5ea;border-radius:9px;background:#fff;color:var(--ink)}
.answer-grid label.answer-uncertain{border-color:#d99b5b;background:#fff4e4}
.answer-grid label span{display:block;font-size:12px;margin-bottom:5px}
.answer-grid select{padding:7px;min-width:0}
.answer-verify{display:flex;align-items:center;gap:10px;padding:12px;background:#f5f7fb;border-radius:11px;cursor:pointer!important;margin:10px 0}
.answer-verify input{width:18px;height:18px;margin:0;flex:none;accent-color:var(--mint)}
.answer-sheet-status{font-size:12px;color:var(--muted);line-height:1.65}
@media(max-width:800px){.answer-sheet-review{grid-template-columns:1fr}}
@media(max-width:430px){.answer-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}

/* v4.8 - assigned-task editor */
.assignment-tile-details{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;margin-top:6px}
.assignment-tile-details .small{flex:1;min-width:240px}
.assignment-edit-btn{white-space:nowrap;border-color:#c99c3e;color:#534010}
.assignment-edit-overlay{position:fixed;inset:0;background:rgba(2,11,45,.63);z-index:500;display:flex;align-items:center;justify-content:center;padding:18px;overflow-y:auto}
.assignment-edit-dialog{width:min(100%,560px);max-height:min(90vh,780px);overflow-y:auto;box-shadow:0 20px 70px rgba(2,11,45,.35)}
.assignment-edit-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:14px;margin-bottom:18px}
.assignment-edit-heading p{margin:0}
.assignment-edit-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:18px}
.assignment-edit-check{display:flex;align-items:center;gap:10px;margin:12px 0;cursor:pointer}
.assignment-edit-check input{width:auto;accent-color:var(--mint)}
@media(max-width:600px){.assignment-edit-overlay{align-items:flex-start;padding:10px}.assignment-edit-dialog{max-height:calc(100vh - 20px)}.assignment-edit-actions .btn{flex:1}}

/* v4.9 exam-bank controls */
.exam-bank-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;flex-wrap:wrap;margin-bottom:14px}
.exam-bank-head p{margin:0}
.exam-bank-tabs{display:flex;align-items:center;flex-wrap:wrap;gap:7px}
.exam-bank-table{min-width:670px}
.exam-bank-table td:last-child{min-width:160px}
.exam-bank-actions{gap:6px}
.exam-bank-help{margin-top:16px;line-height:1.75}
@media(max-width:650px){.exam-bank-head{flex-direction:column;gap:12px}}

/* v4.10 실전 음원: 기본 재생 바를 숨기고 재생/일시정지 조작만 제공 */
.listen-controls{display:flex;align-items:center;gap:13px;flex-wrap:wrap;padding:14px 0 10px}
.listen-controls .btn{min-width:140px}
.listen-clock{font-variant-numeric:tabular-nums;font-size:14px;color:var(--ink)}
.listen-controls .pill{background:#fff9ea;color:#806019;border:1px solid #efdfae}

/* v4.11 admin file replacement and cancellation */
.material-editor{margin-top:24px;border:2px solid var(--navy)}
.material-editor .material-q{margin-bottom:12px}.material-q summary{cursor:pointer;font-weight:800}
.material-copy{display:flex;gap:10px;align-items:center;padding:14px;border:1px solid var(--line);border-radius:10px;margin:16px 0}
.material-copy input{width:auto}.material-page-choices{display:grid;grid-template-columns:repeat(auto-fill,minmax(95px,1fr));gap:8px;padding:16px 0}
.material-page-choices label{font-size:12px}.material-page-choices input{padding:7px}.cancelled-tasks{padding:14px;margin-top:14px;background:var(--bg);border-radius:10px}

/* v4.12 logical exam folders (metadata only; no file-system movement) */
.folder-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:9px;margin:19px 0 15px}
.folder-chip{display:flex;flex-direction:column;gap:8px;align-items:flex-start;text-align:left;padding:12px 13px;border:1px solid var(--line);border-radius:13px;background:#fff;color:var(--ink);font-weight:800;transition:border-color .15s,background .15s}
.folder-chip .folder-icon{font-size:18px;color:var(--blue)}
.folder-chip strong{color:var(--muted);font-size:12px;font-weight:700}
.folder-chip.selected{background:#fff8e3;border:2px solid var(--gold,#efbb43);padding:11px 12px}
.folder-chip.selected .folder-icon{color:#85610c}
.exam-folder-toolbar{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:12px;margin:16px 0 8px}
.exam-folder-toolbar .flex{gap:10px}.exam-folder-toolbar input{width:220px;max-width:100%;padding:8px 10px}
.exam-bank-manage{display:flex;flex-direction:column;gap:8px;align-items:flex-start}
.exam-bank-manage select{max-width:190px;min-width:125px;padding:7px;font-size:13px}
@media(max-width:900px){.folder-grid{grid-template-columns:repeat(4,minmax(0,1fr))}}
@media(max-width:500px){.folder-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.folder-chip{padding:10px}.folder-chip.selected{padding:9px}.exam-folder-toolbar input{width:170px}}

/* v4.13: safe class management */
.class-manage-row{display:flex;gap:10px;align-items:center;justify-content:space-between;background:var(--bg);border:1px solid var(--line);border-radius:11px;padding:12px 13px;margin:8px 0}
.class-manage-row>div{min-width:0;overflow-wrap:anywhere}
.class-manage-row .small{margin-top:3px}
.class-manage-row .btn{flex:none}
.class-delete-help{margin-top:12px}

/* v4.14 transcript parsing status */
.transcript-report{padding:14px 16px;background:#fffaf0;border:1px solid #edd18c;border-radius:12px;margin:12px 0;color:#453a22;line-height:1.6}
.transcript-report p{margin:6px 0}.transcript-report summary{cursor:pointer;font-weight:700;margin-top:8px}
.transcript-report-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:5px;padding-top:12px;font-size:12px}
.transcript-ocr-option{display:flex;align-items:center;gap:8px;margin:8px 0 6px;font-size:12px;color:var(--ink);font-weight:600}
.transcript-ocr-option input{width:auto;margin:0;accent-color:var(--navy)}
@media(max-width:550px){.transcript-report-list{grid-template-columns:1fr}}

/* v4.16: student class transfer, account security and source-paper image viewing */
.student-move{display:flex;gap:7px;align-items:center;min-width:230px}
.student-move select{min-width:135px;padding:8px 9px;font-size:13px;flex:1}
.student-move .btn{white-space:nowrap}
.student-header-actions{flex-wrap:nowrap}
.student-password-dialog{width:min(92vw,430px);max-height:90vh;overflow-y:auto;padding:25px;border:1px solid var(--line);border-radius:18px;color:var(--ink);box-shadow:0 20px 90px #020b2d3b}
.student-password-dialog::backdrop{background:#020b2d8a}
.student-password-dialog .field{margin-bottom:0}
.student-password-dialog .field input{margin-top:3px}
.paper-page-image{display:block;max-width:100%;max-height:580px;width:auto;height:auto;object-fit:contain;border:1px solid #dbe5eb;border-radius:12px;background:white}
.image-error{color:#9b3838;font-size:13px;border:1px solid #e5b9b9;border-radius:9px;background:#fff4f4;padding:11px;line-height:1.6}
@media(max-width:540px){.student-header-actions{flex-direction:column;align-items:flex-end;gap:5px}.student-header-actions .btn{font-size:11px;padding:7px 8px}.student-move{min-width:215px}}

/* v4.17 One question per screen: playback is outside this panel and never restarted on navigation. */
.exam-one-question{grid-template-columns:minmax(0,1fr) 280px}
.focus-question-card{min-height:420px;scroll-margin-top:145px}
.focus-top{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;border-bottom:1px solid var(--line);padding-bottom:12px;margin-bottom:18px}
.focus-top h2{margin:0}.focus-top p{margin:0}
.focused-question{min-height:215px}
.focused-question .q-head{align-items:center;margin-bottom:14px}
.focus-prompt{font-size:17px;font-weight:750;line-height:1.6;margin:0 0 16px}
.focus-question-image{display:block;max-width:100%;max-height:70vh;width:auto;height:auto;object-fit:contain;border-radius:12px;border:1px solid var(--line);background:#fff;margin-bottom:16px}
.focus-question-image.legacy-page-image{max-height:55vh}
.focused-choices{margin-top:12px}
.focus-nav{display:flex;justify-content:space-between;gap:10px;border-top:1px solid var(--line);padding-top:18px;margin-top:22px}
.q-btn.active{outline:2px solid var(--gold,#efbb43);outline-offset:2px;background:var(--navy);color:#fff;border-color:var(--navy)}
.image-note{font-size:12px;margin:0 0 12px}
.editor-question-preview{display:block;max-width:100%;max-height:410px;object-fit:contain;background:#fff;border:1px solid var(--line);border-radius:11px;padding:6px}
@media(max-width:800px){.exam-one-question{grid-template-columns:1fr}.focus-question-card{min-height:350px}.focus-question-image{max-height:56vh}.focus-top{display:block}.focus-top p{margin-top:8px}.exam-one-question .side{position:static}.focus-nav .btn{flex:1}}

/* v4.18: crop review for individual listening questions */
.crop-adjust-overlay{position:fixed;inset:0;z-index:1000;background:rgba(1,9,35,.8);overflow:auto;padding:18px;display:flex;align-items:flex-start;justify-content:center}
.crop-adjust-dialog{width:min(100%,1170px);margin:auto 0;background:#fff}
.crop-adjust-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:16px}
.crop-adjust-grid{display:grid;grid-template-columns:minmax(0,1.3fr) minmax(0,1fr);gap:16px;margin-top:18px}
.crop-adjust-source{max-height:65vh;overflow:auto;background:#e8ecf1;border:1px solid var(--line);border-radius:10px;text-align:center}
.crop-adjust-canvas{display:block;max-width:none;height:auto;touch-action:none;cursor:crosshair;margin:auto}
.crop-adjust-preview{height:300px;overflow:auto;border:1px solid var(--line);background:#f6f8fa;border-radius:10px;margin:10px 0;padding:10px;text-align:center}
.crop-adjust-result{max-width:100%;height:auto;object-fit:contain}
.crop-adjust-controls label{display:block;padding:7px 0;font-size:13px;color:var(--ink)}
.crop-adjust-range{display:block;padding:0;margin:7px 0 0;width:100%;accent-color:#d29a18}
.crop-adjust-error{color:#a34220;min-height:17px}
.crop-adjust-actions{margin-top:18px}
.crop-review-panel{margin:16px 0;border:1px solid var(--line);padding:14px;border-radius:14px;background:#f8fafc}
.crop-review-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;max-height:700px;overflow:auto}
.crop-review-item{border:1px solid var(--line);border-radius:11px;padding:10px;background:#fff;min-width:0}
.crop-review-top{display:flex;justify-content:space-between;gap:8px;margin-bottom:7px}
.crop-review-thumbnail{height:180px;overflow:auto;background:#f6f7f9;border:1px solid var(--line);border-radius:8px;display:flex;justify-content:center;align-items:flex-start;padding:5px;margin-bottom:8px}
.crop-review-thumbnail img{max-width:100%;height:auto}
.crop-review-item select{max-width:80px}
@media(max-width:850px){.crop-adjust-grid{grid-template-columns:1fr}.crop-adjust-source{max-height:45vh}.crop-adjust-preview{height:230px}.crop-review-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:520px){.crop-adjust-overlay{padding:6px}.crop-review-grid{grid-template-columns:1fr}.crop-adjust-dialog{padding:12px}.crop-adjust-actions{flex-wrap:wrap}}

.crop-inline-preview{padding:12px;margin:12px 0;border:1px solid var(--line);border-radius:12px;background:#f9fafc}.crop-inline-preview img{display:block;max-width:100%;max-height:360px;object-fit:contain;margin:10px auto;border:1px solid var(--line);background:white}.crop-inline-preview strong{font-size:13px}


/* ================================================================
   LISTEN LAB v4.20 — UI refresh only (no assignment/API changes)
   ================================================================ */
:root {
  --ui-navy:#0c1839;
  --ui-navy-2:#1e315b;
  --ui-gold:#efbb43;
  --ui-bg:#f5f7fb;
  --ui-card:#fff;
  --ui-line:#e2e7ef;
  --ui-text:#182742;
  --ui-soft:#65758d;
  --ui-shadow:0 12px 36px rgba(12,24,57,.045);
}
body{background:#f5f7fb;color:var(--ui-text);font-size:14px;line-height:1.52}
.shell{max-width:1350px;padding:23px 30px}
.top{padding:0 0 20px;margin:0 0 24px;border-color:var(--ui-line)}
.brand{font-size:21px;letter-spacing:-.8px}
.brand-logo{width:51px;height:51px;border-radius:15px;object-fit:contain;box-shadow:0 3px 15px #0c183916;border:1px solid #ece6d8;background:white}
.brand-sub{font-size:11px;letter-spacing:.08em;font-weight:750}
.pill{font-size:11px;line-height:1.35;border-radius:8px;padding:5px 9px;background:#fff7e6;border:1px solid #f2dfb6;color:#886119}
.btn{font-weight:750;border-radius:10px;min-height:39px;box-shadow:none;transition:background .14s ease,border-color .14s ease,transform .14s ease}
.btn.primary{background:var(--ui-navy);color:white;border-color:var(--ui-navy);box-shadow:none}
.btn.primary:hover:not(:disabled){background:#263b70;border-color:#263b70}
.btn.dark{background:#22365f;border-color:#22365f;color:white}
.btn:active:not(:disabled){transform:translateY(1px)}
.btn.sm{min-height:32px;padding:7px 11px}
.card{border:1px solid var(--ui-line);border-radius:16px;box-shadow:var(--ui-shadow);padding:22px}
.card h2{font-size:18px;letter-spacing:-.5px}
.card h3{font-size:15px}
.metric{border-radius:12px;border:1px solid var(--ui-line);border-top:3px solid #eed39a;border-left:1px solid var(--ui-line);padding:21px;background:#fff}
.metric strong{font-size:29px;line-height:1.2;color:var(--ui-navy)}
.metric span{font-size:12px;color:var(--ui-soft);font-weight:650}
.box{border-radius:12px}
.notice{border-radius:10px;line-height:1.65}
input,select,textarea{border-radius:9px;min-height:42px;color:var(--ui-text)}
input[type=checkbox],input[type=radio]{min-height:0}
label{font-size:12px;color:#45556c}
.table-wrap{border-radius:11px;border:1px solid #edf0f6}
table{min-width:580px}
th{background:#f7f9fc;font-size:12px;font-weight:750}
td{font-size:13px;line-height:1.55}
tr:hover td{background:#fcfdff}
.badge{font-size:11px;letter-spacing:.01em;border-radius:7px;padding:5px 9px}

/* Admin: fixed visual hierarchy, left navigation on desktop */
.admin-shell{max-width:1380px}
.admin-top{display:flex;align-items:center;justify-content:space-between}
.admin-account{display:flex;align-items:center;gap:15px}
.admin-account .small{font-size:12px;font-weight:650}
.admin-workspace{display:grid;grid-template-columns:236px minmax(0,1fr);gap:28px;align-items:start}
.admin-sidebar{position:sticky;top:22px;min-width:0;background:#fff;border:1px solid var(--ui-line);border-radius:17px;padding:16px 12px 15px;box-shadow:var(--ui-shadow)}
.sidebar-heading{font-size:10px;font-weight:850;color:#8997aa;letter-spacing:.17em;padding:8px 12px 16px;display:flex;align-items:center;justify-content:space-between}
.sidebar-heading-ko{font-size:11px;letter-spacing:0;color:#8997aa;font-weight:600}
.admin-nav.tabs{display:flex;flex-direction:column;gap:5px;margin:0}
.admin-nav .tab{display:flex;align-items:center;text-align:left;gap:12px;width:100%;padding:13px 13px;font-size:14px;font-weight:750;color:#394961;background:transparent;border:1px solid transparent;border-radius:10px;box-shadow:none}
.admin-nav .tab:hover:not(.active){background:#f5f7fb;border-color:#f0f2f7}
.admin-nav .tab.active{color:#fff;background:var(--ui-navy);border-color:var(--ui-navy);box-shadow:inset 3px 0 0 var(--ui-gold)}
.nav-icon{width:23px;height:23px;border-radius:7px;display:inline-flex;align-items:center;justify-content:center;background:#f0f3f8;color:#60728d;font-size:18px;line-height:1;flex:none}
.admin-nav .tab.active .nav-icon{background:#ffffff20;color:var(--ui-gold)}
.sidebar-guide{display:flex;flex-direction:column;gap:8px;margin-top:24px;border-top:1px solid #edf0f5;padding:20px 12px 5px}
.sidebar-guide strong{font-size:12px;color:#213151;margin-bottom:3px}
.sidebar-guide span{font-size:12px;color:#77849a}
.admin-main{min-width:0;padding:6px 0 12px}
.admin-page-intro{margin:0 0 24px}
.page-kicker{font-size:10px;font-weight:850;letter-spacing:.2em;color:#ae8426;margin-bottom:9px}
.admin-page-intro .main-title{font-size:29px;line-height:1.25;margin-bottom:8px}
.admin-page-intro p{margin:0;color:var(--ui-soft);font-size:13px}
.admin-main #notice:not(:empty){margin:0 0 15px}
.admin-main #content>.grid3{margin-top:0}
.admin-main #content>.card{margin-bottom:16px}
.admin-main .folder-grid{gap:10px}
.folder-chip{border-radius:12px;min-height:85px;box-shadow:0 2px 9px #111d3710}
.folder-chip.selected{background:#fff8e9;border-color:#dfaf47}
.exam-bank-table th,.exam-bank-table td{vertical-align:middle}
.assignment-tile{background:#fff;border:1px solid var(--ui-line);border-radius:11px;padding:14px}

/* Student: simple exam focus, clear actions, less visual noise */
.student-shell{max-width:1210px}
.student-app .top{margin-bottom:24px}
.student-app .main-title{font-size:26px;letter-spacing:-.8px}
.student-app #content>.flex:first-child{margin-bottom:21px;align-items:center}
.student-app #content>.flex:first-child p{margin:7px 0 0}
.student-app .sticky{top:0;z-index:12;padding:0 0 15px;background:linear-gradient(180deg,#f5f7fb 90%,#f5f7fb00)}
.student-app .sticky>.card{border-top:3px solid var(--ui-gold);border-radius:14px;box-shadow:0 15px 35px #0c18391c}
.student-app .listen-controls{gap:15px;padding:13px 0 7px}
.student-app .listen-controls .btn{min-width:145px;min-height:44px}
.student-app .listen-clock{font-size:17px;font-weight:850;letter-spacing:.01em;white-space:nowrap}
.student-app #trackProgress{line-height:1.6}
.exam-one-question{grid-template-columns:minmax(0,1fr) 260px;gap:19px;align-items:start}
.focus-question-card{min-height:480px;scroll-margin-top:165px;padding:28px 30px}
.focus-top{border-bottom:1px solid #eef0f5;padding-bottom:17px;margin-bottom:22px;align-items:center}
.focus-top h2{font-size:18px}
.focused-question .q-head{padding:0 0 11px;margin-bottom:9px}
.focused-question .num{border-radius:10px;min-width:41px;padding:10px 9px;font-size:15px}
.focused-question .q-head strong{font-size:17px;color:var(--ui-navy)}
.focus-prompt{font-size:17px;line-height:1.75;letter-spacing:-.3px}
.focus-question-image{border:1px solid #e7ebf2;max-height:65vh;margin:14px auto 20px;box-shadow:0 3px 14px #0c183908}
.focused-choices{gap:10px;margin-top:17px}
.focused-choices .choice{border:1px solid #dfe5ee;background:#fff;border-radius:11px;padding:14px 15px;min-height:53px;align-items:center;gap:12px;font-weight:650;line-height:1.5;transition:background .12s,border-color .12s}
.focused-choices .choice:hover{border-color:#a1b1c7;background:#f9fbff}
.focused-choices .choice:has(input:checked){background:#fffaeb;border-color:#d1a044;box-shadow:inset 3px 0 0 #dfaf45}
.focused-choices .choice input{width:18px;height:18px;flex:none;margin:0}
.focus-nav{margin-top:28px;padding-top:22px}
.focus-nav .btn{min-height:43px}
.exam-one-question .side{top:156px;padding:19px}
.exam-one-question .side h3{font-size:14px;margin:0 0 14px}
.q-select{grid-template-columns:repeat(5,minmax(0,1fr));gap:8px}
.q-btn{height:39px;padding:5px 0;min-width:0;font-size:13px;border-radius:9px;font-weight:750;background:white}
.q-btn.done{background:#f4ecd6;border-color:#dcbd76;color:#5e4a21}
.q-btn.active,.q-btn.active.done{background:var(--ui-navy);border-color:var(--ui-navy);color:white;outline:2px solid var(--ui-gold);outline-offset:1px}
.exam-one-question .side>.sep{margin:17px 0}
.exam-one-question .side #submitTip{margin:11px 0 0;line-height:1.6}
.student-app .stack>.card.flex{gap:18px;align-items:center}
.student-app .stack>.card.flex h2{font-size:19px;margin-bottom:8px}
.student-app .stack>.card.flex .btn{white-space:nowrap}
.student-app .review-tile{background:#fff}
.student-app .grid>.card{min-width:0}

/* Login: purposeful split panel on larger screens */
.login-app{background:radial-gradient(ellipse at 14% 12%,#293969 0%,#111e43 35%,#0c1734 80%);color:var(--ui-text)}
.login-app .page-login{min-height:100svh;padding:30px 20px}
.login-app .login{width:min(100%,930px);display:grid;grid-template-columns:minmax(0,.93fr) minmax(0,1fr);align-items:center;gap:64px}
.login-intro{color:#fff;min-width:0}
.login-eyebrow{font-size:11px;color:#efc873;letter-spacing:.19em;font-weight:850;margin-bottom:25px}
.login-app .brand-wrap{margin-bottom:34px;justify-content:flex-start;align-items:center}
.login-app .brand-logo{width:81px;height:81px;border:1px solid #efbb4380;border-radius:20px;background:#fff;object-fit:contain;box-shadow:0 12px 30px #0005}
.login-app .brand-block{align-items:flex-start}
.login-app .brand{font-size:32px;color:#fff}
.login-app .brand em{color:#efbb43}
.login-app .brand-sub{color:#b7c2d7;letter-spacing:.07em}
.login-headline{font-size:33px;line-height:1.35;letter-spacing:-1.3px;font-weight:850;margin:0 0 15px;color:#fff}
.login-headline span{display:block;color:#f0c569}
.login-tagline{font-size:15px;line-height:1.95;color:#c4cddd;margin:0 0 28px}
.login-steps{display:flex;gap:8px;flex-wrap:wrap}
.login-steps span{border:1px solid #ffffff30;border-radius:8px;padding:8px 10px;color:#d7dfed;background:#ffffff0a;font-size:11px;font-weight:650}
.login-app .login-card{border-top:none;border-radius:21px;padding:37px;background:#fff;box-shadow:0 26px 80px #040d2780}
.login-panel-kicker{font-size:10px;font-weight:850;letter-spacing:.2em;color:#ae8426;margin-bottom:13px}
.login-app .login-card .main-title{font-size:24px;letter-spacing:-.75px;margin-bottom:8px}
.login-app .login-card .muted{font-size:13px;margin:0 0 23px}
.login-app .login-card .field{margin-bottom:19px}
.login-app .login-card label{font-size:12px}
.login-app .login-card input{height:46px}
.login-app .login-card .btn.primary{min-height:48px;font-size:15px}
.login-app .login-card .small{line-height:1.7}

/* Responsive: horizontal scroll navigation; no JavaScript to break existing tabs */
@media(max-width:1060px){
  .admin-workspace{grid-template-columns:195px minmax(0,1fr);gap:17px}
  .admin-sidebar{padding:12px 9px}
  .admin-nav .tab{padding:12px 9px;gap:8px;font-size:13px}
  .sidebar-guide{padding:17px 9px 5px}
  .admin-shell{padding:19px}
}
@media(max-width:820px){
  .admin-workspace{display:flex;flex-direction:column;gap:15px}
  .admin-sidebar{position:static;width:100%;padding:0;border:none;background:transparent;box-shadow:none;overflow:hidden}
  .sidebar-heading,.sidebar-guide{display:none}
  .admin-nav.tabs{display:flex;flex-direction:row;flex-wrap:nowrap;gap:7px;overflow-x:auto;scrollbar-width:thin;scroll-snap-type:x proximity;margin:0;padding:0 0 8px}
  .admin-nav .tab{flex:none;width:auto;min-height:43px;white-space:nowrap;scroll-snap-align:start;background:#fff;border:1px solid #e2e7ef;border-radius:10px;padding:10px 12px}
  .admin-nav .tab.active{background:var(--ui-navy);color:#fff}
  .admin-main{width:100%;padding:0}
  .admin-page-intro{margin-bottom:17px}
  .admin-page-intro .main-title{font-size:25px}
  .admin-page-intro p{font-size:12px}
  .exam-one-question{grid-template-columns:1fr}
  .exam-one-question .side{position:static}
  .login-app .login{max-width:490px;display:block}
  .login-app .page-login{padding:20px 14px}
  .login-intro{padding:15px 10px 18px;text-align:center}
  .login-app .brand-wrap{justify-content:center;margin:0 0 12px}
  .login-app .brand-block{align-items:flex-start}
  .login-app .brand-logo{width:55px;height:55px;border-radius:14px}
  .login-app .brand{font-size:24px}
  .login-eyebrow{margin-bottom:15px;font-size:9px}
  .login-headline{font-size:21px;margin-bottom:6px}
  .login-headline span{display:inline}
  .login-tagline{font-size:12px;line-height:1.6;margin:0 0 8px}
  .login-tagline br{display:none}
  .login-steps{justify-content:center;margin-bottom:0}
  .login-steps span{padding:5px 7px;font-size:10px}
  .login-app .login-card{padding:27px}
}
@media(max-width:540px){
  .shell{padding:12px}
  .top{padding:6px 0 14px;margin-bottom:17px}
  .brand-logo{width:43px;height:43px}
  .brand{font-size:17px}
  .brand-sub{font-size:9px;letter-spacing:0}
  .admin-account{gap:5px;flex-direction:column;align-items:flex-end}
  .admin-account .small{font-size:10px}
  .admin-account .btn{padding:5px 8px}
  .admin-nav .nav-icon{width:18px;height:18px;font-size:15px}
  .admin-nav .tab{min-height:42px;padding:9px 10px;font-size:12px;gap:6px}
  .admin-page-intro .main-title{font-size:23px}
  .card{padding:16px}
  .metric{padding:15px}
  .metric strong{font-size:24px}
  .student-app .top{flex-wrap:wrap;align-items:flex-start;gap:9px}
  .student-app .student-header-actions{gap:6px;flex-direction:row}
  .student-app .student-header-actions .btn{font-size:11px;min-height:30px}
  .student-app .main-title{font-size:23px}
  .student-app .sticky{top:0;padding-bottom:10px}
  .student-app .sticky>.card{padding:12px!important}
  .listen-controls{gap:9px;padding:11px 0 5px}
  .listen-controls .btn{min-width:120px;flex:1}
  .listen-clock{font-size:14px}
  .focus-question-card{min-height:340px;padding:17px;scroll-margin-top:180px}
  .focus-top{display:flex;gap:8px}
  .focus-top h2{font-size:16px}
  .focus-prompt{font-size:15px}
  .focused-choices .choice{padding:12px 13px;min-height:50px}
  .exam-one-question .side{padding:17px}
  .q-select{grid-template-columns:repeat(5,minmax(0,1fr))}
  .student-app .stack>.card.flex{flex-direction:column;align-items:stretch}
  .student-app .stack>.card.flex .btn{width:100%}
  .login-app .login-card{padding:23px}
}
@media(prefers-reduced-motion:reduce){.btn,.choice,.tab{transition:none!important}*{scroll-behavior:auto!important}}

/* v4.21: 딕테이션에서 문항별 음원만 제공. */
.review-listen-controls{display:flex;align-items:center;gap:9px;flex-wrap:wrap;margin:12px 0}
.review-audio-unavailable{margin:12px 0;line-height:1.65}
@media(max-width:580px){.review-listen-controls .btn{flex:1;min-width:125px}}

/* v4.28: the source PNG already has transparent corners; no white logo plate. */
.brand-logo,.login-app .brand-logo{
  background:transparent;border:0;box-shadow:none;
  border-radius:50%;object-fit:contain;
}

/* v4.28: weekly Saturday-Friday inspection, no data deletion or weekly reset job. */
.weekly-head{display:flex;align-items:flex-start;justify-content:space-between;gap:18px;margin-bottom:15px}
.weekly-head h2{font-size:22px;margin:5px 0}
.weekly-head p{margin:0}
.weekly-controls{display:flex;flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:7px;max-width:660px}
.weekly-controls .btn{white-space:nowrap}
.weekly-class-label{margin:0 0 0 8px;white-space:nowrap}
.weekly-controls select{max-width:185px;padding:8px 10px;min-width:120px;width:auto}
.weekly-organization{margin-bottom:14px}
.weekly-organization .metric{padding:13px 18px}
.weekly-organization .metric strong{font-size:23px}
.weekly-counters{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-bottom:16px}
.weekly-count{display:flex;flex-direction:column;align-items:flex-start;text-align:left;gap:4px;border:1px solid #dce3ef;background:#fff;border-radius:15px;padding:17px 18px;min-height:113px;color:var(--ui-text,var(--ink))}
.weekly-count strong{font-size:29px;line-height:1.12;color:var(--ui-navy,var(--navy))}
.weekly-count span{font-size:13px;font-weight:800}
.weekly-count small{font-size:11px;color:var(--muted);line-height:1.35}
.weekly-clickable{border-color:#e8b958;background:#fff9eb;cursor:pointer;transition:background .15s,border-color .15s}
.weekly-clickable strong{color:#a34f20}
.weekly-clickable:hover,.weekly-clickable:focus-visible{background:#fff0cb;border-color:#da9d27;outline-offset:2px}
.weekly-unfinished-head{display:flex;justify-content:space-between;align-items:flex-start;flex-wrap:wrap;gap:12px;margin-bottom:13px}
.weekly-unfinished-head h2{margin:0 0 4px}
.weekly-unfinished-head p{margin:0}
.weekly-badgenum{font-size:15px;border-radius:999px;padding:5px 10px;background:#fff1dc;color:#91501d;vertical-align:middle}
.weekly-tabs{display:flex;flex-wrap:wrap;gap:6px}
.weekly-tabs .btn.active{background:var(--navy);color:#fff;border-color:var(--navy)}
.weekly-table{min-width:580px}
.weekly-table td:first-child{min-width:150px}
.weekly-taskline{padding:4px 0;line-height:1.6}
.weekly-taskline + .weekly-taskline{border-top:1px dashed #e5e9f1}
.weekly-state{display:inline-block;font-size:11px;font-weight:750;border:1px solid #e9d4ac;border-radius:6px;padding:1px 6px;background:#fff5e5;color:#84521a;margin-left:5px}
.weekly-state.overdue{background:#fff1f0;border-color:#f1c7c5;color:#a13b3b}
.weekly-empty{padding:25px 16px;border-radius:12px;background:#f7f8fc;color:var(--muted);text-align:center}
.weekly-note{font-size:12px;color:var(--muted);line-height:1.65;margin:15px 0 0}
@media(max-width:1050px){.weekly-head{flex-direction:column}.weekly-controls{justify-content:flex-start}.weekly-counters{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:520px){.weekly-counters{gap:8px}.weekly-count{padding:12px;min-height:112px}.weekly-count strong{font-size:24px}.weekly-count span{font-size:12px}.weekly-controls select{max-width:140px}}

/* v4.29: self-service signup / class code management */
.signup-switch{display:flex;align-items:center;gap:12px;justify-content:space-between;margin-top:15px;padding:12px 0;border-top:1px solid #dbe4e9;font-size:13px}
.signup-back{margin-top:9px}
.login-app #signupForm{margin-top:15px}
.join-controls{display:flex;gap:7px;flex-wrap:wrap;margin-top:10px}
.join-code-notice{display:flex;align-items:flex-start;gap:11px;flex-wrap:wrap;margin-bottom:14px}
.join-code-notice code{display:inline-block;background:#fff;color:#12324a;padding:9px 12px;border-radius:8px;font-size:15px;letter-spacing:.75px;font-weight:800;overflow-wrap:anywhere;user-select:all}
.join-code-notice p{width:100%;margin:0}
@media(max-width:600px){.signup-switch{flex-direction:column;align-items:stretch}.join-code-notice{flex-direction:column}}

/* v4.29.1: keep the alpha channel of the original circular logo; no white CSS plate. */
.brand-wrap .brand-logo, .login-app .brand-wrap .brand-logo {
  background:transparent!important;
  border:0!important;
  box-shadow:none!important;
  border-radius:50%!important;
  object-fit:contain!important;
}
/* Clear and prominent entry point for students. */
.login-app .signup-switch {
  display:flex; flex-direction:column; align-items:stretch; gap:10px;
  margin:16px 0 0; padding:15px 0 0;
  border-top:1px solid #e3e8f1;
}
.login-app .signup-switch-title {display:flex;justify-content:space-between;gap:8px;align-items:baseline;flex-wrap:wrap}
.login-app .signup-switch-title strong {font-size:13px;color:#142246}
.login-app .signup-switch-title span {font-size:11px;color:#687891;line-height:1.5}
.login-app .btn.signup-launch {
  display:block;width:100%;min-height:47px;
  background:#fff8e6;color:#172850;border:2px solid #e0ab38;
  font-weight:850;font-size:15px;text-align:center;
  box-shadow:none;transition:background .16s ease,border-color .16s ease;
}
.login-app .btn.signup-launch:hover,.login-app .btn.signup-launch:focus-visible {background:#ffefc0;border-color:#ba8420}
.login-app .build-marker {font-size:11px;color:#8794a9;margin:12px 0 0;text-align:right}
@media(max-width:600px){.login-app .signup-switch-title{display:block}.login-app .signup-switch-title span{display:block;margin-top:3px}}

/* v4.29.5 - explicit human verification of naturally ordered MP3 tracks */
.audio-order-list{max-height:225px;overflow:auto;border:1px solid #ced6e3;border-radius:10px;padding:8px 12px;margin:9px 0;background:#f8fafc;font-size:13px;line-height:1.7}
.audio-order-list>div{border-bottom:1px solid #e2e8f0;overflow-wrap:anywhere}
.audio-order-list>div:last-child{border-bottom:0}
.audio-order-confirm{display:flex;align-items:center;gap:8px;font-weight:700;margin-top:9px}

/* v4.29.6: exam catalog → assignment management without data loss */
.exam-task-manage-btn{background:#f8f1df;border-color:#dec78f;color:#674a0b;white-space:nowrap}
.exam-task-manage-btn:hover:not(:disabled){background:#fff1c9}
.exam-assignment-status{display:flex;flex-direction:column;align-items:flex-start;gap:5px}
.exam-assignment-dialog{width:min(100%,660px)}
.exam-linked-tasks{margin-top:16px;display:grid;gap:10px;max-height:54vh;overflow-y:auto;padding-right:4px}
.exam-linked-task{display:flex;gap:14px;justify-content:space-between;align-items:center;border:1px solid #e3e8f0;background:#f9fafc;border-radius:12px;padding:14px}
.exam-linked-task-content{min-width:0;display:grid;gap:5px}
.exam-linked-task-content strong{overflow-wrap:anywhere}
@media(max-width:500px){.exam-linked-task{align-items:flex-start;flex-direction:column}.exam-linked-task button{width:100%}}

/* v4.29.8: four-sided image editing controls */
.crop-adjust-control-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:5px 15px}
.crop-adjust-control-grid label{min-width:0;font-weight:600}
.crop-adjust-control-grid label span{float:right;font-variant-numeric:tabular-nums;color:#5c6e89}
.crop-adjust-tools{display:flex;gap:7px;flex-wrap:wrap;margin:6px 0 14px}
.crop-adjust-preview img{max-height:280px}
@media(max-width:550px){.crop-adjust-control-grid{grid-template-columns:1fr}}

.crop-adjust-view-tools{display:flex;align-items:center;gap:7px;margin-bottom:9px;flex-wrap:wrap}

/* v4.29.9 withdrawal/roster controls */
.student-roster-heading{justify-content:space-between;align-items:center;flex-wrap:wrap;gap:12px}
.student-withdrawn-toggle{display:inline-flex;gap:8px;align-items:center;font-size:13px;cursor:pointer}
.student-withdrawn-toggle input{width:auto;accent-color:#c89220}
.student-action-buttons{display:flex;gap:6px;flex-wrap:wrap;min-width:165px}
.student-withdrawn-row{background:#f8f9fc}
