:root{--navy:#0b2545;--navy2:#13315c;--teal:#0e7490;--teal2:#22b8cf;--bg:#f5f8fb;--card:#fff;--ink:#14213d;--mute:#4a5a73;--line:#d9e2ec;--ok:#0f7b3f;--bad:#b42318;--warn:#8a5a00;--r:12px}
*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;font:17px/1.65 system-ui,-apple-system,"Segoe UI",Roboto,Arial,sans-serif;color:var(--ink);background:var(--bg)}
a{color:var(--teal)}a:hover{color:var(--navy)}img,svg{max-width:100%}
:focus-visible{outline:3px solid var(--teal2);outline-offset:2px;border-radius:4px}
.skip{position:absolute;left:-999px;top:0;background:#fff;color:var(--navy);padding:.6rem 1rem;z-index:99}.skip:focus{left:8px;top:8px}
.wrap{max-width:1080px;margin:0 auto;padding:0 1rem}
header.site{background:var(--navy);color:#fff;position:sticky;top:0;z-index:20}
header.site .bar{display:flex;align-items:center;justify-content:space-between;gap:1rem;min-height:60px}
.brand{display:flex;align-items:center;gap:.55rem;color:#fff;text-decoration:none;font-weight:800;font-size:1.25rem;letter-spacing:.2px}.brand svg{width:30px;height:30px}.brand span em{color:var(--teal2);font-style:normal}
nav.main ul{list-style:none;margin:0;padding:0;display:flex;gap:.2rem;flex-wrap:wrap}
nav.main a{color:#e6eef8;text-decoration:none;padding:.5rem .7rem;border-radius:8px;display:block;font-size:.95rem}nav.main a:hover,nav.main a[aria-current=page]{background:var(--navy2);color:#fff}
.menu-btn{display:none;background:transparent;border:1px solid #6f87a8;color:#fff;border-radius:8px;padding:.45rem .7rem;font:inherit;cursor:pointer}
@media(max-width:860px){.menu-btn{display:block}nav.main{display:none;width:100%}nav.main.open{display:block;padding-bottom:.8rem}nav.main ul{flex-direction:column}header.site .bar{flex-wrap:wrap}}
.crumbs{font-size:.88rem;color:var(--mute);padding:.8rem 0 0}.crumbs ol{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:.35rem}.crumbs li+li:before{content:"›";margin-right:.35rem;color:#8a9bb3}
main{padding:1rem 0 3rem}h1{font-size:clamp(1.65rem,4vw,2.4rem);line-height:1.2;color:var(--navy);margin:.6rem 0 .4rem}h2{color:var(--navy);margin:2rem 0 .6rem;font-size:1.45rem}h3{color:var(--navy2);margin:1.3rem 0 .4rem}
.lead{font-size:1.12rem;color:var(--mute);max-width:70ch}
.hero{background:linear-gradient(135deg,var(--navy),var(--navy2) 60%,#0f5c73);color:#fff;border-radius:18px;padding:2.4rem 1.6rem;margin:1rem 0}.hero h1{color:#fff;margin-top:0}.hero p{color:#d9e7f5;max-width:62ch}
.btn{display:inline-block;background:var(--teal);color:#fff;border:2px solid var(--teal);padding:.6rem 1.1rem;border-radius:10px;text-decoration:none;font:600 1rem/1.2 inherit;cursor:pointer;margin:.2rem .3rem .2rem 0}.btn:hover{background:var(--navy);border-color:var(--navy);color:#fff}
.btn.alt{background:transparent;color:var(--teal);border-color:var(--teal)}.btn.alt:hover{background:var(--teal);color:#fff}.hero .btn.alt{color:#fff;border-color:#fff}.hero .btn.alt:hover{background:#fff;color:var(--navy)}
.btn[disabled],.btn[aria-disabled=true]{opacity:.5;cursor:not-allowed}
.grid{display:grid;gap:1rem;grid-template-columns:repeat(auto-fill,minmax(230px,1fr))}.grid.s{grid-template-columns:repeat(auto-fill,minmax(110px,1fr))}
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--r);padding:1.1rem;box-shadow:0 1px 2px rgba(11,37,69,.05)}.card h3{margin-top:0}.card p{margin:.3rem 0 .6rem;color:var(--mute);font-size:.97rem}
a.card{display:block;text-decoration:none;color:inherit}a.card:hover{border-color:var(--teal);box-shadow:0 4px 14px rgba(11,37,69,.1)}
.pill{display:inline-block;background:#e0f4f8;color:#0b5568;border-radius:99px;padding:.1rem .65rem;font-size:.82rem;font-weight:600}.pill.warn{background:#fff1d6;color:var(--warn)}
.setlink{text-align:center;padding:.7rem .4rem;font-weight:700}.setlink.cur{background:var(--navy);color:#fff;border-color:var(--navy)}.setlink.na{color:var(--mute);background:#eef2f6;font-weight:600}
.note{border-left:4px solid var(--teal2);background:#eaf7fa;padding:.8rem 1rem;border-radius:0 8px 8px 0;margin:1rem 0}.note.warn{border-color:#d99a00;background:#fff7e0}
.ico{width:34px;height:34px;color:var(--teal);margin-bottom:.3rem}
ul.clean{padding-left:1.2rem}ul.clean li{margin:.25rem 0}
.rel{display:flex;flex-wrap:wrap;gap:.5rem;margin:.5rem 0}.rel a{background:#fff;border:1px solid var(--line);padding:.35rem .8rem;border-radius:99px;text-decoration:none;font-size:.92rem}.rel a:hover{border-color:var(--teal)}
footer.site{background:var(--navy);color:#cdd9e8;padding:2rem 0 1.2rem;font-size:.93rem}footer.site a{color:#e6eef8}footer.site h2{color:#fff;font-size:1rem;margin:.2rem 0 .5rem}footer.site ul{list-style:none;padding:0;margin:0}footer.site li{margin:.25rem 0}.fgrid{display:grid;gap:1.4rem;grid-template-columns:repeat(auto-fit,minmax(200px,1fr))}.copy{border-top:1px solid #29456b;margin-top:1.4rem;padding-top:.9rem}
.ad-slot{margin:1.2rem auto;text-align:center;min-height:0}.ad-slot[hidden]{display:none}
/* quiz */
.quiz{background:#fff;border:1px solid var(--line);border-radius:14px;padding:1.2rem;margin:1.2rem 0}
.qhead{display:flex;justify-content:space-between;flex-wrap:wrap;gap:.5rem;font-weight:700;color:var(--navy)}
.prog{height:10px;background:#e3eaf2;border-radius:99px;overflow:hidden;margin:.6rem 0 1rem}.prog>i{display:block;height:100%;background:linear-gradient(90deg,var(--teal),var(--teal2));width:0;transition:width .2s}
.qtext{font-size:1.15rem;font-weight:600;margin:.4rem 0 1rem}
fieldset{border:0;margin:0;padding:0}.opt{display:flex;gap:.7rem;align-items:flex-start;border:2px solid var(--line);border-radius:10px;padding:.7rem .8rem;margin:.5rem 0;cursor:pointer;background:#fff}.opt:hover{border-color:var(--teal2)}.opt input{margin-top:.38rem;width:1.1rem;height:1.1rem;accent-color:var(--teal)}.opt.sel{border-color:var(--teal);background:#eaf7fa}
.qnav{display:flex;justify-content:space-between;gap:.6rem;flex-wrap:wrap;margin-top:1rem}
.qmap{display:grid;grid-template-columns:repeat(auto-fill,minmax(40px,1fr));gap:.35rem;margin:1rem 0 0}.qmap button{border:1px solid var(--line);background:#fff;border-radius:8px;padding:.35rem 0;font:600 .9rem inherit;cursor:pointer}.qmap button.done{background:#d8f1f6;border-color:var(--teal)}.qmap button.cur{background:var(--navy);color:#fff;border-color:var(--navy)}
.stats{display:grid;gap:.7rem;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));margin:1rem 0}.stat{background:var(--bg);border:1px solid var(--line);border-radius:10px;padding:.7rem;text-align:center}.stat b{display:block;font-size:1.6rem;color:var(--navy)}
.rev{border:1px solid var(--line);border-radius:10px;padding:.9rem;margin:.8rem 0;background:#fff}.rev.correct{border-left:6px solid var(--ok)}.rev.incorrect{border-left:6px solid var(--bad)}.rev.unanswered{border-left:6px solid #8a9bb3}
.rev li{margin:.2rem 0}.rev li.ans{color:var(--ok);font-weight:700}.rev li.mine{text-decoration:underline}.tag{font-weight:700}.tag.correct{color:var(--ok)}.tag.incorrect{color:var(--bad)}.tag.unanswered{color:var(--mute)}
/* oral */
.tools{display:flex;flex-wrap:wrap;gap:.6rem;align-items:center;background:#fff;border:1px solid var(--line);border-radius:12px;padding:.8rem;position:sticky;top:64px;z-index:5}
.tools input[type=search],.tools select{padding:.55rem .7rem;border:2px solid var(--line);border-radius:8px;font:inherit;min-width:12rem;flex:1}
.qa{background:#fff;border:1px solid var(--line);border-radius:12px;padding:1rem;margin:.8rem 0}.qa h3{margin:0 0 .4rem;font-size:1.05rem}.qa .ans{border-top:1px dashed var(--line);margin-top:.5rem;padding-top:.5rem}.qa .ans p{margin:.2rem 0}.qa[hidden]{display:none}.qa .src{font-size:.78rem;color:var(--mute)}
.qa .tog{background:none;border:1px solid var(--teal);color:var(--teal);border-radius:8px;padding:.25rem .7rem;font:600 .9rem inherit;cursor:pointer;margin-top:.4rem}
.pn{display:flex;justify-content:space-between;gap:.5rem;flex-wrap:wrap;margin:1.5rem 0}
table{border-collapse:collapse;width:100%;font-size:.96rem}th,td{border:1px solid var(--line);padding:.5rem .6rem;text-align:left}th{background:#e8eff7}.tw{overflow-x:auto}
@media print{header.site,footer.site,.tools,.qnav,.ad-slot{display:none}}
/* ===== v2 design layer: tokens, type scale, motion ===== */
:root{--s1:.25rem;--s2:.5rem;--s3:.75rem;--s4:1rem;--s5:1.5rem;--s6:2.5rem;--shadow:0 1px 2px rgba(11,37,69,.06),0 6px 18px rgba(11,37,69,.07);--shadow-up:0 10px 28px rgba(11,37,69,.14);--ease:cubic-bezier(.2,.7,.2,1);--font:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;--text:#243042;--t-small:.875rem;--t-body:1.0625rem;--t-card:1.2rem;--t-h2:clamp(1.4rem,2.6vw,1.75rem);--t-h1:clamp(1.75rem,4vw,2.4rem);--t-hero:clamp(2rem,5.2vw,3.1rem)}
body{font-family:var(--font);font-size:var(--t-body);color:var(--text);background:#f7f9fc}
h1{font-size:var(--t-h1);letter-spacing:-.01em}h2{font-size:var(--t-h2)}h3{font-size:var(--t-card)}.hero h1{font-size:var(--t-hero)}
main p,main li{max-width:75ch}.card p,.hero p{max-width:none}.crumbs,.pill,small,.src{font-size:var(--t-small)}.btn{font-size:1rem}
.card,.qa,.rev,.quiz,.tools,.stat{box-shadow:var(--shadow)}
a.card{transition:transform .2s var(--ease),box-shadow .2s var(--ease),border-color .2s}a.card:hover{transform:translateY(-3px);box-shadow:var(--shadow-up)}
.btn{transition:background-color .15s,color .15s,transform .1s,box-shadow .15s}.btn:hover{box-shadow:0 4px 12px rgba(14,116,144,.3)}.btn:active{transform:scale(.97)}
.hero{position:relative;overflow:hidden;background:linear-gradient(140deg,var(--navy) 0%,var(--navy2) 70%);padding:clamp(2rem,6vw,3.5rem) clamp(1.2rem,4vw,2.5rem)}.hero:after{content:"";position:absolute;right:-60px;top:-60px;width:240px;height:240px;border-radius:50%;background:radial-gradient(circle,rgba(34,184,207,.28),transparent 70%)}
.sr{position:absolute;left:-999px}caption.sr{position:absolute}
.opt{transition:border-color .15s,background-color .15s,transform .12s}.opt:active{transform:scale(.99)}.opt.sel{animation:pop .18s var(--ease)}
.qin{animation:qin .28s var(--ease)}.prog>i{transition:width .35s var(--ease)}
.qa .ans:not([hidden]){animation:fade .22s var(--ease)}.qa{transition:border-color .2s}.qa:hover{border-color:#b9d3dc}
.js .reveal{opacity:0;transform:translateY(14px);transition:opacity .5s var(--ease),transform .5s var(--ease)}.js .reveal.in{opacity:1;transform:none}
/* dropdown */
nav.main li{position:relative}.dd-btn{background:none;border:0;color:#e6eef8;cursor:pointer;padding:.5rem .4rem;font-size:.8rem;border-radius:6px}.dd-btn:hover{background:var(--navy2)}
nav.main .dd{display:flex;align-items:center}nav.main .sub{display:none;position:absolute;top:100%;left:0;min-width:260px;background:#fff;border:1px solid var(--line);border-radius:10px;box-shadow:var(--shadow-up);padding:.4rem;z-index:30;flex-direction:column;gap:0}
nav.main .sub a{color:var(--ink);padding:.45rem .7rem}nav.main .sub a:hover{background:#eaf7fa;color:var(--navy)}
nav.main .dd:hover .sub,nav.main .dd:focus-within .sub,nav.main .dd.open .sub{display:flex;animation:fade .15s}
@media(max-width:860px){nav.main{display:block;max-height:0;overflow:hidden;transition:max-height .35s var(--ease)}nav.main.open{max-height:90vh;overflow:auto}nav.main .dd{flex-wrap:wrap}nav.main .sub{position:static;display:none;width:100%;box-shadow:none;border:0;background:var(--navy2)}nav.main .sub a{color:#e6eef8}nav.main .dd.open .sub{display:flex}}
@keyframes fade{from{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:none}}@keyframes qin{from{opacity:0;transform:translateX(14px)}to{opacity:1;transform:none}}@keyframes pop{from{transform:scale(.98)}to{transform:scale(1)}}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important;scroll-behavior:auto!important}.js .reveal{opacity:1;transform:none}}
