
:root{--ink:#242a38;--muted:#737b87;--purple:#7255cb;--pale:#f0ebfc;--green:#237a5b;--line:#e5e7eb;--textsize:21px}*{box-sizing:border-box}body{margin:0;background:#f7f8fa;color:var(--ink);font-family:system-ui,-apple-system,"Segoe UI",sans-serif;font-size:14px}button,input,textarea,select{font:inherit}button,.file-button{cursor:pointer}button{border:0;border-radius:9px;padding:11px 15px;font-weight:600;transition:background .15s}button:focus-visible,a:focus-visible,select:focus-visible{outline:3px solid #bca9ed;outline-offset:3px}button:disabled{cursor:default;opacity:.45}header{height:94px;background:white;border-bottom:1px solid var(--line);display:flex;align-items:center;gap:32px;padding:0 max(32px,calc((100vw - 1340px)/2))}.brand{display:flex;align-items:center;gap:12px;text-decoration:none;color:var(--ink);font-size:21px;font-weight:750;white-space:nowrap}.logo{display:block;background:var(--purple);color:white;padding:11px 9px;border-radius:13px;font-size:21px;letter-spacing:-2px}.logo span{color:#d8f2a8}.brand small{display:block;font-size:9px;letter-spacing:1.8px;color:var(--muted);font-weight:600;margin-top:3px}.course{font-size:12px;color:var(--muted);line-height:1.6;border-left:1px solid var(--line);padding-left:28px}header>button{margin-left:auto}.outline{background:white;border:1px solid #d9dce4;color:var(--ink)}.outline:hover{background:#f6f3fe}.primary{background:var(--purple);color:white}.primary:hover{background:#6043b7}.quiet{background:transparent;color:#667080}.quiet:hover{background:#f0edf6}main{max-width:1404px;padding:38px 32px 0;margin:auto}.intro{display:flex;justify-content:space-between;align-items:center;margin-bottom:29px}.eyebrow{font-size:10px;letter-spacing:1.7px;font-weight:750;color:var(--purple)}h1{font-size:32px;letter-spacing:-1.2px;margin:8px 0 7px;line-height:1.2}.intro p{color:var(--muted);margin:0}.mode{font-size:12px;color:var(--green);background:#eaf5ee;padding:9px 13px;border-radius:30px;white-space:nowrap}.mode i{display:inline-block;width:6px;height:6px;border-radius:50%;background:#3c956e;margin-right:6px}.toolbar{display:flex;align-items:center;gap:24px;background:white;border:1px solid var(--line);border-radius:14px;padding:18px 20px;margin-bottom:23px}.toolbar label{width:220px;font-size:11px;font-weight:600;color:#697181}.toolbar input{margin-top:6px;padding:9px 11px;background:#f8f9fb}.lesson-info{border-left:1px solid var(--line);padding-left:24px;flex:1}.lesson-info small{display:block;font-size:9px;letter-spacing:1.4px;color:var(--muted);margin-bottom:8px}.lesson-info strong{font-size:13px}.toolbar-actions{display:flex;gap:8px}.workspace{display:grid;grid-template-columns:minmax(0,1fr) 272px;gap:23px}.practice{min-width:0;display:flex;flex-direction:column;gap:18px}.card{background:white;border:1px solid var(--line);border-radius:14px;overflow:hidden}.section-head{display:flex;align-items:center;justify-content:space-between;padding:16px 22px;gap:10px}h2{margin:0;font-size:14px;font-weight:650}.step{font-size:10px;color:#8c7ab6;display:inline-grid;place-items:center;background:#f2eff8;width:25px;height:25px;border-radius:7px;margin-right:9px}.font-tools{display:flex;gap:4px}.font-tools button{background:#f7f8fa;padding:5px 8px;font-size:12px;color:#667080}#reference{font-size:var(--textsize);line-height:1.9;height:222px;overflow:auto;scroll-behavior:smooth;padding:6px 26px 25px;white-space:pre-wrap;overflow-wrap:anywhere;color:#5b6270;scrollbar-width:thin}#reference .correct{color:#247a57;background:#e9f4eb}#reference .current{color:#50329d;background:#e5d9ff;border-bottom:2px solid var(--purple);border-radius:2px}#reference .wrong{color:#b8283c;background:#ffe0e3;border-color:#c83b4d}.reference-footer{display:flex;justify-content:space-between;border-top:1px solid #f1f2f5;padding:12px 22px;font-size:10px;color:var(--muted)}.dot{display:inline-block;width:6px;height:6px;border-radius:50%;margin-right:5px}.dot.purple{background:#a88ae9;margin-left:15px}.dot.green{background:#68a281}.typing-card:focus-within{border-color:#b9a4e7;box-shadow:0 0 0 3px #eee8fa}.typing-card .section-head{padding-bottom:10px}#saveState{font-size:10px;color:var(--muted)}#typing{display:block;border:0;resize:vertical;min-height:110px;height:125px;max-height:400px;width:100%;padding:6px 25px 15px;outline:none;font-size:var(--textsize);line-height:1.7;color:var(--ink);border-radius:0;background:white}#typing::placeholder{font-size:16px;line-height:1.8;color:#a0a5af}.typing-footer{border-top:1px solid #f1f2f5;display:flex;align-items:center;gap:12px;padding:7px 16px 7px 23px;min-height:46px}#feedback{font-size:11px;color:var(--muted);flex:1}#feedback.error{color:#b52940}.typing-footer button{font-size:11px;padding:7px}.progress-card{padding:24px 22px}.progress-ring{--progress:0%;margin:24px auto;width:152px;height:152px;border-radius:50%;background:conic-gradient(var(--purple) var(--progress),#f0edf7 0);display:grid;place-items:center;transform:rotate(0deg)}.progress-ring>div{width:131px;height:131px;border-radius:50%;background:white;display:grid;place-content:center;text-align:center}.progress-ring strong{font-size:37px;font-weight:650;letter-spacing:-1px}.progress-ring strong span{font-size:19px;margin-left:2px;color:#8d859d}.progress-ring small{font-size:11px;color:var(--muted);margin-top:1px}.metric{display:flex;align-items:center;justify-content:space-between;padding:16px 0;border-bottom:1px solid #f0f1f4}.metric>span{font-size:12px;color:#737b88}.metric strong{font-size:21px;font-variant-numeric:tabular-nums;font-weight:600}.metric small{font-size:11px;color:var(--muted);font-weight:400}.metric-note{font-size:10px;line-height:1.7;color:#9197a1;margin:16px 0 0}.takeaway{margin-top:20px;background:#efebf7;border:1px solid #e5def2;border-radius:14px;padding:22px}.paper-icon{font-size:26px;color:var(--purple)}.takeaway h2{font-size:18px;line-height:1.4;margin:10px 0}.takeaway p{font-size:12px;color:#7b728c;line-height:1.8}.takeaway button{font-size:12px;width:100%;margin-top:7px}.takeaway small{display:block;font-size:10px;color:#8b8099;line-height:1.5;margin-top:11px}.privacy{font-size:10px;color:#959ba5;text-align:center;line-height:1.7;margin:17px 10px}.layout-label{font-size:10px;color:var(--muted)}select{border:1px solid var(--line);border-radius:6px;padding:5px;font-size:10px;background:white;color:#657080;margin-left:4px}#keyboard{padding:2px 22px 13px;max-width:850px;margin:auto}.key-row{display:flex;justify-content:center;gap:5px;margin-bottom:5px}.key{height:32px;border:1px solid #dee1e8;border-bottom:3px solid #d9dce4;background:#fafbfd;flex:1;max-width:50px;display:grid;place-items:center;border-radius:5px;font-size:11px;color:#666f7c;position:relative}.key.home:after{content:'';position:absolute;bottom:4px;width:7px;height:2px;background:#aeb5c0}.key.wide{flex:1.6;max-width:80px;font-size:9px}.key.space{max-width:340px}.key.active{background:var(--purple);border-color:#6344b5;color:white}.key.modifier{background:#dfd4f7;border-color:#b9a3e1;color:#583d8f}.hands-area{display:flex;align-items:center;gap:24px;border-top:1px solid #f1f2f5;padding:13px 24px;background:#fdfdfe}#hands{width:200px;flex-shrink:0;height:95px}#hands svg{width:100%;height:100%}.finger{fill:#eeeaf5;stroke:#d0c6df;stroke-width:1.4}.finger.active{fill:#ac8bea;stroke:#8e66cd}.palm{fill:#f6f3fa;stroke:#d0c6df;stroke-width:1.4}.finger-copy small{font-size:9px;color:#9b91ac;letter-spacing:1.2px}.finger-copy strong{display:block;font-size:12px;margin:6px 0}.finger-copy p{font-size:10px;color:var(--muted);margin:0;line-height:1.5}footer{display:flex;justify-content:space-between;color:#9ba1ab;font-size:10px;margin-top:26px;padding:20px 0;border-top:1px solid var(--line)}footer b{padding:0 7px}input,textarea{border:1px solid #dce0e7;border-radius:8px;padding:11px;width:100%;color:var(--ink);background:white}input:focus,textarea:focus{outline:2px solid #dacaf4;border-color:#ac91dc}dialog{border:1px solid var(--line);border-radius:18px;max-width:670px;width:calc(100% - 32px);padding:27px;color:var(--ink);box-shadow:0 25px 90px #20203030}dialog::backdrop{background:#24223966;backdrop-filter:blur(3px)}.modal-head{display:flex;justify-content:space-between;align-items:center}.modal-head h2{font-size:23px;margin-top:7px}dialog p{font-size:12px;line-height:1.7;color:var(--muted)}dialog label{display:block;font-size:12px;font-weight:600;margin:16px 0 7px}dialog label input,dialog label textarea{display:block;margin-top:7px}.file-button{padding:13px;background:#f4f0fc;border:1px dashed #bfa8e9;border-radius:9px;color:var(--purple)}.file-button input{font-size:11px}.modal-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:22px}.modal-note{background:#f7f8fa;padding:12px;border-radius:8px}#loadError{color:#b52940}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}#printArea{display:none}@media(max-width:1050px){header{padding:0 25px;gap:20px}.workspace{grid-template-columns:minmax(0,1fr) 230px}.toolbar{gap:15px}.toolbar label{width:170px}.toolbar-actions{flex-direction:column}.lesson-info{padding-left:15px}.mode{display:none}.hands-area{gap:10px;padding:12px}#hands{width:150px}.layout-label{font-size:0}.key-row{gap:3px}#keyboard{padding:0 12px 13px}}@media(max-width:760px){header{height:auto;min-height:80px;padding:15px 18px;flex-wrap:wrap;gap:12px}.course{display:none}.brand{font-size:17px}header>button{font-size:11px;padding:9px}main{padding:26px 16px 0}h1{font-size:27px}.intro p{font-size:12px;line-height:1.7}.toolbar{flex-wrap:wrap;padding:15px}.toolbar label{width:100%}.lesson-info{border:0;padding:0;width:100%}.toolbar-actions{width:100%;flex-direction:row}.toolbar-actions .primary{flex:1}.workspace{display:block}aside{margin-top:18px;display:grid;grid-template-columns:1fr 1fr;gap:12px}.progress-card{padding:20px 16px}.takeaway{margin-top:0;padding:18px}.privacy{grid-column:1/-1;margin:0}.progress-ring{width:120px;height:120px;margin:15px auto}.progress-ring>div{width:102px;height:102px}.metric{padding:11px 0}.metric>span{font-size:10px}.metric strong{font-size:16px}.section-head{padding:14px}.section-head h2{font-size:12px}.step{margin-right:4px}.reference-footer{padding:11px 14px;font-size:9px}#reference{padding:4px 17px 20px;height:220px}#typing{padding:5px 17px 15px}.typing-footer{padding-left:15px}.layout-label select{max-width:100px}.key{font-size:9px;height:29px}.key.wide{font-size:7px}.hands-area{flex-wrap:wrap;justify-content:center}.finger-copy{text-align:center}footer{gap:20px;line-height:1.7}#saveState{max-width:120px;text-align:right}}@media print{body{background:white}body>*{display:none!important}#printArea{display:block!important;padding:0;color:black;font-size:11pt;line-height:1.45}#printArea h1{font-size:22pt;margin-bottom:15px}#printArea .print-meta{font-size:10pt;color:#555;border-bottom:1px solid #ddd;padding-bottom:14px;margin-bottom:24px}#printArea pre{font:inherit;white-space:pre-wrap;overflow-wrap:anywhere}#printArea .partial{font-size:10pt;color:#666}@page{margin:22mm}}

/* Viewport-sized practice desk: the reference scrolls, the keyboard stays visible. */
@media screen {
 body{height:100dvh;min-height:560px;display:flex;flex-direction:column}
 header{height:58px;min-height:58px;padding:0 24px;gap:22px}
 .brand{font-size:18px}.logo{padding:7px 8px;font-size:19px}.brand small{font-size:8px}.course{font-size:10px}
 header>button{padding:8px 12px;font-size:12px}
 main{width:100%;max-width:1700px;flex:1;min-height:0;padding:12px 24px;display:flex;flex-direction:column}
 .intro{margin:0 0 10px;flex-shrink:0}.intro .eyebrow,.intro p{display:none}h1{font-size:22px;margin:0;letter-spacing:-.6px}.mode{padding:6px 10px;font-size:10px}
 .toolbar{padding:9px 14px;gap:18px;margin-bottom:12px;flex-shrink:0;border-radius:10px}.toolbar label{display:flex;align-items:center;gap:10px;width:235px;white-space:nowrap}.toolbar input{margin:0;padding:7px 9px;min-width:0}.lesson-info{padding-left:18px}.lesson-info small{margin-bottom:3px}.toolbar-actions{flex-direction:row}.toolbar-actions button{padding:9px 12px;font-size:12px}
 .workspace{flex:1;min-height:0;grid-template-columns:minmax(0,1fr) 220px;gap:14px}
 .practice{display:grid;grid-template-rows:minmax(100px,1fr) 103px 202px;gap:10px;min-height:0}
 .card{border-radius:10px}.section-head{padding:8px 14px;min-height:36px;flex-shrink:0}.section-head h2{font-size:12px}.step{width:21px;height:21px;font-size:9px}.font-tools button{padding:3px 7px}
 .reference-card{display:flex;flex-direction:column;min-height:0}#reference{position:relative;flex:1;min-height:0;height:auto;padding:1px 18px 10px;line-height:1.65;font-size:var(--textsize);scroll-behavior:auto}.reference-footer{padding:6px 14px;flex-shrink:0}
 .typing-card .section-head{padding:5px 14px;min-height:29px}#typing{height:40px!important;min-height:40px;max-height:40px;resize:none;padding:3px 16px;line-height:32px;white-space:pre;overflow:hidden;font-size:var(--textsize)}#typing::placeholder{font-size:13px;line-height:32px}.typing-footer{min-height:30px;height:30px;padding:2px 10px 2px 15px}#feedback{font-size:10px;line-height:1.3}.typing-footer button{padding:4px 7px}.typing-card{overflow:hidden}
 .guide{display:grid;grid-template-columns:minmax(0,1fr) 240px;grid-template-rows:36px 1fr;align-items:center}.guide>.section-head{grid-column:1/-1;width:100%;align-self:start}#keyboard{width:100%;max-width:none;padding:4px 14px 6px;margin:0}.key-row{gap:4px;margin-bottom:4px}.key{height:25px;font-size:10px;max-width:60px}.key.wide{max-width:85px}.key.space{max-width:330px}.hands-area{height:100%;border-top:0;border-left:1px solid #f1f2f5;flex-direction:column;justify-content:center;gap:3px;padding:6px 9px}#hands{width:165px;height:78px}.finger-copy{text-align:center}.finger-copy small{display:none}.finger-copy strong{font-size:11px;margin:3px 0}.finger-copy p{font-size:9px}
 aside{min-height:0;display:flex;flex-direction:column;gap:10px}.progress-card{padding:15px 17px}.progress-ring{width:100px;height:100px;margin:14px auto}.progress-ring>div{width:85px;height:85px}.progress-ring strong{font-size:28px}.progress-ring small{font-size:10px}.metric{padding:10px 0}.metric strong{font-size:18px}.metric>span{font-size:11px}.metric-note{margin:8px 0 0;font-size:9px;line-height:1.5}.takeaway{margin:0;padding:12px 15px}.takeaway h2,.takeaway p,.paper-icon{display:none}.takeaway button{margin:0;padding:9px 6px}.takeaway small{font-size:9px;margin-top:6px}.privacy{font-size:9px;line-height:1.4;margin:0 5px}footer{display:none}
}
@media screen and (max-height:740px) and (min-width:761px){
 header{height:48px;min-height:48px}.brand small{display:none}main{padding:9px 18px}.intro{margin-bottom:7px}h1{font-size:19px}.toolbar{margin-bottom:9px;padding:7px 12px}.practice{grid-template-rows:minmax(90px,1fr) 97px 177px;gap:8px}.guide{grid-template-rows:30px 1fr}.guide .section-head{min-height:30px;padding:5px 12px}.key{height:22px}.key-row{margin-bottom:3px}#hands{height:65px;width:145px}.typing-card .section-head{min-height:25px;padding:3px 12px}.typing-footer{height:28px;min-height:28px}.progress-card{padding:12px 15px}.progress-ring{margin:10px auto;width:80px;height:80px}.progress-ring>div{width:67px;height:67px}.progress-ring strong{font-size:24px}.metric{padding:7px 0}.metric-note{display:none}.takeaway small{display:none}
}
@media screen and (max-width:1100px){
 .workspace{grid-template-columns:minmax(0,1fr) 180px}.guide{grid-template-columns:minmax(0,1fr) 175px}.toolbar label{width:190px}.lesson-info strong{font-size:11px}.toolbar-actions button{font-size:11px;padding:8px}.course{font-size:9px}.progress-card{padding:12px}.metric>span{font-size:10px}#keyboard{padding-left:8px;padding-right:8px}.key-row{gap:3px}.finger-copy p{display:none}.hands-area{padding:4px}#hands{width:145px}
}
@media screen and (max-width:760px){
 body{min-height:640px}header{padding:7px 12px;flex-wrap:nowrap;height:49px;min-height:49px}.brand{font-size:15px}.brand small{display:none}.logo{font-size:16px;padding:7px}.course{display:none}header>button{font-size:10px;padding:7px}.intro{display:none}main{padding:8px}.toolbar{display:grid;grid-template-columns:1fr auto;gap:6px 10px;padding:8px;margin-bottom:8px}.toolbar label{width:auto;font-size:10px;gap:6px}.toolbar input{font-size:12px;padding:5px;max-width:150px}.lesson-info{grid-column:1/-1;grid-row:2;padding:0;border:0;min-width:0}.lesson-info small{display:none}.lesson-info strong{font-size:10px;display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.toolbar-actions{width:auto;gap:2px}.toolbar-actions button{padding:6px;font-size:10px}.workspace{display:grid;grid-template-columns:1fr;grid-template-rows:minmax(0,1fr) 61px;gap:8px}.practice{grid-template-rows:minmax(95px,1fr) 104px 207px;gap:8px}.section-head h2{font-size:11px}.section-head{padding:6px 10px}#reference{padding:2px 12px 8px;line-height:1.6}#typing{padding-left:12px}.typing-footer{height:35px;min-height:35px;padding-left:10px}#feedback{font-size:9px}#saveState{font-size:8px}.reference-footer{font-size:8px;padding:5px 10px}.guide{grid-template-columns:minmax(0,1fr) 116px;grid-template-rows:32px 1fr}.guide .section-head{padding:5px 9px;min-height:32px}.layout-label select{font-size:9px;max-width:100px}.key-row{gap:2px;margin-bottom:4px}.key{height:25px;font-size:8px;border-bottom-width:2px;border-radius:3px}.key.wide{font-size:6px}#keyboard{padding:2px 6px}.hands-area{padding:4px;gap:5px}#hands{width:108px;height:62px}.finger-copy strong{font-size:9px;line-height:1.5}.finger-copy p{display:none}aside{display:flex;flex-direction:row;gap:6px}.progress-card{flex:1;padding:5px 7px;display:flex;align-items:center;justify-content:space-around;gap:5px}.progress-card>.eyebrow,.progress-ring,.metric-note,.privacy{display:none}.metric{display:flex;flex-direction:column;gap:5px;border:0;padding:0}.metric>span{font-size:8px;white-space:nowrap}.metric strong{font-size:13px}.metric small{font-size:8px}.takeaway{display:flex;align-items:center;padding:5px;width:82px}.takeaway button{font-size:9px;padding:6px 2px}.takeaway small{display:none}
}
@media screen and (max-width:480px){
 .guide{grid-template-columns:1fr;grid-template-rows:30px 119px 56px}.key{height:19px}.key-row{margin-bottom:3px}.hands-area{border-left:0;border-top:1px solid #f1f2f5;flex-direction:row;padding:2px 10px;gap:10px}#hands{height:49px;width:115px}.finger-copy{max-width:190px;text-align:left}.finger-copy strong{font-size:9px}.toolbar label{font-size:0}.toolbar input{max-width:120px}.toolbar-actions .quiet{font-size:9px}
}

#exportStatus{display:block;font-size:10px;line-height:1.45;margin-top:8px;color:#59457c}#exportStatus:empty{display:none}
@media screen and (max-width:760px){.takeaway{position:relative}#exportStatus:not(:empty){position:absolute;right:0;bottom:100%;width:210px;padding:9px;background:#f0ebfc;border:1px solid #d9ceed;border-radius:7px;box-shadow:0 2px 10px #30204015}}

[hidden]{display:none!important}#account{margin-left:auto;font-size:11px}header>#openTeacher{margin-left:0}.takeaway{display:flex;flex-direction:column;gap:7px}.takeaway button{width:100%}#accessDialog h2{font-size:24px;margin:10px 0}#accessRole{font-size:14px;width:100%;margin:7px 0 0;padding:10px}#accessError{color:#a72942}#historyDialog{max-width:900px;max-height:90dvh;overflow:auto}#historyDialog h2{font-size:24px;margin:6px 0}.history-actions{display:flex;gap:8px;margin-top:15px}.history-actions button{font-size:12px}#teacherControls>label{display:flex;align-items:center;gap:10px}#studentSelect{font-size:14px;padding:8px;min-width:190px}details{border:1px solid var(--line);border-radius:9px;padding:12px}summary{cursor:pointer;font-size:12px;color:var(--purple)}#newStudentForm{display:flex;align-items:end;gap:12px;margin-bottom:12px}#newStudentForm label{flex:1}#newStudentForm button{margin-bottom:7px}#newCode{white-space:pre-wrap;user-select:all;color:var(--purple);font-weight:600}#historyCharts{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin:20px 0}.chart-panel{border:1px solid var(--line);border-radius:10px;padding:12px}.chart-panel h3{margin:0 0 5px;font-size:13px}.chart-panel svg{width:100%;height:auto}.chart-panel p{margin:0;font-size:10px}#timeline{list-style:none;padding:0;margin:15px 0}#timeline li{border-left:3px solid #bfa8e9;margin:0 0 15px;padding:8px 15px;background:#faf9fc;border-radius:0 8px 8px 0}#timeline time{font-size:11px;color:var(--muted)}#timeline h3{font-size:14px;margin:7px 0}#timeline p{margin:3px 0}#historyStatus{color:#66507b}#accessDialog form>button{margin-top:14px}#historyDialog .modal-head{position:sticky;top:-27px;background:white;padding:10px 0;z-index:1}
@media screen and (max-width:760px){#account{font-size:9px;padding:5px}header{gap:5px}.takeaway{width:82px;gap:3px;padding:3px}.takeaway button{padding:3px 1px;font-size:9px}.takeaway small{display:none}#historyCharts{grid-template-columns:1fr}#newStudentForm{display:block}#historyDialog{padding:18px}.history-actions button{font-size:11px}}
