:root{--navy:#153455;--ink:#243b52;--orange:#f57636;--orange-dark:#dd5819;--pale:#fff2e8;--canvas:#f7f8fa;--line:#e5e9ec;--green:#15835b;--red:#c53d3d;--white:#fff;--shadow:0 18px 50px rgba(21,52,85,.09);font-family:"Nunito","Aptos","Noto Sans SC",system-ui,sans-serif;color:var(--ink);background:var(--canvas);font-synthesis:none}
*{box-sizing:border-box}body{margin:0;min-width:320px;background:radial-gradient(circle at 85% 10%,#fff0e4 0,transparent 24rem),var(--canvas)}button,input,textarea{font:inherit}button{cursor:pointer}.hidden{display:none!important}.site-header{height:76px;padding:0 clamp(18px,4vw,64px);display:flex;align-items:center;justify-content:space-between;background:var(--navy);color:white;position:sticky;top:0;z-index:20;box-shadow:0 4px 18px rgba(21,52,85,.16)}.brand{display:flex;align-items:center;gap:12px;border:0;background:transparent;color:white;text-align:left;padding:0}.brand-mark{width:46px;height:46px;background:var(--orange);display:grid;place-items:center;border-radius:13px}.brand-mark img{width:34px;height:28px;object-fit:contain}.brand strong,.brand small{display:block}.brand strong{font-size:1.05rem}.brand small{opacity:.72;margin-top:2px}.header-actions{display:flex;align-items:center;gap:12px}.student-chip{border:1px solid rgba(255,255,255,.25);color:#fff;background:rgba(255,255,255,.1);border-radius:999px;padding:9px 14px}.locale-switch{display:flex;background:rgba(255,255,255,.1);padding:3px;border-radius:12px}.locale-switch button{border:0;background:transparent;color:white;padding:8px 11px;border-radius:9px;font-size:.88rem}.locale-switch button.active{background:white;color:var(--navy)}main{width:min(1180px,calc(100% - 36px));margin:0 auto;min-height:calc(100vh - 136px)}.screen{padding:clamp(36px,6vw,74px) 0}.welcome-screen{display:grid;grid-template-columns:1.08fr .92fr;align-items:center;gap:clamp(30px,6vw,80px);min-height:calc(100vh - 136px)}.eyebrow{text-transform:uppercase;color:var(--orange-dark);font-size:.8rem;font-weight:900;letter-spacing:.11em;margin-bottom:10px}.welcome-copy h1,.page-heading h1,.result-hero h1{font-size:clamp(2.2rem,4.3vw,4.6rem);line-height:1.04;color:var(--navy);margin:0 0 18px;letter-spacing:-.04em}.welcome-copy>p{font-size:1.15rem;line-height:1.7;max-width:620px;margin:0 0 30px}.name-form{background:white;border:1px solid var(--line);border-radius:22px;padding:22px;box-shadow:var(--shadow);max-width:650px}.name-form label,.typing-label{display:block;font-weight:900;color:var(--navy);margin-bottom:9px}.field-row{display:flex;gap:10px}.field-row input{min-width:0;flex:1;border:2px solid #ccd5dc;border-radius:14px;padding:14px 16px;font-size:1.05rem;outline:none}.field-row input:focus,.typing-workspace textarea:focus{border-color:var(--orange);box-shadow:0 0 0 4px rgba(245,118,54,.14)}.primary-button,.secondary-button,.quiet-button,.back-button{border:0;border-radius:14px;padding:13px 18px;font-weight:900;min-height:48px}.primary-button{background:var(--orange);color:white;box-shadow:0 7px 16px rgba(245,118,54,.24)}.primary-button:hover{background:var(--orange-dark)}.primary-button:disabled{opacity:.55;cursor:not-allowed}.secondary-button{background:#eaf0f4;color:var(--navy)}.quiet-button,.back-button{background:white;color:var(--navy);border:1px solid var(--line)}.back-button:before{content:"‹";margin-right:7px;font-size:1.2em}.form-message{min-height:1.2em;color:var(--red);margin:8px 2px 0}.welcome-notes{display:flex;flex-wrap:wrap;gap:10px;margin-top:18px}.welcome-notes>span{background:var(--pale);border:1px solid #ffd6bd;padding:9px 12px;border-radius:999px;font-size:.86rem}.welcome-notes b{color:var(--orange-dark);margin-right:4px}.welcome-characters{min-height:520px;position:relative}.character-card{position:absolute;background:white;border:1px solid var(--line);box-shadow:var(--shadow);border-radius:28px;overflow:hidden}.character-card img{width:100%;height:100%;object-fit:contain;object-position:bottom}.character-card span{position:absolute;left:14px;bottom:14px;background:var(--navy);color:white;padding:9px 12px;border-radius:999px;font-weight:900}.panda-card{width:64%;height:78%;left:0;bottom:0;background:linear-gradient(160deg,#fff 45%,#fff1e5)}.lulu-card{width:48%;height:58%;right:0;top:0;background:linear-gradient(160deg,#fff 45%,#eaf5ff)}.page-heading{display:flex;align-items:flex-end;justify-content:space-between;gap:24px;margin-bottom:26px}.page-heading h1{font-size:clamp(2rem,3.4vw,3.4rem);margin:0}.filter-panel{display:grid;grid-template-columns:1fr 1.35fr;gap:22px;background:white;border:1px solid var(--line);padding:20px;border-radius:20px}.filter-panel fieldset{border:0;padding:0;margin:0;min-width:0}.filter-panel legend{font-weight:900;color:var(--navy);margin-bottom:10px}.segmented{display:flex;flex-wrap:wrap;gap:8px}.segmented button{border:1px solid var(--line);background:var(--canvas);color:var(--ink);padding:10px 14px;border-radius:11px;font-weight:800}.segmented button.active{background:var(--navy);border-color:var(--navy);color:white}.lesson-summary{display:flex;justify-content:space-between;gap:16px;align-items:center;margin:24px 2px 14px;font-weight:800}.legend{display:flex;align-items:center;gap:7px;font-size:.85rem;color:#607080}.dot{width:8px;height:8px;border-radius:50%}.dot.daily{background:var(--green)}.dot.rank{background:var(--orange)}.lesson-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}.lesson-card{display:flex;flex-direction:column;text-align:left;border:1px solid var(--line);background:white;border-radius:20px;padding:20px;min-height:210px;color:var(--ink);transition:.18s transform,.18s box-shadow}.lesson-card:hover{transform:translateY(-3px);box-shadow:var(--shadow)}.lesson-card .lesson-meta{display:flex;justify-content:space-between;align-items:center;margin-bottom:24px}.lesson-pill{padding:6px 9px;border-radius:999px;background:#e8f5ef;color:var(--green);font-size:.76rem;font-weight:900}.lesson-card.rankable .lesson-pill{background:var(--pale);color:var(--orange-dark)}.level{font-size:.8rem;color:#6c7b87}.lesson-card h2{margin:0 0 10px;color:var(--navy);font-size:1.25rem}.lesson-card p{margin:0;color:#607080;line-height:1.55;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}.lesson-card .start-label{margin-top:auto;padding-top:18px;color:var(--orange-dark);font-weight:900}.practice-topbar{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:20px;margin-bottom:18px}.practice-title{text-align:center}.practice-title span,.practice-title strong{display:block}.practice-title span{font-size:.8rem;color:#6d7c87;text-transform:uppercase;letter-spacing:.08em}.practice-title strong{color:var(--navy);font-size:1.35rem}.timer{justify-self:end;background:var(--navy);color:white;padding:10px 16px;border-radius:14px;text-align:center;min-width:96px}.timer span,.timer strong{display:block}.timer span{font-size:.72rem;opacity:.7}.timer strong{font-size:1.25rem;font-variant-numeric:tabular-nums}.timer.danger{background:var(--orange-dark)}.practice-layout{display:grid;grid-template-columns:minmax(0,1fr) 250px;gap:18px}.typing-workspace,.coach-panel,.keyboard-panel,.ranking-card{background:white;border:1px solid var(--line);border-radius:22px;box-shadow:var(--shadow)}.typing-workspace{padding:24px}.target-header{display:flex;justify-content:space-between;align-items:center;color:#6c7b87;font-size:.85rem;font-weight:900;margin-bottom:10px}.composition-note{color:var(--orange-dark)}.target-text{font-size:clamp(1.45rem,2.25vw,2.2rem);line-height:1.6;color:var(--navy);min-height:125px;padding:16px 18px;background:#f3f6f8;border-radius:16px;margin-bottom:18px;letter-spacing:.01em}.target-text span.correct{color:var(--green)}.target-text span.current{background:#ffe0cb;color:var(--navy);border-bottom:3px solid var(--orange)}.target-text span.wrong{background:#ffe0e0;color:var(--red);text-decoration:underline}.typing-workspace textarea{width:100%;resize:none;border:2px solid #ccd5dc;border-radius:16px;padding:16px;font-size:1.2rem;line-height:1.55;outline:none;color:var(--navy)}.live-metrics,.result-metrics{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-top:14px}.live-metrics>div,.result-metrics>div{background:var(--canvas);border:1px solid var(--line);border-radius:14px;padding:12px}.live-metrics span,.live-metrics strong,.result-metrics span,.result-metrics strong{display:block}.live-metrics span,.result-metrics span{font-size:.76rem;color:#6c7b87}.live-metrics strong{font-size:1.3rem;color:var(--navy);margin-top:3px}.practice-actions,.result-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:16px}.coach-panel{padding:18px;text-align:center;align-self:start;background:linear-gradient(180deg,#fff 60%,var(--pale))}.coach-panel img{width:100%;height:210px;object-fit:contain;object-position:bottom}.coach-panel strong{font-size:1.1rem;color:var(--navy)}.coach-panel p{line-height:1.5;margin:7px 0 2px}.keyboard-panel{margin-top:18px;padding:18px;box-shadow:none}.keyboard-heading{display:flex;justify-content:space-between;font-weight:900;color:var(--navy);margin-bottom:12px}.keyboard{display:flex;flex-direction:column;gap:6px;align-items:center}.key-row{display:flex;gap:6px;justify-content:center;width:100%}.key{height:42px;min-width:42px;padding:0 9px;display:grid;place-items:center;border:1px solid #cbd4dc;border-bottom-width:3px;border-radius:8px;background:#f6f8fa;font-size:.82rem;font-weight:800;color:var(--navy)}.key.wide{min-width:76px}.key.space{width:min(340px,48%)}.key.active{background:var(--orange);border-color:var(--orange-dark);color:white;transform:translateY(2px);border-bottom-width:1px}.result-hero{display:flex;align-items:center;justify-content:center;gap:30px;text-align:left;max-width:800px;margin:0 auto 28px}.result-hero img{width:180px;height:190px;object-fit:contain}.result-hero h1{font-size:clamp(2rem,4vw,3.7rem);margin-bottom:8px}.result-hero p{font-size:1.1rem;line-height:1.5;margin:0}.result-metrics{grid-template-columns:repeat(4,1fr);max-width:900px;margin:0 auto}.result-metrics>div{text-align:center;padding:20px}.result-metrics strong{font-size:2rem;color:var(--navy);margin-top:5px}.ranking-status{max-width:700px;margin:20px auto;text-align:center;padding:14px 16px;border-radius:14px;background:var(--pale);color:var(--orange-dark);font-weight:800}.result-actions{justify-content:center}.leaderboard-filters{grid-template-columns:1fr 1fr;margin-bottom:18px}.ranking-card{overflow:hidden;box-shadow:none}.ranking-head,.ranking-row{display:grid;grid-template-columns:60px minmax(0,1fr) 120px 120px;align-items:center;gap:12px;padding:14px 20px}.ranking-head{background:var(--navy);color:white;font-size:.8rem;font-weight:900}.ranking-row{border-bottom:1px solid var(--line)}.ranking-row:last-child{border-bottom:0}.ranking-row.top-three .rank-number{background:var(--orange);color:white}.rank-number{width:34px;height:34px;display:grid;place-items:center;border-radius:50%;background:#eaf0f4;font-weight:900}.student-name strong,.student-name small{display:block}.student-name small{color:#778692;margin-top:2px}.ranking-value{font-weight:900;color:var(--navy)}.empty-ranking{padding:48px 20px;text-align:center;color:#6c7b87}.ranking-note{text-align:center;color:#6c7b87;font-size:.9rem}footer{min-height:60px;display:flex;justify-content:center;align-items:center;gap:9px;color:#70808b;font-size:.82rem;padding:14px}footer img{width:27px;height:24px;object-fit:contain}
.target-text{white-space:break-spaces;overflow-wrap:anywhere;word-break:normal;overflow-x:hidden;overflow-y:auto}.target-text .target-annotation{color:#697987;font-size:.72em;margin-left:.08em;white-space:nowrap}.key.annotated{grid-auto-flow:column;gap:2px;padding-inline:5px}.key.annotated small{font-size:.58rem;line-height:1;opacity:.82}
.keyboard-panel{margin:0 0 12px;padding:14px 16px;scroll-margin-top:88px}.typing-workspace .keyboard-panel{background:#fbfcfd;border-radius:16px;box-shadow:none}.keyboard-toolbar{display:flex;align-items:flex-end;justify-content:space-between;gap:22px;margin-bottom:10px}.keyboard-toolbar>div:first-child{display:flex;flex-direction:column;gap:4px;color:var(--navy)}.keyboard-toolbar>div:first-child strong{font-size:1.05rem}.keyboard-toolbar>div:first-child span{font-size:.9rem;font-weight:900}.keyboard-picker{border:0;padding:0;margin:0;display:flex;align-items:center;gap:10px}.keyboard-picker legend{float:left;font-size:.76rem;font-weight:900;color:#6c7b87}.keyboard-picker .segmented{flex-wrap:nowrap}.keyboard-picker .segmented button{padding:8px 12px;white-space:nowrap}.key{border-color:rgba(21,52,85,.22);box-shadow:inset 0 -1px 0 rgba(21,52,85,.12)}.key.extra-wide{min-width:94px}.key.system-key{font-size:.68rem;min-width:46px}.keyboard[data-layout="international"] .key-row-2{padding-left:10px}.keyboard[data-layout="international"] .key-row-3{padding-left:18px}.keyboard[data-layout="abnt2"] .key-row-2{padding-left:5px}.finger-lp{--finger:#f7b0ad}.finger-lr{--finger:#c7b8f4}.finger-lm{--finger:#9edced}.finger-li{--finger:#e6add8}.finger-ri{--finger:#d6dadd}.finger-rm{--finger:#b9b0ee}.finger-rr{--finger:#a8df85}.finger-rp{--finger:#f3a7a2}.finger-th{--finger:#b6c4f5}.key[class*="finger-"]{background:color-mix(in srgb,var(--finger) 72%,white)}.key.active{background:var(--orange);border-color:var(--orange-dark);box-shadow:0 0 0 4px rgba(245,118,54,.2);color:white}.finger-legend{display:flex;justify-content:center;flex-wrap:wrap;gap:7px 13px;margin-top:8px;color:#607080;font-size:.72rem;font-weight:800}.finger-legend span{display:flex;align-items:center;gap:5px}.finger-dot{display:inline-block;width:12px;height:12px;border-radius:4px;background:var(--finger);border:1px solid rgba(21,52,85,.17)}
.keyboard{gap:0;width:100%}.key-row{display:grid;grid-template-columns:repeat(60,minmax(0,1fr));gap:0;width:min(100%,960px);height:48px;padding:0!important}.key,.key.wide,.key.extra-wide,.key.space,.key.system-key{grid-column:span var(--span);min-width:0!important;width:auto;height:42px;margin:3px;padding:0 5px}.key-placeholder{visibility:hidden;pointer-events:none}.key.iso-enter{height:90px;z-index:2;align-self:start;border-radius:8px 8px 12px 8px}.keyboard[data-layout="abnt2"] .key-row-2{position:relative;z-index:1}.keyboard[data-layout="abnt2"] .key-row-1{position:relative;z-index:2}
.practice-layout{grid-template-columns:1fr}.prompt-row{display:grid;grid-template-columns:minmax(0,1fr) 180px;align-items:stretch;gap:18px;margin-bottom:18px;scroll-margin-top:88px}.prompt-content{min-width:0}.prompt-row .target-text{height:calc(100% - 28px);margin-bottom:0}.coach-panel.coach-compact{padding:12px;display:flex;flex-direction:column;justify-content:center;box-shadow:none}.coach-panel.coach-compact img{width:100%;height:112px}.coach-panel.coach-compact strong{font-size:.95rem}.coach-panel.coach-compact p{font-size:.82rem;line-height:1.35;margin-top:4px}
.combo-guide{margin-top:9px;border-top:1px solid var(--line);padding-top:8px}.combo-guide summary{cursor:pointer;color:var(--navy);font-weight:900;list-style-position:inside}.combo-current{min-height:1.4em;margin:9px 0 7px;color:var(--orange-dark);font-weight:900}.combo-rules{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:8px}.combo-rules span{background:#f6f8fa;border:1px solid var(--line);border-radius:10px;padding:8px 9px;font-size:.75rem;line-height:1.4;color:#566977}.combo-rules kbd{display:inline-block;border:1px solid #cbd4dc;border-bottom-width:2px;background:white;border-radius:5px;padding:1px 5px;color:var(--navy);font:800 .72rem inherit}.key.sequence-key{position:relative}.key.sequence-key:after{content:attr(data-step);position:absolute;right:2px;top:2px;width:15px;height:15px;border-radius:50%;display:grid;place-items:center;background:white;color:var(--orange-dark);font-size:.6rem;font-weight:1000}
@media(max-width:900px){.welcome-screen{grid-template-columns:1fr}.welcome-characters{min-height:390px}.lesson-grid{grid-template-columns:repeat(2,1fr)}.practice-layout{grid-template-columns:1fr}.coach-panel{display:flex;text-align:left;align-items:center}.coach-panel img{width:130px;height:130px}.filter-panel{grid-template-columns:1fr}.practice-topbar{grid-template-columns:1fr auto}.practice-title{grid-row:2;grid-column:1/-1}.timer{grid-column:2;grid-row:1}.key{min-width:34px;padding:0 6px;height:38px;font-size:.72rem}.combo-rules{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:620px){.site-header{height:auto;min-height:70px;padding:10px 14px}.brand small{display:none}.brand-mark{width:40px;height:40px}.student-chip{display:none!important}.locale-switch button{padding:7px 8px}.screen{padding:30px 0}.welcome-copy h1{font-size:2.35rem}.field-row{flex-direction:column}.welcome-characters{min-height:310px}.character-card span{font-size:.75rem}.page-heading{align-items:flex-start;flex-direction:column}.lesson-summary{align-items:flex-start;flex-direction:column}.lesson-grid{grid-template-columns:1fr}.practice-topbar{gap:8px}.back-button{font-size:0;width:46px;padding:0}.back-button:before{font-size:1.7rem;margin:0}.typing-workspace{padding:16px}.target-text{font-size:1.3rem;min-height:110px}.coach-panel{padding:12px}.coach-panel img{width:92px;height:104px}.keyboard-panel{overflow-x:auto}.keyboard{min-width:660px}.live-metrics{grid-template-columns:repeat(3,1fr)}.result-hero{align-items:flex-start;gap:12px}.result-hero img{width:100px;height:120px}.result-metrics{grid-template-columns:repeat(2,1fr)}.result-actions{flex-direction:column}.ranking-head,.ranking-row{grid-template-columns:44px minmax(0,1fr) 76px 70px;padding:12px 10px;gap:6px}.leaderboard-filters{grid-template-columns:1fr}}
@media(max-width:700px){.keyboard-toolbar{align-items:stretch;flex-direction:column;gap:10px}.keyboard-picker{align-items:flex-start;flex-direction:column}.finger-legend{min-width:660px;justify-content:flex-start}.prompt-row{grid-template-columns:1fr}.coach-panel.coach-compact{flex-direction:row;justify-content:flex-start;text-align:left}.coach-panel.coach-compact img{width:86px;height:86px;flex:0 0 auto}}
@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important;transition:none!important}}
:root .combo-guide{margin:12px 0 18px;padding:14px 16px;background:#fff2e8;border:1px solid #ffd6bd;border-radius:12px}:root .combo-guide summary{font-size:1.15rem}:root .combo-current{font-size:1.1rem}:root .combo-rules{grid-template-columns:repeat(auto-fit,minmax(210px,1fr))}:root .combo-rules span{font-size:1rem;line-height:1.6}:root .combo-rules kbd{font-family:inherit;font-size:1rem}.custom-text{margin-top:24px;padding:18px;background:white;border:1px solid var(--line);border-radius:16px}.custom-text summary{font-weight:900;font-size:1.1rem;cursor:pointer}.custom-text textarea{display:block;width:100%;margin:12px 0;padding:12px;font:inherit;border:1px solid var(--line);border-radius:10px}
.lesson-search{display:block;margin:16px 0;font-weight:800;color:var(--navy)}.lesson-search input{display:block;width:100%;margin-top:8px;padding:12px;border:1px solid var(--line);border-radius:12px;font:inherit}
