:root{--paper:#f6f1e7;--surface:#fbf8f2;--surface-2:#f0e9dc;--line:#e2d8c5;--ink:#2f2d28;--ink-soft:#645f55;--ink-faint:#9a9385;--sage:#6f8b6a;--sage-deep:#4f6a4b;--sage-soft:#dde7d6;--sage-wash:#eef2e9;--clay:#b9734f;--gold:#c9a35b;--danger:#a4574b;--danger-soft:#f6e4df;--key:#a8c3cf;--key-edge:#8eaebd;--radius:12px;--shadow:0 8px 28px rgba(60,48,30,.14);--shadow-sm:0 2px 8px rgba(60,48,30,.1);--serif:Georgia,"Iowan Old Style","Palatino Linotype",serif;--mono:ui-monospace,"SF Mono",Menlo,Consolas,"Courier New",monospace}*{box-sizing:border-box}html,body{height:100%}body{margin:0;font:15px/1.45 Inter,ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;background:var(--paper);color:var(--ink);display:flex;overflow:hidden;-webkit-font-smoothing:antialiased}button{font:inherit}:focus-visible{outline:2px solid var(--sage);outline-offset:2px}#sidebar{width:330px;flex-shrink:0;height:100vh;background:var(--surface);padding:18px;border-right:1px solid var(--line);display:flex;flex-direction:column;gap:10px;overflow:hidden;transition:width .2s ease,padding .2s ease}body.no-sidebar #sidebar{width:0;padding:0;border-right:none}body.no-sidebar #sidebar>*{display:none}#sidebar h1{font-family:var(--serif);font-weight:400;font-size:22px;letter-spacing:.2px;margin:0;color:var(--sage-deep)}#sidebar .sub{font-size:12px;color:var(--ink-faint)}#lessonList{flex:1;min-height:0;overflow-y:auto;display:flex;flex-direction:column;gap:5px;padding-right:4px}.lesson-btn{text-align:left;padding:8px 12px;border-radius:10px;border:1px solid transparent;background:var(--surface-2);color:var(--ink);cursor:pointer;font-size:14px;display:flex;justify-content:space-between;align-items:center;gap:8px;transition:transform .1s ease,background .15s ease,border-color .15s ease}.lesson-btn:hover{transform:translate(2px);border-color:var(--line)}.lesson-btn.done{background:var(--sage-wash)}.lesson-btn.active{border-color:var(--sage);background:var(--surface);box-shadow:var(--shadow-sm)}.lesson-btn .meta{display:block;font-size:11px;color:var(--ink-faint);margin-top:2px}.lesson-btn .stars{display:block;font-size:12px;color:var(--gold);margin-top:2px;letter-spacing:1px}.lesson-btn .badge{font-size:14px;color:var(--sage);font-weight:700;flex-shrink:0}#layoutBox{border-top:1px solid var(--line);padding-top:10px;font-size:12px;color:var(--ink-faint)}#layoutBox .label{margin-bottom:6px}.seg{display:flex;gap:2px;flex-wrap:wrap;background:var(--surface-2);border-radius:10px;padding:3px}.seg button{flex:1;padding:6px 10px;font-size:12.5px;font-weight:500;border-radius:8px;border:0;background:transparent;color:var(--ink-soft);cursor:pointer;white-space:nowrap}.seg button:hover:not(:disabled):not(.on){color:var(--ink);background:#ffffff73}.seg button.on{background:var(--surface);color:var(--ink);box-shadow:var(--shadow-sm)}.seg button:disabled{opacity:.5;cursor:not-allowed}#layoutNote{margin-top:4px;font-size:11px;color:var(--danger);min-height:14px}#resetBtn{margin-top:6px;width:100%;padding:7px;border-radius:9px;border:1px solid var(--line);background:transparent;color:var(--danger);cursor:pointer;font-size:12px;font-weight:500}#resetBtn:hover{background:var(--danger-soft);border-color:#e3c4bc}#main{flex:1;height:100vh;overflow-y:auto;padding:20px 36px 40px;display:flex;flex-direction:column;align-items:center;gap:18px;min-width:0}#topbar{width:100%;max-width:820px;display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:10px}.topleft{display:flex;gap:8px;align-items:center;flex-wrap:wrap}#toggleSidebar,#toggleKeyboard{padding:7px 12px;border-radius:9px;border:1px solid var(--line);background:var(--surface);color:var(--ink);cursor:pointer;font-size:13px;font-weight:500;transition:background .15s}#toggleSidebar:hover,#toggleKeyboard:hover{background:var(--surface-2)}#nav button{flex:none;padding:6px 12px}#tabHint{font-size:12px;color:var(--ink-faint)}#tabHint kbd{background:var(--surface);padding:2px 6px;border-radius:5px;border:1px solid var(--line);font-family:inherit;color:var(--ink-soft)}.view{display:none;flex-direction:column;align-items:center;gap:18px;width:100%}.view.show{display:flex}#lessonTitle{font-family:var(--serif);font-weight:400;font-size:27px;letter-spacing:.2px;color:var(--sage-deep);margin:0;display:flex;align-items:center;gap:10px;flex-wrap:wrap;justify-content:center;text-align:center}.completed-tag{font-family:Inter,ui-sans-serif,system-ui,sans-serif;font-size:12px;font-weight:500;background:var(--sage-soft);color:var(--sage-deep);padding:3px 10px;border-radius:999px}#lessonDesc{font-size:14px;color:var(--ink-soft);margin-top:-10px;text-align:center;max-width:700px}#goal{font-size:13px;background:var(--surface);border:1px solid var(--line);padding:5px 14px;border-radius:999px;margin-top:-6px;color:var(--ink-soft)}.btnrow{display:flex;gap:10px;flex-wrap:wrap;justify-content:center}#startBtn,#stopBtn,#pauseBtn{padding:10px 22px;font-size:15px;font-weight:600;border-radius:10px;cursor:pointer;transition:background .15s,color .15s}#startBtn{border:1px solid var(--sage);background:var(--sage);color:#fff;box-shadow:var(--shadow-sm)}#startBtn:hover{background:var(--sage-deep);border-color:var(--sage-deep)}#stopBtn{border:1px solid var(--danger);background:var(--surface);color:var(--danger)}#stopBtn:hover{background:var(--danger-soft)}#pauseBtn{border:1px solid var(--sage);background:var(--surface);color:var(--sage-deep)}#pauseBtn:hover{background:var(--sage-wash)}.navbtn{padding:10px 18px;font-size:14px;font-weight:500;border-radius:10px;border:1px solid var(--line);background:var(--surface);color:var(--ink);cursor:pointer;transition:background .15s}.navbtn:hover:not(:disabled){background:var(--surface-2)}.navbtn:disabled{opacity:.4;cursor:not-allowed}#modeSeg{width:420px;max-width:100%}#stats{display:flex;gap:14px;font-size:13px;color:var(--ink-soft);flex-wrap:wrap;justify-content:center}#stats .stat{background:var(--surface);border:1px solid var(--line);padding:8px 16px;border-radius:var(--radius);text-align:center;min-width:96px;box-shadow:var(--shadow-sm)}#stats .stat .val{font-size:21px;font-weight:600;color:var(--sage-deep)}#practiceWrap{position:relative;width:100%;max-width:820px}#textBox{width:100%;height:170px;overflow-y:hidden;position:relative;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:22px 26px;font-size:21px;line-height:1.8;letter-spacing:1px;box-shadow:var(--shadow-sm);font-family:var(--mono);white-space:normal}.char-correct{color:var(--sage)}.char-incorrect{color:#fff;background:var(--danger);border-radius:3px}.char-current{background:#fff8e7;outline:2px solid var(--sage);border-radius:3px;animation:pulse 1s infinite}.char-pending{color:#857f72}@keyframes pulse{0%{outline-color:var(--sage)}50%{outline-color:var(--sage-deep)}to{outline-color:var(--sage)}}#arena{width:100%;height:340px;position:relative;overflow:hidden;border-radius:var(--radius);border:1px solid var(--line);background:linear-gradient(var(--surface),#ece4d4);box-shadow:var(--shadow-sm);display:none;transition:box-shadow .15s}#arena.flash{box-shadow:inset 0 0 0 4px var(--danger)}#arenaHint{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;color:var(--ink-soft);text-align:center;padding:24px;font-size:15px}.balloon{position:absolute;left:0;top:0;padding:8px 14px 10px;border-radius:50% 50% 46% 46%/55% 55% 45% 45%;font-family:var(--mono);font-size:16px;white-space:nowrap;color:var(--ink);border:2px solid rgba(47,45,40,.2);box-shadow:var(--shadow-sm);will-change:transform;transition:opacity .18s,scale .18s}.balloon:after{content:"";position:absolute;left:50%;bottom:-12px;width:2px;height:12px;background:var(--ink-faint)}.balloon.b1{background:#e3b7b0}.balloon.b2{background:#e8cba3}.balloon.b3{background:#c9d8a8}.balloon.b4{background:#a8c3cf}.balloon.b5{background:#cdb0cf}.balloon .typed{color:var(--sage-deep);font-weight:700;background:#fff8e7;border-radius:4px}.balloon.pop{opacity:0;scale:1.4}#raceTrack{width:100%;display:none;background:linear-gradient(var(--sage-wash),#e1e9d9);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow-sm);padding:10px 14px;margin-bottom:4px}.race-labels{display:flex;justify-content:space-between;font-size:12px;color:var(--ink-soft);font-weight:600;padding:0 4px 6px}.lane{position:relative;height:34px;background:#ffffff80;border-radius:8px;margin-bottom:6px;overflow:hidden}.lane .lane-label{position:absolute;left:6px;top:50%;transform:translateY(-50%);font-size:11px;color:var(--ink-soft);z-index:2}.lane .car{position:absolute;top:50%;transform:translateY(-50%);font-size:20px;left:0;transition:left .08s linear;z-index:1}.pause-overlay{position:absolute;inset:0;background:#f6f1e7ed;display:none;flex-direction:column;align-items:center;justify-content:center;border-radius:var(--radius);font-family:var(--serif);font-size:22px;color:var(--sage-deep);gap:8px;z-index:5;cursor:pointer}.pause-overlay.show{display:flex}.pause-overlay .small{font-family:Inter,ui-sans-serif,system-ui,sans-serif;font-size:13px;color:var(--ink-soft)}#resultBanner{max-width:820px;width:100%;padding:14px 20px;border-radius:var(--radius);font-size:15px;display:none;line-height:1.5}#resultBanner.pass{background:var(--sage-wash);border:1px solid var(--sage);color:var(--sage-deep)}#resultBanner.fail{background:var(--danger-soft);border:1px solid #d9b2a9;color:var(--danger)}#keyboard{display:flex;flex-direction:column;gap:8px;margin-top:6px;user-select:none}.kb-row{display:flex;gap:7px;justify-content:center}.key{min-width:46px;height:46px;border-radius:8px;display:flex;align-items:center;justify-content:center;font-size:14px;font-weight:600;background:var(--key);border:1px solid var(--key-edge);box-shadow:0 2px 0 var(--key-edge);color:var(--ink);transition:transform .08s ease}.key.shift{min-width:80px;font-size:12px}.key.space{min-width:320px}.key.next{transform:translateY(-4px) scale(1.08);box-shadow:0 6px 10px #2f2d2833;outline:3px solid var(--sage-deep);animation:bounce .6s infinite alternate}@keyframes bounce{0%{transform:translateY(-4px) scale(1.08)}to{transform:translateY(-7px) scale(1.1)}}.key.disabled{opacity:.3}.tbl-wrap{font-size:12px;color:var(--ink-soft);max-width:820px;width:100%}.tbl-wrap table{width:100%;border-collapse:collapse}.tbl-wrap th{font-weight:600;color:var(--ink-faint)}.tbl-wrap th,.tbl-wrap td{padding:5px 8px;text-align:center;border-bottom:1px solid var(--line)}#achSummary{background:var(--surface);border:1px solid var(--line);padding:12px 18px;border-radius:var(--radius);max-width:820px;width:100%;text-align:center;font-size:15px;box-shadow:var(--shadow-sm)}.ach-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:12px;max-width:820px;width:100%}.ach{background:var(--surface);border-radius:var(--radius);padding:14px;border:1px solid var(--line)}.ach.unlocked{border-color:var(--sage);background:var(--sage-wash)}.ach.locked{opacity:.5}.ach .icon{font-size:26px}.ach .name{font-weight:600;margin-top:4px}.ach .desc{font-size:12px;color:var(--ink-soft);margin-top:2px}.ach .date{font-size:11px;color:var(--sage-deep);margin-top:6px}.cards{display:flex;gap:12px;flex-wrap:wrap;justify-content:center;max-width:820px;width:100%}.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:10px 16px;text-align:center;min-width:130px;box-shadow:var(--shadow-sm)}.card .v{font-size:21px;font-weight:600;color:var(--sage-deep)}.card .l{font-size:12px;color:var(--ink-soft)}#wpmChart{width:100%;max-width:820px;height:280px;border-radius:var(--radius);border:1px solid var(--line);box-shadow:var(--shadow-sm)}
