@font-face{font-family:Jakarta;src:url('assets/jakarta.woff2') format('woff2');font-weight:200 800;font-display:swap}
:root{--bg:#080d1e;--ink:#f4f1ff;--muted:#c3bbdc;--line:#c2b5ff35;--panel:#181539d9;--panel2:#151232b3;--accent:#bba8ff;--cyan:#21c7e8;--ok:#5fe0a6;--bad:#ff8fa3;--grad:linear-gradient(100deg,#21c7e8,#6c4dff 60%,#a64dff)}
*{box-sizing:border-box}
[hidden]{display:none!important}
html{background:var(--bg)}
body{margin:0;min-height:100vh;background:radial-gradient(ellipse at 20% 0,#39277577,transparent 55%),var(--bg);color:var(--ink);font:16px/1.65 Jakarta,system-ui,sans-serif;-webkit-text-size-adjust:100%}
button,input,select,textarea{font:inherit;color:inherit}
a{color:#baf3ff}
h1{font-size:clamp(28px,4.4vw,40px);line-height:1.2;margin:0 0 14px}
h2{font-size:clamp(21px,3vw,25px);line-height:1.3;margin:0 0 12px}
h3{font-size:18px;line-height:1.4;margin:0 0 8px}
p{margin:0 0 14px}
.muted{color:var(--muted)}
.small{font-size:14px}
.top{max-width:1200px;margin:auto;padding:18px 24px;display:flex;justify-content:space-between;align-items:center;gap:16px}
.logo{width:112px;height:auto;display:block}
.top-right{display:flex;align-items:center;gap:14px}
.section-name{color:var(--muted);font-size:14px}
.timer{font-variant-numeric:tabular-nums;font-weight:750;padding:6px 12px;border-radius:999px;border:1px solid var(--line);background:#6c4dff25;min-width:74px;text-align:center}
.timer.low{border-color:#ff8fa3aa;background:#ff8fa322}
.progress{height:4px;background:#ffffff12}
.progress>div{height:100%;width:0;background:var(--grad);transition:width .4s}
main{max-width:1160px;margin:auto;padding:24px 24px 120px;outline:none}
.narrow{max-width:760px;margin:auto}
.card{padding:24px;border:1px solid var(--line);border-radius:24px;background:var(--panel);margin:0 0 20px}
.notice{border-left:3px solid var(--cyan);padding:12px 18px;background:#21c7e810;border-radius:0 12px 12px 0;margin:16px 0}
.btn{min-height:46px;border-radius:12px;border:1px solid var(--line);padding:10px 20px;background:#6c4dff25;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;gap:8px;text-decoration:none;color:var(--ink)}
.btn.primary{background:var(--grad);font-weight:750;border-color:transparent}
.btn:disabled{opacity:.45;cursor:not-allowed}
.btn:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible{outline:2px solid var(--cyan);outline-offset:2px}
.actions{display:flex;gap:12px;flex-wrap:wrap;margin-top:20px;align-items:center}
.list{margin:0 0 14px;padding-left:22px}
.list li{margin:4px 0}
.check{display:flex;gap:12px;align-items:flex-start;margin:14px 0;cursor:pointer}
.check input{width:20px;height:20px;margin-top:3px;accent-color:#9c84ff;flex:none}
details{border:1px solid var(--line);border-radius:14px;padding:12px 16px;background:#080a2055;margin:12px 0}
details summary{cursor:pointer;font-weight:650}
details[open] summary{margin-bottom:10px}
.facts{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin:18px 0}
.fact{padding:14px;border:1px solid var(--line);border-radius:16px;background:var(--panel2)}
.fact b{display:block;font-size:20px}
.fact span{color:var(--muted);font-size:14px}

/* questions */
.split{display:grid;grid-template-columns:1fr 1fr;gap:28px;align-items:start}
.passage{position:sticky;top:12px;padding:24px;border:1px solid var(--line);border-radius:24px;background:var(--panel);max-height:calc(100vh - 110px);overflow:auto;line-height:1.85}
.passage p{margin:0 0 16px}
.passage .plabel{font-weight:800;color:var(--accent);margin-right:6px}
.group{margin-bottom:24px}
.group-head{font-weight:700;margin-bottom:12px}
.q{margin:0 0 14px;padding:18px;border:1px solid var(--line);border-radius:18px;background:var(--panel2)}
.q .qid{display:inline-block;font-weight:800;color:var(--accent);margin-right:8px}
.q label.prompt{display:block;margin-bottom:10px}
.opts{display:grid;gap:8px}
.opt{display:flex;gap:12px;align-items:flex-start;padding:11px 14px;border:1px solid var(--line);border-radius:14px;background:#080a2055;cursor:pointer}
.opt:has(input:checked){background:#4a358866;border-color:#8edee9}
.opt input{accent-color:#9c84ff;margin-top:5px;flex:none;width:18px;height:18px}
.opts.inline{grid-template-columns:repeat(auto-fill,minmax(140px,1fr))}
input[type=text],input[type=email],input[type=month],select,textarea{width:100%;min-height:46px;padding:10px 14px;border-radius:12px;border:1px solid var(--line);background:#0b0f26;color:var(--ink)}
input.gap{display:inline-block;width:12em;max-width:100%;min-height:40px;padding:6px 10px;margin:2px 4px;vertical-align:middle}
.formtable{width:100%;border-collapse:collapse;margin:6px 0 4px}
.formtable td{padding:10px 12px;border-bottom:1px solid var(--line);vertical-align:middle}
.formtable td:first-child{color:var(--muted);width:38%}
.notes{padding:18px 20px;border:1px dashed var(--line);border-radius:16px;background:#080a2055}
.notes h3{margin-bottom:10px}
.notes li{margin:10px 0}
.headings{padding:14px 18px;border:1px solid var(--line);border-radius:14px;background:#080a2055;margin-bottom:14px}
.headings div{margin:4px 0}
.summary{line-height:2.3}
.gapnum{font-weight:800;color:var(--accent);font-size:14px}

/* listening */
.player{display:flex;align-items:center;gap:16px;padding:18px 20px;border:1px solid var(--line);border-radius:18px;background:#16133a;margin-bottom:20px;position:sticky;top:8px;z-index:5;box-shadow:0 6px 20px #0007}
.player .bar{flex:1;height:8px;border-radius:99px;background:#ffffff15;overflow:hidden}
.player .bar>div{height:100%;width:0;background:var(--grad)}
.player .status{min-width:200px;font-weight:650}
.dot{width:12px;height:12px;border-radius:50%;background:var(--muted);flex:none}
.dot.live{background:#ff6b8a;box-shadow:0 0 0 0 #ff6b8a88;animation:pulse 1.4s infinite}
@keyframes pulse{70%{box-shadow:0 0 0 10px #ff6b8a00}100%{box-shadow:0 0 0 0 #ff6b8a00}}

/* writing */
.writebox{min-height:320px;line-height:1.7;resize:vertical}
.wordcount{color:var(--muted);font-size:14px;margin-top:8px}

/* speaking */
.cue{padding:18px 20px;border:1px solid var(--line);border-radius:16px;background:#080a2055}
.cue ul{margin:8px 0;padding-left:22px}
.meter{height:10px;border-radius:99px;background:#ffffff15;overflow:hidden;margin:16px 0 6px}
.meter>div{height:100%;width:0;background:linear-gradient(90deg,#5fe0a6,#21c7e8);transition:width .08s}
.bigtime{font-size:44px;font-weight:800;font-variant-numeric:tabular-nums;line-height:1.1}
.steps{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:16px}
.steps span{font-size:13px;padding:4px 10px;border-radius:99px;border:1px solid var(--line);color:var(--muted)}
.steps span.on{color:var(--ink);border-color:#8edee9;background:#21c7e818}
.steps span.done{color:var(--ok);border-color:#5fe0a655}

/* results */
.hero{text-align:center;padding:34px 24px}
.hero .band{font-size:clamp(56px,10vw,84px);font-weight:800;line-height:1;background:var(--grad);-webkit-background-clip:text;background-clip:text;color:transparent}
.skills{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin:0 0 20px}
.skill{padding:18px;border:1px solid var(--line);border-radius:20px;background:var(--panel);text-align:center}
.skill b{display:block;font-size:clamp(22px,2.6vw,30px);line-height:1.2}
.skill span{color:var(--muted);font-size:14px}
.crit{padding:14px 0;border-top:1px solid var(--line)}
.crit:first-of-type{border-top:0}
.crit-head{display:flex;justify-content:space-between;gap:12px;font-weight:700}
.crit blockquote{margin:8px 0;padding:6px 12px;border-left:3px solid var(--accent);color:var(--muted);font-style:italic}
.tip{color:#d9fff4}
.kinds{display:grid;gap:6px;margin:10px 0}
.kind{display:flex;justify-content:space-between;gap:10px;padding:8px 12px;border-radius:10px;background:#080a2055}
.review td,.review th{padding:8px 10px;border-bottom:1px solid var(--line);text-align:left;vertical-align:top;font-size:14px}
.review{width:100%;border-collapse:collapse}
.ok{color:var(--ok)}
.no{color:var(--bad)}
.spinner{width:42px;height:42px;border-radius:50%;border:4px solid #ffffff22;border-top-color:var(--cyan);animation:spin 1s linear infinite;margin:10px auto 18px}
@keyframes spin{to{transform:rotate(360deg)}}
.toast{position:fixed;left:50%;bottom:24px;transform:translateX(-50%);max-width:min(560px,calc(100% - 32px));padding:12px 18px;border-radius:14px;background:#2a1f5c;border:1px solid var(--line);box-shadow:0 10px 30px #0008;z-index:50}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.field label{display:block;font-weight:600;margin-bottom:6px}
.error{color:var(--bad);margin-top:10px}

@media (max-width:860px){
  .split{grid-template-columns:1fr}
  .passage{position:static;max-height:none}
  .facts,.skills{grid-template-columns:repeat(2,1fr)}
}
@media (max-width:520px){
  .top{padding:14px 16px}
  main{padding:16px 16px 110px}
  .card{padding:18px;border-radius:20px}
  .logo{width:92px}
  .section-name{display:none}
  .grid2{grid-template-columns:1fr}
  .player{flex-wrap:wrap}
  .player .status{min-width:0;width:100%}
  input.gap{width:100%;margin:6px 0}
}
.missing{outline:2px solid #ff8fa3;outline-offset:2px}

/* answers with highlighted quotes */
.tag{display:inline-block;min-width:30px;padding:1px 6px;margin-right:6px;border-radius:6px;font-size:12px;font-weight:800;text-align:center;vertical-align:1px}
.answer{margin-top:18px}
.answer-text{white-space:pre-wrap;line-height:1.9;margin:0}
.tq{padding:12px 0;border-top:1px solid var(--line)}
.tq:first-of-type{border-top:0;padding-top:0}
mark.hl{color:inherit;border-radius:4px;padding:1px 2px;box-decoration-break:clone;-webkit-box-decoration-break:clone}
mark.hl sup{font-size:10px;font-weight:800;margin-left:3px;opacity:.9}
.c1{background:#21c7e833;border-bottom:2px solid #21c7e8}.tag.c1{color:#9cecfa}
.c2{background:#a64dff33;border-bottom:2px solid #b67cff}.tag.c2{color:#d6b6ff}
.c3{background:#5fe0a633;border-bottom:2px solid #5fe0a6}.tag.c3{color:#a8f0cf}
.c4{background:#ffb84d33;border-bottom:2px solid #ffb84d}.tag.c4{color:#ffd79c}
.tag{border-bottom:0}
mark.hl sup{white-space:nowrap}
.crit blockquote.bq1{border-left-color:#21c7e8}.crit blockquote.bq2{border-left-color:#b67cff}.crit blockquote.bq3{border-left-color:#5fe0a6}.crit blockquote.bq4{border-left-color:#ffb84d}

/* final seconds bar, spelling marks, playback */
.urgent{position:fixed;top:0;left:0;right:0;height:6px;background:#ff8fa322;z-index:100}
.urgent>div{height:100%;width:100%;background:linear-gradient(90deg,#ff5f7e,#ff8fa3);transition:width .25s linear;box-shadow:0 0 12px #ff5f7e}
.sp{text-decoration:underline wavy #ff5f7e;text-decoration-skip-ink:none;text-underline-offset:3px;text-decoration-thickness:1.5px}
.play{margin-top:8px}
.play audio{width:100%;max-width:420px;height:40px}
.ts{margin:18px 0 0;min-height:65px}
