@import url('https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;600;700&family=Noto+Sans+SC:wght@400;500;600;700&display=swap');
:root{--paper:#f7f6f2;--white:#fff;--ink:#172b2d;--muted:#677779;--line:#e4e9e6;--teal:#087e78;--teal-deep:#075b57;--teal-soft:#e7f4f0;--peach:#f1b995;--red:#a54b3e;--red-soft:#fff2ef;--shadow:0 16px 48px rgba(28,55,49,.055)}
*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:var(--paper);color:var(--ink);font-family:"DM Sans","Noto Sans SC",system-ui,sans-serif;-webkit-font-smoothing:antialiased}button,input{font:inherit}button{cursor:pointer}.page-shell{max-width:1220px;margin:0 auto;padding:0 40px}.topbar{height:84px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid #dfe6e2}.brand{display:inline-flex;align-items:center;gap:11px;color:var(--ink);text-decoration:none;font-weight:700;font-size:17px;letter-spacing:-.035em}.brand strong{color:var(--teal)}.brand-mark{width:35px;height:35px;border-radius:10px;background:var(--teal-deep);color:#fff;display:grid;place-items:center;font-family:"Noto Sans SC",sans-serif;font-size:19px;font-weight:500}.topbar-label,.overline,.eyebrow,.card-kicker,.sound-label,.candidate-header{font-size:11px;font-weight:700;letter-spacing:.12em}.topbar-label{color:#7b8d8b}.intro{padding:73px 0 64px;max-width:760px}.eyebrow{display:inline-flex;align-items:center;gap:9px;color:var(--teal);font-size:11px}.eyebrow-dot{height:7px;width:7px;background:var(--teal);border-radius:50%;box-shadow:0 0 0 4px #dff0e9}h1,h2,h3,p{margin-top:0}h1{font-size:clamp(42px,5.6vw,72px);line-height:1.12;letter-spacing:-.055em;margin:20px 0 21px;font-weight:700}h1 em{color:var(--teal);font-style:normal}.intro-copy{color:#526467;font-size:17px;line-height:1.67;max-width:650px;margin-bottom:25px}.intro-meta{display:flex;align-items:center;gap:15px;font-size:12px;font-weight:600;color:#71817f}.tiny-icon{color:var(--teal);font-size:16px;vertical-align:-1px;margin-right:3px}.meta-divider{width:4px;height:4px;border-radius:50%;background:#c2cfca}.practice-section{padding:0 0 84px}.section-heading{display:flex;justify-content:space-between;align-items:end;margin-bottom:23px}.overline{color:var(--teal)}.section-heading h2,.recap h2{font-size:25px;letter-spacing:-.04em;margin:8px 0 0}.section-note{color:#859491;font-size:12px;padding-bottom:3px}.trainer{background:var(--white);border:1px solid var(--line);border-radius:22px;box-shadow:var(--shadow);overflow:hidden}.trainer-toolbar{padding:23px 28px 20px;display:flex;align-items:center;justify-content:space-between;gap:20px}.mode-switch{display:inline-flex;background:#f1f5f2;border:1px solid #e6ece8;border-radius:11px;padding:4px;gap:2px}.mode-tab{border:0;background:transparent;color:#677c79;border-radius:8px;font-weight:700;font-size:13px;padding:10px 18px;min-width:99px}.mode-tab span{font-size:17px;margin-right:5px;vertical-align:-1px}.mode-tab.active{background:#fff;color:var(--teal-deep);box-shadow:0 1px 5px #d8e3df}.mode-tab:focus-visible,.candidate:focus-visible,.next-button:focus-visible,.text-button:focus-visible,.clear-button:focus-visible,.sound-help:focus-visible{outline:3px solid #8dc9bc;outline-offset:2px}.progress-caption{display:flex;align-items:center;gap:20px;font-size:12px;color:#7d8c89}.progress-caption strong{color:var(--teal);font-weight:700}.progress-track{height:3px;background:#eaf0ec}.progress-track span{display:block;width:0;height:100%;background:var(--teal);transition:width .35s}.exercise-grid{display:grid;grid-template-columns:43% 57%;min-height:395px}.prompt-panel,.input-panel{padding:34px 38px 36px}.prompt-panel{background:#f4f8f5;border-right:1px solid #e9eeea;display:flex;flex-direction:column}.card-kicker{display:flex;align-items:center;gap:9px;color:#59817b;font-size:10px}.step-dot{background:#d9ebe5;border-radius:50%;width:20px;height:20px;display:inline-grid;place-items:center;font-size:10px;color:var(--teal-deep);letter-spacing:0}.prompt-label{font-size:13px;color:#738580;margin:37px 0 7px}.prompt-panel h3{font-size:clamp(31px,3vw,43px);line-height:1.17;letter-spacing:-.045em;margin-bottom:23px}.target-sound{display:flex;align-items:center;gap:13px}.sound-label{color:#8b9b96;font-size:9px}.target-sound #tone-pinyin{font-size:21px;color:var(--teal-deep);font-weight:700}.sound-help{border:1px solid #c8dad2;color:var(--teal);background:transparent;border-radius:50%;width:19px;height:19px;padding:0;font-size:11px;font-weight:700}.prompt-hint{font-size:13px;color:#6e817c;line-height:1.5;margin:14px 0 0}.prompt-hint strong{color:var(--ink)}.learning-note{display:flex;gap:10px;color:#657a75;font-size:12px;line-height:1.5;border-top:1px solid #dfeae3;margin-top:auto;padding-top:20px}.note-spark{color:var(--teal);font-size:15px}.input-panel{position:relative}.input-label{font-size:14px;font-weight:700;display:block;margin:35px 0 11px}.input-wrap{display:flex;align-items:center;border:1.5px solid #cedcd5;border-radius:11px;height:57px;background:#fff;transition:border-color .15s,box-shadow .15s}.input-wrap:focus-within{border-color:var(--teal);box-shadow:0 0 0 4px #e5f3ed}.input-wrap.invalid{border-color:#bb6e61;box-shadow:0 0 0 4px #fff1ed}.input-prefix{color:var(--teal);font-size:21px;border-right:1px solid #e2ebe6;padding:0 16px;font-family:"Noto Sans SC",sans-serif}.input-wrap input{min-width:0;flex:1;border:0;outline:0;background:transparent;padding:14px 15px;font-size:17px;color:var(--ink)}.input-wrap input::placeholder{color:#aab9b3}.clear-button{border:0;background:none;font-size:22px;color:#7d928b;margin-right:12px}.input-help{font-size:12px;color:#879894;min-height:19px;margin:10px 0 19px}.candidate-area{border:1px solid #d5e7dd;border-radius:12px;overflow:hidden;background:#fff}.candidate-header{display:flex;justify-content:space-between;align-items:center;background:#f3f8f4;padding:11px 15px;color:#648179;font-size:9px;gap:8px}.candidate-header strong{color:var(--teal-deep);letter-spacing:0;font-size:11px}.candidate-pulse{display:inline-block;width:6px;height:6px;background:var(--teal);border-radius:50%;margin-right:7px}.candidate-key-tip{color:#8a9a94;letter-spacing:0;font-weight:500}.candidate-list{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:0}.candidate{position:relative;border:0;border-right:1px solid #eaf0ec;background:#fff;color:var(--ink);min-height:86px;display:flex;align-items:center;justify-content:center;flex-direction:column;gap:3px;transition:background .15s}.candidate:last-child{border-right:0}.candidate:hover:not(:disabled){background:#f1f8f3}.candidate:disabled{cursor:default}.candidate .number{position:absolute;top:8px;left:10px;color:#98aaa2;font-size:10px}.candidate .hanzi{font-size:clamp(21px,2.4vw,31px);font-family:"Noto Sans SC",sans-serif;font-weight:500;white-space:nowrap}.candidate.correct{background:#e5f5e9;color:#126d4e}.candidate.wrong{background:#fff0ec;color:#a04e3d}.candidate.wrong .number{color:#a04e3d}.waiting-state{border:1px dashed #d8e3dd;border-radius:11px;min-height:112px;display:flex;align-items:center;justify-content:center;gap:10px;color:#9aa9a2;font-size:12px}.waiting-cursor{color:var(--teal);font-size:19px;font-weight:400}.feedback{border-radius:9px;padding:11px 13px;margin-top:14px;font-size:12px;line-height:1.55}.feedback.success{background:#e8f6ed;color:#176b4d}.feedback.error{background:var(--red-soft);color:var(--red)}.feedback.info{background:#ecf5f3;color:#256a64}.next-button{border:0;background:var(--teal);color:#fff;font-weight:700;font-size:13px;border-radius:9px;padding:12px 17px;margin-top:15px;transition:background .2s,transform .2s}.next-button:hover{background:var(--teal-deep);transform:translateY(-1px)}.next-button span{margin-left:12px}.trainer-footer{border-top:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;gap:20px;padding:19px 28px;color:#80908c;font-size:11px}.text-button{background:transparent;border:0;color:var(--teal-deep);font-size:11px;font-weight:700;padding:5px}.text-button:hover{text-decoration:underline}.recap{border-top:1px solid #dde5df;padding:53px 0 70px;display:grid;grid-template-columns:35% 1fr;gap:36px}.recap h2{font-size:28px;max-width:290px;line-height:1.2}.recap-steps{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}.recap-steps div{border-left:1px solid #d4e1d9;padding:3px 16px}.recap-steps span{color:var(--teal);font-weight:700;font-size:11px}.recap-steps p{line-height:1.48;color:#5e706e;font-size:13px;margin:13px 0 0}.recap-steps strong{color:var(--ink)}.site-footer{padding:25px 0 35px;border-top:1px solid #dde5df;display:flex;justify-content:space-between;gap:20px;font-size:11px;color:#8b9996}.footer-separator{padding:0 5px}
@media(max-width:800px){.page-shell{padding:0 22px}.intro{padding:54px 0 49px}.exercise-grid{grid-template-columns:1fr}.prompt-panel{border-right:0;border-bottom:1px solid #e9eeea;min-height:300px}.prompt-panel,.input-panel{padding:27px}.prompt-label{margin-top:24px}.learning-note{margin-top:28px}.input-label{margin-top:24px}.recap{grid-template-columns:1fr;gap:26px}.recap h2{max-width:none}}
@media(max-width:560px){.page-shell{padding:0 17px}.topbar{height:67px}.brand{font-size:14px}.brand-mark{width:31px;height:31px;font-size:17px}.topbar-label,.section-note{display:none}.intro{padding:49px 2px 47px}.intro-copy{font-size:15px}.intro-meta{gap:10px;flex-wrap:wrap}.section-heading h2{font-size:23px}.practice-section{padding-bottom:62px}.trainer{border-radius:15px}.trainer-toolbar{padding:15px 17px;gap:10px}.mode-tab{min-width:74px;padding:9px 11px;font-size:12px}.progress-caption{flex-direction:column;align-items:flex-end;gap:2px;font-size:10px}.prompt-panel,.input-panel{padding:23px 19px}.prompt-panel{min-height:286px}.prompt-panel h3{font-size:34px;margin-bottom:14px}.candidate .hanzi{font-size:23px}.candidate{min-height:74px}.candidate-header{font-size:8px}.candidate-key-tip{display:none}.trainer-footer{padding:17px;align-items:flex-start;font-size:10px}.recap{padding:42px 0 52px}.recap-steps{grid-template-columns:1fr;gap:13px}.recap-steps div{display:flex;gap:16px;align-items:baseline}.recap-steps p{margin:0}.site-footer{flex-direction:column;gap:7px}}
@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important;transition:none!important}}
.home-link{font-size:14px;font-weight:700;color:#176b56;text-decoration:underline;text-underline-offset:4px;white-space:nowrap}
@media(max-width:560px){.home-link{font-size:13px}}
