:root{--sand:#e2ddd1;--ink:#252722;--muted:#797a70;--accent:#9e5638;--line:#a9a899;--ease:cubic-bezier(.2,.8,.2,1)}*{box-sizing:border-box}body{margin:0;background:var(--sand);color:var(--ink);font-family:"Segoe UI","Microsoft YaHei",sans-serif;display:flex;min-height:100vh}button,input{font:inherit}button{cursor:pointer;touch-action:manipulation;-webkit-tap-highlight-color:transparent}button:focus-visible{outline:3px solid var(--accent);outline-offset:5px}button:disabled{cursor:default}.landscape{position:fixed;inset:0 auto 0 0;width:38%;overflow:hidden;background:#807968}.dune{position:absolute;inset:-3%;background:url(desert-empty.png) 18% center/cover no-repeat;animation:drift 38s ease-in-out infinite alternate;filter:saturate(.72)}.landscape:after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,transparent 70%,#e2ddd130),linear-gradient(0deg,#1c211d80,transparent 40%,#20251b15)}.haze{position:absolute;inset:25% -40% -15%;background:radial-gradient(ellipse,#e9deba24,transparent 65%);animation:haze 19s ease-in-out infinite alternate}.dust{position:absolute;inset:0;background-image:radial-gradient(#fff5 1px,transparent 1.8px),radial-gradient(#eee5 1px,transparent 1.8px);background-size:113px 137px,191px 211px;opacity:.2;animation:sand 27s linear infinite}.identity,.land-caption{position:absolute;z-index:1;color:#edeade;left:10%;right:8%}.identity{top:5%;font-size:20px;letter-spacing:5px}.identity span{display:block;font-size:9px;letter-spacing:2px;margin-top:12px;opacity:.6}.land-caption{bottom:7%;font-size:17px;letter-spacing:2px;line-height:2}.land-caption small{display:block;font-size:9px;letter-spacing:2px;opacity:.6;margin-top:12px}.line{display:block;width:35px;border-top:1px solid #e8e4d0;margin-bottom:20px}main{position:relative;margin-left:38%;width:62%;padding:34px clamp(28px,5vw,85px) 22px}header,footer{display:flex;justify-content:space-between;align-items:center;gap:16px;color:var(--muted);font-size:12px}.preview-label{letter-spacing:1.5px;display:flex;align-items:center;gap:8px}.preview-label i{width:5px;height:5px;border-radius:50%;background:var(--accent)}.motion-toggle{font-size:11px;display:flex;align-items:center;gap:5px;cursor:pointer}.motion-toggle input{accent-color:var(--accent);width:15px;height:15px}.lesson{max-width:640px;margin:44px auto 20px;animation:arrive .75s var(--ease) both}.eyebrow{font-size:12px;letter-spacing:2px;color:#62665d;display:flex;gap:14px;align-items:center}.eyebrow>span:not(.demo-label){opacity:.4}.demo-label{font-size:10px;letter-spacing:1px;border:1px solid #bcbbae;padding:3px 7px}h1{font-size:clamp(30px,3.5vw,50px);font-weight:500;line-height:1.35;letter-spacing:2px;margin:18px 0 9px}h1 span{color:#4e5147}.intro{color:var(--muted);font-size:13px;margin:0 0 22px}.audio-row{display:flex;align-items:center;gap:23px;margin:18px 0 30px}.play{position:relative;border:0;border-radius:50%;width:70px;height:70px;background:var(--ink);display:grid;place-items:center;color:var(--sand);transition:transform .22s var(--ease),background .25s}.play:hover{background:#393d32;transform:translateY(-2px)}.play:active{transform:scale(.93)}.play svg{width:29px;height:29px;fill:currentColor}.waves{fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round}.ring{position:absolute;inset:-8px;border:1px solid var(--accent);border-radius:50%;opacity:0}.playing .ring{animation:pulse 1.35s ease-out infinite}.audio-label{font-size:13px;margin-bottom:8px;display:flex;align-items:center;gap:12px}.text-button{background:none;border:0;padding:6px 0;color:#64695b;font-size:12px;transition:color .2s,transform .2s}.text-button:hover{color:var(--accent)}.text-button:active{transform:translateY(1px)}.dot{color:#a8a99b;padding:0 10px}.waveform{display:flex;gap:3px;height:15px;align-items:center;opacity:.3}.waveform i{height:3px;width:2px;background:var(--accent);border-radius:2px}.playing .waveform{opacity:1}.playing .waveform i{animation:wave .6s ease-in-out infinite alternate}.playing .waveform i:nth-child(2){animation-delay:-.2s}.playing .waveform i:nth-child(3){animation-delay:-.4s}.playing .waveform i:nth-child(4){animation-delay:-.1s}.exercise-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:15px;gap:8px}.meaning-label{display:block;font-size:10px;color:var(--muted);margin-bottom:4px;letter-spacing:2px}.exercise-head strong{font-weight:500;font-size:20px}.modes{display:flex;border-bottom:1px solid #b9b9aa;gap:16px}.modes button{border:0;background:none;font-size:11px;color:var(--muted);padding:9px 1px;border-bottom:2px solid transparent;transform:translateY(1px)}.modes button[aria-pressed=true]{color:var(--ink);border-color:var(--accent)}.slots{display:flex;gap:12px}.slot{position:relative;flex:1;min-width:0;max-width:114px;height:104px;border:1px solid #9e9f8f;border-radius:3px;background:#efede430;font-size:49px;font-weight:400;color:var(--ink);transition:border-color .2s,background .2s,transform .25s,box-shadow .25s}.slot.selected{border-color:var(--accent);background:#f2eee490;box-shadow:0 4px 20px #5f58360a;transform:translateY(-3px)}.slot.blank.selected:after{content:"";position:absolute;width:1px;height:42%;left:50%;top:29%;background:var(--accent);animation:cursor 1.4s steps(1) infinite}.slot.locked{color:#6a6d60;background:transparent}.slot.entered{animation:letter-in .35s var(--ease)}.slot.wrong{border-color:#9a4935;background:#b9674a13}.slot.correct{border-color:#6b7a57;background:#7f916513;animation:settle .45s var(--ease) both}.under-slots{display:flex;justify-content:space-between;margin-top:10px;max-width:492px}.feedback{min-height:42px;font-size:12px;line-height:1.8;color:var(--muted);padding-top:9px}.feedback.error{color:#964b36}.feedback.good{color:#536345}.keys{display:grid;grid-template-columns:repeat(6,1fr);gap:9px;margin:9px 0 20px;max-width:570px}.keys.full{grid-template-columns:repeat(9,1fr);gap:6px}.key{height:57px;border:1px solid #afb0a0;border-radius:3px;font-size:26px;background:#eeeae13b;transition:transform .2s,background .2s,box-shadow .2s}.key:hover{transform:translateY(-3px);background:#f2eee6;box-shadow:0 6px 12px #4b4c3910}.key:active{transform:translateY(1px) scale(.95)}.keys.full .key{height:44px;font-size:20px}.check{width:100%;max-width:570px;display:flex;justify-content:space-between;align-items:center;background:var(--ink);color:#e7e3d7;border:0;border-radius:3px;padding:18px 24px;font-size:15px;letter-spacing:2px;transition:background .25s,transform .2s}.check:hover{background:#3b4033}.check:active{transform:scale(.99)}.check .arrow{font-size:22px;transition:transform .3s}.check:hover .arrow{transform:translate(3px,-3px)}.check.done{background:#505b44}.progress-note{display:flex;align-items:center;gap:15px;margin-top:20px;color:#898b7e;font-size:10px}.trail{display:flex;align-items:center;gap:4px}.trail i{width:5px;height:5px;border-radius:50%;border:1px solid #9fa18e;transition:background .5s}.trail i.lit{background:#9e5638;border-color:#9e5638}.trail b{height:1px;width:21px;background:#b8baa9}.success-detail{margin:16px 0 0;font-size:22px;animation:arrive .4s var(--ease)}.success-detail span{font-size:16px;margin-left:10px;color:#696e5c}.success-detail small{display:block;font-size:12px;margin-top:9px;color:#646b57}footer{max-width:640px;margin:30px auto 0;font-size:10px;padding-top:15px;border-top:1px solid #c4c4b7}footer .text-button{font-size:10px}.fly-letter{position:fixed;pointer-events:none;z-index:50;display:grid;place-items:center;font-size:36px;color:var(--accent)}body.reduced *,body.reduced *:before,body.reduced *:after{animation:none!important;transition:none!important;scroll-behavior:auto!important}body.reduced .slot.selected{transform:none}body.reduced .key:hover{transform:none}
@keyframes drift{to{transform:scale(1.025) translate(-1%,.6%)}}@keyframes haze{to{transform:translate(10%,-2%);opacity:.4}}@keyframes sand{to{background-position:180px -50px,100px -20px}}@keyframes arrive{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}@keyframes pulse{0%{opacity:.5;transform:scale(.97)}100%{opacity:0;transform:scale(1.22)}}@keyframes wave{to{height:14px}}@keyframes cursor{50%{opacity:0}}@keyframes letter-in{0%{transform:translateY(-9px);opacity:.3}70%{transform:translateY(1px)}100%{transform:translateY(0);opacity:1}}@keyframes settle{50%{transform:translateY(-4px)}100%{transform:translateY(0)}}
@media(max-width:1050px){.landscape{width:30%}main{margin-left:30%;width:70%;padding:26px 38px 18px}.lesson{margin-top:30px}h1{font-size:36px}.slot{height:88px;font-size:42px}.audio-row{margin-bottom:24px}.land-caption{font-size:13px}.identity{font-size:16px;letter-spacing:3px}}
@media(max-width:680px){body{display:block}.landscape{position:relative;width:100%;height:190px}.dune{background-position:20% 38%}.identity{top:22px;left:25px;font-size:15px}.land-caption{bottom:16px;left:auto;right:24px;font-size:11px}.land-caption .line,.land-caption small{display:none}main{margin:0;width:100%;padding:22px 24px}.lesson{margin-top:28px}h1{font-size:33px;line-height:1.3}.audio-row{margin-top:20px;margin-bottom:24px}.play{width:64px;height:64px}.slot{height:78px;font-size:38px}.slots{gap:9px}.key{height:50px}.exercise-head strong{font-size:18px}.modes{gap:11px}.keys.full{grid-template-columns:repeat(7,1fr)}footer{margin-top:24px}.landscape:after{background:linear-gradient(0deg,#21251c70,transparent 75%)}}
@media(prefers-reduced-motion:reduce){body:not(.motion-override) *,body:not(.motion-override) *:before,body:not(.motion-override) *:after{animation:none!important;transition:none!important}}
[hidden]{display:none!important}
#meaning.revealed{display:inline-block;animation:meaning-reveal .8s ease-out both}
.playing .ring{border-width:2px;animation:pulse .8s ease-out infinite}
.playing .play{box-shadow:0 0 0 9px #9e56381c}
.waveform{height:24px;gap:4px}.waveform i{width:3px}.playing .waveform i{animation:wave .35s ease-in-out infinite alternate}
.slot.entered{animation:letter-in .65s var(--ease)}.slot.correct{animation:settle .75s var(--ease) both}
.dune{animation-duration:17s}.haze{animation-duration:11s}
@keyframes drift{to{transform:scale(1.07) translate(-2%,1.2%)}}
@keyframes pulse{from{opacity:.8;transform:scale(.95)}to{opacity:0;transform:scale(1.65)}}
@keyframes wave{to{height:23px}}
@keyframes letter-in{0%,45%{opacity:0;transform:translateY(-12px) scale(.88)}75%{opacity:1;transform:translateY(5px) scale(1.08)}100%{opacity:1;transform:translateY(0) scale(1)}}
@keyframes settle{45%{transform:translateY(-13px) scale(1.06);background:#899c6a44}100%{transform:translateY(0) scale(1)}}
@keyframes meaning-reveal{from{opacity:0;transform:translateY(8px);filter:blur(5px)}to{opacity:1;transform:translateY(0);filter:blur(0)}}
/* User-approved direction: familiar Chinese screen fonts and readable sizes. */
body{font-family:"Microsoft YaHei","PingFang SC","Noto Sans CJK SC",sans-serif;font-size:15px}
h1{font-size:36px;font-weight:600;line-height:1.45;letter-spacing:0;margin-bottom:22px}
.identity{font-size:20px;font-weight:500;letter-spacing:0}
.preview-label,.eyebrow,.demo-label,.meaning-label{letter-spacing:0}
.preview-label{font-size:13px}.eyebrow{font-size:14px}.demo-label{font-size:12px}
.motion-toggle{font-size:13px}.audio-label{font-size:15px}.text-button{font-size:14px}
.meaning-label{font-size:13px}.exercise-head strong{font-size:22px;font-weight:500}
.modes button{font-size:13px}.feedback{font-size:14px;min-height:48px}
.check{font-size:16px;font-weight:500;letter-spacing:0}.progress-note{font-size:12px}
.slot,.key,.success-detail{font-family:Arial,Helvetica,sans-serif}
.success-detail small{font-family:"Microsoft YaHei","PingFang SC",sans-serif;font-size:14px}
footer,footer .text-button{font-size:12px}
@media(max-width:680px){h1{font-size:29px}.motion-toggle,.preview-label{font-size:12px}.modes button{font-size:12px}.feedback{font-size:13px}footer,footer .text-button{font-size:11px}}

/* Five-word lesson: touch targets, stage markers and real session results. */
main{min-width:0}.lesson{margin-top:30px}h1{font-size:32px;margin:16px 0}.audio-row{margin-bottom:24px}.stages{display:flex;gap:12px;flex-wrap:wrap;font-size:12px;color:#797a70}.stage{padding:8px 0;border-bottom:2px solid transparent}.stage.active{color:#252722;border-color:#9e5638}.exercise-head{align-items:flex-end}.slot{max-width:114px;height:90px;font-size:42px}.slot.correct{color:#252722}.keys.full{grid-template-columns:repeat(7,1fr)}.keys.full .key{min-height:44px}.text-button{min-height:44px}button:disabled{cursor:default}.key:disabled{opacity:.55;transform:none}.success-detail .answer-word{font-weight:500}.success-detail .answer-word span{font-size:24px;margin:0;color:inherit}.success-detail .answer-word .focus-sound{color:#8c492e;border-bottom:2px solid #a75d3d}.success-detail small{line-height:1.65}.feedback{min-height:55px}.result-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin:28px 0}.result-stats strong{display:block;font:500 28px Arial;color:#525d42}.result-stats span{display:block;font-size:12px;color:#65695c;line-height:1.7;margin-top:9px}.result-label{font-size:13px;color:#64695b;margin:24px 0 6px}.word-list{font:22px/1.8 Arial,"Microsoft YaHei",sans-serif;margin:0}.summary details{margin-top:24px}.summary summary{cursor:pointer;min-height:44px;padding:10px 0;font-size:14px}.table-wrap{overflow:auto}table{width:100%;border-collapse:collapse;font-size:12px}th,td{text-align:left;padding:10px 6px;border-bottom:1px solid #c4c4b7}th{font-weight:500}.summary-note{font-size:13px;line-height:1.8;color:#64695b;margin:22px 0}.summary-actions{display:flex;justify-content:space-between;margin-top:12px}footer{gap:8px;line-height:1.6}footer>span{max-width:75%}
@media(max-width:680px){.landscape{height:130px}main{padding:20px}.lesson{margin-top:22px}h1{font-size:28px}.slot{height:72px;font-size:34px}.stages{gap:9px;font-size:11px}.exercise-head{gap:12px}.audio-row{margin:16px 0 18px}.keys.full{grid-template-columns:repeat(6,1fr)}.feedback{font-size:13px}.result-stats strong{font-size:24px}.result-stats{gap:9px}.mouse-reward{height:150px;bottom:0}.mouse-hop{width:135px;height:135px}footer,footer .text-button{font-size:11px}}
@media(min-width:681px) and (max-width:1050px){main{padding-left:26px;padding-right:26px}.stages{font-size:11px;gap:8px}.slot{height:76px}.lesson{margin-top:24px}}

/* Six-pose gait plus perspective path. The runner is confined to the landscape. */
.check.done{background:#46583c;box-shadow:0 4px 16px #38462d24;font-size:18px;font-weight:600;min-height:60px}
.check.done .arrow{display:grid;place-items:center;width:34px;height:34px;border:1px solid #dfe8d480;border-radius:50%;font-size:25px;line-height:1}
.check:hover .arrow{transform:translateX(4px)}
/* Native keyboard input; decorative cells never expose answer letters. */
.input-label{display:block;font-size:13px;color:#666b60;margin:22px 0 10px}
.typing-area{position:relative;max-width:570px}.typing-area .slots{margin:0;pointer-events:none;display:flex}.typing-area .slot{display:grid;place-items:center;flex:1;min-width:0}
#wordInput{position:absolute;inset:0;width:100%;height:100%;border:0;outline:0;background:transparent;color:transparent;caret-color:transparent;font-size:36px;letter-spacing:36px;padding:0;opacity:1;-webkit-text-fill-color:transparent;touch-action:manipulation;border-radius:3px}
#wordInput::selection{background:#9e563822}#wordInput:focus-visible{outline:2px solid #9e563855;outline-offset:4px}.typing-area:focus-within .slot.selected{border-color:#9e5638}
.feedback{min-height:52px;margin-bottom:16px}
/* The mouse jumps toward the viewer and throws painterly flowers and loose petals. */
.celebration{position:fixed;inset:0;pointer-events:none;z-index:40;overflow:hidden}
.celebrant{position:absolute;width:clamp(220px,27vw,340px);aspect-ratio:1;left:max(0px,calc(19vw - 155px));bottom:15vh;transform-origin:65% 95%}
.celebration-mouse{position:absolute;inset:0;background:url(mouse-celebrate-sheet.png) 0 0/300% 200% no-repeat;filter:saturate(.78);transform-origin:65% 85%}
.celebration-shadow{position:absolute;left:43%;bottom:5%;width:46%;height:5%;border-radius:50%;background:#28231555;filter:blur(8px)}
.active .celebrant{animation:jump-forward 4.8s cubic-bezier(.2,.7,.3,1) both}
.active .celebration-mouse{animation:celebrate-poses 4.8s steps(1,end) both}
.congratulation{position:absolute;top:100%;left:25%;width:70%;text-align:center;color:#f6ead0;font-size:26px;font-weight:600;text-shadow:0 2px 12px #3b2e1b,0 1px 3px #30291a;letter-spacing:1px}
.active .congratulation{animation:congratulate 4.8s ease both}
.flower-burst{position:absolute;inset:0;z-index:3}
.reward-flower{position:absolute;opacity:0;transform-origin:center;will-change:transform,opacity}
.flower-art{display:block;width:100%;height:100%;background:url(flowers-painted-sheet.png) 0 0/300% 200% no-repeat;filter:saturate(.72);transform-origin:center;animation:petal-flutter var(--flutter) ease-in-out infinite alternate}
@keyframes petal-flutter{from{transform:rotate(var(--tilt)) scaleX(.8)}to{transform:rotate(calc(var(--tilt) + 23deg)) scaleX(1)}}
@keyframes jump-forward{0%{opacity:0;transform:translate(-25px,-22vh) scale(.15)}8%{opacity:1;transform:translate(-20px,-19vh) scale(.25)}23%{transform:translate(0,-50px) scale(1.06)}34%{transform:translate(0,5px) scale(1.03,.97)}42%,86%{opacity:1;transform:translate(0,0) scale(1)}100%{opacity:0;transform:translate(0,35px) scale(.94)}}
@keyframes celebrate-poses{0%{background-position:0 0}9%{background-position:50% 0}20%{background-position:100% 0}30%{background-position:0 100%}45%{background-position:100% 0}55%{background-position:0 100%}65%{background-position:50% 100%}74%,100%{background-position:100% 100%}}
@keyframes congratulate{0%,22%{opacity:0;transform:translateY(10px) scale(.9)}32%,87%{opacity:1;transform:translateY(0) scale(1)}100%{opacity:0}}
body.reduced .celebration-mouse{background-position:100% 100%}body.reduced .flower-burst{display:none}body.reduced .celebrant{transform:none}
@media(min-width:681px) and (max-width:1050px){.celebrant{width:240px;left:calc(15vw - 120px);bottom:15vh}.congratulation{font-size:23px}}
@media(max-width:680px){.celebrant{width:155px;left:auto;right:8px;bottom:auto;top:45px}.congratulation{font-size:19px;top:94%;color:#fff0d2}@keyframes jump-forward{0%{opacity:0;transform:translate(-70px,-40px) scale(.2)}23%{opacity:1;transform:translate(0,-18px) scale(1.06)}34%{transform:translate(0,3px) scale(1.03,.97)}42%,86%{opacity:1;transform:none}100%{opacity:0;transform:translateY(15px) scale(.95)}}}
@media(min-width:1051px){.celebration{width:38%;right:auto}}@media(min-width:681px) and (max-width:1050px){.celebration{width:30%;right:auto}}
