:root{font-family:Inter,system-ui,-apple-system,'Segoe UI',sans-serif;color:#15243c;background:#f4f7fb}*{box-sizing:border-box}body{margin:0}button,input,textarea,select{font:inherit}button{cursor:pointer;border:0;background:#2457dc;color:white;border-radius:10px;padding:11px 17px;font-weight:650}button:hover{filter:brightness(.94)}button:disabled{opacity:.5;cursor:not-allowed}.secondary{background:#e9eef8;color:#24456e}.danger{background:#bf324b}.shell{display:grid;grid-template-columns:245px 1fr;min-height:100vh}.side{background:#132540;color:white;padding:28px 18px}.brand{font-size:23px;font-weight:850;letter-spacing:-.5px;margin-bottom:36px}.brand small{display:block;font-size:12px;font-weight:400;color:#9cb1d2;margin-top:4px}.nav{display:block;width:100%;text-align:left;background:transparent;color:#c9d7ed;margin:7px 0}.nav.active,.nav:hover{background:#28466e;color:white}.main{padding:35px;max-width:1400px;width:100%;margin:auto}.top{display:flex;align-items:center;justify-content:space-between;margin-bottom:25px;gap:12px}.muted{color:#72829a;font-size:14px}.card{background:white;border:1px solid #e3e9f3;border-radius:16px;padding:23px;margin-bottom:17px;box-shadow:0 5px 20px #1b376208}.grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:16px}.stat{font-size:32px;font-weight:800;margin:8px 0}.row{display:flex;gap:12px;align-items:center;flex-wrap:wrap}.between{justify-content:space-between}.field{width:100%;border:1px solid #d4deed;border-radius:10px;padding:12px;background:white;color:#14243a;margin:8px 0 14px}.field:focus{outline:2px solid #99b9fc}.login{max-width:420px;margin:9vh auto;padding:36px}.login h1{margin:0}.question{padding:20px;border-bottom:1px solid #edf0f5}.option{display:block;padding:10px;border-radius:8px;cursor:pointer}.option:hover{background:#f1f5ff}.examgrid{display:grid;grid-template-columns:minmax(280px,1fr) minmax(320px,1fr);gap:18px;align-items:start}.passage{max-height:70vh;overflow:auto;white-space:pre-wrap;line-height:1.8}.questions{max-height:75vh;overflow:auto}.tabs{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:16px}.tabs button{background:#e7edf7;color:#344a70}.tabs button.active{background:#2457dc;color:white}.badge{display:inline-block;background:#e9f1ff;color:#315b9c;padding:5px 10px;border-radius:50px;font-size:12px}.success{color:#13835d}.error{color:#bd2848}.notice{padding:12px 16px;border-radius:10px;background:#fff6dc;color:#75560b;margin:12px 0}.record{background:#f6f8fc;padding:18px;border-radius:12px;margin:14px 0}.essay{width:100%;min-height:300px;resize:vertical;line-height:1.7}.table{width:100%;border-collapse:collapse}.table th,.table td{text-align:left;padding:13px;border-bottom:1px solid #edf0f5}.tiny{font-size:12px}.divider{height:1px;background:#e4eaf2;margin:20px 0}@media(max-width:850px){.shell{grid-template-columns:1fr}.side{padding:14px;display:flex;align-items:center;flex-wrap:wrap;gap:10px}.brand{margin:0 15px 0 0;font-size:19px}.nav{width:auto;margin:0}.main{padding:18px}.examgrid{grid-template-columns:1fr}.passage,.questions{max-height:none}}

.reading-nav{margin:12px 0}.reading-nav button.selected{background:#2457dc;color:white}.passage{white-space:pre-wrap}.questions{overflow-y:auto}

/* VSTEP 0.3 - Nội dung đề HTML, không nhúng PDF trong phòng thi */
.section-heading { margin:16px 0; }
.section-heading h2,.listening-player h2 { margin:4px 0; }
.source-text { white-space:pre-wrap; overflow-wrap:anywhere; line-height:1.85; }
.examgrid .passage { position:sticky; top:16px; max-height:78vh; overflow:auto; }
.examgrid .questions { max-height:78vh; overflow:auto; }
.reading-nav button { font-size:13px; }
.listening-player audio { display:block; width:100%; margin:18px 0 4px; }
.listening-part { max-width:980px; }
.listening-part h2 { margin-top:0; }
.listen-subgroup { margin:22px 0; border-top:1px solid #dde5f2; padding-top:12px; }
.listen-subgroup h4 { margin:10px 0; }
.writing-task { max-width:1020px; }
.email-prompt { background:#f7f9fc; border-left:4px solid #8da8e4; padding:18px 22px; margin:12px 0 22px; }
.article-excerpt { background:#f7f9fc; border:1px solid #d9e2ed; padding:20px; margin:16px 0; line-height:1.8; }
.answer-label { display:block; font-weight:700; padding-top:12px; }
.speaking-part { max-width:1050px; }
.speaking-followups { line-height:1.8; }
.mindmap { max-width:740px; border:1px solid #9caecb; padding:16px; margin:24px auto; border-radius:12px; }
.mindmap h4 { margin:0 0 18px; }
.mindmap-grid { display:grid; grid-template-columns:1fr 1fr 1fr; grid-template-rows:auto auto auto; align-items:center; gap:14px; }
.mindmap-box { border:1px solid #748ba9; padding:15px 8px; border-radius:6px; text-align:center; font-size:14px; background:white; }
.top-node { grid-column:2; grid-row:1; }
.left-node { grid-column:1; grid-row:2; }
.center-node { grid-column:2; grid-row:2; background:#eaf1ff; border:2px solid #3763ae; font-weight:700; }
.right-node { grid-column:3; grid-row:2; }
.bottom-node { grid-column:2; grid-row:3; }
@media(max-width:850px) {.examgrid .passage,.examgrid .questions{position:static;max-height:none}.reading-nav{overflow-x:auto;flex-wrap:nowrap}.reading-nav button{white-space:nowrap}.mindmap-box{font-size:11px;padding:9px 4px}.main{padding:13px}}

/* VSTEP 0.4 — Student exam-only layout. Staff dashboard remains unchanged. */
.student-shell{min-height:100vh;background:#f4f7fb}
.student-header{background:#142640;color:#fff;padding:14px max(20px,calc((100vw - 1280px)/2));display:flex;align-items:center;justify-content:space-between;gap:14px}
.student-identity{display:flex;flex-direction:column;gap:2px}
.student-identity strong{font-size:20px;font-weight:850;letter-spacing:-.3px}
.student-identity small{color:#bdcbe1;font-size:13px}
.student-logout{background:#2d496a;color:#fff;border:1px solid #6885a8;padding:10px 16px;white-space:nowrap}
.student-main{max-width:1280px;margin:0 auto;padding:24px 20px 56px}
.student-page-title{font-size:26px;margin:0 0 18px}
.student-shell .tabs{margin:0 0 16px}
@media(max-width:850px){.student-main{padding:16px 12px 40px}.student-header{padding:12px}.student-identity strong{font-size:17px}.student-identity small{font-size:11px}.student-page-title{font-size:22px}}
/* VSTEP 0.5 — Admin exam bank (mobile/iPad supported) */
.bank-item h3{margin:0 0 8px}.bank-item .muted{margin:4px 0}.bank-actions{margin-top:13px}.bank-actions button{padding:9px 13px}
.bank-new-name{max-width:560px;flex:1;margin:0!important;min-width:200px}.bank-tabs{overflow-x:auto;flex-wrap:nowrap;padding-bottom:8px}.bank-tabs button{white-space:nowrap}
.bank-q-nav{display:flex;flex-wrap:wrap;gap:5px;margin:20px 0}.bank-q-nav button{min-width:41px;padding:7px 9px;color:#39546d;background:#f1f4fa;border:1px solid #ced9e8}
.bank-q-nav button.exists{border-color:#2e70b8}.bank-q-nav button.active{background:#2457dc;color:#fff}
.bank-field{display:block;margin:10px 0}.bank-field strong{display:block;margin-bottom:4px;color:#233b58;font-size:14px}.bank-field textarea{min-height:85px;line-height:1.65}.bank-field textarea.bank-long{min-height:250px}
.bank-field input:disabled,.bank-field textarea:disabled,.bank-field select:disabled{background:#f2f5fa;color:#354a67;opacity:1}
.bank-item .badge{white-space:nowrap}.bank-item .row.between{align-items:flex-start}
@media(max-width:900px){.bank-actions{gap:7px}.bank-actions button{font-size:13px}.bank-q-nav button{min-width:37px}.bank-field textarea.bank-long{min-height:180px}}

/* VSTEP 0.6 — Account administration, branded confirmation dialogs, Listening layout */
.table-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch}
.user-actions{gap:7px;flex-wrap:nowrap}
.user-actions button{white-space:nowrap;padding:8px 11px;font-size:12px}
.user-status{display:inline-flex;align-items:center;border-radius:999px;padding:5px 10px;font-size:12px;font-weight:700;white-space:nowrap;background:#ecfdf5;color:#0b7554}
.user-status.locked{background:#fff4de;color:#8f5816}
.user-status.deleted{background:#fce9ee;color:#a7294e}
#vstep-toasts{position:fixed;top:18px;right:18px;z-index:3000;max-width:min(420px,calc(100vw - 36px));display:flex;flex-direction:column;gap:8px;pointer-events:none}
.vstep-toast{pointer-events:auto;background:#ffffff;box-shadow:0 16px 48px #1027482e;border:1px solid #cbdfe6;border-radius:15px;padding:13px 15px;display:flex;gap:11px;align-items:center;font-size:14px;color:#142b45;line-height:1.45;animation:vstep-slide .18s ease-out}
.vstep-toast-icon{width:25px;height:25px;border-radius:50%;display:flex;align-items:center;justify-content:center;background:#dcf9ee;color:#087b56;font-weight:850;flex-shrink:0}
.vstep-toast.is-error{border-color:#f3afbc}.vstep-toast.is-error .vstep-toast-icon{background:#ffe8ee;color:#bf324b}
.vstep-toast-close{margin-left:auto;background:transparent;color:#6b7e96;border:0;font-size:24px;padding:0 3px;line-height:1}
.vstep-modal-backdrop{position:fixed;z-index:4000;inset:0;background:#0b1f3a99;display:flex;justify-content:center;align-items:center;padding:20px;backdrop-filter:blur(5px)}
.vstep-modal{background:#fff;border:1px solid #dce6f4;border-radius:22px;box-shadow:0 26px 100px #10233f55;padding:28px;width:min(520px,100%);max-height:min(88vh,850px);overflow:auto;color:#15243c;animation:vstep-pop .15s ease-out}
.vstep-modal h2{font-size:22px;margin:0 0 10px;line-height:1.35}
.vstep-modal-description{white-space:pre-wrap;color:#637a97;line-height:1.65;font-size:14px;margin:0 0 18px}
.vstep-modal-field{display:block;font-weight:650;font-size:13px;line-height:1.4;color:#294462;margin-top:10px}
.vstep-modal-field .field{margin-top:6px;margin-bottom:2px}
.vstep-modal-buttons{display:flex;gap:10px;justify-content:flex-end;margin-top:25px}
.vstep-modal-buttons button{min-width:110px}
.listen-audio-embedded{border:1px solid #c7dcf3;background:linear-gradient(120deg,#eff5ff,#f9fcff);border-radius:13px;padding:20px;margin:18px 0 24px}
.listen-audio-embedded strong{color:#153b68;font-size:16px}
.listen-audio-embedded audio{width:100%;margin:15px 0 4px;display:block;min-height:42px}
.listen-audio-embedded #listenRetry{margin-top:8px}
.listen-audio-embedded #listeningAudioStatus{line-height:1.6}
.listening-overview{max-width:1000px}
@keyframes vstep-slide{from{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}
@keyframes vstep-pop{from{opacity:0;transform:translateY(8px) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}
@media(max-width:740px){.vstep-modal{padding:20px;border-radius:17px}.vstep-modal h2{font-size:19px}.vstep-modal-buttons{flex-wrap:wrap}.vstep-modal-buttons button{flex:1}.user-actions{flex-wrap:wrap}}

/* VSTEP 0.7 — Speaking: đề → ghi âm → nộp Part; Listening: đề → audio Part → câu hỏi */
.speaking-control{margin-top:26px;padding:20px;border:1px solid #cdddf0;background:linear-gradient(145deg,#f1f6ff,#f8fbff);border-radius:15px}
.speaking-control strong{color:#183c70;font-size:16px}
.speaking-control .row.between{gap:10px}
.speaking-controls{margin:15px 0 8px}
.speaking-controls button{min-width:150px}
.speaking-control.submitted{background:#effcf6;border-color:#b7e5cf}
.speaking-control.waiting{background:#f6f8fb;border-style:dashed}
.listening-part{scroll-margin-top:20px}
.listen-audio-embedded{margin:24px 0;background:linear-gradient(140deg,#f0f6ff,#fff);border-color:#bad0ed}
.listen-audio-embedded button{margin:13px 0 6px}
.listen-audio-embedded .badge{white-space:nowrap}
.listening-playing{color:#1b56a8}
.bank-audio-part audio{margin-top:10px}
.bank-audio-part button{margin-right:8px;margin-bottom:7px}
@media(max-width:740px){.speaking-control{padding:14px}.speaking-controls button{min-width:unset;width:100%}.listen-audio-embedded{padding:14px}.listen-audio-embedded .row.between{align-items:start}}

/* VSTEP 0.8 — Reading: passage scrolls with page; right question panel follows the viewport. */
.examgrid{align-items:start;overflow:visible}
.examgrid .passage{position:static!important;max-height:none!important;overflow:visible!important;white-space:normal!important;line-height:1.85}
.examgrid .questions{position:sticky;top:14px;max-height:calc(100dvh - 28px);overflow-y:auto;overscroll-behavior:contain}
.reading-paragraphs p{white-space:normal;margin:0 0 20px;text-align:left;line-height:1.9}
.reading-paragraphs p:last-child{margin-bottom:0}
/* Listening: an accessible, non-seekable progress indicator. */
.listen-audio-embedded{background:#f7f9ff;padding:17px 20px;border-color:#d5e3f6}
.listen-progress{display:flex;gap:13px;align-items:center;min-height:30px}
.listen-progress progress{display:block;flex:1;height:9px;width:100%;min-width:40px;appearance:none;-webkit-appearance:none;overflow:hidden;border:0;border-radius:999px;background:#dce6f4}
.listen-progress progress::-webkit-progress-bar{background:#dce6f4;border-radius:999px}
.listen-progress progress::-webkit-progress-value{background:#2b5bdc;border-radius:999px}
.listen-progress progress::-moz-progress-bar{background:#2b5bdc;border-radius:999px}
.listen-play-symbol{color:#294b82;font-size:18px}
.listen-clock{min-width:95px;color:#526a88;font-variant-numeric:tabular-nums;font-size:13px;text-align:right}
.listen-preflight{margin:7px 0 0;font-size:13px;line-height:1.65}
.listen-audio-embedded button{margin:9px 0 4px}
/* Results and repeat-exam history */
.history-entry{padding:18px 0;border-bottom:1px solid #e0e8f4}
.history-entry:last-child{border-bottom:0;padding-bottom:0}
.history-entry .grid{margin-top:12px}
.history-entry .record{margin:0}
.result-grade{font-weight:800;font-size:25px;margin:11px 0 5px;color:#173a73}
.demo-grade{background:#fff1cc;color:#895f0f}
.history-entry .notice{padding:9px 13px;font-size:13px}
@media(max-width:850px){.examgrid .questions{position:static;top:auto;max-height:none;overflow:visible}.examgrid .passage{position:static}.listening-part{padding:16px}.listen-audio-embedded{padding:13px}.listen-clock{font-size:11px;min-width:75px}.history-entry .grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.result-card{padding:12px}.result-grade{font-size:21px}}


/* VSTEP 0.9 — Chọn mục tiêu, dashboard, kết quả với hiệu ứng chúc mừng */
.v09-onboarding{max-width:1040px;margin:12px auto;padding:clamp(22px,4vw,40px)}
.v09-onboarding h2{font-size:clamp(24px,3vw,36px);margin:5px 0 10px}
.eyebrow{font-size:12px;font-weight:800;letter-spacing:.1em;color:#4567a7}
.goal-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px;margin:24px 0}
.goal-choice{display:flex;min-height:145px;text-align:left;flex-direction:column;gap:7px;justify-content:center;background:#f5f8ff;color:#18335c;border:2px solid #dae5f7;border-radius:18px;padding:20px;transition:background .16s,border-color .16s,transform .16s}
.goal-choice strong{font-size:32px}.goal-choice span{font-weight:700}.goal-choice small{color:#617491;font-weight:400}
.goal-choice.selected{border-color:#255adc;background:#e8f0ff;box-shadow:0 0 0 3px #255adc18;transform:translateY(-2px)}
.exam-picker-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:16px;margin:24px 0}
.exam-picker-card{display:flex;flex-direction:column;align-items:flex-start;gap:15px;background:#f7faff;border:1px solid #dbe5f4;border-radius:14px;padding:22px}
.exam-picker-card strong{font-size:20px}.exam-picker-card button{margin-top:auto}
.goal-in-exam{font-size:13px;background:#ebf1ff;border-radius:10px;padding:10px 13px;color:#294d83;display:inline-block;margin:0 0 14px}
.v09-dashboard-stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px;margin:8px 0 24px}
.v09-stat{background:#fff;border:1px solid #dfe8f6;border-radius:18px;padding:22px 18px;display:flex;flex-direction:column;gap:10px;box-shadow:0 5px 17px #15376008}
.v09-stat small{font-size:13px;color:#60738f;font-weight:600;line-height:1.45}.v09-stat strong{font-size:36px;color:#162e50;font-variant-numeric:tabular-nums}.v09-stat-symbol{color:#386cbd;font-weight:800;font-size:19px}
.v09-create-panel{border:1px solid #d7e3f3;border-radius:12px;padding:13px 17px;margin:15px 0 22px}
.v09-create-panel summary,.v09-audit summary{cursor:pointer;color:#255adc;font-weight:700;padding:7px 0}
.v09-create-panel form{margin-top:15px}.v09-audit{padding-top:15px;border-top:1px solid #edf1f8;margin-top:22px}
.v09-result-hero{border-radius:24px;padding:clamp(26px,4vw,45px);margin:0 0 24px;position:relative;overflow:hidden;isolation:isolate;box-shadow:0 18px 40px #102c5c1c}
.v09-result-hero h2{font-size:clamp(26px,4vw,42px);margin:12px 0 12px;position:relative;z-index:1}
.v09-result-hero p,.v09-result-kicker,.v09-result-numbers{position:relative;z-index:1}
.v09-result-hero.passed{background:linear-gradient(123deg,#163b7d,#2b63ce 56%,#674ac4);color:white}
.v09-result-hero.passed:before{content:'✦   ✧   ✦';font-size:105px;color:#ffffff12;position:absolute;top:0;right:-20px;letter-spacing:50px;transform:rotate(-21deg)}
.v09-result-hero.practice{background:linear-gradient(128deg,#fff6db,#ffedb5);color:#6a5015;border:1px solid #f7d988;box-shadow:none}
.v09-result-hero.not-yet{background:linear-gradient(120deg,#e9f1ff,#f7faff);color:#17365a;box-shadow:none;border:1px solid #d2e2f7}
.v09-result-kicker{font-size:12px;letter-spacing:.13em;font-weight:800;opacity:.83}
.v09-result-numbers{display:grid;grid-template-columns:1fr 1fr 1fr;gap:14px;margin:28px 0 22px}
.v09-result-numbers>div{display:flex;flex-direction:column;gap:11px;background:#ffffff1b;border:1px solid #ffffff42;border-radius:16px;padding:16px}
.v09-result-hero:not(.passed) .v09-result-numbers>div{background:#ffffff88;border-color:#becce13b}
.v09-result-numbers small{font-size:12px;opacity:.84}.v09-result-numbers strong{font-size:clamp(20px,3vw,30px);font-weight:850}
.v09-result-numbers em{font-size:14px;font-style:normal;opacity:.7;margin-left:4px}
.v09-result-note{font-size:12px;line-height:1.6;opacity:.8;max-width:760px}
.v09-celebration{position:fixed;inset:0;pointer-events:none;z-index:6000;overflow:hidden}
.v09-celebration i{position:absolute;width:9px;height:17px;left:var(--x);top:-40px;display:block;opacity:0;transform:rotate(0);animation:v09-fall var(--duration) linear var(--delay) forwards}
@keyframes v09-fall{0%{opacity:0;transform:translate3d(0,-30px,0) rotate(0deg)}7%{opacity:1}90%{opacity:1}100%{opacity:0;transform:translate3d(var(--fall),115vh,0) rotate(var(--spin))}}
@media(max-width:950px){.v09-dashboard-stats{grid-template-columns:repeat(2,minmax(0,1fr))}.v09-stat{padding:18px}}
@media(max-width:650px){.goal-grid{grid-template-columns:1fr}.goal-choice{min-height:100px}.v09-dashboard-stats{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.v09-stat strong{font-size:28px}.v09-result-numbers{grid-template-columns:1fr 1fr}.v09-result-numbers>div{padding:10px}.v09-result-numbers>div:first-child{grid-column:1 / -1}}
@media(prefers-reduced-motion:reduce){.v09-celebration{display:none}.goal-choice{transition:none}}

/* VSTEP 1.0 — full-width history grid and unified bank editor */
.v10-history-scroll{display:block;width:100%;max-width:100%;overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;overscroll-behavior-x:contain;border:1px solid #e2eaf4;border-radius:13px}
.v10-history{border-collapse:separate;border-spacing:0;min-width:1450px;width:max-content;font-size:14px}
.v10-history th,.v10-history td{min-width:115px;padding:14px 16px;text-align:left;border-bottom:1px solid #e8eef7;vertical-align:middle;white-space:nowrap}
.v10-history th{font-size:13px;background:#edf3ff;color:#2a466b;position:sticky;top:0;z-index:1}
.v10-history th:first-child,.v10-history td:first-child{position:sticky;left:0;background:#fff;min-width:205px;z-index:2;box-shadow:4px 0 8px #18274a08}
.v10-history th:first-child{background:#edf3ff;z-index:3}.v10-history td.v10-wrap{white-space:normal;min-width:175px;max-width:220px}
.v10-result-tag{display:inline-block;border-radius:99px;padding:6px 10px;font-weight:700;background:#e7edf7;color:#415779}
.v10-result-tag.pass{background:#e6f8ed;color:#147348}.v10-result-tag.fail{background:#fff1f0;color:#a02e46}
.v10-table-help{font-size:13px;color:#5d748f;margin:6px 0 14px}
.v10-bank-toolbar{display:flex;gap:10px;flex-wrap:wrap;align-items:center;position:sticky;top:0;z-index:10;padding:12px 14px;background:#fff;border:1px solid #e1e9f3;box-shadow:0 10px 26px #15254011;border-radius:13px;margin-bottom:18px}
.v10-bank-anchor{display:flex;gap:8px;flex-wrap:wrap;margin:10px 0 18px}.v10-bank-anchor a{display:inline-block;text-decoration:none;background:#edf3ff;padding:9px 14px;border-radius:9px;color:#25437e;font-weight:700}
.v10-bank-section{scroll-margin-top:95px}.v10-bank-section>h2{color:#1c3a60}.v10-bank-q{border:1px solid #d8e4f3;background:white;border-radius:12px;padding:12px;margin:9px 0}
.v10-bank-q summary{cursor:pointer;font-weight:750;color:#1d3b64}.v10-bank-q[open] summary{margin-bottom:10px}
.v10-bank-q .field{margin:6px 0 10px}.v10-bank-q label{font-size:13px;font-weight:650}
.v10-bank-group{margin:18px 0;background:#f7f9fe;border:1px solid #e6edf7;border-radius:14px;padding:16px}
.v10-bank-group>summary{font-size:17px;font-weight:800;cursor:pointer;list-style:auto}.v10-bank-group>div{padding-top:12px}
.v10-editor-note{font-size:13px;color:#5f7490;margin:8px 0}.v10-visual,.v10-visual-image{border:1px solid #d6e0ef;border-radius:15px;padding:18px;background:#fff;margin:20px 0}
.v10-visual h4{margin-top:0}.v10-overflow{overflow-x:auto}.v10-data-table{border-collapse:collapse;min-width:100%;width:max-content}.v10-data-table td,.v10-data-table th{border:1px solid #b7c8df;padding:13px;white-space:pre-wrap}
.v10-data-table th{background:#eaf1fc}.v10-box-grid{display:grid;grid-template-columns:repeat(var(--cols),minmax(0,1fr));gap:8px}
.v10-box-cell{border:1px solid #b4c7e1;padding:16px 10px;border-radius:10px;text-align:center;white-space:pre-wrap;background:#f5f8fd}
.v10-visual-image{text-align:center}.v10-visual-image img{max-width:100%;height:auto;max-height:740px;object-fit:contain}.v10-visual-image figcaption{font-size:13px;color:#62758a;margin-top:8px}
.v10-image-preview img{max-width:100%;max-height:320px;object-fit:contain;border:1px solid #dde6f2;border-radius:10px}
@media(max-width:850px){.v10-bank-toolbar{position:static}.v10-bank-q{padding:10px}.v10-box-grid{gap:4px}.v10-box-cell{font-size:12px;padding:10px 5px}}

.v10-mindmap-center{font-weight:800;background:#dbe9ff;border:2px solid #507abb;border-radius:10px;padding:18px;text-align:center;max-width:270px;margin:0 auto 20px}.v10-mindmap-nodes{display:flex;flex-wrap:wrap;justify-content:center;gap:14px}.v10-mindmap-nodes>div{border:1px solid #98b0d3;background:#f7faff;padding:16px;border-radius:11px;flex:1 1 165px;max-width:280px;min-width:145px;text-align:center;position:relative}.v10-mindmap-nodes>div:before{content:'';width:1px;height:18px;background:#98b0d3;position:absolute;top:-17px;left:50%}

/* VSTEP 1.1 — Admin navigation, student register, revision-aware exam bank */
.side .nav.v11-selected,.side .nav.v11-selected:hover,.side .nav.v11-selected:focus-visible{background:#fff;color:#142b4a;font-weight:850;box-shadow:inset 4px 0 #2d5fe5,0 3px 14px #06142918}
.side .nav:focus-visible{outline:2px solid #b7d1ff;outline-offset:2px}
.side .v11-signout{margin-top:22px}
.v11-learners{padding:24px;overflow:visible}
.v11-learners-heading{display:flex;justify-content:space-between;align-items:flex-start;gap:14px;margin-bottom:15px}
.v11-learners h2,.v11-bank-create h2,.v11-bank-list h2{margin:0 0 8px;font-size:22px;color:#162d4d}
.v11-learners-heading .muted{margin:0;line-height:1.6}
.v11-learners-heading-right{display:flex;gap:12px;align-items:center;flex-wrap:wrap;justify-content:flex-end}
.v11-learners-heading-right button,.v11-create-inline button{display:inline-flex;align-items:center;justify-content:center;gap:8px;white-space:nowrap}
.v11-count{display:inline-flex;align-items:center;background:#eff4ff;border-radius:100px;padding:8px 12px;font-weight:700;color:#315898;font-size:13px;white-space:nowrap}
.v11-filters{display:flex;gap:12px;align-items:center;flex-wrap:wrap;margin:4px 0 12px}
.v11-filters .field{width:auto;min-width:215px;max-width:440px;flex:1 1 250px;margin:0}
.v11-filters select{flex:0 1 215px}
.v11-show-deleted{display:flex;align-items:center;gap:8px;font-size:12px;color:#516783;white-space:nowrap}
.v11-scroll-hint{font-size:12px;color:#617998;line-height:1.6;margin:9px 0 13px}
.v11-student-scroll{max-width:100%;width:100%;max-height:540px;overflow:auto;border:1px solid #dce6f3;border-radius:14px;-webkit-overflow-scrolling:touch;overscroll-behavior:contain;scrollbar-gutter:stable}
.v11-student-table{border-collapse:separate;border-spacing:0;min-width:1700px;width:100%;font-size:13px}
.v11-student-table th,.v11-student-table td{padding:15px 14px;text-align:left;border-bottom:1px solid #e5edf6;vertical-align:middle;white-space:nowrap;background:#fff}
.v11-student-table thead th{position:sticky;top:0;z-index:4;background:#eff4fc;color:#2d4669;font-size:12px;letter-spacing:.015em;font-weight:800}
.v11-student-table th:nth-child(1),.v11-student-table td:nth-child(1){min-width:118px;position:sticky;left:0;z-index:2;background:inherit}
.v11-student-table th:nth-child(2),.v11-student-table td:nth-child(2){min-width:190px;position:sticky;left:118px;z-index:2;background:inherit;box-shadow:4px 0 12px #1e42700a}
.v11-student-table thead th:nth-child(1),.v11-student-table thead th:nth-child(2){z-index:6;background:#eff4fc}
.v11-student-table tbody tr.v11-learner-row:hover td{background:#f8fbff}
.v11-student-table tbody tr.v11-learner-row:hover td:nth-child(-n+2){background:#f8fbff}
.v11-student-table th:nth-child(4){min-width:138px}
.v11-student-table th:nth-child(5){min-width:235px}
.v11-student-table th:nth-child(6){min-width:132px}
.v11-student-table th:nth-child(9){min-width:155px}
.v11-student-table th:nth-child(10){min-width:195px}
.v11-name strong{display:block;color:#172d4d;font-size:14px}
.v11-name small{display:block;color:#8190a6;font-size:12px;margin-top:6px;font-weight:400}
.v11-goal{color:#2d5d9e;font-weight:800}
.v11-status{display:inline-flex;align-items:center;gap:6px;padding:7px 10px;border-radius:100px;font-size:12px;font-weight:760}
.v11-status:before{content:'';width:7px;height:7px;border-radius:50%;background:currentColor}
.v11-status.new{color:#6c7789;background:#eef1f7}
.v11-status.progress{color:#975500;background:#fff2d8}
.v11-status.completed{color:#08764e;background:#e4f9ee}
.v11-status.locked{color:#b53251;background:#ffe8ed}
.v11-status.deleted{color:#677080;background:#e9edf0}
.v11-skill-points{display:flex;gap:6px;align-items:center}
.v11-skill-points span{background:#f1f5fd;border-radius:7px;padding:6px 8px;color:#2c4b70;white-space:nowrap}
.v11-skill-points b{color:#426eb4}
.v11-overall-number{display:block;font-size:16px;color:#19447e}
.v11-overall-band{display:block;color:#647b96;font-size:11px;margin-top:4px}
.v11-student-actions,.v11-row-tools,.v11-bank-actions{display:flex;align-items:center;gap:6px;flex-wrap:nowrap}
.v11-icon-button{display:inline-flex;align-items:center;justify-content:center;background:#eff4fc;color:#2e538c;border:1px solid #dfe8f6;border-radius:10px;min-width:44px;width:44px;height:44px;padding:9px;flex-shrink:0}
.v11-icon-button:hover{background:#dae7ff;color:#224e99;filter:none}
.v11-icon-button.is-danger{background:#fff0f3;color:#bf375a;border-color:#ffdee6}
.v11-icon-button.is-danger:hover{background:#ffdfe7}
.v11-icon-button:disabled{opacity:.35;cursor:not-allowed}
.v11-icon-button:focus-visible,.v11-publish:focus-visible{outline:3px solid #8aaefb;outline-offset:2px}
.v11-history-row[hidden]{display:none!important}
.v11-history-row>td{background:#f6f9ff!important;border-bottom:2px solid #b9cdec;padding:18px 20px!important}
.v11-history-head{display:flex;align-items:center;gap:12px;justify-content:space-between;color:#22446d;font-size:14px;margin-bottom:10px}
.v11-history-head span{font-size:12px;color:#69819d}
.v11-attempt-list{max-width:100%;display:flex;flex-direction:column;gap:8px}
.v11-attempt-item{display:flex;justify-content:space-between;align-items:center;gap:18px;padding:10px 12px;background:#fff;border:1px solid #e0e9f6;border-radius:10px}
.v11-attempt-item strong{display:block;font-size:13px;max-width:750px;overflow:hidden;text-overflow:ellipsis}
.v11-attempt-item small{display:block;margin-top:4px;color:#6b7f9e}
.v11-attempt-item button{padding:8px 12px;white-space:nowrap;font-size:12px}
.v11-no-attempts{color:#70829b;font-size:13px;padding:8px 0}
.v11-empty{padding:35px!important;text-align:center!important;color:#697c96}
.v11-staff-panel{margin-top:22px;border-top:1px solid #e6edf7;padding-top:15px}
.v11-staff-panel summary{cursor:pointer;font-weight:800;color:#244777;padding:10px 0}
.v11-staff-panel summary span{font-size:12px;color:#6781a1;margin-left:9px}
.v11-staff-scroll{max-width:100%;overflow:auto}
.v11-staff-table{width:100%;border-collapse:collapse;font-size:13px;min-width:670px;margin-top:14px}
.v11-staff-table td,.v11-staff-table th{border-bottom:1px solid #e8eff7;padding:12px;text-align:left}
.v11-staff-table th{background:#f2f6ff;color:#2f4e73}
.v11-bank-create{display:flex;justify-content:space-between;align-items:center;gap:20px;flex-wrap:wrap}
.v11-bank-create>div:first-child{flex:1 1 260px}
.v11-bank-create .muted{margin:0;line-height:1.6}
.v11-create-inline{display:flex;align-items:center;gap:12px;flex:2 1 400px}
.v11-create-inline .field{min-width:190px;flex:1 1 250px;margin:0}
.v11-bank-list .muted{margin:4px 0 0}
.v11-bank-scroll{overflow-x:auto;max-width:100%;border:1px solid #e2eaf5;border-radius:13px;margin-top:20px;-webkit-overflow-scrolling:touch}
.v11-bank-table{width:100%;min-width:920px;border-collapse:separate;border-spacing:0}
.v11-bank-table th,.v11-bank-table td{padding:18px 20px;text-align:left;border-bottom:1px solid #e7eef7;vertical-align:middle;white-space:nowrap}
.v11-bank-table thead th{background:#f0f5fd;color:#315075;font-size:13px;position:sticky;top:0;z-index:1}
.v11-bank-table thead th:first-child{min-width:300px}
.v11-bank-table thead th:nth-child(2){min-width:175px}
.v11-bank-table thead th:nth-child(3){min-width:205px}
.v11-bank-table thead th:nth-child(4){min-width:210px}
.v11-bank-title strong{display:block;color:#1c3352;font-size:16px}
.v11-bank-title small,.v11-bank-edited small{display:block;color:#7488a1;font-size:12px;margin-top:6px}
.v11-bank-actions{margin-top:13px}
.v11-bank-edited>strong{font-size:13px;color:#203d63}
.v11-status-stack{display:flex;align-items:flex-start;flex-direction:column;gap:9px}
.v11-bank-status{display:inline-flex;align-items:center;border-radius:100px;font-size:12px;font-weight:800;padding:7px 12px}
.v11-bank-status.draft{background:#fff1da;color:#915b0e}
.v11-bank-status.published{background:#e3f8eb;color:#127346}
.v11-publish{display:inline-flex;gap:7px;align-items:center;background:#2457dc;color:white;border-radius:9px;padding:9px 12px;font-size:12px}
.v11-publish svg{width:15px;height:15px}
.v11-paused{color:#ad5762;font-size:12px}
@media(max-width:950px){.v11-learners{padding:17px}.v11-student-scroll{max-height:520px}.v11-learners-heading h2{font-size:20px}.v11-bank-create{align-items:stretch}}
@media(max-width:600px){.v11-learners-heading{flex-wrap:wrap}.v11-learners-heading-right{width:100%;justify-content:space-between}.v11-filters{flex-direction:column;align-items:stretch}.v11-filters .field{width:100%;max-width:none;min-width:unset;flex:auto}.v11-create-inline{flex-wrap:wrap}.v11-create-inline button{width:100%}.v11-student-scroll{max-height:510px}.v11-bank-table th,.v11-bank-table td{padding:14px}}
/* Keep wide tables inside their own scrolling region instead of stretching the grid page. */
@media(min-width:851px){.shell{grid-template-columns:245px minmax(0,1fr)}}
.shell>.main{min-width:0}
.v11-learners,.v11-bank-list,.v11-learners .v11-student-scroll,.v11-bank-scroll{min-width:0;max-width:100%}
.v11-history-row>td{position:static!important;left:auto!important;width:auto!important;box-shadow:none!important}
.v11-audit-panel{border-top:1px solid #edf1f7;margin-top:18px;padding-top:12px}
.v11-audit-panel summary{cursor:pointer;color:#365b8c;font-size:13px;font-weight:750;padding:7px 0}
.v11-audit-scroll{max-width:100%;max-height:220px;overflow:auto}

/* ========================= VSTEP 1.2 ========================= */
/* Keep the whole administration menu in place on long pages. */
@media(min-width:851px){
 .shell{grid-template-columns:245px minmax(0,1fr);align-items:start}
 .shell>.side{position:sticky;top:0;align-self:start;height:100vh;height:100dvh;overflow-y:auto;overscroll-behavior:contain;z-index:30}
 .shell>.main{min-width:0;margin:0 auto}
}
@media(max-width:850px){
 .shell>.side{position:sticky;top:0;align-self:start;z-index:30;box-shadow:0 5px 16px #061e3533;background:#132540;max-height:none;overflow-x:auto}
 .side nav{display:flex;gap:6px;align-items:center}
 .side .nav{white-space:nowrap}
 .side .v11-signout{margin-top:0}
}
/* iPad Safari: sticky first two table cells used to overlap the status and date.
   Only the table heading remains sticky; all body columns move together. */
.v11-student-scroll{position:relative;isolation:isolate;overflow:auto;touch-action:pan-x pan-y;scrollbar-gutter:stable;max-height:540px;}
.v11-student-table{width:max-content;min-width:1740px;table-layout:fixed;border-collapse:separate;border-spacing:0;}
.v11-student-table thead th{position:sticky!important;top:0!important;left:auto!important;z-index:5!important;background:#eff4fc!important;white-space:nowrap;}
.v11-student-table tbody td{position:static!important;left:auto!important;z-index:auto!important;box-shadow:none!important;white-space:nowrap;background:#fff;}
.v11-student-table th:nth-child(1),.v11-student-table td:nth-child(1){width:130px;min-width:130px;max-width:130px}
.v11-student-table th:nth-child(2),.v11-student-table td:nth-child(2){width:210px;min-width:210px;max-width:210px}
.v11-student-table th:nth-child(3),.v11-student-table td:nth-child(3){width:125px;min-width:125px;max-width:125px}
.v11-student-table th:nth-child(4),.v11-student-table td:nth-child(4){width:174px;min-width:174px;max-width:174px}
.v11-student-table th:nth-child(5),.v11-student-table td:nth-child(5){width:265px;min-width:265px;max-width:265px}
.v11-student-table th:nth-child(6),.v11-student-table td:nth-child(6){width:145px;min-width:145px;max-width:145px}
.v11-student-table th:nth-child(7),.v11-student-table td:nth-child(7){width:140px;min-width:140px;max-width:140px}
.v11-student-table th:nth-child(8),.v11-student-table td:nth-child(8){width:140px;min-width:140px;max-width:140px}
.v11-student-table th:nth-child(9),.v11-student-table td:nth-child(9){width:180px;min-width:180px;max-width:180px}
.v11-student-table th:nth-child(10),.v11-student-table td:nth-child(10){width:215px;min-width:215px;max-width:215px}
.v11-student-table tbody tr.v11-history-row td{background:#f6f9ff!important;white-space:normal}
.v11-student-table .v11-name{overflow:hidden;text-overflow:ellipsis}
.v11-student-table .v11-name strong,.v11-student-table .v11-name small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.v11-status{white-space:nowrap}
/* Workspaces with one skill per screen, each with its own save action. */
.v12-editor-header{display:flex;justify-content:space-between;align-items:center;gap:10px;margin-bottom:16px}
.v12-name-heading{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}
.v12-name-heading h2{margin:0 0 14px}
.v12-name-fields{display:flex;gap:12px;align-items:center}
.v12-name-fields .field{flex:1;min-width:120px;margin:7px 0 0}
.v12-name-fields button{white-space:nowrap;align-self:flex-end}
.v12-skill-tabs{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin:20px 0 14px}
.v12-skill-tab{background:#e9f0fc;color:#31527e;border:1px solid #d8e4f3;border-radius:12px;padding:15px 8px;font-weight:800}
.v12-skill-tab.is-active,.v12-skill-tab[aria-selected="true"]{background:#2457dc;color:#fff;box-shadow:0 8px 16px #2457dc2b}
.v12-skill-tab:hover{filter:brightness(.96)}
.v12-editor-container>.v10-bank-section,.v12-editor-container .v10-bank-section{margin:0;border-radius:16px 16px 0 0}
.v12-skill-save{position:sticky;bottom:0;z-index:9;display:flex;align-items:center;justify-content:space-between;gap:14px;padding:16px 20px;background:#fff;border:1px solid #dbe5f3;border-top:2px solid #bdd0ee;border-radius:0 0 16px 16px;box-shadow:0 -8px 25px #13254013}
.v12-skill-save strong,.v12-skill-save small{display:block}
.v12-skill-save small{font-size:12px;color:#6f809c;margin-top:4px}
.v12-publish-row{display:flex;justify-content:flex-end;margin:12px 0 25px}
.v12-tooltip{position:fixed;z-index:20000;max-width:260px;width:max-content;padding:8px 12px;line-height:1.3;border-radius:8px;background:#122945;color:#fff;font-size:12px;box-shadow:0 5px 19px #061e3550;pointer-events:none;white-space:normal}
.v12-tooltip[hidden]{display:none}
button:focus-visible,a:focus-visible,[tabindex="0"]:focus-visible,summary:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible{outline:3px solid #75a6ff;outline-offset:2px}
@media(max-width:650px){.v12-skill-tabs{gap:5px}.v12-skill-tab{font-size:12px;padding:12px 3px}.v12-name-fields{flex-wrap:wrap}.v12-name-fields button{width:100%}.v12-skill-save{flex-wrap:wrap}.v12-skill-save button{width:100%}}

/* ========================================================================
   VSTEP Online 1.3 — Responsive layout for desktop, tablet and mobile.
   Only presentation changes: scoring, autosave, recordings, exams unchanged.
   ======================================================================== */
:root{--v13-gap:clamp(10px,1.6vw,20px)}
html{scroll-behavior:smooth;scroll-padding-top:18px;-webkit-text-size-adjust:100%;text-size-adjust:100%}
body{min-width:0;overflow-x:clip}
#app,.shell,.student-shell,.main,.student-main,#view{min-width:0;max-width:100%}
img,svg,video,canvas,iframe{max-width:100%}
.card,.record,.article-excerpt,.email-prompt,.question,.v10-bank-group,.v09-result-hero{min-width:0;overflow-wrap:break-word}
.field,input:not([type="checkbox"]):not([type="radio"]),select,textarea{max-width:100%}
button,a,summary{touch-action:manipulation}
.option{min-height:44px;display:flex;align-items:flex-start;gap:8px;line-height:1.5;overflow-wrap:anywhere}
.option input[type="radio"]{flex:none;width:17px;height:17px;margin:3px 3px 0 0;accent-color:#2457dc}
input[type="checkbox"]{accent-color:#2457dc;min-width:16px;min-height:16px}
.table-scroll,.v10-history-scroll,.v11-student-scroll,.v11-bank-scroll,.v11-staff-scroll,.v11-audit-scroll,.v10-overflow{max-width:100%;-webkit-overflow-scrolling:touch;scrollbar-width:thin}
.table-scroll>.table{min-width:max-content}
.table th,.table td{overflow-wrap:normal}
.vstep-modal-backdrop{padding:max(12px,env(safe-area-inset-top)) max(12px,env(safe-area-inset-right)) max(12px,env(safe-area-inset-bottom)) max(12px,env(safe-area-inset-left))}
.vstep-modal{max-height:calc(100dvh - 24px);overscroll-behavior:contain}
.vstep-modal-buttons{background:#fff}
.v13-menu-toggle{display:none}
.v13-side-links{display:block}
/* Tables: scroll the table, never stretch or overlap the entire document. */
.v11-student-table,.v11-bank-table{border-collapse:separate;border-spacing:0}
.v11-student-table tbody td{position:static!important;left:auto!important;z-index:auto!important;box-shadow:none!important}
.v11-student-table thead th{position:sticky!important;top:0!important;left:auto!important}
.v11-history-row>td{white-space:normal!important;position:static!important}
.v11-history-row .v11-attempt-item{min-width:0}
.v11-student-scroll:focus-visible,.v11-bank-scroll:focus-visible,.table-scroll:focus-visible{outline:3px solid #82aaf7;outline-offset:2px}
/* Desktop: broad reading columns and comfortable dashboard. */
@media(min-width:1101px){
 .shell{grid-template-columns:245px minmax(0,1fr)}
 .shell>.side{position:sticky;top:0;height:100dvh;overflow-y:auto;overflow-x:hidden;align-self:start}
 .main{padding:clamp(22px,2.5vw,38px);max-width:1540px}
 .student-main{max-width:1460px;padding:26px clamp(24px,3vw,44px) 62px}
 .examgrid{grid-template-columns:minmax(0,.96fr) minmax(0,1.04fr);gap:20px}
 .examgrid .questions{position:sticky;top:16px;max-height:calc(100dvh - 32px);overflow-y:auto}
 .examgrid .passage{position:static!important;overflow:visible!important;max-height:none!important}
 .vstep-modal{width:min(580px,100%)}
}
/* Tablet: full-width writing space, sticky horizontal admin navigation. */
@media(min-width:701px) and (max-width:1100px){
 .shell{display:block;min-height:100dvh}
 .shell>.side{position:sticky;top:0;z-index:40;height:auto;min-height:68px;max-height:none;overflow:visible;padding:9px 20px;display:flex;align-items:center;justify-content:space-between;gap:12px;box-shadow:0 4px 17px #061e3540}
 .shell .brand{flex:0 0 auto;margin:0;font-size:17px;line-height:1.15}
 .shell .brand small{font-size:10px;margin-top:4px}
 .v13-side-links{display:flex;align-items:center;gap:5px;min-width:0}
 .v13-side-links nav{display:flex;gap:4px;align-items:center;min-width:0}
 .side .nav{width:auto;margin:0;white-space:nowrap;font-size:13px;padding:10px 9px;border-radius:9px}
 .side .v11-signout{margin:0 0 0 5px}
 .main{width:100%;max-width:1200px;padding:22px clamp(17px,2.5vw,30px) 45px}
 .top{gap:10px}.top h1{font-size:clamp(23px,3vw,32px)}
 .examgrid{grid-template-columns:1fr;gap:14px}
 .examgrid .questions{position:static;max-height:none;overflow:visible}
 .examgrid .passage{position:static!important;max-height:none!important;overflow:visible!important}
 .student-main{padding:22px 22px 50px}
 .v09-dashboard-stats{grid-template-columns:repeat(2,minmax(0,1fr))}
 .v11-student-scroll{max-height:530px}
}
/* On touch devices, don't require hovering to understand actions. */
@media(hover:none){
 .v11-icon-button{min-width:44px;min-height:44px}
 .v12-tooltip{display:none!important}
}
/* Mobile: collapsible admin menu and single-column working surfaces. */
@media(max-width:700px){
 html{scroll-padding-top:74px}
 .shell{display:block;min-height:100dvh}
 .shell>.side{position:sticky!important;top:0!important;z-index:60;display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:6px;min-height:64px;height:auto!important;max-height:none!important;padding:10px 14px;overflow:visible!important;box-shadow:0 6px 22px #091e3d38}
 .shell .brand{margin:0;min-width:0;font-size:18px;letter-spacing:-.3px;line-height:1.15}
 .shell .brand small{font-size:10px;margin-top:3px}
 .v13-menu-toggle{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-width:90px;min-height:44px;padding:8px 10px;border:1px solid #7890ad;background:#28466e;color:#fff;border-radius:10px;font-size:14px}
 .v13-menu-toggle span:first-child{font-size:19px;line-height:1}
 .v13-side-links{position:absolute;left:10px;right:10px;top:calc(100% + 5px);padding:10px;display:none;background:#132540;border:1px solid #4b6688;box-shadow:0 16px 36px #0b1e3a52;border-radius:14px;max-height:calc(100dvh - 90px);overflow-y:auto}
 .side.v13-menu-open .v13-side-links{display:block}
 .v13-side-links nav{display:grid;gap:4px}
 .side .nav,.side .v11-signout{width:100%;min-height:46px;text-align:left;display:block;margin:0;padding:12px 14px;font-size:15px;border-radius:9px}
 .side .v11-signout{margin-top:4px;border-top:1px solid #39516d;border-radius:0}
 .main{padding:16px 12px 46px!important;margin:0;max-width:100%}
 .top{align-items:flex-start;gap:8px;margin-bottom:18px}
 .top h1{font-size:clamp(22px,6vw,28px);line-height:1.2}
 .top>.badge{font-size:10px;flex:none}
 .card{padding:16px 14px;border-radius:15px;margin-bottom:13px}
 .v09-dashboard-stats{grid-template-columns:repeat(2,minmax(0,1fr));gap:9px;margin:0 0 16px}
 .v09-stat{padding:14px 12px;border-radius:14px;min-height:117px;gap:7px}
 .v09-stat small{font-size:12px}.v09-stat strong{font-size:clamp(25px,8vw,34px)}
 .v11-learners{padding:15px 12px}
 .v11-learners-heading,.v11-learners-heading-right{align-items:flex-start}
 .v11-learners-heading{flex-direction:column}
 .v11-learners-heading-right{width:100%;justify-content:space-between;gap:8px}
 .v11-learners-heading-right>button{flex:1;min-height:44px}
 .v11-filters{display:flex;flex-direction:column;gap:9px;align-items:stretch}
 .v11-filters .field,.v11-filters select{flex:auto;max-width:none;width:100%;min-width:0;margin:0}
 .v11-student-scroll{max-height:min(64dvh,560px);border-radius:12px;overflow:auto}
 .v11-bank-create{display:block}
 .v11-create-inline{display:flex;flex-direction:column;align-items:stretch;width:100%;gap:8px;margin-top:15px}
 .v11-create-inline .field{min-width:0;width:100%;flex:none}
 .v11-create-inline button{width:100%}
 .v11-bank-table{min-width:850px}
 .v11-bank-table th,.v11-bank-table td{padding:12px 14px}
 .v11-attempt-item{flex-direction:column;align-items:stretch;gap:8px}
 .v11-attempt-item button{align-self:flex-start}
 .v12-editor-header{flex-wrap:wrap}
 .v12-name-heading{display:block}
 .v12-name-heading .muted{display:block;margin-bottom:10px}
 .v12-name-fields{display:flex;flex-direction:column;align-items:stretch;gap:8px}
 .v12-name-fields .field{min-width:0;width:100%;flex:auto;margin:0}
 .v12-name-fields button{width:100%;min-height:44px}
 .v12-skill-tabs{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin:14px 0}
 .v12-skill-tab{min-width:0;min-height:46px;font-size:14px;padding:11px 6px}
 .v12-skill-save{position:sticky;bottom:0;bottom:env(safe-area-inset-bottom);flex-direction:column;align-items:stretch;gap:12px;padding:12px 14px;border-radius:0 0 14px 14px}
 .v12-skill-save button{width:100%;min-height:46px}
 .v10-bank-group{padding:12px}
 .v10-bank-q{padding:12px 10px}
 .bank-q-nav{gap:5px}.bank-q-nav button{min-height:44px;min-width:42px}
 .student-header{padding:12px 14px;gap:8px;align-items:center}
 .student-identity strong{font-size:17px}.student-identity small{font-size:11px}
 .student-logout{min-height:44px;padding:10px 12px;font-size:12px}
 .student-main{padding:15px 12px calc(44px + env(safe-area-inset-bottom))}
 .student-page-title{font-size:clamp(22px,6vw,28px);margin-bottom:14px}
 .student-shell .tabs,.reading-nav{display:flex;flex-wrap:nowrap;overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;scrollbar-width:thin;gap:7px;padding:0 1px 9px;max-width:100%;scroll-snap-type:x proximity}
 .student-shell .tabs button,.reading-nav button{flex:0 0 auto;white-space:nowrap;scroll-snap-align:start;min-height:44px;padding:10px 12px;font-size:13px}
 .examgrid{display:grid;grid-template-columns:minmax(0,1fr);gap:10px}
 .examgrid .passage,.examgrid .questions{position:static!important;overflow:visible!important;max-height:none!important;min-width:0}
 .reading-paragraphs p{font-size:15px;line-height:1.8;margin:0 0 16px}
 .section-heading h2{font-size:21px;overflow-wrap:anywhere}
 .section-heading .row,.row.between{min-width:0}
 .question{padding:14px 0}
 .question b{display:block;font-size:15px;line-height:1.5}
 .option{padding:12px 8px;min-height:44px}
 .option input{width:18px;height:18px}
 .listening-part,.listening-overview,.writing-task,.speaking-part{max-width:100%;padding:16px 14px}
 .listen-audio-embedded{padding:14px 12px;margin:16px 0}
 .listen-progress{gap:7px;flex-wrap:nowrap}
 .listen-clock{min-width:82px;font-size:11px}
 .listen-progress progress{min-width:24px}
 .speaking-controls{display:flex;flex-direction:column;align-items:stretch;gap:8px}
 .speaking-controls button{width:100%;min-width:0;min-height:46px}
 .speaking-control{padding:14px 12px}
 .essay{min-height:240px;line-height:1.7}
 .email-prompt,.article-excerpt{padding:14px 12px}
 .mindmap{padding:10px;max-width:100%}
 .mindmap-grid{gap:5px}.mindmap-box{font-size:11px;padding:8px 3px;overflow-wrap:anywhere}
 .v10-mindmap-nodes{gap:8px}.v10-mindmap-nodes>div{min-width:0;flex:1 1 125px;padding:10px 8px}
 .v10-box-grid{grid-template-columns:repeat(var(--cols),minmax(0,1fr));gap:4px}
 .v10-box-cell{font-size:11px;padding:8px 4px}
 .goal-grid,.exam-picker-grid{grid-template-columns:1fr;gap:10px;margin:14px 0}
 .goal-choice{min-height:96px;padding:16px}.goal-choice strong{font-size:29px}
 .v09-onboarding{padding:18px 15px}
 .v09-result-hero{padding:20px 15px;border-radius:17px}
 .v09-result-hero h2{font-size:clamp(22px,6vw,30px)}
 .v09-result-numbers{grid-template-columns:1fr;gap:8px;margin:18px 0}
 .v09-result-numbers>div:first-child{grid-column:auto}
 .v09-result-numbers>div{padding:12px}
 .history-entry .grid{grid-template-columns:minmax(0,1fr)}
 .grid{grid-template-columns:minmax(0,1fr);gap:12px}
 .vstep-modal-backdrop{align-items:center;padding:10px max(10px,env(safe-area-inset-right)) 10px max(10px,env(safe-area-inset-left))}
 .vstep-modal{padding:18px 15px 12px;width:100%;border-radius:16px;max-height:calc(100dvh - 20px);overscroll-behavior:contain}
 .vstep-modal h2{font-size:21px}
 .vstep-modal-buttons{position:sticky;bottom:-12px;padding:12px 0 max(8px,env(safe-area-inset-bottom));margin-top:17px;z-index:1;box-shadow:0 -7px 12px #fff8}
 .vstep-modal-buttons button{min-width:0;min-height:44px}
 #vstep-toasts{top:max(10px,env(safe-area-inset-top));right:10px;left:10px;max-width:none}
 .vstep-toast{font-size:13px}
}
/* Narrow phones (320px): avoid second-column overflow and cramped dialog buttons. */
@media(max-width:380px){
 .top>.badge{display:none}
 .student-identity small{max-width:180px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
 .v11-learners-heading-right{flex-wrap:wrap}
 .v11-learners-heading-right>button{flex:1 1 100%}
 .vstep-modal-buttons{display:grid;grid-template-columns:1fr 1fr;gap:8px}
 .vstep-modal-buttons button{font-size:13px;padding:10px 7px}
 .v09-dashboard-stats{gap:7px}.v09-stat{padding:12px 9px}
 .listen-clock{min-width:73px;font-size:10px}
}
/* Tablet + mobile: no independent scroll window for Reading. */
@media(max-width:1100px){
 .examgrid .passage,.examgrid .questions{position:static!important;max-height:none!important;overflow:visible!important}
 .v11-student-table th:first-child,.v11-student-table th:nth-child(2),
 .v11-student-table td:first-child,.v11-student-table td:nth-child(2){left:auto!important;position:static!important;box-shadow:none!important}
 .v11-student-table thead th{position:sticky!important;top:0!important}
}
/* Prevent iOS zoom on form focus; guarantee keyboard usability. */
@media(pointer:coarse){
 input:not([type="checkbox"]):not([type="radio"]),select,textarea{font-size:16px}
 button{min-height:44px}
}
@media(prefers-reduced-motion:reduce){
 html{scroll-behavior:auto}
 .vstep-modal,.vstep-toast{animation:none}
}
/* Fast jump between long Reading passages and their questions on touch screens. */
.v13-jump-link{display:none;text-decoration:none;background:#eef4ff;color:#2553ab;border:1px solid #d6e4fa;border-radius:9px;padding:11px 13px;font-size:14px;font-weight:750;min-height:44px;align-items:center;width:max-content;max-width:100%;margin:10px 0 14px}
@media(max-width:1100px){.v13-jump-link{display:inline-flex}#v13ReadingPassage,#v13ReadingQuestions{scroll-margin-top:100px}}
@media(max-width:700px){#v13ReadingPassage,#v13ReadingQuestions{scroll-margin-top:86px}}

/* VSTEP 1.5 — Sticky skill/Part navigation + authoritative countdown. */
.student-header{position:sticky;top:0;z-index:110;min-height:65px;box-sizing:border-box}
.v15-exam-toolbar{position:sticky;top:var(--v15-header-height,65px);z-index:95;background:#f4f7fb;border:1px solid #dbe5f3;border-radius:14px;box-shadow:0 8px 26px #192e4b18;padding:9px 12px;margin-bottom:16px;isolation:isolate}
.v15-skillbar{display:flex;align-items:center;gap:12px;justify-content:space-between;min-width:0}
.student-shell .v15-skillbar .tabs{display:flex;flex:1;min-width:0;gap:7px;margin:0;flex-wrap:nowrap;overflow-x:auto;-webkit-overflow-scrolling:touch;padding-bottom:3px;scrollbar-width:thin}
.v15-skillbar .tabs button{min-height:42px;flex:none;margin:0;white-space:nowrap;transition:background .15s}
.v15-skillbar .tabs button:disabled{cursor:not-allowed;opacity:.52}
.v15-skillbar .tabs button.active:disabled{opacity:1;background:#2856cf;color:#fff;cursor:default}
.v15-exam-clock{display:flex;align-items:center;gap:10px;flex-shrink:0;background:#e8f0ff;color:#173f81;border:1px solid #c9dcfa;border-radius:12px;padding:8px 12px;white-space:nowrap}
.v15-clock-caption{font-size:12px;font-weight:650;max-width:105px;overflow:hidden;text-overflow:ellipsis}
.v15-exam-clock strong{font-variant-numeric:tabular-nums;font-size:22px;letter-spacing:.35px;line-height:1.2}
.v15-exam-clock.is-urgent{background:#fff0f0;color:#aa2441;border-color:#f0adb9}
.v15-partnav{display:flex;align-items:center;gap:14px;padding:9px 0 0;border-top:1px solid #dbe5f3;margin-top:7px;min-width:0}
.v15-partnav-label{font-weight:750;font-size:12px;white-space:nowrap;color:#3b5f91}
.v15-partnav-label span{margin-left:5px;color:#839ab7}
.v15-part-buttons{display:flex;align-items:center;gap:8px;overflow-x:auto;min-width:0;max-width:100%;-webkit-overflow-scrolling:touch;scrollbar-width:thin;padding-bottom:3px}
.v15-partbutton{flex:none;background:#eef3fb;color:#244269;border:1px solid #d5e2f3;padding:9px 13px;font-size:13px;font-weight:700;min-height:40px;border-radius:10px;white-space:nowrap}
.v15-partbutton.selected{background:#195b99;color:#fff;border-color:#195b99;box-shadow:0 2px 8px #195b9929}
.v15-partbutton:disabled{opacity:.55;cursor:not-allowed}
.v15-exam-toolbar.v15-expiring{pointer-events:none}
#examcontent{scroll-margin-top:calc(var(--v15-header-height,65px) + 140px)}
#v13ReadingPassage,#v13ReadingQuestions,.listening-part,.writing-task,.speaking-part{scroll-margin-top:calc(var(--v15-header-height,65px) + 155px)}
/* Reading questions stay below the two sticky navigation bars. */
@media(min-width:1101px){.examgrid .questions{top:calc(var(--v15-header-height,65px) + 132px);max-height:calc(100dvh - var(--v15-header-height,65px) - 148px)}}
@media(max-width:850px){
 .v15-exam-toolbar{padding:7px 9px;margin-bottom:12px}
 .v15-skillbar{gap:7px}
 .v15-skillbar .tabs button{font-size:12px;padding:9px 10px;min-height:43px}
 .v15-exam-clock{padding:6px 9px;gap:5px}
 .v15-clock-caption{display:none}
 .v15-exam-clock strong{font-size:18px}
 .v15-partnav{gap:8px;margin-top:5px;padding-top:7px}
 .v15-partnav-label{font-size:11px}
 .v15-partbutton{font-size:12px;min-height:44px;padding:9px 11px}
}
@media(max-width:380px){
 .v15-exam-toolbar{padding:6px}
 .v15-skillbar .tabs{gap:4px}
 .v15-skillbar .tabs button{font-size:11px;padding:8px 9px}
 .v15-exam-clock strong{font-size:16px}
 .v15-partnav-label{display:none}
}

/* VSTEP 1.6 – Direct student grading navigation and published score corrections */
.v11-student-table .v16-student-link{position:relative;display:block;width:100%;background:transparent!important;color:#174a9b!important;border:0;text-align:left;padding:4px 20px 4px 0;border-radius:6px;filter:none;white-space:normal;}
.v16-student-link strong{color:#174a9b!important;text-decoration:underline;text-decoration-color:transparent;text-underline-offset:3px;}
.v16-student-link:hover strong,.v16-student-link:focus-visible strong{text-decoration-color:currentColor;}
.v16-student-link:focus-visible{outline:3px solid #80adff;outline-offset:2px;}
.v16-link-arrow{position:absolute;right:0;top:5px;opacity:.7;font-size:15px}
.v16-regrade-panel{background:#f0f6ff;border:1px solid #c7daf9;border-radius:12px;padding:17px;margin:14px 0;line-height:1.55;}
.v16-regrade-panel p{margin:8px 0 14px;color:#4d6584;white-space:pre-wrap;}
.v16-revision-table{min-width:720px}.v16-revision-table td{vertical-align:top;overflow-wrap:anywhere;}
.v16-submission .field:disabled{background:#f4f7fb;color:#53657f}
@media(max-width:600px){.v16-regrade-panel{padding:13px}.v16-regrade-panel button{width:100%}.v16-revision-table{min-width:660px}}

/* VSTEP 1.7 · Classroom administration / role-aware management */
.v17-class-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,330px),1fr));gap:16px}
.v17-class-card{border:1px solid #dce6f1;border-radius:15px;padding:19px;background:#fdfefe;box-shadow:0 2px 12px #112a4710}
.v17-class-card h3{margin:0 0 7px;font-size:19px}
.v17-class-card-top{display:flex;justify-content:space-between;align-items:flex-start;gap:16px}
.v17-actions,.v17-assignment-tools{display:flex;gap:9px;flex-wrap:wrap;margin-top:16px}
.v17-actions button,.v17-assignment-tools button{font-size:13px;padding:9px 12px}
.v17-state{font-size:12px;font-weight:750;line-height:1.25;display:inline-block;white-space:nowrap;padding:5px 10px;border-radius:999px}
.v17-state.active{background:#dff8ed;color:#066a49}
.v17-state.archived{background:#e7edf5;color:#526580}
.v17-roster{scroll-margin-top:96px}
.v17-roster h3{margin:27px 0 12px}
.v17-heading{gap:12px;flex-wrap:wrap}
.v17-scroll{overflow:auto;max-width:100%;-webkit-overflow-scrolling:touch;border:1px solid #dce6f0;border-radius:12px}
.v17-scroll .table{min-width:640px;width:100%;}
.v17-scroll .table th{position:sticky;top:0;background:#eef4fc;z-index:1;white-space:nowrap}
.v17-scroll .table td{vertical-align:middle}
.v17-scroll .table td small{display:block;color:#6e839c;margin-top:3px}
.v17-scroll .table button{padding:7px 11px;font-size:12px;white-space:nowrap}
.v17-history{max-height:440px}
.v17-history .table{min-width:860px}
.v17-preview{line-height:1.7}
.v17-preview-block{margin:8px 0;padding:11px 15px;border:1px solid #dbe6f1;border-radius:10px}
.v17-preview-block summary{cursor:pointer;font-weight:750;color:#234b7c}
.v17-preview-text{white-space:pre-wrap;line-height:1.8;padding-top:10px;overflow-wrap:break-word}
.v17-preview-questions{max-height:600px;overflow:auto;border-radius:12px;border:1px solid #dce6f0;padding:14px}
.v17-preview-question{padding:12px 0;border-bottom:1px solid #e6ecf3}
.v17-preview-question p{margin:4px 0;color:#344a63}
@media(max-width:760px){.v17-class-card{padding:14px}.v17-classes .row>button,.v17-roster .row>button{width:auto}.v17-class-card-top{flex-wrap:wrap}}
.v17-listening-audio{margin:10px 0 16px;padding:12px;border:1px solid #dce6f1;border-radius:12px}
.v17-listening-audio audio{display:block;width:100%;margin-top:8px}

/* VSTEP 1.8 — Class summary cards, touch-friendly batch dialog and roster filters */
.v18-class-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,345px),1fr));gap:16px;margin-top:18px}
.v18-class-card{background:#fff;border:1px solid #d9e5f3;border-radius:16px;padding:20px;box-shadow:0 4px 18px rgba(22,52,91,.045);min-width:0}
.v18-class-card-head{display:flex;gap:12px;align-items:flex-start;justify-content:space-between;margin-bottom:14px}
.v18-class-info{min-width:0;flex:1}
.v18-class-card h3{font-size:19px;line-height:1.3;overflow-wrap:anywhere;margin:0 0 12px;color:#172a47}
.v18-class-sub{display:grid;gap:5px;color:#526985;font-size:13px;margin-bottom:12px}
.v18-class-sub span{overflow-wrap:anywhere}
.v18-class-tools{display:flex;flex-wrap:wrap;gap:7px;align-items:center}
.v18-class-tools .v11-icon-button{width:40px;height:40px;min-width:40px;display:inline-flex;justify-content:center;align-items:center}
.v18-class-tools .v11-icon-button:focus-visible{outline:3px solid #94b7fd;outline-offset:2px}
.v18-class-card>.muted{display:block;font-size:12px}
.v18-dialog-open{overflow:hidden}
.v18-modal-root{position:fixed;inset:0;z-index:12000;display:grid;place-items:center;padding:14px}
.v18-modal-shade{position:absolute;inset:0;background:rgba(13,32,59,.65);backdrop-filter:blur(4px)}
.v18-bulk-dialog{position:relative;z-index:1;background:#fff;width:min(690px,100%);max-height:min(88dvh,850px);display:flex;flex-direction:column;border-radius:20px;box-shadow:0 24px 75px rgba(14,34,58,.3);overflow:hidden;color:#1d3150}
.v18-dialog-head{display:flex;align-items:flex-start;justify-content:space-between;gap:15px;padding:21px 23px 10px}
.v18-dialog-head h2{margin:0 0 5px;font-size:21px;line-height:1.3}
.v18-dialog-head p{margin:0;font-size:13px;line-height:1.55}
.v18-close{border:0;border-radius:10px;background:#eef3fa;color:#274569;font-size:27px;line-height:1;padding:5px 12px;min-width:42px;min-height:42px}
.v18-dialog-search{padding:10px 23px 8px;display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:12px}
.v18-dialog-search .field{width:100%;min-width:0;margin:0}
.v18-select-visible{display:flex;align-items:center;gap:8px;cursor:pointer;font-size:13px;font-weight:700;color:#23466f;white-space:nowrap}
.v18-select-visible input{width:19px;height:19px;accent-color:#315be1}
.v18-dialog-summary{display:flex;justify-content:space-between;align-items:center;gap:8px;padding:7px 23px 11px;font-size:12px;color:#6c7f9b}
.v18-dialog-summary strong{color:#174c9c}
.v18-people-list{overflow-y:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch;min-height:90px;max-height:410px;padding:0 15px 0 23px}
.v18-people-row{display:flex;align-items:center;gap:13px;padding:10px 8px 10px 0;border-top:1px solid #eaf0f7;cursor:pointer;min-height:61px;border-radius:7px}
.v18-people-row:has(input:checked){background:#f1f6ff}
.v18-people-row input{width:21px;height:21px;flex:0 0 21px;accent-color:#2559d7;cursor:pointer}
.v18-person-info{flex:1;min-width:0;display:grid;gap:3px;line-height:1.4}
.v18-person-info strong{font-size:14px;overflow-wrap:anywhere}
.v18-person-info small{font-size:12px;color:#6a7b94;overflow-wrap:anywhere}
.v18-person-info .v18-oldclass{color:#a15c0a;font-weight:650}
.v18-person-id{font-size:12px;color:#7890ae;white-space:nowrap}
.v18-no-people{padding:18px 4px}
.v18-transfer-note{margin:8px 23px 4px;font-size:12px;padding:9px 12px;border-radius:8px;background:#fff5dd;color:#815111;line-height:1.5}
.v18-dialog-footer{display:flex;justify-content:flex-end;gap:12px;border-top:1px solid #e5edf6;background:#f8fbff;padding:15px 23px}
.v18-dialog-footer button{min-height:44px}
.v18-class-chip{display:inline-block;border-radius:7px;padding:4px 7px;background:#eaf3ff;color:#2458a7;font-size:12px;font-weight:750;max-width:200px;overflow-wrap:anywhere;margin:2px 3px 2px 0}
.v18-teacher-line{display:block;font-size:11px;line-height:1.45;color:#687d98;max-width:220px;white-space:normal}
.v11-student-table{min-width:1440px}
.v18-student-class{min-width:175px;max-width:220px;white-space:normal}
.v18-staff-classes,.v18-teacher-classes{min-width:175px;max-width:250px;white-space:normal}
.v18-class-filters{display:flex;align-items:center;gap:9px;flex-wrap:wrap;min-width:0}
.v18-class-filters .field{min-width:150px;max-width:240px;flex:1 1 155px;max-height:49px;margin:0}
.v18-filter-label{color:#315781;font-size:13px;font-weight:750;white-space:nowrap}
.v11-student-table tbody tr[hidden],.v11-student-table tr.v11-history-row[hidden]{display:none!important}
@media(max-width:700px){
 .v18-modal-root{padding:8px}
 .v18-bulk-dialog{max-height:93dvh;border-radius:15px}
 .v18-dialog-head{padding:15px 15px 7px}
 .v18-dialog-head h2{font-size:18px}
 .v18-dialog-search{padding:8px 15px;grid-template-columns:minmax(0,1fr)}
 .v18-dialog-summary{padding:8px 15px}
 .v18-people-list{padding:0 12px 0 15px;max-height:none;flex:1;min-height:65px}
 .v18-transfer-note{margin:8px 15px}
 .v18-dialog-footer{padding:12px 15px}
 .v18-dialog-footer button{flex:1}
 .v18-class-filters{width:100%;display:grid;grid-template-columns:1fr 1fr}
 .v18-filter-label{grid-column:1/-1}
 .v18-class-filters .field{width:100%;min-width:0;max-width:none}
}
@media(max-width:370px){.v18-class-filters{grid-template-columns:1fr}.v18-dialog-head h2{font-size:16px}.v18-person-id{display:none}}
/* Confirmation opened from the batch dialog must stay above it. */
body.v18-dialog-open .vstep-modal-backdrop{z-index:12500}

/* VSTEP 1.9 – class-first administration, responsive two-row horizontal carousel. */
.v19-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;flex-wrap:wrap;margin-bottom:18px}
.v19-head h2{margin:0 0 6px}.v19-head p{margin:0;line-height:1.5}
.v19-carousel-controls{display:flex;justify-content:flex-end;align-items:center;gap:10px;margin-bottom:12px}
.v19-carousel-controls button{min-width:44px;min-height:42px;padding:7px 15px}
.v19-class-carousel{display:grid;grid-auto-flow:column;grid-template-rows:repeat(2,minmax(210px,auto));grid-template-columns:repeat(4,minmax(0,1fr));grid-auto-columns:minmax(0,calc((100% - 42px)/4));column-gap:14px;row-gap:14px;overflow-x:auto;overscroll-behavior-x:contain;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;padding:4px 3px 17px;max-width:100%}
.v19-overview-card{cursor:pointer;scroll-snap-align:start;display:flex;flex-direction:column;gap:8px;background:linear-gradient(155deg,#fff,#f8fbff);border:1px solid #d8e5f5;border-radius:15px;padding:17px;min-width:0;box-shadow:0 3px 12px #122a4710;transition:box-shadow .15s,border-color .15s}
.v19-overview-card:hover,.v19-overview-card:focus-visible{border-color:#4d84ef;box-shadow:0 8px 24px #1a4b9e22;outline:none}
.v19-card-head{display:flex;justify-content:space-between;gap:8px;align-items:flex-start}.v19-card-head h3{font-size:17px;line-height:1.4;min-height:40px;margin:0;overflow-wrap:anywhere}
.v19-dot{background:#16a279;border-radius:50%;width:9px;height:9px;flex-shrink:0;margin-top:5px}.v19-dot.off{background:#aab5c2}
.v19-card-teacher{font-size:12px;line-height:1.5;margin:0;min-height:35px;color:#536e8d;overflow-wrap:anywhere;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.v19-card-metrics{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:5px;margin-top:auto}
.v19-card-metrics span{border-radius:8px;background:#edf4ff;padding:8px 4px;text-align:center;min-width:0}
.v19-card-metrics strong{display:block;font-size:21px;color:#183e78}
.v19-card-metrics small{display:block;font-size:10px;line-height:1.25;color:#607894}
.v19-card-foot{border-top:1px solid #e1e9f2;padding-top:10px;font-size:12px;font-weight:700;display:flex;justify-content:space-between;gap:6px;color:#365ea4}
.v19-accounts{margin-top:18px}.v19-scroll-table{overflow:auto;max-height:450px;border:1px solid #dce6f1;border-radius:12px;-webkit-overflow-scrolling:touch}
.v19-scroll-table .table{min-width:850px}.v19-scroll-table th{position:sticky;top:0;background:#eff5fc;z-index:1}.v19-scroll-table td small{display:block;color:#6e829a}
.v19-chip{display:inline-block;margin:2px 4px 2px 0;padding:4px 7px;border-radius:7px;background:#eef5ff;color:#24599e;font-weight:700;font-size:12px}
.v19-roster{scroll-margin-top:80px}.v19-roster h3{margin:27px 0 14px}.v19-roster .v19-head .row{flex-wrap:wrap;gap:8px}
.v19-roster .v19-head .row button{padding:9px 13px;font-size:13px}
.v19-roster-scroll{max-height:560px;overflow:auto;max-width:100%;border:1px solid #d9e5f3;border-radius:12px;-webkit-overflow-scrolling:touch;overscroll-behavior:contain}
.v19-roster-scroll .table{min-width:1200px;width:100%;border-collapse:separate;border-spacing:0}
.v19-roster-scroll .table th{position:sticky;top:0;background:#eaf2ff;z-index:1;font-size:12px;white-space:nowrap}
.v19-roster-scroll .table td{font-size:13px;vertical-align:middle;padding:13px 10px}
.v19-roster-scroll .table td:first-child{min-width:155px}.v19-roster-scroll .table td small{display:block;font-size:11px;color:#7186a3;margin-top:3px}
.v19-score-tag{display:inline-block;white-space:nowrap;margin:2px 3px 2px 0;padding:4px 6px;background:#edf3ff;border-radius:6px;color:#25559d;font-weight:650;font-size:12px}
.v19-state{display:inline-block;white-space:nowrap;border-radius:999px;padding:6px 10px;background:#edf1f6;color:#51677e;font-size:12px;font-weight:750}
.v19-state.progress{background:#fff1d5;color:#855108}.v19-state.done{background:#dff8ed;color:#0b7653}
.v19-action-line{display:flex;gap:5px}.v19-action-line .v11-icon-button{min-width:36px;width:36px;height:36px;padding:6px}
.v19-history-line[hidden]{display:none}.v19-history-line td{background:#f6f9ff!important}.v19-attempt-history{display:grid;gap:9px;max-width:100%;overflow:auto;padding:13px}
.v19-exam-line{display:flex;align-items:center;gap:14px;justify-content:space-between;border-bottom:1px solid #dee9f6;padding:10px 0;min-width:800px}
.v19-exam-line button{white-space:nowrap;font-size:12px}.v19-return{margin:14px 0}
.v19-class-audit{margin-top:24px;border:1px solid #d7e4f4;border-radius:12px;padding:14px}.v19-class-audit summary{cursor:pointer;font-weight:800;color:#315b95}
.v19-class-audit .v19-roster-scroll{margin-top:12px}.v19-class-audit .table{min-width:790px}
.v19-modal-active{overflow:hidden}.v19-modal-backdrop{position:fixed;inset:0;z-index:13000;background:#0d2843a8;backdrop-filter:blur(5px);padding:12px;display:grid;place-items:center}
.v19-account-dialog{width:min(630px,100%);max-height:94dvh;overflow:auto;overscroll-behavior:contain;background:#fff;color:#19304c;border-radius:20px;padding:24px;box-shadow:0 24px 80px #081b3a55}
.v19-account-dialog .v19-head{margin-bottom:14px}.v19-account-dialog .v19-head h2{font-size:23px}.v19-account-dialog .vstep-modal-field{font-size:13px}
.v19-account-dialog .field{width:100%}.v19-classes-control{margin-top:22px;border-top:1px solid #e1eaf5;padding-top:16px}.v19-classes-control h3{font-size:16px;margin:0 0 4px}
.v19-classes-control p{font-size:12px;line-height:1.55;margin:0 0 10px}
.v19-options{max-height:225px;overflow-y:auto;display:grid;gap:6px;border:1px solid #dae7f5;background:#f7faff;border-radius:12px;padding:8px}
.v19-class-check{display:flex;align-items:center;gap:12px;cursor:pointer;padding:8px;border-radius:8px;border:1px solid transparent}
.v19-class-check:has(input:checked){background:#eaf2ff;border-color:#9dbef7}
.v19-class-check input,.v19-permission-toggle input{width:19px;height:19px;flex-shrink:0;accent-color:#275fda}
.v19-class-check span{min-width:0;display:grid;gap:2px}.v19-class-check small{color:#6c829c;line-height:1.35}
.v19-grant-option{padding:13px;margin-top:14px;background:#f3f7ff;border:1px solid #cfddf5;border-radius:12px}.v19-grant-option[hidden]{display:none}
.v19-permission-toggle{display:flex;align-items:flex-start;gap:12px;cursor:pointer}.v19-permission-toggle span{display:grid;gap:5px}.v19-permission-toggle span svg{display:inline-block}.v19-permission-toggle small{color:#647b99;font-size:12px;line-height:1.45}
.v19-modal-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:19px}.v19-modal-actions button{min-width:110px}
body.v19-modal-active .vstep-modal-backdrop{z-index:14000}
@media(max-width:1100px){.v19-class-carousel{grid-template-columns:repeat(2,minmax(0,1fr));grid-auto-columns:calc((100% - 14px)/2)}}
@media(max-width:620px){.v19-class-carousel{grid-template-columns:minmax(0,1fr);grid-auto-columns:100%}.v19-head .row{width:100%}.v19-roster .v19-head .row button{flex:1;min-width:130px}
 .v19-account-dialog{padding:16px;border-radius:14px;max-height:96dvh}.v19-account-dialog .v19-head h2{font-size:19px}
 .v19-modal-actions button{flex:1}.v19-card-metrics strong{font-size:18px}}
/* Equal width for all implicit carousel columns, including the first four. */
.v19-class-carousel{grid-template-columns:none;grid-auto-columns:calc((100% - 42px)/4)}
@media(max-width:1100px){.v19-class-carousel{grid-template-columns:none;grid-auto-columns:calc((100% - 14px)/2)}}
@media(max-width:620px){.v19-class-carousel{grid-template-columns:none;grid-auto-columns:100%}}
.v19-deleted-toggle{display:flex;align-items:center;gap:8px;color:#5a708a;font-size:13px;margin:0 0 14px}
.v19-deleted-toggle input{width:17px;height:17px;accent-color:#245be0}
.v19-accounts .v19-action-line{align-items:center;gap:5px;white-space:nowrap}

/* VSTEP 2.0 — orderly 4×2 class pages and compact account/class management. */
.v19-class-carousel{display:flex!important;gap:16px!important;align-items:stretch;scroll-snap-type:x mandatory;overflow-x:auto;overflow-y:hidden;padding:5px 3px 17px}
.v20-class-page{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));grid-template-rows:repeat(2,minmax(210px,auto));gap:14px;flex:0 0 100%;min-width:0;scroll-snap-align:start}
.v20-class-page .v19-overview-card{min-width:0}
.v20-account-group{margin-top:24px;border-top:1px solid #e1eaf4;padding-top:18px}
.v20-account-group h3{display:flex;align-items:center;gap:10px;margin:0 0 14px;color:#173052}
.v20-account-group .v19-scroll-table{max-height:430px;overflow:auto;overscroll-behavior:contain}
.v20-account-group .table{min-width:730px}
.v20-class-select{width:100%;height:46px;border:1px solid #c9d9ec;border-radius:10px;padding:8px 12px;background:#fff;color:#1c3350}
.v19-options:has(.v20-class-select),.v19-options:has(.v20-class-dropdown){display:block;padding:0;max-height:none;border:0;background:transparent;overflow:visible}
.v20-class-dropdown{position:relative;width:100%;max-width:100%}
.v20-class-dropdown summary{list-style:none;cursor:pointer;border:1px solid #c9d9ec;border-radius:10px;padding:12px;background:#fff;display:flex;align-items:center;justify-content:space-between;min-height:46px}
.v20-class-dropdown summary::after{content:'▾';font-weight:800;color:#59739a}
.v20-class-dropdown[open] summary{border-color:#2d66dd;border-bottom-left-radius:0;border-bottom-right-radius:0}
.v20-dropdown-list{max-height:185px;overflow-y:auto;border:1px solid #c9d9ec;border-top:0;border-radius:0 0 10px 10px;background:#fff;padding:7px}
.v20-class-item{display:flex;align-items:center;gap:9px;padding:10px 8px;cursor:pointer;border-radius:8px}
.v20-class-item:hover,.v20-class-item:focus-within{background:#eaf2ff}.v20-class-item small{margin-left:auto;color:#66809c}
.v20-class-item input{width:18px;height:18px;accent-color:#275fda}
@media(max-width:1100px){.v20-class-page{grid-template-columns:repeat(2,minmax(0,1fr));grid-template-rows:repeat(4,minmax(190px,auto))}}
@media(max-width:620px){.v20-class-page{grid-template-columns:minmax(0,1fr);grid-template-rows:repeat(8,minmax(165px,auto))}.v19-class-carousel{max-height:75dvh;overflow-y:auto}.v19-head{flex-wrap:wrap}.v20-account-group .table{min-width:660px}}

/* VSTEP 2.1 – unified class editor, accessible and touch-friendly. */
body.v21-modal-open{overflow:hidden}
.v21-modal{position:fixed;inset:0;z-index:15000;display:grid;place-items:center;padding:12px}
.v21-shade{position:absolute;inset:0;background:#102b48b3;backdrop-filter:blur(4px)}
.v21-dialog{position:relative;z-index:1;width:min(700px,100%);max-height:min(92dvh,920px);overflow:auto;background:#fff;color:#19304c;border-radius:18px;padding:23px;box-shadow:0 22px 65px #05183066;overscroll-behavior:contain}
.v21-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:15px}
.v21-head h2{margin:0 0 5px;font-size:24px}
.v21-head p{margin:0;line-height:1.5;font-size:13px}
.v21-close{min-height:42px;min-width:42px;font-size:22px;padding:6px}
.v21-field{display:grid;gap:7px;font-size:14px;font-weight:750;margin-bottom:17px}
.v21-field .field{width:100%;min-height:44px}
.v21-current{font-size:13px;color:#425873;line-height:1.5;margin:8px 0;overflow-wrap:anywhere}
.v21-helper{font-size:12px;line-height:1.6;margin:12px 0 17px}
.v21-panel{border:1px solid #d6e2f2;border-radius:12px;margin-bottom:10px;overflow:clip}
.v21-panel>summary{list-style:none;cursor:pointer;padding:16px 15px;min-height:50px;background:#f5f8ff;display:flex;gap:9px;align-items:center;justify-content:space-between;font-weight:800;outline-offset:-2px}
.v21-panel>summary::-webkit-details-marker{display:none}
.v21-panel>summary::before{content:'▸';color:#2863cb}
.v21-panel[open]>summary::before{content:'▾'}
.v21-panel>summary span{margin-left:auto;font-size:12px;color:#4b6d9c}
.v21-panel-body{padding:14px;display:grid;gap:10px}
.v21-search-label{display:grid;gap:6px;font-weight:700;font-size:12px}
.v21-search-label input{width:100%;min-height:42px}
.v21-tools{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.v21-tools .v21-found{margin-right:auto;color:#667e9b;font-size:12px}
.v21-tools button{padding:7px 10px;min-height:38px;font-size:12px}
.v21-people{max-height:230px;overflow:auto;border:1px solid #dbe6f4;border-radius:10px;padding:5px;background:#fff}
.v21-person{cursor:pointer;display:flex;align-items:center;gap:11px;padding:10px;border-radius:9px;min-height:55px;border:1px solid transparent}
.v21-person:hover,.v21-person:focus-within,.v21-person:has(input:checked){background:#eef5ff;border-color:#a5c5fa}
.v21-person input{width:19px;height:19px;accent-color:#2563db;flex-shrink:0}
.v21-person span{display:grid;gap:3px;min-width:0}
.v21-person small{color:#687f9e;font-size:12px;overflow-wrap:anywhere}
.v21-empty{margin:9px;color:#64768d;font-size:13px}
.v21-note{font-size:13px;background:#fff4d9;color:#74490b;border-radius:9px;padding:11px;margin:12px 0}
.v21-note[hidden]{display:none}
.v21-footer{display:flex;align-items:center;justify-content:flex-end;gap:10px;margin-top:20px}
.v21-footer button{min-width:125px;min-height:43px}
body.v21-modal-open .vstep-modal-backdrop{z-index:16000}
@media(max-width:620px){.v21-dialog{padding:15px;border-radius:14px;max-height:96dvh}.v21-head h2{font-size:20px}.v21-tools{gap:6px}.v21-tools button{flex:1}.v21-footer button{flex:1;min-width:0}.v21-current{font-size:12px}}

/* VSTEP 2.2 – consensual camera recording, viewport-safe on desktop/tablet/mobile */
.v22-proctor{position:fixed;right:max(14px,env(safe-area-inset-right));bottom:max(14px,env(safe-area-inset-bottom));width:220px;max-width:calc(100vw - 28px);z-index:980;background:#fff;border:1px solid #bfd1e9;border-radius:15px;box-shadow:0 12px 42px rgba(13,34,68,.25);overflow:hidden;font-family:inherit;color:#152d4e}
.v22-head{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:9px 11px;background:#eef4ff}
.v22-indicator{font-size:12px;font-weight:800;color:#667990;white-space:nowrap}
.v22-indicator[data-state=recording]{color:#bb2447}.v22-indicator[data-state=busy]{color:#9b6b12}.v22-indicator[data-state=error]{color:#b62d32}
.v22-collapse{padding:2px 5px;min-width:32px;min-height:30px;border:0;background:transparent;color:#253b5e;cursor:pointer}
.v22-body{padding:10px;display:grid;gap:8px}.v22-proctor.v22-collapsed .v22-body{display:none}
.v22-video-wrap{position:relative;border-radius:9px;overflow:hidden;background:#142235;aspect-ratio:4/3;display:flex;align-items:center;justify-content:center}
.v22-video-wrap video{display:block;width:100%;height:100%;object-fit:cover;transform:scaleX(-1)}.v22-video-wrap.v22-empty video{display:none}
.v22-placeholder{display:none;color:#fff;font-size:13px}.v22-empty .v22-placeholder{display:block}
.v22-note{font-size:11px;color:#546b84;line-height:1.5;overflow-wrap:anywhere}
.v22-actions{display:flex;gap:6px;flex-wrap:wrap}.v22-actions button{font-size:11px;padding:9px 10px;min-height:35px;line-height:1.3;flex:1}
.v22-actions button[hidden]{display:none}
.v22-consent-layer{position:fixed;inset:0;z-index:21000;display:grid;place-items:center;padding:16px}
.v22-consent-shade{position:absolute;inset:0;background:rgba(10,27,47,.65);backdrop-filter:blur(4px)}
.v22-consent{position:relative;background:#fff;width:min(100%,560px);max-height:calc(100dvh - 28px);overflow-y:auto;padding:clamp(18px,3vw,28px);border-radius:18px;color:#172f52;box-shadow:0 18px 55px #091a3755;line-height:1.65}
.v22-consent h2{font-size:23px;margin:0 0 12px}.v22-consent p{font-size:14px;margin:0 0 13px}
.v22-consent-foot{color:#597188;font-size:12px!important}
.v22-consent-actions{display:flex;justify-content:flex-end;gap:10px;flex-wrap:wrap;margin-top:15px}.v22-consent-actions button{min-height:42px}
.v22-staff .v22-manifest{margin-top:14px}.v22-clip{padding:10px 13px;border:1px solid #dbe5f2;border-radius:10px;margin:7px 0;background:#f9fbff}
.v22-clip summary{cursor:pointer;font-size:13px;font-weight:750;color:#234774}
.v22-clip video{margin-top:10px;background:#152238;display:block;width:100%;max-width:540px;border-radius:8px;max-height:350px}
.v22-pages{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:10px 0}.v22-pages span{font-size:13px}
@media (max-width:1024px){.v22-proctor{width:170px}.v22-body{padding:7px}.v22-actions button{padding:7px 6px;font-size:10px}}
@media (max-width:650px){
 .v22-proctor{width:auto;min-width:175px;max-width:calc(100vw - 18px);right:max(8px,env(safe-area-inset-right));bottom:max(8px,env(safe-area-inset-bottom));border-radius:14px}
 /* MOBILE: only preview is hidden; visible indicator and consent remain. Never covertly record. */
 .v22-proctor .v22-video-wrap{display:none!important}
 .v22-proctor .v22-body{padding:5px 9px 9px;gap:5px}
 .v22-proctor .v22-note{font-size:10px;max-width:245px}
 .v22-proctor .v22-actions button{min-height:30px;font-size:11px;padding:5px 8px}
 .v22-proctor.v22-collapsed .v22-body{display:none}
 .v22-consent-actions{display:grid;grid-template-columns:1fr 1fr}.v22-consent-actions button{min-width:0;font-size:12px}
}
@media (prefers-reduced-motion:reduce){.v22-proctor,.v22-consent{transition:none!important;animation:none!important}}
