:root{--red:#c8102e;--red-dark:#9b0b22;--red-soft:#fdecef;--ink:#1a1a1f;--ink-2:#4b5563;--ink-3:#7c8493;--line:#e5e7eb;--bg:#f7f7f9;--white:#fff;--green:#0f9d58;--amber:#f59e0b;--blue:#2563eb;--radius:12px;--shadow:0 1px 3px rgba(16,24,40,.08),0 1px 2px rgba(16,24,40,.04);--shadow-lg:0 12px 32px rgba(16,24,40,.12)}*{box-sizing:border-box}body,html{padding:0;margin:0;background:var(--bg);color:var(--ink);font-family:Segoe UI,Roboto,Helvetica Neue,Noto Sans,PingFang SC,Microsoft YaHei,Arial,sans-serif;font-size:16px;line-height:1.6;-webkit-text-size-adjust:100%}a{color:var(--red);text-decoration:none}a:hover{text-decoration:underline}h1,h2,h3,h4{line-height:1.3;margin:0 0 12px}h1{font-size:1.9rem}h2{font-size:1.35rem}h3{font-size:1.1rem}p{margin:0 0 12px}hr{border:0;border-top:1px solid var(--line);margin:20px 0}.container{max-width:1180px}.container,.container-sm{margin:0 auto;padding:0 16px}.container-sm{max-width:720px}.page{padding:24px 0 64px}.row,.row-between{display:flex;gap:12px;flex-wrap:wrap;align-items:center}.row-between{justify-content:space-between}.grid{display:grid;grid-gap:16px;gap:16px}.grid-2{grid-template-columns:repeat(auto-fit,minmax(320px,1fr))}.grid-3{grid-template-columns:repeat(auto-fit,minmax(260px,1fr))}.grid-4{grid-template-columns:repeat(auto-fit,minmax(200px,1fr))}.spacer{flex:1 1}.muted{color:var(--ink-2)}.small{font-size:.85rem}.tiny{font-size:.78rem}.center{text-align:center}.mt0{margin-top:0}.mt1{margin-top:8px}.mt2{margin-top:16px}.mt3{margin-top:24px}.mb1{margin-bottom:8px}.mb2{margin-bottom:16px}.mb3{margin-bottom:24px}.nowrap{white-space:nowrap}.mono{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}.zh{font-size:1.12rem;line-height:1.9}.site-header{background:var(--white);border-bottom:1px solid var(--line);position:-webkit-sticky;position:sticky;top:0;z-index:50}.site-header .inner{max-width:1400px;margin:0 auto;padding:10px 16px;display:flex;align-items:center;gap:14px;flex-wrap:nowrap}.site-header .inner>*{flex:0 0 auto}.site-header .nav{flex:0 1 auto;min-width:0}.site-header .inner>.spacer{flex:1 1 auto}.brand{display:flex;align-items:center;gap:10px;font-weight:800;font-size:1.15rem;color:var(--ink)}.brand:hover{text-decoration:none}.brand .logo{width:36px;height:36px;border-radius:10px;background:var(--red);color:#fff;display:grid;place-items:center;font-weight:800;font-size:1rem}.brand small{display:block;font-weight:500;font-size:.7rem;color:var(--ink-3)}.nav{display:flex;gap:4px;flex-wrap:wrap;align-items:center}.nav a{padding:7px 12px;border-radius:8px;color:var(--ink-2);font-weight:600;font-size:.92rem}.nav a:hover{text-decoration:none}.nav a.active,.nav a:hover{background:var(--red-soft);color:var(--red)}.user-chip{display:flex;align-items:center;gap:8px;padding:5px 10px 5px 5px;border:1px solid var(--line);border-radius:999px;font-size:.85rem}.avatar{width:28px;height:28px;border-radius:50%;background:var(--red-soft);color:var(--red);display:grid;place-items:center;font-weight:700;font-size:.72rem}.card{background:var(--white);border:1px solid var(--line);border-radius:var(--radius);padding:18px;box-shadow:var(--shadow)}.card.pad0{padding:0;overflow:hidden}.card-link{display:block;color:inherit}.card-link:hover{text-decoration:none;border-color:var(--red);box-shadow:var(--shadow-lg)}.section-title{display:flex;align-items:center;gap:12px;margin:28px 0 14px}.section-title h2{margin:0}.section-title .line{flex:1 1;height:1px;background:var(--line)}.badge{display:inline-flex;align-items:center;gap:5px;padding:2px 9px;border-radius:999px;font-size:.74rem;font-weight:700;background:var(--red-soft);color:var(--red);white-space:nowrap}.badge.gray{background:#f1f3f6;color:var(--ink-2)}.badge.red{background:var(--red-soft);color:var(--red-dark)}.badge.green{background:#e7f6ee;color:var(--green)}.badge.amber{background:#fef3e2;color:#b45309}.badge.blue{background:#e8f0fe;color:var(--blue)}.badge.dark{background:var(--ink);color:#fff}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:10px 18px;border-radius:10px;border:1px solid transparent;background:var(--red);color:#fff;font-weight:700;font-size:.95rem;cursor:pointer;font-family:inherit;transition:.15s}.btn:hover{background:var(--red-dark);text-decoration:none}.btn:disabled{opacity:.55;cursor:not-allowed}.btn.ghost{background:var(--white);color:var(--ink);border-color:var(--line)}.btn.ghost:hover{background:#fafafa;border-color:var(--ink-3)}.btn.dark{background:var(--ink)}.btn.green{background:var(--green)}.btn.green:hover{background:#0b7c45}.btn.small{padding:6px 12px;font-size:.85rem;border-radius:8px}.btn.tiny{padding:4px 9px;font-size:.78rem;border-radius:7px}.btn.block{width:100%}.btn.danger{background:#fff;color:var(--red);border-color:#f3c2ca}.btn.danger:hover{background:var(--red-soft)}label.field{display:block;margin-bottom:14px}label.field>span{display:block;font-weight:600;font-size:.88rem;margin-bottom:5px;color:var(--ink-2)}input:not([type]),input[type=datetime-local],input[type=email],input[type=number],input[type=password],input[type=search],input[type=text],input[type=url],select,textarea{width:100%;padding:10px 12px;border:1px solid var(--line);border-radius:9px;font-family:inherit;font-size:.95rem;background:var(--white);color:var(--ink)}textarea{min-height:90px;resize:vertical}input:focus,select:focus,textarea:focus{outline:2px solid var(--red-soft);border-color:var(--red)}input[type=checkbox],input[type=radio]{width:auto}.field-pair{display:grid;grid-template-columns:1fr 1fr;grid-gap:0 12px;gap:0 12px}@media (max-width:430px){.field-pair{grid-template-columns:1fr}}.hint{font-size:.8rem;color:var(--ink-3);margin-top:4px}.checkline{display:flex;align-items:center;gap:8px;font-size:.9rem}.table-wrap{overflow-x:auto;border:1px solid var(--line);border-radius:var(--radius);background:#fff}table{width:100%;border-collapse:collapse;font-size:.9rem}td,th{padding:10px 12px;text-align:left;border-bottom:1px solid var(--line);vertical-align:middle}th{background:#fbfbfc;font-size:.78rem;text-transform:uppercase;letter-spacing:.03em;color:var(--ink-2)}tbody tr:hover{background:#fcfcfd}tbody tr:last-child td{border-bottom:0}.alert{padding:11px 14px;border-radius:10px;font-size:.9rem;margin-bottom:14px;border:1px solid}.alert.err{background:#fdecef;border-color:#f3c2ca;color:#9b0b22}.alert.ok{background:#e7f6ee;border-color:#bfe6ce;color:#0b6b3a}.alert.warn{background:#fef8e7;border-color:#f6e0a8;color:#92610a}.alert.info{background:#eef4ff;border-color:#cddcfa;color:#1d4ed8}.stat{background:#fff;border:1px solid var(--line);border-radius:var(--radius);padding:14px 16px}.stat .label{font-size:.78rem;text-transform:uppercase;color:var(--ink-3);font-weight:700;letter-spacing:.03em}.stat .value{font-size:1.8rem;font-weight:800;margin-top:4px}.stat .sub{font-size:.8rem;color:var(--ink-3)}.bar{height:8px;background:#eef0f4;overflow:hidden}.bar,.bar>i{border-radius:999px}.bar>i{display:block;height:100%;background:var(--red)}.bar.green>i{background:var(--green)}.bar.blue>i{background:var(--blue)}.bar.amber>i{background:var(--amber)}.chart{display:flex;align-items:flex-end;gap:6px;height:130px;padding-top:8px}.chart .col{flex:1 1;display:flex;flex-direction:column;justify-content:flex-end;align-items:center;gap:4px}.chart .col i{display:block;width:100%;background:linear-gradient(180deg,#e35d75,var(--red));border-radius:5px 5px 0 0;min-height:3px}.chart .col span{font-size:.64rem;color:var(--ink-3)}.exam-card{display:flex;flex-direction:column;gap:10px;height:100%}.exam-card .top{display:flex;justify-content:space-between;gap:8px;align-items:flex-start}.exam-card h3{margin:0;font-size:1.05rem}.exam-card .meta{gap:8px;font-size:.8rem;color:var(--ink-3)}.exam-card .meta,.skills{display:flex;flex-wrap:wrap}.skills{gap:6px}.exam-shell{display:grid;grid-template-columns:1fr 300px;grid-gap:20px;gap:20px;align-items:start}@media (max-width:900px){.exam-shell{grid-template-columns:1fr}}.exam-side{position:-webkit-sticky;position:sticky;top:76px}.qbox{background:#fff;border:1px solid var(--line);border-radius:var(--radius);padding:18px;margin-bottom:14px}.qbox.speaking{border-left:4px solid var(--red)}.qbox.good{border-left:5px solid var(--green);background:#f6fdf9}.qbox.bad{border-left:5px solid var(--red);background:#fff8f8}.qbox.partial{background:#fffcf5}.qbox.partial,.qbox.pending{border-left:5px solid var(--amber)}.qbox.pending{background:#fffdf7}.qbox.blank{border-left:5px solid #cbd2dc;background:#fbfbfc}.ans-ok{color:#0b7a45;font-weight:600}.ans-bad{color:var(--red-dark);font-weight:600}.opt.ok{border-color:var(--green);background:#f0fbf5}.opt.ok .key{background:var(--green);color:#fff}.opt.bad{border-color:var(--red);background:var(--red-soft)}.opt.bad .key{background:var(--red);color:#fff}.answer-box{display:block}.answer-box input,.answer-box textarea{width:100%}.answer-box.ok input,.answer-box.ok textarea{border-color:var(--green);background:#f7fdf9}.answer-box.bad input,.answer-box.bad textarea{border-color:var(--red);background:snow}.answer-box.pending input,.answer-box.pending textarea{border-color:#f2c98a;background:#fffdf7}.match-row.ok{background:#f0fbf5;border-radius:8px}.match-row.bad{background:var(--red-soft);border-radius:8px}tr.row-good{background:#f6fdf9}tr.row-bad{background:#fff8f8}tr.row-partial,tr.row-pending{background:#fffdf7}tr.row-blank{background:#fbfbfc}tr.row-good td:first-child{border-left:4px solid var(--green)}tr.row-bad td:first-child{border-left:4px solid var(--red)}tr.row-partial td:first-child,tr.row-pending td:first-child{border-left:4px solid var(--amber)}tr.row-blank td:first-child{border-left:4px solid #cbd2dc}.qhead{display:flex;gap:10px;align-items:center;justify-content:space-between;margin-bottom:10px;flex-wrap:wrap}.qno{font-weight:800;color:var(--red)}.opt{display:flex;gap:10px;align-items:flex-start;padding:10px 12px;border:1px solid var(--line);border-radius:9px;margin-bottom:8px;cursor:pointer;background:#fff;font-size:.95rem}.opt:hover{border-color:var(--red);background:snow}.opt input{margin-top:5px}.opt.sel{border-color:var(--red);background:var(--red-soft)}.opt .key{min-width:24px;height:24px;border-radius:6px;background:#f1f3f6;display:grid;place-items:center;font-weight:800;font-size:.8rem}.opt.sel .key{background:var(--red);color:#fff}.prompt{font-size:1.05rem}.options-grid{display:grid;grid-gap:8px;gap:8px}.blanks{display:flex;gap:8px;flex-wrap:wrap}.chip{padding:5px 10px;border:1px dashed var(--ink-3);border-radius:999px;font-size:.85rem;cursor:pointer;background:#fff}.chip:hover{border-color:var(--red);color:var(--red)}.chip.used{opacity:.4}.audio-bar{background:var(--ink);color:#fff;border-radius:var(--radius);padding:14px 16px;margin-bottom:16px}.audio-bar .title{font-weight:700;font-size:.9rem;margin-bottom:10px}.audio-ctrls{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.audio-ctrls button{background:hsla(0,0%,100%,.12);color:#fff;border:1px solid hsla(0,0%,100%,.25);border-radius:9px;padding:9px 14px;font-weight:700;cursor:pointer;font-family:inherit;font-size:.9rem}.audio-ctrls button:hover:not(:disabled){background:hsla(0,0%,100%,.22)}.audio-ctrls button:disabled{opacity:.35;cursor:not-allowed}.audio-ctrls .big{font-size:1rem;padding:10px 20px;background:var(--red);border-color:var(--red)}.audio-time{font-family:ui-monospace,monospace;font-size:.85rem;margin-left:auto}.audio-track{height:6px;background:hsla(0,0%,100%,.18);border-radius:999px;margin-top:12px;overflow:hidden}.audio-track i{display:block;height:100%;background:#fff}.audio-note{font-size:.76rem;opacity:.75;margin-top:8px}.timer{font-family:ui-monospace,monospace;font-weight:800;font-size:1.15rem;padding:6px 12px;border-radius:9px;background:var(--ink);color:#fff}.timer.warn{background:var(--red)}.palette{display:flex;flex-wrap:wrap;gap:5px}.palette a{width:30px;height:30px;display:grid;place-items:center;border-radius:7px;border:1px solid var(--line);font-size:.76rem;font-weight:700;color:var(--ink-2);background:#fff}.palette a.done{background:#e7f6ee;border-color:#bfe6ce;color:var(--green)}.palette a.cur{background:var(--red);border-color:var(--red);color:#fff}.rec-dot{display:inline-block;width:9px;height:9px;border-radius:50%;background:var(--red);animation:pulse 1s infinite}@keyframes pulse{0%,to{opacity:1}50%{opacity:.25}}.comment{border-bottom:1px solid var(--line);padding:12px 0}.comment:last-child{border-bottom:0}.comment .who{display:flex;align-items:center;gap:8px;font-size:.85rem;font-weight:700}.comment .body{margin-top:6px;font-size:.95rem;white-space:pre-wrap;word-break:break-word}.hero{background:linear-gradient(135deg,#9b0b22,#c8102e 55%,#e35d75);color:#fff;padding:48px 0 56px}.hero h1{color:#fff;font-size:2.1rem;margin-bottom:10px}.hero p{color:hsla(0,0%,100%,.92);max-width:720px;font-size:1.02rem}.hero .badge{background:hsla(0,0%,100%,.18);color:#fff}.site-footer{border-top:1px solid var(--line);background:#fff;padding:26px 0;margin-top:40px;font-size:.85rem;color:var(--ink-2)}.editor-part{border:1px solid var(--line);border-radius:var(--radius);background:#fff;margin-bottom:14px}.editor-part>header{display:flex;align-items:center;gap:10px;padding:12px 14px;border-bottom:1px solid var(--line);background:#fbfbfc;border-radius:var(--radius) var(--radius) 0 0;flex-wrap:wrap}.editor-part>.body{padding:14px}.qedit{border:1px solid var(--line);border-radius:10px;padding:12px;margin-bottom:10px;background:#fff}.qedit>header{display:flex;align-items:center;gap:8px;margin-bottom:10px;flex-wrap:wrap}.choice-card{display:flex;gap:10px;align-items:flex-start;padding:10px 12px;border:1px solid var(--line);border-radius:10px;background:#fff;cursor:pointer}.choice-card.on{border-color:var(--red);background:var(--red-soft)}.choice-card input{margin-top:4px}.opt-edit{display:grid;grid-template-columns:34px 1fr auto;grid-gap:8px;gap:8px;align-items:center;margin-bottom:6px}.drawer-backdrop{position:fixed;inset:0;background:rgba(16,24,40,.45);z-index:100;display:flex;justify-content:flex-end}.drawer{background:#fff;width:min(560px,100%);height:100%;overflow:auto;padding:20px;box-shadow:var(--shadow-lg)}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@media print{.no-print{display:none!important}}.audio-range{margin-top:12px}.audio-range input[type=range]{width:100%;-webkit-appearance:none;-moz-appearance:none;appearance:none;height:22px;background:transparent;cursor:pointer;margin:0}.audio-range input[type=range]::-webkit-slider-runnable-track{height:8px;border-radius:999px;background:hsla(0,0%,100%,.28)}.audio-range input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:18px;height:18px;border-radius:50%;background:#fff;border:2px solid var(--red);margin-top:-5px}.audio-range input[type=range]::-moz-range-track{height:8px;border-radius:999px;background:hsla(0,0%,100%,.28)}.audio-range input[type=range]::-moz-range-thumb{width:16px;height:16px;border-radius:50%;background:#fff;border:2px solid var(--red)}.audio-range input[type=range]:disabled{opacity:.4;cursor:not-allowed}.audio-track{margin-top:4px}.steps{flex-wrap:wrap}.step,.steps{display:flex;gap:8px}.step{align-items:center;padding:9px 14px;border-radius:999px;border:1px solid var(--line);background:#fff;font-family:inherit;font-size:.88rem;font-weight:600;cursor:pointer}.step,.step .num{color:var(--ink-2)}.step .num{width:22px;height:22px;border-radius:50%;background:#f1f3f6;display:grid;place-items:center;font-size:.75rem;font-weight:800}.step.active{border-color:var(--red);color:var(--red);background:var(--red-soft)}.step.active .num{background:var(--red);color:#fff}.step.done{border-color:#bfe6ce;color:var(--green);background:#f4fbf7}.step.done .num{background:var(--green);color:#fff}.dropzone{border:2px dashed var(--line);border-radius:var(--radius);padding:18px;text-align:center;background:#fbfbfc}.audio-source{display:flex;flex-direction:column;gap:8px}.brand img.logo-img{width:44px;height:44px;border-radius:50%;object-fit:contain;background:#fff}.brand-text strong{font-size:1.06rem;letter-spacing:.2px}.brand-sub{display:block;font-size:.74rem;color:var(--brand-2,#7b3fbf);font-weight:700;letter-spacing:.3px}.footer-logo{width:52px;height:52px;border-radius:50%;object-fit:contain;background:#fff}.contact-box{background:#fff;border:1px dashed var(--line);border-radius:var(--radius);padding:12px 14px}.login-hero{display:flex;align-items:center;gap:14px;margin-bottom:10px}.login-hero img{width:78px;height:78px;object-fit:contain}.step-box{border:1px solid var(--line);border-radius:var(--radius);padding:12px 14px;background:#fbfbfc}.step-box.done{border-color:#bfe6ce;background:#f4fbf7}.brand{min-width:0;flex:0 1 auto}.brand-text{min-width:0;overflow:hidden}.brand-title{display:block;font-size:.9rem!important;line-height:1.2;text-transform:uppercase;letter-spacing:.2px;overflow:hidden;text-overflow:ellipsis}.hero-title{text-transform:uppercase;font-size:1.5rem;line-height:1.3}@media (max-width:1400px){.brand-title{font-size:.86rem!important}.site-header .nav a{padding:6px 8px;font-size:.82rem}.site-header .user-chip{font-size:.84rem}}@media (max-width:1150px){.brand-title{font-size:.76rem!important}.site-header .nav a{padding:5px 6px;font-size:.78rem}.site-header .inner{gap:10px}}@media (max-width:900px){.site-header .nav{display:none}.brand-title{font-size:.78rem!important}}@media (max-width:720px){.brand-text{max-width:300px}.brand-title{font-size:.68rem!important}.hero-title{font-size:1.15rem}}@media (max-width:560px){.brand-text{max-width:210px}}.demo-badge{position:fixed;left:12px;bottom:12px;z-index:60;display:flex;align-items:center;gap:10px;background:#0f172a;color:#fff;border-radius:999px;padding:8px 10px 8px 14px;font-size:.78rem;box-shadow:0 6px 20px rgba(15,23,42,.35);max-width:min(92vw,520px)}.demo-badge .btn{background:hsla(0,0%,100%,.14);color:#fff;border-color:transparent}.demo-badge .btn:hover{background:hsla(0,0%,100%,.24)}@media print{.demo-badge{display:none}}.sample-dlg-backdrop{position:fixed;inset:0;z-index:120;background:rgba(16,24,40,.5);display:flex;align-items:center;justify-content:center;padding:18px}.sample-dlg{background:#fff;width:min(920px,100%);max-height:92vh;overflow:auto;margin:0}.sample-dlg textarea{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.72rem;line-height:1.45;white-space:pre}