:root{--ink:#152033;--muted:#606a7c;--bg:#f7f8fb;--card:#fff;--brand:#6455e3;--brand2:#8a7cf3;--line:#e8eaf0;--good:#167d54;--goodbg:#e9f7f0;--bad:#c03e3e;--badbg:#fdeeee}
*{box-sizing:border-box}
body{margin:0;font-family:"Onest",ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;background:var(--bg);color:var(--ink)}
button,input{font:inherit;color:inherit}
.shell{max-width:860px;margin:auto;padding:0 24px}
.top{height:78px;display:flex;align-items:center;justify-content:space-between}
.brand{display:flex;align-items:center;text-decoration:none}
.logo{display:block;width:auto}
.back{color:var(--muted);font-weight:700;text-decoration:none}
@media(hover:hover) and (pointer:fine){.back:hover{color:var(--brand)}}
.btn{border:0;border-radius:14px;padding:12px 18px;font-weight:800;cursor:pointer;text-decoration:none;display:inline-block}
.ghost{background:#fff;border:1px solid var(--line)}
.primary{background:var(--brand);color:#fff;box-shadow:0 8px 20px #6455e333}
.pill{display:inline-flex;padding:8px 12px;border-radius:999px;background:#eeeafd;color:#5d4bd8;font-weight:800;font-size:13px}
.intro h1{font-size:40px;letter-spacing:-1.5px;margin:14px 0 6px}
.intro p{color:var(--muted);font-size:17px;line-height:1.5;margin:0 0 18px}
.parts-nav{display:flex;gap:8px;flex-wrap:wrap;margin:0 0 24px}
.parts-nav a{padding:8px 14px;border-radius:11px;background:#fff;border:1px solid var(--line);color:var(--muted);font-weight:800;font-size:14px;text-decoration:none}
@media(hover:hover) and (pointer:fine){.parts-nav a:hover{border-color:var(--brand);color:var(--brand)}}
.parts-nav a.on{background:var(--brand);border-color:var(--brand);color:#fff}
.panel{background:#fff;border:1px solid var(--line);border-radius:24px;padding:26px;box-shadow:0 30px 70px #20274b0f;margin-bottom:18px}
.meta{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap}
.meta b{font-size:20px}
.level{font-weight:900;background:#f1efff;color:var(--brand);padding:8px 11px;border-radius:11px;font-size:14px;white-space:nowrap}
.progress{height:8px;background:#eceef3;border-radius:99px;margin:18px 0 6px;overflow:hidden}
.progress i{display:block;height:100%;background:var(--brand);transition:width .3s}
.small{color:var(--muted);font-size:14px}
.text{font-size:18px;line-height:2.05;margin-top:18px}
.gap{display:inline-block;min-width:74px;padding:0 10px;margin:0 2px;border-radius:9px;border:1.5px dashed #c9cde0;background:#fafbfd;color:var(--muted);font-weight:800;text-align:center;line-height:1.7;cursor:default}
.gap.current{border:1.5px solid var(--brand);background:#f5f3ff;color:var(--brand)}
.gap.ok{border:1.5px solid var(--good);background:var(--goodbg);color:var(--good)}
.gap.ko{border:1.5px solid var(--bad);background:var(--badbg);color:var(--bad)}
.gap s{opacity:.7;margin-right:6px;font-weight:700}
.gap.done{cursor:pointer}
.stem{display:inline-block;margin:0 4px 0 2px;padding:0 7px;border-radius:7px;background:#181c2b;color:#fff;font-size:12px;font-weight:800;letter-spacing:.5px;line-height:1.9;vertical-align:1px}
.items{margin-top:18px;display:grid;gap:14px}
.item{font-size:17px;line-height:1.9;padding:14px 16px;border-radius:16px;background:#fafbfd;border:1px solid var(--line)}
.item.current{border-color:var(--brand);background:#f7f5ff}
.item .n{font-weight:900;color:var(--brand);margin-right:6px}
.item .s1{display:block}
.key{display:inline-block;margin:4px 0;padding:2px 10px;border-radius:8px;background:#181c2b;color:#fff;font-weight:900;letter-spacing:1px;font-size:14px}
.q{font-size:18px;font-weight:800;margin:0 0 4px}
.options{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:14px}
.option{display:flex;gap:10px;align-items:center;text-align:left;padding:14px 15px;border:1.5px solid var(--line);border-radius:13px;background:#fff;font-weight:700;cursor:pointer;transition:border-color .15s,background .15s}
@media(hover:hover) and (pointer:fine){.option:hover:not(:disabled){border-color:var(--brand);background:#f5f3ff}}
.option:disabled{cursor:default}
.option .l{flex:none;width:28px;height:28px;border-radius:9px;background:#f0edff;color:var(--brand);display:grid;place-items:center;font-weight:900;font-size:14px}
.option.ok{border-color:var(--good);background:var(--goodbg)}
.option.ok .l{background:var(--good);color:#fff}
.option.ko{border-color:var(--bad);background:var(--badbg)}
.option.ko .l{background:var(--bad);color:#fff}
.option.dim{opacity:.55}
.prompt{margin-top:14px;font-size:17px;line-height:1.7;padding:14px 16px;border-radius:14px;background:#f7f8fb}
.prompt .blank{display:inline-block;min-width:90px;border-bottom:2px solid var(--brand);margin:0 4px}
.answer{display:flex;gap:10px;margin-top:14px}
.answer input{flex:1;min-width:0;padding:13px 15px;border:1.5px solid var(--line);border-radius:13px;background:#fff;font-size:18px;font-weight:700;outline:none}
.answer input:focus{border-color:var(--brand);box-shadow:0 0 0 4px #6455e31f}
.answer input.ok{border-color:var(--good);background:var(--goodbg);color:var(--good)}
.answer input.ko{border-color:var(--bad);background:var(--badbg);color:var(--bad)}
.feedback{margin-top:16px;border-radius:16px;padding:16px 18px;line-height:1.55}
.feedback.ok{background:var(--goodbg)}
.feedback.ko{background:var(--badbg)}
.feedback strong{display:block;margin-bottom:4px}
.feedback.ok strong{color:var(--good)}
.feedback.ko strong{color:var(--bad)}
.feedback .also{display:block;margin-top:8px;font-size:15px;color:var(--muted)}
.feedback .tip{display:block;margin-top:8px;font-weight:700}
.row{display:flex;justify-content:flex-end;gap:10px;margin-top:16px;flex-wrap:wrap}
.score{text-align:center}
.score .big{font-size:56px;font-weight:900;letter-spacing:-2px;color:var(--brand)}
.score p{color:var(--muted);margin:6px 0 0}
.review{text-align:left;margin-top:18px;display:grid;gap:8px}
.review div{padding:10px 14px;border-radius:12px;background:#f7f8fb;font-size:15px;line-height:1.4}
.review .ok b{color:var(--good)}
.review .ko b{color:var(--bad)}
.loop{text-align:center;margin:26px 0 50px;font-weight:800;color:#50596a}
.loop b{color:var(--brand)}
.error{color:var(--bad);font-weight:700}
.hub{display:grid;grid-template-columns:1fr 1fr;gap:16px}
.hub a{display:block;background:#fff;border:1px solid var(--line);border-radius:22px;padding:24px;text-decoration:none;color:inherit;transition:border-color .15s,transform .15s}
@media(hover:hover) and (pointer:fine){.hub a:hover{border-color:var(--brand);transform:translateY(-2px)}}
.hub .num{width:40px;height:40px;border-radius:12px;background:#f0edff;color:var(--brand);display:grid;place-items:center;font-weight:900}
.hub h3{margin:16px 0 6px;font-size:20px}
.sr{position:absolute;width:1px;height:1px;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0;padding:0}
.hub p{color:var(--muted);line-height:1.5;margin:0 0 14px}
.hub .go{color:var(--brand);font-weight:800}
.wide .shell{max-width:1180px}
.reading-layout{display:grid;gap:18px}
.reading-layout .panel{margin-bottom:0}
.side{display:grid;gap:18px;align-content:start}
.textpanel{max-height:58vh;overflow:auto;-webkit-overflow-scrolling:touch}

.passage{margin-top:16px;font-size:17px;line-height:1.75}
.passage p{margin:0 0 14px}
.passage .gap{line-height:1.5}
.sent{display:inline;padding:2px 6px;border-radius:7px;font-weight:600;cursor:pointer;-webkit-box-decoration-break:clone;box-decoration-break:clone}
.sent.ok{background:var(--goodbg);color:#12704a}
.sent.ko{background:var(--badbg);color:#a83232}
.sent b{font-weight:900}
.sent s{opacity:.7;margin-right:2px}
/* C1 Part 7: a whole paragraph in the gap reads like the rest of the text */
.sent.para{display:block;padding:8px 12px;font-weight:400;line-height:inherit}
.sections{margin-top:16px;display:grid;gap:14px}
.section-text{padding:14px 16px;border-radius:16px;background:#fafbfd;border:1px solid var(--line)}
.section-text p{margin:8px 0 0;font-size:16px;line-height:1.65}
.section-head{display:flex;align-items:center;gap:10px}
.letter{width:30px;height:30px;border-radius:9px;background:#181c2b;color:#fff;display:grid;place-items:center;font-weight:900;font-size:15px;flex:none}
.stemq{font-size:17px;font-weight:700;line-height:1.5;margin:10px 0 0}
.options.long{grid-template-columns:1fr}
.options.long .option{align-items:flex-start;font-weight:600;line-height:1.45}
.option .o{flex:1}
.option .used{flex:none;font-size:12px;font-weight:800;color:var(--muted);background:#eef0f5;border-radius:7px;padding:2px 7px}
.group{font-size:24px;letter-spacing:-.5px;margin:30px 0 14px}
.group span{color:var(--muted);font-size:16px;font-weight:700;margin-left:6px}
.length{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:-8px 0 22px}
.len-label{font-weight:800;font-size:14px}
.seg-group{display:inline-flex;background:#eceef3;border-radius:12px;padding:3px}
.seg{border:0;background:transparent;padding:8px 14px;border-radius:9px;font-weight:800;font-size:14px;color:var(--muted);cursor:pointer}
.seg.on{background:#fff;color:var(--brand);box-shadow:0 1px 3px #20274b26}
.feedback{display:flex;gap:14px;align-items:flex-start}
.fb-body{flex:1;min-width:0}
.fb-mascot{flex:none;height:64px;width:auto;max-width:72px;margin:-4px 0 -6px -4px}
.score-mascot{display:block;margin:0 auto 4px;height:120px;width:auto}
.intro.has-mascot{display:flex;align-items:flex-end;justify-content:space-between;gap:20px}
.intro.has-mascot>div{flex:1;min-width:0}
.hub-mascot{flex:none;height:140px;width:auto;margin-bottom:12px}
.hub-mascot.v-loop{height:125px}
.hub-mascot.v-both{height:150px}
.btn.small{padding:7px 12px;font-size:14px;border-radius:10px}
.guide summary{cursor:pointer;font-weight:800;font-size:17px;color:var(--brand)}
.guide h3{font-size:16px;margin:18px 0 6px}
.guide p,.guide li{line-height:1.55;color:#3b4456}
.guide ol{margin:0;padding-left:20px}
.phrases{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:12px}
.phrases>div{background:#f7f8fb;border-radius:14px;padding:12px 14px}
.phrases ul{margin:6px 0 0;padding-left:18px;font-size:15px}
.task-nav{display:flex;align-items:center;gap:8px}
.task{margin-top:16px}
.task-intro{color:var(--muted);margin:0 0 10px;line-height:1.5}
.task-card{background:#f7f5ff;border:1px solid #e3dcff;border-radius:16px;padding:16px 18px;line-height:1.6}
.task-card.pre{white-space:pre-line}
.task-card ol{margin:6px 0 0;padding-left:22px;font-weight:700}
.task-card ul.task-opinions{margin:6px 0 0;padding-left:22px;font-style:italic}
.task-q{font-size:18px;font-weight:800;margin:0 0 8px}
.task-words{font-weight:800;margin:12px 0 0}
.timer{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:16px 0 10px}
.timer .time{font-variant-numeric:tabular-nums;font-weight:900;font-size:18px;min-width:56px}
.timer.over .time{color:var(--bad)}
.editor{display:block;width:100%;min-height:340px;resize:vertical;padding:16px 18px;border:1.5px solid var(--line);border-radius:16px;background:#fff;font:inherit;font-size:17px;line-height:1.7;color:var(--ink);outline:none}
.editor:focus{border-color:var(--brand);box-shadow:0 0 0 4px #6455e31f}
.editor-bar{display:flex;align-items:center;gap:6px;margin-top:8px;flex-wrap:wrap}
.wc{font-weight:900;padding:4px 10px;border-radius:9px;background:#eef0f5}
.wc.low{background:#fff4e0;color:#a15c00}
.wc.ok{background:var(--goodbg);color:var(--good)}
.wc.high{background:var(--badbg);color:var(--bad)}
.saved{margin-left:auto;color:var(--good)}
.check-head{display:flex;gap:14px;align-items:center}
.check-head p{margin:4px 0 0}
.crit{border:1px solid var(--line);border-radius:14px;padding:10px 14px 12px;margin:12px 0 0}
.crit legend{font-weight:900;padding:0 6px;color:var(--brand)}
.crit label{display:flex;gap:10px;align-items:flex-start;padding:6px 0;line-height:1.45;cursor:pointer}
.crit input{width:20px;height:20px;flex:none;margin:1px 0 0;accent-color:var(--brand)}
.check-score{font-weight:900;margin:14px 0 0}
.model-text{margin-top:14px;font-size:17px;line-height:1.7}
.model-text h3{margin:0 0 10px;font-size:20px}
.model-text h4{margin:16px 0 4px;font-size:16px;color:var(--brand)}
.model-text p{margin:0 0 6px;white-space:pre-line}
.model-text mark{background:#efe9ff;color:#4b3cc4;padding:0 3px;border-radius:5px;font-weight:700}
.mnote{font-size:14px;color:var(--muted);border-left:3px solid #d9d2ff;padding:2px 0 2px 10px;margin:0 0 14px}
.mistakes-link{margin-left:auto}
.mistakes-link b,.review-card .go b{display:inline-block;min-width:22px;padding:0 6px;margin-left:4px;border-radius:999px;background:var(--bad);color:#fff;font-size:12px;line-height:20px;text-align:center}
.mistakes-link b.zero,.review-card .go b.zero{background:#c9cde0}
.mistakes-link.on b{background:#fff;color:var(--brand)}
.review-card{border-style:dashed!important}
.review-card .go b{font-size:13px;margin:0 2px 0 0}
.bank-note{display:block;margin-top:8px;font-weight:700;font-size:15px}
.bank-note.mastered{color:var(--good)}
.bank-add{margin:16px 0 0;padding:12px 14px;border-radius:12px;background:#fff4e0;color:#8a4d00;font-weight:700;text-align:left}
.bank-add a{color:var(--brand)}
.overview h2{margin:6px 0 4px;font-size:26px;letter-spacing:-.5px}
.overview .score-mascot{margin:0 0 6px}
.part-pick{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:10px;margin-top:16px}
.pick{display:flex;flex-direction:column;align-items:flex-start;gap:2px;padding:12px 14px;border:1.5px solid var(--line);border-radius:14px;background:#fff;cursor:pointer;text-align:left}
.pick span{color:var(--muted);font-size:14px}
.pick.on{border-color:var(--brand);background:#f5f3ff}
.pick:disabled{opacity:.45;cursor:default}
@media(max-width:520px){.mistakes-link{margin-left:0}.editor{min-height:300px;font-size:16px}.saved{margin-left:0;width:100%}.fb-mascot{height:50px}.hub-mascot{height:90px}.hub-mascot.v-both{height:96px}.shell{padding:0 16px}.intro h1{font-size:32px}.panel{padding:18px;border-radius:20px}.text{font-size:17px}.options{grid-template-columns:1fr}.row .btn{width:100%;text-align:center}.hub{grid-template-columns:1fr}.answer{flex-direction:column}.answer .btn{width:100%}}
/* accounts */
.top-links{display:flex;align-items:center;gap:14px}
.acct-link{padding:8px 14px;border-radius:11px;background:#fff;border:1px solid var(--line);color:var(--ink);font-weight:800;font-size:14px;text-decoration:none;white-space:nowrap}
@media(hover:hover) and (pointer:fine){.acct-link:hover{border-color:var(--brand);color:var(--brand)}}
.acct-link.in{background:#f1efff;border-color:#e0dbfb;color:var(--brand)}
.acct-links a,.acct-why a,.prose a{color:var(--brand);font-weight:700}
.panel.acct{max-width:560px}
.panel.acct h2{margin:0 0 6px;font-size:26px;letter-spacing:-.5px}
.panel.acct .small{line-height:1.5}
.field{display:block;margin:18px 0 14px}
.field span{display:block;font-weight:800;font-size:14px;margin-bottom:6px}
.field input{width:100%;padding:13px 14px;border:1.5px solid var(--line);border-radius:14px;background:#fafbfd;font-size:17px}
.field input:focus{outline:none;border-color:var(--brand);background:#fff}
.code-input{letter-spacing:6px;font-weight:800;font-size:22px!important}
.acct .btn:disabled{opacity:.6;cursor:default}
.acct-links{gap:18px;margin-top:14px}
.linkish{background:none;border:0;padding:0;color:var(--brand);font-weight:700;cursor:pointer;text-decoration:underline}
.linkish:disabled{color:var(--muted);cursor:default}
.acct-msg{margin:14px 0 0;padding:11px 14px;border-radius:12px;font-weight:700;font-size:15px;line-height:1.45}
.acct-msg.bad{background:var(--badbg);color:var(--bad)}
.acct-msg.good{background:var(--goodbg);color:var(--good)}
.acct-why{max-width:560px}
.acct-why h3{margin:0 0 8px}
.acct-why ul{margin:0 0 12px;padding-left:20px;line-height:1.7}
.acct-mascot{float:right;width:96px;height:auto;margin:-8px -6px 6px 10px}
.sync-state{font-weight:700;font-size:15px;line-height:1.45;margin:14px 0 18px}
.sync-state.good{color:var(--good)}
.sync-state.bad{color:var(--bad)}
.acct .row{justify-content:flex-start}
.acct-danger{max-width:560px;padding:18px 26px}
.acct-danger summary{cursor:pointer;font-weight:800;color:var(--bad)}
.btn.danger{background:var(--bad);color:#fff}
.prose{line-height:1.65;font-size:16px}
.prose h2{font-size:20px;margin:24px 0 6px}
.prose h2:first-child{margin-top:0}
.prose ul{padding-left:22px}
.back{white-space:nowrap}
@media(max-width:520px){.top-links{gap:10px}.back{font-size:14px}.acct-link{padding:7px 11px;font-size:13px}}
@media(max-width:400px){.top .logo{height:34px}.top-links{gap:8px}.back{font-size:13px}}
.acct-how{margin:10px 0 0;padding-left:20px;color:var(--muted);font-size:14px;line-height:1.6}
/* ---------- choose an exercise ---------- */
.ex-picker{margin:-6px 0 18px}
.ex-picker[hidden],.focus .ex-picker{display:none!important}
.xp-head{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.xp-count{font-weight:700;font-size:14px;color:var(--muted)}
.xp-count.some{color:var(--good)}
.xp-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(64px,1fr));gap:8px;margin-top:12px;padding:14px;background:var(--card);border:1px solid var(--line);border-radius:16px}
.xp{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;min-height:54px;padding:6px 4px;border-radius:12px;border:1.5px solid var(--line);background:var(--bg);color:var(--ink);font:inherit;cursor:pointer}
@media(hover:hover) and (pointer:fine){.xp:hover{border-color:var(--brand2)}}
.xp-n{font-weight:800;font-size:16px;line-height:1.1}
.xp-s{font-size:12px;font-weight:700;min-height:14px}
.xp.done{background:var(--goodbg);border-color:#bfe6d3;color:var(--good)}
.xp.current{border-color:var(--brand);box-shadow:0 0 0 3px #6455e333}
.xp-help{margin:8px 2px 0}
/* ---------- exam mode + focus theme ---------- */
.mode-bar{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin:-6px 0 20px}
.exam-btn{display:inline-flex;align-items:center;gap:8px;background:#12263a;color:#dff5f1;box-shadow:0 8px 20px #12263a33}
@media(hover:hover) and (pointer:fine){.exam-btn:hover{background:#183450}}
.eb-icon{font-size:17px;line-height:1;color:#6fd3c4}
.timer .exam-btn{margin-left:auto}
.exam-tag{display:inline-block;margin:0 0 8px!important;padding:6px 12px;border-radius:999px;background:var(--b2-soft);color:var(--b2-ink)!important;font-weight:800;font-size:14px}
.check-head .exam-tag{margin:6px 0 2px!important}
/* intro: take a breath */
.focus-intro{position:fixed;inset:0;z-index:50;overflow-y:auto;overscroll-behavior:contain;display:grid;place-items:center;padding:20px;background:radial-gradient(circle at 50% 35%,#1a3147 0%,#0d1824 70%);color:#e2eaf2;opacity:0;transition:opacity .45s ease}
.focus-intro.in{opacity:1}
.fi-card{max-width:460px;width:100%;text-align:center;transform:translateY(12px);transition:transform .6s ease}
.focus-intro.in .fi-card{transform:none}
.fi-orb{width:120px;height:120px;margin:0 auto 22px;border-radius:50%;display:grid;place-items:center;background:radial-gradient(circle,#5ec4b633 0%,#5ec4b600 70%);animation:fi-breathe 8s ease-in-out infinite}
.fi-orb span{width:54px;height:54px;border-radius:50%;background:radial-gradient(circle at 35% 35%,#9fe5da,#3e9f93);box-shadow:0 0 40px #5ec4b688}
@keyframes fi-breathe{0%,100%{transform:scale(.82)}50%{transform:scale(1.12)}}
.fi-kicker{margin:0;color:#6fd3c4;font-weight:900;letter-spacing:3px;font-size:13px}
.fi-card h2{margin:6px 0 16px;font-size:36px;letter-spacing:-1px}
.fi-card ul{text-align:left;margin:0 auto;padding:0;list-style:none;display:grid;gap:10px;max-width:400px}
.fi-card li{padding-left:28px;position:relative;line-height:1.5;color:#c3d1de}
.fi-card li:before{content:"";position:absolute;left:6px;top:8px;width:9px;height:9px;border-radius:50%;background:#5ec4b6}
.fi-breath{color:#8ea2b8;margin:22px 0 18px;font-style:italic}
.fi-row{display:flex;gap:10px;justify-content:center}
.fi-row .btn{min-width:130px}
.focus-intro .ghost{background:transparent;color:#c3d1de;border-color:#2f4560}
.focus-intro .primary{background:#5ec4b6;color:#0c1622;box-shadow:0 10px 30px #5ec4b644}
/* the focus theme: deep calm blue, soft teal, nothing else on screen */
body{transition:background-color .8s ease,color .8s ease}
body.focus{--ink:#e2eaf2;--muted:#8ea2b8;--bg:#0f1b2a;--card:#16263a;--brand:#5ec4b6;--brand2:#7fd3c8;--line:#27394f;--good:#5cc99a;--goodbg:#173a2e;--bad:#ef8a8a;--badbg:#3b2228;background:var(--bg);color:var(--ink)}
.focus .top,.focus .intro,.focus .loop,.focus .length,.focus .mode-bar,.focus #guide,.focus .task-nav button{display:none!important}
.focus .shell{padding-top:22px}
.focus .panel{background:var(--card);border-color:var(--line);box-shadow:0 20px 50px #0000002e;transition:background-color .8s ease}
.focus .level{background:#1d3a44;color:var(--brand)}
.focus .progress{background:#223246}
.focus .gap{background:#1b2c40;border-color:#3a506a;color:var(--muted);cursor:pointer}
.focus .gap.current{border:1.5px solid var(--brand);background:#1a3a42;color:var(--brand)}
.focus .gap.filled{border-style:solid;border-color:#4a6580;color:var(--ink)}
.focus .gap.filled.current{border-color:var(--brand);color:#bff0e8}
.focus .key,.focus .stem,.focus .letter{background:#dfe8f1;color:#0f1b2a}
.focus .item,.focus .section-text,.focus .prompt{background:#1b2c40;border-color:var(--line)}
.focus .item.current{border-color:var(--brand);background:#1a3340}
.focus .option{background:#1b2c40;border-color:var(--line);color:var(--ink)}
@media(hover:hover) and (pointer:fine){.focus .option:hover:not(:disabled){border-color:var(--brand);background:#1f3a48}}
.focus .option .l{background:#24394f;color:var(--brand)}
.focus .option.sel{border-color:var(--brand);background:#1d3d44}
.focus .option.sel .l{background:var(--brand);color:#0f1b2a}
.focus .option .used{background:#24394f}
.focus .answer input,.focus .editor{background:#1b2c40;border-color:var(--line);color:var(--ink)}
.focus .answer input:focus,.focus .editor:focus{border-color:var(--brand);box-shadow:0 0 0 4px #5ec4b622}
.focus .btn.ghost{background:transparent;color:var(--ink);border-color:#35506b}
.focus .primary{background:var(--brand);color:#0c1622;box-shadow:0 8px 22px #5ec4b633}
.focus .task-card{background:#1b2c40;border-color:var(--line)}
.focus .wc{background:#24394f}
.focus .wc.low{background:#3b3020;color:#f0c27a}

.focus .fb-mascot,.focus .score-mascot{display:none}
/* the bar at the top */
.focus-bar{position:sticky;top:0;z-index:20;background:#0c1622ee;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-bottom:1px solid #22344a;animation:fb-in .5s ease}
@keyframes fb-in{from{transform:translateY(-100%)}to{transform:none}}
.fb-inner{max-width:1180px;margin:auto;padding:10px 24px;display:flex;align-items:center;gap:14px}
.fb-name{flex:1;min-width:0;display:flex;align-items:center;gap:10px;font-weight:800;color:#c3d1de;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.fb-name span{overflow:hidden;text-overflow:ellipsis}
.fb-dot{flex:none;width:10px;height:10px;border-radius:50%;background:#5ec4b6;box-shadow:0 0 0 0 #5ec4b680;animation:fb-pulse 2.4s ease-out infinite}
@keyframes fb-pulse{0%{box-shadow:0 0 0 0 #5ec4b680}80%,100%{box-shadow:0 0 0 10px #5ec4b600}}
.fb-time{border:1px solid #2f4560;background:#132234;color:#e2eaf2;border-radius:11px;padding:7px 14px;font-weight:900;font-size:18px;font-variant-numeric:tabular-nums;cursor:pointer;min-width:84px}
.fb-time.over{color:#f0c27a;border-color:#5a4a2c}
.fb-time.hid{font-size:13px;font-weight:700;color:#8ea2b8}
.fb-acts{display:flex;gap:8px}
/* question navigator */
.qnav{display:flex;flex-wrap:wrap;gap:6px;margin:12px 0 2px}
.qn{width:34px;height:34px;border-radius:10px;border:1.5px solid var(--line);background:transparent;color:var(--muted);font-weight:800;font-size:14px;cursor:pointer}
.qn.filled{background:#24394f;color:var(--ink);border-color:#35506b}
.qn.current{border-color:var(--brand);color:var(--brand)}
.qn.filled.current{background:#1d3d44}
/* leaving focus: a soft fade back to the normal colours */
body.focus-out .shell{animation:fo-in .8s ease}
@keyframes fo-in{from{opacity:.4}to{opacity:1}}
@media(max-width:520px){.fb-inner{padding:8px 12px;gap:8px}.fb-name{font-size:14px}.fb-time{font-size:16px;min-width:70px;padding:6px 10px}.fi-card h2{font-size:30px}.qn{width:32px;height:32px}.focus .shell{padding-top:14px}.mode-bar .small{flex-basis:100%}}
@media(max-width:400px){.fb-name span{display:none}}
@media(prefers-reduced-motion:reduce){.fi-orb,.fb-dot,.focus-bar,body.focus-out .shell{animation:none}.focus-intro,.fi-card,body{transition:none}}
/* ---------- mock exam ---------- */
.mock-card{grid-column:1/-1;background:linear-gradient(135deg,#12263a,#1a3a4a)!important;color:#e2eaf2!important;border-color:#12263a!important}
.mock-card .num{background:#5ec4b6!important;color:#0f1b2a!important;font-size:20px}
.mock-card p{color:#b9c8d6!important}
.mock-card .go{color:#7fd3c8!important}
.mock-facts{display:flex;gap:12px;margin:16px 0}
.mock-facts div{flex:1;padding:14px;border-radius:16px;background:#f1f7f6;text-align:center}
.mock-facts b{display:block;font-size:30px;font-weight:900;color:#1d6f64;letter-spacing:-1px}
.mock-facts span{color:var(--muted);font-weight:700;font-size:14px}
.mock-rules{margin:0 0 18px;padding-left:20px;line-height:1.7;color:#3b4456}
.pick.taken span{color:#1d6f64;font-weight:700}
.mock-resume{border-color:#9fd9cf;background:#f1faf8}
.mock-resume b{font-size:18px}
.partnav{display:flex;gap:6px;flex-wrap:wrap;margin:0 0 14px}
.pn{display:flex;flex-direction:column;align-items:center;gap:1px;min-width:74px;padding:8px 10px;border-radius:12px;border:1.5px solid var(--line);background:var(--card);color:var(--muted);cursor:pointer}
.pn b{font-size:14px;color:var(--ink)}
.pn span{font-size:12px;font-weight:700}
.pn.full span{color:var(--good)}
.pn.current{border-color:var(--brand);background:#1d3d44}
.pn.current b{color:var(--brand)}
.instr{margin:12px 0 0;color:var(--muted);font-size:15px;line-height:1.5}
.ex-title{margin:14px 0 0;font-size:19px}
.mock-sections{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin:20px 0 6px;text-align:left}
.msec{padding:14px 16px;border-radius:16px;background:#f7f8fb;display:grid;grid-template-columns:1fr auto;gap:2px 10px;align-items:baseline}
.msec .msec-score{font-weight:900;font-size:22px;color:var(--brand)}
.msec .small,.msec .progress{grid-column:1/-1}
.msec .progress{margin:8px 0 0}
.mock-parts div{display:flex;align-items:center;justify-content:space-between;gap:10px;cursor:default}
.mock-parts .mp-name{min-width:0}
.mock-parts .ok b{color:var(--good)}
.mock-note{text-align:left;margin:16px 0 0!important;line-height:1.5}
@media(max-width:520px){.mock-sections{grid-template-columns:1fr}.pn{min-width:0;flex:1 1 22%;padding:7px 4px}.mock-facts b{font-size:24px}.mock-parts div{flex-wrap:wrap}.mock-parts .btn{width:auto!important}}
/* practice: go to any question */
.gap.open{cursor:pointer}
@media(hover:hover) and (pointer:fine){.gap.open:hover{border-color:var(--brand);color:var(--brand)}}
.gap.done.current,.sent.current{box-shadow:0 0 0 3px #6455e340}
.qn.ok{background:var(--goodbg);color:var(--good);border-color:#bfe6d3}
.qn.ko{background:var(--badbg);color:var(--bad);border-color:#f3c4c4}
.qn.current{box-shadow:0 0 0 3px #6455e333}
.focus .qn.current{box-shadow:none}
.skip-row{margin-top:12px}
.fresh-left{margin:0 0 4px;font-weight:800;color:#1d6f64}
.mock-history h3{margin:0 0 4px}
/* AI writing feedback */
.ai-head{display:flex;align-items:center;gap:10px}
.ai-head h3{margin:0;font-size:22px}
.ai-badge{font-size:11px;font-weight:900;letter-spacing:1px;padding:3px 8px;border-radius:999px;background:linear-gradient(90deg,#4F46E5,#A855F7);color:#fff}
.ai .row{align-items:center}
.ai-left{margin-right:auto}
.ai-top{display:flex;gap:18px;align-items:center;margin:16px 0 8px;flex-wrap:wrap}
.ai-total{flex:none;text-align:center;padding:12px 18px;border-radius:18px;background:#f1efff}
.ai-total b{display:block;font-size:34px;font-weight:900;color:var(--brand);letter-spacing:-1px}
.ai-total span{font-size:12px;font-weight:800;color:var(--muted);text-transform:uppercase;letter-spacing:.5px}
.ai-summary{flex:1;min-width:220px;margin:0;line-height:1.55}
.ai-level{display:flex;flex-wrap:wrap;align-items:baseline;gap:2px 8px;margin:4px 0 0;padding:10px 14px;border-radius:14px;background:#f7f8fb;font-size:15px;line-height:1.45}
.ai-level b{color:var(--brand)}
.ai-sep{color:var(--muted)}
.ai-ready{font-weight:800}
.ai-level.ready .ai-ready{color:var(--good)}
.ai-level.not-ready .ai-ready{color:#a15c00}
@media (max-width:480px){.ai-sep{display:none}.ai-level{flex-direction:column;gap:2px}}
.ai-crit{display:grid;gap:10px;margin-top:12px}
.ai-row{padding:12px 14px;border-radius:14px;background:#f7f8fb}
.ai-row-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.ai-row-head b{margin-right:auto}
.ai-row p{margin:6px 0 0;line-height:1.5;font-size:15px}
.ai-dots{display:inline-flex;gap:4px}
.ai-dots i{width:12px;height:12px;border-radius:50%;background:#dfe2ea}
.ai-dots i.on{background:var(--brand)}
.ai-score{font-weight:900;color:var(--brand);min-width:30px;text-align:right}
.ai h4{margin:18px 0 6px;font-size:16px}
.ai-good,.ai-next{margin:0;padding-left:20px;line-height:1.6}
.ai-good li::marker{content:"✓  ";color:var(--good)}
.ai-fixes{display:grid;gap:8px}
.ai-fix{padding:10px 14px;border-radius:12px;border:1px solid var(--line)}
.ai-fix-line{display:flex;gap:8px;align-items:baseline;flex-wrap:wrap;font-size:16px}
.ai-fix-line s{color:var(--bad)}
.ai-fix-line b{color:var(--good)}
.ai-arrow{color:var(--muted)}
.ai-fix p{margin:4px 0 0;font-size:14px;color:var(--muted);line-height:1.45}
.ai-note{margin-top:16px}
.ai-stale{margin:14px 0 0;font-weight:700;color:#a15c00}
.ai-wait{display:flex;align-items:center;gap:10px;margin-top:14px;font-weight:700;color:var(--brand)}
.ai-spin{width:18px;height:18px;border-radius:50%;border:3px solid #e0dbfb;border-top-color:var(--brand);animation:ai-spin 1s linear infinite}
@keyframes ai-spin{to{transform:rotate(360deg)}}
@media(prefers-reduced-motion:reduce){.ai-spin{animation-duration:3s}}
.ai-hint{margin-top:-6px!important;padding:10px 14px;border-radius:12px;background:#f1efff;color:#3b2fb0!important;font-size:15px!important}
/* C1 Part 7: whole paragraphs as options, in normal weight */
.options.paras .option{font-weight:400}
/* Pricing page (pricing.js) */
.plans{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px;margin-bottom:18px}
.plan{background:#fff;border:1px solid var(--line);border-radius:24px;padding:24px;display:flex;flex-direction:column;box-shadow:0 30px 70px #20274b0f}
.plan.featured{border:2px solid var(--brand)}
.plan h2{margin:10px 0 4px;font-size:24px}
.plan .price{font-size:32px;font-weight:900;letter-spacing:-1px;margin:6px 0 2px}
.plan .price small{font-size:15px;font-weight:700;color:var(--muted);letter-spacing:0}
.plan ul{padding-left:20px;line-height:1.55;flex:1;margin:14px 0 18px}
.plan .btn{text-align:center}
.plan-tag{align-self:flex-start;font-size:12px;font-weight:900;padding:4px 10px;border-radius:999px;background:var(--goodbg);color:var(--good)}
.plan-tag.soon{background:#f1efff;color:var(--brand)}
.panel.waitlist{max-width:560px}
.panel.waitlist h2{margin:0 0 6px;font-size:26px;letter-spacing:-.5px}
.check{display:flex;gap:10px;align-items:flex-start;margin:4px 0 16px;font-size:15px;line-height:1.45}
.check input{margin-top:3px;width:18px;height:18px;flex:none}
.check a{color:var(--brand);font-weight:700}
@media(max-width:820px){.plans{grid-template-columns:1fr}}
.ai-pro{margin:10px 0 0}.ai-pro a{color:var(--brand);font-weight:800}
.plan a.btn.ghost,.waitlist a.btn{color:var(--ink)}.waitlist a.btn.primary{color:#fff}
/* ---------- grammar with Finn ---------- */
.g-teacher,.g-tip{display:flex;gap:18px;align-items:center;margin-bottom:18px}
.g-finn{flex:none;width:110px;height:auto}
.g-finn.small{width:64px}
.g-bubble{position:relative;flex:1;background:#f0edff;border-radius:18px;padding:14px 18px;line-height:1.6}
.g-bubble b,.g-tip b{color:var(--brand)}
.g-bubble p,.g-tip p{margin:4px 0 0}
.g-tip{background:#fff8e6;border-color:#f3e2b3}
.g-tip p{line-height:1.6}
.g-sec{margin-bottom:18px;line-height:1.6}
.g-sec h2{margin:0 0 8px;font-size:22px}
.g-sec>p{margin:0 0 12px;color:var(--muted)}
.g-forms{display:grid;gap:10px}
.g-form{display:grid;grid-template-columns:minmax(150px,1fr) 2fr;gap:4px 16px;padding:12px 14px;border:1px solid var(--line);border-radius:14px}
.g-label{grid-row:span 2;font-weight:800}
.g-pattern{font-weight:700;color:var(--brand)}
.g-example{color:var(--ink)}
.g-example b{background:#fff1b8;border-radius:4px;padding:0 3px}
.g-p4{margin-top:12px}
.g-p4 .prompt{margin-top:0}
.g-ans{display:inline-block;padding:0 8px;border-radius:8px;background:var(--goodbg);color:var(--good);font-weight:800;border-bottom:2px solid var(--good)}
.g-note{margin:6px 4px 0;color:var(--muted);font-size:15px}
.g-mistakes{list-style:none;padding:0;margin:0;display:grid;gap:10px}
.g-mistakes li{display:grid;gap:3px;padding:12px 14px;border:1px solid var(--line);border-radius:14px}
.g-wrong{color:var(--bad);text-decoration:line-through;text-decoration-thickness:1px}.g-wrong.g-basic{color:var(--muted);text-decoration:none}
.g-where{display:inline-block;margin-left:4px;padding:1px 8px;border-radius:999px;background:#fff4e5;color:#b45309;font-size:12px;font-weight:800;white-space:nowrap}.g-where.formal{background:var(--goodbg);color:var(--good)}
.g-right{color:var(--good);font-weight:700}
.g-why{color:var(--muted);font-size:15px}
.g-q{margin-top:14px}
.g-q .prompt{margin-top:0}
.g-q input{width:220px;max-width:100%;padding:6px 10px;margin:2px 4px;border:1.5px solid var(--line);border-radius:10px;background:#fff;font:inherit;font-weight:700;outline:none}
.g-q input:focus{border-color:var(--brand);box-shadow:0 0 0 4px #6455e31f}
.g-q input.ok{border-color:var(--good);background:var(--goodbg);color:var(--good)}
.g-q input.ko{border-color:var(--bad);background:var(--badbg);color:var(--bad)}
.g-form-row .btn{margin-top:10px}
.feedback[hidden]{display:none}
.g-score{font-size:20px;font-weight:800;color:var(--brand);margin:16px 0 0}
/* vocabulary pages: Part 1 examples and multiple-choice quick check */
.g-opts{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
.g-opt{font-size:14px;font-weight:700;padding:2px 10px;border-radius:999px;background:#f3f4f8;color:var(--muted)}
.g-opt.on{background:var(--goodbg);color:var(--good)}
.g-gap{display:inline-block;min-width:70px;padding:0 6px;border-bottom:2px solid var(--line);font-weight:800;text-align:center}
.g-gap.ok{color:var(--good);border-color:var(--good)}.g-gap.ko{color:var(--bad);border-color:var(--bad)}
.g-choices{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin-top:10px}
.g-choice{min-width:0;overflow-wrap:anywhere;border:1.5px solid var(--line);background:#fff;border-radius:12px;padding:9px 10px;font:inherit;font-weight:700;color:var(--ink);cursor:pointer;text-align:left}
@media(hover:hover) and (pointer:fine){.g-choice:hover:not(:disabled){border-color:var(--brand);color:var(--brand)}}
.g-choice.ok{border-color:var(--good);background:var(--goodbg);color:var(--good)}
.g-choice.ko{border-color:var(--bad);background:var(--badbg);color:var(--bad)}
.g-choice:disabled{cursor:default}
@media(max-width:620px){.g-choices{grid-template-columns:1fr 1fr}}
.g-next{display:flex;gap:12px;flex-wrap:wrap;justify-content:space-between;margin:6px 0 24px}
.g-more{margin:14px 2px 0}
.grammar-link{display:inline-block;margin-top:10px;font-weight:800;color:var(--brand);text-decoration:none}
@media(hover:hover) and (pointer:fine){.grammar-link:hover{text-decoration:underline}}
@media(max-width:520px){.g-teacher{flex-direction:column;align-items:flex-start}.g-finn{width:84px}.g-form{grid-template-columns:1fr}.g-label{grid-row:auto}.g-q input{width:100%;margin:6px 0}.g-sec h2{font-size:20px}}
.g-q input.one{width:150px}
/* ---------- free-account gate ---------- */
.gate{text-align:center;padding:34px 26px}
.gate-mascot{width:96px;height:auto;margin:0 auto 6px;display:block}
.gate h2{margin:6px 0 8px;font-size:26px}
.gate>p{color:var(--muted);line-height:1.6;max-width:520px;margin:0 auto 14px}
.gate-list{list-style:none;padding:0;margin:0 auto 20px;display:grid;gap:8px;max-width:440px;text-align:left}
.gate-list li{position:relative;padding-left:28px;line-height:1.45}
.gate-list li:before{content:"✓";position:absolute;left:0;top:1px;width:19px;height:19px;border-radius:50%;background:var(--good);color:#fff;font-size:11px;font-weight:900;display:grid;place-items:center}
.gate .row{justify-content:center;flex-wrap:wrap}
.gate-note{margin:14px 0 4px}
.gate-back{margin-top:10px}
.xp.locked{background:#f4f4f7;color:var(--muted);border-style:dashed}
.xp.locked .xp-s{font-size:11px}
.gate a.btn{text-decoration:none}.gate a.btn.ghost{color:var(--ink)}
/* ---------- buying a plan ---------- */
.buy-price{font-size:20px;font-weight:900;color:var(--brand);margin:0 0 12px}
.buy .gate-list{margin:0 0 16px;max-width:none}
.buy-packs{display:grid;gap:8px}
.plan-billing{margin-top:18px}
.plan-billing h3{margin:0 0 6px}
.plan-billing .plan-name{font-size:20px;font-weight:900;color:var(--brand)}
.plan-billing .row{justify-content:flex-start}
.plan-warn{background:var(--badbg);color:var(--bad);border-radius:12px;padding:10px 12px;font-weight:700}
.plan-billing a.btn{text-decoration:none}.plan-billing a.btn.ghost{color:var(--ink)}
.plan-offers{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:12px;margin:16px 0 6px}
.plan-offer{display:flex;flex-direction:column;border:1px solid var(--line);border-radius:18px;padding:14px 16px;background:#fff}
.plan-offer.featured{border:2px solid var(--brand);background:#f7f5ff}
.plan-offer-head{display:flex;justify-content:space-between;align-items:baseline;gap:8px;margin:0}
.plan-offer-head b{font-size:17px}.plan-offer-head span{font-weight:900;color:var(--brand);white-space:nowrap}
.plan-offer .small{margin:6px 0 12px;flex:1}
.plan-offer .btn{text-align:center}
.report-link{display:block;margin-top:8px;font-size:13px;color:var(--muted);font-weight:600}

/* Speaking practice (assets/speaking.js) */
.sp-howto{font-size:15px;line-height:1.55}
.sp-ai-promo{margin-top:24px;background:#f4f0ff;border-color:#e2d9fb}.sp-ai-promo h2{margin:0 0 8px;font-size:22px}.sp-ai-promo p{margin:0 0 14px;line-height:1.55}.sp-ai-promo .row{justify-content:flex-start;margin-top:0}.sp-ai-promo .btn{text-decoration:none}.sp-ai-promo .btn.ghost{color:var(--ink)}
.sp-tests{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 12px}
.sp-test{border:1.5px solid var(--line);background:#fff;border-radius:999px;padding:8px 14px;font:inherit;font-weight:700;font-size:14px;color:var(--ink);cursor:pointer}
.sp-test.on{border-color:var(--brand);background:#f3f0ff;color:var(--brand)}
.sp-test.done{color:var(--good)}.sp-test.done.on{color:var(--brand)}
.sp-settings{display:flex;flex-wrap:wrap;gap:6px 18px;margin:0 0 12px;font-size:14px;color:var(--muted)}
.sp-opt{display:flex;align-items:center;gap:6px;cursor:pointer}.sp-opt input{width:18px;height:18px;accent-color:var(--brand)}
.sp-examiner{background:#f7f8fb;border-radius:16px;padding:14px 16px;margin:10px 0}
.sp-who{display:flex;justify-content:space-between;align-items:center;gap:10px;font-weight:800;color:var(--brand)}
.sp-listen{padding:6px 12px;font-size:14px}
.sp-words{font-size:19px;line-height:1.5;margin:8px 0 0;font-weight:600}
.sp-note{font-size:14px;color:var(--muted);margin:10px 0}
.sp-task{font-weight:800;font-size:17px;margin:10px 0 0}
.sp-row{align-items:center;gap:10px;flex-wrap:wrap}
.sp-clock{font-variant-numeric:tabular-nums;font-size:26px;font-weight:900;color:var(--muted);min-width:70px}
.sp-clock.on{color:var(--brand)}.sp-clock.ending{color:var(--bad)}
.sp-playback{margin-top:10px;display:flex;align-items:center;gap:8px;flex-wrap:wrap}.sp-playback audio{max-width:100%}
.sp-photos{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:10px}
.sp-photos.three{grid-template-columns:1fr 1fr 1fr}
.sp-photo{margin:0;border-radius:14px;overflow:hidden;background:#eef0f5;position:relative}
.sp-photo img{display:block;width:100%;aspect-ratio:4/3;object-fit:cover}
.sp-photo figcaption{position:absolute;right:6px;bottom:6px;font-size:11px;background:#000a;border-radius:6px;padding:1px 6px}
.sp-photo figcaption a{color:#fff;text-decoration:none}
.sp-photo.placeholder{aspect-ratio:4/3;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:12px;border:2px dashed #d5d9e4}
.sp-ph-num{font-size:28px;font-weight:900;color:#c3c8d6}.sp-ph-desc{font-size:14px;color:var(--muted)}
.sp-map{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:12px}
.sp-map-q{grid-column:1/-1;text-align:center;font-weight:800;font-size:17px;background:#f3f0ff;color:var(--brand);border-radius:14px;padding:14px}
.sp-map-o{border:1.5px solid var(--line);border-radius:12px;padding:10px 12px;text-align:center;font-weight:700;background:#fff}
.sp-end h2{margin-top:0}
.sp-survey{border:2px solid var(--brand);background:#faf9ff}
.sp-survey h3{margin:0 0 6px}.sp-vote{display:flex;flex-wrap:wrap;gap:8px}
@media(max-width:620px){.sp-photos,.sp-photos.three{grid-template-columns:1fr}.sp-photo img,.sp-photo.placeholder{aspect-ratio:3/2}.sp-photo figcaption{font-size:10px}.sp-map{grid-template-columns:1fr}.sp-words{font-size:17px}}

/* Listening demo (assets/listening.js) */
.li-context{margin:4px 0 2px;color:var(--muted,#606a7c)}
.li-q{margin:0 0 10px;font-weight:800;font-size:17px}
.li-row{margin-bottom:10px;justify-content:flex-start}
.li-play.on{border-color:#6455e3;color:#6455e3}
.li-options{display:grid;gap:8px}
.li-opt{text-align:left;border:1.5px solid #e3e6ee;background:#fff;border-radius:12px;padding:11px 14px;font-family:inherit;font-size:16px;font-weight:600;line-height:1.35;color:inherit;cursor:pointer;white-space:pre-wrap}
.li-opt.on{border-color:#6455e3;background:#f3f0ff}
.li-opt.right{border-color:#167d54;background:#e9f8f2}
.li-opt.wrong{border-color:#c03e3e;background:#fdeeee}
.li-opt:disabled{cursor:default;color:inherit}
.li-script{margin-top:10px;background:#f7f8fb;border-radius:12px;padding:10px 14px}
.li-script summary{cursor:pointer;font-weight:800}
.li-script p{margin:6px 0}
.li-end{text-align:center}
.li-question{margin:14px 0 0}
.li-question:first-of-type{margin-top:4px}
.li-gap{margin:0;font-size:17px;line-height:2.1}
.li-input{width:11em;max-width:100%;margin:0 6px;border:1.5px solid #d5d9e4;border-radius:10px;padding:5px 10px;font-family:inherit;font-size:16px;font-weight:600;color:inherit;background:#fff}
.li-input:focus{outline:none;border-color:#6455e3;box-shadow:0 0 0 3px #6455e31f}
.li-question.is-right .li-input,.li-question.is-right .li-select{border-color:#167d54;background:#e9f8f2}
.li-question.is-wrong .li-input,.li-question.is-wrong .li-select{border-color:#c03e3e;background:#fdeeee}
.li-correct{margin:4px 0 0;color:#167d54;font-weight:800;font-size:15px}
.li-match{display:flex;align-items:center;justify-content:space-between;gap:12px}
.li-match .li-q{margin:0}
.li-select{border:1.5px solid #d5d9e4;border-radius:10px;padding:7px 12px;font-family:inherit;font-size:16px;font-weight:800;background:#fff;color:inherit;min-width:70px}
.li-bank h3{margin:0 0 8px}
.li-bank-list{list-style:none;margin:0;padding:0;display:grid;gap:6px}
.li-bank-list b{display:inline-block;width:24px;color:#6455e3}
.sp-topic{border:1.5px solid var(--line);background:#fff;border-radius:999px;padding:8px 14px;font-weight:700;font-size:14px;color:var(--ink);text-decoration:none}@media(hover:hover) and (pointer:fine){.sp-topic:hover{border-color:var(--brand);color:var(--brand)}}
.sp-test.locked{color:var(--muted);border-style:dashed}
/* Daily Word Challenge (/daily) */
.dy-level{display:inline-flex;gap:4px;padding:4px;background:#fff;border:1px solid var(--line);border-radius:14px;margin-bottom:14px}
.dy-level button{border:0;background:none;padding:9px 16px;border-radius:10px;font-weight:800;font-size:15px;color:var(--muted);cursor:pointer;font-family:inherit}
.dy-level button.on{background:var(--brand);color:#fff}
.dy-head{display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:14px}
.dy-no{font-weight:800;color:var(--brand);font-size:14px}
.dy-dots{display:flex;gap:6px}
.dy-dots span{width:26px;height:8px;border-radius:9px;background:var(--line)}
.dy-dots span.cur{background:var(--brand2)}
.dy-dots span.ok{background:var(--good)}
.dy-dots span.ko{background:var(--bad)}
.dy-kind{font-size:13px;font-weight:800;text-transform:uppercase;letter-spacing:.5px;color:var(--muted)}
.dy-ask{margin:6px 0 0;color:var(--muted)}
.dy-prompt{font-size:22px;font-weight:700;line-height:1.45;margin:10px 0 4px}
.dy-prompt.def{font-style:italic;font-weight:600}
.dy-blank{display:inline-block;color:var(--brand);letter-spacing:1px}
.dy-why{margin:16px 0 14px;padding:14px 16px;border-radius:13px;line-height:1.5}
.dy-why.ok{background:var(--goodbg)}
.dy-why.ko{background:var(--badbg)}
.dy-result{position:relative;text-align:center}
.dy-score{font-size:64px;font-weight:900;letter-spacing:-2px;line-height:1;margin-top:8px}
.dy-score small{font-size:28px;color:var(--muted)}
.dy-squares{font-size:28px;letter-spacing:4px;margin:10px 0 4px}
.dy-msg{font-weight:700;margin:4px 0 16px}
.dy-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-bottom:18px}
.dy-stats div{background:var(--bg);border-radius:14px;padding:12px 6px}
.dy-stats b{display:block;font-size:22px}
.dy-stats span{font-size:13px;color:var(--muted)}
.dy-share-row{justify-content:center}
.dy-copied{min-height:20px;margin:8px 0 0}
.dy-review h2{margin-top:0}
.dy-item{border-left:4px solid var(--good);padding:4px 0 4px 14px;margin:16px 0}
.dy-item.ko{border-left-color:var(--bad)}
.dy-item p{margin:4px 0}
.dy-q{font-weight:700}
@media(max-width:520px){.dy-prompt{font-size:19px}.dy-score{font-size:54px}.dy-stats b{font-size:18px}.dy-dots span{width:18px}}
/* "Your progress" card on the account page (assets/stats.js) */
.st-card{position:relative;isolation:isolate;overflow:hidden;margin-bottom:18px;padding:30px;border-radius:26px;background:#100c26;color:#fff;box-shadow:0 30px 70px #2a1f6b40}
.st-card:before{content:"";position:absolute;inset:0;border-radius:inherit;padding:1.5px;background:linear-gradient(120deg,#6455e3,#a855f7,#ff8a3d,#22d3ee);-webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);-webkit-mask-composite:xor;mask-composite:exclude;pointer-events:none}
.st-glow{position:absolute;inset:0;z-index:-1;background:radial-gradient(420px 300px at 0 0,#6455e3aa,transparent 70%),radial-gradient(380px 300px at 100% 100%,#c026d377,transparent 70%)}
.st-kicker{font-size:12px;font-weight:900;letter-spacing:1px;color:#d9d5ff}
.st-card h2{margin:6px 0 20px;font-size:30px;letter-spacing:-1px;color:#fff}
.st-tiles{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}
.st-tile{display:flex;flex-direction:column;gap:2px;padding:16px;border-radius:18px;background:#ffffff12;border:1px solid #ffffff22;backdrop-filter:blur(8px)}
.st-ico{font-size:22px}
.st-tile b{font-size:34px;font-weight:900;letter-spacing:-1px;line-height:1.1;font-variant-numeric:tabular-nums}
.st-name{font-size:14px;color:#c3bfe0;font-weight:600}
.st-tile small{font-size:12px;color:#ffb86b;font-weight:800;margin-top:2px}
.st-empty{color:#c3bfe0;margin:20px 0 14px;line-height:1.5}
.st-go{background:linear-gradient(135deg,#7c6cff,#a855f7);color:#fff}
.st-sec{margin-top:24px}
.st-sec h3{margin:0 0 4px;font-size:17px;color:#fff}
.st-trend{margin:0 0 8px;color:#c3bfe0;font-size:14px;font-weight:600}
.st-trend.up{color:#6ee7b7}
.st-chart{position:relative}
.st-chart svg{display:block;width:100%;height:auto;overflow:visible}
.st-grid{stroke:#ffffff1a;stroke-width:1}
.st-axis{fill:#a9a4c9;font-size:12px;font-weight:600}
.st-line{fill:none;stroke:#a99dff;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round}
.st-dot{fill:#100c26;stroke:#a99dff;stroke-width:2.5;transition:r .15s}
.st-dot.last,.st-dot.on{fill:#a99dff;r:6}
.st-hit{fill:transparent;cursor:pointer;outline:none}
.st-val{fill:#fff;font-size:14px;font-weight:800}
.st-tip{position:absolute;transform:translate(var(--tx,-50%),calc(-100% - 14px));padding:8px 12px;border-radius:10px;background:#fff;color:var(--ink);font-size:13px;white-space:nowrap;box-shadow:0 10px 24px #0005;pointer-events:none}
.st-tip b{display:block;font-size:15px}
.st-tip span{color:var(--muted)}
.st-skills{display:grid;gap:10px;margin-top:10px}
.st-skill{display:grid;grid-template-columns:150px 1fr 48px 70px;align-items:center;gap:12px;font-size:14px}
.st-sname{font-weight:700;color:#e2e0f5}
.st-bar{height:8px;border-radius:9px;background:#ffffff1a;overflow:hidden}
.st-bar i{display:block;height:100%;border-radius:9px;background:linear-gradient(90deg,#7c6cff,#a99dff)}
.st-spct{font-weight:800;text-align:right;font-variant-numeric:tabular-nums}
.st-sn{color:#a9a4c9;font-size:13px}
@media(max-width:620px){.st-card{padding:22px 18px;border-radius:22px}.st-card h2{font-size:24px}.st-tiles{grid-template-columns:1fr 1fr;gap:10px}.st-tile{padding:14px}.st-tile b{font-size:28px}.st-skill{grid-template-columns:1fr 44px;gap:4px 10px}.st-skill .st-bar{grid-column:1/-1;grid-row:2}.st-sn{display:none}}
/* "About this part" guide on the practice pages (tools/seo_content.py, added by tools/seo.py) */
.gd h2{margin-top:0}
.gd h3{margin:22px 0 8px;font-size:17px}
.gd-facts{margin:0;padding-left:20px;line-height:1.6}
.gd-facts li{margin:4px 0}
.gd-tips{margin:0;padding-left:22px;line-height:1.6}
.gd-tips li{margin:4px 0}
.gd p{line-height:1.6}
.gd-ex{padding:14px 16px;border-radius:14px;background:var(--bg);border:1px solid var(--line)}
.gd-ex p{margin:6px 0}
.gd-gap{display:inline-block;min-width:40px;color:var(--brand)}
.gd-q{border-top:1px solid var(--line);padding:12px 0}
.gd-q summary{cursor:pointer;font-weight:800;list-style-position:inside}
.gd-q p{margin:8px 0 0;color:var(--muted)}
/* Score calculator (/b2-first/score-calculator, assets/calculator.js) */
.cc{display:grid;grid-template-columns:1.1fr .9fr;gap:18px;align-items:start;margin-bottom:18px}
.cc-in{margin:0}
.cc-row{padding:14px 0;border-bottom:1px solid var(--line)}
.cc-row:first-child{padding-top:0}.cc-row:last-child{border-bottom:0;padding-bottom:0}
.cc-head{display:flex;justify-content:space-between;align-items:center;gap:12px}
.cc-head label span{display:block;font-size:13px;color:var(--muted);font-weight:600}
.cc-num{display:flex;align-items:center;gap:6px;font-weight:700;color:var(--muted)}
.cc-num input{width:64px;padding:8px 10px;border:1.5px solid var(--line);border-radius:10px;font:inherit;font-weight:800;font-size:17px;color:var(--ink);text-align:center}
.cc-num input:focus{outline:none;border-color:var(--brand)}
.cc-range{width:100%;margin:10px 0 4px;accent-color:var(--brand)}
.cc-help{margin:2px 0 0;font-size:13px;color:var(--muted);line-height:1.45}
.cc-out{position:sticky;top:16px;padding:26px;border-radius:24px;background:#100c26;color:#fff;box-shadow:0 30px 70px #2a1f6b40;background-image:radial-gradient(360px 260px at 0 0,#6455e3aa,transparent 70%),radial-gradient(320px 260px at 100% 100%,#c026d377,transparent 70%)}
.cc-kicker{font-size:12px;font-weight:900;letter-spacing:1px;color:#d9d5ff}
.cc-score{display:flex;align-items:baseline;gap:10px;margin:8px 0 6px}
.cc-score b{font-size:64px;font-weight:900;letter-spacing:-2px;line-height:1}
.cc-score span{color:#c3bfe0;font-weight:700;font-size:14px}
.cc-grade{display:inline-block;padding:8px 12px;border-radius:12px;font-weight:800;font-size:15px;background:#ffffff14}
.cc-grade.pass{background:#34d39926;color:#a7f3d0}
.cc-grade.fail{background:#f8717126;color:#fecaca}
.cc-bars{display:grid;gap:10px;margin:20px 0 14px}
.cc-bar{display:grid;grid-template-columns:110px 1fr 36px;gap:10px;align-items:center;font-size:14px}
.cc-name{font-weight:700;color:#e2e0f5}
.cc-track{position:relative;height:10px;border-radius:9px;background:#ffffff1a}
.cc-track i{position:absolute;left:0;top:0;bottom:0;border-radius:9px;background:#f87171;transition:width .25s}
.cc-track i.ok{background:linear-gradient(90deg,#34d399,#6ee7b7)}
.cc-pass{position:absolute;top:-4px;bottom:-4px;width:2px;background:#fff;border-radius:2px;opacity:.8}
.cc-val{font-weight:800;text-align:right;font-variant-numeric:tabular-nums}
.cc-tip{margin:0 0 10px;color:#c3bfe0;font-size:14px;line-height:1.5}
.cc-tip a{color:#fff;font-weight:800}
.cc-note{margin:0;font-size:12px;color:#a9a4c9;line-height:1.45}
.cc-table{width:100%;border-collapse:collapse;margin:12px 0}
.cc-table th,.cc-table td{text-align:left;padding:10px 8px;border-bottom:1px solid var(--line);font-size:15px}
.cc-table th{font-size:13px;color:var(--muted);text-transform:uppercase;letter-spacing:.5px}
@media(max-width:820px){.cc{grid-template-columns:1fr}.cc-out{position:static;order:-1}}
@media(max-width:520px){.cc-out{padding:20px}.cc-score b{font-size:54px}.cc-bar{grid-template-columns:96px 1fr 34px;font-size:13px}}
/* Guías en español (/guias, tools/pages_guides.py) */
.gu-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:14px;margin-bottom:18px}
.gu-card{display:flex;flex-direction:column;gap:6px;padding:22px;border-radius:22px;background:#fff;border:1px solid var(--line);color:var(--ink);text-decoration:none;box-shadow:0 20px 50px #20274b0d;transition:transform .2s,border-color .2s}
@media(hover:hover) and (pointer:fine){.gu-card:hover{transform:translateY(-3px);border-color:var(--brand)}}
.gu-emoji{font-size:30px}.gu-card h2{margin:4px 0 0;font-size:19px;line-height:1.3}.gu-card p{margin:0;color:var(--muted);line-height:1.5;font-size:15px;flex:1}
.gu-card .go{color:var(--brand);font-weight:800;margin-top:6px}
.gu-toc b{display:block;margin-bottom:6px}.gu-toc ol{margin:0;padding-left:22px;line-height:1.8}
.gu-body{font-size:17px;line-height:1.7}
.gu-body h2{margin:30px 0 10px;font-size:25px;letter-spacing:-.5px;scroll-margin-top:16px}.gu-body h2:first-child{margin-top:0}
.gu-body h3{margin:20px 0 6px;font-size:19px}
.gu-body p{margin:0 0 12px}.gu-body ul,.gu-body ol{padding-left:22px;margin:0 0 12px}.gu-body li{margin:6px 0}
.gu-body a{color:var(--brand);font-weight:700}
.gu-body .btn{margin:4px 6px 4px 0}.gu-body a.btn{color:#fff}.gu-body a.btn.ghost{color:var(--ink)}
.gu-table{width:100%;border-collapse:collapse;margin:8px 0 16px;font-size:15px}
.gu-table th,.gu-table td{text-align:left;padding:10px 8px;border-bottom:1px solid var(--line);vertical-align:top}
.gu-table th{font-size:13px;color:var(--muted);text-transform:uppercase;letter-spacing:.4px}
.gu-more ul{margin:0;padding-left:0;list-style:none;line-height:2}.gu-more a{font-weight:700;color:var(--brand)}
@media(max-width:520px){.gu-body{font-size:16px}.gu-body h2{font-size:22px}.gu-table{font-size:14px}.gu-table th,.gu-table td{padding:8px 5px}}
/* the mock exam box takes about this much room once loaded: keep it while "Loading…" so the page doesn’t jump */
#app[data-mock]>.panel[data-nosnippet]{min-height:400px}@media(max-width:600px){#app[data-mock]>.panel[data-nosnippet]{min-height:600px}}
.gd-short{padding:0;background:none;border:0;box-shadow:none}.gd-short .gd-es{margin:0}
.gd-es{margin:18px 0 0;padding:12px 14px;border-radius:12px;background:#fff7ed;font-weight:600}.gd-es a{color:var(--brand);font-weight:800}
.gu-toc a{color:var(--brand);font-weight:700;text-decoration:none}@media(hover:hover) and (pointer:fine){.gu-toc a:hover{text-decoration:underline}}

/* ---------- answering inside the text (Use of English) ---------- */
.gap.gpick{min-width:44px;min-height:34px;padding:0 12px;line-height:1.75;cursor:pointer;color:var(--muted);font:inherit;font-weight:800;font-size:16px;vertical-align:baseline;transition:border-color .15s,background-color .15s,box-shadow .15s}
@media(hover:hover) and (pointer:fine){.gap.gpick:hover{border-color:var(--brand);color:var(--brand)}}
.gap.gpick.filled{border-style:solid;border-color:#b9b0f5;background:#f5f3ff;color:var(--ink)}
.gap.gpick.active,.gap.done.active{border:1.5px solid var(--brand);box-shadow:0 0 0 4px #6455e32e;color:var(--brand);background:#f5f3ff}
button.gap.done{font:inherit;font-weight:800;font-size:16px;min-height:34px;line-height:1.75;padding:0 10px}
button.gap.done.ok{color:#12704a}button.gap.done.ko{color:#a83232}
.gap-input{display:inline-block;max-width:100%;min-height:36px;margin:2px 3px;padding:2px 8px;border:1.5px dashed #b9b0f5;border-radius:9px;background:#fafbfd;color:var(--ink);font:inherit;font-weight:700;font-size:17px;line-height:1.5;vertical-align:baseline;outline:none;transition:border-color .15s,background-color .15s,box-shadow .15s,width .12s}
.gap-input::placeholder{color:#a3a9bc;font-weight:700}
.gap-input:not(:placeholder-shown){border-style:solid;background:#f5f3ff}
.gap-input:focus{border:1.5px solid var(--brand);background:#fff;box-shadow:0 0 0 4px #6455e32e}
.gapwrap{white-space:nowrap}
.item .s2{margin-top:4px;line-height:2.1}
.item .gap-input{font-size:16px}
.wc-live{display:block;margin-top:2px;font-size:13px;font-weight:700;color:var(--muted)}
.wc-live.bad{color:var(--bad)}
.inline-actions{align-items:center;justify-content:space-between;margin-top:22px;padding-top:16px;border-top:1px solid var(--line)}
.inline-actions .small{flex:1 1 240px}
.inline-actions .btn{min-height:48px}
/* the little menu next to a gap */
.gpop{position:absolute;z-index:60;width:min(360px,calc(100vw - 16px));padding:12px;border-radius:16px;background:#fff;border:1px solid var(--line);box-shadow:0 18px 50px #20274b33,0 2px 8px #20274b14;animation:pop-in .16s var(--ease-out,ease)}
.gpop::before{content:"";position:absolute;top:-7px;left:calc(var(--arrow,50%) - 7px);width:12px;height:12px;background:inherit;border-left:1px solid var(--line);border-top:1px solid var(--line);transform:rotate(45deg)}
.gpop.above::before{top:auto;bottom:-7px;transform:rotate(225deg)}
@keyframes pop-in{from{opacity:0;transform:translateY(-4px) scale(.98)}}
.gpop.above{animation-name:pop-up}
@keyframes pop-up{from{opacity:0;transform:translateY(4px) scale(.98)}}
.pop-title{margin:0 0 8px;font-size:13px;font-weight:800;color:var(--muted);text-transform:uppercase;letter-spacing:.06em}
.pop-opts{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.pop-opts .option{min-height:48px;padding:10px 12px;font-size:16px}
.pop-opts .option.sel{border-color:var(--brand);background:#f5f3ff}
.pop-opts .option.sel .l{background:var(--brand);color:#fff}
.pop-fb{max-height:min(60vh,420px);max-height:min(60dvh,420px);overflow:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch;font-size:15px;line-height:1.55;padding:10px 12px;border-radius:12px}
.pop-fb.ok{background:var(--goodbg)}.pop-fb.ko{background:var(--badbg)}
.pop-fb strong{display:block;margin-bottom:4px}
.pop-fb.ok strong{color:var(--good)}.pop-fb.ko strong{color:var(--bad)}
.pop-fb p{margin:0 0 6px}
.pop-yours{font-weight:700}
.gpop.dark{background:#16263a;border-color:#2f4560;color:#e2eaf2;box-shadow:0 18px 50px #0008}
.gpop.dark .pop-title{color:#8ea2b8}
.gpop.dark .option{background:#1b2c40;border-color:#27394f;color:#e2eaf2}
.gpop.dark .option .l{background:#24394f;color:#5ec4b6}
.gpop.dark .option.sel{border-color:#5ec4b6;background:#1d3d44}
.gpop.dark .option.sel .l{background:#5ec4b6;color:#0f1b2a}
.focus .gap-input{background:#1b2c40;border-color:#3a506a;color:var(--ink)}
.focus .gap-input:not(:placeholder-shown){background:#1d3340;border-color:#4a6580}
.focus .gap-input:focus{border-color:var(--brand);box-shadow:0 0 0 4px #5ec4b622}
.focus .gap.gpick.active{border-color:var(--brand);background:#1a3a42;color:#bff0e8;box-shadow:0 0 0 4px #5ec4b622}
.focus .inline-actions{border-color:var(--line)}
@media(max-width:520px){.inline-actions .btn{width:100%}.gap-input{font-size:16px}}

/* ---------- Reading: text and questions ---------- */
.qn{min-width:44px;height:44px;border-radius:12px;font-size:15px;flex:none}
.rbar{display:flex;flex-direction:column;gap:8px;min-width:0}
.rbar .qnav{position:relative;margin:0;flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;padding:3px}
.rbar .qnav::-webkit-scrollbar{display:none}
.rtabs{display:grid;grid-template-columns:1fr 1fr;gap:4px;padding:4px;border-radius:14px;background:#eceef3}
.rtab{min-height:44px;border:0;border-radius:11px;background:transparent;color:var(--muted);font:inherit;font-weight:800;font-size:15px;cursor:pointer}
.rtab[aria-selected="true"]{background:#fff;color:var(--brand);box-shadow:0 1px 3px #20274b26}
.stabs{display:flex;gap:6px;overflow-x:auto;scrollbar-width:none;padding:2px}
.stabs::-webkit-scrollbar{display:none}
.stab{flex:1 0 auto;display:flex;align-items:center;gap:8px;min-height:44px;padding:6px 12px 6px 6px;border:1.5px solid var(--line);border-radius:12px;background:#fff;color:var(--muted);font:inherit;font-weight:700;font-size:14px;cursor:pointer;white-space:nowrap}
.stab b{width:30px;height:30px;border-radius:9px;background:#eef0f5;color:var(--ink);display:grid;place-items:center;font-weight:900}
.stab[aria-selected="true"]{border-color:var(--brand);color:var(--ink);background:#f5f3ff}
.stab[aria-selected="true"] b{background:#181c2b;color:#fff}
.section-text[hidden]{display:none}
/* Part 7: big letter buttons (A, B, C, D…) with the text name underneath */
.options.letters{grid-template-columns:repeat(auto-fit,minmax(70px,1fr))}
.options.letters .option{flex-direction:column;justify-content:center;gap:4px;min-height:76px;padding:10px 8px;text-align:center}
.options.letters .option .l{width:auto;height:auto;background:none;font-size:26px;line-height:1}
.options.letters .option .o{flex:none;font-size:13px;font-weight:700;color:var(--muted);line-height:1.25}
.options.letters .option.ok .l,.options.letters .option.ko .l{background:none;color:inherit}
.options.letters .option.sel{border-color:var(--brand);background:#f5f3ff}
.focus .options.letters .option .l,.focus .options.letters .option.sel .l{background:none;color:var(--brand)}
.focus .rtabs{background:#132234}
.focus .rtab[aria-selected="true"]{background:#1d3d44;color:var(--brand)}
.focus .stab{background:#1b2c40;border-color:var(--line);color:var(--muted)}
.focus .stab b{background:#24394f;color:var(--ink)}
.focus .stab[aria-selected="true"]{border-color:var(--brand);background:#1d3d44;color:var(--ink)}
.focus .stab[aria-selected="true"] b{background:var(--brand);color:#0f1b2a}
/* big screens: the text on the left (its own scroll), the questions on the right */
@media(min-width:900px){
.reading-layout{grid-template-columns:minmax(0,1.15fr) minmax(0,.85fr);grid-template-areas:"text bar" "text side";grid-template-rows:auto 1fr;align-items:start}
.reading-layout .textpanel{grid-area:text;position:sticky;top:12px;max-height:calc(100vh - 24px);max-height:calc(100dvh - 24px);overflow:auto;overscroll-behavior:contain}
.reading-layout .rbar{grid-area:bar;position:sticky;top:12px;z-index:5}
.reading-layout .side{grid-area:side}
.rtabs{display:none}
.focus .reading-layout .textpanel{top:76px;max-height:calc(100dvh - 90px)}
.focus .reading-layout .rbar{top:76px}
.reading-layout .rbar .qnav{flex-wrap:wrap;overflow:visible;padding:8px;border-radius:16px;background:var(--bg,#f6f7fb)}
}
/* phones and small tablets: one tab at a time */
@media(max-width:899px){
.reading-layout{grid-template-columns:minmax(0,1fr)}
.reading-layout .textpanel{max-height:none;overflow:visible}
.reading-layout .rbar{position:sticky;top:0;z-index:15;margin:0 -8px;padding:8px;background:var(--bg,#f6f7fb);border-radius:0 0 16px 16px;box-shadow:0 8px 16px -12px #20274b40}
.focus .reading-layout .rbar{top:58px}
.reading-layout.show-text .side,.reading-layout.show-q .textpanel{display:none}
}
.focus .options.letters .option.sel{border-color:var(--brand);background:#1d3d44}
.item:focus-within{border-color:var(--brand);background:#f7f5ff}
.focus .item:focus-within{background:#1a3340}
@media(max-width:520px){.options.letters{grid-template-columns:1fr 1fr}.options.letters .option{min-height:68px}}
@media(max-width:520px){.focus .reading-layout .rbar{top:51px}}
/* full Listening paper (mock exam): a heading for each part, the mark per part and the Cambridge scale score */
.li-part{margin:26px 0 12px}.li-part h2{margin:0 0 4px;font-size:24px}.li-part p{margin:0;color:var(--muted);line-height:1.55}
.li-paper-result{margin:12px 0}
.li-parts{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;max-width:460px;margin:0 auto}
.li-parts div{padding:10px 6px;border-radius:14px;background:#f5f3ff;text-align:center}
.li-parts b{display:block;font-size:22px;color:var(--brand);font-variant-numeric:tabular-nums}.li-parts span{font-size:13px;font-weight:700;color:var(--muted)}
.li-scale{text-align:center;margin:12px 0 0}.li-scale b{font-size:20px}.li-scale a{color:var(--brand);font-weight:800}
.focus .li-mock-link{display:none}
/* launch offer above the plans (pricing page, from data/billing.json "offer") */
.offer{display:flex;flex-direction:column;gap:4px;margin:0 0 18px;padding:14px 18px;border-radius:18px;background:linear-gradient(135deg,#f3f0ff,#fdf0ff);border:1.5px solid #d9d0ff}
.offer b{font-size:17px;color:#4f3fd0}.offer span{font-size:15px;line-height:1.5;color:var(--ink)}
.offer code{font:inherit;font-weight:900;letter-spacing:.06em;background:#fff;border:1.5px dashed #a99dff;border-radius:8px;padding:1px 8px;color:#4f3fd0}
.buy-offer{margin:10px 0;padding:10px 12px;border-radius:12px;background:#f3f0ff;font-size:15px}
/* B1 Preliminary Reading Part 1: short texts (notices, messages, labels) */
.notices{display:grid;gap:14px;margin-top:16px}
.notice-card{display:flex;gap:10px;align-items:flex-start;border-radius:14px}
.notice-card>.gap{flex:0 0 auto;margin-top:10px}
.notice-card.open{cursor:pointer}
@media(hover:hover) and (pointer:fine){.notice-card.open:hover .notice{border-color:#a5b4fc}}
.notice{flex:1;min-width:0;border:2px dashed #c9cede;border-radius:12px;padding:12px 14px;background:#fffdf6;font-size:16px;line-height:1.55}
.notice p{margin:0;white-space:pre-line;overflow-wrap:anywhere}
.notice-kind{display:block;font-size:11.5px;font-weight:800;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);margin-bottom:4px}
.notice-card.current .notice{border-style:solid;border-color:var(--brand);background:#f5f3ff}
.panel .notice{margin:12px 0 4px}
.focus .notice{background:#1b2c40;border-color:var(--line);color:var(--ink)}
.focus .notice-card.current .notice{background:#1d3d44;border-color:var(--brand)}
.sections-intro{margin:0 0 10px;font-weight:700}
/* B1 Preliminary Writing Part 1: the email and the student's four notes */
.task-email{white-space:pre-line;background:#fff;border:1px solid #e3dcff;border-radius:12px;padding:12px 14px;margin-bottom:10px;font-weight:400}
.task-card ol.task-notes{font-weight:400}.task-notes li{margin:4px 0}.tn-where{font-style:italic;color:var(--muted)}.tn-note{color:#5d4bd8}
.focus .task-email{background:#13243a;border-color:var(--line)}
/* B1 Preliminary Speaking: one photo at a time (Part 2), and the situation above the ideas (Part 3) */
.sp-photos.one{grid-template-columns:1fr;max-width:640px;margin-left:auto;margin-right:auto}
.sp-map>.sp-task{grid-column:1/-1;margin:0}
/* B1 Preliminary mock exam: one section (Reading) and its Cambridge English Scale estimate */
.mock-sections>.msec:only-child{grid-column:1/-1}
.mock-scale{font-weight:800;color:#5d4bd8;margin:12px 0 0}
/* very small phones (320–400px): tables and the daily level switch fit the screen */
@media(max-width:400px){
.gu-table{font-size:13px}.gu-table th,.gu-table td{padding:7px 3px;overflow-wrap:break-word;hyphens:auto}.gu-table th{font-size:10.5px;letter-spacing:0}
.dy-level{display:flex;max-width:100%}.dy-level button{flex:1 1 0;min-width:0;padding:9px 6px;font-size:14px;line-height:1.2}
}
/* Exam colours: one lilac scale (B1 lightest, B2 Levoop violet, C1 darkest), as on the home page */
.pill.lv-b1{background:var(--b1-soft);color:var(--b1-ink);box-shadow:inset 0 0 0 1px #dcd7fb}
.pill.lv-c1{background:var(--c1);color:#fff}
.lv-dot{display:inline-block;width:10px;height:10px;border-radius:50%;margin-right:7px;vertical-align:1px;background:var(--b2)}
.lv-dot.lv-b1{background:var(--b1)}.lv-dot.lv-c1{background:var(--c1)}
.dy-level button[data-level=b1].on{background:var(--b1);color:#1f1766}
.dy-level button[data-level=c1].on{background:var(--c1)}
/* Use of English Part 4: half right (1 of 2 marks) */
.gap.done.half{color:#8a5a00}
.review .half b{color:#8a5a00}
.half-note{display:block;margin:8px 0 0;padding:8px 12px;border-radius:10px;background:#fff6e0;color:#5c4200;font-weight:600}
.st-empty-mascot{display:block;height:96px;width:auto;margin:18px 0 -10px}
/* Hints (assets/practice.js and assets/grammar.js): practice only, never in exam mode or the mock exam */
.hint-btn{font-size:15px;padding:9px 16px}
.g-form-row .hint-btn{margin:10px 8px 0 0}
.hint-note{display:flex;gap:10px;align-items:center;margin:10px 0 12px;padding:10px 14px;border-radius:14px;background:#fff8e6;border:1px solid #f3e2b3}
.hint-note img{flex:none;height:40px;width:auto}.hint-note p{margin:0;line-height:1.45;font-weight:600}
.gpop .hint-note{margin:0;border:0}
.option.hint-off,.g-choice.hint-off{opacity:.35;text-decoration:line-through;cursor:default}
.pop-hint{margin:10px 0 0;font-size:14px;font-weight:600;color:#8a5a00}
.gpop .hint-btn{display:block;width:100%;margin-top:10px}
.hint-pill{position:absolute;z-index:55;padding:4px 10px;border:1px solid #f3e2b3;border-radius:999px;background:#fff8e6;color:#8a5a00;font:700 13px/1.2 inherit;font-family:inherit;box-shadow:0 4px 12px #20274b1f;cursor:pointer}
.gap-input.hinted{border-color:#e9c46a;border-style:solid}
.gap.hinted{box-shadow:0 0 0 2px #f3e2b3}
.hint-mark{margin-left:4px;font-size:.85em}
.hint-used{display:block;margin-top:8px;font-weight:700;color:#8a5a00}
.g-hint{margin:8px 0 0;font-weight:700;color:#8a5a00}
.hint-sum{color:#8a5a00}
.focus .hint-pill{display:none}
.ac-finn{display:block;height:130px;width:auto;margin:0 0 8px}@media(max-width:520px){.ac-finn{height:96px}}
/* AI Speaking feedback (assets/speaking-ai.js) */
.sp-ai{margin-top:14px}.sp-ai .sp-opt{display:flex;gap:8px;align-items:flex-start;margin:10px 0 0;font-weight:700;line-height:1.45}
.sp-ai .sp-opt input{margin-top:4px;width:18px;height:18px;flex:none}
.sp-ai-consent{margin-top:8px;padding:12px 14px;border-radius:14px;background:#f7f8fb}.sp-ai-consent p{margin:0 0 6px;line-height:1.55}
.sp-ai-consent .btn{margin-top:10px}
.sp-ai-item{padding:10px 14px;border-radius:12px;border:1px solid var(--line);margin:8px 0}
.sp-ai-q{margin:0 0 4px;font-weight:800}.sp-ai-answer{margin:0;line-height:1.6}
.sp-ai-answer mark{background:#ffe4e6;border-radius:4px;padding:0 2px;cursor:help}
.sp-ai-unclear{margin:6px 0 0;font-size:14px;color:#a15c00}
.sr-progress{margin-bottom:16px}.sr-progress h2{margin:0 0 6px;font-size:20px}.sr-chips{display:flex;flex-wrap:wrap;gap:8px;margin:6px 0 10px}.sr-chips .btn[aria-pressed="true"]{background:var(--brand);color:#fff;border-color:var(--brand)}
.sr-chart{position:relative;margin:8px 0 14px}.sr-chart svg{width:100%;height:auto;display:block;overflow:visible}
.sr-chart .grid{stroke:var(--line);stroke-width:1}.sr-chart .pass{stroke:var(--muted);stroke-width:1;stroke-dasharray:4 4}.sr-chart .axis{fill:var(--muted);font-size:12px}
.sr-chart .line{fill:none;stroke:var(--brand);stroke-width:2;stroke-linejoin:round;stroke-linecap:round}.sr-chart .dot{fill:var(--brand);stroke:var(--card);stroke-width:2}.sr-chart .hit{fill:transparent;cursor:pointer;outline:none}
.sr-tip{position:absolute;transform:translate(-50%,calc(-100% - 12px));background:var(--ink);color:var(--card);font-size:13px;font-weight:600;padding:5px 9px;border-radius:8px;white-space:nowrap;pointer-events:none}
.sr-crit{width:100%;border-collapse:collapse;font-size:15px}.sr-crit th,.sr-crit td{text-align:left;padding:7px 6px;border-bottom:1px solid var(--line)}.sr-crit th{color:var(--muted);font-weight:600;font-size:13px}.sr-crit .up{color:var(--good);font-weight:700}.sr-crit .down{color:var(--bad);font-weight:700}
.sr-list{display:grid;gap:12px}.sr-head{display:flex;gap:10px;align-items:center;flex-wrap:wrap}.sr-head h3{margin:0;flex:1;min-width:200px;font-size:17px}
/* While an exercise or the daily challenge loads, keep roughly its space, so the page doesn't jump when it appears
   (less than the smallest exercise, so it never jumps up either). */
#app>.panel.small:only-child{min-height:460px}
#daily>.panel.small:only-child{min-height:300px}
/* pricing page with the Speaking credits card: four plans, two by two (one column on phones) */
.plans.four{grid-template-columns:repeat(2,minmax(0,1fr))}
@media(max-width:620px){.plans.four{grid-template-columns:1fr}}
/* Speaking Parts 3–4 with an AI partner: the conversation, and the partner's lines in the report */
.sp-chat{display:flex;flex-direction:column;gap:8px;margin:14px 0 4px;max-height:420px;overflow-y:auto;padding:2px}
.sp-msg{max-width:85%;padding:10px 14px;border-radius:16px;line-height:1.45;font-size:16px}
.sp-msg b{display:block;font-size:12px;letter-spacing:.03em;text-transform:uppercase;margin-bottom:2px;color:var(--muted)}
.sp-msg.you{align-self:flex-end;background:#f0edff;border-bottom-right-radius:4px}
.sp-msg.ai{align-self:flex-start;background:#fff;border:1px solid var(--line);border-bottom-left-radius:4px}
.sp-msg.sending span{opacity:.6}
.sp-msg.bad{background:var(--badbg);color:var(--bad)}
.sp-chat-hint{margin:0}
.sp-ai-who{margin:6px 0 2px;font-size:13px;font-weight:800;color:var(--muted)}
.sp-ai-partner{margin:6px 0 0;padding:8px 12px;border-radius:12px;background:var(--bg);color:var(--muted);font-size:15px}
/* hands-free conversation: "I'm listening" with a pulsing dot, and the silence setting */
.sp-hear{min-height:22px;margin:8px 0 0;font-weight:700;color:var(--muted)}
.sp-hear.on{color:var(--brand)}
.sp-hear.on::before{content:"";display:inline-block;width:9px;height:9px;border-radius:50%;background:currentColor;margin-right:8px;vertical-align:middle;animation:sp-pulse 1.2s ease-in-out infinite}
.sp-hear.speaking{color:var(--good)}
@keyframes sp-pulse{0%,100%{opacity:.3;transform:scale(.8)}50%{opacity:1;transform:scale(1.15)}}
@media(prefers-reduced-motion:reduce){.sp-hear.on::before{animation:none}}
.sp-wait{margin-top:6px;font-size:14px}
.sp-wait select{margin-left:6px;font:inherit;padding:4px 6px;border-radius:8px;border:1px solid var(--line);background:#fff}

/* Invite a friend (assets/account-page.js) */
.acct-invite h2{margin:0 0 6px}.invite-row{display:flex;gap:8px;flex-wrap:wrap;margin:10px 0}.invite-row input{flex:1;min-width:0;min-height:44px;padding:0 12px;border:1px solid var(--line);border-radius:12px;font:inherit;font-size:16px;background:var(--bg);color:var(--ink)}.invite-share{justify-content:flex-start;margin-top:0}.acct-invite a.btn{text-decoration:none}.acct-invite a.btn.ghost{color:var(--ink)}
/* My Writing reports (tools/pages_writing_reports.py) */
.wr-text{white-space:pre-wrap;background:var(--bg);border:1px solid var(--line);border-radius:12px;padding:12px 14px;margin:0 0 14px;font-size:15px;line-height:1.6}
.acct-reports{margin:10px 0 0;font-weight:600}.acct-reports a{text-decoration:none}
/* Plans page with payments on: Free and Pro side by side, the packs below as rows (tools/pages.py). Only "Coming soon" tags show. */
.plans.two{grid-template-columns:repeat(2,minmax(0,1fr))}
.plans.two .plan-tag:not(.soon),.packs .plan-tag:not(.soon){display:none}
.plans.two .plan h2{margin-top:0}.plans.two .plan ul{padding-left:0;list-style:none}.plans.two .plan li{position:relative;padding-left:24px;margin:0 0 6px}
.plans.two .plan li::before{content:"";position:absolute;left:2px;top:.5em;width:11px;height:6px;border-left:2px solid var(--brand);border-bottom:2px solid var(--brand);transform:rotate(-45deg)}
.plans.two .plan.featured{border:0;background:#f0edfd;box-shadow:none}
.packs{margin:34px 0 22px}.packs h2{margin:0 0 4px}.packs-sub{margin:0 0 14px;color:var(--muted)}
.pack-row{display:grid;grid-template-columns:1fr minmax(260px,290px);gap:12px 28px;align-items:center;padding:20px 0;border-top:1px solid var(--line)}
.pack-row:last-child{border-bottom:1px solid var(--line)}
.pack-row h3{margin:0 0 4px;font-size:19px}.pack-row h3 small{margin-left:6px;font-size:12px;font-weight:700;color:var(--good);background:var(--goodbg);padding:2px 8px;border-radius:6px;vertical-align:2px}
.pack-row p{margin:0;color:var(--muted);line-height:1.55;max-width:58ch}
.credit-use{display:flex;flex-wrap:wrap;gap:6px 16px;margin-top:8px!important;font-size:14px}.credit-use b{color:var(--ink)}
.pack-row>.btn{justify-self:stretch}.pack-row .buy-packs .btn{white-space:nowrap}
.offer{background:#fff;border:1px solid var(--line);border-left:4px solid var(--brand);border-radius:12px}
@media(max-width:700px){.plans.two{grid-template-columns:1fr}.pack-row{grid-template-columns:1fr}}
/* every button sinks a little when pressed */
.btn{transition:transform .16s cubic-bezier(.23,1,.32,1)}.btn:active:not(:disabled){transform:scale(.97)}
@media(prefers-reduced-motion:reduce){.btn{transition:none}}
/* Phones: no grey flash on tap (each control has its own :active), no wait for a double tap, and holding a button does not select its text. Text stays selectable. */
html{-webkit-tap-highlight-color:transparent;-webkit-text-size-adjust:100%;text-size-adjust:100%}
a,button,summary,label,[role=button]{touch-action:manipulation}
button,.btn,.option,.chip,.nav-btn,.menu-btn,.lt-opt,.g-choice,.gap.gpick,.dy-level button{-webkit-user-select:none;user-select:none}
.option:active:not(:disabled),.lt-opt:active:not(:disabled),.g-choice:active:not(:disabled){background:#f5f3ff}
.focus .option:active:not(:disabled){background:#1f3a48}
.tl-words-card{display:grid;grid-template-columns:auto 1fr;gap:2px 14px;align-items:center;margin-top:14px;padding:18px 20px;border:1.5px dashed var(--line);border-radius:20px;background:var(--card);color:var(--ink);text-decoration:none}
.tl-words-card .num{grid-row:span 3;display:grid;place-items:center;width:48px;height:48px;border-radius:14px;background:#eeebff;color:#4f46e5;font-size:26px;font-weight:900}
.tl-words-card h3{margin:0}.tl-words-card p{margin:0;color:var(--muted);font-size:15px}.tl-words-card .go{font-weight:800;color:var(--brand)}
